From d770c8f6e2f4984c31d222c091e329033db35f43 Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Thu, 16 May 2024 14:33:45 -0700 Subject: [PATCH 01/58] Initial pass at AXI sub -- read channel only --- src/axi/rtl/axi_addr.v | 235 ++++++++++++++++++ src/axi/rtl/axi_if.sv | 155 ++++++++++++ src/axi/rtl/axi_pkg.sv | 52 ++++ src/axi/rtl/axi_sub_rd.sv | 368 ++++++++++++++++++++++++++++ src/axi/rtl/skidbuffer.v | 495 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 1305 insertions(+) create mode 100644 src/axi/rtl/axi_addr.v create mode 100644 src/axi/rtl/axi_if.sv create mode 100644 src/axi/rtl/axi_pkg.sv create mode 100644 src/axi/rtl/axi_sub_rd.sv create mode 100644 src/axi/rtl/skidbuffer.v diff --git a/src/axi/rtl/axi_addr.v b/src/axi/rtl/axi_addr.v new file mode 100644 index 000000000..8b38874f7 --- /dev/null +++ b/src/axi/rtl/axi_addr.v @@ -0,0 +1,235 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Filename: axi_addr.v +// {{{ +// Project: WB2AXIPSP: bus bridges and other odds and ends +// +// Purpose: The AXI (full) standard has some rather complicated addressing +// modes, where the address can either be FIXED, INCRementing, or +// even where it can WRAP around some boundary. When in either INCR or +// WRAP modes, the next address must always be aligned. In WRAP mode, +// the next address calculation needs to wrap around a given value, and +// that value is dependent upon the burst size (i.e. bytes per beat) and +// length (total numbers of beats). Since this calculation can be +// non-trivial, and since it needs to be done multiple times, the logic +// below captures it for every time it might be needed. +// +// 20200918 - modified to accommodate (potential) AXI3 burst lengths +// +// Creator: Dan Gisselquist, Ph.D. +// Gisselquist Technology, LLC +// +//////////////////////////////////////////////////////////////////////////////// +// }}} +// Copyright (C) 2019-2024, Gisselquist Technology, LLC +// {{{ +// This file is part of the WB2AXIP project. +// +// The WB2AXIP project contains free software and gateware, licensed under the +// Apache License, Version 2.0 (the "License"). You may not use this project, +// or this file, except in compliance with the License. You may obtain a copy +// of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. +// +//////////////////////////////////////////////////////////////////////////////// +// +// +`default_nettype none +// }}} +module axi_addr #( + // {{{ + parameter AW = 32, + DW = 32, + // parameter [0:0] OPT_AXI3 = 1'b0, + localparam LENB = 8 + // }}} + ) ( + // {{{ + input wire [AW-1:0] i_last_addr, + input wire [2:0] i_size, // 1b, 2b, 4b, 8b, etc + input wire [1:0] i_burst, // fixed, incr, wrap, reserved + input wire [LENB-1:0] i_len, + output wire [AW-1:0] o_next_addr + // }}} + ); + + // Parameter/register declarations + // {{{ + localparam DSZ = $clog2(DW)-3; + localparam [1:0] FIXED = 2'b00; + // localparam [1:0] INCREMENT = 2'b01; + // localparam [1:0] WRAP = 2'b10; + localparam IN_AW = (AW >= 12) ? 12 : AW; + localparam [IN_AW-1:0] ONE = 1; + + reg [IN_AW-1:0] wrap_mask, increment; + reg [IN_AW-1:0] crossblk_addr, aligned_addr, unaligned_addr; + // }}} + + // Address increment + // {{{ + always @(*) + if (DSZ == 0) + increment = 1; + else if (DSZ == 1) + increment = (i_size[0]) ? 2 : 1; + else if (DSZ == 2) + increment = (i_size[1]) ? 4 : ((i_size[0]) ? 2 : 1); + else if (DSZ == 3) + case(i_size[1:0]) + 2'b00: increment = 1; + 2'b01: increment = 2; + 2'b10: increment = 4; + 2'b11: increment = 8; + endcase + else + increment = (1<1) ? 1 : (AW-1):0]= 0; + 2'b11: aligned_addr[(AW-1>2) ? 2 : (AW-1):0]= 0; + endcase + // }}} + end else begin + // {{{ + // Align any subsequent address + case(i_size) + 3'b001: aligned_addr[ 0] = 0; + 3'b010: aligned_addr[(AW-1>1) ? 1 : (AW-1):0]=0; + 3'b011: aligned_addr[(AW-1>2) ? 2 : (AW-1):0]=0; + 3'b100: aligned_addr[(AW-1>3) ? 3 : (AW-1):0]=0; + 3'b101: aligned_addr[(AW-1>4) ? 4 : (AW-1):0]=0; + 3'b110: aligned_addr[(AW-1>5) ? 5 : (AW-1):0]=0; + 3'b111: aligned_addr[(AW-1>6) ? 6 : (AW-1):0]=0; + default: aligned_addr = unaligned_addr; + endcase + // }}} + end + // }}} + end else + aligned_addr = i_last_addr[IN_AW-1:0]; + // }}} + + // crossblk_addr from aligned_addr, for WRAP addressing + // {{{ + always @(*) + if (i_burst[1]) + begin + // WRAP! + crossblk_addr[IN_AW-1:0] = (i_last_addr[IN_AW-1:0] & ~wrap_mask) + | (aligned_addr & wrap_mask); + end else + crossblk_addr[IN_AW-1:0] = aligned_addr; + // }}} + + // o_next_addr: Guarantee only the bottom 12 bits change + // {{{ + // This is really a logic simplification. AXI bursts aren't allowed + // to cross 4kB boundaries. Given that's the case, we don't have to + // suffer from the propagation across all AW bits, and can limit any + // address propagation to just the lower 12 bits + generate if (AW > 12) + begin : WIDE_ADDRESS + assign o_next_addr = { i_last_addr[AW-1:12], + crossblk_addr[11:0] }; + end else begin : NARROW_ADDRESS + assign o_next_addr = crossblk_addr[AW-1:0]; + end endgenerate + // }}} + + // Make Verilator happy + // {{{ + // Verilator lint_off UNUSED + wire unused; + assign unused = (LENB <= 4) ? &{1'b0, i_len[0] } + : &{ 1'b0, i_len[LENB-1:4], i_len[0] }; + // Verilator lint_on UNUSED + // }}} +endmodule diff --git a/src/axi/rtl/axi_if.sv b/src/axi/rtl/axi_if.sv new file mode 100644 index 000000000..3f4662788 --- /dev/null +++ b/src/axi/rtl/axi_if.sv @@ -0,0 +1,155 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Description: +// Signals for a standard AXI4 compliant interface +// + +interface axi_if #(parameter AW = 32, parameter DW = 32, parameter IW = 3, parameter UW = 32); + + import axi_pkg::*; + + // AXI AR + logic [AW-1:0] araddr; + logic [1:0] arburst; + logic [2:0] arsize; + logic [7:0] arlen; + logic [UW-1:0] aruser; + logic [IW-1:0] arid; + logic arlock; + logic arvalid; + logic arready; + + // AXI R + logic [DW-1:0] rdata; + logic [1:0] rresp; + logic [IW-1:0] rid; + logic rlast; + logic rvalid; + logic rready; + + // AXI AW + logic [AW-1:0] awaddr; + logic [1:0] awburst; + logic [2:0] awsize; + logic [7:0] awlen; + logic [UW-1:0] awuser; + logic [IW-1:0] awid; + logic awlock; + logic awvalid; + logic awready; + + // AXI W + logic [DW-1:0] wdata; + logic [DW/8-1:0] wstrb; + logic wvalid; + logic wready; + + // AXI B + logic [1:0] bresp; + logic [IW-1:0] bid; + logic bvalid; + logic bready; + + // Modport for read manager + modport r_mgr ( + // AR + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + input arready, + // R + input rdata, + input rresp, + input rid, + input rlast, + input rvalid, + output rready, + ); + + // Modport for write manager + modport w_mgr ( + // AW + output awaddr, + output awburst, + output awsize, + output awlen, + output awuser, + output awid, + output awlock, + output awvalid, + input awready, + // W + output wdata, + output wstrb, + output wvalid, + input wready, + // B + input bresp, + input bid, + input bvalid, + output bready + ); + + // Modport for read subordinate + modport r_sub ( + // AR + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + output arready, + // R + output rdata, + output rresp, + output rid, + output rlast, + output rvalid, + input rready, + ); + + // Modport for write subordinate + modport w_sub ( + // AW + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + output awready, + // W + input wdata, + input wstrb, + input wvalid, + output wready, + // B + output bresp, + output bid, + output bvalid, + input bready + ); + +endinterface diff --git a/src/axi/rtl/axi_pkg.sv b/src/axi/rtl/axi_pkg.sv new file mode 100644 index 000000000..36346f00d --- /dev/null +++ b/src/axi/rtl/axi_pkg.sv @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +package axi_pkg; + + // AXI Burst Enum + typedef enum logic [1:0] { + AXI_BURST_FIXED = 2'b00, + AXI_BURST_INCR = 2'b01, + AXI_BURST_WRAP = 2'b10, + AXI_BURST_RESERVED = 2'b11 + } axi_burst_e; + + // AXI Resp Enum + typedef enum logic [1:0] { + AXI_RESP_OKAY = 2'b00, + AXI_RESP_EXOKAY = 2'b01, + AXI_RESP_SLVERR = 2'b10, + AXI_RESP_DECERR = 2'b11 + } axi_resp_e; + + // Transaction context + typedef struct packed { + logic [AW-1:0] addr; + logic [1:0] burst; + logic [2:0] size; + logic [7:0] len; + logic [UW-1:0] user; + logic [IW-1:0] id; + logic lock; + } axi_ctx_t; + + typedef struct packed { + logic [IW-1:0] id; + logic [UW-1:0] user; + logic [ 1:0] resp; + logic last; + } xfer_ctx_t; + +endpackage diff --git a/src/axi/rtl/axi_sub_rd.sv b/src/axi/rtl/axi_sub_rd.sv new file mode 100644 index 000000000..186cf7bef --- /dev/null +++ b/src/axi/rtl/axi_sub_rd.sv @@ -0,0 +1,368 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// ------------------------------------------------------------- +// AXI Read Subordinate +// ------------------------------------------------------------- +// Description: +// Subordinate to convert AXI protocol reads into internal component accesses +// +// Limitations: +// - When multiple ID tracking is enabled, read responses are returned in the +// same order they are received, regardless of ID. +// +// ------------------------------------------------------------- + +module axi_sub_rd import axi_pkg::*; #( + parameter AW = 32, // Address Width + parameter DW = 32, // Data Width + BC = DW/8, // Byte Count + BW = $clog2(BC), // Byte count Width + parameter UW = 32, // User Width + parameter IW = 1, // ID Width + ID_NUM = 1 << IW, // Don't override + + parameter EX_EN = 1, // Enable exclusive access tracking w/ AxLOCK + parameter C_LAT = 0 // Component latency in clock cycles from (dv&&!hld) -> rdata + // Must be const per component + // For registers, typically 0 + // For SRAM, 1 or more +) ( + input clk, + input rst_n, + + // AXI INF + axi_if.r_sub s_axi_if, + + // Exclusive Access Signals + input logic ex_clr, + input logic [IW -1:0] ex_clr_id, + output logic [ID_NUM-1:0] ex_active, + output var axi_ctx_t [ID_NUM-1:0] ex_ctx, + + //COMPONENT INF + output logic dv, + output logic [AW-1:0] addr, // Byte address + output logic [UW-1:0] user, + output logic last, // Asserted with final 'dv' of a burst + input logic hld, + input logic err, + + input logic [DW-1:0] rdata // Integ requires: Component dwidth == AXI dwidth +); + + // --------------------------------------- // + // Localparams/Typedefs // + // --------------------------------------- // + + + // --------------------------------------- // + // Signals // + // --------------------------------------- // + + genvar cp; // Context pipeline + genvar dp; // Data pipeline + genvar ex; // Exclusive contexts + + // Active transaction signals + // track requests as they are sent to component + axi_ctx_t txn_ctx; + logic [AW-1:0] txn_addr_nxt; + logic [ 7:0] txn_cnt; // Internal down-counter to track txn progress + logic txn_active; + logic [C_LAT:0] txn_rvalid; + xfer_ctx_t [C_LAT:0] txn_xfer_ctx; + logic txn_final_beat; + + // Data pipeline signals (skid buffer) + // track data after it is received from component + logic [C_LAT+1:0] [DW-1:0] dp_rdata; + xfer_ctx_t [C_LAT+1:0] dp_xfer_ctx; + logic [C_LAT+1:0] dp_rvalid; + logic [C_LAT+1:0] dp_rready; + + + // --------------------------------------- // + // Address Request I/F // + // --------------------------------------- // + + assign s_axi_if.arready = !txn_active || txn_final_beat; + + // Indicates there are still reqs to be issued towards component. + // This active signal deasserts after final dv to component, meaning data is + // still in flight from component->AXI for C_LAT clocks after deassertion + always@(posedge clk or negedge rst_n) begin + if (!rst_n) begin + txn_active <= 1'b0; + end + else if (s_axi_if.arvalid) begin + txn_active <= 1'b1; + end + else if (txn_final_beat) begin + txn_active <= 1'b0; + end + else begin + txn_active <= txn_active; + end + end + + // TODO reset? + always@(posedge clk/* or negedge rst_n*/) begin +// if (!rst_n) begin +// txn_ctx <= '{default:0}; +// end + else if (s_axi_if.arvalid && s_axi_if.arready) begin + txn_ctx.addr <= s_axi_if.araddr; + txn_ctx.burst <= s_axi_if.arburst; + txn_ctx.size <= s_axi_if.arsize; + txn_ctx.len <= s_axi_if.arlen ; + txn_ctx.user <= s_axi_if.aruser; + txn_ctx.id <= s_axi_if.arid ; + txn_ctx.lock <= s_axi_if.arlock; + txn_cnt <= s_axi_if.arlen ; + end + else if (txn_rvalid[0]) begin + txn_ctx.addr <= txn_addr_nxt; + txn_ctx.burst <= s_axi_if.arburst; + txn_ctx.size <= s_axi_if.arsize; + txn_ctx.len <= s_axi_if.arlen ; + txn_ctx.user <= s_axi_if.aruser; + txn_ctx.id <= s_axi_if.arid ; + txn_ctx.lock <= s_axi_if.arlock; + txn_cnt <= |txn_cnt ? txn_cnt - 1 : txn_cnt; // Prevent underflow to 255 at end to reduce switching power. Extra logic cost worth it? + end + else begin + txn_ctx <= txn_ctx; + end + end + + // Only make the request to component if we have space in the pipeline to + // store the result (under worst-case AXI backpressure) + // To check this, look at the 'ready' output from the FINAL stage of the + // skidbuffer pipeline + always_comb dv = txn_active && dp_rready[C_LAT]; + always_comb txn_rvalid[0] = dv && !hld; + + // Asserts on the final beat of the COMPONENT INF which means it lags the + // final AXI beat by at least C_LAT clocks (or more depending on backpressure) + always_comb txn_final_beat = txn_rvalid[0] && txn_xfer_ctx[0].last; + + + // --------------------------------------- // + // Address Calculations // + // --------------------------------------- // + // Force aligned address to component + always_comb addr = {txn_ctx.addr[AW-1:BW],BW'(0)}; + + // Use full address to calculate next address (in case of arsize < data width) + axi_addr #( + .AW (AW), + .DW (DW), + .LENB(8 ) + ) i_axi_addr ( + .i_last_addr(txn_ctx.addr ), + .i_size (txn_ctx.size ), // 1b, 2b, 4b, 8b, etc + .i_burst (txn_ctx.burst), // fixed, incr, wrap, reserved + .i_len (txn_ctx.len ), + .o_next_addr(txn_addr_nxt ) + ); + + + // --------------------------------------- // + // Request Context Pipeline // + // --------------------------------------- // + always_comb begin + txn_xfer_ctx[0].id = txn_ctx.id; + txn_xfer_ctx[0].user = txn_ctx.user; + txn_xfer_ctx[0].last = txn_cnt == 0; + txn_xfer_ctx[0].resp = (EX_EN && txn_ctx.lock && /*FIXME*/) ? AXI_RESP_EXOKAY : AXI_RESP_OKAY; + end + + // Shift Register to track requests made to component + generate + if (C_LAT > 0) begin: TXN_SR + always@(posedge clk or negedge rst_n) begin + if (!rst_n) begin + txn_rvalid[C_LAT:1] <= C_LAT'(0); + end + else begin + txn_rvalid[C_LAT:1] <= txn_rvalid[C_LAT-1:0]; + end + end + + // Context is maintained alongside request while waiting for + // component response to arrive + if (C_LAT > 1) begin + for (cp = 1; cp <= C_LAT; cp++) begin: CTX_PIPELINE + // No reset needed on data path -- txn_rvalid (control path) is reset + always@(posedge clk) begin + txn_xfer_ctx[cp] <= txn_xfer_ctx[cp-1]; + end + end: CTX_PIPELINE + end + + end: TXN_SR + endgenerate + + + // --------------------------------------- // + // Exclusive Access Tracking // + // --------------------------------------- // + generate + if (EX_EN) begin: EX_AXS_TRACKER + always@(posedge clk or negedge rst_n) begin + if (!rst_n) begin + ex_active <= '0; + end + // give 'set' precedence over 'clr' in case of same ID + else if ((txn_rvalid[0] && txn_ctx.lock) && ex_clr) begin + ex_active <= (ex_active & ~(1 << ex_clr_id)) | (1 << txn_ctx.id); + end + else if (txn_rvalid[0] && txn_ctx.lock) begin + ex_active <= ex_active; + end + else if (ex_clr) begin + ex_active <= ex_active & ~(1 << ex_clr_id); + end + else begin + ex_active <= ex_active; + end + end + + for (ex = 0; ex < ID_NUM; ex++) begin: EX_CTX_TRACKER + // TODO: reset? + always@(posedge clk) begin + if (txn_rvalid[0] && txn_ctx.lock && (txn_ctx.id == ex)) begin + ex_ctx[ex] <= txn_ctx; + end + // Ignore the clear case, as ex_active is ctrl path + //else if (ex_clr && (ex_clr_id == ex)) begin + //end + else begin + ex_ctx[ex] <= ex_ctx[ex]; + end + end + end + end: EX_AXS_TRACKER + else begin: EX_UNSUPPORTED + for (ex = 0; ex < ID_NUM; ex++) begin: EX_SIG_0 + always_comb begin + ex_active[ex] = 1'b0; + ex_ctx[ex] = '{default:0}; + end + end: EX_SIG_0 + end: EX_UNSUPPORTED + endgenerate + + + // --------------------------------------- // + // Data/Response // + // --------------------------------------- // + always_comb dp_rvalid[0] = txn_rvalid[C_LAT]; + always_comb dp_rdata[0] = rdata; + always_comb begin + dp_xfer_ctx[0].id = txn_xfer_ctx[C_LAT].id; + dp_xfer_ctx[0].user = txn_xfer_ctx[C_LAT].user; // NOTE: Unused after it enters data pipeline + dp_xfer_ctx[0].resp = err ? AXI_RESP_SLVERR : + EX_EN ? txn_xfer_ctx[C_LAT].resp : + AXI_RESP_OKAY; + dp_xfer_ctx[0].last = txn_xfer_ctx[C_LAT].last; + end + + generate + for (dp = 0; dp <= C_LAT; dp++) begin: DATA_PIPELINE + // skidbuffer instance to pipeline data payload + context to AXI, + // after response is received from component. + // This is necessary when there is latency from dv->rdata, + // because AXI R channel can be stalled by dropping rready, + // and we can't drop the data (which was requested N cycles ago) + skidbuffer #( + .OPT_LOWPOWER (0 ), + .OPT_OUTREG (0 ), + // + .OPT_PASSTHROUGH(0 ), + .DW (DW + $bits(xfer_ctx_t)), + .OPT_INITIAL (1'b1) + ) i_dp_skd ( + .i_clk (clk ), + .i_reset(!rst_n ), + .i_valid(dp_rvalid[dp] ), + .o_ready(dp_rready[dp] ), + .i_data ({dp_rdata[dp] + dp_xfer_ctx[dp]} ), + .o_valid(dp_rvalid[dp+1] ), + .i_ready(dp_rready[dp+1] ), + .o_data ({dp_rdata[dp+1], + dp_xfer_ctx[dp+1]}) + ); + + end: DATA_PIPELINE + endgenerate + + always_comb dp_rready[C_LAT+1] = s_axi_if.rready; + always_comb begin + s_axi_if.rvalid = dp_rvalid[C_LAT+1]; + s_axi_if.rdata = dp_rdata[C_LAT+1]; + s_axi_if.rid = dp_xfer_ctx[C_LAT+1].id; + s_axi_if.rresp = dp_xfer_ctx[C_LAT+1].resp; + end + + + // --------------------------------------- // + // Formal Properties // + // --------------------------------------- // + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARADDR , s_axi_if.araddr , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARBURST, s_axi_if.arburst, clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARSIZE , s_axi_if.arsize , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARLEN , s_axi_if.arlen , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARUSER , s_axi_if.aruser , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARID , s_axi_if.arid , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARLOCK , s_axi_if.arlock , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARVALID, s_axi_if.arvalid, clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARREADY, s_axi_if.arready, clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RDATA , s_axi_if.rdata , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RRESP , s_axi_if.rresp , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RID , s_axi_if.rid , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RLAST , s_axi_if.rlast , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RVALID , s_axi_if.rvalid , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RREADY , s_axi_if.rready , clk, !rst_n) + + `CALIPTRA_ASSERT_NEVER(ERR_AXI_RD_DROP , dp_rvalid[0] && !dp_rready[0], clk, !rst_n) + `CALIPTRA_ASSERT_NEVER(ERR_AXI_RD_X , dp_rvalid[0] && !$isunknown({dp_rdata[0],dp_xfer_ctx[0]}), clk, !rst_n) + // Exclusive access rules: + // - Must have an address that is aligned to burst byte count + // - Byte count must be power of 2 inside 1:128 + // - Max burst length = 16 + `CALIPTRA_ASSERT (ERR_AXI_EX_UNALGN , (s_axi_if.arvalid && s_axi_if.arlock) -> ~|s_axi_if.araddr[$clog2((1< ((1< (s_axi_if.arlen < 16), clk, !rst_n) + + genvar sva_ii; + generate + if (C_LAT > 0) begin + for (sva_ii = 0; sva_ii < C_LAT; sva_ii++) begin + // Last stage should be first to fill and last to go empty + `CALIPTRA_ASSERT_NEVER(ERR_RD_SKD_BUF, dp_rready[sva_ii+1] && !dp_rready[sva_ii], clk, !rst_n) + end + end + endgenerate + + + // --------------------------------------- // + // Coverage // + // --------------------------------------- // + + +endmodule diff --git a/src/axi/rtl/skidbuffer.v b/src/axi/rtl/skidbuffer.v new file mode 100644 index 000000000..e6b1a62a2 --- /dev/null +++ b/src/axi/rtl/skidbuffer.v @@ -0,0 +1,495 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Filename: skidbuffer.v +// {{{ +// Project: WB2AXIPSP: bus bridges and other odds and ends +// +// Purpose: A basic SKID buffer. +// {{{ +// Skid buffers are required for high throughput AXI code, since the AXI +// specification requires that all outputs be registered. This means +// that, if there are any stall conditions calculated, it will take a clock +// cycle before the stall can be propagated up stream. This means that +// the data will need to be buffered for a cycle until the stall signal +// can make it to the output. +// +// Handling that buffer is the purpose of this core. +// +// On one end of this core, you have the i_valid and i_data inputs to +// connect to your bus interface. There's also a registered o_ready +// signal to signal stalls for the bus interface. +// +// The other end of the core has the same basic interface, but it isn't +// registered. This allows you to interact with the bus interfaces +// as though they were combinatorial logic, by interacting with this half +// of the core. +// +// If at any time the incoming !stall signal, i_ready, signals a stall, +// the incoming data is placed into a buffer. Internally, that buffer +// is held in r_data with the r_valid flag used to indicate that valid +// data is within it. +// }}} +// Parameters: +// {{{ +// DW or data width +// In order to make this core generic, the width of the data in the +// skid buffer is parameterized +// +// OPT_LOWPOWER +// Forces both o_data and r_data to zero if the respective *VALID +// signal is also low. While this costs extra logic, it can also +// be used to guarantee that any unused values aren't toggling and +// therefore unnecessarily using power. +// +// This excess toggling can be particularly problematic if the +// bus signals have a high fanout rate, or a long signal path +// across an FPGA. +// +// OPT_OUTREG +// Causes the outputs to be registered +// +// OPT_PASSTHROUGH +// Turns the skid buffer into a passthrough. Used for formal +// verification only. +// }}} +// Creator: Dan Gisselquist, Ph.D. +// Gisselquist Technology, LLC +// +//////////////////////////////////////////////////////////////////////////////// +// }}} +// Copyright (C) 2019-2024, Gisselquist Technology, LLC +// {{{ +// This file is part of the WB2AXIP project. +// +// The WB2AXIP project contains free software and gateware, licensed under the +// Apache License, Version 2.0 (the "License"). You may not use this project, +// or this file, except in compliance with the License. You may obtain a copy +// of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. +// +//////////////////////////////////////////////////////////////////////////////// +// +// +`default_nettype none +// }}} +module skidbuffer #( + // {{{ + parameter [0:0] OPT_LOWPOWER = 0, + parameter [0:0] OPT_OUTREG = 1, + // + parameter [0:0] OPT_PASSTHROUGH = 0, + parameter DW = 8, + parameter [0:0] OPT_INITIAL = 1'b1 + // }}} + ) ( + // {{{ + input wire i_clk, i_reset, + input wire i_valid, + output wire o_ready, + input wire [DW-1:0] i_data, + output wire o_valid, + input wire i_ready, + output reg [DW-1:0] o_data + // }}} + ); + + wire [DW-1:0] w_data; + + generate if (OPT_PASSTHROUGH) + begin : PASSTHROUGH + // {{{ + assign { o_valid, o_ready } = { i_valid, i_ready }; + + always @(*) + if (!i_valid && OPT_LOWPOWER) + o_data = 0; + else + o_data = i_data; + + assign w_data = 0; + + // Keep Verilator happy + // Verilator lint_off UNUSED + // {{{ + wire unused_passthrough; + assign unused_passthrough = &{ 1'b0, i_clk, i_reset }; + // }}} + // Verilator lint_on UNUSED + // }}} + end else begin : LOGIC + // We'll start with skid buffer itself + // {{{ + reg r_valid; + reg [DW-1:0] r_data; + + // r_valid + // {{{ + initial if (OPT_INITIAL) r_valid = 0; + always @(posedge i_clk) + if (i_reset) + r_valid <= 0; + else if ((i_valid && o_ready) && (o_valid && !i_ready)) + // We have incoming data, but the output is stalled + r_valid <= 1; + else if (i_ready) + r_valid <= 0; + // }}} + + // r_data + // {{{ + initial if (OPT_INITIAL) r_data = 0; + always @(posedge i_clk) + if (OPT_LOWPOWER && i_reset) + r_data <= 0; + else if (OPT_LOWPOWER && (!o_valid || i_ready)) + r_data <= 0; + else if ((!OPT_LOWPOWER || !OPT_OUTREG || i_valid) && o_ready) + r_data <= i_data; + + assign w_data = r_data; + // }}} + + // o_ready + // {{{ + assign o_ready = !r_valid; + // }}} + + // + // And then move on to the output port + // + if (!OPT_OUTREG) + begin : NET_OUTPUT + // Outputs are combinatorially determined from inputs + // {{{ + // o_valid + // {{{ + assign o_valid = !i_reset && (i_valid || r_valid); + // }}} + + // o_data + // {{{ + always @(*) + if (r_valid) + o_data = r_data; + else if (!OPT_LOWPOWER || i_valid) + o_data = i_data; + else + o_data = 0; + // }}} + // }}} + end else begin : REG_OUTPUT + // Register our outputs + // {{{ + // o_valid + // {{{ + reg ro_valid; + + initial if (OPT_INITIAL) ro_valid = 0; + always @(posedge i_clk) + if (i_reset) + ro_valid <= 0; + else if (!o_valid || i_ready) + ro_valid <= (i_valid || r_valid); + + assign o_valid = ro_valid; + // }}} + + // o_data + // {{{ + initial if (OPT_INITIAL) o_data = 0; + always @(posedge i_clk) + if (OPT_LOWPOWER && i_reset) + o_data <= 0; + else if (!o_valid || i_ready) + begin + + if (r_valid) + o_data <= r_data; + else if (!OPT_LOWPOWER || i_valid) + o_data <= i_data; + else + o_data <= 0; + end + // }}} + + // }}} + end + // }}} + end endgenerate + + // Keep Verilator happy + // {{{ + // Verilator lint_off UNUSED + wire unused; + assign unused = &{ 1'b0, w_data }; + // Verilator lint_on UNUSED + // }}} +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// +// +// Formal properties +// {{{ +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// +`ifdef FORMAL +`ifdef SKIDBUFFER +`define ASSUME assume +`else +`define ASSUME assert +`endif + + reg f_past_valid; + + initial f_past_valid = 0; + always @(posedge i_clk) + f_past_valid <= 1; + + always @(*) + if (!f_past_valid) + assume(i_reset); + + //////////////////////////////////////////////////////////////////////// + // + // Incoming stream properties / assumptions + // {{{ + //////////////////////////////////////////////////////////////////////// + // + always @(posedge i_clk) + if (!f_past_valid) + begin + `ASSUME(!i_valid || !OPT_INITIAL); + end else if ($past(i_valid && !o_ready && !i_reset) && !i_reset) + `ASSUME(i_valid && $stable(i_data)); + +`ifdef VERIFIC +`define FORMAL_VERIFIC + // Reset properties + property RESET_CLEARS_IVALID; + @(posedge i_clk) i_reset |=> !i_valid; + endproperty + + property IDATA_HELD_WHEN_NOT_READY; + @(posedge i_clk) disable iff (i_reset) + i_valid && !o_ready |=> i_valid && $stable(i_data); + endproperty + +`ifdef SKIDBUFFER + assume property (IDATA_HELD_WHEN_NOT_READY); +`else + assert property (IDATA_HELD_WHEN_NOT_READY); +`endif +`endif + // }}} + //////////////////////////////////////////////////////////////////////// + // + // Outgoing stream properties / assumptions + // {{{ + //////////////////////////////////////////////////////////////////////// + // + + generate if (!OPT_PASSTHROUGH) + begin + + always @(posedge i_clk) + if (!f_past_valid) // || $past(i_reset)) + begin + // Following any reset, valid must be deasserted + assert(!o_valid || !OPT_INITIAL); + end else if ($past(o_valid && !i_ready && !i_reset) && !i_reset) + // Following any stall, valid must remain high and + // data must be preserved + assert(o_valid && $stable(o_data)); + + end endgenerate + // }}} + //////////////////////////////////////////////////////////////////////// + // + // Other properties + // {{{ + //////////////////////////////////////////////////////////////////////// + // + // + generate if (!OPT_PASSTHROUGH) + begin + // Rule #1: + // If registered, then following any reset we should be + // ready for a new request + // {{{ + always @(posedge i_clk) + if (f_past_valid && $past(OPT_OUTREG && i_reset)) + assert(o_ready); + // }}} + + // Rule #2: + // All incoming data must either go directly to the + // output port, or into the skid buffer + // {{{ +`ifndef VERIFIC + always @(posedge i_clk) + if (f_past_valid && !$past(i_reset) && $past(i_valid && o_ready + && (!OPT_OUTREG || o_valid) && !i_ready)) + assert(!o_ready && w_data == $past(i_data)); +`else + assert property (@(posedge i_clk) + disable iff (i_reset) + (i_valid && o_ready + && (!OPT_OUTREG || o_valid) && !i_ready) + |=> (!o_ready && w_data == $past(i_data))); +`endif + // }}} + + // Rule #3: + // After the last transaction, o_valid should become idle + // {{{ + if (!OPT_OUTREG) + begin + // {{{ + always @(posedge i_clk) + if (f_past_valid && !$past(i_reset) && !i_reset + && $past(i_ready)) + begin + assert(o_valid == i_valid); + assert(!i_valid || (o_data == i_data)); + end + // }}} + end else begin + // {{{ + always @(posedge i_clk) + if (f_past_valid && !$past(i_reset)) + begin + if ($past(i_valid && o_ready)) + assert(o_valid); + + if ($past(!i_valid && o_ready && i_ready)) + assert(!o_valid); + end + // }}} + end + // }}} + + // Rule #4 + // Same thing, but this time for o_ready + // {{{ + always @(posedge i_clk) + if (f_past_valid && $past(!o_ready && i_ready)) + assert(o_ready); + // }}} + + // If OPT_LOWPOWER is set, o_data and w_data both need to be + // zero any time !o_valid or !r_valid respectively + // {{{ + if (OPT_LOWPOWER) + begin + always @(*) + if ((OPT_OUTREG || !i_reset) && !o_valid) + assert(o_data == 0); + + always @(*) + if (o_ready) + assert(w_data == 0); + + end + // }}} + end endgenerate + // }}} + //////////////////////////////////////////////////////////////////////// + // + // Cover checks + // {{{ + //////////////////////////////////////////////////////////////////////// + // + // +`ifdef SKIDBUFFER + generate if (!OPT_PASSTHROUGH) + begin + reg f_changed_data; + + initial f_changed_data = 0; + always @(posedge i_clk) + if (i_reset) + f_changed_data <= 1; + else if (i_valid && $past(!i_valid || o_ready)) + begin + if (i_data != $past(i_data + 1)) + f_changed_data <= 0; + end else if (!i_valid && i_data != 0) + f_changed_data <= 0; + + +`ifndef VERIFIC + reg [3:0] cvr_steps, cvr_hold; + + always @(posedge i_clk) + if (i_reset) + begin + cvr_steps <= 0; + cvr_hold <= 0; + end else begin + cvr_steps <= cvr_steps + 1; + cvr_hold <= cvr_hold + 1; + case(cvr_steps) + 0: if (o_valid || i_valid) + cvr_steps <= 0; + 1: if (!i_valid || !i_ready) + cvr_steps <= 0; + 2: if (!i_valid || !i_ready) + cvr_steps <= 0; + 3: if (!i_valid || !i_ready) + cvr_steps <= 0; + 4: if (!i_valid || i_ready) + cvr_steps <= 0; + 5: if (!i_valid || !i_ready) + cvr_steps <= 0; + 6: if (!i_valid || !i_ready) + cvr_steps <= 0; + 7: if (!i_valid || i_ready) + cvr_steps <= 0; + 8: if (!i_valid || i_ready) + cvr_steps <= 0; + 9: if (!i_valid || !i_ready) + cvr_steps <= 0; + 10: if (!i_valid || !i_ready) + cvr_steps <= 0; + 11: if (!i_valid || !i_ready) + cvr_steps <= 0; + 12: begin + cvr_steps <= cvr_steps; + cover(!o_valid && !i_valid && f_changed_data); + if (!o_valid || !i_ready) + cvr_steps <= 0; + else + cvr_hold <= cvr_hold + 1; + end + default: assert(0); + endcase + end + +`else + // Cover test + cover property (@(posedge i_clk) + disable iff (i_reset) + (!o_valid && !i_valid) + ##1 i_valid && i_ready [*3] + ##1 i_valid && !i_ready + ##1 i_valid && i_ready [*2] + ##1 i_valid && !i_ready [*2] + ##1 i_valid && i_ready [*3] + // Wait for the design to clear + ##1 o_valid && i_ready [*0:5] + ##1 (!o_valid && !i_valid && f_changed_data)); +`endif + end endgenerate +`endif // SKIDBUFFER + // }}} +`endif +// }}} +endmodule From f6baa0293f314d41536586c6bd52678d494a0e49 Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Thu, 16 May 2024 14:43:08 -0700 Subject: [PATCH 02/58] Compile for AXI sub --- src/axi/config/compile.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/axi/config/compile.yml diff --git a/src/axi/config/compile.yml b/src/axi/config/compile.yml new file mode 100644 index 000000000..57774c8d0 --- /dev/null +++ b/src/axi/config/compile.yml @@ -0,0 +1,22 @@ +--- +provides: [axi_sub] +schema_version: 2.4.0 +requires: + - libs +targets: + tb: + directories: [$COMPILE_ROOT/rtl] + files: + - $COMPILE_ROOT/rtl/axi_if.sv + - $COMPILE_ROOT/rtl/axi_pkg.sv + - $COMPILE_ROOT/rtl/axi_addr.v + - $COMPILE_ROOT/rtl/skidbuffer.v + - $COMPILE_ROOT/rtl/axi_sub_rd.sv + rtl: + directories: [$COMPILE_ROOT/rtl] + files: + - $COMPILE_ROOT/rtl/axi_if.sv + - $COMPILE_ROOT/rtl/axi_pkg.sv + - $COMPILE_ROOT/rtl/axi_addr.v + - $COMPILE_ROOT/rtl/skidbuffer.v + - $COMPILE_ROOT/rtl/axi_sub_rd.sv From 5ca775341d10ae8ea541219d9648c18dd426f0c0 Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Thu, 23 May 2024 17:14:28 -0700 Subject: [PATCH 03/58] AXI sub -- write channel + exclusive access fixups --- src/axi/rtl/axi_if.sv | 3 + src/axi/rtl/axi_pkg.sv | 7 +- src/axi/rtl/axi_sub_rd.sv | 77 +++++---- src/axi/rtl/axi_sub_wr.sv | 349 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 406 insertions(+), 30 deletions(-) create mode 100644 src/axi/rtl/axi_sub_wr.sv diff --git a/src/axi/rtl/axi_if.sv b/src/axi/rtl/axi_if.sv index 3f4662788..f76253f10 100644 --- a/src/axi/rtl/axi_if.sv +++ b/src/axi/rtl/axi_if.sv @@ -55,6 +55,7 @@ interface axi_if #(parameter AW = 32, parameter DW = 32, parameter IW = 3, param logic [DW/8-1:0] wstrb; logic wvalid; logic wready; + logic wlast; // AXI B logic [1:0] bresp; @@ -100,6 +101,7 @@ interface axi_if #(parameter AW = 32, parameter DW = 32, parameter IW = 3, param output wstrb, output wvalid, input wready, + output wlast, // B input bresp, input bid, @@ -145,6 +147,7 @@ interface axi_if #(parameter AW = 32, parameter DW = 32, parameter IW = 3, param input wstrb, input wvalid, output wready, + input wlast, // B output bresp, output bid, diff --git a/src/axi/rtl/axi_pkg.sv b/src/axi/rtl/axi_pkg.sv index 36346f00d..43022e75d 100644 --- a/src/axi/rtl/axi_pkg.sv +++ b/src/axi/rtl/axi_pkg.sv @@ -45,8 +45,13 @@ package axi_pkg; typedef struct packed { logic [IW-1:0] id; logic [UW-1:0] user; - logic [ 1:0] resp; + axi_resp_e resp; logic last; } xfer_ctx_t; + typedef struct packed { + logic [AW-1:0] addr; + logic [AW-1:0] addr_mask; + } axi_ex_ctx_t; + endpackage diff --git a/src/axi/rtl/axi_sub_rd.sv b/src/axi/rtl/axi_sub_rd.sv index 186cf7bef..7660887e1 100644 --- a/src/axi/rtl/axi_sub_rd.sv +++ b/src/axi/rtl/axi_sub_rd.sv @@ -47,10 +47,9 @@ module axi_sub_rd import axi_pkg::*; #( axi_if.r_sub s_axi_if, // Exclusive Access Signals - input logic ex_clr, - input logic [IW -1:0] ex_clr_id, - output logic [ID_NUM-1:0] ex_active, - output var axi_ctx_t [ID_NUM-1:0] ex_ctx, + input logic [ID_NUM-1:0] ex_clr, + output logic [ID_NUM-1:0] ex_active, + output var axi_ex_ctx_t [ID_NUM-1:0] ex_ctx, //COMPONENT INF output logic dv, @@ -60,7 +59,7 @@ module axi_sub_rd import axi_pkg::*; #( input logic hld, input logic err, - input logic [DW-1:0] rdata // Integ requires: Component dwidth == AXI dwidth + input logic [DW-1:0] rdata // Requires: Component dwidth == AXI dwidth ); // --------------------------------------- // @@ -103,7 +102,7 @@ module axi_sub_rd import axi_pkg::*; #( // Indicates there are still reqs to be issued towards component. // This active signal deasserts after final dv to component, meaning data is // still in flight from component->AXI for C_LAT clocks after deassertion - always@(posedge clk or negedge rst_n) begin + always_ff@(posedge clk or negedge rst_n) begin if (!rst_n) begin txn_active <= 1'b0; end @@ -119,11 +118,11 @@ module axi_sub_rd import axi_pkg::*; #( end // TODO reset? - always@(posedge clk/* or negedge rst_n*/) begin + always_ff@(posedge clk/* or negedge rst_n*/) begin // if (!rst_n) begin // txn_ctx <= '{default:0}; // end - else if (s_axi_if.arvalid && s_axi_if.arready) begin + if (s_axi_if.arvalid && s_axi_if.arready) begin txn_ctx.addr <= s_axi_if.araddr; txn_ctx.burst <= s_axi_if.arburst; txn_ctx.size <= s_axi_if.arsize; @@ -135,12 +134,12 @@ module axi_sub_rd import axi_pkg::*; #( end else if (txn_rvalid[0]) begin txn_ctx.addr <= txn_addr_nxt; - txn_ctx.burst <= s_axi_if.arburst; - txn_ctx.size <= s_axi_if.arsize; - txn_ctx.len <= s_axi_if.arlen ; - txn_ctx.user <= s_axi_if.aruser; - txn_ctx.id <= s_axi_if.arid ; - txn_ctx.lock <= s_axi_if.arlock; + txn_ctx.burst <= txn_ctx.burst; + txn_ctx.size <= txn_ctx.size; + txn_ctx.len <= txn_ctx.len ; + txn_ctx.user <= txn_ctx.user; + txn_ctx.id <= txn_ctx.id ; + txn_ctx.lock <= txn_ctx.lock; txn_cnt <= |txn_cnt ? txn_cnt - 1 : txn_cnt; // Prevent underflow to 255 at end to reduce switching power. Extra logic cost worth it? end else begin @@ -165,6 +164,7 @@ module axi_sub_rd import axi_pkg::*; #( // --------------------------------------- // // Force aligned address to component always_comb addr = {txn_ctx.addr[AW-1:BW],BW'(0)}; + always_comb user = txn_ctx.user; // Use full address to calculate next address (in case of arsize < data width) axi_addr #( @@ -187,13 +187,13 @@ module axi_sub_rd import axi_pkg::*; #( txn_xfer_ctx[0].id = txn_ctx.id; txn_xfer_ctx[0].user = txn_ctx.user; txn_xfer_ctx[0].last = txn_cnt == 0; - txn_xfer_ctx[0].resp = (EX_EN && txn_ctx.lock && /*FIXME*/) ? AXI_RESP_EXOKAY : AXI_RESP_OKAY; + txn_xfer_ctx[0].resp = (EX_EN && txn_ctx.lock) ? AXI_RESP_EXOKAY : AXI_RESP_OKAY; end // Shift Register to track requests made to component generate if (C_LAT > 0) begin: TXN_SR - always@(posedge clk or negedge rst_n) begin + always_ff@(posedge clk or negedge rst_n) begin if (!rst_n) begin txn_rvalid[C_LAT:1] <= C_LAT'(0); end @@ -207,7 +207,7 @@ module axi_sub_rd import axi_pkg::*; #( if (C_LAT > 1) begin for (cp = 1; cp <= C_LAT; cp++) begin: CTX_PIPELINE // No reset needed on data path -- txn_rvalid (control path) is reset - always@(posedge clk) begin + always_ff@(posedge clk) begin txn_xfer_ctx[cp] <= txn_xfer_ctx[cp-1]; end end: CTX_PIPELINE @@ -222,19 +222,36 @@ module axi_sub_rd import axi_pkg::*; #( // --------------------------------------- // generate if (EX_EN) begin: EX_AXS_TRACKER - always@(posedge clk or negedge rst_n) begin + // Exclusive access requires transaction LENGTH to be a power of 2, + // so an address mask may be prepared by assuming the AxLEN value has + // all consecutive LSB set to 1, then all 0's in higher order bits. After + // shifting by the width of the transaction (AxSIZE), this mask can be applied + // to AxADDR to give the aligned address relative to an exclusive access. + // + logic [AW-1:0] addr_ex_algn_mask; + always_comb begin + case (BC) inside + 1: addr_ex_algn_mask = ~(AW'(txn_ctx.len)); + 2: addr_ex_algn_mask = (~(AW'(txn_ctx.len))) << txn_ctx.size[0]; + 4: addr_ex_algn_mask = (~(AW'(txn_ctx.len))) << txn_ctx.size[1:0]; + 8: addr_ex_algn_mask = (~(AW'(txn_ctx.len))) << txn_ctx.size[1:0]; + default: addr_ex_algn_mask = (~(AW'(txn_ctx.len))) << txn_ctx.size; + endcase + end + + always_ff@(posedge clk or negedge rst_n) begin if (!rst_n) begin ex_active <= '0; end // give 'set' precedence over 'clr' in case of same ID - else if ((txn_rvalid[0] && txn_ctx.lock) && ex_clr) begin - ex_active <= (ex_active & ~(1 << ex_clr_id)) | (1 << txn_ctx.id); + else if ((txn_rvalid[0] && txn_ctx.lock) && |ex_clr) begin + ex_active <= (ex_active & ~ex_clr) | (1 << txn_ctx.id); end else if (txn_rvalid[0] && txn_ctx.lock) begin - ex_active <= ex_active; + ex_active <= ex_active | (1 << txn_ctx.id); end - else if (ex_clr) begin - ex_active <= ex_active & ~(1 << ex_clr_id); + else if (|ex_clr) begin + ex_active <= ex_active & ~ex_clr; end else begin ex_active <= ex_active; @@ -243,12 +260,13 @@ module axi_sub_rd import axi_pkg::*; #( for (ex = 0; ex < ID_NUM; ex++) begin: EX_CTX_TRACKER // TODO: reset? - always@(posedge clk) begin + always_ff@(posedge clk) begin if (txn_rvalid[0] && txn_ctx.lock && (txn_ctx.id == ex)) begin - ex_ctx[ex] <= txn_ctx; + ex_ctx[ex].addr <= txn_ctx.addr; + ex_ctx[ex].addr_mask <= addr_ex_algn_mask; end - // Ignore the clear case, as ex_active is ctrl path - //else if (ex_clr && (ex_clr_id == ex)) begin + // Ignore the clear case, as ex_active is the ctrl path + //else if (ex_clr[ex]) begin //end else begin ex_ctx[ex] <= ex_ctx[ex]; @@ -300,7 +318,7 @@ module axi_sub_rd import axi_pkg::*; #( .i_reset(!rst_n ), .i_valid(dp_rvalid[dp] ), .o_ready(dp_rready[dp] ), - .i_data ({dp_rdata[dp] + .i_data ({dp_rdata[dp], dp_xfer_ctx[dp]} ), .o_valid(dp_rvalid[dp+1] ), .i_ready(dp_rready[dp+1] ), @@ -314,6 +332,7 @@ module axi_sub_rd import axi_pkg::*; #( always_comb dp_rready[C_LAT+1] = s_axi_if.rready; always_comb begin s_axi_if.rvalid = dp_rvalid[C_LAT+1]; + s_axi_if.rlast = dp_xfer_ctx[C_LAT+1].last; s_axi_if.rdata = dp_rdata[C_LAT+1]; s_axi_if.rid = dp_xfer_ctx[C_LAT+1].id; s_axi_if.rresp = dp_xfer_ctx[C_LAT+1].resp; @@ -340,7 +359,7 @@ module axi_sub_rd import axi_pkg::*; #( `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RREADY , s_axi_if.rready , clk, !rst_n) `CALIPTRA_ASSERT_NEVER(ERR_AXI_RD_DROP , dp_rvalid[0] && !dp_rready[0], clk, !rst_n) - `CALIPTRA_ASSERT_NEVER(ERR_AXI_RD_X , dp_rvalid[0] && !$isunknown({dp_rdata[0],dp_xfer_ctx[0]}), clk, !rst_n) + `CALIPTRA_ASSERT_NEVER(ERR_AXI_RD_X , dp_rvalid[0] && $isunknown({dp_rdata[0],dp_xfer_ctx[0]}), clk, !rst_n) // Exclusive access rules: // - Must have an address that is aligned to burst byte count // - Byte count must be power of 2 inside 1:128 diff --git a/src/axi/rtl/axi_sub_wr.sv b/src/axi/rtl/axi_sub_wr.sv new file mode 100644 index 000000000..414e4e8d9 --- /dev/null +++ b/src/axi/rtl/axi_sub_wr.sv @@ -0,0 +1,349 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// ------------------------------------------------------------- +// AXI Write Subordinate +// ------------------------------------------------------------- +// Description: +// Subordinate to convert AXI protocol writes into internal component accesses +// +// Limitations: +// - When multiple ID tracking is enabled, write responses are returned in the +// same order they are received, regardless of ID. +// +// ------------------------------------------------------------- + +module axi_sub_wr import axi_pkg::*; #( + parameter AW = 32, // Address Width + parameter DW = 32, // Data Width + BC = DW/8, // Byte Count + BW = $clog2(BC), // Byte count Width + parameter UW = 32, // User Width + parameter IW = 1, // ID Width + ID_NUM = 1 << IW, // Don't override + + parameter EX_EN = 0 // Enable exclusive access tracking w/ AxLOCK +) ( + input clk, + input rst_n, + + // AXI INF + axi_if.w_sub s_axi_if, + + // Exclusive Access Signals + output logic [ID_NUM-1:0] ex_clr, + input logic [ID_NUM-1:0] ex_active, + input var axi_ex_ctx_t [ID_NUM-1:0] ex_ctx, + + //COMPONENT INF + output logic dv, + output logic [AW-1:0] addr, // Byte address + output logic [UW-1:0] user, + output logic [DW-1:0] wdata, // Requires: Component dwidth == AXI dwidth + output logic [BC-1:0] wstrb, // Requires: Component dwidth == AXI dwidth + output logic last, // Asserted with final 'dv' of a burst + input logic hld, + input logic err + +); + + // --------------------------------------- // + // Localparams/Typedefs // + // --------------------------------------- // + + + // --------------------------------------- // + // Signals // + // --------------------------------------- // + + genvar ex; // Exclusive contexts + + logic dv_pre; + + // Active transaction signals + // track requests as they are sent to component + axi_ctx_t s_axi_if_ctx; + axi_ctx_t req_ctx; + logic req_valid; + logic req_ready; + logic req_matches_ex; + axi_ctx_t txn_ctx; + logic [AW-1:0] txn_addr_nxt; + logic txn_active; + logic txn_wvalid; + logic txn_wready; + logic txn_allow; // If an exclusive-write with no match to tracked context, don't complete write to component + logic txn_err; + logic txn_final_beat; + logic [ID_NUM-1:0] txn_ex_match; // Current access matches the flagged exclusive context + // Possible for multiple bits to be set -- match of multiple contexts + + // Response Pipeline signals + logic rp_valid; + logic rp_ready; + axi_resp_e rp_resp; + logic [IW-1:0] rp_id; + + + // --------------------------------------- // + // Address Request I/F // + // --------------------------------------- // + + always_comb begin + s_axi_if_ctx.addr = s_axi_if.awaddr ; + s_axi_if_ctx.burst = s_axi_if.awburst; + s_axi_if_ctx.size = s_axi_if.awsize ; + s_axi_if_ctx.len = s_axi_if.awlen ; + s_axi_if_ctx.user = s_axi_if.awuser ; + s_axi_if_ctx.id = s_axi_if.awid ; + s_axi_if_ctx.lock = s_axi_if.awlock && EX_EN; + end + + // skidbuffer instance to pipeline request context from AXI. + skidbuffer #( + .OPT_LOWPOWER (0 ), + .OPT_OUTREG (0 ), + // + .OPT_PASSTHROUGH(0 ), + .DW ($bits(axi_ctx_t)), + .OPT_INITIAL (1'b1) + ) i_req_skd ( + .i_clk (clk ), + .i_reset(!rst_n ), + .i_valid(s_axi_if.awvalid), + .o_ready(s_axi_if.awready), + .i_data (s_axi_if_ctx ), + .o_valid(req_valid ), + .i_ready(req_ready ), + .o_data (req_ctx ) + ); + + // Only accept request when we have a guaranteed slot in the response buffer + // to put the response + assign req_ready = (!txn_active || (txn_final_beat && !s_axi_if.bvalid)) && rp_ready[0]; + + // Indicates there are still reqs to be issued towards component. + // This active signal deasserts after final dv to component + always_ff@(posedge clk or negedge rst_n) begin + if (!rst_n) begin + txn_active <= 1'b0; + end + else if (req_valid && req_ready) begin + txn_active <= 1'b1; + end + else if (txn_final_beat) begin + txn_active <= 1'b0; + end + else begin + txn_active <= txn_active; + end + end + + always_comb req_matches_ex = (req_ctx.addr & ex_ctx[req_ctx.id].addr_mask) == ex_ctx[req_ctx.id].addr; + + // TODO reset? + always_ff@(posedge clk/* or negedge rst_n*/) begin +// if (!rst_n) begin +// txn_ctx <= '{default:0}; +// end + if (req_valid && req_ready) begin + txn_ctx.addr <= req_ctx.addr; + txn_ctx.burst <= req_ctx.burst; + txn_ctx.size <= req_ctx.size; + txn_ctx.len <= req_ctx.len ; + txn_ctx.user <= req_ctx.user; + txn_ctx.id <= req_ctx.id ; + txn_ctx.lock <= req_ctx.lock; + txn_allow <= !EX_EN || !req_ctx.lock || (ex_active[req_ctx.id] && req_matches_ex); + txn_err <= 1'b0; + end + else if (dv_pre && !hld) begin + txn_ctx.addr <= txn_addr_nxt; + txn_ctx.burst <= txn_ctx.burst; + txn_ctx.size <= txn_ctx.size; + txn_ctx.len <= txn_ctx.len ; + txn_ctx.user <= txn_ctx.user; + txn_ctx.id <= txn_ctx.id ; + txn_ctx.lock <= txn_ctx.lock; + txn_allow <= txn_allow; + txn_err <= txn_err || err; + end + else begin + txn_ctx <= txn_ctx; + txn_allow <= txn_allow; + txn_err <= txn_err; + end + end + + // Asserts on the final COMPONENT INF beat, which means data does not + // arrive at endpoint until after C_LAT clocks + always_comb txn_final_beat = dv_pre && (!txn_allow || !hld) && last; + + + // --------------------------------------- // + // Address Calculations // + // --------------------------------------- // + // Force aligned address to component + always_comb addr = {txn_ctx.addr[AW-1:BW],BW'(0)}; + always_comb user = txn_ctx.user; + + // Use full address to calculate next address (in case of AxSIZE < data width) + axi_addr #( + .AW (AW), + .DW (DW), + .LENB(8 ) + ) i_axi_addr ( + .i_last_addr(txn_ctx.addr ), + .i_size (txn_ctx.size ), // 1b, 2b, 4b, 8b, etc + .i_burst (txn_ctx.burst), // fixed, incr, wrap, reserved + .i_len (txn_ctx.len ), + .o_next_addr(txn_addr_nxt ) + ); + + + // --------------------------------------- // + // Exclusive Access Tracking // + // --------------------------------------- // + + generate + for (ex=0; ex < ID_NUM; ex++) begin: EX_AXS_TRACKER + logic [AW-1:0] addr_ex_algn; + + // Component address aligned to exclusive tracking context + // Don't use aligned 'addr' signal, because exclusive access alignment may + // be smaller than component inf (since single-byte exclusive access is legal) + always_comb addr_ex_algn = txn_ctx.addr & ex_ctx[ex].addr_mask; + + // Match on each beat in case a burst transaction only overlaps + // the exclusive context partially + always_comb txn_ex_match[ex] <= (addr_ex_algn == ex_ctx[ex].addr); + + end: EX_AXS_TRACKER + endgenerate + + // Only clear the context when a write goes through to dest - meaining dv, not dv_pre + always_ff@(posedge clk or negedge rst_n) begin + if (!rst_n) + ex_clr <= ID_NUM'(0); + else if (EX_EN && dv && !hld) + ex_clr <= ex_active & txn_ex_match; // Could have multiple set bits + else + ex_clr <= ID_NUM'(0); + end + + + // --------------------------------------- // + // Data/Response // + // --------------------------------------- // + + always_comb txn_wvalid = s_axi_if.wvalid && txn_active; + always_comb s_axi_if.wready = txn_wready && txn_active; + + // skidbuffer instance to pipeline data payload from AXI. + skidbuffer #( + .OPT_LOWPOWER (0 ), + .OPT_OUTREG (0 ), + // + .OPT_PASSTHROUGH(0 ), + .DW (DW + BC + 1), + .OPT_INITIAL (1'b1) + ) i_dp_skd ( + .i_clk (clk ), + .i_reset(!rst_n ), + .i_valid(txn_wvalid ), + .o_ready(txn_wready ), + .i_data ({s_axi_if.wdata, + s_axi_if.wstrb, + s_axi_if.wlast}), + .o_valid(dv_pre ), + .i_ready(!hld ), + .o_data ({wdata, + wstrb, + last } ) + ); + + always_comb dv = dv_pre && txn_allow; + + // Registered skidbuffer to pipeline response signals. + // Skid buffer captures any response transfer if the + // register output is busy with a previous response and is + // stalled. + // There is guaranteed to be space in the skid buffer because new + // requests are stalled (AWREADY=0) until this buffer is ready. + always_comb begin + rp_valid[0] = txn_final_beat; + rp_resp[0] = txn_err || err ? AXI_RESP_SLVERR : + txn_ctx.lock && txn_allow ? AXI_RESP_EXOKAY : + AXI_RESP_OKAY; + rp_id[0] = txn_ctx.id; + end + + skidbuffer #( + .OPT_LOWPOWER (0 ), + .OPT_OUTREG (1 ), + // + .OPT_PASSTHROUGH(0 ), + .DW (IW + $bits(axi_resp_e)), + .OPT_INITIAL (1'b1) + ) i_rsp_skd ( + .i_clk (clk ), + .i_reset(!rst_n ), + .i_valid(rp_valid[0] ), + .o_ready(rp_ready[0] ), + .i_data ({rp_resp[0], + rp_id[0]} ), + .o_valid(s_axi_if.bvalid ), + .i_ready(s_axi_if.bready ), + .o_data ({s_axi_if.bresp, + s_axi_if.bid} ) + ); + + + // --------------------------------------- // + // Formal Properties // + // --------------------------------------- // + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWADDR , s_axi_if.awaddr , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWBURST, s_axi_if.awburst, clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWSIZE , s_axi_if.awsize , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWLEN , s_axi_if.awlen , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWUSER , s_axi_if.awuser , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWID , s_axi_if.awid , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWLOCK , s_axi_if.awlock , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWVALID, s_axi_if.awvalid, clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWREADY, s_axi_if.awready, clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_WDATA , s_axi_if.wdata , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_WSTRB , s_axi_if.wstrb , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_WVALID , s_axi_if.wvalid , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_WREADY , s_axi_if.wready , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_WLAST , s_axi_if.wlast , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_BRESP , s_axi_if.bresp , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_BID , s_axi_if.bid , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_BVALID , s_axi_if.bvalid , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_BREADY , s_axi_if.bready , clk, !rst_n) + + // Exclusive access rules: + // - Must have an address that is aligned to burst byte count + // - Byte count must be power of 2 inside 1:128 + // - Max burst length = 16 + `CALIPTRA_ASSERT (ERR_AXI_EX_UNALGN , (s_axi_if.awvalid && s_axi_if.awlock) -> ~|s_axi_if.awaddr[$clog2((1< ((1< (s_axi_if.awlen < 16), clk, !rst_n) + + + // --------------------------------------- // + // Coverage // + // --------------------------------------- // + +endmodule From 5b7ca3c3b67c92dfcc354d9074bfe5b46c410526 Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Tue, 28 May 2024 13:19:55 -0700 Subject: [PATCH 04/58] Exclusive access support OFF by default --- src/axi/rtl/axi_sub_rd.sv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/axi/rtl/axi_sub_rd.sv b/src/axi/rtl/axi_sub_rd.sv index 7660887e1..ae295879a 100644 --- a/src/axi/rtl/axi_sub_rd.sv +++ b/src/axi/rtl/axi_sub_rd.sv @@ -34,7 +34,7 @@ module axi_sub_rd import axi_pkg::*; #( parameter IW = 1, // ID Width ID_NUM = 1 << IW, // Don't override - parameter EX_EN = 1, // Enable exclusive access tracking w/ AxLOCK + parameter EX_EN = 0, // Enable exclusive access tracking w/ AxLOCK parameter C_LAT = 0 // Component latency in clock cycles from (dv&&!hld) -> rdata // Must be const per component // For registers, typically 0 From 1645788a013f5253895c47bb201061cf50e41573 Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Tue, 28 May 2024 13:21:10 -0700 Subject: [PATCH 05/58] Only latch err from component when the access is allowed (i.e. not an incomplete EX access) --- src/axi/rtl/axi_sub_wr.sv | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/axi/rtl/axi_sub_wr.sv b/src/axi/rtl/axi_sub_wr.sv index 414e4e8d9..68fd7eff3 100644 --- a/src/axi/rtl/axi_sub_wr.sv +++ b/src/axi/rtl/axi_sub_wr.sv @@ -169,7 +169,7 @@ module axi_sub_wr import axi_pkg::*; #( txn_allow <= !EX_EN || !req_ctx.lock || (ex_active[req_ctx.id] && req_matches_ex); txn_err <= 1'b0; end - else if (dv_pre && !hld) begin + else if (dv && !hld) begin txn_ctx.addr <= txn_addr_nxt; txn_ctx.burst <= txn_ctx.burst; txn_ctx.size <= txn_ctx.size; @@ -284,9 +284,9 @@ module axi_sub_wr import axi_pkg::*; #( // requests are stalled (AWREADY=0) until this buffer is ready. always_comb begin rp_valid[0] = txn_final_beat; - rp_resp[0] = txn_err || err ? AXI_RESP_SLVERR : - txn_ctx.lock && txn_allow ? AXI_RESP_EXOKAY : - AXI_RESP_OKAY; + rp_resp[0] = txn_allow && (txn_err || err) ? AXI_RESP_SLVERR : + txn_allow && txn_ctx.lock ? AXI_RESP_EXOKAY : + AXI_RESP_OKAY; rp_id[0] = txn_ctx.id; end From 02d939898a31035b526e4b9545a242989211b9b1 Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Tue, 28 May 2024 13:21:27 -0700 Subject: [PATCH 06/58] Add AXI sub wrapper and simplex arbiter --- src/axi/rtl/axi_sub.sv | 196 +++++++++++++++++++++++++++++++++++++ src/axi/rtl/axi_sub_arb.sv | 135 +++++++++++++++++++++++++ 2 files changed, 331 insertions(+) create mode 100644 src/axi/rtl/axi_sub.sv create mode 100644 src/axi/rtl/axi_sub_arb.sv diff --git a/src/axi/rtl/axi_sub.sv b/src/axi/rtl/axi_sub.sv new file mode 100644 index 000000000..319140172 --- /dev/null +++ b/src/axi/rtl/axi_sub.sv @@ -0,0 +1,196 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// ------------------------------------------------------------- +// AXI Subordinate +// ------------------------------------------------------------- +// Description: +// Subordinate to convert AXI protocol transactions into internal component accesses +// Includes an arbiter to squash duplex AXI transactions into simplex component operations +// May optionally include an Exclusive Access monitor (AxLOCK signal) +// +// Limitations: +// - When multiple ID tracking is enabled, write responses are returned in the +// same order they are received, regardless of ID. +// +// ------------------------------------------------------------- + +module axi_sub import axi_pkg::*; #( + parameter AW = 32, // Address Width + parameter DW = 32, // Data Width + BC = DW/8, // Byte Count + BW = $clog2(BC), // Byte count Width + parameter UW = 32, // User Width + parameter IW = 1, // ID Width + ID_NUM = 1 << IW, // Don't override + + parameter EX_EN = 0, // Enable exclusive access tracking w/ AxLOCK + parameter C_LAT = 0 // Component latency in clock cycles from (dv&&!hld) -> rdata + // Must be const per component + // For registers, typically 0 + // For SRAM, 1 or more +) ( + input clk, + input rst_n, + + // AXI INF + axi_if.w_sub s_axi_w_if, + axi_if.r_sub s_axi_r_if, + + //COMPONENT INF + output logic dv, + output logic [AW-1:0] addr, // Byte address + output logic [UW-1:0] user, + output logic [DW-1:0] wdata, // Requires: Component dwidth == AXI dwidth + output logic [BC-1:0] wstrb, // Requires: Component dwidth == AXI dwidth + input logic [DW-1:0] rdata, // Requires: Component dwidth == AXI dwidth + output logic last, // Asserted with final 'dv' of a burst + input logic hld, + input logic err + +); + + // Exclusive Access Signals + logic [ID_NUM-1:0] ex_clr; + logic [ID_NUM-1:0] ex_active; + axi_ex_ctx_t [ID_NUM-1:0] ex_ctx; + + //Read Subordinate INF + logic r_dv; + logic [AW-1:0] r_addr; // Byte address + logic [UW-1:0] r_user; + logic r_last; // Asserted with final 'dv' of a burst + logic r_hld; + logic r_err; + + logic [DW-1:0] r_rdata; // Requires: Component dwidth == AXI dwidth + + //Write Subordinate INF + logic w_dv; + logic [AW-1:0] w_addr; // Byte address + logic [UW-1:0] w_user; + logic [DW-1:0] w_wdata; // Requires: Component dwidth == AXI dwidth + logic [BC-1:0] w_wstrb; // Requires: Component dwidth == AXI dwidth + logic w_last; // Asserted with final 'dv' of a burst + logic w_hld; + logic w_err; + + + axi_sub_wr #( + .AW (AW ), + .DW (DW ), + .UW (UW ), + .IW (IW ), + + .EX_EN(EX_EN) + ) i_axi_sub_wr ( + .clk (clk ), + .rst_n(rst_n), + + // AXI INF + .s_axi_if(s_axi_w_if), + + // Exclusive Access Signals + .ex_clr (ex_clr ), + .ex_active(ex_active), + .ex_ctx (ex_ctx ), + + //COMPONENT INF + .dv (w_dv ), + .addr (w_addr ), + .user (w_user ), + .wdata(w_wdata), + .wstrb(w_wstrb), + .last (w_last ), + .hld (w_hld ), + .err (w_err ) + + ); + + axi_sub_rd #( + .AW(AW), + .DW(DW), + .UW(UW), + .IW(IW), + + .EX_EN(EX_EN), + .C_LAT(C_LAT) + ) i_axi_sub_rd ( + .clk (clk ), + .rst_n(rst_n), + + // AXI INF + .s_axi_if(s_axi_r_if), + + // Exclusive Access Signals + .ex_clr (ex_clr ), + .ex_active(ex_active), + .ex_ctx (ex_ctx ), + + //COMPONENT INF + .dv (r_dv ), + .addr (r_addr ), + .user (r_user ), + .last (r_last ), + .hld (r_hld ), + .err (r_err ), + + .rdata(r_rdata) + ); + + axi_sub_arb #( + .AW(AW), + .DW(DW), + .UW(UW), + .IW(IW), + + .EX_EN(EX_EN), + .C_LAT(C_LAT) + ) i_axi_sub_arb ( + .clk (clk ), + .rst_n (rst_n ), + + //Read Subordinate INF + .r_dv (r_dv ), + .r_addr (r_addr ), + .r_user (r_user ), + .r_last (r_last ), + .r_hld (r_hld ), + .r_err (r_err ), + .r_rdata(r_rdata), + + //Write Subordinate INF + .w_dv (w_dv ), + .w_addr (w_addr ), + .w_user (w_user ), + .w_wdata(w_wdata), + .w_wstrb(w_wstrb), + .w_last (w_last ), + .w_hld (w_hld ), + .w_err (w_err ), + + //COMPONENT INF + .dv (dv ), + .addr (addr ), + .user (user ), + .wdata (wdata ), + .wstrb (wstrb ), + .last (last ), + .hld (hld ), + .err (err ), + .rdata (rdata ) + ); + +endmodule diff --git a/src/axi/rtl/axi_sub_arb.sv b/src/axi/rtl/axi_sub_arb.sv new file mode 100644 index 000000000..235405d80 --- /dev/null +++ b/src/axi/rtl/axi_sub_arb.sv @@ -0,0 +1,135 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// ------------------------------------------------------------- +// AXI Subordinate Arbiter +// ------------------------------------------------------------- +// Description: +// Arbitrate between Reads and Writes coming from AXI subordinate modules. +// Always give precedence to Writes. +// +// ------------------------------------------------------------- + +module axi_sub_arb import axi_pkg::*; #( + parameter AW = 32, // Address Width + parameter DW = 32, // Data Width + BC = DW/8, // Byte Count + BW = $clog2(BC), // Byte count Width + parameter UW = 32, // User Width + parameter IW = 1, // ID Width + ID_NUM = 1 << IW, // Don't override + + parameter EX_EN = 0, // Enable exclusive access tracking w/ AxLOCK + parameter C_LAT = 0 // Component latency in clock cycles from (dv&&!hld) -> rdata + // Must be const per component + // For registers, typically 0 + // For SRAM, 1 or more +) ( + input clk, + input rst_n, + + //Read Subordinate INF + input logic r_dv, + input logic [AW-1:0] r_addr, // Byte address + input logic [UW-1:0] r_user, + input logic r_last, // Asserted with final 'dv' of a burst + output logic r_hld, + output logic r_err, + + output logic [DW-1:0] r_rdata, // Requires: Component dwidth == AXI dwidth + + //Write Subordinate INF + input logic w_dv, + input logic [AW-1:0] w_addr, // Byte address + input logic [UW-1:0] w_user, + input logic [DW-1:0] w_wdata, // Requires: Component dwidth == AXI dwidth + input logic [BC-1:0] w_wstrb, // Requires: Component dwidth == AXI dwidth + input logic w_last, // Asserted with final 'dv' of a burst + output logic w_hld, + output logic w_err, + + //COMPONENT INF + output logic dv, + output logic [AW-1:0] addr, // Byte address + output logic [UW-1:0] user, + output logic [DW-1:0] wdata, // Requires: Component dwidth == AXI dwidth + output logic [BC-1:0] wstrb, // Requires: Component dwidth == AXI dwidth + output logic last, // Asserted with final 'dv' of a burst + input logic hld, + input logic err, // FIXME Does this assert with dv or with rdata for reads (when C_LAT > 0)? + + input logic [DW-1:0] rdata // Requires: Component dwidth == AXI dwidth +); + + logic r_pri; // Priority to reads + logic r_win; + + // Switch priority to current arb winner so that priority persists + // in case + // a) it was granted during a hold + // b) it was granted at start of multi-beat burst + // Otherwise, always give priority to other channel at end of a burst + // to arbitrate fairly + always_ff@(posedge clk or negedge rst_n) begin + if (!rst_n) + r_pri <= 1'b0; + // Toggle priority at end of burst + else if (w_dv && !w_hld && w_last) + r_pri <= 1'b1; + else if (r_dv && !r_hld && r_last) + r_pri <= 1'b0; + // Keep priority when burst starts + else if (w_dv && !r_win && !w_last) + r_pri <= 1'b0; + else if (r_dv && r_win && !r_last) + r_pri <= 1'b1; + end + + always_comb begin +// case ({r_pri,r_dv,w_dv}) inside +// 3'b000: r_win = 0; +// 3'b001: r_win = 0; +// 3'b010: r_win = 1; +// 3'b011: r_win = 0; +// 3'b100: r_win = 1; +// 3'b101: r_win = 0; +// 3'b110: r_win = 1; +// 3'b111: r_win = 1; +// endcase + if (r_pri) r_win = r_dv || !w_dv; + else r_win = w_dv || !r_dv; + end + + always_comb begin + dv = r_dv || w_dv; + addr = r_win ? r_addr : w_addr; + user = r_win ? r_user : w_user; + last = r_win ? r_last : w_last; + r_hld = hld || !r_win; + w_hld = hld || r_win; + r_err = err; + w_err = err; + wdata = w_wdata; + wstrb = w_wstrb; + r_rdata = rdata; + end + + `CALIPTRA_ASSERT_NEVER(AXI_SUB_ARB_CONFLICT, r_dv && !r_hld && w_dv && !w_hld, clk, !rst_n) + // This arbiter can't deal with an err signal that asserts at + // a delay from the dv signal (as in the case of the read channel). + `CALIPTRA_ASSERT(AXI_SUB_ARB_LAT_ERR, C_LAT == 0, clk, !rst_n) + + +endmodule From 9c3343f7bb7b62057718f4f99c876c7e0ae9b1fe Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Wed, 29 May 2024 18:40:58 -0700 Subject: [PATCH 07/58] Syntax fix --- src/axi/rtl/axi_if.sv | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/axi/rtl/axi_if.sv b/src/axi/rtl/axi_if.sv index f76253f10..207589863 100644 --- a/src/axi/rtl/axi_if.sv +++ b/src/axi/rtl/axi_if.sv @@ -16,7 +16,7 @@ // Signals for a standard AXI4 compliant interface // -interface axi_if #(parameter AW = 32, parameter DW = 32, parameter IW = 3, parameter UW = 32); +interface axi_if #(parameter integer AW = 32, parameter integer DW = 32, parameter integer IW = 3, parameter integer UW = 32); import axi_pkg::*; @@ -81,7 +81,7 @@ interface axi_if #(parameter AW = 32, parameter DW = 32, parameter IW = 3, param input rid, input rlast, input rvalid, - output rready, + output rready ); // Modport for write manager @@ -127,7 +127,7 @@ interface axi_if #(parameter AW = 32, parameter DW = 32, parameter IW = 3, param output rid, output rlast, output rvalid, - input rready, + input rready ); // Modport for write subordinate From 5f5b0ef80cec5d0cd6c92ec54ce1be3c9894ae1e Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Thu, 30 May 2024 09:43:36 -0700 Subject: [PATCH 08/58] Add ID signal to component interface --- src/axi/rtl/axi_sub.sv | 8 ++++++++ src/axi/rtl/axi_sub_arb.sv | 4 ++++ src/axi/rtl/axi_sub_rd.sv | 2 ++ src/axi/rtl/axi_sub_wr.sv | 2 ++ 4 files changed, 16 insertions(+) diff --git a/src/axi/rtl/axi_sub.sv b/src/axi/rtl/axi_sub.sv index 319140172..222e47d0f 100644 --- a/src/axi/rtl/axi_sub.sv +++ b/src/axi/rtl/axi_sub.sv @@ -53,6 +53,7 @@ module axi_sub import axi_pkg::*; #( output logic dv, output logic [AW-1:0] addr, // Byte address output logic [UW-1:0] user, + output logic [IW-1:0] id, output logic [DW-1:0] wdata, // Requires: Component dwidth == AXI dwidth output logic [BC-1:0] wstrb, // Requires: Component dwidth == AXI dwidth input logic [DW-1:0] rdata, // Requires: Component dwidth == AXI dwidth @@ -71,6 +72,7 @@ module axi_sub import axi_pkg::*; #( logic r_dv; logic [AW-1:0] r_addr; // Byte address logic [UW-1:0] r_user; + logic [IW-1:0] r_id; logic r_last; // Asserted with final 'dv' of a burst logic r_hld; logic r_err; @@ -81,6 +83,7 @@ module axi_sub import axi_pkg::*; #( logic w_dv; logic [AW-1:0] w_addr; // Byte address logic [UW-1:0] w_user; + logic [IW-1:0] w_id; logic [DW-1:0] w_wdata; // Requires: Component dwidth == AXI dwidth logic [BC-1:0] w_wstrb; // Requires: Component dwidth == AXI dwidth logic w_last; // Asserted with final 'dv' of a burst @@ -111,6 +114,7 @@ module axi_sub import axi_pkg::*; #( .dv (w_dv ), .addr (w_addr ), .user (w_user ), + .id (w_id ), .wdata(w_wdata), .wstrb(w_wstrb), .last (w_last ), @@ -143,6 +147,7 @@ module axi_sub import axi_pkg::*; #( .dv (r_dv ), .addr (r_addr ), .user (r_user ), + .id (r_id ), .last (r_last ), .hld (r_hld ), .err (r_err ), @@ -166,6 +171,7 @@ module axi_sub import axi_pkg::*; #( .r_dv (r_dv ), .r_addr (r_addr ), .r_user (r_user ), + .r_id (r_id ), .r_last (r_last ), .r_hld (r_hld ), .r_err (r_err ), @@ -175,6 +181,7 @@ module axi_sub import axi_pkg::*; #( .w_dv (w_dv ), .w_addr (w_addr ), .w_user (w_user ), + .w_id (w_id ), .w_wdata(w_wdata), .w_wstrb(w_wstrb), .w_last (w_last ), @@ -185,6 +192,7 @@ module axi_sub import axi_pkg::*; #( .dv (dv ), .addr (addr ), .user (user ), + .id (id ), .wdata (wdata ), .wstrb (wstrb ), .last (last ), diff --git a/src/axi/rtl/axi_sub_arb.sv b/src/axi/rtl/axi_sub_arb.sv index 235405d80..e11935289 100644 --- a/src/axi/rtl/axi_sub_arb.sv +++ b/src/axi/rtl/axi_sub_arb.sv @@ -44,6 +44,7 @@ module axi_sub_arb import axi_pkg::*; #( input logic r_dv, input logic [AW-1:0] r_addr, // Byte address input logic [UW-1:0] r_user, + input logic [IW-1:0] r_id, input logic r_last, // Asserted with final 'dv' of a burst output logic r_hld, output logic r_err, @@ -54,6 +55,7 @@ module axi_sub_arb import axi_pkg::*; #( input logic w_dv, input logic [AW-1:0] w_addr, // Byte address input logic [UW-1:0] w_user, + input logic [IW-1:0] w_id, input logic [DW-1:0] w_wdata, // Requires: Component dwidth == AXI dwidth input logic [BC-1:0] w_wstrb, // Requires: Component dwidth == AXI dwidth input logic w_last, // Asserted with final 'dv' of a burst @@ -64,6 +66,7 @@ module axi_sub_arb import axi_pkg::*; #( output logic dv, output logic [AW-1:0] addr, // Byte address output logic [UW-1:0] user, + output logic [IW-1:0] id, output logic [DW-1:0] wdata, // Requires: Component dwidth == AXI dwidth output logic [BC-1:0] wstrb, // Requires: Component dwidth == AXI dwidth output logic last, // Asserted with final 'dv' of a burst @@ -116,6 +119,7 @@ module axi_sub_arb import axi_pkg::*; #( dv = r_dv || w_dv; addr = r_win ? r_addr : w_addr; user = r_win ? r_user : w_user; + id = r_win ? r_id : w_id ; last = r_win ? r_last : w_last; r_hld = hld || !r_win; w_hld = hld || r_win; diff --git a/src/axi/rtl/axi_sub_rd.sv b/src/axi/rtl/axi_sub_rd.sv index ae295879a..bdb1eb176 100644 --- a/src/axi/rtl/axi_sub_rd.sv +++ b/src/axi/rtl/axi_sub_rd.sv @@ -55,6 +55,7 @@ module axi_sub_rd import axi_pkg::*; #( output logic dv, output logic [AW-1:0] addr, // Byte address output logic [UW-1:0] user, + output logic [IW-1:0] id, output logic last, // Asserted with final 'dv' of a burst input logic hld, input logic err, @@ -165,6 +166,7 @@ module axi_sub_rd import axi_pkg::*; #( // Force aligned address to component always_comb addr = {txn_ctx.addr[AW-1:BW],BW'(0)}; always_comb user = txn_ctx.user; + always_comb id = txn_ctx.id; // Use full address to calculate next address (in case of arsize < data width) axi_addr #( diff --git a/src/axi/rtl/axi_sub_wr.sv b/src/axi/rtl/axi_sub_wr.sv index 68fd7eff3..62a700805 100644 --- a/src/axi/rtl/axi_sub_wr.sv +++ b/src/axi/rtl/axi_sub_wr.sv @@ -51,6 +51,7 @@ module axi_sub_wr import axi_pkg::*; #( output logic dv, output logic [AW-1:0] addr, // Byte address output logic [UW-1:0] user, + output logic [IW-1:0] id, output logic [DW-1:0] wdata, // Requires: Component dwidth == AXI dwidth output logic [BC-1:0] wstrb, // Requires: Component dwidth == AXI dwidth output logic last, // Asserted with final 'dv' of a burst @@ -198,6 +199,7 @@ module axi_sub_wr import axi_pkg::*; #( // Force aligned address to component always_comb addr = {txn_ctx.addr[AW-1:BW],BW'(0)}; always_comb user = txn_ctx.user; + always_comb id = txn_ctx.id; // Use full address to calculate next address (in case of AxSIZE < data width) axi_addr #( From 65dd299af4c5407a5cc1ed6f6b8d3fa2e841ba77 Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Thu, 30 May 2024 11:39:52 -0700 Subject: [PATCH 09/58] Add component inf 'write' signal --- src/axi/rtl/axi_sub.sv | 2 ++ src/axi/rtl/axi_sub_arb.sv | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/axi/rtl/axi_sub.sv b/src/axi/rtl/axi_sub.sv index 222e47d0f..cfdbfd984 100644 --- a/src/axi/rtl/axi_sub.sv +++ b/src/axi/rtl/axi_sub.sv @@ -52,6 +52,7 @@ module axi_sub import axi_pkg::*; #( //COMPONENT INF output logic dv, output logic [AW-1:0] addr, // Byte address + output logic write, output logic [UW-1:0] user, output logic [IW-1:0] id, output logic [DW-1:0] wdata, // Requires: Component dwidth == AXI dwidth @@ -191,6 +192,7 @@ module axi_sub import axi_pkg::*; #( //COMPONENT INF .dv (dv ), .addr (addr ), + .write (write ), .user (user ), .id (id ), .wdata (wdata ), diff --git a/src/axi/rtl/axi_sub_arb.sv b/src/axi/rtl/axi_sub_arb.sv index e11935289..aa770372c 100644 --- a/src/axi/rtl/axi_sub_arb.sv +++ b/src/axi/rtl/axi_sub_arb.sv @@ -65,6 +65,7 @@ module axi_sub_arb import axi_pkg::*; #( //COMPONENT INF output logic dv, output logic [AW-1:0] addr, // Byte address + output logic write, output logic [UW-1:0] user, output logic [IW-1:0] id, output logic [DW-1:0] wdata, // Requires: Component dwidth == AXI dwidth @@ -118,6 +119,7 @@ module axi_sub_arb import axi_pkg::*; #( always_comb begin dv = r_dv || w_dv; addr = r_win ? r_addr : w_addr; + write = r_win ? 0 : 1; user = r_win ? r_user : w_user; id = r_win ? r_id : w_id ; last = r_win ? r_last : w_last; From 2024d333f3090b83ad389ed492469e425147591b Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Fri, 31 May 2024 17:55:10 -0700 Subject: [PATCH 10/58] New handshake assertions; i/f X checks conditional upon valid signals --- src/axi/rtl/axi_sub_rd.sv | 26 +++++++++++++++----------- src/axi/rtl/axi_sub_wr.sv | 29 +++++++++++++++++------------ 2 files changed, 32 insertions(+), 23 deletions(-) diff --git a/src/axi/rtl/axi_sub_rd.sv b/src/axi/rtl/axi_sub_rd.sv index bdb1eb176..b7baf53a9 100644 --- a/src/axi/rtl/axi_sub_rd.sv +++ b/src/axi/rtl/axi_sub_rd.sv @@ -344,21 +344,25 @@ module axi_sub_rd import axi_pkg::*; #( // --------------------------------------- // // Formal Properties // // --------------------------------------- // - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARADDR , s_axi_if.araddr , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARBURST, s_axi_if.arburst, clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARSIZE , s_axi_if.arsize , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARLEN , s_axi_if.arlen , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARUSER , s_axi_if.aruser , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARID , s_axi_if.arid , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARLOCK , s_axi_if.arlock , clk, !rst_n) `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARVALID, s_axi_if.arvalid, clk, !rst_n) `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARREADY, s_axi_if.arready, clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RDATA , s_axi_if.rdata , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RRESP , s_axi_if.rresp , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RID , s_axi_if.rid , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RLAST , s_axi_if.rlast , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARADDR , (s_axi_if.arvalid ? s_axi_if.araddr : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARBURST, (s_axi_if.arvalid ? s_axi_if.arburst : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARSIZE , (s_axi_if.arvalid ? s_axi_if.arsize : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARLEN , (s_axi_if.arvalid ? s_axi_if.arlen : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARUSER , (s_axi_if.arvalid ? s_axi_if.aruser : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARID , (s_axi_if.arvalid ? s_axi_if.arid : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARLOCK , (s_axi_if.arvalid ? s_axi_if.arlock : '0), clk, !rst_n) `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RVALID , s_axi_if.rvalid , clk, !rst_n) `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RREADY , s_axi_if.rready , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RDATA , (s_axi_if.rvalid ? s_axi_if.rdata : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RRESP , (s_axi_if.rvalid ? s_axi_if.rresp : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RID , (s_axi_if.rvalid ? s_axi_if.rid : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RLAST , (s_axi_if.rvalid ? s_axi_if.rlast : '0), clk, !rst_n) + + // Handshake rules + `CALIPTRA_ASSERT (AXI_SUB_AR_HSHAKE_ERR, s_axi_if.arvalid && !s_axi_if.arready => s_axi_if.arvalid, clk, !rst_n) + `CALIPTRA_ASSERT (AXI_SUB_R_HSHAKE_ERR, s_axi_if.rvalid && !s_axi_if.rready => s_axi_if.rvalid, clk, !rst_n) `CALIPTRA_ASSERT_NEVER(ERR_AXI_RD_DROP , dp_rvalid[0] && !dp_rready[0], clk, !rst_n) `CALIPTRA_ASSERT_NEVER(ERR_AXI_RD_X , dp_rvalid[0] && $isunknown({dp_rdata[0],dp_xfer_ctx[0]}), clk, !rst_n) diff --git a/src/axi/rtl/axi_sub_wr.sv b/src/axi/rtl/axi_sub_wr.sv index 62a700805..cfd3998e2 100644 --- a/src/axi/rtl/axi_sub_wr.sv +++ b/src/axi/rtl/axi_sub_wr.sv @@ -316,24 +316,29 @@ module axi_sub_wr import axi_pkg::*; #( // --------------------------------------- // // Formal Properties // // --------------------------------------- // - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWADDR , s_axi_if.awaddr , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWBURST, s_axi_if.awburst, clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWSIZE , s_axi_if.awsize , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWLEN , s_axi_if.awlen , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWUSER , s_axi_if.awuser , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWID , s_axi_if.awid , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWLOCK , s_axi_if.awlock , clk, !rst_n) `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWVALID, s_axi_if.awvalid, clk, !rst_n) `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWREADY, s_axi_if.awready, clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_WDATA , s_axi_if.wdata , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_WSTRB , s_axi_if.wstrb , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWADDR , (s_axi_if.awvalid ? s_axi_if.awaddr : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWBURST, (s_axi_if.awvalid ? s_axi_if.awburst : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWSIZE , (s_axi_if.awvalid ? s_axi_if.awsize : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWLEN , (s_axi_if.awvalid ? s_axi_if.awlen : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWUSER , (s_axi_if.awvalid ? s_axi_if.awuser : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWID , (s_axi_if.awvalid ? s_axi_if.awid : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWLOCK , (s_axi_if.awvalid ? s_axi_if.awlock : '0), clk, !rst_n) `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_WVALID , s_axi_if.wvalid , clk, !rst_n) `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_WREADY , s_axi_if.wready , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_WLAST , s_axi_if.wlast , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_BRESP , s_axi_if.bresp , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_BID , s_axi_if.bid , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_WDATA , (s_axi_if.wvalid ? s_axi_if.wdata : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_WSTRB , (s_axi_if.wvalid ? s_axi_if.wstrb : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_WLAST , (s_axi_if.wvalid ? s_axi_if.wlast : '0), clk, !rst_n) `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_BVALID , s_axi_if.bvalid , clk, !rst_n) `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_BREADY , s_axi_if.bready , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_BRESP , (s_axi_if.bvalid ? s_axi_if.bresp : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_BID , (s_axi_if.bvalid ? s_axi_if.bid : '0), clk, !rst_n) + + // Handshake rules + `CALIPTRA_ASSERT (AXI_SUB_AW_HSHAKE_ERR, s_axi_if.awvalid && !s_axi_if.awready => s_axi_if.awvalid, clk, !rst_n) + `CALIPTRA_ASSERT (AXI_SUB_W_HSHAKE_ERR, s_axi_if.wvalid && !s_axi_if.wready => s_axi_if.wvalid, clk, !rst_n) + `CALIPTRA_ASSERT (AXI_SUB_B_HSHAKE_ERR, s_axi_if.bvalid && !s_axi_if.bready => s_axi_if.bvalid, clk, !rst_n) // Exclusive access rules: // - Must have an address that is aligned to burst byte count From 3d20f627adadeb5be724f877573030c1b030d0ef Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Thu, 16 May 2024 14:33:45 -0700 Subject: [PATCH 11/58] Initial pass at AXI sub -- read channel only --- src/axi/rtl/axi_addr.v | 235 ++++++++++++++++++ src/axi/rtl/axi_if.sv | 155 ++++++++++++ src/axi/rtl/axi_pkg.sv | 52 ++++ src/axi/rtl/axi_sub_rd.sv | 368 ++++++++++++++++++++++++++++ src/axi/rtl/skidbuffer.v | 495 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 1305 insertions(+) create mode 100644 src/axi/rtl/axi_addr.v create mode 100644 src/axi/rtl/axi_if.sv create mode 100644 src/axi/rtl/axi_pkg.sv create mode 100644 src/axi/rtl/axi_sub_rd.sv create mode 100644 src/axi/rtl/skidbuffer.v diff --git a/src/axi/rtl/axi_addr.v b/src/axi/rtl/axi_addr.v new file mode 100644 index 000000000..8b38874f7 --- /dev/null +++ b/src/axi/rtl/axi_addr.v @@ -0,0 +1,235 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Filename: axi_addr.v +// {{{ +// Project: WB2AXIPSP: bus bridges and other odds and ends +// +// Purpose: The AXI (full) standard has some rather complicated addressing +// modes, where the address can either be FIXED, INCRementing, or +// even where it can WRAP around some boundary. When in either INCR or +// WRAP modes, the next address must always be aligned. In WRAP mode, +// the next address calculation needs to wrap around a given value, and +// that value is dependent upon the burst size (i.e. bytes per beat) and +// length (total numbers of beats). Since this calculation can be +// non-trivial, and since it needs to be done multiple times, the logic +// below captures it for every time it might be needed. +// +// 20200918 - modified to accommodate (potential) AXI3 burst lengths +// +// Creator: Dan Gisselquist, Ph.D. +// Gisselquist Technology, LLC +// +//////////////////////////////////////////////////////////////////////////////// +// }}} +// Copyright (C) 2019-2024, Gisselquist Technology, LLC +// {{{ +// This file is part of the WB2AXIP project. +// +// The WB2AXIP project contains free software and gateware, licensed under the +// Apache License, Version 2.0 (the "License"). You may not use this project, +// or this file, except in compliance with the License. You may obtain a copy +// of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. +// +//////////////////////////////////////////////////////////////////////////////// +// +// +`default_nettype none +// }}} +module axi_addr #( + // {{{ + parameter AW = 32, + DW = 32, + // parameter [0:0] OPT_AXI3 = 1'b0, + localparam LENB = 8 + // }}} + ) ( + // {{{ + input wire [AW-1:0] i_last_addr, + input wire [2:0] i_size, // 1b, 2b, 4b, 8b, etc + input wire [1:0] i_burst, // fixed, incr, wrap, reserved + input wire [LENB-1:0] i_len, + output wire [AW-1:0] o_next_addr + // }}} + ); + + // Parameter/register declarations + // {{{ + localparam DSZ = $clog2(DW)-3; + localparam [1:0] FIXED = 2'b00; + // localparam [1:0] INCREMENT = 2'b01; + // localparam [1:0] WRAP = 2'b10; + localparam IN_AW = (AW >= 12) ? 12 : AW; + localparam [IN_AW-1:0] ONE = 1; + + reg [IN_AW-1:0] wrap_mask, increment; + reg [IN_AW-1:0] crossblk_addr, aligned_addr, unaligned_addr; + // }}} + + // Address increment + // {{{ + always @(*) + if (DSZ == 0) + increment = 1; + else if (DSZ == 1) + increment = (i_size[0]) ? 2 : 1; + else if (DSZ == 2) + increment = (i_size[1]) ? 4 : ((i_size[0]) ? 2 : 1); + else if (DSZ == 3) + case(i_size[1:0]) + 2'b00: increment = 1; + 2'b01: increment = 2; + 2'b10: increment = 4; + 2'b11: increment = 8; + endcase + else + increment = (1<1) ? 1 : (AW-1):0]= 0; + 2'b11: aligned_addr[(AW-1>2) ? 2 : (AW-1):0]= 0; + endcase + // }}} + end else begin + // {{{ + // Align any subsequent address + case(i_size) + 3'b001: aligned_addr[ 0] = 0; + 3'b010: aligned_addr[(AW-1>1) ? 1 : (AW-1):0]=0; + 3'b011: aligned_addr[(AW-1>2) ? 2 : (AW-1):0]=0; + 3'b100: aligned_addr[(AW-1>3) ? 3 : (AW-1):0]=0; + 3'b101: aligned_addr[(AW-1>4) ? 4 : (AW-1):0]=0; + 3'b110: aligned_addr[(AW-1>5) ? 5 : (AW-1):0]=0; + 3'b111: aligned_addr[(AW-1>6) ? 6 : (AW-1):0]=0; + default: aligned_addr = unaligned_addr; + endcase + // }}} + end + // }}} + end else + aligned_addr = i_last_addr[IN_AW-1:0]; + // }}} + + // crossblk_addr from aligned_addr, for WRAP addressing + // {{{ + always @(*) + if (i_burst[1]) + begin + // WRAP! + crossblk_addr[IN_AW-1:0] = (i_last_addr[IN_AW-1:0] & ~wrap_mask) + | (aligned_addr & wrap_mask); + end else + crossblk_addr[IN_AW-1:0] = aligned_addr; + // }}} + + // o_next_addr: Guarantee only the bottom 12 bits change + // {{{ + // This is really a logic simplification. AXI bursts aren't allowed + // to cross 4kB boundaries. Given that's the case, we don't have to + // suffer from the propagation across all AW bits, and can limit any + // address propagation to just the lower 12 bits + generate if (AW > 12) + begin : WIDE_ADDRESS + assign o_next_addr = { i_last_addr[AW-1:12], + crossblk_addr[11:0] }; + end else begin : NARROW_ADDRESS + assign o_next_addr = crossblk_addr[AW-1:0]; + end endgenerate + // }}} + + // Make Verilator happy + // {{{ + // Verilator lint_off UNUSED + wire unused; + assign unused = (LENB <= 4) ? &{1'b0, i_len[0] } + : &{ 1'b0, i_len[LENB-1:4], i_len[0] }; + // Verilator lint_on UNUSED + // }}} +endmodule diff --git a/src/axi/rtl/axi_if.sv b/src/axi/rtl/axi_if.sv new file mode 100644 index 000000000..3f4662788 --- /dev/null +++ b/src/axi/rtl/axi_if.sv @@ -0,0 +1,155 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Description: +// Signals for a standard AXI4 compliant interface +// + +interface axi_if #(parameter AW = 32, parameter DW = 32, parameter IW = 3, parameter UW = 32); + + import axi_pkg::*; + + // AXI AR + logic [AW-1:0] araddr; + logic [1:0] arburst; + logic [2:0] arsize; + logic [7:0] arlen; + logic [UW-1:0] aruser; + logic [IW-1:0] arid; + logic arlock; + logic arvalid; + logic arready; + + // AXI R + logic [DW-1:0] rdata; + logic [1:0] rresp; + logic [IW-1:0] rid; + logic rlast; + logic rvalid; + logic rready; + + // AXI AW + logic [AW-1:0] awaddr; + logic [1:0] awburst; + logic [2:0] awsize; + logic [7:0] awlen; + logic [UW-1:0] awuser; + logic [IW-1:0] awid; + logic awlock; + logic awvalid; + logic awready; + + // AXI W + logic [DW-1:0] wdata; + logic [DW/8-1:0] wstrb; + logic wvalid; + logic wready; + + // AXI B + logic [1:0] bresp; + logic [IW-1:0] bid; + logic bvalid; + logic bready; + + // Modport for read manager + modport r_mgr ( + // AR + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + input arready, + // R + input rdata, + input rresp, + input rid, + input rlast, + input rvalid, + output rready, + ); + + // Modport for write manager + modport w_mgr ( + // AW + output awaddr, + output awburst, + output awsize, + output awlen, + output awuser, + output awid, + output awlock, + output awvalid, + input awready, + // W + output wdata, + output wstrb, + output wvalid, + input wready, + // B + input bresp, + input bid, + input bvalid, + output bready + ); + + // Modport for read subordinate + modport r_sub ( + // AR + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + output arready, + // R + output rdata, + output rresp, + output rid, + output rlast, + output rvalid, + input rready, + ); + + // Modport for write subordinate + modport w_sub ( + // AW + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + output awready, + // W + input wdata, + input wstrb, + input wvalid, + output wready, + // B + output bresp, + output bid, + output bvalid, + input bready + ); + +endinterface diff --git a/src/axi/rtl/axi_pkg.sv b/src/axi/rtl/axi_pkg.sv new file mode 100644 index 000000000..36346f00d --- /dev/null +++ b/src/axi/rtl/axi_pkg.sv @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +package axi_pkg; + + // AXI Burst Enum + typedef enum logic [1:0] { + AXI_BURST_FIXED = 2'b00, + AXI_BURST_INCR = 2'b01, + AXI_BURST_WRAP = 2'b10, + AXI_BURST_RESERVED = 2'b11 + } axi_burst_e; + + // AXI Resp Enum + typedef enum logic [1:0] { + AXI_RESP_OKAY = 2'b00, + AXI_RESP_EXOKAY = 2'b01, + AXI_RESP_SLVERR = 2'b10, + AXI_RESP_DECERR = 2'b11 + } axi_resp_e; + + // Transaction context + typedef struct packed { + logic [AW-1:0] addr; + logic [1:0] burst; + logic [2:0] size; + logic [7:0] len; + logic [UW-1:0] user; + logic [IW-1:0] id; + logic lock; + } axi_ctx_t; + + typedef struct packed { + logic [IW-1:0] id; + logic [UW-1:0] user; + logic [ 1:0] resp; + logic last; + } xfer_ctx_t; + +endpackage diff --git a/src/axi/rtl/axi_sub_rd.sv b/src/axi/rtl/axi_sub_rd.sv new file mode 100644 index 000000000..186cf7bef --- /dev/null +++ b/src/axi/rtl/axi_sub_rd.sv @@ -0,0 +1,368 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// ------------------------------------------------------------- +// AXI Read Subordinate +// ------------------------------------------------------------- +// Description: +// Subordinate to convert AXI protocol reads into internal component accesses +// +// Limitations: +// - When multiple ID tracking is enabled, read responses are returned in the +// same order they are received, regardless of ID. +// +// ------------------------------------------------------------- + +module axi_sub_rd import axi_pkg::*; #( + parameter AW = 32, // Address Width + parameter DW = 32, // Data Width + BC = DW/8, // Byte Count + BW = $clog2(BC), // Byte count Width + parameter UW = 32, // User Width + parameter IW = 1, // ID Width + ID_NUM = 1 << IW, // Don't override + + parameter EX_EN = 1, // Enable exclusive access tracking w/ AxLOCK + parameter C_LAT = 0 // Component latency in clock cycles from (dv&&!hld) -> rdata + // Must be const per component + // For registers, typically 0 + // For SRAM, 1 or more +) ( + input clk, + input rst_n, + + // AXI INF + axi_if.r_sub s_axi_if, + + // Exclusive Access Signals + input logic ex_clr, + input logic [IW -1:0] ex_clr_id, + output logic [ID_NUM-1:0] ex_active, + output var axi_ctx_t [ID_NUM-1:0] ex_ctx, + + //COMPONENT INF + output logic dv, + output logic [AW-1:0] addr, // Byte address + output logic [UW-1:0] user, + output logic last, // Asserted with final 'dv' of a burst + input logic hld, + input logic err, + + input logic [DW-1:0] rdata // Integ requires: Component dwidth == AXI dwidth +); + + // --------------------------------------- // + // Localparams/Typedefs // + // --------------------------------------- // + + + // --------------------------------------- // + // Signals // + // --------------------------------------- // + + genvar cp; // Context pipeline + genvar dp; // Data pipeline + genvar ex; // Exclusive contexts + + // Active transaction signals + // track requests as they are sent to component + axi_ctx_t txn_ctx; + logic [AW-1:0] txn_addr_nxt; + logic [ 7:0] txn_cnt; // Internal down-counter to track txn progress + logic txn_active; + logic [C_LAT:0] txn_rvalid; + xfer_ctx_t [C_LAT:0] txn_xfer_ctx; + logic txn_final_beat; + + // Data pipeline signals (skid buffer) + // track data after it is received from component + logic [C_LAT+1:0] [DW-1:0] dp_rdata; + xfer_ctx_t [C_LAT+1:0] dp_xfer_ctx; + logic [C_LAT+1:0] dp_rvalid; + logic [C_LAT+1:0] dp_rready; + + + // --------------------------------------- // + // Address Request I/F // + // --------------------------------------- // + + assign s_axi_if.arready = !txn_active || txn_final_beat; + + // Indicates there are still reqs to be issued towards component. + // This active signal deasserts after final dv to component, meaning data is + // still in flight from component->AXI for C_LAT clocks after deassertion + always@(posedge clk or negedge rst_n) begin + if (!rst_n) begin + txn_active <= 1'b0; + end + else if (s_axi_if.arvalid) begin + txn_active <= 1'b1; + end + else if (txn_final_beat) begin + txn_active <= 1'b0; + end + else begin + txn_active <= txn_active; + end + end + + // TODO reset? + always@(posedge clk/* or negedge rst_n*/) begin +// if (!rst_n) begin +// txn_ctx <= '{default:0}; +// end + else if (s_axi_if.arvalid && s_axi_if.arready) begin + txn_ctx.addr <= s_axi_if.araddr; + txn_ctx.burst <= s_axi_if.arburst; + txn_ctx.size <= s_axi_if.arsize; + txn_ctx.len <= s_axi_if.arlen ; + txn_ctx.user <= s_axi_if.aruser; + txn_ctx.id <= s_axi_if.arid ; + txn_ctx.lock <= s_axi_if.arlock; + txn_cnt <= s_axi_if.arlen ; + end + else if (txn_rvalid[0]) begin + txn_ctx.addr <= txn_addr_nxt; + txn_ctx.burst <= s_axi_if.arburst; + txn_ctx.size <= s_axi_if.arsize; + txn_ctx.len <= s_axi_if.arlen ; + txn_ctx.user <= s_axi_if.aruser; + txn_ctx.id <= s_axi_if.arid ; + txn_ctx.lock <= s_axi_if.arlock; + txn_cnt <= |txn_cnt ? txn_cnt - 1 : txn_cnt; // Prevent underflow to 255 at end to reduce switching power. Extra logic cost worth it? + end + else begin + txn_ctx <= txn_ctx; + end + end + + // Only make the request to component if we have space in the pipeline to + // store the result (under worst-case AXI backpressure) + // To check this, look at the 'ready' output from the FINAL stage of the + // skidbuffer pipeline + always_comb dv = txn_active && dp_rready[C_LAT]; + always_comb txn_rvalid[0] = dv && !hld; + + // Asserts on the final beat of the COMPONENT INF which means it lags the + // final AXI beat by at least C_LAT clocks (or more depending on backpressure) + always_comb txn_final_beat = txn_rvalid[0] && txn_xfer_ctx[0].last; + + + // --------------------------------------- // + // Address Calculations // + // --------------------------------------- // + // Force aligned address to component + always_comb addr = {txn_ctx.addr[AW-1:BW],BW'(0)}; + + // Use full address to calculate next address (in case of arsize < data width) + axi_addr #( + .AW (AW), + .DW (DW), + .LENB(8 ) + ) i_axi_addr ( + .i_last_addr(txn_ctx.addr ), + .i_size (txn_ctx.size ), // 1b, 2b, 4b, 8b, etc + .i_burst (txn_ctx.burst), // fixed, incr, wrap, reserved + .i_len (txn_ctx.len ), + .o_next_addr(txn_addr_nxt ) + ); + + + // --------------------------------------- // + // Request Context Pipeline // + // --------------------------------------- // + always_comb begin + txn_xfer_ctx[0].id = txn_ctx.id; + txn_xfer_ctx[0].user = txn_ctx.user; + txn_xfer_ctx[0].last = txn_cnt == 0; + txn_xfer_ctx[0].resp = (EX_EN && txn_ctx.lock && /*FIXME*/) ? AXI_RESP_EXOKAY : AXI_RESP_OKAY; + end + + // Shift Register to track requests made to component + generate + if (C_LAT > 0) begin: TXN_SR + always@(posedge clk or negedge rst_n) begin + if (!rst_n) begin + txn_rvalid[C_LAT:1] <= C_LAT'(0); + end + else begin + txn_rvalid[C_LAT:1] <= txn_rvalid[C_LAT-1:0]; + end + end + + // Context is maintained alongside request while waiting for + // component response to arrive + if (C_LAT > 1) begin + for (cp = 1; cp <= C_LAT; cp++) begin: CTX_PIPELINE + // No reset needed on data path -- txn_rvalid (control path) is reset + always@(posedge clk) begin + txn_xfer_ctx[cp] <= txn_xfer_ctx[cp-1]; + end + end: CTX_PIPELINE + end + + end: TXN_SR + endgenerate + + + // --------------------------------------- // + // Exclusive Access Tracking // + // --------------------------------------- // + generate + if (EX_EN) begin: EX_AXS_TRACKER + always@(posedge clk or negedge rst_n) begin + if (!rst_n) begin + ex_active <= '0; + end + // give 'set' precedence over 'clr' in case of same ID + else if ((txn_rvalid[0] && txn_ctx.lock) && ex_clr) begin + ex_active <= (ex_active & ~(1 << ex_clr_id)) | (1 << txn_ctx.id); + end + else if (txn_rvalid[0] && txn_ctx.lock) begin + ex_active <= ex_active; + end + else if (ex_clr) begin + ex_active <= ex_active & ~(1 << ex_clr_id); + end + else begin + ex_active <= ex_active; + end + end + + for (ex = 0; ex < ID_NUM; ex++) begin: EX_CTX_TRACKER + // TODO: reset? + always@(posedge clk) begin + if (txn_rvalid[0] && txn_ctx.lock && (txn_ctx.id == ex)) begin + ex_ctx[ex] <= txn_ctx; + end + // Ignore the clear case, as ex_active is ctrl path + //else if (ex_clr && (ex_clr_id == ex)) begin + //end + else begin + ex_ctx[ex] <= ex_ctx[ex]; + end + end + end + end: EX_AXS_TRACKER + else begin: EX_UNSUPPORTED + for (ex = 0; ex < ID_NUM; ex++) begin: EX_SIG_0 + always_comb begin + ex_active[ex] = 1'b0; + ex_ctx[ex] = '{default:0}; + end + end: EX_SIG_0 + end: EX_UNSUPPORTED + endgenerate + + + // --------------------------------------- // + // Data/Response // + // --------------------------------------- // + always_comb dp_rvalid[0] = txn_rvalid[C_LAT]; + always_comb dp_rdata[0] = rdata; + always_comb begin + dp_xfer_ctx[0].id = txn_xfer_ctx[C_LAT].id; + dp_xfer_ctx[0].user = txn_xfer_ctx[C_LAT].user; // NOTE: Unused after it enters data pipeline + dp_xfer_ctx[0].resp = err ? AXI_RESP_SLVERR : + EX_EN ? txn_xfer_ctx[C_LAT].resp : + AXI_RESP_OKAY; + dp_xfer_ctx[0].last = txn_xfer_ctx[C_LAT].last; + end + + generate + for (dp = 0; dp <= C_LAT; dp++) begin: DATA_PIPELINE + // skidbuffer instance to pipeline data payload + context to AXI, + // after response is received from component. + // This is necessary when there is latency from dv->rdata, + // because AXI R channel can be stalled by dropping rready, + // and we can't drop the data (which was requested N cycles ago) + skidbuffer #( + .OPT_LOWPOWER (0 ), + .OPT_OUTREG (0 ), + // + .OPT_PASSTHROUGH(0 ), + .DW (DW + $bits(xfer_ctx_t)), + .OPT_INITIAL (1'b1) + ) i_dp_skd ( + .i_clk (clk ), + .i_reset(!rst_n ), + .i_valid(dp_rvalid[dp] ), + .o_ready(dp_rready[dp] ), + .i_data ({dp_rdata[dp] + dp_xfer_ctx[dp]} ), + .o_valid(dp_rvalid[dp+1] ), + .i_ready(dp_rready[dp+1] ), + .o_data ({dp_rdata[dp+1], + dp_xfer_ctx[dp+1]}) + ); + + end: DATA_PIPELINE + endgenerate + + always_comb dp_rready[C_LAT+1] = s_axi_if.rready; + always_comb begin + s_axi_if.rvalid = dp_rvalid[C_LAT+1]; + s_axi_if.rdata = dp_rdata[C_LAT+1]; + s_axi_if.rid = dp_xfer_ctx[C_LAT+1].id; + s_axi_if.rresp = dp_xfer_ctx[C_LAT+1].resp; + end + + + // --------------------------------------- // + // Formal Properties // + // --------------------------------------- // + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARADDR , s_axi_if.araddr , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARBURST, s_axi_if.arburst, clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARSIZE , s_axi_if.arsize , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARLEN , s_axi_if.arlen , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARUSER , s_axi_if.aruser , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARID , s_axi_if.arid , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARLOCK , s_axi_if.arlock , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARVALID, s_axi_if.arvalid, clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARREADY, s_axi_if.arready, clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RDATA , s_axi_if.rdata , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RRESP , s_axi_if.rresp , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RID , s_axi_if.rid , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RLAST , s_axi_if.rlast , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RVALID , s_axi_if.rvalid , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RREADY , s_axi_if.rready , clk, !rst_n) + + `CALIPTRA_ASSERT_NEVER(ERR_AXI_RD_DROP , dp_rvalid[0] && !dp_rready[0], clk, !rst_n) + `CALIPTRA_ASSERT_NEVER(ERR_AXI_RD_X , dp_rvalid[0] && !$isunknown({dp_rdata[0],dp_xfer_ctx[0]}), clk, !rst_n) + // Exclusive access rules: + // - Must have an address that is aligned to burst byte count + // - Byte count must be power of 2 inside 1:128 + // - Max burst length = 16 + `CALIPTRA_ASSERT (ERR_AXI_EX_UNALGN , (s_axi_if.arvalid && s_axi_if.arlock) -> ~|s_axi_if.araddr[$clog2((1< ((1< (s_axi_if.arlen < 16), clk, !rst_n) + + genvar sva_ii; + generate + if (C_LAT > 0) begin + for (sva_ii = 0; sva_ii < C_LAT; sva_ii++) begin + // Last stage should be first to fill and last to go empty + `CALIPTRA_ASSERT_NEVER(ERR_RD_SKD_BUF, dp_rready[sva_ii+1] && !dp_rready[sva_ii], clk, !rst_n) + end + end + endgenerate + + + // --------------------------------------- // + // Coverage // + // --------------------------------------- // + + +endmodule diff --git a/src/axi/rtl/skidbuffer.v b/src/axi/rtl/skidbuffer.v new file mode 100644 index 000000000..e6b1a62a2 --- /dev/null +++ b/src/axi/rtl/skidbuffer.v @@ -0,0 +1,495 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Filename: skidbuffer.v +// {{{ +// Project: WB2AXIPSP: bus bridges and other odds and ends +// +// Purpose: A basic SKID buffer. +// {{{ +// Skid buffers are required for high throughput AXI code, since the AXI +// specification requires that all outputs be registered. This means +// that, if there are any stall conditions calculated, it will take a clock +// cycle before the stall can be propagated up stream. This means that +// the data will need to be buffered for a cycle until the stall signal +// can make it to the output. +// +// Handling that buffer is the purpose of this core. +// +// On one end of this core, you have the i_valid and i_data inputs to +// connect to your bus interface. There's also a registered o_ready +// signal to signal stalls for the bus interface. +// +// The other end of the core has the same basic interface, but it isn't +// registered. This allows you to interact with the bus interfaces +// as though they were combinatorial logic, by interacting with this half +// of the core. +// +// If at any time the incoming !stall signal, i_ready, signals a stall, +// the incoming data is placed into a buffer. Internally, that buffer +// is held in r_data with the r_valid flag used to indicate that valid +// data is within it. +// }}} +// Parameters: +// {{{ +// DW or data width +// In order to make this core generic, the width of the data in the +// skid buffer is parameterized +// +// OPT_LOWPOWER +// Forces both o_data and r_data to zero if the respective *VALID +// signal is also low. While this costs extra logic, it can also +// be used to guarantee that any unused values aren't toggling and +// therefore unnecessarily using power. +// +// This excess toggling can be particularly problematic if the +// bus signals have a high fanout rate, or a long signal path +// across an FPGA. +// +// OPT_OUTREG +// Causes the outputs to be registered +// +// OPT_PASSTHROUGH +// Turns the skid buffer into a passthrough. Used for formal +// verification only. +// }}} +// Creator: Dan Gisselquist, Ph.D. +// Gisselquist Technology, LLC +// +//////////////////////////////////////////////////////////////////////////////// +// }}} +// Copyright (C) 2019-2024, Gisselquist Technology, LLC +// {{{ +// This file is part of the WB2AXIP project. +// +// The WB2AXIP project contains free software and gateware, licensed under the +// Apache License, Version 2.0 (the "License"). You may not use this project, +// or this file, except in compliance with the License. You may obtain a copy +// of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. +// +//////////////////////////////////////////////////////////////////////////////// +// +// +`default_nettype none +// }}} +module skidbuffer #( + // {{{ + parameter [0:0] OPT_LOWPOWER = 0, + parameter [0:0] OPT_OUTREG = 1, + // + parameter [0:0] OPT_PASSTHROUGH = 0, + parameter DW = 8, + parameter [0:0] OPT_INITIAL = 1'b1 + // }}} + ) ( + // {{{ + input wire i_clk, i_reset, + input wire i_valid, + output wire o_ready, + input wire [DW-1:0] i_data, + output wire o_valid, + input wire i_ready, + output reg [DW-1:0] o_data + // }}} + ); + + wire [DW-1:0] w_data; + + generate if (OPT_PASSTHROUGH) + begin : PASSTHROUGH + // {{{ + assign { o_valid, o_ready } = { i_valid, i_ready }; + + always @(*) + if (!i_valid && OPT_LOWPOWER) + o_data = 0; + else + o_data = i_data; + + assign w_data = 0; + + // Keep Verilator happy + // Verilator lint_off UNUSED + // {{{ + wire unused_passthrough; + assign unused_passthrough = &{ 1'b0, i_clk, i_reset }; + // }}} + // Verilator lint_on UNUSED + // }}} + end else begin : LOGIC + // We'll start with skid buffer itself + // {{{ + reg r_valid; + reg [DW-1:0] r_data; + + // r_valid + // {{{ + initial if (OPT_INITIAL) r_valid = 0; + always @(posedge i_clk) + if (i_reset) + r_valid <= 0; + else if ((i_valid && o_ready) && (o_valid && !i_ready)) + // We have incoming data, but the output is stalled + r_valid <= 1; + else if (i_ready) + r_valid <= 0; + // }}} + + // r_data + // {{{ + initial if (OPT_INITIAL) r_data = 0; + always @(posedge i_clk) + if (OPT_LOWPOWER && i_reset) + r_data <= 0; + else if (OPT_LOWPOWER && (!o_valid || i_ready)) + r_data <= 0; + else if ((!OPT_LOWPOWER || !OPT_OUTREG || i_valid) && o_ready) + r_data <= i_data; + + assign w_data = r_data; + // }}} + + // o_ready + // {{{ + assign o_ready = !r_valid; + // }}} + + // + // And then move on to the output port + // + if (!OPT_OUTREG) + begin : NET_OUTPUT + // Outputs are combinatorially determined from inputs + // {{{ + // o_valid + // {{{ + assign o_valid = !i_reset && (i_valid || r_valid); + // }}} + + // o_data + // {{{ + always @(*) + if (r_valid) + o_data = r_data; + else if (!OPT_LOWPOWER || i_valid) + o_data = i_data; + else + o_data = 0; + // }}} + // }}} + end else begin : REG_OUTPUT + // Register our outputs + // {{{ + // o_valid + // {{{ + reg ro_valid; + + initial if (OPT_INITIAL) ro_valid = 0; + always @(posedge i_clk) + if (i_reset) + ro_valid <= 0; + else if (!o_valid || i_ready) + ro_valid <= (i_valid || r_valid); + + assign o_valid = ro_valid; + // }}} + + // o_data + // {{{ + initial if (OPT_INITIAL) o_data = 0; + always @(posedge i_clk) + if (OPT_LOWPOWER && i_reset) + o_data <= 0; + else if (!o_valid || i_ready) + begin + + if (r_valid) + o_data <= r_data; + else if (!OPT_LOWPOWER || i_valid) + o_data <= i_data; + else + o_data <= 0; + end + // }}} + + // }}} + end + // }}} + end endgenerate + + // Keep Verilator happy + // {{{ + // Verilator lint_off UNUSED + wire unused; + assign unused = &{ 1'b0, w_data }; + // Verilator lint_on UNUSED + // }}} +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// +// +// Formal properties +// {{{ +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// +`ifdef FORMAL +`ifdef SKIDBUFFER +`define ASSUME assume +`else +`define ASSUME assert +`endif + + reg f_past_valid; + + initial f_past_valid = 0; + always @(posedge i_clk) + f_past_valid <= 1; + + always @(*) + if (!f_past_valid) + assume(i_reset); + + //////////////////////////////////////////////////////////////////////// + // + // Incoming stream properties / assumptions + // {{{ + //////////////////////////////////////////////////////////////////////// + // + always @(posedge i_clk) + if (!f_past_valid) + begin + `ASSUME(!i_valid || !OPT_INITIAL); + end else if ($past(i_valid && !o_ready && !i_reset) && !i_reset) + `ASSUME(i_valid && $stable(i_data)); + +`ifdef VERIFIC +`define FORMAL_VERIFIC + // Reset properties + property RESET_CLEARS_IVALID; + @(posedge i_clk) i_reset |=> !i_valid; + endproperty + + property IDATA_HELD_WHEN_NOT_READY; + @(posedge i_clk) disable iff (i_reset) + i_valid && !o_ready |=> i_valid && $stable(i_data); + endproperty + +`ifdef SKIDBUFFER + assume property (IDATA_HELD_WHEN_NOT_READY); +`else + assert property (IDATA_HELD_WHEN_NOT_READY); +`endif +`endif + // }}} + //////////////////////////////////////////////////////////////////////// + // + // Outgoing stream properties / assumptions + // {{{ + //////////////////////////////////////////////////////////////////////// + // + + generate if (!OPT_PASSTHROUGH) + begin + + always @(posedge i_clk) + if (!f_past_valid) // || $past(i_reset)) + begin + // Following any reset, valid must be deasserted + assert(!o_valid || !OPT_INITIAL); + end else if ($past(o_valid && !i_ready && !i_reset) && !i_reset) + // Following any stall, valid must remain high and + // data must be preserved + assert(o_valid && $stable(o_data)); + + end endgenerate + // }}} + //////////////////////////////////////////////////////////////////////// + // + // Other properties + // {{{ + //////////////////////////////////////////////////////////////////////// + // + // + generate if (!OPT_PASSTHROUGH) + begin + // Rule #1: + // If registered, then following any reset we should be + // ready for a new request + // {{{ + always @(posedge i_clk) + if (f_past_valid && $past(OPT_OUTREG && i_reset)) + assert(o_ready); + // }}} + + // Rule #2: + // All incoming data must either go directly to the + // output port, or into the skid buffer + // {{{ +`ifndef VERIFIC + always @(posedge i_clk) + if (f_past_valid && !$past(i_reset) && $past(i_valid && o_ready + && (!OPT_OUTREG || o_valid) && !i_ready)) + assert(!o_ready && w_data == $past(i_data)); +`else + assert property (@(posedge i_clk) + disable iff (i_reset) + (i_valid && o_ready + && (!OPT_OUTREG || o_valid) && !i_ready) + |=> (!o_ready && w_data == $past(i_data))); +`endif + // }}} + + // Rule #3: + // After the last transaction, o_valid should become idle + // {{{ + if (!OPT_OUTREG) + begin + // {{{ + always @(posedge i_clk) + if (f_past_valid && !$past(i_reset) && !i_reset + && $past(i_ready)) + begin + assert(o_valid == i_valid); + assert(!i_valid || (o_data == i_data)); + end + // }}} + end else begin + // {{{ + always @(posedge i_clk) + if (f_past_valid && !$past(i_reset)) + begin + if ($past(i_valid && o_ready)) + assert(o_valid); + + if ($past(!i_valid && o_ready && i_ready)) + assert(!o_valid); + end + // }}} + end + // }}} + + // Rule #4 + // Same thing, but this time for o_ready + // {{{ + always @(posedge i_clk) + if (f_past_valid && $past(!o_ready && i_ready)) + assert(o_ready); + // }}} + + // If OPT_LOWPOWER is set, o_data and w_data both need to be + // zero any time !o_valid or !r_valid respectively + // {{{ + if (OPT_LOWPOWER) + begin + always @(*) + if ((OPT_OUTREG || !i_reset) && !o_valid) + assert(o_data == 0); + + always @(*) + if (o_ready) + assert(w_data == 0); + + end + // }}} + end endgenerate + // }}} + //////////////////////////////////////////////////////////////////////// + // + // Cover checks + // {{{ + //////////////////////////////////////////////////////////////////////// + // + // +`ifdef SKIDBUFFER + generate if (!OPT_PASSTHROUGH) + begin + reg f_changed_data; + + initial f_changed_data = 0; + always @(posedge i_clk) + if (i_reset) + f_changed_data <= 1; + else if (i_valid && $past(!i_valid || o_ready)) + begin + if (i_data != $past(i_data + 1)) + f_changed_data <= 0; + end else if (!i_valid && i_data != 0) + f_changed_data <= 0; + + +`ifndef VERIFIC + reg [3:0] cvr_steps, cvr_hold; + + always @(posedge i_clk) + if (i_reset) + begin + cvr_steps <= 0; + cvr_hold <= 0; + end else begin + cvr_steps <= cvr_steps + 1; + cvr_hold <= cvr_hold + 1; + case(cvr_steps) + 0: if (o_valid || i_valid) + cvr_steps <= 0; + 1: if (!i_valid || !i_ready) + cvr_steps <= 0; + 2: if (!i_valid || !i_ready) + cvr_steps <= 0; + 3: if (!i_valid || !i_ready) + cvr_steps <= 0; + 4: if (!i_valid || i_ready) + cvr_steps <= 0; + 5: if (!i_valid || !i_ready) + cvr_steps <= 0; + 6: if (!i_valid || !i_ready) + cvr_steps <= 0; + 7: if (!i_valid || i_ready) + cvr_steps <= 0; + 8: if (!i_valid || i_ready) + cvr_steps <= 0; + 9: if (!i_valid || !i_ready) + cvr_steps <= 0; + 10: if (!i_valid || !i_ready) + cvr_steps <= 0; + 11: if (!i_valid || !i_ready) + cvr_steps <= 0; + 12: begin + cvr_steps <= cvr_steps; + cover(!o_valid && !i_valid && f_changed_data); + if (!o_valid || !i_ready) + cvr_steps <= 0; + else + cvr_hold <= cvr_hold + 1; + end + default: assert(0); + endcase + end + +`else + // Cover test + cover property (@(posedge i_clk) + disable iff (i_reset) + (!o_valid && !i_valid) + ##1 i_valid && i_ready [*3] + ##1 i_valid && !i_ready + ##1 i_valid && i_ready [*2] + ##1 i_valid && !i_ready [*2] + ##1 i_valid && i_ready [*3] + // Wait for the design to clear + ##1 o_valid && i_ready [*0:5] + ##1 (!o_valid && !i_valid && f_changed_data)); +`endif + end endgenerate +`endif // SKIDBUFFER + // }}} +`endif +// }}} +endmodule From 04276f47a5a89216e0027a6aa2ddba0f7d102817 Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Thu, 16 May 2024 14:43:08 -0700 Subject: [PATCH 12/58] Compile for AXI sub --- src/axi/config/compile.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/axi/config/compile.yml diff --git a/src/axi/config/compile.yml b/src/axi/config/compile.yml new file mode 100644 index 000000000..57774c8d0 --- /dev/null +++ b/src/axi/config/compile.yml @@ -0,0 +1,22 @@ +--- +provides: [axi_sub] +schema_version: 2.4.0 +requires: + - libs +targets: + tb: + directories: [$COMPILE_ROOT/rtl] + files: + - $COMPILE_ROOT/rtl/axi_if.sv + - $COMPILE_ROOT/rtl/axi_pkg.sv + - $COMPILE_ROOT/rtl/axi_addr.v + - $COMPILE_ROOT/rtl/skidbuffer.v + - $COMPILE_ROOT/rtl/axi_sub_rd.sv + rtl: + directories: [$COMPILE_ROOT/rtl] + files: + - $COMPILE_ROOT/rtl/axi_if.sv + - $COMPILE_ROOT/rtl/axi_pkg.sv + - $COMPILE_ROOT/rtl/axi_addr.v + - $COMPILE_ROOT/rtl/skidbuffer.v + - $COMPILE_ROOT/rtl/axi_sub_rd.sv From f5b883f88563a0a36e6eb40c0aff693e09762f74 Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Thu, 23 May 2024 17:14:28 -0700 Subject: [PATCH 13/58] AXI sub -- write channel + exclusive access fixups --- src/axi/rtl/axi_if.sv | 3 + src/axi/rtl/axi_pkg.sv | 7 +- src/axi/rtl/axi_sub_rd.sv | 77 +++++---- src/axi/rtl/axi_sub_wr.sv | 349 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 406 insertions(+), 30 deletions(-) create mode 100644 src/axi/rtl/axi_sub_wr.sv diff --git a/src/axi/rtl/axi_if.sv b/src/axi/rtl/axi_if.sv index 3f4662788..f76253f10 100644 --- a/src/axi/rtl/axi_if.sv +++ b/src/axi/rtl/axi_if.sv @@ -55,6 +55,7 @@ interface axi_if #(parameter AW = 32, parameter DW = 32, parameter IW = 3, param logic [DW/8-1:0] wstrb; logic wvalid; logic wready; + logic wlast; // AXI B logic [1:0] bresp; @@ -100,6 +101,7 @@ interface axi_if #(parameter AW = 32, parameter DW = 32, parameter IW = 3, param output wstrb, output wvalid, input wready, + output wlast, // B input bresp, input bid, @@ -145,6 +147,7 @@ interface axi_if #(parameter AW = 32, parameter DW = 32, parameter IW = 3, param input wstrb, input wvalid, output wready, + input wlast, // B output bresp, output bid, diff --git a/src/axi/rtl/axi_pkg.sv b/src/axi/rtl/axi_pkg.sv index 36346f00d..43022e75d 100644 --- a/src/axi/rtl/axi_pkg.sv +++ b/src/axi/rtl/axi_pkg.sv @@ -45,8 +45,13 @@ package axi_pkg; typedef struct packed { logic [IW-1:0] id; logic [UW-1:0] user; - logic [ 1:0] resp; + axi_resp_e resp; logic last; } xfer_ctx_t; + typedef struct packed { + logic [AW-1:0] addr; + logic [AW-1:0] addr_mask; + } axi_ex_ctx_t; + endpackage diff --git a/src/axi/rtl/axi_sub_rd.sv b/src/axi/rtl/axi_sub_rd.sv index 186cf7bef..7660887e1 100644 --- a/src/axi/rtl/axi_sub_rd.sv +++ b/src/axi/rtl/axi_sub_rd.sv @@ -47,10 +47,9 @@ module axi_sub_rd import axi_pkg::*; #( axi_if.r_sub s_axi_if, // Exclusive Access Signals - input logic ex_clr, - input logic [IW -1:0] ex_clr_id, - output logic [ID_NUM-1:0] ex_active, - output var axi_ctx_t [ID_NUM-1:0] ex_ctx, + input logic [ID_NUM-1:0] ex_clr, + output logic [ID_NUM-1:0] ex_active, + output var axi_ex_ctx_t [ID_NUM-1:0] ex_ctx, //COMPONENT INF output logic dv, @@ -60,7 +59,7 @@ module axi_sub_rd import axi_pkg::*; #( input logic hld, input logic err, - input logic [DW-1:0] rdata // Integ requires: Component dwidth == AXI dwidth + input logic [DW-1:0] rdata // Requires: Component dwidth == AXI dwidth ); // --------------------------------------- // @@ -103,7 +102,7 @@ module axi_sub_rd import axi_pkg::*; #( // Indicates there are still reqs to be issued towards component. // This active signal deasserts after final dv to component, meaning data is // still in flight from component->AXI for C_LAT clocks after deassertion - always@(posedge clk or negedge rst_n) begin + always_ff@(posedge clk or negedge rst_n) begin if (!rst_n) begin txn_active <= 1'b0; end @@ -119,11 +118,11 @@ module axi_sub_rd import axi_pkg::*; #( end // TODO reset? - always@(posedge clk/* or negedge rst_n*/) begin + always_ff@(posedge clk/* or negedge rst_n*/) begin // if (!rst_n) begin // txn_ctx <= '{default:0}; // end - else if (s_axi_if.arvalid && s_axi_if.arready) begin + if (s_axi_if.arvalid && s_axi_if.arready) begin txn_ctx.addr <= s_axi_if.araddr; txn_ctx.burst <= s_axi_if.arburst; txn_ctx.size <= s_axi_if.arsize; @@ -135,12 +134,12 @@ module axi_sub_rd import axi_pkg::*; #( end else if (txn_rvalid[0]) begin txn_ctx.addr <= txn_addr_nxt; - txn_ctx.burst <= s_axi_if.arburst; - txn_ctx.size <= s_axi_if.arsize; - txn_ctx.len <= s_axi_if.arlen ; - txn_ctx.user <= s_axi_if.aruser; - txn_ctx.id <= s_axi_if.arid ; - txn_ctx.lock <= s_axi_if.arlock; + txn_ctx.burst <= txn_ctx.burst; + txn_ctx.size <= txn_ctx.size; + txn_ctx.len <= txn_ctx.len ; + txn_ctx.user <= txn_ctx.user; + txn_ctx.id <= txn_ctx.id ; + txn_ctx.lock <= txn_ctx.lock; txn_cnt <= |txn_cnt ? txn_cnt - 1 : txn_cnt; // Prevent underflow to 255 at end to reduce switching power. Extra logic cost worth it? end else begin @@ -165,6 +164,7 @@ module axi_sub_rd import axi_pkg::*; #( // --------------------------------------- // // Force aligned address to component always_comb addr = {txn_ctx.addr[AW-1:BW],BW'(0)}; + always_comb user = txn_ctx.user; // Use full address to calculate next address (in case of arsize < data width) axi_addr #( @@ -187,13 +187,13 @@ module axi_sub_rd import axi_pkg::*; #( txn_xfer_ctx[0].id = txn_ctx.id; txn_xfer_ctx[0].user = txn_ctx.user; txn_xfer_ctx[0].last = txn_cnt == 0; - txn_xfer_ctx[0].resp = (EX_EN && txn_ctx.lock && /*FIXME*/) ? AXI_RESP_EXOKAY : AXI_RESP_OKAY; + txn_xfer_ctx[0].resp = (EX_EN && txn_ctx.lock) ? AXI_RESP_EXOKAY : AXI_RESP_OKAY; end // Shift Register to track requests made to component generate if (C_LAT > 0) begin: TXN_SR - always@(posedge clk or negedge rst_n) begin + always_ff@(posedge clk or negedge rst_n) begin if (!rst_n) begin txn_rvalid[C_LAT:1] <= C_LAT'(0); end @@ -207,7 +207,7 @@ module axi_sub_rd import axi_pkg::*; #( if (C_LAT > 1) begin for (cp = 1; cp <= C_LAT; cp++) begin: CTX_PIPELINE // No reset needed on data path -- txn_rvalid (control path) is reset - always@(posedge clk) begin + always_ff@(posedge clk) begin txn_xfer_ctx[cp] <= txn_xfer_ctx[cp-1]; end end: CTX_PIPELINE @@ -222,19 +222,36 @@ module axi_sub_rd import axi_pkg::*; #( // --------------------------------------- // generate if (EX_EN) begin: EX_AXS_TRACKER - always@(posedge clk or negedge rst_n) begin + // Exclusive access requires transaction LENGTH to be a power of 2, + // so an address mask may be prepared by assuming the AxLEN value has + // all consecutive LSB set to 1, then all 0's in higher order bits. After + // shifting by the width of the transaction (AxSIZE), this mask can be applied + // to AxADDR to give the aligned address relative to an exclusive access. + // + logic [AW-1:0] addr_ex_algn_mask; + always_comb begin + case (BC) inside + 1: addr_ex_algn_mask = ~(AW'(txn_ctx.len)); + 2: addr_ex_algn_mask = (~(AW'(txn_ctx.len))) << txn_ctx.size[0]; + 4: addr_ex_algn_mask = (~(AW'(txn_ctx.len))) << txn_ctx.size[1:0]; + 8: addr_ex_algn_mask = (~(AW'(txn_ctx.len))) << txn_ctx.size[1:0]; + default: addr_ex_algn_mask = (~(AW'(txn_ctx.len))) << txn_ctx.size; + endcase + end + + always_ff@(posedge clk or negedge rst_n) begin if (!rst_n) begin ex_active <= '0; end // give 'set' precedence over 'clr' in case of same ID - else if ((txn_rvalid[0] && txn_ctx.lock) && ex_clr) begin - ex_active <= (ex_active & ~(1 << ex_clr_id)) | (1 << txn_ctx.id); + else if ((txn_rvalid[0] && txn_ctx.lock) && |ex_clr) begin + ex_active <= (ex_active & ~ex_clr) | (1 << txn_ctx.id); end else if (txn_rvalid[0] && txn_ctx.lock) begin - ex_active <= ex_active; + ex_active <= ex_active | (1 << txn_ctx.id); end - else if (ex_clr) begin - ex_active <= ex_active & ~(1 << ex_clr_id); + else if (|ex_clr) begin + ex_active <= ex_active & ~ex_clr; end else begin ex_active <= ex_active; @@ -243,12 +260,13 @@ module axi_sub_rd import axi_pkg::*; #( for (ex = 0; ex < ID_NUM; ex++) begin: EX_CTX_TRACKER // TODO: reset? - always@(posedge clk) begin + always_ff@(posedge clk) begin if (txn_rvalid[0] && txn_ctx.lock && (txn_ctx.id == ex)) begin - ex_ctx[ex] <= txn_ctx; + ex_ctx[ex].addr <= txn_ctx.addr; + ex_ctx[ex].addr_mask <= addr_ex_algn_mask; end - // Ignore the clear case, as ex_active is ctrl path - //else if (ex_clr && (ex_clr_id == ex)) begin + // Ignore the clear case, as ex_active is the ctrl path + //else if (ex_clr[ex]) begin //end else begin ex_ctx[ex] <= ex_ctx[ex]; @@ -300,7 +318,7 @@ module axi_sub_rd import axi_pkg::*; #( .i_reset(!rst_n ), .i_valid(dp_rvalid[dp] ), .o_ready(dp_rready[dp] ), - .i_data ({dp_rdata[dp] + .i_data ({dp_rdata[dp], dp_xfer_ctx[dp]} ), .o_valid(dp_rvalid[dp+1] ), .i_ready(dp_rready[dp+1] ), @@ -314,6 +332,7 @@ module axi_sub_rd import axi_pkg::*; #( always_comb dp_rready[C_LAT+1] = s_axi_if.rready; always_comb begin s_axi_if.rvalid = dp_rvalid[C_LAT+1]; + s_axi_if.rlast = dp_xfer_ctx[C_LAT+1].last; s_axi_if.rdata = dp_rdata[C_LAT+1]; s_axi_if.rid = dp_xfer_ctx[C_LAT+1].id; s_axi_if.rresp = dp_xfer_ctx[C_LAT+1].resp; @@ -340,7 +359,7 @@ module axi_sub_rd import axi_pkg::*; #( `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RREADY , s_axi_if.rready , clk, !rst_n) `CALIPTRA_ASSERT_NEVER(ERR_AXI_RD_DROP , dp_rvalid[0] && !dp_rready[0], clk, !rst_n) - `CALIPTRA_ASSERT_NEVER(ERR_AXI_RD_X , dp_rvalid[0] && !$isunknown({dp_rdata[0],dp_xfer_ctx[0]}), clk, !rst_n) + `CALIPTRA_ASSERT_NEVER(ERR_AXI_RD_X , dp_rvalid[0] && $isunknown({dp_rdata[0],dp_xfer_ctx[0]}), clk, !rst_n) // Exclusive access rules: // - Must have an address that is aligned to burst byte count // - Byte count must be power of 2 inside 1:128 diff --git a/src/axi/rtl/axi_sub_wr.sv b/src/axi/rtl/axi_sub_wr.sv new file mode 100644 index 000000000..414e4e8d9 --- /dev/null +++ b/src/axi/rtl/axi_sub_wr.sv @@ -0,0 +1,349 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// ------------------------------------------------------------- +// AXI Write Subordinate +// ------------------------------------------------------------- +// Description: +// Subordinate to convert AXI protocol writes into internal component accesses +// +// Limitations: +// - When multiple ID tracking is enabled, write responses are returned in the +// same order they are received, regardless of ID. +// +// ------------------------------------------------------------- + +module axi_sub_wr import axi_pkg::*; #( + parameter AW = 32, // Address Width + parameter DW = 32, // Data Width + BC = DW/8, // Byte Count + BW = $clog2(BC), // Byte count Width + parameter UW = 32, // User Width + parameter IW = 1, // ID Width + ID_NUM = 1 << IW, // Don't override + + parameter EX_EN = 0 // Enable exclusive access tracking w/ AxLOCK +) ( + input clk, + input rst_n, + + // AXI INF + axi_if.w_sub s_axi_if, + + // Exclusive Access Signals + output logic [ID_NUM-1:0] ex_clr, + input logic [ID_NUM-1:0] ex_active, + input var axi_ex_ctx_t [ID_NUM-1:0] ex_ctx, + + //COMPONENT INF + output logic dv, + output logic [AW-1:0] addr, // Byte address + output logic [UW-1:0] user, + output logic [DW-1:0] wdata, // Requires: Component dwidth == AXI dwidth + output logic [BC-1:0] wstrb, // Requires: Component dwidth == AXI dwidth + output logic last, // Asserted with final 'dv' of a burst + input logic hld, + input logic err + +); + + // --------------------------------------- // + // Localparams/Typedefs // + // --------------------------------------- // + + + // --------------------------------------- // + // Signals // + // --------------------------------------- // + + genvar ex; // Exclusive contexts + + logic dv_pre; + + // Active transaction signals + // track requests as they are sent to component + axi_ctx_t s_axi_if_ctx; + axi_ctx_t req_ctx; + logic req_valid; + logic req_ready; + logic req_matches_ex; + axi_ctx_t txn_ctx; + logic [AW-1:0] txn_addr_nxt; + logic txn_active; + logic txn_wvalid; + logic txn_wready; + logic txn_allow; // If an exclusive-write with no match to tracked context, don't complete write to component + logic txn_err; + logic txn_final_beat; + logic [ID_NUM-1:0] txn_ex_match; // Current access matches the flagged exclusive context + // Possible for multiple bits to be set -- match of multiple contexts + + // Response Pipeline signals + logic rp_valid; + logic rp_ready; + axi_resp_e rp_resp; + logic [IW-1:0] rp_id; + + + // --------------------------------------- // + // Address Request I/F // + // --------------------------------------- // + + always_comb begin + s_axi_if_ctx.addr = s_axi_if.awaddr ; + s_axi_if_ctx.burst = s_axi_if.awburst; + s_axi_if_ctx.size = s_axi_if.awsize ; + s_axi_if_ctx.len = s_axi_if.awlen ; + s_axi_if_ctx.user = s_axi_if.awuser ; + s_axi_if_ctx.id = s_axi_if.awid ; + s_axi_if_ctx.lock = s_axi_if.awlock && EX_EN; + end + + // skidbuffer instance to pipeline request context from AXI. + skidbuffer #( + .OPT_LOWPOWER (0 ), + .OPT_OUTREG (0 ), + // + .OPT_PASSTHROUGH(0 ), + .DW ($bits(axi_ctx_t)), + .OPT_INITIAL (1'b1) + ) i_req_skd ( + .i_clk (clk ), + .i_reset(!rst_n ), + .i_valid(s_axi_if.awvalid), + .o_ready(s_axi_if.awready), + .i_data (s_axi_if_ctx ), + .o_valid(req_valid ), + .i_ready(req_ready ), + .o_data (req_ctx ) + ); + + // Only accept request when we have a guaranteed slot in the response buffer + // to put the response + assign req_ready = (!txn_active || (txn_final_beat && !s_axi_if.bvalid)) && rp_ready[0]; + + // Indicates there are still reqs to be issued towards component. + // This active signal deasserts after final dv to component + always_ff@(posedge clk or negedge rst_n) begin + if (!rst_n) begin + txn_active <= 1'b0; + end + else if (req_valid && req_ready) begin + txn_active <= 1'b1; + end + else if (txn_final_beat) begin + txn_active <= 1'b0; + end + else begin + txn_active <= txn_active; + end + end + + always_comb req_matches_ex = (req_ctx.addr & ex_ctx[req_ctx.id].addr_mask) == ex_ctx[req_ctx.id].addr; + + // TODO reset? + always_ff@(posedge clk/* or negedge rst_n*/) begin +// if (!rst_n) begin +// txn_ctx <= '{default:0}; +// end + if (req_valid && req_ready) begin + txn_ctx.addr <= req_ctx.addr; + txn_ctx.burst <= req_ctx.burst; + txn_ctx.size <= req_ctx.size; + txn_ctx.len <= req_ctx.len ; + txn_ctx.user <= req_ctx.user; + txn_ctx.id <= req_ctx.id ; + txn_ctx.lock <= req_ctx.lock; + txn_allow <= !EX_EN || !req_ctx.lock || (ex_active[req_ctx.id] && req_matches_ex); + txn_err <= 1'b0; + end + else if (dv_pre && !hld) begin + txn_ctx.addr <= txn_addr_nxt; + txn_ctx.burst <= txn_ctx.burst; + txn_ctx.size <= txn_ctx.size; + txn_ctx.len <= txn_ctx.len ; + txn_ctx.user <= txn_ctx.user; + txn_ctx.id <= txn_ctx.id ; + txn_ctx.lock <= txn_ctx.lock; + txn_allow <= txn_allow; + txn_err <= txn_err || err; + end + else begin + txn_ctx <= txn_ctx; + txn_allow <= txn_allow; + txn_err <= txn_err; + end + end + + // Asserts on the final COMPONENT INF beat, which means data does not + // arrive at endpoint until after C_LAT clocks + always_comb txn_final_beat = dv_pre && (!txn_allow || !hld) && last; + + + // --------------------------------------- // + // Address Calculations // + // --------------------------------------- // + // Force aligned address to component + always_comb addr = {txn_ctx.addr[AW-1:BW],BW'(0)}; + always_comb user = txn_ctx.user; + + // Use full address to calculate next address (in case of AxSIZE < data width) + axi_addr #( + .AW (AW), + .DW (DW), + .LENB(8 ) + ) i_axi_addr ( + .i_last_addr(txn_ctx.addr ), + .i_size (txn_ctx.size ), // 1b, 2b, 4b, 8b, etc + .i_burst (txn_ctx.burst), // fixed, incr, wrap, reserved + .i_len (txn_ctx.len ), + .o_next_addr(txn_addr_nxt ) + ); + + + // --------------------------------------- // + // Exclusive Access Tracking // + // --------------------------------------- // + + generate + for (ex=0; ex < ID_NUM; ex++) begin: EX_AXS_TRACKER + logic [AW-1:0] addr_ex_algn; + + // Component address aligned to exclusive tracking context + // Don't use aligned 'addr' signal, because exclusive access alignment may + // be smaller than component inf (since single-byte exclusive access is legal) + always_comb addr_ex_algn = txn_ctx.addr & ex_ctx[ex].addr_mask; + + // Match on each beat in case a burst transaction only overlaps + // the exclusive context partially + always_comb txn_ex_match[ex] <= (addr_ex_algn == ex_ctx[ex].addr); + + end: EX_AXS_TRACKER + endgenerate + + // Only clear the context when a write goes through to dest - meaining dv, not dv_pre + always_ff@(posedge clk or negedge rst_n) begin + if (!rst_n) + ex_clr <= ID_NUM'(0); + else if (EX_EN && dv && !hld) + ex_clr <= ex_active & txn_ex_match; // Could have multiple set bits + else + ex_clr <= ID_NUM'(0); + end + + + // --------------------------------------- // + // Data/Response // + // --------------------------------------- // + + always_comb txn_wvalid = s_axi_if.wvalid && txn_active; + always_comb s_axi_if.wready = txn_wready && txn_active; + + // skidbuffer instance to pipeline data payload from AXI. + skidbuffer #( + .OPT_LOWPOWER (0 ), + .OPT_OUTREG (0 ), + // + .OPT_PASSTHROUGH(0 ), + .DW (DW + BC + 1), + .OPT_INITIAL (1'b1) + ) i_dp_skd ( + .i_clk (clk ), + .i_reset(!rst_n ), + .i_valid(txn_wvalid ), + .o_ready(txn_wready ), + .i_data ({s_axi_if.wdata, + s_axi_if.wstrb, + s_axi_if.wlast}), + .o_valid(dv_pre ), + .i_ready(!hld ), + .o_data ({wdata, + wstrb, + last } ) + ); + + always_comb dv = dv_pre && txn_allow; + + // Registered skidbuffer to pipeline response signals. + // Skid buffer captures any response transfer if the + // register output is busy with a previous response and is + // stalled. + // There is guaranteed to be space in the skid buffer because new + // requests are stalled (AWREADY=0) until this buffer is ready. + always_comb begin + rp_valid[0] = txn_final_beat; + rp_resp[0] = txn_err || err ? AXI_RESP_SLVERR : + txn_ctx.lock && txn_allow ? AXI_RESP_EXOKAY : + AXI_RESP_OKAY; + rp_id[0] = txn_ctx.id; + end + + skidbuffer #( + .OPT_LOWPOWER (0 ), + .OPT_OUTREG (1 ), + // + .OPT_PASSTHROUGH(0 ), + .DW (IW + $bits(axi_resp_e)), + .OPT_INITIAL (1'b1) + ) i_rsp_skd ( + .i_clk (clk ), + .i_reset(!rst_n ), + .i_valid(rp_valid[0] ), + .o_ready(rp_ready[0] ), + .i_data ({rp_resp[0], + rp_id[0]} ), + .o_valid(s_axi_if.bvalid ), + .i_ready(s_axi_if.bready ), + .o_data ({s_axi_if.bresp, + s_axi_if.bid} ) + ); + + + // --------------------------------------- // + // Formal Properties // + // --------------------------------------- // + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWADDR , s_axi_if.awaddr , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWBURST, s_axi_if.awburst, clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWSIZE , s_axi_if.awsize , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWLEN , s_axi_if.awlen , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWUSER , s_axi_if.awuser , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWID , s_axi_if.awid , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWLOCK , s_axi_if.awlock , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWVALID, s_axi_if.awvalid, clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWREADY, s_axi_if.awready, clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_WDATA , s_axi_if.wdata , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_WSTRB , s_axi_if.wstrb , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_WVALID , s_axi_if.wvalid , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_WREADY , s_axi_if.wready , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_WLAST , s_axi_if.wlast , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_BRESP , s_axi_if.bresp , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_BID , s_axi_if.bid , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_BVALID , s_axi_if.bvalid , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_BREADY , s_axi_if.bready , clk, !rst_n) + + // Exclusive access rules: + // - Must have an address that is aligned to burst byte count + // - Byte count must be power of 2 inside 1:128 + // - Max burst length = 16 + `CALIPTRA_ASSERT (ERR_AXI_EX_UNALGN , (s_axi_if.awvalid && s_axi_if.awlock) -> ~|s_axi_if.awaddr[$clog2((1< ((1< (s_axi_if.awlen < 16), clk, !rst_n) + + + // --------------------------------------- // + // Coverage // + // --------------------------------------- // + +endmodule From a9a17f7343403b63f009ef4a864349a02846030b Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Tue, 28 May 2024 13:19:55 -0700 Subject: [PATCH 14/58] Exclusive access support OFF by default --- src/axi/rtl/axi_sub_rd.sv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/axi/rtl/axi_sub_rd.sv b/src/axi/rtl/axi_sub_rd.sv index 7660887e1..ae295879a 100644 --- a/src/axi/rtl/axi_sub_rd.sv +++ b/src/axi/rtl/axi_sub_rd.sv @@ -34,7 +34,7 @@ module axi_sub_rd import axi_pkg::*; #( parameter IW = 1, // ID Width ID_NUM = 1 << IW, // Don't override - parameter EX_EN = 1, // Enable exclusive access tracking w/ AxLOCK + parameter EX_EN = 0, // Enable exclusive access tracking w/ AxLOCK parameter C_LAT = 0 // Component latency in clock cycles from (dv&&!hld) -> rdata // Must be const per component // For registers, typically 0 From b481ac229f16dffcccc4f2b2cb9f1e1a1e0281ff Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Tue, 28 May 2024 13:21:10 -0700 Subject: [PATCH 15/58] Only latch err from component when the access is allowed (i.e. not an incomplete EX access) --- src/axi/rtl/axi_sub_wr.sv | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/axi/rtl/axi_sub_wr.sv b/src/axi/rtl/axi_sub_wr.sv index 414e4e8d9..68fd7eff3 100644 --- a/src/axi/rtl/axi_sub_wr.sv +++ b/src/axi/rtl/axi_sub_wr.sv @@ -169,7 +169,7 @@ module axi_sub_wr import axi_pkg::*; #( txn_allow <= !EX_EN || !req_ctx.lock || (ex_active[req_ctx.id] && req_matches_ex); txn_err <= 1'b0; end - else if (dv_pre && !hld) begin + else if (dv && !hld) begin txn_ctx.addr <= txn_addr_nxt; txn_ctx.burst <= txn_ctx.burst; txn_ctx.size <= txn_ctx.size; @@ -284,9 +284,9 @@ module axi_sub_wr import axi_pkg::*; #( // requests are stalled (AWREADY=0) until this buffer is ready. always_comb begin rp_valid[0] = txn_final_beat; - rp_resp[0] = txn_err || err ? AXI_RESP_SLVERR : - txn_ctx.lock && txn_allow ? AXI_RESP_EXOKAY : - AXI_RESP_OKAY; + rp_resp[0] = txn_allow && (txn_err || err) ? AXI_RESP_SLVERR : + txn_allow && txn_ctx.lock ? AXI_RESP_EXOKAY : + AXI_RESP_OKAY; rp_id[0] = txn_ctx.id; end From eaca0f78ba1c71f76cdfe80fef24e8537802f951 Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Tue, 28 May 2024 13:21:27 -0700 Subject: [PATCH 16/58] Add AXI sub wrapper and simplex arbiter --- src/axi/rtl/axi_sub.sv | 196 +++++++++++++++++++++++++++++++++++++ src/axi/rtl/axi_sub_arb.sv | 135 +++++++++++++++++++++++++ 2 files changed, 331 insertions(+) create mode 100644 src/axi/rtl/axi_sub.sv create mode 100644 src/axi/rtl/axi_sub_arb.sv diff --git a/src/axi/rtl/axi_sub.sv b/src/axi/rtl/axi_sub.sv new file mode 100644 index 000000000..319140172 --- /dev/null +++ b/src/axi/rtl/axi_sub.sv @@ -0,0 +1,196 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// ------------------------------------------------------------- +// AXI Subordinate +// ------------------------------------------------------------- +// Description: +// Subordinate to convert AXI protocol transactions into internal component accesses +// Includes an arbiter to squash duplex AXI transactions into simplex component operations +// May optionally include an Exclusive Access monitor (AxLOCK signal) +// +// Limitations: +// - When multiple ID tracking is enabled, write responses are returned in the +// same order they are received, regardless of ID. +// +// ------------------------------------------------------------- + +module axi_sub import axi_pkg::*; #( + parameter AW = 32, // Address Width + parameter DW = 32, // Data Width + BC = DW/8, // Byte Count + BW = $clog2(BC), // Byte count Width + parameter UW = 32, // User Width + parameter IW = 1, // ID Width + ID_NUM = 1 << IW, // Don't override + + parameter EX_EN = 0, // Enable exclusive access tracking w/ AxLOCK + parameter C_LAT = 0 // Component latency in clock cycles from (dv&&!hld) -> rdata + // Must be const per component + // For registers, typically 0 + // For SRAM, 1 or more +) ( + input clk, + input rst_n, + + // AXI INF + axi_if.w_sub s_axi_w_if, + axi_if.r_sub s_axi_r_if, + + //COMPONENT INF + output logic dv, + output logic [AW-1:0] addr, // Byte address + output logic [UW-1:0] user, + output logic [DW-1:0] wdata, // Requires: Component dwidth == AXI dwidth + output logic [BC-1:0] wstrb, // Requires: Component dwidth == AXI dwidth + input logic [DW-1:0] rdata, // Requires: Component dwidth == AXI dwidth + output logic last, // Asserted with final 'dv' of a burst + input logic hld, + input logic err + +); + + // Exclusive Access Signals + logic [ID_NUM-1:0] ex_clr; + logic [ID_NUM-1:0] ex_active; + axi_ex_ctx_t [ID_NUM-1:0] ex_ctx; + + //Read Subordinate INF + logic r_dv; + logic [AW-1:0] r_addr; // Byte address + logic [UW-1:0] r_user; + logic r_last; // Asserted with final 'dv' of a burst + logic r_hld; + logic r_err; + + logic [DW-1:0] r_rdata; // Requires: Component dwidth == AXI dwidth + + //Write Subordinate INF + logic w_dv; + logic [AW-1:0] w_addr; // Byte address + logic [UW-1:0] w_user; + logic [DW-1:0] w_wdata; // Requires: Component dwidth == AXI dwidth + logic [BC-1:0] w_wstrb; // Requires: Component dwidth == AXI dwidth + logic w_last; // Asserted with final 'dv' of a burst + logic w_hld; + logic w_err; + + + axi_sub_wr #( + .AW (AW ), + .DW (DW ), + .UW (UW ), + .IW (IW ), + + .EX_EN(EX_EN) + ) i_axi_sub_wr ( + .clk (clk ), + .rst_n(rst_n), + + // AXI INF + .s_axi_if(s_axi_w_if), + + // Exclusive Access Signals + .ex_clr (ex_clr ), + .ex_active(ex_active), + .ex_ctx (ex_ctx ), + + //COMPONENT INF + .dv (w_dv ), + .addr (w_addr ), + .user (w_user ), + .wdata(w_wdata), + .wstrb(w_wstrb), + .last (w_last ), + .hld (w_hld ), + .err (w_err ) + + ); + + axi_sub_rd #( + .AW(AW), + .DW(DW), + .UW(UW), + .IW(IW), + + .EX_EN(EX_EN), + .C_LAT(C_LAT) + ) i_axi_sub_rd ( + .clk (clk ), + .rst_n(rst_n), + + // AXI INF + .s_axi_if(s_axi_r_if), + + // Exclusive Access Signals + .ex_clr (ex_clr ), + .ex_active(ex_active), + .ex_ctx (ex_ctx ), + + //COMPONENT INF + .dv (r_dv ), + .addr (r_addr ), + .user (r_user ), + .last (r_last ), + .hld (r_hld ), + .err (r_err ), + + .rdata(r_rdata) + ); + + axi_sub_arb #( + .AW(AW), + .DW(DW), + .UW(UW), + .IW(IW), + + .EX_EN(EX_EN), + .C_LAT(C_LAT) + ) i_axi_sub_arb ( + .clk (clk ), + .rst_n (rst_n ), + + //Read Subordinate INF + .r_dv (r_dv ), + .r_addr (r_addr ), + .r_user (r_user ), + .r_last (r_last ), + .r_hld (r_hld ), + .r_err (r_err ), + .r_rdata(r_rdata), + + //Write Subordinate INF + .w_dv (w_dv ), + .w_addr (w_addr ), + .w_user (w_user ), + .w_wdata(w_wdata), + .w_wstrb(w_wstrb), + .w_last (w_last ), + .w_hld (w_hld ), + .w_err (w_err ), + + //COMPONENT INF + .dv (dv ), + .addr (addr ), + .user (user ), + .wdata (wdata ), + .wstrb (wstrb ), + .last (last ), + .hld (hld ), + .err (err ), + .rdata (rdata ) + ); + +endmodule diff --git a/src/axi/rtl/axi_sub_arb.sv b/src/axi/rtl/axi_sub_arb.sv new file mode 100644 index 000000000..235405d80 --- /dev/null +++ b/src/axi/rtl/axi_sub_arb.sv @@ -0,0 +1,135 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// ------------------------------------------------------------- +// AXI Subordinate Arbiter +// ------------------------------------------------------------- +// Description: +// Arbitrate between Reads and Writes coming from AXI subordinate modules. +// Always give precedence to Writes. +// +// ------------------------------------------------------------- + +module axi_sub_arb import axi_pkg::*; #( + parameter AW = 32, // Address Width + parameter DW = 32, // Data Width + BC = DW/8, // Byte Count + BW = $clog2(BC), // Byte count Width + parameter UW = 32, // User Width + parameter IW = 1, // ID Width + ID_NUM = 1 << IW, // Don't override + + parameter EX_EN = 0, // Enable exclusive access tracking w/ AxLOCK + parameter C_LAT = 0 // Component latency in clock cycles from (dv&&!hld) -> rdata + // Must be const per component + // For registers, typically 0 + // For SRAM, 1 or more +) ( + input clk, + input rst_n, + + //Read Subordinate INF + input logic r_dv, + input logic [AW-1:0] r_addr, // Byte address + input logic [UW-1:0] r_user, + input logic r_last, // Asserted with final 'dv' of a burst + output logic r_hld, + output logic r_err, + + output logic [DW-1:0] r_rdata, // Requires: Component dwidth == AXI dwidth + + //Write Subordinate INF + input logic w_dv, + input logic [AW-1:0] w_addr, // Byte address + input logic [UW-1:0] w_user, + input logic [DW-1:0] w_wdata, // Requires: Component dwidth == AXI dwidth + input logic [BC-1:0] w_wstrb, // Requires: Component dwidth == AXI dwidth + input logic w_last, // Asserted with final 'dv' of a burst + output logic w_hld, + output logic w_err, + + //COMPONENT INF + output logic dv, + output logic [AW-1:0] addr, // Byte address + output logic [UW-1:0] user, + output logic [DW-1:0] wdata, // Requires: Component dwidth == AXI dwidth + output logic [BC-1:0] wstrb, // Requires: Component dwidth == AXI dwidth + output logic last, // Asserted with final 'dv' of a burst + input logic hld, + input logic err, // FIXME Does this assert with dv or with rdata for reads (when C_LAT > 0)? + + input logic [DW-1:0] rdata // Requires: Component dwidth == AXI dwidth +); + + logic r_pri; // Priority to reads + logic r_win; + + // Switch priority to current arb winner so that priority persists + // in case + // a) it was granted during a hold + // b) it was granted at start of multi-beat burst + // Otherwise, always give priority to other channel at end of a burst + // to arbitrate fairly + always_ff@(posedge clk or negedge rst_n) begin + if (!rst_n) + r_pri <= 1'b0; + // Toggle priority at end of burst + else if (w_dv && !w_hld && w_last) + r_pri <= 1'b1; + else if (r_dv && !r_hld && r_last) + r_pri <= 1'b0; + // Keep priority when burst starts + else if (w_dv && !r_win && !w_last) + r_pri <= 1'b0; + else if (r_dv && r_win && !r_last) + r_pri <= 1'b1; + end + + always_comb begin +// case ({r_pri,r_dv,w_dv}) inside +// 3'b000: r_win = 0; +// 3'b001: r_win = 0; +// 3'b010: r_win = 1; +// 3'b011: r_win = 0; +// 3'b100: r_win = 1; +// 3'b101: r_win = 0; +// 3'b110: r_win = 1; +// 3'b111: r_win = 1; +// endcase + if (r_pri) r_win = r_dv || !w_dv; + else r_win = w_dv || !r_dv; + end + + always_comb begin + dv = r_dv || w_dv; + addr = r_win ? r_addr : w_addr; + user = r_win ? r_user : w_user; + last = r_win ? r_last : w_last; + r_hld = hld || !r_win; + w_hld = hld || r_win; + r_err = err; + w_err = err; + wdata = w_wdata; + wstrb = w_wstrb; + r_rdata = rdata; + end + + `CALIPTRA_ASSERT_NEVER(AXI_SUB_ARB_CONFLICT, r_dv && !r_hld && w_dv && !w_hld, clk, !rst_n) + // This arbiter can't deal with an err signal that asserts at + // a delay from the dv signal (as in the case of the read channel). + `CALIPTRA_ASSERT(AXI_SUB_ARB_LAT_ERR, C_LAT == 0, clk, !rst_n) + + +endmodule From 53536e0edcfa15ba1fc427e9ea0a331d9cf69f24 Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Wed, 29 May 2024 18:40:58 -0700 Subject: [PATCH 17/58] Syntax fix --- src/axi/rtl/axi_if.sv | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/axi/rtl/axi_if.sv b/src/axi/rtl/axi_if.sv index f76253f10..207589863 100644 --- a/src/axi/rtl/axi_if.sv +++ b/src/axi/rtl/axi_if.sv @@ -16,7 +16,7 @@ // Signals for a standard AXI4 compliant interface // -interface axi_if #(parameter AW = 32, parameter DW = 32, parameter IW = 3, parameter UW = 32); +interface axi_if #(parameter integer AW = 32, parameter integer DW = 32, parameter integer IW = 3, parameter integer UW = 32); import axi_pkg::*; @@ -81,7 +81,7 @@ interface axi_if #(parameter AW = 32, parameter DW = 32, parameter IW = 3, param input rid, input rlast, input rvalid, - output rready, + output rready ); // Modport for write manager @@ -127,7 +127,7 @@ interface axi_if #(parameter AW = 32, parameter DW = 32, parameter IW = 3, param output rid, output rlast, output rvalid, - input rready, + input rready ); // Modport for write subordinate From 29bedff0e3bfdaa0799509cf1119b084ff9200c7 Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Thu, 30 May 2024 09:43:36 -0700 Subject: [PATCH 18/58] Add ID signal to component interface --- src/axi/rtl/axi_sub.sv | 8 ++++++++ src/axi/rtl/axi_sub_arb.sv | 4 ++++ src/axi/rtl/axi_sub_rd.sv | 2 ++ src/axi/rtl/axi_sub_wr.sv | 2 ++ 4 files changed, 16 insertions(+) diff --git a/src/axi/rtl/axi_sub.sv b/src/axi/rtl/axi_sub.sv index 319140172..222e47d0f 100644 --- a/src/axi/rtl/axi_sub.sv +++ b/src/axi/rtl/axi_sub.sv @@ -53,6 +53,7 @@ module axi_sub import axi_pkg::*; #( output logic dv, output logic [AW-1:0] addr, // Byte address output logic [UW-1:0] user, + output logic [IW-1:0] id, output logic [DW-1:0] wdata, // Requires: Component dwidth == AXI dwidth output logic [BC-1:0] wstrb, // Requires: Component dwidth == AXI dwidth input logic [DW-1:0] rdata, // Requires: Component dwidth == AXI dwidth @@ -71,6 +72,7 @@ module axi_sub import axi_pkg::*; #( logic r_dv; logic [AW-1:0] r_addr; // Byte address logic [UW-1:0] r_user; + logic [IW-1:0] r_id; logic r_last; // Asserted with final 'dv' of a burst logic r_hld; logic r_err; @@ -81,6 +83,7 @@ module axi_sub import axi_pkg::*; #( logic w_dv; logic [AW-1:0] w_addr; // Byte address logic [UW-1:0] w_user; + logic [IW-1:0] w_id; logic [DW-1:0] w_wdata; // Requires: Component dwidth == AXI dwidth logic [BC-1:0] w_wstrb; // Requires: Component dwidth == AXI dwidth logic w_last; // Asserted with final 'dv' of a burst @@ -111,6 +114,7 @@ module axi_sub import axi_pkg::*; #( .dv (w_dv ), .addr (w_addr ), .user (w_user ), + .id (w_id ), .wdata(w_wdata), .wstrb(w_wstrb), .last (w_last ), @@ -143,6 +147,7 @@ module axi_sub import axi_pkg::*; #( .dv (r_dv ), .addr (r_addr ), .user (r_user ), + .id (r_id ), .last (r_last ), .hld (r_hld ), .err (r_err ), @@ -166,6 +171,7 @@ module axi_sub import axi_pkg::*; #( .r_dv (r_dv ), .r_addr (r_addr ), .r_user (r_user ), + .r_id (r_id ), .r_last (r_last ), .r_hld (r_hld ), .r_err (r_err ), @@ -175,6 +181,7 @@ module axi_sub import axi_pkg::*; #( .w_dv (w_dv ), .w_addr (w_addr ), .w_user (w_user ), + .w_id (w_id ), .w_wdata(w_wdata), .w_wstrb(w_wstrb), .w_last (w_last ), @@ -185,6 +192,7 @@ module axi_sub import axi_pkg::*; #( .dv (dv ), .addr (addr ), .user (user ), + .id (id ), .wdata (wdata ), .wstrb (wstrb ), .last (last ), diff --git a/src/axi/rtl/axi_sub_arb.sv b/src/axi/rtl/axi_sub_arb.sv index 235405d80..e11935289 100644 --- a/src/axi/rtl/axi_sub_arb.sv +++ b/src/axi/rtl/axi_sub_arb.sv @@ -44,6 +44,7 @@ module axi_sub_arb import axi_pkg::*; #( input logic r_dv, input logic [AW-1:0] r_addr, // Byte address input logic [UW-1:0] r_user, + input logic [IW-1:0] r_id, input logic r_last, // Asserted with final 'dv' of a burst output logic r_hld, output logic r_err, @@ -54,6 +55,7 @@ module axi_sub_arb import axi_pkg::*; #( input logic w_dv, input logic [AW-1:0] w_addr, // Byte address input logic [UW-1:0] w_user, + input logic [IW-1:0] w_id, input logic [DW-1:0] w_wdata, // Requires: Component dwidth == AXI dwidth input logic [BC-1:0] w_wstrb, // Requires: Component dwidth == AXI dwidth input logic w_last, // Asserted with final 'dv' of a burst @@ -64,6 +66,7 @@ module axi_sub_arb import axi_pkg::*; #( output logic dv, output logic [AW-1:0] addr, // Byte address output logic [UW-1:0] user, + output logic [IW-1:0] id, output logic [DW-1:0] wdata, // Requires: Component dwidth == AXI dwidth output logic [BC-1:0] wstrb, // Requires: Component dwidth == AXI dwidth output logic last, // Asserted with final 'dv' of a burst @@ -116,6 +119,7 @@ module axi_sub_arb import axi_pkg::*; #( dv = r_dv || w_dv; addr = r_win ? r_addr : w_addr; user = r_win ? r_user : w_user; + id = r_win ? r_id : w_id ; last = r_win ? r_last : w_last; r_hld = hld || !r_win; w_hld = hld || r_win; diff --git a/src/axi/rtl/axi_sub_rd.sv b/src/axi/rtl/axi_sub_rd.sv index ae295879a..bdb1eb176 100644 --- a/src/axi/rtl/axi_sub_rd.sv +++ b/src/axi/rtl/axi_sub_rd.sv @@ -55,6 +55,7 @@ module axi_sub_rd import axi_pkg::*; #( output logic dv, output logic [AW-1:0] addr, // Byte address output logic [UW-1:0] user, + output logic [IW-1:0] id, output logic last, // Asserted with final 'dv' of a burst input logic hld, input logic err, @@ -165,6 +166,7 @@ module axi_sub_rd import axi_pkg::*; #( // Force aligned address to component always_comb addr = {txn_ctx.addr[AW-1:BW],BW'(0)}; always_comb user = txn_ctx.user; + always_comb id = txn_ctx.id; // Use full address to calculate next address (in case of arsize < data width) axi_addr #( diff --git a/src/axi/rtl/axi_sub_wr.sv b/src/axi/rtl/axi_sub_wr.sv index 68fd7eff3..62a700805 100644 --- a/src/axi/rtl/axi_sub_wr.sv +++ b/src/axi/rtl/axi_sub_wr.sv @@ -51,6 +51,7 @@ module axi_sub_wr import axi_pkg::*; #( output logic dv, output logic [AW-1:0] addr, // Byte address output logic [UW-1:0] user, + output logic [IW-1:0] id, output logic [DW-1:0] wdata, // Requires: Component dwidth == AXI dwidth output logic [BC-1:0] wstrb, // Requires: Component dwidth == AXI dwidth output logic last, // Asserted with final 'dv' of a burst @@ -198,6 +199,7 @@ module axi_sub_wr import axi_pkg::*; #( // Force aligned address to component always_comb addr = {txn_ctx.addr[AW-1:BW],BW'(0)}; always_comb user = txn_ctx.user; + always_comb id = txn_ctx.id; // Use full address to calculate next address (in case of AxSIZE < data width) axi_addr #( From d4582ae0a0d0a3cc1ff02b2e8604d69e1da05a4f Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Thu, 30 May 2024 11:39:52 -0700 Subject: [PATCH 19/58] Add component inf 'write' signal --- src/axi/rtl/axi_sub.sv | 2 ++ src/axi/rtl/axi_sub_arb.sv | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/axi/rtl/axi_sub.sv b/src/axi/rtl/axi_sub.sv index 222e47d0f..cfdbfd984 100644 --- a/src/axi/rtl/axi_sub.sv +++ b/src/axi/rtl/axi_sub.sv @@ -52,6 +52,7 @@ module axi_sub import axi_pkg::*; #( //COMPONENT INF output logic dv, output logic [AW-1:0] addr, // Byte address + output logic write, output logic [UW-1:0] user, output logic [IW-1:0] id, output logic [DW-1:0] wdata, // Requires: Component dwidth == AXI dwidth @@ -191,6 +192,7 @@ module axi_sub import axi_pkg::*; #( //COMPONENT INF .dv (dv ), .addr (addr ), + .write (write ), .user (user ), .id (id ), .wdata (wdata ), diff --git a/src/axi/rtl/axi_sub_arb.sv b/src/axi/rtl/axi_sub_arb.sv index e11935289..aa770372c 100644 --- a/src/axi/rtl/axi_sub_arb.sv +++ b/src/axi/rtl/axi_sub_arb.sv @@ -65,6 +65,7 @@ module axi_sub_arb import axi_pkg::*; #( //COMPONENT INF output logic dv, output logic [AW-1:0] addr, // Byte address + output logic write, output logic [UW-1:0] user, output logic [IW-1:0] id, output logic [DW-1:0] wdata, // Requires: Component dwidth == AXI dwidth @@ -118,6 +119,7 @@ module axi_sub_arb import axi_pkg::*; #( always_comb begin dv = r_dv || w_dv; addr = r_win ? r_addr : w_addr; + write = r_win ? 0 : 1; user = r_win ? r_user : w_user; id = r_win ? r_id : w_id ; last = r_win ? r_last : w_last; From d467e3a36beb4ffd762d637d35c71626182d0b01 Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Fri, 31 May 2024 17:55:10 -0700 Subject: [PATCH 20/58] New handshake assertions; i/f X checks conditional upon valid signals --- src/axi/rtl/axi_sub_rd.sv | 26 +++++++++++++++----------- src/axi/rtl/axi_sub_wr.sv | 29 +++++++++++++++++------------ 2 files changed, 32 insertions(+), 23 deletions(-) diff --git a/src/axi/rtl/axi_sub_rd.sv b/src/axi/rtl/axi_sub_rd.sv index bdb1eb176..b7baf53a9 100644 --- a/src/axi/rtl/axi_sub_rd.sv +++ b/src/axi/rtl/axi_sub_rd.sv @@ -344,21 +344,25 @@ module axi_sub_rd import axi_pkg::*; #( // --------------------------------------- // // Formal Properties // // --------------------------------------- // - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARADDR , s_axi_if.araddr , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARBURST, s_axi_if.arburst, clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARSIZE , s_axi_if.arsize , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARLEN , s_axi_if.arlen , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARUSER , s_axi_if.aruser , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARID , s_axi_if.arid , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARLOCK , s_axi_if.arlock , clk, !rst_n) `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARVALID, s_axi_if.arvalid, clk, !rst_n) `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARREADY, s_axi_if.arready, clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RDATA , s_axi_if.rdata , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RRESP , s_axi_if.rresp , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RID , s_axi_if.rid , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RLAST , s_axi_if.rlast , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARADDR , (s_axi_if.arvalid ? s_axi_if.araddr : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARBURST, (s_axi_if.arvalid ? s_axi_if.arburst : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARSIZE , (s_axi_if.arvalid ? s_axi_if.arsize : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARLEN , (s_axi_if.arvalid ? s_axi_if.arlen : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARUSER , (s_axi_if.arvalid ? s_axi_if.aruser : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARID , (s_axi_if.arvalid ? s_axi_if.arid : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_ARLOCK , (s_axi_if.arvalid ? s_axi_if.arlock : '0), clk, !rst_n) `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RVALID , s_axi_if.rvalid , clk, !rst_n) `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RREADY , s_axi_if.rready , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RDATA , (s_axi_if.rvalid ? s_axi_if.rdata : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RRESP , (s_axi_if.rvalid ? s_axi_if.rresp : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RID , (s_axi_if.rvalid ? s_axi_if.rid : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RLAST , (s_axi_if.rvalid ? s_axi_if.rlast : '0), clk, !rst_n) + + // Handshake rules + `CALIPTRA_ASSERT (AXI_SUB_AR_HSHAKE_ERR, s_axi_if.arvalid && !s_axi_if.arready => s_axi_if.arvalid, clk, !rst_n) + `CALIPTRA_ASSERT (AXI_SUB_R_HSHAKE_ERR, s_axi_if.rvalid && !s_axi_if.rready => s_axi_if.rvalid, clk, !rst_n) `CALIPTRA_ASSERT_NEVER(ERR_AXI_RD_DROP , dp_rvalid[0] && !dp_rready[0], clk, !rst_n) `CALIPTRA_ASSERT_NEVER(ERR_AXI_RD_X , dp_rvalid[0] && $isunknown({dp_rdata[0],dp_xfer_ctx[0]}), clk, !rst_n) diff --git a/src/axi/rtl/axi_sub_wr.sv b/src/axi/rtl/axi_sub_wr.sv index 62a700805..cfd3998e2 100644 --- a/src/axi/rtl/axi_sub_wr.sv +++ b/src/axi/rtl/axi_sub_wr.sv @@ -316,24 +316,29 @@ module axi_sub_wr import axi_pkg::*; #( // --------------------------------------- // // Formal Properties // // --------------------------------------- // - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWADDR , s_axi_if.awaddr , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWBURST, s_axi_if.awburst, clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWSIZE , s_axi_if.awsize , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWLEN , s_axi_if.awlen , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWUSER , s_axi_if.awuser , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWID , s_axi_if.awid , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWLOCK , s_axi_if.awlock , clk, !rst_n) `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWVALID, s_axi_if.awvalid, clk, !rst_n) `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWREADY, s_axi_if.awready, clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_WDATA , s_axi_if.wdata , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_WSTRB , s_axi_if.wstrb , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWADDR , (s_axi_if.awvalid ? s_axi_if.awaddr : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWBURST, (s_axi_if.awvalid ? s_axi_if.awburst : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWSIZE , (s_axi_if.awvalid ? s_axi_if.awsize : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWLEN , (s_axi_if.awvalid ? s_axi_if.awlen : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWUSER , (s_axi_if.awvalid ? s_axi_if.awuser : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWID , (s_axi_if.awvalid ? s_axi_if.awid : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_AWLOCK , (s_axi_if.awvalid ? s_axi_if.awlock : '0), clk, !rst_n) `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_WVALID , s_axi_if.wvalid , clk, !rst_n) `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_WREADY , s_axi_if.wready , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_WLAST , s_axi_if.wlast , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_BRESP , s_axi_if.bresp , clk, !rst_n) - `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_BID , s_axi_if.bid , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_WDATA , (s_axi_if.wvalid ? s_axi_if.wdata : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_WSTRB , (s_axi_if.wvalid ? s_axi_if.wstrb : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_WLAST , (s_axi_if.wvalid ? s_axi_if.wlast : '0), clk, !rst_n) `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_BVALID , s_axi_if.bvalid , clk, !rst_n) `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_BREADY , s_axi_if.bready , clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_BRESP , (s_axi_if.bvalid ? s_axi_if.bresp : '0), clk, !rst_n) + `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_BID , (s_axi_if.bvalid ? s_axi_if.bid : '0), clk, !rst_n) + + // Handshake rules + `CALIPTRA_ASSERT (AXI_SUB_AW_HSHAKE_ERR, s_axi_if.awvalid && !s_axi_if.awready => s_axi_if.awvalid, clk, !rst_n) + `CALIPTRA_ASSERT (AXI_SUB_W_HSHAKE_ERR, s_axi_if.wvalid && !s_axi_if.wready => s_axi_if.wvalid, clk, !rst_n) + `CALIPTRA_ASSERT (AXI_SUB_B_HSHAKE_ERR, s_axi_if.bvalid && !s_axi_if.bready => s_axi_if.bvalid, clk, !rst_n) // Exclusive access rules: // - Must have an address that is aligned to burst byte count From 9f1e954f3d7277c8f93245e57c6046680ec4571e Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Fri, 31 May 2024 18:07:27 -0700 Subject: [PATCH 21/58] Swap APB for AXI, replace all 'user' references with 'AXI ID' --- src/integration/rtl/caliptra_top.sv | 49 +---- src/integration/rtl/config_defines.svh | 7 +- src/soc_ifc/rtl/mbox.sv | 26 +-- src/soc_ifc/rtl/mbox_csr.rdl | 12 +- src/soc_ifc/rtl/mbox_csr.sv | 32 +-- src/soc_ifc/rtl/mbox_csr_covergroups.svh | 14 +- src/soc_ifc/rtl/mbox_csr_pkg.sv | 16 +- src/soc_ifc/rtl/mbox_csr_sample.svh | 20 +- src/soc_ifc/rtl/mbox_csr_uvm.sv | 30 +-- src/soc_ifc/rtl/sha512_acc_csr.sv | 46 ++--- .../rtl/sha512_acc_csr_covergroups.svh | 10 +- src/soc_ifc/rtl/sha512_acc_csr_pkg.sv | 18 +- src/soc_ifc/rtl/sha512_acc_csr_properties.rdl | 2 +- src/soc_ifc/rtl/sha512_acc_csr_sample.svh | 14 +- src/soc_ifc/rtl/sha512_acc_csr_uvm.sv | 30 +-- src/soc_ifc/rtl/sha512_acc_external_csr.rdl | 22 +- src/soc_ifc/rtl/sha512_acc_top.sv | 16 +- src/soc_ifc/rtl/soc_ifc_arb.sv | 22 +- src/soc_ifc/rtl/soc_ifc_external_reg.rdl | 60 +++--- src/soc_ifc/rtl/soc_ifc_pkg.sv | 18 +- src/soc_ifc/rtl/soc_ifc_reg.sv | 192 +++++++++--------- src/soc_ifc/rtl/soc_ifc_reg_covergroups.svh | 48 ++--- src/soc_ifc/rtl/soc_ifc_reg_pkg.sv | 96 ++++----- src/soc_ifc/rtl/soc_ifc_reg_sample.svh | 60 +++--- src/soc_ifc/rtl/soc_ifc_reg_uvm.sv | 160 +++++++-------- src/soc_ifc/rtl/soc_ifc_top.sv | 178 ++++++++-------- 26 files changed, 594 insertions(+), 604 deletions(-) diff --git a/src/integration/rtl/caliptra_top.sv b/src/integration/rtl/caliptra_top.sv index 5bedde743..8b8d0bb3e 100755 --- a/src/integration/rtl/caliptra_top.sv +++ b/src/integration/rtl/caliptra_top.sv @@ -44,18 +44,9 @@ module caliptra_top output logic jtag_tdo, // JTAG TDO output logic jtag_tdoEn, // JTAG TDO enable - //APB Interface - input logic [`CALIPTRA_APB_ADDR_WIDTH-1:0] PADDR, - input logic [2:0] PPROT, - input logic PSEL, - input logic PENABLE, - input logic PWRITE, - input logic [`CALIPTRA_APB_DATA_WIDTH-1:0] PWDATA, - input logic [`CALIPTRA_APB_USER_WIDTH-1:0] PAUSER, - - output logic PREADY, - output logic PSLVERR, - output logic [`CALIPTRA_APB_DATA_WIDTH-1:0] PRDATA, + //SoC AXI Interface + axi_if.w_sub s_axi_w_if, + axi_if.r_sub s_axi_r_if, //QSPI Interface output logic qspi_clk_o, @@ -1171,9 +1162,10 @@ uart #( soc_ifc_top #( .AHB_ADDR_WIDTH(`CALIPTRA_SLAVE_ADDR_WIDTH(`CALIPTRA_SLAVE_SEL_SOC_IFC)), .AHB_DATA_WIDTH(`CALIPTRA_AHB_HDATA_SIZE), - .APB_ADDR_WIDTH(`CALIPTRA_SLAVE_ADDR_WIDTH(`CALIPTRA_SLAVE_SEL_SOC_IFC)), - .APB_DATA_WIDTH(`CALIPTRA_APB_DATA_WIDTH), - .APB_USER_WIDTH(`CALIPTRA_APB_USER_WIDTH) + .AXI_ADDR_WIDTH(`CALIPTRA_SLAVE_ADDR_WIDTH(`CALIPTRA_SLAVE_SEL_SOC_IFC)), + .AXI_DATA_WIDTH(`CALIPTRA_AXI_DATA_WIDTH), + .AXI_ID_WIDTH (`CALIPTRA_AXI_ID_WIDTH ), + .AXI_USER_WIDTH(`CALIPTRA_AXI_USER_WIDTH) ) soc_ifc_top1 ( @@ -1203,16 +1195,10 @@ soc_ifc_top1 // RV ECC Status Interface .rv_ecc_sts(rv_ecc_sts), - //APB Interface with SoC - .paddr_i(PADDR[`CALIPTRA_SLAVE_ADDR_WIDTH(`CALIPTRA_SLAVE_SEL_SOC_IFC)-1:0]), - .psel_i(PSEL), - .penable_i(PENABLE), - .pwrite_i(PWRITE), - .pwdata_i(PWDATA), - .pauser_i(PAUSER), - .pready_o(PREADY), - .prdata_o(PRDATA), - .pslverr_o(PSLVERR), + //SoC AXI Interface + .s_axi_w_if(s_axi_w_if), + .s_axi_r_if(s_axi_r_if), + //AHB Interface with uC .haddr_i (responder_inst[`CALIPTRA_SLAVE_SEL_SOC_IFC].haddr[`CALIPTRA_SLAVE_ADDR_WIDTH(`CALIPTRA_SLAVE_SEL_SOC_IFC)-1:0]), .hwdata_i (responder_inst[`CALIPTRA_SLAVE_SEL_SOC_IFC].hwdata), @@ -1321,17 +1307,4 @@ endgenerate `CALIPTRA_ASSERT_KNOWN(AHB_MASTER_HRDATA_X, initiator_inst.hready ? initiator_inst.hrdata : '0, clk, !cptra_noncore_rst_b) `CALIPTRA_ASSERT_NEVER(AHB_MASTER_HTRANS_BUSY, initiator_inst.htrans == 2'b01, clk, !cptra_noncore_rst_b) -`CALIPTRA_ASSERT_KNOWN(APB_MASTER_PADDR_X, PADDR, clk, !cptra_rst_b) -`CALIPTRA_ASSERT_KNOWN(APB_MASTER_PWDATA_X, PWDATA, clk, !cptra_rst_b) -`CALIPTRA_ASSERT_KNOWN(APB_MASTER_PWRITE_X, PWRITE, clk, !cptra_rst_b) -`CALIPTRA_ASSERT_KNOWN(APB_MASTER_PREADY_X, PREADY, clk, !cptra_rst_b) -`CALIPTRA_ASSERT_KNOWN(APB_MASTER_PENABLE_X, PENABLE, clk, !cptra_rst_b) -`CALIPTRA_ASSERT_KNOWN(APB_MASTER_PSEL_X, PSEL, clk, !cptra_rst_b) -`CALIPTRA_ASSERT_KNOWN(APB_MASTER_PPROT_X, PPROT, clk, !cptra_rst_b) -`CALIPTRA_ASSERT_KNOWN(APB_MASTER_PAUSER_X, PAUSER, clk, !cptra_rst_b) -`CALIPTRA_ASSERT_KNOWN(APB_MASTER_PSLVERR_X, PSLVERR, clk, !cptra_rst_b) -`CALIPTRA_ASSERT_KNOWN(APB_MASTER_PRDATA_X, PREADY ? PRDATA : '0, clk, !cptra_rst_b) - -`CALIPTRA_ASSERT_NEVER(APB_MASTER_PPROT_ACTIVE, PPROT !== 3'b000, clk, !cptra_rst_b) - endmodule diff --git a/src/integration/rtl/config_defines.svh b/src/integration/rtl/config_defines.svh index 1a52b4002..21a904129 100755 --- a/src/integration/rtl/config_defines.svh +++ b/src/integration/rtl/config_defines.svh @@ -22,9 +22,10 @@ `define CALIPTRA_AHB_MASTERS_NUM 4'd1 // Number of masters AHB `define CALIPTRA_AHB_HADDR_SIZE 32 // bit-width AHB address haddr `define CALIPTRA_AHB_HDATA_SIZE 64 // bit-width AHB data - `define CALIPTRA_APB_ADDR_WIDTH 32 // bit-width APB address - `define CALIPTRA_APB_DATA_WIDTH 32 // bit-width APB data - `define CALIPTRA_APB_USER_WIDTH 32 // bit-width APB PAUSER field + `define CALIPTRA_AXI_ADDR_WIDTH 32 // bit-width AXI address + `define CALIPTRA_AXI_DATA_WIDTH 32 // bit-width AXI data + `define CALIPTRA_AXI_USER_WIDTH 32 // bit-width AXI USER field + `define CALIPTRA_AXI_ID_WIDTH 5 // bit-width AXI ID field `define CALIPTRA_QSPI_CS_WIDTH 2 `define CALIPTRA_QSPI_IO_WIDTH 4 `define CALIPTRA_SOC_SEC_STATE_WIDTH 3 diff --git a/src/soc_ifc/rtl/mbox.sv b/src/soc_ifc/rtl/mbox.sv index a2d4adbed..11b6c125e 100644 --- a/src/soc_ifc/rtl/mbox.sv +++ b/src/soc_ifc/rtl/mbox.sv @@ -53,7 +53,7 @@ module mbox output logic soc_mbox_data_avail, output logic soc_req_mbox_lock, output mbox_protocol_error_t mbox_protocol_error, - output logic mbox_inv_pauser_axs, + output logic mbox_inv_axi_id_axs, //DMI reg access input logic dmi_inc_rdptr, @@ -146,10 +146,10 @@ assign mbox_error = read_error | write_error; //Determine if this is a valid request from the requester side //1) uC requests are valid if uc has lock -//2) SoC requests are valid if soc has lock and it's the user that locked it +//2) SoC requests are valid if soc has lock and it's the AXI ID that locked it always_comb valid_requester = hwif_out.mbox_lock.lock.value & ((~req_data.soc_req & (~soc_has_lock || (mbox_fsm_ps == MBOX_EXECUTE_UC))) | - ( req_data.soc_req & soc_has_lock & (req_data.user == hwif_out.mbox_user.user.value))); + ( req_data.soc_req & soc_has_lock & (req_data.id == hwif_out.mbox_id.id.value))); //Determine if this is a valid request from the receiver side always_comb valid_receiver = hwif_out.mbox_lock.lock.value & @@ -162,7 +162,7 @@ always_comb valid_receiver = hwif_out.mbox_lock.lock.value & (~soc_has_lock & (mbox_fsm_ps == MBOX_EXECUTE_UC))))); //We want to mask read data when -//Invalid user is trying to access the mailbox data +//Invalid ID is trying to access the mailbox data always_comb mask_rdata = hwif_out.mbox_dataout.dataout.swacc & ~valid_receiver; //move from idle to rdy for command when lock is acquired @@ -191,7 +191,7 @@ always_comb arc_FORCE_MBOX_UNLOCK = hwif_out.mbox_unlock.unlock.value; // Any register write or read by an INVALID agent results in the access // being silently dropped. // Assumption: uC (ROM, FMC, RT) will never make an invalid request. -// NOTE: Any APB agent can trigger the error at any point during a uC->SOC flow +// NOTE: Any AXI agent can trigger the error at any point during a uC->SOC flow // by writing to mbox_status (since it's a valid_receiver). // FIXED! valid_receiver is restricted by FSM state now. always_comb arc_MBOX_RDY_FOR_CMD_MBOX_ERROR = (mbox_fsm_ps == MBOX_RDY_FOR_CMD) && @@ -340,7 +340,7 @@ always_comb begin : mbox_fsm_combo end end //uC set execute, data is for the SoC - //If we're here, restrict reading to the user that requested the data + //If we're here, restrict reading to the AXI ID that requested the data //Only SoC can read from mbox //Only SoC can write to datain here to respond to uC MBOX_EXECUTE_SOC: begin @@ -379,10 +379,10 @@ always_comb begin : mbox_fsm_combo endcase end -// Any ol' PAUSER is fine for reg-reads (except dataout) -// NOTE: This only captures accesses by APB agents that are valid, but do not +// Any ol' AXI_ID is fine for reg-reads (except dataout) +// NOTE: This only captures accesses by AXI agents that are valid, but do not // have lock. Invalid agent accesses are blocked by arbiter. -assign mbox_inv_pauser_axs = req_dv && req_data.soc_req && !req_hold && +assign mbox_inv_axi_id_axs = req_dv && req_data.soc_req && !req_hold && !valid_requester && !valid_receiver && (req_data.write || hwif_out.mbox_dataout.dataout.swacc); @@ -519,18 +519,18 @@ always_comb mbox_rd_full_nxt = rst_mbox_rdptr ? '0 : inc_rdptr & (mbox_rdptr == always_comb soc_req_mbox_lock = hwif_out.mbox_lock.lock.value & ~soc_has_lock & hwif_out.mbox_lock.lock.swmod & req_data.soc_req; always_comb hwif_in.cptra_rst_b = rst_b; -always_comb hwif_in.mbox_user.user.next = req_data.user; +always_comb hwif_in.mbox_id.id.next = req_data.id; always_comb hwif_in.mbox_status.mbox_fsm_ps.next = mbox_fsm_ps; always_comb hwif_in.soc_req = req_data.soc_req; -//check the requesting user: +//check the requesting ID: //don't update mailbox data if lock hasn't been acquired //if uc has the lock, check that this request is from uc -//if soc has the lock, check that this request is from soc and user attributes match +//if soc has the lock, check that this request is from soc and ID attributes match always_comb hwif_in.valid_requester = valid_requester; always_comb hwif_in.valid_receiver = valid_receiver; -//indicate that requesting user is setting the lock +//indicate that requesting ID is setting the lock always_comb hwif_in.lock_set = arc_MBOX_IDLE_MBOX_RDY_FOR_CMD; //update dataout diff --git a/src/soc_ifc/rtl/mbox_csr.rdl b/src/soc_ifc/rtl/mbox_csr.rdl index 8a67121be..b6a710714 100644 --- a/src/soc_ifc/rtl/mbox_csr.rdl +++ b/src/soc_ifc/rtl/mbox_csr.rdl @@ -39,15 +39,15 @@ addrmap mbox_csr { field {rset; sw=r; hw=r; hwclr=true; precedence=hw; swmod=true;} lock=0; } mbox_lock; - // user register - // store user from interface when setting lock + // ID register + // store AXI ID from interface when setting lock reg { - name="Mailbox User"; - desc="Stores the user that locked the mailbox + name="Mailbox ID"; + desc="Stores the AXI ID that locked the mailbox [br]Caliptra Access: RO [br]SOC Access: RO"; - field {sw=r; hw=rw; we=lock_set;} user[32]=0; - } mbox_user; + field {sw=r; hw=rw; we=lock_set;} id[32]=0; + } mbox_id; reg { name="Mailbox Command"; diff --git a/src/soc_ifc/rtl/mbox_csr.sv b/src/soc_ifc/rtl/mbox_csr.sv index c58f79ea2..d99ba04d7 100644 --- a/src/soc_ifc/rtl/mbox_csr.sv +++ b/src/soc_ifc/rtl/mbox_csr.sv @@ -67,7 +67,7 @@ module mbox_csr ( //-------------------------------------------------------------------------- typedef struct packed{ logic mbox_lock; - logic mbox_user; + logic mbox_id; logic mbox_cmd; logic mbox_dlen; logic mbox_datain; @@ -84,7 +84,7 @@ module mbox_csr ( always_comb begin decoded_reg_strb.mbox_lock = cpuif_req_masked & (cpuif_addr == 6'h0); - decoded_reg_strb.mbox_user = cpuif_req_masked & (cpuif_addr == 6'h4); + decoded_reg_strb.mbox_id = cpuif_req_masked & (cpuif_addr == 6'h4); decoded_reg_strb.mbox_cmd = cpuif_req_masked & (cpuif_addr == 6'h8); decoded_reg_strb.mbox_dlen = cpuif_req_masked & (cpuif_addr == 6'hc); decoded_reg_strb.mbox_datain = cpuif_req_masked & (cpuif_addr == 6'h10); @@ -114,8 +114,8 @@ module mbox_csr ( struct packed{ logic [31:0] next; logic load_next; - } user; - } mbox_user; + } id; + } mbox_id; struct packed{ struct packed{ logic [31:0] next; @@ -190,8 +190,8 @@ module mbox_csr ( struct packed{ struct packed{ logic [31:0] value; - } user; - } mbox_user; + } id; + } mbox_id; struct packed{ struct packed{ logic [31:0] value; @@ -270,27 +270,27 @@ module mbox_csr ( end assign hwif_out.mbox_lock.lock.value = field_storage.mbox_lock.lock.value; assign hwif_out.mbox_lock.lock.swmod = decoded_reg_strb.mbox_lock && !decoded_req_is_wr; - // Field: mbox_csr.mbox_user.user + // Field: mbox_csr.mbox_id.id always_comb begin automatic logic [31:0] next_c; automatic logic load_next_c; - next_c = field_storage.mbox_user.user.value; + next_c = field_storage.mbox_id.id.value; load_next_c = '0; if(hwif_in.lock_set) begin // HW Write - we - next_c = hwif_in.mbox_user.user.next; + next_c = hwif_in.mbox_id.id.next; load_next_c = '1; end - field_combo.mbox_user.user.next = next_c; - field_combo.mbox_user.user.load_next = load_next_c; + field_combo.mbox_id.id.next = next_c; + field_combo.mbox_id.id.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.mbox_user.user.value <= 32'h0; - end else if(field_combo.mbox_user.user.load_next) begin - field_storage.mbox_user.user.value <= field_combo.mbox_user.user.next; + field_storage.mbox_id.id.value <= 32'h0; + end else if(field_combo.mbox_id.id.load_next) begin + field_storage.mbox_id.id.value <= field_combo.mbox_id.id.next; end end - assign hwif_out.mbox_user.user.value = field_storage.mbox_user.user.value; + assign hwif_out.mbox_id.id.value = field_storage.mbox_id.id.value; // Field: mbox_csr.mbox_cmd.command always_comb begin automatic logic [31:0] next_c; @@ -585,7 +585,7 @@ module mbox_csr ( logic [9-1:0][31:0] readback_array; assign readback_array[0][0:0] = (decoded_reg_strb.mbox_lock && !decoded_req_is_wr) ? field_storage.mbox_lock.lock.value : '0; assign readback_array[0][31:1] = '0; - assign readback_array[1][31:0] = (decoded_reg_strb.mbox_user && !decoded_req_is_wr) ? field_storage.mbox_user.user.value : '0; + assign readback_array[1][31:0] = (decoded_reg_strb.mbox_id && !decoded_req_is_wr) ? field_storage.mbox_id.id.value : '0; assign readback_array[2][31:0] = (decoded_reg_strb.mbox_cmd && !decoded_req_is_wr) ? field_storage.mbox_cmd.command.value : '0; assign readback_array[3][31:0] = (decoded_reg_strb.mbox_dlen && !decoded_req_is_wr) ? field_storage.mbox_dlen.length.value : '0; assign readback_array[4][31:0] = (decoded_reg_strb.mbox_datain && !decoded_req_is_wr) ? field_storage.mbox_datain.datain.value : '0; diff --git a/src/soc_ifc/rtl/mbox_csr_covergroups.svh b/src/soc_ifc/rtl/mbox_csr_covergroups.svh index 3664e1fc3..7efb5ce3c 100644 --- a/src/soc_ifc/rtl/mbox_csr_covergroups.svh +++ b/src/soc_ifc/rtl/mbox_csr_covergroups.svh @@ -41,8 +41,8 @@ endgroup - /*----------------------- MBOX_CSR__MBOX_USER COVERGROUPS -----------------------*/ - covergroup mbox_csr__mbox_user_bit_cg with function sample(input bit reg_bit); + /*----------------------- MBOX_CSR__MBOX_ID COVERGROUPS -----------------------*/ + covergroup mbox_csr__mbox_id_bit_cg with function sample(input bit reg_bit); option.per_instance = 1; reg_bit_cp : coverpoint reg_bit { bins value[2] = {0,1}; @@ -53,11 +53,11 @@ } endgroup - covergroup mbox_csr__mbox_user_fld_cg with function sample( - input bit [32-1:0] user + covergroup mbox_csr__mbox_id_fld_cg with function sample( + input bit [32-1:0] id ); option.per_instance = 1; - user_cp : coverpoint user { + id_cp : coverpoint id { bins zero_val = {32'h0}; bins rand_val[64] = {[1:32'hFFFF_FFFE]}; bins ones_val = {{32{1'b1}}}; @@ -221,7 +221,8 @@ input bit [1-1:0] ecc_single_error, input bit [1-1:0] ecc_double_error, input bit [3-1:0] mbox_fsm_ps, - input bit [1-1:0] soc_has_lock + input bit [1-1:0] soc_has_lock, + input bit [15-1:0] mbox_rdptr ); option.per_instance = 1; status_cp : coverpoint status; @@ -278,6 +279,7 @@ // illegal_bins TRANSITION_ERROR_EXECUTE_SOC = (mbox_fsm_state_e'(MBOX_ERROR) => mbox_fsm_state_e'(MBOX_EXECUTE_SOC)); } soc_has_lock_cp : coverpoint soc_has_lock; + mbox_rdptr_cp : coverpoint mbox_rdptr; status_edge_cp : coverpoint status { bins rise = (0 => 1); bins fall = (1 => 0); diff --git a/src/soc_ifc/rtl/mbox_csr_pkg.sv b/src/soc_ifc/rtl/mbox_csr_pkg.sv index 39f775c03..13341ef52 100644 --- a/src/soc_ifc/rtl/mbox_csr_pkg.sv +++ b/src/soc_ifc/rtl/mbox_csr_pkg.sv @@ -16,11 +16,11 @@ package mbox_csr_pkg; typedef struct packed{ logic [31:0] next; - } mbox_csr__mbox_user__user__in_t; + } mbox_csr__mbox_id__id__in_t; typedef struct packed{ - mbox_csr__mbox_user__user__in_t user; - } mbox_csr__mbox_user__in_t; + mbox_csr__mbox_id__id__in_t id; + } mbox_csr__mbox_id__in_t; typedef struct packed{ logic [31:0] next; @@ -80,7 +80,7 @@ package mbox_csr_pkg; logic valid_requester; logic valid_receiver; mbox_csr__mbox_lock__in_t mbox_lock; - mbox_csr__mbox_user__in_t mbox_user; + mbox_csr__mbox_id__in_t mbox_id; mbox_csr__mbox_dataout__in_t mbox_dataout; mbox_csr__mbox_execute__in_t mbox_execute; mbox_csr__mbox_status_ecc_double_error_38cec4b0_ecc_single_error_9c62b760__in_t mbox_status; @@ -97,11 +97,11 @@ package mbox_csr_pkg; typedef struct packed{ logic [31:0] value; - } mbox_csr__mbox_user__user__out_t; + } mbox_csr__mbox_id__id__out_t; typedef struct packed{ - mbox_csr__mbox_user__user__out_t user; - } mbox_csr__mbox_user__out_t; + mbox_csr__mbox_id__id__out_t id; + } mbox_csr__mbox_id__out_t; typedef struct packed{ logic swmod; @@ -190,7 +190,7 @@ package mbox_csr_pkg; typedef struct packed{ mbox_csr__mbox_lock__out_t mbox_lock; - mbox_csr__mbox_user__out_t mbox_user; + mbox_csr__mbox_id__out_t mbox_id; mbox_csr__mbox_cmd__out_t mbox_cmd; mbox_csr__mbox_dlen__out_t mbox_dlen; mbox_csr__mbox_datain__out_t mbox_datain; diff --git a/src/soc_ifc/rtl/mbox_csr_sample.svh b/src/soc_ifc/rtl/mbox_csr_sample.svh index 29ef7be05..b061ddb12 100644 --- a/src/soc_ifc/rtl/mbox_csr_sample.svh +++ b/src/soc_ifc/rtl/mbox_csr_sample.svh @@ -40,8 +40,8 @@ end endfunction - /*----------------------- MBOX_CSR__MBOX_USER SAMPLE FUNCTIONS -----------------------*/ - function void mbox_csr__mbox_user::sample(uvm_reg_data_t data, + /*----------------------- MBOX_CSR__MBOX_ID SAMPLE FUNCTIONS -----------------------*/ + function void mbox_csr__mbox_id::sample(uvm_reg_data_t data, uvm_reg_data_t byte_en, bit is_read, uvm_reg_map map); @@ -49,19 +49,19 @@ m_data = data; m_is_read = is_read; if (get_coverage(UVM_CVR_REG_BITS)) begin - foreach(user_bit_cg[bt]) this.user_bit_cg[bt].sample(data[0 + bt]); + foreach(id_bit_cg[bt]) this.id_bit_cg[bt].sample(data[0 + bt]); end if (get_coverage(UVM_CVR_FIELD_VALS)) begin - this.fld_cg.sample( data[31:0]/*user*/ ); + this.fld_cg.sample( data[31:0]/*id*/ ); end endfunction - function void mbox_csr__mbox_user::sample_values(); + function void mbox_csr__mbox_id::sample_values(); if (get_coverage(UVM_CVR_REG_BITS)) begin - foreach(user_bit_cg[bt]) this.user_bit_cg[bt].sample(user.get_mirrored_value() >> bt); + foreach(id_bit_cg[bt]) this.id_bit_cg[bt].sample(id.get_mirrored_value() >> bt); end if (get_coverage(UVM_CVR_FIELD_VALS)) begin - this.fld_cg.sample( user.get_mirrored_value() ); + this.fld_cg.sample( id.get_mirrored_value() ); end endfunction @@ -204,9 +204,10 @@ foreach(ecc_double_error_bit_cg[bt]) this.ecc_double_error_bit_cg[bt].sample(data[5 + bt]); foreach(mbox_fsm_ps_bit_cg[bt]) this.mbox_fsm_ps_bit_cg[bt].sample(data[6 + bt]); foreach(soc_has_lock_bit_cg[bt]) this.soc_has_lock_bit_cg[bt].sample(data[9 + bt]); + foreach(mbox_rdptr_bit_cg[bt]) this.mbox_rdptr_bit_cg[bt].sample(data[10 + bt]); end if (get_coverage(UVM_CVR_FIELD_VALS)) begin - this.fld_cg.sample( data[3:0]/*status*/ , data[4:4]/*ecc_single_error*/ , data[5:5]/*ecc_double_error*/ , data[8:6]/*mbox_fsm_ps*/ , data[9:9]/*soc_has_lock*/ ); + this.fld_cg.sample( data[3:0]/*status*/ , data[4:4]/*ecc_single_error*/ , data[5:5]/*ecc_double_error*/ , data[8:6]/*mbox_fsm_ps*/ , data[9:9]/*soc_has_lock*/ , data[24:10]/*mbox_rdptr*/ ); end endfunction @@ -217,9 +218,10 @@ foreach(ecc_double_error_bit_cg[bt]) this.ecc_double_error_bit_cg[bt].sample(ecc_double_error.get_mirrored_value() >> bt); foreach(mbox_fsm_ps_bit_cg[bt]) this.mbox_fsm_ps_bit_cg[bt].sample(mbox_fsm_ps.get_mirrored_value() >> bt); foreach(soc_has_lock_bit_cg[bt]) this.soc_has_lock_bit_cg[bt].sample(soc_has_lock.get_mirrored_value() >> bt); + foreach(mbox_rdptr_bit_cg[bt]) this.mbox_rdptr_bit_cg[bt].sample(mbox_rdptr.get_mirrored_value() >> bt); end if (get_coverage(UVM_CVR_FIELD_VALS)) begin - this.fld_cg.sample( status.get_mirrored_value() , ecc_single_error.get_mirrored_value() , ecc_double_error.get_mirrored_value() , mbox_fsm_ps.get_mirrored_value() , soc_has_lock.get_mirrored_value() ); + this.fld_cg.sample( status.get_mirrored_value() , ecc_single_error.get_mirrored_value() , ecc_double_error.get_mirrored_value() , mbox_fsm_ps.get_mirrored_value() , soc_has_lock.get_mirrored_value() , mbox_rdptr.get_mirrored_value() ); end endfunction diff --git a/src/soc_ifc/rtl/mbox_csr_uvm.sv b/src/soc_ifc/rtl/mbox_csr_uvm.sv index 760853a1a..ee50564b5 100644 --- a/src/soc_ifc/rtl/mbox_csr_uvm.sv +++ b/src/soc_ifc/rtl/mbox_csr_uvm.sv @@ -34,17 +34,17 @@ package mbox_csr_uvm; endfunction : build endclass : mbox_csr__mbox_lock - // Reg - mbox_csr::mbox_user - class mbox_csr__mbox_user extends uvm_reg; + // Reg - mbox_csr::mbox_id + class mbox_csr__mbox_id extends uvm_reg; protected uvm_reg_data_t m_current; protected uvm_reg_data_t m_data; protected bit m_is_read; - mbox_csr__mbox_user_bit_cg user_bit_cg[32]; - mbox_csr__mbox_user_fld_cg fld_cg; - rand uvm_reg_field user; + mbox_csr__mbox_id_bit_cg id_bit_cg[32]; + mbox_csr__mbox_id_fld_cg fld_cg; + rand uvm_reg_field id; - function new(string name = "mbox_csr__mbox_user"); + function new(string name = "mbox_csr__mbox_id"); super.new(name, 32, build_coverage(UVM_CVR_ALL)); endfunction : new extern virtual function void sample_values(); @@ -54,15 +54,15 @@ package mbox_csr_uvm; uvm_reg_map map); virtual function void build(); - this.user = new("user"); - this.user.configure(this, 32, 0, "RO", 1, 'h0, 1, 1, 0); + this.id = new("id"); + this.id.configure(this, 32, 0, "RO", 1, 'h0, 1, 1, 0); if (has_coverage(UVM_CVR_REG_BITS)) begin - foreach(user_bit_cg[bt]) user_bit_cg[bt] = new(); + foreach(id_bit_cg[bt]) id_bit_cg[bt] = new(); end if (has_coverage(UVM_CVR_FIELD_VALS)) fld_cg = new(); endfunction : build - endclass : mbox_csr__mbox_user + endclass : mbox_csr__mbox_id // Reg - mbox_csr::mbox_cmd class mbox_csr__mbox_cmd extends uvm_reg; @@ -302,7 +302,7 @@ package mbox_csr_uvm; // Addrmap - mbox_csr class mbox_csr extends uvm_reg_block; rand mbox_csr__mbox_lock mbox_lock; - rand mbox_csr__mbox_user mbox_user; + rand mbox_csr__mbox_id mbox_id; rand mbox_csr__mbox_cmd mbox_cmd; rand mbox_csr__mbox_dlen mbox_dlen; rand mbox_csr__mbox_datain mbox_datain; @@ -322,11 +322,11 @@ package mbox_csr_uvm; this.mbox_lock.build(); this.default_map.add_reg(this.mbox_lock, 'h0); - this.mbox_user = new("mbox_user"); - this.mbox_user.configure(this); + this.mbox_id = new("mbox_id"); + this.mbox_id.configure(this); - this.mbox_user.build(); - this.default_map.add_reg(this.mbox_user, 'h4); + this.mbox_id.build(); + this.default_map.add_reg(this.mbox_id, 'h4); this.mbox_cmd = new("mbox_cmd"); this.mbox_cmd.configure(this); diff --git a/src/soc_ifc/rtl/sha512_acc_csr.sv b/src/soc_ifc/rtl/sha512_acc_csr.sv index ba52bf8ec..78bfe43fa 100644 --- a/src/soc_ifc/rtl/sha512_acc_csr.sv +++ b/src/soc_ifc/rtl/sha512_acc_csr.sv @@ -67,7 +67,7 @@ module sha512_acc_csr ( //-------------------------------------------------------------------------- typedef struct packed{ logic LOCK; - logic USER; + logic ID; logic MODE; logic START_ADDRESS; logic DLEN; @@ -106,7 +106,7 @@ module sha512_acc_csr ( always_comb begin decoded_reg_strb.LOCK = cpuif_req_masked & (cpuif_addr == 12'h0); - decoded_reg_strb.USER = cpuif_req_masked & (cpuif_addr == 12'h4); + decoded_reg_strb.ID = cpuif_req_masked & (cpuif_addr == 12'h4); decoded_reg_strb.MODE = cpuif_req_masked & (cpuif_addr == 12'h8); decoded_reg_strb.START_ADDRESS = cpuif_req_masked & (cpuif_addr == 12'hc); decoded_reg_strb.DLEN = cpuif_req_masked & (cpuif_addr == 12'h10); @@ -158,8 +158,8 @@ module sha512_acc_csr ( struct packed{ logic [31:0] next; logic load_next; - } USER; - } USER; + } ID; + } ID; struct packed{ struct packed{ logic [1:0] next; @@ -404,8 +404,8 @@ module sha512_acc_csr ( struct packed{ struct packed{ logic [31:0] value; - } USER; - } USER; + } ID; + } ID; struct packed{ struct packed{ logic [1:0] value; @@ -591,7 +591,7 @@ module sha512_acc_csr ( if(decoded_reg_strb.LOCK && !decoded_req_is_wr) begin // SW set on read next_c = '1; load_next_c = '1; - end else if(decoded_reg_strb.LOCK && decoded_req_is_wr && hwif_in.valid_user) begin // SW write 1 clear + end else if(decoded_reg_strb.LOCK && decoded_req_is_wr && hwif_in.valid_id) begin // SW write 1 clear next_c = field_storage.LOCK.LOCK.value & ~(decoded_wr_data[0:0] & decoded_wr_biten[0:0]); load_next_c = '1; end @@ -607,34 +607,34 @@ module sha512_acc_csr ( end assign hwif_out.LOCK.LOCK.value = field_storage.LOCK.LOCK.value; assign hwif_out.LOCK.LOCK.swmod = decoded_reg_strb.LOCK; - // Field: sha512_acc_csr.USER.USER + // Field: sha512_acc_csr.ID.ID always_comb begin automatic logic [31:0] next_c; automatic logic load_next_c; - next_c = field_storage.USER.USER.value; + next_c = field_storage.ID.ID.value; load_next_c = '0; if(hwif_in.lock_set) begin // HW Write - we - next_c = hwif_in.USER.USER.next; + next_c = hwif_in.ID.ID.next; load_next_c = '1; end - field_combo.USER.USER.next = next_c; - field_combo.USER.USER.load_next = load_next_c; + field_combo.ID.ID.next = next_c; + field_combo.ID.ID.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.USER.USER.value <= 32'h0; - end else if(field_combo.USER.USER.load_next) begin - field_storage.USER.USER.value <= field_combo.USER.USER.next; + field_storage.ID.ID.value <= 32'h0; + end else if(field_combo.ID.ID.load_next) begin + field_storage.ID.ID.value <= field_combo.ID.ID.next; end end - assign hwif_out.USER.USER.value = field_storage.USER.USER.value; + assign hwif_out.ID.ID.value = field_storage.ID.ID.value; // Field: sha512_acc_csr.MODE.MODE always_comb begin automatic logic [1:0] next_c; automatic logic load_next_c; next_c = field_storage.MODE.MODE.value; load_next_c = '0; - if(decoded_reg_strb.MODE && decoded_req_is_wr && hwif_in.valid_user) begin // SW write + if(decoded_reg_strb.MODE && decoded_req_is_wr && hwif_in.valid_id) begin // SW write next_c = (field_storage.MODE.MODE.value & ~decoded_wr_biten[1:0]) | (decoded_wr_data[1:0] & decoded_wr_biten[1:0]); load_next_c = '1; end @@ -656,7 +656,7 @@ module sha512_acc_csr ( automatic logic load_next_c; next_c = field_storage.MODE.ENDIAN_TOGGLE.value; load_next_c = '0; - if(decoded_reg_strb.MODE && decoded_req_is_wr && hwif_in.valid_user) begin // SW write + if(decoded_reg_strb.MODE && decoded_req_is_wr && hwif_in.valid_id) begin // SW write next_c = (field_storage.MODE.ENDIAN_TOGGLE.value & ~decoded_wr_biten[2:2]) | (decoded_wr_data[2:2] & decoded_wr_biten[2:2]); load_next_c = '1; end @@ -677,7 +677,7 @@ module sha512_acc_csr ( automatic logic load_next_c; next_c = field_storage.START_ADDRESS.ADDR.value; load_next_c = '0; - if(decoded_reg_strb.START_ADDRESS && decoded_req_is_wr && hwif_in.valid_user) begin // SW write + if(decoded_reg_strb.START_ADDRESS && decoded_req_is_wr && hwif_in.valid_id) begin // SW write next_c = (field_storage.START_ADDRESS.ADDR.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); load_next_c = '1; end @@ -698,7 +698,7 @@ module sha512_acc_csr ( automatic logic load_next_c; next_c = field_storage.DLEN.LENGTH.value; load_next_c = '0; - if(decoded_reg_strb.DLEN && decoded_req_is_wr && hwif_in.valid_user) begin // SW write + if(decoded_reg_strb.DLEN && decoded_req_is_wr && hwif_in.valid_id) begin // SW write next_c = (field_storage.DLEN.LENGTH.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); load_next_c = '1; end @@ -719,7 +719,7 @@ module sha512_acc_csr ( automatic logic load_next_c; next_c = field_storage.DATAIN.DATAIN.value; load_next_c = '0; - if(decoded_reg_strb.DATAIN && decoded_req_is_wr && hwif_in.valid_user) begin // SW write + if(decoded_reg_strb.DATAIN && decoded_req_is_wr && hwif_in.valid_id) begin // SW write next_c = (field_storage.DATAIN.DATAIN.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); load_next_c = '1; end @@ -740,7 +740,7 @@ module sha512_acc_csr ( automatic logic load_next_c; next_c = field_storage.EXECUTE.EXECUTE.value; load_next_c = '0; - if(decoded_reg_strb.EXECUTE && decoded_req_is_wr && hwif_in.valid_user) begin // SW write + if(decoded_reg_strb.EXECUTE && decoded_req_is_wr && hwif_in.valid_id) begin // SW write next_c = (field_storage.EXECUTE.EXECUTE.value & ~decoded_wr_biten[0:0]) | (decoded_wr_data[0:0] & decoded_wr_biten[0:0]); load_next_c = '1; end else if(hwif_in.EXECUTE.EXECUTE.hwclr) begin // HW Clear @@ -1630,7 +1630,7 @@ module sha512_acc_csr ( logic [44-1:0][31:0] readback_array; assign readback_array[0][0:0] = (decoded_reg_strb.LOCK && !decoded_req_is_wr) ? field_storage.LOCK.LOCK.value : '0; assign readback_array[0][31:1] = '0; - assign readback_array[1][31:0] = (decoded_reg_strb.USER && !decoded_req_is_wr) ? field_storage.USER.USER.value : '0; + assign readback_array[1][31:0] = (decoded_reg_strb.ID && !decoded_req_is_wr) ? field_storage.ID.ID.value : '0; assign readback_array[2][1:0] = (decoded_reg_strb.MODE && !decoded_req_is_wr) ? field_storage.MODE.MODE.value : '0; assign readback_array[2][2:2] = (decoded_reg_strb.MODE && !decoded_req_is_wr) ? field_storage.MODE.ENDIAN_TOGGLE.value : '0; assign readback_array[2][31:3] = '0; diff --git a/src/soc_ifc/rtl/sha512_acc_csr_covergroups.svh b/src/soc_ifc/rtl/sha512_acc_csr_covergroups.svh index 68cab6060..acc164a78 100644 --- a/src/soc_ifc/rtl/sha512_acc_csr_covergroups.svh +++ b/src/soc_ifc/rtl/sha512_acc_csr_covergroups.svh @@ -35,8 +35,8 @@ endgroup - /*----------------------- SHA512_ACC_CSR__USER COVERGROUPS -----------------------*/ - covergroup sha512_acc_csr__USER_bit_cg with function sample(input bit reg_bit); + /*----------------------- SHA512_ACC_CSR__ID COVERGROUPS -----------------------*/ + covergroup sha512_acc_csr__ID_bit_cg with function sample(input bit reg_bit); option.per_instance = 1; reg_bit_cp : coverpoint reg_bit { bins value[2] = {0,1}; @@ -47,11 +47,11 @@ } endgroup - covergroup sha512_acc_csr__USER_fld_cg with function sample( - input bit [32-1:0] USER + covergroup sha512_acc_csr__ID_fld_cg with function sample( + input bit [32-1:0] ID ); option.per_instance = 1; - USER_cp : coverpoint USER; + ID_cp : coverpoint ID; endgroup diff --git a/src/soc_ifc/rtl/sha512_acc_csr_pkg.sv b/src/soc_ifc/rtl/sha512_acc_csr_pkg.sv index 71e0470dd..ae96e1e4e 100644 --- a/src/soc_ifc/rtl/sha512_acc_csr_pkg.sv +++ b/src/soc_ifc/rtl/sha512_acc_csr_pkg.sv @@ -8,11 +8,11 @@ package sha512_acc_csr_pkg; typedef struct packed{ logic [31:0] next; - } sha512_acc_csr__USER__USER__in_t; + } sha512_acc_csr__ID__ID__in_t; typedef struct packed{ - sha512_acc_csr__USER__USER__in_t USER; - } sha512_acc_csr__USER__in_t; + sha512_acc_csr__ID__ID__in_t ID; + } sha512_acc_csr__ID__in_t; typedef struct packed{ logic hwclr; @@ -82,11 +82,11 @@ package sha512_acc_csr_pkg; typedef struct packed{ logic lock_set; - logic valid_user; + logic valid_id; logic soc_req; logic cptra_rst_b; logic cptra_pwrgood; - sha512_acc_csr__USER__in_t USER; + sha512_acc_csr__ID__in_t ID; sha512_acc_csr__EXECUTE__in_t EXECUTE; sha512_acc_csr__STATUS__in_t STATUS; sha512_acc_csr__DIGEST__in_t [16-1:0]DIGEST; @@ -104,11 +104,11 @@ package sha512_acc_csr_pkg; typedef struct packed{ logic [31:0] value; - } sha512_acc_csr__USER__USER__out_t; + } sha512_acc_csr__ID__ID__out_t; typedef struct packed{ - sha512_acc_csr__USER__USER__out_t USER; - } sha512_acc_csr__USER__out_t; + sha512_acc_csr__ID__ID__out_t ID; + } sha512_acc_csr__ID__out_t; typedef struct packed{ logic [1:0] value; @@ -202,7 +202,7 @@ package sha512_acc_csr_pkg; typedef struct packed{ sha512_acc_csr__LOCK__out_t LOCK; - sha512_acc_csr__USER__out_t USER; + sha512_acc_csr__ID__out_t ID; sha512_acc_csr__MODE__out_t MODE; sha512_acc_csr__START_ADDRESS__out_t START_ADDRESS; sha512_acc_csr__DLEN__out_t DLEN; diff --git a/src/soc_ifc/rtl/sha512_acc_csr_properties.rdl b/src/soc_ifc/rtl/sha512_acc_csr_properties.rdl index 7ae68c502..c538e477f 100644 --- a/src/soc_ifc/rtl/sha512_acc_csr_properties.rdl +++ b/src/soc_ifc/rtl/sha512_acc_csr_properties.rdl @@ -23,7 +23,7 @@ default regwidth = 32; // reg property default accesswidth = 32; // reg property signal {} lock_set; -signal {} valid_user; +signal {} valid_id; //signal to indicate request is coming from soc side signal {} soc_req; diff --git a/src/soc_ifc/rtl/sha512_acc_csr_sample.svh b/src/soc_ifc/rtl/sha512_acc_csr_sample.svh index cb752d1e8..09e30dbc6 100644 --- a/src/soc_ifc/rtl/sha512_acc_csr_sample.svh +++ b/src/soc_ifc/rtl/sha512_acc_csr_sample.svh @@ -40,8 +40,8 @@ end endfunction - /*----------------------- SHA512_ACC_CSR__USER SAMPLE FUNCTIONS -----------------------*/ - function void sha512_acc_csr__USER::sample(uvm_reg_data_t data, + /*----------------------- SHA512_ACC_CSR__ID SAMPLE FUNCTIONS -----------------------*/ + function void sha512_acc_csr__ID::sample(uvm_reg_data_t data, uvm_reg_data_t byte_en, bit is_read, uvm_reg_map map); @@ -49,19 +49,19 @@ m_data = data; m_is_read = is_read; if (get_coverage(UVM_CVR_REG_BITS)) begin - foreach(USER_bit_cg[bt]) this.USER_bit_cg[bt].sample(data[0 + bt]); + foreach(ID_bit_cg[bt]) this.ID_bit_cg[bt].sample(data[0 + bt]); end if (get_coverage(UVM_CVR_FIELD_VALS)) begin - this.fld_cg.sample( data[31:0]/*USER*/ ); + this.fld_cg.sample( data[31:0]/*ID*/ ); end endfunction - function void sha512_acc_csr__USER::sample_values(); + function void sha512_acc_csr__ID::sample_values(); if (get_coverage(UVM_CVR_REG_BITS)) begin - foreach(USER_bit_cg[bt]) this.USER_bit_cg[bt].sample(USER.get_mirrored_value() >> bt); + foreach(ID_bit_cg[bt]) this.ID_bit_cg[bt].sample(ID.get_mirrored_value() >> bt); end if (get_coverage(UVM_CVR_FIELD_VALS)) begin - this.fld_cg.sample( USER.get_mirrored_value() ); + this.fld_cg.sample( ID.get_mirrored_value() ); end endfunction diff --git a/src/soc_ifc/rtl/sha512_acc_csr_uvm.sv b/src/soc_ifc/rtl/sha512_acc_csr_uvm.sv index d5f30e46e..49a28ec13 100644 --- a/src/soc_ifc/rtl/sha512_acc_csr_uvm.sv +++ b/src/soc_ifc/rtl/sha512_acc_csr_uvm.sv @@ -34,17 +34,17 @@ package sha512_acc_csr_uvm; endfunction : build endclass : sha512_acc_csr__LOCK - // Reg - sha512_acc_csr::USER - class sha512_acc_csr__USER extends uvm_reg; + // Reg - sha512_acc_csr::ID + class sha512_acc_csr__ID extends uvm_reg; protected uvm_reg_data_t m_current; protected uvm_reg_data_t m_data; protected bit m_is_read; - sha512_acc_csr__USER_bit_cg USER_bit_cg[32]; - sha512_acc_csr__USER_fld_cg fld_cg; - rand uvm_reg_field USER; + sha512_acc_csr__ID_bit_cg ID_bit_cg[32]; + sha512_acc_csr__ID_fld_cg fld_cg; + rand uvm_reg_field ID; - function new(string name = "sha512_acc_csr__USER"); + function new(string name = "sha512_acc_csr__ID"); super.new(name, 32, build_coverage(UVM_CVR_ALL)); endfunction : new extern virtual function void sample_values(); @@ -54,15 +54,15 @@ package sha512_acc_csr_uvm; uvm_reg_map map); virtual function void build(); - this.USER = new("USER"); - this.USER.configure(this, 32, 0, "RO", 1, 'h0, 1, 1, 0); + this.ID = new("ID"); + this.ID.configure(this, 32, 0, "RO", 1, 'h0, 1, 1, 0); if (has_coverage(UVM_CVR_REG_BITS)) begin - foreach(USER_bit_cg[bt]) USER_bit_cg[bt] = new(); + foreach(ID_bit_cg[bt]) ID_bit_cg[bt] = new(); end if (has_coverage(UVM_CVR_FIELD_VALS)) fld_cg = new(); endfunction : build - endclass : sha512_acc_csr__USER + endclass : sha512_acc_csr__ID // Reg - sha512_acc_csr::MODE class sha512_acc_csr__MODE extends uvm_reg; @@ -1063,7 +1063,7 @@ package sha512_acc_csr_uvm; // Addrmap - sha512_acc_csr class sha512_acc_csr extends uvm_reg_block; rand sha512_acc_csr__LOCK LOCK; - rand sha512_acc_csr__USER USER; + rand sha512_acc_csr__ID ID; rand sha512_acc_csr__MODE MODE; rand sha512_acc_csr__START_ADDRESS START_ADDRESS; rand sha512_acc_csr__DLEN DLEN; @@ -1085,11 +1085,11 @@ package sha512_acc_csr_uvm; this.LOCK.build(); this.default_map.add_reg(this.LOCK, 'h0); - this.USER = new("USER"); - this.USER.configure(this); + this.ID = new("ID"); + this.ID.configure(this); - this.USER.build(); - this.default_map.add_reg(this.USER, 'h4); + this.ID.build(); + this.default_map.add_reg(this.ID, 'h4); this.MODE = new("MODE"); this.MODE.configure(this); diff --git a/src/soc_ifc/rtl/sha512_acc_external_csr.rdl b/src/soc_ifc/rtl/sha512_acc_external_csr.rdl index 4f273224a..f0896f8e6 100644 --- a/src/soc_ifc/rtl/sha512_acc_external_csr.rdl +++ b/src/soc_ifc/rtl/sha512_acc_external_csr.rdl @@ -19,16 +19,16 @@ reg { desc="SHA lock register for SHA access, reading 0 will set the lock, Write 1 to clear the lock [br]Caliptra Access: RW [br]SOC Access: RW"; - field {rset; woclr; sw=rw; hw=r; swwe=valid_user; swmod=true;} LOCK=1; + field {rset; woclr; sw=rw; hw=r; swwe=valid_id; swmod=true;} LOCK=1; } LOCK; reg { - name="SHA Accelerator User"; - desc="Stores the user that locked the SHA + name="SHA Accelerator ID"; + desc="Stores the AXI ID that locked the SHA [br]Caliptra Access: RO [br]SOC Access: RO"; - field {sw=r; hw=rw; we=lock_set;} USER[32]=0; -} USER; + field {sw=r; hw=rw; we=lock_set;} ID[32]=0; +} ID; reg { name="SHA Accelerator Mode"; @@ -53,7 +53,7 @@ reg { desc = "SHA is in SHA512, mailbox mode"; }; }; - sw=rw; hw=r; swwe=valid_user; swmod=true; encode = sha_cmd_e;} MODE[2]=0; + sw=rw; hw=r; swwe=valid_id; swmod=true; encode = sha_cmd_e;} MODE[2]=0; field { name="Endianness Toggle for SHA in mailbox mode"; desc="Default behavior assumes that data in mailbox is little endian, @@ -61,7 +61,7 @@ reg { When set to 1, data from the mailbox will be loaded into SHA as-is. [br]Caliptra Access: RW [br]SOC Access: RW"; - sw=rw; hw=r; swwe=valid_user;} ENDIAN_TOGGLE=0; + sw=rw; hw=r; swwe=valid_id;} ENDIAN_TOGGLE=0; } MODE; reg { @@ -70,7 +70,7 @@ reg { Start Address must be dword aligned. [br]Caliptra Access: RW [br]SOC Access: RW"; - field {sw=rw; hw=r; swwe=valid_user;} ADDR[32]=0; + field {sw=rw; hw=r; swwe=valid_id;} ADDR[32]=0; } START_ADDRESS; reg { @@ -78,7 +78,7 @@ reg { desc="The length of data to be processed in bytes. [br]Caliptra Access: RW [br]SOC Access: RW"; - field {sw=rw; hw=r; swwe=valid_user;} LENGTH[32]=0; + field {sw=rw; hw=r; swwe=valid_id;} LENGTH[32]=0; } DLEN; reg { @@ -86,7 +86,7 @@ reg { desc="Data in register for SHA Streaming function [br]Caliptra Access: RW [br]SOC Access: RW"; - field {sw=rw; hw=na; swwe=valid_user; swmod=true;} DATAIN[32]=0; + field {sw=rw; hw=na; swwe=valid_id; swmod=true;} DATAIN[32]=0; } DATAIN; reg { @@ -95,7 +95,7 @@ reg { For the Mailbox SHA Function, indicates that the SHA can begin execution. [br]Caliptra Access: RW [br]SOC Access: RW"; - field {sw=rw; hw=r; hwclr; swwe=valid_user;} EXECUTE=0; + field {sw=rw; hw=r; hwclr; swwe=valid_id;} EXECUTE=0; } EXECUTE; reg { diff --git a/src/soc_ifc/rtl/sha512_acc_top.sv b/src/soc_ifc/rtl/sha512_acc_top.sv index 6445b4f7b..c22816b90 100644 --- a/src/soc_ifc/rtl/sha512_acc_top.sv +++ b/src/soc_ifc/rtl/sha512_acc_top.sv @@ -24,7 +24,7 @@ module sha512_acc_top input logic rst_b, input logic cptra_pwrgood, - // Incoming request from ahb or apb + // Incoming request from ahb or axi input logic req_dv, output logic req_hold, input soc_ifc_req_t req_data, @@ -164,19 +164,19 @@ always_comb core_digest_valid_q = core_digest_valid & ~(init_reg | next_reg); end // reg_update //SHA API - //Acquire the lock and store the user - always_comb hwif_in.USER.USER.next = req_data.user; + //Acquire the lock and store the id + always_comb hwif_in.ID.ID.next = req_data.id; //Detect the lock getting set when swmod is asserted and lock is 0 and it's not a write //Since this lock is cleared by writing, the swmod asserts on write attempts too, but we only want to set lock on read when value is 0 always_comb lock_set = ~hwif_out.LOCK.LOCK.value & hwif_out.LOCK.LOCK.swmod & ~req_data.write; always_comb hwif_in.lock_set = lock_set; - //check the requesting user: + //check the requesting id: //don't update SHA registers if lock hasn't been acquired //if uc has the lock, check that this request is from uc - //if soc has the lock, check that this request is from soc and user attributes match - always_comb hwif_in.valid_user = hwif_out.LOCK.LOCK.value & ((~soc_has_lock & ~req_data.soc_req) | - (soc_has_lock & req_data.soc_req & (req_data.user == hwif_out.USER.USER.value))); + //if soc has the lock, check that this request is from soc and id attributes match + always_comb hwif_in.valid_id = hwif_out.LOCK.LOCK.value & ((~soc_has_lock & ~req_data.soc_req) | + (soc_has_lock & req_data.soc_req & (req_data.id == hwif_out.ID.ID.value))); always_comb hwif_in.soc_req = req_data.soc_req; always_comb hwif_in.STATUS.SOC_HAS_LOCK.next = soc_has_lock; @@ -187,7 +187,7 @@ always_comb core_digest_valid_q = core_digest_valid & ~(init_reg | next_reg); always_comb streaming_mode = ~mode[1] | soc_has_lock; always_comb mailbox_mode = mode[1] & ~soc_has_lock; //Detect writes to datain register - always_comb datain_write = hwif_in.valid_user & hwif_out.DATAIN.DATAIN.swmod; + always_comb datain_write = hwif_in.valid_id & hwif_out.DATAIN.DATAIN.swmod; always_comb execute_set = hwif_out.EXECUTE.EXECUTE.value; //When we reach the end of a block we indicate block full diff --git a/src/soc_ifc/rtl/soc_ifc_arb.sv b/src/soc_ifc/rtl/soc_ifc_arb.sv index 8660009a9..e9ca24f98 100644 --- a/src/soc_ifc/rtl/soc_ifc_arb.sv +++ b/src/soc_ifc/rtl/soc_ifc_arb.sv @@ -15,13 +15,13 @@ module soc_ifc_arb import soc_ifc_pkg::*; #( - parameter APB_USER_WIDTH = 32 + parameter AXI_ID_WIDTH = 32 )( input logic clk, input logic rst_b, - input logic [4:0][APB_USER_WIDTH-1:0] valid_mbox_users, - input logic valid_fuse_user, + input logic [4:0][AXI_ID_WIDTH-1:0] valid_mbox_ids, + input logic valid_fuse_id, //UC inf input logic uc_req_dv, output logic uc_req_hold, @@ -91,7 +91,7 @@ logic uc_mbox_req_ip; logic uc_reg_req_ip; logic uc_sha_req_ip; -//filter mailbox requests by pauser +//filter mailbox requests by id logic valid_mbox_req; @@ -137,24 +137,24 @@ always_comb uc_mbox_dir_req = (uc_req_dv & (uc_req_data.addr inside {[MBOX_DIR_S //SoC requests to mailbox always_comb soc_mbox_req = (valid_mbox_req & (soc_req_data.addr inside {[MBOX_REG_START_ADDR:MBOX_REG_END_ADDR]})); //Requests to arch/fuse register block -//Ensure that requests to fuse block match the appropriate user value +//Ensure that requests to fuse block match the appropriate id value always_comb uc_reg_req = (uc_req_dv & (uc_req_data.addr inside {[SOC_IFC_REG_START_ADDR:SOC_IFC_REG_END_ADDR]})); always_comb soc_reg_req = (soc_req_dv & (soc_req_data.addr inside {[SOC_IFC_REG_START_ADDR:SOC_IFC_REG_END_ADDR]}) & - (~(soc_req_data.addr inside {[SOC_IFC_FUSE_START_ADDR:SOC_IFC_FUSE_END_ADDR]}) | valid_fuse_user)); + (~(soc_req_data.addr inside {[SOC_IFC_FUSE_START_ADDR:SOC_IFC_FUSE_END_ADDR]}) | valid_fuse_id)); //Requests to SHA always_comb uc_sha_req = (uc_req_dv & (uc_req_data.addr inside {[SHA_REG_START_ADDR:SHA_REG_END_ADDR]})); always_comb soc_sha_req = (soc_req_dv & (soc_req_data.addr inside {[SHA_REG_START_ADDR:SHA_REG_END_ADDR]})); -//Check if SoC request is coming from a valid user -//There are 5 valid pauser registers, check if user attribute matches any of them -//Check if user matches Default Valid User parameter - this user value is always valid +//Check if SoC request is coming from a valid id +//There are 5 valid id registers, check if id attribute matches any of them +//Check if id matches Default Valid id parameter - this id value is always valid always_comb begin valid_mbox_req = '0; for (int i=0; i < 5; i++) begin - valid_mbox_req |= soc_req_dv & (soc_req_data.user == valid_mbox_users[i]); + valid_mbox_req |= soc_req_dv & (soc_req_data.id == valid_mbox_ids[i]); end - valid_mbox_req |= soc_req_dv & (soc_req_data.user == CPTRA_DEF_MBOX_VALID_PAUSER); + valid_mbox_req |= soc_req_dv & (soc_req_data.id == CPTRA_DEF_MBOX_VALID_AXI_ID); end //check for collisions diff --git a/src/soc_ifc/rtl/soc_ifc_external_reg.rdl b/src/soc_ifc/rtl/soc_ifc_external_reg.rdl index 048bcb6c4..7bcbb7dad 100644 --- a/src/soc_ifc/rtl/soc_ifc_external_reg.rdl +++ b/src/soc_ifc/rtl/soc_ifc_external_reg.rdl @@ -165,46 +165,46 @@ reg { } CPTRA_SECURITY_STATE; reg { - name = "Valid User Registers"; - desc = "Valid PAUSER attributes for requests from SoC APB Interface. Only valid once LOCK is set. + name = "Valid ID Registers"; + desc = "Valid AXI ID attributes for requests from SoC AXI Interface. Only valid once LOCK is set. [br]Caliptra Access: RW [br]SOC Access: RW - Read-Only once locked by PAUSER_LOCK."; - field {sw=rw; hw=r; swwel;resetsignal = cptra_rst_b;} PAUSER[32]=0xFFFF_FFFF; - } CPTRA_MBOX_VALID_PAUSER[5]; + Read-Only once locked by AXI_ID_LOCK."; + field {sw=rw; hw=r; swwel;resetsignal = cptra_rst_b;} AXI_ID[32]=0xFFFF_FFFF; + } CPTRA_MBOX_VALID_AXI_ID[5]; //FIXME: Should LOCK be W1 here? reg { - name = "Valid User Register Lock"; - desc = "Valid PAUSER attributes for requests from SoC APB Interface. - [br]Each bit corresponds to locking the associated MBOX_VALID_PAUSER register. - [br]Associated MBOX_VALID_PAUSER register is only valid once locked by this bit. + name = "Valid ID Register Lock"; + desc = "Valid AXI_ID attributes for requests from SoC AXI Interface. + [br]Each bit corresponds to locking the associated MBOX_VALID_AXI_ID register. + [br]Associated MBOX_VALID_AXI_ID register is only valid once locked by this bit. [br]Caliptra Access: RW [br]SOC Access: RW [br]Read-Only once locked."; field {sw=rw; hw=r; swwel; resetsignal = cptra_rst_b;} LOCK=0; - } CPTRA_MBOX_PAUSER_LOCK[5]; + } CPTRA_MBOX_AXI_ID_LOCK[5]; reg { - name = "Valid User for TRNG"; - desc = "Valid PAUSER attributes for TRNG on SoC APB Interface. Only valid once LOCK is set. + name = "Valid ID for TRNG"; + desc = "Valid AXI ID attributes for TRNG on SoC AXI Interface. Only valid once LOCK is set. [br]Caliptra Access: RW [br]SOC Access: RW - [br]Read-Only once locked by TRNG_PAUSER_LOCK."; - field {sw=rw; hw=r; swwel; resetsignal = cptra_rst_b;} PAUSER[32]=0xFFFF_FFFF; - } CPTRA_TRNG_VALID_PAUSER; + [br]Read-Only once locked by TRNG_AXI_ID_LOCK."; + field {sw=rw; hw=r; swwel; resetsignal = cptra_rst_b;} AXI_ID[32]=0xFFFF_FFFF; + } CPTRA_TRNG_VALID_AXI_ID; reg { - name = "Valid User for TRNG PAUSER Lock"; - desc = "Valid PAUSER attributes for requests from SoC APB Interface. - [br]Each bit corresponds to locking the associated TRNG_VALID_PAUSER register. - [br]Associated TRNG_VALID_PAUSER register is only valid once locked by this bit. + name = "Valid ID for TRNG AXI_ID Lock"; + desc = "Valid AXI ID attributes for requests from SoC AXI Interface. + [br]Each bit corresponds to locking the associated TRNG_VALID_AXI_ID register. + [br]Associated TRNG_VALID_AXI_ID register is only valid once locked by this bit. [br]Caliptra FW RW access for survivability but cannot unlock once locked [br]Caliptra Access: RW [br]SOC Access: RW [br]Read-Only once locked."; field {sw=rw; hw=r; swwel; resetsignal=cptra_rst_b;} LOCK=0; - } CPTRA_TRNG_PAUSER_LOCK; + } CPTRA_TRNG_AXI_ID_LOCK; reg { name = "TRNG Data"; @@ -397,25 +397,25 @@ reg { } CPTRA_WDT_STATUS; reg { - name = "Valid User for FUSE"; - desc = "Valid PAUSER attributes for FUSE on SoC APB Interface. Only valid once LOCK is set. + name = "Valid ID for FUSE"; + desc = "Valid AXI ID attributes for FUSE on SoC AXI Interface. Only valid once LOCK is set. [br]Caliptra Access: RW [br]SOC Access: RW - [br]Read-Only once locked by FUSE_PAUSER_LOCK."; - field {sw=rw; hw=r; swwel; resetsignal = cptra_pwrgood;} PAUSER[32]=0xFFFF_FFFF; - } CPTRA_FUSE_VALID_PAUSER; + [br]Read-Only once locked by FUSE_AXI_ID_LOCK."; + field {sw=rw; hw=r; swwel; resetsignal = cptra_pwrgood;} AXI_ID[32]=0xFFFF_FFFF; + } CPTRA_FUSE_VALID_AXI_ID; reg { - name = "Valid User for FUSE PAUSER Lock"; - desc = "Valid PAUSER attributes for requests from SoC APB Interface. - [br]Each bit corresponds to locking the associated FUSE_VALID_PAUSER register. - [br]Associated FUSE_VALID_PAUSER register is only valid once locked by this bit. + name = "Valid ID for FUSE AXI_ID Lock"; + desc = "Valid AXI_ID attributes for requests from SoC AXI Interface. + [br]Each bit corresponds to locking the associated FUSE_VALID_AXI_ID register. + [br]Associated FUSE_VALID_AXI_ID register is only valid once locked by this bit. [br]Caliptra FW RW access for survivability but cannot unlock once locked [br]Caliptra Access: RW [br]SOC Access: RW [br]Read-Only once locked."; field {sw=rw; hw=r; swwel; resetsignal=cptra_pwrgood;} LOCK=0; - } CPTRA_FUSE_PAUSER_LOCK; + } CPTRA_FUSE_AXI_ID_LOCK; reg { name = "Caliptra WDT1 Config"; diff --git a/src/soc_ifc/rtl/soc_ifc_pkg.sv b/src/soc_ifc/rtl/soc_ifc_pkg.sv index 8934bdb55..1d8a16312 100644 --- a/src/soc_ifc/rtl/soc_ifc_pkg.sv +++ b/src/soc_ifc/rtl/soc_ifc_pkg.sv @@ -22,6 +22,7 @@ package soc_ifc_pkg; parameter SOC_IFC_ADDR_W = 18; parameter SOC_IFC_DATA_W = 32; parameter SOC_IFC_USER_W = 32; + parameter SOC_IFC_ID_W = 5; parameter MBOX_SIZE_KB = 128; parameter MBOX_SIZE_BYTES = MBOX_SIZE_KB * 1024; @@ -49,14 +50,14 @@ package soc_ifc_pkg; parameter SOC_IFC_FUSE_START_ADDR = SOC_IFC_REG_START_ADDR + 32'h0000_0200; parameter SOC_IFC_FUSE_END_ADDR = SOC_IFC_REG_START_ADDR + 32'h0000_05FF; - //Valid PAUSER - //Lock the PAUSER values from integration time - parameter [4:0] CPTRA_SET_MBOX_PAUSER_INTEG = { 1'b0, 1'b0, 1'b0, 1'b0, 1'b0}; - parameter [4:0][31:0] CPTRA_MBOX_VALID_PAUSER = {32'h4444_4444, 32'h3333_3333, 32'h2222_2222, 32'h1111_1111, 32'h0000_0000}; - parameter [31:0] CPTRA_DEF_MBOX_VALID_PAUSER = 32'hFFFF_FFFF; + //Valid AXI_ID + //Lock the AXI_ID values from integration time + parameter [4:0] CPTRA_SET_MBOX_AXI_ID_INTEG = { 1'b0, 1'b0, 1'b0, 1'b0, 1'b0}; + parameter [4:0][31:0] CPTRA_MBOX_VALID_AXI_ID = {32'h4444_4444, 32'h3333_3333, 32'h2222_2222, 32'h1111_1111, 32'h0000_0000}; + parameter [31:0] CPTRA_DEF_MBOX_VALID_AXI_ID = 32'hFFFF_FFFF; - parameter CPTRA_SET_FUSE_PAUSER_INTEG = 1'b0; - parameter [31:0] CPTRA_FUSE_VALID_PAUSER = 32'h0000_0000; + parameter CPTRA_SET_FUSE_AXI_ID_INTEG = 1'b0; + parameter [31:0] CPTRA_FUSE_VALID_AXI_ID = 32'h0000_0000; //DMI Register encodings //Read only registers @@ -120,7 +121,8 @@ package soc_ifc_pkg; typedef struct packed { logic [SOC_IFC_ADDR_W-1:0] addr; logic [SOC_IFC_DATA_W-1:0] wdata; - logic [SOC_IFC_USER_W-1:0] user; +// logic [SOC_IFC_USER_W-1:0] user; + logic [SOC_IFC_ID_W -1:0] id; logic write; logic soc_req; } soc_ifc_req_t; diff --git a/src/soc_ifc/rtl/soc_ifc_reg.sv b/src/soc_ifc/rtl/soc_ifc_reg.sv index 60e85ee1f..353d469a6 100644 --- a/src/soc_ifc/rtl/soc_ifc_reg.sv +++ b/src/soc_ifc/rtl/soc_ifc_reg.sv @@ -77,10 +77,10 @@ module soc_ifc_reg ( logic CPTRA_FLOW_STATUS; logic CPTRA_RESET_REASON; logic CPTRA_SECURITY_STATE; - logic [5-1:0]CPTRA_MBOX_VALID_PAUSER; - logic [5-1:0]CPTRA_MBOX_PAUSER_LOCK; - logic CPTRA_TRNG_VALID_PAUSER; - logic CPTRA_TRNG_PAUSER_LOCK; + logic [5-1:0]CPTRA_MBOX_VALID_AXI_ID; + logic [5-1:0]CPTRA_MBOX_AXI_ID_LOCK; + logic CPTRA_TRNG_VALID_AXI_ID; + logic CPTRA_TRNG_AXI_ID_LOCK; logic [12-1:0]CPTRA_TRNG_DATA; logic CPTRA_TRNG_CTRL; logic CPTRA_TRNG_STATUS; @@ -101,8 +101,8 @@ module soc_ifc_reg ( logic CPTRA_WDT_TIMER2_CTRL; logic [2-1:0]CPTRA_WDT_TIMER2_TIMEOUT_PERIOD; logic CPTRA_WDT_STATUS; - logic CPTRA_FUSE_VALID_PAUSER; - logic CPTRA_FUSE_PAUSER_LOCK; + logic CPTRA_FUSE_VALID_AXI_ID; + logic CPTRA_FUSE_AXI_ID_LOCK; logic [2-1:0]CPTRA_WDT_CFG; logic CPTRA_iTRNG_ENTROPY_CONFIG_0; logic CPTRA_iTRNG_ENTROPY_CONFIG_1; @@ -195,13 +195,13 @@ module soc_ifc_reg ( decoded_reg_strb.CPTRA_RESET_REASON = cpuif_req_masked & (cpuif_addr == 12'h40); decoded_reg_strb.CPTRA_SECURITY_STATE = cpuif_req_masked & (cpuif_addr == 12'h44); for(int i0=0; i0<5; i0++) begin - decoded_reg_strb.CPTRA_MBOX_VALID_PAUSER[i0] = cpuif_req_masked & (cpuif_addr == 12'h48 + i0*12'h4); + decoded_reg_strb.CPTRA_MBOX_VALID_AXI_ID[i0] = cpuif_req_masked & (cpuif_addr == 12'h48 + i0*12'h4); end for(int i0=0; i0<5; i0++) begin - decoded_reg_strb.CPTRA_MBOX_PAUSER_LOCK[i0] = cpuif_req_masked & (cpuif_addr == 12'h5c + i0*12'h4); + decoded_reg_strb.CPTRA_MBOX_AXI_ID_LOCK[i0] = cpuif_req_masked & (cpuif_addr == 12'h5c + i0*12'h4); end - decoded_reg_strb.CPTRA_TRNG_VALID_PAUSER = cpuif_req_masked & (cpuif_addr == 12'h70); - decoded_reg_strb.CPTRA_TRNG_PAUSER_LOCK = cpuif_req_masked & (cpuif_addr == 12'h74); + decoded_reg_strb.CPTRA_TRNG_VALID_AXI_ID = cpuif_req_masked & (cpuif_addr == 12'h70); + decoded_reg_strb.CPTRA_TRNG_AXI_ID_LOCK = cpuif_req_masked & (cpuif_addr == 12'h74); for(int i0=0; i0<12; i0++) begin decoded_reg_strb.CPTRA_TRNG_DATA[i0] = cpuif_req_masked & (cpuif_addr == 12'h78 + i0*12'h4); end @@ -234,8 +234,8 @@ module soc_ifc_reg ( decoded_reg_strb.CPTRA_WDT_TIMER2_TIMEOUT_PERIOD[i0] = cpuif_req_masked & (cpuif_addr == 12'hfc + i0*12'h4); end decoded_reg_strb.CPTRA_WDT_STATUS = cpuif_req_masked & (cpuif_addr == 12'h104); - decoded_reg_strb.CPTRA_FUSE_VALID_PAUSER = cpuif_req_masked & (cpuif_addr == 12'h108); - decoded_reg_strb.CPTRA_FUSE_PAUSER_LOCK = cpuif_req_masked & (cpuif_addr == 12'h10c); + decoded_reg_strb.CPTRA_FUSE_VALID_AXI_ID = cpuif_req_masked & (cpuif_addr == 12'h108); + decoded_reg_strb.CPTRA_FUSE_AXI_ID_LOCK = cpuif_req_masked & (cpuif_addr == 12'h10c); for(int i0=0; i0<2; i0++) begin decoded_reg_strb.CPTRA_WDT_CFG[i0] = cpuif_req_masked & (cpuif_addr == 12'h110 + i0*12'h4); end @@ -440,26 +440,26 @@ module soc_ifc_reg ( struct packed{ logic [31:0] next; logic load_next; - } PAUSER; - } [5-1:0]CPTRA_MBOX_VALID_PAUSER; + } AXI_ID; + } [5-1:0]CPTRA_MBOX_VALID_AXI_ID; struct packed{ struct packed{ logic next; logic load_next; } LOCK; - } [5-1:0]CPTRA_MBOX_PAUSER_LOCK; + } [5-1:0]CPTRA_MBOX_AXI_ID_LOCK; struct packed{ struct packed{ logic [31:0] next; logic load_next; - } PAUSER; - } CPTRA_TRNG_VALID_PAUSER; + } AXI_ID; + } CPTRA_TRNG_VALID_AXI_ID; struct packed{ struct packed{ logic next; logic load_next; } LOCK; - } CPTRA_TRNG_PAUSER_LOCK; + } CPTRA_TRNG_AXI_ID_LOCK; struct packed{ struct packed{ logic [31:0] next; @@ -580,14 +580,14 @@ module soc_ifc_reg ( struct packed{ logic [31:0] next; logic load_next; - } PAUSER; - } CPTRA_FUSE_VALID_PAUSER; + } AXI_ID; + } CPTRA_FUSE_VALID_AXI_ID; struct packed{ struct packed{ logic next; logic load_next; } LOCK; - } CPTRA_FUSE_PAUSER_LOCK; + } CPTRA_FUSE_AXI_ID_LOCK; struct packed{ struct packed{ logic [31:0] next; @@ -1317,23 +1317,23 @@ module soc_ifc_reg ( struct packed{ struct packed{ logic [31:0] value; - } PAUSER; - } [5-1:0]CPTRA_MBOX_VALID_PAUSER; + } AXI_ID; + } [5-1:0]CPTRA_MBOX_VALID_AXI_ID; struct packed{ struct packed{ logic value; } LOCK; - } [5-1:0]CPTRA_MBOX_PAUSER_LOCK; + } [5-1:0]CPTRA_MBOX_AXI_ID_LOCK; struct packed{ struct packed{ logic [31:0] value; - } PAUSER; - } CPTRA_TRNG_VALID_PAUSER; + } AXI_ID; + } CPTRA_TRNG_VALID_AXI_ID; struct packed{ struct packed{ logic value; } LOCK; - } CPTRA_TRNG_PAUSER_LOCK; + } CPTRA_TRNG_AXI_ID_LOCK; struct packed{ struct packed{ logic [31:0] value; @@ -1433,13 +1433,13 @@ module soc_ifc_reg ( struct packed{ struct packed{ logic [31:0] value; - } PAUSER; - } CPTRA_FUSE_VALID_PAUSER; + } AXI_ID; + } CPTRA_FUSE_VALID_AXI_ID; struct packed{ struct packed{ logic value; } LOCK; - } CPTRA_FUSE_PAUSER_LOCK; + } CPTRA_FUSE_AXI_ID_LOCK; struct packed{ struct packed{ logic [31:0] value; @@ -2365,93 +2365,93 @@ module soc_ifc_reg ( end assign hwif_out.CPTRA_RESET_REASON.WARM_RESET.value = field_storage.CPTRA_RESET_REASON.WARM_RESET.value; for(genvar i0=0; i0<5; i0++) begin - // Field: soc_ifc_reg.CPTRA_MBOX_VALID_PAUSER[].PAUSER + // Field: soc_ifc_reg.CPTRA_MBOX_VALID_AXI_ID[].AXI_ID always_comb begin automatic logic [31:0] next_c; automatic logic load_next_c; - next_c = field_storage.CPTRA_MBOX_VALID_PAUSER[i0].PAUSER.value; + next_c = field_storage.CPTRA_MBOX_VALID_AXI_ID[i0].AXI_ID.value; load_next_c = '0; - if(decoded_reg_strb.CPTRA_MBOX_VALID_PAUSER[i0] && decoded_req_is_wr && !(hwif_in.CPTRA_MBOX_VALID_PAUSER[i0].PAUSER.swwel)) begin // SW write - next_c = (field_storage.CPTRA_MBOX_VALID_PAUSER[i0].PAUSER.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); + if(decoded_reg_strb.CPTRA_MBOX_VALID_AXI_ID[i0] && decoded_req_is_wr && !(hwif_in.CPTRA_MBOX_VALID_AXI_ID[i0].AXI_ID.swwel)) begin // SW write + next_c = (field_storage.CPTRA_MBOX_VALID_AXI_ID[i0].AXI_ID.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); load_next_c = '1; end - field_combo.CPTRA_MBOX_VALID_PAUSER[i0].PAUSER.next = next_c; - field_combo.CPTRA_MBOX_VALID_PAUSER[i0].PAUSER.load_next = load_next_c; + field_combo.CPTRA_MBOX_VALID_AXI_ID[i0].AXI_ID.next = next_c; + field_combo.CPTRA_MBOX_VALID_AXI_ID[i0].AXI_ID.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.CPTRA_MBOX_VALID_PAUSER[i0].PAUSER.value <= 32'hffffffff; - end else if(field_combo.CPTRA_MBOX_VALID_PAUSER[i0].PAUSER.load_next) begin - field_storage.CPTRA_MBOX_VALID_PAUSER[i0].PAUSER.value <= field_combo.CPTRA_MBOX_VALID_PAUSER[i0].PAUSER.next; + field_storage.CPTRA_MBOX_VALID_AXI_ID[i0].AXI_ID.value <= 32'hffffffff; + end else if(field_combo.CPTRA_MBOX_VALID_AXI_ID[i0].AXI_ID.load_next) begin + field_storage.CPTRA_MBOX_VALID_AXI_ID[i0].AXI_ID.value <= field_combo.CPTRA_MBOX_VALID_AXI_ID[i0].AXI_ID.next; end end - assign hwif_out.CPTRA_MBOX_VALID_PAUSER[i0].PAUSER.value = field_storage.CPTRA_MBOX_VALID_PAUSER[i0].PAUSER.value; + assign hwif_out.CPTRA_MBOX_VALID_AXI_ID[i0].AXI_ID.value = field_storage.CPTRA_MBOX_VALID_AXI_ID[i0].AXI_ID.value; end for(genvar i0=0; i0<5; i0++) begin - // Field: soc_ifc_reg.CPTRA_MBOX_PAUSER_LOCK[].LOCK + // Field: soc_ifc_reg.CPTRA_MBOX_AXI_ID_LOCK[].LOCK always_comb begin automatic logic [0:0] next_c; automatic logic load_next_c; - next_c = field_storage.CPTRA_MBOX_PAUSER_LOCK[i0].LOCK.value; + next_c = field_storage.CPTRA_MBOX_AXI_ID_LOCK[i0].LOCK.value; load_next_c = '0; - if(decoded_reg_strb.CPTRA_MBOX_PAUSER_LOCK[i0] && decoded_req_is_wr && !(hwif_in.CPTRA_MBOX_PAUSER_LOCK[i0].LOCK.swwel)) begin // SW write - next_c = (field_storage.CPTRA_MBOX_PAUSER_LOCK[i0].LOCK.value & ~decoded_wr_biten[0:0]) | (decoded_wr_data[0:0] & decoded_wr_biten[0:0]); + if(decoded_reg_strb.CPTRA_MBOX_AXI_ID_LOCK[i0] && decoded_req_is_wr && !(hwif_in.CPTRA_MBOX_AXI_ID_LOCK[i0].LOCK.swwel)) begin // SW write + next_c = (field_storage.CPTRA_MBOX_AXI_ID_LOCK[i0].LOCK.value & ~decoded_wr_biten[0:0]) | (decoded_wr_data[0:0] & decoded_wr_biten[0:0]); load_next_c = '1; end - field_combo.CPTRA_MBOX_PAUSER_LOCK[i0].LOCK.next = next_c; - field_combo.CPTRA_MBOX_PAUSER_LOCK[i0].LOCK.load_next = load_next_c; + field_combo.CPTRA_MBOX_AXI_ID_LOCK[i0].LOCK.next = next_c; + field_combo.CPTRA_MBOX_AXI_ID_LOCK[i0].LOCK.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.CPTRA_MBOX_PAUSER_LOCK[i0].LOCK.value <= 1'h0; - end else if(field_combo.CPTRA_MBOX_PAUSER_LOCK[i0].LOCK.load_next) begin - field_storage.CPTRA_MBOX_PAUSER_LOCK[i0].LOCK.value <= field_combo.CPTRA_MBOX_PAUSER_LOCK[i0].LOCK.next; + field_storage.CPTRA_MBOX_AXI_ID_LOCK[i0].LOCK.value <= 1'h0; + end else if(field_combo.CPTRA_MBOX_AXI_ID_LOCK[i0].LOCK.load_next) begin + field_storage.CPTRA_MBOX_AXI_ID_LOCK[i0].LOCK.value <= field_combo.CPTRA_MBOX_AXI_ID_LOCK[i0].LOCK.next; end end - assign hwif_out.CPTRA_MBOX_PAUSER_LOCK[i0].LOCK.value = field_storage.CPTRA_MBOX_PAUSER_LOCK[i0].LOCK.value; + assign hwif_out.CPTRA_MBOX_AXI_ID_LOCK[i0].LOCK.value = field_storage.CPTRA_MBOX_AXI_ID_LOCK[i0].LOCK.value; end - // Field: soc_ifc_reg.CPTRA_TRNG_VALID_PAUSER.PAUSER + // Field: soc_ifc_reg.CPTRA_TRNG_VALID_AXI_ID.AXI_ID always_comb begin automatic logic [31:0] next_c; automatic logic load_next_c; - next_c = field_storage.CPTRA_TRNG_VALID_PAUSER.PAUSER.value; + next_c = field_storage.CPTRA_TRNG_VALID_AXI_ID.AXI_ID.value; load_next_c = '0; - if(decoded_reg_strb.CPTRA_TRNG_VALID_PAUSER && decoded_req_is_wr && !(hwif_in.CPTRA_TRNG_VALID_PAUSER.PAUSER.swwel)) begin // SW write - next_c = (field_storage.CPTRA_TRNG_VALID_PAUSER.PAUSER.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); + if(decoded_reg_strb.CPTRA_TRNG_VALID_AXI_ID && decoded_req_is_wr && !(hwif_in.CPTRA_TRNG_VALID_AXI_ID.AXI_ID.swwel)) begin // SW write + next_c = (field_storage.CPTRA_TRNG_VALID_AXI_ID.AXI_ID.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); load_next_c = '1; end - field_combo.CPTRA_TRNG_VALID_PAUSER.PAUSER.next = next_c; - field_combo.CPTRA_TRNG_VALID_PAUSER.PAUSER.load_next = load_next_c; + field_combo.CPTRA_TRNG_VALID_AXI_ID.AXI_ID.next = next_c; + field_combo.CPTRA_TRNG_VALID_AXI_ID.AXI_ID.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.CPTRA_TRNG_VALID_PAUSER.PAUSER.value <= 32'hffffffff; - end else if(field_combo.CPTRA_TRNG_VALID_PAUSER.PAUSER.load_next) begin - field_storage.CPTRA_TRNG_VALID_PAUSER.PAUSER.value <= field_combo.CPTRA_TRNG_VALID_PAUSER.PAUSER.next; + field_storage.CPTRA_TRNG_VALID_AXI_ID.AXI_ID.value <= 32'hffffffff; + end else if(field_combo.CPTRA_TRNG_VALID_AXI_ID.AXI_ID.load_next) begin + field_storage.CPTRA_TRNG_VALID_AXI_ID.AXI_ID.value <= field_combo.CPTRA_TRNG_VALID_AXI_ID.AXI_ID.next; end end - assign hwif_out.CPTRA_TRNG_VALID_PAUSER.PAUSER.value = field_storage.CPTRA_TRNG_VALID_PAUSER.PAUSER.value; - // Field: soc_ifc_reg.CPTRA_TRNG_PAUSER_LOCK.LOCK + assign hwif_out.CPTRA_TRNG_VALID_AXI_ID.AXI_ID.value = field_storage.CPTRA_TRNG_VALID_AXI_ID.AXI_ID.value; + // Field: soc_ifc_reg.CPTRA_TRNG_AXI_ID_LOCK.LOCK always_comb begin automatic logic [0:0] next_c; automatic logic load_next_c; - next_c = field_storage.CPTRA_TRNG_PAUSER_LOCK.LOCK.value; + next_c = field_storage.CPTRA_TRNG_AXI_ID_LOCK.LOCK.value; load_next_c = '0; - if(decoded_reg_strb.CPTRA_TRNG_PAUSER_LOCK && decoded_req_is_wr && !(hwif_in.CPTRA_TRNG_PAUSER_LOCK.LOCK.swwel)) begin // SW write - next_c = (field_storage.CPTRA_TRNG_PAUSER_LOCK.LOCK.value & ~decoded_wr_biten[0:0]) | (decoded_wr_data[0:0] & decoded_wr_biten[0:0]); + if(decoded_reg_strb.CPTRA_TRNG_AXI_ID_LOCK && decoded_req_is_wr && !(hwif_in.CPTRA_TRNG_AXI_ID_LOCK.LOCK.swwel)) begin // SW write + next_c = (field_storage.CPTRA_TRNG_AXI_ID_LOCK.LOCK.value & ~decoded_wr_biten[0:0]) | (decoded_wr_data[0:0] & decoded_wr_biten[0:0]); load_next_c = '1; end - field_combo.CPTRA_TRNG_PAUSER_LOCK.LOCK.next = next_c; - field_combo.CPTRA_TRNG_PAUSER_LOCK.LOCK.load_next = load_next_c; + field_combo.CPTRA_TRNG_AXI_ID_LOCK.LOCK.next = next_c; + field_combo.CPTRA_TRNG_AXI_ID_LOCK.LOCK.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.CPTRA_TRNG_PAUSER_LOCK.LOCK.value <= 1'h0; - end else if(field_combo.CPTRA_TRNG_PAUSER_LOCK.LOCK.load_next) begin - field_storage.CPTRA_TRNG_PAUSER_LOCK.LOCK.value <= field_combo.CPTRA_TRNG_PAUSER_LOCK.LOCK.next; + field_storage.CPTRA_TRNG_AXI_ID_LOCK.LOCK.value <= 1'h0; + end else if(field_combo.CPTRA_TRNG_AXI_ID_LOCK.LOCK.load_next) begin + field_storage.CPTRA_TRNG_AXI_ID_LOCK.LOCK.value <= field_combo.CPTRA_TRNG_AXI_ID_LOCK.LOCK.next; end end - assign hwif_out.CPTRA_TRNG_PAUSER_LOCK.LOCK.value = field_storage.CPTRA_TRNG_PAUSER_LOCK.LOCK.value; + assign hwif_out.CPTRA_TRNG_AXI_ID_LOCK.LOCK.value = field_storage.CPTRA_TRNG_AXI_ID_LOCK.LOCK.value; for(genvar i0=0; i0<12; i0++) begin // Field: soc_ifc_reg.CPTRA_TRNG_DATA[].DATA always_comb begin @@ -2910,48 +2910,48 @@ module soc_ifc_reg ( end end assign hwif_out.CPTRA_WDT_STATUS.t2_timeout.value = field_storage.CPTRA_WDT_STATUS.t2_timeout.value; - // Field: soc_ifc_reg.CPTRA_FUSE_VALID_PAUSER.PAUSER + // Field: soc_ifc_reg.CPTRA_FUSE_VALID_AXI_ID.AXI_ID always_comb begin automatic logic [31:0] next_c; automatic logic load_next_c; - next_c = field_storage.CPTRA_FUSE_VALID_PAUSER.PAUSER.value; + next_c = field_storage.CPTRA_FUSE_VALID_AXI_ID.AXI_ID.value; load_next_c = '0; - if(decoded_reg_strb.CPTRA_FUSE_VALID_PAUSER && decoded_req_is_wr && !(hwif_in.CPTRA_FUSE_VALID_PAUSER.PAUSER.swwel)) begin // SW write - next_c = (field_storage.CPTRA_FUSE_VALID_PAUSER.PAUSER.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); + if(decoded_reg_strb.CPTRA_FUSE_VALID_AXI_ID && decoded_req_is_wr && !(hwif_in.CPTRA_FUSE_VALID_AXI_ID.AXI_ID.swwel)) begin // SW write + next_c = (field_storage.CPTRA_FUSE_VALID_AXI_ID.AXI_ID.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); load_next_c = '1; end - field_combo.CPTRA_FUSE_VALID_PAUSER.PAUSER.next = next_c; - field_combo.CPTRA_FUSE_VALID_PAUSER.PAUSER.load_next = load_next_c; + field_combo.CPTRA_FUSE_VALID_AXI_ID.AXI_ID.next = next_c; + field_combo.CPTRA_FUSE_VALID_AXI_ID.AXI_ID.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_pwrgood) begin if(~hwif_in.cptra_pwrgood) begin - field_storage.CPTRA_FUSE_VALID_PAUSER.PAUSER.value <= 32'hffffffff; - end else if(field_combo.CPTRA_FUSE_VALID_PAUSER.PAUSER.load_next) begin - field_storage.CPTRA_FUSE_VALID_PAUSER.PAUSER.value <= field_combo.CPTRA_FUSE_VALID_PAUSER.PAUSER.next; + field_storage.CPTRA_FUSE_VALID_AXI_ID.AXI_ID.value <= 32'hffffffff; + end else if(field_combo.CPTRA_FUSE_VALID_AXI_ID.AXI_ID.load_next) begin + field_storage.CPTRA_FUSE_VALID_AXI_ID.AXI_ID.value <= field_combo.CPTRA_FUSE_VALID_AXI_ID.AXI_ID.next; end end - assign hwif_out.CPTRA_FUSE_VALID_PAUSER.PAUSER.value = field_storage.CPTRA_FUSE_VALID_PAUSER.PAUSER.value; - // Field: soc_ifc_reg.CPTRA_FUSE_PAUSER_LOCK.LOCK + assign hwif_out.CPTRA_FUSE_VALID_AXI_ID.AXI_ID.value = field_storage.CPTRA_FUSE_VALID_AXI_ID.AXI_ID.value; + // Field: soc_ifc_reg.CPTRA_FUSE_AXI_ID_LOCK.LOCK always_comb begin automatic logic [0:0] next_c; automatic logic load_next_c; - next_c = field_storage.CPTRA_FUSE_PAUSER_LOCK.LOCK.value; + next_c = field_storage.CPTRA_FUSE_AXI_ID_LOCK.LOCK.value; load_next_c = '0; - if(decoded_reg_strb.CPTRA_FUSE_PAUSER_LOCK && decoded_req_is_wr && !(hwif_in.CPTRA_FUSE_PAUSER_LOCK.LOCK.swwel)) begin // SW write - next_c = (field_storage.CPTRA_FUSE_PAUSER_LOCK.LOCK.value & ~decoded_wr_biten[0:0]) | (decoded_wr_data[0:0] & decoded_wr_biten[0:0]); + if(decoded_reg_strb.CPTRA_FUSE_AXI_ID_LOCK && decoded_req_is_wr && !(hwif_in.CPTRA_FUSE_AXI_ID_LOCK.LOCK.swwel)) begin // SW write + next_c = (field_storage.CPTRA_FUSE_AXI_ID_LOCK.LOCK.value & ~decoded_wr_biten[0:0]) | (decoded_wr_data[0:0] & decoded_wr_biten[0:0]); load_next_c = '1; end - field_combo.CPTRA_FUSE_PAUSER_LOCK.LOCK.next = next_c; - field_combo.CPTRA_FUSE_PAUSER_LOCK.LOCK.load_next = load_next_c; + field_combo.CPTRA_FUSE_AXI_ID_LOCK.LOCK.next = next_c; + field_combo.CPTRA_FUSE_AXI_ID_LOCK.LOCK.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_pwrgood) begin if(~hwif_in.cptra_pwrgood) begin - field_storage.CPTRA_FUSE_PAUSER_LOCK.LOCK.value <= 1'h0; - end else if(field_combo.CPTRA_FUSE_PAUSER_LOCK.LOCK.load_next) begin - field_storage.CPTRA_FUSE_PAUSER_LOCK.LOCK.value <= field_combo.CPTRA_FUSE_PAUSER_LOCK.LOCK.next; + field_storage.CPTRA_FUSE_AXI_ID_LOCK.LOCK.value <= 1'h0; + end else if(field_combo.CPTRA_FUSE_AXI_ID_LOCK.LOCK.load_next) begin + field_storage.CPTRA_FUSE_AXI_ID_LOCK.LOCK.value <= field_combo.CPTRA_FUSE_AXI_ID_LOCK.LOCK.next; end end - assign hwif_out.CPTRA_FUSE_PAUSER_LOCK.LOCK.value = field_storage.CPTRA_FUSE_PAUSER_LOCK.LOCK.value; + assign hwif_out.CPTRA_FUSE_AXI_ID_LOCK.LOCK.value = field_storage.CPTRA_FUSE_AXI_ID_LOCK.LOCK.value; for(genvar i0=0; i0<2; i0++) begin // Field: soc_ifc_reg.CPTRA_WDT_CFG[].TIMEOUT always_comb begin @@ -5805,14 +5805,14 @@ module soc_ifc_reg ( assign readback_array[17][3:3] = (decoded_reg_strb.CPTRA_SECURITY_STATE && !decoded_req_is_wr) ? hwif_in.CPTRA_SECURITY_STATE.scan_mode.next : '0; assign readback_array[17][31:4] = (decoded_reg_strb.CPTRA_SECURITY_STATE && !decoded_req_is_wr) ? 28'h0 : '0; for(genvar i0=0; i0<5; i0++) begin - assign readback_array[i0*1 + 18][31:0] = (decoded_reg_strb.CPTRA_MBOX_VALID_PAUSER[i0] && !decoded_req_is_wr) ? field_storage.CPTRA_MBOX_VALID_PAUSER[i0].PAUSER.value : '0; + assign readback_array[i0*1 + 18][31:0] = (decoded_reg_strb.CPTRA_MBOX_VALID_AXI_ID[i0] && !decoded_req_is_wr) ? field_storage.CPTRA_MBOX_VALID_AXI_ID[i0].AXI_ID.value : '0; end for(genvar i0=0; i0<5; i0++) begin - assign readback_array[i0*1 + 23][0:0] = (decoded_reg_strb.CPTRA_MBOX_PAUSER_LOCK[i0] && !decoded_req_is_wr) ? field_storage.CPTRA_MBOX_PAUSER_LOCK[i0].LOCK.value : '0; + assign readback_array[i0*1 + 23][0:0] = (decoded_reg_strb.CPTRA_MBOX_AXI_ID_LOCK[i0] && !decoded_req_is_wr) ? field_storage.CPTRA_MBOX_AXI_ID_LOCK[i0].LOCK.value : '0; assign readback_array[i0*1 + 23][31:1] = '0; end - assign readback_array[28][31:0] = (decoded_reg_strb.CPTRA_TRNG_VALID_PAUSER && !decoded_req_is_wr) ? field_storage.CPTRA_TRNG_VALID_PAUSER.PAUSER.value : '0; - assign readback_array[29][0:0] = (decoded_reg_strb.CPTRA_TRNG_PAUSER_LOCK && !decoded_req_is_wr) ? field_storage.CPTRA_TRNG_PAUSER_LOCK.LOCK.value : '0; + assign readback_array[28][31:0] = (decoded_reg_strb.CPTRA_TRNG_VALID_AXI_ID && !decoded_req_is_wr) ? field_storage.CPTRA_TRNG_VALID_AXI_ID.AXI_ID.value : '0; + assign readback_array[29][0:0] = (decoded_reg_strb.CPTRA_TRNG_AXI_ID_LOCK && !decoded_req_is_wr) ? field_storage.CPTRA_TRNG_AXI_ID_LOCK.LOCK.value : '0; assign readback_array[29][31:1] = '0; for(genvar i0=0; i0<12; i0++) begin assign readback_array[i0*1 + 30][31:0] = (decoded_reg_strb.CPTRA_TRNG_DATA[i0] && !decoded_req_is_wr) ? field_storage.CPTRA_TRNG_DATA[i0].DATA.value : '0; @@ -5864,8 +5864,8 @@ module soc_ifc_reg ( assign readback_array[65][0:0] = (decoded_reg_strb.CPTRA_WDT_STATUS && !decoded_req_is_wr) ? field_storage.CPTRA_WDT_STATUS.t1_timeout.value : '0; assign readback_array[65][1:1] = (decoded_reg_strb.CPTRA_WDT_STATUS && !decoded_req_is_wr) ? field_storage.CPTRA_WDT_STATUS.t2_timeout.value : '0; assign readback_array[65][31:2] = '0; - assign readback_array[66][31:0] = (decoded_reg_strb.CPTRA_FUSE_VALID_PAUSER && !decoded_req_is_wr) ? field_storage.CPTRA_FUSE_VALID_PAUSER.PAUSER.value : '0; - assign readback_array[67][0:0] = (decoded_reg_strb.CPTRA_FUSE_PAUSER_LOCK && !decoded_req_is_wr) ? field_storage.CPTRA_FUSE_PAUSER_LOCK.LOCK.value : '0; + assign readback_array[66][31:0] = (decoded_reg_strb.CPTRA_FUSE_VALID_AXI_ID && !decoded_req_is_wr) ? field_storage.CPTRA_FUSE_VALID_AXI_ID.AXI_ID.value : '0; + assign readback_array[67][0:0] = (decoded_reg_strb.CPTRA_FUSE_AXI_ID_LOCK && !decoded_req_is_wr) ? field_storage.CPTRA_FUSE_AXI_ID_LOCK.LOCK.value : '0; assign readback_array[67][31:1] = '0; for(genvar i0=0; i0<2; i0++) begin assign readback_array[i0*1 + 68][31:0] = (decoded_reg_strb.CPTRA_WDT_CFG[i0] && !decoded_req_is_wr) ? field_storage.CPTRA_WDT_CFG[i0].TIMEOUT.value : '0; diff --git a/src/soc_ifc/rtl/soc_ifc_reg_covergroups.svh b/src/soc_ifc/rtl/soc_ifc_reg_covergroups.svh index c74221ba9..ebd06c48a 100644 --- a/src/soc_ifc/rtl/soc_ifc_reg_covergroups.svh +++ b/src/soc_ifc/rtl/soc_ifc_reg_covergroups.svh @@ -265,8 +265,8 @@ endgroup - /*----------------------- SOC_IFC_REG__CPTRA_MBOX_VALID_PAUSER COVERGROUPS -----------------------*/ - covergroup soc_ifc_reg__CPTRA_MBOX_VALID_PAUSER_bit_cg with function sample(input bit reg_bit); + /*----------------------- SOC_IFC_REG__CPTRA_MBOX_VALID_AXI_ID COVERGROUPS -----------------------*/ + covergroup soc_ifc_reg__CPTRA_MBOX_VALID_AXI_ID_bit_cg with function sample(input bit reg_bit); option.per_instance = 1; reg_bit_cp : coverpoint reg_bit { bins value[2] = {0,1}; @@ -277,16 +277,16 @@ } endgroup - covergroup soc_ifc_reg__CPTRA_MBOX_VALID_PAUSER_fld_cg with function sample( - input bit [32-1:0] PAUSER + covergroup soc_ifc_reg__CPTRA_MBOX_VALID_AXI_ID_fld_cg with function sample( + input bit [32-1:0] AXI_ID ); option.per_instance = 1; - PAUSER_cp : coverpoint PAUSER; + AXI_ID_cp : coverpoint AXI_ID; endgroup - /*----------------------- SOC_IFC_REG__CPTRA_MBOX_PAUSER_LOCK COVERGROUPS -----------------------*/ - covergroup soc_ifc_reg__CPTRA_MBOX_PAUSER_LOCK_bit_cg with function sample(input bit reg_bit); + /*----------------------- SOC_IFC_REG__CPTRA_MBOX_AXI_ID_LOCK COVERGROUPS -----------------------*/ + covergroup soc_ifc_reg__CPTRA_MBOX_AXI_ID_LOCK_bit_cg with function sample(input bit reg_bit); option.per_instance = 1; reg_bit_cp : coverpoint reg_bit { bins value[2] = {0,1}; @@ -297,7 +297,7 @@ } endgroup - covergroup soc_ifc_reg__CPTRA_MBOX_PAUSER_LOCK_fld_cg with function sample( + covergroup soc_ifc_reg__CPTRA_MBOX_AXI_ID_LOCK_fld_cg with function sample( input bit [1-1:0] LOCK ); option.per_instance = 1; @@ -305,8 +305,8 @@ endgroup - /*----------------------- SOC_IFC_REG__CPTRA_TRNG_VALID_PAUSER COVERGROUPS -----------------------*/ - covergroup soc_ifc_reg__CPTRA_TRNG_VALID_PAUSER_bit_cg with function sample(input bit reg_bit); + /*----------------------- SOC_IFC_REG__CPTRA_TRNG_VALID_AXI_ID COVERGROUPS -----------------------*/ + covergroup soc_ifc_reg__CPTRA_TRNG_VALID_AXI_ID_bit_cg with function sample(input bit reg_bit); option.per_instance = 1; reg_bit_cp : coverpoint reg_bit { bins value[2] = {0,1}; @@ -317,11 +317,11 @@ } endgroup - covergroup soc_ifc_reg__CPTRA_TRNG_VALID_PAUSER_fld_cg with function sample( - input bit [32-1:0] PAUSER + covergroup soc_ifc_reg__CPTRA_TRNG_VALID_AXI_ID_fld_cg with function sample( + input bit [32-1:0] AXI_ID ); option.per_instance = 1; - PAUSER_cp : coverpoint PAUSER { + AXI_ID_cp : coverpoint AXI_ID { bins zero_val = {32'h0}; bins rand_val[64] = {[1:32'hFFFF_FFFE]}; bins ones_val = {{32{1'b1}}}; @@ -331,8 +331,8 @@ endgroup - /*----------------------- SOC_IFC_REG__CPTRA_TRNG_PAUSER_LOCK COVERGROUPS -----------------------*/ - covergroup soc_ifc_reg__CPTRA_TRNG_PAUSER_LOCK_bit_cg with function sample(input bit reg_bit); + /*----------------------- SOC_IFC_REG__CPTRA_TRNG_AXI_ID_LOCK COVERGROUPS -----------------------*/ + covergroup soc_ifc_reg__CPTRA_TRNG_AXI_ID_LOCK_bit_cg with function sample(input bit reg_bit); option.per_instance = 1; reg_bit_cp : coverpoint reg_bit { bins value[2] = {0,1}; @@ -343,7 +343,7 @@ } endgroup - covergroup soc_ifc_reg__CPTRA_TRNG_PAUSER_LOCK_fld_cg with function sample( + covergroup soc_ifc_reg__CPTRA_TRNG_AXI_ID_LOCK_fld_cg with function sample( input bit [1-1:0] LOCK ); option.per_instance = 1; @@ -789,8 +789,8 @@ endgroup - /*----------------------- SOC_IFC_REG__CPTRA_FUSE_VALID_PAUSER COVERGROUPS -----------------------*/ - covergroup soc_ifc_reg__CPTRA_FUSE_VALID_PAUSER_bit_cg with function sample(input bit reg_bit); + /*----------------------- SOC_IFC_REG__CPTRA_FUSE_VALID_AXI_ID COVERGROUPS -----------------------*/ + covergroup soc_ifc_reg__CPTRA_FUSE_VALID_AXI_ID_bit_cg with function sample(input bit reg_bit); option.per_instance = 1; reg_bit_cp : coverpoint reg_bit { bins value[2] = {0,1}; @@ -801,11 +801,11 @@ } endgroup - covergroup soc_ifc_reg__CPTRA_FUSE_VALID_PAUSER_fld_cg with function sample( - input bit [32-1:0] PAUSER + covergroup soc_ifc_reg__CPTRA_FUSE_VALID_AXI_ID_fld_cg with function sample( + input bit [32-1:0] AXI_ID ); option.per_instance = 1; - PAUSER_cp : coverpoint PAUSER { + AXI_ID_cp : coverpoint AXI_ID { bins zero_val = {32'h0}; bins rand_val[64] = {[1:32'hFFFF_FFFE]}; bins ones_val = {{32{1'b1}}}; @@ -815,8 +815,8 @@ endgroup - /*----------------------- SOC_IFC_REG__CPTRA_FUSE_PAUSER_LOCK COVERGROUPS -----------------------*/ - covergroup soc_ifc_reg__CPTRA_FUSE_PAUSER_LOCK_bit_cg with function sample(input bit reg_bit); + /*----------------------- SOC_IFC_REG__CPTRA_FUSE_AXI_ID_LOCK COVERGROUPS -----------------------*/ + covergroup soc_ifc_reg__CPTRA_FUSE_AXI_ID_LOCK_bit_cg with function sample(input bit reg_bit); option.per_instance = 1; reg_bit_cp : coverpoint reg_bit { bins value[2] = {0,1}; @@ -827,7 +827,7 @@ } endgroup - covergroup soc_ifc_reg__CPTRA_FUSE_PAUSER_LOCK_fld_cg with function sample( + covergroup soc_ifc_reg__CPTRA_FUSE_AXI_ID_LOCK_fld_cg with function sample( input bit [1-1:0] LOCK ); option.per_instance = 1; diff --git a/src/soc_ifc/rtl/soc_ifc_reg_pkg.sv b/src/soc_ifc/rtl/soc_ifc_reg_pkg.sv index 15d1f534f..2172b382c 100644 --- a/src/soc_ifc/rtl/soc_ifc_reg_pkg.sv +++ b/src/soc_ifc/rtl/soc_ifc_reg_pkg.sv @@ -84,35 +84,35 @@ package soc_ifc_reg_pkg; typedef struct packed{ logic swwel; - } soc_ifc_reg__CPTRA_MBOX_VALID_PAUSER__PAUSER__in_t; + } soc_ifc_reg__CPTRA_MBOX_VALID_AXI_ID__AXI_ID__in_t; typedef struct packed{ - soc_ifc_reg__CPTRA_MBOX_VALID_PAUSER__PAUSER__in_t PAUSER; - } soc_ifc_reg__CPTRA_MBOX_VALID_PAUSER__in_t; + soc_ifc_reg__CPTRA_MBOX_VALID_AXI_ID__AXI_ID__in_t AXI_ID; + } soc_ifc_reg__CPTRA_MBOX_VALID_AXI_ID__in_t; typedef struct packed{ logic swwel; - } soc_ifc_reg__CPTRA_MBOX_PAUSER_LOCK__LOCK__in_t; + } soc_ifc_reg__CPTRA_MBOX_AXI_ID_LOCK__LOCK__in_t; typedef struct packed{ - soc_ifc_reg__CPTRA_MBOX_PAUSER_LOCK__LOCK__in_t LOCK; - } soc_ifc_reg__CPTRA_MBOX_PAUSER_LOCK__in_t; + soc_ifc_reg__CPTRA_MBOX_AXI_ID_LOCK__LOCK__in_t LOCK; + } soc_ifc_reg__CPTRA_MBOX_AXI_ID_LOCK__in_t; typedef struct packed{ logic swwel; - } soc_ifc_reg__CPTRA_TRNG_VALID_PAUSER__PAUSER__in_t; + } soc_ifc_reg__CPTRA_TRNG_VALID_AXI_ID__AXI_ID__in_t; typedef struct packed{ - soc_ifc_reg__CPTRA_TRNG_VALID_PAUSER__PAUSER__in_t PAUSER; - } soc_ifc_reg__CPTRA_TRNG_VALID_PAUSER__in_t; + soc_ifc_reg__CPTRA_TRNG_VALID_AXI_ID__AXI_ID__in_t AXI_ID; + } soc_ifc_reg__CPTRA_TRNG_VALID_AXI_ID__in_t; typedef struct packed{ logic swwel; - } soc_ifc_reg__CPTRA_TRNG_PAUSER_LOCK__LOCK__in_t; + } soc_ifc_reg__CPTRA_TRNG_AXI_ID_LOCK__LOCK__in_t; typedef struct packed{ - soc_ifc_reg__CPTRA_TRNG_PAUSER_LOCK__LOCK__in_t LOCK; - } soc_ifc_reg__CPTRA_TRNG_PAUSER_LOCK__in_t; + soc_ifc_reg__CPTRA_TRNG_AXI_ID_LOCK__LOCK__in_t LOCK; + } soc_ifc_reg__CPTRA_TRNG_AXI_ID_LOCK__in_t; typedef struct packed{ logic swwe; @@ -217,19 +217,19 @@ package soc_ifc_reg_pkg; typedef struct packed{ logic swwel; - } soc_ifc_reg__CPTRA_FUSE_VALID_PAUSER__PAUSER__in_t; + } soc_ifc_reg__CPTRA_FUSE_VALID_AXI_ID__AXI_ID__in_t; typedef struct packed{ - soc_ifc_reg__CPTRA_FUSE_VALID_PAUSER__PAUSER__in_t PAUSER; - } soc_ifc_reg__CPTRA_FUSE_VALID_PAUSER__in_t; + soc_ifc_reg__CPTRA_FUSE_VALID_AXI_ID__AXI_ID__in_t AXI_ID; + } soc_ifc_reg__CPTRA_FUSE_VALID_AXI_ID__in_t; typedef struct packed{ logic swwel; - } soc_ifc_reg__CPTRA_FUSE_PAUSER_LOCK__LOCK__in_t; + } soc_ifc_reg__CPTRA_FUSE_AXI_ID_LOCK__LOCK__in_t; typedef struct packed{ - soc_ifc_reg__CPTRA_FUSE_PAUSER_LOCK__LOCK__in_t LOCK; - } soc_ifc_reg__CPTRA_FUSE_PAUSER_LOCK__in_t; + soc_ifc_reg__CPTRA_FUSE_AXI_ID_LOCK__LOCK__in_t LOCK; + } soc_ifc_reg__CPTRA_FUSE_AXI_ID_LOCK__in_t; typedef struct packed{ logic swwel; @@ -439,10 +439,10 @@ package soc_ifc_reg_pkg; soc_ifc_reg__CPTRA_FLOW_STATUS__in_t CPTRA_FLOW_STATUS; soc_ifc_reg__CPTRA_RESET_REASON__in_t CPTRA_RESET_REASON; soc_ifc_reg__CPTRA_SECURITY_STATE__in_t CPTRA_SECURITY_STATE; - soc_ifc_reg__CPTRA_MBOX_VALID_PAUSER__in_t [5-1:0]CPTRA_MBOX_VALID_PAUSER; - soc_ifc_reg__CPTRA_MBOX_PAUSER_LOCK__in_t [5-1:0]CPTRA_MBOX_PAUSER_LOCK; - soc_ifc_reg__CPTRA_TRNG_VALID_PAUSER__in_t CPTRA_TRNG_VALID_PAUSER; - soc_ifc_reg__CPTRA_TRNG_PAUSER_LOCK__in_t CPTRA_TRNG_PAUSER_LOCK; + soc_ifc_reg__CPTRA_MBOX_VALID_AXI_ID__in_t [5-1:0]CPTRA_MBOX_VALID_AXI_ID; + soc_ifc_reg__CPTRA_MBOX_AXI_ID_LOCK__in_t [5-1:0]CPTRA_MBOX_AXI_ID_LOCK; + soc_ifc_reg__CPTRA_TRNG_VALID_AXI_ID__in_t CPTRA_TRNG_VALID_AXI_ID; + soc_ifc_reg__CPTRA_TRNG_AXI_ID_LOCK__in_t CPTRA_TRNG_AXI_ID_LOCK; soc_ifc_reg__CPTRA_TRNG_DATA__in_t [12-1:0]CPTRA_TRNG_DATA; soc_ifc_reg__CPTRA_TRNG_STATUS__in_t CPTRA_TRNG_STATUS; soc_ifc_reg__CPTRA_FUSE_WR_DONE__in_t CPTRA_FUSE_WR_DONE; @@ -452,8 +452,8 @@ package soc_ifc_reg_pkg; soc_ifc_reg__CPTRA_HW_REV_ID__in_t CPTRA_HW_REV_ID; soc_ifc_reg__CPTRA_HW_CONFIG__in_t CPTRA_HW_CONFIG; soc_ifc_reg__CPTRA_WDT_STATUS__in_t CPTRA_WDT_STATUS; - soc_ifc_reg__CPTRA_FUSE_VALID_PAUSER__in_t CPTRA_FUSE_VALID_PAUSER; - soc_ifc_reg__CPTRA_FUSE_PAUSER_LOCK__in_t CPTRA_FUSE_PAUSER_LOCK; + soc_ifc_reg__CPTRA_FUSE_VALID_AXI_ID__in_t CPTRA_FUSE_VALID_AXI_ID; + soc_ifc_reg__CPTRA_FUSE_AXI_ID_LOCK__in_t CPTRA_FUSE_AXI_ID_LOCK; soc_ifc_reg__fuse_uds_seed__in_t [12-1:0]fuse_uds_seed; soc_ifc_reg__fuse_field_entropy__in_t [8-1:0]fuse_field_entropy; soc_ifc_reg__fuse_key_manifest_pk_hash__in_t [12-1:0]fuse_key_manifest_pk_hash; @@ -575,35 +575,35 @@ package soc_ifc_reg_pkg; typedef struct packed{ logic [31:0] value; - } soc_ifc_reg__CPTRA_MBOX_VALID_PAUSER__PAUSER__out_t; + } soc_ifc_reg__CPTRA_MBOX_VALID_AXI_ID__AXI_ID__out_t; typedef struct packed{ - soc_ifc_reg__CPTRA_MBOX_VALID_PAUSER__PAUSER__out_t PAUSER; - } soc_ifc_reg__CPTRA_MBOX_VALID_PAUSER__out_t; + soc_ifc_reg__CPTRA_MBOX_VALID_AXI_ID__AXI_ID__out_t AXI_ID; + } soc_ifc_reg__CPTRA_MBOX_VALID_AXI_ID__out_t; typedef struct packed{ logic value; - } soc_ifc_reg__CPTRA_MBOX_PAUSER_LOCK__LOCK__out_t; + } soc_ifc_reg__CPTRA_MBOX_AXI_ID_LOCK__LOCK__out_t; typedef struct packed{ - soc_ifc_reg__CPTRA_MBOX_PAUSER_LOCK__LOCK__out_t LOCK; - } soc_ifc_reg__CPTRA_MBOX_PAUSER_LOCK__out_t; + soc_ifc_reg__CPTRA_MBOX_AXI_ID_LOCK__LOCK__out_t LOCK; + } soc_ifc_reg__CPTRA_MBOX_AXI_ID_LOCK__out_t; typedef struct packed{ logic [31:0] value; - } soc_ifc_reg__CPTRA_TRNG_VALID_PAUSER__PAUSER__out_t; + } soc_ifc_reg__CPTRA_TRNG_VALID_AXI_ID__AXI_ID__out_t; typedef struct packed{ - soc_ifc_reg__CPTRA_TRNG_VALID_PAUSER__PAUSER__out_t PAUSER; - } soc_ifc_reg__CPTRA_TRNG_VALID_PAUSER__out_t; + soc_ifc_reg__CPTRA_TRNG_VALID_AXI_ID__AXI_ID__out_t AXI_ID; + } soc_ifc_reg__CPTRA_TRNG_VALID_AXI_ID__out_t; typedef struct packed{ logic value; - } soc_ifc_reg__CPTRA_TRNG_PAUSER_LOCK__LOCK__out_t; + } soc_ifc_reg__CPTRA_TRNG_AXI_ID_LOCK__LOCK__out_t; typedef struct packed{ - soc_ifc_reg__CPTRA_TRNG_PAUSER_LOCK__LOCK__out_t LOCK; - } soc_ifc_reg__CPTRA_TRNG_PAUSER_LOCK__out_t; + soc_ifc_reg__CPTRA_TRNG_AXI_ID_LOCK__LOCK__out_t LOCK; + } soc_ifc_reg__CPTRA_TRNG_AXI_ID_LOCK__out_t; typedef struct packed{ logic swacc; @@ -749,19 +749,19 @@ package soc_ifc_reg_pkg; typedef struct packed{ logic [31:0] value; - } soc_ifc_reg__CPTRA_FUSE_VALID_PAUSER__PAUSER__out_t; + } soc_ifc_reg__CPTRA_FUSE_VALID_AXI_ID__AXI_ID__out_t; typedef struct packed{ - soc_ifc_reg__CPTRA_FUSE_VALID_PAUSER__PAUSER__out_t PAUSER; - } soc_ifc_reg__CPTRA_FUSE_VALID_PAUSER__out_t; + soc_ifc_reg__CPTRA_FUSE_VALID_AXI_ID__AXI_ID__out_t AXI_ID; + } soc_ifc_reg__CPTRA_FUSE_VALID_AXI_ID__out_t; typedef struct packed{ logic value; - } soc_ifc_reg__CPTRA_FUSE_PAUSER_LOCK__LOCK__out_t; + } soc_ifc_reg__CPTRA_FUSE_AXI_ID_LOCK__LOCK__out_t; typedef struct packed{ - soc_ifc_reg__CPTRA_FUSE_PAUSER_LOCK__LOCK__out_t LOCK; - } soc_ifc_reg__CPTRA_FUSE_PAUSER_LOCK__out_t; + soc_ifc_reg__CPTRA_FUSE_AXI_ID_LOCK__LOCK__out_t LOCK; + } soc_ifc_reg__CPTRA_FUSE_AXI_ID_LOCK__out_t; typedef struct packed{ logic [31:0] value; @@ -980,10 +980,10 @@ package soc_ifc_reg_pkg; soc_ifc_reg__CPTRA_BOOT_STATUS__out_t CPTRA_BOOT_STATUS; soc_ifc_reg__CPTRA_FLOW_STATUS__out_t CPTRA_FLOW_STATUS; soc_ifc_reg__CPTRA_RESET_REASON__out_t CPTRA_RESET_REASON; - soc_ifc_reg__CPTRA_MBOX_VALID_PAUSER__out_t [5-1:0]CPTRA_MBOX_VALID_PAUSER; - soc_ifc_reg__CPTRA_MBOX_PAUSER_LOCK__out_t [5-1:0]CPTRA_MBOX_PAUSER_LOCK; - soc_ifc_reg__CPTRA_TRNG_VALID_PAUSER__out_t CPTRA_TRNG_VALID_PAUSER; - soc_ifc_reg__CPTRA_TRNG_PAUSER_LOCK__out_t CPTRA_TRNG_PAUSER_LOCK; + soc_ifc_reg__CPTRA_MBOX_VALID_AXI_ID__out_t [5-1:0]CPTRA_MBOX_VALID_AXI_ID; + soc_ifc_reg__CPTRA_MBOX_AXI_ID_LOCK__out_t [5-1:0]CPTRA_MBOX_AXI_ID_LOCK; + soc_ifc_reg__CPTRA_TRNG_VALID_AXI_ID__out_t CPTRA_TRNG_VALID_AXI_ID; + soc_ifc_reg__CPTRA_TRNG_AXI_ID_LOCK__out_t CPTRA_TRNG_AXI_ID_LOCK; soc_ifc_reg__CPTRA_TRNG_DATA__out_t [12-1:0]CPTRA_TRNG_DATA; soc_ifc_reg__CPTRA_TRNG_CTRL__out_t CPTRA_TRNG_CTRL; soc_ifc_reg__CPTRA_TRNG_STATUS__out_t CPTRA_TRNG_STATUS; @@ -1001,8 +1001,8 @@ package soc_ifc_reg_pkg; soc_ifc_reg__CPTRA_WDT_TIMER2_CTRL__out_t CPTRA_WDT_TIMER2_CTRL; soc_ifc_reg__CPTRA_WDT_TIMER2_TIMEOUT_PERIOD__out_t [2-1:0]CPTRA_WDT_TIMER2_TIMEOUT_PERIOD; soc_ifc_reg__CPTRA_WDT_STATUS__out_t CPTRA_WDT_STATUS; - soc_ifc_reg__CPTRA_FUSE_VALID_PAUSER__out_t CPTRA_FUSE_VALID_PAUSER; - soc_ifc_reg__CPTRA_FUSE_PAUSER_LOCK__out_t CPTRA_FUSE_PAUSER_LOCK; + soc_ifc_reg__CPTRA_FUSE_VALID_AXI_ID__out_t CPTRA_FUSE_VALID_AXI_ID; + soc_ifc_reg__CPTRA_FUSE_AXI_ID_LOCK__out_t CPTRA_FUSE_AXI_ID_LOCK; soc_ifc_reg__fuse_uds_seed__out_t [12-1:0]fuse_uds_seed; soc_ifc_reg__fuse_field_entropy__out_t [8-1:0]fuse_field_entropy; soc_ifc_reg__fuse_key_manifest_pk_hash__out_t [12-1:0]fuse_key_manifest_pk_hash; diff --git a/src/soc_ifc/rtl/soc_ifc_reg_sample.svh b/src/soc_ifc/rtl/soc_ifc_reg_sample.svh index 4274380d0..ff26ec47f 100644 --- a/src/soc_ifc/rtl/soc_ifc_reg_sample.svh +++ b/src/soc_ifc/rtl/soc_ifc_reg_sample.svh @@ -320,8 +320,8 @@ end endfunction - /*----------------------- SOC_IFC_REG__CPTRA_MBOX_VALID_PAUSER SAMPLE FUNCTIONS -----------------------*/ - function void soc_ifc_reg__CPTRA_MBOX_VALID_PAUSER::sample(uvm_reg_data_t data, + /*----------------------- SOC_IFC_REG__CPTRA_MBOX_VALID_AXI_ID SAMPLE FUNCTIONS -----------------------*/ + function void soc_ifc_reg__CPTRA_MBOX_VALID_AXI_ID::sample(uvm_reg_data_t data, uvm_reg_data_t byte_en, bit is_read, uvm_reg_map map); @@ -329,24 +329,24 @@ m_data = data; m_is_read = is_read; if (get_coverage(UVM_CVR_REG_BITS)) begin - foreach(PAUSER_bit_cg[bt]) this.PAUSER_bit_cg[bt].sample(data[0 + bt]); + foreach(AXI_ID_bit_cg[bt]) this.AXI_ID_bit_cg[bt].sample(data[0 + bt]); end if (get_coverage(UVM_CVR_FIELD_VALS)) begin - this.fld_cg.sample( data[31:0]/*PAUSER*/ ); + this.fld_cg.sample( data[31:0]/*AXI_ID*/ ); end endfunction - function void soc_ifc_reg__CPTRA_MBOX_VALID_PAUSER::sample_values(); + function void soc_ifc_reg__CPTRA_MBOX_VALID_AXI_ID::sample_values(); if (get_coverage(UVM_CVR_REG_BITS)) begin - foreach(PAUSER_bit_cg[bt]) this.PAUSER_bit_cg[bt].sample(PAUSER.get_mirrored_value() >> bt); + foreach(AXI_ID_bit_cg[bt]) this.AXI_ID_bit_cg[bt].sample(AXI_ID.get_mirrored_value() >> bt); end if (get_coverage(UVM_CVR_FIELD_VALS)) begin - this.fld_cg.sample( PAUSER.get_mirrored_value() ); + this.fld_cg.sample( AXI_ID.get_mirrored_value() ); end endfunction - /*----------------------- SOC_IFC_REG__CPTRA_MBOX_PAUSER_LOCK SAMPLE FUNCTIONS -----------------------*/ - function void soc_ifc_reg__CPTRA_MBOX_PAUSER_LOCK::sample(uvm_reg_data_t data, + /*----------------------- SOC_IFC_REG__CPTRA_MBOX_AXI_ID_LOCK SAMPLE FUNCTIONS -----------------------*/ + function void soc_ifc_reg__CPTRA_MBOX_AXI_ID_LOCK::sample(uvm_reg_data_t data, uvm_reg_data_t byte_en, bit is_read, uvm_reg_map map); @@ -361,7 +361,7 @@ end endfunction - function void soc_ifc_reg__CPTRA_MBOX_PAUSER_LOCK::sample_values(); + function void soc_ifc_reg__CPTRA_MBOX_AXI_ID_LOCK::sample_values(); if (get_coverage(UVM_CVR_REG_BITS)) begin foreach(LOCK_bit_cg[bt]) this.LOCK_bit_cg[bt].sample(LOCK.get_mirrored_value() >> bt); end @@ -370,8 +370,8 @@ end endfunction - /*----------------------- SOC_IFC_REG__CPTRA_TRNG_VALID_PAUSER SAMPLE FUNCTIONS -----------------------*/ - function void soc_ifc_reg__CPTRA_TRNG_VALID_PAUSER::sample(uvm_reg_data_t data, + /*----------------------- SOC_IFC_REG__CPTRA_TRNG_VALID_AXI_ID SAMPLE FUNCTIONS -----------------------*/ + function void soc_ifc_reg__CPTRA_TRNG_VALID_AXI_ID::sample(uvm_reg_data_t data, uvm_reg_data_t byte_en, bit is_read, uvm_reg_map map); @@ -379,24 +379,24 @@ m_data = data; m_is_read = is_read; if (get_coverage(UVM_CVR_REG_BITS)) begin - foreach(PAUSER_bit_cg[bt]) this.PAUSER_bit_cg[bt].sample(data[0 + bt]); + foreach(AXI_ID_bit_cg[bt]) this.AXI_ID_bit_cg[bt].sample(data[0 + bt]); end if (get_coverage(UVM_CVR_FIELD_VALS)) begin - this.fld_cg.sample( data[31:0]/*PAUSER*/ ); + this.fld_cg.sample( data[31:0]/*AXI_ID*/ ); end endfunction - function void soc_ifc_reg__CPTRA_TRNG_VALID_PAUSER::sample_values(); + function void soc_ifc_reg__CPTRA_TRNG_VALID_AXI_ID::sample_values(); if (get_coverage(UVM_CVR_REG_BITS)) begin - foreach(PAUSER_bit_cg[bt]) this.PAUSER_bit_cg[bt].sample(PAUSER.get_mirrored_value() >> bt); + foreach(AXI_ID_bit_cg[bt]) this.AXI_ID_bit_cg[bt].sample(AXI_ID.get_mirrored_value() >> bt); end if (get_coverage(UVM_CVR_FIELD_VALS)) begin - this.fld_cg.sample( PAUSER.get_mirrored_value() ); + this.fld_cg.sample( AXI_ID.get_mirrored_value() ); end endfunction - /*----------------------- SOC_IFC_REG__CPTRA_TRNG_PAUSER_LOCK SAMPLE FUNCTIONS -----------------------*/ - function void soc_ifc_reg__CPTRA_TRNG_PAUSER_LOCK::sample(uvm_reg_data_t data, + /*----------------------- SOC_IFC_REG__CPTRA_TRNG_AXI_ID_LOCK SAMPLE FUNCTIONS -----------------------*/ + function void soc_ifc_reg__CPTRA_TRNG_AXI_ID_LOCK::sample(uvm_reg_data_t data, uvm_reg_data_t byte_en, bit is_read, uvm_reg_map map); @@ -411,7 +411,7 @@ end endfunction - function void soc_ifc_reg__CPTRA_TRNG_PAUSER_LOCK::sample_values(); + function void soc_ifc_reg__CPTRA_TRNG_AXI_ID_LOCK::sample_values(); if (get_coverage(UVM_CVR_REG_BITS)) begin foreach(LOCK_bit_cg[bt]) this.LOCK_bit_cg[bt].sample(LOCK.get_mirrored_value() >> bt); end @@ -934,8 +934,8 @@ end endfunction - /*----------------------- SOC_IFC_REG__CPTRA_FUSE_VALID_PAUSER SAMPLE FUNCTIONS -----------------------*/ - function void soc_ifc_reg__CPTRA_FUSE_VALID_PAUSER::sample(uvm_reg_data_t data, + /*----------------------- SOC_IFC_REG__CPTRA_FUSE_VALID_AXI_ID SAMPLE FUNCTIONS -----------------------*/ + function void soc_ifc_reg__CPTRA_FUSE_VALID_AXI_ID::sample(uvm_reg_data_t data, uvm_reg_data_t byte_en, bit is_read, uvm_reg_map map); @@ -943,24 +943,24 @@ m_data = data; m_is_read = is_read; if (get_coverage(UVM_CVR_REG_BITS)) begin - foreach(PAUSER_bit_cg[bt]) this.PAUSER_bit_cg[bt].sample(data[0 + bt]); + foreach(AXI_ID_bit_cg[bt]) this.AXI_ID_bit_cg[bt].sample(data[0 + bt]); end if (get_coverage(UVM_CVR_FIELD_VALS)) begin - this.fld_cg.sample( data[31:0]/*PAUSER*/ ); + this.fld_cg.sample( data[31:0]/*AXI_ID*/ ); end endfunction - function void soc_ifc_reg__CPTRA_FUSE_VALID_PAUSER::sample_values(); + function void soc_ifc_reg__CPTRA_FUSE_VALID_AXI_ID::sample_values(); if (get_coverage(UVM_CVR_REG_BITS)) begin - foreach(PAUSER_bit_cg[bt]) this.PAUSER_bit_cg[bt].sample(PAUSER.get_mirrored_value() >> bt); + foreach(AXI_ID_bit_cg[bt]) this.AXI_ID_bit_cg[bt].sample(AXI_ID.get_mirrored_value() >> bt); end if (get_coverage(UVM_CVR_FIELD_VALS)) begin - this.fld_cg.sample( PAUSER.get_mirrored_value() ); + this.fld_cg.sample( AXI_ID.get_mirrored_value() ); end endfunction - /*----------------------- SOC_IFC_REG__CPTRA_FUSE_PAUSER_LOCK SAMPLE FUNCTIONS -----------------------*/ - function void soc_ifc_reg__CPTRA_FUSE_PAUSER_LOCK::sample(uvm_reg_data_t data, + /*----------------------- SOC_IFC_REG__CPTRA_FUSE_AXI_ID_LOCK SAMPLE FUNCTIONS -----------------------*/ + function void soc_ifc_reg__CPTRA_FUSE_AXI_ID_LOCK::sample(uvm_reg_data_t data, uvm_reg_data_t byte_en, bit is_read, uvm_reg_map map); @@ -975,7 +975,7 @@ end endfunction - function void soc_ifc_reg__CPTRA_FUSE_PAUSER_LOCK::sample_values(); + function void soc_ifc_reg__CPTRA_FUSE_AXI_ID_LOCK::sample_values(); if (get_coverage(UVM_CVR_REG_BITS)) begin foreach(LOCK_bit_cg[bt]) this.LOCK_bit_cg[bt].sample(LOCK.get_mirrored_value() >> bt); end diff --git a/src/soc_ifc/rtl/soc_ifc_reg_uvm.sv b/src/soc_ifc/rtl/soc_ifc_reg_uvm.sv index b111caa8c..da67c9fe0 100644 --- a/src/soc_ifc/rtl/soc_ifc_reg_uvm.sv +++ b/src/soc_ifc/rtl/soc_ifc_reg_uvm.sv @@ -409,17 +409,17 @@ package soc_ifc_reg_uvm; endfunction : build endclass : soc_ifc_reg__CPTRA_SECURITY_STATE - // Reg - soc_ifc_reg::CPTRA_MBOX_VALID_PAUSER - class soc_ifc_reg__CPTRA_MBOX_VALID_PAUSER extends uvm_reg; + // Reg - soc_ifc_reg::CPTRA_MBOX_VALID_AXI_ID + class soc_ifc_reg__CPTRA_MBOX_VALID_AXI_ID extends uvm_reg; protected uvm_reg_data_t m_current; protected uvm_reg_data_t m_data; protected bit m_is_read; - soc_ifc_reg__CPTRA_MBOX_VALID_PAUSER_bit_cg PAUSER_bit_cg[32]; - soc_ifc_reg__CPTRA_MBOX_VALID_PAUSER_fld_cg fld_cg; - rand uvm_reg_field PAUSER; + soc_ifc_reg__CPTRA_MBOX_VALID_AXI_ID_bit_cg AXI_ID_bit_cg[32]; + soc_ifc_reg__CPTRA_MBOX_VALID_AXI_ID_fld_cg fld_cg; + rand uvm_reg_field AXI_ID; - function new(string name = "soc_ifc_reg__CPTRA_MBOX_VALID_PAUSER"); + function new(string name = "soc_ifc_reg__CPTRA_MBOX_VALID_AXI_ID"); super.new(name, 32, build_coverage(UVM_CVR_ALL)); endfunction : new extern virtual function void sample_values(); @@ -429,27 +429,27 @@ package soc_ifc_reg_uvm; uvm_reg_map map); virtual function void build(); - this.PAUSER = new("PAUSER"); - this.PAUSER.configure(this, 32, 0, "RW", 0, 'hffffffff, 1, 1, 0); + this.AXI_ID = new("AXI_ID"); + this.AXI_ID.configure(this, 32, 0, "RW", 0, 'hffffffff, 1, 1, 0); if (has_coverage(UVM_CVR_REG_BITS)) begin - foreach(PAUSER_bit_cg[bt]) PAUSER_bit_cg[bt] = new(); + foreach(AXI_ID_bit_cg[bt]) AXI_ID_bit_cg[bt] = new(); end if (has_coverage(UVM_CVR_FIELD_VALS)) fld_cg = new(); endfunction : build - endclass : soc_ifc_reg__CPTRA_MBOX_VALID_PAUSER + endclass : soc_ifc_reg__CPTRA_MBOX_VALID_AXI_ID - // Reg - soc_ifc_reg::CPTRA_MBOX_PAUSER_LOCK - class soc_ifc_reg__CPTRA_MBOX_PAUSER_LOCK extends uvm_reg; + // Reg - soc_ifc_reg::CPTRA_MBOX_AXI_ID_LOCK + class soc_ifc_reg__CPTRA_MBOX_AXI_ID_LOCK extends uvm_reg; protected uvm_reg_data_t m_current; protected uvm_reg_data_t m_data; protected bit m_is_read; - soc_ifc_reg__CPTRA_MBOX_PAUSER_LOCK_bit_cg LOCK_bit_cg[1]; - soc_ifc_reg__CPTRA_MBOX_PAUSER_LOCK_fld_cg fld_cg; + soc_ifc_reg__CPTRA_MBOX_AXI_ID_LOCK_bit_cg LOCK_bit_cg[1]; + soc_ifc_reg__CPTRA_MBOX_AXI_ID_LOCK_fld_cg fld_cg; rand uvm_reg_field LOCK; - function new(string name = "soc_ifc_reg__CPTRA_MBOX_PAUSER_LOCK"); + function new(string name = "soc_ifc_reg__CPTRA_MBOX_AXI_ID_LOCK"); super.new(name, 32, build_coverage(UVM_CVR_ALL)); endfunction : new extern virtual function void sample_values(); @@ -467,19 +467,19 @@ package soc_ifc_reg_uvm; if (has_coverage(UVM_CVR_FIELD_VALS)) fld_cg = new(); endfunction : build - endclass : soc_ifc_reg__CPTRA_MBOX_PAUSER_LOCK + endclass : soc_ifc_reg__CPTRA_MBOX_AXI_ID_LOCK - // Reg - soc_ifc_reg::CPTRA_TRNG_VALID_PAUSER - class soc_ifc_reg__CPTRA_TRNG_VALID_PAUSER extends uvm_reg; + // Reg - soc_ifc_reg::CPTRA_TRNG_VALID_AXI_ID + class soc_ifc_reg__CPTRA_TRNG_VALID_AXI_ID extends uvm_reg; protected uvm_reg_data_t m_current; protected uvm_reg_data_t m_data; protected bit m_is_read; - soc_ifc_reg__CPTRA_TRNG_VALID_PAUSER_bit_cg PAUSER_bit_cg[32]; - soc_ifc_reg__CPTRA_TRNG_VALID_PAUSER_fld_cg fld_cg; - rand uvm_reg_field PAUSER; + soc_ifc_reg__CPTRA_TRNG_VALID_AXI_ID_bit_cg AXI_ID_bit_cg[32]; + soc_ifc_reg__CPTRA_TRNG_VALID_AXI_ID_fld_cg fld_cg; + rand uvm_reg_field AXI_ID; - function new(string name = "soc_ifc_reg__CPTRA_TRNG_VALID_PAUSER"); + function new(string name = "soc_ifc_reg__CPTRA_TRNG_VALID_AXI_ID"); super.new(name, 32, build_coverage(UVM_CVR_ALL)); endfunction : new extern virtual function void sample_values(); @@ -489,27 +489,27 @@ package soc_ifc_reg_uvm; uvm_reg_map map); virtual function void build(); - this.PAUSER = new("PAUSER"); - this.PAUSER.configure(this, 32, 0, "RW", 0, 'hffffffff, 1, 1, 0); + this.AXI_ID = new("AXI_ID"); + this.AXI_ID.configure(this, 32, 0, "RW", 0, 'hffffffff, 1, 1, 0); if (has_coverage(UVM_CVR_REG_BITS)) begin - foreach(PAUSER_bit_cg[bt]) PAUSER_bit_cg[bt] = new(); + foreach(AXI_ID_bit_cg[bt]) AXI_ID_bit_cg[bt] = new(); end if (has_coverage(UVM_CVR_FIELD_VALS)) fld_cg = new(); endfunction : build - endclass : soc_ifc_reg__CPTRA_TRNG_VALID_PAUSER + endclass : soc_ifc_reg__CPTRA_TRNG_VALID_AXI_ID - // Reg - soc_ifc_reg::CPTRA_TRNG_PAUSER_LOCK - class soc_ifc_reg__CPTRA_TRNG_PAUSER_LOCK extends uvm_reg; + // Reg - soc_ifc_reg::CPTRA_TRNG_AXI_ID_LOCK + class soc_ifc_reg__CPTRA_TRNG_AXI_ID_LOCK extends uvm_reg; protected uvm_reg_data_t m_current; protected uvm_reg_data_t m_data; protected bit m_is_read; - soc_ifc_reg__CPTRA_TRNG_PAUSER_LOCK_bit_cg LOCK_bit_cg[1]; - soc_ifc_reg__CPTRA_TRNG_PAUSER_LOCK_fld_cg fld_cg; + soc_ifc_reg__CPTRA_TRNG_AXI_ID_LOCK_bit_cg LOCK_bit_cg[1]; + soc_ifc_reg__CPTRA_TRNG_AXI_ID_LOCK_fld_cg fld_cg; rand uvm_reg_field LOCK; - function new(string name = "soc_ifc_reg__CPTRA_TRNG_PAUSER_LOCK"); + function new(string name = "soc_ifc_reg__CPTRA_TRNG_AXI_ID_LOCK"); super.new(name, 32, build_coverage(UVM_CVR_ALL)); endfunction : new extern virtual function void sample_values(); @@ -527,7 +527,7 @@ package soc_ifc_reg_uvm; if (has_coverage(UVM_CVR_FIELD_VALS)) fld_cg = new(); endfunction : build - endclass : soc_ifc_reg__CPTRA_TRNG_PAUSER_LOCK + endclass : soc_ifc_reg__CPTRA_TRNG_AXI_ID_LOCK // Reg - soc_ifc_reg::CPTRA_TRNG_DATA class soc_ifc_reg__CPTRA_TRNG_DATA extends uvm_reg; @@ -1164,17 +1164,17 @@ package soc_ifc_reg_uvm; endfunction : build endclass : soc_ifc_reg__CPTRA_WDT_STATUS - // Reg - soc_ifc_reg::CPTRA_FUSE_VALID_PAUSER - class soc_ifc_reg__CPTRA_FUSE_VALID_PAUSER extends uvm_reg; + // Reg - soc_ifc_reg::CPTRA_FUSE_VALID_AXI_ID + class soc_ifc_reg__CPTRA_FUSE_VALID_AXI_ID extends uvm_reg; protected uvm_reg_data_t m_current; protected uvm_reg_data_t m_data; protected bit m_is_read; - soc_ifc_reg__CPTRA_FUSE_VALID_PAUSER_bit_cg PAUSER_bit_cg[32]; - soc_ifc_reg__CPTRA_FUSE_VALID_PAUSER_fld_cg fld_cg; - rand uvm_reg_field PAUSER; + soc_ifc_reg__CPTRA_FUSE_VALID_AXI_ID_bit_cg AXI_ID_bit_cg[32]; + soc_ifc_reg__CPTRA_FUSE_VALID_AXI_ID_fld_cg fld_cg; + rand uvm_reg_field AXI_ID; - function new(string name = "soc_ifc_reg__CPTRA_FUSE_VALID_PAUSER"); + function new(string name = "soc_ifc_reg__CPTRA_FUSE_VALID_AXI_ID"); super.new(name, 32, build_coverage(UVM_CVR_ALL)); endfunction : new extern virtual function void sample_values(); @@ -1184,27 +1184,27 @@ package soc_ifc_reg_uvm; uvm_reg_map map); virtual function void build(); - this.PAUSER = new("PAUSER"); - this.PAUSER.configure(this, 32, 0, "RW", 0, 'hffffffff, 1, 1, 0); + this.AXI_ID = new("AXI_ID"); + this.AXI_ID.configure(this, 32, 0, "RW", 0, 'hffffffff, 1, 1, 0); if (has_coverage(UVM_CVR_REG_BITS)) begin - foreach(PAUSER_bit_cg[bt]) PAUSER_bit_cg[bt] = new(); + foreach(AXI_ID_bit_cg[bt]) AXI_ID_bit_cg[bt] = new(); end if (has_coverage(UVM_CVR_FIELD_VALS)) fld_cg = new(); endfunction : build - endclass : soc_ifc_reg__CPTRA_FUSE_VALID_PAUSER + endclass : soc_ifc_reg__CPTRA_FUSE_VALID_AXI_ID - // Reg - soc_ifc_reg::CPTRA_FUSE_PAUSER_LOCK - class soc_ifc_reg__CPTRA_FUSE_PAUSER_LOCK extends uvm_reg; + // Reg - soc_ifc_reg::CPTRA_FUSE_AXI_ID_LOCK + class soc_ifc_reg__CPTRA_FUSE_AXI_ID_LOCK extends uvm_reg; protected uvm_reg_data_t m_current; protected uvm_reg_data_t m_data; protected bit m_is_read; - soc_ifc_reg__CPTRA_FUSE_PAUSER_LOCK_bit_cg LOCK_bit_cg[1]; - soc_ifc_reg__CPTRA_FUSE_PAUSER_LOCK_fld_cg fld_cg; + soc_ifc_reg__CPTRA_FUSE_AXI_ID_LOCK_bit_cg LOCK_bit_cg[1]; + soc_ifc_reg__CPTRA_FUSE_AXI_ID_LOCK_fld_cg fld_cg; rand uvm_reg_field LOCK; - function new(string name = "soc_ifc_reg__CPTRA_FUSE_PAUSER_LOCK"); + function new(string name = "soc_ifc_reg__CPTRA_FUSE_AXI_ID_LOCK"); super.new(name, 32, build_coverage(UVM_CVR_ALL)); endfunction : new extern virtual function void sample_values(); @@ -1222,7 +1222,7 @@ package soc_ifc_reg_uvm; if (has_coverage(UVM_CVR_FIELD_VALS)) fld_cg = new(); endfunction : build - endclass : soc_ifc_reg__CPTRA_FUSE_PAUSER_LOCK + endclass : soc_ifc_reg__CPTRA_FUSE_AXI_ID_LOCK // Reg - soc_ifc_reg::CPTRA_WDT_CFG class soc_ifc_reg__CPTRA_WDT_CFG extends uvm_reg; @@ -3731,10 +3731,10 @@ package soc_ifc_reg_uvm; rand soc_ifc_reg__CPTRA_FLOW_STATUS CPTRA_FLOW_STATUS; rand soc_ifc_reg__CPTRA_RESET_REASON CPTRA_RESET_REASON; rand soc_ifc_reg__CPTRA_SECURITY_STATE CPTRA_SECURITY_STATE; - rand soc_ifc_reg__CPTRA_MBOX_VALID_PAUSER CPTRA_MBOX_VALID_PAUSER[5]; - rand soc_ifc_reg__CPTRA_MBOX_PAUSER_LOCK CPTRA_MBOX_PAUSER_LOCK[5]; - rand soc_ifc_reg__CPTRA_TRNG_VALID_PAUSER CPTRA_TRNG_VALID_PAUSER; - rand soc_ifc_reg__CPTRA_TRNG_PAUSER_LOCK CPTRA_TRNG_PAUSER_LOCK; + rand soc_ifc_reg__CPTRA_MBOX_VALID_AXI_ID CPTRA_MBOX_VALID_AXI_ID[5]; + rand soc_ifc_reg__CPTRA_MBOX_AXI_ID_LOCK CPTRA_MBOX_AXI_ID_LOCK[5]; + rand soc_ifc_reg__CPTRA_TRNG_VALID_AXI_ID CPTRA_TRNG_VALID_AXI_ID; + rand soc_ifc_reg__CPTRA_TRNG_AXI_ID_LOCK CPTRA_TRNG_AXI_ID_LOCK; rand soc_ifc_reg__CPTRA_TRNG_DATA CPTRA_TRNG_DATA[12]; rand soc_ifc_reg__CPTRA_TRNG_CTRL CPTRA_TRNG_CTRL; rand soc_ifc_reg__CPTRA_TRNG_STATUS CPTRA_TRNG_STATUS; @@ -3755,8 +3755,8 @@ package soc_ifc_reg_uvm; rand soc_ifc_reg__CPTRA_WDT_TIMER2_CTRL CPTRA_WDT_TIMER2_CTRL; rand soc_ifc_reg__CPTRA_WDT_TIMER2_TIMEOUT_PERIOD CPTRA_WDT_TIMER2_TIMEOUT_PERIOD[2]; rand soc_ifc_reg__CPTRA_WDT_STATUS CPTRA_WDT_STATUS; - rand soc_ifc_reg__CPTRA_FUSE_VALID_PAUSER CPTRA_FUSE_VALID_PAUSER; - rand soc_ifc_reg__CPTRA_FUSE_PAUSER_LOCK CPTRA_FUSE_PAUSER_LOCK; + rand soc_ifc_reg__CPTRA_FUSE_VALID_AXI_ID CPTRA_FUSE_VALID_AXI_ID; + rand soc_ifc_reg__CPTRA_FUSE_AXI_ID_LOCK CPTRA_FUSE_AXI_ID_LOCK; rand soc_ifc_reg__CPTRA_WDT_CFG CPTRA_WDT_CFG[2]; rand soc_ifc_reg__CPTRA_iTRNG_ENTROPY_CONFIG_0 CPTRA_iTRNG_ENTROPY_CONFIG_0; rand soc_ifc_reg__CPTRA_iTRNG_ENTROPY_CONFIG_1 CPTRA_iTRNG_ENTROPY_CONFIG_1; @@ -3853,30 +3853,30 @@ package soc_ifc_reg_uvm; this.CPTRA_SECURITY_STATE.build(); this.default_map.add_reg(this.CPTRA_SECURITY_STATE, 'h44); - foreach(this.CPTRA_MBOX_VALID_PAUSER[i0]) begin - this.CPTRA_MBOX_VALID_PAUSER[i0] = new($sformatf("CPTRA_MBOX_VALID_PAUSER[%0d]", i0)); - this.CPTRA_MBOX_VALID_PAUSER[i0].configure(this); + foreach(this.CPTRA_MBOX_VALID_AXI_ID[i0]) begin + this.CPTRA_MBOX_VALID_AXI_ID[i0] = new($sformatf("CPTRA_MBOX_VALID_AXI_ID[%0d]", i0)); + this.CPTRA_MBOX_VALID_AXI_ID[i0].configure(this); - this.CPTRA_MBOX_VALID_PAUSER[i0].build(); - this.default_map.add_reg(this.CPTRA_MBOX_VALID_PAUSER[i0], 'h48 + i0*'h4); + this.CPTRA_MBOX_VALID_AXI_ID[i0].build(); + this.default_map.add_reg(this.CPTRA_MBOX_VALID_AXI_ID[i0], 'h48 + i0*'h4); end - foreach(this.CPTRA_MBOX_PAUSER_LOCK[i0]) begin - this.CPTRA_MBOX_PAUSER_LOCK[i0] = new($sformatf("CPTRA_MBOX_PAUSER_LOCK[%0d]", i0)); - this.CPTRA_MBOX_PAUSER_LOCK[i0].configure(this); + foreach(this.CPTRA_MBOX_AXI_ID_LOCK[i0]) begin + this.CPTRA_MBOX_AXI_ID_LOCK[i0] = new($sformatf("CPTRA_MBOX_AXI_ID_LOCK[%0d]", i0)); + this.CPTRA_MBOX_AXI_ID_LOCK[i0].configure(this); - this.CPTRA_MBOX_PAUSER_LOCK[i0].build(); - this.default_map.add_reg(this.CPTRA_MBOX_PAUSER_LOCK[i0], 'h5c + i0*'h4); + this.CPTRA_MBOX_AXI_ID_LOCK[i0].build(); + this.default_map.add_reg(this.CPTRA_MBOX_AXI_ID_LOCK[i0], 'h5c + i0*'h4); end - this.CPTRA_TRNG_VALID_PAUSER = new("CPTRA_TRNG_VALID_PAUSER"); - this.CPTRA_TRNG_VALID_PAUSER.configure(this); + this.CPTRA_TRNG_VALID_AXI_ID = new("CPTRA_TRNG_VALID_AXI_ID"); + this.CPTRA_TRNG_VALID_AXI_ID.configure(this); - this.CPTRA_TRNG_VALID_PAUSER.build(); - this.default_map.add_reg(this.CPTRA_TRNG_VALID_PAUSER, 'h70); - this.CPTRA_TRNG_PAUSER_LOCK = new("CPTRA_TRNG_PAUSER_LOCK"); - this.CPTRA_TRNG_PAUSER_LOCK.configure(this); + this.CPTRA_TRNG_VALID_AXI_ID.build(); + this.default_map.add_reg(this.CPTRA_TRNG_VALID_AXI_ID, 'h70); + this.CPTRA_TRNG_AXI_ID_LOCK = new("CPTRA_TRNG_AXI_ID_LOCK"); + this.CPTRA_TRNG_AXI_ID_LOCK.configure(this); - this.CPTRA_TRNG_PAUSER_LOCK.build(); - this.default_map.add_reg(this.CPTRA_TRNG_PAUSER_LOCK, 'h74); + this.CPTRA_TRNG_AXI_ID_LOCK.build(); + this.default_map.add_reg(this.CPTRA_TRNG_AXI_ID_LOCK, 'h74); foreach(this.CPTRA_TRNG_DATA[i0]) begin this.CPTRA_TRNG_DATA[i0] = new($sformatf("CPTRA_TRNG_DATA[%0d]", i0)); this.CPTRA_TRNG_DATA[i0].configure(this); @@ -3989,16 +3989,16 @@ package soc_ifc_reg_uvm; this.CPTRA_WDT_STATUS.build(); this.default_map.add_reg(this.CPTRA_WDT_STATUS, 'h104); - this.CPTRA_FUSE_VALID_PAUSER = new("CPTRA_FUSE_VALID_PAUSER"); - this.CPTRA_FUSE_VALID_PAUSER.configure(this); + this.CPTRA_FUSE_VALID_AXI_ID = new("CPTRA_FUSE_VALID_AXI_ID"); + this.CPTRA_FUSE_VALID_AXI_ID.configure(this); - this.CPTRA_FUSE_VALID_PAUSER.build(); - this.default_map.add_reg(this.CPTRA_FUSE_VALID_PAUSER, 'h108); - this.CPTRA_FUSE_PAUSER_LOCK = new("CPTRA_FUSE_PAUSER_LOCK"); - this.CPTRA_FUSE_PAUSER_LOCK.configure(this); + this.CPTRA_FUSE_VALID_AXI_ID.build(); + this.default_map.add_reg(this.CPTRA_FUSE_VALID_AXI_ID, 'h108); + this.CPTRA_FUSE_AXI_ID_LOCK = new("CPTRA_FUSE_AXI_ID_LOCK"); + this.CPTRA_FUSE_AXI_ID_LOCK.configure(this); - this.CPTRA_FUSE_PAUSER_LOCK.build(); - this.default_map.add_reg(this.CPTRA_FUSE_PAUSER_LOCK, 'h10c); + this.CPTRA_FUSE_AXI_ID_LOCK.build(); + this.default_map.add_reg(this.CPTRA_FUSE_AXI_ID_LOCK, 'h10c); foreach(this.CPTRA_WDT_CFG[i0]) begin this.CPTRA_WDT_CFG[i0] = new($sformatf("CPTRA_WDT_CFG[%0d]", i0)); this.CPTRA_WDT_CFG[i0].configure(this); diff --git a/src/soc_ifc/rtl/soc_ifc_top.sv b/src/soc_ifc/rtl/soc_ifc_top.sv index 119ebacc5..288fc346c 100644 --- a/src/soc_ifc/rtl/soc_ifc_top.sv +++ b/src/soc_ifc/rtl/soc_ifc_top.sv @@ -20,9 +20,10 @@ module soc_ifc_top import soc_ifc_pkg::*; import soc_ifc_reg_pkg::*; #( - parameter APB_ADDR_WIDTH = 18 - ,parameter APB_DATA_WIDTH = 32 - ,parameter APB_USER_WIDTH = 32 + parameter AXI_ADDR_WIDTH = 18 + ,parameter AXI_DATA_WIDTH = 32 + ,parameter AXI_ID_WIDTH = 32 + ,parameter AXI_USER_WIDTH = 32 ,parameter AHB_ADDR_WIDTH = 18 ,parameter AHB_DATA_WIDTH = 32 ) @@ -49,16 +50,20 @@ module soc_ifc_top input logic BootFSM_BrkPoint, output logic [1:0][31:0] generic_output_wires, - //SoC APB Interface - input logic [APB_ADDR_WIDTH-1:0] paddr_i, - input logic psel_i, - input logic penable_i, - input logic pwrite_i, - input logic [APB_DATA_WIDTH-1:0] pwdata_i, - input logic [APB_USER_WIDTH-1:0] pauser_i, - output logic pready_o, - output logic [APB_DATA_WIDTH-1:0] prdata_o, - output logic pslverr_o, + //SoC AXI Interface + axi_if.w_sub s_axi_w_if, + axi_if.r_sub s_axi_r_if, + +// //SoC APB Interface +// input logic [APB_ADDR_WIDTH-1:0] paddr_i, +// input logic psel_i, +// input logic penable_i, +// input logic pwrite_i, +// input logic [APB_DATA_WIDTH-1:0] pwdata_i, +// input logic [APB_USER_WIDTH-1:0] pauser_i, +// output logic pready_o, +// output logic [APB_DATA_WIDTH-1:0] prdata_o, +// output logic pslverr_o, //uC AHB Lite Interface input logic [AHB_ADDR_WIDTH-1:0] haddr_i, @@ -130,7 +135,7 @@ module soc_ifc_top //gasket to assemble mailbox request logic soc_req_dv, soc_req_hold; logic soc_req_error; -logic [APB_DATA_WIDTH-1:0] soc_req_rdata; +logic [AXI_DATA_WIDTH-1:0] soc_req_rdata; soc_ifc_req_t soc_req; //gasket to assemble mailbox request @@ -168,7 +173,7 @@ logic [MBOX_ADDR_W-1:0] sha_sram_req_addr; mbox_sram_resp_t sha_sram_resp; logic sha_sram_hold; -logic [4:0][APB_USER_WIDTH-1:0] valid_mbox_users; +logic [4:0][AXI_ID_WIDTH-1:0] valid_mbox_ids; // Pulse signals to trigger interrupts logic uc_mbox_data_avail; @@ -183,7 +188,7 @@ logic sram_double_ecc_error; logic soc_req_mbox_lock; logic [1:0] generic_input_toggle; mbox_protocol_error_t mbox_protocol_error; -logic mbox_inv_user_p; +logic mbox_inv_id_p; logic iccm_unlock; logic fw_upd_rst_executed; @@ -224,8 +229,8 @@ logic t2_timeout_p; logic wdt_error_t1_intr_serviced; logic wdt_error_t2_intr_serviced; -logic valid_trng_user; -logic valid_fuse_user; +logic valid_trng_id; +logic valid_fuse_id; boot_fsm_state_e boot_fsm_ps; @@ -260,42 +265,41 @@ soc_ifc_boot_fsm i_soc_ifc_boot_fsm ( always_comb soc_ifc_reg_hwif_in.CPTRA_RESET_REASON.FW_UPD_RESET.we = fw_upd_rst_executed; always_comb soc_ifc_reg_hwif_in.CPTRA_RESET_REASON.FW_UPD_RESET.next = 1; -//APB Interface -//This module contains the logic for interfacing with the SoC over the APB Interface -//The SoC sends read and write requests using APB Protocol -//This wrapper decodes that protocol and issues requests to the arbitration block -apb_slv_sif #( - .ADDR_WIDTH(APB_ADDR_WIDTH), - .DATA_WIDTH(APB_DATA_WIDTH), - .USER_WIDTH(APB_USER_WIDTH) -) -i_apb_slv_sif_soc_ifc ( - //AMBA APB INF - .PCLK(soc_ifc_clk_cg), - .PRESETn(cptra_noncore_rst_b), - .PADDR(paddr_i), - .PPROT('0), - .PSEL(psel_i), - .PENABLE(penable_i), - .PWRITE(pwrite_i), - .PWDATA(pwdata_i), - .PAUSER(pauser_i), - - .PREADY(pready_o), - .PSLVERR(pslverr_o), - .PRDATA(prdata_o), +//AXI Interface +//This module contains the logic for interfacing with the SoC over the AXI Interface +//The SoC sends read and write requests using AXI Protocol +//This wrapper decodes that protocol, collapses the full-duplex protocol to +// simplex, and issues requests to the soc_ifc arbitration block +axi_sub #( + .AW (AXI_ADDR_WIDTH), + .DW (AXI_DATA_WIDTH), + .UW (AXI_USER_WIDTH), + .IW (AXI_ID_WIDTH ), + .EX_EN(0 ), + .C_LAT(0 ) +) i_axi_sub_sif_soc_ifc ( + .clk (soc_ifc_clk_cg ), + .rst_n(cptra_noncore_rst_b), + + // AXI INF + .s_axi_w_if(s_axi_w_if), + .s_axi_r_if(s_axi_r_if), //COMPONENT INF - .dv(soc_req_dv), - .req_hold(soc_req_hold), + .dv (soc_req_dv ), + .addr (soc_req.addr ), // Byte address .write(soc_req.write), - .user(soc_req.user), - .wdata(soc_req.wdata), - .addr(soc_req.addr), - .slverr(soc_req_error), - .rdata(soc_req_rdata) + .user (/*soc_req.user*/), + .id (soc_req.id ), + .wdata(soc_req.wdata), // Requires: Component dwidth == AXI dwidth + .wstrb(soc_req.wstrb), // Requires: Component dwidth == AXI dwidth + .rdata(soc_req_rdata), // Requires: Component dwidth == AXI dwidth + .last ( ), // Asserted with final 'dv' of a burst + .hld (soc_req_hold ), + .err (soc_req_error) ); -//req from apb is for soc always + +//req from axi is for soc always always_comb soc_req.soc_req = 1'b1; //AHB-Lite Interface @@ -335,7 +339,8 @@ i_ahb_slv_sif_soc_ifc ( .rdata(uc_req_rdata) ); -always_comb uc_req.user = '1; +//always_comb uc_req.user = '1; +always_comb uc_req.id = '1; always_comb uc_req.soc_req = 1'b0; //mailbox_arb @@ -343,13 +348,13 @@ always_comb uc_req.soc_req = 1'b0; //Requests are serviced using round robin arbitration soc_ifc_arb #( - .APB_USER_WIDTH(APB_USER_WIDTH) + .AXI_ID_WIDTH(AXI_ID_WIDTH) ) i_soc_ifc_arb ( .clk(soc_ifc_clk_cg), .rst_b(cptra_noncore_rst_b), - .valid_mbox_users(valid_mbox_users), - .valid_fuse_user(valid_fuse_user), + .valid_mbox_ids(valid_mbox_ids), + .valid_fuse_id(valid_fuse_id), //UC inf .uc_req_dv(uc_req_dv), .uc_req_hold(uc_req_hold), @@ -546,27 +551,27 @@ end always_comb scan_mode_p = scan_mode & ~scan_mode_f; -//Filtering by PAUSER +//Filtering by ID always_comb begin for (int i=0; i<5; i++) begin //once locked, can't be cleared until reset - soc_ifc_reg_hwif_in.CPTRA_MBOX_PAUSER_LOCK[i].LOCK.swwel = soc_ifc_reg_hwif_out.CPTRA_MBOX_PAUSER_LOCK[i].LOCK.value; - //lock the writes to valid user field once lock is set - soc_ifc_reg_hwif_in.CPTRA_MBOX_VALID_PAUSER[i].PAUSER.swwel = soc_ifc_reg_hwif_out.CPTRA_MBOX_PAUSER_LOCK[i].LOCK.value; - //If integrator set PAUSER values at integration time, pick it up from the define - valid_mbox_users[i] = CPTRA_SET_MBOX_PAUSER_INTEG[i] ? CPTRA_MBOX_VALID_PAUSER[i][APB_USER_WIDTH-1:0] : - soc_ifc_reg_hwif_out.CPTRA_MBOX_PAUSER_LOCK[i].LOCK.value ? - soc_ifc_reg_hwif_out.CPTRA_MBOX_VALID_PAUSER[i].PAUSER.value[APB_USER_WIDTH-1:0] : CPTRA_DEF_MBOX_VALID_PAUSER; + soc_ifc_reg_hwif_in.CPTRA_MBOX_AXI_ID_LOCK[i].LOCK.swwel = soc_ifc_reg_hwif_out.CPTRA_MBOX_AXI_ID_LOCK[i].LOCK.value; + //lock the writes to valid id field once lock is set + soc_ifc_reg_hwif_in.CPTRA_MBOX_VALID_AXI_ID[i].AXI_ID.swwel = soc_ifc_reg_hwif_out.CPTRA_MBOX_AXI_ID_LOCK[i].LOCK.value; + //If integrator set AXI_ID values at integration time, pick it up from the define + valid_mbox_ids[i] = CPTRA_SET_MBOX_AXI_ID_INTEG[i] ? CPTRA_MBOX_VALID_AXI_ID[i][AXI_ID_WIDTH-1:0] : + soc_ifc_reg_hwif_out.CPTRA_MBOX_AXI_ID_LOCK[i].LOCK.value ? + soc_ifc_reg_hwif_out.CPTRA_MBOX_VALID_AXI_ID[i].AXI_ID.value[AXI_ID_WIDTH-1:0] : CPTRA_DEF_MBOX_VALID_AXI_ID; end end -//can't write to trng valid user after it is locked -always_comb soc_ifc_reg_hwif_in.CPTRA_TRNG_VALID_PAUSER.PAUSER.swwel = soc_ifc_reg_hwif_out.CPTRA_TRNG_PAUSER_LOCK.LOCK.value; -always_comb soc_ifc_reg_hwif_in.CPTRA_TRNG_PAUSER_LOCK.LOCK.swwel = soc_ifc_reg_hwif_out.CPTRA_TRNG_PAUSER_LOCK.LOCK.value; +//can't write to trng valid id after it is locked +always_comb soc_ifc_reg_hwif_in.CPTRA_TRNG_VALID_AXI_ID.AXI_ID.swwel = soc_ifc_reg_hwif_out.CPTRA_TRNG_AXI_ID_LOCK.LOCK.value; +always_comb soc_ifc_reg_hwif_in.CPTRA_TRNG_AXI_ID_LOCK.LOCK.swwel = soc_ifc_reg_hwif_out.CPTRA_TRNG_AXI_ID_LOCK.LOCK.value; -//fuse register pauser fields -always_comb soc_ifc_reg_hwif_in.CPTRA_FUSE_VALID_PAUSER.PAUSER.swwel = soc_ifc_reg_hwif_out.CPTRA_FUSE_PAUSER_LOCK.LOCK.value; -always_comb soc_ifc_reg_hwif_in.CPTRA_FUSE_PAUSER_LOCK.LOCK.swwel = soc_ifc_reg_hwif_out.CPTRA_FUSE_PAUSER_LOCK.LOCK.value; +//fuse register AXI ID fields +always_comb soc_ifc_reg_hwif_in.CPTRA_FUSE_VALID_AXI_ID.AXI_ID.swwel = soc_ifc_reg_hwif_out.CPTRA_FUSE_AXI_ID_LOCK.LOCK.value; +always_comb soc_ifc_reg_hwif_in.CPTRA_FUSE_AXI_ID_LOCK.LOCK.swwel = soc_ifc_reg_hwif_out.CPTRA_FUSE_AXI_ID_LOCK.LOCK.value; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Can't write to RW-able fuses once fuse_done is set (implies the register is being locked using the fuse_wr_done) @@ -622,16 +627,16 @@ always_comb soc_ifc_reg_hwif_in.fuse_soc_stepping_id.soc_stepping_id.swwel = soc always_comb soc_ifc_reg_hwif_in.CPTRA_FUSE_WR_DONE.done.swwe = soc_ifc_reg_req_data.soc_req & ~soc_ifc_reg_hwif_out.CPTRA_FUSE_WR_DONE.done.value; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//When TRNG_PAUSER_LOCK is one only allow valid users to write to TRNG -//If TRNG_PAUSER_LOCK is zero allow any user to write to TRNG -always_comb valid_trng_user = soc_ifc_reg_req_data.soc_req & (~soc_ifc_reg_hwif_out.CPTRA_TRNG_PAUSER_LOCK.LOCK.value | - (soc_ifc_reg_req_data.user == soc_ifc_reg_hwif_out.CPTRA_TRNG_VALID_PAUSER.PAUSER.value[APB_USER_WIDTH-1:0])); +//When TRNG_AXI_ID_LOCK is one only allow valid ids to write to TRNG +//If TRNG_AXI_ID_LOCK is zero allow any id to write to TRNG +always_comb valid_trng_id = soc_ifc_reg_req_data.soc_req & (~soc_ifc_reg_hwif_out.CPTRA_TRNG_AXI_ID_LOCK.LOCK.value | + (soc_ifc_reg_req_data.id == soc_ifc_reg_hwif_out.CPTRA_TRNG_VALID_AXI_ID.AXI_ID.value[AXI_ID_WIDTH-1:0])); -always_comb soc_ifc_reg_hwif_in.CPTRA_TRNG_STATUS.DATA_WR_DONE.swwe = valid_trng_user; +always_comb soc_ifc_reg_hwif_in.CPTRA_TRNG_STATUS.DATA_WR_DONE.swwe = valid_trng_id; always_comb begin for (int i = 0; i < 12; i++) begin - soc_ifc_reg_hwif_in.CPTRA_TRNG_DATA[i].DATA.swwe = valid_trng_user; + soc_ifc_reg_hwif_in.CPTRA_TRNG_DATA[i].DATA.swwe = valid_trng_id; soc_ifc_reg_hwif_in.CPTRA_TRNG_DATA[i].DATA.hwclr = soc_ifc_reg_hwif_out.CPTRA_TRNG_CTRL.clear.value; end end @@ -640,11 +645,11 @@ end always_comb soc_ifc_reg_hwif_in.CPTRA_TRNG_STATUS.DATA_WR_DONE.hwclr = ~soc_ifc_reg_hwif_out.CPTRA_TRNG_STATUS.DATA_REQ.value; generate - if (CPTRA_SET_FUSE_PAUSER_INTEG) begin - always_comb valid_fuse_user = soc_req_dv & (soc_req.user == CPTRA_FUSE_VALID_PAUSER); + if (CPTRA_SET_FUSE_AXI_ID_INTEG) begin + always_comb valid_fuse_id = soc_req_dv & (soc_req.id == CPTRA_FUSE_VALID_AXI_ID); end else begin - always_comb valid_fuse_user = soc_req_dv & (~soc_ifc_reg_hwif_out.CPTRA_FUSE_PAUSER_LOCK.LOCK.value | - (soc_req.user == soc_ifc_reg_hwif_out.CPTRA_FUSE_VALID_PAUSER.PAUSER.value[APB_USER_WIDTH-1:0])); + always_comb valid_fuse_id = soc_req_dv & (~soc_ifc_reg_hwif_out.CPTRA_FUSE_AXI_ID_LOCK.LOCK.value | + (soc_req.id == soc_ifc_reg_hwif_out.CPTRA_FUSE_VALID_AXI_ID.AXI_ID.value[AXI_ID_WIDTH-1:0])); end endgenerate // Generate a pulse to set the interrupt bit @@ -660,7 +665,7 @@ end always_comb uc_cmd_avail_p = uc_mbox_data_avail & !uc_mbox_data_avail_d; // Pulse input to soc_ifc_reg to set the interrupt status bit and generate interrupt output (if enabled) always_comb soc_ifc_reg_hwif_in.intr_block_rf.error_internal_intr_r.error_internal_sts.hwset = 1'b0; // TODO -always_comb soc_ifc_reg_hwif_in.intr_block_rf.error_internal_intr_r.error_inv_dev_sts.hwset = mbox_inv_user_p; // All invalid users, or only 'valid user but != mbox_user.user'? +always_comb soc_ifc_reg_hwif_in.intr_block_rf.error_internal_intr_r.error_inv_dev_sts.hwset = mbox_inv_id_p; // All invalid ids, or only 'valid id but != mbox_id.id'? always_comb soc_ifc_reg_hwif_in.intr_block_rf.error_internal_intr_r.error_cmd_fail_sts.hwset = |mbox_protocol_error; // Set by any protocol error violation (mirrors the bits in CPTRA_HW_ERROR_NON_FATAL) always_comb soc_ifc_reg_hwif_in.intr_block_rf.error_internal_intr_r.error_bad_fuse_sts.hwset = 1'b0; // TODO always_comb soc_ifc_reg_hwif_in.intr_block_rf.error_internal_intr_r.error_iccm_blocked_sts.hwset = iccm_axs_blocked; @@ -705,13 +710,13 @@ soc_ifc_reg i_soc_ifc_reg ( .hwif_out(soc_ifc_reg_hwif_out) ); -//Mask read data to TRNG DATA when TRNG PAUSER is locked and the requester isn't the correct PAUSER +//Mask read data to TRNG DATA when TRNG AXI_ID is locked and the requester isn't the correct AXI_ID always_comb begin soc_ifc_reg_rdata_mask = 0; for (int i = 0; i < 12; i++) begin soc_ifc_reg_rdata_mask |= soc_ifc_reg_req_data.soc_req & soc_ifc_reg_hwif_out.CPTRA_TRNG_DATA[i].DATA.swacc & - soc_ifc_reg_hwif_out.CPTRA_TRNG_PAUSER_LOCK.LOCK.value & - (soc_ifc_reg_req_data.user != soc_ifc_reg_hwif_out.CPTRA_TRNG_VALID_PAUSER.PAUSER.value[APB_USER_WIDTH-1:0]); + soc_ifc_reg_hwif_out.CPTRA_TRNG_AXI_ID_LOCK.LOCK.value & + (soc_ifc_reg_req_data.id != soc_ifc_reg_hwif_out.CPTRA_TRNG_VALID_AXI_ID.AXI_ID.value[AXI_ID_WIDTH-1:0]); end end @@ -786,7 +791,7 @@ assign timer_intr = {soc_ifc_reg_hwif_out.internal_rv_mtime_h.count_h.value //SHA Accelerator sha512_acc_top #( - .DATA_WIDTH(APB_DATA_WIDTH) + .DATA_WIDTH(AXI_DATA_WIDTH) ) i_sha512_acc_top ( .clk(soc_ifc_clk_cg), @@ -839,7 +844,7 @@ i_mbox ( .uc_mbox_data_avail(uc_mbox_data_avail), .soc_req_mbox_lock(soc_req_mbox_lock), .mbox_protocol_error(mbox_protocol_error), - .mbox_inv_pauser_axs(mbox_inv_user_p), + .mbox_inv_axi_id_axs(mbox_inv_id_p), .dmi_inc_rdptr(dmi_inc_rdptr), .dmi_reg(mbox_dmi_reg) ); @@ -990,6 +995,11 @@ always_ff @(posedge rdc_clk_cg or negedge cptra_pwrgood) begin end end +`CALIPTRA_ASSERT (AXI_SUB_DATA_WIDTH, SOC_IFC_ADDR_W == AXI_ADDR_WIDTH, clk, !cptra_noncore_rst_b) +`CALIPTRA_ASSERT (AXI_SUB_DATA_WIDTH, SOC_IFC_DATA_W == AXI_DATA_WIDTH, clk, !cptra_noncore_rst_b) +`CALIPTRA_ASSERT (AXI_SUB_DATA_WIDTH, SOC_IFC_USER_W == AXI_USER_WIDTH, clk, !cptra_noncore_rst_b) +`CALIPTRA_ASSERT (AXI_SUB_DATA_WIDTH, SOC_IFC_ID_W == AXI_ID_WIDTH, clk, !cptra_noncore_rst_b) + `CALIPTRA_ASSERT_KNOWN(ERR_AHB_INF_X, {hreadyout_o,hresp_o}, clk, !cptra_noncore_rst_b) //this generates an NMI in the core, but we don't have a handler so it just hangs `CALIPTRA_ASSERT_NEVER(ERR_SOC_IFC_AHB_ERR, hresp_o, clk, !cptra_noncore_rst_b) From 3bcc3b8edfb23ffbb27873fd9661c5ca832b97d1 Mon Sep 17 00:00:00 2001 From: Wiktoria Kuna Date: Tue, 4 Jun 2024 15:34:20 +0200 Subject: [PATCH 22/58] axi_sub_wr: Fix rp valid/ready access Ready & valid are 1-bit wide, do not access using bit select / range. Signed-off-by: Wiktoria Kuna --- src/axi/rtl/axi_sub_wr.sv | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/axi/rtl/axi_sub_wr.sv b/src/axi/rtl/axi_sub_wr.sv index cfd3998e2..ed60926c7 100644 --- a/src/axi/rtl/axi_sub_wr.sv +++ b/src/axi/rtl/axi_sub_wr.sv @@ -133,7 +133,7 @@ module axi_sub_wr import axi_pkg::*; #( // Only accept request when we have a guaranteed slot in the response buffer // to put the response - assign req_ready = (!txn_active || (txn_final_beat && !s_axi_if.bvalid)) && rp_ready[0]; + assign req_ready = (!txn_active || (txn_final_beat && !s_axi_if.bvalid)) && rp_ready; // Indicates there are still reqs to be issued towards component. // This active signal deasserts after final dv to component @@ -285,7 +285,7 @@ module axi_sub_wr import axi_pkg::*; #( // There is guaranteed to be space in the skid buffer because new // requests are stalled (AWREADY=0) until this buffer is ready. always_comb begin - rp_valid[0] = txn_final_beat; + rp_valid = txn_final_beat; rp_resp[0] = txn_allow && (txn_err || err) ? AXI_RESP_SLVERR : txn_allow && txn_ctx.lock ? AXI_RESP_EXOKAY : AXI_RESP_OKAY; @@ -302,8 +302,8 @@ module axi_sub_wr import axi_pkg::*; #( ) i_rsp_skd ( .i_clk (clk ), .i_reset(!rst_n ), - .i_valid(rp_valid[0] ), - .o_ready(rp_ready[0] ), + .i_valid(rp_valid ), + .o_ready(rp_ready ), .i_data ({rp_resp[0], rp_id[0]} ), .o_valid(s_axi_if.bvalid ), From 2faf5ccb68fde49897483a45c2adc499998f9ef0 Mon Sep 17 00:00:00 2001 From: Wiktoria Kuna Date: Tue, 4 Jun 2024 15:35:55 +0200 Subject: [PATCH 23/58] axi_sub_arb: Fix arbiter read grant condition When 'r_pri' is not set, read operation should be granted only if a read 'r_dv' is pending and there's no required write action 'w_dv'. Signed-off-by: Wiktoria Kuna --- src/axi/rtl/axi_sub_arb.sv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/axi/rtl/axi_sub_arb.sv b/src/axi/rtl/axi_sub_arb.sv index aa770372c..df5dcc515 100644 --- a/src/axi/rtl/axi_sub_arb.sv +++ b/src/axi/rtl/axi_sub_arb.sv @@ -113,7 +113,7 @@ module axi_sub_arb import axi_pkg::*; #( // 3'b111: r_win = 1; // endcase if (r_pri) r_win = r_dv || !w_dv; - else r_win = w_dv || !r_dv; + else r_win = r_dv && !w_dv; end always_comb begin From e50cda07d478730639bcc669bf3e5e13fed299c2 Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Tue, 4 Jun 2024 10:24:27 -0700 Subject: [PATCH 24/58] Remove LENB override; fix resp-pipe part-select in axi_sub_wr --- src/axi/rtl/axi_sub_rd.sv | 3 +-- src/axi/rtl/axi_sub_wr.sv | 17 ++++++++--------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/axi/rtl/axi_sub_rd.sv b/src/axi/rtl/axi_sub_rd.sv index b7baf53a9..ad5fb5c83 100644 --- a/src/axi/rtl/axi_sub_rd.sv +++ b/src/axi/rtl/axi_sub_rd.sv @@ -171,8 +171,7 @@ module axi_sub_rd import axi_pkg::*; #( // Use full address to calculate next address (in case of arsize < data width) axi_addr #( .AW (AW), - .DW (DW), - .LENB(8 ) + .DW (DW) ) i_axi_addr ( .i_last_addr(txn_ctx.addr ), .i_size (txn_ctx.size ), // 1b, 2b, 4b, 8b, etc diff --git a/src/axi/rtl/axi_sub_wr.sv b/src/axi/rtl/axi_sub_wr.sv index ed60926c7..9b4be8693 100644 --- a/src/axi/rtl/axi_sub_wr.sv +++ b/src/axi/rtl/axi_sub_wr.sv @@ -204,8 +204,7 @@ module axi_sub_wr import axi_pkg::*; #( // Use full address to calculate next address (in case of AxSIZE < data width) axi_addr #( .AW (AW), - .DW (DW), - .LENB(8 ) + .DW (DW) ) i_axi_addr ( .i_last_addr(txn_ctx.addr ), .i_size (txn_ctx.size ), // 1b, 2b, 4b, 8b, etc @@ -285,11 +284,11 @@ module axi_sub_wr import axi_pkg::*; #( // There is guaranteed to be space in the skid buffer because new // requests are stalled (AWREADY=0) until this buffer is ready. always_comb begin - rp_valid = txn_final_beat; - rp_resp[0] = txn_allow && (txn_err || err) ? AXI_RESP_SLVERR : - txn_allow && txn_ctx.lock ? AXI_RESP_EXOKAY : - AXI_RESP_OKAY; - rp_id[0] = txn_ctx.id; + rp_valid = txn_final_beat; + rp_resp = txn_allow && (txn_err || err) ? AXI_RESP_SLVERR : + txn_allow && txn_ctx.lock ? AXI_RESP_EXOKAY : + AXI_RESP_OKAY; + rp_id = txn_ctx.id; end skidbuffer #( @@ -304,8 +303,8 @@ module axi_sub_wr import axi_pkg::*; #( .i_reset(!rst_n ), .i_valid(rp_valid ), .o_ready(rp_ready ), - .i_data ({rp_resp[0], - rp_id[0]} ), + .i_data ({rp_resp, + rp_id} ), .o_valid(s_axi_if.bvalid ), .i_ready(s_axi_if.bready ), .o_data ({s_axi_if.bresp, From 1ca975af12781171cd181a249489dbe9e81fe346 Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Wed, 12 Jun 2024 11:06:07 -0700 Subject: [PATCH 25/58] AXI sub tb integration -- compiles and passes smoke_test_hw_config --- src/aes/config/aes.vf | 2 +- src/axi/config/axi_pkg.vf | 4 + src/axi/config/axi_sub.vf | 24 + src/axi/config/compile.yml | 25 +- src/axi/rtl/axi_if.sv | 190 +- src/axi/rtl/axi_pkg.sv | 23 - src/axi/rtl/axi_sub.sv | 5 +- src/axi/rtl/axi_sub_rd.sv | 35 +- src/axi/rtl/axi_sub_wr.sv | 32 +- src/axi/tb/axi_sub_tb.sv | 126 ++ src/caliptra_prim/config/caliptra_prim.vf | 2 +- src/caliptra_prim/config/caliptra_prim_pkg.vf | 1 + .../config/caliptra_prim_generic.vf | 2 +- src/csrng/config/csrng.vf | 2 +- src/csrng/config/csrng_tb.vf | 2 +- src/ecc/uvmf_ecc/config/uvmf_ecc.vf | 4 +- src/entropy_src/config/entropy_src.vf | 2 +- src/entropy_src/config/entropy_src_tb.vf | 2 +- src/hmac/uvmf_2022/config/uvmf_hmac.vf | 5 +- src/integration/config/caliptra_top.vf | 11 +- src/integration/config/caliptra_top_tb.vf | 11 +- .../config/caliptra_top_trng_tb.vf | 9 + src/integration/config/compile.yml | 1 + src/integration/rtl/caliptra_top.sv | 33 +- src/integration/rtl/config_defines.svh | 1 - src/integration/tb/caliptra_top_tb.sv | 1744 +++++++++-------- .../config/uvmf_caliptra_top.vf | 13 +- .../config/uvmf_caliptra_top_itrng.vf | 13 +- src/soc_ifc/rtl/mbox.sv | 2 +- src/soc_ifc/rtl/sha512_acc_top.sv | 2 +- src/soc_ifc/rtl/soc_ifc_pkg.sv | 11 +- src/soc_ifc/rtl/soc_ifc_top.sv | 9 +- src/spi_host/config/spi_host.vf | 2 +- src/uart/config/uart.vf | 2 +- src/uart/config/uart_tb.vf | 2 +- tools/scripts/Makefile | 10 +- 36 files changed, 1432 insertions(+), 932 deletions(-) create mode 100644 src/axi/config/axi_pkg.vf create mode 100644 src/axi/config/axi_sub.vf create mode 100644 src/axi/tb/axi_sub_tb.sv diff --git a/src/aes/config/aes.vf b/src/aes/config/aes.vf index 9592049a5..c3f49375b 100644 --- a/src/aes/config/aes.vf +++ b/src/aes/config/aes.vf @@ -88,4 +88,4 @@ ${CALIPTRA_ROOT}/src/aes/rtl/aes_shift_rows.sv ${CALIPTRA_ROOT}/src/aes/rtl/aes_mix_single_column.sv ${CALIPTRA_ROOT}/src/aes/rtl/aes_cipher_control.sv ${CALIPTRA_ROOT}/src/aes/rtl/aes_prng_masking.sv -${CALIPTRA_ROOT}/src/aes/rtl/aes_key_expand.sv +${CALIPTRA_ROOT}/src/aes/rtl/aes_key_expand.sv \ No newline at end of file diff --git a/src/axi/config/axi_pkg.vf b/src/axi/config/axi_pkg.vf new file mode 100644 index 000000000..a7b7a0d6c --- /dev/null +++ b/src/axi/config/axi_pkg.vf @@ -0,0 +1,4 @@ ++incdir+${CALIPTRA_ROOT}/src/axi/rtl +${CALIPTRA_ROOT}/src/axi/rtl/axi_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_if.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_if.sv \ No newline at end of file diff --git a/src/axi/config/axi_sub.vf b/src/axi/config/axi_sub.vf new file mode 100644 index 000000000..9f41afd9f --- /dev/null +++ b/src/axi/config/axi_sub.vf @@ -0,0 +1,24 @@ ++incdir+${CALIPTRA_ROOT}/src/integration/rtl ++incdir+${CALIPTRA_ROOT}/src/libs/rtl ++incdir+${CALIPTRA_ROOT}/src/axi/rtl +${CALIPTRA_ROOT}/src/integration/rtl/config_defines.svh +${CALIPTRA_ROOT}/src/integration/rtl/caliptra_reg_defines.svh +${CALIPTRA_ROOT}/src/libs/rtl/caliptra_sva.svh +${CALIPTRA_ROOT}/src/libs/rtl/caliptra_macros.svh +${CALIPTRA_ROOT}/src/libs/rtl/caliptra_sram.sv +${CALIPTRA_ROOT}/src/libs/rtl/ahb_defines_pkg.sv +${CALIPTRA_ROOT}/src/libs/rtl/caliptra_ahb_srom.sv +${CALIPTRA_ROOT}/src/libs/rtl/apb_slv_sif.sv +${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv +${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv +${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv +${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_if.sv +${CALIPTRA_ROOT}/src/libs/rtl/ahb_to_reg_adapter.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_addr.v +${CALIPTRA_ROOT}/src/axi/rtl/skidbuffer.v +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_rd.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_wr.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_arb.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub.sv \ No newline at end of file diff --git a/src/axi/config/compile.yml b/src/axi/config/compile.yml index 57774c8d0..43a62d4fa 100644 --- a/src/axi/config/compile.yml +++ b/src/axi/config/compile.yml @@ -1,22 +1,31 @@ --- -provides: [axi_sub] +provides: [axi_pkg] schema_version: 2.4.0 -requires: - - libs targets: tb: directories: [$COMPILE_ROOT/rtl] files: - - $COMPILE_ROOT/rtl/axi_if.sv - $COMPILE_ROOT/rtl/axi_pkg.sv - - $COMPILE_ROOT/rtl/axi_addr.v - - $COMPILE_ROOT/rtl/skidbuffer.v - - $COMPILE_ROOT/rtl/axi_sub_rd.sv + - $COMPILE_ROOT/rtl/axi_if.sv rtl: directories: [$COMPILE_ROOT/rtl] files: - - $COMPILE_ROOT/rtl/axi_if.sv - $COMPILE_ROOT/rtl/axi_pkg.sv + - $COMPILE_ROOT/rtl/axi_if.sv +--- +provides: [axi_sub] +schema_version: 2.4.0 +requires: + - libs + - axi_pkg +targets: + rtl: + directories: [$COMPILE_ROOT/rtl] + files: - $COMPILE_ROOT/rtl/axi_addr.v - $COMPILE_ROOT/rtl/skidbuffer.v - $COMPILE_ROOT/rtl/axi_sub_rd.sv + - $COMPILE_ROOT/rtl/axi_sub_wr.sv + - $COMPILE_ROOT/rtl/axi_sub_arb.sv + - $COMPILE_ROOT/rtl/axi_sub.sv + tops: [axi_sub] diff --git a/src/axi/rtl/axi_if.sv b/src/axi/rtl/axi_if.sv index 207589863..ab727677d 100644 --- a/src/axi/rtl/axi_if.sv +++ b/src/axi/rtl/axi_if.sv @@ -16,52 +16,52 @@ // Signals for a standard AXI4 compliant interface // -interface axi_if #(parameter integer AW = 32, parameter integer DW = 32, parameter integer IW = 3, parameter integer UW = 32); +interface axi_if #(parameter integer AW = 32, parameter integer DW = 32, parameter integer IW = 3, parameter integer UW = 32) (input logic clk, input logic rst_n); import axi_pkg::*; // AXI AR - logic [AW-1:0] araddr; - logic [1:0] arburst; - logic [2:0] arsize; - logic [7:0] arlen; - logic [UW-1:0] aruser; - logic [IW-1:0] arid; - logic arlock; - logic arvalid; - logic arready; + logic [AW-1:0] araddr; + logic [$bits(axi_burst_e)-1:0] arburst; + logic [2:0] arsize; + logic [7:0] arlen; + logic [UW-1:0] aruser; + logic [IW-1:0] arid; + logic arlock; + logic arvalid; + logic arready; // AXI R - logic [DW-1:0] rdata; - logic [1:0] rresp; - logic [IW-1:0] rid; - logic rlast; - logic rvalid; - logic rready; + logic [DW-1:0] rdata; + logic [$bits(axi_resp_e)-1:0] rresp; + logic [IW-1:0] rid; + logic rlast; + logic rvalid; + logic rready; // AXI AW - logic [AW-1:0] awaddr; - logic [1:0] awburst; - logic [2:0] awsize; - logic [7:0] awlen; - logic [UW-1:0] awuser; - logic [IW-1:0] awid; - logic awlock; - logic awvalid; - logic awready; + logic [AW-1:0] awaddr; + logic [$bits(axi_burst_e)-1:0] awburst; + logic [2:0] awsize; + logic [7:0] awlen; + logic [UW-1:0] awuser; + logic [IW-1:0] awid; + logic awlock; + logic awvalid; + logic awready; // AXI W - logic [DW-1:0] wdata; - logic [DW/8-1:0] wstrb; - logic wvalid; - logic wready; - logic wlast; + logic [DW-1:0] wdata; + logic [DW/8-1:0] wstrb; + logic wvalid; + logic wready; + logic wlast; // AXI B - logic [1:0] bresp; - logic [IW-1:0] bid; - logic bvalid; - logic bready; + logic [$bits(axi_resp_e)-1:0] bresp; + logic [IW-1:0] bid; + logic bvalid; + logic bready; // Modport for read manager modport r_mgr ( @@ -155,4 +155,126 @@ interface axi_if #(parameter integer AW = 32, parameter integer DW = 32, paramet input bready ); + // Tasks + task rst_mgr(); + araddr = '0; + arburst = AXI_BURST_FIXED; + arsize = '0; + arlen = '0; + aruser = '0; + arid = '0; + arlock = '0; + arvalid = '0; + + rready = '0; + + awaddr = '0; + awburst = AXI_BURST_FIXED; + awsize = '0; + awlen = '0; + awuser = '0; + awid = '0; + awlock = '0; + awvalid = '0; + + wdata = '0; + wstrb = '0; + wvalid = '0; + wlast = '0; + + bready = '0; + endtask + + // TODO: handle IDs? + task get_read_beat(ref logic [DW-1:0] data, + ref axi_resp_e resp); + rready = 1; + do + @(posedge clk); + while (!rvalid); + data = rdata; + resp = axi_resp_e'(rresp); + rready = 0; + endtask + + // Read: default to single beat of native data width + task axi_read(input logic [AW-1:0] addr, + input axi_burst_e burst = AXI_BURST_INCR, + input logic [2:0] size = $clog2(DW/8), + input logic [7:0] len = 0, + input logic [UW-1:0] user = UW'(0), + input logic [IW-1:0] id = IW'(0), + input logic lock = 1'b0, + ref logic [DW-1:0] data [], + ref axi_resp_e resp []); + axi_resp_e beat_resp; + logic [DW-1:0] beat_data; + while(!rst_n) @(posedge clk); + do begin + araddr = addr; + arburst = burst; + arsize = size; + arlen = len; + aruser = user; + arid = id; + arlock = lock; + arvalid = 1; + @(posedge clk); + end while(!arready); + for (int beat=0; beat <= len; beat++) begin + get_read_beat(beat_data, beat_resp); + data[beat] = beat_data; + resp[beat] = beat_resp; + end + endtask + + task send_write_beat(input logic last, + input logic [DW-1:0] data, + input logic [DW/8-1:0] strb); + wvalid = 1; + wlast = last; + wdata = data; + wstrb = strb; + do + @(posedge clk); + while (!wready); + endtask + + // TODO handle ID + task get_write_resp(output axi_resp_e resp); + bready = 1; + while(!bvalid) @(posedge clk); + resp = axi_resp_e'(bresp); + endtask + + task axi_write( input logic [AW-1:0] addr, + input axi_burst_e burst = AXI_BURST_INCR, + input logic [2:0] size = $clog2(DW/8), + input logic [7:0] len = 0, + input logic [UW-1:0] user = UW'(0), + input logic [IW-1:0] id = IW'(0), + input logic lock = 1'b0, + const ref logic [DW-1:0] data [], + input logic use_strb = 0, + const ref logic [DW/8-1:0] strb [], + output axi_resp_e resp); + while(!rst_n) @(posedge clk); + do begin + awaddr = addr; + awburst = burst; + awsize = size; + awlen = len; + awuser = user; + awid = id; + awlock = lock; + awvalid = 1; + @(posedge clk); + end while(!awready); + fork + for (int beat=0; beat <= len; beat++) + send_write_beat(beat == len, data[beat], use_strb ? strb[beat] : {DW/8{1'b1}}); + get_write_resp(resp); + join + endtask + endinterface diff --git a/src/axi/rtl/axi_pkg.sv b/src/axi/rtl/axi_pkg.sv index 43022e75d..8f079c644 100644 --- a/src/axi/rtl/axi_pkg.sv +++ b/src/axi/rtl/axi_pkg.sv @@ -31,27 +31,4 @@ package axi_pkg; AXI_RESP_DECERR = 2'b11 } axi_resp_e; - // Transaction context - typedef struct packed { - logic [AW-1:0] addr; - logic [1:0] burst; - logic [2:0] size; - logic [7:0] len; - logic [UW-1:0] user; - logic [IW-1:0] id; - logic lock; - } axi_ctx_t; - - typedef struct packed { - logic [IW-1:0] id; - logic [UW-1:0] user; - axi_resp_e resp; - logic last; - } xfer_ctx_t; - - typedef struct packed { - logic [AW-1:0] addr; - logic [AW-1:0] addr_mask; - } axi_ex_ctx_t; - endpackage diff --git a/src/axi/rtl/axi_sub.sv b/src/axi/rtl/axi_sub.sv index cfdbfd984..4d49873f7 100644 --- a/src/axi/rtl/axi_sub.sv +++ b/src/axi/rtl/axi_sub.sv @@ -67,7 +67,10 @@ module axi_sub import axi_pkg::*; #( // Exclusive Access Signals logic [ID_NUM-1:0] ex_clr; logic [ID_NUM-1:0] ex_active; - axi_ex_ctx_t [ID_NUM-1:0] ex_ctx; + struct packed { + logic [AW-1:0] addr; + logic [AW-1:0] addr_mask; + } [ID_NUM-1:0] ex_ctx; //Read Subordinate INF logic r_dv; diff --git a/src/axi/rtl/axi_sub_rd.sv b/src/axi/rtl/axi_sub_rd.sv index ad5fb5c83..4c5c4096a 100644 --- a/src/axi/rtl/axi_sub_rd.sv +++ b/src/axi/rtl/axi_sub_rd.sv @@ -49,7 +49,10 @@ module axi_sub_rd import axi_pkg::*; #( // Exclusive Access Signals input logic [ID_NUM-1:0] ex_clr, output logic [ID_NUM-1:0] ex_active, - output var axi_ex_ctx_t [ID_NUM-1:0] ex_ctx, + output struct packed { + logic [AW-1:0] addr; + logic [AW-1:0] addr_mask; + } [ID_NUM-1:0] ex_ctx, //COMPONENT INF output logic dv, @@ -67,6 +70,24 @@ module axi_sub_rd import axi_pkg::*; #( // Localparams/Typedefs // // --------------------------------------- // + // Transaction context + typedef struct packed { + logic [AW-1:0] addr; + axi_burst_e burst; + logic [2:0] size; + logic [7:0] len; + logic [UW-1:0] user; + logic [IW-1:0] id; + logic lock; + } axi_ctx_t; + + typedef struct packed { + logic [IW-1:0] id; + logic [UW-1:0] user; + axi_resp_e resp; + logic last; + } xfer_ctx_t; + // --------------------------------------- // // Signals // @@ -125,7 +146,7 @@ module axi_sub_rd import axi_pkg::*; #( // end if (s_axi_if.arvalid && s_axi_if.arready) begin txn_ctx.addr <= s_axi_if.araddr; - txn_ctx.burst <= s_axi_if.arburst; + txn_ctx.burst <= axi_burst_e'(s_axi_if.arburst); txn_ctx.size <= s_axi_if.arsize; txn_ctx.len <= s_axi_if.arlen ; txn_ctx.user <= s_axi_if.aruser; @@ -360,8 +381,8 @@ module axi_sub_rd import axi_pkg::*; #( `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_RLAST , (s_axi_if.rvalid ? s_axi_if.rlast : '0), clk, !rst_n) // Handshake rules - `CALIPTRA_ASSERT (AXI_SUB_AR_HSHAKE_ERR, s_axi_if.arvalid && !s_axi_if.arready => s_axi_if.arvalid, clk, !rst_n) - `CALIPTRA_ASSERT (AXI_SUB_R_HSHAKE_ERR, s_axi_if.rvalid && !s_axi_if.rready => s_axi_if.rvalid, clk, !rst_n) + `CALIPTRA_ASSERT (AXI_SUB_AR_HSHAKE_ERR, (s_axi_if.arvalid && !s_axi_if.arready) |=> s_axi_if.arvalid, clk, !rst_n) + `CALIPTRA_ASSERT (AXI_SUB_R_HSHAKE_ERR, (s_axi_if.rvalid && !s_axi_if.rready ) |=> s_axi_if.rvalid, clk, !rst_n) `CALIPTRA_ASSERT_NEVER(ERR_AXI_RD_DROP , dp_rvalid[0] && !dp_rready[0], clk, !rst_n) `CALIPTRA_ASSERT_NEVER(ERR_AXI_RD_X , dp_rvalid[0] && $isunknown({dp_rdata[0],dp_xfer_ctx[0]}), clk, !rst_n) @@ -369,9 +390,9 @@ module axi_sub_rd import axi_pkg::*; #( // - Must have an address that is aligned to burst byte count // - Byte count must be power of 2 inside 1:128 // - Max burst length = 16 - `CALIPTRA_ASSERT (ERR_AXI_EX_UNALGN , (s_axi_if.arvalid && s_axi_if.arlock) -> ~|s_axi_if.araddr[$clog2((1< ((1< (s_axi_if.arlen < 16), clk, !rst_n) + `CALIPTRA_ASSERT (ERR_AXI_EX_UNALGN , (s_axi_if.arvalid && s_axi_if.arlock) |-> ~|(s_axi_if.araddr & ((1 << $clog2((1< ((1< (s_axi_if.arlen < 16), clk, !rst_n) genvar sva_ii; generate diff --git a/src/axi/rtl/axi_sub_wr.sv b/src/axi/rtl/axi_sub_wr.sv index 9b4be8693..6c61ab638 100644 --- a/src/axi/rtl/axi_sub_wr.sv +++ b/src/axi/rtl/axi_sub_wr.sv @@ -45,7 +45,10 @@ module axi_sub_wr import axi_pkg::*; #( // Exclusive Access Signals output logic [ID_NUM-1:0] ex_clr, input logic [ID_NUM-1:0] ex_active, - input var axi_ex_ctx_t [ID_NUM-1:0] ex_ctx, + input struct packed { + logic [AW-1:0] addr; + logic [AW-1:0] addr_mask; + } [ID_NUM-1:0] ex_ctx, //COMPONENT INF output logic dv, @@ -64,6 +67,17 @@ module axi_sub_wr import axi_pkg::*; #( // Localparams/Typedefs // // --------------------------------------- // + // Transaction context + typedef struct packed { + logic [AW-1:0] addr; + axi_burst_e burst; + logic [2:0] size; + logic [7:0] len; + logic [UW-1:0] user; + logic [IW-1:0] id; + logic lock; + } axi_ctx_t; + // --------------------------------------- // // Signals // @@ -104,7 +118,7 @@ module axi_sub_wr import axi_pkg::*; #( always_comb begin s_axi_if_ctx.addr = s_axi_if.awaddr ; - s_axi_if_ctx.burst = s_axi_if.awburst; + s_axi_if_ctx.burst = axi_burst_e'(s_axi_if.awburst); s_axi_if_ctx.size = s_axi_if.awsize ; s_axi_if_ctx.len = s_axi_if.awlen ; s_axi_if_ctx.user = s_axi_if.awuser ; @@ -229,7 +243,7 @@ module axi_sub_wr import axi_pkg::*; #( // Match on each beat in case a burst transaction only overlaps // the exclusive context partially - always_comb txn_ex_match[ex] <= (addr_ex_algn == ex_ctx[ex].addr); + always_comb txn_ex_match[ex] = (addr_ex_algn == ex_ctx[ex].addr); end: EX_AXS_TRACKER endgenerate @@ -335,17 +349,17 @@ module axi_sub_wr import axi_pkg::*; #( `CALIPTRA_ASSERT_KNOWN(AXI_SUB_X_BID , (s_axi_if.bvalid ? s_axi_if.bid : '0), clk, !rst_n) // Handshake rules - `CALIPTRA_ASSERT (AXI_SUB_AW_HSHAKE_ERR, s_axi_if.awvalid && !s_axi_if.awready => s_axi_if.awvalid, clk, !rst_n) - `CALIPTRA_ASSERT (AXI_SUB_W_HSHAKE_ERR, s_axi_if.wvalid && !s_axi_if.wready => s_axi_if.wvalid, clk, !rst_n) - `CALIPTRA_ASSERT (AXI_SUB_B_HSHAKE_ERR, s_axi_if.bvalid && !s_axi_if.bready => s_axi_if.bvalid, clk, !rst_n) + `CALIPTRA_ASSERT (AXI_SUB_AW_HSHAKE_ERR, (s_axi_if.awvalid && !s_axi_if.awready) |=> s_axi_if.awvalid, clk, !rst_n) + `CALIPTRA_ASSERT (AXI_SUB_W_HSHAKE_ERR, (s_axi_if.wvalid && !s_axi_if.wready ) |=> s_axi_if.wvalid, clk, !rst_n) + `CALIPTRA_ASSERT (AXI_SUB_B_HSHAKE_ERR, (s_axi_if.bvalid && !s_axi_if.bready ) |=> s_axi_if.bvalid, clk, !rst_n) // Exclusive access rules: // - Must have an address that is aligned to burst byte count // - Byte count must be power of 2 inside 1:128 // - Max burst length = 16 - `CALIPTRA_ASSERT (ERR_AXI_EX_UNALGN , (s_axi_if.awvalid && s_axi_if.awlock) -> ~|s_axi_if.awaddr[$clog2((1< ((1< (s_axi_if.awlen < 16), clk, !rst_n) + `CALIPTRA_ASSERT (ERR_AXI_EX_UNALGN , (s_axi_if.awvalid && s_axi_if.awlock) |-> ~|(s_axi_if.awaddr & ((1 << $clog2((1< ((1< (s_axi_if.awlen < 16), clk, !rst_n) // --------------------------------------- // diff --git a/src/axi/tb/axi_sub_tb.sv b/src/axi/tb/axi_sub_tb.sv new file mode 100644 index 000000000..7816c1ea2 --- /dev/null +++ b/src/axi/tb/axi_sub_tb.sv @@ -0,0 +1,126 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// ------------------------------------------------------------- +// AXI Subordinate +// ------------------------------------------------------------- +// Description: +// Subordinate to convert AXI protocol transactions into internal component accesses +// Includes an arbiter to squash duplex AXI transactions into simplex component operations +// May optionally include an Exclusive Access monitor (AxLOCK signal) +// +// Limitations: +// - When multiple ID tracking is enabled, write responses are returned in the +// same order they are received, regardless of ID. +// +// ------------------------------------------------------------- + +module axi_sub_tb(); + +// Allow testbench configuration to be overridden per-compile /////// +`ifdef CALIPTRA_AXI_SUB_AW // +localparam AW = `CALIPTRA_AXI_SUB_AW; // +`else // +localparam AW = 48; // +`endif // +`ifdef CALIPTRA_AXI_SUB_DW // +localparam DW = `CALIPTRA_AXI_SUB_DW; // +`else // +localparam DW = 32; // +`endif // +`ifdef CALIPTRA_AXI_SUB_UW // +localparam UW = `CALIPTRA_AXI_SUB_UW; // +`else // +localparam UW = 32; // +`endif // +`ifdef CALIPTRA_AXI_SUB_IW // +localparam IW = `CALIPTRA_AXI_SUB_IW; // +`else // +localparam IW = 32; // +`endif // +`ifdef CALIPTRA_AXI_SUB_C_LAT // +localparam C_LAT = `CALIPTRA_AXI_SUB_C_LAT; // +`else // +localparam C_LAT = 0; // +`endif // +`ifdef CALIPTRA_AXI_SUB_EX_EN // +localparam EX_EN = `CALIPTRA_AXI_SUB_EX_EN; // +`else // +localparam EX_EN = 0; // +`endif // +///////////////////////////////////////////////////////////////////// + +axi_if axi_sub_if(); + +// Clock and Reset +logic clk; +logic rst_n; + +// Component Signals +logic dv; +logic [AW-1:0] addr; +logic [DW-1:0] wdata; +logic [DW/8-1:0] wstrb; +logic [DW-1:0] rdata; +logic last; +logic hld; +logic err; +logic [UW-1:0] user; + +// 100 MHz clock +initial begin + clk = 1'b0; + forever #5 clk = ~clk; +end + +// Reset +initial begin + rst_n = 1'b0; + #10; + rst_n = 1'b1; +end + +// Instantiate the AXI Subordinate +axi_sub #( + .AW(AW), + .DW(DW), + .UW(UW), + .IW(IW), + .C_LAT(C_LAT), + .EX_EN(EX_EN) +) axi_sub_inst ( + .clk(clk), + .rst_n(rst_n), + // AXI INF + .s_axi_w_if(axi_sub_if.w_sub), + .s_axi_r_if(axi_sub_if.r_sub), + // COMPONENT INF + .dv(dv), + .addr(addr), + .user(user), + .wdata(wdata), + .wstrb(wstrb), + .rdata(rdata), + .last(last), + .hld(hld), + .err(err) +); + +// Register backend + +// SRAM backend + + +endmodule diff --git a/src/caliptra_prim/config/caliptra_prim.vf b/src/caliptra_prim/config/caliptra_prim.vf index 59740aec8..6f4015742 100644 --- a/src/caliptra_prim/config/caliptra_prim.vf +++ b/src/caliptra_prim/config/caliptra_prim.vf @@ -59,4 +59,4 @@ ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_fifo_sync.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_arbiter_ppc.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_sum_tree.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_subreg_ext.sv -${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_edge_detector.sv +${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_edge_detector.sv \ No newline at end of file diff --git a/src/caliptra_prim/config/caliptra_prim_pkg.vf b/src/caliptra_prim/config/caliptra_prim_pkg.vf index f97774292..b3a1e93ff 100644 --- a/src/caliptra_prim/config/caliptra_prim_pkg.vf +++ b/src/caliptra_prim/config/caliptra_prim_pkg.vf @@ -6,3 +6,4 @@ ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_mubi_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_cipher_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_sparse_fsm_pkg.sv +${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_sparse_fsm_pkg.sv \ No newline at end of file diff --git a/src/caliptra_prim_generic/config/caliptra_prim_generic.vf b/src/caliptra_prim_generic/config/caliptra_prim_generic.vf index 38af67734..46b307534 100644 --- a/src/caliptra_prim_generic/config/caliptra_prim_generic.vf +++ b/src/caliptra_prim_generic/config/caliptra_prim_generic.vf @@ -1,4 +1,4 @@ +incdir+${CALIPTRA_ROOT}/src/caliptra_prim_generic/rtl ${CALIPTRA_ROOT}/src/caliptra_prim_generic/rtl/caliptra_prim_generic_flop_en.sv ${CALIPTRA_ROOT}/src/caliptra_prim_generic/rtl/caliptra_prim_generic_flop.sv -${CALIPTRA_ROOT}/src/caliptra_prim_generic/rtl/caliptra_prim_generic_buf.sv +${CALIPTRA_ROOT}/src/caliptra_prim_generic/rtl/caliptra_prim_generic_buf.sv \ No newline at end of file diff --git a/src/csrng/config/csrng.vf b/src/csrng/config/csrng.vf index 0a1c5d165..1cebd8b9f 100644 --- a/src/csrng/config/csrng.vf +++ b/src/csrng/config/csrng.vf @@ -101,4 +101,4 @@ ${CALIPTRA_ROOT}/src/csrng/rtl/csrng_ctr_drbg_gen.sv ${CALIPTRA_ROOT}/src/csrng/rtl/csrng_block_encrypt.sv ${CALIPTRA_ROOT}/src/csrng/rtl/csrng_state_db.sv ${CALIPTRA_ROOT}/src/csrng/rtl/csrng_cmd_stage.sv -${CALIPTRA_ROOT}/src/csrng/rtl/csrng.sv +${CALIPTRA_ROOT}/src/csrng/rtl/csrng.sv \ No newline at end of file diff --git a/src/csrng/config/csrng_tb.vf b/src/csrng/config/csrng_tb.vf index 4793e52ec..405dc59a5 100644 --- a/src/csrng/config/csrng_tb.vf +++ b/src/csrng/config/csrng_tb.vf @@ -103,4 +103,4 @@ ${CALIPTRA_ROOT}/src/csrng/rtl/csrng_block_encrypt.sv ${CALIPTRA_ROOT}/src/csrng/rtl/csrng_state_db.sv ${CALIPTRA_ROOT}/src/csrng/rtl/csrng_cmd_stage.sv ${CALIPTRA_ROOT}/src/csrng/rtl/csrng.sv -${CALIPTRA_ROOT}/src/csrng/tb/csrng_tb.sv +${CALIPTRA_ROOT}/src/csrng/tb/csrng_tb.sv \ No newline at end of file diff --git a/src/ecc/uvmf_ecc/config/uvmf_ecc.vf b/src/ecc/uvmf_ecc/config/uvmf_ecc.vf index f53355d1a..eb2dd5f09 100644 --- a/src/ecc/uvmf_ecc/config/uvmf_ecc.vf +++ b/src/ecc/uvmf_ecc/config/uvmf_ecc.vf @@ -139,15 +139,15 @@ ${CALIPTRA_ROOT}/src/sha512/rtl/sha512_w_mem.v ${CALIPTRA_ROOT}/src/sha512/rtl/sha512_reg.sv ${CALIPTRA_ROOT}/src/sha512_masked/rtl/sha512_masked_defines_pkg.sv ${CALIPTRA_ROOT}/src/sha512_masked/rtl/sha512_masked_core.sv -${CALIPTRA_ROOT}/src/sha512_masked/rtl/sha512_masked_lfsr.sv +${CALIPTRA_ROOT}/src/sha512_masked/rtl/sha512_masked_w_mem.sv ${CALIPTRA_ROOT}/src/hmac/rtl/hmac_param_pkg.sv ${CALIPTRA_ROOT}/src/hmac/rtl/hmac_reg_pkg.sv ${CALIPTRA_ROOT}/src/hmac/rtl/hmac_ctrl.sv ${CALIPTRA_ROOT}/src/hmac/rtl/hmac.sv ${CALIPTRA_ROOT}/src/hmac/rtl/hmac_core.v ${CALIPTRA_ROOT}/src/hmac/rtl/hmac_reg.sv +${CALIPTRA_ROOT}/src/hmac/rtl/hmac_lfsr.sv ${CALIPTRA_ROOT}/src/hmac_drbg/rtl/hmac_drbg.sv -${CALIPTRA_ROOT}/src/hmac_drbg/rtl/hmac_drbg_lfsr.sv ${CALIPTRA_ROOT}/src/ecc/rtl/ecc_reg_pkg.sv ${CALIPTRA_ROOT}/src/ecc/rtl/ecc_defines_pkg.sv ${CALIPTRA_ROOT}/src/ecc/rtl/ecc_params_pkg.sv diff --git a/src/entropy_src/config/entropy_src.vf b/src/entropy_src/config/entropy_src.vf index f8a916e71..3f94c116b 100644 --- a/src/entropy_src/config/entropy_src.vf +++ b/src/entropy_src/config/entropy_src.vf @@ -85,4 +85,4 @@ ${CALIPTRA_ROOT}/src/entropy_src/rtl/entropy_src_adaptp_ht.sv ${CALIPTRA_ROOT}/src/entropy_src/rtl/entropy_src_core.sv ${CALIPTRA_ROOT}/src/entropy_src/rtl/entropy_src_repcnt_ht.sv ${CALIPTRA_ROOT}/src/entropy_src/rtl/entropy_src_ack_sm.sv -${CALIPTRA_ROOT}/src/entropy_src/rtl/entropy_src.sv +${CALIPTRA_ROOT}/src/entropy_src/rtl/entropy_src.sv \ No newline at end of file diff --git a/src/entropy_src/config/entropy_src_tb.vf b/src/entropy_src/config/entropy_src_tb.vf index f0f720b91..2a3fc4067 100644 --- a/src/entropy_src/config/entropy_src_tb.vf +++ b/src/entropy_src/config/entropy_src_tb.vf @@ -86,4 +86,4 @@ ${CALIPTRA_ROOT}/src/entropy_src/rtl/entropy_src_core.sv ${CALIPTRA_ROOT}/src/entropy_src/rtl/entropy_src_repcnt_ht.sv ${CALIPTRA_ROOT}/src/entropy_src/rtl/entropy_src_ack_sm.sv ${CALIPTRA_ROOT}/src/entropy_src/rtl/entropy_src.sv -${CALIPTRA_ROOT}/src/entropy_src/tb/entropy_src_tb.sv +${CALIPTRA_ROOT}/src/entropy_src/tb/entropy_src_tb.sv \ No newline at end of file diff --git a/src/hmac/uvmf_2022/config/uvmf_hmac.vf b/src/hmac/uvmf_2022/config/uvmf_hmac.vf index a11f61ac2..ac4642c80 100644 --- a/src/hmac/uvmf_2022/config/uvmf_hmac.vf +++ b/src/hmac/uvmf_2022/config/uvmf_hmac.vf @@ -137,10 +137,11 @@ ${CALIPTRA_ROOT}/src/sha512/rtl/sha512_w_mem.v ${CALIPTRA_ROOT}/src/sha512/rtl/sha512_reg.sv ${CALIPTRA_ROOT}/src/sha512_masked/rtl/sha512_masked_defines_pkg.sv ${CALIPTRA_ROOT}/src/sha512_masked/rtl/sha512_masked_core.sv -${CALIPTRA_ROOT}/src/sha512_masked/rtl/sha512_masked_lfsr.sv +${CALIPTRA_ROOT}/src/sha512_masked/rtl/sha512_masked_w_mem.sv ${CALIPTRA_ROOT}/src/hmac/rtl/hmac_param_pkg.sv ${CALIPTRA_ROOT}/src/hmac/rtl/hmac_reg_pkg.sv ${CALIPTRA_ROOT}/src/hmac/rtl/hmac_ctrl.sv ${CALIPTRA_ROOT}/src/hmac/rtl/hmac.sv ${CALIPTRA_ROOT}/src/hmac/rtl/hmac_core.v -${CALIPTRA_ROOT}/src/hmac/rtl/hmac_reg.sv \ No newline at end of file +${CALIPTRA_ROOT}/src/hmac/rtl/hmac_reg.sv +${CALIPTRA_ROOT}/src/hmac/rtl/hmac_lfsr.sv \ No newline at end of file diff --git a/src/integration/config/caliptra_top.vf b/src/integration/config/caliptra_top.vf index 244c4c989..9898ac1ef 100644 --- a/src/integration/config/caliptra_top.vf +++ b/src/integration/config/caliptra_top.vf @@ -1,5 +1,6 @@ +incdir+${CALIPTRA_ROOT}/src/integration/rtl +incdir+${CALIPTRA_ROOT}/src/libs/rtl ++incdir+${CALIPTRA_ROOT}/src/axi/rtl +incdir+${CALIPTRA_ROOT}/src/keyvault/rtl +incdir+${CALIPTRA_ROOT}/src/pcrvault/rtl +incdir+${CALIPTRA_ROOT}/src/datavault/rtl @@ -36,6 +37,8 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_if.sv ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_defines_pkg.sv ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_macros.svh ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_defines_pkg.sv @@ -69,6 +72,12 @@ ${CALIPTRA_ROOT}/src/spi_host/rtl/spi_host_reg_pkg.sv ${CALIPTRA_ROOT}/src/spi_host/rtl/spi_host_cmd_pkg.sv ${CALIPTRA_ROOT}/src/uart/rtl/uart_reg_pkg.sv ${CALIPTRA_ROOT}/src/libs/rtl/ahb_to_reg_adapter.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_addr.v +${CALIPTRA_ROOT}/src/axi/rtl/skidbuffer.v +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_rd.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_wr.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_arb.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/mbox_csr_pkg.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/sha512_acc_csr_pkg.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/lib/beh_lib.sv @@ -300,4 +309,4 @@ ${CALIPTRA_ROOT}/src/uart/rtl/uart_reg_top.sv ${CALIPTRA_ROOT}/src/uart/rtl/uart_rx.sv ${CALIPTRA_ROOT}/src/uart/rtl/uart.sv ${CALIPTRA_ROOT}/src/uart/rtl/uart_core.sv -${CALIPTRA_ROOT}/src/integration/rtl/caliptra_top.sv +${CALIPTRA_ROOT}/src/integration/rtl/caliptra_top.sv \ No newline at end of file diff --git a/src/integration/config/caliptra_top_tb.vf b/src/integration/config/caliptra_top_tb.vf index 4500df6bf..e377dea83 100644 --- a/src/integration/config/caliptra_top_tb.vf +++ b/src/integration/config/caliptra_top_tb.vf @@ -7,6 +7,7 @@ +incdir+${CALIPTRA_ROOT}/src/lc_ctrl/rtl +incdir+${CALIPTRA_ROOT}/src/spi_host/rtl +incdir+${CALIPTRA_ROOT}/src/spi_host/tb ++incdir+${CALIPTRA_ROOT}/src/axi/rtl +incdir+${CALIPTRA_ROOT}/src/pcrvault/rtl +incdir+${CALIPTRA_ROOT}/src/datavault/rtl +incdir+${CALIPTRA_ROOT}/src/soc_ifc/rtl @@ -65,6 +66,8 @@ ${CALIPTRA_ROOT}/src/spi_host/rtl/spi_host_reg_pkg.sv ${CALIPTRA_ROOT}/src/spi_host/rtl/spi_host_cmd_pkg.sv ${CALIPTRA_ROOT}/src/spi_host/tb/spi_device_pkg.sv ${CALIPTRA_ROOT}/src/spi_host/tb/spiflash.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_if.sv ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_defines_pkg.sv ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_macros.svh ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_gen_hash.sv @@ -150,6 +153,12 @@ ${CALIPTRA_ROOT}/src/spi_host/rtl/spi_host_data_fifos.sv ${CALIPTRA_ROOT}/src/spi_host/rtl/spi_host_fsm.sv ${CALIPTRA_ROOT}/src/spi_host/rtl/spi_host_reg_top.sv ${CALIPTRA_ROOT}/src/spi_host/rtl/spi_host_shift_register.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_addr.v +${CALIPTRA_ROOT}/src/axi/rtl/skidbuffer.v +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_rd.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_wr.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_arb.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/mbox_csr_pkg.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/sha512_acc_csr_pkg.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/lib/beh_lib.sv @@ -338,4 +347,4 @@ ${CALIPTRA_ROOT}/src/uart/rtl/uart_reg_top.sv ${CALIPTRA_ROOT}/src/uart/rtl/uart_rx.sv ${CALIPTRA_ROOT}/src/uart/rtl/uart.sv ${CALIPTRA_ROOT}/src/uart/rtl/uart_core.sv -${CALIPTRA_ROOT}/src/integration/rtl/caliptra_top.sv +${CALIPTRA_ROOT}/src/integration/rtl/caliptra_top.sv \ No newline at end of file diff --git a/src/integration/config/caliptra_top_trng_tb.vf b/src/integration/config/caliptra_top_trng_tb.vf index 75a9cde59..2e89f67fb 100644 --- a/src/integration/config/caliptra_top_trng_tb.vf +++ b/src/integration/config/caliptra_top_trng_tb.vf @@ -25,6 +25,7 @@ +incdir+${CALIPTRA_ROOT}/src/integration/tb +incdir+${CALIPTRA_ROOT}/src/integration/coverage +incdir+${CALIPTRA_ROOT}/src/caliptra_prim_generic/rtl ++incdir+${CALIPTRA_ROOT}/src/axi/rtl +incdir+${CALIPTRA_ROOT}/src/ahb_lite_bus/rtl +incdir+${CALIPTRA_ROOT}/src/sha512/rtl +incdir+${CALIPTRA_ROOT}/src/sha256/rtl @@ -150,6 +151,14 @@ ${CALIPTRA_ROOT}/src/spi_host/rtl/spi_host_data_fifos.sv ${CALIPTRA_ROOT}/src/spi_host/rtl/spi_host_fsm.sv ${CALIPTRA_ROOT}/src/spi_host/rtl/spi_host_reg_top.sv ${CALIPTRA_ROOT}/src/spi_host/rtl/spi_host_shift_register.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_if.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_addr.v +${CALIPTRA_ROOT}/src/axi/rtl/skidbuffer.v +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_rd.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_wr.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_arb.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/mbox_csr_pkg.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/sha512_acc_csr_pkg.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/lib/beh_lib.sv diff --git a/src/integration/config/compile.yml b/src/integration/config/compile.yml index d741bcb8f..2058ddde3 100644 --- a/src/integration/config/compile.yml +++ b/src/integration/config/compile.yml @@ -18,6 +18,7 @@ schema_version: 2.4.0 requires: - caliptra_top_defines - libs + - axi_sub - kv_defines_pkg - pv_defines_pkg - dv_defines_pkg diff --git a/src/integration/rtl/caliptra_top.sv b/src/integration/rtl/caliptra_top.sv index 8b8d0bb3e..20bb36858 100755 --- a/src/integration/rtl/caliptra_top.sv +++ b/src/integration/rtl/caliptra_top.sv @@ -120,6 +120,8 @@ module caliptra_top logic rdc_clk_cg ; logic uc_clk_cg ; + logic [2:0] s_axi_active ; + logic [31:0] ic_haddr ; logic [2:0] ic_hburst ; logic ic_hmastlock ; @@ -637,10 +639,39 @@ el2_veer_wrapper rvtop ( //=========================================================================- // Clock gating instance //=========================================================================- +always_ff@(posedge clk or negedge cptra_rst_b) begin + if (!cptra_rst_b) begin + s_axi_active <= 2'd0; + end + else begin + case ({s_axi_r_if.rvalid && s_axi_r_if.rready && s_axi_r_if.rlast, + s_axi_r_if.arvalid && s_axi_r_if.arready, + s_axi_w_if.bvalid && s_axi_w_if.bready, + s_axi_w_if.awvalid && s_axi_w_if.awready}) inside + 4'b0000: s_axi_active <= s_axi_active ; + 4'b0001: s_axi_active <= s_axi_active + 3'd1; + 4'b0010: s_axi_active <= s_axi_active - 3'd1; + 4'b0011: s_axi_active <= s_axi_active ; + 4'b0100: s_axi_active <= s_axi_active + 3'd1; + 4'b0101: s_axi_active <= s_axi_active + 3'd2; + 4'b0110: s_axi_active <= s_axi_active ; + 4'b0111: s_axi_active <= s_axi_active + 3'd1; + 4'b1000: s_axi_active <= s_axi_active - 3'd1; + 4'b1001: s_axi_active <= s_axi_active ; + 4'b1010: s_axi_active <= s_axi_active - 3'd2; + 4'b1011: s_axi_active <= s_axi_active - 3'd1; + 4'b1100: s_axi_active <= s_axi_active ; + 4'b1101: s_axi_active <= s_axi_active + 3'd1; + 4'b1110: s_axi_active <= s_axi_active - 3'd1; + 4'b1111: s_axi_active <= s_axi_active ; + endcase + end +end + clk_gate cg ( .clk(clk), .cptra_rst_b(cptra_noncore_rst_b), - .psel(PSEL), + .psel(|s_axi_active || s_axi_r_if.arvalid || s_axi_w_if.awvalid), .clk_gate_en(clk_gating_en), .cpu_halt_status(o_cpu_halt_status), .rdc_clk_dis(rdc_clk_dis), diff --git a/src/integration/rtl/config_defines.svh b/src/integration/rtl/config_defines.svh index 21a904129..aa572a15d 100755 --- a/src/integration/rtl/config_defines.svh +++ b/src/integration/rtl/config_defines.svh @@ -22,7 +22,6 @@ `define CALIPTRA_AHB_MASTERS_NUM 4'd1 // Number of masters AHB `define CALIPTRA_AHB_HADDR_SIZE 32 // bit-width AHB address haddr `define CALIPTRA_AHB_HDATA_SIZE 64 // bit-width AHB data - `define CALIPTRA_AXI_ADDR_WIDTH 32 // bit-width AXI address `define CALIPTRA_AXI_DATA_WIDTH 32 // bit-width AXI data `define CALIPTRA_AXI_USER_WIDTH 32 // bit-width AXI USER field `define CALIPTRA_AXI_ID_WIDTH 5 // bit-width AXI ID field diff --git a/src/integration/tb/caliptra_top_tb.sv b/src/integration/tb/caliptra_top_tb.sv index 217227be5..f3a0704e2 100755 --- a/src/integration/tb/caliptra_top_tb.sv +++ b/src/integration/tb/caliptra_top_tb.sv @@ -28,6 +28,7 @@ module caliptra_top_tb ( ); `endif + import axi_pkg::*; import soc_ifc_pkg::*; import caliptra_top_tb_pkg::*; @@ -45,7 +46,6 @@ module caliptra_top_tb ( `endif int cycleCnt; - int cycleCnt_Flag = '0; logic cptra_pwrgood; @@ -67,43 +67,43 @@ module caliptra_top_tb ( logic [0:`CLP_OBF_FE_DWORDS-1][31:0] cptra_fe_rand; logic [0:`CLP_OBF_KEY_DWORDS-1][31:0] cptra_obf_key_tb; - logic start_apb_fuse_sequence; - - enum logic [5:0] { - S_APB_IDLE, - S_APB_WR_UDS, - S_APB_WR_FE, - S_APB_WR_SOC_STEPPING_ID, - S_APB_WR_FUSE_DONE, - S_APB_POLL_FLOW_ST, - S_APB_WR_BOOT_GO, - S_APB_WAIT_FW_TEST, - S_APB_POLL_LOCK, - S_APB_PRE_WR_CMD, - S_APB_WR_CMD, - S_APB_WR_DLEN, - S_APB_WR_DATAIN, - S_APB_WR_STATUS, - S_APB_WR_EXEC, - S_APB_WAIT_ERROR_AXS, - S_APB_RD_HW_ERROR_FATAL, - S_APB_WR_HW_ERROR_FATAL, - S_APB_RD_HW_ERROR_NON_FATAL, - S_APB_WR_HW_ERROR_NON_FATAL, - S_APB_DONE, - S_APB_RD_DLEN, - S_APB_RD_DATAOUT, - S_APB_RST_EXEC, - S_APB_ERROR - } n_state_apb, c_state_apb; +// logic start_apb_fuse_sequence; + +// enum logic [5:0] { +// S_APB_IDLE, +// S_APB_WR_UDS, +// S_APB_WR_FE, +// S_APB_WR_SOC_STEPPING_ID, +// S_APB_WR_FUSE_DONE, +// S_APB_POLL_FLOW_ST, +// S_APB_WR_BOOT_GO, +// S_APB_WAIT_FW_TEST, +// S_APB_POLL_LOCK, +// S_APB_PRE_WR_CMD, +// S_APB_WR_CMD, +// S_APB_WR_DLEN, +// S_APB_WR_DATAIN, +// S_APB_WR_STATUS, +// S_APB_WR_EXEC, +// S_APB_WAIT_ERROR_AXS, +// S_APB_RD_HW_ERROR_FATAL, +// S_APB_WR_HW_ERROR_FATAL, +// S_APB_RD_HW_ERROR_NON_FATAL, +// S_APB_WR_HW_ERROR_NON_FATAL, +// S_APB_DONE, +// S_APB_RD_DLEN, +// S_APB_RD_DATAOUT, +// S_APB_RST_EXEC, +// S_APB_ERROR +// } n_state_apb, c_state_apb; parameter FW_NUM_DWORDS = 256; - logic [$clog2(FW_NUM_DWORDS)-1:0] apb_wr_count, apb_wr_count_nxt; - logic [31:0] apb_rd_count, apb_rd_count_nxt, dlen; - logic apb_enable_ph; - logic apb_xfer_end; - logic execute_mbox_rx_protocol; +// logic [$clog2(FW_NUM_DWORDS)-1:0] apb_wr_count, apb_wr_count_nxt; +// logic [31:0] apb_rd_count, apb_rd_count_nxt, dlen; +// logic apb_enable_ph; +// logic apb_xfer_end; +// logic execute_mbox_rx_protocol; //jtag interface logic jtag_tck; // JTAG clk @@ -112,18 +112,31 @@ module caliptra_top_tb ( logic jtag_trst_n; // JTAG Reset logic jtag_tdo; // JTAG TDO logic jtag_tdoEn; // JTAG TDO enable - //APB Interface - logic [`CALIPTRA_APB_ADDR_WIDTH-1:0] PADDR; - logic [2:0] PPROT; - logic PSEL; - logic PENABLE; - logic PWRITE; - logic [`CALIPTRA_APB_DATA_WIDTH-1:0] PWDATA; - logic [`CALIPTRA_APB_USER_WIDTH-1:0] PAUSER; - - logic PREADY; - logic PSLVERR; - logic [`CALIPTRA_APB_DATA_WIDTH-1:0] PRDATA; +// //APB Interface +// logic [`CALIPTRA_APB_ADDR_WIDTH-1:0] PADDR; +// logic [2:0] PPROT; +// logic PSEL; +// logic PENABLE; +// logic PWRITE; +// logic [`CALIPTRA_APB_DATA_WIDTH-1:0] PWDATA; +// logic [`CALIPTRA_APB_USER_WIDTH-1:0] PAUSER; +// +// logic PREADY; +// logic PSLVERR; +// logic [`CALIPTRA_APB_DATA_WIDTH-1:0] PRDATA; + + // AXI request signals + axi_resp_e wresp, rresp[]; + logic [`CALIPTRA_AXI_DATA_WIDTH-1:0] wdata[], rdata[]; + logic [`CALIPTRA_AXI_DATA_WIDTH/8-1:0] wstrb[]; + + // AXI Interface + axi_if #( + .AW(`CALIPTRA_SLAVE_ADDR_WIDTH(`CALIPTRA_SLAVE_SEL_SOC_IFC)), + .DW(`CALIPTRA_AXI_DATA_WIDTH), + .IW(`CALIPTRA_AXI_ID_WIDTH), + .UW(`CALIPTRA_AXI_USER_WIDTH) + ) s_axi_if (.clk(core_clk), .rst_n(cptra_rst_b)); // QSPI Interface logic qspi_clk; @@ -173,7 +186,7 @@ module caliptra_top_tb ( logic mbox_apb_dataout_read_no_lock; logic mbox_no_lock_read_done; - logic [`CALIPTRA_APB_DATA_WIDTH-1:0] soc_ifc_hw_error_wdata; +// logic [`CALIPTRA_APB_DATA_WIDTH-1:0] soc_ifc_hw_error_wdata; //Interrupt flags //logic nmi_int; @@ -182,6 +195,7 @@ module caliptra_top_tb ( logic int_flag; logic cycleCnt_smpl_en; int cycleCnt_ff; + process boot_and_cmd_flow; //Reset flags logic assert_hard_rst_flag; @@ -210,91 +224,91 @@ module caliptra_top_tb ( else if(cycleCnt_smpl_en) cycleCnt_ff <= cycleCnt; end - always@(negedge core_clk) begin - if((cycleCnt == cycleCnt_ff + 2000) && int_flag) begin - force caliptra_top_dut.soft_int = 'b1; - end - - else if((cycleCnt == cycleCnt_ff + 7000) && int_flag) begin - force caliptra_top_dut.timer_int = 'b1; - end - - else if((c_state_apb == S_APB_WR_EXEC) && apb_xfer_end && int_flag) begin - //Wait for APB flow to be done before toggling generic_input_wires - generic_input_wires <= {$urandom, $urandom}; //Toggle wires - end - - else if((cycleCnt == cycleCnt_ff + 15000) && int_flag) begin - force caliptra_top_dut.soft_int = 'b1; - end - - else if (!ras_test_ctrl.error_injection_seen) begin - release caliptra_top_dut.soft_int; - release caliptra_top_dut.timer_int; - generic_input_wires <= 'h0; - end - - else if (ras_test_ctrl.reset_generic_input_wires) begin - `ifdef VERILATOR - generic_input_wires <= {32'h72746C76, ERROR_NONE_SET}; /* 32'h72746c76 is the big-endian ASCII representation of 'vltr' (r t l v) */ - `else - generic_input_wires <= {32'h0, ERROR_NONE_SET}; - `endif - end - - else if (c_state_apb == S_APB_WAIT_ERROR_AXS && rv_dma_resp_error) begin - generic_input_wires <= {32'h0, DMA_ERROR_OBSERVED}; - end - - else if (c_state_apb == S_APB_RD_HW_ERROR_FATAL && apb_xfer_end) begin - if (PRDATA[`SOC_IFC_REG_CPTRA_HW_ERROR_FATAL_ICCM_ECC_UNC_LOW]) begin - generic_input_wires <= {32'h0, ICCM_FATAL_OBSERVED}; - end - else if (PRDATA[`SOC_IFC_REG_CPTRA_HW_ERROR_FATAL_DCCM_ECC_UNC_LOW]) begin - generic_input_wires <= {32'h0, DCCM_FATAL_OBSERVED}; - end - else if (PRDATA[`SOC_IFC_REG_CPTRA_HW_ERROR_FATAL_NMI_PIN_LOW]) begin - generic_input_wires <= {32'h0, NMI_FATAL_OBSERVED}; - end - else if (PRDATA[`SOC_IFC_REG_CPTRA_HW_ERROR_FATAL_CRYPTO_ERR_LOW]) begin - generic_input_wires <= {32'h0, CRYPTO_ERROR_OBSERVED}; - end - else begin - generic_input_wires <= {32'h0, ERROR_NONE_SET}; - end - end - - else if (c_state_apb == S_APB_RD_HW_ERROR_NON_FATAL && apb_xfer_end) begin - if (PRDATA[`SOC_IFC_REG_CPTRA_HW_ERROR_NON_FATAL_MBOX_PROT_NO_LOCK_LOW]) begin - generic_input_wires <= {32'h0, PROT_NO_LOCK_NON_FATAL_OBSERVED}; - end - else if (PRDATA[`SOC_IFC_REG_CPTRA_HW_ERROR_NON_FATAL_MBOX_PROT_OOO_LOW]) begin - generic_input_wires <= {32'h0, PROT_OOO_NON_FATAL_OBSERVED}; - end - else if (PRDATA[`SOC_IFC_REG_CPTRA_HW_ERROR_NON_FATAL_MBOX_ECC_UNC_LOW]) begin - generic_input_wires <= {32'h0, MBOX_NON_FATAL_OBSERVED}; - end - else begin - generic_input_wires <= {32'h0, ERROR_NONE_SET}; - end - end - - end - - always@(negedge core_clk or negedge cptra_pwrgood) begin - // This persists across soft reset - if (!cptra_pwrgood) begin - soc_ifc_hw_error_wdata <= '0; - end - else if (c_state_apb inside {S_APB_RD_HW_ERROR_FATAL, S_APB_RD_HW_ERROR_NON_FATAL} && apb_xfer_end) begin - // HW ERROR registers are W1C, capture the set bits - soc_ifc_hw_error_wdata <= PRDATA; - end - else if (c_state_apb inside {S_APB_WR_HW_ERROR_FATAL, S_APB_WR_HW_ERROR_NON_FATAL} && apb_xfer_end) begin - // Clear after completing the write - soc_ifc_hw_error_wdata <= 0; - end - end +// always@(negedge core_clk) begin +// if((cycleCnt == cycleCnt_ff + 2000) && int_flag) begin +// force caliptra_top_dut.soft_int = 'b1; +// end +// +// else if((cycleCnt == cycleCnt_ff + 7000) && int_flag) begin +// force caliptra_top_dut.timer_int = 'b1; +// end +// +// else if((c_state_apb == S_APB_WR_EXEC) && apb_xfer_end && int_flag) begin +// //Wait for APB flow to be done before toggling generic_input_wires +// generic_input_wires <= {$urandom, $urandom}; //Toggle wires +// end +// +// else if((cycleCnt == cycleCnt_ff + 15000) && int_flag) begin +// force caliptra_top_dut.soft_int = 'b1; +// end +// +// else if (!ras_test_ctrl.error_injection_seen) begin +// release caliptra_top_dut.soft_int; +// release caliptra_top_dut.timer_int; +// generic_input_wires <= 'h0; +// end +// +// else if (ras_test_ctrl.reset_generic_input_wires) begin +// `ifdef VERILATOR +// generic_input_wires <= {32'h72746C76, ERROR_NONE_SET}; /* 32'h72746c76 is the big-endian ASCII representation of 'vltr' (r t l v) */ +// `else +// generic_input_wires <= {32'h0, ERROR_NONE_SET}; +// `endif +// end +// +// else if (c_state_apb == S_APB_WAIT_ERROR_AXS && rv_dma_resp_error) begin +// generic_input_wires <= {32'h0, DMA_ERROR_OBSERVED}; +// end +// +// else if (c_state_apb == S_APB_RD_HW_ERROR_FATAL && apb_xfer_end) begin +// if (PRDATA[`SOC_IFC_REG_CPTRA_HW_ERROR_FATAL_ICCM_ECC_UNC_LOW]) begin +// generic_input_wires <= {32'h0, ICCM_FATAL_OBSERVED}; +// end +// else if (PRDATA[`SOC_IFC_REG_CPTRA_HW_ERROR_FATAL_DCCM_ECC_UNC_LOW]) begin +// generic_input_wires <= {32'h0, DCCM_FATAL_OBSERVED}; +// end +// else if (PRDATA[`SOC_IFC_REG_CPTRA_HW_ERROR_FATAL_NMI_PIN_LOW]) begin +// generic_input_wires <= {32'h0, NMI_FATAL_OBSERVED}; +// end +// else if (PRDATA[`SOC_IFC_REG_CPTRA_HW_ERROR_FATAL_CRYPTO_ERR_LOW]) begin +// generic_input_wires <= {32'h0, CRYPTO_ERROR_OBSERVED}; +// end +// else begin +// generic_input_wires <= {32'h0, ERROR_NONE_SET}; +// end +// end +// +// else if (c_state_apb == S_APB_RD_HW_ERROR_NON_FATAL && apb_xfer_end) begin +// if (PRDATA[`SOC_IFC_REG_CPTRA_HW_ERROR_NON_FATAL_MBOX_PROT_NO_LOCK_LOW]) begin +// generic_input_wires <= {32'h0, PROT_NO_LOCK_NON_FATAL_OBSERVED}; +// end +// else if (PRDATA[`SOC_IFC_REG_CPTRA_HW_ERROR_NON_FATAL_MBOX_PROT_OOO_LOW]) begin +// generic_input_wires <= {32'h0, PROT_OOO_NON_FATAL_OBSERVED}; +// end +// else if (PRDATA[`SOC_IFC_REG_CPTRA_HW_ERROR_NON_FATAL_MBOX_ECC_UNC_LOW]) begin +// generic_input_wires <= {32'h0, MBOX_NON_FATAL_OBSERVED}; +// end +// else begin +// generic_input_wires <= {32'h0, ERROR_NONE_SET}; +// end +// end +// +// end + +// always@(negedge core_clk or negedge cptra_pwrgood) begin +// // This persists across soft reset +// if (!cptra_pwrgood) begin +// soc_ifc_hw_error_wdata <= '0; +// end +// else if (c_state_apb inside {S_APB_RD_HW_ERROR_FATAL, S_APB_RD_HW_ERROR_NON_FATAL} && apb_xfer_end) begin +// // HW ERROR registers are W1C, capture the set bits +// soc_ifc_hw_error_wdata <= PRDATA; +// end +// else if (c_state_apb inside {S_APB_WR_HW_ERROR_FATAL, S_APB_WR_HW_ERROR_NON_FATAL} && apb_xfer_end) begin +// // Clear after completing the write +// soc_ifc_hw_error_wdata <= 0; +// end +// end always@(negedge core_clk or negedge cptra_rst_b) begin if (!cptra_rst_b) begin @@ -310,7 +324,7 @@ module caliptra_top_tb ( always_comb cptra_error_fatal_dly_p = cptra_error_fatal_counter == 16'h0040; always_comb cptra_error_non_fatal_dly_p = cptra_error_non_fatal_counter == 16'h0040; - always_comb assert_rst_flag_from_fatal = c_state_apb == S_APB_ERROR; +// always_comb assert_rst_flag_from_fatal = c_state_apb == S_APB_ERROR; always@(negedge core_clk) begin if (!cptra_pwrgood) begin count_deassert_rst_flag_from_fatal <= 0; @@ -327,84 +341,84 @@ module caliptra_top_tb ( // Leave reset asserted for 32 clock cycles always_comb deassert_rst_flag_from_fatal = count_deassert_rst_flag_from_fatal == 31; - assert property (@(posedge core_clk) c_state_apb == S_APB_WR_FUSE_DONE |-> !cptra_error_non_fatal) else begin - $error("cptra_error_non_fatal observed during boot up"); - $finish; - end - assert property (@(posedge core_clk) c_state_apb == S_APB_WR_FUSE_DONE |-> !cptra_error_fatal) else begin - $error("cptra_error_fatal observed during boot up"); - $finish; - end - - always@(negedge core_clk or negedge cptra_rst_b) begin - if(!cptra_rst_b) begin - mbox_apb_dataout_read_ooo <= 1'b0; - end - else if(ras_test_ctrl.do_ooo_access) begin - mbox_apb_dataout_read_ooo <= 1'b1; - end - else if (mbox_apb_dataout_read_ooo && (c_state_apb == S_APB_RD_DATAOUT) && (apb_rd_count == dlen)) begin - mbox_apb_dataout_read_ooo <= 1'b0; - end - end - - always@(negedge core_clk or negedge cptra_rst_b) begin - if(!cptra_rst_b) begin - mbox_apb_dataout_read_no_lock <= 1'b0; - end - else if(ras_test_ctrl.do_no_lock_access) begin - mbox_apb_dataout_read_no_lock <= 1'b1; - end - else if (mbox_apb_dataout_read_no_lock && (c_state_apb == S_APB_RD_DATAOUT) && (apb_rd_count == dlen)) begin - mbox_apb_dataout_read_no_lock <= 1'b0; - end - end - - always@(negedge core_clk or negedge cptra_rst_b) begin - if (!cptra_rst_b) begin - mbox_ooo_read_done <= 1'b0; - end - else if (mbox_apb_dataout_read_ooo && (c_state_apb == S_APB_RD_DATAOUT) && (apb_rd_count == dlen)) begin - mbox_ooo_read_done <= 1'b1; - end - else if (c_state_apb == S_APB_WR_HW_ERROR_NON_FATAL) - mbox_ooo_read_done <= 1'b0; - else if (ras_test_ctrl.reset_ooo_done_flag) - mbox_ooo_read_done <= 1'b0; - end - - always@(negedge core_clk or negedge cptra_rst_b) begin - if (!cptra_rst_b) begin - mbox_no_lock_read_done <= 1'b0; - end - else if (mbox_apb_dataout_read_no_lock && (c_state_apb == S_APB_RD_DATAOUT) && (apb_rd_count == dlen)) begin - mbox_no_lock_read_done <= 1'b1; - end - else if (c_state_apb == S_APB_WR_HW_ERROR_NON_FATAL) - mbox_no_lock_read_done <= 1'b0; - else if (ras_test_ctrl.reset_no_lock_done_flag) - mbox_no_lock_read_done <= 1'b0; - end - - always@(negedge core_clk or negedge cptra_rst_b) begin - if (!cptra_rst_b) begin - execute_mbox_rx_protocol <= 'b0; - end - else if (c_state_apb == S_APB_WR_EXEC) begin - execute_mbox_rx_protocol <= 'b1; - end - else if (execute_mbox_rx_protocol && ((c_state_apb == S_APB_RST_EXEC) && apb_xfer_end)) begin - execute_mbox_rx_protocol <= 'b0; - end - end - +// assert property (@(posedge core_clk) c_state_apb == S_APB_WR_FUSE_DONE |-> !cptra_error_non_fatal) else begin +// $error("cptra_error_non_fatal observed during boot up"); +// $finish; +// end +// assert property (@(posedge core_clk) c_state_apb == S_APB_WR_FUSE_DONE |-> !cptra_error_fatal) else begin +// $error("cptra_error_fatal observed during boot up"); +// $finish; +// end + +// // ==================================================== FIXME ===================================================== // +// always@(negedge core_clk or negedge cptra_rst_b) begin // +// if(!cptra_rst_b) begin // +// mbox_apb_dataout_read_ooo <= 1'b0; // +// end // +// else if(ras_test_ctrl.do_ooo_access) begin // +// mbox_apb_dataout_read_ooo <= 1'b1; // +// end // +// else if (mbox_apb_dataout_read_ooo && (c_state_apb == S_APB_RD_DATAOUT) && (apb_rd_count == dlen)) begin // +// mbox_apb_dataout_read_ooo <= 1'b0; // +// end // +// end // +// // +// always@(negedge core_clk or negedge cptra_rst_b) begin // +// if(!cptra_rst_b) begin // +// mbox_apb_dataout_read_no_lock <= 1'b0; // +// end // +// else if(ras_test_ctrl.do_no_lock_access) begin // +// mbox_apb_dataout_read_no_lock <= 1'b1; // +// end // +// else if (mbox_apb_dataout_read_no_lock && (c_state_apb == S_APB_RD_DATAOUT) && (apb_rd_count == dlen)) begin // +// mbox_apb_dataout_read_no_lock <= 1'b0; // +// end // +// end // +// // +// always@(negedge core_clk or negedge cptra_rst_b) begin // +// if (!cptra_rst_b) begin // +// mbox_ooo_read_done <= 1'b0; // +// end // +// else if (mbox_apb_dataout_read_ooo && (c_state_apb == S_APB_RD_DATAOUT) && (apb_rd_count == dlen)) begin // +// mbox_ooo_read_done <= 1'b1; // +// end // +// else if (c_state_apb == S_APB_WR_HW_ERROR_NON_FATAL) // +// mbox_ooo_read_done <= 1'b0; // +// else if (ras_test_ctrl.reset_ooo_done_flag) // +// mbox_ooo_read_done <= 1'b0; // +// end // +// // +// always@(negedge core_clk or negedge cptra_rst_b) begin // +// if (!cptra_rst_b) begin // +// mbox_no_lock_read_done <= 1'b0; // +// end // +// else if (mbox_apb_dataout_read_no_lock && (c_state_apb == S_APB_RD_DATAOUT) && (apb_rd_count == dlen)) begin // +// mbox_no_lock_read_done <= 1'b1; // +// end // +// else if (c_state_apb == S_APB_WR_HW_ERROR_NON_FATAL) // +// mbox_no_lock_read_done <= 1'b0; // +// else if (ras_test_ctrl.reset_no_lock_done_flag) // +// mbox_no_lock_read_done <= 1'b0; // +// end // +// // +// always@(negedge core_clk or negedge cptra_rst_b) begin // +// if (!cptra_rst_b) begin // +// execute_mbox_rx_protocol <= 'b0; // +// end // +// else if (c_state_apb == S_APB_WR_EXEC) begin // +// execute_mbox_rx_protocol <= 'b1; // +// end // +// else if (execute_mbox_rx_protocol && ((c_state_apb == S_APB_RST_EXEC) && apb_xfer_end)) begin // +// execute_mbox_rx_protocol <= 'b0; // +// end // +// end // +// // ================================================================================================================ // initial begin cptra_pwrgood = 1'b0; BootFSM_BrkPoint = 1'b1; //Set to 1 even before anything starts cptra_rst_b = 1'b0; - start_apb_fuse_sequence = 1'b0; - //TIE-OFF - PPROT = '0; + assert_rst_flag_from_fatal = 1'b0; + s_axi_if.rst_mgr(); `ifndef VERILATOR if($test$plusargs("dumpon")) $dumpvars; @@ -438,7 +452,132 @@ module caliptra_top_tb ( cptra_obf_key[dword] = cptra_obf_key_fe[dword]; end end - + + // Run the test stimulus + + generic_input_wires = 'h0; // FIXME + $display ("\n\n\n\n\n\n"); + repeat(15) @(posedge core_clk); + $display("CLP: Waiting for cptra_rst_b deassertion\n"); + + forever begin + fork + begin: BOOT_AND_CMD_FLOW + boot_and_cmd_flow = process::self(); + // Repeat this flow after every warm reset + @(posedge cptra_rst_b) + $display("CLP: Observed cptra_rst_b deassertion\n"); + @(posedge caliptra_top_dut.cptra_noncore_rst_b) + $display("CLP: Observed cptra_noncore_rst_b deassertion\n"); + + wait(ready_for_fuses == 1); + $display ("CLP: Ready for fuse download\n"); + + repeat(5) @(posedge core_clk); + + $display ("SoC: Writing obfuscated UDS to fuse bank\n"); + for (int dw=0; dw < `CLP_OBF_UDS_DWORDS; dw++) begin + wdata = new[1]('{cptra_uds_tb[dw]}); + wstrb = new[1]('{{`CALIPTRA_AXI_DATA_WIDTH{1'b1}}}); + s_axi_if.axi_write(.addr(`CLP_SOC_IFC_REG_FUSE_UDS_SEED_0 + 4 * dw), .data(wdata), .strb(wstrb), .resp(wresp)); + end + + $display ("SoC: Writing obfuscated Field Entropy to fuse bank\n"); + for (int dw=0; dw < `CLP_OBF_FE_DWORDS; dw++) begin + wdata = new[1]('{cptra_fe_tb[dw]}); + wstrb = new[1]('{{`CALIPTRA_AXI_DATA_WIDTH{1'b1}}}); + s_axi_if.axi_write(.addr(`CLP_SOC_IFC_REG_FUSE_FIELD_ENTROPY_0 + 4 * dw), .data(wdata), .strb(wstrb), .resp(wresp)); + end + + $display ("SoC: Writing SOC Stepping ID to fuse bank\n"); + wdata = new[1]('{$urandom()}); + wstrb = new[1]('{{`CALIPTRA_AXI_DATA_WIDTH{1'b1}}}); + s_axi_if.axi_write(.addr(`CLP_SOC_IFC_REG_FUSE_SOC_STEPPING_ID), .data(wdata), .strb(wstrb), .resp(wresp)); + + $display ("SoC: Writing fuse done register\n"); + wdata = new[1]('{32'h00000001}); + wstrb = new[1]('{{`CALIPTRA_AXI_DATA_WIDTH{1'b1}}}); + s_axi_if.axi_write(.addr(`CLP_SOC_IFC_REG_CPTRA_FUSE_WR_DONE), .data(wdata), .strb(wstrb), .resp(wresp)); + + assert (!cptra_error_non_fatal) else begin + $error("cptra_error_non_fatal observed during boot up"); + $finish; + end + assert (!cptra_error_fatal) else begin + $error("cptra_error_fatal observed during boot up"); + $finish; + end + + if (BootFSM_BrkPoint) begin + $display ("SoC: Polling Flow Status\n"); + rdata = new[1]('{default:0}); + rresp = new[1]; + do begin + s_axi_if.axi_read(.addr(`CLP_SOC_IFC_REG_CPTRA_FLOW_STATUS), .data(rdata), .resp(rresp)); + end while(rdata[0][`SOC_IFC_REG_CPTRA_FLOW_STATUS_READY_FOR_FUSES_LOW] == 1); + $display ("SoC: Writing BootGo register\n"); + wdata = new[1]('{32'h00000001}); + wstrb = new[1]('{{`CALIPTRA_AXI_DATA_WIDTH{1'b1}}}); + s_axi_if.axi_write(.addr(`CLP_SOC_IFC_REG_CPTRA_BOOTFSM_GO), .data(wdata), .strb(wstrb), .resp(wresp)); + end + + @(posedge caliptra_top_dut.cptra_uc_rst_b) + $display("CLP: Observed cptra_uc_rst_b deassertion\n"); + + $display ("CLP: ROM Flow in progress...\n"); +// //stuff +// if (fixme_demo) begin +// $display ("CLP: Ready for firmware push\n"); +// $display ("SoC: Requesting mailbox lock\n"); +// //stuff +// $display ("SoC: Lock granted\n"); +// //stuff +// $display ("SoC: Writing the Command Register\n"); +// //stuff +// $display ("SoC: Writing the Data Length Register\n"); +// //stuff +// $display ("SoC: Writing the Firmware into Data-in Register\n"); +// //stuff +// $display ("SoC: Setting the Execute Register\n"); +// //stuff +// // TODO wait for mailbox_data_avail +// $display("SoC: Reading the Data Length Register\n"); +// //stuff +// $display("SoC: Reading the Data Out Register\n"); +// //stuff +// $display("SoC: Resetting the Execute Register\n"); +// //stuff +// end +// forever begin +// if (mailbox_data_avail) begin +// $display ("SoC: Writing the Mbox Status Register\n"); +// //stuff +// end +// if (fixme_ras) begin +// $display("SoC: Waiting to see cptra_error_fatal/non_fatal\n"); +// //stuff +// $display("SoC: Observed cptra_error_fatal; reading Caliptra register\n"); +// assert_rst_flag_from_fatal = 1; +// //stuff +// $display("SoC: Observed cptra_error_fatal; writing to clear Caliptra register\n"); +// //stuff +// $display("SoC: Observed cptra_error_non_fatal; reading Caliptra register\n"); +// //stuff +// $display("SoC: Observed cptra_error_non_fatal; writing to clear Caliptra register\n"); +// //stuff +// end + forever @(posedge core_clk); + end: BOOT_AND_CMD_FLOW + begin: RESET_FLOW + @(negedge cptra_rst_b); + $display("CLP: Observed cptra_rst_b assertion\n"); +// disable BOOT_AND_CMD_FLOW; + if (boot_and_cmd_flow != null) boot_and_cmd_flow.kill(); + assert_rst_flag_from_fatal = 1'b0; + s_axi_if.rst_mgr(); + end: RESET_FLOW + join_any + end end assign assert_rst_flag = assert_rst_flag_from_service || assert_rst_flag_from_fatal; @@ -446,612 +585,600 @@ module caliptra_top_tb ( always @(posedge core_clk) begin //Reset/pwrgood assertion during runtime if (cycleCnt == 15 || deassert_hard_rst_flag) begin - $display ("\n\n\n\n\n\n"); - $display ("SoC: Asserting cptra_pwrgood and breakpoint\n"); + $display ("SoC: Asserting cptra_pwrgood and breakpoint. cycleCnt [%d] deassert_hard_rst_flag[%d]\n", cycleCnt, deassert_hard_rst_flag); //assert power good cptra_pwrgood <= 1'b1; - //BootFSM_BrkPoint <= 1'b1; end else if (cycleCnt == 20 || deassert_rst_flag) begin - $display ("SoC: De-Asserting cptra_rst_b\n"); + $display ("SoC: De-Asserting cptra_rst_b. cycleCnt [%d] deassert_rst_flag[%d]\n", cycleCnt, deassert_rst_flag); //de-assert reset cptra_rst_b <= 1'b1; end else if (assert_hard_rst_flag) begin cptra_pwrgood <= 'b0; cptra_rst_b <= 'b0; - start_apb_fuse_sequence <= 1'b0; end else if (assert_rst_flag) begin cptra_rst_b <= 'b0; - start_apb_fuse_sequence <= 1'b0; - end - //wait for fuse indication - else if (ready_for_fuses == 1'b0) begin - //nop - cycleCnt_Flag <= cycleCnt; - end - else if (cycleCnt == cycleCnt_Flag + 5) begin - start_apb_fuse_sequence <= 1'b1; - end - end - - always@(negedge core_clk or negedge cptra_rst_b) begin - if (!cptra_rst_b) begin - dlen <= '0; - end - else if ((c_state_apb == S_APB_RD_DLEN) && apb_xfer_end) begin - dlen <= PRDATA; - end - end - - always@(posedge core_clk or negedge cptra_rst_b) begin - if (!cptra_rst_b) begin - c_state_apb <= S_APB_IDLE; - apb_wr_count <= '0; - apb_rd_count <= '0; - apb_enable_ph <= 0; - end - else begin - c_state_apb <= n_state_apb; - apb_wr_count <= apb_wr_count_nxt; - apb_rd_count <= apb_rd_count_nxt; - //next phase is an access phase if this is setup phase OR it's access and responder isn't ready - apb_enable_ph <= (PSEL & ~PENABLE) | (PSEL & PENABLE & ~PREADY); - end - if (c_state_apb != n_state_apb) begin - case (n_state_apb) - S_APB_WR_UDS: begin - $display ("CLP: Ready for fuse download\n"); - $display ("SoC: Writing obfuscated UDS to fuse bank\n"); - end - S_APB_WR_FE: begin - $display ("SoC: Writing obfuscated Field Entropy to fuse bank\n"); - end - S_APB_WR_SOC_STEPPING_ID: begin - $display ("SoC: Writing SOC Stepping ID to fuse bank\n"); - end - S_APB_WR_FUSE_DONE: begin - $display ("SoC: Writing fuse done register\n"); - end - S_APB_POLL_FLOW_ST: begin - $display ("SoC: Polling Flow Status\n"); - end - S_APB_WR_BOOT_GO: begin - $display ("SoC: Writing BootGo register\n"); - end - S_APB_WAIT_FW_TEST: begin - $display ("CLP: ROM Flow in progress...\n"); - end - S_APB_POLL_LOCK: begin - $display ("CLP: Ready for firmware push\n"); - $display ("SoC: Requesting mailbox lock\n"); - end - S_APB_PRE_WR_CMD: begin - $display ("SoC: Lock granted\n"); - end - S_APB_WR_CMD: begin - $display ("SoC: Writing the Command Register\n"); - end - S_APB_WR_DLEN: begin - $display ("SoC: Writing the Data Length Register\n"); - end - S_APB_WR_DATAIN: begin - $display ("SoC: Writing the Firmware into Data-in Register\n"); - end - S_APB_WR_EXEC: begin - $display ("SoC: Setting the Execute Register\n"); - end - S_APB_WR_STATUS: begin - $display ("SoC: Writing the Mbox Status Register\n"); - end - S_APB_WAIT_ERROR_AXS: begin - $display("SoC: Waiting to see cptra_error_fatal/non_fatal\n"); - end - S_APB_RD_HW_ERROR_FATAL: begin - $display("SoC: Observed cptra_error_fatal; reading Caliptra register\n"); - end - S_APB_WR_HW_ERROR_FATAL: begin - $display("SoC: Observed cptra_error_fatal; writing to clear Caliptra register\n"); - end - S_APB_RD_HW_ERROR_NON_FATAL: begin - $display("SoC: Observed cptra_error_non_fatal; reading Caliptra register\n"); - end - S_APB_WR_HW_ERROR_NON_FATAL: begin - $display("SoC: Observed cptra_error_non_fatal; writing to clear Caliptra register\n"); - end - S_APB_DONE: begin - end - S_APB_RD_DLEN: begin - $display("SoC: Reading the Data Length Register\n"); - end - S_APB_RD_DATAOUT: begin - $display("SoC: Reading the Data Out Register\n"); - end - S_APB_RST_EXEC: begin - $display("SoC: Resetting the Execute Register\n"); - end - default: begin - $display("Entering unexpected APB state: %p", n_state_apb); - end - endcase end end - always_comb begin - apb_wr_count_nxt = 0; - apb_rd_count_nxt = 0; - case (c_state_apb) inside - S_APB_IDLE: begin - if (start_apb_fuse_sequence) - n_state_apb = S_APB_WR_UDS; - else - n_state_apb = S_APB_IDLE; - end - //load fuses - S_APB_WR_UDS: begin - if (apb_xfer_end && apb_wr_count == (`CLP_OBF_UDS_DWORDS-1)) begin - n_state_apb = S_APB_WR_FE; - apb_wr_count_nxt = '0; - end - else if (apb_xfer_end) begin - n_state_apb = S_APB_WR_UDS; - apb_wr_count_nxt = apb_wr_count + 1; - end - else begin - n_state_apb = S_APB_WR_UDS; - apb_wr_count_nxt = apb_wr_count; - end - end - S_APB_WR_FE: begin - if (apb_xfer_end && apb_wr_count == (`CLP_OBF_FE_DWORDS-1)) begin - n_state_apb = S_APB_WR_SOC_STEPPING_ID; - apb_wr_count_nxt = '0; - end - else if (apb_xfer_end) begin - n_state_apb = S_APB_WR_FE; - apb_wr_count_nxt = apb_wr_count + 1; - end - else begin - n_state_apb = S_APB_WR_FE; - apb_wr_count_nxt = apb_wr_count; - end - end - S_APB_WR_SOC_STEPPING_ID: begin - if (apb_xfer_end) begin - n_state_apb = S_APB_WR_FUSE_DONE; - end - else begin - n_state_apb = S_APB_WR_SOC_STEPPING_ID; - end - end - //set fuse done - S_APB_WR_FUSE_DONE: begin - if (apb_xfer_end) begin - if(BootFSM_BrkPoint) begin - n_state_apb = S_APB_POLL_FLOW_ST; - end - else begin - n_state_apb = S_APB_WAIT_FW_TEST; - end - end - else begin - n_state_apb = S_APB_WR_FUSE_DONE; - end - end - S_APB_POLL_FLOW_ST: begin - if (apb_xfer_end && (PRDATA[`SOC_IFC_REG_CPTRA_FLOW_STATUS_READY_FOR_FUSES_LOW] == 0)) begin - n_state_apb = S_APB_WR_BOOT_GO; - end - else begin - n_state_apb = S_APB_POLL_FLOW_ST; - end - end - //Write BootGo register - S_APB_WR_BOOT_GO: begin - if(apb_xfer_end) begin - n_state_apb = S_APB_WAIT_FW_TEST; - end - else begin - n_state_apb = S_APB_WR_BOOT_GO; - end - end - - //This is for Caliptra Demo, smoke tests will stop here since they don't set ready for fw - //wait for fw req - S_APB_WAIT_FW_TEST: begin - if (ready_for_fw_push & (apb_wr_count == 5)) begin - n_state_apb = S_APB_POLL_LOCK; - apb_wr_count_nxt = 0; - end - else if (ready_for_fw_push) begin - n_state_apb = S_APB_WAIT_FW_TEST; - apb_wr_count_nxt = apb_wr_count + 1; - end - else if (ras_test_ctrl.error_injection_seen) begin - n_state_apb = S_APB_WAIT_ERROR_AXS; - end - else begin - n_state_apb = S_APB_WAIT_FW_TEST; - apb_wr_count_nxt = 0; - end - end - // poll for lock register - S_APB_POLL_LOCK: begin - if (apb_xfer_end && (PRDATA != 0)) begin - n_state_apb = mbox_apb_dataout_read_ooo ? S_APB_RD_DLEN : S_APB_WR_CMD; - end - else begin - n_state_apb = S_APB_POLL_LOCK; - end - end - S_APB_PRE_WR_CMD: begin - if (apb_wr_count == 5) begin - n_state_apb = S_APB_WR_CMD; - apb_wr_count_nxt = 0; - end - else begin - n_state_apb = S_APB_PRE_WR_CMD; - apb_wr_count_nxt = apb_wr_count + 1; - end - end - //write to MBOX_ADDR_CMD - S_APB_WR_CMD: begin - if (apb_xfer_end) - n_state_apb = S_APB_WR_DLEN; - else - n_state_apb = S_APB_WR_CMD; - end - // write to MBOX_ADDR_DLEN - S_APB_WR_DLEN: begin - if (apb_xfer_end) - n_state_apb = S_APB_WR_DATAIN; - else - n_state_apb = S_APB_WR_DLEN; - end - // write a random block in - S_APB_WR_DATAIN: begin - if (apb_xfer_end && apb_wr_count == (FW_NUM_DWORDS-1)) begin - n_state_apb = S_APB_WR_EXEC; - apb_wr_count_nxt = '0; - end - else if (apb_xfer_end) begin - n_state_apb = S_APB_WR_DATAIN; - apb_wr_count_nxt = apb_wr_count + 1; - end - else begin - n_state_apb = S_APB_WR_DATAIN; - apb_wr_count_nxt = apb_wr_count; - end - end - // execute - S_APB_WR_EXEC: begin - if (apb_xfer_end) - n_state_apb = S_APB_DONE; - else - n_state_apb = S_APB_WR_EXEC; - end - // status - S_APB_WR_STATUS: begin - if (apb_xfer_end) - n_state_apb = S_APB_DONE; - else - n_state_apb = S_APB_WR_STATUS; - end - S_APB_WAIT_ERROR_AXS: begin - if (cptra_error_fatal_dly_p) begin - n_state_apb = S_APB_RD_HW_ERROR_FATAL; - end - else if (cptra_error_non_fatal_dly_p) begin - n_state_apb = S_APB_RD_HW_ERROR_NON_FATAL; - end - else if (soc_ifc_hw_error_wdata) begin - n_state_apb = S_APB_WR_HW_ERROR_FATAL; - end - else if (ras_test_ctrl.do_no_lock_access) begin - n_state_apb = S_APB_RD_DLEN; - end - else if (mbox_apb_dataout_read_ooo && !mbox_ooo_read_done) begin - n_state_apb = S_APB_POLL_LOCK; - end - else begin - n_state_apb = S_APB_WAIT_ERROR_AXS; - end - end - S_APB_RD_HW_ERROR_FATAL: begin - // Go to ERROR state to wait for cptra_rst_b to assert - if (apb_xfer_end) begin - n_state_apb = S_APB_ERROR; - end - else begin - n_state_apb = S_APB_RD_HW_ERROR_FATAL; - end - end - S_APB_WR_HW_ERROR_FATAL: begin - if (apb_xfer_end) begin - n_state_apb = S_APB_WAIT_ERROR_AXS; - end - else begin - n_state_apb = S_APB_WR_HW_ERROR_FATAL; - end - end - S_APB_RD_HW_ERROR_NON_FATAL: begin - if (apb_xfer_end) begin - n_state_apb = S_APB_WR_HW_ERROR_NON_FATAL; - end - else begin - n_state_apb = S_APB_RD_HW_ERROR_NON_FATAL; - end - end - S_APB_WR_HW_ERROR_NON_FATAL: begin - if (apb_xfer_end) begin - n_state_apb = S_APB_WAIT_ERROR_AXS; - end - else begin - n_state_apb = S_APB_WR_HW_ERROR_NON_FATAL; - end - end - S_APB_DONE: begin - apb_wr_count_nxt = '0; - apb_rd_count_nxt = '0; - if (mailbox_data_avail && execute_mbox_rx_protocol) - n_state_apb = S_APB_RD_DLEN; - else if (mailbox_data_avail && ~status_set && ~execute_mbox_rx_protocol) - n_state_apb = S_APB_WR_STATUS; - else - n_state_apb = S_APB_DONE; - end - S_APB_RD_DLEN: begin - if (apb_xfer_end) - n_state_apb = S_APB_RD_DATAOUT; - else - n_state_apb = S_APB_RD_DLEN; - end - S_APB_RD_DATAOUT: begin - if (apb_xfer_end && (apb_rd_count == dlen)) begin - n_state_apb = (mbox_no_lock_read_done || mbox_ooo_read_done) ? S_APB_WAIT_ERROR_AXS : S_APB_RST_EXEC; - apb_rd_count_nxt = '0; - end - else if (apb_xfer_end) begin - n_state_apb = S_APB_RD_DATAOUT; - apb_rd_count_nxt = apb_rd_count + 1; - end - else begin - n_state_apb = S_APB_RD_DATAOUT; - apb_rd_count_nxt = apb_rd_count; - end - end - S_APB_RST_EXEC: begin - if (apb_xfer_end) - n_state_apb = S_APB_DONE; - else - n_state_apb = S_APB_RST_EXEC; - end - default: begin - apb_wr_count_nxt = apb_wr_count; - apb_rd_count_nxt = apb_rd_count; - n_state_apb = S_APB_ERROR; - end - endcase - end +// always@(negedge core_clk or negedge cptra_rst_b) begin +// if (!cptra_rst_b) begin +// dlen <= '0; +// end +// else if ((c_state_apb == S_APB_RD_DLEN) && apb_xfer_end) begin +// dlen <= PRDATA; +// end +// end + +// always@(posedge core_clk or negedge cptra_rst_b) begin +// if (!cptra_rst_b) begin +// c_state_apb <= S_APB_IDLE; +// apb_wr_count <= '0; +// apb_rd_count <= '0; +// apb_enable_ph <= 0; +// end +// else begin +// c_state_apb <= n_state_apb; +// apb_wr_count <= apb_wr_count_nxt; +// apb_rd_count <= apb_rd_count_nxt; +// //next phase is an access phase if this is setup phase OR it's access and responder isn't ready +// apb_enable_ph <= (PSEL & ~PENABLE) | (PSEL & PENABLE & ~PREADY); +// end +// if (c_state_apb != n_state_apb) begin +// case (n_state_apb) +// S_APB_WR_UDS: begin +//// $display ("CLP: Ready for fuse download\n"); +//// $display ("SoC: Writing obfuscated UDS to fuse bank\n"); +// end +// S_APB_WR_FE: begin +//// $display ("SoC: Writing obfuscated Field Entropy to fuse bank\n"); +// end +// S_APB_WR_SOC_STEPPING_ID: begin +//// $display ("SoC: Writing SOC Stepping ID to fuse bank\n"); +// end +// S_APB_WR_FUSE_DONE: begin +//// $display ("SoC: Writing fuse done register\n"); +// end +// S_APB_POLL_FLOW_ST: begin +//// $display ("SoC: Polling Flow Status\n"); +// end +// S_APB_WR_BOOT_GO: begin +//// $display ("SoC: Writing BootGo register\n"); +// end +// S_APB_WAIT_FW_TEST: begin +//// $display ("CLP: ROM Flow in progress...\n"); +// end +// S_APB_POLL_LOCK: begin +//// $display ("CLP: Ready for firmware push\n"); +//// $display ("SoC: Requesting mailbox lock\n"); +// end +// S_APB_PRE_WR_CMD: begin +//// $display ("SoC: Lock granted\n"); +// end +// S_APB_WR_CMD: begin +//// $display ("SoC: Writing the Command Register\n"); +// end +// S_APB_WR_DLEN: begin +//// $display ("SoC: Writing the Data Length Register\n"); +// end +// S_APB_WR_DATAIN: begin +//// $display ("SoC: Writing the Firmware into Data-in Register\n"); +// end +// S_APB_WR_EXEC: begin +//// $display ("SoC: Setting the Execute Register\n"); +// end +// S_APB_WR_STATUS: begin +//// $display ("SoC: Writing the Mbox Status Register\n"); +// end +// S_APB_WAIT_ERROR_AXS: begin +//// $display("SoC: Waiting to see cptra_error_fatal/non_fatal\n"); +// end +// S_APB_RD_HW_ERROR_FATAL: begin +//// $display("SoC: Observed cptra_error_fatal; reading Caliptra register\n"); +// end +// S_APB_WR_HW_ERROR_FATAL: begin +//// $display("SoC: Observed cptra_error_fatal; writing to clear Caliptra register\n"); +// end +// S_APB_RD_HW_ERROR_NON_FATAL: begin +//// $display("SoC: Observed cptra_error_non_fatal; reading Caliptra register\n"); +// end +// S_APB_WR_HW_ERROR_NON_FATAL: begin +//// $display("SoC: Observed cptra_error_non_fatal; writing to clear Caliptra register\n"); +// end +// S_APB_DONE: begin +// end +// S_APB_RD_DLEN: begin +//// $display("SoC: Reading the Data Length Register\n"); +// end +// S_APB_RD_DATAOUT: begin +//// $display("SoC: Reading the Data Out Register\n"); +// end +// S_APB_RST_EXEC: begin +//// $display("SoC: Resetting the Execute Register\n"); +// end +// default: begin +// $display("Entering unexpected APB state: %p", n_state_apb); +// end +// endcase +// end +// end + +// always_comb begin +// apb_wr_count_nxt = 0; +// apb_rd_count_nxt = 0; +// case (c_state_apb) inside +// S_APB_IDLE: begin +// if (start_apb_fuse_sequence) +// n_state_apb = S_APB_WR_UDS; +// else +// n_state_apb = S_APB_IDLE; +// end +// //load fuses +// S_APB_WR_UDS: begin +// if (apb_xfer_end && apb_wr_count == (`CLP_OBF_UDS_DWORDS-1)) begin +// n_state_apb = S_APB_WR_FE; +// apb_wr_count_nxt = '0; +// end +// else if (apb_xfer_end) begin +// n_state_apb = S_APB_WR_UDS; +// apb_wr_count_nxt = apb_wr_count + 1; +// end +// else begin +// n_state_apb = S_APB_WR_UDS; +// apb_wr_count_nxt = apb_wr_count; +// end +// end +// S_APB_WR_FE: begin +// if (apb_xfer_end && apb_wr_count == (`CLP_OBF_FE_DWORDS-1)) begin +// n_state_apb = S_APB_WR_SOC_STEPPING_ID; +// apb_wr_count_nxt = '0; +// end +// else if (apb_xfer_end) begin +// n_state_apb = S_APB_WR_FE; +// apb_wr_count_nxt = apb_wr_count + 1; +// end +// else begin +// n_state_apb = S_APB_WR_FE; +// apb_wr_count_nxt = apb_wr_count; +// end +// end +// S_APB_WR_SOC_STEPPING_ID: begin +// if (apb_xfer_end) begin +// n_state_apb = S_APB_WR_FUSE_DONE; +// end +// else begin +// n_state_apb = S_APB_WR_SOC_STEPPING_ID; +// end +// end +// //set fuse done +// S_APB_WR_FUSE_DONE: begin +// if (apb_xfer_end) begin +// if(BootFSM_BrkPoint) begin +// n_state_apb = S_APB_POLL_FLOW_ST; +// end +// else begin +// n_state_apb = S_APB_WAIT_FW_TEST; +// end +// end +// else begin +// n_state_apb = S_APB_WR_FUSE_DONE; +// end +// end +// S_APB_POLL_FLOW_ST: begin +// if (apb_xfer_end && (PRDATA[`SOC_IFC_REG_CPTRA_FLOW_STATUS_READY_FOR_FUSES_LOW] == 0)) begin +// n_state_apb = S_APB_WR_BOOT_GO; +// end +// else begin +// n_state_apb = S_APB_POLL_FLOW_ST; +// end +// end +// //Write BootGo register +// S_APB_WR_BOOT_GO: begin +// if(apb_xfer_end) begin +// n_state_apb = S_APB_WAIT_FW_TEST; +// end +// else begin +// n_state_apb = S_APB_WR_BOOT_GO; +// end +// end +// +// //This is for Caliptra Demo, smoke tests will stop here since they don't set ready for fw +// //wait for fw req +// S_APB_WAIT_FW_TEST: begin +// if (ready_for_fw_push & (apb_wr_count == 5)) begin +// n_state_apb = S_APB_POLL_LOCK; +// apb_wr_count_nxt = 0; +// end +// else if (ready_for_fw_push) begin +// n_state_apb = S_APB_WAIT_FW_TEST; +// apb_wr_count_nxt = apb_wr_count + 1; +// end +// else if (ras_test_ctrl.error_injection_seen) begin +// n_state_apb = S_APB_WAIT_ERROR_AXS; +// end +// else begin +// n_state_apb = S_APB_WAIT_FW_TEST; +// apb_wr_count_nxt = 0; +// end +// end +// // poll for lock register +// S_APB_POLL_LOCK: begin +// if (apb_xfer_end && (PRDATA != 0)) begin +// n_state_apb = mbox_apb_dataout_read_ooo ? S_APB_RD_DLEN : S_APB_WR_CMD; +// end +// else begin +// n_state_apb = S_APB_POLL_LOCK; +// end +// end +// S_APB_PRE_WR_CMD: begin +// if (apb_wr_count == 5) begin +// n_state_apb = S_APB_WR_CMD; +// apb_wr_count_nxt = 0; +// end +// else begin +// n_state_apb = S_APB_PRE_WR_CMD; +// apb_wr_count_nxt = apb_wr_count + 1; +// end +// end +// //write to MBOX_ADDR_CMD +// S_APB_WR_CMD: begin +// if (apb_xfer_end) +// n_state_apb = S_APB_WR_DLEN; +// else +// n_state_apb = S_APB_WR_CMD; +// end +// // write to MBOX_ADDR_DLEN +// S_APB_WR_DLEN: begin +// if (apb_xfer_end) +// n_state_apb = S_APB_WR_DATAIN; +// else +// n_state_apb = S_APB_WR_DLEN; +// end +// // write a random block in +// S_APB_WR_DATAIN: begin +// if (apb_xfer_end && apb_wr_count == (FW_NUM_DWORDS-1)) begin +// n_state_apb = S_APB_WR_EXEC; +// apb_wr_count_nxt = '0; +// end +// else if (apb_xfer_end) begin +// n_state_apb = S_APB_WR_DATAIN; +// apb_wr_count_nxt = apb_wr_count + 1; +// end +// else begin +// n_state_apb = S_APB_WR_DATAIN; +// apb_wr_count_nxt = apb_wr_count; +// end +// end +// // execute +// S_APB_WR_EXEC: begin +// if (apb_xfer_end) +// n_state_apb = S_APB_DONE; +// else +// n_state_apb = S_APB_WR_EXEC; +// end +// // status +// S_APB_WR_STATUS: begin +// if (apb_xfer_end) +// n_state_apb = S_APB_DONE; +// else +// n_state_apb = S_APB_WR_STATUS; +// end +// S_APB_WAIT_ERROR_AXS: begin +// if (cptra_error_fatal_dly_p) begin +// n_state_apb = S_APB_RD_HW_ERROR_FATAL; +// end +// else if (cptra_error_non_fatal_dly_p) begin +// n_state_apb = S_APB_RD_HW_ERROR_NON_FATAL; +// end +// else if (soc_ifc_hw_error_wdata) begin +// n_state_apb = S_APB_WR_HW_ERROR_FATAL; +// end +// else if (ras_test_ctrl.do_no_lock_access) begin +// n_state_apb = S_APB_RD_DLEN; +// end +// else if (mbox_apb_dataout_read_ooo && !mbox_ooo_read_done) begin +// n_state_apb = S_APB_POLL_LOCK; +// end +// else begin +// n_state_apb = S_APB_WAIT_ERROR_AXS; +// end +// end +// S_APB_RD_HW_ERROR_FATAL: begin +// // Go to ERROR state to wait for cptra_rst_b to assert +// if (apb_xfer_end) begin +// n_state_apb = S_APB_ERROR; +// end +// else begin +// n_state_apb = S_APB_RD_HW_ERROR_FATAL; +// end +// end +// S_APB_WR_HW_ERROR_FATAL: begin +// if (apb_xfer_end) begin +// n_state_apb = S_APB_WAIT_ERROR_AXS; +// end +// else begin +// n_state_apb = S_APB_WR_HW_ERROR_FATAL; +// end +// end +// S_APB_RD_HW_ERROR_NON_FATAL: begin +// if (apb_xfer_end) begin +// n_state_apb = S_APB_WR_HW_ERROR_NON_FATAL; +// end +// else begin +// n_state_apb = S_APB_RD_HW_ERROR_NON_FATAL; +// end +// end +// S_APB_WR_HW_ERROR_NON_FATAL: begin +// if (apb_xfer_end) begin +// n_state_apb = S_APB_WAIT_ERROR_AXS; +// end +// else begin +// n_state_apb = S_APB_WR_HW_ERROR_NON_FATAL; +// end +// end +// S_APB_DONE: begin +// apb_wr_count_nxt = '0; +// apb_rd_count_nxt = '0; +// if (mailbox_data_avail && execute_mbox_rx_protocol) +// n_state_apb = S_APB_RD_DLEN; +// else if (mailbox_data_avail && ~status_set && ~execute_mbox_rx_protocol) +// n_state_apb = S_APB_WR_STATUS; +// else +// n_state_apb = S_APB_DONE; +// end +// S_APB_RD_DLEN: begin +// if (apb_xfer_end) +// n_state_apb = S_APB_RD_DATAOUT; +// else +// n_state_apb = S_APB_RD_DLEN; +// end +// S_APB_RD_DATAOUT: begin +// if (apb_xfer_end && (apb_rd_count == dlen)) begin +// n_state_apb = (mbox_no_lock_read_done || mbox_ooo_read_done) ? S_APB_WAIT_ERROR_AXS : S_APB_RST_EXEC; +// apb_rd_count_nxt = '0; +// end +// else if (apb_xfer_end) begin +// n_state_apb = S_APB_RD_DATAOUT; +// apb_rd_count_nxt = apb_rd_count + 1; +// end +// else begin +// n_state_apb = S_APB_RD_DATAOUT; +// apb_rd_count_nxt = apb_rd_count; +// end +// end +// S_APB_RST_EXEC: begin +// if (apb_xfer_end) +// n_state_apb = S_APB_DONE; +// else +// n_state_apb = S_APB_RST_EXEC; +// end +// default: begin +// apb_wr_count_nxt = apb_wr_count; +// apb_rd_count_nxt = apb_rd_count; +// n_state_apb = S_APB_ERROR; +// end +// endcase +// end - always@(posedge core_clk or negedge cptra_rst_b) begin - if (!cptra_rst_b) begin - status_set <= '0; - end else begin - status_set <= ~mailbox_data_avail ? '0 : - (c_state_apb == S_APB_WR_STATUS) ? '1 : status_set; - end - end - - assign apb_xfer_end = PSEL && PENABLE && PREADY; - always@(posedge core_clk) begin - if ((n_state_apb == S_APB_WR_DATAIN) && apb_xfer_end) - fw_blob[apb_wr_count_nxt] <= $urandom; - end - always_comb begin - case (c_state_apb) inside - S_APB_WR_UDS: begin - PADDR = `CLP_SOC_IFC_REG_FUSE_UDS_SEED_0 + 4 * apb_wr_count; - PWDATA = cptra_uds_tb[apb_wr_count]; - end - S_APB_WR_FE: begin - PADDR = `CLP_SOC_IFC_REG_FUSE_FIELD_ENTROPY_0 + 4 * apb_wr_count; - PWDATA = cptra_fe_tb[apb_wr_count]; - end - S_APB_WR_SOC_STEPPING_ID: begin - PADDR = `CLP_SOC_IFC_REG_FUSE_SOC_STEPPING_ID; - PWDATA = $urandom(); - end - S_APB_WR_FUSE_DONE: begin - PADDR = `CLP_SOC_IFC_REG_CPTRA_FUSE_WR_DONE; - PWDATA = 32'h00000001; - end - S_APB_POLL_FLOW_ST: begin - PADDR = `CLP_SOC_IFC_REG_CPTRA_FLOW_STATUS; - PWDATA = '0; - end - S_APB_WR_BOOT_GO: begin - PADDR = `CLP_SOC_IFC_REG_CPTRA_BOOTFSM_GO; - PWDATA = 32'h00000001; - end - S_APB_POLL_LOCK: begin - PADDR = `CLP_MBOX_CSR_MBOX_LOCK; - PWDATA = '0; - end - S_APB_WR_CMD: begin - PADDR = `CLP_MBOX_CSR_MBOX_CMD; - PWDATA = 32'hBA5EBA11; - end - S_APB_WR_DLEN: begin - PADDR = `CLP_MBOX_CSR_MBOX_DLEN; - PWDATA = FW_NUM_DWORDS*4; - end - S_APB_WR_DATAIN: begin - PADDR = `CLP_MBOX_CSR_MBOX_DATAIN; - PWDATA = fw_blob[apb_wr_count]; - end - S_APB_WR_EXEC: begin - PADDR = `CLP_MBOX_CSR_MBOX_EXECUTE; - PWDATA = 32'h00000001; - end - S_APB_WR_STATUS: begin - PADDR = `CLP_MBOX_CSR_MBOX_STATUS; - PWDATA = 32'h00000001; - end - S_APB_RD_HW_ERROR_FATAL: begin - PADDR = `CLP_SOC_IFC_REG_CPTRA_HW_ERROR_FATAL; - PWDATA = soc_ifc_hw_error_wdata; - end - S_APB_WR_HW_ERROR_FATAL: begin - PADDR = `CLP_SOC_IFC_REG_CPTRA_HW_ERROR_FATAL; - PWDATA = soc_ifc_hw_error_wdata; - end - S_APB_RD_HW_ERROR_NON_FATAL: begin - PADDR = `CLP_SOC_IFC_REG_CPTRA_HW_ERROR_NON_FATAL; - PWDATA = soc_ifc_hw_error_wdata; - end - S_APB_WR_HW_ERROR_NON_FATAL: begin - PADDR = `CLP_SOC_IFC_REG_CPTRA_HW_ERROR_NON_FATAL; - PWDATA = soc_ifc_hw_error_wdata; - end - S_APB_DONE: begin - PADDR = '0; - PWDATA = '0; - end - S_APB_RD_DLEN: begin - PADDR = `CLP_MBOX_CSR_MBOX_DLEN; - PWDATA = dlen; - end - S_APB_RD_DATAOUT: begin - PADDR = `CLP_MBOX_CSR_MBOX_DATAOUT; - PWDATA = '0; - end - S_APB_RST_EXEC: begin - PADDR = `CLP_MBOX_CSR_MBOX_EXECUTE; - PWDATA = '0; - end - default: begin - PADDR = '0; - PWDATA = '0; - end - endcase - end - always_comb begin - PENABLE = apb_enable_ph; - case (c_state_apb) inside - S_APB_IDLE: begin - PSEL = 0; - PWRITE = 0; - PAUSER = 0; - end - S_APB_WR_UDS: begin - PSEL = 1; - PWRITE = 1; - PAUSER = 0; - end - S_APB_WR_FE: begin - PSEL = 1; - PWRITE = 1; - PAUSER = 0; - end - S_APB_WR_SOC_STEPPING_ID: begin - PSEL = 1; - PWRITE = 1; - PAUSER = 0; - end - S_APB_WR_FUSE_DONE: begin - PSEL = 1; - PWRITE = 1; - PAUSER = 0; - end - S_APB_POLL_FLOW_ST: begin - PSEL = 1; - PWRITE = 0; - PAUSER = 0; - end - S_APB_WR_BOOT_GO: begin - PSEL = 1; - PWRITE = 1; - PAUSER = 0; - end - S_APB_POLL_LOCK: begin - PSEL = 1; - PWRITE = 0; - PAUSER = '1; - end - S_APB_WR_CMD: begin - PSEL = 1; - PWRITE = 1; - PAUSER = '1; - end - S_APB_WR_DLEN: begin - PSEL = 1; - PWRITE = 1; - PAUSER = '1; - end - S_APB_WR_DATAIN: begin - PSEL = 1; - PWRITE = 1; - PAUSER = '1; - end - S_APB_WR_EXEC: begin - PSEL = 1; - PWRITE = 1; - PAUSER = '1; - end - S_APB_WR_STATUS: begin - PSEL = 1; - PWRITE = 1; - PAUSER = '1; - end - S_APB_RD_HW_ERROR_FATAL: begin - PSEL = 1; - PWRITE = 0; - PAUSER = '1; - end - S_APB_WR_HW_ERROR_FATAL: begin - PSEL = 1; - PWRITE = 1; - PAUSER = '1; - end - S_APB_RD_HW_ERROR_NON_FATAL: begin - PSEL = 1; - PWRITE = 0; - PAUSER = '1; - end - S_APB_WR_HW_ERROR_NON_FATAL: begin - PSEL = 1; - PWRITE = 1; - PAUSER = '1; - end - S_APB_DONE: begin - PSEL = 0; - PWRITE = 0; - PAUSER = 0; - end - S_APB_RD_DLEN: begin - PSEL = 1; - PWRITE = 0; - PAUSER = '1; //TODO - which value? - end - S_APB_RD_DATAOUT: begin - PSEL = 1; - PWRITE = 0; - PAUSER = '1; - end - S_APB_RST_EXEC: begin - PSEL = 1; - PWRITE = 1; - PAUSER = '1; - end - default: begin - PSEL = 0; - PWRITE = 0; - PAUSER = 0; - end - endcase - end +// always@(posedge core_clk or negedge cptra_rst_b) begin +// if (!cptra_rst_b) begin +// status_set <= '0; +// end else begin +// status_set <= ~mailbox_data_avail ? '0 : +// (c_state_apb == S_APB_WR_STATUS) ? '1 : status_set; +// end +// end + +//// assign apb_xfer_end = PSEL && PENABLE && PREADY; +// always@(posedge core_clk) begin +// if ((n_state_apb == S_APB_WR_DATAIN) && apb_xfer_end) +// fw_blob[apb_wr_count_nxt] <= $urandom; +// end +// always_comb begin +// case (c_state_apb) inside +// S_APB_WR_UDS: begin +// PADDR = `CLP_SOC_IFC_REG_FUSE_UDS_SEED_0 + 4 * apb_wr_count; +// PWDATA = cptra_uds_tb[apb_wr_count]; +// end +// S_APB_WR_FE: begin +// PADDR = `CLP_SOC_IFC_REG_FUSE_FIELD_ENTROPY_0 + 4 * apb_wr_count; +// PWDATA = cptra_fe_tb[apb_wr_count]; +// end +// S_APB_WR_SOC_STEPPING_ID: begin +// PADDR = `CLP_SOC_IFC_REG_FUSE_SOC_STEPPING_ID; +// PWDATA = $urandom(); +// end +// S_APB_WR_FUSE_DONE: begin +// PADDR = `CLP_SOC_IFC_REG_CPTRA_FUSE_WR_DONE; +// PWDATA = 32'h00000001; +// end +// S_APB_POLL_FLOW_ST: begin +// PADDR = `CLP_SOC_IFC_REG_CPTRA_FLOW_STATUS; +// PWDATA = '0; +// end +// S_APB_WR_BOOT_GO: begin +// PADDR = `CLP_SOC_IFC_REG_CPTRA_BOOTFSM_GO; +// PWDATA = 32'h00000001; +// end +// S_APB_POLL_LOCK: begin +// PADDR = `CLP_MBOX_CSR_MBOX_LOCK; +// PWDATA = '0; +// end +// S_APB_WR_CMD: begin +// PADDR = `CLP_MBOX_CSR_MBOX_CMD; +// PWDATA = 32'hBA5EBA11; +// end +// S_APB_WR_DLEN: begin +// PADDR = `CLP_MBOX_CSR_MBOX_DLEN; +// PWDATA = FW_NUM_DWORDS*4; +// end +// S_APB_WR_DATAIN: begin +// PADDR = `CLP_MBOX_CSR_MBOX_DATAIN; +// PWDATA = fw_blob[apb_wr_count]; +// end +// S_APB_WR_EXEC: begin +// PADDR = `CLP_MBOX_CSR_MBOX_EXECUTE; +// PWDATA = 32'h00000001; +// end +// S_APB_WR_STATUS: begin +// PADDR = `CLP_MBOX_CSR_MBOX_STATUS; +// PWDATA = 32'h00000001; +// end +// S_APB_RD_HW_ERROR_FATAL: begin +// PADDR = `CLP_SOC_IFC_REG_CPTRA_HW_ERROR_FATAL; +// PWDATA = soc_ifc_hw_error_wdata; +// end +// S_APB_WR_HW_ERROR_FATAL: begin +// PADDR = `CLP_SOC_IFC_REG_CPTRA_HW_ERROR_FATAL; +// PWDATA = soc_ifc_hw_error_wdata; +// end +// S_APB_RD_HW_ERROR_NON_FATAL: begin +// PADDR = `CLP_SOC_IFC_REG_CPTRA_HW_ERROR_NON_FATAL; +// PWDATA = soc_ifc_hw_error_wdata; +// end +// S_APB_WR_HW_ERROR_NON_FATAL: begin +// PADDR = `CLP_SOC_IFC_REG_CPTRA_HW_ERROR_NON_FATAL; +// PWDATA = soc_ifc_hw_error_wdata; +// end +// S_APB_DONE: begin +// PADDR = '0; +// PWDATA = '0; +// end +// S_APB_RD_DLEN: begin +// PADDR = `CLP_MBOX_CSR_MBOX_DLEN; +// PWDATA = dlen; +// end +// S_APB_RD_DATAOUT: begin +// PADDR = `CLP_MBOX_CSR_MBOX_DATAOUT; +// PWDATA = '0; +// end +// S_APB_RST_EXEC: begin +// PADDR = `CLP_MBOX_CSR_MBOX_EXECUTE; +// PWDATA = '0; +// end +// default: begin +// PADDR = '0; +// PWDATA = '0; +// end +// endcase +// end +// always_comb begin +// PENABLE = apb_enable_ph; +// case (c_state_apb) inside +// S_APB_IDLE: begin +// PSEL = 0; +// PWRITE = 0; +// PAUSER = 0; +// end +// S_APB_WR_UDS: begin +// PSEL = 1; +// PWRITE = 1; +// PAUSER = 0; +// end +// S_APB_WR_FE: begin +// PSEL = 1; +// PWRITE = 1; +// PAUSER = 0; +// end +// S_APB_WR_SOC_STEPPING_ID: begin +// PSEL = 1; +// PWRITE = 1; +// PAUSER = 0; +// end +// S_APB_WR_FUSE_DONE: begin +// PSEL = 1; +// PWRITE = 1; +// PAUSER = 0; +// end +// S_APB_POLL_FLOW_ST: begin +// PSEL = 1; +// PWRITE = 0; +// PAUSER = 0; +// end +// S_APB_WR_BOOT_GO: begin +// PSEL = 1; +// PWRITE = 1; +// PAUSER = 0; +// end +// S_APB_POLL_LOCK: begin +// PSEL = 1; +// PWRITE = 0; +// PAUSER = '1; +// end +// S_APB_WR_CMD: begin +// PSEL = 1; +// PWRITE = 1; +// PAUSER = '1; +// end +// S_APB_WR_DLEN: begin +// PSEL = 1; +// PWRITE = 1; +// PAUSER = '1; +// end +// S_APB_WR_DATAIN: begin +// PSEL = 1; +// PWRITE = 1; +// PAUSER = '1; +// end +// S_APB_WR_EXEC: begin +// PSEL = 1; +// PWRITE = 1; +// PAUSER = '1; +// end +// S_APB_WR_STATUS: begin +// PSEL = 1; +// PWRITE = 1; +// PAUSER = '1; +// end +// S_APB_RD_HW_ERROR_FATAL: begin +// PSEL = 1; +// PWRITE = 0; +// PAUSER = '1; +// end +// S_APB_WR_HW_ERROR_FATAL: begin +// PSEL = 1; +// PWRITE = 1; +// PAUSER = '1; +// end +// S_APB_RD_HW_ERROR_NON_FATAL: begin +// PSEL = 1; +// PWRITE = 0; +// PAUSER = '1; +// end +// S_APB_WR_HW_ERROR_NON_FATAL: begin +// PSEL = 1; +// PWRITE = 1; +// PAUSER = '1; +// end +// S_APB_DONE: begin +// PSEL = 0; +// PWRITE = 0; +// PAUSER = 0; +// end +// S_APB_RD_DLEN: begin +// PSEL = 1; +// PWRITE = 0; +// PAUSER = '1; //TODO - which value? +// end +// S_APB_RD_DATAOUT: begin +// PSEL = 1; +// PWRITE = 0; +// PAUSER = '1; +// end +// S_APB_RST_EXEC: begin +// PSEL = 1; +// PWRITE = 1; +// PAUSER = '1; +// end +// default: begin +// PSEL = 0; +// PWRITE = 0; +// PAUSER = 0; +// end +// endcase +// end // JTAG DPI jtagdpi #( @@ -1085,16 +1212,9 @@ caliptra_top caliptra_top_dut ( .jtag_tdo(jtag_tdo), .jtag_tdoEn(jtag_tdoEn), - .PADDR(PADDR), - .PPROT(PPROT), - .PAUSER(PAUSER), - .PENABLE(PENABLE), - .PRDATA(PRDATA), - .PREADY(PREADY), - .PSEL(PSEL), - .PSLVERR(), - .PWDATA(PWDATA), - .PWRITE(PWRITE), + //SoC AXI Interface + .s_axi_w_if(s_axi_if.w_sub), + .s_axi_r_if(s_axi_if.r_sub), .qspi_clk_o (qspi_clk), .qspi_cs_no (qspi_cs_n), @@ -1305,10 +1425,10 @@ initial begin if (ras_test_ctrl.iccm_read_burst.start) force_ahb_dma_loop_read(ras_test_ctrl.iccm_read_burst.addr, ras_test_ctrl.iccm_read_burst.count); end - forever @(posedge core_clk) begin - if (c_state_apb != S_APB_WAIT_ERROR_AXS) - rv_dma_resp_error = 1'b0; - end +// forever @(posedge core_clk) begin +// if (c_state_apb != S_APB_WAIT_ERROR_AXS) +// rv_dma_resp_error = 1'b0; +// end join end diff --git a/src/integration/uvmf_caliptra_top/config/uvmf_caliptra_top.vf b/src/integration/uvmf_caliptra_top/config/uvmf_caliptra_top.vf index 219eb6217..6607070d5 100644 --- a/src/integration/uvmf_caliptra_top/config/uvmf_caliptra_top.vf +++ b/src/integration/uvmf_caliptra_top/config/uvmf_caliptra_top.vf @@ -40,6 +40,7 @@ +incdir+${CALIPTRA_ROOT}/src/integration/uvmf_caliptra_top/uvmf_template_output/verification_ip/environment_packages/caliptra_top_env_pkg +incdir+${CALIPTRA_ROOT}/src/doe/rtl +incdir+${CALIPTRA_ROOT}/src/integration/asserts ++incdir+${CALIPTRA_ROOT}/src/axi/rtl +incdir+${CALIPTRA_ROOT}/src/datavault/rtl +incdir+${CALIPTRA_ROOT}/src/entropy_src/rtl +incdir+${CALIPTRA_ROOT}/src/caliptra_prim/rtl @@ -169,6 +170,8 @@ ${CALIPTRA_ROOT}/src/soc_ifc/uvmf_soc_ifc/uvmf_template_output/verification_ip/e ${CALIPTRA_ROOT}/src/integration/uvmf_caliptra_top/uvmf_template_output/verification_ip/environment_packages/caliptra_top_env_pkg/caliptra_top_env_pkg.sv ${CALIPTRA_ROOT}/src/doe/rtl/doe_defines_pkg.sv ${CALIPTRA_ROOT}/src/integration/asserts/caliptra_top_sva.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_if.sv ${CALIPTRA_ROOT}/src/datavault/rtl/dv_defines_pkg.sv ${CALIPTRA_ROOT}/src/entropy_src/rtl/entropy_src_main_sm_pkg.sv ${CALIPTRA_ROOT}/src/entropy_src/rtl/entropy_src_ack_sm_pkg.sv @@ -248,6 +251,12 @@ ${CALIPTRA_ROOT}/src/soc_ifc/rtl/mbox_csr.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/sha512_acc_top.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/sha512_acc_csr.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/wdt.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_addr.v +${CALIPTRA_ROOT}/src/axi/rtl/skidbuffer.v +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_rd.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_wr.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_arb.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/el2_mem.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/el2_dma_ctrl.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/el2_pic_ctrl.sv @@ -316,15 +325,15 @@ ${CALIPTRA_ROOT}/src/doe/rtl/doe_reg.sv ${CALIPTRA_ROOT}/src/doe/rtl/doe_fsm.sv ${CALIPTRA_ROOT}/src/sha512_masked/rtl/sha512_masked_defines_pkg.sv ${CALIPTRA_ROOT}/src/sha512_masked/rtl/sha512_masked_core.sv -${CALIPTRA_ROOT}/src/sha512_masked/rtl/sha512_masked_lfsr.sv +${CALIPTRA_ROOT}/src/sha512_masked/rtl/sha512_masked_w_mem.sv ${CALIPTRA_ROOT}/src/hmac/rtl/hmac_param_pkg.sv ${CALIPTRA_ROOT}/src/hmac/rtl/hmac_reg_pkg.sv ${CALIPTRA_ROOT}/src/hmac/rtl/hmac_ctrl.sv ${CALIPTRA_ROOT}/src/hmac/rtl/hmac.sv ${CALIPTRA_ROOT}/src/hmac/rtl/hmac_core.v ${CALIPTRA_ROOT}/src/hmac/rtl/hmac_reg.sv +${CALIPTRA_ROOT}/src/hmac/rtl/hmac_lfsr.sv ${CALIPTRA_ROOT}/src/hmac_drbg/rtl/hmac_drbg.sv -${CALIPTRA_ROOT}/src/hmac_drbg/rtl/hmac_drbg_lfsr.sv ${CALIPTRA_ROOT}/src/ecc/rtl/ecc_reg_pkg.sv ${CALIPTRA_ROOT}/src/ecc/rtl/ecc_defines_pkg.sv ${CALIPTRA_ROOT}/src/ecc/rtl/ecc_params_pkg.sv diff --git a/src/integration/uvmf_caliptra_top/config/uvmf_caliptra_top_itrng.vf b/src/integration/uvmf_caliptra_top/config/uvmf_caliptra_top_itrng.vf index 219eb6217..2993d8389 100644 --- a/src/integration/uvmf_caliptra_top/config/uvmf_caliptra_top_itrng.vf +++ b/src/integration/uvmf_caliptra_top/config/uvmf_caliptra_top_itrng.vf @@ -61,6 +61,7 @@ +incdir+${CALIPTRA_ROOT}/src/integration/uvmf_caliptra_top/uvmf_template_output/project_benches/caliptra_top/tb/testbench +incdir+${CALIPTRA_ROOT}/src/integration/uvmf_caliptra_top/../tb +incdir+${CALIPTRA_ROOT}/src/sha512/rtl ++incdir+${CALIPTRA_ROOT}/src/axi/rtl +incdir+${CALIPTRA_ROOT}/src/ahb_lite_bus/rtl +incdir+${CALIPTRA_ROOT}/src/sha256/rtl +incdir+${CALIPTRA_ROOT}/src/sha512_masked/rtl @@ -248,6 +249,14 @@ ${CALIPTRA_ROOT}/src/soc_ifc/rtl/mbox_csr.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/sha512_acc_top.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/sha512_acc_csr.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/wdt.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_if.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_addr.v +${CALIPTRA_ROOT}/src/axi/rtl/skidbuffer.v +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_rd.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_wr.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_arb.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/el2_mem.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/el2_dma_ctrl.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/el2_pic_ctrl.sv @@ -316,15 +325,15 @@ ${CALIPTRA_ROOT}/src/doe/rtl/doe_reg.sv ${CALIPTRA_ROOT}/src/doe/rtl/doe_fsm.sv ${CALIPTRA_ROOT}/src/sha512_masked/rtl/sha512_masked_defines_pkg.sv ${CALIPTRA_ROOT}/src/sha512_masked/rtl/sha512_masked_core.sv -${CALIPTRA_ROOT}/src/sha512_masked/rtl/sha512_masked_lfsr.sv +${CALIPTRA_ROOT}/src/sha512_masked/rtl/sha512_masked_w_mem.sv ${CALIPTRA_ROOT}/src/hmac/rtl/hmac_param_pkg.sv ${CALIPTRA_ROOT}/src/hmac/rtl/hmac_reg_pkg.sv ${CALIPTRA_ROOT}/src/hmac/rtl/hmac_ctrl.sv ${CALIPTRA_ROOT}/src/hmac/rtl/hmac.sv ${CALIPTRA_ROOT}/src/hmac/rtl/hmac_core.v ${CALIPTRA_ROOT}/src/hmac/rtl/hmac_reg.sv +${CALIPTRA_ROOT}/src/hmac/rtl/hmac_lfsr.sv ${CALIPTRA_ROOT}/src/hmac_drbg/rtl/hmac_drbg.sv -${CALIPTRA_ROOT}/src/hmac_drbg/rtl/hmac_drbg_lfsr.sv ${CALIPTRA_ROOT}/src/ecc/rtl/ecc_reg_pkg.sv ${CALIPTRA_ROOT}/src/ecc/rtl/ecc_defines_pkg.sv ${CALIPTRA_ROOT}/src/ecc/rtl/ecc_params_pkg.sv diff --git a/src/soc_ifc/rtl/mbox.sv b/src/soc_ifc/rtl/mbox.sv index 11b6c125e..6ad3299b7 100644 --- a/src/soc_ifc/rtl/mbox.sv +++ b/src/soc_ifc/rtl/mbox.sv @@ -576,7 +576,7 @@ mbox_csr1( .s_cpuif_req_is_wr(req_data.write), .s_cpuif_addr(req_data.addr[MBOX_CSR_ADDR_WIDTH-1:0]), .s_cpuif_wr_data(req_data.wdata), - .s_cpuif_wr_biten('1), + .s_cpuif_wr_biten('1), // FIXME .s_cpuif_req_stall_wr(s_cpuif_req_stall_wr_nc), .s_cpuif_req_stall_rd(s_cpuif_req_stall_rd_nc), .s_cpuif_rd_ack(s_cpuif_rd_ack_nc), diff --git a/src/soc_ifc/rtl/sha512_acc_top.sv b/src/soc_ifc/rtl/sha512_acc_top.sv index c22816b90..6e073c88c 100644 --- a/src/soc_ifc/rtl/sha512_acc_top.sv +++ b/src/soc_ifc/rtl/sha512_acc_top.sv @@ -400,7 +400,7 @@ sha512_acc_csr i_sha512_acc_csr ( .s_cpuif_req_is_wr (req_data.write), .s_cpuif_addr (req_data.addr[SHA512_ACC_CSR_ADDR_WIDTH-1:0]), .s_cpuif_wr_data (req_data.wdata), - .s_cpuif_wr_biten ('1), + .s_cpuif_wr_biten ('1),// FIXME .s_cpuif_req_stall_wr( ), .s_cpuif_req_stall_rd( ), .s_cpuif_rd_ack ( ), diff --git a/src/soc_ifc/rtl/soc_ifc_pkg.sv b/src/soc_ifc/rtl/soc_ifc_pkg.sv index 1d8a16312..a95f6c503 100644 --- a/src/soc_ifc/rtl/soc_ifc_pkg.sv +++ b/src/soc_ifc/rtl/soc_ifc_pkg.sv @@ -119,12 +119,13 @@ package soc_ifc_pkg; //Any request into soc ifc block typedef struct packed { - logic [SOC_IFC_ADDR_W-1:0] addr; - logic [SOC_IFC_DATA_W-1:0] wdata; + logic [SOC_IFC_ADDR_W-1:0] addr; + logic [SOC_IFC_DATA_W-1:0] wdata; + logic [SOC_IFC_DATA_W/8-1:0] wstrb; // logic [SOC_IFC_USER_W-1:0] user; - logic [SOC_IFC_ID_W -1:0] id; - logic write; - logic soc_req; + logic [SOC_IFC_ID_W -1:0] id; + logic write; + logic soc_req; } soc_ifc_req_t; // ECC protected data typedef struct packed { diff --git a/src/soc_ifc/rtl/soc_ifc_top.sv b/src/soc_ifc/rtl/soc_ifc_top.sv index 288fc346c..bcdd28dd6 100644 --- a/src/soc_ifc/rtl/soc_ifc_top.sv +++ b/src/soc_ifc/rtl/soc_ifc_top.sv @@ -342,6 +342,7 @@ i_ahb_slv_sif_soc_ifc ( //always_comb uc_req.user = '1; always_comb uc_req.id = '1; always_comb uc_req.soc_req = 1'b0; +always_comb uc_req.wstrb = {AHB_DATA_WIDTH/8{1'b1}}; //mailbox_arb //This module contains the arbitration logic between SoC and Caliptra uC requests @@ -697,7 +698,7 @@ soc_ifc_reg i_soc_ifc_reg ( .s_cpuif_req_is_wr(soc_ifc_reg_req_data.write), .s_cpuif_addr(soc_ifc_reg_req_data.addr[SOC_IFC_REG_ADDR_WIDTH-1:0]), .s_cpuif_wr_data(soc_ifc_reg_req_data.wdata), - .s_cpuif_wr_biten('1), + .s_cpuif_wr_biten('1), // FIXME .s_cpuif_req_stall_wr(s_cpuif_req_stall_wr_nc), .s_cpuif_req_stall_rd(s_cpuif_req_stall_rd_nc), .s_cpuif_rd_ack(s_cpuif_rd_ack_nc), @@ -995,10 +996,10 @@ always_ff @(posedge rdc_clk_cg or negedge cptra_pwrgood) begin end end -`CALIPTRA_ASSERT (AXI_SUB_DATA_WIDTH, SOC_IFC_ADDR_W == AXI_ADDR_WIDTH, clk, !cptra_noncore_rst_b) +`CALIPTRA_ASSERT (AXI_SUB_ADDR_WIDTH, SOC_IFC_ADDR_W == AXI_ADDR_WIDTH, clk, !cptra_noncore_rst_b) `CALIPTRA_ASSERT (AXI_SUB_DATA_WIDTH, SOC_IFC_DATA_W == AXI_DATA_WIDTH, clk, !cptra_noncore_rst_b) -`CALIPTRA_ASSERT (AXI_SUB_DATA_WIDTH, SOC_IFC_USER_W == AXI_USER_WIDTH, clk, !cptra_noncore_rst_b) -`CALIPTRA_ASSERT (AXI_SUB_DATA_WIDTH, SOC_IFC_ID_W == AXI_ID_WIDTH, clk, !cptra_noncore_rst_b) +`CALIPTRA_ASSERT (AXI_SUB_USER_WIDTH, SOC_IFC_USER_W == AXI_USER_WIDTH, clk, !cptra_noncore_rst_b) +`CALIPTRA_ASSERT (AXI_SUB_ID_WIDTH , SOC_IFC_ID_W == AXI_ID_WIDTH, clk, !cptra_noncore_rst_b) `CALIPTRA_ASSERT_KNOWN(ERR_AHB_INF_X, {hreadyout_o,hresp_o}, clk, !cptra_noncore_rst_b) //this generates an NMI in the core, but we don't have a handler so it just hangs diff --git a/src/spi_host/config/spi_host.vf b/src/spi_host/config/spi_host.vf index 1b0661420..bc5f5157f 100644 --- a/src/spi_host/config/spi_host.vf +++ b/src/spi_host/config/spi_host.vf @@ -71,4 +71,4 @@ ${CALIPTRA_ROOT}/src/spi_host/rtl/spi_host_core.sv ${CALIPTRA_ROOT}/src/spi_host/rtl/spi_host_data_fifos.sv ${CALIPTRA_ROOT}/src/spi_host/rtl/spi_host_fsm.sv ${CALIPTRA_ROOT}/src/spi_host/rtl/spi_host_reg_top.sv -${CALIPTRA_ROOT}/src/spi_host/rtl/spi_host_shift_register.sv +${CALIPTRA_ROOT}/src/spi_host/rtl/spi_host_shift_register.sv \ No newline at end of file diff --git a/src/uart/config/uart.vf b/src/uart/config/uart.vf index 5fb62f4db..c4cf5f0e3 100644 --- a/src/uart/config/uart.vf +++ b/src/uart/config/uart.vf @@ -66,4 +66,4 @@ ${CALIPTRA_ROOT}/src/uart/rtl/uart_tx.sv ${CALIPTRA_ROOT}/src/uart/rtl/uart_reg_top.sv ${CALIPTRA_ROOT}/src/uart/rtl/uart_rx.sv ${CALIPTRA_ROOT}/src/uart/rtl/uart.sv -${CALIPTRA_ROOT}/src/uart/rtl/uart_core.sv +${CALIPTRA_ROOT}/src/uart/rtl/uart_core.sv \ No newline at end of file diff --git a/src/uart/config/uart_tb.vf b/src/uart/config/uart_tb.vf index 4332da0e6..f23f71300 100644 --- a/src/uart/config/uart_tb.vf +++ b/src/uart/config/uart_tb.vf @@ -68,4 +68,4 @@ ${CALIPTRA_ROOT}/src/uart/rtl/uart_tx.sv ${CALIPTRA_ROOT}/src/uart/rtl/uart_reg_top.sv ${CALIPTRA_ROOT}/src/uart/rtl/uart_rx.sv ${CALIPTRA_ROOT}/src/uart/rtl/uart.sv -${CALIPTRA_ROOT}/src/uart/rtl/uart_core.sv +${CALIPTRA_ROOT}/src/uart/rtl/uart_core.sv \ No newline at end of file diff --git a/tools/scripts/Makefile b/tools/scripts/Makefile index 3beb5328c..658fd6d87 100644 --- a/tools/scripts/Makefile +++ b/tools/scripts/Makefile @@ -242,8 +242,8 @@ clean_fw: ############ Model Builds ############################### -verilator-build: $(TBFILES) $(INCLUDES_DIR)/defines.h $(TB_VERILATOR_SRCS) - $(VERILATOR) $(TB_VERILATOR_SRCS) --cc -CFLAGS "$(CFLAGS)" \ +verilator-build: $(TBFILES) $(INCLUDES_DIR)/defines.h $(TB_VERILATOR_SRCS) $(TBDIR)/../config/caliptra_top_tb.vf + set -eo pipefail; $(VERILATOR) $(TB_VERILATOR_SRCS) --cc -CFLAGS "$(CFLAGS)" \ +libext+.v+.sv +define+RV_OPENSOURCE \ --timescale 1ns/1ps \ --timing \ @@ -252,8 +252,8 @@ verilator-build: $(TBFILES) $(INCLUDES_DIR)/defines.h $(TB_VERILATOR_SRCS) -f $(TBDIR)/../config/caliptra_top_tb.vf --top-module caliptra_top_tb \ -f $(TBDIR)/../config/caliptra_top_tb.vlt \ -exe test_caliptra_top_tb.cpp --autoflush $(VERILATOR_DEBUG) \ - $(TB_DEFS) - $(MAKE) -j`nproc` -e -C obj_dir/ -f Vcaliptra_top_tb.mk $(VERILATOR_MAKE_FLAGS) VM_PARALLEL_BUILDS=1 + $(TB_DEFS) 2>&1 | tee verilate.log + set -eo pipefail; $(MAKE) -j`nproc` -e -C obj_dir/ -f Vcaliptra_top_tb.mk $(VERILATOR_MAKE_FLAGS) VM_PARALLEL_BUILDS=1 2>&1 | tee verilator_make.log touch verilator-build vcs-build: $(TBFILES) $(INCLUDES_DIR)/defines.h $(TB_DPI_SRCS) @@ -266,7 +266,7 @@ vcs-build: $(TBFILES) $(INCLUDES_DIR)/defines.h $(TB_DPI_SRCS) ############ TEST Simulation ############################### verilator: program.hex verilator-build - ./obj_dir/Vcaliptra_top_tb $(VERILATOR_RUN_ARGS) + set -eo pipefail; ./obj_dir/Vcaliptra_top_tb $(VERILATOR_RUN_ARGS) 2>&1 | tee verilator_run.log vcs: program.hex vcs-build cp $(TEST_GEN_FILES) $(BUILD_DIR) From 453694150c4bc98508eee1c428a6cdae36d55a90 Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Tue, 18 Jun 2024 17:25:10 -0700 Subject: [PATCH 26/58] Fixups to get sims working VCS + Verilator --- src/axi/rtl/axi_if.sv | 212 ++++++++++++++++++++++++++------------ src/axi/rtl/axi_sub_rd.sv | 13 +-- 2 files changed, 153 insertions(+), 72 deletions(-) diff --git a/src/axi/rtl/axi_if.sv b/src/axi/rtl/axi_if.sv index ab727677d..daa6d45c6 100644 --- a/src/axi/rtl/axi_if.sv +++ b/src/axi/rtl/axi_if.sv @@ -156,45 +156,55 @@ interface axi_if #(parameter integer AW = 32, parameter integer DW = 32, paramet ); // Tasks + `ifdef VERILATOR + `define EQ__ = + `define TIME_ALGN #100ps + `else + `define EQ__ <= + `define TIME_ALGN + `endif task rst_mgr(); - araddr = '0; - arburst = AXI_BURST_FIXED; - arsize = '0; - arlen = '0; - aruser = '0; - arid = '0; - arlock = '0; - arvalid = '0; + araddr `EQ__ '0; + arburst `EQ__ AXI_BURST_FIXED; + arsize `EQ__ '0; + arlen `EQ__ '0; + aruser `EQ__ '0; + arid `EQ__ '0; + arlock `EQ__ '0; + arvalid `EQ__ '0; - rready = '0; + rready `EQ__ '0; - awaddr = '0; - awburst = AXI_BURST_FIXED; - awsize = '0; - awlen = '0; - awuser = '0; - awid = '0; - awlock = '0; - awvalid = '0; + awaddr `EQ__ '0; + awburst `EQ__ AXI_BURST_FIXED; + awsize `EQ__ '0; + awlen `EQ__ '0; + awuser `EQ__ '0; + awid `EQ__ '0; + awlock `EQ__ '0; + awvalid `EQ__ '0; - wdata = '0; - wstrb = '0; - wvalid = '0; - wlast = '0; + wdata `EQ__ '0; + wstrb `EQ__ '0; + wvalid `EQ__ '0; + wlast `EQ__ '0; - bready = '0; + bready `EQ__ '0; endtask // TODO: handle IDs? - task get_read_beat(ref logic [DW-1:0] data, - ref axi_resp_e resp); - rready = 1; + task get_read_beat(output logic [DW-1:0] data, + output axi_resp_e resp); + `TIME_ALGN + rready `EQ__ 1; do @(posedge clk); while (!rvalid); - data = rdata; - resp = axi_resp_e'(rresp); - rready = 0; + data `EQ__ rdata; + resp `EQ__ axi_resp_e'(rresp); + `TIME_ALGN + rready `EQ__ 0; + wait(!rready); endtask // Read: default to single beat of native data width @@ -205,22 +215,34 @@ interface axi_if #(parameter integer AW = 32, parameter integer DW = 32, paramet input logic [UW-1:0] user = UW'(0), input logic [IW-1:0] id = IW'(0), input logic lock = 1'b0, - ref logic [DW-1:0] data [], - ref axi_resp_e resp []); + output logic [DW-1:0] data [], + output axi_resp_e resp []); axi_resp_e beat_resp; logic [DW-1:0] beat_data; while(!rst_n) @(posedge clk); do begin - araddr = addr; - arburst = burst; - arsize = size; - arlen = len; - aruser = user; - arid = id; - arlock = lock; - arvalid = 1; + `TIME_ALGN + araddr `EQ__ addr; + arburst `EQ__ burst; + arsize `EQ__ size; + arlen `EQ__ len; + aruser `EQ__ user; + arid `EQ__ id; + arlock `EQ__ lock; + arvalid `EQ__ 1; @(posedge clk); end while(!arready); + `TIME_ALGN + araddr `EQ__ '0; + arburst `EQ__ AXI_BURST_FIXED; + arsize `EQ__ '0; + arlen `EQ__ '0; + aruser `EQ__ '0; + arid `EQ__ '0; + arlock `EQ__ '0; + arvalid `EQ__ '0; + data = new[len+1]; + resp = new[len+1]; for (int beat=0; beat <= len; beat++) begin get_read_beat(beat_data, beat_resp); data[beat] = beat_data; @@ -228,48 +250,89 @@ interface axi_if #(parameter integer AW = 32, parameter integer DW = 32, paramet end endtask + task axi_read_single(input logic [AW-1:0] addr, + input logic [UW-1:0] user = UW'(0), + input logic [IW-1:0] id = IW'(0), + input logic lock = 1'b0, + output logic [DW-1:0] data, + output axi_resp_e resp); + automatic axi_resp_e burst_resp[]; + automatic logic [DW-1:0] burst_data[]; + axi_read(.addr(addr), + .user(user), + .id (id ), + .lock(lock), + .data(burst_data), + .resp(burst_resp)); + data = burst_data[0]; + resp = burst_resp[0]; + endtask + task send_write_beat(input logic last, input logic [DW-1:0] data, input logic [DW/8-1:0] strb); - wvalid = 1; - wlast = last; - wdata = data; - wstrb = strb; + `TIME_ALGN + wvalid `EQ__ 1; + wlast `EQ__ last; + wdata `EQ__ data; + wstrb `EQ__ strb; do @(posedge clk); while (!wready); + `TIME_ALGN + wvalid `EQ__ '0; + wlast `EQ__ '0; + wdata `EQ__ '0; + wstrb `EQ__ '0; + wait(!wvalid); endtask // TODO handle ID task get_write_resp(output axi_resp_e resp); - bready = 1; - while(!bvalid) @(posedge clk); - resp = axi_resp_e'(bresp); + `TIME_ALGN + bready `EQ__ 1; + do + @(posedge clk); + while(!bvalid); + resp `EQ__ axi_resp_e'(bresp); + `TIME_ALGN + bready `EQ__ 0; + wait(!bready); endtask - task axi_write( input logic [AW-1:0] addr, - input axi_burst_e burst = AXI_BURST_INCR, - input logic [2:0] size = $clog2(DW/8), - input logic [7:0] len = 0, - input logic [UW-1:0] user = UW'(0), - input logic [IW-1:0] id = IW'(0), - input logic lock = 1'b0, - const ref logic [DW-1:0] data [], - input logic use_strb = 0, - const ref logic [DW/8-1:0] strb [], - output axi_resp_e resp); + task axi_write(input logic [AW-1:0] addr, + input axi_burst_e burst = AXI_BURST_INCR, + input logic [2:0] size = $clog2(DW/8), + input logic [7:0] len = 0, + input logic [UW-1:0] user = UW'(0), + input logic [IW-1:0] id = IW'(0), + input logic lock = 1'b0, + input logic [DW-1:0] data [], + input logic use_strb = 0, + input logic [DW/8-1:0] strb [], + output axi_resp_e resp); while(!rst_n) @(posedge clk); do begin - awaddr = addr; - awburst = burst; - awsize = size; - awlen = len; - awuser = user; - awid = id; - awlock = lock; - awvalid = 1; + `TIME_ALGN + awaddr `EQ__ addr; + awburst `EQ__ burst; + awsize `EQ__ size; + awlen `EQ__ len; + awuser `EQ__ user; + awid `EQ__ id; + awlock `EQ__ lock; + awvalid `EQ__ 1; @(posedge clk); end while(!awready); + `TIME_ALGN + awaddr `EQ__ '0; + awburst `EQ__ AXI_BURST_FIXED; + awsize `EQ__ '0; + awlen `EQ__ '0; + awuser `EQ__ '0; + awid `EQ__ '0; + awlock `EQ__ '0; + awvalid `EQ__ '0; fork for (int beat=0; beat <= len; beat++) send_write_beat(beat == len, data[beat], use_strb ? strb[beat] : {DW/8{1'b1}}); @@ -277,4 +340,25 @@ interface axi_if #(parameter integer AW = 32, parameter integer DW = 32, paramet join endtask + task axi_write_single(input logic [AW-1:0] addr, + input logic [UW-1:0] user = UW'(0), + input logic [IW-1:0] id = IW'(0), + input logic lock = 1'b0, + input logic [DW-1:0] data, + output axi_resp_e resp); + automatic logic [DW/8-1:0] burst_strb[] = new[1]('{{DW/8{1'b1}}}); + automatic logic [DW -1:0] burst_data[] = new[1]('{data}); + axi_write(.addr(addr), + .user(user), + .id (id ), + .lock(lock), + .data(burst_data), + .use_strb(0), + .strb(burst_strb), + .resp(resp)); + endtask + + `undef EQ__ + `undef TIME_ALGN + endinterface diff --git a/src/axi/rtl/axi_sub_rd.sv b/src/axi/rtl/axi_sub_rd.sv index 4c5c4096a..bc23c4533 100644 --- a/src/axi/rtl/axi_sub_rd.sv +++ b/src/axi/rtl/axi_sub_rd.sv @@ -139,11 +139,11 @@ module axi_sub_rd import axi_pkg::*; #( end end - // TODO reset? - always_ff@(posedge clk/* or negedge rst_n*/) begin -// if (!rst_n) begin -// txn_ctx <= '{default:0}; -// end + always_ff@(posedge clk or negedge rst_n) begin + if (!rst_n) begin + txn_ctx <= '{default:0, burst:AXI_BURST_FIXED}; + txn_cnt <= '0; + end if (s_axi_if.arvalid && s_axi_if.arready) begin txn_ctx.addr <= s_axi_if.araddr; txn_ctx.burst <= axi_burst_e'(s_axi_if.arburst); @@ -164,9 +164,6 @@ module axi_sub_rd import axi_pkg::*; #( txn_ctx.lock <= txn_ctx.lock; txn_cnt <= |txn_cnt ? txn_cnt - 1 : txn_cnt; // Prevent underflow to 255 at end to reduce switching power. Extra logic cost worth it? end - else begin - txn_ctx <= txn_ctx; - end end // Only make the request to component if we have space in the pipeline to From 77f2378cd3989aed42e435eba774f3c8bc974db6 Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Fri, 21 Jun 2024 16:19:24 -0700 Subject: [PATCH 27/58] Initial AXI DMA reg file --- src/axi/rtl/axi_dma_reg.rdl | 640 ++++++ src/axi/rtl/axi_dma_reg.sv | 3464 ++++++++++++++++++++++++++++++++ src/axi/rtl/axi_dma_reg_pkg.sv | 311 +++ src/axi/rtl/axi_dma_reg_uvm.sv | 2097 +++++++++++++++++++ 4 files changed, 6512 insertions(+) create mode 100644 src/axi/rtl/axi_dma_reg.rdl create mode 100644 src/axi/rtl/axi_dma_reg.sv create mode 100644 src/axi/rtl/axi_dma_reg_pkg.sv create mode 100644 src/axi/rtl/axi_dma_reg_uvm.sv diff --git a/src/axi/rtl/axi_dma_reg.rdl b/src/axi/rtl/axi_dma_reg.rdl new file mode 100644 index 000000000..f96ce88ef --- /dev/null +++ b/src/axi/rtl/axi_dma_reg.rdl @@ -0,0 +1,640 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +addrmap axi_dma_reg { + desc="Address map for SoC Interface DMA Hardware Assist block registers"; + + signal {activelow; async; cpuif_reset; field_reset; } cptra_rst_b; + signal {activelow; async; } cptra_pwrgood; + + //signal to indicate request is coming from soc side + signal {} soc_req; + + // Default register configuration + addressing = regalign; // This is the default if not specified + lsb0 = true; // lsb0 property is implicit/default. See docs for + // SystemRDL 2.0 sections 9.1 and 13.4 + littleendian = true; + + default regwidth = 32; // reg property + default accesswidth = 32; // reg property + + default hw = na; + + //////////////////////////////////////////////////////////////// + // DMA Internal Registers + reg { + name="Caliptra AXI DMA Register Block Identifier"; + desc="Gives a unique identifier that FW can query to verify block base address"; + field { desc="Identifier"; sw=r; } id[32] = 32'h67768068; // [ascii] "CLPD = Caliptra DMA" + } id; + + reg { + name="Caliptra AXI DMA Capabilities"; + desc="Provides information about configuration and enabled capabilities for the DMA block."; + field { desc="Reserved"; sw=r; } rsvd[32] = 32'h00000000; + } cap; + + reg { + name="Caliptra AXI DMA Control"; + desc="Used to drive command parameters and initiate operations to DMA block."; + field { desc="Initiate current configured operation."; sw=rw; swwel=soc_req; onwrite=woset; swmod; hw=r; hwclr=true; } go=1'b0; + field { desc="Flush active operations, reset state machines, clear FIFO data."; sw=rw; swwel=soc_req; onwrite=woset; hw=r; hwclr=true; } flush=1'b0; + field { desc="RESERVED."; sw=r; } rsvd0[14]=14'h0000; + field { desc="Read Route. Configures how the AXI read channel operates for the current operation."; + enum rd_route_e { + DISABLE = 2'b00 { + desc = "AXI Read channel is inactive."; + }; + MBOX = 2'b01 { + desc = "AXI Read channel data is sent to mailbox."; + }; + AHB_FIFO = 2'b10 { + desc = "AXI Read channel data is left in the internal FIFO, firmware is expected to read data via AHB interface."; + }; + // This can also be used to route data into the SHA accelerator via AXI intc. + AXI_WR = 2'b11 { + desc = "AXI Read channel data is sent to AXI Write channel to be sent onto SoC fabric."; + }; +// SHA_ACC = 3'b100 { +// desc = "AXI Read channel data is routed to the SOC_IFC SHA accelerator."; +// }; + }; + sw=rw; swwel=soc_req; hw=r; encode = rd_route_e; } rd_route[2]=0; + field { desc="RESERVED."; sw=r; } rsvd1[2]=2'h0; + field { desc="Read Route uses a FIXED burst type for AXI transaction."; sw=rw; swwel=soc_req; hw=r; } rd_fixed=1'b0; + field { desc="RESERVED."; sw=r; } rsvd2[3]=3'h0; + field { desc="Write Route. Configures how the AXI write channel operates for the current operation."; + enum wr_route_e { + DISABLE = 2'b00 { + desc = "AXI Write channel is inactive."; + }; + MBOX = 2'b01 { + desc = "AXI Write channel data is pulled from mailbox."; + }; + AHB_FIFO = 2'b10 { + desc = "AXI Write channel data is pulled from the internal FIFO, firmware is expected to write data via AHB interface."; + }; + AXI_RD = 2'b11 { + desc = "AXI Write channel data is received from AXI Read channel, then sent onto SoC fabric."; + }; + }; + sw=rw; swwel=soc_req; hw=r; encode = wr_route_e; } wr_route[2]=0; + field { desc="RESERVED."; sw=r; } rsvd3[2]=2'h0; + field { desc="Write Route uses a FIXED burst type for AXI transaction."; sw=rw; swwel=soc_req; hw=r; } wr_fixed=1'b0; + field { desc="RESERVED."; sw=r; } rsvd4[3]=3'h0; + } ctrl; + + // Status 0 + reg { + name="Caliptra AXI DMA Status 0"; + desc="Reports status and diagnostic information for DMA operations."; + field { desc="Indicates if an operation is in progress. When 1, new requests are ignored. When 0, new requests are accepted."; sw=r; hw=w; } busy=1'b0; + field { desc="Indicates if an operation has failed due to an error in decoding the command. + When set, this field will prevent any further operations until it is cleared by setting the ctrl.flush field."; + sw=r; hw=w; } error=1'b0; + field { desc="RESERVED."; sw=r; } rsvd0[14]=14'h0000; + field { + name = "Caliptra AXI DMA FSM Present State"; + desc = "Indicates the present state of the Caliptra AXI DMA FSM."; + + enum axi_dma_fsm_e { + DMA_IDLE = 3'b000 { + desc = "DMA is idle"; + }; + // FIXME + }; + sw=r; hw=rw; encode = axi_dma_fsm_e; + } axi_dma_fsm_ps[3] = 0; + field { desc="RESERVED."; sw=r; } rsvd1[13]=13'h0000; + } status0; + + // Status 1 + reg { + name="Caliptra AXI DMA Status 1"; + desc="Reports additional status and diagnostic information for DMA operations."; + field { desc="Reports remaining byte count that must be sent to destination."; sw=r; hw=w; } bytes_remaining[32]=32'h00000000; + } status1; + + // Source Address + reg { + name="Caliptra AXI DMA Source Address Low"; + desc="Contains lower 32-bits of address from which current operation will read data."; + field { desc="Addr_L"; sw=rw; swwel=soc_req; hw=r; } addr_l[32]=32'h00000000; + } src_addr_l; + reg { + name="Caliptra AXI DMA Source Address High"; + desc="Contains upper 32-bits of address from which current operation will read data."; + field { desc="Addr_H"; sw=rw; swwel=soc_req; hw=r; } addr_h[32]=32'h00000000; + } src_addr_h; + + // Destination Address + reg { + name="Caliptra AXI DMA Destination Address Low"; + desc="Contains lower 32-bits of address to which current operation will write data."; + field { desc="Addr_L"; sw=rw; swwel=soc_req; hw=r; } addr_l[32]=32'h00000000; + } dst_addr_l; + reg { + name="Caliptra AXI DMA Destination Address High"; + desc="Contains upper 32-bits of address to which current operation will write data."; + field { desc="Addr_H"; sw=rw; swwel=soc_req; hw=r; } addr_h[32]=32'h00000000; + } dst_addr_h; + + // Byte Count + reg { + name="Caliptra AXI DMA Byte Count"; + desc="Contains total number of bytes to be transferred by current operation. Zero-based value."; + field { desc="Byte Count"; sw=rw; swwel=soc_req; hw=r; } count[32]=32'h00000000; + } byte_count; + + // Block Size + reg { + name="Caliptra AXI DMA Block Size."; + desc="Byte size of individual blocks to send as part of the total + Byte Count. This register indicates what granularity of AXI + transactions are issued at a time. + When non-zero, this field instructs the DMA to wait for the + input “WIRE” to pulse high before issuing each transaction. + Total burst is done once “Byte_count/block_size” transactions + have completed. + When zero, DMA issues AXI transactions of maximum size + without any stalls in between transactions. + Must be a multiple of AXI data width. If block size is not + aligned to the AXI data width, it will be rounded down. + Value of 4096 or larger is unsupported – AXI native maximum size is 4096."; + field { desc="Block Size"; sw=rw; swwel=soc_req; hw=r; } size[12]=12'h000; + field { desc="RESERVED."; sw=r; } rsvd[20]=20'h00000; + } block_size; + + // Write Data + reg { + name="Caliptra AXI DMA Write Data."; + desc="Access point for Caliptra firmware to submit data into the Write + FIFO to be sent as AXI Write transfers."; + field {sw=w; swwel=soc_req; hw=na; swmod=true;} wdata[32]=0; + } write_data; + + // Read Data + reg { + name="Caliptra AXI DMA Read Data."; + desc="Access point for Caliptra firmware to read data from the Read + FIFO as it is received via AXI Read transfers."; + field {sw=r; hw=w; swacc=true;} rdata[32]=0; + } read_data; + + //////////////////////////////////////////////////////////////// + // Interrupts + /* ----------------------- + * Register File definitive definition + * ----------------------- */ + + // Notifications are non-error events that occur during normal operation of the module. + // E.g. a completion of a job may produce a notification. + // Error and notification events are separated into separate status/trigger registers + // to allow effective priority allocation by software + regfile intr_block_t { + + + /* ----------------------- + * Default properties for Register File + * ----------------------- */ + + name = "Interrupt Register Block"; + desc = "Set of registers to implement interrupt functionality + for soc interface DMA assist block. + All registers have the following access privileges: + [br]Caliptra Access: RW + [br]SOC Access: RO"; + + default regwidth = 32; // reg property + default accesswidth = 32; // reg property + default hw = na; // field property + default swwel = soc_req; + + + /* ----------------------- + * Register definitive definitions + * ----------------------- */ + + /* ---- Global Interrupt Enable ---- */ + reg global_intr_en_t { + name = "Per-Type Interrupt Enable Register"; + desc = "Dedicated register with one bit for each event type that may produce an interrupt."; + + default hw = na; + default sw = rw; + + // Global enablement (for interrupts of the event types defined for this module) + field {desc = "Global enable bit for all events of type 'Error'"; } error_en = 1'b0; + field {desc = "Global enable bit for all events of type 'Notification'";} notif_en = 1'b0; + }; + + /* ---- Error Interrupt Enable ---- */ + reg error_intr_en_t { + name = "Per-Event Interrupt Enable Register"; + desc = "Dedicated register with one bit for each event that may produce an interrupt."; + + default hw = na; + default sw = rw; + + // FIXME vvv + // Specific enables for the events defined in this + // event type in the instantiating peripheral. + field {desc = "Enable bit for Command Decode Error"; } error_cmd_dec_en = 1'b0; + field {desc = "Enable bit for AXI Read Error"; } error_axi_rd_en = 1'b0; + field {desc = "Enable bit for AXI Write Error"; } error_axi_wr_en = 1'b0; + field {desc = "Enable bit for Mailbox Not Locked Error"; } error_mbox_lock_en = 1'b0; + field {desc = "Enable bit for SHA Accel Not Locked Error"; } error_sha_lock_en = 1'b0; + field {desc = "Enable bit for Read FIFO Overflow"; } error_rd_fifo_oflow_en = 1'b0; + field {desc = "Enable bit for Read FIFO Underflow"; } error_rd_fifo_uflow_en = 1'b0; + field {desc = "Enable bit for Write FIFO Overflow"; } error_wr_fifo_oflow_en = 1'b0; + field {desc = "Enable bit for Write FIFO Underflow"; } error_wr_fifo_uflow_en = 1'b0; + }; + + /* ---- Notification Interrupt Enable ---- */ + reg notif_intr_en_t { + name = "Per-Event Interrupt Enable Register"; + desc = "Dedicated register with one bit for each event that may produce an interrupt."; + + default hw = na; + default sw = rw; + + // Specific enables for the events defined in this + // event type in the instantiating peripheral. + field {desc = "Enable bit for Transaction Done"; } notif_txn_done_en = 1'b0; + field {desc = "Enable bit for Read FIFO Not Empty"; } notif_rd_fifo_not_empty_en = 1'b0; + field {desc = "Enable bit for Read FIFO Full"; } notif_rd_fifo_full_en = 1'b0; + field {desc = "Enable bit for Write FIFO Not Full"; } notif_wr_fifo_not_full_en = 1'b0; + field {desc = "Enable bit for Write FIFO Empty"; } notif_wr_fifo_empty_en = 1'b0; + }; + + /* ---- Error Interrupt Status ---- */ + reg error_intr_t { + name = "Interrupt Status Register type definition"; + desc = "Single bit indicating occurrence of each interrupt event. + Sticky, level assertion, write-1-to-clear."; + + default precedence = hw; + default hw = w; + default hwset = true; + default sw = rw; + default woclr = true; + default level intr; + + field {desc = "Command Decode Error status bit"; } error_cmd_dec_sts = 1'b0; + field {desc = "AXI Read Error status bit"; } error_axi_rd_sts = 1'b0; + field {desc = "AXI Write Error status bit"; } error_axi_wr_sts = 1'b0; + field {desc = "Mailbox Not Locked Error status bit"; } error_mbox_lock_sts = 1'b0; + field {desc = "SHA Accel Not Locked Error status bit"; } error_sha_lock_sts = 1'b0; + field {desc = "Read FIFO Overflow status bit"; } error_rd_fifo_oflow_sts = 1'b0; + field {desc = "Read FIFO Underflow status bit"; } error_rd_fifo_uflow_sts = 1'b0; + field {desc = "Write FIFO Overflow status bit"; } error_wr_fifo_oflow_sts = 1'b0; + field {desc = "Write FIFO Underflow status bit"; } error_wr_fifo_uflow_sts = 1'b0; + }; + + /* ---- Notification Interrupt Status ---- */ + reg notif_intr_t { + name = "Interrupt Status Register type definition"; + desc = "Single bit indicating occurrence of each interrupt event. + Sticky, level assertion, write-1-to-clear."; + + default precedence = hw; + default hw = w; + default hwset = true; + default sw = rw; + default woclr = true; + default level intr; + + field {desc = "Transaction Done status bit"; } notif_txn_done_sts = 1'b0; + field {desc = "Read FIFO Not Empty status bit"; } notif_rd_fifo_not_empty_sts = 1'b0; + field {desc = "Read FIFO Full status bit"; } notif_rd_fifo_full_sts = 1'b0; + field {desc = "Write FIFO Not Full status bit"; } notif_wr_fifo_not_full_sts = 1'b0; + field {desc = "Write FIFO Empty status bit"; } notif_wr_fifo_empty_sts = 1'b0; + }; + + /* ---- Aggregated Interrupt Status ---- */ + reg global_intr_t { + name = "Interrupt Status Aggregation Register type definition"; + desc = "Single bit indicating occurrence of any interrupt event + of a given type. E.g. Notifications and Errors may drive + to two separate interrupt registers. There may be + multiple sources of Notifications or Errors that are + aggregated into a single interrupt pin for that + respective type. That pin feeds through this register + in order to apply a global enablement of that interrupt + event type. + Nonsticky assertion."; + + default hw = w; + default sw = r; + default nonsticky intr; + + field {desc = "Interrupt Event Aggregation status bit"; swwel = false;} agg_sts = 1'b0; + }; + + /* ---- Error Interrupt Trigger ---- */ + reg error_intr_trig_t { + name = "Interrupt Trigger Register type definition"; + desc = "Single bit for each interrupt event allows SW to manually + trigger occurrence of that event. Upon SW write, the trigger bit + will pulse for 1 cycle then clear to 0. The pulse on the + trigger register bit results in the corresponding interrupt + status bit being set to 1."; + + default hw = na; + default sw = rw; + default woset = true; + default singlepulse = true; + + // Instantiate triggers bit-by-bit. + field {desc = "Command Decode Error trigger bit"; } error_cmd_dec_trig = 1'b0; + field {desc = "AXI Read Error trigger bit"; } error_axi_rd_trig = 1'b0; + field {desc = "AXI Write Error trigger bit"; } error_axi_wr_trig = 1'b0; + field {desc = "Mailbox Not Locked Error trigger bit"; } error_mbox_lock_trig = 1'b0; + field {desc = "SHA Accel Not Locked Error trigger bit"; } error_sha_lock_trig = 1'b0; + field {desc = "Read FIFO Overflow trigger bit"; } error_rd_fifo_oflow_trig = 1'b0; + field {desc = "Read FIFO Underflow trigger bit"; } error_rd_fifo_uflow_trig = 1'b0; + field {desc = "Write FIFO Overflow trigger bit"; } error_wr_fifo_oflow_trig = 1'b0; + field {desc = "Write FIFO Underflow trigger bit"; } error_wr_fifo_uflow_trig = 1'b0; + }; + + /* ---- Notification Interrupt Trigger ---- */ + reg notif_intr_trig_t { + name = "Interrupt Trigger Register type definition"; + desc = "Single bit for each interrupt event allows SW to manually + trigger occurrence of that event. Upon SW write, the trigger bit + will pulse for 1 cycle then clear to 0. The pulse on the + trigger register bit results in the corresponding interrupt + status bit being set to 1."; + + default hw = na; + default sw = rw; + default woset = true; + default singlepulse = true; + + // Instantiate triggers bit-by-bit. + field {desc = "Transaction Done trigger bit"; } notif_txn_done_trig = 1'b0; + field {desc = "Read FIFO Not Empty trigger bit"; } notif_rd_fifo_not_empty_trig = 1'b0; + field {desc = "Read FIFO Full trigger bit"; } notif_rd_fifo_full_trig = 1'b0; + field {desc = "Write FIFO Not Full trigger bit"; } notif_wr_fifo_not_full_trig = 1'b0; + field {desc = "Write FIFO Empty trigger bit"; } notif_wr_fifo_empty_trig = 1'b0; + }; + + /* ---- Interrupt Statistics Counter Incrementor ---- */ + reg intr_count_incr_t { + name = "Interrupt Event Count Incrementor"; + desc = "Trigger the event counter to increment based on observing + the rising edge of an interrupt event input from the + Hardware. The same input signal that causes an interrupt + event to be set (sticky) also causes this signal to pulse + for 1 clock cycle, resulting in the event counter + incrementing by 1 for every interrupt event. + This is implemented as a down-counter (1-bit) that will + decrement immediately on being set - resulting in a pulse"; + + default hw = w; + default sw = r; // Has to have some access.... ideally SW wouldn't even see this + default hwset = true; + default decrvalue = 1; + default counter; + + field {desc = "Pulse mirrors interrupt event occurrence"; swwel = false;} pulse = 1'b0; + }; + + /* ---- Interrupt Statistics Counter ---- */ + reg intr_count_t { + name = "Interrupt Event Counter"; + desc = "Provides statistics about the number of events that have + occurred. + Will not overflow ('incrsaturate')."; + + default sw = rw; + default hw = na; + default incrvalue = 1; + default incrsaturate = true; + default counter; + + field {desc = "Count field";} cnt[32] = 32'h0; + }; + + + /* ------------------------------------------------- Registers ------------------------------------------------- */ + // First 9 registers are static and always defined // + global_intr_en_t global_intr_en_r; /* 1-bit per event type */ // + error_intr_en_t error_intr_en_r; /* 1-bit per error */ // + notif_intr_en_t notif_intr_en_r; /* 1-bit per notification */ // + global_intr_t error_global_intr_r; /* 1-bit aggregating all error interrupts with global enable */ // + global_intr_t notif_global_intr_r; /* 1-bit aggregating all notification interrupts with global enable */ // + error_intr_t error_internal_intr_r; /* Error pending, SW write 1 to clear */ // + notif_intr_t notif_internal_intr_r; /* Notification pending, SW write 1 to clear */ // + error_intr_trig_t error_intr_trig_r; /* SW sets error bit for interrupt testing */ // + notif_intr_trig_t notif_intr_trig_r; /* SW sets notification bit for interrupt testing */ // + // + // Align this set of registers; number of counters is based on peripheral event requirements // + intr_count_t error_cmd_dec_intr_count_r @0x100; /* Per error */ + intr_count_t error_axi_rd_intr_count_r; /* Per error */ + intr_count_t error_axi_wr_intr_count_r; /* Per error */ + intr_count_t error_mbox_lock_intr_count_r; /* Per error */ + intr_count_t error_sha_lock_intr_count_r; /* Per error */ + intr_count_t error_rd_fifo_oflow_intr_count_r; /* Per error */ + intr_count_t error_rd_fifo_uflow_intr_count_r; /* Per error */ + intr_count_t error_wr_fifo_oflow_intr_count_r; /* Per error */ + intr_count_t error_wr_fifo_uflow_intr_count_r; /* Per error */ + intr_count_t notif_txn_done_intr_count_r @0x180; /* Per notification */ // + intr_count_t notif_rd_fifo_not_empty_intr_count_r; /* Per notification */ // + intr_count_t notif_rd_fifo_full_intr_count_r; /* Per notification */ // + intr_count_t notif_wr_fifo_not_full_intr_count_r; /* Per notification */ // + intr_count_t notif_wr_fifo_empty_intr_count_r; /* Per notification */ // + // + // These registers should be treated by SW as reserved, and ignored. // + // Offset at 0x200 gives enough space for 32 Errors and 32 Notifications // + // to be implemented (requiring 2*32 32-bit registers starting at // + // offset 0x100), and still allowing the entire regfile to fit // + // inside a 1024-byte space. // + intr_count_incr_t error_cmd_dec_intr_count_incr_r @0x200; /* Per error count incrementor pulse */ // + intr_count_incr_t error_axi_rd_intr_count_incr_r; /* Per error count incrementor pulse */ // + intr_count_incr_t error_axi_wr_intr_count_incr_r; /* Per error count incrementor pulse */ // + intr_count_incr_t error_mbox_lock_intr_count_incr_r; /* Per error count incrementor pulse */ // + intr_count_incr_t error_sha_lock_intr_count_incr_r; /* Per error count incrementor pulse */ // + intr_count_incr_t error_rd_fifo_oflow_intr_count_incr_r; /* Per error count incrementor pulse */ // + intr_count_incr_t error_rd_fifo_uflow_intr_count_incr_r; /* Per error count incrementor pulse */ // + intr_count_incr_t error_wr_fifo_oflow_intr_count_incr_r; /* Per error count incrementor pulse */ // + intr_count_incr_t error_wr_fifo_uflow_intr_count_incr_r; /* Per error count incrementor pulse */ // + intr_count_incr_t notif_txn_done_intr_count_incr_r; /* Per notification count incrementor pulse */ // + intr_count_incr_t notif_rd_fifo_not_empty_intr_count_incr_r; /* Per notification count incrementor pulse */ // + intr_count_incr_t notif_rd_fifo_full_intr_count_incr_r; /* Per notification count incrementor pulse */ // + intr_count_incr_t notif_wr_fifo_not_full_intr_count_incr_r; /* Per notification count incrementor pulse */ // + intr_count_incr_t notif_wr_fifo_empty_intr_count_incr_r; /* Per notification count incrementor pulse */ // + /* ------------------------------------------------------------------------------------------------------------- */ + + /* ---- Reset assignment for Error Events ---- */ + error_internal_intr_r.error_cmd_dec_sts -> resetsignal = cptra_pwrgood; + error_internal_intr_r.error_axi_rd_sts -> resetsignal = cptra_pwrgood; + error_internal_intr_r.error_axi_wr_sts -> resetsignal = cptra_pwrgood; + error_internal_intr_r.error_mbox_lock_sts -> resetsignal = cptra_pwrgood; + error_internal_intr_r.error_sha_lock_sts -> resetsignal = cptra_pwrgood; + error_internal_intr_r.error_rd_fifo_oflow_sts -> resetsignal = cptra_pwrgood; + error_internal_intr_r.error_rd_fifo_uflow_sts -> resetsignal = cptra_pwrgood; + error_internal_intr_r.error_wr_fifo_oflow_sts -> resetsignal = cptra_pwrgood; + error_internal_intr_r.error_wr_fifo_uflow_sts -> resetsignal = cptra_pwrgood; + error_cmd_dec_intr_count_r.cnt -> resetsignal = cptra_pwrgood; + error_axi_rd_intr_count_r.cnt -> resetsignal = cptra_pwrgood; + error_axi_wr_intr_count_r.cnt -> resetsignal = cptra_pwrgood; + error_mbox_lock_intr_count_r.cnt -> resetsignal = cptra_pwrgood; + error_sha_lock_intr_count_r.cnt -> resetsignal = cptra_pwrgood; + error_rd_fifo_oflow_intr_count_r.cnt -> resetsignal = cptra_pwrgood; + error_rd_fifo_uflow_intr_count_r.cnt -> resetsignal = cptra_pwrgood; + error_wr_fifo_oflow_intr_count_r.cnt -> resetsignal = cptra_pwrgood; + error_wr_fifo_uflow_intr_count_r.cnt -> resetsignal = cptra_pwrgood; + // TODO: Use this same reset for the error incrementor pulse too? + + /* ---- Interrupt Event Dynamic Assignments ---- */ + error_internal_intr_r.error_cmd_dec_sts -> enable = error_intr_en_r.error_cmd_dec_en; + error_internal_intr_r.error_axi_rd_sts -> enable = error_intr_en_r.error_axi_rd_en; + error_internal_intr_r.error_axi_wr_sts -> enable = error_intr_en_r.error_axi_wr_en; + error_internal_intr_r.error_mbox_lock_sts -> enable = error_intr_en_r.error_mbox_lock_en; + error_internal_intr_r.error_sha_lock_sts -> enable = error_intr_en_r.error_sha_lock_en; + error_internal_intr_r.error_rd_fifo_oflow_sts -> enable = error_intr_en_r.error_rd_fifo_oflow_en; + error_internal_intr_r.error_rd_fifo_uflow_sts -> enable = error_intr_en_r.error_rd_fifo_uflow_en; + error_internal_intr_r.error_wr_fifo_oflow_sts -> enable = error_intr_en_r.error_wr_fifo_oflow_en; + error_internal_intr_r.error_wr_fifo_uflow_sts -> enable = error_intr_en_r.error_wr_fifo_uflow_en; + notif_internal_intr_r.notif_txn_done_sts -> enable = notif_intr_en_r.notif_txn_done_en; + notif_internal_intr_r.notif_rd_fifo_not_empty_sts -> enable = notif_intr_en_r.notif_rd_fifo_not_empty_en; + notif_internal_intr_r.notif_rd_fifo_full_sts -> enable = notif_intr_en_r.notif_rd_fifo_full_en; + notif_internal_intr_r.notif_wr_fifo_not_full_sts -> enable = notif_intr_en_r.notif_wr_fifo_not_full_en; + notif_internal_intr_r.notif_wr_fifo_empty_sts -> enable = notif_intr_en_r.notif_wr_fifo_empty_en; + + error_internal_intr_r.error_cmd_dec_sts -> next = error_intr_trig_r.error_cmd_dec_trig; + error_internal_intr_r.error_axi_rd_sts -> next = error_intr_trig_r.error_axi_rd_trig; + error_internal_intr_r.error_axi_wr_sts -> next = error_intr_trig_r.error_axi_wr_trig; + error_internal_intr_r.error_mbox_lock_sts -> next = error_intr_trig_r.error_mbox_lock_trig; + error_internal_intr_r.error_sha_lock_sts -> next = error_intr_trig_r.error_sha_lock_trig; + error_internal_intr_r.error_rd_fifo_oflow_sts -> next = error_intr_trig_r.error_rd_fifo_oflow_trig; + error_internal_intr_r.error_rd_fifo_uflow_sts -> next = error_intr_trig_r.error_rd_fifo_uflow_trig; + error_internal_intr_r.error_wr_fifo_oflow_sts -> next = error_intr_trig_r.error_wr_fifo_oflow_trig; + error_internal_intr_r.error_wr_fifo_uflow_sts -> next = error_intr_trig_r.error_wr_fifo_uflow_trig; + notif_internal_intr_r.notif_txn_done_sts -> next = notif_intr_trig_r.notif_txn_done_trig; + notif_internal_intr_r.notif_rd_fifo_not_empty_sts -> next = notif_intr_trig_r.notif_rd_fifo_not_empty_trig; + notif_internal_intr_r.notif_rd_fifo_full_sts -> next = notif_intr_trig_r.notif_rd_fifo_full_trig; + notif_internal_intr_r.notif_wr_fifo_not_full_sts -> next = notif_intr_trig_r.notif_wr_fifo_not_full_trig; + notif_internal_intr_r.notif_wr_fifo_empty_sts -> next = notif_intr_trig_r.notif_wr_fifo_empty_trig; + + // NOTE: hwset for events is implicitly defined as module input + + /* ---- Global Interrupt Dynamic Assignments ---- */ + error_global_intr_r.agg_sts -> enable = global_intr_en_r.error_en; + notif_global_intr_r.agg_sts -> enable = global_intr_en_r.notif_en; + + error_global_intr_r.agg_sts -> next = error_internal_intr_r -> intr; + notif_global_intr_r.agg_sts -> next = notif_internal_intr_r -> intr; + + /* ---- Event Statistics Tracker Assignments ---- */ + // NOTE: This method relies upon a "counter" that is set using the + // same events that trigger an interrupt, then immediately + // self-clearing, which results in a pulse. Must be configured + // to be sensitive to the interrupt trigger events for each event. + // The output pulse is then used to increment the ACTUAL counter + error_cmd_dec_intr_count_incr_r.pulse -> hwset = error_internal_intr_r.error_cmd_dec_sts -> hwset; // \_____ Capture both firmware and hardware triggered events + error_cmd_dec_intr_count_incr_r.pulse -> next = error_internal_intr_r.error_cmd_dec_sts -> next; // / as a pulse to increment the intr_count_r register + error_cmd_dec_intr_count_incr_r.pulse -> we = error_internal_intr_r.error_cmd_dec_sts -> next; // Generate a pulse from SW trigger, if set, or default to use the hwset input + error_cmd_dec_intr_count_incr_r.pulse -> decr = error_cmd_dec_intr_count_incr_r.pulse; // Auto-clear to generate pulse output + error_cmd_dec_intr_count_r.cnt -> incr = error_cmd_dec_intr_count_incr_r.pulse; // Increment coincides with rising edge of interrupt sts bit + + error_axi_rd_intr_count_incr_r.pulse -> hwset = error_internal_intr_r.error_axi_rd_sts -> hwset; // \_____ Capture both firmware and hardware triggered events + error_axi_rd_intr_count_incr_r.pulse -> next = error_internal_intr_r.error_axi_rd_sts -> next; // / as a pulse to increment the intr_count_r register + error_axi_rd_intr_count_incr_r.pulse -> we = error_internal_intr_r.error_axi_rd_sts -> next; // Generate a pulse from SW trigger, if set, or default to use the hwset input + error_axi_rd_intr_count_incr_r.pulse -> decr = error_axi_rd_intr_count_incr_r.pulse; // Auto-clear to generate pulse output + error_axi_rd_intr_count_r.cnt -> incr = error_axi_rd_intr_count_incr_r.pulse; // Increment coincides with rising edge of interrupt sts bit + + error_axi_wr_intr_count_incr_r.pulse -> hwset = error_internal_intr_r.error_axi_wr_sts -> hwset; // \_____ Capture both firmware and hardware triggered events + error_axi_wr_intr_count_incr_r.pulse -> next = error_internal_intr_r.error_axi_wr_sts -> next; // / as a pulse to increment the intr_count_r register + error_axi_wr_intr_count_incr_r.pulse -> we = error_internal_intr_r.error_axi_wr_sts -> next; // Generate a pulse from SW trigger, if set, or default to use the hwset input + error_axi_wr_intr_count_incr_r.pulse -> decr = error_axi_wr_intr_count_incr_r.pulse; // Auto-clear to generate pulse output + error_axi_wr_intr_count_r.cnt -> incr = error_axi_wr_intr_count_incr_r.pulse; // Increment coincides with rising edge of interrupt sts bit + + error_mbox_lock_intr_count_incr_r.pulse -> hwset = error_internal_intr_r.error_mbox_lock_sts -> hwset; // \_____ Capture both firmware and hardware triggered events + error_mbox_lock_intr_count_incr_r.pulse -> next = error_internal_intr_r.error_mbox_lock_sts -> next; // / as a pulse to increment the intr_count_r register + error_mbox_lock_intr_count_incr_r.pulse -> we = error_internal_intr_r.error_mbox_lock_sts -> next; // Generate a pulse from SW trigger, if set, or default to use the hwset input + error_mbox_lock_intr_count_incr_r.pulse -> decr = error_mbox_lock_intr_count_incr_r.pulse; // Auto-clear to generate pulse output + error_mbox_lock_intr_count_r.cnt -> incr = error_mbox_lock_intr_count_incr_r.pulse; // Increment coincides with rising edge of interrupt sts bit + + error_sha_lock_intr_count_incr_r.pulse -> hwset = error_internal_intr_r.error_sha_lock_sts -> hwset; // \_____ Capture both firmware and hardware triggered events + error_sha_lock_intr_count_incr_r.pulse -> next = error_internal_intr_r.error_sha_lock_sts -> next; // / as a pulse to increment the intr_count_r register + error_sha_lock_intr_count_incr_r.pulse -> we = error_internal_intr_r.error_sha_lock_sts -> next; // Generate a pulse from SW trigger, if set, or default to use the hwset input + error_sha_lock_intr_count_incr_r.pulse -> decr = error_sha_lock_intr_count_incr_r.pulse; // Auto-clear to generate pulse output + error_sha_lock_intr_count_r.cnt -> incr = error_sha_lock_intr_count_incr_r.pulse; // Increment coincides with rising edge of interrupt sts bit + + error_rd_fifo_oflow_intr_count_incr_r.pulse -> hwset = error_internal_intr_r.error_rd_fifo_oflow_sts -> hwset; // \_____ Capture both firmware and hardware triggered events + error_rd_fifo_oflow_intr_count_incr_r.pulse -> next = error_internal_intr_r.error_rd_fifo_oflow_sts -> next; // / as a pulse to increment the intr_count_r register + error_rd_fifo_oflow_intr_count_incr_r.pulse -> we = error_internal_intr_r.error_rd_fifo_oflow_sts -> next; // Generate a pulse from SW trigger, if set, or default to use the hwset input + error_rd_fifo_oflow_intr_count_incr_r.pulse -> decr = error_rd_fifo_oflow_intr_count_incr_r.pulse; // Auto-clear to generate pulse output + error_rd_fifo_oflow_intr_count_r.cnt -> incr = error_rd_fifo_oflow_intr_count_incr_r.pulse; // Increment coincides with rising edge of interrupt sts bit + + error_rd_fifo_uflow_intr_count_incr_r.pulse -> hwset = error_internal_intr_r.error_rd_fifo_uflow_sts -> hwset; // \_____ Capture both firmware and hardware triggered events + error_rd_fifo_uflow_intr_count_incr_r.pulse -> next = error_internal_intr_r.error_rd_fifo_uflow_sts -> next; // / as a pulse to increment the intr_count_r register + error_rd_fifo_uflow_intr_count_incr_r.pulse -> we = error_internal_intr_r.error_rd_fifo_uflow_sts -> next; // Generate a pulse from SW trigger, if set, or default to use the hwset input + error_rd_fifo_uflow_intr_count_incr_r.pulse -> decr = error_rd_fifo_uflow_intr_count_incr_r.pulse; // Auto-clear to generate pulse output + error_rd_fifo_uflow_intr_count_r.cnt -> incr = error_rd_fifo_uflow_intr_count_incr_r.pulse; // Increment coincides with rising edge of interrupt sts bit + + error_wr_fifo_oflow_intr_count_incr_r.pulse -> hwset = error_internal_intr_r.error_wr_fifo_oflow_sts -> hwset; // \_____ Capture both firmware and hardware triggered events + error_wr_fifo_oflow_intr_count_incr_r.pulse -> next = error_internal_intr_r.error_wr_fifo_oflow_sts -> next; // / as a pulse to increment the intr_count_r register + error_wr_fifo_oflow_intr_count_incr_r.pulse -> we = error_internal_intr_r.error_wr_fifo_oflow_sts -> next; // Generate a pulse from SW trigger, if set, or default to use the hwset input + error_wr_fifo_oflow_intr_count_incr_r.pulse -> decr = error_wr_fifo_oflow_intr_count_incr_r.pulse; // Auto-clear to generate pulse output + error_wr_fifo_oflow_intr_count_r.cnt -> incr = error_wr_fifo_oflow_intr_count_incr_r.pulse; // Increment coincides with rising edge of interrupt sts bit + + error_wr_fifo_uflow_intr_count_incr_r.pulse -> hwset = error_internal_intr_r.error_wr_fifo_uflow_sts -> hwset; // \_____ Capture both firmware and hardware triggered events + error_wr_fifo_uflow_intr_count_incr_r.pulse -> next = error_internal_intr_r.error_wr_fifo_uflow_sts -> next; // / as a pulse to increment the intr_count_r register + error_wr_fifo_uflow_intr_count_incr_r.pulse -> we = error_internal_intr_r.error_wr_fifo_uflow_sts -> next; // Generate a pulse from SW trigger, if set, or default to use the hwset input + error_wr_fifo_uflow_intr_count_incr_r.pulse -> decr = error_wr_fifo_uflow_intr_count_incr_r.pulse; // Auto-clear to generate pulse output + error_wr_fifo_uflow_intr_count_r.cnt -> incr = error_wr_fifo_uflow_intr_count_incr_r.pulse; // Increment coincides with rising edge of interrupt sts bit + + notif_txn_done_intr_count_incr_r.pulse -> hwset = notif_internal_intr_r.notif_txn_done_sts -> hwset; // \_____ Capture both firmware and hardware triggered events + notif_txn_done_intr_count_incr_r.pulse -> next = notif_internal_intr_r.notif_txn_done_sts -> next; // / as a pulse to increment the intr_count_r register + notif_txn_done_intr_count_incr_r.pulse -> we = notif_internal_intr_r.notif_txn_done_sts -> next; // Generate a pulse from SW trigger, if set, or default to use the hwset input + notif_txn_done_intr_count_incr_r.pulse -> decr = notif_txn_done_intr_count_incr_r.pulse; // Auto-clear to generate pulse output + notif_txn_done_intr_count_r.cnt -> incr = notif_txn_done_intr_count_incr_r.pulse; // Increment coincides with rising edge of interrupt sts bit + + notif_rd_fifo_not_empty_intr_count_incr_r.pulse -> hwset = notif_internal_intr_r.notif_rd_fifo_not_empty_sts -> hwset; // \_____ Capture both firmware and hardware triggered events + notif_rd_fifo_not_empty_intr_count_incr_r.pulse -> next = notif_internal_intr_r.notif_rd_fifo_not_empty_sts -> next; // / as a pulse to increment the intr_count_r register + notif_rd_fifo_not_empty_intr_count_incr_r.pulse -> we = notif_internal_intr_r.notif_rd_fifo_not_empty_sts -> next; // Generate a pulse from SW trigger, if set, or default to use the hwset input + notif_rd_fifo_not_empty_intr_count_incr_r.pulse -> decr = notif_rd_fifo_not_empty_intr_count_incr_r.pulse; // Auto-clear to generate pulse output + notif_rd_fifo_not_empty_intr_count_r.cnt -> incr = notif_rd_fifo_not_empty_intr_count_incr_r.pulse; // Increment coincides with rising edge of interrupt sts bit + + notif_rd_fifo_full_intr_count_incr_r.pulse -> hwset = notif_internal_intr_r.notif_rd_fifo_full_sts -> hwset; // \_____ Capture both firmware and hardware triggered events + notif_rd_fifo_full_intr_count_incr_r.pulse -> next = notif_internal_intr_r.notif_rd_fifo_full_sts -> next; // / as a pulse to increment the intr_count_r register + notif_rd_fifo_full_intr_count_incr_r.pulse -> we = notif_internal_intr_r.notif_rd_fifo_full_sts -> next; // Generate a pulse from SW trigger, if set, or default to use the hwset input + notif_rd_fifo_full_intr_count_incr_r.pulse -> decr = notif_rd_fifo_full_intr_count_incr_r.pulse; // Auto-clear to generate pulse output + notif_rd_fifo_full_intr_count_r.cnt -> incr = notif_rd_fifo_full_intr_count_incr_r.pulse; // Increment coincides with rising edge of interrupt sts bit + + notif_wr_fifo_not_full_intr_count_incr_r.pulse -> hwset = notif_internal_intr_r.notif_wr_fifo_not_full_sts -> hwset; // \_____ Capture both firmware and hardware triggered events + notif_wr_fifo_not_full_intr_count_incr_r.pulse -> next = notif_internal_intr_r.notif_wr_fifo_not_full_sts -> next; // / as a pulse to increment the intr_count_r register + notif_wr_fifo_not_full_intr_count_incr_r.pulse -> we = notif_internal_intr_r.notif_wr_fifo_not_full_sts -> next; // Generate a pulse from SW trigger, if set, or default to use the hwset input + notif_wr_fifo_not_full_intr_count_incr_r.pulse -> decr = notif_wr_fifo_not_full_intr_count_incr_r.pulse; // Auto-clear to generate pulse output + notif_wr_fifo_not_full_intr_count_r.cnt -> incr = notif_wr_fifo_not_full_intr_count_incr_r.pulse; // Increment coincides with rising edge of interrupt sts bit + + notif_wr_fifo_empty_intr_count_incr_r.pulse -> hwset = notif_internal_intr_r.notif_wr_fifo_empty_sts -> hwset; // \_____ Capture both firmware and hardware triggered events + notif_wr_fifo_empty_intr_count_incr_r.pulse -> next = notif_internal_intr_r.notif_wr_fifo_empty_sts -> next; // / as a pulse to increment the intr_count_r register + notif_wr_fifo_empty_intr_count_incr_r.pulse -> we = notif_internal_intr_r.notif_wr_fifo_empty_sts -> next; // Generate a pulse from SW trigger, if set, or default to use the hwset input + notif_wr_fifo_empty_intr_count_incr_r.pulse -> decr = notif_wr_fifo_empty_intr_count_incr_r.pulse; // Auto-clear to generate pulse output + notif_wr_fifo_empty_intr_count_r.cnt -> incr = notif_wr_fifo_empty_intr_count_incr_r.pulse; // Increment coincides with rising edge of interrupt sts bit + + + }; + + /* ----------------------- + * Register File instance + * ----------------------- */ + intr_block_t intr_block_rf @0x800; + +}; diff --git a/src/axi/rtl/axi_dma_reg.sv b/src/axi/rtl/axi_dma_reg.sv new file mode 100644 index 000000000..e35f09013 --- /dev/null +++ b/src/axi/rtl/axi_dma_reg.sv @@ -0,0 +1,3464 @@ +// Generated by PeakRDL-regblock - A free and open-source SystemVerilog generator +// https://github.com/SystemRDL/PeakRDL-regblock + +module axi_dma_reg ( + input wire clk, + input wire rst, + + input wire s_cpuif_req, + input wire s_cpuif_req_is_wr, + input wire [11:0] s_cpuif_addr, + input wire [31:0] s_cpuif_wr_data, + input wire [31:0] s_cpuif_wr_biten, + output wire s_cpuif_req_stall_wr, + output wire s_cpuif_req_stall_rd, + output wire s_cpuif_rd_ack, + output wire s_cpuif_rd_err, + output wire [31:0] s_cpuif_rd_data, + output wire s_cpuif_wr_ack, + output wire s_cpuif_wr_err, + + input axi_dma_reg_pkg::axi_dma_reg__in_t hwif_in, + output axi_dma_reg_pkg::axi_dma_reg__out_t hwif_out + ); + + //-------------------------------------------------------------------------- + // CPU Bus interface logic + //-------------------------------------------------------------------------- + logic cpuif_req; + logic cpuif_req_is_wr; + logic [11:0] cpuif_addr; + logic [31:0] cpuif_wr_data; + logic [31:0] cpuif_wr_biten; + logic cpuif_req_stall_wr; + logic cpuif_req_stall_rd; + + logic cpuif_rd_ack; + logic cpuif_rd_err; + logic [31:0] cpuif_rd_data; + + logic cpuif_wr_ack; + logic cpuif_wr_err; + + assign cpuif_req = s_cpuif_req; + assign cpuif_req_is_wr = s_cpuif_req_is_wr; + assign cpuif_addr = s_cpuif_addr; + assign cpuif_wr_data = s_cpuif_wr_data; + assign cpuif_wr_biten = s_cpuif_wr_biten; + assign s_cpuif_req_stall_wr = cpuif_req_stall_wr; + assign s_cpuif_req_stall_rd = cpuif_req_stall_rd; + assign s_cpuif_rd_ack = cpuif_rd_ack; + assign s_cpuif_rd_err = cpuif_rd_err; + assign s_cpuif_rd_data = cpuif_rd_data; + assign s_cpuif_wr_ack = cpuif_wr_ack; + assign s_cpuif_wr_err = cpuif_wr_err; + + logic cpuif_req_masked; + + // Read & write latencies are balanced. Stalls not required + assign cpuif_req_stall_rd = '0; + assign cpuif_req_stall_wr = '0; + assign cpuif_req_masked = cpuif_req + & !(!cpuif_req_is_wr & cpuif_req_stall_rd) + & !(cpuif_req_is_wr & cpuif_req_stall_wr); + + //-------------------------------------------------------------------------- + // Address Decode + //-------------------------------------------------------------------------- + typedef struct packed{ + logic id; + logic cap; + logic ctrl; + logic status0; + logic status1; + logic src_addr_l; + logic src_addr_h; + logic dst_addr_l; + logic dst_addr_h; + logic byte_count; + logic block_size; + logic write_data; + logic read_data; + struct packed{ + logic global_intr_en_r; + logic error_intr_en_r; + logic notif_intr_en_r; + logic error_global_intr_r; + logic notif_global_intr_r; + logic error_internal_intr_r; + logic notif_internal_intr_r; + logic error_intr_trig_r; + logic notif_intr_trig_r; + logic error_cmd_dec_intr_count_r; + logic error_axi_rd_intr_count_r; + logic error_axi_wr_intr_count_r; + logic error_mbox_lock_intr_count_r; + logic error_sha_lock_intr_count_r; + logic error_rd_fifo_oflow_intr_count_r; + logic error_rd_fifo_uflow_intr_count_r; + logic error_wr_fifo_oflow_intr_count_r; + logic error_wr_fifo_uflow_intr_count_r; + logic notif_txn_done_intr_count_r; + logic notif_rd_fifo_not_empty_intr_count_r; + logic notif_rd_fifo_full_intr_count_r; + logic notif_wr_fifo_not_full_intr_count_r; + logic notif_wr_fifo_empty_intr_count_r; + logic error_cmd_dec_intr_count_incr_r; + logic error_axi_rd_intr_count_incr_r; + logic error_axi_wr_intr_count_incr_r; + logic error_mbox_lock_intr_count_incr_r; + logic error_sha_lock_intr_count_incr_r; + logic error_rd_fifo_oflow_intr_count_incr_r; + logic error_rd_fifo_uflow_intr_count_incr_r; + logic error_wr_fifo_oflow_intr_count_incr_r; + logic error_wr_fifo_uflow_intr_count_incr_r; + logic notif_txn_done_intr_count_incr_r; + logic notif_rd_fifo_not_empty_intr_count_incr_r; + logic notif_rd_fifo_full_intr_count_incr_r; + logic notif_wr_fifo_not_full_intr_count_incr_r; + logic notif_wr_fifo_empty_intr_count_incr_r; + } intr_block_rf; + } decoded_reg_strb_t; + decoded_reg_strb_t decoded_reg_strb; + logic decoded_req; + logic decoded_req_is_wr; + logic [31:0] decoded_wr_data; + logic [31:0] decoded_wr_biten; + + always_comb begin + decoded_reg_strb.id = cpuif_req_masked & (cpuif_addr == 12'h0); + decoded_reg_strb.cap = cpuif_req_masked & (cpuif_addr == 12'h4); + decoded_reg_strb.ctrl = cpuif_req_masked & (cpuif_addr == 12'h8); + decoded_reg_strb.status0 = cpuif_req_masked & (cpuif_addr == 12'hc); + decoded_reg_strb.status1 = cpuif_req_masked & (cpuif_addr == 12'h10); + decoded_reg_strb.src_addr_l = cpuif_req_masked & (cpuif_addr == 12'h14); + decoded_reg_strb.src_addr_h = cpuif_req_masked & (cpuif_addr == 12'h18); + decoded_reg_strb.dst_addr_l = cpuif_req_masked & (cpuif_addr == 12'h1c); + decoded_reg_strb.dst_addr_h = cpuif_req_masked & (cpuif_addr == 12'h20); + decoded_reg_strb.byte_count = cpuif_req_masked & (cpuif_addr == 12'h24); + decoded_reg_strb.block_size = cpuif_req_masked & (cpuif_addr == 12'h28); + decoded_reg_strb.write_data = cpuif_req_masked & (cpuif_addr == 12'h2c); + decoded_reg_strb.read_data = cpuif_req_masked & (cpuif_addr == 12'h30); + decoded_reg_strb.intr_block_rf.global_intr_en_r = cpuif_req_masked & (cpuif_addr == 12'h800); + decoded_reg_strb.intr_block_rf.error_intr_en_r = cpuif_req_masked & (cpuif_addr == 12'h804); + decoded_reg_strb.intr_block_rf.notif_intr_en_r = cpuif_req_masked & (cpuif_addr == 12'h808); + decoded_reg_strb.intr_block_rf.error_global_intr_r = cpuif_req_masked & (cpuif_addr == 12'h80c); + decoded_reg_strb.intr_block_rf.notif_global_intr_r = cpuif_req_masked & (cpuif_addr == 12'h810); + decoded_reg_strb.intr_block_rf.error_internal_intr_r = cpuif_req_masked & (cpuif_addr == 12'h814); + decoded_reg_strb.intr_block_rf.notif_internal_intr_r = cpuif_req_masked & (cpuif_addr == 12'h818); + decoded_reg_strb.intr_block_rf.error_intr_trig_r = cpuif_req_masked & (cpuif_addr == 12'h81c); + decoded_reg_strb.intr_block_rf.notif_intr_trig_r = cpuif_req_masked & (cpuif_addr == 12'h820); + decoded_reg_strb.intr_block_rf.error_cmd_dec_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h900); + decoded_reg_strb.intr_block_rf.error_axi_rd_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h904); + decoded_reg_strb.intr_block_rf.error_axi_wr_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h908); + decoded_reg_strb.intr_block_rf.error_mbox_lock_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h90c); + decoded_reg_strb.intr_block_rf.error_sha_lock_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h910); + decoded_reg_strb.intr_block_rf.error_rd_fifo_oflow_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h914); + decoded_reg_strb.intr_block_rf.error_rd_fifo_uflow_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h918); + decoded_reg_strb.intr_block_rf.error_wr_fifo_oflow_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h91c); + decoded_reg_strb.intr_block_rf.error_wr_fifo_uflow_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h920); + decoded_reg_strb.intr_block_rf.notif_txn_done_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h980); + decoded_reg_strb.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h984); + decoded_reg_strb.intr_block_rf.notif_rd_fifo_full_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h988); + decoded_reg_strb.intr_block_rf.notif_wr_fifo_not_full_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h98c); + decoded_reg_strb.intr_block_rf.notif_wr_fifo_empty_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h990); + decoded_reg_strb.intr_block_rf.error_cmd_dec_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha00); + decoded_reg_strb.intr_block_rf.error_axi_rd_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha04); + decoded_reg_strb.intr_block_rf.error_axi_wr_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha08); + decoded_reg_strb.intr_block_rf.error_mbox_lock_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha0c); + decoded_reg_strb.intr_block_rf.error_sha_lock_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha10); + decoded_reg_strb.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha14); + decoded_reg_strb.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha18); + decoded_reg_strb.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha1c); + decoded_reg_strb.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha20); + decoded_reg_strb.intr_block_rf.notif_txn_done_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha24); + decoded_reg_strb.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha28); + decoded_reg_strb.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha2c); + decoded_reg_strb.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha30); + decoded_reg_strb.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha34); + end + + // Pass down signals to next stage + assign decoded_req = cpuif_req_masked; + assign decoded_req_is_wr = cpuif_req_is_wr; + assign decoded_wr_data = cpuif_wr_data; + assign decoded_wr_biten = cpuif_wr_biten; + + //-------------------------------------------------------------------------- + // Field logic + //-------------------------------------------------------------------------- + typedef struct packed{ + struct packed{ + struct packed{ + logic next; + logic load_next; + } go; + struct packed{ + logic next; + logic load_next; + } flush; + struct packed{ + logic [1:0] next; + logic load_next; + } rd_route; + struct packed{ + logic next; + logic load_next; + } rd_fixed; + struct packed{ + logic [1:0] next; + logic load_next; + } wr_route; + struct packed{ + logic next; + logic load_next; + } wr_fixed; + } ctrl; + struct packed{ + struct packed{ + logic [2:0] next; + logic load_next; + } axi_dma_fsm_ps; + } status0; + struct packed{ + struct packed{ + logic [31:0] next; + logic load_next; + } addr_l; + } src_addr_l; + struct packed{ + struct packed{ + logic [31:0] next; + logic load_next; + } addr_h; + } src_addr_h; + struct packed{ + struct packed{ + logic [31:0] next; + logic load_next; + } addr_l; + } dst_addr_l; + struct packed{ + struct packed{ + logic [31:0] next; + logic load_next; + } addr_h; + } dst_addr_h; + struct packed{ + struct packed{ + logic [31:0] next; + logic load_next; + } count; + } byte_count; + struct packed{ + struct packed{ + logic [11:0] next; + logic load_next; + } size; + } block_size; + struct packed{ + struct packed{ + struct packed{ + logic next; + logic load_next; + } error_en; + struct packed{ + logic next; + logic load_next; + } notif_en; + } global_intr_en_r; + struct packed{ + struct packed{ + logic next; + logic load_next; + } error_cmd_dec_en; + struct packed{ + logic next; + logic load_next; + } error_axi_rd_en; + struct packed{ + logic next; + logic load_next; + } error_axi_wr_en; + struct packed{ + logic next; + logic load_next; + } error_mbox_lock_en; + struct packed{ + logic next; + logic load_next; + } error_sha_lock_en; + struct packed{ + logic next; + logic load_next; + } error_rd_fifo_oflow_en; + struct packed{ + logic next; + logic load_next; + } error_rd_fifo_uflow_en; + struct packed{ + logic next; + logic load_next; + } error_wr_fifo_oflow_en; + struct packed{ + logic next; + logic load_next; + } error_wr_fifo_uflow_en; + } error_intr_en_r; + struct packed{ + struct packed{ + logic next; + logic load_next; + } notif_txn_done_en; + struct packed{ + logic next; + logic load_next; + } notif_rd_fifo_not_empty_en; + struct packed{ + logic next; + logic load_next; + } notif_rd_fifo_full_en; + struct packed{ + logic next; + logic load_next; + } notif_wr_fifo_not_full_en; + struct packed{ + logic next; + logic load_next; + } notif_wr_fifo_empty_en; + } notif_intr_en_r; + struct packed{ + struct packed{ + logic next; + logic load_next; + } agg_sts; + } error_global_intr_r; + struct packed{ + struct packed{ + logic next; + logic load_next; + } agg_sts; + } notif_global_intr_r; + struct packed{ + struct packed{ + logic next; + logic load_next; + } error_cmd_dec_sts; + struct packed{ + logic next; + logic load_next; + } error_axi_rd_sts; + struct packed{ + logic next; + logic load_next; + } error_axi_wr_sts; + struct packed{ + logic next; + logic load_next; + } error_mbox_lock_sts; + struct packed{ + logic next; + logic load_next; + } error_sha_lock_sts; + struct packed{ + logic next; + logic load_next; + } error_rd_fifo_oflow_sts; + struct packed{ + logic next; + logic load_next; + } error_rd_fifo_uflow_sts; + struct packed{ + logic next; + logic load_next; + } error_wr_fifo_oflow_sts; + struct packed{ + logic next; + logic load_next; + } error_wr_fifo_uflow_sts; + } error_internal_intr_r; + struct packed{ + struct packed{ + logic next; + logic load_next; + } notif_txn_done_sts; + struct packed{ + logic next; + logic load_next; + } notif_rd_fifo_not_empty_sts; + struct packed{ + logic next; + logic load_next; + } notif_rd_fifo_full_sts; + struct packed{ + logic next; + logic load_next; + } notif_wr_fifo_not_full_sts; + struct packed{ + logic next; + logic load_next; + } notif_wr_fifo_empty_sts; + } notif_internal_intr_r; + struct packed{ + struct packed{ + logic next; + logic load_next; + } error_cmd_dec_trig; + struct packed{ + logic next; + logic load_next; + } error_axi_rd_trig; + struct packed{ + logic next; + logic load_next; + } error_axi_wr_trig; + struct packed{ + logic next; + logic load_next; + } error_mbox_lock_trig; + struct packed{ + logic next; + logic load_next; + } error_sha_lock_trig; + struct packed{ + logic next; + logic load_next; + } error_rd_fifo_oflow_trig; + struct packed{ + logic next; + logic load_next; + } error_rd_fifo_uflow_trig; + struct packed{ + logic next; + logic load_next; + } error_wr_fifo_oflow_trig; + struct packed{ + logic next; + logic load_next; + } error_wr_fifo_uflow_trig; + } error_intr_trig_r; + struct packed{ + struct packed{ + logic next; + logic load_next; + } notif_txn_done_trig; + struct packed{ + logic next; + logic load_next; + } notif_rd_fifo_not_empty_trig; + struct packed{ + logic next; + logic load_next; + } notif_rd_fifo_full_trig; + struct packed{ + logic next; + logic load_next; + } notif_wr_fifo_not_full_trig; + struct packed{ + logic next; + logic load_next; + } notif_wr_fifo_empty_trig; + } notif_intr_trig_r; + struct packed{ + struct packed{ + logic [31:0] next; + logic load_next; + logic incrthreshold; + logic incrsaturate; + } cnt; + } error_cmd_dec_intr_count_r; + struct packed{ + struct packed{ + logic [31:0] next; + logic load_next; + logic incrthreshold; + logic incrsaturate; + } cnt; + } error_axi_rd_intr_count_r; + struct packed{ + struct packed{ + logic [31:0] next; + logic load_next; + logic incrthreshold; + logic incrsaturate; + } cnt; + } error_axi_wr_intr_count_r; + struct packed{ + struct packed{ + logic [31:0] next; + logic load_next; + logic incrthreshold; + logic incrsaturate; + } cnt; + } error_mbox_lock_intr_count_r; + struct packed{ + struct packed{ + logic [31:0] next; + logic load_next; + logic incrthreshold; + logic incrsaturate; + } cnt; + } error_sha_lock_intr_count_r; + struct packed{ + struct packed{ + logic [31:0] next; + logic load_next; + logic incrthreshold; + logic incrsaturate; + } cnt; + } error_rd_fifo_oflow_intr_count_r; + struct packed{ + struct packed{ + logic [31:0] next; + logic load_next; + logic incrthreshold; + logic incrsaturate; + } cnt; + } error_rd_fifo_uflow_intr_count_r; + struct packed{ + struct packed{ + logic [31:0] next; + logic load_next; + logic incrthreshold; + logic incrsaturate; + } cnt; + } error_wr_fifo_oflow_intr_count_r; + struct packed{ + struct packed{ + logic [31:0] next; + logic load_next; + logic incrthreshold; + logic incrsaturate; + } cnt; + } error_wr_fifo_uflow_intr_count_r; + struct packed{ + struct packed{ + logic [31:0] next; + logic load_next; + logic incrthreshold; + logic incrsaturate; + } cnt; + } notif_txn_done_intr_count_r; + struct packed{ + struct packed{ + logic [31:0] next; + logic load_next; + logic incrthreshold; + logic incrsaturate; + } cnt; + } notif_rd_fifo_not_empty_intr_count_r; + struct packed{ + struct packed{ + logic [31:0] next; + logic load_next; + logic incrthreshold; + logic incrsaturate; + } cnt; + } notif_rd_fifo_full_intr_count_r; + struct packed{ + struct packed{ + logic [31:0] next; + logic load_next; + logic incrthreshold; + logic incrsaturate; + } cnt; + } notif_wr_fifo_not_full_intr_count_r; + struct packed{ + struct packed{ + logic [31:0] next; + logic load_next; + logic incrthreshold; + logic incrsaturate; + } cnt; + } notif_wr_fifo_empty_intr_count_r; + struct packed{ + struct packed{ + logic next; + logic load_next; + logic decrthreshold; + logic underflow; + } pulse; + } error_cmd_dec_intr_count_incr_r; + struct packed{ + struct packed{ + logic next; + logic load_next; + logic decrthreshold; + logic underflow; + } pulse; + } error_axi_rd_intr_count_incr_r; + struct packed{ + struct packed{ + logic next; + logic load_next; + logic decrthreshold; + logic underflow; + } pulse; + } error_axi_wr_intr_count_incr_r; + struct packed{ + struct packed{ + logic next; + logic load_next; + logic decrthreshold; + logic underflow; + } pulse; + } error_mbox_lock_intr_count_incr_r; + struct packed{ + struct packed{ + logic next; + logic load_next; + logic decrthreshold; + logic underflow; + } pulse; + } error_sha_lock_intr_count_incr_r; + struct packed{ + struct packed{ + logic next; + logic load_next; + logic decrthreshold; + logic underflow; + } pulse; + } error_rd_fifo_oflow_intr_count_incr_r; + struct packed{ + struct packed{ + logic next; + logic load_next; + logic decrthreshold; + logic underflow; + } pulse; + } error_rd_fifo_uflow_intr_count_incr_r; + struct packed{ + struct packed{ + logic next; + logic load_next; + logic decrthreshold; + logic underflow; + } pulse; + } error_wr_fifo_oflow_intr_count_incr_r; + struct packed{ + struct packed{ + logic next; + logic load_next; + logic decrthreshold; + logic underflow; + } pulse; + } error_wr_fifo_uflow_intr_count_incr_r; + struct packed{ + struct packed{ + logic next; + logic load_next; + logic decrthreshold; + logic underflow; + } pulse; + } notif_txn_done_intr_count_incr_r; + struct packed{ + struct packed{ + logic next; + logic load_next; + logic decrthreshold; + logic underflow; + } pulse; + } notif_rd_fifo_not_empty_intr_count_incr_r; + struct packed{ + struct packed{ + logic next; + logic load_next; + logic decrthreshold; + logic underflow; + } pulse; + } notif_rd_fifo_full_intr_count_incr_r; + struct packed{ + struct packed{ + logic next; + logic load_next; + logic decrthreshold; + logic underflow; + } pulse; + } notif_wr_fifo_not_full_intr_count_incr_r; + struct packed{ + struct packed{ + logic next; + logic load_next; + logic decrthreshold; + logic underflow; + } pulse; + } notif_wr_fifo_empty_intr_count_incr_r; + } intr_block_rf; + } field_combo_t; + field_combo_t field_combo; + + typedef struct packed{ + struct packed{ + struct packed{ + logic value; + } go; + struct packed{ + logic value; + } flush; + struct packed{ + logic [1:0] value; + } rd_route; + struct packed{ + logic value; + } rd_fixed; + struct packed{ + logic [1:0] value; + } wr_route; + struct packed{ + logic value; + } wr_fixed; + } ctrl; + struct packed{ + struct packed{ + logic [2:0] value; + } axi_dma_fsm_ps; + } status0; + struct packed{ + struct packed{ + logic [31:0] value; + } addr_l; + } src_addr_l; + struct packed{ + struct packed{ + logic [31:0] value; + } addr_h; + } src_addr_h; + struct packed{ + struct packed{ + logic [31:0] value; + } addr_l; + } dst_addr_l; + struct packed{ + struct packed{ + logic [31:0] value; + } addr_h; + } dst_addr_h; + struct packed{ + struct packed{ + logic [31:0] value; + } count; + } byte_count; + struct packed{ + struct packed{ + logic [11:0] value; + } size; + } block_size; + struct packed{ + struct packed{ + struct packed{ + logic value; + } error_en; + struct packed{ + logic value; + } notif_en; + } global_intr_en_r; + struct packed{ + struct packed{ + logic value; + } error_cmd_dec_en; + struct packed{ + logic value; + } error_axi_rd_en; + struct packed{ + logic value; + } error_axi_wr_en; + struct packed{ + logic value; + } error_mbox_lock_en; + struct packed{ + logic value; + } error_sha_lock_en; + struct packed{ + logic value; + } error_rd_fifo_oflow_en; + struct packed{ + logic value; + } error_rd_fifo_uflow_en; + struct packed{ + logic value; + } error_wr_fifo_oflow_en; + struct packed{ + logic value; + } error_wr_fifo_uflow_en; + } error_intr_en_r; + struct packed{ + struct packed{ + logic value; + } notif_txn_done_en; + struct packed{ + logic value; + } notif_rd_fifo_not_empty_en; + struct packed{ + logic value; + } notif_rd_fifo_full_en; + struct packed{ + logic value; + } notif_wr_fifo_not_full_en; + struct packed{ + logic value; + } notif_wr_fifo_empty_en; + } notif_intr_en_r; + struct packed{ + struct packed{ + logic value; + } agg_sts; + } error_global_intr_r; + struct packed{ + struct packed{ + logic value; + } agg_sts; + } notif_global_intr_r; + struct packed{ + struct packed{ + logic value; + } error_cmd_dec_sts; + struct packed{ + logic value; + } error_axi_rd_sts; + struct packed{ + logic value; + } error_axi_wr_sts; + struct packed{ + logic value; + } error_mbox_lock_sts; + struct packed{ + logic value; + } error_sha_lock_sts; + struct packed{ + logic value; + } error_rd_fifo_oflow_sts; + struct packed{ + logic value; + } error_rd_fifo_uflow_sts; + struct packed{ + logic value; + } error_wr_fifo_oflow_sts; + struct packed{ + logic value; + } error_wr_fifo_uflow_sts; + } error_internal_intr_r; + struct packed{ + struct packed{ + logic value; + } notif_txn_done_sts; + struct packed{ + logic value; + } notif_rd_fifo_not_empty_sts; + struct packed{ + logic value; + } notif_rd_fifo_full_sts; + struct packed{ + logic value; + } notif_wr_fifo_not_full_sts; + struct packed{ + logic value; + } notif_wr_fifo_empty_sts; + } notif_internal_intr_r; + struct packed{ + struct packed{ + logic value; + } error_cmd_dec_trig; + struct packed{ + logic value; + } error_axi_rd_trig; + struct packed{ + logic value; + } error_axi_wr_trig; + struct packed{ + logic value; + } error_mbox_lock_trig; + struct packed{ + logic value; + } error_sha_lock_trig; + struct packed{ + logic value; + } error_rd_fifo_oflow_trig; + struct packed{ + logic value; + } error_rd_fifo_uflow_trig; + struct packed{ + logic value; + } error_wr_fifo_oflow_trig; + struct packed{ + logic value; + } error_wr_fifo_uflow_trig; + } error_intr_trig_r; + struct packed{ + struct packed{ + logic value; + } notif_txn_done_trig; + struct packed{ + logic value; + } notif_rd_fifo_not_empty_trig; + struct packed{ + logic value; + } notif_rd_fifo_full_trig; + struct packed{ + logic value; + } notif_wr_fifo_not_full_trig; + struct packed{ + logic value; + } notif_wr_fifo_empty_trig; + } notif_intr_trig_r; + struct packed{ + struct packed{ + logic [31:0] value; + } cnt; + } error_cmd_dec_intr_count_r; + struct packed{ + struct packed{ + logic [31:0] value; + } cnt; + } error_axi_rd_intr_count_r; + struct packed{ + struct packed{ + logic [31:0] value; + } cnt; + } error_axi_wr_intr_count_r; + struct packed{ + struct packed{ + logic [31:0] value; + } cnt; + } error_mbox_lock_intr_count_r; + struct packed{ + struct packed{ + logic [31:0] value; + } cnt; + } error_sha_lock_intr_count_r; + struct packed{ + struct packed{ + logic [31:0] value; + } cnt; + } error_rd_fifo_oflow_intr_count_r; + struct packed{ + struct packed{ + logic [31:0] value; + } cnt; + } error_rd_fifo_uflow_intr_count_r; + struct packed{ + struct packed{ + logic [31:0] value; + } cnt; + } error_wr_fifo_oflow_intr_count_r; + struct packed{ + struct packed{ + logic [31:0] value; + } cnt; + } error_wr_fifo_uflow_intr_count_r; + struct packed{ + struct packed{ + logic [31:0] value; + } cnt; + } notif_txn_done_intr_count_r; + struct packed{ + struct packed{ + logic [31:0] value; + } cnt; + } notif_rd_fifo_not_empty_intr_count_r; + struct packed{ + struct packed{ + logic [31:0] value; + } cnt; + } notif_rd_fifo_full_intr_count_r; + struct packed{ + struct packed{ + logic [31:0] value; + } cnt; + } notif_wr_fifo_not_full_intr_count_r; + struct packed{ + struct packed{ + logic [31:0] value; + } cnt; + } notif_wr_fifo_empty_intr_count_r; + struct packed{ + struct packed{ + logic value; + } pulse; + } error_cmd_dec_intr_count_incr_r; + struct packed{ + struct packed{ + logic value; + } pulse; + } error_axi_rd_intr_count_incr_r; + struct packed{ + struct packed{ + logic value; + } pulse; + } error_axi_wr_intr_count_incr_r; + struct packed{ + struct packed{ + logic value; + } pulse; + } error_mbox_lock_intr_count_incr_r; + struct packed{ + struct packed{ + logic value; + } pulse; + } error_sha_lock_intr_count_incr_r; + struct packed{ + struct packed{ + logic value; + } pulse; + } error_rd_fifo_oflow_intr_count_incr_r; + struct packed{ + struct packed{ + logic value; + } pulse; + } error_rd_fifo_uflow_intr_count_incr_r; + struct packed{ + struct packed{ + logic value; + } pulse; + } error_wr_fifo_oflow_intr_count_incr_r; + struct packed{ + struct packed{ + logic value; + } pulse; + } error_wr_fifo_uflow_intr_count_incr_r; + struct packed{ + struct packed{ + logic value; + } pulse; + } notif_txn_done_intr_count_incr_r; + struct packed{ + struct packed{ + logic value; + } pulse; + } notif_rd_fifo_not_empty_intr_count_incr_r; + struct packed{ + struct packed{ + logic value; + } pulse; + } notif_rd_fifo_full_intr_count_incr_r; + struct packed{ + struct packed{ + logic value; + } pulse; + } notif_wr_fifo_not_full_intr_count_incr_r; + struct packed{ + struct packed{ + logic value; + } pulse; + } notif_wr_fifo_empty_intr_count_incr_r; + } intr_block_rf; + } field_storage_t; + field_storage_t field_storage; + + // Field: axi_dma_reg.ctrl.go + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.ctrl.go.value; + load_next_c = '0; + if(decoded_reg_strb.ctrl && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 set + next_c = field_storage.ctrl.go.value | (decoded_wr_data[0:0] & decoded_wr_biten[0:0]); + load_next_c = '1; + end else if(hwif_in.ctrl.go.hwclr) begin // HW Clear + next_c = '0; + load_next_c = '1; + end + field_combo.ctrl.go.next = next_c; + field_combo.ctrl.go.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.ctrl.go.value <= 1'h0; + end else if(field_combo.ctrl.go.load_next) begin + field_storage.ctrl.go.value <= field_combo.ctrl.go.next; + end + end + assign hwif_out.ctrl.go.value = field_storage.ctrl.go.value; + assign hwif_out.ctrl.go.swmod = decoded_reg_strb.ctrl && decoded_req_is_wr; + // Field: axi_dma_reg.ctrl.flush + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.ctrl.flush.value; + load_next_c = '0; + if(decoded_reg_strb.ctrl && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 set + next_c = field_storage.ctrl.flush.value | (decoded_wr_data[1:1] & decoded_wr_biten[1:1]); + load_next_c = '1; + end else if(hwif_in.ctrl.flush.hwclr) begin // HW Clear + next_c = '0; + load_next_c = '1; + end + field_combo.ctrl.flush.next = next_c; + field_combo.ctrl.flush.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.ctrl.flush.value <= 1'h0; + end else if(field_combo.ctrl.flush.load_next) begin + field_storage.ctrl.flush.value <= field_combo.ctrl.flush.next; + end + end + assign hwif_out.ctrl.flush.value = field_storage.ctrl.flush.value; + // Field: axi_dma_reg.ctrl.rd_route + always_comb begin + automatic logic [1:0] next_c; + automatic logic load_next_c; + next_c = field_storage.ctrl.rd_route.value; + load_next_c = '0; + if(decoded_reg_strb.ctrl && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.ctrl.rd_route.value & ~decoded_wr_biten[17:16]) | (decoded_wr_data[17:16] & decoded_wr_biten[17:16]); + load_next_c = '1; + end + field_combo.ctrl.rd_route.next = next_c; + field_combo.ctrl.rd_route.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.ctrl.rd_route.value <= 2'h0; + end else if(field_combo.ctrl.rd_route.load_next) begin + field_storage.ctrl.rd_route.value <= field_combo.ctrl.rd_route.next; + end + end + assign hwif_out.ctrl.rd_route.value = field_storage.ctrl.rd_route.value; + // Field: axi_dma_reg.ctrl.rd_fixed + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.ctrl.rd_fixed.value; + load_next_c = '0; + if(decoded_reg_strb.ctrl && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.ctrl.rd_fixed.value & ~decoded_wr_biten[20:20]) | (decoded_wr_data[20:20] & decoded_wr_biten[20:20]); + load_next_c = '1; + end + field_combo.ctrl.rd_fixed.next = next_c; + field_combo.ctrl.rd_fixed.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.ctrl.rd_fixed.value <= 1'h0; + end else if(field_combo.ctrl.rd_fixed.load_next) begin + field_storage.ctrl.rd_fixed.value <= field_combo.ctrl.rd_fixed.next; + end + end + assign hwif_out.ctrl.rd_fixed.value = field_storage.ctrl.rd_fixed.value; + // Field: axi_dma_reg.ctrl.wr_route + always_comb begin + automatic logic [1:0] next_c; + automatic logic load_next_c; + next_c = field_storage.ctrl.wr_route.value; + load_next_c = '0; + if(decoded_reg_strb.ctrl && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.ctrl.wr_route.value & ~decoded_wr_biten[25:24]) | (decoded_wr_data[25:24] & decoded_wr_biten[25:24]); + load_next_c = '1; + end + field_combo.ctrl.wr_route.next = next_c; + field_combo.ctrl.wr_route.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.ctrl.wr_route.value <= 2'h0; + end else if(field_combo.ctrl.wr_route.load_next) begin + field_storage.ctrl.wr_route.value <= field_combo.ctrl.wr_route.next; + end + end + assign hwif_out.ctrl.wr_route.value = field_storage.ctrl.wr_route.value; + // Field: axi_dma_reg.ctrl.wr_fixed + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.ctrl.wr_fixed.value; + load_next_c = '0; + if(decoded_reg_strb.ctrl && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.ctrl.wr_fixed.value & ~decoded_wr_biten[28:28]) | (decoded_wr_data[28:28] & decoded_wr_biten[28:28]); + load_next_c = '1; + end + field_combo.ctrl.wr_fixed.next = next_c; + field_combo.ctrl.wr_fixed.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.ctrl.wr_fixed.value <= 1'h0; + end else if(field_combo.ctrl.wr_fixed.load_next) begin + field_storage.ctrl.wr_fixed.value <= field_combo.ctrl.wr_fixed.next; + end + end + assign hwif_out.ctrl.wr_fixed.value = field_storage.ctrl.wr_fixed.value; + // Field: axi_dma_reg.status0.axi_dma_fsm_ps + always_comb begin + automatic logic [2:0] next_c; + automatic logic load_next_c; + next_c = field_storage.status0.axi_dma_fsm_ps.value; + load_next_c = '0; + + // HW Write + next_c = hwif_in.status0.axi_dma_fsm_ps.next; + load_next_c = '1; + field_combo.status0.axi_dma_fsm_ps.next = next_c; + field_combo.status0.axi_dma_fsm_ps.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.status0.axi_dma_fsm_ps.value <= 3'h0; + end else if(field_combo.status0.axi_dma_fsm_ps.load_next) begin + field_storage.status0.axi_dma_fsm_ps.value <= field_combo.status0.axi_dma_fsm_ps.next; + end + end + assign hwif_out.status0.axi_dma_fsm_ps.value = field_storage.status0.axi_dma_fsm_ps.value; + // Field: axi_dma_reg.src_addr_l.addr_l + always_comb begin + automatic logic [31:0] next_c; + automatic logic load_next_c; + next_c = field_storage.src_addr_l.addr_l.value; + load_next_c = '0; + if(decoded_reg_strb.src_addr_l && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.src_addr_l.addr_l.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); + load_next_c = '1; + end + field_combo.src_addr_l.addr_l.next = next_c; + field_combo.src_addr_l.addr_l.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.src_addr_l.addr_l.value <= 32'h0; + end else if(field_combo.src_addr_l.addr_l.load_next) begin + field_storage.src_addr_l.addr_l.value <= field_combo.src_addr_l.addr_l.next; + end + end + assign hwif_out.src_addr_l.addr_l.value = field_storage.src_addr_l.addr_l.value; + // Field: axi_dma_reg.src_addr_h.addr_h + always_comb begin + automatic logic [31:0] next_c; + automatic logic load_next_c; + next_c = field_storage.src_addr_h.addr_h.value; + load_next_c = '0; + if(decoded_reg_strb.src_addr_h && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.src_addr_h.addr_h.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); + load_next_c = '1; + end + field_combo.src_addr_h.addr_h.next = next_c; + field_combo.src_addr_h.addr_h.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.src_addr_h.addr_h.value <= 32'h0; + end else if(field_combo.src_addr_h.addr_h.load_next) begin + field_storage.src_addr_h.addr_h.value <= field_combo.src_addr_h.addr_h.next; + end + end + assign hwif_out.src_addr_h.addr_h.value = field_storage.src_addr_h.addr_h.value; + // Field: axi_dma_reg.dst_addr_l.addr_l + always_comb begin + automatic logic [31:0] next_c; + automatic logic load_next_c; + next_c = field_storage.dst_addr_l.addr_l.value; + load_next_c = '0; + if(decoded_reg_strb.dst_addr_l && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.dst_addr_l.addr_l.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); + load_next_c = '1; + end + field_combo.dst_addr_l.addr_l.next = next_c; + field_combo.dst_addr_l.addr_l.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.dst_addr_l.addr_l.value <= 32'h0; + end else if(field_combo.dst_addr_l.addr_l.load_next) begin + field_storage.dst_addr_l.addr_l.value <= field_combo.dst_addr_l.addr_l.next; + end + end + assign hwif_out.dst_addr_l.addr_l.value = field_storage.dst_addr_l.addr_l.value; + // Field: axi_dma_reg.dst_addr_h.addr_h + always_comb begin + automatic logic [31:0] next_c; + automatic logic load_next_c; + next_c = field_storage.dst_addr_h.addr_h.value; + load_next_c = '0; + if(decoded_reg_strb.dst_addr_h && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.dst_addr_h.addr_h.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); + load_next_c = '1; + end + field_combo.dst_addr_h.addr_h.next = next_c; + field_combo.dst_addr_h.addr_h.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.dst_addr_h.addr_h.value <= 32'h0; + end else if(field_combo.dst_addr_h.addr_h.load_next) begin + field_storage.dst_addr_h.addr_h.value <= field_combo.dst_addr_h.addr_h.next; + end + end + assign hwif_out.dst_addr_h.addr_h.value = field_storage.dst_addr_h.addr_h.value; + // Field: axi_dma_reg.byte_count.count + always_comb begin + automatic logic [31:0] next_c; + automatic logic load_next_c; + next_c = field_storage.byte_count.count.value; + load_next_c = '0; + if(decoded_reg_strb.byte_count && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.byte_count.count.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); + load_next_c = '1; + end + field_combo.byte_count.count.next = next_c; + field_combo.byte_count.count.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.byte_count.count.value <= 32'h0; + end else if(field_combo.byte_count.count.load_next) begin + field_storage.byte_count.count.value <= field_combo.byte_count.count.next; + end + end + assign hwif_out.byte_count.count.value = field_storage.byte_count.count.value; + // Field: axi_dma_reg.block_size.size + always_comb begin + automatic logic [11:0] next_c; + automatic logic load_next_c; + next_c = field_storage.block_size.size.value; + load_next_c = '0; + if(decoded_reg_strb.block_size && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.block_size.size.value & ~decoded_wr_biten[11:0]) | (decoded_wr_data[11:0] & decoded_wr_biten[11:0]); + load_next_c = '1; + end + field_combo.block_size.size.next = next_c; + field_combo.block_size.size.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.block_size.size.value <= 12'h0; + end else if(field_combo.block_size.size.load_next) begin + field_storage.block_size.size.value <= field_combo.block_size.size.next; + end + end + assign hwif_out.block_size.size.value = field_storage.block_size.size.value; + assign hwif_out.write_data.wdata.swmod = decoded_reg_strb.write_data && decoded_req_is_wr; + assign hwif_out.read_data.rdata.swacc = decoded_reg_strb.read_data; + // Field: axi_dma_reg.intr_block_rf.global_intr_en_r.error_en + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.global_intr_en_r.error_en.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.global_intr_en_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.global_intr_en_r.error_en.value & ~decoded_wr_biten[0:0]) | (decoded_wr_data[0:0] & decoded_wr_biten[0:0]); + load_next_c = '1; + end + field_combo.intr_block_rf.global_intr_en_r.error_en.next = next_c; + field_combo.intr_block_rf.global_intr_en_r.error_en.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.global_intr_en_r.error_en.value <= 1'h0; + end else if(field_combo.intr_block_rf.global_intr_en_r.error_en.load_next) begin + field_storage.intr_block_rf.global_intr_en_r.error_en.value <= field_combo.intr_block_rf.global_intr_en_r.error_en.next; + end + end + // Field: axi_dma_reg.intr_block_rf.global_intr_en_r.notif_en + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.global_intr_en_r.notif_en.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.global_intr_en_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.global_intr_en_r.notif_en.value & ~decoded_wr_biten[1:1]) | (decoded_wr_data[1:1] & decoded_wr_biten[1:1]); + load_next_c = '1; + end + field_combo.intr_block_rf.global_intr_en_r.notif_en.next = next_c; + field_combo.intr_block_rf.global_intr_en_r.notif_en.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.global_intr_en_r.notif_en.value <= 1'h0; + end else if(field_combo.intr_block_rf.global_intr_en_r.notif_en.load_next) begin + field_storage.intr_block_rf.global_intr_en_r.notif_en.value <= field_combo.intr_block_rf.global_intr_en_r.notif_en.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_intr_en_r.error_cmd_dec_en + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_intr_en_r.error_cmd_dec_en.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.error_intr_en_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.error_intr_en_r.error_cmd_dec_en.value & ~decoded_wr_biten[0:0]) | (decoded_wr_data[0:0] & decoded_wr_biten[0:0]); + load_next_c = '1; + end + field_combo.intr_block_rf.error_intr_en_r.error_cmd_dec_en.next = next_c; + field_combo.intr_block_rf.error_intr_en_r.error_cmd_dec_en.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.error_intr_en_r.error_cmd_dec_en.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_intr_en_r.error_cmd_dec_en.load_next) begin + field_storage.intr_block_rf.error_intr_en_r.error_cmd_dec_en.value <= field_combo.intr_block_rf.error_intr_en_r.error_cmd_dec_en.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_intr_en_r.error_axi_rd_en + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_intr_en_r.error_axi_rd_en.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.error_intr_en_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.error_intr_en_r.error_axi_rd_en.value & ~decoded_wr_biten[1:1]) | (decoded_wr_data[1:1] & decoded_wr_biten[1:1]); + load_next_c = '1; + end + field_combo.intr_block_rf.error_intr_en_r.error_axi_rd_en.next = next_c; + field_combo.intr_block_rf.error_intr_en_r.error_axi_rd_en.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.error_intr_en_r.error_axi_rd_en.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_intr_en_r.error_axi_rd_en.load_next) begin + field_storage.intr_block_rf.error_intr_en_r.error_axi_rd_en.value <= field_combo.intr_block_rf.error_intr_en_r.error_axi_rd_en.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_intr_en_r.error_axi_wr_en + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_intr_en_r.error_axi_wr_en.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.error_intr_en_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.error_intr_en_r.error_axi_wr_en.value & ~decoded_wr_biten[2:2]) | (decoded_wr_data[2:2] & decoded_wr_biten[2:2]); + load_next_c = '1; + end + field_combo.intr_block_rf.error_intr_en_r.error_axi_wr_en.next = next_c; + field_combo.intr_block_rf.error_intr_en_r.error_axi_wr_en.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.error_intr_en_r.error_axi_wr_en.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_intr_en_r.error_axi_wr_en.load_next) begin + field_storage.intr_block_rf.error_intr_en_r.error_axi_wr_en.value <= field_combo.intr_block_rf.error_intr_en_r.error_axi_wr_en.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_intr_en_r.error_mbox_lock_en + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_intr_en_r.error_mbox_lock_en.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.error_intr_en_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.error_intr_en_r.error_mbox_lock_en.value & ~decoded_wr_biten[3:3]) | (decoded_wr_data[3:3] & decoded_wr_biten[3:3]); + load_next_c = '1; + end + field_combo.intr_block_rf.error_intr_en_r.error_mbox_lock_en.next = next_c; + field_combo.intr_block_rf.error_intr_en_r.error_mbox_lock_en.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.error_intr_en_r.error_mbox_lock_en.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_intr_en_r.error_mbox_lock_en.load_next) begin + field_storage.intr_block_rf.error_intr_en_r.error_mbox_lock_en.value <= field_combo.intr_block_rf.error_intr_en_r.error_mbox_lock_en.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_intr_en_r.error_sha_lock_en + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_intr_en_r.error_sha_lock_en.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.error_intr_en_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.error_intr_en_r.error_sha_lock_en.value & ~decoded_wr_biten[4:4]) | (decoded_wr_data[4:4] & decoded_wr_biten[4:4]); + load_next_c = '1; + end + field_combo.intr_block_rf.error_intr_en_r.error_sha_lock_en.next = next_c; + field_combo.intr_block_rf.error_intr_en_r.error_sha_lock_en.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.error_intr_en_r.error_sha_lock_en.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_intr_en_r.error_sha_lock_en.load_next) begin + field_storage.intr_block_rf.error_intr_en_r.error_sha_lock_en.value <= field_combo.intr_block_rf.error_intr_en_r.error_sha_lock_en.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_intr_en_r.error_rd_fifo_oflow_en + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_intr_en_r.error_rd_fifo_oflow_en.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.error_intr_en_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.error_intr_en_r.error_rd_fifo_oflow_en.value & ~decoded_wr_biten[5:5]) | (decoded_wr_data[5:5] & decoded_wr_biten[5:5]); + load_next_c = '1; + end + field_combo.intr_block_rf.error_intr_en_r.error_rd_fifo_oflow_en.next = next_c; + field_combo.intr_block_rf.error_intr_en_r.error_rd_fifo_oflow_en.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.error_intr_en_r.error_rd_fifo_oflow_en.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_intr_en_r.error_rd_fifo_oflow_en.load_next) begin + field_storage.intr_block_rf.error_intr_en_r.error_rd_fifo_oflow_en.value <= field_combo.intr_block_rf.error_intr_en_r.error_rd_fifo_oflow_en.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_intr_en_r.error_rd_fifo_uflow_en + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_intr_en_r.error_rd_fifo_uflow_en.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.error_intr_en_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.error_intr_en_r.error_rd_fifo_uflow_en.value & ~decoded_wr_biten[6:6]) | (decoded_wr_data[6:6] & decoded_wr_biten[6:6]); + load_next_c = '1; + end + field_combo.intr_block_rf.error_intr_en_r.error_rd_fifo_uflow_en.next = next_c; + field_combo.intr_block_rf.error_intr_en_r.error_rd_fifo_uflow_en.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.error_intr_en_r.error_rd_fifo_uflow_en.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_intr_en_r.error_rd_fifo_uflow_en.load_next) begin + field_storage.intr_block_rf.error_intr_en_r.error_rd_fifo_uflow_en.value <= field_combo.intr_block_rf.error_intr_en_r.error_rd_fifo_uflow_en.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_intr_en_r.error_wr_fifo_oflow_en + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_intr_en_r.error_wr_fifo_oflow_en.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.error_intr_en_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.error_intr_en_r.error_wr_fifo_oflow_en.value & ~decoded_wr_biten[7:7]) | (decoded_wr_data[7:7] & decoded_wr_biten[7:7]); + load_next_c = '1; + end + field_combo.intr_block_rf.error_intr_en_r.error_wr_fifo_oflow_en.next = next_c; + field_combo.intr_block_rf.error_intr_en_r.error_wr_fifo_oflow_en.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.error_intr_en_r.error_wr_fifo_oflow_en.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_intr_en_r.error_wr_fifo_oflow_en.load_next) begin + field_storage.intr_block_rf.error_intr_en_r.error_wr_fifo_oflow_en.value <= field_combo.intr_block_rf.error_intr_en_r.error_wr_fifo_oflow_en.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_intr_en_r.error_wr_fifo_uflow_en + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_intr_en_r.error_wr_fifo_uflow_en.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.error_intr_en_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.error_intr_en_r.error_wr_fifo_uflow_en.value & ~decoded_wr_biten[8:8]) | (decoded_wr_data[8:8] & decoded_wr_biten[8:8]); + load_next_c = '1; + end + field_combo.intr_block_rf.error_intr_en_r.error_wr_fifo_uflow_en.next = next_c; + field_combo.intr_block_rf.error_intr_en_r.error_wr_fifo_uflow_en.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.error_intr_en_r.error_wr_fifo_uflow_en.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_intr_en_r.error_wr_fifo_uflow_en.load_next) begin + field_storage.intr_block_rf.error_intr_en_r.error_wr_fifo_uflow_en.value <= field_combo.intr_block_rf.error_intr_en_r.error_wr_fifo_uflow_en.next; + end + end + // Field: axi_dma_reg.intr_block_rf.notif_intr_en_r.notif_txn_done_en + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.notif_intr_en_r.notif_txn_done_en.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.notif_intr_en_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.notif_intr_en_r.notif_txn_done_en.value & ~decoded_wr_biten[0:0]) | (decoded_wr_data[0:0] & decoded_wr_biten[0:0]); + load_next_c = '1; + end + field_combo.intr_block_rf.notif_intr_en_r.notif_txn_done_en.next = next_c; + field_combo.intr_block_rf.notif_intr_en_r.notif_txn_done_en.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.notif_intr_en_r.notif_txn_done_en.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_intr_en_r.notif_txn_done_en.load_next) begin + field_storage.intr_block_rf.notif_intr_en_r.notif_txn_done_en.value <= field_combo.intr_block_rf.notif_intr_en_r.notif_txn_done_en.next; + end + end + // Field: axi_dma_reg.intr_block_rf.notif_intr_en_r.notif_rd_fifo_not_empty_en + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.notif_intr_en_r.notif_rd_fifo_not_empty_en.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.notif_intr_en_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.notif_intr_en_r.notif_rd_fifo_not_empty_en.value & ~decoded_wr_biten[1:1]) | (decoded_wr_data[1:1] & decoded_wr_biten[1:1]); + load_next_c = '1; + end + field_combo.intr_block_rf.notif_intr_en_r.notif_rd_fifo_not_empty_en.next = next_c; + field_combo.intr_block_rf.notif_intr_en_r.notif_rd_fifo_not_empty_en.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.notif_intr_en_r.notif_rd_fifo_not_empty_en.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_intr_en_r.notif_rd_fifo_not_empty_en.load_next) begin + field_storage.intr_block_rf.notif_intr_en_r.notif_rd_fifo_not_empty_en.value <= field_combo.intr_block_rf.notif_intr_en_r.notif_rd_fifo_not_empty_en.next; + end + end + // Field: axi_dma_reg.intr_block_rf.notif_intr_en_r.notif_rd_fifo_full_en + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.notif_intr_en_r.notif_rd_fifo_full_en.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.notif_intr_en_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.notif_intr_en_r.notif_rd_fifo_full_en.value & ~decoded_wr_biten[2:2]) | (decoded_wr_data[2:2] & decoded_wr_biten[2:2]); + load_next_c = '1; + end + field_combo.intr_block_rf.notif_intr_en_r.notif_rd_fifo_full_en.next = next_c; + field_combo.intr_block_rf.notif_intr_en_r.notif_rd_fifo_full_en.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.notif_intr_en_r.notif_rd_fifo_full_en.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_intr_en_r.notif_rd_fifo_full_en.load_next) begin + field_storage.intr_block_rf.notif_intr_en_r.notif_rd_fifo_full_en.value <= field_combo.intr_block_rf.notif_intr_en_r.notif_rd_fifo_full_en.next; + end + end + // Field: axi_dma_reg.intr_block_rf.notif_intr_en_r.notif_wr_fifo_not_full_en + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.notif_intr_en_r.notif_wr_fifo_not_full_en.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.notif_intr_en_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.notif_intr_en_r.notif_wr_fifo_not_full_en.value & ~decoded_wr_biten[3:3]) | (decoded_wr_data[3:3] & decoded_wr_biten[3:3]); + load_next_c = '1; + end + field_combo.intr_block_rf.notif_intr_en_r.notif_wr_fifo_not_full_en.next = next_c; + field_combo.intr_block_rf.notif_intr_en_r.notif_wr_fifo_not_full_en.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.notif_intr_en_r.notif_wr_fifo_not_full_en.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_intr_en_r.notif_wr_fifo_not_full_en.load_next) begin + field_storage.intr_block_rf.notif_intr_en_r.notif_wr_fifo_not_full_en.value <= field_combo.intr_block_rf.notif_intr_en_r.notif_wr_fifo_not_full_en.next; + end + end + // Field: axi_dma_reg.intr_block_rf.notif_intr_en_r.notif_wr_fifo_empty_en + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.notif_intr_en_r.notif_wr_fifo_empty_en.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.notif_intr_en_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.notif_intr_en_r.notif_wr_fifo_empty_en.value & ~decoded_wr_biten[4:4]) | (decoded_wr_data[4:4] & decoded_wr_biten[4:4]); + load_next_c = '1; + end + field_combo.intr_block_rf.notif_intr_en_r.notif_wr_fifo_empty_en.next = next_c; + field_combo.intr_block_rf.notif_intr_en_r.notif_wr_fifo_empty_en.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.notif_intr_en_r.notif_wr_fifo_empty_en.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_intr_en_r.notif_wr_fifo_empty_en.load_next) begin + field_storage.intr_block_rf.notif_intr_en_r.notif_wr_fifo_empty_en.value <= field_combo.intr_block_rf.notif_intr_en_r.notif_wr_fifo_empty_en.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_global_intr_r.agg_sts + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_global_intr_r.agg_sts.value; + load_next_c = '0; + + // HW Write + next_c = hwif_out.intr_block_rf.error_internal_intr_r.intr; + load_next_c = '1; + field_combo.intr_block_rf.error_global_intr_r.agg_sts.next = next_c; + field_combo.intr_block_rf.error_global_intr_r.agg_sts.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.error_global_intr_r.agg_sts.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_global_intr_r.agg_sts.load_next) begin + field_storage.intr_block_rf.error_global_intr_r.agg_sts.value <= field_combo.intr_block_rf.error_global_intr_r.agg_sts.next; + end + end + assign hwif_out.intr_block_rf.error_global_intr_r.intr = + |(field_storage.intr_block_rf.error_global_intr_r.agg_sts.value & field_storage.intr_block_rf.global_intr_en_r.error_en.value); + // Field: axi_dma_reg.intr_block_rf.notif_global_intr_r.agg_sts + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.notif_global_intr_r.agg_sts.value; + load_next_c = '0; + + // HW Write + next_c = hwif_out.intr_block_rf.notif_internal_intr_r.intr; + load_next_c = '1; + field_combo.intr_block_rf.notif_global_intr_r.agg_sts.next = next_c; + field_combo.intr_block_rf.notif_global_intr_r.agg_sts.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.notif_global_intr_r.agg_sts.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_global_intr_r.agg_sts.load_next) begin + field_storage.intr_block_rf.notif_global_intr_r.agg_sts.value <= field_combo.intr_block_rf.notif_global_intr_r.agg_sts.next; + end + end + assign hwif_out.intr_block_rf.notif_global_intr_r.intr = + |(field_storage.intr_block_rf.notif_global_intr_r.agg_sts.value & field_storage.intr_block_rf.global_intr_en_r.notif_en.value); + // Field: axi_dma_reg.intr_block_rf.error_internal_intr_r.error_cmd_dec_sts + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_cmd_dec_sts.value; + load_next_c = '0; + if(field_storage.intr_block_rf.error_intr_trig_r.error_cmd_dec_trig.value != '0) begin // stickybit + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_cmd_dec_sts.value | field_storage.intr_block_rf.error_intr_trig_r.error_cmd_dec_trig.value; + load_next_c = '1; + end else if(hwif_in.intr_block_rf.error_internal_intr_r.error_cmd_dec_sts.hwset) begin // HW Set + next_c = '1; + load_next_c = '1; + end else if(decoded_reg_strb.intr_block_rf.error_internal_intr_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 clear + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_cmd_dec_sts.value & ~(decoded_wr_data[0:0] & decoded_wr_biten[0:0]); + load_next_c = '1; + end + field_combo.intr_block_rf.error_internal_intr_r.error_cmd_dec_sts.next = next_c; + field_combo.intr_block_rf.error_internal_intr_r.error_cmd_dec_sts.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_pwrgood) begin + if(~hwif_in.cptra_pwrgood) begin + field_storage.intr_block_rf.error_internal_intr_r.error_cmd_dec_sts.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_internal_intr_r.error_cmd_dec_sts.load_next) begin + field_storage.intr_block_rf.error_internal_intr_r.error_cmd_dec_sts.value <= field_combo.intr_block_rf.error_internal_intr_r.error_cmd_dec_sts.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_internal_intr_r.error_axi_rd_sts + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_axi_rd_sts.value; + load_next_c = '0; + if(field_storage.intr_block_rf.error_intr_trig_r.error_axi_rd_trig.value != '0) begin // stickybit + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_axi_rd_sts.value | field_storage.intr_block_rf.error_intr_trig_r.error_axi_rd_trig.value; + load_next_c = '1; + end else if(hwif_in.intr_block_rf.error_internal_intr_r.error_axi_rd_sts.hwset) begin // HW Set + next_c = '1; + load_next_c = '1; + end else if(decoded_reg_strb.intr_block_rf.error_internal_intr_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 clear + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_axi_rd_sts.value & ~(decoded_wr_data[1:1] & decoded_wr_biten[1:1]); + load_next_c = '1; + end + field_combo.intr_block_rf.error_internal_intr_r.error_axi_rd_sts.next = next_c; + field_combo.intr_block_rf.error_internal_intr_r.error_axi_rd_sts.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_pwrgood) begin + if(~hwif_in.cptra_pwrgood) begin + field_storage.intr_block_rf.error_internal_intr_r.error_axi_rd_sts.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_internal_intr_r.error_axi_rd_sts.load_next) begin + field_storage.intr_block_rf.error_internal_intr_r.error_axi_rd_sts.value <= field_combo.intr_block_rf.error_internal_intr_r.error_axi_rd_sts.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_internal_intr_r.error_axi_wr_sts + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_axi_wr_sts.value; + load_next_c = '0; + if(field_storage.intr_block_rf.error_intr_trig_r.error_axi_wr_trig.value != '0) begin // stickybit + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_axi_wr_sts.value | field_storage.intr_block_rf.error_intr_trig_r.error_axi_wr_trig.value; + load_next_c = '1; + end else if(hwif_in.intr_block_rf.error_internal_intr_r.error_axi_wr_sts.hwset) begin // HW Set + next_c = '1; + load_next_c = '1; + end else if(decoded_reg_strb.intr_block_rf.error_internal_intr_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 clear + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_axi_wr_sts.value & ~(decoded_wr_data[2:2] & decoded_wr_biten[2:2]); + load_next_c = '1; + end + field_combo.intr_block_rf.error_internal_intr_r.error_axi_wr_sts.next = next_c; + field_combo.intr_block_rf.error_internal_intr_r.error_axi_wr_sts.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_pwrgood) begin + if(~hwif_in.cptra_pwrgood) begin + field_storage.intr_block_rf.error_internal_intr_r.error_axi_wr_sts.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_internal_intr_r.error_axi_wr_sts.load_next) begin + field_storage.intr_block_rf.error_internal_intr_r.error_axi_wr_sts.value <= field_combo.intr_block_rf.error_internal_intr_r.error_axi_wr_sts.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_internal_intr_r.error_mbox_lock_sts + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_mbox_lock_sts.value; + load_next_c = '0; + if(field_storage.intr_block_rf.error_intr_trig_r.error_mbox_lock_trig.value != '0) begin // stickybit + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_mbox_lock_sts.value | field_storage.intr_block_rf.error_intr_trig_r.error_mbox_lock_trig.value; + load_next_c = '1; + end else if(hwif_in.intr_block_rf.error_internal_intr_r.error_mbox_lock_sts.hwset) begin // HW Set + next_c = '1; + load_next_c = '1; + end else if(decoded_reg_strb.intr_block_rf.error_internal_intr_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 clear + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_mbox_lock_sts.value & ~(decoded_wr_data[3:3] & decoded_wr_biten[3:3]); + load_next_c = '1; + end + field_combo.intr_block_rf.error_internal_intr_r.error_mbox_lock_sts.next = next_c; + field_combo.intr_block_rf.error_internal_intr_r.error_mbox_lock_sts.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_pwrgood) begin + if(~hwif_in.cptra_pwrgood) begin + field_storage.intr_block_rf.error_internal_intr_r.error_mbox_lock_sts.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_internal_intr_r.error_mbox_lock_sts.load_next) begin + field_storage.intr_block_rf.error_internal_intr_r.error_mbox_lock_sts.value <= field_combo.intr_block_rf.error_internal_intr_r.error_mbox_lock_sts.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_internal_intr_r.error_sha_lock_sts + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_sha_lock_sts.value; + load_next_c = '0; + if(field_storage.intr_block_rf.error_intr_trig_r.error_sha_lock_trig.value != '0) begin // stickybit + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_sha_lock_sts.value | field_storage.intr_block_rf.error_intr_trig_r.error_sha_lock_trig.value; + load_next_c = '1; + end else if(hwif_in.intr_block_rf.error_internal_intr_r.error_sha_lock_sts.hwset) begin // HW Set + next_c = '1; + load_next_c = '1; + end else if(decoded_reg_strb.intr_block_rf.error_internal_intr_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 clear + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_sha_lock_sts.value & ~(decoded_wr_data[4:4] & decoded_wr_biten[4:4]); + load_next_c = '1; + end + field_combo.intr_block_rf.error_internal_intr_r.error_sha_lock_sts.next = next_c; + field_combo.intr_block_rf.error_internal_intr_r.error_sha_lock_sts.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_pwrgood) begin + if(~hwif_in.cptra_pwrgood) begin + field_storage.intr_block_rf.error_internal_intr_r.error_sha_lock_sts.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_internal_intr_r.error_sha_lock_sts.load_next) begin + field_storage.intr_block_rf.error_internal_intr_r.error_sha_lock_sts.value <= field_combo.intr_block_rf.error_internal_intr_r.error_sha_lock_sts.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_internal_intr_r.error_rd_fifo_oflow_sts + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_rd_fifo_oflow_sts.value; + load_next_c = '0; + if(field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_oflow_trig.value != '0) begin // stickybit + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_rd_fifo_oflow_sts.value | field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_oflow_trig.value; + load_next_c = '1; + end else if(hwif_in.intr_block_rf.error_internal_intr_r.error_rd_fifo_oflow_sts.hwset) begin // HW Set + next_c = '1; + load_next_c = '1; + end else if(decoded_reg_strb.intr_block_rf.error_internal_intr_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 clear + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_rd_fifo_oflow_sts.value & ~(decoded_wr_data[5:5] & decoded_wr_biten[5:5]); + load_next_c = '1; + end + field_combo.intr_block_rf.error_internal_intr_r.error_rd_fifo_oflow_sts.next = next_c; + field_combo.intr_block_rf.error_internal_intr_r.error_rd_fifo_oflow_sts.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_pwrgood) begin + if(~hwif_in.cptra_pwrgood) begin + field_storage.intr_block_rf.error_internal_intr_r.error_rd_fifo_oflow_sts.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_internal_intr_r.error_rd_fifo_oflow_sts.load_next) begin + field_storage.intr_block_rf.error_internal_intr_r.error_rd_fifo_oflow_sts.value <= field_combo.intr_block_rf.error_internal_intr_r.error_rd_fifo_oflow_sts.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_internal_intr_r.error_rd_fifo_uflow_sts + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_rd_fifo_uflow_sts.value; + load_next_c = '0; + if(field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_uflow_trig.value != '0) begin // stickybit + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_rd_fifo_uflow_sts.value | field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_uflow_trig.value; + load_next_c = '1; + end else if(hwif_in.intr_block_rf.error_internal_intr_r.error_rd_fifo_uflow_sts.hwset) begin // HW Set + next_c = '1; + load_next_c = '1; + end else if(decoded_reg_strb.intr_block_rf.error_internal_intr_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 clear + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_rd_fifo_uflow_sts.value & ~(decoded_wr_data[6:6] & decoded_wr_biten[6:6]); + load_next_c = '1; + end + field_combo.intr_block_rf.error_internal_intr_r.error_rd_fifo_uflow_sts.next = next_c; + field_combo.intr_block_rf.error_internal_intr_r.error_rd_fifo_uflow_sts.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_pwrgood) begin + if(~hwif_in.cptra_pwrgood) begin + field_storage.intr_block_rf.error_internal_intr_r.error_rd_fifo_uflow_sts.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_internal_intr_r.error_rd_fifo_uflow_sts.load_next) begin + field_storage.intr_block_rf.error_internal_intr_r.error_rd_fifo_uflow_sts.value <= field_combo.intr_block_rf.error_internal_intr_r.error_rd_fifo_uflow_sts.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_internal_intr_r.error_wr_fifo_oflow_sts + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_wr_fifo_oflow_sts.value; + load_next_c = '0; + if(field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_oflow_trig.value != '0) begin // stickybit + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_wr_fifo_oflow_sts.value | field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_oflow_trig.value; + load_next_c = '1; + end else if(hwif_in.intr_block_rf.error_internal_intr_r.error_wr_fifo_oflow_sts.hwset) begin // HW Set + next_c = '1; + load_next_c = '1; + end else if(decoded_reg_strb.intr_block_rf.error_internal_intr_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 clear + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_wr_fifo_oflow_sts.value & ~(decoded_wr_data[7:7] & decoded_wr_biten[7:7]); + load_next_c = '1; + end + field_combo.intr_block_rf.error_internal_intr_r.error_wr_fifo_oflow_sts.next = next_c; + field_combo.intr_block_rf.error_internal_intr_r.error_wr_fifo_oflow_sts.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_pwrgood) begin + if(~hwif_in.cptra_pwrgood) begin + field_storage.intr_block_rf.error_internal_intr_r.error_wr_fifo_oflow_sts.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_internal_intr_r.error_wr_fifo_oflow_sts.load_next) begin + field_storage.intr_block_rf.error_internal_intr_r.error_wr_fifo_oflow_sts.value <= field_combo.intr_block_rf.error_internal_intr_r.error_wr_fifo_oflow_sts.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_internal_intr_r.error_wr_fifo_uflow_sts + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_wr_fifo_uflow_sts.value; + load_next_c = '0; + if(field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_uflow_trig.value != '0) begin // stickybit + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_wr_fifo_uflow_sts.value | field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_uflow_trig.value; + load_next_c = '1; + end else if(hwif_in.intr_block_rf.error_internal_intr_r.error_wr_fifo_uflow_sts.hwset) begin // HW Set + next_c = '1; + load_next_c = '1; + end else if(decoded_reg_strb.intr_block_rf.error_internal_intr_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 clear + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_wr_fifo_uflow_sts.value & ~(decoded_wr_data[8:8] & decoded_wr_biten[8:8]); + load_next_c = '1; + end + field_combo.intr_block_rf.error_internal_intr_r.error_wr_fifo_uflow_sts.next = next_c; + field_combo.intr_block_rf.error_internal_intr_r.error_wr_fifo_uflow_sts.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_pwrgood) begin + if(~hwif_in.cptra_pwrgood) begin + field_storage.intr_block_rf.error_internal_intr_r.error_wr_fifo_uflow_sts.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_internal_intr_r.error_wr_fifo_uflow_sts.load_next) begin + field_storage.intr_block_rf.error_internal_intr_r.error_wr_fifo_uflow_sts.value <= field_combo.intr_block_rf.error_internal_intr_r.error_wr_fifo_uflow_sts.next; + end + end + assign hwif_out.intr_block_rf.error_internal_intr_r.intr = + |(field_storage.intr_block_rf.error_internal_intr_r.error_cmd_dec_sts.value & field_storage.intr_block_rf.error_intr_en_r.error_cmd_dec_en.value) + || |(field_storage.intr_block_rf.error_internal_intr_r.error_axi_rd_sts.value & field_storage.intr_block_rf.error_intr_en_r.error_axi_rd_en.value) + || |(field_storage.intr_block_rf.error_internal_intr_r.error_axi_wr_sts.value & field_storage.intr_block_rf.error_intr_en_r.error_axi_wr_en.value) + || |(field_storage.intr_block_rf.error_internal_intr_r.error_mbox_lock_sts.value & field_storage.intr_block_rf.error_intr_en_r.error_mbox_lock_en.value) + || |(field_storage.intr_block_rf.error_internal_intr_r.error_sha_lock_sts.value & field_storage.intr_block_rf.error_intr_en_r.error_sha_lock_en.value) + || |(field_storage.intr_block_rf.error_internal_intr_r.error_rd_fifo_oflow_sts.value & field_storage.intr_block_rf.error_intr_en_r.error_rd_fifo_oflow_en.value) + || |(field_storage.intr_block_rf.error_internal_intr_r.error_rd_fifo_uflow_sts.value & field_storage.intr_block_rf.error_intr_en_r.error_rd_fifo_uflow_en.value) + || |(field_storage.intr_block_rf.error_internal_intr_r.error_wr_fifo_oflow_sts.value & field_storage.intr_block_rf.error_intr_en_r.error_wr_fifo_oflow_en.value) + || |(field_storage.intr_block_rf.error_internal_intr_r.error_wr_fifo_uflow_sts.value & field_storage.intr_block_rf.error_intr_en_r.error_wr_fifo_uflow_en.value); + // Field: axi_dma_reg.intr_block_rf.notif_internal_intr_r.notif_txn_done_sts + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_txn_done_sts.value; + load_next_c = '0; + if(field_storage.intr_block_rf.notif_intr_trig_r.notif_txn_done_trig.value != '0) begin // stickybit + next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_txn_done_sts.value | field_storage.intr_block_rf.notif_intr_trig_r.notif_txn_done_trig.value; + load_next_c = '1; + end else if(hwif_in.intr_block_rf.notif_internal_intr_r.notif_txn_done_sts.hwset) begin // HW Set + next_c = '1; + load_next_c = '1; + end else if(decoded_reg_strb.intr_block_rf.notif_internal_intr_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 clear + next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_txn_done_sts.value & ~(decoded_wr_data[0:0] & decoded_wr_biten[0:0]); + load_next_c = '1; + end + field_combo.intr_block_rf.notif_internal_intr_r.notif_txn_done_sts.next = next_c; + field_combo.intr_block_rf.notif_internal_intr_r.notif_txn_done_sts.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.notif_internal_intr_r.notif_txn_done_sts.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_internal_intr_r.notif_txn_done_sts.load_next) begin + field_storage.intr_block_rf.notif_internal_intr_r.notif_txn_done_sts.value <= field_combo.intr_block_rf.notif_internal_intr_r.notif_txn_done_sts.next; + end + end + // Field: axi_dma_reg.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_not_empty_sts + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_not_empty_sts.value; + load_next_c = '0; + if(field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_not_empty_trig.value != '0) begin // stickybit + next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_not_empty_sts.value | field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_not_empty_trig.value; + load_next_c = '1; + end else if(hwif_in.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_not_empty_sts.hwset) begin // HW Set + next_c = '1; + load_next_c = '1; + end else if(decoded_reg_strb.intr_block_rf.notif_internal_intr_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 clear + next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_not_empty_sts.value & ~(decoded_wr_data[1:1] & decoded_wr_biten[1:1]); + load_next_c = '1; + end + field_combo.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_not_empty_sts.next = next_c; + field_combo.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_not_empty_sts.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_not_empty_sts.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_not_empty_sts.load_next) begin + field_storage.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_not_empty_sts.value <= field_combo.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_not_empty_sts.next; + end + end + // Field: axi_dma_reg.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_full_sts + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_full_sts.value; + load_next_c = '0; + if(field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_full_trig.value != '0) begin // stickybit + next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_full_sts.value | field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_full_trig.value; + load_next_c = '1; + end else if(hwif_in.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_full_sts.hwset) begin // HW Set + next_c = '1; + load_next_c = '1; + end else if(decoded_reg_strb.intr_block_rf.notif_internal_intr_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 clear + next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_full_sts.value & ~(decoded_wr_data[2:2] & decoded_wr_biten[2:2]); + load_next_c = '1; + end + field_combo.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_full_sts.next = next_c; + field_combo.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_full_sts.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_full_sts.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_full_sts.load_next) begin + field_storage.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_full_sts.value <= field_combo.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_full_sts.next; + end + end + // Field: axi_dma_reg.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_not_full_sts + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_not_full_sts.value; + load_next_c = '0; + if(field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_not_full_trig.value != '0) begin // stickybit + next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_not_full_sts.value | field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_not_full_trig.value; + load_next_c = '1; + end else if(hwif_in.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_not_full_sts.hwset) begin // HW Set + next_c = '1; + load_next_c = '1; + end else if(decoded_reg_strb.intr_block_rf.notif_internal_intr_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 clear + next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_not_full_sts.value & ~(decoded_wr_data[3:3] & decoded_wr_biten[3:3]); + load_next_c = '1; + end + field_combo.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_not_full_sts.next = next_c; + field_combo.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_not_full_sts.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_not_full_sts.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_not_full_sts.load_next) begin + field_storage.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_not_full_sts.value <= field_combo.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_not_full_sts.next; + end + end + // Field: axi_dma_reg.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_empty_sts + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_empty_sts.value; + load_next_c = '0; + if(field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_empty_trig.value != '0) begin // stickybit + next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_empty_sts.value | field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_empty_trig.value; + load_next_c = '1; + end else if(hwif_in.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_empty_sts.hwset) begin // HW Set + next_c = '1; + load_next_c = '1; + end else if(decoded_reg_strb.intr_block_rf.notif_internal_intr_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 clear + next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_empty_sts.value & ~(decoded_wr_data[4:4] & decoded_wr_biten[4:4]); + load_next_c = '1; + end + field_combo.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_empty_sts.next = next_c; + field_combo.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_empty_sts.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_empty_sts.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_empty_sts.load_next) begin + field_storage.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_empty_sts.value <= field_combo.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_empty_sts.next; + end + end + assign hwif_out.intr_block_rf.notif_internal_intr_r.intr = + |(field_storage.intr_block_rf.notif_internal_intr_r.notif_txn_done_sts.value & field_storage.intr_block_rf.notif_intr_en_r.notif_txn_done_en.value) + || |(field_storage.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_not_empty_sts.value & field_storage.intr_block_rf.notif_intr_en_r.notif_rd_fifo_not_empty_en.value) + || |(field_storage.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_full_sts.value & field_storage.intr_block_rf.notif_intr_en_r.notif_rd_fifo_full_en.value) + || |(field_storage.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_not_full_sts.value & field_storage.intr_block_rf.notif_intr_en_r.notif_wr_fifo_not_full_en.value) + || |(field_storage.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_empty_sts.value & field_storage.intr_block_rf.notif_intr_en_r.notif_wr_fifo_empty_en.value); + // Field: axi_dma_reg.intr_block_rf.error_intr_trig_r.error_cmd_dec_trig + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_cmd_dec_trig.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.error_intr_trig_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 set + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_cmd_dec_trig.value | (decoded_wr_data[0:0] & decoded_wr_biten[0:0]); + load_next_c = '1; + end else begin // singlepulse clears back to 0 + next_c = '0; + load_next_c = '1; + end + field_combo.intr_block_rf.error_intr_trig_r.error_cmd_dec_trig.next = next_c; + field_combo.intr_block_rf.error_intr_trig_r.error_cmd_dec_trig.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.error_intr_trig_r.error_cmd_dec_trig.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_intr_trig_r.error_cmd_dec_trig.load_next) begin + field_storage.intr_block_rf.error_intr_trig_r.error_cmd_dec_trig.value <= field_combo.intr_block_rf.error_intr_trig_r.error_cmd_dec_trig.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_intr_trig_r.error_axi_rd_trig + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_axi_rd_trig.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.error_intr_trig_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 set + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_axi_rd_trig.value | (decoded_wr_data[1:1] & decoded_wr_biten[1:1]); + load_next_c = '1; + end else begin // singlepulse clears back to 0 + next_c = '0; + load_next_c = '1; + end + field_combo.intr_block_rf.error_intr_trig_r.error_axi_rd_trig.next = next_c; + field_combo.intr_block_rf.error_intr_trig_r.error_axi_rd_trig.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.error_intr_trig_r.error_axi_rd_trig.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_intr_trig_r.error_axi_rd_trig.load_next) begin + field_storage.intr_block_rf.error_intr_trig_r.error_axi_rd_trig.value <= field_combo.intr_block_rf.error_intr_trig_r.error_axi_rd_trig.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_intr_trig_r.error_axi_wr_trig + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_axi_wr_trig.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.error_intr_trig_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 set + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_axi_wr_trig.value | (decoded_wr_data[2:2] & decoded_wr_biten[2:2]); + load_next_c = '1; + end else begin // singlepulse clears back to 0 + next_c = '0; + load_next_c = '1; + end + field_combo.intr_block_rf.error_intr_trig_r.error_axi_wr_trig.next = next_c; + field_combo.intr_block_rf.error_intr_trig_r.error_axi_wr_trig.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.error_intr_trig_r.error_axi_wr_trig.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_intr_trig_r.error_axi_wr_trig.load_next) begin + field_storage.intr_block_rf.error_intr_trig_r.error_axi_wr_trig.value <= field_combo.intr_block_rf.error_intr_trig_r.error_axi_wr_trig.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_intr_trig_r.error_mbox_lock_trig + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_mbox_lock_trig.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.error_intr_trig_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 set + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_mbox_lock_trig.value | (decoded_wr_data[3:3] & decoded_wr_biten[3:3]); + load_next_c = '1; + end else begin // singlepulse clears back to 0 + next_c = '0; + load_next_c = '1; + end + field_combo.intr_block_rf.error_intr_trig_r.error_mbox_lock_trig.next = next_c; + field_combo.intr_block_rf.error_intr_trig_r.error_mbox_lock_trig.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.error_intr_trig_r.error_mbox_lock_trig.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_intr_trig_r.error_mbox_lock_trig.load_next) begin + field_storage.intr_block_rf.error_intr_trig_r.error_mbox_lock_trig.value <= field_combo.intr_block_rf.error_intr_trig_r.error_mbox_lock_trig.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_intr_trig_r.error_sha_lock_trig + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_sha_lock_trig.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.error_intr_trig_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 set + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_sha_lock_trig.value | (decoded_wr_data[4:4] & decoded_wr_biten[4:4]); + load_next_c = '1; + end else begin // singlepulse clears back to 0 + next_c = '0; + load_next_c = '1; + end + field_combo.intr_block_rf.error_intr_trig_r.error_sha_lock_trig.next = next_c; + field_combo.intr_block_rf.error_intr_trig_r.error_sha_lock_trig.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.error_intr_trig_r.error_sha_lock_trig.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_intr_trig_r.error_sha_lock_trig.load_next) begin + field_storage.intr_block_rf.error_intr_trig_r.error_sha_lock_trig.value <= field_combo.intr_block_rf.error_intr_trig_r.error_sha_lock_trig.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_intr_trig_r.error_rd_fifo_oflow_trig + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_oflow_trig.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.error_intr_trig_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 set + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_oflow_trig.value | (decoded_wr_data[5:5] & decoded_wr_biten[5:5]); + load_next_c = '1; + end else begin // singlepulse clears back to 0 + next_c = '0; + load_next_c = '1; + end + field_combo.intr_block_rf.error_intr_trig_r.error_rd_fifo_oflow_trig.next = next_c; + field_combo.intr_block_rf.error_intr_trig_r.error_rd_fifo_oflow_trig.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_oflow_trig.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_intr_trig_r.error_rd_fifo_oflow_trig.load_next) begin + field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_oflow_trig.value <= field_combo.intr_block_rf.error_intr_trig_r.error_rd_fifo_oflow_trig.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_intr_trig_r.error_rd_fifo_uflow_trig + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_uflow_trig.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.error_intr_trig_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 set + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_uflow_trig.value | (decoded_wr_data[6:6] & decoded_wr_biten[6:6]); + load_next_c = '1; + end else begin // singlepulse clears back to 0 + next_c = '0; + load_next_c = '1; + end + field_combo.intr_block_rf.error_intr_trig_r.error_rd_fifo_uflow_trig.next = next_c; + field_combo.intr_block_rf.error_intr_trig_r.error_rd_fifo_uflow_trig.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_uflow_trig.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_intr_trig_r.error_rd_fifo_uflow_trig.load_next) begin + field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_uflow_trig.value <= field_combo.intr_block_rf.error_intr_trig_r.error_rd_fifo_uflow_trig.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_intr_trig_r.error_wr_fifo_oflow_trig + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_oflow_trig.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.error_intr_trig_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 set + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_oflow_trig.value | (decoded_wr_data[7:7] & decoded_wr_biten[7:7]); + load_next_c = '1; + end else begin // singlepulse clears back to 0 + next_c = '0; + load_next_c = '1; + end + field_combo.intr_block_rf.error_intr_trig_r.error_wr_fifo_oflow_trig.next = next_c; + field_combo.intr_block_rf.error_intr_trig_r.error_wr_fifo_oflow_trig.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_oflow_trig.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_intr_trig_r.error_wr_fifo_oflow_trig.load_next) begin + field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_oflow_trig.value <= field_combo.intr_block_rf.error_intr_trig_r.error_wr_fifo_oflow_trig.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_intr_trig_r.error_wr_fifo_uflow_trig + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_uflow_trig.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.error_intr_trig_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 set + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_uflow_trig.value | (decoded_wr_data[8:8] & decoded_wr_biten[8:8]); + load_next_c = '1; + end else begin // singlepulse clears back to 0 + next_c = '0; + load_next_c = '1; + end + field_combo.intr_block_rf.error_intr_trig_r.error_wr_fifo_uflow_trig.next = next_c; + field_combo.intr_block_rf.error_intr_trig_r.error_wr_fifo_uflow_trig.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_uflow_trig.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_intr_trig_r.error_wr_fifo_uflow_trig.load_next) begin + field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_uflow_trig.value <= field_combo.intr_block_rf.error_intr_trig_r.error_wr_fifo_uflow_trig.next; + end + end + // Field: axi_dma_reg.intr_block_rf.notif_intr_trig_r.notif_txn_done_trig + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_txn_done_trig.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.notif_intr_trig_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 set + next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_txn_done_trig.value | (decoded_wr_data[0:0] & decoded_wr_biten[0:0]); + load_next_c = '1; + end else begin // singlepulse clears back to 0 + next_c = '0; + load_next_c = '1; + end + field_combo.intr_block_rf.notif_intr_trig_r.notif_txn_done_trig.next = next_c; + field_combo.intr_block_rf.notif_intr_trig_r.notif_txn_done_trig.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.notif_intr_trig_r.notif_txn_done_trig.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_intr_trig_r.notif_txn_done_trig.load_next) begin + field_storage.intr_block_rf.notif_intr_trig_r.notif_txn_done_trig.value <= field_combo.intr_block_rf.notif_intr_trig_r.notif_txn_done_trig.next; + end + end + // Field: axi_dma_reg.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_not_empty_trig + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_not_empty_trig.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.notif_intr_trig_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 set + next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_not_empty_trig.value | (decoded_wr_data[1:1] & decoded_wr_biten[1:1]); + load_next_c = '1; + end else begin // singlepulse clears back to 0 + next_c = '0; + load_next_c = '1; + end + field_combo.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_not_empty_trig.next = next_c; + field_combo.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_not_empty_trig.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_not_empty_trig.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_not_empty_trig.load_next) begin + field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_not_empty_trig.value <= field_combo.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_not_empty_trig.next; + end + end + // Field: axi_dma_reg.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_full_trig + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_full_trig.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.notif_intr_trig_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 set + next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_full_trig.value | (decoded_wr_data[2:2] & decoded_wr_biten[2:2]); + load_next_c = '1; + end else begin // singlepulse clears back to 0 + next_c = '0; + load_next_c = '1; + end + field_combo.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_full_trig.next = next_c; + field_combo.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_full_trig.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_full_trig.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_full_trig.load_next) begin + field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_full_trig.value <= field_combo.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_full_trig.next; + end + end + // Field: axi_dma_reg.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_not_full_trig + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_not_full_trig.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.notif_intr_trig_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 set + next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_not_full_trig.value | (decoded_wr_data[3:3] & decoded_wr_biten[3:3]); + load_next_c = '1; + end else begin // singlepulse clears back to 0 + next_c = '0; + load_next_c = '1; + end + field_combo.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_not_full_trig.next = next_c; + field_combo.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_not_full_trig.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_not_full_trig.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_not_full_trig.load_next) begin + field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_not_full_trig.value <= field_combo.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_not_full_trig.next; + end + end + // Field: axi_dma_reg.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_empty_trig + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_empty_trig.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.notif_intr_trig_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 set + next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_empty_trig.value | (decoded_wr_data[4:4] & decoded_wr_biten[4:4]); + load_next_c = '1; + end else begin // singlepulse clears back to 0 + next_c = '0; + load_next_c = '1; + end + field_combo.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_empty_trig.next = next_c; + field_combo.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_empty_trig.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_empty_trig.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_empty_trig.load_next) begin + field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_empty_trig.value <= field_combo.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_empty_trig.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_cmd_dec_intr_count_r.cnt + always_comb begin + automatic logic [31:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_cmd_dec_intr_count_r.cnt.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.error_cmd_dec_intr_count_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.error_cmd_dec_intr_count_r.cnt.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); + load_next_c = '1; + end + if(field_storage.intr_block_rf.error_cmd_dec_intr_count_incr_r.pulse.value) begin // increment + if(((33)'(next_c) + 32'h1) > 32'hffffffff) begin // up-counter saturated + next_c = 32'hffffffff; + end else begin + next_c = next_c + 32'h1; + end + load_next_c = '1; + end + field_combo.intr_block_rf.error_cmd_dec_intr_count_r.cnt.incrthreshold = (field_storage.intr_block_rf.error_cmd_dec_intr_count_r.cnt.value >= 32'hffffffff); + field_combo.intr_block_rf.error_cmd_dec_intr_count_r.cnt.incrsaturate = (field_storage.intr_block_rf.error_cmd_dec_intr_count_r.cnt.value >= 32'hffffffff); + if(next_c > 32'hffffffff) begin + next_c = 32'hffffffff; + load_next_c = '1; + end + field_combo.intr_block_rf.error_cmd_dec_intr_count_r.cnt.next = next_c; + field_combo.intr_block_rf.error_cmd_dec_intr_count_r.cnt.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_pwrgood) begin + if(~hwif_in.cptra_pwrgood) begin + field_storage.intr_block_rf.error_cmd_dec_intr_count_r.cnt.value <= 32'h0; + end else if(field_combo.intr_block_rf.error_cmd_dec_intr_count_r.cnt.load_next) begin + field_storage.intr_block_rf.error_cmd_dec_intr_count_r.cnt.value <= field_combo.intr_block_rf.error_cmd_dec_intr_count_r.cnt.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_axi_rd_intr_count_r.cnt + always_comb begin + automatic logic [31:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_axi_rd_intr_count_r.cnt.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.error_axi_rd_intr_count_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.error_axi_rd_intr_count_r.cnt.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); + load_next_c = '1; + end + if(field_storage.intr_block_rf.error_axi_rd_intr_count_incr_r.pulse.value) begin // increment + if(((33)'(next_c) + 32'h1) > 32'hffffffff) begin // up-counter saturated + next_c = 32'hffffffff; + end else begin + next_c = next_c + 32'h1; + end + load_next_c = '1; + end + field_combo.intr_block_rf.error_axi_rd_intr_count_r.cnt.incrthreshold = (field_storage.intr_block_rf.error_axi_rd_intr_count_r.cnt.value >= 32'hffffffff); + field_combo.intr_block_rf.error_axi_rd_intr_count_r.cnt.incrsaturate = (field_storage.intr_block_rf.error_axi_rd_intr_count_r.cnt.value >= 32'hffffffff); + if(next_c > 32'hffffffff) begin + next_c = 32'hffffffff; + load_next_c = '1; + end + field_combo.intr_block_rf.error_axi_rd_intr_count_r.cnt.next = next_c; + field_combo.intr_block_rf.error_axi_rd_intr_count_r.cnt.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_pwrgood) begin + if(~hwif_in.cptra_pwrgood) begin + field_storage.intr_block_rf.error_axi_rd_intr_count_r.cnt.value <= 32'h0; + end else if(field_combo.intr_block_rf.error_axi_rd_intr_count_r.cnt.load_next) begin + field_storage.intr_block_rf.error_axi_rd_intr_count_r.cnt.value <= field_combo.intr_block_rf.error_axi_rd_intr_count_r.cnt.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_axi_wr_intr_count_r.cnt + always_comb begin + automatic logic [31:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_axi_wr_intr_count_r.cnt.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.error_axi_wr_intr_count_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.error_axi_wr_intr_count_r.cnt.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); + load_next_c = '1; + end + if(field_storage.intr_block_rf.error_axi_wr_intr_count_incr_r.pulse.value) begin // increment + if(((33)'(next_c) + 32'h1) > 32'hffffffff) begin // up-counter saturated + next_c = 32'hffffffff; + end else begin + next_c = next_c + 32'h1; + end + load_next_c = '1; + end + field_combo.intr_block_rf.error_axi_wr_intr_count_r.cnt.incrthreshold = (field_storage.intr_block_rf.error_axi_wr_intr_count_r.cnt.value >= 32'hffffffff); + field_combo.intr_block_rf.error_axi_wr_intr_count_r.cnt.incrsaturate = (field_storage.intr_block_rf.error_axi_wr_intr_count_r.cnt.value >= 32'hffffffff); + if(next_c > 32'hffffffff) begin + next_c = 32'hffffffff; + load_next_c = '1; + end + field_combo.intr_block_rf.error_axi_wr_intr_count_r.cnt.next = next_c; + field_combo.intr_block_rf.error_axi_wr_intr_count_r.cnt.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_pwrgood) begin + if(~hwif_in.cptra_pwrgood) begin + field_storage.intr_block_rf.error_axi_wr_intr_count_r.cnt.value <= 32'h0; + end else if(field_combo.intr_block_rf.error_axi_wr_intr_count_r.cnt.load_next) begin + field_storage.intr_block_rf.error_axi_wr_intr_count_r.cnt.value <= field_combo.intr_block_rf.error_axi_wr_intr_count_r.cnt.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_mbox_lock_intr_count_r.cnt + always_comb begin + automatic logic [31:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_mbox_lock_intr_count_r.cnt.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.error_mbox_lock_intr_count_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.error_mbox_lock_intr_count_r.cnt.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); + load_next_c = '1; + end + if(field_storage.intr_block_rf.error_mbox_lock_intr_count_incr_r.pulse.value) begin // increment + if(((33)'(next_c) + 32'h1) > 32'hffffffff) begin // up-counter saturated + next_c = 32'hffffffff; + end else begin + next_c = next_c + 32'h1; + end + load_next_c = '1; + end + field_combo.intr_block_rf.error_mbox_lock_intr_count_r.cnt.incrthreshold = (field_storage.intr_block_rf.error_mbox_lock_intr_count_r.cnt.value >= 32'hffffffff); + field_combo.intr_block_rf.error_mbox_lock_intr_count_r.cnt.incrsaturate = (field_storage.intr_block_rf.error_mbox_lock_intr_count_r.cnt.value >= 32'hffffffff); + if(next_c > 32'hffffffff) begin + next_c = 32'hffffffff; + load_next_c = '1; + end + field_combo.intr_block_rf.error_mbox_lock_intr_count_r.cnt.next = next_c; + field_combo.intr_block_rf.error_mbox_lock_intr_count_r.cnt.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_pwrgood) begin + if(~hwif_in.cptra_pwrgood) begin + field_storage.intr_block_rf.error_mbox_lock_intr_count_r.cnt.value <= 32'h0; + end else if(field_combo.intr_block_rf.error_mbox_lock_intr_count_r.cnt.load_next) begin + field_storage.intr_block_rf.error_mbox_lock_intr_count_r.cnt.value <= field_combo.intr_block_rf.error_mbox_lock_intr_count_r.cnt.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_sha_lock_intr_count_r.cnt + always_comb begin + automatic logic [31:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_sha_lock_intr_count_r.cnt.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.error_sha_lock_intr_count_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.error_sha_lock_intr_count_r.cnt.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); + load_next_c = '1; + end + if(field_storage.intr_block_rf.error_sha_lock_intr_count_incr_r.pulse.value) begin // increment + if(((33)'(next_c) + 32'h1) > 32'hffffffff) begin // up-counter saturated + next_c = 32'hffffffff; + end else begin + next_c = next_c + 32'h1; + end + load_next_c = '1; + end + field_combo.intr_block_rf.error_sha_lock_intr_count_r.cnt.incrthreshold = (field_storage.intr_block_rf.error_sha_lock_intr_count_r.cnt.value >= 32'hffffffff); + field_combo.intr_block_rf.error_sha_lock_intr_count_r.cnt.incrsaturate = (field_storage.intr_block_rf.error_sha_lock_intr_count_r.cnt.value >= 32'hffffffff); + if(next_c > 32'hffffffff) begin + next_c = 32'hffffffff; + load_next_c = '1; + end + field_combo.intr_block_rf.error_sha_lock_intr_count_r.cnt.next = next_c; + field_combo.intr_block_rf.error_sha_lock_intr_count_r.cnt.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_pwrgood) begin + if(~hwif_in.cptra_pwrgood) begin + field_storage.intr_block_rf.error_sha_lock_intr_count_r.cnt.value <= 32'h0; + end else if(field_combo.intr_block_rf.error_sha_lock_intr_count_r.cnt.load_next) begin + field_storage.intr_block_rf.error_sha_lock_intr_count_r.cnt.value <= field_combo.intr_block_rf.error_sha_lock_intr_count_r.cnt.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_rd_fifo_oflow_intr_count_r.cnt + always_comb begin + automatic logic [31:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_rd_fifo_oflow_intr_count_r.cnt.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.error_rd_fifo_oflow_intr_count_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.error_rd_fifo_oflow_intr_count_r.cnt.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); + load_next_c = '1; + end + if(field_storage.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r.pulse.value) begin // increment + if(((33)'(next_c) + 32'h1) > 32'hffffffff) begin // up-counter saturated + next_c = 32'hffffffff; + end else begin + next_c = next_c + 32'h1; + end + load_next_c = '1; + end + field_combo.intr_block_rf.error_rd_fifo_oflow_intr_count_r.cnt.incrthreshold = (field_storage.intr_block_rf.error_rd_fifo_oflow_intr_count_r.cnt.value >= 32'hffffffff); + field_combo.intr_block_rf.error_rd_fifo_oflow_intr_count_r.cnt.incrsaturate = (field_storage.intr_block_rf.error_rd_fifo_oflow_intr_count_r.cnt.value >= 32'hffffffff); + if(next_c > 32'hffffffff) begin + next_c = 32'hffffffff; + load_next_c = '1; + end + field_combo.intr_block_rf.error_rd_fifo_oflow_intr_count_r.cnt.next = next_c; + field_combo.intr_block_rf.error_rd_fifo_oflow_intr_count_r.cnt.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_pwrgood) begin + if(~hwif_in.cptra_pwrgood) begin + field_storage.intr_block_rf.error_rd_fifo_oflow_intr_count_r.cnt.value <= 32'h0; + end else if(field_combo.intr_block_rf.error_rd_fifo_oflow_intr_count_r.cnt.load_next) begin + field_storage.intr_block_rf.error_rd_fifo_oflow_intr_count_r.cnt.value <= field_combo.intr_block_rf.error_rd_fifo_oflow_intr_count_r.cnt.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_rd_fifo_uflow_intr_count_r.cnt + always_comb begin + automatic logic [31:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_rd_fifo_uflow_intr_count_r.cnt.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.error_rd_fifo_uflow_intr_count_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.error_rd_fifo_uflow_intr_count_r.cnt.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); + load_next_c = '1; + end + if(field_storage.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r.pulse.value) begin // increment + if(((33)'(next_c) + 32'h1) > 32'hffffffff) begin // up-counter saturated + next_c = 32'hffffffff; + end else begin + next_c = next_c + 32'h1; + end + load_next_c = '1; + end + field_combo.intr_block_rf.error_rd_fifo_uflow_intr_count_r.cnt.incrthreshold = (field_storage.intr_block_rf.error_rd_fifo_uflow_intr_count_r.cnt.value >= 32'hffffffff); + field_combo.intr_block_rf.error_rd_fifo_uflow_intr_count_r.cnt.incrsaturate = (field_storage.intr_block_rf.error_rd_fifo_uflow_intr_count_r.cnt.value >= 32'hffffffff); + if(next_c > 32'hffffffff) begin + next_c = 32'hffffffff; + load_next_c = '1; + end + field_combo.intr_block_rf.error_rd_fifo_uflow_intr_count_r.cnt.next = next_c; + field_combo.intr_block_rf.error_rd_fifo_uflow_intr_count_r.cnt.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_pwrgood) begin + if(~hwif_in.cptra_pwrgood) begin + field_storage.intr_block_rf.error_rd_fifo_uflow_intr_count_r.cnt.value <= 32'h0; + end else if(field_combo.intr_block_rf.error_rd_fifo_uflow_intr_count_r.cnt.load_next) begin + field_storage.intr_block_rf.error_rd_fifo_uflow_intr_count_r.cnt.value <= field_combo.intr_block_rf.error_rd_fifo_uflow_intr_count_r.cnt.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_wr_fifo_oflow_intr_count_r.cnt + always_comb begin + automatic logic [31:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_wr_fifo_oflow_intr_count_r.cnt.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.error_wr_fifo_oflow_intr_count_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.error_wr_fifo_oflow_intr_count_r.cnt.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); + load_next_c = '1; + end + if(field_storage.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r.pulse.value) begin // increment + if(((33)'(next_c) + 32'h1) > 32'hffffffff) begin // up-counter saturated + next_c = 32'hffffffff; + end else begin + next_c = next_c + 32'h1; + end + load_next_c = '1; + end + field_combo.intr_block_rf.error_wr_fifo_oflow_intr_count_r.cnt.incrthreshold = (field_storage.intr_block_rf.error_wr_fifo_oflow_intr_count_r.cnt.value >= 32'hffffffff); + field_combo.intr_block_rf.error_wr_fifo_oflow_intr_count_r.cnt.incrsaturate = (field_storage.intr_block_rf.error_wr_fifo_oflow_intr_count_r.cnt.value >= 32'hffffffff); + if(next_c > 32'hffffffff) begin + next_c = 32'hffffffff; + load_next_c = '1; + end + field_combo.intr_block_rf.error_wr_fifo_oflow_intr_count_r.cnt.next = next_c; + field_combo.intr_block_rf.error_wr_fifo_oflow_intr_count_r.cnt.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_pwrgood) begin + if(~hwif_in.cptra_pwrgood) begin + field_storage.intr_block_rf.error_wr_fifo_oflow_intr_count_r.cnt.value <= 32'h0; + end else if(field_combo.intr_block_rf.error_wr_fifo_oflow_intr_count_r.cnt.load_next) begin + field_storage.intr_block_rf.error_wr_fifo_oflow_intr_count_r.cnt.value <= field_combo.intr_block_rf.error_wr_fifo_oflow_intr_count_r.cnt.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_wr_fifo_uflow_intr_count_r.cnt + always_comb begin + automatic logic [31:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_wr_fifo_uflow_intr_count_r.cnt.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.error_wr_fifo_uflow_intr_count_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.error_wr_fifo_uflow_intr_count_r.cnt.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); + load_next_c = '1; + end + if(field_storage.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r.pulse.value) begin // increment + if(((33)'(next_c) + 32'h1) > 32'hffffffff) begin // up-counter saturated + next_c = 32'hffffffff; + end else begin + next_c = next_c + 32'h1; + end + load_next_c = '1; + end + field_combo.intr_block_rf.error_wr_fifo_uflow_intr_count_r.cnt.incrthreshold = (field_storage.intr_block_rf.error_wr_fifo_uflow_intr_count_r.cnt.value >= 32'hffffffff); + field_combo.intr_block_rf.error_wr_fifo_uflow_intr_count_r.cnt.incrsaturate = (field_storage.intr_block_rf.error_wr_fifo_uflow_intr_count_r.cnt.value >= 32'hffffffff); + if(next_c > 32'hffffffff) begin + next_c = 32'hffffffff; + load_next_c = '1; + end + field_combo.intr_block_rf.error_wr_fifo_uflow_intr_count_r.cnt.next = next_c; + field_combo.intr_block_rf.error_wr_fifo_uflow_intr_count_r.cnt.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_pwrgood) begin + if(~hwif_in.cptra_pwrgood) begin + field_storage.intr_block_rf.error_wr_fifo_uflow_intr_count_r.cnt.value <= 32'h0; + end else if(field_combo.intr_block_rf.error_wr_fifo_uflow_intr_count_r.cnt.load_next) begin + field_storage.intr_block_rf.error_wr_fifo_uflow_intr_count_r.cnt.value <= field_combo.intr_block_rf.error_wr_fifo_uflow_intr_count_r.cnt.next; + end + end + // Field: axi_dma_reg.intr_block_rf.notif_txn_done_intr_count_r.cnt + always_comb begin + automatic logic [31:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.notif_txn_done_intr_count_r.cnt.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.notif_txn_done_intr_count_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.notif_txn_done_intr_count_r.cnt.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); + load_next_c = '1; + end + if(field_storage.intr_block_rf.notif_txn_done_intr_count_incr_r.pulse.value) begin // increment + if(((33)'(next_c) + 32'h1) > 32'hffffffff) begin // up-counter saturated + next_c = 32'hffffffff; + end else begin + next_c = next_c + 32'h1; + end + load_next_c = '1; + end + field_combo.intr_block_rf.notif_txn_done_intr_count_r.cnt.incrthreshold = (field_storage.intr_block_rf.notif_txn_done_intr_count_r.cnt.value >= 32'hffffffff); + field_combo.intr_block_rf.notif_txn_done_intr_count_r.cnt.incrsaturate = (field_storage.intr_block_rf.notif_txn_done_intr_count_r.cnt.value >= 32'hffffffff); + if(next_c > 32'hffffffff) begin + next_c = 32'hffffffff; + load_next_c = '1; + end + field_combo.intr_block_rf.notif_txn_done_intr_count_r.cnt.next = next_c; + field_combo.intr_block_rf.notif_txn_done_intr_count_r.cnt.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.notif_txn_done_intr_count_r.cnt.value <= 32'h0; + end else if(field_combo.intr_block_rf.notif_txn_done_intr_count_r.cnt.load_next) begin + field_storage.intr_block_rf.notif_txn_done_intr_count_r.cnt.value <= field_combo.intr_block_rf.notif_txn_done_intr_count_r.cnt.next; + end + end + // Field: axi_dma_reg.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r.cnt + always_comb begin + automatic logic [31:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r.cnt.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r.cnt.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); + load_next_c = '1; + end + if(field_storage.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r.pulse.value) begin // increment + if(((33)'(next_c) + 32'h1) > 32'hffffffff) begin // up-counter saturated + next_c = 32'hffffffff; + end else begin + next_c = next_c + 32'h1; + end + load_next_c = '1; + end + field_combo.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r.cnt.incrthreshold = (field_storage.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r.cnt.value >= 32'hffffffff); + field_combo.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r.cnt.incrsaturate = (field_storage.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r.cnt.value >= 32'hffffffff); + if(next_c > 32'hffffffff) begin + next_c = 32'hffffffff; + load_next_c = '1; + end + field_combo.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r.cnt.next = next_c; + field_combo.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r.cnt.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r.cnt.value <= 32'h0; + end else if(field_combo.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r.cnt.load_next) begin + field_storage.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r.cnt.value <= field_combo.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r.cnt.next; + end + end + // Field: axi_dma_reg.intr_block_rf.notif_rd_fifo_full_intr_count_r.cnt + always_comb begin + automatic logic [31:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.notif_rd_fifo_full_intr_count_r.cnt.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.notif_rd_fifo_full_intr_count_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.notif_rd_fifo_full_intr_count_r.cnt.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); + load_next_c = '1; + end + if(field_storage.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r.pulse.value) begin // increment + if(((33)'(next_c) + 32'h1) > 32'hffffffff) begin // up-counter saturated + next_c = 32'hffffffff; + end else begin + next_c = next_c + 32'h1; + end + load_next_c = '1; + end + field_combo.intr_block_rf.notif_rd_fifo_full_intr_count_r.cnt.incrthreshold = (field_storage.intr_block_rf.notif_rd_fifo_full_intr_count_r.cnt.value >= 32'hffffffff); + field_combo.intr_block_rf.notif_rd_fifo_full_intr_count_r.cnt.incrsaturate = (field_storage.intr_block_rf.notif_rd_fifo_full_intr_count_r.cnt.value >= 32'hffffffff); + if(next_c > 32'hffffffff) begin + next_c = 32'hffffffff; + load_next_c = '1; + end + field_combo.intr_block_rf.notif_rd_fifo_full_intr_count_r.cnt.next = next_c; + field_combo.intr_block_rf.notif_rd_fifo_full_intr_count_r.cnt.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.notif_rd_fifo_full_intr_count_r.cnt.value <= 32'h0; + end else if(field_combo.intr_block_rf.notif_rd_fifo_full_intr_count_r.cnt.load_next) begin + field_storage.intr_block_rf.notif_rd_fifo_full_intr_count_r.cnt.value <= field_combo.intr_block_rf.notif_rd_fifo_full_intr_count_r.cnt.next; + end + end + // Field: axi_dma_reg.intr_block_rf.notif_wr_fifo_not_full_intr_count_r.cnt + always_comb begin + automatic logic [31:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.notif_wr_fifo_not_full_intr_count_r.cnt.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.notif_wr_fifo_not_full_intr_count_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.notif_wr_fifo_not_full_intr_count_r.cnt.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); + load_next_c = '1; + end + if(field_storage.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r.pulse.value) begin // increment + if(((33)'(next_c) + 32'h1) > 32'hffffffff) begin // up-counter saturated + next_c = 32'hffffffff; + end else begin + next_c = next_c + 32'h1; + end + load_next_c = '1; + end + field_combo.intr_block_rf.notif_wr_fifo_not_full_intr_count_r.cnt.incrthreshold = (field_storage.intr_block_rf.notif_wr_fifo_not_full_intr_count_r.cnt.value >= 32'hffffffff); + field_combo.intr_block_rf.notif_wr_fifo_not_full_intr_count_r.cnt.incrsaturate = (field_storage.intr_block_rf.notif_wr_fifo_not_full_intr_count_r.cnt.value >= 32'hffffffff); + if(next_c > 32'hffffffff) begin + next_c = 32'hffffffff; + load_next_c = '1; + end + field_combo.intr_block_rf.notif_wr_fifo_not_full_intr_count_r.cnt.next = next_c; + field_combo.intr_block_rf.notif_wr_fifo_not_full_intr_count_r.cnt.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.notif_wr_fifo_not_full_intr_count_r.cnt.value <= 32'h0; + end else if(field_combo.intr_block_rf.notif_wr_fifo_not_full_intr_count_r.cnt.load_next) begin + field_storage.intr_block_rf.notif_wr_fifo_not_full_intr_count_r.cnt.value <= field_combo.intr_block_rf.notif_wr_fifo_not_full_intr_count_r.cnt.next; + end + end + // Field: axi_dma_reg.intr_block_rf.notif_wr_fifo_empty_intr_count_r.cnt + always_comb begin + automatic logic [31:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.notif_wr_fifo_empty_intr_count_r.cnt.value; + load_next_c = '0; + if(decoded_reg_strb.intr_block_rf.notif_wr_fifo_empty_intr_count_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.notif_wr_fifo_empty_intr_count_r.cnt.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); + load_next_c = '1; + end + if(field_storage.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r.pulse.value) begin // increment + if(((33)'(next_c) + 32'h1) > 32'hffffffff) begin // up-counter saturated + next_c = 32'hffffffff; + end else begin + next_c = next_c + 32'h1; + end + load_next_c = '1; + end + field_combo.intr_block_rf.notif_wr_fifo_empty_intr_count_r.cnt.incrthreshold = (field_storage.intr_block_rf.notif_wr_fifo_empty_intr_count_r.cnt.value >= 32'hffffffff); + field_combo.intr_block_rf.notif_wr_fifo_empty_intr_count_r.cnt.incrsaturate = (field_storage.intr_block_rf.notif_wr_fifo_empty_intr_count_r.cnt.value >= 32'hffffffff); + if(next_c > 32'hffffffff) begin + next_c = 32'hffffffff; + load_next_c = '1; + end + field_combo.intr_block_rf.notif_wr_fifo_empty_intr_count_r.cnt.next = next_c; + field_combo.intr_block_rf.notif_wr_fifo_empty_intr_count_r.cnt.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.notif_wr_fifo_empty_intr_count_r.cnt.value <= 32'h0; + end else if(field_combo.intr_block_rf.notif_wr_fifo_empty_intr_count_r.cnt.load_next) begin + field_storage.intr_block_rf.notif_wr_fifo_empty_intr_count_r.cnt.value <= field_combo.intr_block_rf.notif_wr_fifo_empty_intr_count_r.cnt.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_cmd_dec_intr_count_incr_r.pulse + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_cmd_dec_intr_count_incr_r.pulse.value; + load_next_c = '0; + if(field_storage.intr_block_rf.error_intr_trig_r.error_cmd_dec_trig.value) begin // HW Write - we + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_cmd_dec_trig.value; + load_next_c = '1; + end else if(hwif_in.intr_block_rf.error_internal_intr_r.error_cmd_dec_sts.hwset) begin // HW Set + next_c = '1; + load_next_c = '1; + end + if(field_storage.intr_block_rf.error_cmd_dec_intr_count_incr_r.pulse.value) begin // decrement + field_combo.intr_block_rf.error_cmd_dec_intr_count_incr_r.pulse.underflow = (next_c < (1'h1)); + next_c = next_c - 1'h1; + load_next_c = '1; + end else begin + field_combo.intr_block_rf.error_cmd_dec_intr_count_incr_r.pulse.underflow = '0; + end + field_combo.intr_block_rf.error_cmd_dec_intr_count_incr_r.pulse.decrthreshold = (field_storage.intr_block_rf.error_cmd_dec_intr_count_incr_r.pulse.value <= 1'd0); + field_combo.intr_block_rf.error_cmd_dec_intr_count_incr_r.pulse.next = next_c; + field_combo.intr_block_rf.error_cmd_dec_intr_count_incr_r.pulse.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.error_cmd_dec_intr_count_incr_r.pulse.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_cmd_dec_intr_count_incr_r.pulse.load_next) begin + field_storage.intr_block_rf.error_cmd_dec_intr_count_incr_r.pulse.value <= field_combo.intr_block_rf.error_cmd_dec_intr_count_incr_r.pulse.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_axi_rd_intr_count_incr_r.pulse + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_axi_rd_intr_count_incr_r.pulse.value; + load_next_c = '0; + if(field_storage.intr_block_rf.error_intr_trig_r.error_axi_rd_trig.value) begin // HW Write - we + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_axi_rd_trig.value; + load_next_c = '1; + end else if(hwif_in.intr_block_rf.error_internal_intr_r.error_axi_rd_sts.hwset) begin // HW Set + next_c = '1; + load_next_c = '1; + end + if(field_storage.intr_block_rf.error_axi_rd_intr_count_incr_r.pulse.value) begin // decrement + field_combo.intr_block_rf.error_axi_rd_intr_count_incr_r.pulse.underflow = (next_c < (1'h1)); + next_c = next_c - 1'h1; + load_next_c = '1; + end else begin + field_combo.intr_block_rf.error_axi_rd_intr_count_incr_r.pulse.underflow = '0; + end + field_combo.intr_block_rf.error_axi_rd_intr_count_incr_r.pulse.decrthreshold = (field_storage.intr_block_rf.error_axi_rd_intr_count_incr_r.pulse.value <= 1'd0); + field_combo.intr_block_rf.error_axi_rd_intr_count_incr_r.pulse.next = next_c; + field_combo.intr_block_rf.error_axi_rd_intr_count_incr_r.pulse.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.error_axi_rd_intr_count_incr_r.pulse.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_axi_rd_intr_count_incr_r.pulse.load_next) begin + field_storage.intr_block_rf.error_axi_rd_intr_count_incr_r.pulse.value <= field_combo.intr_block_rf.error_axi_rd_intr_count_incr_r.pulse.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_axi_wr_intr_count_incr_r.pulse + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_axi_wr_intr_count_incr_r.pulse.value; + load_next_c = '0; + if(field_storage.intr_block_rf.error_intr_trig_r.error_axi_wr_trig.value) begin // HW Write - we + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_axi_wr_trig.value; + load_next_c = '1; + end else if(hwif_in.intr_block_rf.error_internal_intr_r.error_axi_wr_sts.hwset) begin // HW Set + next_c = '1; + load_next_c = '1; + end + if(field_storage.intr_block_rf.error_axi_wr_intr_count_incr_r.pulse.value) begin // decrement + field_combo.intr_block_rf.error_axi_wr_intr_count_incr_r.pulse.underflow = (next_c < (1'h1)); + next_c = next_c - 1'h1; + load_next_c = '1; + end else begin + field_combo.intr_block_rf.error_axi_wr_intr_count_incr_r.pulse.underflow = '0; + end + field_combo.intr_block_rf.error_axi_wr_intr_count_incr_r.pulse.decrthreshold = (field_storage.intr_block_rf.error_axi_wr_intr_count_incr_r.pulse.value <= 1'd0); + field_combo.intr_block_rf.error_axi_wr_intr_count_incr_r.pulse.next = next_c; + field_combo.intr_block_rf.error_axi_wr_intr_count_incr_r.pulse.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.error_axi_wr_intr_count_incr_r.pulse.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_axi_wr_intr_count_incr_r.pulse.load_next) begin + field_storage.intr_block_rf.error_axi_wr_intr_count_incr_r.pulse.value <= field_combo.intr_block_rf.error_axi_wr_intr_count_incr_r.pulse.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_mbox_lock_intr_count_incr_r.pulse + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_mbox_lock_intr_count_incr_r.pulse.value; + load_next_c = '0; + if(field_storage.intr_block_rf.error_intr_trig_r.error_mbox_lock_trig.value) begin // HW Write - we + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_mbox_lock_trig.value; + load_next_c = '1; + end else if(hwif_in.intr_block_rf.error_internal_intr_r.error_mbox_lock_sts.hwset) begin // HW Set + next_c = '1; + load_next_c = '1; + end + if(field_storage.intr_block_rf.error_mbox_lock_intr_count_incr_r.pulse.value) begin // decrement + field_combo.intr_block_rf.error_mbox_lock_intr_count_incr_r.pulse.underflow = (next_c < (1'h1)); + next_c = next_c - 1'h1; + load_next_c = '1; + end else begin + field_combo.intr_block_rf.error_mbox_lock_intr_count_incr_r.pulse.underflow = '0; + end + field_combo.intr_block_rf.error_mbox_lock_intr_count_incr_r.pulse.decrthreshold = (field_storage.intr_block_rf.error_mbox_lock_intr_count_incr_r.pulse.value <= 1'd0); + field_combo.intr_block_rf.error_mbox_lock_intr_count_incr_r.pulse.next = next_c; + field_combo.intr_block_rf.error_mbox_lock_intr_count_incr_r.pulse.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.error_mbox_lock_intr_count_incr_r.pulse.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_mbox_lock_intr_count_incr_r.pulse.load_next) begin + field_storage.intr_block_rf.error_mbox_lock_intr_count_incr_r.pulse.value <= field_combo.intr_block_rf.error_mbox_lock_intr_count_incr_r.pulse.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_sha_lock_intr_count_incr_r.pulse + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_sha_lock_intr_count_incr_r.pulse.value; + load_next_c = '0; + if(field_storage.intr_block_rf.error_intr_trig_r.error_sha_lock_trig.value) begin // HW Write - we + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_sha_lock_trig.value; + load_next_c = '1; + end else if(hwif_in.intr_block_rf.error_internal_intr_r.error_sha_lock_sts.hwset) begin // HW Set + next_c = '1; + load_next_c = '1; + end + if(field_storage.intr_block_rf.error_sha_lock_intr_count_incr_r.pulse.value) begin // decrement + field_combo.intr_block_rf.error_sha_lock_intr_count_incr_r.pulse.underflow = (next_c < (1'h1)); + next_c = next_c - 1'h1; + load_next_c = '1; + end else begin + field_combo.intr_block_rf.error_sha_lock_intr_count_incr_r.pulse.underflow = '0; + end + field_combo.intr_block_rf.error_sha_lock_intr_count_incr_r.pulse.decrthreshold = (field_storage.intr_block_rf.error_sha_lock_intr_count_incr_r.pulse.value <= 1'd0); + field_combo.intr_block_rf.error_sha_lock_intr_count_incr_r.pulse.next = next_c; + field_combo.intr_block_rf.error_sha_lock_intr_count_incr_r.pulse.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.error_sha_lock_intr_count_incr_r.pulse.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_sha_lock_intr_count_incr_r.pulse.load_next) begin + field_storage.intr_block_rf.error_sha_lock_intr_count_incr_r.pulse.value <= field_combo.intr_block_rf.error_sha_lock_intr_count_incr_r.pulse.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r.pulse + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r.pulse.value; + load_next_c = '0; + if(field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_oflow_trig.value) begin // HW Write - we + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_oflow_trig.value; + load_next_c = '1; + end else if(hwif_in.intr_block_rf.error_internal_intr_r.error_rd_fifo_oflow_sts.hwset) begin // HW Set + next_c = '1; + load_next_c = '1; + end + if(field_storage.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r.pulse.value) begin // decrement + field_combo.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r.pulse.underflow = (next_c < (1'h1)); + next_c = next_c - 1'h1; + load_next_c = '1; + end else begin + field_combo.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r.pulse.underflow = '0; + end + field_combo.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r.pulse.decrthreshold = (field_storage.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r.pulse.value <= 1'd0); + field_combo.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r.pulse.next = next_c; + field_combo.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r.pulse.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r.pulse.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r.pulse.load_next) begin + field_storage.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r.pulse.value <= field_combo.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r.pulse.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r.pulse + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r.pulse.value; + load_next_c = '0; + if(field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_uflow_trig.value) begin // HW Write - we + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_uflow_trig.value; + load_next_c = '1; + end else if(hwif_in.intr_block_rf.error_internal_intr_r.error_rd_fifo_uflow_sts.hwset) begin // HW Set + next_c = '1; + load_next_c = '1; + end + if(field_storage.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r.pulse.value) begin // decrement + field_combo.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r.pulse.underflow = (next_c < (1'h1)); + next_c = next_c - 1'h1; + load_next_c = '1; + end else begin + field_combo.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r.pulse.underflow = '0; + end + field_combo.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r.pulse.decrthreshold = (field_storage.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r.pulse.value <= 1'd0); + field_combo.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r.pulse.next = next_c; + field_combo.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r.pulse.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r.pulse.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r.pulse.load_next) begin + field_storage.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r.pulse.value <= field_combo.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r.pulse.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r.pulse + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r.pulse.value; + load_next_c = '0; + if(field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_oflow_trig.value) begin // HW Write - we + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_oflow_trig.value; + load_next_c = '1; + end else if(hwif_in.intr_block_rf.error_internal_intr_r.error_wr_fifo_oflow_sts.hwset) begin // HW Set + next_c = '1; + load_next_c = '1; + end + if(field_storage.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r.pulse.value) begin // decrement + field_combo.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r.pulse.underflow = (next_c < (1'h1)); + next_c = next_c - 1'h1; + load_next_c = '1; + end else begin + field_combo.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r.pulse.underflow = '0; + end + field_combo.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r.pulse.decrthreshold = (field_storage.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r.pulse.value <= 1'd0); + field_combo.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r.pulse.next = next_c; + field_combo.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r.pulse.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r.pulse.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r.pulse.load_next) begin + field_storage.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r.pulse.value <= field_combo.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r.pulse.next; + end + end + // Field: axi_dma_reg.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r.pulse + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r.pulse.value; + load_next_c = '0; + if(field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_uflow_trig.value) begin // HW Write - we + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_uflow_trig.value; + load_next_c = '1; + end else if(hwif_in.intr_block_rf.error_internal_intr_r.error_wr_fifo_uflow_sts.hwset) begin // HW Set + next_c = '1; + load_next_c = '1; + end + if(field_storage.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r.pulse.value) begin // decrement + field_combo.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r.pulse.underflow = (next_c < (1'h1)); + next_c = next_c - 1'h1; + load_next_c = '1; + end else begin + field_combo.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r.pulse.underflow = '0; + end + field_combo.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r.pulse.decrthreshold = (field_storage.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r.pulse.value <= 1'd0); + field_combo.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r.pulse.next = next_c; + field_combo.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r.pulse.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r.pulse.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r.pulse.load_next) begin + field_storage.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r.pulse.value <= field_combo.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r.pulse.next; + end + end + // Field: axi_dma_reg.intr_block_rf.notif_txn_done_intr_count_incr_r.pulse + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.notif_txn_done_intr_count_incr_r.pulse.value; + load_next_c = '0; + if(field_storage.intr_block_rf.notif_intr_trig_r.notif_txn_done_trig.value) begin // HW Write - we + next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_txn_done_trig.value; + load_next_c = '1; + end else if(hwif_in.intr_block_rf.notif_internal_intr_r.notif_txn_done_sts.hwset) begin // HW Set + next_c = '1; + load_next_c = '1; + end + if(field_storage.intr_block_rf.notif_txn_done_intr_count_incr_r.pulse.value) begin // decrement + field_combo.intr_block_rf.notif_txn_done_intr_count_incr_r.pulse.underflow = (next_c < (1'h1)); + next_c = next_c - 1'h1; + load_next_c = '1; + end else begin + field_combo.intr_block_rf.notif_txn_done_intr_count_incr_r.pulse.underflow = '0; + end + field_combo.intr_block_rf.notif_txn_done_intr_count_incr_r.pulse.decrthreshold = (field_storage.intr_block_rf.notif_txn_done_intr_count_incr_r.pulse.value <= 1'd0); + field_combo.intr_block_rf.notif_txn_done_intr_count_incr_r.pulse.next = next_c; + field_combo.intr_block_rf.notif_txn_done_intr_count_incr_r.pulse.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.notif_txn_done_intr_count_incr_r.pulse.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_txn_done_intr_count_incr_r.pulse.load_next) begin + field_storage.intr_block_rf.notif_txn_done_intr_count_incr_r.pulse.value <= field_combo.intr_block_rf.notif_txn_done_intr_count_incr_r.pulse.next; + end + end + // Field: axi_dma_reg.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r.pulse + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r.pulse.value; + load_next_c = '0; + if(field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_not_empty_trig.value) begin // HW Write - we + next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_not_empty_trig.value; + load_next_c = '1; + end else if(hwif_in.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_not_empty_sts.hwset) begin // HW Set + next_c = '1; + load_next_c = '1; + end + if(field_storage.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r.pulse.value) begin // decrement + field_combo.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r.pulse.underflow = (next_c < (1'h1)); + next_c = next_c - 1'h1; + load_next_c = '1; + end else begin + field_combo.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r.pulse.underflow = '0; + end + field_combo.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r.pulse.decrthreshold = (field_storage.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r.pulse.value <= 1'd0); + field_combo.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r.pulse.next = next_c; + field_combo.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r.pulse.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r.pulse.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r.pulse.load_next) begin + field_storage.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r.pulse.value <= field_combo.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r.pulse.next; + end + end + // Field: axi_dma_reg.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r.pulse + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r.pulse.value; + load_next_c = '0; + if(field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_full_trig.value) begin // HW Write - we + next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_full_trig.value; + load_next_c = '1; + end else if(hwif_in.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_full_sts.hwset) begin // HW Set + next_c = '1; + load_next_c = '1; + end + if(field_storage.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r.pulse.value) begin // decrement + field_combo.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r.pulse.underflow = (next_c < (1'h1)); + next_c = next_c - 1'h1; + load_next_c = '1; + end else begin + field_combo.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r.pulse.underflow = '0; + end + field_combo.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r.pulse.decrthreshold = (field_storage.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r.pulse.value <= 1'd0); + field_combo.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r.pulse.next = next_c; + field_combo.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r.pulse.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r.pulse.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r.pulse.load_next) begin + field_storage.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r.pulse.value <= field_combo.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r.pulse.next; + end + end + // Field: axi_dma_reg.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r.pulse + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r.pulse.value; + load_next_c = '0; + if(field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_not_full_trig.value) begin // HW Write - we + next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_not_full_trig.value; + load_next_c = '1; + end else if(hwif_in.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_not_full_sts.hwset) begin // HW Set + next_c = '1; + load_next_c = '1; + end + if(field_storage.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r.pulse.value) begin // decrement + field_combo.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r.pulse.underflow = (next_c < (1'h1)); + next_c = next_c - 1'h1; + load_next_c = '1; + end else begin + field_combo.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r.pulse.underflow = '0; + end + field_combo.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r.pulse.decrthreshold = (field_storage.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r.pulse.value <= 1'd0); + field_combo.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r.pulse.next = next_c; + field_combo.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r.pulse.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r.pulse.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r.pulse.load_next) begin + field_storage.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r.pulse.value <= field_combo.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r.pulse.next; + end + end + // Field: axi_dma_reg.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r.pulse + always_comb begin + automatic logic [0:0] next_c; + automatic logic load_next_c; + next_c = field_storage.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r.pulse.value; + load_next_c = '0; + if(field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_empty_trig.value) begin // HW Write - we + next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_empty_trig.value; + load_next_c = '1; + end else if(hwif_in.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_empty_sts.hwset) begin // HW Set + next_c = '1; + load_next_c = '1; + end + if(field_storage.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r.pulse.value) begin // decrement + field_combo.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r.pulse.underflow = (next_c < (1'h1)); + next_c = next_c - 1'h1; + load_next_c = '1; + end else begin + field_combo.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r.pulse.underflow = '0; + end + field_combo.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r.pulse.decrthreshold = (field_storage.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r.pulse.value <= 1'd0); + field_combo.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r.pulse.next = next_c; + field_combo.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r.pulse.load_next = load_next_c; + end + always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin + if(~hwif_in.cptra_rst_b) begin + field_storage.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r.pulse.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r.pulse.load_next) begin + field_storage.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r.pulse.value <= field_combo.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r.pulse.next; + end + end + + //-------------------------------------------------------------------------- + // Write response + //-------------------------------------------------------------------------- + assign cpuif_wr_ack = decoded_req & decoded_req_is_wr; + // Writes are always granted with no error response + assign cpuif_wr_err = '0; + + //-------------------------------------------------------------------------- + // Readback + //-------------------------------------------------------------------------- + + logic readback_err; + logic readback_done; + logic [31:0] readback_data; + + // Assign readback values to a flattened array + logic [49-1:0][31:0] readback_array; + assign readback_array[0][31:0] = (decoded_reg_strb.id && !decoded_req_is_wr) ? 32'h67768068 : '0; + assign readback_array[1][31:0] = (decoded_reg_strb.cap && !decoded_req_is_wr) ? 32'h0 : '0; + assign readback_array[2][0:0] = (decoded_reg_strb.ctrl && !decoded_req_is_wr) ? field_storage.ctrl.go.value : '0; + assign readback_array[2][1:1] = (decoded_reg_strb.ctrl && !decoded_req_is_wr) ? field_storage.ctrl.flush.value : '0; + assign readback_array[2][15:2] = (decoded_reg_strb.ctrl && !decoded_req_is_wr) ? 14'h0 : '0; + assign readback_array[2][17:16] = (decoded_reg_strb.ctrl && !decoded_req_is_wr) ? field_storage.ctrl.rd_route.value : '0; + assign readback_array[2][19:18] = (decoded_reg_strb.ctrl && !decoded_req_is_wr) ? 2'h0 : '0; + assign readback_array[2][20:20] = (decoded_reg_strb.ctrl && !decoded_req_is_wr) ? field_storage.ctrl.rd_fixed.value : '0; + assign readback_array[2][23:21] = (decoded_reg_strb.ctrl && !decoded_req_is_wr) ? 3'h0 : '0; + assign readback_array[2][25:24] = (decoded_reg_strb.ctrl && !decoded_req_is_wr) ? field_storage.ctrl.wr_route.value : '0; + assign readback_array[2][27:26] = (decoded_reg_strb.ctrl && !decoded_req_is_wr) ? 2'h0 : '0; + assign readback_array[2][28:28] = (decoded_reg_strb.ctrl && !decoded_req_is_wr) ? field_storage.ctrl.wr_fixed.value : '0; + assign readback_array[2][31:29] = (decoded_reg_strb.ctrl && !decoded_req_is_wr) ? 3'h0 : '0; + assign readback_array[3][0:0] = (decoded_reg_strb.status0 && !decoded_req_is_wr) ? hwif_in.status0.busy.next : '0; + assign readback_array[3][1:1] = (decoded_reg_strb.status0 && !decoded_req_is_wr) ? hwif_in.status0.error.next : '0; + assign readback_array[3][15:2] = (decoded_reg_strb.status0 && !decoded_req_is_wr) ? 14'h0 : '0; + assign readback_array[3][18:16] = (decoded_reg_strb.status0 && !decoded_req_is_wr) ? field_storage.status0.axi_dma_fsm_ps.value : '0; + assign readback_array[3][31:19] = (decoded_reg_strb.status0 && !decoded_req_is_wr) ? 13'h0 : '0; + assign readback_array[4][31:0] = (decoded_reg_strb.status1 && !decoded_req_is_wr) ? hwif_in.status1.bytes_remaining.next : '0; + assign readback_array[5][31:0] = (decoded_reg_strb.src_addr_l && !decoded_req_is_wr) ? field_storage.src_addr_l.addr_l.value : '0; + assign readback_array[6][31:0] = (decoded_reg_strb.src_addr_h && !decoded_req_is_wr) ? field_storage.src_addr_h.addr_h.value : '0; + assign readback_array[7][31:0] = (decoded_reg_strb.dst_addr_l && !decoded_req_is_wr) ? field_storage.dst_addr_l.addr_l.value : '0; + assign readback_array[8][31:0] = (decoded_reg_strb.dst_addr_h && !decoded_req_is_wr) ? field_storage.dst_addr_h.addr_h.value : '0; + assign readback_array[9][31:0] = (decoded_reg_strb.byte_count && !decoded_req_is_wr) ? field_storage.byte_count.count.value : '0; + assign readback_array[10][11:0] = (decoded_reg_strb.block_size && !decoded_req_is_wr) ? field_storage.block_size.size.value : '0; + assign readback_array[10][31:12] = (decoded_reg_strb.block_size && !decoded_req_is_wr) ? 20'h0 : '0; + assign readback_array[11][31:0] = (decoded_reg_strb.read_data && !decoded_req_is_wr) ? hwif_in.read_data.rdata.next : '0; + assign readback_array[12][0:0] = (decoded_reg_strb.intr_block_rf.global_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.global_intr_en_r.error_en.value : '0; + assign readback_array[12][1:1] = (decoded_reg_strb.intr_block_rf.global_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.global_intr_en_r.notif_en.value : '0; + assign readback_array[12][31:2] = '0; + assign readback_array[13][0:0] = (decoded_reg_strb.intr_block_rf.error_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_en_r.error_cmd_dec_en.value : '0; + assign readback_array[13][1:1] = (decoded_reg_strb.intr_block_rf.error_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_en_r.error_axi_rd_en.value : '0; + assign readback_array[13][2:2] = (decoded_reg_strb.intr_block_rf.error_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_en_r.error_axi_wr_en.value : '0; + assign readback_array[13][3:3] = (decoded_reg_strb.intr_block_rf.error_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_en_r.error_mbox_lock_en.value : '0; + assign readback_array[13][4:4] = (decoded_reg_strb.intr_block_rf.error_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_en_r.error_sha_lock_en.value : '0; + assign readback_array[13][5:5] = (decoded_reg_strb.intr_block_rf.error_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_en_r.error_rd_fifo_oflow_en.value : '0; + assign readback_array[13][6:6] = (decoded_reg_strb.intr_block_rf.error_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_en_r.error_rd_fifo_uflow_en.value : '0; + assign readback_array[13][7:7] = (decoded_reg_strb.intr_block_rf.error_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_en_r.error_wr_fifo_oflow_en.value : '0; + assign readback_array[13][8:8] = (decoded_reg_strb.intr_block_rf.error_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_en_r.error_wr_fifo_uflow_en.value : '0; + assign readback_array[13][31:9] = '0; + assign readback_array[14][0:0] = (decoded_reg_strb.intr_block_rf.notif_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_intr_en_r.notif_txn_done_en.value : '0; + assign readback_array[14][1:1] = (decoded_reg_strb.intr_block_rf.notif_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_intr_en_r.notif_rd_fifo_not_empty_en.value : '0; + assign readback_array[14][2:2] = (decoded_reg_strb.intr_block_rf.notif_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_intr_en_r.notif_rd_fifo_full_en.value : '0; + assign readback_array[14][3:3] = (decoded_reg_strb.intr_block_rf.notif_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_intr_en_r.notif_wr_fifo_not_full_en.value : '0; + assign readback_array[14][4:4] = (decoded_reg_strb.intr_block_rf.notif_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_intr_en_r.notif_wr_fifo_empty_en.value : '0; + assign readback_array[14][31:5] = '0; + assign readback_array[15][0:0] = (decoded_reg_strb.intr_block_rf.error_global_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_global_intr_r.agg_sts.value : '0; + assign readback_array[15][31:1] = '0; + assign readback_array[16][0:0] = (decoded_reg_strb.intr_block_rf.notif_global_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_global_intr_r.agg_sts.value : '0; + assign readback_array[16][31:1] = '0; + assign readback_array[17][0:0] = (decoded_reg_strb.intr_block_rf.error_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_internal_intr_r.error_cmd_dec_sts.value : '0; + assign readback_array[17][1:1] = (decoded_reg_strb.intr_block_rf.error_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_internal_intr_r.error_axi_rd_sts.value : '0; + assign readback_array[17][2:2] = (decoded_reg_strb.intr_block_rf.error_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_internal_intr_r.error_axi_wr_sts.value : '0; + assign readback_array[17][3:3] = (decoded_reg_strb.intr_block_rf.error_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_internal_intr_r.error_mbox_lock_sts.value : '0; + assign readback_array[17][4:4] = (decoded_reg_strb.intr_block_rf.error_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_internal_intr_r.error_sha_lock_sts.value : '0; + assign readback_array[17][5:5] = (decoded_reg_strb.intr_block_rf.error_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_internal_intr_r.error_rd_fifo_oflow_sts.value : '0; + assign readback_array[17][6:6] = (decoded_reg_strb.intr_block_rf.error_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_internal_intr_r.error_rd_fifo_uflow_sts.value : '0; + assign readback_array[17][7:7] = (decoded_reg_strb.intr_block_rf.error_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_internal_intr_r.error_wr_fifo_oflow_sts.value : '0; + assign readback_array[17][8:8] = (decoded_reg_strb.intr_block_rf.error_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_internal_intr_r.error_wr_fifo_uflow_sts.value : '0; + assign readback_array[17][31:9] = '0; + assign readback_array[18][0:0] = (decoded_reg_strb.intr_block_rf.notif_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_internal_intr_r.notif_txn_done_sts.value : '0; + assign readback_array[18][1:1] = (decoded_reg_strb.intr_block_rf.notif_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_not_empty_sts.value : '0; + assign readback_array[18][2:2] = (decoded_reg_strb.intr_block_rf.notif_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_full_sts.value : '0; + assign readback_array[18][3:3] = (decoded_reg_strb.intr_block_rf.notif_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_not_full_sts.value : '0; + assign readback_array[18][4:4] = (decoded_reg_strb.intr_block_rf.notif_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_empty_sts.value : '0; + assign readback_array[18][31:5] = '0; + assign readback_array[19][0:0] = (decoded_reg_strb.intr_block_rf.error_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_trig_r.error_cmd_dec_trig.value : '0; + assign readback_array[19][1:1] = (decoded_reg_strb.intr_block_rf.error_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_trig_r.error_axi_rd_trig.value : '0; + assign readback_array[19][2:2] = (decoded_reg_strb.intr_block_rf.error_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_trig_r.error_axi_wr_trig.value : '0; + assign readback_array[19][3:3] = (decoded_reg_strb.intr_block_rf.error_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_trig_r.error_mbox_lock_trig.value : '0; + assign readback_array[19][4:4] = (decoded_reg_strb.intr_block_rf.error_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_trig_r.error_sha_lock_trig.value : '0; + assign readback_array[19][5:5] = (decoded_reg_strb.intr_block_rf.error_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_oflow_trig.value : '0; + assign readback_array[19][6:6] = (decoded_reg_strb.intr_block_rf.error_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_uflow_trig.value : '0; + assign readback_array[19][7:7] = (decoded_reg_strb.intr_block_rf.error_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_oflow_trig.value : '0; + assign readback_array[19][8:8] = (decoded_reg_strb.intr_block_rf.error_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_uflow_trig.value : '0; + assign readback_array[19][31:9] = '0; + assign readback_array[20][0:0] = (decoded_reg_strb.intr_block_rf.notif_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_intr_trig_r.notif_txn_done_trig.value : '0; + assign readback_array[20][1:1] = (decoded_reg_strb.intr_block_rf.notif_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_not_empty_trig.value : '0; + assign readback_array[20][2:2] = (decoded_reg_strb.intr_block_rf.notif_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_full_trig.value : '0; + assign readback_array[20][3:3] = (decoded_reg_strb.intr_block_rf.notif_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_not_full_trig.value : '0; + assign readback_array[20][4:4] = (decoded_reg_strb.intr_block_rf.notif_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_empty_trig.value : '0; + assign readback_array[20][31:5] = '0; + assign readback_array[21][31:0] = (decoded_reg_strb.intr_block_rf.error_cmd_dec_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_cmd_dec_intr_count_r.cnt.value : '0; + assign readback_array[22][31:0] = (decoded_reg_strb.intr_block_rf.error_axi_rd_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_axi_rd_intr_count_r.cnt.value : '0; + assign readback_array[23][31:0] = (decoded_reg_strb.intr_block_rf.error_axi_wr_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_axi_wr_intr_count_r.cnt.value : '0; + assign readback_array[24][31:0] = (decoded_reg_strb.intr_block_rf.error_mbox_lock_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_mbox_lock_intr_count_r.cnt.value : '0; + assign readback_array[25][31:0] = (decoded_reg_strb.intr_block_rf.error_sha_lock_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_sha_lock_intr_count_r.cnt.value : '0; + assign readback_array[26][31:0] = (decoded_reg_strb.intr_block_rf.error_rd_fifo_oflow_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_rd_fifo_oflow_intr_count_r.cnt.value : '0; + assign readback_array[27][31:0] = (decoded_reg_strb.intr_block_rf.error_rd_fifo_uflow_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_rd_fifo_uflow_intr_count_r.cnt.value : '0; + assign readback_array[28][31:0] = (decoded_reg_strb.intr_block_rf.error_wr_fifo_oflow_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_wr_fifo_oflow_intr_count_r.cnt.value : '0; + assign readback_array[29][31:0] = (decoded_reg_strb.intr_block_rf.error_wr_fifo_uflow_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_wr_fifo_uflow_intr_count_r.cnt.value : '0; + assign readback_array[30][31:0] = (decoded_reg_strb.intr_block_rf.notif_txn_done_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_txn_done_intr_count_r.cnt.value : '0; + assign readback_array[31][31:0] = (decoded_reg_strb.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r.cnt.value : '0; + assign readback_array[32][31:0] = (decoded_reg_strb.intr_block_rf.notif_rd_fifo_full_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_rd_fifo_full_intr_count_r.cnt.value : '0; + assign readback_array[33][31:0] = (decoded_reg_strb.intr_block_rf.notif_wr_fifo_not_full_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_wr_fifo_not_full_intr_count_r.cnt.value : '0; + assign readback_array[34][31:0] = (decoded_reg_strb.intr_block_rf.notif_wr_fifo_empty_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_wr_fifo_empty_intr_count_r.cnt.value : '0; + assign readback_array[35][0:0] = (decoded_reg_strb.intr_block_rf.error_cmd_dec_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_cmd_dec_intr_count_incr_r.pulse.value : '0; + assign readback_array[35][31:1] = '0; + assign readback_array[36][0:0] = (decoded_reg_strb.intr_block_rf.error_axi_rd_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_axi_rd_intr_count_incr_r.pulse.value : '0; + assign readback_array[36][31:1] = '0; + assign readback_array[37][0:0] = (decoded_reg_strb.intr_block_rf.error_axi_wr_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_axi_wr_intr_count_incr_r.pulse.value : '0; + assign readback_array[37][31:1] = '0; + assign readback_array[38][0:0] = (decoded_reg_strb.intr_block_rf.error_mbox_lock_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_mbox_lock_intr_count_incr_r.pulse.value : '0; + assign readback_array[38][31:1] = '0; + assign readback_array[39][0:0] = (decoded_reg_strb.intr_block_rf.error_sha_lock_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_sha_lock_intr_count_incr_r.pulse.value : '0; + assign readback_array[39][31:1] = '0; + assign readback_array[40][0:0] = (decoded_reg_strb.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r.pulse.value : '0; + assign readback_array[40][31:1] = '0; + assign readback_array[41][0:0] = (decoded_reg_strb.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r.pulse.value : '0; + assign readback_array[41][31:1] = '0; + assign readback_array[42][0:0] = (decoded_reg_strb.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r.pulse.value : '0; + assign readback_array[42][31:1] = '0; + assign readback_array[43][0:0] = (decoded_reg_strb.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r.pulse.value : '0; + assign readback_array[43][31:1] = '0; + assign readback_array[44][0:0] = (decoded_reg_strb.intr_block_rf.notif_txn_done_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_txn_done_intr_count_incr_r.pulse.value : '0; + assign readback_array[44][31:1] = '0; + assign readback_array[45][0:0] = (decoded_reg_strb.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r.pulse.value : '0; + assign readback_array[45][31:1] = '0; + assign readback_array[46][0:0] = (decoded_reg_strb.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r.pulse.value : '0; + assign readback_array[46][31:1] = '0; + assign readback_array[47][0:0] = (decoded_reg_strb.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r.pulse.value : '0; + assign readback_array[47][31:1] = '0; + assign readback_array[48][0:0] = (decoded_reg_strb.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r.pulse.value : '0; + assign readback_array[48][31:1] = '0; + + // Reduce the array + always_comb begin + automatic logic [31:0] readback_data_var; + readback_done = decoded_req & ~decoded_req_is_wr; + readback_err = '0; + readback_data_var = '0; + for(int i=0; i<49; i++) readback_data_var |= readback_array[i]; + readback_data = readback_data_var; + end + + assign cpuif_rd_ack = readback_done; + assign cpuif_rd_data = readback_data; + assign cpuif_rd_err = readback_err; + +`CALIPTRA_ASSERT_KNOWN(ERR_HWIF_IN, hwif_in, clk, !hwif_in.cptra_pwrgood) + +endmodule diff --git a/src/axi/rtl/axi_dma_reg_pkg.sv b/src/axi/rtl/axi_dma_reg_pkg.sv new file mode 100644 index 000000000..577419ac5 --- /dev/null +++ b/src/axi/rtl/axi_dma_reg_pkg.sv @@ -0,0 +1,311 @@ +// Generated by PeakRDL-regblock - A free and open-source SystemVerilog generator +// https://github.com/SystemRDL/PeakRDL-regblock + +package axi_dma_reg_pkg; + + localparam AXI_DMA_REG_DATA_WIDTH = 32; + localparam AXI_DMA_REG_MIN_ADDR_WIDTH = 12; + + typedef struct packed{ + logic hwclr; + } axi_dma_reg__ctrl__go__in_t; + + typedef struct packed{ + logic hwclr; + } axi_dma_reg__ctrl__flush__in_t; + + typedef struct packed{ + axi_dma_reg__ctrl__go__in_t go; + axi_dma_reg__ctrl__flush__in_t flush; + } axi_dma_reg__ctrl__in_t; + + typedef struct packed{ + logic next; + } axi_dma_reg__status0__busy__in_t; + + typedef struct packed{ + logic next; + } axi_dma_reg__status0__error__in_t; + + typedef struct packed{ + logic [2:0] next; + } axi_dma_reg__status0__axi_dma_fsm_ps__in_t; + + typedef struct packed{ + axi_dma_reg__status0__busy__in_t busy; + axi_dma_reg__status0__error__in_t error; + axi_dma_reg__status0__axi_dma_fsm_ps__in_t axi_dma_fsm_ps; + } axi_dma_reg__status0__in_t; + + typedef struct packed{ + logic [31:0] next; + } axi_dma_reg__status1__bytes_remaining__in_t; + + typedef struct packed{ + axi_dma_reg__status1__bytes_remaining__in_t bytes_remaining; + } axi_dma_reg__status1__in_t; + + typedef struct packed{ + logic [31:0] next; + } axi_dma_reg__read_data__rdata__in_t; + + typedef struct packed{ + axi_dma_reg__read_data__rdata__in_t rdata; + } axi_dma_reg__read_data__in_t; + + typedef struct packed{ + logic hwset; + } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_cmd_dec_sts_enable_3fe3f38e_next_81a41b0f_resetsignal_f7aac87a__in_t; + + typedef struct packed{ + logic hwset; + } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_axi_rd_sts_enable_ade70b75_next_9749130e_resetsignal_f7aac87a__in_t; + + typedef struct packed{ + logic hwset; + } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_axi_wr_sts_enable_8302157e_next_d030e286_resetsignal_f7aac87a__in_t; + + typedef struct packed{ + logic hwset; + } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_mbox_lock_sts_enable_2200d685_next_dd20251c_resetsignal_f7aac87a__in_t; + + typedef struct packed{ + logic hwset; + } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_sha_lock_sts_enable_b89b863e_next_78f72dee_resetsignal_f7aac87a__in_t; + + typedef struct packed{ + logic hwset; + } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_rd_fifo_oflow_sts_enable_ce444ebc_next_bc36181d_resetsignal_f7aac87a__in_t; + + typedef struct packed{ + logic hwset; + } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_rd_fifo_uflow_sts_enable_1cfda6c8_next_6d78e176_resetsignal_f7aac87a__in_t; + + typedef struct packed{ + logic hwset; + } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_wr_fifo_oflow_sts_enable_f9b14b09_next_cd655c82_resetsignal_f7aac87a__in_t; + + typedef struct packed{ + logic hwset; + } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_wr_fifo_uflow_sts_enable_1265d7e2_next_ab50794e_resetsignal_f7aac87a__in_t; + + typedef struct packed{ + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_cmd_dec_sts_enable_3fe3f38e_next_81a41b0f_resetsignal_f7aac87a__in_t error_cmd_dec_sts; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_axi_rd_sts_enable_ade70b75_next_9749130e_resetsignal_f7aac87a__in_t error_axi_rd_sts; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_axi_wr_sts_enable_8302157e_next_d030e286_resetsignal_f7aac87a__in_t error_axi_wr_sts; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_mbox_lock_sts_enable_2200d685_next_dd20251c_resetsignal_f7aac87a__in_t error_mbox_lock_sts; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_sha_lock_sts_enable_b89b863e_next_78f72dee_resetsignal_f7aac87a__in_t error_sha_lock_sts; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_rd_fifo_oflow_sts_enable_ce444ebc_next_bc36181d_resetsignal_f7aac87a__in_t error_rd_fifo_oflow_sts; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_rd_fifo_uflow_sts_enable_1cfda6c8_next_6d78e176_resetsignal_f7aac87a__in_t error_rd_fifo_uflow_sts; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_wr_fifo_oflow_sts_enable_f9b14b09_next_cd655c82_resetsignal_f7aac87a__in_t error_wr_fifo_oflow_sts; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_wr_fifo_uflow_sts_enable_1265d7e2_next_ab50794e_resetsignal_f7aac87a__in_t error_wr_fifo_uflow_sts; + } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__in_t; + + typedef struct packed{ + logic hwset; + } axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10__notif_txn_done_sts_enable_f3ace5c8_next_c04384c4__in_t; + + typedef struct packed{ + logic hwset; + } axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10__notif_rd_fifo_not_empty_sts_enable_0d482b41_next_74852373__in_t; + + typedef struct packed{ + logic hwset; + } axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10__notif_rd_fifo_full_sts_enable_c91f7bbe_next_e629e8b1__in_t; + + typedef struct packed{ + logic hwset; + } axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10__notif_wr_fifo_not_full_sts_enable_56408030_next_753c80ba__in_t; + + typedef struct packed{ + logic hwset; + } axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10__notif_wr_fifo_empty_sts_enable_8bb9d7c3_next_c3514c8e__in_t; + + typedef struct packed{ + axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10__notif_txn_done_sts_enable_f3ace5c8_next_c04384c4__in_t notif_txn_done_sts; + axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10__notif_rd_fifo_not_empty_sts_enable_0d482b41_next_74852373__in_t notif_rd_fifo_not_empty_sts; + axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10__notif_rd_fifo_full_sts_enable_c91f7bbe_next_e629e8b1__in_t notif_rd_fifo_full_sts; + axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10__notif_wr_fifo_not_full_sts_enable_56408030_next_753c80ba__in_t notif_wr_fifo_not_full_sts; + axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10__notif_wr_fifo_empty_sts_enable_8bb9d7c3_next_c3514c8e__in_t notif_wr_fifo_empty_sts; + } axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10__in_t; + + typedef struct packed{ + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__in_t error_internal_intr_r; + axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10__in_t notif_internal_intr_r; + } axi_dma_reg__intr_block_t__in_t; + + typedef struct packed{ + logic cptra_rst_b; + logic cptra_pwrgood; + logic soc_req; + axi_dma_reg__ctrl__in_t ctrl; + axi_dma_reg__status0__in_t status0; + axi_dma_reg__status1__in_t status1; + axi_dma_reg__read_data__in_t read_data; + axi_dma_reg__intr_block_t__in_t intr_block_rf; + } axi_dma_reg__in_t; + + typedef struct packed{ + logic value; + logic swmod; + } axi_dma_reg__ctrl__go__out_t; + + typedef struct packed{ + logic value; + } axi_dma_reg__ctrl__flush__out_t; + + typedef struct packed{ + logic [1:0] value; + } axi_dma_reg__ctrl__rd_route__out_t; + + typedef struct packed{ + logic value; + } axi_dma_reg__ctrl__rd_fixed__out_t; + + typedef struct packed{ + logic [1:0] value; + } axi_dma_reg__ctrl__wr_route__out_t; + + typedef struct packed{ + logic value; + } axi_dma_reg__ctrl__wr_fixed__out_t; + + typedef struct packed{ + axi_dma_reg__ctrl__go__out_t go; + axi_dma_reg__ctrl__flush__out_t flush; + axi_dma_reg__ctrl__rd_route__out_t rd_route; + axi_dma_reg__ctrl__rd_fixed__out_t rd_fixed; + axi_dma_reg__ctrl__wr_route__out_t wr_route; + axi_dma_reg__ctrl__wr_fixed__out_t wr_fixed; + } axi_dma_reg__ctrl__out_t; + + typedef struct packed{ + logic [2:0] value; + } axi_dma_reg__status0__axi_dma_fsm_ps__out_t; + + typedef struct packed{ + axi_dma_reg__status0__axi_dma_fsm_ps__out_t axi_dma_fsm_ps; + } axi_dma_reg__status0__out_t; + + typedef struct packed{ + logic [31:0] value; + } axi_dma_reg__src_addr_l__addr_l__out_t; + + typedef struct packed{ + axi_dma_reg__src_addr_l__addr_l__out_t addr_l; + } axi_dma_reg__src_addr_l__out_t; + + typedef struct packed{ + logic [31:0] value; + } axi_dma_reg__src_addr_h__addr_h__out_t; + + typedef struct packed{ + axi_dma_reg__src_addr_h__addr_h__out_t addr_h; + } axi_dma_reg__src_addr_h__out_t; + + typedef struct packed{ + logic [31:0] value; + } axi_dma_reg__dst_addr_l__addr_l__out_t; + + typedef struct packed{ + axi_dma_reg__dst_addr_l__addr_l__out_t addr_l; + } axi_dma_reg__dst_addr_l__out_t; + + typedef struct packed{ + logic [31:0] value; + } axi_dma_reg__dst_addr_h__addr_h__out_t; + + typedef struct packed{ + axi_dma_reg__dst_addr_h__addr_h__out_t addr_h; + } axi_dma_reg__dst_addr_h__out_t; + + typedef struct packed{ + logic [31:0] value; + } axi_dma_reg__byte_count__count__out_t; + + typedef struct packed{ + axi_dma_reg__byte_count__count__out_t count; + } axi_dma_reg__byte_count__out_t; + + typedef struct packed{ + logic [11:0] value; + } axi_dma_reg__block_size__size__out_t; + + typedef struct packed{ + axi_dma_reg__block_size__size__out_t size; + } axi_dma_reg__block_size__out_t; + + typedef struct packed{ + logic swmod; + } axi_dma_reg__write_data__wdata__out_t; + + typedef struct packed{ + axi_dma_reg__write_data__wdata__out_t wdata; + } axi_dma_reg__write_data__out_t; + + typedef struct packed{ + logic swacc; + } axi_dma_reg__read_data__rdata__out_t; + + typedef struct packed{ + axi_dma_reg__read_data__rdata__out_t rdata; + } axi_dma_reg__read_data__out_t; + + typedef struct packed{ + logic intr; + } axi_dma_reg__intr_block_t__global_intr_t_agg_sts_dd3dcf0a__out_t; + + typedef struct packed{ + logic intr; + } axi_dma_reg__intr_block_t__global_intr_t_agg_sts_e6399b4a__out_t; + + typedef struct packed{ + logic intr; + } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__out_t; + + typedef struct packed{ + logic intr; + } axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10__out_t; + + typedef struct packed{ + axi_dma_reg__intr_block_t__global_intr_t_agg_sts_dd3dcf0a__out_t error_global_intr_r; + axi_dma_reg__intr_block_t__global_intr_t_agg_sts_e6399b4a__out_t notif_global_intr_r; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__out_t error_internal_intr_r; + axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10__out_t notif_internal_intr_r; + } axi_dma_reg__intr_block_t__out_t; + + typedef struct packed{ + axi_dma_reg__ctrl__out_t ctrl; + axi_dma_reg__status0__out_t status0; + axi_dma_reg__src_addr_l__out_t src_addr_l; + axi_dma_reg__src_addr_h__out_t src_addr_h; + axi_dma_reg__dst_addr_l__out_t dst_addr_l; + axi_dma_reg__dst_addr_h__out_t dst_addr_h; + axi_dma_reg__byte_count__out_t byte_count; + axi_dma_reg__block_size__out_t block_size; + axi_dma_reg__write_data__out_t write_data; + axi_dma_reg__read_data__out_t read_data; + axi_dma_reg__intr_block_t__out_t intr_block_rf; + } axi_dma_reg__out_t; + + typedef enum logic [31:0] { + axi_dma_reg__ctrl__rd_route__rd_route_e__DISABLE = 'h0, + axi_dma_reg__ctrl__rd_route__rd_route_e__MBOX = 'h1, + axi_dma_reg__ctrl__rd_route__rd_route_e__AHB_FIFO = 'h2, + axi_dma_reg__ctrl__rd_route__rd_route_e__AXI_WR = 'h3 + } axi_dma_reg__ctrl__rd_route__rd_route_e_e; + + typedef enum logic [31:0] { + axi_dma_reg__ctrl__wr_route__wr_route_e__DISABLE = 'h0, + axi_dma_reg__ctrl__wr_route__wr_route_e__MBOX = 'h1, + axi_dma_reg__ctrl__wr_route__wr_route_e__AHB_FIFO = 'h2, + axi_dma_reg__ctrl__wr_route__wr_route_e__AXI_RD = 'h3 + } axi_dma_reg__ctrl__wr_route__wr_route_e_e; + + typedef enum logic [31:0] { + axi_dma_reg__status0__axi_dma_fsm_ps__axi_dma_fsm_e__DMA_IDLE = 'h0 + } axi_dma_reg__status0__axi_dma_fsm_ps__axi_dma_fsm_e_e; + + localparam AXI_DMA_REG_ADDR_WIDTH = 32'd12; + +endpackage \ No newline at end of file diff --git a/src/axi/rtl/axi_dma_reg_uvm.sv b/src/axi/rtl/axi_dma_reg_uvm.sv new file mode 100644 index 000000000..5b86d5f34 --- /dev/null +++ b/src/axi/rtl/axi_dma_reg_uvm.sv @@ -0,0 +1,2097 @@ + +// This file was autogenerated by PeakRDL-uvm +package axi_dma_reg_uvm; + `include "uvm_macros.svh" + import uvm_pkg::*; + `include "axi_dma_reg_covergroups.svh" + // Reg - axi_dma_reg::id + class axi_dma_reg__id extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__id_bit_cg id_bit_cg[32]; + axi_dma_reg__id_fld_cg fld_cg; + rand uvm_reg_field id; + + function new(string name = "axi_dma_reg__id"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.id = new("id"); + this.id.configure(this, 32, 0, "RO", 0, 'h67768068, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(id_bit_cg[bt]) id_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__id + + // Reg - axi_dma_reg::cap + class axi_dma_reg__cap extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__cap_bit_cg rsvd_bit_cg[32]; + axi_dma_reg__cap_fld_cg fld_cg; + rand uvm_reg_field rsvd; + + function new(string name = "axi_dma_reg__cap"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.rsvd = new("rsvd"); + this.rsvd.configure(this, 32, 0, "RO", 0, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(rsvd_bit_cg[bt]) rsvd_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__cap + + // Reg - axi_dma_reg::ctrl + class axi_dma_reg__ctrl extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__ctrl_bit_cg go_bit_cg[1]; + axi_dma_reg__ctrl_bit_cg flush_bit_cg[1]; + axi_dma_reg__ctrl_bit_cg rsvd0_bit_cg[14]; + axi_dma_reg__ctrl_bit_cg rd_route_bit_cg[2]; + axi_dma_reg__ctrl_bit_cg rsvd1_bit_cg[2]; + axi_dma_reg__ctrl_bit_cg rd_fixed_bit_cg[1]; + axi_dma_reg__ctrl_bit_cg rsvd2_bit_cg[3]; + axi_dma_reg__ctrl_bit_cg wr_route_bit_cg[2]; + axi_dma_reg__ctrl_bit_cg rsvd3_bit_cg[2]; + axi_dma_reg__ctrl_bit_cg wr_fixed_bit_cg[1]; + axi_dma_reg__ctrl_bit_cg rsvd4_bit_cg[3]; + axi_dma_reg__ctrl_fld_cg fld_cg; + rand uvm_reg_field go; + rand uvm_reg_field flush; + rand uvm_reg_field rsvd0; + rand uvm_reg_field rd_route; + rand uvm_reg_field rsvd1; + rand uvm_reg_field rd_fixed; + rand uvm_reg_field rsvd2; + rand uvm_reg_field wr_route; + rand uvm_reg_field rsvd3; + rand uvm_reg_field wr_fixed; + rand uvm_reg_field rsvd4; + + function new(string name = "axi_dma_reg__ctrl"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.go = new("go"); + this.go.configure(this, 1, 0, "W1S", 1, 'h0, 1, 1, 0); + this.flush = new("flush"); + this.flush.configure(this, 1, 1, "W1S", 1, 'h0, 1, 1, 0); + this.rsvd0 = new("rsvd0"); + this.rsvd0.configure(this, 14, 2, "RO", 0, 'h0, 1, 1, 0); + this.rd_route = new("rd_route"); + this.rd_route.configure(this, 2, 16, "RW", 0, 'h0, 1, 1, 0); + this.rsvd1 = new("rsvd1"); + this.rsvd1.configure(this, 2, 18, "RO", 0, 'h0, 1, 1, 0); + this.rd_fixed = new("rd_fixed"); + this.rd_fixed.configure(this, 1, 20, "RW", 0, 'h0, 1, 1, 0); + this.rsvd2 = new("rsvd2"); + this.rsvd2.configure(this, 3, 21, "RO", 0, 'h0, 1, 1, 0); + this.wr_route = new("wr_route"); + this.wr_route.configure(this, 2, 24, "RW", 0, 'h0, 1, 1, 0); + this.rsvd3 = new("rsvd3"); + this.rsvd3.configure(this, 2, 26, "RO", 0, 'h0, 1, 1, 0); + this.wr_fixed = new("wr_fixed"); + this.wr_fixed.configure(this, 1, 28, "RW", 0, 'h0, 1, 1, 0); + this.rsvd4 = new("rsvd4"); + this.rsvd4.configure(this, 3, 29, "RO", 0, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(go_bit_cg[bt]) go_bit_cg[bt] = new(); + foreach(flush_bit_cg[bt]) flush_bit_cg[bt] = new(); + foreach(rsvd0_bit_cg[bt]) rsvd0_bit_cg[bt] = new(); + foreach(rd_route_bit_cg[bt]) rd_route_bit_cg[bt] = new(); + foreach(rsvd1_bit_cg[bt]) rsvd1_bit_cg[bt] = new(); + foreach(rd_fixed_bit_cg[bt]) rd_fixed_bit_cg[bt] = new(); + foreach(rsvd2_bit_cg[bt]) rsvd2_bit_cg[bt] = new(); + foreach(wr_route_bit_cg[bt]) wr_route_bit_cg[bt] = new(); + foreach(rsvd3_bit_cg[bt]) rsvd3_bit_cg[bt] = new(); + foreach(wr_fixed_bit_cg[bt]) wr_fixed_bit_cg[bt] = new(); + foreach(rsvd4_bit_cg[bt]) rsvd4_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__ctrl + + // Reg - axi_dma_reg::status0 + class axi_dma_reg__status0 extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__status0_bit_cg busy_bit_cg[1]; + axi_dma_reg__status0_bit_cg error_bit_cg[1]; + axi_dma_reg__status0_bit_cg rsvd0_bit_cg[14]; + axi_dma_reg__status0_bit_cg axi_dma_fsm_ps_bit_cg[3]; + axi_dma_reg__status0_bit_cg rsvd1_bit_cg[13]; + axi_dma_reg__status0_fld_cg fld_cg; + rand uvm_reg_field busy; + rand uvm_reg_field error; + rand uvm_reg_field rsvd0; + rand uvm_reg_field axi_dma_fsm_ps; + rand uvm_reg_field rsvd1; + + function new(string name = "axi_dma_reg__status0"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.busy = new("busy"); + this.busy.configure(this, 1, 0, "RO", 1, 'h0, 1, 1, 0); + this.error = new("error"); + this.error.configure(this, 1, 1, "RO", 1, 'h0, 1, 1, 0); + this.rsvd0 = new("rsvd0"); + this.rsvd0.configure(this, 14, 2, "RO", 0, 'h0, 1, 1, 0); + this.axi_dma_fsm_ps = new("axi_dma_fsm_ps"); + this.axi_dma_fsm_ps.configure(this, 3, 16, "RO", 1, 'h0, 1, 1, 0); + this.rsvd1 = new("rsvd1"); + this.rsvd1.configure(this, 13, 19, "RO", 0, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(busy_bit_cg[bt]) busy_bit_cg[bt] = new(); + foreach(error_bit_cg[bt]) error_bit_cg[bt] = new(); + foreach(rsvd0_bit_cg[bt]) rsvd0_bit_cg[bt] = new(); + foreach(axi_dma_fsm_ps_bit_cg[bt]) axi_dma_fsm_ps_bit_cg[bt] = new(); + foreach(rsvd1_bit_cg[bt]) rsvd1_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__status0 + + // Reg - axi_dma_reg::status1 + class axi_dma_reg__status1 extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__status1_bit_cg bytes_remaining_bit_cg[32]; + axi_dma_reg__status1_fld_cg fld_cg; + rand uvm_reg_field bytes_remaining; + + function new(string name = "axi_dma_reg__status1"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.bytes_remaining = new("bytes_remaining"); + this.bytes_remaining.configure(this, 32, 0, "RO", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(bytes_remaining_bit_cg[bt]) bytes_remaining_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__status1 + + // Reg - axi_dma_reg::src_addr_l + class axi_dma_reg__src_addr_l extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__src_addr_l_bit_cg addr_l_bit_cg[32]; + axi_dma_reg__src_addr_l_fld_cg fld_cg; + rand uvm_reg_field addr_l; + + function new(string name = "axi_dma_reg__src_addr_l"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.addr_l = new("addr_l"); + this.addr_l.configure(this, 32, 0, "RW", 0, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(addr_l_bit_cg[bt]) addr_l_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__src_addr_l + + // Reg - axi_dma_reg::src_addr_h + class axi_dma_reg__src_addr_h extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__src_addr_h_bit_cg addr_h_bit_cg[32]; + axi_dma_reg__src_addr_h_fld_cg fld_cg; + rand uvm_reg_field addr_h; + + function new(string name = "axi_dma_reg__src_addr_h"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.addr_h = new("addr_h"); + this.addr_h.configure(this, 32, 0, "RW", 0, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(addr_h_bit_cg[bt]) addr_h_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__src_addr_h + + // Reg - axi_dma_reg::dst_addr_l + class axi_dma_reg__dst_addr_l extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__dst_addr_l_bit_cg addr_l_bit_cg[32]; + axi_dma_reg__dst_addr_l_fld_cg fld_cg; + rand uvm_reg_field addr_l; + + function new(string name = "axi_dma_reg__dst_addr_l"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.addr_l = new("addr_l"); + this.addr_l.configure(this, 32, 0, "RW", 0, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(addr_l_bit_cg[bt]) addr_l_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__dst_addr_l + + // Reg - axi_dma_reg::dst_addr_h + class axi_dma_reg__dst_addr_h extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__dst_addr_h_bit_cg addr_h_bit_cg[32]; + axi_dma_reg__dst_addr_h_fld_cg fld_cg; + rand uvm_reg_field addr_h; + + function new(string name = "axi_dma_reg__dst_addr_h"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.addr_h = new("addr_h"); + this.addr_h.configure(this, 32, 0, "RW", 0, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(addr_h_bit_cg[bt]) addr_h_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__dst_addr_h + + // Reg - axi_dma_reg::byte_count + class axi_dma_reg__byte_count extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__byte_count_bit_cg count_bit_cg[32]; + axi_dma_reg__byte_count_fld_cg fld_cg; + rand uvm_reg_field count; + + function new(string name = "axi_dma_reg__byte_count"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.count = new("count"); + this.count.configure(this, 32, 0, "RW", 0, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(count_bit_cg[bt]) count_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__byte_count + + // Reg - axi_dma_reg::block_size + class axi_dma_reg__block_size extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__block_size_bit_cg size_bit_cg[12]; + axi_dma_reg__block_size_bit_cg rsvd_bit_cg[20]; + axi_dma_reg__block_size_fld_cg fld_cg; + rand uvm_reg_field size; + rand uvm_reg_field rsvd; + + function new(string name = "axi_dma_reg__block_size"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.size = new("size"); + this.size.configure(this, 12, 0, "RW", 0, 'h0, 1, 1, 0); + this.rsvd = new("rsvd"); + this.rsvd.configure(this, 20, 12, "RO", 0, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(size_bit_cg[bt]) size_bit_cg[bt] = new(); + foreach(rsvd_bit_cg[bt]) rsvd_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__block_size + + // Reg - axi_dma_reg::write_data + class axi_dma_reg__write_data extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__write_data_bit_cg wdata_bit_cg[32]; + axi_dma_reg__write_data_fld_cg fld_cg; + rand uvm_reg_field wdata; + + function new(string name = "axi_dma_reg__write_data"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.wdata = new("wdata"); + this.wdata.configure(this, 32, 0, "WO", 0, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(wdata_bit_cg[bt]) wdata_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__write_data + + // Reg - axi_dma_reg::read_data + class axi_dma_reg__read_data extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__read_data_bit_cg rdata_bit_cg[32]; + axi_dma_reg__read_data_fld_cg fld_cg; + rand uvm_reg_field rdata; + + function new(string name = "axi_dma_reg__read_data"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.rdata = new("rdata"); + this.rdata.configure(this, 32, 0, "RO", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(rdata_bit_cg[bt]) rdata_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__read_data + + // Reg - axi_dma_reg::intr_block_t::global_intr_en_t + class axi_dma_reg__intr_block_t__global_intr_en_t extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__global_intr_en_t_bit_cg error_en_bit_cg[1]; + axi_dma_reg__intr_block_t__global_intr_en_t_bit_cg notif_en_bit_cg[1]; + axi_dma_reg__intr_block_t__global_intr_en_t_fld_cg fld_cg; + rand uvm_reg_field error_en; + rand uvm_reg_field notif_en; + + function new(string name = "axi_dma_reg__intr_block_t__global_intr_en_t"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.error_en = new("error_en"); + this.error_en.configure(this, 1, 0, "RW", 0, 'h0, 1, 1, 0); + this.notif_en = new("notif_en"); + this.notif_en.configure(this, 1, 1, "RW", 0, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(error_en_bit_cg[bt]) error_en_bit_cg[bt] = new(); + foreach(notif_en_bit_cg[bt]) notif_en_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__global_intr_en_t + + // Reg - axi_dma_reg::intr_block_t::error_intr_en_t + class axi_dma_reg__intr_block_t__error_intr_en_t extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__error_intr_en_t_bit_cg error_cmd_dec_en_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_en_t_bit_cg error_axi_rd_en_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_en_t_bit_cg error_axi_wr_en_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_en_t_bit_cg error_mbox_lock_en_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_en_t_bit_cg error_sha_lock_en_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_en_t_bit_cg error_rd_fifo_oflow_en_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_en_t_bit_cg error_rd_fifo_uflow_en_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_en_t_bit_cg error_wr_fifo_oflow_en_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_en_t_bit_cg error_wr_fifo_uflow_en_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_en_t_fld_cg fld_cg; + rand uvm_reg_field error_cmd_dec_en; + rand uvm_reg_field error_axi_rd_en; + rand uvm_reg_field error_axi_wr_en; + rand uvm_reg_field error_mbox_lock_en; + rand uvm_reg_field error_sha_lock_en; + rand uvm_reg_field error_rd_fifo_oflow_en; + rand uvm_reg_field error_rd_fifo_uflow_en; + rand uvm_reg_field error_wr_fifo_oflow_en; + rand uvm_reg_field error_wr_fifo_uflow_en; + + function new(string name = "axi_dma_reg__intr_block_t__error_intr_en_t"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.error_cmd_dec_en = new("error_cmd_dec_en"); + this.error_cmd_dec_en.configure(this, 1, 0, "RW", 0, 'h0, 1, 1, 0); + this.error_axi_rd_en = new("error_axi_rd_en"); + this.error_axi_rd_en.configure(this, 1, 1, "RW", 0, 'h0, 1, 1, 0); + this.error_axi_wr_en = new("error_axi_wr_en"); + this.error_axi_wr_en.configure(this, 1, 2, "RW", 0, 'h0, 1, 1, 0); + this.error_mbox_lock_en = new("error_mbox_lock_en"); + this.error_mbox_lock_en.configure(this, 1, 3, "RW", 0, 'h0, 1, 1, 0); + this.error_sha_lock_en = new("error_sha_lock_en"); + this.error_sha_lock_en.configure(this, 1, 4, "RW", 0, 'h0, 1, 1, 0); + this.error_rd_fifo_oflow_en = new("error_rd_fifo_oflow_en"); + this.error_rd_fifo_oflow_en.configure(this, 1, 5, "RW", 0, 'h0, 1, 1, 0); + this.error_rd_fifo_uflow_en = new("error_rd_fifo_uflow_en"); + this.error_rd_fifo_uflow_en.configure(this, 1, 6, "RW", 0, 'h0, 1, 1, 0); + this.error_wr_fifo_oflow_en = new("error_wr_fifo_oflow_en"); + this.error_wr_fifo_oflow_en.configure(this, 1, 7, "RW", 0, 'h0, 1, 1, 0); + this.error_wr_fifo_uflow_en = new("error_wr_fifo_uflow_en"); + this.error_wr_fifo_uflow_en.configure(this, 1, 8, "RW", 0, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(error_cmd_dec_en_bit_cg[bt]) error_cmd_dec_en_bit_cg[bt] = new(); + foreach(error_axi_rd_en_bit_cg[bt]) error_axi_rd_en_bit_cg[bt] = new(); + foreach(error_axi_wr_en_bit_cg[bt]) error_axi_wr_en_bit_cg[bt] = new(); + foreach(error_mbox_lock_en_bit_cg[bt]) error_mbox_lock_en_bit_cg[bt] = new(); + foreach(error_sha_lock_en_bit_cg[bt]) error_sha_lock_en_bit_cg[bt] = new(); + foreach(error_rd_fifo_oflow_en_bit_cg[bt]) error_rd_fifo_oflow_en_bit_cg[bt] = new(); + foreach(error_rd_fifo_uflow_en_bit_cg[bt]) error_rd_fifo_uflow_en_bit_cg[bt] = new(); + foreach(error_wr_fifo_oflow_en_bit_cg[bt]) error_wr_fifo_oflow_en_bit_cg[bt] = new(); + foreach(error_wr_fifo_uflow_en_bit_cg[bt]) error_wr_fifo_uflow_en_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__error_intr_en_t + + // Reg - axi_dma_reg::intr_block_t::notif_intr_en_t + class axi_dma_reg__intr_block_t__notif_intr_en_t extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__notif_intr_en_t_bit_cg notif_txn_done_en_bit_cg[1]; + axi_dma_reg__intr_block_t__notif_intr_en_t_bit_cg notif_rd_fifo_not_empty_en_bit_cg[1]; + axi_dma_reg__intr_block_t__notif_intr_en_t_bit_cg notif_rd_fifo_full_en_bit_cg[1]; + axi_dma_reg__intr_block_t__notif_intr_en_t_bit_cg notif_wr_fifo_not_full_en_bit_cg[1]; + axi_dma_reg__intr_block_t__notif_intr_en_t_bit_cg notif_wr_fifo_empty_en_bit_cg[1]; + axi_dma_reg__intr_block_t__notif_intr_en_t_fld_cg fld_cg; + rand uvm_reg_field notif_txn_done_en; + rand uvm_reg_field notif_rd_fifo_not_empty_en; + rand uvm_reg_field notif_rd_fifo_full_en; + rand uvm_reg_field notif_wr_fifo_not_full_en; + rand uvm_reg_field notif_wr_fifo_empty_en; + + function new(string name = "axi_dma_reg__intr_block_t__notif_intr_en_t"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.notif_txn_done_en = new("notif_txn_done_en"); + this.notif_txn_done_en.configure(this, 1, 0, "RW", 0, 'h0, 1, 1, 0); + this.notif_rd_fifo_not_empty_en = new("notif_rd_fifo_not_empty_en"); + this.notif_rd_fifo_not_empty_en.configure(this, 1, 1, "RW", 0, 'h0, 1, 1, 0); + this.notif_rd_fifo_full_en = new("notif_rd_fifo_full_en"); + this.notif_rd_fifo_full_en.configure(this, 1, 2, "RW", 0, 'h0, 1, 1, 0); + this.notif_wr_fifo_not_full_en = new("notif_wr_fifo_not_full_en"); + this.notif_wr_fifo_not_full_en.configure(this, 1, 3, "RW", 0, 'h0, 1, 1, 0); + this.notif_wr_fifo_empty_en = new("notif_wr_fifo_empty_en"); + this.notif_wr_fifo_empty_en.configure(this, 1, 4, "RW", 0, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(notif_txn_done_en_bit_cg[bt]) notif_txn_done_en_bit_cg[bt] = new(); + foreach(notif_rd_fifo_not_empty_en_bit_cg[bt]) notif_rd_fifo_not_empty_en_bit_cg[bt] = new(); + foreach(notif_rd_fifo_full_en_bit_cg[bt]) notif_rd_fifo_full_en_bit_cg[bt] = new(); + foreach(notif_wr_fifo_not_full_en_bit_cg[bt]) notif_wr_fifo_not_full_en_bit_cg[bt] = new(); + foreach(notif_wr_fifo_empty_en_bit_cg[bt]) notif_wr_fifo_empty_en_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__notif_intr_en_t + + // Reg - axi_dma_reg::intr_block_t::global_intr_t_agg_sts_dd3dcf0a + class axi_dma_reg__intr_block_t__global_intr_t_agg_sts_dd3dcf0a extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__global_intr_t_agg_sts_dd3dcf0a_bit_cg agg_sts_bit_cg[1]; + axi_dma_reg__intr_block_t__global_intr_t_agg_sts_dd3dcf0a_fld_cg fld_cg; + rand uvm_reg_field agg_sts; + + function new(string name = "axi_dma_reg__intr_block_t__global_intr_t_agg_sts_dd3dcf0a"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.agg_sts = new("agg_sts"); + this.agg_sts.configure(this, 1, 0, "RO", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(agg_sts_bit_cg[bt]) agg_sts_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__global_intr_t_agg_sts_dd3dcf0a + + // Reg - axi_dma_reg::intr_block_t::global_intr_t_agg_sts_e6399b4a + class axi_dma_reg__intr_block_t__global_intr_t_agg_sts_e6399b4a extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__global_intr_t_agg_sts_e6399b4a_bit_cg agg_sts_bit_cg[1]; + axi_dma_reg__intr_block_t__global_intr_t_agg_sts_e6399b4a_fld_cg fld_cg; + rand uvm_reg_field agg_sts; + + function new(string name = "axi_dma_reg__intr_block_t__global_intr_t_agg_sts_e6399b4a"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.agg_sts = new("agg_sts"); + this.agg_sts.configure(this, 1, 0, "RO", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(agg_sts_bit_cg[bt]) agg_sts_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__global_intr_t_agg_sts_e6399b4a + + // Reg - axi_dma_reg::intr_block_t::error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3 + class axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3 extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3_bit_cg error_cmd_dec_sts_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3_bit_cg error_axi_rd_sts_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3_bit_cg error_axi_wr_sts_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3_bit_cg error_mbox_lock_sts_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3_bit_cg error_sha_lock_sts_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3_bit_cg error_rd_fifo_oflow_sts_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3_bit_cg error_rd_fifo_uflow_sts_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3_bit_cg error_wr_fifo_oflow_sts_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3_bit_cg error_wr_fifo_uflow_sts_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3_fld_cg fld_cg; + rand uvm_reg_field error_cmd_dec_sts; + rand uvm_reg_field error_axi_rd_sts; + rand uvm_reg_field error_axi_wr_sts; + rand uvm_reg_field error_mbox_lock_sts; + rand uvm_reg_field error_sha_lock_sts; + rand uvm_reg_field error_rd_fifo_oflow_sts; + rand uvm_reg_field error_rd_fifo_uflow_sts; + rand uvm_reg_field error_wr_fifo_oflow_sts; + rand uvm_reg_field error_wr_fifo_uflow_sts; + + function new(string name = "axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.error_cmd_dec_sts = new("error_cmd_dec_sts"); + this.error_cmd_dec_sts.configure(this, 1, 0, "W1C", 1, 'h0, 1, 1, 0); + this.error_axi_rd_sts = new("error_axi_rd_sts"); + this.error_axi_rd_sts.configure(this, 1, 1, "W1C", 1, 'h0, 1, 1, 0); + this.error_axi_wr_sts = new("error_axi_wr_sts"); + this.error_axi_wr_sts.configure(this, 1, 2, "W1C", 1, 'h0, 1, 1, 0); + this.error_mbox_lock_sts = new("error_mbox_lock_sts"); + this.error_mbox_lock_sts.configure(this, 1, 3, "W1C", 1, 'h0, 1, 1, 0); + this.error_sha_lock_sts = new("error_sha_lock_sts"); + this.error_sha_lock_sts.configure(this, 1, 4, "W1C", 1, 'h0, 1, 1, 0); + this.error_rd_fifo_oflow_sts = new("error_rd_fifo_oflow_sts"); + this.error_rd_fifo_oflow_sts.configure(this, 1, 5, "W1C", 1, 'h0, 1, 1, 0); + this.error_rd_fifo_uflow_sts = new("error_rd_fifo_uflow_sts"); + this.error_rd_fifo_uflow_sts.configure(this, 1, 6, "W1C", 1, 'h0, 1, 1, 0); + this.error_wr_fifo_oflow_sts = new("error_wr_fifo_oflow_sts"); + this.error_wr_fifo_oflow_sts.configure(this, 1, 7, "W1C", 1, 'h0, 1, 1, 0); + this.error_wr_fifo_uflow_sts = new("error_wr_fifo_uflow_sts"); + this.error_wr_fifo_uflow_sts.configure(this, 1, 8, "W1C", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(error_cmd_dec_sts_bit_cg[bt]) error_cmd_dec_sts_bit_cg[bt] = new(); + foreach(error_axi_rd_sts_bit_cg[bt]) error_axi_rd_sts_bit_cg[bt] = new(); + foreach(error_axi_wr_sts_bit_cg[bt]) error_axi_wr_sts_bit_cg[bt] = new(); + foreach(error_mbox_lock_sts_bit_cg[bt]) error_mbox_lock_sts_bit_cg[bt] = new(); + foreach(error_sha_lock_sts_bit_cg[bt]) error_sha_lock_sts_bit_cg[bt] = new(); + foreach(error_rd_fifo_oflow_sts_bit_cg[bt]) error_rd_fifo_oflow_sts_bit_cg[bt] = new(); + foreach(error_rd_fifo_uflow_sts_bit_cg[bt]) error_rd_fifo_uflow_sts_bit_cg[bt] = new(); + foreach(error_wr_fifo_oflow_sts_bit_cg[bt]) error_wr_fifo_oflow_sts_bit_cg[bt] = new(); + foreach(error_wr_fifo_uflow_sts_bit_cg[bt]) error_wr_fifo_uflow_sts_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3 + + // Reg - axi_dma_reg::intr_block_t::notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10 + class axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10 extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10_bit_cg notif_txn_done_sts_bit_cg[1]; + axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10_bit_cg notif_rd_fifo_not_empty_sts_bit_cg[1]; + axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10_bit_cg notif_rd_fifo_full_sts_bit_cg[1]; + axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10_bit_cg notif_wr_fifo_not_full_sts_bit_cg[1]; + axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10_bit_cg notif_wr_fifo_empty_sts_bit_cg[1]; + axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10_fld_cg fld_cg; + rand uvm_reg_field notif_txn_done_sts; + rand uvm_reg_field notif_rd_fifo_not_empty_sts; + rand uvm_reg_field notif_rd_fifo_full_sts; + rand uvm_reg_field notif_wr_fifo_not_full_sts; + rand uvm_reg_field notif_wr_fifo_empty_sts; + + function new(string name = "axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.notif_txn_done_sts = new("notif_txn_done_sts"); + this.notif_txn_done_sts.configure(this, 1, 0, "W1C", 1, 'h0, 1, 1, 0); + this.notif_rd_fifo_not_empty_sts = new("notif_rd_fifo_not_empty_sts"); + this.notif_rd_fifo_not_empty_sts.configure(this, 1, 1, "W1C", 1, 'h0, 1, 1, 0); + this.notif_rd_fifo_full_sts = new("notif_rd_fifo_full_sts"); + this.notif_rd_fifo_full_sts.configure(this, 1, 2, "W1C", 1, 'h0, 1, 1, 0); + this.notif_wr_fifo_not_full_sts = new("notif_wr_fifo_not_full_sts"); + this.notif_wr_fifo_not_full_sts.configure(this, 1, 3, "W1C", 1, 'h0, 1, 1, 0); + this.notif_wr_fifo_empty_sts = new("notif_wr_fifo_empty_sts"); + this.notif_wr_fifo_empty_sts.configure(this, 1, 4, "W1C", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(notif_txn_done_sts_bit_cg[bt]) notif_txn_done_sts_bit_cg[bt] = new(); + foreach(notif_rd_fifo_not_empty_sts_bit_cg[bt]) notif_rd_fifo_not_empty_sts_bit_cg[bt] = new(); + foreach(notif_rd_fifo_full_sts_bit_cg[bt]) notif_rd_fifo_full_sts_bit_cg[bt] = new(); + foreach(notif_wr_fifo_not_full_sts_bit_cg[bt]) notif_wr_fifo_not_full_sts_bit_cg[bt] = new(); + foreach(notif_wr_fifo_empty_sts_bit_cg[bt]) notif_wr_fifo_empty_sts_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10 + + // Reg - axi_dma_reg::intr_block_t::error_intr_trig_t + class axi_dma_reg__intr_block_t__error_intr_trig_t extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__error_intr_trig_t_bit_cg error_cmd_dec_trig_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_trig_t_bit_cg error_axi_rd_trig_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_trig_t_bit_cg error_axi_wr_trig_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_trig_t_bit_cg error_mbox_lock_trig_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_trig_t_bit_cg error_sha_lock_trig_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_trig_t_bit_cg error_rd_fifo_oflow_trig_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_trig_t_bit_cg error_rd_fifo_uflow_trig_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_trig_t_bit_cg error_wr_fifo_oflow_trig_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_trig_t_bit_cg error_wr_fifo_uflow_trig_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_trig_t_fld_cg fld_cg; + rand uvm_reg_field error_cmd_dec_trig; + rand uvm_reg_field error_axi_rd_trig; + rand uvm_reg_field error_axi_wr_trig; + rand uvm_reg_field error_mbox_lock_trig; + rand uvm_reg_field error_sha_lock_trig; + rand uvm_reg_field error_rd_fifo_oflow_trig; + rand uvm_reg_field error_rd_fifo_uflow_trig; + rand uvm_reg_field error_wr_fifo_oflow_trig; + rand uvm_reg_field error_wr_fifo_uflow_trig; + + function new(string name = "axi_dma_reg__intr_block_t__error_intr_trig_t"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.error_cmd_dec_trig = new("error_cmd_dec_trig"); + this.error_cmd_dec_trig.configure(this, 1, 0, "W1S", 0, 'h0, 1, 1, 0); + this.error_axi_rd_trig = new("error_axi_rd_trig"); + this.error_axi_rd_trig.configure(this, 1, 1, "W1S", 0, 'h0, 1, 1, 0); + this.error_axi_wr_trig = new("error_axi_wr_trig"); + this.error_axi_wr_trig.configure(this, 1, 2, "W1S", 0, 'h0, 1, 1, 0); + this.error_mbox_lock_trig = new("error_mbox_lock_trig"); + this.error_mbox_lock_trig.configure(this, 1, 3, "W1S", 0, 'h0, 1, 1, 0); + this.error_sha_lock_trig = new("error_sha_lock_trig"); + this.error_sha_lock_trig.configure(this, 1, 4, "W1S", 0, 'h0, 1, 1, 0); + this.error_rd_fifo_oflow_trig = new("error_rd_fifo_oflow_trig"); + this.error_rd_fifo_oflow_trig.configure(this, 1, 5, "W1S", 0, 'h0, 1, 1, 0); + this.error_rd_fifo_uflow_trig = new("error_rd_fifo_uflow_trig"); + this.error_rd_fifo_uflow_trig.configure(this, 1, 6, "W1S", 0, 'h0, 1, 1, 0); + this.error_wr_fifo_oflow_trig = new("error_wr_fifo_oflow_trig"); + this.error_wr_fifo_oflow_trig.configure(this, 1, 7, "W1S", 0, 'h0, 1, 1, 0); + this.error_wr_fifo_uflow_trig = new("error_wr_fifo_uflow_trig"); + this.error_wr_fifo_uflow_trig.configure(this, 1, 8, "W1S", 0, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(error_cmd_dec_trig_bit_cg[bt]) error_cmd_dec_trig_bit_cg[bt] = new(); + foreach(error_axi_rd_trig_bit_cg[bt]) error_axi_rd_trig_bit_cg[bt] = new(); + foreach(error_axi_wr_trig_bit_cg[bt]) error_axi_wr_trig_bit_cg[bt] = new(); + foreach(error_mbox_lock_trig_bit_cg[bt]) error_mbox_lock_trig_bit_cg[bt] = new(); + foreach(error_sha_lock_trig_bit_cg[bt]) error_sha_lock_trig_bit_cg[bt] = new(); + foreach(error_rd_fifo_oflow_trig_bit_cg[bt]) error_rd_fifo_oflow_trig_bit_cg[bt] = new(); + foreach(error_rd_fifo_uflow_trig_bit_cg[bt]) error_rd_fifo_uflow_trig_bit_cg[bt] = new(); + foreach(error_wr_fifo_oflow_trig_bit_cg[bt]) error_wr_fifo_oflow_trig_bit_cg[bt] = new(); + foreach(error_wr_fifo_uflow_trig_bit_cg[bt]) error_wr_fifo_uflow_trig_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__error_intr_trig_t + + // Reg - axi_dma_reg::intr_block_t::notif_intr_trig_t + class axi_dma_reg__intr_block_t__notif_intr_trig_t extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__notif_intr_trig_t_bit_cg notif_txn_done_trig_bit_cg[1]; + axi_dma_reg__intr_block_t__notif_intr_trig_t_bit_cg notif_rd_fifo_not_empty_trig_bit_cg[1]; + axi_dma_reg__intr_block_t__notif_intr_trig_t_bit_cg notif_rd_fifo_full_trig_bit_cg[1]; + axi_dma_reg__intr_block_t__notif_intr_trig_t_bit_cg notif_wr_fifo_not_full_trig_bit_cg[1]; + axi_dma_reg__intr_block_t__notif_intr_trig_t_bit_cg notif_wr_fifo_empty_trig_bit_cg[1]; + axi_dma_reg__intr_block_t__notif_intr_trig_t_fld_cg fld_cg; + rand uvm_reg_field notif_txn_done_trig; + rand uvm_reg_field notif_rd_fifo_not_empty_trig; + rand uvm_reg_field notif_rd_fifo_full_trig; + rand uvm_reg_field notif_wr_fifo_not_full_trig; + rand uvm_reg_field notif_wr_fifo_empty_trig; + + function new(string name = "axi_dma_reg__intr_block_t__notif_intr_trig_t"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.notif_txn_done_trig = new("notif_txn_done_trig"); + this.notif_txn_done_trig.configure(this, 1, 0, "W1S", 0, 'h0, 1, 1, 0); + this.notif_rd_fifo_not_empty_trig = new("notif_rd_fifo_not_empty_trig"); + this.notif_rd_fifo_not_empty_trig.configure(this, 1, 1, "W1S", 0, 'h0, 1, 1, 0); + this.notif_rd_fifo_full_trig = new("notif_rd_fifo_full_trig"); + this.notif_rd_fifo_full_trig.configure(this, 1, 2, "W1S", 0, 'h0, 1, 1, 0); + this.notif_wr_fifo_not_full_trig = new("notif_wr_fifo_not_full_trig"); + this.notif_wr_fifo_not_full_trig.configure(this, 1, 3, "W1S", 0, 'h0, 1, 1, 0); + this.notif_wr_fifo_empty_trig = new("notif_wr_fifo_empty_trig"); + this.notif_wr_fifo_empty_trig.configure(this, 1, 4, "W1S", 0, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(notif_txn_done_trig_bit_cg[bt]) notif_txn_done_trig_bit_cg[bt] = new(); + foreach(notif_rd_fifo_not_empty_trig_bit_cg[bt]) notif_rd_fifo_not_empty_trig_bit_cg[bt] = new(); + foreach(notif_rd_fifo_full_trig_bit_cg[bt]) notif_rd_fifo_full_trig_bit_cg[bt] = new(); + foreach(notif_wr_fifo_not_full_trig_bit_cg[bt]) notif_wr_fifo_not_full_trig_bit_cg[bt] = new(); + foreach(notif_wr_fifo_empty_trig_bit_cg[bt]) notif_wr_fifo_empty_trig_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__notif_intr_trig_t + + // Reg - axi_dma_reg::intr_block_t::intr_count_t_cnt_fc5260b0 + class axi_dma_reg__intr_block_t__intr_count_t_cnt_fc5260b0 extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__intr_count_t_cnt_fc5260b0_bit_cg cnt_bit_cg[32]; + axi_dma_reg__intr_block_t__intr_count_t_cnt_fc5260b0_fld_cg fld_cg; + rand uvm_reg_field cnt; + + function new(string name = "axi_dma_reg__intr_block_t__intr_count_t_cnt_fc5260b0"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.cnt = new("cnt"); + this.cnt.configure(this, 32, 0, "RW", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(cnt_bit_cg[bt]) cnt_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__intr_count_t_cnt_fc5260b0 + + // Reg - axi_dma_reg::intr_block_t::intr_count_t_cnt_f6d7de6b + class axi_dma_reg__intr_block_t__intr_count_t_cnt_f6d7de6b extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__intr_count_t_cnt_f6d7de6b_bit_cg cnt_bit_cg[32]; + axi_dma_reg__intr_block_t__intr_count_t_cnt_f6d7de6b_fld_cg fld_cg; + rand uvm_reg_field cnt; + + function new(string name = "axi_dma_reg__intr_block_t__intr_count_t_cnt_f6d7de6b"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.cnt = new("cnt"); + this.cnt.configure(this, 32, 0, "RW", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(cnt_bit_cg[bt]) cnt_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__intr_count_t_cnt_f6d7de6b + + // Reg - axi_dma_reg::intr_block_t::intr_count_t_cnt_aba31562 + class axi_dma_reg__intr_block_t__intr_count_t_cnt_aba31562 extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__intr_count_t_cnt_aba31562_bit_cg cnt_bit_cg[32]; + axi_dma_reg__intr_block_t__intr_count_t_cnt_aba31562_fld_cg fld_cg; + rand uvm_reg_field cnt; + + function new(string name = "axi_dma_reg__intr_block_t__intr_count_t_cnt_aba31562"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.cnt = new("cnt"); + this.cnt.configure(this, 32, 0, "RW", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(cnt_bit_cg[bt]) cnt_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__intr_count_t_cnt_aba31562 + + // Reg - axi_dma_reg::intr_block_t::intr_count_t_cnt_f73463f1 + class axi_dma_reg__intr_block_t__intr_count_t_cnt_f73463f1 extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__intr_count_t_cnt_f73463f1_bit_cg cnt_bit_cg[32]; + axi_dma_reg__intr_block_t__intr_count_t_cnt_f73463f1_fld_cg fld_cg; + rand uvm_reg_field cnt; + + function new(string name = "axi_dma_reg__intr_block_t__intr_count_t_cnt_f73463f1"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.cnt = new("cnt"); + this.cnt.configure(this, 32, 0, "RW", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(cnt_bit_cg[bt]) cnt_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__intr_count_t_cnt_f73463f1 + + // Reg - axi_dma_reg::intr_block_t::intr_count_t_cnt_5381f2ed + class axi_dma_reg__intr_block_t__intr_count_t_cnt_5381f2ed extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__intr_count_t_cnt_5381f2ed_bit_cg cnt_bit_cg[32]; + axi_dma_reg__intr_block_t__intr_count_t_cnt_5381f2ed_fld_cg fld_cg; + rand uvm_reg_field cnt; + + function new(string name = "axi_dma_reg__intr_block_t__intr_count_t_cnt_5381f2ed"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.cnt = new("cnt"); + this.cnt.configure(this, 32, 0, "RW", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(cnt_bit_cg[bt]) cnt_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__intr_count_t_cnt_5381f2ed + + // Reg - axi_dma_reg::intr_block_t::intr_count_t_cnt_bf3b372e + class axi_dma_reg__intr_block_t__intr_count_t_cnt_bf3b372e extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__intr_count_t_cnt_bf3b372e_bit_cg cnt_bit_cg[32]; + axi_dma_reg__intr_block_t__intr_count_t_cnt_bf3b372e_fld_cg fld_cg; + rand uvm_reg_field cnt; + + function new(string name = "axi_dma_reg__intr_block_t__intr_count_t_cnt_bf3b372e"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.cnt = new("cnt"); + this.cnt.configure(this, 32, 0, "RW", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(cnt_bit_cg[bt]) cnt_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__intr_count_t_cnt_bf3b372e + + // Reg - axi_dma_reg::intr_block_t::intr_count_t_cnt_d56d6bb5 + class axi_dma_reg__intr_block_t__intr_count_t_cnt_d56d6bb5 extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__intr_count_t_cnt_d56d6bb5_bit_cg cnt_bit_cg[32]; + axi_dma_reg__intr_block_t__intr_count_t_cnt_d56d6bb5_fld_cg fld_cg; + rand uvm_reg_field cnt; + + function new(string name = "axi_dma_reg__intr_block_t__intr_count_t_cnt_d56d6bb5"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.cnt = new("cnt"); + this.cnt.configure(this, 32, 0, "RW", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(cnt_bit_cg[bt]) cnt_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__intr_count_t_cnt_d56d6bb5 + + // Reg - axi_dma_reg::intr_block_t::intr_count_t_cnt_b3a342c6 + class axi_dma_reg__intr_block_t__intr_count_t_cnt_b3a342c6 extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__intr_count_t_cnt_b3a342c6_bit_cg cnt_bit_cg[32]; + axi_dma_reg__intr_block_t__intr_count_t_cnt_b3a342c6_fld_cg fld_cg; + rand uvm_reg_field cnt; + + function new(string name = "axi_dma_reg__intr_block_t__intr_count_t_cnt_b3a342c6"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.cnt = new("cnt"); + this.cnt.configure(this, 32, 0, "RW", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(cnt_bit_cg[bt]) cnt_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__intr_count_t_cnt_b3a342c6 + + // Reg - axi_dma_reg::intr_block_t::intr_count_t_cnt_e089aabc + class axi_dma_reg__intr_block_t__intr_count_t_cnt_e089aabc extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__intr_count_t_cnt_e089aabc_bit_cg cnt_bit_cg[32]; + axi_dma_reg__intr_block_t__intr_count_t_cnt_e089aabc_fld_cg fld_cg; + rand uvm_reg_field cnt; + + function new(string name = "axi_dma_reg__intr_block_t__intr_count_t_cnt_e089aabc"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.cnt = new("cnt"); + this.cnt.configure(this, 32, 0, "RW", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(cnt_bit_cg[bt]) cnt_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__intr_count_t_cnt_e089aabc + + // Reg - axi_dma_reg::intr_block_t::intr_count_t_cnt_61104c6c + class axi_dma_reg__intr_block_t__intr_count_t_cnt_61104c6c extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__intr_count_t_cnt_61104c6c_bit_cg cnt_bit_cg[32]; + axi_dma_reg__intr_block_t__intr_count_t_cnt_61104c6c_fld_cg fld_cg; + rand uvm_reg_field cnt; + + function new(string name = "axi_dma_reg__intr_block_t__intr_count_t_cnt_61104c6c"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.cnt = new("cnt"); + this.cnt.configure(this, 32, 0, "RW", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(cnt_bit_cg[bt]) cnt_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__intr_count_t_cnt_61104c6c + + // Reg - axi_dma_reg::intr_block_t::intr_count_t_cnt_ae7cbc55 + class axi_dma_reg__intr_block_t__intr_count_t_cnt_ae7cbc55 extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__intr_count_t_cnt_ae7cbc55_bit_cg cnt_bit_cg[32]; + axi_dma_reg__intr_block_t__intr_count_t_cnt_ae7cbc55_fld_cg fld_cg; + rand uvm_reg_field cnt; + + function new(string name = "axi_dma_reg__intr_block_t__intr_count_t_cnt_ae7cbc55"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.cnt = new("cnt"); + this.cnt.configure(this, 32, 0, "RW", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(cnt_bit_cg[bt]) cnt_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__intr_count_t_cnt_ae7cbc55 + + // Reg - axi_dma_reg::intr_block_t::intr_count_t_cnt_d7a2207c + class axi_dma_reg__intr_block_t__intr_count_t_cnt_d7a2207c extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__intr_count_t_cnt_d7a2207c_bit_cg cnt_bit_cg[32]; + axi_dma_reg__intr_block_t__intr_count_t_cnt_d7a2207c_fld_cg fld_cg; + rand uvm_reg_field cnt; + + function new(string name = "axi_dma_reg__intr_block_t__intr_count_t_cnt_d7a2207c"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.cnt = new("cnt"); + this.cnt.configure(this, 32, 0, "RW", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(cnt_bit_cg[bt]) cnt_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__intr_count_t_cnt_d7a2207c + + // Reg - axi_dma_reg::intr_block_t::intr_count_t_cnt_011d9dd4 + class axi_dma_reg__intr_block_t__intr_count_t_cnt_011d9dd4 extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__intr_count_t_cnt_011d9dd4_bit_cg cnt_bit_cg[32]; + axi_dma_reg__intr_block_t__intr_count_t_cnt_011d9dd4_fld_cg fld_cg; + rand uvm_reg_field cnt; + + function new(string name = "axi_dma_reg__intr_block_t__intr_count_t_cnt_011d9dd4"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.cnt = new("cnt"); + this.cnt.configure(this, 32, 0, "RW", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(cnt_bit_cg[bt]) cnt_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__intr_count_t_cnt_011d9dd4 + + // Reg - axi_dma_reg::intr_block_t::intr_count_t_cnt_3c016e63 + class axi_dma_reg__intr_block_t__intr_count_t_cnt_3c016e63 extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__intr_count_t_cnt_3c016e63_bit_cg cnt_bit_cg[32]; + axi_dma_reg__intr_block_t__intr_count_t_cnt_3c016e63_fld_cg fld_cg; + rand uvm_reg_field cnt; + + function new(string name = "axi_dma_reg__intr_block_t__intr_count_t_cnt_3c016e63"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.cnt = new("cnt"); + this.cnt.configure(this, 32, 0, "RW", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(cnt_bit_cg[bt]) cnt_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__intr_count_t_cnt_3c016e63 + + // Reg - axi_dma_reg::intr_block_t::intr_count_incr_t_pulse_08678f4e + class axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_08678f4e extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_08678f4e_bit_cg pulse_bit_cg[1]; + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_08678f4e_fld_cg fld_cg; + rand uvm_reg_field pulse; + + function new(string name = "axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_08678f4e"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.pulse = new("pulse"); + this.pulse.configure(this, 1, 0, "RO", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(pulse_bit_cg[bt]) pulse_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_08678f4e + + // Reg - axi_dma_reg::intr_block_t::intr_count_incr_t_pulse_e1020031 + class axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_e1020031 extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_e1020031_bit_cg pulse_bit_cg[1]; + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_e1020031_fld_cg fld_cg; + rand uvm_reg_field pulse; + + function new(string name = "axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_e1020031"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.pulse = new("pulse"); + this.pulse.configure(this, 1, 0, "RO", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(pulse_bit_cg[bt]) pulse_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_e1020031 + + // Reg - axi_dma_reg::intr_block_t::intr_count_incr_t_pulse_cfe70385 + class axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_cfe70385 extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_cfe70385_bit_cg pulse_bit_cg[1]; + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_cfe70385_fld_cg fld_cg; + rand uvm_reg_field pulse; + + function new(string name = "axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_cfe70385"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.pulse = new("pulse"); + this.pulse.configure(this, 1, 0, "RO", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(pulse_bit_cg[bt]) pulse_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_cfe70385 + + // Reg - axi_dma_reg::intr_block_t::intr_count_incr_t_pulse_9a8b3fa0 + class axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_9a8b3fa0 extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_9a8b3fa0_bit_cg pulse_bit_cg[1]; + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_9a8b3fa0_fld_cg fld_cg; + rand uvm_reg_field pulse; + + function new(string name = "axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_9a8b3fa0"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.pulse = new("pulse"); + this.pulse.configure(this, 1, 0, "RO", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(pulse_bit_cg[bt]) pulse_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_9a8b3fa0 + + // Reg - axi_dma_reg::intr_block_t::intr_count_incr_t_pulse_f530dcc5 + class axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_f530dcc5 extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_f530dcc5_bit_cg pulse_bit_cg[1]; + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_f530dcc5_fld_cg fld_cg; + rand uvm_reg_field pulse; + + function new(string name = "axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_f530dcc5"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.pulse = new("pulse"); + this.pulse.configure(this, 1, 0, "RO", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(pulse_bit_cg[bt]) pulse_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_f530dcc5 + + // Reg - axi_dma_reg::intr_block_t::intr_count_incr_t_pulse_bcdfedae + class axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_bcdfedae extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_bcdfedae_bit_cg pulse_bit_cg[1]; + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_bcdfedae_fld_cg fld_cg; + rand uvm_reg_field pulse; + + function new(string name = "axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_bcdfedae"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.pulse = new("pulse"); + this.pulse.configure(this, 1, 0, "RO", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(pulse_bit_cg[bt]) pulse_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_bcdfedae + + // Reg - axi_dma_reg::intr_block_t::intr_count_incr_t_pulse_7cff97c2 + class axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7cff97c2 extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7cff97c2_bit_cg pulse_bit_cg[1]; + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7cff97c2_fld_cg fld_cg; + rand uvm_reg_field pulse; + + function new(string name = "axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7cff97c2"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.pulse = new("pulse"); + this.pulse.configure(this, 1, 0, "RO", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(pulse_bit_cg[bt]) pulse_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7cff97c2 + + // Reg - axi_dma_reg::intr_block_t::intr_count_incr_t_pulse_88b31e5a + class axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_88b31e5a extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_88b31e5a_bit_cg pulse_bit_cg[1]; + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_88b31e5a_fld_cg fld_cg; + rand uvm_reg_field pulse; + + function new(string name = "axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_88b31e5a"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.pulse = new("pulse"); + this.pulse.configure(this, 1, 0, "RO", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(pulse_bit_cg[bt]) pulse_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_88b31e5a + + // Reg - axi_dma_reg::intr_block_t::intr_count_incr_t_pulse_656d2ba5 + class axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_656d2ba5 extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_656d2ba5_bit_cg pulse_bit_cg[1]; + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_656d2ba5_fld_cg fld_cg; + rand uvm_reg_field pulse; + + function new(string name = "axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_656d2ba5"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.pulse = new("pulse"); + this.pulse.configure(this, 1, 0, "RO", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(pulse_bit_cg[bt]) pulse_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_656d2ba5 + + // Reg - axi_dma_reg::intr_block_t::intr_count_incr_t_pulse_f1bdde05 + class axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_f1bdde05 extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_f1bdde05_bit_cg pulse_bit_cg[1]; + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_f1bdde05_fld_cg fld_cg; + rand uvm_reg_field pulse; + + function new(string name = "axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_f1bdde05"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.pulse = new("pulse"); + this.pulse.configure(this, 1, 0, "RO", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(pulse_bit_cg[bt]) pulse_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_f1bdde05 + + // Reg - axi_dma_reg::intr_block_t::intr_count_incr_t_pulse_7cfe324f + class axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7cfe324f extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7cfe324f_bit_cg pulse_bit_cg[1]; + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7cfe324f_fld_cg fld_cg; + rand uvm_reg_field pulse; + + function new(string name = "axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7cfe324f"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.pulse = new("pulse"); + this.pulse.configure(this, 1, 0, "RO", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(pulse_bit_cg[bt]) pulse_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7cfe324f + + // Reg - axi_dma_reg::intr_block_t::intr_count_incr_t_pulse_8c79cf20 + class axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_8c79cf20 extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_8c79cf20_bit_cg pulse_bit_cg[1]; + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_8c79cf20_fld_cg fld_cg; + rand uvm_reg_field pulse; + + function new(string name = "axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_8c79cf20"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.pulse = new("pulse"); + this.pulse.configure(this, 1, 0, "RO", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(pulse_bit_cg[bt]) pulse_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_8c79cf20 + + // Reg - axi_dma_reg::intr_block_t::intr_count_incr_t_pulse_ff28c67c + class axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_ff28c67c extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_ff28c67c_bit_cg pulse_bit_cg[1]; + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_ff28c67c_fld_cg fld_cg; + rand uvm_reg_field pulse; + + function new(string name = "axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_ff28c67c"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.pulse = new("pulse"); + this.pulse.configure(this, 1, 0, "RO", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(pulse_bit_cg[bt]) pulse_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_ff28c67c + + // Reg - axi_dma_reg::intr_block_t::intr_count_incr_t_pulse_7198f419 + class axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7198f419 extends uvm_reg; + protected uvm_reg_data_t m_current; + protected uvm_reg_data_t m_data; + protected bit m_is_read; + + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7198f419_bit_cg pulse_bit_cg[1]; + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7198f419_fld_cg fld_cg; + rand uvm_reg_field pulse; + + function new(string name = "axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7198f419"); + super.new(name, 32, build_coverage(UVM_CVR_ALL)); + endfunction : new + extern virtual function void sample_values(); + extern protected virtual function void sample(uvm_reg_data_t data, + uvm_reg_data_t byte_en, + bit is_read, + uvm_reg_map map); + + virtual function void build(); + this.pulse = new("pulse"); + this.pulse.configure(this, 1, 0, "RO", 1, 'h0, 1, 1, 0); + if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(pulse_bit_cg[bt]) pulse_bit_cg[bt] = new(); + end + if (has_coverage(UVM_CVR_FIELD_VALS)) + fld_cg = new(); + endfunction : build + endclass : axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7198f419 + + // Regfile - axi_dma_reg::intr_block_t + class axi_dma_reg__intr_block_t extends uvm_reg_block; + rand axi_dma_reg__intr_block_t__global_intr_en_t global_intr_en_r; + rand axi_dma_reg__intr_block_t__error_intr_en_t error_intr_en_r; + rand axi_dma_reg__intr_block_t__notif_intr_en_t notif_intr_en_r; + rand axi_dma_reg__intr_block_t__global_intr_t_agg_sts_dd3dcf0a error_global_intr_r; + rand axi_dma_reg__intr_block_t__global_intr_t_agg_sts_e6399b4a notif_global_intr_r; + rand axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3 error_internal_intr_r; + rand axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10 notif_internal_intr_r; + rand axi_dma_reg__intr_block_t__error_intr_trig_t error_intr_trig_r; + rand axi_dma_reg__intr_block_t__notif_intr_trig_t notif_intr_trig_r; + rand axi_dma_reg__intr_block_t__intr_count_t_cnt_fc5260b0 error_cmd_dec_intr_count_r; + rand axi_dma_reg__intr_block_t__intr_count_t_cnt_f6d7de6b error_axi_rd_intr_count_r; + rand axi_dma_reg__intr_block_t__intr_count_t_cnt_aba31562 error_axi_wr_intr_count_r; + rand axi_dma_reg__intr_block_t__intr_count_t_cnt_f73463f1 error_mbox_lock_intr_count_r; + rand axi_dma_reg__intr_block_t__intr_count_t_cnt_5381f2ed error_sha_lock_intr_count_r; + rand axi_dma_reg__intr_block_t__intr_count_t_cnt_bf3b372e error_rd_fifo_oflow_intr_count_r; + rand axi_dma_reg__intr_block_t__intr_count_t_cnt_d56d6bb5 error_rd_fifo_uflow_intr_count_r; + rand axi_dma_reg__intr_block_t__intr_count_t_cnt_b3a342c6 error_wr_fifo_oflow_intr_count_r; + rand axi_dma_reg__intr_block_t__intr_count_t_cnt_e089aabc error_wr_fifo_uflow_intr_count_r; + rand axi_dma_reg__intr_block_t__intr_count_t_cnt_61104c6c notif_txn_done_intr_count_r; + rand axi_dma_reg__intr_block_t__intr_count_t_cnt_ae7cbc55 notif_rd_fifo_not_empty_intr_count_r; + rand axi_dma_reg__intr_block_t__intr_count_t_cnt_d7a2207c notif_rd_fifo_full_intr_count_r; + rand axi_dma_reg__intr_block_t__intr_count_t_cnt_011d9dd4 notif_wr_fifo_not_full_intr_count_r; + rand axi_dma_reg__intr_block_t__intr_count_t_cnt_3c016e63 notif_wr_fifo_empty_intr_count_r; + rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_08678f4e error_cmd_dec_intr_count_incr_r; + rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_e1020031 error_axi_rd_intr_count_incr_r; + rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_cfe70385 error_axi_wr_intr_count_incr_r; + rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_9a8b3fa0 error_mbox_lock_intr_count_incr_r; + rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_f530dcc5 error_sha_lock_intr_count_incr_r; + rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_bcdfedae error_rd_fifo_oflow_intr_count_incr_r; + rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7cff97c2 error_rd_fifo_uflow_intr_count_incr_r; + rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_88b31e5a error_wr_fifo_oflow_intr_count_incr_r; + rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_656d2ba5 error_wr_fifo_uflow_intr_count_incr_r; + rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_f1bdde05 notif_txn_done_intr_count_incr_r; + rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7cfe324f notif_rd_fifo_not_empty_intr_count_incr_r; + rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_8c79cf20 notif_rd_fifo_full_intr_count_incr_r; + rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_ff28c67c notif_wr_fifo_not_full_intr_count_incr_r; + rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7198f419 notif_wr_fifo_empty_intr_count_incr_r; + + function new(string name = "axi_dma_reg__intr_block_t"); + super.new(name); + endfunction : new + + virtual function void build(); + this.default_map = create_map("reg_map", 0, 4, UVM_LITTLE_ENDIAN); + this.global_intr_en_r = new("global_intr_en_r"); + this.global_intr_en_r.configure(this); + + this.global_intr_en_r.build(); + this.default_map.add_reg(this.global_intr_en_r, 'h0); + this.error_intr_en_r = new("error_intr_en_r"); + this.error_intr_en_r.configure(this); + + this.error_intr_en_r.build(); + this.default_map.add_reg(this.error_intr_en_r, 'h4); + this.notif_intr_en_r = new("notif_intr_en_r"); + this.notif_intr_en_r.configure(this); + + this.notif_intr_en_r.build(); + this.default_map.add_reg(this.notif_intr_en_r, 'h8); + this.error_global_intr_r = new("error_global_intr_r"); + this.error_global_intr_r.configure(this); + + this.error_global_intr_r.build(); + this.default_map.add_reg(this.error_global_intr_r, 'hc); + this.notif_global_intr_r = new("notif_global_intr_r"); + this.notif_global_intr_r.configure(this); + + this.notif_global_intr_r.build(); + this.default_map.add_reg(this.notif_global_intr_r, 'h10); + this.error_internal_intr_r = new("error_internal_intr_r"); + this.error_internal_intr_r.configure(this); + + this.error_internal_intr_r.build(); + this.default_map.add_reg(this.error_internal_intr_r, 'h14); + this.notif_internal_intr_r = new("notif_internal_intr_r"); + this.notif_internal_intr_r.configure(this); + + this.notif_internal_intr_r.build(); + this.default_map.add_reg(this.notif_internal_intr_r, 'h18); + this.error_intr_trig_r = new("error_intr_trig_r"); + this.error_intr_trig_r.configure(this); + + this.error_intr_trig_r.build(); + this.default_map.add_reg(this.error_intr_trig_r, 'h1c); + this.notif_intr_trig_r = new("notif_intr_trig_r"); + this.notif_intr_trig_r.configure(this); + + this.notif_intr_trig_r.build(); + this.default_map.add_reg(this.notif_intr_trig_r, 'h20); + this.error_cmd_dec_intr_count_r = new("error_cmd_dec_intr_count_r"); + this.error_cmd_dec_intr_count_r.configure(this); + + this.error_cmd_dec_intr_count_r.build(); + this.default_map.add_reg(this.error_cmd_dec_intr_count_r, 'h100); + this.error_axi_rd_intr_count_r = new("error_axi_rd_intr_count_r"); + this.error_axi_rd_intr_count_r.configure(this); + + this.error_axi_rd_intr_count_r.build(); + this.default_map.add_reg(this.error_axi_rd_intr_count_r, 'h104); + this.error_axi_wr_intr_count_r = new("error_axi_wr_intr_count_r"); + this.error_axi_wr_intr_count_r.configure(this); + + this.error_axi_wr_intr_count_r.build(); + this.default_map.add_reg(this.error_axi_wr_intr_count_r, 'h108); + this.error_mbox_lock_intr_count_r = new("error_mbox_lock_intr_count_r"); + this.error_mbox_lock_intr_count_r.configure(this); + + this.error_mbox_lock_intr_count_r.build(); + this.default_map.add_reg(this.error_mbox_lock_intr_count_r, 'h10c); + this.error_sha_lock_intr_count_r = new("error_sha_lock_intr_count_r"); + this.error_sha_lock_intr_count_r.configure(this); + + this.error_sha_lock_intr_count_r.build(); + this.default_map.add_reg(this.error_sha_lock_intr_count_r, 'h110); + this.error_rd_fifo_oflow_intr_count_r = new("error_rd_fifo_oflow_intr_count_r"); + this.error_rd_fifo_oflow_intr_count_r.configure(this); + + this.error_rd_fifo_oflow_intr_count_r.build(); + this.default_map.add_reg(this.error_rd_fifo_oflow_intr_count_r, 'h114); + this.error_rd_fifo_uflow_intr_count_r = new("error_rd_fifo_uflow_intr_count_r"); + this.error_rd_fifo_uflow_intr_count_r.configure(this); + + this.error_rd_fifo_uflow_intr_count_r.build(); + this.default_map.add_reg(this.error_rd_fifo_uflow_intr_count_r, 'h118); + this.error_wr_fifo_oflow_intr_count_r = new("error_wr_fifo_oflow_intr_count_r"); + this.error_wr_fifo_oflow_intr_count_r.configure(this); + + this.error_wr_fifo_oflow_intr_count_r.build(); + this.default_map.add_reg(this.error_wr_fifo_oflow_intr_count_r, 'h11c); + this.error_wr_fifo_uflow_intr_count_r = new("error_wr_fifo_uflow_intr_count_r"); + this.error_wr_fifo_uflow_intr_count_r.configure(this); + + this.error_wr_fifo_uflow_intr_count_r.build(); + this.default_map.add_reg(this.error_wr_fifo_uflow_intr_count_r, 'h120); + this.notif_txn_done_intr_count_r = new("notif_txn_done_intr_count_r"); + this.notif_txn_done_intr_count_r.configure(this); + + this.notif_txn_done_intr_count_r.build(); + this.default_map.add_reg(this.notif_txn_done_intr_count_r, 'h180); + this.notif_rd_fifo_not_empty_intr_count_r = new("notif_rd_fifo_not_empty_intr_count_r"); + this.notif_rd_fifo_not_empty_intr_count_r.configure(this); + + this.notif_rd_fifo_not_empty_intr_count_r.build(); + this.default_map.add_reg(this.notif_rd_fifo_not_empty_intr_count_r, 'h184); + this.notif_rd_fifo_full_intr_count_r = new("notif_rd_fifo_full_intr_count_r"); + this.notif_rd_fifo_full_intr_count_r.configure(this); + + this.notif_rd_fifo_full_intr_count_r.build(); + this.default_map.add_reg(this.notif_rd_fifo_full_intr_count_r, 'h188); + this.notif_wr_fifo_not_full_intr_count_r = new("notif_wr_fifo_not_full_intr_count_r"); + this.notif_wr_fifo_not_full_intr_count_r.configure(this); + + this.notif_wr_fifo_not_full_intr_count_r.build(); + this.default_map.add_reg(this.notif_wr_fifo_not_full_intr_count_r, 'h18c); + this.notif_wr_fifo_empty_intr_count_r = new("notif_wr_fifo_empty_intr_count_r"); + this.notif_wr_fifo_empty_intr_count_r.configure(this); + + this.notif_wr_fifo_empty_intr_count_r.build(); + this.default_map.add_reg(this.notif_wr_fifo_empty_intr_count_r, 'h190); + this.error_cmd_dec_intr_count_incr_r = new("error_cmd_dec_intr_count_incr_r"); + this.error_cmd_dec_intr_count_incr_r.configure(this); + + this.error_cmd_dec_intr_count_incr_r.build(); + this.default_map.add_reg(this.error_cmd_dec_intr_count_incr_r, 'h200); + this.error_axi_rd_intr_count_incr_r = new("error_axi_rd_intr_count_incr_r"); + this.error_axi_rd_intr_count_incr_r.configure(this); + + this.error_axi_rd_intr_count_incr_r.build(); + this.default_map.add_reg(this.error_axi_rd_intr_count_incr_r, 'h204); + this.error_axi_wr_intr_count_incr_r = new("error_axi_wr_intr_count_incr_r"); + this.error_axi_wr_intr_count_incr_r.configure(this); + + this.error_axi_wr_intr_count_incr_r.build(); + this.default_map.add_reg(this.error_axi_wr_intr_count_incr_r, 'h208); + this.error_mbox_lock_intr_count_incr_r = new("error_mbox_lock_intr_count_incr_r"); + this.error_mbox_lock_intr_count_incr_r.configure(this); + + this.error_mbox_lock_intr_count_incr_r.build(); + this.default_map.add_reg(this.error_mbox_lock_intr_count_incr_r, 'h20c); + this.error_sha_lock_intr_count_incr_r = new("error_sha_lock_intr_count_incr_r"); + this.error_sha_lock_intr_count_incr_r.configure(this); + + this.error_sha_lock_intr_count_incr_r.build(); + this.default_map.add_reg(this.error_sha_lock_intr_count_incr_r, 'h210); + this.error_rd_fifo_oflow_intr_count_incr_r = new("error_rd_fifo_oflow_intr_count_incr_r"); + this.error_rd_fifo_oflow_intr_count_incr_r.configure(this); + + this.error_rd_fifo_oflow_intr_count_incr_r.build(); + this.default_map.add_reg(this.error_rd_fifo_oflow_intr_count_incr_r, 'h214); + this.error_rd_fifo_uflow_intr_count_incr_r = new("error_rd_fifo_uflow_intr_count_incr_r"); + this.error_rd_fifo_uflow_intr_count_incr_r.configure(this); + + this.error_rd_fifo_uflow_intr_count_incr_r.build(); + this.default_map.add_reg(this.error_rd_fifo_uflow_intr_count_incr_r, 'h218); + this.error_wr_fifo_oflow_intr_count_incr_r = new("error_wr_fifo_oflow_intr_count_incr_r"); + this.error_wr_fifo_oflow_intr_count_incr_r.configure(this); + + this.error_wr_fifo_oflow_intr_count_incr_r.build(); + this.default_map.add_reg(this.error_wr_fifo_oflow_intr_count_incr_r, 'h21c); + this.error_wr_fifo_uflow_intr_count_incr_r = new("error_wr_fifo_uflow_intr_count_incr_r"); + this.error_wr_fifo_uflow_intr_count_incr_r.configure(this); + + this.error_wr_fifo_uflow_intr_count_incr_r.build(); + this.default_map.add_reg(this.error_wr_fifo_uflow_intr_count_incr_r, 'h220); + this.notif_txn_done_intr_count_incr_r = new("notif_txn_done_intr_count_incr_r"); + this.notif_txn_done_intr_count_incr_r.configure(this); + + this.notif_txn_done_intr_count_incr_r.build(); + this.default_map.add_reg(this.notif_txn_done_intr_count_incr_r, 'h224); + this.notif_rd_fifo_not_empty_intr_count_incr_r = new("notif_rd_fifo_not_empty_intr_count_incr_r"); + this.notif_rd_fifo_not_empty_intr_count_incr_r.configure(this); + + this.notif_rd_fifo_not_empty_intr_count_incr_r.build(); + this.default_map.add_reg(this.notif_rd_fifo_not_empty_intr_count_incr_r, 'h228); + this.notif_rd_fifo_full_intr_count_incr_r = new("notif_rd_fifo_full_intr_count_incr_r"); + this.notif_rd_fifo_full_intr_count_incr_r.configure(this); + + this.notif_rd_fifo_full_intr_count_incr_r.build(); + this.default_map.add_reg(this.notif_rd_fifo_full_intr_count_incr_r, 'h22c); + this.notif_wr_fifo_not_full_intr_count_incr_r = new("notif_wr_fifo_not_full_intr_count_incr_r"); + this.notif_wr_fifo_not_full_intr_count_incr_r.configure(this); + + this.notif_wr_fifo_not_full_intr_count_incr_r.build(); + this.default_map.add_reg(this.notif_wr_fifo_not_full_intr_count_incr_r, 'h230); + this.notif_wr_fifo_empty_intr_count_incr_r = new("notif_wr_fifo_empty_intr_count_incr_r"); + this.notif_wr_fifo_empty_intr_count_incr_r.configure(this); + + this.notif_wr_fifo_empty_intr_count_incr_r.build(); + this.default_map.add_reg(this.notif_wr_fifo_empty_intr_count_incr_r, 'h234); + endfunction : build + endclass : axi_dma_reg__intr_block_t + + // Addrmap - axi_dma_reg + class axi_dma_reg extends uvm_reg_block; + rand axi_dma_reg__id id; + rand axi_dma_reg__cap cap; + rand axi_dma_reg__ctrl ctrl; + rand axi_dma_reg__status0 status0; + rand axi_dma_reg__status1 status1; + rand axi_dma_reg__src_addr_l src_addr_l; + rand axi_dma_reg__src_addr_h src_addr_h; + rand axi_dma_reg__dst_addr_l dst_addr_l; + rand axi_dma_reg__dst_addr_h dst_addr_h; + rand axi_dma_reg__byte_count byte_count; + rand axi_dma_reg__block_size block_size; + rand axi_dma_reg__write_data write_data; + rand axi_dma_reg__read_data read_data; + rand axi_dma_reg__intr_block_t intr_block_rf; + + function new(string name = "axi_dma_reg"); + super.new(name); + endfunction : new + + virtual function void build(); + this.default_map = create_map("reg_map", 0, 4, UVM_LITTLE_ENDIAN); + this.id = new("id"); + this.id.configure(this); + + this.id.build(); + this.default_map.add_reg(this.id, 'h0); + this.cap = new("cap"); + this.cap.configure(this); + + this.cap.build(); + this.default_map.add_reg(this.cap, 'h4); + this.ctrl = new("ctrl"); + this.ctrl.configure(this); + + this.ctrl.build(); + this.default_map.add_reg(this.ctrl, 'h8); + this.status0 = new("status0"); + this.status0.configure(this); + + this.status0.build(); + this.default_map.add_reg(this.status0, 'hc); + this.status1 = new("status1"); + this.status1.configure(this); + + this.status1.build(); + this.default_map.add_reg(this.status1, 'h10); + this.src_addr_l = new("src_addr_l"); + this.src_addr_l.configure(this); + + this.src_addr_l.build(); + this.default_map.add_reg(this.src_addr_l, 'h14); + this.src_addr_h = new("src_addr_h"); + this.src_addr_h.configure(this); + + this.src_addr_h.build(); + this.default_map.add_reg(this.src_addr_h, 'h18); + this.dst_addr_l = new("dst_addr_l"); + this.dst_addr_l.configure(this); + + this.dst_addr_l.build(); + this.default_map.add_reg(this.dst_addr_l, 'h1c); + this.dst_addr_h = new("dst_addr_h"); + this.dst_addr_h.configure(this); + + this.dst_addr_h.build(); + this.default_map.add_reg(this.dst_addr_h, 'h20); + this.byte_count = new("byte_count"); + this.byte_count.configure(this); + + this.byte_count.build(); + this.default_map.add_reg(this.byte_count, 'h24); + this.block_size = new("block_size"); + this.block_size.configure(this); + + this.block_size.build(); + this.default_map.add_reg(this.block_size, 'h28); + this.write_data = new("write_data"); + this.write_data.configure(this); + + this.write_data.build(); + this.default_map.add_reg(this.write_data, 'h2c); + this.read_data = new("read_data"); + this.read_data.configure(this); + + this.read_data.build(); + this.default_map.add_reg(this.read_data, 'h30); + this.intr_block_rf = new("intr_block_rf"); + this.intr_block_rf.configure(this); + this.intr_block_rf.build(); + this.default_map.add_submap(this.intr_block_rf.default_map, 'h800); + endfunction : build + endclass : axi_dma_reg + + `include "axi_dma_reg_sample.svh" +endpackage: axi_dma_reg_uvm From b811e1d3f2a29f8be19357ace046c19472049f32 Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Fri, 12 Jul 2024 14:20:53 -0700 Subject: [PATCH 28/58] Format --- src/axi/rtl/axi_sub.sv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/axi/rtl/axi_sub.sv b/src/axi/rtl/axi_sub.sv index 4d49873f7..1aaf1104f 100644 --- a/src/axi/rtl/axi_sub.sv +++ b/src/axi/rtl/axi_sub.sv @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. // - +// // ------------------------------------------------------------- // AXI Subordinate // ------------------------------------------------------------- From 0a58401489d59e3cdc270784f8d742e6d5cdf565 Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Fri, 12 Jul 2024 14:21:39 -0700 Subject: [PATCH 29/58] First pass - AXI DMA --- src/axi/rtl/axi_dma_ctrl.sv | 635 +++++++++++++++ src/axi/rtl/axi_dma_reg.rdl | 271 +++---- src/axi/rtl/axi_dma_reg.sv | 1324 ++++++++++++-------------------- src/axi/rtl/axi_dma_reg_pkg.sv | 84 +- src/axi/rtl/axi_dma_reg_uvm.sv | 688 +++++++---------- src/axi/rtl/axi_dma_req_if.sv | 57 ++ src/axi/rtl/axi_dma_top.sv | 76 ++ src/axi/rtl/axi_mgr_rd.sv | 188 +++++ src/axi/rtl/axi_mgr_wr.sv | 188 +++++ src/axi/rtl/axi_pkg.sv | 5 + 10 files changed, 2041 insertions(+), 1475 deletions(-) create mode 100644 src/axi/rtl/axi_dma_ctrl.sv create mode 100644 src/axi/rtl/axi_dma_req_if.sv create mode 100644 src/axi/rtl/axi_dma_top.sv create mode 100644 src/axi/rtl/axi_mgr_rd.sv create mode 100644 src/axi/rtl/axi_mgr_wr.sv diff --git a/src/axi/rtl/axi_dma_ctrl.sv b/src/axi/rtl/axi_dma_ctrl.sv new file mode 100644 index 000000000..53c8c7098 --- /dev/null +++ b/src/axi/rtl/axi_dma_ctrl.sv @@ -0,0 +1,635 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Description: +// Control State Machine for Caliptra AXI Manager (DMA) block +// + +module axi_dma_ctrl +import axi_pkg::*; +import soc_ifc_pkg::*; +#( + parameter AW = 64, + parameter DW = 32, // Data Width + BC = DW/8, // Byte Count + BW = $clog2(BC) // Byte count Width +)( + input clk, + input cptra_pwrgood, + input rst_n, + + // Recovery INF Interrupt + // Should only assert when a full block_size of data is available at the + // recovery interface FIFO + input recovery_data_avail, + + // Internal Signaling + input mbox_lock, + input sha_lock, + + // Mailbox SRAM INF + output mb_dv, + input mb_hold, + input mb_error, + output var soc_ifc_req_t mb_data, + input [DW-1:0] mb_rdata, + + // AXI Manager Read INF + axi_dma_req_if.src r_req_if, + output r_ready_o, + input r_valid_i, + input [DW-1:0] r_data_i, + + // AXI Manager Write INF + axi_dma_req_if.src w_req_if, + input w_ready_i, + output w_valid_o, + output [DW-1:0] w_data_o, + + // Register INF + input dv, + input var soc_ifc_req_t req_data, + output hold, + output [SOC_IFC_DATA_W-1:0] rdata, + output error, + + // Interrupt + output notif_intr, + output error_intr + +); + + // --------------------------------------- // + // Imports // + // --------------------------------------- // + import axi_dma_reg_pkg::*; + + + // --------------------------------------- // + // Localparams/Typedefs // + // --------------------------------------- // + + localparam FIFO_BC = 128; // depth in bytes + localparam FIFO_BW = caliptra_prim_util_pkg::vbits((FIFO_BC/BC)+1); // width of a signal that reports FIFO slot consumption + + // Smaller of + // a) 4096 (AXI max burst size) + // b) Configured data width X max supported AXI burst length value + localparam AXI_MAX_BLOCK_SIZE = AXI_LEN_MAX_BYTES < AXI_LEN_MAX_VALUE * BC ? AXI_LEN_MAX_BYTES : + AXI_LEN_MAX_VALUE * BC; + localparam MAX_BLOCK_SIZE = AXI_MAX_BLOCK_SIZE > FIFO_BC/2 ? FIFO_BC/2 : + AXI_MAX_BLOCK_SIZE; + + + // --------------------------------------- // + // Signals // + // --------------------------------------- // + + axi_dma_reg_pkg::axi_dma_reg__in_t hwif_in, + axi_dma_reg_pkg::axi_dma_reg__out_t hwif_out + + enum logic [2:0] { + DMA_IDLE, + DMA_WAIT_DATA, + DMA_DONE, + DMA_ERROR + } ctrl_fsm_ns,ctrl_fsm_ps; + + logic reg_rd_err, reg_wr_err; + logic reg_rd_stall, reg_wr_stall; + logic reg_rd_ack_nc, reg_wr_ack_nc; + + // FIFO signals + logic fifo_w_ready; + logic fifo_w_valid; + logic [DW-1:0] fifo_w_data; + logic fifo_r_ready; + logic fifo_r_valid; + logic [DW-1:0] fifo_r_data; + logic [FIFO_BW-1:0] fifo_depth; + logic fifo_full, fifo_full_r; + logic fifo_empty, fifo_empty_r; + + // Internal signals + logic cmd_inv_rd_route; + logic cmd_inv_wr_route; + logic cmd_inv_route_combo; + logic cmd_inv_src_addr; + logic cmd_inv_dst_addr; + logic cmd_inv_byte_count; + logic cmd_inv_block_size; + logic cmd_inv_rd_fixed; + logic cmd_inv_wr_fixed; + logic cmd_inv_mbox_lock; + logic cmd_inv_sha_lock; + logic cmd_parse_error; + + logic rd_req_hshake, rd_req_hshake_bypass, rd_req_stall; + logic wr_req_hshake, wr_req_hshake_bypass, wr_req_stall; + logic [3:0] wr_resp_pending; // Counts up to 15 pending Write responses. + // Once this counter saturates, we stall new requests + // until further responses arrive. + // This is an artificially imposed limit, intended + // to allow a subordinate to have some delay in sending + // write responses without ever throttling this DMA. + + logic [DW-1:0] r_data_mask; + + logic [AW-1:0] src_addr, dst_addr; + logic [$clog2(FIFO_BC+1)-1:0] rd_credits; + logic [AXI_LEN_BC_WIDTH-1:0] block_size_mask; + // 1's based counters + logic [31-1:0] rd_bytes_requested; + logic [31-1:0] wr_bytes_requested; + logic [AXI_LEN_BC_WIDTH-1:0] rd_align_req_byte_count; // byte-count in a request until nearest AXI boundary + logic [AXI_LEN_BC_WIDTH-1:0] rd_final_req_byte_count; // byte-count in the final request, which may be smaller than a typical request + logic [AXI_LEN_BC_WIDTH-1:0] rd_req_byte_count; // byte-count calculated for the current read request + logic [AXI_LEN_BC_WIDTH-1:0] wr_align_req_byte_count; // byte-count in a request until nearest AXI boundary + logic [AXI_LEN_BC_WIDTH-1:0] wr_final_req_byte_count; // byte-count in the final request, which may be smaller than a typical request + logic [AXI_LEN_BC_WIDTH-1:0] wr_req_byte_count; // byte-count calculated for the current read request + + logic [31:0] bytes_remaining; // Decrements with arrival of beat at DESTINATION. + logic axi_error; + logic mb_lock_dropped, mb_lock_error; + + + // --------------------------------------- // + // Control Register Block // + // --------------------------------------- // + axi_dma_reg i_axi_dma_reg ( + .clk(clk ), + .rst(1'b0), + + .s_cpuif_req (dv ), + .s_cpuif_req_is_wr (req_data.write ), + .s_cpuif_addr (req_data.addr ), + .s_cpuif_wr_data (req_data.wdata ), + .s_cpuif_wr_biten ('1/*FIXME req_data.wstrb*/), + .s_cpuif_req_stall_wr(reg_wr_stall ), + .s_cpuif_req_stall_rd(reg_rd_stall ), + .s_cpuif_rd_ack (reg_rd_ack_nc ), + .s_cpuif_rd_err (reg_rd_err ), + .s_cpuif_rd_data (rdata ), + .s_cpuif_wr_ack (reg_wr_ack_nc ), + .s_cpuif_wr_err (reg_wr_err ), + + .hwif_in (hwif_in ), + .hwif_out (hwif_out ) + ); + assign error = reg_rd_err || reg_wr_err; + assign hold = reg_rd_stall || reg_wr_stall; + + + always_comb begin + hwif_in.cptra_pwrgood = cptra_pwrgood; + hwif_in.cptra_rst_b = rst_n; + hwif_in.soc_req = req_data.soc_req; + hwif_in.dma_swwel = req_data.soc_req || ctrl_fsm_ps != DMA_IDLE; + end + + + // --------------------------------------- // + // Control FSM // + // --------------------------------------- // + always_ff @(posedge clk or negedge rst_n) begin + if (!rst_n) begin + ctrl_fsm_ps <= DMA_IDLE; + end else begin + ctrl_fsm_ps <= ctrl_fsm_ns; + end + end + + always_comb begin + ctrl_fsm_ns = ctrl_fsm_ps; + case(ctrl_fsm_ps) inside + DMA_IDLE: begin + if (hwif_out.ctrl.go.value && cmd_parse_error) begin + ctrl_fsm_ns = DMA_ERROR; + end + else if (hwif_out.ctrl.go.value) begin + ctrl_fsm_ns = DMA_WAIT_DATA; + end + end + DMA_WAIT_DATA: begin + if ((bytes_remaining == 0) && (wr_resp_pending == 0) && (axi_error || mb_lock_error)) begin + ctrl_fsm_ns = DMA_ERROR; + end + else if ((bytes_remaining == 0) && (wr_resp_pending == 0)) begin + ctrl_fsm_ns = DMA_DONE; + end + end + DMA_DONE: begin + ctrl_fsm_ns = DMA_IDLE; + end + DMA_ERROR: begin + if (hwif_out.ctrl.flush.value) begin + ctrl_fsm_ns = DMA_IDLE; + end + end + endcase + end + + always_comb hwif_in.ctrl.go.hwclr = (ctrl_fsm_ps == DMA_DONE) || ((ctrl_fsm_ps == DMA_ERROR) && hwif_out.ctrl.flush.value); + always_comb hwif_in.ctrl.flush.hwclr = (ctrl_fsm_ps == DMA_IDLE); + + always_comb hwif_in.status0.busy.next = (ctrl_fsm_ps != DMA_IDLE); + always_comb hwif_in.status0.error.next = (ctrl_fsm_ps == DMA_ERROR); + always_comb hwif_in.status0.axi_dma_fsm_ps.next = ctrl_fsm_ps; + always_comb hwif_in.status1.bytes_remaining.next = bytes_remaining; + + + // --------------------------------------- // + // Command Decode // + // --------------------------------------- // + always_comb begin + if (AW < 32) begin + src_addr = hwif_out.src_addr_l.addr_l.value[AW-1:0]; + dst_addr = hwif_out.dst_addr_l.addr_l.value[AW-1:0]; + end + else if (AW < 64) begin + src_addr = {hwif_out.src_addr_h.addr_h.value[AW-32-1:0], + hwif_out.src_addr_l.addr_l.value}; + dst_addr = {hwif_out.dst_addr_h.addr_h.value[AW-32-1:0], + hwif_out.dst_addr_l.addr_l.value}; + end + else begin + src_addr = {hwif_out.src_addr_h.addr_h.value, + hwif_out.src_addr_l.addr_l.value}; + dst_addr = {hwif_out.dst_addr_h.addr_h.value, + hwif_out.dst_addr_l.addr_l.value}; + end + end + + always_comb begin + cmd_inv_rd_route = 1'b0; // There are no unassigned values from the 2-bit field, all individual configs are legal + cmd_inv_wr_route = 1'b0; // There are no unassigned values from the 2-bit field, all individual configs are legal + // Some COMBINATIONS of routes are disallowed + case({hwif_out.ctrl.rd_route.value,hwif_out.ctrl.wr_route.value}) inside + {2'(axi_dma_reg__ctrl__rd_route__rd_route_e__DISABLE), + 2'(axi_dma_reg__ctrl__wr_route__wr_route_e__DISABLE)}: cmd_inv_route_combo = 1; + + {2'(axi_dma_reg__ctrl__rd_route__rd_route_e__DISABLE), + 2'(axi_dma_reg__ctrl__wr_route__wr_route_e__MBOX)}: cmd_inv_route_combo = 0; + + {2'(axi_dma_reg__ctrl__rd_route__rd_route_e__DISABLE), + 2'(axi_dma_reg__ctrl__wr_route__wr_route_e__AHB_FIFO)}: cmd_inv_route_combo = 0; + + {2'(axi_dma_reg__ctrl__rd_route__rd_route_e__DISABLE), + 2'(axi_dma_reg__ctrl__wr_route__wr_route_e__AXI_RD)}: cmd_inv_route_combo = 1; + + {2'(axi_dma_reg__ctrl__rd_route__rd_route_e__MBOX), + 2'(axi_dma_reg__ctrl__wr_route__wr_route_e__DISABLE)}: cmd_inv_route_combo = 0; + + {2'(axi_dma_reg__ctrl__rd_route__rd_route_e__MBOX), + 2'(axi_dma_reg__ctrl__wr_route__wr_route_e__MBOX)}: cmd_inv_route_combo = 1; + + {2'(axi_dma_reg__ctrl__rd_route__rd_route_e__MBOX), + 2'(axi_dma_reg__ctrl__wr_route__wr_route_e__AHB_FIFO)}: cmd_inv_route_combo = 1; + + {2'(axi_dma_reg__ctrl__rd_route__rd_route_e__MBOX), + 2'(axi_dma_reg__ctrl__wr_route__wr_route_e__AXI_RD)}: cmd_inv_route_combo = 1; + + {2'(axi_dma_reg__ctrl__rd_route__rd_route_e__AHB_FIFO), + 2'(axi_dma_reg__ctrl__wr_route__wr_route_e__DISABLE)}: cmd_inv_route_combo = 0; + + {2'(axi_dma_reg__ctrl__rd_route__rd_route_e__AHB_FIFO), + 2'(axi_dma_reg__ctrl__wr_route__wr_route_e__MBOX)}: cmd_inv_route_combo = 1; + + {2'(axi_dma_reg__ctrl__rd_route__rd_route_e__AHB_FIFO), + 2'(axi_dma_reg__ctrl__wr_route__wr_route_e__AHB_FIFO)}: cmd_inv_route_combo = 1; + + {2'(axi_dma_reg__ctrl__rd_route__rd_route_e__AHB_FIFO), + 2'(axi_dma_reg__ctrl__wr_route__wr_route_e__AXI_RD)}: cmd_inv_route_combo = 1; + + {2'(axi_dma_reg__ctrl__rd_route__rd_route_e__AXI_WR), + 2'(axi_dma_reg__ctrl__wr_route__wr_route_e__DISABLE)}: cmd_inv_route_combo = 1; + + {2'(axi_dma_reg__ctrl__rd_route__rd_route_e__AXI_WR), + 2'(axi_dma_reg__ctrl__wr_route__wr_route_e__MBOX)}: cmd_inv_route_combo = 1; + + {2'(axi_dma_reg__ctrl__rd_route__rd_route_e__AXI_WR), + 2'(axi_dma_reg__ctrl__wr_route__wr_route_e__AHB_FIFO)}: cmd_inv_route_combo = 1; + + {2'(axi_dma_reg__ctrl__rd_route__rd_route_e__AXI_WR), + 2'(axi_dma_reg__ctrl__wr_route__wr_route_e__AXI_RD)}: cmd_inv_route_combo = 0; + endcase + // An address is invalid if: + // * improperly aligned + // * MSB bits are set (out of address range) + if (AW < 32) begin + cmd_inv_src_addr = |src_addr[BW-1:0] || + |hwif_out.src_addr_l.addr_l.value[31:AW] || + |hwif_out.src_addr_h.addr_h.value; + cmd_inv_dst_addr = |dst_addr[BW-1:0] || + |hwif_out.dst_addr_l.addr_l.value[31:AW] || + |hwif_out.dst_addr_h.addr_h.value; + end + else if (AW < 64) begin + cmd_inv_src_addr = |src_addr[BW-1:0] || + |hwif_out.src_addr_h.addr_h.value[31:AW-32]; + cmd_inv_dst_addr = |dst_addr[BW-1:0] || + |hwif_out.dst_addr_h.addr_h.value[31:AW-32]; + end + else begin + cmd_inv_src_addr = |src_addr[BW-1:0]; + cmd_inv_dst_addr = |dst_addr[BW-1:0]; + end + cmd_inv_byte_count = |hwif_out.byte_count.count.value[BW-1:0] || + (hwif_out.byte_count.count.value > MBOX_SIZE_BYTES && + ((hwif_out.ctrl.rd_route.value == axi_dma_reg__ctrl__rd_route__rd_route_e__MBOX) || + (hwif_out.ctrl.wr_route.value == axi_dma_reg__ctrl__wr_route__wr_route_e__MBOX))); + // power of 2 and word-aligned + cmd_inv_block_size = |(hwif_out.block_size.size.value & hwif_out.block_size.size.value) || + |hwif_out.block_size.size.value[BW-1:0]; + cmd_inv_rd_fixed = hwif_out.ctrl.rd_fixed.value && hwif_out.ctrl.rd_route.value == axi_dma_reg__ctrl__rd_route__rd_route_e__DISABLE; + cmd_inv_wr_fixed = hwif_out.ctrl.wr_fixed.value && hwif_out.ctrl.wr_route.value == axi_dma_reg__ctrl__wr_route__wr_route_e__DISABLE; + cmd_inv_mbox_lock = !mbox_lock && ((hwif_out.ctrl.rd_route.value == axi_dma_reg__ctrl__rd_route__rd_route_e__MBOX) || (hwif_out.ctrl.wr_route.value == axi_dma_reg__ctrl__wr_route__wr_route_e__MBOX)); + cmd_inv_sha_lock = !sha_lock && (1'b0/*FIXME addr decode*/); + cmd_parse_error = cmd_inv_rd_route || + cmd_inv_wr_route || + cmd_inv_route_combo || + cmd_inv_src_addr || + cmd_inv_dst_addr || + cmd_inv_byte_count || + cmd_inv_block_size || + cmd_inv_rd_fixed || + cmd_inv_wr_fixed || + cmd_inv_mbox_lock || + cmd_inv_sha_lock; + end + + always_comb hwif_in.intr_block_rf.error_internal_intr_r.error_cmd_dec_sts .hwset = (axi_dma_fsm_ps == DMA_IDLE) && hwif_out.ctrl.go.value && cmd_parse_error; + always_comb hwif_in.intr_block_rf.error_internal_intr_r.error_axi_rd_sts .hwset = r_req_if.resp_valid && r_req_if.resp inside {AXI_RESP_SLVERR,AXI_RESP_DECERR}; + always_comb hwif_in.intr_block_rf.error_internal_intr_r.error_axi_wr_sts .hwset = w_req_if.resp_valid && w_req_if.resp inside {AXI_RESP_SLVERR,AXI_RESP_DECERR}; + always_comb hwif_in.intr_block_rf.error_internal_intr_r.error_mbox_lock_sts .hwset = mb_lock_dropped && !mb_lock_error; // pulse to set + always_comb hwif_in.intr_block_rf.error_internal_intr_r.error_sha_lock_sts .hwset = (axi_dma_fsm_ps == DMA_IDLE) && hwif_out.ctrl.go.value && cmd_inv_mbox_lock; // FIXME with real-time checking + always_comb hwif_in.intr_block_rf.error_internal_intr_r.error_fifo_oflow_sts .hwset = (hwif_out.ctrl.wr_route.value == axi_dma_reg__ctrl__wr_route__wr_route_e__AHB_FIFO) && fifo_w_valid && !fifo_w_ready; + always_comb hwif_in.intr_block_rf.error_internal_intr_r.error_fifo_uflow_sts .hwset = (hwif_out.ctrl.rd_route.value == axi_dma_reg__ctrl__rd_route__rd_route_e__AHB_FIFO) && !fifo_r_valid && fifo_r_ready; + + always_comb hwif_in.intr_block_rf.notif_internal_intr_r.notif_txn_done_sts .hwset = axi_dma_fsm_ps inside {DMA_DONE,DMA_ERROR}; + always_comb hwif_in.intr_block_rf.notif_internal_intr_r.notif_fifo_empty_sts .hwset = fifo_empty && !fifo_empty_r; + always_comb hwif_in.intr_block_rf.notif_internal_intr_r.notif_fifo_not_empty_sts.hwset = !fifo_empty && fifo_empty_r; + always_comb hwif_in.intr_block_rf.notif_internal_intr_r.notif_fifo_full_sts .hwset = fifo_full && !fifo_full_r; + always_comb hwif_in.intr_block_rf.notif_internal_intr_r.notif_fifo_not_full_sts .hwset = !fifo_full && fifo_full_r; + + + // --------------------------------------- // + // Control Logic // + // --------------------------------------- // + always_ff @(posedge clk or negedge rst_n) begin + if (!rst_n) begin + rd_req_stall <= 1'b1; + end + else if (hwif_out.block_size.size.value == 0) begin + rd_req_stall <= 1'b0; + end + else if (rd_req_hshake) begin + rd_req_stall <= 1'b1; + end + else if (recovery_data_avail) begin + rd_req_stall <= 1'b0; + end + end + + always_ff @(posedge clk or negedge rst_n) begin + if (!rst_n) begin + wr_resp_pending <= '0; + end + else if (axi_dma_fsm_ps == DMA_IDLE) begin + wr_resp_pending <= '0; + end + else begin + case ({w_req_if.resp_valid,wr_req_hshake}) inside + 2'b00: wr_resp_pending <= wr_resp_pending; + 2'b01: wr_resp_pending <= wr_resp_pending + 2'b01; + 2'b10: wr_resp_pending <= wr_resp_pending - 2'b01; + 2'b11: wr_resp_pending <= wr_resp_pending; + endcase + end + end + + always_comb block_size_mask = hwif_out.block_size.size.value - 1; + always_comb begin + rd_align_req_byte_count = (MAX_BLOCK_SIZE - r_req_if.addr[$clog2(MAX_BLOCK_SIZE)-1:0]) & block_size_mask; + rd_final_req_byte_count = hwif_out.byte_count.count.value - rd_bytes_requested; + rd_req_byte_count = rd_final_req_byte_count < rd_align_req_byte_count ? rd_final_req_byte_count : + rd_align_req_byte_count; + wr_align_req_byte_count = (MAX_BLOCK_SIZE - w_req_if.addr[$clog2(MAX_BLOCK_SIZE)-1:0]) & block_size_mask; + wr_final_req_byte_count = hwif_out.byte_count.count.value - wr_bytes_requested; + wr_req_byte_count = wr_final_req_byte_count < wr_align_req_byte_count ? wr_final_req_byte_count : + wr_align_req_byte_count; + end + + always_comb begin + r_req_if.valid = (ctrl_fsm_ps == DMA_WAIT_DATA) && !rd_req_hshake_bypass && (rd_bytes_requested < hwif_out.byte_count.count) && (rd_credits >= rd_req_byte_count) && !rd_req_stall; + r_req_if.addr = src_addr + rd_bytes_requested; + r_req_if.byte_len = rd_req_byte_count - AXI_LEN_BC_WIDTH'(BC); + r_req_if.fixed = hwif_out.ctrl.rd_fixed.value; + r_req_if.lock = 1'b0; // TODO + w_req_if.valid = (ctrl_fsm_ps == DMA_WAIT_DATA) && !wr_req_hshake_bypass && (wr_bytes_requested < hwif_out.byte_count.count) && (fifo_depth >= wr_req_byte_count); + w_req_if.addr = dst_addr + wr_bytes_requested; + w_req_if.byte_len = wr_req_byte_count - AXI_LEN_BC_WIDTH'(BC); + w_req_if.fixed = hwif_out.ctrl.wr_fixed.value; + w_req_if.lock = 1'b0; // TODO + end + + always_comb begin + // rd_route_MBOX is tied to wr_bytes_requested because AXI Reads translate to Mailbox writes + // and vice-versa for wr_route_MBOX + mb_dv = ctrl_fsm_ps == DMA_WAIT_DATA && + ((hwif_out.ctrl.rd_route.value == axi_dma_reg__ctrl__rd_route__rd_route_e__MBOX && + (wr_bytes_requested < hwif_out.byte_count.count) && + fifo_r_valid) || + (hwif_out.ctrl.wr_route.value == axi_dma_reg__ctrl__wr_route__wr_route_e__MBOX && + (rd_bytes_requested < hwif_out.byte_count.count) && + fifo_w_ready)); + mb_data.addr = hwif_out.ctrl.rd_route.value == axi_dma_reg__ctrl__rd_route__rd_route_e__MBOX ? w_req_if.addr : + r_req_if.addr; + mb_data.wdata = fifo_r_data; + mb_data.wstrb = '1; + mb_data.id = '1; + mb_data.write = hwif_out.ctrl.rd_route.value == axi_dma_reg__ctrl__rd_route__rd_route_e__MBOX; + mb_data.soc_req = 1'b0; + end + + always_comb begin + rd_req_hshake = r_req_if.valid && r_req_if.ready; + wr_req_hshake = w_req_if.valid && w_req_if.ready; + rd_req_hshake_bypass = hwif_out.ctrl.rd_route.value == axi_dma_reg__ctrl__rd_route__rd_route_e__DISABLE; + wr_req_hshake_bypass = hwif_out.ctrl.wr_route.value == axi_dma_reg__ctrl__wr_route__wr_route_e__DISABLE; + end + + always_ff @(posedge clk or negedge rst_n) begin + if (!rst_n) begin + rd_bytes_requested <= '0; + end + else if (rd_req_hshake) begin + rd_bytes_requested <= rd_bytes_requested + rd_req_byte_count; + end + else if (mb_dv && !mb_hold) begin + rd_bytes_requested <= rd_bytes_requested + BC; + end + else if (ctrl_fsm_ps == DMA_IDLE) begin + rd_bytes_requested <= '0; + end + end + always_ff @(posedge clk or negedge rst_n) begin + if (!rst_n) begin + wr_bytes_requested <= '0; + end + else if (wr_req_hshake) begin + wr_bytes_requested <= wr_bytes_requested + wr_req_byte_count; + end + else if (ctrl_fsm_ps == DMA_IDLE) begin + wr_bytes_requested <= '0; + end + end + + always_ff @(posedge clk or negedge rst_n) begin + if (!rst_n) begin + rd_credits <= FIFO_BC; + end + else if (rd_req_hshake && (fifo_r_valid && fifo_r_ready)) begin + rd_credits <= rd_credits + BC - rd_req_byte_count; + end + else if (rd_req_hshake) begin + rd_credits <= rd_credits - rd_req_byte_count; + end + else if (fifo_r_valid && fifo_r_ready) begin + rd_credits <= rd_credits + BC; + end + else if (ctrl_fsm_ps == DMA_IDLE) begin + rd_credits <= FIFO_BC; + end + end + + always_ff @(posedge clk or negedge rst_n) begin + if (!rst_n) begin + bytes_remaining <= '0; + end + else if (ctrl_fsm_ps == DMA_IDLE && hwif_out.ctrl.go.value) begin + bytes_remaining <= hwif_out.byte_count.count; + end + else if (fifo_r_valid && fifo_r_ready) begin + bytes_remaining <= bytes_remaining - BC; + end + end + + always_comb begin + if (hwif_out.ctrl.wr_route.value == axi_dma_reg__ctrl__wr_route__wr_route_e__AHB_FIFO) begin + fifo_w_data = req_data.wdata; + fifo_w_valid = hwif_out.write_data.wdata.swmod; + end + else if (hwif_out.ctrl.wr_route.value == axi_dma_reg__ctrl__wr_route__wr_route_e__MBOX) begin + fifo_w_data = mb_rdata; + fifo_w_valid = mb_dv && !mb_hold; + end + else begin + fifo_w_data = r_data_i; + fifo_w_valid = r_valid_i; + end + end + + always_comb begin + if (hwif_out.ctrl.rd_route.value == axi_dma_reg__ctrl__rd_route__rd_route_e__MBOX) begin + fifo_r_ready = !mb_hold; + end + else if (hwif_out.ctrl.rd_route.value == axi_dma_reg__ctrl__rd_route__rd_route_e__AHB_FIFO) begin + fifo_r_ready = hwif_out.read_data.rdata.swacc; + end + else begin + fifo_r_ready = w_ready_i; + end + end + + always_comb r_data_mask = {DW{hwif_out.ctrl.rd_route.value == axi_dma_reg__ctrl__rd_route__rd_route_e__AHB_FIFO}}; + always_comb hwif_in.read_data.rdata.next = fifo_r_data & r_data_mask; + + always_ff @(posedge clk or negedge rst_n) begin + if (!rst_n) begin + axi_error <= 1'b0; + end + else if (axi_dma_fsm_ps == DMA_IDLE || hwif_out.ctrl.flush.value) begin + axi_error <= 1'b0; + end + else if (r_req_if.resp_valid) begin + axi_error <= axi_error | (r_req_if.resp inside {AXI_RESP_SLVERR,AXI_RESP_DECERR}); + end + else if (w_req_if.resp_valid) begin + axi_error <= axi_error | (w_req_if.resp inside {AXI_RESP_SLVERR,AXI_RESP_DECERR}); + end + end + + always_comb mb_lock_dropped = axi_dma_fsm_ps == DMA_WAIT_DATA && + ((hwif_out.ctrl.rd_route.value == axi_dma_reg__ctrl__rd_route__rd_route_e__MBOX) || + (hwif_out.ctrl.wr_route.value == axi_dma_reg__ctrl__wr_route__wr_route_e__MBOX)) && + !mbox_lock; + always_ff @(posedge clk or negedge rst_n) begin + if (!rst_n) begin + mb_lock_error <= 1'b0; + end + else if (axi_dma_fsm_ps == DMA_IDLE || hwif_out.ctrl.flush.value) begin + mb_lock_error <= 1'b0; + end + else if (mb_lock_dropped) begin + mb_lock_error <= mb_lock_error | 1'b1; + end + end + + + // --------------------------------------- // + // Data FIFO // + // --------------------------------------- // + caliptra_prim_fifo_sync #( + .Width (DW ), + .Pass (1'b0), // if == 1 allow requests to pass through empty FIFO + .Depth (FIFO_BC/BC), + .OutputZeroIfEmpty(1'b1), // if == 1 always output 0 when FIFO is empty + .Secure (1'b0) // use prim count for pointers TODO review if this is needed + ) ( + .clk_i (clk ), + .rst_ni (rst_n ), + // synchronous clear / flush port + .clr_i (hwif_out.flush_fixme), + // write port + .wvalid_i(fifo_w_valid ), + .wready_o(fifo_w_ready ), + .wdata_i (fifo_w_data ), + // read port + .rvalid_o(fifo_r_valid), + .rready_i(fifo_r_ready), + .rdata_o (fifo_r_data ), + // occupancy + .full_o (fifo_full ), + .depth_o (fifo_depth), + .err_o ( ) + ); + + always_comb fifo_empty = fifo_depth == 0; + always_ff @(posedge clk or negedge rst_n) begin + if (!rst_n) begin + fifo_full_r <= 1'b0; + fifo_empty_r <= 1'b1; + else begin + fifo_full_r <= fifo_full; + fifo_empty_r <= fifo_empty; + end + end + + FIXME_ASSERT_INIT(DW == 32) + FIXME_ASSERT(rd_credits <= FIFO_BC) + FIXME_ASSERT(!((rd_credits < BC) && rd_req_hshake)) + FIXME_ASSERT(!((ctrl_fsm_ps == DMA_DONE) && (rd_credits != FIFO_BC))) + +endmodule diff --git a/src/axi/rtl/axi_dma_reg.rdl b/src/axi/rtl/axi_dma_reg.rdl index f96ce88ef..b8f29e0bc 100644 --- a/src/axi/rtl/axi_dma_reg.rdl +++ b/src/axi/rtl/axi_dma_reg.rdl @@ -18,8 +18,11 @@ addrmap axi_dma_reg { signal {activelow; async; cpuif_reset; field_reset; } cptra_rst_b; signal {activelow; async; } cptra_pwrgood; - //signal to indicate request is coming from soc side + // indicate request is coming from soc side signal {} soc_req; + // DMA operation parameters are unmodifiable while operation in progress + // and also unmodifiable by soc at all times + signal {} dma_swwel; // Default register configuration addressing = regalign; // This is the default if not specified @@ -49,8 +52,8 @@ addrmap axi_dma_reg { reg { name="Caliptra AXI DMA Control"; desc="Used to drive command parameters and initiate operations to DMA block."; - field { desc="Initiate current configured operation."; sw=rw; swwel=soc_req; onwrite=woset; swmod; hw=r; hwclr=true; } go=1'b0; - field { desc="Flush active operations, reset state machines, clear FIFO data."; sw=rw; swwel=soc_req; onwrite=woset; hw=r; hwclr=true; } flush=1'b0; + field { desc="Initiate current configured operation."; sw=rw; swwel=dma_swwel; onwrite=woset; swmod; hw=r; hwclr=true; } go=1'b0; + field { desc="Flush active operations, reset state machines, clear FIFO data. Any in-flight AXI transactions will be gracefully completed."; sw=rw; swwel=soc_req; onwrite=woset; hw=r; hwclr=true; } flush=1'b0; field { desc="RESERVED."; sw=r; } rsvd0[14]=14'h0000; field { desc="Read Route. Configures how the AXI read channel operates for the current operation."; enum rd_route_e { @@ -71,9 +74,9 @@ addrmap axi_dma_reg { // desc = "AXI Read channel data is routed to the SOC_IFC SHA accelerator."; // }; }; - sw=rw; swwel=soc_req; hw=r; encode = rd_route_e; } rd_route[2]=0; + sw=rw; swwel=dma_swwel; hw=r; encode = rd_route_e; } rd_route[2]=0; field { desc="RESERVED."; sw=r; } rsvd1[2]=2'h0; - field { desc="Read Route uses a FIXED burst type for AXI transaction."; sw=rw; swwel=soc_req; hw=r; } rd_fixed=1'b0; + field { desc="Read Route uses a FIXED burst type for AXI transaction."; sw=rw; swwel=dma_swwel; hw=r; } rd_fixed=1'b0; field { desc="RESERVED."; sw=r; } rsvd2[3]=3'h0; field { desc="Write Route. Configures how the AXI write channel operates for the current operation."; enum wr_route_e { @@ -90,9 +93,9 @@ addrmap axi_dma_reg { desc = "AXI Write channel data is received from AXI Read channel, then sent onto SoC fabric."; }; }; - sw=rw; swwel=soc_req; hw=r; encode = wr_route_e; } wr_route[2]=0; + sw=rw; swwel=dma_swwel; hw=r; encode = wr_route_e; } wr_route[2]=0; field { desc="RESERVED."; sw=r; } rsvd3[2]=2'h0; - field { desc="Write Route uses a FIXED burst type for AXI transaction."; sw=rw; swwel=soc_req; hw=r; } wr_fixed=1'b0; + field { desc="Write Route uses a FIXED burst type for AXI transaction."; sw=rw; swwel=dma_swwel; hw=r; } wr_fixed=1'b0; field { desc="RESERVED."; sw=r; } rsvd4[3]=3'h0; } ctrl; @@ -110,14 +113,22 @@ addrmap axi_dma_reg { desc = "Indicates the present state of the Caliptra AXI DMA FSM."; enum axi_dma_fsm_e { - DMA_IDLE = 3'b000 { + DMA_IDLE = 2'b00 { desc = "DMA is idle"; }; - // FIXME + DMA_WAIT_DATA = 2'b01 { + desc = "DMA operation is active"; + }; + DMA_DONE = 2'b10 { + desc = "DMA operation is complete, with success"; + }; + DMA_ERROR = 2'b11 { + desc = "DMA operation is completed or parsed with an error"; + }; }; sw=r; hw=rw; encode = axi_dma_fsm_e; - } axi_dma_fsm_ps[3] = 0; - field { desc="RESERVED."; sw=r; } rsvd1[13]=13'h0000; + } axi_dma_fsm_ps[2] = 0; + field { desc="RESERVED."; sw=r; } rsvd1[14]=14'h0000; } status0; // Status 1 @@ -131,31 +142,31 @@ addrmap axi_dma_reg { reg { name="Caliptra AXI DMA Source Address Low"; desc="Contains lower 32-bits of address from which current operation will read data."; - field { desc="Addr_L"; sw=rw; swwel=soc_req; hw=r; } addr_l[32]=32'h00000000; + field { desc="Addr_L"; sw=rw; swwel=dma_swwel; hw=r; } addr_l[32]=32'h00000000; } src_addr_l; reg { name="Caliptra AXI DMA Source Address High"; desc="Contains upper 32-bits of address from which current operation will read data."; - field { desc="Addr_H"; sw=rw; swwel=soc_req; hw=r; } addr_h[32]=32'h00000000; + field { desc="Addr_H"; sw=rw; swwel=dma_swwel; hw=r; } addr_h[32]=32'h00000000; } src_addr_h; // Destination Address reg { name="Caliptra AXI DMA Destination Address Low"; desc="Contains lower 32-bits of address to which current operation will write data."; - field { desc="Addr_L"; sw=rw; swwel=soc_req; hw=r; } addr_l[32]=32'h00000000; + field { desc="Addr_L"; sw=rw; swwel=dma_swwel; hw=r; } addr_l[32]=32'h00000000; } dst_addr_l; reg { name="Caliptra AXI DMA Destination Address High"; desc="Contains upper 32-bits of address to which current operation will write data."; - field { desc="Addr_H"; sw=rw; swwel=soc_req; hw=r; } addr_h[32]=32'h00000000; + field { desc="Addr_H"; sw=rw; swwel=dma_swwel; hw=r; } addr_h[32]=32'h00000000; } dst_addr_h; // Byte Count reg { name="Caliptra AXI DMA Byte Count"; - desc="Contains total number of bytes to be transferred by current operation. Zero-based value."; - field { desc="Byte Count"; sw=rw; swwel=soc_req; hw=r; } count[32]=32'h00000000; + desc="Contains total number of bytes to be transferred by current operation."; + field { desc="Byte Count"; sw=rw; swwel=dma_swwel; hw=r; } count[32]=32'h00000000; } byte_count; // Block Size @@ -172,8 +183,9 @@ addrmap axi_dma_reg { without any stalls in between transactions. Must be a multiple of AXI data width. If block size is not aligned to the AXI data width, it will be rounded down. + Must be a power of 2. Value of 4096 or larger is unsupported – AXI native maximum size is 4096."; - field { desc="Block Size"; sw=rw; swwel=soc_req; hw=r; } size[12]=12'h000; + field { desc="Block Size"; sw=rw; swwel=dma_swwel; hw=r; } size[12]=12'h000; field { desc="RESERVED."; sw=r; } rsvd[20]=20'h00000; } block_size; @@ -248,7 +260,6 @@ addrmap axi_dma_reg { default hw = na; default sw = rw; - // FIXME vvv // Specific enables for the events defined in this // event type in the instantiating peripheral. field {desc = "Enable bit for Command Decode Error"; } error_cmd_dec_en = 1'b0; @@ -256,10 +267,8 @@ addrmap axi_dma_reg { field {desc = "Enable bit for AXI Write Error"; } error_axi_wr_en = 1'b0; field {desc = "Enable bit for Mailbox Not Locked Error"; } error_mbox_lock_en = 1'b0; field {desc = "Enable bit for SHA Accel Not Locked Error"; } error_sha_lock_en = 1'b0; - field {desc = "Enable bit for Read FIFO Overflow"; } error_rd_fifo_oflow_en = 1'b0; - field {desc = "Enable bit for Read FIFO Underflow"; } error_rd_fifo_uflow_en = 1'b0; - field {desc = "Enable bit for Write FIFO Overflow"; } error_wr_fifo_oflow_en = 1'b0; - field {desc = "Enable bit for Write FIFO Underflow"; } error_wr_fifo_uflow_en = 1'b0; + field {desc = "Enable bit for FIFO Overflow"; } error_fifo_oflow_en = 1'b0; + field {desc = "Enable bit for FIFO Underflow"; } error_fifo_uflow_en = 1'b0; }; /* ---- Notification Interrupt Enable ---- */ @@ -272,11 +281,11 @@ addrmap axi_dma_reg { // Specific enables for the events defined in this // event type in the instantiating peripheral. - field {desc = "Enable bit for Transaction Done"; } notif_txn_done_en = 1'b0; - field {desc = "Enable bit for Read FIFO Not Empty"; } notif_rd_fifo_not_empty_en = 1'b0; - field {desc = "Enable bit for Read FIFO Full"; } notif_rd_fifo_full_en = 1'b0; - field {desc = "Enable bit for Write FIFO Not Full"; } notif_wr_fifo_not_full_en = 1'b0; - field {desc = "Enable bit for Write FIFO Empty"; } notif_wr_fifo_empty_en = 1'b0; + field {desc = "Enable bit for Transaction Done"; } notif_txn_done_en = 1'b0; + field {desc = "Enable bit for FIFO Empty"; } notif_fifo_empty_en = 1'b0; + field {desc = "Enable bit for FIFO Not Empty"; } notif_fifo_not_empty_en = 1'b0; + field {desc = "Enable bit for FIFO Full"; } notif_fifo_full_en = 1'b0; + field {desc = "Enable bit for FIFO Not Full"; } notif_fifo_not_full_en = 1'b0; }; /* ---- Error Interrupt Status ---- */ @@ -297,10 +306,8 @@ addrmap axi_dma_reg { field {desc = "AXI Write Error status bit"; } error_axi_wr_sts = 1'b0; field {desc = "Mailbox Not Locked Error status bit"; } error_mbox_lock_sts = 1'b0; field {desc = "SHA Accel Not Locked Error status bit"; } error_sha_lock_sts = 1'b0; - field {desc = "Read FIFO Overflow status bit"; } error_rd_fifo_oflow_sts = 1'b0; - field {desc = "Read FIFO Underflow status bit"; } error_rd_fifo_uflow_sts = 1'b0; - field {desc = "Write FIFO Overflow status bit"; } error_wr_fifo_oflow_sts = 1'b0; - field {desc = "Write FIFO Underflow status bit"; } error_wr_fifo_uflow_sts = 1'b0; + field {desc = "FIFO Overflow status bit"; } error_fifo_oflow_sts = 1'b0; + field {desc = "FIFO Underflow status bit"; } error_fifo_uflow_sts = 1'b0; }; /* ---- Notification Interrupt Status ---- */ @@ -316,11 +323,11 @@ addrmap axi_dma_reg { default woclr = true; default level intr; - field {desc = "Transaction Done status bit"; } notif_txn_done_sts = 1'b0; - field {desc = "Read FIFO Not Empty status bit"; } notif_rd_fifo_not_empty_sts = 1'b0; - field {desc = "Read FIFO Full status bit"; } notif_rd_fifo_full_sts = 1'b0; - field {desc = "Write FIFO Not Full status bit"; } notif_wr_fifo_not_full_sts = 1'b0; - field {desc = "Write FIFO Empty status bit"; } notif_wr_fifo_empty_sts = 1'b0; + field {desc = "Transaction Done status bit"; } notif_txn_done_sts = 1'b0; + field {desc = "FIFO Empty status bit"; } notif_fifo_empty_sts = 1'b0; + field {desc = "FIFO Not Empty status bit"; } notif_fifo_not_empty_sts = 1'b0; + field {desc = "FIFO Full status bit"; } notif_fifo_full_sts = 1'b0; + field {desc = "FIFO Not Full status bit"; } notif_fifo_not_full_sts = 1'b0; }; /* ---- Aggregated Interrupt Status ---- */ @@ -358,15 +365,13 @@ addrmap axi_dma_reg { default singlepulse = true; // Instantiate triggers bit-by-bit. - field {desc = "Command Decode Error trigger bit"; } error_cmd_dec_trig = 1'b0; - field {desc = "AXI Read Error trigger bit"; } error_axi_rd_trig = 1'b0; - field {desc = "AXI Write Error trigger bit"; } error_axi_wr_trig = 1'b0; - field {desc = "Mailbox Not Locked Error trigger bit"; } error_mbox_lock_trig = 1'b0; - field {desc = "SHA Accel Not Locked Error trigger bit"; } error_sha_lock_trig = 1'b0; - field {desc = "Read FIFO Overflow trigger bit"; } error_rd_fifo_oflow_trig = 1'b0; - field {desc = "Read FIFO Underflow trigger bit"; } error_rd_fifo_uflow_trig = 1'b0; - field {desc = "Write FIFO Overflow trigger bit"; } error_wr_fifo_oflow_trig = 1'b0; - field {desc = "Write FIFO Underflow trigger bit"; } error_wr_fifo_uflow_trig = 1'b0; + field {desc = "Command Decode Error trigger bit"; } error_cmd_dec_trig = 1'b0; + field {desc = "AXI Read Error trigger bit"; } error_axi_rd_trig = 1'b0; + field {desc = "AXI Write Error trigger bit"; } error_axi_wr_trig = 1'b0; + field {desc = "Mailbox Not Locked Error trigger bit"; } error_mbox_lock_trig = 1'b0; + field {desc = "SHA Accel Not Locked Error trigger bit"; } error_sha_lock_trig = 1'b0; + field {desc = "FIFO Overflow trigger bit"; } error_fifo_oflow_trig = 1'b0; + field {desc = "FIFO Underflow trigger bit"; } error_fifo_uflow_trig = 1'b0; }; /* ---- Notification Interrupt Trigger ---- */ @@ -384,11 +389,11 @@ addrmap axi_dma_reg { default singlepulse = true; // Instantiate triggers bit-by-bit. - field {desc = "Transaction Done trigger bit"; } notif_txn_done_trig = 1'b0; - field {desc = "Read FIFO Not Empty trigger bit"; } notif_rd_fifo_not_empty_trig = 1'b0; - field {desc = "Read FIFO Full trigger bit"; } notif_rd_fifo_full_trig = 1'b0; - field {desc = "Write FIFO Not Full trigger bit"; } notif_wr_fifo_not_full_trig = 1'b0; - field {desc = "Write FIFO Empty trigger bit"; } notif_wr_fifo_empty_trig = 1'b0; + field {desc = "Transaction Done trigger bit"; } notif_txn_done_trig = 1'b0; + field {desc = "FIFO Empty trigger bit"; } notif_fifo_empty_trig = 1'b0; + field {desc = "FIFO Not Empty trigger bit"; } notif_fifo_not_empty_trig = 1'b0; + field {desc = "FIFO Full trigger bit"; } notif_fifo_full_trig = 1'b0; + field {desc = "FIFO Not Full trigger bit"; } notif_fifo_not_full_trig = 1'b0; }; /* ---- Interrupt Statistics Counter Incrementor ---- */ @@ -442,20 +447,18 @@ addrmap axi_dma_reg { notif_intr_trig_t notif_intr_trig_r; /* SW sets notification bit for interrupt testing */ // // // Align this set of registers; number of counters is based on peripheral event requirements // - intr_count_t error_cmd_dec_intr_count_r @0x100; /* Per error */ - intr_count_t error_axi_rd_intr_count_r; /* Per error */ - intr_count_t error_axi_wr_intr_count_r; /* Per error */ - intr_count_t error_mbox_lock_intr_count_r; /* Per error */ - intr_count_t error_sha_lock_intr_count_r; /* Per error */ - intr_count_t error_rd_fifo_oflow_intr_count_r; /* Per error */ - intr_count_t error_rd_fifo_uflow_intr_count_r; /* Per error */ - intr_count_t error_wr_fifo_oflow_intr_count_r; /* Per error */ - intr_count_t error_wr_fifo_uflow_intr_count_r; /* Per error */ - intr_count_t notif_txn_done_intr_count_r @0x180; /* Per notification */ // - intr_count_t notif_rd_fifo_not_empty_intr_count_r; /* Per notification */ // - intr_count_t notif_rd_fifo_full_intr_count_r; /* Per notification */ // - intr_count_t notif_wr_fifo_not_full_intr_count_r; /* Per notification */ // - intr_count_t notif_wr_fifo_empty_intr_count_r; /* Per notification */ // + intr_count_t error_cmd_dec_intr_count_r @0x100; /* Per error */ // + intr_count_t error_axi_rd_intr_count_r; /* Per error */ // + intr_count_t error_axi_wr_intr_count_r; /* Per error */ // + intr_count_t error_mbox_lock_intr_count_r; /* Per error */ // + intr_count_t error_sha_lock_intr_count_r; /* Per error */ // + intr_count_t error_fifo_oflow_intr_count_r; /* Per error */ // + intr_count_t error_fifo_uflow_intr_count_r; /* Per error */ // + intr_count_t notif_txn_done_intr_count_r @0x180; /* Per notification */ // + intr_count_t notif_fifo_empty_intr_count_r; /* Per notification */ // + intr_count_t notif_fifo_not_empty_intr_count_r; /* Per notification */ // + intr_count_t notif_fifo_full_intr_count_r; /* Per notification */ // + intr_count_t notif_fifo_not_full_intr_count_r; /* Per notification */ // // // These registers should be treated by SW as reserved, and ignored. // // Offset at 0x200 gives enough space for 32 Errors and 32 Notifications // @@ -467,15 +470,13 @@ addrmap axi_dma_reg { intr_count_incr_t error_axi_wr_intr_count_incr_r; /* Per error count incrementor pulse */ // intr_count_incr_t error_mbox_lock_intr_count_incr_r; /* Per error count incrementor pulse */ // intr_count_incr_t error_sha_lock_intr_count_incr_r; /* Per error count incrementor pulse */ // - intr_count_incr_t error_rd_fifo_oflow_intr_count_incr_r; /* Per error count incrementor pulse */ // - intr_count_incr_t error_rd_fifo_uflow_intr_count_incr_r; /* Per error count incrementor pulse */ // - intr_count_incr_t error_wr_fifo_oflow_intr_count_incr_r; /* Per error count incrementor pulse */ // - intr_count_incr_t error_wr_fifo_uflow_intr_count_incr_r; /* Per error count incrementor pulse */ // + intr_count_incr_t error_fifo_oflow_intr_count_incr_r; /* Per error count incrementor pulse */ // + intr_count_incr_t error_fifo_uflow_intr_count_incr_r; /* Per error count incrementor pulse */ // intr_count_incr_t notif_txn_done_intr_count_incr_r; /* Per notification count incrementor pulse */ // - intr_count_incr_t notif_rd_fifo_not_empty_intr_count_incr_r; /* Per notification count incrementor pulse */ // - intr_count_incr_t notif_rd_fifo_full_intr_count_incr_r; /* Per notification count incrementor pulse */ // - intr_count_incr_t notif_wr_fifo_not_full_intr_count_incr_r; /* Per notification count incrementor pulse */ // - intr_count_incr_t notif_wr_fifo_empty_intr_count_incr_r; /* Per notification count incrementor pulse */ // + intr_count_incr_t notif_fifo_empty_intr_count_incr_r; /* Per notification count incrementor pulse */ // + intr_count_incr_t notif_fifo_not_empty_intr_count_incr_r; /* Per notification count incrementor pulse */ // + intr_count_incr_t notif_fifo_full_intr_count_incr_r; /* Per notification count incrementor pulse */ // + intr_count_incr_t notif_fifo_not_full_intr_count_incr_r; /* Per notification count incrementor pulse */ // /* ------------------------------------------------------------------------------------------------------------- */ /* ---- Reset assignment for Error Events ---- */ @@ -484,19 +485,15 @@ addrmap axi_dma_reg { error_internal_intr_r.error_axi_wr_sts -> resetsignal = cptra_pwrgood; error_internal_intr_r.error_mbox_lock_sts -> resetsignal = cptra_pwrgood; error_internal_intr_r.error_sha_lock_sts -> resetsignal = cptra_pwrgood; - error_internal_intr_r.error_rd_fifo_oflow_sts -> resetsignal = cptra_pwrgood; - error_internal_intr_r.error_rd_fifo_uflow_sts -> resetsignal = cptra_pwrgood; - error_internal_intr_r.error_wr_fifo_oflow_sts -> resetsignal = cptra_pwrgood; - error_internal_intr_r.error_wr_fifo_uflow_sts -> resetsignal = cptra_pwrgood; + error_internal_intr_r.error_fifo_oflow_sts -> resetsignal = cptra_pwrgood; + error_internal_intr_r.error_fifo_uflow_sts -> resetsignal = cptra_pwrgood; error_cmd_dec_intr_count_r.cnt -> resetsignal = cptra_pwrgood; error_axi_rd_intr_count_r.cnt -> resetsignal = cptra_pwrgood; error_axi_wr_intr_count_r.cnt -> resetsignal = cptra_pwrgood; error_mbox_lock_intr_count_r.cnt -> resetsignal = cptra_pwrgood; error_sha_lock_intr_count_r.cnt -> resetsignal = cptra_pwrgood; - error_rd_fifo_oflow_intr_count_r.cnt -> resetsignal = cptra_pwrgood; - error_rd_fifo_uflow_intr_count_r.cnt -> resetsignal = cptra_pwrgood; - error_wr_fifo_oflow_intr_count_r.cnt -> resetsignal = cptra_pwrgood; - error_wr_fifo_uflow_intr_count_r.cnt -> resetsignal = cptra_pwrgood; + error_fifo_oflow_intr_count_r.cnt -> resetsignal = cptra_pwrgood; + error_fifo_uflow_intr_count_r.cnt -> resetsignal = cptra_pwrgood; // TODO: Use this same reset for the error incrementor pulse too? /* ---- Interrupt Event Dynamic Assignments ---- */ @@ -505,30 +502,26 @@ addrmap axi_dma_reg { error_internal_intr_r.error_axi_wr_sts -> enable = error_intr_en_r.error_axi_wr_en; error_internal_intr_r.error_mbox_lock_sts -> enable = error_intr_en_r.error_mbox_lock_en; error_internal_intr_r.error_sha_lock_sts -> enable = error_intr_en_r.error_sha_lock_en; - error_internal_intr_r.error_rd_fifo_oflow_sts -> enable = error_intr_en_r.error_rd_fifo_oflow_en; - error_internal_intr_r.error_rd_fifo_uflow_sts -> enable = error_intr_en_r.error_rd_fifo_uflow_en; - error_internal_intr_r.error_wr_fifo_oflow_sts -> enable = error_intr_en_r.error_wr_fifo_oflow_en; - error_internal_intr_r.error_wr_fifo_uflow_sts -> enable = error_intr_en_r.error_wr_fifo_uflow_en; - notif_internal_intr_r.notif_txn_done_sts -> enable = notif_intr_en_r.notif_txn_done_en; - notif_internal_intr_r.notif_rd_fifo_not_empty_sts -> enable = notif_intr_en_r.notif_rd_fifo_not_empty_en; - notif_internal_intr_r.notif_rd_fifo_full_sts -> enable = notif_intr_en_r.notif_rd_fifo_full_en; - notif_internal_intr_r.notif_wr_fifo_not_full_sts -> enable = notif_intr_en_r.notif_wr_fifo_not_full_en; - notif_internal_intr_r.notif_wr_fifo_empty_sts -> enable = notif_intr_en_r.notif_wr_fifo_empty_en; + error_internal_intr_r.error_fifo_oflow_sts -> enable = error_intr_en_r.error_fifo_oflow_en; + error_internal_intr_r.error_fifo_uflow_sts -> enable = error_intr_en_r.error_fifo_uflow_en; + notif_internal_intr_r.notif_txn_done_sts -> enable = notif_intr_en_r.notif_txn_done_en; + notif_internal_intr_r.notif_fifo_empty_sts -> enable = notif_intr_en_r.notif_fifo_empty_en; + notif_internal_intr_r.notif_fifo_not_empty_sts -> enable = notif_intr_en_r.notif_fifo_not_empty_en; + notif_internal_intr_r.notif_fifo_full_sts -> enable = notif_intr_en_r.notif_fifo_full_en; + notif_internal_intr_r.notif_fifo_not_full_sts -> enable = notif_intr_en_r.notif_fifo_not_full_en; error_internal_intr_r.error_cmd_dec_sts -> next = error_intr_trig_r.error_cmd_dec_trig; error_internal_intr_r.error_axi_rd_sts -> next = error_intr_trig_r.error_axi_rd_trig; error_internal_intr_r.error_axi_wr_sts -> next = error_intr_trig_r.error_axi_wr_trig; error_internal_intr_r.error_mbox_lock_sts -> next = error_intr_trig_r.error_mbox_lock_trig; error_internal_intr_r.error_sha_lock_sts -> next = error_intr_trig_r.error_sha_lock_trig; - error_internal_intr_r.error_rd_fifo_oflow_sts -> next = error_intr_trig_r.error_rd_fifo_oflow_trig; - error_internal_intr_r.error_rd_fifo_uflow_sts -> next = error_intr_trig_r.error_rd_fifo_uflow_trig; - error_internal_intr_r.error_wr_fifo_oflow_sts -> next = error_intr_trig_r.error_wr_fifo_oflow_trig; - error_internal_intr_r.error_wr_fifo_uflow_sts -> next = error_intr_trig_r.error_wr_fifo_uflow_trig; - notif_internal_intr_r.notif_txn_done_sts -> next = notif_intr_trig_r.notif_txn_done_trig; - notif_internal_intr_r.notif_rd_fifo_not_empty_sts -> next = notif_intr_trig_r.notif_rd_fifo_not_empty_trig; - notif_internal_intr_r.notif_rd_fifo_full_sts -> next = notif_intr_trig_r.notif_rd_fifo_full_trig; - notif_internal_intr_r.notif_wr_fifo_not_full_sts -> next = notif_intr_trig_r.notif_wr_fifo_not_full_trig; - notif_internal_intr_r.notif_wr_fifo_empty_sts -> next = notif_intr_trig_r.notif_wr_fifo_empty_trig; + error_internal_intr_r.error_fifo_oflow_sts -> next = error_intr_trig_r.error_fifo_oflow_trig; + error_internal_intr_r.error_fifo_uflow_sts -> next = error_intr_trig_r.error_fifo_uflow_trig; + notif_internal_intr_r.notif_txn_done_sts -> next = notif_intr_trig_r.notif_txn_done_trig; + notif_internal_intr_r.notif_fifo_empty_sts -> next = notif_intr_trig_r.notif_fifo_empty_trig; + notif_internal_intr_r.notif_fifo_not_empty_sts -> next = notif_intr_trig_r.notif_fifo_not_empty_trig; + notif_internal_intr_r.notif_fifo_full_sts -> next = notif_intr_trig_r.notif_fifo_full_trig; + notif_internal_intr_r.notif_fifo_not_full_sts -> next = notif_intr_trig_r.notif_fifo_not_full_trig; // NOTE: hwset for events is implicitly defined as module input @@ -575,29 +568,17 @@ addrmap axi_dma_reg { error_sha_lock_intr_count_incr_r.pulse -> decr = error_sha_lock_intr_count_incr_r.pulse; // Auto-clear to generate pulse output error_sha_lock_intr_count_r.cnt -> incr = error_sha_lock_intr_count_incr_r.pulse; // Increment coincides with rising edge of interrupt sts bit - error_rd_fifo_oflow_intr_count_incr_r.pulse -> hwset = error_internal_intr_r.error_rd_fifo_oflow_sts -> hwset; // \_____ Capture both firmware and hardware triggered events - error_rd_fifo_oflow_intr_count_incr_r.pulse -> next = error_internal_intr_r.error_rd_fifo_oflow_sts -> next; // / as a pulse to increment the intr_count_r register - error_rd_fifo_oflow_intr_count_incr_r.pulse -> we = error_internal_intr_r.error_rd_fifo_oflow_sts -> next; // Generate a pulse from SW trigger, if set, or default to use the hwset input - error_rd_fifo_oflow_intr_count_incr_r.pulse -> decr = error_rd_fifo_oflow_intr_count_incr_r.pulse; // Auto-clear to generate pulse output - error_rd_fifo_oflow_intr_count_r.cnt -> incr = error_rd_fifo_oflow_intr_count_incr_r.pulse; // Increment coincides with rising edge of interrupt sts bit - - error_rd_fifo_uflow_intr_count_incr_r.pulse -> hwset = error_internal_intr_r.error_rd_fifo_uflow_sts -> hwset; // \_____ Capture both firmware and hardware triggered events - error_rd_fifo_uflow_intr_count_incr_r.pulse -> next = error_internal_intr_r.error_rd_fifo_uflow_sts -> next; // / as a pulse to increment the intr_count_r register - error_rd_fifo_uflow_intr_count_incr_r.pulse -> we = error_internal_intr_r.error_rd_fifo_uflow_sts -> next; // Generate a pulse from SW trigger, if set, or default to use the hwset input - error_rd_fifo_uflow_intr_count_incr_r.pulse -> decr = error_rd_fifo_uflow_intr_count_incr_r.pulse; // Auto-clear to generate pulse output - error_rd_fifo_uflow_intr_count_r.cnt -> incr = error_rd_fifo_uflow_intr_count_incr_r.pulse; // Increment coincides with rising edge of interrupt sts bit - - error_wr_fifo_oflow_intr_count_incr_r.pulse -> hwset = error_internal_intr_r.error_wr_fifo_oflow_sts -> hwset; // \_____ Capture both firmware and hardware triggered events - error_wr_fifo_oflow_intr_count_incr_r.pulse -> next = error_internal_intr_r.error_wr_fifo_oflow_sts -> next; // / as a pulse to increment the intr_count_r register - error_wr_fifo_oflow_intr_count_incr_r.pulse -> we = error_internal_intr_r.error_wr_fifo_oflow_sts -> next; // Generate a pulse from SW trigger, if set, or default to use the hwset input - error_wr_fifo_oflow_intr_count_incr_r.pulse -> decr = error_wr_fifo_oflow_intr_count_incr_r.pulse; // Auto-clear to generate pulse output - error_wr_fifo_oflow_intr_count_r.cnt -> incr = error_wr_fifo_oflow_intr_count_incr_r.pulse; // Increment coincides with rising edge of interrupt sts bit - - error_wr_fifo_uflow_intr_count_incr_r.pulse -> hwset = error_internal_intr_r.error_wr_fifo_uflow_sts -> hwset; // \_____ Capture both firmware and hardware triggered events - error_wr_fifo_uflow_intr_count_incr_r.pulse -> next = error_internal_intr_r.error_wr_fifo_uflow_sts -> next; // / as a pulse to increment the intr_count_r register - error_wr_fifo_uflow_intr_count_incr_r.pulse -> we = error_internal_intr_r.error_wr_fifo_uflow_sts -> next; // Generate a pulse from SW trigger, if set, or default to use the hwset input - error_wr_fifo_uflow_intr_count_incr_r.pulse -> decr = error_wr_fifo_uflow_intr_count_incr_r.pulse; // Auto-clear to generate pulse output - error_wr_fifo_uflow_intr_count_r.cnt -> incr = error_wr_fifo_uflow_intr_count_incr_r.pulse; // Increment coincides with rising edge of interrupt sts bit + error_fifo_oflow_intr_count_incr_r.pulse -> hwset = error_internal_intr_r.error_fifo_oflow_sts -> hwset; // \_____ Capture both firmware and hardware triggered events + error_fifo_oflow_intr_count_incr_r.pulse -> next = error_internal_intr_r.error_fifo_oflow_sts -> next; // / as a pulse to increment the intr_count_r register + error_fifo_oflow_intr_count_incr_r.pulse -> we = error_internal_intr_r.error_fifo_oflow_sts -> next; // Generate a pulse from SW trigger, if set, or default to use the hwset input + error_fifo_oflow_intr_count_incr_r.pulse -> decr = error_fifo_oflow_intr_count_incr_r.pulse; // Auto-clear to generate pulse output + error_fifo_oflow_intr_count_r.cnt -> incr = error_fifo_oflow_intr_count_incr_r.pulse; // Increment coincides with rising edge of interrupt sts bit + + error_fifo_uflow_intr_count_incr_r.pulse -> hwset = error_internal_intr_r.error_fifo_uflow_sts -> hwset; // \_____ Capture both firmware and hardware triggered events + error_fifo_uflow_intr_count_incr_r.pulse -> next = error_internal_intr_r.error_fifo_uflow_sts -> next; // / as a pulse to increment the intr_count_r register + error_fifo_uflow_intr_count_incr_r.pulse -> we = error_internal_intr_r.error_fifo_uflow_sts -> next; // Generate a pulse from SW trigger, if set, or default to use the hwset input + error_fifo_uflow_intr_count_incr_r.pulse -> decr = error_fifo_uflow_intr_count_incr_r.pulse; // Auto-clear to generate pulse output + error_fifo_uflow_intr_count_r.cnt -> incr = error_fifo_uflow_intr_count_incr_r.pulse; // Increment coincides with rising edge of interrupt sts bit notif_txn_done_intr_count_incr_r.pulse -> hwset = notif_internal_intr_r.notif_txn_done_sts -> hwset; // \_____ Capture both firmware and hardware triggered events notif_txn_done_intr_count_incr_r.pulse -> next = notif_internal_intr_r.notif_txn_done_sts -> next; // / as a pulse to increment the intr_count_r register @@ -605,29 +586,29 @@ addrmap axi_dma_reg { notif_txn_done_intr_count_incr_r.pulse -> decr = notif_txn_done_intr_count_incr_r.pulse; // Auto-clear to generate pulse output notif_txn_done_intr_count_r.cnt -> incr = notif_txn_done_intr_count_incr_r.pulse; // Increment coincides with rising edge of interrupt sts bit - notif_rd_fifo_not_empty_intr_count_incr_r.pulse -> hwset = notif_internal_intr_r.notif_rd_fifo_not_empty_sts -> hwset; // \_____ Capture both firmware and hardware triggered events - notif_rd_fifo_not_empty_intr_count_incr_r.pulse -> next = notif_internal_intr_r.notif_rd_fifo_not_empty_sts -> next; // / as a pulse to increment the intr_count_r register - notif_rd_fifo_not_empty_intr_count_incr_r.pulse -> we = notif_internal_intr_r.notif_rd_fifo_not_empty_sts -> next; // Generate a pulse from SW trigger, if set, or default to use the hwset input - notif_rd_fifo_not_empty_intr_count_incr_r.pulse -> decr = notif_rd_fifo_not_empty_intr_count_incr_r.pulse; // Auto-clear to generate pulse output - notif_rd_fifo_not_empty_intr_count_r.cnt -> incr = notif_rd_fifo_not_empty_intr_count_incr_r.pulse; // Increment coincides with rising edge of interrupt sts bit - - notif_rd_fifo_full_intr_count_incr_r.pulse -> hwset = notif_internal_intr_r.notif_rd_fifo_full_sts -> hwset; // \_____ Capture both firmware and hardware triggered events - notif_rd_fifo_full_intr_count_incr_r.pulse -> next = notif_internal_intr_r.notif_rd_fifo_full_sts -> next; // / as a pulse to increment the intr_count_r register - notif_rd_fifo_full_intr_count_incr_r.pulse -> we = notif_internal_intr_r.notif_rd_fifo_full_sts -> next; // Generate a pulse from SW trigger, if set, or default to use the hwset input - notif_rd_fifo_full_intr_count_incr_r.pulse -> decr = notif_rd_fifo_full_intr_count_incr_r.pulse; // Auto-clear to generate pulse output - notif_rd_fifo_full_intr_count_r.cnt -> incr = notif_rd_fifo_full_intr_count_incr_r.pulse; // Increment coincides with rising edge of interrupt sts bit - - notif_wr_fifo_not_full_intr_count_incr_r.pulse -> hwset = notif_internal_intr_r.notif_wr_fifo_not_full_sts -> hwset; // \_____ Capture both firmware and hardware triggered events - notif_wr_fifo_not_full_intr_count_incr_r.pulse -> next = notif_internal_intr_r.notif_wr_fifo_not_full_sts -> next; // / as a pulse to increment the intr_count_r register - notif_wr_fifo_not_full_intr_count_incr_r.pulse -> we = notif_internal_intr_r.notif_wr_fifo_not_full_sts -> next; // Generate a pulse from SW trigger, if set, or default to use the hwset input - notif_wr_fifo_not_full_intr_count_incr_r.pulse -> decr = notif_wr_fifo_not_full_intr_count_incr_r.pulse; // Auto-clear to generate pulse output - notif_wr_fifo_not_full_intr_count_r.cnt -> incr = notif_wr_fifo_not_full_intr_count_incr_r.pulse; // Increment coincides with rising edge of interrupt sts bit - - notif_wr_fifo_empty_intr_count_incr_r.pulse -> hwset = notif_internal_intr_r.notif_wr_fifo_empty_sts -> hwset; // \_____ Capture both firmware and hardware triggered events - notif_wr_fifo_empty_intr_count_incr_r.pulse -> next = notif_internal_intr_r.notif_wr_fifo_empty_sts -> next; // / as a pulse to increment the intr_count_r register - notif_wr_fifo_empty_intr_count_incr_r.pulse -> we = notif_internal_intr_r.notif_wr_fifo_empty_sts -> next; // Generate a pulse from SW trigger, if set, or default to use the hwset input - notif_wr_fifo_empty_intr_count_incr_r.pulse -> decr = notif_wr_fifo_empty_intr_count_incr_r.pulse; // Auto-clear to generate pulse output - notif_wr_fifo_empty_intr_count_r.cnt -> incr = notif_wr_fifo_empty_intr_count_incr_r.pulse; // Increment coincides with rising edge of interrupt sts bit + notif_fifo_empty_intr_count_incr_r.pulse -> hwset = notif_internal_intr_r.notif_fifo_empty_sts -> hwset; // \_____ Capture both firmware and hardware triggered events + notif_fifo_empty_intr_count_incr_r.pulse -> next = notif_internal_intr_r.notif_fifo_empty_sts -> next; // / as a pulse to increment the intr_count_r register + notif_fifo_empty_intr_count_incr_r.pulse -> we = notif_internal_intr_r.notif_fifo_empty_sts -> next; // Generate a pulse from SW trigger, if set, or default to use the hwset input + notif_fifo_empty_intr_count_incr_r.pulse -> decr = notif_fifo_empty_intr_count_incr_r.pulse; // Auto-clear to generate pulse output + notif_fifo_empty_intr_count_r.cnt -> incr = notif_fifo_empty_intr_count_incr_r.pulse; // Increment coincides with rising edge of interrupt sts bit + + notif_fifo_not_empty_intr_count_incr_r.pulse -> hwset = notif_internal_intr_r.notif_fifo_not_empty_sts -> hwset; // \_____ Capture both firmware and hardware triggered events + notif_fifo_not_empty_intr_count_incr_r.pulse -> next = notif_internal_intr_r.notif_fifo_not_empty_sts -> next; // / as a pulse to increment the intr_count_r register + notif_fifo_not_empty_intr_count_incr_r.pulse -> we = notif_internal_intr_r.notif_fifo_not_empty_sts -> next; // Generate a pulse from SW trigger, if set, or default to use the hwset input + notif_fifo_not_empty_intr_count_incr_r.pulse -> decr = notif_fifo_not_empty_intr_count_incr_r.pulse; // Auto-clear to generate pulse output + notif_fifo_not_empty_intr_count_r.cnt -> incr = notif_fifo_not_empty_intr_count_incr_r.pulse; // Increment coincides with rising edge of interrupt sts bit + + notif_fifo_full_intr_count_incr_r.pulse -> hwset = notif_internal_intr_r.notif_fifo_full_sts -> hwset; // \_____ Capture both firmware and hardware triggered events + notif_fifo_full_intr_count_incr_r.pulse -> next = notif_internal_intr_r.notif_fifo_full_sts -> next; // / as a pulse to increment the intr_count_r register + notif_fifo_full_intr_count_incr_r.pulse -> we = notif_internal_intr_r.notif_fifo_full_sts -> next; // Generate a pulse from SW trigger, if set, or default to use the hwset input + notif_fifo_full_intr_count_incr_r.pulse -> decr = notif_fifo_full_intr_count_incr_r.pulse; // Auto-clear to generate pulse output + notif_fifo_full_intr_count_r.cnt -> incr = notif_fifo_full_intr_count_incr_r.pulse; // Increment coincides with rising edge of interrupt sts bit + + notif_fifo_not_full_intr_count_incr_r.pulse -> hwset = notif_internal_intr_r.notif_fifo_not_full_sts -> hwset; // \_____ Capture both firmware and hardware triggered events + notif_fifo_not_full_intr_count_incr_r.pulse -> next = notif_internal_intr_r.notif_fifo_not_full_sts -> next; // / as a pulse to increment the intr_count_r register + notif_fifo_not_full_intr_count_incr_r.pulse -> we = notif_internal_intr_r.notif_fifo_not_full_sts -> next; // Generate a pulse from SW trigger, if set, or default to use the hwset input + notif_fifo_not_full_intr_count_incr_r.pulse -> decr = notif_fifo_not_full_intr_count_incr_r.pulse; // Auto-clear to generate pulse output + notif_fifo_not_full_intr_count_r.cnt -> incr = notif_fifo_not_full_intr_count_incr_r.pulse; // Increment coincides with rising edge of interrupt sts bit }; diff --git a/src/axi/rtl/axi_dma_reg.sv b/src/axi/rtl/axi_dma_reg.sv index e35f09013..c41827cc2 100644 --- a/src/axi/rtl/axi_dma_reg.sv +++ b/src/axi/rtl/axi_dma_reg.sv @@ -94,29 +94,25 @@ module axi_dma_reg ( logic error_axi_wr_intr_count_r; logic error_mbox_lock_intr_count_r; logic error_sha_lock_intr_count_r; - logic error_rd_fifo_oflow_intr_count_r; - logic error_rd_fifo_uflow_intr_count_r; - logic error_wr_fifo_oflow_intr_count_r; - logic error_wr_fifo_uflow_intr_count_r; + logic error_fifo_oflow_intr_count_r; + logic error_fifo_uflow_intr_count_r; logic notif_txn_done_intr_count_r; - logic notif_rd_fifo_not_empty_intr_count_r; - logic notif_rd_fifo_full_intr_count_r; - logic notif_wr_fifo_not_full_intr_count_r; - logic notif_wr_fifo_empty_intr_count_r; + logic notif_fifo_empty_intr_count_r; + logic notif_fifo_not_empty_intr_count_r; + logic notif_fifo_full_intr_count_r; + logic notif_fifo_not_full_intr_count_r; logic error_cmd_dec_intr_count_incr_r; logic error_axi_rd_intr_count_incr_r; logic error_axi_wr_intr_count_incr_r; logic error_mbox_lock_intr_count_incr_r; logic error_sha_lock_intr_count_incr_r; - logic error_rd_fifo_oflow_intr_count_incr_r; - logic error_rd_fifo_uflow_intr_count_incr_r; - logic error_wr_fifo_oflow_intr_count_incr_r; - logic error_wr_fifo_uflow_intr_count_incr_r; + logic error_fifo_oflow_intr_count_incr_r; + logic error_fifo_uflow_intr_count_incr_r; logic notif_txn_done_intr_count_incr_r; - logic notif_rd_fifo_not_empty_intr_count_incr_r; - logic notif_rd_fifo_full_intr_count_incr_r; - logic notif_wr_fifo_not_full_intr_count_incr_r; - logic notif_wr_fifo_empty_intr_count_incr_r; + logic notif_fifo_empty_intr_count_incr_r; + logic notif_fifo_not_empty_intr_count_incr_r; + logic notif_fifo_full_intr_count_incr_r; + logic notif_fifo_not_full_intr_count_incr_r; } intr_block_rf; } decoded_reg_strb_t; decoded_reg_strb_t decoded_reg_strb; @@ -153,29 +149,25 @@ module axi_dma_reg ( decoded_reg_strb.intr_block_rf.error_axi_wr_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h908); decoded_reg_strb.intr_block_rf.error_mbox_lock_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h90c); decoded_reg_strb.intr_block_rf.error_sha_lock_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h910); - decoded_reg_strb.intr_block_rf.error_rd_fifo_oflow_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h914); - decoded_reg_strb.intr_block_rf.error_rd_fifo_uflow_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h918); - decoded_reg_strb.intr_block_rf.error_wr_fifo_oflow_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h91c); - decoded_reg_strb.intr_block_rf.error_wr_fifo_uflow_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h920); + decoded_reg_strb.intr_block_rf.error_fifo_oflow_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h914); + decoded_reg_strb.intr_block_rf.error_fifo_uflow_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h918); decoded_reg_strb.intr_block_rf.notif_txn_done_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h980); - decoded_reg_strb.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h984); - decoded_reg_strb.intr_block_rf.notif_rd_fifo_full_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h988); - decoded_reg_strb.intr_block_rf.notif_wr_fifo_not_full_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h98c); - decoded_reg_strb.intr_block_rf.notif_wr_fifo_empty_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h990); + decoded_reg_strb.intr_block_rf.notif_fifo_empty_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h984); + decoded_reg_strb.intr_block_rf.notif_fifo_not_empty_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h988); + decoded_reg_strb.intr_block_rf.notif_fifo_full_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h98c); + decoded_reg_strb.intr_block_rf.notif_fifo_not_full_intr_count_r = cpuif_req_masked & (cpuif_addr == 12'h990); decoded_reg_strb.intr_block_rf.error_cmd_dec_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha00); decoded_reg_strb.intr_block_rf.error_axi_rd_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha04); decoded_reg_strb.intr_block_rf.error_axi_wr_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha08); decoded_reg_strb.intr_block_rf.error_mbox_lock_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha0c); decoded_reg_strb.intr_block_rf.error_sha_lock_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha10); - decoded_reg_strb.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha14); - decoded_reg_strb.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha18); - decoded_reg_strb.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha1c); - decoded_reg_strb.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha20); - decoded_reg_strb.intr_block_rf.notif_txn_done_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha24); - decoded_reg_strb.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha28); - decoded_reg_strb.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha2c); - decoded_reg_strb.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha30); - decoded_reg_strb.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha34); + decoded_reg_strb.intr_block_rf.error_fifo_oflow_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha14); + decoded_reg_strb.intr_block_rf.error_fifo_uflow_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha18); + decoded_reg_strb.intr_block_rf.notif_txn_done_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha1c); + decoded_reg_strb.intr_block_rf.notif_fifo_empty_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha20); + decoded_reg_strb.intr_block_rf.notif_fifo_not_empty_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha24); + decoded_reg_strb.intr_block_rf.notif_fifo_full_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha28); + decoded_reg_strb.intr_block_rf.notif_fifo_not_full_intr_count_incr_r = cpuif_req_masked & (cpuif_addr == 12'ha2c); end // Pass down signals to next stage @@ -216,7 +208,7 @@ module axi_dma_reg ( } ctrl; struct packed{ struct packed{ - logic [2:0] next; + logic [1:0] next; logic load_next; } axi_dma_fsm_ps; } status0; @@ -291,19 +283,11 @@ module axi_dma_reg ( struct packed{ logic next; logic load_next; - } error_rd_fifo_oflow_en; - struct packed{ - logic next; - logic load_next; - } error_rd_fifo_uflow_en; + } error_fifo_oflow_en; struct packed{ logic next; logic load_next; - } error_wr_fifo_oflow_en; - struct packed{ - logic next; - logic load_next; - } error_wr_fifo_uflow_en; + } error_fifo_uflow_en; } error_intr_en_r; struct packed{ struct packed{ @@ -313,19 +297,19 @@ module axi_dma_reg ( struct packed{ logic next; logic load_next; - } notif_rd_fifo_not_empty_en; + } notif_fifo_empty_en; struct packed{ logic next; logic load_next; - } notif_rd_fifo_full_en; + } notif_fifo_not_empty_en; struct packed{ logic next; logic load_next; - } notif_wr_fifo_not_full_en; + } notif_fifo_full_en; struct packed{ logic next; logic load_next; - } notif_wr_fifo_empty_en; + } notif_fifo_not_full_en; } notif_intr_en_r; struct packed{ struct packed{ @@ -363,19 +347,11 @@ module axi_dma_reg ( struct packed{ logic next; logic load_next; - } error_rd_fifo_oflow_sts; + } error_fifo_oflow_sts; struct packed{ logic next; logic load_next; - } error_rd_fifo_uflow_sts; - struct packed{ - logic next; - logic load_next; - } error_wr_fifo_oflow_sts; - struct packed{ - logic next; - logic load_next; - } error_wr_fifo_uflow_sts; + } error_fifo_uflow_sts; } error_internal_intr_r; struct packed{ struct packed{ @@ -385,19 +361,19 @@ module axi_dma_reg ( struct packed{ logic next; logic load_next; - } notif_rd_fifo_not_empty_sts; + } notif_fifo_empty_sts; struct packed{ logic next; logic load_next; - } notif_rd_fifo_full_sts; + } notif_fifo_not_empty_sts; struct packed{ logic next; logic load_next; - } notif_wr_fifo_not_full_sts; + } notif_fifo_full_sts; struct packed{ logic next; logic load_next; - } notif_wr_fifo_empty_sts; + } notif_fifo_not_full_sts; } notif_internal_intr_r; struct packed{ struct packed{ @@ -423,19 +399,11 @@ module axi_dma_reg ( struct packed{ logic next; logic load_next; - } error_rd_fifo_oflow_trig; - struct packed{ - logic next; - logic load_next; - } error_rd_fifo_uflow_trig; - struct packed{ - logic next; - logic load_next; - } error_wr_fifo_oflow_trig; + } error_fifo_oflow_trig; struct packed{ logic next; logic load_next; - } error_wr_fifo_uflow_trig; + } error_fifo_uflow_trig; } error_intr_trig_r; struct packed{ struct packed{ @@ -445,19 +413,19 @@ module axi_dma_reg ( struct packed{ logic next; logic load_next; - } notif_rd_fifo_not_empty_trig; + } notif_fifo_empty_trig; struct packed{ logic next; logic load_next; - } notif_rd_fifo_full_trig; + } notif_fifo_not_empty_trig; struct packed{ logic next; logic load_next; - } notif_wr_fifo_not_full_trig; + } notif_fifo_full_trig; struct packed{ logic next; logic load_next; - } notif_wr_fifo_empty_trig; + } notif_fifo_not_full_trig; } notif_intr_trig_r; struct packed{ struct packed{ @@ -506,23 +474,7 @@ module axi_dma_reg ( logic incrthreshold; logic incrsaturate; } cnt; - } error_rd_fifo_oflow_intr_count_r; - struct packed{ - struct packed{ - logic [31:0] next; - logic load_next; - logic incrthreshold; - logic incrsaturate; - } cnt; - } error_rd_fifo_uflow_intr_count_r; - struct packed{ - struct packed{ - logic [31:0] next; - logic load_next; - logic incrthreshold; - logic incrsaturate; - } cnt; - } error_wr_fifo_oflow_intr_count_r; + } error_fifo_oflow_intr_count_r; struct packed{ struct packed{ logic [31:0] next; @@ -530,7 +482,7 @@ module axi_dma_reg ( logic incrthreshold; logic incrsaturate; } cnt; - } error_wr_fifo_uflow_intr_count_r; + } error_fifo_uflow_intr_count_r; struct packed{ struct packed{ logic [31:0] next; @@ -546,7 +498,7 @@ module axi_dma_reg ( logic incrthreshold; logic incrsaturate; } cnt; - } notif_rd_fifo_not_empty_intr_count_r; + } notif_fifo_empty_intr_count_r; struct packed{ struct packed{ logic [31:0] next; @@ -554,7 +506,7 @@ module axi_dma_reg ( logic incrthreshold; logic incrsaturate; } cnt; - } notif_rd_fifo_full_intr_count_r; + } notif_fifo_not_empty_intr_count_r; struct packed{ struct packed{ logic [31:0] next; @@ -562,7 +514,7 @@ module axi_dma_reg ( logic incrthreshold; logic incrsaturate; } cnt; - } notif_wr_fifo_not_full_intr_count_r; + } notif_fifo_full_intr_count_r; struct packed{ struct packed{ logic [31:0] next; @@ -570,7 +522,7 @@ module axi_dma_reg ( logic incrthreshold; logic incrsaturate; } cnt; - } notif_wr_fifo_empty_intr_count_r; + } notif_fifo_not_full_intr_count_r; struct packed{ struct packed{ logic next; @@ -618,23 +570,7 @@ module axi_dma_reg ( logic decrthreshold; logic underflow; } pulse; - } error_rd_fifo_oflow_intr_count_incr_r; - struct packed{ - struct packed{ - logic next; - logic load_next; - logic decrthreshold; - logic underflow; - } pulse; - } error_rd_fifo_uflow_intr_count_incr_r; - struct packed{ - struct packed{ - logic next; - logic load_next; - logic decrthreshold; - logic underflow; - } pulse; - } error_wr_fifo_oflow_intr_count_incr_r; + } error_fifo_oflow_intr_count_incr_r; struct packed{ struct packed{ logic next; @@ -642,7 +578,7 @@ module axi_dma_reg ( logic decrthreshold; logic underflow; } pulse; - } error_wr_fifo_uflow_intr_count_incr_r; + } error_fifo_uflow_intr_count_incr_r; struct packed{ struct packed{ logic next; @@ -658,7 +594,7 @@ module axi_dma_reg ( logic decrthreshold; logic underflow; } pulse; - } notif_rd_fifo_not_empty_intr_count_incr_r; + } notif_fifo_empty_intr_count_incr_r; struct packed{ struct packed{ logic next; @@ -666,7 +602,7 @@ module axi_dma_reg ( logic decrthreshold; logic underflow; } pulse; - } notif_rd_fifo_full_intr_count_incr_r; + } notif_fifo_not_empty_intr_count_incr_r; struct packed{ struct packed{ logic next; @@ -674,7 +610,7 @@ module axi_dma_reg ( logic decrthreshold; logic underflow; } pulse; - } notif_wr_fifo_not_full_intr_count_incr_r; + } notif_fifo_full_intr_count_incr_r; struct packed{ struct packed{ logic next; @@ -682,7 +618,7 @@ module axi_dma_reg ( logic decrthreshold; logic underflow; } pulse; - } notif_wr_fifo_empty_intr_count_incr_r; + } notif_fifo_not_full_intr_count_incr_r; } intr_block_rf; } field_combo_t; field_combo_t field_combo; @@ -710,7 +646,7 @@ module axi_dma_reg ( } ctrl; struct packed{ struct packed{ - logic [2:0] value; + logic [1:0] value; } axi_dma_fsm_ps; } status0; struct packed{ @@ -770,16 +706,10 @@ module axi_dma_reg ( } error_sha_lock_en; struct packed{ logic value; - } error_rd_fifo_oflow_en; - struct packed{ - logic value; - } error_rd_fifo_uflow_en; - struct packed{ - logic value; - } error_wr_fifo_oflow_en; + } error_fifo_oflow_en; struct packed{ logic value; - } error_wr_fifo_uflow_en; + } error_fifo_uflow_en; } error_intr_en_r; struct packed{ struct packed{ @@ -787,16 +717,16 @@ module axi_dma_reg ( } notif_txn_done_en; struct packed{ logic value; - } notif_rd_fifo_not_empty_en; + } notif_fifo_empty_en; struct packed{ logic value; - } notif_rd_fifo_full_en; + } notif_fifo_not_empty_en; struct packed{ logic value; - } notif_wr_fifo_not_full_en; + } notif_fifo_full_en; struct packed{ logic value; - } notif_wr_fifo_empty_en; + } notif_fifo_not_full_en; } notif_intr_en_r; struct packed{ struct packed{ @@ -826,16 +756,10 @@ module axi_dma_reg ( } error_sha_lock_sts; struct packed{ logic value; - } error_rd_fifo_oflow_sts; + } error_fifo_oflow_sts; struct packed{ logic value; - } error_rd_fifo_uflow_sts; - struct packed{ - logic value; - } error_wr_fifo_oflow_sts; - struct packed{ - logic value; - } error_wr_fifo_uflow_sts; + } error_fifo_uflow_sts; } error_internal_intr_r; struct packed{ struct packed{ @@ -843,16 +767,16 @@ module axi_dma_reg ( } notif_txn_done_sts; struct packed{ logic value; - } notif_rd_fifo_not_empty_sts; + } notif_fifo_empty_sts; struct packed{ logic value; - } notif_rd_fifo_full_sts; + } notif_fifo_not_empty_sts; struct packed{ logic value; - } notif_wr_fifo_not_full_sts; + } notif_fifo_full_sts; struct packed{ logic value; - } notif_wr_fifo_empty_sts; + } notif_fifo_not_full_sts; } notif_internal_intr_r; struct packed{ struct packed{ @@ -872,16 +796,10 @@ module axi_dma_reg ( } error_sha_lock_trig; struct packed{ logic value; - } error_rd_fifo_oflow_trig; - struct packed{ - logic value; - } error_rd_fifo_uflow_trig; - struct packed{ - logic value; - } error_wr_fifo_oflow_trig; + } error_fifo_oflow_trig; struct packed{ logic value; - } error_wr_fifo_uflow_trig; + } error_fifo_uflow_trig; } error_intr_trig_r; struct packed{ struct packed{ @@ -889,16 +807,16 @@ module axi_dma_reg ( } notif_txn_done_trig; struct packed{ logic value; - } notif_rd_fifo_not_empty_trig; + } notif_fifo_empty_trig; struct packed{ logic value; - } notif_rd_fifo_full_trig; + } notif_fifo_not_empty_trig; struct packed{ logic value; - } notif_wr_fifo_not_full_trig; + } notif_fifo_full_trig; struct packed{ logic value; - } notif_wr_fifo_empty_trig; + } notif_fifo_not_full_trig; } notif_intr_trig_r; struct packed{ struct packed{ @@ -929,22 +847,12 @@ module axi_dma_reg ( struct packed{ logic [31:0] value; } cnt; - } error_rd_fifo_oflow_intr_count_r; + } error_fifo_oflow_intr_count_r; struct packed{ struct packed{ logic [31:0] value; } cnt; - } error_rd_fifo_uflow_intr_count_r; - struct packed{ - struct packed{ - logic [31:0] value; - } cnt; - } error_wr_fifo_oflow_intr_count_r; - struct packed{ - struct packed{ - logic [31:0] value; - } cnt; - } error_wr_fifo_uflow_intr_count_r; + } error_fifo_uflow_intr_count_r; struct packed{ struct packed{ logic [31:0] value; @@ -954,22 +862,22 @@ module axi_dma_reg ( struct packed{ logic [31:0] value; } cnt; - } notif_rd_fifo_not_empty_intr_count_r; + } notif_fifo_empty_intr_count_r; struct packed{ struct packed{ logic [31:0] value; } cnt; - } notif_rd_fifo_full_intr_count_r; + } notif_fifo_not_empty_intr_count_r; struct packed{ struct packed{ logic [31:0] value; } cnt; - } notif_wr_fifo_not_full_intr_count_r; + } notif_fifo_full_intr_count_r; struct packed{ struct packed{ logic [31:0] value; } cnt; - } notif_wr_fifo_empty_intr_count_r; + } notif_fifo_not_full_intr_count_r; struct packed{ struct packed{ logic value; @@ -999,22 +907,12 @@ module axi_dma_reg ( struct packed{ logic value; } pulse; - } error_rd_fifo_oflow_intr_count_incr_r; - struct packed{ - struct packed{ - logic value; - } pulse; - } error_rd_fifo_uflow_intr_count_incr_r; - struct packed{ - struct packed{ - logic value; - } pulse; - } error_wr_fifo_oflow_intr_count_incr_r; + } error_fifo_oflow_intr_count_incr_r; struct packed{ struct packed{ logic value; } pulse; - } error_wr_fifo_uflow_intr_count_incr_r; + } error_fifo_uflow_intr_count_incr_r; struct packed{ struct packed{ logic value; @@ -1024,22 +922,22 @@ module axi_dma_reg ( struct packed{ logic value; } pulse; - } notif_rd_fifo_not_empty_intr_count_incr_r; + } notif_fifo_empty_intr_count_incr_r; struct packed{ struct packed{ logic value; } pulse; - } notif_rd_fifo_full_intr_count_incr_r; + } notif_fifo_not_empty_intr_count_incr_r; struct packed{ struct packed{ logic value; } pulse; - } notif_wr_fifo_not_full_intr_count_incr_r; + } notif_fifo_full_intr_count_incr_r; struct packed{ struct packed{ logic value; } pulse; - } notif_wr_fifo_empty_intr_count_incr_r; + } notif_fifo_not_full_intr_count_incr_r; } intr_block_rf; } field_storage_t; field_storage_t field_storage; @@ -1050,7 +948,7 @@ module axi_dma_reg ( automatic logic load_next_c; next_c = field_storage.ctrl.go.value; load_next_c = '0; - if(decoded_reg_strb.ctrl && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 set + if(decoded_reg_strb.ctrl && decoded_req_is_wr && !(hwif_in.dma_swwel)) begin // SW write 1 set next_c = field_storage.ctrl.go.value | (decoded_wr_data[0:0] & decoded_wr_biten[0:0]); load_next_c = '1; end else if(hwif_in.ctrl.go.hwclr) begin // HW Clear @@ -1099,7 +997,7 @@ module axi_dma_reg ( automatic logic load_next_c; next_c = field_storage.ctrl.rd_route.value; load_next_c = '0; - if(decoded_reg_strb.ctrl && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + if(decoded_reg_strb.ctrl && decoded_req_is_wr && !(hwif_in.dma_swwel)) begin // SW write next_c = (field_storage.ctrl.rd_route.value & ~decoded_wr_biten[17:16]) | (decoded_wr_data[17:16] & decoded_wr_biten[17:16]); load_next_c = '1; end @@ -1120,7 +1018,7 @@ module axi_dma_reg ( automatic logic load_next_c; next_c = field_storage.ctrl.rd_fixed.value; load_next_c = '0; - if(decoded_reg_strb.ctrl && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + if(decoded_reg_strb.ctrl && decoded_req_is_wr && !(hwif_in.dma_swwel)) begin // SW write next_c = (field_storage.ctrl.rd_fixed.value & ~decoded_wr_biten[20:20]) | (decoded_wr_data[20:20] & decoded_wr_biten[20:20]); load_next_c = '1; end @@ -1141,7 +1039,7 @@ module axi_dma_reg ( automatic logic load_next_c; next_c = field_storage.ctrl.wr_route.value; load_next_c = '0; - if(decoded_reg_strb.ctrl && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + if(decoded_reg_strb.ctrl && decoded_req_is_wr && !(hwif_in.dma_swwel)) begin // SW write next_c = (field_storage.ctrl.wr_route.value & ~decoded_wr_biten[25:24]) | (decoded_wr_data[25:24] & decoded_wr_biten[25:24]); load_next_c = '1; end @@ -1162,7 +1060,7 @@ module axi_dma_reg ( automatic logic load_next_c; next_c = field_storage.ctrl.wr_fixed.value; load_next_c = '0; - if(decoded_reg_strb.ctrl && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + if(decoded_reg_strb.ctrl && decoded_req_is_wr && !(hwif_in.dma_swwel)) begin // SW write next_c = (field_storage.ctrl.wr_fixed.value & ~decoded_wr_biten[28:28]) | (decoded_wr_data[28:28] & decoded_wr_biten[28:28]); load_next_c = '1; end @@ -1179,7 +1077,7 @@ module axi_dma_reg ( assign hwif_out.ctrl.wr_fixed.value = field_storage.ctrl.wr_fixed.value; // Field: axi_dma_reg.status0.axi_dma_fsm_ps always_comb begin - automatic logic [2:0] next_c; + automatic logic [1:0] next_c; automatic logic load_next_c; next_c = field_storage.status0.axi_dma_fsm_ps.value; load_next_c = '0; @@ -1192,7 +1090,7 @@ module axi_dma_reg ( end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.status0.axi_dma_fsm_ps.value <= 3'h0; + field_storage.status0.axi_dma_fsm_ps.value <= 2'h0; end else if(field_combo.status0.axi_dma_fsm_ps.load_next) begin field_storage.status0.axi_dma_fsm_ps.value <= field_combo.status0.axi_dma_fsm_ps.next; end @@ -1204,7 +1102,7 @@ module axi_dma_reg ( automatic logic load_next_c; next_c = field_storage.src_addr_l.addr_l.value; load_next_c = '0; - if(decoded_reg_strb.src_addr_l && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + if(decoded_reg_strb.src_addr_l && decoded_req_is_wr && !(hwif_in.dma_swwel)) begin // SW write next_c = (field_storage.src_addr_l.addr_l.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); load_next_c = '1; end @@ -1225,7 +1123,7 @@ module axi_dma_reg ( automatic logic load_next_c; next_c = field_storage.src_addr_h.addr_h.value; load_next_c = '0; - if(decoded_reg_strb.src_addr_h && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + if(decoded_reg_strb.src_addr_h && decoded_req_is_wr && !(hwif_in.dma_swwel)) begin // SW write next_c = (field_storage.src_addr_h.addr_h.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); load_next_c = '1; end @@ -1246,7 +1144,7 @@ module axi_dma_reg ( automatic logic load_next_c; next_c = field_storage.dst_addr_l.addr_l.value; load_next_c = '0; - if(decoded_reg_strb.dst_addr_l && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + if(decoded_reg_strb.dst_addr_l && decoded_req_is_wr && !(hwif_in.dma_swwel)) begin // SW write next_c = (field_storage.dst_addr_l.addr_l.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); load_next_c = '1; end @@ -1267,7 +1165,7 @@ module axi_dma_reg ( automatic logic load_next_c; next_c = field_storage.dst_addr_h.addr_h.value; load_next_c = '0; - if(decoded_reg_strb.dst_addr_h && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + if(decoded_reg_strb.dst_addr_h && decoded_req_is_wr && !(hwif_in.dma_swwel)) begin // SW write next_c = (field_storage.dst_addr_h.addr_h.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); load_next_c = '1; end @@ -1288,7 +1186,7 @@ module axi_dma_reg ( automatic logic load_next_c; next_c = field_storage.byte_count.count.value; load_next_c = '0; - if(decoded_reg_strb.byte_count && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + if(decoded_reg_strb.byte_count && decoded_req_is_wr && !(hwif_in.dma_swwel)) begin // SW write next_c = (field_storage.byte_count.count.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); load_next_c = '1; end @@ -1309,7 +1207,7 @@ module axi_dma_reg ( automatic logic load_next_c; next_c = field_storage.block_size.size.value; load_next_c = '0; - if(decoded_reg_strb.block_size && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + if(decoded_reg_strb.block_size && decoded_req_is_wr && !(hwif_in.dma_swwel)) begin // SW write next_c = (field_storage.block_size.size.value & ~decoded_wr_biten[11:0]) | (decoded_wr_data[11:0] & decoded_wr_biten[11:0]); load_next_c = '1; end @@ -1466,84 +1364,44 @@ module axi_dma_reg ( field_storage.intr_block_rf.error_intr_en_r.error_sha_lock_en.value <= field_combo.intr_block_rf.error_intr_en_r.error_sha_lock_en.next; end end - // Field: axi_dma_reg.intr_block_rf.error_intr_en_r.error_rd_fifo_oflow_en - always_comb begin - automatic logic [0:0] next_c; - automatic logic load_next_c; - next_c = field_storage.intr_block_rf.error_intr_en_r.error_rd_fifo_oflow_en.value; - load_next_c = '0; - if(decoded_reg_strb.intr_block_rf.error_intr_en_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write - next_c = (field_storage.intr_block_rf.error_intr_en_r.error_rd_fifo_oflow_en.value & ~decoded_wr_biten[5:5]) | (decoded_wr_data[5:5] & decoded_wr_biten[5:5]); - load_next_c = '1; - end - field_combo.intr_block_rf.error_intr_en_r.error_rd_fifo_oflow_en.next = next_c; - field_combo.intr_block_rf.error_intr_en_r.error_rd_fifo_oflow_en.load_next = load_next_c; - end - always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin - if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.error_intr_en_r.error_rd_fifo_oflow_en.value <= 1'h0; - end else if(field_combo.intr_block_rf.error_intr_en_r.error_rd_fifo_oflow_en.load_next) begin - field_storage.intr_block_rf.error_intr_en_r.error_rd_fifo_oflow_en.value <= field_combo.intr_block_rf.error_intr_en_r.error_rd_fifo_oflow_en.next; - end - end - // Field: axi_dma_reg.intr_block_rf.error_intr_en_r.error_rd_fifo_uflow_en + // Field: axi_dma_reg.intr_block_rf.error_intr_en_r.error_fifo_oflow_en always_comb begin automatic logic [0:0] next_c; automatic logic load_next_c; - next_c = field_storage.intr_block_rf.error_intr_en_r.error_rd_fifo_uflow_en.value; + next_c = field_storage.intr_block_rf.error_intr_en_r.error_fifo_oflow_en.value; load_next_c = '0; if(decoded_reg_strb.intr_block_rf.error_intr_en_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write - next_c = (field_storage.intr_block_rf.error_intr_en_r.error_rd_fifo_uflow_en.value & ~decoded_wr_biten[6:6]) | (decoded_wr_data[6:6] & decoded_wr_biten[6:6]); + next_c = (field_storage.intr_block_rf.error_intr_en_r.error_fifo_oflow_en.value & ~decoded_wr_biten[5:5]) | (decoded_wr_data[5:5] & decoded_wr_biten[5:5]); load_next_c = '1; end - field_combo.intr_block_rf.error_intr_en_r.error_rd_fifo_uflow_en.next = next_c; - field_combo.intr_block_rf.error_intr_en_r.error_rd_fifo_uflow_en.load_next = load_next_c; + field_combo.intr_block_rf.error_intr_en_r.error_fifo_oflow_en.next = next_c; + field_combo.intr_block_rf.error_intr_en_r.error_fifo_oflow_en.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.error_intr_en_r.error_rd_fifo_uflow_en.value <= 1'h0; - end else if(field_combo.intr_block_rf.error_intr_en_r.error_rd_fifo_uflow_en.load_next) begin - field_storage.intr_block_rf.error_intr_en_r.error_rd_fifo_uflow_en.value <= field_combo.intr_block_rf.error_intr_en_r.error_rd_fifo_uflow_en.next; + field_storage.intr_block_rf.error_intr_en_r.error_fifo_oflow_en.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_intr_en_r.error_fifo_oflow_en.load_next) begin + field_storage.intr_block_rf.error_intr_en_r.error_fifo_oflow_en.value <= field_combo.intr_block_rf.error_intr_en_r.error_fifo_oflow_en.next; end end - // Field: axi_dma_reg.intr_block_rf.error_intr_en_r.error_wr_fifo_oflow_en + // Field: axi_dma_reg.intr_block_rf.error_intr_en_r.error_fifo_uflow_en always_comb begin automatic logic [0:0] next_c; automatic logic load_next_c; - next_c = field_storage.intr_block_rf.error_intr_en_r.error_wr_fifo_oflow_en.value; + next_c = field_storage.intr_block_rf.error_intr_en_r.error_fifo_uflow_en.value; load_next_c = '0; if(decoded_reg_strb.intr_block_rf.error_intr_en_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write - next_c = (field_storage.intr_block_rf.error_intr_en_r.error_wr_fifo_oflow_en.value & ~decoded_wr_biten[7:7]) | (decoded_wr_data[7:7] & decoded_wr_biten[7:7]); + next_c = (field_storage.intr_block_rf.error_intr_en_r.error_fifo_uflow_en.value & ~decoded_wr_biten[6:6]) | (decoded_wr_data[6:6] & decoded_wr_biten[6:6]); load_next_c = '1; end - field_combo.intr_block_rf.error_intr_en_r.error_wr_fifo_oflow_en.next = next_c; - field_combo.intr_block_rf.error_intr_en_r.error_wr_fifo_oflow_en.load_next = load_next_c; + field_combo.intr_block_rf.error_intr_en_r.error_fifo_uflow_en.next = next_c; + field_combo.intr_block_rf.error_intr_en_r.error_fifo_uflow_en.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.error_intr_en_r.error_wr_fifo_oflow_en.value <= 1'h0; - end else if(field_combo.intr_block_rf.error_intr_en_r.error_wr_fifo_oflow_en.load_next) begin - field_storage.intr_block_rf.error_intr_en_r.error_wr_fifo_oflow_en.value <= field_combo.intr_block_rf.error_intr_en_r.error_wr_fifo_oflow_en.next; - end - end - // Field: axi_dma_reg.intr_block_rf.error_intr_en_r.error_wr_fifo_uflow_en - always_comb begin - automatic logic [0:0] next_c; - automatic logic load_next_c; - next_c = field_storage.intr_block_rf.error_intr_en_r.error_wr_fifo_uflow_en.value; - load_next_c = '0; - if(decoded_reg_strb.intr_block_rf.error_intr_en_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write - next_c = (field_storage.intr_block_rf.error_intr_en_r.error_wr_fifo_uflow_en.value & ~decoded_wr_biten[8:8]) | (decoded_wr_data[8:8] & decoded_wr_biten[8:8]); - load_next_c = '1; - end - field_combo.intr_block_rf.error_intr_en_r.error_wr_fifo_uflow_en.next = next_c; - field_combo.intr_block_rf.error_intr_en_r.error_wr_fifo_uflow_en.load_next = load_next_c; - end - always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin - if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.error_intr_en_r.error_wr_fifo_uflow_en.value <= 1'h0; - end else if(field_combo.intr_block_rf.error_intr_en_r.error_wr_fifo_uflow_en.load_next) begin - field_storage.intr_block_rf.error_intr_en_r.error_wr_fifo_uflow_en.value <= field_combo.intr_block_rf.error_intr_en_r.error_wr_fifo_uflow_en.next; + field_storage.intr_block_rf.error_intr_en_r.error_fifo_uflow_en.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_intr_en_r.error_fifo_uflow_en.load_next) begin + field_storage.intr_block_rf.error_intr_en_r.error_fifo_uflow_en.value <= field_combo.intr_block_rf.error_intr_en_r.error_fifo_uflow_en.next; end end // Field: axi_dma_reg.intr_block_rf.notif_intr_en_r.notif_txn_done_en @@ -1566,84 +1424,84 @@ module axi_dma_reg ( field_storage.intr_block_rf.notif_intr_en_r.notif_txn_done_en.value <= field_combo.intr_block_rf.notif_intr_en_r.notif_txn_done_en.next; end end - // Field: axi_dma_reg.intr_block_rf.notif_intr_en_r.notif_rd_fifo_not_empty_en + // Field: axi_dma_reg.intr_block_rf.notif_intr_en_r.notif_fifo_empty_en always_comb begin automatic logic [0:0] next_c; automatic logic load_next_c; - next_c = field_storage.intr_block_rf.notif_intr_en_r.notif_rd_fifo_not_empty_en.value; + next_c = field_storage.intr_block_rf.notif_intr_en_r.notif_fifo_empty_en.value; load_next_c = '0; if(decoded_reg_strb.intr_block_rf.notif_intr_en_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write - next_c = (field_storage.intr_block_rf.notif_intr_en_r.notif_rd_fifo_not_empty_en.value & ~decoded_wr_biten[1:1]) | (decoded_wr_data[1:1] & decoded_wr_biten[1:1]); + next_c = (field_storage.intr_block_rf.notif_intr_en_r.notif_fifo_empty_en.value & ~decoded_wr_biten[1:1]) | (decoded_wr_data[1:1] & decoded_wr_biten[1:1]); load_next_c = '1; end - field_combo.intr_block_rf.notif_intr_en_r.notif_rd_fifo_not_empty_en.next = next_c; - field_combo.intr_block_rf.notif_intr_en_r.notif_rd_fifo_not_empty_en.load_next = load_next_c; + field_combo.intr_block_rf.notif_intr_en_r.notif_fifo_empty_en.next = next_c; + field_combo.intr_block_rf.notif_intr_en_r.notif_fifo_empty_en.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.notif_intr_en_r.notif_rd_fifo_not_empty_en.value <= 1'h0; - end else if(field_combo.intr_block_rf.notif_intr_en_r.notif_rd_fifo_not_empty_en.load_next) begin - field_storage.intr_block_rf.notif_intr_en_r.notif_rd_fifo_not_empty_en.value <= field_combo.intr_block_rf.notif_intr_en_r.notif_rd_fifo_not_empty_en.next; + field_storage.intr_block_rf.notif_intr_en_r.notif_fifo_empty_en.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_intr_en_r.notif_fifo_empty_en.load_next) begin + field_storage.intr_block_rf.notif_intr_en_r.notif_fifo_empty_en.value <= field_combo.intr_block_rf.notif_intr_en_r.notif_fifo_empty_en.next; end end - // Field: axi_dma_reg.intr_block_rf.notif_intr_en_r.notif_rd_fifo_full_en + // Field: axi_dma_reg.intr_block_rf.notif_intr_en_r.notif_fifo_not_empty_en always_comb begin automatic logic [0:0] next_c; automatic logic load_next_c; - next_c = field_storage.intr_block_rf.notif_intr_en_r.notif_rd_fifo_full_en.value; + next_c = field_storage.intr_block_rf.notif_intr_en_r.notif_fifo_not_empty_en.value; load_next_c = '0; if(decoded_reg_strb.intr_block_rf.notif_intr_en_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write - next_c = (field_storage.intr_block_rf.notif_intr_en_r.notif_rd_fifo_full_en.value & ~decoded_wr_biten[2:2]) | (decoded_wr_data[2:2] & decoded_wr_biten[2:2]); + next_c = (field_storage.intr_block_rf.notif_intr_en_r.notif_fifo_not_empty_en.value & ~decoded_wr_biten[2:2]) | (decoded_wr_data[2:2] & decoded_wr_biten[2:2]); load_next_c = '1; end - field_combo.intr_block_rf.notif_intr_en_r.notif_rd_fifo_full_en.next = next_c; - field_combo.intr_block_rf.notif_intr_en_r.notif_rd_fifo_full_en.load_next = load_next_c; + field_combo.intr_block_rf.notif_intr_en_r.notif_fifo_not_empty_en.next = next_c; + field_combo.intr_block_rf.notif_intr_en_r.notif_fifo_not_empty_en.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.notif_intr_en_r.notif_rd_fifo_full_en.value <= 1'h0; - end else if(field_combo.intr_block_rf.notif_intr_en_r.notif_rd_fifo_full_en.load_next) begin - field_storage.intr_block_rf.notif_intr_en_r.notif_rd_fifo_full_en.value <= field_combo.intr_block_rf.notif_intr_en_r.notif_rd_fifo_full_en.next; + field_storage.intr_block_rf.notif_intr_en_r.notif_fifo_not_empty_en.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_intr_en_r.notif_fifo_not_empty_en.load_next) begin + field_storage.intr_block_rf.notif_intr_en_r.notif_fifo_not_empty_en.value <= field_combo.intr_block_rf.notif_intr_en_r.notif_fifo_not_empty_en.next; end end - // Field: axi_dma_reg.intr_block_rf.notif_intr_en_r.notif_wr_fifo_not_full_en + // Field: axi_dma_reg.intr_block_rf.notif_intr_en_r.notif_fifo_full_en always_comb begin automatic logic [0:0] next_c; automatic logic load_next_c; - next_c = field_storage.intr_block_rf.notif_intr_en_r.notif_wr_fifo_not_full_en.value; + next_c = field_storage.intr_block_rf.notif_intr_en_r.notif_fifo_full_en.value; load_next_c = '0; if(decoded_reg_strb.intr_block_rf.notif_intr_en_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write - next_c = (field_storage.intr_block_rf.notif_intr_en_r.notif_wr_fifo_not_full_en.value & ~decoded_wr_biten[3:3]) | (decoded_wr_data[3:3] & decoded_wr_biten[3:3]); + next_c = (field_storage.intr_block_rf.notif_intr_en_r.notif_fifo_full_en.value & ~decoded_wr_biten[3:3]) | (decoded_wr_data[3:3] & decoded_wr_biten[3:3]); load_next_c = '1; end - field_combo.intr_block_rf.notif_intr_en_r.notif_wr_fifo_not_full_en.next = next_c; - field_combo.intr_block_rf.notif_intr_en_r.notif_wr_fifo_not_full_en.load_next = load_next_c; + field_combo.intr_block_rf.notif_intr_en_r.notif_fifo_full_en.next = next_c; + field_combo.intr_block_rf.notif_intr_en_r.notif_fifo_full_en.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.notif_intr_en_r.notif_wr_fifo_not_full_en.value <= 1'h0; - end else if(field_combo.intr_block_rf.notif_intr_en_r.notif_wr_fifo_not_full_en.load_next) begin - field_storage.intr_block_rf.notif_intr_en_r.notif_wr_fifo_not_full_en.value <= field_combo.intr_block_rf.notif_intr_en_r.notif_wr_fifo_not_full_en.next; + field_storage.intr_block_rf.notif_intr_en_r.notif_fifo_full_en.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_intr_en_r.notif_fifo_full_en.load_next) begin + field_storage.intr_block_rf.notif_intr_en_r.notif_fifo_full_en.value <= field_combo.intr_block_rf.notif_intr_en_r.notif_fifo_full_en.next; end end - // Field: axi_dma_reg.intr_block_rf.notif_intr_en_r.notif_wr_fifo_empty_en + // Field: axi_dma_reg.intr_block_rf.notif_intr_en_r.notif_fifo_not_full_en always_comb begin automatic logic [0:0] next_c; automatic logic load_next_c; - next_c = field_storage.intr_block_rf.notif_intr_en_r.notif_wr_fifo_empty_en.value; + next_c = field_storage.intr_block_rf.notif_intr_en_r.notif_fifo_not_full_en.value; load_next_c = '0; if(decoded_reg_strb.intr_block_rf.notif_intr_en_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write - next_c = (field_storage.intr_block_rf.notif_intr_en_r.notif_wr_fifo_empty_en.value & ~decoded_wr_biten[4:4]) | (decoded_wr_data[4:4] & decoded_wr_biten[4:4]); + next_c = (field_storage.intr_block_rf.notif_intr_en_r.notif_fifo_not_full_en.value & ~decoded_wr_biten[4:4]) | (decoded_wr_data[4:4] & decoded_wr_biten[4:4]); load_next_c = '1; end - field_combo.intr_block_rf.notif_intr_en_r.notif_wr_fifo_empty_en.next = next_c; - field_combo.intr_block_rf.notif_intr_en_r.notif_wr_fifo_empty_en.load_next = load_next_c; + field_combo.intr_block_rf.notif_intr_en_r.notif_fifo_not_full_en.next = next_c; + field_combo.intr_block_rf.notif_intr_en_r.notif_fifo_not_full_en.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.notif_intr_en_r.notif_wr_fifo_empty_en.value <= 1'h0; - end else if(field_combo.intr_block_rf.notif_intr_en_r.notif_wr_fifo_empty_en.load_next) begin - field_storage.intr_block_rf.notif_intr_en_r.notif_wr_fifo_empty_en.value <= field_combo.intr_block_rf.notif_intr_en_r.notif_wr_fifo_empty_en.next; + field_storage.intr_block_rf.notif_intr_en_r.notif_fifo_not_full_en.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_intr_en_r.notif_fifo_not_full_en.load_next) begin + field_storage.intr_block_rf.notif_intr_en_r.notif_fifo_not_full_en.value <= field_combo.intr_block_rf.notif_intr_en_r.notif_fifo_not_full_en.next; end end // Field: axi_dma_reg.intr_block_rf.error_global_intr_r.agg_sts @@ -1820,108 +1678,56 @@ module axi_dma_reg ( field_storage.intr_block_rf.error_internal_intr_r.error_sha_lock_sts.value <= field_combo.intr_block_rf.error_internal_intr_r.error_sha_lock_sts.next; end end - // Field: axi_dma_reg.intr_block_rf.error_internal_intr_r.error_rd_fifo_oflow_sts - always_comb begin - automatic logic [0:0] next_c; - automatic logic load_next_c; - next_c = field_storage.intr_block_rf.error_internal_intr_r.error_rd_fifo_oflow_sts.value; - load_next_c = '0; - if(field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_oflow_trig.value != '0) begin // stickybit - next_c = field_storage.intr_block_rf.error_internal_intr_r.error_rd_fifo_oflow_sts.value | field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_oflow_trig.value; - load_next_c = '1; - end else if(hwif_in.intr_block_rf.error_internal_intr_r.error_rd_fifo_oflow_sts.hwset) begin // HW Set - next_c = '1; - load_next_c = '1; - end else if(decoded_reg_strb.intr_block_rf.error_internal_intr_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 clear - next_c = field_storage.intr_block_rf.error_internal_intr_r.error_rd_fifo_oflow_sts.value & ~(decoded_wr_data[5:5] & decoded_wr_biten[5:5]); - load_next_c = '1; - end - field_combo.intr_block_rf.error_internal_intr_r.error_rd_fifo_oflow_sts.next = next_c; - field_combo.intr_block_rf.error_internal_intr_r.error_rd_fifo_oflow_sts.load_next = load_next_c; - end - always_ff @(posedge clk or negedge hwif_in.cptra_pwrgood) begin - if(~hwif_in.cptra_pwrgood) begin - field_storage.intr_block_rf.error_internal_intr_r.error_rd_fifo_oflow_sts.value <= 1'h0; - end else if(field_combo.intr_block_rf.error_internal_intr_r.error_rd_fifo_oflow_sts.load_next) begin - field_storage.intr_block_rf.error_internal_intr_r.error_rd_fifo_oflow_sts.value <= field_combo.intr_block_rf.error_internal_intr_r.error_rd_fifo_oflow_sts.next; - end - end - // Field: axi_dma_reg.intr_block_rf.error_internal_intr_r.error_rd_fifo_uflow_sts - always_comb begin - automatic logic [0:0] next_c; - automatic logic load_next_c; - next_c = field_storage.intr_block_rf.error_internal_intr_r.error_rd_fifo_uflow_sts.value; - load_next_c = '0; - if(field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_uflow_trig.value != '0) begin // stickybit - next_c = field_storage.intr_block_rf.error_internal_intr_r.error_rd_fifo_uflow_sts.value | field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_uflow_trig.value; - load_next_c = '1; - end else if(hwif_in.intr_block_rf.error_internal_intr_r.error_rd_fifo_uflow_sts.hwset) begin // HW Set - next_c = '1; - load_next_c = '1; - end else if(decoded_reg_strb.intr_block_rf.error_internal_intr_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 clear - next_c = field_storage.intr_block_rf.error_internal_intr_r.error_rd_fifo_uflow_sts.value & ~(decoded_wr_data[6:6] & decoded_wr_biten[6:6]); - load_next_c = '1; - end - field_combo.intr_block_rf.error_internal_intr_r.error_rd_fifo_uflow_sts.next = next_c; - field_combo.intr_block_rf.error_internal_intr_r.error_rd_fifo_uflow_sts.load_next = load_next_c; - end - always_ff @(posedge clk or negedge hwif_in.cptra_pwrgood) begin - if(~hwif_in.cptra_pwrgood) begin - field_storage.intr_block_rf.error_internal_intr_r.error_rd_fifo_uflow_sts.value <= 1'h0; - end else if(field_combo.intr_block_rf.error_internal_intr_r.error_rd_fifo_uflow_sts.load_next) begin - field_storage.intr_block_rf.error_internal_intr_r.error_rd_fifo_uflow_sts.value <= field_combo.intr_block_rf.error_internal_intr_r.error_rd_fifo_uflow_sts.next; - end - end - // Field: axi_dma_reg.intr_block_rf.error_internal_intr_r.error_wr_fifo_oflow_sts + // Field: axi_dma_reg.intr_block_rf.error_internal_intr_r.error_fifo_oflow_sts always_comb begin automatic logic [0:0] next_c; automatic logic load_next_c; - next_c = field_storage.intr_block_rf.error_internal_intr_r.error_wr_fifo_oflow_sts.value; + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_fifo_oflow_sts.value; load_next_c = '0; - if(field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_oflow_trig.value != '0) begin // stickybit - next_c = field_storage.intr_block_rf.error_internal_intr_r.error_wr_fifo_oflow_sts.value | field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_oflow_trig.value; + if(field_storage.intr_block_rf.error_intr_trig_r.error_fifo_oflow_trig.value != '0) begin // stickybit + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_fifo_oflow_sts.value | field_storage.intr_block_rf.error_intr_trig_r.error_fifo_oflow_trig.value; load_next_c = '1; - end else if(hwif_in.intr_block_rf.error_internal_intr_r.error_wr_fifo_oflow_sts.hwset) begin // HW Set + end else if(hwif_in.intr_block_rf.error_internal_intr_r.error_fifo_oflow_sts.hwset) begin // HW Set next_c = '1; load_next_c = '1; end else if(decoded_reg_strb.intr_block_rf.error_internal_intr_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 clear - next_c = field_storage.intr_block_rf.error_internal_intr_r.error_wr_fifo_oflow_sts.value & ~(decoded_wr_data[7:7] & decoded_wr_biten[7:7]); + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_fifo_oflow_sts.value & ~(decoded_wr_data[5:5] & decoded_wr_biten[5:5]); load_next_c = '1; end - field_combo.intr_block_rf.error_internal_intr_r.error_wr_fifo_oflow_sts.next = next_c; - field_combo.intr_block_rf.error_internal_intr_r.error_wr_fifo_oflow_sts.load_next = load_next_c; + field_combo.intr_block_rf.error_internal_intr_r.error_fifo_oflow_sts.next = next_c; + field_combo.intr_block_rf.error_internal_intr_r.error_fifo_oflow_sts.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_pwrgood) begin if(~hwif_in.cptra_pwrgood) begin - field_storage.intr_block_rf.error_internal_intr_r.error_wr_fifo_oflow_sts.value <= 1'h0; - end else if(field_combo.intr_block_rf.error_internal_intr_r.error_wr_fifo_oflow_sts.load_next) begin - field_storage.intr_block_rf.error_internal_intr_r.error_wr_fifo_oflow_sts.value <= field_combo.intr_block_rf.error_internal_intr_r.error_wr_fifo_oflow_sts.next; + field_storage.intr_block_rf.error_internal_intr_r.error_fifo_oflow_sts.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_internal_intr_r.error_fifo_oflow_sts.load_next) begin + field_storage.intr_block_rf.error_internal_intr_r.error_fifo_oflow_sts.value <= field_combo.intr_block_rf.error_internal_intr_r.error_fifo_oflow_sts.next; end end - // Field: axi_dma_reg.intr_block_rf.error_internal_intr_r.error_wr_fifo_uflow_sts + // Field: axi_dma_reg.intr_block_rf.error_internal_intr_r.error_fifo_uflow_sts always_comb begin automatic logic [0:0] next_c; automatic logic load_next_c; - next_c = field_storage.intr_block_rf.error_internal_intr_r.error_wr_fifo_uflow_sts.value; + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_fifo_uflow_sts.value; load_next_c = '0; - if(field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_uflow_trig.value != '0) begin // stickybit - next_c = field_storage.intr_block_rf.error_internal_intr_r.error_wr_fifo_uflow_sts.value | field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_uflow_trig.value; + if(field_storage.intr_block_rf.error_intr_trig_r.error_fifo_uflow_trig.value != '0) begin // stickybit + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_fifo_uflow_sts.value | field_storage.intr_block_rf.error_intr_trig_r.error_fifo_uflow_trig.value; load_next_c = '1; - end else if(hwif_in.intr_block_rf.error_internal_intr_r.error_wr_fifo_uflow_sts.hwset) begin // HW Set + end else if(hwif_in.intr_block_rf.error_internal_intr_r.error_fifo_uflow_sts.hwset) begin // HW Set next_c = '1; load_next_c = '1; end else if(decoded_reg_strb.intr_block_rf.error_internal_intr_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 clear - next_c = field_storage.intr_block_rf.error_internal_intr_r.error_wr_fifo_uflow_sts.value & ~(decoded_wr_data[8:8] & decoded_wr_biten[8:8]); + next_c = field_storage.intr_block_rf.error_internal_intr_r.error_fifo_uflow_sts.value & ~(decoded_wr_data[6:6] & decoded_wr_biten[6:6]); load_next_c = '1; end - field_combo.intr_block_rf.error_internal_intr_r.error_wr_fifo_uflow_sts.next = next_c; - field_combo.intr_block_rf.error_internal_intr_r.error_wr_fifo_uflow_sts.load_next = load_next_c; + field_combo.intr_block_rf.error_internal_intr_r.error_fifo_uflow_sts.next = next_c; + field_combo.intr_block_rf.error_internal_intr_r.error_fifo_uflow_sts.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_pwrgood) begin if(~hwif_in.cptra_pwrgood) begin - field_storage.intr_block_rf.error_internal_intr_r.error_wr_fifo_uflow_sts.value <= 1'h0; - end else if(field_combo.intr_block_rf.error_internal_intr_r.error_wr_fifo_uflow_sts.load_next) begin - field_storage.intr_block_rf.error_internal_intr_r.error_wr_fifo_uflow_sts.value <= field_combo.intr_block_rf.error_internal_intr_r.error_wr_fifo_uflow_sts.next; + field_storage.intr_block_rf.error_internal_intr_r.error_fifo_uflow_sts.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_internal_intr_r.error_fifo_uflow_sts.load_next) begin + field_storage.intr_block_rf.error_internal_intr_r.error_fifo_uflow_sts.value <= field_combo.intr_block_rf.error_internal_intr_r.error_fifo_uflow_sts.next; end end assign hwif_out.intr_block_rf.error_internal_intr_r.intr = @@ -1930,10 +1736,8 @@ module axi_dma_reg ( || |(field_storage.intr_block_rf.error_internal_intr_r.error_axi_wr_sts.value & field_storage.intr_block_rf.error_intr_en_r.error_axi_wr_en.value) || |(field_storage.intr_block_rf.error_internal_intr_r.error_mbox_lock_sts.value & field_storage.intr_block_rf.error_intr_en_r.error_mbox_lock_en.value) || |(field_storage.intr_block_rf.error_internal_intr_r.error_sha_lock_sts.value & field_storage.intr_block_rf.error_intr_en_r.error_sha_lock_en.value) - || |(field_storage.intr_block_rf.error_internal_intr_r.error_rd_fifo_oflow_sts.value & field_storage.intr_block_rf.error_intr_en_r.error_rd_fifo_oflow_en.value) - || |(field_storage.intr_block_rf.error_internal_intr_r.error_rd_fifo_uflow_sts.value & field_storage.intr_block_rf.error_intr_en_r.error_rd_fifo_uflow_en.value) - || |(field_storage.intr_block_rf.error_internal_intr_r.error_wr_fifo_oflow_sts.value & field_storage.intr_block_rf.error_intr_en_r.error_wr_fifo_oflow_en.value) - || |(field_storage.intr_block_rf.error_internal_intr_r.error_wr_fifo_uflow_sts.value & field_storage.intr_block_rf.error_intr_en_r.error_wr_fifo_uflow_en.value); + || |(field_storage.intr_block_rf.error_internal_intr_r.error_fifo_oflow_sts.value & field_storage.intr_block_rf.error_intr_en_r.error_fifo_oflow_en.value) + || |(field_storage.intr_block_rf.error_internal_intr_r.error_fifo_uflow_sts.value & field_storage.intr_block_rf.error_intr_en_r.error_fifo_uflow_en.value); // Field: axi_dma_reg.intr_block_rf.notif_internal_intr_r.notif_txn_done_sts always_comb begin automatic logic [0:0] next_c; @@ -1960,116 +1764,116 @@ module axi_dma_reg ( field_storage.intr_block_rf.notif_internal_intr_r.notif_txn_done_sts.value <= field_combo.intr_block_rf.notif_internal_intr_r.notif_txn_done_sts.next; end end - // Field: axi_dma_reg.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_not_empty_sts + // Field: axi_dma_reg.intr_block_rf.notif_internal_intr_r.notif_fifo_empty_sts always_comb begin automatic logic [0:0] next_c; automatic logic load_next_c; - next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_not_empty_sts.value; + next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_fifo_empty_sts.value; load_next_c = '0; - if(field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_not_empty_trig.value != '0) begin // stickybit - next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_not_empty_sts.value | field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_not_empty_trig.value; + if(field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_empty_trig.value != '0) begin // stickybit + next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_fifo_empty_sts.value | field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_empty_trig.value; load_next_c = '1; - end else if(hwif_in.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_not_empty_sts.hwset) begin // HW Set + end else if(hwif_in.intr_block_rf.notif_internal_intr_r.notif_fifo_empty_sts.hwset) begin // HW Set next_c = '1; load_next_c = '1; end else if(decoded_reg_strb.intr_block_rf.notif_internal_intr_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 clear - next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_not_empty_sts.value & ~(decoded_wr_data[1:1] & decoded_wr_biten[1:1]); + next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_fifo_empty_sts.value & ~(decoded_wr_data[1:1] & decoded_wr_biten[1:1]); load_next_c = '1; end - field_combo.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_not_empty_sts.next = next_c; - field_combo.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_not_empty_sts.load_next = load_next_c; + field_combo.intr_block_rf.notif_internal_intr_r.notif_fifo_empty_sts.next = next_c; + field_combo.intr_block_rf.notif_internal_intr_r.notif_fifo_empty_sts.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_not_empty_sts.value <= 1'h0; - end else if(field_combo.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_not_empty_sts.load_next) begin - field_storage.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_not_empty_sts.value <= field_combo.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_not_empty_sts.next; + field_storage.intr_block_rf.notif_internal_intr_r.notif_fifo_empty_sts.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_internal_intr_r.notif_fifo_empty_sts.load_next) begin + field_storage.intr_block_rf.notif_internal_intr_r.notif_fifo_empty_sts.value <= field_combo.intr_block_rf.notif_internal_intr_r.notif_fifo_empty_sts.next; end end - // Field: axi_dma_reg.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_full_sts + // Field: axi_dma_reg.intr_block_rf.notif_internal_intr_r.notif_fifo_not_empty_sts always_comb begin automatic logic [0:0] next_c; automatic logic load_next_c; - next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_full_sts.value; + next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_fifo_not_empty_sts.value; load_next_c = '0; - if(field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_full_trig.value != '0) begin // stickybit - next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_full_sts.value | field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_full_trig.value; + if(field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_not_empty_trig.value != '0) begin // stickybit + next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_fifo_not_empty_sts.value | field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_not_empty_trig.value; load_next_c = '1; - end else if(hwif_in.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_full_sts.hwset) begin // HW Set + end else if(hwif_in.intr_block_rf.notif_internal_intr_r.notif_fifo_not_empty_sts.hwset) begin // HW Set next_c = '1; load_next_c = '1; end else if(decoded_reg_strb.intr_block_rf.notif_internal_intr_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 clear - next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_full_sts.value & ~(decoded_wr_data[2:2] & decoded_wr_biten[2:2]); + next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_fifo_not_empty_sts.value & ~(decoded_wr_data[2:2] & decoded_wr_biten[2:2]); load_next_c = '1; end - field_combo.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_full_sts.next = next_c; - field_combo.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_full_sts.load_next = load_next_c; + field_combo.intr_block_rf.notif_internal_intr_r.notif_fifo_not_empty_sts.next = next_c; + field_combo.intr_block_rf.notif_internal_intr_r.notif_fifo_not_empty_sts.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_full_sts.value <= 1'h0; - end else if(field_combo.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_full_sts.load_next) begin - field_storage.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_full_sts.value <= field_combo.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_full_sts.next; + field_storage.intr_block_rf.notif_internal_intr_r.notif_fifo_not_empty_sts.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_internal_intr_r.notif_fifo_not_empty_sts.load_next) begin + field_storage.intr_block_rf.notif_internal_intr_r.notif_fifo_not_empty_sts.value <= field_combo.intr_block_rf.notif_internal_intr_r.notif_fifo_not_empty_sts.next; end end - // Field: axi_dma_reg.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_not_full_sts + // Field: axi_dma_reg.intr_block_rf.notif_internal_intr_r.notif_fifo_full_sts always_comb begin automatic logic [0:0] next_c; automatic logic load_next_c; - next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_not_full_sts.value; + next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_fifo_full_sts.value; load_next_c = '0; - if(field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_not_full_trig.value != '0) begin // stickybit - next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_not_full_sts.value | field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_not_full_trig.value; + if(field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_full_trig.value != '0) begin // stickybit + next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_fifo_full_sts.value | field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_full_trig.value; load_next_c = '1; - end else if(hwif_in.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_not_full_sts.hwset) begin // HW Set + end else if(hwif_in.intr_block_rf.notif_internal_intr_r.notif_fifo_full_sts.hwset) begin // HW Set next_c = '1; load_next_c = '1; end else if(decoded_reg_strb.intr_block_rf.notif_internal_intr_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 clear - next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_not_full_sts.value & ~(decoded_wr_data[3:3] & decoded_wr_biten[3:3]); + next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_fifo_full_sts.value & ~(decoded_wr_data[3:3] & decoded_wr_biten[3:3]); load_next_c = '1; end - field_combo.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_not_full_sts.next = next_c; - field_combo.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_not_full_sts.load_next = load_next_c; + field_combo.intr_block_rf.notif_internal_intr_r.notif_fifo_full_sts.next = next_c; + field_combo.intr_block_rf.notif_internal_intr_r.notif_fifo_full_sts.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_not_full_sts.value <= 1'h0; - end else if(field_combo.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_not_full_sts.load_next) begin - field_storage.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_not_full_sts.value <= field_combo.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_not_full_sts.next; + field_storage.intr_block_rf.notif_internal_intr_r.notif_fifo_full_sts.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_internal_intr_r.notif_fifo_full_sts.load_next) begin + field_storage.intr_block_rf.notif_internal_intr_r.notif_fifo_full_sts.value <= field_combo.intr_block_rf.notif_internal_intr_r.notif_fifo_full_sts.next; end end - // Field: axi_dma_reg.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_empty_sts + // Field: axi_dma_reg.intr_block_rf.notif_internal_intr_r.notif_fifo_not_full_sts always_comb begin automatic logic [0:0] next_c; automatic logic load_next_c; - next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_empty_sts.value; + next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_fifo_not_full_sts.value; load_next_c = '0; - if(field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_empty_trig.value != '0) begin // stickybit - next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_empty_sts.value | field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_empty_trig.value; + if(field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_not_full_trig.value != '0) begin // stickybit + next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_fifo_not_full_sts.value | field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_not_full_trig.value; load_next_c = '1; - end else if(hwif_in.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_empty_sts.hwset) begin // HW Set + end else if(hwif_in.intr_block_rf.notif_internal_intr_r.notif_fifo_not_full_sts.hwset) begin // HW Set next_c = '1; load_next_c = '1; end else if(decoded_reg_strb.intr_block_rf.notif_internal_intr_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 clear - next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_empty_sts.value & ~(decoded_wr_data[4:4] & decoded_wr_biten[4:4]); + next_c = field_storage.intr_block_rf.notif_internal_intr_r.notif_fifo_not_full_sts.value & ~(decoded_wr_data[4:4] & decoded_wr_biten[4:4]); load_next_c = '1; end - field_combo.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_empty_sts.next = next_c; - field_combo.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_empty_sts.load_next = load_next_c; + field_combo.intr_block_rf.notif_internal_intr_r.notif_fifo_not_full_sts.next = next_c; + field_combo.intr_block_rf.notif_internal_intr_r.notif_fifo_not_full_sts.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_empty_sts.value <= 1'h0; - end else if(field_combo.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_empty_sts.load_next) begin - field_storage.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_empty_sts.value <= field_combo.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_empty_sts.next; + field_storage.intr_block_rf.notif_internal_intr_r.notif_fifo_not_full_sts.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_internal_intr_r.notif_fifo_not_full_sts.load_next) begin + field_storage.intr_block_rf.notif_internal_intr_r.notif_fifo_not_full_sts.value <= field_combo.intr_block_rf.notif_internal_intr_r.notif_fifo_not_full_sts.next; end end assign hwif_out.intr_block_rf.notif_internal_intr_r.intr = |(field_storage.intr_block_rf.notif_internal_intr_r.notif_txn_done_sts.value & field_storage.intr_block_rf.notif_intr_en_r.notif_txn_done_en.value) - || |(field_storage.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_not_empty_sts.value & field_storage.intr_block_rf.notif_intr_en_r.notif_rd_fifo_not_empty_en.value) - || |(field_storage.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_full_sts.value & field_storage.intr_block_rf.notif_intr_en_r.notif_rd_fifo_full_en.value) - || |(field_storage.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_not_full_sts.value & field_storage.intr_block_rf.notif_intr_en_r.notif_wr_fifo_not_full_en.value) - || |(field_storage.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_empty_sts.value & field_storage.intr_block_rf.notif_intr_en_r.notif_wr_fifo_empty_en.value); + || |(field_storage.intr_block_rf.notif_internal_intr_r.notif_fifo_empty_sts.value & field_storage.intr_block_rf.notif_intr_en_r.notif_fifo_empty_en.value) + || |(field_storage.intr_block_rf.notif_internal_intr_r.notif_fifo_not_empty_sts.value & field_storage.intr_block_rf.notif_intr_en_r.notif_fifo_not_empty_en.value) + || |(field_storage.intr_block_rf.notif_internal_intr_r.notif_fifo_full_sts.value & field_storage.intr_block_rf.notif_intr_en_r.notif_fifo_full_en.value) + || |(field_storage.intr_block_rf.notif_internal_intr_r.notif_fifo_not_full_sts.value & field_storage.intr_block_rf.notif_intr_en_r.notif_fifo_not_full_en.value); // Field: axi_dma_reg.intr_block_rf.error_intr_trig_r.error_cmd_dec_trig always_comb begin automatic logic [0:0] next_c; @@ -2185,96 +1989,50 @@ module axi_dma_reg ( field_storage.intr_block_rf.error_intr_trig_r.error_sha_lock_trig.value <= field_combo.intr_block_rf.error_intr_trig_r.error_sha_lock_trig.next; end end - // Field: axi_dma_reg.intr_block_rf.error_intr_trig_r.error_rd_fifo_oflow_trig - always_comb begin - automatic logic [0:0] next_c; - automatic logic load_next_c; - next_c = field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_oflow_trig.value; - load_next_c = '0; - if(decoded_reg_strb.intr_block_rf.error_intr_trig_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 set - next_c = field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_oflow_trig.value | (decoded_wr_data[5:5] & decoded_wr_biten[5:5]); - load_next_c = '1; - end else begin // singlepulse clears back to 0 - next_c = '0; - load_next_c = '1; - end - field_combo.intr_block_rf.error_intr_trig_r.error_rd_fifo_oflow_trig.next = next_c; - field_combo.intr_block_rf.error_intr_trig_r.error_rd_fifo_oflow_trig.load_next = load_next_c; - end - always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin - if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_oflow_trig.value <= 1'h0; - end else if(field_combo.intr_block_rf.error_intr_trig_r.error_rd_fifo_oflow_trig.load_next) begin - field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_oflow_trig.value <= field_combo.intr_block_rf.error_intr_trig_r.error_rd_fifo_oflow_trig.next; - end - end - // Field: axi_dma_reg.intr_block_rf.error_intr_trig_r.error_rd_fifo_uflow_trig - always_comb begin - automatic logic [0:0] next_c; - automatic logic load_next_c; - next_c = field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_uflow_trig.value; - load_next_c = '0; - if(decoded_reg_strb.intr_block_rf.error_intr_trig_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 set - next_c = field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_uflow_trig.value | (decoded_wr_data[6:6] & decoded_wr_biten[6:6]); - load_next_c = '1; - end else begin // singlepulse clears back to 0 - next_c = '0; - load_next_c = '1; - end - field_combo.intr_block_rf.error_intr_trig_r.error_rd_fifo_uflow_trig.next = next_c; - field_combo.intr_block_rf.error_intr_trig_r.error_rd_fifo_uflow_trig.load_next = load_next_c; - end - always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin - if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_uflow_trig.value <= 1'h0; - end else if(field_combo.intr_block_rf.error_intr_trig_r.error_rd_fifo_uflow_trig.load_next) begin - field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_uflow_trig.value <= field_combo.intr_block_rf.error_intr_trig_r.error_rd_fifo_uflow_trig.next; - end - end - // Field: axi_dma_reg.intr_block_rf.error_intr_trig_r.error_wr_fifo_oflow_trig + // Field: axi_dma_reg.intr_block_rf.error_intr_trig_r.error_fifo_oflow_trig always_comb begin automatic logic [0:0] next_c; automatic logic load_next_c; - next_c = field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_oflow_trig.value; + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_fifo_oflow_trig.value; load_next_c = '0; if(decoded_reg_strb.intr_block_rf.error_intr_trig_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 set - next_c = field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_oflow_trig.value | (decoded_wr_data[7:7] & decoded_wr_biten[7:7]); + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_fifo_oflow_trig.value | (decoded_wr_data[5:5] & decoded_wr_biten[5:5]); load_next_c = '1; end else begin // singlepulse clears back to 0 next_c = '0; load_next_c = '1; end - field_combo.intr_block_rf.error_intr_trig_r.error_wr_fifo_oflow_trig.next = next_c; - field_combo.intr_block_rf.error_intr_trig_r.error_wr_fifo_oflow_trig.load_next = load_next_c; + field_combo.intr_block_rf.error_intr_trig_r.error_fifo_oflow_trig.next = next_c; + field_combo.intr_block_rf.error_intr_trig_r.error_fifo_oflow_trig.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_oflow_trig.value <= 1'h0; - end else if(field_combo.intr_block_rf.error_intr_trig_r.error_wr_fifo_oflow_trig.load_next) begin - field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_oflow_trig.value <= field_combo.intr_block_rf.error_intr_trig_r.error_wr_fifo_oflow_trig.next; + field_storage.intr_block_rf.error_intr_trig_r.error_fifo_oflow_trig.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_intr_trig_r.error_fifo_oflow_trig.load_next) begin + field_storage.intr_block_rf.error_intr_trig_r.error_fifo_oflow_trig.value <= field_combo.intr_block_rf.error_intr_trig_r.error_fifo_oflow_trig.next; end end - // Field: axi_dma_reg.intr_block_rf.error_intr_trig_r.error_wr_fifo_uflow_trig + // Field: axi_dma_reg.intr_block_rf.error_intr_trig_r.error_fifo_uflow_trig always_comb begin automatic logic [0:0] next_c; automatic logic load_next_c; - next_c = field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_uflow_trig.value; + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_fifo_uflow_trig.value; load_next_c = '0; if(decoded_reg_strb.intr_block_rf.error_intr_trig_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 set - next_c = field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_uflow_trig.value | (decoded_wr_data[8:8] & decoded_wr_biten[8:8]); + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_fifo_uflow_trig.value | (decoded_wr_data[6:6] & decoded_wr_biten[6:6]); load_next_c = '1; end else begin // singlepulse clears back to 0 next_c = '0; load_next_c = '1; end - field_combo.intr_block_rf.error_intr_trig_r.error_wr_fifo_uflow_trig.next = next_c; - field_combo.intr_block_rf.error_intr_trig_r.error_wr_fifo_uflow_trig.load_next = load_next_c; + field_combo.intr_block_rf.error_intr_trig_r.error_fifo_uflow_trig.next = next_c; + field_combo.intr_block_rf.error_intr_trig_r.error_fifo_uflow_trig.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_uflow_trig.value <= 1'h0; - end else if(field_combo.intr_block_rf.error_intr_trig_r.error_wr_fifo_uflow_trig.load_next) begin - field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_uflow_trig.value <= field_combo.intr_block_rf.error_intr_trig_r.error_wr_fifo_uflow_trig.next; + field_storage.intr_block_rf.error_intr_trig_r.error_fifo_uflow_trig.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_intr_trig_r.error_fifo_uflow_trig.load_next) begin + field_storage.intr_block_rf.error_intr_trig_r.error_fifo_uflow_trig.value <= field_combo.intr_block_rf.error_intr_trig_r.error_fifo_uflow_trig.next; end end // Field: axi_dma_reg.intr_block_rf.notif_intr_trig_r.notif_txn_done_trig @@ -2300,96 +2058,96 @@ module axi_dma_reg ( field_storage.intr_block_rf.notif_intr_trig_r.notif_txn_done_trig.value <= field_combo.intr_block_rf.notif_intr_trig_r.notif_txn_done_trig.next; end end - // Field: axi_dma_reg.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_not_empty_trig + // Field: axi_dma_reg.intr_block_rf.notif_intr_trig_r.notif_fifo_empty_trig always_comb begin automatic logic [0:0] next_c; automatic logic load_next_c; - next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_not_empty_trig.value; + next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_empty_trig.value; load_next_c = '0; if(decoded_reg_strb.intr_block_rf.notif_intr_trig_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 set - next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_not_empty_trig.value | (decoded_wr_data[1:1] & decoded_wr_biten[1:1]); + next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_empty_trig.value | (decoded_wr_data[1:1] & decoded_wr_biten[1:1]); load_next_c = '1; end else begin // singlepulse clears back to 0 next_c = '0; load_next_c = '1; end - field_combo.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_not_empty_trig.next = next_c; - field_combo.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_not_empty_trig.load_next = load_next_c; + field_combo.intr_block_rf.notif_intr_trig_r.notif_fifo_empty_trig.next = next_c; + field_combo.intr_block_rf.notif_intr_trig_r.notif_fifo_empty_trig.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_not_empty_trig.value <= 1'h0; - end else if(field_combo.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_not_empty_trig.load_next) begin - field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_not_empty_trig.value <= field_combo.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_not_empty_trig.next; + field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_empty_trig.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_intr_trig_r.notif_fifo_empty_trig.load_next) begin + field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_empty_trig.value <= field_combo.intr_block_rf.notif_intr_trig_r.notif_fifo_empty_trig.next; end end - // Field: axi_dma_reg.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_full_trig + // Field: axi_dma_reg.intr_block_rf.notif_intr_trig_r.notif_fifo_not_empty_trig always_comb begin automatic logic [0:0] next_c; automatic logic load_next_c; - next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_full_trig.value; + next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_not_empty_trig.value; load_next_c = '0; if(decoded_reg_strb.intr_block_rf.notif_intr_trig_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 set - next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_full_trig.value | (decoded_wr_data[2:2] & decoded_wr_biten[2:2]); + next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_not_empty_trig.value | (decoded_wr_data[2:2] & decoded_wr_biten[2:2]); load_next_c = '1; end else begin // singlepulse clears back to 0 next_c = '0; load_next_c = '1; end - field_combo.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_full_trig.next = next_c; - field_combo.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_full_trig.load_next = load_next_c; + field_combo.intr_block_rf.notif_intr_trig_r.notif_fifo_not_empty_trig.next = next_c; + field_combo.intr_block_rf.notif_intr_trig_r.notif_fifo_not_empty_trig.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_full_trig.value <= 1'h0; - end else if(field_combo.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_full_trig.load_next) begin - field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_full_trig.value <= field_combo.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_full_trig.next; + field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_not_empty_trig.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_intr_trig_r.notif_fifo_not_empty_trig.load_next) begin + field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_not_empty_trig.value <= field_combo.intr_block_rf.notif_intr_trig_r.notif_fifo_not_empty_trig.next; end end - // Field: axi_dma_reg.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_not_full_trig + // Field: axi_dma_reg.intr_block_rf.notif_intr_trig_r.notif_fifo_full_trig always_comb begin automatic logic [0:0] next_c; automatic logic load_next_c; - next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_not_full_trig.value; + next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_full_trig.value; load_next_c = '0; if(decoded_reg_strb.intr_block_rf.notif_intr_trig_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 set - next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_not_full_trig.value | (decoded_wr_data[3:3] & decoded_wr_biten[3:3]); + next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_full_trig.value | (decoded_wr_data[3:3] & decoded_wr_biten[3:3]); load_next_c = '1; end else begin // singlepulse clears back to 0 next_c = '0; load_next_c = '1; end - field_combo.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_not_full_trig.next = next_c; - field_combo.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_not_full_trig.load_next = load_next_c; + field_combo.intr_block_rf.notif_intr_trig_r.notif_fifo_full_trig.next = next_c; + field_combo.intr_block_rf.notif_intr_trig_r.notif_fifo_full_trig.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_not_full_trig.value <= 1'h0; - end else if(field_combo.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_not_full_trig.load_next) begin - field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_not_full_trig.value <= field_combo.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_not_full_trig.next; + field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_full_trig.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_intr_trig_r.notif_fifo_full_trig.load_next) begin + field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_full_trig.value <= field_combo.intr_block_rf.notif_intr_trig_r.notif_fifo_full_trig.next; end end - // Field: axi_dma_reg.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_empty_trig + // Field: axi_dma_reg.intr_block_rf.notif_intr_trig_r.notif_fifo_not_full_trig always_comb begin automatic logic [0:0] next_c; automatic logic load_next_c; - next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_empty_trig.value; + next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_not_full_trig.value; load_next_c = '0; if(decoded_reg_strb.intr_block_rf.notif_intr_trig_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write 1 set - next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_empty_trig.value | (decoded_wr_data[4:4] & decoded_wr_biten[4:4]); + next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_not_full_trig.value | (decoded_wr_data[4:4] & decoded_wr_biten[4:4]); load_next_c = '1; end else begin // singlepulse clears back to 0 next_c = '0; load_next_c = '1; end - field_combo.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_empty_trig.next = next_c; - field_combo.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_empty_trig.load_next = load_next_c; + field_combo.intr_block_rf.notif_intr_trig_r.notif_fifo_not_full_trig.next = next_c; + field_combo.intr_block_rf.notif_intr_trig_r.notif_fifo_not_full_trig.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_empty_trig.value <= 1'h0; - end else if(field_combo.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_empty_trig.load_next) begin - field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_empty_trig.value <= field_combo.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_empty_trig.next; + field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_not_full_trig.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_intr_trig_r.notif_fifo_not_full_trig.load_next) begin + field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_not_full_trig.value <= field_combo.intr_block_rf.notif_intr_trig_r.notif_fifo_not_full_trig.next; end end // Field: axi_dma_reg.intr_block_rf.error_cmd_dec_intr_count_r.cnt @@ -2562,85 +2320,17 @@ module axi_dma_reg ( field_storage.intr_block_rf.error_sha_lock_intr_count_r.cnt.value <= field_combo.intr_block_rf.error_sha_lock_intr_count_r.cnt.next; end end - // Field: axi_dma_reg.intr_block_rf.error_rd_fifo_oflow_intr_count_r.cnt - always_comb begin - automatic logic [31:0] next_c; - automatic logic load_next_c; - next_c = field_storage.intr_block_rf.error_rd_fifo_oflow_intr_count_r.cnt.value; - load_next_c = '0; - if(decoded_reg_strb.intr_block_rf.error_rd_fifo_oflow_intr_count_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write - next_c = (field_storage.intr_block_rf.error_rd_fifo_oflow_intr_count_r.cnt.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); - load_next_c = '1; - end - if(field_storage.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r.pulse.value) begin // increment - if(((33)'(next_c) + 32'h1) > 32'hffffffff) begin // up-counter saturated - next_c = 32'hffffffff; - end else begin - next_c = next_c + 32'h1; - end - load_next_c = '1; - end - field_combo.intr_block_rf.error_rd_fifo_oflow_intr_count_r.cnt.incrthreshold = (field_storage.intr_block_rf.error_rd_fifo_oflow_intr_count_r.cnt.value >= 32'hffffffff); - field_combo.intr_block_rf.error_rd_fifo_oflow_intr_count_r.cnt.incrsaturate = (field_storage.intr_block_rf.error_rd_fifo_oflow_intr_count_r.cnt.value >= 32'hffffffff); - if(next_c > 32'hffffffff) begin - next_c = 32'hffffffff; - load_next_c = '1; - end - field_combo.intr_block_rf.error_rd_fifo_oflow_intr_count_r.cnt.next = next_c; - field_combo.intr_block_rf.error_rd_fifo_oflow_intr_count_r.cnt.load_next = load_next_c; - end - always_ff @(posedge clk or negedge hwif_in.cptra_pwrgood) begin - if(~hwif_in.cptra_pwrgood) begin - field_storage.intr_block_rf.error_rd_fifo_oflow_intr_count_r.cnt.value <= 32'h0; - end else if(field_combo.intr_block_rf.error_rd_fifo_oflow_intr_count_r.cnt.load_next) begin - field_storage.intr_block_rf.error_rd_fifo_oflow_intr_count_r.cnt.value <= field_combo.intr_block_rf.error_rd_fifo_oflow_intr_count_r.cnt.next; - end - end - // Field: axi_dma_reg.intr_block_rf.error_rd_fifo_uflow_intr_count_r.cnt - always_comb begin - automatic logic [31:0] next_c; - automatic logic load_next_c; - next_c = field_storage.intr_block_rf.error_rd_fifo_uflow_intr_count_r.cnt.value; - load_next_c = '0; - if(decoded_reg_strb.intr_block_rf.error_rd_fifo_uflow_intr_count_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write - next_c = (field_storage.intr_block_rf.error_rd_fifo_uflow_intr_count_r.cnt.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); - load_next_c = '1; - end - if(field_storage.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r.pulse.value) begin // increment - if(((33)'(next_c) + 32'h1) > 32'hffffffff) begin // up-counter saturated - next_c = 32'hffffffff; - end else begin - next_c = next_c + 32'h1; - end - load_next_c = '1; - end - field_combo.intr_block_rf.error_rd_fifo_uflow_intr_count_r.cnt.incrthreshold = (field_storage.intr_block_rf.error_rd_fifo_uflow_intr_count_r.cnt.value >= 32'hffffffff); - field_combo.intr_block_rf.error_rd_fifo_uflow_intr_count_r.cnt.incrsaturate = (field_storage.intr_block_rf.error_rd_fifo_uflow_intr_count_r.cnt.value >= 32'hffffffff); - if(next_c > 32'hffffffff) begin - next_c = 32'hffffffff; - load_next_c = '1; - end - field_combo.intr_block_rf.error_rd_fifo_uflow_intr_count_r.cnt.next = next_c; - field_combo.intr_block_rf.error_rd_fifo_uflow_intr_count_r.cnt.load_next = load_next_c; - end - always_ff @(posedge clk or negedge hwif_in.cptra_pwrgood) begin - if(~hwif_in.cptra_pwrgood) begin - field_storage.intr_block_rf.error_rd_fifo_uflow_intr_count_r.cnt.value <= 32'h0; - end else if(field_combo.intr_block_rf.error_rd_fifo_uflow_intr_count_r.cnt.load_next) begin - field_storage.intr_block_rf.error_rd_fifo_uflow_intr_count_r.cnt.value <= field_combo.intr_block_rf.error_rd_fifo_uflow_intr_count_r.cnt.next; - end - end - // Field: axi_dma_reg.intr_block_rf.error_wr_fifo_oflow_intr_count_r.cnt + // Field: axi_dma_reg.intr_block_rf.error_fifo_oflow_intr_count_r.cnt always_comb begin automatic logic [31:0] next_c; automatic logic load_next_c; - next_c = field_storage.intr_block_rf.error_wr_fifo_oflow_intr_count_r.cnt.value; + next_c = field_storage.intr_block_rf.error_fifo_oflow_intr_count_r.cnt.value; load_next_c = '0; - if(decoded_reg_strb.intr_block_rf.error_wr_fifo_oflow_intr_count_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write - next_c = (field_storage.intr_block_rf.error_wr_fifo_oflow_intr_count_r.cnt.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); + if(decoded_reg_strb.intr_block_rf.error_fifo_oflow_intr_count_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.error_fifo_oflow_intr_count_r.cnt.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); load_next_c = '1; end - if(field_storage.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r.pulse.value) begin // increment + if(field_storage.intr_block_rf.error_fifo_oflow_intr_count_incr_r.pulse.value) begin // increment if(((33)'(next_c) + 32'h1) > 32'hffffffff) begin // up-counter saturated next_c = 32'hffffffff; end else begin @@ -2648,33 +2338,33 @@ module axi_dma_reg ( end load_next_c = '1; end - field_combo.intr_block_rf.error_wr_fifo_oflow_intr_count_r.cnt.incrthreshold = (field_storage.intr_block_rf.error_wr_fifo_oflow_intr_count_r.cnt.value >= 32'hffffffff); - field_combo.intr_block_rf.error_wr_fifo_oflow_intr_count_r.cnt.incrsaturate = (field_storage.intr_block_rf.error_wr_fifo_oflow_intr_count_r.cnt.value >= 32'hffffffff); + field_combo.intr_block_rf.error_fifo_oflow_intr_count_r.cnt.incrthreshold = (field_storage.intr_block_rf.error_fifo_oflow_intr_count_r.cnt.value >= 32'hffffffff); + field_combo.intr_block_rf.error_fifo_oflow_intr_count_r.cnt.incrsaturate = (field_storage.intr_block_rf.error_fifo_oflow_intr_count_r.cnt.value >= 32'hffffffff); if(next_c > 32'hffffffff) begin next_c = 32'hffffffff; load_next_c = '1; end - field_combo.intr_block_rf.error_wr_fifo_oflow_intr_count_r.cnt.next = next_c; - field_combo.intr_block_rf.error_wr_fifo_oflow_intr_count_r.cnt.load_next = load_next_c; + field_combo.intr_block_rf.error_fifo_oflow_intr_count_r.cnt.next = next_c; + field_combo.intr_block_rf.error_fifo_oflow_intr_count_r.cnt.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_pwrgood) begin if(~hwif_in.cptra_pwrgood) begin - field_storage.intr_block_rf.error_wr_fifo_oflow_intr_count_r.cnt.value <= 32'h0; - end else if(field_combo.intr_block_rf.error_wr_fifo_oflow_intr_count_r.cnt.load_next) begin - field_storage.intr_block_rf.error_wr_fifo_oflow_intr_count_r.cnt.value <= field_combo.intr_block_rf.error_wr_fifo_oflow_intr_count_r.cnt.next; + field_storage.intr_block_rf.error_fifo_oflow_intr_count_r.cnt.value <= 32'h0; + end else if(field_combo.intr_block_rf.error_fifo_oflow_intr_count_r.cnt.load_next) begin + field_storage.intr_block_rf.error_fifo_oflow_intr_count_r.cnt.value <= field_combo.intr_block_rf.error_fifo_oflow_intr_count_r.cnt.next; end end - // Field: axi_dma_reg.intr_block_rf.error_wr_fifo_uflow_intr_count_r.cnt + // Field: axi_dma_reg.intr_block_rf.error_fifo_uflow_intr_count_r.cnt always_comb begin automatic logic [31:0] next_c; automatic logic load_next_c; - next_c = field_storage.intr_block_rf.error_wr_fifo_uflow_intr_count_r.cnt.value; + next_c = field_storage.intr_block_rf.error_fifo_uflow_intr_count_r.cnt.value; load_next_c = '0; - if(decoded_reg_strb.intr_block_rf.error_wr_fifo_uflow_intr_count_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write - next_c = (field_storage.intr_block_rf.error_wr_fifo_uflow_intr_count_r.cnt.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); + if(decoded_reg_strb.intr_block_rf.error_fifo_uflow_intr_count_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.error_fifo_uflow_intr_count_r.cnt.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); load_next_c = '1; end - if(field_storage.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r.pulse.value) begin // increment + if(field_storage.intr_block_rf.error_fifo_uflow_intr_count_incr_r.pulse.value) begin // increment if(((33)'(next_c) + 32'h1) > 32'hffffffff) begin // up-counter saturated next_c = 32'hffffffff; end else begin @@ -2682,20 +2372,20 @@ module axi_dma_reg ( end load_next_c = '1; end - field_combo.intr_block_rf.error_wr_fifo_uflow_intr_count_r.cnt.incrthreshold = (field_storage.intr_block_rf.error_wr_fifo_uflow_intr_count_r.cnt.value >= 32'hffffffff); - field_combo.intr_block_rf.error_wr_fifo_uflow_intr_count_r.cnt.incrsaturate = (field_storage.intr_block_rf.error_wr_fifo_uflow_intr_count_r.cnt.value >= 32'hffffffff); + field_combo.intr_block_rf.error_fifo_uflow_intr_count_r.cnt.incrthreshold = (field_storage.intr_block_rf.error_fifo_uflow_intr_count_r.cnt.value >= 32'hffffffff); + field_combo.intr_block_rf.error_fifo_uflow_intr_count_r.cnt.incrsaturate = (field_storage.intr_block_rf.error_fifo_uflow_intr_count_r.cnt.value >= 32'hffffffff); if(next_c > 32'hffffffff) begin next_c = 32'hffffffff; load_next_c = '1; end - field_combo.intr_block_rf.error_wr_fifo_uflow_intr_count_r.cnt.next = next_c; - field_combo.intr_block_rf.error_wr_fifo_uflow_intr_count_r.cnt.load_next = load_next_c; + field_combo.intr_block_rf.error_fifo_uflow_intr_count_r.cnt.next = next_c; + field_combo.intr_block_rf.error_fifo_uflow_intr_count_r.cnt.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_pwrgood) begin if(~hwif_in.cptra_pwrgood) begin - field_storage.intr_block_rf.error_wr_fifo_uflow_intr_count_r.cnt.value <= 32'h0; - end else if(field_combo.intr_block_rf.error_wr_fifo_uflow_intr_count_r.cnt.load_next) begin - field_storage.intr_block_rf.error_wr_fifo_uflow_intr_count_r.cnt.value <= field_combo.intr_block_rf.error_wr_fifo_uflow_intr_count_r.cnt.next; + field_storage.intr_block_rf.error_fifo_uflow_intr_count_r.cnt.value <= 32'h0; + end else if(field_combo.intr_block_rf.error_fifo_uflow_intr_count_r.cnt.load_next) begin + field_storage.intr_block_rf.error_fifo_uflow_intr_count_r.cnt.value <= field_combo.intr_block_rf.error_fifo_uflow_intr_count_r.cnt.next; end end // Field: axi_dma_reg.intr_block_rf.notif_txn_done_intr_count_r.cnt @@ -2732,17 +2422,17 @@ module axi_dma_reg ( field_storage.intr_block_rf.notif_txn_done_intr_count_r.cnt.value <= field_combo.intr_block_rf.notif_txn_done_intr_count_r.cnt.next; end end - // Field: axi_dma_reg.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r.cnt + // Field: axi_dma_reg.intr_block_rf.notif_fifo_empty_intr_count_r.cnt always_comb begin automatic logic [31:0] next_c; automatic logic load_next_c; - next_c = field_storage.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r.cnt.value; + next_c = field_storage.intr_block_rf.notif_fifo_empty_intr_count_r.cnt.value; load_next_c = '0; - if(decoded_reg_strb.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write - next_c = (field_storage.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r.cnt.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); + if(decoded_reg_strb.intr_block_rf.notif_fifo_empty_intr_count_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.notif_fifo_empty_intr_count_r.cnt.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); load_next_c = '1; end - if(field_storage.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r.pulse.value) begin // increment + if(field_storage.intr_block_rf.notif_fifo_empty_intr_count_incr_r.pulse.value) begin // increment if(((33)'(next_c) + 32'h1) > 32'hffffffff) begin // up-counter saturated next_c = 32'hffffffff; end else begin @@ -2750,33 +2440,33 @@ module axi_dma_reg ( end load_next_c = '1; end - field_combo.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r.cnt.incrthreshold = (field_storage.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r.cnt.value >= 32'hffffffff); - field_combo.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r.cnt.incrsaturate = (field_storage.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r.cnt.value >= 32'hffffffff); + field_combo.intr_block_rf.notif_fifo_empty_intr_count_r.cnt.incrthreshold = (field_storage.intr_block_rf.notif_fifo_empty_intr_count_r.cnt.value >= 32'hffffffff); + field_combo.intr_block_rf.notif_fifo_empty_intr_count_r.cnt.incrsaturate = (field_storage.intr_block_rf.notif_fifo_empty_intr_count_r.cnt.value >= 32'hffffffff); if(next_c > 32'hffffffff) begin next_c = 32'hffffffff; load_next_c = '1; end - field_combo.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r.cnt.next = next_c; - field_combo.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r.cnt.load_next = load_next_c; + field_combo.intr_block_rf.notif_fifo_empty_intr_count_r.cnt.next = next_c; + field_combo.intr_block_rf.notif_fifo_empty_intr_count_r.cnt.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r.cnt.value <= 32'h0; - end else if(field_combo.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r.cnt.load_next) begin - field_storage.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r.cnt.value <= field_combo.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r.cnt.next; + field_storage.intr_block_rf.notif_fifo_empty_intr_count_r.cnt.value <= 32'h0; + end else if(field_combo.intr_block_rf.notif_fifo_empty_intr_count_r.cnt.load_next) begin + field_storage.intr_block_rf.notif_fifo_empty_intr_count_r.cnt.value <= field_combo.intr_block_rf.notif_fifo_empty_intr_count_r.cnt.next; end end - // Field: axi_dma_reg.intr_block_rf.notif_rd_fifo_full_intr_count_r.cnt + // Field: axi_dma_reg.intr_block_rf.notif_fifo_not_empty_intr_count_r.cnt always_comb begin automatic logic [31:0] next_c; automatic logic load_next_c; - next_c = field_storage.intr_block_rf.notif_rd_fifo_full_intr_count_r.cnt.value; + next_c = field_storage.intr_block_rf.notif_fifo_not_empty_intr_count_r.cnt.value; load_next_c = '0; - if(decoded_reg_strb.intr_block_rf.notif_rd_fifo_full_intr_count_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write - next_c = (field_storage.intr_block_rf.notif_rd_fifo_full_intr_count_r.cnt.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); + if(decoded_reg_strb.intr_block_rf.notif_fifo_not_empty_intr_count_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.notif_fifo_not_empty_intr_count_r.cnt.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); load_next_c = '1; end - if(field_storage.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r.pulse.value) begin // increment + if(field_storage.intr_block_rf.notif_fifo_not_empty_intr_count_incr_r.pulse.value) begin // increment if(((33)'(next_c) + 32'h1) > 32'hffffffff) begin // up-counter saturated next_c = 32'hffffffff; end else begin @@ -2784,33 +2474,33 @@ module axi_dma_reg ( end load_next_c = '1; end - field_combo.intr_block_rf.notif_rd_fifo_full_intr_count_r.cnt.incrthreshold = (field_storage.intr_block_rf.notif_rd_fifo_full_intr_count_r.cnt.value >= 32'hffffffff); - field_combo.intr_block_rf.notif_rd_fifo_full_intr_count_r.cnt.incrsaturate = (field_storage.intr_block_rf.notif_rd_fifo_full_intr_count_r.cnt.value >= 32'hffffffff); + field_combo.intr_block_rf.notif_fifo_not_empty_intr_count_r.cnt.incrthreshold = (field_storage.intr_block_rf.notif_fifo_not_empty_intr_count_r.cnt.value >= 32'hffffffff); + field_combo.intr_block_rf.notif_fifo_not_empty_intr_count_r.cnt.incrsaturate = (field_storage.intr_block_rf.notif_fifo_not_empty_intr_count_r.cnt.value >= 32'hffffffff); if(next_c > 32'hffffffff) begin next_c = 32'hffffffff; load_next_c = '1; end - field_combo.intr_block_rf.notif_rd_fifo_full_intr_count_r.cnt.next = next_c; - field_combo.intr_block_rf.notif_rd_fifo_full_intr_count_r.cnt.load_next = load_next_c; + field_combo.intr_block_rf.notif_fifo_not_empty_intr_count_r.cnt.next = next_c; + field_combo.intr_block_rf.notif_fifo_not_empty_intr_count_r.cnt.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.notif_rd_fifo_full_intr_count_r.cnt.value <= 32'h0; - end else if(field_combo.intr_block_rf.notif_rd_fifo_full_intr_count_r.cnt.load_next) begin - field_storage.intr_block_rf.notif_rd_fifo_full_intr_count_r.cnt.value <= field_combo.intr_block_rf.notif_rd_fifo_full_intr_count_r.cnt.next; + field_storage.intr_block_rf.notif_fifo_not_empty_intr_count_r.cnt.value <= 32'h0; + end else if(field_combo.intr_block_rf.notif_fifo_not_empty_intr_count_r.cnt.load_next) begin + field_storage.intr_block_rf.notif_fifo_not_empty_intr_count_r.cnt.value <= field_combo.intr_block_rf.notif_fifo_not_empty_intr_count_r.cnt.next; end end - // Field: axi_dma_reg.intr_block_rf.notif_wr_fifo_not_full_intr_count_r.cnt + // Field: axi_dma_reg.intr_block_rf.notif_fifo_full_intr_count_r.cnt always_comb begin automatic logic [31:0] next_c; automatic logic load_next_c; - next_c = field_storage.intr_block_rf.notif_wr_fifo_not_full_intr_count_r.cnt.value; + next_c = field_storage.intr_block_rf.notif_fifo_full_intr_count_r.cnt.value; load_next_c = '0; - if(decoded_reg_strb.intr_block_rf.notif_wr_fifo_not_full_intr_count_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write - next_c = (field_storage.intr_block_rf.notif_wr_fifo_not_full_intr_count_r.cnt.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); + if(decoded_reg_strb.intr_block_rf.notif_fifo_full_intr_count_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.notif_fifo_full_intr_count_r.cnt.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); load_next_c = '1; end - if(field_storage.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r.pulse.value) begin // increment + if(field_storage.intr_block_rf.notif_fifo_full_intr_count_incr_r.pulse.value) begin // increment if(((33)'(next_c) + 32'h1) > 32'hffffffff) begin // up-counter saturated next_c = 32'hffffffff; end else begin @@ -2818,33 +2508,33 @@ module axi_dma_reg ( end load_next_c = '1; end - field_combo.intr_block_rf.notif_wr_fifo_not_full_intr_count_r.cnt.incrthreshold = (field_storage.intr_block_rf.notif_wr_fifo_not_full_intr_count_r.cnt.value >= 32'hffffffff); - field_combo.intr_block_rf.notif_wr_fifo_not_full_intr_count_r.cnt.incrsaturate = (field_storage.intr_block_rf.notif_wr_fifo_not_full_intr_count_r.cnt.value >= 32'hffffffff); + field_combo.intr_block_rf.notif_fifo_full_intr_count_r.cnt.incrthreshold = (field_storage.intr_block_rf.notif_fifo_full_intr_count_r.cnt.value >= 32'hffffffff); + field_combo.intr_block_rf.notif_fifo_full_intr_count_r.cnt.incrsaturate = (field_storage.intr_block_rf.notif_fifo_full_intr_count_r.cnt.value >= 32'hffffffff); if(next_c > 32'hffffffff) begin next_c = 32'hffffffff; load_next_c = '1; end - field_combo.intr_block_rf.notif_wr_fifo_not_full_intr_count_r.cnt.next = next_c; - field_combo.intr_block_rf.notif_wr_fifo_not_full_intr_count_r.cnt.load_next = load_next_c; + field_combo.intr_block_rf.notif_fifo_full_intr_count_r.cnt.next = next_c; + field_combo.intr_block_rf.notif_fifo_full_intr_count_r.cnt.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.notif_wr_fifo_not_full_intr_count_r.cnt.value <= 32'h0; - end else if(field_combo.intr_block_rf.notif_wr_fifo_not_full_intr_count_r.cnt.load_next) begin - field_storage.intr_block_rf.notif_wr_fifo_not_full_intr_count_r.cnt.value <= field_combo.intr_block_rf.notif_wr_fifo_not_full_intr_count_r.cnt.next; + field_storage.intr_block_rf.notif_fifo_full_intr_count_r.cnt.value <= 32'h0; + end else if(field_combo.intr_block_rf.notif_fifo_full_intr_count_r.cnt.load_next) begin + field_storage.intr_block_rf.notif_fifo_full_intr_count_r.cnt.value <= field_combo.intr_block_rf.notif_fifo_full_intr_count_r.cnt.next; end end - // Field: axi_dma_reg.intr_block_rf.notif_wr_fifo_empty_intr_count_r.cnt + // Field: axi_dma_reg.intr_block_rf.notif_fifo_not_full_intr_count_r.cnt always_comb begin automatic logic [31:0] next_c; automatic logic load_next_c; - next_c = field_storage.intr_block_rf.notif_wr_fifo_empty_intr_count_r.cnt.value; + next_c = field_storage.intr_block_rf.notif_fifo_not_full_intr_count_r.cnt.value; load_next_c = '0; - if(decoded_reg_strb.intr_block_rf.notif_wr_fifo_empty_intr_count_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write - next_c = (field_storage.intr_block_rf.notif_wr_fifo_empty_intr_count_r.cnt.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); + if(decoded_reg_strb.intr_block_rf.notif_fifo_not_full_intr_count_r && decoded_req_is_wr && !(hwif_in.soc_req)) begin // SW write + next_c = (field_storage.intr_block_rf.notif_fifo_not_full_intr_count_r.cnt.value & ~decoded_wr_biten[31:0]) | (decoded_wr_data[31:0] & decoded_wr_biten[31:0]); load_next_c = '1; end - if(field_storage.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r.pulse.value) begin // increment + if(field_storage.intr_block_rf.notif_fifo_not_full_intr_count_incr_r.pulse.value) begin // increment if(((33)'(next_c) + 32'h1) > 32'hffffffff) begin // up-counter saturated next_c = 32'hffffffff; end else begin @@ -2852,20 +2542,20 @@ module axi_dma_reg ( end load_next_c = '1; end - field_combo.intr_block_rf.notif_wr_fifo_empty_intr_count_r.cnt.incrthreshold = (field_storage.intr_block_rf.notif_wr_fifo_empty_intr_count_r.cnt.value >= 32'hffffffff); - field_combo.intr_block_rf.notif_wr_fifo_empty_intr_count_r.cnt.incrsaturate = (field_storage.intr_block_rf.notif_wr_fifo_empty_intr_count_r.cnt.value >= 32'hffffffff); + field_combo.intr_block_rf.notif_fifo_not_full_intr_count_r.cnt.incrthreshold = (field_storage.intr_block_rf.notif_fifo_not_full_intr_count_r.cnt.value >= 32'hffffffff); + field_combo.intr_block_rf.notif_fifo_not_full_intr_count_r.cnt.incrsaturate = (field_storage.intr_block_rf.notif_fifo_not_full_intr_count_r.cnt.value >= 32'hffffffff); if(next_c > 32'hffffffff) begin next_c = 32'hffffffff; load_next_c = '1; end - field_combo.intr_block_rf.notif_wr_fifo_empty_intr_count_r.cnt.next = next_c; - field_combo.intr_block_rf.notif_wr_fifo_empty_intr_count_r.cnt.load_next = load_next_c; + field_combo.intr_block_rf.notif_fifo_not_full_intr_count_r.cnt.next = next_c; + field_combo.intr_block_rf.notif_fifo_not_full_intr_count_r.cnt.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.notif_wr_fifo_empty_intr_count_r.cnt.value <= 32'h0; - end else if(field_combo.intr_block_rf.notif_wr_fifo_empty_intr_count_r.cnt.load_next) begin - field_storage.intr_block_rf.notif_wr_fifo_empty_intr_count_r.cnt.value <= field_combo.intr_block_rf.notif_wr_fifo_empty_intr_count_r.cnt.next; + field_storage.intr_block_rf.notif_fifo_not_full_intr_count_r.cnt.value <= 32'h0; + end else if(field_combo.intr_block_rf.notif_fifo_not_full_intr_count_r.cnt.load_next) begin + field_storage.intr_block_rf.notif_fifo_not_full_intr_count_r.cnt.value <= field_combo.intr_block_rf.notif_fifo_not_full_intr_count_r.cnt.next; end end // Field: axi_dma_reg.intr_block_rf.error_cmd_dec_intr_count_incr_r.pulse @@ -3023,128 +2713,66 @@ module axi_dma_reg ( field_storage.intr_block_rf.error_sha_lock_intr_count_incr_r.pulse.value <= field_combo.intr_block_rf.error_sha_lock_intr_count_incr_r.pulse.next; end end - // Field: axi_dma_reg.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r.pulse - always_comb begin - automatic logic [0:0] next_c; - automatic logic load_next_c; - next_c = field_storage.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r.pulse.value; - load_next_c = '0; - if(field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_oflow_trig.value) begin // HW Write - we - next_c = field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_oflow_trig.value; - load_next_c = '1; - end else if(hwif_in.intr_block_rf.error_internal_intr_r.error_rd_fifo_oflow_sts.hwset) begin // HW Set - next_c = '1; - load_next_c = '1; - end - if(field_storage.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r.pulse.value) begin // decrement - field_combo.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r.pulse.underflow = (next_c < (1'h1)); - next_c = next_c - 1'h1; - load_next_c = '1; - end else begin - field_combo.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r.pulse.underflow = '0; - end - field_combo.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r.pulse.decrthreshold = (field_storage.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r.pulse.value <= 1'd0); - field_combo.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r.pulse.next = next_c; - field_combo.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r.pulse.load_next = load_next_c; - end - always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin - if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r.pulse.value <= 1'h0; - end else if(field_combo.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r.pulse.load_next) begin - field_storage.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r.pulse.value <= field_combo.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r.pulse.next; - end - end - // Field: axi_dma_reg.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r.pulse - always_comb begin - automatic logic [0:0] next_c; - automatic logic load_next_c; - next_c = field_storage.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r.pulse.value; - load_next_c = '0; - if(field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_uflow_trig.value) begin // HW Write - we - next_c = field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_uflow_trig.value; - load_next_c = '1; - end else if(hwif_in.intr_block_rf.error_internal_intr_r.error_rd_fifo_uflow_sts.hwset) begin // HW Set - next_c = '1; - load_next_c = '1; - end - if(field_storage.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r.pulse.value) begin // decrement - field_combo.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r.pulse.underflow = (next_c < (1'h1)); - next_c = next_c - 1'h1; - load_next_c = '1; - end else begin - field_combo.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r.pulse.underflow = '0; - end - field_combo.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r.pulse.decrthreshold = (field_storage.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r.pulse.value <= 1'd0); - field_combo.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r.pulse.next = next_c; - field_combo.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r.pulse.load_next = load_next_c; - end - always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin - if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r.pulse.value <= 1'h0; - end else if(field_combo.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r.pulse.load_next) begin - field_storage.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r.pulse.value <= field_combo.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r.pulse.next; - end - end - // Field: axi_dma_reg.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r.pulse + // Field: axi_dma_reg.intr_block_rf.error_fifo_oflow_intr_count_incr_r.pulse always_comb begin automatic logic [0:0] next_c; automatic logic load_next_c; - next_c = field_storage.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r.pulse.value; + next_c = field_storage.intr_block_rf.error_fifo_oflow_intr_count_incr_r.pulse.value; load_next_c = '0; - if(field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_oflow_trig.value) begin // HW Write - we - next_c = field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_oflow_trig.value; + if(field_storage.intr_block_rf.error_intr_trig_r.error_fifo_oflow_trig.value) begin // HW Write - we + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_fifo_oflow_trig.value; load_next_c = '1; - end else if(hwif_in.intr_block_rf.error_internal_intr_r.error_wr_fifo_oflow_sts.hwset) begin // HW Set + end else if(hwif_in.intr_block_rf.error_internal_intr_r.error_fifo_oflow_sts.hwset) begin // HW Set next_c = '1; load_next_c = '1; end - if(field_storage.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r.pulse.value) begin // decrement - field_combo.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r.pulse.underflow = (next_c < (1'h1)); + if(field_storage.intr_block_rf.error_fifo_oflow_intr_count_incr_r.pulse.value) begin // decrement + field_combo.intr_block_rf.error_fifo_oflow_intr_count_incr_r.pulse.underflow = (next_c < (1'h1)); next_c = next_c - 1'h1; load_next_c = '1; end else begin - field_combo.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r.pulse.underflow = '0; + field_combo.intr_block_rf.error_fifo_oflow_intr_count_incr_r.pulse.underflow = '0; end - field_combo.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r.pulse.decrthreshold = (field_storage.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r.pulse.value <= 1'd0); - field_combo.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r.pulse.next = next_c; - field_combo.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r.pulse.load_next = load_next_c; + field_combo.intr_block_rf.error_fifo_oflow_intr_count_incr_r.pulse.decrthreshold = (field_storage.intr_block_rf.error_fifo_oflow_intr_count_incr_r.pulse.value <= 1'd0); + field_combo.intr_block_rf.error_fifo_oflow_intr_count_incr_r.pulse.next = next_c; + field_combo.intr_block_rf.error_fifo_oflow_intr_count_incr_r.pulse.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r.pulse.value <= 1'h0; - end else if(field_combo.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r.pulse.load_next) begin - field_storage.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r.pulse.value <= field_combo.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r.pulse.next; + field_storage.intr_block_rf.error_fifo_oflow_intr_count_incr_r.pulse.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_fifo_oflow_intr_count_incr_r.pulse.load_next) begin + field_storage.intr_block_rf.error_fifo_oflow_intr_count_incr_r.pulse.value <= field_combo.intr_block_rf.error_fifo_oflow_intr_count_incr_r.pulse.next; end end - // Field: axi_dma_reg.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r.pulse + // Field: axi_dma_reg.intr_block_rf.error_fifo_uflow_intr_count_incr_r.pulse always_comb begin automatic logic [0:0] next_c; automatic logic load_next_c; - next_c = field_storage.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r.pulse.value; + next_c = field_storage.intr_block_rf.error_fifo_uflow_intr_count_incr_r.pulse.value; load_next_c = '0; - if(field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_uflow_trig.value) begin // HW Write - we - next_c = field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_uflow_trig.value; + if(field_storage.intr_block_rf.error_intr_trig_r.error_fifo_uflow_trig.value) begin // HW Write - we + next_c = field_storage.intr_block_rf.error_intr_trig_r.error_fifo_uflow_trig.value; load_next_c = '1; - end else if(hwif_in.intr_block_rf.error_internal_intr_r.error_wr_fifo_uflow_sts.hwset) begin // HW Set + end else if(hwif_in.intr_block_rf.error_internal_intr_r.error_fifo_uflow_sts.hwset) begin // HW Set next_c = '1; load_next_c = '1; end - if(field_storage.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r.pulse.value) begin // decrement - field_combo.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r.pulse.underflow = (next_c < (1'h1)); + if(field_storage.intr_block_rf.error_fifo_uflow_intr_count_incr_r.pulse.value) begin // decrement + field_combo.intr_block_rf.error_fifo_uflow_intr_count_incr_r.pulse.underflow = (next_c < (1'h1)); next_c = next_c - 1'h1; load_next_c = '1; end else begin - field_combo.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r.pulse.underflow = '0; + field_combo.intr_block_rf.error_fifo_uflow_intr_count_incr_r.pulse.underflow = '0; end - field_combo.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r.pulse.decrthreshold = (field_storage.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r.pulse.value <= 1'd0); - field_combo.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r.pulse.next = next_c; - field_combo.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r.pulse.load_next = load_next_c; + field_combo.intr_block_rf.error_fifo_uflow_intr_count_incr_r.pulse.decrthreshold = (field_storage.intr_block_rf.error_fifo_uflow_intr_count_incr_r.pulse.value <= 1'd0); + field_combo.intr_block_rf.error_fifo_uflow_intr_count_incr_r.pulse.next = next_c; + field_combo.intr_block_rf.error_fifo_uflow_intr_count_incr_r.pulse.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r.pulse.value <= 1'h0; - end else if(field_combo.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r.pulse.load_next) begin - field_storage.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r.pulse.value <= field_combo.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r.pulse.next; + field_storage.intr_block_rf.error_fifo_uflow_intr_count_incr_r.pulse.value <= 1'h0; + end else if(field_combo.intr_block_rf.error_fifo_uflow_intr_count_incr_r.pulse.load_next) begin + field_storage.intr_block_rf.error_fifo_uflow_intr_count_incr_r.pulse.value <= field_combo.intr_block_rf.error_fifo_uflow_intr_count_incr_r.pulse.next; end end // Field: axi_dma_reg.intr_block_rf.notif_txn_done_intr_count_incr_r.pulse @@ -3178,128 +2806,128 @@ module axi_dma_reg ( field_storage.intr_block_rf.notif_txn_done_intr_count_incr_r.pulse.value <= field_combo.intr_block_rf.notif_txn_done_intr_count_incr_r.pulse.next; end end - // Field: axi_dma_reg.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r.pulse + // Field: axi_dma_reg.intr_block_rf.notif_fifo_empty_intr_count_incr_r.pulse always_comb begin automatic logic [0:0] next_c; automatic logic load_next_c; - next_c = field_storage.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r.pulse.value; + next_c = field_storage.intr_block_rf.notif_fifo_empty_intr_count_incr_r.pulse.value; load_next_c = '0; - if(field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_not_empty_trig.value) begin // HW Write - we - next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_not_empty_trig.value; + if(field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_empty_trig.value) begin // HW Write - we + next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_empty_trig.value; load_next_c = '1; - end else if(hwif_in.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_not_empty_sts.hwset) begin // HW Set + end else if(hwif_in.intr_block_rf.notif_internal_intr_r.notif_fifo_empty_sts.hwset) begin // HW Set next_c = '1; load_next_c = '1; end - if(field_storage.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r.pulse.value) begin // decrement - field_combo.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r.pulse.underflow = (next_c < (1'h1)); + if(field_storage.intr_block_rf.notif_fifo_empty_intr_count_incr_r.pulse.value) begin // decrement + field_combo.intr_block_rf.notif_fifo_empty_intr_count_incr_r.pulse.underflow = (next_c < (1'h1)); next_c = next_c - 1'h1; load_next_c = '1; end else begin - field_combo.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r.pulse.underflow = '0; + field_combo.intr_block_rf.notif_fifo_empty_intr_count_incr_r.pulse.underflow = '0; end - field_combo.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r.pulse.decrthreshold = (field_storage.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r.pulse.value <= 1'd0); - field_combo.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r.pulse.next = next_c; - field_combo.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r.pulse.load_next = load_next_c; + field_combo.intr_block_rf.notif_fifo_empty_intr_count_incr_r.pulse.decrthreshold = (field_storage.intr_block_rf.notif_fifo_empty_intr_count_incr_r.pulse.value <= 1'd0); + field_combo.intr_block_rf.notif_fifo_empty_intr_count_incr_r.pulse.next = next_c; + field_combo.intr_block_rf.notif_fifo_empty_intr_count_incr_r.pulse.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r.pulse.value <= 1'h0; - end else if(field_combo.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r.pulse.load_next) begin - field_storage.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r.pulse.value <= field_combo.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r.pulse.next; + field_storage.intr_block_rf.notif_fifo_empty_intr_count_incr_r.pulse.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_fifo_empty_intr_count_incr_r.pulse.load_next) begin + field_storage.intr_block_rf.notif_fifo_empty_intr_count_incr_r.pulse.value <= field_combo.intr_block_rf.notif_fifo_empty_intr_count_incr_r.pulse.next; end end - // Field: axi_dma_reg.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r.pulse + // Field: axi_dma_reg.intr_block_rf.notif_fifo_not_empty_intr_count_incr_r.pulse always_comb begin automatic logic [0:0] next_c; automatic logic load_next_c; - next_c = field_storage.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r.pulse.value; + next_c = field_storage.intr_block_rf.notif_fifo_not_empty_intr_count_incr_r.pulse.value; load_next_c = '0; - if(field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_full_trig.value) begin // HW Write - we - next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_full_trig.value; + if(field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_not_empty_trig.value) begin // HW Write - we + next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_not_empty_trig.value; load_next_c = '1; - end else if(hwif_in.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_full_sts.hwset) begin // HW Set + end else if(hwif_in.intr_block_rf.notif_internal_intr_r.notif_fifo_not_empty_sts.hwset) begin // HW Set next_c = '1; load_next_c = '1; end - if(field_storage.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r.pulse.value) begin // decrement - field_combo.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r.pulse.underflow = (next_c < (1'h1)); + if(field_storage.intr_block_rf.notif_fifo_not_empty_intr_count_incr_r.pulse.value) begin // decrement + field_combo.intr_block_rf.notif_fifo_not_empty_intr_count_incr_r.pulse.underflow = (next_c < (1'h1)); next_c = next_c - 1'h1; load_next_c = '1; end else begin - field_combo.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r.pulse.underflow = '0; + field_combo.intr_block_rf.notif_fifo_not_empty_intr_count_incr_r.pulse.underflow = '0; end - field_combo.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r.pulse.decrthreshold = (field_storage.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r.pulse.value <= 1'd0); - field_combo.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r.pulse.next = next_c; - field_combo.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r.pulse.load_next = load_next_c; + field_combo.intr_block_rf.notif_fifo_not_empty_intr_count_incr_r.pulse.decrthreshold = (field_storage.intr_block_rf.notif_fifo_not_empty_intr_count_incr_r.pulse.value <= 1'd0); + field_combo.intr_block_rf.notif_fifo_not_empty_intr_count_incr_r.pulse.next = next_c; + field_combo.intr_block_rf.notif_fifo_not_empty_intr_count_incr_r.pulse.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r.pulse.value <= 1'h0; - end else if(field_combo.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r.pulse.load_next) begin - field_storage.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r.pulse.value <= field_combo.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r.pulse.next; + field_storage.intr_block_rf.notif_fifo_not_empty_intr_count_incr_r.pulse.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_fifo_not_empty_intr_count_incr_r.pulse.load_next) begin + field_storage.intr_block_rf.notif_fifo_not_empty_intr_count_incr_r.pulse.value <= field_combo.intr_block_rf.notif_fifo_not_empty_intr_count_incr_r.pulse.next; end end - // Field: axi_dma_reg.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r.pulse + // Field: axi_dma_reg.intr_block_rf.notif_fifo_full_intr_count_incr_r.pulse always_comb begin automatic logic [0:0] next_c; automatic logic load_next_c; - next_c = field_storage.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r.pulse.value; + next_c = field_storage.intr_block_rf.notif_fifo_full_intr_count_incr_r.pulse.value; load_next_c = '0; - if(field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_not_full_trig.value) begin // HW Write - we - next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_not_full_trig.value; + if(field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_full_trig.value) begin // HW Write - we + next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_full_trig.value; load_next_c = '1; - end else if(hwif_in.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_not_full_sts.hwset) begin // HW Set + end else if(hwif_in.intr_block_rf.notif_internal_intr_r.notif_fifo_full_sts.hwset) begin // HW Set next_c = '1; load_next_c = '1; end - if(field_storage.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r.pulse.value) begin // decrement - field_combo.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r.pulse.underflow = (next_c < (1'h1)); + if(field_storage.intr_block_rf.notif_fifo_full_intr_count_incr_r.pulse.value) begin // decrement + field_combo.intr_block_rf.notif_fifo_full_intr_count_incr_r.pulse.underflow = (next_c < (1'h1)); next_c = next_c - 1'h1; load_next_c = '1; end else begin - field_combo.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r.pulse.underflow = '0; + field_combo.intr_block_rf.notif_fifo_full_intr_count_incr_r.pulse.underflow = '0; end - field_combo.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r.pulse.decrthreshold = (field_storage.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r.pulse.value <= 1'd0); - field_combo.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r.pulse.next = next_c; - field_combo.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r.pulse.load_next = load_next_c; + field_combo.intr_block_rf.notif_fifo_full_intr_count_incr_r.pulse.decrthreshold = (field_storage.intr_block_rf.notif_fifo_full_intr_count_incr_r.pulse.value <= 1'd0); + field_combo.intr_block_rf.notif_fifo_full_intr_count_incr_r.pulse.next = next_c; + field_combo.intr_block_rf.notif_fifo_full_intr_count_incr_r.pulse.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r.pulse.value <= 1'h0; - end else if(field_combo.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r.pulse.load_next) begin - field_storage.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r.pulse.value <= field_combo.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r.pulse.next; + field_storage.intr_block_rf.notif_fifo_full_intr_count_incr_r.pulse.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_fifo_full_intr_count_incr_r.pulse.load_next) begin + field_storage.intr_block_rf.notif_fifo_full_intr_count_incr_r.pulse.value <= field_combo.intr_block_rf.notif_fifo_full_intr_count_incr_r.pulse.next; end end - // Field: axi_dma_reg.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r.pulse + // Field: axi_dma_reg.intr_block_rf.notif_fifo_not_full_intr_count_incr_r.pulse always_comb begin automatic logic [0:0] next_c; automatic logic load_next_c; - next_c = field_storage.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r.pulse.value; + next_c = field_storage.intr_block_rf.notif_fifo_not_full_intr_count_incr_r.pulse.value; load_next_c = '0; - if(field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_empty_trig.value) begin // HW Write - we - next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_empty_trig.value; + if(field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_not_full_trig.value) begin // HW Write - we + next_c = field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_not_full_trig.value; load_next_c = '1; - end else if(hwif_in.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_empty_sts.hwset) begin // HW Set + end else if(hwif_in.intr_block_rf.notif_internal_intr_r.notif_fifo_not_full_sts.hwset) begin // HW Set next_c = '1; load_next_c = '1; end - if(field_storage.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r.pulse.value) begin // decrement - field_combo.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r.pulse.underflow = (next_c < (1'h1)); + if(field_storage.intr_block_rf.notif_fifo_not_full_intr_count_incr_r.pulse.value) begin // decrement + field_combo.intr_block_rf.notif_fifo_not_full_intr_count_incr_r.pulse.underflow = (next_c < (1'h1)); next_c = next_c - 1'h1; load_next_c = '1; end else begin - field_combo.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r.pulse.underflow = '0; + field_combo.intr_block_rf.notif_fifo_not_full_intr_count_incr_r.pulse.underflow = '0; end - field_combo.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r.pulse.decrthreshold = (field_storage.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r.pulse.value <= 1'd0); - field_combo.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r.pulse.next = next_c; - field_combo.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r.pulse.load_next = load_next_c; + field_combo.intr_block_rf.notif_fifo_not_full_intr_count_incr_r.pulse.decrthreshold = (field_storage.intr_block_rf.notif_fifo_not_full_intr_count_incr_r.pulse.value <= 1'd0); + field_combo.intr_block_rf.notif_fifo_not_full_intr_count_incr_r.pulse.next = next_c; + field_combo.intr_block_rf.notif_fifo_not_full_intr_count_incr_r.pulse.load_next = load_next_c; end always_ff @(posedge clk or negedge hwif_in.cptra_rst_b) begin if(~hwif_in.cptra_rst_b) begin - field_storage.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r.pulse.value <= 1'h0; - end else if(field_combo.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r.pulse.load_next) begin - field_storage.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r.pulse.value <= field_combo.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r.pulse.next; + field_storage.intr_block_rf.notif_fifo_not_full_intr_count_incr_r.pulse.value <= 1'h0; + end else if(field_combo.intr_block_rf.notif_fifo_not_full_intr_count_incr_r.pulse.load_next) begin + field_storage.intr_block_rf.notif_fifo_not_full_intr_count_incr_r.pulse.value <= field_combo.intr_block_rf.notif_fifo_not_full_intr_count_incr_r.pulse.next; end end @@ -3319,7 +2947,7 @@ module axi_dma_reg ( logic [31:0] readback_data; // Assign readback values to a flattened array - logic [49-1:0][31:0] readback_array; + logic [45-1:0][31:0] readback_array; assign readback_array[0][31:0] = (decoded_reg_strb.id && !decoded_req_is_wr) ? 32'h67768068 : '0; assign readback_array[1][31:0] = (decoded_reg_strb.cap && !decoded_req_is_wr) ? 32'h0 : '0; assign readback_array[2][0:0] = (decoded_reg_strb.ctrl && !decoded_req_is_wr) ? field_storage.ctrl.go.value : '0; @@ -3336,8 +2964,8 @@ module axi_dma_reg ( assign readback_array[3][0:0] = (decoded_reg_strb.status0 && !decoded_req_is_wr) ? hwif_in.status0.busy.next : '0; assign readback_array[3][1:1] = (decoded_reg_strb.status0 && !decoded_req_is_wr) ? hwif_in.status0.error.next : '0; assign readback_array[3][15:2] = (decoded_reg_strb.status0 && !decoded_req_is_wr) ? 14'h0 : '0; - assign readback_array[3][18:16] = (decoded_reg_strb.status0 && !decoded_req_is_wr) ? field_storage.status0.axi_dma_fsm_ps.value : '0; - assign readback_array[3][31:19] = (decoded_reg_strb.status0 && !decoded_req_is_wr) ? 13'h0 : '0; + assign readback_array[3][17:16] = (decoded_reg_strb.status0 && !decoded_req_is_wr) ? field_storage.status0.axi_dma_fsm_ps.value : '0; + assign readback_array[3][31:18] = (decoded_reg_strb.status0 && !decoded_req_is_wr) ? 14'h0 : '0; assign readback_array[4][31:0] = (decoded_reg_strb.status1 && !decoded_req_is_wr) ? hwif_in.status1.bytes_remaining.next : '0; assign readback_array[5][31:0] = (decoded_reg_strb.src_addr_l && !decoded_req_is_wr) ? field_storage.src_addr_l.addr_l.value : '0; assign readback_array[6][31:0] = (decoded_reg_strb.src_addr_h && !decoded_req_is_wr) ? field_storage.src_addr_h.addr_h.value : '0; @@ -3355,16 +2983,14 @@ module axi_dma_reg ( assign readback_array[13][2:2] = (decoded_reg_strb.intr_block_rf.error_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_en_r.error_axi_wr_en.value : '0; assign readback_array[13][3:3] = (decoded_reg_strb.intr_block_rf.error_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_en_r.error_mbox_lock_en.value : '0; assign readback_array[13][4:4] = (decoded_reg_strb.intr_block_rf.error_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_en_r.error_sha_lock_en.value : '0; - assign readback_array[13][5:5] = (decoded_reg_strb.intr_block_rf.error_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_en_r.error_rd_fifo_oflow_en.value : '0; - assign readback_array[13][6:6] = (decoded_reg_strb.intr_block_rf.error_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_en_r.error_rd_fifo_uflow_en.value : '0; - assign readback_array[13][7:7] = (decoded_reg_strb.intr_block_rf.error_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_en_r.error_wr_fifo_oflow_en.value : '0; - assign readback_array[13][8:8] = (decoded_reg_strb.intr_block_rf.error_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_en_r.error_wr_fifo_uflow_en.value : '0; - assign readback_array[13][31:9] = '0; + assign readback_array[13][5:5] = (decoded_reg_strb.intr_block_rf.error_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_en_r.error_fifo_oflow_en.value : '0; + assign readback_array[13][6:6] = (decoded_reg_strb.intr_block_rf.error_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_en_r.error_fifo_uflow_en.value : '0; + assign readback_array[13][31:7] = '0; assign readback_array[14][0:0] = (decoded_reg_strb.intr_block_rf.notif_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_intr_en_r.notif_txn_done_en.value : '0; - assign readback_array[14][1:1] = (decoded_reg_strb.intr_block_rf.notif_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_intr_en_r.notif_rd_fifo_not_empty_en.value : '0; - assign readback_array[14][2:2] = (decoded_reg_strb.intr_block_rf.notif_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_intr_en_r.notif_rd_fifo_full_en.value : '0; - assign readback_array[14][3:3] = (decoded_reg_strb.intr_block_rf.notif_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_intr_en_r.notif_wr_fifo_not_full_en.value : '0; - assign readback_array[14][4:4] = (decoded_reg_strb.intr_block_rf.notif_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_intr_en_r.notif_wr_fifo_empty_en.value : '0; + assign readback_array[14][1:1] = (decoded_reg_strb.intr_block_rf.notif_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_intr_en_r.notif_fifo_empty_en.value : '0; + assign readback_array[14][2:2] = (decoded_reg_strb.intr_block_rf.notif_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_intr_en_r.notif_fifo_not_empty_en.value : '0; + assign readback_array[14][3:3] = (decoded_reg_strb.intr_block_rf.notif_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_intr_en_r.notif_fifo_full_en.value : '0; + assign readback_array[14][4:4] = (decoded_reg_strb.intr_block_rf.notif_intr_en_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_intr_en_r.notif_fifo_not_full_en.value : '0; assign readback_array[14][31:5] = '0; assign readback_array[15][0:0] = (decoded_reg_strb.intr_block_rf.error_global_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_global_intr_r.agg_sts.value : '0; assign readback_array[15][31:1] = '0; @@ -3375,75 +3001,65 @@ module axi_dma_reg ( assign readback_array[17][2:2] = (decoded_reg_strb.intr_block_rf.error_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_internal_intr_r.error_axi_wr_sts.value : '0; assign readback_array[17][3:3] = (decoded_reg_strb.intr_block_rf.error_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_internal_intr_r.error_mbox_lock_sts.value : '0; assign readback_array[17][4:4] = (decoded_reg_strb.intr_block_rf.error_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_internal_intr_r.error_sha_lock_sts.value : '0; - assign readback_array[17][5:5] = (decoded_reg_strb.intr_block_rf.error_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_internal_intr_r.error_rd_fifo_oflow_sts.value : '0; - assign readback_array[17][6:6] = (decoded_reg_strb.intr_block_rf.error_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_internal_intr_r.error_rd_fifo_uflow_sts.value : '0; - assign readback_array[17][7:7] = (decoded_reg_strb.intr_block_rf.error_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_internal_intr_r.error_wr_fifo_oflow_sts.value : '0; - assign readback_array[17][8:8] = (decoded_reg_strb.intr_block_rf.error_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_internal_intr_r.error_wr_fifo_uflow_sts.value : '0; - assign readback_array[17][31:9] = '0; + assign readback_array[17][5:5] = (decoded_reg_strb.intr_block_rf.error_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_internal_intr_r.error_fifo_oflow_sts.value : '0; + assign readback_array[17][6:6] = (decoded_reg_strb.intr_block_rf.error_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_internal_intr_r.error_fifo_uflow_sts.value : '0; + assign readback_array[17][31:7] = '0; assign readback_array[18][0:0] = (decoded_reg_strb.intr_block_rf.notif_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_internal_intr_r.notif_txn_done_sts.value : '0; - assign readback_array[18][1:1] = (decoded_reg_strb.intr_block_rf.notif_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_not_empty_sts.value : '0; - assign readback_array[18][2:2] = (decoded_reg_strb.intr_block_rf.notif_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_internal_intr_r.notif_rd_fifo_full_sts.value : '0; - assign readback_array[18][3:3] = (decoded_reg_strb.intr_block_rf.notif_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_not_full_sts.value : '0; - assign readback_array[18][4:4] = (decoded_reg_strb.intr_block_rf.notif_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_internal_intr_r.notif_wr_fifo_empty_sts.value : '0; + assign readback_array[18][1:1] = (decoded_reg_strb.intr_block_rf.notif_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_internal_intr_r.notif_fifo_empty_sts.value : '0; + assign readback_array[18][2:2] = (decoded_reg_strb.intr_block_rf.notif_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_internal_intr_r.notif_fifo_not_empty_sts.value : '0; + assign readback_array[18][3:3] = (decoded_reg_strb.intr_block_rf.notif_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_internal_intr_r.notif_fifo_full_sts.value : '0; + assign readback_array[18][4:4] = (decoded_reg_strb.intr_block_rf.notif_internal_intr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_internal_intr_r.notif_fifo_not_full_sts.value : '0; assign readback_array[18][31:5] = '0; assign readback_array[19][0:0] = (decoded_reg_strb.intr_block_rf.error_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_trig_r.error_cmd_dec_trig.value : '0; assign readback_array[19][1:1] = (decoded_reg_strb.intr_block_rf.error_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_trig_r.error_axi_rd_trig.value : '0; assign readback_array[19][2:2] = (decoded_reg_strb.intr_block_rf.error_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_trig_r.error_axi_wr_trig.value : '0; assign readback_array[19][3:3] = (decoded_reg_strb.intr_block_rf.error_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_trig_r.error_mbox_lock_trig.value : '0; assign readback_array[19][4:4] = (decoded_reg_strb.intr_block_rf.error_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_trig_r.error_sha_lock_trig.value : '0; - assign readback_array[19][5:5] = (decoded_reg_strb.intr_block_rf.error_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_oflow_trig.value : '0; - assign readback_array[19][6:6] = (decoded_reg_strb.intr_block_rf.error_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_trig_r.error_rd_fifo_uflow_trig.value : '0; - assign readback_array[19][7:7] = (decoded_reg_strb.intr_block_rf.error_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_oflow_trig.value : '0; - assign readback_array[19][8:8] = (decoded_reg_strb.intr_block_rf.error_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_trig_r.error_wr_fifo_uflow_trig.value : '0; - assign readback_array[19][31:9] = '0; + assign readback_array[19][5:5] = (decoded_reg_strb.intr_block_rf.error_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_trig_r.error_fifo_oflow_trig.value : '0; + assign readback_array[19][6:6] = (decoded_reg_strb.intr_block_rf.error_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_intr_trig_r.error_fifo_uflow_trig.value : '0; + assign readback_array[19][31:7] = '0; assign readback_array[20][0:0] = (decoded_reg_strb.intr_block_rf.notif_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_intr_trig_r.notif_txn_done_trig.value : '0; - assign readback_array[20][1:1] = (decoded_reg_strb.intr_block_rf.notif_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_not_empty_trig.value : '0; - assign readback_array[20][2:2] = (decoded_reg_strb.intr_block_rf.notif_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_intr_trig_r.notif_rd_fifo_full_trig.value : '0; - assign readback_array[20][3:3] = (decoded_reg_strb.intr_block_rf.notif_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_not_full_trig.value : '0; - assign readback_array[20][4:4] = (decoded_reg_strb.intr_block_rf.notif_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_intr_trig_r.notif_wr_fifo_empty_trig.value : '0; + assign readback_array[20][1:1] = (decoded_reg_strb.intr_block_rf.notif_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_empty_trig.value : '0; + assign readback_array[20][2:2] = (decoded_reg_strb.intr_block_rf.notif_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_not_empty_trig.value : '0; + assign readback_array[20][3:3] = (decoded_reg_strb.intr_block_rf.notif_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_full_trig.value : '0; + assign readback_array[20][4:4] = (decoded_reg_strb.intr_block_rf.notif_intr_trig_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_intr_trig_r.notif_fifo_not_full_trig.value : '0; assign readback_array[20][31:5] = '0; assign readback_array[21][31:0] = (decoded_reg_strb.intr_block_rf.error_cmd_dec_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_cmd_dec_intr_count_r.cnt.value : '0; assign readback_array[22][31:0] = (decoded_reg_strb.intr_block_rf.error_axi_rd_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_axi_rd_intr_count_r.cnt.value : '0; assign readback_array[23][31:0] = (decoded_reg_strb.intr_block_rf.error_axi_wr_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_axi_wr_intr_count_r.cnt.value : '0; assign readback_array[24][31:0] = (decoded_reg_strb.intr_block_rf.error_mbox_lock_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_mbox_lock_intr_count_r.cnt.value : '0; assign readback_array[25][31:0] = (decoded_reg_strb.intr_block_rf.error_sha_lock_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_sha_lock_intr_count_r.cnt.value : '0; - assign readback_array[26][31:0] = (decoded_reg_strb.intr_block_rf.error_rd_fifo_oflow_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_rd_fifo_oflow_intr_count_r.cnt.value : '0; - assign readback_array[27][31:0] = (decoded_reg_strb.intr_block_rf.error_rd_fifo_uflow_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_rd_fifo_uflow_intr_count_r.cnt.value : '0; - assign readback_array[28][31:0] = (decoded_reg_strb.intr_block_rf.error_wr_fifo_oflow_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_wr_fifo_oflow_intr_count_r.cnt.value : '0; - assign readback_array[29][31:0] = (decoded_reg_strb.intr_block_rf.error_wr_fifo_uflow_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_wr_fifo_uflow_intr_count_r.cnt.value : '0; - assign readback_array[30][31:0] = (decoded_reg_strb.intr_block_rf.notif_txn_done_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_txn_done_intr_count_r.cnt.value : '0; - assign readback_array[31][31:0] = (decoded_reg_strb.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_rd_fifo_not_empty_intr_count_r.cnt.value : '0; - assign readback_array[32][31:0] = (decoded_reg_strb.intr_block_rf.notif_rd_fifo_full_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_rd_fifo_full_intr_count_r.cnt.value : '0; - assign readback_array[33][31:0] = (decoded_reg_strb.intr_block_rf.notif_wr_fifo_not_full_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_wr_fifo_not_full_intr_count_r.cnt.value : '0; - assign readback_array[34][31:0] = (decoded_reg_strb.intr_block_rf.notif_wr_fifo_empty_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_wr_fifo_empty_intr_count_r.cnt.value : '0; - assign readback_array[35][0:0] = (decoded_reg_strb.intr_block_rf.error_cmd_dec_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_cmd_dec_intr_count_incr_r.pulse.value : '0; + assign readback_array[26][31:0] = (decoded_reg_strb.intr_block_rf.error_fifo_oflow_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_fifo_oflow_intr_count_r.cnt.value : '0; + assign readback_array[27][31:0] = (decoded_reg_strb.intr_block_rf.error_fifo_uflow_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_fifo_uflow_intr_count_r.cnt.value : '0; + assign readback_array[28][31:0] = (decoded_reg_strb.intr_block_rf.notif_txn_done_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_txn_done_intr_count_r.cnt.value : '0; + assign readback_array[29][31:0] = (decoded_reg_strb.intr_block_rf.notif_fifo_empty_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_fifo_empty_intr_count_r.cnt.value : '0; + assign readback_array[30][31:0] = (decoded_reg_strb.intr_block_rf.notif_fifo_not_empty_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_fifo_not_empty_intr_count_r.cnt.value : '0; + assign readback_array[31][31:0] = (decoded_reg_strb.intr_block_rf.notif_fifo_full_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_fifo_full_intr_count_r.cnt.value : '0; + assign readback_array[32][31:0] = (decoded_reg_strb.intr_block_rf.notif_fifo_not_full_intr_count_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_fifo_not_full_intr_count_r.cnt.value : '0; + assign readback_array[33][0:0] = (decoded_reg_strb.intr_block_rf.error_cmd_dec_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_cmd_dec_intr_count_incr_r.pulse.value : '0; + assign readback_array[33][31:1] = '0; + assign readback_array[34][0:0] = (decoded_reg_strb.intr_block_rf.error_axi_rd_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_axi_rd_intr_count_incr_r.pulse.value : '0; + assign readback_array[34][31:1] = '0; + assign readback_array[35][0:0] = (decoded_reg_strb.intr_block_rf.error_axi_wr_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_axi_wr_intr_count_incr_r.pulse.value : '0; assign readback_array[35][31:1] = '0; - assign readback_array[36][0:0] = (decoded_reg_strb.intr_block_rf.error_axi_rd_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_axi_rd_intr_count_incr_r.pulse.value : '0; + assign readback_array[36][0:0] = (decoded_reg_strb.intr_block_rf.error_mbox_lock_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_mbox_lock_intr_count_incr_r.pulse.value : '0; assign readback_array[36][31:1] = '0; - assign readback_array[37][0:0] = (decoded_reg_strb.intr_block_rf.error_axi_wr_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_axi_wr_intr_count_incr_r.pulse.value : '0; + assign readback_array[37][0:0] = (decoded_reg_strb.intr_block_rf.error_sha_lock_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_sha_lock_intr_count_incr_r.pulse.value : '0; assign readback_array[37][31:1] = '0; - assign readback_array[38][0:0] = (decoded_reg_strb.intr_block_rf.error_mbox_lock_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_mbox_lock_intr_count_incr_r.pulse.value : '0; + assign readback_array[38][0:0] = (decoded_reg_strb.intr_block_rf.error_fifo_oflow_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_fifo_oflow_intr_count_incr_r.pulse.value : '0; assign readback_array[38][31:1] = '0; - assign readback_array[39][0:0] = (decoded_reg_strb.intr_block_rf.error_sha_lock_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_sha_lock_intr_count_incr_r.pulse.value : '0; + assign readback_array[39][0:0] = (decoded_reg_strb.intr_block_rf.error_fifo_uflow_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_fifo_uflow_intr_count_incr_r.pulse.value : '0; assign readback_array[39][31:1] = '0; - assign readback_array[40][0:0] = (decoded_reg_strb.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_rd_fifo_oflow_intr_count_incr_r.pulse.value : '0; + assign readback_array[40][0:0] = (decoded_reg_strb.intr_block_rf.notif_txn_done_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_txn_done_intr_count_incr_r.pulse.value : '0; assign readback_array[40][31:1] = '0; - assign readback_array[41][0:0] = (decoded_reg_strb.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_rd_fifo_uflow_intr_count_incr_r.pulse.value : '0; + assign readback_array[41][0:0] = (decoded_reg_strb.intr_block_rf.notif_fifo_empty_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_fifo_empty_intr_count_incr_r.pulse.value : '0; assign readback_array[41][31:1] = '0; - assign readback_array[42][0:0] = (decoded_reg_strb.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_wr_fifo_oflow_intr_count_incr_r.pulse.value : '0; + assign readback_array[42][0:0] = (decoded_reg_strb.intr_block_rf.notif_fifo_not_empty_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_fifo_not_empty_intr_count_incr_r.pulse.value : '0; assign readback_array[42][31:1] = '0; - assign readback_array[43][0:0] = (decoded_reg_strb.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.error_wr_fifo_uflow_intr_count_incr_r.pulse.value : '0; + assign readback_array[43][0:0] = (decoded_reg_strb.intr_block_rf.notif_fifo_full_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_fifo_full_intr_count_incr_r.pulse.value : '0; assign readback_array[43][31:1] = '0; - assign readback_array[44][0:0] = (decoded_reg_strb.intr_block_rf.notif_txn_done_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_txn_done_intr_count_incr_r.pulse.value : '0; + assign readback_array[44][0:0] = (decoded_reg_strb.intr_block_rf.notif_fifo_not_full_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_fifo_not_full_intr_count_incr_r.pulse.value : '0; assign readback_array[44][31:1] = '0; - assign readback_array[45][0:0] = (decoded_reg_strb.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_rd_fifo_not_empty_intr_count_incr_r.pulse.value : '0; - assign readback_array[45][31:1] = '0; - assign readback_array[46][0:0] = (decoded_reg_strb.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_rd_fifo_full_intr_count_incr_r.pulse.value : '0; - assign readback_array[46][31:1] = '0; - assign readback_array[47][0:0] = (decoded_reg_strb.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_wr_fifo_not_full_intr_count_incr_r.pulse.value : '0; - assign readback_array[47][31:1] = '0; - assign readback_array[48][0:0] = (decoded_reg_strb.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r && !decoded_req_is_wr) ? field_storage.intr_block_rf.notif_wr_fifo_empty_intr_count_incr_r.pulse.value : '0; - assign readback_array[48][31:1] = '0; // Reduce the array always_comb begin @@ -3451,7 +3067,7 @@ module axi_dma_reg ( readback_done = decoded_req & ~decoded_req_is_wr; readback_err = '0; readback_data_var = '0; - for(int i=0; i<49; i++) readback_data_var |= readback_array[i]; + for(int i=0; i<45; i++) readback_data_var |= readback_array[i]; readback_data = readback_data_var; end diff --git a/src/axi/rtl/axi_dma_reg_pkg.sv b/src/axi/rtl/axi_dma_reg_pkg.sv index 577419ac5..7f2b42a18 100644 --- a/src/axi/rtl/axi_dma_reg_pkg.sv +++ b/src/axi/rtl/axi_dma_reg_pkg.sv @@ -28,7 +28,7 @@ package axi_dma_reg_pkg; } axi_dma_reg__status0__error__in_t; typedef struct packed{ - logic [2:0] next; + logic [1:0] next; } axi_dma_reg__status0__axi_dma_fsm_ps__in_t; typedef struct packed{ @@ -55,89 +55,80 @@ package axi_dma_reg_pkg; typedef struct packed{ logic hwset; - } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_cmd_dec_sts_enable_3fe3f38e_next_81a41b0f_resetsignal_f7aac87a__in_t; + } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0__error_cmd_dec_sts_enable_3fe3f38e_next_81a41b0f_resetsignal_f7aac87a__in_t; typedef struct packed{ logic hwset; - } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_axi_rd_sts_enable_ade70b75_next_9749130e_resetsignal_f7aac87a__in_t; + } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0__error_axi_rd_sts_enable_ade70b75_next_9749130e_resetsignal_f7aac87a__in_t; typedef struct packed{ logic hwset; - } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_axi_wr_sts_enable_8302157e_next_d030e286_resetsignal_f7aac87a__in_t; + } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0__error_axi_wr_sts_enable_8302157e_next_d030e286_resetsignal_f7aac87a__in_t; typedef struct packed{ logic hwset; - } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_mbox_lock_sts_enable_2200d685_next_dd20251c_resetsignal_f7aac87a__in_t; + } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0__error_mbox_lock_sts_enable_2200d685_next_dd20251c_resetsignal_f7aac87a__in_t; typedef struct packed{ logic hwset; - } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_sha_lock_sts_enable_b89b863e_next_78f72dee_resetsignal_f7aac87a__in_t; + } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0__error_sha_lock_sts_enable_b89b863e_next_78f72dee_resetsignal_f7aac87a__in_t; typedef struct packed{ logic hwset; - } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_rd_fifo_oflow_sts_enable_ce444ebc_next_bc36181d_resetsignal_f7aac87a__in_t; + } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0__error_fifo_oflow_sts_enable_db42b065_next_8d43e112_resetsignal_f7aac87a__in_t; typedef struct packed{ logic hwset; - } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_rd_fifo_uflow_sts_enable_1cfda6c8_next_6d78e176_resetsignal_f7aac87a__in_t; + } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0__error_fifo_uflow_sts_enable_fec90e1d_next_a25205a2_resetsignal_f7aac87a__in_t; typedef struct packed{ - logic hwset; - } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_wr_fifo_oflow_sts_enable_f9b14b09_next_cd655c82_resetsignal_f7aac87a__in_t; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0__error_cmd_dec_sts_enable_3fe3f38e_next_81a41b0f_resetsignal_f7aac87a__in_t error_cmd_dec_sts; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0__error_axi_rd_sts_enable_ade70b75_next_9749130e_resetsignal_f7aac87a__in_t error_axi_rd_sts; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0__error_axi_wr_sts_enable_8302157e_next_d030e286_resetsignal_f7aac87a__in_t error_axi_wr_sts; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0__error_mbox_lock_sts_enable_2200d685_next_dd20251c_resetsignal_f7aac87a__in_t error_mbox_lock_sts; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0__error_sha_lock_sts_enable_b89b863e_next_78f72dee_resetsignal_f7aac87a__in_t error_sha_lock_sts; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0__error_fifo_oflow_sts_enable_db42b065_next_8d43e112_resetsignal_f7aac87a__in_t error_fifo_oflow_sts; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0__error_fifo_uflow_sts_enable_fec90e1d_next_a25205a2_resetsignal_f7aac87a__in_t error_fifo_uflow_sts; + } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0__in_t; typedef struct packed{ logic hwset; - } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_wr_fifo_uflow_sts_enable_1265d7e2_next_ab50794e_resetsignal_f7aac87a__in_t; - - typedef struct packed{ - axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_cmd_dec_sts_enable_3fe3f38e_next_81a41b0f_resetsignal_f7aac87a__in_t error_cmd_dec_sts; - axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_axi_rd_sts_enable_ade70b75_next_9749130e_resetsignal_f7aac87a__in_t error_axi_rd_sts; - axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_axi_wr_sts_enable_8302157e_next_d030e286_resetsignal_f7aac87a__in_t error_axi_wr_sts; - axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_mbox_lock_sts_enable_2200d685_next_dd20251c_resetsignal_f7aac87a__in_t error_mbox_lock_sts; - axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_sha_lock_sts_enable_b89b863e_next_78f72dee_resetsignal_f7aac87a__in_t error_sha_lock_sts; - axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_rd_fifo_oflow_sts_enable_ce444ebc_next_bc36181d_resetsignal_f7aac87a__in_t error_rd_fifo_oflow_sts; - axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_rd_fifo_uflow_sts_enable_1cfda6c8_next_6d78e176_resetsignal_f7aac87a__in_t error_rd_fifo_uflow_sts; - axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_wr_fifo_oflow_sts_enable_f9b14b09_next_cd655c82_resetsignal_f7aac87a__in_t error_wr_fifo_oflow_sts; - axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__error_wr_fifo_uflow_sts_enable_1265d7e2_next_ab50794e_resetsignal_f7aac87a__in_t error_wr_fifo_uflow_sts; - } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__in_t; + } axi_dma_reg__intr_block_t__notif_intr_t_notif_fifo_empty_sts_d87d1786_notif_fifo_full_sts_64c66862_notif_fifo_not_empty_sts_1a0e2460_notif_fifo_not_full_sts_0266fe07_notif_txn_done_sts_0ee2f120__notif_txn_done_sts_enable_f3ace5c8_next_c04384c4__in_t; typedef struct packed{ logic hwset; - } axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10__notif_txn_done_sts_enable_f3ace5c8_next_c04384c4__in_t; + } axi_dma_reg__intr_block_t__notif_intr_t_notif_fifo_empty_sts_d87d1786_notif_fifo_full_sts_64c66862_notif_fifo_not_empty_sts_1a0e2460_notif_fifo_not_full_sts_0266fe07_notif_txn_done_sts_0ee2f120__notif_fifo_empty_sts_enable_13fbeac1_next_3b1b70cb__in_t; typedef struct packed{ logic hwset; - } axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10__notif_rd_fifo_not_empty_sts_enable_0d482b41_next_74852373__in_t; + } axi_dma_reg__intr_block_t__notif_intr_t_notif_fifo_empty_sts_d87d1786_notif_fifo_full_sts_64c66862_notif_fifo_not_empty_sts_1a0e2460_notif_fifo_not_full_sts_0266fe07_notif_txn_done_sts_0ee2f120__notif_fifo_not_empty_sts_enable_fc6f2a07_next_53ecda05__in_t; typedef struct packed{ logic hwset; - } axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10__notif_rd_fifo_full_sts_enable_c91f7bbe_next_e629e8b1__in_t; + } axi_dma_reg__intr_block_t__notif_intr_t_notif_fifo_empty_sts_d87d1786_notif_fifo_full_sts_64c66862_notif_fifo_not_empty_sts_1a0e2460_notif_fifo_not_full_sts_0266fe07_notif_txn_done_sts_0ee2f120__notif_fifo_full_sts_enable_d59af270_next_5df4004b__in_t; typedef struct packed{ logic hwset; - } axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10__notif_wr_fifo_not_full_sts_enable_56408030_next_753c80ba__in_t; + } axi_dma_reg__intr_block_t__notif_intr_t_notif_fifo_empty_sts_d87d1786_notif_fifo_full_sts_64c66862_notif_fifo_not_empty_sts_1a0e2460_notif_fifo_not_full_sts_0266fe07_notif_txn_done_sts_0ee2f120__notif_fifo_not_full_sts_enable_9ba0ed48_next_ed3f253d__in_t; typedef struct packed{ - logic hwset; - } axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10__notif_wr_fifo_empty_sts_enable_8bb9d7c3_next_c3514c8e__in_t; + axi_dma_reg__intr_block_t__notif_intr_t_notif_fifo_empty_sts_d87d1786_notif_fifo_full_sts_64c66862_notif_fifo_not_empty_sts_1a0e2460_notif_fifo_not_full_sts_0266fe07_notif_txn_done_sts_0ee2f120__notif_txn_done_sts_enable_f3ace5c8_next_c04384c4__in_t notif_txn_done_sts; + axi_dma_reg__intr_block_t__notif_intr_t_notif_fifo_empty_sts_d87d1786_notif_fifo_full_sts_64c66862_notif_fifo_not_empty_sts_1a0e2460_notif_fifo_not_full_sts_0266fe07_notif_txn_done_sts_0ee2f120__notif_fifo_empty_sts_enable_13fbeac1_next_3b1b70cb__in_t notif_fifo_empty_sts; + axi_dma_reg__intr_block_t__notif_intr_t_notif_fifo_empty_sts_d87d1786_notif_fifo_full_sts_64c66862_notif_fifo_not_empty_sts_1a0e2460_notif_fifo_not_full_sts_0266fe07_notif_txn_done_sts_0ee2f120__notif_fifo_not_empty_sts_enable_fc6f2a07_next_53ecda05__in_t notif_fifo_not_empty_sts; + axi_dma_reg__intr_block_t__notif_intr_t_notif_fifo_empty_sts_d87d1786_notif_fifo_full_sts_64c66862_notif_fifo_not_empty_sts_1a0e2460_notif_fifo_not_full_sts_0266fe07_notif_txn_done_sts_0ee2f120__notif_fifo_full_sts_enable_d59af270_next_5df4004b__in_t notif_fifo_full_sts; + axi_dma_reg__intr_block_t__notif_intr_t_notif_fifo_empty_sts_d87d1786_notif_fifo_full_sts_64c66862_notif_fifo_not_empty_sts_1a0e2460_notif_fifo_not_full_sts_0266fe07_notif_txn_done_sts_0ee2f120__notif_fifo_not_full_sts_enable_9ba0ed48_next_ed3f253d__in_t notif_fifo_not_full_sts; + } axi_dma_reg__intr_block_t__notif_intr_t_notif_fifo_empty_sts_d87d1786_notif_fifo_full_sts_64c66862_notif_fifo_not_empty_sts_1a0e2460_notif_fifo_not_full_sts_0266fe07_notif_txn_done_sts_0ee2f120__in_t; typedef struct packed{ - axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10__notif_txn_done_sts_enable_f3ace5c8_next_c04384c4__in_t notif_txn_done_sts; - axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10__notif_rd_fifo_not_empty_sts_enable_0d482b41_next_74852373__in_t notif_rd_fifo_not_empty_sts; - axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10__notif_rd_fifo_full_sts_enable_c91f7bbe_next_e629e8b1__in_t notif_rd_fifo_full_sts; - axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10__notif_wr_fifo_not_full_sts_enable_56408030_next_753c80ba__in_t notif_wr_fifo_not_full_sts; - axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10__notif_wr_fifo_empty_sts_enable_8bb9d7c3_next_c3514c8e__in_t notif_wr_fifo_empty_sts; - } axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10__in_t; - - typedef struct packed{ - axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__in_t error_internal_intr_r; - axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10__in_t notif_internal_intr_r; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0__in_t error_internal_intr_r; + axi_dma_reg__intr_block_t__notif_intr_t_notif_fifo_empty_sts_d87d1786_notif_fifo_full_sts_64c66862_notif_fifo_not_empty_sts_1a0e2460_notif_fifo_not_full_sts_0266fe07_notif_txn_done_sts_0ee2f120__in_t notif_internal_intr_r; } axi_dma_reg__intr_block_t__in_t; typedef struct packed{ logic cptra_rst_b; logic cptra_pwrgood; logic soc_req; + logic dma_swwel; axi_dma_reg__ctrl__in_t ctrl; axi_dma_reg__status0__in_t status0; axi_dma_reg__status1__in_t status1; @@ -180,7 +171,7 @@ package axi_dma_reg_pkg; } axi_dma_reg__ctrl__out_t; typedef struct packed{ - logic [2:0] value; + logic [1:0] value; } axi_dma_reg__status0__axi_dma_fsm_ps__out_t; typedef struct packed{ @@ -261,17 +252,17 @@ package axi_dma_reg_pkg; typedef struct packed{ logic intr; - } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__out_t; + } axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0__out_t; typedef struct packed{ logic intr; - } axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10__out_t; + } axi_dma_reg__intr_block_t__notif_intr_t_notif_fifo_empty_sts_d87d1786_notif_fifo_full_sts_64c66862_notif_fifo_not_empty_sts_1a0e2460_notif_fifo_not_full_sts_0266fe07_notif_txn_done_sts_0ee2f120__out_t; typedef struct packed{ axi_dma_reg__intr_block_t__global_intr_t_agg_sts_dd3dcf0a__out_t error_global_intr_r; axi_dma_reg__intr_block_t__global_intr_t_agg_sts_e6399b4a__out_t notif_global_intr_r; - axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3__out_t error_internal_intr_r; - axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10__out_t notif_internal_intr_r; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0__out_t error_internal_intr_r; + axi_dma_reg__intr_block_t__notif_intr_t_notif_fifo_empty_sts_d87d1786_notif_fifo_full_sts_64c66862_notif_fifo_not_empty_sts_1a0e2460_notif_fifo_not_full_sts_0266fe07_notif_txn_done_sts_0ee2f120__out_t notif_internal_intr_r; } axi_dma_reg__intr_block_t__out_t; typedef struct packed{ @@ -303,7 +294,10 @@ package axi_dma_reg_pkg; } axi_dma_reg__ctrl__wr_route__wr_route_e_e; typedef enum logic [31:0] { - axi_dma_reg__status0__axi_dma_fsm_ps__axi_dma_fsm_e__DMA_IDLE = 'h0 + axi_dma_reg__status0__axi_dma_fsm_ps__axi_dma_fsm_e__DMA_IDLE = 'h0, + axi_dma_reg__status0__axi_dma_fsm_ps__axi_dma_fsm_e__DMA_WAIT_DATA = 'h1, + axi_dma_reg__status0__axi_dma_fsm_ps__axi_dma_fsm_e__DMA_DONE = 'h2, + axi_dma_reg__status0__axi_dma_fsm_ps__axi_dma_fsm_e__DMA_ERROR = 'h3 } axi_dma_reg__status0__axi_dma_fsm_ps__axi_dma_fsm_e_e; localparam AXI_DMA_REG_ADDR_WIDTH = 32'd12; diff --git a/src/axi/rtl/axi_dma_reg_uvm.sv b/src/axi/rtl/axi_dma_reg_uvm.sv index 5b86d5f34..ef35779e4 100644 --- a/src/axi/rtl/axi_dma_reg_uvm.sv +++ b/src/axi/rtl/axi_dma_reg_uvm.sv @@ -153,8 +153,8 @@ package axi_dma_reg_uvm; axi_dma_reg__status0_bit_cg busy_bit_cg[1]; axi_dma_reg__status0_bit_cg error_bit_cg[1]; axi_dma_reg__status0_bit_cg rsvd0_bit_cg[14]; - axi_dma_reg__status0_bit_cg axi_dma_fsm_ps_bit_cg[3]; - axi_dma_reg__status0_bit_cg rsvd1_bit_cg[13]; + axi_dma_reg__status0_bit_cg axi_dma_fsm_ps_bit_cg[2]; + axi_dma_reg__status0_bit_cg rsvd1_bit_cg[14]; axi_dma_reg__status0_fld_cg fld_cg; rand uvm_reg_field busy; rand uvm_reg_field error; @@ -179,9 +179,9 @@ package axi_dma_reg_uvm; this.rsvd0 = new("rsvd0"); this.rsvd0.configure(this, 14, 2, "RO", 0, 'h0, 1, 1, 0); this.axi_dma_fsm_ps = new("axi_dma_fsm_ps"); - this.axi_dma_fsm_ps.configure(this, 3, 16, "RO", 1, 'h0, 1, 1, 0); + this.axi_dma_fsm_ps.configure(this, 2, 16, "RO", 1, 'h0, 1, 1, 0); this.rsvd1 = new("rsvd1"); - this.rsvd1.configure(this, 13, 19, "RO", 0, 'h0, 1, 1, 0); + this.rsvd1.configure(this, 14, 18, "RO", 0, 'h0, 1, 1, 0); if (has_coverage(UVM_CVR_REG_BITS)) begin foreach(busy_bit_cg[bt]) busy_bit_cg[bt] = new(); foreach(error_bit_cg[bt]) error_bit_cg[bt] = new(); @@ -515,20 +515,16 @@ package axi_dma_reg_uvm; axi_dma_reg__intr_block_t__error_intr_en_t_bit_cg error_axi_wr_en_bit_cg[1]; axi_dma_reg__intr_block_t__error_intr_en_t_bit_cg error_mbox_lock_en_bit_cg[1]; axi_dma_reg__intr_block_t__error_intr_en_t_bit_cg error_sha_lock_en_bit_cg[1]; - axi_dma_reg__intr_block_t__error_intr_en_t_bit_cg error_rd_fifo_oflow_en_bit_cg[1]; - axi_dma_reg__intr_block_t__error_intr_en_t_bit_cg error_rd_fifo_uflow_en_bit_cg[1]; - axi_dma_reg__intr_block_t__error_intr_en_t_bit_cg error_wr_fifo_oflow_en_bit_cg[1]; - axi_dma_reg__intr_block_t__error_intr_en_t_bit_cg error_wr_fifo_uflow_en_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_en_t_bit_cg error_fifo_oflow_en_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_en_t_bit_cg error_fifo_uflow_en_bit_cg[1]; axi_dma_reg__intr_block_t__error_intr_en_t_fld_cg fld_cg; rand uvm_reg_field error_cmd_dec_en; rand uvm_reg_field error_axi_rd_en; rand uvm_reg_field error_axi_wr_en; rand uvm_reg_field error_mbox_lock_en; rand uvm_reg_field error_sha_lock_en; - rand uvm_reg_field error_rd_fifo_oflow_en; - rand uvm_reg_field error_rd_fifo_uflow_en; - rand uvm_reg_field error_wr_fifo_oflow_en; - rand uvm_reg_field error_wr_fifo_uflow_en; + rand uvm_reg_field error_fifo_oflow_en; + rand uvm_reg_field error_fifo_uflow_en; function new(string name = "axi_dma_reg__intr_block_t__error_intr_en_t"); super.new(name, 32, build_coverage(UVM_CVR_ALL)); @@ -550,24 +546,18 @@ package axi_dma_reg_uvm; this.error_mbox_lock_en.configure(this, 1, 3, "RW", 0, 'h0, 1, 1, 0); this.error_sha_lock_en = new("error_sha_lock_en"); this.error_sha_lock_en.configure(this, 1, 4, "RW", 0, 'h0, 1, 1, 0); - this.error_rd_fifo_oflow_en = new("error_rd_fifo_oflow_en"); - this.error_rd_fifo_oflow_en.configure(this, 1, 5, "RW", 0, 'h0, 1, 1, 0); - this.error_rd_fifo_uflow_en = new("error_rd_fifo_uflow_en"); - this.error_rd_fifo_uflow_en.configure(this, 1, 6, "RW", 0, 'h0, 1, 1, 0); - this.error_wr_fifo_oflow_en = new("error_wr_fifo_oflow_en"); - this.error_wr_fifo_oflow_en.configure(this, 1, 7, "RW", 0, 'h0, 1, 1, 0); - this.error_wr_fifo_uflow_en = new("error_wr_fifo_uflow_en"); - this.error_wr_fifo_uflow_en.configure(this, 1, 8, "RW", 0, 'h0, 1, 1, 0); + this.error_fifo_oflow_en = new("error_fifo_oflow_en"); + this.error_fifo_oflow_en.configure(this, 1, 5, "RW", 0, 'h0, 1, 1, 0); + this.error_fifo_uflow_en = new("error_fifo_uflow_en"); + this.error_fifo_uflow_en.configure(this, 1, 6, "RW", 0, 'h0, 1, 1, 0); if (has_coverage(UVM_CVR_REG_BITS)) begin foreach(error_cmd_dec_en_bit_cg[bt]) error_cmd_dec_en_bit_cg[bt] = new(); foreach(error_axi_rd_en_bit_cg[bt]) error_axi_rd_en_bit_cg[bt] = new(); foreach(error_axi_wr_en_bit_cg[bt]) error_axi_wr_en_bit_cg[bt] = new(); foreach(error_mbox_lock_en_bit_cg[bt]) error_mbox_lock_en_bit_cg[bt] = new(); foreach(error_sha_lock_en_bit_cg[bt]) error_sha_lock_en_bit_cg[bt] = new(); - foreach(error_rd_fifo_oflow_en_bit_cg[bt]) error_rd_fifo_oflow_en_bit_cg[bt] = new(); - foreach(error_rd_fifo_uflow_en_bit_cg[bt]) error_rd_fifo_uflow_en_bit_cg[bt] = new(); - foreach(error_wr_fifo_oflow_en_bit_cg[bt]) error_wr_fifo_oflow_en_bit_cg[bt] = new(); - foreach(error_wr_fifo_uflow_en_bit_cg[bt]) error_wr_fifo_uflow_en_bit_cg[bt] = new(); + foreach(error_fifo_oflow_en_bit_cg[bt]) error_fifo_oflow_en_bit_cg[bt] = new(); + foreach(error_fifo_uflow_en_bit_cg[bt]) error_fifo_uflow_en_bit_cg[bt] = new(); end if (has_coverage(UVM_CVR_FIELD_VALS)) fld_cg = new(); @@ -581,16 +571,16 @@ package axi_dma_reg_uvm; protected bit m_is_read; axi_dma_reg__intr_block_t__notif_intr_en_t_bit_cg notif_txn_done_en_bit_cg[1]; - axi_dma_reg__intr_block_t__notif_intr_en_t_bit_cg notif_rd_fifo_not_empty_en_bit_cg[1]; - axi_dma_reg__intr_block_t__notif_intr_en_t_bit_cg notif_rd_fifo_full_en_bit_cg[1]; - axi_dma_reg__intr_block_t__notif_intr_en_t_bit_cg notif_wr_fifo_not_full_en_bit_cg[1]; - axi_dma_reg__intr_block_t__notif_intr_en_t_bit_cg notif_wr_fifo_empty_en_bit_cg[1]; + axi_dma_reg__intr_block_t__notif_intr_en_t_bit_cg notif_fifo_empty_en_bit_cg[1]; + axi_dma_reg__intr_block_t__notif_intr_en_t_bit_cg notif_fifo_not_empty_en_bit_cg[1]; + axi_dma_reg__intr_block_t__notif_intr_en_t_bit_cg notif_fifo_full_en_bit_cg[1]; + axi_dma_reg__intr_block_t__notif_intr_en_t_bit_cg notif_fifo_not_full_en_bit_cg[1]; axi_dma_reg__intr_block_t__notif_intr_en_t_fld_cg fld_cg; rand uvm_reg_field notif_txn_done_en; - rand uvm_reg_field notif_rd_fifo_not_empty_en; - rand uvm_reg_field notif_rd_fifo_full_en; - rand uvm_reg_field notif_wr_fifo_not_full_en; - rand uvm_reg_field notif_wr_fifo_empty_en; + rand uvm_reg_field notif_fifo_empty_en; + rand uvm_reg_field notif_fifo_not_empty_en; + rand uvm_reg_field notif_fifo_full_en; + rand uvm_reg_field notif_fifo_not_full_en; function new(string name = "axi_dma_reg__intr_block_t__notif_intr_en_t"); super.new(name, 32, build_coverage(UVM_CVR_ALL)); @@ -604,20 +594,20 @@ package axi_dma_reg_uvm; virtual function void build(); this.notif_txn_done_en = new("notif_txn_done_en"); this.notif_txn_done_en.configure(this, 1, 0, "RW", 0, 'h0, 1, 1, 0); - this.notif_rd_fifo_not_empty_en = new("notif_rd_fifo_not_empty_en"); - this.notif_rd_fifo_not_empty_en.configure(this, 1, 1, "RW", 0, 'h0, 1, 1, 0); - this.notif_rd_fifo_full_en = new("notif_rd_fifo_full_en"); - this.notif_rd_fifo_full_en.configure(this, 1, 2, "RW", 0, 'h0, 1, 1, 0); - this.notif_wr_fifo_not_full_en = new("notif_wr_fifo_not_full_en"); - this.notif_wr_fifo_not_full_en.configure(this, 1, 3, "RW", 0, 'h0, 1, 1, 0); - this.notif_wr_fifo_empty_en = new("notif_wr_fifo_empty_en"); - this.notif_wr_fifo_empty_en.configure(this, 1, 4, "RW", 0, 'h0, 1, 1, 0); + this.notif_fifo_empty_en = new("notif_fifo_empty_en"); + this.notif_fifo_empty_en.configure(this, 1, 1, "RW", 0, 'h0, 1, 1, 0); + this.notif_fifo_not_empty_en = new("notif_fifo_not_empty_en"); + this.notif_fifo_not_empty_en.configure(this, 1, 2, "RW", 0, 'h0, 1, 1, 0); + this.notif_fifo_full_en = new("notif_fifo_full_en"); + this.notif_fifo_full_en.configure(this, 1, 3, "RW", 0, 'h0, 1, 1, 0); + this.notif_fifo_not_full_en = new("notif_fifo_not_full_en"); + this.notif_fifo_not_full_en.configure(this, 1, 4, "RW", 0, 'h0, 1, 1, 0); if (has_coverage(UVM_CVR_REG_BITS)) begin foreach(notif_txn_done_en_bit_cg[bt]) notif_txn_done_en_bit_cg[bt] = new(); - foreach(notif_rd_fifo_not_empty_en_bit_cg[bt]) notif_rd_fifo_not_empty_en_bit_cg[bt] = new(); - foreach(notif_rd_fifo_full_en_bit_cg[bt]) notif_rd_fifo_full_en_bit_cg[bt] = new(); - foreach(notif_wr_fifo_not_full_en_bit_cg[bt]) notif_wr_fifo_not_full_en_bit_cg[bt] = new(); - foreach(notif_wr_fifo_empty_en_bit_cg[bt]) notif_wr_fifo_empty_en_bit_cg[bt] = new(); + foreach(notif_fifo_empty_en_bit_cg[bt]) notif_fifo_empty_en_bit_cg[bt] = new(); + foreach(notif_fifo_not_empty_en_bit_cg[bt]) notif_fifo_not_empty_en_bit_cg[bt] = new(); + foreach(notif_fifo_full_en_bit_cg[bt]) notif_fifo_full_en_bit_cg[bt] = new(); + foreach(notif_fifo_not_full_en_bit_cg[bt]) notif_fifo_not_full_en_bit_cg[bt] = new(); end if (has_coverage(UVM_CVR_FIELD_VALS)) fld_cg = new(); @@ -684,33 +674,29 @@ package axi_dma_reg_uvm; endfunction : build endclass : axi_dma_reg__intr_block_t__global_intr_t_agg_sts_e6399b4a - // Reg - axi_dma_reg::intr_block_t::error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3 - class axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3 extends uvm_reg; + // Reg - axi_dma_reg::intr_block_t::error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0 + class axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0 extends uvm_reg; protected uvm_reg_data_t m_current; protected uvm_reg_data_t m_data; protected bit m_is_read; - axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3_bit_cg error_cmd_dec_sts_bit_cg[1]; - axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3_bit_cg error_axi_rd_sts_bit_cg[1]; - axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3_bit_cg error_axi_wr_sts_bit_cg[1]; - axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3_bit_cg error_mbox_lock_sts_bit_cg[1]; - axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3_bit_cg error_sha_lock_sts_bit_cg[1]; - axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3_bit_cg error_rd_fifo_oflow_sts_bit_cg[1]; - axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3_bit_cg error_rd_fifo_uflow_sts_bit_cg[1]; - axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3_bit_cg error_wr_fifo_oflow_sts_bit_cg[1]; - axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3_bit_cg error_wr_fifo_uflow_sts_bit_cg[1]; - axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3_fld_cg fld_cg; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0_bit_cg error_cmd_dec_sts_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0_bit_cg error_axi_rd_sts_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0_bit_cg error_axi_wr_sts_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0_bit_cg error_mbox_lock_sts_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0_bit_cg error_sha_lock_sts_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0_bit_cg error_fifo_oflow_sts_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0_bit_cg error_fifo_uflow_sts_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0_fld_cg fld_cg; rand uvm_reg_field error_cmd_dec_sts; rand uvm_reg_field error_axi_rd_sts; rand uvm_reg_field error_axi_wr_sts; rand uvm_reg_field error_mbox_lock_sts; rand uvm_reg_field error_sha_lock_sts; - rand uvm_reg_field error_rd_fifo_oflow_sts; - rand uvm_reg_field error_rd_fifo_uflow_sts; - rand uvm_reg_field error_wr_fifo_oflow_sts; - rand uvm_reg_field error_wr_fifo_uflow_sts; + rand uvm_reg_field error_fifo_oflow_sts; + rand uvm_reg_field error_fifo_uflow_sts; - function new(string name = "axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3"); + function new(string name = "axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0"); super.new(name, 32, build_coverage(UVM_CVR_ALL)); endfunction : new extern virtual function void sample_values(); @@ -730,49 +716,43 @@ package axi_dma_reg_uvm; this.error_mbox_lock_sts.configure(this, 1, 3, "W1C", 1, 'h0, 1, 1, 0); this.error_sha_lock_sts = new("error_sha_lock_sts"); this.error_sha_lock_sts.configure(this, 1, 4, "W1C", 1, 'h0, 1, 1, 0); - this.error_rd_fifo_oflow_sts = new("error_rd_fifo_oflow_sts"); - this.error_rd_fifo_oflow_sts.configure(this, 1, 5, "W1C", 1, 'h0, 1, 1, 0); - this.error_rd_fifo_uflow_sts = new("error_rd_fifo_uflow_sts"); - this.error_rd_fifo_uflow_sts.configure(this, 1, 6, "W1C", 1, 'h0, 1, 1, 0); - this.error_wr_fifo_oflow_sts = new("error_wr_fifo_oflow_sts"); - this.error_wr_fifo_oflow_sts.configure(this, 1, 7, "W1C", 1, 'h0, 1, 1, 0); - this.error_wr_fifo_uflow_sts = new("error_wr_fifo_uflow_sts"); - this.error_wr_fifo_uflow_sts.configure(this, 1, 8, "W1C", 1, 'h0, 1, 1, 0); + this.error_fifo_oflow_sts = new("error_fifo_oflow_sts"); + this.error_fifo_oflow_sts.configure(this, 1, 5, "W1C", 1, 'h0, 1, 1, 0); + this.error_fifo_uflow_sts = new("error_fifo_uflow_sts"); + this.error_fifo_uflow_sts.configure(this, 1, 6, "W1C", 1, 'h0, 1, 1, 0); if (has_coverage(UVM_CVR_REG_BITS)) begin foreach(error_cmd_dec_sts_bit_cg[bt]) error_cmd_dec_sts_bit_cg[bt] = new(); foreach(error_axi_rd_sts_bit_cg[bt]) error_axi_rd_sts_bit_cg[bt] = new(); foreach(error_axi_wr_sts_bit_cg[bt]) error_axi_wr_sts_bit_cg[bt] = new(); foreach(error_mbox_lock_sts_bit_cg[bt]) error_mbox_lock_sts_bit_cg[bt] = new(); foreach(error_sha_lock_sts_bit_cg[bt]) error_sha_lock_sts_bit_cg[bt] = new(); - foreach(error_rd_fifo_oflow_sts_bit_cg[bt]) error_rd_fifo_oflow_sts_bit_cg[bt] = new(); - foreach(error_rd_fifo_uflow_sts_bit_cg[bt]) error_rd_fifo_uflow_sts_bit_cg[bt] = new(); - foreach(error_wr_fifo_oflow_sts_bit_cg[bt]) error_wr_fifo_oflow_sts_bit_cg[bt] = new(); - foreach(error_wr_fifo_uflow_sts_bit_cg[bt]) error_wr_fifo_uflow_sts_bit_cg[bt] = new(); + foreach(error_fifo_oflow_sts_bit_cg[bt]) error_fifo_oflow_sts_bit_cg[bt] = new(); + foreach(error_fifo_uflow_sts_bit_cg[bt]) error_fifo_uflow_sts_bit_cg[bt] = new(); end if (has_coverage(UVM_CVR_FIELD_VALS)) fld_cg = new(); endfunction : build - endclass : axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3 + endclass : axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0 - // Reg - axi_dma_reg::intr_block_t::notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10 - class axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10 extends uvm_reg; + // Reg - axi_dma_reg::intr_block_t::notif_intr_t_notif_fifo_empty_sts_d87d1786_notif_fifo_full_sts_64c66862_notif_fifo_not_empty_sts_1a0e2460_notif_fifo_not_full_sts_0266fe07_notif_txn_done_sts_0ee2f120 + class axi_dma_reg__intr_block_t__notif_intr_t_notif_fifo_empty_sts_d87d1786_notif_fifo_full_sts_64c66862_notif_fifo_not_empty_sts_1a0e2460_notif_fifo_not_full_sts_0266fe07_notif_txn_done_sts_0ee2f120 extends uvm_reg; protected uvm_reg_data_t m_current; protected uvm_reg_data_t m_data; protected bit m_is_read; - axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10_bit_cg notif_txn_done_sts_bit_cg[1]; - axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10_bit_cg notif_rd_fifo_not_empty_sts_bit_cg[1]; - axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10_bit_cg notif_rd_fifo_full_sts_bit_cg[1]; - axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10_bit_cg notif_wr_fifo_not_full_sts_bit_cg[1]; - axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10_bit_cg notif_wr_fifo_empty_sts_bit_cg[1]; - axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10_fld_cg fld_cg; + axi_dma_reg__intr_block_t__notif_intr_t_notif_fifo_empty_sts_d87d1786_notif_fifo_full_sts_64c66862_notif_fifo_not_empty_sts_1a0e2460_notif_fifo_not_full_sts_0266fe07_notif_txn_done_sts_0ee2f120_bit_cg notif_txn_done_sts_bit_cg[1]; + axi_dma_reg__intr_block_t__notif_intr_t_notif_fifo_empty_sts_d87d1786_notif_fifo_full_sts_64c66862_notif_fifo_not_empty_sts_1a0e2460_notif_fifo_not_full_sts_0266fe07_notif_txn_done_sts_0ee2f120_bit_cg notif_fifo_empty_sts_bit_cg[1]; + axi_dma_reg__intr_block_t__notif_intr_t_notif_fifo_empty_sts_d87d1786_notif_fifo_full_sts_64c66862_notif_fifo_not_empty_sts_1a0e2460_notif_fifo_not_full_sts_0266fe07_notif_txn_done_sts_0ee2f120_bit_cg notif_fifo_not_empty_sts_bit_cg[1]; + axi_dma_reg__intr_block_t__notif_intr_t_notif_fifo_empty_sts_d87d1786_notif_fifo_full_sts_64c66862_notif_fifo_not_empty_sts_1a0e2460_notif_fifo_not_full_sts_0266fe07_notif_txn_done_sts_0ee2f120_bit_cg notif_fifo_full_sts_bit_cg[1]; + axi_dma_reg__intr_block_t__notif_intr_t_notif_fifo_empty_sts_d87d1786_notif_fifo_full_sts_64c66862_notif_fifo_not_empty_sts_1a0e2460_notif_fifo_not_full_sts_0266fe07_notif_txn_done_sts_0ee2f120_bit_cg notif_fifo_not_full_sts_bit_cg[1]; + axi_dma_reg__intr_block_t__notif_intr_t_notif_fifo_empty_sts_d87d1786_notif_fifo_full_sts_64c66862_notif_fifo_not_empty_sts_1a0e2460_notif_fifo_not_full_sts_0266fe07_notif_txn_done_sts_0ee2f120_fld_cg fld_cg; rand uvm_reg_field notif_txn_done_sts; - rand uvm_reg_field notif_rd_fifo_not_empty_sts; - rand uvm_reg_field notif_rd_fifo_full_sts; - rand uvm_reg_field notif_wr_fifo_not_full_sts; - rand uvm_reg_field notif_wr_fifo_empty_sts; + rand uvm_reg_field notif_fifo_empty_sts; + rand uvm_reg_field notif_fifo_not_empty_sts; + rand uvm_reg_field notif_fifo_full_sts; + rand uvm_reg_field notif_fifo_not_full_sts; - function new(string name = "axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10"); + function new(string name = "axi_dma_reg__intr_block_t__notif_intr_t_notif_fifo_empty_sts_d87d1786_notif_fifo_full_sts_64c66862_notif_fifo_not_empty_sts_1a0e2460_notif_fifo_not_full_sts_0266fe07_notif_txn_done_sts_0ee2f120"); super.new(name, 32, build_coverage(UVM_CVR_ALL)); endfunction : new extern virtual function void sample_values(); @@ -784,25 +764,25 @@ package axi_dma_reg_uvm; virtual function void build(); this.notif_txn_done_sts = new("notif_txn_done_sts"); this.notif_txn_done_sts.configure(this, 1, 0, "W1C", 1, 'h0, 1, 1, 0); - this.notif_rd_fifo_not_empty_sts = new("notif_rd_fifo_not_empty_sts"); - this.notif_rd_fifo_not_empty_sts.configure(this, 1, 1, "W1C", 1, 'h0, 1, 1, 0); - this.notif_rd_fifo_full_sts = new("notif_rd_fifo_full_sts"); - this.notif_rd_fifo_full_sts.configure(this, 1, 2, "W1C", 1, 'h0, 1, 1, 0); - this.notif_wr_fifo_not_full_sts = new("notif_wr_fifo_not_full_sts"); - this.notif_wr_fifo_not_full_sts.configure(this, 1, 3, "W1C", 1, 'h0, 1, 1, 0); - this.notif_wr_fifo_empty_sts = new("notif_wr_fifo_empty_sts"); - this.notif_wr_fifo_empty_sts.configure(this, 1, 4, "W1C", 1, 'h0, 1, 1, 0); + this.notif_fifo_empty_sts = new("notif_fifo_empty_sts"); + this.notif_fifo_empty_sts.configure(this, 1, 1, "W1C", 1, 'h0, 1, 1, 0); + this.notif_fifo_not_empty_sts = new("notif_fifo_not_empty_sts"); + this.notif_fifo_not_empty_sts.configure(this, 1, 2, "W1C", 1, 'h0, 1, 1, 0); + this.notif_fifo_full_sts = new("notif_fifo_full_sts"); + this.notif_fifo_full_sts.configure(this, 1, 3, "W1C", 1, 'h0, 1, 1, 0); + this.notif_fifo_not_full_sts = new("notif_fifo_not_full_sts"); + this.notif_fifo_not_full_sts.configure(this, 1, 4, "W1C", 1, 'h0, 1, 1, 0); if (has_coverage(UVM_CVR_REG_BITS)) begin foreach(notif_txn_done_sts_bit_cg[bt]) notif_txn_done_sts_bit_cg[bt] = new(); - foreach(notif_rd_fifo_not_empty_sts_bit_cg[bt]) notif_rd_fifo_not_empty_sts_bit_cg[bt] = new(); - foreach(notif_rd_fifo_full_sts_bit_cg[bt]) notif_rd_fifo_full_sts_bit_cg[bt] = new(); - foreach(notif_wr_fifo_not_full_sts_bit_cg[bt]) notif_wr_fifo_not_full_sts_bit_cg[bt] = new(); - foreach(notif_wr_fifo_empty_sts_bit_cg[bt]) notif_wr_fifo_empty_sts_bit_cg[bt] = new(); + foreach(notif_fifo_empty_sts_bit_cg[bt]) notif_fifo_empty_sts_bit_cg[bt] = new(); + foreach(notif_fifo_not_empty_sts_bit_cg[bt]) notif_fifo_not_empty_sts_bit_cg[bt] = new(); + foreach(notif_fifo_full_sts_bit_cg[bt]) notif_fifo_full_sts_bit_cg[bt] = new(); + foreach(notif_fifo_not_full_sts_bit_cg[bt]) notif_fifo_not_full_sts_bit_cg[bt] = new(); end if (has_coverage(UVM_CVR_FIELD_VALS)) fld_cg = new(); endfunction : build - endclass : axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10 + endclass : axi_dma_reg__intr_block_t__notif_intr_t_notif_fifo_empty_sts_d87d1786_notif_fifo_full_sts_64c66862_notif_fifo_not_empty_sts_1a0e2460_notif_fifo_not_full_sts_0266fe07_notif_txn_done_sts_0ee2f120 // Reg - axi_dma_reg::intr_block_t::error_intr_trig_t class axi_dma_reg__intr_block_t__error_intr_trig_t extends uvm_reg; @@ -815,20 +795,16 @@ package axi_dma_reg_uvm; axi_dma_reg__intr_block_t__error_intr_trig_t_bit_cg error_axi_wr_trig_bit_cg[1]; axi_dma_reg__intr_block_t__error_intr_trig_t_bit_cg error_mbox_lock_trig_bit_cg[1]; axi_dma_reg__intr_block_t__error_intr_trig_t_bit_cg error_sha_lock_trig_bit_cg[1]; - axi_dma_reg__intr_block_t__error_intr_trig_t_bit_cg error_rd_fifo_oflow_trig_bit_cg[1]; - axi_dma_reg__intr_block_t__error_intr_trig_t_bit_cg error_rd_fifo_uflow_trig_bit_cg[1]; - axi_dma_reg__intr_block_t__error_intr_trig_t_bit_cg error_wr_fifo_oflow_trig_bit_cg[1]; - axi_dma_reg__intr_block_t__error_intr_trig_t_bit_cg error_wr_fifo_uflow_trig_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_trig_t_bit_cg error_fifo_oflow_trig_bit_cg[1]; + axi_dma_reg__intr_block_t__error_intr_trig_t_bit_cg error_fifo_uflow_trig_bit_cg[1]; axi_dma_reg__intr_block_t__error_intr_trig_t_fld_cg fld_cg; rand uvm_reg_field error_cmd_dec_trig; rand uvm_reg_field error_axi_rd_trig; rand uvm_reg_field error_axi_wr_trig; rand uvm_reg_field error_mbox_lock_trig; rand uvm_reg_field error_sha_lock_trig; - rand uvm_reg_field error_rd_fifo_oflow_trig; - rand uvm_reg_field error_rd_fifo_uflow_trig; - rand uvm_reg_field error_wr_fifo_oflow_trig; - rand uvm_reg_field error_wr_fifo_uflow_trig; + rand uvm_reg_field error_fifo_oflow_trig; + rand uvm_reg_field error_fifo_uflow_trig; function new(string name = "axi_dma_reg__intr_block_t__error_intr_trig_t"); super.new(name, 32, build_coverage(UVM_CVR_ALL)); @@ -850,24 +826,18 @@ package axi_dma_reg_uvm; this.error_mbox_lock_trig.configure(this, 1, 3, "W1S", 0, 'h0, 1, 1, 0); this.error_sha_lock_trig = new("error_sha_lock_trig"); this.error_sha_lock_trig.configure(this, 1, 4, "W1S", 0, 'h0, 1, 1, 0); - this.error_rd_fifo_oflow_trig = new("error_rd_fifo_oflow_trig"); - this.error_rd_fifo_oflow_trig.configure(this, 1, 5, "W1S", 0, 'h0, 1, 1, 0); - this.error_rd_fifo_uflow_trig = new("error_rd_fifo_uflow_trig"); - this.error_rd_fifo_uflow_trig.configure(this, 1, 6, "W1S", 0, 'h0, 1, 1, 0); - this.error_wr_fifo_oflow_trig = new("error_wr_fifo_oflow_trig"); - this.error_wr_fifo_oflow_trig.configure(this, 1, 7, "W1S", 0, 'h0, 1, 1, 0); - this.error_wr_fifo_uflow_trig = new("error_wr_fifo_uflow_trig"); - this.error_wr_fifo_uflow_trig.configure(this, 1, 8, "W1S", 0, 'h0, 1, 1, 0); + this.error_fifo_oflow_trig = new("error_fifo_oflow_trig"); + this.error_fifo_oflow_trig.configure(this, 1, 5, "W1S", 0, 'h0, 1, 1, 0); + this.error_fifo_uflow_trig = new("error_fifo_uflow_trig"); + this.error_fifo_uflow_trig.configure(this, 1, 6, "W1S", 0, 'h0, 1, 1, 0); if (has_coverage(UVM_CVR_REG_BITS)) begin foreach(error_cmd_dec_trig_bit_cg[bt]) error_cmd_dec_trig_bit_cg[bt] = new(); foreach(error_axi_rd_trig_bit_cg[bt]) error_axi_rd_trig_bit_cg[bt] = new(); foreach(error_axi_wr_trig_bit_cg[bt]) error_axi_wr_trig_bit_cg[bt] = new(); foreach(error_mbox_lock_trig_bit_cg[bt]) error_mbox_lock_trig_bit_cg[bt] = new(); foreach(error_sha_lock_trig_bit_cg[bt]) error_sha_lock_trig_bit_cg[bt] = new(); - foreach(error_rd_fifo_oflow_trig_bit_cg[bt]) error_rd_fifo_oflow_trig_bit_cg[bt] = new(); - foreach(error_rd_fifo_uflow_trig_bit_cg[bt]) error_rd_fifo_uflow_trig_bit_cg[bt] = new(); - foreach(error_wr_fifo_oflow_trig_bit_cg[bt]) error_wr_fifo_oflow_trig_bit_cg[bt] = new(); - foreach(error_wr_fifo_uflow_trig_bit_cg[bt]) error_wr_fifo_uflow_trig_bit_cg[bt] = new(); + foreach(error_fifo_oflow_trig_bit_cg[bt]) error_fifo_oflow_trig_bit_cg[bt] = new(); + foreach(error_fifo_uflow_trig_bit_cg[bt]) error_fifo_uflow_trig_bit_cg[bt] = new(); end if (has_coverage(UVM_CVR_FIELD_VALS)) fld_cg = new(); @@ -881,16 +851,16 @@ package axi_dma_reg_uvm; protected bit m_is_read; axi_dma_reg__intr_block_t__notif_intr_trig_t_bit_cg notif_txn_done_trig_bit_cg[1]; - axi_dma_reg__intr_block_t__notif_intr_trig_t_bit_cg notif_rd_fifo_not_empty_trig_bit_cg[1]; - axi_dma_reg__intr_block_t__notif_intr_trig_t_bit_cg notif_rd_fifo_full_trig_bit_cg[1]; - axi_dma_reg__intr_block_t__notif_intr_trig_t_bit_cg notif_wr_fifo_not_full_trig_bit_cg[1]; - axi_dma_reg__intr_block_t__notif_intr_trig_t_bit_cg notif_wr_fifo_empty_trig_bit_cg[1]; + axi_dma_reg__intr_block_t__notif_intr_trig_t_bit_cg notif_fifo_empty_trig_bit_cg[1]; + axi_dma_reg__intr_block_t__notif_intr_trig_t_bit_cg notif_fifo_not_empty_trig_bit_cg[1]; + axi_dma_reg__intr_block_t__notif_intr_trig_t_bit_cg notif_fifo_full_trig_bit_cg[1]; + axi_dma_reg__intr_block_t__notif_intr_trig_t_bit_cg notif_fifo_not_full_trig_bit_cg[1]; axi_dma_reg__intr_block_t__notif_intr_trig_t_fld_cg fld_cg; rand uvm_reg_field notif_txn_done_trig; - rand uvm_reg_field notif_rd_fifo_not_empty_trig; - rand uvm_reg_field notif_rd_fifo_full_trig; - rand uvm_reg_field notif_wr_fifo_not_full_trig; - rand uvm_reg_field notif_wr_fifo_empty_trig; + rand uvm_reg_field notif_fifo_empty_trig; + rand uvm_reg_field notif_fifo_not_empty_trig; + rand uvm_reg_field notif_fifo_full_trig; + rand uvm_reg_field notif_fifo_not_full_trig; function new(string name = "axi_dma_reg__intr_block_t__notif_intr_trig_t"); super.new(name, 32, build_coverage(UVM_CVR_ALL)); @@ -904,20 +874,20 @@ package axi_dma_reg_uvm; virtual function void build(); this.notif_txn_done_trig = new("notif_txn_done_trig"); this.notif_txn_done_trig.configure(this, 1, 0, "W1S", 0, 'h0, 1, 1, 0); - this.notif_rd_fifo_not_empty_trig = new("notif_rd_fifo_not_empty_trig"); - this.notif_rd_fifo_not_empty_trig.configure(this, 1, 1, "W1S", 0, 'h0, 1, 1, 0); - this.notif_rd_fifo_full_trig = new("notif_rd_fifo_full_trig"); - this.notif_rd_fifo_full_trig.configure(this, 1, 2, "W1S", 0, 'h0, 1, 1, 0); - this.notif_wr_fifo_not_full_trig = new("notif_wr_fifo_not_full_trig"); - this.notif_wr_fifo_not_full_trig.configure(this, 1, 3, "W1S", 0, 'h0, 1, 1, 0); - this.notif_wr_fifo_empty_trig = new("notif_wr_fifo_empty_trig"); - this.notif_wr_fifo_empty_trig.configure(this, 1, 4, "W1S", 0, 'h0, 1, 1, 0); + this.notif_fifo_empty_trig = new("notif_fifo_empty_trig"); + this.notif_fifo_empty_trig.configure(this, 1, 1, "W1S", 0, 'h0, 1, 1, 0); + this.notif_fifo_not_empty_trig = new("notif_fifo_not_empty_trig"); + this.notif_fifo_not_empty_trig.configure(this, 1, 2, "W1S", 0, 'h0, 1, 1, 0); + this.notif_fifo_full_trig = new("notif_fifo_full_trig"); + this.notif_fifo_full_trig.configure(this, 1, 3, "W1S", 0, 'h0, 1, 1, 0); + this.notif_fifo_not_full_trig = new("notif_fifo_not_full_trig"); + this.notif_fifo_not_full_trig.configure(this, 1, 4, "W1S", 0, 'h0, 1, 1, 0); if (has_coverage(UVM_CVR_REG_BITS)) begin foreach(notif_txn_done_trig_bit_cg[bt]) notif_txn_done_trig_bit_cg[bt] = new(); - foreach(notif_rd_fifo_not_empty_trig_bit_cg[bt]) notif_rd_fifo_not_empty_trig_bit_cg[bt] = new(); - foreach(notif_rd_fifo_full_trig_bit_cg[bt]) notif_rd_fifo_full_trig_bit_cg[bt] = new(); - foreach(notif_wr_fifo_not_full_trig_bit_cg[bt]) notif_wr_fifo_not_full_trig_bit_cg[bt] = new(); - foreach(notif_wr_fifo_empty_trig_bit_cg[bt]) notif_wr_fifo_empty_trig_bit_cg[bt] = new(); + foreach(notif_fifo_empty_trig_bit_cg[bt]) notif_fifo_empty_trig_bit_cg[bt] = new(); + foreach(notif_fifo_not_empty_trig_bit_cg[bt]) notif_fifo_not_empty_trig_bit_cg[bt] = new(); + foreach(notif_fifo_full_trig_bit_cg[bt]) notif_fifo_full_trig_bit_cg[bt] = new(); + foreach(notif_fifo_not_full_trig_bit_cg[bt]) notif_fifo_not_full_trig_bit_cg[bt] = new(); end if (has_coverage(UVM_CVR_FIELD_VALS)) fld_cg = new(); @@ -1074,17 +1044,17 @@ package axi_dma_reg_uvm; endfunction : build endclass : axi_dma_reg__intr_block_t__intr_count_t_cnt_5381f2ed - // Reg - axi_dma_reg::intr_block_t::intr_count_t_cnt_bf3b372e - class axi_dma_reg__intr_block_t__intr_count_t_cnt_bf3b372e extends uvm_reg; + // Reg - axi_dma_reg::intr_block_t::intr_count_t_cnt_b056182d + class axi_dma_reg__intr_block_t__intr_count_t_cnt_b056182d extends uvm_reg; protected uvm_reg_data_t m_current; protected uvm_reg_data_t m_data; protected bit m_is_read; - axi_dma_reg__intr_block_t__intr_count_t_cnt_bf3b372e_bit_cg cnt_bit_cg[32]; - axi_dma_reg__intr_block_t__intr_count_t_cnt_bf3b372e_fld_cg fld_cg; + axi_dma_reg__intr_block_t__intr_count_t_cnt_b056182d_bit_cg cnt_bit_cg[32]; + axi_dma_reg__intr_block_t__intr_count_t_cnt_b056182d_fld_cg fld_cg; rand uvm_reg_field cnt; - function new(string name = "axi_dma_reg__intr_block_t__intr_count_t_cnt_bf3b372e"); + function new(string name = "axi_dma_reg__intr_block_t__intr_count_t_cnt_b056182d"); super.new(name, 32, build_coverage(UVM_CVR_ALL)); endfunction : new extern virtual function void sample_values(); @@ -1102,19 +1072,19 @@ package axi_dma_reg_uvm; if (has_coverage(UVM_CVR_FIELD_VALS)) fld_cg = new(); endfunction : build - endclass : axi_dma_reg__intr_block_t__intr_count_t_cnt_bf3b372e + endclass : axi_dma_reg__intr_block_t__intr_count_t_cnt_b056182d - // Reg - axi_dma_reg::intr_block_t::intr_count_t_cnt_d56d6bb5 - class axi_dma_reg__intr_block_t__intr_count_t_cnt_d56d6bb5 extends uvm_reg; + // Reg - axi_dma_reg::intr_block_t::intr_count_t_cnt_91ebc86d + class axi_dma_reg__intr_block_t__intr_count_t_cnt_91ebc86d extends uvm_reg; protected uvm_reg_data_t m_current; protected uvm_reg_data_t m_data; protected bit m_is_read; - axi_dma_reg__intr_block_t__intr_count_t_cnt_d56d6bb5_bit_cg cnt_bit_cg[32]; - axi_dma_reg__intr_block_t__intr_count_t_cnt_d56d6bb5_fld_cg fld_cg; + axi_dma_reg__intr_block_t__intr_count_t_cnt_91ebc86d_bit_cg cnt_bit_cg[32]; + axi_dma_reg__intr_block_t__intr_count_t_cnt_91ebc86d_fld_cg fld_cg; rand uvm_reg_field cnt; - function new(string name = "axi_dma_reg__intr_block_t__intr_count_t_cnt_d56d6bb5"); + function new(string name = "axi_dma_reg__intr_block_t__intr_count_t_cnt_91ebc86d"); super.new(name, 32, build_coverage(UVM_CVR_ALL)); endfunction : new extern virtual function void sample_values(); @@ -1132,67 +1102,7 @@ package axi_dma_reg_uvm; if (has_coverage(UVM_CVR_FIELD_VALS)) fld_cg = new(); endfunction : build - endclass : axi_dma_reg__intr_block_t__intr_count_t_cnt_d56d6bb5 - - // Reg - axi_dma_reg::intr_block_t::intr_count_t_cnt_b3a342c6 - class axi_dma_reg__intr_block_t__intr_count_t_cnt_b3a342c6 extends uvm_reg; - protected uvm_reg_data_t m_current; - protected uvm_reg_data_t m_data; - protected bit m_is_read; - - axi_dma_reg__intr_block_t__intr_count_t_cnt_b3a342c6_bit_cg cnt_bit_cg[32]; - axi_dma_reg__intr_block_t__intr_count_t_cnt_b3a342c6_fld_cg fld_cg; - rand uvm_reg_field cnt; - - function new(string name = "axi_dma_reg__intr_block_t__intr_count_t_cnt_b3a342c6"); - super.new(name, 32, build_coverage(UVM_CVR_ALL)); - endfunction : new - extern virtual function void sample_values(); - extern protected virtual function void sample(uvm_reg_data_t data, - uvm_reg_data_t byte_en, - bit is_read, - uvm_reg_map map); - - virtual function void build(); - this.cnt = new("cnt"); - this.cnt.configure(this, 32, 0, "RW", 1, 'h0, 1, 1, 0); - if (has_coverage(UVM_CVR_REG_BITS)) begin - foreach(cnt_bit_cg[bt]) cnt_bit_cg[bt] = new(); - end - if (has_coverage(UVM_CVR_FIELD_VALS)) - fld_cg = new(); - endfunction : build - endclass : axi_dma_reg__intr_block_t__intr_count_t_cnt_b3a342c6 - - // Reg - axi_dma_reg::intr_block_t::intr_count_t_cnt_e089aabc - class axi_dma_reg__intr_block_t__intr_count_t_cnt_e089aabc extends uvm_reg; - protected uvm_reg_data_t m_current; - protected uvm_reg_data_t m_data; - protected bit m_is_read; - - axi_dma_reg__intr_block_t__intr_count_t_cnt_e089aabc_bit_cg cnt_bit_cg[32]; - axi_dma_reg__intr_block_t__intr_count_t_cnt_e089aabc_fld_cg fld_cg; - rand uvm_reg_field cnt; - - function new(string name = "axi_dma_reg__intr_block_t__intr_count_t_cnt_e089aabc"); - super.new(name, 32, build_coverage(UVM_CVR_ALL)); - endfunction : new - extern virtual function void sample_values(); - extern protected virtual function void sample(uvm_reg_data_t data, - uvm_reg_data_t byte_en, - bit is_read, - uvm_reg_map map); - - virtual function void build(); - this.cnt = new("cnt"); - this.cnt.configure(this, 32, 0, "RW", 1, 'h0, 1, 1, 0); - if (has_coverage(UVM_CVR_REG_BITS)) begin - foreach(cnt_bit_cg[bt]) cnt_bit_cg[bt] = new(); - end - if (has_coverage(UVM_CVR_FIELD_VALS)) - fld_cg = new(); - endfunction : build - endclass : axi_dma_reg__intr_block_t__intr_count_t_cnt_e089aabc + endclass : axi_dma_reg__intr_block_t__intr_count_t_cnt_91ebc86d // Reg - axi_dma_reg::intr_block_t::intr_count_t_cnt_61104c6c class axi_dma_reg__intr_block_t__intr_count_t_cnt_61104c6c extends uvm_reg; @@ -1224,17 +1134,17 @@ package axi_dma_reg_uvm; endfunction : build endclass : axi_dma_reg__intr_block_t__intr_count_t_cnt_61104c6c - // Reg - axi_dma_reg::intr_block_t::intr_count_t_cnt_ae7cbc55 - class axi_dma_reg__intr_block_t__intr_count_t_cnt_ae7cbc55 extends uvm_reg; + // Reg - axi_dma_reg::intr_block_t::intr_count_t_cnt_9b030582 + class axi_dma_reg__intr_block_t__intr_count_t_cnt_9b030582 extends uvm_reg; protected uvm_reg_data_t m_current; protected uvm_reg_data_t m_data; protected bit m_is_read; - axi_dma_reg__intr_block_t__intr_count_t_cnt_ae7cbc55_bit_cg cnt_bit_cg[32]; - axi_dma_reg__intr_block_t__intr_count_t_cnt_ae7cbc55_fld_cg fld_cg; + axi_dma_reg__intr_block_t__intr_count_t_cnt_9b030582_bit_cg cnt_bit_cg[32]; + axi_dma_reg__intr_block_t__intr_count_t_cnt_9b030582_fld_cg fld_cg; rand uvm_reg_field cnt; - function new(string name = "axi_dma_reg__intr_block_t__intr_count_t_cnt_ae7cbc55"); + function new(string name = "axi_dma_reg__intr_block_t__intr_count_t_cnt_9b030582"); super.new(name, 32, build_coverage(UVM_CVR_ALL)); endfunction : new extern virtual function void sample_values(); @@ -1252,19 +1162,19 @@ package axi_dma_reg_uvm; if (has_coverage(UVM_CVR_FIELD_VALS)) fld_cg = new(); endfunction : build - endclass : axi_dma_reg__intr_block_t__intr_count_t_cnt_ae7cbc55 + endclass : axi_dma_reg__intr_block_t__intr_count_t_cnt_9b030582 - // Reg - axi_dma_reg::intr_block_t::intr_count_t_cnt_d7a2207c - class axi_dma_reg__intr_block_t__intr_count_t_cnt_d7a2207c extends uvm_reg; + // Reg - axi_dma_reg::intr_block_t::intr_count_t_cnt_3709cb5b + class axi_dma_reg__intr_block_t__intr_count_t_cnt_3709cb5b extends uvm_reg; protected uvm_reg_data_t m_current; protected uvm_reg_data_t m_data; protected bit m_is_read; - axi_dma_reg__intr_block_t__intr_count_t_cnt_d7a2207c_bit_cg cnt_bit_cg[32]; - axi_dma_reg__intr_block_t__intr_count_t_cnt_d7a2207c_fld_cg fld_cg; + axi_dma_reg__intr_block_t__intr_count_t_cnt_3709cb5b_bit_cg cnt_bit_cg[32]; + axi_dma_reg__intr_block_t__intr_count_t_cnt_3709cb5b_fld_cg fld_cg; rand uvm_reg_field cnt; - function new(string name = "axi_dma_reg__intr_block_t__intr_count_t_cnt_d7a2207c"); + function new(string name = "axi_dma_reg__intr_block_t__intr_count_t_cnt_3709cb5b"); super.new(name, 32, build_coverage(UVM_CVR_ALL)); endfunction : new extern virtual function void sample_values(); @@ -1282,19 +1192,19 @@ package axi_dma_reg_uvm; if (has_coverage(UVM_CVR_FIELD_VALS)) fld_cg = new(); endfunction : build - endclass : axi_dma_reg__intr_block_t__intr_count_t_cnt_d7a2207c + endclass : axi_dma_reg__intr_block_t__intr_count_t_cnt_3709cb5b - // Reg - axi_dma_reg::intr_block_t::intr_count_t_cnt_011d9dd4 - class axi_dma_reg__intr_block_t__intr_count_t_cnt_011d9dd4 extends uvm_reg; + // Reg - axi_dma_reg::intr_block_t::intr_count_t_cnt_e250b023 + class axi_dma_reg__intr_block_t__intr_count_t_cnt_e250b023 extends uvm_reg; protected uvm_reg_data_t m_current; protected uvm_reg_data_t m_data; protected bit m_is_read; - axi_dma_reg__intr_block_t__intr_count_t_cnt_011d9dd4_bit_cg cnt_bit_cg[32]; - axi_dma_reg__intr_block_t__intr_count_t_cnt_011d9dd4_fld_cg fld_cg; + axi_dma_reg__intr_block_t__intr_count_t_cnt_e250b023_bit_cg cnt_bit_cg[32]; + axi_dma_reg__intr_block_t__intr_count_t_cnt_e250b023_fld_cg fld_cg; rand uvm_reg_field cnt; - function new(string name = "axi_dma_reg__intr_block_t__intr_count_t_cnt_011d9dd4"); + function new(string name = "axi_dma_reg__intr_block_t__intr_count_t_cnt_e250b023"); super.new(name, 32, build_coverage(UVM_CVR_ALL)); endfunction : new extern virtual function void sample_values(); @@ -1312,19 +1222,19 @@ package axi_dma_reg_uvm; if (has_coverage(UVM_CVR_FIELD_VALS)) fld_cg = new(); endfunction : build - endclass : axi_dma_reg__intr_block_t__intr_count_t_cnt_011d9dd4 + endclass : axi_dma_reg__intr_block_t__intr_count_t_cnt_e250b023 - // Reg - axi_dma_reg::intr_block_t::intr_count_t_cnt_3c016e63 - class axi_dma_reg__intr_block_t__intr_count_t_cnt_3c016e63 extends uvm_reg; + // Reg - axi_dma_reg::intr_block_t::intr_count_t_cnt_fed3ae2d + class axi_dma_reg__intr_block_t__intr_count_t_cnt_fed3ae2d extends uvm_reg; protected uvm_reg_data_t m_current; protected uvm_reg_data_t m_data; protected bit m_is_read; - axi_dma_reg__intr_block_t__intr_count_t_cnt_3c016e63_bit_cg cnt_bit_cg[32]; - axi_dma_reg__intr_block_t__intr_count_t_cnt_3c016e63_fld_cg fld_cg; + axi_dma_reg__intr_block_t__intr_count_t_cnt_fed3ae2d_bit_cg cnt_bit_cg[32]; + axi_dma_reg__intr_block_t__intr_count_t_cnt_fed3ae2d_fld_cg fld_cg; rand uvm_reg_field cnt; - function new(string name = "axi_dma_reg__intr_block_t__intr_count_t_cnt_3c016e63"); + function new(string name = "axi_dma_reg__intr_block_t__intr_count_t_cnt_fed3ae2d"); super.new(name, 32, build_coverage(UVM_CVR_ALL)); endfunction : new extern virtual function void sample_values(); @@ -1342,7 +1252,7 @@ package axi_dma_reg_uvm; if (has_coverage(UVM_CVR_FIELD_VALS)) fld_cg = new(); endfunction : build - endclass : axi_dma_reg__intr_block_t__intr_count_t_cnt_3c016e63 + endclass : axi_dma_reg__intr_block_t__intr_count_t_cnt_fed3ae2d // Reg - axi_dma_reg::intr_block_t::intr_count_incr_t_pulse_08678f4e class axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_08678f4e extends uvm_reg; @@ -1494,77 +1404,17 @@ package axi_dma_reg_uvm; endfunction : build endclass : axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_f530dcc5 - // Reg - axi_dma_reg::intr_block_t::intr_count_incr_t_pulse_bcdfedae - class axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_bcdfedae extends uvm_reg; - protected uvm_reg_data_t m_current; - protected uvm_reg_data_t m_data; - protected bit m_is_read; - - axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_bcdfedae_bit_cg pulse_bit_cg[1]; - axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_bcdfedae_fld_cg fld_cg; - rand uvm_reg_field pulse; - - function new(string name = "axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_bcdfedae"); - super.new(name, 32, build_coverage(UVM_CVR_ALL)); - endfunction : new - extern virtual function void sample_values(); - extern protected virtual function void sample(uvm_reg_data_t data, - uvm_reg_data_t byte_en, - bit is_read, - uvm_reg_map map); - - virtual function void build(); - this.pulse = new("pulse"); - this.pulse.configure(this, 1, 0, "RO", 1, 'h0, 1, 1, 0); - if (has_coverage(UVM_CVR_REG_BITS)) begin - foreach(pulse_bit_cg[bt]) pulse_bit_cg[bt] = new(); - end - if (has_coverage(UVM_CVR_FIELD_VALS)) - fld_cg = new(); - endfunction : build - endclass : axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_bcdfedae - - // Reg - axi_dma_reg::intr_block_t::intr_count_incr_t_pulse_7cff97c2 - class axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7cff97c2 extends uvm_reg; - protected uvm_reg_data_t m_current; - protected uvm_reg_data_t m_data; - protected bit m_is_read; - - axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7cff97c2_bit_cg pulse_bit_cg[1]; - axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7cff97c2_fld_cg fld_cg; - rand uvm_reg_field pulse; - - function new(string name = "axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7cff97c2"); - super.new(name, 32, build_coverage(UVM_CVR_ALL)); - endfunction : new - extern virtual function void sample_values(); - extern protected virtual function void sample(uvm_reg_data_t data, - uvm_reg_data_t byte_en, - bit is_read, - uvm_reg_map map); - - virtual function void build(); - this.pulse = new("pulse"); - this.pulse.configure(this, 1, 0, "RO", 1, 'h0, 1, 1, 0); - if (has_coverage(UVM_CVR_REG_BITS)) begin - foreach(pulse_bit_cg[bt]) pulse_bit_cg[bt] = new(); - end - if (has_coverage(UVM_CVR_FIELD_VALS)) - fld_cg = new(); - endfunction : build - endclass : axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7cff97c2 - - // Reg - axi_dma_reg::intr_block_t::intr_count_incr_t_pulse_88b31e5a - class axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_88b31e5a extends uvm_reg; + // Reg - axi_dma_reg::intr_block_t::intr_count_incr_t_pulse_60d6f4e7 + class axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_60d6f4e7 extends uvm_reg; protected uvm_reg_data_t m_current; protected uvm_reg_data_t m_data; protected bit m_is_read; - axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_88b31e5a_bit_cg pulse_bit_cg[1]; - axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_88b31e5a_fld_cg fld_cg; + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_60d6f4e7_bit_cg pulse_bit_cg[1]; + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_60d6f4e7_fld_cg fld_cg; rand uvm_reg_field pulse; - function new(string name = "axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_88b31e5a"); + function new(string name = "axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_60d6f4e7"); super.new(name, 32, build_coverage(UVM_CVR_ALL)); endfunction : new extern virtual function void sample_values(); @@ -1582,19 +1432,19 @@ package axi_dma_reg_uvm; if (has_coverage(UVM_CVR_FIELD_VALS)) fld_cg = new(); endfunction : build - endclass : axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_88b31e5a + endclass : axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_60d6f4e7 - // Reg - axi_dma_reg::intr_block_t::intr_count_incr_t_pulse_656d2ba5 - class axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_656d2ba5 extends uvm_reg; + // Reg - axi_dma_reg::intr_block_t::intr_count_incr_t_pulse_6907af43 + class axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_6907af43 extends uvm_reg; protected uvm_reg_data_t m_current; protected uvm_reg_data_t m_data; protected bit m_is_read; - axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_656d2ba5_bit_cg pulse_bit_cg[1]; - axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_656d2ba5_fld_cg fld_cg; + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_6907af43_bit_cg pulse_bit_cg[1]; + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_6907af43_fld_cg fld_cg; rand uvm_reg_field pulse; - function new(string name = "axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_656d2ba5"); + function new(string name = "axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_6907af43"); super.new(name, 32, build_coverage(UVM_CVR_ALL)); endfunction : new extern virtual function void sample_values(); @@ -1612,7 +1462,7 @@ package axi_dma_reg_uvm; if (has_coverage(UVM_CVR_FIELD_VALS)) fld_cg = new(); endfunction : build - endclass : axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_656d2ba5 + endclass : axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_6907af43 // Reg - axi_dma_reg::intr_block_t::intr_count_incr_t_pulse_f1bdde05 class axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_f1bdde05 extends uvm_reg; @@ -1644,17 +1494,17 @@ package axi_dma_reg_uvm; endfunction : build endclass : axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_f1bdde05 - // Reg - axi_dma_reg::intr_block_t::intr_count_incr_t_pulse_7cfe324f - class axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7cfe324f extends uvm_reg; + // Reg - axi_dma_reg::intr_block_t::intr_count_incr_t_pulse_236c6006 + class axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_236c6006 extends uvm_reg; protected uvm_reg_data_t m_current; protected uvm_reg_data_t m_data; protected bit m_is_read; - axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7cfe324f_bit_cg pulse_bit_cg[1]; - axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7cfe324f_fld_cg fld_cg; + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_236c6006_bit_cg pulse_bit_cg[1]; + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_236c6006_fld_cg fld_cg; rand uvm_reg_field pulse; - function new(string name = "axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7cfe324f"); + function new(string name = "axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_236c6006"); super.new(name, 32, build_coverage(UVM_CVR_ALL)); endfunction : new extern virtual function void sample_values(); @@ -1672,19 +1522,19 @@ package axi_dma_reg_uvm; if (has_coverage(UVM_CVR_FIELD_VALS)) fld_cg = new(); endfunction : build - endclass : axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7cfe324f + endclass : axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_236c6006 - // Reg - axi_dma_reg::intr_block_t::intr_count_incr_t_pulse_8c79cf20 - class axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_8c79cf20 extends uvm_reg; + // Reg - axi_dma_reg::intr_block_t::intr_count_incr_t_pulse_e5e89525 + class axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_e5e89525 extends uvm_reg; protected uvm_reg_data_t m_current; protected uvm_reg_data_t m_data; protected bit m_is_read; - axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_8c79cf20_bit_cg pulse_bit_cg[1]; - axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_8c79cf20_fld_cg fld_cg; + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_e5e89525_bit_cg pulse_bit_cg[1]; + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_e5e89525_fld_cg fld_cg; rand uvm_reg_field pulse; - function new(string name = "axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_8c79cf20"); + function new(string name = "axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_e5e89525"); super.new(name, 32, build_coverage(UVM_CVR_ALL)); endfunction : new extern virtual function void sample_values(); @@ -1702,19 +1552,19 @@ package axi_dma_reg_uvm; if (has_coverage(UVM_CVR_FIELD_VALS)) fld_cg = new(); endfunction : build - endclass : axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_8c79cf20 + endclass : axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_e5e89525 - // Reg - axi_dma_reg::intr_block_t::intr_count_incr_t_pulse_ff28c67c - class axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_ff28c67c extends uvm_reg; + // Reg - axi_dma_reg::intr_block_t::intr_count_incr_t_pulse_bfb3930b + class axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_bfb3930b extends uvm_reg; protected uvm_reg_data_t m_current; protected uvm_reg_data_t m_data; protected bit m_is_read; - axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_ff28c67c_bit_cg pulse_bit_cg[1]; - axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_ff28c67c_fld_cg fld_cg; + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_bfb3930b_bit_cg pulse_bit_cg[1]; + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_bfb3930b_fld_cg fld_cg; rand uvm_reg_field pulse; - function new(string name = "axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_ff28c67c"); + function new(string name = "axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_bfb3930b"); super.new(name, 32, build_coverage(UVM_CVR_ALL)); endfunction : new extern virtual function void sample_values(); @@ -1732,19 +1582,19 @@ package axi_dma_reg_uvm; if (has_coverage(UVM_CVR_FIELD_VALS)) fld_cg = new(); endfunction : build - endclass : axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_ff28c67c + endclass : axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_bfb3930b - // Reg - axi_dma_reg::intr_block_t::intr_count_incr_t_pulse_7198f419 - class axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7198f419 extends uvm_reg; + // Reg - axi_dma_reg::intr_block_t::intr_count_incr_t_pulse_2aa328ea + class axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_2aa328ea extends uvm_reg; protected uvm_reg_data_t m_current; protected uvm_reg_data_t m_data; protected bit m_is_read; - axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7198f419_bit_cg pulse_bit_cg[1]; - axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7198f419_fld_cg fld_cg; + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_2aa328ea_bit_cg pulse_bit_cg[1]; + axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_2aa328ea_fld_cg fld_cg; rand uvm_reg_field pulse; - function new(string name = "axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7198f419"); + function new(string name = "axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_2aa328ea"); super.new(name, 32, build_coverage(UVM_CVR_ALL)); endfunction : new extern virtual function void sample_values(); @@ -1762,7 +1612,7 @@ package axi_dma_reg_uvm; if (has_coverage(UVM_CVR_FIELD_VALS)) fld_cg = new(); endfunction : build - endclass : axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7198f419 + endclass : axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_2aa328ea // Regfile - axi_dma_reg::intr_block_t class axi_dma_reg__intr_block_t extends uvm_reg_block; @@ -1771,8 +1621,8 @@ package axi_dma_reg_uvm; rand axi_dma_reg__intr_block_t__notif_intr_en_t notif_intr_en_r; rand axi_dma_reg__intr_block_t__global_intr_t_agg_sts_dd3dcf0a error_global_intr_r; rand axi_dma_reg__intr_block_t__global_intr_t_agg_sts_e6399b4a notif_global_intr_r; - rand axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_mbox_lock_sts_9e18c395_error_rd_fifo_oflow_sts_f34a0220_error_rd_fifo_uflow_sts_58a6c7f0_error_sha_lock_sts_4c7993a0_error_wr_fifo_oflow_sts_6575de48_error_wr_fifo_uflow_sts_5c7ec0d3 error_internal_intr_r; - rand axi_dma_reg__intr_block_t__notif_intr_t_notif_rd_fifo_full_sts_6ca335a2_notif_rd_fifo_not_empty_sts_8b7f7627_notif_txn_done_sts_0ee2f120_notif_wr_fifo_empty_sts_e827b313_notif_wr_fifo_not_full_sts_866c0a10 notif_internal_intr_r; + rand axi_dma_reg__intr_block_t__error_intr_t_error_axi_rd_sts_927e49cd_error_axi_wr_sts_f84e5c07_error_cmd_dec_sts_46039d92_error_fifo_oflow_sts_71b29a77_error_fifo_uflow_sts_119d122a_error_mbox_lock_sts_9e18c395_error_sha_lock_sts_4c7993a0 error_internal_intr_r; + rand axi_dma_reg__intr_block_t__notif_intr_t_notif_fifo_empty_sts_d87d1786_notif_fifo_full_sts_64c66862_notif_fifo_not_empty_sts_1a0e2460_notif_fifo_not_full_sts_0266fe07_notif_txn_done_sts_0ee2f120 notif_internal_intr_r; rand axi_dma_reg__intr_block_t__error_intr_trig_t error_intr_trig_r; rand axi_dma_reg__intr_block_t__notif_intr_trig_t notif_intr_trig_r; rand axi_dma_reg__intr_block_t__intr_count_t_cnt_fc5260b0 error_cmd_dec_intr_count_r; @@ -1780,29 +1630,25 @@ package axi_dma_reg_uvm; rand axi_dma_reg__intr_block_t__intr_count_t_cnt_aba31562 error_axi_wr_intr_count_r; rand axi_dma_reg__intr_block_t__intr_count_t_cnt_f73463f1 error_mbox_lock_intr_count_r; rand axi_dma_reg__intr_block_t__intr_count_t_cnt_5381f2ed error_sha_lock_intr_count_r; - rand axi_dma_reg__intr_block_t__intr_count_t_cnt_bf3b372e error_rd_fifo_oflow_intr_count_r; - rand axi_dma_reg__intr_block_t__intr_count_t_cnt_d56d6bb5 error_rd_fifo_uflow_intr_count_r; - rand axi_dma_reg__intr_block_t__intr_count_t_cnt_b3a342c6 error_wr_fifo_oflow_intr_count_r; - rand axi_dma_reg__intr_block_t__intr_count_t_cnt_e089aabc error_wr_fifo_uflow_intr_count_r; + rand axi_dma_reg__intr_block_t__intr_count_t_cnt_b056182d error_fifo_oflow_intr_count_r; + rand axi_dma_reg__intr_block_t__intr_count_t_cnt_91ebc86d error_fifo_uflow_intr_count_r; rand axi_dma_reg__intr_block_t__intr_count_t_cnt_61104c6c notif_txn_done_intr_count_r; - rand axi_dma_reg__intr_block_t__intr_count_t_cnt_ae7cbc55 notif_rd_fifo_not_empty_intr_count_r; - rand axi_dma_reg__intr_block_t__intr_count_t_cnt_d7a2207c notif_rd_fifo_full_intr_count_r; - rand axi_dma_reg__intr_block_t__intr_count_t_cnt_011d9dd4 notif_wr_fifo_not_full_intr_count_r; - rand axi_dma_reg__intr_block_t__intr_count_t_cnt_3c016e63 notif_wr_fifo_empty_intr_count_r; + rand axi_dma_reg__intr_block_t__intr_count_t_cnt_9b030582 notif_fifo_empty_intr_count_r; + rand axi_dma_reg__intr_block_t__intr_count_t_cnt_3709cb5b notif_fifo_not_empty_intr_count_r; + rand axi_dma_reg__intr_block_t__intr_count_t_cnt_e250b023 notif_fifo_full_intr_count_r; + rand axi_dma_reg__intr_block_t__intr_count_t_cnt_fed3ae2d notif_fifo_not_full_intr_count_r; rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_08678f4e error_cmd_dec_intr_count_incr_r; rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_e1020031 error_axi_rd_intr_count_incr_r; rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_cfe70385 error_axi_wr_intr_count_incr_r; rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_9a8b3fa0 error_mbox_lock_intr_count_incr_r; rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_f530dcc5 error_sha_lock_intr_count_incr_r; - rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_bcdfedae error_rd_fifo_oflow_intr_count_incr_r; - rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7cff97c2 error_rd_fifo_uflow_intr_count_incr_r; - rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_88b31e5a error_wr_fifo_oflow_intr_count_incr_r; - rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_656d2ba5 error_wr_fifo_uflow_intr_count_incr_r; + rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_60d6f4e7 error_fifo_oflow_intr_count_incr_r; + rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_6907af43 error_fifo_uflow_intr_count_incr_r; rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_f1bdde05 notif_txn_done_intr_count_incr_r; - rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7cfe324f notif_rd_fifo_not_empty_intr_count_incr_r; - rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_8c79cf20 notif_rd_fifo_full_intr_count_incr_r; - rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_ff28c67c notif_wr_fifo_not_full_intr_count_incr_r; - rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_7198f419 notif_wr_fifo_empty_intr_count_incr_r; + rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_236c6006 notif_fifo_empty_intr_count_incr_r; + rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_e5e89525 notif_fifo_not_empty_intr_count_incr_r; + rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_bfb3930b notif_fifo_full_intr_count_incr_r; + rand axi_dma_reg__intr_block_t__intr_count_incr_t_pulse_2aa328ea notif_fifo_not_full_intr_count_incr_r; function new(string name = "axi_dma_reg__intr_block_t"); super.new(name); @@ -1880,51 +1726,41 @@ package axi_dma_reg_uvm; this.error_sha_lock_intr_count_r.build(); this.default_map.add_reg(this.error_sha_lock_intr_count_r, 'h110); - this.error_rd_fifo_oflow_intr_count_r = new("error_rd_fifo_oflow_intr_count_r"); - this.error_rd_fifo_oflow_intr_count_r.configure(this); - - this.error_rd_fifo_oflow_intr_count_r.build(); - this.default_map.add_reg(this.error_rd_fifo_oflow_intr_count_r, 'h114); - this.error_rd_fifo_uflow_intr_count_r = new("error_rd_fifo_uflow_intr_count_r"); - this.error_rd_fifo_uflow_intr_count_r.configure(this); - - this.error_rd_fifo_uflow_intr_count_r.build(); - this.default_map.add_reg(this.error_rd_fifo_uflow_intr_count_r, 'h118); - this.error_wr_fifo_oflow_intr_count_r = new("error_wr_fifo_oflow_intr_count_r"); - this.error_wr_fifo_oflow_intr_count_r.configure(this); - - this.error_wr_fifo_oflow_intr_count_r.build(); - this.default_map.add_reg(this.error_wr_fifo_oflow_intr_count_r, 'h11c); - this.error_wr_fifo_uflow_intr_count_r = new("error_wr_fifo_uflow_intr_count_r"); - this.error_wr_fifo_uflow_intr_count_r.configure(this); - - this.error_wr_fifo_uflow_intr_count_r.build(); - this.default_map.add_reg(this.error_wr_fifo_uflow_intr_count_r, 'h120); + this.error_fifo_oflow_intr_count_r = new("error_fifo_oflow_intr_count_r"); + this.error_fifo_oflow_intr_count_r.configure(this); + + this.error_fifo_oflow_intr_count_r.build(); + this.default_map.add_reg(this.error_fifo_oflow_intr_count_r, 'h114); + this.error_fifo_uflow_intr_count_r = new("error_fifo_uflow_intr_count_r"); + this.error_fifo_uflow_intr_count_r.configure(this); + + this.error_fifo_uflow_intr_count_r.build(); + this.default_map.add_reg(this.error_fifo_uflow_intr_count_r, 'h118); this.notif_txn_done_intr_count_r = new("notif_txn_done_intr_count_r"); this.notif_txn_done_intr_count_r.configure(this); this.notif_txn_done_intr_count_r.build(); this.default_map.add_reg(this.notif_txn_done_intr_count_r, 'h180); - this.notif_rd_fifo_not_empty_intr_count_r = new("notif_rd_fifo_not_empty_intr_count_r"); - this.notif_rd_fifo_not_empty_intr_count_r.configure(this); - - this.notif_rd_fifo_not_empty_intr_count_r.build(); - this.default_map.add_reg(this.notif_rd_fifo_not_empty_intr_count_r, 'h184); - this.notif_rd_fifo_full_intr_count_r = new("notif_rd_fifo_full_intr_count_r"); - this.notif_rd_fifo_full_intr_count_r.configure(this); - - this.notif_rd_fifo_full_intr_count_r.build(); - this.default_map.add_reg(this.notif_rd_fifo_full_intr_count_r, 'h188); - this.notif_wr_fifo_not_full_intr_count_r = new("notif_wr_fifo_not_full_intr_count_r"); - this.notif_wr_fifo_not_full_intr_count_r.configure(this); - - this.notif_wr_fifo_not_full_intr_count_r.build(); - this.default_map.add_reg(this.notif_wr_fifo_not_full_intr_count_r, 'h18c); - this.notif_wr_fifo_empty_intr_count_r = new("notif_wr_fifo_empty_intr_count_r"); - this.notif_wr_fifo_empty_intr_count_r.configure(this); - - this.notif_wr_fifo_empty_intr_count_r.build(); - this.default_map.add_reg(this.notif_wr_fifo_empty_intr_count_r, 'h190); + this.notif_fifo_empty_intr_count_r = new("notif_fifo_empty_intr_count_r"); + this.notif_fifo_empty_intr_count_r.configure(this); + + this.notif_fifo_empty_intr_count_r.build(); + this.default_map.add_reg(this.notif_fifo_empty_intr_count_r, 'h184); + this.notif_fifo_not_empty_intr_count_r = new("notif_fifo_not_empty_intr_count_r"); + this.notif_fifo_not_empty_intr_count_r.configure(this); + + this.notif_fifo_not_empty_intr_count_r.build(); + this.default_map.add_reg(this.notif_fifo_not_empty_intr_count_r, 'h188); + this.notif_fifo_full_intr_count_r = new("notif_fifo_full_intr_count_r"); + this.notif_fifo_full_intr_count_r.configure(this); + + this.notif_fifo_full_intr_count_r.build(); + this.default_map.add_reg(this.notif_fifo_full_intr_count_r, 'h18c); + this.notif_fifo_not_full_intr_count_r = new("notif_fifo_not_full_intr_count_r"); + this.notif_fifo_not_full_intr_count_r.configure(this); + + this.notif_fifo_not_full_intr_count_r.build(); + this.default_map.add_reg(this.notif_fifo_not_full_intr_count_r, 'h190); this.error_cmd_dec_intr_count_incr_r = new("error_cmd_dec_intr_count_incr_r"); this.error_cmd_dec_intr_count_incr_r.configure(this); @@ -1950,51 +1786,41 @@ package axi_dma_reg_uvm; this.error_sha_lock_intr_count_incr_r.build(); this.default_map.add_reg(this.error_sha_lock_intr_count_incr_r, 'h210); - this.error_rd_fifo_oflow_intr_count_incr_r = new("error_rd_fifo_oflow_intr_count_incr_r"); - this.error_rd_fifo_oflow_intr_count_incr_r.configure(this); - - this.error_rd_fifo_oflow_intr_count_incr_r.build(); - this.default_map.add_reg(this.error_rd_fifo_oflow_intr_count_incr_r, 'h214); - this.error_rd_fifo_uflow_intr_count_incr_r = new("error_rd_fifo_uflow_intr_count_incr_r"); - this.error_rd_fifo_uflow_intr_count_incr_r.configure(this); - - this.error_rd_fifo_uflow_intr_count_incr_r.build(); - this.default_map.add_reg(this.error_rd_fifo_uflow_intr_count_incr_r, 'h218); - this.error_wr_fifo_oflow_intr_count_incr_r = new("error_wr_fifo_oflow_intr_count_incr_r"); - this.error_wr_fifo_oflow_intr_count_incr_r.configure(this); - - this.error_wr_fifo_oflow_intr_count_incr_r.build(); - this.default_map.add_reg(this.error_wr_fifo_oflow_intr_count_incr_r, 'h21c); - this.error_wr_fifo_uflow_intr_count_incr_r = new("error_wr_fifo_uflow_intr_count_incr_r"); - this.error_wr_fifo_uflow_intr_count_incr_r.configure(this); - - this.error_wr_fifo_uflow_intr_count_incr_r.build(); - this.default_map.add_reg(this.error_wr_fifo_uflow_intr_count_incr_r, 'h220); + this.error_fifo_oflow_intr_count_incr_r = new("error_fifo_oflow_intr_count_incr_r"); + this.error_fifo_oflow_intr_count_incr_r.configure(this); + + this.error_fifo_oflow_intr_count_incr_r.build(); + this.default_map.add_reg(this.error_fifo_oflow_intr_count_incr_r, 'h214); + this.error_fifo_uflow_intr_count_incr_r = new("error_fifo_uflow_intr_count_incr_r"); + this.error_fifo_uflow_intr_count_incr_r.configure(this); + + this.error_fifo_uflow_intr_count_incr_r.build(); + this.default_map.add_reg(this.error_fifo_uflow_intr_count_incr_r, 'h218); this.notif_txn_done_intr_count_incr_r = new("notif_txn_done_intr_count_incr_r"); this.notif_txn_done_intr_count_incr_r.configure(this); this.notif_txn_done_intr_count_incr_r.build(); - this.default_map.add_reg(this.notif_txn_done_intr_count_incr_r, 'h224); - this.notif_rd_fifo_not_empty_intr_count_incr_r = new("notif_rd_fifo_not_empty_intr_count_incr_r"); - this.notif_rd_fifo_not_empty_intr_count_incr_r.configure(this); - - this.notif_rd_fifo_not_empty_intr_count_incr_r.build(); - this.default_map.add_reg(this.notif_rd_fifo_not_empty_intr_count_incr_r, 'h228); - this.notif_rd_fifo_full_intr_count_incr_r = new("notif_rd_fifo_full_intr_count_incr_r"); - this.notif_rd_fifo_full_intr_count_incr_r.configure(this); - - this.notif_rd_fifo_full_intr_count_incr_r.build(); - this.default_map.add_reg(this.notif_rd_fifo_full_intr_count_incr_r, 'h22c); - this.notif_wr_fifo_not_full_intr_count_incr_r = new("notif_wr_fifo_not_full_intr_count_incr_r"); - this.notif_wr_fifo_not_full_intr_count_incr_r.configure(this); - - this.notif_wr_fifo_not_full_intr_count_incr_r.build(); - this.default_map.add_reg(this.notif_wr_fifo_not_full_intr_count_incr_r, 'h230); - this.notif_wr_fifo_empty_intr_count_incr_r = new("notif_wr_fifo_empty_intr_count_incr_r"); - this.notif_wr_fifo_empty_intr_count_incr_r.configure(this); - - this.notif_wr_fifo_empty_intr_count_incr_r.build(); - this.default_map.add_reg(this.notif_wr_fifo_empty_intr_count_incr_r, 'h234); + this.default_map.add_reg(this.notif_txn_done_intr_count_incr_r, 'h21c); + this.notif_fifo_empty_intr_count_incr_r = new("notif_fifo_empty_intr_count_incr_r"); + this.notif_fifo_empty_intr_count_incr_r.configure(this); + + this.notif_fifo_empty_intr_count_incr_r.build(); + this.default_map.add_reg(this.notif_fifo_empty_intr_count_incr_r, 'h220); + this.notif_fifo_not_empty_intr_count_incr_r = new("notif_fifo_not_empty_intr_count_incr_r"); + this.notif_fifo_not_empty_intr_count_incr_r.configure(this); + + this.notif_fifo_not_empty_intr_count_incr_r.build(); + this.default_map.add_reg(this.notif_fifo_not_empty_intr_count_incr_r, 'h224); + this.notif_fifo_full_intr_count_incr_r = new("notif_fifo_full_intr_count_incr_r"); + this.notif_fifo_full_intr_count_incr_r.configure(this); + + this.notif_fifo_full_intr_count_incr_r.build(); + this.default_map.add_reg(this.notif_fifo_full_intr_count_incr_r, 'h228); + this.notif_fifo_not_full_intr_count_incr_r = new("notif_fifo_not_full_intr_count_incr_r"); + this.notif_fifo_not_full_intr_count_incr_r.configure(this); + + this.notif_fifo_not_full_intr_count_incr_r.build(); + this.default_map.add_reg(this.notif_fifo_not_full_intr_count_incr_r, 'h22c); endfunction : build endclass : axi_dma_reg__intr_block_t diff --git a/src/axi/rtl/axi_dma_req_if.sv b/src/axi/rtl/axi_dma_req_if.sv new file mode 100644 index 000000000..99df9d762 --- /dev/null +++ b/src/axi/rtl/axi_dma_req_if.sv @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Description: +// Signals for internal transaction requests inside the Caliptra DMA +// hardware assist block +// Does not include any datapath signals (data, strb, user) +// as these flow separately through the FIFO. +// + +interface axi_dma_req_if #(parameter AW = 32) (input logic clk, input logic rst_n); + + import axi_pkg::*; + + logic valid; + logic ready; + logic [AW-1:0] addr; + logic [AXI_LEN_BC_WIDTH-1:0] byte_len; // Byte count, max value per AXI spec + logic fixed; + logic lock; + logic resp_valid; + logic [$bits(axi_resp_e)-1:0] resp; + + modport src ( + output valid, + input ready, + output addr, + output len, + output fixed, + output lock, + input resp_valid, + input resp + ); + + modport snk ( + input valid, + output ready, + input addr, + input len, + input fixed, + input lock, + output resp_valid, + output resp + ); + +endinterface diff --git a/src/axi/rtl/axi_dma_top.sv b/src/axi/rtl/axi_dma_top.sv new file mode 100644 index 000000000..01213d1bf --- /dev/null +++ b/src/axi/rtl/axi_dma_top.sv @@ -0,0 +1,76 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Description: +// Top wrapper on AXI4 Manager (DMA) block +// + +module axi_dma_top import axi_pkg::*; #( + parameter AW = 64, + parameter DW = 32, // Data Width + BC = DW/8, // Byte Count + BW = $clog2(BC), // Byte count Width + parameter UW = 32, // User Width + parameter IW = 1, // ID Width + ID_NUM = 1 << IW // Don't override +)( + input clk, + input rst_n, + + // SOC_IFC Internal Signaling + input mbox_lock, + input sha_lock, + + // AXI INF + axi_if.w_mgr m_axi_wr, + axi_if.r_mgr m_axi_rd, + + // Component INF + input dv, + input var soc_ifc_req_t req_data, + output hold, + output [SOC_IFC_DATA_W-1:0] rdata, + output error + +); + + // --------------------------------------- // + // Imports // + // --------------------------------------- // + + // --------------------------------------- // + // Localparams/Typedefs // + // --------------------------------------- // + + // --------------------------------------- // + // Signals // + // --------------------------------------- // + + // --------------------------------------- // + // Control State Machine // + // --------------------------------------- // + + // --------------------------------------- // + // AXI Manager Read Channel // + // --------------------------------------- // + + // --------------------------------------- // + // AXI Manager Write Channel // + // --------------------------------------- // + + // --------------------------------------- // + // Assertions // + // --------------------------------------- // + +endmodule diff --git a/src/axi/rtl/axi_mgr_rd.sv b/src/axi/rtl/axi_mgr_rd.sv new file mode 100644 index 000000000..194f49cd6 --- /dev/null +++ b/src/axi/rtl/axi_mgr_rd.sv @@ -0,0 +1,188 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Description: +// Generic AXI4 manager component for read channel. Accepts requests from +// FSM logic, converts the request to legal AXI4 handshake, and forwards +// return data via a FIFO interface. +// + +module axi_mgr_rd import axi_pkg::*; #( + parameter AW = 32, + parameter DW = 32, + BC = DW/8, // Byte Count + BW = $clog2(BC), // Byte count Width + parameter UW = 32, + parameter IW = 1, + ID_NUM = 1 << IW +) ( + input clk, + input rst_n, + + // AXI INF + axi_if.r_mgr m_axi_if, + + // REQ INF + axi_dma_req_if.snk req_if, + + // FIFO INF + input ready_i, + output valid_o, + output [DW-1:0] data_o +); + + // --------------------------------------- // + // Imports // + // --------------------------------------- // + + + // --------------------------------------- // + // Localparams/Typedefs // + // --------------------------------------- // + // Transaction context + typedef struct packed { + logic [AW-1:0] addr; + logic fixed; + logic [AXI_LEN_WIDTH-1:0] len; + logic lock; + } req_ctx_t; + + + // --------------------------------------- // + // Signals // + // --------------------------------------- // + req_ctx_t req_ctx; + req_ctx_t axi_ctx; + logic axi_ctx_valid; + logic axi_ctx_ready; + logic axi_ctx_sent; + + logic txn_active; + logic txn_final_beat; + + + // --------------------------------------- // + // Request Context // + // --------------------------------------- // + + always_comb begin + req_ctx.addr = req_if.addr; + req_ctx.fixed = req_if.fixed; + req_ctx.len = req_if.byte_len[BW+:AXI_LEN_WIDTH]; + req_ctx.lock = req_if.lock; + end + + // Buffer the incoming request, but send it out over Address channel immediately + // to allow multiple in-flight transactions (reduce bubbles between bursts). + // The contents of the skidbuffer will inform the tracker for the next data + // burst once the address channel request is sent. + skidbuffer #( + .OPT_LOWPOWER (0 ), + .OPT_OUTREG (0 ), + // + .OPT_PASSTHROUGH(0 ), + .DW ($bits(req_ctx_t)), + .OPT_INITIAL (1'b1) + ) i_ctx_skd ( + .i_clk (clk ), + .i_reset(!rst_n ), + .i_valid(req_if.valid ), + .o_ready(req_if.ready ), + .i_data (req_ctx ), + .o_valid(axi_ctx_valid ), + .i_ready(axi_ctx_ready ), + .o_data (axi_ctx ) + ); + + always_ff@(posedge clk or negedge rst_n) begin + if (!rst_n) begin + axi_ctx_sent = 1'b0; + end + else if (axi_ctx_valid && axi_ctx_ready) begin + axi_ctx_sent = 1'b0; + end + else if (m_axi_if.arvalid && m_axi_if.arready) begin + axi_ctx_sent = 1'b1; + end + end + + always_comb begin + m_axi_if.arvalid = axi_ctx_valid && !axi_ctx_sent; + m_axi_if.araddr = axi_ctx.addr; + m_axi_if.arburst = axi_ctx.fixed ? AXI_BURST_FIXED : AXI_BURST_INCR; + m_axi_if.arsize = BW; + m_axi_if.arlen = axi_ctx.len; + m_axi_if.aruser = '0; // TODO ? + m_axi_if.arid = IW'(0); + m_axi_if.arlock = axi_ctx.lock; + end + + axi_ctx_ready = (!txn_active || txn_final_beat) && + (m_axi_if.arready || axi_ctx_sent); + + + // --------------------------------------- // + // Datapath // + // --------------------------------------- // + always_ff@(posedge clk or negedge rst_n) begin + if (!rst_n) begin + txn_active <= 1'b0; + end + else if (axi_ctx_valid && axi_ctx_ready) begin + txn_active <= 1'b1; + end + else if (txn_final_beat) begin + txn_active <= 1'b0; + end + end + + always_comb txn_final_beat = m_axi_if.rvalid && m_axi_if.rready && m_axi_if.rlast; + always_comb m_axi_if.rready = txn_active && ready_i; + + always_comb begin + valid_o = m_axi_if.rvalid && m_axi_if.rready; + data_o = m_axi_if.rdata; + end + + always_ff@(posedge clk or negedge rst_n) begin + if (!rst_n) begin + req_if.resp <= AXI_RESP_OKAY; + req_if.resp_valid <= 1'b0; + end + // Accumulate status codes... + // TODO what if ERROR is interleaved with EXOKAY? + else if (m_axi_if.rvalid && m_axi_if.rready) begin + req_if.resp <= req_if.resp | m_axi_if.rresp; + req_if.resp_valid <= m_axi_if.rlast; + end + else if (axi_ctx_valid && axi_ctx_ready) begin + req_if.resp <= AXI_RESP_OKAY; + req_if.resp_valid <= 1'b0; + end + else begin + req_if.resp <= req_if.resp; + req_if.resp_valid <= 1'b0; + end + end + + // --------------------------------------- // + // Assertions // + // --------------------------------------- // + `FIXME_ASSERT(req.valid && addr + len <= 4096) + `FIXME_ASSERT(req_if.byte_len[11:10] == 2'b00) + `FIXME_ASSERT(req_if.rvalid && txn_active) + `FIXME_ASSERT_NEVER(fixme_valid_and_ready && ready_i, "Received data with no space in FIFO! Is the FSM credit calculation wrong?") + + +endmodule diff --git a/src/axi/rtl/axi_mgr_wr.sv b/src/axi/rtl/axi_mgr_wr.sv new file mode 100644 index 000000000..d279abe60 --- /dev/null +++ b/src/axi/rtl/axi_mgr_wr.sv @@ -0,0 +1,188 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Description: +// Generic AXI4 manager component for write channel. Accepts requests from +// FSM logic, converts the request to legal AXI4 handshake, and moves data +// that is received via a FIFO interface. +// + +module axi_mgr_wr import axi_pkg::*; #( + parameter AW = 32, + parameter DW = 32, + BC = DW/8, // Byte Count + BW = $clog2(BC), // Byte count Width + parameter UW = 32, + parameter IW = 1, + ID_NUM = 1 << IW +) ( + input clk, + input rst_n, + + // AXI INF + axi_if.w_mgr m_axi_if, + + // REQ INF + axi_dma_req_if.snk req_if, + + // FIFO INF + input valid_i, + input [DW-1:0] data_i, + output ready_o +); + + // --------------------------------------- // + // Imports // + // --------------------------------------- // + + + // --------------------------------------- // + // Localparams/Typedefs // + // --------------------------------------- // + // Transaction context + typedef struct packed { + logic [AW-1:0] addr; + logic fixed; + logic [AXI_LEN_WIDTH-1:0] len; + logic lock; + } req_ctx_t; + + + // --------------------------------------- // + // Signals // + // --------------------------------------- // + req_ctx_t req_ctx; + req_ctx_t axi_ctx; + logic axi_ctx_valid; + logic axi_ctx_ready; + logic axi_ctx_sent; + + logic txn_active; + logic [AXI_LEN_WIDTH-1:0] txn_down_cnt; + logic txn_final_beat; + + + // --------------------------------------- // + // Request Context // + // --------------------------------------- // + + always_comb begin + req_ctx.addr = req_if.addr; + req_ctx.fixed = req_if.fixed; + req_ctx.len = req_if.byte_len[BW+:8]; + req_ctx.lock = req_if.lock; + end + + // Buffer the incoming request, but send it out over Address channel immediately + // to allow multiple in-flight transactions (reduce bubbles between bursts). + // The contents of the skidbuffer will inform the tracker for the next data + // burst once the address channel request is sent. + skidbuffer #( + .OPT_LOWPOWER (0 ), + .OPT_OUTREG (0 ), + // + .OPT_PASSTHROUGH(0 ), + .DW ($bits(req_ctx_t)), + .OPT_INITIAL (1'b1) + ) i_ctx_skd ( + .i_clk (clk ), + .i_reset(!rst_n ), + .i_valid(req_if.valid ), + .o_ready(req_if.ready ), + .i_data (req_ctx ), + .o_valid(axi_ctx_valid ), + .i_ready(axi_ctx_ready ), + .o_data (axi_ctx ) + ); + + always_ff@(posedge clk or negedge rst_n) begin + if (!rst_n) begin + axi_ctx_sent = 1'b0; + end + else if (axi_ctx_valid && axi_ctx_ready) begin + axi_ctx_sent = 1'b0; + end + else if (m_axi_if.awvalid && m_axi_if.awready) begin + axi_ctx_sent = 1'b1; + end + end + + always_comb begin + m_axi_if.awvalid = axi_ctx_valid && !axi_ctx_sent; + m_axi_if.awaddr = axi_ctx.addr; + m_axi_if.awburst = axi_ctx.fixed ? AXI_BURST_FIXED : AXI_BURST_INCR; + m_axi_if.awsize = BW; + m_axi_if.awlen = axi_ctx.len; + m_axi_if.awuser = '0; // TODO ? + m_axi_if.awid = IW'(0); + m_axi_if.awlock = axi_ctx.lock; + end + + axi_ctx_ready = (!txn_active || txn_final_beat) && + (m_axi_if.awready || axi_ctx_sent); + + + // --------------------------------------- // + // Datapath // + // --------------------------------------- // + always_ff@(posedge clk or negedge rst_n) begin + if (!rst_n) begin + txn_active <= 1'b0; + end + else if (axi_ctx_valid && axi_ctx_ready) begin + txn_active <= 1'b1; + end + else if (txn_final_beat) begin + txn_active <= 1'b0; + end + end + + always_ff@(posedge clk or negedge rst_n) begin + if (!rst_n) begin + txn_down_cnt <= '1; + end + else if (axi_ctx_valid && axi_ctx_ready) begin + txn_down_cnt <= axi_ctx.len; + end + else if (m_axi_if.walid && m_axi_if.wready) begin + txn_down_cnt <= txn_down_cnt - 1; + end + end + + always_comb txn_final_beat = m_axi_if.wvalid && m_axi_if.wready && m_axi_if.wlast; + always_comb begin + m_axi_if.wvalid = valid_i; + m_axi_if.wdata = data_i; + m_axi_if.wstrb = '1; // TODO support this? requires significant ctrl updates + m_axi_if.wlast = ~|txn_down_cnt; + end + + always_comb ready_o = txn_active && m_axi_if.wready; + + always_comb m_axi_if.bready = 1'b1; + + always_comb begin + req_if.resp = m_axi_if.bresp; + req_if.resp_valid = m_axi_if.bvalid; + end + + + // --------------------------------------- // + // Assertions // + // --------------------------------------- // + `FIXME_ASSERT(req.valid && addr + len <= 4096) + `FIXME_ASSERT(req_if.byte_len[11:10] == 2'b00) + `FIXME_ASSERT(req_if.rvalid && txn_active) + +endmodule diff --git a/src/axi/rtl/axi_pkg.sv b/src/axi/rtl/axi_pkg.sv index 8f079c644..50d996b4d 100644 --- a/src/axi/rtl/axi_pkg.sv +++ b/src/axi/rtl/axi_pkg.sv @@ -15,6 +15,11 @@ package axi_pkg; + localparam AXI_LEN_MAX_VALUE = 256; // 8-bit LEN signal = 256 beats max + localparam AXI_LEN_WIDTH = $clog2(AXI_LEN_MAX_VALUE); + localparam AXI_LEN_MAX_BYTES = 4096; + localparam AXI_LEN_BC_WIDTH = $clog2(AXI_LEN_MAX_BYTES); + // AXI Burst Enum typedef enum logic [1:0] { AXI_BURST_FIXED = 2'b00, From 77dc50cf5b14fc8c85be80f8f84effa40a5856e5 Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Thu, 18 Jul 2024 13:08:43 -0700 Subject: [PATCH 30/58] Caliptra AXI SRAM --- src/axi/rtl/caliptra_axi_sram.sv | 92 ++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 src/axi/rtl/caliptra_axi_sram.sv diff --git a/src/axi/rtl/caliptra_axi_sram.sv b/src/axi/rtl/caliptra_axi_sram.sv new file mode 100644 index 000000000..1d2afa357 --- /dev/null +++ b/src/axi/rtl/caliptra_axi_sram.sv @@ -0,0 +1,92 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +module caliptra_axi_sram #( + parameter AW = 48, + parameter DW = 32, + BC = DW/8, // Byte Count + BW = $clog2(BC), // Byte count Width + parameter UW = 32, // User Width + parameter IW = 1, // ID Width + ID_NUM = 1 << IW, // Don't override + + parameter EX_EN = 0 // Enable exclusive access tracking w/ AxLOCK +) +( + input clk, + input rst_n, + + // AXI INF + axi_if.w_sub s_axi_w_if, + axi_if.r_sub s_axi_r_if, +); + +//COMPONENT INF +logic dv; +logic [AW-1:0] addr; // Byte address +logic write; +logic [DW-1:0] wdata; // Requires: Component dwidth == AXI dwidth +logic [DW-1:0] rdata; // Requires: Component dwidth == AXI dwidth +logic hold; +logic error; + + +axi_sub #( + .AW (AW ), + .DW (DW ), + .UW (UW ), + .IW (IW ), + .EX_EN(EX_EN), + .C_LAT(1 ) +) i_axi_sub ( + .clk (clk ), + .rst_n(rst_n ), + + // AXI INF + .s_axi_w_if(s_axi_w_if), + .s_axi_r_if(s_axi_r_if), + + //COMPONENT INF + .dv (dv ), + .addr (addr ), // Byte address + .write(write), + .user ( ), + .id ( ), + .wdata(wdata), + .wstrb( ), + .rdata(rdata), + .last ( ), + .hld (hold ), + .err (error) +); + +assign hold = 1'b0; +assign error = 1'b0; + +caliptra_sram #( + .DEPTH (1 << (AW - BW)), // Depth in WORDS + .DATA_WIDTH(DW), + .ADDR_WIDTH(AW) +) i_sram ( + .clk_i (clk ), + + .cs_i (dv ), + .we_i (write), + .addr_i (addr ), + .wdata_i (wdata), + .rdata_o (rdata) +); + +endmodule From ed23e367eb022bc446c9a6377c66ac1368b3b88c Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Thu, 18 Jul 2024 13:25:36 -0700 Subject: [PATCH 31/58] Defaults: AW=32, DW=64 --- src/axi/rtl/caliptra_axi_sram.sv | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/axi/rtl/caliptra_axi_sram.sv b/src/axi/rtl/caliptra_axi_sram.sv index 1d2afa357..50ab8701b 100644 --- a/src/axi/rtl/caliptra_axi_sram.sv +++ b/src/axi/rtl/caliptra_axi_sram.sv @@ -14,8 +14,8 @@ module caliptra_axi_sram #( - parameter AW = 48, - parameter DW = 32, + parameter AW = 32, + parameter DW = 64, BC = DW/8, // Byte Count BW = $clog2(BC), // Byte count Width parameter UW = 32, // User Width From 2da17e818805302ff8e8a62f369e23ef3169cdcd Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Thu, 18 Jul 2024 15:37:33 -0700 Subject: [PATCH 32/58] Mv skidbuffer to libs; add r/w error sigs in axi_sub to work with C_LAT>0; compile fixes for sram --- src/axi/config/compile.yml | 13 ++++++++++++- src/axi/rtl/axi_sub.sv | 6 ++++-- src/axi/rtl/axi_sub_arb.sv | 10 ++++------ src/axi/rtl/caliptra_axi_sram.sv | 31 ++++++++++++++++-------------- src/libs/config/compile.yml | 2 ++ src/{axi => libs}/rtl/skidbuffer.v | 2 +- 6 files changed, 40 insertions(+), 24 deletions(-) rename src/{axi => libs}/rtl/skidbuffer.v (99%) diff --git a/src/axi/config/compile.yml b/src/axi/config/compile.yml index 43a62d4fa..e61fd4d7e 100644 --- a/src/axi/config/compile.yml +++ b/src/axi/config/compile.yml @@ -23,9 +23,20 @@ targets: directories: [$COMPILE_ROOT/rtl] files: - $COMPILE_ROOT/rtl/axi_addr.v - - $COMPILE_ROOT/rtl/skidbuffer.v - $COMPILE_ROOT/rtl/axi_sub_rd.sv - $COMPILE_ROOT/rtl/axi_sub_wr.sv - $COMPILE_ROOT/rtl/axi_sub_arb.sv - $COMPILE_ROOT/rtl/axi_sub.sv tops: [axi_sub] +--- +provides: [caliptra_axi_sram] +schema_version: 2.4.0 +requires: + - libs + - axi_sub +targets: + rtl: + directories: [$COMPILE_ROOT/rtl] + files: + - $COMPILE_ROOT/rtl/caliptra_axi_sram.sv + tops: [caliptra_axi_sram] diff --git a/src/axi/rtl/axi_sub.sv b/src/axi/rtl/axi_sub.sv index 1aaf1104f..433c3a00c 100644 --- a/src/axi/rtl/axi_sub.sv +++ b/src/axi/rtl/axi_sub.sv @@ -60,7 +60,8 @@ module axi_sub import axi_pkg::*; #( input logic [DW-1:0] rdata, // Requires: Component dwidth == AXI dwidth output logic last, // Asserted with final 'dv' of a burst input logic hld, - input logic err + input logic rd_err, + input logic wr_err ); @@ -202,7 +203,8 @@ module axi_sub import axi_pkg::*; #( .wstrb (wstrb ), .last (last ), .hld (hld ), - .err (err ), + .rd_err (rd_err ), + .wr_err (wr_err ), .rdata (rdata ) ); diff --git a/src/axi/rtl/axi_sub_arb.sv b/src/axi/rtl/axi_sub_arb.sv index df5dcc515..646dc6c47 100644 --- a/src/axi/rtl/axi_sub_arb.sv +++ b/src/axi/rtl/axi_sub_arb.sv @@ -72,7 +72,8 @@ module axi_sub_arb import axi_pkg::*; #( output logic [BC-1:0] wstrb, // Requires: Component dwidth == AXI dwidth output logic last, // Asserted with final 'dv' of a burst input logic hld, - input logic err, // FIXME Does this assert with dv or with rdata for reads (when C_LAT > 0)? + input logic rd_err, // Asserts with rdata for reads (when C_LAT > 0) + input logic wr_err, // Asserts with dv for writes input logic [DW-1:0] rdata // Requires: Component dwidth == AXI dwidth ); @@ -125,17 +126,14 @@ module axi_sub_arb import axi_pkg::*; #( last = r_win ? r_last : w_last; r_hld = hld || !r_win; w_hld = hld || r_win; - r_err = err; - w_err = err; + r_err = rd_err; + w_err = wr_err; wdata = w_wdata; wstrb = w_wstrb; r_rdata = rdata; end `CALIPTRA_ASSERT_NEVER(AXI_SUB_ARB_CONFLICT, r_dv && !r_hld && w_dv && !w_hld, clk, !rst_n) - // This arbiter can't deal with an err signal that asserts at - // a delay from the dv signal (as in the case of the read channel). - `CALIPTRA_ASSERT(AXI_SUB_ARB_LAT_ERR, C_LAT == 0, clk, !rst_n) endmodule diff --git a/src/axi/rtl/caliptra_axi_sram.sv b/src/axi/rtl/caliptra_axi_sram.sv index 50ab8701b..23f2b7a63 100644 --- a/src/axi/rtl/caliptra_axi_sram.sv +++ b/src/axi/rtl/caliptra_axi_sram.sv @@ -30,7 +30,7 @@ module caliptra_axi_sram #( // AXI INF axi_if.w_sub s_axi_w_if, - axi_if.r_sub s_axi_r_if, + axi_if.r_sub s_axi_r_if ); //COMPONENT INF @@ -40,7 +40,8 @@ logic write; logic [DW-1:0] wdata; // Requires: Component dwidth == AXI dwidth logic [DW-1:0] rdata; // Requires: Component dwidth == AXI dwidth logic hold; -logic error; +logic rd_error; +logic wr_error; axi_sub #( @@ -59,21 +60,23 @@ axi_sub #( .s_axi_r_if(s_axi_r_if), //COMPONENT INF - .dv (dv ), - .addr (addr ), // Byte address - .write(write), - .user ( ), - .id ( ), - .wdata(wdata), - .wstrb( ), - .rdata(rdata), - .last ( ), - .hld (hold ), - .err (error) + .dv (dv ), + .addr (addr ), // Byte address + .write (write ), + .user ( ), + .id ( ), + .wdata (wdata ), + .wstrb ( ), + .rdata (rdata ), + .last ( ), + .hld (hold ), + .rd_err (rd_error) + .wr_err (wr_error) ); assign hold = 1'b0; -assign error = 1'b0; +assign rd_error = 1'b0; +assign wr_error = 1'b0; caliptra_sram #( .DEPTH (1 << (AW - BW)), // Depth in WORDS diff --git a/src/libs/config/compile.yml b/src/libs/config/compile.yml index c15f5de4b..8186ea43f 100644 --- a/src/libs/config/compile.yml +++ b/src/libs/config/compile.yml @@ -17,6 +17,7 @@ targets: - $COMPILE_ROOT/rtl/caliptra_icg.sv - $COMPILE_ROOT/rtl/clk_gate.sv - $COMPILE_ROOT/rtl/caliptra_2ff_sync.sv + - $COMPILE_ROOT/rtl/skidbuffer.v rtl: directories: [$COMPILE_ROOT/rtl] files: @@ -31,6 +32,7 @@ targets: - $COMPILE_ROOT/rtl/clk_gate.sv - $COMPILE_ROOT/rtl/caliptra_2ff_sync.sv - $COMPILE_ROOT/rtl/ahb_to_reg_adapter.sv + - $COMPILE_ROOT/rtl/skidbuffer.v --- provides: [uvm_lib] schema_version: 2.4.0 diff --git a/src/axi/rtl/skidbuffer.v b/src/libs/rtl/skidbuffer.v similarity index 99% rename from src/axi/rtl/skidbuffer.v rename to src/libs/rtl/skidbuffer.v index e6b1a62a2..6b5276dac 100644 --- a/src/axi/rtl/skidbuffer.v +++ b/src/libs/rtl/skidbuffer.v @@ -90,7 +90,7 @@ module skidbuffer #( // }}} ) ( // {{{ - input wire i_clk, i_reset, + input wire i_clk, i_reset, // fixme resetn, async input wire i_valid, output wire o_ready, input wire [DW-1:0] i_data, From d47b17be7e5f3920dcf7a091885b7187f9cab4ea Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Thu, 18 Jul 2024 15:38:12 -0700 Subject: [PATCH 33/58] Syntax fix --- src/axi/rtl/caliptra_axi_sram.sv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/axi/rtl/caliptra_axi_sram.sv b/src/axi/rtl/caliptra_axi_sram.sv index 23f2b7a63..81f007a4c 100644 --- a/src/axi/rtl/caliptra_axi_sram.sv +++ b/src/axi/rtl/caliptra_axi_sram.sv @@ -70,7 +70,7 @@ axi_sub #( .rdata (rdata ), .last ( ), .hld (hold ), - .rd_err (rd_error) + .rd_err (rd_error), .wr_err (wr_error) ); From 29151a1282764d8536cee5c833bb006c6b0f8af3 Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Fri, 19 Jul 2024 10:12:06 -0700 Subject: [PATCH 34/58] Add all module inst/connections; syntax fixes for compilation --- src/axi/config/compile.yml | 18 ++++ src/axi/rtl/axi_dma_ctrl.sv | 197 +++++++++++++++++++--------------- src/axi/rtl/axi_dma_req_if.sv | 4 +- src/axi/rtl/axi_dma_top.sv | 142 ++++++++++++++++++++++-- src/axi/rtl/axi_mgr_rd.sv | 16 +-- src/axi/rtl/axi_mgr_wr.sv | 18 ++-- 6 files changed, 280 insertions(+), 115 deletions(-) diff --git a/src/axi/config/compile.yml b/src/axi/config/compile.yml index e61fd4d7e..f79ba4ac6 100644 --- a/src/axi/config/compile.yml +++ b/src/axi/config/compile.yml @@ -40,3 +40,21 @@ targets: files: - $COMPILE_ROOT/rtl/caliptra_axi_sram.sv tops: [caliptra_axi_sram] +--- +provides: [axi_dma] +schema_version: 2.4.0 +requires: + - libs + - axi_pkg +targets: + rtl: + directories: [$COMPILE_ROOT/rtl] + files: + - $COMPILE_ROOT/rtl/axi_dma_req_if.sv + - $COMPILE_ROOT/rtl/axi_dma_reg_pkg.sv + - $COMPILE_ROOT/rtl/axi_dma_reg.sv + - $COMPILE_ROOT/rtl/axi_mgr_rd.sv + - $COMPILE_ROOT/rtl/axi_mgr_wr.sv + - $COMPILE_ROOT/rtl/axi_dma_ctrl.sv + - $COMPILE_ROOT/rtl/axi_dma_top.sv + tops: [axi_dma_top] diff --git a/src/axi/rtl/axi_dma_ctrl.sv b/src/axi/rtl/axi_dma_ctrl.sv index 53c8c7098..52ef29d09 100644 --- a/src/axi/rtl/axi_dma_ctrl.sv +++ b/src/axi/rtl/axi_dma_ctrl.sv @@ -25,48 +25,48 @@ import soc_ifc_pkg::*; BC = DW/8, // Byte Count BW = $clog2(BC) // Byte count Width )( - input clk, - input cptra_pwrgood, - input rst_n, + input logic clk, + input logic cptra_pwrgood, + input logic rst_n, // Recovery INF Interrupt // Should only assert when a full block_size of data is available at the // recovery interface FIFO - input recovery_data_avail, + input logic recovery_data_avail, // Internal Signaling - input mbox_lock, - input sha_lock, + input logic mbox_lock, + input logic sha_lock, // Mailbox SRAM INF - output mb_dv, - input mb_hold, - input mb_error, + output logic mb_dv, + input logic mb_hold, + input logic mb_error, output var soc_ifc_req_t mb_data, - input [DW-1:0] mb_rdata, + input logic [DW-1:0] mb_rdata, // AXI Manager Read INF - axi_dma_req_if.src r_req_if, - output r_ready_o, - input r_valid_i, - input [DW-1:0] r_data_i, + axi_dma_req_if.src r_req_if, + output logic r_ready_o, + input logic r_valid_i, + input logic [DW-1:0] r_data_i, // AXI Manager Write INF - axi_dma_req_if.src w_req_if, - input w_ready_i, - output w_valid_o, - output [DW-1:0] w_data_o, + axi_dma_req_if.src w_req_if, + input logic w_ready_i, + output logic w_valid_o, + output logic [DW-1:0] w_data_o, // Register INF - input dv, - input var soc_ifc_req_t req_data, - output hold, - output [SOC_IFC_DATA_W-1:0] rdata, - output error, + input logic dv, + input var soc_ifc_req_t req_data, + output logic hold, + output logic [SOC_IFC_DATA_W-1:0] rdata, + output logic error, // Interrupt - output notif_intr, - output error_intr + output logic notif_intr, + output logic error_intr ); @@ -96,8 +96,8 @@ import soc_ifc_pkg::*; // Signals // // --------------------------------------- // - axi_dma_reg_pkg::axi_dma_reg__in_t hwif_in, - axi_dma_reg_pkg::axi_dma_reg__out_t hwif_out + axi_dma_reg_pkg::axi_dma_reg__in_t hwif_in; + axi_dma_reg_pkg::axi_dma_reg__out_t hwif_out; enum logic [2:0] { DMA_IDLE, @@ -171,21 +171,21 @@ import soc_ifc_pkg::*; .clk(clk ), .rst(1'b0), - .s_cpuif_req (dv ), - .s_cpuif_req_is_wr (req_data.write ), - .s_cpuif_addr (req_data.addr ), - .s_cpuif_wr_data (req_data.wdata ), - .s_cpuif_wr_biten ('1/*FIXME req_data.wstrb*/), - .s_cpuif_req_stall_wr(reg_wr_stall ), - .s_cpuif_req_stall_rd(reg_rd_stall ), - .s_cpuif_rd_ack (reg_rd_ack_nc ), - .s_cpuif_rd_err (reg_rd_err ), - .s_cpuif_rd_data (rdata ), - .s_cpuif_wr_ack (reg_wr_ack_nc ), - .s_cpuif_wr_err (reg_wr_err ), - - .hwif_in (hwif_in ), - .hwif_out (hwif_out ) + .s_cpuif_req (dv ), + .s_cpuif_req_is_wr (req_data.write ), + .s_cpuif_addr (req_data.addr[axi_dma_reg_pkg::AXI_DMA_REG_MIN_ADDR_WIDTH-1:0]), + .s_cpuif_wr_data (req_data.wdata ), + .s_cpuif_wr_biten ('1/*FIXME req_data.wstrb*/ ), + .s_cpuif_req_stall_wr(reg_wr_stall ), + .s_cpuif_req_stall_rd(reg_rd_stall ), + .s_cpuif_rd_ack (reg_rd_ack_nc ), + .s_cpuif_rd_err (reg_rd_err ), + .s_cpuif_rd_data (rdata ), + .s_cpuif_wr_ack (reg_wr_ack_nc ), + .s_cpuif_wr_err (reg_wr_err ), + + .hwif_in (hwif_in ), + .hwif_out (hwif_out ) ); assign error = reg_rd_err || reg_wr_err; assign hold = reg_rd_stall || reg_wr_stall; @@ -243,33 +243,39 @@ import soc_ifc_pkg::*; always_comb hwif_in.ctrl.go.hwclr = (ctrl_fsm_ps == DMA_DONE) || ((ctrl_fsm_ps == DMA_ERROR) && hwif_out.ctrl.flush.value); always_comb hwif_in.ctrl.flush.hwclr = (ctrl_fsm_ps == DMA_IDLE); - always_comb hwif_in.status0.busy.next = (ctrl_fsm_ps != DMA_IDLE); - always_comb hwif_in.status0.error.next = (ctrl_fsm_ps == DMA_ERROR); - always_comb hwif_in.status0.axi_dma_fsm_ps.next = ctrl_fsm_ps; + always_comb hwif_in.status0.busy.next = (ctrl_fsm_ps != DMA_IDLE); + always_comb hwif_in.status0.error.next = (ctrl_fsm_ps == DMA_ERROR); + always_comb hwif_in.status0.axi_dma_fsm_ps.next = ctrl_fsm_ps; always_comb hwif_in.status1.bytes_remaining.next = bytes_remaining; // --------------------------------------- // // Command Decode // // --------------------------------------- // - always_comb begin + generate if (AW < 32) begin - src_addr = hwif_out.src_addr_l.addr_l.value[AW-1:0]; - dst_addr = hwif_out.dst_addr_l.addr_l.value[AW-1:0]; + always_comb begin + src_addr = hwif_out.src_addr_l.addr_l.value[AW-1:0]; + dst_addr = hwif_out.dst_addr_l.addr_l.value[AW-1:0]; + end end else if (AW < 64) begin - src_addr = {hwif_out.src_addr_h.addr_h.value[AW-32-1:0], - hwif_out.src_addr_l.addr_l.value}; - dst_addr = {hwif_out.dst_addr_h.addr_h.value[AW-32-1:0], - hwif_out.dst_addr_l.addr_l.value}; + always_comb begin + src_addr = {hwif_out.src_addr_h.addr_h.value[AW-32-1:0], + hwif_out.src_addr_l.addr_l.value}; + dst_addr = {hwif_out.dst_addr_h.addr_h.value[AW-32-1:0], + hwif_out.dst_addr_l.addr_l.value}; + end end else begin - src_addr = {hwif_out.src_addr_h.addr_h.value, - hwif_out.src_addr_l.addr_l.value}; - dst_addr = {hwif_out.dst_addr_h.addr_h.value, - hwif_out.dst_addr_l.addr_l.value}; + always_comb begin + src_addr = {hwif_out.src_addr_h.addr_h.value, + hwif_out.src_addr_l.addr_l.value}; + dst_addr = {hwif_out.dst_addr_h.addr_h.value, + hwif_out.dst_addr_l.addr_l.value}; + end end - end + endgenerate always_comb begin cmd_inv_rd_route = 1'b0; // There are no unassigned values from the 2-bit field, all individual configs are legal @@ -324,27 +330,6 @@ import soc_ifc_pkg::*; {2'(axi_dma_reg__ctrl__rd_route__rd_route_e__AXI_WR), 2'(axi_dma_reg__ctrl__wr_route__wr_route_e__AXI_RD)}: cmd_inv_route_combo = 0; endcase - // An address is invalid if: - // * improperly aligned - // * MSB bits are set (out of address range) - if (AW < 32) begin - cmd_inv_src_addr = |src_addr[BW-1:0] || - |hwif_out.src_addr_l.addr_l.value[31:AW] || - |hwif_out.src_addr_h.addr_h.value; - cmd_inv_dst_addr = |dst_addr[BW-1:0] || - |hwif_out.dst_addr_l.addr_l.value[31:AW] || - |hwif_out.dst_addr_h.addr_h.value; - end - else if (AW < 64) begin - cmd_inv_src_addr = |src_addr[BW-1:0] || - |hwif_out.src_addr_h.addr_h.value[31:AW-32]; - cmd_inv_dst_addr = |dst_addr[BW-1:0] || - |hwif_out.dst_addr_h.addr_h.value[31:AW-32]; - end - else begin - cmd_inv_src_addr = |src_addr[BW-1:0]; - cmd_inv_dst_addr = |dst_addr[BW-1:0]; - end cmd_inv_byte_count = |hwif_out.byte_count.count.value[BW-1:0] || (hwif_out.byte_count.count.value > MBOX_SIZE_BYTES && ((hwif_out.ctrl.rd_route.value == axi_dma_reg__ctrl__rd_route__rd_route_e__MBOX) || @@ -368,21 +353,53 @@ import soc_ifc_pkg::*; cmd_inv_mbox_lock || cmd_inv_sha_lock; end + generate + // An address is invalid if: + // * improperly aligned + // * MSB bits are set (out of address range) + if (AW < 32) begin + always_comb begin + cmd_inv_src_addr = |src_addr[BW-1:0] || + |hwif_out.src_addr_l.addr_l.value[31:AW] || + |hwif_out.src_addr_h.addr_h.value; + cmd_inv_dst_addr = |dst_addr[BW-1:0] || + |hwif_out.dst_addr_l.addr_l.value[31:AW] || + |hwif_out.dst_addr_h.addr_h.value; + end + end + else if (AW < 64) begin + always_comb begin + cmd_inv_src_addr = |src_addr[BW-1:0] || + |hwif_out.src_addr_h.addr_h.value[31:AW-32]; + cmd_inv_dst_addr = |dst_addr[BW-1:0] || + |hwif_out.dst_addr_h.addr_h.value[31:AW-32]; + end + end + else begin + always_comb begin + cmd_inv_src_addr = |src_addr[BW-1:0]; + cmd_inv_dst_addr = |dst_addr[BW-1:0]; + end + end + endgenerate - always_comb hwif_in.intr_block_rf.error_internal_intr_r.error_cmd_dec_sts .hwset = (axi_dma_fsm_ps == DMA_IDLE) && hwif_out.ctrl.go.value && cmd_parse_error; + always_comb hwif_in.intr_block_rf.error_internal_intr_r.error_cmd_dec_sts .hwset = (ctrl_fsm_ps == DMA_IDLE) && hwif_out.ctrl.go.value && cmd_parse_error; always_comb hwif_in.intr_block_rf.error_internal_intr_r.error_axi_rd_sts .hwset = r_req_if.resp_valid && r_req_if.resp inside {AXI_RESP_SLVERR,AXI_RESP_DECERR}; always_comb hwif_in.intr_block_rf.error_internal_intr_r.error_axi_wr_sts .hwset = w_req_if.resp_valid && w_req_if.resp inside {AXI_RESP_SLVERR,AXI_RESP_DECERR}; always_comb hwif_in.intr_block_rf.error_internal_intr_r.error_mbox_lock_sts .hwset = mb_lock_dropped && !mb_lock_error; // pulse to set - always_comb hwif_in.intr_block_rf.error_internal_intr_r.error_sha_lock_sts .hwset = (axi_dma_fsm_ps == DMA_IDLE) && hwif_out.ctrl.go.value && cmd_inv_mbox_lock; // FIXME with real-time checking + always_comb hwif_in.intr_block_rf.error_internal_intr_r.error_sha_lock_sts .hwset = (ctrl_fsm_ps == DMA_IDLE) && hwif_out.ctrl.go.value && cmd_inv_mbox_lock; // FIXME with real-time checking always_comb hwif_in.intr_block_rf.error_internal_intr_r.error_fifo_oflow_sts .hwset = (hwif_out.ctrl.wr_route.value == axi_dma_reg__ctrl__wr_route__wr_route_e__AHB_FIFO) && fifo_w_valid && !fifo_w_ready; always_comb hwif_in.intr_block_rf.error_internal_intr_r.error_fifo_uflow_sts .hwset = (hwif_out.ctrl.rd_route.value == axi_dma_reg__ctrl__rd_route__rd_route_e__AHB_FIFO) && !fifo_r_valid && fifo_r_ready; - always_comb hwif_in.intr_block_rf.notif_internal_intr_r.notif_txn_done_sts .hwset = axi_dma_fsm_ps inside {DMA_DONE,DMA_ERROR}; + always_comb hwif_in.intr_block_rf.notif_internal_intr_r.notif_txn_done_sts .hwset = ctrl_fsm_ps inside {DMA_DONE,DMA_ERROR}; always_comb hwif_in.intr_block_rf.notif_internal_intr_r.notif_fifo_empty_sts .hwset = fifo_empty && !fifo_empty_r; always_comb hwif_in.intr_block_rf.notif_internal_intr_r.notif_fifo_not_empty_sts.hwset = !fifo_empty && fifo_empty_r; always_comb hwif_in.intr_block_rf.notif_internal_intr_r.notif_fifo_full_sts .hwset = fifo_full && !fifo_full_r; always_comb hwif_in.intr_block_rf.notif_internal_intr_r.notif_fifo_not_full_sts .hwset = !fifo_full && fifo_full_r; + assign notif_intr = hwif_out.intr_block_rf.notif_global_intr_r.intr; + assign error_intr = hwif_out.intr_block_rf.error_global_intr_r.intr; + // --------------------------------------- // // Control Logic // @@ -406,7 +423,7 @@ import soc_ifc_pkg::*; if (!rst_n) begin wr_resp_pending <= '0; end - else if (axi_dma_fsm_ps == DMA_IDLE) begin + else if (ctrl_fsm_ps == DMA_IDLE) begin wr_resp_pending <= '0; end else begin @@ -539,6 +556,7 @@ import soc_ifc_pkg::*; fifo_w_data = r_data_i; fifo_w_valid = r_valid_i; end + r_ready_o = fifo_w_ready; end always_comb begin @@ -551,6 +569,8 @@ import soc_ifc_pkg::*; else begin fifo_r_ready = w_ready_i; end + w_valid_o = fifo_r_valid; + w_data_o = fifo_r_data; end always_comb r_data_mask = {DW{hwif_out.ctrl.rd_route.value == axi_dma_reg__ctrl__rd_route__rd_route_e__AHB_FIFO}}; @@ -560,7 +580,7 @@ import soc_ifc_pkg::*; if (!rst_n) begin axi_error <= 1'b0; end - else if (axi_dma_fsm_ps == DMA_IDLE || hwif_out.ctrl.flush.value) begin + else if (ctrl_fsm_ps == DMA_IDLE || hwif_out.ctrl.flush.value) begin axi_error <= 1'b0; end else if (r_req_if.resp_valid) begin @@ -571,7 +591,7 @@ import soc_ifc_pkg::*; end end - always_comb mb_lock_dropped = axi_dma_fsm_ps == DMA_WAIT_DATA && + always_comb mb_lock_dropped = ctrl_fsm_ps == DMA_WAIT_DATA && ((hwif_out.ctrl.rd_route.value == axi_dma_reg__ctrl__rd_route__rd_route_e__MBOX) || (hwif_out.ctrl.wr_route.value == axi_dma_reg__ctrl__wr_route__wr_route_e__MBOX)) && !mbox_lock; @@ -579,7 +599,7 @@ import soc_ifc_pkg::*; if (!rst_n) begin mb_lock_error <= 1'b0; end - else if (axi_dma_fsm_ps == DMA_IDLE || hwif_out.ctrl.flush.value) begin + else if (ctrl_fsm_ps == DMA_IDLE || hwif_out.ctrl.flush.value) begin mb_lock_error <= 1'b0; end else if (mb_lock_dropped) begin @@ -597,11 +617,11 @@ import soc_ifc_pkg::*; .Depth (FIFO_BC/BC), .OutputZeroIfEmpty(1'b1), // if == 1 always output 0 when FIFO is empty .Secure (1'b0) // use prim count for pointers TODO review if this is needed - ) ( + ) i_fifo ( .clk_i (clk ), .rst_ni (rst_n ), // synchronous clear / flush port - .clr_i (hwif_out.flush_fixme), + .clr_i (ctrl_fsm_ps == DMA_IDLE && hwif_out.ctrl.flush.value), // write port .wvalid_i(fifo_w_valid ), .wready_o(fifo_w_ready ), @@ -621,15 +641,18 @@ import soc_ifc_pkg::*; if (!rst_n) begin fifo_full_r <= 1'b0; fifo_empty_r <= 1'b1; + end else begin fifo_full_r <= fifo_full; fifo_empty_r <= fifo_empty; end end + `ifdef VERILATOR FIXME_ASSERT_INIT(DW == 32) FIXME_ASSERT(rd_credits <= FIFO_BC) FIXME_ASSERT(!((rd_credits < BC) && rd_req_hshake)) FIXME_ASSERT(!((ctrl_fsm_ps == DMA_DONE) && (rd_credits != FIFO_BC))) + `endif endmodule diff --git a/src/axi/rtl/axi_dma_req_if.sv b/src/axi/rtl/axi_dma_req_if.sv index 99df9d762..986e6d18d 100644 --- a/src/axi/rtl/axi_dma_req_if.sv +++ b/src/axi/rtl/axi_dma_req_if.sv @@ -36,7 +36,7 @@ interface axi_dma_req_if #(parameter AW = 32) (input logic clk, input logic rst_ output valid, input ready, output addr, - output len, + output byte_len, output fixed, output lock, input resp_valid, @@ -47,7 +47,7 @@ interface axi_dma_req_if #(parameter AW = 32) (input logic clk, input logic rst_ input valid, output ready, input addr, - input len, + input byte_len, input fixed, input lock, output resp_valid, diff --git a/src/axi/rtl/axi_dma_top.sv b/src/axi/rtl/axi_dma_top.sv index 01213d1bf..4ee2e3b9f 100644 --- a/src/axi/rtl/axi_dma_top.sv +++ b/src/axi/rtl/axi_dma_top.sv @@ -16,7 +16,10 @@ // Top wrapper on AXI4 Manager (DMA) block // -module axi_dma_top import axi_pkg::*; #( +module axi_dma_top +import axi_pkg::*; +import soc_ifc_pkg::*; +#( parameter AW = 64, parameter DW = 32, // Data Width BC = DW/8, // Byte Count @@ -25,23 +28,40 @@ module axi_dma_top import axi_pkg::*; #( parameter IW = 1, // ID Width ID_NUM = 1 << IW // Don't override )( - input clk, - input rst_n, + input logic clk, + input logic cptra_pwrgood, + input logic rst_n, + + // Recovery INF Interrupt + // Should only assert when a full block_size of data is available at the + // recovery interface FIFO + input logic recovery_data_avail, // SOC_IFC Internal Signaling - input mbox_lock, - input sha_lock, + input logic mbox_lock, + input logic sha_lock, // AXI INF - axi_if.w_mgr m_axi_wr, - axi_if.r_mgr m_axi_rd, + axi_if.w_mgr m_axi_w_if, + axi_if.r_mgr m_axi_r_if, // Component INF - input dv, + input logic dv, input var soc_ifc_req_t req_data, - output hold, - output [SOC_IFC_DATA_W-1:0] rdata, - output error + output logic hold, + output logic [SOC_IFC_DATA_W-1:0] rdata, + output logic error, + + // Mailbox SRAM INF + output logic mb_dv, + input logic mb_hold, + input logic mb_error, + output var soc_ifc_req_t mb_data, + input logic [DW-1:0] mb_rdata, + + // Interrupt + output logic notif_intr, + output logic error_intr ); @@ -56,18 +76,118 @@ module axi_dma_top import axi_pkg::*; #( // --------------------------------------- // // Signals // // --------------------------------------- // + // AXI Manager Read INF + axi_dma_req_if #(.AW(AW)) r_req_if (.clk(clk), .rst_n(rst_n)); + logic r_ready; + logic r_valid; + logic [DW-1:0] r_data; + + // AXI Manager Write INF + axi_dma_req_if #(.AW(AW)) w_req_if (.clk(clk), .rst_n(rst_n)); + logic w_ready; + logic w_valid; + logic [DW-1:0] w_data; + // --------------------------------------- // // Control State Machine // // --------------------------------------- // + axi_dma_ctrl #( + .AW(AW), + .DW(DW) + ) i_axi_dma_ctrl ( + .clk (clk ), + .cptra_pwrgood(cptra_pwrgood), + .rst_n (rst_n ), + + // Recovery INF Interrupt + // Should only assert when a full block_size of data is available at the + // recovery interface FIFO + .recovery_data_avail(recovery_data_avail), + + // Internal Signaling + .mbox_lock(mbox_lock), + .sha_lock (sha_lock ), + + // Mailbox SRAM INF + .mb_dv (mb_dv ), + .mb_hold (mb_hold ), + .mb_error(mb_error), + .mb_data (mb_data ), + .mb_rdata(mb_rdata), + + // AXI Manager Read INF + .r_req_if (r_req_if.src), + .r_ready_o(r_ready ), + .r_valid_i(r_valid ), + .r_data_i (r_data ), + + // AXI Manager Write INF + .w_req_if (w_req_if.src), + .w_ready_i(w_ready ), + .w_valid_o(w_valid ), + .w_data_o (w_data ), + + // Register INF + .dv (dv ), + .req_data(req_data), + .hold (hold ), + .rdata (rdata ), + .error (error ), + + // Interrupt + .notif_intr(notif_intr), + .error_intr(error_intr) + + ); // --------------------------------------- // // AXI Manager Read Channel // // --------------------------------------- // + axi_mgr_rd #( + .AW(AW), + .DW(DW), + .UW(UW), + .IW(IW) + ) i_axi_mgr_rd ( + .clk(clk), + .rst_n(rst_n), + + // AXI INF + .m_axi_if(m_axi_r_if), + + // REQ INF + .req_if(r_req_if.snk), + + // FIFO INF + .ready_i(r_ready), + .valid_o(r_valid), + .data_o (r_data ) + ); // --------------------------------------- // // AXI Manager Write Channel // // --------------------------------------- // + axi_mgr_wr #( + .AW(AW), + .DW(DW), + .UW(UW), + .IW(IW) + ) i_axi_mgr_wr ( + .clk (clk ), + .rst_n(rst_n), + + // AXI INF + .m_axi_if(m_axi_w_if), + + // REQ INF + .req_if(w_req_if.snk), + + // FIFO INF + .valid_i(w_valid), + .data_i (w_data ), + .ready_o(w_ready) + ); // --------------------------------------- // // Assertions // diff --git a/src/axi/rtl/axi_mgr_rd.sv b/src/axi/rtl/axi_mgr_rd.sv index 194f49cd6..0ff8be47c 100644 --- a/src/axi/rtl/axi_mgr_rd.sv +++ b/src/axi/rtl/axi_mgr_rd.sv @@ -27,8 +27,8 @@ module axi_mgr_rd import axi_pkg::*; #( parameter IW = 1, ID_NUM = 1 << IW ) ( - input clk, - input rst_n, + input logic clk, + input logic rst_n, // AXI INF axi_if.r_mgr m_axi_if, @@ -37,9 +37,9 @@ module axi_mgr_rd import axi_pkg::*; #( axi_dma_req_if.snk req_if, // FIFO INF - input ready_i, - output valid_o, - output [DW-1:0] data_o + input logic ready_i, + output logic valid_o, + output logic [DW-1:0] data_o ); // --------------------------------------- // @@ -128,8 +128,8 @@ module axi_mgr_rd import axi_pkg::*; #( m_axi_if.arlock = axi_ctx.lock; end - axi_ctx_ready = (!txn_active || txn_final_beat) && - (m_axi_if.arready || axi_ctx_sent); + always_comb axi_ctx_ready = (!txn_active || txn_final_beat) && + (m_axi_if.arready || axi_ctx_sent); // --------------------------------------- // @@ -179,10 +179,12 @@ module axi_mgr_rd import axi_pkg::*; #( // --------------------------------------- // // Assertions // // --------------------------------------- // + `ifdef VERILATOR `FIXME_ASSERT(req.valid && addr + len <= 4096) `FIXME_ASSERT(req_if.byte_len[11:10] == 2'b00) `FIXME_ASSERT(req_if.rvalid && txn_active) `FIXME_ASSERT_NEVER(fixme_valid_and_ready && ready_i, "Received data with no space in FIFO! Is the FSM credit calculation wrong?") + `endif endmodule diff --git a/src/axi/rtl/axi_mgr_wr.sv b/src/axi/rtl/axi_mgr_wr.sv index d279abe60..b27f227d4 100644 --- a/src/axi/rtl/axi_mgr_wr.sv +++ b/src/axi/rtl/axi_mgr_wr.sv @@ -27,8 +27,8 @@ module axi_mgr_wr import axi_pkg::*; #( parameter IW = 1, ID_NUM = 1 << IW ) ( - input clk, - input rst_n, + input logic clk, + input logic rst_n, // AXI INF axi_if.w_mgr m_axi_if, @@ -37,9 +37,9 @@ module axi_mgr_wr import axi_pkg::*; #( axi_dma_req_if.snk req_if, // FIFO INF - input valid_i, - input [DW-1:0] data_i, - output ready_o + input logic valid_i, + input logic [DW-1:0] data_i, + output logic ready_o ); // --------------------------------------- // @@ -129,8 +129,8 @@ module axi_mgr_wr import axi_pkg::*; #( m_axi_if.awlock = axi_ctx.lock; end - axi_ctx_ready = (!txn_active || txn_final_beat) && - (m_axi_if.awready || axi_ctx_sent); + always_comb axi_ctx_ready = (!txn_active || txn_final_beat) && + (m_axi_if.awready || axi_ctx_sent); // --------------------------------------- // @@ -155,7 +155,7 @@ module axi_mgr_wr import axi_pkg::*; #( else if (axi_ctx_valid && axi_ctx_ready) begin txn_down_cnt <= axi_ctx.len; end - else if (m_axi_if.walid && m_axi_if.wready) begin + else if (m_axi_if.wvalid && m_axi_if.wready) begin txn_down_cnt <= txn_down_cnt - 1; end end @@ -181,8 +181,10 @@ module axi_mgr_wr import axi_pkg::*; #( // --------------------------------------- // // Assertions // // --------------------------------------- // + `ifdef VERILATOR `FIXME_ASSERT(req.valid && addr + len <= 4096) `FIXME_ASSERT(req_if.byte_len[11:10] == 2'b00) `FIXME_ASSERT(req_if.rvalid && txn_active) + `endif endmodule From 2e8a1163ce850e2c28c7aab41275f10f039af478 Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Fri, 19 Jul 2024 10:23:18 -0700 Subject: [PATCH 35/58] Include DMA reg set in docs --- tools/scripts/reg_doc_gen.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/scripts/reg_doc_gen.sh b/tools/scripts/reg_doc_gen.sh index 367c77598..a0dba77cd 100755 --- a/tools/scripts/reg_doc_gen.sh +++ b/tools/scripts/reg_doc_gen.sh @@ -24,6 +24,7 @@ src/sha512/rtl/sha512_reg.rdl \ src/sha256/rtl/sha256_reg.rdl \ src/soc_ifc/rtl/mbox_csr.rdl \ src/soc_ifc/rtl/sha512_acc_csr.rdl \ +src/axi/rtl/axi_dma_reg.rdl \ src/soc_ifc/rtl/soc_ifc_reg.rdl \ src/hmac/rtl/hmac_reg.rdl \ src/doe/rtl/doe_reg.rdl \ From 4c8b31212ca4e088acbcd1ac9609fa19b7921f5a Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Fri, 19 Jul 2024 10:24:07 -0700 Subject: [PATCH 36/58] Inst. DMA; connect SRAM through MBOX dir mode mux; add DMA regs in arb; upd COV IF --- src/soc_ifc/config/compile.yml | 8 +- src/soc_ifc/coverage/soc_ifc_cov_bind.sv | 11 +- src/soc_ifc/coverage/soc_ifc_cov_if.sv | 1295 +++++++++--------- src/soc_ifc/rtl/caliptra_top_reg.h | 92 +- src/soc_ifc/rtl/caliptra_top_reg_defines.svh | 92 +- src/soc_ifc/rtl/mbox.sv | 52 +- src/soc_ifc/rtl/soc_ifc_arb.sv | 48 +- src/soc_ifc/rtl/soc_ifc_pkg.sv | 14 +- src/soc_ifc/rtl/soc_ifc_top.sv | 118 +- 9 files changed, 953 insertions(+), 777 deletions(-) diff --git a/src/soc_ifc/config/compile.yml b/src/soc_ifc/config/compile.yml index 4dd2b2a39..e1f819978 100644 --- a/src/soc_ifc/config/compile.yml +++ b/src/soc_ifc/config/compile.yml @@ -1,7 +1,8 @@ --- provides: [soc_ifc_pkg] schema_version: 2.4.0 -requires: [] +requires: + - caliptra_top_defines targets: rtl: directories: [$COMPILE_ROOT/rtl] @@ -33,6 +34,7 @@ provides: [soc_ifc_coverage] schema_version: 2.4.0 requires: - libs + - axi_pkg - soc_ifc_pkg targets: tb: @@ -46,11 +48,12 @@ provides: [soc_ifc_top] schema_version: 2.4.0 requires: - libs + - axi_sub + - axi_dma # for beh_lib with rvecc_encode/decode - el2_veer_pkg - soc_ifc_pkg - sha512_ctrl - - caliptra_top_defines targets: rtl: directories: @@ -77,7 +80,6 @@ schema_version: 2.4.0 requires: - soc_ifc_coverage - soc_ifc_top - - caliptra_top_defines targets: tb: directories: diff --git a/src/soc_ifc/coverage/soc_ifc_cov_bind.sv b/src/soc_ifc/coverage/soc_ifc_cov_bind.sv index 47a39dbf2..1075c8d0b 100644 --- a/src/soc_ifc/coverage/soc_ifc_cov_bind.sv +++ b/src/soc_ifc/coverage/soc_ifc_cov_bind.sv @@ -18,9 +18,14 @@ module soc_ifc_cov_bind; bind soc_ifc_top soc_ifc_cov_if #( .AHB_ADDR_WIDTH(`CALIPTRA_SLAVE_ADDR_WIDTH(`CALIPTRA_SLAVE_SEL_SOC_IFC)), .AHB_DATA_WIDTH(`CALIPTRA_AHB_HDATA_SIZE), - .APB_ADDR_WIDTH(`CALIPTRA_SLAVE_ADDR_WIDTH(`CALIPTRA_SLAVE_SEL_SOC_IFC)), - .APB_DATA_WIDTH(`CALIPTRA_APB_DATA_WIDTH), - .APB_USER_WIDTH(`CALIPTRA_APB_USER_WIDTH) + .AXI_ADDR_WIDTH(`CALIPTRA_SLAVE_ADDR_WIDTH(`CALIPTRA_SLAVE_SEL_SOC_IFC)), + .AXI_DATA_WIDTH(`CALIPTRA_AXI_DATA_WIDTH), + .AXI_ID_WIDTH (`CALIPTRA_AXI_ID_WIDTH ), + .AXI_USER_WIDTH(`CALIPTRA_AXI_USER_WIDTH), + .AXIM_ADDR_WIDTH(`CALIPTRA_AXI_DMA_ADDR_WIDTH), + .AXIM_DATA_WIDTH(CPTRA_AXI_DMA_DATA_WIDTH), + .AXIM_ID_WIDTH (CPTRA_AXI_DMA_ID_WIDTH), + .AXIM_USER_WIDTH(CPTRA_AXI_DMA_USER_WIDTH) ) i_soc_ifc_cov_if (.*); `endif diff --git a/src/soc_ifc/coverage/soc_ifc_cov_if.sv b/src/soc_ifc/coverage/soc_ifc_cov_if.sv index 52eac09ae..e31c77fea 100644 --- a/src/soc_ifc/coverage/soc_ifc_cov_if.sv +++ b/src/soc_ifc/coverage/soc_ifc_cov_if.sv @@ -21,8 +21,8 @@ // // Coverpoints: // - Bins for total addressible space per register (including all fields) -// - Transition bins: An APB or AHB Write followed by APB or AHB Read within 1000 cycles -// - Ignore bins: IDLE (no read/write activity), simultaneous RD and WR over APB or AHB. +// - Transition bins: An AXI or AHB Write followed by AXI or AHB Read within 1000 cycles +// - Ignore bins: IDLE (no read/write activity), simultaneous RD and WR over AXI or AHB. // // Not covered and TODO. // - Bins for individual fields within a register for special behavior. @@ -37,25 +37,26 @@ interface soc_ifc_cov_if import soc_ifc_pkg::*; import soc_ifc_reg_pkg::*; #( - parameter APB_ADDR_WIDTH = 18 - ,parameter APB_DATA_WIDTH = 32 - ,parameter APB_USER_WIDTH = 32 - ,parameter AHB_ADDR_WIDTH = 18 - ,parameter AHB_DATA_WIDTH = 32 + parameter AXI_ADDR_WIDTH = 18 + ,parameter AXI_DATA_WIDTH = 32 + ,parameter AXI_ID_WIDTH = 32 + ,parameter AXI_USER_WIDTH = 32 + ,parameter AHB_ADDR_WIDTH = 18 + ,parameter AHB_DATA_WIDTH = 32 + ,parameter AXIM_ADDR_WIDTH = 48 + ,parameter AXIM_DATA_WIDTH = 32 + ,parameter AXIM_ID_WIDTH = 5 + ,parameter AXIM_USER_WIDTH = 32 ) ( input logic clk, input logic clk_cg, input logic soc_ifc_clk_cg, + input logic rdc_clk_cg, //SoC boot signals input logic cptra_pwrgood, input logic cptra_rst_b, - input logic uc_req_dv, - input soc_ifc_req_t uc_req, - input logic soc_req_dv, - input soc_ifc_req_t soc_req, - input soc_ifc_req_t soc_ifc_reg_req_data, input logic ready_for_fuses, input logic ready_for_fw_push, @@ -64,22 +65,17 @@ interface soc_ifc_cov_if input logic mailbox_data_avail, input logic mailbox_flow_done, + input logic recovery_data_avail, + input var security_state_t security_state, input logic [1:0][31:0] generic_input_wires, input logic BootFSM_BrkPoint, input logic [1:0][31:0] generic_output_wires, - //SoC APB Interface - input logic [APB_ADDR_WIDTH-1:0] paddr_i, - input logic psel_i, - input logic penable_i, - input logic pwrite_i, - input logic [APB_DATA_WIDTH-1:0] pwdata_i, - input logic [APB_USER_WIDTH-1:0] pauser_i, - input logic pready_o, - input logic [APB_DATA_WIDTH-1:0] prdata_o, - input logic pslverr_o, + //SoC AXI Interface + axi_if.w_sub s_axi_w_if, + axi_if.r_sub s_axi_r_if, //uC AHB Lite Interface input logic [AHB_ADDR_WIDTH-1:0] haddr_i, @@ -94,6 +90,10 @@ interface soc_ifc_cov_if input logic hreadyout_o, input logic [AHB_DATA_WIDTH-1:0] hrdata_o, + // AXI Manager INF + axi_if.w_mgr m_axi_w_if, + axi_if.r_mgr m_axi_r_if, + //SoC Interrupts input logic cptra_error_fatal, input logic cptra_error_non_fatal, @@ -104,11 +104,17 @@ interface soc_ifc_cov_if input wire soc_ifc_notif_intr, input wire sha_error_intr, input wire sha_notif_intr, + input wire dma_error_intr, + input wire dma_notif_intr, + input wire timer_intr, //SRAM interface input mbox_sram_req_t mbox_sram_req, input mbox_sram_resp_t mbox_sram_resp, + // RV ECC Status Interface + input rv_ecc_sts_t rv_ecc_sts, + //Obfuscated UDS and FE input logic clear_obf_secrets, input logic scan_mode_f, @@ -130,10 +136,19 @@ interface soc_ifc_cov_if //uC reset input logic cptra_uc_rst_b, //Clock gating - input logic clk_gating_en + input logic clk_gating_en, + input logic rdc_clk_dis, + input logic fw_update_rst_window, + + input logic uc_req_dv, + input soc_ifc_req_t uc_req, + input logic soc_req_dv, + input soc_ifc_req_t soc_req, + input soc_ifc_req_t soc_ifc_reg_req_data + ); - enum bit [3:0] {IDLE = '0, AHB_RD = 4'h8, AHB_WR = 4'h4, APB_RD = 4'h2, APB_WR = 4'h1} bus_event_e; + enum bit [3:0] {IDLE = '0, AHB_RD = 4'h8, AHB_WR = 4'h4, AXI_RD = 4'h2, AXI_WR = 4'h1} bus_event_e; logic uc_rd, uc_wr, soc_rd, soc_wr; @@ -149,13 +164,15 @@ interface soc_ifc_cov_if cptra_noncore_rst_b_cp: coverpoint cptra_noncore_rst_b; cptra_uc_rst_b_cp: coverpoint cptra_uc_rst_b; clk_gating_en_cp: coverpoint clk_gating_en; + rdc_clk_dis_cp: coverpoint rdc_clk_dis; + fw_update_rst_window_cp: coverpoint fw_update_rst_window; security_state_cp: coverpoint security_state; - scan_mode_f_cp: coverpoint scan_mode_f; ready_for_fuses_cp: coverpoint ready_for_fuses; ready_for_fw_push_cp: coverpoint ready_for_fw_push; ready_for_runtime_cp: coverpoint ready_for_runtime; mailbox_data_avail_cp: coverpoint mailbox_data_avail; mailbox_flow_done_cp: coverpoint mailbox_flow_done; + recovery_data_avail: coverpoint recovery_data_avail; cptra_error_fatal_cp: coverpoint cptra_error_fatal; cptra_error_non_fatal_cp: coverpoint cptra_error_non_fatal; trng_req_cp: coverpoint trng_req; @@ -168,9 +185,14 @@ interface soc_ifc_cov_if soc_ifc_notif_intr_cp: coverpoint soc_ifc_notif_intr; sha_error_intr_cp: coverpoint sha_error_intr; sha_notif_intr_cp: coverpoint sha_notif_intr; + dma_error_intr_cp: coverpoint dma_error_intr; + dma_notif_intr_cp: coverpoint dma_notif_intr; + timer_intr_cp: coverpoint timer_intr; mbox_sram_req_cp: coverpoint mbox_sram_req; mbox_sram_resp_cp: coverpoint mbox_sram_resp; + rv_ecc_sts_cp: coverpoint rv_ecc_sts; clear_obf_secrets_cp: coverpoint clear_obf_secrets; + scan_mode_f_cp: coverpoint scan_mode_f; cptra_obf_key_reg_cp: coverpoint cptra_obf_key_reg; obf_field_entropy_cp: coverpoint obf_field_entropy; obf_uds_seed_cp: coverpoint obf_uds_seed; @@ -190,11 +212,13 @@ interface soc_ifc_cov_if soc_mbox_req_ip_cp: coverpoint i_soc_ifc_arb.soc_mbox_req_ip; soc_sha_req_ip_cp: coverpoint i_soc_ifc_arb.soc_sha_req_ip; + soc_dma_req_ip_cp: coverpoint i_soc_ifc_arb.soc_dma_req_ip; //No stall here, so arbiter never hits these. We can put these back if we ever introduce a stall //soc_reg_req_ip_cp: coverpoint i_soc_ifc_arb.soc_reg_req_ip; uc_mbox_req_ip_cp: coverpoint i_soc_ifc_arb.uc_mbox_req_ip; uc_sha_req_ip_cp: coverpoint i_soc_ifc_arb.uc_sha_req_ip; + uc_dma_req_ip_cp: coverpoint i_soc_ifc_arb.uc_dma_req_ip; //No stall here, so arbiter never hits these. We can put these back if we ever introduce a stall //uc_reg_req_ip_cp: coverpoint i_soc_ifc_arb.uc_reg_req_ip; @@ -208,6 +232,9 @@ interface soc_ifc_cov_if uc_sha_req_cp: coverpoint i_soc_ifc_arb.uc_sha_req; soc_sha_req_cp: coverpoint i_soc_ifc_arb.soc_sha_req; + uc_dma_req_cp: coverpoint i_soc_ifc_arb.uc_dma_req; + soc_dma_req_cp: coverpoint i_soc_ifc_arb.soc_dma_req; + //Cover soc req to mbox addr range with and without valid pauser. soc_mbox_reqXvalid_mbox_req: cross soc_mbox_addr_cp, valid_mbox_req_cp; @@ -398,31 +425,31 @@ interface soc_ifc_cov_if // logic [3:0] bus_CPTRA_SECURITY_STATE; // logic [31:0] full_addr_CPTRA_SECURITY_STATE = `CLP_SOC_IFC_REG_CPTRA_SECURITY_STATE; - logic hit_CPTRA_MBOX_VALID_PAUSER[0:4]; - logic [3:0] bus_CPTRA_MBOX_VALID_PAUSER[0:4]; - logic [31:0] full_addr_CPTRA_MBOX_VALID_PAUSER[0:4]; - assign full_addr_CPTRA_MBOX_VALID_PAUSER[0] = `CLP_SOC_IFC_REG_CPTRA_MBOX_VALID_PAUSER_0; - assign full_addr_CPTRA_MBOX_VALID_PAUSER[1] = `CLP_SOC_IFC_REG_CPTRA_MBOX_VALID_PAUSER_1; - assign full_addr_CPTRA_MBOX_VALID_PAUSER[2] = `CLP_SOC_IFC_REG_CPTRA_MBOX_VALID_PAUSER_2; - assign full_addr_CPTRA_MBOX_VALID_PAUSER[3] = `CLP_SOC_IFC_REG_CPTRA_MBOX_VALID_PAUSER_3; - assign full_addr_CPTRA_MBOX_VALID_PAUSER[4] = `CLP_SOC_IFC_REG_CPTRA_MBOX_VALID_PAUSER_4; - - logic hit_CPTRA_MBOX_PAUSER_LOCK[0:4]; - logic [3:0] bus_CPTRA_MBOX_PAUSER_LOCK[0:4]; - logic [31:0] full_addr_CPTRA_MBOX_PAUSER_LOCK[0:4]; - assign full_addr_CPTRA_MBOX_PAUSER_LOCK[0] = `CLP_SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_0; - assign full_addr_CPTRA_MBOX_PAUSER_LOCK[1] = `CLP_SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_1; - assign full_addr_CPTRA_MBOX_PAUSER_LOCK[2] = `CLP_SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_2; - assign full_addr_CPTRA_MBOX_PAUSER_LOCK[3] = `CLP_SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_3; - assign full_addr_CPTRA_MBOX_PAUSER_LOCK[4] = `CLP_SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_4; - - logic hit_CPTRA_TRNG_VALID_PAUSER; - logic [3:0] bus_CPTRA_TRNG_VALID_PAUSER; - logic [31:0] full_addr_CPTRA_TRNG_VALID_PAUSER = `CLP_SOC_IFC_REG_CPTRA_TRNG_VALID_PAUSER; - - logic hit_CPTRA_TRNG_PAUSER_LOCK; - logic [3:0] bus_CPTRA_TRNG_PAUSER_LOCK; - logic [31:0] full_addr_CPTRA_TRNG_PAUSER_LOCK = `CLP_SOC_IFC_REG_CPTRA_TRNG_PAUSER_LOCK; + logic hit_CPTRA_MBOX_VALID_AXI_ID[0:4]; + logic [3:0] bus_CPTRA_MBOX_VALID_AXI_ID[0:4]; + logic [31:0] full_addr_CPTRA_MBOX_VALID_AXI_ID[0:4]; + assign full_addr_CPTRA_MBOX_VALID_AXI_ID[0] = `CLP_SOC_IFC_REG_CPTRA_MBOX_VALID_AXI_ID_0; + assign full_addr_CPTRA_MBOX_VALID_AXI_ID[1] = `CLP_SOC_IFC_REG_CPTRA_MBOX_VALID_AXI_ID_1; + assign full_addr_CPTRA_MBOX_VALID_AXI_ID[2] = `CLP_SOC_IFC_REG_CPTRA_MBOX_VALID_AXI_ID_2; + assign full_addr_CPTRA_MBOX_VALID_AXI_ID[3] = `CLP_SOC_IFC_REG_CPTRA_MBOX_VALID_AXI_ID_3; + assign full_addr_CPTRA_MBOX_VALID_AXI_ID[4] = `CLP_SOC_IFC_REG_CPTRA_MBOX_VALID_AXI_ID_4; + + logic hit_CPTRA_MBOX_AXI_ID_LOCK[0:4]; + logic [3:0] bus_CPTRA_MBOX_AXI_ID_LOCK[0:4]; + logic [31:0] full_addr_CPTRA_MBOX_AXI_ID_LOCK[0:4]; + assign full_addr_CPTRA_MBOX_AXI_ID_LOCK[0] = `CLP_SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_0; + assign full_addr_CPTRA_MBOX_AXI_ID_LOCK[1] = `CLP_SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_1; + assign full_addr_CPTRA_MBOX_AXI_ID_LOCK[2] = `CLP_SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_2; + assign full_addr_CPTRA_MBOX_AXI_ID_LOCK[3] = `CLP_SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_3; + assign full_addr_CPTRA_MBOX_AXI_ID_LOCK[4] = `CLP_SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_4; + + logic hit_CPTRA_TRNG_VALID_AXI_ID; + logic [3:0] bus_CPTRA_TRNG_VALID_AXI_ID; + logic [31:0] full_addr_CPTRA_TRNG_VALID_AXI_ID = `CLP_SOC_IFC_REG_CPTRA_TRNG_VALID_AXI_ID; + + logic hit_CPTRA_TRNG_AXI_ID_LOCK; + logic [3:0] bus_CPTRA_TRNG_AXI_ID_LOCK; + logic [31:0] full_addr_CPTRA_TRNG_AXI_ID_LOCK = `CLP_SOC_IFC_REG_CPTRA_TRNG_AXI_ID_LOCK; logic hit_CPTRA_TRNG_DATA[0:11]; logic [3:0] bus_CPTRA_TRNG_DATA[0:11]; @@ -526,13 +553,13 @@ interface soc_ifc_cov_if logic [3:0] bus_CPTRA_WDT_STATUS; logic [31:0] full_addr_CPTRA_WDT_STATUS = `CLP_SOC_IFC_REG_CPTRA_WDT_STATUS; - logic hit_CPTRA_FUSE_VALID_PAUSER; - logic [3:0] bus_CPTRA_FUSE_VALID_PAUSER; - logic [31:0] full_addr_CPTRA_FUSE_VALID_PAUSER = `CLP_SOC_IFC_REG_CPTRA_FUSE_VALID_PAUSER; + logic hit_CPTRA_FUSE_VALID_AXI_ID; + logic [3:0] bus_CPTRA_FUSE_VALID_AXI_ID; + logic [31:0] full_addr_CPTRA_FUSE_VALID_AXI_ID = `CLP_SOC_IFC_REG_CPTRA_FUSE_VALID_AXI_ID; - logic hit_CPTRA_FUSE_PAUSER_LOCK; - logic [3:0] bus_CPTRA_FUSE_PAUSER_LOCK; - logic [31:0] full_addr_CPTRA_FUSE_PAUSER_LOCK = `CLP_SOC_IFC_REG_CPTRA_FUSE_PAUSER_LOCK; + logic hit_CPTRA_FUSE_AXI_ID_LOCK; + logic [3:0] bus_CPTRA_FUSE_AXI_ID_LOCK; + logic [31:0] full_addr_CPTRA_FUSE_AXI_ID_LOCK = `CLP_SOC_IFC_REG_CPTRA_FUSE_AXI_ID_LOCK; logic hit_CPTRA_WDT_CFG[0:1]; logic [3:0] bus_CPTRA_WDT_CFG[0:1]; @@ -887,22 +914,22 @@ interface soc_ifc_cov_if logic [31:0] full_addr_intr_brf_notif_soc_req_lock_intr_count_incr_r = `CLP_SOC_IFC_REG_INTR_BLOCK_RF_NOTIF_SOC_REQ_LOCK_INTR_COUNT_INCR_R; - assign hit_CPTRA_HW_ERROR_FATAL = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_HW_ERROR_FATAL[APB_ADDR_WIDTH-1:0]); + assign hit_CPTRA_HW_ERROR_FATAL = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_HW_ERROR_FATAL[AXI_ADDR_WIDTH-1:0]); assign bus_CPTRA_HW_ERROR_FATAL = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_HW_ERROR_FATAL}}; - assign hit_CPTRA_HW_ERROR_NON_FATAL = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_HW_ERROR_NON_FATAL[APB_ADDR_WIDTH-1:0]); + assign hit_CPTRA_HW_ERROR_NON_FATAL = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_HW_ERROR_NON_FATAL[AXI_ADDR_WIDTH-1:0]); assign bus_CPTRA_HW_ERROR_NON_FATAL = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_HW_ERROR_NON_FATAL}}; - assign hit_CPTRA_FW_ERROR_FATAL = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_FW_ERROR_FATAL[APB_ADDR_WIDTH-1:0]); + assign hit_CPTRA_FW_ERROR_FATAL = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_FW_ERROR_FATAL[AXI_ADDR_WIDTH-1:0]); assign bus_CPTRA_FW_ERROR_FATAL = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_FW_ERROR_FATAL}}; - assign hit_CPTRA_FW_ERROR_NON_FATAL = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_FW_ERROR_NON_FATAL[APB_ADDR_WIDTH-1:0]); + assign hit_CPTRA_FW_ERROR_NON_FATAL = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_FW_ERROR_NON_FATAL[AXI_ADDR_WIDTH-1:0]); assign bus_CPTRA_FW_ERROR_NON_FATAL = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_FW_ERROR_NON_FATAL}}; - assign hit_CPTRA_HW_ERROR_ENC = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_HW_ERROR_ENC[APB_ADDR_WIDTH-1:0]); + assign hit_CPTRA_HW_ERROR_ENC = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_HW_ERROR_ENC[AXI_ADDR_WIDTH-1:0]); assign bus_CPTRA_HW_ERROR_ENC = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_HW_ERROR_ENC}}; - assign hit_CPTRA_FW_ERROR_ENC = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_FW_ERROR_ENC[APB_ADDR_WIDTH-1:0]); + assign hit_CPTRA_FW_ERROR_ENC = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_FW_ERROR_ENC[AXI_ADDR_WIDTH-1:0]); assign bus_CPTRA_FW_ERROR_ENC = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_FW_ERROR_ENC}}; assign hit_CPTRA_FW_EXTENDED_ERROR_INFO[0] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_FW_EXTENDED_ERROR_INFO[0][18-1:0]); @@ -929,53 +956,53 @@ interface soc_ifc_cov_if assign hit_CPTRA_FW_EXTENDED_ERROR_INFO[7] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_FW_EXTENDED_ERROR_INFO[7][18-1:0]); assign bus_CPTRA_FW_EXTENDED_ERROR_INFO[7] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_FW_EXTENDED_ERROR_INFO[7]}}; - assign hit_CPTRA_BOOT_STATUS = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_BOOT_STATUS[APB_ADDR_WIDTH-1:0]); + assign hit_CPTRA_BOOT_STATUS = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_BOOT_STATUS[AXI_ADDR_WIDTH-1:0]); assign bus_CPTRA_BOOT_STATUS = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_BOOT_STATUS}}; - assign hit_CPTRA_FLOW_STATUS = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_FLOW_STATUS[APB_ADDR_WIDTH-1:0]); + assign hit_CPTRA_FLOW_STATUS = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_FLOW_STATUS[AXI_ADDR_WIDTH-1:0]); assign bus_CPTRA_FLOW_STATUS = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_FLOW_STATUS}}; - assign hit_CPTRA_RESET_REASON = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_RESET_REASON[APB_ADDR_WIDTH-1:0]); + assign hit_CPTRA_RESET_REASON = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_RESET_REASON[AXI_ADDR_WIDTH-1:0]); assign bus_CPTRA_RESET_REASON = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_RESET_REASON}}; - // assign hit_CPTRA_SECURITY_STATE = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_SECURITY_STATE[APB_ADDR_WIDTH-1:0]); + // assign hit_CPTRA_SECURITY_STATE = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_SECURITY_STATE[AXI_ADDR_WIDTH-1:0]); // assign bus_CPTRA_SECURITY_STATE = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_SECURITY_STATE}}; - assign hit_CPTRA_MBOX_VALID_PAUSER[0] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_MBOX_VALID_PAUSER[0][18-1:0]); - assign bus_CPTRA_MBOX_VALID_PAUSER[0] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_MBOX_VALID_PAUSER[0]}}; + assign hit_CPTRA_MBOX_VALID_AXI_ID[0] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_MBOX_VALID_AXI_ID[0][18-1:0]); + assign bus_CPTRA_MBOX_VALID_AXI_ID[0] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_MBOX_VALID_AXI_ID[0]}}; - assign hit_CPTRA_MBOX_VALID_PAUSER[1] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_MBOX_VALID_PAUSER[1][18-1:0]); - assign bus_CPTRA_MBOX_VALID_PAUSER[1] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_MBOX_VALID_PAUSER[1]}}; + assign hit_CPTRA_MBOX_VALID_AXI_ID[1] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_MBOX_VALID_AXI_ID[1][18-1:0]); + assign bus_CPTRA_MBOX_VALID_AXI_ID[1] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_MBOX_VALID_AXI_ID[1]}}; - assign hit_CPTRA_MBOX_VALID_PAUSER[2] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_MBOX_VALID_PAUSER[2][18-1:0]); - assign bus_CPTRA_MBOX_VALID_PAUSER[2] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_MBOX_VALID_PAUSER[2]}}; + assign hit_CPTRA_MBOX_VALID_AXI_ID[2] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_MBOX_VALID_AXI_ID[2][18-1:0]); + assign bus_CPTRA_MBOX_VALID_AXI_ID[2] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_MBOX_VALID_AXI_ID[2]}}; - assign hit_CPTRA_MBOX_VALID_PAUSER[3] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_MBOX_VALID_PAUSER[3][18-1:0]); - assign bus_CPTRA_MBOX_VALID_PAUSER[3] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_MBOX_VALID_PAUSER[3]}}; + assign hit_CPTRA_MBOX_VALID_AXI_ID[3] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_MBOX_VALID_AXI_ID[3][18-1:0]); + assign bus_CPTRA_MBOX_VALID_AXI_ID[3] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_MBOX_VALID_AXI_ID[3]}}; - assign hit_CPTRA_MBOX_VALID_PAUSER[4] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_MBOX_VALID_PAUSER[4][18-1:0]); - assign bus_CPTRA_MBOX_VALID_PAUSER[4] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_MBOX_VALID_PAUSER[4]}}; + assign hit_CPTRA_MBOX_VALID_AXI_ID[4] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_MBOX_VALID_AXI_ID[4][18-1:0]); + assign bus_CPTRA_MBOX_VALID_AXI_ID[4] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_MBOX_VALID_AXI_ID[4]}}; - assign hit_CPTRA_MBOX_PAUSER_LOCK[0] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_MBOX_PAUSER_LOCK[0][18-1:0]); - assign bus_CPTRA_MBOX_PAUSER_LOCK[0] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_MBOX_PAUSER_LOCK[0]}}; + assign hit_CPTRA_MBOX_AXI_ID_LOCK[0] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_MBOX_AXI_ID_LOCK[0][18-1:0]); + assign bus_CPTRA_MBOX_AXI_ID_LOCK[0] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_MBOX_AXI_ID_LOCK[0]}}; - assign hit_CPTRA_MBOX_PAUSER_LOCK[1] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_MBOX_PAUSER_LOCK[1][18-1:0]); - assign bus_CPTRA_MBOX_PAUSER_LOCK[1] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_MBOX_PAUSER_LOCK[1]}}; + assign hit_CPTRA_MBOX_AXI_ID_LOCK[1] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_MBOX_AXI_ID_LOCK[1][18-1:0]); + assign bus_CPTRA_MBOX_AXI_ID_LOCK[1] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_MBOX_AXI_ID_LOCK[1]}}; - assign hit_CPTRA_MBOX_PAUSER_LOCK[2] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_MBOX_PAUSER_LOCK[2][18-1:0]); - assign bus_CPTRA_MBOX_PAUSER_LOCK[2] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_MBOX_PAUSER_LOCK[2]}}; + assign hit_CPTRA_MBOX_AXI_ID_LOCK[2] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_MBOX_AXI_ID_LOCK[2][18-1:0]); + assign bus_CPTRA_MBOX_AXI_ID_LOCK[2] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_MBOX_AXI_ID_LOCK[2]}}; - assign hit_CPTRA_MBOX_PAUSER_LOCK[3] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_MBOX_PAUSER_LOCK[3][18-1:0]); - assign bus_CPTRA_MBOX_PAUSER_LOCK[3] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_MBOX_PAUSER_LOCK[3]}}; + assign hit_CPTRA_MBOX_AXI_ID_LOCK[3] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_MBOX_AXI_ID_LOCK[3][18-1:0]); + assign bus_CPTRA_MBOX_AXI_ID_LOCK[3] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_MBOX_AXI_ID_LOCK[3]}}; - assign hit_CPTRA_MBOX_PAUSER_LOCK[4] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_MBOX_PAUSER_LOCK[4][18-1:0]); - assign bus_CPTRA_MBOX_PAUSER_LOCK[4] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_MBOX_PAUSER_LOCK[4]}}; + assign hit_CPTRA_MBOX_AXI_ID_LOCK[4] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_MBOX_AXI_ID_LOCK[4][18-1:0]); + assign bus_CPTRA_MBOX_AXI_ID_LOCK[4] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_MBOX_AXI_ID_LOCK[4]}}; - assign hit_CPTRA_TRNG_VALID_PAUSER = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_TRNG_VALID_PAUSER[APB_ADDR_WIDTH-1:0]); - assign bus_CPTRA_TRNG_VALID_PAUSER = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_TRNG_VALID_PAUSER}}; + assign hit_CPTRA_TRNG_VALID_AXI_ID = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_TRNG_VALID_AXI_ID[AXI_ADDR_WIDTH-1:0]); + assign bus_CPTRA_TRNG_VALID_AXI_ID = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_TRNG_VALID_AXI_ID}}; - assign hit_CPTRA_TRNG_PAUSER_LOCK = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_TRNG_PAUSER_LOCK[APB_ADDR_WIDTH-1:0]); - assign bus_CPTRA_TRNG_PAUSER_LOCK = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_TRNG_PAUSER_LOCK}}; + assign hit_CPTRA_TRNG_AXI_ID_LOCK = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_TRNG_AXI_ID_LOCK[AXI_ADDR_WIDTH-1:0]); + assign bus_CPTRA_TRNG_AXI_ID_LOCK = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_TRNG_AXI_ID_LOCK}}; assign hit_CPTRA_TRNG_DATA[0] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_TRNG_DATA[0][18-1:0]); assign bus_CPTRA_TRNG_DATA[0] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_TRNG_DATA[0]}}; @@ -1013,25 +1040,25 @@ interface soc_ifc_cov_if assign hit_CPTRA_TRNG_DATA[11] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_TRNG_DATA[11][18-1:0]); assign bus_CPTRA_TRNG_DATA[11] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_TRNG_DATA[11]}}; - assign hit_CPTRA_TRNG_CTRL = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_TRNG_CTRL[APB_ADDR_WIDTH-1:0]); + assign hit_CPTRA_TRNG_CTRL = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_TRNG_CTRL[AXI_ADDR_WIDTH-1:0]); assign bus_CPTRA_TRNG_CTRL = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_TRNG_CTRL}}; - assign hit_CPTRA_TRNG_STATUS = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_TRNG_STATUS[APB_ADDR_WIDTH-1:0]); + assign hit_CPTRA_TRNG_STATUS = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_TRNG_STATUS[AXI_ADDR_WIDTH-1:0]); assign bus_CPTRA_TRNG_STATUS = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_TRNG_STATUS}}; - assign hit_CPTRA_FUSE_WR_DONE = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_FUSE_WR_DONE[APB_ADDR_WIDTH-1:0]); + assign hit_CPTRA_FUSE_WR_DONE = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_FUSE_WR_DONE[AXI_ADDR_WIDTH-1:0]); assign bus_CPTRA_FUSE_WR_DONE = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_FUSE_WR_DONE}}; - assign hit_CPTRA_TIMER_CONFIG = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_TIMER_CONFIG[APB_ADDR_WIDTH-1:0]); + assign hit_CPTRA_TIMER_CONFIG = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_TIMER_CONFIG[AXI_ADDR_WIDTH-1:0]); assign bus_CPTRA_TIMER_CONFIG = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_TIMER_CONFIG}}; - assign hit_CPTRA_BOOTFSM_GO = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_BOOTFSM_GO[APB_ADDR_WIDTH-1:0]); + assign hit_CPTRA_BOOTFSM_GO = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_BOOTFSM_GO[AXI_ADDR_WIDTH-1:0]); assign bus_CPTRA_BOOTFSM_GO = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_BOOTFSM_GO}}; - assign hit_CPTRA_DBG_MANUF_SERVICE_REG = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_DBG_MANUF_SERVICE_REG[APB_ADDR_WIDTH-1:0]); + assign hit_CPTRA_DBG_MANUF_SERVICE_REG = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_DBG_MANUF_SERVICE_REG[AXI_ADDR_WIDTH-1:0]); assign bus_CPTRA_DBG_MANUF_SERVICE_REG = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_DBG_MANUF_SERVICE_REG}}; - assign hit_CPTRA_CLK_GATING_EN = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_CLK_GATING_EN[APB_ADDR_WIDTH-1:0]); + assign hit_CPTRA_CLK_GATING_EN = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_CLK_GATING_EN[AXI_ADDR_WIDTH-1:0]); assign bus_CPTRA_CLK_GATING_EN = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_CLK_GATING_EN}}; assign hit_CPTRA_GENERIC_INPUT_WIRES[0] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_GENERIC_INPUT_WIRES[0][18-1:0]); @@ -1046,7 +1073,7 @@ interface soc_ifc_cov_if assign hit_CPTRA_GENERIC_OUTPUT_WIRES[1] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_GENERIC_OUTPUT_WIRES[1][18-1:0]); assign bus_CPTRA_GENERIC_OUTPUT_WIRES[1] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_GENERIC_OUTPUT_WIRES[1]}}; - // assign hit_CPTRA_HW_REV_ID = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_HW_REV_ID[APB_ADDR_WIDTH-1:0]); + // assign hit_CPTRA_HW_REV_ID = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_HW_REV_ID[AXI_ADDR_WIDTH-1:0]); // assign bus_CPTRA_HW_REV_ID = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_HW_REV_ID}}; assign hit_CPTRA_FW_REV_ID[0] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_FW_REV_ID[0][18-1:0]); @@ -1055,13 +1082,13 @@ interface soc_ifc_cov_if assign hit_CPTRA_FW_REV_ID[1] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_FW_REV_ID[1][18-1:0]); assign bus_CPTRA_FW_REV_ID[1] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_FW_REV_ID[1]}}; - // assign hit_CPTRA_HW_CONFIG = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_HW_CONFIG[APB_ADDR_WIDTH-1:0]); + // assign hit_CPTRA_HW_CONFIG = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_HW_CONFIG[AXI_ADDR_WIDTH-1:0]); // assign bus_CPTRA_HW_CONFIG = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_HW_CONFIG}}; - assign hit_CPTRA_WDT_TIMER1_EN = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_WDT_TIMER1_EN[APB_ADDR_WIDTH-1:0]); + assign hit_CPTRA_WDT_TIMER1_EN = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_WDT_TIMER1_EN[AXI_ADDR_WIDTH-1:0]); assign bus_CPTRA_WDT_TIMER1_EN = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_WDT_TIMER1_EN}}; - assign hit_CPTRA_WDT_TIMER1_CTRL = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_WDT_TIMER1_CTRL[APB_ADDR_WIDTH-1:0]); + assign hit_CPTRA_WDT_TIMER1_CTRL = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_WDT_TIMER1_CTRL[AXI_ADDR_WIDTH-1:0]); assign bus_CPTRA_WDT_TIMER1_CTRL = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_WDT_TIMER1_CTRL}}; assign hit_CPTRA_WDT_TIMER1_TIMEOUT_PERIOD[0] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_WDT_TIMER1_TIMEOUT_PERIOD[0][18-1:0]); @@ -1070,10 +1097,10 @@ interface soc_ifc_cov_if assign hit_CPTRA_WDT_TIMER1_TIMEOUT_PERIOD[1] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_WDT_TIMER1_TIMEOUT_PERIOD[1][18-1:0]); assign bus_CPTRA_WDT_TIMER1_TIMEOUT_PERIOD[1] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_WDT_TIMER1_TIMEOUT_PERIOD[1]}}; - assign hit_CPTRA_WDT_TIMER2_EN = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_WDT_TIMER2_EN[APB_ADDR_WIDTH-1:0]); + assign hit_CPTRA_WDT_TIMER2_EN = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_WDT_TIMER2_EN[AXI_ADDR_WIDTH-1:0]); assign bus_CPTRA_WDT_TIMER2_EN = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_WDT_TIMER2_EN}}; - assign hit_CPTRA_WDT_TIMER2_CTRL = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_WDT_TIMER2_CTRL[APB_ADDR_WIDTH-1:0]); + assign hit_CPTRA_WDT_TIMER2_CTRL = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_WDT_TIMER2_CTRL[AXI_ADDR_WIDTH-1:0]); assign bus_CPTRA_WDT_TIMER2_CTRL = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_WDT_TIMER2_CTRL}}; assign hit_CPTRA_WDT_TIMER2_TIMEOUT_PERIOD[0] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_WDT_TIMER2_TIMEOUT_PERIOD[0][18-1:0]); @@ -1082,14 +1109,14 @@ interface soc_ifc_cov_if assign hit_CPTRA_WDT_TIMER2_TIMEOUT_PERIOD[1] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_WDT_TIMER2_TIMEOUT_PERIOD[1][18-1:0]); assign bus_CPTRA_WDT_TIMER2_TIMEOUT_PERIOD[1] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_WDT_TIMER2_TIMEOUT_PERIOD[1]}}; - assign hit_CPTRA_WDT_STATUS = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_WDT_STATUS[APB_ADDR_WIDTH-1:0]); + assign hit_CPTRA_WDT_STATUS = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_WDT_STATUS[AXI_ADDR_WIDTH-1:0]); assign bus_CPTRA_WDT_STATUS = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_WDT_STATUS}}; - assign hit_CPTRA_FUSE_VALID_PAUSER = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_FUSE_VALID_PAUSER[APB_ADDR_WIDTH-1:0]); - assign bus_CPTRA_FUSE_VALID_PAUSER = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_FUSE_VALID_PAUSER}}; + assign hit_CPTRA_FUSE_VALID_AXI_ID = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_FUSE_VALID_AXI_ID[AXI_ADDR_WIDTH-1:0]); + assign bus_CPTRA_FUSE_VALID_AXI_ID = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_FUSE_VALID_AXI_ID}}; - assign hit_CPTRA_FUSE_PAUSER_LOCK = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_FUSE_PAUSER_LOCK[APB_ADDR_WIDTH-1:0]); - assign bus_CPTRA_FUSE_PAUSER_LOCK = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_FUSE_PAUSER_LOCK}}; + assign hit_CPTRA_FUSE_AXI_ID_LOCK = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_FUSE_AXI_ID_LOCK[AXI_ADDR_WIDTH-1:0]); + assign bus_CPTRA_FUSE_AXI_ID_LOCK = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_FUSE_AXI_ID_LOCK}}; assign hit_CPTRA_WDT_CFG[0] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_WDT_CFG[0][18-1:0]); assign bus_CPTRA_WDT_CFG[0] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_WDT_CFG[0]}}; @@ -1097,10 +1124,10 @@ interface soc_ifc_cov_if assign hit_CPTRA_WDT_CFG[1] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_WDT_CFG[1][18-1:0]); assign bus_CPTRA_WDT_CFG[1] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_WDT_CFG[1]}}; - assign hit_CPTRA_iTRNG_ENTROPY_CONFIG_0 = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_iTRNG_ENTROPY_CONFIG_0[APB_ADDR_WIDTH-1:0]); + assign hit_CPTRA_iTRNG_ENTROPY_CONFIG_0 = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_iTRNG_ENTROPY_CONFIG_0[AXI_ADDR_WIDTH-1:0]); assign bus_CPTRA_iTRNG_ENTROPY_CONFIG_0 = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_iTRNG_ENTROPY_CONFIG_0}}; - assign hit_CPTRA_iTRNG_ENTROPY_CONFIG_1 = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_iTRNG_ENTROPY_CONFIG_1[APB_ADDR_WIDTH-1:0]); + assign hit_CPTRA_iTRNG_ENTROPY_CONFIG_1 = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_iTRNG_ENTROPY_CONFIG_1[AXI_ADDR_WIDTH-1:0]); assign bus_CPTRA_iTRNG_ENTROPY_CONFIG_1 = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_CPTRA_iTRNG_ENTROPY_CONFIG_1}}; assign hit_CPTRA_RSVD_REG[0] = (soc_ifc_reg_req_data.addr == full_addr_CPTRA_RSVD_REG[0][18-1:0]); @@ -1205,7 +1232,7 @@ interface soc_ifc_cov_if assign hit_fuse_key_manifest_pk_hash[11] = (soc_ifc_reg_req_data.addr == full_addr_fuse_key_manifest_pk_hash[11][18-1:0]); assign bus_fuse_key_manifest_pk_hash[11] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_fuse_key_manifest_pk_hash[11]}}; - assign hit_fuse_key_manifest_pk_hash_mask = (soc_ifc_reg_req_data.addr == full_addr_fuse_key_manifest_pk_hash_mask[APB_ADDR_WIDTH-1:0]); + assign hit_fuse_key_manifest_pk_hash_mask = (soc_ifc_reg_req_data.addr == full_addr_fuse_key_manifest_pk_hash_mask[AXI_ADDR_WIDTH-1:0]); assign bus_fuse_key_manifest_pk_hash_mask = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_fuse_key_manifest_pk_hash_mask}}; assign hit_fuse_owner_pk_hash[0] = (soc_ifc_reg_req_data.addr == full_addr_fuse_owner_pk_hash[0][18-1:0]); @@ -1244,7 +1271,7 @@ interface soc_ifc_cov_if assign hit_fuse_owner_pk_hash[11] = (soc_ifc_reg_req_data.addr == full_addr_fuse_owner_pk_hash[11][18-1:0]); assign bus_fuse_owner_pk_hash[11] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_fuse_owner_pk_hash[11]}}; - assign hit_fuse_fmc_key_manifest_svn = (soc_ifc_reg_req_data.addr == full_addr_fuse_fmc_key_manifest_svn[APB_ADDR_WIDTH-1:0]); + assign hit_fuse_fmc_key_manifest_svn = (soc_ifc_reg_req_data.addr == full_addr_fuse_fmc_key_manifest_svn[AXI_ADDR_WIDTH-1:0]); assign bus_fuse_fmc_key_manifest_svn = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_fuse_fmc_key_manifest_svn}}; assign hit_fuse_runtime_svn[0] = (soc_ifc_reg_req_data.addr == full_addr_fuse_runtime_svn[0][18-1:0]); @@ -1259,7 +1286,7 @@ interface soc_ifc_cov_if assign hit_fuse_runtime_svn[3] = (soc_ifc_reg_req_data.addr == full_addr_fuse_runtime_svn[3][18-1:0]); assign bus_fuse_runtime_svn[3] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_fuse_runtime_svn[3]}}; - assign hit_fuse_anti_rollback_disable = (soc_ifc_reg_req_data.addr == full_addr_fuse_anti_rollback_disable[APB_ADDR_WIDTH-1:0]); + assign hit_fuse_anti_rollback_disable = (soc_ifc_reg_req_data.addr == full_addr_fuse_anti_rollback_disable[AXI_ADDR_WIDTH-1:0]); assign bus_fuse_anti_rollback_disable = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_fuse_anti_rollback_disable}}; assign hit_fuse_idevid_cert_attr[0] = (soc_ifc_reg_req_data.addr == full_addr_fuse_idevid_cert_attr[0][18-1:0]); @@ -1346,16 +1373,16 @@ interface soc_ifc_cov_if assign hit_fuse_idevid_manuf_hsm_id[3] = (soc_ifc_reg_req_data.addr == full_addr_fuse_idevid_manuf_hsm_id[3][18-1:0]); assign bus_fuse_idevid_manuf_hsm_id[3] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_fuse_idevid_manuf_hsm_id[3]}}; - assign hit_fuse_life_cycle = (soc_ifc_reg_req_data.addr == full_addr_fuse_life_cycle[APB_ADDR_WIDTH-1:0]); + assign hit_fuse_life_cycle = (soc_ifc_reg_req_data.addr == full_addr_fuse_life_cycle[AXI_ADDR_WIDTH-1:0]); assign bus_fuse_life_cycle = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_fuse_life_cycle}}; - assign hit_fuse_lms_verify = (soc_ifc_reg_req_data.addr == full_addr_fuse_lms_verify[APB_ADDR_WIDTH-1:0]); + assign hit_fuse_lms_verify = (soc_ifc_reg_req_data.addr == full_addr_fuse_lms_verify[AXI_ADDR_WIDTH-1:0]); assign bus_fuse_lms_verify = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_fuse_lms_verify}}; - assign hit_fuse_lms_revocation = (soc_ifc_reg_req_data.addr == full_addr_fuse_lms_revocation[APB_ADDR_WIDTH-1:0]); + assign hit_fuse_lms_revocation = (soc_ifc_reg_req_data.addr == full_addr_fuse_lms_revocation[AXI_ADDR_WIDTH-1:0]); assign bus_fuse_lms_revocation = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_fuse_lms_revocation}}; - assign hit_fuse_soc_stepping_id = (soc_ifc_reg_req_data.addr == full_addr_fuse_soc_stepping_id[APB_ADDR_WIDTH-1:0]); + assign hit_fuse_soc_stepping_id = (soc_ifc_reg_req_data.addr == full_addr_fuse_soc_stepping_id[AXI_ADDR_WIDTH-1:0]); assign bus_fuse_soc_stepping_id = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_fuse_soc_stepping_id}}; assign hit_internal_obf_key[0] = (soc_ifc_reg_req_data.addr == full_addr_internal_obf_key[0][18-1:0]); @@ -1382,153 +1409,153 @@ interface soc_ifc_cov_if assign hit_internal_obf_key[7] = (soc_ifc_reg_req_data.addr == full_addr_internal_obf_key[7][18-1:0]); assign bus_internal_obf_key[7] = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_internal_obf_key[7]}}; - assign hit_internal_iccm_lock = (soc_ifc_reg_req_data.addr == full_addr_internal_iccm_lock[APB_ADDR_WIDTH-1:0]); + assign hit_internal_iccm_lock = (soc_ifc_reg_req_data.addr == full_addr_internal_iccm_lock[AXI_ADDR_WIDTH-1:0]); assign bus_internal_iccm_lock = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_internal_iccm_lock}}; - assign hit_internal_fw_update_reset = (soc_ifc_reg_req_data.addr == full_addr_internal_fw_update_reset[APB_ADDR_WIDTH-1:0]); + assign hit_internal_fw_update_reset = (soc_ifc_reg_req_data.addr == full_addr_internal_fw_update_reset[AXI_ADDR_WIDTH-1:0]); assign bus_internal_fw_update_reset = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_internal_fw_update_reset}}; - assign hit_internal_fw_update_reset_wait_cycles = (soc_ifc_reg_req_data.addr == full_addr_internal_fw_update_reset_wait_cycles[APB_ADDR_WIDTH-1:0]); + assign hit_internal_fw_update_reset_wait_cycles = (soc_ifc_reg_req_data.addr == full_addr_internal_fw_update_reset_wait_cycles[AXI_ADDR_WIDTH-1:0]); assign bus_internal_fw_update_reset_wait_cycles = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_internal_fw_update_reset_wait_cycles}}; - assign hit_internal_nmi_vector = (soc_ifc_reg_req_data.addr == full_addr_internal_nmi_vector[APB_ADDR_WIDTH-1:0]); + assign hit_internal_nmi_vector = (soc_ifc_reg_req_data.addr == full_addr_internal_nmi_vector[AXI_ADDR_WIDTH-1:0]); assign bus_internal_nmi_vector = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_internal_nmi_vector}}; - assign hit_internal_hw_error_fatal_mask = (soc_ifc_reg_req_data.addr == full_addr_internal_hw_error_fatal_mask[APB_ADDR_WIDTH-1:0]); + assign hit_internal_hw_error_fatal_mask = (soc_ifc_reg_req_data.addr == full_addr_internal_hw_error_fatal_mask[AXI_ADDR_WIDTH-1:0]); assign bus_internal_hw_error_fatal_mask = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_internal_hw_error_fatal_mask}}; - assign hit_internal_hw_error_non_fatal_mask = (soc_ifc_reg_req_data.addr == full_addr_internal_hw_error_non_fatal_mask[APB_ADDR_WIDTH-1:0]); + assign hit_internal_hw_error_non_fatal_mask = (soc_ifc_reg_req_data.addr == full_addr_internal_hw_error_non_fatal_mask[AXI_ADDR_WIDTH-1:0]); assign bus_internal_hw_error_non_fatal_mask = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_internal_hw_error_non_fatal_mask}}; - assign hit_internal_fw_error_fatal_mask = (soc_ifc_reg_req_data.addr == full_addr_internal_fw_error_fatal_mask[APB_ADDR_WIDTH-1:0]); + assign hit_internal_fw_error_fatal_mask = (soc_ifc_reg_req_data.addr == full_addr_internal_fw_error_fatal_mask[AXI_ADDR_WIDTH-1:0]); assign bus_internal_fw_error_fatal_mask = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_internal_fw_error_fatal_mask}}; - assign hit_internal_fw_error_non_fatal_mask = (soc_ifc_reg_req_data.addr == full_addr_internal_fw_error_non_fatal_mask[APB_ADDR_WIDTH-1:0]); + assign hit_internal_fw_error_non_fatal_mask = (soc_ifc_reg_req_data.addr == full_addr_internal_fw_error_non_fatal_mask[AXI_ADDR_WIDTH-1:0]); assign bus_internal_fw_error_non_fatal_mask = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_internal_fw_error_non_fatal_mask}}; - assign hit_internal_rv_mtime_l = (soc_ifc_reg_req_data.addr == full_addr_internal_rv_mtime_l[APB_ADDR_WIDTH-1:0]); + assign hit_internal_rv_mtime_l = (soc_ifc_reg_req_data.addr == full_addr_internal_rv_mtime_l[AXI_ADDR_WIDTH-1:0]); assign bus_internal_rv_mtime_l = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_internal_rv_mtime_l}}; - assign hit_internal_rv_mtime_h = (soc_ifc_reg_req_data.addr == full_addr_internal_rv_mtime_h[APB_ADDR_WIDTH-1:0]); + assign hit_internal_rv_mtime_h = (soc_ifc_reg_req_data.addr == full_addr_internal_rv_mtime_h[AXI_ADDR_WIDTH-1:0]); assign bus_internal_rv_mtime_h = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_internal_rv_mtime_h}}; - assign hit_internal_rv_mtimecmp_l = (soc_ifc_reg_req_data.addr == full_addr_internal_rv_mtimecmp_l[APB_ADDR_WIDTH-1:0]); + assign hit_internal_rv_mtimecmp_l = (soc_ifc_reg_req_data.addr == full_addr_internal_rv_mtimecmp_l[AXI_ADDR_WIDTH-1:0]); assign bus_internal_rv_mtimecmp_l = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_internal_rv_mtimecmp_l}}; - assign hit_internal_rv_mtimecmp_h = (soc_ifc_reg_req_data.addr == full_addr_internal_rv_mtimecmp_h[APB_ADDR_WIDTH-1:0]); + assign hit_internal_rv_mtimecmp_h = (soc_ifc_reg_req_data.addr == full_addr_internal_rv_mtimecmp_h[AXI_ADDR_WIDTH-1:0]); assign bus_internal_rv_mtimecmp_h = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_internal_rv_mtimecmp_h}}; - assign hit_intr_brf_global_intr_en_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_global_intr_en_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_global_intr_en_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_global_intr_en_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_global_intr_en_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_global_intr_en_r}}; - assign hit_intr_brf_error_intr_en_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_intr_en_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_error_intr_en_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_intr_en_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_error_intr_en_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_error_intr_en_r}}; - assign hit_intr_brf_notif_intr_en_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_notif_intr_en_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_notif_intr_en_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_notif_intr_en_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_notif_intr_en_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_notif_intr_en_r}}; - assign hit_intr_brf_error_global_intr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_global_intr_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_error_global_intr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_global_intr_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_error_global_intr_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_error_global_intr_r}}; - assign hit_intr_brf_notif_global_intr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_notif_global_intr_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_notif_global_intr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_notif_global_intr_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_notif_global_intr_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_notif_global_intr_r}}; - assign hit_intr_brf_error_internal_intr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_internal_intr_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_error_internal_intr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_internal_intr_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_error_internal_intr_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_error_internal_intr_r}}; - assign hit_intr_brf_notif_internal_intr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_notif_internal_intr_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_notif_internal_intr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_notif_internal_intr_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_notif_internal_intr_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_notif_internal_intr_r}}; - assign hit_intr_brf_error_intr_trig_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_intr_trig_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_error_intr_trig_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_intr_trig_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_error_intr_trig_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_error_intr_trig_r}}; - assign hit_intr_brf_notif_intr_trig_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_notif_intr_trig_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_notif_intr_trig_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_notif_intr_trig_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_notif_intr_trig_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_notif_intr_trig_r}}; - assign hit_intr_brf_error_internal_intr_count_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_internal_intr_count_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_error_internal_intr_count_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_internal_intr_count_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_error_internal_intr_count_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_error_internal_intr_count_r}}; - assign hit_intr_brf_error_inv_dev_intr_count_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_inv_dev_intr_count_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_error_inv_dev_intr_count_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_inv_dev_intr_count_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_error_inv_dev_intr_count_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_error_inv_dev_intr_count_r}}; - assign hit_intr_brf_error_cmd_fail_intr_count_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_cmd_fail_intr_count_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_error_cmd_fail_intr_count_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_cmd_fail_intr_count_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_error_cmd_fail_intr_count_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_error_cmd_fail_intr_count_r}}; - assign hit_intr_brf_error_bad_fuse_intr_count_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_bad_fuse_intr_count_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_error_bad_fuse_intr_count_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_bad_fuse_intr_count_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_error_bad_fuse_intr_count_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_error_bad_fuse_intr_count_r}}; - assign hit_intr_brf_error_iccm_blocked_intr_count_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_iccm_blocked_intr_count_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_error_iccm_blocked_intr_count_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_iccm_blocked_intr_count_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_error_iccm_blocked_intr_count_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_error_iccm_blocked_intr_count_r}}; - assign hit_intr_brf_error_mbox_ecc_unc_intr_count_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_mbox_ecc_unc_intr_count_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_error_mbox_ecc_unc_intr_count_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_mbox_ecc_unc_intr_count_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_error_mbox_ecc_unc_intr_count_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_error_mbox_ecc_unc_intr_count_r}}; - assign hit_intr_brf_error_wdt_timer1_timeout_intr_count_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_wdt_timer1_timeout_intr_count_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_error_wdt_timer1_timeout_intr_count_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_wdt_timer1_timeout_intr_count_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_error_wdt_timer1_timeout_intr_count_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_error_wdt_timer1_timeout_intr_count_r}}; - assign hit_intr_brf_error_wdt_timer2_timeout_intr_count_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_wdt_timer2_timeout_intr_count_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_error_wdt_timer2_timeout_intr_count_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_wdt_timer2_timeout_intr_count_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_error_wdt_timer2_timeout_intr_count_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_error_wdt_timer2_timeout_intr_count_r}}; - assign hit_intr_brf_notif_cmd_avail_intr_count_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_notif_cmd_avail_intr_count_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_notif_cmd_avail_intr_count_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_notif_cmd_avail_intr_count_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_notif_cmd_avail_intr_count_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_notif_cmd_avail_intr_count_r}}; - assign hit_intr_brf_notif_mbox_ecc_cor_intr_count_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_notif_mbox_ecc_cor_intr_count_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_notif_mbox_ecc_cor_intr_count_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_notif_mbox_ecc_cor_intr_count_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_notif_mbox_ecc_cor_intr_count_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_notif_mbox_ecc_cor_intr_count_r}}; - assign hit_intr_brf_notif_debug_locked_intr_count_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_notif_debug_locked_intr_count_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_notif_debug_locked_intr_count_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_notif_debug_locked_intr_count_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_notif_debug_locked_intr_count_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_notif_debug_locked_intr_count_r}}; - assign hit_intr_brf_notif_scan_mode_intr_count_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_notif_scan_mode_intr_count_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_notif_scan_mode_intr_count_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_notif_scan_mode_intr_count_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_notif_scan_mode_intr_count_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_notif_scan_mode_intr_count_r}}; - assign hit_intr_brf_notif_soc_req_lock_intr_count_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_notif_soc_req_lock_intr_count_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_notif_soc_req_lock_intr_count_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_notif_soc_req_lock_intr_count_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_notif_soc_req_lock_intr_count_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_notif_soc_req_lock_intr_count_r}}; - assign hit_intr_brf_notif_gen_in_toggle_intr_count_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_notif_gen_in_toggle_intr_count_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_notif_gen_in_toggle_intr_count_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_notif_gen_in_toggle_intr_count_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_notif_gen_in_toggle_intr_count_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_notif_gen_in_toggle_intr_count_r}}; - assign hit_intr_brf_error_internal_intr_count_incr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_internal_intr_count_incr_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_error_internal_intr_count_incr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_internal_intr_count_incr_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_error_internal_intr_count_incr_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_error_internal_intr_count_incr_r}}; - assign hit_intr_brf_error_inv_dev_intr_count_incr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_inv_dev_intr_count_incr_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_error_inv_dev_intr_count_incr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_inv_dev_intr_count_incr_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_error_inv_dev_intr_count_incr_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_error_inv_dev_intr_count_incr_r}}; - assign hit_intr_brf_error_cmd_fail_intr_count_incr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_cmd_fail_intr_count_incr_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_error_cmd_fail_intr_count_incr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_cmd_fail_intr_count_incr_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_error_cmd_fail_intr_count_incr_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_error_cmd_fail_intr_count_incr_r}}; - assign hit_intr_brf_error_bad_fuse_intr_count_incr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_bad_fuse_intr_count_incr_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_error_bad_fuse_intr_count_incr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_bad_fuse_intr_count_incr_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_error_bad_fuse_intr_count_incr_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_error_bad_fuse_intr_count_incr_r}}; - assign hit_intr_brf_error_iccm_blocked_intr_count_incr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_iccm_blocked_intr_count_incr_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_error_iccm_blocked_intr_count_incr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_iccm_blocked_intr_count_incr_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_error_iccm_blocked_intr_count_incr_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_error_iccm_blocked_intr_count_incr_r}}; - assign hit_intr_brf_error_mbox_ecc_unc_intr_count_incr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_mbox_ecc_unc_intr_count_incr_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_error_mbox_ecc_unc_intr_count_incr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_mbox_ecc_unc_intr_count_incr_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_error_mbox_ecc_unc_intr_count_incr_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_error_mbox_ecc_unc_intr_count_incr_r}}; - assign hit_intr_brf_error_wdt_timer1_timeout_intr_count_incr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_wdt_timer1_timeout_intr_count_incr_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_error_wdt_timer1_timeout_intr_count_incr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_wdt_timer1_timeout_intr_count_incr_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_error_wdt_timer1_timeout_intr_count_incr_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_error_wdt_timer1_timeout_intr_count_incr_r}}; - assign hit_intr_brf_error_wdt_timer2_timeout_intr_count_incr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_wdt_timer2_timeout_intr_count_incr_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_error_wdt_timer2_timeout_intr_count_incr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_error_wdt_timer2_timeout_intr_count_incr_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_error_wdt_timer2_timeout_intr_count_incr_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_error_wdt_timer2_timeout_intr_count_incr_r}}; - assign hit_intr_brf_notif_cmd_avail_intr_count_incr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_notif_cmd_avail_intr_count_incr_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_notif_cmd_avail_intr_count_incr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_notif_cmd_avail_intr_count_incr_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_notif_cmd_avail_intr_count_incr_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_notif_cmd_avail_intr_count_incr_r}}; - assign hit_intr_brf_notif_mbox_ecc_cor_intr_count_incr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_notif_mbox_ecc_cor_intr_count_incr_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_notif_mbox_ecc_cor_intr_count_incr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_notif_mbox_ecc_cor_intr_count_incr_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_notif_mbox_ecc_cor_intr_count_incr_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_notif_mbox_ecc_cor_intr_count_incr_r}}; - assign hit_intr_brf_notif_debug_locked_intr_count_incr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_notif_debug_locked_intr_count_incr_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_notif_debug_locked_intr_count_incr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_notif_debug_locked_intr_count_incr_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_notif_debug_locked_intr_count_incr_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_notif_debug_locked_intr_count_incr_r}}; - assign hit_intr_brf_notif_soc_req_lock_intr_count_incr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_notif_soc_req_lock_intr_count_incr_r[APB_ADDR_WIDTH-1:0]); + assign hit_intr_brf_notif_soc_req_lock_intr_count_incr_r = (soc_ifc_reg_req_data.addr == full_addr_intr_brf_notif_soc_req_lock_intr_count_incr_r[AXI_ADDR_WIDTH-1:0]); assign bus_intr_brf_notif_soc_req_lock_intr_count_incr_r = {uc_rd, uc_wr, soc_rd, soc_wr} & {4{hit_intr_brf_notif_soc_req_lock_intr_count_incr_r}}; // ----------------------- COVERGROUP CPTRA_HW_ERROR_FATAL ----------------------- covergroup soc_ifc_CPTRA_HW_ERROR_FATAL_cg (ref logic [3:0] bus_event) @(posedge clk); CPTRA_HW_ERROR_FATAL_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_HW_ERROR_FATAL; bus_CPTRA_HW_ERROR_FATAL_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -1536,8 +1563,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_HW_ERROR_NON_FATAL_cg (ref logic [3:0] bus_event) @(posedge clk); CPTRA_HW_ERROR_NON_FATAL_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_HW_ERROR_NON_FATAL; bus_CPTRA_HW_ERROR_NON_FATAL_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -1545,8 +1572,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_FW_ERROR_FATAL_cg (ref logic [3:0] bus_event) @(posedge clk); CPTRA_FW_ERROR_FATAL_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_FW_ERROR_FATAL; bus_CPTRA_FW_ERROR_FATAL_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -1554,8 +1581,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_FW_ERROR_NON_FATAL_cg (ref logic [3:0] bus_event) @(posedge clk); CPTRA_FW_ERROR_NON_FATAL_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_FW_ERROR_NON_FATAL; bus_CPTRA_FW_ERROR_NON_FATAL_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -1563,8 +1590,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_HW_ERROR_ENC_cg (ref logic [3:0] bus_event) @(posedge clk); CPTRA_HW_ERROR_ENC_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_HW_ERROR_ENC; bus_CPTRA_HW_ERROR_ENC_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -1572,8 +1599,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_FW_ERROR_ENC_cg (ref logic [3:0] bus_event) @(posedge clk); CPTRA_FW_ERROR_ENC_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_FW_ERROR_ENC; bus_CPTRA_FW_ERROR_ENC_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -1581,43 +1608,43 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_FW_EXTENDED_ERROR_INFO_cg (ref logic [3:0] bus_event[0:7]) @(posedge clk); CPTRA_FW_EXTENDED_ERROR_INFO0_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_FW_EXTENDED_ERROR_INFO[0]; bus_CPTRA_FW_EXTENDED_ERROR_INFO0_cp : coverpoint bus_event[0] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } CPTRA_FW_EXTENDED_ERROR_INFO1_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_FW_EXTENDED_ERROR_INFO[1]; bus_CPTRA_FW_EXTENDED_ERROR_INFO1_cp : coverpoint bus_event[1] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } CPTRA_FW_EXTENDED_ERROR_INFO2_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_FW_EXTENDED_ERROR_INFO[2]; bus_CPTRA_FW_EXTENDED_ERROR_INFO2_cp : coverpoint bus_event[2] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } CPTRA_FW_EXTENDED_ERROR_INFO3_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_FW_EXTENDED_ERROR_INFO[3]; bus_CPTRA_FW_EXTENDED_ERROR_INFO3_cp : coverpoint bus_event[3] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } CPTRA_FW_EXTENDED_ERROR_INFO4_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_FW_EXTENDED_ERROR_INFO[4]; bus_CPTRA_FW_EXTENDED_ERROR_INFO4_cp : coverpoint bus_event[4] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } CPTRA_FW_EXTENDED_ERROR_INFO5_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_FW_EXTENDED_ERROR_INFO[5]; bus_CPTRA_FW_EXTENDED_ERROR_INFO5_cp : coverpoint bus_event[5] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } CPTRA_FW_EXTENDED_ERROR_INFO6_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_FW_EXTENDED_ERROR_INFO[6]; bus_CPTRA_FW_EXTENDED_ERROR_INFO6_cp : coverpoint bus_event[6] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } CPTRA_FW_EXTENDED_ERROR_INFO7_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_FW_EXTENDED_ERROR_INFO[7]; bus_CPTRA_FW_EXTENDED_ERROR_INFO7_cp : coverpoint bus_event[7] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -1625,8 +1652,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_BOOT_STATUS_cg (ref logic [3:0] bus_event) @(posedge clk); CPTRA_BOOT_STATUS_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_BOOT_STATUS; bus_CPTRA_BOOT_STATUS_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -1634,8 +1661,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_FLOW_STATUS_cg (ref logic [3:0] bus_event) @(posedge clk); CPTRA_FLOW_STATUS_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_FLOW_STATUS; bus_CPTRA_FLOW_STATUS_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -1643,8 +1670,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_RESET_REASON_cg (ref logic [3:0] bus_event) @(posedge clk); CPTRA_RESET_REASON_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_RESET_REASON; bus_CPTRA_RESET_REASON_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -1652,84 +1679,84 @@ interface soc_ifc_cov_if // covergroup soc_ifc_CPTRA_SECURITY_STATE_cg (ref logic [3:0] bus_event) @(posedge clk); // CPTRA_SECURITY_STATE_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_SECURITY_STATE; // bus_CPTRA_SECURITY_STATE_cp : coverpoint bus_event { - // bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - // ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + // bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + // ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; // } // endgroup - // ----------------------- COVERGROUP CPTRA_MBOX_VALID_PAUSER [0:4] ----------------------- - covergroup soc_ifc_CPTRA_MBOX_VALID_PAUSER_cg (ref logic [3:0] bus_event[0:4]) @(posedge clk); - CPTRA_MBOX_VALID_PAUSER0_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_MBOX_VALID_PAUSER[0]; - bus_CPTRA_MBOX_VALID_PAUSER0_cp : coverpoint bus_event[0] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + // ----------------------- COVERGROUP CPTRA_MBOX_VALID_AXI_ID [0:4] ----------------------- + covergroup soc_ifc_CPTRA_MBOX_VALID_AXI_ID_cg (ref logic [3:0] bus_event[0:4]) @(posedge clk); + CPTRA_MBOX_VALID_AXI_ID0_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_MBOX_VALID_AXI_ID[0]; + bus_CPTRA_MBOX_VALID_AXI_ID0_cp : coverpoint bus_event[0] { + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } - CPTRA_MBOX_VALID_PAUSER1_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_MBOX_VALID_PAUSER[1]; - bus_CPTRA_MBOX_VALID_PAUSER1_cp : coverpoint bus_event[1] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + CPTRA_MBOX_VALID_AXI_ID1_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_MBOX_VALID_AXI_ID[1]; + bus_CPTRA_MBOX_VALID_AXI_ID1_cp : coverpoint bus_event[1] { + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } - CPTRA_MBOX_VALID_PAUSER2_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_MBOX_VALID_PAUSER[2]; - bus_CPTRA_MBOX_VALID_PAUSER2_cp : coverpoint bus_event[2] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + CPTRA_MBOX_VALID_AXI_ID2_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_MBOX_VALID_AXI_ID[2]; + bus_CPTRA_MBOX_VALID_AXI_ID2_cp : coverpoint bus_event[2] { + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } - CPTRA_MBOX_VALID_PAUSER3_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_MBOX_VALID_PAUSER[3]; - bus_CPTRA_MBOX_VALID_PAUSER3_cp : coverpoint bus_event[3] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + CPTRA_MBOX_VALID_AXI_ID3_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_MBOX_VALID_AXI_ID[3]; + bus_CPTRA_MBOX_VALID_AXI_ID3_cp : coverpoint bus_event[3] { + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } - CPTRA_MBOX_VALID_PAUSER4_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_MBOX_VALID_PAUSER[4]; - bus_CPTRA_MBOX_VALID_PAUSER4_cp : coverpoint bus_event[4] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + CPTRA_MBOX_VALID_AXI_ID4_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_MBOX_VALID_AXI_ID[4]; + bus_CPTRA_MBOX_VALID_AXI_ID4_cp : coverpoint bus_event[4] { + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup - // ----------------------- COVERGROUP CPTRA_MBOX_PAUSER_LOCK [0:4] ----------------------- - covergroup soc_ifc_CPTRA_MBOX_PAUSER_LOCK_cg (ref logic [3:0] bus_event[0:4]) @(posedge clk); - CPTRA_MBOX_PAUSER_LOCK0_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_MBOX_PAUSER_LOCK[0]; - bus_CPTRA_MBOX_PAUSER_LOCK0_cp : coverpoint bus_event[0] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + // ----------------------- COVERGROUP CPTRA_MBOX_AXI_ID_LOCK [0:4] ----------------------- + covergroup soc_ifc_CPTRA_MBOX_AXI_ID_LOCK_cg (ref logic [3:0] bus_event[0:4]) @(posedge clk); + CPTRA_MBOX_AXI_ID_LOCK0_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_MBOX_AXI_ID_LOCK[0]; + bus_CPTRA_MBOX_AXI_ID_LOCK0_cp : coverpoint bus_event[0] { + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } - CPTRA_MBOX_PAUSER_LOCK1_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_MBOX_PAUSER_LOCK[1]; - bus_CPTRA_MBOX_PAUSER_LOCK1_cp : coverpoint bus_event[1] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + CPTRA_MBOX_AXI_ID_LOCK1_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_MBOX_AXI_ID_LOCK[1]; + bus_CPTRA_MBOX_AXI_ID_LOCK1_cp : coverpoint bus_event[1] { + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } - CPTRA_MBOX_PAUSER_LOCK2_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_MBOX_PAUSER_LOCK[2]; - bus_CPTRA_MBOX_PAUSER_LOCK2_cp : coverpoint bus_event[2] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + CPTRA_MBOX_AXI_ID_LOCK2_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_MBOX_AXI_ID_LOCK[2]; + bus_CPTRA_MBOX_AXI_ID_LOCK2_cp : coverpoint bus_event[2] { + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } - CPTRA_MBOX_PAUSER_LOCK3_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_MBOX_PAUSER_LOCK[3]; - bus_CPTRA_MBOX_PAUSER_LOCK3_cp : coverpoint bus_event[3] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + CPTRA_MBOX_AXI_ID_LOCK3_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_MBOX_AXI_ID_LOCK[3]; + bus_CPTRA_MBOX_AXI_ID_LOCK3_cp : coverpoint bus_event[3] { + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } - CPTRA_MBOX_PAUSER_LOCK4_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_MBOX_PAUSER_LOCK[4]; - bus_CPTRA_MBOX_PAUSER_LOCK4_cp : coverpoint bus_event[4] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + CPTRA_MBOX_AXI_ID_LOCK4_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_MBOX_AXI_ID_LOCK[4]; + bus_CPTRA_MBOX_AXI_ID_LOCK4_cp : coverpoint bus_event[4] { + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup - // ----------------------- COVERGROUP CPTRA_TRNG_VALID_PAUSER ----------------------- - covergroup soc_ifc_CPTRA_TRNG_VALID_PAUSER_cg (ref logic [3:0] bus_event) @(posedge clk); - CPTRA_TRNG_VALID_PAUSER_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_TRNG_VALID_PAUSER; - bus_CPTRA_TRNG_VALID_PAUSER_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + // ----------------------- COVERGROUP CPTRA_TRNG_VALID_AXI_ID ----------------------- + covergroup soc_ifc_CPTRA_TRNG_VALID_AXI_ID_cg (ref logic [3:0] bus_event) @(posedge clk); + CPTRA_TRNG_VALID_AXI_ID_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_TRNG_VALID_AXI_ID; + bus_CPTRA_TRNG_VALID_AXI_ID_cp : coverpoint bus_event { + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup - // ----------------------- COVERGROUP CPTRA_TRNG_PAUSER_LOCK ----------------------- - covergroup soc_ifc_CPTRA_TRNG_PAUSER_LOCK_cg (ref logic [3:0] bus_event) @(posedge clk); - CPTRA_TRNG_PAUSER_LOCK_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_TRNG_PAUSER_LOCK; - bus_CPTRA_TRNG_PAUSER_LOCK_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + // ----------------------- COVERGROUP CPTRA_TRNG_AXI_ID_LOCK ----------------------- + covergroup soc_ifc_CPTRA_TRNG_AXI_ID_LOCK_cg (ref logic [3:0] bus_event) @(posedge clk); + CPTRA_TRNG_AXI_ID_LOCK_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_TRNG_AXI_ID_LOCK; + bus_CPTRA_TRNG_AXI_ID_LOCK_cp : coverpoint bus_event { + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -1737,63 +1764,63 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_TRNG_DATA_cg (ref logic [3:0] bus_event[0:11]) @(posedge clk); CPTRA_TRNG_DATA0_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_TRNG_DATA[0]; bus_CPTRA_TRNG_DATA0_cp : coverpoint bus_event[0] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } CPTRA_TRNG_DATA1_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_TRNG_DATA[1]; bus_CPTRA_TRNG_DATA1_cp : coverpoint bus_event[1] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } CPTRA_TRNG_DATA2_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_TRNG_DATA[2]; bus_CPTRA_TRNG_DATA2_cp : coverpoint bus_event[2] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } CPTRA_TRNG_DATA3_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_TRNG_DATA[3]; bus_CPTRA_TRNG_DATA3_cp : coverpoint bus_event[3] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } CPTRA_TRNG_DATA4_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_TRNG_DATA[4]; bus_CPTRA_TRNG_DATA4_cp : coverpoint bus_event[4] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } CPTRA_TRNG_DATA5_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_TRNG_DATA[5]; bus_CPTRA_TRNG_DATA5_cp : coverpoint bus_event[5] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } CPTRA_TRNG_DATA6_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_TRNG_DATA[6]; bus_CPTRA_TRNG_DATA6_cp : coverpoint bus_event[6] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } CPTRA_TRNG_DATA7_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_TRNG_DATA[7]; bus_CPTRA_TRNG_DATA7_cp : coverpoint bus_event[7] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } CPTRA_TRNG_DATA8_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_TRNG_DATA[8]; bus_CPTRA_TRNG_DATA8_cp : coverpoint bus_event[8] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } CPTRA_TRNG_DATA9_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_TRNG_DATA[9]; bus_CPTRA_TRNG_DATA9_cp : coverpoint bus_event[9] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } CPTRA_TRNG_DATA10_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_TRNG_DATA[10]; bus_CPTRA_TRNG_DATA10_cp : coverpoint bus_event[10] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } CPTRA_TRNG_DATA11_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_TRNG_DATA[11]; bus_CPTRA_TRNG_DATA11_cp : coverpoint bus_event[11] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -1801,8 +1828,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_TRNG_CTRL_cg (ref logic [3:0] bus_event) @(posedge clk); CPTRA_TRNG_CTRL_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_TRNG_CTRL; bus_CPTRA_TRNG_CTRL_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -1810,8 +1837,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_TRNG_STATUS_cg (ref logic [3:0] bus_event) @(posedge clk); CPTRA_TRNG_STATUS_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_TRNG_STATUS; bus_CPTRA_TRNG_STATUS_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -1819,8 +1846,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_FUSE_WR_DONE_cg (ref logic [3:0] bus_event) @(posedge clk); CPTRA_FUSE_WR_DONE_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_FUSE_WR_DONE; bus_CPTRA_FUSE_WR_DONE_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -1828,8 +1855,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_TIMER_CONFIG_cg (ref logic [3:0] bus_event) @(posedge clk); CPTRA_TIMER_CONFIG_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_TIMER_CONFIG; bus_CPTRA_TIMER_CONFIG_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -1837,8 +1864,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_BOOTFSM_GO_cg (ref logic [3:0] bus_event) @(posedge clk); CPTRA_BOOTFSM_GO_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_BOOTFSM_GO; bus_CPTRA_BOOTFSM_GO_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -1846,8 +1873,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_DBG_MANUF_SERVICE_REG_cg (ref logic [3:0] bus_event) @(posedge clk); CPTRA_DBG_MANUF_SERVICE_REG_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_DBG_MANUF_SERVICE_REG; bus_CPTRA_DBG_MANUF_SERVICE_REG_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -1855,8 +1882,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_CLK_GATING_EN_cg (ref logic [3:0] bus_event) @(posedge clk); CPTRA_CLK_GATING_EN_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_CLK_GATING_EN; bus_CPTRA_CLK_GATING_EN_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -1864,13 +1891,13 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_GENERIC_INPUT_WIRES_cg (ref logic [3:0] bus_event[0:1]) @(posedge clk); CPTRA_GENERIC_INPUT_WIRES0_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_GENERIC_INPUT_WIRES[0]; bus_CPTRA_GENERIC_INPUT_WIRES0_cp : coverpoint bus_event[0] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } CPTRA_GENERIC_INPUT_WIRES1_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_GENERIC_INPUT_WIRES[1]; bus_CPTRA_GENERIC_INPUT_WIRES1_cp : coverpoint bus_event[1] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -1878,13 +1905,13 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_GENERIC_OUTPUT_WIRES_cg (ref logic [3:0] bus_event[0:1]) @(posedge clk); CPTRA_GENERIC_OUTPUT_WIRES0_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_GENERIC_OUTPUT_WIRES[0]; bus_CPTRA_GENERIC_OUTPUT_WIRES0_cp : coverpoint bus_event[0] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } CPTRA_GENERIC_OUTPUT_WIRES1_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_GENERIC_OUTPUT_WIRES[1]; bus_CPTRA_GENERIC_OUTPUT_WIRES1_cp : coverpoint bus_event[1] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -1892,8 +1919,8 @@ interface soc_ifc_cov_if // covergroup soc_ifc_CPTRA_HW_REV_ID_cg (ref logic [3:0] bus_event) @(posedge clk); // CPTRA_HW_REV_ID_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_HW_REV_ID; // bus_CPTRA_HW_REV_ID_cp : coverpoint bus_event { - // bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - // ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + // bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + // ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; // } // endgroup @@ -1901,13 +1928,13 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_FW_REV_ID_cg (ref logic [3:0] bus_event[0:1]) @(posedge clk); CPTRA_FW_REV_ID0_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_FW_REV_ID[0]; bus_CPTRA_FW_REV_ID0_cp : coverpoint bus_event[0] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } CPTRA_FW_REV_ID1_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_FW_REV_ID[1]; bus_CPTRA_FW_REV_ID1_cp : coverpoint bus_event[1] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -1915,8 +1942,8 @@ interface soc_ifc_cov_if // covergroup soc_ifc_CPTRA_HW_CONFIG_cg (ref logic [3:0] bus_event) @(posedge clk); // CPTRA_HW_CONFIG_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_HW_CONFIG; // bus_CPTRA_HW_CONFIG_cp : coverpoint bus_event { - // bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - // ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + // bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + // ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; // } // endgroup @@ -1924,8 +1951,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_WDT_TIMER1_EN_cg (ref logic [3:0] bus_event) @(posedge clk); CPTRA_WDT_TIMER1_EN_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_WDT_TIMER1_EN; bus_CPTRA_WDT_TIMER1_EN_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -1933,8 +1960,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_WDT_TIMER1_CTRL_cg (ref logic [3:0] bus_event) @(posedge clk); CPTRA_WDT_TIMER1_CTRL_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_WDT_TIMER1_CTRL; bus_CPTRA_WDT_TIMER1_CTRL_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -1942,13 +1969,13 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_WDT_TIMER1_TIMEOUT_PERIOD_cg (ref logic [3:0] bus_event[0:1]) @(posedge clk); CPTRA_WDT_TIMER1_TIMEOUT_PERIOD0_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_WDT_TIMER1_TIMEOUT_PERIOD[0]; bus_CPTRA_WDT_TIMER1_TIMEOUT_PERIOD0_cp : coverpoint bus_event[0] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } CPTRA_WDT_TIMER1_TIMEOUT_PERIOD1_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_WDT_TIMER1_TIMEOUT_PERIOD[1]; bus_CPTRA_WDT_TIMER1_TIMEOUT_PERIOD1_cp : coverpoint bus_event[1] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -1956,8 +1983,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_WDT_TIMER2_EN_cg (ref logic [3:0] bus_event) @(posedge clk); CPTRA_WDT_TIMER2_EN_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_WDT_TIMER2_EN; bus_CPTRA_WDT_TIMER2_EN_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -1965,8 +1992,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_WDT_TIMER2_CTRL_cg (ref logic [3:0] bus_event) @(posedge clk); CPTRA_WDT_TIMER2_CTRL_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_WDT_TIMER2_CTRL; bus_CPTRA_WDT_TIMER2_CTRL_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -1974,13 +2001,13 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_WDT_TIMER2_TIMEOUT_PERIOD_cg (ref logic [3:0] bus_event[0:1]) @(posedge clk); CPTRA_WDT_TIMER2_TIMEOUT_PERIOD0_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_WDT_TIMER2_TIMEOUT_PERIOD[0]; bus_CPTRA_WDT_TIMER2_TIMEOUT_PERIOD0_cp : coverpoint bus_event[0] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } CPTRA_WDT_TIMER2_TIMEOUT_PERIOD1_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_WDT_TIMER2_TIMEOUT_PERIOD[1]; bus_CPTRA_WDT_TIMER2_TIMEOUT_PERIOD1_cp : coverpoint bus_event[1] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -1988,26 +2015,26 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_WDT_STATUS_cg (ref logic [3:0] bus_event) @(posedge clk); CPTRA_WDT_STATUS_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_WDT_STATUS; bus_CPTRA_WDT_STATUS_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup - // ----------------------- COVERGROUP CPTRA_FUSE_VALID_PAUSER ----------------------- - covergroup soc_ifc_CPTRA_FUSE_VALID_PAUSER_cg (ref logic [3:0] bus_event) @(posedge clk); - CPTRA_FUSE_VALID_PAUSER_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_FUSE_VALID_PAUSER; - bus_CPTRA_FUSE_VALID_PAUSER_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + // ----------------------- COVERGROUP CPTRA_FUSE_VALID_AXI_ID ----------------------- + covergroup soc_ifc_CPTRA_FUSE_VALID_AXI_ID_cg (ref logic [3:0] bus_event) @(posedge clk); + CPTRA_FUSE_VALID_AXI_ID_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_FUSE_VALID_AXI_ID; + bus_CPTRA_FUSE_VALID_AXI_ID_cp : coverpoint bus_event { + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup - // ----------------------- COVERGROUP CPTRA_FUSE_PAUSER_LOCK ----------------------- - covergroup soc_ifc_CPTRA_FUSE_PAUSER_LOCK_cg (ref logic [3:0] bus_event) @(posedge clk); - CPTRA_FUSE_PAUSER_LOCK_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_FUSE_PAUSER_LOCK; - bus_CPTRA_FUSE_PAUSER_LOCK_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + // ----------------------- COVERGROUP CPTRA_FUSE_AXI_ID_LOCK ----------------------- + covergroup soc_ifc_CPTRA_FUSE_AXI_ID_LOCK_cg (ref logic [3:0] bus_event) @(posedge clk); + CPTRA_FUSE_AXI_ID_LOCK_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_FUSE_AXI_ID_LOCK; + bus_CPTRA_FUSE_AXI_ID_LOCK_cp : coverpoint bus_event { + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2015,13 +2042,13 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_WDT_CFG_cg (ref logic [3:0] bus_event[0:1]) @(posedge clk); CPTRA_WDT_CFG0_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_WDT_CFG[0]; bus_CPTRA_WDT_CFG0_cp : coverpoint bus_event[0] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } CPTRA_WDT_CFG1_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_WDT_CFG[1]; bus_CPTRA_WDT_CFG1_cp : coverpoint bus_event[1] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2029,8 +2056,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_iTRNG_ENTROPY_CONFIG_0_cg (ref logic [3:0] bus_event) @(posedge clk); CPTRA_iTRNG_ENTROPY_CONFIG_0_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_iTRNG_ENTROPY_CONFIG_0; bus_CPTRA_iTRNG_ENTROPY_CONFIG_0_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2038,8 +2065,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_iTRNG_ENTROPY_CONFIG_1_cg (ref logic [3:0] bus_event) @(posedge clk); CPTRA_iTRNG_ENTROPY_CONFIG_1_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_iTRNG_ENTROPY_CONFIG_1; bus_CPTRA_iTRNG_ENTROPY_CONFIG_1_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2047,13 +2074,13 @@ interface soc_ifc_cov_if covergroup soc_ifc_CPTRA_RSVD_REG_cg (ref logic [3:0] bus_event[0:1]) @(posedge clk); CPTRA_RSVD_REG0_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_RSVD_REG[0]; bus_CPTRA_RSVD_REG0_cp : coverpoint bus_event[0] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } CPTRA_RSVD_REG1_cp : coverpoint i_soc_ifc_reg.field_storage.CPTRA_RSVD_REG[1]; bus_CPTRA_RSVD_REG1_cp : coverpoint bus_event[1] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2061,63 +2088,63 @@ interface soc_ifc_cov_if covergroup soc_ifc_fuse_uds_seed_cg (ref logic [3:0] bus_event[0:11]) @(posedge clk); fuse_uds_seed0_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_uds_seed[0]; bus_fuse_uds_seed0_cp : coverpoint bus_event[0] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_uds_seed1_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_uds_seed[1]; bus_fuse_uds_seed1_cp : coverpoint bus_event[1] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_uds_seed2_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_uds_seed[2]; bus_fuse_uds_seed2_cp : coverpoint bus_event[2] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_uds_seed3_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_uds_seed[3]; bus_fuse_uds_seed3_cp : coverpoint bus_event[3] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_uds_seed4_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_uds_seed[4]; bus_fuse_uds_seed4_cp : coverpoint bus_event[4] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_uds_seed5_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_uds_seed[5]; bus_fuse_uds_seed5_cp : coverpoint bus_event[5] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_uds_seed6_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_uds_seed[6]; bus_fuse_uds_seed6_cp : coverpoint bus_event[6] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_uds_seed7_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_uds_seed[7]; bus_fuse_uds_seed7_cp : coverpoint bus_event[7] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_uds_seed8_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_uds_seed[8]; bus_fuse_uds_seed8_cp : coverpoint bus_event[8] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_uds_seed9_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_uds_seed[9]; bus_fuse_uds_seed9_cp : coverpoint bus_event[9] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_uds_seed10_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_uds_seed[10]; bus_fuse_uds_seed10_cp : coverpoint bus_event[10] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_uds_seed11_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_uds_seed[11]; bus_fuse_uds_seed11_cp : coverpoint bus_event[11] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2125,43 +2152,43 @@ interface soc_ifc_cov_if covergroup soc_ifc_fuse_field_entropy_cg (ref logic [3:0] bus_event[0:7]) @(posedge clk); fuse_field_entropy0_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_field_entropy[0]; bus_fuse_field_entropy0_cp : coverpoint bus_event[0] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_field_entropy1_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_field_entropy[1]; bus_fuse_field_entropy1_cp : coverpoint bus_event[1] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_field_entropy2_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_field_entropy[2]; bus_fuse_field_entropy2_cp : coverpoint bus_event[2] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_field_entropy3_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_field_entropy[3]; bus_fuse_field_entropy3_cp : coverpoint bus_event[3] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_field_entropy4_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_field_entropy[4]; bus_fuse_field_entropy4_cp : coverpoint bus_event[4] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_field_entropy5_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_field_entropy[5]; bus_fuse_field_entropy5_cp : coverpoint bus_event[5] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_field_entropy6_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_field_entropy[6]; bus_fuse_field_entropy6_cp : coverpoint bus_event[6] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_field_entropy7_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_field_entropy[7]; bus_fuse_field_entropy7_cp : coverpoint bus_event[7] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2169,63 +2196,63 @@ interface soc_ifc_cov_if covergroup soc_ifc_fuse_key_manifest_pk_hash_cg (ref logic [3:0] bus_event[0:11]) @(posedge clk); fuse_key_manifest_pk_hash0_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_key_manifest_pk_hash[0]; bus_fuse_key_manifest_pk_hash0_cp : coverpoint bus_event[0] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_key_manifest_pk_hash1_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_key_manifest_pk_hash[1]; bus_fuse_key_manifest_pk_hash1_cp : coverpoint bus_event[1] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_key_manifest_pk_hash2_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_key_manifest_pk_hash[2]; bus_fuse_key_manifest_pk_hash2_cp : coverpoint bus_event[2] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_key_manifest_pk_hash3_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_key_manifest_pk_hash[3]; bus_fuse_key_manifest_pk_hash3_cp : coverpoint bus_event[3] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_key_manifest_pk_hash4_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_key_manifest_pk_hash[4]; bus_fuse_key_manifest_pk_hash4_cp : coverpoint bus_event[4] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_key_manifest_pk_hash5_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_key_manifest_pk_hash[5]; bus_fuse_key_manifest_pk_hash5_cp : coverpoint bus_event[5] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_key_manifest_pk_hash6_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_key_manifest_pk_hash[6]; bus_fuse_key_manifest_pk_hash6_cp : coverpoint bus_event[6] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_key_manifest_pk_hash7_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_key_manifest_pk_hash[7]; bus_fuse_key_manifest_pk_hash7_cp : coverpoint bus_event[7] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_key_manifest_pk_hash8_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_key_manifest_pk_hash[8]; bus_fuse_key_manifest_pk_hash8_cp : coverpoint bus_event[8] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_key_manifest_pk_hash9_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_key_manifest_pk_hash[9]; bus_fuse_key_manifest_pk_hash9_cp : coverpoint bus_event[9] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_key_manifest_pk_hash10_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_key_manifest_pk_hash[10]; bus_fuse_key_manifest_pk_hash10_cp : coverpoint bus_event[10] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_key_manifest_pk_hash11_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_key_manifest_pk_hash[11]; bus_fuse_key_manifest_pk_hash11_cp : coverpoint bus_event[11] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2233,8 +2260,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_fuse_key_manifest_pk_hash_mask_cg (ref logic [3:0] bus_event) @(posedge clk); fuse_key_manifest_pk_hash_mask_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_key_manifest_pk_hash_mask; bus_fuse_key_manifest_pk_hash_mask_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2242,63 +2269,63 @@ interface soc_ifc_cov_if covergroup soc_ifc_fuse_owner_pk_hash_cg (ref logic [3:0] bus_event[0:11]) @(posedge clk); fuse_owner_pk_hash0_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_owner_pk_hash[0]; bus_fuse_owner_pk_hash0_cp : coverpoint bus_event[0] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_owner_pk_hash1_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_owner_pk_hash[1]; bus_fuse_owner_pk_hash1_cp : coverpoint bus_event[1] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_owner_pk_hash2_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_owner_pk_hash[2]; bus_fuse_owner_pk_hash2_cp : coverpoint bus_event[2] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_owner_pk_hash3_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_owner_pk_hash[3]; bus_fuse_owner_pk_hash3_cp : coverpoint bus_event[3] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_owner_pk_hash4_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_owner_pk_hash[4]; bus_fuse_owner_pk_hash4_cp : coverpoint bus_event[4] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_owner_pk_hash5_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_owner_pk_hash[5]; bus_fuse_owner_pk_hash5_cp : coverpoint bus_event[5] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_owner_pk_hash6_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_owner_pk_hash[6]; bus_fuse_owner_pk_hash6_cp : coverpoint bus_event[6] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_owner_pk_hash7_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_owner_pk_hash[7]; bus_fuse_owner_pk_hash7_cp : coverpoint bus_event[7] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_owner_pk_hash8_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_owner_pk_hash[8]; bus_fuse_owner_pk_hash8_cp : coverpoint bus_event[8] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_owner_pk_hash9_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_owner_pk_hash[9]; bus_fuse_owner_pk_hash9_cp : coverpoint bus_event[9] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_owner_pk_hash10_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_owner_pk_hash[10]; bus_fuse_owner_pk_hash10_cp : coverpoint bus_event[10] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_owner_pk_hash11_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_owner_pk_hash[11]; bus_fuse_owner_pk_hash11_cp : coverpoint bus_event[11] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2306,8 +2333,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_fuse_fmc_key_manifest_svn_cg (ref logic [3:0] bus_event) @(posedge clk); fuse_fmc_key_manifest_svn_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_fmc_key_manifest_svn; bus_fuse_fmc_key_manifest_svn_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2315,23 +2342,23 @@ interface soc_ifc_cov_if covergroup soc_ifc_fuse_runtime_svn_cg (ref logic [3:0] bus_event[0:3]) @(posedge clk); fuse_runtime_svn0_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_runtime_svn[0]; bus_fuse_runtime_svn0_cp : coverpoint bus_event[0] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_runtime_svn1_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_runtime_svn[1]; bus_fuse_runtime_svn1_cp : coverpoint bus_event[1] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_runtime_svn2_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_runtime_svn[2]; bus_fuse_runtime_svn2_cp : coverpoint bus_event[2] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_runtime_svn3_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_runtime_svn[3]; bus_fuse_runtime_svn3_cp : coverpoint bus_event[3] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2339,8 +2366,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_fuse_anti_rollback_disable_cg (ref logic [3:0] bus_event) @(posedge clk); fuse_anti_rollback_disable_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_anti_rollback_disable; bus_fuse_anti_rollback_disable_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2348,123 +2375,123 @@ interface soc_ifc_cov_if covergroup soc_ifc_fuse_idevid_cert_attr_cg (ref logic [3:0] bus_event[0:23]) @(posedge clk); fuse_idevid_cert_attr0_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_idevid_cert_attr[0]; bus_fuse_idevid_cert_attr0_cp : coverpoint bus_event[0] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_idevid_cert_attr1_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_idevid_cert_attr[1]; bus_fuse_idevid_cert_attr1_cp : coverpoint bus_event[1] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_idevid_cert_attr2_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_idevid_cert_attr[2]; bus_fuse_idevid_cert_attr2_cp : coverpoint bus_event[2] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_idevid_cert_attr3_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_idevid_cert_attr[3]; bus_fuse_idevid_cert_attr3_cp : coverpoint bus_event[3] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_idevid_cert_attr4_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_idevid_cert_attr[4]; bus_fuse_idevid_cert_attr4_cp : coverpoint bus_event[4] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_idevid_cert_attr5_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_idevid_cert_attr[5]; bus_fuse_idevid_cert_attr5_cp : coverpoint bus_event[5] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_idevid_cert_attr6_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_idevid_cert_attr[6]; bus_fuse_idevid_cert_attr6_cp : coverpoint bus_event[6] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_idevid_cert_attr7_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_idevid_cert_attr[7]; bus_fuse_idevid_cert_attr7_cp : coverpoint bus_event[7] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_idevid_cert_attr8_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_idevid_cert_attr[8]; bus_fuse_idevid_cert_attr8_cp : coverpoint bus_event[8] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_idevid_cert_attr9_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_idevid_cert_attr[9]; bus_fuse_idevid_cert_attr9_cp : coverpoint bus_event[9] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_idevid_cert_attr10_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_idevid_cert_attr[10]; bus_fuse_idevid_cert_attr10_cp : coverpoint bus_event[10] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_idevid_cert_attr11_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_idevid_cert_attr[11]; bus_fuse_idevid_cert_attr11_cp : coverpoint bus_event[11] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_idevid_cert_attr12_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_idevid_cert_attr[12]; bus_fuse_idevid_cert_attr12_cp : coverpoint bus_event[12] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_idevid_cert_attr13_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_idevid_cert_attr[13]; bus_fuse_idevid_cert_attr13_cp : coverpoint bus_event[13] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_idevid_cert_attr14_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_idevid_cert_attr[14]; bus_fuse_idevid_cert_attr14_cp : coverpoint bus_event[14] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_idevid_cert_attr15_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_idevid_cert_attr[15]; bus_fuse_idevid_cert_attr15_cp : coverpoint bus_event[15] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_idevid_cert_attr16_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_idevid_cert_attr[16]; bus_fuse_idevid_cert_attr16_cp : coverpoint bus_event[16] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_idevid_cert_attr17_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_idevid_cert_attr[17]; bus_fuse_idevid_cert_attr17_cp : coverpoint bus_event[17] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_idevid_cert_attr18_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_idevid_cert_attr[18]; bus_fuse_idevid_cert_attr18_cp : coverpoint bus_event[18] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_idevid_cert_attr19_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_idevid_cert_attr[19]; bus_fuse_idevid_cert_attr19_cp : coverpoint bus_event[19] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_idevid_cert_attr20_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_idevid_cert_attr[20]; bus_fuse_idevid_cert_attr20_cp : coverpoint bus_event[20] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_idevid_cert_attr21_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_idevid_cert_attr[21]; bus_fuse_idevid_cert_attr21_cp : coverpoint bus_event[21] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_idevid_cert_attr22_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_idevid_cert_attr[22]; bus_fuse_idevid_cert_attr22_cp : coverpoint bus_event[22] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_idevid_cert_attr23_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_idevid_cert_attr[23]; bus_fuse_idevid_cert_attr23_cp : coverpoint bus_event[23] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2472,23 +2499,23 @@ interface soc_ifc_cov_if covergroup soc_ifc_fuse_idevid_manuf_hsm_id_cg (ref logic [3:0] bus_event[0:3]) @(posedge clk); fuse_idevid_manuf_hsm_id0_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_idevid_manuf_hsm_id[0]; bus_fuse_idevid_manuf_hsm_id0_cp : coverpoint bus_event[0] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_idevid_manuf_hsm_id1_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_idevid_manuf_hsm_id[1]; bus_fuse_idevid_manuf_hsm_id1_cp : coverpoint bus_event[1] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_idevid_manuf_hsm_id2_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_idevid_manuf_hsm_id[2]; bus_fuse_idevid_manuf_hsm_id2_cp : coverpoint bus_event[2] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } fuse_idevid_manuf_hsm_id3_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_idevid_manuf_hsm_id[3]; bus_fuse_idevid_manuf_hsm_id3_cp : coverpoint bus_event[3] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2496,8 +2523,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_fuse_life_cycle_cg (ref logic [3:0] bus_event) @(posedge clk); fuse_life_cycle_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_life_cycle; bus_fuse_life_cycle_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2505,8 +2532,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_fuse_lms_verify_cg (ref logic [3:0] bus_event) @(posedge clk); fuse_lms_verify_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_lms_verify; bus_fuse_lms_verify_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2514,8 +2541,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_fuse_lms_revocation_cg (ref logic [3:0] bus_event) @(posedge clk); fuse_lms_revocation_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_lms_revocation; bus_fuse_lms_revocation_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2523,8 +2550,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_fuse_soc_stepping_id_cg (ref logic [3:0] bus_event) @(posedge clk); fuse_soc_stepping_id_cp : coverpoint i_soc_ifc_reg.field_storage.fuse_soc_stepping_id; bus_fuse_soc_stepping_id_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2532,43 +2559,43 @@ interface soc_ifc_cov_if covergroup soc_ifc_internal_obf_key_cg (ref logic [3:0] bus_event[0:7]) @(posedge clk); internal_obf_key0_cp : coverpoint i_soc_ifc_reg.field_storage.internal_obf_key[0]; bus_internal_obf_key0_cp : coverpoint bus_event[0] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } internal_obf_key1_cp : coverpoint i_soc_ifc_reg.field_storage.internal_obf_key[1]; bus_internal_obf_key1_cp : coverpoint bus_event[1] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } internal_obf_key2_cp : coverpoint i_soc_ifc_reg.field_storage.internal_obf_key[2]; bus_internal_obf_key2_cp : coverpoint bus_event[2] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } internal_obf_key3_cp : coverpoint i_soc_ifc_reg.field_storage.internal_obf_key[3]; bus_internal_obf_key3_cp : coverpoint bus_event[3] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } internal_obf_key4_cp : coverpoint i_soc_ifc_reg.field_storage.internal_obf_key[4]; bus_internal_obf_key4_cp : coverpoint bus_event[4] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } internal_obf_key5_cp : coverpoint i_soc_ifc_reg.field_storage.internal_obf_key[5]; bus_internal_obf_key5_cp : coverpoint bus_event[5] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } internal_obf_key6_cp : coverpoint i_soc_ifc_reg.field_storage.internal_obf_key[6]; bus_internal_obf_key6_cp : coverpoint bus_event[6] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } internal_obf_key7_cp : coverpoint i_soc_ifc_reg.field_storage.internal_obf_key[7]; bus_internal_obf_key7_cp : coverpoint bus_event[7] { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2576,8 +2603,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_internal_iccm_lock_cg (ref logic [3:0] bus_event) @(posedge clk); internal_iccm_lock_cp : coverpoint i_soc_ifc_reg.field_storage.internal_iccm_lock; bus_internal_iccm_lock_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2585,8 +2612,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_internal_fw_update_reset_cg (ref logic [3:0] bus_event) @(posedge clk); internal_fw_update_reset_cp : coverpoint i_soc_ifc_reg.field_storage.internal_fw_update_reset; bus_internal_fw_update_reset_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2594,8 +2621,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_internal_fw_update_reset_wait_cycles_cg (ref logic [3:0] bus_event) @(posedge clk); internal_fw_update_reset_wait_cycles_cp : coverpoint i_soc_ifc_reg.field_storage.internal_fw_update_reset_wait_cycles; bus_internal_fw_update_reset_wait_cycles_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2603,8 +2630,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_internal_nmi_vector_cg (ref logic [3:0] bus_event) @(posedge clk); internal_nmi_vector_cp : coverpoint i_soc_ifc_reg.field_storage.internal_nmi_vector; bus_internal_nmi_vector_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2612,8 +2639,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_internal_hw_error_fatal_mask_cg (ref logic [3:0] bus_event) @(posedge clk); internal_hw_error_fatal_mask_cp : coverpoint i_soc_ifc_reg.field_storage.internal_hw_error_fatal_mask; bus_internal_hw_error_fatal_mask_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2621,8 +2648,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_internal_hw_error_non_fatal_mask_cg (ref logic [3:0] bus_event) @(posedge clk); internal_hw_error_non_fatal_mask_cp : coverpoint i_soc_ifc_reg.field_storage.internal_hw_error_non_fatal_mask; bus_internal_hw_error_non_fatal_mask_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2630,8 +2657,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_internal_fw_error_fatal_mask_cg (ref logic [3:0] bus_event) @(posedge clk); internal_fw_error_fatal_mask_cp : coverpoint i_soc_ifc_reg.field_storage.internal_fw_error_fatal_mask; bus_internal_fw_error_fatal_mask_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2639,8 +2666,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_internal_fw_error_non_fatal_mask_cg (ref logic [3:0] bus_event) @(posedge clk); internal_fw_error_non_fatal_mask_cp : coverpoint i_soc_ifc_reg.field_storage.internal_fw_error_non_fatal_mask; bus_internal_fw_error_non_fatal_mask_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2648,8 +2675,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_internal_rv_mtime_l_cg (ref logic [3:0] bus_event) @(posedge clk); internal_rv_mtime_l_cp : coverpoint i_soc_ifc_reg.field_storage.internal_rv_mtime_l; bus_internal_rv_mtime_l_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2657,8 +2684,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_internal_rv_mtime_h_cg (ref logic [3:0] bus_event) @(posedge clk); internal_rv_mtime_h_cp : coverpoint i_soc_ifc_reg.field_storage.internal_rv_mtime_h; bus_internal_rv_mtime_h_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2666,8 +2693,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_internal_rv_mtimecmp_l_cg (ref logic [3:0] bus_event) @(posedge clk); internal_rv_mtimecmp_l_cp : coverpoint i_soc_ifc_reg.field_storage.internal_rv_mtimecmp_l; bus_internal_rv_mtimecmp_l_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2675,8 +2702,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_internal_rv_mtimecmp_h_cg (ref logic [3:0] bus_event) @(posedge clk); internal_rv_mtimecmp_h_cp : coverpoint i_soc_ifc_reg.field_storage.internal_rv_mtimecmp_h; bus_internal_rv_mtimecmp_h_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2684,8 +2711,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_global_intr_en_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_global_intr_en_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.global_intr_en_r; bus_intr_brf_global_intr_en_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2693,8 +2720,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_error_intr_en_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_error_intr_en_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.error_intr_en_r; bus_intr_brf_error_intr_en_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2702,8 +2729,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_notif_intr_en_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_notif_intr_en_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.notif_intr_en_r; bus_intr_brf_notif_intr_en_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2711,8 +2738,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_error_global_intr_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_error_global_intr_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.error_global_intr_r; bus_intr_brf_error_global_intr_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2720,8 +2747,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_notif_global_intr_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_notif_global_intr_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.notif_global_intr_r; bus_intr_brf_notif_global_intr_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2729,8 +2756,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_error_internal_intr_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_error_internal_intr_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.error_internal_intr_r; bus_intr_brf_error_internal_intr_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2738,8 +2765,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_notif_internal_intr_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_notif_internal_intr_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.notif_internal_intr_r; bus_intr_brf_notif_internal_intr_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2747,8 +2774,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_error_intr_trig_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_error_intr_trig_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.error_intr_trig_r; bus_intr_brf_error_intr_trig_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2756,8 +2783,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_notif_intr_trig_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_notif_intr_trig_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.notif_intr_trig_r; bus_intr_brf_notif_intr_trig_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2765,8 +2792,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_error_internal_intr_count_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_error_internal_intr_count_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.error_internal_intr_count_r; bus_intr_brf_error_internal_intr_count_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2774,8 +2801,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_error_inv_dev_intr_count_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_error_inv_dev_intr_count_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.error_inv_dev_intr_count_r; bus_intr_brf_error_inv_dev_intr_count_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2783,8 +2810,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_error_cmd_fail_intr_count_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_error_cmd_fail_intr_count_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.error_cmd_fail_intr_count_r; bus_intr_brf_error_cmd_fail_intr_count_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2792,8 +2819,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_error_bad_fuse_intr_count_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_error_bad_fuse_intr_count_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.error_bad_fuse_intr_count_r; bus_intr_brf_error_bad_fuse_intr_count_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2801,8 +2828,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_error_iccm_blocked_intr_count_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_error_iccm_blocked_intr_count_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.error_iccm_blocked_intr_count_r; bus_intr_brf_error_iccm_blocked_intr_count_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2810,8 +2837,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_error_mbox_ecc_unc_intr_count_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_error_mbox_ecc_unc_intr_count_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.error_mbox_ecc_unc_intr_count_r; bus_intr_brf_error_mbox_ecc_unc_intr_count_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2819,8 +2846,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_error_wdt_timer1_timeout_intr_count_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_error_wdt_timer1_timeout_intr_count_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.error_wdt_timer1_timeout_intr_count_r; bus_intr_brf_error_wdt_timer1_timeout_intr_count_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2828,8 +2855,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_error_wdt_timer2_timeout_intr_count_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_error_wdt_timer2_timeout_intr_count_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.error_wdt_timer2_timeout_intr_count_r; bus_intr_brf_error_wdt_timer2_timeout_intr_count_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2837,8 +2864,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_notif_cmd_avail_intr_count_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_notif_cmd_avail_intr_count_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.notif_cmd_avail_intr_count_r; bus_intr_brf_notif_cmd_avail_intr_count_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2846,8 +2873,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_notif_mbox_ecc_cor_intr_count_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_notif_mbox_ecc_cor_intr_count_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.notif_mbox_ecc_cor_intr_count_r; bus_intr_brf_notif_mbox_ecc_cor_intr_count_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2855,8 +2882,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_notif_debug_locked_intr_count_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_notif_debug_locked_intr_count_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.notif_debug_locked_intr_count_r; bus_intr_brf_notif_debug_locked_intr_count_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2864,8 +2891,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_notif_scan_mode_intr_count_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_notif_scan_mode_intr_count_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.notif_scan_mode_intr_count_r; bus_intr_brf_notif_scan_mode_intr_count_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2873,8 +2900,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_notif_soc_req_lock_intr_count_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_notif_soc_req_lock_intr_count_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.notif_soc_req_lock_intr_count_r; bus_intr_brf_notif_soc_req_lock_intr_count_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2882,8 +2909,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_notif_gen_in_toggle_intr_count_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_notif_gen_in_toggle_intr_count_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.notif_gen_in_toggle_intr_count_r; bus_intr_brf_notif_gen_in_toggle_intr_count_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2891,8 +2918,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_error_internal_intr_count_incr_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_error_internal_intr_count_incr_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.error_internal_intr_count_incr_r; bus_intr_brf_error_internal_intr_count_incr_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2900,8 +2927,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_error_inv_dev_intr_count_incr_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_error_inv_dev_intr_count_incr_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.error_inv_dev_intr_count_incr_r; bus_intr_brf_error_inv_dev_intr_count_incr_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2909,8 +2936,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_error_cmd_fail_intr_count_incr_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_error_cmd_fail_intr_count_incr_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.error_cmd_fail_intr_count_incr_r; bus_intr_brf_error_cmd_fail_intr_count_incr_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2918,8 +2945,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_error_bad_fuse_intr_count_incr_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_error_bad_fuse_intr_count_incr_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.error_bad_fuse_intr_count_incr_r; bus_intr_brf_error_bad_fuse_intr_count_incr_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2927,8 +2954,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_error_iccm_blocked_intr_count_incr_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_error_iccm_blocked_intr_count_incr_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.error_iccm_blocked_intr_count_incr_r; bus_intr_brf_error_iccm_blocked_intr_count_incr_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2936,8 +2963,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_error_mbox_ecc_unc_intr_count_incr_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_error_mbox_ecc_unc_intr_count_incr_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.error_mbox_ecc_unc_intr_count_incr_r; bus_intr_brf_error_mbox_ecc_unc_intr_count_incr_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2945,8 +2972,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_error_wdt_timer1_timeout_intr_count_incr_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_error_wdt_timer1_timeout_intr_count_incr_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.error_wdt_timer1_timeout_intr_count_incr_r; bus_intr_brf_error_wdt_timer1_timeout_intr_count_incr_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2954,8 +2981,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_error_wdt_timer2_timeout_intr_count_incr_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_error_wdt_timer2_timeout_intr_count_incr_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.error_wdt_timer2_timeout_intr_count_incr_r; bus_intr_brf_error_wdt_timer2_timeout_intr_count_incr_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2963,8 +2990,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_notif_cmd_avail_intr_count_incr_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_notif_cmd_avail_intr_count_incr_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.notif_cmd_avail_intr_count_incr_r; bus_intr_brf_notif_cmd_avail_intr_count_incr_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2972,8 +2999,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_notif_mbox_ecc_cor_intr_count_incr_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_notif_mbox_ecc_cor_intr_count_incr_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.notif_mbox_ecc_cor_intr_count_incr_r; bus_intr_brf_notif_mbox_ecc_cor_intr_count_incr_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2981,8 +3008,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_notif_debug_locked_intr_count_incr_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_notif_debug_locked_intr_count_incr_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.notif_debug_locked_intr_count_incr_r; bus_intr_brf_notif_debug_locked_intr_count_incr_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -2990,8 +3017,8 @@ interface soc_ifc_cov_if covergroup soc_ifc_intr_brf_notif_soc_req_lock_intr_count_incr_r_cg (ref logic [3:0] bus_event) @(posedge clk); intr_brf_notif_soc_req_lock_intr_count_incr_r_cp : coverpoint i_soc_ifc_reg.field_storage.intr_block_rf.notif_soc_req_lock_intr_count_incr_r; bus_intr_brf_notif_soc_req_lock_intr_count_incr_r_cp : coverpoint bus_event { - bins wr_rd[] = (AHB_WR, APB_WR => IDLE [*1:1000] => AHB_RD, APB_RD); - ignore_bins dont_care = {IDLE, 4'hf, (APB_RD | APB_WR), (AHB_RD | AHB_WR)}; + bins wr_rd[] = (AHB_WR, AXI_WR => IDLE [*1:1000] => AHB_RD, AXI_RD); + ignore_bins dont_care = {IDLE, 4'hf, (AXI_RD | AXI_WR), (AHB_RD | AHB_WR)}; } endgroup @@ -3009,10 +3036,10 @@ interface soc_ifc_cov_if soc_ifc_CPTRA_FLOW_STATUS_cg CPTRA_FLOW_STATUS_cg = new(bus_CPTRA_FLOW_STATUS); soc_ifc_CPTRA_RESET_REASON_cg CPTRA_RESET_REASON_cg = new(bus_CPTRA_RESET_REASON); // soc_ifc_CPTRA_SECURITY_STATE_cg CPTRA_SECURITY_STATE_cg = new(bus_CPTRA_SECURITY_STATE); - soc_ifc_CPTRA_MBOX_VALID_PAUSER_cg CPTRA_MBOX_VALID_PAUSER_cg = new(bus_CPTRA_MBOX_VALID_PAUSER); - soc_ifc_CPTRA_MBOX_PAUSER_LOCK_cg CPTRA_MBOX_PAUSER_LOCK_cg = new(bus_CPTRA_MBOX_PAUSER_LOCK); - soc_ifc_CPTRA_TRNG_VALID_PAUSER_cg CPTRA_TRNG_VALID_PAUSER_cg = new(bus_CPTRA_TRNG_VALID_PAUSER); - soc_ifc_CPTRA_TRNG_PAUSER_LOCK_cg CPTRA_TRNG_PAUSER_LOCK_cg = new(bus_CPTRA_TRNG_PAUSER_LOCK); + soc_ifc_CPTRA_MBOX_VALID_AXI_ID_cg CPTRA_MBOX_VALID_AXI_ID_cg = new(bus_CPTRA_MBOX_VALID_AXI_ID); + soc_ifc_CPTRA_MBOX_AXI_ID_LOCK_cg CPTRA_MBOX_AXI_ID_LOCK_cg = new(bus_CPTRA_MBOX_AXI_ID_LOCK); + soc_ifc_CPTRA_TRNG_VALID_AXI_ID_cg CPTRA_TRNG_VALID_AXI_ID_cg = new(bus_CPTRA_TRNG_VALID_AXI_ID); + soc_ifc_CPTRA_TRNG_AXI_ID_LOCK_cg CPTRA_TRNG_AXI_ID_LOCK_cg = new(bus_CPTRA_TRNG_AXI_ID_LOCK); soc_ifc_CPTRA_TRNG_DATA_cg CPTRA_TRNG_DATA_cg = new(bus_CPTRA_TRNG_DATA); soc_ifc_CPTRA_TRNG_CTRL_cg CPTRA_TRNG_CTRL_cg = new(bus_CPTRA_TRNG_CTRL); soc_ifc_CPTRA_TRNG_STATUS_cg CPTRA_TRNG_STATUS_cg = new(bus_CPTRA_TRNG_STATUS); @@ -3033,8 +3060,8 @@ interface soc_ifc_cov_if soc_ifc_CPTRA_WDT_TIMER2_CTRL_cg CPTRA_WDT_TIMER2_CTRL_cg = new(bus_CPTRA_WDT_TIMER2_CTRL); soc_ifc_CPTRA_WDT_TIMER2_TIMEOUT_PERIOD_cg CPTRA_WDT_TIMER2_TIMEOUT_PERIOD_cg = new(bus_CPTRA_WDT_TIMER2_TIMEOUT_PERIOD); soc_ifc_CPTRA_WDT_STATUS_cg CPTRA_WDT_STATUS_cg = new(bus_CPTRA_WDT_STATUS); - soc_ifc_CPTRA_FUSE_VALID_PAUSER_cg CPTRA_FUSE_VALID_PAUSER_cg = new(bus_CPTRA_FUSE_VALID_PAUSER); - soc_ifc_CPTRA_FUSE_PAUSER_LOCK_cg CPTRA_FUSE_PAUSER_LOCK_cg = new(bus_CPTRA_FUSE_PAUSER_LOCK); + soc_ifc_CPTRA_FUSE_VALID_AXI_ID_cg CPTRA_FUSE_VALID_AXI_ID_cg = new(bus_CPTRA_FUSE_VALID_AXI_ID); + soc_ifc_CPTRA_FUSE_AXI_ID_LOCK_cg CPTRA_FUSE_AXI_ID_LOCK_cg = new(bus_CPTRA_FUSE_AXI_ID_LOCK); soc_ifc_CPTRA_WDT_CFG_cg CPTRA_WDT_CFG_cg = new(bus_CPTRA_WDT_CFG); soc_ifc_CPTRA_iTRNG_ENTROPY_CONFIG_0_cg CPTRA_iTRNG_ENTROPY_CONFIG_0_cg = new(bus_CPTRA_iTRNG_ENTROPY_CONFIG_0); soc_ifc_CPTRA_iTRNG_ENTROPY_CONFIG_1_cg CPTRA_iTRNG_ENTROPY_CONFIG_1_cg = new(bus_CPTRA_iTRNG_ENTROPY_CONFIG_1); diff --git a/src/soc_ifc/rtl/caliptra_top_reg.h b/src/soc_ifc/rtl/caliptra_top_reg.h index a731f292d..fd04f3081 100644 --- a/src/soc_ifc/rtl/caliptra_top_reg.h +++ b/src/soc_ifc/rtl/caliptra_top_reg.h @@ -22,8 +22,8 @@ #define MBOX_CSR_MBOX_LOCK (0x0) #define MBOX_CSR_MBOX_LOCK_LOCK_LOW (0) #define MBOX_CSR_MBOX_LOCK_LOCK_MASK (0x1) -#define CALIPTRA_TOP_REG_MBOX_CSR_MBOX_USER (0x30020004) -#define MBOX_CSR_MBOX_USER (0x4) +#define CALIPTRA_TOP_REG_MBOX_CSR_MBOX_ID (0x30020004) +#define MBOX_CSR_MBOX_ID (0x4) #define CALIPTRA_TOP_REG_MBOX_CSR_MBOX_CMD (0x30020008) #define MBOX_CSR_MBOX_CMD (0x8) #define CALIPTRA_TOP_REG_MBOX_CSR_MBOX_DLEN (0x3002000c) @@ -59,8 +59,8 @@ #define SHA512_ACC_CSR_LOCK (0x0) #define SHA512_ACC_CSR_LOCK_LOCK_LOW (0) #define SHA512_ACC_CSR_LOCK_LOCK_MASK (0x1) -#define CALIPTRA_TOP_REG_SHA512_ACC_CSR_USER (0x30021004) -#define SHA512_ACC_CSR_USER (0x4) +#define CALIPTRA_TOP_REG_SHA512_ACC_CSR_ID (0x30021004) +#define SHA512_ACC_CSR_ID (0x4) #define CALIPTRA_TOP_REG_SHA512_ACC_CSR_MODE (0x30021008) #define SHA512_ACC_CSR_MODE (0x8) #define SHA512_ACC_CSR_MODE_MODE_LOW (0) @@ -196,42 +196,42 @@ #define GENERIC_AND_FUSE_REG_CPTRA_SECURITY_STATE_SCAN_MODE_MASK (0x8) #define GENERIC_AND_FUSE_REG_CPTRA_SECURITY_STATE_RSVD_LOW (4) #define GENERIC_AND_FUSE_REG_CPTRA_SECURITY_STATE_RSVD_MASK (0xfffffff0) -#define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_PAUSER_0 (0x30030048) -#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_PAUSER_0 (0x48) -#define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_PAUSER_1 (0x3003004c) -#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_PAUSER_1 (0x4c) -#define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_PAUSER_2 (0x30030050) -#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_PAUSER_2 (0x50) -#define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_PAUSER_3 (0x30030054) -#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_PAUSER_3 (0x54) -#define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_PAUSER_4 (0x30030058) -#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_PAUSER_4 (0x58) -#define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_0 (0x3003005c) -#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_0 (0x5c) -#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_0_LOCK_LOW (0) -#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_0_LOCK_MASK (0x1) -#define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_1 (0x30030060) -#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_1 (0x60) -#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_1_LOCK_LOW (0) -#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_1_LOCK_MASK (0x1) -#define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_2 (0x30030064) -#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_2 (0x64) -#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_2_LOCK_LOW (0) -#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_2_LOCK_MASK (0x1) -#define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_3 (0x30030068) -#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_3 (0x68) -#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_3_LOCK_LOW (0) -#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_3_LOCK_MASK (0x1) -#define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_4 (0x3003006c) -#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_4 (0x6c) -#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_4_LOCK_LOW (0) -#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_4_LOCK_MASK (0x1) -#define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_TRNG_VALID_PAUSER (0x30030070) -#define GENERIC_AND_FUSE_REG_CPTRA_TRNG_VALID_PAUSER (0x70) -#define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_TRNG_PAUSER_LOCK (0x30030074) -#define GENERIC_AND_FUSE_REG_CPTRA_TRNG_PAUSER_LOCK (0x74) -#define GENERIC_AND_FUSE_REG_CPTRA_TRNG_PAUSER_LOCK_LOCK_LOW (0) -#define GENERIC_AND_FUSE_REG_CPTRA_TRNG_PAUSER_LOCK_LOCK_MASK (0x1) +#define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_AXI_ID_0 (0x30030048) +#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_AXI_ID_0 (0x48) +#define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_AXI_ID_1 (0x3003004c) +#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_AXI_ID_1 (0x4c) +#define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_AXI_ID_2 (0x30030050) +#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_AXI_ID_2 (0x50) +#define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_AXI_ID_3 (0x30030054) +#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_AXI_ID_3 (0x54) +#define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_AXI_ID_4 (0x30030058) +#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_AXI_ID_4 (0x58) +#define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_0 (0x3003005c) +#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_0 (0x5c) +#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_0_LOCK_LOW (0) +#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_0_LOCK_MASK (0x1) +#define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_1 (0x30030060) +#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_1 (0x60) +#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_1_LOCK_LOW (0) +#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_1_LOCK_MASK (0x1) +#define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_2 (0x30030064) +#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_2 (0x64) +#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_2_LOCK_LOW (0) +#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_2_LOCK_MASK (0x1) +#define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_3 (0x30030068) +#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_3 (0x68) +#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_3_LOCK_LOW (0) +#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_3_LOCK_MASK (0x1) +#define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_4 (0x3003006c) +#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_4 (0x6c) +#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_4_LOCK_LOW (0) +#define GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_4_LOCK_MASK (0x1) +#define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_TRNG_VALID_AXI_ID (0x30030070) +#define GENERIC_AND_FUSE_REG_CPTRA_TRNG_VALID_AXI_ID (0x70) +#define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_TRNG_AXI_ID_LOCK (0x30030074) +#define GENERIC_AND_FUSE_REG_CPTRA_TRNG_AXI_ID_LOCK (0x74) +#define GENERIC_AND_FUSE_REG_CPTRA_TRNG_AXI_ID_LOCK_LOCK_LOW (0) +#define GENERIC_AND_FUSE_REG_CPTRA_TRNG_AXI_ID_LOCK_LOCK_MASK (0x1) #define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_TRNG_DATA_0 (0x30030078) #define GENERIC_AND_FUSE_REG_CPTRA_TRNG_DATA_0 (0x78) #define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_TRNG_DATA_1 (0x3003007c) @@ -342,12 +342,12 @@ #define GENERIC_AND_FUSE_REG_CPTRA_WDT_STATUS_T1_TIMEOUT_MASK (0x1) #define GENERIC_AND_FUSE_REG_CPTRA_WDT_STATUS_T2_TIMEOUT_LOW (1) #define GENERIC_AND_FUSE_REG_CPTRA_WDT_STATUS_T2_TIMEOUT_MASK (0x2) -#define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_FUSE_VALID_PAUSER (0x30030108) -#define GENERIC_AND_FUSE_REG_CPTRA_FUSE_VALID_PAUSER (0x108) -#define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_FUSE_PAUSER_LOCK (0x3003010c) -#define GENERIC_AND_FUSE_REG_CPTRA_FUSE_PAUSER_LOCK (0x10c) -#define GENERIC_AND_FUSE_REG_CPTRA_FUSE_PAUSER_LOCK_LOCK_LOW (0) -#define GENERIC_AND_FUSE_REG_CPTRA_FUSE_PAUSER_LOCK_LOCK_MASK (0x1) +#define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_FUSE_VALID_AXI_ID (0x30030108) +#define GENERIC_AND_FUSE_REG_CPTRA_FUSE_VALID_AXI_ID (0x108) +#define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_FUSE_AXI_ID_LOCK (0x3003010c) +#define GENERIC_AND_FUSE_REG_CPTRA_FUSE_AXI_ID_LOCK (0x10c) +#define GENERIC_AND_FUSE_REG_CPTRA_FUSE_AXI_ID_LOCK_LOCK_LOW (0) +#define GENERIC_AND_FUSE_REG_CPTRA_FUSE_AXI_ID_LOCK_LOCK_MASK (0x1) #define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_WDT_CFG_0 (0x30030110) #define GENERIC_AND_FUSE_REG_CPTRA_WDT_CFG_0 (0x110) #define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_WDT_CFG_1 (0x30030114) diff --git a/src/soc_ifc/rtl/caliptra_top_reg_defines.svh b/src/soc_ifc/rtl/caliptra_top_reg_defines.svh index 42d37dff7..e6445d61a 100644 --- a/src/soc_ifc/rtl/caliptra_top_reg_defines.svh +++ b/src/soc_ifc/rtl/caliptra_top_reg_defines.svh @@ -22,8 +22,8 @@ `define MBOX_CSR_MBOX_LOCK (32'h0) `define MBOX_CSR_MBOX_LOCK_LOCK_LOW (0) `define MBOX_CSR_MBOX_LOCK_LOCK_MASK (32'h1) -`define CALIPTRA_TOP_REG_MBOX_CSR_MBOX_USER (32'h30020004) -`define MBOX_CSR_MBOX_USER (32'h4) +`define CALIPTRA_TOP_REG_MBOX_CSR_MBOX_ID (32'h30020004) +`define MBOX_CSR_MBOX_ID (32'h4) `define CALIPTRA_TOP_REG_MBOX_CSR_MBOX_CMD (32'h30020008) `define MBOX_CSR_MBOX_CMD (32'h8) `define CALIPTRA_TOP_REG_MBOX_CSR_MBOX_DLEN (32'h3002000c) @@ -59,8 +59,8 @@ `define SHA512_ACC_CSR_LOCK (32'h0) `define SHA512_ACC_CSR_LOCK_LOCK_LOW (0) `define SHA512_ACC_CSR_LOCK_LOCK_MASK (32'h1) -`define CALIPTRA_TOP_REG_SHA512_ACC_CSR_USER (32'h30021004) -`define SHA512_ACC_CSR_USER (32'h4) +`define CALIPTRA_TOP_REG_SHA512_ACC_CSR_ID (32'h30021004) +`define SHA512_ACC_CSR_ID (32'h4) `define CALIPTRA_TOP_REG_SHA512_ACC_CSR_MODE (32'h30021008) `define SHA512_ACC_CSR_MODE (32'h8) `define SHA512_ACC_CSR_MODE_MODE_LOW (0) @@ -196,42 +196,42 @@ `define GENERIC_AND_FUSE_REG_CPTRA_SECURITY_STATE_SCAN_MODE_MASK (32'h8) `define GENERIC_AND_FUSE_REG_CPTRA_SECURITY_STATE_RSVD_LOW (4) `define GENERIC_AND_FUSE_REG_CPTRA_SECURITY_STATE_RSVD_MASK (32'hfffffff0) -`define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_PAUSER_0 (32'h30030048) -`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_PAUSER_0 (32'h48) -`define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_PAUSER_1 (32'h3003004c) -`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_PAUSER_1 (32'h4c) -`define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_PAUSER_2 (32'h30030050) -`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_PAUSER_2 (32'h50) -`define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_PAUSER_3 (32'h30030054) -`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_PAUSER_3 (32'h54) -`define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_PAUSER_4 (32'h30030058) -`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_PAUSER_4 (32'h58) -`define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_0 (32'h3003005c) -`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_0 (32'h5c) -`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_0_LOCK_LOW (0) -`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_0_LOCK_MASK (32'h1) -`define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_1 (32'h30030060) -`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_1 (32'h60) -`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_1_LOCK_LOW (0) -`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_1_LOCK_MASK (32'h1) -`define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_2 (32'h30030064) -`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_2 (32'h64) -`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_2_LOCK_LOW (0) -`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_2_LOCK_MASK (32'h1) -`define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_3 (32'h30030068) -`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_3 (32'h68) -`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_3_LOCK_LOW (0) -`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_3_LOCK_MASK (32'h1) -`define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_4 (32'h3003006c) -`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_4 (32'h6c) -`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_4_LOCK_LOW (0) -`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_PAUSER_LOCK_4_LOCK_MASK (32'h1) -`define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_TRNG_VALID_PAUSER (32'h30030070) -`define GENERIC_AND_FUSE_REG_CPTRA_TRNG_VALID_PAUSER (32'h70) -`define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_TRNG_PAUSER_LOCK (32'h30030074) -`define GENERIC_AND_FUSE_REG_CPTRA_TRNG_PAUSER_LOCK (32'h74) -`define GENERIC_AND_FUSE_REG_CPTRA_TRNG_PAUSER_LOCK_LOCK_LOW (0) -`define GENERIC_AND_FUSE_REG_CPTRA_TRNG_PAUSER_LOCK_LOCK_MASK (32'h1) +`define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_AXI_ID_0 (32'h30030048) +`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_AXI_ID_0 (32'h48) +`define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_AXI_ID_1 (32'h3003004c) +`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_AXI_ID_1 (32'h4c) +`define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_AXI_ID_2 (32'h30030050) +`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_AXI_ID_2 (32'h50) +`define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_AXI_ID_3 (32'h30030054) +`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_AXI_ID_3 (32'h54) +`define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_AXI_ID_4 (32'h30030058) +`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_VALID_AXI_ID_4 (32'h58) +`define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_0 (32'h3003005c) +`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_0 (32'h5c) +`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_0_LOCK_LOW (0) +`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_0_LOCK_MASK (32'h1) +`define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_1 (32'h30030060) +`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_1 (32'h60) +`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_1_LOCK_LOW (0) +`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_1_LOCK_MASK (32'h1) +`define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_2 (32'h30030064) +`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_2 (32'h64) +`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_2_LOCK_LOW (0) +`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_2_LOCK_MASK (32'h1) +`define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_3 (32'h30030068) +`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_3 (32'h68) +`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_3_LOCK_LOW (0) +`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_3_LOCK_MASK (32'h1) +`define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_4 (32'h3003006c) +`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_4 (32'h6c) +`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_4_LOCK_LOW (0) +`define GENERIC_AND_FUSE_REG_CPTRA_MBOX_AXI_ID_LOCK_4_LOCK_MASK (32'h1) +`define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_TRNG_VALID_AXI_ID (32'h30030070) +`define GENERIC_AND_FUSE_REG_CPTRA_TRNG_VALID_AXI_ID (32'h70) +`define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_TRNG_AXI_ID_LOCK (32'h30030074) +`define GENERIC_AND_FUSE_REG_CPTRA_TRNG_AXI_ID_LOCK (32'h74) +`define GENERIC_AND_FUSE_REG_CPTRA_TRNG_AXI_ID_LOCK_LOCK_LOW (0) +`define GENERIC_AND_FUSE_REG_CPTRA_TRNG_AXI_ID_LOCK_LOCK_MASK (32'h1) `define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_TRNG_DATA_0 (32'h30030078) `define GENERIC_AND_FUSE_REG_CPTRA_TRNG_DATA_0 (32'h78) `define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_TRNG_DATA_1 (32'h3003007c) @@ -342,12 +342,12 @@ `define GENERIC_AND_FUSE_REG_CPTRA_WDT_STATUS_T1_TIMEOUT_MASK (32'h1) `define GENERIC_AND_FUSE_REG_CPTRA_WDT_STATUS_T2_TIMEOUT_LOW (1) `define GENERIC_AND_FUSE_REG_CPTRA_WDT_STATUS_T2_TIMEOUT_MASK (32'h2) -`define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_FUSE_VALID_PAUSER (32'h30030108) -`define GENERIC_AND_FUSE_REG_CPTRA_FUSE_VALID_PAUSER (32'h108) -`define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_FUSE_PAUSER_LOCK (32'h3003010c) -`define GENERIC_AND_FUSE_REG_CPTRA_FUSE_PAUSER_LOCK (32'h10c) -`define GENERIC_AND_FUSE_REG_CPTRA_FUSE_PAUSER_LOCK_LOCK_LOW (0) -`define GENERIC_AND_FUSE_REG_CPTRA_FUSE_PAUSER_LOCK_LOCK_MASK (32'h1) +`define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_FUSE_VALID_AXI_ID (32'h30030108) +`define GENERIC_AND_FUSE_REG_CPTRA_FUSE_VALID_AXI_ID (32'h108) +`define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_FUSE_AXI_ID_LOCK (32'h3003010c) +`define GENERIC_AND_FUSE_REG_CPTRA_FUSE_AXI_ID_LOCK (32'h10c) +`define GENERIC_AND_FUSE_REG_CPTRA_FUSE_AXI_ID_LOCK_LOCK_LOW (0) +`define GENERIC_AND_FUSE_REG_CPTRA_FUSE_AXI_ID_LOCK_LOCK_MASK (32'h1) `define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_WDT_CFG_0 (32'h30030110) `define GENERIC_AND_FUSE_REG_CPTRA_WDT_CFG_0 (32'h110) `define CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_CPTRA_WDT_CFG_1 (32'h30030114) diff --git a/src/soc_ifc/rtl/mbox.sv b/src/soc_ifc/rtl/mbox.sv index 6ad3299b7..5d39dcdae 100644 --- a/src/soc_ifc/rtl/mbox.sv +++ b/src/soc_ifc/rtl/mbox.sv @@ -40,6 +40,12 @@ module mbox output mbox_sram_resp_t sha_sram_resp, output logic sha_sram_hold, // Throttle the SRAM requests when writing corrected ECC + input logic dma_sram_req_dv, + input soc_ifc_req_t dma_sram_req_data, + output logic [MBOX_DATA_W-1:0] dma_sram_rdata, + output logic dma_sram_hold, // Throttle the SRAM requests when SHA accel has access. + output logic dma_sram_error, + //SRAM interface output mbox_sram_req_t mbox_sram_req, input mbox_sram_resp_t mbox_sram_resp, @@ -48,6 +54,9 @@ module mbox output logic sram_single_ecc_error, output logic sram_double_ecc_error, + // Status + output logic uc_mbox_lock, + //interrupts output logic uc_mbox_data_avail, output logic soc_mbox_data_avail, @@ -118,6 +127,7 @@ logic mbox_protocol_sram_we; logic mbox_protocol_sram_rd, mbox_protocol_sram_rd_f; logic dir_req_dv_q, dir_req_rd_phase; logic dir_req_wr_ph; +logic dma_sram_req_dv_q, dma_sram_req_rd_phase; logic mask_rdata; logic [DEPTH_LOG2-1:0] dir_req_addr; @@ -256,7 +266,7 @@ always_comb begin : mbox_fsm_combo end // Flag a non-fatal error, but don't change states, if mbox is already IDLE // when an unexpected SOC access happens - if (req_dv && req_data.soc_req && !req_hold && (req_data.write || hwif_out.mbox_dataout.dataout.swacc)) begin + if (req_dv && req_data.soc_req && ~req_hold && (req_data.write || hwif_out.mbox_dataout.dataout.swacc)) begin mbox_protocol_error_nxt.axs_without_lock = 1'b1; end end @@ -289,7 +299,7 @@ always_comb begin : mbox_fsm_combo end MBOX_RDY_FOR_DATA: begin //update the write pointers to sram when accessing datain register - inc_wrptr = hwif_out.mbox_datain.datain.swmod & valid_requester; + inc_wrptr = hwif_out.mbox_datain.datain.swmod & valid_requester & ~req_hold; if (arc_MBOX_RDY_FOR_DATA_MBOX_EXECUTE_UC) begin mbox_fsm_ns = MBOX_EXECUTE_UC; //reset wrptr so receiver can write response @@ -318,8 +328,8 @@ always_comb begin : mbox_fsm_combo //only uC can write to datain here to respond to SoC MBOX_EXECUTE_UC: begin uc_mbox_data_avail = 1; - inc_rdptr = dmi_inc_rdptr | (hwif_out.mbox_dataout.dataout.swacc & ~req_data.soc_req); - inc_wrptr = hwif_out.mbox_datain.datain.swmod & ~req_data.soc_req; + inc_rdptr = dmi_inc_rdptr | (hwif_out.mbox_dataout.dataout.swacc & ~req_data.soc_req & ~req_hold); + inc_wrptr = hwif_out.mbox_datain.datain.swmod & ~req_data.soc_req & ~req_hold; if (arc_MBOX_EXECUTE_UC_MBOX_IDLE) begin mbox_fsm_ns = MBOX_IDLE; end @@ -345,7 +355,7 @@ always_comb begin : mbox_fsm_combo //Only SoC can write to datain here to respond to uC MBOX_EXECUTE_SOC: begin soc_mbox_data_avail = 1; - inc_rdptr = (dmi_inc_rdptr | (hwif_out.mbox_dataout.dataout.swacc & req_data.soc_req & valid_receiver)); + inc_rdptr = (dmi_inc_rdptr | (hwif_out.mbox_dataout.dataout.swacc & req_data.soc_req & valid_receiver & ~req_hold)); if (arc_MBOX_EXECUTE_SOC_MBOX_IDLE) begin mbox_fsm_ns = MBOX_IDLE; end @@ -397,6 +407,7 @@ always_ff @(posedge clk or negedge rst_b) begin mbox_fsm_ps <= MBOX_IDLE; soc_has_lock <= '0; dir_req_rd_phase <= '0; + dma_sram_req_rd_phase <= '0; mbox_wrptr <= '0; mbox_wr_full <= '0; mbox_rdptr <= '0; @@ -411,7 +422,8 @@ always_ff @(posedge clk or negedge rst_b) begin mbox_fsm_ps <= mbox_fsm_ns; soc_has_lock <= arc_MBOX_IDLE_MBOX_RDY_FOR_CMD ? soc_has_lock_nxt : hwif_out.mbox_lock.lock.value ? soc_has_lock : '0; - dir_req_rd_phase <= dir_req_dv_q & ~sha_sram_req_dv & ~req_data.write; + dir_req_rd_phase <= dir_req_dv_q & ~sha_sram_req_dv & ~(dma_sram_req_dv_q & dma_sram_req_data.write) & ~req_data.write; + dma_sram_req_rd_phase <= dma_sram_req_dv_q & ~sha_sram_req_dv & ~dma_sram_req_data.write; mbox_wrptr <= ((inc_wrptr & wrptr_inc_valid) | rst_mbox_wrptr) ? mbox_wrptr_nxt : mbox_wrptr; mbox_wr_full <= (inc_wrptr | rst_mbox_wrptr) ? mbox_wr_full_nxt : mbox_wr_full; mbox_rdptr <= (mbox_protocol_sram_rd) ? mbox_rdptr_nxt : mbox_rdptr; @@ -422,29 +434,42 @@ always_ff @(posedge clk or negedge rst_b) begin dlen_in_dws <= latch_dlen_in_dws ? dlen_in_dws_nxt : dlen_in_dws; mbox_protocol_error <= mbox_protocol_error_nxt; //enable ecc for mbox protocol, direct reads, or SHA direct reads - sram_rd_ecc_en <= mbox_protocol_sram_rd | (dir_req_dv_q & ~sha_sram_req_dv & ~req_data.write) | sha_sram_req_dv; + sram_rd_ecc_en <= mbox_protocol_sram_rd | (dir_req_dv_q & ~sha_sram_req_dv & ~req_data.write) | (dma_sram_req_dv_q & ~dma_sram_req_data.write) | sha_sram_req_dv; end end +always_comb uc_mbox_lock = hwif_out.mbox_lock.lock.value && ~soc_has_lock; + +always_comb dma_sram_req_dv_q = dma_sram_req_dv & hwif_out.mbox_lock.lock.value & ~soc_has_lock & ~dma_sram_req_rd_phase; //need to hold direct read accesses for 1 clock to get response //create a qualified direct request signal that is masked during the data phase //hold the interface to insert wait state when direct request comes //mask the request and hold the interface if SHA is using the mailbox //hold when a read to dataout is coming and we haven't updated the data yet always_comb dir_req_dv_q = (dir_req_dv & ~dir_req_rd_phase & hwif_out.mbox_lock.lock.value & (~soc_has_lock | (mbox_fsm_ps == MBOX_EXECUTE_UC))) | + (dma_sram_req_dv_q) | sha_sram_req_dv; -always_comb dir_req_wr_ph = dir_req_dv_q & ~sha_sram_req_dv & req_data.write; -always_comb dir_req_addr = sha_sram_req_dv ? sha_sram_req_addr : req_data.addr[DEPTH_LOG2+1:2]; +always_comb dir_req_wr_ph = dir_req_dv_q & ~sha_sram_req_dv & ((~dma_sram_req_dv_q & req_data.write) | (dma_sram_req_dv_q & dma_sram_req_data.write)); +always_comb dir_req_addr = sha_sram_req_dv ? sha_sram_req_addr : + dma_sram_req_dv_q ? dma_sram_req_data.addr : + req_data.addr[DEPTH_LOG2+1:2]; + +// Arb precedence: +// SHA accelerator: highest +// DMA (with lock): next +// Direct request: lowest +// No arbitration/round-robin -- this is strictly observed for every txn //Direct read from uC, stall 1 clock dv_q will be de-asserted second clock -always_comb req_hold = (dir_req_dv_q & ~sha_sram_req_dv & ~req_data.write) | - //Direct access from uC while sha accelerator is reading - (dir_req_dv & ~dir_req_rd_phase & sha_sram_req_dv) | +always_comb req_hold = (dir_req_dv_q & /*~sha_sram_req_dv & (~dma_sram_req_dv_q | dma_sram_req_rd_phase) &*/ ~req_data.write) | + //Direct access from uC while sha accelerator or DMA is accessing + (dir_req_dv & ~dir_req_rd_phase & (sha_sram_req_dv | dma_sram_req_dv_q)) | //in an update cycle for dataout register (hwif_out.mbox_dataout.dataout.swacc & mbox_protocol_sram_rd_f); +always_comb dma_sram_hold = sha_sram_req_dv; always_comb sha_sram_hold = 1'b0; //SRAM interface @@ -457,6 +482,9 @@ always_comb sram_waddr = dir_req_dv_q ? dir_req_addr : mbox_wrptr; //We want to mask the read data for certain accesses always_comb rdata = ({DATA_W{~mask_rdata}} & csr_rdata); always_comb dir_rdata = dir_req_rd_phase ? sram_rdata_cor : '0; +always_comb dma_sram_rdata = dma_sram_req_rd_phase ? sram_rdata_cor : '0; + +always_comb dma_sram_error = 1'b0; // TODO: ecc error? always_comb begin: mbox_sram_inf //read live on direct access, or when pointer has been incremented, for pre-load on read pointer reset, or ecc correction diff --git a/src/soc_ifc/rtl/soc_ifc_arb.sv b/src/soc_ifc/rtl/soc_ifc_arb.sv index e9ca24f98..4764ac412 100644 --- a/src/soc_ifc/rtl/soc_ifc_arb.sv +++ b/src/soc_ifc/rtl/soc_ifc_arb.sv @@ -48,6 +48,13 @@ module soc_ifc_arb output soc_ifc_req_t sha_req_data, input logic [SOC_IFC_DATA_W-1:0] sha_rdata, input logic sha_error, + // AXI DMA INF + output logic dma_reg_req_dv, + output soc_ifc_req_t dma_reg_req_data, + input logic dma_reg_req_hold, + input logic [SOC_IFC_DATA_W-1:0] dma_reg_rdata, + input logic dma_reg_error, + //SOC IFC REG inf output logic soc_ifc_reg_req_dv, input logic soc_ifc_reg_req_hold, @@ -66,30 +73,36 @@ logic req_collision; logic soc_mbox_req; logic soc_reg_req; logic soc_sha_req; +logic soc_dma_req; logic uc_mbox_req; logic uc_mbox_reg_req; logic uc_mbox_dir_req; logic uc_reg_req; logic uc_sha_req; +logic uc_dma_req; //grant for each request logic soc_mbox_gnt; logic soc_reg_gnt; logic soc_sha_gnt; +logic soc_dma_gnt; logic uc_mbox_gnt; logic uc_reg_gnt; logic uc_sha_gnt; +logic uc_dma_gnt; //track in-progress grants logic soc_mbox_req_ip; logic soc_reg_req_ip; logic soc_sha_req_ip; +logic soc_dma_req_ip; logic uc_mbox_req_ip; logic uc_reg_req_ip; logic uc_sha_req_ip; +logic uc_dma_req_ip; //filter mailbox requests by id logic valid_mbox_req; @@ -104,10 +117,12 @@ always_ff @(posedge clk or negedge rst_b) begin soc_mbox_req_ip <= '0; soc_reg_req_ip <= '0; soc_sha_req_ip <= '0; + soc_dma_req_ip <= '0; uc_mbox_req_ip <= '0; uc_reg_req_ip <= '0; uc_sha_req_ip <= '0; + uc_dma_req_ip <= '0; end else begin soc_has_priority <= toggle_priority ? ~soc_has_priority : soc_has_priority; @@ -115,10 +130,12 @@ always_ff @(posedge clk or negedge rst_b) begin soc_mbox_req_ip <= soc_mbox_gnt & mbox_req_hold; soc_reg_req_ip <= soc_reg_gnt & soc_ifc_reg_req_hold; soc_sha_req_ip <= soc_sha_gnt & sha_req_hold; + soc_dma_req_ip <= soc_dma_gnt & dma_reg_req_hold; uc_mbox_req_ip <= uc_mbox_gnt & mbox_req_hold; uc_reg_req_ip <= uc_reg_gnt & soc_ifc_reg_req_hold; uc_sha_req_ip <= uc_sha_gnt & sha_req_hold; + uc_dma_req_ip <= uc_dma_gnt & dma_reg_req_hold; end end @@ -146,6 +163,10 @@ always_comb soc_reg_req = (soc_req_dv & (soc_req_data.addr inside {[SOC_IFC_REG_ always_comb uc_sha_req = (uc_req_dv & (uc_req_data.addr inside {[SHA_REG_START_ADDR:SHA_REG_END_ADDR]})); always_comb soc_sha_req = (soc_req_dv & (soc_req_data.addr inside {[SHA_REG_START_ADDR:SHA_REG_END_ADDR]})); +// Requests to DMA +always_comb uc_dma_req = (uc_req_dv & (uc_req_data.addr inside {[DMA_REG_START_ADDR:DMA_REG_END_ADDR]})); +always_comb soc_dma_req = (soc_req_dv & (soc_req_data.addr inside {[DMA_REG_START_ADDR:DMA_REG_END_ADDR]})); + //Check if SoC request is coming from a valid id //There are 5 valid id registers, check if id attribute matches any of them //Check if id matches Default Valid id parameter - this id value is always valid @@ -161,13 +182,15 @@ end //don't toggle priority if the request was held always_comb req_collision = (uc_mbox_req & soc_mbox_req & ~mbox_req_hold) | (uc_reg_req & soc_reg_req & ~soc_ifc_reg_req_hold) | - (uc_sha_req & soc_sha_req & ~sha_req_hold); + (uc_sha_req & soc_sha_req & ~sha_req_hold) | + (uc_dma_req & soc_dma_req & ~dma_reg_req_hold); //drive the dv to the appropriate destination if either client is trying to always_comb mbox_req_dv = uc_mbox_reg_req | soc_mbox_req; always_comb mbox_dir_req_dv = uc_mbox_dir_req & uc_mbox_gnt; always_comb soc_ifc_reg_req_dv = uc_reg_req | soc_reg_req; always_comb sha_req_dv = uc_sha_req | soc_sha_req; +always_comb dma_reg_req_dv = uc_dma_req | soc_dma_req; //determine which requests get granted //if a request is colliding with another, grant the one with priority @@ -176,10 +199,12 @@ always_comb sha_req_dv = uc_sha_req | soc_sha_req; always_comb soc_mbox_gnt = soc_mbox_req & (~uc_mbox_req | soc_has_priority) & ~uc_mbox_req_ip; always_comb soc_reg_gnt = soc_reg_req & (~uc_reg_req | soc_has_priority) & ~uc_reg_req_ip; always_comb soc_sha_gnt = soc_sha_req & (~uc_sha_req | soc_has_priority) & ~uc_sha_req_ip; +always_comb soc_dma_gnt = soc_dma_req & (~uc_dma_req | soc_has_priority) & ~uc_dma_req_ip; always_comb uc_mbox_gnt = uc_mbox_req & (~soc_mbox_req | uc_has_priority) & ~soc_mbox_req_ip; always_comb uc_reg_gnt = uc_reg_req & (~soc_reg_req | uc_has_priority) & ~soc_reg_req_ip; always_comb uc_sha_gnt = uc_sha_req & (~soc_sha_req | uc_has_priority) & ~soc_sha_req_ip; +always_comb uc_dma_gnt = uc_dma_req & (~soc_dma_req | uc_has_priority) & ~soc_dma_req_ip; //drive the appropriate request to each destination always_comb mbox_req_data = ({$bits(soc_ifc_req_t){soc_mbox_gnt}} & soc_req_data) | @@ -191,36 +216,45 @@ always_comb soc_ifc_reg_req_data = ({$bits(soc_ifc_req_t){soc_reg_gnt}} & soc_re always_comb sha_req_data = ({$bits(soc_ifc_req_t){soc_sha_gnt}} & soc_req_data) | ({$bits(soc_ifc_req_t){uc_sha_gnt}} & uc_req_data); +always_comb dma_reg_req_data = ({$bits(soc_ifc_req_t){soc_dma_gnt}} & soc_req_data) | + ({$bits(soc_ifc_req_t){uc_dma_gnt}} & uc_req_data); + //drive the appropriate read data back to uc or soc //AND/OR mux here, assert that requests are always mutex always_comb uc_rdata = ({MBOX_DATA_W{uc_mbox_reg_req}} & mbox_rdata) | ({MBOX_DATA_W{uc_mbox_dir_req}} & mbox_dir_rdata) | ({MBOX_DATA_W{uc_reg_req}} & soc_ifc_reg_rdata) | - ({MBOX_DATA_W{uc_sha_req}} & sha_rdata); + ({MBOX_DATA_W{uc_sha_req}} & sha_rdata) | + ({MBOX_DATA_W{uc_dma_req}} & dma_reg_rdata); always_comb soc_rdata = ({MBOX_DATA_W{soc_mbox_req}} & mbox_rdata) | ({MBOX_DATA_W{soc_reg_req}} & soc_ifc_reg_rdata) | - ({MBOX_DATA_W{soc_sha_req}} & sha_rdata); + ({MBOX_DATA_W{soc_sha_req}} & sha_rdata) | + ({MBOX_DATA_W{soc_dma_req}} & dma_reg_rdata); //drive the appropraite holds back to uc or soc //AND/OR mux here, assert that requests are always mutex always_comb uc_req_hold = (uc_mbox_req & (~uc_mbox_gnt | mbox_req_hold)) | (uc_reg_req & (~uc_reg_gnt | soc_ifc_reg_req_hold)) | - (uc_sha_req & (~ uc_sha_gnt | sha_req_hold)); + (uc_sha_req & (~ uc_sha_gnt | sha_req_hold)) | + (uc_dma_req & (~ uc_dma_gnt | dma_reg_req_hold)); always_comb soc_req_hold = (soc_mbox_req & (~soc_mbox_gnt | mbox_req_hold)) | (soc_reg_req & (~soc_reg_gnt | soc_ifc_reg_req_hold)) | - (soc_sha_req & (~soc_sha_gnt | sha_req_hold)); + (soc_sha_req & (~soc_sha_gnt | sha_req_hold)) | + (soc_dma_req & (~soc_dma_gnt | dma_reg_req_hold)); //Assert error when requested client drives error back, or a request is made that doesn't map to any of the clients always_comb uc_error = (uc_mbox_gnt & mbox_error) | (uc_reg_gnt & soc_ifc_reg_error) | (uc_sha_gnt & sha_error) | - (uc_req_dv & ~(uc_mbox_req | uc_reg_req | uc_sha_req)); + (uc_dma_gnt & dma_reg_error) | + (uc_req_dv & ~(uc_mbox_req | uc_reg_req | uc_sha_req | uc_dma_req)); always_comb soc_error = (soc_mbox_gnt & mbox_error) | (soc_reg_gnt & soc_ifc_reg_error) | (soc_sha_gnt & sha_error) | - (soc_req_dv & ~(soc_mbox_req | soc_reg_req | soc_sha_req)); + (soc_dma_gnt & dma_reg_error) | + (soc_req_dv & ~(soc_mbox_req | soc_reg_req | soc_sha_req | soc_dma_req)); endmodule diff --git a/src/soc_ifc/rtl/soc_ifc_pkg.sv b/src/soc_ifc/rtl/soc_ifc_pkg.sv index a95f6c503..d89394301 100644 --- a/src/soc_ifc/rtl/soc_ifc_pkg.sv +++ b/src/soc_ifc/rtl/soc_ifc_pkg.sv @@ -15,7 +15,7 @@ `ifndef SOC_IFC_PKG `define SOC_IFC_PKG -`include "caliptra_top_reg_defines.svh" +`include "caliptra_reg_defines.svh" package soc_ifc_pkg; @@ -33,6 +33,10 @@ package soc_ifc_pkg; parameter MBOX_DEPTH = (MBOX_SIZE_KB * 1024 * 8) / MBOX_DATA_W; parameter MBOX_ADDR_W = $clog2(MBOX_DEPTH); + parameter CPTRA_AXI_DMA_DATA_WIDTH = 32; + parameter CPTRA_AXI_DMA_ID_WIDTH = 5; + parameter CPTRA_AXI_DMA_USER_WIDTH = 32; + parameter WDT_TIMEOUT_PERIOD_NUM_DWORDS = 2; parameter WDT_TIMEOUT_PERIOD_W = WDT_TIMEOUT_PERIOD_NUM_DWORDS * 32; @@ -41,11 +45,13 @@ package soc_ifc_pkg; //memory map parameter MBOX_DIR_START_ADDR = 32'h0000_0000; parameter MBOX_DIR_END_ADDR = 32'h0001_FFFF; - parameter MBOX_REG_START_ADDR = `CALIPTRA_TOP_REG_MBOX_CSR_BASE_ADDR - SOC_IFC_REG_OFFSET; + parameter MBOX_REG_START_ADDR = `CLP_MBOX_CSR_BASE_ADDR - SOC_IFC_REG_OFFSET; parameter MBOX_REG_END_ADDR = MBOX_REG_START_ADDR + 32'h0000_0FFF; - parameter SHA_REG_START_ADDR = `CALIPTRA_TOP_REG_SHA512_ACC_CSR_BASE_ADDR - SOC_IFC_REG_OFFSET; + parameter SHA_REG_START_ADDR = `CLP_SHA512_ACC_CSR_BASE_ADDR - SOC_IFC_REG_OFFSET; parameter SHA_REG_END_ADDR = SHA_REG_START_ADDR + 32'h0000_0FFF; - parameter SOC_IFC_REG_START_ADDR = `CALIPTRA_TOP_REG_GENERIC_AND_FUSE_REG_BASE_ADDR - SOC_IFC_REG_OFFSET; + parameter DMA_REG_START_ADDR = `CLP_AXI_DMA_REG_BASE_ADDR - SOC_IFC_REG_OFFSET; + parameter DMA_REG_END_ADDR = DMA_REG_START_ADDR + 32'h0000_0FFF; + parameter SOC_IFC_REG_START_ADDR = `CLP_SOC_IFC_REG_BASE_ADDR - SOC_IFC_REG_OFFSET; parameter SOC_IFC_REG_END_ADDR = SOC_IFC_REG_START_ADDR + 32'h0000_FFFF; parameter SOC_IFC_FUSE_START_ADDR = SOC_IFC_REG_START_ADDR + 32'h0000_0200; parameter SOC_IFC_FUSE_END_ADDR = SOC_IFC_REG_START_ADDR + 32'h0000_05FF; diff --git a/src/soc_ifc/rtl/soc_ifc_top.sv b/src/soc_ifc/rtl/soc_ifc_top.sv index bcdd28dd6..d2d46922a 100644 --- a/src/soc_ifc/rtl/soc_ifc_top.sv +++ b/src/soc_ifc/rtl/soc_ifc_top.sv @@ -26,6 +26,10 @@ module soc_ifc_top ,parameter AXI_USER_WIDTH = 32 ,parameter AHB_ADDR_WIDTH = 18 ,parameter AHB_DATA_WIDTH = 32 + ,parameter AXIM_ADDR_WIDTH = 48 + ,parameter AXIM_DATA_WIDTH = 32 + ,parameter AXIM_ID_WIDTH = 5 + ,parameter AXIM_USER_WIDTH = 32 ) ( input logic clk, @@ -44,6 +48,8 @@ module soc_ifc_top output logic mailbox_data_avail, output logic mailbox_flow_done, + input logic recovery_data_avail, + input var security_state_t security_state, input logic [1:0][31:0] generic_input_wires, @@ -54,17 +60,6 @@ module soc_ifc_top axi_if.w_sub s_axi_w_if, axi_if.r_sub s_axi_r_if, -// //SoC APB Interface -// input logic [APB_ADDR_WIDTH-1:0] paddr_i, -// input logic psel_i, -// input logic penable_i, -// input logic pwrite_i, -// input logic [APB_DATA_WIDTH-1:0] pwdata_i, -// input logic [APB_USER_WIDTH-1:0] pauser_i, -// output logic pready_o, -// output logic [APB_DATA_WIDTH-1:0] prdata_o, -// output logic pslverr_o, - //uC AHB Lite Interface input logic [AHB_ADDR_WIDTH-1:0] haddr_i, input logic [AHB_DATA_WIDTH-1:0] hwdata_i, @@ -78,6 +73,10 @@ module soc_ifc_top output logic hreadyout_o, output logic [AHB_DATA_WIDTH-1:0] hrdata_o, + // AXI Manager INF + axi_if.w_mgr m_axi_w_if, + axi_if.r_mgr m_axi_r_if, + //SoC Interrupts output logic cptra_error_fatal, output logic cptra_error_non_fatal, @@ -88,6 +87,8 @@ module soc_ifc_top output wire soc_ifc_notif_intr, output wire sha_error_intr, output wire sha_notif_intr, + output wire dma_error_intr, + output wire dma_notif_intr, output wire timer_intr, //SRAM interface @@ -160,6 +161,13 @@ soc_ifc_req_t sha_req_data; logic [SOC_IFC_DATA_W-1:0] sha_rdata; logic sha_error; +//DMA reg inf +logic dma_reg_req_dv; +logic dma_reg_req_hold; +soc_ifc_req_t dma_reg_req_data; +logic [SOC_IFC_DATA_W-1:0] dma_reg_rdata; +logic dma_reg_error; + //mbox reg inf logic soc_ifc_reg_req_dv; logic soc_ifc_reg_req_hold; @@ -173,6 +181,13 @@ logic [MBOX_ADDR_W-1:0] sha_sram_req_addr; mbox_sram_resp_t sha_sram_resp; logic sha_sram_hold; +//DMA SRAM direct inf +logic dma_sram_req_dv; +logic dma_sram_req_hold; +soc_ifc_req_t dma_sram_req_data; +logic [SOC_IFC_DATA_W-1:0] dma_sram_rdata; +logic dma_sram_error; + logic [4:0][AXI_ID_WIDTH-1:0] valid_mbox_ids; // Pulse signals to trigger interrupts @@ -190,6 +205,7 @@ logic [1:0] generic_input_toggle; mbox_protocol_error_t mbox_protocol_error; logic mbox_inv_id_p; +logic uc_mbox_lock; logic iccm_unlock; logic fw_upd_rst_executed; logic fuse_wr_done_reg_write_observed; @@ -286,17 +302,18 @@ axi_sub #( .s_axi_r_if(s_axi_r_if), //COMPONENT INF - .dv (soc_req_dv ), - .addr (soc_req.addr ), // Byte address - .write(soc_req.write), - .user (/*soc_req.user*/), - .id (soc_req.id ), - .wdata(soc_req.wdata), // Requires: Component dwidth == AXI dwidth - .wstrb(soc_req.wstrb), // Requires: Component dwidth == AXI dwidth - .rdata(soc_req_rdata), // Requires: Component dwidth == AXI dwidth - .last ( ), // Asserted with final 'dv' of a burst - .hld (soc_req_hold ), - .err (soc_req_error) + .dv (soc_req_dv ), + .addr (soc_req.addr ), // Byte address + .write (soc_req.write ), + .user (/*soc_req.user*/), + .id (soc_req.id ), + .wdata (soc_req.wdata ), // Requires: Component dwidth == AXI dwidth + .wstrb (soc_req.wstrb ), // Requires: Component dwidth == AXI dwidth + .rdata (soc_req_rdata ), // Requires: Component dwidth == AXI dwidth + .last ( ), // Asserted with final 'dv' of a burst + .hld (soc_req_hold ), + .rd_err(soc_req_error ), + .wr_err(soc_req_error ) ); //req from axi is for soc always @@ -382,6 +399,13 @@ soc_ifc_arb #( .sha_req_data(sha_req_data), .sha_rdata(sha_rdata), .sha_error(sha_error), + //DMA inf + .dma_reg_req_dv (dma_reg_req_dv ), + .dma_reg_req_data(dma_reg_req_data), + .dma_reg_req_hold(dma_reg_req_hold), + .dma_reg_rdata (dma_reg_rdata ), + .dma_reg_error (dma_reg_error ), + //FUNC reg inf .soc_ifc_reg_req_dv(soc_ifc_reg_req_dv), .soc_ifc_reg_req_hold(soc_ifc_reg_req_hold), @@ -837,10 +861,16 @@ i_mbox ( .sha_sram_req_addr(sha_sram_req_addr), .sha_sram_resp(sha_sram_resp), .sha_sram_hold(sha_sram_hold), + .dma_sram_req_dv (dma_sram_req_dv ), + .dma_sram_req_data(dma_sram_req_data), + .dma_sram_rdata (dma_sram_rdata ), + .dma_sram_hold (dma_sram_req_hold), + .dma_sram_error (dma_sram_error ), .mbox_sram_req(mbox_sram_req), .mbox_sram_resp(mbox_sram_resp), .sram_single_ecc_error(sram_single_ecc_error), .sram_double_ecc_error(sram_double_ecc_error), + .uc_mbox_lock(uc_mbox_lock), .soc_mbox_data_avail(mailbox_data_avail), .uc_mbox_data_avail(uc_mbox_data_avail), .soc_req_mbox_lock(soc_req_mbox_lock), @@ -850,6 +880,50 @@ i_mbox ( .dmi_reg(mbox_dmi_reg) ); +// AXI Manager (DMA) +axi_dma_top #( + .AW(AXIM_ADDR_WIDTH), // Addr Width + .DW(AXIM_DATA_WIDTH), // Data Width + .UW(AXIM_USER_WIDTH), // User Width + .IW(AXIM_ID_WIDTH) // ID Width +) i_axi_dma ( + .clk (clk ), + .cptra_pwrgood(cptra_pwrgood ), + .rst_n (cptra_noncore_rst_b), + + // Recovery INF Interrupt + // Should only assert when a full block_size of data is available at the + // recovery interface FIFO + .recovery_data_avail(recovery_data_avail), + + // SOC_IFC Internal Signaling + .mbox_lock(uc_mbox_lock), + .sha_lock (1'b0 /*FIXME*/ ), + + // AXI INF + .m_axi_w_if(m_axi_w_if), + .m_axi_r_if(m_axi_r_if), + + // Component INF + .dv (dma_reg_req_dv ), + .req_data(dma_reg_req_data), + .hold (dma_reg_req_hold), + .rdata (dma_reg_rdata ), + .error (dma_reg_error ), + + // Mailbox SRAM INF + .mb_dv (dma_sram_req_dv ), + .mb_hold (dma_sram_req_hold), + .mb_error(dma_sram_error ), + .mb_data (dma_sram_req_data), + .mb_rdata(dma_sram_rdata ), + + // Interrupt + .notif_intr(dma_notif_intr), + .error_intr(dma_error_intr) + +); + //------------------------- //Watchdog timer //------------------------- From 67adfedc3491c42bd2d50dc51ca455427be589c1 Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Fri, 19 Jul 2024 10:24:51 -0700 Subject: [PATCH 37/58] Updates for AXI DMA connections --- src/integration/config/compile.yml | 2 +- src/integration/rtl/caliptra_reg.h | 326 ++++++++++++++++--- src/integration/rtl/caliptra_reg.rdl | 2 + src/integration/rtl/caliptra_reg_defines.svh | 326 ++++++++++++++++--- src/integration/rtl/caliptra_top.sv | 38 ++- src/integration/rtl/config_defines.svh | 5 +- 6 files changed, 598 insertions(+), 101 deletions(-) diff --git a/src/integration/config/compile.yml b/src/integration/config/compile.yml index 2058ddde3..3ed726ba8 100644 --- a/src/integration/config/compile.yml +++ b/src/integration/config/compile.yml @@ -18,7 +18,6 @@ schema_version: 2.4.0 requires: - caliptra_top_defines - libs - - axi_sub - kv_defines_pkg - pv_defines_pkg - dv_defines_pkg @@ -66,6 +65,7 @@ schema_version: 2.4.0 requires: - asserts - libs + - caliptra_axi_sram - spiflash - caliptra_top - el2_veer_pkg diff --git a/src/integration/rtl/caliptra_reg.h b/src/integration/rtl/caliptra_reg.h index 1354a0b6e..9099d2fdb 100644 --- a/src/integration/rtl/caliptra_reg.h +++ b/src/integration/rtl/caliptra_reg.h @@ -5179,8 +5179,8 @@ #define MBOX_CSR_MBOX_LOCK (0x0) #define MBOX_CSR_MBOX_LOCK_LOCK_LOW (0) #define MBOX_CSR_MBOX_LOCK_LOCK_MASK (0x1) -#define CLP_MBOX_CSR_MBOX_USER (0x30020004) -#define MBOX_CSR_MBOX_USER (0x4) +#define CLP_MBOX_CSR_MBOX_ID (0x30020004) +#define MBOX_CSR_MBOX_ID (0x4) #define CLP_MBOX_CSR_MBOX_CMD (0x30020008) #define MBOX_CSR_MBOX_CMD (0x8) #define CLP_MBOX_CSR_MBOX_DLEN (0x3002000c) @@ -5216,8 +5216,8 @@ #define SHA512_ACC_CSR_LOCK (0x0) #define SHA512_ACC_CSR_LOCK_LOCK_LOW (0) #define SHA512_ACC_CSR_LOCK_LOCK_MASK (0x1) -#define CLP_SHA512_ACC_CSR_USER (0x30021004) -#define SHA512_ACC_CSR_USER (0x4) +#define CLP_SHA512_ACC_CSR_ID (0x30021004) +#define SHA512_ACC_CSR_ID (0x4) #define CLP_SHA512_ACC_CSR_MODE (0x30021008) #define SHA512_ACC_CSR_MODE (0x8) #define SHA512_ACC_CSR_MODE_MODE_LOW (0) @@ -5363,6 +5363,240 @@ #define SHA512_ACC_CSR_INTR_BLOCK_RF_NOTIF_CMD_DONE_INTR_COUNT_INCR_R (0xa10) #define SHA512_ACC_CSR_INTR_BLOCK_RF_NOTIF_CMD_DONE_INTR_COUNT_INCR_R_PULSE_LOW (0) #define SHA512_ACC_CSR_INTR_BLOCK_RF_NOTIF_CMD_DONE_INTR_COUNT_INCR_R_PULSE_MASK (0x1) +#define CLP_AXI_DMA_REG_BASE_ADDR (0x30022000) +#define CLP_AXI_DMA_REG_ID (0x30022000) +#define AXI_DMA_REG_ID (0x0) +#define CLP_AXI_DMA_REG_CAP (0x30022004) +#define AXI_DMA_REG_CAP (0x4) +#define CLP_AXI_DMA_REG_CTRL (0x30022008) +#define AXI_DMA_REG_CTRL (0x8) +#define AXI_DMA_REG_CTRL_GO_LOW (0) +#define AXI_DMA_REG_CTRL_GO_MASK (0x1) +#define AXI_DMA_REG_CTRL_FLUSH_LOW (1) +#define AXI_DMA_REG_CTRL_FLUSH_MASK (0x2) +#define AXI_DMA_REG_CTRL_RSVD0_LOW (2) +#define AXI_DMA_REG_CTRL_RSVD0_MASK (0xfffc) +#define AXI_DMA_REG_CTRL_RD_ROUTE_LOW (16) +#define AXI_DMA_REG_CTRL_RD_ROUTE_MASK (0x30000) +#define AXI_DMA_REG_CTRL_RSVD1_LOW (18) +#define AXI_DMA_REG_CTRL_RSVD1_MASK (0xc0000) +#define AXI_DMA_REG_CTRL_RD_FIXED_LOW (20) +#define AXI_DMA_REG_CTRL_RD_FIXED_MASK (0x100000) +#define AXI_DMA_REG_CTRL_RSVD2_LOW (21) +#define AXI_DMA_REG_CTRL_RSVD2_MASK (0xe00000) +#define AXI_DMA_REG_CTRL_WR_ROUTE_LOW (24) +#define AXI_DMA_REG_CTRL_WR_ROUTE_MASK (0x3000000) +#define AXI_DMA_REG_CTRL_RSVD3_LOW (26) +#define AXI_DMA_REG_CTRL_RSVD3_MASK (0xc000000) +#define AXI_DMA_REG_CTRL_WR_FIXED_LOW (28) +#define AXI_DMA_REG_CTRL_WR_FIXED_MASK (0x10000000) +#define AXI_DMA_REG_CTRL_RSVD4_LOW (29) +#define AXI_DMA_REG_CTRL_RSVD4_MASK (0xe0000000) +#define CLP_AXI_DMA_REG_STATUS0 (0x3002200c) +#define AXI_DMA_REG_STATUS0 (0xc) +#define AXI_DMA_REG_STATUS0_BUSY_LOW (0) +#define AXI_DMA_REG_STATUS0_BUSY_MASK (0x1) +#define AXI_DMA_REG_STATUS0_ERROR_LOW (1) +#define AXI_DMA_REG_STATUS0_ERROR_MASK (0x2) +#define AXI_DMA_REG_STATUS0_RSVD0_LOW (2) +#define AXI_DMA_REG_STATUS0_RSVD0_MASK (0xfffc) +#define AXI_DMA_REG_STATUS0_AXI_DMA_FSM_PS_LOW (16) +#define AXI_DMA_REG_STATUS0_AXI_DMA_FSM_PS_MASK (0x30000) +#define AXI_DMA_REG_STATUS0_RSVD1_LOW (18) +#define AXI_DMA_REG_STATUS0_RSVD1_MASK (0xfffc0000) +#define CLP_AXI_DMA_REG_STATUS1 (0x30022010) +#define AXI_DMA_REG_STATUS1 (0x10) +#define CLP_AXI_DMA_REG_SRC_ADDR_L (0x30022014) +#define AXI_DMA_REG_SRC_ADDR_L (0x14) +#define CLP_AXI_DMA_REG_SRC_ADDR_H (0x30022018) +#define AXI_DMA_REG_SRC_ADDR_H (0x18) +#define CLP_AXI_DMA_REG_DST_ADDR_L (0x3002201c) +#define AXI_DMA_REG_DST_ADDR_L (0x1c) +#define CLP_AXI_DMA_REG_DST_ADDR_H (0x30022020) +#define AXI_DMA_REG_DST_ADDR_H (0x20) +#define CLP_AXI_DMA_REG_BYTE_COUNT (0x30022024) +#define AXI_DMA_REG_BYTE_COUNT (0x24) +#define CLP_AXI_DMA_REG_BLOCK_SIZE (0x30022028) +#define AXI_DMA_REG_BLOCK_SIZE (0x28) +#define AXI_DMA_REG_BLOCK_SIZE_SIZE_LOW (0) +#define AXI_DMA_REG_BLOCK_SIZE_SIZE_MASK (0xfff) +#define AXI_DMA_REG_BLOCK_SIZE_RSVD_LOW (12) +#define AXI_DMA_REG_BLOCK_SIZE_RSVD_MASK (0xfffff000) +#define CLP_AXI_DMA_REG_WRITE_DATA (0x3002202c) +#define AXI_DMA_REG_WRITE_DATA (0x2c) +#define CLP_AXI_DMA_REG_READ_DATA (0x30022030) +#define AXI_DMA_REG_READ_DATA (0x30) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_START (0x30022800) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_GLOBAL_INTR_EN_R (0x30022800) +#define AXI_DMA_REG_INTR_BLOCK_RF_GLOBAL_INTR_EN_R (0x800) +#define AXI_DMA_REG_INTR_BLOCK_RF_GLOBAL_INTR_EN_R_ERROR_EN_LOW (0) +#define AXI_DMA_REG_INTR_BLOCK_RF_GLOBAL_INTR_EN_R_ERROR_EN_MASK (0x1) +#define AXI_DMA_REG_INTR_BLOCK_RF_GLOBAL_INTR_EN_R_NOTIF_EN_LOW (1) +#define AXI_DMA_REG_INTR_BLOCK_RF_GLOBAL_INTR_EN_R_NOTIF_EN_MASK (0x2) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R (0x30022804) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R (0x804) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_CMD_DEC_EN_LOW (0) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_CMD_DEC_EN_MASK (0x1) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_AXI_RD_EN_LOW (1) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_AXI_RD_EN_MASK (0x2) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_AXI_WR_EN_LOW (2) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_AXI_WR_EN_MASK (0x4) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_MBOX_LOCK_EN_LOW (3) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_MBOX_LOCK_EN_MASK (0x8) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_SHA_LOCK_EN_LOW (4) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_SHA_LOCK_EN_MASK (0x10) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_FIFO_OFLOW_EN_LOW (5) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_FIFO_OFLOW_EN_MASK (0x20) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_FIFO_UFLOW_EN_LOW (6) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_FIFO_UFLOW_EN_MASK (0x40) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R (0x30022808) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R (0x808) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R_NOTIF_TXN_DONE_EN_LOW (0) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R_NOTIF_TXN_DONE_EN_MASK (0x1) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R_NOTIF_FIFO_EMPTY_EN_LOW (1) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R_NOTIF_FIFO_EMPTY_EN_MASK (0x2) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R_NOTIF_FIFO_NOT_EMPTY_EN_LOW (2) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R_NOTIF_FIFO_NOT_EMPTY_EN_MASK (0x4) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R_NOTIF_FIFO_FULL_EN_LOW (3) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R_NOTIF_FIFO_FULL_EN_MASK (0x8) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R_NOTIF_FIFO_NOT_FULL_EN_LOW (4) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R_NOTIF_FIFO_NOT_FULL_EN_MASK (0x10) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_GLOBAL_INTR_R (0x3002280c) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_GLOBAL_INTR_R (0x80c) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_GLOBAL_INTR_R_AGG_STS_LOW (0) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_GLOBAL_INTR_R_AGG_STS_MASK (0x1) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_GLOBAL_INTR_R (0x30022810) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_GLOBAL_INTR_R (0x810) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_GLOBAL_INTR_R_AGG_STS_LOW (0) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_GLOBAL_INTR_R_AGG_STS_MASK (0x1) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R (0x30022814) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R (0x814) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_CMD_DEC_STS_LOW (0) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_CMD_DEC_STS_MASK (0x1) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_AXI_RD_STS_LOW (1) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_AXI_RD_STS_MASK (0x2) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_AXI_WR_STS_LOW (2) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_AXI_WR_STS_MASK (0x4) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_MBOX_LOCK_STS_LOW (3) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_MBOX_LOCK_STS_MASK (0x8) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_SHA_LOCK_STS_LOW (4) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_SHA_LOCK_STS_MASK (0x10) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_FIFO_OFLOW_STS_LOW (5) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_FIFO_OFLOW_STS_MASK (0x20) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_FIFO_UFLOW_STS_LOW (6) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_FIFO_UFLOW_STS_MASK (0x40) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R (0x30022818) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R (0x818) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_TXN_DONE_STS_LOW (0) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_TXN_DONE_STS_MASK (0x1) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_FIFO_EMPTY_STS_LOW (1) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_FIFO_EMPTY_STS_MASK (0x2) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_FIFO_NOT_EMPTY_STS_LOW (2) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_FIFO_NOT_EMPTY_STS_MASK (0x4) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_FIFO_FULL_STS_LOW (3) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_FIFO_FULL_STS_MASK (0x8) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_FIFO_NOT_FULL_STS_LOW (4) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_FIFO_NOT_FULL_STS_MASK (0x10) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R (0x3002281c) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R (0x81c) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R_ERROR_CMD_DEC_TRIG_LOW (0) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R_ERROR_CMD_DEC_TRIG_MASK (0x1) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R_ERROR_AXI_RD_TRIG_LOW (1) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R_ERROR_AXI_RD_TRIG_MASK (0x2) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R_ERROR_AXI_WR_TRIG_LOW (2) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R_ERROR_AXI_WR_TRIG_MASK (0x4) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R_ERROR_MBOX_LOCK_TRIG_LOW (3) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R_ERROR_MBOX_LOCK_TRIG_MASK (0x8) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R_ERROR_SHA_LOCK_TRIG_LOW (4) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R_ERROR_SHA_LOCK_TRIG_MASK (0x10) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R_ERROR_FIFO_OFLOW_TRIG_LOW (5) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R_ERROR_FIFO_OFLOW_TRIG_MASK (0x20) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R_ERROR_FIFO_UFLOW_TRIG_LOW (6) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R_ERROR_FIFO_UFLOW_TRIG_MASK (0x40) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_TRIG_R (0x30022820) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_TRIG_R (0x820) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_TRIG_R_NOTIF_TXN_DONE_TRIG_LOW (0) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_TRIG_R_NOTIF_TXN_DONE_TRIG_MASK (0x1) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_TRIG_R_NOTIF_FIFO_EMPTY_TRIG_LOW (1) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_TRIG_R_NOTIF_FIFO_EMPTY_TRIG_MASK (0x2) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_TRIG_R_NOTIF_FIFO_NOT_EMPTY_TRIG_LOW (2) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_TRIG_R_NOTIF_FIFO_NOT_EMPTY_TRIG_MASK (0x4) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_TRIG_R_NOTIF_FIFO_FULL_TRIG_LOW (3) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_TRIG_R_NOTIF_FIFO_FULL_TRIG_MASK (0x8) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_TRIG_R_NOTIF_FIFO_NOT_FULL_TRIG_LOW (4) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_TRIG_R_NOTIF_FIFO_NOT_FULL_TRIG_MASK (0x10) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_CMD_DEC_INTR_COUNT_R (0x30022900) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_CMD_DEC_INTR_COUNT_R (0x900) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_AXI_RD_INTR_COUNT_R (0x30022904) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_AXI_RD_INTR_COUNT_R (0x904) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_AXI_WR_INTR_COUNT_R (0x30022908) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_AXI_WR_INTR_COUNT_R (0x908) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_MBOX_LOCK_INTR_COUNT_R (0x3002290c) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_MBOX_LOCK_INTR_COUNT_R (0x90c) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_SHA_LOCK_INTR_COUNT_R (0x30022910) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_SHA_LOCK_INTR_COUNT_R (0x910) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_FIFO_OFLOW_INTR_COUNT_R (0x30022914) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_FIFO_OFLOW_INTR_COUNT_R (0x914) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_FIFO_UFLOW_INTR_COUNT_R (0x30022918) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_FIFO_UFLOW_INTR_COUNT_R (0x918) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_TXN_DONE_INTR_COUNT_R (0x30022980) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_TXN_DONE_INTR_COUNT_R (0x980) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_EMPTY_INTR_COUNT_R (0x30022984) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_EMPTY_INTR_COUNT_R (0x984) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_NOT_EMPTY_INTR_COUNT_R (0x30022988) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_NOT_EMPTY_INTR_COUNT_R (0x988) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_FULL_INTR_COUNT_R (0x3002298c) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_FULL_INTR_COUNT_R (0x98c) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_NOT_FULL_INTR_COUNT_R (0x30022990) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_NOT_FULL_INTR_COUNT_R (0x990) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_CMD_DEC_INTR_COUNT_INCR_R (0x30022a00) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_CMD_DEC_INTR_COUNT_INCR_R (0xa00) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_CMD_DEC_INTR_COUNT_INCR_R_PULSE_LOW (0) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_CMD_DEC_INTR_COUNT_INCR_R_PULSE_MASK (0x1) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_AXI_RD_INTR_COUNT_INCR_R (0x30022a04) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_AXI_RD_INTR_COUNT_INCR_R (0xa04) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_AXI_RD_INTR_COUNT_INCR_R_PULSE_LOW (0) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_AXI_RD_INTR_COUNT_INCR_R_PULSE_MASK (0x1) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_AXI_WR_INTR_COUNT_INCR_R (0x30022a08) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_AXI_WR_INTR_COUNT_INCR_R (0xa08) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_AXI_WR_INTR_COUNT_INCR_R_PULSE_LOW (0) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_AXI_WR_INTR_COUNT_INCR_R_PULSE_MASK (0x1) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_MBOX_LOCK_INTR_COUNT_INCR_R (0x30022a0c) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_MBOX_LOCK_INTR_COUNT_INCR_R (0xa0c) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_MBOX_LOCK_INTR_COUNT_INCR_R_PULSE_LOW (0) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_MBOX_LOCK_INTR_COUNT_INCR_R_PULSE_MASK (0x1) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_SHA_LOCK_INTR_COUNT_INCR_R (0x30022a10) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_SHA_LOCK_INTR_COUNT_INCR_R (0xa10) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_SHA_LOCK_INTR_COUNT_INCR_R_PULSE_LOW (0) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_SHA_LOCK_INTR_COUNT_INCR_R_PULSE_MASK (0x1) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_FIFO_OFLOW_INTR_COUNT_INCR_R (0x30022a14) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_FIFO_OFLOW_INTR_COUNT_INCR_R (0xa14) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_FIFO_OFLOW_INTR_COUNT_INCR_R_PULSE_LOW (0) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_FIFO_OFLOW_INTR_COUNT_INCR_R_PULSE_MASK (0x1) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_FIFO_UFLOW_INTR_COUNT_INCR_R (0x30022a18) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_FIFO_UFLOW_INTR_COUNT_INCR_R (0xa18) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_FIFO_UFLOW_INTR_COUNT_INCR_R_PULSE_LOW (0) +#define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_FIFO_UFLOW_INTR_COUNT_INCR_R_PULSE_MASK (0x1) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_TXN_DONE_INTR_COUNT_INCR_R (0x30022a1c) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_TXN_DONE_INTR_COUNT_INCR_R (0xa1c) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_TXN_DONE_INTR_COUNT_INCR_R_PULSE_LOW (0) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_TXN_DONE_INTR_COUNT_INCR_R_PULSE_MASK (0x1) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_EMPTY_INTR_COUNT_INCR_R (0x30022a20) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_EMPTY_INTR_COUNT_INCR_R (0xa20) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_EMPTY_INTR_COUNT_INCR_R_PULSE_LOW (0) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_EMPTY_INTR_COUNT_INCR_R_PULSE_MASK (0x1) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_NOT_EMPTY_INTR_COUNT_INCR_R (0x30022a24) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_NOT_EMPTY_INTR_COUNT_INCR_R (0xa24) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_NOT_EMPTY_INTR_COUNT_INCR_R_PULSE_LOW (0) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_NOT_EMPTY_INTR_COUNT_INCR_R_PULSE_MASK (0x1) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_FULL_INTR_COUNT_INCR_R (0x30022a28) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_FULL_INTR_COUNT_INCR_R (0xa28) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_FULL_INTR_COUNT_INCR_R_PULSE_LOW (0) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_FULL_INTR_COUNT_INCR_R_PULSE_MASK (0x1) +#define CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_NOT_FULL_INTR_COUNT_INCR_R (0x30022a2c) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_NOT_FULL_INTR_COUNT_INCR_R (0xa2c) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_NOT_FULL_INTR_COUNT_INCR_R_PULSE_LOW (0) +#define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_NOT_FULL_INTR_COUNT_INCR_R_PULSE_MASK (0x1) #define CLP_SOC_IFC_REG_BASE_ADDR (0x30030000) #define CLP_SOC_IFC_REG_CPTRA_HW_ERROR_FATAL (0x30030000) #define SOC_IFC_REG_CPTRA_HW_ERROR_FATAL (0x0) @@ -5440,42 +5674,42 @@ #define SOC_IFC_REG_CPTRA_SECURITY_STATE_SCAN_MODE_MASK (0x8) #define SOC_IFC_REG_CPTRA_SECURITY_STATE_RSVD_LOW (4) #define SOC_IFC_REG_CPTRA_SECURITY_STATE_RSVD_MASK (0xfffffff0) -#define CLP_SOC_IFC_REG_CPTRA_MBOX_VALID_PAUSER_0 (0x30030048) -#define SOC_IFC_REG_CPTRA_MBOX_VALID_PAUSER_0 (0x48) -#define CLP_SOC_IFC_REG_CPTRA_MBOX_VALID_PAUSER_1 (0x3003004c) -#define SOC_IFC_REG_CPTRA_MBOX_VALID_PAUSER_1 (0x4c) -#define CLP_SOC_IFC_REG_CPTRA_MBOX_VALID_PAUSER_2 (0x30030050) -#define SOC_IFC_REG_CPTRA_MBOX_VALID_PAUSER_2 (0x50) -#define CLP_SOC_IFC_REG_CPTRA_MBOX_VALID_PAUSER_3 (0x30030054) -#define SOC_IFC_REG_CPTRA_MBOX_VALID_PAUSER_3 (0x54) -#define CLP_SOC_IFC_REG_CPTRA_MBOX_VALID_PAUSER_4 (0x30030058) -#define SOC_IFC_REG_CPTRA_MBOX_VALID_PAUSER_4 (0x58) -#define CLP_SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_0 (0x3003005c) -#define SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_0 (0x5c) -#define SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_0_LOCK_LOW (0) -#define SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_0_LOCK_MASK (0x1) -#define CLP_SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_1 (0x30030060) -#define SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_1 (0x60) -#define SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_1_LOCK_LOW (0) -#define SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_1_LOCK_MASK (0x1) -#define CLP_SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_2 (0x30030064) -#define SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_2 (0x64) -#define SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_2_LOCK_LOW (0) -#define SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_2_LOCK_MASK (0x1) -#define CLP_SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_3 (0x30030068) -#define SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_3 (0x68) -#define SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_3_LOCK_LOW (0) -#define SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_3_LOCK_MASK (0x1) -#define CLP_SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_4 (0x3003006c) -#define SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_4 (0x6c) -#define SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_4_LOCK_LOW (0) -#define SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_4_LOCK_MASK (0x1) -#define CLP_SOC_IFC_REG_CPTRA_TRNG_VALID_PAUSER (0x30030070) -#define SOC_IFC_REG_CPTRA_TRNG_VALID_PAUSER (0x70) -#define CLP_SOC_IFC_REG_CPTRA_TRNG_PAUSER_LOCK (0x30030074) -#define SOC_IFC_REG_CPTRA_TRNG_PAUSER_LOCK (0x74) -#define SOC_IFC_REG_CPTRA_TRNG_PAUSER_LOCK_LOCK_LOW (0) -#define SOC_IFC_REG_CPTRA_TRNG_PAUSER_LOCK_LOCK_MASK (0x1) +#define CLP_SOC_IFC_REG_CPTRA_MBOX_VALID_AXI_ID_0 (0x30030048) +#define SOC_IFC_REG_CPTRA_MBOX_VALID_AXI_ID_0 (0x48) +#define CLP_SOC_IFC_REG_CPTRA_MBOX_VALID_AXI_ID_1 (0x3003004c) +#define SOC_IFC_REG_CPTRA_MBOX_VALID_AXI_ID_1 (0x4c) +#define CLP_SOC_IFC_REG_CPTRA_MBOX_VALID_AXI_ID_2 (0x30030050) +#define SOC_IFC_REG_CPTRA_MBOX_VALID_AXI_ID_2 (0x50) +#define CLP_SOC_IFC_REG_CPTRA_MBOX_VALID_AXI_ID_3 (0x30030054) +#define SOC_IFC_REG_CPTRA_MBOX_VALID_AXI_ID_3 (0x54) +#define CLP_SOC_IFC_REG_CPTRA_MBOX_VALID_AXI_ID_4 (0x30030058) +#define SOC_IFC_REG_CPTRA_MBOX_VALID_AXI_ID_4 (0x58) +#define CLP_SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_0 (0x3003005c) +#define SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_0 (0x5c) +#define SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_0_LOCK_LOW (0) +#define SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_0_LOCK_MASK (0x1) +#define CLP_SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_1 (0x30030060) +#define SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_1 (0x60) +#define SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_1_LOCK_LOW (0) +#define SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_1_LOCK_MASK (0x1) +#define CLP_SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_2 (0x30030064) +#define SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_2 (0x64) +#define SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_2_LOCK_LOW (0) +#define SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_2_LOCK_MASK (0x1) +#define CLP_SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_3 (0x30030068) +#define SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_3 (0x68) +#define SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_3_LOCK_LOW (0) +#define SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_3_LOCK_MASK (0x1) +#define CLP_SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_4 (0x3003006c) +#define SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_4 (0x6c) +#define SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_4_LOCK_LOW (0) +#define SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_4_LOCK_MASK (0x1) +#define CLP_SOC_IFC_REG_CPTRA_TRNG_VALID_AXI_ID (0x30030070) +#define SOC_IFC_REG_CPTRA_TRNG_VALID_AXI_ID (0x70) +#define CLP_SOC_IFC_REG_CPTRA_TRNG_AXI_ID_LOCK (0x30030074) +#define SOC_IFC_REG_CPTRA_TRNG_AXI_ID_LOCK (0x74) +#define SOC_IFC_REG_CPTRA_TRNG_AXI_ID_LOCK_LOCK_LOW (0) +#define SOC_IFC_REG_CPTRA_TRNG_AXI_ID_LOCK_LOCK_MASK (0x1) #define CLP_SOC_IFC_REG_CPTRA_TRNG_DATA_0 (0x30030078) #define SOC_IFC_REG_CPTRA_TRNG_DATA_0 (0x78) #define CLP_SOC_IFC_REG_CPTRA_TRNG_DATA_1 (0x3003007c) @@ -5586,12 +5820,12 @@ #define SOC_IFC_REG_CPTRA_WDT_STATUS_T1_TIMEOUT_MASK (0x1) #define SOC_IFC_REG_CPTRA_WDT_STATUS_T2_TIMEOUT_LOW (1) #define SOC_IFC_REG_CPTRA_WDT_STATUS_T2_TIMEOUT_MASK (0x2) -#define CLP_SOC_IFC_REG_CPTRA_FUSE_VALID_PAUSER (0x30030108) -#define SOC_IFC_REG_CPTRA_FUSE_VALID_PAUSER (0x108) -#define CLP_SOC_IFC_REG_CPTRA_FUSE_PAUSER_LOCK (0x3003010c) -#define SOC_IFC_REG_CPTRA_FUSE_PAUSER_LOCK (0x10c) -#define SOC_IFC_REG_CPTRA_FUSE_PAUSER_LOCK_LOCK_LOW (0) -#define SOC_IFC_REG_CPTRA_FUSE_PAUSER_LOCK_LOCK_MASK (0x1) +#define CLP_SOC_IFC_REG_CPTRA_FUSE_VALID_AXI_ID (0x30030108) +#define SOC_IFC_REG_CPTRA_FUSE_VALID_AXI_ID (0x108) +#define CLP_SOC_IFC_REG_CPTRA_FUSE_AXI_ID_LOCK (0x3003010c) +#define SOC_IFC_REG_CPTRA_FUSE_AXI_ID_LOCK (0x10c) +#define SOC_IFC_REG_CPTRA_FUSE_AXI_ID_LOCK_LOCK_LOW (0) +#define SOC_IFC_REG_CPTRA_FUSE_AXI_ID_LOCK_LOCK_MASK (0x1) #define CLP_SOC_IFC_REG_CPTRA_WDT_CFG_0 (0x30030110) #define SOC_IFC_REG_CPTRA_WDT_CFG_0 (0x110) #define CLP_SOC_IFC_REG_CPTRA_WDT_CFG_1 (0x30030114) diff --git a/src/integration/rtl/caliptra_reg.rdl b/src/integration/rtl/caliptra_reg.rdl index 6f98b9bca..f92493fbf 100644 --- a/src/integration/rtl/caliptra_reg.rdl +++ b/src/integration/rtl/caliptra_reg.rdl @@ -44,6 +44,8 @@ addrmap clp { sha512_acc_csr sha512_acc_csr @ 0x3002_1000; + axi_dma_reg axi_dma_reg @ 0x3002_2000; + soc_ifc_reg soc_ifc_reg @ 0x3003_0000; }; diff --git a/src/integration/rtl/caliptra_reg_defines.svh b/src/integration/rtl/caliptra_reg_defines.svh index 56fe762f9..12601d5f6 100644 --- a/src/integration/rtl/caliptra_reg_defines.svh +++ b/src/integration/rtl/caliptra_reg_defines.svh @@ -5179,8 +5179,8 @@ `define MBOX_CSR_MBOX_LOCK (32'h0) `define MBOX_CSR_MBOX_LOCK_LOCK_LOW (0) `define MBOX_CSR_MBOX_LOCK_LOCK_MASK (32'h1) -`define CLP_MBOX_CSR_MBOX_USER (32'h30020004) -`define MBOX_CSR_MBOX_USER (32'h4) +`define CLP_MBOX_CSR_MBOX_ID (32'h30020004) +`define MBOX_CSR_MBOX_ID (32'h4) `define CLP_MBOX_CSR_MBOX_CMD (32'h30020008) `define MBOX_CSR_MBOX_CMD (32'h8) `define CLP_MBOX_CSR_MBOX_DLEN (32'h3002000c) @@ -5216,8 +5216,8 @@ `define SHA512_ACC_CSR_LOCK (32'h0) `define SHA512_ACC_CSR_LOCK_LOCK_LOW (0) `define SHA512_ACC_CSR_LOCK_LOCK_MASK (32'h1) -`define CLP_SHA512_ACC_CSR_USER (32'h30021004) -`define SHA512_ACC_CSR_USER (32'h4) +`define CLP_SHA512_ACC_CSR_ID (32'h30021004) +`define SHA512_ACC_CSR_ID (32'h4) `define CLP_SHA512_ACC_CSR_MODE (32'h30021008) `define SHA512_ACC_CSR_MODE (32'h8) `define SHA512_ACC_CSR_MODE_MODE_LOW (0) @@ -5363,6 +5363,240 @@ `define SHA512_ACC_CSR_INTR_BLOCK_RF_NOTIF_CMD_DONE_INTR_COUNT_INCR_R (32'ha10) `define SHA512_ACC_CSR_INTR_BLOCK_RF_NOTIF_CMD_DONE_INTR_COUNT_INCR_R_PULSE_LOW (0) `define SHA512_ACC_CSR_INTR_BLOCK_RF_NOTIF_CMD_DONE_INTR_COUNT_INCR_R_PULSE_MASK (32'h1) +`define CLP_AXI_DMA_REG_BASE_ADDR (32'h30022000) +`define CLP_AXI_DMA_REG_ID (32'h30022000) +`define AXI_DMA_REG_ID (32'h0) +`define CLP_AXI_DMA_REG_CAP (32'h30022004) +`define AXI_DMA_REG_CAP (32'h4) +`define CLP_AXI_DMA_REG_CTRL (32'h30022008) +`define AXI_DMA_REG_CTRL (32'h8) +`define AXI_DMA_REG_CTRL_GO_LOW (0) +`define AXI_DMA_REG_CTRL_GO_MASK (32'h1) +`define AXI_DMA_REG_CTRL_FLUSH_LOW (1) +`define AXI_DMA_REG_CTRL_FLUSH_MASK (32'h2) +`define AXI_DMA_REG_CTRL_RSVD0_LOW (2) +`define AXI_DMA_REG_CTRL_RSVD0_MASK (32'hfffc) +`define AXI_DMA_REG_CTRL_RD_ROUTE_LOW (16) +`define AXI_DMA_REG_CTRL_RD_ROUTE_MASK (32'h30000) +`define AXI_DMA_REG_CTRL_RSVD1_LOW (18) +`define AXI_DMA_REG_CTRL_RSVD1_MASK (32'hc0000) +`define AXI_DMA_REG_CTRL_RD_FIXED_LOW (20) +`define AXI_DMA_REG_CTRL_RD_FIXED_MASK (32'h100000) +`define AXI_DMA_REG_CTRL_RSVD2_LOW (21) +`define AXI_DMA_REG_CTRL_RSVD2_MASK (32'he00000) +`define AXI_DMA_REG_CTRL_WR_ROUTE_LOW (24) +`define AXI_DMA_REG_CTRL_WR_ROUTE_MASK (32'h3000000) +`define AXI_DMA_REG_CTRL_RSVD3_LOW (26) +`define AXI_DMA_REG_CTRL_RSVD3_MASK (32'hc000000) +`define AXI_DMA_REG_CTRL_WR_FIXED_LOW (28) +`define AXI_DMA_REG_CTRL_WR_FIXED_MASK (32'h10000000) +`define AXI_DMA_REG_CTRL_RSVD4_LOW (29) +`define AXI_DMA_REG_CTRL_RSVD4_MASK (32'he0000000) +`define CLP_AXI_DMA_REG_STATUS0 (32'h3002200c) +`define AXI_DMA_REG_STATUS0 (32'hc) +`define AXI_DMA_REG_STATUS0_BUSY_LOW (0) +`define AXI_DMA_REG_STATUS0_BUSY_MASK (32'h1) +`define AXI_DMA_REG_STATUS0_ERROR_LOW (1) +`define AXI_DMA_REG_STATUS0_ERROR_MASK (32'h2) +`define AXI_DMA_REG_STATUS0_RSVD0_LOW (2) +`define AXI_DMA_REG_STATUS0_RSVD0_MASK (32'hfffc) +`define AXI_DMA_REG_STATUS0_AXI_DMA_FSM_PS_LOW (16) +`define AXI_DMA_REG_STATUS0_AXI_DMA_FSM_PS_MASK (32'h30000) +`define AXI_DMA_REG_STATUS0_RSVD1_LOW (18) +`define AXI_DMA_REG_STATUS0_RSVD1_MASK (32'hfffc0000) +`define CLP_AXI_DMA_REG_STATUS1 (32'h30022010) +`define AXI_DMA_REG_STATUS1 (32'h10) +`define CLP_AXI_DMA_REG_SRC_ADDR_L (32'h30022014) +`define AXI_DMA_REG_SRC_ADDR_L (32'h14) +`define CLP_AXI_DMA_REG_SRC_ADDR_H (32'h30022018) +`define AXI_DMA_REG_SRC_ADDR_H (32'h18) +`define CLP_AXI_DMA_REG_DST_ADDR_L (32'h3002201c) +`define AXI_DMA_REG_DST_ADDR_L (32'h1c) +`define CLP_AXI_DMA_REG_DST_ADDR_H (32'h30022020) +`define AXI_DMA_REG_DST_ADDR_H (32'h20) +`define CLP_AXI_DMA_REG_BYTE_COUNT (32'h30022024) +`define AXI_DMA_REG_BYTE_COUNT (32'h24) +`define CLP_AXI_DMA_REG_BLOCK_SIZE (32'h30022028) +`define AXI_DMA_REG_BLOCK_SIZE (32'h28) +`define AXI_DMA_REG_BLOCK_SIZE_SIZE_LOW (0) +`define AXI_DMA_REG_BLOCK_SIZE_SIZE_MASK (32'hfff) +`define AXI_DMA_REG_BLOCK_SIZE_RSVD_LOW (12) +`define AXI_DMA_REG_BLOCK_SIZE_RSVD_MASK (32'hfffff000) +`define CLP_AXI_DMA_REG_WRITE_DATA (32'h3002202c) +`define AXI_DMA_REG_WRITE_DATA (32'h2c) +`define CLP_AXI_DMA_REG_READ_DATA (32'h30022030) +`define AXI_DMA_REG_READ_DATA (32'h30) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_START (32'h30022800) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_GLOBAL_INTR_EN_R (32'h30022800) +`define AXI_DMA_REG_INTR_BLOCK_RF_GLOBAL_INTR_EN_R (32'h800) +`define AXI_DMA_REG_INTR_BLOCK_RF_GLOBAL_INTR_EN_R_ERROR_EN_LOW (0) +`define AXI_DMA_REG_INTR_BLOCK_RF_GLOBAL_INTR_EN_R_ERROR_EN_MASK (32'h1) +`define AXI_DMA_REG_INTR_BLOCK_RF_GLOBAL_INTR_EN_R_NOTIF_EN_LOW (1) +`define AXI_DMA_REG_INTR_BLOCK_RF_GLOBAL_INTR_EN_R_NOTIF_EN_MASK (32'h2) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R (32'h30022804) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R (32'h804) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_CMD_DEC_EN_LOW (0) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_CMD_DEC_EN_MASK (32'h1) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_AXI_RD_EN_LOW (1) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_AXI_RD_EN_MASK (32'h2) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_AXI_WR_EN_LOW (2) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_AXI_WR_EN_MASK (32'h4) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_MBOX_LOCK_EN_LOW (3) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_MBOX_LOCK_EN_MASK (32'h8) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_SHA_LOCK_EN_LOW (4) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_SHA_LOCK_EN_MASK (32'h10) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_FIFO_OFLOW_EN_LOW (5) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_FIFO_OFLOW_EN_MASK (32'h20) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_FIFO_UFLOW_EN_LOW (6) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_FIFO_UFLOW_EN_MASK (32'h40) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R (32'h30022808) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R (32'h808) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R_NOTIF_TXN_DONE_EN_LOW (0) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R_NOTIF_TXN_DONE_EN_MASK (32'h1) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R_NOTIF_FIFO_EMPTY_EN_LOW (1) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R_NOTIF_FIFO_EMPTY_EN_MASK (32'h2) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R_NOTIF_FIFO_NOT_EMPTY_EN_LOW (2) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R_NOTIF_FIFO_NOT_EMPTY_EN_MASK (32'h4) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R_NOTIF_FIFO_FULL_EN_LOW (3) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R_NOTIF_FIFO_FULL_EN_MASK (32'h8) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R_NOTIF_FIFO_NOT_FULL_EN_LOW (4) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R_NOTIF_FIFO_NOT_FULL_EN_MASK (32'h10) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_GLOBAL_INTR_R (32'h3002280c) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_GLOBAL_INTR_R (32'h80c) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_GLOBAL_INTR_R_AGG_STS_LOW (0) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_GLOBAL_INTR_R_AGG_STS_MASK (32'h1) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_GLOBAL_INTR_R (32'h30022810) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_GLOBAL_INTR_R (32'h810) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_GLOBAL_INTR_R_AGG_STS_LOW (0) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_GLOBAL_INTR_R_AGG_STS_MASK (32'h1) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R (32'h30022814) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R (32'h814) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_CMD_DEC_STS_LOW (0) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_CMD_DEC_STS_MASK (32'h1) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_AXI_RD_STS_LOW (1) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_AXI_RD_STS_MASK (32'h2) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_AXI_WR_STS_LOW (2) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_AXI_WR_STS_MASK (32'h4) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_MBOX_LOCK_STS_LOW (3) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_MBOX_LOCK_STS_MASK (32'h8) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_SHA_LOCK_STS_LOW (4) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_SHA_LOCK_STS_MASK (32'h10) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_FIFO_OFLOW_STS_LOW (5) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_FIFO_OFLOW_STS_MASK (32'h20) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_FIFO_UFLOW_STS_LOW (6) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_FIFO_UFLOW_STS_MASK (32'h40) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R (32'h30022818) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R (32'h818) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_TXN_DONE_STS_LOW (0) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_TXN_DONE_STS_MASK (32'h1) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_FIFO_EMPTY_STS_LOW (1) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_FIFO_EMPTY_STS_MASK (32'h2) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_FIFO_NOT_EMPTY_STS_LOW (2) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_FIFO_NOT_EMPTY_STS_MASK (32'h4) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_FIFO_FULL_STS_LOW (3) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_FIFO_FULL_STS_MASK (32'h8) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_FIFO_NOT_FULL_STS_LOW (4) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_FIFO_NOT_FULL_STS_MASK (32'h10) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R (32'h3002281c) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R (32'h81c) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R_ERROR_CMD_DEC_TRIG_LOW (0) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R_ERROR_CMD_DEC_TRIG_MASK (32'h1) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R_ERROR_AXI_RD_TRIG_LOW (1) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R_ERROR_AXI_RD_TRIG_MASK (32'h2) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R_ERROR_AXI_WR_TRIG_LOW (2) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R_ERROR_AXI_WR_TRIG_MASK (32'h4) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R_ERROR_MBOX_LOCK_TRIG_LOW (3) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R_ERROR_MBOX_LOCK_TRIG_MASK (32'h8) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R_ERROR_SHA_LOCK_TRIG_LOW (4) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R_ERROR_SHA_LOCK_TRIG_MASK (32'h10) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R_ERROR_FIFO_OFLOW_TRIG_LOW (5) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R_ERROR_FIFO_OFLOW_TRIG_MASK (32'h20) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R_ERROR_FIFO_UFLOW_TRIG_LOW (6) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_TRIG_R_ERROR_FIFO_UFLOW_TRIG_MASK (32'h40) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_TRIG_R (32'h30022820) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_TRIG_R (32'h820) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_TRIG_R_NOTIF_TXN_DONE_TRIG_LOW (0) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_TRIG_R_NOTIF_TXN_DONE_TRIG_MASK (32'h1) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_TRIG_R_NOTIF_FIFO_EMPTY_TRIG_LOW (1) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_TRIG_R_NOTIF_FIFO_EMPTY_TRIG_MASK (32'h2) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_TRIG_R_NOTIF_FIFO_NOT_EMPTY_TRIG_LOW (2) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_TRIG_R_NOTIF_FIFO_NOT_EMPTY_TRIG_MASK (32'h4) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_TRIG_R_NOTIF_FIFO_FULL_TRIG_LOW (3) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_TRIG_R_NOTIF_FIFO_FULL_TRIG_MASK (32'h8) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_TRIG_R_NOTIF_FIFO_NOT_FULL_TRIG_LOW (4) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_TRIG_R_NOTIF_FIFO_NOT_FULL_TRIG_MASK (32'h10) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_CMD_DEC_INTR_COUNT_R (32'h30022900) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_CMD_DEC_INTR_COUNT_R (32'h900) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_AXI_RD_INTR_COUNT_R (32'h30022904) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_AXI_RD_INTR_COUNT_R (32'h904) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_AXI_WR_INTR_COUNT_R (32'h30022908) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_AXI_WR_INTR_COUNT_R (32'h908) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_MBOX_LOCK_INTR_COUNT_R (32'h3002290c) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_MBOX_LOCK_INTR_COUNT_R (32'h90c) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_SHA_LOCK_INTR_COUNT_R (32'h30022910) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_SHA_LOCK_INTR_COUNT_R (32'h910) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_FIFO_OFLOW_INTR_COUNT_R (32'h30022914) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_FIFO_OFLOW_INTR_COUNT_R (32'h914) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_FIFO_UFLOW_INTR_COUNT_R (32'h30022918) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_FIFO_UFLOW_INTR_COUNT_R (32'h918) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_TXN_DONE_INTR_COUNT_R (32'h30022980) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_TXN_DONE_INTR_COUNT_R (32'h980) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_EMPTY_INTR_COUNT_R (32'h30022984) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_EMPTY_INTR_COUNT_R (32'h984) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_NOT_EMPTY_INTR_COUNT_R (32'h30022988) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_NOT_EMPTY_INTR_COUNT_R (32'h988) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_FULL_INTR_COUNT_R (32'h3002298c) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_FULL_INTR_COUNT_R (32'h98c) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_NOT_FULL_INTR_COUNT_R (32'h30022990) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_NOT_FULL_INTR_COUNT_R (32'h990) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_CMD_DEC_INTR_COUNT_INCR_R (32'h30022a00) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_CMD_DEC_INTR_COUNT_INCR_R (32'ha00) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_CMD_DEC_INTR_COUNT_INCR_R_PULSE_LOW (0) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_CMD_DEC_INTR_COUNT_INCR_R_PULSE_MASK (32'h1) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_AXI_RD_INTR_COUNT_INCR_R (32'h30022a04) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_AXI_RD_INTR_COUNT_INCR_R (32'ha04) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_AXI_RD_INTR_COUNT_INCR_R_PULSE_LOW (0) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_AXI_RD_INTR_COUNT_INCR_R_PULSE_MASK (32'h1) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_AXI_WR_INTR_COUNT_INCR_R (32'h30022a08) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_AXI_WR_INTR_COUNT_INCR_R (32'ha08) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_AXI_WR_INTR_COUNT_INCR_R_PULSE_LOW (0) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_AXI_WR_INTR_COUNT_INCR_R_PULSE_MASK (32'h1) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_MBOX_LOCK_INTR_COUNT_INCR_R (32'h30022a0c) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_MBOX_LOCK_INTR_COUNT_INCR_R (32'ha0c) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_MBOX_LOCK_INTR_COUNT_INCR_R_PULSE_LOW (0) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_MBOX_LOCK_INTR_COUNT_INCR_R_PULSE_MASK (32'h1) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_SHA_LOCK_INTR_COUNT_INCR_R (32'h30022a10) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_SHA_LOCK_INTR_COUNT_INCR_R (32'ha10) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_SHA_LOCK_INTR_COUNT_INCR_R_PULSE_LOW (0) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_SHA_LOCK_INTR_COUNT_INCR_R_PULSE_MASK (32'h1) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_FIFO_OFLOW_INTR_COUNT_INCR_R (32'h30022a14) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_FIFO_OFLOW_INTR_COUNT_INCR_R (32'ha14) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_FIFO_OFLOW_INTR_COUNT_INCR_R_PULSE_LOW (0) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_FIFO_OFLOW_INTR_COUNT_INCR_R_PULSE_MASK (32'h1) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_FIFO_UFLOW_INTR_COUNT_INCR_R (32'h30022a18) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_FIFO_UFLOW_INTR_COUNT_INCR_R (32'ha18) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_FIFO_UFLOW_INTR_COUNT_INCR_R_PULSE_LOW (0) +`define AXI_DMA_REG_INTR_BLOCK_RF_ERROR_FIFO_UFLOW_INTR_COUNT_INCR_R_PULSE_MASK (32'h1) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_TXN_DONE_INTR_COUNT_INCR_R (32'h30022a1c) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_TXN_DONE_INTR_COUNT_INCR_R (32'ha1c) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_TXN_DONE_INTR_COUNT_INCR_R_PULSE_LOW (0) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_TXN_DONE_INTR_COUNT_INCR_R_PULSE_MASK (32'h1) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_EMPTY_INTR_COUNT_INCR_R (32'h30022a20) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_EMPTY_INTR_COUNT_INCR_R (32'ha20) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_EMPTY_INTR_COUNT_INCR_R_PULSE_LOW (0) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_EMPTY_INTR_COUNT_INCR_R_PULSE_MASK (32'h1) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_NOT_EMPTY_INTR_COUNT_INCR_R (32'h30022a24) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_NOT_EMPTY_INTR_COUNT_INCR_R (32'ha24) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_NOT_EMPTY_INTR_COUNT_INCR_R_PULSE_LOW (0) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_NOT_EMPTY_INTR_COUNT_INCR_R_PULSE_MASK (32'h1) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_FULL_INTR_COUNT_INCR_R (32'h30022a28) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_FULL_INTR_COUNT_INCR_R (32'ha28) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_FULL_INTR_COUNT_INCR_R_PULSE_LOW (0) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_FULL_INTR_COUNT_INCR_R_PULSE_MASK (32'h1) +`define CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_NOT_FULL_INTR_COUNT_INCR_R (32'h30022a2c) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_NOT_FULL_INTR_COUNT_INCR_R (32'ha2c) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_NOT_FULL_INTR_COUNT_INCR_R_PULSE_LOW (0) +`define AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_FIFO_NOT_FULL_INTR_COUNT_INCR_R_PULSE_MASK (32'h1) `define CLP_SOC_IFC_REG_BASE_ADDR (32'h30030000) `define CLP_SOC_IFC_REG_CPTRA_HW_ERROR_FATAL (32'h30030000) `define SOC_IFC_REG_CPTRA_HW_ERROR_FATAL (32'h0) @@ -5440,42 +5674,42 @@ `define SOC_IFC_REG_CPTRA_SECURITY_STATE_SCAN_MODE_MASK (32'h8) `define SOC_IFC_REG_CPTRA_SECURITY_STATE_RSVD_LOW (4) `define SOC_IFC_REG_CPTRA_SECURITY_STATE_RSVD_MASK (32'hfffffff0) -`define CLP_SOC_IFC_REG_CPTRA_MBOX_VALID_PAUSER_0 (32'h30030048) -`define SOC_IFC_REG_CPTRA_MBOX_VALID_PAUSER_0 (32'h48) -`define CLP_SOC_IFC_REG_CPTRA_MBOX_VALID_PAUSER_1 (32'h3003004c) -`define SOC_IFC_REG_CPTRA_MBOX_VALID_PAUSER_1 (32'h4c) -`define CLP_SOC_IFC_REG_CPTRA_MBOX_VALID_PAUSER_2 (32'h30030050) -`define SOC_IFC_REG_CPTRA_MBOX_VALID_PAUSER_2 (32'h50) -`define CLP_SOC_IFC_REG_CPTRA_MBOX_VALID_PAUSER_3 (32'h30030054) -`define SOC_IFC_REG_CPTRA_MBOX_VALID_PAUSER_3 (32'h54) -`define CLP_SOC_IFC_REG_CPTRA_MBOX_VALID_PAUSER_4 (32'h30030058) -`define SOC_IFC_REG_CPTRA_MBOX_VALID_PAUSER_4 (32'h58) -`define CLP_SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_0 (32'h3003005c) -`define SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_0 (32'h5c) -`define SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_0_LOCK_LOW (0) -`define SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_0_LOCK_MASK (32'h1) -`define CLP_SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_1 (32'h30030060) -`define SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_1 (32'h60) -`define SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_1_LOCK_LOW (0) -`define SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_1_LOCK_MASK (32'h1) -`define CLP_SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_2 (32'h30030064) -`define SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_2 (32'h64) -`define SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_2_LOCK_LOW (0) -`define SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_2_LOCK_MASK (32'h1) -`define CLP_SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_3 (32'h30030068) -`define SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_3 (32'h68) -`define SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_3_LOCK_LOW (0) -`define SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_3_LOCK_MASK (32'h1) -`define CLP_SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_4 (32'h3003006c) -`define SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_4 (32'h6c) -`define SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_4_LOCK_LOW (0) -`define SOC_IFC_REG_CPTRA_MBOX_PAUSER_LOCK_4_LOCK_MASK (32'h1) -`define CLP_SOC_IFC_REG_CPTRA_TRNG_VALID_PAUSER (32'h30030070) -`define SOC_IFC_REG_CPTRA_TRNG_VALID_PAUSER (32'h70) -`define CLP_SOC_IFC_REG_CPTRA_TRNG_PAUSER_LOCK (32'h30030074) -`define SOC_IFC_REG_CPTRA_TRNG_PAUSER_LOCK (32'h74) -`define SOC_IFC_REG_CPTRA_TRNG_PAUSER_LOCK_LOCK_LOW (0) -`define SOC_IFC_REG_CPTRA_TRNG_PAUSER_LOCK_LOCK_MASK (32'h1) +`define CLP_SOC_IFC_REG_CPTRA_MBOX_VALID_AXI_ID_0 (32'h30030048) +`define SOC_IFC_REG_CPTRA_MBOX_VALID_AXI_ID_0 (32'h48) +`define CLP_SOC_IFC_REG_CPTRA_MBOX_VALID_AXI_ID_1 (32'h3003004c) +`define SOC_IFC_REG_CPTRA_MBOX_VALID_AXI_ID_1 (32'h4c) +`define CLP_SOC_IFC_REG_CPTRA_MBOX_VALID_AXI_ID_2 (32'h30030050) +`define SOC_IFC_REG_CPTRA_MBOX_VALID_AXI_ID_2 (32'h50) +`define CLP_SOC_IFC_REG_CPTRA_MBOX_VALID_AXI_ID_3 (32'h30030054) +`define SOC_IFC_REG_CPTRA_MBOX_VALID_AXI_ID_3 (32'h54) +`define CLP_SOC_IFC_REG_CPTRA_MBOX_VALID_AXI_ID_4 (32'h30030058) +`define SOC_IFC_REG_CPTRA_MBOX_VALID_AXI_ID_4 (32'h58) +`define CLP_SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_0 (32'h3003005c) +`define SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_0 (32'h5c) +`define SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_0_LOCK_LOW (0) +`define SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_0_LOCK_MASK (32'h1) +`define CLP_SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_1 (32'h30030060) +`define SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_1 (32'h60) +`define SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_1_LOCK_LOW (0) +`define SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_1_LOCK_MASK (32'h1) +`define CLP_SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_2 (32'h30030064) +`define SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_2 (32'h64) +`define SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_2_LOCK_LOW (0) +`define SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_2_LOCK_MASK (32'h1) +`define CLP_SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_3 (32'h30030068) +`define SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_3 (32'h68) +`define SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_3_LOCK_LOW (0) +`define SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_3_LOCK_MASK (32'h1) +`define CLP_SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_4 (32'h3003006c) +`define SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_4 (32'h6c) +`define SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_4_LOCK_LOW (0) +`define SOC_IFC_REG_CPTRA_MBOX_AXI_ID_LOCK_4_LOCK_MASK (32'h1) +`define CLP_SOC_IFC_REG_CPTRA_TRNG_VALID_AXI_ID (32'h30030070) +`define SOC_IFC_REG_CPTRA_TRNG_VALID_AXI_ID (32'h70) +`define CLP_SOC_IFC_REG_CPTRA_TRNG_AXI_ID_LOCK (32'h30030074) +`define SOC_IFC_REG_CPTRA_TRNG_AXI_ID_LOCK (32'h74) +`define SOC_IFC_REG_CPTRA_TRNG_AXI_ID_LOCK_LOCK_LOW (0) +`define SOC_IFC_REG_CPTRA_TRNG_AXI_ID_LOCK_LOCK_MASK (32'h1) `define CLP_SOC_IFC_REG_CPTRA_TRNG_DATA_0 (32'h30030078) `define SOC_IFC_REG_CPTRA_TRNG_DATA_0 (32'h78) `define CLP_SOC_IFC_REG_CPTRA_TRNG_DATA_1 (32'h3003007c) @@ -5586,12 +5820,12 @@ `define SOC_IFC_REG_CPTRA_WDT_STATUS_T1_TIMEOUT_MASK (32'h1) `define SOC_IFC_REG_CPTRA_WDT_STATUS_T2_TIMEOUT_LOW (1) `define SOC_IFC_REG_CPTRA_WDT_STATUS_T2_TIMEOUT_MASK (32'h2) -`define CLP_SOC_IFC_REG_CPTRA_FUSE_VALID_PAUSER (32'h30030108) -`define SOC_IFC_REG_CPTRA_FUSE_VALID_PAUSER (32'h108) -`define CLP_SOC_IFC_REG_CPTRA_FUSE_PAUSER_LOCK (32'h3003010c) -`define SOC_IFC_REG_CPTRA_FUSE_PAUSER_LOCK (32'h10c) -`define SOC_IFC_REG_CPTRA_FUSE_PAUSER_LOCK_LOCK_LOW (0) -`define SOC_IFC_REG_CPTRA_FUSE_PAUSER_LOCK_LOCK_MASK (32'h1) +`define CLP_SOC_IFC_REG_CPTRA_FUSE_VALID_AXI_ID (32'h30030108) +`define SOC_IFC_REG_CPTRA_FUSE_VALID_AXI_ID (32'h108) +`define CLP_SOC_IFC_REG_CPTRA_FUSE_AXI_ID_LOCK (32'h3003010c) +`define SOC_IFC_REG_CPTRA_FUSE_AXI_ID_LOCK (32'h10c) +`define SOC_IFC_REG_CPTRA_FUSE_AXI_ID_LOCK_LOCK_LOW (0) +`define SOC_IFC_REG_CPTRA_FUSE_AXI_ID_LOCK_LOCK_MASK (32'h1) `define CLP_SOC_IFC_REG_CPTRA_WDT_CFG_0 (32'h30030110) `define SOC_IFC_REG_CPTRA_WDT_CFG_0 (32'h110) `define CLP_SOC_IFC_REG_CPTRA_WDT_CFG_1 (32'h30030114) diff --git a/src/integration/rtl/caliptra_top.sv b/src/integration/rtl/caliptra_top.sv index 20bb36858..0ee9888a3 100755 --- a/src/integration/rtl/caliptra_top.sv +++ b/src/integration/rtl/caliptra_top.sv @@ -48,6 +48,10 @@ module caliptra_top axi_if.w_sub s_axi_w_if, axi_if.r_sub s_axi_r_if, + // AXI Manager INF + axi_if.w_mgr m_axi_w_if, + axi_if.r_mgr m_axi_r_if, + //QSPI Interface output logic qspi_clk_o, output logic [`CALIPTRA_QSPI_CS_WIDTH-1:0] qspi_cs_no, @@ -83,6 +87,8 @@ module caliptra_top output logic mailbox_data_avail, output logic mailbox_flow_done, + input logic recovery_data_avail, + input logic BootFSM_BrkPoint, //SoC Interrupts @@ -217,7 +223,8 @@ module caliptra_top wire soc_ifc_notif_intr; wire sha_error_intr; wire sha_notif_intr; - + wire dma_error_intr; + wire dma_notif_intr; logic [NUM_INTR-1:0] intr; kv_read_t [KV_NUM_READ-1:0] kv_read; @@ -397,6 +404,8 @@ always_comb begin intr[`VEER_INTR_VEC_SOC_IFC_NOTIF-1] = soc_ifc_notif_intr; intr[`VEER_INTR_VEC_SHA_ERROR -1] = sha_error_intr; intr[`VEER_INTR_VEC_SHA_NOTIF -1] = sha_notif_intr; + intr[`VEER_INTR_VEC_AXI_DMA_ERROR-1] = dma_error_intr; + intr[`VEER_INTR_VEC_AXI_DMA_NOTIF-1] = dma_notif_intr; intr[NUM_INTR-1:`VEER_INTR_VEC_MAX_ASSIGNED] = '0; end @@ -1196,22 +1205,30 @@ soc_ifc_top #( .AXI_ADDR_WIDTH(`CALIPTRA_SLAVE_ADDR_WIDTH(`CALIPTRA_SLAVE_SEL_SOC_IFC)), .AXI_DATA_WIDTH(`CALIPTRA_AXI_DATA_WIDTH), .AXI_ID_WIDTH (`CALIPTRA_AXI_ID_WIDTH ), - .AXI_USER_WIDTH(`CALIPTRA_AXI_USER_WIDTH) + .AXI_USER_WIDTH(`CALIPTRA_AXI_USER_WIDTH), + .AXIM_ADDR_WIDTH(`CALIPTRA_AXI_DMA_ADDR_WIDTH), + .AXIM_DATA_WIDTH(CPTRA_AXI_DMA_DATA_WIDTH), + .AXIM_ID_WIDTH (CPTRA_AXI_DMA_ID_WIDTH), + .AXIM_USER_WIDTH(CPTRA_AXI_DMA_USER_WIDTH) ) soc_ifc_top1 ( - .clk(clk), - .clk_cg(clk_cg), + .clk (clk ), + .clk_cg (clk_cg ), .soc_ifc_clk_cg(soc_ifc_clk_cg), - .rdc_clk_cg(rdc_clk_cg), - .cptra_pwrgood(cptra_pwrgood), - .cptra_rst_b(cptra_rst_b), + .rdc_clk_cg (rdc_clk_cg ), + + .cptra_pwrgood(cptra_pwrgood), + .cptra_rst_b (cptra_rst_b ), + .ready_for_fuses(ready_for_fuses), .ready_for_fw_push(ready_for_fw_push), .ready_for_runtime(ready_for_runtime), .mailbox_data_avail(mailbox_data_avail), .mailbox_flow_done(mailbox_flow_done), + .recovery_data_avail(recovery_data_avail), + .security_state(cptra_security_state_Latched), .BootFSM_BrkPoint (BootFSM_BrkPoint), @@ -1241,6 +1258,11 @@ soc_ifc_top1 .hresp_o (responder_inst[`CALIPTRA_SLAVE_SEL_SOC_IFC].hresp), .hreadyout_o(responder_inst[`CALIPTRA_SLAVE_SEL_SOC_IFC].hreadyout), .hrdata_o (responder_inst[`CALIPTRA_SLAVE_SEL_SOC_IFC].hrdata), + + // AXI Manager INF + .m_axi_w_if(m_axi_w_if), + .m_axi_r_if(m_axi_r_if), + //SoC Interrupts .cptra_error_fatal (cptra_error_fatal), .cptra_error_non_fatal(cptra_error_non_fatal), @@ -1254,6 +1276,8 @@ soc_ifc_top1 .soc_ifc_notif_intr(soc_ifc_notif_intr), .sha_error_intr(sha_error_intr), .sha_notif_intr(sha_notif_intr), + .dma_error_intr(dma_error_intr), + .dma_notif_intr(dma_notif_intr), .timer_intr(timer_int), //Obfuscated UDS and FE .clear_obf_secrets(clear_obf_secrets_debugScanQ), //input - includes debug & scan modes to do the register clearing diff --git a/src/integration/rtl/config_defines.svh b/src/integration/rtl/config_defines.svh index aa572a15d..c750208ae 100755 --- a/src/integration/rtl/config_defines.svh +++ b/src/integration/rtl/config_defines.svh @@ -25,6 +25,7 @@ `define CALIPTRA_AXI_DATA_WIDTH 32 // bit-width AXI data `define CALIPTRA_AXI_USER_WIDTH 32 // bit-width AXI USER field `define CALIPTRA_AXI_ID_WIDTH 5 // bit-width AXI ID field + `define CALIPTRA_AXI_DMA_ADDR_WIDTH 48 `define CALIPTRA_QSPI_CS_WIDTH 2 `define CALIPTRA_QSPI_IO_WIDTH 4 `define CALIPTRA_SOC_SEC_STATE_WIDTH 3 @@ -77,8 +78,10 @@ `define VEER_INTR_VEC_SOC_IFC_NOTIF 20 `define VEER_INTR_VEC_SHA_ERROR 21 `define VEER_INTR_VEC_SHA_NOTIF 22 + `define VEER_INTR_VEC_AXI_DMA_ERROR 23 + `define VEER_INTR_VEC_AXI_DMA_NOTIF 24 // Used to tie-off unused upper intr bits - `define VEER_INTR_VEC_MAX_ASSIGNED `VEER_INTR_VEC_SHA_NOTIF + `define VEER_INTR_VEC_MAX_ASSIGNED `VEER_INTR_VEC_AXI_DMA_NOTIF //`define CALIPTRA_KV_NUM_READ 6 //`define CALIPTRA_KV_NUM_WRITE 4 From 85c3cafe1f72510be406be0f8cbbce7104a5a761 Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Fri, 19 Jul 2024 11:29:47 -0700 Subject: [PATCH 38/58] AW should be derived from SRAM depth --- src/axi/rtl/caliptra_axi_sram.sv | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/axi/rtl/caliptra_axi_sram.sv b/src/axi/rtl/caliptra_axi_sram.sv index 81f007a4c..3d573d950 100644 --- a/src/axi/rtl/caliptra_axi_sram.sv +++ b/src/axi/rtl/caliptra_axi_sram.sv @@ -80,8 +80,7 @@ assign wr_error = 1'b0; caliptra_sram #( .DEPTH (1 << (AW - BW)), // Depth in WORDS - .DATA_WIDTH(DW), - .ADDR_WIDTH(AW) + .DATA_WIDTH(DW) ) i_sram ( .clk_i (clk ), From bce6f7e76727ff86975dd2303df184e3f5214322 Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Fri, 19 Jul 2024 15:22:04 -0700 Subject: [PATCH 39/58] Add new reg fields; syntax cleanup to simulate; now passes smoke test --- src/axi/rtl/axi_dma_ctrl.sv | 8 +++++--- src/axi/rtl/axi_dma_reg.rdl | 6 ++++-- src/axi/rtl/axi_dma_reg.sv | 6 ++++-- src/axi/rtl/axi_dma_reg_pkg.sv | 14 ++++++++++++++ src/axi/rtl/axi_dma_reg_uvm.sv | 18 ++++++++++++++---- src/axi/rtl/axi_mgr_wr.sv | 2 +- src/axi/rtl/caliptra_axi_sram.sv | 2 +- 7 files changed, 43 insertions(+), 13 deletions(-) diff --git a/src/axi/rtl/axi_dma_ctrl.sv b/src/axi/rtl/axi_dma_ctrl.sv index 52ef29d09..8635e88c7 100644 --- a/src/axi/rtl/axi_dma_ctrl.sv +++ b/src/axi/rtl/axi_dma_ctrl.sv @@ -150,8 +150,8 @@ import soc_ifc_pkg::*; logic [$clog2(FIFO_BC+1)-1:0] rd_credits; logic [AXI_LEN_BC_WIDTH-1:0] block_size_mask; // 1's based counters - logic [31-1:0] rd_bytes_requested; - logic [31-1:0] wr_bytes_requested; + logic [31:0] rd_bytes_requested; + logic [31:0] wr_bytes_requested; logic [AXI_LEN_BC_WIDTH-1:0] rd_align_req_byte_count; // byte-count in a request until nearest AXI boundary logic [AXI_LEN_BC_WIDTH-1:0] rd_final_req_byte_count; // byte-count in the final request, which may be smaller than a typical request logic [AXI_LEN_BC_WIDTH-1:0] rd_req_byte_count; // byte-count calculated for the current read request @@ -243,8 +243,10 @@ import soc_ifc_pkg::*; always_comb hwif_in.ctrl.go.hwclr = (ctrl_fsm_ps == DMA_DONE) || ((ctrl_fsm_ps == DMA_ERROR) && hwif_out.ctrl.flush.value); always_comb hwif_in.ctrl.flush.hwclr = (ctrl_fsm_ps == DMA_IDLE); + always_comb hwif_in.cap.fifo_max_depth.next = FIFO_BC/BC; always_comb hwif_in.status0.busy.next = (ctrl_fsm_ps != DMA_IDLE); always_comb hwif_in.status0.error.next = (ctrl_fsm_ps == DMA_ERROR); + always_comb hwif_in.status0.fifo_depth.next = 12'(fifo_depth); always_comb hwif_in.status0.axi_dma_fsm_ps.next = ctrl_fsm_ps; always_comb hwif_in.status1.bytes_remaining.next = bytes_remaining; @@ -454,7 +456,7 @@ import soc_ifc_pkg::*; r_req_if.byte_len = rd_req_byte_count - AXI_LEN_BC_WIDTH'(BC); r_req_if.fixed = hwif_out.ctrl.rd_fixed.value; r_req_if.lock = 1'b0; // TODO - w_req_if.valid = (ctrl_fsm_ps == DMA_WAIT_DATA) && !wr_req_hshake_bypass && (wr_bytes_requested < hwif_out.byte_count.count) && (fifo_depth >= wr_req_byte_count); + w_req_if.valid = (ctrl_fsm_ps == DMA_WAIT_DATA) && !wr_req_hshake_bypass && (wr_bytes_requested < hwif_out.byte_count.count) && (fifo_depth >= wr_req_byte_count[AXI_LEN_BC_WIDTH-1:BW]); w_req_if.addr = dst_addr + wr_bytes_requested; w_req_if.byte_len = wr_req_byte_count - AXI_LEN_BC_WIDTH'(BC); w_req_if.fixed = hwif_out.ctrl.wr_fixed.value; diff --git a/src/axi/rtl/axi_dma_reg.rdl b/src/axi/rtl/axi_dma_reg.rdl index b8f29e0bc..f7bf6e38a 100644 --- a/src/axi/rtl/axi_dma_reg.rdl +++ b/src/axi/rtl/axi_dma_reg.rdl @@ -46,7 +46,8 @@ addrmap axi_dma_reg { reg { name="Caliptra AXI DMA Capabilities"; desc="Provides information about configuration and enabled capabilities for the DMA block."; - field { desc="Reserved"; sw=r; } rsvd[32] = 32'h00000000; + field { desc="FIFO MAX DEPTH. Indicates number of available slots in the internal FIFO."; sw=r; hw=w; } fifo_max_depth[12]; + field { desc="Reserved"; sw=r; } rsvd[20] = 20'h00000; } cap; reg { @@ -107,7 +108,8 @@ addrmap axi_dma_reg { field { desc="Indicates if an operation has failed due to an error in decoding the command. When set, this field will prevent any further operations until it is cleared by setting the ctrl.flush field."; sw=r; hw=w; } error=1'b0; - field { desc="RESERVED."; sw=r; } rsvd0[14]=14'h0000; + field { desc="RESERVED."; sw=r; } rsvd0[2]=2'h0; + field { desc="FIFO DEPTH. Indicates number of populated slots in the internal FIFO."; sw=r; hw=w; } fifo_depth[12]; field { name = "Caliptra AXI DMA FSM Present State"; desc = "Indicates the present state of the Caliptra AXI DMA FSM."; diff --git a/src/axi/rtl/axi_dma_reg.sv b/src/axi/rtl/axi_dma_reg.sv index c41827cc2..798f7f051 100644 --- a/src/axi/rtl/axi_dma_reg.sv +++ b/src/axi/rtl/axi_dma_reg.sv @@ -2949,7 +2949,8 @@ module axi_dma_reg ( // Assign readback values to a flattened array logic [45-1:0][31:0] readback_array; assign readback_array[0][31:0] = (decoded_reg_strb.id && !decoded_req_is_wr) ? 32'h67768068 : '0; - assign readback_array[1][31:0] = (decoded_reg_strb.cap && !decoded_req_is_wr) ? 32'h0 : '0; + assign readback_array[1][11:0] = (decoded_reg_strb.cap && !decoded_req_is_wr) ? hwif_in.cap.fifo_max_depth.next : '0; + assign readback_array[1][31:12] = (decoded_reg_strb.cap && !decoded_req_is_wr) ? 20'h0 : '0; assign readback_array[2][0:0] = (decoded_reg_strb.ctrl && !decoded_req_is_wr) ? field_storage.ctrl.go.value : '0; assign readback_array[2][1:1] = (decoded_reg_strb.ctrl && !decoded_req_is_wr) ? field_storage.ctrl.flush.value : '0; assign readback_array[2][15:2] = (decoded_reg_strb.ctrl && !decoded_req_is_wr) ? 14'h0 : '0; @@ -2963,7 +2964,8 @@ module axi_dma_reg ( assign readback_array[2][31:29] = (decoded_reg_strb.ctrl && !decoded_req_is_wr) ? 3'h0 : '0; assign readback_array[3][0:0] = (decoded_reg_strb.status0 && !decoded_req_is_wr) ? hwif_in.status0.busy.next : '0; assign readback_array[3][1:1] = (decoded_reg_strb.status0 && !decoded_req_is_wr) ? hwif_in.status0.error.next : '0; - assign readback_array[3][15:2] = (decoded_reg_strb.status0 && !decoded_req_is_wr) ? 14'h0 : '0; + assign readback_array[3][3:2] = (decoded_reg_strb.status0 && !decoded_req_is_wr) ? 2'h0 : '0; + assign readback_array[3][15:4] = (decoded_reg_strb.status0 && !decoded_req_is_wr) ? hwif_in.status0.fifo_depth.next : '0; assign readback_array[3][17:16] = (decoded_reg_strb.status0 && !decoded_req_is_wr) ? field_storage.status0.axi_dma_fsm_ps.value : '0; assign readback_array[3][31:18] = (decoded_reg_strb.status0 && !decoded_req_is_wr) ? 14'h0 : '0; assign readback_array[4][31:0] = (decoded_reg_strb.status1 && !decoded_req_is_wr) ? hwif_in.status1.bytes_remaining.next : '0; diff --git a/src/axi/rtl/axi_dma_reg_pkg.sv b/src/axi/rtl/axi_dma_reg_pkg.sv index 7f2b42a18..9098d4a41 100644 --- a/src/axi/rtl/axi_dma_reg_pkg.sv +++ b/src/axi/rtl/axi_dma_reg_pkg.sv @@ -6,6 +6,14 @@ package axi_dma_reg_pkg; localparam AXI_DMA_REG_DATA_WIDTH = 32; localparam AXI_DMA_REG_MIN_ADDR_WIDTH = 12; + typedef struct packed{ + logic [11:0] next; + } axi_dma_reg__cap__fifo_max_depth__in_t; + + typedef struct packed{ + axi_dma_reg__cap__fifo_max_depth__in_t fifo_max_depth; + } axi_dma_reg__cap__in_t; + typedef struct packed{ logic hwclr; } axi_dma_reg__ctrl__go__in_t; @@ -27,6 +35,10 @@ package axi_dma_reg_pkg; logic next; } axi_dma_reg__status0__error__in_t; + typedef struct packed{ + logic [11:0] next; + } axi_dma_reg__status0__fifo_depth__in_t; + typedef struct packed{ logic [1:0] next; } axi_dma_reg__status0__axi_dma_fsm_ps__in_t; @@ -34,6 +46,7 @@ package axi_dma_reg_pkg; typedef struct packed{ axi_dma_reg__status0__busy__in_t busy; axi_dma_reg__status0__error__in_t error; + axi_dma_reg__status0__fifo_depth__in_t fifo_depth; axi_dma_reg__status0__axi_dma_fsm_ps__in_t axi_dma_fsm_ps; } axi_dma_reg__status0__in_t; @@ -129,6 +142,7 @@ package axi_dma_reg_pkg; logic cptra_pwrgood; logic soc_req; logic dma_swwel; + axi_dma_reg__cap__in_t cap; axi_dma_reg__ctrl__in_t ctrl; axi_dma_reg__status0__in_t status0; axi_dma_reg__status1__in_t status1; diff --git a/src/axi/rtl/axi_dma_reg_uvm.sv b/src/axi/rtl/axi_dma_reg_uvm.sv index ef35779e4..7697d38c6 100644 --- a/src/axi/rtl/axi_dma_reg_uvm.sv +++ b/src/axi/rtl/axi_dma_reg_uvm.sv @@ -40,8 +40,10 @@ package axi_dma_reg_uvm; protected uvm_reg_data_t m_data; protected bit m_is_read; - axi_dma_reg__cap_bit_cg rsvd_bit_cg[32]; + axi_dma_reg__cap_bit_cg fifo_max_depth_bit_cg[12]; + axi_dma_reg__cap_bit_cg rsvd_bit_cg[20]; axi_dma_reg__cap_fld_cg fld_cg; + rand uvm_reg_field fifo_max_depth; rand uvm_reg_field rsvd; function new(string name = "axi_dma_reg__cap"); @@ -54,9 +56,12 @@ package axi_dma_reg_uvm; uvm_reg_map map); virtual function void build(); + this.fifo_max_depth = new("fifo_max_depth"); + this.fifo_max_depth.configure(this, 12, 0, "RO", 1, 'h0, 0, 1, 0); this.rsvd = new("rsvd"); - this.rsvd.configure(this, 32, 0, "RO", 0, 'h0, 1, 1, 0); + this.rsvd.configure(this, 20, 12, "RO", 0, 'h0, 1, 1, 0); if (has_coverage(UVM_CVR_REG_BITS)) begin + foreach(fifo_max_depth_bit_cg[bt]) fifo_max_depth_bit_cg[bt] = new(); foreach(rsvd_bit_cg[bt]) rsvd_bit_cg[bt] = new(); end if (has_coverage(UVM_CVR_FIELD_VALS)) @@ -152,13 +157,15 @@ package axi_dma_reg_uvm; axi_dma_reg__status0_bit_cg busy_bit_cg[1]; axi_dma_reg__status0_bit_cg error_bit_cg[1]; - axi_dma_reg__status0_bit_cg rsvd0_bit_cg[14]; + axi_dma_reg__status0_bit_cg rsvd0_bit_cg[2]; + axi_dma_reg__status0_bit_cg fifo_depth_bit_cg[12]; axi_dma_reg__status0_bit_cg axi_dma_fsm_ps_bit_cg[2]; axi_dma_reg__status0_bit_cg rsvd1_bit_cg[14]; axi_dma_reg__status0_fld_cg fld_cg; rand uvm_reg_field busy; rand uvm_reg_field error; rand uvm_reg_field rsvd0; + rand uvm_reg_field fifo_depth; rand uvm_reg_field axi_dma_fsm_ps; rand uvm_reg_field rsvd1; @@ -177,7 +184,9 @@ package axi_dma_reg_uvm; this.error = new("error"); this.error.configure(this, 1, 1, "RO", 1, 'h0, 1, 1, 0); this.rsvd0 = new("rsvd0"); - this.rsvd0.configure(this, 14, 2, "RO", 0, 'h0, 1, 1, 0); + this.rsvd0.configure(this, 2, 2, "RO", 0, 'h0, 1, 1, 0); + this.fifo_depth = new("fifo_depth"); + this.fifo_depth.configure(this, 12, 4, "RO", 1, 'h0, 0, 1, 0); this.axi_dma_fsm_ps = new("axi_dma_fsm_ps"); this.axi_dma_fsm_ps.configure(this, 2, 16, "RO", 1, 'h0, 1, 1, 0); this.rsvd1 = new("rsvd1"); @@ -186,6 +195,7 @@ package axi_dma_reg_uvm; foreach(busy_bit_cg[bt]) busy_bit_cg[bt] = new(); foreach(error_bit_cg[bt]) error_bit_cg[bt] = new(); foreach(rsvd0_bit_cg[bt]) rsvd0_bit_cg[bt] = new(); + foreach(fifo_depth_bit_cg[bt]) fifo_depth_bit_cg[bt] = new(); foreach(axi_dma_fsm_ps_bit_cg[bt]) axi_dma_fsm_ps_bit_cg[bt] = new(); foreach(rsvd1_bit_cg[bt]) rsvd1_bit_cg[bt] = new(); end diff --git a/src/axi/rtl/axi_mgr_wr.sv b/src/axi/rtl/axi_mgr_wr.sv index b27f227d4..5cdd73fd6 100644 --- a/src/axi/rtl/axi_mgr_wr.sv +++ b/src/axi/rtl/axi_mgr_wr.sv @@ -162,7 +162,7 @@ module axi_mgr_wr import axi_pkg::*; #( always_comb txn_final_beat = m_axi_if.wvalid && m_axi_if.wready && m_axi_if.wlast; always_comb begin - m_axi_if.wvalid = valid_i; + m_axi_if.wvalid = txn_active && valid_i; m_axi_if.wdata = data_i; m_axi_if.wstrb = '1; // TODO support this? requires significant ctrl updates m_axi_if.wlast = ~|txn_down_cnt; diff --git a/src/axi/rtl/caliptra_axi_sram.sv b/src/axi/rtl/caliptra_axi_sram.sv index 3d573d950..2f5a54fe0 100644 --- a/src/axi/rtl/caliptra_axi_sram.sv +++ b/src/axi/rtl/caliptra_axi_sram.sv @@ -86,7 +86,7 @@ caliptra_sram #( .cs_i (dv ), .we_i (write), - .addr_i (addr ), + .addr_i (addr[AW-1:BW]), .wdata_i (wdata), .rdata_o (rdata) ); From 38a014c724cce430d537eb693e68529a8b509e4b Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Mon, 22 Jul 2024 16:46:53 -0700 Subject: [PATCH 40/58] Fix reset if-else syntax on ctx FF blocks --- src/axi/rtl/axi_sub_rd.sv | 2 +- src/axi/rtl/axi_sub_wr.sv | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/axi/rtl/axi_sub_rd.sv b/src/axi/rtl/axi_sub_rd.sv index bc23c4533..a45d341da 100644 --- a/src/axi/rtl/axi_sub_rd.sv +++ b/src/axi/rtl/axi_sub_rd.sv @@ -144,7 +144,7 @@ module axi_sub_rd import axi_pkg::*; #( txn_ctx <= '{default:0, burst:AXI_BURST_FIXED}; txn_cnt <= '0; end - if (s_axi_if.arvalid && s_axi_if.arready) begin + else if (s_axi_if.arvalid && s_axi_if.arready) begin txn_ctx.addr <= s_axi_if.araddr; txn_ctx.burst <= axi_burst_e'(s_axi_if.arburst); txn_ctx.size <= s_axi_if.arsize; diff --git a/src/axi/rtl/axi_sub_wr.sv b/src/axi/rtl/axi_sub_wr.sv index 6c61ab638..7bbbf3fa3 100644 --- a/src/axi/rtl/axi_sub_wr.sv +++ b/src/axi/rtl/axi_sub_wr.sv @@ -168,12 +168,11 @@ module axi_sub_wr import axi_pkg::*; #( always_comb req_matches_ex = (req_ctx.addr & ex_ctx[req_ctx.id].addr_mask) == ex_ctx[req_ctx.id].addr; - // TODO reset? - always_ff@(posedge clk/* or negedge rst_n*/) begin -// if (!rst_n) begin -// txn_ctx <= '{default:0}; -// end - if (req_valid && req_ready) begin + always_ff@(posedge clk or negedge rst_n) begin + if (!rst_n) begin + txn_ctx <= '{default:0}; + end + else if (req_valid && req_ready) begin txn_ctx.addr <= req_ctx.addr; txn_ctx.burst <= req_ctx.burst; txn_ctx.size <= req_ctx.size; From b3e2b6c467f55413d2ac4a98f1b56a89b439f92c Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Mon, 22 Jul 2024 17:11:17 -0700 Subject: [PATCH 41/58] Default assignment fix --- src/axi/rtl/axi_sub_wr.sv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/axi/rtl/axi_sub_wr.sv b/src/axi/rtl/axi_sub_wr.sv index 7bbbf3fa3..f468dc66a 100644 --- a/src/axi/rtl/axi_sub_wr.sv +++ b/src/axi/rtl/axi_sub_wr.sv @@ -170,7 +170,7 @@ module axi_sub_wr import axi_pkg::*; #( always_ff@(posedge clk or negedge rst_n) begin if (!rst_n) begin - txn_ctx <= '{default:0}; + txn_ctx <= '{default:0, burst:AXI_BURST_FIXED}; end else if (req_valid && req_ready) begin txn_ctx.addr <= req_ctx.addr; From 2f8d8c02cad58e538b7d14fe9f541081cc818774 Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Thu, 25 Jul 2024 14:56:28 -0700 Subject: [PATCH 42/58] TB updates to support all prev. functionality; smoke_test_dma passes; add AXI assertions --- src/axi/rtl/axi_dma_ctrl.sv | 35 +- src/axi/rtl/axi_dma_reg.rdl | 2 +- src/axi/rtl/axi_mgr_rd.sv | 10 +- src/axi/rtl/axi_mgr_wr.sv | 9 +- src/axi/rtl/axi_sub_rd.sv | 43 +- src/integration/rtl/caliptra_reg.h | 8 +- src/integration/rtl/caliptra_reg_defines.svh | 8 +- src/integration/tb/caliptra_top_tb.sv | 1223 +++++------------ src/integration/tb/caliptra_top_tb_pkg.sv | 9 +- .../tb/caliptra_top_tb_services.sv | 12 +- src/integration/tb/test_caliptra_top_tb.cpp | 5 +- .../test_suites/iccm_lock/caliptra_isr.h | 5 + .../test_suites/iccm_lock/iccm_lock.c | 2 + .../test_suites/includes/caliptra_defines.h | 10 +- .../libs/caliptra_isr/caliptra_isr.c | 40 +- .../test_suites/libs/soc_ifc/soc_ifc.c | 113 ++ .../test_suites/libs/soc_ifc/soc_ifc.h | 28 + .../test_suites/smoke_test_dma/caliptra_isr.h | 317 +++++ .../smoke_test_dma/smoke_test_dma.c | 127 ++ .../smoke_test_dma/smoke_test_dma.yml | 17 + .../smoke_test_mbox/caliptra_isr.h | 5 + .../smoke_test_mbox/smoke_test_mbox.c | 2 + tools/scripts/Makefile | 8 +- 23 files changed, 1080 insertions(+), 958 deletions(-) create mode 100644 src/integration/test_suites/smoke_test_dma/caliptra_isr.h create mode 100644 src/integration/test_suites/smoke_test_dma/smoke_test_dma.c create mode 100755 src/integration/test_suites/smoke_test_dma/smoke_test_dma.yml diff --git a/src/axi/rtl/axi_dma_ctrl.sv b/src/axi/rtl/axi_dma_ctrl.sv index 8635e88c7..25571f5e3 100644 --- a/src/axi/rtl/axi_dma_ctrl.sv +++ b/src/axi/rtl/axi_dma_ctrl.sv @@ -99,7 +99,7 @@ import soc_ifc_pkg::*; axi_dma_reg_pkg::axi_dma_reg__in_t hwif_in; axi_dma_reg_pkg::axi_dma_reg__out_t hwif_out; - enum logic [2:0] { + enum logic [1:0] { DMA_IDLE, DMA_WAIT_DATA, DMA_DONE, @@ -237,6 +237,9 @@ import soc_ifc_pkg::*; ctrl_fsm_ns = DMA_IDLE; end end + default: begin + ctrl_fsm_ns = ctrl_fsm_ps; + end endcase end @@ -337,7 +340,7 @@ import soc_ifc_pkg::*; ((hwif_out.ctrl.rd_route.value == axi_dma_reg__ctrl__rd_route__rd_route_e__MBOX) || (hwif_out.ctrl.wr_route.value == axi_dma_reg__ctrl__wr_route__wr_route_e__MBOX))); // power of 2 and word-aligned - cmd_inv_block_size = |(hwif_out.block_size.size.value & hwif_out.block_size.size.value) || + cmd_inv_block_size = |(hwif_out.block_size.size.value & (hwif_out.block_size.size.value-1)) || |hwif_out.block_size.size.value[BW-1:0]; cmd_inv_rd_fixed = hwif_out.ctrl.rd_fixed.value && hwif_out.ctrl.rd_route.value == axi_dma_reg__ctrl__rd_route__rd_route_e__DISABLE; cmd_inv_wr_fixed = hwif_out.ctrl.wr_fixed.value && hwif_out.ctrl.wr_route.value == axi_dma_reg__ctrl__wr_route__wr_route_e__DISABLE; @@ -413,12 +416,12 @@ import soc_ifc_pkg::*; else if (hwif_out.block_size.size.value == 0) begin rd_req_stall <= 1'b0; end - else if (rd_req_hshake) begin - rd_req_stall <= 1'b1; - end else if (recovery_data_avail) begin rd_req_stall <= 1'b0; end + else if (rd_req_hshake || hwif_out.ctrl.go.value) begin + rd_req_stall <= 1'b1; + end end always_ff @(posedge clk or negedge rst_n) begin @@ -440,11 +443,13 @@ import soc_ifc_pkg::*; always_comb block_size_mask = hwif_out.block_size.size.value - 1; always_comb begin - rd_align_req_byte_count = (MAX_BLOCK_SIZE - r_req_if.addr[$clog2(MAX_BLOCK_SIZE)-1:0]) & block_size_mask; + rd_align_req_byte_count = ~|hwif_out.block_size.size.value || (MAX_BLOCK_SIZE < hwif_out.block_size.size.value) ? (MAX_BLOCK_SIZE - r_req_if.addr[$clog2(MAX_BLOCK_SIZE)-1:0]) : + hwif_out.block_size.size.value - (r_req_if.addr[$clog2(MAX_BLOCK_SIZE)-1:0] & block_size_mask); rd_final_req_byte_count = hwif_out.byte_count.count.value - rd_bytes_requested; rd_req_byte_count = rd_final_req_byte_count < rd_align_req_byte_count ? rd_final_req_byte_count : rd_align_req_byte_count; - wr_align_req_byte_count = (MAX_BLOCK_SIZE - w_req_if.addr[$clog2(MAX_BLOCK_SIZE)-1:0]) & block_size_mask; + wr_align_req_byte_count = ~|hwif_out.block_size.size.value || (MAX_BLOCK_SIZE < hwif_out.block_size.size.value) ? (MAX_BLOCK_SIZE - w_req_if.addr[$clog2(MAX_BLOCK_SIZE)-1:0]) : + hwif_out.block_size.size.value - (w_req_if.addr[$clog2(MAX_BLOCK_SIZE)-1:0] & block_size_mask); wr_final_req_byte_count = hwif_out.byte_count.count.value - wr_bytes_requested; wr_req_byte_count = wr_final_req_byte_count < wr_align_req_byte_count ? wr_final_req_byte_count : wr_align_req_byte_count; @@ -650,11 +655,15 @@ import soc_ifc_pkg::*; end end - `ifdef VERILATOR - FIXME_ASSERT_INIT(DW == 32) - FIXME_ASSERT(rd_credits <= FIFO_BC) - FIXME_ASSERT(!((rd_credits < BC) && rd_req_hshake)) - FIXME_ASSERT(!((ctrl_fsm_ps == DMA_DONE) && (rd_credits != FIFO_BC))) - `endif + // Requests must have valid length + `CALIPTRA_ASSERT(AXI_DMA_VLD_RD_REQ_LEN, rd_req_hshake |-> r_req_if.byte_len < MAX_BLOCK_SIZE, clk, !rst_n) + `CALIPTRA_ASSERT(AXI_DMA_VLD_WR_REQ_LEN, wr_req_hshake |-> w_req_if.byte_len < MAX_BLOCK_SIZE, clk, !rst_n) + // Requests must not cross AXI boundary (4KiB) + `CALIPTRA_ASSERT(AXI_DMA_VLD_RD_REQ_BND, rd_req_hshake |-> r_req_if.addr[AW-1:AXI_LEN_BC_WIDTH] == ((r_req_if.addr + r_req_if.byte_len) >> AXI_LEN_BC_WIDTH), clk, !rst_n) + `CALIPTRA_ASSERT(AXI_DMA_VLD_WR_REQ_BND, wr_req_hshake |-> w_req_if.addr[AW-1:AXI_LEN_BC_WIDTH] == ((w_req_if.addr + w_req_if.byte_len) >> AXI_LEN_BC_WIDTH), clk, !rst_n) + `CALIPTRA_ASSERT_INIT(AXI_DMA_DW_32, DW == 32) + `CALIPTRA_ASSERT(AXI_DMA_LIM_RD_CRED, rd_credits <= FIFO_BC, clk, !rst_n) + `CALIPTRA_ASSERT(AXI_DMA_MIN_RD_CRED, !((rd_credits < BC) && rd_req_hshake), clk, !rst_n) + `CALIPTRA_ASSERT(AXI_DMA_RST_RD_CRED, (ctrl_fsm_ps == DMA_DONE) |-> (rd_credits == FIFO_BC), clk, !rst_n) endmodule diff --git a/src/axi/rtl/axi_dma_reg.rdl b/src/axi/rtl/axi_dma_reg.rdl index f7bf6e38a..9cb8e2638 100644 --- a/src/axi/rtl/axi_dma_reg.rdl +++ b/src/axi/rtl/axi_dma_reg.rdl @@ -167,7 +167,7 @@ addrmap axi_dma_reg { // Byte Count reg { name="Caliptra AXI DMA Byte Count"; - desc="Contains total number of bytes to be transferred by current operation."; + desc="Contains total number of bytes to be transferred by current operation. Must be a multiple of the AXI Data Width. (Narrow/unaligned transfers are not supported)"; field { desc="Byte Count"; sw=rw; swwel=dma_swwel; hw=r; } count[32]=32'h00000000; } byte_count; diff --git a/src/axi/rtl/axi_mgr_rd.sv b/src/axi/rtl/axi_mgr_rd.sv index 0ff8be47c..5e000fa3a 100644 --- a/src/axi/rtl/axi_mgr_rd.sv +++ b/src/axi/rtl/axi_mgr_rd.sv @@ -179,12 +179,10 @@ module axi_mgr_rd import axi_pkg::*; #( // --------------------------------------- // // Assertions // // --------------------------------------- // - `ifdef VERILATOR - `FIXME_ASSERT(req.valid && addr + len <= 4096) - `FIXME_ASSERT(req_if.byte_len[11:10] == 2'b00) - `FIXME_ASSERT(req_if.rvalid && txn_active) - `FIXME_ASSERT_NEVER(fixme_valid_and_ready && ready_i, "Received data with no space in FIFO! Is the FSM credit calculation wrong?") - `endif + `CALIPTRA_ASSERT(AXI_MGR_REQ_BND, req_if.valid |-> ((req_if.addr[11:0] + req_if.byte_len) <= 4096), clk, !rst_n) + `CALIPTRA_ASSERT(AXI_MGR_LEGAL_LEN, req_if.valid |-> (req_if.byte_len[AXI_LEN_BC_WIDTH-1:BW]) < AXI_LEN_MAX_VALUE, clk, !rst_n) + `CALIPTRA_ASSERT(AXI_MGR_DATA_WHILE_ACTIVE, valid_o |-> txn_active, clk, !rst_n) + `CALIPTRA_ASSERT_NEVER(AXI_MGR_OFLOW, m_axi_if.rready && !ready_i, clk, !rst_n) endmodule diff --git a/src/axi/rtl/axi_mgr_wr.sv b/src/axi/rtl/axi_mgr_wr.sv index 5cdd73fd6..4ce67c0c1 100644 --- a/src/axi/rtl/axi_mgr_wr.sv +++ b/src/axi/rtl/axi_mgr_wr.sv @@ -181,10 +181,9 @@ module axi_mgr_wr import axi_pkg::*; #( // --------------------------------------- // // Assertions // // --------------------------------------- // - `ifdef VERILATOR - `FIXME_ASSERT(req.valid && addr + len <= 4096) - `FIXME_ASSERT(req_if.byte_len[11:10] == 2'b00) - `FIXME_ASSERT(req_if.rvalid && txn_active) - `endif + `CALIPTRA_ASSERT(AXI_MGR_REQ_BND, req_if.valid |-> ((req_if.addr[11:0] + req_if.byte_len) <= 4096), clk, !rst_n) + `CALIPTRA_ASSERT(AXI_MGR_LEGAL_LEN, req_if.valid |-> (req_if.byte_len[AXI_LEN_BC_WIDTH-1:BW]) < AXI_LEN_MAX_VALUE, clk, !rst_n) + `CALIPTRA_ASSERT(AXI_MGR_DATA_WHILE_ACTIVE, ready_o |-> txn_active, clk, !rst_n) + `CALIPTRA_ASSERT_NEVER(AXI_MGR_UFLOW, m_axi_if.wvalid && !valid_i, clk, !rst_n) endmodule diff --git a/src/axi/rtl/axi_sub_rd.sv b/src/axi/rtl/axi_sub_rd.sv index a45d341da..3538984bc 100644 --- a/src/axi/rtl/axi_sub_rd.sv +++ b/src/axi/rtl/axi_sub_rd.sv @@ -103,8 +103,8 @@ module axi_sub_rd import axi_pkg::*; #( logic [AW-1:0] txn_addr_nxt; logic [ 7:0] txn_cnt; // Internal down-counter to track txn progress logic txn_active; - logic [C_LAT:0] txn_rvalid; - xfer_ctx_t [C_LAT:0] txn_xfer_ctx; + logic txn_rvalid [C_LAT+1]; + xfer_ctx_t txn_xfer_ctx [C_LAT+1]; logic txn_final_beat; // Data pipeline signals (skid buffer) @@ -168,9 +168,9 @@ module axi_sub_rd import axi_pkg::*; #( // Only make the request to component if we have space in the pipeline to // store the result (under worst-case AXI backpressure) - // To check this, look at the 'ready' output from the FINAL stage of the + // To check this, look at the 'ready' output from all stages of the // skidbuffer pipeline - always_comb dv = txn_active && dp_rready[C_LAT]; + always_comb dv = txn_active && &dp_rready; always_comb txn_rvalid[0] = dv && !hld; // Asserts on the final beat of the COMPONENT INF which means it lags the @@ -212,25 +212,23 @@ module axi_sub_rd import axi_pkg::*; #( // Shift Register to track requests made to component generate if (C_LAT > 0) begin: TXN_SR - always_ff@(posedge clk or negedge rst_n) begin - if (!rst_n) begin - txn_rvalid[C_LAT:1] <= C_LAT'(0); - end - else begin - txn_rvalid[C_LAT:1] <= txn_rvalid[C_LAT-1:0]; - end - end - // Context is maintained alongside request while waiting for // component response to arrive - if (C_LAT > 1) begin - for (cp = 1; cp <= C_LAT; cp++) begin: CTX_PIPELINE - // No reset needed on data path -- txn_rvalid (control path) is reset - always_ff@(posedge clk) begin - txn_xfer_ctx[cp] <= txn_xfer_ctx[cp-1]; + for (cp = 1; cp <= C_LAT; cp++) begin: CTX_PIPELINE + always_ff@(posedge clk or negedge rst_n) begin + if (!rst_n) begin + txn_rvalid[cp] <= 1'b0; end - end: CTX_PIPELINE - end + else begin + txn_rvalid[cp] <= txn_rvalid[cp-1]; + end + end + + // No reset needed on data path -- txn_rvalid (control path) is reset + always_ff@(posedge clk) begin + txn_xfer_ctx[cp] <= txn_xfer_ctx[cp-1]; + end + end: CTX_PIPELINE end: TXN_SR endgenerate @@ -395,8 +393,9 @@ module axi_sub_rd import axi_pkg::*; #( generate if (C_LAT > 0) begin for (sva_ii = 0; sva_ii < C_LAT; sva_ii++) begin - // Last stage should be first to fill and last to go empty - `CALIPTRA_ASSERT_NEVER(ERR_RD_SKD_BUF, dp_rready[sva_ii+1] && !dp_rready[sva_ii], clk, !rst_n) + // Last stage should be first to fill and first to go empty + `CALIPTRA_ASSERT_NEVER(ERR_RD_SKD_BUF_FILL, $fell(dp_rready[sva_ii+1]) && !dp_rready[sva_ii], clk, !rst_n) + `CALIPTRA_ASSERT_NEVER(ERR_RD_SKD_BUF_DRAIN, $rose(dp_rready[sva_ii+1]) && dp_rready[sva_ii], clk, !rst_n) end end endgenerate diff --git a/src/integration/rtl/caliptra_reg.h b/src/integration/rtl/caliptra_reg.h index 9099d2fdb..34edfb866 100644 --- a/src/integration/rtl/caliptra_reg.h +++ b/src/integration/rtl/caliptra_reg.h @@ -5368,6 +5368,10 @@ #define AXI_DMA_REG_ID (0x0) #define CLP_AXI_DMA_REG_CAP (0x30022004) #define AXI_DMA_REG_CAP (0x4) +#define AXI_DMA_REG_CAP_FIFO_MAX_DEPTH_LOW (0) +#define AXI_DMA_REG_CAP_FIFO_MAX_DEPTH_MASK (0xfff) +#define AXI_DMA_REG_CAP_RSVD_LOW (12) +#define AXI_DMA_REG_CAP_RSVD_MASK (0xfffff000) #define CLP_AXI_DMA_REG_CTRL (0x30022008) #define AXI_DMA_REG_CTRL (0x8) #define AXI_DMA_REG_CTRL_GO_LOW (0) @@ -5399,7 +5403,9 @@ #define AXI_DMA_REG_STATUS0_ERROR_LOW (1) #define AXI_DMA_REG_STATUS0_ERROR_MASK (0x2) #define AXI_DMA_REG_STATUS0_RSVD0_LOW (2) -#define AXI_DMA_REG_STATUS0_RSVD0_MASK (0xfffc) +#define AXI_DMA_REG_STATUS0_RSVD0_MASK (0xc) +#define AXI_DMA_REG_STATUS0_FIFO_DEPTH_LOW (4) +#define AXI_DMA_REG_STATUS0_FIFO_DEPTH_MASK (0xfff0) #define AXI_DMA_REG_STATUS0_AXI_DMA_FSM_PS_LOW (16) #define AXI_DMA_REG_STATUS0_AXI_DMA_FSM_PS_MASK (0x30000) #define AXI_DMA_REG_STATUS0_RSVD1_LOW (18) diff --git a/src/integration/rtl/caliptra_reg_defines.svh b/src/integration/rtl/caliptra_reg_defines.svh index 12601d5f6..02401a73c 100644 --- a/src/integration/rtl/caliptra_reg_defines.svh +++ b/src/integration/rtl/caliptra_reg_defines.svh @@ -5368,6 +5368,10 @@ `define AXI_DMA_REG_ID (32'h0) `define CLP_AXI_DMA_REG_CAP (32'h30022004) `define AXI_DMA_REG_CAP (32'h4) +`define AXI_DMA_REG_CAP_FIFO_MAX_DEPTH_LOW (0) +`define AXI_DMA_REG_CAP_FIFO_MAX_DEPTH_MASK (32'hfff) +`define AXI_DMA_REG_CAP_RSVD_LOW (12) +`define AXI_DMA_REG_CAP_RSVD_MASK (32'hfffff000) `define CLP_AXI_DMA_REG_CTRL (32'h30022008) `define AXI_DMA_REG_CTRL (32'h8) `define AXI_DMA_REG_CTRL_GO_LOW (0) @@ -5399,7 +5403,9 @@ `define AXI_DMA_REG_STATUS0_ERROR_LOW (1) `define AXI_DMA_REG_STATUS0_ERROR_MASK (32'h2) `define AXI_DMA_REG_STATUS0_RSVD0_LOW (2) -`define AXI_DMA_REG_STATUS0_RSVD0_MASK (32'hfffc) +`define AXI_DMA_REG_STATUS0_RSVD0_MASK (32'hc) +`define AXI_DMA_REG_STATUS0_FIFO_DEPTH_LOW (4) +`define AXI_DMA_REG_STATUS0_FIFO_DEPTH_MASK (32'hfff0) `define AXI_DMA_REG_STATUS0_AXI_DMA_FSM_PS_LOW (16) `define AXI_DMA_REG_STATUS0_AXI_DMA_FSM_PS_MASK (32'h30000) `define AXI_DMA_REG_STATUS0_RSVD1_LOW (18) diff --git a/src/integration/tb/caliptra_top_tb.sv b/src/integration/tb/caliptra_top_tb.sv index f3a0704e2..fcfabd1f2 100755 --- a/src/integration/tb/caliptra_top_tb.sv +++ b/src/integration/tb/caliptra_top_tb.sv @@ -46,6 +46,7 @@ module caliptra_top_tb ( `endif int cycleCnt; + int poll_count; logic cptra_pwrgood; @@ -56,54 +57,14 @@ module caliptra_top_tb ( logic [`CLP_OBF_KEY_DWORDS-1:0][31:0] cptra_obf_key; logic [0:`CLP_OBF_KEY_DWORDS-1][31:0] cptra_obf_key_uds, cptra_obf_key_fe; - // logic [11:0][31:0] cptra_uds_tb; - // logic [7:0][31:0] cptra_fe_tb; logic [0:`CLP_OBF_UDS_DWORDS-1][31:0] cptra_uds_tb; logic [0:`CLP_OBF_FE_DWORDS-1][31:0] cptra_fe_tb; - // logic [11:0][31:0] cptra_uds_rand; - // logic [7:0][31:0] cptra_fe_rand; logic [0:`CLP_OBF_UDS_DWORDS-1][31:0] cptra_uds_rand; logic [0:`CLP_OBF_FE_DWORDS-1][31:0] cptra_fe_rand; logic [0:`CLP_OBF_KEY_DWORDS-1][31:0] cptra_obf_key_tb; -// logic start_apb_fuse_sequence; - -// enum logic [5:0] { -// S_APB_IDLE, -// S_APB_WR_UDS, -// S_APB_WR_FE, -// S_APB_WR_SOC_STEPPING_ID, -// S_APB_WR_FUSE_DONE, -// S_APB_POLL_FLOW_ST, -// S_APB_WR_BOOT_GO, -// S_APB_WAIT_FW_TEST, -// S_APB_POLL_LOCK, -// S_APB_PRE_WR_CMD, -// S_APB_WR_CMD, -// S_APB_WR_DLEN, -// S_APB_WR_DATAIN, -// S_APB_WR_STATUS, -// S_APB_WR_EXEC, -// S_APB_WAIT_ERROR_AXS, -// S_APB_RD_HW_ERROR_FATAL, -// S_APB_WR_HW_ERROR_FATAL, -// S_APB_RD_HW_ERROR_NON_FATAL, -// S_APB_WR_HW_ERROR_NON_FATAL, -// S_APB_DONE, -// S_APB_RD_DLEN, -// S_APB_RD_DATAOUT, -// S_APB_RST_EXEC, -// S_APB_ERROR -// } n_state_apb, c_state_apb; - - parameter FW_NUM_DWORDS = 256; - -// logic [$clog2(FW_NUM_DWORDS)-1:0] apb_wr_count, apb_wr_count_nxt; -// logic [31:0] apb_rd_count, apb_rd_count_nxt, dlen; -// logic apb_enable_ph; -// logic apb_xfer_end; -// logic execute_mbox_rx_protocol; + localparam FW_NUM_DWORDS = 256; //jtag interface logic jtag_tck; // JTAG clk @@ -112,23 +73,16 @@ module caliptra_top_tb ( logic jtag_trst_n; // JTAG Reset logic jtag_tdo; // JTAG TDO logic jtag_tdoEn; // JTAG TDO enable -// //APB Interface -// logic [`CALIPTRA_APB_ADDR_WIDTH-1:0] PADDR; -// logic [2:0] PPROT; -// logic PSEL; -// logic PENABLE; -// logic PWRITE; -// logic [`CALIPTRA_APB_DATA_WIDTH-1:0] PWDATA; -// logic [`CALIPTRA_APB_USER_WIDTH-1:0] PAUSER; -// -// logic PREADY; -// logic PSLVERR; -// logic [`CALIPTRA_APB_DATA_WIDTH-1:0] PRDATA; // AXI request signals - axi_resp_e wresp, rresp[]; - logic [`CALIPTRA_AXI_DATA_WIDTH-1:0] wdata[], rdata[]; - logic [`CALIPTRA_AXI_DATA_WIDTH/8-1:0] wstrb[]; + axi_resp_e wresp, rresp; + logic [`CALIPTRA_AXI_DATA_WIDTH-1:0] wdata, rdata; + logic [`CALIPTRA_AXI_DATA_WIDTH/8-1:0] wstrb_array[]; + logic [`CALIPTRA_AXI_DATA_WIDTH-1:0] rdata_array[]; + axi_resp_e rresp_array[]; + + int byte_count; + int dw_count; // AXI Interface axi_if #( @@ -137,6 +91,18 @@ module caliptra_top_tb ( .IW(`CALIPTRA_AXI_ID_WIDTH), .UW(`CALIPTRA_AXI_USER_WIDTH) ) s_axi_if (.clk(core_clk), .rst_n(cptra_rst_b)); + axi_if #( + .AW(`CALIPTRA_AXI_DMA_ADDR_WIDTH), + .DW(CPTRA_AXI_DMA_DATA_WIDTH), + .IW(CPTRA_AXI_DMA_ID_WIDTH), + .UW(CPTRA_AXI_DMA_USER_WIDTH) + ) m_axi_if (.clk(core_clk), .rst_n(cptra_rst_b)); + axi_if #( + .AW(AXI_SRAM_ADDR_WIDTH), + .DW(CPTRA_AXI_DMA_DATA_WIDTH), + .IW(CPTRA_AXI_DMA_ID_WIDTH), + .UW(CPTRA_AXI_DMA_USER_WIDTH) + ) axi_sram_if (.clk(core_clk), .rst_n(cptra_rst_b)); // QSPI Interface logic qspi_clk; @@ -152,7 +118,6 @@ module caliptra_top_tb ( logic ready_for_fuses; logic ready_for_fw_push; logic mailbox_data_avail; - logic status_set; logic mbox_sram_cs; logic mbox_sram_we; logic [14:0] mbox_sram_addr; @@ -181,20 +146,11 @@ module caliptra_top_tb ( logic rv_dma_resp_error; - logic mbox_apb_dataout_read_ooo; - logic mbox_ooo_read_done; - logic mbox_apb_dataout_read_no_lock; - logic mbox_no_lock_read_done; - -// logic [`CALIPTRA_APB_DATA_WIDTH-1:0] soc_ifc_hw_error_wdata; + logic [`CALIPTRA_AXI_DATA_WIDTH-1:0] soc_ifc_hw_error_wdata; //Interrupt flags - //logic nmi_int; - //logic soft_int; - //logic timer_int; logic int_flag; logic cycleCnt_smpl_en; - int cycleCnt_ff; process boot_and_cmd_flow; //Reset flags @@ -210,7 +166,7 @@ module caliptra_top_tb ( el2_mem_if el2_mem_export (); - logic [FW_NUM_DWORDS-1:0][31:0] fw_blob; + logic [31:0] fw_blob []; `ifndef VERILATOR always @@ -219,97 +175,6 @@ module caliptra_top_tb ( end // clk_gen `endif - always@(negedge core_clk) begin - if(!cptra_rst_b) cycleCnt_ff <= 'h0; - else if(cycleCnt_smpl_en) cycleCnt_ff <= cycleCnt; - end - -// always@(negedge core_clk) begin -// if((cycleCnt == cycleCnt_ff + 2000) && int_flag) begin -// force caliptra_top_dut.soft_int = 'b1; -// end -// -// else if((cycleCnt == cycleCnt_ff + 7000) && int_flag) begin -// force caliptra_top_dut.timer_int = 'b1; -// end -// -// else if((c_state_apb == S_APB_WR_EXEC) && apb_xfer_end && int_flag) begin -// //Wait for APB flow to be done before toggling generic_input_wires -// generic_input_wires <= {$urandom, $urandom}; //Toggle wires -// end -// -// else if((cycleCnt == cycleCnt_ff + 15000) && int_flag) begin -// force caliptra_top_dut.soft_int = 'b1; -// end -// -// else if (!ras_test_ctrl.error_injection_seen) begin -// release caliptra_top_dut.soft_int; -// release caliptra_top_dut.timer_int; -// generic_input_wires <= 'h0; -// end -// -// else if (ras_test_ctrl.reset_generic_input_wires) begin -// `ifdef VERILATOR -// generic_input_wires <= {32'h72746C76, ERROR_NONE_SET}; /* 32'h72746c76 is the big-endian ASCII representation of 'vltr' (r t l v) */ -// `else -// generic_input_wires <= {32'h0, ERROR_NONE_SET}; -// `endif -// end -// -// else if (c_state_apb == S_APB_WAIT_ERROR_AXS && rv_dma_resp_error) begin -// generic_input_wires <= {32'h0, DMA_ERROR_OBSERVED}; -// end -// -// else if (c_state_apb == S_APB_RD_HW_ERROR_FATAL && apb_xfer_end) begin -// if (PRDATA[`SOC_IFC_REG_CPTRA_HW_ERROR_FATAL_ICCM_ECC_UNC_LOW]) begin -// generic_input_wires <= {32'h0, ICCM_FATAL_OBSERVED}; -// end -// else if (PRDATA[`SOC_IFC_REG_CPTRA_HW_ERROR_FATAL_DCCM_ECC_UNC_LOW]) begin -// generic_input_wires <= {32'h0, DCCM_FATAL_OBSERVED}; -// end -// else if (PRDATA[`SOC_IFC_REG_CPTRA_HW_ERROR_FATAL_NMI_PIN_LOW]) begin -// generic_input_wires <= {32'h0, NMI_FATAL_OBSERVED}; -// end -// else if (PRDATA[`SOC_IFC_REG_CPTRA_HW_ERROR_FATAL_CRYPTO_ERR_LOW]) begin -// generic_input_wires <= {32'h0, CRYPTO_ERROR_OBSERVED}; -// end -// else begin -// generic_input_wires <= {32'h0, ERROR_NONE_SET}; -// end -// end -// -// else if (c_state_apb == S_APB_RD_HW_ERROR_NON_FATAL && apb_xfer_end) begin -// if (PRDATA[`SOC_IFC_REG_CPTRA_HW_ERROR_NON_FATAL_MBOX_PROT_NO_LOCK_LOW]) begin -// generic_input_wires <= {32'h0, PROT_NO_LOCK_NON_FATAL_OBSERVED}; -// end -// else if (PRDATA[`SOC_IFC_REG_CPTRA_HW_ERROR_NON_FATAL_MBOX_PROT_OOO_LOW]) begin -// generic_input_wires <= {32'h0, PROT_OOO_NON_FATAL_OBSERVED}; -// end -// else if (PRDATA[`SOC_IFC_REG_CPTRA_HW_ERROR_NON_FATAL_MBOX_ECC_UNC_LOW]) begin -// generic_input_wires <= {32'h0, MBOX_NON_FATAL_OBSERVED}; -// end -// else begin -// generic_input_wires <= {32'h0, ERROR_NONE_SET}; -// end -// end -// -// end - -// always@(negedge core_clk or negedge cptra_pwrgood) begin -// // This persists across soft reset -// if (!cptra_pwrgood) begin -// soc_ifc_hw_error_wdata <= '0; -// end -// else if (c_state_apb inside {S_APB_RD_HW_ERROR_FATAL, S_APB_RD_HW_ERROR_NON_FATAL} && apb_xfer_end) begin -// // HW ERROR registers are W1C, capture the set bits -// soc_ifc_hw_error_wdata <= PRDATA; -// end -// else if (c_state_apb inside {S_APB_WR_HW_ERROR_FATAL, S_APB_WR_HW_ERROR_NON_FATAL} && apb_xfer_end) begin -// // Clear after completing the write -// soc_ifc_hw_error_wdata <= 0; -// end -// end - always@(negedge core_clk or negedge cptra_rst_b) begin if (!cptra_rst_b) begin cptra_error_fatal_counter <= 16'h0; @@ -324,7 +189,6 @@ module caliptra_top_tb ( always_comb cptra_error_fatal_dly_p = cptra_error_fatal_counter == 16'h0040; always_comb cptra_error_non_fatal_dly_p = cptra_error_non_fatal_counter == 16'h0040; -// always_comb assert_rst_flag_from_fatal = c_state_apb == S_APB_ERROR; always@(negedge core_clk) begin if (!cptra_pwrgood) begin count_deassert_rst_flag_from_fatal <= 0; @@ -341,78 +205,6 @@ module caliptra_top_tb ( // Leave reset asserted for 32 clock cycles always_comb deassert_rst_flag_from_fatal = count_deassert_rst_flag_from_fatal == 31; -// assert property (@(posedge core_clk) c_state_apb == S_APB_WR_FUSE_DONE |-> !cptra_error_non_fatal) else begin -// $error("cptra_error_non_fatal observed during boot up"); -// $finish; -// end -// assert property (@(posedge core_clk) c_state_apb == S_APB_WR_FUSE_DONE |-> !cptra_error_fatal) else begin -// $error("cptra_error_fatal observed during boot up"); -// $finish; -// end - -// // ==================================================== FIXME ===================================================== // -// always@(negedge core_clk or negedge cptra_rst_b) begin // -// if(!cptra_rst_b) begin // -// mbox_apb_dataout_read_ooo <= 1'b0; // -// end // -// else if(ras_test_ctrl.do_ooo_access) begin // -// mbox_apb_dataout_read_ooo <= 1'b1; // -// end // -// else if (mbox_apb_dataout_read_ooo && (c_state_apb == S_APB_RD_DATAOUT) && (apb_rd_count == dlen)) begin // -// mbox_apb_dataout_read_ooo <= 1'b0; // -// end // -// end // -// // -// always@(negedge core_clk or negedge cptra_rst_b) begin // -// if(!cptra_rst_b) begin // -// mbox_apb_dataout_read_no_lock <= 1'b0; // -// end // -// else if(ras_test_ctrl.do_no_lock_access) begin // -// mbox_apb_dataout_read_no_lock <= 1'b1; // -// end // -// else if (mbox_apb_dataout_read_no_lock && (c_state_apb == S_APB_RD_DATAOUT) && (apb_rd_count == dlen)) begin // -// mbox_apb_dataout_read_no_lock <= 1'b0; // -// end // -// end // -// // -// always@(negedge core_clk or negedge cptra_rst_b) begin // -// if (!cptra_rst_b) begin // -// mbox_ooo_read_done <= 1'b0; // -// end // -// else if (mbox_apb_dataout_read_ooo && (c_state_apb == S_APB_RD_DATAOUT) && (apb_rd_count == dlen)) begin // -// mbox_ooo_read_done <= 1'b1; // -// end // -// else if (c_state_apb == S_APB_WR_HW_ERROR_NON_FATAL) // -// mbox_ooo_read_done <= 1'b0; // -// else if (ras_test_ctrl.reset_ooo_done_flag) // -// mbox_ooo_read_done <= 1'b0; // -// end // -// // -// always@(negedge core_clk or negedge cptra_rst_b) begin // -// if (!cptra_rst_b) begin // -// mbox_no_lock_read_done <= 1'b0; // -// end // -// else if (mbox_apb_dataout_read_no_lock && (c_state_apb == S_APB_RD_DATAOUT) && (apb_rd_count == dlen)) begin // -// mbox_no_lock_read_done <= 1'b1; // -// end // -// else if (c_state_apb == S_APB_WR_HW_ERROR_NON_FATAL) // -// mbox_no_lock_read_done <= 1'b0; // -// else if (ras_test_ctrl.reset_no_lock_done_flag) // -// mbox_no_lock_read_done <= 1'b0; // -// end // -// // -// always@(negedge core_clk or negedge cptra_rst_b) begin // -// if (!cptra_rst_b) begin // -// execute_mbox_rx_protocol <= 'b0; // -// end // -// else if (c_state_apb == S_APB_WR_EXEC) begin // -// execute_mbox_rx_protocol <= 'b1; // -// end // -// else if (execute_mbox_rx_protocol && ((c_state_apb == S_APB_RST_EXEC) && apb_xfer_end)) begin // -// execute_mbox_rx_protocol <= 'b0; // -// end // -// end // -// // ================================================================================================================ // initial begin cptra_pwrgood = 1'b0; BootFSM_BrkPoint = 1'b1; //Set to 1 even before anything starts @@ -455,7 +247,8 @@ module caliptra_top_tb ( // Run the test stimulus - generic_input_wires = 'h0; // FIXME + soc_ifc_hw_error_wdata = 'h0; + generic_input_wires = 'h0; $display ("\n\n\n\n\n\n"); repeat(15) @(posedge core_clk); $display("CLP: Waiting for cptra_rst_b deassertion\n"); @@ -464,12 +257,12 @@ module caliptra_top_tb ( fork begin: BOOT_AND_CMD_FLOW boot_and_cmd_flow = process::self(); + // Repeat this flow after every warm reset @(posedge cptra_rst_b) $display("CLP: Observed cptra_rst_b deassertion\n"); - @(posedge caliptra_top_dut.cptra_noncore_rst_b) - $display("CLP: Observed cptra_noncore_rst_b deassertion\n"); + // Fuse download sequence wait(ready_for_fuses == 1); $display ("CLP: Ready for fuse download\n"); @@ -477,27 +270,19 @@ module caliptra_top_tb ( $display ("SoC: Writing obfuscated UDS to fuse bank\n"); for (int dw=0; dw < `CLP_OBF_UDS_DWORDS; dw++) begin - wdata = new[1]('{cptra_uds_tb[dw]}); - wstrb = new[1]('{{`CALIPTRA_AXI_DATA_WIDTH{1'b1}}}); - s_axi_if.axi_write(.addr(`CLP_SOC_IFC_REG_FUSE_UDS_SEED_0 + 4 * dw), .data(wdata), .strb(wstrb), .resp(wresp)); + s_axi_if.axi_write_single(.addr(`CLP_SOC_IFC_REG_FUSE_UDS_SEED_0 + 4 * dw), .data(cptra_uds_tb[dw]), .resp(wresp)); end $display ("SoC: Writing obfuscated Field Entropy to fuse bank\n"); for (int dw=0; dw < `CLP_OBF_FE_DWORDS; dw++) begin - wdata = new[1]('{cptra_fe_tb[dw]}); - wstrb = new[1]('{{`CALIPTRA_AXI_DATA_WIDTH{1'b1}}}); - s_axi_if.axi_write(.addr(`CLP_SOC_IFC_REG_FUSE_FIELD_ENTROPY_0 + 4 * dw), .data(wdata), .strb(wstrb), .resp(wresp)); + s_axi_if.axi_write_single(.addr(`CLP_SOC_IFC_REG_FUSE_FIELD_ENTROPY_0 + 4 * dw), .data(cptra_fe_tb[dw]), .resp(wresp)); end $display ("SoC: Writing SOC Stepping ID to fuse bank\n"); - wdata = new[1]('{$urandom()}); - wstrb = new[1]('{{`CALIPTRA_AXI_DATA_WIDTH{1'b1}}}); - s_axi_if.axi_write(.addr(`CLP_SOC_IFC_REG_FUSE_SOC_STEPPING_ID), .data(wdata), .strb(wstrb), .resp(wresp)); + s_axi_if.axi_write_single(.addr(`CLP_SOC_IFC_REG_FUSE_SOC_STEPPING_ID), .data($urandom()), .resp(wresp)); $display ("SoC: Writing fuse done register\n"); - wdata = new[1]('{32'h00000001}); - wstrb = new[1]('{{`CALIPTRA_AXI_DATA_WIDTH{1'b1}}}); - s_axi_if.axi_write(.addr(`CLP_SOC_IFC_REG_CPTRA_FUSE_WR_DONE), .data(wdata), .strb(wstrb), .resp(wresp)); + s_axi_if.axi_write_single(.addr(`CLP_SOC_IFC_REG_CPTRA_FUSE_WR_DONE), .data(32'h00000001), .resp(wresp)); assert (!cptra_error_non_fatal) else begin $error("cptra_error_non_fatal observed during boot up"); @@ -509,65 +294,252 @@ module caliptra_top_tb ( end if (BootFSM_BrkPoint) begin - $display ("SoC: Polling Flow Status\n"); - rdata = new[1]('{default:0}); - rresp = new[1]; + $write ("SoC: Polling Flow Status..."); + poll_count = 0; do begin - s_axi_if.axi_read(.addr(`CLP_SOC_IFC_REG_CPTRA_FLOW_STATUS), .data(rdata), .resp(rresp)); - end while(rdata[0][`SOC_IFC_REG_CPTRA_FLOW_STATUS_READY_FOR_FUSES_LOW] == 1); + s_axi_if.axi_read_single(.addr(`CLP_SOC_IFC_REG_CPTRA_FLOW_STATUS), .data(rdata), .resp(rresp)); + poll_count++; + end while(rdata[`SOC_IFC_REG_CPTRA_FLOW_STATUS_READY_FOR_FUSES_LOW] == 1); + $display("\n >>> SoC: Ready for Fuses deasserted after polling %d times\n", poll_count); $display ("SoC: Writing BootGo register\n"); - wdata = new[1]('{32'h00000001}); - wstrb = new[1]('{{`CALIPTRA_AXI_DATA_WIDTH{1'b1}}}); - s_axi_if.axi_write(.addr(`CLP_SOC_IFC_REG_CPTRA_BOOTFSM_GO), .data(wdata), .strb(wstrb), .resp(wresp)); + s_axi_if.axi_write_single(.addr(`CLP_SOC_IFC_REG_CPTRA_BOOTFSM_GO), .data(32'h00000001), .resp(wresp)); + end + + // Test sequence (Mailbox or error handling) + wait(ready_for_fw_push || ras_test_ctrl.error_injection_seen); + + // Mailbox flow + if (ready_for_fw_push) begin + $display ("CLP: ROM Flow in progress...\n"); + repeat(5) @(posedge core_clk); + + $display ("CLP: Ready for firmware push\n"); + $write ("SoC: Requesting mailbox lock..."); + poll_count = 0; + do begin + s_axi_if.axi_read_single(.addr(`CLP_MBOX_CSR_MBOX_LOCK), .id(32'hFFFF_FFFF), .data(rdata), .resp(rresp)); + poll_count++; + end while (rdata[`MBOX_CSR_MBOX_LOCK_LOCK_LOW] == 1); + $display ("\n >>> SoC: Lock granted after polling %d times\n", poll_count); + + $display ("SoC: Writing the Command Register\n"); + s_axi_if.axi_write_single(.addr(`CLP_MBOX_CSR_MBOX_CMD), .id(32'hFFFF_FFFF), .data(32'hBA5EBA11), .resp(wresp)); + + $display ("SoC: Writing the Data Length Register\n"); + s_axi_if.axi_write_single(.addr(`CLP_MBOX_CSR_MBOX_DLEN), .id(32'hFFFF_FFFF), .data(FW_NUM_DWORDS*4), .resp(wresp)); + + $display ("SoC: Writing the Firmware into Data-in Register\n"); + fw_blob = new[FW_NUM_DWORDS]; + wstrb_array = new[FW_NUM_DWORDS]('{default: {`CALIPTRA_AXI_DATA_WIDTH/8{1'b1}}}); + for (int dw=0; dw < FW_NUM_DWORDS; dw++) + fw_blob[dw] = $urandom(); + s_axi_if.axi_write(.addr(`CLP_MBOX_CSR_MBOX_DATAIN), + .burst(AXI_BURST_FIXED), + .len (FW_NUM_DWORDS-1), + .id (32'hFFFF_FFFF), + .data (fw_blob), + .strb (wstrb_array), + .resp (wresp)); + + $display ("SoC: Setting the Execute Register\n"); + s_axi_if.axi_write_single(.addr(`CLP_MBOX_CSR_MBOX_EXECUTE), .id(32'hFFFF_FFFF), .data(32'h00000001), .resp(wresp)); + + $display("SoC: Waiting for Response Data availability\n"); + wait(mailbox_data_avail); + + $display("SoC: Reading the Status Register...\n"); + s_axi_if.axi_read_single(.addr(`CLP_MBOX_CSR_MBOX_STATUS), .id(32'hFFFF_FFFF), .data(rdata), .resp(rresp)); + + if (((rdata & `MBOX_CSR_MBOX_STATUS_STATUS_MASK) >> `MBOX_CSR_MBOX_STATUS_STATUS_LOW) == DATA_READY) begin: READ_RESP_DATA + $display("SoC: Reading the Data Length Register...\n"); + s_axi_if.axi_read_single(.addr(`CLP_MBOX_CSR_MBOX_DLEN), .id(32'hFFFF_FFFF), .data(rdata), .resp(rresp)); + + $display("SoC: Reading the Data Out Register\n"); + for (int xfer4k = 0; xfer4k < rdata; xfer4k += 4096) begin + byte_count = (rdata - xfer4k) > 4096 ? 4096 : (rdata - xfer4k); + dw_count = byte_count/(`CALIPTRA_AXI_DATA_WIDTH/8) + |byte_count[$clog2(`CALIPTRA_AXI_DATA_WIDTH/8)-1:0]; + rdata_array = new[dw_count]; + rresp_array = new[dw_count]; + s_axi_if.axi_read(.addr(`CLP_MBOX_CSR_MBOX_DATAOUT), + .burst(AXI_BURST_FIXED), + .len(dw_count-1), + .id (32'hFFFF_FFFF), + .data(rdata_array), + .resp(rresp_array)); + end + end: READ_RESP_DATA + + $display("SoC: Resetting the Execute Register\n"); + s_axi_if.axi_write_single(.addr(`CLP_MBOX_CSR_MBOX_EXECUTE), .id(32'hFFFF_FFFF), .data(32'h0), .resp(wresp)); + + //Wait for Mailbox flow to be done before toggling generic_input_wires + @(negedge core_clk); + generic_input_wires = {$urandom, $urandom}; //Toggle wires end - @(posedge caliptra_top_dut.cptra_uc_rst_b) - $display("CLP: Observed cptra_uc_rst_b deassertion\n"); - - $display ("CLP: ROM Flow in progress...\n"); -// //stuff -// if (fixme_demo) begin -// $display ("CLP: Ready for firmware push\n"); -// $display ("SoC: Requesting mailbox lock\n"); -// //stuff -// $display ("SoC: Lock granted\n"); -// //stuff -// $display ("SoC: Writing the Command Register\n"); -// //stuff -// $display ("SoC: Writing the Data Length Register\n"); -// //stuff -// $display ("SoC: Writing the Firmware into Data-in Register\n"); -// //stuff -// $display ("SoC: Setting the Execute Register\n"); -// //stuff -// // TODO wait for mailbox_data_avail -// $display("SoC: Reading the Data Length Register\n"); -// //stuff -// $display("SoC: Reading the Data Out Register\n"); -// //stuff -// $display("SoC: Resetting the Execute Register\n"); -// //stuff -// end -// forever begin -// if (mailbox_data_avail) begin -// $display ("SoC: Writing the Mbox Status Register\n"); -// //stuff -// end -// if (fixme_ras) begin -// $display("SoC: Waiting to see cptra_error_fatal/non_fatal\n"); -// //stuff -// $display("SoC: Observed cptra_error_fatal; reading Caliptra register\n"); -// assert_rst_flag_from_fatal = 1; -// //stuff -// $display("SoC: Observed cptra_error_fatal; writing to clear Caliptra register\n"); -// //stuff -// $display("SoC: Observed cptra_error_non_fatal; reading Caliptra register\n"); -// //stuff -// $display("SoC: Observed cptra_error_non_fatal; writing to clear Caliptra register\n"); -// //stuff -// end - forever @(posedge core_clk); + if (ras_test_ctrl.error_injection_seen) begin + $display("SoC: Waiting to see cptra_error_fatal/non_fatal\n"); + rv_dma_resp_error = 1'b0; + end + + // Mailbox response flow and RAS functionality + forever begin + if (cptra_error_fatal_dly_p) begin + $display("SoC: Observed cptra_error_fatal; reading Caliptra register\n"); + s_axi_if.axi_read_single(.addr(`CLP_SOC_IFC_REG_CPTRA_HW_ERROR_FATAL), .id(32'hFFFF_FFFF), .data(rdata), .resp(rresp)); + if (rdata[`SOC_IFC_REG_CPTRA_HW_ERROR_FATAL_ICCM_ECC_UNC_LOW]) begin + generic_input_wires = {32'h0, ICCM_FATAL_OBSERVED}; + end + else if (rdata[`SOC_IFC_REG_CPTRA_HW_ERROR_FATAL_DCCM_ECC_UNC_LOW]) begin + generic_input_wires = {32'h0, DCCM_FATAL_OBSERVED}; + end + else if (rdata[`SOC_IFC_REG_CPTRA_HW_ERROR_FATAL_NMI_PIN_LOW]) begin + generic_input_wires = {32'h0, NMI_FATAL_OBSERVED}; + end + else if (rdata[`SOC_IFC_REG_CPTRA_HW_ERROR_FATAL_CRYPTO_ERR_LOW]) begin + generic_input_wires = {32'h0, CRYPTO_ERROR_OBSERVED}; + end + else begin + generic_input_wires = {32'h0, ERROR_NONE_SET}; + end + // HW ERROR registers are W1C, capture the set bits + soc_ifc_hw_error_wdata = rdata; + //wait for reset stuff + assert_rst_flag_from_fatal = 1; + wait(cptra_rst_b == 0); + end + else if (cptra_error_non_fatal_dly_p) begin + $display("SoC: Observed cptra_error_non_fatal; reading Caliptra register\n"); + s_axi_if.axi_read_single(.addr(`CLP_SOC_IFC_REG_CPTRA_HW_ERROR_NON_FATAL), .id(32'hFFFF_FFFF), .data(rdata), .resp(rresp)); + if (rdata[`SOC_IFC_REG_CPTRA_HW_ERROR_NON_FATAL_MBOX_PROT_NO_LOCK_LOW]) begin + generic_input_wires = {32'h0, PROT_NO_LOCK_NON_FATAL_OBSERVED}; + end + else if (rdata[`SOC_IFC_REG_CPTRA_HW_ERROR_NON_FATAL_MBOX_PROT_OOO_LOW]) begin + generic_input_wires = {32'h0, PROT_OOO_NON_FATAL_OBSERVED}; + end + else if (rdata[`SOC_IFC_REG_CPTRA_HW_ERROR_NON_FATAL_MBOX_ECC_UNC_LOW]) begin + generic_input_wires = {32'h0, MBOX_NON_FATAL_OBSERVED}; + end + else begin + generic_input_wires = {32'h0, ERROR_NONE_SET}; + end + $display("SoC: Observed cptra_error_non_fatal; writing to clear Caliptra register\n"); + s_axi_if.axi_write_single(.addr(`CLP_SOC_IFC_REG_CPTRA_HW_ERROR_NON_FATAL), .id(32'hFFFF_FFFF), .data(rdata), .resp(wresp)); + end + else if (soc_ifc_hw_error_wdata) begin + $display("SoC: Observed cptra_error_fatal; writing to clear Caliptra register\n"); + s_axi_if.axi_write_single(.addr(`CLP_SOC_IFC_REG_CPTRA_HW_ERROR_FATAL), .id(32'hFFFF_FFFF), .data(soc_ifc_hw_error_wdata), .resp(wresp)); + soc_ifc_hw_error_wdata = '0; + end + else if (ras_test_ctrl.do_no_lock_access) begin + fork + begin + $display("SoC: Reading the Data Out Register without lock\n"); + dw_count = 1; + rdata_array = new[dw_count]; + rresp_array = new[dw_count]; + s_axi_if.axi_read(.addr(`CLP_MBOX_CSR_MBOX_DATAOUT), + .burst(AXI_BURST_FIXED), + .len(dw_count-1), + .id (32'hFFFF_FFFF), + .data(rdata_array), + .resp(rresp_array)); + end + join + end + else if (ras_test_ctrl.do_ooo_access) begin + fork + begin + $write ("SoC: Requesting mailbox lock..."); + poll_count = 0; + do begin + s_axi_if.axi_read_single(.addr(`CLP_MBOX_CSR_MBOX_LOCK), .id(32'hFFFF_FFFF), .data(rdata), .resp(rresp)); + poll_count++; + end while (rdata[`MBOX_CSR_MBOX_LOCK_LOCK_LOW] == 1); + $display ("\n >>> SoC: Lock granted after polling %d times\n", poll_count); + + $display("SoC: Reading the Data Length Register...\n"); + s_axi_if.axi_read_single(.addr(`CLP_MBOX_CSR_MBOX_DLEN), .id(32'hFFFF_FFFF), .data(rdata), .resp(rresp)); + + $display("SoC: Reading the Data Out Register\n"); + dw_count = 1; + rdata_array = new[dw_count]; + rresp_array = new[dw_count]; + s_axi_if.axi_read(.addr(`CLP_MBOX_CSR_MBOX_DATAOUT), + .burst(AXI_BURST_FIXED), + .len(dw_count-1), + .id (32'hFFFF_FFFF), + .data(rdata_array), + .resp(rresp_array)); + end + join + end + else if (ras_test_ctrl.reset_generic_input_wires) begin + `ifdef VERILATOR + generic_input_wires = {32'h72746C76, ERROR_NONE_SET}; /* 32'h72746c76 is the big-endian ASCII representation of 'vltr' (r t l v) */ + `else + generic_input_wires = {32'h0, ERROR_NONE_SET}; + `endif + end + else if (rv_dma_resp_error) begin + generic_input_wires = {32'h0, DMA_ERROR_OBSERVED}; + rv_dma_resp_error = 1'b0; + end + else if (mailbox_data_avail) begin + $display("SoC: Reading the Data Length Register\n"); + s_axi_if.axi_read_single(.addr(`CLP_MBOX_CSR_MBOX_DLEN), .id(32'hFFFF_FFFF), .data(rdata), .resp(rresp)); + + $display("SoC: Reading the Data Out Register\n"); + for (int xfer4k = 0; xfer4k < rdata; xfer4k += 4096) begin + byte_count = (rdata - xfer4k) > 4096 ? 4096 : (rdata - xfer4k); + dw_count = byte_count/(`CALIPTRA_AXI_DATA_WIDTH/8) + |byte_count[$clog2(`CALIPTRA_AXI_DATA_WIDTH/8)-1:0]; + rdata_array = new[dw_count]; + rresp_array = new[dw_count]; + s_axi_if.axi_read(.addr(`CLP_MBOX_CSR_MBOX_DATAOUT), + .burst(AXI_BURST_FIXED), + .len(dw_count-1), + .id (32'hFFFF_FFFF), + .data(rdata_array), + .resp(rresp_array)); + end + + $display ("SoC: Writing the Mbox Status Register\n"); + s_axi_if.axi_write_single(.addr(`CLP_MBOX_CSR_MBOX_STATUS), .id(32'hFFFF_FFFF), .data(32'h1), .resp(wresp)); + end + @(posedge core_clk); + end end: BOOT_AND_CMD_FLOW + begin: CLK_GATE_FLOW + wait(cycleCnt_smpl_en); + repeat(2000) @(negedge core_clk); + + if (int_flag) + $display("SoC (clk_gate_flow): Forcing soft_int = 1. cycleCnt [%d]\n", cycleCnt); + force caliptra_top_dut.soft_int = 1'b1; + repeat(2) @(negedge core_clk); + $display("SoC (clk_gate_flow): Releasing soft_int = 1. cycleCnt [%d]\n", cycleCnt); + release caliptra_top_dut.soft_int; + + repeat(5000) @(negedge core_clk); + + if (int_flag) + $display("SoC (clk_gate_flow): Forcing timer_int = 1. cycleCnt [%d]\n", cycleCnt); + force caliptra_top_dut.timer_int = 1'b1; + repeat(2) @(negedge core_clk); + $display("SoC (clk_gate_flow): Releasing timer_int = 1. cycleCnt [%d]\n", cycleCnt); + release caliptra_top_dut.timer_int; + + repeat(8000) @(negedge core_clk); + + if (int_flag) + $display("SoC (clk_gate_flow): Forcing soft_int = 1. cycleCnt [%d]\n", cycleCnt); + force caliptra_top_dut.soft_int = 1'b1; + repeat(2) @(negedge core_clk); + $display("SoC (clk_gate_flow): Releasing soft_int = 1. cycleCnt [%d]\n", cycleCnt); + release caliptra_top_dut.soft_int; + + wait(cptra_rst_b == 0); + end: CLK_GATE_FLOW begin: RESET_FLOW @(negedge cptra_rst_b); $display("CLP: Observed cptra_rst_b assertion\n"); @@ -603,583 +575,7 @@ module caliptra_top_tb ( end end -// always@(negedge core_clk or negedge cptra_rst_b) begin -// if (!cptra_rst_b) begin -// dlen <= '0; -// end -// else if ((c_state_apb == S_APB_RD_DLEN) && apb_xfer_end) begin -// dlen <= PRDATA; -// end -// end - -// always@(posedge core_clk or negedge cptra_rst_b) begin -// if (!cptra_rst_b) begin -// c_state_apb <= S_APB_IDLE; -// apb_wr_count <= '0; -// apb_rd_count <= '0; -// apb_enable_ph <= 0; -// end -// else begin -// c_state_apb <= n_state_apb; -// apb_wr_count <= apb_wr_count_nxt; -// apb_rd_count <= apb_rd_count_nxt; -// //next phase is an access phase if this is setup phase OR it's access and responder isn't ready -// apb_enable_ph <= (PSEL & ~PENABLE) | (PSEL & PENABLE & ~PREADY); -// end -// if (c_state_apb != n_state_apb) begin -// case (n_state_apb) -// S_APB_WR_UDS: begin -//// $display ("CLP: Ready for fuse download\n"); -//// $display ("SoC: Writing obfuscated UDS to fuse bank\n"); -// end -// S_APB_WR_FE: begin -//// $display ("SoC: Writing obfuscated Field Entropy to fuse bank\n"); -// end -// S_APB_WR_SOC_STEPPING_ID: begin -//// $display ("SoC: Writing SOC Stepping ID to fuse bank\n"); -// end -// S_APB_WR_FUSE_DONE: begin -//// $display ("SoC: Writing fuse done register\n"); -// end -// S_APB_POLL_FLOW_ST: begin -//// $display ("SoC: Polling Flow Status\n"); -// end -// S_APB_WR_BOOT_GO: begin -//// $display ("SoC: Writing BootGo register\n"); -// end -// S_APB_WAIT_FW_TEST: begin -//// $display ("CLP: ROM Flow in progress...\n"); -// end -// S_APB_POLL_LOCK: begin -//// $display ("CLP: Ready for firmware push\n"); -//// $display ("SoC: Requesting mailbox lock\n"); -// end -// S_APB_PRE_WR_CMD: begin -//// $display ("SoC: Lock granted\n"); -// end -// S_APB_WR_CMD: begin -//// $display ("SoC: Writing the Command Register\n"); -// end -// S_APB_WR_DLEN: begin -//// $display ("SoC: Writing the Data Length Register\n"); -// end -// S_APB_WR_DATAIN: begin -//// $display ("SoC: Writing the Firmware into Data-in Register\n"); -// end -// S_APB_WR_EXEC: begin -//// $display ("SoC: Setting the Execute Register\n"); -// end -// S_APB_WR_STATUS: begin -//// $display ("SoC: Writing the Mbox Status Register\n"); -// end -// S_APB_WAIT_ERROR_AXS: begin -//// $display("SoC: Waiting to see cptra_error_fatal/non_fatal\n"); -// end -// S_APB_RD_HW_ERROR_FATAL: begin -//// $display("SoC: Observed cptra_error_fatal; reading Caliptra register\n"); -// end -// S_APB_WR_HW_ERROR_FATAL: begin -//// $display("SoC: Observed cptra_error_fatal; writing to clear Caliptra register\n"); -// end -// S_APB_RD_HW_ERROR_NON_FATAL: begin -//// $display("SoC: Observed cptra_error_non_fatal; reading Caliptra register\n"); -// end -// S_APB_WR_HW_ERROR_NON_FATAL: begin -//// $display("SoC: Observed cptra_error_non_fatal; writing to clear Caliptra register\n"); -// end -// S_APB_DONE: begin -// end -// S_APB_RD_DLEN: begin -//// $display("SoC: Reading the Data Length Register\n"); -// end -// S_APB_RD_DATAOUT: begin -//// $display("SoC: Reading the Data Out Register\n"); -// end -// S_APB_RST_EXEC: begin -//// $display("SoC: Resetting the Execute Register\n"); -// end -// default: begin -// $display("Entering unexpected APB state: %p", n_state_apb); -// end -// endcase -// end -// end - -// always_comb begin -// apb_wr_count_nxt = 0; -// apb_rd_count_nxt = 0; -// case (c_state_apb) inside -// S_APB_IDLE: begin -// if (start_apb_fuse_sequence) -// n_state_apb = S_APB_WR_UDS; -// else -// n_state_apb = S_APB_IDLE; -// end -// //load fuses -// S_APB_WR_UDS: begin -// if (apb_xfer_end && apb_wr_count == (`CLP_OBF_UDS_DWORDS-1)) begin -// n_state_apb = S_APB_WR_FE; -// apb_wr_count_nxt = '0; -// end -// else if (apb_xfer_end) begin -// n_state_apb = S_APB_WR_UDS; -// apb_wr_count_nxt = apb_wr_count + 1; -// end -// else begin -// n_state_apb = S_APB_WR_UDS; -// apb_wr_count_nxt = apb_wr_count; -// end -// end -// S_APB_WR_FE: begin -// if (apb_xfer_end && apb_wr_count == (`CLP_OBF_FE_DWORDS-1)) begin -// n_state_apb = S_APB_WR_SOC_STEPPING_ID; -// apb_wr_count_nxt = '0; -// end -// else if (apb_xfer_end) begin -// n_state_apb = S_APB_WR_FE; -// apb_wr_count_nxt = apb_wr_count + 1; -// end -// else begin -// n_state_apb = S_APB_WR_FE; -// apb_wr_count_nxt = apb_wr_count; -// end -// end -// S_APB_WR_SOC_STEPPING_ID: begin -// if (apb_xfer_end) begin -// n_state_apb = S_APB_WR_FUSE_DONE; -// end -// else begin -// n_state_apb = S_APB_WR_SOC_STEPPING_ID; -// end -// end -// //set fuse done -// S_APB_WR_FUSE_DONE: begin -// if (apb_xfer_end) begin -// if(BootFSM_BrkPoint) begin -// n_state_apb = S_APB_POLL_FLOW_ST; -// end -// else begin -// n_state_apb = S_APB_WAIT_FW_TEST; -// end -// end -// else begin -// n_state_apb = S_APB_WR_FUSE_DONE; -// end -// end -// S_APB_POLL_FLOW_ST: begin -// if (apb_xfer_end && (PRDATA[`SOC_IFC_REG_CPTRA_FLOW_STATUS_READY_FOR_FUSES_LOW] == 0)) begin -// n_state_apb = S_APB_WR_BOOT_GO; -// end -// else begin -// n_state_apb = S_APB_POLL_FLOW_ST; -// end -// end -// //Write BootGo register -// S_APB_WR_BOOT_GO: begin -// if(apb_xfer_end) begin -// n_state_apb = S_APB_WAIT_FW_TEST; -// end -// else begin -// n_state_apb = S_APB_WR_BOOT_GO; -// end -// end -// -// //This is for Caliptra Demo, smoke tests will stop here since they don't set ready for fw -// //wait for fw req -// S_APB_WAIT_FW_TEST: begin -// if (ready_for_fw_push & (apb_wr_count == 5)) begin -// n_state_apb = S_APB_POLL_LOCK; -// apb_wr_count_nxt = 0; -// end -// else if (ready_for_fw_push) begin -// n_state_apb = S_APB_WAIT_FW_TEST; -// apb_wr_count_nxt = apb_wr_count + 1; -// end -// else if (ras_test_ctrl.error_injection_seen) begin -// n_state_apb = S_APB_WAIT_ERROR_AXS; -// end -// else begin -// n_state_apb = S_APB_WAIT_FW_TEST; -// apb_wr_count_nxt = 0; -// end -// end -// // poll for lock register -// S_APB_POLL_LOCK: begin -// if (apb_xfer_end && (PRDATA != 0)) begin -// n_state_apb = mbox_apb_dataout_read_ooo ? S_APB_RD_DLEN : S_APB_WR_CMD; -// end -// else begin -// n_state_apb = S_APB_POLL_LOCK; -// end -// end -// S_APB_PRE_WR_CMD: begin -// if (apb_wr_count == 5) begin -// n_state_apb = S_APB_WR_CMD; -// apb_wr_count_nxt = 0; -// end -// else begin -// n_state_apb = S_APB_PRE_WR_CMD; -// apb_wr_count_nxt = apb_wr_count + 1; -// end -// end -// //write to MBOX_ADDR_CMD -// S_APB_WR_CMD: begin -// if (apb_xfer_end) -// n_state_apb = S_APB_WR_DLEN; -// else -// n_state_apb = S_APB_WR_CMD; -// end -// // write to MBOX_ADDR_DLEN -// S_APB_WR_DLEN: begin -// if (apb_xfer_end) -// n_state_apb = S_APB_WR_DATAIN; -// else -// n_state_apb = S_APB_WR_DLEN; -// end -// // write a random block in -// S_APB_WR_DATAIN: begin -// if (apb_xfer_end && apb_wr_count == (FW_NUM_DWORDS-1)) begin -// n_state_apb = S_APB_WR_EXEC; -// apb_wr_count_nxt = '0; -// end -// else if (apb_xfer_end) begin -// n_state_apb = S_APB_WR_DATAIN; -// apb_wr_count_nxt = apb_wr_count + 1; -// end -// else begin -// n_state_apb = S_APB_WR_DATAIN; -// apb_wr_count_nxt = apb_wr_count; -// end -// end -// // execute -// S_APB_WR_EXEC: begin -// if (apb_xfer_end) -// n_state_apb = S_APB_DONE; -// else -// n_state_apb = S_APB_WR_EXEC; -// end -// // status -// S_APB_WR_STATUS: begin -// if (apb_xfer_end) -// n_state_apb = S_APB_DONE; -// else -// n_state_apb = S_APB_WR_STATUS; -// end -// S_APB_WAIT_ERROR_AXS: begin -// if (cptra_error_fatal_dly_p) begin -// n_state_apb = S_APB_RD_HW_ERROR_FATAL; -// end -// else if (cptra_error_non_fatal_dly_p) begin -// n_state_apb = S_APB_RD_HW_ERROR_NON_FATAL; -// end -// else if (soc_ifc_hw_error_wdata) begin -// n_state_apb = S_APB_WR_HW_ERROR_FATAL; -// end -// else if (ras_test_ctrl.do_no_lock_access) begin -// n_state_apb = S_APB_RD_DLEN; -// end -// else if (mbox_apb_dataout_read_ooo && !mbox_ooo_read_done) begin -// n_state_apb = S_APB_POLL_LOCK; -// end -// else begin -// n_state_apb = S_APB_WAIT_ERROR_AXS; -// end -// end -// S_APB_RD_HW_ERROR_FATAL: begin -// // Go to ERROR state to wait for cptra_rst_b to assert -// if (apb_xfer_end) begin -// n_state_apb = S_APB_ERROR; -// end -// else begin -// n_state_apb = S_APB_RD_HW_ERROR_FATAL; -// end -// end -// S_APB_WR_HW_ERROR_FATAL: begin -// if (apb_xfer_end) begin -// n_state_apb = S_APB_WAIT_ERROR_AXS; -// end -// else begin -// n_state_apb = S_APB_WR_HW_ERROR_FATAL; -// end -// end -// S_APB_RD_HW_ERROR_NON_FATAL: begin -// if (apb_xfer_end) begin -// n_state_apb = S_APB_WR_HW_ERROR_NON_FATAL; -// end -// else begin -// n_state_apb = S_APB_RD_HW_ERROR_NON_FATAL; -// end -// end -// S_APB_WR_HW_ERROR_NON_FATAL: begin -// if (apb_xfer_end) begin -// n_state_apb = S_APB_WAIT_ERROR_AXS; -// end -// else begin -// n_state_apb = S_APB_WR_HW_ERROR_NON_FATAL; -// end -// end -// S_APB_DONE: begin -// apb_wr_count_nxt = '0; -// apb_rd_count_nxt = '0; -// if (mailbox_data_avail && execute_mbox_rx_protocol) -// n_state_apb = S_APB_RD_DLEN; -// else if (mailbox_data_avail && ~status_set && ~execute_mbox_rx_protocol) -// n_state_apb = S_APB_WR_STATUS; -// else -// n_state_apb = S_APB_DONE; -// end -// S_APB_RD_DLEN: begin -// if (apb_xfer_end) -// n_state_apb = S_APB_RD_DATAOUT; -// else -// n_state_apb = S_APB_RD_DLEN; -// end -// S_APB_RD_DATAOUT: begin -// if (apb_xfer_end && (apb_rd_count == dlen)) begin -// n_state_apb = (mbox_no_lock_read_done || mbox_ooo_read_done) ? S_APB_WAIT_ERROR_AXS : S_APB_RST_EXEC; -// apb_rd_count_nxt = '0; -// end -// else if (apb_xfer_end) begin -// n_state_apb = S_APB_RD_DATAOUT; -// apb_rd_count_nxt = apb_rd_count + 1; -// end -// else begin -// n_state_apb = S_APB_RD_DATAOUT; -// apb_rd_count_nxt = apb_rd_count; -// end -// end -// S_APB_RST_EXEC: begin -// if (apb_xfer_end) -// n_state_apb = S_APB_DONE; -// else -// n_state_apb = S_APB_RST_EXEC; -// end -// default: begin -// apb_wr_count_nxt = apb_wr_count; -// apb_rd_count_nxt = apb_rd_count; -// n_state_apb = S_APB_ERROR; -// end -// endcase -// end -// always@(posedge core_clk or negedge cptra_rst_b) begin -// if (!cptra_rst_b) begin -// status_set <= '0; -// end else begin -// status_set <= ~mailbox_data_avail ? '0 : -// (c_state_apb == S_APB_WR_STATUS) ? '1 : status_set; -// end -// end - -//// assign apb_xfer_end = PSEL && PENABLE && PREADY; -// always@(posedge core_clk) begin -// if ((n_state_apb == S_APB_WR_DATAIN) && apb_xfer_end) -// fw_blob[apb_wr_count_nxt] <= $urandom; -// end -// always_comb begin -// case (c_state_apb) inside -// S_APB_WR_UDS: begin -// PADDR = `CLP_SOC_IFC_REG_FUSE_UDS_SEED_0 + 4 * apb_wr_count; -// PWDATA = cptra_uds_tb[apb_wr_count]; -// end -// S_APB_WR_FE: begin -// PADDR = `CLP_SOC_IFC_REG_FUSE_FIELD_ENTROPY_0 + 4 * apb_wr_count; -// PWDATA = cptra_fe_tb[apb_wr_count]; -// end -// S_APB_WR_SOC_STEPPING_ID: begin -// PADDR = `CLP_SOC_IFC_REG_FUSE_SOC_STEPPING_ID; -// PWDATA = $urandom(); -// end -// S_APB_WR_FUSE_DONE: begin -// PADDR = `CLP_SOC_IFC_REG_CPTRA_FUSE_WR_DONE; -// PWDATA = 32'h00000001; -// end -// S_APB_POLL_FLOW_ST: begin -// PADDR = `CLP_SOC_IFC_REG_CPTRA_FLOW_STATUS; -// PWDATA = '0; -// end -// S_APB_WR_BOOT_GO: begin -// PADDR = `CLP_SOC_IFC_REG_CPTRA_BOOTFSM_GO; -// PWDATA = 32'h00000001; -// end -// S_APB_POLL_LOCK: begin -// PADDR = `CLP_MBOX_CSR_MBOX_LOCK; -// PWDATA = '0; -// end -// S_APB_WR_CMD: begin -// PADDR = `CLP_MBOX_CSR_MBOX_CMD; -// PWDATA = 32'hBA5EBA11; -// end -// S_APB_WR_DLEN: begin -// PADDR = `CLP_MBOX_CSR_MBOX_DLEN; -// PWDATA = FW_NUM_DWORDS*4; -// end -// S_APB_WR_DATAIN: begin -// PADDR = `CLP_MBOX_CSR_MBOX_DATAIN; -// PWDATA = fw_blob[apb_wr_count]; -// end -// S_APB_WR_EXEC: begin -// PADDR = `CLP_MBOX_CSR_MBOX_EXECUTE; -// PWDATA = 32'h00000001; -// end -// S_APB_WR_STATUS: begin -// PADDR = `CLP_MBOX_CSR_MBOX_STATUS; -// PWDATA = 32'h00000001; -// end -// S_APB_RD_HW_ERROR_FATAL: begin -// PADDR = `CLP_SOC_IFC_REG_CPTRA_HW_ERROR_FATAL; -// PWDATA = soc_ifc_hw_error_wdata; -// end -// S_APB_WR_HW_ERROR_FATAL: begin -// PADDR = `CLP_SOC_IFC_REG_CPTRA_HW_ERROR_FATAL; -// PWDATA = soc_ifc_hw_error_wdata; -// end -// S_APB_RD_HW_ERROR_NON_FATAL: begin -// PADDR = `CLP_SOC_IFC_REG_CPTRA_HW_ERROR_NON_FATAL; -// PWDATA = soc_ifc_hw_error_wdata; -// end -// S_APB_WR_HW_ERROR_NON_FATAL: begin -// PADDR = `CLP_SOC_IFC_REG_CPTRA_HW_ERROR_NON_FATAL; -// PWDATA = soc_ifc_hw_error_wdata; -// end -// S_APB_DONE: begin -// PADDR = '0; -// PWDATA = '0; -// end -// S_APB_RD_DLEN: begin -// PADDR = `CLP_MBOX_CSR_MBOX_DLEN; -// PWDATA = dlen; -// end -// S_APB_RD_DATAOUT: begin -// PADDR = `CLP_MBOX_CSR_MBOX_DATAOUT; -// PWDATA = '0; -// end -// S_APB_RST_EXEC: begin -// PADDR = `CLP_MBOX_CSR_MBOX_EXECUTE; -// PWDATA = '0; -// end -// default: begin -// PADDR = '0; -// PWDATA = '0; -// end -// endcase -// end -// always_comb begin -// PENABLE = apb_enable_ph; -// case (c_state_apb) inside -// S_APB_IDLE: begin -// PSEL = 0; -// PWRITE = 0; -// PAUSER = 0; -// end -// S_APB_WR_UDS: begin -// PSEL = 1; -// PWRITE = 1; -// PAUSER = 0; -// end -// S_APB_WR_FE: begin -// PSEL = 1; -// PWRITE = 1; -// PAUSER = 0; -// end -// S_APB_WR_SOC_STEPPING_ID: begin -// PSEL = 1; -// PWRITE = 1; -// PAUSER = 0; -// end -// S_APB_WR_FUSE_DONE: begin -// PSEL = 1; -// PWRITE = 1; -// PAUSER = 0; -// end -// S_APB_POLL_FLOW_ST: begin -// PSEL = 1; -// PWRITE = 0; -// PAUSER = 0; -// end -// S_APB_WR_BOOT_GO: begin -// PSEL = 1; -// PWRITE = 1; -// PAUSER = 0; -// end -// S_APB_POLL_LOCK: begin -// PSEL = 1; -// PWRITE = 0; -// PAUSER = '1; -// end -// S_APB_WR_CMD: begin -// PSEL = 1; -// PWRITE = 1; -// PAUSER = '1; -// end -// S_APB_WR_DLEN: begin -// PSEL = 1; -// PWRITE = 1; -// PAUSER = '1; -// end -// S_APB_WR_DATAIN: begin -// PSEL = 1; -// PWRITE = 1; -// PAUSER = '1; -// end -// S_APB_WR_EXEC: begin -// PSEL = 1; -// PWRITE = 1; -// PAUSER = '1; -// end -// S_APB_WR_STATUS: begin -// PSEL = 1; -// PWRITE = 1; -// PAUSER = '1; -// end -// S_APB_RD_HW_ERROR_FATAL: begin -// PSEL = 1; -// PWRITE = 0; -// PAUSER = '1; -// end -// S_APB_WR_HW_ERROR_FATAL: begin -// PSEL = 1; -// PWRITE = 1; -// PAUSER = '1; -// end -// S_APB_RD_HW_ERROR_NON_FATAL: begin -// PSEL = 1; -// PWRITE = 0; -// PAUSER = '1; -// end -// S_APB_WR_HW_ERROR_NON_FATAL: begin -// PSEL = 1; -// PWRITE = 1; -// PAUSER = '1; -// end -// S_APB_DONE: begin -// PSEL = 0; -// PWRITE = 0; -// PAUSER = 0; -// end -// S_APB_RD_DLEN: begin -// PSEL = 1; -// PWRITE = 0; -// PAUSER = '1; //TODO - which value? -// end -// S_APB_RD_DATAOUT: begin -// PSEL = 1; -// PWRITE = 0; -// PAUSER = '1; -// end -// S_APB_RST_EXEC: begin -// PSEL = 1; -// PWRITE = 1; -// PAUSER = '1; -// end -// default: begin -// PSEL = 0; -// PWRITE = 0; -// PAUSER = 0; -// end -// endcase -// end - // JTAG DPI jtagdpi #( .Name ("jtag0"), @@ -1216,6 +612,10 @@ caliptra_top caliptra_top_dut ( .s_axi_w_if(s_axi_if.w_sub), .s_axi_r_if(s_axi_if.r_sub), + //AXI DMA Interface + .m_axi_w_if(m_axi_if.w_mgr), + .m_axi_r_if(m_axi_if.r_mgr), + .qspi_clk_o (qspi_clk), .qspi_cs_no (qspi_cs_n), .qspi_d_i (qspi_data_device_to_host), @@ -1247,6 +647,8 @@ caliptra_top caliptra_top_dut ( .mailbox_flow_done(), .BootFSM_BrkPoint(BootFSM_BrkPoint), + .recovery_data_avail(1'b1/*TODO*/), + //SoC Interrupts .cptra_error_fatal (cptra_error_fatal ), .cptra_error_non_fatal(cptra_error_non_fatal), @@ -1369,6 +771,67 @@ caliptra_top_tb_services #( ); +always_comb begin + // AXI AR + axi_sram_if.araddr = m_axi_if.araddr[AXI_SRAM_ADDR_WIDTH-1:0]; + axi_sram_if.arburst = m_axi_if.arburst; + axi_sram_if.arsize = m_axi_if.arsize ; + axi_sram_if.arlen = m_axi_if.arlen ; + axi_sram_if.aruser = m_axi_if.aruser ; + axi_sram_if.arid = m_axi_if.arid ; + axi_sram_if.arlock = m_axi_if.arlock ; + axi_sram_if.arvalid = m_axi_if.arvalid && m_axi_if.araddr[`CALIPTRA_AXI_DMA_ADDR_WIDTH-1:AXI_SRAM_ADDR_WIDTH] == AXI_SRAM_BASE_ADDR[`CALIPTRA_AXI_DMA_ADDR_WIDTH-1:AXI_SRAM_ADDR_WIDTH]; + m_axi_if.arready = axi_sram_if.arready; + + // AXI R + m_axi_if.rdata = axi_sram_if.rdata ; + m_axi_if.rresp = axi_sram_if.rresp ; + m_axi_if.rid = axi_sram_if.rid ; + m_axi_if.rlast = axi_sram_if.rlast ; + m_axi_if.rvalid = axi_sram_if.rvalid; + axi_sram_if.rready = m_axi_if.rready ; + + // AXI AW + axi_sram_if.awaddr = m_axi_if.awaddr[AXI_SRAM_ADDR_WIDTH-1:0]; + axi_sram_if.awburst = m_axi_if.awburst; + axi_sram_if.awsize = m_axi_if.awsize ; + axi_sram_if.awlen = m_axi_if.awlen ; + axi_sram_if.awuser = m_axi_if.awuser ; + axi_sram_if.awid = m_axi_if.awid ; + axi_sram_if.awlock = m_axi_if.awlock ; + axi_sram_if.awvalid = m_axi_if.awvalid && m_axi_if.awaddr[`CALIPTRA_AXI_DMA_ADDR_WIDTH-1:AXI_SRAM_ADDR_WIDTH] == AXI_SRAM_BASE_ADDR[`CALIPTRA_AXI_DMA_ADDR_WIDTH-1:AXI_SRAM_ADDR_WIDTH]; + m_axi_if.awready = axi_sram_if.awready; + + // AXI W + axi_sram_if.wdata = m_axi_if.wdata ; + axi_sram_if.wstrb = m_axi_if.wstrb ; + axi_sram_if.wvalid = m_axi_if.wvalid ; + axi_sram_if.wlast = m_axi_if.wlast ; + m_axi_if.wready = axi_sram_if.wready ; + + // AXI B + m_axi_if.bresp = axi_sram_if.bresp ; + m_axi_if.bid = axi_sram_if.bid ; + m_axi_if.bvalid = axi_sram_if.bvalid ; + axi_sram_if.bready = m_axi_if.bready ; +end + +caliptra_axi_sram #( + .AW(AXI_SRAM_ADDR_WIDTH), + .DW(CPTRA_AXI_DMA_DATA_WIDTH), + .UW(CPTRA_AXI_DMA_USER_WIDTH), + .IW(CPTRA_AXI_DMA_ID_WIDTH), + .EX_EN(0) +) i_axi_sram ( + .clk(core_clk), + .rst_n(cptra_rst_b), + + // AXI INF + .s_axi_w_if(axi_sram_if.w_sub), + .s_axi_r_if(axi_sram_if.r_sub) +); +initial i_axi_sram.i_sram.ram = '{default:'{default:8'h00}}; + `define RV_INST caliptra_top_dut.rvtop `define RV_IDMA_RESP_INST caliptra_top_dut.responder_inst[`CALIPTRA_SLAVE_SEL_IDMA] `define RV_DDMA_RESP_INST caliptra_top_dut.responder_inst[`CALIPTRA_SLAVE_SEL_DDMA] @@ -1418,18 +881,12 @@ task force_ahb_dma_loop_read(input logic [31:0] start_addr, input logic [19:0] c endtask initial begin - fork forever @(posedge core_clk) begin if (ras_test_ctrl.dccm_read_burst.start) force_ahb_dma_loop_read(ras_test_ctrl.dccm_read_burst.addr, ras_test_ctrl.dccm_read_burst.count); if (ras_test_ctrl.iccm_read_burst.start) force_ahb_dma_loop_read(ras_test_ctrl.iccm_read_burst.addr, ras_test_ctrl.iccm_read_burst.count); end -// forever @(posedge core_clk) begin -// if (c_state_apb != S_APB_WAIT_ERROR_AXS) -// rv_dma_resp_error = 1'b0; -// end - join end caliptra_top_sva sva(); diff --git a/src/integration/tb/caliptra_top_tb_pkg.sv b/src/integration/tb/caliptra_top_tb_pkg.sv index 3dc9a58f6..d98ff8899 100644 --- a/src/integration/tb/caliptra_top_tb_pkg.sv +++ b/src/integration/tb/caliptra_top_tb_pkg.sv @@ -14,6 +14,7 @@ // package caliptra_top_tb_pkg; +import soc_ifc_pkg::*; `ifndef VERILATOR class bitflip_mask_generator #(int MBOX_DATA_AND_ECC_W = 39); @@ -69,8 +70,6 @@ typedef struct packed { logic reset_generic_input_wires; logic do_no_lock_access; logic do_ooo_access; - logic reset_ooo_done_flag; - logic reset_no_lock_done_flag; } ras_test_ctrl_t; // Values to drive onto GENERIC INPUT WIRES in response to RAS testing @@ -84,4 +83,10 @@ localparam CRYPTO_ERROR_OBSERVED = 32'hdeadface; localparam DMA_ERROR_OBSERVED = 32'hfadebadd; localparam ERROR_NONE_SET = 32'hba5eba11; /* default value for a test with no activity observed by TB */ +// AXI SRAM config +localparam AXI_SRAM_SIZE_BYTES = 65536; +localparam AXI_SRAM_ADDR_WIDTH = $clog2(AXI_SRAM_SIZE_BYTES); +localparam AXI_SRAM_DEPTH = AXI_SRAM_SIZE_BYTES / (CPTRA_AXI_DMA_DATA_WIDTH/8); +localparam logic [`CALIPTRA_AXI_DMA_ADDR_WIDTH-1:0] AXI_SRAM_BASE_ADDR = `CALIPTRA_AXI_DMA_ADDR_WIDTH'h0001_2345_0000; + endpackage diff --git a/src/integration/tb/caliptra_top_tb_services.sv b/src/integration/tb/caliptra_top_tb_services.sv index 5eaf68bd6..a0111b7a5 100644 --- a/src/integration/tb/caliptra_top_tb_services.sv +++ b/src/integration/tb/caliptra_top_tb_services.sv @@ -260,7 +260,7 @@ module caliptra_top_tb_services // 8'he4 - Disable all SRAM error injection (Mailbox, ICCM, DCCM) // 8'he5 - Request TB to initiate Mailbox flow without lock (violation) // 8'he6 - Request TB to initiate Mailbox flow with out-of-order accesses (violation) - // 8'he7 - Reset mailbox out-of-order flag when non-fatal error is masked (allows the test to continue) + // 8'he7 - Reset mailbox out-of-order flag when non-fatal error is masked (allows the test to continue) [Deprecated] // 8'he8 - Enable scan mode when DOE fsm transitions to done state // 8'he9 - Force dmi_reg_en input to clk gate to emulate JTAG accesses // 8'hea - Set random values to WDT timer1 and timer2 @@ -323,32 +323,22 @@ module caliptra_top_tb_services if (!cptra_rst_b) begin ras_test_ctrl.do_no_lock_access <= 1'b0; ras_test_ctrl.do_ooo_access <= 1'b0; - ras_test_ctrl.reset_ooo_done_flag <= 1'b0; - ras_test_ctrl.reset_no_lock_done_flag <= 1'b0; end else if((WriteData[7:0] == 8'he5) && mailbox_write) begin ras_test_ctrl.do_no_lock_access <= 1'b1; ras_test_ctrl.do_ooo_access <= 1'b0; - ras_test_ctrl.reset_ooo_done_flag <= 1'b0; - ras_test_ctrl.reset_no_lock_done_flag <= 1'b0; end else if((WriteData[7:0] == 8'he6) && mailbox_write) begin ras_test_ctrl.do_no_lock_access <= 1'b0; ras_test_ctrl.do_ooo_access <= 1'b1; - ras_test_ctrl.reset_ooo_done_flag <= 1'b0; - ras_test_ctrl.reset_no_lock_done_flag <= 1'b0; end else if ((WriteData[7:0] == 8'he7) && mailbox_write) begin ras_test_ctrl.do_no_lock_access <= 1'b0; ras_test_ctrl.do_ooo_access <= 1'b0; - ras_test_ctrl.reset_ooo_done_flag <= 1'b1; - ras_test_ctrl.reset_no_lock_done_flag <= 1'b1; end else begin ras_test_ctrl.do_no_lock_access <= 1'b0; ras_test_ctrl.do_ooo_access <= 1'b0; - ras_test_ctrl.reset_ooo_done_flag <= 1'b0; - ras_test_ctrl.reset_no_lock_done_flag <= 1'b0; end end diff --git a/src/integration/tb/test_caliptra_top_tb.cpp b/src/integration/tb/test_caliptra_top_tb.cpp index 05b7f47db..3665ae00e 100644 --- a/src/integration/tb/test_caliptra_top_tb.cpp +++ b/src/integration/tb/test_caliptra_top_tb.cpp @@ -57,8 +57,9 @@ int main(int argc, char** argv) { #if VM_TRACE tfp->dump (main_time); #endif - main_time += 5; - tb->core_clk = !tb->core_clk; + main_time += 1; + // Toggle every 5ns (timescale precision is 100ps) + if (main_time % 50 == 0) tb->core_clk = !tb->core_clk; tb->eval(); } diff --git a/src/integration/test_suites/iccm_lock/caliptra_isr.h b/src/integration/test_suites/iccm_lock/caliptra_isr.h index 0bdef173f..07a5b39e8 100644 --- a/src/integration/test_suites/iccm_lock/caliptra_isr.h +++ b/src/integration/test_suites/iccm_lock/caliptra_isr.h @@ -54,6 +54,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -241,5 +243,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {return;} +inline void service_axi_dma_notif_intr() {return;} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/iccm_lock/iccm_lock.c b/src/integration/test_suites/iccm_lock/iccm_lock.c index 416c449fc..aa73a748b 100644 --- a/src/integration/test_suites/iccm_lock/iccm_lock.c +++ b/src/integration/test_suites/iccm_lock/iccm_lock.c @@ -57,6 +57,8 @@ volatile caliptra_intr_received_s cptra_intr_rcv = { .soc_ifc_notif = 0, .sha512_acc_error = 0, .sha512_acc_notif = 0, + .axi_dma_notif = 0, + .axi_dma_notif = 0, }; extern uintptr_t iccm_code0_start, iccm_code0_end; diff --git a/src/integration/test_suites/includes/caliptra_defines.h b/src/integration/test_suites/includes/caliptra_defines.h index 4214fdd3b..0249f48c7 100644 --- a/src/integration/test_suites/includes/caliptra_defines.h +++ b/src/integration/test_suites/includes/caliptra_defines.h @@ -79,6 +79,10 @@ #define STATUS_READY_BIT 0x0 #define STATUS_VALID_BIT 0x1 +/* ---- AXI SRAM ---- */ +#define AXI_SRAM_BASE_ADDR (uint64_t) 0x000123450000ULL +#define AXI_SRAM_SIZE_BYTES 65536 + /* ---- Interrupts ---- */ #define VEER_INTR_VEC_DOE_ERROR 1 #define VEER_INTR_VEC_DOE_NOTIF 2 @@ -102,8 +106,10 @@ #define VEER_INTR_VEC_SOC_IFC_NOTIF 20 #define VEER_INTR_VEC_SHA512_ACC_ERROR 21 #define VEER_INTR_VEC_SHA512_ACC_NOTIF 22 +#define VEER_INTR_VEC_AXI_DMA_ERROR 23 +#define VEER_INTR_VEC_AXI_DMA_NOTIF 24 // Used to tie-off unused upper intr bits -#define VEER_INTR_VEC_MAX_ASSIGNED VEER_INTR_VEC_SHA512_ACC_NOTIF +#define VEER_INTR_VEC_MAX_ASSIGNED VEER_INTR_VEC_AXI_DMA_NOTIF #define VEER_INTR_PRIO_DOE_ERROR 8 #define VEER_INTR_PRIO_DOE_NOTIF 7 @@ -127,6 +133,8 @@ #define VEER_INTR_PRIO_I3C_NOTIF 3 #define VEER_INTR_PRIO_SOC_IFC_ERROR 8 #define VEER_INTR_PRIO_SOC_IFC_NOTIF 7 +#define VEER_INTR_PRIO_AXI_DMA_ERROR 8 +#define VEER_INTR_PRIO_AXI_DMA_NOTIF 7 #endif // CALIPTRA_DEFINES_H diff --git a/src/integration/test_suites/libs/caliptra_isr/caliptra_isr.c b/src/integration/test_suites/libs/caliptra_isr/caliptra_isr.c index 459b00eea..11acd94e3 100644 --- a/src/integration/test_suites/libs/caliptra_isr/caliptra_isr.c +++ b/src/integration/test_suites/libs/caliptra_isr/caliptra_isr.c @@ -76,6 +76,8 @@ static void nonstd_veer_isr_soc_ifc_error (void) __attribute__ ((interrupt ("mac static void nonstd_veer_isr_soc_ifc_notif (void) __attribute__ ((interrupt ("machine"))); static void nonstd_veer_isr_sha512_acc_error (void) __attribute__ ((interrupt ("machine"))); static void nonstd_veer_isr_sha512_acc_notif (void) __attribute__ ((interrupt ("machine"))); +static void nonstd_veer_isr_axi_dma_error (void) __attribute__ ((interrupt ("machine"))); +static void nonstd_veer_isr_axi_dma_notif (void) __attribute__ ((interrupt ("machine"))); // Could be much more fancy with C preprocessing to pair up the ISR with Vector // numbers as defined in caliptra_defines.h.... TODO @@ -101,13 +103,13 @@ static void (* const nonstd_veer_isr_18) (void) = std_rv_nop_machine ; static void (* const nonstd_veer_isr_19) (void) = nonstd_veer_isr_soc_ifc_error; // | static void (* const nonstd_veer_isr_20) (void) = nonstd_veer_isr_soc_ifc_notif; // | static void (* const nonstd_veer_isr_21) (void) = nonstd_veer_isr_sha512_acc_error;// | -static void (* const nonstd_veer_isr_22) (void) = nonstd_veer_isr_sha512_acc_notif;// -------' -static void (* const nonstd_veer_isr_23) (void) = std_rv_nop_machine; // --------| -static void (* const nonstd_veer_isr_24) (void) = std_rv_nop_machine; // | -static void (* const nonstd_veer_isr_25) (void) = std_rv_nop_machine; // | -static void (* const nonstd_veer_isr_26) (void) = std_rv_nop_machine; // Unimplemented ISR +static void (* const nonstd_veer_isr_22) (void) = nonstd_veer_isr_sha512_acc_notif;// | +static void (* const nonstd_veer_isr_23) (void) = nonstd_veer_isr_axi_dma_error; // | +static void (* const nonstd_veer_isr_24) (void) = nonstd_veer_isr_axi_dma_notif; // -------' +static void (* const nonstd_veer_isr_25) (void) = std_rv_nop_machine; // --------| +static void (* const nonstd_veer_isr_26) (void) = std_rv_nop_machine; // | static void (* const nonstd_veer_isr_27) (void) = std_rv_nop_machine; // | -static void (* const nonstd_veer_isr_28) (void) = std_rv_nop_machine; // | +static void (* const nonstd_veer_isr_28) (void) = std_rv_nop_machine; // Unimplemented ISR static void (* const nonstd_veer_isr_29) (void) = std_rv_nop_machine; // | static void (* const nonstd_veer_isr_30) (void) = std_rv_nop_machine; // | static void (* const nonstd_veer_isr_31) (void) = std_rv_nop_machine; // --------' @@ -177,6 +179,7 @@ void init_interrupts(void) { volatile uint32_t * const sha512_reg = (uint32_t*) CLP_SHA512_REG_BASE_ADDR; volatile uint32_t * const sha256_reg = (uint32_t*) CLP_SHA256_REG_BASE_ADDR; volatile uint32_t * const sha512_acc_csr = (uint32_t*) CLP_SHA512_ACC_CSR_BASE_ADDR; + volatile uint32_t * const axi_dma_reg = (uint32_t*) CLP_AXI_DMA_REG_BASE_ADDR; volatile uint32_t * const mtime_l = (uint32_t*) CLP_SOC_IFC_REG_INTERNAL_RV_MTIME_L; volatile uint32_t * const mtime_h = (uint32_t*) CLP_SOC_IFC_REG_INTERNAL_RV_MTIME_H; volatile uint32_t * const mtimecmp_l = (uint32_t*) CLP_SOC_IFC_REG_INTERNAL_RV_MTIMECMP_L; @@ -240,6 +243,8 @@ void init_interrupts(void) { meipls[VEER_INTR_VEC_SOC_IFC_NOTIF ] = VEER_INTR_PRIO_SOC_IFC_NOTIF ; __asm__ volatile ("fence"); meipls[VEER_INTR_VEC_SHA512_ACC_ERROR] = VEER_INTR_PRIO_SHA512_ACC_ERROR; __asm__ volatile ("fence"); meipls[VEER_INTR_VEC_SHA512_ACC_NOTIF] = VEER_INTR_PRIO_SHA512_ACC_NOTIF; __asm__ volatile ("fence"); + meipls[VEER_INTR_VEC_AXI_DMA_ERROR ] = VEER_INTR_PRIO_AXI_DMA_ERROR ; __asm__ volatile ("fence"); + meipls[VEER_INTR_VEC_AXI_DMA_NOTIF ] = VEER_INTR_PRIO_AXI_DMA_NOTIF ; __asm__ volatile ("fence"); for (uint8_t undef = VEER_INTR_VEC_MAX_ASSIGNED+1; undef <= RV_PIC_TOTAL_INT; undef++) { meipls[undef] = 0; __asm__ volatile ("fence"); // Set to 0 meaning NEVER interrupt } @@ -336,6 +341,23 @@ void init_interrupts(void) { sha512_acc_csr[SHA512_ACC_CSR_INTR_BLOCK_RF_GLOBAL_INTR_EN_R/sizeof(uint32_t)] = SHA512_ACC_CSR_INTR_BLOCK_RF_GLOBAL_INTR_EN_R_ERROR_EN_MASK | SHA512_ACC_CSR_INTR_BLOCK_RF_GLOBAL_INTR_EN_R_NOTIF_EN_MASK; + // AXI DMA + // TODO + axi_dma_reg[AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R /sizeof(uint32_t)] = AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_CMD_DEC_EN_MASK | + AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_AXI_RD_EN_MASK | + AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_AXI_WR_EN_MASK | + AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_MBOX_LOCK_EN_MASK | + AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_SHA_LOCK_EN_MASK | + AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_FIFO_OFLOW_EN_MASK | + AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTR_EN_R_ERROR_FIFO_UFLOW_EN_MASK; + axi_dma_reg[AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R /sizeof(uint32_t)] = AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R_NOTIF_TXN_DONE_EN_MASK | + AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R_NOTIF_FIFO_EMPTY_EN_MASK | + AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R_NOTIF_FIFO_NOT_EMPTY_EN_MASK | + AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R_NOTIF_FIFO_FULL_EN_MASK | + AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R_NOTIF_FIFO_NOT_FULL_EN_MASK; + axi_dma_reg[AXI_DMA_REG_INTR_BLOCK_RF_GLOBAL_INTR_EN_R/sizeof(uint32_t)] = AXI_DMA_REG_INTR_BLOCK_RF_GLOBAL_INTR_EN_R_ERROR_EN_MASK | + AXI_DMA_REG_INTR_BLOCK_RF_GLOBAL_INTR_EN_R_NOTIF_EN_MASK; + // Set mtimecmp to max value to avoid spurious timer interrupts *mtimecmp_l = 0xFFFFFFFF; *mtimecmp_h = 0xFFFFFFFF; @@ -704,6 +726,8 @@ static void nonstd_veer_isr_0 (void) { * service_soc_ifc_notif_intr \ * service_sha512_acc_error_intr \ * service_sha512_acc_notif_intr \ + * service_axi_dma_error_intr \ + * service_axi_dma_notif_intr \ */ \ service_##name##_intr(); \ \ @@ -774,4 +798,8 @@ nonstd_veer_isr(soc_ifc_notif) nonstd_veer_isr(sha512_acc_error) // Non-Standard Vectored Interrupt Handler (SHA Notification = vector 22) nonstd_veer_isr(sha512_acc_notif) +// Non-Standard Vectored Interrupt Handler (AXI DMA Error = vector 23) +nonstd_veer_isr(axi_dma_error) +// Non-Standard Vectored Interrupt Handler (AXI DMA Notification = vector 24) +nonstd_veer_isr(axi_dma_notif) diff --git a/src/integration/test_suites/libs/soc_ifc/soc_ifc.c b/src/integration/test_suites/libs/soc_ifc/soc_ifc.c index bd890a7bb..2a7edd321 100644 --- a/src/integration/test_suites/libs/soc_ifc/soc_ifc.c +++ b/src/integration/test_suites/libs/soc_ifc/soc_ifc.c @@ -295,3 +295,116 @@ void soc_ifc_sha_accel_clr_lock() { //Write one to clear lsu_write_32((CLP_SHA512_ACC_CSR_LOCK), SHA512_ACC_CSR_LOCK_LOCK_MASK); } + +// AXI DMA Functions +uint8_t soc_ifc_axi_dma_send_ahb_payload(uint64_t dst_addr, uint8_t fixed, uint32_t * payload, uint32_t byte_count, uint16_t block_size) { + uint32_t reg; + uint16_t mdepth; + + // Arm the command + while (lsu_read_32(CLP_AXI_DMA_REG_STATUS0) & AXI_DMA_REG_STATUS0_BUSY_MASK); + lsu_write_32(CLP_AXI_DMA_REG_DST_ADDR_L, dst_addr & 0xffffffff); + lsu_write_32(CLP_AXI_DMA_REG_DST_ADDR_H, (dst_addr >> 32) & 0xffffffff); + lsu_write_32(CLP_AXI_DMA_REG_BYTE_COUNT, byte_count); + lsu_write_32(CLP_AXI_DMA_REG_BLOCK_SIZE, (uint32_t) block_size); + reg |= AXI_DMA_REG_CTRL_GO_MASK; + reg |= axi_dma_rd_route_DISABLE << AXI_DMA_REG_CTRL_RD_ROUTE_LOW; + reg |= axi_dma_wr_route_AHB_FIFO << AXI_DMA_REG_CTRL_WR_ROUTE_LOW; + reg |= fixed ? AXI_DMA_REG_CTRL_WR_FIXED_MASK : 0; + lsu_write_32(CLP_AXI_DMA_REG_CTRL, reg); + + // Send data + mdepth = (lsu_read_32(CLP_AXI_DMA_REG_CAP) & AXI_DMA_REG_CAP_FIFO_MAX_DEPTH_MASK) >> AXI_DMA_REG_CAP_FIFO_MAX_DEPTH_LOW; + for (uint32_t dw_sent = 0; dw_sent < (byte_count>>2); dw_sent++) { + // Wait for there to be available space in the FIFO + while(((lsu_read_32(CLP_AXI_DMA_REG_STATUS0) & AXI_DMA_REG_STATUS0_FIFO_DEPTH_MASK) >> AXI_DMA_REG_STATUS0_FIFO_DEPTH_LOW) == mdepth); + lsu_write_32(CLP_AXI_DMA_REG_WRITE_DATA, payload[dw_sent]); + } + + // Check completion + reg = lsu_read_32(CLP_AXI_DMA_REG_STATUS0); + while ((reg & AXI_DMA_REG_STATUS0_BUSY_MASK) && !(reg & AXI_DMA_REG_STATUS0_ERROR_MASK)) { + reg = lsu_read_32(CLP_AXI_DMA_REG_STATUS0); + } + + if (reg & AXI_DMA_REG_STATUS0_ERROR_MASK) { + VPRINTF(FATAL, "FATAL: AXI DMA reports error status for FIFO-to-AXI xfer\n"); + lsu_write_32(CLP_AXI_DMA_REG_CTRL, AXI_DMA_REG_CTRL_FLUSH_MASK); + SEND_STDOUT_CTRL(0x1); + } +} + +uint8_t soc_ifc_axi_dma_read_ahb_payload(uint64_t src_addr, uint8_t fixed, uint32_t * payload, uint32_t byte_count, uint16_t block_size) { + uint32_t reg; + uint16_t mdepth; + + // Arm the command + while (lsu_read_32(CLP_AXI_DMA_REG_STATUS0) & AXI_DMA_REG_STATUS0_BUSY_MASK); + lsu_write_32(CLP_AXI_DMA_REG_SRC_ADDR_L, src_addr & 0xffffffff); + lsu_write_32(CLP_AXI_DMA_REG_SRC_ADDR_H, (src_addr >> 32) & 0xffffffff); + lsu_write_32(CLP_AXI_DMA_REG_BYTE_COUNT, byte_count); + lsu_write_32(CLP_AXI_DMA_REG_BLOCK_SIZE, (uint32_t) block_size); + reg |= AXI_DMA_REG_CTRL_GO_MASK; + reg |= axi_dma_rd_route_AHB_FIFO << AXI_DMA_REG_CTRL_RD_ROUTE_LOW; + reg |= axi_dma_wr_route_DISABLE << AXI_DMA_REG_CTRL_WR_ROUTE_LOW; + reg |= fixed ? AXI_DMA_REG_CTRL_RD_FIXED_MASK : 0; + lsu_write_32(CLP_AXI_DMA_REG_CTRL, reg); + + // Read data + mdepth = (lsu_read_32(CLP_AXI_DMA_REG_CAP) & AXI_DMA_REG_CAP_FIFO_MAX_DEPTH_MASK) >> AXI_DMA_REG_CAP_FIFO_MAX_DEPTH_LOW; + for (uint32_t dw_rcv = 0; dw_rcv < (byte_count>>2); dw_rcv++) { + // Wait for there to be available data in the FIFO + while(((lsu_read_32(CLP_AXI_DMA_REG_STATUS0) & AXI_DMA_REG_STATUS0_FIFO_DEPTH_MASK) >> AXI_DMA_REG_STATUS0_FIFO_DEPTH_LOW) == 0); + payload[dw_rcv] = lsu_read_32(CLP_AXI_DMA_REG_READ_DATA); + } + + // Check completion + reg = lsu_read_32(CLP_AXI_DMA_REG_STATUS0); + while ((reg & AXI_DMA_REG_STATUS0_BUSY_MASK) && !(reg & AXI_DMA_REG_STATUS0_ERROR_MASK)) { + reg = lsu_read_32(CLP_AXI_DMA_REG_STATUS0); + } + + if (reg & AXI_DMA_REG_STATUS0_ERROR_MASK) { + VPRINTF(FATAL, "FATAL: AXI DMA reports error status for AXI-to-FIFO xfer\n"); + lsu_write_32(CLP_AXI_DMA_REG_CTRL, AXI_DMA_REG_CTRL_FLUSH_MASK); + SEND_STDOUT_CTRL(0x1); + } +} + +uint8_t soc_ifc_axi_dma_send_mbox_payload(uint64_t src_addr, uint64_t dst_addr, uint8_t fixed, uint32_t byte_count, uint16_t block_size) { +} + +uint8_t soc_ifc_axi_dma_read_mbox_payload(uint64_t src_addr, uint64_t dst_addr, uint8_t fixed, uint32_t byte_count, uint16_t block_size) { +} + +uint8_t soc_ifc_axi_dma_send_axi_to_axi(uint64_t src_addr, uint8_t src_fixed, uint64_t dst_addr, uint8_t dst_fixed, uint32_t byte_count, uint16_t block_size) { + uint32_t reg; + + // Arm the command + while (lsu_read_32(CLP_AXI_DMA_REG_STATUS0) & AXI_DMA_REG_STATUS0_BUSY_MASK); + lsu_write_32(CLP_AXI_DMA_REG_SRC_ADDR_L, src_addr & 0xffffffff); + lsu_write_32(CLP_AXI_DMA_REG_SRC_ADDR_H, (src_addr >> 32) & 0xffffffff); + lsu_write_32(CLP_AXI_DMA_REG_DST_ADDR_L, dst_addr & 0xffffffff); + lsu_write_32(CLP_AXI_DMA_REG_DST_ADDR_H, (dst_addr >> 32) & 0xffffffff); + lsu_write_32(CLP_AXI_DMA_REG_BYTE_COUNT, byte_count); + lsu_write_32(CLP_AXI_DMA_REG_BLOCK_SIZE, (uint32_t) block_size); + reg |= AXI_DMA_REG_CTRL_GO_MASK; + reg |= axi_dma_rd_route_AXI_WR << AXI_DMA_REG_CTRL_RD_ROUTE_LOW; + reg |= axi_dma_wr_route_AXI_RD << AXI_DMA_REG_CTRL_WR_ROUTE_LOW; + reg |= src_fixed ? AXI_DMA_REG_CTRL_RD_FIXED_MASK : 0; + reg |= dst_fixed ? AXI_DMA_REG_CTRL_WR_FIXED_MASK : 0; + lsu_write_32(CLP_AXI_DMA_REG_CTRL, reg); + + // Check completion + reg = lsu_read_32(CLP_AXI_DMA_REG_STATUS0); + while ((reg & AXI_DMA_REG_STATUS0_BUSY_MASK) && !(reg & AXI_DMA_REG_STATUS0_ERROR_MASK)) { + reg = lsu_read_32(CLP_AXI_DMA_REG_STATUS0); + } + + // Report any errors + if (reg & AXI_DMA_REG_STATUS0_ERROR_MASK) { + VPRINTF(FATAL, "FATAL: AXI DMA reports error status for AXI-to-AXI xfer\n"); + lsu_write_32(CLP_AXI_DMA_REG_CTRL, AXI_DMA_REG_CTRL_FLUSH_MASK); + SEND_STDOUT_CTRL(0x1); + } +} diff --git a/src/integration/test_suites/libs/soc_ifc/soc_ifc.h b/src/integration/test_suites/libs/soc_ifc/soc_ifc.h index 84f6ad365..c32277b2a 100644 --- a/src/integration/test_suites/libs/soc_ifc/soc_ifc.h +++ b/src/integration/test_suites/libs/soc_ifc/soc_ifc.h @@ -38,6 +38,27 @@ enum mbox_fsm_e { MBOX_ERROR = 0x7 }; +enum axi_dma_rd_route_e { + axi_dma_rd_route_DISABLE = 0x0, + axi_dma_rd_route_MBOX = 0x1, + axi_dma_rd_route_AHB_FIFO = 0x2, + axi_dma_rd_route_AXI_WR = 0x3 +}; + +enum axi_dma_wr_route_e { + axi_dma_wr_route_DISABLE = 0x0, + axi_dma_wr_route_MBOX = 0x1, + axi_dma_wr_route_AHB_FIFO = 0x2, + axi_dma_wr_route_AXI_RD = 0x3 +}; + +enum axi_dma_fsm_e { + axi_dma_fsm_DMA_IDLE = 0x0, + axi_dma_fsm_DMA_WAIT_DATA = 0x1, + axi_dma_fsm_DMA_DONE = 0x2, + axi_dma_fsm_DMA_ERROR = 0x3 +}; + /** * Decode: * [31]: Firmware command @@ -128,4 +149,11 @@ void soc_ifc_sha_accel_poll_status(); void soc_ifc_sha_accel_clr_lock(); void soc_ifc_w1clr_sha_lock_field(); +// AXI DMA Functions +uint8_t soc_ifc_axi_dma_send_ahb_payload(uint64_t dst_addr, uint8_t fixed, uint32_t * payload, uint32_t byte_count, uint16_t block_size); +uint8_t soc_ifc_axi_dma_read_ahb_payload(uint64_t src_addr, uint8_t fixed, uint32_t * payload, uint32_t byte_count, uint16_t block_size); +uint8_t soc_ifc_axi_dma_send_mbox_payload(uint64_t src_addr, uint64_t dst_addr, uint8_t fixed, uint32_t byte_count, uint16_t block_size); +uint8_t soc_ifc_axi_dma_read_mbox_payload(uint64_t src_addr, uint64_t dst_addr, uint8_t fixed, uint32_t byte_count, uint16_t block_size); +uint8_t soc_ifc_axi_dma_send_axi_to_axi(uint64_t src_addr, uint8_t src_fixed, uint64_t dst_addr, uint8_t dst_fixed, uint32_t byte_count, uint16_t block_size); + #endif diff --git a/src/integration/test_suites/smoke_test_dma/caliptra_isr.h b/src/integration/test_suites/smoke_test_dma/caliptra_isr.h new file mode 100644 index 000000000..eeca30e9b --- /dev/null +++ b/src/integration/test_suites/smoke_test_dma/caliptra_isr.h @@ -0,0 +1,317 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// --------------------------------------------------------------------- +// File: caliptra_isr.h +// Description: +// Provides function declarations for use by external test files, so +// that the ISR functionality may behave like a library. +// TODO: +// This header file includes inline function definitions for event and +// test specific interrupt service behavior, so it should be copied and +// modified for each test. +// --------------------------------------------------------------------- + +#ifndef CALIPTRA_ISR_H + #define CALIPTRA_ISR_H + +#include "caliptra_defines.h" +#include +#include "printf.h" + +/* --------------- symbols/typedefs --------------- */ +typedef struct { + uint32_t doe_error; + uint32_t doe_notif; + uint32_t ecc_error; + uint32_t ecc_notif; + uint32_t hmac_error; + uint32_t hmac_notif; + uint32_t kv_error; + uint32_t kv_notif; + uint32_t sha512_error; + uint32_t sha512_notif; + uint32_t sha256_error; + uint32_t sha256_notif; + uint32_t qspi_error; + uint32_t qspi_notif; + uint32_t uart_error; + uint32_t uart_notif; + uint32_t i3c_error; + uint32_t i3c_notif; + uint32_t soc_ifc_error; + uint32_t soc_ifc_notif; + uint32_t sha512_acc_error; + uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; +} caliptra_intr_received_s; +extern volatile caliptra_intr_received_s cptra_intr_rcv; + +////////////////////////////////////////////////////////////////////////////// +// Function Declarations +// + +// Performs all the CSR setup to configure and enable vectored external interrupts +void init_interrupts(void); + +// These inline functions are used to insert event-specific functionality into the +// otherwise generic ISR that gets laid down by the parameterized macro "nonstd_veer_isr" +inline void service_doe_error_intr() {return;} +inline void service_doe_notif_intr() { + uint32_t * reg = (uint32_t *) (CLP_DOE_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R); + uint32_t sts = *reg; + /* Write 1 to Clear the pending interrupt */ + if (sts & DOE_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_CMD_DONE_STS_MASK) { + *reg = DOE_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_CMD_DONE_STS_MASK; + cptra_intr_rcv.doe_notif |= DOE_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_CMD_DONE_STS_MASK; + } + if (sts == 0) { + VPRINTF(ERROR,"bad doe_notif_intr sts:%x\n", sts); + SEND_STDOUT_CTRL(0x1); + while(1); + } +} + +inline void service_ecc_error_intr() {return;} +inline void service_ecc_notif_intr() { + uint32_t * reg = (uint32_t *) (CLP_ECC_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R); + uint32_t sts = *reg; + /* Write 1 to Clear the pending interrupt */ + if (sts & ECC_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_CMD_DONE_STS_MASK) { + *reg = ECC_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_CMD_DONE_STS_MASK; + cptra_intr_rcv.ecc_notif |= ECC_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_CMD_DONE_STS_MASK; + } + if (sts == 0) { + VPRINTF(ERROR,"bad ecc_notif_intr sts:%x\n", sts); + SEND_STDOUT_CTRL(0x1); + while(1); + } +} + +inline void service_hmac_error_intr() {return;} +inline void service_hmac_notif_intr() { + uint32_t * reg = (uint32_t *) (CLP_HMAC_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R); + uint32_t sts = *reg; + /* Write 1 to Clear the pending interrupt */ + if (sts & HMAC_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_CMD_DONE_STS_MASK) { + *reg = HMAC_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_CMD_DONE_STS_MASK; + cptra_intr_rcv.hmac_notif |= HMAC_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_CMD_DONE_STS_MASK; + } + if (sts == 0) { + VPRINTF(ERROR,"bad hmac_notif_intr sts:%x\n", sts); + SEND_STDOUT_CTRL(0x1); + while(1); + } +} + +inline void service_kv_error_intr() {return;} +inline void service_kv_notif_intr() {return;} +inline void service_sha512_error_intr() {return;} +inline void service_sha512_notif_intr() { + uint32_t * reg = (uint32_t *) (CLP_SHA512_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R); + uint32_t sts = *reg; + /* Write 1 to Clear the pending interrupt */ + if (sts & SHA512_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_CMD_DONE_STS_MASK) { + *reg = SHA512_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_CMD_DONE_STS_MASK; + cptra_intr_rcv.sha512_notif |= SHA512_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_CMD_DONE_STS_MASK; + } + if (sts == 0) { + VPRINTF(ERROR,"bad sha512_notif_intr sts:%x\n", sts); + SEND_STDOUT_CTRL(0x1); + while(1); + } +} + +inline void service_sha256_error_intr() {return;} +inline void service_sha256_notif_intr() { + uint32_t * reg = (uint32_t *) (CLP_SHA256_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R); + uint32_t sts = *reg; + /* Write 1 to Clear the pending interrupt */ + if (sts & SHA256_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_CMD_DONE_STS_MASK) { + *reg = SHA256_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_CMD_DONE_STS_MASK; + cptra_intr_rcv.sha256_notif |= SHA256_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_CMD_DONE_STS_MASK; + } + if (sts == 0) { + VPRINTF(ERROR,"bad sha256_notif_intr sts:%x\n", sts); + SEND_STDOUT_CTRL(0x1); + while(1); + } +} + +inline void service_qspi_error_intr() {return;} +inline void service_qspi_notif_intr() {return;} +inline void service_uart_error_intr() {return;} +inline void service_uart_notif_intr() {return;} +inline void service_i3c_error_intr() {return;} +inline void service_i3c_notif_intr() {return;} + +inline void service_soc_ifc_error_intr() { + uint32_t * reg = (uint32_t *) (CLP_SOC_IFC_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R); + uint32_t sts = *reg; + /* Write 1 to Clear the pending interrupt */ + if (sts & SOC_IFC_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_INTERNAL_STS_MASK) { + *reg = SOC_IFC_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_INTERNAL_STS_MASK; + cptra_intr_rcv.soc_ifc_error |= SOC_IFC_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_INTERNAL_STS_MASK; + } + if (sts & SOC_IFC_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_INV_DEV_STS_MASK) { + *reg = SOC_IFC_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_INV_DEV_STS_MASK; + cptra_intr_rcv.soc_ifc_error |= SOC_IFC_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_INV_DEV_STS_MASK; + } + if (sts & SOC_IFC_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_CMD_FAIL_STS_MASK) { + *reg = SOC_IFC_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_CMD_FAIL_STS_MASK; + cptra_intr_rcv.soc_ifc_error |= SOC_IFC_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_CMD_FAIL_STS_MASK; + } + if (sts & SOC_IFC_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_BAD_FUSE_STS_MASK) { + *reg = SOC_IFC_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_BAD_FUSE_STS_MASK; + cptra_intr_rcv.soc_ifc_error |= SOC_IFC_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_BAD_FUSE_STS_MASK; + } + if (sts & SOC_IFC_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_ICCM_BLOCKED_STS_MASK) { + *reg = SOC_IFC_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_ICCM_BLOCKED_STS_MASK; + cptra_intr_rcv.soc_ifc_error |= SOC_IFC_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_ICCM_BLOCKED_STS_MASK; + } + if (sts & SOC_IFC_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_MBOX_ECC_UNC_STS_MASK) { + *reg = SOC_IFC_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_MBOX_ECC_UNC_STS_MASK; + cptra_intr_rcv.soc_ifc_error |= SOC_IFC_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_MBOX_ECC_UNC_STS_MASK; + } + if (sts == 0) { + VPRINTF(ERROR,"bad soc_ifc_error_intr sts:%x\n", sts); + SEND_STDOUT_CTRL(0x1); + while(1); + } +} + +inline void service_soc_ifc_notif_intr () { + uint32_t * reg = (uint32_t *) (CLP_SOC_IFC_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R); + uint32_t sts = *reg; + /* Write 1 to Clear the pending interrupt */ + if (sts & SOC_IFC_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_CMD_AVAIL_STS_MASK) { + *reg = SOC_IFC_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_CMD_AVAIL_STS_MASK; + cptra_intr_rcv.soc_ifc_notif |= SOC_IFC_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_CMD_AVAIL_STS_MASK; + } + if (sts & SOC_IFC_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_MBOX_ECC_COR_STS_MASK) { + *reg = SOC_IFC_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_MBOX_ECC_COR_STS_MASK; + cptra_intr_rcv.soc_ifc_notif |= SOC_IFC_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_MBOX_ECC_COR_STS_MASK; + } + if (sts & SOC_IFC_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_DEBUG_LOCKED_STS_MASK) { + *reg = SOC_IFC_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_DEBUG_LOCKED_STS_MASK; + cptra_intr_rcv.soc_ifc_notif |= SOC_IFC_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_DEBUG_LOCKED_STS_MASK; + } + if (sts & SOC_IFC_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_SCAN_MODE_STS_MASK) { + *reg = SOC_IFC_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_SCAN_MODE_STS_MASK; + cptra_intr_rcv.soc_ifc_notif |= SOC_IFC_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_SCAN_MODE_STS_MASK; + } + if (sts & SOC_IFC_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_SOC_REQ_LOCK_STS_MASK) { + *reg = SOC_IFC_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_SOC_REQ_LOCK_STS_MASK; + cptra_intr_rcv.soc_ifc_notif |= SOC_IFC_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_SOC_REQ_LOCK_STS_MASK; + } + if (sts & SOC_IFC_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_GEN_IN_TOGGLE_STS_MASK) { + *reg = SOC_IFC_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_GEN_IN_TOGGLE_STS_MASK; + cptra_intr_rcv.soc_ifc_notif |= SOC_IFC_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_GEN_IN_TOGGLE_STS_MASK; + } + if (sts == 0) { + VPRINTF(ERROR,"bad soc_ifc_notif_intr sts:%x\n", sts); + SEND_STDOUT_CTRL(0x1); + while(1); + } +} + +inline void service_sha512_acc_error_intr() {return;} +inline void service_sha512_acc_notif_intr() { + uint32_t * reg = (uint32_t *) (CLP_SHA512_ACC_CSR_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R); + uint32_t sts = *reg; + /* Write 1 to Clear the pending interrupt */ + if (sts & SHA512_ACC_CSR_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_CMD_DONE_STS_MASK) { + *reg = SHA512_ACC_CSR_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_CMD_DONE_STS_MASK; + cptra_intr_rcv.sha512_acc_notif |= SHA512_ACC_CSR_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_CMD_DONE_STS_MASK; + } + if (sts == 0) { + VPRINTF(ERROR,"bad sha512_acc_notif_intr sts:%x\n", sts); + SEND_STDOUT_CTRL(0x1); + while(1); + } +} + +inline void service_axi_dma_error_intr() { + uint32_t * reg = (uint32_t *) (CLP_AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R); + uint32_t sts = *reg; + /* Write 1 to Clear the pending interrupt */ + if (sts & AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_CMD_DEC_STS_MASK) { + *reg = AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_CMD_DEC_STS_MASK; + cptra_intr_rcv.soc_ifc_error |= AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_CMD_DEC_STS_MASK; + } + if (sts & AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_AXI_RD_STS_MASK) { + *reg = AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_AXI_RD_STS_MASK; + cptra_intr_rcv.soc_ifc_error |= AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_AXI_RD_STS_MASK; + } + if (sts & AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_AXI_WR_STS_MASK) { + *reg = AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_AXI_WR_STS_MASK; + cptra_intr_rcv.soc_ifc_error |= AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_AXI_WR_STS_MASK; + } + if (sts & AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_MBOX_LOCK_STS_MASK) { + *reg = AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_MBOX_LOCK_STS_MASK; + cptra_intr_rcv.soc_ifc_error |= AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_MBOX_LOCK_STS_MASK; + } + if (sts & AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_SHA_LOCK_STS_MASK) { + *reg = AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_SHA_LOCK_STS_MASK; + cptra_intr_rcv.soc_ifc_error |= AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_SHA_LOCK_STS_MASK; + } + if (sts & AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_FIFO_OFLOW_STS_MASK) { + *reg = AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_FIFO_OFLOW_STS_MASK; + cptra_intr_rcv.soc_ifc_error |= AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_FIFO_OFLOW_STS_MASK; + } + if (sts & AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_FIFO_UFLOW_STS_MASK) { + *reg = AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_FIFO_UFLOW_STS_MASK; + cptra_intr_rcv.soc_ifc_error |= AXI_DMA_REG_INTR_BLOCK_RF_ERROR_INTERNAL_INTR_R_ERROR_FIFO_UFLOW_STS_MASK; + } + if (sts == 0) { + VPRINTF(ERROR,"bad axi_dma_error_intr sts:%x\n", sts); + SEND_STDOUT_CTRL(0x1); + while(1); + } +} +inline void service_axi_dma_notif_intr() { + uint32_t * reg = (uint32_t *) (CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R); + uint32_t sts = *reg; +// VPRINTF(LOW, "ntf\n"); + /* Write 1 to Clear the pending interrupt */ + if (sts & AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_TXN_DONE_STS_MASK) { + *reg = AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_TXN_DONE_STS_MASK; + cptra_intr_rcv.soc_ifc_notif |= AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_TXN_DONE_STS_MASK; + } + if (sts & AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_FIFO_EMPTY_STS_MASK) { + *reg = AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_FIFO_EMPTY_STS_MASK; + cptra_intr_rcv.soc_ifc_notif |= AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_FIFO_EMPTY_STS_MASK; + } + if (sts & AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_FIFO_NOT_EMPTY_STS_MASK) { + *reg = AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_FIFO_NOT_EMPTY_STS_MASK; + cptra_intr_rcv.soc_ifc_notif |= AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_FIFO_NOT_EMPTY_STS_MASK; + } + if (sts & AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_FIFO_FULL_STS_MASK) { + *reg = AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_FIFO_FULL_STS_MASK; + cptra_intr_rcv.soc_ifc_notif |= AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_FIFO_FULL_STS_MASK; + } + if (sts & AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_FIFO_NOT_FULL_STS_MASK) { + *reg = AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_FIFO_NOT_FULL_STS_MASK; + cptra_intr_rcv.soc_ifc_notif |= AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTERNAL_INTR_R_NOTIF_FIFO_NOT_FULL_STS_MASK; + } + if (sts == 0) { + VPRINTF(ERROR,"bad axi_dma_notif_intr sts:%x\n", sts); + SEND_STDOUT_CTRL(0x1); + while(1); + } +} + + +#endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_dma/smoke_test_dma.c b/src/integration/test_suites/smoke_test_dma/smoke_test_dma.c new file mode 100644 index 000000000..07f7ee02a --- /dev/null +++ b/src/integration/test_suites/smoke_test_dma/smoke_test_dma.c @@ -0,0 +1,127 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#include "caliptra_defines.h" +#include "caliptra_isr.h" +#include "riscv-csr.h" +#include "veer-csr.h" +#include "riscv_hw_if.h" +#include +#include +#include "printf.h" +#include "soc_ifc.h" + + +//int whisperPrintf(const char* format, ...); +//#define ee_printf whisperPrintf + + +volatile char* stdout = (char *)STDOUT; +volatile uint32_t intr_count = 0; +#ifdef CPT_VERBOSITY + enum printf_verbosity verbosity_g = CPT_VERBOSITY; +#else + enum printf_verbosity verbosity_g = LOW; +#endif + +volatile caliptra_intr_received_s cptra_intr_rcv = { + .doe_error = 0, + .doe_notif = 0, + .ecc_error = 0, + .ecc_notif = 0, + .hmac_error = 0, + .hmac_notif = 0, + .kv_error = 0, + .kv_notif = 0, + .sha512_error = 0, + .sha512_notif = 0, + .sha256_error = 0, + .sha256_notif = 0, + .qspi_error = 0, + .qspi_notif = 0, + .uart_error = 0, + .uart_notif = 0, + .i3c_error = 0, + .i3c_notif = 0, + .soc_ifc_error = 0, + .soc_ifc_notif = 0, + .sha512_acc_error = 0, + .sha512_acc_notif = 0, + .axi_dma_notif = 0, + .axi_dma_notif = 0, +}; + +void main(void) { + int argc=0; + char *argv[1]; + uint32_t reg; + uint8_t fail = 0; + uint32_t send_payload[16] = { + 0xabadface, + 0xba5eba11, + 0xcafebabe, + 0xdeadbeef, + 0xebbf1000, + 0xfadefee1, + 0x12344321, + 0xa5a5a5a5, + 0x14351375, + 0x8afdbe82, + 0xafb832ba, + 0x8843151a, + 0xbad831b1, + 0xf831ba83, + 0xad813451, + 0x67120ad3 + }; + uint32_t read_payload[16]; + + VPRINTF(LOW, "----------------------------------\nSmoke Test AXI DMA !!\n----------------------------------\n"); + + // Setup the interrupt CSR configuration + init_interrupts(); + reg = lsu_read_32(CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R); + lsu_write_32(CLP_AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R, reg & ~(AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R_NOTIF_FIFO_EMPTY_EN_MASK | + AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R_NOTIF_FIFO_NOT_EMPTY_EN_MASK | + AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R_NOTIF_FIFO_FULL_EN_MASK | + AXI_DMA_REG_INTR_BLOCK_RF_NOTIF_INTR_EN_R_NOTIF_FIFO_NOT_FULL_EN_MASK)); + + // Test each malformed command check + // TODO + + // Send data through AHB interface to AXI_DMA, target the AXI SRAM + VPRINTF(LOW, "Sending payload via AHB i/f\n"); + soc_ifc_axi_dma_send_ahb_payload(AXI_SRAM_BASE_ADDR, 0, send_payload, 16*4, 0); + + // Move data from one address to another in AXI SRAM + // Use the block-size feature + VPRINTF(LOW, "Moving payload at SRAM via axi-to-axi xfer\n"); + soc_ifc_axi_dma_send_axi_to_axi(AXI_SRAM_BASE_ADDR, 0, AXI_SRAM_BASE_ADDR + AXI_SRAM_SIZE_BYTES/2, 0, 16*4, 16*2); + + // Read data back from AXI SRAM and confirm it matches + VPRINTF(LOW, "Reading payload via AHB i/f\n"); + soc_ifc_axi_dma_read_ahb_payload(AXI_SRAM_BASE_ADDR + AXI_SRAM_SIZE_BYTES/2, 0, read_payload, 16*4, 0); + for (uint8_t ii = 0; ii < 16; ii++) { + if (read_payload[ii] != send_payload[ii]) { + fail = 1; + VPRINTF(ERROR, "read_payload[%d] (0x%x) does not match send_payload[%d] (0x%x)\n", ii, read_payload[ii], ii, send_payload[ii]); + } + } + + if (fail) { + VPRINTF(FATAL, "smoke_test_dma failed!\n"); + SEND_STDOUT_CTRL(0x1); + while(1); + } +} diff --git a/src/integration/test_suites/smoke_test_dma/smoke_test_dma.yml b/src/integration/test_suites/smoke_test_dma/smoke_test_dma.yml new file mode 100755 index 000000000..e4385609e --- /dev/null +++ b/src/integration/test_suites/smoke_test_dma/smoke_test_dma.yml @@ -0,0 +1,17 @@ +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +--- +seed: 1 +testname: smoke_test_dma diff --git a/src/integration/test_suites/smoke_test_mbox/caliptra_isr.h b/src/integration/test_suites/smoke_test_mbox/caliptra_isr.h index 8f5779e04..3b28f5e23 100644 --- a/src/integration/test_suites/smoke_test_mbox/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_mbox/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {return;} +inline void service_axi_dma_notif_intr() {return;} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_mbox/smoke_test_mbox.c b/src/integration/test_suites/smoke_test_mbox/smoke_test_mbox.c index 1ad31280c..ab0997714 100644 --- a/src/integration/test_suites/smoke_test_mbox/smoke_test_mbox.c +++ b/src/integration/test_suites/smoke_test_mbox/smoke_test_mbox.c @@ -52,6 +52,8 @@ volatile caliptra_intr_received_s cptra_intr_rcv = { .soc_ifc_notif = 0, .sha512_acc_error = 0, .sha512_acc_notif = 0, + .axi_dma_error = 0, + .axi_dma_notif = 0, }; void main () { diff --git a/tools/scripts/Makefile b/tools/scripts/Makefile index 658fd6d87..e303d3a5a 100644 --- a/tools/scripts/Makefile +++ b/tools/scripts/Makefile @@ -245,14 +245,14 @@ clean_fw: verilator-build: $(TBFILES) $(INCLUDES_DIR)/defines.h $(TB_VERILATOR_SRCS) $(TBDIR)/../config/caliptra_top_tb.vf set -eo pipefail; $(VERILATOR) $(TB_VERILATOR_SRCS) --cc -CFLAGS "$(CFLAGS)" \ +libext+.v+.sv +define+RV_OPENSOURCE \ - --timescale 1ns/1ps \ - --timing \ + --timescale 1ns/100ps \ + --timing \ $(includes) \ $(suppress) \ -f $(TBDIR)/../config/caliptra_top_tb.vf --top-module caliptra_top_tb \ -f $(TBDIR)/../config/caliptra_top_tb.vlt \ -exe test_caliptra_top_tb.cpp --autoflush $(VERILATOR_DEBUG) \ - $(TB_DEFS) 2>&1 | tee verilate.log + $(TB_DEFS) 2>&1 | tee verilator_build.log set -eo pipefail; $(MAKE) -j`nproc` -e -C obj_dir/ -f Vcaliptra_top_tb.mk $(VERILATOR_MAKE_FLAGS) VM_PARALLEL_BUILDS=1 2>&1 | tee verilator_make.log touch verilator-build @@ -266,7 +266,7 @@ vcs-build: $(TBFILES) $(INCLUDES_DIR)/defines.h $(TB_DPI_SRCS) ############ TEST Simulation ############################### verilator: program.hex verilator-build - set -eo pipefail; ./obj_dir/Vcaliptra_top_tb $(VERILATOR_RUN_ARGS) 2>&1 | tee verilator_run.log + set -eo pipefail; ./obj_dir/Vcaliptra_top_tb $(VERILATOR_RUN_ARGS) 2>&1 | tee verilator_sim.log vcs: program.hex vcs-build cp $(TEST_GEN_FILES) $(BUILD_DIR) From 7e156a7a800c80357d8e9f29ebd0e4c59c7e0d56 Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Thu, 25 Jul 2024 15:00:55 -0700 Subject: [PATCH 43/58] Update all caliptra_isr with new DMA interrupts; fw updates so all smoke tests pass --- .../test_suites/c_intr_handler/caliptra_isr.h | 5 ++ .../test_suites/caliptra_fmc/caliptra_isr.h | 5 ++ .../test_suites/caliptra_rt/caliptra_isr.h | 5 ++ .../test_suites/caliptra_top/caliptra_isr.h | 5 ++ .../hello_world_iccm/caliptra_isr.h | 5 ++ .../test_suites/infinite_loop/caliptra_isr.h | 6 ++ .../test_suites/libs/clk_gate/clk_gate.c | 4 +- .../memCpy_ROM_to_dccm/caliptra_isr.h | 5 ++ .../memCpy_dccm_to_iccm/caliptra_isr.h | 5 ++ .../pv_hash_and_sign/caliptra_isr.h | 5 ++ .../test_suites/pv_hash_reset/caliptra_isr.h | 2 + .../randomized_pcr_signing/caliptra_isr.h | 5 ++ .../smoke_test_ahb_mux/caliptra_isr.h | 5 ++ .../smoke_test_cg_wdt/caliptra_isr.h | 5 ++ .../smoke_test_clk_gating/caliptra_isr.h | 5 ++ .../smoke_test_clk_gating.c | 4 +- .../smoke_test_datavault_basic/caliptra_isr.h | 5 ++ .../smoke_test_datavault_lock/caliptra_isr.h | 5 ++ .../smoke_test_datavault_mini/caliptra_isr.h | 5 ++ .../smoke_test_datavault_reset/caliptra_isr.h | 5 ++ .../smoke_test_doe_cg/caliptra_isr.h | 5 ++ .../smoke_test_doe_rand/caliptra_isr.h | 5 ++ .../smoke_test_doe_scan/caliptra_isr.h | 5 ++ .../test_suites/smoke_test_ecc/caliptra_isr.h | 5 ++ .../caliptra_isr.h | 5 ++ .../caliptra_isr.h | 5 ++ .../smoke_test_hmac/caliptra_isr.h | 5 ++ .../smoke_test_hw_config/caliptra_isr.h | 5 ++ .../smoke_test_iccm_reset/caliptra_isr.h | 5 ++ .../test_suites/smoke_test_kv/caliptra_isr.h | 5 ++ .../smoke_test_kv_cg/caliptra_isr.h | 5 ++ .../smoke_test_kv_crypto_flow/caliptra_isr.h | 5 ++ .../smoke_test_kv_ecc_flow/caliptra_isr.h | 5 ++ .../smoke_test_kv_hmac_flow/caliptra_isr.h | 5 ++ .../caliptra_isr.h | 5 ++ .../smoke_test_kv_sha512_flow/caliptra_isr.h | 5 ++ .../smoke_test_kv_uds_reset/caliptra_isr.h | 5 ++ .../smoke_test_mbox_cg/caliptra_isr.h | 5 ++ .../smoke_test_mbox_cg/smoke_test_mbox_cg.c | 72 +++++++++++++++++-- .../smoke_test_pcr_signing/caliptra_isr.h | 5 ++ .../smoke_test_pcr_zeroize/caliptra_isr.h | 5 ++ .../smoke_test_qspi/caliptra_isr.h | 5 ++ .../test_suites/smoke_test_ras/caliptra_isr.h | 5 ++ .../smoke_test_ras/smoke_test_ras.c | 2 + .../smoke_test_sha256/caliptra_isr.h | 5 ++ .../smoke_test_sha256_wntz/caliptra_isr.h | 5 ++ .../caliptra_isr.h | 5 ++ .../smoke_test_sha512/caliptra_isr.h | 5 ++ .../smoke_test_sha_accel/caliptra_isr.h | 7 +- .../smoke_test_sram_ecc/caliptra_isr.h | 5 ++ .../smoke_test_trng/caliptra_isr.h | 5 ++ .../smoke_test_uart/caliptra_isr.h | 5 ++ .../smoke_test_veer/caliptra_isr.h | 5 ++ .../test_suites/smoke_test_wdt/caliptra_isr.h | 5 ++ .../smoke_test_wdt_rst/caliptra_isr.h | 5 ++ .../smoke_test_wdt_rst/smoke_test_wdt_rst.c | 6 +- .../smoke_test_zeroize_crypto/caliptra_isr.h | 5 ++ 57 files changed, 335 insertions(+), 13 deletions(-) diff --git a/src/integration/test_suites/c_intr_handler/caliptra_isr.h b/src/integration/test_suites/c_intr_handler/caliptra_isr.h index 517e72b37..a2c87bcce 100644 --- a/src/integration/test_suites/c_intr_handler/caliptra_isr.h +++ b/src/integration/test_suites/c_intr_handler/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -222,5 +224,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {return;} +inline void service_axi_dma_notif_intr() {return;} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/caliptra_fmc/caliptra_isr.h b/src/integration/test_suites/caliptra_fmc/caliptra_isr.h index 542d6572b..2700ad250 100644 --- a/src/integration/test_suites/caliptra_fmc/caliptra_isr.h +++ b/src/integration/test_suites/caliptra_fmc/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -251,5 +253,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {return;} +inline void service_axi_dma_notif_intr() {return;} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/caliptra_rt/caliptra_isr.h b/src/integration/test_suites/caliptra_rt/caliptra_isr.h index 1f7d023bc..a0495a7f1 100644 --- a/src/integration/test_suites/caliptra_rt/caliptra_isr.h +++ b/src/integration/test_suites/caliptra_rt/caliptra_isr.h @@ -54,6 +54,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -247,5 +249,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {printf("ERROR");} +inline void service_axi_dma_notif_intr() {printf("ERROR");} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/caliptra_top/caliptra_isr.h b/src/integration/test_suites/caliptra_top/caliptra_isr.h index 3fd30343d..075a3d421 100644 --- a/src/integration/test_suites/caliptra_top/caliptra_isr.h +++ b/src/integration/test_suites/caliptra_top/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -231,5 +233,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {return;} +inline void service_axi_dma_notif_intr() {return;} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/hello_world_iccm/caliptra_isr.h b/src/integration/test_suites/hello_world_iccm/caliptra_isr.h index 8f5779e04..3b28f5e23 100644 --- a/src/integration/test_suites/hello_world_iccm/caliptra_isr.h +++ b/src/integration/test_suites/hello_world_iccm/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {return;} +inline void service_axi_dma_notif_intr() {return;} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/infinite_loop/caliptra_isr.h b/src/integration/test_suites/infinite_loop/caliptra_isr.h index 7bd443326..9ff1022ab 100644 --- a/src/integration/test_suites/infinite_loop/caliptra_isr.h +++ b/src/integration/test_suites/infinite_loop/caliptra_isr.h @@ -49,6 +49,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; ////////////////////////////////////////////////////////////////////////////// @@ -87,4 +89,8 @@ inline void service_soc_ifc_notif_intr () {return;} inline void service_sha512_acc_error_intr() {return;} inline void service_sha512_acc_notif_intr() {return;} +inline void service_axi_dma_error_intr() {return;} +inline void service_axi_dma_notif_intr() {return;} + + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/libs/clk_gate/clk_gate.c b/src/integration/test_suites/libs/clk_gate/clk_gate.c index ad724e6e6..b28cbd489 100644 --- a/src/integration/test_suites/libs/clk_gate/clk_gate.c +++ b/src/integration/test_suites/libs/clk_gate/clk_gate.c @@ -19,7 +19,7 @@ #include "printf.h" void set_mit0_and_halt_core(uint32_t mitb0, uint32_t mie_en) { - VPRINTF(LOW, "Enabling internal timer0 and halting core\n"); + VPRINTF(LOW, "En int tmr0, hlt core\n"); //Enable internal timer0 __asm__ volatile ("csrwi %0, %1" \ : /* output: none */ \ @@ -96,4 +96,4 @@ void halt_core() { : /* output: none */ \ : "i" (0x7c6), "i" (0x03) /* input : immediate */ \ : /* clobbers: none */); -} \ No newline at end of file +} diff --git a/src/integration/test_suites/memCpy_ROM_to_dccm/caliptra_isr.h b/src/integration/test_suites/memCpy_ROM_to_dccm/caliptra_isr.h index 8f5779e04..3b28f5e23 100644 --- a/src/integration/test_suites/memCpy_ROM_to_dccm/caliptra_isr.h +++ b/src/integration/test_suites/memCpy_ROM_to_dccm/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {return;} +inline void service_axi_dma_notif_intr() {return;} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/memCpy_dccm_to_iccm/caliptra_isr.h b/src/integration/test_suites/memCpy_dccm_to_iccm/caliptra_isr.h index 8f5779e04..3b28f5e23 100644 --- a/src/integration/test_suites/memCpy_dccm_to_iccm/caliptra_isr.h +++ b/src/integration/test_suites/memCpy_dccm_to_iccm/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {return;} +inline void service_axi_dma_notif_intr() {return;} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/pv_hash_and_sign/caliptra_isr.h b/src/integration/test_suites/pv_hash_and_sign/caliptra_isr.h index 8f5779e04..3b28f5e23 100644 --- a/src/integration/test_suites/pv_hash_and_sign/caliptra_isr.h +++ b/src/integration/test_suites/pv_hash_and_sign/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {return;} +inline void service_axi_dma_notif_intr() {return;} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/pv_hash_reset/caliptra_isr.h b/src/integration/test_suites/pv_hash_reset/caliptra_isr.h index 23b511c4b..54fd4f09a 100644 --- a/src/integration/test_suites/pv_hash_reset/caliptra_isr.h +++ b/src/integration/test_suites/pv_hash_reset/caliptra_isr.h @@ -65,6 +65,8 @@ inline void service_soc_ifc_error_intr () {printf("ERROR");} inline void service_soc_ifc_notif_intr () {printf("ERROR");} inline void service_sha512_acc_error_intr() {printf("ERROR");} inline void service_sha512_acc_notif_intr() {printf("ERROR");} +inline void service_axi_dma_error_intr() {printf("ERROR");} +inline void service_axi_dma_notif_intr() {printf("ERROR");} #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/randomized_pcr_signing/caliptra_isr.h b/src/integration/test_suites/randomized_pcr_signing/caliptra_isr.h index 8f5779e04..3b28f5e23 100644 --- a/src/integration/test_suites/randomized_pcr_signing/caliptra_isr.h +++ b/src/integration/test_suites/randomized_pcr_signing/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {return;} +inline void service_axi_dma_notif_intr() {return;} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_ahb_mux/caliptra_isr.h b/src/integration/test_suites/smoke_test_ahb_mux/caliptra_isr.h index 8f5779e04..3b28f5e23 100644 --- a/src/integration/test_suites/smoke_test_ahb_mux/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_ahb_mux/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {return;} +inline void service_axi_dma_notif_intr() {return;} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_cg_wdt/caliptra_isr.h b/src/integration/test_suites/smoke_test_cg_wdt/caliptra_isr.h index 6f27a6427..73c86497f 100644 --- a/src/integration/test_suites/smoke_test_cg_wdt/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_cg_wdt/caliptra_isr.h @@ -58,6 +58,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -128,5 +130,8 @@ inline void service_soc_ifc_notif_intr () { inline void service_sha512_acc_error_intr() {printf("ERROR");} inline void service_sha512_acc_notif_intr() {printf("ERROR");} +inline void service_axi_dma_error_intr() {printf("ERROR");} +inline void service_axi_dma_notif_intr() {printf("ERROR");} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_clk_gating/caliptra_isr.h b/src/integration/test_suites/smoke_test_clk_gating/caliptra_isr.h index 2eb00407e..98dc35887 100644 --- a/src/integration/test_suites/smoke_test_clk_gating/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_clk_gating/caliptra_isr.h @@ -58,6 +58,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -145,5 +147,8 @@ inline void service_soc_ifc_notif_intr () { inline void service_sha512_acc_error_intr() {printf("ERROR");} inline void service_sha512_acc_notif_intr() {printf("ERROR");} +inline void service_axi_dma_error_intr() {printf("ERROR");} +inline void service_axi_dma_notif_intr() {printf("ERROR");} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_clk_gating/smoke_test_clk_gating.c b/src/integration/test_suites/smoke_test_clk_gating/smoke_test_clk_gating.c index 114abc7d3..3cfe757be 100644 --- a/src/integration/test_suites/smoke_test_clk_gating/smoke_test_clk_gating.c +++ b/src/integration/test_suites/smoke_test_clk_gating/smoke_test_clk_gating.c @@ -137,9 +137,9 @@ void main() { : /* clobbers: none */); //------------------------------------------------------ - //Wake SOC up for APB tx and core using timer int later + //Wake SOC up for AXI tx and core using timer int later //------------------------------------------------------ - printf("Wake up SOC clk on APB txns and later wake up core using timer interrupt\n"); + printf("Wake up SOC clk on AXI txns and later wake up core using timer interrupt\n"); //Machine intr enable reg (mie) - enable timer int __asm__ volatile ("csrw %0, %1" \ : /* output: none */ \ diff --git a/src/integration/test_suites/smoke_test_datavault_basic/caliptra_isr.h b/src/integration/test_suites/smoke_test_datavault_basic/caliptra_isr.h index 8f5779e04..08c755bad 100644 --- a/src/integration/test_suites/smoke_test_datavault_basic/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_datavault_basic/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {printf("ERROR");} +inline void service_axi_dma_notif_intr() {printf("ERROR");} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_datavault_lock/caliptra_isr.h b/src/integration/test_suites/smoke_test_datavault_lock/caliptra_isr.h index 8f5779e04..08c755bad 100644 --- a/src/integration/test_suites/smoke_test_datavault_lock/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_datavault_lock/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {printf("ERROR");} +inline void service_axi_dma_notif_intr() {printf("ERROR");} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_datavault_mini/caliptra_isr.h b/src/integration/test_suites/smoke_test_datavault_mini/caliptra_isr.h index 8f5779e04..08c755bad 100644 --- a/src/integration/test_suites/smoke_test_datavault_mini/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_datavault_mini/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {printf("ERROR");} +inline void service_axi_dma_notif_intr() {printf("ERROR");} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_datavault_reset/caliptra_isr.h b/src/integration/test_suites/smoke_test_datavault_reset/caliptra_isr.h index 8f5779e04..08c755bad 100644 --- a/src/integration/test_suites/smoke_test_datavault_reset/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_datavault_reset/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {printf("ERROR");} +inline void service_axi_dma_notif_intr() {printf("ERROR");} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_doe_cg/caliptra_isr.h b/src/integration/test_suites/smoke_test_doe_cg/caliptra_isr.h index 8f5779e04..08c755bad 100644 --- a/src/integration/test_suites/smoke_test_doe_cg/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_doe_cg/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {printf("ERROR");} +inline void service_axi_dma_notif_intr() {printf("ERROR");} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_doe_rand/caliptra_isr.h b/src/integration/test_suites/smoke_test_doe_rand/caliptra_isr.h index 8f5779e04..08c755bad 100644 --- a/src/integration/test_suites/smoke_test_doe_rand/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_doe_rand/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {printf("ERROR");} +inline void service_axi_dma_notif_intr() {printf("ERROR");} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_doe_scan/caliptra_isr.h b/src/integration/test_suites/smoke_test_doe_scan/caliptra_isr.h index 8f5779e04..08c755bad 100644 --- a/src/integration/test_suites/smoke_test_doe_scan/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_doe_scan/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {printf("ERROR");} +inline void service_axi_dma_notif_intr() {printf("ERROR");} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_ecc/caliptra_isr.h b/src/integration/test_suites/smoke_test_ecc/caliptra_isr.h index 8f5779e04..08c755bad 100644 --- a/src/integration/test_suites/smoke_test_ecc/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_ecc/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {printf("ERROR");} +inline void service_axi_dma_notif_intr() {printf("ERROR");} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_ecc_errortrigger/caliptra_isr.h b/src/integration/test_suites/smoke_test_ecc_errortrigger/caliptra_isr.h index d5a7efebb..5c6b2135e 100644 --- a/src/integration/test_suites/smoke_test_ecc_errortrigger/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_ecc_errortrigger/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -252,5 +254,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {printf("ERROR");} +inline void service_axi_dma_notif_intr() {printf("ERROR");} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_fw_kv_backtoback_hmac/caliptra_isr.h b/src/integration/test_suites/smoke_test_fw_kv_backtoback_hmac/caliptra_isr.h index 8f5779e04..08c755bad 100644 --- a/src/integration/test_suites/smoke_test_fw_kv_backtoback_hmac/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_fw_kv_backtoback_hmac/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {printf("ERROR");} +inline void service_axi_dma_notif_intr() {printf("ERROR");} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_hmac/caliptra_isr.h b/src/integration/test_suites/smoke_test_hmac/caliptra_isr.h index 8f5779e04..08c755bad 100644 --- a/src/integration/test_suites/smoke_test_hmac/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_hmac/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {printf("ERROR");} +inline void service_axi_dma_notif_intr() {printf("ERROR");} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_hw_config/caliptra_isr.h b/src/integration/test_suites/smoke_test_hw_config/caliptra_isr.h index 7bf456414..073409c01 100644 --- a/src/integration/test_suites/smoke_test_hw_config/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_hw_config/caliptra_isr.h @@ -55,6 +55,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -189,5 +191,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {printf("ERROR");} +inline void service_axi_dma_notif_intr() {printf("ERROR");} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_iccm_reset/caliptra_isr.h b/src/integration/test_suites/smoke_test_iccm_reset/caliptra_isr.h index 8f5779e04..08c755bad 100644 --- a/src/integration/test_suites/smoke_test_iccm_reset/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_iccm_reset/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {printf("ERROR");} +inline void service_axi_dma_notif_intr() {printf("ERROR");} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_kv/caliptra_isr.h b/src/integration/test_suites/smoke_test_kv/caliptra_isr.h index 8f5779e04..08c755bad 100644 --- a/src/integration/test_suites/smoke_test_kv/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_kv/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {printf("ERROR");} +inline void service_axi_dma_notif_intr() {printf("ERROR");} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_kv_cg/caliptra_isr.h b/src/integration/test_suites/smoke_test_kv_cg/caliptra_isr.h index 8f5779e04..08c755bad 100644 --- a/src/integration/test_suites/smoke_test_kv_cg/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_kv_cg/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {printf("ERROR");} +inline void service_axi_dma_notif_intr() {printf("ERROR");} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_kv_crypto_flow/caliptra_isr.h b/src/integration/test_suites/smoke_test_kv_crypto_flow/caliptra_isr.h index 8f5779e04..08c755bad 100644 --- a/src/integration/test_suites/smoke_test_kv_crypto_flow/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_kv_crypto_flow/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {printf("ERROR");} +inline void service_axi_dma_notif_intr() {printf("ERROR");} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_kv_ecc_flow/caliptra_isr.h b/src/integration/test_suites/smoke_test_kv_ecc_flow/caliptra_isr.h index 8f5779e04..08c755bad 100644 --- a/src/integration/test_suites/smoke_test_kv_ecc_flow/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_kv_ecc_flow/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {printf("ERROR");} +inline void service_axi_dma_notif_intr() {printf("ERROR");} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_kv_hmac_flow/caliptra_isr.h b/src/integration/test_suites/smoke_test_kv_hmac_flow/caliptra_isr.h index 8f5779e04..08c755bad 100644 --- a/src/integration/test_suites/smoke_test_kv_hmac_flow/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_kv_hmac_flow/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {printf("ERROR");} +inline void service_axi_dma_notif_intr() {printf("ERROR");} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_kv_securitystate/caliptra_isr.h b/src/integration/test_suites/smoke_test_kv_securitystate/caliptra_isr.h index 8f5779e04..08c755bad 100644 --- a/src/integration/test_suites/smoke_test_kv_securitystate/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_kv_securitystate/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {printf("ERROR");} +inline void service_axi_dma_notif_intr() {printf("ERROR");} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_kv_sha512_flow/caliptra_isr.h b/src/integration/test_suites/smoke_test_kv_sha512_flow/caliptra_isr.h index 8f5779e04..08c755bad 100644 --- a/src/integration/test_suites/smoke_test_kv_sha512_flow/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_kv_sha512_flow/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {printf("ERROR");} +inline void service_axi_dma_notif_intr() {printf("ERROR");} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_kv_uds_reset/caliptra_isr.h b/src/integration/test_suites/smoke_test_kv_uds_reset/caliptra_isr.h index 8f5779e04..08c755bad 100644 --- a/src/integration/test_suites/smoke_test_kv_uds_reset/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_kv_uds_reset/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {printf("ERROR");} +inline void service_axi_dma_notif_intr() {printf("ERROR");} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_mbox_cg/caliptra_isr.h b/src/integration/test_suites/smoke_test_mbox_cg/caliptra_isr.h index 8f5779e04..3b28f5e23 100644 --- a/src/integration/test_suites/smoke_test_mbox_cg/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_mbox_cg/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {return;} +inline void service_axi_dma_notif_intr() {return;} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_mbox_cg/smoke_test_mbox_cg.c b/src/integration/test_suites/smoke_test_mbox_cg/smoke_test_mbox_cg.c index 9697d6e71..82d11cdd9 100644 --- a/src/integration/test_suites/smoke_test_mbox_cg/smoke_test_mbox_cg.c +++ b/src/integration/test_suites/smoke_test_mbox_cg/smoke_test_mbox_cg.c @@ -28,7 +28,7 @@ volatile uint32_t intr_count = 0; enum printf_verbosity verbosity_g = LOW; #endif -#define MBOX_DLEN_VAL 0x00000020 +#define MBOX_DLEN_VAL 0x00000100 volatile caliptra_intr_received_s cptra_intr_rcv = { .doe_error = 0, @@ -53,6 +53,8 @@ volatile caliptra_intr_received_s cptra_intr_rcv = { .soc_ifc_notif = 0, .sha512_acc_error = 0, .sha512_acc_notif = 0, + .axi_dma_error = 0, + .axi_dma_notif = 0, }; void main () { @@ -68,7 +70,63 @@ void main () { 0x44444444, 0x55555555, 0x66666666, - 0x77777777 }; + 0x77777777, + 0x88888888, + 0x99999999, + 0xaaaaaaaa, + 0xbbbbbbbb, + 0xcccccccc, + 0xdddddddd, + 0xeeeeeeee, + 0xffffffff, + 0x00001111, + 0x11112222, + 0x22223333, + 0x33334444, + 0x44445555, + 0x55556666, + 0x66667777, + 0x77778888, + 0x88889999, + 0x9999aaaa, + 0xaaaabbbb, + 0xbbbbcccc, + 0xccccdddd, + 0xddddeeee, + 0xeeeeffff, + 0xffff0000, + 0x00001122, + 0x11112233, + 0x22223344, + 0x33334455, + 0x44445566, + 0x55556677, + 0x66667788, + 0x77778899, + 0x888899aa, + 0x9999aabb, + 0xaaaabbcc, + 0xbbbbccdd, + 0xccccddee, + 0xddddeeff, + 0xeeeeff00, + 0xffff0011, + 0x00001123, + 0x11112234, + 0x22223345, + 0x33334456, + 0x44445567, + 0x55556678, + 0x66667789, + 0x7777889a, + 0x888899ab, + 0x9999aabc, + 0xaaaabbcd, + 0xbbbbccde, + 0xccccddef, + 0xddddeef0, + 0xeeeeff01, + 0xffff0012 }; uint32_t read_data; uint32_t mitb0 = 0x000000F0; @@ -127,12 +185,14 @@ void main () { //check FSM state, should be in EXECUTE_SOC state = (lsu_read_32(CLP_MBOX_CSR_MBOX_STATUS) & MBOX_CSR_MBOX_STATUS_MBOX_FSM_PS_MASK) >> MBOX_CSR_MBOX_STATUS_MBOX_FSM_PS_LOW; - if (state != MBOX_EXECUTE_SOC) { + if (state != MBOX_EXECUTE_SOC && ((lsu_read_32(CLP_MBOX_CSR_MBOX_EXECUTE) & MBOX_CSR_MBOX_EXECUTE_EXECUTE_MASK) == 1)) { VPRINTF(ERROR, "ERROR: mailbox in unexpected state (%x) when expecting MBOX_EXECUTE_SOC (0x%x)\n", state, MBOX_EXECUTE_SOC); SEND_STDOUT_CTRL( 0x1); while(1); + } else if ((lsu_read_32(CLP_MBOX_CSR_MBOX_EXECUTE) & MBOX_CSR_MBOX_EXECUTE_EXECUTE_MASK) == 0) { + VPRINTF(LOW, "FW: Mailbox operation has ended, execute cleared to 0. Ending test with success\n"); } else { - VPRINTF(LOW, "FW: Mailbox in expected state, MBOX_EXECUTE_SOC, ending test with success\n"); + VPRINTF(LOW, "FW: Mailbox in expected state, MBOX_EXECUTE_SOC. Ending test with success\n"); } //-------------------------------------------------------------------------------------------- @@ -140,12 +200,10 @@ void main () { VPRINTF(LOW, "FW: Wait for SoC to reset execute register\n"); while((lsu_read_32(CLP_MBOX_CSR_MBOX_EXECUTE) & MBOX_CSR_MBOX_EXECUTE_EXECUTE_MASK) == 1); - //Force unlock - lsu_write_32(CLP_MBOX_CSR_MBOX_UNLOCK, MBOX_CSR_MBOX_UNLOCK_UNLOCK_MASK); - set_mit0_and_halt_core(mitb0, mie_timer0_ext_int_en); //poll for mbox lock + VPRINTF(LOW, "FW: Acquire lock to send mbox cmd\n"); while((lsu_read_32(CLP_MBOX_CSR_MBOX_LOCK) & MBOX_CSR_MBOX_LOCK_LOCK_MASK) == 1); set_mit0_and_halt_core(mitb0, mie_timer0_ext_int_en); diff --git a/src/integration/test_suites/smoke_test_pcr_signing/caliptra_isr.h b/src/integration/test_suites/smoke_test_pcr_signing/caliptra_isr.h index 8f5779e04..3b28f5e23 100644 --- a/src/integration/test_suites/smoke_test_pcr_signing/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_pcr_signing/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {return;} +inline void service_axi_dma_notif_intr() {return;} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_pcr_zeroize/caliptra_isr.h b/src/integration/test_suites/smoke_test_pcr_zeroize/caliptra_isr.h index 8f5779e04..3b28f5e23 100644 --- a/src/integration/test_suites/smoke_test_pcr_zeroize/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_pcr_zeroize/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {return;} +inline void service_axi_dma_notif_intr() {return;} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_qspi/caliptra_isr.h b/src/integration/test_suites/smoke_test_qspi/caliptra_isr.h index fca82fef0..396bfa18d 100644 --- a/src/integration/test_suites/smoke_test_qspi/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_qspi/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -239,5 +241,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {return;} +inline void service_axi_dma_notif_intr() {return;} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_ras/caliptra_isr.h b/src/integration/test_suites/smoke_test_ras/caliptra_isr.h index a245e2994..926e19966 100644 --- a/src/integration/test_suites/smoke_test_ras/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_ras/caliptra_isr.h @@ -55,6 +55,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; #define RV_EXCEPTION_STRUCT 1 @@ -195,5 +197,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {return;} +inline void service_axi_dma_notif_intr() {return;} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_ras/smoke_test_ras.c b/src/integration/test_suites/smoke_test_ras/smoke_test_ras.c index 629e87e90..43d2f6417 100644 --- a/src/integration/test_suites/smoke_test_ras/smoke_test_ras.c +++ b/src/integration/test_suites/smoke_test_ras/smoke_test_ras.c @@ -209,6 +209,8 @@ volatile caliptra_intr_received_s cptra_intr_rcv = { .soc_ifc_notif = 0, .sha512_acc_error = 0, .sha512_acc_notif = 0, + .axi_dma_notif = 0, + .axi_dma_notif = 0, }; volatile rv_exception_struct_s exc_flag __attribute__((section(".dccm.persistent"))); // WARNING: if DCCM ERROR injection is enabled, writes to this may be corrupted volatile uint32_t boot_count __attribute__((section(".dccm.persistent"))) = 0; diff --git a/src/integration/test_suites/smoke_test_sha256/caliptra_isr.h b/src/integration/test_suites/smoke_test_sha256/caliptra_isr.h index 1b9018b20..205798892 100644 --- a/src/integration/test_suites/smoke_test_sha256/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_sha256/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -251,5 +253,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {return;} +inline void service_axi_dma_notif_intr() {return;} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_sha256_wntz/caliptra_isr.h b/src/integration/test_suites/smoke_test_sha256_wntz/caliptra_isr.h index 257588cea..152f493be 100644 --- a/src/integration/test_suites/smoke_test_sha256_wntz/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_sha256_wntz/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -257,5 +259,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {return;} +inline void service_axi_dma_notif_intr() {return;} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_sha256_wntz_rand/caliptra_isr.h b/src/integration/test_suites/smoke_test_sha256_wntz_rand/caliptra_isr.h index 257588cea..152f493be 100644 --- a/src/integration/test_suites/smoke_test_sha256_wntz_rand/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_sha256_wntz_rand/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -257,5 +259,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {return;} +inline void service_axi_dma_notif_intr() {return;} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_sha512/caliptra_isr.h b/src/integration/test_suites/smoke_test_sha512/caliptra_isr.h index 8f5779e04..3b28f5e23 100644 --- a/src/integration/test_suites/smoke_test_sha512/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_sha512/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {return;} +inline void service_axi_dma_notif_intr() {return;} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_sha_accel/caliptra_isr.h b/src/integration/test_suites/smoke_test_sha_accel/caliptra_isr.h index 841da2048..72d975f9f 100644 --- a/src/integration/test_suites/smoke_test_sha_accel/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_sha_accel/caliptra_isr.h @@ -57,6 +57,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -106,5 +108,8 @@ inline void service_sha512_acc_notif_intr() { sha_intr_status = *reg; } } +inline void service_axi_dma_error_intr() {return;} +inline void service_axi_dma_notif_intr() {return;} -#endif //CALIPTRA_ISR_H \ No newline at end of file + +#endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_sram_ecc/caliptra_isr.h b/src/integration/test_suites/smoke_test_sram_ecc/caliptra_isr.h index 8f5779e04..3b28f5e23 100644 --- a/src/integration/test_suites/smoke_test_sram_ecc/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_sram_ecc/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {return;} +inline void service_axi_dma_notif_intr() {return;} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_trng/caliptra_isr.h b/src/integration/test_suites/smoke_test_trng/caliptra_isr.h index 8f5779e04..3b28f5e23 100644 --- a/src/integration/test_suites/smoke_test_trng/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_trng/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {return;} +inline void service_axi_dma_notif_intr() {return;} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_uart/caliptra_isr.h b/src/integration/test_suites/smoke_test_uart/caliptra_isr.h index fca82fef0..396bfa18d 100644 --- a/src/integration/test_suites/smoke_test_uart/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_uart/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -239,5 +241,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {return;} +inline void service_axi_dma_notif_intr() {return;} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_veer/caliptra_isr.h b/src/integration/test_suites/smoke_test_veer/caliptra_isr.h index 8f5779e04..3b28f5e23 100644 --- a/src/integration/test_suites/smoke_test_veer/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_veer/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {return;} +inline void service_axi_dma_notif_intr() {return;} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_wdt/caliptra_isr.h b/src/integration/test_suites/smoke_test_wdt/caliptra_isr.h index bb60f9fb2..ae98951d1 100644 --- a/src/integration/test_suites/smoke_test_wdt/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_wdt/caliptra_isr.h @@ -58,6 +58,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -104,5 +106,8 @@ inline void service_soc_ifc_notif_intr () {printf("ERROR");} inline void service_sha512_acc_error_intr() {printf("ERROR");} inline void service_sha512_acc_notif_intr() {printf("ERROR");} +inline void service_axi_dma_error_intr() {return;} +inline void service_axi_dma_notif_intr() {return;} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_wdt_rst/caliptra_isr.h b/src/integration/test_suites/smoke_test_wdt_rst/caliptra_isr.h index ddad5ade5..d6d491a63 100644 --- a/src/integration/test_suites/smoke_test_wdt_rst/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_wdt_rst/caliptra_isr.h @@ -58,6 +58,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -104,5 +106,8 @@ inline void service_soc_ifc_notif_intr () {printf("ERROR");} inline void service_sha512_acc_error_intr() {printf("ERROR");} inline void service_sha512_acc_notif_intr() {printf("ERROR");} +inline void service_axi_dma_error_intr() {return;} +inline void service_axi_dma_notif_intr() {return;} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_wdt_rst/smoke_test_wdt_rst.c b/src/integration/test_suites/smoke_test_wdt_rst/smoke_test_wdt_rst.c index f472b3c2f..63bc7ceb8 100644 --- a/src/integration/test_suites/smoke_test_wdt_rst/smoke_test_wdt_rst.c +++ b/src/integration/test_suites/smoke_test_wdt_rst/smoke_test_wdt_rst.c @@ -168,10 +168,14 @@ void main() { SEND_STDOUT_CTRL(0xf1); configure_wdt_cascade(0x200, 0x00, 0xffffffff, 0xffffffff); VPRINTF(LOW, "Cascaded mode with timer2 timeout - NMI - cold rst\n"); + *wdt_timer1_en = 0x0; *wdt_timer2_en = 0x0; - *wdt_timer1_ctrl = 0x1; //restart counter so timer1 can start counting +// *wdt_timer1_ctrl = 0x1; //restart counter so timer1 can start counting set_t2_period(0x00000200, 0x00000000); + + *wdt_timer1_en = 0x1; + *wdt_timer1_ctrl = 0x1; //restart counter so timer1 can start counting VPRINTF(LOW, "Stall until timer1 times out\n"); VPRINTF(LOW, "Stall until timer2 times out\n"); diff --git a/src/integration/test_suites/smoke_test_zeroize_crypto/caliptra_isr.h b/src/integration/test_suites/smoke_test_zeroize_crypto/caliptra_isr.h index 8f5779e04..3b28f5e23 100644 --- a/src/integration/test_suites/smoke_test_zeroize_crypto/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_zeroize_crypto/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {return;} +inline void service_axi_dma_notif_intr() {return;} + #endif //CALIPTRA_ISR_H From 393beeb128c367b8e1945f9c23c750b526391a8e Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Thu, 25 Jul 2024 15:01:41 -0700 Subject: [PATCH 44/58] Update HDL file lists --- src/aes/config/aes.vf | 1 + src/aes/config/aes_pkg.vf | 1 + src/ahb_lite_bus/config/ahb_lite_bus.vf | 1 + src/axi/config/axi_dma.vf | 26 +++++++++++++++++++ src/axi/config/axi_sub.vf | 2 +- src/axi/config/caliptra_axi_sram.vf | 25 ++++++++++++++++++ src/caliptra_prim/config/caliptra_prim.vf | 1 + src/csrng/config/csrng.vf | 1 + src/csrng/config/csrng_tb.vf | 1 + src/datavault/config/datavault.vf | 1 + src/doe/config/doe_cbc_tb.vf | 1 + src/doe/config/doe_core_cbc_tb.vf | 1 + src/doe/config/doe_ctrl.vf | 1 + src/ecc/config/ecc_montgomerymultiplier_tb.vf | 1 + src/ecc/config/ecc_top.vf | 1 + src/ecc/config/ecc_top_tb.vf | 1 + src/ecc/uvmf_ecc/config/uvmf_ecc.vf | 1 + src/entropy_src/config/entropy_src.vf | 1 + src/entropy_src/config/entropy_src_tb.vf | 1 + src/hmac/config/hmac_ctrl.vf | 1 + src/hmac/config/hmac_ctrl_tb.vf | 1 + src/hmac/uvmf_2022/config/uvmf_hmac.vf | 1 + src/hmac_drbg/config/hmac_drbg.vf | 1 + src/hmac_drbg/config/hmac_drbg_tb.vf | 1 + src/integration/config/caliptra_top.vf | 25 +++++++++++------- src/integration/config/caliptra_top_tb.vf | 26 ++++++++++++------- .../config/caliptra_top_trng_tb.vf | 26 ++++++++++++------- .../config/uvmf_caliptra_top.vf | 25 +++++++++++------- .../config/uvmf_caliptra_top_itrng.vf | 25 +++++++++++------- .../config/uvmf_caliptra_top_vip.vf | 16 ++++++++++++ src/keyvault/config/keyvault.vf | 1 + src/keyvault/uvmf_kv/config/uvmf_kv.vf | 1 + src/libs/config/libs.vf | 4 ++- src/pcrvault/config/pcrvault.vf | 1 + src/pcrvault/config/pv_defines_pkg.vf | 1 + src/pcrvault/uvmf_pv/config/uvmf_pv.vf | 1 + .../veer_el2/config/el2_veer_pkg.vf | 3 +++ .../veer_el2/config/el2_veer_wrapper.vf | 3 +++ src/sha256/config/sha256_ctrl.vf | 1 + src/sha256/config/sha256_ctrl_tb.vf | 1 + src/sha256/config/sha256_random_test.vf | 1 + src/sha512/config/sha512_ctrl.vf | 1 + src/sha512/config/sha512_ctrl_32bit_tb.vf | 1 + src/sha512/uvmf_sha512/config/uvmf_sha512.vf | 1 + .../config/sha512_masked_core.vf | 1 + .../config/sha512_masked_core_tb.vf | 1 + src/soc_ifc/config/soc_ifc_pkg.vf | 3 +++ src/soc_ifc/config/soc_ifc_tb.vf | 16 ++++++++++++ src/soc_ifc/config/soc_ifc_top.vf | 16 ++++++++++++ .../uvmf_soc_ifc/config/uvmf_soc_ifc.vf | 16 ++++++++++++ .../uvmf_soc_ifc/config/uvmf_soc_ifc_vip.vf | 16 ++++++++++++ src/spi_host/config/spi_host.vf | 1 + src/spi_host/config/spi_host_tb.vf | 1 + src/spi_host/config/spiflash.vf | 1 + src/uart/config/uart.vf | 1 + src/uart/config/uart_tb.vf | 1 + 56 files changed, 265 insertions(+), 47 deletions(-) create mode 100644 src/axi/config/axi_dma.vf create mode 100644 src/axi/config/caliptra_axi_sram.vf diff --git a/src/aes/config/aes.vf b/src/aes/config/aes.vf index c3f49375b..26a2ec732 100644 --- a/src/aes/config/aes.vf +++ b/src/aes/config/aes.vf @@ -22,6 +22,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_util_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_alert_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_subreg_pkg.sv diff --git a/src/aes/config/aes_pkg.vf b/src/aes/config/aes_pkg.vf index 5c75eb1af..bba1db1d0 100644 --- a/src/aes/config/aes_pkg.vf +++ b/src/aes/config/aes_pkg.vf @@ -22,6 +22,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_util_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_alert_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_subreg_pkg.sv diff --git a/src/ahb_lite_bus/config/ahb_lite_bus.vf b/src/ahb_lite_bus/config/ahb_lite_bus.vf index 86fbbb2e2..cc0a1fb1c 100644 --- a/src/ahb_lite_bus/config/ahb_lite_bus.vf +++ b/src/ahb_lite_bus/config/ahb_lite_bus.vf @@ -13,6 +13,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/libs/rtl/ahb_to_reg_adapter.sv ${CALIPTRA_ROOT}/src/ahb_lite_bus/rtl/ahb_lite_bus_inf.sv ${CALIPTRA_ROOT}/src/ahb_lite_bus/rtl/ahb_lite_address_decoder.sv diff --git a/src/axi/config/axi_dma.vf b/src/axi/config/axi_dma.vf new file mode 100644 index 000000000..48d23fe90 --- /dev/null +++ b/src/axi/config/axi_dma.vf @@ -0,0 +1,26 @@ ++incdir+${CALIPTRA_ROOT}/src/integration/rtl ++incdir+${CALIPTRA_ROOT}/src/libs/rtl ++incdir+${CALIPTRA_ROOT}/src/axi/rtl +${CALIPTRA_ROOT}/src/integration/rtl/config_defines.svh +${CALIPTRA_ROOT}/src/integration/rtl/caliptra_reg_defines.svh +${CALIPTRA_ROOT}/src/libs/rtl/caliptra_sva.svh +${CALIPTRA_ROOT}/src/libs/rtl/caliptra_macros.svh +${CALIPTRA_ROOT}/src/libs/rtl/caliptra_sram.sv +${CALIPTRA_ROOT}/src/libs/rtl/ahb_defines_pkg.sv +${CALIPTRA_ROOT}/src/libs/rtl/caliptra_ahb_srom.sv +${CALIPTRA_ROOT}/src/libs/rtl/apb_slv_sif.sv +${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv +${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv +${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv +${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v +${CALIPTRA_ROOT}/src/axi/rtl/axi_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_if.sv +${CALIPTRA_ROOT}/src/libs/rtl/ahb_to_reg_adapter.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_req_if.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_reg_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_reg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_mgr_rd.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_mgr_wr.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_ctrl.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_top.sv \ No newline at end of file diff --git a/src/axi/config/axi_sub.vf b/src/axi/config/axi_sub.vf index 9f41afd9f..faa014ea1 100644 --- a/src/axi/config/axi_sub.vf +++ b/src/axi/config/axi_sub.vf @@ -13,11 +13,11 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/axi/rtl/axi_pkg.sv ${CALIPTRA_ROOT}/src/axi/rtl/axi_if.sv ${CALIPTRA_ROOT}/src/libs/rtl/ahb_to_reg_adapter.sv ${CALIPTRA_ROOT}/src/axi/rtl/axi_addr.v -${CALIPTRA_ROOT}/src/axi/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_rd.sv ${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_wr.sv ${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_arb.sv diff --git a/src/axi/config/caliptra_axi_sram.vf b/src/axi/config/caliptra_axi_sram.vf new file mode 100644 index 000000000..a2014dab8 --- /dev/null +++ b/src/axi/config/caliptra_axi_sram.vf @@ -0,0 +1,25 @@ ++incdir+${CALIPTRA_ROOT}/src/integration/rtl ++incdir+${CALIPTRA_ROOT}/src/libs/rtl ++incdir+${CALIPTRA_ROOT}/src/axi/rtl +${CALIPTRA_ROOT}/src/integration/rtl/config_defines.svh +${CALIPTRA_ROOT}/src/integration/rtl/caliptra_reg_defines.svh +${CALIPTRA_ROOT}/src/libs/rtl/caliptra_sva.svh +${CALIPTRA_ROOT}/src/libs/rtl/caliptra_macros.svh +${CALIPTRA_ROOT}/src/libs/rtl/caliptra_sram.sv +${CALIPTRA_ROOT}/src/libs/rtl/ahb_defines_pkg.sv +${CALIPTRA_ROOT}/src/libs/rtl/caliptra_ahb_srom.sv +${CALIPTRA_ROOT}/src/libs/rtl/apb_slv_sif.sv +${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv +${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv +${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv +${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v +${CALIPTRA_ROOT}/src/axi/rtl/axi_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_if.sv +${CALIPTRA_ROOT}/src/libs/rtl/ahb_to_reg_adapter.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_addr.v +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_rd.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_wr.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_arb.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub.sv +${CALIPTRA_ROOT}/src/axi/rtl/caliptra_axi_sram.sv \ No newline at end of file diff --git a/src/caliptra_prim/config/caliptra_prim.vf b/src/caliptra_prim/config/caliptra_prim.vf index 6f4015742..d4366d742 100644 --- a/src/caliptra_prim/config/caliptra_prim.vf +++ b/src/caliptra_prim/config/caliptra_prim.vf @@ -15,6 +15,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_util_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_alert_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_subreg_pkg.sv diff --git a/src/csrng/config/csrng.vf b/src/csrng/config/csrng.vf index 1cebd8b9f..8a9a7a9be 100644 --- a/src/csrng/config/csrng.vf +++ b/src/csrng/config/csrng.vf @@ -19,6 +19,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_util_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_alert_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_subreg_pkg.sv diff --git a/src/csrng/config/csrng_tb.vf b/src/csrng/config/csrng_tb.vf index 405dc59a5..641cb6454 100644 --- a/src/csrng/config/csrng_tb.vf +++ b/src/csrng/config/csrng_tb.vf @@ -20,6 +20,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_util_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_alert_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_subreg_pkg.sv diff --git a/src/datavault/config/datavault.vf b/src/datavault/config/datavault.vf index 829d888e8..026b49ec5 100644 --- a/src/datavault/config/datavault.vf +++ b/src/datavault/config/datavault.vf @@ -13,6 +13,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/datavault/rtl/dv_defines_pkg.sv ${CALIPTRA_ROOT}/src/libs/rtl/ahb_to_reg_adapter.sv ${CALIPTRA_ROOT}/src/datavault/rtl/dv_reg_pkg.sv diff --git a/src/doe/config/doe_cbc_tb.vf b/src/doe/config/doe_cbc_tb.vf index 343b1bc45..0a238d415 100644 --- a/src/doe/config/doe_cbc_tb.vf +++ b/src/doe/config/doe_cbc_tb.vf @@ -15,6 +15,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_defines_pkg.sv ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_macros.svh ${CALIPTRA_ROOT}/src/doe/rtl/doe_defines_pkg.sv diff --git a/src/doe/config/doe_core_cbc_tb.vf b/src/doe/config/doe_core_cbc_tb.vf index be61bb115..05c9deda7 100644 --- a/src/doe/config/doe_core_cbc_tb.vf +++ b/src/doe/config/doe_core_cbc_tb.vf @@ -15,6 +15,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_defines_pkg.sv ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_macros.svh ${CALIPTRA_ROOT}/src/doe/rtl/doe_defines_pkg.sv diff --git a/src/doe/config/doe_ctrl.vf b/src/doe/config/doe_ctrl.vf index 09ff0b298..5553848c9 100644 --- a/src/doe/config/doe_ctrl.vf +++ b/src/doe/config/doe_ctrl.vf @@ -14,6 +14,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_defines_pkg.sv ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_macros.svh ${CALIPTRA_ROOT}/src/doe/rtl/doe_defines_pkg.sv diff --git a/src/ecc/config/ecc_montgomerymultiplier_tb.vf b/src/ecc/config/ecc_montgomerymultiplier_tb.vf index 271c1a0ba..b11dbe400 100644 --- a/src/ecc/config/ecc_montgomerymultiplier_tb.vf +++ b/src/ecc/config/ecc_montgomerymultiplier_tb.vf @@ -20,6 +20,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_defines_pkg.sv ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_macros.svh ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_defines_pkg.sv diff --git a/src/ecc/config/ecc_top.vf b/src/ecc/config/ecc_top.vf index 44d17565d..916364624 100644 --- a/src/ecc/config/ecc_top.vf +++ b/src/ecc/config/ecc_top.vf @@ -19,6 +19,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_defines_pkg.sv ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_macros.svh ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_defines_pkg.sv diff --git a/src/ecc/config/ecc_top_tb.vf b/src/ecc/config/ecc_top_tb.vf index 72bef46f6..ddad772d0 100644 --- a/src/ecc/config/ecc_top_tb.vf +++ b/src/ecc/config/ecc_top_tb.vf @@ -21,6 +21,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_defines_pkg.sv ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_macros.svh ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_defines_pkg.sv diff --git a/src/ecc/uvmf_ecc/config/uvmf_ecc.vf b/src/ecc/uvmf_ecc/config/uvmf_ecc.vf index eb2dd5f09..2c7d58768 100644 --- a/src/ecc/uvmf_ecc/config/uvmf_ecc.vf +++ b/src/ecc/uvmf_ecc/config/uvmf_ecc.vf @@ -95,6 +95,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_defines_pkg.sv ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_macros.svh ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_defines_pkg.sv diff --git a/src/entropy_src/config/entropy_src.vf b/src/entropy_src/config/entropy_src.vf index 3f94c116b..497d5bd48 100644 --- a/src/entropy_src/config/entropy_src.vf +++ b/src/entropy_src/config/entropy_src.vf @@ -22,6 +22,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_util_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_alert_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_subreg_pkg.sv diff --git a/src/entropy_src/config/entropy_src_tb.vf b/src/entropy_src/config/entropy_src_tb.vf index 2a3fc4067..789a04464 100644 --- a/src/entropy_src/config/entropy_src_tb.vf +++ b/src/entropy_src/config/entropy_src_tb.vf @@ -22,6 +22,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_util_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_alert_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_subreg_pkg.sv diff --git a/src/hmac/config/hmac_ctrl.vf b/src/hmac/config/hmac_ctrl.vf index 27a9226bc..64734aee8 100644 --- a/src/hmac/config/hmac_ctrl.vf +++ b/src/hmac/config/hmac_ctrl.vf @@ -17,6 +17,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_defines_pkg.sv ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_macros.svh ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_defines_pkg.sv diff --git a/src/hmac/config/hmac_ctrl_tb.vf b/src/hmac/config/hmac_ctrl_tb.vf index fea1a3a02..d08717680 100644 --- a/src/hmac/config/hmac_ctrl_tb.vf +++ b/src/hmac/config/hmac_ctrl_tb.vf @@ -19,6 +19,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_defines_pkg.sv ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_macros.svh ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_defines_pkg.sv diff --git a/src/hmac/uvmf_2022/config/uvmf_hmac.vf b/src/hmac/uvmf_2022/config/uvmf_hmac.vf index ac4642c80..e313ae036 100644 --- a/src/hmac/uvmf_2022/config/uvmf_hmac.vf +++ b/src/hmac/uvmf_2022/config/uvmf_hmac.vf @@ -93,6 +93,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_defines_pkg.sv ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_macros.svh ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_defines_pkg.sv diff --git a/src/hmac_drbg/config/hmac_drbg.vf b/src/hmac_drbg/config/hmac_drbg.vf index cac929ed1..78aaeffa1 100644 --- a/src/hmac_drbg/config/hmac_drbg.vf +++ b/src/hmac_drbg/config/hmac_drbg.vf @@ -18,6 +18,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_defines_pkg.sv ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_macros.svh ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_defines_pkg.sv diff --git a/src/hmac_drbg/config/hmac_drbg_tb.vf b/src/hmac_drbg/config/hmac_drbg_tb.vf index 1111c0aad..4895cf61b 100644 --- a/src/hmac_drbg/config/hmac_drbg_tb.vf +++ b/src/hmac_drbg/config/hmac_drbg_tb.vf @@ -19,6 +19,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_defines_pkg.sv ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_macros.svh ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_defines_pkg.sv diff --git a/src/integration/config/caliptra_top.vf b/src/integration/config/caliptra_top.vf index 9898ac1ef..ef6e63cfb 100644 --- a/src/integration/config/caliptra_top.vf +++ b/src/integration/config/caliptra_top.vf @@ -1,12 +1,12 @@ +incdir+${CALIPTRA_ROOT}/src/integration/rtl +incdir+${CALIPTRA_ROOT}/src/libs/rtl -+incdir+${CALIPTRA_ROOT}/src/axi/rtl +incdir+${CALIPTRA_ROOT}/src/keyvault/rtl +incdir+${CALIPTRA_ROOT}/src/pcrvault/rtl +incdir+${CALIPTRA_ROOT}/src/datavault/rtl +incdir+${CALIPTRA_ROOT}/src/soc_ifc/rtl +incdir+${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl +incdir+${CALIPTRA_ROOT}/src/doe/rtl ++incdir+${CALIPTRA_ROOT}/src/axi/rtl +incdir+${CALIPTRA_ROOT}/src/entropy_src/rtl +incdir+${CALIPTRA_ROOT}/src/caliptra_prim/rtl +incdir+${CALIPTRA_ROOT}/src/lc_ctrl/rtl @@ -37,8 +37,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv -${CALIPTRA_ROOT}/src/axi/rtl/axi_pkg.sv -${CALIPTRA_ROOT}/src/axi/rtl/axi_if.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_defines_pkg.sv ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_macros.svh ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_defines_pkg.sv @@ -51,6 +50,8 @@ ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/el2_pdef.vh ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/include/el2_def.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/common_defines.sv ${CALIPTRA_ROOT}/src/doe/rtl/doe_defines_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_if.sv ${CALIPTRA_ROOT}/src/entropy_src/rtl/entropy_src_main_sm_pkg.sv ${CALIPTRA_ROOT}/src/entropy_src/rtl/entropy_src_ack_sm_pkg.sv ${CALIPTRA_ROOT}/src/entropy_src/rtl/entropy_src_reg_pkg.sv @@ -72,12 +73,6 @@ ${CALIPTRA_ROOT}/src/spi_host/rtl/spi_host_reg_pkg.sv ${CALIPTRA_ROOT}/src/spi_host/rtl/spi_host_cmd_pkg.sv ${CALIPTRA_ROOT}/src/uart/rtl/uart_reg_pkg.sv ${CALIPTRA_ROOT}/src/libs/rtl/ahb_to_reg_adapter.sv -${CALIPTRA_ROOT}/src/axi/rtl/axi_addr.v -${CALIPTRA_ROOT}/src/axi/rtl/skidbuffer.v -${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_rd.sv -${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_wr.sv -${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_arb.sv -${CALIPTRA_ROOT}/src/axi/rtl/axi_sub.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/mbox_csr_pkg.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/sha512_acc_csr_pkg.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/lib/beh_lib.sv @@ -202,6 +197,18 @@ ${CALIPTRA_ROOT}/src/ecc/rtl/ecc_adder.sv ${CALIPTRA_ROOT}/src/datavault/rtl/dv_reg_pkg.sv ${CALIPTRA_ROOT}/src/datavault/rtl/dv_reg.sv ${CALIPTRA_ROOT}/src/datavault/rtl/dv.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_addr.v +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_rd.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_wr.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_arb.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_req_if.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_reg_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_reg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_mgr_rd.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_mgr_wr.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_ctrl.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_top.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/soc_ifc_top.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/soc_ifc_boot_fsm.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/soc_ifc_arb.sv diff --git a/src/integration/config/caliptra_top_tb.vf b/src/integration/config/caliptra_top_tb.vf index e377dea83..a290f45ba 100644 --- a/src/integration/config/caliptra_top_tb.vf +++ b/src/integration/config/caliptra_top_tb.vf @@ -3,11 +3,11 @@ +incdir+${CALIPTRA_ROOT}/src/integration/asserts +incdir+${CALIPTRA_ROOT}/src/integration/rtl +incdir+${CALIPTRA_ROOT}/src/libs/rtl ++incdir+${CALIPTRA_ROOT}/src/axi/rtl +incdir+${CALIPTRA_ROOT}/src/caliptra_prim/rtl +incdir+${CALIPTRA_ROOT}/src/lc_ctrl/rtl +incdir+${CALIPTRA_ROOT}/src/spi_host/rtl +incdir+${CALIPTRA_ROOT}/src/spi_host/tb -+incdir+${CALIPTRA_ROOT}/src/axi/rtl +incdir+${CALIPTRA_ROOT}/src/pcrvault/rtl +incdir+${CALIPTRA_ROOT}/src/datavault/rtl +incdir+${CALIPTRA_ROOT}/src/soc_ifc/rtl @@ -52,6 +52,9 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v +${CALIPTRA_ROOT}/src/axi/rtl/axi_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_if.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_util_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_alert_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_subreg_pkg.sv @@ -66,8 +69,6 @@ ${CALIPTRA_ROOT}/src/spi_host/rtl/spi_host_reg_pkg.sv ${CALIPTRA_ROOT}/src/spi_host/rtl/spi_host_cmd_pkg.sv ${CALIPTRA_ROOT}/src/spi_host/tb/spi_device_pkg.sv ${CALIPTRA_ROOT}/src/spi_host/tb/spiflash.sv -${CALIPTRA_ROOT}/src/axi/rtl/axi_pkg.sv -${CALIPTRA_ROOT}/src/axi/rtl/axi_if.sv ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_defines_pkg.sv ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_macros.svh ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_gen_hash.sv @@ -110,6 +111,12 @@ ${CALIPTRA_ROOT}/src/integration/coverage/caliptra_top_cov_bind.sv ${CALIPTRA_ROOT}/src/integration/test_suites/libs/jtagdpi/jtagdpi.sv ${CALIPTRA_ROOT}/src/integration/tb/caliptra_top_tb.sv ${CALIPTRA_ROOT}/src/libs/rtl/ahb_to_reg_adapter.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_addr.v +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_rd.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_wr.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_arb.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub.sv +${CALIPTRA_ROOT}/src/axi/rtl/caliptra_axi_sram.sv ${CALIPTRA_ROOT}/src/caliptra_prim_generic/rtl/caliptra_prim_generic_flop_en.sv ${CALIPTRA_ROOT}/src/caliptra_prim_generic/rtl/caliptra_prim_generic_flop.sv ${CALIPTRA_ROOT}/src/caliptra_prim_generic/rtl/caliptra_prim_generic_buf.sv @@ -153,12 +160,6 @@ ${CALIPTRA_ROOT}/src/spi_host/rtl/spi_host_data_fifos.sv ${CALIPTRA_ROOT}/src/spi_host/rtl/spi_host_fsm.sv ${CALIPTRA_ROOT}/src/spi_host/rtl/spi_host_reg_top.sv ${CALIPTRA_ROOT}/src/spi_host/rtl/spi_host_shift_register.sv -${CALIPTRA_ROOT}/src/axi/rtl/axi_addr.v -${CALIPTRA_ROOT}/src/axi/rtl/skidbuffer.v -${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_rd.sv -${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_wr.sv -${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_arb.sv -${CALIPTRA_ROOT}/src/axi/rtl/axi_sub.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/mbox_csr_pkg.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/sha512_acc_csr_pkg.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/lib/beh_lib.sv @@ -283,6 +284,13 @@ ${CALIPTRA_ROOT}/src/ecc/rtl/ecc_adder.sv ${CALIPTRA_ROOT}/src/datavault/rtl/dv_reg_pkg.sv ${CALIPTRA_ROOT}/src/datavault/rtl/dv_reg.sv ${CALIPTRA_ROOT}/src/datavault/rtl/dv.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_req_if.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_reg_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_reg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_mgr_rd.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_mgr_wr.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_ctrl.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_top.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/soc_ifc_top.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/soc_ifc_boot_fsm.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/soc_ifc_arb.sv diff --git a/src/integration/config/caliptra_top_trng_tb.vf b/src/integration/config/caliptra_top_trng_tb.vf index 2e89f67fb..a290f45ba 100644 --- a/src/integration/config/caliptra_top_trng_tb.vf +++ b/src/integration/config/caliptra_top_trng_tb.vf @@ -3,6 +3,7 @@ +incdir+${CALIPTRA_ROOT}/src/integration/asserts +incdir+${CALIPTRA_ROOT}/src/integration/rtl +incdir+${CALIPTRA_ROOT}/src/libs/rtl ++incdir+${CALIPTRA_ROOT}/src/axi/rtl +incdir+${CALIPTRA_ROOT}/src/caliptra_prim/rtl +incdir+${CALIPTRA_ROOT}/src/lc_ctrl/rtl +incdir+${CALIPTRA_ROOT}/src/spi_host/rtl @@ -25,7 +26,6 @@ +incdir+${CALIPTRA_ROOT}/src/integration/tb +incdir+${CALIPTRA_ROOT}/src/integration/coverage +incdir+${CALIPTRA_ROOT}/src/caliptra_prim_generic/rtl -+incdir+${CALIPTRA_ROOT}/src/axi/rtl +incdir+${CALIPTRA_ROOT}/src/ahb_lite_bus/rtl +incdir+${CALIPTRA_ROOT}/src/sha512/rtl +incdir+${CALIPTRA_ROOT}/src/sha256/rtl @@ -52,6 +52,9 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v +${CALIPTRA_ROOT}/src/axi/rtl/axi_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_if.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_util_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_alert_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_subreg_pkg.sv @@ -108,6 +111,12 @@ ${CALIPTRA_ROOT}/src/integration/coverage/caliptra_top_cov_bind.sv ${CALIPTRA_ROOT}/src/integration/test_suites/libs/jtagdpi/jtagdpi.sv ${CALIPTRA_ROOT}/src/integration/tb/caliptra_top_tb.sv ${CALIPTRA_ROOT}/src/libs/rtl/ahb_to_reg_adapter.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_addr.v +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_rd.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_wr.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_arb.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub.sv +${CALIPTRA_ROOT}/src/axi/rtl/caliptra_axi_sram.sv ${CALIPTRA_ROOT}/src/caliptra_prim_generic/rtl/caliptra_prim_generic_flop_en.sv ${CALIPTRA_ROOT}/src/caliptra_prim_generic/rtl/caliptra_prim_generic_flop.sv ${CALIPTRA_ROOT}/src/caliptra_prim_generic/rtl/caliptra_prim_generic_buf.sv @@ -151,14 +160,6 @@ ${CALIPTRA_ROOT}/src/spi_host/rtl/spi_host_data_fifos.sv ${CALIPTRA_ROOT}/src/spi_host/rtl/spi_host_fsm.sv ${CALIPTRA_ROOT}/src/spi_host/rtl/spi_host_reg_top.sv ${CALIPTRA_ROOT}/src/spi_host/rtl/spi_host_shift_register.sv -${CALIPTRA_ROOT}/src/axi/rtl/axi_pkg.sv -${CALIPTRA_ROOT}/src/axi/rtl/axi_if.sv -${CALIPTRA_ROOT}/src/axi/rtl/axi_addr.v -${CALIPTRA_ROOT}/src/axi/rtl/skidbuffer.v -${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_rd.sv -${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_wr.sv -${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_arb.sv -${CALIPTRA_ROOT}/src/axi/rtl/axi_sub.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/mbox_csr_pkg.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/sha512_acc_csr_pkg.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/lib/beh_lib.sv @@ -283,6 +284,13 @@ ${CALIPTRA_ROOT}/src/ecc/rtl/ecc_adder.sv ${CALIPTRA_ROOT}/src/datavault/rtl/dv_reg_pkg.sv ${CALIPTRA_ROOT}/src/datavault/rtl/dv_reg.sv ${CALIPTRA_ROOT}/src/datavault/rtl/dv.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_req_if.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_reg_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_reg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_mgr_rd.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_mgr_wr.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_ctrl.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_top.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/soc_ifc_top.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/soc_ifc_boot_fsm.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/soc_ifc_arb.sv diff --git a/src/integration/uvmf_caliptra_top/config/uvmf_caliptra_top.vf b/src/integration/uvmf_caliptra_top/config/uvmf_caliptra_top.vf index 6607070d5..f31ffddc7 100644 --- a/src/integration/uvmf_caliptra_top/config/uvmf_caliptra_top.vf +++ b/src/integration/uvmf_caliptra_top/config/uvmf_caliptra_top.vf @@ -22,6 +22,7 @@ +incdir+${CALIPTRA_ROOT}/src/soc_ifc/rtl +incdir+${CALIPTRA_ROOT}/src/integration/rtl +incdir+${CALIPTRA_ROOT}/src/libs/rtl ++incdir+${CALIPTRA_ROOT}/src/axi/rtl +incdir+${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl +incdir+${CALIPTRA_ROOT}/src/keyvault/rtl +incdir+${CALIPTRA_ROOT}/src/pcrvault/rtl @@ -40,7 +41,6 @@ +incdir+${CALIPTRA_ROOT}/src/integration/uvmf_caliptra_top/uvmf_template_output/verification_ip/environment_packages/caliptra_top_env_pkg +incdir+${CALIPTRA_ROOT}/src/doe/rtl +incdir+${CALIPTRA_ROOT}/src/integration/asserts -+incdir+${CALIPTRA_ROOT}/src/axi/rtl +incdir+${CALIPTRA_ROOT}/src/datavault/rtl +incdir+${CALIPTRA_ROOT}/src/entropy_src/rtl +incdir+${CALIPTRA_ROOT}/src/caliptra_prim/rtl @@ -131,6 +131,9 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v +${CALIPTRA_ROOT}/src/axi/rtl/axi_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_if.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/soc_ifc_reg_pkg.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/el2_pdef.vh ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/include/el2_def.sv @@ -170,8 +173,6 @@ ${CALIPTRA_ROOT}/src/soc_ifc/uvmf_soc_ifc/uvmf_template_output/verification_ip/e ${CALIPTRA_ROOT}/src/integration/uvmf_caliptra_top/uvmf_template_output/verification_ip/environment_packages/caliptra_top_env_pkg/caliptra_top_env_pkg.sv ${CALIPTRA_ROOT}/src/doe/rtl/doe_defines_pkg.sv ${CALIPTRA_ROOT}/src/integration/asserts/caliptra_top_sva.sv -${CALIPTRA_ROOT}/src/axi/rtl/axi_pkg.sv -${CALIPTRA_ROOT}/src/axi/rtl/axi_if.sv ${CALIPTRA_ROOT}/src/datavault/rtl/dv_defines_pkg.sv ${CALIPTRA_ROOT}/src/entropy_src/rtl/entropy_src_main_sm_pkg.sv ${CALIPTRA_ROOT}/src/entropy_src/rtl/entropy_src_ack_sm_pkg.sv @@ -221,6 +222,18 @@ ${CALIPTRA_ROOT}/src/integration/uvmf_caliptra_top/../coverage/caliptra_top_cov_ ${CALIPTRA_ROOT}/src/integration/uvmf_caliptra_top/uvmf_template_output/project_benches/caliptra_top/tb/testbench/hdl_top.sv ${CALIPTRA_ROOT}/src/integration/uvmf_caliptra_top/uvmf_template_output/project_benches/caliptra_top/tb/testbench/hvl_top.sv ${CALIPTRA_ROOT}/src/libs/rtl/ahb_to_reg_adapter.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_addr.v +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_rd.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_wr.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_arb.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_req_if.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_reg_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_reg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_mgr_rd.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_mgr_wr.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_ctrl.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_top.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/mbox_csr_pkg.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/sha512_acc_csr_pkg.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/lib/beh_lib.sv @@ -251,12 +264,6 @@ ${CALIPTRA_ROOT}/src/soc_ifc/rtl/mbox_csr.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/sha512_acc_top.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/sha512_acc_csr.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/wdt.sv -${CALIPTRA_ROOT}/src/axi/rtl/axi_addr.v -${CALIPTRA_ROOT}/src/axi/rtl/skidbuffer.v -${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_rd.sv -${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_wr.sv -${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_arb.sv -${CALIPTRA_ROOT}/src/axi/rtl/axi_sub.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/el2_mem.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/el2_dma_ctrl.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/el2_pic_ctrl.sv diff --git a/src/integration/uvmf_caliptra_top/config/uvmf_caliptra_top_itrng.vf b/src/integration/uvmf_caliptra_top/config/uvmf_caliptra_top_itrng.vf index 2993d8389..f31ffddc7 100644 --- a/src/integration/uvmf_caliptra_top/config/uvmf_caliptra_top_itrng.vf +++ b/src/integration/uvmf_caliptra_top/config/uvmf_caliptra_top_itrng.vf @@ -22,6 +22,7 @@ +incdir+${CALIPTRA_ROOT}/src/soc_ifc/rtl +incdir+${CALIPTRA_ROOT}/src/integration/rtl +incdir+${CALIPTRA_ROOT}/src/libs/rtl ++incdir+${CALIPTRA_ROOT}/src/axi/rtl +incdir+${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl +incdir+${CALIPTRA_ROOT}/src/keyvault/rtl +incdir+${CALIPTRA_ROOT}/src/pcrvault/rtl @@ -61,7 +62,6 @@ +incdir+${CALIPTRA_ROOT}/src/integration/uvmf_caliptra_top/uvmf_template_output/project_benches/caliptra_top/tb/testbench +incdir+${CALIPTRA_ROOT}/src/integration/uvmf_caliptra_top/../tb +incdir+${CALIPTRA_ROOT}/src/sha512/rtl -+incdir+${CALIPTRA_ROOT}/src/axi/rtl +incdir+${CALIPTRA_ROOT}/src/ahb_lite_bus/rtl +incdir+${CALIPTRA_ROOT}/src/sha256/rtl +incdir+${CALIPTRA_ROOT}/src/sha512_masked/rtl @@ -131,6 +131,9 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v +${CALIPTRA_ROOT}/src/axi/rtl/axi_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_if.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/soc_ifc_reg_pkg.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/el2_pdef.vh ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/include/el2_def.sv @@ -219,6 +222,18 @@ ${CALIPTRA_ROOT}/src/integration/uvmf_caliptra_top/../coverage/caliptra_top_cov_ ${CALIPTRA_ROOT}/src/integration/uvmf_caliptra_top/uvmf_template_output/project_benches/caliptra_top/tb/testbench/hdl_top.sv ${CALIPTRA_ROOT}/src/integration/uvmf_caliptra_top/uvmf_template_output/project_benches/caliptra_top/tb/testbench/hvl_top.sv ${CALIPTRA_ROOT}/src/libs/rtl/ahb_to_reg_adapter.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_addr.v +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_rd.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_wr.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_arb.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_req_if.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_reg_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_reg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_mgr_rd.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_mgr_wr.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_ctrl.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_top.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/mbox_csr_pkg.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/sha512_acc_csr_pkg.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/lib/beh_lib.sv @@ -249,14 +264,6 @@ ${CALIPTRA_ROOT}/src/soc_ifc/rtl/mbox_csr.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/sha512_acc_top.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/sha512_acc_csr.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/wdt.sv -${CALIPTRA_ROOT}/src/axi/rtl/axi_pkg.sv -${CALIPTRA_ROOT}/src/axi/rtl/axi_if.sv -${CALIPTRA_ROOT}/src/axi/rtl/axi_addr.v -${CALIPTRA_ROOT}/src/axi/rtl/skidbuffer.v -${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_rd.sv -${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_wr.sv -${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_arb.sv -${CALIPTRA_ROOT}/src/axi/rtl/axi_sub.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/el2_mem.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/el2_dma_ctrl.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/el2_pic_ctrl.sv diff --git a/src/integration/uvmf_caliptra_top/config/uvmf_caliptra_top_vip.vf b/src/integration/uvmf_caliptra_top/config/uvmf_caliptra_top_vip.vf index 28e7f44d0..0d2e23fc3 100644 --- a/src/integration/uvmf_caliptra_top/config/uvmf_caliptra_top_vip.vf +++ b/src/integration/uvmf_caliptra_top/config/uvmf_caliptra_top_vip.vf @@ -22,6 +22,7 @@ +incdir+${CALIPTRA_ROOT}/src/soc_ifc/rtl +incdir+${CALIPTRA_ROOT}/src/integration/rtl +incdir+${CALIPTRA_ROOT}/src/libs/rtl ++incdir+${CALIPTRA_ROOT}/src/axi/rtl +incdir+${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl +incdir+${CALIPTRA_ROOT}/src/keyvault/rtl +incdir+${CALIPTRA_ROOT}/src/pcrvault/rtl @@ -98,6 +99,9 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v +${CALIPTRA_ROOT}/src/axi/rtl/axi_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_if.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/soc_ifc_reg_pkg.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/el2_pdef.vh ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/include/el2_def.sv @@ -136,6 +140,18 @@ ${CALIPTRA_ROOT}/src/soc_ifc/uvmf_soc_ifc/uvmf_template_output/verification_ip/e ${CALIPTRA_ROOT}/src/soc_ifc/uvmf_soc_ifc/uvmf_template_output/verification_ip/environment_packages/soc_ifc_env_pkg/soc_ifc_env_pkg.sv ${CALIPTRA_ROOT}/src/integration/uvmf_caliptra_top/uvmf_template_output/verification_ip/environment_packages/caliptra_top_env_pkg/caliptra_top_env_pkg.sv ${CALIPTRA_ROOT}/src/libs/rtl/ahb_to_reg_adapter.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_addr.v +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_rd.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_wr.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_arb.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_req_if.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_reg_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_reg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_mgr_rd.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_mgr_wr.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_ctrl.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_top.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/mbox_csr_pkg.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/sha512_acc_csr_pkg.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/lib/beh_lib.sv diff --git a/src/keyvault/config/keyvault.vf b/src/keyvault/config/keyvault.vf index 40ef426e3..f0813a324 100644 --- a/src/keyvault/config/keyvault.vf +++ b/src/keyvault/config/keyvault.vf @@ -13,6 +13,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_defines_pkg.sv ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_macros.svh ${CALIPTRA_ROOT}/src/libs/rtl/ahb_to_reg_adapter.sv diff --git a/src/keyvault/uvmf_kv/config/uvmf_kv.vf b/src/keyvault/uvmf_kv/config/uvmf_kv.vf index 5d4fe2ce3..85431e7a5 100644 --- a/src/keyvault/uvmf_kv/config/uvmf_kv.vf +++ b/src/keyvault/uvmf_kv/config/uvmf_kv.vf @@ -90,6 +90,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_defines_pkg.sv ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_macros.svh ${CALIPTRA_ROOT}/src/keyvault/coverage/keyvault_cov_if.sv diff --git a/src/libs/config/libs.vf b/src/libs/config/libs.vf index 7c0d4c77b..804be55ba 100644 --- a/src/libs/config/libs.vf +++ b/src/libs/config/libs.vf @@ -12,4 +12,6 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv -${CALIPTRA_ROOT}/src/libs/rtl/ahb_to_reg_adapter.sv \ No newline at end of file +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v +${CALIPTRA_ROOT}/src/libs/rtl/ahb_to_reg_adapter.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v \ No newline at end of file diff --git a/src/pcrvault/config/pcrvault.vf b/src/pcrvault/config/pcrvault.vf index 5e59b1772..45fb5e4c9 100644 --- a/src/pcrvault/config/pcrvault.vf +++ b/src/pcrvault/config/pcrvault.vf @@ -13,6 +13,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_defines_pkg.sv ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_macros.svh ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_gen_hash.sv diff --git a/src/pcrvault/config/pv_defines_pkg.vf b/src/pcrvault/config/pv_defines_pkg.vf index ab7aa0fd0..2ef10a35c 100644 --- a/src/pcrvault/config/pv_defines_pkg.vf +++ b/src/pcrvault/config/pv_defines_pkg.vf @@ -13,6 +13,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_defines_pkg.sv ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_macros.svh ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_gen_hash.sv diff --git a/src/pcrvault/uvmf_pv/config/uvmf_pv.vf b/src/pcrvault/uvmf_pv/config/uvmf_pv.vf index 4092d085e..9148efc02 100644 --- a/src/pcrvault/uvmf_pv/config/uvmf_pv.vf +++ b/src/pcrvault/uvmf_pv/config/uvmf_pv.vf @@ -90,6 +90,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_defines_pkg.sv ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_macros.svh ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_gen_hash.sv diff --git a/src/riscv_core/veer_el2/config/el2_veer_pkg.vf b/src/riscv_core/veer_el2/config/el2_veer_pkg.vf index 3e3824be2..54545ff6b 100644 --- a/src/riscv_core/veer_el2/config/el2_veer_pkg.vf +++ b/src/riscv_core/veer_el2/config/el2_veer_pkg.vf @@ -1,5 +1,8 @@ ++incdir+${CALIPTRA_ROOT}/src/integration/rtl +incdir+${CALIPTRA_ROOT}/src/soc_ifc/rtl +incdir+${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl +${CALIPTRA_ROOT}/src/integration/rtl/config_defines.svh +${CALIPTRA_ROOT}/src/integration/rtl/caliptra_reg_defines.svh ${CALIPTRA_ROOT}/src/soc_ifc/rtl/soc_ifc_pkg.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/soc_ifc_reg_pkg.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/el2_pdef.vh diff --git a/src/riscv_core/veer_el2/config/el2_veer_wrapper.vf b/src/riscv_core/veer_el2/config/el2_veer_wrapper.vf index da326a7e7..8a16ea3fc 100644 --- a/src/riscv_core/veer_el2/config/el2_veer_wrapper.vf +++ b/src/riscv_core/veer_el2/config/el2_veer_wrapper.vf @@ -1,5 +1,8 @@ ++incdir+${CALIPTRA_ROOT}/src/integration/rtl +incdir+${CALIPTRA_ROOT}/src/soc_ifc/rtl +incdir+${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl +${CALIPTRA_ROOT}/src/integration/rtl/config_defines.svh +${CALIPTRA_ROOT}/src/integration/rtl/caliptra_reg_defines.svh ${CALIPTRA_ROOT}/src/soc_ifc/rtl/soc_ifc_pkg.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/soc_ifc_reg_pkg.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/el2_pdef.vh diff --git a/src/sha256/config/sha256_ctrl.vf b/src/sha256/config/sha256_ctrl.vf index 1a53cf1eb..ec68eefe7 100644 --- a/src/sha256/config/sha256_ctrl.vf +++ b/src/sha256/config/sha256_ctrl.vf @@ -13,6 +13,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/libs/rtl/ahb_to_reg_adapter.sv ${CALIPTRA_ROOT}/src/sha256/rtl/sha256_reg_pkg.sv ${CALIPTRA_ROOT}/src/sha256/rtl/sha256_params_pkg.sv diff --git a/src/sha256/config/sha256_ctrl_tb.vf b/src/sha256/config/sha256_ctrl_tb.vf index 7889eaad5..af237cc55 100644 --- a/src/sha256/config/sha256_ctrl_tb.vf +++ b/src/sha256/config/sha256_ctrl_tb.vf @@ -15,6 +15,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/sha256/coverage/sha256_ctrl_cov_if.sv ${CALIPTRA_ROOT}/src/sha256/coverage/sha256_ctrl_cov_bind.sv ${CALIPTRA_ROOT}/src/sha256/tb/sha256_ctrl_tb.sv diff --git a/src/sha256/config/sha256_random_test.vf b/src/sha256/config/sha256_random_test.vf index 1d5ed66c8..328000b42 100644 --- a/src/sha256/config/sha256_random_test.vf +++ b/src/sha256/config/sha256_random_test.vf @@ -15,6 +15,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/sha256/coverage/sha256_ctrl_cov_if.sv ${CALIPTRA_ROOT}/src/sha256/coverage/sha256_ctrl_cov_bind.sv ${CALIPTRA_ROOT}/src/sha256/tb/sha256_random_test.sv diff --git a/src/sha512/config/sha512_ctrl.vf b/src/sha512/config/sha512_ctrl.vf index 71a30643d..5f2164ec5 100644 --- a/src/sha512/config/sha512_ctrl.vf +++ b/src/sha512/config/sha512_ctrl.vf @@ -15,6 +15,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_defines_pkg.sv ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_macros.svh ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_defines_pkg.sv diff --git a/src/sha512/config/sha512_ctrl_32bit_tb.vf b/src/sha512/config/sha512_ctrl_32bit_tb.vf index 621c83d2e..f5cd049cf 100644 --- a/src/sha512/config/sha512_ctrl_32bit_tb.vf +++ b/src/sha512/config/sha512_ctrl_32bit_tb.vf @@ -17,6 +17,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_defines_pkg.sv ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_macros.svh ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_defines_pkg.sv diff --git a/src/sha512/uvmf_sha512/config/uvmf_sha512.vf b/src/sha512/uvmf_sha512/config/uvmf_sha512.vf index 595312dde..9f8f41981 100644 --- a/src/sha512/uvmf_sha512/config/uvmf_sha512.vf +++ b/src/sha512/uvmf_sha512/config/uvmf_sha512.vf @@ -91,6 +91,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_defines_pkg.sv ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_macros.svh ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_defines_pkg.sv diff --git a/src/sha512_masked/config/sha512_masked_core.vf b/src/sha512_masked/config/sha512_masked_core.vf index 5df569161..1dd14c93d 100644 --- a/src/sha512_masked/config/sha512_masked_core.vf +++ b/src/sha512_masked/config/sha512_masked_core.vf @@ -16,6 +16,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_defines_pkg.sv ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_macros.svh ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_defines_pkg.sv diff --git a/src/sha512_masked/config/sha512_masked_core_tb.vf b/src/sha512_masked/config/sha512_masked_core_tb.vf index fbbbffe17..6e5154778 100644 --- a/src/sha512_masked/config/sha512_masked_core_tb.vf +++ b/src/sha512_masked/config/sha512_masked_core_tb.vf @@ -17,6 +17,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_defines_pkg.sv ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_macros.svh ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_defines_pkg.sv diff --git a/src/soc_ifc/config/soc_ifc_pkg.vf b/src/soc_ifc/config/soc_ifc_pkg.vf index 0ba5a33ba..ebb323b9f 100644 --- a/src/soc_ifc/config/soc_ifc_pkg.vf +++ b/src/soc_ifc/config/soc_ifc_pkg.vf @@ -1,4 +1,7 @@ ++incdir+${CALIPTRA_ROOT}/src/integration/rtl +incdir+${CALIPTRA_ROOT}/src/soc_ifc/rtl +${CALIPTRA_ROOT}/src/integration/rtl/config_defines.svh +${CALIPTRA_ROOT}/src/integration/rtl/caliptra_reg_defines.svh ${CALIPTRA_ROOT}/src/soc_ifc/rtl/soc_ifc_pkg.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/soc_ifc_reg_pkg.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/mbox_csr_pkg.sv diff --git a/src/soc_ifc/config/soc_ifc_tb.vf b/src/soc_ifc/config/soc_ifc_tb.vf index 55dbfb700..5f5f38c2f 100644 --- a/src/soc_ifc/config/soc_ifc_tb.vf +++ b/src/soc_ifc/config/soc_ifc_tb.vf @@ -1,5 +1,6 @@ +incdir+${CALIPTRA_ROOT}/src/integration/rtl +incdir+${CALIPTRA_ROOT}/src/libs/rtl ++incdir+${CALIPTRA_ROOT}/src/axi/rtl +incdir+${CALIPTRA_ROOT}/src/soc_ifc/rtl +incdir+${CALIPTRA_ROOT}/src/soc_ifc/coverage +incdir+${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl @@ -19,6 +20,9 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v +${CALIPTRA_ROOT}/src/axi/rtl/axi_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_if.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/soc_ifc_pkg.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/soc_ifc_reg_pkg.sv ${CALIPTRA_ROOT}/src/soc_ifc/coverage/soc_ifc_cov_if.sv @@ -36,6 +40,18 @@ ${CALIPTRA_ROOT}/src/soc_ifc/tb/soc_ifc_tb.sv ${CALIPTRA_ROOT}/src/libs/rtl/ahb_to_reg_adapter.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/mbox_csr_pkg.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/sha512_acc_csr_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_addr.v +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_rd.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_wr.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_arb.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_req_if.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_reg_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_reg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_mgr_rd.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_mgr_wr.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_ctrl.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_top.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/lib/beh_lib.sv ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_reg_pkg.sv ${CALIPTRA_ROOT}/src/keyvault/rtl/kv_reg.sv diff --git a/src/soc_ifc/config/soc_ifc_top.vf b/src/soc_ifc/config/soc_ifc_top.vf index 4e1965ce5..07341775c 100644 --- a/src/soc_ifc/config/soc_ifc_top.vf +++ b/src/soc_ifc/config/soc_ifc_top.vf @@ -1,5 +1,6 @@ +incdir+${CALIPTRA_ROOT}/src/integration/rtl +incdir+${CALIPTRA_ROOT}/src/libs/rtl ++incdir+${CALIPTRA_ROOT}/src/axi/rtl +incdir+${CALIPTRA_ROOT}/src/soc_ifc/rtl +incdir+${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl +incdir+${CALIPTRA_ROOT}/src/keyvault/rtl @@ -17,6 +18,9 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v +${CALIPTRA_ROOT}/src/axi/rtl/axi_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_if.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/soc_ifc_pkg.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/soc_ifc_reg_pkg.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/el2_pdef.vh @@ -28,6 +32,18 @@ ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_defines_pkg.sv ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_macros.svh ${CALIPTRA_ROOT}/src/pcrvault/rtl/pv_gen_hash.sv ${CALIPTRA_ROOT}/src/libs/rtl/ahb_to_reg_adapter.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_addr.v +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_rd.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_wr.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_arb.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_req_if.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_reg_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_reg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_mgr_rd.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_mgr_wr.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_ctrl.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_top.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/mbox_csr_pkg.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/sha512_acc_csr_pkg.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/lib/beh_lib.sv diff --git a/src/soc_ifc/uvmf_soc_ifc/config/uvmf_soc_ifc.vf b/src/soc_ifc/uvmf_soc_ifc/config/uvmf_soc_ifc.vf index 46168ac64..82421c572 100644 --- a/src/soc_ifc/uvmf_soc_ifc/config/uvmf_soc_ifc.vf +++ b/src/soc_ifc/uvmf_soc_ifc/config/uvmf_soc_ifc.vf @@ -22,6 +22,7 @@ +incdir+${CALIPTRA_ROOT}/src/soc_ifc/rtl +incdir+${CALIPTRA_ROOT}/src/integration/rtl +incdir+${CALIPTRA_ROOT}/src/libs/rtl ++incdir+${CALIPTRA_ROOT}/src/axi/rtl +incdir+${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl +incdir+${CALIPTRA_ROOT}/src/keyvault/rtl +incdir+${CALIPTRA_ROOT}/src/pcrvault/rtl @@ -102,6 +103,9 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v +${CALIPTRA_ROOT}/src/axi/rtl/axi_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_if.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/soc_ifc_reg_pkg.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/el2_pdef.vh ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/include/el2_def.sv @@ -146,6 +150,18 @@ ${CALIPTRA_ROOT}/src/soc_ifc/uvmf_soc_ifc/uvmf_template_output/project_benches/s ${CALIPTRA_ROOT}/src/soc_ifc/uvmf_soc_ifc/uvmf_template_output/project_benches/soc_ifc/tb/testbench/hdl_top.sv ${CALIPTRA_ROOT}/src/soc_ifc/uvmf_soc_ifc/uvmf_template_output/project_benches/soc_ifc/tb/testbench/hvl_top.sv ${CALIPTRA_ROOT}/src/libs/rtl/ahb_to_reg_adapter.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_addr.v +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_rd.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_wr.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_arb.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_req_if.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_reg_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_reg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_mgr_rd.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_mgr_wr.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_ctrl.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_top.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/mbox_csr_pkg.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/sha512_acc_csr_pkg.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/lib/beh_lib.sv diff --git a/src/soc_ifc/uvmf_soc_ifc/config/uvmf_soc_ifc_vip.vf b/src/soc_ifc/uvmf_soc_ifc/config/uvmf_soc_ifc_vip.vf index 8f85c734a..86d854816 100644 --- a/src/soc_ifc/uvmf_soc_ifc/config/uvmf_soc_ifc_vip.vf +++ b/src/soc_ifc/uvmf_soc_ifc/config/uvmf_soc_ifc_vip.vf @@ -22,6 +22,7 @@ +incdir+${CALIPTRA_ROOT}/src/soc_ifc/rtl +incdir+${CALIPTRA_ROOT}/src/integration/rtl +incdir+${CALIPTRA_ROOT}/src/libs/rtl ++incdir+${CALIPTRA_ROOT}/src/axi/rtl +incdir+${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl +incdir+${CALIPTRA_ROOT}/src/keyvault/rtl +incdir+${CALIPTRA_ROOT}/src/pcrvault/rtl @@ -97,6 +98,9 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v +${CALIPTRA_ROOT}/src/axi/rtl/axi_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_if.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/soc_ifc_reg_pkg.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/el2_pdef.vh ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/include/el2_def.sv @@ -134,6 +138,18 @@ ${CALIPTRA_ROOT}/src/soc_ifc/uvmf_soc_ifc/uvmf_template_output/verification_ip/i ${CALIPTRA_ROOT}/src/soc_ifc/uvmf_soc_ifc/uvmf_template_output/verification_ip/environment_packages/soc_ifc_env_pkg/registers/soc_ifc_reg_model_top_pkg.sv ${CALIPTRA_ROOT}/src/soc_ifc/uvmf_soc_ifc/uvmf_template_output/verification_ip/environment_packages/soc_ifc_env_pkg/soc_ifc_env_pkg.sv ${CALIPTRA_ROOT}/src/libs/rtl/ahb_to_reg_adapter.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_addr.v +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_rd.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_wr.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub_arb.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_sub.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_req_if.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_reg_pkg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_reg.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_mgr_rd.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_mgr_wr.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_ctrl.sv +${CALIPTRA_ROOT}/src/axi/rtl/axi_dma_top.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/mbox_csr_pkg.sv ${CALIPTRA_ROOT}/src/soc_ifc/rtl/sha512_acc_csr_pkg.sv ${CALIPTRA_ROOT}/src/riscv_core/veer_el2/rtl/lib/beh_lib.sv diff --git a/src/spi_host/config/spi_host.vf b/src/spi_host/config/spi_host.vf index bc5f5157f..af0b8b8ac 100644 --- a/src/spi_host/config/spi_host.vf +++ b/src/spi_host/config/spi_host.vf @@ -16,6 +16,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_util_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_alert_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_subreg_pkg.sv diff --git a/src/spi_host/config/spi_host_tb.vf b/src/spi_host/config/spi_host_tb.vf index 687e76aca..6e9a2ca68 100644 --- a/src/spi_host/config/spi_host_tb.vf +++ b/src/spi_host/config/spi_host_tb.vf @@ -17,6 +17,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_util_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_alert_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_subreg_pkg.sv diff --git a/src/spi_host/config/spiflash.vf b/src/spi_host/config/spiflash.vf index 6821ad3d0..ec72be50d 100644 --- a/src/spi_host/config/spiflash.vf +++ b/src/spi_host/config/spiflash.vf @@ -17,6 +17,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_util_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_alert_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_subreg_pkg.sv diff --git a/src/uart/config/uart.vf b/src/uart/config/uart.vf index c4cf5f0e3..d9f7b4103 100644 --- a/src/uart/config/uart.vf +++ b/src/uart/config/uart.vf @@ -16,6 +16,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_util_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_alert_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_subreg_pkg.sv diff --git a/src/uart/config/uart_tb.vf b/src/uart/config/uart_tb.vf index f23f71300..a01d6cdc2 100644 --- a/src/uart/config/uart_tb.vf +++ b/src/uart/config/uart_tb.vf @@ -17,6 +17,7 @@ ${CALIPTRA_ROOT}/src/libs/rtl/ahb_slv_sif.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_icg.sv ${CALIPTRA_ROOT}/src/libs/rtl/clk_gate.sv ${CALIPTRA_ROOT}/src/libs/rtl/caliptra_2ff_sync.sv +${CALIPTRA_ROOT}/src/libs/rtl/skidbuffer.v ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_util_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_alert_pkg.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_subreg_pkg.sv From 356de6748f951d46b21e2c9fff82cc10e4ab9374 Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Thu, 25 Jul 2024 16:35:54 -0700 Subject: [PATCH 45/58] Different init syntax for Verilator to compile vs VCS --- src/integration/tb/caliptra_top_tb.sv | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/integration/tb/caliptra_top_tb.sv b/src/integration/tb/caliptra_top_tb.sv index fcfabd1f2..04eba5245 100755 --- a/src/integration/tb/caliptra_top_tb.sv +++ b/src/integration/tb/caliptra_top_tb.sv @@ -830,7 +830,11 @@ caliptra_axi_sram #( .s_axi_w_if(axi_sram_if.w_sub), .s_axi_r_if(axi_sram_if.r_sub) ); +`ifdef VERILATOR initial i_axi_sram.i_sram.ram = '{default:'{default:8'h00}}; +`else +initial i_axi_sram.i_sram.ram = '{default:8'h00}; +`endif `define RV_INST caliptra_top_dut.rvtop `define RV_IDMA_RESP_INST caliptra_top_dut.responder_inst[`CALIPTRA_SLAVE_SEL_IDMA] From b20e46fd19005f7ab607dfcc179cb437ea96083c Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Mon, 29 Jul 2024 10:37:50 -0700 Subject: [PATCH 46/58] Update smoke_test_kv_hmac_multiblock_flow w/ DMA intr to pass compilation --- .../smoke_test_kv_hmac_multiblock_flow/caliptra_isr.h | 5 +++++ .../smoke_test_kv_hmac_multiblock_flow.c | 2 ++ 2 files changed, 7 insertions(+) diff --git a/src/integration/test_suites/smoke_test_kv_hmac_multiblock_flow/caliptra_isr.h b/src/integration/test_suites/smoke_test_kv_hmac_multiblock_flow/caliptra_isr.h index 8f5779e04..08c755bad 100644 --- a/src/integration/test_suites/smoke_test_kv_hmac_multiblock_flow/caliptra_isr.h +++ b/src/integration/test_suites/smoke_test_kv_hmac_multiblock_flow/caliptra_isr.h @@ -56,6 +56,8 @@ typedef struct { uint32_t soc_ifc_notif; uint32_t sha512_acc_error; uint32_t sha512_acc_notif; + uint32_t axi_dma_error; + uint32_t axi_dma_notif; } caliptra_intr_received_s; extern volatile caliptra_intr_received_s cptra_intr_rcv; @@ -243,5 +245,8 @@ inline void service_sha512_acc_notif_intr() { } } +inline void service_axi_dma_error_intr() {printf("ERROR");} +inline void service_axi_dma_notif_intr() {printf("ERROR");} + #endif //CALIPTRA_ISR_H diff --git a/src/integration/test_suites/smoke_test_kv_hmac_multiblock_flow/smoke_test_kv_hmac_multiblock_flow.c b/src/integration/test_suites/smoke_test_kv_hmac_multiblock_flow/smoke_test_kv_hmac_multiblock_flow.c index f7fcd2d75..a6df69988 100644 --- a/src/integration/test_suites/smoke_test_kv_hmac_multiblock_flow/smoke_test_kv_hmac_multiblock_flow.c +++ b/src/integration/test_suites/smoke_test_kv_hmac_multiblock_flow/smoke_test_kv_hmac_multiblock_flow.c @@ -56,6 +56,8 @@ volatile caliptra_intr_received_s cptra_intr_rcv = { .soc_ifc_notif = 0, .sha512_acc_error = 0, .sha512_acc_notif = 0, + .axi_dma_error = 0, + .axi_dma_notif = 0, }; void main() { From 886c6f269d465cab1a43eb2e8ffd56914df8dd70 Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Tue, 30 Jul 2024 17:52:21 -0700 Subject: [PATCH 47/58] Add mailbox payload operations --- .../test_suites/libs/soc_ifc/soc_ifc.c | 122 ++++++++++++++++-- .../smoke_test_dma/smoke_test_dma.c | 63 ++++++++- 2 files changed, 167 insertions(+), 18 deletions(-) diff --git a/src/integration/test_suites/libs/soc_ifc/soc_ifc.c b/src/integration/test_suites/libs/soc_ifc/soc_ifc.c index 2a7edd321..bab1bc6cc 100644 --- a/src/integration/test_suites/libs/soc_ifc/soc_ifc.c +++ b/src/integration/test_suites/libs/soc_ifc/soc_ifc.c @@ -307,10 +307,10 @@ uint8_t soc_ifc_axi_dma_send_ahb_payload(uint64_t dst_addr, uint8_t fixed, uint3 lsu_write_32(CLP_AXI_DMA_REG_DST_ADDR_H, (dst_addr >> 32) & 0xffffffff); lsu_write_32(CLP_AXI_DMA_REG_BYTE_COUNT, byte_count); lsu_write_32(CLP_AXI_DMA_REG_BLOCK_SIZE, (uint32_t) block_size); - reg |= AXI_DMA_REG_CTRL_GO_MASK; - reg |= axi_dma_rd_route_DISABLE << AXI_DMA_REG_CTRL_RD_ROUTE_LOW; - reg |= axi_dma_wr_route_AHB_FIFO << AXI_DMA_REG_CTRL_WR_ROUTE_LOW; - reg |= fixed ? AXI_DMA_REG_CTRL_WR_FIXED_MASK : 0; + reg = AXI_DMA_REG_CTRL_GO_MASK | + (axi_dma_rd_route_DISABLE << AXI_DMA_REG_CTRL_RD_ROUTE_LOW) | + (axi_dma_wr_route_AHB_FIFO << AXI_DMA_REG_CTRL_WR_ROUTE_LOW) | + (fixed ? AXI_DMA_REG_CTRL_WR_FIXED_MASK : 0); lsu_write_32(CLP_AXI_DMA_REG_CTRL, reg); // Send data @@ -344,10 +344,10 @@ uint8_t soc_ifc_axi_dma_read_ahb_payload(uint64_t src_addr, uint8_t fixed, uint3 lsu_write_32(CLP_AXI_DMA_REG_SRC_ADDR_H, (src_addr >> 32) & 0xffffffff); lsu_write_32(CLP_AXI_DMA_REG_BYTE_COUNT, byte_count); lsu_write_32(CLP_AXI_DMA_REG_BLOCK_SIZE, (uint32_t) block_size); - reg |= AXI_DMA_REG_CTRL_GO_MASK; - reg |= axi_dma_rd_route_AHB_FIFO << AXI_DMA_REG_CTRL_RD_ROUTE_LOW; - reg |= axi_dma_wr_route_DISABLE << AXI_DMA_REG_CTRL_WR_ROUTE_LOW; - reg |= fixed ? AXI_DMA_REG_CTRL_RD_FIXED_MASK : 0; + reg = (AXI_DMA_REG_CTRL_GO_MASK) | + (axi_dma_rd_route_AHB_FIFO << AXI_DMA_REG_CTRL_RD_ROUTE_LOW) | + (axi_dma_wr_route_DISABLE << AXI_DMA_REG_CTRL_WR_ROUTE_LOW) | + (fixed ? AXI_DMA_REG_CTRL_RD_FIXED_MASK : 0); lsu_write_32(CLP_AXI_DMA_REG_CTRL, reg); // Read data @@ -372,9 +372,105 @@ uint8_t soc_ifc_axi_dma_read_ahb_payload(uint64_t src_addr, uint8_t fixed, uint3 } uint8_t soc_ifc_axi_dma_send_mbox_payload(uint64_t src_addr, uint64_t dst_addr, uint8_t fixed, uint32_t byte_count, uint16_t block_size) { + uint32_t reg; + + // Acquire the mailbox lock + if (soc_ifc_mbox_acquire_lock(1)) { + VPRINTF(ERROR, "Acquire mailbox lock failed\n"); + return 1; + } + + // src_addr checks + if (src_addr & ~((uint64_t) (MBOX_DIR_SPAN-1))) { + VPRINTF(ERROR, "src_addr 0x%x is out of bounds for mbox span!\n", src_addr); + SEND_STDOUT_CTRL(0x1); + while(1); + } + if ((src_addr + byte_count) & ~((uint64_t) (MBOX_DIR_SPAN-1))) { + VPRINTF(ERROR, "reading 0x%x bytes from src_addr 0x%x goes out of bounds for mbox span!\n", src_addr, byte_count); + SEND_STDOUT_CTRL(0x1); + while(1); + } + + // Arm the command + while (lsu_read_32(CLP_AXI_DMA_REG_STATUS0) & AXI_DMA_REG_STATUS0_BUSY_MASK); + lsu_write_32(CLP_AXI_DMA_REG_SRC_ADDR_L, src_addr & 0xffffffff); + lsu_write_32(CLP_AXI_DMA_REG_SRC_ADDR_H, (src_addr >> 32) & 0xffffffff); + lsu_write_32(CLP_AXI_DMA_REG_DST_ADDR_L, dst_addr & 0xffffffff); + lsu_write_32(CLP_AXI_DMA_REG_DST_ADDR_H, (dst_addr >> 32) & 0xffffffff); + lsu_write_32(CLP_AXI_DMA_REG_BYTE_COUNT, byte_count); + lsu_write_32(CLP_AXI_DMA_REG_BLOCK_SIZE, (uint32_t) block_size); + reg = (AXI_DMA_REG_CTRL_GO_MASK) | + (axi_dma_rd_route_DISABLE << AXI_DMA_REG_CTRL_RD_ROUTE_LOW) | + (axi_dma_wr_route_MBOX << AXI_DMA_REG_CTRL_WR_ROUTE_LOW) | + (fixed ? AXI_DMA_REG_CTRL_WR_FIXED_MASK : 0); + lsu_write_32(CLP_AXI_DMA_REG_CTRL, reg); + + // Check completion + reg = lsu_read_32(CLP_AXI_DMA_REG_STATUS0); + while ((reg & AXI_DMA_REG_STATUS0_BUSY_MASK) && !(reg & AXI_DMA_REG_STATUS0_ERROR_MASK)) { + reg = lsu_read_32(CLP_AXI_DMA_REG_STATUS0); + } + + // Check status + if (reg & AXI_DMA_REG_STATUS0_ERROR_MASK) { + VPRINTF(FATAL, "FATAL: AXI DMA reports error status for MBOX-to-AXI xfer\n"); + lsu_write_32(CLP_AXI_DMA_REG_CTRL, AXI_DMA_REG_CTRL_FLUSH_MASK); + SEND_STDOUT_CTRL(0x1); + } + + lsu_write_32(CLP_MBOX_CSR_MBOX_UNLOCK, MBOX_CSR_MBOX_UNLOCK_UNLOCK_MASK); } uint8_t soc_ifc_axi_dma_read_mbox_payload(uint64_t src_addr, uint64_t dst_addr, uint8_t fixed, uint32_t byte_count, uint16_t block_size) { + uint32_t reg; + + // Acquire the mailbox lock + if (soc_ifc_mbox_acquire_lock(1)) { + VPRINTF(ERROR, "Acquire mailbox lock failed\n"); + return 1; + } + + // dst_addr checks + if (dst_addr & ~((uint64_t) (MBOX_DIR_SPAN-1))) { + VPRINTF(ERROR, "dst_addr 0x%x is out of bounds for mbox span!\n", dst_addr); + SEND_STDOUT_CTRL(0x1); + while(1); + } + if ((dst_addr + byte_count) & ~((uint64_t) (MBOX_DIR_SPAN-1))) { + VPRINTF(ERROR, "writing 0x%x bytes to dst_addr 0x%x goes out of bounds for mbox span!\n", dst_addr, byte_count); + SEND_STDOUT_CTRL(0x1); + while(1); + } + + // Arm the command + while (lsu_read_32(CLP_AXI_DMA_REG_STATUS0) & AXI_DMA_REG_STATUS0_BUSY_MASK); + lsu_write_32(CLP_AXI_DMA_REG_SRC_ADDR_L, src_addr & 0xffffffff); + lsu_write_32(CLP_AXI_DMA_REG_SRC_ADDR_H, (src_addr >> 32) & 0xffffffff); + lsu_write_32(CLP_AXI_DMA_REG_DST_ADDR_L, dst_addr & 0xffffffff); + lsu_write_32(CLP_AXI_DMA_REG_DST_ADDR_H, (dst_addr >> 32) & 0xffffffff); + lsu_write_32(CLP_AXI_DMA_REG_BYTE_COUNT, byte_count); + lsu_write_32(CLP_AXI_DMA_REG_BLOCK_SIZE, (uint32_t) block_size); + reg = (AXI_DMA_REG_CTRL_GO_MASK) | + (axi_dma_rd_route_MBOX << AXI_DMA_REG_CTRL_RD_ROUTE_LOW) | + (axi_dma_wr_route_DISABLE << AXI_DMA_REG_CTRL_WR_ROUTE_LOW) | + (fixed ? AXI_DMA_REG_CTRL_RD_FIXED_MASK : 0); + lsu_write_32(CLP_AXI_DMA_REG_CTRL, reg); + + // Check completion + reg = lsu_read_32(CLP_AXI_DMA_REG_STATUS0); + while ((reg & AXI_DMA_REG_STATUS0_BUSY_MASK) && !(reg & AXI_DMA_REG_STATUS0_ERROR_MASK)) { + reg = lsu_read_32(CLP_AXI_DMA_REG_STATUS0); + } + + // Check status + if (reg & AXI_DMA_REG_STATUS0_ERROR_MASK) { + VPRINTF(FATAL, "FATAL: AXI DMA reports error status for AXI-to-MBOX xfer\n"); + lsu_write_32(CLP_AXI_DMA_REG_CTRL, AXI_DMA_REG_CTRL_FLUSH_MASK); + SEND_STDOUT_CTRL(0x1); + } + + lsu_write_32(CLP_MBOX_CSR_MBOX_UNLOCK, MBOX_CSR_MBOX_UNLOCK_UNLOCK_MASK); } uint8_t soc_ifc_axi_dma_send_axi_to_axi(uint64_t src_addr, uint8_t src_fixed, uint64_t dst_addr, uint8_t dst_fixed, uint32_t byte_count, uint16_t block_size) { @@ -388,11 +484,11 @@ uint8_t soc_ifc_axi_dma_send_axi_to_axi(uint64_t src_addr, uint8_t src_fixed, ui lsu_write_32(CLP_AXI_DMA_REG_DST_ADDR_H, (dst_addr >> 32) & 0xffffffff); lsu_write_32(CLP_AXI_DMA_REG_BYTE_COUNT, byte_count); lsu_write_32(CLP_AXI_DMA_REG_BLOCK_SIZE, (uint32_t) block_size); - reg |= AXI_DMA_REG_CTRL_GO_MASK; - reg |= axi_dma_rd_route_AXI_WR << AXI_DMA_REG_CTRL_RD_ROUTE_LOW; - reg |= axi_dma_wr_route_AXI_RD << AXI_DMA_REG_CTRL_WR_ROUTE_LOW; - reg |= src_fixed ? AXI_DMA_REG_CTRL_RD_FIXED_MASK : 0; - reg |= dst_fixed ? AXI_DMA_REG_CTRL_WR_FIXED_MASK : 0; + reg = (AXI_DMA_REG_CTRL_GO_MASK) | + (axi_dma_rd_route_AXI_WR << AXI_DMA_REG_CTRL_RD_ROUTE_LOW) | + (axi_dma_wr_route_AXI_RD << AXI_DMA_REG_CTRL_WR_ROUTE_LOW) | + (src_fixed ? AXI_DMA_REG_CTRL_RD_FIXED_MASK : 0) | + (dst_fixed ? AXI_DMA_REG_CTRL_WR_FIXED_MASK : 0); lsu_write_32(CLP_AXI_DMA_REG_CTRL, reg); // Check completion diff --git a/src/integration/test_suites/smoke_test_dma/smoke_test_dma.c b/src/integration/test_suites/smoke_test_dma/smoke_test_dma.c index 07f7ee02a..d8720f0a1 100644 --- a/src/integration/test_suites/smoke_test_dma/smoke_test_dma.c +++ b/src/integration/test_suites/smoke_test_dma/smoke_test_dma.c @@ -23,10 +23,6 @@ #include "soc_ifc.h" -//int whisperPrintf(const char* format, ...); -//#define ee_printf whisperPrintf - - volatile char* stdout = (char *)STDOUT; volatile uint32_t intr_count = 0; #ifdef CPT_VERBOSITY @@ -85,7 +81,26 @@ void main(void) { 0xad813451, 0x67120ad3 }; + uint32_t mbox_send_payload[16] = { + 0x0991c03c, + 0x7bc14838, + 0xb05f2c82, + 0x7b233274, + 0x01b7ba27, + 0x3f24db45, + 0xd945c472, + 0xabac3989, + 0x64af1d5e, + 0xda068da4, + 0xeb9102ab, + 0xf796de3e, + 0x88fc6af8, + 0x1a169287, + 0xc9a6e724, + 0x667f9dd5 + }; uint32_t read_payload[16]; + uint32_t mbox_read_payload[16]; VPRINTF(LOW, "----------------------------------\nSmoke Test AXI DMA !!\n----------------------------------\n"); @@ -104,10 +119,27 @@ void main(void) { VPRINTF(LOW, "Sending payload via AHB i/f\n"); soc_ifc_axi_dma_send_ahb_payload(AXI_SRAM_BASE_ADDR, 0, send_payload, 16*4, 0); + // Send data through Mailbox to AXI_DMA, target the AXI SRAM + VPRINTF(LOW, "Writing payload to Mailbox via Direct Mode\n"); + // Acquire the mailbox lock + if (soc_ifc_mbox_acquire_lock(1)) { + VPRINTF(ERROR, "Acquire mailbox lock failed\n"); + fail = 1; + } + // Write data into mailbox using direct-mode + for (uint32_t dw = 0; dw < 16; dw++) { + lsu_write_32(MBOX_DIR_BASE_ADDR + 0x4400 + (dw << 2), mbox_send_payload[dw]); + } + lsu_write_32(CLP_MBOX_CSR_MBOX_UNLOCK, MBOX_CSR_MBOX_UNLOCK_UNLOCK_MASK); + VPRINTF(LOW, "Sending payload from Mailbox\n"); + if (soc_ifc_axi_dma_send_mbox_payload(0x4400, AXI_SRAM_BASE_ADDR + 16*4, 0, 16*4, 0)) { + fail = 1; + } + // Move data from one address to another in AXI SRAM // Use the block-size feature VPRINTF(LOW, "Moving payload at SRAM via axi-to-axi xfer\n"); - soc_ifc_axi_dma_send_axi_to_axi(AXI_SRAM_BASE_ADDR, 0, AXI_SRAM_BASE_ADDR + AXI_SRAM_SIZE_BYTES/2, 0, 16*4, 16*2); + soc_ifc_axi_dma_send_axi_to_axi(AXI_SRAM_BASE_ADDR, 0, AXI_SRAM_BASE_ADDR + AXI_SRAM_SIZE_BYTES/2, 0, 2*16*4, 16*2); // Read data back from AXI SRAM and confirm it matches VPRINTF(LOW, "Reading payload via AHB i/f\n"); @@ -119,6 +151,27 @@ void main(void) { } } + // Read data back through mailbox using direct-mode + VPRINTF(LOW, "Reading payload to Mailbox\n"); + if (soc_ifc_axi_dma_read_mbox_payload(AXI_SRAM_BASE_ADDR + AXI_SRAM_SIZE_BYTES/2 + 16*4, 0x8800, 0, 16*4, 0)) { + fail = 1; + } + VPRINTF(LOW, "Reading payload from Mailbox via Direct Mode\n"); + // Acquire the mailbox lock + if (soc_ifc_mbox_acquire_lock(1)) { + VPRINTF(ERROR, "Acquire mailbox lock failed\n"); + fail = 1; + } + for (uint32_t dw = 0; dw < 16; dw++) { + mbox_read_payload[dw] = lsu_read_32(MBOX_DIR_BASE_ADDR + 0x8800 + (dw << 2)); + if (mbox_read_payload[dw] != mbox_send_payload[dw]) { + fail = 1; + VPRINTF(ERROR, "mbox_read_payload[%d] (0x%x) does not match mbox_send_payload[%d] (0x%x)\n", dw, mbox_read_payload[dw], dw, mbox_send_payload[dw]); + } + } + lsu_write_32(CLP_MBOX_CSR_MBOX_UNLOCK, MBOX_CSR_MBOX_UNLOCK_UNLOCK_MASK); + + if (fail) { VPRINTF(FATAL, "smoke_test_dma failed!\n"); SEND_STDOUT_CTRL(0x1); From 854d4ac4d4f41bd12d2229f87a77e137813b48bb Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Tue, 30 Jul 2024 17:52:35 -0700 Subject: [PATCH 48/58] Default return of 0 for dma operations --- src/integration/test_suites/libs/soc_ifc/soc_ifc.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/integration/test_suites/libs/soc_ifc/soc_ifc.c b/src/integration/test_suites/libs/soc_ifc/soc_ifc.c index bab1bc6cc..73fae8777 100644 --- a/src/integration/test_suites/libs/soc_ifc/soc_ifc.c +++ b/src/integration/test_suites/libs/soc_ifc/soc_ifc.c @@ -420,6 +420,7 @@ uint8_t soc_ifc_axi_dma_send_mbox_payload(uint64_t src_addr, uint64_t dst_addr, } lsu_write_32(CLP_MBOX_CSR_MBOX_UNLOCK, MBOX_CSR_MBOX_UNLOCK_UNLOCK_MASK); + return 0; } uint8_t soc_ifc_axi_dma_read_mbox_payload(uint64_t src_addr, uint64_t dst_addr, uint8_t fixed, uint32_t byte_count, uint16_t block_size) { @@ -471,6 +472,7 @@ uint8_t soc_ifc_axi_dma_read_mbox_payload(uint64_t src_addr, uint64_t dst_addr, } lsu_write_32(CLP_MBOX_CSR_MBOX_UNLOCK, MBOX_CSR_MBOX_UNLOCK_UNLOCK_MASK); + return 0; } uint8_t soc_ifc_axi_dma_send_axi_to_axi(uint64_t src_addr, uint8_t src_fixed, uint64_t dst_addr, uint8_t dst_fixed, uint32_t byte_count, uint16_t block_size) { From cc519b97356ffca89db8132d72bfbc4a489572fe Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Tue, 30 Jul 2024 17:52:49 -0700 Subject: [PATCH 49/58] Reorder fail var assignment --- src/integration/test_suites/smoke_test_dma/smoke_test_dma.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/integration/test_suites/smoke_test_dma/smoke_test_dma.c b/src/integration/test_suites/smoke_test_dma/smoke_test_dma.c index d8720f0a1..5c58441c4 100644 --- a/src/integration/test_suites/smoke_test_dma/smoke_test_dma.c +++ b/src/integration/test_suites/smoke_test_dma/smoke_test_dma.c @@ -146,8 +146,8 @@ void main(void) { soc_ifc_axi_dma_read_ahb_payload(AXI_SRAM_BASE_ADDR + AXI_SRAM_SIZE_BYTES/2, 0, read_payload, 16*4, 0); for (uint8_t ii = 0; ii < 16; ii++) { if (read_payload[ii] != send_payload[ii]) { - fail = 1; VPRINTF(ERROR, "read_payload[%d] (0x%x) does not match send_payload[%d] (0x%x)\n", ii, read_payload[ii], ii, send_payload[ii]); + fail = 1; } } @@ -165,8 +165,8 @@ void main(void) { for (uint32_t dw = 0; dw < 16; dw++) { mbox_read_payload[dw] = lsu_read_32(MBOX_DIR_BASE_ADDR + 0x8800 + (dw << 2)); if (mbox_read_payload[dw] != mbox_send_payload[dw]) { - fail = 1; VPRINTF(ERROR, "mbox_read_payload[%d] (0x%x) does not match mbox_send_payload[%d] (0x%x)\n", dw, mbox_read_payload[dw], dw, mbox_send_payload[dw]); + fail = 1; } } lsu_write_32(CLP_MBOX_CSR_MBOX_UNLOCK, MBOX_CSR_MBOX_UNLOCK_UNLOCK_MASK); From e9703e4ccae9e3e7dbfc38bdfc0531ce32d6b75c Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Tue, 30 Jul 2024 17:53:16 -0700 Subject: [PATCH 50/58] Fixes for DMA write and hold signaling to mailbox sram --- src/soc_ifc/rtl/mbox.sv | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/soc_ifc/rtl/mbox.sv b/src/soc_ifc/rtl/mbox.sv index 5d39dcdae..330618935 100644 --- a/src/soc_ifc/rtl/mbox.sv +++ b/src/soc_ifc/rtl/mbox.sv @@ -453,7 +453,7 @@ always_comb dir_req_dv_q = (dir_req_dv & ~dir_req_rd_phase & hwif_out.mbox_lock. sha_sram_req_dv; always_comb dir_req_wr_ph = dir_req_dv_q & ~sha_sram_req_dv & ((~dma_sram_req_dv_q & req_data.write) | (dma_sram_req_dv_q & dma_sram_req_data.write)); always_comb dir_req_addr = sha_sram_req_dv ? sha_sram_req_addr : - dma_sram_req_dv_q ? dma_sram_req_data.addr : + dma_sram_req_dv_q ? dma_sram_req_data.addr[DEPTH_LOG2+1:2] : req_data.addr[DEPTH_LOG2+1:2]; // Arb precedence: @@ -469,7 +469,7 @@ always_comb req_hold = (dir_req_dv_q & /*~sha_sram_req_dv & (~dma_sram_req_dv_q //in an update cycle for dataout register (hwif_out.mbox_dataout.dataout.swacc & mbox_protocol_sram_rd_f); -always_comb dma_sram_hold = sha_sram_req_dv; +always_comb dma_sram_hold = (sha_sram_req_dv && !dma_sram_req_rd_phase) || (dma_sram_req_dv_q && !dma_sram_req_data.write); always_comb sha_sram_hold = 1'b0; //SRAM interface @@ -526,7 +526,7 @@ rvecc_decode ecc_decode ( //control for sram write and read pointer //SoC access is controlled by mailbox, each subsequent read or write increments the pointer //uC accesses can specify the specific read or write address, or rely on mailbox to control -always_comb sram_wdata = req_data.wdata; +always_comb sram_wdata = (dma_sram_req_dv_q && dma_sram_req_data.write ) ? dma_sram_req_data.wdata : req_data.wdata; //in ready for data state we increment the pointer each time we write always_comb mbox_wrptr_nxt = rst_mbox_wrptr ? '0 : From 0f3e910a97d7866ff34e0766fbf7d85a22201022 Mon Sep 17 00:00:00 2001 From: Caleb Whitehead Date: Tue, 30 Jul 2024 17:54:12 -0700 Subject: [PATCH 51/58] Fixes for credits and bytes requested calculations --- src/axi/rtl/axi_dma_ctrl.sv | 63 ++++++++++++++++++++++++++++--------- 1 file changed, 49 insertions(+), 14 deletions(-) diff --git a/src/axi/rtl/axi_dma_ctrl.sv b/src/axi/rtl/axi_dma_ctrl.sv index 25571f5e3..a4bf3d8d9 100644 --- a/src/axi/rtl/axi_dma_ctrl.sv +++ b/src/axi/rtl/axi_dma_ctrl.sv @@ -122,6 +122,9 @@ import soc_ifc_pkg::*; logic fifo_empty, fifo_empty_r; // Internal signals + axi_dma_reg__ctrl__rd_route__rd_route_e_e rd_route; + axi_dma_reg__ctrl__wr_route__wr_route_e_e wr_route; + logic cmd_inv_rd_route; logic cmd_inv_wr_route; logic cmd_inv_route_combo; @@ -147,7 +150,8 @@ import soc_ifc_pkg::*; logic [DW-1:0] r_data_mask; logic [AW-1:0] src_addr, dst_addr; - logic [$clog2(FIFO_BC+1)-1:0] rd_credits; + logic [$clog2(FIFO_BC/BC+1)-1:0] rd_credits; + logic [$clog2(FIFO_BC/BC+1)-1:0] wr_credits; logic [AXI_LEN_BC_WIDTH-1:0] block_size_mask; // 1's based counters logic [31:0] rd_bytes_requested; @@ -282,6 +286,12 @@ import soc_ifc_pkg::*; end endgenerate + // Simulation visibility to enumerated value is helpful for debug + always_comb begin + rd_route = axi_dma_reg__ctrl__rd_route__rd_route_e_e'(hwif_out.ctrl.rd_route.value); + wr_route = axi_dma_reg__ctrl__wr_route__wr_route_e_e'(hwif_out.ctrl.wr_route.value); + end + always_comb begin cmd_inv_rd_route = 1'b0; // There are no unassigned values from the 2-bit field, all individual configs are legal cmd_inv_wr_route = 1'b0; // There are no unassigned values from the 2-bit field, all individual configs are legal @@ -456,12 +466,12 @@ import soc_ifc_pkg::*; end always_comb begin - r_req_if.valid = (ctrl_fsm_ps == DMA_WAIT_DATA) && !rd_req_hshake_bypass && (rd_bytes_requested < hwif_out.byte_count.count) && (rd_credits >= rd_req_byte_count) && !rd_req_stall; + r_req_if.valid = (ctrl_fsm_ps == DMA_WAIT_DATA) && !rd_req_hshake_bypass && (rd_bytes_requested < hwif_out.byte_count.count) && (rd_credits >= rd_req_byte_count[AXI_LEN_BC_WIDTH-1:BW]) && !rd_req_stall; r_req_if.addr = src_addr + rd_bytes_requested; r_req_if.byte_len = rd_req_byte_count - AXI_LEN_BC_WIDTH'(BC); r_req_if.fixed = hwif_out.ctrl.rd_fixed.value; r_req_if.lock = 1'b0; // TODO - w_req_if.valid = (ctrl_fsm_ps == DMA_WAIT_DATA) && !wr_req_hshake_bypass && (wr_bytes_requested < hwif_out.byte_count.count) && (fifo_depth >= wr_req_byte_count[AXI_LEN_BC_WIDTH-1:BW]); + w_req_if.valid = (ctrl_fsm_ps == DMA_WAIT_DATA) && !wr_req_hshake_bypass && (wr_bytes_requested < hwif_out.byte_count.count) && (wr_credits >= wr_req_byte_count[AXI_LEN_BC_WIDTH-1:BW]); w_req_if.addr = dst_addr + wr_bytes_requested; w_req_if.byte_len = wr_req_byte_count - AXI_LEN_BC_WIDTH'(BC); w_req_if.fixed = hwif_out.ctrl.wr_fixed.value; @@ -478,8 +488,8 @@ import soc_ifc_pkg::*; (hwif_out.ctrl.wr_route.value == axi_dma_reg__ctrl__wr_route__wr_route_e__MBOX && (rd_bytes_requested < hwif_out.byte_count.count) && fifo_w_ready)); - mb_data.addr = hwif_out.ctrl.rd_route.value == axi_dma_reg__ctrl__rd_route__rd_route_e__MBOX ? w_req_if.addr : - r_req_if.addr; + mb_data.addr = hwif_out.ctrl.rd_route.value == axi_dma_reg__ctrl__rd_route__rd_route_e__MBOX ? SOC_IFC_ADDR_W'(w_req_if.addr) : + SOC_IFC_ADDR_W'(r_req_if.addr); mb_data.wdata = fifo_r_data; mb_data.wstrb = '1; mb_data.id = '1; @@ -501,7 +511,7 @@ import soc_ifc_pkg::*; else if (rd_req_hshake) begin rd_bytes_requested <= rd_bytes_requested + rd_req_byte_count; end - else if (mb_dv && !mb_hold) begin + else if (mb_dv && !mb_data.write && !mb_hold) begin rd_bytes_requested <= rd_bytes_requested + BC; end else if (ctrl_fsm_ps == DMA_IDLE) begin @@ -515,6 +525,9 @@ import soc_ifc_pkg::*; else if (wr_req_hshake) begin wr_bytes_requested <= wr_bytes_requested + wr_req_byte_count; end + else if (mb_dv && mb_data.write && !mb_hold) begin + wr_bytes_requested <= wr_bytes_requested + BC; + end else if (ctrl_fsm_ps == DMA_IDLE) begin wr_bytes_requested <= '0; end @@ -522,19 +535,37 @@ import soc_ifc_pkg::*; always_ff @(posedge clk or negedge rst_n) begin if (!rst_n) begin - rd_credits <= FIFO_BC; + rd_credits <= FIFO_BC/BC; + end + else if ((ctrl_fsm_ps == DMA_IDLE) || (rd_req_hshake_bypass)) begin + rd_credits <= FIFO_BC/BC; end else if (rd_req_hshake && (fifo_r_valid && fifo_r_ready)) begin - rd_credits <= rd_credits + BC - rd_req_byte_count; + rd_credits <= rd_credits + 1 - rd_req_byte_count[AXI_LEN_BC_WIDTH-1:BW]; end else if (rd_req_hshake) begin - rd_credits <= rd_credits - rd_req_byte_count; + rd_credits <= rd_credits - rd_req_byte_count[AXI_LEN_BC_WIDTH-1:BW]; end else if (fifo_r_valid && fifo_r_ready) begin - rd_credits <= rd_credits + BC; + rd_credits <= rd_credits + 1; end - else if (ctrl_fsm_ps == DMA_IDLE) begin - rd_credits <= FIFO_BC; + end + + always_ff @(posedge clk or negedge rst_n) begin + if (!rst_n) begin + wr_credits <= 0; + end + else if ((ctrl_fsm_ps == DMA_IDLE) || (wr_req_hshake_bypass)) begin + wr_credits <= 0; + end + else if (wr_req_hshake && (fifo_w_valid && fifo_w_ready)) begin + wr_credits <= wr_credits + 1 - wr_req_byte_count[AXI_LEN_BC_WIDTH-1:BW]; + end + else if (wr_req_hshake) begin + wr_credits <= wr_credits - wr_req_byte_count[AXI_LEN_BC_WIDTH-1:BW]; + end + else if (fifo_w_valid && fifo_w_ready) begin + wr_credits <= wr_credits + 1; end end @@ -662,8 +693,12 @@ import soc_ifc_pkg::*; `CALIPTRA_ASSERT(AXI_DMA_VLD_RD_REQ_BND, rd_req_hshake |-> r_req_if.addr[AW-1:AXI_LEN_BC_WIDTH] == ((r_req_if.addr + r_req_if.byte_len) >> AXI_LEN_BC_WIDTH), clk, !rst_n) `CALIPTRA_ASSERT(AXI_DMA_VLD_WR_REQ_BND, wr_req_hshake |-> w_req_if.addr[AW-1:AXI_LEN_BC_WIDTH] == ((w_req_if.addr + w_req_if.byte_len) >> AXI_LEN_BC_WIDTH), clk, !rst_n) `CALIPTRA_ASSERT_INIT(AXI_DMA_DW_32, DW == 32) - `CALIPTRA_ASSERT(AXI_DMA_LIM_RD_CRED, rd_credits <= FIFO_BC, clk, !rst_n) + `CALIPTRA_ASSERT_INIT(AXI_DMA_DW_EQ_MB, DW == MBOX_DATA_W) + `CALIPTRA_ASSERT(AXI_DMA_LIM_RD_CRED, rd_credits <= FIFO_BC/BC, clk, !rst_n) `CALIPTRA_ASSERT(AXI_DMA_MIN_RD_CRED, !((rd_credits < BC) && rd_req_hshake), clk, !rst_n) - `CALIPTRA_ASSERT(AXI_DMA_RST_RD_CRED, (ctrl_fsm_ps == DMA_DONE) |-> (rd_credits == FIFO_BC), clk, !rst_n) + `CALIPTRA_ASSERT(AXI_DMA_RST_RD_CRED, (ctrl_fsm_ps == DMA_DONE) |-> (rd_credits == FIFO_BC/BC), clk, !rst_n) + `CALIPTRA_ASSERT(AXI_DMA_LIM_WR_CRED, wr_credits <= FIFO_BC/BC, clk, !rst_n) + `CALIPTRA_ASSERT(AXI_DMA_MIN_WR_CRED, !((wr_credits < BC) && wr_req_hshake), clk, !rst_n) + `CALIPTRA_ASSERT(AXI_DMA_RST_WR_CRED, (ctrl_fsm_ps == DMA_DONE) |-> (wr_credits == 0), clk, !rst_n) endmodule From c33f2f9ad184e02bc669d25ab72e04acc5a5fc2c Mon Sep 17 00:00:00 2001 From: Anjana Parthasarathy Date: Tue, 6 Aug 2024 15:22:20 -0700 Subject: [PATCH 52/58] Initial pass at Fuse Controller and Tl --> AXI replacement, pre build cleanup --- src/axi/rtl/axi_pkg.sv | 15 + src/caliptra_prim/config/caliptra_prim.vf | 1 + src/caliptra_prim/config/compile.yml | 1 + .../rtl/caliptra_prim_blanker.sv | 20 + src/fuse_ctrl/config/config.yaml | 33 + src/fuse_ctrl/data/dif_otp_ctrl.c.tpl | 734 ++ src/fuse_ctrl/data/dif_otp_ctrl.h.tpl | 615 ++ .../data/dif_otp_ctrl_unittest.cc.tpl | 867 +++ src/fuse_ctrl/data/otp_ctrl.hjson | 1898 +++++ src/fuse_ctrl/data/otp_ctrl.hjson.tpl | 1522 ++++ src/fuse_ctrl/data/otp_ctrl_base_vseq.sv.tpl | 643 ++ src/fuse_ctrl/data/otp_ctrl_cov_bind.sv.tpl | 84 + .../data/otp_ctrl_dai_lock_vseq.sv.tpl | 90 + src/fuse_ctrl/data/otp_ctrl_env_cov.sv.tpl | 358 + src/fuse_ctrl/data/otp_ctrl_env_pkg.sv.tpl | 265 + src/fuse_ctrl/data/otp_ctrl_if.sv.tpl | 350 + src/fuse_ctrl/data/otp_ctrl_mmap.hjson | 269 + src/fuse_ctrl/data/otp_ctrl_part_pkg.sv.tpl | 353 + src/fuse_ctrl/data/otp_ctrl_scoreboard.sv.tpl | 1473 ++++ src/fuse_ctrl/data/otp_ctrl_smoke_vseq.sv.tpl | 255 + src/fuse_ctrl/doc/otp_ctrl_digests.md | 12 + src/fuse_ctrl/doc/otp_ctrl_mmap.md | 27 + src/fuse_ctrl/doc/otp_ctrl_partitions.md | 31 + src/fuse_ctrl/dv/cov/otp_ctrl_cov.core | 24 + src/fuse_ctrl/dv/cov/otp_ctrl_cov_bind.sv | 81 + .../dv/cov/otp_ctrl_cov_fsm_unr_excl.el | 199 + src/fuse_ctrl/dv/cov/otp_ctrl_cov_if.sv | 113 + src/fuse_ctrl/dv/cov/otp_ctrl_cov_unr_excl.el | 6102 +++++++++++++++++ src/fuse_ctrl/dv/cov/otp_ctrl_cover.cfg | 14 + src/fuse_ctrl/dv/env/otp_ctrl_env_cov.sv | 341 + src/fuse_ctrl/dv/env/otp_ctrl_env_pkg.sv | 248 + src/fuse_ctrl/dv/env/otp_ctrl_if.sv | 327 + src/fuse_ctrl/dv/env/otp_ctrl_scoreboard.sv | 1488 ++++ .../dv/env/seq_lib/otp_ctrl_base_vseq.sv | 632 ++ .../dv/env/seq_lib/otp_ctrl_dai_lock_vseq.sv | 83 + .../dv/env/seq_lib/otp_ctrl_smoke_vseq.sv | 256 + src/fuse_ctrl/rtl/axi_adapter_sram.sv | 402 ++ src/fuse_ctrl/rtl/axi_lc_gate.sv | 270 + src/fuse_ctrl/rtl/axi_sram_byte.sv | 16 + .../rtl/caliptra_otp_ctrl_core_reg_top.sv | 1997 ++++++ .../rtl/caliptra_otp_ctrl_prim_reg_top.sv | 1467 ++++ .../rtl/caliptra_otp_ctrl_reg_pkg.sv | 818 +++ src/fuse_ctrl/rtl/otp_ctrl.sv | 1674 +++++ src/fuse_ctrl/rtl/otp_ctrl.sv_orig | 1565 +++++ src/fuse_ctrl/rtl/otp_ctrl_axi_pkg.sv | 122 + src/fuse_ctrl/rtl/otp_ctrl_dai.sv | 858 +++ src/fuse_ctrl/rtl/otp_ctrl_ecc_reg.sv | 105 + src/fuse_ctrl/rtl/otp_ctrl_kdi.sv | 603 ++ src/fuse_ctrl/rtl/otp_ctrl_lci.sv | 298 + src/fuse_ctrl/rtl/otp_ctrl_lfsr_timer.sv | 397 ++ src/fuse_ctrl/rtl/otp_ctrl_part_buf.sv | 817 +++ src/fuse_ctrl/rtl/otp_ctrl_part_pkg.sv | 382 ++ src/fuse_ctrl/rtl/otp_ctrl_part_unbuf.sv | 531 ++ src/fuse_ctrl/rtl/otp_ctrl_pkg.sv | 327 + src/fuse_ctrl/rtl/otp_ctrl_scrmbl.sv | 510 ++ src/fuse_ctrl/rtl/otp_ctrl_token_const.sv | 65 + src/fuse_ctrl/rtl/otp_ctrl_top.sv | 215 + 57 files changed, 33263 insertions(+) create mode 100644 src/caliptra_prim/rtl/caliptra_prim_blanker.sv create mode 100644 src/fuse_ctrl/config/config.yaml create mode 100755 src/fuse_ctrl/data/dif_otp_ctrl.c.tpl create mode 100755 src/fuse_ctrl/data/dif_otp_ctrl.h.tpl create mode 100755 src/fuse_ctrl/data/dif_otp_ctrl_unittest.cc.tpl create mode 100755 src/fuse_ctrl/data/otp_ctrl.hjson create mode 100755 src/fuse_ctrl/data/otp_ctrl.hjson.tpl create mode 100755 src/fuse_ctrl/data/otp_ctrl_base_vseq.sv.tpl create mode 100755 src/fuse_ctrl/data/otp_ctrl_cov_bind.sv.tpl create mode 100755 src/fuse_ctrl/data/otp_ctrl_dai_lock_vseq.sv.tpl create mode 100755 src/fuse_ctrl/data/otp_ctrl_env_cov.sv.tpl create mode 100755 src/fuse_ctrl/data/otp_ctrl_env_pkg.sv.tpl create mode 100755 src/fuse_ctrl/data/otp_ctrl_if.sv.tpl create mode 100755 src/fuse_ctrl/data/otp_ctrl_mmap.hjson create mode 100755 src/fuse_ctrl/data/otp_ctrl_part_pkg.sv.tpl create mode 100755 src/fuse_ctrl/data/otp_ctrl_scoreboard.sv.tpl create mode 100755 src/fuse_ctrl/data/otp_ctrl_smoke_vseq.sv.tpl create mode 100755 src/fuse_ctrl/doc/otp_ctrl_digests.md create mode 100755 src/fuse_ctrl/doc/otp_ctrl_mmap.md create mode 100755 src/fuse_ctrl/doc/otp_ctrl_partitions.md create mode 100755 src/fuse_ctrl/dv/cov/otp_ctrl_cov.core create mode 100755 src/fuse_ctrl/dv/cov/otp_ctrl_cov_bind.sv create mode 100755 src/fuse_ctrl/dv/cov/otp_ctrl_cov_fsm_unr_excl.el create mode 100755 src/fuse_ctrl/dv/cov/otp_ctrl_cov_if.sv create mode 100755 src/fuse_ctrl/dv/cov/otp_ctrl_cov_unr_excl.el create mode 100755 src/fuse_ctrl/dv/cov/otp_ctrl_cover.cfg create mode 100755 src/fuse_ctrl/dv/env/otp_ctrl_env_cov.sv create mode 100755 src/fuse_ctrl/dv/env/otp_ctrl_env_pkg.sv create mode 100755 src/fuse_ctrl/dv/env/otp_ctrl_if.sv create mode 100755 src/fuse_ctrl/dv/env/otp_ctrl_scoreboard.sv create mode 100755 src/fuse_ctrl/dv/env/seq_lib/otp_ctrl_base_vseq.sv create mode 100755 src/fuse_ctrl/dv/env/seq_lib/otp_ctrl_dai_lock_vseq.sv create mode 100755 src/fuse_ctrl/dv/env/seq_lib/otp_ctrl_smoke_vseq.sv create mode 100644 src/fuse_ctrl/rtl/axi_adapter_sram.sv create mode 100644 src/fuse_ctrl/rtl/axi_lc_gate.sv create mode 100644 src/fuse_ctrl/rtl/axi_sram_byte.sv create mode 100644 src/fuse_ctrl/rtl/caliptra_otp_ctrl_core_reg_top.sv create mode 100644 src/fuse_ctrl/rtl/caliptra_otp_ctrl_prim_reg_top.sv create mode 100644 src/fuse_ctrl/rtl/caliptra_otp_ctrl_reg_pkg.sv create mode 100644 src/fuse_ctrl/rtl/otp_ctrl.sv create mode 100644 src/fuse_ctrl/rtl/otp_ctrl.sv_orig create mode 100644 src/fuse_ctrl/rtl/otp_ctrl_axi_pkg.sv create mode 100644 src/fuse_ctrl/rtl/otp_ctrl_dai.sv create mode 100644 src/fuse_ctrl/rtl/otp_ctrl_ecc_reg.sv create mode 100644 src/fuse_ctrl/rtl/otp_ctrl_kdi.sv create mode 100644 src/fuse_ctrl/rtl/otp_ctrl_lci.sv create mode 100644 src/fuse_ctrl/rtl/otp_ctrl_lfsr_timer.sv create mode 100644 src/fuse_ctrl/rtl/otp_ctrl_part_buf.sv create mode 100755 src/fuse_ctrl/rtl/otp_ctrl_part_pkg.sv create mode 100644 src/fuse_ctrl/rtl/otp_ctrl_part_unbuf.sv create mode 100644 src/fuse_ctrl/rtl/otp_ctrl_pkg.sv create mode 100644 src/fuse_ctrl/rtl/otp_ctrl_scrmbl.sv create mode 100644 src/fuse_ctrl/rtl/otp_ctrl_token_const.sv create mode 100644 src/fuse_ctrl/rtl/otp_ctrl_top.sv diff --git a/src/axi/rtl/axi_pkg.sv b/src/axi/rtl/axi_pkg.sv index 43022e75d..499674c12 100644 --- a/src/axi/rtl/axi_pkg.sv +++ b/src/axi/rtl/axi_pkg.sv @@ -15,6 +15,21 @@ package axi_pkg; + localparam int AXI_DW = 32; + localparam int AXI_AW = 32; + localparam int AXI_IW = 1; + localparam int AXI_BC = AXI_DW/8; + localparam int BW = $clog2(BC); + + // Data that is returned upon an a TL-UL error belonging to an instruction fetch. + // Note that this data will be returned with the correct bus integrity value. + parameter logic [top_pkg::TL_DW-1:0] DataWhenInstrError = '0; + // Data that is returned upon an a TL-UL error not belonging to an instruction fetch. + // Note that this data will be returned with the correct bus integrity value. + parameter logic [top_pkg::TL_DW-1:0] DataWhenError = {top_pkg::TL_DW{1'b1}}; + + + // AXI Burst Enum typedef enum logic [1:0] { AXI_BURST_FIXED = 2'b00, diff --git a/src/caliptra_prim/config/caliptra_prim.vf b/src/caliptra_prim/config/caliptra_prim.vf index 59740aec8..115024c2b 100644 --- a/src/caliptra_prim/config/caliptra_prim.vf +++ b/src/caliptra_prim/config/caliptra_prim.vf @@ -60,3 +60,4 @@ ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_arbiter_ppc.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_sum_tree.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_subreg_ext.sv ${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_edge_detector.sv +${CALIPTRA_ROOT}/src/caliptra_prim/rtl/caliptra_prim_blanker.sv diff --git a/src/caliptra_prim/config/compile.yml b/src/caliptra_prim/config/compile.yml index 70fac1887..504be8c71 100644 --- a/src/caliptra_prim/config/compile.yml +++ b/src/caliptra_prim/config/compile.yml @@ -71,4 +71,5 @@ targets: - $COMPILE_ROOT/rtl/caliptra_prim_sum_tree.sv - $COMPILE_ROOT/rtl/caliptra_prim_subreg_ext.sv - $COMPILE_ROOT/rtl/caliptra_prim_edge_detector.sv + - $COMPILE_ROOT/rtl/caliptra_prim_blanker.sv tops: [caliptra_prim] diff --git a/src/caliptra_prim/rtl/caliptra_prim_blanker.sv b/src/caliptra_prim/rtl/caliptra_prim_blanker.sv new file mode 100644 index 000000000..4e7a7f563 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_blanker.sv @@ -0,0 +1,20 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Convenience module for wrapping prim_and2 for use in blanking. +// When en_i == 1 the input is fed through to the output. +// When en_i == 0 the output is 0. +module calipra_prim_blanker #( + parameter int Width = 1 +) ( + input logic [Width-1:0] in_i, + input logic en_i, + output logic [Width-1:0] out_o +); + caliptra_prim_and2 #(.Width(Width)) u_blank_and ( + .in0_i(in_i), + .in1_i({Width{en_i}}), + .out_o + ); +endmodule diff --git a/src/fuse_ctrl/config/config.yaml b/src/fuse_ctrl/config/config.yaml new file mode 100644 index 000000000..6c362e2ab --- /dev/null +++ b/src/fuse_ctrl/config/config.yaml @@ -0,0 +1,33 @@ +--- +provides: [fc_ctrl] +schema_version: 2.4.0 +requires: + - caliptra_prim +targets: + tb: + directories: + files: + rtl: + directories: [$COMPILE_ROOT/rtl] + files: + - $COMPILE_ROOT/rtl/axi_adapter_sram.sv + - $COMPILE_ROOT/rtl/axi_lc_gate.sv + - $COMPILE_ROOT/rtl/axi_sram_byte.sv + - $COMPILE_ROOT/rtl/caliptra_otp_ctrl_core_reg_top.sv + - $COMPILE_ROOT/rtl/caliptra_otp_ctrl_prim_reg_top.sv + - $COMPILE_ROOT/rtl/caliptra_otp_ctrl_reg_pkg.sv + - $COMPILE_ROOT/rtl/otp_ctrl_axi_pkg.sv + - $COMPILE_ROOT/rtl/otp_ctrl_dai.sv + - $COMPILE_ROOT/rtl/otp_ctrl_ecc_reg.sv + - $COMPILE_ROOT/rtl/otp_ctrl_kdi.sv + - $COMPILE_ROOT/rtl/otp_ctrl_lci.sv + - $COMPILE_ROOT/rtl/otp_ctrl_lfsr_timer.sv + - $COMPILE_ROOT/rtl/otp_ctrl_part_buf.sv + - $COMPILE_ROOT/rtl/otp_ctrl_part_pkg.sv + - $COMPILE_ROOT/rtl/otp_ctrl_part_unbuf.sv + - $COMPILE_ROOT/rtl/otp_ctrl_pkg.sv + - $COMPILE_ROOT/rtl/otp_ctrl_scrmbl.sv + - $COMPILE_ROOT/rtl/otp_ctrl.sv + - $COMPILE_ROOT/rtl/otp_ctrl.sv_orig + - $COMPILE_ROOT/rtl/otp_ctrl_token_const.sv + - $COMPILE_ROOT/rtl/otp_ctrl_top.sv diff --git a/src/fuse_ctrl/data/dif_otp_ctrl.c.tpl b/src/fuse_ctrl/data/dif_otp_ctrl.c.tpl new file mode 100755 index 000000000..12882f140 --- /dev/null +++ b/src/fuse_ctrl/data/dif_otp_ctrl.c.tpl @@ -0,0 +1,734 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +${gen_comment} +<% +from topgen.lib import Name + +parts = otp_mmap.config["partitions"] +digest_parts = [part for part in parts if + part["hw_digest"] or part["sw_digest"]] +read_locked_csr_parts = [part for part in parts if part["read_lock"] == "CSR"] +secret_parts = [part for part in parts if part["secret"]] +%>\ +#include "sw/device/lib/dif/dif_otp_ctrl.h" + +#include + +#include "sw/device/lib/base/bitfield.h" +#include "sw/device/lib/base/macros.h" +#include "sw/device/lib/dif/dif_base.h" + +#include "otp_ctrl_regs.h" // Generated. + +/** + * Checks if integrity/consistency-check-related operations are locked. + * + * This is a convenience function to avoid superfluous error-checking in all the + * functions that can be locked out by this register. + * + * @param check_config True to check the config regwen. False to check the + * trigger regwen. + */ +static bool checks_are_locked(const dif_otp_ctrl_t *otp, bool check_config) { + ptrdiff_t reg_offset = check_config + ? OTP_CTRL_CHECK_REGWEN_REG_OFFSET + : OTP_CTRL_CHECK_TRIGGER_REGWEN_REG_OFFSET; + size_t regwen_bit = + check_config ? OTP_CTRL_CHECK_REGWEN_CHECK_REGWEN_BIT + : OTP_CTRL_CHECK_TRIGGER_REGWEN_CHECK_TRIGGER_REGWEN_BIT; + uint32_t locked = mmio_region_read32(otp->base_addr, reg_offset); + return !bitfield_bit32_read(locked, regwen_bit); +} + +dif_result_t dif_otp_ctrl_configure(const dif_otp_ctrl_t *otp, + dif_otp_ctrl_config_t config) { + if (otp == NULL) { + return kDifBadArg; + } + if (checks_are_locked(otp, /*check_config=*/true)) { + return kDifLocked; + } + + mmio_region_write32(otp->base_addr, OTP_CTRL_CHECK_TIMEOUT_REG_OFFSET, + config.check_timeout); + mmio_region_write32(otp->base_addr, + OTP_CTRL_INTEGRITY_CHECK_PERIOD_REG_OFFSET, + config.integrity_period_mask); + mmio_region_write32(otp->base_addr, + OTP_CTRL_CONSISTENCY_CHECK_PERIOD_REG_OFFSET, + config.consistency_period_mask); + + return kDifOk; +} + +dif_result_t dif_otp_ctrl_check_integrity(const dif_otp_ctrl_t *otp) { + if (otp == NULL) { + return kDifBadArg; + } + if (checks_are_locked(otp, /*check_config=*/false)) { + return kDifLocked; + } + + uint32_t reg = + bitfield_bit32_write(0, OTP_CTRL_CHECK_TRIGGER_INTEGRITY_BIT, true); + mmio_region_write32(otp->base_addr, OTP_CTRL_CHECK_TRIGGER_REG_OFFSET, reg); + + return kDifOk; +} + +dif_result_t dif_otp_ctrl_check_consistency(const dif_otp_ctrl_t *otp) { + if (otp == NULL) { + return kDifBadArg; + } + if (checks_are_locked(otp, /*check_config=*/false)) { + return kDifLocked; + } + + uint32_t reg = + bitfield_bit32_write(0, OTP_CTRL_CHECK_TRIGGER_CONSISTENCY_BIT, true); + mmio_region_write32(otp->base_addr, OTP_CTRL_CHECK_TRIGGER_REG_OFFSET, reg); + + return kDifOk; +} + +dif_result_t dif_otp_ctrl_lock_dai(const dif_otp_ctrl_t *otp) { + if (otp == NULL) { + return kDifBadArg; + } + + uint32_t reg = bitfield_bit32_write( + 0, OTP_CTRL_DIRECT_ACCESS_REGWEN_DIRECT_ACCESS_REGWEN_BIT, false); + mmio_region_write32(otp->base_addr, OTP_CTRL_DIRECT_ACCESS_REGWEN_REG_OFFSET, + reg); + + return kDifOk; +} + +dif_result_t dif_otp_ctrl_dai_is_locked(const dif_otp_ctrl_t *otp, + bool *is_locked) { + if (otp == NULL || is_locked == NULL) { + return kDifBadArg; + } + + uint32_t reg = mmio_region_read32(otp->base_addr, + OTP_CTRL_DIRECT_ACCESS_REGWEN_REG_OFFSET); + *is_locked = !bitfield_bit32_read( + reg, OTP_CTRL_DIRECT_ACCESS_REGWEN_DIRECT_ACCESS_REGWEN_BIT); + + return kDifOk; +} + +dif_result_t dif_otp_ctrl_lock_config(const dif_otp_ctrl_t *otp) { + if (otp == NULL) { + return kDifBadArg; + } + + uint32_t reg = + bitfield_bit32_write(0, OTP_CTRL_CHECK_REGWEN_CHECK_REGWEN_BIT, false); + mmio_region_write32(otp->base_addr, OTP_CTRL_CHECK_REGWEN_REG_OFFSET, reg); + + return kDifOk; +} + +dif_result_t dif_otp_ctrl_config_is_locked(const dif_otp_ctrl_t *otp, + bool *is_locked) { + if (otp == NULL || is_locked == NULL) { + return kDifBadArg; + } + + *is_locked = checks_are_locked(otp, /*check_config=*/true); + return kDifOk; +} + +dif_result_t dif_otp_ctrl_lock_check_trigger(const dif_otp_ctrl_t *otp) { + if (otp == NULL) { + return kDifBadArg; + } + + uint32_t reg = bitfield_bit32_write( + 0, OTP_CTRL_CHECK_TRIGGER_REGWEN_CHECK_TRIGGER_REGWEN_BIT, false); + mmio_region_write32(otp->base_addr, OTP_CTRL_CHECK_TRIGGER_REGWEN_REG_OFFSET, + reg); + + return kDifOk; +} + +dif_result_t dif_otp_ctrl_check_trigger_is_locked(const dif_otp_ctrl_t *otp, + bool *is_locked) { + if (otp == NULL || is_locked == NULL) { + return kDifBadArg; + } + + *is_locked = checks_are_locked(otp, /*check_config=*/false); + return kDifOk; +} + +static bool sw_read_lock_reg_offset(dif_otp_ctrl_partition_t partition, + ptrdiff_t *reg_offset, + bitfield_bit32_index_t *index) { + switch (partition) { +% for part in read_locked_csr_parts: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_define = part_name.as_c_define() + index_line = f"*index = OTP_CTRL_{part_name_define}_READ_LOCK_{part_name_define}_READ_LOCK_BIT;" +%>\ + case kDifOtpCtrlPartition${part_name.as_camel_case()}: + *reg_offset = OTP_CTRL_${part_name_define}_READ_LOCK_REG_OFFSET; + % if len(index_line) > 80 - 6: + *index = + OTP_CTRL_${part_name_define}_READ_LOCK_${part_name_define}_READ_LOCK_BIT; + % else: + ${index_line} + % endif + break; +% endfor + default: + return false; + } + return true; +} + +dif_result_t dif_otp_ctrl_lock_reading(const dif_otp_ctrl_t *otp, + dif_otp_ctrl_partition_t partition) { + if (otp == NULL) { + return kDifBadArg; + } + + ptrdiff_t offset; + bitfield_bit32_index_t index; + if (!sw_read_lock_reg_offset(partition, &offset, &index)) { + return kDifBadArg; + } + + uint32_t busy = mmio_region_read32(otp->base_addr, + OTP_CTRL_DIRECT_ACCESS_REGWEN_REG_OFFSET); + if (!bitfield_bit32_read( + busy, OTP_CTRL_DIRECT_ACCESS_REGWEN_DIRECT_ACCESS_REGWEN_BIT)) { + return kDifUnavailable; + } + + uint32_t reg = bitfield_bit32_write(0, index, false); + mmio_region_write32(otp->base_addr, offset, reg); + + return kDifOk; +} + +dif_result_t dif_otp_ctrl_reading_is_locked(const dif_otp_ctrl_t *otp, + dif_otp_ctrl_partition_t partition, + bool *is_locked) { + if (otp == NULL || is_locked == NULL) { + return kDifBadArg; + } + + ptrdiff_t offset; + bitfield_bit32_index_t index; + if (!sw_read_lock_reg_offset(partition, &offset, &index)) { + return kDifBadArg; + } + + uint32_t reg = mmio_region_read32(otp->base_addr, offset); + *is_locked = !bitfield_bit32_read(reg, index); + return kDifOk; +} + +dif_result_t dif_otp_ctrl_get_status(const dif_otp_ctrl_t *otp, + dif_otp_ctrl_status_t *status) { + if (otp == NULL || status == NULL) { + return kDifBadArg; + } + + static const bitfield_bit32_index_t kIndices[] = { +% for part in parts: +<% + part_name = Name.from_snake_case(part["name"]) + lhs = f'[kDifOtpCtrlStatusCode{part_name.as_camel_case()}Error]' + rhs = f'OTP_CTRL_STATUS_{part_name.as_c_define()}_ERROR_BIT' + line = f'{lhs} = {rhs},' +%>\ + % if len(line) > 80 - 6: + ${lhs} = + ${rhs}, + % else: + ${line} + % endif +% endfor + [kDifOtpCtrlStatusCodeDaiError] = OTP_CTRL_STATUS_DAI_ERROR_BIT, + [kDifOtpCtrlStatusCodeLciError] = OTP_CTRL_STATUS_LCI_ERROR_BIT, + [kDifOtpCtrlStatusCodeTimeoutError] = OTP_CTRL_STATUS_TIMEOUT_ERROR_BIT, + [kDifOtpCtrlStatusCodeLfsrError] = OTP_CTRL_STATUS_LFSR_FSM_ERROR_BIT, + [kDifOtpCtrlStatusCodeScramblingError] = + OTP_CTRL_STATUS_SCRAMBLING_FSM_ERROR_BIT, + [kDifOtpCtrlStatusCodeKdfError] = OTP_CTRL_STATUS_KEY_DERIV_FSM_ERROR_BIT, + [kDifOtpCtrlStatusCodeBusIntegError] = + OTP_CTRL_STATUS_BUS_INTEG_ERROR_BIT, + [kDifOtpCtrlStatusCodeDaiIdle] = OTP_CTRL_STATUS_DAI_IDLE_BIT, + [kDifOtpCtrlStatusCodeCheckPending] = OTP_CTRL_STATUS_CHECK_PENDING_BIT, + }; + + status->codes = 0; + uint32_t status_code = + mmio_region_read32(otp->base_addr, OTP_CTRL_STATUS_REG_OFFSET); + for (int i = 0; i < ARRAYSIZE(kIndices); ++i) { + // If the error is not present at all, we clear its cause bit if relevant, + // and bail immediately. + if (!bitfield_bit32_read(status_code, kIndices[i])) { + if (i <= kDifOtpCtrlStatusCodeHasCauseLast) { + status->causes[i] = kDifOtpCtrlErrorOk; + } + continue; + } + + status->codes = + bitfield_bit32_write(status->codes, (bitfield_bit32_index_t)i, true); + + if (i <= kDifOtpCtrlStatusCodeHasCauseLast) { + bitfield_field32_t field; + field = (bitfield_field32_t){ + .mask = OTP_CTRL_ERR_CODE_0_ERR_CODE_0_MASK, + .index = OTP_CTRL_ERR_CODE_0_ERR_CODE_0_OFFSET, + }; + + ptrdiff_t address = + OTP_CTRL_ERR_CODE_0_REG_OFFSET + i * (ptrdiff_t)sizeof(uint32_t); + uint32_t error_code = mmio_region_read32(otp->base_addr, address); + + dif_otp_ctrl_error_t err; + switch (bitfield_field32_read(error_code, field)) { + case OTP_CTRL_ERR_CODE_0_ERR_CODE_0_VALUE_NO_ERROR: + err = kDifOtpCtrlErrorOk; + break; + case OTP_CTRL_ERR_CODE_0_ERR_CODE_0_VALUE_MACRO_ERROR: + err = kDifOtpCtrlErrorMacroUnspecified; + break; + case OTP_CTRL_ERR_CODE_0_ERR_CODE_0_VALUE_MACRO_ECC_CORR_ERROR: + err = kDifOtpCtrlErrorMacroRecoverableRead; + break; + case OTP_CTRL_ERR_CODE_0_ERR_CODE_0_VALUE_MACRO_ECC_UNCORR_ERROR: + err = kDifOtpCtrlErrorMacroUnrecoverableRead; + break; + case OTP_CTRL_ERR_CODE_0_ERR_CODE_0_VALUE_MACRO_WRITE_BLANK_ERROR: + err = kDifOtpCtrlErrorMacroBlankCheckFailed; + break; + case OTP_CTRL_ERR_CODE_0_ERR_CODE_0_VALUE_ACCESS_ERROR: + err = kDifOtpCtrlErrorLockedAccess; + break; + case OTP_CTRL_ERR_CODE_0_ERR_CODE_0_VALUE_CHECK_FAIL_ERROR: + err = kDifOtpCtrlErrorBackgroundCheckFailed; + break; + case OTP_CTRL_ERR_CODE_0_ERR_CODE_0_VALUE_FSM_STATE_ERROR: + err = kDifOtpCtrlErrorFsmBadState; + break; + default: + return kDifError; + } + status->causes[i] = err; + } + } + + return kDifOk; +} + +typedef struct partition_info { + /** + * The absolute OTP address at which this partition starts. + */ + uint32_t start_addr; + /** + * The length of this partition, in bytes, including the digest. + * + * If the partition has a digest, it is expected to be at address + * `start_addr + len - sizeof(uint64_t)`. + */ + uint32_t len; + /** + * The alignment mask for this partition. + * + * A valid address for this partition must be such that + * `addr & align_mask == 0`. + */ + uint32_t align_mask; + + /** + * Whether this is a software-managed partition with a software-managed + * digest. + */ + bool is_software; + + /** + * Whether this partition has a digest field. + */ + bool has_digest; + + /** + * Whether this partition is the lifecycle partition. + */ + bool is_lifecycle; +} partition_info_t; + +// This is generates too many lines with different formatting variants, so +// We opt to just disable formatting. +// clang-format off +static const partition_info_t kPartitions[] = { +% for part in parts: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() + part_name_define = part_name.as_c_define() + has_digest = part["hw_digest"] or part["sw_digest"] + is_lifecycle = part["variant"] == "LifeCycle" + is_software = part["variant"] == "Unbuffered" +%>\ + [kDifOtpCtrlPartition${part_name_camel}] = { + .start_addr = OTP_CTRL_PARAM_${part_name_define}_OFFSET, + .len = OTP_CTRL_PARAM_${part_name_define}_SIZE, + .align_mask = ${"0x7" if part in secret_parts else "0x3"}, + .is_software = ${"true" if is_software else "false"}, + .has_digest = ${"true" if has_digest else "false"}, + .is_lifecycle = ${"true" if is_lifecycle else "false"}}, +% endfor +}; +// clang-format on + +dif_result_t dif_otp_ctrl_relative_address(dif_otp_ctrl_partition_t partition, + uint32_t abs_address, + uint32_t *relative_address) { + *relative_address = 0; + + if (partition >= ARRAYSIZE(kPartitions)) { + return kDifBadArg; + } + + if ((abs_address & kPartitions[partition].align_mask) != 0) { + return kDifUnaligned; + } + + if (abs_address < kPartitions[partition].start_addr) { + return kDifOutOfRange; + } + + *relative_address = abs_address - kPartitions[partition].start_addr; + if (*relative_address >= kPartitions[partition].len) { + *relative_address = 0; + return kDifOutOfRange; + } + + return kDifOk; +} + +dif_result_t dif_otp_ctrl_dai_read_start(const dif_otp_ctrl_t *otp, + dif_otp_ctrl_partition_t partition, + uint32_t address) { + if (otp == NULL || partition >= ARRAYSIZE(kPartitions)) { + return kDifBadArg; + } + + if ((address & kPartitions[partition].align_mask) != 0) { + return kDifUnaligned; + } + + if (address >= kPartitions[partition].len) { + return kDifOutOfRange; + } + + uint32_t busy = mmio_region_read32(otp->base_addr, + OTP_CTRL_DIRECT_ACCESS_REGWEN_REG_OFFSET); + if (!bitfield_bit32_read( + busy, OTP_CTRL_DIRECT_ACCESS_REGWEN_DIRECT_ACCESS_REGWEN_BIT)) { + return kDifUnavailable; + } + + address += kPartitions[partition].start_addr; + mmio_region_write32(otp->base_addr, OTP_CTRL_DIRECT_ACCESS_ADDRESS_REG_OFFSET, + address); + + uint32_t cmd = + bitfield_bit32_write(0, OTP_CTRL_DIRECT_ACCESS_CMD_RD_BIT, true); + mmio_region_write32(otp->base_addr, OTP_CTRL_DIRECT_ACCESS_CMD_REG_OFFSET, + cmd); + + return kDifOk; +} + +dif_result_t dif_otp_ctrl_dai_read32_end(const dif_otp_ctrl_t *otp, + uint32_t *value) { + if (otp == NULL || value == NULL) { + return kDifBadArg; + } + + uint32_t busy = mmio_region_read32(otp->base_addr, + OTP_CTRL_DIRECT_ACCESS_REGWEN_REG_OFFSET); + if (!bitfield_bit32_read( + busy, OTP_CTRL_DIRECT_ACCESS_REGWEN_DIRECT_ACCESS_REGWEN_BIT)) { + return kDifUnavailable; + } + + *value = mmio_region_read32(otp->base_addr, + OTP_CTRL_DIRECT_ACCESS_RDATA_0_REG_OFFSET); + return kDifOk; +} + +dif_result_t dif_otp_ctrl_dai_read64_end(const dif_otp_ctrl_t *otp, + uint64_t *value) { + if (otp == NULL || value == NULL) { + return kDifBadArg; + } + + uint32_t busy = mmio_region_read32(otp->base_addr, + OTP_CTRL_DIRECT_ACCESS_REGWEN_REG_OFFSET); + if (!bitfield_bit32_read( + busy, OTP_CTRL_DIRECT_ACCESS_REGWEN_DIRECT_ACCESS_REGWEN_BIT)) { + return kDifUnavailable; + } + + *value = mmio_region_read32(otp->base_addr, + OTP_CTRL_DIRECT_ACCESS_RDATA_1_REG_OFFSET); + *value <<= 32; + *value |= mmio_region_read32(otp->base_addr, + OTP_CTRL_DIRECT_ACCESS_RDATA_0_REG_OFFSET); + return kDifOk; +} + +dif_result_t dif_otp_ctrl_dai_program32(const dif_otp_ctrl_t *otp, + dif_otp_ctrl_partition_t partition, + uint32_t address, uint32_t value) { + if (otp == NULL || partition >= ARRAYSIZE(kPartitions)) { + return kDifBadArg; + } + + // Ensure that we are writing to a 32-bit-access partition by checking that + // the alignment mask is 0b11. + // + // Note furthermore that the LC partition is *not* writeable, so we eject + // here. + if (kPartitions[partition].align_mask != 0x3 || + kPartitions[partition].is_lifecycle) { + return kDifError; + } + + if ((address & kPartitions[partition].align_mask) != 0) { + return kDifUnaligned; + } + + // NOTE: The bounds check is tightened here, since we disallow writing the + // digest directly. If the partition does not have a digest, no tightening is + // needed. + size_t digest_size = kPartitions[partition].has_digest * sizeof(uint64_t); + if (address >= kPartitions[partition].len - digest_size) { + return kDifOutOfRange; + } + + uint32_t busy = mmio_region_read32(otp->base_addr, + OTP_CTRL_DIRECT_ACCESS_REGWEN_REG_OFFSET); + if (!bitfield_bit32_read( + busy, OTP_CTRL_DIRECT_ACCESS_REGWEN_DIRECT_ACCESS_REGWEN_BIT)) { + return kDifUnavailable; + } + + address += kPartitions[partition].start_addr; + mmio_region_write32(otp->base_addr, OTP_CTRL_DIRECT_ACCESS_ADDRESS_REG_OFFSET, + address); + + mmio_region_write32(otp->base_addr, OTP_CTRL_DIRECT_ACCESS_WDATA_0_REG_OFFSET, + value); + + uint32_t cmd = + bitfield_bit32_write(0, OTP_CTRL_DIRECT_ACCESS_CMD_WR_BIT, true); + mmio_region_write32(otp->base_addr, OTP_CTRL_DIRECT_ACCESS_CMD_REG_OFFSET, + cmd); + + return kDifOk; +} + +dif_result_t dif_otp_ctrl_dai_program64(const dif_otp_ctrl_t *otp, + dif_otp_ctrl_partition_t partition, + uint32_t address, uint64_t value) { + if (otp == NULL || partition >= ARRAYSIZE(kPartitions)) { + return kDifBadArg; + } + + // Ensure that we are writing to a 64-bit-access partition by checking that + // the alignment mask is 0b111. + if (kPartitions[partition].align_mask != 0x7) { + return kDifError; + } + + if ((address & kPartitions[partition].align_mask) != 0) { + return kDifUnaligned; + } + + // NOTE: The bounds check is tightened here, since we disallow writing the + // digest directly. + size_t digest_size = sizeof(uint64_t); + if (address >= kPartitions[partition].len - digest_size) { + return kDifOutOfRange; + } + + uint32_t busy = mmio_region_read32(otp->base_addr, + OTP_CTRL_DIRECT_ACCESS_REGWEN_REG_OFFSET); + if (!bitfield_bit32_read( + busy, OTP_CTRL_DIRECT_ACCESS_REGWEN_DIRECT_ACCESS_REGWEN_BIT)) { + return kDifUnavailable; + } + + address += kPartitions[partition].start_addr; + mmio_region_write32(otp->base_addr, OTP_CTRL_DIRECT_ACCESS_ADDRESS_REG_OFFSET, + address); + + mmio_region_write32(otp->base_addr, OTP_CTRL_DIRECT_ACCESS_WDATA_0_REG_OFFSET, + value & UINT32_MAX); + mmio_region_write32(otp->base_addr, OTP_CTRL_DIRECT_ACCESS_WDATA_1_REG_OFFSET, + value >> 32); + + uint32_t cmd = + bitfield_bit32_write(0, OTP_CTRL_DIRECT_ACCESS_CMD_WR_BIT, true); + mmio_region_write32(otp->base_addr, OTP_CTRL_DIRECT_ACCESS_CMD_REG_OFFSET, + cmd); + + return kDifOk; +} + +dif_result_t dif_otp_ctrl_dai_digest(const dif_otp_ctrl_t *otp, + dif_otp_ctrl_partition_t partition, + uint64_t digest) { + if (otp == NULL || partition >= ARRAYSIZE(kPartitions)) { + return kDifBadArg; + } + + // Not all partitions have a digest. + if (!kPartitions[partition].has_digest) { + return kDifError; + } + + // For software partitions, the digest must be nonzero; for all other + // partitions it must be zero. + bool is_sw = kPartitions[partition].is_software; + if (is_sw == (digest == 0)) { + return kDifBadArg; + } + + uint32_t busy = mmio_region_read32(otp->base_addr, + OTP_CTRL_DIRECT_ACCESS_REGWEN_REG_OFFSET); + if (!bitfield_bit32_read( + busy, OTP_CTRL_DIRECT_ACCESS_REGWEN_DIRECT_ACCESS_REGWEN_BIT)) { + return kDifUnavailable; + } + + uint32_t address = kPartitions[partition].start_addr; + if (is_sw) { + address += kPartitions[partition].len - sizeof(digest); + } + mmio_region_write32(otp->base_addr, OTP_CTRL_DIRECT_ACCESS_ADDRESS_REG_OFFSET, + address); + + if (digest != 0) { + mmio_region_write32(otp->base_addr, + OTP_CTRL_DIRECT_ACCESS_WDATA_0_REG_OFFSET, + digest & 0xffffffff); + mmio_region_write32(otp->base_addr, + OTP_CTRL_DIRECT_ACCESS_WDATA_1_REG_OFFSET, + digest >> 32); + } + + bitfield_bit32_index_t cmd_bit = is_sw + ? OTP_CTRL_DIRECT_ACCESS_CMD_WR_BIT + : OTP_CTRL_DIRECT_ACCESS_CMD_DIGEST_BIT; + uint32_t cmd = bitfield_bit32_write(0, cmd_bit, true); + mmio_region_write32(otp->base_addr, OTP_CTRL_DIRECT_ACCESS_CMD_REG_OFFSET, + cmd); + + return kDifOk; +} + +static bool get_digest_regs(dif_otp_ctrl_partition_t partition, ptrdiff_t *reg0, + ptrdiff_t *reg1) { + switch (partition) { +% for part in digest_parts: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_define = part_name.as_c_define() +%>\ + case kDifOtpCtrlPartition${part_name.as_camel_case()}: + *reg0 = OTP_CTRL_${part_name_define}_DIGEST_0_REG_OFFSET; + *reg1 = OTP_CTRL_${part_name_define}_DIGEST_1_REG_OFFSET; + break; +% endfor + default: + return false; + } + + return true; +} + +dif_result_t dif_otp_ctrl_is_digest_computed(const dif_otp_ctrl_t *otp, + dif_otp_ctrl_partition_t partition, + bool *is_computed) { + if (otp == NULL || is_computed == NULL) { + return kDifBadArg; + } + + ptrdiff_t reg0, reg1; + if (!get_digest_regs(partition, ®0, ®1)) { + return kDifBadArg; + } + + uint64_t value = mmio_region_read32(otp->base_addr, reg1); + value <<= 32; + value |= mmio_region_read32(otp->base_addr, reg0); + + *is_computed = value != 0; + + return kDifOk; +} + +dif_result_t dif_otp_ctrl_get_digest(const dif_otp_ctrl_t *otp, + dif_otp_ctrl_partition_t partition, + uint64_t *digest) { + if (otp == NULL || digest == NULL) { + return kDifBadArg; + } + + ptrdiff_t reg0, reg1; + if (!get_digest_regs(partition, ®0, ®1)) { + return kDifBadArg; + } + + uint64_t value = mmio_region_read32(otp->base_addr, reg1); + value <<= 32; + value |= mmio_region_read32(otp->base_addr, reg0); + + if (value == 0) { + return kDifError; + } + *digest = value; + + return kDifOk; +} + +dif_result_t dif_otp_ctrl_read_blocking(const dif_otp_ctrl_t *otp, + dif_otp_ctrl_partition_t partition, + uint32_t address, uint32_t *buf, + size_t len) { + if (otp == NULL || partition >= ARRAYSIZE(kPartitions) || buf == NULL) { + return kDifBadArg; + } + + if (!kPartitions[partition].is_software) { + return kDifError; + } + + if ((address & kPartitions[partition].align_mask) != 0) { + return kDifUnaligned; + } + + if (address + len >= kPartitions[partition].len) { + return kDifOutOfRange; + } + + uint32_t reg_offset = OTP_CTRL_SW_CFG_WINDOW_REG_OFFSET + + kPartitions[partition].start_addr + address; + mmio_region_memcpy_from_mmio32(otp->base_addr, reg_offset, buf, + len * sizeof(uint32_t)); + return kDifOk; +} diff --git a/src/fuse_ctrl/data/dif_otp_ctrl.h.tpl b/src/fuse_ctrl/data/dif_otp_ctrl.h.tpl new file mode 100755 index 000000000..e860bf6dd --- /dev/null +++ b/src/fuse_ctrl/data/dif_otp_ctrl.h.tpl @@ -0,0 +1,615 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +${gen_comment} +<% +from topgen.lib import Name + +parts = otp_mmap.config["partitions"] +digest_parts = [part for part in parts if + part["hw_digest"] == "true" or part["sw_digest"] == "true"] +read_locked_csr_parts = [part for part in parts if part["read_lock"] == "CSR"] +secret_parts = [part for part in parts if part["secret"] == "true"] +%>\ +#ifndef OPENTITAN_SW_DEVICE_LIB_DIF_DIF_OTP_CTRL_H_ +#define OPENTITAN_SW_DEVICE_LIB_DIF_DIF_OTP_CTRL_H_ + +/** + * @file + * @brief OTP Controller Device Interface + * Functions + */ + +#include + +#include "sw/device/lib/base/macros.h" +#include "sw/device/lib/base/mmio.h" +#include "sw/device/lib/dif/dif_base.h" + +#include "sw/device/lib/dif/autogen/dif_otp_ctrl_autogen.h" + +// Header Extern Guard (so header can be used from C and C++) +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +/** + * A partition within OTP memory. + */ +typedef enum dif_otp_ctrl_partition { +% for part in parts: +<% + part_name = Name.from_snake_case(part["name"]) + short_desc = part["desc"].split(".")[0].strip().replace("\n", " ") + long_desc_lines = part["desc"].split(".", 1)[1].strip().splitlines() + long_desc = "\n".join([" *" + (" " if line else "") + line for + line in long_desc_lines]) +%>\ + /** + * ${short_desc}. + * + % if long_desc: +${long_desc} + %endif + */ + kDifOtpCtrlPartition${part_name.as_camel_case()}, +% endfor +} dif_otp_ctrl_partition_t; + +/** + * Runtime configuration for OTP. + * + * This struct describes runtime information for one-time configuration of the + * hardware. + */ +typedef struct dif_otp_ctrl_config { + /** + * The timeout for an integrity or consistency check to succeed, in cycles. + * + * 100'000 is recommended as a minimum safe value. + */ + uint32_t check_timeout; + /** + * A mask for the pseudo-random integrity check period. + * + * The value of this mask limits the period of the integrity check; when the + * pseudo-random period is computed, this mask is applied to limit it. For + * example, a value of 0x3'ffff would correspond to a maximum period of about + * 2.8s at 24MHz. + * + * A value of zero disables the check. + */ + uint32_t integrity_period_mask; + /** + * A mask for the pseudo-random consistency check period. + * + * The value of this mask limits the period of the consistency check; when the + * pseudo-random period is computed, this mask is applied to limit it. For + * example, a value of 0x3ff'ffff would correspond to a maximum period of + * about 716s at 24MHz. + * + * A value of zero disables the check. + */ + uint32_t consistency_period_mask; +} dif_otp_ctrl_config_t; + +/** + * A hardware-level status code. + */ +typedef enum dif_otp_ctrl_status_code { + // NOTE: This enum's API *requires* that all "error"-like codes (that is, + // those which have associated cause registers) be a prefix of the enum + // values. + // + // Note furthermore that these enum variants are intended as bit indices, so + // their values should not be randomized. +% for part in parts: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() +%>\ + /** + * Indicates an error occurred in the `${part_name_camel}` partition. + */ + kDifOtpCtrlStatusCode${part_name_camel}Error${" = 0" if loop.first else ""}, +% endfor + /** + * Indicates an error occurred in the direct access interface. + */ + kDifOtpCtrlStatusCodeDaiError, + /** + * Indicates an error occurred in the lifecycle interface. + */ + kDifOtpCtrlStatusCodeLciError, + /** + * This is not a status code; rather, it represents the last error code which + * has a corresponding "cause" register. + * + * See `dif_otp_ctrl_status_t` for information on how to use this. + */ + kDifOtpCtrlStatusCodeHasCauseLast = kDifOtpCtrlStatusCodeLciError, + /** + * Indicates that an integrity or consistency check has timed out. + * + * This error is unrecoverable. + */ + kDifOtpCtrlStatusCodeTimeoutError, + /** + * Indicates that the LFSR that generates pseudo-random integrity and + * consistency checks is in a bad state. + * + * This error is unrecoverable. + */ + kDifOtpCtrlStatusCodeLfsrError, + /** + * Indicates that the scrambling hardware is in a bad state. + * + * This error is unrecoverable. + */ + kDifOtpCtrlStatusCodeScramblingError, + /** + * Indicates that the key derivation hardware is in a bad state. + * + * This error is unrecoverable. + */ + kDifOtpCtrlStatusCodeKdfError, + /** + * Indicates a bus integrity error. + * + * This error will raise an alert. + */ + kDifOtpCtrlStatusCodeBusIntegError, + /** + * Indicates that the direct access interface is idle. + */ + kDifOtpCtrlStatusCodeDaiIdle, + /** + * Indicates that an integrity or consistency check is currently pending. + */ + kDifOtpCtrlStatusCodeCheckPending, +} dif_otp_ctrl_status_code_t; + +/** + * A hardware-level error code, associated with a particular error defined in + * `dif_otp_ctrl_status_t`. + */ +typedef enum dif_otp_ctrl_error { + /** + * Indicates no error. + */ + kDifOtpCtrlErrorOk, + /** + * Indicates that an OTP macro command was invalid or did not + * complete successfully. + * + * This error indicates non-recoverable hardware malfunction. + */ + kDifOtpCtrlErrorMacroUnspecified, + /** + * Indicates a recoverable error during a read operation. + * + * A followup read should work as expected. + */ + kDifOtpCtrlErrorMacroRecoverableRead, + /** + * Indicates an unrecoverable error during a read operation. + * + * This error indicates non-recoverable hardware malfunction. + */ + kDifOtpCtrlErrorMacroUnrecoverableRead, + /** + * Indicates that the blank write check failed during a write operation. + */ + kDifOtpCtrlErrorMacroBlankCheckFailed, + /** + * Indicates a locked memory region was accessed. + */ + kDifOtpCtrlErrorLockedAccess, + /** + * Indicates a parity, integrity or consistency check failed in the buffer + * registers. + * + * This error indicates non-recoverable hardware malfunction. + */ + kDifOtpCtrlErrorBackgroundCheckFailed, + /** + * Indicates that the FSM of the controller is in a bad state or that the + * controller's FSM has been moved into its terminal state due to escalation + * via the alert subsystem. + * + * This error indicates that the device has been glitched by an attacker. + */ + kDifOtpCtrlErrorFsmBadState, +} dif_otp_ctrl_error_t; + +/** + * The overall status of the OTP controller. + * + * See `dif_otp_ctrl_get_status()`. + */ +typedef struct dif_otp_ctrl_status { + /** + * Currently active statuses, given as a bit vector. To check whether a + * particular status code was returned, write + * + * bool has_code = (status.codes >> kMyStatusCode) & 1; + * + * Note that it is possible to quickly check that the controller is idle and + * error-free by writing + * + * bool is_ok = status.codes == (1 << kDifOtpStatusCodeDaiIdle); + */ + uint32_t codes; + /** + * A list of root causes for each error status code. + * + * If the error status code `error` is present in `codes`, and + * `error <= kDifOtpCtrlStatusCodeHasCauseLast`, then `causes[error]` + * will contain its root cause. + */ + dif_otp_ctrl_error_t causes[kDifOtpCtrlStatusCodeHasCauseLast + 1]; +} dif_otp_ctrl_status_t; + +/** + * Configures OTP with runtime information. + * + * This function should need to be called at most once for the lifetime of + * `otp`. + * + * @param otp An OTP handle. + * @param config Runtime configuration parameters. + * @return The result of the operation. + */ +OT_WARN_UNUSED_RESULT +dif_result_t dif_otp_ctrl_configure(const dif_otp_ctrl_t *otp, + dif_otp_ctrl_config_t config); + +/** + * Runs an integrity check on the OTP hardware. + * + * This function can be used to trigger an integrity check independent of the + * pseudo-random hardware-generated checks. + * + * @param otp An OTP handle. + * @return The result of the operation. + */ +OT_WARN_UNUSED_RESULT +dif_result_t dif_otp_ctrl_check_integrity(const dif_otp_ctrl_t *otp); + +/** + * Runs a consistency check on the OTP hardware. + * + * This function can be used to trigger a consistency check independent of the + * pseudo-random hardware-generated checks. + * + * @param otp An OTP handle. + * @return The result of the operation. + */ +OT_WARN_UNUSED_RESULT +dif_result_t dif_otp_ctrl_check_consistency(const dif_otp_ctrl_t *otp); + +/** + * Locks out access to the direct access interface registers. + * + * This function is idempotent: calling it while functionality is locked will + * have no effect and return `kDifOk`. + * + * @param otp An OTP handle. + * @return The result of the operation. + */ +OT_WARN_UNUSED_RESULT +dif_result_t dif_otp_ctrl_lock_dai(const dif_otp_ctrl_t *otp); + +/** + * Checks whether access to the direct access interface is locked. + * + * Note that besides locking the DAI out until the next reset using the + * dif_otp_ctrl_lock_dai function, the DAI is also temporarily locked by the + * HW itself when it is busy processing a DAI command. In such a case, the + * kDifOtpCtrlStatusCodeDaiIdle status bit will be set to 0 as well. + * + * @param otp An OTP handle. + * @param[out] is_locked Out-param for the locked state. + * @return The result of the operation. + */ +OT_WARN_UNUSED_RESULT +dif_result_t dif_otp_ctrl_dai_is_locked(const dif_otp_ctrl_t *otp, + bool *is_locked); + +/** + * Locks out `dif_otp_ctrl_configure()` function. + * + * This function is idempotent: calling it while functionality is locked will + * have no effect and return `kDifOk`. + * + * @param otp An OTP handle. + * @return The result of the operation. + */ +OT_WARN_UNUSED_RESULT +dif_result_t dif_otp_ctrl_lock_config(const dif_otp_ctrl_t *otp); + +/** + * Checks whether `dif_otp_ctrl_configure()` function is locked-out. + * + * @param otp An OTP handle. + * @param[out] is_locked Out-param for the locked state. + * @return The result of the operation. + */ +OT_WARN_UNUSED_RESULT +dif_result_t dif_otp_ctrl_config_is_locked(const dif_otp_ctrl_t *otp, + bool *is_locked); + +/** + * Locks out `dif_otp_ctrl_check_*()` functions. + * + * This function is idempotent: calling it while functionality is locked will + * have no effect and return `kDifOk`. + * + * @param otp An OTP handle. + * @return The result of the operation. + */ +OT_WARN_UNUSED_RESULT +dif_result_t dif_otp_ctrl_lock_check_trigger(const dif_otp_ctrl_t *otp); + +/** + * Checks whether the `dif_otp_ctrl_check_*()` functions are locked-out. + * + * @param otp An OTP handle. + * @param[out] is_locked Out-param for the locked state. + * @return The result of the operation. + */ +OT_WARN_UNUSED_RESULT +dif_result_t dif_otp_ctrl_check_trigger_is_locked(const dif_otp_ctrl_t *otp, + bool *is_locked); + +/** + * Locks out reads to a SW partition. + * + * This function should only be called on SW partitions; doing otherwise will + * return an error. + * + * Note that this is distinct from the write-locking performed by calling + * `dif_otp_ctrl_dai_digest()`. In particular, the effects of this function will + * not persist past a system reset. + * + * This function is idempotent: calling it while functionality is locked will + * have no effect and return `kDifOk`. + * + * @param otp An OTP handle. + * @param partition The SW partition to lock. + * @return The result of the operation. + */ +OT_WARN_UNUSED_RESULT +dif_result_t dif_otp_ctrl_lock_reading(const dif_otp_ctrl_t *otp, + dif_otp_ctrl_partition_t partition); + +/** + * Checks whether reads to a SW partition are locked out. + * + * This function should only be called on SW partitions; doing otherwise will + * return an error. + * + * @param otp An OTP handle. + * @param partition the SW partition to check for locking. + * @param[out] is_locked Out-param for the locked state. + * @return The result of the operation. + */ +OT_WARN_UNUSED_RESULT +dif_result_t dif_otp_ctrl_reading_is_locked(const dif_otp_ctrl_t *otp, + dif_otp_ctrl_partition_t partition, + bool *is_locked); + +/** + * Gets the current status of the OTP controller. + * + * @param otp An OTP handle. + * @param[out] status Out-param for the controller's status. + * @return The result of the operation. + */ +OT_WARN_UNUSED_RESULT +dif_result_t dif_otp_ctrl_get_status(const dif_otp_ctrl_t *otp, + dif_otp_ctrl_status_t *status); + +/** + * Calculates a `relative_address` with respect to a `partition` start + * address. + * + * @param partition The partition to use to calculate the reference start + * address. + * @param abs_address Input address relative to the OTP memory start address. + * @param[out] relative_address The result relative address with respect to the + * `partition` start address. + * @return The result of the operation. + */ +OT_WARN_UNUSED_RESULT +dif_result_t dif_otp_ctrl_relative_address(dif_otp_ctrl_partition_t partition, + uint32_t abs_address, + uint32_t *relative_address); + +/** + * Schedules a read on the Direct Access Interface. + * + * Reads are performed relative to a partition; `address` should be given + * relative to the start of `partition`. An error is returned for out-of-bounds + * access. + * + * Furthermore, `address` must be well-aligned: it must be four-byte aligned for + * normal partitions and eight-byte-aligned for secret partitions. An error is + * returned for unaligned access. + * + * @param otp An OTP handle. + * @param partition The partition to read from. + * @param address A partition-relative address to read from. + * @return The result of the operation. + */ +OT_WARN_UNUSED_RESULT +dif_result_t dif_otp_ctrl_dai_read_start(const dif_otp_ctrl_t *otp, + dif_otp_ctrl_partition_t partition, + uint32_t address); + +/** + * Gets the result of a completed 32-bit read operation on the Direct Access + * Interface. + * + * Whether this function or its 64-bit variant should be called is dependent on + * the most recent partition read from. + * + * @param otp An OTP handle. + * @param[out] value Out-param for the read value. + * @return The result of the operation. + */ +OT_WARN_UNUSED_RESULT +dif_result_t dif_otp_ctrl_dai_read32_end(const dif_otp_ctrl_t *otp, + uint32_t *value); + +/** + * Gets the result of a completed 64-bit read operation on the Direct Access + * Interface. + * + * Whether this function or its 32-bit variant should be called is dependent on + * the most recent partition read from. + * + * @param otp An OTP handle. + * @param[out] value Out-param for the read value. + * @return The result of the operation. + */ +OT_WARN_UNUSED_RESULT +dif_result_t dif_otp_ctrl_dai_read64_end(const dif_otp_ctrl_t *otp, + uint64_t *value); + +/** + * Schedules a 32-bit write on the Direct Access Interface. + * + * Writes are performed relative to a partition; `address` should be given + * relative to the start of `partition`. An error is returned for out-of-bounds + * access. + * + * Furthermore, `address` must be four-byte-aligned, and `partition` must not be + * a secret partition. An error is returned if neither condition is met. + * + * Note that this function cannot be used to program the digest at the end of a + * `SW` partition; `dif_otp_ctrl_dai_digest()` must be used instead. + * + * @param otp An OTP handle. + * @param partition The partition to program. + * @param address A partition-relative address to program. + * @param value The value to program into the OTP. + * @return The result of the operation. + */ +OT_WARN_UNUSED_RESULT +dif_result_t dif_otp_ctrl_dai_program32(const dif_otp_ctrl_t *otp, + dif_otp_ctrl_partition_t partition, + uint32_t address, uint32_t value); + +/** + * Schedules a 64-bit write on the Direct Access Interface. + * + * Writes are performed relative to a partition; `address` should be given + * relative to the start of `partition`. An error is returned for out-of-bounds + * access. + * + * Furthermore, `address` must be eight-byte-aligned, and `partition` must be + * a secret partition. An error is returned if neither condition is met. + * + * @param otp An OTP handle. + * @param partition The partition to program. + * @param address A partition-relative address to program. + * @param value The value to program into the OTP. + * @return The result of the operation. + */ +OT_WARN_UNUSED_RESULT +dif_result_t dif_otp_ctrl_dai_program64(const dif_otp_ctrl_t *otp, + dif_otp_ctrl_partition_t partition, + uint32_t address, uint64_t value); + +/** + * Schedules a hardware digest operation on the Direct Access Interface. + * + * **This operation will also lock writes for the given partition.** + * + * If `partition` is a SW partition, `digest` must be non-zero; if it is a + * partition with a hardware-managed digest, `digest` *must* be zero (since the + * digest will be generated by the hardware). An error is returned if either + * precondition is not met. + * + * This function does not work with the lifecycle state partition, and will + * return an error in that case. + * + * @param otp An OTP handle. + * @param partition The partition to digest and lock. + * @param digest The digest to program (for SW partitions). + * @return The result of the operation. + */ +OT_WARN_UNUSED_RESULT +dif_result_t dif_otp_ctrl_dai_digest(const dif_otp_ctrl_t *otp, + dif_otp_ctrl_partition_t partition, + uint64_t digest); + +/** + * Checks if the digest value for the given partition has been computed. Once a + * digest has been computed for a partition, the partition is write-locked + * (additionally, read-locked if the partition is secret). + * + * The lifecycle partition does not have a digest, and checking if this region + * has a computed digest will return an error. + * + * @param otp An OTP handle. + * @param partition The partition to check the digest of. + * @param[out] is_computed Indicates if the digest has been computed. + * @return The result of the operation. + */ +OT_WARN_UNUSED_RESULT +dif_result_t dif_otp_ctrl_is_digest_computed(const dif_otp_ctrl_t *otp, + dif_otp_ctrl_partition_t partition, + bool *is_computed); + +/** + * Gets the buffered digest value for the given partition. + * + * Note that this value is only updated when the device is reset; if the digest + * has not been computed yet, or has been computed but not since device reset, + * this function will return an error. + * + * The lifecycle partition does not have a digest and will result in an error + * being returned. + * + * @param otp An OTP handle. + * @param partition The partition to get a digest for. + * @param[out] digest Out-param for the digest. + * @return The result of the operation. + */ +OT_WARN_UNUSED_RESULT +dif_result_t dif_otp_ctrl_get_digest(const dif_otp_ctrl_t *otp, + dif_otp_ctrl_partition_t partition, + uint64_t *digest); + +/** + * Performs a memory-mapped read of the given partition, if it supports them. + * + * In particular, this function will read `len` words, starting at `address`, + * relative to the start of `partition`. + * + * The same caveats for `dif_otp_ctrl_dai_read_start()` apply to `address`; in + * addition, `address + len` must also be in-range and must not overflow. + * + * This function will block until the read completes, unlike Direct Access + * Interface functions. + * + * @param otp An OTP handle. + * @param partition The partition to read from. + * @param address A partition-relative address to read from. + * @param[out] buf A buffer of words to write read values to. + * @param len The number of words to read. + * @return The result of the operation. + */ +OT_WARN_UNUSED_RESULT +dif_result_t dif_otp_ctrl_read_blocking(const dif_otp_ctrl_t *otp, + dif_otp_ctrl_partition_t partition, + uint32_t address, uint32_t *buf, + size_t len); + +#ifdef __cplusplus +} // extern "C" +#endif // __cplusplus + +#endif // OPENTITAN_SW_DEVICE_LIB_DIF_DIF_OTP_CTRL_H_ diff --git a/src/fuse_ctrl/data/dif_otp_ctrl_unittest.cc.tpl b/src/fuse_ctrl/data/dif_otp_ctrl_unittest.cc.tpl new file mode 100755 index 000000000..a9ecd6c90 --- /dev/null +++ b/src/fuse_ctrl/data/dif_otp_ctrl_unittest.cc.tpl @@ -0,0 +1,867 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +${gen_comment} +<% +from topgen.lib import Name + +parts = otp_mmap.config["partitions"] +digest_parts = [part for part in parts if + part["hw_digest"] or part["sw_digest"]] +hw_digest_parts = [part for part in parts if part["hw_digest"]] +sw_digest_parts = [part for part in parts if part["sw_digest"]] +read_locked_csr_parts = [part for part in parts if part["read_lock"] == "CSR"] +secret_parts = [part for part in parts if part["secret"]] +%>\ +#include "sw/device/lib/dif/dif_otp_ctrl.h" + +#include +#include +#include + +#include "gtest/gtest.h" +#include "sw/device/lib/base/mmio.h" +#include "sw/device/lib/base/mock_mmio.h" +#include "sw/device/lib/dif/dif_test_base.h" + +#include "otp_ctrl_regs.h" // Generated. + +namespace dif_otp_ctrl_unittest { +namespace { +using ::mock_mmio::LeInt; +using ::mock_mmio::MmioTest; +using ::mock_mmio::MockDevice; +using ::testing::Each; +using ::testing::ElementsAre; + +class OtpTest : public testing::Test, public MmioTest { + protected: + dif_otp_ctrl_t otp_ = {.base_addr = dev().region()}; +}; + +class DaiRegwenTest : public OtpTest {}; + +TEST_F(DaiRegwenTest, LockDai) { + EXPECT_WRITE32( + OTP_CTRL_DIRECT_ACCESS_REGWEN_REG_OFFSET, + {{OTP_CTRL_DIRECT_ACCESS_REGWEN_DIRECT_ACCESS_REGWEN_BIT, false}}); + EXPECT_DIF_OK(dif_otp_ctrl_lock_dai(&otp_)); +} + +TEST_F(DaiRegwenTest, IsDaiLocked) { + bool flag; + + EXPECT_READ32( + OTP_CTRL_DIRECT_ACCESS_REGWEN_REG_OFFSET, + {{OTP_CTRL_DIRECT_ACCESS_REGWEN_DIRECT_ACCESS_REGWEN_BIT, true}}); + EXPECT_DIF_OK(dif_otp_ctrl_dai_is_locked(&otp_, &flag)); + EXPECT_FALSE(flag); + + EXPECT_READ32( + OTP_CTRL_DIRECT_ACCESS_REGWEN_REG_OFFSET, + {{OTP_CTRL_DIRECT_ACCESS_REGWEN_DIRECT_ACCESS_REGWEN_BIT, false}}); + EXPECT_DIF_OK(dif_otp_ctrl_dai_is_locked(&otp_, &flag)); + EXPECT_TRUE(flag); +} + +TEST_F(DaiRegwenTest, NullArgs) { + EXPECT_DIF_BADARG(dif_otp_ctrl_lock_dai(nullptr)); + + bool flag; + EXPECT_DIF_BADARG(dif_otp_ctrl_dai_is_locked(nullptr, &flag)); + EXPECT_DIF_BADARG(dif_otp_ctrl_dai_is_locked(&otp_, nullptr)); +} + +class ConfigTest : public OtpTest {}; + +TEST_F(ConfigTest, Basic) { + dif_otp_ctrl_config_t config = { + .check_timeout = 100'000, + .integrity_period_mask = 0x3'ffff, + .consistency_period_mask = 0x3ff'ffff, + }; + + EXPECT_READ32(OTP_CTRL_CHECK_REGWEN_REG_OFFSET, + {{OTP_CTRL_CHECK_REGWEN_CHECK_REGWEN_BIT, true}}); + + EXPECT_WRITE32(OTP_CTRL_CHECK_TIMEOUT_REG_OFFSET, config.check_timeout); + EXPECT_WRITE32(OTP_CTRL_INTEGRITY_CHECK_PERIOD_REG_OFFSET, + config.integrity_period_mask); + EXPECT_WRITE32(OTP_CTRL_CONSISTENCY_CHECK_PERIOD_REG_OFFSET, + config.consistency_period_mask); + + EXPECT_DIF_OK(dif_otp_ctrl_configure(&otp_, config)); +} + +TEST_F(ConfigTest, Locked) { + EXPECT_READ32(OTP_CTRL_CHECK_REGWEN_REG_OFFSET, + {{OTP_CTRL_CHECK_REGWEN_CHECK_REGWEN_BIT, false}}); + + EXPECT_EQ(dif_otp_ctrl_configure(&otp_, {}), kDifLocked); +} + +TEST_F(ConfigTest, IsConfigLocked) { + bool flag; + + EXPECT_READ32(OTP_CTRL_CHECK_REGWEN_REG_OFFSET, + {{OTP_CTRL_CHECK_REGWEN_CHECK_REGWEN_BIT, true}}); + EXPECT_DIF_OK(dif_otp_ctrl_config_is_locked(&otp_, &flag)); + EXPECT_FALSE(flag); + + EXPECT_READ32(OTP_CTRL_CHECK_REGWEN_REG_OFFSET, + {{OTP_CTRL_CHECK_REGWEN_CHECK_REGWEN_BIT, false}}); + EXPECT_DIF_OK(dif_otp_ctrl_config_is_locked(&otp_, &flag)); + EXPECT_TRUE(flag); +} + +TEST_F(ConfigTest, LockConfig) { + EXPECT_WRITE32(OTP_CTRL_CHECK_REGWEN_REG_OFFSET, + {{OTP_CTRL_CHECK_REGWEN_CHECK_REGWEN_BIT, false}}); + EXPECT_DIF_OK(dif_otp_ctrl_lock_config(&otp_)); +} + +TEST_F(ConfigTest, NullArgs) { + EXPECT_DIF_BADARG(dif_otp_ctrl_configure(nullptr, {})); + + bool flag; + EXPECT_DIF_BADARG(dif_otp_ctrl_config_is_locked(nullptr, &flag)); + EXPECT_DIF_BADARG(dif_otp_ctrl_config_is_locked(&otp_, nullptr)); + + EXPECT_DIF_BADARG(dif_otp_ctrl_lock_config(nullptr)); +} + +class CheckTest : public OtpTest {}; + +TEST_F(CheckTest, Integrity) { + EXPECT_READ32( + OTP_CTRL_CHECK_TRIGGER_REGWEN_REG_OFFSET, + {{OTP_CTRL_CHECK_TRIGGER_REGWEN_CHECK_TRIGGER_REGWEN_BIT, true}}); + EXPECT_WRITE32(OTP_CTRL_CHECK_TRIGGER_REG_OFFSET, + {{OTP_CTRL_CHECK_TRIGGER_INTEGRITY_BIT, true}}); + + EXPECT_DIF_OK(dif_otp_ctrl_check_integrity(&otp_)); +} + +TEST_F(CheckTest, Consistency) { + EXPECT_READ32( + OTP_CTRL_CHECK_TRIGGER_REGWEN_REG_OFFSET, + {{OTP_CTRL_CHECK_TRIGGER_REGWEN_CHECK_TRIGGER_REGWEN_BIT, true}}); + EXPECT_WRITE32(OTP_CTRL_CHECK_TRIGGER_REG_OFFSET, + {{OTP_CTRL_CHECK_TRIGGER_CONSISTENCY_BIT, true}}); + + EXPECT_DIF_OK(dif_otp_ctrl_check_consistency(&otp_)); +} + +TEST_F(CheckTest, LockTrigger) { + EXPECT_WRITE32( + OTP_CTRL_CHECK_TRIGGER_REGWEN_REG_OFFSET, + {{OTP_CTRL_CHECK_TRIGGER_REGWEN_CHECK_TRIGGER_REGWEN_BIT, false}}); + EXPECT_DIF_OK(dif_otp_ctrl_lock_check_trigger(&otp_)); +} + +TEST_F(CheckTest, Locked) { + EXPECT_READ32( + OTP_CTRL_CHECK_TRIGGER_REGWEN_REG_OFFSET, + {{OTP_CTRL_CHECK_TRIGGER_REGWEN_CHECK_TRIGGER_REGWEN_BIT, false}}); + EXPECT_EQ(dif_otp_ctrl_check_integrity(&otp_), kDifLocked); + + EXPECT_READ32( + OTP_CTRL_CHECK_TRIGGER_REGWEN_REG_OFFSET, + {{OTP_CTRL_CHECK_TRIGGER_REGWEN_CHECK_TRIGGER_REGWEN_BIT, false}}); + EXPECT_EQ(dif_otp_ctrl_check_consistency(&otp_), kDifLocked); +} + +TEST_F(CheckTest, NullArgs) { + EXPECT_DIF_BADARG(dif_otp_ctrl_check_integrity(nullptr)); + EXPECT_DIF_BADARG(dif_otp_ctrl_check_consistency(nullptr)); +} + +class ReadLockTest : public OtpTest {}; + +// Too many formatting variants in template code, so disabling clang-format. +// clang-format off +TEST_F(ReadLockTest, IsLocked) { + bool flag; + +% for part in read_locked_csr_parts: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() + part_name_define = part_name.as_c_define() +%>\ + EXPECT_READ32( + OTP_CTRL_${part_name_define}_READ_LOCK_REG_OFFSET, + {{OTP_CTRL_${part_name_define}_READ_LOCK_${part_name_define}_READ_LOCK_BIT, + true}}); + EXPECT_DIF_OK(dif_otp_ctrl_reading_is_locked( + &otp_, kDifOtpCtrlPartition${part_name_camel}, &flag)); + EXPECT_FALSE(flag); + + EXPECT_READ32( + OTP_CTRL_${part_name_define}_READ_LOCK_REG_OFFSET, + {{OTP_CTRL_${part_name_define}_READ_LOCK_${part_name_define}_READ_LOCK_BIT, + false}}); + EXPECT_DIF_OK(dif_otp_ctrl_reading_is_locked( + &otp_, kDifOtpCtrlPartition${part_name_camel}, &flag)); + EXPECT_TRUE(flag); + % if not loop.last: + + %endif +% endfor +} + +TEST_F(ReadLockTest, Lock) { +% for part in read_locked_csr_parts: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() + part_name_define = part_name.as_c_define() +%>\ + EXPECT_READ32(OTP_CTRL_DIRECT_ACCESS_REGWEN_REG_OFFSET, 1); + EXPECT_WRITE32( + OTP_CTRL_${part_name_define}_READ_LOCK_REG_OFFSET, + {{OTP_CTRL_${part_name_define}_READ_LOCK_${part_name_define}_READ_LOCK_BIT, + false}}); + EXPECT_DIF_OK(dif_otp_ctrl_lock_reading( + &otp_, kDifOtpCtrlPartition${part_name_camel})); + % if not loop.last: + + %endif +% endfor +} + +TEST_F(ReadLockTest, NotLockablePartitions) { + bool flag; +% for part in [p for p in parts if p not in read_locked_csr_parts]: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() +%>\ + EXPECT_DIF_BADARG( + dif_otp_ctrl_lock_reading(&otp_, kDifOtpCtrlPartition${part_name_camel})); + EXPECT_DIF_BADARG(dif_otp_ctrl_reading_is_locked( + &otp_, kDifOtpCtrlPartition${part_name_camel}, &flag)); + % if not loop.last: + + %endif +% endfor +} +// clang-format on + +TEST_F(ReadLockTest, NullArgs) { + bool flag; +% for part in read_locked_csr_parts: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() + lock_reading_line = f"dif_otp_ctrl_lock_reading(nullptr, kDifOtpCtrlPartition{part_name_camel}));" +%>\ + EXPECT_DIF_BADARG(dif_otp_ctrl_reading_is_locked( + nullptr, kDifOtpCtrlPartition${part_name_camel}, &flag)); + EXPECT_DIF_BADARG(dif_otp_ctrl_reading_is_locked( + &otp_, kDifOtpCtrlPartition${part_name_camel}, nullptr)); + % if len(lock_reading_line) > 80 - 6: + EXPECT_DIF_BADARG(dif_otp_ctrl_lock_reading( + nullptr, kDifOtpCtrlPartition${part_name_camel})); + % else: + EXPECT_DIF_BADARG( + ${lock_reading_line} + % endif + % if not loop.last: + + %endif +% endfor +} + +class StatusTest : public OtpTest {}; + +TEST_F(StatusTest, Idle) { + dif_otp_ctrl_status_t status; + + EXPECT_READ32(OTP_CTRL_STATUS_REG_OFFSET, + {{OTP_CTRL_STATUS_DAI_IDLE_BIT, true}}); + EXPECT_DIF_OK(dif_otp_ctrl_get_status(&otp_, &status)); + + EXPECT_EQ(status.codes, 1 << kDifOtpCtrlStatusCodeDaiIdle); + EXPECT_THAT(status.causes, Each(kDifOtpCtrlErrorOk)); +} + +TEST_F(StatusTest, Errors) { + dif_otp_ctrl_status_t status; + + EXPECT_READ32(OTP_CTRL_STATUS_REG_OFFSET, + { + {OTP_CTRL_STATUS_DAI_IDLE_BIT, true}, + {OTP_CTRL_STATUS_HW_CFG0_ERROR_BIT, true}, + {OTP_CTRL_STATUS_LCI_ERROR_BIT, true}, + }); + +<% + hw_cfg0_entries = [i for i, p in enumerate(parts) if p["name"] == "HW_CFG0"] + hw_cfg0_error_index = 0 + if len(hw_cfg0_entries) > 0: + hw_cfg0_error_index = hw_cfg0_entries[0] + lci_error_index = len(parts) + 1 +%>\ + +% if len(hw_cfg0_entries) > 0: + EXPECT_READ32(OTP_CTRL_ERR_CODE_${hw_cfg0_error_index}_REG_OFFSET, + {{OTP_CTRL_ERR_CODE_0_ERR_CODE_0_OFFSET, + OTP_CTRL_ERR_CODE_0_ERR_CODE_0_VALUE_MACRO_ECC_CORR_ERROR}}); + EXPECT_READ32(OTP_CTRL_ERR_CODE_${lci_error_index}_REG_OFFSET, + {{OTP_CTRL_ERR_CODE_0_ERR_CODE_0_OFFSET, + OTP_CTRL_ERR_CODE_0_ERR_CODE_0_VALUE_MACRO_ERROR}}); +% endif + + EXPECT_DIF_OK(dif_otp_ctrl_get_status(&otp_, &status)); + EXPECT_EQ(status.codes, (1 << kDifOtpCtrlStatusCodeDaiIdle) | + (1 << kDifOtpCtrlStatusCodeHwCfg0Error) | + (1 << kDifOtpCtrlStatusCodeLciError)); + EXPECT_EQ(status.causes[kDifOtpCtrlStatusCodeHwCfg0Error], + kDifOtpCtrlErrorMacroRecoverableRead); + EXPECT_EQ(status.causes[kDifOtpCtrlStatusCodeLciError], + kDifOtpCtrlErrorMacroUnspecified); +} + +TEST_F(StatusTest, NullArgs) { + dif_otp_ctrl_status_t status; + + EXPECT_DIF_BADARG(dif_otp_ctrl_get_status(nullptr, &status)); + EXPECT_DIF_BADARG(dif_otp_ctrl_get_status(&otp_, nullptr)); +} + +struct RelativeAddressParams { + std::string name; + dif_otp_ctrl_partition_t partition; + uint32_t abs_address; + dif_result_t expected_result; + uint32_t expected_relative_address; +}; + +class RelativeAddress + : public OtpTest, + public testing::WithParamInterface {}; + +TEST_P(RelativeAddress, RelativeAddress) { + uint32_t got_relative_address; + dif_result_t got_result = dif_otp_ctrl_relative_address( + GetParam().partition, GetParam().abs_address, &got_relative_address); + EXPECT_EQ(got_result, GetParam().expected_result); + EXPECT_EQ(got_relative_address, GetParam().expected_relative_address); +} + +INSTANTIATE_TEST_SUITE_P( + AllPartitions, RelativeAddress, + testing::Values( +% for part in parts: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() + part_name_define = part_name.as_c_define() + step = 8 if part["secret"] else 4 +%>\ + RelativeAddressParams{ + "${part_name_camel}Okay", + kDifOtpCtrlPartition${part_name_camel}, + OTP_CTRL_PARAM_${part_name_define}_OFFSET + ${step}, + kDifOk, + ${step}, + }, + RelativeAddressParams{ + "${part_name_camel}Unaligned", + kDifOtpCtrlPartition${part_name_camel}, + OTP_CTRL_PARAM_${part_name_define}_OFFSET + 1, + kDifUnaligned, + 0, + }, +<% + ## Exclude first partition to avoid a negative offset. +%>\ + % if not loop.first: + RelativeAddressParams{ + "${part_name_camel}OutOfRangeBeforeStart", + kDifOtpCtrlPartition${part_name_camel}, + OTP_CTRL_PARAM_${part_name_define}_OFFSET - ${step}, + kDifOutOfRange, + 0, + }, + % endif + RelativeAddressParams{ + "${part_name_camel}OutOfRangePastEnd", + kDifOtpCtrlPartition${part_name_camel}, + % if len(f"OTP_CTRL_PARAM_{part_name_define}_OFFSET + OTP_CTRL_PARAM_{part_name_define}_SIZE,") <= 80 - 12: + OTP_CTRL_PARAM_${part_name_define}_OFFSET + OTP_CTRL_PARAM_${part_name_define}_SIZE, + % else: + OTP_CTRL_PARAM_${part_name_define}_OFFSET + + OTP_CTRL_PARAM_${part_name_define}_SIZE, + % endif + kDifOutOfRange, + 0, + }${")," if loop.last else ","} +% endfor + [](const testing::TestParamInfo &info) { + return info.param.name; + }); + +class DaiReadTest : public OtpTest {}; + +TEST_F(DaiReadTest, Read32) { + EXPECT_READ32( + OTP_CTRL_DIRECT_ACCESS_REGWEN_REG_OFFSET, + {{OTP_CTRL_DIRECT_ACCESS_REGWEN_DIRECT_ACCESS_REGWEN_BIT, true}}); + EXPECT_WRITE32(OTP_CTRL_DIRECT_ACCESS_ADDRESS_REG_OFFSET, + OTP_CTRL_PARAM_MANUF_STATE_OFFSET); + EXPECT_WRITE32(OTP_CTRL_DIRECT_ACCESS_CMD_REG_OFFSET, + {{OTP_CTRL_DIRECT_ACCESS_CMD_RD_BIT, true}}); + + EXPECT_DIF_OK(dif_otp_ctrl_dai_read_start(&otp_, kDifOtpCtrlPartitionHwCfg0, + /*address=*/0x20)); + + EXPECT_READ32( + OTP_CTRL_DIRECT_ACCESS_REGWEN_REG_OFFSET, + {{OTP_CTRL_DIRECT_ACCESS_REGWEN_DIRECT_ACCESS_REGWEN_BIT, true}}); + EXPECT_READ32(OTP_CTRL_DIRECT_ACCESS_RDATA_0_REG_OFFSET, 0x12345678); + + uint32_t val; + EXPECT_DIF_OK(dif_otp_ctrl_dai_read32_end(&otp_, &val)); + EXPECT_EQ(val, 0x12345678); +} + +TEST_F(DaiReadTest, Read64) { + uint64_t val; +% for part in secret_parts: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() + part_name_define = part_name.as_c_define() +%>\ + EXPECT_READ32( + OTP_CTRL_DIRECT_ACCESS_REGWEN_REG_OFFSET, + {{OTP_CTRL_DIRECT_ACCESS_REGWEN_DIRECT_ACCESS_REGWEN_BIT, true}}); + EXPECT_WRITE32(OTP_CTRL_DIRECT_ACCESS_ADDRESS_REG_OFFSET, + OTP_CTRL_PARAM_${part_name_define}_OFFSET + 0x8); + EXPECT_WRITE32(OTP_CTRL_DIRECT_ACCESS_CMD_REG_OFFSET, + {{OTP_CTRL_DIRECT_ACCESS_CMD_RD_BIT, true}}); + + EXPECT_DIF_OK(dif_otp_ctrl_dai_read_start(&otp_, kDifOtpCtrlPartition${part_name_camel}, + /*address=*/0x8)); + + EXPECT_READ32( + OTP_CTRL_DIRECT_ACCESS_REGWEN_REG_OFFSET, + {{OTP_CTRL_DIRECT_ACCESS_REGWEN_DIRECT_ACCESS_REGWEN_BIT, true}}); + EXPECT_READ32(OTP_CTRL_DIRECT_ACCESS_RDATA_1_REG_OFFSET, 0x12345678); + EXPECT_READ32(OTP_CTRL_DIRECT_ACCESS_RDATA_0_REG_OFFSET, 0x90abcdef); + + EXPECT_DIF_OK(dif_otp_ctrl_dai_read64_end(&otp_, &val)); + EXPECT_EQ(val, 0x1234567890abcdef); + % if not loop.last: + + % endif +% endfor +} + +TEST_F(DaiReadTest, Unaligned) { + EXPECT_EQ(dif_otp_ctrl_dai_read_start(&otp_, kDifOtpCtrlPartitionHwCfg0, + /*address=*/0b01), + kDifUnaligned); + EXPECT_EQ(dif_otp_ctrl_dai_read_start(&otp_, kDifOtpCtrlPartitionSecret2, + /*address=*/0b100), + kDifUnaligned); +} + +TEST_F(DaiReadTest, OutOfRange) { + EXPECT_EQ(dif_otp_ctrl_dai_read_start(&otp_, kDifOtpCtrlPartitionHwCfg0, + /*address=*/0x100), + kDifOutOfRange); +} + +TEST_F(DaiReadTest, Busy) { + EXPECT_READ32( + OTP_CTRL_DIRECT_ACCESS_REGWEN_REG_OFFSET, + {{OTP_CTRL_DIRECT_ACCESS_REGWEN_DIRECT_ACCESS_REGWEN_BIT, false}}); + EXPECT_EQ(dif_otp_ctrl_dai_read_start(&otp_, kDifOtpCtrlPartitionHwCfg0, + /*address=*/0x0), + kDifUnavailable); + + EXPECT_READ32( + OTP_CTRL_DIRECT_ACCESS_REGWEN_REG_OFFSET, + {{OTP_CTRL_DIRECT_ACCESS_REGWEN_DIRECT_ACCESS_REGWEN_BIT, false}}); + uint32_t val32; + EXPECT_EQ(dif_otp_ctrl_dai_read32_end(&otp_, &val32), kDifUnavailable); + + EXPECT_READ32( + OTP_CTRL_DIRECT_ACCESS_REGWEN_REG_OFFSET, + {{OTP_CTRL_DIRECT_ACCESS_REGWEN_DIRECT_ACCESS_REGWEN_BIT, false}}); + uint64_t val64; + EXPECT_EQ(dif_otp_ctrl_dai_read64_end(&otp_, &val64), kDifUnavailable); +} + +TEST_F(DaiReadTest, NullArgs) { + EXPECT_DIF_BADARG(dif_otp_ctrl_dai_read_start(nullptr, + kDifOtpCtrlPartitionHwCfg0, + /*address=*/0x0)); + + uint32_t val32; + EXPECT_DIF_BADARG(dif_otp_ctrl_dai_read32_end(nullptr, &val32)); + EXPECT_DIF_BADARG(dif_otp_ctrl_dai_read32_end(&otp_, nullptr)); + + uint64_t val64; + EXPECT_DIF_BADARG(dif_otp_ctrl_dai_read64_end(nullptr, &val64)); + EXPECT_DIF_BADARG(dif_otp_ctrl_dai_read64_end(&otp_, nullptr)); +} + +class DaiProgramTest : public OtpTest {}; + +TEST_F(DaiProgramTest, Program32) { + EXPECT_READ32( + OTP_CTRL_DIRECT_ACCESS_REGWEN_REG_OFFSET, + {{OTP_CTRL_DIRECT_ACCESS_REGWEN_DIRECT_ACCESS_REGWEN_BIT, true}}); + EXPECT_WRITE32(OTP_CTRL_DIRECT_ACCESS_ADDRESS_REG_OFFSET, + OTP_CTRL_PARAM_MANUF_STATE_OFFSET); + EXPECT_WRITE32(OTP_CTRL_DIRECT_ACCESS_WDATA_0_REG_OFFSET, 0x12345678); + EXPECT_WRITE32(OTP_CTRL_DIRECT_ACCESS_CMD_REG_OFFSET, + {{OTP_CTRL_DIRECT_ACCESS_CMD_WR_BIT, true}}); + + EXPECT_DIF_OK(dif_otp_ctrl_dai_program32(&otp_, kDifOtpCtrlPartitionHwCfg0, + /*address=*/0x20, + /*value=*/0x12345678)); +} + +TEST_F(DaiProgramTest, Program64) { + EXPECT_READ32( + OTP_CTRL_DIRECT_ACCESS_REGWEN_REG_OFFSET, + {{OTP_CTRL_DIRECT_ACCESS_REGWEN_DIRECT_ACCESS_REGWEN_BIT, true}}); + EXPECT_WRITE32(OTP_CTRL_DIRECT_ACCESS_ADDRESS_REG_OFFSET, + OTP_CTRL_PARAM_SECRET2_OFFSET + 0x8); + EXPECT_WRITE32(OTP_CTRL_DIRECT_ACCESS_WDATA_0_REG_OFFSET, 0x90abcdef); + EXPECT_WRITE32(OTP_CTRL_DIRECT_ACCESS_WDATA_1_REG_OFFSET, 0x12345678); + EXPECT_WRITE32(OTP_CTRL_DIRECT_ACCESS_CMD_REG_OFFSET, + {{OTP_CTRL_DIRECT_ACCESS_CMD_WR_BIT, true}}); + + EXPECT_DIF_OK(dif_otp_ctrl_dai_program64(&otp_, kDifOtpCtrlPartitionSecret2, + /*address=*/0x8, + /*value=*/0x1234567890abcdef)); +} + +TEST_F(DaiProgramTest, BadPartition) { + EXPECT_EQ(dif_otp_ctrl_dai_program32(&otp_, kDifOtpCtrlPartitionSecret1, + /*address=*/0x0, /*value=*/42), + kDifError); + EXPECT_EQ(dif_otp_ctrl_dai_program64(&otp_, kDifOtpCtrlPartitionHwCfg0, + /*address=*/0x0, /*value=*/42), + kDifError); + + // LC is never writeable. + EXPECT_EQ(dif_otp_ctrl_dai_program32(&otp_, kDifOtpCtrlPartitionLifeCycle, + /*address=*/0x0, /*value=*/42), + kDifError); +} + +TEST_F(DaiProgramTest, Unaligned) { + EXPECT_EQ(dif_otp_ctrl_dai_program32(&otp_, kDifOtpCtrlPartitionHwCfg0, + /*address=*/0b01, /*value=*/42), + kDifUnaligned); + EXPECT_EQ(dif_otp_ctrl_dai_program64(&otp_, kDifOtpCtrlPartitionSecret2, + /*address=*/0b100, /*value=*/42), + kDifUnaligned); +} + +TEST_F(DaiProgramTest, OutOfRange) { + // Check that we can't write a digest directly. + EXPECT_EQ(dif_otp_ctrl_dai_program32( + &otp_, kDifOtpCtrlPartitionCreatorSwCfg, + /*address=*/OTP_CTRL_PARAM_CREATOR_SW_CFG_DIGEST_OFFSET, + /*value=*/42), + kDifOutOfRange); + + // Same digest check for 64-bit. + EXPECT_EQ(dif_otp_ctrl_dai_program64( + &otp_, kDifOtpCtrlPartitionSecret2, + /*address=*/OTP_CTRL_PARAM_SECRET2_DIGEST_OFFSET, /*value=*/42), + kDifOutOfRange); +} + +TEST_F(DaiProgramTest, Busy) { + EXPECT_READ32( + OTP_CTRL_DIRECT_ACCESS_REGWEN_REG_OFFSET, + {{OTP_CTRL_DIRECT_ACCESS_REGWEN_DIRECT_ACCESS_REGWEN_BIT, false}}); + EXPECT_EQ(dif_otp_ctrl_dai_program32(&otp_, kDifOtpCtrlPartitionHwCfg0, + /*address=*/0x0, /*value=*/42), + kDifUnavailable); + + EXPECT_READ32( + OTP_CTRL_DIRECT_ACCESS_REGWEN_REG_OFFSET, + {{OTP_CTRL_DIRECT_ACCESS_REGWEN_DIRECT_ACCESS_REGWEN_BIT, false}}); + EXPECT_EQ(dif_otp_ctrl_dai_program64(&otp_, kDifOtpCtrlPartitionSecret0, + /*address=*/0x0, /*value=*/42), + kDifUnavailable); +} + +TEST_F(DaiProgramTest, NullArgs) { + EXPECT_DIF_BADARG(dif_otp_ctrl_dai_program32(nullptr, + kDifOtpCtrlPartitionHwCfg0, + /*address=*/0x0, /*value=*/42)); + EXPECT_DIF_BADARG(dif_otp_ctrl_dai_program64(nullptr, + kDifOtpCtrlPartitionSecret0, + /*address=*/0x0, /*value=*/42)); +} + +class DaiDigestTest : public OtpTest {}; + +TEST_F(DaiDigestTest, DigestSw) { +% for part in sw_digest_parts: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_define = part_name.as_c_define() + part_name_camel = part_name.as_camel_case() + dai_digest_line = ("EXPECT_DIF_OK(dif_otp_ctrl_dai_digest(&otp_, " + + f"kDifOtpCtrlPartition{part_name_camel},") +%>\ + EXPECT_READ32( + OTP_CTRL_DIRECT_ACCESS_REGWEN_REG_OFFSET, + {{OTP_CTRL_DIRECT_ACCESS_REGWEN_DIRECT_ACCESS_REGWEN_BIT, true}}); + EXPECT_WRITE32(OTP_CTRL_DIRECT_ACCESS_ADDRESS_REG_OFFSET, + OTP_CTRL_PARAM_${part_name.as_c_define()}_DIGEST_OFFSET); + EXPECT_WRITE32(OTP_CTRL_DIRECT_ACCESS_WDATA_0_REG_OFFSET, 0x00abcdef); + EXPECT_WRITE32(OTP_CTRL_DIRECT_ACCESS_WDATA_1_REG_OFFSET, 0xabcdef00); + EXPECT_WRITE32(OTP_CTRL_DIRECT_ACCESS_CMD_REG_OFFSET, + {{OTP_CTRL_DIRECT_ACCESS_CMD_WR_BIT, true}}); + + % if len(dai_digest_line) > 80 - 2: +<% dai_digest_line = (f"kDifOtpCtrlPartition{part_name_camel},") %>\ + % if len(dai_digest_line) > 80 - 40: + EXPECT_DIF_OK( + dif_otp_ctrl_dai_digest(&otp_, kDifOtpCtrlPartition${part_name_camel}, + /*digest=*/0xabcdef0000abcdef)); + % else: + EXPECT_DIF_OK(dif_otp_ctrl_dai_digest(&otp_, + kDifOtpCtrlPartition${part_name_camel}, + /*digest=*/0xabcdef0000abcdef)); + % endif + % else: + ${dai_digest_line} + /*digest=*/0xabcdef0000abcdef)); + % endif + % if not loop.last: + + % endif +% endfor +} + +TEST_F(DaiDigestTest, DigestHw) { +% for part in hw_digest_parts: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_define = part_name.as_c_define() + part_name_camel = part_name.as_camel_case() + dai_digest_line = ("EXPECT_DIF_OK(dif_otp_ctrl_dai_digest(&otp_, " + + f"kDifOtpCtrlPartition{part_name_camel},") +%>\ + EXPECT_READ32( + OTP_CTRL_DIRECT_ACCESS_REGWEN_REG_OFFSET, + {{OTP_CTRL_DIRECT_ACCESS_REGWEN_DIRECT_ACCESS_REGWEN_BIT, true}}); + EXPECT_WRITE32(OTP_CTRL_DIRECT_ACCESS_ADDRESS_REG_OFFSET, + OTP_CTRL_PARAM_${part_name_define}_OFFSET); + EXPECT_WRITE32(OTP_CTRL_DIRECT_ACCESS_CMD_REG_OFFSET, + {{OTP_CTRL_DIRECT_ACCESS_CMD_DIGEST_BIT, true}}); + + EXPECT_DIF_OK(dif_otp_ctrl_dai_digest(&otp_, kDifOtpCtrlPartition${part_name_camel}, + /*digest=*/0)); + % if not loop.last: + + % endif +% endfor +} + +TEST_F(DaiDigestTest, BadPartition) { + EXPECT_EQ(dif_otp_ctrl_dai_digest(&otp_, kDifOtpCtrlPartitionLifeCycle, + /*digest=*/0), + kDifError); +} + +TEST_F(DaiDigestTest, Busy) { + EXPECT_READ32( + OTP_CTRL_DIRECT_ACCESS_REGWEN_REG_OFFSET, + {{OTP_CTRL_DIRECT_ACCESS_REGWEN_DIRECT_ACCESS_REGWEN_BIT, false}}); + + EXPECT_EQ( + dif_otp_ctrl_dai_digest(&otp_, kDifOtpCtrlPartitionHwCfg0, /*digest=*/0), + kDifUnavailable); +} + +TEST_F(DaiDigestTest, BadDigest) { + EXPECT_DIF_BADARG(dif_otp_ctrl_dai_digest(&otp_, kDifOtpCtrlPartitionHwCfg0, + /*digest=*/0xabcdef0000abcdef)); + EXPECT_DIF_BADARG(dif_otp_ctrl_dai_digest(&otp_, + kDifOtpCtrlPartitionCreatorSwCfg, + /*digest=*/0)); +} + +TEST_F(DaiDigestTest, NullArgs) { + EXPECT_DIF_BADARG(dif_otp_ctrl_dai_digest(nullptr, + kDifOtpCtrlPartitionCreatorSwCfg, + /*digest=*/0xabcdef0000abcdef)); +} + +class IsDigestComputed : public OtpTest {}; + +TEST_F(IsDigestComputed, NullArgs) { + bool is_computed; + EXPECT_DIF_BADARG(dif_otp_ctrl_is_digest_computed( + nullptr, kDifOtpCtrlPartitionSecret2, &is_computed)); + EXPECT_DIF_BADARG(dif_otp_ctrl_is_digest_computed( + &otp_, kDifOtpCtrlPartitionSecret2, nullptr)); + EXPECT_DIF_BADARG(dif_otp_ctrl_is_digest_computed( + nullptr, kDifOtpCtrlPartitionSecret2, nullptr)); +} + +TEST_F(IsDigestComputed, BadPartition) { + bool is_computed; + EXPECT_DIF_BADARG(dif_otp_ctrl_is_digest_computed( + &otp_, kDifOtpCtrlPartitionLifeCycle, &is_computed)); +} + +TEST_F(IsDigestComputed, Success) { + bool is_computed; + + EXPECT_READ32(OTP_CTRL_SECRET2_DIGEST_1_REG_OFFSET, 0x98abcdef); + EXPECT_READ32(OTP_CTRL_SECRET2_DIGEST_0_REG_OFFSET, 0xabcdef01); + EXPECT_DIF_OK(dif_otp_ctrl_is_digest_computed( + &otp_, kDifOtpCtrlPartitionSecret2, &is_computed)); + EXPECT_TRUE(is_computed); + + EXPECT_READ32(OTP_CTRL_SECRET2_DIGEST_1_REG_OFFSET, 0); + EXPECT_READ32(OTP_CTRL_SECRET2_DIGEST_0_REG_OFFSET, 0); + EXPECT_DIF_OK(dif_otp_ctrl_is_digest_computed( + &otp_, kDifOtpCtrlPartitionSecret2, &is_computed)); + EXPECT_FALSE(is_computed); +} + +struct DigestParams { + dif_otp_ctrl_partition_t partition; + bool has_digest; + ptrdiff_t reg0, reg1; +}; + +class GetDigest : public OtpTest, + public testing::WithParamInterface {}; + +TEST_P(GetDigest, GetDigest) { + if (!GetParam().has_digest) { + uint64_t digest; + EXPECT_DIF_BADARG( + dif_otp_ctrl_get_digest(&otp_, GetParam().partition, &digest)); + return; + } + + EXPECT_READ32(GetParam().reg1, 0xabcdef99); + EXPECT_READ32(GetParam().reg0, 0x99abcdef); + + uint64_t digest; + EXPECT_DIF_OK(dif_otp_ctrl_get_digest(&otp_, GetParam().partition, &digest)); + EXPECT_EQ(digest, 0xabcdef9999abcdef); +} + +TEST_P(GetDigest, BadDigest) { + if (!GetParam().has_digest) { + return; + } + + EXPECT_READ32(GetParam().reg1, 0x0); + EXPECT_READ32(GetParam().reg0, 0x0); + + uint64_t digest; + EXPECT_EQ(dif_otp_ctrl_get_digest(&otp_, GetParam().partition, &digest), + kDifError); +} + +TEST_P(GetDigest, NullArgs) { + uint64_t digest; + EXPECT_DIF_BADARG( + dif_otp_ctrl_get_digest(nullptr, GetParam().partition, &digest)); + EXPECT_DIF_BADARG( + dif_otp_ctrl_get_digest(&otp_, GetParam().partition, nullptr)); +} + +// This depends on the maximum length of partition names, which will +// be changing, so turn formatting off. +// clang-format off +INSTANTIATE_TEST_SUITE_P( + AllDigests, GetDigest, + testing::Values( +% for part in parts: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() + part_name_define = part_name.as_c_define() +%>\ + % if part in digest_parts: + DigestParams{ + kDifOtpCtrlPartition${part_name_camel}, + true, + OTP_CTRL_${part_name_define}_DIGEST_0_REG_OFFSET, + OTP_CTRL_${part_name_define}_DIGEST_1_REG_OFFSET, + }${"" if loop.last else ","} + % else: + DigestParams{ + kDifOtpCtrlPartition${part_name_camel}, + false, + 0, + 0, + }${"));" if loop.last else ","} + % endif +% endfor +// clang-format on + +class BlockingIoTest : public OtpTest { + protected: + static constexpr size_t kWords = 4; +}; + +TEST_F(BlockingIoTest, Read) { + for (size_t i = 0; i < kWords; ++i) { + auto offset = + OTP_CTRL_PARAM_OWNER_SW_CFG_OFFSET + 0x10 + i * sizeof(uint32_t); + EXPECT_READ32(OTP_CTRL_SW_CFG_WINDOW_REG_OFFSET + offset, i + 1); + } + + std::vector buf(kWords); + EXPECT_DIF_OK(dif_otp_ctrl_read_blocking( + &otp_, kDifOtpCtrlPartitionOwnerSwCfg, 0x10, buf.data(), buf.size())); + EXPECT_THAT(buf, ElementsAre(1, 2, 3, 4)); +} + +TEST_F(BlockingIoTest, BadPartition) { + std::vector buf(kWords); + EXPECT_EQ(dif_otp_ctrl_read_blocking(&otp_, kDifOtpCtrlPartitionHwCfg0, 0x10, + buf.data(), buf.size()), + kDifError); +} + +TEST_F(BlockingIoTest, Unaligned) { + std::vector buf(kWords); + EXPECT_EQ(dif_otp_ctrl_read_blocking(&otp_, kDifOtpCtrlPartitionOwnerSwCfg, + 0x11, buf.data(), buf.size()), + kDifUnaligned); +} + +TEST_F(BlockingIoTest, OutOfRange) { + std::vector buf(0x2f0); + EXPECT_EQ(dif_otp_ctrl_read_blocking(&otp_, kDifOtpCtrlPartitionOwnerSwCfg, + 0x300, buf.data(), buf.size()), + kDifOutOfRange); + EXPECT_EQ(dif_otp_ctrl_read_blocking(&otp_, kDifOtpCtrlPartitionOwnerSwCfg, + 0x10, buf.data(), 0x330), + kDifOutOfRange); +} + +TEST_F(BlockingIoTest, NullArgs) { + std::vector buf(kWords); + EXPECT_DIF_BADARG(dif_otp_ctrl_read_blocking( + nullptr, kDifOtpCtrlPartitionOwnerSwCfg, 0x10, buf.data(), buf.size())); + EXPECT_DIF_BADARG(dif_otp_ctrl_read_blocking( + &otp_, kDifOtpCtrlPartitionOwnerSwCfg, 0x10, nullptr, buf.size())); +} + +} // namespace +} // namespace dif_otp_ctrl_unittest diff --git a/src/fuse_ctrl/data/otp_ctrl.hjson b/src/fuse_ctrl/data/otp_ctrl.hjson new file mode 100755 index 000000000..1ceaade0a --- /dev/null +++ b/src/fuse_ctrl/data/otp_ctrl.hjson @@ -0,0 +1,1898 @@ +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// HJSON with partition metadata. +// +// DO NOT EDIT THIS FILE DIRECTLY. +// It has been generated with ./util/design/gen-otp-mmap.py + +{ + name: "caliptra_otp_ctrl", + human_name: " Caliptra One-Time Programmable Memory COntroller", + one_line_desc: "Interfaces integrated one0time programmable memory, supports scrambling, integrity and secure dai_wr_inprogress", + one_paragraph_desc: ''' + One-Time Programmable (OTP) Memory Controller provides an open source abstraction interface for software and other hardware components such as Life Cycle Controller and Key Manager to interact with an integrated, closed source, proprietary OTP memory. + On top of defensive features provided by the proprietary OTP memory to deter side-channel analysis (SCA), fault injection (FI) attacks, and visual and electrical probing, the open source OTP controller features high-level logical security protection such as integrity checks and scrambling, as well as software isolation for when OTP contents are readable and programmable. + It features multiple individually-lockable logical partitions, periodic / persistent checking of OTP values, and a separate partition and interface for Life Cycle Controller. + ''' + // Uique comportablre IP identifier defined under KNOWN_CIP_IDS in the regtool + // TODO: This section needs to be updated for Caliptra (copying OT settings for now, to mark as placeholders) + cip_id: "16", + design_spec: "../doc", + dv_doc: "../doc/dv", + hw_checklist: "../doc/checklist", + sw_checklist: "/sw/device/lib/dif/dif_otp_ctrl", + revisions: [ + { + version: "0.1.0", + life_stage: "L1", + design_stage: "D2", + verification_stage: "V2", + dif_stage: "S1", + commit_id: "127b109e2fab9336e830158abe449a3922544ded", + notes: "", + } + { + version: "1.0.0", + life_stage: "L1", + design_stage: "D3", + verification_stage: "V2S", + dif_stage: "S2", + notes: "", + } + { + version: "2.0.0", + life_stage: "L1", + design_stage: "D2S", + verification_stage: "V2S", + dif_stage: "S2", + notes: "", + } + ] + clocking: [ + {clock: "clk_i", reset: "rst_ni", primary: true}, + {clock: "clk_edn_i", reset: "rst_edn_ni"} + ] + scan: "true", // Enable `scanmode_i` port + scan_reset: "true", // Enable `scan_rst_ni` port + scan_en: "true", // Enable `scan_en_i` port + bus_interfaces: [ + { protocol: "tlul", direction: "device", name: "core" } + { protocol: "tlul", direction: "device", name: "prim", hier_path: "u_otp.gen_generic.u_impl_generic.u_reg_top" } + ], + + available_output_list: [ + { name: "test", + width: 8, + desc: "Test-related GPIOs. Only active in DFT-enabled life cycle states." + } + ], + + /////////////////////////// + // Interrupts and Alerts // + /////////////////////////// + + interrupt_list: [ + { name: "otp_operation_done", + desc: "A direct access command or digest calculation operation has completed." + } + { name: "otp_error", + desc: "An error has occurred in the OTP controller. Check the !!ERR_CODE register to get more information." + } + ], + + alert_list: [ + { name: "fatal_macro_error", + desc: "This alert triggers if hardware detects an uncorrectable error during an OTP transaction, for example an uncorrectable ECC error in the OTP array.", + } + { name: "fatal_check_error", + desc: "This alert triggers if any of the background checks fails. This includes the digest checks and concurrent ECC checks in the buffer registers.", + } + { name: "fatal_bus_integ_error", + desc: "This fatal alert is triggered when a fatal TL-UL bus integrity fault is detected." + } + { name: "fatal_prim_otp_alert", + desc: "Fatal alert triggered inside the OTP primitive, including fatal TL-UL bus integrity faults of the test interface." + } + { name: "recov_prim_otp_alert", + desc: "Recoverable alert triggered inside the OTP primitive." + } + ], + + //////////////// + // Parameters // + //////////////// + param_list: [ + // Init file + { name: "MemInitFile", + desc: "VMEM file to initialize the OTP macro.", + type: "", + default: '""', + expose: "true", + local: "false" + } + // Random netlist constants + { name: "RndCnstLfsrSeed", + desc: "Compile-time random bits for initial LFSR seed", + type: "otp_ctrl_pkg::lfsr_seed_t" + randcount: "40", + randtype: "data", // randomize randcount databits + } + { name: "RndCnstLfsrPerm", + desc: "Compile-time random permutation for LFSR output", + type: "otp_ctrl_pkg::lfsr_perm_t" + randcount: "40", + randtype: "perm", // random permutation for randcount elements + } + { name: "RndCnstScrmblKeyInit", + desc: "Compile-time random permutation for scrambling key/nonce register reset value", + type: "otp_ctrl_pkg::scrmbl_key_init_t" + randcount: "256", + randtype: "data", // random permutation for randcount elements + } + // Normal parameters + { name: "NumSramKeyReqSlots", + desc: "Number of key slots", + type: "int", + default: "4", + local: "true" + }, + { name: "OtpByteAddrWidth", + desc: "Width of the OTP byte address.", + type: "int", + default: "12", + local: "true" + }, + { name: "NumErrorEntries", + desc: "Number of error register entries.", + type: "int", + default: "8", // partitions + DAI/LCI + local: "true" + }, + { name: "NumDaiWords", + desc: "Number of 32bit words in the DAI.", + type: "int", + default: "2", + local: "true" + }, + { name: "NumDigestWords", + desc: "Size of the digest fields in 32bit words.", + type: "int", + default: "2", + local: "true" + }, + { name: "NumSwCfgWindowWords", + desc: "Size of the TL-UL window in 32bit words. Note that the effective partition size is smaller than that.", + type: "int", + default: "1024", + local: "true" + } + + // Memory map Info + { name: "NumPart", + desc: "Number of partitions", + type: "int", + default: "6", + local: "true" + }, + { name: "NumPartUnbuf", + desc: "Number of unbuffered partitions", + type: "int", + default: "2", + local: "true" + }, + { name: "NumPartBuf", + desc: "Number of buffered partitions (including 1 lifecycle partition)", + type: "int", + default: "4", + local: "true" + }, + { name: "VendorTestOffset", + desc: "Offset of the VENDOR_TEST partition", + type: "int", + default: "0", + local: "true" + }, + { name: "VendorTestSize", + desc: "Size of the VENDOR_TEST partition", + type: "int", + default: "64", + local: "true" + }, + { name: "ScratchOffset", + desc: "Offset of SCRATCH", + type: "int", + default: "0", + local: "true" + }, + { name: "ScratchSize", + desc: "Size of SCRATCH", + type: "int", + default: "56", + local: "true" + }, + { name: "VendorTestDigestOffset", + desc: "Offset of VENDOR_TEST_DIGEST", + type: "int", + default: "56", + local: "true" + }, + { name: "VendorTestDigestSize", + desc: "Size of VENDOR_TEST_DIGEST", + type: "int", + default: "8", + local: "true" + }, + { name: "NonSecretFusesOffset", + desc: "Offset of the NON_SECRET_FUSES partition", + type: "int", + default: "64", + local: "true" + }, + { name: "NonSecretFusesSize", + desc: "Size of the NON_SECRET_FUSES partition", + type: "int", + default: "3792", + local: "true" + }, + { name: "FmcKeyManifestSvnOffset", + desc: "Offset of FMC_KEY_MANIFEST_SVN", + type: "int", + default: "64", + local: "true" + }, + { name: "FmcKeyManifestSvnSize", + desc: "Size of FMC_KEY_MANIFEST_SVN", + type: "int", + default: "4", + local: "true" + }, + { name: "RuntimeSvnOffset", + desc: "Offset of RUNTIME_SVN", + type: "int", + default: "68", + local: "true" + }, + { name: "RuntimeSvnSize", + desc: "Size of RUNTIME_SVN", + type: "int", + default: "16", + local: "true" + }, + { name: "LmsVerifyOffset", + desc: "Offset of LMS_VERIFY", + type: "int", + default: "84", + local: "true" + }, + { name: "LmsVerifySize", + desc: "Size of LMS_VERIFY", + type: "int", + default: "4", + local: "true" + }, + { name: "LmsRevocationOffset", + desc: "Offset of LMS_REVOCATION", + type: "int", + default: "88", + local: "true" + }, + { name: "LmsRevocationSize", + desc: "Size of LMS_REVOCATION", + type: "int", + default: "4", + local: "true" + }, + { name: "KeyManifestPkHashMaskOffset", + desc: "Offset of KEY_MANIFEST_PK_HASH_MASK", + type: "int", + default: "92", + local: "true" + }, + { name: "KeyManifestPkHashMaskSize", + desc: "Size of KEY_MANIFEST_PK_HASH_MASK", + type: "int", + default: "4", + local: "true" + }, + { name: "OwnerPkHashOffset", + desc: "Offset of OWNER_PK_HASH", + type: "int", + default: "96", + local: "true" + }, + { name: "OwnerPkHashSize", + desc: "Size of OWNER_PK_HASH", + type: "int", + default: "48", + local: "true" + }, + { name: "IdevidCertAttrOffset", + desc: "Offset of IDEVID_CERT_ATTR", + type: "int", + default: "144", + local: "true" + }, + { name: "IdevidCertAttrSize", + desc: "Size of IDEVID_CERT_ATTR", + type: "int", + default: "96", + local: "true" + }, + { name: "IdevidManufHsmIdOffset", + desc: "Offset of IDEVID_MANUF_HSM_ID", + type: "int", + default: "240", + local: "true" + }, + { name: "IdevidManufHsmIdSize", + desc: "Size of IDEVID_MANUF_HSM_ID", + type: "int", + default: "16", + local: "true" + }, + { name: "SocSteppingIdOffset", + desc: "Offset of SOC_STEPPING_ID", + type: "int", + default: "256", + local: "true" + }, + { name: "SocSteppingIdSize", + desc: "Size of SOC_STEPPING_ID", + type: "int", + default: "4", + local: "true" + }, + { name: "NonSecretFusesDigestOffset", + desc: "Offset of NON_SECRET_FUSES_DIGEST", + type: "int", + default: "3848", + local: "true" + }, + { name: "NonSecretFusesDigestSize", + desc: "Size of NON_SECRET_FUSES_DIGEST", + type: "int", + default: "8", + local: "true" + }, + { name: "Secret0Offset", + desc: "Offset of the SECRET0 partition", + type: "int", + default: "3856", + local: "true" + }, + { name: "Secret0Size", + desc: "Size of the SECRET0 partition", + type: "int", + default: "56", + local: "true" + }, + { name: "UdsSeedOffset", + desc: "Offset of UDS_SEED", + type: "int", + default: "3856", + local: "true" + }, + { name: "UdsSeedSize", + desc: "Size of UDS_SEED", + type: "int", + default: "48", + local: "true" + }, + { name: "Secret0DigestOffset", + desc: "Offset of SECRET0_DIGEST", + type: "int", + default: "3904", + local: "true" + }, + { name: "Secret0DigestSize", + desc: "Size of SECRET0_DIGEST", + type: "int", + default: "8", + local: "true" + }, + { name: "Secret1Offset", + desc: "Offset of the SECRET1 partition", + type: "int", + default: "3912", + local: "true" + }, + { name: "Secret1Size", + desc: "Size of the SECRET1 partition", + type: "int", + default: "40", + local: "true" + }, + { name: "FieldEntropyOffset", + desc: "Offset of FIELD_ENTROPY", + type: "int", + default: "3912", + local: "true" + }, + { name: "FieldEntropySize", + desc: "Size of FIELD_ENTROPY", + type: "int", + default: "32", + local: "true" + }, + { name: "Secret1DigestOffset", + desc: "Offset of SECRET1_DIGEST", + type: "int", + default: "3944", + local: "true" + }, + { name: "Secret1DigestSize", + desc: "Size of SECRET1_DIGEST", + type: "int", + default: "8", + local: "true" + }, + { name: "Secret2Offset", + desc: "Offset of the SECRET2 partition", + type: "int", + default: "3952", + local: "true" + }, + { name: "Secret2Size", + desc: "Size of the SECRET2 partition", + type: "int", + default: "56", + local: "true" + }, + { name: "KeyManifestPkHashOffset", + desc: "Offset of KEY_MANIFEST_PK_HASH", + type: "int", + default: "3952", + local: "true" + }, + { name: "KeyManifestPkHashSize", + desc: "Size of KEY_MANIFEST_PK_HASH", + type: "int", + default: "48", + local: "true" + }, + { name: "Secret2DigestOffset", + desc: "Offset of SECRET2_DIGEST", + type: "int", + default: "4000", + local: "true" + }, + { name: "Secret2DigestSize", + desc: "Size of SECRET2_DIGEST", + type: "int", + default: "8", + local: "true" + }, + { name: "LifeCycleOffset", + desc: "Offset of the LIFE_CYCLE partition", + type: "int", + default: "4008", + local: "true" + }, + { name: "LifeCycleSize", + desc: "Size of the LIFE_CYCLE partition", + type: "int", + default: "88", + local: "true" + }, + { name: "LcTransitionCntOffset", + desc: "Offset of LC_TRANSITION_CNT", + type: "int", + default: "4008", + local: "true" + }, + { name: "LcTransitionCntSize", + desc: "Size of LC_TRANSITION_CNT", + type: "int", + default: "48", + local: "true" + }, + { name: "LcStateOffset", + desc: "Offset of LC_STATE", + type: "int", + default: "4056", + local: "true" + }, + { name: "LcStateSize", + desc: "Size of LC_STATE", + type: "int", + default: "40", + local: "true" + }, + ] + + ///////////////////////////// + // Intermodule Connections // + ///////////////////////////// + + inter_signal_list: [ + // OTP dedicated power connection from AST + { struct: "" + type: "io" + name: "otp_ext_voltage_h" + act: "none" + default: "'0" + package: "", + } + // Power sequencing signals to AST + { struct: "otp_ast_req" + type: "uni" + name: "otp_ast_pwr_seq" + act: "req" + default: "'0" + package: "otp_ctrl_pkg" + desc: "Power sequencing signals to AST (VDD domain)." + } + // Power sequencing signals from AST + { struct: "otp_ast_rsp" + type: "uni" + name: "otp_ast_pwr_seq_h" + act: "rcv" + default: "'0" + package: "otp_ctrl_pkg" + desc: "Power sequencing signals coming from AST (VCC domain)." + } + // EDN interface + { struct: "edn" + type: "req_rsp" + name: "edn" + act: "req" + package: "edn_pkg" + desc: "Entropy request to the entropy distribution network for LFSR reseeding and ephemeral key derivation." + } + // Power manager init command + { struct: "pwr_otp" + type: "req_rsp" + name: "pwr_otp" + act: "rsp" + default: "'0" + package: "pwrmgr_pkg" + desc: "Initialization request/acknowledge from/to power manager." + } + // Macro-specific test signals to/from LC TAP + { struct: "lc_otp_vendor_test" + type: "req_rsp" + name: "lc_otp_vendor_test" + act: "rsp" + default: "'0" + package: "otp_ctrl_pkg" + desc: "Vendor test control signals from/to the life cycle TAP." + } + // LC transition command + { struct: "lc_otp_program" + type: "req_rsp" + name: "lc_otp_program" + act: "rsp" + default: "'0" + package: "otp_ctrl_pkg" + desc: "Life cycle state transition interface." + } + // Broadcast to LC + { struct: "otp_lc_data" + type: "uni" + name: "otp_lc_data" + act: "req" + default: "'0" + package: "otp_ctrl_pkg" + desc: ''' + Life cycle state output holding the current life cycle state, + the value of the transition counter and the tokens needed for life cycle transitions. + ''' + } + // Broadcast from LC + { struct: "lc_tx" + type: "uni" + name: "lc_escalate_en" + act: "rcv" + default: "lc_ctrl_pkg::Off" + package: "lc_ctrl_pkg" + desc: ''' + Life cycle escalation enable coming from life cycle controller. + This signal moves all FSMs within OTP into the error state. + ''' + } + { struct: "lc_tx" + type: "uni" + name: "lc_creator_seed_sw_rw_en" + act: "rcv" + default: "lc_ctrl_pkg::Off" + package: "lc_ctrl_pkg" + desc: ''' + Provision enable qualifier coming from life cycle controller. + This signal enables SW read / write access to the RMA_TOKEN and CREATOR_ROOT_KEY_SHARE0 and CREATOR_ROOT_KEY_SHARE1. + ''' + } + { struct: "lc_tx" + type: "uni" + name: "lc_owner_seed_sw_rw_en" + act: "rcv" + default: "lc_ctrl_pkg::Off" + package: "lc_ctrl_pkg" + desc: ''' + Provision enable qualifier coming from life cycle controller. + This signal enables SW read / write access to the OWNER_SEED. + ''' + } + { struct: "lc_tx" + type: "uni" + name: "lc_seed_hw_rd_en" + act: "rcv" + default: "lc_ctrl_pkg::Off" + package: "lc_ctrl_pkg" + desc: ''' + Seed read enable coming from life cycle controller. + This signal enables HW read access to the CREATOR_ROOT_KEY_SHARE0 and CREATOR_ROOT_KEY_SHARE1. + ''' + } + { struct: "lc_tx" + type: "uni" + name: "lc_dft_en" + act: "rcv" + default: "lc_ctrl_pkg::Off" + package: "lc_ctrl_pkg" + desc: ''' + Test enable qualifier coming from life cycle controller. + This signals enables the TL-UL access port to the proprietary OTP IP. + ''' + } + { struct: "lc_tx" + type: "uni" + name: "lc_check_byp_en" + act: "rcv" + default: "lc_ctrl_pkg::Off" + package: "lc_ctrl_pkg" + desc: ''' + Life cycle partition check bypass signal. + This signal causes the life cycle partition to bypass consistency checks during life cycle state transitions in order to prevent spurious consistency check failures. + ''' + } + // Broadcast to Key Manager + { struct: "otp_keymgr_key" + type: "uni" + name: "otp_keymgr_key" + act: "req" + default: "'0" + package: "otp_ctrl_pkg" + desc: "Key output to the key manager holding CREATOR_ROOT_KEY_SHARE0 and CREATOR_ROOT_KEY_SHARE1." + } + // Broadcast to Flash Controller + { struct: "flash_otp_key" + type: "req_rsp" + name: "flash_otp_key" + act: "rsp" + default: "'0" + package: "otp_ctrl_pkg" + desc: "Key derivation interface for FLASH scrambling." + } + // Key request from SRAM scramblers + { struct: "sram_otp_key" + // TODO: would be nice if this could accept parameters. + // Split this out into an issue. + width: "4" + type: "req_rsp" + name: "sram_otp_key" + act: "rsp" + default: "'0" + package: "otp_ctrl_pkg" + desc: "Array with key derivation interfaces for SRAM scrambling devices." + } + // Key request from OTBN RAM Scrambler + { struct: "otbn_otp_key" + type: "req_rsp" + name: "otbn_otp_key" + act: "rsp" + default: "'0" + package: "otp_ctrl_pkg" + desc: "Key derivation interface for OTBN scrambling devices." + } + // Hardware config partition + { struct: "otp_broadcast" + type: "uni" + name: "otp_broadcast" + act: "req" + default: "'0" + package: "otp_ctrl_part_pkg" + desc: "Output of the HW partitions with breakout data types." + } + // AST observability control + { struct: "ast_obs_ctrl", + type: "uni", + name: "obs_ctrl", + act: "rcv", + package: "ast_pkg" + desc: "AST observability control signals." + } + // prim otp observe bus + { struct: "logic", + type: "uni", + name: "otp_obs", + act: "req", + width: "8", + package: "" + desc: "AST observability bus." + } + ] // inter_signal_list + + ///////////////////// + // Countermeasures // + ///////////////////// + + countermeasures: [ + { name: "BUS.INTEGRITY", + desc: "End-to-end bus integrity scheme." + } + { name: "SECRET.MEM.SCRAMBLE", + desc: "Secret partitions are scrambled with a full-round PRESENT cipher." + } + { name: "PART.MEM.DIGEST", + desc: "Integrity of buffered partitions is ensured via a 64bit digest." + } + { name: "DAI.FSM.SPARSE", + desc: "The direct access interface FSM is sparsely encoded." + } + { name: "KDI.FSM.SPARSE", + desc: "The key derivation interface FSM is sparsely encoded." + } + { name: "LCI.FSM.SPARSE", + desc: "The life cycle interface FSM is sparsely encoded." + } + { name: "PART.FSM.SPARSE", + desc: "The partition FSMs are sparsely encoded." + } + { name: "SCRMBL.FSM.SPARSE", + desc: "The scramble datapath FSM is sparsely encoded." + } + { name: "TIMER.FSM.SPARSE", + desc: "The background check timer FSM is sparsely encoded." + } + { name: "DAI.CTR.REDUN", + desc: "The direct access interface address counter employs a cross-counter implementation." + } + { name: "KDI_SEED.CTR.REDUN", + desc: "The key derivation interface counter employs a cross-counter implementation." + } + { name: "KDI_ENTROPY.CTR.REDUN", + desc: "The key derivation entropy counter employs a cross-counter implementation." + } + { name: "LCI.CTR.REDUN", + desc: "The life cycle interface address counter employs a cross-counter implementation." + } + { name: "PART.CTR.REDUN", + desc: "The address counter of buffered partitions employs a cross-counter implementation." + } + { name: "SCRMBL.CTR.REDUN", + desc: "The srambling datapath counter employs a cross-counter implementation." + } + { name: "TIMER_INTEG.CTR.REDUN", + desc: "The background integrity check timer employs a duplicated counter implementation." + } + { name: "TIMER_CNSTY.CTR.REDUN", + desc: "The background consistency check timer employs a duplicated counter implementation." + } + { name: "TIMER.LFSR.REDUN", + desc: "The background check LFSR is duplicated." + } + { name: "DAI.FSM.LOCAL_ESC", + desc: "The direct access interface FSM is moved into an invalid state upon local escalation." + } + { name: "LCI.FSM.LOCAL_ESC", + desc: "The life cycle interface FSM is moved into an invalid state upon local escalation." + } + { name: "KDI.FSM.LOCAL_ESC", + desc: "The key derivation interface FSM is moved into an invalid state upon local escalation." + } + { name: "PART.FSM.LOCAL_ESC", + desc: "The partition FSMs are moved into an invalid state upon local escalation." + } + { name: "SCRMBL.FSM.LOCAL_ESC", + desc: "The scramble datapath FSM is moved into an invalid state upon local escalation." + } + { name: "TIMER.FSM.LOCAL_ESC", + desc: "The background check timer FSM is moved into an invalid state upon local escalation." + } + { name: "DAI.FSM.GLOBAL_ESC", + desc: "The direct access interface FSM is moved into an invalid state upon global escalation via life cycle." + } + { name: "LCI.FSM.GLOBAL_ESC", + desc: "The life cycle interface FSM is moved into an invalid state upon global escalation via life cycle." + } + { name: "KDI.FSM.GLOBAL_ESC", + desc: "The key derivation interface FSM is moved into an invalid state upon global escalation via life cycle." + } + { name: "PART.FSM.GLOBAL_ESC", + desc: "The partition FSMs are moved into an invalid state upon global escalation via life cycle." + } + { name: "SCRMBL.FSM.GLOBAL_ESC", + desc: "The scramble datapath FSM is moved into an invalid state upon global escalation via life cycle." + } + { name: "TIMER.FSM.GLOBAL_ESC", + desc: "The background check timer FSM is moved into an invalid state upon global escalation via life cycle." + } + { name: "PART.DATA_REG.INTEGRITY", + desc: "All partition buffer registers are protected with ECC on 64bit blocks." + } + { name: "PART.DATA_REG.BKGN_CHK", + desc: "The digest of buffered partitions is recomputed and checked at pseudorandom intervals in the background." + } + { name: "PART.MEM.REGREN" + desc: "Unbuffered ('software') partitions can be read-locked via a CSR until the next system reset." + } + { name: "PART.MEM.SW_UNREADABLE" + desc: "Secret buffered partitions become unreadable to software once they are locked via the digest." + } + { name: "PART.MEM.SW_UNWRITABLE" + desc: "All partitions become unwritable by software once they are locked via the digest." + } + { name: "LC_PART.MEM.SW_NOACCESS" + desc: "The life cycle partition is not directly readable nor writable via software." + } + { name: "ACCESS.CTRL.MUBI", + desc: "The access control signals going from the partitions to the DAI are MUBI encoded." + } + { name: "TOKEN_VALID.CTRL.MUBI", + desc: "The token valid signals going to the life cycle controller are MUBI encoded." + } + { name: "LC_CTRL.INTERSIG.MUBI", + desc: "The life cycle control signals are multibit encoded." + } + { name: "TEST.BUS.LC_GATED", + desc: "Prevent access to test signals and the OTP backdoor interface in non-test lifecycle states." + } + { name: "TEST_TL_LC_GATE.FSM.SPARSE", + desc: "The control FSM inside the TL-UL gating primitive is sparsely encoded." + } + { name: "DIRECT_ACCESS.CONFIG.REGWEN", + desc: "The direct access CSRs are REGWEN protected." + } + { name: "CHECK_TRIGGER.CONFIG.REGWEN", + desc: "The check trigger CSR is REGWEN protected." + } + { name: "CHECK.CONFIG.REGWEN", + desc: "The check CSR is REGWEN protected." + } + { name: "MACRO.MEM.INTEGRITY", + desc: ''' + The OTP macro employs a vendor-specific integrity scheme at the granularity of the native 16bit OTP words. + The scheme is able to at least detect single bit errors. + ''' + } + { name: "MACRO.MEM.CM", + desc: "The OTP macro may contain additional vendor-specific countermeasures." + } + ] + + features: [ + { + name: "OTP_CTRL.PARTITION.VENDOR_TEST" + desc: '''Vendor test partition is used for OTP programming smoke check during manufacturing flow. + In this partition, ECC uncorrectable errors will not lead to fatal errors and alerts. + Instead the error will be reported as correctable ECC error. + ''' + } + { + name: "OTP_CTRL.PARTITION.CREATOR_SW_CFG" + desc: '''During calibration stage, various parameters (clock, voltage, and timing sources) are calibrated and recorded to CREATOR_SW_CFG partition. + ''' + } + { + name: "OTP_CTRL.INIT" + desc: '''When power is up, OTP controller reads devices status. + After all reads complete, the controller performs integrity check on the HW_CFG* and SECRET partitions. + Once all integrity checks are complete, the controller marks outputs as valid. + ''' + } + { + name: "OTP_CTRL.PROGRAM" + desc: '''All other partitions except life cycle partition are programmed through DAI interface. + And once non-zero digest is programmed to these partition, no further write access is allowed. + Life cycle partition is programmed by LC_CTRL. + ''' + } + { + name: "OTP_CTRL.PARTITION.SECRET0" + desc: "Obfuscated UDS Seed" + } + { + name: "OTP_CTRL.PARTITION.SECRET1" + desc: "Obfuscated Field Entropy" + } + { + name: "OTP_CTRL.PARTITION.LIFE_CYCLE" + desc: '''LC state, LC transition count. + This feature is owned by the LC_CTRL and cannot be tested well through the OTP_CTRL CSR interface. + ''' + } + { + name: "OTP_CTRL.PARTITIONS_FEATURE.READ_LOCK" + desc: '''Following partitions can be read lockable by CSR. + - VENDOR_TEST + - CREATOR_SW_CFG + Following partitions can be read lockable by writing digest. + - SECRET0 + - SECRET1 + All read attempt to these partitions after read is locked will trigger AccessError (recoverable). + ''' + } + { + name: "OTP_CTRL.PARTITIONS_FEATURE.WRITE_LOCK" + desc: "All partitions except LIFE_CYCLE can be write lockable by writing digest." + } + { + name: "OTP_CTRL.ERROR_HANDLING.RECOVERABLE" + desc: "Recoverable error is created when unauthorized access atempt are detected via dai interface." + } + { + name: "OTP_CTRL.ERROR_HANDLING.FATAL" + desc: "Unrecoverable errors are created for uncorrectable ecc error, otp macro malfunction and unauthorized access via lc_ctrl." + } + { + name: "OTP_CTRL.BACKGROUND_CHECK.CHECK_TIMEOUT" + desc: "Timeout value for the integrity and consistency checks." + } + { + name: "OTP_CTRL.BACKGROUND_CHECK.INTEGRITY_CHECK_PERIOD" + desc: "The interval which the digest of the partition is recomputed to check integrity of locked partition." + } + { + name: "OTP_CTRL.BACKGROUND_CHECK.CONSISTENCY_CHECK_PERIOD" + desc: "Re-read period of the buffer registers to ensure data is matched with the associated OTP partition." + } + ] + + /////////////// + // Registers // + /////////////// + + regwidth: "32", + registers: { + core: [ + //////////////////////// + // Ctrl / Status CSRs // + //////////////////////// + + { name: "STATUS", + desc: "OTP status register.", + swaccess: "ro", + hwaccess: "hwo", + hwext: "true", + resval: 0, + tags: [ // OTP internal HW can modify status register + "excl:CsrAllTests:CsrExclCheck"], + fields: [ + { bits: "0" + name: "VENDOR_TEST_ERROR" + desc: ''' + Set to 1 if an error occurred in this partition. + If set to 1, SW should check the !!ERR_CODE register at the corresponding index. + ''' + } + { bits: "1" + name: "NON_SECRET_FUSES_ERROR" + desc: ''' + Set to 1 if an error occurred in this partition. + If set to 1, SW should check the !!ERR_CODE register at the corresponding index. + ''' + } + { bits: "2" + name: "SECRET0_ERROR" + desc: ''' + Set to 1 if an error occurred in this partition. + If set to 1, SW should check the !!ERR_CODE register at the corresponding index. + ''' + } + { bits: "3" + name: "SECRET1_ERROR" + desc: ''' + Set to 1 if an error occurred in this partition. + If set to 1, SW should check the !!ERR_CODE register at the corresponding index. + ''' + } + { bits: "4" + name: "SECRET2_ERROR" + desc: ''' + Set to 1 if an error occurred in this partition. + If set to 1, SW should check the !!ERR_CODE register at the corresponding index. + ''' + } + { bits: "5" + name: "LIFE_CYCLE_ERROR" + desc: ''' + Set to 1 if an error occurred in this partition. + If set to 1, SW should check the !!ERR_CODE register at the corresponding index. + ''' + } + { bits: "6" + name: "DAI_ERROR" + desc: ''' + Set to 1 if an error occurred in the DAI. + If set to 1, SW should check the !!ERR_CODE register at the corresponding index. + ''' + } + { bits: "7" + name: "LCI_ERROR" + desc: ''' + Set to 1 if an error occurred in the LCI. + If set to 1, SW should check the !!ERR_CODE register at the corresponding index. + ''' + } + { bits: "8" + name: "TIMEOUT_ERROR" + desc: ''' + Set to 1 if an integrity or consistency check times out. + This raises an fatal_check_error alert and is an unrecoverable error condition. + ''' + } + { bits: "9" + name: "LFSR_FSM_ERROR" + desc: ''' + Set to 1 if the LFSR timer FSM has reached an invalid state. + This raises an fatal_check_error alert and is an unrecoverable error condition. + ''' + } + { bits: "10" + name: "SCRAMBLING_FSM_ERROR" + desc: ''' + Set to 1 if the scrambling datapath FSM has reached an invalid state. + This raises an fatal_check_error alert and is an unrecoverable error condition. + ''' + } + { bits: "11" + name: "KEY_DERIV_FSM_ERROR" + desc: ''' + Set to 1 if the key derivation FSM has reached an invalid state. + This raises an fatal_check_error alert and is an unrecoverable error condition. + ''' + } + { bits: "12" + name: "BUS_INTEG_ERROR" + desc: ''' + This bit is set to 1 if a fatal bus integrity fault is detected. + This error triggers a fatal_bus_integ_error alert. + ''' + } + { bits: "13" + name: "DAI_IDLE" + desc: "Set to 1 if the DAI is idle and ready to accept commands." + } + { bits: "14" + name: "CHECK_PENDING" + desc: "Set to 1 if an integrity or consistency check triggered by the LFSR timer or via !!CHECK_TRIGGER is pending." + } + ] + } + { multireg: { + name: "ERR_CODE", + desc: ''' + This register holds information about error conditions that occurred in the agents + interacting with the OTP macro via the internal bus. The error codes should be checked + if the partitions, DAI or LCI flag an error in the !!STATUS register, or when an + !!INTR_STATE.otp_error has been triggered. Note that all errors trigger an otp_error + interrupt, and in addition some errors may trigger either an fatal_macro_error or an + fatal_check_error alert. + ''', + count: "NumErrorEntries", + swaccess: "ro", + hwaccess: "hwo", + hwext: "true", + cname: "AGENT", + compact: "false", + resval: 0, + tags: [ // OTP internal HW can modify the error code registers + "excl:CsrAllTests:CsrExclCheck"], + fields: [ + { + bits: "2:0" + enum: [ + { value: "0", + name: "NO_ERROR", + desc: ''' + No error condition has occurred. + ''' + }, + { value: "1", + name: "MACRO_ERROR", + desc: ''' + Returned if the OTP macro command was invalid or did not complete successfully + due to a macro malfunction. + This error should never occur during normal operation and is not recoverable. + This error triggers an fatal_macro_error alert. + ''' + }, + { value: "2", + name: "MACRO_ECC_CORR_ERROR", + desc: ''' + A correctable ECC error has occured during an OTP read operation. + The corresponding controller automatically recovers from this error when + issuing a new command. + ''' + }, + { value: "3", + name: "MACRO_ECC_UNCORR_ERROR", + desc: ''' + An uncorrectable ECC error has occurred during an OTP read operation. + This error should never occur during normal operation and is not recoverable. + If this error is present this may be a sign that the device is malfunctioning. + This error triggers an fatal_macro_error alert. + ''' + }, + { value: "4", + name: "MACRO_WRITE_BLANK_ERROR", + desc: ''' + This error is returned if a programming operation attempted to clear a bit that has previously been programmed to 1. + The corresponding controller automatically recovers from this error when issuing a new command. + + Note however that the affected OTP word may be left in an inconsistent state if this error occurs. + This can cause several issues when the word is accessed again (either as part of a regular read operation, as part of the readout at boot, or as part of a background check). + + It is important that SW ensures that each word is only written once, since this can render the device useless. + ''' + }, + { value: "5", + name: "ACCESS_ERROR", + desc: ''' + This error indicates that a locked memory region has been accessed. + The corresponding controller automatically recovers from this error when issuing a new command. + ''' + }, + { value: "6", + name: "CHECK_FAIL_ERROR", + desc: ''' + An ECC, integrity or consistency mismatch has been detected in the buffer registers. + This error should never occur during normal operation and is not recoverable. + This error triggers an fatal_check_error alert. + ''' + }, + { value: "7", + name: "FSM_STATE_ERROR", + desc: ''' + The FSM of the corresponding controller has reached an invalid state, or the FSM has + been moved into a terminal error state due to an escalation action via lc_escalate_en_i. + This error should never occur during normal operation and is not recoverable. + If this error is present, this is a sign that the device has fallen victim to + an invasive attack. This error triggers an fatal_check_error alert. + ''' + }, + ] + } + ] + } + } + { name: "DIRECT_ACCESS_REGWEN", + desc: ''' + Register write enable for all direct access interface registers. + ''', + swaccess: "rw0c", + hwaccess: "hrw", + hwext: "true", + hwqe: "true", + tags: [ // OTP internal HW will set this enable register to 0 when OTP is not under IDLE + // state, so could not auto-predict its value + "excl:CsrNonInitTests:CsrExclCheck"], + fields: [ + { + bits: "0", + desc: ''' + This bit controls whether the DAI registers can be written. + Write 0 to it in order to clear the bit. + + Note that the hardware also modulates this bit and sets it to 0 temporarily + during an OTP operation such that the corresponding address and data registers + cannot be modified while an operation is pending. The !!DAI_IDLE status bit + will also be set to 0 in such a case. + ''' + resval: 1, + }, + ] + }, + { name: "DIRECT_ACCESS_CMD", + desc: "Command register for direct accesses.", + swaccess: "r0w1c", + hwaccess: "hro", + hwqe: "true", + hwext: "true", + resval: 0, + regwen: "DIRECT_ACCESS_REGWEN", + tags: [ // Write to DIRECT_ACCESS_CMD randomly might cause OTP_ERRORs and illegal sequences + "excl:CsrNonInitTests:CsrExclWrite"], + fields: [ + { bits: "0", + name: "RD", + desc: ''' + Initiates a readout sequence that reads the location specified + by !!DIRECT_ACCESS_ADDRESS. The command places the data read into + !!DIRECT_ACCESS_RDATA_0 and !!DIRECT_ACCESS_RDATA_1 (for 64bit partitions). + ''' + } + { bits: "1", + name: "WR", + desc: ''' + Initiates a programming sequence that writes the data in !!DIRECT_ACCESS_WDATA_0 + and !!DIRECT_ACCESS_WDATA_1 (for 64bit partitions) to the location specified by + !!DIRECT_ACCESS_ADDRESS. + ''' + } + { bits: "2", + name: "DIGEST", + desc: ''' + Initiates the digest calculation and locking sequence for the partition specified by + !!DIRECT_ACCESS_ADDRESS. + ''' + } + ] + } + { name: "DIRECT_ACCESS_ADDRESS", + desc: "Address register for direct accesses.", + swaccess: "rw", + hwaccess: "hro", + hwqe: "false", + resval: 0, + regwen: "DIRECT_ACCESS_REGWEN", + tags: [ // The enable register "DIRECT_ACCESS_REGWEN" is HW controlled, + // so not able to predict this register value automatically + "excl:CsrNonInitTests:CsrExclCheck"], + fields: [ + { bits: "OtpByteAddrWidth-1:0", + desc: ''' + This is the address for the OTP word to be read or written through + the direct access interface. Note that the address is aligned to the access size + internally, hence bits 1:0 are ignored for 32bit accesses, and bits 2:0 are ignored + for 64bit accesses. + + For the digest calculation command, set this register to the partition base offset. + ''' + } + ] + } + { multireg: { + name: "DIRECT_ACCESS_WDATA", + desc: '''Write data for direct accesses. + Hardware automatically determines the access granule (32bit or 64bit) based on which + partition is being written to. + ''', + count: "NumDaiWords", // 2 x 32bit = 64bit + swaccess: "rw", + hwaccess: "hro", + hwqe: "false", + regwen: "DIRECT_ACCESS_REGWEN", + cname: "WORD", + resval: 0, + tags: [ // The value of this register is written from "DIRECT_ACCESS_RDATA", + // so could not predict this register value automatically + "excl:CsrAllTests:CsrExclCheck"], + fields: [ + { bits: "31:0" + } + ] + } + }, + { multireg: { + name: "DIRECT_ACCESS_RDATA", + desc: '''Read data for direct accesses. + Hardware automatically determines the access granule (32bit or 64bit) based on which + partition is read from. + ''', + count: "NumDaiWords", // 2 x 32bit = 64bit + swaccess: "ro", + hwaccess: "hwo", + hwext: "true", + cname: "WORD", + resval: 0, + fields: [ + { bits: "31:0" + } + ] + } + }, + + ////////////////////////////////////// + // Integrity and Consistency Checks // + ////////////////////////////////////// + { name: "CHECK_TRIGGER_REGWEN", + desc: ''' + Register write enable for !!CHECK_TRIGGER. + ''', + swaccess: "rw0c", + hwaccess: "none", + fields: [ + { bits: "0", + desc: ''' + When cleared to 0, the !!CHECK_TRIGGER register cannot be written anymore. + Write 0 to clear this bit. + ''' + resval: 1, + }, + ] + }, + { name: "CHECK_TRIGGER", + desc: "Command register for direct accesses.", + swaccess: "r0w1c", + hwaccess: "hro", + hwqe: "true", + hwext: "true", + resval: 0, + regwen: "CHECK_TRIGGER_REGWEN", + fields: [ + { bits: "0", + name: "INTEGRITY", + desc: ''' + Writing 1 to this bit triggers an integrity check. SW should monitor !!STATUS.CHECK_PENDING + and wait until the check has been completed. If there are any errors, those will be flagged + in the !!STATUS and !!ERR_CODE registers, and via the interrupts and alerts. + ''' + } + { bits: "1", + name: "CONSISTENCY", + desc: ''' + Writing 1 to this bit triggers a consistency check. SW should monitor !!STATUS.CHECK_PENDING + and wait until the check has been completed. If there are any errors, those will be flagged + in the !!STATUS and !!ERR_CODE registers, and via interrupts and alerts. + ''' + } + ] + }, + { name: "CHECK_REGWEN", + desc: ''' + Register write enable for !!INTEGRITY_CHECK_PERIOD and !!CONSISTENCY_CHECK_PERIOD. + ''', + swaccess: "rw0c", + hwaccess: "none", + fields: [ + { bits: "0", + desc: ''' + When cleared to 0, !!INTEGRITY_CHECK_PERIOD and !!CONSISTENCY_CHECK_PERIOD registers cannot be written anymore. + Write 0 to clear this bit. + ''' + resval: 1, + }, + ] + }, + { name: "CHECK_TIMEOUT", + desc: ''' + Timeout value for the integrity and consistency checks. + ''', + swaccess: "rw", + hwaccess: "hro", + regwen: "CHECK_REGWEN", + tags: [ // Do not write to this automatically, as it may trigger fatal alert, and cause + // escalation. + "excl:CsrAllTests:CsrExclWrite"], + fields: [ + { bits: "31:0", + desc: ''' + Timeout value in cycles for the for the integrity and consistency checks. If an integrity or consistency + check does not complete within the timeout window, an error will be flagged in the !!STATUS register, + an otp_error interrupt will be raised, and an fatal_check_error alert will be sent out. The timeout should + be set to a large value to stay on the safe side. The maximum check time can be upper bounded by the + number of cycles it takes to readout, scramble and digest the entire OTP array. Since this amounts to + roughly 25k cycles, it is recommended to set this value to at least 100'000 cycles in order to stay on the + safe side. A value of zero disables the timeout mechanism (default). + ''' + resval: 0, + }, + ] + }, + { name: "INTEGRITY_CHECK_PERIOD", + desc: ''' + This value specifies the maximum period that can be generated pseudo-randomly. + Only applies to the HW_CFG* and SECRET* partitions once they are locked. + ''' + swaccess: "rw", + hwaccess: "hro", + regwen: "CHECK_REGWEN", + fields: [ + { bits: "31:0", + desc: ''' + The pseudo-random period is generated using a 40bit LFSR internally, and this register defines + the bit mask to be applied to the LFSR output in order to limit its range. The value of this + register is left shifted by 8bits and the lower bits are set to 8'hFF in order to form the 40bit mask. + A recommended value is 0x3_FFFF, corresponding to a maximum period of ~2.8s at 24MHz. + A value of zero disables the timer (default). Note that a one-off check can always be triggered via + !!CHECK_TRIGGER.INTEGRITY. + ''' + resval: "0" + } + ] + } + { name: "CONSISTENCY_CHECK_PERIOD", + desc: ''' + This value specifies the maximum period that can be generated pseudo-randomly. + This applies to the LIFE_CYCLE partition and the HW_CFG* and SECRET* partitions once they are locked. + ''' + swaccess: "rw", + hwaccess: "hro", + regwen: "CHECK_REGWEN", + fields: [ + { bits: "31:0", + desc: ''' + The pseudo-random period is generated using a 40bit LFSR internally, and this register defines + the bit mask to be applied to the LFSR output in order to limit its range. The value of this + register is left shifted by 8bits and the lower bits are set to 8'hFF in order to form the 40bit mask. + A recommended value is 0x3FF_FFFF, corresponding to a maximum period of ~716s at 24MHz. + A value of zero disables the timer (default). Note that a one-off check can always be triggered via + !!CHECK_TRIGGER.CONSISTENCY. + ''' + resval: "0" + } + ] + } + + //////////////////////////////////// + // Dynamic Locks of SW Parititons // + //////////////////////////////////// + { name: "VENDOR_TEST_READ_LOCK", + desc: ''' + Runtime read lock for the VENDOR_TEST partition. + ''', + swaccess: "rw0c", + hwaccess: "hro", + regwen: "DIRECT_ACCESS_REGWEN", + tags: [ // The value of this register can affect the read access of the this + // partition's memory window. Excluding this register from writing can ensure + // memories have read and write access. + "excl:CsrNonInitTests:CsrExclWrite"], + fields: [ + { bits: "0", + desc: ''' + When cleared to 0, read access to the VENDOR_TEST partition is locked. + Write 0 to clear this bit. + ''' + resval: 1, + }, + ] + }, + { name: "NON_SECRET_FUSES_READ_LOCK", + desc: ''' + Runtime read lock for the NON_SECRET_FUSES partition. + ''', + swaccess: "rw0c", + hwaccess: "hro", + regwen: "DIRECT_ACCESS_REGWEN", + tags: [ // The value of this register can affect the read access of the this + // partition's memory window. Excluding this register from writing can ensure + // memories have read and write access. + "excl:CsrNonInitTests:CsrExclWrite"], + fields: [ + { bits: "0", + desc: ''' + When cleared to 0, read access to the NON_SECRET_FUSES partition is locked. + Write 0 to clear this bit. + ''' + resval: 1, + }, + ] + }, + + /////////////////////// + // Integrity Digests // + /////////////////////// + { multireg: { + name: "VENDOR_TEST_DIGEST", + desc: ''' + Integrity digest for the VENDOR_TEST partition. + The integrity digest is 0 by default. Software must write this + digest value via the direct access interface in order to lock the partition. + After a reset, write access to the VENDOR_TEST partition is locked and + the digest becomes visible in this CSR. + ''', + count: "NumDigestWords", + swaccess: "ro", + hwaccess: "hwo", + hwext: "true", + cname: "WORD", + resval: 0, + tags: [ // OTP internal HW will update status so can not auto-predict its value. + "excl:CsrAllTests:CsrExclCheck"], + fields: [ + { bits: "31:0" + } + ] + } + }, + { multireg: { + name: "NON_SECRET_FUSES_DIGEST", + desc: ''' + Integrity digest for the NON_SECRET_FUSES partition. + The integrity digest is 0 by default. Software must write this + digest value via the direct access interface in order to lock the partition. + After a reset, write access to the NON_SECRET_FUSES partition is locked and + the digest becomes visible in this CSR. + ''', + count: "NumDigestWords", + swaccess: "ro", + hwaccess: "hwo", + hwext: "true", + cname: "WORD", + resval: 0, + tags: [ // OTP internal HW will update status so can not auto-predict its value. + "excl:CsrAllTests:CsrExclCheck"], + fields: [ + { bits: "31:0" + } + ] + } + }, + { multireg: { + name: "SECRET0_DIGEST", + desc: ''' + Integrity digest for the SECRET0 partition. + The integrity digest is 0 by default. The digest calculation can be triggered via the !!DIRECT_ACCESS_CMD. + After a reset, the digest then becomes visible in this CSR, and the corresponding partition becomes write-locked. + ''', + count: "NumDigestWords", + swaccess: "ro", + hwaccess: "hwo", + hwext: "true", + cname: "WORD", + resval: 0, + tags: [ // OTP internal HW will update status so can not auto-predict its value. + "excl:CsrAllTests:CsrExclCheck"], + fields: [ + { bits: "31:0" + } + ] + } + }, + { multireg: { + name: "SECRET1_DIGEST", + desc: ''' + Integrity digest for the SECRET1 partition. + The integrity digest is 0 by default. The digest calculation can be triggered via the !!DIRECT_ACCESS_CMD. + After a reset, the digest then becomes visible in this CSR, and the corresponding partition becomes write-locked. + ''', + count: "NumDigestWords", + swaccess: "ro", + hwaccess: "hwo", + hwext: "true", + cname: "WORD", + resval: 0, + tags: [ // OTP internal HW will update status so can not auto-predict its value. + "excl:CsrAllTests:CsrExclCheck"], + fields: [ + { bits: "31:0" + } + ] + } + }, + { multireg: { + name: "SECRET2_DIGEST", + desc: ''' + Integrity digest for the SECRET2 partition. + The integrity digest is 0 by default. The digest calculation can be triggered via the !!DIRECT_ACCESS_CMD. + After a reset, the digest then becomes visible in this CSR, and the corresponding partition becomes write-locked. + ''', + count: "NumDigestWords", + swaccess: "ro", + hwaccess: "hwo", + hwext: "true", + cname: "WORD", + resval: 0, + tags: [ // OTP internal HW will update status so can not auto-predict its value. + "excl:CsrAllTests:CsrExclCheck"], + fields: [ + { bits: "31:0" + } + ] + } + }, + + //////////////////////////////// + // Software Config Partitions // + //////////////////////////////// + { skipto: "0x1000" } + + { window: { + name: "SW_CFG_WINDOW" + items: "NumSwCfgWindowWords" + swaccess: "ro", + desc: ''' + Any read to this window directly maps to the corresponding offset in the creator and owner software + config partitions, and triggers an OTP readout of the bytes requested. Note that the transaction + will block until OTP readout has completed. + ''' + } + } + ], + + // OTP wrapper-specific registers + prim: [ + { name: "CSR0", + desc: "" + swaccess: "rw", + hwaccess: "hro", + hwext: "false", + hwqe: "false", + fields: [ + { bits: "0", + name: "field0", + desc: "", + resval: "0x0", + } + { bits: "1", + name: "field1", + desc: "", + resval: "0x0", + } + { bits: "2", + name: "field2", + desc: "", + resval: "0x0", + } + { bits: "13:4", + name: "field3", + desc: "" + resval: "0x0", + } + { bits: "26:16", + name: "field4", + desc: "" + resval: "0x0", + } + ] + }, + { name: "CSR1", + desc: "" + swaccess: "rw", + hwaccess: "hro", + hwext: "false", + hwqe: "false", + fields: [ + { bits: "6:0", + name: "field0", + desc: "" + resval: "0x0", + } + { bits: "7:7", + name: "field1", + desc: "", + resval: "0x0", + } + { bits: "14:8", + name: "field2", + desc: "" + resval: "0x0", + } + { bits: "15:15", + name: "field3", + desc: "", + resval: "0x0", + } + { bits: "31:16", + name: "field4", + desc: "", + resval: "0x0", + } + ] + }, + { name: "CSR2", + desc: "" + swaccess: "rw", + hwaccess: "hro", + hwext: "false", + hwqe: "false", + fields: [ + { bits: "0", + name: "field0", + desc: "", + resval: "0x0", + } + ] + }, + { name: "CSR3", + desc: "" + swaccess: "rw", + hwaccess: "hrw", + hwext: "false", + hwqe: "false", + fields: [ + { bits: "2:0", + name: "field0", + desc: "" + swaccess: "rw1c", + resval: "0x0", + } + { bits: "13:4", + name: "field1", + desc: "", + swaccess: "rw1c", + resval: "0x0", + } + { bits: "16", + name: "field2", + desc: "", + swaccess: "rw1c", + resval: "0x0", + } + { bits: "17", + name: "field3", + desc: "", + swaccess: "ro", + resval: "0x0", + } + { bits: "18", + name: "field4", + desc: "", + swaccess: "ro", + resval: "0x0", + } + { bits: "19", + name: "field5", + desc: "", + swaccess: "ro", + resval: "0x0", + } + { bits: "20", + name: "field6", + desc: "", + swaccess: "ro", + resval: "0x0", + } + { bits: "21", + name: "field7", + desc: "", + swaccess: "ro", + resval: "0x0", + } + { bits: "22", + name: "field8", + desc: "", + swaccess: "ro", + resval: "0x0", + } + ] + }, + { name: "CSR4", + desc: "" + swaccess: "rw", + hwaccess: "hro", + hwext: "false", + hwqe: "false", + fields: [ + { bits: "9:0", + name: "field0", + desc: "" + resval: "0x0", + } + { bits: "12", + name: "field1", + desc: "" + resval: "0x0", + } + { bits: "13", + name: "field2", + desc: "" + resval: "0x0", + } + { bits: "14", + name: "field3", + desc: "" + resval: "0x0", + } + ] + }, + { name: "CSR5", + desc: "" + swaccess: "rw", + hwaccess: "hrw", + hwext: "false", + hwqe: "false", + fields: [ + { bits: "5:0", + name: "field0", + desc: "" + swaccess: "rw", + resval: "0x0", + } + { bits: "7:6", + name: "field1", + desc: "" + swaccess: "rw", + resval: "0x0", + } + { bits: "8", + name: "field2", + desc: "", + swaccess: "ro", + resval: "0x0", + } + { bits: "11:9", + name: "field3", + desc: "" + swaccess: "ro", + resval: "0x0", + } + { bits: "12", + name: "field4", + desc: "" + swaccess: "ro", + resval: "0x0", + } + { bits: "13", + name: "field5", + desc: "" + swaccess: "ro", + resval: "0x0", + } + { bits: "31:16", + name: "field6", + desc: "" + swaccess: "rw", + resval: "0x0", + } + ] + }, + { name: "CSR6", + desc: "" + swaccess: "rw", + hwaccess: "hro", + hwext: "false", + hwqe: "false", + fields: [ + { bits: "9:0", + name: "field0", + desc: "" + resval: "0x0", + } + { bits: "11", + name: "field1", + desc: "", + swaccess: "rw", + resval: "0x0", + } + { bits: "12", + name: "field2", + desc: "", + swaccess: "rw", + resval: "0x0", + } + { bits: "31:16", + name: "field3", + desc: "" + resval: "0x0", + } + ] + }, + { name: "CSR7", + desc: "", + swaccess: "ro", + hwaccess: "hrw", + hwext: "false", + hwqe: "false", + fields: [ + { bits: "5:0", + name: "field0", + desc: "" + swaccess: "ro", + resval: "0x0", + } + { bits: "10:8", + name: "field1", + desc: "", + swaccess: "ro", + resval: "0x0", + } + { bits: "14", + name: "field2", + desc: "", + swaccess: "ro", + resval: "0x0", + } + { bits: "15", + name: "field3", + desc: "", + swaccess: "ro", + resval: "0x0", + } + ] + }, + ] + } +} + + + + + + + + + diff --git a/src/fuse_ctrl/data/otp_ctrl.hjson.tpl b/src/fuse_ctrl/data/otp_ctrl.hjson.tpl new file mode 100755 index 000000000..89ccf4517 --- /dev/null +++ b/src/fuse_ctrl/data/otp_ctrl.hjson.tpl @@ -0,0 +1,1522 @@ +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// HJSON with partition metadata. +// +${gen_comment} +<% +from topgen.lib import Name + +num_part = len(otp_mmap.config["partitions"]) +num_part_unbuf = 0 +for part in otp_mmap.config["partitions"]: + if part["variant"] == "Unbuffered": + num_part_unbuf += 1 +num_part_buf = num_part - num_part_unbuf +otp_size_as_bytes = 2 ** otp_mmap.config["otp"]["byte_addr_width"] +otp_size_as_uint32 = otp_size_as_bytes // 4 +%>\ +{ + name: "caliptra_otp_ctrl", + human_name: " Caliptra One-Time Programmable Memory COntroller", + one_line_desc: "Interfaces integrated one0time programmable memory, supports scrambling, integrity and secure dai_wr_inprogress", + one_paragraph_desc: ''' + One-Time Programmable (OTP) Memory Controller provides an open source abstraction interface for software and other hardware components such as Life Cycle Controller and Key Manager to interact with an integrated, closed source, proprietary OTP memory. + On top of defensive features provided by the proprietary OTP memory to deter side-channel analysis (SCA), fault injection (FI) attacks, and visual and electrical probing, the open source OTP controller features high-level logical security protection such as integrity checks and scrambling, as well as software isolation for when OTP contents are readable and programmable. + It features multiple individually-lockable logical partitions, periodic / persistent checking of OTP values, and a separate partition and interface for Life Cycle Controller. + ''' + // Uique comportablre IP identifier defined under KNOWN_CIP_IDS in the regtool + // TODO: This section needs to be updated for Caliptra (copying OT settings for now, to mark as placeholders) + cip_id: "16", + design_spec: "../doc", + dv_doc: "../doc/dv", + hw_checklist: "../doc/checklist", + sw_checklist: "/sw/device/lib/dif/dif_otp_ctrl", + revisions: [ + { + version: "0.1.0", + life_stage: "L1", + design_stage: "D2", + verification_stage: "V2", + dif_stage: "S1", + commit_id: "127b109e2fab9336e830158abe449a3922544ded", + notes: "", + } + { + version: "1.0.0", + life_stage: "L1", + design_stage: "D3", + verification_stage: "V2S", + dif_stage: "S2", + notes: "", + } + { + version: "2.0.0", + life_stage: "L1", + design_stage: "D2S", + verification_stage: "V2S", + dif_stage: "S2", + notes: "", + } + ] + clocking: [ + {clock: "clk_i", reset: "rst_ni", primary: true}, + {clock: "clk_edn_i", reset: "rst_edn_ni"} + ] + scan: "true", // Enable `scanmode_i` port + scan_reset: "true", // Enable `scan_rst_ni` port + scan_en: "true", // Enable `scan_en_i` port + bus_interfaces: [ + { protocol: "tlul", direction: "device", name: "core" } + { protocol: "tlul", direction: "device", name: "prim", hier_path: "u_otp.gen_generic.u_impl_generic.u_reg_top" } + ], + + available_output_list: [ + { name: "test", + width: 8, + desc: "Test-related GPIOs. Only active in DFT-enabled life cycle states." + } + ], + + /////////////////////////// + // Interrupts and Alerts // + /////////////////////////// + + interrupt_list: [ + { name: "otp_operation_done", + desc: "A direct access command or digest calculation operation has completed." + } + { name: "otp_error", + desc: "An error has occurred in the OTP controller. Check the !!ERR_CODE register to get more information." + } + ], + + alert_list: [ + { name: "fatal_macro_error", + desc: "This alert triggers if hardware detects an uncorrectable error during an OTP transaction, for example an uncorrectable ECC error in the OTP array.", + } + { name: "fatal_check_error", + desc: "This alert triggers if any of the background checks fails. This includes the digest checks and concurrent ECC checks in the buffer registers.", + } + { name: "fatal_bus_integ_error", + desc: "This fatal alert is triggered when a fatal TL-UL bus integrity fault is detected." + } + { name: "fatal_prim_otp_alert", + desc: "Fatal alert triggered inside the OTP primitive, including fatal TL-UL bus integrity faults of the test interface." + } + { name: "recov_prim_otp_alert", + desc: "Recoverable alert triggered inside the OTP primitive." + } + ], + + //////////////// + // Parameters // + //////////////// + param_list: [ + // Init file + { name: "MemInitFile", + desc: "VMEM file to initialize the OTP macro.", + type: "", + default: '""', + expose: "true", + local: "false" + } + // Random netlist constants + { name: "RndCnstLfsrSeed", + desc: "Compile-time random bits for initial LFSR seed", + type: "otp_ctrl_pkg::lfsr_seed_t" + randcount: "40", + randtype: "data", // randomize randcount databits + } + { name: "RndCnstLfsrPerm", + desc: "Compile-time random permutation for LFSR output", + type: "otp_ctrl_pkg::lfsr_perm_t" + randcount: "40", + randtype: "perm", // random permutation for randcount elements + } + { name: "RndCnstScrmblKeyInit", + desc: "Compile-time random permutation for scrambling key/nonce register reset value", + type: "otp_ctrl_pkg::scrmbl_key_init_t" + randcount: "256", + randtype: "data", // random permutation for randcount elements + } + // Normal parameters + { name: "NumSramKeyReqSlots", + desc: "Number of key slots", + type: "int", + default: "4", + local: "true" + }, + { name: "OtpByteAddrWidth", + desc: "Width of the OTP byte address.", + type: "int", + default: "${otp_mmap.config["otp"]["byte_addr_width"]}", + local: "true" + }, + { name: "NumErrorEntries", + desc: "Number of error register entries.", + type: "int", + default: "${num_part + 2}", // partitions + DAI/LCI + local: "true" + }, + { name: "NumDaiWords", + desc: "Number of 32bit words in the DAI.", + type: "int", + default: "2", + local: "true" + }, + { name: "NumDigestWords", + desc: "Size of the digest fields in 32bit words.", + type: "int", + default: "2", + local: "true" + }, + { name: "NumSwCfgWindowWords", + desc: "Size of the TL-UL window in 32bit words. Note that the effective partition size is smaller than that.", + type: "int", + default: "${otp_size_as_uint32}", + local: "true" + } + + // Memory map Info + { name: "NumPart", + desc: "Number of partitions", + type: "int", + default: "${num_part}", + local: "true" + }, + { name: "NumPartUnbuf", + desc: "Number of unbuffered partitions", + type: "int", + default: "${num_part_unbuf}", + local: "true" + }, + { name: "NumPartBuf", + desc: "Number of buffered partitions (including 1 lifecycle partition)", + type: "int", + default: "${num_part_buf}", + local: "true" + }, + % for part in otp_mmap.config["partitions"]: + <% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() + %>\ + { name: "${part_name_camel}Offset", + desc: "Offset of the ${part["name"]} partition", + type: "int", + default: "${part["offset"]}", + local: "true" + }, + { name: "${part_name_camel}Size", + desc: "Size of the ${part["name"]} partition", + type: "int", + default: "${part["size"]}", + local: "true" + }, + % for item in part["items"]: + <% + item_name = Name.from_snake_case(item["name"]) + item_name_camel = item_name.as_camel_case() + %>\ + { name: "${item_name_camel}Offset", + desc: "Offset of ${item["name"]}", + type: "int", + default: "${item["offset"]}", + local: "true" + }, + { name: "${item_name_camel}Size", + desc: "Size of ${item["name"]}", + type: "int", + default: "${item["size"]}", + local: "true" + }, + % endfor + % endfor + ] + + ///////////////////////////// + // Intermodule Connections // + ///////////////////////////// + + inter_signal_list: [ + // OTP dedicated power connection from AST + { struct: "" + type: "io" + name: "otp_ext_voltage_h" + act: "none" + default: "'0" + package: "", + } + // Power sequencing signals to AST + { struct: "otp_ast_req" + type: "uni" + name: "otp_ast_pwr_seq" + act: "req" + default: "'0" + package: "otp_ctrl_pkg" + desc: "Power sequencing signals to AST (VDD domain)." + } + // Power sequencing signals from AST + { struct: "otp_ast_rsp" + type: "uni" + name: "otp_ast_pwr_seq_h" + act: "rcv" + default: "'0" + package: "otp_ctrl_pkg" + desc: "Power sequencing signals coming from AST (VCC domain)." + } + // EDN interface + { struct: "edn" + type: "req_rsp" + name: "edn" + act: "req" + package: "edn_pkg" + desc: "Entropy request to the entropy distribution network for LFSR reseeding and ephemeral key derivation." + } + // Power manager init command + { struct: "pwr_otp" + type: "req_rsp" + name: "pwr_otp" + act: "rsp" + default: "'0" + package: "pwrmgr_pkg" + desc: "Initialization request/acknowledge from/to power manager." + } + // Macro-specific test signals to/from LC TAP + { struct: "lc_otp_vendor_test" + type: "req_rsp" + name: "lc_otp_vendor_test" + act: "rsp" + default: "'0" + package: "otp_ctrl_pkg" + desc: "Vendor test control signals from/to the life cycle TAP." + } + // LC transition command + { struct: "lc_otp_program" + type: "req_rsp" + name: "lc_otp_program" + act: "rsp" + default: "'0" + package: "otp_ctrl_pkg" + desc: "Life cycle state transition interface." + } + // Broadcast to LC + { struct: "otp_lc_data" + type: "uni" + name: "otp_lc_data" + act: "req" + default: "'0" + package: "otp_ctrl_pkg" + desc: ''' + Life cycle state output holding the current life cycle state, + the value of the transition counter and the tokens needed for life cycle transitions. + ''' + } + // Broadcast from LC + { struct: "lc_tx" + type: "uni" + name: "lc_escalate_en" + act: "rcv" + default: "lc_ctrl_pkg::Off" + package: "lc_ctrl_pkg" + desc: ''' + Life cycle escalation enable coming from life cycle controller. + This signal moves all FSMs within OTP into the error state. + ''' + } + { struct: "lc_tx" + type: "uni" + name: "lc_creator_seed_sw_rw_en" + act: "rcv" + default: "lc_ctrl_pkg::Off" + package: "lc_ctrl_pkg" + desc: ''' + Provision enable qualifier coming from life cycle controller. + This signal enables SW read / write access to the RMA_TOKEN and CREATOR_ROOT_KEY_SHARE0 and CREATOR_ROOT_KEY_SHARE1. + ''' + } + { struct: "lc_tx" + type: "uni" + name: "lc_owner_seed_sw_rw_en" + act: "rcv" + default: "lc_ctrl_pkg::Off" + package: "lc_ctrl_pkg" + desc: ''' + Provision enable qualifier coming from life cycle controller. + This signal enables SW read / write access to the OWNER_SEED. + ''' + } + { struct: "lc_tx" + type: "uni" + name: "lc_seed_hw_rd_en" + act: "rcv" + default: "lc_ctrl_pkg::Off" + package: "lc_ctrl_pkg" + desc: ''' + Seed read enable coming from life cycle controller. + This signal enables HW read access to the CREATOR_ROOT_KEY_SHARE0 and CREATOR_ROOT_KEY_SHARE1. + ''' + } + { struct: "lc_tx" + type: "uni" + name: "lc_dft_en" + act: "rcv" + default: "lc_ctrl_pkg::Off" + package: "lc_ctrl_pkg" + desc: ''' + Test enable qualifier coming from life cycle controller. + This signals enables the TL-UL access port to the proprietary OTP IP. + ''' + } + { struct: "lc_tx" + type: "uni" + name: "lc_check_byp_en" + act: "rcv" + default: "lc_ctrl_pkg::Off" + package: "lc_ctrl_pkg" + desc: ''' + Life cycle partition check bypass signal. + This signal causes the life cycle partition to bypass consistency checks during life cycle state transitions in order to prevent spurious consistency check failures. + ''' + } + // Broadcast to Key Manager + { struct: "otp_keymgr_key" + type: "uni" + name: "otp_keymgr_key" + act: "req" + default: "'0" + package: "otp_ctrl_pkg" + desc: "Key output to the key manager holding CREATOR_ROOT_KEY_SHARE0 and CREATOR_ROOT_KEY_SHARE1." + } + // Broadcast to Flash Controller + { struct: "flash_otp_key" + type: "req_rsp" + name: "flash_otp_key" + act: "rsp" + default: "'0" + package: "otp_ctrl_pkg" + desc: "Key derivation interface for FLASH scrambling." + } + // Key request from SRAM scramblers + { struct: "sram_otp_key" + // TODO: would be nice if this could accept parameters. + // Split this out into an issue. + width: "4" + type: "req_rsp" + name: "sram_otp_key" + act: "rsp" + default: "'0" + package: "otp_ctrl_pkg" + desc: "Array with key derivation interfaces for SRAM scrambling devices." + } + // Key request from OTBN RAM Scrambler + { struct: "otbn_otp_key" + type: "req_rsp" + name: "otbn_otp_key" + act: "rsp" + default: "'0" + package: "otp_ctrl_pkg" + desc: "Key derivation interface for OTBN scrambling devices." + } + // Hardware config partition + { struct: "otp_broadcast" + type: "uni" + name: "otp_broadcast" + act: "req" + default: "'0" + package: "otp_ctrl_part_pkg" + desc: "Output of the HW partitions with breakout data types." + } + // AST observability control + { struct: "ast_obs_ctrl", + type: "uni", + name: "obs_ctrl", + act: "rcv", + package: "ast_pkg" + desc: "AST observability control signals." + } + // prim otp observe bus + { struct: "logic", + type: "uni", + name: "otp_obs", + act: "req", + width: "8", + package: "" + desc: "AST observability bus." + } + ] // inter_signal_list + + ///////////////////// + // Countermeasures // + ///////////////////// + + countermeasures: [ + { name: "BUS.INTEGRITY", + desc: "End-to-end bus integrity scheme." + } + { name: "SECRET.MEM.SCRAMBLE", + desc: "Secret partitions are scrambled with a full-round PRESENT cipher." + } + { name: "PART.MEM.DIGEST", + desc: "Integrity of buffered partitions is ensured via a 64bit digest." + } + { name: "DAI.FSM.SPARSE", + desc: "The direct access interface FSM is sparsely encoded." + } + { name: "KDI.FSM.SPARSE", + desc: "The key derivation interface FSM is sparsely encoded." + } + { name: "LCI.FSM.SPARSE", + desc: "The life cycle interface FSM is sparsely encoded." + } + { name: "PART.FSM.SPARSE", + desc: "The partition FSMs are sparsely encoded." + } + { name: "SCRMBL.FSM.SPARSE", + desc: "The scramble datapath FSM is sparsely encoded." + } + { name: "TIMER.FSM.SPARSE", + desc: "The background check timer FSM is sparsely encoded." + } + { name: "DAI.CTR.REDUN", + desc: "The direct access interface address counter employs a cross-counter implementation." + } + { name: "KDI_SEED.CTR.REDUN", + desc: "The key derivation interface counter employs a cross-counter implementation." + } + { name: "KDI_ENTROPY.CTR.REDUN", + desc: "The key derivation entropy counter employs a cross-counter implementation." + } + { name: "LCI.CTR.REDUN", + desc: "The life cycle interface address counter employs a cross-counter implementation." + } + { name: "PART.CTR.REDUN", + desc: "The address counter of buffered partitions employs a cross-counter implementation." + } + { name: "SCRMBL.CTR.REDUN", + desc: "The srambling datapath counter employs a cross-counter implementation." + } + { name: "TIMER_INTEG.CTR.REDUN", + desc: "The background integrity check timer employs a duplicated counter implementation." + } + { name: "TIMER_CNSTY.CTR.REDUN", + desc: "The background consistency check timer employs a duplicated counter implementation." + } + { name: "TIMER.LFSR.REDUN", + desc: "The background check LFSR is duplicated." + } + { name: "DAI.FSM.LOCAL_ESC", + desc: "The direct access interface FSM is moved into an invalid state upon local escalation." + } + { name: "LCI.FSM.LOCAL_ESC", + desc: "The life cycle interface FSM is moved into an invalid state upon local escalation." + } + { name: "KDI.FSM.LOCAL_ESC", + desc: "The key derivation interface FSM is moved into an invalid state upon local escalation." + } + { name: "PART.FSM.LOCAL_ESC", + desc: "The partition FSMs are moved into an invalid state upon local escalation." + } + { name: "SCRMBL.FSM.LOCAL_ESC", + desc: "The scramble datapath FSM is moved into an invalid state upon local escalation." + } + { name: "TIMER.FSM.LOCAL_ESC", + desc: "The background check timer FSM is moved into an invalid state upon local escalation." + } + { name: "DAI.FSM.GLOBAL_ESC", + desc: "The direct access interface FSM is moved into an invalid state upon global escalation via life cycle." + } + { name: "LCI.FSM.GLOBAL_ESC", + desc: "The life cycle interface FSM is moved into an invalid state upon global escalation via life cycle." + } + { name: "KDI.FSM.GLOBAL_ESC", + desc: "The key derivation interface FSM is moved into an invalid state upon global escalation via life cycle." + } + { name: "PART.FSM.GLOBAL_ESC", + desc: "The partition FSMs are moved into an invalid state upon global escalation via life cycle." + } + { name: "SCRMBL.FSM.GLOBAL_ESC", + desc: "The scramble datapath FSM is moved into an invalid state upon global escalation via life cycle." + } + { name: "TIMER.FSM.GLOBAL_ESC", + desc: "The background check timer FSM is moved into an invalid state upon global escalation via life cycle." + } + { name: "PART.DATA_REG.INTEGRITY", + desc: "All partition buffer registers are protected with ECC on 64bit blocks." + } + { name: "PART.DATA_REG.BKGN_CHK", + desc: "The digest of buffered partitions is recomputed and checked at pseudorandom intervals in the background." + } + { name: "PART.MEM.REGREN" + desc: "Unbuffered ('software') partitions can be read-locked via a CSR until the next system reset." + } + { name: "PART.MEM.SW_UNREADABLE" + desc: "Secret buffered partitions become unreadable to software once they are locked via the digest." + } + { name: "PART.MEM.SW_UNWRITABLE" + desc: "All partitions become unwritable by software once they are locked via the digest." + } + { name: "LC_PART.MEM.SW_NOACCESS" + desc: "The life cycle partition is not directly readable nor writable via software." + } + { name: "ACCESS.CTRL.MUBI", + desc: "The access control signals going from the partitions to the DAI are MUBI encoded." + } + { name: "TOKEN_VALID.CTRL.MUBI", + desc: "The token valid signals going to the life cycle controller are MUBI encoded." + } + { name: "LC_CTRL.INTERSIG.MUBI", + desc: "The life cycle control signals are multibit encoded." + } + { name: "TEST.BUS.LC_GATED", + desc: "Prevent access to test signals and the OTP backdoor interface in non-test lifecycle states." + } + { name: "TEST_TL_LC_GATE.FSM.SPARSE", + desc: "The control FSM inside the TL-UL gating primitive is sparsely encoded." + } + { name: "DIRECT_ACCESS.CONFIG.REGWEN", + desc: "The direct access CSRs are REGWEN protected." + } + { name: "CHECK_TRIGGER.CONFIG.REGWEN", + desc: "The check trigger CSR is REGWEN protected." + } + { name: "CHECK.CONFIG.REGWEN", + desc: "The check CSR is REGWEN protected." + } + { name: "MACRO.MEM.INTEGRITY", + desc: ''' + The OTP macro employs a vendor-specific integrity scheme at the granularity of the native 16bit OTP words. + The scheme is able to at least detect single bit errors. + ''' + } + { name: "MACRO.MEM.CM", + desc: "The OTP macro may contain additional vendor-specific countermeasures." + } + ] + + features: [ + { + name: "OTP_CTRL.PARTITION.VENDOR_TEST" + desc: '''Vendor test partition is used for OTP programming smoke check during manufacturing flow. + In this partition, ECC uncorrectable errors will not lead to fatal errors and alerts. + Instead the error will be reported as correctable ECC error. + ''' + } + { + name: "OTP_CTRL.PARTITION.CREATOR_SW_CFG" + desc: '''During calibration stage, various parameters (clock, voltage, and timing sources) are calibrated and recorded to CREATOR_SW_CFG partition. + ''' + } + { + name: "OTP_CTRL.INIT" + desc: '''When power is up, OTP controller reads devices status. + After all reads complete, the controller performs integrity check on the HW_CFG* and SECRET partitions. + Once all integrity checks are complete, the controller marks outputs as valid. + ''' + } + { + name: "OTP_CTRL.PROGRAM" + desc: '''All other partitions except life cycle partition are programmed through DAI interface. + And once non-zero digest is programmed to these partition, no further write access is allowed. + Life cycle partition is programmed by LC_CTRL. + ''' + } + { + name: "OTP_CTRL.PARTITION.SECRET0" + desc: "Obfuscated UDS Seed" + } + { + name: "OTP_CTRL.PARTITION.SECRET1" + desc: "Obfuscated Field Entropy" + } + { + name: "OTP_CTRL.PARTITION.LIFE_CYCLE" + desc: '''LC state, LC transition count. + This feature is owned by the LC_CTRL and cannot be tested well through the OTP_CTRL CSR interface. + ''' + } + { + name: "OTP_CTRL.PARTITIONS_FEATURE.READ_LOCK" + desc: '''Following partitions can be read lockable by CSR. + - VENDOR_TEST + - CREATOR_SW_CFG + Following partitions can be read lockable by writing digest. + - SECRET0 + - SECRET1 + All read attempt to these partitions after read is locked will trigger AccessError (recoverable). + ''' + } + { + name: "OTP_CTRL.PARTITIONS_FEATURE.WRITE_LOCK" + desc: "All partitions except LIFE_CYCLE can be write lockable by writing digest." + } + { + name: "OTP_CTRL.ERROR_HANDLING.RECOVERABLE" + desc: "Recoverable error is created when unauthorized access atempt are detected via dai interface." + } + { + name: "OTP_CTRL.ERROR_HANDLING.FATAL" + desc: "Unrecoverable errors are created for uncorrectable ecc error, otp macro malfunction and unauthorized access via lc_ctrl." + } + { + name: "OTP_CTRL.BACKGROUND_CHECK.CHECK_TIMEOUT" + desc: "Timeout value for the integrity and consistency checks." + } + { + name: "OTP_CTRL.BACKGROUND_CHECK.INTEGRITY_CHECK_PERIOD" + desc: "The interval which the digest of the partition is recomputed to check integrity of locked partition." + } + { + name: "OTP_CTRL.BACKGROUND_CHECK.CONSISTENCY_CHECK_PERIOD" + desc: "Re-read period of the buffer registers to ensure data is matched with the associated OTP partition." + } + ] + + /////////////// + // Registers // + /////////////// + + regwidth: "32", + registers: { + core: [ + //////////////////////// + // Ctrl / Status CSRs // + //////////////////////// + + { name: "STATUS", + desc: "OTP status register.", + swaccess: "ro", + hwaccess: "hwo", + hwext: "true", + resval: 0, + tags: [ // OTP internal HW can modify status register + "excl:CsrAllTests:CsrExclCheck"], + fields: [ + % for k, part in enumerate(otp_mmap.config["partitions"]): + { bits: "${k}" + name: "${part["name"]}_ERROR" + desc: ''' + Set to 1 if an error occurred in this partition. + If set to 1, SW should check the !!ERR_CODE register at the corresponding index. + ''' + } + % endfor + { bits: "${num_part}" + name: "DAI_ERROR" + desc: ''' + Set to 1 if an error occurred in the DAI. + If set to 1, SW should check the !!ERR_CODE register at the corresponding index. + ''' + } + { bits: "${num_part+1}" + name: "LCI_ERROR" + desc: ''' + Set to 1 if an error occurred in the LCI. + If set to 1, SW should check the !!ERR_CODE register at the corresponding index. + ''' + } + { bits: "${num_part+2}" + name: "TIMEOUT_ERROR" + desc: ''' + Set to 1 if an integrity or consistency check times out. + This raises an fatal_check_error alert and is an unrecoverable error condition. + ''' + } + { bits: "${num_part+3}" + name: "LFSR_FSM_ERROR" + desc: ''' + Set to 1 if the LFSR timer FSM has reached an invalid state. + This raises an fatal_check_error alert and is an unrecoverable error condition. + ''' + } + { bits: "${num_part+4}" + name: "SCRAMBLING_FSM_ERROR" + desc: ''' + Set to 1 if the scrambling datapath FSM has reached an invalid state. + This raises an fatal_check_error alert and is an unrecoverable error condition. + ''' + } + { bits: "${num_part+5}" + name: "KEY_DERIV_FSM_ERROR" + desc: ''' + Set to 1 if the key derivation FSM has reached an invalid state. + This raises an fatal_check_error alert and is an unrecoverable error condition. + ''' + } + { bits: "${num_part+6}" + name: "BUS_INTEG_ERROR" + desc: ''' + This bit is set to 1 if a fatal bus integrity fault is detected. + This error triggers a fatal_bus_integ_error alert. + ''' + } + { bits: "${num_part+7}" + name: "DAI_IDLE" + desc: "Set to 1 if the DAI is idle and ready to accept commands." + } + { bits: "${num_part+8}" + name: "CHECK_PENDING" + desc: "Set to 1 if an integrity or consistency check triggered by the LFSR timer or via !!CHECK_TRIGGER is pending." + } + ] + } + { multireg: { + name: "ERR_CODE", + desc: ''' + This register holds information about error conditions that occurred in the agents + interacting with the OTP macro via the internal bus. The error codes should be checked + if the partitions, DAI or LCI flag an error in the !!STATUS register, or when an + !!INTR_STATE.otp_error has been triggered. Note that all errors trigger an otp_error + interrupt, and in addition some errors may trigger either an fatal_macro_error or an + fatal_check_error alert. + ''', + count: "NumErrorEntries", + swaccess: "ro", + hwaccess: "hwo", + hwext: "true", + cname: "AGENT", + compact: "false", + resval: 0, + tags: [ // OTP internal HW can modify the error code registers + "excl:CsrAllTests:CsrExclCheck"], + fields: [ + { + bits: "2:0" + enum: [ + { value: "0", + name: "NO_ERROR", + desc: ''' + No error condition has occurred. + ''' + }, + { value: "1", + name: "MACRO_ERROR", + desc: ''' + Returned if the OTP macro command was invalid or did not complete successfully + due to a macro malfunction. + This error should never occur during normal operation and is not recoverable. + This error triggers an fatal_macro_error alert. + ''' + }, + { value: "2", + name: "MACRO_ECC_CORR_ERROR", + desc: ''' + A correctable ECC error has occured during an OTP read operation. + The corresponding controller automatically recovers from this error when + issuing a new command. + ''' + }, + { value: "3", + name: "MACRO_ECC_UNCORR_ERROR", + desc: ''' + An uncorrectable ECC error has occurred during an OTP read operation. + This error should never occur during normal operation and is not recoverable. + If this error is present this may be a sign that the device is malfunctioning. + This error triggers an fatal_macro_error alert. + ''' + }, + { value: "4", + name: "MACRO_WRITE_BLANK_ERROR", + desc: ''' + This error is returned if a programming operation attempted to clear a bit that has previously been programmed to 1. + The corresponding controller automatically recovers from this error when issuing a new command. + + Note however that the affected OTP word may be left in an inconsistent state if this error occurs. + This can cause several issues when the word is accessed again (either as part of a regular read operation, as part of the readout at boot, or as part of a background check). + + It is important that SW ensures that each word is only written once, since this can render the device useless. + ''' + }, + { value: "5", + name: "ACCESS_ERROR", + desc: ''' + This error indicates that a locked memory region has been accessed. + The corresponding controller automatically recovers from this error when issuing a new command. + ''' + }, + { value: "6", + name: "CHECK_FAIL_ERROR", + desc: ''' + An ECC, integrity or consistency mismatch has been detected in the buffer registers. + This error should never occur during normal operation and is not recoverable. + This error triggers an fatal_check_error alert. + ''' + }, + { value: "7", + name: "FSM_STATE_ERROR", + desc: ''' + The FSM of the corresponding controller has reached an invalid state, or the FSM has + been moved into a terminal error state due to an escalation action via lc_escalate_en_i. + This error should never occur during normal operation and is not recoverable. + If this error is present, this is a sign that the device has fallen victim to + an invasive attack. This error triggers an fatal_check_error alert. + ''' + }, + ] + } + ] + } + } + { name: "DIRECT_ACCESS_REGWEN", + desc: ''' + Register write enable for all direct access interface registers. + ''', + swaccess: "rw0c", + hwaccess: "hrw", + hwext: "true", + hwqe: "true", + tags: [ // OTP internal HW will set this enable register to 0 when OTP is not under IDLE + // state, so could not auto-predict its value + "excl:CsrNonInitTests:CsrExclCheck"], + fields: [ + { + bits: "0", + desc: ''' + This bit controls whether the DAI registers can be written. + Write 0 to it in order to clear the bit. + + Note that the hardware also modulates this bit and sets it to 0 temporarily + during an OTP operation such that the corresponding address and data registers + cannot be modified while an operation is pending. The !!DAI_IDLE status bit + will also be set to 0 in such a case. + ''' + resval: 1, + }, + ] + }, + { name: "DIRECT_ACCESS_CMD", + desc: "Command register for direct accesses.", + swaccess: "r0w1c", + hwaccess: "hro", + hwqe: "true", + hwext: "true", + resval: 0, + regwen: "DIRECT_ACCESS_REGWEN", + tags: [ // Write to DIRECT_ACCESS_CMD randomly might cause OTP_ERRORs and illegal sequences + "excl:CsrNonInitTests:CsrExclWrite"], + fields: [ + { bits: "0", + name: "RD", + desc: ''' + Initiates a readout sequence that reads the location specified + by !!DIRECT_ACCESS_ADDRESS. The command places the data read into + !!DIRECT_ACCESS_RDATA_0 and !!DIRECT_ACCESS_RDATA_1 (for 64bit partitions). + ''' + } + { bits: "1", + name: "WR", + desc: ''' + Initiates a programming sequence that writes the data in !!DIRECT_ACCESS_WDATA_0 + and !!DIRECT_ACCESS_WDATA_1 (for 64bit partitions) to the location specified by + !!DIRECT_ACCESS_ADDRESS. + ''' + } + { bits: "2", + name: "DIGEST", + desc: ''' + Initiates the digest calculation and locking sequence for the partition specified by + !!DIRECT_ACCESS_ADDRESS. + ''' + } + ] + } + { name: "DIRECT_ACCESS_ADDRESS", + desc: "Address register for direct accesses.", + swaccess: "rw", + hwaccess: "hro", + hwqe: "false", + resval: 0, + regwen: "DIRECT_ACCESS_REGWEN", + tags: [ // The enable register "DIRECT_ACCESS_REGWEN" is HW controlled, + // so not able to predict this register value automatically + "excl:CsrNonInitTests:CsrExclCheck"], + fields: [ + { bits: "OtpByteAddrWidth-1:0", + desc: ''' + This is the address for the OTP word to be read or written through + the direct access interface. Note that the address is aligned to the access size + internally, hence bits 1:0 are ignored for 32bit accesses, and bits 2:0 are ignored + for 64bit accesses. + + For the digest calculation command, set this register to the partition base offset. + ''' + } + ] + } + { multireg: { + name: "DIRECT_ACCESS_WDATA", + desc: '''Write data for direct accesses. + Hardware automatically determines the access granule (32bit or 64bit) based on which + partition is being written to. + ''', + count: "NumDaiWords", // 2 x 32bit = 64bit + swaccess: "rw", + hwaccess: "hro", + hwqe: "false", + regwen: "DIRECT_ACCESS_REGWEN", + cname: "WORD", + resval: 0, + tags: [ // The value of this register is written from "DIRECT_ACCESS_RDATA", + // so could not predict this register value automatically + "excl:CsrAllTests:CsrExclCheck"], + fields: [ + { bits: "31:0" + } + ] + } + }, + { multireg: { + name: "DIRECT_ACCESS_RDATA", + desc: '''Read data for direct accesses. + Hardware automatically determines the access granule (32bit or 64bit) based on which + partition is read from. + ''', + count: "NumDaiWords", // 2 x 32bit = 64bit + swaccess: "ro", + hwaccess: "hwo", + hwext: "true", + cname: "WORD", + resval: 0, + fields: [ + { bits: "31:0" + } + ] + } + }, + + ////////////////////////////////////// + // Integrity and Consistency Checks // + ////////////////////////////////////// + { name: "CHECK_TRIGGER_REGWEN", + desc: ''' + Register write enable for !!CHECK_TRIGGER. + ''', + swaccess: "rw0c", + hwaccess: "none", + fields: [ + { bits: "0", + desc: ''' + When cleared to 0, the !!CHECK_TRIGGER register cannot be written anymore. + Write 0 to clear this bit. + ''' + resval: 1, + }, + ] + }, + { name: "CHECK_TRIGGER", + desc: "Command register for direct accesses.", + swaccess: "r0w1c", + hwaccess: "hro", + hwqe: "true", + hwext: "true", + resval: 0, + regwen: "CHECK_TRIGGER_REGWEN", + fields: [ + { bits: "0", + name: "INTEGRITY", + desc: ''' + Writing 1 to this bit triggers an integrity check. SW should monitor !!STATUS.CHECK_PENDING + and wait until the check has been completed. If there are any errors, those will be flagged + in the !!STATUS and !!ERR_CODE registers, and via the interrupts and alerts. + ''' + } + { bits: "1", + name: "CONSISTENCY", + desc: ''' + Writing 1 to this bit triggers a consistency check. SW should monitor !!STATUS.CHECK_PENDING + and wait until the check has been completed. If there are any errors, those will be flagged + in the !!STATUS and !!ERR_CODE registers, and via interrupts and alerts. + ''' + } + ] + }, + { name: "CHECK_REGWEN", + desc: ''' + Register write enable for !!INTEGRITY_CHECK_PERIOD and !!CONSISTENCY_CHECK_PERIOD. + ''', + swaccess: "rw0c", + hwaccess: "none", + fields: [ + { bits: "0", + desc: ''' + When cleared to 0, !!INTEGRITY_CHECK_PERIOD and !!CONSISTENCY_CHECK_PERIOD registers cannot be written anymore. + Write 0 to clear this bit. + ''' + resval: 1, + }, + ] + }, + { name: "CHECK_TIMEOUT", + desc: ''' + Timeout value for the integrity and consistency checks. + ''', + swaccess: "rw", + hwaccess: "hro", + regwen: "CHECK_REGWEN", + tags: [ // Do not write to this automatically, as it may trigger fatal alert, and cause + // escalation. + "excl:CsrAllTests:CsrExclWrite"], + fields: [ + { bits: "31:0", + desc: ''' + Timeout value in cycles for the for the integrity and consistency checks. If an integrity or consistency + check does not complete within the timeout window, an error will be flagged in the !!STATUS register, + an otp_error interrupt will be raised, and an fatal_check_error alert will be sent out. The timeout should + be set to a large value to stay on the safe side. The maximum check time can be upper bounded by the + number of cycles it takes to readout, scramble and digest the entire OTP array. Since this amounts to + roughly 25k cycles, it is recommended to set this value to at least 100'000 cycles in order to stay on the + safe side. A value of zero disables the timeout mechanism (default). + ''' + resval: 0, + }, + ] + }, + { name: "INTEGRITY_CHECK_PERIOD", + desc: ''' + This value specifies the maximum period that can be generated pseudo-randomly. + Only applies to the HW_CFG* and SECRET* partitions once they are locked. + ''' + swaccess: "rw", + hwaccess: "hro", + regwen: "CHECK_REGWEN", + fields: [ + { bits: "31:0", + desc: ''' + The pseudo-random period is generated using a 40bit LFSR internally, and this register defines + the bit mask to be applied to the LFSR output in order to limit its range. The value of this + register is left shifted by 8bits and the lower bits are set to 8'hFF in order to form the 40bit mask. + A recommended value is 0x3_FFFF, corresponding to a maximum period of ~2.8s at 24MHz. + A value of zero disables the timer (default). Note that a one-off check can always be triggered via + !!CHECK_TRIGGER.INTEGRITY. + ''' + resval: "0" + } + ] + } + { name: "CONSISTENCY_CHECK_PERIOD", + desc: ''' + This value specifies the maximum period that can be generated pseudo-randomly. + This applies to the LIFE_CYCLE partition and the HW_CFG* and SECRET* partitions once they are locked. + ''' + swaccess: "rw", + hwaccess: "hro", + regwen: "CHECK_REGWEN", + fields: [ + { bits: "31:0", + desc: ''' + The pseudo-random period is generated using a 40bit LFSR internally, and this register defines + the bit mask to be applied to the LFSR output in order to limit its range. The value of this + register is left shifted by 8bits and the lower bits are set to 8'hFF in order to form the 40bit mask. + A recommended value is 0x3FF_FFFF, corresponding to a maximum period of ~716s at 24MHz. + A value of zero disables the timer (default). Note that a one-off check can always be triggered via + !!CHECK_TRIGGER.CONSISTENCY. + ''' + resval: "0" + } + ] + } + + //////////////////////////////////// + // Dynamic Locks of SW Parititons // + //////////////////////////////////// + % for part in otp_mmap.config["partitions"]: + % if part["read_lock"].lower() == "csr": + { name: "${part["name"]}_READ_LOCK", + desc: ''' + Runtime read lock for the ${part["name"]} partition. + ''', + swaccess: "rw0c", + hwaccess: "hro", + regwen: "DIRECT_ACCESS_REGWEN", + tags: [ // The value of this register can affect the read access of the this + // partition's memory window. Excluding this register from writing can ensure + // memories have read and write access. + "excl:CsrNonInitTests:CsrExclWrite"], + fields: [ + { bits: "0", + desc: ''' + When cleared to 0, read access to the ${part["name"]} partition is locked. + Write 0 to clear this bit. + ''' + resval: 1, + }, + ] + }, + % endif + % endfor + + /////////////////////// + // Integrity Digests // + /////////////////////// + % for part in otp_mmap.config["partitions"]: + % if part["sw_digest"]: + { multireg: { + name: "${part["name"]}_DIGEST", + desc: ''' + Integrity digest for the ${part["name"]} partition. + The integrity digest is 0 by default. Software must write this + digest value via the direct access interface in order to lock the partition. + After a reset, write access to the ${part["name"]} partition is locked and + the digest becomes visible in this CSR. + ''', + count: "NumDigestWords", + swaccess: "ro", + hwaccess: "hwo", + hwext: "true", + cname: "WORD", + resval: 0, + tags: [ // OTP internal HW will update status so can not auto-predict its value. + "excl:CsrAllTests:CsrExclCheck"], + fields: [ + { bits: "31:0" + } + ] + } + }, + % elif part["hw_digest"]: + { multireg: { + name: "${part["name"]}_DIGEST", + desc: ''' + Integrity digest for the ${part["name"]} partition. + The integrity digest is 0 by default. The digest calculation can be triggered via the !!DIRECT_ACCESS_CMD. + After a reset, the digest then becomes visible in this CSR, and the corresponding partition becomes write-locked. + ''', + count: "NumDigestWords", + swaccess: "ro", + hwaccess: "hwo", + hwext: "true", + cname: "WORD", + resval: 0, + tags: [ // OTP internal HW will update status so can not auto-predict its value. + "excl:CsrAllTests:CsrExclCheck"], + fields: [ + { bits: "31:0" + } + ] + } + }, + % endif + % endfor + + //////////////////////////////// + // Software Config Partitions // + //////////////////////////////// + { skipto: "${hex(otp_size_as_bytes)}" } + + { window: { + name: "SW_CFG_WINDOW" + items: "NumSwCfgWindowWords" + swaccess: "ro", + desc: ''' + Any read to this window directly maps to the corresponding offset in the creator and owner software + config partitions, and triggers an OTP readout of the bytes requested. Note that the transaction + will block until OTP readout has completed. + ''' + } + } + ], + + // OTP wrapper-specific registers + prim: [ + { name: "CSR0", + desc: "" + swaccess: "rw", + hwaccess: "hro", + hwext: "false", + hwqe: "false", + fields: [ + { bits: "0", + name: "field0", + desc: "", + resval: "0x0", + } + { bits: "1", + name: "field1", + desc: "", + resval: "0x0", + } + { bits: "2", + name: "field2", + desc: "", + resval: "0x0", + } + { bits: "13:4", + name: "field3", + desc: "" + resval: "0x0", + } + { bits: "26:16", + name: "field4", + desc: "" + resval: "0x0", + } + ] + }, + { name: "CSR1", + desc: "" + swaccess: "rw", + hwaccess: "hro", + hwext: "false", + hwqe: "false", + fields: [ + { bits: "6:0", + name: "field0", + desc: "" + resval: "0x0", + } + { bits: "7:7", + name: "field1", + desc: "", + resval: "0x0", + } + { bits: "14:8", + name: "field2", + desc: "" + resval: "0x0", + } + { bits: "15:15", + name: "field3", + desc: "", + resval: "0x0", + } + { bits: "31:16", + name: "field4", + desc: "", + resval: "0x0", + } + ] + }, + { name: "CSR2", + desc: "" + swaccess: "rw", + hwaccess: "hro", + hwext: "false", + hwqe: "false", + fields: [ + { bits: "0", + name: "field0", + desc: "", + resval: "0x0", + } + ] + }, + { name: "CSR3", + desc: "" + swaccess: "rw", + hwaccess: "hrw", + hwext: "false", + hwqe: "false", + fields: [ + { bits: "2:0", + name: "field0", + desc: "" + swaccess: "rw1c", + resval: "0x0", + } + { bits: "13:4", + name: "field1", + desc: "", + swaccess: "rw1c", + resval: "0x0", + } + { bits: "16", + name: "field2", + desc: "", + swaccess: "rw1c", + resval: "0x0", + } + { bits: "17", + name: "field3", + desc: "", + swaccess: "ro", + resval: "0x0", + } + { bits: "18", + name: "field4", + desc: "", + swaccess: "ro", + resval: "0x0", + } + { bits: "19", + name: "field5", + desc: "", + swaccess: "ro", + resval: "0x0", + } + { bits: "20", + name: "field6", + desc: "", + swaccess: "ro", + resval: "0x0", + } + { bits: "21", + name: "field7", + desc: "", + swaccess: "ro", + resval: "0x0", + } + { bits: "22", + name: "field8", + desc: "", + swaccess: "ro", + resval: "0x0", + } + ] + }, + { name: "CSR4", + desc: "" + swaccess: "rw", + hwaccess: "hro", + hwext: "false", + hwqe: "false", + fields: [ + { bits: "9:0", + name: "field0", + desc: "" + resval: "0x0", + } + { bits: "12", + name: "field1", + desc: "" + resval: "0x0", + } + { bits: "13", + name: "field2", + desc: "" + resval: "0x0", + } + { bits: "14", + name: "field3", + desc: "" + resval: "0x0", + } + ] + }, + { name: "CSR5", + desc: "" + swaccess: "rw", + hwaccess: "hrw", + hwext: "false", + hwqe: "false", + fields: [ + { bits: "5:0", + name: "field0", + desc: "" + swaccess: "rw", + resval: "0x0", + } + { bits: "7:6", + name: "field1", + desc: "" + swaccess: "rw", + resval: "0x0", + } + { bits: "8", + name: "field2", + desc: "", + swaccess: "ro", + resval: "0x0", + } + { bits: "11:9", + name: "field3", + desc: "" + swaccess: "ro", + resval: "0x0", + } + { bits: "12", + name: "field4", + desc: "" + swaccess: "ro", + resval: "0x0", + } + { bits: "13", + name: "field5", + desc: "" + swaccess: "ro", + resval: "0x0", + } + { bits: "31:16", + name: "field6", + desc: "" + swaccess: "rw", + resval: "0x0", + } + ] + }, + { name: "CSR6", + desc: "" + swaccess: "rw", + hwaccess: "hro", + hwext: "false", + hwqe: "false", + fields: [ + { bits: "9:0", + name: "field0", + desc: "" + resval: "0x0", + } + { bits: "11", + name: "field1", + desc: "", + swaccess: "rw", + resval: "0x0", + } + { bits: "12", + name: "field2", + desc: "", + swaccess: "rw", + resval: "0x0", + } + { bits: "31:16", + name: "field3", + desc: "" + resval: "0x0", + } + ] + }, + { name: "CSR7", + desc: "", + swaccess: "ro", + hwaccess: "hrw", + hwext: "false", + hwqe: "false", + fields: [ + { bits: "5:0", + name: "field0", + desc: "" + swaccess: "ro", + resval: "0x0", + } + { bits: "10:8", + name: "field1", + desc: "", + swaccess: "ro", + resval: "0x0", + } + { bits: "14", + name: "field2", + desc: "", + swaccess: "ro", + resval: "0x0", + } + { bits: "15", + name: "field3", + desc: "", + swaccess: "ro", + resval: "0x0", + } + ] + }, + ] + } +} + + + + + + + + + diff --git a/src/fuse_ctrl/data/otp_ctrl_base_vseq.sv.tpl b/src/fuse_ctrl/data/otp_ctrl_base_vseq.sv.tpl new file mode 100755 index 000000000..0be039d21 --- /dev/null +++ b/src/fuse_ctrl/data/otp_ctrl_base_vseq.sv.tpl @@ -0,0 +1,643 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +${gen_comment} +<% +from topgen.lib import Name + +unbuf_parts_with_digest = [part for part in otp_mmap.config["partitions"] if + part["variant"] == "Unbuffered" and + (part["sw_digest"] or part["hw_digest"])] +parts_with_digest = [part for part in otp_mmap.config["partitions"] if + (part["sw_digest"] or part["hw_digest"])] +read_locked_csr_parts = [part for part in otp_mmap.config["partitions"] if + part["read_lock"] == "CSR"] +write_locked_digest_parts = [part for part in otp_mmap.config["partitions"] if + part["write_lock"] == "Digest"] +secret_parts = [part for part in otp_mmap.config["partitions"] if + part["secret"]] +%>\ +class otp_ctrl_base_vseq extends cip_base_vseq #( + .RAL_T (otp_ctrl_core_reg_block), + .CFG_T (otp_ctrl_env_cfg), + .COV_T (otp_ctrl_env_cov), + .VIRTUAL_SEQUENCER_T (otp_ctrl_virtual_sequencer) + ); + `uvm_object_utils(otp_ctrl_base_vseq) + `uvm_object_new + + // various knobs to enable certain routines + bit do_otp_ctrl_init = 1'b1; + bit do_otp_pwr_init = 1'b1; + + // To only write unused OTP address, sequence will collect all the written addresses to an + // associative array to avoid `write_blank_addr_error`. + bit write_unused_addr = 1; + static bit used_dai_addrs[bit [OTP_ADDR_WIDTH - 1 : 0]]; + + rand bit [NumOtpCtrlIntr-1:0] en_intr; + + rand int apply_reset_during_pwr_init_cycles; + + bit is_valid_dai_op = 1; + + // According to spec, the period between digest calculation and reset should not issue any write. + bit [NumPart-2:0] digest_calculated; + + // For stress_all_with_rand reset sequence to issue reset during OTP operations. + bit do_digest_cal, do_otp_rd, do_otp_wr; + + // LC program request will use a separate variable to automatically set to non-blocking setting + // when LC error bit is set. + bit default_req_blocking = 1; + bit lc_prog_blocking = 1; + bit dai_wr_inprogress = 0; + uint32_t op_done_spinwait_timeout_ns = 20_000_000; + + // Collect current lc_state and lc_cnt. This is used to create next lc_state and lc_cnt without + // error. + lc_ctrl_state_pkg::lc_state_e lc_state; + lc_ctrl_state_pkg::lc_cnt_e lc_cnt; + + otp_ctrl_callback_vseq callback_vseq; + + constraint apply_reset_during_pwr_init_cycles_c { + apply_reset_during_pwr_init_cycles == 0; + } + + virtual task pre_start(); + `uvm_create_on(callback_vseq, p_sequencer); + super.pre_start(); + endtask + + virtual task dut_init(string reset_kind = "HARD"); + // OTP has dut and edn reset. If assign OTP values after `super.dut_init()`, and if dut reset + // deasserts earlier than edn reset, some OTP outputs might remain X or Z when dut clock is + // running. + otp_ctrl_vif_init(); + super.dut_init(reset_kind); + callback_vseq.dut_init_callback(); + + cfg.backdoor_clear_mem = 0; + // reset power init pin and lc pins + if (do_otp_ctrl_init && do_apply_reset) otp_ctrl_init(); + cfg.clk_rst_vif.wait_clks($urandom_range(0, 10)); + if (do_otp_pwr_init && do_apply_reset) otp_pwr_init(); + callback_vseq.post_otp_pwr_init(); + endtask + + // Cfg errors are cleared after reset + virtual task apply_reset(string kind = "HARD"); + super.apply_reset(kind); + cfg.otp_ctrl_vif.release_part_access_mubi(); + clear_seq_flags(); + endtask + + virtual function void clear_seq_flags(); + do_digest_cal = 0; + do_otp_rd = 0; + do_otp_wr = 0; + endfunction + + virtual task otp_ctrl_vif_init(); + cfg.otp_ctrl_vif.drive_lc_creator_seed_sw_rw_en(lc_ctrl_pkg::On); + cfg.otp_ctrl_vif.drive_lc_owner_seed_sw_rw_en(lc_ctrl_pkg::On); + cfg.otp_ctrl_vif.drive_lc_seed_hw_rd_en(get_rand_lc_tx_val()); + cfg.otp_ctrl_vif.drive_lc_dft_en(get_rand_lc_tx_val(.t_weight(0))); + cfg.otp_ctrl_vif.drive_lc_escalate_en(lc_ctrl_pkg::Off); + cfg.otp_ctrl_vif.drive_pwr_otp_init(0); + cfg.otp_ctrl_vif.drive_ext_voltage_h_io(1'bz); + + // Unused signals in open sourced OTP memory + `DV_CHECK_RANDOMIZE_FATAL(cfg.dut_cfg) + cfg.otp_ctrl_vif.otp_ast_pwr_seq_h_i = cfg.dut_cfg.otp_ast_pwr_seq_h; + cfg.otp_ctrl_vif.scan_en_i = cfg.dut_cfg.scan_en; + cfg.otp_ctrl_vif.scan_rst_ni = cfg.dut_cfg.scan_rst_n; + cfg.otp_ctrl_vif.scanmode_i = cfg.dut_cfg.scanmode; + cfg.otp_ctrl_vif.otp_vendor_test_ctrl_i = cfg.dut_cfg.otp_vendor_test_ctrl; + endtask + + // drive otp_pwr req pin to initialize OTP, and wait until init is done + virtual task otp_pwr_init(); + cfg.otp_ctrl_vif.drive_pwr_otp_init(1); + if (apply_reset_during_pwr_init_cycles > 0) begin + `DV_SPINWAIT_EXIT( + cfg.clk_rst_vif.wait_clks(apply_reset_during_pwr_init_cycles);, + wait (cfg.otp_ctrl_vif.pwr_otp_done_o == 1);) + if (cfg.otp_ctrl_vif.pwr_otp_done_o == 0) begin + cfg.otp_ctrl_vif.drive_pwr_otp_init(0); + apply_reset(); + cfg.otp_ctrl_vif.drive_pwr_otp_init(1); + end + end + wait (cfg.otp_ctrl_vif.pwr_otp_done_o == 1); + cfg.otp_ctrl_vif.drive_pwr_otp_init(0); + digest_calculated = 0; + endtask + + // setup basic otp_ctrl features + virtual task otp_ctrl_init(); + // reset memory to avoid readout X + clear_otp_memory(); + lc_state = lc_state_e'(0); + lc_cnt = lc_cnt_e'(0); + endtask + + virtual function void clear_otp_memory(); + cfg.mem_bkdr_util_h.clear_mem(); + cfg.backdoor_clear_mem = 1; + used_dai_addrs.delete(); + endfunction + + // Overide this task for otp_ctrl_common_vseq and otp_ctrl_stress_all_with_rand_reset_vseq + // because some registers won't set to default value until otp_init is done. + virtual task read_and_check_all_csrs_after_reset(); + cfg.otp_ctrl_vif.drive_lc_escalate_en(lc_ctrl_pkg::Off); + otp_pwr_init(); + super.read_and_check_all_csrs_after_reset(); + endtask + + // this task triggers an OTP write sequence via the DAI interface + virtual task dai_wr(bit [TL_DW-1:0] addr, + bit [TL_DW-1:0] wdata0, + bit [TL_DW-1:0] wdata1 = 0); + bit [TL_DW-1:0] val; + dai_wr_inprogress = 1; + if (write_unused_addr) begin + if (used_dai_addrs.exists(addr[OTP_ADDR_WIDTH - 1 : 0])) begin + `uvm_info(`gfn, $sformatf("addr %0h is already written!", addr), UVM_MEDIUM) + dai_wr_inprogress = 0; + return; + end else begin + used_dai_addrs[addr] = 1; + end + end + addr = randomize_dai_addr(addr); + `uvm_info(`gfn, $sformatf("dai write addr %0h, data %0h", addr, wdata0), UVM_HIGH) + csr_wr(ral.direct_access_address, addr); + csr_wr(ral.direct_access_wdata[0], wdata0); + if (is_secret(addr) || is_sw_digest(addr)) csr_wr(ral.direct_access_wdata[1], wdata1); + + do_otp_wr = 1; + csr_wr(ral.direct_access_cmd, int'(otp_ctrl_pkg::DaiWrite)); + `uvm_info(`gfn, $sformatf("DAI write, address %0h, data0 %0h data1 %0h, is_secret = %0b", + addr, wdata0, wdata1, is_secret(addr)), UVM_DEBUG) + + // Direct_access_regwen and dai_idle are checked only when following conditions are met: + // - the dai operation is valid, otherwise it is hard to predict which cycle the error is + // detected + // - zero delays in TLUL interface, otherwise dai operation might be finished before reading + // these two CSRs + if (cfg.zero_delays && is_valid_dai_op && + cfg.otp_ctrl_vif.lc_escalate_en_i == lc_ctrl_pkg::Off) begin + csr_rd_check(ral.status.dai_idle, .compare_value(0), .backdoor(1)); + if ($urandom_range(0, 1)) csr_rd(.ptr(ral.direct_access_regwen), .value(val)); + end + wait_dai_op_done(); + rd_and_clear_intrs(); + dai_wr_inprogress = 0; + endtask : dai_wr + + // This task triggers an OTP readout sequence via the DAI interface + virtual task dai_rd(input bit [TL_DW-1:0] addr, + output bit [TL_DW-1:0] rdata0, + output bit [TL_DW-1:0] rdata1); + bit [TL_DW-1:0] val; + addr = randomize_dai_addr(addr); + + csr_wr(ral.direct_access_address, addr); + do_otp_rd = 1; + csr_wr(ral.direct_access_cmd, int'(otp_ctrl_pkg::DaiRead)); + + if (cfg.zero_delays && is_valid_dai_op && + cfg.otp_ctrl_vif.lc_escalate_en_i == lc_ctrl_pkg::Off) begin + csr_rd_check(ral.status.dai_idle, .compare_value(0), .backdoor(1)); + if ($urandom_range(0, 1)) csr_rd(.ptr(ral.direct_access_regwen), .value(val)); + end + + wait_dai_op_done(); + csr_rd(ral.direct_access_rdata[0], rdata0); + if (is_secret(addr) || is_digest(addr)) csr_rd(ral.direct_access_rdata[1], rdata1); + rd_and_clear_intrs(); + endtask : dai_rd + + virtual task dai_rd_check(bit [TL_DW-1:0] addr, + bit [TL_DW-1:0] exp_data0, + bit [TL_DW-1:0] exp_data1 = 0); + bit [TL_DW-1:0] rdata0, rdata1; + dai_rd(addr, rdata0, rdata1); + if (!cfg.under_reset) begin + `DV_CHECK_EQ(rdata0, exp_data0, $sformatf("dai addr %0h rdata0 readout mismatch", addr)) + if (is_secret(addr) || is_digest(addr)) begin + `DV_CHECK_EQ(rdata1, exp_data1, $sformatf("dai addr %0h rdata1 readout mismatch", addr)) + end + end + endtask: dai_rd_check + + // this task exercises an OTP digest calculation via the DAI interface + virtual task cal_digest(int part_idx); + bit [TL_DW-1:0] val; + csr_wr(ral.direct_access_address, PART_BASE_ADDRS[part_idx]); + csr_wr(ral.direct_access_cmd, otp_ctrl_pkg::DaiDigest); + + if (cfg.zero_delays && is_valid_dai_op && + cfg.otp_ctrl_vif.lc_escalate_en_i == lc_ctrl_pkg::Off) begin + csr_rd_check(ral.status.dai_idle, .compare_value(0), .backdoor(1)); + if ($urandom_range(0, 1)) csr_rd(.ptr(ral.direct_access_regwen), .value(val)); + end + do_digest_cal = 1; + wait_dai_op_done(); + digest_calculated[part_idx] = 1; + rd_and_clear_intrs(); + endtask + + // this task provisions all HW partitions + // SW partitions could not be provisioned via DAI interface + // LC partitions cannot be locked + virtual task cal_hw_digests(bit [NumPart-1:0] trigger_digest = $urandom()); + foreach (PartInfo[i]) begin + if (PartInfo[i].hw_digest && trigger_digest[i]) begin + cal_digest(i); + end + end + endtask + + // SW digest data are calculated in sw and won't be checked in OTP. + // Here to simplify testbench, write random data to sw digest. + virtual task write_sw_digests(bit [NumPartUnbuf-1:0] wr_digest = $urandom()); + bit [TL_DW*2-1:0] wdata; + % for part in unbuf_parts_with_digest: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() +%>\ + if (wr_digest[${part_name_camel}Idx]) begin + `DV_CHECK_STD_RANDOMIZE_FATAL(wdata); + dai_wr(${part_name_camel}DigestOffset, wdata[TL_DW-1:0], wdata[TL_DW*2-1:TL_DW]); + end +% endfor + endtask + + virtual task write_sw_rd_locks(bit [NumPartUnbuf-1:0] do_rd_lock= $urandom()); +% for part in read_locked_csr_parts: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() +%>\ + if (do_rd_lock[${part_name_camel}Idx]) csr_wr(ral.${part["name"].lower()}_read_lock, 0); +% endfor + endtask + + // The digest CSR values are verified in otp_ctrl_scoreboard + virtual task rd_digests(); + bit [TL_DW-1:0] val; +% for part in parts_with_digest: + csr_rd(.ptr(ral.${part["name"].lower()}_digest[0]), .value(val)); + csr_rd(.ptr(ral.${part["name"].lower()}_digest[1]), .value(val)); +% endfor + endtask + + // If the partition is read/write locked, there is 20% chance we will force the internal mubi + // access signal to the values other than mubi::true or mubi::false. + virtual task force_mubi_part_access(); + // Stress_all_with_rand_reset seq will issue reset and wait until reset is done then kill the + // parallel sequence. This gating logic avoid injecting error during reset active. + if (cfg.otp_ctrl_vif.alert_reqs == 0 && !cfg.under_reset) begin + otp_part_access_lock_t forced_mubi_part_access[NumPart-1]; + + // Digest write locks +% for part in write_locked_digest_parts: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() +%>\ + if ((`gmv(ral.${part["name"].lower()}_digest[0]) || + `gmv(ral.${part["name"].lower()}_digest[1])) && + !$urandom_range(0, 4)) begin + forced_mubi_part_access[${part_name_camel}Idx].write_lock = 1; + end +% endfor + + // CSR read locks +% for part in read_locked_csr_parts: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() +%>\ + if ((`gmv(ral.${part["name"].lower()}_read_lock) == 0) && !$urandom_range(0, 4)) begin + forced_mubi_part_access[${part_name_camel}Idx].read_lock = 1; + end +% endfor + + + // Digest read locks +% for part in secret_parts: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() +%>\ + if ((`gmv(ral.${part["name"].lower()}_digest[0]) || + `gmv(ral.${part["name"].lower()}_digest[1])) && + !$urandom_range(0, 4)) begin + forced_mubi_part_access[${part_name_camel}Idx].read_lock = 1; + end +% endfor + + foreach (forced_mubi_part_access[i]) begin + `uvm_info(`gfn, $sformatf("partition %0d inject mubi value: read=%0b, write=%0b", i, + forced_mubi_part_access[i].read_lock, forced_mubi_part_access[i].write_lock), UVM_HIGH) + end + + cfg.otp_ctrl_vif.force_part_access_mubi(forced_mubi_part_access); + end + endtask + + // This function backdoor inject error according to ecc_err. + // For example, if err_mask is set to 'b01, bit 1 in OTP macro will be flipped. + // This function will output original backdoor read data for the given address. + virtual function bit [TL_DW-1:0] backdoor_inject_ecc_err(bit [TL_DW-1:0] addr, + otp_ecc_err_e ecc_err); + bit [TL_DW-1:0] val; + addr = {addr[TL_DW-1:2], 2'b00}; + val = cfg.mem_bkdr_util_h.read32(addr); + if (ecc_err == OtpNoEccErr || addr >= (LifeCycleOffset + LifeCycleSize)) return val; + + // Backdoor read and write back with error bits + cfg.mem_bkdr_util_h.inject_errors(addr, (ecc_err == OtpEccUncorrErr) ? 2 : 1); + `uvm_info(`gfn, $sformatf("original val %0h, addr %0h, err_type %0s", + val, addr, ecc_err.name), UVM_HIGH) + return val; + endfunction + + virtual task trigger_checks(bit [1:0] val, + bit wait_done = 1, + otp_ecc_err_e ecc_err = OtpNoEccErr); + bit [TL_DW-1:0] backdoor_rd_val, addr; + + // If ECC and check error happens in the same consistency check, the scb cannot predict which + // error will happen first, so it cannot correctly predict the error status and alert + // triggered. + // So the sequence only allows one error at a time. + if (get_field_val(ral.check_trigger.consistency, val) && + `gmv(ral.check_timeout) > 0 && `gmv(ral.check_timeout) <= CHK_TIMEOUT_CYC) begin + ecc_err = OtpNoEccErr; + end + + // Backdoor write ECC errors + if (ecc_err != OtpNoEccErr) begin + int part_idx = $urandom_range(HwCfg0Idx, LifeCycleIdx); + + // Only HW cfgs check digest correctness + if (part_idx != LifeCycleIdx) begin + addr = $urandom_range(0, 1) ? PART_OTP_DIGEST_ADDRS[part_idx] << 2 : + (PART_OTP_DIGEST_ADDRS[part_idx] + 1) << 2; + end else begin + addr = $urandom_range(LifeCycleOffset, LifeCycleOffset + LifeCycleSize - 1); + addr = {addr[TL_DW-1:2], 2'b00}; + end + backdoor_rd_val = backdoor_inject_ecc_err(addr, ecc_err); + cfg.ecc_chk_err[part_idx] = ecc_err; + end + + csr_wr(ral.check_trigger, val); + if (wait_done && val) csr_spinwait(ral.status.check_pending, 0); + + if (ecc_err != OtpNoEccErr) begin + cfg.mem_bkdr_util_h.write32(addr, backdoor_rd_val); + cfg.ecc_chk_err = '{default: OtpNoEccErr}; + end + endtask + + // For a DAI interface operation to finish, either way until status dai_idle is set, or check + // err_code and see if fatal error happened. In any case, break out of this wait if there + // is a need to stop transaction generators, since a spinwait will otherwise just stop + // when it times-out. + virtual task wait_dai_op_done(); + if (cfg.stop_transaction_generators()) return; + fork begin + fork + begin + csr_spinwait(.ptr(ral.status.dai_idle), + .exp_data(1), + .timeout_ns(op_done_spinwait_timeout_ns), + .spinwait_delay_ns($urandom_range(0, 5))); + end + begin + forever begin + bit [TL_DW-1:0] err_val; + cfg.clk_rst_vif.wait_clks(1); + csr_rd(.ptr(ral.err_code[DaiIdx].err_code), .value(err_val), .backdoor(1)); + // Break if error will cause fatal alerts + if (err_val inside {OTP_TERMINAL_ERRS}) break; + end + end + begin + forever begin + cfg.clk_rst_vif.wait_clks(1); + if (cfg.stop_transaction_generators()) break; + end + end + join_any + wait_no_outstanding_access(); + disable fork; + end join + endtask + + virtual task rd_and_clear_intrs(); + bit [TL_DW-1:0] val; + if (cfg.otp_ctrl_vif.lc_prog_no_sta_check == 0) begin + csr_rd(ral.intr_state, val); + // In case lc_program request is issued after intr_state read + if (cfg.otp_ctrl_vif.lc_prog_no_sta_check == 0) csr_wr(ral.intr_state, val); + end + endtask + + // first two or three LSB bits of DAI address can be randomized based on if it is secret + virtual function bit [TL_AW-1:0] randomize_dai_addr(bit [TL_AW-1:0] dai_addr); + if (is_secret(dai_addr)) begin + bit [2:0] rand_addr = $urandom(); + randomize_dai_addr = {dai_addr[TL_DW-1:3], rand_addr}; + end else begin + bit [1:0] rand_addr = $urandom(); + randomize_dai_addr = {dai_addr[TL_DW-1:2], rand_addr}; + end + endfunction + + // The following interface requests are separated to blocking and non-blocking accesses. + // The non-blocking access is mainly used when lc_escalate_en is On, which acts like a reset and + // move all design state machines to ErrorSt. Thus pending request will never get a response + // until reset. + virtual task req_sram_key(int index, bit blocking = default_req_blocking); + // Return if the request is already high, this is mainly due to lc_escalate_en On. + if (cfg.m_sram_pull_agent_cfg[index].vif.req === 1'b1) return; + + if (blocking) begin + req_sram_key_sub(index); + end else begin + fork + begin + req_sram_key_sub(index); + end + join_none; + // Add #0 to ensure that this thread starts executing before any subsequent call + #0; + end + endtask + + virtual task req_sram_key_sub(int index); + push_pull_host_seq#(.DeviceDataWidth(SRAM_DATA_SIZE)) sram_pull_seq; + wait(cfg.under_reset == 0); + `uvm_create_on(sram_pull_seq, p_sequencer.sram_pull_sequencer_h[index]); + `DV_CHECK_RANDOMIZE_FATAL(sram_pull_seq) + `uvm_send(sram_pull_seq) + endtask + + virtual task req_all_sram_keys(bit blocking = default_req_blocking); + for (int i = 0; i < NumSramKeyReqSlots; i++) req_sram_key(i, blocking); + endtask + + virtual task req_otbn_key(bit blocking = default_req_blocking); + if (cfg.m_otbn_pull_agent_cfg.vif.req === 1'b1) return; + + if (blocking) begin + req_otbn_key_sub(); + end else begin + fork + begin + req_otbn_key_sub(); + end + join_none; + // Add #0 to ensure that this thread starts executing before any subsequent call + #0; + end + endtask + + virtual task req_otbn_key_sub(); + push_pull_host_seq#(.DeviceDataWidth(OTBN_DATA_SIZE)) otbn_pull_seq; + wait(cfg.under_reset == 0); + `uvm_create_on(otbn_pull_seq, p_sequencer.otbn_pull_sequencer_h); + `DV_CHECK_RANDOMIZE_FATAL(otbn_pull_seq) + `uvm_send(otbn_pull_seq) + endtask + + virtual task req_flash_addr_key(bit blocking = default_req_blocking); + if (cfg.m_flash_addr_pull_agent_cfg.vif.req === 1'b1) return; + + if (blocking) begin + req_flash_addr_key_sub(); + end else begin + fork + begin + req_flash_addr_key_sub(); + end + join_none; + // Add #0 to ensure that this thread starts executing before any subsequent call + #0; + end + endtask + + virtual task req_flash_addr_key_sub(); + push_pull_host_seq#(.DeviceDataWidth(FLASH_DATA_SIZE)) flash_addr_pull_seq; + wait(cfg.under_reset == 0); + `uvm_create_on(flash_addr_pull_seq, p_sequencer.flash_addr_pull_sequencer_h); + `DV_CHECK_RANDOMIZE_FATAL(flash_addr_pull_seq) + `uvm_send(flash_addr_pull_seq) + endtask + + virtual task req_flash_data_key(bit blocking = default_req_blocking); + if (cfg.m_flash_data_pull_agent_cfg.vif.req === 1'b1) return; + + if (blocking) begin + req_flash_data_key_sub(); + end else begin + fork + begin + req_flash_data_key_sub(); + end + join_none; + // Add #0 to ensure that this thread starts executing before any subsequent call + #0; + end + endtask + + virtual task req_flash_data_key_sub(); + push_pull_host_seq#(.DeviceDataWidth(FLASH_DATA_SIZE)) flash_data_pull_seq; + wait(cfg.under_reset == 0); + `uvm_create_on(flash_data_pull_seq, p_sequencer.flash_data_pull_sequencer_h); + `DV_CHECK_RANDOMIZE_FATAL(flash_data_pull_seq) + `uvm_send(flash_data_pull_seq) + endtask + + virtual task req_lc_transition(bit check_intr = 0, + bit blocking = default_req_blocking, + bit wr_blank_err = !write_unused_addr); + if (cfg.m_lc_prog_pull_agent_cfg.vif.req === 1'b1) return; + + if (blocking) begin + req_lc_transition_sub(check_intr, wr_blank_err); + end else begin + fork + begin + req_lc_transition_sub(check_intr, wr_blank_err); + end + join_none; + // Add #0 to ensure that this thread starts executing before any subsequent call + #0; + end + endtask + + virtual task req_lc_transition_sub(bit check_intr = 0, bit wr_blank_err = !write_unused_addr); + lc_ctrl_state_pkg::lc_cnt_e next_lc_cnt; + lc_ctrl_state_pkg::dec_lc_state_e next_lc_state, lc_state_dec; + bit [TL_DW-1:0] intr_val; + push_pull_host_seq#(.HostDataWidth(LC_PROG_DATA_SIZE), .DeviceDataWidth(1)) + lc_prog_pull_seq; + wait(cfg.under_reset == 0); + `uvm_create_on(lc_prog_pull_seq, p_sequencer.lc_prog_pull_sequencer_h); + + if (!wr_blank_err) begin + // Find valid next state and next cnt using lc_ctrl_dv_utils_pkg. + // If terminal state or max LcCnt reaches, will not program any new data. + if ((lc_state != LcStScrap) && (lc_cnt != LcCnt24)) begin + lc_state_dec = lc_ctrl_dv_utils_pkg::dec_lc_state(lc_state); + `DV_CHECK_STD_RANDOMIZE_WITH_FATAL(next_lc_state, + next_lc_state inside {VALID_NEXT_STATES[lc_state_dec]};) + `DV_CHECK_STD_RANDOMIZE_WITH_FATAL(next_lc_cnt, next_lc_cnt > lc_cnt;) + lc_state = lc_ctrl_dv_utils_pkg::encode_lc_state(next_lc_state); + lc_cnt = next_lc_cnt; + end + cfg.m_lc_prog_pull_agent_cfg.add_h_user_data({lc_cnt, lc_state}); + end + + `DV_CHECK_RANDOMIZE_FATAL(lc_prog_pull_seq) + `uvm_send(lc_prog_pull_seq) + + if (check_intr) rd_and_clear_intrs(); + endtask + + // This test access OTP_CTRL's test_access memory. The open-sourced code only test if the access + // is valid. Please override this task in proprietary OTP. + virtual task otp_test_access(); + if (`PRIM_DEFAULT_IMPL == prim_pkg::ImplGeneric) begin + repeat (10) begin + bit [TL_DW-1:0] data; + bit test_access_en; + bit [TL_AW-1:0] rand_addr = $urandom_range(0, NUM_PRIM_REG - 1) * 4; + bit [TL_AW-1:0] tlul_addr = + cfg.ral_models["otp_ctrl_prim_reg_block"].get_addr_from_offset(rand_addr); + if (cfg.stop_transaction_generators()) break; + rand_drive_dft_en(); + `DV_CHECK_STD_RANDOMIZE_FATAL(data) + test_access_en = cfg.otp_ctrl_vif.lc_dft_en_i == lc_ctrl_pkg::On; + tl_access(.addr(tlul_addr), .write(1), .data(data), .exp_err_rsp(~test_access_en), + .tl_sequencer_h(p_sequencer.tl_sequencer_hs["otp_ctrl_prim_reg_block"])); + tl_access(.addr(tlul_addr), .write(0), .data(data), .exp_err_rsp(~test_access_en), + .tl_sequencer_h(p_sequencer.tl_sequencer_hs["otp_ctrl_prim_reg_block"])); + end + end + endtask + + // Empty task, only drive it under `otp_ctrl_test_access_vseq` + virtual task rand_drive_dft_en(); + endtask +endclass : otp_ctrl_base_vseq diff --git a/src/fuse_ctrl/data/otp_ctrl_cov_bind.sv.tpl b/src/fuse_ctrl/data/otp_ctrl_cov_bind.sv.tpl new file mode 100755 index 000000000..fa61630f9 --- /dev/null +++ b/src/fuse_ctrl/data/otp_ctrl_cov_bind.sv.tpl @@ -0,0 +1,84 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Binds OTP_CTRL functional coverage interaface to the top level OTP_CTRL module. +// +${gen_comment} +<% +from topgen.lib import Name + +# The unsavory ${"\\"} tokens are used to escape the macros newline handling. +%>\ +`define PART_MUBI_COV(__part_name, __index) ${"\\"} + bind otp_ctrl cip_mubi_cov_if #(.Width(8)) ``__part_name``_read_lock_mubi_cov_if ( ${"\\"} + .rst_ni (rst_ni), ${"\\"} + .mubi (part_access[``__index``].read_lock) ${"\\"} + ); ${"\\"} + bind otp_ctrl cip_mubi_cov_if #(.Width(8)) ``__part_name``_write_lock_mubi_cov_if ( ${"\\"} + .rst_ni (rst_ni), ${"\\"} + .mubi (part_access[``__index``].write_lock) ${"\\"} + ); + +`define DAI_MUBI_COV(__part_name, __index) ${"\\"} + bind otp_ctrl cip_mubi_cov_if #(.Width(8)) dai_``__part_name``_read_lock_mubi_cov_if ( ${"\\"} + .rst_ni (rst_ni), ${"\\"} + .mubi (part_access_dai[``__index``].read_lock) ${"\\"} + ); ${"\\"} + bind otp_ctrl cip_mubi_cov_if #(.Width(8)) dai_``__part_name``_write_lock_mubi_cov_if ( ${"\\"} + .rst_ni (rst_ni), ${"\\"} + .mubi (part_access_dai[``__index``].write_lock) ${"\\"} + ); + +module otp_ctrl_cov_bind; + import otp_ctrl_part_pkg::*; + + bind otp_ctrl otp_ctrl_cov_if u_otp_ctrl_cov_if ( + .pwr_otp_o (pwr_otp_o), + .lc_otp_program_i (lc_otp_program_i), + .lc_escalate_en_i (lc_escalate_en_i), + .flash_otp_key_i (flash_otp_key_i), + .sram_otp_key_i (sram_otp_key_i), + .otbn_otp_key_i (otbn_otp_key_i) + ); + + bind otp_ctrl cip_lc_tx_cov_if u_lc_creator_seed_sw_rw_en_cov_if ( + .rst_ni (rst_ni), + .val (lc_creator_seed_sw_rw_en_i) + ); + + bind otp_ctrl cip_lc_tx_cov_if u_lc_seed_hw_rd_en_cov_if ( + .rst_ni (rst_ni), + .val (lc_seed_hw_rd_en_i) + ); + + bind otp_ctrl cip_lc_tx_cov_if u_lc_dft_en_cov_if ( + .rst_ni (rst_ni), + .val (lc_dft_en_i) + ); + + bind otp_ctrl cip_lc_tx_cov_if u_lc_escalate_en_cov_if ( + .rst_ni (rst_ni), + .val (lc_escalate_en_i) + ); + + bind otp_ctrl cip_lc_tx_cov_if u_lc_check_byp_en_cov_if ( + .rst_ni (rst_ni), + .val (lc_check_byp_en_i) + ); + + // Mubi internal coverage for buffered and unbuffered partitions. +% for part in otp_mmap.config["partitions"][:-1]: +<% part_name = Name.from_snake_case(part["name"]) %>\ + `PART_MUBI_COV(${part_name.as_snake_case()}, otp_ctrl_part_pkg::${part_name.as_camel_case()}Idx) +% endfor + + // Mubi internal coverage for DAI interface access +% for part in otp_mmap.config["partitions"][:-1]: +<% part_name = Name.from_snake_case(part["name"]) %>\ + `DAI_MUBI_COV(${part_name.as_snake_case()}, otp_ctrl_part_pkg::${part_name.as_camel_case()}Idx) +% endfor + +`undef PART_MUBI_COV +`undef DAI_MUBI_COV +endmodule diff --git a/src/fuse_ctrl/data/otp_ctrl_dai_lock_vseq.sv.tpl b/src/fuse_ctrl/data/otp_ctrl_dai_lock_vseq.sv.tpl new file mode 100755 index 000000000..05e81f1ab --- /dev/null +++ b/src/fuse_ctrl/data/otp_ctrl_dai_lock_vseq.sv.tpl @@ -0,0 +1,90 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +${gen_comment} +<% +from topgen.lib import Name + +parts_without_lc = [part for part in otp_mmap.config["partitions"] if + part["variant"] in ["Buffered", "Unbuffered"]] + +parts_with_digest = [part for part in otp_mmap.config["partitions"] if + (part["sw_digest"] or part["hw_digest"])] +%>\ +// otp_ctrl_dai_lock_vseq is developed to read/write lock DAI interface by partitions, and request +// read/write access to check if correct status and error code is triggered + +// Partition's legal range covers offset to digest addresses, dai_rd/dai_wr function will +// randomize the address based on the granularity. +`define PART_ADDR_RANGE(i) ${"\\"} + {[PartInfo[``i``].offset : (PartInfo[``i``].offset + PartInfo[``i``].size - 8)]} + +class otp_ctrl_dai_lock_vseq extends otp_ctrl_smoke_vseq; + `uvm_object_utils(otp_ctrl_dai_lock_vseq) + + `uvm_object_new + + // enable access_err for each cycle + constraint no_access_err_c {access_locked_parts == 1;} + + constraint num_trans_c { + num_trans inside {[1:10]}; + num_dai_op inside {[1:50]}; + } + + // the LC partition is always the last one + constraint partition_index_c {part_idx inside {[0:LifeCycleIdx]};} + + constraint dai_wr_legal_addr_c { +% for part in parts_without_lc: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() +%>\ + if (part_idx == ${part_name_camel}Idx) { + dai_addr inside `PART_ADDR_RANGE(${part_name_camel}Idx); + } +% endfor + if (part_idx == LifeCycleIdx) { + if (write_unused_addr) { + dai_addr inside {[PartInfo[LifeCycleIdx].offset : {OTP_ADDR_WIDTH{1'b1}}]}; + } else { + dai_addr inside `PART_ADDR_RANGE(LifeCycleIdx); + } + } + solve part_idx before dai_addr; + } + + constraint dai_wr_digests_c { + {dai_addr[TL_AW-1:2], 2'b0} dist { + { +% for part in parts_with_digest: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() +%>\ + ${part_name_camel}DigestOffset${"" if loop.last else ","} +% endfor + } :/ 1, + [VendorTestOffset : '1] :/ 9 + }; + } + + virtual task pre_start(); + super.pre_start(); + is_valid_dai_op = 0; + endtask + + virtual task dut_init(string reset_kind = "HARD"); + super.dut_init(reset_kind); + if ($urandom_range(0, 1)) begin + cfg.otp_ctrl_vif.drive_lc_creator_seed_sw_rw_en(get_rand_lc_tx_val(.t_weight(0))); + end + if ($urandom_range(0, 1)) begin + cfg.otp_ctrl_vif.drive_lc_owner_seed_sw_rw_en(get_rand_lc_tx_val(.t_weight(0))); + end + endtask + +endclass + +`undef PART_ADDR_RANGE diff --git a/src/fuse_ctrl/data/otp_ctrl_env_cov.sv.tpl b/src/fuse_ctrl/data/otp_ctrl_env_cov.sv.tpl new file mode 100755 index 000000000..f20736c34 --- /dev/null +++ b/src/fuse_ctrl/data/otp_ctrl_env_cov.sv.tpl @@ -0,0 +1,358 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +${gen_comment} +/** + * Covergoups that are dependent on run-time parameters that may be available + * only in build_phase can be defined here + * Covergroups may also be wrapped inside helper classes if needed. + */ +<% +from topgen.lib import Name + +parts_without_lc = [part for part in otp_mmap.config["partitions"] if + part["variant"] in ["Buffered", "Unbuffered"]] + +unbuffered_parts = [part for part in otp_mmap.config["partitions"] if + part["variant"] == "Unbuffered"] + +unbuffered_parts_with_digest = [part for part in unbuffered_parts if + (part["sw_digest"] or part["hw_digest"])] + +buffered_parts = [part for part in otp_mmap.config["partitions"] if + part["variant"] == "Buffered"] + +buffered_nonsecret_parts_with_digest = [part for part in buffered_parts if + (part["sw_digest"] or part["hw_digest"]) and + not part["secret"]] + +buffered_secret_parts_with_digest = [part for part in buffered_parts if + (part["sw_digest"] or part["hw_digest"]) and + part["secret"]] +## Partitions + LCI + DAI +num_err_code = len(otp_mmap.config["partitions"]) + 2 +%>\ +class otp_ctrl_unbuf_err_code_cg_wrap; + // Unbuffered partition can use TLUL interface to read out but cannot write, thus error_code does + // not have write_blank_err. + covergroup unbuf_err_code_cg(string name) with function sample(bit [TL_DW-1:0] val); + option.per_instance = 1; + option.name = name; + err_code_vals: coverpoint val { + bins no_err = {OtpNoError}; + bins macro_err = {OtpMacroError}; + bins ecc_corr_err = {OtpMacroEccCorrError}; + bins ecc_uncorr_err = {OtpMacroEccUncorrError}; + bins access_err = {OtpAccessError}; + bins check_fail = {OtpCheckFailError}; + bins fsm_err = {OtpFsmStateError}; + illegal_bins illegal_err = default; + } + endgroup + + function new(string name); + unbuf_err_code_cg = new(name); + endfunction +endclass + +class otp_ctrl_buf_err_code_cg_wrap; + // Buffered partition must use DAI interface to access partition, so it does not have access_err + // and write_blank err. + covergroup buf_err_code_cg(string name) with function sample(bit [TL_DW-1:0] val); + option.per_instance = 1; + option.name = name; + err_code_vals: coverpoint val { + bins no_err = {OtpNoError}; + bins macro_err = {OtpMacroError}; + bins ecc_corr_err = {OtpMacroEccCorrError}; + bins ecc_uncorr_err = {OtpMacroEccUncorrError}; + bins check_fail = {OtpCheckFailError}; + bins fsm_err = {OtpFsmStateError}; + illegal_bins illegal_err = default; + } + endgroup + + function new(string name); + buf_err_code_cg = new(name); + endfunction +endclass + +class otp_ctrl_csr_rd_after_alert_cg_wrap; + // This covergroup samples CSRs being checked (via CSR read) after fatal alert is issued. + covergroup csr_rd_after_alert_cg(otp_ctrl_core_reg_block ral) with function sample(bit[TL_DW-1:0] + csr_offset); + read_csr_after_alert_issued: coverpoint csr_offset { + bins unbuffered_digests = { +% for part in unbuffered_parts_with_digest: + ral.${part["name"].lower()}_digest[0].get_offset(), + ral.${part["name"].lower()}_digest[1].get_offset()${"" if loop.last else ","} +% endfor + }; + bins hw_digests = { +% for part in buffered_nonsecret_parts_with_digest: + ral.${part["name"].lower()}_digest[0].get_offset(), + ral.${part["name"].lower()}_digest[1].get_offset()${"" if loop.last else ","} +% endfor + }; + bins secret_digests = { +% for part in buffered_secret_parts_with_digest: + ral.${part["name"].lower()}_digest[0].get_offset(), + ral.${part["name"].lower()}_digest[1].get_offset()${"" if loop.last else ","} +% endfor + }; + bins direct_access_rdata = { + ral.direct_access_rdata[0].get_offset(), + ral.direct_access_rdata[1].get_offset() + }; + bins status = { + ral.status.get_offset() + }; + bins error_code = { +% for k in range(num_err_code): + ral.err_code[${k}].get_offset()${"" if loop.last else ","} +% endfor + }; + } + endgroup + + function new(otp_ctrl_core_reg_block ral); + csr_rd_after_alert_cg = new(ral); + endfunction + + function void sample(bit[TL_DW-1:0] csr_offset); + csr_rd_after_alert_cg.sample(csr_offset); + endfunction +endclass + +class otp_ctrl_unbuf_access_lock_cg_wrap; + covergroup unbuf_access_lock_cg(string name) with function sample(bit read_lock, bit write_lock, + bit is_write); + option.per_instance = 1; + option.name = name; + read_access_locked: coverpoint read_lock; + write_access_locked: coverpoint write_lock; + operation_type: coverpoint is_write { + bins write_op = {1}; + bins read_op = {0}; + } + unbuf_part_access_cross: cross read_access_locked, write_access_locked, operation_type; + endgroup + + function new(string name); + unbuf_access_lock_cg = new(name); + endfunction + + function void sample(bit read_lock, bit write_lock, bit is_write); + unbuf_access_lock_cg.sample(read_lock, write_lock, is_write); + endfunction +endclass + +class otp_ctrl_env_cov extends cip_base_env_cov #(.CFG_T(otp_ctrl_env_cfg)); + `uvm_component_utils(otp_ctrl_env_cov) + + // the base class provides the following handles for use: + // otp_ctrl_env_cfg: cfg + + otp_ctrl_unbuf_err_code_cg_wrap unbuf_err_code_cg_wrap[NumPartUnbuf]; + otp_ctrl_buf_err_code_cg_wrap buf_err_code_cg_wrap[NumPartBuf]; + otp_ctrl_csr_rd_after_alert_cg_wrap csr_rd_after_alert_cg_wrap; + otp_ctrl_unbuf_access_lock_cg_wrap unbuf_access_lock_cg_wrap[NumPartUnbuf]; + + bit_toggle_cg_wrap lc_prog_cg; + bit_toggle_cg_wrap otbn_req_cg; + bit_toggle_cg_wrap status_csr_cg[OtpStatusFieldSize]; + + // covergroups + // This covergroup collects different conditions when outputs (hwcfg_o, keymgr_key_o) are checked + // in scb: + // - If lc_esc_en is On + // - If each partition is locked (expect LC) + covergroup power_on_cg with function sample (bit lc_esc_en, bit[NumPart-2:0] parts_locked); + lc_esc: coverpoint lc_esc_en; +% for k, part in enumerate(parts_without_lc): + ${part["name"].lower()}_lock: coverpoint parts_locked[${k}]; +% endfor + endgroup + + // This covergroup is sampled only if flash request passed scb check. + covergroup flash_req_cg with function sample (int index, bit locked); + flash_index: coverpoint index { + bins flash_data_key = {FlashDataKey}; + bins flash_addr_key = {FlashAddrKey}; + illegal_bins il = default; + } + secret1_lock: coverpoint locked; + flash_req_lock_cross: cross flash_index, secret1_lock; + endgroup + + // This covergroup is sampled only if sram request passed scb check. + covergroup sram_req_cg with function sample (int index, bit locked); + sram_index: coverpoint index { + bins sram_key[NumSramKeyReqSlots] = {[0:(NumSramKeyReqSlots-1)]}; + illegal_bins il = default; + } + secret1_lock: coverpoint locked; + sram_req_lock_cross: cross sram_index, secret1_lock; + endgroup + + // This covergroup is sampled only if keymgr output passed scb check. + covergroup keymgr_o_cg with function sample (bit lc_seed_hw_rd_en, bit locked); + keymgr_rd_en: coverpoint lc_seed_hw_rd_en; + // TODO: probably should add all partitions with keymgr material here. + secret2_lock: coverpoint locked; + keymgr_output_conditions: cross keymgr_rd_en, secret2_lock; + endgroup + + // This covergroup samples dai request being issued after fatal alert is issued. + covergroup req_dai_access_after_alert_cg with function sample(bit [TL_DW-1:0] val); + req_dai_access_after_alert_issued: coverpoint val { + bins dai_write = {DaiWrite}; + bins dai_read = {DaiRead}; + bins dai_digest = {DaiDigest}; + } + endgroup + + // This covergroup samples background check being issued after fatal alert is issued. + covergroup issue_checks_after_alert_cg with function sample(bit [TL_DW-1:0] val); + issue_checks_after_alert_issued: coverpoint val { + bins integrity_check = {1}; + bins consistency_check = {2}; + } + endgroup + + // This covergroup collects DAI err_code value. + // DAI access does not have checks, thus no check_fail error. + covergroup dai_err_code_cg with function sample(bit [TL_DW-1:0] val, int part_idx); + err_code_vals: coverpoint val { + bins no_err = {OtpNoError}; + bins macro_err = {OtpMacroError}; + bins ecc_corr_err = {OtpMacroEccCorrError}; + bins ecc_uncorr_err = {OtpMacroEccUncorrError}; + bins write_blank_err = {OtpMacroWriteBlankError}; + bins access_err = {OtpAccessError}; + bins fsm_err = {OtpFsmStateError}; + illegal_bins illegal_err = default; + } + partition: coverpoint part_idx { +% for part in otp_mmap.config["partitions"]: +<% part_name = Name.from_snake_case(part["name"]) %>\ + bins ${part["name"].lower()} = {${part_name.as_camel_case()}Idx}; +% endfor + bins illegal_idx = default; + } + // LC partition has a separate LCI err_code to collect macro related errors. + dai_err_code_for_all_partitions: cross err_code_vals, partition { + // Illegal bin - vendor_test partition does not have EccUncorrectable error. + illegal_bins vendor_test_ecc_uncorrectable_err = + binsof (partition.vendor_test) && binsof (err_code_vals.ecc_uncorr_err); + ignore_bins life_cycle_ignore = binsof (partition.life_cycle) && + binsof(err_code_vals) intersect {[OtpMacroError:OtpMacroWriteBlankError]}; + } + endgroup + + // This covergroup collects LCI err_code value. + // LCI access does not have digest, thus no access_err. Check_fail, ecc_errors are covered in lc + // buffered partition instead of LCI here. + covergroup lci_err_code_cg with function sample(bit [TL_DW-1:0] val); + err_code_vals: coverpoint val { + bins no_err = {OtpNoError}; + bins macro_err = {OtpMacroError}; + bins write_blank_err = {OtpMacroWriteBlankError}; + bins fsm_err = {OtpFsmStateError}; + illegal_bins illegal_err = default; + } + endgroup + + covergroup dai_access_secret2_cg with function sample(bit lc_rw_en, dai_cmd_e dai_cmd); + lc_creator_seed_sw_rw_en: coverpoint lc_rw_en; + dai_access_cmd: coverpoint dai_cmd { + bins dai_rd = {DaiRead}; + bins dai_wr = {DaiWrite}; + bins dai_digest = {DaiDigest}; + } + dai_access_secret2: cross lc_creator_seed_sw_rw_en, dai_access_cmd; + endgroup + + function new(string name, uvm_component parent); + super.new(name, parent); + // Create coverage from local covergroups. + power_on_cg = new(); + flash_req_cg = new(); + sram_req_cg = new(); + keymgr_o_cg = new(); + req_dai_access_after_alert_cg = new(); + issue_checks_after_alert_cg = new(); + dai_err_code_cg = new(); + lci_err_code_cg = new(); + dai_access_secret2_cg = new(); + endfunction : new + + virtual function void build_phase(uvm_phase phase); + super.build_phase(phase); + // Create instances from bit_toggle_cg_wrapper. + lc_prog_cg = new("lc_prog_cg", "", 0); + otbn_req_cg = new("otbn_req_cg", "", 0); + foreach (status_csr_cg[i]) begin + otp_status_e index = otp_status_e'(i); + status_csr_cg[i]= new(index.name, "status_csr_cg", 0); + end + + // Create instances from external wrapper classes. + csr_rd_after_alert_cg_wrap = new(cfg.ral); + foreach (unbuf_err_code_cg_wrap[i]) begin + otp_status_e index = otp_status_e'(i); + unbuf_err_code_cg_wrap[i] = new($sformatf("unbuf_err_code_cg_wrap[%0s]", index.name)); + end + foreach (buf_err_code_cg_wrap[i]) begin + otp_status_e index = otp_status_e'(i + 2); + buf_err_code_cg_wrap[i] = new($sformatf("buf_err_code_cg_wrap[%0s]", index.name)); + end + foreach (unbuf_access_lock_cg_wrap[i]) begin + part_idx_e index = part_idx_e'(i); + unbuf_access_lock_cg_wrap[i] = new($sformatf("buf_err_code_cg_wrap[%0s]", index.name)); + end + endfunction + + function void collect_status_cov(bit [TL_DW-1:0] val); + foreach (status_csr_cg[i]) begin + status_csr_cg[i].sample(val[i]); + end + endfunction + + // Collect coverage for err_code when it is a compact multi-reg. For DAI error it uses the given + // access_part_idx as the target of the DAI access. + function void collect_compact_err_code_cov(bit [TL_DW-1:0] val, int access_part_idx = DaiIdx); + dv_base_reg_field err_code_flds[$]; + cfg.ral.err_code[0].get_dv_base_reg_fields(err_code_flds); + foreach (err_code_flds[part]) begin + collect_err_code_cov(part, get_field_val(err_code_flds[part], val), access_part_idx); + end + endfunction + + // Collect coverage for a given partition error_code. For DAI error it uses the given + // access_part_idx as the target of the DAI access. + function void collect_err_code_cov(int part_idx, bit [TL_DW-1:0] val, + int access_part_idx = DaiIdx); + case (part_idx) +% for part in otp_mmap.config["partitions"]: +<% part_name = Name.from_snake_case(part["name"]) %>\ + Otp${part_name.as_camel_case()}ErrIdx: begin + % if part in unbuffered_parts: + unbuf_err_code_cg_wrap[part_idx].unbuf_err_code_cg.sample(val); + % elif part in buffered_parts: + buf_err_code_cg_wrap[part_idx - NumPartUnbuf].buf_err_code_cg.sample(val); + % endif + end +% endfor + OtpDaiErrIdx: begin + dai_err_code_cg.sample(val, access_part_idx); + end + OtpLciErrIdx: begin + lci_err_code_cg.sample(val); + end + default: begin + `uvm_fatal(`gfn, $sformatf("invalid err_code index %0d", part_idx)) + end + endcase + endfunction +endclass diff --git a/src/fuse_ctrl/data/otp_ctrl_env_pkg.sv.tpl b/src/fuse_ctrl/data/otp_ctrl_env_pkg.sv.tpl new file mode 100755 index 000000000..08c86cb20 --- /dev/null +++ b/src/fuse_ctrl/data/otp_ctrl_env_pkg.sv.tpl @@ -0,0 +1,265 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +${gen_comment} +<% +from topgen.lib import Name + +parts_without_lc = [part for part in otp_mmap.config["partitions"] if + part["variant"] in ["Buffered", "Unbuffered"]] +otp_size_as_hex_text = f'{(2 ** otp_mmap.config["otp"]["byte_addr_width"]):x}' +%>\ +package otp_ctrl_env_pkg; + // dep packages + import uvm_pkg::*; + import top_pkg::*; + import dv_utils_pkg::*; + import dv_lib_pkg::*; + import dv_base_reg_pkg::*; + import tl_agent_pkg::*; + import cip_base_pkg::*; + import csr_utils_pkg::*; + import push_pull_agent_pkg::*; + import otp_ctrl_core_ral_pkg::*; + import otp_ctrl_prim_ral_pkg::*; + import otp_ctrl_reg_pkg::*; + import otp_ctrl_pkg::*; + import otp_ctrl_part_pkg::*; + import lc_ctrl_pkg::*; + import lc_ctrl_state_pkg::*; + import lc_ctrl_dv_utils_pkg::*; + import mem_bkdr_util_pkg::*; + import otp_scrambler_pkg::*; + import sec_cm_pkg::*; + + // macro includes + `include "uvm_macros.svh" + `include "dv_macros.svh" + + // parameters + parameter string LIST_OF_ALERTS[] = {"fatal_macro_error", + "fatal_check_error", + "fatal_bus_integ_error", + "fatal_prim_otp_alert", + "recov_prim_otp_alert"}; + parameter uint NUM_ALERTS = 5; + parameter uint NUM_EDN = 1; + + parameter uint DIGEST_SIZE = 8; + parameter uint SW_WINDOW_BASE_ADDR = 'h${otp_size_as_hex_text}; + parameter uint SW_WINDOW_SIZE = NumSwCfgWindowWords * 4; + + parameter uint TL_SIZE = (TL_DW / 8); + // LC has its own storage in scb + // we can use the LC offset here because it will always be the last partition. + parameter uint OTP_ARRAY_SIZE = LcTransitionCntOffset / TL_SIZE; + + parameter int OTP_ADDR_WIDTH = OtpByteAddrWidth-2; + + parameter uint NUM_PRIM_REG = 8; + + // sram rsp data has 1 bit for seed_valid, the rest are for key and nonce + parameter uint SRAM_DATA_SIZE = 1 + SramKeyWidth + SramNonceWidth; + // otbn rsp data has 1 bit for seed_valid, the rest are for key and nonce + parameter uint OTBN_DATA_SIZE = 1 + OtbnKeyWidth + OtbnNonceWidth; + // flash rsp data has 1 bit for seed_valid, the rest are for key + parameter uint FLASH_DATA_SIZE = 1 + FlashKeyWidth; + // lc program data has lc_state data and lc_cnt data + parameter uint LC_PROG_DATA_SIZE = LcStateWidth + LcCountWidth; + + parameter uint NUM_SRAM_EDN_REQ = 12; + parameter uint NUM_OTBN_EDN_REQ = 10; + + parameter uint CHK_TIMEOUT_CYC = 40; + + // When fatal alert triggered, all partitions and the DAI & LCI go to error state and status will + // be set to 1. + parameter bit [NumErrorEntries-1:0] FATAL_EXP_STATUS = '1; + + // lc does not have dai access + parameter int PART_BASE_ADDRS [NumPart-1] = { +% for part in parts_without_lc: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() +%>\ + ${part_name_camel}Offset${"" if loop.last else ","} +% endfor + }; + + // lc does not have digest + parameter int PART_OTP_DIGEST_ADDRS [NumPart-1] = { +% for part in parts_without_lc: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() +%>\ +% if part["sw_digest"] or part["hw_digest"]: + ${part_name_camel}DigestOffset >> 2${"" if loop.last else ","} +% else: + -1${"" if loop.last else ","} // This partition does not have a digest. +% endif +% endfor + }; + + // types + typedef enum bit [1:0] { + OtpOperationDone, + OtpErr, + NumOtpCtrlIntr + } otp_intr_e; + + typedef enum bit [5:0] { +% for part in otp_mmap.config["partitions"]: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() +%>\ + Otp${part_name_camel}ErrIdx, +% endfor + OtpDaiErrIdx, + OtpLciErrIdx, + OtpTimeoutErrIdx, + OtpLfsrFsmErrIdx, + OtpScramblingFsmErrIdx, + OtpDerivKeyFsmErrIdx, + OtpBusIntegErrorIdx, + OtpDaiIdleIdx, + OtpCheckPendingIdx, + OtpStatusFieldSize + } otp_status_e; + + typedef enum bit [2:0] { + OtpNoError, + OtpMacroError, + OtpMacroEccCorrError, + OtpMacroEccUncorrError, + OtpMacroWriteBlankError, + OtpAccessError, + OtpCheckFailError, + OtpFsmStateError + } otp_err_code_e; + + typedef enum bit [1:0] { + OtpNoEccErr, + OtpEccCorrErr, + OtpEccUncorrErr + } otp_ecc_err_e; + + typedef enum bit [1:0] { + OtpNoAlert, + OtpCheckAlert, + OtpMacroAlert + } otp_alert_e; + + typedef struct packed { + bit read_lock; + bit write_lock; + } otp_part_access_lock_t; + + // OTP conditions when driving specific port. + typedef enum bit [2:0] { + DuringOTPInit, + DuringOTPDaiBusy, + DuringOTPDaiDigest, + DuringOTPRead, + DriveRandomly + } port_drive_condition_e; + + typedef virtual otp_ctrl_if otp_ctrl_vif; + + parameter otp_err_code_e OTP_TERMINAL_ERRS[4] = {OtpMacroEccUncorrError, + OtpCheckFailError, + OtpFsmStateError, + OtpMacroError}; + + // functions + function automatic int get_part_index(bit [TL_DW-1:0] addr); + int index; + for (index = 0; index < NumPart; index++) begin + if (PartInfo[index].offset > addr) begin + index--; + break; + end + end + if (index == NumPart) index--; + return index; + endfunction + + function automatic bit is_secret(bit [TL_DW-1:0] addr); + int part_index = get_part_index(addr); + return PartInfo[part_index].secret; + endfunction + + function automatic bit part_has_digest(int part_idx); + return PartInfo[part_idx].hw_digest || PartInfo[part_idx].sw_digest; + endfunction + + function automatic bit part_has_hw_digest(int part_idx); + return PartInfo[part_idx].hw_digest; + endfunction + + function automatic bit is_sw_digest(bit [TL_DW-1:0] addr); + int part_idx = get_part_index(addr); + if (PartInfo[part_idx].sw_digest) begin + // If the partition contains a digest, it will be located in the last 64bit of the partition. + return {addr[TL_DW-1:3], 3'b0} == ((PartInfo[part_idx].offset + PartInfo[part_idx].size) - 8); + end else begin + return 0; + end + endfunction + + function automatic bit is_digest(bit [TL_DW-1:0] addr); + int part_idx = get_part_index(addr); + if (PartInfo[part_idx].sw_digest || PartInfo[part_idx].hw_digest) begin + // If the partition contains a digest, it will be located in the last 64bit of the partition. + return {addr[TL_DW-1:3], 3'b0} == ((PartInfo[part_idx].offset + PartInfo[part_idx].size) - 8); + end else begin + return 0; + end + endfunction + + function automatic bit is_sw_part(bit [TL_DW-1:0] addr); + int part_idx = get_part_index(addr); + return is_sw_part_idx(part_idx); + endfunction + + function automatic bit is_sw_part_idx(int part_idx); + return (PartInfo[part_idx].variant == Unbuffered); + endfunction + + function automatic bit is_hw_part(bit [TL_DW-1:0] addr); + int part_idx = get_part_index(addr); + return is_hw_part_idx(part_idx); + endfunction + + function automatic bit is_hw_part_idx(int part_idx); + return (PartInfo[part_idx].variant == Buffered); + endfunction + + // Returns true if this partition supports ECC. Otherwise, no ECC errors are reported, and + // the single bit errors are not corrected. + function automatic bit part_has_integrity(int part_idx); + return PartInfo[part_idx].integrity; + endfunction + + // Resolve an offset within the software window as an offset within the whole otp_ctrl block. + function automatic bit [TL_AW-1:0] get_sw_window_offset(bit [TL_AW-1:0] dai_addr); + return dai_addr + SW_WINDOW_BASE_ADDR; + endfunction + + function automatic bit [TL_DW-1:0] normalize_dai_addr(bit [TL_DW-1:0] dai_addr); + normalize_dai_addr = (is_secret(dai_addr) || is_digest(dai_addr)) ? dai_addr >> 3 << 3 : + dai_addr >> 2 << 2; + endfunction + + // package sources + `include "otp_ctrl_ast_inputs_cfg.sv" + `include "otp_ctrl_env_cfg.sv" + `include "otp_ctrl_env_cov.sv" + `include "otp_ctrl_virtual_sequencer.sv" + `include "otp_ctrl_scoreboard.sv" + `include "otp_ctrl_env.sv" + `include "otp_ctrl_vseq_list.sv" + +endpackage diff --git a/src/fuse_ctrl/data/otp_ctrl_if.sv.tpl b/src/fuse_ctrl/data/otp_ctrl_if.sv.tpl new file mode 100755 index 000000000..4fac06be3 --- /dev/null +++ b/src/fuse_ctrl/data/otp_ctrl_if.sv.tpl @@ -0,0 +1,350 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +${gen_comment} +<% +from topgen.lib import Name +unbuf_parts_with_digest = [part for part in otp_mmap.config["partitions"] if + part["variant"] == "Unbuffered" and + (part["sw_digest"] or part["hw_digest"])] +parts_without_lc = [part for part in otp_mmap.config["partitions"] if + part["variant"] in ["Buffered", "Unbuffered"]] +buf_parts_without_lc = [part for part in otp_mmap.config["partitions"] if + part["variant"] == "Buffered"] +%>\ +// This interface collect the broadcast output data from OTP, +// and drive input requests coming into OTP. +`define ECC_REG_PATH gen_ecc_reg.u_otp_ctrl_ecc_reg.gen_ecc_dec[0].u_prim_secded_inv_72_64_dec + +// This only supports buffered partitions. +`define BUF_PART_OTP_CMD_PATH(i) ${"\\"} + tb.dut.gen_partitions[``i``].gen_buffered.u_part_buf.otp_cmd_o + +`define LC_PART_OTP_CMD_PATH ${"\\"} + tb.dut.gen_partitions[LifeCycleIdx].gen_lifecycle.u_part_buf.otp_cmd_o + +`define FORCE_OTP_PART_LOCK_WITH_RAND_NON_MUBI_VAL(i) ${"\\"} + if (forced_part_access_sel[``i``].read_lock) begin ${"\\"} + force tb.dut.part_access[``i``].read_lock = get_rand_mubi8_val(.t_weight(0), .f_weight(0)); ${"\\"} + force tb.dut.part_access_dai[``i``].read_lock = get_rand_mubi8_val(.t_weight(0), .f_weight(0)); ${"\\"} + end ${"\\"} + if (forced_part_access_sel[``i``].write_lock) begin ${"\\"} + force tb.dut.part_access[``i``].write_lock = get_rand_mubi8_val(.t_weight(0), .f_weight(0)); ${"\\"} + force tb.dut.part_access_dai[``i``].write_lock = get_rand_mubi8_val(.t_weight(0), .f_weight(0)); ${"\\"} + end + +`ifndef PRIM_GENERIC_OTP_PATH + `define PRIM_GENERIC_OTP_PATH${"\\"} + tb.dut.u_otp +`endif + +`ifndef PRIM_GENERIC_OTP_CMD_I_PATH + `define PRIM_GENERIC_OTP_CMD_I_PATH ${"\\"} + `PRIM_GENERIC_OTP_PATH.gen_generic.u_impl_generic.cmd_i +`endif + +interface otp_ctrl_if(input clk_i, input rst_ni); + import uvm_pkg::*; + import otp_ctrl_env_pkg::*; + import otp_ctrl_pkg::*; + import otp_ctrl_reg_pkg::*; + import otp_ctrl_part_pkg::*; + import cip_base_pkg::*; + + // Output from DUT + otp_broadcast_t otp_broadcast_o; + otp_keymgr_key_t keymgr_key_o; + otp_lc_data_t lc_data_o; + logic pwr_otp_done_o, pwr_otp_idle_o; + + // Inputs to DUT + logic pwr_otp_init_i, scan_en_i, scan_rst_ni, ext_voltage_h_io; + lc_ctrl_pkg::lc_tx_t lc_dft_en_i, lc_escalate_en_i, lc_check_byp_en_i, + lc_creator_seed_sw_rw_en_i, lc_owner_seed_sw_rw_en_i, + lc_seed_hw_rd_en_i; + prim_mubi_pkg::mubi4_t scanmode_i; + otp_ast_rsp_t otp_ast_pwr_seq_h_i; + ast_pkg::ast_obs_ctrl_t obs_ctrl_i; + + // Unused in prim_generic_otp memory. + logic [OtpTestCtrlWidth-1:0] otp_vendor_test_ctrl_i; + logic [OtpTestStatusWidth-1:0] otp_vendor_test_status_o; + logic [OtpTestVectWidth-1:0] cio_test_o; + logic [OtpTestVectWidth-1:0] cio_test_en_o; + + // Connect with lc_prog push_pull interface. + logic lc_prog_req, lc_prog_err; + logic lc_prog_err_dly1, lc_prog_no_sta_check; + + // Connect push_pull interfaces ack signals for assertion checks. + logic otbn_ack, lc_prog_ack; + logic [1:0] flash_acks; + logic [NumSramKeyReqSlots-1:0] sram_acks; + + // Variables for internal interface logic. + // `lc_escalate_en` is async, take two clock cycles to synchronize. + lc_ctrl_pkg::lc_tx_t lc_esc_dly1, lc_esc_dly2; + + // Variable for scoreboard. + // For `lc_escalate_en`, any value that is not `Off` is a `On`. + bit lc_esc_on; + + // Probe design signal for alert request. + logic alert_reqs; + + // Usually the `lc_check_byp_en` will be automatically set to `On` when LC program request is + // issued, and stays `On` until reset is issued. + // Set this variable to 0 after a LC program request might cause otp checks to fail. + bit lc_check_byp_en = 1; + + // Internal veriable to track which sw partitions have ECC reg error. + bit [NumPartUnbuf-1:0] force_sw_parts_ecc_reg; + + // DUT configuration object + otp_ctrl_ast_inputs_cfg dut_cfg; + + // for DV macros ID + string msg_id = "otp_ctrl_if"; + + // Lc_err could trigger during LC program, so check intr and status after lc_req is finished. + // Lc_err takes one clock cycle to propogate to intr signal. So avoid intr check if it happens + // during the transition. + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + lc_prog_err_dly1 <= 0; + lc_esc_dly1 <= lc_ctrl_pkg::Off; + lc_esc_dly2 <= lc_ctrl_pkg::Off; + lc_check_byp_en_i <= get_rand_lc_tx_val(); + lc_esc_on <= 0; + end else begin + lc_prog_err_dly1 <= lc_prog_err; + lc_esc_dly1 <= lc_escalate_en_i; + lc_esc_dly2 <= lc_esc_dly1; + if (lc_prog_req) begin + lc_check_byp_en_i <= lc_check_byp_en ? lc_ctrl_pkg::On : lc_ctrl_pkg::Off; + end + if (lc_esc_dly2 != lc_ctrl_pkg::Off && !lc_esc_on) begin + lc_esc_on <= 1; + end + end + end + + assign lc_prog_no_sta_check = lc_prog_err | lc_prog_err_dly1 | lc_prog_req | lc_esc_on; + + function automatic void drive_pwr_otp_init(logic val); + pwr_otp_init_i = val; + endfunction + + function automatic void drive_ext_voltage_h_io(logic val); + ext_voltage_h_io = val; + endfunction + + function automatic void drive_lc_creator_seed_sw_rw_en(lc_ctrl_pkg::lc_tx_t val); + lc_creator_seed_sw_rw_en_i = val; + endfunction + + function automatic void drive_lc_owner_seed_sw_rw_en(lc_ctrl_pkg::lc_tx_t val); + lc_owner_seed_sw_rw_en_i = val; + endfunction + + function automatic void drive_lc_dft_en(lc_ctrl_pkg::lc_tx_t val); + lc_dft_en_i = val; + endfunction + + function automatic void drive_lc_escalate_en(lc_ctrl_pkg::lc_tx_t val); + lc_escalate_en_i = val; + endfunction + + function automatic void drive_lc_seed_hw_rd_en(lc_ctrl_pkg::lc_tx_t val); + lc_seed_hw_rd_en_i = val; + endfunction + + function automatic bit under_error_states(); + return lc_esc_on | alert_reqs; + endfunction + + // SW partitions do not have any internal checks. + // Here we force internal ECC check to fail. + task automatic force_sw_check_fail( + bit[NumPartUnbuf-1:0] fail_idx = $urandom_range(1, (1'b1 << NumPartUnbuf) - 1)); + @(posedge clk_i); +% for part in unbuf_parts_with_digest: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() +%>\ + if (fail_idx[${part_name_camel}Idx]) begin + force tb.dut.gen_partitions[${part_name_camel}Idx].gen_unbuffered. + u_part_unbuf.`ECC_REG_PATH.data_i[0] = 1; + force_sw_parts_ecc_reg[${part_name_camel}Idx] = 1; + end +% endfor + endtask + + task automatic release_sw_check_fail(); + @(posedge clk_i); +% for part in unbuf_parts_with_digest: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() +%>\ + if (force_sw_parts_ecc_reg[${part_name_camel}Idx]) begin + release tb.dut.gen_partitions[${part_name_camel}Idx].gen_unbuffered. + u_part_unbuf.`ECC_REG_PATH.data_i[0]; + force_sw_parts_ecc_reg[${part_name_camel}Idx] = 0; + end +% endfor + endtask + + // Force prim_generic_otp input cmd_i to a invalid value. + task automatic force_invalid_otp_cmd_i(); + @(posedge clk_i); + force `PRIM_GENERIC_OTP_CMD_I_PATH = prim_otp_pkg::cmd_e'(2'b10); + endtask + + task automatic release_invalid_otp_cmd_i(); + @(posedge clk_i); + release `PRIM_GENERIC_OTP_CMD_I_PATH; + endtask + + // Force part_buf partitions output otp_cmd_o to a invalid value. + task automatic force_invalid_part_cmd_o(int part_idx); + @(posedge clk_i); + case (part_idx) +% for part in buf_parts_without_lc: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() +%>\ + ${part_name_camel}Idx: force `BUF_PART_OTP_CMD_PATH(${part_name_camel}Idx) = prim_otp_pkg::cmd_e'(2'b10); +% endfor + LifeCycleIdx: force `LC_PART_OTP_CMD_PATH = prim_otp_pkg::cmd_e'(2'b10); + default: begin + `uvm_fatal("otp_ctrl_if", + $sformatf("force invalid otp_cmd_o only supports buffered partitions: %0d", part_idx)) + end + endcase + endtask + + task automatic release_invalid_part_cmd_o(int part_idx); + @(posedge clk_i); + case (part_idx) +% for part in buf_parts_without_lc: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() +%>\ + ${part_name_camel}Idx: release `BUF_PART_OTP_CMD_PATH(${part_name_camel}Idx); +% endfor + LifeCycleIdx: release `LC_PART_OTP_CMD_PATH; + default: begin + `uvm_fatal("otp_ctrl_if", + $sformatf("release invalid otp_cmd_o only supports buffered partitions: %0d", + part_idx)) + end + endcase + endtask + + // This task forces otp_ctrl's internal mubi signals to values that are not mubi::true or mubi:: + // false. Then scb will check if design treats these values as locking the partition access. + task automatic force_part_access_mubi(otp_part_access_lock_t forced_part_access_sel[NumPart-1]); + @(posedge clk_i); +% for part in parts_without_lc: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() +%>\ + `FORCE_OTP_PART_LOCK_WITH_RAND_NON_MUBI_VAL(${part_name_camel}Idx) +% endfor + endtask + + task automatic release_part_access_mubi(); + @(posedge clk_i); + release tb.dut.part_access; + release tb.dut.part_access_dai; + endtask + + // Connectivity assertions for test related I/Os. + `ASSERT(LcOtpTestStatusO_A, otp_vendor_test_status_o == `PRIM_GENERIC_OTP_PATH.test_status_o) + `ASSERT(LcOtpTestCtrlI_A, otp_vendor_test_ctrl_i == `PRIM_GENERIC_OTP_PATH.test_ctrl_i) + + `ASSERT(CioTestOWithDftOn_A, lc_dft_en_i == lc_ctrl_pkg::On |-> + ${"##"}[2:3] cio_test_o == `PRIM_GENERIC_OTP_PATH.test_vect_o) + `ASSERT(CioTestOWithDftOff_A, lc_dft_en_i != lc_ctrl_pkg::On |-> ##[2:3] cio_test_o == 0) + `ASSERT(CioTestEnOWithDftOn_A, lc_dft_en_i == lc_ctrl_pkg::On |-> ##[2:3] cio_test_en_o == '1) + `ASSERT(CioTestEnOWithDftOff_A, lc_dft_en_i != lc_ctrl_pkg::On |-> ##[2:3] cio_test_en_o == 0) + + + `define OTP_ASSERT_WO_LC_ESC(NAME, SEQ) ${"\\"} + `ASSERT(NAME, SEQ, clk_i, !rst_ni || lc_esc_on || alert_reqs) + + // If pwr_otp_idle is set only if pwr_otp init is done + `OTP_ASSERT_WO_LC_ESC(OtpPwrDoneWhenIdle_A, pwr_otp_idle_o |-> pwr_otp_done_o) + + // otp_broadcast_o is valid only when otp init is done + `OTP_ASSERT_WO_LC_ESC(OtpHwCfgValidOn_A, pwr_otp_done_o |-> + otp_broadcast_o.valid == lc_ctrl_pkg::On) + // If otp_broadcast is Off, then hw partition is not finished calculation, + // then otp init is not done + `OTP_ASSERT_WO_LC_ESC(OtpHwCfgValidOff_A, otp_broadcast_o.valid == lc_ctrl_pkg::Off |-> + pwr_otp_done_o == 0) + // Once OTP init is done, otp_broadcast_o output value stays stable until next power cycle + `OTP_ASSERT_WO_LC_ESC(OtpHwCfgStable_A, otp_broadcast_o.valid == lc_ctrl_pkg::On |=> + $stable(otp_broadcast_o)) + + // Otp_keymgr valid is related to part_digest, should not be changed after otp_pwr_init + `OTP_ASSERT_WO_LC_ESC(OtpKeymgrValidStable0_A, pwr_otp_done_o |-> + $stable(keymgr_key_o.creator_root_key_share0_valid)) + `OTP_ASSERT_WO_LC_ESC(OtpKeymgrValidStable1_A, pwr_otp_done_o |-> + $stable(keymgr_key_o.creator_root_key_share1_valid)) + `OTP_ASSERT_WO_LC_ESC(OtpKeymgrValidStable2_A, pwr_otp_done_o |-> + $stable(keymgr_key_o.creator_seed_valid)) + `OTP_ASSERT_WO_LC_ESC(OtpKeymgrValidStable3_A, pwr_otp_done_o |-> + $stable(keymgr_key_o.owner_seed_valid)) + + // During lc_prog_req, either otp_idle will be reset or lc_error is set + `OTP_ASSERT_WO_LC_ESC(LcProgReq_A, $rose(lc_prog_req) |=> + (pwr_otp_idle_o == 0 || $rose(lc_prog_err)) within lc_prog_req[*1:$]) + + // During fatal alert, check if otp outputs revert back to default value. + // Wait three clock cycles until error propogates to each FSM states and regs. + `define OTP_FATAL_ERR_ASSERT(NAME, SEQ) ${"\\"} + `ASSERT(FatalErr``NAME``, alert_reqs |-> ##3 SEQ) + + `OTP_FATAL_ERR_ASSERT(LcDataValid_A, lc_data_o.valid == 0 && lc_data_o.error == 1) + `OTP_FATAL_ERR_ASSERT(LcDataState_A, lc_data_o.state == + PartInvDefault[LcStateOffset*8+:LcStateSize*8]) + `OTP_FATAL_ERR_ASSERT(LcDataCount_A, lc_data_o.count == + PartInvDefault[LcTransitionCntOffset*8+:LcTransitionCntSize*8]) + `OTP_FATAL_ERR_ASSERT(LcDataTestUnlockToken_A, lc_data_o.test_unlock_token == + PartInvDefault[TestUnlockTokenOffset*8+:TestUnlockTokenSize*8]) + `OTP_FATAL_ERR_ASSERT(LcDataTestExitToken_A, lc_data_o.test_exit_token == + PartInvDefault[TestExitTokenOffset*8+:TestExitTokenSize*8]) + `OTP_FATAL_ERR_ASSERT(LcDataRmaToken_A, lc_data_o.rma_token == + PartInvDefault[RmaTokenOffset*8+:RmaTokenSize*8]) + + `OTP_FATAL_ERR_ASSERT(KeymgrKeyData_A, keymgr_key_o.creator_root_key_share0 == + PartInvDefault[CreatorRootKeyShare0Offset*8+:CreatorRootKeyShare0Size*8] && + keymgr_key_o.creator_root_key_share1 == + PartInvDefault[CreatorRootKeyShare1Offset*8+:CreatorRootKeyShare1Size*8]) + + `OTP_FATAL_ERR_ASSERT(HwCfgOValid_A, otp_broadcast_o.valid == lc_ctrl_pkg::Off) + `OTP_FATAL_ERR_ASSERT(HwCfg0OData_A, otp_broadcast_o.hw_cfg0_data == + PartInvDefault[HwCfg0Offset*8+:HwCfg0Size*8]) + `OTP_FATAL_ERR_ASSERT(HwCfg1OData_A, otp_broadcast_o.hw_cfg1_data == + PartInvDefault[HwCfg1Offset*8+:HwCfg1Size*8]) + + `OTP_FATAL_ERR_ASSERT(LcProgAck_A, lc_prog_ack == 0) + `OTP_FATAL_ERR_ASSERT(FlashAcks_A, flash_acks == 0) + `OTP_FATAL_ERR_ASSERT(SramAcks_A, sram_acks == 0) + `OTP_FATAL_ERR_ASSERT(OtbnAck_A, otbn_ack == 0) + + `undef OTP_ASSERT_WO_LC_ESC + `undef OTP_FATAL_ERR_ASSERT + `undef ECC_REG_PATH + `undef BUF_PART_OTP_CMD_PATH + `undef LC_PART_OTP_CMD_PATH + `undef PRIM_GENERIC_OTP_PATH + `undef PRIM_GENERIC_OTP_CMD_I_PATH + `undef FORCE_OTP_PART_LOCK_WITH_RAND_NON_MUBI_VAL +endinterface diff --git a/src/fuse_ctrl/data/otp_ctrl_mmap.hjson b/src/fuse_ctrl/data/otp_ctrl_mmap.hjson new file mode 100755 index 000000000..67c5176df --- /dev/null +++ b/src/fuse_ctrl/data/otp_ctrl_mmap.hjson @@ -0,0 +1,269 @@ +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Use the gen-otp-mmap.py script to update dependent files (like documentation +// tables the comportable hjson and metadata SV package): +// +// $ ./util/design/gen-otp-mmap.py +// +// Make sure to regenerate the CSRs after converting the memory map: +// +// $ cd ${PROJ_ROOT} +// $ make -C hw regs +// + +{ + // 256 bit seed to be used for generation of partition item default values. + // Can be overridden on the command line with the --seed switch. + seed: "36021179872380457113239299468132194022238108125576166239904535336103582949069" + + otp: { + width: "2", // bytes + depth: "2048" + } + + // Definition of scrambling and digest constants and keys. + scrambling: { + key_size: "16", + iv_size: "8", + cnst_size: "16", + keys: [ + { + name: "Secret0Key", + value: "", + } + { + name: "Secret1Key", + value: "", + } + { + name: "Secret2Key", + value: "", + } + ] + digests: [ + // This is the consistency digest used by all partitions. + { + name: "CnstyDigest", + iv_value: "", + cnst_value: "", + } + // The other digest configurations below are used for + // key derivation and token hashing. + { + name: "FlashDataKey", + iv_value: "", + cnst_value: "", + } + { + name: "FlashAddrKey", + iv_value: "", + cnst_value: "", + } + { + name: "SramDataKey", + iv_value: "", + cnst_value: "", + } + ] + } + + // The enumeration order below defines the address map of the OTP controller, + // if the offsets are not defined explicitly via the "offset" key. + // Note that the digest items are added automatically to the address map. + partitions: [ + { + name: "VENDOR_TEST", + variant: "Unbuffered", + size: "64", // in bytes + secret: false, + sw_digest: true, + hw_digest: false, + write_lock: "Digest", + read_lock: "CSR", + key_sel: "NoKey", + integrity: false, // Do not use integrity (ECC) on this partition. + bkout_type: false, // Do not use generate a breakout type for this partition. + items: [ + { + name: "SCRATCH", + size: "56" + } + ], + desc: '''Vendor test partition. + This is reserved for manufacturing smoke checks. The OTP wrapper + control logic inside prim_otp is allowed to read/write to this + region. ECC uncorrectable errors seen on the functional prim_otp + interface will not lead to an alert for this partition. + Instead, such errors will be reported as correctable ECC errors. + ''' + } + { + name: "NON_SECRET_FUSES", + variant: "Unbuffered", + absorb: true, + secret: false, + sw_digest: true, + hw_digest: false, + write_lock: "Digest", + read_lock: "CSR", + key_sel: "NoKey", + integrity: true, // Use integrity (ECC) on this partition + bkout_type: false, // Do not generate a breakout type for this partition + items: [ + { + name: "FMC_KEY_MANIFEST_SVN", + size: "4" + } + { + name: "RUNTIME_SVN", + size: "16" + } + { + name: "LMS_VERIFY", + size: "4" + } + { + name: "LMS_REVOCATION", + size: "4" + } + { + name: "KEY_MANIFEST_PK_HASH_MASK", + size: "4" + } + { + name: "OWNER_PK_HASH", + size: "48" + } + { + name: "IDEVID_CERT_ATTR", + size: "96", + // Default value to be output in case partition has not + // initialized or is in error state. If not specified, + // a value of '0 will be used. + inv_default: "", + } + { + name: "IDEVID_MANUF_HSM_ID", + size: "16" + } + { + name: "SOC_STEPPING_ID", + size: "4" + } + ], + desc: '''Non Secret Fuses partition. + This contains data such IDEVID, public key hash mask, owner + key hash, SoC Stepping ID etc. + ''' + } + { + name: "SECRET0", + variant: "Buffered", + secret: true, + sw_digest: false, + hw_digest: true, + write_lock: "Digest", + read_lock: "Digest", + key_sel: "Secret0Key", + integrity: true, + bkout_type: false, + items: [ + { + name: "UDS_SEED", + size: "48" + } + ], + desc: '''Secret partition 0. + This contains Obfuscated UDS seed. + ''' + } + { + name: "SECRET1", + variant: "Buffered", + secret: true, + sw_digest: false, + hw_digest: true, + write_lock: "Digest", + read_lock: "Digest", + key_sel: "Secret1Key", + integrity: true, + bkout_type: false, + items: [ + { + name: "FIELD_ENTROPY", + size: "32" + } + ], + desc: '''Secret partition 1. + This contains obfuscated field entropy. + ''' + } + { + name: "SECRET2", + variant: "Buffered", + secret: true, + sw_digest: false, + hw_digest: true, + write_lock: "Digest", + read_lock: "Digest", + key_sel: "Secret2Key", + integrity: true, + bkout_type: false, + items: [ + { + name: "KEY_MANIFEST_PK_HASH", + size: "48" + } + ], + desc: '''Secret partition 2. + This contains public key hash. + ''' + } + { + name: "LIFE_CYCLE", + variant: "LifeCycle", + secret: false, + sw_digest: false, + hw_digest: false, + write_lock: "None", + read_lock: "None", + key_sel: "NoKey", + integrity: true, + bkout_type: false, + items: [ + // The life cycle transition count is specified + // first such that any programming attempt of the life cycle + // partition through the LCI will always write the transition + // counter words first when programming an updated state vector. + // This is an additional safeguard, to the sequencing in the + // life cycle controller to ensure that the counter is always written + // before any state update. I.e., the life cycle controller + // already splits the counter and state updates into two + // supsequent requests through the LCI, where the first request + // only contains the updated transition counter, and the second + // request the updated transition counter and state. + { + name: "LC_TRANSITION_CNT", + inv_default: "", + size: "48" + } + { + name: "LC_STATE", + inv_default: "", + size: "40" + } + ], + desc: '''Lifecycle partition. + This contains lifecycle transition count and state. This partition + cannot be locked since the life cycle state needs to advance to RMA + in-field. Note that while this partition is not marked secret, it + is not readable nor writeable via the DAI. Only the LC controller + can access this partition, and even via the LC controller it is not + possible to read the raw manufacturing life cycle state in encoded + form, since that encoding is considered a netlist secret. The LC + controller only exposes a decoded version of this state. + ''' + } + ] +} \ No newline at end of file diff --git a/src/fuse_ctrl/data/otp_ctrl_part_pkg.sv.tpl b/src/fuse_ctrl/data/otp_ctrl_part_pkg.sv.tpl new file mode 100755 index 000000000..6c8e01540 --- /dev/null +++ b/src/fuse_ctrl/data/otp_ctrl_part_pkg.sv.tpl @@ -0,0 +1,353 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Package partition metadata. +// +${gen_comment} +<% +from topgen.lib import Name +%>\ +package otp_ctrl_part_pkg; + + import prim_util_pkg::vbits; + import otp_ctrl_reg_pkg::*; + import otp_ctrl_pkg::*; + + //////////////////////////////////// + // Scrambling Constants and Types // + //////////////////////////////////// + + parameter int NumScrmblKeys = ${len(otp_mmap.config["scrambling"]["keys"])}; + parameter int NumDigestSets = ${len(otp_mmap.config["scrambling"]["digests"])}; + + parameter int ScrmblKeySelWidth = vbits(NumScrmblKeys); + parameter int DigestSetSelWidth = vbits(NumDigestSets); + parameter int ConstSelWidth = (ScrmblKeySelWidth > DigestSetSelWidth) ? + ScrmblKeySelWidth : + DigestSetSelWidth; + + typedef enum logic [ConstSelWidth-1:0] { + StandardMode, + ChainedMode + } digest_mode_e; + + typedef logic [NumScrmblKeys-1:0][ScrmblKeyWidth-1:0] key_array_t; + typedef logic [NumDigestSets-1:0][ScrmblKeyWidth-1:0] digest_const_array_t; + typedef logic [NumDigestSets-1:0][ScrmblBlockWidth-1:0] digest_iv_array_t; + + typedef enum logic [ConstSelWidth-1:0] { +% for key in otp_mmap.config["scrambling"]["keys"]: + ${key["name"]}${"" if loop.last else ","} +% endfor + } key_sel_e; + + typedef enum logic [ConstSelWidth-1:0] { +% for dig in otp_mmap.config["scrambling"]["digests"]: + ${dig["name"]}${"" if loop.last else ","} +% endfor + } digest_sel_e; + + // SEC_CM: SECRET.MEM.SCRAMBLE + parameter key_array_t RndCnstKey = { +% for key in otp_mmap.config["scrambling"]["keys"][::-1]: + ${"{0:}'h{1:0X}".format(otp_mmap.config["scrambling"]["key_size"] * 8, key["value"])}${"" if loop.last else ","} +% endfor + }; + + // SEC_CM: PART.MEM.DIGEST + // Note: digest set 0 is used for computing the partition digests. Constants at + // higher indices are used to compute the scrambling keys. + parameter digest_const_array_t RndCnstDigestConst = { +% for dig in otp_mmap.config["scrambling"]["digests"][::-1]: + ${"{0:}'h{1:0X}".format(otp_mmap.config["scrambling"]["cnst_size"] * 8, dig["cnst_value"])}${"" if loop.last else ","} +% endfor + }; + + parameter digest_iv_array_t RndCnstDigestIV = { +% for dig in otp_mmap.config["scrambling"]["digests"][::-1]: + ${"{0:}'h{1:0X}".format(otp_mmap.config["scrambling"]["iv_size"] * 8, dig["iv_value"])}${"" if loop.last else ","} +% endfor + }; + + + ///////////////////////////////////// + // Typedefs for Partition Metadata // + ///////////////////////////////////// + + typedef enum logic [1:0] { + Unbuffered, + Buffered, + LifeCycle + } part_variant_e; + + typedef struct packed { + part_variant_e variant; + // Offset and size within the OTP array, in Bytes. + logic [OtpByteAddrWidth-1:0] offset; + logic [OtpByteAddrWidth-1:0] size; + // Key index to use for scrambling. + key_sel_e key_sel; + // Attributes + logic secret; // Whether the partition is secret (and hence scrambled) + logic sw_digest; // Whether the partition has a software digest + logic hw_digest; // Whether the partition has a hardware digest + logic write_lock; // Whether the partition is write lockable (via digest) + logic read_lock; // Whether the partition is read lockable (via digest) + logic integrity; // Whether the partition is integrity protected + logic iskeymgr_creator; // Whether the partition has any creator key material + logic iskeymgr_owner; // Whether the partition has any owner key material + } part_info_t; + + parameter part_info_t PartInfoDefault = '{ + variant: Unbuffered, + offset: '0, + size: OtpByteAddrWidth'('hFF), + key_sel: key_sel_e'('0), + secret: 1'b0, + sw_digest: 1'b0, + hw_digest: 1'b0, + write_lock: 1'b0, + read_lock: 1'b0, + integrity: 1'b0, + iskeymgr_creator: 1'b0, + iskeymgr_owner: 1'b0 + }; + + //////////////////////// + // Partition Metadata // + //////////////////////// + + localparam part_info_t PartInfo [NumPart] = '{ +% for part in otp_mmap.config["partitions"]: + // ${part["name"]} + '{ + variant: ${part["variant"]}, + offset: ${otp_mmap.config["otp"]["byte_addr_width"]}'d${part["offset"]}, + size: ${part["size"]}, + key_sel: ${part["key_sel"] if part["key_sel"] != "NoKey" else "key_sel_e'('0)"}, + secret: 1'b${"1" if part["secret"] else "0"}, + sw_digest: 1'b${"1" if part["sw_digest"] else "0"}, + hw_digest: 1'b${"1" if part["hw_digest"] else "0"}, + write_lock: 1'b${"1" if part["write_lock"].lower() == "digest" else "0"}, + read_lock: 1'b${"1" if part["read_lock"].lower() == "digest" else "0"}, + integrity: 1'b${"1" if part["integrity"] else "0"}, + iskeymgr_creator: 1'b${"1" if part["iskeymgr_creator"] else "0"}, + iskeymgr_owner: 1'b${"1" if part["iskeymgr_owner"] else "0"} + }${"" if loop.last else ","} +% endfor + }; + + typedef enum { +% for part in otp_mmap.config["partitions"]: + ${Name.from_snake_case(part["name"]).as_camel_case()}Idx, +% endfor + // These are not "real partitions", but in terms of implementation it is convenient to + // add these at the end of certain arrays. + DaiIdx, + LciIdx, + KdiIdx, + // Number of agents is the last idx+1. + NumAgentsIdx + } part_idx_e; + + parameter int NumAgents = int'(NumAgentsIdx); + + // Breakout types for easier access of individual items. +% for part in otp_mmap.config["partitions"]: + % if part["bkout_type"]: + typedef struct packed {<% offset = part['offset'] + part['size'] %> + % for item in part["items"][::-1]: + % if offset != item['offset'] + item['size']: + logic [${(offset - item['size'] - item['offset']) * 8 - 1}:0] unallocated;<% offset = item['offset'] + item['size'] %> + % endif +<% + if item['ismubi']: + item_type = 'prim_mubi_pkg::mubi' + str(item["size"]*8) + '_t' + else: + item_type = 'logic [' + str(int(item["size"])*8-1) + ':0]' +%>\ + ${item_type} ${item["name"].lower()};<% offset -= item['size'] %> + % endfor + } otp_${part["name"].lower()}_data_t; + + // default value used for intermodule + parameter otp_${part["name"].lower()}_data_t OTP_${part["name"].upper()}_DATA_DEFAULT = '{<% offset = part['offset'] + part['size'] %> + % for k, item in enumerate(part["items"][::-1]): + % if offset != item['offset'] + item['size']: + unallocated: ${"{}'h{:0X}".format((offset - item['size'] - item['offset']) * 8, 0)}<% offset = item['offset'] + item['size'] %>, + % endif +<% + if item['ismubi']: + item_cast_pre = "prim_mubi_pkg::mubi" + str(item["size"]*8) + "_t'(" + item_cast_post = ")" + else: + item_cast_pre = "" + item_cast_post = "" +%>\ + ${item["name"].lower()}: ${item_cast_pre}${"{}'h{:0X}".format(item["size"] * 8, item["inv_default"])}${item_cast_post}${"," if k < len(part["items"])-1 else ""}<% offset -= item['size'] %> + % endfor + }; + % endif +% endfor + typedef struct packed { + // This reuses the same encoding as the life cycle signals for indicating valid status. + lc_ctrl_pkg::lc_tx_t valid; +% for part in otp_mmap.config["partitions"][::-1]: + % if part["bkout_type"]: + otp_${part["name"].lower()}_data_t ${part["name"].lower()}_data; + % endif +% endfor + } otp_broadcast_t; + + // default value for intermodule +<% + k = 0 + num_bkout = 0 + for part in otp_mmap.config["partitions"]: + if part["bkout_type"]: + num_bkout += 1 +%>\ + parameter otp_broadcast_t OTP_BROADCAST_DEFAULT = '{ + valid: lc_ctrl_pkg::Off, +% for part in otp_mmap.config["partitions"][::-1]: + % if part["bkout_type"]: + ${part["name"].lower()}_data: OTP_${part["name"].upper()}_DATA_DEFAULT${"" if k == num_bkout-1 else ","} +<% k+=1 %>\ + % endif +% endfor + }; + +<% offset = int(otp_mmap.config["partitions"][-1]["offset"]) + int(otp_mmap.config["partitions"][-1]["size"]) %> + // OTP invalid partition default for buffered partitions. + parameter logic [${offset * 8 - 1}:0] PartInvDefault = ${offset * 8}'({ + % for k, part in enumerate(otp_mmap.config["partitions"][::-1]): + ${int(part["size"])*8}'({ + % for item in part["items"][::-1]: + % if offset != item['offset'] + item['size']: + ${"{}'h{:0X}".format((offset - item['size'] - item['offset']) * 8, 0)}, // unallocated space<% offset = item['offset'] + item['size'] %> + % endif + ${"{}'h{:0X}".format(item["size"] * 8, item["inv_default"])}${("\n })," if k < len(otp_mmap.config["partitions"])-1 else "\n })});") if loop.last else ","}<% offset -= item['size'] %> + % endfor + % endfor + + /////////////////////////////////////////////// + // Parameterized Assignment Helper Functions // + /////////////////////////////////////////////// + + function automatic otp_ctrl_core_hw2reg_t named_reg_assign( + logic [NumPart-1:0][ScrmblBlockWidth-1:0] part_digest); + otp_ctrl_core_hw2reg_t hw2reg; + logic unused_sigs; + unused_sigs = ^part_digest; + hw2reg = '0; +% for k, part in enumerate(otp_mmap.config["partitions"]): +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() +%>\ + % if part["sw_digest"] or part["hw_digest"]: + hw2reg.${part["name"].lower()}_digest = part_digest[${part_name_camel}Idx]; + % endif +% endfor + return hw2reg; + endfunction : named_reg_assign + + function automatic part_access_t [NumPart-1:0] named_part_access_pre( + otp_ctrl_core_reg2hw_t reg2hw); + part_access_t [NumPart-1:0] part_access_pre; + logic unused_sigs; + unused_sigs = ^reg2hw; + // Default (this will be overridden by partition-internal settings). + part_access_pre = {{32'(2*NumPart)}{prim_mubi_pkg::MuBi8False}}; + // Note: these could be made a MuBi CSRs in the future. + // The main thing that is missing right now is proper support for W0C. +% for k, part in enumerate(otp_mmap.config["partitions"]): + % if part["read_lock"] == "CSR": + // ${part["name"]} + if (!reg2hw.${part["name"].lower()}_read_lock) begin +<% part_name = Name.from_snake_case(part["name"]) %>\ + part_access_pre[${part_name.as_camel_case()}Idx].read_lock = prim_mubi_pkg::MuBi8True; + end + % endif +% endfor + return part_access_pre; + endfunction : named_part_access_pre + + function automatic otp_broadcast_t named_broadcast_assign( + logic [NumPart-1:0] part_init_done, + logic [$bits(PartInvDefault)/8-1:0][7:0] part_buf_data); + otp_broadcast_t otp_broadcast; + logic valid, unused; + unused = 1'b0; + valid = 1'b1; +% for part in otp_mmap.config["partitions"]: + // ${part["name"]} +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() +%>\ + % if part["bkout_type"]: + valid &= part_init_done[${part_name_camel}Idx]; + otp_broadcast.${part["name"].lower()}_data = otp_${part["name"].lower()}_data_t'(part_buf_data[${part_name_camel}Offset +: ${part_name_camel}Size]); + % else: + unused ^= ^{part_init_done[${part_name_camel}Idx], + part_buf_data[${part_name_camel}Offset +: ${part_name_camel}Size]}; + % endif +% endfor + otp_broadcast.valid = lc_ctrl_pkg::lc_tx_bool_to_lc_tx(valid); + return otp_broadcast; + endfunction : named_broadcast_assign + + function automatic otp_keymgr_key_t named_keymgr_key_assign( + logic [NumPart-1:0][ScrmblBlockWidth-1:0] part_digest, + logic [$bits(PartInvDefault)/8-1:0][7:0] part_buf_data, + lc_ctrl_pkg::lc_tx_t lc_seed_hw_rd_en); + otp_keymgr_key_t otp_keymgr_key; + logic valid, unused; + unused = 1'b0; + // For now we use a fixed struct type here so that the + // interface to the keymgr remains stable. The type contains + // a superset of all options, so we have to initialize it to '0 here. + otp_keymgr_key = '0; +% for part in otp_mmap.config["partitions"]: + // ${part["name"]} +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() +%>\ + % if part["iskeymgr_creator"] or part["iskeymgr_owner"]: + valid = (part_digest[${part_name_camel}Idx] != 0); + % for item in part["items"]: +<% + item_name = Name.from_snake_case(item["name"]) + item_name_camel = item_name.as_camel_case() +%>\ + % if item["iskeymgr_creator"] or item["iskeymgr_owner"]: + otp_keymgr_key.${item["name"].lower()}_valid = valid; + if (lc_ctrl_pkg::lc_tx_test_true_strict(lc_seed_hw_rd_en)) begin + otp_keymgr_key.${item["name"].lower()} = + part_buf_data[${item_name_camel}Offset +: ${item_name_camel}Size]; + end else begin + otp_keymgr_key.${item["name"].lower()} = + PartInvDefault[${item_name_camel}Offset*8 +: ${item_name_camel}Size*8]; + end + % else: + % if not item["isdigest"]: + unused ^= ^part_buf_data[${item_name_camel}Offset +: ${item_name_camel}Size]; + % endif + % endif + % endfor + // This is not used since we consume the + // ungated digest values from the part_digest array. + unused ^= ^part_buf_data[${part_name_camel}DigestOffset +: ${part_name_camel}DigestSize]; + % else: + unused ^= ^{part_digest[${part_name_camel}Idx], + part_buf_data[${part_name_camel}Offset +: ${part_name_camel}Size]}; + % endif +% endfor + unused ^= valid; + return otp_keymgr_key; + endfunction : named_keymgr_key_assign + +endpackage : otp_ctrl_part_pkg diff --git a/src/fuse_ctrl/data/otp_ctrl_scoreboard.sv.tpl b/src/fuse_ctrl/data/otp_ctrl_scoreboard.sv.tpl new file mode 100755 index 000000000..9e50e3fc1 --- /dev/null +++ b/src/fuse_ctrl/data/otp_ctrl_scoreboard.sv.tpl @@ -0,0 +1,1473 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +${gen_comment} +<% +from topgen.lib import Name + +read_locked_csr_parts = [part for part in otp_mmap.config["partitions"] if + part["read_lock"] == "CSR"] +write_locked_digest_parts = [part for part in otp_mmap.config["partitions"] if + part["write_lock"] == "Digest"] +buf_parts_without_lc = [part for part in otp_mmap.config["partitions"] if + part["variant"] == "Buffered"] +secret_parts = [part for part in otp_mmap.config["partitions"] if + part["secret"]] +## Partitions + LCI + DAI +num_err_code = len(otp_mmap.config["partitions"]) + 2 +%>\ +class otp_ctrl_scoreboard #(type CFG_T = otp_ctrl_env_cfg) + extends cip_base_scoreboard #( + .CFG_T(CFG_T), + .RAL_T(otp_ctrl_core_reg_block), + .COV_T(otp_ctrl_env_cov) + ); + `uvm_component_param_utils(otp_ctrl_scoreboard #(CFG_T)) + + // local variables + bit [TL_DW-1:0] otp_a [OTP_ARRAY_SIZE]; + + // lc_state and lc_cnt that stored in OTP + bit [LC_PROG_DATA_SIZE-1:0] otp_lc_data; + bit [EDN_BUS_WIDTH-1:0] edn_data_q[$]; + + // This flag is used when reset is issued during otp dai write access. + bit dai_wr_ip; + int dai_digest_ip = LifeCycleIdx; // Default to LC as it does not have digest. + bit ignore_digest_chk = 0; + + // This bit is used for DAI interface to mark if the read access is valid. + bit dai_read_valid; + + // This captures the regwen state as configured by the SW side (i.e. without HW modulation + // with the idle signal overlaid). + bit direct_access_regwen_state = 1; + + // ICEBOX(#17798): currently scb will skip checking the readout value if the ECC error is + // uncorrectable. Because if the error is uncorrectable, current scb does not track all the + // backdoor injected values. + // This issue proposes to track the otp_memory_array in mem_bkdr_if and once backdoor inject any + // value, mem_bkdr_if will update its otp_memory_array. + bit check_dai_rd_data = 1; + + // Status related variables + bit under_chk, under_dai_access; + bit [TL_DW-1:0] exp_status, status_mask; + + otp_alert_e exp_alert = OtpNoAlert; + + // TLM agent fifos + uvm_tlm_analysis_fifo #(push_pull_item#(.DeviceDataWidth(SRAM_DATA_SIZE))) + sram_fifos[NumSramKeyReqSlots]; + uvm_tlm_analysis_fifo #(push_pull_item#(.DeviceDataWidth(OTBN_DATA_SIZE))) otbn_fifo; + uvm_tlm_analysis_fifo #(push_pull_item#(.DeviceDataWidth(FLASH_DATA_SIZE))) flash_addr_fifo; + uvm_tlm_analysis_fifo #(push_pull_item#(.DeviceDataWidth(FLASH_DATA_SIZE))) flash_data_fifo; + uvm_tlm_analysis_fifo #(push_pull_item#(.DeviceDataWidth(1), .HostDataWidth(LC_PROG_DATA_SIZE))) + lc_prog_fifo; + + // local queues to hold incoming packets pending comparison + + `uvm_component_new + + function void build_phase(uvm_phase phase); + super.build_phase(phase); + for (int i = 0; i < NumSramKeyReqSlots; i++) begin + sram_fifos[i] = new($sformatf("sram_fifos[%0d]", i), this); + end + otbn_fifo = new("otbn_fifo", this); + flash_addr_fifo = new("flash_addr_fifo", this); + flash_data_fifo = new("flash_data_fifo", this); + lc_prog_fifo = new("lc_prog_fifo", this); + endfunction + + function void connect_phase(uvm_phase phase); + super.connect_phase(phase); + endfunction + + task run_phase(uvm_phase phase); + super.run_phase(phase); + fork + process_wipe_mem(); + process_otp_power_up(); + process_lc_esc(); + process_lc_prog_req(); + process_edn_req(); + check_otbn_rsp(); + check_flash_rsps(); + check_sram_rsps(); + recover_lc_prog_req(); + join_none + endtask + + // Once sequence uses backdoor method to clear memory, this task resets internal otp_a and + // resets `cfg.backdoor_clear_mem` to 0. + virtual task process_wipe_mem(); + forever begin + @(posedge cfg.backdoor_clear_mem) begin + bit [SCRAMBLE_DATA_SIZE-1:0] data; + otp_a = '{default:0}; + otp_lc_data = '{default:0}; +% for part in secret_parts: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() +%>\ + // secret partitions have been scrambled before writing to OTP. + // here calculate the pre-srambled raw data when clearing internal OTP to all 0s. + data = descramble_data(0, ${part_name_camel}Idx); + for (int i = ${part_name_camel}Offset / TL_SIZE; + i <= ${part_name_camel}DigestOffset / TL_SIZE - 1; + i++) begin + otp_a[i] = ((i - ${part_name_camel}Offset / TL_SIZE) % 2) ? + data[SCRAMBLE_DATA_SIZE-1:TL_DW] : data[TL_DW-1:0]; + end +% endfor + `uvm_info(`gfn, "clear internal memory and digest", UVM_HIGH) + cfg.backdoor_clear_mem = 0; + dai_wr_ip = 0; + dai_digest_ip = LifeCycleIdx; + end + end + endtask + + // This task process the following logic in during otp_power_up: + // 1. After reset deasserted, otp access is locked until pwr_otp_done_o is set + // 2. After reset deasserted, if power otp_init request is on, and if testbench uses backdoor to + // clear OTP memory to all zeros, clear all digests and re-calculate secret partitions + virtual task process_otp_power_up(); + forever begin + wait (cfg.en_scb); + @(posedge cfg.otp_ctrl_vif.pwr_otp_done_o || cfg.under_reset || + cfg.otp_ctrl_vif.alert_reqs) begin + if (!cfg.under_reset && !cfg.otp_ctrl_vif.alert_reqs && cfg.en_scb) begin + otp_ctrl_part_pkg::otp_hw_cfg0_data_t exp_hw_cfg0_data; + otp_ctrl_part_pkg::otp_hw_cfg1_data_t exp_hw_cfg1_data; + otp_ctrl_pkg::otp_keymgr_key_t exp_keymgr_data; + otp_ctrl_pkg::otp_lc_data_t exp_lc_data; + bit [otp_ctrl_pkg::KeyMgrKeyWidth-1:0] exp_keymgr_key0, exp_keymgr_key1; + + if (PartInfo[dai_digest_ip].sw_digest || PartInfo[dai_digest_ip].hw_digest) begin + bit [TL_DW-1:0] otp_addr = PART_OTP_DIGEST_ADDRS[dai_digest_ip]; + otp_a[otp_addr] = cfg.mem_bkdr_util_h.read32(otp_addr << 2); + otp_a[otp_addr+1] = cfg.mem_bkdr_util_h.read32((otp_addr << 2) + 4); + dai_digest_ip = LifeCycleIdx; + end + predict_digest_csrs(); + + if (cfg.otp_ctrl_vif.under_error_states() == 0) begin + // Dai access is unlocked because the power init is done + void'(ral.direct_access_regwen.predict(direct_access_regwen_state)); + + // Dai idle is set because the otp init is done + exp_status[OtpDaiIdleIdx] = 1; + end + + // Hwcfg_o gets data from OTP HW cfg partition + exp_hw_cfg0_data = cfg.otp_ctrl_vif.under_error_states() ? + otp_ctrl_part_pkg::PartInvDefault[HwCfg0Offset*8 +: HwCfg0Size*8] : + otp_hw_cfg0_data_t'({<<32 {otp_a[HwCfg0Offset/4 +: HwCfg0Size/4]}}); + `DV_CHECK_EQ(cfg.otp_ctrl_vif.otp_broadcast_o.valid, lc_ctrl_pkg::On) + `DV_CHECK_EQ(cfg.otp_ctrl_vif.otp_broadcast_o.hw_cfg0_data, exp_hw_cfg0_data) + + // Hwcfg_o gets data from OTP HW cfg partition + exp_hw_cfg1_data = cfg.otp_ctrl_vif.under_error_states() ? + otp_ctrl_part_pkg::PartInvDefault[HwCfg1Offset*8 +: HwCfg1Size*8] : + otp_hw_cfg1_data_t'({<<32 {otp_a[HwCfg1Offset/4 +: HwCfg1Size/4]}}); + `DV_CHECK_EQ(cfg.otp_ctrl_vif.otp_broadcast_o.valid, lc_ctrl_pkg::On) + `DV_CHECK_EQ(cfg.otp_ctrl_vif.otp_broadcast_o.hw_cfg1_data, exp_hw_cfg1_data) + + if (!cfg.otp_ctrl_vif.under_error_states()) begin + // ---------------------- Check lc_data_o output ----------------------------------- + // Because initialization was succesful, the valid should be set and error should be + // reset. + exp_lc_data.valid = 1; + exp_lc_data.error = 0; + + // Secrets and tokens valid signals are depend on whether secret partitions are + // locked. + exp_lc_data.secrets_valid = get_otp_digest_val(Secret2Idx) ? On : Off; + exp_lc_data.test_tokens_valid = get_otp_digest_val(Secret0Idx) ? On : Off; + exp_lc_data.rma_token_valid = get_otp_digest_val(Secret2Idx) ? On : Off; + + // LC output is depend on LC partitions value. + exp_lc_data.count = otp_lc_data[0 +: LcCountWidth]; + exp_lc_data.state = otp_lc_data[LcCountWidth +: LcStateWidth]; + + // Token values are depend on secret partitions value. + exp_lc_data.test_unlock_token = + {<<32 {otp_a[TestUnlockTokenOffset/4 +: TestUnlockTokenSize/4]}}; + exp_lc_data.test_exit_token = + {<<32 {otp_a[TestExitTokenOffset/4 +: TestExitTokenSize/4]}}; + exp_lc_data.rma_token = {<<32 {otp_a[RmaTokenOffset/4 +: RmaTokenSize/4]}}; + + // Check otp_lc_data_t struct by item is easier to debug. + `DV_CHECK_EQ(cfg.otp_ctrl_vif.lc_data_o.valid, exp_lc_data.valid) + `DV_CHECK_EQ(cfg.otp_ctrl_vif.lc_data_o.error, exp_lc_data.error) + `DV_CHECK_EQ(cfg.otp_ctrl_vif.lc_data_o.state, exp_lc_data.state) + `DV_CHECK_EQ(cfg.otp_ctrl_vif.lc_data_o.count, exp_lc_data.count) + `DV_CHECK_EQ(cfg.otp_ctrl_vif.lc_data_o.secrets_valid, exp_lc_data.secrets_valid) + `DV_CHECK_EQ(cfg.otp_ctrl_vif.lc_data_o.test_tokens_valid, + exp_lc_data.test_tokens_valid) + `DV_CHECK_EQ(cfg.otp_ctrl_vif.lc_data_o.test_unlock_token, + exp_lc_data.test_unlock_token) + `DV_CHECK_EQ(cfg.otp_ctrl_vif.lc_data_o.test_exit_token, exp_lc_data.test_exit_token) + `DV_CHECK_EQ(cfg.otp_ctrl_vif.lc_data_o.rma_token_valid, exp_lc_data.rma_token_valid) + `DV_CHECK_EQ(cfg.otp_ctrl_vif.lc_data_o.rma_token, exp_lc_data.rma_token) + + // Check otp_lc_data_t all together in case there is any missed item. + `DV_CHECK_EQ(cfg.otp_ctrl_vif.lc_data_o, exp_lc_data) + + // ---------------------- Check keymgr_key_o output --------------------------------- + // Otp_keymgr outputs creator and owner keys from secret partitions. + // Depends on lc_seed_hw_rd_en_i, it will output the real keys or a constant + exp_keymgr_data = '0; +% for part in otp_mmap.config["partitions"]: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() +%>\ + % if part["iskeymgr_creator"] or part["iskeymgr_owner"]: + % for item in part["items"]: +<% + item_name = Name.from_snake_case(item["name"]) + item_name_camel = item_name.as_camel_case() +%>\ + % if item["iskeymgr_creator"] or item["iskeymgr_owner"]: + exp_keymgr_data.${item["name"].lower()}_valid = get_otp_digest_val(${part_name_camel}Idx) != 0; + if (cfg.otp_ctrl_vif.lc_seed_hw_rd_en_i == lc_ctrl_pkg::On) begin + exp_keymgr_data.${item["name"].lower()} = + {<<32 {otp_a[${item_name_camel}Offset/4 +: ${item_name_camel}Size/4]}}; + end else begin + exp_keymgr_data.${item["name"].lower()} = + PartInvDefault[${item_name_camel}Offset*8 +: ${item_name_camel}Size*8]; + end + // Check otp_keymgr_key_t struct by item is easier to debug. + `DV_CHECK_EQ(cfg.otp_ctrl_vif.keymgr_key_o.${item["name"].lower()}_valid, + exp_keymgr_data.${item["name"].lower()}_valid) + % endif + % endfor + % endif +% endfor + + // Check otp_keymgr_key_t struct all together in case there is any missed item. + `DV_CHECK_EQ(cfg.otp_ctrl_vif.keymgr_key_o, exp_keymgr_data) + + if (cfg.en_cov) begin + cov.keymgr_o_cg.sample(cfg.otp_ctrl_vif.lc_seed_hw_rd_en_i == lc_ctrl_pkg::On, + exp_keymgr_data.creator_root_key_share0_valid); + end + end + end else if (cfg.otp_ctrl_vif.alert_reqs) begin + // Ignore digest CSR check when otp_ctrl initialization is interrupted by fatal errors. + // SCB cannot predict how many partitions already finished initialization and updated + // the digest value to CSRs. + ignore_digest_chk = 1; + end + if (cfg.en_cov) begin + bit [NumPart-2:0] parts_locked; + foreach (parts_locked[i]) parts_locked[i] = (get_otp_digest_val(i) != 0); + cov.power_on_cg.sample(cfg.otp_ctrl_vif.lc_esc_on, parts_locked); + end + end + end + endtask + + // This task monitors internal escalation triggered by two methods: + // 1. Externally lc_escalation_en is set to lc_ctrl_pkg::On. + // 2. Internal fatal alert triggered and all partitions are driven to error states. + virtual task process_lc_esc(); + forever begin + wait(cfg.otp_ctrl_vif.alert_reqs == 1 && cfg.en_scb); + + if (cfg.otp_ctrl_vif.lc_esc_on == 0) `DV_CHECK_NE(exp_alert, OtpNoAlert) + + if (exp_alert != OtpCheckAlert) set_exp_alert("fatal_check_error", 1, 5); + + // If the lc_escalation is triggered by internal fatal alert, wait 2 negedge until status is + // updated internally + if (cfg.otp_ctrl_vif.lc_esc_on == 0) begin + cfg.clk_rst_vif.wait_n_clks(2); + exp_status[OtpCheckPendingIdx] = 0; + exp_status[OtpDaiIdleIdx] = 0; + end else begin + exp_status = '0; + // Only lc_esc_on will set these bits to 1. + exp_status[OtpDerivKeyFsmErrIdx:OtpLfsrFsmErrIdx] = '1; + end + + // Update status bits. + foreach (FATAL_EXP_STATUS[i]) begin + if (FATAL_EXP_STATUS[i]) begin + predict_err(.status_err_idx(otp_status_e'(i)), .err_code(OtpFsmStateError), + .update_esc_err(1)); + end + end + + // Update digest values and direct_access_regwen. + predict_rdata(1, 0, 0); + void'(ral.direct_access_regwen.predict(.value(0), .kind(UVM_PREDICT_READ))); + + // DAI access is locked until reset, so no need to backdoor read otp write value until reset. + + wait(cfg.otp_ctrl_vif.alert_reqs == 0); + end + endtask + + // This task monitors if lc_program req is interrupted by reset. + // If it happens, scb cannot predict how many bits have been written to OTP_CTRL. + // So here we will backdoor read back OTP lc partitions bits. + virtual task recover_lc_prog_req(); + forever begin + wait(cfg.otp_ctrl_vif.lc_prog_req == 1); + wait(cfg.otp_ctrl_vif.lc_prog_req == 0); + // Wait one 1ps to avoid race condition. + #1ps; + if (cfg.otp_ctrl_vif.rst_ni == 0) begin + for (int i = 0; i < LC_PROG_DATA_SIZE/32; i++) begin + otp_lc_data[i*32+:32] = cfg.mem_bkdr_util_h.read32(LifeCycleOffset + i * 4); + end + end + end + endtask + + virtual task process_lc_prog_req(); + forever begin + push_pull_item#(.DeviceDataWidth(1), .HostDataWidth(LC_PROG_DATA_SIZE)) rcv_item; + bit exp_err_bit; + bit [15:0] rcv_words [LC_PROG_DATA_SIZE/16]; + + lc_prog_fifo.get(rcv_item); + + // LCI is updated by OTP word. + rcv_words = {<< 16{rcv_item.h_data}}; + foreach (rcv_words[i]) begin + bit [15:0] curr_word = otp_lc_data[i*16 +: 16]; + if ((curr_word & rcv_words[i]) == curr_word) otp_lc_data[i*16 +: 16] = rcv_words[i]; + else exp_err_bit = 1; + end + + if (exp_err_bit) predict_err(OtpLciErrIdx, OtpMacroWriteBlankError); + else predict_no_err(OtpLciErrIdx); + + // LC program request data is valid means no OTP macro error. + `DV_CHECK_EQ(rcv_item.d_data, exp_err_bit) + + if (cfg.en_cov) cov.lc_prog_cg.sample(exp_err_bit); + end + endtask + + virtual task process_edn_req(); + forever begin + push_pull_item#(.DeviceDataWidth(EDN_DATA_WIDTH)) edn_item; + edn_fifos[0].get(edn_item); + edn_data_q.push_back(edn_item.d_data[EDN_BUS_WIDTH-1:0]); + end + endtask + + virtual task check_otbn_rsp(); + forever begin + push_pull_item#(.DeviceDataWidth(OTBN_DATA_SIZE)) rcv_item; + bit [SCRAMBLE_KEY_SIZE-1:0] edn_key2, edn_key1; + bit [SCRAMBLE_KEY_SIZE-1:0] sram_key; + bit [SCRAMBLE_DATA_SIZE-1:0] exp_key_lower, exp_key_higher; + bit [OtbnKeyWidth-1:0] key, exp_key; + bit [OtbnNonceWidth-1:0] nonce, exp_nonce; + bit seed_valid; + bit part_locked; + + otbn_fifo.get(rcv_item); + seed_valid = rcv_item.d_data[0]; + nonce = rcv_item.d_data[1+:OtbnNonceWidth]; + key = rcv_item.d_data[OtbnNonceWidth+1+:OtbnKeyWidth]; + part_locked = {`gmv(ral.secret1_digest[0]), `gmv(ral.secret1_digest[1])} != '0; + + // seed is valid as long as secret1 is locked + `DV_CHECK_EQ(seed_valid, part_locked, "otbn seed_valid mismatch") + + // If edn_data_q matches the OTBN requested size, check OTBN outputs + if (edn_data_q.size() == NUM_OTBN_EDN_REQ) begin + {exp_nonce, edn_key2, edn_key1} = {<<32{edn_data_q}}; + + // check nonce value + `DV_CHECK_EQ(nonce, exp_nonce, "otbn nonce mismatch") + + // calculate key + sram_key = get_key_from_otp(part_locked, SramDataKeySeedOffset / 4); + exp_key_lower = present_encode_with_final_const( + .data(RndCnstDigestIV[SramDataKey]), + .key(sram_key), + .final_const(RndCnstDigestConst[SramDataKey]), + .second_key(edn_key1), + .num_round(2)); + + exp_key_higher = present_encode_with_final_const( + .data(RndCnstDigestIV[SramDataKey]), + .key(sram_key), + .final_const(RndCnstDigestConst[SramDataKey]), + .second_key(edn_key2), + .num_round(2)); + exp_key = {exp_key_higher, exp_key_lower}; + `DV_CHECK_EQ(key, exp_key, "otbn key mismatch") + + if (cfg.en_cov) cov.otbn_req_cg.sample(part_locked); + + // If during OTBN key request, the LFSR timer expired and trigger an EDN request to acquire + // two EDN keys, then ignore the OTBN output checking, because scb did not know which EDN + // keys are used for LFSR. + // Thus any edn_data_q size equal to (16+2*N) is exempted from checking. + end else if ((edn_data_q.size() - NUM_OTBN_EDN_REQ) % 2 != 0) begin + `uvm_error(`gfn, $sformatf("Unexpected edn_data_q size (%0d) during OTBN request", + edn_data_q.size())) + end + edn_data_q.delete(); + end + endtask + + virtual task check_flash_rsps(); + for (int i = FlashDataKey; i <= FlashAddrKey; i++) begin + automatic digest_sel_e sel_flash = digest_sel_e'(i); + fork + forever begin + push_pull_item#(.DeviceDataWidth(FLASH_DATA_SIZE)) rcv_item; + bit [SCRAMBLE_KEY_SIZE-1:0] flash_key; + bit [SCRAMBLE_DATA_SIZE-1:0] exp_key_lower, exp_key_higher; + bit [FlashKeyWidth-1:0] key, exp_key; + bit seed_valid, part_locked; + int flash_key_index; + + if (sel_flash == FlashAddrKey) begin + flash_addr_fifo.get(rcv_item); + flash_key_index = FlashAddrKeySeedOffset / 4; + end else begin + flash_data_fifo.get(rcv_item); + flash_key_index = FlashDataKeySeedOffset / 4; + end + seed_valid = rcv_item.d_data[0]; + key = rcv_item.d_data[1+:FlashKeyWidth]; + part_locked = {`gmv(ral.secret1_digest[0]), `gmv(ral.secret1_digest[1])} != '0; + `DV_CHECK_EQ(seed_valid, part_locked, + $sformatf("flash %0s seed_valid mismatch", sel_flash.name())) + + // calculate key + flash_key = get_key_from_otp(part_locked, flash_key_index); + exp_key_lower = present_encode_with_final_const( + .data(RndCnstDigestIV[sel_flash]), + .key(flash_key), + .final_const(RndCnstDigestConst[sel_flash])); + + flash_key = get_key_from_otp(part_locked, flash_key_index + 4); + exp_key_higher = present_encode_with_final_const( + .data(RndCnstDigestIV[sel_flash]), + .key(flash_key), + .final_const(RndCnstDigestConst[sel_flash])); + exp_key = {exp_key_higher, exp_key_lower}; + `DV_CHECK_EQ(key, exp_key, $sformatf("flash %s key mismatch", sel_flash.name())) + + if (cfg.en_cov) cov.flash_req_cg.sample(sel_flash, part_locked); + end + join_none; + end + endtask + + virtual task check_sram_rsps(); + for (int i = 0; i < NumSramKeyReqSlots; i++) begin + automatic int index = i; + fork + forever begin + push_pull_item#(.DeviceDataWidth(SRAM_DATA_SIZE)) rcv_item; + sram_key_t key, exp_key; + sram_nonce_t nonce, exp_nonce; + bit seed_valid, part_locked; + bit [SCRAMBLE_KEY_SIZE-1:0] edn_key2, edn_key1; + bit [SCRAMBLE_KEY_SIZE-1:0] sram_key; // key used as input to present algo + bit [SCRAMBLE_DATA_SIZE-1:0] exp_key_lower, exp_key_higher; + + sram_fifos[index].get(rcv_item); + seed_valid = rcv_item.d_data[0]; + nonce = rcv_item.d_data[1+:SramNonceWidth]; + key = rcv_item.d_data[SramNonceWidth+1+:SramKeyWidth]; + part_locked = {`gmv(ral.secret1_digest[0]), `gmv(ral.secret1_digest[1])} != '0; + + // seed is valid as long as secret1 is locked + `DV_CHECK_EQ(seed_valid, part_locked, $sformatf("sram_%0d seed_valid mismatch", index)) + + // If edn_data_q matches the OTBN requested size, check OTBN outputs + if (edn_data_q.size() == NUM_SRAM_EDN_REQ) begin + {exp_nonce, edn_key2, edn_key1} = {<<32{edn_data_q}}; + + // check nonce value + `DV_CHECK_EQ(nonce, exp_nonce, $sformatf("sram_%0d nonce mismatch", index)) + + // calculate key + sram_key = get_key_from_otp(part_locked, SramDataKeySeedOffset / 4); + exp_key_lower = present_encode_with_final_const( + .data(RndCnstDigestIV[SramDataKey]), + .key(sram_key), + .final_const(RndCnstDigestConst[SramDataKey]), + .second_key(edn_key1), + .num_round(2)); + + exp_key_higher = present_encode_with_final_const( + .data(RndCnstDigestIV[SramDataKey]), + .key(sram_key), + .final_const(RndCnstDigestConst[SramDataKey]), + .second_key(edn_key2), + .num_round(2)); + exp_key = {exp_key_higher, exp_key_lower}; + `DV_CHECK_EQ(key, exp_key, $sformatf("sram_%0d key mismatch", index)) + if (cfg.en_cov) cov.sram_req_cg.sample(index, part_locked); + + end else if ((edn_data_q.size() - NUM_SRAM_EDN_REQ) % 2 != 0) begin + `uvm_error(`gfn, $sformatf("Unexpected edn_data_q size (%0d) during SRAM request", + edn_data_q.size())) + end + edn_data_q.delete(); + end + join_none + end + endtask + + virtual task process_tl_access(tl_seq_item item, tl_channels_e channel, string ral_name); + bit write = item.is_write(); + uvm_reg_addr_t csr_addr = cfg.ral_models[ral_name].get_word_aligned_addr(item.a_addr); + bit [TL_AW-1:0] addr_mask = ral.get_addr_mask(); + + bit addr_phase_read = (!write && channel == AddrChannel); + bit addr_phase_write = (write && channel == AddrChannel); + bit data_phase_read = (!write && channel == DataChannel); + bit data_phase_write = (write && channel == DataChannel); + + if (ral_name != "otp_ctrl_prim_reg_block") begin + process_core_tl_access(item, csr_addr, ral_name, addr_mask, + addr_phase_read, addr_phase_write, data_phase_read, data_phase_write); + end else begin + process_prim_tl_access(item, csr_addr, ral_name, addr_phase_write, data_phase_read); + end + endtask + + virtual function void process_prim_tl_access(tl_seq_item item, uvm_reg_addr_t csr_addr, + string ral_name, bit addr_phase_write, bit data_phase_read); + + uvm_reg csr; + dv_base_reg dv_reg; + csr = cfg.ral_models[ral_name].default_map.get_reg_by_offset(csr_addr); + `DV_CHECK_NE_FATAL(csr, null) + `downcast(dv_reg, csr) + + if (addr_phase_write) begin + void'(csr.predict(.value(item.a_data), .kind(UVM_PREDICT_WRITE), .be(item.a_mask))); + end else if (data_phase_read) begin + `DV_CHECK_EQ((csr.get_mirrored_value() | status_mask), (item.d_data | status_mask), + $sformatf("reg name: status, compare_mask %0h", status_mask)) + end + endfunction + + virtual function void process_core_tl_access(tl_seq_item item, uvm_reg_addr_t csr_addr, + string ral_name, bit [TL_AW-1:0] addr_mask, bit addr_phase_read, bit addr_phase_write, + bit data_phase_read, bit data_phase_write); + + bit do_read_check = 1; + uvm_reg csr; + dv_base_reg dv_reg; + string csr_name; + + `uvm_info(`gfn, $sformatf("sw state %d, reg state %d", direct_access_regwen_state, + `gmv(ral.direct_access_regwen)), UVM_LOW); + + // if access was to a valid csr, get the csr handle + if (csr_addr inside {cfg.ral_models[ral_name].csr_addrs}) begin + csr = cfg.ral_models[ral_name].default_map.get_reg_by_offset(csr_addr); + `DV_CHECK_NE_FATAL(csr, null) + `downcast(dv_reg, csr) + // SW CFG window + end else if ((csr_addr & addr_mask) inside + {[SW_WINDOW_BASE_ADDR : SW_WINDOW_BASE_ADDR + SW_WINDOW_SIZE]}) begin + if (data_phase_read) begin + bit [TL_AW-1:0] dai_addr = (csr_addr & addr_mask - SW_WINDOW_BASE_ADDR); + bit [TL_AW-1:0] otp_addr = dai_addr >> 2; + int part_idx = get_part_index(dai_addr); + bit [TL_DW-1:0] read_out; + int ecc_err = OtpNoEccErr; + + // We can't get an ECC error if the partition does not have integrity. + if (part_has_integrity(part_idx)) begin + ecc_err = read_a_word_with_ecc(dai_addr, read_out); + end else begin + ecc_err = read_a_word_with_ecc_raw(dai_addr, read_out); + end + + if (part_has_digest(part_idx) && cfg.en_cov) begin + cov.unbuf_access_lock_cg_wrap[part_idx].sample(.read_lock(0), + .write_lock(get_digest_reg_val(part_idx) != 0), .is_write(0)); + end + + // Any alert that indicates the OTP block is in the final error state should not enter the + // logic here, but gated at `is_tl_mem_access_allowed` function. + `DV_CHECK_EQ(cfg.otp_ctrl_vif.alert_reqs, 0) + + // ECC uncorrectable errors are gated by `is_tl_mem_access_allowed` function. + if (ecc_err != OtpNoEccErr && part_has_integrity(part_idx)) begin + + predict_err(otp_status_e'(part_idx), OtpMacroEccCorrError); + if (ecc_err == OtpEccCorrErr) begin + `DV_CHECK_EQ(item.d_data, otp_a[otp_addr], + $sformatf("mem read mismatch at TLUL addr %0h, csr_addr %0h", + csr_addr, dai_addr)) + end else begin + // Only check the first 16 bits because if ECC readout detects uncorrectable error, it + // won't continue read the remaining 16 bits. + `DV_CHECK_EQ(item.d_data & 16'hffff, read_out & 16'hffff, + $sformatf("mem read mismatch at TLUL addr %0h, csr_addr %0h", + csr_addr, dai_addr)) + end + // If there is an injected error, but the partition cannot detect it, we have to compare + // to the value read via the backdoor instead of otp_a[otp_addr] since otherwise the + // perturbed value does not get modelled correctly. + end else if (ecc_err != OtpNoEccErr && !part_has_integrity(part_idx)) begin + `DV_CHECK_EQ(item.d_data, read_out, + $sformatf("mem read mismatch at TLUL addr %0h, csr_addr %0h", + csr_addr, dai_addr)) + predict_no_err(otp_status_e'(part_idx)); + end else if (ecc_err == OtpNoEccErr) begin + `DV_CHECK_EQ(item.d_data, otp_a[otp_addr], + $sformatf("mem read mismatch at TLUL addr %0h, csr_addr %0h", + csr_addr, dai_addr)) + predict_no_err(otp_status_e'(part_idx)); + end + end + return; + end else begin + `uvm_fatal(`gfn, $sformatf("Access unexpected addr 0x%0h", csr_addr)) + end + + csr_name = csr.get_name(); + + if (addr_phase_write) begin + if (cfg.en_cov && cfg.otp_ctrl_vif.alert_reqs && csr_name == "direct_access_cmd") begin + cov.req_dai_access_after_alert_cg.sample(item.a_data); + end + + // Skip predict if the register is locked by `direct_access_regwen`. + // An exception is the direct_access_regwen which may always be written. + if (ral.direct_access_regwen.locks_reg_or_fld(dv_reg) && + `gmv(ral.direct_access_regwen) == 0 && + csr_name != "direct_access_regwen") return; + + void'(csr.predict(.value(item.a_data), .kind(UVM_PREDICT_WRITE), .be(item.a_mask))); + end + + // process the csr req + // for write, update local variable and fifo at address phase + // for read, update predication at address phase and compare at data phase + case (csr_name) + // add individual case item for each csr + "intr_state": begin + if (data_phase_read) begin + // Disable intr_state checking when lc_program is in progress, because scb cannot + // accurately predict when program_error will be triggered. + // We will check the intr_state after lc_program request is done, and the error bit will + // be checked in the `process_lc_prog_req` task. + if (cfg.otp_ctrl_vif.lc_prog_no_sta_check) do_read_check = 0; + if (do_read_check) begin + bit [TL_DW-1:0] intr_en = `gmv(ral.intr_enable); + bit [NumOtpCtrlIntr-1:0] intr_exp = `gmv(ral.intr_state); + + foreach (intr_exp[i]) begin + otp_intr_e intr = otp_intr_e'(i); + `DV_CHECK_CASE_EQ(cfg.intr_vif.pins[i], (intr_en[i] & intr_exp[i]), + $sformatf("Interrupt_pin: %0s", intr.name)); + if (cfg.en_cov) begin + cov.intr_cg.sample(i, intr_en[i], item.d_data[i]); + cov.intr_pins_cg.sample(i, cfg.intr_vif.pins[i]); + end + end + end + end + end + "intr_test": begin + if (addr_phase_write) begin + bit [TL_DW-1:0] intr_en = `gmv(ral.intr_enable); + bit [NumOtpCtrlIntr-1:0] intr_exp = `gmv(ral.intr_state) | item.a_data; + + void'(ral.intr_state.predict(.value(intr_exp))); + if (cfg.en_cov) begin + foreach (intr_exp[i]) begin + cov.intr_test_cg.sample(i, item.a_data[i], intr_en[i], intr_exp[i]); + end + end + end + end + "direct_access_cmd": begin + if (addr_phase_write && !cfg.otp_ctrl_vif.under_error_states()) begin + // here only normalize to 2 lsb, if is secret, will be reduced further + bit [TL_AW-1:0] dai_addr = normalize_dai_addr(`gmv(ral.direct_access_address)); + int part_idx = get_part_index(dai_addr); + bit sw_read_lock = 0; + void'(ral.direct_access_regwen.predict(0)); + under_dai_access = 1; + + // Check if it is sw partition read lock - this can be used in `DaiRead` branch and also + // coverage collection. +% for part in read_locked_csr_parts: +<% part_name = Name.from_snake_case(part["name"]) %>\ + % if loop.first: + if (part_idx == ${part_name.as_camel_case()}Idx) begin + % else: + end else if (part_idx == ${part_name.as_camel_case()}Idx) begin + % endif + sw_read_lock = `gmv(ral.${part_name.as_snake_case()}_read_lock) == 0; + % if loop.last: + end + %endif +% endfor + + // LC partition cannot be access via DAI + if (part_idx == LifeCycleIdx) begin + predict_err(OtpDaiErrIdx, OtpAccessError); + if (item.a_data == DaiRead) predict_rdata(is_secret(dai_addr), 0, 0); + end else begin + // Collect coverage. + if (cfg.en_cov) begin + if (part_idx == Secret2Idx) begin + cov.dai_access_secret2_cg.sample( + !(cfg.otp_ctrl_vif.lc_creator_seed_sw_rw_en_i != lc_ctrl_pkg::On), + dai_cmd_e'(item.a_data)); + end else if (is_sw_part_idx(part_idx) && part_has_digest(part_idx) && + item.a_data inside {DaiRead, DaiWrite}) begin + cov.unbuf_access_lock_cg_wrap[part_idx].sample(.read_lock(sw_read_lock), + .write_lock(get_digest_reg_val(part_idx) != 0), + .is_write(item.a_data == DaiWrite)); + + end + end + + case (item.a_data) + DaiDigest: cal_digest_val(part_idx); + DaiRead: begin + // Check if it is sw partition read lock + check_dai_rd_data = 1; + + // SW partitions write read_lock_csr can lock read access. + if (sw_read_lock || + // Secret partitions cal digest can also lock read access. + // However, digest is always readable except SW partitions (Issue #5752). + (is_secret(dai_addr) && get_digest_reg_val(part_idx) != 0 && + !is_digest(dai_addr)) || + // If the partition has creator key material and lc_creator_seed_sw_rw is + // disable, then return access error. + (PartInfo[part_idx].iskeymgr_creator && !is_digest(dai_addr) && + cfg.otp_ctrl_vif.lc_creator_seed_sw_rw_en_i != lc_ctrl_pkg::On)) begin + predict_err(OtpDaiErrIdx, OtpAccessError); + predict_rdata(is_secret(dai_addr) || is_digest(dai_addr), 0, 0); + end else if (sw_read_lock || + // Secret partitions cal digest can also lock read access. + // However, digest is always readable except SW partitions (Issue #5752). + (is_secret(dai_addr) && get_digest_reg_val(part_idx) != 0 && + !is_digest(dai_addr)) || + // If the partition has owner key material and lc_owner_seed_sw_rw is disable, + // then return access error. + (PartInfo[part_idx].iskeymgr_owner && !is_digest(dai_addr) && + cfg.otp_ctrl_vif.lc_owner_seed_sw_rw_en_i != lc_ctrl_pkg::On)) begin + predict_err(OtpDaiErrIdx, OtpAccessError); + predict_rdata(is_secret(dai_addr) || is_digest(dai_addr), 0, 0); + + end else begin + bit [TL_DW-1:0] read_out0, read_out1; + bit [TL_AW-1:0] otp_addr = get_scb_otp_addr(); + int ecc_err = 0; + + // Backdoor read to check if there is any ECC error. + if (part_has_integrity(part_idx)) begin + ecc_err = read_a_word_with_ecc(dai_addr, read_out0); + if (is_secret(dai_addr) || is_digest(dai_addr)) begin + ecc_err = max2(read_a_word_with_ecc(dai_addr + 4, read_out1), ecc_err); + end + end else begin + ecc_err = read_a_word_with_ecc_raw(dai_addr, read_out0); + if (is_secret(dai_addr) || is_digest(dai_addr)) begin + ecc_err = max2(read_a_word_with_ecc_raw(dai_addr + 4, read_out1), ecc_err); + end + end + + if (ecc_err == OtpEccCorrErr && part_has_integrity(part_idx)) begin + predict_err(OtpDaiErrIdx, OtpMacroEccCorrError); + backdoor_update_otp_array(dai_addr); + predict_rdata(is_secret(dai_addr) || is_digest(dai_addr), + otp_a[otp_addr], otp_a[otp_addr+1]); + end else if (ecc_err == OtpEccUncorrErr && part_has_integrity(part_idx)) begin + predict_err(OtpDaiErrIdx, OtpMacroEccUncorrError); + // Max wait 20 clock cycles because scb did not know when exactly OTP will + // finish reading and reporting the uncorrectable error. + set_exp_alert("fatal_macro_error", 1, 20); + predict_rdata(1, 0, 0); + // Some partitions do not interpret/report ECC errors. In those cases + // we still need to model the read data correctly if it has been perturbed. + end else if (ecc_err inside {OtpEccCorrErr, OtpEccUncorrErr} && + !part_has_integrity(part_idx)) begin + predict_no_err(OtpDaiErrIdx); + predict_rdata(is_secret(dai_addr) || is_digest(dai_addr), + read_out0, read_out1); + end else begin + predict_no_err(OtpDaiErrIdx); + predict_rdata(is_secret(dai_addr) || is_digest(dai_addr), + otp_a[otp_addr], otp_a[otp_addr+1]); + end + end + end + DaiWrite: begin + bit[TL_AW-1:0] otp_addr = get_scb_otp_addr(); + bit is_write_locked; + // check if write locked + if (part_has_digest(part_idx)) begin + is_write_locked = get_digest_reg_val(part_idx) != 0; + end else begin + is_write_locked = 0; + end + + if (is_write_locked || (PartInfo[part_idx].iskeymgr_creator && + !is_digest(dai_addr) && + cfg.otp_ctrl_vif.lc_creator_seed_sw_rw_en_i != lc_ctrl_pkg::On)) begin + predict_err(OtpDaiErrIdx, OtpAccessError); + end else if (is_write_locked || (PartInfo[part_idx].iskeymgr_owner && + !is_digest(dai_addr) && + cfg.otp_ctrl_vif.lc_owner_seed_sw_rw_en_i != lc_ctrl_pkg::On)) begin + predict_err(OtpDaiErrIdx, OtpAccessError); + end else begin + predict_no_err(OtpDaiErrIdx); + // write digest + if (is_sw_digest(dai_addr)) begin + bit [TL_DW*2-1:0] curr_digest, prev_digest; + curr_digest = {`gmv(ral.direct_access_wdata[1]), + `gmv(ral.direct_access_wdata[0])}; + prev_digest = {otp_a[otp_addr+1], otp_a[otp_addr]}; + dai_wr_ip = 1; + // allow bit write + if ((prev_digest & curr_digest) == prev_digest) begin + update_digest_to_otp(part_idx, curr_digest); + end else begin + predict_err(OtpDaiErrIdx, OtpMacroWriteBlankError); + end + end else if (is_digest(dai_addr)) begin + predict_err(OtpDaiErrIdx, OtpAccessError); + // write OTP memory + end else begin + dai_wr_ip = 1; + if (!is_secret(dai_addr)) begin + bit [TL_DW-1:0] wr_data = `gmv(ral.direct_access_wdata[0]); + // allow bit write + if ((otp_a[otp_addr] & wr_data) == otp_a[otp_addr]) begin + otp_a[otp_addr] = wr_data; + check_otp_idle(.val(0), .wait_clks(3)); + end else begin + predict_err(OtpDaiErrIdx, OtpMacroWriteBlankError); + end + end else begin + bit [SCRAMBLE_DATA_SIZE-1:0] secret_data = {otp_a[otp_addr + 1], + otp_a[otp_addr]}; + bit [SCRAMBLE_DATA_SIZE-1:0] wr_data = {`gmv(ral.direct_access_wdata[1]), + `gmv(ral.direct_access_wdata[0])}; + wr_data = scramble_data(wr_data, part_idx); + secret_data = scramble_data(secret_data, part_idx); + if ((secret_data & wr_data) == secret_data) begin + otp_a[otp_addr] = `gmv(ral.direct_access_wdata[0]); + otp_a[otp_addr + 1] = `gmv(ral.direct_access_wdata[1]); + // wait until secret scrambling is done + check_otp_idle(.val(0), .wait_clks(34)); + end else begin + predict_err(OtpDaiErrIdx, OtpMacroWriteBlankError); + end + end + end + end + end + default: begin + `uvm_fatal(`gfn, $sformatf("invalid cmd: %0d", item.a_data)) + end + endcase + // regwen is set to 0 only if the dai operation is successfully + if (`gmv(ral.intr_state.otp_error) == 0) void'(ral.direct_access_regwen.predict(0)); + end + end + end + "status": begin + if (addr_phase_read) begin + void'(ral.status.predict(.value(exp_status), .kind(UVM_PREDICT_READ))); + + // update status mask + status_mask = 0; + // Mask out check_pending field - we do not know how long it takes to process checks. + // Check failure can trigger all kinds of errors. + if (under_chk) status_mask = '1; + + // Mask out otp_dai access related field - we do not know how long it takes to finish + // DAI access. + if (under_dai_access) begin + status_mask[OtpDaiIdleIdx] = 1; + status_mask[OtpDaiErrIdx] = 1; + end + + // Mask out LCI error bit if lc_req is set. + if (cfg.otp_ctrl_vif.lc_prog_no_sta_check) status_mask[OtpLciErrIdx] = 1; + + end else if (data_phase_read) begin + if (cfg.en_cov) begin + cov.collect_status_cov(item.d_data); + if (cfg.otp_ctrl_vif.alert_reqs) begin + cov.csr_rd_after_alert_cg_wrap.sample(csr.get_offset()); + end + end + + if (item.d_data[OtpDaiIdleIdx]) begin + check_otp_idle(1); + dai_wr_ip = 0; + dai_digest_ip = LifeCycleIdx; + end + + // STATUS register check with mask + if (do_read_check) begin + `DV_CHECK_EQ((csr.get_mirrored_value() | status_mask), (item.d_data | status_mask), + $sformatf("reg name: status, compare_mask %0h", status_mask)) + end + + // Check if OtpCheckPending is set correctly, then ignore checking until check is done + if (under_chk) begin + if (item.d_data[OtpCheckPendingIdx] == 0) begin + exp_status[OtpCheckPendingIdx] = 0; + under_chk = 0; + end + end + + if (under_dai_access && !cfg.otp_ctrl_vif.under_error_states()) begin + if (item.d_data[OtpDaiIdleIdx]) begin + under_dai_access = 0; + void'(ral.direct_access_regwen.predict(direct_access_regwen_state)); + void'(ral.intr_state.otp_operation_done.predict(1)); + end + end + end + // checked in this block above + do_read_check = 0; + end + "check_trigger": begin + if (addr_phase_write && cfg.en_cov && cfg.otp_ctrl_vif.alert_reqs) begin + cov.issue_checks_after_alert_cg.sample(item.a_data); + end + + if (addr_phase_write && `gmv(ral.check_trigger_regwen) && item.a_data inside {[1:3]}) begin + bit [TL_DW-1:0] check_timeout = `gmv(ral.check_timeout) == 0 ? '1 : + `gmv(ral.check_timeout); + exp_status[OtpCheckPendingIdx] = 1; + under_chk = 1; + if (check_timeout <= CHK_TIMEOUT_CYC) begin + set_exp_alert("fatal_check_error", 1, `gmv(ral.check_timeout)); + predict_err(OtpTimeoutErrIdx); + end else begin + if (get_field_val(ral.check_trigger.consistency, item.a_data)) begin + foreach (cfg.ecc_chk_err[i]) begin + if (cfg.ecc_chk_err[i] == OtpEccCorrErr && part_has_integrity(i)) begin + predict_err(otp_status_e'(i), OtpMacroEccCorrError); + end else if (cfg.ecc_chk_err[i] == OtpEccUncorrErr && + part_has_integrity(i)) begin + set_exp_alert("fatal_macro_error", 1, 40_000); + predict_err(otp_status_e'(i), OtpMacroEccUncorrError); + end + end + end + end + end + end + "direct_access_regwen": begin + if (addr_phase_write) begin + // This locks the DAI until the next reset. + if (!item.a_data[0]) begin + direct_access_regwen_state = 0; + void'(ral.direct_access_regwen.predict(0)); + end + end + end + // For error codes, if lc_prog in progress, err_code might update anytime in DUT. Ignore + // checking until req is acknowledged. + +% for k in range(num_err_code): +<% + # This code should depend on whether the error code is compact. This + # assumes it is not compact. +%>\ + "err_code_${k}": begin + if (cfg.m_lc_prog_pull_agent_cfg.vif.req) do_read_check = 0; + if (cfg.en_cov && do_read_check && data_phase_read) begin + bit [TL_DW-1:0] dai_addr = `gmv(ral.direct_access_address) >> 2 << 2; + int access_part_idx = get_part_index(dai_addr); + cov.collect_err_code_cov(${k}, item.d_data, access_part_idx); + end + end +% endfor +% for part in write_locked_digest_parts: +<% part_name_snake = Name.from_snake_case(part["name"]).as_snake_case() %>\ + "${part_name_snake}_digest_0", "${part_name_snake}_digest_1"${": begin" if loop.last else ","} +% endfor + if (ignore_digest_chk) do_read_check = 0; + end +% for part in read_locked_csr_parts: +<% part_name_snake = Name.from_snake_case(part["name"]).as_snake_case() %>\ + "${part_name_snake}_read_lock", +% endfor + "direct_access_wdata_0", + "direct_access_wdata_1", + "direct_access_address", + "check_regwen", + "check_trigger_regwen", + "check_trigger", + "check_timeout", + "intr_enable", + "integrity_check_period", + "consistency_check_period", + "alert_test": begin + // Do nothing + end + // DAI read data + "direct_access_rdata_0", "direct_access_rdata_1": do_read_check = check_dai_rd_data; + default: begin + `uvm_fatal(`gfn, $sformatf("invalid csr: %0s", csr.get_full_name())) + end + endcase + + // On reads, if do_read_check, is set, then check mirrored_value against item.d_data + if (data_phase_read) begin + if (do_read_check) begin + `DV_CHECK_EQ(csr.get_mirrored_value(), item.d_data, + $sformatf("reg name: %0s", csr.get_full_name())) + if (cfg.en_cov && cfg.otp_ctrl_vif.alert_reqs) begin + cov.csr_rd_after_alert_cg_wrap.sample(csr.get_offset()); + end + end + void'(csr.predict(.value(item.d_data), .kind(UVM_PREDICT_READ))); + end + endfunction + + // If reset or lc_escalate_en is issued during otp program, this function will backdoor update + // otp memory write value because scb did not know how many cells haven been written. + // We won't update csr `direct_access_address` after fatal alert happened, so in this function + // we can directly call method `get_scb_otp_addr` to get the interrupted dai address. + virtual function void recover_interrupted_op(); + if (dai_wr_ip) begin + bit [TL_DW-1:0] otp_addr = get_scb_otp_addr(); + bit [TL_DW-1:0] dai_addr = otp_addr << 2; + backdoor_update_otp_array(dai_addr); + dai_wr_ip = 0; + end + endfunction + + virtual function void backdoor_update_otp_array(bit [TL_DW-1:0] dai_addr); + bit [TL_DW-1:0] otp_addr = dai_addr >> 2; + bit [TL_DW-1:0] readout_word, readout_word1; + int part_idx = get_part_index(dai_addr); + if (part_has_integrity(part_idx)) begin + void'(read_a_word_with_ecc(dai_addr, readout_word)); + void'(read_a_word_with_ecc(dai_addr + 4, readout_word1)); + end else begin + void'(read_a_word_with_ecc_raw(dai_addr, readout_word)); + void'(read_a_word_with_ecc_raw(dai_addr + 4, readout_word1)); + end + + otp_a[otp_addr] = readout_word; + + if (is_digest(dai_addr)) begin + otp_a[otp_addr+1] = readout_word1; + end else if (is_secret(dai_addr)) begin + bit [TL_DW*2-1:0] mem_rd_val, descrambled_val; + mem_rd_val = {readout_word1 ,readout_word}; + descrambled_val = descramble_data(mem_rd_val, part_idx); + otp_a[otp_addr+1] = descrambled_val[TL_DW*2-1:TL_DW]; + otp_a[otp_addr] = descrambled_val[TL_DW-1:0]; + end + endfunction + + virtual function bit [1:0] read_a_word_with_ecc(bit [TL_DW-1:0] dai_addr, + ref bit [TL_DW-1:0] readout_word); + prim_secded_pkg::secded_22_16_t ecc_rd_data0 = cfg.mem_bkdr_util_h.ecc_read16(dai_addr); + prim_secded_pkg::secded_22_16_t ecc_rd_data1 = cfg.mem_bkdr_util_h.ecc_read16(dai_addr + 2); + readout_word[15:0] = ecc_rd_data0.data; + readout_word[31:16] = ecc_rd_data1.data; + return max2(ecc_rd_data0.err, ecc_rd_data1.err); + endfunction + + // Returns the ECC error but does not correct the data bits (i.e. returns the raw data). + virtual function bit [1:0] read_a_word_with_ecc_raw(bit [TL_DW-1:0] dai_addr, + ref bit [TL_DW-1:0] readout_word); + prim_secded_pkg::secded_22_16_t ecc_rd_data0 = cfg.mem_bkdr_util_h.ecc_read16(dai_addr); + prim_secded_pkg::secded_22_16_t ecc_rd_data1 = cfg.mem_bkdr_util_h.ecc_read16(dai_addr + 2); + readout_word[15:0] = 16'hFFFF & cfg.mem_bkdr_util_h.read(dai_addr); + readout_word[31:16] = 16'hFFFF & cfg.mem_bkdr_util_h.read(dai_addr + 2); + return max2(ecc_rd_data0.err, ecc_rd_data1.err); + endfunction + + + virtual function void reset(string kind = "HARD"); + recover_interrupted_op(); + super.reset(kind); + // flush fifos + otbn_fifo.flush(); + flash_addr_fifo.flush(); + flash_data_fifo.flush(); + lc_prog_fifo.flush(); + for (int i = 0; i < NumSramKeyReqSlots; i++) begin + sram_fifos[i].flush(); + end + + direct_access_regwen_state = 1; + under_chk = 0; + under_dai_access = 0; + ignore_digest_chk = 0; + exp_status = `gmv(ral.status); + exp_alert = OtpNoAlert; + + edn_data_q.delete(); + + // Out of reset: lock dai access until power init is done + if (cfg.en_scb) void'(ral.direct_access_regwen.predict(0)); + endfunction + + virtual function void check_otp_idle(bit val, int wait_clks = 0); + fork + begin + fork + begin + // use negedge to avoid race condition + cfg.clk_rst_vif.wait_n_clks(wait_clks + 1); + `uvm_error(`gfn, + $sformatf("pwr_otp_idle output is %0b while expect %0b within %0d cycles", + cfg.otp_ctrl_vif.pwr_otp_idle_o, val, wait_clks)) + end + begin + wait(cfg.under_reset || cfg.otp_ctrl_vif.pwr_otp_idle_o == val || + // Due to OTP access arbitration, any KDI request during DAI access might block + // write secret until KDI request is completed. Since the KDI process time could + // vary depends on the push-pull-agent, we are going to ignore the checking if + // this scenario happens. + cfg.m_otbn_pull_agent_cfg.vif.req || + cfg.m_flash_data_pull_agent_cfg.vif.req || + cfg.m_flash_addr_pull_agent_cfg.vif.req || + cfg.m_sram_pull_agent_cfg[0].vif.req || + cfg.m_sram_pull_agent_cfg[1].vif.req || + cfg.m_sram_pull_agent_cfg[2].vif.req || + cfg.m_sram_pull_agent_cfg[3].vif.req || + cfg.m_lc_prog_pull_agent_cfg.vif.req || + // When lc_escalation is on, the DAI interface goes to ErrorSt, so ignore + // otp_idle checking. + cfg.otp_ctrl_vif.alert_reqs || + // Check timeout will keep doing background check, issue #5616 + exp_status[OtpTimeoutErrIdx]); + end + join_any + disable fork; + end + join_none + endfunction + + // predict digest registers + virtual function void predict_digest_csrs(); +% for part in write_locked_digest_parts: +<% part_name = Name.from_snake_case(part["name"]) %>\ + void'(ral.${part_name.as_snake_case()}_digest[0].predict( + .value(otp_a[PART_OTP_DIGEST_ADDRS[${part_name.as_camel_case()}Idx]]), + .kind(UVM_PREDICT_DIRECT))); + void'(ral.${part_name.as_snake_case()}_digest[1].predict( + .value(otp_a[PART_OTP_DIGEST_ADDRS[${part_name.as_camel_case()}Idx] + 1]), + .kind(UVM_PREDICT_DIRECT))); + % if not loop.last: + + %endif +% endfor + endfunction + + function void update_digest_to_otp(int part_idx, bit [TL_DW*2-1:0] digest); + otp_a[PART_OTP_DIGEST_ADDRS[part_idx]] = digest[31:0]; + otp_a[PART_OTP_DIGEST_ADDRS[part_idx] + 1] = digest[63:32]; + endfunction + + function void check_phase(uvm_phase phase); + super.check_phase(phase); + // post test checks - ensure that all local fifos and queues are empty + endfunction + + // Calculate digest value for each partition + // According to the design spec, the calculation is based on 64-rounds of PRESENT cipher + // The 64-bit data_in state is initialized with a silicon creator constant, and each 128 bit + // chunk of partition data are fed in as keys + // The last 64-round PRESENT calculation will use a global digest constant as key input + function void cal_digest_val(int part_idx); + bit [TL_DW-1:0] mem_q[$]; + int array_size; + bit [SCRAMBLE_DATA_SIZE-1:0] digest; + + if (cfg.otp_ctrl_vif.under_error_states()) return; + + if (!part_has_hw_digest(part_idx) || get_digest_reg_val(part_idx) != 0) begin + predict_err(OtpDaiErrIdx, OtpAccessError); + return; + end else if (PartInfo[part_idx].iskeymgr_creator && + cfg.otp_ctrl_vif.lc_creator_seed_sw_rw_en_i != lc_ctrl_pkg::On) begin + predict_err(OtpDaiErrIdx, OtpAccessError); + return; + end else if (PartInfo[part_idx].iskeymgr_owner && + cfg.otp_ctrl_vif.lc_owner_seed_sw_rw_en_i != lc_ctrl_pkg::On) begin + predict_err(OtpDaiErrIdx, OtpAccessError); + return; + end else begin + predict_no_err(OtpDaiErrIdx); + dai_digest_ip = part_idx; + end + case (part_idx) +% for part in buf_parts_without_lc: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() +%>\ + ${part_name_camel}Idx: mem_q = otp_a[${part_name_camel}Offset / TL_SIZE : ${part_name_camel}DigestOffset / TL_SIZE - 1]; +% endfor + default: begin + `uvm_fatal(`gfn, $sformatf("Access unexpected partition %0d", part_idx)) + end + endcase + + array_size = mem_q.size(); + + // for secret partitions, need to use otp scrambled value as data input + if (PartInfo[part_idx].secret) begin + bit [TL_DW-1:0] scrambled_mem_q[$]; + for (int i = 0; i < array_size/2; i++) begin + bit [SCRAMBLE_DATA_SIZE-1:0] scrambled_data; + scrambled_data = scramble_data({mem_q[i*2+1], mem_q[i*2]}, part_idx); + scrambled_mem_q.push_back(scrambled_data[TL_DW-1:0]); + scrambled_mem_q.push_back(scrambled_data[SCRAMBLE_DATA_SIZE-1:TL_DW]); + end + mem_q = scrambled_mem_q; + end + + digest = otp_scrambler_pkg::cal_digest(part_idx, mem_q); + update_digest_to_otp(part_idx, digest); + endfunction + + + // this function go through present encode algo two or three iterations: + // first iteration with input key, + // second iteration with second_key, this iteration only happens if num_round is 2 + // third iteration with a final constant as key + // this is mainly used for unlock token hashing, key derivation + virtual function bit [SCRAMBLE_DATA_SIZE-1:0] present_encode_with_final_const( + bit [SCRAMBLE_DATA_SIZE-1:0] data, + bit [SCRAMBLE_KEY_SIZE-1:0] key, + bit [SCRAMBLE_KEY_SIZE-1:0] final_const, + bit [SCRAMBLE_KEY_SIZE-1:0] second_key = '0, + int num_round = 1); + bit [SCRAMBLE_DATA_SIZE-1:0] enc_data; + bit [SCRAMBLE_DATA_SIZE-1:0] intermediate_state; + crypto_dpi_present_pkg::sv_dpi_present_encrypt(data, key, + SCRAMBLE_KEY_SIZE, NUM_ROUND, enc_data); + // XOR the previous state into the digest result according to the Davies-Meyer scheme. + intermediate_state = data ^ enc_data; + + if (num_round == 2) begin + crypto_dpi_present_pkg::sv_dpi_present_encrypt(intermediate_state, second_key, + SCRAMBLE_KEY_SIZE, NUM_ROUND, enc_data); + intermediate_state = intermediate_state ^ enc_data; + end else if (num_round > 2) begin + `uvm_fatal(`gfn, $sformatf("does not support num_round: %0d > 2", num_round)) + end + + crypto_dpi_present_pkg::sv_dpi_present_encrypt(intermediate_state, final_const, + SCRAMBLE_KEY_SIZE, NUM_ROUND, enc_data); + // XOR the previous state into the digest result according to the Davies-Meyer scheme. + present_encode_with_final_const = intermediate_state ^ enc_data; + endfunction + + // Get address for scoreboard's otp_a array from the `direct_access_address` CSR + function bit [TL_DW-1:0] get_scb_otp_addr(); + bit [TL_DW-1:0] dai_addr = `gmv(ral.direct_access_address); + get_scb_otp_addr = normalize_dai_addr(dai_addr) >> 2; + endfunction + + // This function predict OTP error related registers: intr_state, status, and err_code + virtual function void predict_err(otp_status_e status_err_idx, + otp_err_code_e err_code = OtpNoError, + bit update_esc_err = 0); + if (cfg.otp_ctrl_vif.under_error_states() && !update_esc_err) return; + + // Update intr_state + void'(ral.intr_state.otp_error.predict(.value(1), .kind(UVM_PREDICT_READ))); + // Update status + exp_status[status_err_idx] = 1; + + // Only first status errors up to the LCI have corresponding err_code + if (status_err_idx <= OtpLciErrIdx) begin + dv_base_reg_field err_code_flds[$]; + if (err_code == OtpNoError) begin + `uvm_error(`gfn, $sformatf("please set status error: %0s error code", status_err_idx.name)) + end + ral.err_code[status_err_idx].get_dv_base_reg_fields(err_code_flds); + + if (`gmv(err_code_flds[0]) inside {OTP_TERMINAL_ERRS}) begin + `uvm_info(`gfn, "terminal error cannot be updated", UVM_HIGH) + end else if (status_err_idx == OtpLciErrIdx && + `gmv(err_code_flds[0]) != OtpNoError) begin + `uvm_info(`gfn, "For LC partition, all errors are terminal error!", UVM_HIGH) + end else begin + void'(err_code_flds[0].predict(.value(err_code), .kind(UVM_PREDICT_READ))); + end + end + + endfunction + + virtual function void predict_no_err(otp_status_e status_err_idx); + if (cfg.otp_ctrl_vif.under_error_states()) return; + + exp_status[status_err_idx] = 0; + if (status_err_idx == OtpDaiErrIdx) exp_status[OtpDaiIdleIdx] = 1; + + if (status_err_idx <= OtpLciErrIdx) begin + dv_base_reg_field err_code_flds[$]; + ral.err_code[status_err_idx].get_dv_base_reg_fields(err_code_flds); + void'(err_code_flds[0].predict(OtpNoError)); + end + endfunction + + virtual function void predict_rdata(bit is_64_bits, bit [TL_DW-1:0] rdata0, + bit [TL_DW-1:0] rdata1 = 0); + void'(ral.direct_access_rdata[0].predict(.value(rdata0), .kind(UVM_PREDICT_READ))); + if (is_64_bits) begin + void'(ral.direct_access_rdata[1].predict(.value(rdata1), .kind(UVM_PREDICT_READ))); + end + endfunction + + // this function retrieves keys (128 bits) from scb's otp_array with a starting address + // if not locked, it will return 0 + // this is mainly used for scrambling key algo + virtual function bit [SCRAMBLE_KEY_SIZE-1:0] get_key_from_otp(bit locked, int start_i); + bit [SCRAMBLE_KEY_SIZE-1:0] key; + if (!locked) return 0; + for (int i = 0; i < 4; i++) key |= otp_a[i + start_i] << (TL_DW * i); + return key; + endfunction + + // The following two methods are all retrieving digest val. + // get_otp_digest_val: is the digest value from OTP memory + // get_digest_reg_val: is the digest value in register. This value is identical to OTP + // memory's digest value after a power cycle reset. + virtual function bit [TL_DW*2-1:0] get_otp_digest_val(int part_idx); + get_otp_digest_val[31:0] = otp_a[PART_OTP_DIGEST_ADDRS[part_idx]]; + get_otp_digest_val[63:32] = otp_a[PART_OTP_DIGEST_ADDRS[part_idx] + 1]; + endfunction + + virtual function bit [TL_DW*2-1:0] get_digest_reg_val(int part_idx); + bit [TL_DW*2-1:0] digest; + case (part_idx) +% for part in write_locked_digest_parts: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_snake = part_name.as_snake_case() +%>\ + ${part_name.as_camel_case()}Idx: begin + digest = {`gmv(ral.${part_name_snake}_digest[1]), + `gmv(ral.${part_name_snake}_digest[0])}; + end +% endfor + default: `uvm_fatal(`gfn, $sformatf("Partition %0d does not have digest", part_idx)) + endcase + return digest; + endfunction + + virtual function bit is_tl_mem_access_allowed(input tl_seq_item item, input string ral_name, + output bit mem_byte_access_err, + output bit mem_wo_err, + output bit mem_ro_err, + output bit custom_err); + + uvm_reg_addr_t addr = cfg.ral_models[ral_name].get_word_aligned_addr(item.a_addr); + uvm_reg_addr_t csr_addr = cfg.ral_models[ral_name].get_word_aligned_addr(item.a_addr); + bit [TL_AW-1:0] addr_mask = ral.get_addr_mask(); + bit [TL_AW-1:0] dai_addr = (csr_addr & addr_mask - SW_WINDOW_BASE_ADDR); + + bit mem_access_allowed = super.is_tl_mem_access_allowed(item, ral_name, mem_byte_access_err, + mem_wo_err, mem_ro_err, custom_err); + + if (ral_name == "otp_ctrl_prim_reg_block") return mem_access_allowed; + + // Ensure the address is within the memory window range. + // Also will skip checking if memory access is not allowed due to TLUL bus error. + if (addr inside { + [cfg.ral_models[ral_name].mem_ranges[0].start_addr : + cfg.ral_models[ral_name].mem_ranges[0].end_addr]} && + mem_access_allowed) begin + + // If sw partition is read locked, then access policy changes from RO to no access +% for part in read_locked_csr_parts: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() +%>\ + if (`gmv(ral.${part_name.as_snake_case()}_read_lock) == 0 || + cfg.otp_ctrl_vif.under_error_states()) begin + if (addr inside { + [cfg.ral_models[ral_name].mem_ranges[0].start_addr + ${part_name_camel}Offset : + cfg.ral_models[ral_name].mem_ranges[0].start_addr + ${part_name_camel}Offset + + ${part_name_camel}Size - 1]}) begin + predict_err(Otp${part_name_camel}ErrIdx, OtpAccessError); + custom_err = 1; + if (cfg.en_cov) begin + % if part["write_lock"] == "Digest": + cov.unbuf_access_lock_cg_wrap[${part_name_camel}Idx].sample(.read_lock(1), + .write_lock(get_digest_reg_val(${part_name_camel}Idx) != 0), .is_write(0)); + % else: + // TODO: we should probably create a different covergroup + // for unbuffered partitions without digest. + cov.unbuf_access_lock_cg_wrap[${part_name_camel}Idx].sample(.read_lock(1), + .write_lock(0), .is_write(0)); + % endif + end + return 0; + end + end +% endfor + + // Check ECC uncorrectable fatal error. + if (dai_addr < LifeCycleOffset) begin + int part_idx = get_part_index(dai_addr); + bit [TL_DW-1:0] read_out; + int ecc_err = read_a_word_with_ecc(dai_addr, read_out); + if (ecc_err == OtpEccUncorrErr && part_has_integrity(part_idx)) begin + predict_err(otp_status_e'(part_idx), OtpMacroEccUncorrError); + set_exp_alert("fatal_macro_error", 1, 20); + custom_err = 1; + return 0; + end + end + end + + return mem_access_allowed; + endfunction + + virtual function bit predict_tl_err(tl_seq_item item, tl_channels_e channel, string ral_name); + if (ral_name == "otp_ctrl_prim_reg_block" && + cfg.otp_ctrl_vif.lc_dft_en_i != lc_ctrl_pkg::On) begin + if (channel == DataChannel) begin + `DV_CHECK_EQ(item.d_error, 1, + $sformatf({"On interface %0s, TL item: %0s, access gated by lc_dft_en_i"}, + ral_name, item.sprint(uvm_default_line_printer))) + + // In data read phase, check d_data when d_error = 1. + if (item.d_error && (item.d_opcode == tlul_pkg::AccessAckData)) begin + check_tl_read_value_after_error(item, ral_name); + end + end + return 1; + end + return super.predict_tl_err(item, channel, ral_name); + endfunction + + virtual function void set_exp_alert(string alert_name, bit is_fatal = 0, int max_delay = 0); + exp_alert = alert_name == "fatal_check_error" ? OtpCheckAlert : OtpMacroAlert; + super.set_exp_alert(alert_name, is_fatal, max_delay); + endfunction + +endclass diff --git a/src/fuse_ctrl/data/otp_ctrl_smoke_vseq.sv.tpl b/src/fuse_ctrl/data/otp_ctrl_smoke_vseq.sv.tpl new file mode 100755 index 000000000..904ff4549 --- /dev/null +++ b/src/fuse_ctrl/data/otp_ctrl_smoke_vseq.sv.tpl @@ -0,0 +1,255 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +${gen_comment} +<% +from topgen.lib import Name +%>\ +// smoke test vseq to walk through DAI states and request keys +`define PART_CONTENT_RANGE(i) ${"\\"} + {[PartInfo[``i``].offset : (PartInfo[``i``].offset + PartInfo[``i``].size - DIGEST_SIZE - 1)]} + +class otp_ctrl_smoke_vseq extends otp_ctrl_base_vseq; + `uvm_object_utils(otp_ctrl_smoke_vseq) + + `uvm_object_new + + rand bit do_req_keys, do_lc_trans; + rand bit access_locked_parts; + rand bit rand_wr, rand_rd, rd_sw_tlul_rd; + rand bit [TL_DW-1:0] dai_addr; + rand bit [TL_DW-1:0] wdata0, wdata1; + rand int num_dai_op; + rand otp_ctrl_part_pkg::part_idx_e part_idx; + rand bit check_regwen_val, check_trigger_regwen_val; + rand bit [TL_DW-1:0] check_timeout_val; + rand bit [1:0] check_trigger_val; + rand otp_ecc_err_e ecc_otp_err, ecc_chk_err; + + constraint no_access_err_c {access_locked_parts == 0;} + + // LC partition does not allow DAI access (the LC partition is always the last one) + constraint partition_index_c {part_idx inside {[0:LifeCycleIdx-1]};} + + constraint dai_wr_legal_addr_c { +% for part in otp_mmap.config["partitions"]: +<% + part_name = Name.from_snake_case(part["name"]) + part_name_camel = part_name.as_camel_case() +%>\ + if (part_idx == ${part_name_camel}Idx) + dai_addr inside `PART_CONTENT_RANGE(${part_name_camel}Idx); +% endfor + solve part_idx before dai_addr; + } + + constraint dai_wr_blank_addr_c { + dai_addr % 4 == 0; + if (PartInfo[part_idx].secret) dai_addr % 8 == 0; + } + + constraint num_trans_c { + if (cfg.smoke_test) { + num_trans == 1; + num_dai_op inside {[1:2]}; + } else { + num_trans inside {[1:2]}; + num_dai_op inside {[1:50]}; + } + } + + constraint regwens_c { + check_regwen_val dist {0 :/ 1, 1 :/ 9}; + check_trigger_regwen_val dist {0 :/ 1, 1 :/ 9}; + } + + constraint check_timeout_val_c { + check_timeout_val inside {0, [100_000:'1]}; + } + + constraint ecc_otp_err_c {ecc_otp_err == OtpNoEccErr;} + + constraint ecc_chk_err_c {ecc_chk_err == OtpNoEccErr;} + + constraint apply_reset_during_pwr_init_cycles_c { + apply_reset_during_pwr_init_cycles dist { + [1:5] :/ 4, + [6:2000] :/ 4, + [2001:4000] :/ 2}; + } + + virtual task dut_init(string reset_kind = "HARD"); + if (do_apply_reset) begin + lc_prog_blocking = 1; + super.dut_init(reset_kind); + csr_wr(ral.intr_enable, en_intr); + end + endtask + + virtual task pre_start(); + super.pre_start(); + num_dai_op.rand_mode(0); + check_lc_err(); + endtask + + virtual task check_lc_err(); + fork + forever begin + wait(cfg.otp_ctrl_vif.lc_prog_err == 1); + lc_prog_blocking = 0; + wait(lc_prog_blocking == 1); + end + join_none; + endtask + + task body(); + for (int i = 1; i <= num_trans; i++) begin + bit [TL_DW-1:0] tlul_val; + if (cfg.stop_transaction_generators()) break; + `uvm_info(`gfn, $sformatf("starting seq %0d/%0d", i, num_trans), UVM_LOW) + + // to avoid access locked OTP partions, issue reset and clear the OTP memory to all 0. + if (access_locked_parts == 0) begin + do_otp_ctrl_init = 1; + if (i > 1 && do_dut_init) dut_init(); + // after otp-init done, check status + cfg.clk_rst_vif.wait_clks(1); + if (!cfg.otp_ctrl_vif.lc_esc_on) begin + csr_rd_check(.ptr(ral.status.dai_idle), .compare_value(1)); + end + end + do_otp_ctrl_init = 0; + + `DV_CHECK_RANDOMIZE_FATAL(this) + // set consistency and integrity checks + csr_wr(ral.check_regwen, check_regwen_val); + csr_wr(ral.check_trigger_regwen, check_trigger_regwen_val); + csr_wr(ral.check_timeout, check_timeout_val); + trigger_checks(.val(check_trigger_val), .wait_done(1), .ecc_err(ecc_chk_err)); + + if (!$urandom_range(0, 9) && access_locked_parts) write_sw_rd_locks(); + + // Backdoor write mubi to values that are not true or false. + force_mubi_part_access(); + + if (do_req_keys && !cfg.otp_ctrl_vif.alert_reqs) begin + req_otbn_key(); + req_flash_addr_key(); + req_flash_data_key(); + req_all_sram_keys(); + end + if (do_lc_trans && !cfg.otp_ctrl_vif.alert_reqs) begin + req_lc_transition(do_lc_trans, lc_prog_blocking); + if (cfg.otp_ctrl_vif.lc_prog_req == 0) begin + for (int k = 0; k <= LciIdx; k++) begin + csr_rd(.ptr(ral.err_code[k]), .value(tlul_val)); + end + end + end + + for (int i = 0; i < num_dai_op; i++) begin + bit [TL_DW-1:0] rdata0, rdata1, backdoor_rd_val; + if (cfg.stop_transaction_generators()) break; + + `DV_CHECK_RANDOMIZE_FATAL(this) + // recalculate part_idx in case some test turn off constraint dai_wr_legal_addr_c + part_idx = part_idx_e'(get_part_index(dai_addr)); + `uvm_info(`gfn, $sformatf("starting dai access seq %0d/%0d with addr %0h in partition %0d", + i, num_dai_op, dai_addr, part_idx), UVM_HIGH) + + // OTP write via DAI + if (rand_wr && !digest_calculated[part_idx]) begin + dai_wr(dai_addr, wdata0, wdata1); + if (cfg.otp_ctrl_vif.lc_prog_req == 0) begin + for (int k = 0; k <= LciIdx; k++) begin + csr_rd(.ptr(ral.err_code[k]), .value(tlul_val)); + end + end + end + + // Inject ECC error. + if (ecc_otp_err != OtpNoEccErr && dai_addr < LifeCycleOffset) begin + `uvm_info(`gfn, $sformatf("Injecting ecc error %0d at 0x%x", ecc_otp_err, dai_addr), + UVM_HIGH) + backdoor_rd_val = backdoor_inject_ecc_err(dai_addr, ecc_otp_err); + end + + if (rand_rd) begin + // OTP read via DAI, check data in scb + dai_rd(dai_addr, rdata0, rdata1); + end + + // if write sw partitions, check tlul window + if (is_sw_part(dai_addr) && rd_sw_tlul_rd) begin + uvm_reg_addr_t tlul_addr = cfg.ral.get_addr_from_offset(get_sw_window_offset(dai_addr)); + // tlul error rsp is checked in scoreboard + do_otp_rd = 1; + tl_access(.addr(tlul_addr), .write(0), .data(tlul_val), .blocking(1), .check_rsp(0)); + end + + // Backdoor restore injected ECC error, but should not affect fatal alerts. + if (ecc_otp_err != OtpNoEccErr && dai_addr < LifeCycleOffset) begin + `uvm_info(`gfn, $sformatf("Injecting ecc error %0d at 0x%x", ecc_otp_err, dai_addr), + UVM_HIGH) + cfg.mem_bkdr_util_h.write32({dai_addr[TL_DW-3:2], 2'b00}, backdoor_rd_val); + // Wait for two lock cycles to make sure the local escalation error propagates to other + // patitions and err_code reg. + cfg.clk_rst_vif.wait_clks(2); + end + + // Random lock sw partitions + if (!$urandom_range(0, 9) && access_locked_parts) write_sw_rd_locks(); + if (!$urandom_range(0, 9) && access_locked_parts) write_sw_digests(); + if ($urandom_range(0, 1)) csr_rd(.ptr(ral.direct_access_regwen), .value(tlul_val)); + if ($urandom_range(0, 1)) csr_rd(.ptr(ral.status), .value(tlul_val)); + if (cfg.otp_ctrl_vif.lc_prog_req == 0) begin + for (int k = 0; k <= LciIdx; k++) begin + csr_rd(.ptr(ral.err_code[k]), .value(tlul_val)); + end + end + end + + // Read/write test access memory + otp_test_access(); + + // lock digests + `uvm_info(`gfn, "Trigger HW digest calculation", UVM_HIGH) + cal_hw_digests(); + if ($urandom_range(0, 1)) csr_rd(.ptr(ral.status), .value(tlul_val)); + + if (cfg.otp_ctrl_vif.lc_prog_req == 0) begin + for (int k = 0; k <= LciIdx; k++) begin + csr_rd(.ptr(ral.err_code[k]), .value(tlul_val)); + end + end + + if ($urandom_range(0, 1)) rd_digests(); + if (do_dut_init) dut_init(); + + // read and check digest in scb + rd_digests(); + + // send request to the interfaces again after partitions are locked + if (do_lc_trans && !cfg.otp_ctrl_vif.alert_reqs) begin + req_lc_transition(do_lc_trans, lc_prog_blocking); + if (cfg.otp_ctrl_vif.lc_prog_req == 0) begin + for (int k = 0; k <= LciIdx; k++) begin + csr_rd(.ptr(ral.err_code[k]), .value(tlul_val)); + end + end + end + + if (do_req_keys && !cfg.otp_ctrl_vif.alert_reqs && !cfg.smoke_test) begin + req_otbn_key(); + req_flash_addr_key(); + req_flash_data_key(); + req_all_sram_keys(); + end + + end + + endtask : body + +endclass : otp_ctrl_smoke_vseq + +`undef PART_CONTENT_RANGE diff --git a/src/fuse_ctrl/doc/otp_ctrl_digests.md b/src/fuse_ctrl/doc/otp_ctrl_digests.md new file mode 100755 index 000000000..3ba3ba8d6 --- /dev/null +++ b/src/fuse_ctrl/doc/otp_ctrl_digests.md @@ -0,0 +1,12 @@ + + +| Digest Name | Affected Partition | Calculated by HW | +|:---------------------------------------------------------:|:---------------------:|:------------------:| +| [VENDOR_TEST_DIGEST](#Reg_vendor_test_digest_0) | VENDOR_TEST | no | +| [NON_SECRET_FUSES_DIGEST](#Reg_non_secret_fuses_digest_0) | NON_SECRET_FUSES | no | +| [SECRET0_DIGEST](#Reg_secret0_digest_0) | SECRET0 | yes | +| [SECRET1_DIGEST](#Reg_secret1_digest_0) | SECRET1 | yes | +| [SECRET2_DIGEST](#Reg_secret2_digest_0) | SECRET2 | yes | diff --git a/src/fuse_ctrl/doc/otp_ctrl_mmap.md b/src/fuse_ctrl/doc/otp_ctrl_mmap.md new file mode 100755 index 000000000..6ec2c0f0d --- /dev/null +++ b/src/fuse_ctrl/doc/otp_ctrl_mmap.md @@ -0,0 +1,27 @@ + + +| Index | Partition | Size [B] | Access Granule | Item | Byte Address | Size [B] | +|:-------:|:----------------:|:----------:|:----------------:|:---------------------------------------------------------:|:--------------:|:----------:| +| 0 | VENDOR_TEST | 64 | 32bit | SCRATCH | 0x000 | 56 | +| | | | 64bit | [VENDOR_TEST_DIGEST](#Reg_vendor_test_digest_0) | 0x038 | 8 | +| 1 | NON_SECRET_FUSES | 3792 | 32bit | FMC_KEY_MANIFEST_SVN | 0x040 | 4 | +| | | | 32bit | RUNTIME_SVN | 0x044 | 16 | +| | | | 32bit | LMS_VERIFY | 0x054 | 4 | +| | | | 32bit | LMS_REVOCATION | 0x058 | 4 | +| | | | 32bit | KEY_MANIFEST_PK_HASH_MASK | 0x05C | 4 | +| | | | 32bit | OWNER_PK_HASH | 0x060 | 48 | +| | | | 32bit | IDEVID_CERT_ATTR | 0x090 | 96 | +| | | | 32bit | IDEVID_MANUF_HSM_ID | 0x0F0 | 16 | +| | | | 32bit | SOC_STEPPING_ID | 0x100 | 4 | +| | | | 64bit | [NON_SECRET_FUSES_DIGEST](#Reg_non_secret_fuses_digest_0) | 0xF08 | 8 | +| 2 | SECRET0 | 56 | 64bit | UDS_SEED | 0xF10 | 48 | +| | | | 64bit | [SECRET0_DIGEST](#Reg_secret0_digest_0) | 0xF40 | 8 | +| 3 | SECRET1 | 40 | 64bit | FIELD_ENTROPY | 0xF48 | 32 | +| | | | 64bit | [SECRET1_DIGEST](#Reg_secret1_digest_0) | 0xF68 | 8 | +| 4 | SECRET2 | 56 | 64bit | KEY_MANIFEST_PK_HASH | 0xF70 | 48 | +| | | | 64bit | [SECRET2_DIGEST](#Reg_secret2_digest_0) | 0xFA0 | 8 | +| 5 | LIFE_CYCLE | 88 | 32bit | LC_TRANSITION_CNT | 0xFA8 | 48 | +| | | | 32bit | LC_STATE | 0xFD8 | 40 | diff --git a/src/fuse_ctrl/doc/otp_ctrl_partitions.md b/src/fuse_ctrl/doc/otp_ctrl_partitions.md new file mode 100755 index 000000000..f869834fb --- /dev/null +++ b/src/fuse_ctrl/doc/otp_ctrl_partitions.md @@ -0,0 +1,31 @@ + + +| Partition | Secret | Buffered | Integrity | WR Lockable | RD Lockable | Description | +|:----------------:|:--------:|:----------:|:-----------:|:-------------:|:-------------:|:--------------------------------------------------------------------| +| VENDOR_TEST | no | no | no | yes (Digest) | yes (CSR) | Vendor test partition. | +| | | | | | | This is reserved for manufacturing smoke checks. The OTP wrapper | +| | | | | | | control logic inside prim_otp is allowed to read/write to this | +| | | | | | | region. ECC uncorrectable errors seen on the functional prim_otp | +| | | | | | | interface will not lead to an alert for this partition. | +| | | | | | | Instead, such errors will be reported as correctable ECC errors. | +| NON_SECRET_FUSES | no | no | yes | yes (Digest) | yes (CSR) | Non Secret Fuses partition. | +| | | | | | | This contains data such IDEVID, public key hash mask, owner | +| | | | | | | key hash, SoC Stepping ID etc. | +| SECRET0 | yes | yes | yes | yes (Digest) | yes (Digest) | Secret partition 0. | +| | | | | | | This contains Obfuscated UDS seed. | +| SECRET1 | yes | yes | yes | yes (Digest) | yes (Digest) | Secret partition 1. | +| | | | | | | This contains obfuscated field entropy. | +| SECRET2 | yes | yes | yes | yes (Digest) | yes (Digest) | Secret partition 2. | +| | | | | | | This contains public key hash. | +| LIFE_CYCLE | no | yes | yes | no | no | Lifecycle partition. | +| | | | | | | This contains lifecycle transition count and state. This partition | +| | | | | | | cannot be locked since the life cycle state needs to advance to RMA | +| | | | | | | in-field. Note that while this partition is not marked secret, it | +| | | | | | | is not readable nor writeable via the DAI. Only the LC controller | +| | | | | | | can access this partition, and even via the LC controller it is not | +| | | | | | | possible to read the raw manufacturing life cycle state in encoded | +| | | | | | | form, since that encoding is considered a netlist secret. The LC | +| | | | | | | controller only exposes a decoded version of this state. | diff --git a/src/fuse_ctrl/dv/cov/otp_ctrl_cov.core b/src/fuse_ctrl/dv/cov/otp_ctrl_cov.core new file mode 100755 index 000000000..361da4637 --- /dev/null +++ b/src/fuse_ctrl/dv/cov/otp_ctrl_cov.core @@ -0,0 +1,24 @@ +CAPI=2: +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +name: "lowrisc:dv:otp_ctrl_cov" +description: "OTP_CTRL functional coverage and bind files" +filesets: + files_rtl: + depend: + - lowrisc:ip:otp_ctrl + + files_dv: + depend: + - lowrisc:dv:dv_utils + files: + - otp_ctrl_cov_if.sv + - otp_ctrl_cov_bind.sv + file_type: systemVerilogSource + +targets: + default: + filesets: + - files_rtl + - files_dv diff --git a/src/fuse_ctrl/dv/cov/otp_ctrl_cov_bind.sv b/src/fuse_ctrl/dv/cov/otp_ctrl_cov_bind.sv new file mode 100755 index 000000000..fa69309b6 --- /dev/null +++ b/src/fuse_ctrl/dv/cov/otp_ctrl_cov_bind.sv @@ -0,0 +1,81 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Binds OTP_CTRL functional coverage interaface to the top level OTP_CTRL module. +// +// DO NOT EDIT THIS FILE DIRECTLY. +// It has been generated with ./util/design/gen-otp-mmap.py + +`define PART_MUBI_COV(__part_name, __index) \ + bind otp_ctrl cip_mubi_cov_if #(.Width(8)) ``__part_name``_read_lock_mubi_cov_if ( \ + .rst_ni (rst_ni), \ + .mubi (part_access[``__index``].read_lock) \ + ); \ + bind otp_ctrl cip_mubi_cov_if #(.Width(8)) ``__part_name``_write_lock_mubi_cov_if ( \ + .rst_ni (rst_ni), \ + .mubi (part_access[``__index``].write_lock) \ + ); + +`define DAI_MUBI_COV(__part_name, __index) \ + bind otp_ctrl cip_mubi_cov_if #(.Width(8)) dai_``__part_name``_read_lock_mubi_cov_if ( \ + .rst_ni (rst_ni), \ + .mubi (part_access_dai[``__index``].read_lock) \ + ); \ + bind otp_ctrl cip_mubi_cov_if #(.Width(8)) dai_``__part_name``_write_lock_mubi_cov_if ( \ + .rst_ni (rst_ni), \ + .mubi (part_access_dai[``__index``].write_lock) \ + ); + +module otp_ctrl_cov_bind; + import otp_ctrl_part_pkg::*; + + bind otp_ctrl otp_ctrl_cov_if u_otp_ctrl_cov_if ( + .pwr_otp_o (pwr_otp_o), + .lc_otp_program_i (lc_otp_program_i), + .lc_escalate_en_i (lc_escalate_en_i), + .flash_otp_key_i (flash_otp_key_i), + .sram_otp_key_i (sram_otp_key_i), + .otbn_otp_key_i (otbn_otp_key_i) + ); + + bind otp_ctrl cip_lc_tx_cov_if u_lc_creator_seed_sw_rw_en_cov_if ( + .rst_ni (rst_ni), + .val (lc_creator_seed_sw_rw_en_i) + ); + + bind otp_ctrl cip_lc_tx_cov_if u_lc_seed_hw_rd_en_cov_if ( + .rst_ni (rst_ni), + .val (lc_seed_hw_rd_en_i) + ); + + bind otp_ctrl cip_lc_tx_cov_if u_lc_dft_en_cov_if ( + .rst_ni (rst_ni), + .val (lc_dft_en_i) + ); + + bind otp_ctrl cip_lc_tx_cov_if u_lc_escalate_en_cov_if ( + .rst_ni (rst_ni), + .val (lc_escalate_en_i) + ); + + bind otp_ctrl cip_lc_tx_cov_if u_lc_check_byp_en_cov_if ( + .rst_ni (rst_ni), + .val (lc_check_byp_en_i) + ); + + // Mubi internal coverage for buffered and unbuffered partitions. + `PART_MUBI_COV(vendor_test, otp_ctrl_part_pkg::VendorTestIdx) + `PART_MUBI_COV(non_secret_fuses, otp_ctrl_part_pkg::NonSecretFusesIdx) + `PART_MUBI_COV(secret0, otp_ctrl_part_pkg::Secret0Idx) + `PART_MUBI_COV(secret1, otp_ctrl_part_pkg::Secret1Idx) + + // Mubi internal coverage for DAI interface access + `DAI_MUBI_COV(vendor_test, otp_ctrl_part_pkg::VendorTestIdx) + `DAI_MUBI_COV(non_secret_fuses, otp_ctrl_part_pkg::NonSecretFusesIdx) + `DAI_MUBI_COV(secret0, otp_ctrl_part_pkg::Secret0Idx) + `DAI_MUBI_COV(secret1, otp_ctrl_part_pkg::Secret1Idx) + +`undef PART_MUBI_COV +`undef DAI_MUBI_COV +endmodule diff --git a/src/fuse_ctrl/dv/cov/otp_ctrl_cov_fsm_unr_excl.el b/src/fuse_ctrl/dv/cov/otp_ctrl_cov_fsm_unr_excl.el new file mode 100755 index 000000000..1c3412b69 --- /dev/null +++ b/src/fuse_ctrl/dv/cov/otp_ctrl_cov_fsm_unr_excl.el @@ -0,0 +1,199 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// The current UNR flow marks some transition to reset states as unreachable. +// This file manually removed the reset transition states. +//================================================== +// This file contains the Excluded objects +// Generated By User: chencindy +// Format Version: 2 +// Date: Fri Jan 6 11:14:02 2023 +// ExclMode: default +//================================================== +CHECKSUM: "2063559012 2582220255" +INSTANCE: tb.dut.gen_partitions[3].gen_buffered.u_part_buf +Fsm state_q "441128463" +Transition IntegDigClrSt->IdleSt "2625->1357" +Fsm state_q "441128463" +Transition IntegDigSt->IntegDigFinSt "1890->1765" +Fsm state_q "441128463" +Transition CnstyReadWaitSt->CnstyReadSt "2684->107" +Fsm state_q "441128463" +State InitDescrWaitSt "2472" +Fsm state_q "441128463" +State IntegScrSt "3418" +Fsm state_q "441128463" +State IntegScrWaitSt "2207" +Fsm state_q "441128463" +State InitDescrSt "3204" +Fsm error_q "2410907799" +Transition CheckFailError->MacroEccCorrError "6->2" +Fsm error_q "2410907799" +Transition FsmStateError->CheckFailError "7->6" +Fsm error_q "2410907799" +Transition FsmStateError->MacroEccCorrError "7->2" +Fsm error_q "2410907799" +Transition CheckFailError->FsmStateError "6->7" +CHECKSUM: "2063559012 2582220255" +INSTANCE: tb.dut.gen_partitions[4].gen_buffered.u_part_buf +Fsm state_q "441128463" +Transition CnstyReadWaitSt->CnstyReadSt "2684->107" +Fsm state_q "441128463" +Transition IntegDigClrSt->IdleSt "2625->1357" +Fsm state_q "441128463" +Transition IntegDigClrSt->IntegDigSt "2625->1890" +Fsm state_q "441128463" +Transition InitWaitSt->InitSt "945->3367" +Fsm state_q "441128463" +State IntegDigPadSt "855" +Fsm error_q "2410907799" +Transition CheckFailError->MacroEccCorrError "6->2" +Fsm error_q "2410907799" +Transition FsmStateError->CheckFailError "7->6" +Fsm error_q "2410907799" +Transition FsmStateError->MacroEccCorrError "7->2" +Fsm error_q "2410907799" +Transition CheckFailError->FsmStateError "6->7" +CHECKSUM: "2063559012 2582220255" +INSTANCE: tb.dut.gen_partitions[5].gen_buffered.u_part_buf +Fsm state_q "441128463" +Transition InitWaitSt->InitSt "945->3367" +Fsm state_q "441128463" +Transition IntegDigClrSt->IdleSt "2625->1357" +Fsm state_q "441128463" +Transition IntegDigClrSt->IntegDigSt "2625->1890" +Fsm state_q "441128463" +Transition CnstyReadWaitSt->CnstyReadSt "2684->107" +Fsm state_q "441128463" +State IntegDigPadSt "855" +Fsm error_q "2410907799" +Transition CheckFailError->MacroEccCorrError "6->2" +Fsm error_q "2410907799" +Transition FsmStateError->CheckFailError "7->6" +Fsm error_q "2410907799" +Transition FsmStateError->MacroEccCorrError "7->2" +Fsm error_q "2410907799" +Transition CheckFailError->FsmStateError "6->7" +CHECKSUM: "2063559012 2582220255" +INSTANCE: tb.dut.gen_partitions[6].gen_buffered.u_part_buf +Fsm state_q "441128463" +Transition InitWaitSt->InitSt "945->3367" +Fsm state_q "441128463" +Transition IntegDigClrSt->IdleSt "2625->1357" +Fsm state_q "441128463" +Transition IntegDigClrSt->IntegDigSt "2625->1890" +Fsm state_q "441128463" +Transition CnstyReadWaitSt->CnstyReadSt "2684->107" +Fsm state_q "441128463" +State IntegDigPadSt "855" +Fsm error_q "2410907799" +Transition CheckFailError->MacroEccCorrError "6->2" +Fsm error_q "2410907799" +Transition FsmStateError->MacroEccCorrError "7->2" +Fsm error_q "2410907799" +Transition FsmStateError->CheckFailError "7->6" +Fsm error_q "2410907799" +Transition CheckFailError->FsmStateError "6->7" +CHECKSUM: "2063559012 2582220255" +INSTANCE: tb.dut.gen_partitions[7].gen_lifecycle.u_part_buf +Fsm state_q "441128463" +Transition IdleSt->IntegDigClrSt "1357->2625" +Fsm state_q "441128463" +State InitDescrWaitSt "2472" +Fsm state_q "441128463" +State IntegDigFinSt "1765" +Fsm state_q "441128463" +State IntegDigPadSt "855" +Fsm state_q "441128463" +State IntegDigSt "1890" +Fsm state_q "441128463" +State IntegDigWaitSt "2290" +Fsm state_q "441128463" +State IntegScrSt "3418" +Fsm state_q "441128463" +State IntegScrWaitSt "2207" +Fsm state_q "441128463" +State InitDescrSt "3204" +Fsm error_q "2410907799" +Transition CheckFailError->MacroEccCorrError "6->2" +Fsm error_q "2410907799" +Transition FsmStateError->CheckFailError "7->6" +Fsm error_q "2410907799" +Transition FsmStateError->MacroEccCorrError "7->2" +Fsm error_q "2410907799" +Transition CheckFailError->FsmStateError "6->7" +CHECKSUM: "2940612991 27342893" +INSTANCE: tb.dut.gen_partitions[0].gen_unbuffered.u_part_unbuf +Fsm error_q "2210720134" +Transition AccessError->MacroEccCorrError "5->2" +Fsm error_q "2210720134" +Transition CheckFailError->AccessError "6->5" +Fsm error_q "2210720134" +Transition CheckFailError->FsmStateError "6->7" +Fsm error_q "2210720134" +Transition CheckFailError->MacroEccCorrError "6->2" +Fsm error_q "2210720134" +Transition FsmStateError->AccessError "7->5" +Fsm error_q "2210720134" +Transition FsmStateError->MacroEccCorrError "7->2" +Fsm error_q "2210720134" +Transition FsmStateError->CheckFailError "7->6" +Fsm error_q "2210720134" +Transition MacroEccCorrError->AccessError "2->5" +Fsm error_q "2210720134" +Transition AccessError->CheckFailError "5->6" +CHECKSUM: "2940612991 27342893" +INSTANCE: tb.dut.gen_partitions[1].gen_unbuffered.u_part_unbuf +Fsm error_q "2210720134" +Transition AccessError->MacroEccCorrError "5->2" +Fsm error_q "2210720134" +Transition CheckFailError->AccessError "6->5" +Fsm error_q "2210720134" +Transition CheckFailError->MacroEccCorrError "6->2" +Fsm error_q "2210720134" +Transition CheckFailError->FsmStateError "6->7" +Fsm error_q "2210720134" +Transition FsmStateError->AccessError "7->5" +Fsm error_q "2210720134" +Transition FsmStateError->CheckFailError "7->6" +Fsm error_q "2210720134" +Transition FsmStateError->MacroEccCorrError "7->2" +Fsm error_q "2210720134" +Transition MacroEccCorrError->AccessError "2->5" +Fsm error_q "2210720134" +Transition AccessError->CheckFailError "5->6" +CHECKSUM: "2940612991 27342893" +INSTANCE: tb.dut.gen_partitions[2].gen_unbuffered.u_part_unbuf +Fsm error_q "2210720134" +Transition CheckFailError->AccessError "6->5" +Fsm error_q "2210720134" +Transition CheckFailError->FsmStateError "6->7" +Fsm error_q "2210720134" +Transition CheckFailError->MacroEccCorrError "6->2" +Fsm error_q "2210720134" +Transition FsmStateError->AccessError "7->5" +Fsm error_q "2210720134" +Transition FsmStateError->CheckFailError "7->6" +Fsm error_q "2210720134" +Transition FsmStateError->MacroEccCorrError "7->2" +Fsm error_q "2210720134" +Transition MacroEccCorrError->AccessError "2->5" +Fsm error_q "2210720134" +Transition AccessError->MacroEccCorrError "5->2" +Fsm error_q "2210720134" +Transition AccessError->CheckFailError "5->6" +CHECKSUM: "4205406832 4258846959" +INSTANCE: tb.dut.u_otp_ctrl_dai +Fsm error_q "1085514286" +Transition FsmStateError->AccessError "7->5" +Fsm error_q "1085514286" +Transition FsmStateError->MacroEccCorrError "7->2" +Fsm error_q "1085514286" +Transition AccessError->MacroEccCorrError "5->2" +CHECKSUM: "761735614 2379312231" +INSTANCE: tb.dut.u_otp_ctrl_kdi +Fsm state_q "2979668442" +Transition DigWaitSt->FinishSt "913->760" +Fsm state_q "2979668442" +Transition DigWaitSt->DigLoadSt "913->183" diff --git a/src/fuse_ctrl/dv/cov/otp_ctrl_cov_if.sv b/src/fuse_ctrl/dv/cov/otp_ctrl_cov_if.sv new file mode 100755 index 000000000..106178b88 --- /dev/null +++ b/src/fuse_ctrl/dv/cov/otp_ctrl_cov_if.sv @@ -0,0 +1,113 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Implements functional coverage for OTP_CTRL + +interface otp_ctrl_cov_if + import otp_ctrl_reg_pkg::*; + ( + input pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o, + input otp_ctrl_pkg::lc_otp_program_req_t lc_otp_program_i, + input bit [3:0] lc_escalate_en_i, + input otp_ctrl_pkg::flash_otp_key_req_t flash_otp_key_i, + input otp_ctrl_pkg::sram_otp_key_req_t [NumSramKeyReqSlots-1:0] sram_otp_key_i, + input otp_ctrl_pkg::otbn_otp_key_req_t otbn_otp_key_i + ); + + import uvm_pkg::*; + import dv_utils_pkg::*; + `include "dv_fcov_macros.svh" + + covergroup lc_esc_en_condition_cg @(lc_escalate_en_i == lc_ctrl_pkg::On); + lc_esc_during_flash_data_req: coverpoint flash_otp_key_i.data_req; + lc_esc_during_flash_addr_req: coverpoint flash_otp_key_i.addr_req; + lc_esc_during_sram_0_req: coverpoint sram_otp_key_i[0].req; + lc_esc_during_sram_1_req: coverpoint sram_otp_key_i[1].req; + lc_esc_during_otbn_req: coverpoint otbn_otp_key_i.req; + lc_esc_during_otp_idle: coverpoint pwr_otp_o.otp_idle; + lc_esc_during_lc_otp_prog_req: coverpoint lc_otp_program_i.req; + endgroup + + covergroup flash_data_req_condition_cg @(flash_otp_key_i.data_req); + flash_data_req_during_lc_esc: coverpoint lc_escalate_en_i { + bins lc_esc_on = {lc_ctrl_pkg::On}; + bins lc_esc_off = {[0 : lc_ctrl_pkg::On-1], [lc_ctrl_pkg::On+1 : '1]}; + } + flash_data_req_during_flash_addr_req: coverpoint flash_otp_key_i.addr_req; + flash_data_req_during_sram_0_req: coverpoint sram_otp_key_i[0].req; + flash_data_req_during_sram_1_req: coverpoint sram_otp_key_i[1].req; + flash_data_req_during_otbn_req: coverpoint otbn_otp_key_i.req; + flash_data_req_during_otp_idle: coverpoint pwr_otp_o.otp_idle; + endgroup + + covergroup flash_addr_req_condition_cg @(flash_otp_key_i.addr_req); + flash_addr_req_during_lc_esc: coverpoint lc_escalate_en_i { + bins lc_esc_on = {lc_ctrl_pkg::On}; + bins lc_esc_off = {[0 : lc_ctrl_pkg::On-1], [lc_ctrl_pkg::On+1 : '1]}; + } + flash_addr_req_during_flash_data_req: coverpoint flash_otp_key_i.data_req; + flash_addr_req_during_sram_0_req: coverpoint sram_otp_key_i[0].req; + flash_addr_req_during_sram_1_req: coverpoint sram_otp_key_i[1].req; + flash_addr_req_during_otbn_req: coverpoint otbn_otp_key_i.req; + flash_addr_req_during_otp_idle: coverpoint pwr_otp_o.otp_idle; + endgroup + + covergroup sram_0_req_condition_cg @(sram_otp_key_i[0].req); + sram_0_req_during_lc_esc: coverpoint lc_escalate_en_i { + bins lc_esc_on = {lc_ctrl_pkg::On}; + bins lc_esc_off = {[0 : lc_ctrl_pkg::On-1], [lc_ctrl_pkg::On+1 : '1]}; + } + sram_0_req_during_flash_addr_req: coverpoint flash_otp_key_i.addr_req; + sram_0_req_during_flash_data_req: coverpoint flash_otp_key_i.data_req; + sram_0_req_during_sram_1_req: coverpoint sram_otp_key_i[1].req; + sram_0_req_during_otbn_req: coverpoint otbn_otp_key_i.req; + sram_0_req_during_otp_idle: coverpoint pwr_otp_o.otp_idle; + endgroup + + covergroup sram_1_req_condition_cg @(sram_otp_key_i[1].req); + sram_1_req_during_lc_esc: coverpoint lc_escalate_en_i { + bins lc_esc_on = {lc_ctrl_pkg::On}; + bins lc_esc_off = {[0 : lc_ctrl_pkg::On-1], [lc_ctrl_pkg::On+1 : '1]}; + } + sram_1_req_during_flash_addr_req: coverpoint flash_otp_key_i.addr_req; + sram_1_req_during_flash_data_req: coverpoint flash_otp_key_i.data_req; + sram_1_req_during_sram_0_req: coverpoint sram_otp_key_i[0].req; + sram_1_req_during_otbn_req: coverpoint otbn_otp_key_i.req; + sram_1_req_during_otp_idle: coverpoint pwr_otp_o.otp_idle; + endgroup + + covergroup otbn_req_condition_cg @(otbn_otp_key_i.req); + otbn_req_during_lc_esc: coverpoint lc_escalate_en_i { + bins lc_esc_on = {lc_ctrl_pkg::On}; + bins lc_esc_off = {[0 : lc_ctrl_pkg::On-1], [lc_ctrl_pkg::On+1 : '1]}; + } + otbn_req_during_flash_addr_req: coverpoint flash_otp_key_i.addr_req; + otbn_req_during_flash_data_req: coverpoint flash_otp_key_i.data_req; + otbn_req_during_sram_0_req: coverpoint sram_otp_key_i[0].req; + otbn_req_during_sram_1_req: coverpoint sram_otp_key_i[1].req; + otbn_req_during_otp_idle: coverpoint pwr_otp_o.otp_idle; + endgroup + + covergroup lc_prog_req_condition_cg @(lc_otp_program_i.req); + lc_prog_req_during_lc_esc: coverpoint lc_escalate_en_i { + bins lc_esc_on = {lc_ctrl_pkg::On}; + bins lc_esc_off = {[0 : lc_ctrl_pkg::On-1], [lc_ctrl_pkg::On+1 : '1]}; + } + lc_prog_req_during_flash_addr_req: coverpoint flash_otp_key_i.addr_req; + lc_prog_req_during_flash_data_req: coverpoint flash_otp_key_i.data_req; + lc_prog_req_during_sram_0_req: coverpoint sram_otp_key_i[0].req; + lc_prog_req_during_sram_1_req: coverpoint sram_otp_key_i[1].req; + lc_prog_req_during_otbn_req: coverpoint otbn_otp_key_i.req; + lc_prog_req_during_otp_idle: coverpoint pwr_otp_o.otp_idle; + endgroup + + `DV_FCOV_INSTANTIATE_CG(lc_esc_en_condition_cg) + `DV_FCOV_INSTANTIATE_CG(flash_data_req_condition_cg) + `DV_FCOV_INSTANTIATE_CG(flash_addr_req_condition_cg) + `DV_FCOV_INSTANTIATE_CG(sram_0_req_condition_cg) + `DV_FCOV_INSTANTIATE_CG(sram_1_req_condition_cg) + `DV_FCOV_INSTANTIATE_CG(otbn_req_condition_cg) + `DV_FCOV_INSTANTIATE_CG(lc_prog_req_condition_cg) + +endinterface diff --git a/src/fuse_ctrl/dv/cov/otp_ctrl_cov_unr_excl.el b/src/fuse_ctrl/dv/cov/otp_ctrl_cov_unr_excl.el new file mode 100755 index 000000000..1119db53c --- /dev/null +++ b/src/fuse_ctrl/dv/cov/otp_ctrl_cov_unr_excl.el @@ -0,0 +1,6102 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Generated UNR file from Synopsys UNR tool with security modules being black-boxed. +//================================================== +// This file contains the Excluded objects +// Generated By User: miguelosorio +// Format Version: 2 +// Date: Fri Feb 23 21:09:38 2024 +// ExclMode: default +//================================================== +CHECKSUM: "2868806991 3096942133" +INSTANCE: tb.dut.gen_alert_tx[4].u_prim_alert_sender +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 alert_ack_o "logic alert_ack_o" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 alert_ack_o "logic alert_ack_o" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 alert_state_o "logic alert_state_o" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 alert_state_o "logic alert_state_o" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[0].gen_unbuffered.u_part_unbuf.gen_ecc_reg.u_otp_ctrl_ecc_reg.gen_ecc_dec[0].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[1].gen_unbuffered.u_part_unbuf.gen_ecc_reg.u_otp_ctrl_ecc_reg.gen_ecc_dec[0].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[2].gen_unbuffered.u_part_unbuf.gen_ecc_reg.u_otp_ctrl_ecc_reg.gen_ecc_dec[0].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[3].gen_unbuffered.u_part_unbuf.gen_ecc_reg.u_otp_ctrl_ecc_reg.gen_ecc_dec[0].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[4].gen_unbuffered.u_part_unbuf.gen_ecc_reg.u_otp_ctrl_ecc_reg.gen_ecc_dec[0].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[5].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[4].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[5].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[0].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[5].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[1].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[5].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[2].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[5].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[3].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[5].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[5].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[5].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[6].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[5].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[7].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[5].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[8].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[6].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[0].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[6].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[1].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[7].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[0].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[7].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[1].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[7].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[2].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[7].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[3].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[7].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[4].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[8].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[0].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[8].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[1].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[8].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[2].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[8].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[3].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[8].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[4].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[8].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[5].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[8].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[6].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[8].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[7].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[8].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[8].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[8].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[9].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[8].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[10].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[9].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[0].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[9].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[1].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[9].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[2].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[9].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[3].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[9].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[4].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[9].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[5].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[9].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[6].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[9].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[7].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[9].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[8].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "698853052 3336016746" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic +ANNOTATION: "VC_COV_UNR" +Branch 3 "1554177250" "state_q" (1) "state_q ResetSt ,1,0,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 3 "1554177250" "state_q" (8) "state_q IdleSt ,-,-,1,default,-,-,-,-,-,-,-,-" +CHECKSUM: "189358556 1401458059" +INSTANCE: tb.dut +ANNOTATION: "VC_COV_UNR" +Branch 4 "1264131593" "tlul_req" (1) "tlul_req 1,0" +CHECKSUM: "1746381268 3161287359" +INSTANCE: tb.dut.u_reg_core.u_socket +ANNOTATION: "VC_COV_UNR" +Branch 4 "3202860295" "(!rst_ni)" (2) "(!rst_ni) 0,1,0,-" +CHECKSUM: "1817939962 2852341788" +INSTANCE: tb.dut.u_tlul_adapter_sram.u_reqfifo.gen_normal_fifo.u_fifo_cnt +ANNOTATION: "VC_COV_UNR" +Block 12 "398307645" "wptr_o <= (wptr_o + {{(Width - 1) {1'b0}}, 1'b1});" +ANNOTATION: "VC_COV_UNR" +Block 21 "2517571270" "rptr_o <= (rptr_o + {{(Width - 1) {1'b0}}, 1'b1});" +CHECKSUM: "1817939962 2852341788" +INSTANCE: tb.dut.u_tlul_adapter_sram.u_sramreqfifo.gen_normal_fifo.u_fifo_cnt +ANNOTATION: "VC_COV_UNR" +Block 12 "398307645" "wptr_o <= (wptr_o + {{(Width - 1) {1'b0}}, 1'b1});" +ANNOTATION: "VC_COV_UNR" +Block 21 "2517571270" "rptr_o <= (rptr_o + {{(Width - 1) {1'b0}}, 1'b1});" +CHECKSUM: "1817939962 2852341788" +INSTANCE: tb.dut.u_tlul_adapter_sram.u_rspfifo.gen_normal_fifo.u_fifo_cnt +ANNOTATION: "VC_COV_UNR" +Block 12 "398307645" "wptr_o <= (wptr_o + {{(Width - 1) {1'b0}}, 1'b1});" +ANNOTATION: "VC_COV_UNR" +Block 21 "2517571270" "rptr_o <= (rptr_o + {{(Width - 1) {1'b0}}, 1'b1});" +CHECKSUM: "698853052 1537087436" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic +ANNOTATION: "VC_COV_UNR" +Block 24 "3494210324" ";" +CHECKSUM: "3727300757 3190968676" +INSTANCE: tb.dut.gen_partitions[5].gen_buffered.u_part_buf +ANNOTATION: "VC_COV_UNR" +Block 22 "662519215" "scrmbl_mtx_req_o = 1'b1;" +ANNOTATION: "VC_COV_UNR" +Block 23 "617613755" "state_d = InitDescrWaitSt;" +ANNOTATION: "VC_COV_UNR" +Block 25 "2942482414" "scrmbl_mtx_req_o = 1'b1;" +ANNOTATION: "VC_COV_UNR" +Block 26 "3475289755" "state_d = InitSt;" +ANNOTATION: "VC_COV_UNR" +Block 68 "746922678" "scrmbl_mtx_req_o = 1'b1;" +ANNOTATION: "VC_COV_UNR" +Block 69 "369318088" "state_d = IntegScrWaitSt;" +ANNOTATION: "VC_COV_UNR" +Block 71 "1545788457" "scrmbl_mtx_req_o = 1'b1;" +ANNOTATION: "VC_COV_UNR" +Block 72 "2540127236" "state_d = IntegDigSt;" +ANNOTATION: "VC_COV_UNR" +Block 78 "4176855572" "state_d = IntegDigPadSt;" +ANNOTATION: "VC_COV_UNR" +Block 86 "1288945484" "scrmbl_mtx_req_o = 1'b1;" +ANNOTATION: "VC_COV_UNR" +Block 87 "984470440" "state_d = IntegDigFinSt;" +ANNOTATION: "VC_COV_UNR" +Block 105 "1192338528" "state_d = ErrorSt;" +ANNOTATION: "VC_COV_UNR" +Block 106 "2515805717" "error_d = CheckFailError;" +CHECKSUM: "3727300757 328877407" +INSTANCE: tb.dut.gen_partitions[6].gen_buffered.u_part_buf +ANNOTATION: "VC_COV_UNR" +Block 22 "662519215" "scrmbl_mtx_req_o = 1'b1;" +ANNOTATION: "VC_COV_UNR" +Block 23 "617613755" "state_d = InitDescrWaitSt;" +ANNOTATION: "VC_COV_UNR" +Block 25 "2942482414" "scrmbl_mtx_req_o = 1'b1;" +ANNOTATION: "VC_COV_UNR" +Block 26 "3475289755" "state_d = InitSt;" +ANNOTATION: "VC_COV_UNR" +Block 68 "746922678" "scrmbl_mtx_req_o = 1'b1;" +ANNOTATION: "VC_COV_UNR" +Block 69 "369318088" "state_d = IntegScrWaitSt;" +ANNOTATION: "VC_COV_UNR" +Block 71 "1545788457" "scrmbl_mtx_req_o = 1'b1;" +ANNOTATION: "VC_COV_UNR" +Block 72 "2540127236" "state_d = IntegDigSt;" +ANNOTATION: "VC_COV_UNR" +Block 77 "3141955456" "scrmbl_cmd_o = Digest;" +ANNOTATION: "VC_COV_UNR" +Block 105 "1192338528" "state_d = ErrorSt;" +ANNOTATION: "VC_COV_UNR" +Block 106 "2515805717" "error_d = CheckFailError;" +CHECKSUM: "3727300757 4034042967" +INSTANCE: tb.dut.gen_partitions[7].gen_buffered.u_part_buf +ANNOTATION: "VC_COV_UNR" +Block 78 "4176855572" "state_d = IntegDigPadSt;" +ANNOTATION: "VC_COV_UNR" +Block 86 "1288945484" "scrmbl_mtx_req_o = 1'b1;" +ANNOTATION: "VC_COV_UNR" +Block 87 "984470440" "state_d = IntegDigFinSt;" +ANNOTATION: "VC_COV_UNR" +Block 105 "1192338528" "state_d = ErrorSt;" +ANNOTATION: "VC_COV_UNR" +Block 106 "2515805717" "error_d = CheckFailError;" +CHECKSUM: "3727300757 2385925532" +INSTANCE: tb.dut.gen_partitions[8].gen_buffered.u_part_buf +ANNOTATION: "VC_COV_UNR" +Block 78 "4176855572" "state_d = IntegDigPadSt;" +ANNOTATION: "VC_COV_UNR" +Block 86 "1288945484" "scrmbl_mtx_req_o = 1'b1;" +ANNOTATION: "VC_COV_UNR" +Block 87 "984470440" "state_d = IntegDigFinSt;" +ANNOTATION: "VC_COV_UNR" +Block 105 "1192338528" "state_d = ErrorSt;" +ANNOTATION: "VC_COV_UNR" +Block 106 "2515805717" "error_d = CheckFailError;" +CHECKSUM: "3727300757 2380508828" +INSTANCE: tb.dut.gen_partitions[9].gen_buffered.u_part_buf +ANNOTATION: "VC_COV_UNR" +Block 78 "4176855572" "state_d = IntegDigPadSt;" +ANNOTATION: "VC_COV_UNR" +Block 86 "1288945484" "scrmbl_mtx_req_o = 1'b1;" +ANNOTATION: "VC_COV_UNR" +Block 87 "984470440" "state_d = IntegDigFinSt;" +ANNOTATION: "VC_COV_UNR" +Block 105 "1192338528" "state_d = ErrorSt;" +ANNOTATION: "VC_COV_UNR" +Block 106 "2515805717" "error_d = CheckFailError;" +CHECKSUM: "3727300757 3973220603" +INSTANCE: tb.dut.gen_partitions[10].gen_lifecycle.u_part_buf +ANNOTATION: "VC_COV_UNR" +Block 22 "662519215" "scrmbl_mtx_req_o = 1'b1;" +ANNOTATION: "VC_COV_UNR" +Block 25 "2942482414" "scrmbl_mtx_req_o = 1'b1;" +ANNOTATION: "VC_COV_UNR" +Block 68 "746922678" "scrmbl_mtx_req_o = 1'b1;" +ANNOTATION: "VC_COV_UNR" +Block 71 "1545788457" "scrmbl_mtx_req_o = 1'b1;" +ANNOTATION: "VC_COV_UNR" +Block 74 "736744825" "scrmbl_mtx_req_o = 1'b1;" +ANNOTATION: "VC_COV_UNR" +Block 86 "1288945484" "scrmbl_mtx_req_o = 1'b1;" +ANNOTATION: "VC_COV_UNR" +Block 89 "967932616" "scrmbl_mtx_req_o = 1'b1;" +ANNOTATION: "VC_COV_UNR" +Block 92 "3253244488" "scrmbl_mtx_req_o = 1'b1;" +ANNOTATION: "VC_COV_UNR" +Block 105 "1192338528" "state_d = ErrorSt;" +ANNOTATION: "VC_COV_UNR" +Block 106 "2515805717" "error_d = CheckFailError;" +CHECKSUM: "3882079776 1965827338" +INSTANCE: tb.dut.u_otp_ctrl_scrmbl +ANNOTATION: "VC_COV_UNR" +Block 28 "3494210324" ";" +CHECKSUM: "4255502330 223073768" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr3_field3 +ANNOTATION: "VC_COV_UNR" +Block 4 "1824183207" "q <= wr_data;" +CHECKSUM: "4255502330 223073768" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr3_field4 +ANNOTATION: "VC_COV_UNR" +Block 4 "1824183207" "q <= wr_data;" +CHECKSUM: "4255502330 223073768" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr3_field5 +ANNOTATION: "VC_COV_UNR" +Block 4 "1824183207" "q <= wr_data;" +CHECKSUM: "4255502330 223073768" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr3_field6 +ANNOTATION: "VC_COV_UNR" +Block 4 "1824183207" "q <= wr_data;" +CHECKSUM: "4255502330 223073768" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr3_field7 +ANNOTATION: "VC_COV_UNR" +Block 4 "1824183207" "q <= wr_data;" +CHECKSUM: "4255502330 223073768" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr3_field8 +ANNOTATION: "VC_COV_UNR" +Block 4 "1824183207" "q <= wr_data;" +CHECKSUM: "4255502330 223073768" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr5_field2 +ANNOTATION: "VC_COV_UNR" +Block 4 "1824183207" "q <= wr_data;" +CHECKSUM: "4255502330 223073768" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr5_field3 +ANNOTATION: "VC_COV_UNR" +Block 4 "1824183207" "q <= wr_data;" +CHECKSUM: "4255502330 223073768" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr5_field4 +ANNOTATION: "VC_COV_UNR" +Block 4 "1824183207" "q <= wr_data;" +CHECKSUM: "4255502330 223073768" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr5_field5 +ANNOTATION: "VC_COV_UNR" +Block 4 "1824183207" "q <= wr_data;" +CHECKSUM: "4255502330 223073768" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr7_field0 +ANNOTATION: "VC_COV_UNR" +Block 4 "1824183207" "q <= wr_data;" +CHECKSUM: "4255502330 223073768" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr7_field1 +ANNOTATION: "VC_COV_UNR" +Block 4 "1824183207" "q <= wr_data;" +CHECKSUM: "4255502330 223073768" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr7_field2 +ANNOTATION: "VC_COV_UNR" +Block 4 "1824183207" "q <= wr_data;" +CHECKSUM: "4255502330 223073768" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr7_field3 +ANNOTATION: "VC_COV_UNR" +Block 4 "1824183207" "q <= wr_data;" +CHECKSUM: "3162909804 919553166" +INSTANCE: tb.dut.gen_partitions[0].gen_unbuffered.u_part_unbuf +ANNOTATION: "VC_COV_UNR" +Block 17 "814628507" "error_d = MacroEccCorrError;" +ANNOTATION: "VC_COV_UNR" +Block 19 "2376363309" "state_d = ErrorSt;" +ANNOTATION: "VC_COV_UNR" +Block 32 "3415759745" "error_d = MacroEccCorrError;" +ANNOTATION: "VC_COV_UNR" +Block 34 "3854455635" "state_d = ErrorSt;" +CHECKSUM: "1335069400 3084451679" +INSTANCE: tb.dut.u_tlul_adapter_sram +ANNOTATION: "VC_COV_UNR" +Block 20 "3478134645" "d_valid = 1'b1;" +CHECKSUM: "189358556 478664514" +INSTANCE: tb.dut +ANNOTATION: "VC_COV_UNR" +Block 15 "1636116421" "tlul_oob_err_d = 1'b1;" +ANNOTATION: "VC_COV_UNR" +Block 32 "3434355351" "part_access_pre[k] = {2 {MuBi8True}};" +CHECKSUM: "903559179 545489449" +INSTANCE: tb.dut.u_otp_ctrl_dai +ANNOTATION: "VC_COV_UNR" +Block 16 "175586303" "state_d = ErrorSt;" +ANNOTATION: "VC_COV_UNR" +Block 68 "1681789786" "state_d = ErrorSt;" +CHECKSUM: "1158524476 3747170265" +INSTANCE: tb.dut.u_otp_ctrl_kdi +ANNOTATION: "VC_COV_UNR" +Block 88 "3038555774" "state_d = DigLoadSt;" +CHECKSUM: "3727300757 2582220255" +INSTANCE: tb.dut.gen_partitions[5].gen_buffered.u_part_buf +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +State InitDescrSt "3204" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +State InitDescrWaitSt "2472" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +State IntegDigPadSt "855" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +State IntegScrSt "3418" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +State IntegScrWaitSt "2207" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +Transition CnstyReadWaitSt->CnstyReadSt "2684->107" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +Transition IntegDigClrSt->IdleSt "2625->1357" +Fsm error_q "2410907799" +ANNOTATION: "VC_COV_UNR" +Transition CheckFailError->FsmStateError "6->7" +Fsm error_q "2410907799" +ANNOTATION: "VC_COV_UNR" +Transition CheckFailError->MacroEccCorrError "6->2" +Fsm error_q "2410907799" +ANNOTATION: "VC_COV_UNR" +Transition FsmStateError->CheckFailError "7->6" +Fsm error_q "2410907799" +ANNOTATION: "VC_COV_UNR" +Transition FsmStateError->MacroEccCorrError "7->2" +CHECKSUM: "3727300757 2582220255" +INSTANCE: tb.dut.gen_partitions[6].gen_buffered.u_part_buf +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +State InitDescrSt "3204" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +State InitDescrWaitSt "2472" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +State IntegScrSt "3418" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +State IntegScrWaitSt "2207" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +Transition CnstyReadWaitSt->CnstyReadSt "2684->107" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +Transition IntegDigClrSt->IdleSt "2625->1357" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +Transition IntegDigSt->IntegDigFinSt "1890->1765" +Fsm error_q "2410907799" +ANNOTATION: "VC_COV_UNR" +Transition CheckFailError->FsmStateError "6->7" +Fsm error_q "2410907799" +ANNOTATION: "VC_COV_UNR" +Transition CheckFailError->MacroEccCorrError "6->2" +Fsm error_q "2410907799" +ANNOTATION: "VC_COV_UNR" +Transition FsmStateError->CheckFailError "7->6" +Fsm error_q "2410907799" +ANNOTATION: "VC_COV_UNR" +Transition FsmStateError->MacroEccCorrError "7->2" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[9].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[9].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[9].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[10].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[10].gen_lifecycle.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[0].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[10].gen_lifecycle.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[1].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[10].gen_lifecycle.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[2].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[10].gen_lifecycle.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[3].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[10].gen_lifecycle.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[4].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[10].gen_lifecycle.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[5].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[10].gen_lifecycle.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[6].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[10].gen_lifecycle.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[7].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[10].gen_lifecycle.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[8].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[10].gen_lifecycle.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[9].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "1436819047 249500095" +INSTANCE: tb.dut.gen_partitions[10].gen_lifecycle.u_part_buf.u_otp_ctrl_ecc_reg.gen_ecc_dec[10].u_prim_secded_inv_72_64_dec +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [0] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [1] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [2] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [3] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [4] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [5] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [6] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 syndrome_o [7] "logic syndrome_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [0] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 err_o [1] "logic err_o[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 err_o [1] "logic err_o[1:0]" +CHECKSUM: "189358556 549301488" +INSTANCE: tb.dut +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_ast_pwr_seq_o.pwr_seq [0] "logic otp_ast_pwr_seq_o.pwr_seq[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_ast_pwr_seq_o.pwr_seq [0] "logic otp_ast_pwr_seq_o.pwr_seq[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_ast_pwr_seq_o.pwr_seq [1] "logic otp_ast_pwr_seq_o.pwr_seq[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_ast_pwr_seq_o.pwr_seq [1] "logic otp_ast_pwr_seq_o.pwr_seq[1:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [0] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [0] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [1] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [1] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [2] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [2] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [3] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [3] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [4] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [4] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [5] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [5] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [6] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [6] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [7] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [7] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [8] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [8] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [9] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [9] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [10] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [10] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [11] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [11] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [12] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [12] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [13] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [13] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [14] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [14] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [15] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [15] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [16] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [16] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [17] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [17] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [18] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [18] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [19] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [19] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [20] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [20] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [21] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [21] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [22] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [22] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [23] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [23] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [24] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [24] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [25] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [25] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [26] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [26] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [27] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [27] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [28] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [28] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [29] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [29] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [30] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [30] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 lc_otp_vendor_test_o.status [31] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 lc_otp_vendor_test_o.status [31] "logic lc_otp_vendor_test_o.status[31:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed_valid "logic otp_keymgr_key_o.owner_seed_valid" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed_valid "logic otp_keymgr_key_o.owner_seed_valid" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [0] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [0] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [1] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [1] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [2] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [2] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [3] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [3] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [4] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [4] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [5] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [5] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [6] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [6] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [7] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [7] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [8] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [8] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [9] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [9] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [10] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [10] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [11] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [11] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [12] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [12] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [13] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [13] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [14] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [14] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [15] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [15] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [16] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [16] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [17] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [17] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [18] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [18] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [19] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [19] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [20] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [20] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [21] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [21] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [22] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [22] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [23] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [23] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [24] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [24] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [25] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [25] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [26] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [26] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [27] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [27] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [28] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [28] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [29] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [29] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [30] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [30] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [31] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [31] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [32] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [32] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [33] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [33] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [34] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [34] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [35] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [35] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [36] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [36] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [37] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [37] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [38] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [38] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [39] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [39] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [40] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [40] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [41] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [41] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [42] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [42] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [43] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [43] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [44] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [44] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [45] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [45] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [46] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [46] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [47] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [47] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [48] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [48] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [49] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [49] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [50] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [50] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [51] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [51] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [52] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [52] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [53] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [53] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [54] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [54] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [55] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [55] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [56] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [56] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [57] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [57] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [58] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [58] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [59] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [59] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [60] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [60] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [61] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [61] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [62] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [62] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [63] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [63] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [64] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [64] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [65] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [65] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [66] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [66] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [67] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [67] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [68] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [68] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [69] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [69] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [70] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [70] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [71] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [71] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [72] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [72] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [73] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [73] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [74] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [74] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [75] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [75] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [76] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [76] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [77] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [77] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [78] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [78] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [79] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [79] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [80] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [80] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [81] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [81] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [82] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [82] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [83] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [83] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [84] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [84] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [85] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [85] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [86] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [86] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [87] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [87] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [88] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [88] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [89] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [89] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [90] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [90] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [91] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [91] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [92] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [92] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [93] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [93] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [94] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [94] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [95] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [95] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [96] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [96] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [97] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [97] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [98] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [98] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [99] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [99] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [100] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [100] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [101] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [101] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [102] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [102] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [103] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [103] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [104] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [104] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [105] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [105] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [106] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [106] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [107] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [107] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [108] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [108] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [109] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [109] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [110] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [110] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [111] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [111] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [112] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [112] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [113] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [113] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [114] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [114] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [115] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [115] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [116] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [116] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [117] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [117] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [118] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [118] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [119] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [119] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [120] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [120] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [121] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [121] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [122] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [122] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [123] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [123] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [124] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [124] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [125] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [125] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [126] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [126] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [127] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [127] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [128] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [128] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [129] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [129] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [130] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [130] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [131] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [131] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [132] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [132] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [133] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [133] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [134] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [134] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [135] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [135] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [136] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [136] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [137] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [137] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [138] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [138] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [139] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [139] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [140] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [140] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [141] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [141] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [142] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [142] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [143] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [143] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [144] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [144] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [145] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [145] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [146] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [146] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [147] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [147] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [148] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [148] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [149] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [149] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [150] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [150] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [151] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [151] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [152] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [152] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [153] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [153] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [154] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [154] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [155] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [155] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [156] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [156] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [157] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [157] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [158] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [158] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [159] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [159] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [160] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [160] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [161] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [161] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [162] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [162] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [163] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [163] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [164] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [164] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [165] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [165] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [166] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [166] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [167] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [167] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [168] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [168] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [169] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [169] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [170] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [170] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [171] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [171] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [172] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [172] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [173] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [173] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [174] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [174] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [175] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [175] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [176] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [176] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [177] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [177] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [178] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [178] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [179] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [179] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [180] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [180] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [181] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [181] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [182] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [182] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [183] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [183] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [184] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [184] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [185] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [185] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [186] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [186] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [187] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [187] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [188] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [188] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [189] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [189] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [190] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [190] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [191] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [191] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [192] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [192] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [193] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [193] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [194] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [194] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [195] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [195] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [196] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [196] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [197] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [197] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [198] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [198] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [199] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [199] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [200] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [200] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [201] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [201] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [202] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [202] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [203] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [203] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [204] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [204] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [205] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [205] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [206] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [206] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [207] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [207] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [208] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [208] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [209] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [209] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [210] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [210] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [211] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [211] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [212] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [212] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [213] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [213] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [214] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [214] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [215] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [215] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [216] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [216] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [217] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [217] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [218] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [218] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [219] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [219] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [220] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [220] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [221] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [221] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [222] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [222] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [223] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [223] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [224] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [224] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [225] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [225] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [226] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [226] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [227] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [227] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [228] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [228] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [229] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [229] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [230] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [230] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [231] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [231] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [232] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [232] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [233] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [233] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [234] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [234] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [235] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [235] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [236] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [236] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [237] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [237] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [238] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [238] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [239] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [239] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [240] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [240] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [241] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [241] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [242] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [242] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [243] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [243] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [244] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [244] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [245] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [245] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [246] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [246] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [247] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [247] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [248] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [248] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [249] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [249] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [250] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [250] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [251] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [251] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [252] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [252] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [253] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [253] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [254] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [254] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.owner_seed [255] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.owner_seed [255] "logic otp_keymgr_key_o.owner_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed_valid "logic otp_keymgr_key_o.creator_seed_valid" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed_valid "logic otp_keymgr_key_o.creator_seed_valid" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [0] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [0] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [1] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [1] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [2] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [2] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [3] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [3] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [4] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [4] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [5] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [5] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [6] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [6] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [7] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [7] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [8] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [8] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [9] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [9] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [10] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [10] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [11] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [11] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [12] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [12] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [13] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [13] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [14] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [14] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [15] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [15] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [16] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [16] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [17] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [17] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [18] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [18] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [19] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [19] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [20] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [20] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [21] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [21] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [22] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [22] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [23] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [23] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [24] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [24] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [25] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [25] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [26] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [26] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [27] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [27] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [28] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [28] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [29] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [29] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [30] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [30] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [31] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [31] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [32] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [32] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [33] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [33] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [34] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [34] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [35] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [35] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [36] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [36] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [37] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [37] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [38] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [38] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [39] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [39] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [40] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [40] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [41] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [41] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [42] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [42] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [43] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [43] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [44] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [44] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [45] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [45] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [46] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [46] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [47] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [47] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [48] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [48] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [49] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [49] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [50] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [50] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [51] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [51] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [52] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [52] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [53] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [53] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [54] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [54] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [55] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [55] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [56] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [56] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [57] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [57] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [58] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [58] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [59] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [59] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [60] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [60] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [61] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [61] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [62] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [62] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [63] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [63] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [64] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [64] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [65] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [65] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [66] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [66] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [67] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [67] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [68] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [68] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [69] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [69] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [70] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [70] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [71] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [71] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [72] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [72] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [73] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [73] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [74] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [74] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [75] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [75] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [76] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [76] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [77] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [77] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [78] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [78] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [79] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [79] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [80] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [80] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [81] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [81] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [82] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [82] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [83] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [83] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [84] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [84] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [85] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [85] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [86] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [86] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [87] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [87] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [88] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [88] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [89] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [89] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [90] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [90] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [91] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [91] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [92] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [92] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [93] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [93] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [94] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [94] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [95] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [95] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [96] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [96] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [97] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [97] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [98] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [98] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [99] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [99] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [100] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [100] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [101] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [101] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [102] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [102] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [103] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [103] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [104] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [104] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [105] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [105] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [106] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [106] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [107] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [107] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [108] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [108] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [109] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [109] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [110] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [110] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [111] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [111] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [112] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [112] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [113] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [113] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [114] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [114] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [115] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [115] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [116] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [116] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [117] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [117] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [118] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [118] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [119] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [119] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [120] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [120] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [121] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [121] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [122] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [122] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [123] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [123] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [124] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [124] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [125] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [125] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [126] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [126] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [127] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [127] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [128] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [128] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [129] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [129] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [130] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [130] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [131] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [131] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [132] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [132] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [133] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [133] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [134] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [134] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [135] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [135] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [136] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [136] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [137] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [137] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [138] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [138] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [139] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [139] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [140] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [140] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [141] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [141] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [142] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [142] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [143] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [143] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [144] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [144] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [145] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [145] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [146] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [146] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [147] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [147] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [148] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [148] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [149] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [149] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [150] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [150] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [151] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [151] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [152] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [152] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [153] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [153] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [154] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [154] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [155] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [155] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [156] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [156] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [157] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [157] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [158] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [158] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [159] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [159] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [160] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [160] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [161] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [161] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [162] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [162] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [163] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [163] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [164] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [164] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [165] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [165] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [166] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [166] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [167] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [167] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [168] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [168] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [169] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [169] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [170] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [170] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [171] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [171] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [172] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [172] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [173] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [173] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [174] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [174] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [175] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [175] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [176] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [176] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [177] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [177] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [178] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [178] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [179] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [179] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [180] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [180] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [181] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [181] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [182] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [182] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [183] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [183] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [184] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [184] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [185] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [185] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [186] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [186] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [187] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [187] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [188] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [188] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [189] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [189] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [190] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [190] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [191] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [191] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [192] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [192] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [193] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [193] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [194] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [194] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [195] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [195] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [196] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [196] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [197] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [197] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [198] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [198] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [199] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [199] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [200] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [200] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [201] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [201] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [202] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [202] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [203] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [203] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [204] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [204] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [205] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [205] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [206] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [206] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [207] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [207] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [208] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [208] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [209] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [209] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [210] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [210] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [211] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [211] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [212] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [212] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [213] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [213] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [214] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [214] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [215] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [215] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [216] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [216] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [217] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [217] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [218] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [218] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [219] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [219] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [220] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [220] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [221] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [221] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [222] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [222] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [223] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [223] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [224] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [224] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [225] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [225] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [226] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [226] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [227] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [227] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [228] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [228] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [229] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [229] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [230] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [230] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [231] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [231] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [232] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [232] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [233] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [233] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [234] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [234] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [235] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [235] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [236] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [236] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [237] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [237] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [238] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [238] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [239] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [239] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [240] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [240] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [241] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [241] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [242] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [242] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [243] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [243] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [244] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [244] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [245] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [245] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [246] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [246] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [247] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [247] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [248] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [248] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [249] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [249] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [250] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [250] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [251] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [251] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [252] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [252] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [253] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [253] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [254] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [254] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 otp_keymgr_key_o.creator_seed [255] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 otp_keymgr_key_o.creator_seed [255] "logic otp_keymgr_key_o.creator_seed[255:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 cio_test_o [0] "logic cio_test_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 cio_test_o [0] "logic cio_test_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 cio_test_o [1] "logic cio_test_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 cio_test_o [1] "logic cio_test_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 cio_test_o [2] "logic cio_test_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 cio_test_o [2] "logic cio_test_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 cio_test_o [3] "logic cio_test_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 cio_test_o [3] "logic cio_test_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 cio_test_o [4] "logic cio_test_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 cio_test_o [4] "logic cio_test_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 cio_test_o [5] "logic cio_test_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 cio_test_o [5] "logic cio_test_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 cio_test_o [6] "logic cio_test_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 cio_test_o [6] "logic cio_test_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 0to1 cio_test_o [7] "logic cio_test_o[7:0]" +ANNOTATION: "VC_COV_UNR" +Toggle 1to0 cio_test_o [7] "logic cio_test_o[7:0]" +CHECKSUM: "1611327958 113940473" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top +ANNOTATION: "VC_COV_UNR" +Condition 20 "3585319611" "(reg_we && ((!addrmiss))) 1 -1" (2 "10") +ANNOTATION: "VC_COV_UNR" +Condition 22 "1026062099" "(addrmiss | wr_err | intg_err) 1 -1" (4 "100") +CHECKSUM: "698853052 2882888745" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic +ANNOTATION: "VC_COV_UNR" +Condition 1 "2104830463" "(cmd_i == Init) 1 -1" (1 "0") +CHECKSUM: "3727300757 2582220255" +INSTANCE: tb.dut.gen_partitions[10].gen_lifecycle.u_part_buf +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +State InitDescrSt "3204" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +State InitDescrWaitSt "2472" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +State IntegDigFinSt "1765" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +State IntegDigPadSt "855" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +State IntegDigSt "1890" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +State IntegDigWaitSt "2290" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +State IntegScrSt "3418" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +State IntegScrWaitSt "2207" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +Transition IdleSt->IntegDigClrSt "1357->2625" +Fsm error_q "2410907799" +ANNOTATION: "VC_COV_UNR" +Transition CheckFailError->FsmStateError "6->7" +Fsm error_q "2410907799" +ANNOTATION: "VC_COV_UNR" +Transition CheckFailError->MacroEccCorrError "6->2" +Fsm error_q "2410907799" +ANNOTATION: "VC_COV_UNR" +Transition FsmStateError->CheckFailError "7->6" +Fsm error_q "2410907799" +ANNOTATION: "VC_COV_UNR" +Transition FsmStateError->MacroEccCorrError "7->2" +CHECKSUM: "3162909804 3458814989" +INSTANCE: tb.dut.gen_partitions[0].gen_unbuffered.u_part_unbuf +Fsm state_q "4141872371" +ANNOTATION: "VC_COV_UNR" +Transition ResetSt->IdleSt "694->745" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +State MacroEccCorrError "2" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition CheckFailError->AccessError "6->5" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition CheckFailError->FsmStateError "6->7" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition FsmStateError->AccessError "7->5" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition FsmStateError->CheckFailError "7->6" +CHECKSUM: "3162909804 3458814989" +INSTANCE: tb.dut.gen_partitions[1].gen_unbuffered.u_part_unbuf +Fsm state_q "4141872371" +ANNOTATION: "VC_COV_UNR" +Transition ResetSt->IdleSt "694->745" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition AccessError->CheckFailError "5->6" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition AccessError->MacroEccCorrError "5->2" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition CheckFailError->AccessError "6->5" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition CheckFailError->FsmStateError "6->7" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition CheckFailError->MacroEccCorrError "6->2" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition FsmStateError->AccessError "7->5" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition FsmStateError->CheckFailError "7->6" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition FsmStateError->MacroEccCorrError "7->2" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition MacroEccCorrError->AccessError "2->5" +CHECKSUM: "3162909804 3458814989" +INSTANCE: tb.dut.gen_partitions[2].gen_unbuffered.u_part_unbuf +Fsm state_q "4141872371" +ANNOTATION: "VC_COV_UNR" +Transition ResetSt->IdleSt "694->745" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition AccessError->CheckFailError "5->6" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition AccessError->MacroEccCorrError "5->2" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition CheckFailError->AccessError "6->5" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition CheckFailError->FsmStateError "6->7" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition CheckFailError->MacroEccCorrError "6->2" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition FsmStateError->AccessError "7->5" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition FsmStateError->CheckFailError "7->6" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition FsmStateError->MacroEccCorrError "7->2" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition MacroEccCorrError->AccessError "2->5" +CHECKSUM: "3162909804 3458814989" +INSTANCE: tb.dut.gen_partitions[3].gen_unbuffered.u_part_unbuf +Fsm state_q "4141872371" +ANNOTATION: "VC_COV_UNR" +Transition ResetSt->IdleSt "694->745" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition AccessError->CheckFailError "5->6" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition AccessError->MacroEccCorrError "5->2" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition CheckFailError->AccessError "6->5" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition CheckFailError->FsmStateError "6->7" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition CheckFailError->MacroEccCorrError "6->2" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition FsmStateError->AccessError "7->5" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition FsmStateError->CheckFailError "7->6" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition FsmStateError->MacroEccCorrError "7->2" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition MacroEccCorrError->AccessError "2->5" +CHECKSUM: "3162909804 3458814989" +INSTANCE: tb.dut.gen_partitions[4].gen_unbuffered.u_part_unbuf +Fsm state_q "4141872371" +ANNOTATION: "VC_COV_UNR" +Transition ResetSt->IdleSt "694->745" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition AccessError->CheckFailError "5->6" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition AccessError->MacroEccCorrError "5->2" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition CheckFailError->AccessError "6->5" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition CheckFailError->FsmStateError "6->7" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition CheckFailError->MacroEccCorrError "6->2" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition FsmStateError->AccessError "7->5" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition FsmStateError->CheckFailError "7->6" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition FsmStateError->MacroEccCorrError "7->2" +Fsm error_q "2210720134" +ANNOTATION: "VC_COV_UNR" +Transition MacroEccCorrError->AccessError "2->5" +CHECKSUM: "3727300757 2582220255" +INSTANCE: tb.dut.gen_partitions[7].gen_buffered.u_part_buf +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +State IntegDigPadSt "855" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +Transition CnstyReadWaitSt->CnstyReadSt "2684->107" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +Transition InitWaitSt->InitSt "945->3367" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +Transition IntegDigClrSt->IdleSt "2625->1357" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +Transition IntegDigClrSt->IntegDigSt "2625->1890" +Fsm error_q "2410907799" +ANNOTATION: "VC_COV_UNR" +Transition CheckFailError->FsmStateError "6->7" +Fsm error_q "2410907799" +ANNOTATION: "VC_COV_UNR" +Transition CheckFailError->MacroEccCorrError "6->2" +Fsm error_q "2410907799" +ANNOTATION: "VC_COV_UNR" +Transition FsmStateError->CheckFailError "7->6" +Fsm error_q "2410907799" +ANNOTATION: "VC_COV_UNR" +Transition FsmStateError->MacroEccCorrError "7->2" +CHECKSUM: "3727300757 2582220255" +INSTANCE: tb.dut.gen_partitions[8].gen_buffered.u_part_buf +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +State IntegDigPadSt "855" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +Transition CnstyReadWaitSt->CnstyReadSt "2684->107" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +Transition InitWaitSt->InitSt "945->3367" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +Transition IntegDigClrSt->IdleSt "2625->1357" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +Transition IntegDigClrSt->IntegDigSt "2625->1890" +Fsm error_q "2410907799" +ANNOTATION: "VC_COV_UNR" +Transition CheckFailError->FsmStateError "6->7" +Fsm error_q "2410907799" +ANNOTATION: "VC_COV_UNR" +Transition CheckFailError->MacroEccCorrError "6->2" +Fsm error_q "2410907799" +ANNOTATION: "VC_COV_UNR" +Transition FsmStateError->CheckFailError "7->6" +Fsm error_q "2410907799" +ANNOTATION: "VC_COV_UNR" +Transition FsmStateError->MacroEccCorrError "7->2" +CHECKSUM: "3727300757 2582220255" +INSTANCE: tb.dut.gen_partitions[9].gen_buffered.u_part_buf +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +State IntegDigPadSt "855" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +Transition CnstyReadWaitSt->CnstyReadSt "2684->107" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +Transition InitWaitSt->InitSt "945->3367" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +Transition IntegDigClrSt->IdleSt "2625->1357" +Fsm state_q "441128463" +ANNOTATION: "VC_COV_UNR" +Transition IntegDigClrSt->IntegDigSt "2625->1890" +Fsm error_q "2410907799" +ANNOTATION: "VC_COV_UNR" +Transition CheckFailError->FsmStateError "6->7" +Fsm error_q "2410907799" +ANNOTATION: "VC_COV_UNR" +Transition CheckFailError->MacroEccCorrError "6->2" +Fsm error_q "2410907799" +ANNOTATION: "VC_COV_UNR" +Transition FsmStateError->CheckFailError "7->6" +Fsm error_q "2410907799" +ANNOTATION: "VC_COV_UNR" +Transition FsmStateError->MacroEccCorrError "7->2" +CHECKSUM: "903559179 4258846959" +INSTANCE: tb.dut.u_otp_ctrl_dai +Fsm error_q "1085514286" +ANNOTATION: "VC_COV_UNR" +Transition AccessError->MacroEccCorrError "5->2" +Fsm error_q "1085514286" +ANNOTATION: "VC_COV_UNR" +Transition FsmStateError->AccessError "7->5" +Fsm error_q "1085514286" +ANNOTATION: "VC_COV_UNR" +Transition FsmStateError->MacroEccCorrError "7->2" +CHECKSUM: "1158524476 2379312231" +INSTANCE: tb.dut.u_otp_ctrl_kdi +Fsm state_q "2979668442" +ANNOTATION: "VC_COV_UNR" +Transition DigWaitSt->DigLoadSt "913->183" +CHECKSUM: "165375753 304066633" +INSTANCE: tb.dut.u_otp_ctrl_lfsr_timer +ANNOTATION: "VC_COV_UNR" +Condition 15 "1557524712" "(edn_req_o & edn_ack_i) 1 -1" (1 "01") +CHECKSUM: "189358556 3907569978" +INSTANCE: tb.dut +ANNOTATION: "VC_COV_UNR" +Condition 1 "83486244" "(tlul_part_sel_oh != '0) 1 -1" (1 "0") +ANNOTATION: "VC_COV_UNR" +Condition 2 "1218027842" "(((|part_tlul_gnt)) | tlul_oob_err_q) 1 -1" (2 "01") +ANNOTATION: "VC_COV_UNR" +Condition 3 "3291433605" "(((|part_tlul_rvalid)) | tlul_oob_err_q) 1 -1" (2 "01") +ANNOTATION: "VC_COV_UNR" +Condition 4 "3779635843" "(fatal_bus_integ_error_q | ((|intg_error))) 1 -1" (3 "10") +ANNOTATION: "VC_COV_UNR" +Condition 5 "1876397257" "(part_error[k] == MacroError) 1 -1" (2 "1") +ANNOTATION: "VC_COV_UNR" +Condition 10 "2334459673" "(otp_rvalid & otp_fifo_valid) 1 -1" (2 "10") +ANNOTATION: "VC_COV_UNR" +Condition 13 "1319238213" "(reg2hw.direct_access_cmd.digest.qe | reg2hw.direct_access_cmd.wr.qe | reg2hw.direct_access_cmd.rd.qe) 1 -1" (2 "001") +ANNOTATION: "VC_COV_UNR" +Condition 13 "1319238213" "(reg2hw.direct_access_cmd.digest.qe | reg2hw.direct_access_cmd.wr.qe | reg2hw.direct_access_cmd.rd.qe) 1 -1" (3 "010") +ANNOTATION: "VC_COV_UNR" +Condition 13 "1319238213" "(reg2hw.direct_access_cmd.digest.qe | reg2hw.direct_access_cmd.wr.qe | reg2hw.direct_access_cmd.rd.qe) 1 -1" (4 "100") +ANNOTATION: "VC_COV_UNR" +Condition 24 "619555966" "(otp_arb_valid & otp_rsp_fifo_ready) 1 -1" (2 "10") +ANNOTATION: "vcs_gen_start:k=10:vcs_gen_end:VC_COV_UNR" +Condition 42 "1479216946" "(({tlul_addr, 2'b0} >= 11'b11110101000) & ({1'b0, {tlul_addr, 2'b0}} < gen_part_sel[10].PartEnd)) 1 -1" (2 "10") +CHECKSUM: "1746381268 1271541636" +INSTANCE: tb.dut.u_reg_core.u_socket +ANNOTATION: "VC_COV_UNR" +Condition 3 "118253128" "(tl_t_o.a_valid & tl_t_i.a_ready) 1 -1" (1 "01") +CHECKSUM: "74367784 3785313510" +INSTANCE: tb.dut.u_reg_core.u_reg_if +ANNOTATION: "VC_COV_UNR" +Condition 18 "3340270436" "(addr_align_err | malformed_meta_err | tl_err | instr_error | intg_error) 1 -1" (5 "01000") +CHECKSUM: "74367784 3785313510" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_reg_if +ANNOTATION: "VC_COV_UNR" +Condition 18 "3340270436" "(addr_align_err | malformed_meta_err | tl_err | instr_error | intg_error) 1 -1" (5 "01000") +CHECKSUM: "4255502330 3274445021" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr3_field3 +ANNOTATION: "VC_COV_UNR" +Condition 1 "2397158838" "(wr_en ? wr_data : qs) 1 -1" (2 "1") +CHECKSUM: "4255502330 3274445021" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr3_field4 +ANNOTATION: "VC_COV_UNR" +Condition 1 "2397158838" "(wr_en ? wr_data : qs) 1 -1" (2 "1") +CHECKSUM: "4255502330 3274445021" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr3_field5 +ANNOTATION: "VC_COV_UNR" +Condition 1 "2397158838" "(wr_en ? wr_data : qs) 1 -1" (2 "1") +CHECKSUM: "4255502330 3274445021" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr3_field6 +ANNOTATION: "VC_COV_UNR" +Condition 1 "2397158838" "(wr_en ? wr_data : qs) 1 -1" (2 "1") +CHECKSUM: "4255502330 3274445021" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr3_field7 +ANNOTATION: "VC_COV_UNR" +Condition 1 "2397158838" "(wr_en ? wr_data : qs) 1 -1" (2 "1") +CHECKSUM: "4255502330 3274445021" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr3_field8 +ANNOTATION: "VC_COV_UNR" +Condition 1 "2397158838" "(wr_en ? wr_data : qs) 1 -1" (2 "1") +CHECKSUM: "4255502330 3274445021" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr5_field2 +ANNOTATION: "VC_COV_UNR" +Condition 1 "2397158838" "(wr_en ? wr_data : qs) 1 -1" (2 "1") +CHECKSUM: "4255502330 3274445021" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr5_field4 +ANNOTATION: "VC_COV_UNR" +Condition 1 "2397158838" "(wr_en ? wr_data : qs) 1 -1" (2 "1") +CHECKSUM: "4255502330 3274445021" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr5_field5 +ANNOTATION: "VC_COV_UNR" +Condition 1 "2397158838" "(wr_en ? wr_data : qs) 1 -1" (2 "1") +CHECKSUM: "4255502330 3274445021" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr7_field2 +ANNOTATION: "VC_COV_UNR" +Condition 1 "2397158838" "(wr_en ? wr_data : qs) 1 -1" (2 "1") +CHECKSUM: "4255502330 3274445021" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr7_field3 +ANNOTATION: "VC_COV_UNR" +Condition 1 "2397158838" "(wr_en ? wr_data : qs) 1 -1" (2 "1") +CHECKSUM: "4255502330 3858770513" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr5_field3 +ANNOTATION: "VC_COV_UNR" +Condition 1 "1301967206" "(wr_en ? wr_data : qs) 1 -1" (2 "1") +CHECKSUM: "4255502330 3858770513" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr7_field1 +ANNOTATION: "VC_COV_UNR" +Condition 1 "1301967206" "(wr_en ? wr_data : qs) 1 -1" (2 "1") +CHECKSUM: "4255502330 3201188367" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr7_field0 +ANNOTATION: "VC_COV_UNR" +Condition 1 "1807203824" "(wr_en ? wr_data : qs) 1 -1" (2 "1") +CHECKSUM: "2099741489 1445279304" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr3_field0.wr_en_data_arb +ANNOTATION: "VC_COV_UNR" +Condition 1 "505266581" "(we | de) 1 -1" (2 "01") +CHECKSUM: "2099741489 1445279304" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr3_field1.wr_en_data_arb +ANNOTATION: "VC_COV_UNR" +Condition 1 "505266581" "(we | de) 1 -1" (2 "01") +CHECKSUM: "2099741489 3636044484" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr3_field2.wr_en_data_arb +ANNOTATION: "VC_COV_UNR" +Condition 1 "505266581" "(we | de) 1 -1" (2 "01") +ANNOTATION: "VC_COV_UNR" +Condition 2 "2306794614" "((de ? d : q) & (we ? ((~wd)) : '1)) 1 -1" (2 "10") +ANNOTATION: "VC_COV_UNR" +Condition 2 "2306794614" "((de ? d : q) & (we ? ((~wd)) : '1)) 1 -1" (3 "11") +ANNOTATION: "VC_COV_UNR" +Condition 3 "2289961458" "(de ? d : q) 1 -1" (2 "1") +CHECKSUM: "2099741489 1283100255" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr5_field6.wr_en_data_arb +ANNOTATION: "VC_COV_UNR" +Condition 1 "505266581" "(we | de) 1 -1" (2 "01") +CHECKSUM: "2099741489 1077956591" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr5_field0.wr_en_data_arb +ANNOTATION: "VC_COV_UNR" +Condition 1 "505266581" "(we | de) 1 -1" (2 "01") +CHECKSUM: "2099741489 4164822555" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr5_field1.wr_en_data_arb +ANNOTATION: "VC_COV_UNR" +Condition 1 "505266581" "(we | de) 1 -1" (2 "01") +CHECKSUM: "1335069400 1628136802" +INSTANCE: tb.dut.u_tlul_adapter_sram +ANNOTATION: "VC_COV_UNR" +Condition 2 "3455933711" "(reqfifo_rdata.op == OpRead) 1 -1" (1 "0") +ANNOTATION: "VC_COV_UNR" +Condition 7 "3253769203" "(intg_error | rsp_fifo_error | intg_error_q) 1 -1" (2 "001") +ANNOTATION: "VC_COV_UNR" +Condition 16 "3469950311" "(wr_attr_error | wr_vld_error | rd_vld_error | instr_error | tlul_error | intg_error) 1 -1" (7 "100000") +ANNOTATION: "VC_COV_UNR" +Condition 19 "709191362" "(req_o & gnt_i) 1 -1" (1 "01") +ANNOTATION: "VC_COV_UNR" +Condition 20 "3623514242" "(d_valid & reqfifo_rvalid & rspfifo_rvalid & (reqfifo_rdata.op == OpRead)) 1 -1" (1 "0111") +ANNOTATION: "VC_COV_UNR" +Condition 20 "3623514242" "(d_valid & reqfifo_rvalid & rspfifo_rvalid & (reqfifo_rdata.op == OpRead)) 1 -1" (2 "1011") +ANNOTATION: "VC_COV_UNR" +Condition 20 "3623514242" "(d_valid & reqfifo_rvalid & rspfifo_rvalid & (reqfifo_rdata.op == OpRead)) 1 -1" (4 "1110") +ANNOTATION: "VC_COV_UNR" +Condition 24 "2807788926" "((vld_rd_rsp && reqfifo_rdata.error) ? error_blanking_integ : (vld_rd_rsp ? rspfifo_rdata.data_intg : prim_secded_pkg::SecdedInv3932ZeroEcc)) 1 -1" (2 "1") +ANNOTATION: "VC_COV_UNR" +Condition 25 "561780173" "(vld_rd_rsp && reqfifo_rdata.error) 1 -1" (3 "11") +ANNOTATION: "VC_COV_UNR" +Condition 32 "939039548" "(d_valid && d_error) 1 -1" (1 "01") +ANNOTATION: "VC_COV_UNR" +Condition 33 "1798941048" "((gnt_i | error_internal) & reqfifo_wready & sramreqfifo_wready) 1 -1" (3 "110") +ANNOTATION: "VC_COV_UNR" +Condition 35 "2770863641" "(tl_i_int.a_valid & reqfifo_wready & ((~error_internal))) 1 -1" (1 "011") +ANNOTATION: "VC_COV_UNR" +Condition 40 "2041272341" "(sram_ack & ((~we_o))) 1 -1" (2 "10") +ANNOTATION: "VC_COV_UNR" +Condition 41 "721931741" "(rvalid_i & reqfifo_rvalid) 1 -1" (2 "10") +ANNOTATION: "vcs_gen_start:i=0:vcs_gen_end:VC_COV_UNR" +Condition 46 "3548937587" "(((|wmask_intg)) & ((|wdata_intg))) 1 -1" (1 "01") +CHECKSUM: "2974379282 2951929728" +INSTANCE: tb.dut.u_part_sel_idx +ANNOTATION: "vcs_gen_start:level=0,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 1 "2750612666" "(gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C0] | gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C1]) 1 -1" (1 "00") +CHECKSUM: "2974379282 2951929728" +INSTANCE: tb.dut.u_otp_ctrl_dai.u_part_sel_idx +ANNOTATION: "vcs_gen_start:level=0,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 1 "2750612666" "(gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C0] | gen_normal_case.req_tree[gen_normal_case.gen_tree[0].gen_level[0].C1]) 1 -1" (1 "00") +CHECKSUM: "2032872600 2493710885" +INSTANCE: tb.dut.u_edn_arb +ANNOTATION: "vcs_gen_start:level=1,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 10 "635964333" "(req_i[0] & gen_normal_case.prio_mask_q[0]) 1 -1" (1 "01") +ANNOTATION: "vcs_gen_start:level=1,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 11 "2124571033" "(req_i[0] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & ready_i) 1 -1" (1 "011") +CHECKSUM: "2032872600 3869070406" +INSTANCE: tb.dut.u_otp_arb +ANNOTATION: "vcs_gen_start:level=3,offset=6:vcs_gen_end:VC_COV_UNR" +Condition 118 "3667925887" "(((~gen_normal_case.req_tree[gen_normal_case.gen_tree[3].gen_level[6].C0])) | (((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[6].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[6].C1])) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=3,offset=6:vcs_gen_end:VC_COV_UNR" +Condition 119 "2125455247" "(((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[6].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[6].C1]) 1 -1" (1 "01") +ANNOTATION: "vcs_gen_start:level=3,offset=6:vcs_gen_end:VC_COV_UNR" +Condition 119 "2125455247" "(((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[6].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[6].C1]) 1 -1" (3 "11") +ANNOTATION: "vcs_gen_start:level=3,offset=6:vcs_gen_end:VC_COV_UNR" +Condition 120 "2371949082" "(gen_normal_case.req_tree[gen_normal_case.gen_tree[3].gen_level[6].C0] | gen_normal_case.req_tree[gen_normal_case.gen_tree[3].gen_level[6].C1]) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=3,offset=6:vcs_gen_end:VC_COV_UNR" +Condition 121 "4111290463" "(gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[6].C1] | gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[6].C0]) 1 -1" (3 "10") +ANNOTATION: "vcs_gen_start:level=3,offset=6:vcs_gen_end:VC_COV_UNR" +Condition 124 "2230658126" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[6].Pa] & ((~gen_normal_case.gen_tree[3].gen_level[6].gen_nodes.sel))) 1 -1" (2 "10") +ANNOTATION: "vcs_gen_start:level=3,offset=6:vcs_gen_end:VC_COV_UNR" +Condition 125 "1884579875" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[6].Pa] & gen_normal_case.gen_tree[3].gen_level[6].gen_nodes.sel) 1 -1" (3 "11") +ANNOTATION: "vcs_gen_start:level=4,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 137 "1731868698" "(req_i[0] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[0].Pa] & ready_i) 1 -1" (1 "011") +ANNOTATION: "vcs_gen_start:level=4,offset=1:vcs_gen_end:VC_COV_UNR" +Condition 142 "1060032545" "(req_i[1] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[1].Pa] & ready_i) 1 -1" (1 "011") +ANNOTATION: "vcs_gen_start:level=4,offset=2:vcs_gen_end:VC_COV_UNR" +Condition 147 "1299459822" "(req_i[2] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[2].Pa] & ready_i) 1 -1" (1 "011") +ANNOTATION: "vcs_gen_start:level=4,offset=3:vcs_gen_end:VC_COV_UNR" +Condition 152 "358663893" "(req_i[3] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[3].Pa] & ready_i) 1 -1" (1 "011") +ANNOTATION: "vcs_gen_start:level=4,offset=4:vcs_gen_end:VC_COV_UNR" +Condition 157 "2252512415" "(req_i[4] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[4].Pa] & ready_i) 1 -1" (1 "011") +ANNOTATION: "vcs_gen_start:level=4,offset=5:vcs_gen_end:VC_COV_UNR" +Condition 162 "3730207908" "(req_i[5] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[5].Pa] & ready_i) 1 -1" (1 "011") +ANNOTATION: "vcs_gen_start:level=4,offset=6:vcs_gen_end:VC_COV_UNR" +Condition 167 "2886503019" "(req_i[6] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[6].Pa] & ready_i) 1 -1" (1 "011") +ANNOTATION: "vcs_gen_start:level=4,offset=7:vcs_gen_end:VC_COV_UNR" +Condition 172 "4095238736" "(req_i[7] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[7].Pa] & ready_i) 1 -1" (1 "011") +ANNOTATION: "vcs_gen_start:level=4,offset=8:vcs_gen_end:VC_COV_UNR" +Condition 177 "296455364" "(req_i[8] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[8].Pa] & ready_i) 1 -1" (1 "011") +ANNOTATION: "vcs_gen_start:level=4,offset=9:vcs_gen_end:VC_COV_UNR" +Condition 182 "1237279999" "(req_i[9] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[9].Pa] & ready_i) 1 -1" (1 "011") +ANNOTATION: "vcs_gen_start:level=4,offset=10:vcs_gen_end:VC_COV_UNR" +Condition 187 "565898016" "(req_i[10] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[10].Pa] & ready_i) 1 -1" (1 "011") +ANNOTATION: "vcs_gen_start:level=4,offset=11:vcs_gen_end:VC_COV_UNR" +Condition 192 "2218826282" "(req_i[11] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[11].Pa] & ready_i) 1 -1" (1 "011") +ANNOTATION: "vcs_gen_start:level=4,offset=12:vcs_gen_end:VC_COV_UNR" +Condition 197 "4217824807" "(req_i[12] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[12].Pa] & ready_i) 1 -1" (1 "011") +ANNOTATION: "vcs_gen_start:level=4,offset=13:vcs_gen_end:VC_COV_UNR" +Condition 201 "1343278836" "(req_i[13] & gen_normal_case.prio_mask_q[13]) 1 -1" (2 "10") +ANNOTATION: "vcs_gen_start:level=4,offset=13:vcs_gen_end:VC_COV_UNR" +Condition 201 "1343278836" "(req_i[13] & gen_normal_case.prio_mask_q[13]) 1 -1" (3 "11") +ANNOTATION: "vcs_gen_start:level=4,offset=13:vcs_gen_end:VC_COV_UNR" +Condition 202 "1587320621" "(req_i[13] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[13].Pa] & ready_i) 1 -1" (1 "011") +ANNOTATION: "vcs_gen_start:level=4,offset=13:vcs_gen_end:VC_COV_UNR" +Condition 202 "1587320621" "(req_i[13] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[13].Pa] & ready_i) 1 -1" (2 "101") +ANNOTATION: "vcs_gen_start:level=4,offset=13:vcs_gen_end:VC_COV_UNR" +Condition 202 "1587320621" "(req_i[13] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[13].Pa] & ready_i) 1 -1" (3 "110") +ANNOTATION: "vcs_gen_start:level=4,offset=13:vcs_gen_end:VC_COV_UNR" +Condition 202 "1587320621" "(req_i[13] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[13].Pa] & ready_i) 1 -1" (4 "111") +ANNOTATION: "vcs_gen_start:level=4,offset=13:vcs_gen_end:VC_COV_UNR" +Condition 204 "3359315662" "(gen_normal_case.mask_tree[gen_normal_case.gen_tree[4].gen_level[13].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[13].Pa] & ((~ready_i)))) 1 -1" (1 "00") +ANNOTATION: "vcs_gen_start:level=4,offset=13:vcs_gen_end:VC_COV_UNR" +Condition 204 "3359315662" "(gen_normal_case.mask_tree[gen_normal_case.gen_tree[4].gen_level[13].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[13].Pa] & ((~ready_i)))) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=4,offset=13:vcs_gen_end:VC_COV_UNR" +Condition 205 "87484194" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[13].Pa] & ((~ready_i))) 1 -1" (2 "10") +ANNOTATION: "vcs_gen_start:level=4,offset=13:vcs_gen_end:VC_COV_UNR" +Condition 205 "87484194" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[13].Pa] & ((~ready_i))) 1 -1" (3 "11") +CHECKSUM: "2032872600 835765284" +INSTANCE: tb.dut.u_scrmbl_mtx +ANNOTATION: "vcs_gen_start:level=1,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 10 "1993460578" "(((~gen_normal_case.req_tree[gen_normal_case.gen_tree[1].gen_level[0].C0])) | (((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[0].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[0].C1])) 1 -1" (1 "00") +ANNOTATION: "vcs_gen_start:level=1,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 10 "1993460578" "(((~gen_normal_case.req_tree[gen_normal_case.gen_tree[1].gen_level[0].C0])) | (((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[0].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[0].C1])) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=1,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 11 "1567077924" "(((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[0].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[0].C1]) 1 -1" (1 "01") +ANNOTATION: "vcs_gen_start:level=1,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 12 "3158492049" "(gen_normal_case.req_tree[gen_normal_case.gen_tree[1].gen_level[0].C0] | gen_normal_case.req_tree[gen_normal_case.gen_tree[1].gen_level[0].C1]) 1 -1" (3 "10") +ANNOTATION: "vcs_gen_start:level=1,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 13 "96040801" "(gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[0].C1] | gen_normal_case.prio_tree[gen_normal_case.gen_tree[1].gen_level[0].C0]) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=1,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 14 "1193252123" "(gen_normal_case.gen_tree[1].gen_level[0].gen_nodes.sel ? gen_normal_case.idx_tree[gen_normal_case.gen_tree[1].gen_level[0].C1] : gen_normal_case.idx_tree[gen_normal_case.gen_tree[1].gen_level[0].C0]) 1 -1" (1 "0") +ANNOTATION: "vcs_gen_start:level=1,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 15 "445016888" "(gen_normal_case.gen_tree[1].gen_level[0].gen_nodes.sel ? gen_normal_case.data_tree[gen_normal_case.gen_tree[1].gen_level[0].C1] : gen_normal_case.data_tree[gen_normal_case.gen_tree[1].gen_level[0].C0]) 1 -1" (1 "0") +ANNOTATION: "vcs_gen_start:level=1,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 16 "1314162940" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & ((~gen_normal_case.gen_tree[1].gen_level[0].gen_nodes.sel))) 1 -1" (1 "01") +ANNOTATION: "vcs_gen_start:level=1,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 16 "1314162940" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & ((~gen_normal_case.gen_tree[1].gen_level[0].gen_nodes.sel))) 1 -1" (3 "11") +ANNOTATION: "vcs_gen_start:level=1,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 17 "2175331913" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] & gen_normal_case.gen_tree[1].gen_level[0].gen_nodes.sel) 1 -1" (2 "10") +ANNOTATION: "vcs_gen_start:level=1,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 18 "2134997267" "(gen_normal_case.mask_tree[gen_normal_case.gen_tree[1].gen_level[0].Pa] | gen_normal_case.sel_tree[gen_normal_case.gen_tree[1].gen_level[0].C0]) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=2,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 28 "2070917326" "(((~gen_normal_case.req_tree[gen_normal_case.gen_tree[2].gen_level[0].C0])) | (((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[2].gen_level[0].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[2].gen_level[0].C1])) 1 -1" (1 "00") +ANNOTATION: "vcs_gen_start:level=2,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 28 "2070917326" "(((~gen_normal_case.req_tree[gen_normal_case.gen_tree[2].gen_level[0].C0])) | (((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[2].gen_level[0].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[2].gen_level[0].C1])) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=2,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 29 "3264610632" "(((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[2].gen_level[0].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[2].gen_level[0].C1]) 1 -1" (1 "01") +ANNOTATION: "vcs_gen_start:level=2,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 29 "3264610632" "(((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[2].gen_level[0].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[2].gen_level[0].C1]) 1 -1" (3 "11") +ANNOTATION: "vcs_gen_start:level=2,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 30 "1496330476" "(gen_normal_case.req_tree[gen_normal_case.gen_tree[2].gen_level[0].C0] | gen_normal_case.req_tree[gen_normal_case.gen_tree[2].gen_level[0].C1]) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=2,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 30 "1496330476" "(gen_normal_case.req_tree[gen_normal_case.gen_tree[2].gen_level[0].C0] | gen_normal_case.req_tree[gen_normal_case.gen_tree[2].gen_level[0].C1]) 1 -1" (3 "10") +ANNOTATION: "vcs_gen_start:level=2,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 31 "475390859" "(gen_normal_case.prio_tree[gen_normal_case.gen_tree[2].gen_level[0].C1] | gen_normal_case.prio_tree[gen_normal_case.gen_tree[2].gen_level[0].C0]) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=2,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 31 "475390859" "(gen_normal_case.prio_tree[gen_normal_case.gen_tree[2].gen_level[0].C1] | gen_normal_case.prio_tree[gen_normal_case.gen_tree[2].gen_level[0].C0]) 1 -1" (3 "10") +ANNOTATION: "vcs_gen_start:level=2,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 32 "3851361741" "(gen_normal_case.gen_tree[2].gen_level[0].gen_nodes.sel ? gen_normal_case.idx_tree[gen_normal_case.gen_tree[2].gen_level[0].C1] : gen_normal_case.idx_tree[gen_normal_case.gen_tree[2].gen_level[0].C0]) 1 -1" (1 "0") +ANNOTATION: "vcs_gen_start:level=2,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 33 "834897871" "(gen_normal_case.gen_tree[2].gen_level[0].gen_nodes.sel ? gen_normal_case.data_tree[gen_normal_case.gen_tree[2].gen_level[0].C1] : gen_normal_case.data_tree[gen_normal_case.gen_tree[2].gen_level[0].C0]) 1 -1" (1 "0") +ANNOTATION: "vcs_gen_start:level=2,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 34 "827710109" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[0].Pa] & ((~gen_normal_case.gen_tree[2].gen_level[0].gen_nodes.sel))) 1 -1" (1 "01") +ANNOTATION: "vcs_gen_start:level=2,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 34 "827710109" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[0].Pa] & ((~gen_normal_case.gen_tree[2].gen_level[0].gen_nodes.sel))) 1 -1" (2 "10") +ANNOTATION: "vcs_gen_start:level=2,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 34 "827710109" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[0].Pa] & ((~gen_normal_case.gen_tree[2].gen_level[0].gen_nodes.sel))) 1 -1" (3 "11") +ANNOTATION: "vcs_gen_start:level=2,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 35 "1296065718" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[0].Pa] & gen_normal_case.gen_tree[2].gen_level[0].gen_nodes.sel) 1 -1" (2 "10") +ANNOTATION: "vcs_gen_start:level=2,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 35 "1296065718" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[0].Pa] & gen_normal_case.gen_tree[2].gen_level[0].gen_nodes.sel) 1 -1" (3 "11") +ANNOTATION: "vcs_gen_start:level=2,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 36 "2587069038" "(gen_normal_case.mask_tree[gen_normal_case.gen_tree[2].gen_level[0].Pa] | gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[0].C0]) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=2,offset=1:vcs_gen_end:VC_COV_UNR" +Condition 45 "1389557192" "(gen_normal_case.mask_tree[gen_normal_case.gen_tree[2].gen_level[1].Pa] | gen_normal_case.sel_tree[gen_normal_case.gen_tree[2].gen_level[1].C0]) 1 -1" (3 "10") +ANNOTATION: "vcs_gen_start:level=3,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 64 "210767427" "(((~gen_normal_case.req_tree[gen_normal_case.gen_tree[3].gen_level[0].C0])) | (((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[0].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[0].C1])) 1 -1" (1 "00") +ANNOTATION: "vcs_gen_start:level=3,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 64 "210767427" "(((~gen_normal_case.req_tree[gen_normal_case.gen_tree[3].gen_level[0].C0])) | (((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[0].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[0].C1])) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=3,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 65 "433071849" "(((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[0].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[0].C1]) 1 -1" (1 "01") +ANNOTATION: "vcs_gen_start:level=3,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 65 "433071849" "(((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[0].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[0].C1]) 1 -1" (3 "11") +ANNOTATION: "vcs_gen_start:level=3,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 66 "676485814" "(gen_normal_case.req_tree[gen_normal_case.gen_tree[3].gen_level[0].C0] | gen_normal_case.req_tree[gen_normal_case.gen_tree[3].gen_level[0].C1]) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=3,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 66 "676485814" "(gen_normal_case.req_tree[gen_normal_case.gen_tree[3].gen_level[0].C0] | gen_normal_case.req_tree[gen_normal_case.gen_tree[3].gen_level[0].C1]) 1 -1" (3 "10") +ANNOTATION: "vcs_gen_start:level=3,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 67 "2859603461" "(gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[0].C1] | gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[0].C0]) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=3,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 67 "2859603461" "(gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[0].C1] | gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[0].C0]) 1 -1" (3 "10") +ANNOTATION: "vcs_gen_start:level=3,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 68 "499725081" "(gen_normal_case.gen_tree[3].gen_level[0].gen_nodes.sel ? gen_normal_case.idx_tree[gen_normal_case.gen_tree[3].gen_level[0].C1] : gen_normal_case.idx_tree[gen_normal_case.gen_tree[3].gen_level[0].C0]) 1 -1" (1 "0") +ANNOTATION: "vcs_gen_start:level=3,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 69 "2136469291" "(gen_normal_case.gen_tree[3].gen_level[0].gen_nodes.sel ? gen_normal_case.data_tree[gen_normal_case.gen_tree[3].gen_level[0].C1] : gen_normal_case.data_tree[gen_normal_case.gen_tree[3].gen_level[0].C0]) 1 -1" (1 "0") +ANNOTATION: "vcs_gen_start:level=3,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 70 "3457930055" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[0].Pa] & ((~gen_normal_case.gen_tree[3].gen_level[0].gen_nodes.sel))) 1 -1" (1 "01") +ANNOTATION: "vcs_gen_start:level=3,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 70 "3457930055" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[0].Pa] & ((~gen_normal_case.gen_tree[3].gen_level[0].gen_nodes.sel))) 1 -1" (2 "10") +ANNOTATION: "vcs_gen_start:level=3,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 70 "3457930055" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[0].Pa] & ((~gen_normal_case.gen_tree[3].gen_level[0].gen_nodes.sel))) 1 -1" (3 "11") +ANNOTATION: "vcs_gen_start:level=3,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 71 "1202012" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[0].Pa] & gen_normal_case.gen_tree[3].gen_level[0].gen_nodes.sel) 1 -1" (2 "10") +ANNOTATION: "vcs_gen_start:level=3,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 71 "1202012" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[0].Pa] & gen_normal_case.gen_tree[3].gen_level[0].gen_nodes.sel) 1 -1" (3 "11") +ANNOTATION: "vcs_gen_start:level=3,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 72 "3948011572" "(gen_normal_case.mask_tree[gen_normal_case.gen_tree[3].gen_level[0].Pa] | gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[0].C0]) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=3,offset=1:vcs_gen_end:VC_COV_UNR" +Condition 73 "2058222911" "(((~gen_normal_case.req_tree[gen_normal_case.gen_tree[3].gen_level[1].C0])) | (((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[1].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[1].C1])) 1 -1" (1 "00") +ANNOTATION: "vcs_gen_start:level=3,offset=1:vcs_gen_end:VC_COV_UNR" +Condition 73 "2058222911" "(((~gen_normal_case.req_tree[gen_normal_case.gen_tree[3].gen_level[1].C0])) | (((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[1].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[1].C1])) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=3,offset=1:vcs_gen_end:VC_COV_UNR" +Condition 74 "3215638766" "(((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[1].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[1].C1]) 1 -1" (1 "01") +ANNOTATION: "vcs_gen_start:level=3,offset=1:vcs_gen_end:VC_COV_UNR" +Condition 74 "3215638766" "(((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[1].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[1].C1]) 1 -1" (3 "11") +ANNOTATION: "vcs_gen_start:level=3,offset=1:vcs_gen_end:VC_COV_UNR" +Condition 75 "3769836816" "(gen_normal_case.req_tree[gen_normal_case.gen_tree[3].gen_level[1].C0] | gen_normal_case.req_tree[gen_normal_case.gen_tree[3].gen_level[1].C1]) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=3,offset=1:vcs_gen_end:VC_COV_UNR" +Condition 75 "3769836816" "(gen_normal_case.req_tree[gen_normal_case.gen_tree[3].gen_level[1].C0] | gen_normal_case.req_tree[gen_normal_case.gen_tree[3].gen_level[1].C1]) 1 -1" (3 "10") +ANNOTATION: "vcs_gen_start:level=3,offset=1:vcs_gen_end:VC_COV_UNR" +Condition 76 "2034837615" "(gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[1].C1] | gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[1].C0]) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=3,offset=1:vcs_gen_end:VC_COV_UNR" +Condition 76 "2034837615" "(gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[1].C1] | gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[1].C0]) 1 -1" (3 "10") +ANNOTATION: "vcs_gen_start:level=3,offset=1:vcs_gen_end:VC_COV_UNR" +Condition 77 "2239186227" "(gen_normal_case.gen_tree[3].gen_level[1].gen_nodes.sel ? gen_normal_case.idx_tree[gen_normal_case.gen_tree[3].gen_level[1].C1] : gen_normal_case.idx_tree[gen_normal_case.gen_tree[3].gen_level[1].C0]) 1 -1" (1 "0") +ANNOTATION: "vcs_gen_start:level=3,offset=1:vcs_gen_end:VC_COV_UNR" +Condition 78 "2004432906" "(gen_normal_case.gen_tree[3].gen_level[1].gen_nodes.sel ? gen_normal_case.data_tree[gen_normal_case.gen_tree[3].gen_level[1].C1] : gen_normal_case.data_tree[gen_normal_case.gen_tree[3].gen_level[1].C0]) 1 -1" (1 "0") +ANNOTATION: "vcs_gen_start:level=3,offset=1:vcs_gen_end:VC_COV_UNR" +Condition 79 "1357880086" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[1].Pa] & ((~gen_normal_case.gen_tree[3].gen_level[1].gen_nodes.sel))) 1 -1" (1 "01") +ANNOTATION: "vcs_gen_start:level=3,offset=1:vcs_gen_end:VC_COV_UNR" +Condition 79 "1357880086" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[1].Pa] & ((~gen_normal_case.gen_tree[3].gen_level[1].gen_nodes.sel))) 1 -1" (2 "10") +ANNOTATION: "vcs_gen_start:level=3,offset=1:vcs_gen_end:VC_COV_UNR" +Condition 79 "1357880086" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[1].Pa] & ((~gen_normal_case.gen_tree[3].gen_level[1].gen_nodes.sel))) 1 -1" (3 "11") +ANNOTATION: "vcs_gen_start:level=3,offset=1:vcs_gen_end:VC_COV_UNR" +Condition 80 "3927989974" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[1].Pa] & gen_normal_case.gen_tree[3].gen_level[1].gen_nodes.sel) 1 -1" (2 "10") +ANNOTATION: "vcs_gen_start:level=3,offset=1:vcs_gen_end:VC_COV_UNR" +Condition 80 "3927989974" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[1].Pa] & gen_normal_case.gen_tree[3].gen_level[1].gen_nodes.sel) 1 -1" (3 "11") +ANNOTATION: "vcs_gen_start:level=3,offset=1:vcs_gen_end:VC_COV_UNR" +Condition 81 "598777746" "(gen_normal_case.mask_tree[gen_normal_case.gen_tree[3].gen_level[1].Pa] | gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[1].C0]) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=3,offset=1:vcs_gen_end:VC_COV_UNR" +Condition 81 "598777746" "(gen_normal_case.mask_tree[gen_normal_case.gen_tree[3].gen_level[1].Pa] | gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[1].C0]) 1 -1" (3 "10") +ANNOTATION: "vcs_gen_start:level=3,offset=2:vcs_gen_end:VC_COV_UNR" +Condition 82 "3219580251" "(((~gen_normal_case.req_tree[gen_normal_case.gen_tree[3].gen_level[2].C0])) | (((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[2].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[2].C1])) 1 -1" (1 "00") +ANNOTATION: "vcs_gen_start:level=3,offset=2:vcs_gen_end:VC_COV_UNR" +Condition 82 "3219580251" "(((~gen_normal_case.req_tree[gen_normal_case.gen_tree[3].gen_level[2].C0])) | (((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[2].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[2].C1])) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=3,offset=2:vcs_gen_end:VC_COV_UNR" +Condition 83 "26276459" "(((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[2].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[2].C1]) 1 -1" (1 "01") +ANNOTATION: "vcs_gen_start:level=3,offset=2:vcs_gen_end:VC_COV_UNR" +Condition 84 "1842145640" "(gen_normal_case.req_tree[gen_normal_case.gen_tree[3].gen_level[2].C0] | gen_normal_case.req_tree[gen_normal_case.gen_tree[3].gen_level[2].C1]) 1 -1" (3 "10") +ANNOTATION: "vcs_gen_start:level=3,offset=2:vcs_gen_end:VC_COV_UNR" +Condition 85 "147158886" "(gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[2].C1] | gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[2].C0]) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=3,offset=2:vcs_gen_end:VC_COV_UNR" +Condition 86 "2038251222" "(gen_normal_case.gen_tree[3].gen_level[2].gen_nodes.sel ? gen_normal_case.idx_tree[gen_normal_case.gen_tree[3].gen_level[2].C1] : gen_normal_case.idx_tree[gen_normal_case.gen_tree[3].gen_level[2].C0]) 1 -1" (1 "0") +ANNOTATION: "vcs_gen_start:level=3,offset=2:vcs_gen_end:VC_COV_UNR" +Condition 87 "1520563742" "(gen_normal_case.gen_tree[3].gen_level[2].gen_nodes.sel ? gen_normal_case.data_tree[gen_normal_case.gen_tree[3].gen_level[2].C1] : gen_normal_case.data_tree[gen_normal_case.gen_tree[3].gen_level[2].C0]) 1 -1" (1 "0") +ANNOTATION: "vcs_gen_start:level=3,offset=2:vcs_gen_end:VC_COV_UNR" +Condition 88 "2599996672" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[2].Pa] & ((~gen_normal_case.gen_tree[3].gen_level[2].gen_nodes.sel))) 1 -1" (1 "01") +ANNOTATION: "vcs_gen_start:level=3,offset=2:vcs_gen_end:VC_COV_UNR" +Condition 88 "2599996672" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[2].Pa] & ((~gen_normal_case.gen_tree[3].gen_level[2].gen_nodes.sel))) 1 -1" (3 "11") +ANNOTATION: "vcs_gen_start:level=3,offset=2:vcs_gen_end:VC_COV_UNR" +Condition 89 "193340754" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[2].Pa] & gen_normal_case.gen_tree[3].gen_level[2].gen_nodes.sel) 1 -1" (2 "10") +ANNOTATION: "vcs_gen_start:level=3,offset=2:vcs_gen_end:VC_COV_UNR" +Condition 90 "2932823018" "(gen_normal_case.mask_tree[gen_normal_case.gen_tree[3].gen_level[2].Pa] | gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[2].C0]) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=3,offset=2:vcs_gen_end:VC_COV_UNR" +Condition 90 "2932823018" "(gen_normal_case.mask_tree[gen_normal_case.gen_tree[3].gen_level[2].Pa] | gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[2].C0]) 1 -1" (3 "10") +ANNOTATION: "vcs_gen_start:level=3,offset=5:vcs_gen_end:VC_COV_UNR" +Condition 109 "535495451" "(((~gen_normal_case.req_tree[gen_normal_case.gen_tree[3].gen_level[5].C0])) | (((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[5].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[5].C1])) 1 -1" (1 "00") +ANNOTATION: "vcs_gen_start:level=3,offset=5:vcs_gen_end:VC_COV_UNR" +Condition 109 "535495451" "(((~gen_normal_case.req_tree[gen_normal_case.gen_tree[3].gen_level[5].C0])) | (((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[5].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[5].C1])) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=3,offset=5:vcs_gen_end:VC_COV_UNR" +Condition 110 "3231051018" "(((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[5].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[5].C1]) 1 -1" (1 "01") +ANNOTATION: "vcs_gen_start:level=3,offset=5:vcs_gen_end:VC_COV_UNR" +Condition 111 "2023010" "(gen_normal_case.req_tree[gen_normal_case.gen_tree[3].gen_level[5].C0] | gen_normal_case.req_tree[gen_normal_case.gen_tree[3].gen_level[5].C1]) 1 -1" (3 "10") +ANNOTATION: "vcs_gen_start:level=3,offset=5:vcs_gen_end:VC_COV_UNR" +Condition 112 "2223050582" "(gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[5].C1] | gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[5].C0]) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=3,offset=5:vcs_gen_end:VC_COV_UNR" +Condition 113 "1661998521" "(gen_normal_case.gen_tree[3].gen_level[5].gen_nodes.sel ? gen_normal_case.idx_tree[gen_normal_case.gen_tree[3].gen_level[5].C1] : gen_normal_case.idx_tree[gen_normal_case.gen_tree[3].gen_level[5].C0]) 1 -1" (1 "0") +ANNOTATION: "vcs_gen_start:level=3,offset=5:vcs_gen_end:VC_COV_UNR" +Condition 114 "328876404" "(gen_normal_case.gen_tree[3].gen_level[5].gen_nodes.sel ? gen_normal_case.data_tree[gen_normal_case.gen_tree[3].gen_level[5].C1] : gen_normal_case.data_tree[gen_normal_case.gen_tree[3].gen_level[5].C0]) 1 -1" (1 "0") +ANNOTATION: "vcs_gen_start:level=3,offset=5:vcs_gen_end:VC_COV_UNR" +Condition 115 "1323463256" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[5].Pa] & ((~gen_normal_case.gen_tree[3].gen_level[5].gen_nodes.sel))) 1 -1" (1 "01") +ANNOTATION: "vcs_gen_start:level=3,offset=5:vcs_gen_end:VC_COV_UNR" +Condition 115 "1323463256" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[5].Pa] & ((~gen_normal_case.gen_tree[3].gen_level[5].gen_nodes.sel))) 1 -1" (3 "11") +ANNOTATION: "vcs_gen_start:level=3,offset=5:vcs_gen_end:VC_COV_UNR" +Condition 116 "2448561063" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[5].Pa] & gen_normal_case.gen_tree[3].gen_level[5].gen_nodes.sel) 1 -1" (2 "10") +ANNOTATION: "vcs_gen_start:level=3,offset=5:vcs_gen_end:VC_COV_UNR" +Condition 117 "3273483488" "(gen_normal_case.mask_tree[gen_normal_case.gen_tree[3].gen_level[5].Pa] | gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[5].C0]) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=3,offset=6:vcs_gen_end:VC_COV_UNR" +Condition 118 "3667925887" "(((~gen_normal_case.req_tree[gen_normal_case.gen_tree[3].gen_level[6].C0])) | (((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[6].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[6].C1])) 1 -1" (1 "00") +ANNOTATION: "vcs_gen_start:level=3,offset=6:vcs_gen_end:VC_COV_UNR" +Condition 118 "3667925887" "(((~gen_normal_case.req_tree[gen_normal_case.gen_tree[3].gen_level[6].C0])) | (((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[6].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[6].C1])) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=3,offset=6:vcs_gen_end:VC_COV_UNR" +Condition 119 "2125455247" "(((~gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[6].C0])) & gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[6].C1]) 1 -1" (1 "01") +ANNOTATION: "vcs_gen_start:level=3,offset=6:vcs_gen_end:VC_COV_UNR" +Condition 120 "2371949082" "(gen_normal_case.req_tree[gen_normal_case.gen_tree[3].gen_level[6].C0] | gen_normal_case.req_tree[gen_normal_case.gen_tree[3].gen_level[6].C1]) 1 -1" (3 "10") +ANNOTATION: "vcs_gen_start:level=3,offset=6:vcs_gen_end:VC_COV_UNR" +Condition 121 "4111290463" "(gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[6].C1] | gen_normal_case.prio_tree[gen_normal_case.gen_tree[3].gen_level[6].C0]) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=3,offset=6:vcs_gen_end:VC_COV_UNR" +Condition 122 "2669309532" "(gen_normal_case.gen_tree[3].gen_level[6].gen_nodes.sel ? gen_normal_case.idx_tree[gen_normal_case.gen_tree[3].gen_level[6].C1] : gen_normal_case.idx_tree[gen_normal_case.gen_tree[3].gen_level[6].C0]) 1 -1" (1 "0") +ANNOTATION: "vcs_gen_start:level=3,offset=6:vcs_gen_end:VC_COV_UNR" +Condition 123 "1044549472" "(gen_normal_case.gen_tree[3].gen_level[6].gen_nodes.sel ? gen_normal_case.data_tree[gen_normal_case.gen_tree[3].gen_level[6].C1] : gen_normal_case.data_tree[gen_normal_case.gen_tree[3].gen_level[6].C0]) 1 -1" (1 "0") +ANNOTATION: "vcs_gen_start:level=3,offset=6:vcs_gen_end:VC_COV_UNR" +Condition 124 "2230658126" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[6].Pa] & ((~gen_normal_case.gen_tree[3].gen_level[6].gen_nodes.sel))) 1 -1" (1 "01") +ANNOTATION: "vcs_gen_start:level=3,offset=6:vcs_gen_end:VC_COV_UNR" +Condition 124 "2230658126" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[6].Pa] & ((~gen_normal_case.gen_tree[3].gen_level[6].gen_nodes.sel))) 1 -1" (3 "11") +ANNOTATION: "vcs_gen_start:level=3,offset=6:vcs_gen_end:VC_COV_UNR" +Condition 125 "1884579875" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[6].Pa] & gen_normal_case.gen_tree[3].gen_level[6].gen_nodes.sel) 1 -1" (2 "10") +ANNOTATION: "vcs_gen_start:level=3,offset=6:vcs_gen_end:VC_COV_UNR" +Condition 126 "1315088536" "(gen_normal_case.mask_tree[gen_normal_case.gen_tree[3].gen_level[6].Pa] | gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[6].C0]) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=4,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 136 "2430171309" "(req_i[0] & gen_normal_case.prio_mask_q[0]) 1 -1" (1 "01") +ANNOTATION: "vcs_gen_start:level=4,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 136 "2430171309" "(req_i[0] & gen_normal_case.prio_mask_q[0]) 1 -1" (2 "10") +ANNOTATION: "vcs_gen_start:level=4,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 136 "2430171309" "(req_i[0] & gen_normal_case.prio_mask_q[0]) 1 -1" (3 "11") +ANNOTATION: "vcs_gen_start:level=4,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 137 "1731868698" "(req_i[0] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[0].Pa] & ready_i) 1 -1" (3 "110") +ANNOTATION: "vcs_gen_start:level=4,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 139 "4029129651" "(gen_normal_case.mask_tree[gen_normal_case.gen_tree[4].gen_level[0].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[0].Pa] & ((~ready_i)))) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=4,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 140 "2870412309" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[0].Pa] & ((~ready_i))) 1 -1" (3 "11") +ANNOTATION: "vcs_gen_start:level=4,offset=1:vcs_gen_end:VC_COV_UNR" +Condition 141 "2424159075" "(req_i[1] & gen_normal_case.prio_mask_q[1]) 1 -1" (1 "01") +ANNOTATION: "vcs_gen_start:level=4,offset=1:vcs_gen_end:VC_COV_UNR" +Condition 141 "2424159075" "(req_i[1] & gen_normal_case.prio_mask_q[1]) 1 -1" (2 "10") +ANNOTATION: "vcs_gen_start:level=4,offset=1:vcs_gen_end:VC_COV_UNR" +Condition 141 "2424159075" "(req_i[1] & gen_normal_case.prio_mask_q[1]) 1 -1" (3 "11") +ANNOTATION: "vcs_gen_start:level=4,offset=1:vcs_gen_end:VC_COV_UNR" +Condition 142 "1060032545" "(req_i[1] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[1].Pa] & ready_i) 1 -1" (3 "110") +ANNOTATION: "vcs_gen_start:level=4,offset=1:vcs_gen_end:VC_COV_UNR" +Condition 144 "2044991706" "(gen_normal_case.mask_tree[gen_normal_case.gen_tree[4].gen_level[1].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[1].Pa] & ((~ready_i)))) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=4,offset=1:vcs_gen_end:VC_COV_UNR" +Condition 144 "2044991706" "(gen_normal_case.mask_tree[gen_normal_case.gen_tree[4].gen_level[1].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[1].Pa] & ((~ready_i)))) 1 -1" (3 "10") +ANNOTATION: "vcs_gen_start:level=4,offset=1:vcs_gen_end:VC_COV_UNR" +Condition 145 "3094700199" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[1].Pa] & ((~ready_i))) 1 -1" (3 "11") +ANNOTATION: "vcs_gen_start:level=4,offset=2:vcs_gen_end:VC_COV_UNR" +Condition 146 "2442198833" "(req_i[2] & gen_normal_case.prio_mask_q[2]) 1 -1" (1 "01") +ANNOTATION: "vcs_gen_start:level=4,offset=2:vcs_gen_end:VC_COV_UNR" +Condition 146 "2442198833" "(req_i[2] & gen_normal_case.prio_mask_q[2]) 1 -1" (2 "10") +ANNOTATION: "vcs_gen_start:level=4,offset=2:vcs_gen_end:VC_COV_UNR" +Condition 146 "2442198833" "(req_i[2] & gen_normal_case.prio_mask_q[2]) 1 -1" (3 "11") +ANNOTATION: "vcs_gen_start:level=4,offset=2:vcs_gen_end:VC_COV_UNR" +Condition 147 "1299459822" "(req_i[2] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[2].Pa] & ready_i) 1 -1" (3 "110") +ANNOTATION: "vcs_gen_start:level=4,offset=2:vcs_gen_end:VC_COV_UNR" +Condition 149 "303405805" "(gen_normal_case.mask_tree[gen_normal_case.gen_tree[4].gen_level[2].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[2].Pa] & ((~ready_i)))) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=4,offset=2:vcs_gen_end:VC_COV_UNR" +Condition 149 "303405805" "(gen_normal_case.mask_tree[gen_normal_case.gen_tree[4].gen_level[2].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[2].Pa] & ((~ready_i)))) 1 -1" (3 "10") +ANNOTATION: "vcs_gen_start:level=4,offset=2:vcs_gen_end:VC_COV_UNR" +Condition 150 "3088640414" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[2].Pa] & ((~ready_i))) 1 -1" (3 "11") +ANNOTATION: "vcs_gen_start:level=4,offset=3:vcs_gen_end:VC_COV_UNR" +Condition 151 "2436119807" "(req_i[3] & gen_normal_case.prio_mask_q[3]) 1 -1" (1 "01") +ANNOTATION: "vcs_gen_start:level=4,offset=3:vcs_gen_end:VC_COV_UNR" +Condition 151 "2436119807" "(req_i[3] & gen_normal_case.prio_mask_q[3]) 1 -1" (2 "10") +ANNOTATION: "vcs_gen_start:level=4,offset=3:vcs_gen_end:VC_COV_UNR" +Condition 151 "2436119807" "(req_i[3] & gen_normal_case.prio_mask_q[3]) 1 -1" (3 "11") +ANNOTATION: "vcs_gen_start:level=4,offset=3:vcs_gen_end:VC_COV_UNR" +Condition 152 "358663893" "(req_i[3] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[3].Pa] & ready_i) 1 -1" (3 "110") +ANNOTATION: "vcs_gen_start:level=4,offset=3:vcs_gen_end:VC_COV_UNR" +Condition 154 "2614501764" "(gen_normal_case.mask_tree[gen_normal_case.gen_tree[4].gen_level[3].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[3].Pa] & ((~ready_i)))) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=4,offset=3:vcs_gen_end:VC_COV_UNR" +Condition 154 "2614501764" "(gen_normal_case.mask_tree[gen_normal_case.gen_tree[4].gen_level[3].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[3].Pa] & ((~ready_i)))) 1 -1" (3 "10") +ANNOTATION: "vcs_gen_start:level=4,offset=3:vcs_gen_end:VC_COV_UNR" +Condition 155 "2876935468" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[3].Pa] & ((~ready_i))) 1 -1" (3 "11") +ANNOTATION: "vcs_gen_start:level=4,offset=4:vcs_gen_end:VC_COV_UNR" +Condition 156 "1150101804" "(req_i[4] & gen_normal_case.prio_mask_q[4]) 1 -1" (1 "01") +ANNOTATION: "vcs_gen_start:level=4,offset=4:vcs_gen_end:VC_COV_UNR" +Condition 156 "1150101804" "(req_i[4] & gen_normal_case.prio_mask_q[4]) 1 -1" (2 "10") +ANNOTATION: "vcs_gen_start:level=4,offset=4:vcs_gen_end:VC_COV_UNR" +Condition 156 "1150101804" "(req_i[4] & gen_normal_case.prio_mask_q[4]) 1 -1" (3 "11") +ANNOTATION: "vcs_gen_start:level=4,offset=4:vcs_gen_end:VC_COV_UNR" +Condition 157 "2252512415" "(req_i[4] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[4].Pa] & ready_i) 1 -1" (3 "110") +ANNOTATION: "vcs_gen_start:level=4,offset=4:vcs_gen_end:VC_COV_UNR" +Condition 159 "2077403342" "(gen_normal_case.mask_tree[gen_normal_case.gen_tree[4].gen_level[4].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[4].Pa] & ((~ready_i)))) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=4,offset=4:vcs_gen_end:VC_COV_UNR" +Condition 159 "2077403342" "(gen_normal_case.mask_tree[gen_normal_case.gen_tree[4].gen_level[4].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[4].Pa] & ((~ready_i)))) 1 -1" (3 "10") +ANNOTATION: "vcs_gen_start:level=4,offset=4:vcs_gen_end:VC_COV_UNR" +Condition 160 "362208751" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[4].Pa] & ((~ready_i))) 1 -1" (3 "11") +ANNOTATION: "vcs_gen_start:level=4,offset=5:vcs_gen_end:VC_COV_UNR" +Condition 164 "4061205415" "(gen_normal_case.mask_tree[gen_normal_case.gen_tree[4].gen_level[5].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[5].Pa] & ((~ready_i)))) 1 -1" (3 "10") +ANNOTATION: "vcs_gen_start:level=4,offset=10:vcs_gen_end:VC_COV_UNR" +Condition 186 "1702269588" "(req_i[10] & gen_normal_case.prio_mask_q[10]) 1 -1" (2 "10") +ANNOTATION: "vcs_gen_start:level=4,offset=10:vcs_gen_end:VC_COV_UNR" +Condition 186 "1702269588" "(req_i[10] & gen_normal_case.prio_mask_q[10]) 1 -1" (3 "11") +ANNOTATION: "vcs_gen_start:level=4,offset=10:vcs_gen_end:VC_COV_UNR" +Condition 187 "565898016" "(req_i[10] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[10].Pa] & ready_i) 1 -1" (3 "110") +ANNOTATION: "vcs_gen_start:level=4,offset=10:vcs_gen_end:VC_COV_UNR" +Condition 189 "2771416427" "(gen_normal_case.mask_tree[gen_normal_case.gen_tree[4].gen_level[10].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[10].Pa] & ((~ready_i)))) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=4,offset=10:vcs_gen_end:VC_COV_UNR" +Condition 190 "2876058957" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[10].Pa] & ((~ready_i))) 1 -1" (3 "11") +ANNOTATION: "vcs_gen_start:level=4,offset=12:vcs_gen_end:VC_COV_UNR" +Condition 196 "3119114945" "(req_i[12] & gen_normal_case.prio_mask_q[12]) 1 -1" (2 "10") +ANNOTATION: "vcs_gen_start:level=4,offset=12:vcs_gen_end:VC_COV_UNR" +Condition 196 "3119114945" "(req_i[12] & gen_normal_case.prio_mask_q[12]) 1 -1" (3 "11") +ANNOTATION: "vcs_gen_start:level=4,offset=12:vcs_gen_end:VC_COV_UNR" +Condition 197 "4217824807" "(req_i[12] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[12].Pa] & ready_i) 1 -1" (3 "110") +ANNOTATION: "vcs_gen_start:level=4,offset=12:vcs_gen_end:VC_COV_UNR" +Condition 199 "2102103111" "(gen_normal_case.mask_tree[gen_normal_case.gen_tree[4].gen_level[12].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[12].Pa] & ((~ready_i)))) 1 -1" (2 "01") +ANNOTATION: "vcs_gen_start:level=4,offset=12:vcs_gen_end:VC_COV_UNR" +Condition 200 "3779810229" "(gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[12].Pa] & ((~ready_i))) 1 -1" (3 "11") +ANNOTATION: "vcs_gen_start:level=4,offset=13:vcs_gen_end:VC_COV_UNR" +Condition 204 "3359315662" "(gen_normal_case.mask_tree[gen_normal_case.gen_tree[4].gen_level[13].Pa] | (gen_normal_case.sel_tree[gen_normal_case.gen_tree[4].gen_level[13].Pa] & ((~ready_i)))) 1 -1" (1 "00") +CHECKSUM: "2032872600 3109464092" +INSTANCE: tb.dut.u_otp_ctrl_kdi.u_req_arb +ANNOTATION: "vcs_gen_start:level=3,offset=0:vcs_gen_end:VC_COV_UNR" +Condition 65 "2951635521" "(req_i[0] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[0].Pa] & ready_i) 1 -1" (1 "011") +ANNOTATION: "vcs_gen_start:level=3,offset=1:vcs_gen_end:VC_COV_UNR" +Condition 70 "4160391802" "(req_i[1] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[1].Pa] & ready_i) 1 -1" (1 "011") +ANNOTATION: "vcs_gen_start:level=3,offset=2:vcs_gen_end:VC_COV_UNR" +Condition 75 "2241885365" "(req_i[2] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[2].Pa] & ready_i) 1 -1" (1 "011") +ANNOTATION: "vcs_gen_start:level=3,offset=3:vcs_gen_end:VC_COV_UNR" +Condition 80 "3719601294" "(req_i[3] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[3].Pa] & ready_i) 1 -1" (1 "011") +ANNOTATION: "vcs_gen_start:level=3,offset=4:vcs_gen_end:VC_COV_UNR" +Condition 85 "1318504132" "(req_i[4] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[4].Pa] & ready_i) 1 -1" (1 "011") +ANNOTATION: "vcs_gen_start:level=3,offset=5:vcs_gen_end:VC_COV_UNR" +Condition 90 "377630463" "(req_i[5] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[5].Pa] & ready_i) 1 -1" (1 "011") +ANNOTATION: "vcs_gen_start:level=3,offset=6:vcs_gen_end:VC_COV_UNR" +Condition 95 "1691930672" "(req_i[6] & gen_normal_case.sel_tree[gen_normal_case.gen_tree[3].gen_level[6].Pa] & ready_i) 1 -1" (1 "011") +CHECKSUM: "4013022403 1458251632" +INSTANCE: tb.dut.u_prim_edn_req.u_prim_packer_fifo +ANNOTATION: "VC_COV_UNR" +Condition 12 "2853235687" "((depth_q == FullDepth) && ((!clr_q))) 1 -1" (2 "10") +CHECKSUM: "903559179 1533167362" +INSTANCE: tb.dut.u_otp_ctrl_dai +ANNOTATION: "VC_COV_UNR" +Condition 6 "3686409107" "(scrmbl_mtx_gnt_i && scrmbl_ready_i) 1 -1" (1 "01") +ANNOTATION: "VC_COV_UNR" +Condition 8 "4163455672" "(scrmbl_mtx_gnt_i && scrmbl_ready_i) 1 -1" (1 "01") +ANNOTATION: "VC_COV_UNR" +Condition 9 "1539831361" "(scrmbl_mtx_gnt_i && scrmbl_ready_i) 1 -1" (1 "01") +ANNOTATION: "vcs_gen_start:k=10:vcs_gen_end:VC_COV_UNR" +Condition 33 "138415549" "((dai_addr_i >= 11'b11110101000) & ({1'b0, dai_addr_i} < gen_part_sel[10].PartEndInt[otp_ctrl_reg_pkg::OtpByteAddrWidth:0])) 1 -1" (2 "10") +CHECKSUM: "1158524476 2909360515" +INSTANCE: tb.dut.u_otp_ctrl_kdi +ANNOTATION: "VC_COV_UNR" +Condition 2 "1539831361" "(scrmbl_mtx_gnt_i && scrmbl_ready_i) 1 -1" (1 "01") +CHECKSUM: "3162909804 4223786199" +INSTANCE: tb.dut.gen_partitions[3].gen_unbuffered.u_part_unbuf +ANNOTATION: "VC_COV_UNR" +Condition 14 "2502713177" "(({tlul_addr_q, 2'b0} >= 11'b10001111000) && ({1'b0, tlul_addr_q, 2'b0} < PartEnd)) 1 -1" (2 "10") +CHECKSUM: "3162909804 475089886" +INSTANCE: tb.dut.gen_partitions[0].gen_unbuffered.u_part_unbuf +ANNOTATION: "VC_COV_UNR" +Condition 1 "1099175909" "(otp_err != NoError) 1 -1" (2 "1") +ANNOTATION: "VC_COV_UNR" +Condition 2 "2883220586" "(otp_err != NoError) 1 -1" (2 "1") +CHECKSUM: "3162909804 1722272287" +INSTANCE: tb.dut.gen_partitions[1].gen_unbuffered.u_part_unbuf +ANNOTATION: "VC_COV_UNR" +Condition 14 "478960819" "(({tlul_addr_q, 2'b0} >= 11'b00001000000) && ({1'b0, tlul_addr_q, 2'b0} < PartEnd)) 1 -1" (2 "10") +CHECKSUM: "3162909804 1789909357" +INSTANCE: tb.dut.gen_partitions[2].gen_unbuffered.u_part_unbuf +ANNOTATION: "VC_COV_UNR" +Condition 14 "1715010657" "(({tlul_addr_q, 2'b0} >= 11'b00111101000) && ({1'b0, tlul_addr_q, 2'b0} < PartEnd)) 1 -1" (2 "10") +CHECKSUM: "3162909804 4078376581" +INSTANCE: tb.dut.gen_partitions[4].gen_unbuffered.u_part_unbuf +ANNOTATION: "VC_COV_UNR" +Condition 14 "677249997" "(({tlul_addr_q, 2'b0} >= 11'b11001010000) && ({1'b0, tlul_addr_q, 2'b0} < PartEnd)) 1 -1" (2 "10") +CHECKSUM: "3727300757 720525075" +INSTANCE: tb.dut.gen_partitions[5].gen_buffered.u_part_buf +ANNOTATION: "VC_COV_UNR" +Condition 3 "1999344180" "(scrmbl_mtx_gnt_i && scrmbl_ready_i) 1 -1" (1 "01") +ANNOTATION: "VC_COV_UNR" +Condition 3 "1999344180" "(scrmbl_mtx_gnt_i && scrmbl_ready_i) 1 -1" (2 "10") +ANNOTATION: "VC_COV_UNR" +Condition 3 "1999344180" "(scrmbl_mtx_gnt_i && scrmbl_ready_i) 1 -1" (3 "11") +ANNOTATION: "VC_COV_UNR" +Condition 10 "4291765346" "(scrmbl_mtx_gnt_i && scrmbl_ready_i) 1 -1" (1 "01") +ANNOTATION: "VC_COV_UNR" +Condition 16 "3809681040" "(state_q != ErrorSt) 1 -1" (1 "0") +ANNOTATION: "VC_COV_UNR" +Condition 16 "3809681040" "(state_q != ErrorSt) 1 -1" (2 "1") +CHECKSUM: "3727300757 384791011" +INSTANCE: tb.dut.gen_partitions[9].gen_buffered.u_part_buf +ANNOTATION: "VC_COV_UNR" +Condition 3 "1999344180" "(scrmbl_mtx_gnt_i && scrmbl_ready_i) 1 -1" (1 "01") +ANNOTATION: "VC_COV_UNR" +Condition 9 "1580211052" "(scrmbl_mtx_gnt_i && scrmbl_ready_i) 1 -1" (1 "01") +ANNOTATION: "VC_COV_UNR" +Condition 16 "3809681040" "(state_q != ErrorSt) 1 -1" (1 "0") +ANNOTATION: "VC_COV_UNR" +Condition 16 "3809681040" "(state_q != ErrorSt) 1 -1" (2 "1") +CHECKSUM: "3727300757 599055118" +INSTANCE: tb.dut.gen_partitions[6].gen_buffered.u_part_buf +ANNOTATION: "VC_COV_UNR" +Condition 3 "1999344180" "(scrmbl_mtx_gnt_i && scrmbl_ready_i) 1 -1" (1 "01") +ANNOTATION: "VC_COV_UNR" +Condition 3 "1999344180" "(scrmbl_mtx_gnt_i && scrmbl_ready_i) 1 -1" (2 "10") +ANNOTATION: "VC_COV_UNR" +Condition 3 "1999344180" "(scrmbl_mtx_gnt_i && scrmbl_ready_i) 1 -1" (3 "11") +ANNOTATION: "VC_COV_UNR" +Condition 10 "4291765346" "(scrmbl_mtx_gnt_i && scrmbl_ready_i) 1 -1" (1 "01") +ANNOTATION: "VC_COV_UNR" +Condition 16 "3809681040" "(state_q != ErrorSt) 1 -1" (1 "0") +ANNOTATION: "VC_COV_UNR" +Condition 16 "3809681040" "(state_q != ErrorSt) 1 -1" (2 "1") +CHECKSUM: "3727300757 698462587" +INSTANCE: tb.dut.gen_partitions[7].gen_buffered.u_part_buf +ANNOTATION: "VC_COV_UNR" +Condition 3 "1999344180" "(scrmbl_mtx_gnt_i && scrmbl_ready_i) 1 -1" (1 "01") +ANNOTATION: "VC_COV_UNR" +Condition 9 "1580211052" "(scrmbl_mtx_gnt_i && scrmbl_ready_i) 1 -1" (1 "01") +ANNOTATION: "VC_COV_UNR" +Condition 16 "3809681040" "(state_q != ErrorSt) 1 -1" (1 "0") +ANNOTATION: "VC_COV_UNR" +Condition 16 "3809681040" "(state_q != ErrorSt) 1 -1" (2 "1") +CHECKSUM: "3727300757 2302263073" +INSTANCE: tb.dut.gen_partitions[10].gen_lifecycle.u_part_buf +ANNOTATION: "VC_COV_UNR" +Condition 16 "3809681040" "(state_q != ErrorSt) 1 -1" (1 "0") +ANNOTATION: "VC_COV_UNR" +Condition 16 "3809681040" "(state_q != ErrorSt) 1 -1" (2 "1") +ANNOTATION: "VC_COV_UNR" +Condition 18 "624370688" "((base_sel == DigOffset) ? DigestOffset : 11'b11110101000) 1 -1" (2 "1") +ANNOTATION: "VC_COV_UNR" +Condition 19 "4038180897" "(base_sel == DigOffset) 1 -1" (2 "1") +ANNOTATION: "VC_COV_UNR" +Condition 20 "705391888" "((data_sel == ScrmblData) ? scrmbl_data_i : otp_rdata_i) 1 -1" (2 "1") +ANNOTATION: "VC_COV_UNR" +Condition 21 "1499701630" "(data_sel == ScrmblData) 1 -1" (2 "1") +CHECKSUM: "3727300757 691864715" +INSTANCE: tb.dut.gen_partitions[8].gen_buffered.u_part_buf +ANNOTATION: "VC_COV_UNR" +Condition 3 "1999344180" "(scrmbl_mtx_gnt_i && scrmbl_ready_i) 1 -1" (1 "01") +ANNOTATION: "VC_COV_UNR" +Condition 9 "1580211052" "(scrmbl_mtx_gnt_i && scrmbl_ready_i) 1 -1" (1 "01") +ANNOTATION: "VC_COV_UNR" +Condition 16 "3809681040" "(state_q != ErrorSt) 1 -1" (1 "0") +ANNOTATION: "VC_COV_UNR" +Condition 16 "3809681040" "(state_q != ErrorSt) 1 -1" (2 "1") +CHECKSUM: "835220981 1653115005" +INSTANCE: tb.dut.u_tlul_adapter_sram.u_sramreqfifo +ANNOTATION: "VC_COV_UNR" +Condition 2 "4002946372" "((gen_normal_fifo.wptr_msb == gen_normal_fifo.rptr_msb) ? ((1'(gen_normal_fifo.wptr_value) - 1'(gen_normal_fifo.rptr_value))) : (((1'(Depth) - 1'(gen_normal_fifo.rptr_value)) + 1'(gen_normal_fifo.wptr_value)))) 1 -1" (1 "0") +ANNOTATION: "VC_COV_UNR" +Condition 3 "1926118060" "(gen_normal_fifo.wptr_msb == gen_normal_fifo.rptr_msb) 1 -1" (1 "0") +ANNOTATION: "VC_COV_UNR" +Condition 4 "786039886" "(wvalid_i & wready_o & ((~gen_normal_fifo.under_rst))) 1 -1" (2 "101") +ANNOTATION: "VC_COV_UNR" +Condition 4 "786039886" "(wvalid_i & wready_o & ((~gen_normal_fifo.under_rst))) 1 -1" (3 "110") +ANNOTATION: "VC_COV_UNR" +Condition 5 "1324655787" "(rvalid_o & rready_i & ((~gen_normal_fifo.under_rst))) 1 -1" (1 "011") +ANNOTATION: "VC_COV_UNR" +Condition 5 "1324655787" "(rvalid_o & rready_i & ((~gen_normal_fifo.under_rst))) 1 -1" (3 "110") +ANNOTATION: "VC_COV_UNR" +Condition 7 "1709501387" "(((~gen_normal_fifo.empty)) & ((~gen_normal_fifo.under_rst))) 1 -1" (2 "10") +CHECKSUM: "835220981 1198270510" +INSTANCE: tb.dut.u_otp_rsp_fifo +ANNOTATION: "VC_COV_UNR" +Condition 1 "644960181" "(gen_normal_fifo.full ? (2'(Depth)) : ((gen_normal_fifo.wptr_msb == gen_normal_fifo.rptr_msb) ? ((2'(gen_normal_fifo.wptr_value) - 2'(gen_normal_fifo.rptr_value))) : (((2'(Depth) - 2'(gen_normal_fifo.rptr_value)) + 2'(gen_normal_fifo.wptr_value))))) 1 -1" (2 "1") +ANNOTATION: "VC_COV_UNR" +Condition 4 "786039886" "(wvalid_i & wready_o & ((~gen_normal_fifo.under_rst))) 1 -1" (2 "101") +ANNOTATION: "VC_COV_UNR" +Condition 4 "786039886" "(wvalid_i & wready_o & ((~gen_normal_fifo.under_rst))) 1 -1" (3 "110") +ANNOTATION: "VC_COV_UNR" +Condition 5 "1324655787" "(rvalid_o & rready_i & ((~gen_normal_fifo.under_rst))) 1 -1" (1 "011") +ANNOTATION: "VC_COV_UNR" +Condition 5 "1324655787" "(rvalid_o & rready_i & ((~gen_normal_fifo.under_rst))) 1 -1" (3 "110") +ANNOTATION: "VC_COV_UNR" +Condition 6 "342355206" "(((~gen_normal_fifo.full)) & ((~gen_normal_fifo.under_rst))) 1 -1" (1 "01") +ANNOTATION: "VC_COV_UNR" +Condition 7 "1709501387" "(((~gen_normal_fifo.empty)) & ((~gen_normal_fifo.under_rst))) 1 -1" (2 "10") +ANNOTATION: "VC_COV_UNR" +Condition 8 "2721421913" "(gen_normal_fifo.fifo_wptr == (gen_normal_fifo.fifo_rptr ^ {1'b1, {(gen_normal_fifo.PTR_WIDTH - 1) {1'b0}}})) 1 -1" (2 "1") +CHECKSUM: "835220981 814234766" +INSTANCE: tb.dut.u_tlul_adapter_sram.u_rspfifo +ANNOTATION: "VC_COV_UNR" +Condition 2 "4002946372" "((gen_normal_fifo.wptr_msb == gen_normal_fifo.rptr_msb) ? ((1'(gen_normal_fifo.wptr_value) - 1'(gen_normal_fifo.rptr_value))) : (((1'(Depth) - 1'(gen_normal_fifo.rptr_value)) + 1'(gen_normal_fifo.wptr_value)))) 1 -1" (1 "0") +ANNOTATION: "VC_COV_UNR" +Condition 3 "1926118060" "(gen_normal_fifo.wptr_msb == gen_normal_fifo.rptr_msb) 1 -1" (1 "0") +ANNOTATION: "VC_COV_UNR" +Condition 4 "786039886" "(wvalid_i & wready_o & ((~gen_normal_fifo.under_rst))) 1 -1" (2 "101") +ANNOTATION: "VC_COV_UNR" +Condition 4 "786039886" "(wvalid_i & wready_o & ((~gen_normal_fifo.under_rst))) 1 -1" (3 "110") +ANNOTATION: "VC_COV_UNR" +Condition 5 "1324655787" "(rvalid_o & rready_i & ((~gen_normal_fifo.under_rst))) 1 -1" (1 "011") +ANNOTATION: "VC_COV_UNR" +Condition 5 "1324655787" "(rvalid_o & rready_i & ((~gen_normal_fifo.under_rst))) 1 -1" (3 "110") +ANNOTATION: "VC_COV_UNR" +Condition 7 "1709501387" "(((~gen_normal_fifo.empty)) & ((~gen_normal_fifo.under_rst))) 1 -1" (2 "10") +ANNOTATION: "VC_COV_UNR" +Condition 11 "4208363759" "(gen_normal_fifo.fifo_empty && wvalid_i) 1 -1" (1 "01") +CHECKSUM: "835220981 2769699113" +INSTANCE: tb.dut.u_tlul_adapter_sram.u_reqfifo +ANNOTATION: "VC_COV_UNR" +Condition 2 "4002946372" "((gen_normal_fifo.wptr_msb == gen_normal_fifo.rptr_msb) ? ((1'(gen_normal_fifo.wptr_value) - 1'(gen_normal_fifo.rptr_value))) : (((1'(Depth) - 1'(gen_normal_fifo.rptr_value)) + 1'(gen_normal_fifo.wptr_value)))) 1 -1" (1 "0") +ANNOTATION: "VC_COV_UNR" +Condition 3 "1926118060" "(gen_normal_fifo.wptr_msb == gen_normal_fifo.rptr_msb) 1 -1" (1 "0") +ANNOTATION: "VC_COV_UNR" +Condition 4 "786039886" "(wvalid_i & wready_o & ((~gen_normal_fifo.under_rst))) 1 -1" (2 "101") +ANNOTATION: "VC_COV_UNR" +Condition 4 "786039886" "(wvalid_i & wready_o & ((~gen_normal_fifo.under_rst))) 1 -1" (3 "110") +ANNOTATION: "VC_COV_UNR" +Condition 5 "1324655787" "(rvalid_o & rready_i & ((~gen_normal_fifo.under_rst))) 1 -1" (1 "011") +ANNOTATION: "VC_COV_UNR" +Condition 5 "1324655787" "(rvalid_o & rready_i & ((~gen_normal_fifo.under_rst))) 1 -1" (3 "110") +ANNOTATION: "VC_COV_UNR" +Condition 7 "1709501387" "(((~gen_normal_fifo.empty)) & ((~gen_normal_fifo.under_rst))) 1 -1" (2 "10") +CHECKSUM: "4255502330 3554514034" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr3_field3 +ANNOTATION: "VC_COV_UNR" +Branch 0 "3759852512" "wr_en" (0) "wr_en 1" +ANNOTATION: "VC_COV_UNR" +Branch 1 "1017474648" "(!rst_ni)" (1) "(!rst_ni) 0,1" +CHECKSUM: "4255502330 3554514034" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr3_field4 +ANNOTATION: "VC_COV_UNR" +Branch 0 "3759852512" "wr_en" (0) "wr_en 1" +ANNOTATION: "VC_COV_UNR" +Branch 1 "1017474648" "(!rst_ni)" (1) "(!rst_ni) 0,1" +CHECKSUM: "4255502330 3554514034" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr3_field5 +ANNOTATION: "VC_COV_UNR" +Branch 0 "3759852512" "wr_en" (0) "wr_en 1" +ANNOTATION: "VC_COV_UNR" +Branch 1 "1017474648" "(!rst_ni)" (1) "(!rst_ni) 0,1" +CHECKSUM: "4255502330 3554514034" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr3_field6 +ANNOTATION: "VC_COV_UNR" +Branch 0 "3759852512" "wr_en" (0) "wr_en 1" +ANNOTATION: "VC_COV_UNR" +Branch 1 "1017474648" "(!rst_ni)" (1) "(!rst_ni) 0,1" +CHECKSUM: "4255502330 3554514034" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr3_field7 +ANNOTATION: "VC_COV_UNR" +Branch 0 "3759852512" "wr_en" (0) "wr_en 1" +ANNOTATION: "VC_COV_UNR" +Branch 1 "1017474648" "(!rst_ni)" (1) "(!rst_ni) 0,1" +CHECKSUM: "4255502330 3554514034" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr3_field8 +ANNOTATION: "VC_COV_UNR" +Branch 0 "3759852512" "wr_en" (0) "wr_en 1" +ANNOTATION: "VC_COV_UNR" +Branch 1 "1017474648" "(!rst_ni)" (1) "(!rst_ni) 0,1" +CHECKSUM: "4255502330 3554514034" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr5_field2 +ANNOTATION: "VC_COV_UNR" +Branch 0 "3759852512" "wr_en" (0) "wr_en 1" +ANNOTATION: "VC_COV_UNR" +Branch 1 "1017474648" "(!rst_ni)" (1) "(!rst_ni) 0,1" +CHECKSUM: "4255502330 3554514034" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr5_field3 +ANNOTATION: "VC_COV_UNR" +Branch 0 "3759852512" "wr_en" (0) "wr_en 1" +ANNOTATION: "VC_COV_UNR" +Branch 1 "1017474648" "(!rst_ni)" (1) "(!rst_ni) 0,1" +CHECKSUM: "4255502330 3554514034" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr5_field4 +ANNOTATION: "VC_COV_UNR" +Branch 0 "3759852512" "wr_en" (0) "wr_en 1" +ANNOTATION: "VC_COV_UNR" +Branch 1 "1017474648" "(!rst_ni)" (1) "(!rst_ni) 0,1" +CHECKSUM: "4255502330 3554514034" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr5_field5 +ANNOTATION: "VC_COV_UNR" +Branch 0 "3759852512" "wr_en" (0) "wr_en 1" +ANNOTATION: "VC_COV_UNR" +Branch 1 "1017474648" "(!rst_ni)" (1) "(!rst_ni) 0,1" +CHECKSUM: "4255502330 3554514034" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr7_field0 +ANNOTATION: "VC_COV_UNR" +Branch 0 "3759852512" "wr_en" (0) "wr_en 1" +ANNOTATION: "VC_COV_UNR" +Branch 1 "1017474648" "(!rst_ni)" (1) "(!rst_ni) 0,1" +CHECKSUM: "4255502330 3554514034" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr7_field1 +ANNOTATION: "VC_COV_UNR" +Branch 0 "3759852512" "wr_en" (0) "wr_en 1" +ANNOTATION: "VC_COV_UNR" +Branch 1 "1017474648" "(!rst_ni)" (1) "(!rst_ni) 0,1" +CHECKSUM: "4255502330 3554514034" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr7_field2 +ANNOTATION: "VC_COV_UNR" +Branch 0 "3759852512" "wr_en" (0) "wr_en 1" +ANNOTATION: "VC_COV_UNR" +Branch 1 "1017474648" "(!rst_ni)" (1) "(!rst_ni) 0,1" +CHECKSUM: "4255502330 3554514034" +INSTANCE: tb.dut.u_otp.gen_generic.u_impl_generic.u_reg_top.u_csr7_field3 +ANNOTATION: "VC_COV_UNR" +Branch 0 "3759852512" "wr_en" (0) "wr_en 1" +ANNOTATION: "VC_COV_UNR" +Branch 1 "1017474648" "(!rst_ni)" (1) "(!rst_ni) 0,1" +CHECKSUM: "1335069400 3286487832" +INSTANCE: tb.dut.u_tlul_adapter_sram +ANNOTATION: "VC_COV_UNR" +Branch 2 "1058271942" "(vld_rd_rsp && reqfifo_rdata.error)" (0) "(vld_rd_rsp && reqfifo_rdata.error) 1,-" +ANNOTATION: "VC_COV_UNR" +Branch 6 "744749108" "reqfifo_rvalid" (2) "reqfifo_rvalid 1,0,0" +CHECKSUM: "2032872600 3832429488" +INSTANCE: tb.dut.u_scrmbl_mtx +ANNOTATION: "vcs_gen_start:level=1,offset=0:vcs_gen_end:VC_COV_UNR" +Branch 2 "1747167515" "gen_normal_case.gen_tree[1].gen_level[0].gen_nodes.sel" (1) "gen_normal_case.gen_tree[1].gen_level[0].gen_nodes.sel 0" +ANNOTATION: "vcs_gen_start:level=1,offset=0:vcs_gen_end:VC_COV_UNR" +Branch 3 "1747167515" "gen_normal_case.gen_tree[1].gen_level[0].gen_nodes.sel" (1) "gen_normal_case.gen_tree[1].gen_level[0].gen_nodes.sel 0" +ANNOTATION: "vcs_gen_start:level=2,offset=0:vcs_gen_end:VC_COV_UNR" +Branch 6 "3123337246" "gen_normal_case.gen_tree[2].gen_level[0].gen_nodes.sel" (1) "gen_normal_case.gen_tree[2].gen_level[0].gen_nodes.sel 0" +ANNOTATION: "vcs_gen_start:level=2,offset=0:vcs_gen_end:VC_COV_UNR" +Branch 7 "3123337246" "gen_normal_case.gen_tree[2].gen_level[0].gen_nodes.sel" (1) "gen_normal_case.gen_tree[2].gen_level[0].gen_nodes.sel 0" +ANNOTATION: "vcs_gen_start:level=3,offset=0:vcs_gen_end:VC_COV_UNR" +Branch 14 "840384514" "gen_normal_case.gen_tree[3].gen_level[0].gen_nodes.sel" (1) "gen_normal_case.gen_tree[3].gen_level[0].gen_nodes.sel 0" +ANNOTATION: "vcs_gen_start:level=3,offset=0:vcs_gen_end:VC_COV_UNR" +Branch 15 "840384514" "gen_normal_case.gen_tree[3].gen_level[0].gen_nodes.sel" (1) "gen_normal_case.gen_tree[3].gen_level[0].gen_nodes.sel 0" +ANNOTATION: "vcs_gen_start:level=3,offset=1:vcs_gen_end:VC_COV_UNR" +Branch 16 "2813219087" "gen_normal_case.gen_tree[3].gen_level[1].gen_nodes.sel" (1) "gen_normal_case.gen_tree[3].gen_level[1].gen_nodes.sel 0" +ANNOTATION: "vcs_gen_start:level=3,offset=1:vcs_gen_end:VC_COV_UNR" +Branch 17 "2813219087" "gen_normal_case.gen_tree[3].gen_level[1].gen_nodes.sel" (1) "gen_normal_case.gen_tree[3].gen_level[1].gen_nodes.sel 0" +ANNOTATION: "vcs_gen_start:level=3,offset=2:vcs_gen_end:VC_COV_UNR" +Branch 18 "2452890474" "gen_normal_case.gen_tree[3].gen_level[2].gen_nodes.sel" (1) "gen_normal_case.gen_tree[3].gen_level[2].gen_nodes.sel 0" +ANNOTATION: "vcs_gen_start:level=3,offset=2:vcs_gen_end:VC_COV_UNR" +Branch 19 "2452890474" "gen_normal_case.gen_tree[3].gen_level[2].gen_nodes.sel" (1) "gen_normal_case.gen_tree[3].gen_level[2].gen_nodes.sel 0" +ANNOTATION: "vcs_gen_start:level=3,offset=5:vcs_gen_end:VC_COV_UNR" +Branch 24 "3811150440" "gen_normal_case.gen_tree[3].gen_level[5].gen_nodes.sel" (1) "gen_normal_case.gen_tree[3].gen_level[5].gen_nodes.sel 0" +ANNOTATION: "vcs_gen_start:level=3,offset=5:vcs_gen_end:VC_COV_UNR" +Branch 25 "3811150440" "gen_normal_case.gen_tree[3].gen_level[5].gen_nodes.sel" (1) "gen_normal_case.gen_tree[3].gen_level[5].gen_nodes.sel 0" +ANNOTATION: "vcs_gen_start:level=3,offset=6:vcs_gen_end:VC_COV_UNR" +Branch 26 "3602118669" "gen_normal_case.gen_tree[3].gen_level[6].gen_nodes.sel" (1) "gen_normal_case.gen_tree[3].gen_level[6].gen_nodes.sel 0" +ANNOTATION: "vcs_gen_start:level=3,offset=6:vcs_gen_end:VC_COV_UNR" +Branch 27 "3602118669" "gen_normal_case.gen_tree[3].gen_level[6].gen_nodes.sel" (1) "gen_normal_case.gen_tree[3].gen_level[6].gen_nodes.sel 0" +CHECKSUM: "4224194069 3219254590" +INSTANCE: tb.dut.u_tlul_lc_gate +ANNOTATION: "VC_COV_UNR" +Branch 2 "1850090820" "state_q" (8) "state_q StFlush ,-,-,-,0,0,-,-" +CHECKSUM: "3882079776 3692779052" +INSTANCE: tb.dut.u_otp_ctrl_scrmbl +ANNOTATION: "VC_COV_UNR" +Branch 5 "2137472258" "state_q" (8) "state_q IdleSt ,1,default,-,-,-,-,-" +CHECKSUM: "903559179 3978479804" +INSTANCE: tb.dut.u_otp_ctrl_dai +ANNOTATION: "VC_COV_UNR" +Branch 2 "2060689171" "state_q" (1) "state_q ResetSt ,1,0,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 2 "2060689171" "state_q" (3) "state_q InitOtpSt ,-,-,1,1,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 2 "2060689171" "state_q" (35) "state_q WriteWaitSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,1,1,1,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-" +CHECKSUM: "1158524476 2213598664" +INSTANCE: tb.dut.u_otp_ctrl_kdi +ANNOTATION: "VC_COV_UNR" +Branch 4 "853326673" "state_q" (20) "state_q DigWaitSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,1,1,1,-,-,-" +CHECKSUM: "3162909804 3977884699" +INSTANCE: tb.dut.gen_partitions[0].gen_unbuffered.u_part_unbuf +ANNOTATION: "VC_COV_UNR" +Branch 5 "490981166" "state_q" (4) "state_q InitSt ,-,-,0,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 5 "490981166" "state_q" (5) "state_q InitWaitSt ,-,-,-,1,1,1,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 5 "490981166" "state_q" (7) "state_q InitWaitSt ,-,-,-,1,0,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 5 "490981166" "state_q" (14) "state_q ReadWaitSt ,-,-,-,-,-,-,-,-,-,1,1,1,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 5 "490981166" "state_q" (16) "state_q ReadWaitSt ,-,-,-,-,-,-,-,-,-,1,0,-,-,-,-" +CHECKSUM: "3727300757 3964686460" +INSTANCE: tb.dut.gen_partitions[7].gen_buffered.u_part_buf +ANNOTATION: "VC_COV_UNR" +Branch 5 "3673468110" "state_q" (20) "state_q CnstyReadSt ,-,-,-,-,-,-,-,-,-,-,-,-,0,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 5 "3673468110" "state_q" (35) "state_q IntegDigClrSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,1,0,-,0,-,-,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 5 "3673468110" "state_q" (37) "state_q IntegDigClrSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,0,-,-,-,0,-,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 5 "3673468110" "state_q" (47) "state_q IntegDigSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,1,0,-,-,0,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 5 "3673468110" "state_q" (49) "state_q IntegDigPadSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,1,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 5 "3673468110" "state_q" (50) "state_q IntegDigPadSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,0,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 6 "375157548" "ecc_err" (0) "ecc_err 1,1" +ANNOTATION: "VC_COV_UNR" +Branch 6 "375157548" "ecc_err" (1) "ecc_err 1,0" +CHECKSUM: "3727300757 3964686460" +INSTANCE: tb.dut.gen_partitions[8].gen_buffered.u_part_buf +ANNOTATION: "VC_COV_UNR" +Branch 5 "3673468110" "state_q" (20) "state_q CnstyReadSt ,-,-,-,-,-,-,-,-,-,-,-,-,0,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 5 "3673468110" "state_q" (35) "state_q IntegDigClrSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,1,0,-,0,-,-,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 5 "3673468110" "state_q" (37) "state_q IntegDigClrSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,0,-,-,-,0,-,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 5 "3673468110" "state_q" (47) "state_q IntegDigSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,1,0,-,-,0,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 5 "3673468110" "state_q" (49) "state_q IntegDigPadSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,1,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 5 "3673468110" "state_q" (50) "state_q IntegDigPadSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,0,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 6 "375157548" "ecc_err" (0) "ecc_err 1,1" +ANNOTATION: "VC_COV_UNR" +Branch 6 "375157548" "ecc_err" (1) "ecc_err 1,0" +CHECKSUM: "3727300757 3964686460" +INSTANCE: tb.dut.gen_partitions[9].gen_buffered.u_part_buf +ANNOTATION: "VC_COV_UNR" +Branch 5 "3673468110" "state_q" (20) "state_q CnstyReadSt ,-,-,-,-,-,-,-,-,-,-,-,-,0,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 5 "3673468110" "state_q" (35) "state_q IntegDigClrSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,1,0,-,0,-,-,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 5 "3673468110" "state_q" (37) "state_q IntegDigClrSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,0,-,-,-,0,-,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 5 "3673468110" "state_q" (47) "state_q IntegDigSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,1,0,-,-,0,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 5 "3673468110" "state_q" (49) "state_q IntegDigPadSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,1,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 5 "3673468110" "state_q" (50) "state_q IntegDigPadSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,0,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 6 "375157548" "ecc_err" (0) "ecc_err 1,1" +ANNOTATION: "VC_COV_UNR" +Branch 6 "375157548" "ecc_err" (1) "ecc_err 1,0" +CHECKSUM: "3727300757 2334161493" +INSTANCE: tb.dut.gen_partitions[5].gen_buffered.u_part_buf +ANNOTATION: "VC_COV_UNR" +Branch 4 "344890278" "state_q" (11) "state_q InitDescrSt ,-,-,-,-,-,-,-,1,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 4 "344890278" "state_q" (12) "state_q InitDescrSt ,-,-,-,-,-,-,-,0,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 4 "344890278" "state_q" (13) "state_q InitDescrWaitSt ,-,-,-,-,-,-,-,-,1,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 4 "344890278" "state_q" (14) "state_q InitDescrWaitSt ,-,-,-,-,-,-,-,-,0,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 4 "344890278" "state_q" (20) "state_q CnstyReadSt ,-,-,-,-,-,-,-,-,-,-,-,-,0,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 4 "344890278" "state_q" (33) "state_q IntegDigClrSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,1,1,0,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 4 "344890278" "state_q" (37) "state_q IntegDigClrSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,0,-,-,-,0,-,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 4 "344890278" "state_q" (38) "state_q IntegScrSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,1,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 4 "344890278" "state_q" (39) "state_q IntegScrSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,0,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 4 "344890278" "state_q" (40) "state_q IntegScrWaitSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,1,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 4 "344890278" "state_q" (41) "state_q IntegScrWaitSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,0,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 4 "344890278" "state_q" (49) "state_q IntegDigPadSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,1,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 4 "344890278" "state_q" (50) "state_q IntegDigPadSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,0,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 5 "375157548" "ecc_err" (0) "ecc_err 1,1" +ANNOTATION: "VC_COV_UNR" +Branch 5 "375157548" "ecc_err" (1) "ecc_err 1,0" +CHECKSUM: "3727300757 2334161493" +INSTANCE: tb.dut.gen_partitions[6].gen_buffered.u_part_buf +ANNOTATION: "VC_COV_UNR" +Branch 4 "344890278" "state_q" (11) "state_q InitDescrSt ,-,-,-,-,-,-,-,1,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 4 "344890278" "state_q" (12) "state_q InitDescrSt ,-,-,-,-,-,-,-,0,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 4 "344890278" "state_q" (13) "state_q InitDescrWaitSt ,-,-,-,-,-,-,-,-,1,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 4 "344890278" "state_q" (14) "state_q InitDescrWaitSt ,-,-,-,-,-,-,-,-,0,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 4 "344890278" "state_q" (20) "state_q CnstyReadSt ,-,-,-,-,-,-,-,-,-,-,-,-,0,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 4 "344890278" "state_q" (33) "state_q IntegDigClrSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,1,1,0,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 4 "344890278" "state_q" (37) "state_q IntegDigClrSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,0,-,-,-,0,-,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 4 "344890278" "state_q" (38) "state_q IntegScrSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,1,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 4 "344890278" "state_q" (39) "state_q IntegScrSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,0,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 4 "344890278" "state_q" (40) "state_q IntegScrWaitSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,1,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 4 "344890278" "state_q" (41) "state_q IntegScrWaitSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,0,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 4 "344890278" "state_q" (42) "state_q IntegDigSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,1,1,1,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 4 "344890278" "state_q" (45) "state_q IntegDigSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,1,0,-,0,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 5 "375157548" "ecc_err" (0) "ecc_err 1,1" +ANNOTATION: "VC_COV_UNR" +Branch 5 "375157548" "ecc_err" (1) "ecc_err 1,0" +CHECKSUM: "3727300757 2810977924" +INSTANCE: tb.dut.gen_partitions[10].gen_lifecycle.u_part_buf +ANNOTATION: "VC_COV_UNR" +Branch 0 "2541341865" "(base_sel == DigOffset)" (0) "(base_sel == DigOffset) 1" +ANNOTATION: "VC_COV_UNR" +Branch 1 "341865418" "(data_sel == ScrmblData)" (0) "(data_sel == ScrmblData) 1" +ANNOTATION: "VC_COV_UNR" +Branch 3 "1949926999" "state_q" (12) "state_q InitDescrSt ,-,-,-,-,-,-,-,0,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 3 "1949926999" "state_q" (14) "state_q InitDescrWaitSt ,-,-,-,-,-,-,-,-,0,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 3 "1949926999" "state_q" (33) "state_q IntegDigClrSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,1,1,0,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 3 "1949926999" "state_q" (35) "state_q IntegDigClrSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,1,0,-,0,-,-,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 3 "1949926999" "state_q" (37) "state_q IntegDigClrSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,0,-,-,-,0,-,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 3 "1949926999" "state_q" (39) "state_q IntegScrSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,0,-,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 3 "1949926999" "state_q" (41) "state_q IntegScrWaitSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,0,-,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 3 "1949926999" "state_q" (45) "state_q IntegDigSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,1,0,-,0,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 3 "1949926999" "state_q" (47) "state_q IntegDigSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,1,0,-,-,0,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 3 "1949926999" "state_q" (48) "state_q IntegDigSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,0,-,-,-,-,-,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 3 "1949926999" "state_q" (50) "state_q IntegDigPadSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,0,-,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 3 "1949926999" "state_q" (52) "state_q IntegDigFinSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,0,-,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 3 "1949926999" "state_q" (56) "state_q IntegDigWaitSt ,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,0,-,-,-" +ANNOTATION: "VC_COV_UNR" +Branch 4 "375157548" "ecc_err" (0) "ecc_err 1,1" +ANNOTATION: "VC_COV_UNR" +Branch 4 "375157548" "ecc_err" (1) "ecc_err 1,0" +CHECKSUM: "835220981 2115631974" +INSTANCE: tb.dut.u_tlul_adapter_sram.u_reqfifo +ANNOTATION: "VC_COV_UNR" +Branch 0 "1862733684" "gen_normal_fifo.full" (2) "gen_normal_fifo.full 0,0" +CHECKSUM: "835220981 2115631974" +INSTANCE: tb.dut.u_tlul_adapter_sram.u_sramreqfifo +ANNOTATION: "VC_COV_UNR" +Branch 0 "1862733684" "gen_normal_fifo.full" (2) "gen_normal_fifo.full 0,0" +CHECKSUM: "835220981 3240364287" +INSTANCE: tb.dut.u_tlul_adapter_sram.u_rspfifo +ANNOTATION: "VC_COV_UNR" +Branch 0 "1862733684" "gen_normal_fifo.full" (2) "gen_normal_fifo.full 0,0" +CHECKSUM: "835220981 3240364287" +INSTANCE: tb.dut.u_otp_rsp_fifo +ANNOTATION: "VC_COV_UNR" +Branch 0 "1862733684" "gen_normal_fifo.full" (0) "gen_normal_fifo.full 1,-" +CHECKSUM: "3818998033 3877782530" +INSTANCE: tb.dut.gen_partitions[6].gen_buffered.u_part_buf.u_otp_ctrl_ecc_reg +ANNOTATION: "VC_COV_UNR" +Branch 1 "2154824802" "(32'(addr_i) < Depth)" (2) "(32'(addr_i) < Depth) 0,-" +CHECKSUM: "1817939962 689627449" +INSTANCE: tb.dut.u_tlul_adapter_sram.u_reqfifo.gen_normal_fifo.u_fifo_cnt +ANNOTATION: "VC_COV_UNR" +Branch 0 "353148737" "(!rst_ni)" (3) "(!rst_ni) 0,0,0,1" +ANNOTATION: "VC_COV_UNR" +Branch 1 "3145009581" "(!rst_ni)" (3) "(!rst_ni) 0,0,0,1" +CHECKSUM: "1817939962 689627449" +INSTANCE: tb.dut.u_tlul_adapter_sram.u_sramreqfifo.gen_normal_fifo.u_fifo_cnt +ANNOTATION: "VC_COV_UNR" +Branch 0 "353148737" "(!rst_ni)" (3) "(!rst_ni) 0,0,0,1" +ANNOTATION: "VC_COV_UNR" +Branch 1 "3145009581" "(!rst_ni)" (3) "(!rst_ni) 0,0,0,1" +CHECKSUM: "1817939962 689627449" +INSTANCE: tb.dut.u_tlul_adapter_sram.u_rspfifo.gen_normal_fifo.u_fifo_cnt +ANNOTATION: "VC_COV_UNR" +Branch 0 "353148737" "(!rst_ni)" (3) "(!rst_ni) 0,0,0,1" +ANNOTATION: "VC_COV_UNR" +Branch 1 "3145009581" "(!rst_ni)" (3) "(!rst_ni) 0,0,0,1" diff --git a/src/fuse_ctrl/dv/cov/otp_ctrl_cover.cfg b/src/fuse_ctrl/dv/cov/otp_ctrl_cover.cfg new file mode 100755 index 000000000..d69a19327 --- /dev/null +++ b/src/fuse_ctrl/dv/cov/otp_ctrl_cover.cfg @@ -0,0 +1,14 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + + +// The modules below are preverified in FPV testbench. +// There are many conditional coverage and hard to them all. +-moduletree prim_secded_inv_72_64_dec +-moduletree prim_secded_inv_72_64_enc + +begin tgl + +module prim_secded_inv_72_64_dec + +module prim_secded_inv_72_64_enc +end diff --git a/src/fuse_ctrl/dv/env/otp_ctrl_env_cov.sv b/src/fuse_ctrl/dv/env/otp_ctrl_env_cov.sv new file mode 100755 index 000000000..5f9e6ce02 --- /dev/null +++ b/src/fuse_ctrl/dv/env/otp_ctrl_env_cov.sv @@ -0,0 +1,341 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// DO NOT EDIT THIS FILE DIRECTLY. +// It has been generated with ./util/design/gen-otp-mmap.py + +/** + * Covergoups that are dependent on run-time parameters that may be available + * only in build_phase can be defined here + * Covergroups may also be wrapped inside helper classes if needed. + */ +class otp_ctrl_unbuf_err_code_cg_wrap; + // Unbuffered partition can use TLUL interface to read out but cannot write, thus error_code does + // not have write_blank_err. + covergroup unbuf_err_code_cg(string name) with function sample(bit [TL_DW-1:0] val); + option.per_instance = 1; + option.name = name; + err_code_vals: coverpoint val { + bins no_err = {OtpNoError}; + bins macro_err = {OtpMacroError}; + bins ecc_corr_err = {OtpMacroEccCorrError}; + bins ecc_uncorr_err = {OtpMacroEccUncorrError}; + bins access_err = {OtpAccessError}; + bins check_fail = {OtpCheckFailError}; + bins fsm_err = {OtpFsmStateError}; + illegal_bins illegal_err = default; + } + endgroup + + function new(string name); + unbuf_err_code_cg = new(name); + endfunction +endclass + +class otp_ctrl_buf_err_code_cg_wrap; + // Buffered partition must use DAI interface to access partition, so it does not have access_err + // and write_blank err. + covergroup buf_err_code_cg(string name) with function sample(bit [TL_DW-1:0] val); + option.per_instance = 1; + option.name = name; + err_code_vals: coverpoint val { + bins no_err = {OtpNoError}; + bins macro_err = {OtpMacroError}; + bins ecc_corr_err = {OtpMacroEccCorrError}; + bins ecc_uncorr_err = {OtpMacroEccUncorrError}; + bins check_fail = {OtpCheckFailError}; + bins fsm_err = {OtpFsmStateError}; + illegal_bins illegal_err = default; + } + endgroup + + function new(string name); + buf_err_code_cg = new(name); + endfunction +endclass + +class otp_ctrl_csr_rd_after_alert_cg_wrap; + // This covergroup samples CSRs being checked (via CSR read) after fatal alert is issued. + covergroup csr_rd_after_alert_cg(otp_ctrl_core_reg_block ral) with function sample(bit[TL_DW-1:0] + csr_offset); + read_csr_after_alert_issued: coverpoint csr_offset { + bins unbuffered_digests = { + ral.vendor_test_digest[0].get_offset(), + ral.vendor_test_digest[1].get_offset(), + ral.non_secret_fuses_digest[0].get_offset(), + ral.non_secret_fuses_digest[1].get_offset() + }; + bins hw_digests = { + }; + bins secret_digests = { + ral.secret0_digest[0].get_offset(), + ral.secret0_digest[1].get_offset(), + ral.secret1_digest[0].get_offset(), + ral.secret1_digest[1].get_offset() + }; + bins direct_access_rdata = { + ral.direct_access_rdata[0].get_offset(), + ral.direct_access_rdata[1].get_offset() + }; + bins status = { + ral.status.get_offset() + }; + bins error_code = { + ral.err_code[0].get_offset(), + ral.err_code[1].get_offset(), + ral.err_code[2].get_offset(), + ral.err_code[3].get_offset(), + ral.err_code[4].get_offset(), + ral.err_code[5].get_offset(), + ral.err_code[6].get_offset() + }; + } + endgroup + + function new(otp_ctrl_core_reg_block ral); + csr_rd_after_alert_cg = new(ral); + endfunction + + function void sample(bit[TL_DW-1:0] csr_offset); + csr_rd_after_alert_cg.sample(csr_offset); + endfunction +endclass + +class otp_ctrl_unbuf_access_lock_cg_wrap; + covergroup unbuf_access_lock_cg(string name) with function sample(bit read_lock, bit write_lock, + bit is_write); + option.per_instance = 1; + option.name = name; + read_access_locked: coverpoint read_lock; + write_access_locked: coverpoint write_lock; + operation_type: coverpoint is_write { + bins write_op = {1}; + bins read_op = {0}; + } + unbuf_part_access_cross: cross read_access_locked, write_access_locked, operation_type; + endgroup + + function new(string name); + unbuf_access_lock_cg = new(name); + endfunction + + function void sample(bit read_lock, bit write_lock, bit is_write); + unbuf_access_lock_cg.sample(read_lock, write_lock, is_write); + endfunction +endclass + +class otp_ctrl_env_cov extends cip_base_env_cov #(.CFG_T(otp_ctrl_env_cfg)); + `uvm_component_utils(otp_ctrl_env_cov) + + // the base class provides the following handles for use: + // otp_ctrl_env_cfg: cfg + + otp_ctrl_unbuf_err_code_cg_wrap unbuf_err_code_cg_wrap[NumPartUnbuf]; + otp_ctrl_buf_err_code_cg_wrap buf_err_code_cg_wrap[NumPartBuf]; + otp_ctrl_csr_rd_after_alert_cg_wrap csr_rd_after_alert_cg_wrap; + otp_ctrl_unbuf_access_lock_cg_wrap unbuf_access_lock_cg_wrap[NumPartUnbuf]; + + bit_toggle_cg_wrap lc_prog_cg; + bit_toggle_cg_wrap otbn_req_cg; + bit_toggle_cg_wrap status_csr_cg[OtpStatusFieldSize]; + + // covergroups + // This covergroup collects different conditions when outputs (hwcfg_o, keymgr_key_o) are checked + // in scb: + // - If lc_esc_en is On + // - If each partition is locked (expect LC) + covergroup power_on_cg with function sample (bit lc_esc_en, bit[NumPart-2:0] parts_locked); + lc_esc: coverpoint lc_esc_en; + vendor_test_lock: coverpoint parts_locked[0]; + non_secret_fuses_lock: coverpoint parts_locked[1]; + secret0_lock: coverpoint parts_locked[2]; + secret1_lock: coverpoint parts_locked[3]; + endgroup + + // This covergroup is sampled only if flash request passed scb check. + covergroup flash_req_cg with function sample (int index, bit locked); + flash_index: coverpoint index { + bins flash_data_key = {FlashDataKey}; + bins flash_addr_key = {FlashAddrKey}; + illegal_bins il = default; + } + secret1_lock: coverpoint locked; + flash_req_lock_cross: cross flash_index, secret1_lock; + endgroup + + // This covergroup is sampled only if sram request passed scb check. + covergroup sram_req_cg with function sample (int index, bit locked); + sram_index: coverpoint index { + bins sram_key[NumSramKeyReqSlots] = {[0:(NumSramKeyReqSlots-1)]}; + illegal_bins il = default; + } + secret1_lock: coverpoint locked; + sram_req_lock_cross: cross sram_index, secret1_lock; + endgroup + + // This covergroup is sampled only if keymgr output passed scb check. + covergroup keymgr_o_cg with function sample (bit lc_seed_hw_rd_en, bit locked); + keymgr_rd_en: coverpoint lc_seed_hw_rd_en; + // TODO: probably should add all partitions with keymgr material here. + secret2_lock: coverpoint locked; + keymgr_output_conditions: cross keymgr_rd_en, secret2_lock; + endgroup + + // This covergroup samples dai request being issued after fatal alert is issued. + covergroup req_dai_access_after_alert_cg with function sample(bit [TL_DW-1:0] val); + req_dai_access_after_alert_issued: coverpoint val { + bins dai_write = {DaiWrite}; + bins dai_read = {DaiRead}; + bins dai_digest = {DaiDigest}; + } + endgroup + + // This covergroup samples background check being issued after fatal alert is issued. + covergroup issue_checks_after_alert_cg with function sample(bit [TL_DW-1:0] val); + issue_checks_after_alert_issued: coverpoint val { + bins integrity_check = {1}; + bins consistency_check = {2}; + } + endgroup + + // This covergroup collects DAI err_code value. + // DAI access does not have checks, thus no check_fail error. + covergroup dai_err_code_cg with function sample(bit [TL_DW-1:0] val, int part_idx); + err_code_vals: coverpoint val { + bins no_err = {OtpNoError}; + bins macro_err = {OtpMacroError}; + bins ecc_corr_err = {OtpMacroEccCorrError}; + bins ecc_uncorr_err = {OtpMacroEccUncorrError}; + bins write_blank_err = {OtpMacroWriteBlankError}; + bins access_err = {OtpAccessError}; + bins fsm_err = {OtpFsmStateError}; + illegal_bins illegal_err = default; + } + partition: coverpoint part_idx { + bins vendor_test = {VendorTestIdx}; + bins non_secret_fuses = {NonSecretFusesIdx}; + bins secret0 = {Secret0Idx}; + bins secret1 = {Secret1Idx}; + bins life_cycle = {LifeCycleIdx}; + bins illegal_idx = default; + } + // LC partition has a separate LCI err_code to collect macro related errors. + dai_err_code_for_all_partitions: cross err_code_vals, partition { + // Illegal bin - vendor_test partition does not have EccUncorrectable error. + illegal_bins vendor_test_ecc_uncorrectable_err = + binsof (partition.vendor_test) && binsof (err_code_vals.ecc_uncorr_err); + ignore_bins life_cycle_ignore = binsof (partition.life_cycle) && + binsof(err_code_vals) intersect {[OtpMacroError:OtpMacroWriteBlankError]}; + } + endgroup + + // This covergroup collects LCI err_code value. + // LCI access does not have digest, thus no access_err. Check_fail, ecc_errors are covered in lc + // buffered partition instead of LCI here. + covergroup lci_err_code_cg with function sample(bit [TL_DW-1:0] val); + err_code_vals: coverpoint val { + bins no_err = {OtpNoError}; + bins macro_err = {OtpMacroError}; + bins write_blank_err = {OtpMacroWriteBlankError}; + bins fsm_err = {OtpFsmStateError}; + illegal_bins illegal_err = default; + } + endgroup + + covergroup dai_access_secret2_cg with function sample(bit lc_rw_en, dai_cmd_e dai_cmd); + lc_creator_seed_sw_rw_en: coverpoint lc_rw_en; + dai_access_cmd: coverpoint dai_cmd { + bins dai_rd = {DaiRead}; + bins dai_wr = {DaiWrite}; + bins dai_digest = {DaiDigest}; + } + dai_access_secret2: cross lc_creator_seed_sw_rw_en, dai_access_cmd; + endgroup + + function new(string name, uvm_component parent); + super.new(name, parent); + // Create coverage from local covergroups. + power_on_cg = new(); + flash_req_cg = new(); + sram_req_cg = new(); + keymgr_o_cg = new(); + req_dai_access_after_alert_cg = new(); + issue_checks_after_alert_cg = new(); + dai_err_code_cg = new(); + lci_err_code_cg = new(); + dai_access_secret2_cg = new(); + endfunction : new + + virtual function void build_phase(uvm_phase phase); + super.build_phase(phase); + // Create instances from bit_toggle_cg_wrapper. + lc_prog_cg = new("lc_prog_cg", "", 0); + otbn_req_cg = new("otbn_req_cg", "", 0); + foreach (status_csr_cg[i]) begin + otp_status_e index = otp_status_e'(i); + status_csr_cg[i]= new(index.name, "status_csr_cg", 0); + end + + // Create instances from external wrapper classes. + csr_rd_after_alert_cg_wrap = new(cfg.ral); + foreach (unbuf_err_code_cg_wrap[i]) begin + otp_status_e index = otp_status_e'(i); + unbuf_err_code_cg_wrap[i] = new($sformatf("unbuf_err_code_cg_wrap[%0s]", index.name)); + end + foreach (buf_err_code_cg_wrap[i]) begin + otp_status_e index = otp_status_e'(i + 2); + buf_err_code_cg_wrap[i] = new($sformatf("buf_err_code_cg_wrap[%0s]", index.name)); + end + foreach (unbuf_access_lock_cg_wrap[i]) begin + part_idx_e index = part_idx_e'(i); + unbuf_access_lock_cg_wrap[i] = new($sformatf("buf_err_code_cg_wrap[%0s]", index.name)); + end + endfunction + + function void collect_status_cov(bit [TL_DW-1:0] val); + foreach (status_csr_cg[i]) begin + status_csr_cg[i].sample(val[i]); + end + endfunction + + // Collect coverage for err_code when it is a compact multi-reg. For DAI error it uses the given + // access_part_idx as the target of the DAI access. + function void collect_compact_err_code_cov(bit [TL_DW-1:0] val, int access_part_idx = DaiIdx); + dv_base_reg_field err_code_flds[$]; + cfg.ral.err_code[0].get_dv_base_reg_fields(err_code_flds); + foreach (err_code_flds[part]) begin + collect_err_code_cov(part, get_field_val(err_code_flds[part], val), access_part_idx); + end + endfunction + + // Collect coverage for a given partition error_code. For DAI error it uses the given + // access_part_idx as the target of the DAI access. + function void collect_err_code_cov(int part_idx, bit [TL_DW-1:0] val, + int access_part_idx = DaiIdx); + case (part_idx) + OtpVendorTestErrIdx: begin + unbuf_err_code_cg_wrap[part_idx].unbuf_err_code_cg.sample(val); + end + OtpNonSecretFusesErrIdx: begin + unbuf_err_code_cg_wrap[part_idx].unbuf_err_code_cg.sample(val); + end + OtpSecret0ErrIdx: begin + buf_err_code_cg_wrap[part_idx - NumPartUnbuf].buf_err_code_cg.sample(val); + end + OtpSecret1ErrIdx: begin + buf_err_code_cg_wrap[part_idx - NumPartUnbuf].buf_err_code_cg.sample(val); + end + OtpLifeCycleErrIdx: begin + end + OtpDaiErrIdx: begin + dai_err_code_cg.sample(val, access_part_idx); + end + OtpLciErrIdx: begin + lci_err_code_cg.sample(val); + end + default: begin + `uvm_fatal(`gfn, $sformatf("invalid err_code index %0d", part_idx)) + end + endcase + endfunction +endclass diff --git a/src/fuse_ctrl/dv/env/otp_ctrl_env_pkg.sv b/src/fuse_ctrl/dv/env/otp_ctrl_env_pkg.sv new file mode 100755 index 000000000..d7ccc4eae --- /dev/null +++ b/src/fuse_ctrl/dv/env/otp_ctrl_env_pkg.sv @@ -0,0 +1,248 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// DO NOT EDIT THIS FILE DIRECTLY. +// It has been generated with ./util/design/gen-otp-mmap.py + +package otp_ctrl_env_pkg; + // dep packages + import uvm_pkg::*; + import top_pkg::*; + import dv_utils_pkg::*; + import dv_lib_pkg::*; + import dv_base_reg_pkg::*; + import tl_agent_pkg::*; + import cip_base_pkg::*; + import csr_utils_pkg::*; + import push_pull_agent_pkg::*; + import otp_ctrl_core_ral_pkg::*; + import otp_ctrl_prim_ral_pkg::*; + import otp_ctrl_reg_pkg::*; + import otp_ctrl_pkg::*; + import otp_ctrl_part_pkg::*; + import lc_ctrl_pkg::*; + import lc_ctrl_state_pkg::*; + import lc_ctrl_dv_utils_pkg::*; + import mem_bkdr_util_pkg::*; + import otp_scrambler_pkg::*; + import sec_cm_pkg::*; + + // macro includes + `include "uvm_macros.svh" + `include "dv_macros.svh" + + // parameters + parameter string LIST_OF_ALERTS[] = {"fatal_macro_error", + "fatal_check_error", + "fatal_bus_integ_error", + "fatal_prim_otp_alert", + "recov_prim_otp_alert"}; + parameter uint NUM_ALERTS = 5; + parameter uint NUM_EDN = 1; + + parameter uint DIGEST_SIZE = 8; + parameter uint SW_WINDOW_BASE_ADDR = 'h1000; + parameter uint SW_WINDOW_SIZE = NumSwCfgWindowWords * 4; + + parameter uint TL_SIZE = (TL_DW / 8); + // LC has its own storage in scb + // we can use the LC offset here because it will always be the last partition. + parameter uint OTP_ARRAY_SIZE = LcTransitionCntOffset / TL_SIZE; + + parameter int OTP_ADDR_WIDTH = OtpByteAddrWidth-2; + + parameter uint NUM_PRIM_REG = 8; + + // sram rsp data has 1 bit for seed_valid, the rest are for key and nonce + parameter uint SRAM_DATA_SIZE = 1 + SramKeyWidth + SramNonceWidth; + // otbn rsp data has 1 bit for seed_valid, the rest are for key and nonce + parameter uint OTBN_DATA_SIZE = 1 + OtbnKeyWidth + OtbnNonceWidth; + // flash rsp data has 1 bit for seed_valid, the rest are for key + parameter uint FLASH_DATA_SIZE = 1 + FlashKeyWidth; + // lc program data has lc_state data and lc_cnt data + parameter uint LC_PROG_DATA_SIZE = LcStateWidth + LcCountWidth; + + parameter uint NUM_SRAM_EDN_REQ = 12; + parameter uint NUM_OTBN_EDN_REQ = 10; + + parameter uint CHK_TIMEOUT_CYC = 40; + + // When fatal alert triggered, all partitions and the DAI & LCI go to error state and status will + // be set to 1. + parameter bit [NumErrorEntries-1:0] FATAL_EXP_STATUS = '1; + + // lc does not have dai access + parameter int PART_BASE_ADDRS [NumPart-1] = { + VendorTestOffset, + NonSecretFusesOffset, + Secret0Offset, + Secret1Offset + }; + + // lc does not have digest + parameter int PART_OTP_DIGEST_ADDRS [NumPart-1] = { + VendorTestDigestOffset >> 2, + NonSecretFusesDigestOffset >> 2, + Secret0DigestOffset >> 2, + Secret1DigestOffset >> 2 + }; + + // types + typedef enum bit [1:0] { + OtpOperationDone, + OtpErr, + NumOtpCtrlIntr + } otp_intr_e; + + typedef enum bit [5:0] { + OtpVendorTestErrIdx, + OtpNonSecretFusesErrIdx, + OtpSecret0ErrIdx, + OtpSecret1ErrIdx, + OtpLifeCycleErrIdx, + OtpDaiErrIdx, + OtpLciErrIdx, + OtpTimeoutErrIdx, + OtpLfsrFsmErrIdx, + OtpScramblingFsmErrIdx, + OtpDerivKeyFsmErrIdx, + OtpBusIntegErrorIdx, + OtpDaiIdleIdx, + OtpCheckPendingIdx, + OtpStatusFieldSize + } otp_status_e; + + typedef enum bit [2:0] { + OtpNoError, + OtpMacroError, + OtpMacroEccCorrError, + OtpMacroEccUncorrError, + OtpMacroWriteBlankError, + OtpAccessError, + OtpCheckFailError, + OtpFsmStateError + } otp_err_code_e; + + typedef enum bit [1:0] { + OtpNoEccErr, + OtpEccCorrErr, + OtpEccUncorrErr + } otp_ecc_err_e; + + typedef enum bit [1:0] { + OtpNoAlert, + OtpCheckAlert, + OtpMacroAlert + } otp_alert_e; + + typedef struct packed { + bit read_lock; + bit write_lock; + } otp_part_access_lock_t; + + // OTP conditions when driving specific port. + typedef enum bit [2:0] { + DuringOTPInit, + DuringOTPDaiBusy, + DuringOTPDaiDigest, + DuringOTPRead, + DriveRandomly + } port_drive_condition_e; + + typedef virtual otp_ctrl_if otp_ctrl_vif; + + parameter otp_err_code_e OTP_TERMINAL_ERRS[4] = {OtpMacroEccUncorrError, + OtpCheckFailError, + OtpFsmStateError, + OtpMacroError}; + + // functions + function automatic int get_part_index(bit [TL_DW-1:0] addr); + int index; + for (index = 0; index < NumPart; index++) begin + if (PartInfo[index].offset > addr) begin + index--; + break; + end + end + if (index == NumPart) index--; + return index; + endfunction + + function automatic bit is_secret(bit [TL_DW-1:0] addr); + int part_index = get_part_index(addr); + return PartInfo[part_index].secret; + endfunction + + function automatic bit part_has_digest(int part_idx); + return PartInfo[part_idx].hw_digest || PartInfo[part_idx].sw_digest; + endfunction + + function automatic bit part_has_hw_digest(int part_idx); + return PartInfo[part_idx].hw_digest; + endfunction + + function automatic bit is_sw_digest(bit [TL_DW-1:0] addr); + int part_idx = get_part_index(addr); + if (PartInfo[part_idx].sw_digest) begin + // If the partition contains a digest, it will be located in the last 64bit of the partition. + return {addr[TL_DW-1:3], 3'b0} == ((PartInfo[part_idx].offset + PartInfo[part_idx].size) - 8); + end else begin + return 0; + end + endfunction + + function automatic bit is_digest(bit [TL_DW-1:0] addr); + int part_idx = get_part_index(addr); + if (PartInfo[part_idx].sw_digest || PartInfo[part_idx].hw_digest) begin + // If the partition contains a digest, it will be located in the last 64bit of the partition. + return {addr[TL_DW-1:3], 3'b0} == ((PartInfo[part_idx].offset + PartInfo[part_idx].size) - 8); + end else begin + return 0; + end + endfunction + + function automatic bit is_sw_part(bit [TL_DW-1:0] addr); + int part_idx = get_part_index(addr); + return is_sw_part_idx(part_idx); + endfunction + + function automatic bit is_sw_part_idx(int part_idx); + return (PartInfo[part_idx].variant == Unbuffered); + endfunction + + function automatic bit is_hw_part(bit [TL_DW-1:0] addr); + int part_idx = get_part_index(addr); + return is_hw_part_idx(part_idx); + endfunction + + function automatic bit is_hw_part_idx(int part_idx); + return (PartInfo[part_idx].variant == Buffered); + endfunction + + // Returns true if this partition supports ECC. Otherwise, no ECC errors are reported, and + // the single bit errors are not corrected. + function automatic bit part_has_integrity(int part_idx); + return PartInfo[part_idx].integrity; + endfunction + + // Resolve an offset within the software window as an offset within the whole otp_ctrl block. + function automatic bit [TL_AW-1:0] get_sw_window_offset(bit [TL_AW-1:0] dai_addr); + return dai_addr + SW_WINDOW_BASE_ADDR; + endfunction + + function automatic bit [TL_DW-1:0] normalize_dai_addr(bit [TL_DW-1:0] dai_addr); + normalize_dai_addr = (is_secret(dai_addr) || is_digest(dai_addr)) ? dai_addr >> 3 << 3 : + dai_addr >> 2 << 2; + endfunction + + // package sources + `include "otp_ctrl_ast_inputs_cfg.sv" + `include "otp_ctrl_env_cfg.sv" + `include "otp_ctrl_env_cov.sv" + `include "otp_ctrl_virtual_sequencer.sv" + `include "otp_ctrl_scoreboard.sv" + `include "otp_ctrl_env.sv" + `include "otp_ctrl_vseq_list.sv" + +endpackage diff --git a/src/fuse_ctrl/dv/env/otp_ctrl_if.sv b/src/fuse_ctrl/dv/env/otp_ctrl_if.sv new file mode 100755 index 000000000..febedfebe --- /dev/null +++ b/src/fuse_ctrl/dv/env/otp_ctrl_if.sv @@ -0,0 +1,327 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// DO NOT EDIT THIS FILE DIRECTLY. +// It has been generated with ./util/design/gen-otp-mmap.py + +// This interface collect the broadcast output data from OTP, +// and drive input requests coming into OTP. +`define ECC_REG_PATH gen_ecc_reg.u_otp_ctrl_ecc_reg.gen_ecc_dec[0].u_prim_secded_inv_72_64_dec + +// This only supports buffered partitions. +`define BUF_PART_OTP_CMD_PATH(i) \ + tb.dut.gen_partitions[``i``].gen_buffered.u_part_buf.otp_cmd_o + +`define LC_PART_OTP_CMD_PATH \ + tb.dut.gen_partitions[LifeCycleIdx].gen_lifecycle.u_part_buf.otp_cmd_o + +`define FORCE_OTP_PART_LOCK_WITH_RAND_NON_MUBI_VAL(i) \ + if (forced_part_access_sel[``i``].read_lock) begin \ + force tb.dut.part_access[``i``].read_lock = get_rand_mubi8_val(.t_weight(0), .f_weight(0)); \ + force tb.dut.part_access_dai[``i``].read_lock = get_rand_mubi8_val(.t_weight(0), .f_weight(0)); \ + end \ + if (forced_part_access_sel[``i``].write_lock) begin \ + force tb.dut.part_access[``i``].write_lock = get_rand_mubi8_val(.t_weight(0), .f_weight(0)); \ + force tb.dut.part_access_dai[``i``].write_lock = get_rand_mubi8_val(.t_weight(0), .f_weight(0)); \ + end + +`ifndef PRIM_GENERIC_OTP_PATH + `define PRIM_GENERIC_OTP_PATH\ + tb.dut.u_otp +`endif + +`ifndef PRIM_GENERIC_OTP_CMD_I_PATH + `define PRIM_GENERIC_OTP_CMD_I_PATH \ + `PRIM_GENERIC_OTP_PATH.gen_generic.u_impl_generic.cmd_i +`endif + +interface otp_ctrl_if(input clk_i, input rst_ni); + import uvm_pkg::*; + import otp_ctrl_env_pkg::*; + import otp_ctrl_pkg::*; + import otp_ctrl_reg_pkg::*; + import otp_ctrl_part_pkg::*; + import cip_base_pkg::*; + + // Output from DUT + otp_broadcast_t otp_broadcast_o; + otp_keymgr_key_t keymgr_key_o; + otp_lc_data_t lc_data_o; + logic pwr_otp_done_o, pwr_otp_idle_o; + + // Inputs to DUT + logic pwr_otp_init_i, scan_en_i, scan_rst_ni, ext_voltage_h_io; + lc_ctrl_pkg::lc_tx_t lc_dft_en_i, lc_escalate_en_i, lc_check_byp_en_i, + lc_creator_seed_sw_rw_en_i, lc_owner_seed_sw_rw_en_i, + lc_seed_hw_rd_en_i; + prim_mubi_pkg::mubi4_t scanmode_i; + otp_ast_rsp_t otp_ast_pwr_seq_h_i; + ast_pkg::ast_obs_ctrl_t obs_ctrl_i; + + // Unused in prim_generic_otp memory. + logic [OtpTestCtrlWidth-1:0] otp_vendor_test_ctrl_i; + logic [OtpTestStatusWidth-1:0] otp_vendor_test_status_o; + logic [OtpTestVectWidth-1:0] cio_test_o; + logic [OtpTestVectWidth-1:0] cio_test_en_o; + + // Connect with lc_prog push_pull interface. + logic lc_prog_req, lc_prog_err; + logic lc_prog_err_dly1, lc_prog_no_sta_check; + + // Connect push_pull interfaces ack signals for assertion checks. + logic otbn_ack, lc_prog_ack; + logic [1:0] flash_acks; + logic [NumSramKeyReqSlots-1:0] sram_acks; + + // Variables for internal interface logic. + // `lc_escalate_en` is async, take two clock cycles to synchronize. + lc_ctrl_pkg::lc_tx_t lc_esc_dly1, lc_esc_dly2; + + // Variable for scoreboard. + // For `lc_escalate_en`, any value that is not `Off` is a `On`. + bit lc_esc_on; + + // Probe design signal for alert request. + logic alert_reqs; + + // Usually the `lc_check_byp_en` will be automatically set to `On` when LC program request is + // issued, and stays `On` until reset is issued. + // Set this variable to 0 after a LC program request might cause otp checks to fail. + bit lc_check_byp_en = 1; + + // Internal veriable to track which sw partitions have ECC reg error. + bit [NumPartUnbuf-1:0] force_sw_parts_ecc_reg; + + // DUT configuration object + otp_ctrl_ast_inputs_cfg dut_cfg; + + // for DV macros ID + string msg_id = "otp_ctrl_if"; + + // Lc_err could trigger during LC program, so check intr and status after lc_req is finished. + // Lc_err takes one clock cycle to propogate to intr signal. So avoid intr check if it happens + // during the transition. + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + lc_prog_err_dly1 <= 0; + lc_esc_dly1 <= lc_ctrl_pkg::Off; + lc_esc_dly2 <= lc_ctrl_pkg::Off; + lc_check_byp_en_i <= get_rand_lc_tx_val(); + lc_esc_on <= 0; + end else begin + lc_prog_err_dly1 <= lc_prog_err; + lc_esc_dly1 <= lc_escalate_en_i; + lc_esc_dly2 <= lc_esc_dly1; + if (lc_prog_req) begin + lc_check_byp_en_i <= lc_check_byp_en ? lc_ctrl_pkg::On : lc_ctrl_pkg::Off; + end + if (lc_esc_dly2 != lc_ctrl_pkg::Off && !lc_esc_on) begin + lc_esc_on <= 1; + end + end + end + + assign lc_prog_no_sta_check = lc_prog_err | lc_prog_err_dly1 | lc_prog_req | lc_esc_on; + + function automatic void drive_pwr_otp_init(logic val); + pwr_otp_init_i = val; + endfunction + + function automatic void drive_ext_voltage_h_io(logic val); + ext_voltage_h_io = val; + endfunction + + function automatic void drive_lc_creator_seed_sw_rw_en(lc_ctrl_pkg::lc_tx_t val); + lc_creator_seed_sw_rw_en_i = val; + endfunction + + function automatic void drive_lc_owner_seed_sw_rw_en(lc_ctrl_pkg::lc_tx_t val); + lc_owner_seed_sw_rw_en_i = val; + endfunction + + function automatic void drive_lc_dft_en(lc_ctrl_pkg::lc_tx_t val); + lc_dft_en_i = val; + endfunction + + function automatic void drive_lc_escalate_en(lc_ctrl_pkg::lc_tx_t val); + lc_escalate_en_i = val; + endfunction + + function automatic void drive_lc_seed_hw_rd_en(lc_ctrl_pkg::lc_tx_t val); + lc_seed_hw_rd_en_i = val; + endfunction + + function automatic bit under_error_states(); + return lc_esc_on | alert_reqs; + endfunction + + // SW partitions do not have any internal checks. + // Here we force internal ECC check to fail. + task automatic force_sw_check_fail( + bit[NumPartUnbuf-1:0] fail_idx = $urandom_range(1, (1'b1 << NumPartUnbuf) - 1)); + @(posedge clk_i); + if (fail_idx[VendorTestIdx]) begin + force tb.dut.gen_partitions[VendorTestIdx].gen_unbuffered. + u_part_unbuf.`ECC_REG_PATH.data_i[0] = 1; + force_sw_parts_ecc_reg[VendorTestIdx] = 1; + end + if (fail_idx[NonSecretFusesIdx]) begin + force tb.dut.gen_partitions[NonSecretFusesIdx].gen_unbuffered. + u_part_unbuf.`ECC_REG_PATH.data_i[0] = 1; + force_sw_parts_ecc_reg[NonSecretFusesIdx] = 1; + end + endtask + + task automatic release_sw_check_fail(); + @(posedge clk_i); + if (force_sw_parts_ecc_reg[VendorTestIdx]) begin + release tb.dut.gen_partitions[VendorTestIdx].gen_unbuffered. + u_part_unbuf.`ECC_REG_PATH.data_i[0]; + force_sw_parts_ecc_reg[VendorTestIdx] = 0; + end + if (force_sw_parts_ecc_reg[NonSecretFusesIdx]) begin + release tb.dut.gen_partitions[NonSecretFusesIdx].gen_unbuffered. + u_part_unbuf.`ECC_REG_PATH.data_i[0]; + force_sw_parts_ecc_reg[NonSecretFusesIdx] = 0; + end + endtask + + // Force prim_generic_otp input cmd_i to a invalid value. + task automatic force_invalid_otp_cmd_i(); + @(posedge clk_i); + force `PRIM_GENERIC_OTP_CMD_I_PATH = prim_otp_pkg::cmd_e'(2'b10); + endtask + + task automatic release_invalid_otp_cmd_i(); + @(posedge clk_i); + release `PRIM_GENERIC_OTP_CMD_I_PATH; + endtask + + // Force part_buf partitions output otp_cmd_o to a invalid value. + task automatic force_invalid_part_cmd_o(int part_idx); + @(posedge clk_i); + case (part_idx) + Secret0Idx: force `BUF_PART_OTP_CMD_PATH(Secret0Idx) = prim_otp_pkg::cmd_e'(2'b10); + Secret1Idx: force `BUF_PART_OTP_CMD_PATH(Secret1Idx) = prim_otp_pkg::cmd_e'(2'b10); + LifeCycleIdx: force `LC_PART_OTP_CMD_PATH = prim_otp_pkg::cmd_e'(2'b10); + default: begin + `uvm_fatal("otp_ctrl_if", + $sformatf("force invalid otp_cmd_o only supports buffered partitions: %0d", part_idx)) + end + endcase + endtask + + task automatic release_invalid_part_cmd_o(int part_idx); + @(posedge clk_i); + case (part_idx) + Secret0Idx: release `BUF_PART_OTP_CMD_PATH(Secret0Idx); + Secret1Idx: release `BUF_PART_OTP_CMD_PATH(Secret1Idx); + LifeCycleIdx: release `LC_PART_OTP_CMD_PATH; + default: begin + `uvm_fatal("otp_ctrl_if", + $sformatf("release invalid otp_cmd_o only supports buffered partitions: %0d", + part_idx)) + end + endcase + endtask + + // This task forces otp_ctrl's internal mubi signals to values that are not mubi::true or mubi:: + // false. Then scb will check if design treats these values as locking the partition access. + task automatic force_part_access_mubi(otp_part_access_lock_t forced_part_access_sel[NumPart-1]); + @(posedge clk_i); + `FORCE_OTP_PART_LOCK_WITH_RAND_NON_MUBI_VAL(VendorTestIdx) + `FORCE_OTP_PART_LOCK_WITH_RAND_NON_MUBI_VAL(NonSecretFusesIdx) + `FORCE_OTP_PART_LOCK_WITH_RAND_NON_MUBI_VAL(Secret0Idx) + `FORCE_OTP_PART_LOCK_WITH_RAND_NON_MUBI_VAL(Secret1Idx) + endtask + + task automatic release_part_access_mubi(); + @(posedge clk_i); + release tb.dut.part_access; + release tb.dut.part_access_dai; + endtask + + // Connectivity assertions for test related I/Os. + `ASSERT(LcOtpTestStatusO_A, otp_vendor_test_status_o == `PRIM_GENERIC_OTP_PATH.test_status_o) + `ASSERT(LcOtpTestCtrlI_A, otp_vendor_test_ctrl_i == `PRIM_GENERIC_OTP_PATH.test_ctrl_i) + + `ASSERT(CioTestOWithDftOn_A, lc_dft_en_i == lc_ctrl_pkg::On |-> + ##[2:3] cio_test_o == `PRIM_GENERIC_OTP_PATH.test_vect_o) + `ASSERT(CioTestOWithDftOff_A, lc_dft_en_i != lc_ctrl_pkg::On |-> ##[2:3] cio_test_o == 0) + `ASSERT(CioTestEnOWithDftOn_A, lc_dft_en_i == lc_ctrl_pkg::On |-> ##[2:3] cio_test_en_o == '1) + `ASSERT(CioTestEnOWithDftOff_A, lc_dft_en_i != lc_ctrl_pkg::On |-> ##[2:3] cio_test_en_o == 0) + + + `define OTP_ASSERT_WO_LC_ESC(NAME, SEQ) \ + `ASSERT(NAME, SEQ, clk_i, !rst_ni || lc_esc_on || alert_reqs) + + // If pwr_otp_idle is set only if pwr_otp init is done + `OTP_ASSERT_WO_LC_ESC(OtpPwrDoneWhenIdle_A, pwr_otp_idle_o |-> pwr_otp_done_o) + + // otp_broadcast_o is valid only when otp init is done + `OTP_ASSERT_WO_LC_ESC(OtpHwCfgValidOn_A, pwr_otp_done_o |-> + otp_broadcast_o.valid == lc_ctrl_pkg::On) + // If otp_broadcast is Off, then hw partition is not finished calculation, + // then otp init is not done + `OTP_ASSERT_WO_LC_ESC(OtpHwCfgValidOff_A, otp_broadcast_o.valid == lc_ctrl_pkg::Off |-> + pwr_otp_done_o == 0) + // Once OTP init is done, otp_broadcast_o output value stays stable until next power cycle + `OTP_ASSERT_WO_LC_ESC(OtpHwCfgStable_A, otp_broadcast_o.valid == lc_ctrl_pkg::On |=> + $stable(otp_broadcast_o)) + + // Otp_keymgr valid is related to part_digest, should not be changed after otp_pwr_init + `OTP_ASSERT_WO_LC_ESC(OtpKeymgrValidStable0_A, pwr_otp_done_o |-> + $stable(keymgr_key_o.creator_root_key_share0_valid)) + `OTP_ASSERT_WO_LC_ESC(OtpKeymgrValidStable1_A, pwr_otp_done_o |-> + $stable(keymgr_key_o.creator_root_key_share1_valid)) + `OTP_ASSERT_WO_LC_ESC(OtpKeymgrValidStable2_A, pwr_otp_done_o |-> + $stable(keymgr_key_o.creator_seed_valid)) + `OTP_ASSERT_WO_LC_ESC(OtpKeymgrValidStable3_A, pwr_otp_done_o |-> + $stable(keymgr_key_o.owner_seed_valid)) + + // During lc_prog_req, either otp_idle will be reset or lc_error is set + `OTP_ASSERT_WO_LC_ESC(LcProgReq_A, $rose(lc_prog_req) |=> + (pwr_otp_idle_o == 0 || $rose(lc_prog_err)) within lc_prog_req[*1:$]) + + // During fatal alert, check if otp outputs revert back to default value. + // Wait three clock cycles until error propogates to each FSM states and regs. + `define OTP_FATAL_ERR_ASSERT(NAME, SEQ) \ + `ASSERT(FatalErr``NAME``, alert_reqs |-> ##3 SEQ) + + `OTP_FATAL_ERR_ASSERT(LcDataValid_A, lc_data_o.valid == 0 && lc_data_o.error == 1) + `OTP_FATAL_ERR_ASSERT(LcDataState_A, lc_data_o.state == + PartInvDefault[LcStateOffset*8+:LcStateSize*8]) + `OTP_FATAL_ERR_ASSERT(LcDataCount_A, lc_data_o.count == + PartInvDefault[LcTransitionCntOffset*8+:LcTransitionCntSize*8]) + `OTP_FATAL_ERR_ASSERT(LcDataTestUnlockToken_A, lc_data_o.test_unlock_token == + PartInvDefault[TestUnlockTokenOffset*8+:TestUnlockTokenSize*8]) + `OTP_FATAL_ERR_ASSERT(LcDataTestExitToken_A, lc_data_o.test_exit_token == + PartInvDefault[TestExitTokenOffset*8+:TestExitTokenSize*8]) + `OTP_FATAL_ERR_ASSERT(LcDataRmaToken_A, lc_data_o.rma_token == + PartInvDefault[RmaTokenOffset*8+:RmaTokenSize*8]) + + `OTP_FATAL_ERR_ASSERT(KeymgrKeyData_A, keymgr_key_o.creator_root_key_share0 == + PartInvDefault[CreatorRootKeyShare0Offset*8+:CreatorRootKeyShare0Size*8] && + keymgr_key_o.creator_root_key_share1 == + PartInvDefault[CreatorRootKeyShare1Offset*8+:CreatorRootKeyShare1Size*8]) + + `OTP_FATAL_ERR_ASSERT(HwCfgOValid_A, otp_broadcast_o.valid == lc_ctrl_pkg::Off) + `OTP_FATAL_ERR_ASSERT(HwCfg0OData_A, otp_broadcast_o.hw_cfg0_data == + PartInvDefault[HwCfg0Offset*8+:HwCfg0Size*8]) + `OTP_FATAL_ERR_ASSERT(HwCfg1OData_A, otp_broadcast_o.hw_cfg1_data == + PartInvDefault[HwCfg1Offset*8+:HwCfg1Size*8]) + + `OTP_FATAL_ERR_ASSERT(LcProgAck_A, lc_prog_ack == 0) + `OTP_FATAL_ERR_ASSERT(FlashAcks_A, flash_acks == 0) + `OTP_FATAL_ERR_ASSERT(SramAcks_A, sram_acks == 0) + `OTP_FATAL_ERR_ASSERT(OtbnAck_A, otbn_ack == 0) + + `undef OTP_ASSERT_WO_LC_ESC + `undef OTP_FATAL_ERR_ASSERT + `undef ECC_REG_PATH + `undef BUF_PART_OTP_CMD_PATH + `undef LC_PART_OTP_CMD_PATH + `undef PRIM_GENERIC_OTP_PATH + `undef PRIM_GENERIC_OTP_CMD_I_PATH + `undef FORCE_OTP_PART_LOCK_WITH_RAND_NON_MUBI_VAL +endinterface diff --git a/src/fuse_ctrl/dv/env/otp_ctrl_scoreboard.sv b/src/fuse_ctrl/dv/env/otp_ctrl_scoreboard.sv new file mode 100755 index 000000000..3ac9db095 --- /dev/null +++ b/src/fuse_ctrl/dv/env/otp_ctrl_scoreboard.sv @@ -0,0 +1,1488 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// DO NOT EDIT THIS FILE DIRECTLY. +// It has been generated with ./util/design/gen-otp-mmap.py + +class otp_ctrl_scoreboard #(type CFG_T = otp_ctrl_env_cfg) + extends cip_base_scoreboard #( + .CFG_T(CFG_T), + .RAL_T(otp_ctrl_core_reg_block), + .COV_T(otp_ctrl_env_cov) + ); + `uvm_component_param_utils(otp_ctrl_scoreboard #(CFG_T)) + + // local variables + bit [TL_DW-1:0] otp_a [OTP_ARRAY_SIZE]; + + // lc_state and lc_cnt that stored in OTP + bit [LC_PROG_DATA_SIZE-1:0] otp_lc_data; + bit [EDN_BUS_WIDTH-1:0] edn_data_q[$]; + + // This flag is used when reset is issued during otp dai write access. + bit dai_wr_ip; + int dai_digest_ip = LifeCycleIdx; // Default to LC as it does not have digest. + bit ignore_digest_chk = 0; + + // This bit is used for DAI interface to mark if the read access is valid. + bit dai_read_valid; + + // This captures the regwen state as configured by the SW side (i.e. without HW modulation + // with the idle signal overlaid). + bit direct_access_regwen_state = 1; + + // ICEBOX(#17798): currently scb will skip checking the readout value if the ECC error is + // uncorrectable. Because if the error is uncorrectable, current scb does not track all the + // backdoor injected values. + // This issue proposes to track the otp_memory_array in mem_bkdr_if and once backdoor inject any + // value, mem_bkdr_if will update its otp_memory_array. + bit check_dai_rd_data = 1; + + // Status related variables + bit under_chk, under_dai_access; + bit [TL_DW-1:0] exp_status, status_mask; + + otp_alert_e exp_alert = OtpNoAlert; + + // TLM agent fifos + uvm_tlm_analysis_fifo #(push_pull_item#(.DeviceDataWidth(SRAM_DATA_SIZE))) + sram_fifos[NumSramKeyReqSlots]; + uvm_tlm_analysis_fifo #(push_pull_item#(.DeviceDataWidth(OTBN_DATA_SIZE))) otbn_fifo; + uvm_tlm_analysis_fifo #(push_pull_item#(.DeviceDataWidth(FLASH_DATA_SIZE))) flash_addr_fifo; + uvm_tlm_analysis_fifo #(push_pull_item#(.DeviceDataWidth(FLASH_DATA_SIZE))) flash_data_fifo; + uvm_tlm_analysis_fifo #(push_pull_item#(.DeviceDataWidth(1), .HostDataWidth(LC_PROG_DATA_SIZE))) + lc_prog_fifo; + + // local queues to hold incoming packets pending comparison + + `uvm_component_new + + function void build_phase(uvm_phase phase); + super.build_phase(phase); + for (int i = 0; i < NumSramKeyReqSlots; i++) begin + sram_fifos[i] = new($sformatf("sram_fifos[%0d]", i), this); + end + otbn_fifo = new("otbn_fifo", this); + flash_addr_fifo = new("flash_addr_fifo", this); + flash_data_fifo = new("flash_data_fifo", this); + lc_prog_fifo = new("lc_prog_fifo", this); + endfunction + + function void connect_phase(uvm_phase phase); + super.connect_phase(phase); + endfunction + + task run_phase(uvm_phase phase); + super.run_phase(phase); + fork + process_wipe_mem(); + process_otp_power_up(); + process_lc_esc(); + process_lc_prog_req(); + process_edn_req(); + check_otbn_rsp(); + check_flash_rsps(); + check_sram_rsps(); + recover_lc_prog_req(); + join_none + endtask + + // Once sequence uses backdoor method to clear memory, this task resets internal otp_a and + // resets `cfg.backdoor_clear_mem` to 0. + virtual task process_wipe_mem(); + forever begin + @(posedge cfg.backdoor_clear_mem) begin + bit [SCRAMBLE_DATA_SIZE-1:0] data; + otp_a = '{default:0}; + otp_lc_data = '{default:0}; + // secret partitions have been scrambled before writing to OTP. + // here calculate the pre-srambled raw data when clearing internal OTP to all 0s. + data = descramble_data(0, Secret0Idx); + for (int i = Secret0Offset / TL_SIZE; + i <= Secret0DigestOffset / TL_SIZE - 1; + i++) begin + otp_a[i] = ((i - Secret0Offset / TL_SIZE) % 2) ? + data[SCRAMBLE_DATA_SIZE-1:TL_DW] : data[TL_DW-1:0]; + end + // secret partitions have been scrambled before writing to OTP. + // here calculate the pre-srambled raw data when clearing internal OTP to all 0s. + data = descramble_data(0, Secret1Idx); + for (int i = Secret1Offset / TL_SIZE; + i <= Secret1DigestOffset / TL_SIZE - 1; + i++) begin + otp_a[i] = ((i - Secret1Offset / TL_SIZE) % 2) ? + data[SCRAMBLE_DATA_SIZE-1:TL_DW] : data[TL_DW-1:0]; + end + `uvm_info(`gfn, "clear internal memory and digest", UVM_HIGH) + cfg.backdoor_clear_mem = 0; + dai_wr_ip = 0; + dai_digest_ip = LifeCycleIdx; + end + end + endtask + + // This task process the following logic in during otp_power_up: + // 1. After reset deasserted, otp access is locked until pwr_otp_done_o is set + // 2. After reset deasserted, if power otp_init request is on, and if testbench uses backdoor to + // clear OTP memory to all zeros, clear all digests and re-calculate secret partitions + virtual task process_otp_power_up(); + forever begin + wait (cfg.en_scb); + @(posedge cfg.otp_ctrl_vif.pwr_otp_done_o || cfg.under_reset || + cfg.otp_ctrl_vif.alert_reqs) begin + if (!cfg.under_reset && !cfg.otp_ctrl_vif.alert_reqs && cfg.en_scb) begin + otp_ctrl_part_pkg::otp_hw_cfg0_data_t exp_hw_cfg0_data; + otp_ctrl_part_pkg::otp_hw_cfg1_data_t exp_hw_cfg1_data; + otp_ctrl_pkg::otp_keymgr_key_t exp_keymgr_data; + otp_ctrl_pkg::otp_lc_data_t exp_lc_data; + bit [otp_ctrl_pkg::KeyMgrKeyWidth-1:0] exp_keymgr_key0, exp_keymgr_key1; + + if (PartInfo[dai_digest_ip].sw_digest || PartInfo[dai_digest_ip].hw_digest) begin + bit [TL_DW-1:0] otp_addr = PART_OTP_DIGEST_ADDRS[dai_digest_ip]; + otp_a[otp_addr] = cfg.mem_bkdr_util_h.read32(otp_addr << 2); + otp_a[otp_addr+1] = cfg.mem_bkdr_util_h.read32((otp_addr << 2) + 4); + dai_digest_ip = LifeCycleIdx; + end + predict_digest_csrs(); + + if (cfg.otp_ctrl_vif.under_error_states() == 0) begin + // Dai access is unlocked because the power init is done + void'(ral.direct_access_regwen.predict(direct_access_regwen_state)); + + // Dai idle is set because the otp init is done + exp_status[OtpDaiIdleIdx] = 1; + end + + // Hwcfg_o gets data from OTP HW cfg partition + exp_hw_cfg0_data = cfg.otp_ctrl_vif.under_error_states() ? + otp_ctrl_part_pkg::PartInvDefault[HwCfg0Offset*8 +: HwCfg0Size*8] : + otp_hw_cfg0_data_t'({<<32 {otp_a[HwCfg0Offset/4 +: HwCfg0Size/4]}}); + `DV_CHECK_EQ(cfg.otp_ctrl_vif.otp_broadcast_o.valid, lc_ctrl_pkg::On) + `DV_CHECK_EQ(cfg.otp_ctrl_vif.otp_broadcast_o.hw_cfg0_data, exp_hw_cfg0_data) + + // Hwcfg_o gets data from OTP HW cfg partition + exp_hw_cfg1_data = cfg.otp_ctrl_vif.under_error_states() ? + otp_ctrl_part_pkg::PartInvDefault[HwCfg1Offset*8 +: HwCfg1Size*8] : + otp_hw_cfg1_data_t'({<<32 {otp_a[HwCfg1Offset/4 +: HwCfg1Size/4]}}); + `DV_CHECK_EQ(cfg.otp_ctrl_vif.otp_broadcast_o.valid, lc_ctrl_pkg::On) + `DV_CHECK_EQ(cfg.otp_ctrl_vif.otp_broadcast_o.hw_cfg1_data, exp_hw_cfg1_data) + + if (!cfg.otp_ctrl_vif.under_error_states()) begin + // ---------------------- Check lc_data_o output ----------------------------------- + // Because initialization was succesful, the valid should be set and error should be + // reset. + exp_lc_data.valid = 1; + exp_lc_data.error = 0; + + // Secrets and tokens valid signals are depend on whether secret partitions are + // locked. + exp_lc_data.secrets_valid = get_otp_digest_val(Secret2Idx) ? On : Off; + exp_lc_data.test_tokens_valid = get_otp_digest_val(Secret0Idx) ? On : Off; + exp_lc_data.rma_token_valid = get_otp_digest_val(Secret2Idx) ? On : Off; + + // LC output is depend on LC partitions value. + exp_lc_data.count = otp_lc_data[0 +: LcCountWidth]; + exp_lc_data.state = otp_lc_data[LcCountWidth +: LcStateWidth]; + + // Token values are depend on secret partitions value. + exp_lc_data.test_unlock_token = + {<<32 {otp_a[TestUnlockTokenOffset/4 +: TestUnlockTokenSize/4]}}; + exp_lc_data.test_exit_token = + {<<32 {otp_a[TestExitTokenOffset/4 +: TestExitTokenSize/4]}}; + exp_lc_data.rma_token = {<<32 {otp_a[RmaTokenOffset/4 +: RmaTokenSize/4]}}; + + // Check otp_lc_data_t struct by item is easier to debug. + `DV_CHECK_EQ(cfg.otp_ctrl_vif.lc_data_o.valid, exp_lc_data.valid) + `DV_CHECK_EQ(cfg.otp_ctrl_vif.lc_data_o.error, exp_lc_data.error) + `DV_CHECK_EQ(cfg.otp_ctrl_vif.lc_data_o.state, exp_lc_data.state) + `DV_CHECK_EQ(cfg.otp_ctrl_vif.lc_data_o.count, exp_lc_data.count) + `DV_CHECK_EQ(cfg.otp_ctrl_vif.lc_data_o.secrets_valid, exp_lc_data.secrets_valid) + `DV_CHECK_EQ(cfg.otp_ctrl_vif.lc_data_o.test_tokens_valid, + exp_lc_data.test_tokens_valid) + `DV_CHECK_EQ(cfg.otp_ctrl_vif.lc_data_o.test_unlock_token, + exp_lc_data.test_unlock_token) + `DV_CHECK_EQ(cfg.otp_ctrl_vif.lc_data_o.test_exit_token, exp_lc_data.test_exit_token) + `DV_CHECK_EQ(cfg.otp_ctrl_vif.lc_data_o.rma_token_valid, exp_lc_data.rma_token_valid) + `DV_CHECK_EQ(cfg.otp_ctrl_vif.lc_data_o.rma_token, exp_lc_data.rma_token) + + // Check otp_lc_data_t all together in case there is any missed item. + `DV_CHECK_EQ(cfg.otp_ctrl_vif.lc_data_o, exp_lc_data) + + // ---------------------- Check keymgr_key_o output --------------------------------- + // Otp_keymgr outputs creator and owner keys from secret partitions. + // Depends on lc_seed_hw_rd_en_i, it will output the real keys or a constant + exp_keymgr_data = '0; + + // Check otp_keymgr_key_t struct all together in case there is any missed item. + `DV_CHECK_EQ(cfg.otp_ctrl_vif.keymgr_key_o, exp_keymgr_data) + + if (cfg.en_cov) begin + cov.keymgr_o_cg.sample(cfg.otp_ctrl_vif.lc_seed_hw_rd_en_i == lc_ctrl_pkg::On, + exp_keymgr_data.creator_root_key_share0_valid); + end + end + end else if (cfg.otp_ctrl_vif.alert_reqs) begin + // Ignore digest CSR check when otp_ctrl initialization is interrupted by fatal errors. + // SCB cannot predict how many partitions already finished initialization and updated + // the digest value to CSRs. + ignore_digest_chk = 1; + end + if (cfg.en_cov) begin + bit [NumPart-2:0] parts_locked; + foreach (parts_locked[i]) parts_locked[i] = (get_otp_digest_val(i) != 0); + cov.power_on_cg.sample(cfg.otp_ctrl_vif.lc_esc_on, parts_locked); + end + end + end + endtask + + // This task monitors internal escalation triggered by two methods: + // 1. Externally lc_escalation_en is set to lc_ctrl_pkg::On. + // 2. Internal fatal alert triggered and all partitions are driven to error states. + virtual task process_lc_esc(); + forever begin + wait(cfg.otp_ctrl_vif.alert_reqs == 1 && cfg.en_scb); + + if (cfg.otp_ctrl_vif.lc_esc_on == 0) `DV_CHECK_NE(exp_alert, OtpNoAlert) + + if (exp_alert != OtpCheckAlert) set_exp_alert("fatal_check_error", 1, 5); + + // If the lc_escalation is triggered by internal fatal alert, wait 2 negedge until status is + // updated internally + if (cfg.otp_ctrl_vif.lc_esc_on == 0) begin + cfg.clk_rst_vif.wait_n_clks(2); + exp_status[OtpCheckPendingIdx] = 0; + exp_status[OtpDaiIdleIdx] = 0; + end else begin + exp_status = '0; + // Only lc_esc_on will set these bits to 1. + exp_status[OtpDerivKeyFsmErrIdx:OtpLfsrFsmErrIdx] = '1; + end + + // Update status bits. + foreach (FATAL_EXP_STATUS[i]) begin + if (FATAL_EXP_STATUS[i]) begin + predict_err(.status_err_idx(otp_status_e'(i)), .err_code(OtpFsmStateError), + .update_esc_err(1)); + end + end + + // Update digest values and direct_access_regwen. + predict_rdata(1, 0, 0); + void'(ral.direct_access_regwen.predict(.value(0), .kind(UVM_PREDICT_READ))); + + // DAI access is locked until reset, so no need to backdoor read otp write value until reset. + + wait(cfg.otp_ctrl_vif.alert_reqs == 0); + end + endtask + + // This task monitors if lc_program req is interrupted by reset. + // If it happens, scb cannot predict how many bits have been written to OTP_CTRL. + // So here we will backdoor read back OTP lc partitions bits. + virtual task recover_lc_prog_req(); + forever begin + wait(cfg.otp_ctrl_vif.lc_prog_req == 1); + wait(cfg.otp_ctrl_vif.lc_prog_req == 0); + // Wait one 1ps to avoid race condition. + #1ps; + if (cfg.otp_ctrl_vif.rst_ni == 0) begin + for (int i = 0; i < LC_PROG_DATA_SIZE/32; i++) begin + otp_lc_data[i*32+:32] = cfg.mem_bkdr_util_h.read32(LifeCycleOffset + i * 4); + end + end + end + endtask + + virtual task process_lc_prog_req(); + forever begin + push_pull_item#(.DeviceDataWidth(1), .HostDataWidth(LC_PROG_DATA_SIZE)) rcv_item; + bit exp_err_bit; + bit [15:0] rcv_words [LC_PROG_DATA_SIZE/16]; + + lc_prog_fifo.get(rcv_item); + + // LCI is updated by OTP word. + rcv_words = {<< 16{rcv_item.h_data}}; + foreach (rcv_words[i]) begin + bit [15:0] curr_word = otp_lc_data[i*16 +: 16]; + if ((curr_word & rcv_words[i]) == curr_word) otp_lc_data[i*16 +: 16] = rcv_words[i]; + else exp_err_bit = 1; + end + + if (exp_err_bit) predict_err(OtpLciErrIdx, OtpMacroWriteBlankError); + else predict_no_err(OtpLciErrIdx); + + // LC program request data is valid means no OTP macro error. + `DV_CHECK_EQ(rcv_item.d_data, exp_err_bit) + + if (cfg.en_cov) cov.lc_prog_cg.sample(exp_err_bit); + end + endtask + + virtual task process_edn_req(); + forever begin + push_pull_item#(.DeviceDataWidth(EDN_DATA_WIDTH)) edn_item; + edn_fifos[0].get(edn_item); + edn_data_q.push_back(edn_item.d_data[EDN_BUS_WIDTH-1:0]); + end + endtask + + virtual task check_otbn_rsp(); + forever begin + push_pull_item#(.DeviceDataWidth(OTBN_DATA_SIZE)) rcv_item; + bit [SCRAMBLE_KEY_SIZE-1:0] edn_key2, edn_key1; + bit [SCRAMBLE_KEY_SIZE-1:0] sram_key; + bit [SCRAMBLE_DATA_SIZE-1:0] exp_key_lower, exp_key_higher; + bit [OtbnKeyWidth-1:0] key, exp_key; + bit [OtbnNonceWidth-1:0] nonce, exp_nonce; + bit seed_valid; + bit part_locked; + + otbn_fifo.get(rcv_item); + seed_valid = rcv_item.d_data[0]; + nonce = rcv_item.d_data[1+:OtbnNonceWidth]; + key = rcv_item.d_data[OtbnNonceWidth+1+:OtbnKeyWidth]; + part_locked = {`gmv(ral.secret1_digest[0]), `gmv(ral.secret1_digest[1])} != '0; + + // seed is valid as long as secret1 is locked + `DV_CHECK_EQ(seed_valid, part_locked, "otbn seed_valid mismatch") + + // If edn_data_q matches the OTBN requested size, check OTBN outputs + if (edn_data_q.size() == NUM_OTBN_EDN_REQ) begin + {exp_nonce, edn_key2, edn_key1} = {<<32{edn_data_q}}; + + // check nonce value + `DV_CHECK_EQ(nonce, exp_nonce, "otbn nonce mismatch") + + // calculate key + sram_key = get_key_from_otp(part_locked, SramDataKeySeedOffset / 4); + exp_key_lower = present_encode_with_final_const( + .data(RndCnstDigestIV[SramDataKey]), + .key(sram_key), + .final_const(RndCnstDigestConst[SramDataKey]), + .second_key(edn_key1), + .num_round(2)); + + exp_key_higher = present_encode_with_final_const( + .data(RndCnstDigestIV[SramDataKey]), + .key(sram_key), + .final_const(RndCnstDigestConst[SramDataKey]), + .second_key(edn_key2), + .num_round(2)); + exp_key = {exp_key_higher, exp_key_lower}; + `DV_CHECK_EQ(key, exp_key, "otbn key mismatch") + + if (cfg.en_cov) cov.otbn_req_cg.sample(part_locked); + + // If during OTBN key request, the LFSR timer expired and trigger an EDN request to acquire + // two EDN keys, then ignore the OTBN output checking, because scb did not know which EDN + // keys are used for LFSR. + // Thus any edn_data_q size equal to (16+2*N) is exempted from checking. + end else if ((edn_data_q.size() - NUM_OTBN_EDN_REQ) % 2 != 0) begin + `uvm_error(`gfn, $sformatf("Unexpected edn_data_q size (%0d) during OTBN request", + edn_data_q.size())) + end + edn_data_q.delete(); + end + endtask + + virtual task check_flash_rsps(); + for (int i = FlashDataKey; i <= FlashAddrKey; i++) begin + automatic digest_sel_e sel_flash = digest_sel_e'(i); + fork + forever begin + push_pull_item#(.DeviceDataWidth(FLASH_DATA_SIZE)) rcv_item; + bit [SCRAMBLE_KEY_SIZE-1:0] flash_key; + bit [SCRAMBLE_DATA_SIZE-1:0] exp_key_lower, exp_key_higher; + bit [FlashKeyWidth-1:0] key, exp_key; + bit seed_valid, part_locked; + int flash_key_index; + + if (sel_flash == FlashAddrKey) begin + flash_addr_fifo.get(rcv_item); + flash_key_index = FlashAddrKeySeedOffset / 4; + end else begin + flash_data_fifo.get(rcv_item); + flash_key_index = FlashDataKeySeedOffset / 4; + end + seed_valid = rcv_item.d_data[0]; + key = rcv_item.d_data[1+:FlashKeyWidth]; + part_locked = {`gmv(ral.secret1_digest[0]), `gmv(ral.secret1_digest[1])} != '0; + `DV_CHECK_EQ(seed_valid, part_locked, + $sformatf("flash %0s seed_valid mismatch", sel_flash.name())) + + // calculate key + flash_key = get_key_from_otp(part_locked, flash_key_index); + exp_key_lower = present_encode_with_final_const( + .data(RndCnstDigestIV[sel_flash]), + .key(flash_key), + .final_const(RndCnstDigestConst[sel_flash])); + + flash_key = get_key_from_otp(part_locked, flash_key_index + 4); + exp_key_higher = present_encode_with_final_const( + .data(RndCnstDigestIV[sel_flash]), + .key(flash_key), + .final_const(RndCnstDigestConst[sel_flash])); + exp_key = {exp_key_higher, exp_key_lower}; + `DV_CHECK_EQ(key, exp_key, $sformatf("flash %s key mismatch", sel_flash.name())) + + if (cfg.en_cov) cov.flash_req_cg.sample(sel_flash, part_locked); + end + join_none; + end + endtask + + virtual task check_sram_rsps(); + for (int i = 0; i < NumSramKeyReqSlots; i++) begin + automatic int index = i; + fork + forever begin + push_pull_item#(.DeviceDataWidth(SRAM_DATA_SIZE)) rcv_item; + sram_key_t key, exp_key; + sram_nonce_t nonce, exp_nonce; + bit seed_valid, part_locked; + bit [SCRAMBLE_KEY_SIZE-1:0] edn_key2, edn_key1; + bit [SCRAMBLE_KEY_SIZE-1:0] sram_key; // key used as input to present algo + bit [SCRAMBLE_DATA_SIZE-1:0] exp_key_lower, exp_key_higher; + + sram_fifos[index].get(rcv_item); + seed_valid = rcv_item.d_data[0]; + nonce = rcv_item.d_data[1+:SramNonceWidth]; + key = rcv_item.d_data[SramNonceWidth+1+:SramKeyWidth]; + part_locked = {`gmv(ral.secret1_digest[0]), `gmv(ral.secret1_digest[1])} != '0; + + // seed is valid as long as secret1 is locked + `DV_CHECK_EQ(seed_valid, part_locked, $sformatf("sram_%0d seed_valid mismatch", index)) + + // If edn_data_q matches the OTBN requested size, check OTBN outputs + if (edn_data_q.size() == NUM_SRAM_EDN_REQ) begin + {exp_nonce, edn_key2, edn_key1} = {<<32{edn_data_q}}; + + // check nonce value + `DV_CHECK_EQ(nonce, exp_nonce, $sformatf("sram_%0d nonce mismatch", index)) + + // calculate key + sram_key = get_key_from_otp(part_locked, SramDataKeySeedOffset / 4); + exp_key_lower = present_encode_with_final_const( + .data(RndCnstDigestIV[SramDataKey]), + .key(sram_key), + .final_const(RndCnstDigestConst[SramDataKey]), + .second_key(edn_key1), + .num_round(2)); + + exp_key_higher = present_encode_with_final_const( + .data(RndCnstDigestIV[SramDataKey]), + .key(sram_key), + .final_const(RndCnstDigestConst[SramDataKey]), + .second_key(edn_key2), + .num_round(2)); + exp_key = {exp_key_higher, exp_key_lower}; + `DV_CHECK_EQ(key, exp_key, $sformatf("sram_%0d key mismatch", index)) + if (cfg.en_cov) cov.sram_req_cg.sample(index, part_locked); + + end else if ((edn_data_q.size() - NUM_SRAM_EDN_REQ) % 2 != 0) begin + `uvm_error(`gfn, $sformatf("Unexpected edn_data_q size (%0d) during SRAM request", + edn_data_q.size())) + end + edn_data_q.delete(); + end + join_none + end + endtask + + virtual task process_tl_access(tl_seq_item item, tl_channels_e channel, string ral_name); + bit write = item.is_write(); + uvm_reg_addr_t csr_addr = cfg.ral_models[ral_name].get_word_aligned_addr(item.a_addr); + bit [TL_AW-1:0] addr_mask = ral.get_addr_mask(); + + bit addr_phase_read = (!write && channel == AddrChannel); + bit addr_phase_write = (write && channel == AddrChannel); + bit data_phase_read = (!write && channel == DataChannel); + bit data_phase_write = (write && channel == DataChannel); + + if (ral_name != "otp_ctrl_prim_reg_block") begin + process_core_tl_access(item, csr_addr, ral_name, addr_mask, + addr_phase_read, addr_phase_write, data_phase_read, data_phase_write); + end else begin + process_prim_tl_access(item, csr_addr, ral_name, addr_phase_write, data_phase_read); + end + endtask + + virtual function void process_prim_tl_access(tl_seq_item item, uvm_reg_addr_t csr_addr, + string ral_name, bit addr_phase_write, bit data_phase_read); + + uvm_reg csr; + dv_base_reg dv_reg; + csr = cfg.ral_models[ral_name].default_map.get_reg_by_offset(csr_addr); + `DV_CHECK_NE_FATAL(csr, null) + `downcast(dv_reg, csr) + + if (addr_phase_write) begin + void'(csr.predict(.value(item.a_data), .kind(UVM_PREDICT_WRITE), .be(item.a_mask))); + end else if (data_phase_read) begin + `DV_CHECK_EQ((csr.get_mirrored_value() | status_mask), (item.d_data | status_mask), + $sformatf("reg name: status, compare_mask %0h", status_mask)) + end + endfunction + + virtual function void process_core_tl_access(tl_seq_item item, uvm_reg_addr_t csr_addr, + string ral_name, bit [TL_AW-1:0] addr_mask, bit addr_phase_read, bit addr_phase_write, + bit data_phase_read, bit data_phase_write); + + bit do_read_check = 1; + uvm_reg csr; + dv_base_reg dv_reg; + string csr_name; + + `uvm_info(`gfn, $sformatf("sw state %d, reg state %d", direct_access_regwen_state, + `gmv(ral.direct_access_regwen)), UVM_LOW); + + // if access was to a valid csr, get the csr handle + if (csr_addr inside {cfg.ral_models[ral_name].csr_addrs}) begin + csr = cfg.ral_models[ral_name].default_map.get_reg_by_offset(csr_addr); + `DV_CHECK_NE_FATAL(csr, null) + `downcast(dv_reg, csr) + // SW CFG window + end else if ((csr_addr & addr_mask) inside + {[SW_WINDOW_BASE_ADDR : SW_WINDOW_BASE_ADDR + SW_WINDOW_SIZE]}) begin + if (data_phase_read) begin + bit [TL_AW-1:0] dai_addr = (csr_addr & addr_mask - SW_WINDOW_BASE_ADDR); + bit [TL_AW-1:0] otp_addr = dai_addr >> 2; + int part_idx = get_part_index(dai_addr); + bit [TL_DW-1:0] read_out; + int ecc_err = OtpNoEccErr; + + // We can't get an ECC error if the partition does not have integrity. + if (part_has_integrity(part_idx)) begin + ecc_err = read_a_word_with_ecc(dai_addr, read_out); + end else begin + ecc_err = read_a_word_with_ecc_raw(dai_addr, read_out); + end + + if (part_has_digest(part_idx) && cfg.en_cov) begin + cov.unbuf_access_lock_cg_wrap[part_idx].sample(.read_lock(0), + .write_lock(get_digest_reg_val(part_idx) != 0), .is_write(0)); + end + + // Any alert that indicates the OTP block is in the final error state should not enter the + // logic here, but gated at `is_tl_mem_access_allowed` function. + `DV_CHECK_EQ(cfg.otp_ctrl_vif.alert_reqs, 0) + + // ECC uncorrectable errors are gated by `is_tl_mem_access_allowed` function. + if (ecc_err != OtpNoEccErr && part_has_integrity(part_idx)) begin + + predict_err(otp_status_e'(part_idx), OtpMacroEccCorrError); + if (ecc_err == OtpEccCorrErr) begin + `DV_CHECK_EQ(item.d_data, otp_a[otp_addr], + $sformatf("mem read mismatch at TLUL addr %0h, csr_addr %0h", + csr_addr, dai_addr)) + end else begin + // Only check the first 16 bits because if ECC readout detects uncorrectable error, it + // won't continue read the remaining 16 bits. + `DV_CHECK_EQ(item.d_data & 16'hffff, read_out & 16'hffff, + $sformatf("mem read mismatch at TLUL addr %0h, csr_addr %0h", + csr_addr, dai_addr)) + end + // If there is an injected error, but the partition cannot detect it, we have to compare + // to the value read via the backdoor instead of otp_a[otp_addr] since otherwise the + // perturbed value does not get modelled correctly. + end else if (ecc_err != OtpNoEccErr && !part_has_integrity(part_idx)) begin + `DV_CHECK_EQ(item.d_data, read_out, + $sformatf("mem read mismatch at TLUL addr %0h, csr_addr %0h", + csr_addr, dai_addr)) + predict_no_err(otp_status_e'(part_idx)); + end else if (ecc_err == OtpNoEccErr) begin + `DV_CHECK_EQ(item.d_data, otp_a[otp_addr], + $sformatf("mem read mismatch at TLUL addr %0h, csr_addr %0h", + csr_addr, dai_addr)) + predict_no_err(otp_status_e'(part_idx)); + end + end + return; + end else begin + `uvm_fatal(`gfn, $sformatf("Access unexpected addr 0x%0h", csr_addr)) + end + + csr_name = csr.get_name(); + + if (addr_phase_write) begin + if (cfg.en_cov && cfg.otp_ctrl_vif.alert_reqs && csr_name == "direct_access_cmd") begin + cov.req_dai_access_after_alert_cg.sample(item.a_data); + end + + // Skip predict if the register is locked by `direct_access_regwen`. + // An exception is the direct_access_regwen which may always be written. + if (ral.direct_access_regwen.locks_reg_or_fld(dv_reg) && + `gmv(ral.direct_access_regwen) == 0 && + csr_name != "direct_access_regwen") return; + + void'(csr.predict(.value(item.a_data), .kind(UVM_PREDICT_WRITE), .be(item.a_mask))); + end + + // process the csr req + // for write, update local variable and fifo at address phase + // for read, update predication at address phase and compare at data phase + case (csr_name) + // add individual case item for each csr + "intr_state": begin + if (data_phase_read) begin + // Disable intr_state checking when lc_program is in progress, because scb cannot + // accurately predict when program_error will be triggered. + // We will check the intr_state after lc_program request is done, and the error bit will + // be checked in the `process_lc_prog_req` task. + if (cfg.otp_ctrl_vif.lc_prog_no_sta_check) do_read_check = 0; + if (do_read_check) begin + bit [TL_DW-1:0] intr_en = `gmv(ral.intr_enable); + bit [NumOtpCtrlIntr-1:0] intr_exp = `gmv(ral.intr_state); + + foreach (intr_exp[i]) begin + otp_intr_e intr = otp_intr_e'(i); + `DV_CHECK_CASE_EQ(cfg.intr_vif.pins[i], (intr_en[i] & intr_exp[i]), + $sformatf("Interrupt_pin: %0s", intr.name)); + if (cfg.en_cov) begin + cov.intr_cg.sample(i, intr_en[i], item.d_data[i]); + cov.intr_pins_cg.sample(i, cfg.intr_vif.pins[i]); + end + end + end + end + end + "intr_test": begin + if (addr_phase_write) begin + bit [TL_DW-1:0] intr_en = `gmv(ral.intr_enable); + bit [NumOtpCtrlIntr-1:0] intr_exp = `gmv(ral.intr_state) | item.a_data; + + void'(ral.intr_state.predict(.value(intr_exp))); + if (cfg.en_cov) begin + foreach (intr_exp[i]) begin + cov.intr_test_cg.sample(i, item.a_data[i], intr_en[i], intr_exp[i]); + end + end + end + end + "direct_access_cmd": begin + if (addr_phase_write && !cfg.otp_ctrl_vif.under_error_states()) begin + // here only normalize to 2 lsb, if is secret, will be reduced further + bit [TL_AW-1:0] dai_addr = normalize_dai_addr(`gmv(ral.direct_access_address)); + int part_idx = get_part_index(dai_addr); + bit sw_read_lock = 0; + void'(ral.direct_access_regwen.predict(0)); + under_dai_access = 1; + + // Check if it is sw partition read lock - this can be used in `DaiRead` branch and also + // coverage collection. + if (part_idx == VendorTestIdx) begin + sw_read_lock = `gmv(ral.vendor_test_read_lock) == 0; + end else if (part_idx == NonSecretFusesIdx) begin + sw_read_lock = `gmv(ral.non_secret_fuses_read_lock) == 0; + end + + // LC partition cannot be access via DAI + if (part_idx == LifeCycleIdx) begin + predict_err(OtpDaiErrIdx, OtpAccessError); + if (item.a_data == DaiRead) predict_rdata(is_secret(dai_addr), 0, 0); + end else begin + // Collect coverage. + if (cfg.en_cov) begin + if (part_idx == Secret2Idx) begin + cov.dai_access_secret2_cg.sample( + !(cfg.otp_ctrl_vif.lc_creator_seed_sw_rw_en_i != lc_ctrl_pkg::On), + dai_cmd_e'(item.a_data)); + end else if (is_sw_part_idx(part_idx) && part_has_digest(part_idx) && + item.a_data inside {DaiRead, DaiWrite}) begin + cov.unbuf_access_lock_cg_wrap[part_idx].sample(.read_lock(sw_read_lock), + .write_lock(get_digest_reg_val(part_idx) != 0), + .is_write(item.a_data == DaiWrite)); + + end + end + + case (item.a_data) + DaiDigest: cal_digest_val(part_idx); + DaiRead: begin + // Check if it is sw partition read lock + check_dai_rd_data = 1; + + // SW partitions write read_lock_csr can lock read access. + if (sw_read_lock || + // Secret partitions cal digest can also lock read access. + // However, digest is always readable except SW partitions (Issue #5752). + (is_secret(dai_addr) && get_digest_reg_val(part_idx) != 0 && + !is_digest(dai_addr)) || + // If the partition has creator key material and lc_creator_seed_sw_rw is + // disable, then return access error. + (PartInfo[part_idx].iskeymgr_creator && !is_digest(dai_addr) && + cfg.otp_ctrl_vif.lc_creator_seed_sw_rw_en_i != lc_ctrl_pkg::On)) begin + predict_err(OtpDaiErrIdx, OtpAccessError); + predict_rdata(is_secret(dai_addr) || is_digest(dai_addr), 0, 0); + end else if (sw_read_lock || + // Secret partitions cal digest can also lock read access. + // However, digest is always readable except SW partitions (Issue #5752). + (is_secret(dai_addr) && get_digest_reg_val(part_idx) != 0 && + !is_digest(dai_addr)) || + // If the partition has owner key material and lc_owner_seed_sw_rw is disable, + // then return access error. + (PartInfo[part_idx].iskeymgr_owner && !is_digest(dai_addr) && + cfg.otp_ctrl_vif.lc_owner_seed_sw_rw_en_i != lc_ctrl_pkg::On)) begin + predict_err(OtpDaiErrIdx, OtpAccessError); + predict_rdata(is_secret(dai_addr) || is_digest(dai_addr), 0, 0); + + end else begin + bit [TL_DW-1:0] read_out0, read_out1; + bit [TL_AW-1:0] otp_addr = get_scb_otp_addr(); + int ecc_err = 0; + + // Backdoor read to check if there is any ECC error. + if (part_has_integrity(part_idx)) begin + ecc_err = read_a_word_with_ecc(dai_addr, read_out0); + if (is_secret(dai_addr) || is_digest(dai_addr)) begin + ecc_err = max2(read_a_word_with_ecc(dai_addr + 4, read_out1), ecc_err); + end + end else begin + ecc_err = read_a_word_with_ecc_raw(dai_addr, read_out0); + if (is_secret(dai_addr) || is_digest(dai_addr)) begin + ecc_err = max2(read_a_word_with_ecc_raw(dai_addr + 4, read_out1), ecc_err); + end + end + + if (ecc_err == OtpEccCorrErr && part_has_integrity(part_idx)) begin + predict_err(OtpDaiErrIdx, OtpMacroEccCorrError); + backdoor_update_otp_array(dai_addr); + predict_rdata(is_secret(dai_addr) || is_digest(dai_addr), + otp_a[otp_addr], otp_a[otp_addr+1]); + end else if (ecc_err == OtpEccUncorrErr && part_has_integrity(part_idx)) begin + predict_err(OtpDaiErrIdx, OtpMacroEccUncorrError); + // Max wait 20 clock cycles because scb did not know when exactly OTP will + // finish reading and reporting the uncorrectable error. + set_exp_alert("fatal_macro_error", 1, 20); + predict_rdata(1, 0, 0); + // Some partitions do not interpret/report ECC errors. In those cases + // we still need to model the read data correctly if it has been perturbed. + end else if (ecc_err inside {OtpEccCorrErr, OtpEccUncorrErr} && + !part_has_integrity(part_idx)) begin + predict_no_err(OtpDaiErrIdx); + predict_rdata(is_secret(dai_addr) || is_digest(dai_addr), + read_out0, read_out1); + end else begin + predict_no_err(OtpDaiErrIdx); + predict_rdata(is_secret(dai_addr) || is_digest(dai_addr), + otp_a[otp_addr], otp_a[otp_addr+1]); + end + end + end + DaiWrite: begin + bit[TL_AW-1:0] otp_addr = get_scb_otp_addr(); + bit is_write_locked; + // check if write locked + if (part_has_digest(part_idx)) begin + is_write_locked = get_digest_reg_val(part_idx) != 0; + end else begin + is_write_locked = 0; + end + + if (is_write_locked || (PartInfo[part_idx].iskeymgr_creator && + !is_digest(dai_addr) && + cfg.otp_ctrl_vif.lc_creator_seed_sw_rw_en_i != lc_ctrl_pkg::On)) begin + predict_err(OtpDaiErrIdx, OtpAccessError); + end else if (is_write_locked || (PartInfo[part_idx].iskeymgr_owner && + !is_digest(dai_addr) && + cfg.otp_ctrl_vif.lc_owner_seed_sw_rw_en_i != lc_ctrl_pkg::On)) begin + predict_err(OtpDaiErrIdx, OtpAccessError); + end else begin + predict_no_err(OtpDaiErrIdx); + // write digest + if (is_sw_digest(dai_addr)) begin + bit [TL_DW*2-1:0] curr_digest, prev_digest; + curr_digest = {`gmv(ral.direct_access_wdata[1]), + `gmv(ral.direct_access_wdata[0])}; + prev_digest = {otp_a[otp_addr+1], otp_a[otp_addr]}; + dai_wr_ip = 1; + // allow bit write + if ((prev_digest & curr_digest) == prev_digest) begin + update_digest_to_otp(part_idx, curr_digest); + end else begin + predict_err(OtpDaiErrIdx, OtpMacroWriteBlankError); + end + end else if (is_digest(dai_addr)) begin + predict_err(OtpDaiErrIdx, OtpAccessError); + // write OTP memory + end else begin + dai_wr_ip = 1; + if (!is_secret(dai_addr)) begin + bit [TL_DW-1:0] wr_data = `gmv(ral.direct_access_wdata[0]); + // allow bit write + if ((otp_a[otp_addr] & wr_data) == otp_a[otp_addr]) begin + otp_a[otp_addr] = wr_data; + check_otp_idle(.val(0), .wait_clks(3)); + end else begin + predict_err(OtpDaiErrIdx, OtpMacroWriteBlankError); + end + end else begin + bit [SCRAMBLE_DATA_SIZE-1:0] secret_data = {otp_a[otp_addr + 1], + otp_a[otp_addr]}; + bit [SCRAMBLE_DATA_SIZE-1:0] wr_data = {`gmv(ral.direct_access_wdata[1]), + `gmv(ral.direct_access_wdata[0])}; + wr_data = scramble_data(wr_data, part_idx); + secret_data = scramble_data(secret_data, part_idx); + if ((secret_data & wr_data) == secret_data) begin + otp_a[otp_addr] = `gmv(ral.direct_access_wdata[0]); + otp_a[otp_addr + 1] = `gmv(ral.direct_access_wdata[1]); + // wait until secret scrambling is done + check_otp_idle(.val(0), .wait_clks(34)); + end else begin + predict_err(OtpDaiErrIdx, OtpMacroWriteBlankError); + end + end + end + end + end + default: begin + `uvm_fatal(`gfn, $sformatf("invalid cmd: %0d", item.a_data)) + end + endcase + // regwen is set to 0 only if the dai operation is successfully + if (`gmv(ral.intr_state.otp_error) == 0) void'(ral.direct_access_regwen.predict(0)); + end + end + end + "status": begin + if (addr_phase_read) begin + void'(ral.status.predict(.value(exp_status), .kind(UVM_PREDICT_READ))); + + // update status mask + status_mask = 0; + // Mask out check_pending field - we do not know how long it takes to process checks. + // Check failure can trigger all kinds of errors. + if (under_chk) status_mask = '1; + + // Mask out otp_dai access related field - we do not know how long it takes to finish + // DAI access. + if (under_dai_access) begin + status_mask[OtpDaiIdleIdx] = 1; + status_mask[OtpDaiErrIdx] = 1; + end + + // Mask out LCI error bit if lc_req is set. + if (cfg.otp_ctrl_vif.lc_prog_no_sta_check) status_mask[OtpLciErrIdx] = 1; + + end else if (data_phase_read) begin + if (cfg.en_cov) begin + cov.collect_status_cov(item.d_data); + if (cfg.otp_ctrl_vif.alert_reqs) begin + cov.csr_rd_after_alert_cg_wrap.sample(csr.get_offset()); + end + end + + if (item.d_data[OtpDaiIdleIdx]) begin + check_otp_idle(1); + dai_wr_ip = 0; + dai_digest_ip = LifeCycleIdx; + end + + // STATUS register check with mask + if (do_read_check) begin + `DV_CHECK_EQ((csr.get_mirrored_value() | status_mask), (item.d_data | status_mask), + $sformatf("reg name: status, compare_mask %0h", status_mask)) + end + + // Check if OtpCheckPending is set correctly, then ignore checking until check is done + if (under_chk) begin + if (item.d_data[OtpCheckPendingIdx] == 0) begin + exp_status[OtpCheckPendingIdx] = 0; + under_chk = 0; + end + end + + if (under_dai_access && !cfg.otp_ctrl_vif.under_error_states()) begin + if (item.d_data[OtpDaiIdleIdx]) begin + under_dai_access = 0; + void'(ral.direct_access_regwen.predict(direct_access_regwen_state)); + void'(ral.intr_state.otp_operation_done.predict(1)); + end + end + end + // checked in this block above + do_read_check = 0; + end + "check_trigger": begin + if (addr_phase_write && cfg.en_cov && cfg.otp_ctrl_vif.alert_reqs) begin + cov.issue_checks_after_alert_cg.sample(item.a_data); + end + + if (addr_phase_write && `gmv(ral.check_trigger_regwen) && item.a_data inside {[1:3]}) begin + bit [TL_DW-1:0] check_timeout = `gmv(ral.check_timeout) == 0 ? '1 : + `gmv(ral.check_timeout); + exp_status[OtpCheckPendingIdx] = 1; + under_chk = 1; + if (check_timeout <= CHK_TIMEOUT_CYC) begin + set_exp_alert("fatal_check_error", 1, `gmv(ral.check_timeout)); + predict_err(OtpTimeoutErrIdx); + end else begin + if (get_field_val(ral.check_trigger.consistency, item.a_data)) begin + foreach (cfg.ecc_chk_err[i]) begin + if (cfg.ecc_chk_err[i] == OtpEccCorrErr && part_has_integrity(i)) begin + predict_err(otp_status_e'(i), OtpMacroEccCorrError); + end else if (cfg.ecc_chk_err[i] == OtpEccUncorrErr && + part_has_integrity(i)) begin + set_exp_alert("fatal_macro_error", 1, 40_000); + predict_err(otp_status_e'(i), OtpMacroEccUncorrError); + end + end + end + end + end + end + "direct_access_regwen": begin + if (addr_phase_write) begin + // This locks the DAI until the next reset. + if (!item.a_data[0]) begin + direct_access_regwen_state = 0; + void'(ral.direct_access_regwen.predict(0)); + end + end + end + // For error codes, if lc_prog in progress, err_code might update anytime in DUT. Ignore + // checking until req is acknowledged. + + "err_code_0": begin + if (cfg.m_lc_prog_pull_agent_cfg.vif.req) do_read_check = 0; + if (cfg.en_cov && do_read_check && data_phase_read) begin + bit [TL_DW-1:0] dai_addr = `gmv(ral.direct_access_address) >> 2 << 2; + int access_part_idx = get_part_index(dai_addr); + cov.collect_err_code_cov(0, item.d_data, access_part_idx); + end + end + "err_code_1": begin + if (cfg.m_lc_prog_pull_agent_cfg.vif.req) do_read_check = 0; + if (cfg.en_cov && do_read_check && data_phase_read) begin + bit [TL_DW-1:0] dai_addr = `gmv(ral.direct_access_address) >> 2 << 2; + int access_part_idx = get_part_index(dai_addr); + cov.collect_err_code_cov(1, item.d_data, access_part_idx); + end + end + "err_code_2": begin + if (cfg.m_lc_prog_pull_agent_cfg.vif.req) do_read_check = 0; + if (cfg.en_cov && do_read_check && data_phase_read) begin + bit [TL_DW-1:0] dai_addr = `gmv(ral.direct_access_address) >> 2 << 2; + int access_part_idx = get_part_index(dai_addr); + cov.collect_err_code_cov(2, item.d_data, access_part_idx); + end + end + "err_code_3": begin + if (cfg.m_lc_prog_pull_agent_cfg.vif.req) do_read_check = 0; + if (cfg.en_cov && do_read_check && data_phase_read) begin + bit [TL_DW-1:0] dai_addr = `gmv(ral.direct_access_address) >> 2 << 2; + int access_part_idx = get_part_index(dai_addr); + cov.collect_err_code_cov(3, item.d_data, access_part_idx); + end + end + "err_code_4": begin + if (cfg.m_lc_prog_pull_agent_cfg.vif.req) do_read_check = 0; + if (cfg.en_cov && do_read_check && data_phase_read) begin + bit [TL_DW-1:0] dai_addr = `gmv(ral.direct_access_address) >> 2 << 2; + int access_part_idx = get_part_index(dai_addr); + cov.collect_err_code_cov(4, item.d_data, access_part_idx); + end + end + "err_code_5": begin + if (cfg.m_lc_prog_pull_agent_cfg.vif.req) do_read_check = 0; + if (cfg.en_cov && do_read_check && data_phase_read) begin + bit [TL_DW-1:0] dai_addr = `gmv(ral.direct_access_address) >> 2 << 2; + int access_part_idx = get_part_index(dai_addr); + cov.collect_err_code_cov(5, item.d_data, access_part_idx); + end + end + "err_code_6": begin + if (cfg.m_lc_prog_pull_agent_cfg.vif.req) do_read_check = 0; + if (cfg.en_cov && do_read_check && data_phase_read) begin + bit [TL_DW-1:0] dai_addr = `gmv(ral.direct_access_address) >> 2 << 2; + int access_part_idx = get_part_index(dai_addr); + cov.collect_err_code_cov(6, item.d_data, access_part_idx); + end + end + "vendor_test_digest_0", "vendor_test_digest_1", + "non_secret_fuses_digest_0", "non_secret_fuses_digest_1", + "secret0_digest_0", "secret0_digest_1", + "secret1_digest_0", "secret1_digest_1": begin + if (ignore_digest_chk) do_read_check = 0; + end + "vendor_test_read_lock", + "non_secret_fuses_read_lock", + "direct_access_wdata_0", + "direct_access_wdata_1", + "direct_access_address", + "check_regwen", + "check_trigger_regwen", + "check_trigger", + "check_timeout", + "intr_enable", + "integrity_check_period", + "consistency_check_period", + "alert_test": begin + // Do nothing + end + // DAI read data + "direct_access_rdata_0", "direct_access_rdata_1": do_read_check = check_dai_rd_data; + default: begin + `uvm_fatal(`gfn, $sformatf("invalid csr: %0s", csr.get_full_name())) + end + endcase + + // On reads, if do_read_check, is set, then check mirrored_value against item.d_data + if (data_phase_read) begin + if (do_read_check) begin + `DV_CHECK_EQ(csr.get_mirrored_value(), item.d_data, + $sformatf("reg name: %0s", csr.get_full_name())) + if (cfg.en_cov && cfg.otp_ctrl_vif.alert_reqs) begin + cov.csr_rd_after_alert_cg_wrap.sample(csr.get_offset()); + end + end + void'(csr.predict(.value(item.d_data), .kind(UVM_PREDICT_READ))); + end + endfunction + + // If reset or lc_escalate_en is issued during otp program, this function will backdoor update + // otp memory write value because scb did not know how many cells haven been written. + // We won't update csr `direct_access_address` after fatal alert happened, so in this function + // we can directly call method `get_scb_otp_addr` to get the interrupted dai address. + virtual function void recover_interrupted_op(); + if (dai_wr_ip) begin + bit [TL_DW-1:0] otp_addr = get_scb_otp_addr(); + bit [TL_DW-1:0] dai_addr = otp_addr << 2; + backdoor_update_otp_array(dai_addr); + dai_wr_ip = 0; + end + endfunction + + virtual function void backdoor_update_otp_array(bit [TL_DW-1:0] dai_addr); + bit [TL_DW-1:0] otp_addr = dai_addr >> 2; + bit [TL_DW-1:0] readout_word, readout_word1; + int part_idx = get_part_index(dai_addr); + if (part_has_integrity(part_idx)) begin + void'(read_a_word_with_ecc(dai_addr, readout_word)); + void'(read_a_word_with_ecc(dai_addr + 4, readout_word1)); + end else begin + void'(read_a_word_with_ecc_raw(dai_addr, readout_word)); + void'(read_a_word_with_ecc_raw(dai_addr + 4, readout_word1)); + end + + otp_a[otp_addr] = readout_word; + + if (is_digest(dai_addr)) begin + otp_a[otp_addr+1] = readout_word1; + end else if (is_secret(dai_addr)) begin + bit [TL_DW*2-1:0] mem_rd_val, descrambled_val; + mem_rd_val = {readout_word1 ,readout_word}; + descrambled_val = descramble_data(mem_rd_val, part_idx); + otp_a[otp_addr+1] = descrambled_val[TL_DW*2-1:TL_DW]; + otp_a[otp_addr] = descrambled_val[TL_DW-1:0]; + end + endfunction + + virtual function bit [1:0] read_a_word_with_ecc(bit [TL_DW-1:0] dai_addr, + ref bit [TL_DW-1:0] readout_word); + prim_secded_pkg::secded_22_16_t ecc_rd_data0 = cfg.mem_bkdr_util_h.ecc_read16(dai_addr); + prim_secded_pkg::secded_22_16_t ecc_rd_data1 = cfg.mem_bkdr_util_h.ecc_read16(dai_addr + 2); + readout_word[15:0] = ecc_rd_data0.data; + readout_word[31:16] = ecc_rd_data1.data; + return max2(ecc_rd_data0.err, ecc_rd_data1.err); + endfunction + + // Returns the ECC error but does not correct the data bits (i.e. returns the raw data). + virtual function bit [1:0] read_a_word_with_ecc_raw(bit [TL_DW-1:0] dai_addr, + ref bit [TL_DW-1:0] readout_word); + prim_secded_pkg::secded_22_16_t ecc_rd_data0 = cfg.mem_bkdr_util_h.ecc_read16(dai_addr); + prim_secded_pkg::secded_22_16_t ecc_rd_data1 = cfg.mem_bkdr_util_h.ecc_read16(dai_addr + 2); + readout_word[15:0] = 16'hFFFF & cfg.mem_bkdr_util_h.read(dai_addr); + readout_word[31:16] = 16'hFFFF & cfg.mem_bkdr_util_h.read(dai_addr + 2); + return max2(ecc_rd_data0.err, ecc_rd_data1.err); + endfunction + + + virtual function void reset(string kind = "HARD"); + recover_interrupted_op(); + super.reset(kind); + // flush fifos + otbn_fifo.flush(); + flash_addr_fifo.flush(); + flash_data_fifo.flush(); + lc_prog_fifo.flush(); + for (int i = 0; i < NumSramKeyReqSlots; i++) begin + sram_fifos[i].flush(); + end + + direct_access_regwen_state = 1; + under_chk = 0; + under_dai_access = 0; + ignore_digest_chk = 0; + exp_status = `gmv(ral.status); + exp_alert = OtpNoAlert; + + edn_data_q.delete(); + + // Out of reset: lock dai access until power init is done + if (cfg.en_scb) void'(ral.direct_access_regwen.predict(0)); + endfunction + + virtual function void check_otp_idle(bit val, int wait_clks = 0); + fork + begin + fork + begin + // use negedge to avoid race condition + cfg.clk_rst_vif.wait_n_clks(wait_clks + 1); + `uvm_error(`gfn, + $sformatf("pwr_otp_idle output is %0b while expect %0b within %0d cycles", + cfg.otp_ctrl_vif.pwr_otp_idle_o, val, wait_clks)) + end + begin + wait(cfg.under_reset || cfg.otp_ctrl_vif.pwr_otp_idle_o == val || + // Due to OTP access arbitration, any KDI request during DAI access might block + // write secret until KDI request is completed. Since the KDI process time could + // vary depends on the push-pull-agent, we are going to ignore the checking if + // this scenario happens. + cfg.m_otbn_pull_agent_cfg.vif.req || + cfg.m_flash_data_pull_agent_cfg.vif.req || + cfg.m_flash_addr_pull_agent_cfg.vif.req || + cfg.m_sram_pull_agent_cfg[0].vif.req || + cfg.m_sram_pull_agent_cfg[1].vif.req || + cfg.m_sram_pull_agent_cfg[2].vif.req || + cfg.m_sram_pull_agent_cfg[3].vif.req || + cfg.m_lc_prog_pull_agent_cfg.vif.req || + // When lc_escalation is on, the DAI interface goes to ErrorSt, so ignore + // otp_idle checking. + cfg.otp_ctrl_vif.alert_reqs || + // Check timeout will keep doing background check, issue #5616 + exp_status[OtpTimeoutErrIdx]); + end + join_any + disable fork; + end + join_none + endfunction + + // predict digest registers + virtual function void predict_digest_csrs(); + void'(ral.vendor_test_digest[0].predict( + .value(otp_a[PART_OTP_DIGEST_ADDRS[VendorTestIdx]]), + .kind(UVM_PREDICT_DIRECT))); + void'(ral.vendor_test_digest[1].predict( + .value(otp_a[PART_OTP_DIGEST_ADDRS[VendorTestIdx] + 1]), + .kind(UVM_PREDICT_DIRECT))); + + void'(ral.non_secret_fuses_digest[0].predict( + .value(otp_a[PART_OTP_DIGEST_ADDRS[NonSecretFusesIdx]]), + .kind(UVM_PREDICT_DIRECT))); + void'(ral.non_secret_fuses_digest[1].predict( + .value(otp_a[PART_OTP_DIGEST_ADDRS[NonSecretFusesIdx] + 1]), + .kind(UVM_PREDICT_DIRECT))); + + void'(ral.secret0_digest[0].predict( + .value(otp_a[PART_OTP_DIGEST_ADDRS[Secret0Idx]]), + .kind(UVM_PREDICT_DIRECT))); + void'(ral.secret0_digest[1].predict( + .value(otp_a[PART_OTP_DIGEST_ADDRS[Secret0Idx] + 1]), + .kind(UVM_PREDICT_DIRECT))); + + void'(ral.secret1_digest[0].predict( + .value(otp_a[PART_OTP_DIGEST_ADDRS[Secret1Idx]]), + .kind(UVM_PREDICT_DIRECT))); + void'(ral.secret1_digest[1].predict( + .value(otp_a[PART_OTP_DIGEST_ADDRS[Secret1Idx] + 1]), + .kind(UVM_PREDICT_DIRECT))); + endfunction + + function void update_digest_to_otp(int part_idx, bit [TL_DW*2-1:0] digest); + otp_a[PART_OTP_DIGEST_ADDRS[part_idx]] = digest[31:0]; + otp_a[PART_OTP_DIGEST_ADDRS[part_idx] + 1] = digest[63:32]; + endfunction + + function void check_phase(uvm_phase phase); + super.check_phase(phase); + // post test checks - ensure that all local fifos and queues are empty + endfunction + + // Calculate digest value for each partition + // According to the design spec, the calculation is based on 64-rounds of PRESENT cipher + // The 64-bit data_in state is initialized with a silicon creator constant, and each 128 bit + // chunk of partition data are fed in as keys + // The last 64-round PRESENT calculation will use a global digest constant as key input + function void cal_digest_val(int part_idx); + bit [TL_DW-1:0] mem_q[$]; + int array_size; + bit [SCRAMBLE_DATA_SIZE-1:0] digest; + + if (cfg.otp_ctrl_vif.under_error_states()) return; + + if (!part_has_hw_digest(part_idx) || get_digest_reg_val(part_idx) != 0) begin + predict_err(OtpDaiErrIdx, OtpAccessError); + return; + end else if (PartInfo[part_idx].iskeymgr_creator && + cfg.otp_ctrl_vif.lc_creator_seed_sw_rw_en_i != lc_ctrl_pkg::On) begin + predict_err(OtpDaiErrIdx, OtpAccessError); + return; + end else if (PartInfo[part_idx].iskeymgr_owner && + cfg.otp_ctrl_vif.lc_owner_seed_sw_rw_en_i != lc_ctrl_pkg::On) begin + predict_err(OtpDaiErrIdx, OtpAccessError); + return; + end else begin + predict_no_err(OtpDaiErrIdx); + dai_digest_ip = part_idx; + end + case (part_idx) + Secret0Idx: mem_q = otp_a[Secret0Offset / TL_SIZE : Secret0DigestOffset / TL_SIZE - 1]; + Secret1Idx: mem_q = otp_a[Secret1Offset / TL_SIZE : Secret1DigestOffset / TL_SIZE - 1]; + default: begin + `uvm_fatal(`gfn, $sformatf("Access unexpected partition %0d", part_idx)) + end + endcase + + array_size = mem_q.size(); + + // for secret partitions, need to use otp scrambled value as data input + if (PartInfo[part_idx].secret) begin + bit [TL_DW-1:0] scrambled_mem_q[$]; + for (int i = 0; i < array_size/2; i++) begin + bit [SCRAMBLE_DATA_SIZE-1:0] scrambled_data; + scrambled_data = scramble_data({mem_q[i*2+1], mem_q[i*2]}, part_idx); + scrambled_mem_q.push_back(scrambled_data[TL_DW-1:0]); + scrambled_mem_q.push_back(scrambled_data[SCRAMBLE_DATA_SIZE-1:TL_DW]); + end + mem_q = scrambled_mem_q; + end + + digest = otp_scrambler_pkg::cal_digest(part_idx, mem_q); + update_digest_to_otp(part_idx, digest); + endfunction + + + // this function go through present encode algo two or three iterations: + // first iteration with input key, + // second iteration with second_key, this iteration only happens if num_round is 2 + // third iteration with a final constant as key + // this is mainly used for unlock token hashing, key derivation + virtual function bit [SCRAMBLE_DATA_SIZE-1:0] present_encode_with_final_const( + bit [SCRAMBLE_DATA_SIZE-1:0] data, + bit [SCRAMBLE_KEY_SIZE-1:0] key, + bit [SCRAMBLE_KEY_SIZE-1:0] final_const, + bit [SCRAMBLE_KEY_SIZE-1:0] second_key = '0, + int num_round = 1); + bit [SCRAMBLE_DATA_SIZE-1:0] enc_data; + bit [SCRAMBLE_DATA_SIZE-1:0] intermediate_state; + crypto_dpi_present_pkg::sv_dpi_present_encrypt(data, key, + SCRAMBLE_KEY_SIZE, NUM_ROUND, enc_data); + // XOR the previous state into the digest result according to the Davies-Meyer scheme. + intermediate_state = data ^ enc_data; + + if (num_round == 2) begin + crypto_dpi_present_pkg::sv_dpi_present_encrypt(intermediate_state, second_key, + SCRAMBLE_KEY_SIZE, NUM_ROUND, enc_data); + intermediate_state = intermediate_state ^ enc_data; + end else if (num_round > 2) begin + `uvm_fatal(`gfn, $sformatf("does not support num_round: %0d > 2", num_round)) + end + + crypto_dpi_present_pkg::sv_dpi_present_encrypt(intermediate_state, final_const, + SCRAMBLE_KEY_SIZE, NUM_ROUND, enc_data); + // XOR the previous state into the digest result according to the Davies-Meyer scheme. + present_encode_with_final_const = intermediate_state ^ enc_data; + endfunction + + // Get address for scoreboard's otp_a array from the `direct_access_address` CSR + function bit [TL_DW-1:0] get_scb_otp_addr(); + bit [TL_DW-1:0] dai_addr = `gmv(ral.direct_access_address); + get_scb_otp_addr = normalize_dai_addr(dai_addr) >> 2; + endfunction + + // This function predict OTP error related registers: intr_state, status, and err_code + virtual function void predict_err(otp_status_e status_err_idx, + otp_err_code_e err_code = OtpNoError, + bit update_esc_err = 0); + if (cfg.otp_ctrl_vif.under_error_states() && !update_esc_err) return; + + // Update intr_state + void'(ral.intr_state.otp_error.predict(.value(1), .kind(UVM_PREDICT_READ))); + // Update status + exp_status[status_err_idx] = 1; + + // Only first status errors up to the LCI have corresponding err_code + if (status_err_idx <= OtpLciErrIdx) begin + dv_base_reg_field err_code_flds[$]; + if (err_code == OtpNoError) begin + `uvm_error(`gfn, $sformatf("please set status error: %0s error code", status_err_idx.name)) + end + ral.err_code[status_err_idx].get_dv_base_reg_fields(err_code_flds); + + if (`gmv(err_code_flds[0]) inside {OTP_TERMINAL_ERRS}) begin + `uvm_info(`gfn, "terminal error cannot be updated", UVM_HIGH) + end else if (status_err_idx == OtpLciErrIdx && + `gmv(err_code_flds[0]) != OtpNoError) begin + `uvm_info(`gfn, "For LC partition, all errors are terminal error!", UVM_HIGH) + end else begin + void'(err_code_flds[0].predict(.value(err_code), .kind(UVM_PREDICT_READ))); + end + end + + endfunction + + virtual function void predict_no_err(otp_status_e status_err_idx); + if (cfg.otp_ctrl_vif.under_error_states()) return; + + exp_status[status_err_idx] = 0; + if (status_err_idx == OtpDaiErrIdx) exp_status[OtpDaiIdleIdx] = 1; + + if (status_err_idx <= OtpLciErrIdx) begin + dv_base_reg_field err_code_flds[$]; + ral.err_code[status_err_idx].get_dv_base_reg_fields(err_code_flds); + void'(err_code_flds[0].predict(OtpNoError)); + end + endfunction + + virtual function void predict_rdata(bit is_64_bits, bit [TL_DW-1:0] rdata0, + bit [TL_DW-1:0] rdata1 = 0); + void'(ral.direct_access_rdata[0].predict(.value(rdata0), .kind(UVM_PREDICT_READ))); + if (is_64_bits) begin + void'(ral.direct_access_rdata[1].predict(.value(rdata1), .kind(UVM_PREDICT_READ))); + end + endfunction + + // this function retrieves keys (128 bits) from scb's otp_array with a starting address + // if not locked, it will return 0 + // this is mainly used for scrambling key algo + virtual function bit [SCRAMBLE_KEY_SIZE-1:0] get_key_from_otp(bit locked, int start_i); + bit [SCRAMBLE_KEY_SIZE-1:0] key; + if (!locked) return 0; + for (int i = 0; i < 4; i++) key |= otp_a[i + start_i] << (TL_DW * i); + return key; + endfunction + + // The following two methods are all retrieving digest val. + // get_otp_digest_val: is the digest value from OTP memory + // get_digest_reg_val: is the digest value in register. This value is identical to OTP + // memory's digest value after a power cycle reset. + virtual function bit [TL_DW*2-1:0] get_otp_digest_val(int part_idx); + get_otp_digest_val[31:0] = otp_a[PART_OTP_DIGEST_ADDRS[part_idx]]; + get_otp_digest_val[63:32] = otp_a[PART_OTP_DIGEST_ADDRS[part_idx] + 1]; + endfunction + + virtual function bit [TL_DW*2-1:0] get_digest_reg_val(int part_idx); + bit [TL_DW*2-1:0] digest; + case (part_idx) + VendorTestIdx: begin + digest = {`gmv(ral.vendor_test_digest[1]), + `gmv(ral.vendor_test_digest[0])}; + end + NonSecretFusesIdx: begin + digest = {`gmv(ral.non_secret_fuses_digest[1]), + `gmv(ral.non_secret_fuses_digest[0])}; + end + Secret0Idx: begin + digest = {`gmv(ral.secret0_digest[1]), + `gmv(ral.secret0_digest[0])}; + end + Secret1Idx: begin + digest = {`gmv(ral.secret1_digest[1]), + `gmv(ral.secret1_digest[0])}; + end + default: `uvm_fatal(`gfn, $sformatf("Partition %0d does not have digest", part_idx)) + endcase + return digest; + endfunction + + virtual function bit is_tl_mem_access_allowed(input tl_seq_item item, input string ral_name, + output bit mem_byte_access_err, + output bit mem_wo_err, + output bit mem_ro_err, + output bit custom_err); + + uvm_reg_addr_t addr = cfg.ral_models[ral_name].get_word_aligned_addr(item.a_addr); + uvm_reg_addr_t csr_addr = cfg.ral_models[ral_name].get_word_aligned_addr(item.a_addr); + bit [TL_AW-1:0] addr_mask = ral.get_addr_mask(); + bit [TL_AW-1:0] dai_addr = (csr_addr & addr_mask - SW_WINDOW_BASE_ADDR); + + bit mem_access_allowed = super.is_tl_mem_access_allowed(item, ral_name, mem_byte_access_err, + mem_wo_err, mem_ro_err, custom_err); + + if (ral_name == "otp_ctrl_prim_reg_block") return mem_access_allowed; + + // Ensure the address is within the memory window range. + // Also will skip checking if memory access is not allowed due to TLUL bus error. + if (addr inside { + [cfg.ral_models[ral_name].mem_ranges[0].start_addr : + cfg.ral_models[ral_name].mem_ranges[0].end_addr]} && + mem_access_allowed) begin + + // If sw partition is read locked, then access policy changes from RO to no access + if (`gmv(ral.vendor_test_read_lock) == 0 || + cfg.otp_ctrl_vif.under_error_states()) begin + if (addr inside { + [cfg.ral_models[ral_name].mem_ranges[0].start_addr + VendorTestOffset : + cfg.ral_models[ral_name].mem_ranges[0].start_addr + VendorTestOffset + + VendorTestSize - 1]}) begin + predict_err(OtpVendorTestErrIdx, OtpAccessError); + custom_err = 1; + if (cfg.en_cov) begin + cov.unbuf_access_lock_cg_wrap[VendorTestIdx].sample(.read_lock(1), + .write_lock(get_digest_reg_val(VendorTestIdx) != 0), .is_write(0)); + end + return 0; + end + end + if (`gmv(ral.non_secret_fuses_read_lock) == 0 || + cfg.otp_ctrl_vif.under_error_states()) begin + if (addr inside { + [cfg.ral_models[ral_name].mem_ranges[0].start_addr + NonSecretFusesOffset : + cfg.ral_models[ral_name].mem_ranges[0].start_addr + NonSecretFusesOffset + + NonSecretFusesSize - 1]}) begin + predict_err(OtpNonSecretFusesErrIdx, OtpAccessError); + custom_err = 1; + if (cfg.en_cov) begin + cov.unbuf_access_lock_cg_wrap[NonSecretFusesIdx].sample(.read_lock(1), + .write_lock(get_digest_reg_val(NonSecretFusesIdx) != 0), .is_write(0)); + end + return 0; + end + end + + // Check ECC uncorrectable fatal error. + if (dai_addr < LifeCycleOffset) begin + int part_idx = get_part_index(dai_addr); + bit [TL_DW-1:0] read_out; + int ecc_err = read_a_word_with_ecc(dai_addr, read_out); + if (ecc_err == OtpEccUncorrErr && part_has_integrity(part_idx)) begin + predict_err(otp_status_e'(part_idx), OtpMacroEccUncorrError); + set_exp_alert("fatal_macro_error", 1, 20); + custom_err = 1; + return 0; + end + end + end + + return mem_access_allowed; + endfunction + + virtual function bit predict_tl_err(tl_seq_item item, tl_channels_e channel, string ral_name); + if (ral_name == "otp_ctrl_prim_reg_block" && + cfg.otp_ctrl_vif.lc_dft_en_i != lc_ctrl_pkg::On) begin + if (channel == DataChannel) begin + `DV_CHECK_EQ(item.d_error, 1, + $sformatf({"On interface %0s, TL item: %0s, access gated by lc_dft_en_i"}, + ral_name, item.sprint(uvm_default_line_printer))) + + // In data read phase, check d_data when d_error = 1. + if (item.d_error && (item.d_opcode == tlul_pkg::AccessAckData)) begin + check_tl_read_value_after_error(item, ral_name); + end + end + return 1; + end + return super.predict_tl_err(item, channel, ral_name); + endfunction + + virtual function void set_exp_alert(string alert_name, bit is_fatal = 0, int max_delay = 0); + exp_alert = alert_name == "fatal_check_error" ? OtpCheckAlert : OtpMacroAlert; + super.set_exp_alert(alert_name, is_fatal, max_delay); + endfunction + +endclass diff --git a/src/fuse_ctrl/dv/env/seq_lib/otp_ctrl_base_vseq.sv b/src/fuse_ctrl/dv/env/seq_lib/otp_ctrl_base_vseq.sv new file mode 100755 index 000000000..241706efe --- /dev/null +++ b/src/fuse_ctrl/dv/env/seq_lib/otp_ctrl_base_vseq.sv @@ -0,0 +1,632 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// DO NOT EDIT THIS FILE DIRECTLY. +// It has been generated with ./util/design/gen-otp-mmap.py + +class otp_ctrl_base_vseq extends cip_base_vseq #( + .RAL_T (otp_ctrl_core_reg_block), + .CFG_T (otp_ctrl_env_cfg), + .COV_T (otp_ctrl_env_cov), + .VIRTUAL_SEQUENCER_T (otp_ctrl_virtual_sequencer) + ); + `uvm_object_utils(otp_ctrl_base_vseq) + `uvm_object_new + + // various knobs to enable certain routines + bit do_otp_ctrl_init = 1'b1; + bit do_otp_pwr_init = 1'b1; + + // To only write unused OTP address, sequence will collect all the written addresses to an + // associative array to avoid `write_blank_addr_error`. + bit write_unused_addr = 1; + static bit used_dai_addrs[bit [OTP_ADDR_WIDTH - 1 : 0]]; + + rand bit [NumOtpCtrlIntr-1:0] en_intr; + + rand int apply_reset_during_pwr_init_cycles; + + bit is_valid_dai_op = 1; + + // According to spec, the period between digest calculation and reset should not issue any write. + bit [NumPart-2:0] digest_calculated; + + // For stress_all_with_rand reset sequence to issue reset during OTP operations. + bit do_digest_cal, do_otp_rd, do_otp_wr; + + // LC program request will use a separate variable to automatically set to non-blocking setting + // when LC error bit is set. + bit default_req_blocking = 1; + bit lc_prog_blocking = 1; + bit dai_wr_inprogress = 0; + uint32_t op_done_spinwait_timeout_ns = 20_000_000; + + // Collect current lc_state and lc_cnt. This is used to create next lc_state and lc_cnt without + // error. + lc_ctrl_state_pkg::lc_state_e lc_state; + lc_ctrl_state_pkg::lc_cnt_e lc_cnt; + + otp_ctrl_callback_vseq callback_vseq; + + constraint apply_reset_during_pwr_init_cycles_c { + apply_reset_during_pwr_init_cycles == 0; + } + + virtual task pre_start(); + `uvm_create_on(callback_vseq, p_sequencer); + super.pre_start(); + endtask + + virtual task dut_init(string reset_kind = "HARD"); + // OTP has dut and edn reset. If assign OTP values after `super.dut_init()`, and if dut reset + // deasserts earlier than edn reset, some OTP outputs might remain X or Z when dut clock is + // running. + otp_ctrl_vif_init(); + super.dut_init(reset_kind); + callback_vseq.dut_init_callback(); + + cfg.backdoor_clear_mem = 0; + // reset power init pin and lc pins + if (do_otp_ctrl_init && do_apply_reset) otp_ctrl_init(); + cfg.clk_rst_vif.wait_clks($urandom_range(0, 10)); + if (do_otp_pwr_init && do_apply_reset) otp_pwr_init(); + callback_vseq.post_otp_pwr_init(); + endtask + + // Cfg errors are cleared after reset + virtual task apply_reset(string kind = "HARD"); + super.apply_reset(kind); + cfg.otp_ctrl_vif.release_part_access_mubi(); + clear_seq_flags(); + endtask + + virtual function void clear_seq_flags(); + do_digest_cal = 0; + do_otp_rd = 0; + do_otp_wr = 0; + endfunction + + virtual task otp_ctrl_vif_init(); + cfg.otp_ctrl_vif.drive_lc_creator_seed_sw_rw_en(lc_ctrl_pkg::On); + cfg.otp_ctrl_vif.drive_lc_owner_seed_sw_rw_en(lc_ctrl_pkg::On); + cfg.otp_ctrl_vif.drive_lc_seed_hw_rd_en(get_rand_lc_tx_val()); + cfg.otp_ctrl_vif.drive_lc_dft_en(get_rand_lc_tx_val(.t_weight(0))); + cfg.otp_ctrl_vif.drive_lc_escalate_en(lc_ctrl_pkg::Off); + cfg.otp_ctrl_vif.drive_pwr_otp_init(0); + cfg.otp_ctrl_vif.drive_ext_voltage_h_io(1'bz); + + // Unused signals in open sourced OTP memory + `DV_CHECK_RANDOMIZE_FATAL(cfg.dut_cfg) + cfg.otp_ctrl_vif.otp_ast_pwr_seq_h_i = cfg.dut_cfg.otp_ast_pwr_seq_h; + cfg.otp_ctrl_vif.scan_en_i = cfg.dut_cfg.scan_en; + cfg.otp_ctrl_vif.scan_rst_ni = cfg.dut_cfg.scan_rst_n; + cfg.otp_ctrl_vif.scanmode_i = cfg.dut_cfg.scanmode; + cfg.otp_ctrl_vif.otp_vendor_test_ctrl_i = cfg.dut_cfg.otp_vendor_test_ctrl; + endtask + + // drive otp_pwr req pin to initialize OTP, and wait until init is done + virtual task otp_pwr_init(); + cfg.otp_ctrl_vif.drive_pwr_otp_init(1); + if (apply_reset_during_pwr_init_cycles > 0) begin + `DV_SPINWAIT_EXIT( + cfg.clk_rst_vif.wait_clks(apply_reset_during_pwr_init_cycles);, + wait (cfg.otp_ctrl_vif.pwr_otp_done_o == 1);) + if (cfg.otp_ctrl_vif.pwr_otp_done_o == 0) begin + cfg.otp_ctrl_vif.drive_pwr_otp_init(0); + apply_reset(); + cfg.otp_ctrl_vif.drive_pwr_otp_init(1); + end + end + wait (cfg.otp_ctrl_vif.pwr_otp_done_o == 1); + cfg.otp_ctrl_vif.drive_pwr_otp_init(0); + digest_calculated = 0; + endtask + + // setup basic otp_ctrl features + virtual task otp_ctrl_init(); + // reset memory to avoid readout X + clear_otp_memory(); + lc_state = lc_state_e'(0); + lc_cnt = lc_cnt_e'(0); + endtask + + virtual function void clear_otp_memory(); + cfg.mem_bkdr_util_h.clear_mem(); + cfg.backdoor_clear_mem = 1; + used_dai_addrs.delete(); + endfunction + + // Overide this task for otp_ctrl_common_vseq and otp_ctrl_stress_all_with_rand_reset_vseq + // because some registers won't set to default value until otp_init is done. + virtual task read_and_check_all_csrs_after_reset(); + cfg.otp_ctrl_vif.drive_lc_escalate_en(lc_ctrl_pkg::Off); + otp_pwr_init(); + super.read_and_check_all_csrs_after_reset(); + endtask + + // this task triggers an OTP write sequence via the DAI interface + virtual task dai_wr(bit [TL_DW-1:0] addr, + bit [TL_DW-1:0] wdata0, + bit [TL_DW-1:0] wdata1 = 0); + bit [TL_DW-1:0] val; + dai_wr_inprogress = 1; + if (write_unused_addr) begin + if (used_dai_addrs.exists(addr[OTP_ADDR_WIDTH - 1 : 0])) begin + `uvm_info(`gfn, $sformatf("addr %0h is already written!", addr), UVM_MEDIUM) + dai_wr_inprogress = 0; + return; + end else begin + used_dai_addrs[addr] = 1; + end + end + addr = randomize_dai_addr(addr); + `uvm_info(`gfn, $sformatf("dai write addr %0h, data %0h", addr, wdata0), UVM_HIGH) + csr_wr(ral.direct_access_address, addr); + csr_wr(ral.direct_access_wdata[0], wdata0); + if (is_secret(addr) || is_sw_digest(addr)) csr_wr(ral.direct_access_wdata[1], wdata1); + + do_otp_wr = 1; + csr_wr(ral.direct_access_cmd, int'(otp_ctrl_pkg::DaiWrite)); + `uvm_info(`gfn, $sformatf("DAI write, address %0h, data0 %0h data1 %0h, is_secret = %0b", + addr, wdata0, wdata1, is_secret(addr)), UVM_DEBUG) + + // Direct_access_regwen and dai_idle are checked only when following conditions are met: + // - the dai operation is valid, otherwise it is hard to predict which cycle the error is + // detected + // - zero delays in TLUL interface, otherwise dai operation might be finished before reading + // these two CSRs + if (cfg.zero_delays && is_valid_dai_op && + cfg.otp_ctrl_vif.lc_escalate_en_i == lc_ctrl_pkg::Off) begin + csr_rd_check(ral.status.dai_idle, .compare_value(0), .backdoor(1)); + if ($urandom_range(0, 1)) csr_rd(.ptr(ral.direct_access_regwen), .value(val)); + end + wait_dai_op_done(); + rd_and_clear_intrs(); + dai_wr_inprogress = 0; + endtask : dai_wr + + // This task triggers an OTP readout sequence via the DAI interface + virtual task dai_rd(input bit [TL_DW-1:0] addr, + output bit [TL_DW-1:0] rdata0, + output bit [TL_DW-1:0] rdata1); + bit [TL_DW-1:0] val; + addr = randomize_dai_addr(addr); + + csr_wr(ral.direct_access_address, addr); + do_otp_rd = 1; + csr_wr(ral.direct_access_cmd, int'(otp_ctrl_pkg::DaiRead)); + + if (cfg.zero_delays && is_valid_dai_op && + cfg.otp_ctrl_vif.lc_escalate_en_i == lc_ctrl_pkg::Off) begin + csr_rd_check(ral.status.dai_idle, .compare_value(0), .backdoor(1)); + if ($urandom_range(0, 1)) csr_rd(.ptr(ral.direct_access_regwen), .value(val)); + end + + wait_dai_op_done(); + csr_rd(ral.direct_access_rdata[0], rdata0); + if (is_secret(addr) || is_digest(addr)) csr_rd(ral.direct_access_rdata[1], rdata1); + rd_and_clear_intrs(); + endtask : dai_rd + + virtual task dai_rd_check(bit [TL_DW-1:0] addr, + bit [TL_DW-1:0] exp_data0, + bit [TL_DW-1:0] exp_data1 = 0); + bit [TL_DW-1:0] rdata0, rdata1; + dai_rd(addr, rdata0, rdata1); + if (!cfg.under_reset) begin + `DV_CHECK_EQ(rdata0, exp_data0, $sformatf("dai addr %0h rdata0 readout mismatch", addr)) + if (is_secret(addr) || is_digest(addr)) begin + `DV_CHECK_EQ(rdata1, exp_data1, $sformatf("dai addr %0h rdata1 readout mismatch", addr)) + end + end + endtask: dai_rd_check + + // this task exercises an OTP digest calculation via the DAI interface + virtual task cal_digest(int part_idx); + bit [TL_DW-1:0] val; + csr_wr(ral.direct_access_address, PART_BASE_ADDRS[part_idx]); + csr_wr(ral.direct_access_cmd, otp_ctrl_pkg::DaiDigest); + + if (cfg.zero_delays && is_valid_dai_op && + cfg.otp_ctrl_vif.lc_escalate_en_i == lc_ctrl_pkg::Off) begin + csr_rd_check(ral.status.dai_idle, .compare_value(0), .backdoor(1)); + if ($urandom_range(0, 1)) csr_rd(.ptr(ral.direct_access_regwen), .value(val)); + end + do_digest_cal = 1; + wait_dai_op_done(); + digest_calculated[part_idx] = 1; + rd_and_clear_intrs(); + endtask + + // this task provisions all HW partitions + // SW partitions could not be provisioned via DAI interface + // LC partitions cannot be locked + virtual task cal_hw_digests(bit [NumPart-1:0] trigger_digest = $urandom()); + foreach (PartInfo[i]) begin + if (PartInfo[i].hw_digest && trigger_digest[i]) begin + cal_digest(i); + end + end + endtask + + // SW digest data are calculated in sw and won't be checked in OTP. + // Here to simplify testbench, write random data to sw digest. + virtual task write_sw_digests(bit [NumPartUnbuf-1:0] wr_digest = $urandom()); + bit [TL_DW*2-1:0] wdata; + if (wr_digest[VendorTestIdx]) begin + `DV_CHECK_STD_RANDOMIZE_FATAL(wdata); + dai_wr(VendorTestDigestOffset, wdata[TL_DW-1:0], wdata[TL_DW*2-1:TL_DW]); + end + if (wr_digest[NonSecretFusesIdx]) begin + `DV_CHECK_STD_RANDOMIZE_FATAL(wdata); + dai_wr(NonSecretFusesDigestOffset, wdata[TL_DW-1:0], wdata[TL_DW*2-1:TL_DW]); + end + endtask + + virtual task write_sw_rd_locks(bit [NumPartUnbuf-1:0] do_rd_lock= $urandom()); + if (do_rd_lock[VendorTestIdx]) csr_wr(ral.vendor_test_read_lock, 0); + if (do_rd_lock[NonSecretFusesIdx]) csr_wr(ral.non_secret_fuses_read_lock, 0); + endtask + + // The digest CSR values are verified in otp_ctrl_scoreboard + virtual task rd_digests(); + bit [TL_DW-1:0] val; + csr_rd(.ptr(ral.vendor_test_digest[0]), .value(val)); + csr_rd(.ptr(ral.vendor_test_digest[1]), .value(val)); + csr_rd(.ptr(ral.non_secret_fuses_digest[0]), .value(val)); + csr_rd(.ptr(ral.non_secret_fuses_digest[1]), .value(val)); + csr_rd(.ptr(ral.secret0_digest[0]), .value(val)); + csr_rd(.ptr(ral.secret0_digest[1]), .value(val)); + csr_rd(.ptr(ral.secret1_digest[0]), .value(val)); + csr_rd(.ptr(ral.secret1_digest[1]), .value(val)); + endtask + + // If the partition is read/write locked, there is 20% chance we will force the internal mubi + // access signal to the values other than mubi::true or mubi::false. + virtual task force_mubi_part_access(); + // Stress_all_with_rand_reset seq will issue reset and wait until reset is done then kill the + // parallel sequence. This gating logic avoid injecting error during reset active. + if (cfg.otp_ctrl_vif.alert_reqs == 0 && !cfg.under_reset) begin + otp_part_access_lock_t forced_mubi_part_access[NumPart-1]; + + // Digest write locks + if ((`gmv(ral.vendor_test_digest[0]) || + `gmv(ral.vendor_test_digest[1])) && + !$urandom_range(0, 4)) begin + forced_mubi_part_access[VendorTestIdx].write_lock = 1; + end + if ((`gmv(ral.non_secret_fuses_digest[0]) || + `gmv(ral.non_secret_fuses_digest[1])) && + !$urandom_range(0, 4)) begin + forced_mubi_part_access[NonSecretFusesIdx].write_lock = 1; + end + if ((`gmv(ral.secret0_digest[0]) || + `gmv(ral.secret0_digest[1])) && + !$urandom_range(0, 4)) begin + forced_mubi_part_access[Secret0Idx].write_lock = 1; + end + if ((`gmv(ral.secret1_digest[0]) || + `gmv(ral.secret1_digest[1])) && + !$urandom_range(0, 4)) begin + forced_mubi_part_access[Secret1Idx].write_lock = 1; + end + + // CSR read locks + if ((`gmv(ral.vendor_test_read_lock) == 0) && !$urandom_range(0, 4)) begin + forced_mubi_part_access[VendorTestIdx].read_lock = 1; + end + if ((`gmv(ral.non_secret_fuses_read_lock) == 0) && !$urandom_range(0, 4)) begin + forced_mubi_part_access[NonSecretFusesIdx].read_lock = 1; + end + + + // Digest read locks + if ((`gmv(ral.secret0_digest[0]) || + `gmv(ral.secret0_digest[1])) && + !$urandom_range(0, 4)) begin + forced_mubi_part_access[Secret0Idx].read_lock = 1; + end + if ((`gmv(ral.secret1_digest[0]) || + `gmv(ral.secret1_digest[1])) && + !$urandom_range(0, 4)) begin + forced_mubi_part_access[Secret1Idx].read_lock = 1; + end + + foreach (forced_mubi_part_access[i]) begin + `uvm_info(`gfn, $sformatf("partition %0d inject mubi value: read=%0b, write=%0b", i, + forced_mubi_part_access[i].read_lock, forced_mubi_part_access[i].write_lock), UVM_HIGH) + end + + cfg.otp_ctrl_vif.force_part_access_mubi(forced_mubi_part_access); + end + endtask + + // This function backdoor inject error according to ecc_err. + // For example, if err_mask is set to 'b01, bit 1 in OTP macro will be flipped. + // This function will output original backdoor read data for the given address. + virtual function bit [TL_DW-1:0] backdoor_inject_ecc_err(bit [TL_DW-1:0] addr, + otp_ecc_err_e ecc_err); + bit [TL_DW-1:0] val; + addr = {addr[TL_DW-1:2], 2'b00}; + val = cfg.mem_bkdr_util_h.read32(addr); + if (ecc_err == OtpNoEccErr || addr >= (LifeCycleOffset + LifeCycleSize)) return val; + + // Backdoor read and write back with error bits + cfg.mem_bkdr_util_h.inject_errors(addr, (ecc_err == OtpEccUncorrErr) ? 2 : 1); + `uvm_info(`gfn, $sformatf("original val %0h, addr %0h, err_type %0s", + val, addr, ecc_err.name), UVM_HIGH) + return val; + endfunction + + virtual task trigger_checks(bit [1:0] val, + bit wait_done = 1, + otp_ecc_err_e ecc_err = OtpNoEccErr); + bit [TL_DW-1:0] backdoor_rd_val, addr; + + // If ECC and check error happens in the same consistency check, the scb cannot predict which + // error will happen first, so it cannot correctly predict the error status and alert + // triggered. + // So the sequence only allows one error at a time. + if (get_field_val(ral.check_trigger.consistency, val) && + `gmv(ral.check_timeout) > 0 && `gmv(ral.check_timeout) <= CHK_TIMEOUT_CYC) begin + ecc_err = OtpNoEccErr; + end + + // Backdoor write ECC errors + if (ecc_err != OtpNoEccErr) begin + int part_idx = $urandom_range(HwCfg0Idx, LifeCycleIdx); + + // Only HW cfgs check digest correctness + if (part_idx != LifeCycleIdx) begin + addr = $urandom_range(0, 1) ? PART_OTP_DIGEST_ADDRS[part_idx] << 2 : + (PART_OTP_DIGEST_ADDRS[part_idx] + 1) << 2; + end else begin + addr = $urandom_range(LifeCycleOffset, LifeCycleOffset + LifeCycleSize - 1); + addr = {addr[TL_DW-1:2], 2'b00}; + end + backdoor_rd_val = backdoor_inject_ecc_err(addr, ecc_err); + cfg.ecc_chk_err[part_idx] = ecc_err; + end + + csr_wr(ral.check_trigger, val); + if (wait_done && val) csr_spinwait(ral.status.check_pending, 0); + + if (ecc_err != OtpNoEccErr) begin + cfg.mem_bkdr_util_h.write32(addr, backdoor_rd_val); + cfg.ecc_chk_err = '{default: OtpNoEccErr}; + end + endtask + + // For a DAI interface operation to finish, either way until status dai_idle is set, or check + // err_code and see if fatal error happened. In any case, break out of this wait if there + // is a need to stop transaction generators, since a spinwait will otherwise just stop + // when it times-out. + virtual task wait_dai_op_done(); + if (cfg.stop_transaction_generators()) return; + fork begin + fork + begin + csr_spinwait(.ptr(ral.status.dai_idle), + .exp_data(1), + .timeout_ns(op_done_spinwait_timeout_ns), + .spinwait_delay_ns($urandom_range(0, 5))); + end + begin + forever begin + bit [TL_DW-1:0] err_val; + cfg.clk_rst_vif.wait_clks(1); + csr_rd(.ptr(ral.err_code[DaiIdx].err_code), .value(err_val), .backdoor(1)); + // Break if error will cause fatal alerts + if (err_val inside {OTP_TERMINAL_ERRS}) break; + end + end + begin + forever begin + cfg.clk_rst_vif.wait_clks(1); + if (cfg.stop_transaction_generators()) break; + end + end + join_any + wait_no_outstanding_access(); + disable fork; + end join + endtask + + virtual task rd_and_clear_intrs(); + bit [TL_DW-1:0] val; + if (cfg.otp_ctrl_vif.lc_prog_no_sta_check == 0) begin + csr_rd(ral.intr_state, val); + // In case lc_program request is issued after intr_state read + if (cfg.otp_ctrl_vif.lc_prog_no_sta_check == 0) csr_wr(ral.intr_state, val); + end + endtask + + // first two or three LSB bits of DAI address can be randomized based on if it is secret + virtual function bit [TL_AW-1:0] randomize_dai_addr(bit [TL_AW-1:0] dai_addr); + if (is_secret(dai_addr)) begin + bit [2:0] rand_addr = $urandom(); + randomize_dai_addr = {dai_addr[TL_DW-1:3], rand_addr}; + end else begin + bit [1:0] rand_addr = $urandom(); + randomize_dai_addr = {dai_addr[TL_DW-1:2], rand_addr}; + end + endfunction + + // The following interface requests are separated to blocking and non-blocking accesses. + // The non-blocking access is mainly used when lc_escalate_en is On, which acts like a reset and + // move all design state machines to ErrorSt. Thus pending request will never get a response + // until reset. + virtual task req_sram_key(int index, bit blocking = default_req_blocking); + // Return if the request is already high, this is mainly due to lc_escalate_en On. + if (cfg.m_sram_pull_agent_cfg[index].vif.req === 1'b1) return; + + if (blocking) begin + req_sram_key_sub(index); + end else begin + fork + begin + req_sram_key_sub(index); + end + join_none; + // Add #0 to ensure that this thread starts executing before any subsequent call + #0; + end + endtask + + virtual task req_sram_key_sub(int index); + push_pull_host_seq#(.DeviceDataWidth(SRAM_DATA_SIZE)) sram_pull_seq; + wait(cfg.under_reset == 0); + `uvm_create_on(sram_pull_seq, p_sequencer.sram_pull_sequencer_h[index]); + `DV_CHECK_RANDOMIZE_FATAL(sram_pull_seq) + `uvm_send(sram_pull_seq) + endtask + + virtual task req_all_sram_keys(bit blocking = default_req_blocking); + for (int i = 0; i < NumSramKeyReqSlots; i++) req_sram_key(i, blocking); + endtask + + virtual task req_otbn_key(bit blocking = default_req_blocking); + if (cfg.m_otbn_pull_agent_cfg.vif.req === 1'b1) return; + + if (blocking) begin + req_otbn_key_sub(); + end else begin + fork + begin + req_otbn_key_sub(); + end + join_none; + // Add #0 to ensure that this thread starts executing before any subsequent call + #0; + end + endtask + + virtual task req_otbn_key_sub(); + push_pull_host_seq#(.DeviceDataWidth(OTBN_DATA_SIZE)) otbn_pull_seq; + wait(cfg.under_reset == 0); + `uvm_create_on(otbn_pull_seq, p_sequencer.otbn_pull_sequencer_h); + `DV_CHECK_RANDOMIZE_FATAL(otbn_pull_seq) + `uvm_send(otbn_pull_seq) + endtask + + virtual task req_flash_addr_key(bit blocking = default_req_blocking); + if (cfg.m_flash_addr_pull_agent_cfg.vif.req === 1'b1) return; + + if (blocking) begin + req_flash_addr_key_sub(); + end else begin + fork + begin + req_flash_addr_key_sub(); + end + join_none; + // Add #0 to ensure that this thread starts executing before any subsequent call + #0; + end + endtask + + virtual task req_flash_addr_key_sub(); + push_pull_host_seq#(.DeviceDataWidth(FLASH_DATA_SIZE)) flash_addr_pull_seq; + wait(cfg.under_reset == 0); + `uvm_create_on(flash_addr_pull_seq, p_sequencer.flash_addr_pull_sequencer_h); + `DV_CHECK_RANDOMIZE_FATAL(flash_addr_pull_seq) + `uvm_send(flash_addr_pull_seq) + endtask + + virtual task req_flash_data_key(bit blocking = default_req_blocking); + if (cfg.m_flash_data_pull_agent_cfg.vif.req === 1'b1) return; + + if (blocking) begin + req_flash_data_key_sub(); + end else begin + fork + begin + req_flash_data_key_sub(); + end + join_none; + // Add #0 to ensure that this thread starts executing before any subsequent call + #0; + end + endtask + + virtual task req_flash_data_key_sub(); + push_pull_host_seq#(.DeviceDataWidth(FLASH_DATA_SIZE)) flash_data_pull_seq; + wait(cfg.under_reset == 0); + `uvm_create_on(flash_data_pull_seq, p_sequencer.flash_data_pull_sequencer_h); + `DV_CHECK_RANDOMIZE_FATAL(flash_data_pull_seq) + `uvm_send(flash_data_pull_seq) + endtask + + virtual task req_lc_transition(bit check_intr = 0, + bit blocking = default_req_blocking, + bit wr_blank_err = !write_unused_addr); + if (cfg.m_lc_prog_pull_agent_cfg.vif.req === 1'b1) return; + + if (blocking) begin + req_lc_transition_sub(check_intr, wr_blank_err); + end else begin + fork + begin + req_lc_transition_sub(check_intr, wr_blank_err); + end + join_none; + // Add #0 to ensure that this thread starts executing before any subsequent call + #0; + end + endtask + + virtual task req_lc_transition_sub(bit check_intr = 0, bit wr_blank_err = !write_unused_addr); + lc_ctrl_state_pkg::lc_cnt_e next_lc_cnt; + lc_ctrl_state_pkg::dec_lc_state_e next_lc_state, lc_state_dec; + bit [TL_DW-1:0] intr_val; + push_pull_host_seq#(.HostDataWidth(LC_PROG_DATA_SIZE), .DeviceDataWidth(1)) + lc_prog_pull_seq; + wait(cfg.under_reset == 0); + `uvm_create_on(lc_prog_pull_seq, p_sequencer.lc_prog_pull_sequencer_h); + + if (!wr_blank_err) begin + // Find valid next state and next cnt using lc_ctrl_dv_utils_pkg. + // If terminal state or max LcCnt reaches, will not program any new data. + if ((lc_state != LcStScrap) && (lc_cnt != LcCnt24)) begin + lc_state_dec = lc_ctrl_dv_utils_pkg::dec_lc_state(lc_state); + `DV_CHECK_STD_RANDOMIZE_WITH_FATAL(next_lc_state, + next_lc_state inside {VALID_NEXT_STATES[lc_state_dec]};) + `DV_CHECK_STD_RANDOMIZE_WITH_FATAL(next_lc_cnt, next_lc_cnt > lc_cnt;) + lc_state = lc_ctrl_dv_utils_pkg::encode_lc_state(next_lc_state); + lc_cnt = next_lc_cnt; + end + cfg.m_lc_prog_pull_agent_cfg.add_h_user_data({lc_cnt, lc_state}); + end + + `DV_CHECK_RANDOMIZE_FATAL(lc_prog_pull_seq) + `uvm_send(lc_prog_pull_seq) + + if (check_intr) rd_and_clear_intrs(); + endtask + + // This test access OTP_CTRL's test_access memory. The open-sourced code only test if the access + // is valid. Please override this task in proprietary OTP. + virtual task otp_test_access(); + if (`PRIM_DEFAULT_IMPL == prim_pkg::ImplGeneric) begin + repeat (10) begin + bit [TL_DW-1:0] data; + bit test_access_en; + bit [TL_AW-1:0] rand_addr = $urandom_range(0, NUM_PRIM_REG - 1) * 4; + bit [TL_AW-1:0] tlul_addr = + cfg.ral_models["otp_ctrl_prim_reg_block"].get_addr_from_offset(rand_addr); + if (cfg.stop_transaction_generators()) break; + rand_drive_dft_en(); + `DV_CHECK_STD_RANDOMIZE_FATAL(data) + test_access_en = cfg.otp_ctrl_vif.lc_dft_en_i == lc_ctrl_pkg::On; + tl_access(.addr(tlul_addr), .write(1), .data(data), .exp_err_rsp(~test_access_en), + .tl_sequencer_h(p_sequencer.tl_sequencer_hs["otp_ctrl_prim_reg_block"])); + tl_access(.addr(tlul_addr), .write(0), .data(data), .exp_err_rsp(~test_access_en), + .tl_sequencer_h(p_sequencer.tl_sequencer_hs["otp_ctrl_prim_reg_block"])); + end + end + endtask + + // Empty task, only drive it under `otp_ctrl_test_access_vseq` + virtual task rand_drive_dft_en(); + endtask +endclass : otp_ctrl_base_vseq diff --git a/src/fuse_ctrl/dv/env/seq_lib/otp_ctrl_dai_lock_vseq.sv b/src/fuse_ctrl/dv/env/seq_lib/otp_ctrl_dai_lock_vseq.sv new file mode 100755 index 000000000..f92ed3aa3 --- /dev/null +++ b/src/fuse_ctrl/dv/env/seq_lib/otp_ctrl_dai_lock_vseq.sv @@ -0,0 +1,83 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// DO NOT EDIT THIS FILE DIRECTLY. +// It has been generated with ./util/design/gen-otp-mmap.py + +// otp_ctrl_dai_lock_vseq is developed to read/write lock DAI interface by partitions, and request +// read/write access to check if correct status and error code is triggered + +// Partition's legal range covers offset to digest addresses, dai_rd/dai_wr function will +// randomize the address based on the granularity. +`define PART_ADDR_RANGE(i) \ + {[PartInfo[``i``].offset : (PartInfo[``i``].offset + PartInfo[``i``].size - 8)]} + +class otp_ctrl_dai_lock_vseq extends otp_ctrl_smoke_vseq; + `uvm_object_utils(otp_ctrl_dai_lock_vseq) + + `uvm_object_new + + // enable access_err for each cycle + constraint no_access_err_c {access_locked_parts == 1;} + + constraint num_trans_c { + num_trans inside {[1:10]}; + num_dai_op inside {[1:50]}; + } + + // the LC partition is always the last one + constraint partition_index_c {part_idx inside {[0:LifeCycleIdx]};} + + constraint dai_wr_legal_addr_c { + if (part_idx == VendorTestIdx) { + dai_addr inside `PART_ADDR_RANGE(VendorTestIdx); + } + if (part_idx == NonSecretFusesIdx) { + dai_addr inside `PART_ADDR_RANGE(NonSecretFusesIdx); + } + if (part_idx == Secret0Idx) { + dai_addr inside `PART_ADDR_RANGE(Secret0Idx); + } + if (part_idx == Secret1Idx) { + dai_addr inside `PART_ADDR_RANGE(Secret1Idx); + } + if (part_idx == LifeCycleIdx) { + if (write_unused_addr) { + dai_addr inside {[PartInfo[LifeCycleIdx].offset : {OTP_ADDR_WIDTH{1'b1}}]}; + } else { + dai_addr inside `PART_ADDR_RANGE(LifeCycleIdx); + } + } + solve part_idx before dai_addr; + } + + constraint dai_wr_digests_c { + {dai_addr[TL_AW-1:2], 2'b0} dist { + { + VendorTestDigestOffset, + NonSecretFusesDigestOffset, + Secret0DigestOffset, + Secret1DigestOffset + } :/ 1, + [VendorTestOffset : '1] :/ 9 + }; + } + + virtual task pre_start(); + super.pre_start(); + is_valid_dai_op = 0; + endtask + + virtual task dut_init(string reset_kind = "HARD"); + super.dut_init(reset_kind); + if ($urandom_range(0, 1)) begin + cfg.otp_ctrl_vif.drive_lc_creator_seed_sw_rw_en(get_rand_lc_tx_val(.t_weight(0))); + end + if ($urandom_range(0, 1)) begin + cfg.otp_ctrl_vif.drive_lc_owner_seed_sw_rw_en(get_rand_lc_tx_val(.t_weight(0))); + end + endtask + +endclass + +`undef PART_ADDR_RANGE diff --git a/src/fuse_ctrl/dv/env/seq_lib/otp_ctrl_smoke_vseq.sv b/src/fuse_ctrl/dv/env/seq_lib/otp_ctrl_smoke_vseq.sv new file mode 100755 index 000000000..0cbe093f8 --- /dev/null +++ b/src/fuse_ctrl/dv/env/seq_lib/otp_ctrl_smoke_vseq.sv @@ -0,0 +1,256 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// DO NOT EDIT THIS FILE DIRECTLY. +// It has been generated with ./util/design/gen-otp-mmap.py + +// smoke test vseq to walk through DAI states and request keys +`define PART_CONTENT_RANGE(i) \ + {[PartInfo[``i``].offset : (PartInfo[``i``].offset + PartInfo[``i``].size - DIGEST_SIZE - 1)]} + +class otp_ctrl_smoke_vseq extends otp_ctrl_base_vseq; + `uvm_object_utils(otp_ctrl_smoke_vseq) + + `uvm_object_new + + rand bit do_req_keys, do_lc_trans; + rand bit access_locked_parts; + rand bit rand_wr, rand_rd, rd_sw_tlul_rd; + rand bit [TL_DW-1:0] dai_addr; + rand bit [TL_DW-1:0] wdata0, wdata1; + rand int num_dai_op; + rand otp_ctrl_part_pkg::part_idx_e part_idx; + rand bit check_regwen_val, check_trigger_regwen_val; + rand bit [TL_DW-1:0] check_timeout_val; + rand bit [1:0] check_trigger_val; + rand otp_ecc_err_e ecc_otp_err, ecc_chk_err; + + constraint no_access_err_c {access_locked_parts == 0;} + + // LC partition does not allow DAI access (the LC partition is always the last one) + constraint partition_index_c {part_idx inside {[0:LifeCycleIdx-1]};} + + constraint dai_wr_legal_addr_c { + if (part_idx == VendorTestIdx) + dai_addr inside `PART_CONTENT_RANGE(VendorTestIdx); + if (part_idx == NonSecretFusesIdx) + dai_addr inside `PART_CONTENT_RANGE(NonSecretFusesIdx); + if (part_idx == Secret0Idx) + dai_addr inside `PART_CONTENT_RANGE(Secret0Idx); + if (part_idx == Secret1Idx) + dai_addr inside `PART_CONTENT_RANGE(Secret1Idx); + if (part_idx == LifeCycleIdx) + dai_addr inside `PART_CONTENT_RANGE(LifeCycleIdx); + solve part_idx before dai_addr; + } + + constraint dai_wr_blank_addr_c { + dai_addr % 4 == 0; + if (PartInfo[part_idx].secret) dai_addr % 8 == 0; + } + + constraint num_trans_c { + if (cfg.smoke_test) { + num_trans == 1; + num_dai_op inside {[1:2]}; + } else { + num_trans inside {[1:2]}; + num_dai_op inside {[1:50]}; + } + } + + constraint regwens_c { + check_regwen_val dist {0 :/ 1, 1 :/ 9}; + check_trigger_regwen_val dist {0 :/ 1, 1 :/ 9}; + } + + constraint check_timeout_val_c { + check_timeout_val inside {0, [100_000:'1]}; + } + + constraint ecc_otp_err_c {ecc_otp_err == OtpNoEccErr;} + + constraint ecc_chk_err_c {ecc_chk_err == OtpNoEccErr;} + + constraint apply_reset_during_pwr_init_cycles_c { + apply_reset_during_pwr_init_cycles dist { + [1:5] :/ 4, + [6:2000] :/ 4, + [2001:4000] :/ 2}; + } + + virtual task dut_init(string reset_kind = "HARD"); + if (do_apply_reset) begin + lc_prog_blocking = 1; + super.dut_init(reset_kind); + csr_wr(ral.intr_enable, en_intr); + end + endtask + + virtual task pre_start(); + super.pre_start(); + num_dai_op.rand_mode(0); + check_lc_err(); + endtask + + virtual task check_lc_err(); + fork + forever begin + wait(cfg.otp_ctrl_vif.lc_prog_err == 1); + lc_prog_blocking = 0; + wait(lc_prog_blocking == 1); + end + join_none; + endtask + + task body(); + for (int i = 1; i <= num_trans; i++) begin + bit [TL_DW-1:0] tlul_val; + if (cfg.stop_transaction_generators()) break; + `uvm_info(`gfn, $sformatf("starting seq %0d/%0d", i, num_trans), UVM_LOW) + + // to avoid access locked OTP partions, issue reset and clear the OTP memory to all 0. + if (access_locked_parts == 0) begin + do_otp_ctrl_init = 1; + if (i > 1 && do_dut_init) dut_init(); + // after otp-init done, check status + cfg.clk_rst_vif.wait_clks(1); + if (!cfg.otp_ctrl_vif.lc_esc_on) begin + csr_rd_check(.ptr(ral.status.dai_idle), .compare_value(1)); + end + end + do_otp_ctrl_init = 0; + + `DV_CHECK_RANDOMIZE_FATAL(this) + // set consistency and integrity checks + csr_wr(ral.check_regwen, check_regwen_val); + csr_wr(ral.check_trigger_regwen, check_trigger_regwen_val); + csr_wr(ral.check_timeout, check_timeout_val); + trigger_checks(.val(check_trigger_val), .wait_done(1), .ecc_err(ecc_chk_err)); + + if (!$urandom_range(0, 9) && access_locked_parts) write_sw_rd_locks(); + + // Backdoor write mubi to values that are not true or false. + force_mubi_part_access(); + + if (do_req_keys && !cfg.otp_ctrl_vif.alert_reqs) begin + req_otbn_key(); + req_flash_addr_key(); + req_flash_data_key(); + req_all_sram_keys(); + end + if (do_lc_trans && !cfg.otp_ctrl_vif.alert_reqs) begin + req_lc_transition(do_lc_trans, lc_prog_blocking); + if (cfg.otp_ctrl_vif.lc_prog_req == 0) begin + for (int k = 0; k <= LciIdx; k++) begin + csr_rd(.ptr(ral.err_code[k]), .value(tlul_val)); + end + end + end + + for (int i = 0; i < num_dai_op; i++) begin + bit [TL_DW-1:0] rdata0, rdata1, backdoor_rd_val; + if (cfg.stop_transaction_generators()) break; + + `DV_CHECK_RANDOMIZE_FATAL(this) + // recalculate part_idx in case some test turn off constraint dai_wr_legal_addr_c + part_idx = part_idx_e'(get_part_index(dai_addr)); + `uvm_info(`gfn, $sformatf("starting dai access seq %0d/%0d with addr %0h in partition %0d", + i, num_dai_op, dai_addr, part_idx), UVM_HIGH) + + // OTP write via DAI + if (rand_wr && !digest_calculated[part_idx]) begin + dai_wr(dai_addr, wdata0, wdata1); + if (cfg.otp_ctrl_vif.lc_prog_req == 0) begin + for (int k = 0; k <= LciIdx; k++) begin + csr_rd(.ptr(ral.err_code[k]), .value(tlul_val)); + end + end + end + + // Inject ECC error. + if (ecc_otp_err != OtpNoEccErr && dai_addr < LifeCycleOffset) begin + `uvm_info(`gfn, $sformatf("Injecting ecc error %0d at 0x%x", ecc_otp_err, dai_addr), + UVM_HIGH) + backdoor_rd_val = backdoor_inject_ecc_err(dai_addr, ecc_otp_err); + end + + if (rand_rd) begin + // OTP read via DAI, check data in scb + dai_rd(dai_addr, rdata0, rdata1); + end + + // if write sw partitions, check tlul window + if (is_sw_part(dai_addr) && rd_sw_tlul_rd) begin + uvm_reg_addr_t tlul_addr = cfg.ral.get_addr_from_offset(get_sw_window_offset(dai_addr)); + // tlul error rsp is checked in scoreboard + do_otp_rd = 1; + tl_access(.addr(tlul_addr), .write(0), .data(tlul_val), .blocking(1), .check_rsp(0)); + end + + // Backdoor restore injected ECC error, but should not affect fatal alerts. + if (ecc_otp_err != OtpNoEccErr && dai_addr < LifeCycleOffset) begin + `uvm_info(`gfn, $sformatf("Injecting ecc error %0d at 0x%x", ecc_otp_err, dai_addr), + UVM_HIGH) + cfg.mem_bkdr_util_h.write32({dai_addr[TL_DW-3:2], 2'b00}, backdoor_rd_val); + // Wait for two lock cycles to make sure the local escalation error propagates to other + // patitions and err_code reg. + cfg.clk_rst_vif.wait_clks(2); + end + + // Random lock sw partitions + if (!$urandom_range(0, 9) && access_locked_parts) write_sw_rd_locks(); + if (!$urandom_range(0, 9) && access_locked_parts) write_sw_digests(); + if ($urandom_range(0, 1)) csr_rd(.ptr(ral.direct_access_regwen), .value(tlul_val)); + if ($urandom_range(0, 1)) csr_rd(.ptr(ral.status), .value(tlul_val)); + if (cfg.otp_ctrl_vif.lc_prog_req == 0) begin + for (int k = 0; k <= LciIdx; k++) begin + csr_rd(.ptr(ral.err_code[k]), .value(tlul_val)); + end + end + end + + // Read/write test access memory + otp_test_access(); + + // lock digests + `uvm_info(`gfn, "Trigger HW digest calculation", UVM_HIGH) + cal_hw_digests(); + if ($urandom_range(0, 1)) csr_rd(.ptr(ral.status), .value(tlul_val)); + + if (cfg.otp_ctrl_vif.lc_prog_req == 0) begin + for (int k = 0; k <= LciIdx; k++) begin + csr_rd(.ptr(ral.err_code[k]), .value(tlul_val)); + end + end + + if ($urandom_range(0, 1)) rd_digests(); + if (do_dut_init) dut_init(); + + // read and check digest in scb + rd_digests(); + + // send request to the interfaces again after partitions are locked + if (do_lc_trans && !cfg.otp_ctrl_vif.alert_reqs) begin + req_lc_transition(do_lc_trans, lc_prog_blocking); + if (cfg.otp_ctrl_vif.lc_prog_req == 0) begin + for (int k = 0; k <= LciIdx; k++) begin + csr_rd(.ptr(ral.err_code[k]), .value(tlul_val)); + end + end + end + + if (do_req_keys && !cfg.otp_ctrl_vif.alert_reqs && !cfg.smoke_test) begin + req_otbn_key(); + req_flash_addr_key(); + req_flash_data_key(); + req_all_sram_keys(); + end + + end + + endtask : body + +endclass : otp_ctrl_smoke_vseq + +`undef PART_CONTENT_RANGE diff --git a/src/fuse_ctrl/rtl/axi_adapter_sram.sv b/src/fuse_ctrl/rtl/axi_adapter_sram.sv new file mode 100644 index 000000000..1a85b0a8a --- /dev/null +++ b/src/fuse_ctrl/rtl/axi_adapter_sram.sv @@ -0,0 +1,402 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +`include "caliptra_prim_assert.sv"; + +module axi_adapter_sram + import axi_pkg::*; + import caliptra_prim_mubi_pkg::mubi4_t; +#( + parameter int SramAw = 12, + parameter int SramDw = 32, // Must be multiple of the TL width + parameter int Outstanding = 1, // Only one request is accepted + parameter bit ByteAccess = 1, // 1: Enables sub-word write transactions. Note that this + // results in read-modify-write operations for integrity + // re-generation if EnableDataIntgPt is set to 1. + parameter bit ErrOnWrite = 0, // 1: Writelogic win_dv, + logic [AW-1:0] win_addr, + logic win_write, + //logic [UW-1:0] win_user, + logic [IW-1:0] win_id, + logic [DW-1:0] win_wdata, + logic [BC-1:0] win_wstrb, + logic [DW-1:0] win_rdata, + logic win_last, + logic win_hld, + logic win_err,s not allowed, automatically error + parameter bit ErrOnRead = 0, // 1: Reads not allowed, automatically error + //parameter bit CmdIntgCheck = 0, // 1: Enable command integrity check + //parameter bit EnableRspIntgGen = 0, // 1: Generate response integrity + //parameter bit EnableDataIntgGen = 0, // 1: Generate response data integrity + //parameter bit EnableDataIntgPt = 0, // 1: Passthrough command/response data integrity + //parameter bit SecFifoPtr = 0, // 1: Duplicated fifo pointers + localparam int WidthMult = SramDw / axi_pkg::AXI_DW, + //localparam int IntgWidth = tlul_pkg::DataIntgWidth * WidthMult, + //localparam int DataOutW = EnableDataIntgPt ? SramDw + IntgWidth : SramDw + localparam int DataOutW = SramDw; +) ( + input clk_i, + input rst_ni, + + // AXI interface + input logic axi_dv, + input logic [axi_pkg::AXI_AW-1:0] axi_addr, + input logic axi_write, + input logic [axi_pkg::AXI_IW-1:0] axi_id, + input logic [axi_pkg::AXI_DW-1:0] axi_wdata, + input logic [axi_pkg::AXI_BC-1:0] axi_wstrb, + output logic [axi_pkg::AXI_DW-1:0] axi_rdata, + input logic axi_last, + output logic axi_hld, + output logic axi_err, + + // Control interface + input mubi4_t en_ifetch_i, + + // SRAM interface + output logic req_o, + output mubi4_t req_type_o, + input gnt_i, + output logic we_o, + output logic [SramAw-1:0] addr_o, + output logic [DataOutW-1:0] wdata_o, + output logic [DataOutW-1:0] wmask_o, + //output logic intg_error_o, + input [DataOutW-1:0] rdata_i, + input rvalid_i, + input [1:0] rerror_i, // 2 bit error [1]: Uncorrectable, [0]: Correctable + output logic rmw_in_progress_o +); + + localparam int SramByte = SramDw/8; + localparam int DataBitWidth = caliptra_prim_util_pkg::vbits(SramByte); + localparam int WoffsetWidth = (SramByte == axi_pkg::AXI_BC) ? 1 : + DataBitWidth - caliptra_prim_util_pkg::vbits(axi_pkg::AXI_BC); + + logic error_det; // Internal protocol error checker + logic error_internal; // Internal protocol error checker + logic wr_attr_error; + //logic instr_error; //TODO + logic wr_vld_error; + logic rd_vld_error; + logic rsp_fifo_error; + //logic intg_error; + logic axi_error; + + // wr_attr_error: Check if the request size, strb are permitted. + // Basic check of size, mask, addr align is done in tlul_err module. + // Here it checks any partial write if ByteAccess isn't allowed. + assign wr_attr_error = (axi_write) ? ((ByteAccess == 0) ? (axi_wstrb != '1) : 1'b0) : 1'b0; + + // TODO: how does this apply to AXI -- instruction type? + /* + // An instruction type transaction is only valid if en_ifetch is enabled + // If the instruction type is completely invalid, also considered an instruction error + assign instr_error = prim_mubi_pkg::mubi4_test_invalid(tl_i.a_user.instr_type) | + (prim_mubi_pkg::mubi4_test_true_strict(tl_i.a_user.instr_type) & + prim_mubi_pkg::mubi4_test_false_loose(en_ifetch_i)); + */ + + if (ErrOnWrite == 1) begin : gen_no_writes + assign wr_vld_error = axi_write != 1'b0; + end else begin : gen_writes_allowed + assign wr_vld_error = 1'b0; + end + + if (ErrOnRead == 1) begin: gen_no_reads + assign rd_vld_error = core_write == 1'b0; + end else begin : gen_reads_allowed + assign rd_vld_error = 1'b0; + end + + //TODO: equiv of tlul_protocol check + // COpyinge existing tlul code for now + // tlul protocol check + tlul_err u_err ( + .clk_i, + .rst_ni, + .tl_i(tl_i), + .err_o (tlul_error) + ); + + // error return is transactional and thus does not used the "latched" intg_err signal + assign error_det = wr_attr_error | wr_vld_error | rd_vld_error | //instr_error | + tlul_error;// | intg_error; + + typedef struct packed { + logic [axi_pkg::AXI_BC-1:0] wstrb ; // Byte mask within the AXI word + logic [WoffsetWidth-1:0] woffset ; // Offset of the TL-UL word within the SRAM word + } sram_req_t ; + + typedef struct packed { + logic write; + logic [axi_pkg::AXI_BC-1:0] wstrb; + logic [axi_pkg::AXI_IW-1:0] id; + logic error; + } req_t; + + typedef struct packed { + logic [axi_pkg::AXI_DW-1:0] data; + logic error; + } rsp_t; + + localparam int SramReqFifoWidth = $bits(sram_req_t) ; + localparam int ReqFifoWidth = $bits(req_t) ; + localparam int RspFifoWidth = $bits(rsp_t) ; + + // FIFO signal in case OutStand is greater than 1 + // If request is latched, {write, source} is pushed to req fifo. + // Req fifo is popped when axi_dv is asserted and axi_hld is 0. + // axi_vld is asserted if it is write request or rsp fifo not empty if read. + logic reqfifo_wvalid, reqfifo_wready; + logic reqfifo_rvalid, reqfifo_rready; + req_t reqfifo_wdata, reqfifo_rdata; + + logic sramreqfifo_wvalid, sramreqfifo_wready; + logic sramreqfifo_rready; + sram_req_t sramreqfifo_wdata, sramreqfifo_rdata; + + logic rspfifo_wvalid, rspfifo_wready; + logic rspfifo_rvalid, rspfifo_rready; + rsp_t rspfifo_wdata, rspfifo_rdata; + + logic a_ack, d_ack, sram_ack; + assign a_ack = axi_dv & ~axi_hld; + assign d_ack = axi_dv & ~ axi_hld; + assign sram_ack = req_o & gnt_i; + + // Valid handling + logic d_valid, d_error; + always_comb begin + d_valid = 1'b0; + if (reqfifo_rvalid) begin + if (reqfifo_rdata.error) begin + // Return error response. Assume no request went out to SRAM + d_valid = 1'b1; + end else if (!reqfifo_rdata.write) begin // Read + d_valid = rspfifo_rvalid; + end else begin + // Write without error + d_valid = 1'b1; + end + end else begin + d_valid = 1'b0; + end + end + + always_comb begin + d_error = 1'b0; + if (reqfifo_rvalid) begin + if (!reqfifo_rdata.write) begin // Read + d_error = rspfifo_rdata.error | req_fifo_rdata.error; + end else begin + d_error = rspfifo_rdata.error; + end + end else begin + d_error = 1'b0; + end + end + + logic vld_rd_rsp; + assign vld_rd_rsp = d_valid & reqfifo_rvalid & rspfifo_rvalid & (~reqfifo_rdata.write); + assign axi_rdata = (vld_rd_rsp & ~d_error) ? rspfifo_rdata.rdata : '0; + + // Output to SRAM: + // Generate request only when no internal error occurs. If error occurs, the request should be + // dropped and returned error response to the host. So, error to be pushed to reqfifo. + // In this case, it is assumed the request is granted (may cause ordering issue later?) + + assign req_o = axi_dv & ~axi_hld & reqfifo_wready & ~error_internal; + //TODO: request type. + //assign req_type_o = + assign we_o = axi_dv & axi_write; + assign addr_o = axi_vld ? axi_addr[DataBitWidtdh+:SramAw] : '0; + + // Support SRAMS wider than AXI word width by mapping the parts of the + // AXI address which are more fine-grained than theSRAM width to the SRAM + // write mask. + logic [WoffsetWidth-1:0] woodset; + if (axi_pkg::AXI_DW != SramDw) begin: gen_wordwidthadapt + assign woffset = axi_addr[DataBitWidth-1:caliptra-prim_util_pkg::vbits(axi_pkg::AXI_DBW)]; + end else begin: gen_no_wordwidthadapt + assign woffset = '0; + end + + localparam DataWidth = axi_pkg:: AXI_DW; + + //wmask/wdata + always_comb begin + wmask_o = '0; + wdata_o = '0; + + if (axi_dv) begin + for (int -i = 0; i < axi_pkg::AXI_DW/8; i++) begin + wmask_o[woffset][8*i +: 8] = {8{axi.wstrb[i]}}; + wdata_o[woffset][8*i +: 8] = (axi_wstrb[i] && we_o) ? axi_wdata[8*i +: 8] : '0; + end + end + end + + assign reqfifo_wvalid = a_ack ; // Push to FIFO only when granted + assign reqfifo_wdata = '{ + write: axi_write, + wstrb: axi_wstrb, + id: axi_id, + error: axi_error + }; // Store the request only. Doesn't have to store data + assign reqfifo_rready = d_ack ; + + // push together with ReqFIFO, pop upon returning read + assign sramreqfifo_wdata = '{ + wstrb : axi_wstrb, + woffset : woffset + }; + assign sramreqfifo_wvalid = sram_ack & ~we_o; + assign sramreqfifo_rready = rspfifo_wvalid; + + assign rspfifo_wvalid = rvalid_i & reqfifo_rvalid; + + // Make sure only requested bytes are forwarded + logic [WidthMult-1:0][DataWidth-1:0] rdata_reshaped; + logic [DataWidth-1:0] rdata_axiword; + + // This just changes the array format so that the correct word can be selected by indexing. + assign rdata_reshaped = rdata_i; + logic [DataWidth-1:0] rmask; + always_comb begin + rmask = '0; + for (int i = 0 ; i < axi_pkg::AXI_DW/8 ; i++) begin + rmask[8*i +: 8] = {8{sramreqfifo_rdata.mask[i]}}; + end + end + // Select correct word and mask it. + assign rdata_axiword = rdata_reshaped[sramreqfifo_rdata.woffset] & rmask; + + assign rspfifo_wdata = '{ + data : rdata_axiword[top_pkg::TL_DW-1:0], + error : rerror_i[1] // Only care for Uncorrectable error + }; + assign rspfifo_rready = (reqfifo_rdata.op == OpRead & ~reqfifo_rdata.error) + ? reqfifo_rready : 1'b0 ; + + // This module only cares about uncorrectable errors. + logic unused_rerror; + assign unused_rerror = rerror_i[0]; + + // FIFO instance: REQ, RSP + + // ReqFIFO is to store the Access type to match to the Response data. + // For instance, SRAM accepts the write request but doesn't return the + // acknowledge. In this case, it may be hard to determine when the D + // response for the write data should send out if reads/writes are + // interleaved. So, to make it in-order (even TL-UL allows out-of-order + // responses), storing the request is necessary. And if the read entry + // is write op, it is safe to return the response right away. If it is + // read reqeust, then D response is waiting until read data arrives. + prim_fifo_sync #( + .Width (ReqFifoWidth), + .Pass (1'b0), + .Depth (Outstanding) + ) u_reqfifo ( + .clk_i, + .rst_ni, + .clr_i (1'b0), + .wvalid_i(reqfifo_wvalid), + .wready_o(reqfifo_wready), + .wdata_i (reqfifo_wdata), + .rvalid_o(reqfifo_rvalid), + .rready_i(reqfifo_rready), + .rdata_o (reqfifo_rdata), + .full_o (), + .depth_o (), + .err_o () + ); + + // sramreqfifo: + // While the ReqFIFO holds the request until it is sent back via TL-UL, the + // sramreqfifo only needs to hold the mask and word offset until the read + // data returns from memory. + caliptra_prim_fifo_sync #( + .Width (SramReqFifoWidth), + .Pass (1'b0), + .Depth (Outstanding) + ) u_sramreqfifo ( + .clk_i, + .rst_ni, + .clr_i (1'b0), + .wvalid_i(sramreqfifo_wvalid), + .wready_o(sramreqfifo_wready), + .wdata_i (sramreqfifo_wdata), + .rvalid_o(), + .rready_i(sramreqfifo_rready), + .rdata_o (sramreqfifo_rdata), + .full_o (), + .depth_o (), + .err_o () + ); + + // Rationale having #Outstanding depth in response FIFO. + // In normal case, if the host or the crossbar accepts the response data, + // response FIFO isn't needed. But if in any case it has a chance to be + // back pressured, the response FIFO should store the returned data not to + // lose the data from the SRAM interface. Remember, SRAM interface doesn't + // have back-pressure signal such as read_ready. + caliptra_prim_fifo_sync #( + .Width (RspFifoWidth), + .Pass (1'b1), + .Depth (Outstanding), + .Secure (SecFifoPtr) + ) u_rspfifo ( + .clk_i, + .rst_ni, + .clr_i (1'b0), + .wvalid_i(rspfifo_wvalid), + .wready_o(rspfifo_wready), + .wdata_i (rspfifo_wdata), + .rvalid_o(rspfifo_rvalid), + .rready_i(rspfifo_rready), + .rdata_o (rspfifo_rdata), + .full_o (), + .depth_o (), + .err_o (rsp_fifo_error) + ); + + // below assertion fails when SRAM rvalid is asserted even though ReqFifo is empty + `ASSERT(rvalidHighReqFifoEmpty, rvalid_i |-> reqfifo_rvalid) + + // below assertion fails when outstanding value is too small (SRAM rvalid is asserted + // even though the RspFifo is full) + `ASSERT(rvalidHighWhenRspFifoFull, rvalid_i |-> rspfifo_wready) + + // If both ErrOnWrite and ErrOnRead are set, this block is useless + `ASSERT_INIT(adapterNoReadOrWrite, (ErrOnWrite & ErrOnRead) == 0) + + `ASSERT_INIT(SramDwHasByteGranularity_A, SramDw % 8 == 0) + `ASSERT_INIT(SramDwIsMultipleOfTlulWidth_A, SramDw % top_pkg::TL_DW == 0) + + // These parameter options cannot both be true at the same time + `ASSERT_INIT(DataIntgOptions_A, ~(EnableDataIntgGen & EnableDataIntgPt)) + + // make sure outputs are defined + `ASSERT_KNOWN(TlOutKnown_A, tl_o.d_valid) + `ASSERT_KNOWN_IF(TlOutPayloadKnown_A, tl_o, tl_o.d_valid) + `ASSERT_KNOWN(ReqOutKnown_A, req_o ) + `ASSERT_KNOWN(WeOutKnown_A, we_o ) + `ASSERT_KNOWN(AddrOutKnown_A, addr_o ) + `ASSERT_KNOWN(WdataOutKnown_A, wdata_o) + `ASSERT_KNOWN(WmaskOutKnown_A, wmask_o) + + endmodule + diff --git a/src/fuse_ctrl/rtl/axi_lc_gate.sv b/src/fuse_ctrl/rtl/axi_lc_gate.sv new file mode 100644 index 000000000..2a8200b92 --- /dev/null +++ b/src/fuse_ctrl/rtl/axi_lc_gate.sv @@ -0,0 +1,270 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +module axi_lc_gate + import axi_pkg::*; + import lc_ctrl_pkg::*; +#( + // Number of LC gating muxes in each direction. + // It is recommended to set this parameter to 2, which results + // in a total of 4 gating muxes. + parameter int NumGatesPerDirection = 2 +) ( + input clk_i, + input rst_ni, + + // AXI interface between host and device + input logic prim_dv, + input logic [AW-1:0] prim_addr, + input logic prim_write, + input logic [IW-1:0] prim_id, + input logic [DW-1:0] prim_wdata, + input logic [BC-1:0] prim_wstrb, + output logic [DW-1:0] prim_rdata, + input logic prim_last, + output logic prim_hld, + output logic prim_err, + + output logic prim_dv_gated, + output logic [Aw-1:0] prim_addr_gated, + output logic prim_write_gated, + output logic [IW-1:0] prim_id_gated, + output logic [DW-1:0] prim_wdata_gated, + output logic [BC-1:0] prim_wstrb_gated, + input logic [DW-1:0] prim_rdata_gated, + output logic prim_last_gated, + input logic prim_hld_gated, + input logic prim_err_gated, + + // Flush control signaling + input flush_req_i, + output logic flush_ack_o, + + // Indicates whether there are pending responses + output logic resp_pending_o, + + // LC onctrol signal + input lc_tx_t lc_en_i, + output logic err_o +); + + ////////////////// + // Access Gates // + ////////////////// + + lc_tx_t err_en; + lc_tx_t [NumGatesPerDirection-1:0] err_en_buf; + + caliptra_prim_lc_sync #( + .NumCopies(NumGatesPerDirection), + .AsyncOn(0) + ) u_err_en_sync ( + .clk_i, + .rst_ni, + .lc_en_i(err_en), + .lc_en_o(err_en_buf) + ); + + logic prim_dv_int [NumGatesPerDirection+1]; + logic [AW-1:0] prim_addr_int [NumGatesPerDirection+1]; + logic [IW-1:0] prim_id_int [NumGatesPerDirection+1]; + logic prim_write_int [NumGatesPerDirection+1]; + logic [DW-1:0] prim_wdata_int [NumGatesPerDirection+1]; + logic [BC-1:0] prim_wstrb_int [NumGatesPerDirection+1]; + logic [DW-1:0] prim_rdata_int [NumGatesPerDirection+1]; + logic prim_last_int [NumGatesPerDirection+1]; + logic prim_err_int [NumGatesPerDirection+1]; + logic prim_hld_int [NumGatesPerDirection+1]; + + for (genvar k = 0; k < NumGatesPerDirection; k++) begin + caliptra_prim_blanker #( + .Width($bits()) + ) u_prim_blanker ( + .in_i (), + .en_i (), + .out_o () + ); + end + + /////////////////////////// + // Host Side Interposing // + /////////////////////////// + + // Encoding generated with: + // $ ./util/design/sparse-fsm-encode.py -d 5 -m 4 -n 8 \ + // -s 3379253306 --language=sv + // + // Hamming distance histogram: + // + // 0: -- + // 1: -- + // 2: -- + // 3: -- + // 4: -- + // 5: |||||||||||||||||||| (66.67%) + // 6: |||||||||| (33.33%) + // 7: -- + // 8: -- + // + // Minimum Hamming distance: 5 + // Maximum Hamming distance: 6 + // Minimum Hamming weight: 3 + // Maximum Hamming weight: 5 + // + // Encoding generated with: + // $ ./util/design/sparse-fsm-encode.py -d 5 -m 5 -n 9 \ + // -s 686407169 --language=sv + // + // Hamming distance histogram: + // + // 0: -- + // 1: -- + // 2: -- + // 3: -- + // 4: -- + // 5: |||||||||||||||||||| (60.00%) + // 6: ||||||||||||| (40.00%) + // 7: -- + // 8: -- + // 9: -- + // + // Minimum Hamming distance: 5 + // Maximum Hamming distance: 6 + // Minimum Hamming weight: 3 + // Maximum Hamming weight: 6 + // + localparam int StateWidth = 9; + typedef enum logic [StateWidth-1:0] { + StActive = 9'b100100001, + StOutstanding = 9'b011100111, + StFlush = 9'b001001100, + StError = 9'b010111010, + StErrorOutstanding = 9'b100010110 + } state_e; + + state_e state_d, state_q; + `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, StError) + + logic [1:0] outstanding_txn; + logic a_ack; + logic d_ack; + assign a_ack = tl_h2d_i.a_valid & tl_d2h_o.a_ready; + assign d_ack = tl_h2d_i.d_ready & tl_d2h_o.d_valid; + + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + outstanding_txn <= '0; + end else if (a_ack && !d_ack) begin + outstanding_txn <= outstanding_txn + 1'b1; + end else if (d_ack && !a_ack) begin + outstanding_txn <= outstanding_txn - 1'b1; + end + end + + logic block_cmd; + always_comb begin + block_cmd = '0; + state_d = state_q; + err_en = Off; + err_o = '0; + flush_ack_o = '0; + resp_pending_o = 1'b0; + + unique case (state_q) + StActive: begin + if (lc_tx_test_false_loose(lc_en_i) || flush_req_i) begin + state_d = StOutstanding; + end + if (outstanding_txn != '0) begin + resp_pending_o = 1'b1; + end + end + + StOutstanding: begin + block_cmd = 1'b1; + if (outstanding_txn == '0) begin + state_d = lc_tx_test_false_loose(lc_en_i) ? StError : StFlush; + end else begin + resp_pending_o = 1'b1; + end + end + + StFlush: begin + block_cmd = 1'b1; + flush_ack_o = 1'b1; + if (lc_tx_test_false_loose(lc_en_i)) begin + state_d = StError; + end else if (!flush_req_i) begin + state_d = StActive; + end + end + + StError: begin + err_en = On; + if (lc_tx_test_true_strict(lc_en_i)) begin + state_d = StErrorOutstanding; + end + end + + StErrorOutstanding: begin + err_en = On; + block_cmd = 1'b1; + if (outstanding_txn == '0) begin + state_d = StActive; + end + end + + default: begin + err_o = 1'b1; + err_en = On; + end + + endcase // unique case (state_q) + end + + + // At the host side, we interpose the ready / valid signals so that we can return a bus error + // in case the lc signal is not set to ON. Note that this logic does not have to be duplicated + // since erroring back is considered a convenience feature so that the bus does not lock up. + tl_h2d_t tl_h2d_error; + tl_d2h_t tl_d2h_error; + always_comb begin + tl_h2d_int[0] = tl_h2d_i; + tl_d2h_o = tl_d2h_int[0]; + tl_h2d_error = '0; + + if (lc_tx_test_true_loose(err_en)) begin + tl_h2d_error = tl_h2d_i; + tl_d2h_o = tl_d2h_error; + end + + if (block_cmd) begin + tl_d2h_o.a_ready = 1'b0; + tl_h2d_int[0].a_valid = 1'b0; + tl_h2d_error.a_valid = 1'b0; + end + end + + tlul_err_resp u_tlul_err_resp ( + .clk_i, + .rst_ni, + .tl_h_i(tl_h2d_error), + .tl_h_o(tl_d2h_error) + ); + + // Add assertion + `ASSERT(OutStandingOvfl_A, &outstanding_txn |-> ~a_ack) + +endmodule : axi_lc_gate \ No newline at end of file diff --git a/src/fuse_ctrl/rtl/axi_sram_byte.sv b/src/fuse_ctrl/rtl/axi_sram_byte.sv new file mode 100644 index 000000000..908c69c46 --- /dev/null +++ b/src/fuse_ctrl/rtl/axi_sram_byte.sv @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +module axi_sram_byte \ No newline at end of file diff --git a/src/fuse_ctrl/rtl/caliptra_otp_ctrl_core_reg_top.sv b/src/fuse_ctrl/rtl/caliptra_otp_ctrl_core_reg_top.sv new file mode 100644 index 000000000..e5e40a29f --- /dev/null +++ b/src/fuse_ctrl/rtl/caliptra_otp_ctrl_core_reg_top.sv @@ -0,0 +1,1997 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Register Top module auto-generated by `reggen` + +`include "prim_assert.sv" + +module caliptra_otp_ctrl_core_reg_top ( + input clk_i, + input rst_ni, + /* + input tlul_pkg::tl_h2d_t tl_i, + output tlul_pkg::tl_d2h_t tl_o, + */ + input logic core_dv, + input logic [AW-1:0] core_addr, + input logic core_write, + //input logic [UW-1:0] core_user, + input logic [IW-1:0] core_id, + input logic [DW-1:0] core_wdata, + input logic [BC-1:0] core_wstrb, + output logic [DW-1:0] core_rdata, + input logic core_last, + output logic core_hld, + output logic core_err, + + // Output port for window + /* + output tlul_pkg::tl_h2d_t tl_win_o, + input tlul_pkg::tl_d2h_t tl_win_i, + */ + input logic win_dv, + input logic [AW-1:0] win_addr, + input logic win_write, + //input logic [UW-1:0] win_user, + input logic [IW-1:0] win_id, + input logic [DW-1:0] win_wdata, + input logic [BC-1:0] win_wstrb, + output logic [DW-1:0] win_rdata, + input logic win_last, + output logic win_hld, + output logic win_err, + + + // To HW + output caliptra_otp_ctrl_reg_pkg::caliptra_otp_ctrl_core_reg2hw_t reg2hw, // Write + input caliptra_otp_ctrl_reg_pkg::caliptra_otp_ctrl_core_hw2reg_t hw2reg, // Read + + // Integrity check errors + output logic intg_err_o +); + + import caliptra_otp_ctrl_reg_pkg::* ; + + localparam int AW = 13; + localparam int DW = 32; + localparam int DBW = DW/8; // Byte Width + + // register signals + logic reg_we; + logic reg_re; + logic [AW-1:0] reg_addr; + logic [DW-1:0] reg_wdata; + logic [DBW-1:0] reg_be; + logic [DW-1:0] reg_rdata; + logic reg_error; + + logic addrmiss, wr_err; + + logic [DW-1:0] reg_rdata_next; + logic reg_busy; + + /* + tlul_pkg::tl_h2d_t tl_reg_h2d; + tlul_pkg::tl_d2h_t tl_reg_d2h; + */ + + logic axi_dv, + logic [AW-1:0] axi_addr, + logic axi_write, + //logic [UW-1:0] axi_user, + logic [IW-1:0] axi_id, + logic [DW-1:0] axi_wdata, + logic [BC-1:0] axi_wstrb, + logic [DW-1:0] axi_rdata, + logic axi_last, + logic axi_hld, + logic axi_err, + + + // incoming payload check + logic intg_err; + tlul_cmd_intg_chk u_chk ( + .tl_i(tl_i), + .err_o(intg_err) + ); + + // also check for spurious write enables + logic reg_we_err; + logic [37:0] reg_we_check; + prim_reg_we_check #( + .OneHotWidth(38) + ) u_prim_reg_we_check ( + .clk_i(clk_i), + .rst_ni(rst_ni), + .oh_i (reg_we_check), + .en_i (reg_we && !addrmiss), + .err_o (reg_we_err) + ); + + logic err_q; + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + err_q <= '0; + end else if (intg_err || reg_we_err) begin + err_q <= 1'b1; + end + end + + // integrity error output is permanent and should be used for alert generation + // register errors are transactional + assign intg_err_o = err_q | intg_err | reg_we_err; + + // outgoing integrity generation + tlul_pkg::tl_d2h_t tl_o_pre; + tlul_rsp_intg_gen #( + .EnableRspIntgGen(1), + .EnableDataIntgGen(1) + ) u_rsp_intg_gen ( + .tl_i(tl_o_pre), + .tl_o(tl_o) + ); + + tlul_pkg::tl_h2d_t tl_socket_h2d [2]; + tlul_pkg::tl_d2h_t tl_socket_d2h [2]; + + logic [0:0] reg_steer; + + // socket_1n connection + assign tl_reg_h2d = tl_socket_h2d[1]; + assign tl_socket_d2h[1] = tl_reg_d2h; + + assign tl_win_o = tl_socket_h2d[0]; + assign tl_socket_d2h[0] = tl_win_i; + + // Create Socket_1n + tlul_socket_1n #( + .N (2), + .HReqPass (1'b1), + .HRspPass (1'b1), + .DReqPass ({2{1'b1}}), + .DRspPass ({2{1'b1}}), + .HReqDepth (4'h0), + .HRspDepth (4'h0), + .DReqDepth ({2{4'h0}}), + .DRspDepth ({2{4'h0}}), + .ExplicitErrs (1'b0) + ) u_socket ( + .clk_i (clk_i), + .rst_ni (rst_ni), + .tl_h_i (tl_i), + .tl_h_o (tl_o_pre), + .tl_d_o (tl_socket_h2d), + .tl_d_i (tl_socket_d2h), + .dev_select_i (reg_steer) + ); + + // Create steering logic + always_comb begin + reg_steer = + tl_i.a_address[AW-1:0] inside {[4096:8191]} ? 1'd0 : + // Default set to register + 1'd1; + + // Override this in case of an integrity error + if (intg_err) begin + reg_steer = 1'd1; + end + end + + tlul_adapter_reg #( + .RegAw(AW), + .RegDw(DW), + .EnableDataIntgGen(0) + ) u_reg_if ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + .tl_i (tl_reg_h2d), + .tl_o (tl_reg_d2h), + + .en_ifetch_i(prim_mubi_pkg::MuBi4False), + .intg_error_o(), + + .we_o (reg_we), + .re_o (reg_re), + .addr_o (reg_addr), + .wdata_o (reg_wdata), + .be_o (reg_be), + .busy_i (reg_busy), + .rdata_i (reg_rdata), + .error_i (reg_error) + ); + + // cdc oversampling signals + + assign reg_rdata = reg_rdata_next ; + assign reg_error = addrmiss | wr_err | intg_err; + + // Define SW related signals + // Format: __{wd|we|qs} + // or _{wd|we|qs} if field == 1 or 0 + logic intr_state_we; + logic intr_state_otp_operation_done_qs; + logic intr_state_otp_operation_done_wd; + logic intr_state_otp_error_qs; + logic intr_state_otp_error_wd; + logic intr_enable_we; + logic intr_enable_otp_operation_done_qs; + logic intr_enable_otp_operation_done_wd; + logic intr_enable_otp_error_qs; + logic intr_enable_otp_error_wd; + logic intr_test_we; + logic intr_test_otp_operation_done_wd; + logic intr_test_otp_error_wd; + logic alert_test_we; + logic alert_test_fatal_macro_error_wd; + logic alert_test_fatal_check_error_wd; + logic alert_test_fatal_bus_integ_error_wd; + logic alert_test_fatal_prim_otp_alert_wd; + logic alert_test_recov_prim_otp_alert_wd; + logic status_re; + logic status_vendor_test_error_qs; + logic status_non_secret_fuses_error_qs; + logic status_secret0_error_qs; + logic status_secret1_error_qs; + logic status_secret2_error_qs; + logic status_life_cycle_error_qs; + logic status_dai_error_qs; + logic status_lci_error_qs; + logic status_timeout_error_qs; + logic status_lfsr_fsm_error_qs; + logic status_scrambling_fsm_error_qs; + logic status_key_deriv_fsm_error_qs; + logic status_bus_integ_error_qs; + logic status_dai_idle_qs; + logic status_check_pending_qs; + logic err_code_0_re; + logic [2:0] err_code_0_qs; + logic err_code_1_re; + logic [2:0] err_code_1_qs; + logic err_code_2_re; + logic [2:0] err_code_2_qs; + logic err_code_3_re; + logic [2:0] err_code_3_qs; + logic err_code_4_re; + logic [2:0] err_code_4_qs; + logic err_code_5_re; + logic [2:0] err_code_5_qs; + logic err_code_6_re; + logic [2:0] err_code_6_qs; + logic err_code_7_re; + logic [2:0] err_code_7_qs; + logic direct_access_regwen_re; + logic direct_access_regwen_we; + logic direct_access_regwen_qs; + logic direct_access_regwen_wd; + logic direct_access_cmd_we; + logic direct_access_cmd_rd_wd; + logic direct_access_cmd_wr_wd; + logic direct_access_cmd_digest_wd; + logic direct_access_address_we; + logic [11:0] direct_access_address_qs; + logic [11:0] direct_access_address_wd; + logic direct_access_wdata_0_we; + logic [31:0] direct_access_wdata_0_qs; + logic [31:0] direct_access_wdata_0_wd; + logic direct_access_wdata_1_we; + logic [31:0] direct_access_wdata_1_qs; + logic [31:0] direct_access_wdata_1_wd; + logic direct_access_rdata_0_re; + logic [31:0] direct_access_rdata_0_qs; + logic direct_access_rdata_1_re; + logic [31:0] direct_access_rdata_1_qs; + logic check_trigger_regwen_we; + logic check_trigger_regwen_qs; + logic check_trigger_regwen_wd; + logic check_trigger_we; + logic check_trigger_integrity_wd; + logic check_trigger_consistency_wd; + logic check_regwen_we; + logic check_regwen_qs; + logic check_regwen_wd; + logic check_timeout_we; + logic [31:0] check_timeout_qs; + logic [31:0] check_timeout_wd; + logic integrity_check_period_we; + logic [31:0] integrity_check_period_qs; + logic [31:0] integrity_check_period_wd; + logic consistency_check_period_we; + logic [31:0] consistency_check_period_qs; + logic [31:0] consistency_check_period_wd; + logic vendor_test_read_lock_we; + logic vendor_test_read_lock_qs; + logic vendor_test_read_lock_wd; + logic non_secret_fuses_read_lock_we; + logic non_secret_fuses_read_lock_qs; + logic non_secret_fuses_read_lock_wd; + logic vendor_test_digest_0_re; + logic [31:0] vendor_test_digest_0_qs; + logic vendor_test_digest_1_re; + logic [31:0] vendor_test_digest_1_qs; + logic non_secret_fuses_digest_0_re; + logic [31:0] non_secret_fuses_digest_0_qs; + logic non_secret_fuses_digest_1_re; + logic [31:0] non_secret_fuses_digest_1_qs; + logic secret0_digest_0_re; + logic [31:0] secret0_digest_0_qs; + logic secret0_digest_1_re; + logic [31:0] secret0_digest_1_qs; + logic secret1_digest_0_re; + logic [31:0] secret1_digest_0_qs; + logic secret1_digest_1_re; + logic [31:0] secret1_digest_1_qs; + logic secret2_digest_0_re; + logic [31:0] secret2_digest_0_qs; + logic secret2_digest_1_re; + logic [31:0] secret2_digest_1_qs; + + // Register instances + // R[intr_state]: V(False) + // F[otp_operation_done]: 0:0 + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessW1C), + .RESVAL (1'h0), + .Mubi (1'b0) + ) u_intr_state_otp_operation_done ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (intr_state_we), + .wd (intr_state_otp_operation_done_wd), + + // from internal hardware + .de (hw2reg.intr_state.otp_operation_done.de), + .d (hw2reg.intr_state.otp_operation_done.d), + + // to internal hardware + .qe (), + .q (reg2hw.intr_state.otp_operation_done.q), + .ds (), + + // to register interface (read) + .qs (intr_state_otp_operation_done_qs) + ); + + // F[otp_error]: 1:1 + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessW1C), + .RESVAL (1'h0), + .Mubi (1'b0) + ) u_intr_state_otp_error ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (intr_state_we), + .wd (intr_state_otp_error_wd), + + // from internal hardware + .de (hw2reg.intr_state.otp_error.de), + .d (hw2reg.intr_state.otp_error.d), + + // to internal hardware + .qe (), + .q (reg2hw.intr_state.otp_error.q), + .ds (), + + // to register interface (read) + .qs (intr_state_otp_error_qs) + ); + + + // R[intr_enable]: V(False) + // F[otp_operation_done]: 0:0 + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (1'h0), + .Mubi (1'b0) + ) u_intr_enable_otp_operation_done ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (intr_enable_we), + .wd (intr_enable_otp_operation_done_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.intr_enable.otp_operation_done.q), + .ds (), + + // to register interface (read) + .qs (intr_enable_otp_operation_done_qs) + ); + + // F[otp_error]: 1:1 + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (1'h0), + .Mubi (1'b0) + ) u_intr_enable_otp_error ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (intr_enable_we), + .wd (intr_enable_otp_error_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.intr_enable.otp_error.q), + .ds (), + + // to register interface (read) + .qs (intr_enable_otp_error_qs) + ); + + + // R[intr_test]: V(True) + logic intr_test_qe; + logic [1:0] intr_test_flds_we; + assign intr_test_qe = &intr_test_flds_we; + // F[otp_operation_done]: 0:0 + prim_subreg_ext #( + .DW (1) + ) u_intr_test_otp_operation_done ( + .re (1'b0), + .we (intr_test_we), + .wd (intr_test_otp_operation_done_wd), + .d ('0), + .qre (), + .qe (intr_test_flds_we[0]), + .q (reg2hw.intr_test.otp_operation_done.q), + .ds (), + .qs () + ); + assign reg2hw.intr_test.otp_operation_done.qe = intr_test_qe; + + // F[otp_error]: 1:1 + prim_subreg_ext #( + .DW (1) + ) u_intr_test_otp_error ( + .re (1'b0), + .we (intr_test_we), + .wd (intr_test_otp_error_wd), + .d ('0), + .qre (), + .qe (intr_test_flds_we[1]), + .q (reg2hw.intr_test.otp_error.q), + .ds (), + .qs () + ); + assign reg2hw.intr_test.otp_error.qe = intr_test_qe; + + + // R[alert_test]: V(True) + logic alert_test_qe; + logic [4:0] alert_test_flds_we; + assign alert_test_qe = &alert_test_flds_we; + // F[fatal_macro_error]: 0:0 + prim_subreg_ext #( + .DW (1) + ) u_alert_test_fatal_macro_error ( + .re (1'b0), + .we (alert_test_we), + .wd (alert_test_fatal_macro_error_wd), + .d ('0), + .qre (), + .qe (alert_test_flds_we[0]), + .q (reg2hw.alert_test.fatal_macro_error.q), + .ds (), + .qs () + ); + assign reg2hw.alert_test.fatal_macro_error.qe = alert_test_qe; + + // F[fatal_check_error]: 1:1 + prim_subreg_ext #( + .DW (1) + ) u_alert_test_fatal_check_error ( + .re (1'b0), + .we (alert_test_we), + .wd (alert_test_fatal_check_error_wd), + .d ('0), + .qre (), + .qe (alert_test_flds_we[1]), + .q (reg2hw.alert_test.fatal_check_error.q), + .ds (), + .qs () + ); + assign reg2hw.alert_test.fatal_check_error.qe = alert_test_qe; + + // F[fatal_bus_integ_error]: 2:2 + prim_subreg_ext #( + .DW (1) + ) u_alert_test_fatal_bus_integ_error ( + .re (1'b0), + .we (alert_test_we), + .wd (alert_test_fatal_bus_integ_error_wd), + .d ('0), + .qre (), + .qe (alert_test_flds_we[2]), + .q (reg2hw.alert_test.fatal_bus_integ_error.q), + .ds (), + .qs () + ); + assign reg2hw.alert_test.fatal_bus_integ_error.qe = alert_test_qe; + + // F[fatal_prim_otp_alert]: 3:3 + prim_subreg_ext #( + .DW (1) + ) u_alert_test_fatal_prim_otp_alert ( + .re (1'b0), + .we (alert_test_we), + .wd (alert_test_fatal_prim_otp_alert_wd), + .d ('0), + .qre (), + .qe (alert_test_flds_we[3]), + .q (reg2hw.alert_test.fatal_prim_otp_alert.q), + .ds (), + .qs () + ); + assign reg2hw.alert_test.fatal_prim_otp_alert.qe = alert_test_qe; + + // F[recov_prim_otp_alert]: 4:4 + prim_subreg_ext #( + .DW (1) + ) u_alert_test_recov_prim_otp_alert ( + .re (1'b0), + .we (alert_test_we), + .wd (alert_test_recov_prim_otp_alert_wd), + .d ('0), + .qre (), + .qe (alert_test_flds_we[4]), + .q (reg2hw.alert_test.recov_prim_otp_alert.q), + .ds (), + .qs () + ); + assign reg2hw.alert_test.recov_prim_otp_alert.qe = alert_test_qe; + + + // R[status]: V(True) + // F[vendor_test_error]: 0:0 + prim_subreg_ext #( + .DW (1) + ) u_status_vendor_test_error ( + .re (status_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.status.vendor_test_error.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (status_vendor_test_error_qs) + ); + + // F[non_secret_fuses_error]: 1:1 + prim_subreg_ext #( + .DW (1) + ) u_status_non_secret_fuses_error ( + .re (status_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.status.non_secret_fuses_error.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (status_non_secret_fuses_error_qs) + ); + + // F[secret0_error]: 2:2 + prim_subreg_ext #( + .DW (1) + ) u_status_secret0_error ( + .re (status_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.status.secret0_error.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (status_secret0_error_qs) + ); + + // F[secret1_error]: 3:3 + prim_subreg_ext #( + .DW (1) + ) u_status_secret1_error ( + .re (status_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.status.secret1_error.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (status_secret1_error_qs) + ); + + // F[secret2_error]: 4:4 + prim_subreg_ext #( + .DW (1) + ) u_status_secret2_error ( + .re (status_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.status.secret2_error.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (status_secret2_error_qs) + ); + + // F[life_cycle_error]: 5:5 + prim_subreg_ext #( + .DW (1) + ) u_status_life_cycle_error ( + .re (status_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.status.life_cycle_error.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (status_life_cycle_error_qs) + ); + + // F[dai_error]: 6:6 + prim_subreg_ext #( + .DW (1) + ) u_status_dai_error ( + .re (status_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.status.dai_error.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (status_dai_error_qs) + ); + + // F[lci_error]: 7:7 + prim_subreg_ext #( + .DW (1) + ) u_status_lci_error ( + .re (status_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.status.lci_error.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (status_lci_error_qs) + ); + + // F[timeout_error]: 8:8 + prim_subreg_ext #( + .DW (1) + ) u_status_timeout_error ( + .re (status_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.status.timeout_error.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (status_timeout_error_qs) + ); + + // F[lfsr_fsm_error]: 9:9 + prim_subreg_ext #( + .DW (1) + ) u_status_lfsr_fsm_error ( + .re (status_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.status.lfsr_fsm_error.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (status_lfsr_fsm_error_qs) + ); + + // F[scrambling_fsm_error]: 10:10 + prim_subreg_ext #( + .DW (1) + ) u_status_scrambling_fsm_error ( + .re (status_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.status.scrambling_fsm_error.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (status_scrambling_fsm_error_qs) + ); + + // F[key_deriv_fsm_error]: 11:11 + prim_subreg_ext #( + .DW (1) + ) u_status_key_deriv_fsm_error ( + .re (status_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.status.key_deriv_fsm_error.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (status_key_deriv_fsm_error_qs) + ); + + // F[bus_integ_error]: 12:12 + prim_subreg_ext #( + .DW (1) + ) u_status_bus_integ_error ( + .re (status_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.status.bus_integ_error.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (status_bus_integ_error_qs) + ); + + // F[dai_idle]: 13:13 + prim_subreg_ext #( + .DW (1) + ) u_status_dai_idle ( + .re (status_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.status.dai_idle.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (status_dai_idle_qs) + ); + + // F[check_pending]: 14:14 + prim_subreg_ext #( + .DW (1) + ) u_status_check_pending ( + .re (status_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.status.check_pending.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (status_check_pending_qs) + ); + + + // Subregister 0 of Multireg err_code + // R[err_code_0]: V(True) + prim_subreg_ext #( + .DW (3) + ) u_err_code_0 ( + .re (err_code_0_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.err_code[0].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (err_code_0_qs) + ); + + + // Subregister 1 of Multireg err_code + // R[err_code_1]: V(True) + prim_subreg_ext #( + .DW (3) + ) u_err_code_1 ( + .re (err_code_1_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.err_code[1].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (err_code_1_qs) + ); + + + // Subregister 2 of Multireg err_code + // R[err_code_2]: V(True) + prim_subreg_ext #( + .DW (3) + ) u_err_code_2 ( + .re (err_code_2_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.err_code[2].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (err_code_2_qs) + ); + + + // Subregister 3 of Multireg err_code + // R[err_code_3]: V(True) + prim_subreg_ext #( + .DW (3) + ) u_err_code_3 ( + .re (err_code_3_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.err_code[3].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (err_code_3_qs) + ); + + + // Subregister 4 of Multireg err_code + // R[err_code_4]: V(True) + prim_subreg_ext #( + .DW (3) + ) u_err_code_4 ( + .re (err_code_4_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.err_code[4].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (err_code_4_qs) + ); + + + // Subregister 5 of Multireg err_code + // R[err_code_5]: V(True) + prim_subreg_ext #( + .DW (3) + ) u_err_code_5 ( + .re (err_code_5_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.err_code[5].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (err_code_5_qs) + ); + + + // Subregister 6 of Multireg err_code + // R[err_code_6]: V(True) + prim_subreg_ext #( + .DW (3) + ) u_err_code_6 ( + .re (err_code_6_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.err_code[6].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (err_code_6_qs) + ); + + + // Subregister 7 of Multireg err_code + // R[err_code_7]: V(True) + prim_subreg_ext #( + .DW (3) + ) u_err_code_7 ( + .re (err_code_7_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.err_code[7].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (err_code_7_qs) + ); + + + // R[direct_access_regwen]: V(True) + logic direct_access_regwen_qe; + logic [0:0] direct_access_regwen_flds_we; + assign direct_access_regwen_qe = &direct_access_regwen_flds_we; + prim_subreg_ext #( + .DW (1) + ) u_direct_access_regwen ( + .re (direct_access_regwen_re), + .we (direct_access_regwen_we), + .wd (direct_access_regwen_wd), + .d (hw2reg.direct_access_regwen.d), + .qre (), + .qe (direct_access_regwen_flds_we[0]), + .q (reg2hw.direct_access_regwen.q), + .ds (), + .qs (direct_access_regwen_qs) + ); + assign reg2hw.direct_access_regwen.qe = direct_access_regwen_qe; + + + // R[direct_access_cmd]: V(True) + logic direct_access_cmd_qe; + logic [2:0] direct_access_cmd_flds_we; + assign direct_access_cmd_qe = &direct_access_cmd_flds_we; + // Create REGWEN-gated WE signal + logic direct_access_cmd_gated_we; + assign direct_access_cmd_gated_we = direct_access_cmd_we & direct_access_regwen_qs; + // F[rd]: 0:0 + prim_subreg_ext #( + .DW (1) + ) u_direct_access_cmd_rd ( + .re (1'b0), + .we (direct_access_cmd_gated_we), + .wd (direct_access_cmd_rd_wd), + .d ('0), + .qre (), + .qe (direct_access_cmd_flds_we[0]), + .q (reg2hw.direct_access_cmd.rd.q), + .ds (), + .qs () + ); + assign reg2hw.direct_access_cmd.rd.qe = direct_access_cmd_qe; + + // F[wr]: 1:1 + prim_subreg_ext #( + .DW (1) + ) u_direct_access_cmd_wr ( + .re (1'b0), + .we (direct_access_cmd_gated_we), + .wd (direct_access_cmd_wr_wd), + .d ('0), + .qre (), + .qe (direct_access_cmd_flds_we[1]), + .q (reg2hw.direct_access_cmd.wr.q), + .ds (), + .qs () + ); + assign reg2hw.direct_access_cmd.wr.qe = direct_access_cmd_qe; + + // F[digest]: 2:2 + prim_subreg_ext #( + .DW (1) + ) u_direct_access_cmd_digest ( + .re (1'b0), + .we (direct_access_cmd_gated_we), + .wd (direct_access_cmd_digest_wd), + .d ('0), + .qre (), + .qe (direct_access_cmd_flds_we[2]), + .q (reg2hw.direct_access_cmd.digest.q), + .ds (), + .qs () + ); + assign reg2hw.direct_access_cmd.digest.qe = direct_access_cmd_qe; + + + // R[direct_access_address]: V(False) + // Create REGWEN-gated WE signal + logic direct_access_address_gated_we; + assign direct_access_address_gated_we = direct_access_address_we & direct_access_regwen_qs; + prim_subreg #( + .DW (12), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (12'h0), + .Mubi (1'b0) + ) u_direct_access_address ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (direct_access_address_gated_we), + .wd (direct_access_address_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.direct_access_address.q), + .ds (), + + // to register interface (read) + .qs (direct_access_address_qs) + ); + + + // Subregister 0 of Multireg direct_access_wdata + // R[direct_access_wdata_0]: V(False) + // Create REGWEN-gated WE signal + logic direct_access_wdata_0_gated_we; + assign direct_access_wdata_0_gated_we = direct_access_wdata_0_we & direct_access_regwen_qs; + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h0), + .Mubi (1'b0) + ) u_direct_access_wdata_0 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (direct_access_wdata_0_gated_we), + .wd (direct_access_wdata_0_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.direct_access_wdata[0].q), + .ds (), + + // to register interface (read) + .qs (direct_access_wdata_0_qs) + ); + + + // Subregister 1 of Multireg direct_access_wdata + // R[direct_access_wdata_1]: V(False) + // Create REGWEN-gated WE signal + logic direct_access_wdata_1_gated_we; + assign direct_access_wdata_1_gated_we = direct_access_wdata_1_we & direct_access_regwen_qs; + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h0), + .Mubi (1'b0) + ) u_direct_access_wdata_1 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (direct_access_wdata_1_gated_we), + .wd (direct_access_wdata_1_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.direct_access_wdata[1].q), + .ds (), + + // to register interface (read) + .qs (direct_access_wdata_1_qs) + ); + + + // Subregister 0 of Multireg direct_access_rdata + // R[direct_access_rdata_0]: V(True) + prim_subreg_ext #( + .DW (32) + ) u_direct_access_rdata_0 ( + .re (direct_access_rdata_0_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.direct_access_rdata[0].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (direct_access_rdata_0_qs) + ); + + + // Subregister 1 of Multireg direct_access_rdata + // R[direct_access_rdata_1]: V(True) + prim_subreg_ext #( + .DW (32) + ) u_direct_access_rdata_1 ( + .re (direct_access_rdata_1_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.direct_access_rdata[1].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (direct_access_rdata_1_qs) + ); + + + // R[check_trigger_regwen]: V(False) + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessW0C), + .RESVAL (1'h1), + .Mubi (1'b0) + ) u_check_trigger_regwen ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (check_trigger_regwen_we), + .wd (check_trigger_regwen_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (), + .ds (), + + // to register interface (read) + .qs (check_trigger_regwen_qs) + ); + + + // R[check_trigger]: V(True) + logic check_trigger_qe; + logic [1:0] check_trigger_flds_we; + assign check_trigger_qe = &check_trigger_flds_we; + // Create REGWEN-gated WE signal + logic check_trigger_gated_we; + assign check_trigger_gated_we = check_trigger_we & check_trigger_regwen_qs; + // F[integrity]: 0:0 + prim_subreg_ext #( + .DW (1) + ) u_check_trigger_integrity ( + .re (1'b0), + .we (check_trigger_gated_we), + .wd (check_trigger_integrity_wd), + .d ('0), + .qre (), + .qe (check_trigger_flds_we[0]), + .q (reg2hw.check_trigger.integrity.q), + .ds (), + .qs () + ); + assign reg2hw.check_trigger.integrity.qe = check_trigger_qe; + + // F[consistency]: 1:1 + prim_subreg_ext #( + .DW (1) + ) u_check_trigger_consistency ( + .re (1'b0), + .we (check_trigger_gated_we), + .wd (check_trigger_consistency_wd), + .d ('0), + .qre (), + .qe (check_trigger_flds_we[1]), + .q (reg2hw.check_trigger.consistency.q), + .ds (), + .qs () + ); + assign reg2hw.check_trigger.consistency.qe = check_trigger_qe; + + + // R[check_regwen]: V(False) + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessW0C), + .RESVAL (1'h1), + .Mubi (1'b0) + ) u_check_regwen ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (check_regwen_we), + .wd (check_regwen_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (), + .ds (), + + // to register interface (read) + .qs (check_regwen_qs) + ); + + + // R[check_timeout]: V(False) + // Create REGWEN-gated WE signal + logic check_timeout_gated_we; + assign check_timeout_gated_we = check_timeout_we & check_regwen_qs; + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h0), + .Mubi (1'b0) + ) u_check_timeout ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (check_timeout_gated_we), + .wd (check_timeout_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.check_timeout.q), + .ds (), + + // to register interface (read) + .qs (check_timeout_qs) + ); + + + // R[integrity_check_period]: V(False) + // Create REGWEN-gated WE signal + logic integrity_check_period_gated_we; + assign integrity_check_period_gated_we = integrity_check_period_we & check_regwen_qs; + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h0), + .Mubi (1'b0) + ) u_integrity_check_period ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (integrity_check_period_gated_we), + .wd (integrity_check_period_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.integrity_check_period.q), + .ds (), + + // to register interface (read) + .qs (integrity_check_period_qs) + ); + + + // R[consistency_check_period]: V(False) + // Create REGWEN-gated WE signal + logic consistency_check_period_gated_we; + assign consistency_check_period_gated_we = consistency_check_period_we & check_regwen_qs; + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h0), + .Mubi (1'b0) + ) u_consistency_check_period ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (consistency_check_period_gated_we), + .wd (consistency_check_period_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.consistency_check_period.q), + .ds (), + + // to register interface (read) + .qs (consistency_check_period_qs) + ); + + + // R[vendor_test_read_lock]: V(False) + // Create REGWEN-gated WE signal + logic vendor_test_read_lock_gated_we; + assign vendor_test_read_lock_gated_we = vendor_test_read_lock_we & direct_access_regwen_qs; + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessW0C), + .RESVAL (1'h1), + .Mubi (1'b0) + ) u_vendor_test_read_lock ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (vendor_test_read_lock_gated_we), + .wd (vendor_test_read_lock_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.vendor_test_read_lock.q), + .ds (), + + // to register interface (read) + .qs (vendor_test_read_lock_qs) + ); + + + // R[non_secret_fuses_read_lock]: V(False) + // Create REGWEN-gated WE signal + logic non_secret_fuses_read_lock_gated_we; + assign non_secret_fuses_read_lock_gated_we = + non_secret_fuses_read_lock_we & direct_access_regwen_qs; + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessW0C), + .RESVAL (1'h1), + .Mubi (1'b0) + ) u_non_secret_fuses_read_lock ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (non_secret_fuses_read_lock_gated_we), + .wd (non_secret_fuses_read_lock_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.non_secret_fuses_read_lock.q), + .ds (), + + // to register interface (read) + .qs (non_secret_fuses_read_lock_qs) + ); + + + // Subregister 0 of Multireg vendor_test_digest + // R[vendor_test_digest_0]: V(True) + prim_subreg_ext #( + .DW (32) + ) u_vendor_test_digest_0 ( + .re (vendor_test_digest_0_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.vendor_test_digest[0].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (vendor_test_digest_0_qs) + ); + + + // Subregister 1 of Multireg vendor_test_digest + // R[vendor_test_digest_1]: V(True) + prim_subreg_ext #( + .DW (32) + ) u_vendor_test_digest_1 ( + .re (vendor_test_digest_1_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.vendor_test_digest[1].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (vendor_test_digest_1_qs) + ); + + + // Subregister 0 of Multireg non_secret_fuses_digest + // R[non_secret_fuses_digest_0]: V(True) + prim_subreg_ext #( + .DW (32) + ) u_non_secret_fuses_digest_0 ( + .re (non_secret_fuses_digest_0_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.non_secret_fuses_digest[0].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (non_secret_fuses_digest_0_qs) + ); + + + // Subregister 1 of Multireg non_secret_fuses_digest + // R[non_secret_fuses_digest_1]: V(True) + prim_subreg_ext #( + .DW (32) + ) u_non_secret_fuses_digest_1 ( + .re (non_secret_fuses_digest_1_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.non_secret_fuses_digest[1].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (non_secret_fuses_digest_1_qs) + ); + + + // Subregister 0 of Multireg secret0_digest + // R[secret0_digest_0]: V(True) + prim_subreg_ext #( + .DW (32) + ) u_secret0_digest_0 ( + .re (secret0_digest_0_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.secret0_digest[0].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (secret0_digest_0_qs) + ); + + + // Subregister 1 of Multireg secret0_digest + // R[secret0_digest_1]: V(True) + prim_subreg_ext #( + .DW (32) + ) u_secret0_digest_1 ( + .re (secret0_digest_1_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.secret0_digest[1].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (secret0_digest_1_qs) + ); + + + // Subregister 0 of Multireg secret1_digest + // R[secret1_digest_0]: V(True) + prim_subreg_ext #( + .DW (32) + ) u_secret1_digest_0 ( + .re (secret1_digest_0_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.secret1_digest[0].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (secret1_digest_0_qs) + ); + + + // Subregister 1 of Multireg secret1_digest + // R[secret1_digest_1]: V(True) + prim_subreg_ext #( + .DW (32) + ) u_secret1_digest_1 ( + .re (secret1_digest_1_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.secret1_digest[1].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (secret1_digest_1_qs) + ); + + + // Subregister 0 of Multireg secret2_digest + // R[secret2_digest_0]: V(True) + prim_subreg_ext #( + .DW (32) + ) u_secret2_digest_0 ( + .re (secret2_digest_0_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.secret2_digest[0].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (secret2_digest_0_qs) + ); + + + // Subregister 1 of Multireg secret2_digest + // R[secret2_digest_1]: V(True) + prim_subreg_ext #( + .DW (32) + ) u_secret2_digest_1 ( + .re (secret2_digest_1_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.secret2_digest[1].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (secret2_digest_1_qs) + ); + + + + logic [37:0] addr_hit; + always_comb begin + addr_hit = '0; + addr_hit[ 0] = (reg_addr == CALIPTRA_OTP_CTRL_INTR_STATE_OFFSET); + addr_hit[ 1] = (reg_addr == CALIPTRA_OTP_CTRL_INTR_ENABLE_OFFSET); + addr_hit[ 2] = (reg_addr == CALIPTRA_OTP_CTRL_INTR_TEST_OFFSET); + addr_hit[ 3] = (reg_addr == CALIPTRA_OTP_CTRL_ALERT_TEST_OFFSET); + addr_hit[ 4] = (reg_addr == CALIPTRA_OTP_CTRL_STATUS_OFFSET); + addr_hit[ 5] = (reg_addr == CALIPTRA_OTP_CTRL_ERR_CODE_0_OFFSET); + addr_hit[ 6] = (reg_addr == CALIPTRA_OTP_CTRL_ERR_CODE_1_OFFSET); + addr_hit[ 7] = (reg_addr == CALIPTRA_OTP_CTRL_ERR_CODE_2_OFFSET); + addr_hit[ 8] = (reg_addr == CALIPTRA_OTP_CTRL_ERR_CODE_3_OFFSET); + addr_hit[ 9] = (reg_addr == CALIPTRA_OTP_CTRL_ERR_CODE_4_OFFSET); + addr_hit[10] = (reg_addr == CALIPTRA_OTP_CTRL_ERR_CODE_5_OFFSET); + addr_hit[11] = (reg_addr == CALIPTRA_OTP_CTRL_ERR_CODE_6_OFFSET); + addr_hit[12] = (reg_addr == CALIPTRA_OTP_CTRL_ERR_CODE_7_OFFSET); + addr_hit[13] = (reg_addr == CALIPTRA_OTP_CTRL_DIRECT_ACCESS_REGWEN_OFFSET); + addr_hit[14] = (reg_addr == CALIPTRA_OTP_CTRL_DIRECT_ACCESS_CMD_OFFSET); + addr_hit[15] = (reg_addr == CALIPTRA_OTP_CTRL_DIRECT_ACCESS_ADDRESS_OFFSET); + addr_hit[16] = (reg_addr == CALIPTRA_OTP_CTRL_DIRECT_ACCESS_WDATA_0_OFFSET); + addr_hit[17] = (reg_addr == CALIPTRA_OTP_CTRL_DIRECT_ACCESS_WDATA_1_OFFSET); + addr_hit[18] = (reg_addr == CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_0_OFFSET); + addr_hit[19] = (reg_addr == CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_1_OFFSET); + addr_hit[20] = (reg_addr == CALIPTRA_OTP_CTRL_CHECK_TRIGGER_REGWEN_OFFSET); + addr_hit[21] = (reg_addr == CALIPTRA_OTP_CTRL_CHECK_TRIGGER_OFFSET); + addr_hit[22] = (reg_addr == CALIPTRA_OTP_CTRL_CHECK_REGWEN_OFFSET); + addr_hit[23] = (reg_addr == CALIPTRA_OTP_CTRL_CHECK_TIMEOUT_OFFSET); + addr_hit[24] = (reg_addr == CALIPTRA_OTP_CTRL_INTEGRITY_CHECK_PERIOD_OFFSET); + addr_hit[25] = (reg_addr == CALIPTRA_OTP_CTRL_CONSISTENCY_CHECK_PERIOD_OFFSET); + addr_hit[26] = (reg_addr == CALIPTRA_OTP_CTRL_VENDOR_TEST_READ_LOCK_OFFSET); + addr_hit[27] = (reg_addr == CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_READ_LOCK_OFFSET); + addr_hit[28] = (reg_addr == CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_0_OFFSET); + addr_hit[29] = (reg_addr == CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_1_OFFSET); + addr_hit[30] = (reg_addr == CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_0_OFFSET); + addr_hit[31] = (reg_addr == CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_1_OFFSET); + addr_hit[32] = (reg_addr == CALIPTRA_OTP_CTRL_SECRET0_DIGEST_0_OFFSET); + addr_hit[33] = (reg_addr == CALIPTRA_OTP_CTRL_SECRET0_DIGEST_1_OFFSET); + addr_hit[34] = (reg_addr == CALIPTRA_OTP_CTRL_SECRET1_DIGEST_0_OFFSET); + addr_hit[35] = (reg_addr == CALIPTRA_OTP_CTRL_SECRET1_DIGEST_1_OFFSET); + addr_hit[36] = (reg_addr == CALIPTRA_OTP_CTRL_SECRET2_DIGEST_0_OFFSET); + addr_hit[37] = (reg_addr == CALIPTRA_OTP_CTRL_SECRET2_DIGEST_1_OFFSET); + end + + assign addrmiss = (reg_re || reg_we) ? ~|addr_hit : 1'b0 ; + + // Check sub-word write is permitted + always_comb begin + wr_err = (reg_we & + ((addr_hit[ 0] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[ 0] & ~reg_be))) | + (addr_hit[ 1] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[ 1] & ~reg_be))) | + (addr_hit[ 2] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[ 2] & ~reg_be))) | + (addr_hit[ 3] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[ 3] & ~reg_be))) | + (addr_hit[ 4] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[ 4] & ~reg_be))) | + (addr_hit[ 5] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[ 5] & ~reg_be))) | + (addr_hit[ 6] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[ 6] & ~reg_be))) | + (addr_hit[ 7] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[ 7] & ~reg_be))) | + (addr_hit[ 8] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[ 8] & ~reg_be))) | + (addr_hit[ 9] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[ 9] & ~reg_be))) | + (addr_hit[10] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[10] & ~reg_be))) | + (addr_hit[11] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[11] & ~reg_be))) | + (addr_hit[12] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[12] & ~reg_be))) | + (addr_hit[13] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[13] & ~reg_be))) | + (addr_hit[14] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[14] & ~reg_be))) | + (addr_hit[15] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[15] & ~reg_be))) | + (addr_hit[16] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[16] & ~reg_be))) | + (addr_hit[17] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[17] & ~reg_be))) | + (addr_hit[18] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[18] & ~reg_be))) | + (addr_hit[19] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[19] & ~reg_be))) | + (addr_hit[20] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[20] & ~reg_be))) | + (addr_hit[21] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[21] & ~reg_be))) | + (addr_hit[22] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[22] & ~reg_be))) | + (addr_hit[23] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[23] & ~reg_be))) | + (addr_hit[24] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[24] & ~reg_be))) | + (addr_hit[25] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[25] & ~reg_be))) | + (addr_hit[26] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[26] & ~reg_be))) | + (addr_hit[27] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[27] & ~reg_be))) | + (addr_hit[28] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[28] & ~reg_be))) | + (addr_hit[29] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[29] & ~reg_be))) | + (addr_hit[30] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[30] & ~reg_be))) | + (addr_hit[31] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[31] & ~reg_be))) | + (addr_hit[32] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[32] & ~reg_be))) | + (addr_hit[33] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[33] & ~reg_be))) | + (addr_hit[34] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[34] & ~reg_be))) | + (addr_hit[35] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[35] & ~reg_be))) | + (addr_hit[36] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[36] & ~reg_be))) | + (addr_hit[37] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[37] & ~reg_be))))); + end + + // Generate write-enables + assign intr_state_we = addr_hit[0] & reg_we & !reg_error; + + assign intr_state_otp_operation_done_wd = reg_wdata[0]; + + assign intr_state_otp_error_wd = reg_wdata[1]; + assign intr_enable_we = addr_hit[1] & reg_we & !reg_error; + + assign intr_enable_otp_operation_done_wd = reg_wdata[0]; + + assign intr_enable_otp_error_wd = reg_wdata[1]; + assign intr_test_we = addr_hit[2] & reg_we & !reg_error; + + assign intr_test_otp_operation_done_wd = reg_wdata[0]; + + assign intr_test_otp_error_wd = reg_wdata[1]; + assign alert_test_we = addr_hit[3] & reg_we & !reg_error; + + assign alert_test_fatal_macro_error_wd = reg_wdata[0]; + + assign alert_test_fatal_check_error_wd = reg_wdata[1]; + + assign alert_test_fatal_bus_integ_error_wd = reg_wdata[2]; + + assign alert_test_fatal_prim_otp_alert_wd = reg_wdata[3]; + + assign alert_test_recov_prim_otp_alert_wd = reg_wdata[4]; + assign status_re = addr_hit[4] & reg_re & !reg_error; + assign err_code_0_re = addr_hit[5] & reg_re & !reg_error; + assign err_code_1_re = addr_hit[6] & reg_re & !reg_error; + assign err_code_2_re = addr_hit[7] & reg_re & !reg_error; + assign err_code_3_re = addr_hit[8] & reg_re & !reg_error; + assign err_code_4_re = addr_hit[9] & reg_re & !reg_error; + assign err_code_5_re = addr_hit[10] & reg_re & !reg_error; + assign err_code_6_re = addr_hit[11] & reg_re & !reg_error; + assign err_code_7_re = addr_hit[12] & reg_re & !reg_error; + assign direct_access_regwen_re = addr_hit[13] & reg_re & !reg_error; + assign direct_access_regwen_we = addr_hit[13] & reg_we & !reg_error; + + assign direct_access_regwen_wd = reg_wdata[0]; + assign direct_access_cmd_we = addr_hit[14] & reg_we & !reg_error; + + assign direct_access_cmd_rd_wd = reg_wdata[0]; + + assign direct_access_cmd_wr_wd = reg_wdata[1]; + + assign direct_access_cmd_digest_wd = reg_wdata[2]; + assign direct_access_address_we = addr_hit[15] & reg_we & !reg_error; + + assign direct_access_address_wd = reg_wdata[11:0]; + assign direct_access_wdata_0_we = addr_hit[16] & reg_we & !reg_error; + + assign direct_access_wdata_0_wd = reg_wdata[31:0]; + assign direct_access_wdata_1_we = addr_hit[17] & reg_we & !reg_error; + + assign direct_access_wdata_1_wd = reg_wdata[31:0]; + assign direct_access_rdata_0_re = addr_hit[18] & reg_re & !reg_error; + assign direct_access_rdata_1_re = addr_hit[19] & reg_re & !reg_error; + assign check_trigger_regwen_we = addr_hit[20] & reg_we & !reg_error; + + assign check_trigger_regwen_wd = reg_wdata[0]; + assign check_trigger_we = addr_hit[21] & reg_we & !reg_error; + + assign check_trigger_integrity_wd = reg_wdata[0]; + + assign check_trigger_consistency_wd = reg_wdata[1]; + assign check_regwen_we = addr_hit[22] & reg_we & !reg_error; + + assign check_regwen_wd = reg_wdata[0]; + assign check_timeout_we = addr_hit[23] & reg_we & !reg_error; + + assign check_timeout_wd = reg_wdata[31:0]; + assign integrity_check_period_we = addr_hit[24] & reg_we & !reg_error; + + assign integrity_check_period_wd = reg_wdata[31:0]; + assign consistency_check_period_we = addr_hit[25] & reg_we & !reg_error; + + assign consistency_check_period_wd = reg_wdata[31:0]; + assign vendor_test_read_lock_we = addr_hit[26] & reg_we & !reg_error; + + assign vendor_test_read_lock_wd = reg_wdata[0]; + assign non_secret_fuses_read_lock_we = addr_hit[27] & reg_we & !reg_error; + + assign non_secret_fuses_read_lock_wd = reg_wdata[0]; + assign vendor_test_digest_0_re = addr_hit[28] & reg_re & !reg_error; + assign vendor_test_digest_1_re = addr_hit[29] & reg_re & !reg_error; + assign non_secret_fuses_digest_0_re = addr_hit[30] & reg_re & !reg_error; + assign non_secret_fuses_digest_1_re = addr_hit[31] & reg_re & !reg_error; + assign secret0_digest_0_re = addr_hit[32] & reg_re & !reg_error; + assign secret0_digest_1_re = addr_hit[33] & reg_re & !reg_error; + assign secret1_digest_0_re = addr_hit[34] & reg_re & !reg_error; + assign secret1_digest_1_re = addr_hit[35] & reg_re & !reg_error; + assign secret2_digest_0_re = addr_hit[36] & reg_re & !reg_error; + assign secret2_digest_1_re = addr_hit[37] & reg_re & !reg_error; + + // Assign write-enables to checker logic vector. + always_comb begin + reg_we_check = '0; + reg_we_check[0] = intr_state_we; + reg_we_check[1] = intr_enable_we; + reg_we_check[2] = intr_test_we; + reg_we_check[3] = alert_test_we; + reg_we_check[4] = 1'b0; + reg_we_check[5] = 1'b0; + reg_we_check[6] = 1'b0; + reg_we_check[7] = 1'b0; + reg_we_check[8] = 1'b0; + reg_we_check[9] = 1'b0; + reg_we_check[10] = 1'b0; + reg_we_check[11] = 1'b0; + reg_we_check[12] = 1'b0; + reg_we_check[13] = direct_access_regwen_we; + reg_we_check[14] = direct_access_cmd_gated_we; + reg_we_check[15] = direct_access_address_gated_we; + reg_we_check[16] = direct_access_wdata_0_gated_we; + reg_we_check[17] = direct_access_wdata_1_gated_we; + reg_we_check[18] = 1'b0; + reg_we_check[19] = 1'b0; + reg_we_check[20] = check_trigger_regwen_we; + reg_we_check[21] = check_trigger_gated_we; + reg_we_check[22] = check_regwen_we; + reg_we_check[23] = check_timeout_gated_we; + reg_we_check[24] = integrity_check_period_gated_we; + reg_we_check[25] = consistency_check_period_gated_we; + reg_we_check[26] = vendor_test_read_lock_gated_we; + reg_we_check[27] = non_secret_fuses_read_lock_gated_we; + reg_we_check[28] = 1'b0; + reg_we_check[29] = 1'b0; + reg_we_check[30] = 1'b0; + reg_we_check[31] = 1'b0; + reg_we_check[32] = 1'b0; + reg_we_check[33] = 1'b0; + reg_we_check[34] = 1'b0; + reg_we_check[35] = 1'b0; + reg_we_check[36] = 1'b0; + reg_we_check[37] = 1'b0; + end + + // Read data return + always_comb begin + reg_rdata_next = '0; + unique case (1'b1) + addr_hit[0]: begin + reg_rdata_next[0] = intr_state_otp_operation_done_qs; + reg_rdata_next[1] = intr_state_otp_error_qs; + end + + addr_hit[1]: begin + reg_rdata_next[0] = intr_enable_otp_operation_done_qs; + reg_rdata_next[1] = intr_enable_otp_error_qs; + end + + addr_hit[2]: begin + reg_rdata_next[0] = '0; + reg_rdata_next[1] = '0; + end + + addr_hit[3]: begin + reg_rdata_next[0] = '0; + reg_rdata_next[1] = '0; + reg_rdata_next[2] = '0; + reg_rdata_next[3] = '0; + reg_rdata_next[4] = '0; + end + + addr_hit[4]: begin + reg_rdata_next[0] = status_vendor_test_error_qs; + reg_rdata_next[1] = status_non_secret_fuses_error_qs; + reg_rdata_next[2] = status_secret0_error_qs; + reg_rdata_next[3] = status_secret1_error_qs; + reg_rdata_next[4] = status_secret2_error_qs; + reg_rdata_next[5] = status_life_cycle_error_qs; + reg_rdata_next[6] = status_dai_error_qs; + reg_rdata_next[7] = status_lci_error_qs; + reg_rdata_next[8] = status_timeout_error_qs; + reg_rdata_next[9] = status_lfsr_fsm_error_qs; + reg_rdata_next[10] = status_scrambling_fsm_error_qs; + reg_rdata_next[11] = status_key_deriv_fsm_error_qs; + reg_rdata_next[12] = status_bus_integ_error_qs; + reg_rdata_next[13] = status_dai_idle_qs; + reg_rdata_next[14] = status_check_pending_qs; + end + + addr_hit[5]: begin + reg_rdata_next[2:0] = err_code_0_qs; + end + + addr_hit[6]: begin + reg_rdata_next[2:0] = err_code_1_qs; + end + + addr_hit[7]: begin + reg_rdata_next[2:0] = err_code_2_qs; + end + + addr_hit[8]: begin + reg_rdata_next[2:0] = err_code_3_qs; + end + + addr_hit[9]: begin + reg_rdata_next[2:0] = err_code_4_qs; + end + + addr_hit[10]: begin + reg_rdata_next[2:0] = err_code_5_qs; + end + + addr_hit[11]: begin + reg_rdata_next[2:0] = err_code_6_qs; + end + + addr_hit[12]: begin + reg_rdata_next[2:0] = err_code_7_qs; + end + + addr_hit[13]: begin + reg_rdata_next[0] = direct_access_regwen_qs; + end + + addr_hit[14]: begin + reg_rdata_next[0] = '0; + reg_rdata_next[1] = '0; + reg_rdata_next[2] = '0; + end + + addr_hit[15]: begin + reg_rdata_next[11:0] = direct_access_address_qs; + end + + addr_hit[16]: begin + reg_rdata_next[31:0] = direct_access_wdata_0_qs; + end + + addr_hit[17]: begin + reg_rdata_next[31:0] = direct_access_wdata_1_qs; + end + + addr_hit[18]: begin + reg_rdata_next[31:0] = direct_access_rdata_0_qs; + end + + addr_hit[19]: begin + reg_rdata_next[31:0] = direct_access_rdata_1_qs; + end + + addr_hit[20]: begin + reg_rdata_next[0] = check_trigger_regwen_qs; + end + + addr_hit[21]: begin + reg_rdata_next[0] = '0; + reg_rdata_next[1] = '0; + end + + addr_hit[22]: begin + reg_rdata_next[0] = check_regwen_qs; + end + + addr_hit[23]: begin + reg_rdata_next[31:0] = check_timeout_qs; + end + + addr_hit[24]: begin + reg_rdata_next[31:0] = integrity_check_period_qs; + end + + addr_hit[25]: begin + reg_rdata_next[31:0] = consistency_check_period_qs; + end + + addr_hit[26]: begin + reg_rdata_next[0] = vendor_test_read_lock_qs; + end + + addr_hit[27]: begin + reg_rdata_next[0] = non_secret_fuses_read_lock_qs; + end + + addr_hit[28]: begin + reg_rdata_next[31:0] = vendor_test_digest_0_qs; + end + + addr_hit[29]: begin + reg_rdata_next[31:0] = vendor_test_digest_1_qs; + end + + addr_hit[30]: begin + reg_rdata_next[31:0] = non_secret_fuses_digest_0_qs; + end + + addr_hit[31]: begin + reg_rdata_next[31:0] = non_secret_fuses_digest_1_qs; + end + + addr_hit[32]: begin + reg_rdata_next[31:0] = secret0_digest_0_qs; + end + + addr_hit[33]: begin + reg_rdata_next[31:0] = secret0_digest_1_qs; + end + + addr_hit[34]: begin + reg_rdata_next[31:0] = secret1_digest_0_qs; + end + + addr_hit[35]: begin + reg_rdata_next[31:0] = secret1_digest_1_qs; + end + + addr_hit[36]: begin + reg_rdata_next[31:0] = secret2_digest_0_qs; + end + + addr_hit[37]: begin + reg_rdata_next[31:0] = secret2_digest_1_qs; + end + + default: begin + reg_rdata_next = '1; + end + endcase + end + + // shadow busy + logic shadow_busy; + assign shadow_busy = 1'b0; + + // register busy + assign reg_busy = shadow_busy; + + // Unused signal tieoff + + // wdata / byte enable are not always fully used + // add a blanket unused statement to handle lint waivers + logic unused_wdata; + logic unused_be; + assign unused_wdata = ^reg_wdata; + assign unused_be = ^reg_be; + + // Assertions for Register Interface + `ASSERT_PULSE(wePulse, reg_we, clk_i, !rst_ni) + `ASSERT_PULSE(rePulse, reg_re, clk_i, !rst_ni) + + `ASSERT(reAfterRv, $rose(reg_re || reg_we) |=> tl_o_pre.d_valid, clk_i, !rst_ni) + + `ASSERT(en2addrHit, (reg_we || reg_re) |-> $onehot0(addr_hit), clk_i, !rst_ni) + + // this is formulated as an assumption such that the FPV testbenches do disprove this + // property by mistake + //`ASSUME(reqParity, tl_reg_h2d.a_valid |-> tl_reg_h2d.a_user.chk_en == tlul_pkg::CheckDis) + +endmodule diff --git a/src/fuse_ctrl/rtl/caliptra_otp_ctrl_prim_reg_top.sv b/src/fuse_ctrl/rtl/caliptra_otp_ctrl_prim_reg_top.sv new file mode 100644 index 000000000..684a80bde --- /dev/null +++ b/src/fuse_ctrl/rtl/caliptra_otp_ctrl_prim_reg_top.sv @@ -0,0 +1,1467 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Register Top module auto-generated by `reggen` + +`include "prim_assert.sv" + +module caliptra_otp_ctrl_prim_reg_top ( + input clk_i, + input rst_ni, + input tlul_pkg::tl_h2d_t tl_i, + output tlul_pkg::tl_d2h_t tl_o, + // To HW + output caliptra_otp_ctrl_reg_pkg::caliptra_otp_ctrl_prim_reg2hw_t reg2hw, // Write + input caliptra_otp_ctrl_reg_pkg::caliptra_otp_ctrl_prim_hw2reg_t hw2reg, // Read + + // Integrity check errors + output logic intg_err_o +); + + import caliptra_otp_ctrl_reg_pkg::* ; + + localparam int AW = 5; + localparam int DW = 32; + localparam int DBW = DW/8; // Byte Width + + // register signals + logic reg_we; + logic reg_re; + logic [AW-1:0] reg_addr; + logic [DW-1:0] reg_wdata; + logic [DBW-1:0] reg_be; + logic [DW-1:0] reg_rdata; + logic reg_error; + + logic addrmiss, wr_err; + + logic [DW-1:0] reg_rdata_next; + logic reg_busy; + + tlul_pkg::tl_h2d_t tl_reg_h2d; + tlul_pkg::tl_d2h_t tl_reg_d2h; + + + // incoming payload check + logic intg_err; + tlul_cmd_intg_chk u_chk ( + .tl_i(tl_i), + .err_o(intg_err) + ); + + // also check for spurious write enables + logic reg_we_err; + logic [7:0] reg_we_check; + prim_reg_we_check #( + .OneHotWidth(8) + ) u_prim_reg_we_check ( + .clk_i(clk_i), + .rst_ni(rst_ni), + .oh_i (reg_we_check), + .en_i (reg_we && !addrmiss), + .err_o (reg_we_err) + ); + + logic err_q; + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + err_q <= '0; + end else if (intg_err || reg_we_err) begin + err_q <= 1'b1; + end + end + + // integrity error output is permanent and should be used for alert generation + // register errors are transactional + assign intg_err_o = err_q | intg_err | reg_we_err; + + // outgoing integrity generation + tlul_pkg::tl_d2h_t tl_o_pre; + tlul_rsp_intg_gen #( + .EnableRspIntgGen(1), + .EnableDataIntgGen(1) + ) u_rsp_intg_gen ( + .tl_i(tl_o_pre), + .tl_o(tl_o) + ); + + assign tl_reg_h2d = tl_i; + assign tl_o_pre = tl_reg_d2h; + + tlul_adapter_reg #( + .RegAw(AW), + .RegDw(DW), + .EnableDataIntgGen(0) + ) u_reg_if ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + .tl_i (tl_reg_h2d), + .tl_o (tl_reg_d2h), + + .en_ifetch_i(prim_mubi_pkg::MuBi4False), + .intg_error_o(), + + .we_o (reg_we), + .re_o (reg_re), + .addr_o (reg_addr), + .wdata_o (reg_wdata), + .be_o (reg_be), + .busy_i (reg_busy), + .rdata_i (reg_rdata), + .error_i (reg_error) + ); + + // cdc oversampling signals + + assign reg_rdata = reg_rdata_next ; + assign reg_error = addrmiss | wr_err | intg_err; + + // Define SW related signals + // Format: __{wd|we|qs} + // or _{wd|we|qs} if field == 1 or 0 + logic csr0_we; + logic csr0_field0_qs; + logic csr0_field0_wd; + logic csr0_field1_qs; + logic csr0_field1_wd; + logic csr0_field2_qs; + logic csr0_field2_wd; + logic [9:0] csr0_field3_qs; + logic [9:0] csr0_field3_wd; + logic [10:0] csr0_field4_qs; + logic [10:0] csr0_field4_wd; + logic csr1_we; + logic [6:0] csr1_field0_qs; + logic [6:0] csr1_field0_wd; + logic csr1_field1_qs; + logic csr1_field1_wd; + logic [6:0] csr1_field2_qs; + logic [6:0] csr1_field2_wd; + logic csr1_field3_qs; + logic csr1_field3_wd; + logic [15:0] csr1_field4_qs; + logic [15:0] csr1_field4_wd; + logic csr2_we; + logic csr2_qs; + logic csr2_wd; + logic csr3_we; + logic [2:0] csr3_field0_qs; + logic [2:0] csr3_field0_wd; + logic [9:0] csr3_field1_qs; + logic [9:0] csr3_field1_wd; + logic csr3_field2_qs; + logic csr3_field2_wd; + logic csr3_field3_qs; + logic csr3_field4_qs; + logic csr3_field5_qs; + logic csr3_field6_qs; + logic csr3_field7_qs; + logic csr3_field8_qs; + logic csr4_we; + logic [9:0] csr4_field0_qs; + logic [9:0] csr4_field0_wd; + logic csr4_field1_qs; + logic csr4_field1_wd; + logic csr4_field2_qs; + logic csr4_field2_wd; + logic csr4_field3_qs; + logic csr4_field3_wd; + logic csr5_we; + logic [5:0] csr5_field0_qs; + logic [5:0] csr5_field0_wd; + logic [1:0] csr5_field1_qs; + logic [1:0] csr5_field1_wd; + logic csr5_field2_qs; + logic [2:0] csr5_field3_qs; + logic csr5_field4_qs; + logic csr5_field5_qs; + logic [15:0] csr5_field6_qs; + logic [15:0] csr5_field6_wd; + logic csr6_we; + logic [9:0] csr6_field0_qs; + logic [9:0] csr6_field0_wd; + logic csr6_field1_qs; + logic csr6_field1_wd; + logic csr6_field2_qs; + logic csr6_field2_wd; + logic [15:0] csr6_field3_qs; + logic [15:0] csr6_field3_wd; + logic [5:0] csr7_field0_qs; + logic [2:0] csr7_field1_qs; + logic csr7_field2_qs; + logic csr7_field3_qs; + + // Register instances + // R[csr0]: V(False) + // F[field0]: 0:0 + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (1'h0), + .Mubi (1'b0) + ) u_csr0_field0 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (csr0_we), + .wd (csr0_field0_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.csr0.field0.q), + .ds (), + + // to register interface (read) + .qs (csr0_field0_qs) + ); + + // F[field1]: 1:1 + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (1'h0), + .Mubi (1'b0) + ) u_csr0_field1 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (csr0_we), + .wd (csr0_field1_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.csr0.field1.q), + .ds (), + + // to register interface (read) + .qs (csr0_field1_qs) + ); + + // F[field2]: 2:2 + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (1'h0), + .Mubi (1'b0) + ) u_csr0_field2 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (csr0_we), + .wd (csr0_field2_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.csr0.field2.q), + .ds (), + + // to register interface (read) + .qs (csr0_field2_qs) + ); + + // F[field3]: 13:4 + prim_subreg #( + .DW (10), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (10'h0), + .Mubi (1'b0) + ) u_csr0_field3 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (csr0_we), + .wd (csr0_field3_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.csr0.field3.q), + .ds (), + + // to register interface (read) + .qs (csr0_field3_qs) + ); + + // F[field4]: 26:16 + prim_subreg #( + .DW (11), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (11'h0), + .Mubi (1'b0) + ) u_csr0_field4 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (csr0_we), + .wd (csr0_field4_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.csr0.field4.q), + .ds (), + + // to register interface (read) + .qs (csr0_field4_qs) + ); + + + // R[csr1]: V(False) + // F[field0]: 6:0 + prim_subreg #( + .DW (7), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (7'h0), + .Mubi (1'b0) + ) u_csr1_field0 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (csr1_we), + .wd (csr1_field0_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.csr1.field0.q), + .ds (), + + // to register interface (read) + .qs (csr1_field0_qs) + ); + + // F[field1]: 7:7 + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (1'h0), + .Mubi (1'b0) + ) u_csr1_field1 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (csr1_we), + .wd (csr1_field1_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.csr1.field1.q), + .ds (), + + // to register interface (read) + .qs (csr1_field1_qs) + ); + + // F[field2]: 14:8 + prim_subreg #( + .DW (7), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (7'h0), + .Mubi (1'b0) + ) u_csr1_field2 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (csr1_we), + .wd (csr1_field2_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.csr1.field2.q), + .ds (), + + // to register interface (read) + .qs (csr1_field2_qs) + ); + + // F[field3]: 15:15 + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (1'h0), + .Mubi (1'b0) + ) u_csr1_field3 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (csr1_we), + .wd (csr1_field3_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.csr1.field3.q), + .ds (), + + // to register interface (read) + .qs (csr1_field3_qs) + ); + + // F[field4]: 31:16 + prim_subreg #( + .DW (16), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (16'h0), + .Mubi (1'b0) + ) u_csr1_field4 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (csr1_we), + .wd (csr1_field4_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.csr1.field4.q), + .ds (), + + // to register interface (read) + .qs (csr1_field4_qs) + ); + + + // R[csr2]: V(False) + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (1'h0), + .Mubi (1'b0) + ) u_csr2 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (csr2_we), + .wd (csr2_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.csr2.q), + .ds (), + + // to register interface (read) + .qs (csr2_qs) + ); + + + // R[csr3]: V(False) + // F[field0]: 2:0 + prim_subreg #( + .DW (3), + .SwAccess(prim_subreg_pkg::SwAccessW1C), + .RESVAL (3'h0), + .Mubi (1'b0) + ) u_csr3_field0 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (csr3_we), + .wd (csr3_field0_wd), + + // from internal hardware + .de (hw2reg.csr3.field0.de), + .d (hw2reg.csr3.field0.d), + + // to internal hardware + .qe (), + .q (reg2hw.csr3.field0.q), + .ds (), + + // to register interface (read) + .qs (csr3_field0_qs) + ); + + // F[field1]: 13:4 + prim_subreg #( + .DW (10), + .SwAccess(prim_subreg_pkg::SwAccessW1C), + .RESVAL (10'h0), + .Mubi (1'b0) + ) u_csr3_field1 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (csr3_we), + .wd (csr3_field1_wd), + + // from internal hardware + .de (hw2reg.csr3.field1.de), + .d (hw2reg.csr3.field1.d), + + // to internal hardware + .qe (), + .q (reg2hw.csr3.field1.q), + .ds (), + + // to register interface (read) + .qs (csr3_field1_qs) + ); + + // F[field2]: 16:16 + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessW1C), + .RESVAL (1'h0), + .Mubi (1'b0) + ) u_csr3_field2 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (csr3_we), + .wd (csr3_field2_wd), + + // from internal hardware + .de (hw2reg.csr3.field2.de), + .d (hw2reg.csr3.field2.d), + + // to internal hardware + .qe (), + .q (reg2hw.csr3.field2.q), + .ds (), + + // to register interface (read) + .qs (csr3_field2_qs) + ); + + // F[field3]: 17:17 + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessRO), + .RESVAL (1'h0), + .Mubi (1'b0) + ) u_csr3_field3 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (1'b0), + .wd ('0), + + // from internal hardware + .de (hw2reg.csr3.field3.de), + .d (hw2reg.csr3.field3.d), + + // to internal hardware + .qe (), + .q (reg2hw.csr3.field3.q), + .ds (), + + // to register interface (read) + .qs (csr3_field3_qs) + ); + + // F[field4]: 18:18 + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessRO), + .RESVAL (1'h0), + .Mubi (1'b0) + ) u_csr3_field4 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (1'b0), + .wd ('0), + + // from internal hardware + .de (hw2reg.csr3.field4.de), + .d (hw2reg.csr3.field4.d), + + // to internal hardware + .qe (), + .q (reg2hw.csr3.field4.q), + .ds (), + + // to register interface (read) + .qs (csr3_field4_qs) + ); + + // F[field5]: 19:19 + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessRO), + .RESVAL (1'h0), + .Mubi (1'b0) + ) u_csr3_field5 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (1'b0), + .wd ('0), + + // from internal hardware + .de (hw2reg.csr3.field5.de), + .d (hw2reg.csr3.field5.d), + + // to internal hardware + .qe (), + .q (reg2hw.csr3.field5.q), + .ds (), + + // to register interface (read) + .qs (csr3_field5_qs) + ); + + // F[field6]: 20:20 + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessRO), + .RESVAL (1'h0), + .Mubi (1'b0) + ) u_csr3_field6 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (1'b0), + .wd ('0), + + // from internal hardware + .de (hw2reg.csr3.field6.de), + .d (hw2reg.csr3.field6.d), + + // to internal hardware + .qe (), + .q (reg2hw.csr3.field6.q), + .ds (), + + // to register interface (read) + .qs (csr3_field6_qs) + ); + + // F[field7]: 21:21 + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessRO), + .RESVAL (1'h0), + .Mubi (1'b0) + ) u_csr3_field7 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (1'b0), + .wd ('0), + + // from internal hardware + .de (hw2reg.csr3.field7.de), + .d (hw2reg.csr3.field7.d), + + // to internal hardware + .qe (), + .q (reg2hw.csr3.field7.q), + .ds (), + + // to register interface (read) + .qs (csr3_field7_qs) + ); + + // F[field8]: 22:22 + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessRO), + .RESVAL (1'h0), + .Mubi (1'b0) + ) u_csr3_field8 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (1'b0), + .wd ('0), + + // from internal hardware + .de (hw2reg.csr3.field8.de), + .d (hw2reg.csr3.field8.d), + + // to internal hardware + .qe (), + .q (reg2hw.csr3.field8.q), + .ds (), + + // to register interface (read) + .qs (csr3_field8_qs) + ); + + + // R[csr4]: V(False) + // F[field0]: 9:0 + prim_subreg #( + .DW (10), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (10'h0), + .Mubi (1'b0) + ) u_csr4_field0 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (csr4_we), + .wd (csr4_field0_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.csr4.field0.q), + .ds (), + + // to register interface (read) + .qs (csr4_field0_qs) + ); + + // F[field1]: 12:12 + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (1'h0), + .Mubi (1'b0) + ) u_csr4_field1 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (csr4_we), + .wd (csr4_field1_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.csr4.field1.q), + .ds (), + + // to register interface (read) + .qs (csr4_field1_qs) + ); + + // F[field2]: 13:13 + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (1'h0), + .Mubi (1'b0) + ) u_csr4_field2 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (csr4_we), + .wd (csr4_field2_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.csr4.field2.q), + .ds (), + + // to register interface (read) + .qs (csr4_field2_qs) + ); + + // F[field3]: 14:14 + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (1'h0), + .Mubi (1'b0) + ) u_csr4_field3 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (csr4_we), + .wd (csr4_field3_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.csr4.field3.q), + .ds (), + + // to register interface (read) + .qs (csr4_field3_qs) + ); + + + // R[csr5]: V(False) + // F[field0]: 5:0 + prim_subreg #( + .DW (6), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (6'h0), + .Mubi (1'b0) + ) u_csr5_field0 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (csr5_we), + .wd (csr5_field0_wd), + + // from internal hardware + .de (hw2reg.csr5.field0.de), + .d (hw2reg.csr5.field0.d), + + // to internal hardware + .qe (), + .q (reg2hw.csr5.field0.q), + .ds (), + + // to register interface (read) + .qs (csr5_field0_qs) + ); + + // F[field1]: 7:6 + prim_subreg #( + .DW (2), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (2'h0), + .Mubi (1'b0) + ) u_csr5_field1 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (csr5_we), + .wd (csr5_field1_wd), + + // from internal hardware + .de (hw2reg.csr5.field1.de), + .d (hw2reg.csr5.field1.d), + + // to internal hardware + .qe (), + .q (reg2hw.csr5.field1.q), + .ds (), + + // to register interface (read) + .qs (csr5_field1_qs) + ); + + // F[field2]: 8:8 + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessRO), + .RESVAL (1'h0), + .Mubi (1'b0) + ) u_csr5_field2 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (1'b0), + .wd ('0), + + // from internal hardware + .de (hw2reg.csr5.field2.de), + .d (hw2reg.csr5.field2.d), + + // to internal hardware + .qe (), + .q (reg2hw.csr5.field2.q), + .ds (), + + // to register interface (read) + .qs (csr5_field2_qs) + ); + + // F[field3]: 11:9 + prim_subreg #( + .DW (3), + .SwAccess(prim_subreg_pkg::SwAccessRO), + .RESVAL (3'h0), + .Mubi (1'b0) + ) u_csr5_field3 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (1'b0), + .wd ('0), + + // from internal hardware + .de (hw2reg.csr5.field3.de), + .d (hw2reg.csr5.field3.d), + + // to internal hardware + .qe (), + .q (reg2hw.csr5.field3.q), + .ds (), + + // to register interface (read) + .qs (csr5_field3_qs) + ); + + // F[field4]: 12:12 + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessRO), + .RESVAL (1'h0), + .Mubi (1'b0) + ) u_csr5_field4 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (1'b0), + .wd ('0), + + // from internal hardware + .de (hw2reg.csr5.field4.de), + .d (hw2reg.csr5.field4.d), + + // to internal hardware + .qe (), + .q (reg2hw.csr5.field4.q), + .ds (), + + // to register interface (read) + .qs (csr5_field4_qs) + ); + + // F[field5]: 13:13 + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessRO), + .RESVAL (1'h0), + .Mubi (1'b0) + ) u_csr5_field5 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (1'b0), + .wd ('0), + + // from internal hardware + .de (hw2reg.csr5.field5.de), + .d (hw2reg.csr5.field5.d), + + // to internal hardware + .qe (), + .q (reg2hw.csr5.field5.q), + .ds (), + + // to register interface (read) + .qs (csr5_field5_qs) + ); + + // F[field6]: 31:16 + prim_subreg #( + .DW (16), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (16'h0), + .Mubi (1'b0) + ) u_csr5_field6 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (csr5_we), + .wd (csr5_field6_wd), + + // from internal hardware + .de (hw2reg.csr5.field6.de), + .d (hw2reg.csr5.field6.d), + + // to internal hardware + .qe (), + .q (reg2hw.csr5.field6.q), + .ds (), + + // to register interface (read) + .qs (csr5_field6_qs) + ); + + + // R[csr6]: V(False) + // F[field0]: 9:0 + prim_subreg #( + .DW (10), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (10'h0), + .Mubi (1'b0) + ) u_csr6_field0 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (csr6_we), + .wd (csr6_field0_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.csr6.field0.q), + .ds (), + + // to register interface (read) + .qs (csr6_field0_qs) + ); + + // F[field1]: 11:11 + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (1'h0), + .Mubi (1'b0) + ) u_csr6_field1 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (csr6_we), + .wd (csr6_field1_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.csr6.field1.q), + .ds (), + + // to register interface (read) + .qs (csr6_field1_qs) + ); + + // F[field2]: 12:12 + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (1'h0), + .Mubi (1'b0) + ) u_csr6_field2 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (csr6_we), + .wd (csr6_field2_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.csr6.field2.q), + .ds (), + + // to register interface (read) + .qs (csr6_field2_qs) + ); + + // F[field3]: 31:16 + prim_subreg #( + .DW (16), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (16'h0), + .Mubi (1'b0) + ) u_csr6_field3 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (csr6_we), + .wd (csr6_field3_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.csr6.field3.q), + .ds (), + + // to register interface (read) + .qs (csr6_field3_qs) + ); + + + // R[csr7]: V(False) + // F[field0]: 5:0 + prim_subreg #( + .DW (6), + .SwAccess(prim_subreg_pkg::SwAccessRO), + .RESVAL (6'h0), + .Mubi (1'b0) + ) u_csr7_field0 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (1'b0), + .wd ('0), + + // from internal hardware + .de (hw2reg.csr7.field0.de), + .d (hw2reg.csr7.field0.d), + + // to internal hardware + .qe (), + .q (reg2hw.csr7.field0.q), + .ds (), + + // to register interface (read) + .qs (csr7_field0_qs) + ); + + // F[field1]: 10:8 + prim_subreg #( + .DW (3), + .SwAccess(prim_subreg_pkg::SwAccessRO), + .RESVAL (3'h0), + .Mubi (1'b0) + ) u_csr7_field1 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (1'b0), + .wd ('0), + + // from internal hardware + .de (hw2reg.csr7.field1.de), + .d (hw2reg.csr7.field1.d), + + // to internal hardware + .qe (), + .q (reg2hw.csr7.field1.q), + .ds (), + + // to register interface (read) + .qs (csr7_field1_qs) + ); + + // F[field2]: 14:14 + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessRO), + .RESVAL (1'h0), + .Mubi (1'b0) + ) u_csr7_field2 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (1'b0), + .wd ('0), + + // from internal hardware + .de (hw2reg.csr7.field2.de), + .d (hw2reg.csr7.field2.d), + + // to internal hardware + .qe (), + .q (reg2hw.csr7.field2.q), + .ds (), + + // to register interface (read) + .qs (csr7_field2_qs) + ); + + // F[field3]: 15:15 + prim_subreg #( + .DW (1), + .SwAccess(prim_subreg_pkg::SwAccessRO), + .RESVAL (1'h0), + .Mubi (1'b0) + ) u_csr7_field3 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (1'b0), + .wd ('0), + + // from internal hardware + .de (hw2reg.csr7.field3.de), + .d (hw2reg.csr7.field3.d), + + // to internal hardware + .qe (), + .q (reg2hw.csr7.field3.q), + .ds (), + + // to register interface (read) + .qs (csr7_field3_qs) + ); + + + + logic [7:0] addr_hit; + always_comb begin + addr_hit = '0; + addr_hit[0] = (reg_addr == CALIPTRA_OTP_CTRL_CSR0_OFFSET); + addr_hit[1] = (reg_addr == CALIPTRA_OTP_CTRL_CSR1_OFFSET); + addr_hit[2] = (reg_addr == CALIPTRA_OTP_CTRL_CSR2_OFFSET); + addr_hit[3] = (reg_addr == CALIPTRA_OTP_CTRL_CSR3_OFFSET); + addr_hit[4] = (reg_addr == CALIPTRA_OTP_CTRL_CSR4_OFFSET); + addr_hit[5] = (reg_addr == CALIPTRA_OTP_CTRL_CSR5_OFFSET); + addr_hit[6] = (reg_addr == CALIPTRA_OTP_CTRL_CSR6_OFFSET); + addr_hit[7] = (reg_addr == CALIPTRA_OTP_CTRL_CSR7_OFFSET); + end + + assign addrmiss = (reg_re || reg_we) ? ~|addr_hit : 1'b0 ; + + // Check sub-word write is permitted + always_comb begin + wr_err = (reg_we & + ((addr_hit[0] & (|(CALIPTRA_OTP_CTRL_PRIM_PERMIT[0] & ~reg_be))) | + (addr_hit[1] & (|(CALIPTRA_OTP_CTRL_PRIM_PERMIT[1] & ~reg_be))) | + (addr_hit[2] & (|(CALIPTRA_OTP_CTRL_PRIM_PERMIT[2] & ~reg_be))) | + (addr_hit[3] & (|(CALIPTRA_OTP_CTRL_PRIM_PERMIT[3] & ~reg_be))) | + (addr_hit[4] & (|(CALIPTRA_OTP_CTRL_PRIM_PERMIT[4] & ~reg_be))) | + (addr_hit[5] & (|(CALIPTRA_OTP_CTRL_PRIM_PERMIT[5] & ~reg_be))) | + (addr_hit[6] & (|(CALIPTRA_OTP_CTRL_PRIM_PERMIT[6] & ~reg_be))) | + (addr_hit[7] & (|(CALIPTRA_OTP_CTRL_PRIM_PERMIT[7] & ~reg_be))))); + end + + // Generate write-enables + assign csr0_we = addr_hit[0] & reg_we & !reg_error; + + assign csr0_field0_wd = reg_wdata[0]; + + assign csr0_field1_wd = reg_wdata[1]; + + assign csr0_field2_wd = reg_wdata[2]; + + assign csr0_field3_wd = reg_wdata[13:4]; + + assign csr0_field4_wd = reg_wdata[26:16]; + assign csr1_we = addr_hit[1] & reg_we & !reg_error; + + assign csr1_field0_wd = reg_wdata[6:0]; + + assign csr1_field1_wd = reg_wdata[7]; + + assign csr1_field2_wd = reg_wdata[14:8]; + + assign csr1_field3_wd = reg_wdata[15]; + + assign csr1_field4_wd = reg_wdata[31:16]; + assign csr2_we = addr_hit[2] & reg_we & !reg_error; + + assign csr2_wd = reg_wdata[0]; + assign csr3_we = addr_hit[3] & reg_we & !reg_error; + + assign csr3_field0_wd = reg_wdata[2:0]; + + assign csr3_field1_wd = reg_wdata[13:4]; + + assign csr3_field2_wd = reg_wdata[16]; + assign csr4_we = addr_hit[4] & reg_we & !reg_error; + + assign csr4_field0_wd = reg_wdata[9:0]; + + assign csr4_field1_wd = reg_wdata[12]; + + assign csr4_field2_wd = reg_wdata[13]; + + assign csr4_field3_wd = reg_wdata[14]; + assign csr5_we = addr_hit[5] & reg_we & !reg_error; + + assign csr5_field0_wd = reg_wdata[5:0]; + + assign csr5_field1_wd = reg_wdata[7:6]; + + assign csr5_field6_wd = reg_wdata[31:16]; + assign csr6_we = addr_hit[6] & reg_we & !reg_error; + + assign csr6_field0_wd = reg_wdata[9:0]; + + assign csr6_field1_wd = reg_wdata[11]; + + assign csr6_field2_wd = reg_wdata[12]; + + assign csr6_field3_wd = reg_wdata[31:16]; + + // Assign write-enables to checker logic vector. + always_comb begin + reg_we_check = '0; + reg_we_check[0] = csr0_we; + reg_we_check[1] = csr1_we; + reg_we_check[2] = csr2_we; + reg_we_check[3] = csr3_we; + reg_we_check[4] = csr4_we; + reg_we_check[5] = csr5_we; + reg_we_check[6] = csr6_we; + reg_we_check[7] = 1'b0; + end + + // Read data return + always_comb begin + reg_rdata_next = '0; + unique case (1'b1) + addr_hit[0]: begin + reg_rdata_next[0] = csr0_field0_qs; + reg_rdata_next[1] = csr0_field1_qs; + reg_rdata_next[2] = csr0_field2_qs; + reg_rdata_next[13:4] = csr0_field3_qs; + reg_rdata_next[26:16] = csr0_field4_qs; + end + + addr_hit[1]: begin + reg_rdata_next[6:0] = csr1_field0_qs; + reg_rdata_next[7] = csr1_field1_qs; + reg_rdata_next[14:8] = csr1_field2_qs; + reg_rdata_next[15] = csr1_field3_qs; + reg_rdata_next[31:16] = csr1_field4_qs; + end + + addr_hit[2]: begin + reg_rdata_next[0] = csr2_qs; + end + + addr_hit[3]: begin + reg_rdata_next[2:0] = csr3_field0_qs; + reg_rdata_next[13:4] = csr3_field1_qs; + reg_rdata_next[16] = csr3_field2_qs; + reg_rdata_next[17] = csr3_field3_qs; + reg_rdata_next[18] = csr3_field4_qs; + reg_rdata_next[19] = csr3_field5_qs; + reg_rdata_next[20] = csr3_field6_qs; + reg_rdata_next[21] = csr3_field7_qs; + reg_rdata_next[22] = csr3_field8_qs; + end + + addr_hit[4]: begin + reg_rdata_next[9:0] = csr4_field0_qs; + reg_rdata_next[12] = csr4_field1_qs; + reg_rdata_next[13] = csr4_field2_qs; + reg_rdata_next[14] = csr4_field3_qs; + end + + addr_hit[5]: begin + reg_rdata_next[5:0] = csr5_field0_qs; + reg_rdata_next[7:6] = csr5_field1_qs; + reg_rdata_next[8] = csr5_field2_qs; + reg_rdata_next[11:9] = csr5_field3_qs; + reg_rdata_next[12] = csr5_field4_qs; + reg_rdata_next[13] = csr5_field5_qs; + reg_rdata_next[31:16] = csr5_field6_qs; + end + + addr_hit[6]: begin + reg_rdata_next[9:0] = csr6_field0_qs; + reg_rdata_next[11] = csr6_field1_qs; + reg_rdata_next[12] = csr6_field2_qs; + reg_rdata_next[31:16] = csr6_field3_qs; + end + + addr_hit[7]: begin + reg_rdata_next[5:0] = csr7_field0_qs; + reg_rdata_next[10:8] = csr7_field1_qs; + reg_rdata_next[14] = csr7_field2_qs; + reg_rdata_next[15] = csr7_field3_qs; + end + + default: begin + reg_rdata_next = '1; + end + endcase + end + + // shadow busy + logic shadow_busy; + assign shadow_busy = 1'b0; + + // register busy + assign reg_busy = shadow_busy; + + // Unused signal tieoff + + // wdata / byte enable are not always fully used + // add a blanket unused statement to handle lint waivers + logic unused_wdata; + logic unused_be; + assign unused_wdata = ^reg_wdata; + assign unused_be = ^reg_be; + + // Assertions for Register Interface + `ASSERT_PULSE(wePulse, reg_we, clk_i, !rst_ni) + `ASSERT_PULSE(rePulse, reg_re, clk_i, !rst_ni) + + `ASSERT(reAfterRv, $rose(reg_re || reg_we) |=> tl_o_pre.d_valid, clk_i, !rst_ni) + + `ASSERT(en2addrHit, (reg_we || reg_re) |-> $onehot0(addr_hit), clk_i, !rst_ni) + + // this is formulated as an assumption such that the FPV testbenches do disprove this + // property by mistake + //`ASSUME(reqParity, tl_reg_h2d.a_valid |-> tl_reg_h2d.a_user.chk_en == tlul_pkg::CheckDis) + +endmodule diff --git a/src/fuse_ctrl/rtl/caliptra_otp_ctrl_reg_pkg.sv b/src/fuse_ctrl/rtl/caliptra_otp_ctrl_reg_pkg.sv new file mode 100644 index 000000000..0803cd62d --- /dev/null +++ b/src/fuse_ctrl/rtl/caliptra_otp_ctrl_reg_pkg.sv @@ -0,0 +1,818 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Register Package auto-generated by `reggen` containing data structure + +package caliptra_otp_ctrl_reg_pkg; + + // Param list + parameter int NumSramKeyReqSlots = 4; + parameter int OtpByteAddrWidth = 12; + parameter int NumErrorEntries = 8; + parameter int NumDaiWords = 2; + parameter int NumDigestWords = 2; + parameter int NumSwCfgWindowWords = 1024; + parameter int NumPart = 6; + parameter int NumPartUnbuf = 2; + parameter int NumPartBuf = 4; + parameter int VendorTestOffset = 0; + parameter int VendorTestSize = 64; + parameter int ScratchOffset = 0; + parameter int ScratchSize = 56; + parameter int VendorTestDigestOffset = 56; + parameter int VendorTestDigestSize = 8; + parameter int NonSecretFusesOffset = 64; + parameter int NonSecretFusesSize = 3792; + parameter int FmcKeyManifestSvnOffset = 64; + parameter int FmcKeyManifestSvnSize = 4; + parameter int RuntimeSvnOffset = 68; + parameter int RuntimeSvnSize = 16; + parameter int LmsVerifyOffset = 84; + parameter int LmsVerifySize = 4; + parameter int LmsRevocationOffset = 88; + parameter int LmsRevocationSize = 4; + parameter int KeyManifestPkHashMaskOffset = 92; + parameter int KeyManifestPkHashMaskSize = 4; + parameter int OwnerPkHashOffset = 96; + parameter int OwnerPkHashSize = 48; + parameter int IdevidCertAttrOffset = 144; + parameter int IdevidCertAttrSize = 96; + parameter int IdevidManufHsmIdOffset = 240; + parameter int IdevidManufHsmIdSize = 16; + parameter int SocSteppingIdOffset = 256; + parameter int SocSteppingIdSize = 4; + parameter int NonSecretFusesDigestOffset = 3848; + parameter int NonSecretFusesDigestSize = 8; + parameter int Secret0Offset = 3856; + parameter int Secret0Size = 56; + parameter int UdsSeedOffset = 3856; + parameter int UdsSeedSize = 48; + parameter int Secret0DigestOffset = 3904; + parameter int Secret0DigestSize = 8; + parameter int Secret1Offset = 3912; + parameter int Secret1Size = 40; + parameter int FieldEntropyOffset = 3912; + parameter int FieldEntropySize = 32; + parameter int Secret1DigestOffset = 3944; + parameter int Secret1DigestSize = 8; + parameter int Secret2Offset = 3952; + parameter int Secret2Size = 56; + parameter int KeyManifestPkHashOffset = 3952; + parameter int KeyManifestPkHashSize = 48; + parameter int Secret2DigestOffset = 4000; + parameter int Secret2DigestSize = 8; + parameter int LifeCycleOffset = 4008; + parameter int LifeCycleSize = 88; + parameter int LcTransitionCntOffset = 4008; + parameter int LcTransitionCntSize = 48; + parameter int LcStateOffset = 4056; + parameter int LcStateSize = 40; + parameter int NumAlerts = 5; + + // Address widths within the block + parameter int CoreAw = 13; + parameter int PrimAw = 5; + + /////////////////////////////////////////////// + // Typedefs for registers for core interface // + /////////////////////////////////////////////// + + typedef struct packed { + struct packed { + logic q; + } otp_error; + struct packed { + logic q; + } otp_operation_done; + } caliptra_otp_ctrl_reg2hw_intr_state_reg_t; + + typedef struct packed { + struct packed { + logic q; + } otp_error; + struct packed { + logic q; + } otp_operation_done; + } caliptra_otp_ctrl_reg2hw_intr_enable_reg_t; + + typedef struct packed { + struct packed { + logic q; + logic qe; + } otp_error; + struct packed { + logic q; + logic qe; + } otp_operation_done; + } caliptra_otp_ctrl_reg2hw_intr_test_reg_t; + + typedef struct packed { + struct packed { + logic q; + logic qe; + } recov_prim_otp_alert; + struct packed { + logic q; + logic qe; + } fatal_prim_otp_alert; + struct packed { + logic q; + logic qe; + } fatal_bus_integ_error; + struct packed { + logic q; + logic qe; + } fatal_check_error; + struct packed { + logic q; + logic qe; + } fatal_macro_error; + } caliptra_otp_ctrl_reg2hw_alert_test_reg_t; + + typedef struct packed { + logic q; + logic qe; + } caliptra_otp_ctrl_reg2hw_direct_access_regwen_reg_t; + + typedef struct packed { + struct packed { + logic q; + logic qe; + } digest; + struct packed { + logic q; + logic qe; + } wr; + struct packed { + logic q; + logic qe; + } rd; + } caliptra_otp_ctrl_reg2hw_direct_access_cmd_reg_t; + + typedef struct packed { + logic [11:0] q; + } caliptra_otp_ctrl_reg2hw_direct_access_address_reg_t; + + typedef struct packed { + logic [31:0] q; + } caliptra_otp_ctrl_reg2hw_direct_access_wdata_mreg_t; + + typedef struct packed { + struct packed { + logic q; + logic qe; + } consistency; + struct packed { + logic q; + logic qe; + } integrity; + } caliptra_otp_ctrl_reg2hw_check_trigger_reg_t; + + typedef struct packed { + logic [31:0] q; + } caliptra_otp_ctrl_reg2hw_check_timeout_reg_t; + + typedef struct packed { + logic [31:0] q; + } caliptra_otp_ctrl_reg2hw_integrity_check_period_reg_t; + + typedef struct packed { + logic [31:0] q; + } caliptra_otp_ctrl_reg2hw_consistency_check_period_reg_t; + + typedef struct packed { + logic q; + } caliptra_otp_ctrl_reg2hw_vendor_test_read_lock_reg_t; + + typedef struct packed { + logic q; + } caliptra_otp_ctrl_reg2hw_non_secret_fuses_read_lock_reg_t; + + typedef struct packed { + struct packed { + logic d; + logic de; + } otp_operation_done; + struct packed { + logic d; + logic de; + } otp_error; + } caliptra_otp_ctrl_hw2reg_intr_state_reg_t; + + typedef struct packed { + struct packed { + logic d; + } vendor_test_error; + struct packed { + logic d; + } non_secret_fuses_error; + struct packed { + logic d; + } secret0_error; + struct packed { + logic d; + } secret1_error; + struct packed { + logic d; + } secret2_error; + struct packed { + logic d; + } life_cycle_error; + struct packed { + logic d; + } dai_error; + struct packed { + logic d; + } lci_error; + struct packed { + logic d; + } timeout_error; + struct packed { + logic d; + } lfsr_fsm_error; + struct packed { + logic d; + } scrambling_fsm_error; + struct packed { + logic d; + } key_deriv_fsm_error; + struct packed { + logic d; + } bus_integ_error; + struct packed { + logic d; + } dai_idle; + struct packed { + logic d; + } check_pending; + } caliptra_otp_ctrl_hw2reg_status_reg_t; + + typedef struct packed { + logic [2:0] d; + } caliptra_otp_ctrl_hw2reg_err_code_mreg_t; + + typedef struct packed { + logic d; + } caliptra_otp_ctrl_hw2reg_direct_access_regwen_reg_t; + + typedef struct packed { + logic [31:0] d; + } caliptra_otp_ctrl_hw2reg_direct_access_rdata_mreg_t; + + typedef struct packed { + logic [31:0] d; + } caliptra_otp_ctrl_hw2reg_vendor_test_digest_mreg_t; + + typedef struct packed { + logic [31:0] d; + } caliptra_otp_ctrl_hw2reg_non_secret_fuses_digest_mreg_t; + + typedef struct packed { + logic [31:0] d; + } caliptra_otp_ctrl_hw2reg_secret0_digest_mreg_t; + + typedef struct packed { + logic [31:0] d; + } caliptra_otp_ctrl_hw2reg_secret1_digest_mreg_t; + + typedef struct packed { + logic [31:0] d; + } caliptra_otp_ctrl_hw2reg_secret2_digest_mreg_t; + + // Register -> HW type for core interface + typedef struct packed { + caliptra_otp_ctrl_reg2hw_intr_state_reg_t intr_state; // [203:202] + caliptra_otp_ctrl_reg2hw_intr_enable_reg_t intr_enable; // [201:200] + caliptra_otp_ctrl_reg2hw_intr_test_reg_t intr_test; // [199:196] + caliptra_otp_ctrl_reg2hw_alert_test_reg_t alert_test; // [195:186] + caliptra_otp_ctrl_reg2hw_direct_access_regwen_reg_t direct_access_regwen; // [185:184] + caliptra_otp_ctrl_reg2hw_direct_access_cmd_reg_t direct_access_cmd; // [183:178] + caliptra_otp_ctrl_reg2hw_direct_access_address_reg_t direct_access_address; // [177:166] + caliptra_otp_ctrl_reg2hw_direct_access_wdata_mreg_t [1:0] direct_access_wdata; // [165:102] + caliptra_otp_ctrl_reg2hw_check_trigger_reg_t check_trigger; // [101:98] + caliptra_otp_ctrl_reg2hw_check_timeout_reg_t check_timeout; // [97:66] + caliptra_otp_ctrl_reg2hw_integrity_check_period_reg_t integrity_check_period; // [65:34] + caliptra_otp_ctrl_reg2hw_consistency_check_period_reg_t consistency_check_period; // [33:2] + caliptra_otp_ctrl_reg2hw_vendor_test_read_lock_reg_t vendor_test_read_lock; // [1:1] + caliptra_otp_ctrl_reg2hw_non_secret_fuses_read_lock_reg_t non_secret_fuses_read_lock; // [0:0] + } caliptra_otp_ctrl_core_reg2hw_t; + + // HW -> register type for core interface + typedef struct packed { + caliptra_otp_ctrl_hw2reg_intr_state_reg_t intr_state; // [427:424] + caliptra_otp_ctrl_hw2reg_status_reg_t status; // [423:409] + caliptra_otp_ctrl_hw2reg_err_code_mreg_t [7:0] err_code; // [408:385] + caliptra_otp_ctrl_hw2reg_direct_access_regwen_reg_t direct_access_regwen; // [384:384] + caliptra_otp_ctrl_hw2reg_direct_access_rdata_mreg_t [1:0] direct_access_rdata; // [383:320] + caliptra_otp_ctrl_hw2reg_vendor_test_digest_mreg_t [1:0] vendor_test_digest; // [319:256] + caliptra_otp_ctrl_hw2reg_non_secret_fuses_digest_mreg_t [1:0] + non_secret_fuses_digest; // [255:192] + caliptra_otp_ctrl_hw2reg_secret0_digest_mreg_t [1:0] secret0_digest; // [191:128] + caliptra_otp_ctrl_hw2reg_secret1_digest_mreg_t [1:0] secret1_digest; // [127:64] + caliptra_otp_ctrl_hw2reg_secret2_digest_mreg_t [1:0] secret2_digest; // [63:0] + } caliptra_otp_ctrl_core_hw2reg_t; + + // Register offsets for core interface + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_INTR_STATE_OFFSET = 13'h 0; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_INTR_ENABLE_OFFSET = 13'h 4; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_INTR_TEST_OFFSET = 13'h 8; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ALERT_TEST_OFFSET = 13'h c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_STATUS_OFFSET = 13'h 10; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ERR_CODE_0_OFFSET = 13'h 14; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ERR_CODE_1_OFFSET = 13'h 18; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ERR_CODE_2_OFFSET = 13'h 1c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ERR_CODE_3_OFFSET = 13'h 20; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ERR_CODE_4_OFFSET = 13'h 24; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ERR_CODE_5_OFFSET = 13'h 28; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ERR_CODE_6_OFFSET = 13'h 2c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ERR_CODE_7_OFFSET = 13'h 30; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_REGWEN_OFFSET = 13'h 34; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_CMD_OFFSET = 13'h 38; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_ADDRESS_OFFSET = 13'h 3c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_WDATA_0_OFFSET = 13'h 40; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_WDATA_1_OFFSET = 13'h 44; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_0_OFFSET = 13'h 48; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_1_OFFSET = 13'h 4c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_CHECK_TRIGGER_REGWEN_OFFSET = 13'h 50; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_CHECK_TRIGGER_OFFSET = 13'h 54; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_CHECK_REGWEN_OFFSET = 13'h 58; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_CHECK_TIMEOUT_OFFSET = 13'h 5c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_INTEGRITY_CHECK_PERIOD_OFFSET = 13'h 60; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_CONSISTENCY_CHECK_PERIOD_OFFSET = 13'h 64; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_VENDOR_TEST_READ_LOCK_OFFSET = 13'h 68; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_READ_LOCK_OFFSET = 13'h 6c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_0_OFFSET = 13'h 70; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_1_OFFSET = 13'h 74; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_0_OFFSET = 13'h 78; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_1_OFFSET = 13'h 7c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET0_DIGEST_0_OFFSET = 13'h 80; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET0_DIGEST_1_OFFSET = 13'h 84; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET1_DIGEST_0_OFFSET = 13'h 88; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET1_DIGEST_1_OFFSET = 13'h 8c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET2_DIGEST_0_OFFSET = 13'h 90; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET2_DIGEST_1_OFFSET = 13'h 94; + + // Reset values for hwext registers and their fields for core interface + parameter logic [1:0] CALIPTRA_OTP_CTRL_INTR_TEST_RESVAL = 2'h 0; + parameter logic [0:0] CALIPTRA_OTP_CTRL_INTR_TEST_OTP_OPERATION_DONE_RESVAL = 1'h 0; + parameter logic [0:0] CALIPTRA_OTP_CTRL_INTR_TEST_OTP_ERROR_RESVAL = 1'h 0; + parameter logic [4:0] CALIPTRA_OTP_CTRL_ALERT_TEST_RESVAL = 5'h 0; + parameter logic [0:0] CALIPTRA_OTP_CTRL_ALERT_TEST_FATAL_MACRO_ERROR_RESVAL = 1'h 0; + parameter logic [0:0] CALIPTRA_OTP_CTRL_ALERT_TEST_FATAL_CHECK_ERROR_RESVAL = 1'h 0; + parameter logic [0:0] CALIPTRA_OTP_CTRL_ALERT_TEST_FATAL_BUS_INTEG_ERROR_RESVAL = 1'h 0; + parameter logic [0:0] CALIPTRA_OTP_CTRL_ALERT_TEST_FATAL_PRIM_OTP_ALERT_RESVAL = 1'h 0; + parameter logic [0:0] CALIPTRA_OTP_CTRL_ALERT_TEST_RECOV_PRIM_OTP_ALERT_RESVAL = 1'h 0; + parameter logic [14:0] CALIPTRA_OTP_CTRL_STATUS_RESVAL = 15'h 0; + parameter logic [0:0] CALIPTRA_OTP_CTRL_STATUS_VENDOR_TEST_ERROR_RESVAL = 1'h 0; + parameter logic [0:0] CALIPTRA_OTP_CTRL_STATUS_NON_SECRET_FUSES_ERROR_RESVAL = 1'h 0; + parameter logic [0:0] CALIPTRA_OTP_CTRL_STATUS_SECRET0_ERROR_RESVAL = 1'h 0; + parameter logic [0:0] CALIPTRA_OTP_CTRL_STATUS_SECRET1_ERROR_RESVAL = 1'h 0; + parameter logic [0:0] CALIPTRA_OTP_CTRL_STATUS_SECRET2_ERROR_RESVAL = 1'h 0; + parameter logic [0:0] CALIPTRA_OTP_CTRL_STATUS_LIFE_CYCLE_ERROR_RESVAL = 1'h 0; + parameter logic [0:0] CALIPTRA_OTP_CTRL_STATUS_DAI_ERROR_RESVAL = 1'h 0; + parameter logic [0:0] CALIPTRA_OTP_CTRL_STATUS_LCI_ERROR_RESVAL = 1'h 0; + parameter logic [0:0] CALIPTRA_OTP_CTRL_STATUS_TIMEOUT_ERROR_RESVAL = 1'h 0; + parameter logic [0:0] CALIPTRA_OTP_CTRL_STATUS_LFSR_FSM_ERROR_RESVAL = 1'h 0; + parameter logic [0:0] CALIPTRA_OTP_CTRL_STATUS_SCRAMBLING_FSM_ERROR_RESVAL = 1'h 0; + parameter logic [0:0] CALIPTRA_OTP_CTRL_STATUS_KEY_DERIV_FSM_ERROR_RESVAL = 1'h 0; + parameter logic [0:0] CALIPTRA_OTP_CTRL_STATUS_BUS_INTEG_ERROR_RESVAL = 1'h 0; + parameter logic [0:0] CALIPTRA_OTP_CTRL_STATUS_DAI_IDLE_RESVAL = 1'h 0; + parameter logic [0:0] CALIPTRA_OTP_CTRL_STATUS_CHECK_PENDING_RESVAL = 1'h 0; + parameter logic [2:0] CALIPTRA_OTP_CTRL_ERR_CODE_0_RESVAL = 3'h 0; + parameter logic [2:0] CALIPTRA_OTP_CTRL_ERR_CODE_0_ERR_CODE_0_RESVAL = 3'h 0; + parameter logic [2:0] CALIPTRA_OTP_CTRL_ERR_CODE_1_RESVAL = 3'h 0; + parameter logic [2:0] CALIPTRA_OTP_CTRL_ERR_CODE_1_ERR_CODE_1_RESVAL = 3'h 0; + parameter logic [2:0] CALIPTRA_OTP_CTRL_ERR_CODE_2_RESVAL = 3'h 0; + parameter logic [2:0] CALIPTRA_OTP_CTRL_ERR_CODE_2_ERR_CODE_2_RESVAL = 3'h 0; + parameter logic [2:0] CALIPTRA_OTP_CTRL_ERR_CODE_3_RESVAL = 3'h 0; + parameter logic [2:0] CALIPTRA_OTP_CTRL_ERR_CODE_3_ERR_CODE_3_RESVAL = 3'h 0; + parameter logic [2:0] CALIPTRA_OTP_CTRL_ERR_CODE_4_RESVAL = 3'h 0; + parameter logic [2:0] CALIPTRA_OTP_CTRL_ERR_CODE_4_ERR_CODE_4_RESVAL = 3'h 0; + parameter logic [2:0] CALIPTRA_OTP_CTRL_ERR_CODE_5_RESVAL = 3'h 0; + parameter logic [2:0] CALIPTRA_OTP_CTRL_ERR_CODE_5_ERR_CODE_5_RESVAL = 3'h 0; + parameter logic [2:0] CALIPTRA_OTP_CTRL_ERR_CODE_6_RESVAL = 3'h 0; + parameter logic [2:0] CALIPTRA_OTP_CTRL_ERR_CODE_6_ERR_CODE_6_RESVAL = 3'h 0; + parameter logic [2:0] CALIPTRA_OTP_CTRL_ERR_CODE_7_RESVAL = 3'h 0; + parameter logic [2:0] CALIPTRA_OTP_CTRL_ERR_CODE_7_ERR_CODE_7_RESVAL = 3'h 0; + parameter logic [0:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_REGWEN_RESVAL = 1'h 1; + parameter logic [0:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_REGWEN_DIRECT_ACCESS_REGWEN_RESVAL = 1'h 1; + parameter logic [2:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_CMD_RESVAL = 3'h 0; + parameter logic [0:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_CMD_RD_RESVAL = 1'h 0; + parameter logic [0:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_CMD_WR_RESVAL = 1'h 0; + parameter logic [0:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_CMD_DIGEST_RESVAL = 1'h 0; + parameter logic [31:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_0_RESVAL = 32'h 0; + parameter logic [31:0] + CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_0_DIRECT_ACCESS_RDATA_0_RESVAL = + 32'h 0; + parameter logic [31:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_1_RESVAL = 32'h 0; + parameter logic [31:0] + CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_1_DIRECT_ACCESS_RDATA_1_RESVAL = + 32'h 0; + parameter logic [1:0] CALIPTRA_OTP_CTRL_CHECK_TRIGGER_RESVAL = 2'h 0; + parameter logic [0:0] CALIPTRA_OTP_CTRL_CHECK_TRIGGER_INTEGRITY_RESVAL = 1'h 0; + parameter logic [0:0] CALIPTRA_OTP_CTRL_CHECK_TRIGGER_CONSISTENCY_RESVAL = 1'h 0; + parameter logic [31:0] CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_0_RESVAL = 32'h 0; + parameter logic [31:0] + CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_0_VENDOR_TEST_DIGEST_0_RESVAL = + 32'h 0; + parameter logic [31:0] CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_1_RESVAL = 32'h 0; + parameter logic [31:0] + CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_1_VENDOR_TEST_DIGEST_1_RESVAL = + 32'h 0; + parameter logic [31:0] CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_0_RESVAL = 32'h 0; + parameter logic [31:0] + CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_0_NON_SECRET_FUSES_DIGEST_0_RESVAL = + 32'h 0; + parameter logic [31:0] CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_1_RESVAL = 32'h 0; + parameter logic [31:0] + CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_1_NON_SECRET_FUSES_DIGEST_1_RESVAL = + 32'h 0; + parameter logic [31:0] CALIPTRA_OTP_CTRL_SECRET0_DIGEST_0_RESVAL = 32'h 0; + parameter logic [31:0] CALIPTRA_OTP_CTRL_SECRET0_DIGEST_0_SECRET0_DIGEST_0_RESVAL = 32'h 0; + parameter logic [31:0] CALIPTRA_OTP_CTRL_SECRET0_DIGEST_1_RESVAL = 32'h 0; + parameter logic [31:0] CALIPTRA_OTP_CTRL_SECRET0_DIGEST_1_SECRET0_DIGEST_1_RESVAL = 32'h 0; + parameter logic [31:0] CALIPTRA_OTP_CTRL_SECRET1_DIGEST_0_RESVAL = 32'h 0; + parameter logic [31:0] CALIPTRA_OTP_CTRL_SECRET1_DIGEST_0_SECRET1_DIGEST_0_RESVAL = 32'h 0; + parameter logic [31:0] CALIPTRA_OTP_CTRL_SECRET1_DIGEST_1_RESVAL = 32'h 0; + parameter logic [31:0] CALIPTRA_OTP_CTRL_SECRET1_DIGEST_1_SECRET1_DIGEST_1_RESVAL = 32'h 0; + parameter logic [31:0] CALIPTRA_OTP_CTRL_SECRET2_DIGEST_0_RESVAL = 32'h 0; + parameter logic [31:0] CALIPTRA_OTP_CTRL_SECRET2_DIGEST_0_SECRET2_DIGEST_0_RESVAL = 32'h 0; + parameter logic [31:0] CALIPTRA_OTP_CTRL_SECRET2_DIGEST_1_RESVAL = 32'h 0; + parameter logic [31:0] CALIPTRA_OTP_CTRL_SECRET2_DIGEST_1_SECRET2_DIGEST_1_RESVAL = 32'h 0; + + // Window parameters for core interface + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SW_CFG_WINDOW_OFFSET = 13'h 1000; + parameter int unsigned CALIPTRA_OTP_CTRL_SW_CFG_WINDOW_SIZE = 'h 1000; + parameter int unsigned CALIPTRA_OTP_CTRL_SW_CFG_WINDOW_IDX = 0; + + // Register index for core interface + typedef enum int { + CALIPTRA_OTP_CTRL_INTR_STATE, + CALIPTRA_OTP_CTRL_INTR_ENABLE, + CALIPTRA_OTP_CTRL_INTR_TEST, + CALIPTRA_OTP_CTRL_ALERT_TEST, + CALIPTRA_OTP_CTRL_STATUS, + CALIPTRA_OTP_CTRL_ERR_CODE_0, + CALIPTRA_OTP_CTRL_ERR_CODE_1, + CALIPTRA_OTP_CTRL_ERR_CODE_2, + CALIPTRA_OTP_CTRL_ERR_CODE_3, + CALIPTRA_OTP_CTRL_ERR_CODE_4, + CALIPTRA_OTP_CTRL_ERR_CODE_5, + CALIPTRA_OTP_CTRL_ERR_CODE_6, + CALIPTRA_OTP_CTRL_ERR_CODE_7, + CALIPTRA_OTP_CTRL_DIRECT_ACCESS_REGWEN, + CALIPTRA_OTP_CTRL_DIRECT_ACCESS_CMD, + CALIPTRA_OTP_CTRL_DIRECT_ACCESS_ADDRESS, + CALIPTRA_OTP_CTRL_DIRECT_ACCESS_WDATA_0, + CALIPTRA_OTP_CTRL_DIRECT_ACCESS_WDATA_1, + CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_0, + CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_1, + CALIPTRA_OTP_CTRL_CHECK_TRIGGER_REGWEN, + CALIPTRA_OTP_CTRL_CHECK_TRIGGER, + CALIPTRA_OTP_CTRL_CHECK_REGWEN, + CALIPTRA_OTP_CTRL_CHECK_TIMEOUT, + CALIPTRA_OTP_CTRL_INTEGRITY_CHECK_PERIOD, + CALIPTRA_OTP_CTRL_CONSISTENCY_CHECK_PERIOD, + CALIPTRA_OTP_CTRL_VENDOR_TEST_READ_LOCK, + CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_READ_LOCK, + CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_0, + CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_1, + CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_0, + CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_1, + CALIPTRA_OTP_CTRL_SECRET0_DIGEST_0, + CALIPTRA_OTP_CTRL_SECRET0_DIGEST_1, + CALIPTRA_OTP_CTRL_SECRET1_DIGEST_0, + CALIPTRA_OTP_CTRL_SECRET1_DIGEST_1, + CALIPTRA_OTP_CTRL_SECRET2_DIGEST_0, + CALIPTRA_OTP_CTRL_SECRET2_DIGEST_1 + } caliptra_otp_ctrl_core_id_e; + + // Register width information to check illegal writes for core interface + parameter logic [3:0] CALIPTRA_OTP_CTRL_CORE_PERMIT [38] = '{ + 4'b 0001, // index[ 0] CALIPTRA_OTP_CTRL_INTR_STATE + 4'b 0001, // index[ 1] CALIPTRA_OTP_CTRL_INTR_ENABLE + 4'b 0001, // index[ 2] CALIPTRA_OTP_CTRL_INTR_TEST + 4'b 0001, // index[ 3] CALIPTRA_OTP_CTRL_ALERT_TEST + 4'b 0011, // index[ 4] CALIPTRA_OTP_CTRL_STATUS + 4'b 0001, // index[ 5] CALIPTRA_OTP_CTRL_ERR_CODE_0 + 4'b 0001, // index[ 6] CALIPTRA_OTP_CTRL_ERR_CODE_1 + 4'b 0001, // index[ 7] CALIPTRA_OTP_CTRL_ERR_CODE_2 + 4'b 0001, // index[ 8] CALIPTRA_OTP_CTRL_ERR_CODE_3 + 4'b 0001, // index[ 9] CALIPTRA_OTP_CTRL_ERR_CODE_4 + 4'b 0001, // index[10] CALIPTRA_OTP_CTRL_ERR_CODE_5 + 4'b 0001, // index[11] CALIPTRA_OTP_CTRL_ERR_CODE_6 + 4'b 0001, // index[12] CALIPTRA_OTP_CTRL_ERR_CODE_7 + 4'b 0001, // index[13] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_REGWEN + 4'b 0001, // index[14] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_CMD + 4'b 0011, // index[15] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_ADDRESS + 4'b 1111, // index[16] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_WDATA_0 + 4'b 1111, // index[17] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_WDATA_1 + 4'b 1111, // index[18] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_0 + 4'b 1111, // index[19] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_1 + 4'b 0001, // index[20] CALIPTRA_OTP_CTRL_CHECK_TRIGGER_REGWEN + 4'b 0001, // index[21] CALIPTRA_OTP_CTRL_CHECK_TRIGGER + 4'b 0001, // index[22] CALIPTRA_OTP_CTRL_CHECK_REGWEN + 4'b 1111, // index[23] CALIPTRA_OTP_CTRL_CHECK_TIMEOUT + 4'b 1111, // index[24] CALIPTRA_OTP_CTRL_INTEGRITY_CHECK_PERIOD + 4'b 1111, // index[25] CALIPTRA_OTP_CTRL_CONSISTENCY_CHECK_PERIOD + 4'b 0001, // index[26] CALIPTRA_OTP_CTRL_VENDOR_TEST_READ_LOCK + 4'b 0001, // index[27] CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_READ_LOCK + 4'b 1111, // index[28] CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_0 + 4'b 1111, // index[29] CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_1 + 4'b 1111, // index[30] CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_0 + 4'b 1111, // index[31] CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_1 + 4'b 1111, // index[32] CALIPTRA_OTP_CTRL_SECRET0_DIGEST_0 + 4'b 1111, // index[33] CALIPTRA_OTP_CTRL_SECRET0_DIGEST_1 + 4'b 1111, // index[34] CALIPTRA_OTP_CTRL_SECRET1_DIGEST_0 + 4'b 1111, // index[35] CALIPTRA_OTP_CTRL_SECRET1_DIGEST_1 + 4'b 1111, // index[36] CALIPTRA_OTP_CTRL_SECRET2_DIGEST_0 + 4'b 1111 // index[37] CALIPTRA_OTP_CTRL_SECRET2_DIGEST_1 + }; + + /////////////////////////////////////////////// + // Typedefs for registers for prim interface // + /////////////////////////////////////////////// + + typedef struct packed { + struct packed { + logic [10:0] q; + } field4; + struct packed { + logic [9:0] q; + } field3; + struct packed { + logic q; + } field2; + struct packed { + logic q; + } field1; + struct packed { + logic q; + } field0; + } caliptra_otp_ctrl_reg2hw_csr0_reg_t; + + typedef struct packed { + struct packed { + logic [15:0] q; + } field4; + struct packed { + logic q; + } field3; + struct packed { + logic [6:0] q; + } field2; + struct packed { + logic q; + } field1; + struct packed { + logic [6:0] q; + } field0; + } caliptra_otp_ctrl_reg2hw_csr1_reg_t; + + typedef struct packed { + logic q; + } caliptra_otp_ctrl_reg2hw_csr2_reg_t; + + typedef struct packed { + struct packed { + logic q; + } field8; + struct packed { + logic q; + } field7; + struct packed { + logic q; + } field6; + struct packed { + logic q; + } field5; + struct packed { + logic q; + } field4; + struct packed { + logic q; + } field3; + struct packed { + logic q; + } field2; + struct packed { + logic [9:0] q; + } field1; + struct packed { + logic [2:0] q; + } field0; + } caliptra_otp_ctrl_reg2hw_csr3_reg_t; + + typedef struct packed { + struct packed { + logic q; + } field3; + struct packed { + logic q; + } field2; + struct packed { + logic q; + } field1; + struct packed { + logic [9:0] q; + } field0; + } caliptra_otp_ctrl_reg2hw_csr4_reg_t; + + typedef struct packed { + struct packed { + logic [15:0] q; + } field6; + struct packed { + logic q; + } field5; + struct packed { + logic q; + } field4; + struct packed { + logic [2:0] q; + } field3; + struct packed { + logic q; + } field2; + struct packed { + logic [1:0] q; + } field1; + struct packed { + logic [5:0] q; + } field0; + } caliptra_otp_ctrl_reg2hw_csr5_reg_t; + + typedef struct packed { + struct packed { + logic [15:0] q; + } field3; + struct packed { + logic q; + } field2; + struct packed { + logic q; + } field1; + struct packed { + logic [9:0] q; + } field0; + } caliptra_otp_ctrl_reg2hw_csr6_reg_t; + + typedef struct packed { + struct packed { + logic q; + } field3; + struct packed { + logic q; + } field2; + struct packed { + logic [2:0] q; + } field1; + struct packed { + logic [5:0] q; + } field0; + } caliptra_otp_ctrl_reg2hw_csr7_reg_t; + + typedef struct packed { + struct packed { + logic [2:0] d; + logic de; + } field0; + struct packed { + logic [9:0] d; + logic de; + } field1; + struct packed { + logic d; + logic de; + } field2; + struct packed { + logic d; + logic de; + } field3; + struct packed { + logic d; + logic de; + } field4; + struct packed { + logic d; + logic de; + } field5; + struct packed { + logic d; + logic de; + } field6; + struct packed { + logic d; + logic de; + } field7; + struct packed { + logic d; + logic de; + } field8; + } caliptra_otp_ctrl_hw2reg_csr3_reg_t; + + typedef struct packed { + struct packed { + logic [5:0] d; + logic de; + } field0; + struct packed { + logic [1:0] d; + logic de; + } field1; + struct packed { + logic d; + logic de; + } field2; + struct packed { + logic [2:0] d; + logic de; + } field3; + struct packed { + logic d; + logic de; + } field4; + struct packed { + logic d; + logic de; + } field5; + struct packed { + logic [15:0] d; + logic de; + } field6; + } caliptra_otp_ctrl_hw2reg_csr5_reg_t; + + typedef struct packed { + struct packed { + logic [5:0] d; + logic de; + } field0; + struct packed { + logic [2:0] d; + logic de; + } field1; + struct packed { + logic d; + logic de; + } field2; + struct packed { + logic d; + logic de; + } field3; + } caliptra_otp_ctrl_hw2reg_csr7_reg_t; + + // Register -> HW type for prim interface + typedef struct packed { + caliptra_otp_ctrl_reg2hw_csr0_reg_t csr0; // [158:135] + caliptra_otp_ctrl_reg2hw_csr1_reg_t csr1; // [134:103] + caliptra_otp_ctrl_reg2hw_csr2_reg_t csr2; // [102:102] + caliptra_otp_ctrl_reg2hw_csr3_reg_t csr3; // [101:82] + caliptra_otp_ctrl_reg2hw_csr4_reg_t csr4; // [81:69] + caliptra_otp_ctrl_reg2hw_csr5_reg_t csr5; // [68:39] + caliptra_otp_ctrl_reg2hw_csr6_reg_t csr6; // [38:11] + caliptra_otp_ctrl_reg2hw_csr7_reg_t csr7; // [10:0] + } caliptra_otp_ctrl_prim_reg2hw_t; + + // HW -> register type for prim interface + typedef struct packed { + caliptra_otp_ctrl_hw2reg_csr3_reg_t csr3; // [80:52] + caliptra_otp_ctrl_hw2reg_csr5_reg_t csr5; // [51:15] + caliptra_otp_ctrl_hw2reg_csr7_reg_t csr7; // [14:0] + } caliptra_otp_ctrl_prim_hw2reg_t; + + // Register offsets for prim interface + parameter logic [PrimAw-1:0] CALIPTRA_OTP_CTRL_CSR0_OFFSET = 5'h 0; + parameter logic [PrimAw-1:0] CALIPTRA_OTP_CTRL_CSR1_OFFSET = 5'h 4; + parameter logic [PrimAw-1:0] CALIPTRA_OTP_CTRL_CSR2_OFFSET = 5'h 8; + parameter logic [PrimAw-1:0] CALIPTRA_OTP_CTRL_CSR3_OFFSET = 5'h c; + parameter logic [PrimAw-1:0] CALIPTRA_OTP_CTRL_CSR4_OFFSET = 5'h 10; + parameter logic [PrimAw-1:0] CALIPTRA_OTP_CTRL_CSR5_OFFSET = 5'h 14; + parameter logic [PrimAw-1:0] CALIPTRA_OTP_CTRL_CSR6_OFFSET = 5'h 18; + parameter logic [PrimAw-1:0] CALIPTRA_OTP_CTRL_CSR7_OFFSET = 5'h 1c; + + // Register index for prim interface + typedef enum int { + CALIPTRA_OTP_CTRL_CSR0, + CALIPTRA_OTP_CTRL_CSR1, + CALIPTRA_OTP_CTRL_CSR2, + CALIPTRA_OTP_CTRL_CSR3, + CALIPTRA_OTP_CTRL_CSR4, + CALIPTRA_OTP_CTRL_CSR5, + CALIPTRA_OTP_CTRL_CSR6, + CALIPTRA_OTP_CTRL_CSR7 + } caliptra_otp_ctrl_prim_id_e; + + // Register width information to check illegal writes for prim interface + parameter logic [3:0] CALIPTRA_OTP_CTRL_PRIM_PERMIT [8] = '{ + 4'b 1111, // index[0] CALIPTRA_OTP_CTRL_CSR0 + 4'b 1111, // index[1] CALIPTRA_OTP_CTRL_CSR1 + 4'b 0001, // index[2] CALIPTRA_OTP_CTRL_CSR2 + 4'b 0111, // index[3] CALIPTRA_OTP_CTRL_CSR3 + 4'b 0011, // index[4] CALIPTRA_OTP_CTRL_CSR4 + 4'b 1111, // index[5] CALIPTRA_OTP_CTRL_CSR5 + 4'b 1111, // index[6] CALIPTRA_OTP_CTRL_CSR6 + 4'b 0011 // index[7] CALIPTRA_OTP_CTRL_CSR7 + }; + +endpackage diff --git a/src/fuse_ctrl/rtl/otp_ctrl.sv b/src/fuse_ctrl/rtl/otp_ctrl.sv new file mode 100644 index 000000000..2b1e4fef6 --- /dev/null +++ b/src/fuse_ctrl/rtl/otp_ctrl.sv @@ -0,0 +1,1674 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// OTP Controller top. +// + +`include "prim_assert.sv" + +module otp_ctrl + import otp_ctrl_pkg::*; + import otp_ctrl_reg_pkg::*; + import otp_ctrl_part_pkg::*; + import axi_pkg::*; + import otp_ctrl_axi_pkg::*; +#( + // Enable asynchronous transitions on alerts. + parameter logic [NumAlerts-1:0] AlertAsyncOn = {NumAlerts{1'b1}}, + // Compile time random constants, to be overriden by topgen. + parameter lfsr_seed_t RndCnstLfsrSeed = RndCnstLfsrSeedDefault, + parameter lfsr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + parameter scrmbl_key_init_t RndCnstScrmblKeyInit = RndCnstScrmblKeyInitDefault, + // Hexfile file to initialize the OTP macro. + // Note that the hexdump needs to account for ECC. + parameter MemInitFile = "" +) ( + // OTP clock + input clk_i, + input rst_ni, + // EDN clock and interface + logic clk_edn_i, + logic rst_edn_ni, + output edn_pkg::edn_req_t edn_o, + input edn_pkg::edn_rsp_t edn_i, + // Bus Interface + + /* + input tlul_pkg::tl_h2d_t core_tl_i, + output tlul_pkg::tl_d2h_t core_tl_o, + */ + input logic core_dv, + input logic [AW-1:0] core_addr, + input logic core_write, + //input otp_ctrl_axi_pkg::axi_a_user_t core_a_user, + input logic [IW-1:0] core_id, + input logic [DW-1:0] core_wdata, + input logic [BC-1:0] core_wstrb, + output logic [DW-1:0] core_rdata, + input logic core_last, + output logic core_hld, + output logic core_err, + //output otp_ctrl_axi_pkg::axi_d_user_t ore_d_user, + + /* + input tlul_pkg::tl_h2d_t prim_tl_i, + output tlul_pkg::tl_d2h_t prim_tl_o, + */ + input logic prim_dv, + input logic [AW-1:0] prim_addr, + input logic prim_write, + //input otp_ctrl_axi_pkg::axi_a_user_t prim_a_user, + input logic [IW-1:0] prim_id, + input logic [DW-1:0] prim_wdata, + input logic [BC-1:0] prim_wstrb, + output logic [DW-1:0] prim_rdata, + input logic prim_last, + output logic prim_hld, + output logic prim_err, + //output otp_ctrl_axi_pkg::axi_d_user_t prim_d_user, + + // Interrupt Requests + output logic intr_otp_operation_done_o, + output logic intr_otp_error_o, + // Alerts + input prim_alert_pkg::alert_rx_t [NumAlerts-1:0] alert_rx_i, + output prim_alert_pkg::alert_tx_t [NumAlerts-1:0] alert_tx_o, + // Observability to AST + input ast_pkg::ast_obs_ctrl_t obs_ctrl_i, + output logic [7:0] otp_obs_o, + // Macro-specific power sequencing signals to/from AST. + output otp_ast_req_t otp_ast_pwr_seq_o, + input otp_ast_rsp_t otp_ast_pwr_seq_h_i, + // Power manager interface (inputs are synced to OTP clock domain) + input pwrmgr_pkg::pwr_otp_req_t pwr_otp_i, + output pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o, + // Macro-specific test registers going to lifecycle TAP + input lc_otp_vendor_test_req_t lc_otp_vendor_test_i, + output lc_otp_vendor_test_rsp_t lc_otp_vendor_test_o, + // Lifecycle transition command interface + input lc_otp_program_req_t lc_otp_program_i, + output lc_otp_program_rsp_t lc_otp_program_o, + // Lifecycle broadcast inputs + // SEC_CM: LC_CTRL.INTERSIG.MUBI + input lc_ctrl_pkg::lc_tx_t lc_creator_seed_sw_rw_en_i, + input lc_ctrl_pkg::lc_tx_t lc_owner_seed_sw_rw_en_i, + input lc_ctrl_pkg::lc_tx_t lc_seed_hw_rd_en_i, + input lc_ctrl_pkg::lc_tx_t lc_dft_en_i, + input lc_ctrl_pkg::lc_tx_t lc_escalate_en_i, + input lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i, + // OTP broadcast outputs + // SEC_CM: TOKEN_VALID.CTRL.MUBI + output otp_lc_data_t otp_lc_data_o, + output otp_keymgr_key_t otp_keymgr_key_o, + // Scrambling key requests + input flash_otp_key_req_t flash_otp_key_i, + output flash_otp_key_rsp_t flash_otp_key_o, + input sram_otp_key_req_t [NumSramKeyReqSlots-1:0] sram_otp_key_i, + output sram_otp_key_rsp_t [NumSramKeyReqSlots-1:0] sram_otp_key_o, + input otbn_otp_key_req_t otbn_otp_key_i, + output otbn_otp_key_rsp_t otbn_otp_key_o, + // Hardware config bits + output otp_broadcast_t otp_broadcast_o, + // External voltage for OTP + inout wire otp_ext_voltage_h_io, + // Scan + input scan_en_i, + input scan_rst_ni, + input prim_mubi_pkg::mubi4_t scanmode_i, + // Test-related GPIO output + output logic [OtpTestVectWidth-1:0] cio_test_o, + output logic [OtpTestVectWidth-1:0] cio_test_en_o +); + + import prim_mubi_pkg::*; + import prim_util_pkg::vbits; + + //////////////////////// + // Integration Checks // + //////////////////////// + + // This ensures that we can transfer scrambler data blocks in and out of OTP atomically. + `ASSERT_INIT(OtpIfWidth_A, OtpIfWidth == ScrmblBlockWidth) + + // These error codes need to be identical. + `ASSERT_INIT(ErrorCodeWidth_A, OtpErrWidth == prim_otp_pkg::ErrWidth) + `ASSERT_INIT(OtpErrorCode0_A, int'(NoError) == int'(prim_otp_pkg::NoError)) + `ASSERT_INIT(OtpErrorCode1_A, int'(MacroError) == int'(prim_otp_pkg::MacroError)) + `ASSERT_INIT(OtpErrorCode2_A, int'(MacroEccCorrError) == int'(prim_otp_pkg::MacroEccCorrError)) + `ASSERT_INIT(OtpErrorCode3_A, + int'(MacroEccUncorrError) == int'(prim_otp_pkg::MacroEccUncorrError)) + `ASSERT_INIT(OtpErrorCode4_A, + int'(MacroWriteBlankError) == int'(prim_otp_pkg::MacroWriteBlankError)) + + ///////////// + // Regfile // + ///////////// + + // We have one CSR node, one functional TL-UL window and a gate module for that window + logic [2:0] intg_error; + + /* + tlul_pkg::tl_h2d_t tl_win_h2d; + tlul_pkg::tl_d2h_t tl_win_d2h; + */ + + logic win_dv, + logic [AW-1:0] win_addr, + logic win_write, + //logic [UW-1:0] win_user, + logic [IW-1:0] win_id, + logic [DW-1:0] win_wdata, + logic [BC-1:0] win_wstrb, + logic [DW-1:0] win_rdata, + logic win_last, + logic win_hld, + logic win_err, + + + + + otp_ctrl_reg_pkg::otp_ctrl_core_reg2hw_t reg2hw; + otp_ctrl_reg_pkg::otp_ctrl_core_hw2reg_t hw2reg; + + // SEC_CM: DIRECT_ACCESS.CONFIG.REGWEN, CHECK_TRIGGER.CONFIG.REGWEN, CHECK.CONFIG.REGWEN + otp_ctrl_core_reg_top u_reg_core ( + .clk_i, + .rst_ni, + /* + .tl_i ( core_tl_i ), + .tl_o ( core_tl_o ), + .tl_win_o ( tl_win_h2d ), + .tl_win_i ( tl_win_d2h ), + */ + .core_dv ( core_dv ), + .core_addr ( core_addr ), + .core_write( core_write ), + //.core_user ( core_user ), + .core_id ( core_id ), + .core_wdata( core_wdata ), + .core_wstrb( core_wstrb ), + .core_rdata( core_rdata ), + .core_last ( core_last ), + .core_hld ( core_hld ), + .core_err ( core_err ), + .win_dv ( win_dv ), + .win_addr ( win_addr ), + .win_write ( win_write ), + //.win_user ( win_user ), + .win_id ( win_id ), + .win_wdata ( win_wdata ), + .win_wstrb ( win_wstrb ), + .win_rdata ( win_rdata ), + .win_last ( win_last ), + .win_hld ( win_hld ), + .win_err ( win_err ), + .reg2hw ( reg2hw ), + .hw2reg ( hw2reg ), + // SEC_CM: BUS.INTEGRITY + .intg_err_o( intg_error[0] ) + ); + + /////////////////////////////////////// + // Life Cycle Signal Synchronization // + /////////////////////////////////////// + + lc_ctrl_pkg::lc_tx_t lc_creator_seed_sw_rw_en, lc_owner_seed_sw_rw_en, + lc_seed_hw_rd_en, lc_check_byp_en; + lc_ctrl_pkg::lc_tx_t [2:0] lc_dft_en; + // NumAgents + lfsr timer and scrambling datapath. + lc_ctrl_pkg::lc_tx_t [NumAgentsIdx+1:0] lc_escalate_en, lc_escalate_en_synced; + // Single wire for gating assertions in arbitration and CDC primitives. + logic lc_escalate_en_any; + + prim_lc_sync #( + .NumCopies(NumAgentsIdx+2) + ) u_prim_lc_sync_escalate_en ( + .clk_i, + .rst_ni, + .lc_en_i(lc_escalate_en_i), + .lc_en_o(lc_escalate_en_synced) + ); + + prim_lc_sync #( + .NumCopies(1) + ) u_prim_lc_sync_creator_seed_sw_rw_en ( + .clk_i, + .rst_ni, + .lc_en_i(lc_creator_seed_sw_rw_en_i), + .lc_en_o({lc_creator_seed_sw_rw_en}) + ); + + prim_lc_sync #( + .NumCopies(1) + ) u_prim_lc_sync_owner_seed_sw_rw_en ( + .clk_i, + .rst_ni, + .lc_en_i(lc_owner_seed_sw_rw_en_i), + .lc_en_o({lc_owner_seed_sw_rw_en}) + ); + + prim_lc_sync #( + .NumCopies(1) + ) u_prim_lc_sync_seed_hw_rd_en ( + .clk_i, + .rst_ni, + .lc_en_i(lc_seed_hw_rd_en_i), + .lc_en_o({lc_seed_hw_rd_en}) + ); + + prim_lc_sync #( + .NumCopies(3) + ) u_prim_lc_sync_dft_en ( + .clk_i, + .rst_ni, + .lc_en_i(lc_dft_en_i), + .lc_en_o(lc_dft_en) + ); + + prim_lc_sync #( + .NumCopies(1) + ) u_prim_lc_sync_check_byp_en ( + .clk_i, + .rst_ni, + .lc_en_i(lc_check_byp_en_i), + .lc_en_o({lc_check_byp_en}) + ); + + ///////////////////////////////////// + // TL-UL SW partition select logic // + ///////////////////////////////////// + + // The SW partitions share the same TL-UL adapter. + logic tlul_req, tlul_gnt, tlul_rvalid; + logic [SwWindowAddrWidth-1:0] tlul_addr; + logic [1:0] tlul_rerror; + logic [31:0] tlul_rdata; + + import prim_mubi_pkg::MuBi4False; + axi_adapter_sram #( + .SramAw ( SwWindowAddrWidth ), + .SramDw ( 32 ), + .Outstanding ( 1 ), + .ByteAccess ( 0 ), + .ErrOnWrite ( 1 ) // No write accesses allowed here. + ) u_tlul_adapter_sram ( + .clk_i, + .rst_ni, + .en_ifetch_i ( MuBi4False ), + .axi_dv ( tl_win_h2d ), + .axi_addr ( tl_win_d2h ), + .axi_write (), + .axi_id (), + .axi_wdata (), + .axi_wstrb (), + .axi_rdata (), + .axi_last (), + .axi_hld (), + .axi_err (), + .req_o ( tlul_req ), + .gnt_i ( tlul_gnt ), + .we_o ( ), // unused + .addr_o ( tlul_addr ), + .wdata_o ( ), // unused + .wmask_o ( ), // unused + // SEC_CM: BUS.INTEGRITY + .intg_error_o ( intg_error[1] ), + .rdata_i ( tlul_rdata ), + .rvalid_i ( tlul_rvalid ), + .rerror_i ( tlul_rerror ), + .req_type_o ( ), + .rmw_in_progress_o( ) + ); + + logic [NumPart-1:0] axi_part_sel_oh; + for (genvar k = 0; k < NumPart; k++) begin : gen_part_sel + localparam logic [OtpByteAddrWidth:0] PartEnd = (OtpByteAddrWidth+1)'(PartInfo[k].offset) + + (OtpByteAddrWidth+1)'(PartInfo[k].size); + if (PartInfo[k].offset == 0) begin : gen_zero_offset + assign axi_part_sel_oh[k] = ({1'b0, {tlul_addr, 2'b00}} < PartEnd); + end else begin : gen_nonzero_offset + assign axi_part_sel_oh[k] = ({tlul_addr, 2'b00} >= PartInfo[k].offset) & + ({1'b0, {tlul_addr, 2'b00}} < PartEnd); + end + end + + `ASSERT(PartSelMustBeOnehot_A, $onehot0(axi_part_sel_oh)) + + logic [NumPartWidth-1:0] axi_part_idx; + caliptra_prim_arbiter_fixed #( + .N(NumPart), + .EnDataPort(0) + ) u_part_sel_idx ( + .clk_i, + .rst_ni, + .req_i ( axi_part_sel_oh ), + .data_i ( '{default: '0} ), + .gnt_o ( ), // unused + .idx_o ( axi_part_idx ), + .valid_o ( ), // unused + .data_o ( ), // unused + .ready_i ( 1'b0 ) + ); + + logic tlul_oob_err_d, tlul_oob_err_q; + logic [NumPart-1:0] part_axi_req, part_axi_gnt, part_axi_rvalid; + logic [SwWindowAddrWidth-1:0] part_axi_addr; + logic [NumPart-1:0][1:0] part_axi_rerror; + logic [NumPart-1:0][31:0] part_axi_rdata; + + always_comb begin : p_tlul_assign + // Send request to the correct partition. + part_axi_addr = tlul_addr; + part_axi_req = '0; + tlul_oob_err_d = 1'b0; + if (tlul_req) begin + if (axi_part_sel_oh != '0) begin + part_axi_req[axi_part_idx] = 1'b1; + end else begin + // Error out in the next cycle if address was out of bounds. + tlul_oob_err_d = 1'b1; + end + end + + // aggregate TL-UL responses + tlul_gnt = |part_axi_gnt | tlul_oob_err_q; + tlul_rvalid = |part_axi_rvalid | tlul_oob_err_q; + tlul_rerror = '0; + tlul_rdata = '0; + for (int k = 0; k < NumPart; k++) begin + tlul_rerror |= part_axi_rerror[k]; + tlul_rdata |= part_axi_rdata[k]; + end + end + + always_ff @(posedge clk_i or negedge rst_ni) begin : p_tlul_reg + if (!rst_ni) begin + tlul_oob_err_q <= 1'b0; + end else begin + tlul_oob_err_q <= tlul_oob_err_d; + end + end + + ////////////////////////////// + // Access Defaults and CSRs // + ////////////////////////////// + + // SEC_CM: ACCESS.CTRL.MUBI + part_access_t [NumPart-1:0] part_access_pre, part_access; + always_comb begin : p_access_control + // Assigns default and extracts named CSR read enables for SW_CFG partitions. + // SEC_CM: PART.MEM.REGREN + part_access_pre = named_part_access_pre(reg2hw); + + // Permanently lock DAI write and read access to the life cycle partition. + // The LC partition can only be read from and written to via the LC controller. + // SEC_CM: LC_PART.MEM.SW_NOACCESS + part_access_pre[LifeCycleIdx].write_lock = MuBi8True; + part_access_pre[LifeCycleIdx].read_lock = MuBi8True; + + // Special partitions for keymgr material only become writable when + // provisioning is enabled. + if (lc_ctrl_pkg::lc_tx_test_false_loose(lc_creator_seed_sw_rw_en)) begin + for (int k = 0; k < NumPart; k++) begin + if (PartInfo[k].iskeymgr_creator) begin + part_access_pre[k] = {2{prim_mubi_pkg::MuBi8True}}; + end + end + end + if (lc_ctrl_pkg::lc_tx_test_false_loose(lc_owner_seed_sw_rw_en)) begin + for (int k = 0; k < NumPart; k++) begin + if (PartInfo[k].iskeymgr_owner) begin + part_access_pre[k] = {2{prim_mubi_pkg::MuBi8True}}; + end + end + end + end + + // This prevents the synthesis tool from optimizing the multibit signals. + for (genvar k = 0; k < NumPart; k++) begin : gen_bufs + caliptra_prim_mubi8_sender #( + .AsyncOn(0) + ) u_prim_mubi8_sender_write_lock ( + .clk_i, + .rst_ni, + .mubi_i(part_access_pre[k].write_lock), + .mubi_o(part_access[k].write_lock) + ); + caliptra_prim_mubi8_sender #( + .AsyncOn(0) + ) u_prim_mubi8_sender_read_lock ( + .clk_i, + .rst_ni, + .mubi_i(part_access_pre[k].read_lock), + .mubi_o(part_access[k].read_lock) + ); + end + + ////////////////////// + // DAI-related CSRs // + ////////////////////// + + logic dai_idle; + logic dai_req; + dai_cmd_e dai_cmd; + logic [OtpByteAddrWidth-1:0] dai_addr; + logic [NumDaiWords-1:0][31:0] dai_wdata, dai_rdata; + logic direct_access_regwen_d, direct_access_regwen_q; + + // This is the HWEXT implementation of a RW0C regwen bit. + assign direct_access_regwen_d = (reg2hw.direct_access_regwen.qe && + !reg2hw.direct_access_regwen.q) ? 1'b0 : direct_access_regwen_q; + + // Any write to this register triggers a DAI command. + assign dai_req = reg2hw.direct_access_cmd.digest.qe | + reg2hw.direct_access_cmd.wr.qe | + reg2hw.direct_access_cmd.rd.qe; + + assign dai_cmd = dai_cmd_e'({reg2hw.direct_access_cmd.digest.q, + reg2hw.direct_access_cmd.wr.q, + reg2hw.direct_access_cmd.rd.q}); + + assign dai_addr = reg2hw.direct_access_address.q; + assign dai_wdata = reg2hw.direct_access_wdata; + + // The DAI and the LCI can initiate write transactions, which + // are critical and we must not power down if such transactions + // are pending. Hence, we signal the LCI/DAI idle state to the + // power manager. This signal is flopped here as it has to + // cross a clock boundary to the power manager. + logic dai_prog_idle, lci_prog_idle, otp_idle_d, otp_idle_q; + assign otp_idle_d = lci_prog_idle & dai_prog_idle; + assign pwr_otp_o.otp_idle = otp_idle_q; + + always_ff @(posedge clk_i or negedge rst_ni) begin : p_idle_regwen_regs + if (!rst_ni) begin + otp_idle_q <= 1'b0; + // The regwen bit has to reset to 1 so that CSR accesses are enabled by default. + direct_access_regwen_q <= 1'b1; + end else begin + otp_idle_q <= otp_idle_d; + direct_access_regwen_q <= direct_access_regwen_d; + end + end + + ////////////////////////////////////// + // Ctrl/Status CSRs, Errors, Alerts // + ////////////////////////////////////// + + // Status and error reporting CSRs, error interrupt generation and alerts. + otp_err_e [NumPart+1:0] part_error; + logic [NumAgents-1:0] part_fsm_err; + logic [NumPart+1:0] part_errors_reduced; + logic otp_operation_done, otp_error; + logic fatal_macro_error_d, fatal_macro_error_q; + logic fatal_check_error_d, fatal_check_error_q; + logic fatal_bus_integ_error_d, fatal_bus_integ_error_q; + logic chk_pending, chk_timeout; + logic lfsr_fsm_err, scrmbl_fsm_err; + always_comb begin : p_errors_alerts + // Note: since these are all fatal alert events, we latch them and keep on sending + // alert events via the alert senders. These regs can only be cleared via a system reset. + fatal_macro_error_d = fatal_macro_error_q; + fatal_check_error_d = fatal_check_error_q; + fatal_bus_integ_error_d = fatal_bus_integ_error_q | (|intg_error); + // These are the per-partition buffered escalation inputs + lc_escalate_en = lc_escalate_en_synced; + // Need a single wire for gating assertions in arbitration and CDC primitives. + lc_escalate_en_any = 1'b0; + + // Aggregate all the macro alerts from the partitions + for (int k = 0; k < NumPart; k++) begin + // Filter for critical error codes that should not occur in the field. + fatal_macro_error_d |= part_error[k] == MacroError; + // While uncorrectable ECC errors are always reported, they do not trigger a fatal alert + // event in some partitions like the VENDOR_TEST partition. + if (PartInfo[k].integrity) begin + fatal_macro_error_d |= part_error[k] == MacroEccUncorrError; + end + end + // Aggregate all the macro alerts from the DAI/LCI + for (int k = NumPart; k < NumPart+2; k++) begin + // Filter for critical error codes that should not occur in the field. + fatal_macro_error_d |= part_error[k] inside {MacroError, MacroEccUncorrError}; + end + + // Aggregate all the remaining errors / alerts from the partitions and the DAI/LCI + for (int k = 0; k < NumPart+2; k++) begin + // Set the error bit if the error status of the corresponding partition is nonzero. + // Need to reverse the order here since the field enumeration in hw2reg.status is reversed. + part_errors_reduced[NumPart+1-k] = |part_error[k]; + // Filter for integrity and consistency check failures. + fatal_check_error_d |= part_error[k] inside {CheckFailError, FsmStateError}; + + // If a fatal alert has been observed in any of the partitions/FSMs, + // we locally trigger escalation within OTP, which moves all FSMs + // to a terminal error state. + if (fatal_macro_error_q || fatal_check_error_q) begin + lc_escalate_en[k] = lc_ctrl_pkg::On; + end + if (lc_ctrl_pkg::lc_tx_test_true_strict(lc_escalate_en[k])) begin + lc_escalate_en_any = 1'b1; + end + end + + // Errors from other non-partition FSMs. + fatal_check_error_d |= chk_timeout | + lfsr_fsm_err | + scrmbl_fsm_err | + (|part_fsm_err); + end + + // If we got an error, we trigger an interrupt. + logic [$bits(part_errors_reduced)+4-1:0] interrupt_triggers_d, interrupt_triggers_q; + + // This makes sure that interrupts are not sticky. + assign interrupt_triggers_d = { + part_errors_reduced, + chk_timeout, + lfsr_fsm_err, + scrmbl_fsm_err, + |part_fsm_err + }; + + assign otp_error = |(interrupt_triggers_d & ~interrupt_triggers_q); + + always_ff @(posedge clk_i or negedge rst_ni) begin : p_alert_regs + if (!rst_ni) begin + fatal_macro_error_q <= '0; + fatal_check_error_q <= '0; + fatal_bus_integ_error_q <= '0; + interrupt_triggers_q <= '0; + end else begin + fatal_macro_error_q <= fatal_macro_error_d; + fatal_check_error_q <= fatal_check_error_d; + fatal_bus_integ_error_q <= fatal_bus_integ_error_d; + interrupt_triggers_q <= interrupt_triggers_d; + end + end + + // CSR assignments are done in one combo process so that we can use + // the parameterized digest_assign task below without multiple driver issues. + logic unused_part_digest; + logic [NumPart-1:0][ScrmblBlockWidth-1:0] part_digest; + logic intr_state_otp_operation_done_d, intr_state_otp_operation_done_de; + logic intr_state_otp_error_d, intr_state_otp_error_de; + always_comb begin : p_csr_assign + // Not all partition digests are consumed, and assigning them to an unused_* signal in the + // function below does not seem to work for some linters. + unused_part_digest = ^part_digest; + // Assign named CSRs (like digests). + hw2reg = named_reg_assign(part_digest); + // DAI related CSRs + hw2reg.direct_access_rdata = dai_rdata; + // ANDing this state with dai_idle write-protects all DAI regs during pending operations. + hw2reg.direct_access_regwen.d = direct_access_regwen_q & dai_idle; + // Assign these to the status register. + hw2reg.status = {part_errors_reduced, + chk_timeout, + lfsr_fsm_err, + scrmbl_fsm_err, + part_fsm_err[KdiIdx], + fatal_bus_integ_error_q, + dai_idle, + chk_pending}; + // Error code registers. + hw2reg.err_code = part_error; + // Interrupt signals + hw2reg.intr_state.otp_operation_done.de = intr_state_otp_operation_done_de; + hw2reg.intr_state.otp_operation_done.d = intr_state_otp_operation_done_d; + hw2reg.intr_state.otp_error.de = intr_state_otp_error_de; + hw2reg.intr_state.otp_error.d = intr_state_otp_error_d; +end + + + ////////////////////////////////// + // Interrupts and Alert Senders // + ////////////////////////////////// + + caliptra_prim_intr_hw #( + .Width(1) + ) u_intr_operation_done ( + .clk_i, + .rst_ni, + .event_intr_i ( otp_operation_done ), + .reg2hw_intr_enable_q_i ( reg2hw.intr_enable.otp_operation_done.q ), + .reg2hw_intr_test_q_i ( reg2hw.intr_test.otp_operation_done.q ), + .reg2hw_intr_test_qe_i ( reg2hw.intr_test.otp_operation_done.qe ), + .reg2hw_intr_state_q_i ( reg2hw.intr_state.otp_operation_done.q ), + .hw2reg_intr_state_de_o ( intr_state_otp_operation_done_de ), + .hw2reg_intr_state_d_o ( intr_state_otp_operation_done_d ), + .intr_o ( intr_otp_operation_done_o ) + ); + + caliptra_a_prim_intr_hw #( + .Width(1) + ) u_intr_error ( + .clk_i, + .rst_ni, + .event_intr_i ( otp_error ), + .reg2hw_intr_enable_q_i ( reg2hw.intr_enable.otp_error.q ), + .reg2hw_intr_test_q_i ( reg2hw.intr_test.otp_error.q ), + .reg2hw_intr_test_qe_i ( reg2hw.intr_test.otp_error.qe ), + .reg2hw_intr_state_q_i ( reg2hw.intr_state.otp_error.q ), + .hw2reg_intr_state_de_o ( intr_state_otp_error_de ), + .hw2reg_intr_state_d_o ( intr_state_otp_error_d ), + .intr_o ( intr_otp_error_o ) + ); + + logic [NumAlerts-1:0] alerts; + logic [NumAlerts-1:0] alert_test; + logic fatal_prim_otp_alert, recov_prim_otp_alert; + + assign alerts = { + recov_prim_otp_alert, + fatal_prim_otp_alert, + fatal_bus_integ_error_q, + fatal_check_error_q, + fatal_macro_error_q + }; + + assign alert_test = { + reg2hw.alert_test.recov_prim_otp_alert.q & + reg2hw.alert_test.recov_prim_otp_alert.qe, + reg2hw.alert_test.fatal_prim_otp_alert.q & + reg2hw.alert_test.fatal_prim_otp_alert.qe, + reg2hw.alert_test.fatal_bus_integ_error.q & + reg2hw.alert_test.fatal_bus_integ_error.qe, + reg2hw.alert_test.fatal_check_error.q & + reg2hw.alert_test.fatal_check_error.qe, + reg2hw.alert_test.fatal_macro_error.q & + reg2hw.alert_test.fatal_macro_error.qe + }; + + localparam logic [NumAlerts-1:0] AlertIsFatal = { + 1'b0, // recov_prim_otp_alert + 1'b1, // fatal_prim_otp_alert + 1'b1, // fatal_bus_integ_error_q + 1'b1, // fatal_check_error_q + 1'b1 // fatal_macro_error_q + }; + + for (genvar k = 0; k < NumAlerts; k++) begin : gen_alert_tx + caliptra_prim_alert_sender #( + .AsyncOn(AlertAsyncOn[k]), + .IsFatal(AlertIsFatal[k]) + ) u_prim_alert_sender ( + .clk_i, + .rst_ni, + .alert_test_i ( alert_test[k] ), + .alert_req_i ( alerts[k] ), + .alert_ack_o ( ), + .alert_state_o ( ), + .alert_rx_i ( alert_rx_i[k] ), + .alert_tx_o ( alert_tx_o[k] ) + ); + end + + //////////////////////////////// + // LFSR Timer and CSR mapping // + //////////////////////////////// + + logic integ_chk_trig, cnsty_chk_trig; + logic [NumPart-1:0] integ_chk_req, integ_chk_ack; + logic [NumPart-1:0] cnsty_chk_req, cnsty_chk_ack; + logic lfsr_edn_req, lfsr_edn_ack; + logic [EdnDataWidth-1:0] edn_data; + + assign integ_chk_trig = reg2hw.check_trigger.integrity.q & + reg2hw.check_trigger.integrity.qe; + assign cnsty_chk_trig = reg2hw.check_trigger.consistency.q & + reg2hw.check_trigger.consistency.qe; + + // SEC_CM: PART.DATA_REG.BKGN_CHK + otp_ctrl_lfsr_timer #( + .RndCnstLfsrSeed(RndCnstLfsrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm) + ) u_otp_ctrl_lfsr_timer ( + .clk_i, + .rst_ni, + .edn_req_o ( lfsr_edn_req ), + .edn_ack_i ( lfsr_edn_ack ), + .edn_data_i ( edn_data ), + // We can enable the timer once OTP has initialized. + // Note that this is only the initial release that gets + // the timer FSM into an operational state. + // Whether or not the timers / background checks are + // activated depends on the CSR configuration (by default + // they are switched off). + .timer_en_i ( pwr_otp_o.otp_done ), + // This idle signal is the same that is output to the power + // manager, and indicates whether there is an ongoing OTP programming + // operation. It is used to pause the consistency check timeout + // counter in order to prevent spurious timeouts (OTP programming + // operations are very slow compared to readout operations and can + // hence interfere with the timeout mechanism). + .otp_prog_busy_i ( ~otp_idle_d ), + .integ_chk_trig_i ( integ_chk_trig ), + .cnsty_chk_trig_i ( cnsty_chk_trig ), + .chk_pending_o ( chk_pending ), + .timeout_i ( reg2hw.check_timeout.q ), + .integ_period_msk_i ( reg2hw.integrity_check_period.q ), + .cnsty_period_msk_i ( reg2hw.consistency_check_period.q ), + .integ_chk_req_o ( integ_chk_req ), + .cnsty_chk_req_o ( cnsty_chk_req ), + .integ_chk_ack_i ( integ_chk_ack ), + .cnsty_chk_ack_i ( cnsty_chk_ack ), + .escalate_en_i ( lc_escalate_en[NumAgents] ), + .chk_timeout_o ( chk_timeout ), + .fsm_err_o ( lfsr_fsm_err ) + ); + + /////////////////////////////////////// + // EDN Arbitration, Request and Sync // + /////////////////////////////////////// + + // Both the key derivation and LFSR reseeding are low bandwidth, + // hence they can share the same EDN interface. + logic edn_req, edn_ack; + logic key_edn_req, key_edn_ack; + caliptra_prim_arbiter_tree #( + .N(2), + .EnDataPort(0) + ) u_edn_arb ( + .clk_i, + .rst_ni, + .req_chk_i ( ~lc_escalate_en_any ), + .req_i ( {lfsr_edn_req, key_edn_req} ), + .data_i ( '{default: '0} ), + .gnt_o ( {lfsr_edn_ack, key_edn_ack} ), + .idx_o ( ), // unused + .valid_o ( edn_req ), + .data_o ( ), // unused + .ready_i ( edn_ack ) + ); + + // This synchronizes the data coming from EDN and stacks the + // 32bit EDN words to achieve an internal entropy width of 64bit. + caliptra_prim_edn_req #( + .OutWidth(EdnDataWidth) + ) u_prim_edn_req ( + .clk_i, + .rst_ni, + .req_chk_i ( ~lc_escalate_en_any ), + .req_i ( edn_req ), + .ack_o ( edn_ack ), + .data_o ( edn_data ), + .fips_o ( ), // unused + .err_o ( ), // unused + .clk_edn_i, + .rst_edn_ni, + .edn_o, + .edn_i + ); + + /////////////////////////////// + // OTP Macro and Arbitration // + /////////////////////////////// + + typedef struct packed { + prim_otp_pkg::cmd_e cmd; + logic [OtpSizeWidth-1:0] size; // Number of native words to write. + logic [OtpIfWidth-1:0] wdata; + logic [OtpAddrWidth-1:0] addr; // Halfword address. + } otp_bundle_t; + + logic [NumAgents-1:0] part_otp_arb_req, part_otp_arb_gnt; + otp_bundle_t part_otp_arb_bundle [NumAgents]; + logic otp_arb_valid, otp_arb_ready; + logic otp_prim_valid, otp_prim_ready; + logic otp_rsp_fifo_valid, otp_rsp_fifo_ready; + logic [vbits(NumAgents)-1:0] otp_arb_idx; + otp_bundle_t otp_arb_bundle; + + // The OTP interface is arbitrated on a per-cycle basis, meaning that back-to-back + // transactions can be completely independent. + caliptra_prim_arbiter_tree #( + .N(NumAgents), + .DW($bits(otp_bundle_t)) + ) u_otp_arb ( + .clk_i, + .rst_ni, + .req_chk_i ( ~lc_escalate_en_any ), + .req_i ( part_otp_arb_req ), + .data_i ( part_otp_arb_bundle ), + .gnt_o ( part_otp_arb_gnt ), + .idx_o ( otp_arb_idx ), + .valid_o ( otp_arb_valid ), + .data_o ( otp_arb_bundle ), + .ready_i ( otp_arb_ready ) + ); + + // Don't issue more transactions than what the rsp_fifo can keep track of. + assign otp_arb_ready = otp_prim_ready & otp_rsp_fifo_ready; + assign otp_prim_valid = otp_arb_valid & otp_rsp_fifo_ready; + assign otp_rsp_fifo_valid = otp_prim_ready & otp_prim_valid; + + prim_otp_pkg::err_e part_otp_err; + logic [OtpIfWidth-1:0] part_otp_rdata; + logic otp_rvalid; + //tlul_pkg::tl_h2d_t prim_tl_h2d_gated; + //tlul_pkg::tl_d2h_t prim_tl_d2h_gated; + logic prim_dv_gated; + logic [AW-1:0] prim_addr_gated; + logic prim_write_gate;d + logic [IW-1:0] prim_id_gated; + logic [DW-1:0] prim_wdata_gated; + logic [BC-1:0] prim_wstrb_gated; + logic [DW-1:0] prim_rdata_gated; + logic prim_last_gated; + logic prim_hld_gated; + logic prim_err_gated; + + + // Life cycle qualification of TL-UL test interface. + // SEC_CM: TEST.BUS.LC_GATED + // SEC_CM: TEST_TL_LC_GATE.FSM.SPARSE + axi_lc_gate #( + .NumGatesPerDirection(2) + ) u_tlul_lc_gate ( + .clk_i, + .rst_ni, + .prim_dv, + .prim_addr, + .prim_write, + .prim_id, + .prim_wdata, + .prim_wstrb, + .prim_rdata, + .prim_last, + .prim_hld, + .prim_err, + .prim_dv_gated, + .prim_addr_gated, + .prim_write_gated, + .prim_id_gated, + .prim_wdata_gated, + .prim_wstrb_gated, + .prim_rdata_gated, + .prim_last_gated, + .prim_hld_gated, + .prim_err_gated, + .lc_en_i (lc_dft_en[0]), + .flush_req_i('0), + .flush_ack_o(), + .resp_pending_o(), + .err_o (intg_error[2]) + ); + + // Test-related GPIOs. + // SEC_CM: TEST.BUS.LC_GATED + logic [OtpTestVectWidth-1:0] otp_test_vect; + assign cio_test_o = (lc_ctrl_pkg::lc_tx_test_true_strict(lc_dft_en[1])) ? + otp_test_vect : '0; + assign cio_test_en_o = (lc_ctrl_pkg::lc_tx_test_true_strict(lc_dft_en[2])) ? + {OtpTestVectWidth{1'b1}} : '0; + + // SEC_CM: MACRO.MEM.CM, MACRO.MEM.INTEGRITY + caliptra_prim_otp #( + .Width ( OtpWidth ), + .Depth ( OtpDepth ), + .SizeWidth ( OtpSizeWidth ), + .PwrSeqWidth ( OtpPwrSeqWidth ), + .TestCtrlWidth ( OtpTestCtrlWidth ), + .TestStatusWidth ( OtpTestStatusWidth ), + .TestVectWidth ( OtpTestVectWidth ), + .MemInitFile ( MemInitFile ), + .VendorTestOffset ( VendorTestOffset ), + .VendorTestSize ( VendorTestSize ) + ) u_otp ( + .clk_i, + .rst_ni, + // Observability controls to/from AST + .obs_ctrl_i, + .otp_obs_o, + // Power sequencing signals to/from AST + .pwr_seq_o ( otp_ast_pwr_seq_o.pwr_seq ), + .pwr_seq_h_i ( otp_ast_pwr_seq_h_i.pwr_seq_h ), + .ext_voltage_io ( otp_ext_voltage_h_io ), + // Test interface + .test_ctrl_i ( lc_otp_vendor_test_i.ctrl ), + .test_status_o ( lc_otp_vendor_test_o.status ), + .test_vect_o ( otp_test_vect ), + .test_tl_i ( prim_tl_h2d_gated ), + .test_tl_o ( prim_tl_d2h_gated ), + // Other DFT signals + .scan_en_i, + .scan_rst_ni, + .scanmode_i, + // Alerts + .fatal_alert_o ( fatal_prim_otp_alert ), + .recov_alert_o ( recov_prim_otp_alert ), + // Read / Write command interface + .ready_o ( otp_prim_ready ), + .valid_i ( otp_prim_valid ), + .cmd_i ( otp_arb_bundle.cmd ), + .size_i ( otp_arb_bundle.size ), + .addr_i ( otp_arb_bundle.addr ), + .wdata_i ( otp_arb_bundle.wdata ), + // Read data out + .valid_o ( otp_rvalid ), + .rdata_o ( part_otp_rdata ), + .err_o ( part_otp_err ) + ); + + logic otp_fifo_valid; + logic [vbits(NumAgents)-1:0] otp_part_idx; + logic [NumAgents-1:0] part_otp_rvalid; + + // We can have up to two OTP commands in flight, hence we size this to be 2 deep. + // The partitions can unconditionally sink requested data. + caliptra_prim_fifo_sync #( + .Width(vbits(NumAgents)), + .Depth(2) + ) u_otp_rsp_fifo ( + .clk_i, + .rst_ni, + .clr_i ( 1'b0 ), + .wvalid_i ( otp_rsp_fifo_valid ), + .wready_o ( otp_rsp_fifo_ready ), + .wdata_i ( otp_arb_idx ), + .rvalid_o ( otp_fifo_valid ), + .rready_i ( otp_rvalid ), + .rdata_o ( otp_part_idx ), + .depth_o ( ), + .full_o ( ), + .err_o ( ) + ); + + // Steer response back to the partition where this request originated. + always_comb begin : p_rvalid + part_otp_rvalid = '0; + part_otp_rvalid[otp_part_idx] = otp_rvalid & otp_fifo_valid; + end + + // Note that this must be true by construction. + `ASSERT(OtpRespFifoUnderflow_A, otp_rvalid |-> otp_fifo_valid) + + ///////////////////////////////////////// + // Scrambling Datapath and Arbitration // + ///////////////////////////////////////// + + // Note: as opposed to the OTP arbitration above, we do not perform cycle-wise arbitration, but + // transaction-wise arbitration. This is implemented using a RR arbiter that acts as a mutex. + // I.e., each agent (e.g. the DAI or a partition) can request a lock on the mutex. Once granted, + // the partition can keep the lock as long as needed for the transaction to complete. The + // partition must yield its lock by deasserting the request signal for the arbiter to proceed. + // Since this scheme does not have built-in preemtion, it must be ensured that the agents + // eventually release their locks for this to be fair. + // + // See also https://docs.opentitan.org/hw/ip/otp_ctrl/doc/index.html#block-diagram for details. + typedef struct packed { + otp_scrmbl_cmd_e cmd; + digest_mode_e mode; + logic [ConstSelWidth-1:0] sel; + logic [ScrmblBlockWidth-1:0] data; + logic valid; + } scrmbl_bundle_t; + + logic [NumAgents-1:0] part_scrmbl_mtx_req, part_scrmbl_mtx_gnt; + scrmbl_bundle_t part_scrmbl_req_bundle [NumAgents]; + scrmbl_bundle_t scrmbl_req_bundle; + logic [vbits(NumAgents)-1:0] scrmbl_mtx_idx; + logic scrmbl_mtx_valid; + + // Note that arbiter decisions do not change when backpressured. + // Hence, the idx_o signal is guaranteed to remain stable until ack'ed. + caliptra_prim_arbiter_tree #( + .N(NumAgents), + .DW($bits(scrmbl_bundle_t)) + ) u_scrmbl_mtx ( + .clk_i, + .rst_ni, + .req_chk_i ( 1'b0 ), // REQ is allowed to go low again without ACK even + // during normal operation. + .req_i ( part_scrmbl_mtx_req ), + .data_i ( part_scrmbl_req_bundle ), + .gnt_o ( ), + .idx_o ( scrmbl_mtx_idx ), + .valid_o ( scrmbl_mtx_valid ), + .data_o ( scrmbl_req_bundle ), + .ready_i ( 1'b0 ) + ); + + // Since the ready_i signal of the arbiter is statically set to 1'b0 above, we are always in a + // "backpressure" situation, where the RR arbiter will automatically advance the internal RR state + // to give the current winner max priority in subsequent cycles in order to keep the decision + // stable. Rearbitration occurs once the winning agent deasserts its request. + always_comb begin : p_mutex + part_scrmbl_mtx_gnt = '0; + part_scrmbl_mtx_gnt[scrmbl_mtx_idx] = scrmbl_mtx_valid; + end + + logic [ScrmblBlockWidth-1:0] part_scrmbl_rsp_data; + logic scrmbl_arb_req_ready, scrmbl_arb_rsp_valid; + logic [NumAgents-1:0] part_scrmbl_req_ready, part_scrmbl_rsp_valid; + + // SEC_CM: SECRET.MEM.SCRAMBLE + // SEC_CM: PART.MEM.DIGEST + otp_ctrl_scrmbl u_otp_ctrl_scrmbl ( + .clk_i, + .rst_ni, + .cmd_i ( scrmbl_req_bundle.cmd ), + .mode_i ( scrmbl_req_bundle.mode ), + .sel_i ( scrmbl_req_bundle.sel ), + .data_i ( scrmbl_req_bundle.data ), + .valid_i ( scrmbl_req_bundle.valid ), + .ready_o ( scrmbl_arb_req_ready ), + .data_o ( part_scrmbl_rsp_data ), + .valid_o ( scrmbl_arb_rsp_valid ), + .escalate_en_i ( lc_escalate_en[NumAgents+1] ), + .fsm_err_o ( scrmbl_fsm_err ) + ); + + // steer back responses + always_comb begin : p_scmrbl_resp + part_scrmbl_req_ready = '0; + part_scrmbl_rsp_valid = '0; + part_scrmbl_req_ready[scrmbl_mtx_idx] = scrmbl_arb_req_ready; + part_scrmbl_rsp_valid[scrmbl_mtx_idx] = scrmbl_arb_rsp_valid; + end + + ///////////////////////////// + // Direct Access Interface // + ///////////////////////////// + + logic part_init_req; + logic [NumPart-1:0] part_init_done; + part_access_t [NumPart-1:0] part_access_dai; + + // The init request comes from the power manager, which lives in the AON clock domain. + logic pwr_otp_req_synced; + calipra_prim_flop_2sync #( + .Width(1) + ) u_otp_init_sync ( + .clk_i, + .rst_ni, + .d_i ( pwr_otp_i.otp_init ), + .q_o ( pwr_otp_req_synced ) + ); + + // Register this signal as it has to cross a clock boundary. + logic pwr_otp_rsp_d, pwr_otp_rsp_q; + assign pwr_otp_o.otp_done = pwr_otp_rsp_q; + + always_ff @(posedge clk_i or negedge rst_ni) begin : p_init_reg + if (!rst_ni) begin + pwr_otp_rsp_q <= 1'b0; + end else begin + pwr_otp_rsp_q <= pwr_otp_rsp_d; + end + end + + otp_ctrl_dai u_otp_ctrl_dai ( + .clk_i, + .rst_ni, + .init_req_i ( pwr_otp_req_synced ), + .init_done_o ( pwr_otp_rsp_d ), + .part_init_req_o ( part_init_req ), + .part_init_done_i ( part_init_done ), + .escalate_en_i ( lc_escalate_en[DaiIdx] ), + .error_o ( part_error[DaiIdx] ), + .fsm_err_o ( part_fsm_err[DaiIdx] ), + .part_access_i ( part_access_dai ), + .dai_addr_i ( dai_addr ), + .dai_cmd_i ( dai_cmd ), + .dai_req_i ( dai_req ), + .dai_wdata_i ( dai_wdata ), + .dai_idle_o ( dai_idle ), + .dai_prog_idle_o ( dai_prog_idle ), + .dai_cmd_done_o ( otp_operation_done ), + .dai_rdata_o ( dai_rdata ), + .otp_req_o ( part_otp_arb_req[DaiIdx] ), + .otp_cmd_o ( part_otp_arb_bundle[DaiIdx].cmd ), + .otp_size_o ( part_otp_arb_bundle[DaiIdx].size ), + .otp_wdata_o ( part_otp_arb_bundle[DaiIdx].wdata ), + .otp_addr_o ( part_otp_arb_bundle[DaiIdx].addr ), + .otp_gnt_i ( part_otp_arb_gnt[DaiIdx] ), + .otp_rvalid_i ( part_otp_rvalid[DaiIdx] ), + .otp_rdata_i ( part_otp_rdata ), + .otp_err_i ( part_otp_err ), + .scrmbl_mtx_req_o ( part_scrmbl_mtx_req[DaiIdx] ), + .scrmbl_mtx_gnt_i ( part_scrmbl_mtx_gnt[DaiIdx] ), + .scrmbl_cmd_o ( part_scrmbl_req_bundle[DaiIdx].cmd ), + .scrmbl_mode_o ( part_scrmbl_req_bundle[DaiIdx].mode ), + .scrmbl_sel_o ( part_scrmbl_req_bundle[DaiIdx].sel ), + .scrmbl_data_o ( part_scrmbl_req_bundle[DaiIdx].data ), + .scrmbl_valid_o ( part_scrmbl_req_bundle[DaiIdx].valid ), + .scrmbl_ready_i ( part_scrmbl_req_ready[DaiIdx] ), + .scrmbl_valid_i ( part_scrmbl_rsp_valid[DaiIdx] ), + .scrmbl_data_i ( part_scrmbl_rsp_data ) + ); + + //////////////////////////////////// + // Lifecycle Transition Interface // + //////////////////////////////////// + + logic [PartInfo[LifeCycleIdx].size-1:0][7:0] lc_otp_program_data; + assign lc_otp_program_data[LcStateOffset-LifeCycleOffset +: LcStateSize] = + lc_otp_program_i.state; + assign lc_otp_program_data[LcTransitionCntOffset-LifeCycleOffset +: LcTransitionCntSize] = + lc_otp_program_i.count; + + otp_ctrl_lci #( + .Info(PartInfo[LifeCycleIdx]) + ) u_otp_ctrl_lci ( + .clk_i, + .rst_ni, + .lci_en_i ( pwr_otp_o.otp_done ), + .escalate_en_i ( lc_escalate_en[LciIdx] ), + .error_o ( part_error[LciIdx] ), + .fsm_err_o ( part_fsm_err[LciIdx] ), + .lci_prog_idle_o ( lci_prog_idle ), + .lc_req_i ( lc_otp_program_i.req ), + .lc_data_i ( lc_otp_program_data ), + .lc_ack_o ( lc_otp_program_o.ack ), + .lc_err_o ( lc_otp_program_o.err ), + .otp_req_o ( part_otp_arb_req[LciIdx] ), + .otp_cmd_o ( part_otp_arb_bundle[LciIdx].cmd ), + .otp_size_o ( part_otp_arb_bundle[LciIdx].size ), + .otp_wdata_o ( part_otp_arb_bundle[LciIdx].wdata ), + .otp_addr_o ( part_otp_arb_bundle[LciIdx].addr ), + .otp_gnt_i ( part_otp_arb_gnt[LciIdx] ), + .otp_rvalid_i ( part_otp_rvalid[LciIdx] ), + .otp_rdata_i ( part_otp_rdata ), + .otp_err_i ( part_otp_err ) + ); + + // Tie off unused connections. + assign part_scrmbl_mtx_req[LciIdx] = '0; + assign part_scrmbl_req_bundle[LciIdx] = '0; + + // This stops lint from complaining about unused signals. + logic unused_lci_scrmbl_sigs; + assign unused_lci_scrmbl_sigs = ^{part_scrmbl_mtx_gnt[LciIdx], + part_scrmbl_req_ready[LciIdx], + part_scrmbl_rsp_valid[LciIdx]}; + + //////////////////////////////////// + // Key Derivation Interface (KDI) // + //////////////////////////////////// + + logic scrmbl_key_seed_valid; + logic [SramKeySeedWidth-1:0] sram_data_key_seed; + logic [FlashKeySeedWidth-1:0] flash_data_key_seed, flash_addr_key_seed; + + otp_ctrl_kdi #( + .RndCnstScrmblKeyInit(RndCnstScrmblKeyInit) + ) u_otp_ctrl_kdi ( + .clk_i, + .rst_ni, + .kdi_en_i ( pwr_otp_o.otp_done ), + .escalate_en_i ( lc_escalate_en[KdiIdx] ), + .fsm_err_o ( part_fsm_err[KdiIdx] ), + .scrmbl_key_seed_valid_i ( scrmbl_key_seed_valid ), + .flash_data_key_seed_i ( flash_data_key_seed ), + .flash_addr_key_seed_i ( flash_addr_key_seed ), + .sram_data_key_seed_i ( sram_data_key_seed ), + .edn_req_o ( key_edn_req ), + .edn_ack_i ( key_edn_ack ), + .edn_data_i ( edn_data ), + .flash_otp_key_i, + .flash_otp_key_o, + .sram_otp_key_i, + .sram_otp_key_o, + .otbn_otp_key_i, + .otbn_otp_key_o, + .scrmbl_mtx_req_o ( part_scrmbl_mtx_req[KdiIdx] ), + .scrmbl_mtx_gnt_i ( part_scrmbl_mtx_gnt[KdiIdx] ), + .scrmbl_cmd_o ( part_scrmbl_req_bundle[KdiIdx].cmd ), + .scrmbl_mode_o ( part_scrmbl_req_bundle[KdiIdx].mode ), + .scrmbl_sel_o ( part_scrmbl_req_bundle[KdiIdx].sel ), + .scrmbl_data_o ( part_scrmbl_req_bundle[KdiIdx].data ), + .scrmbl_valid_o ( part_scrmbl_req_bundle[KdiIdx].valid ), + .scrmbl_ready_i ( part_scrmbl_req_ready[KdiIdx] ), + .scrmbl_valid_i ( part_scrmbl_rsp_valid[KdiIdx] ), + .scrmbl_data_i ( part_scrmbl_rsp_data ) + ); + + // Tie off OTP bus access, since this is not needed. + assign part_otp_arb_req[KdiIdx] = 1'b0; + assign part_otp_arb_bundle[KdiIdx] = '0; + + // This stops lint from complaining about unused signals. + logic unused_kdi_otp_sigs; + assign unused_kdi_otp_sigs = ^{part_otp_arb_gnt[KdiIdx], + part_otp_rvalid[KdiIdx]}; + + ///////////////////////// + // Partition Instances // + ///////////////////////// + + logic [$bits(PartInvDefault)/8-1:0][7:0] part_buf_data; + + for (genvar k = 0; k < NumPart; k ++) begin : gen_partitions + //////////////////////////////////////////////////////////////////////////////////////////////// + if (PartInfo[k].variant == Unbuffered) begin : gen_unbuffered + otp_ctrl_part_unbuf #( + .Info(PartInfo[k]) + ) u_part_unbuf ( + .clk_i, + .rst_ni, + .init_req_i ( part_init_req ), + .init_done_o ( part_init_done[k] ), + .escalate_en_i ( lc_escalate_en[k] ), + .error_o ( part_error[k] ), + .fsm_err_o ( part_fsm_err[k] ), + .access_i ( part_access[k] ), + .access_o ( part_access_dai[k] ), + .digest_o ( part_digest[k] ), + .tlul_req_i ( part_axi_req[k] ), + .tlul_gnt_o ( part_axi_gnt[k] ), + .tlul_addr_i ( part_axi_addr ), + .tlul_rerror_o ( part_axi_rerror[k] ), + .tlul_rvalid_o ( part_axi_rvalid[k] ), + .tlul_rdata_o ( part_axi_rdata[k] ), + .otp_req_o ( part_otp_arb_req[k] ), + .otp_cmd_o ( part_otp_arb_bundle[k].cmd ), + .otp_size_o ( part_otp_arb_bundle[k].size ), + .otp_wdata_o ( part_otp_arb_bundle[k].wdata ), + .otp_addr_o ( part_otp_arb_bundle[k].addr ), + .otp_gnt_i ( part_otp_arb_gnt[k] ), + .otp_rvalid_i ( part_otp_rvalid[k] ), + .otp_rdata_i ( part_otp_rdata ), + .otp_err_i ( part_otp_err ) + ); + + // Tie off unused connections. + assign part_scrmbl_mtx_req[k] = '0; + assign part_scrmbl_req_bundle[k] = '0; + // These checks do not exist in this partition type, + // so we always acknowledge the request. + assign integ_chk_ack[k] = 1'b1; + assign cnsty_chk_ack[k] = 1'b1; + + // No buffered data to expose. + assign part_buf_data[PartInfo[k].offset +: PartInfo[k].size] = '0; + + // This stops lint from complaining about unused signals. + logic unused_part_scrmbl_sigs; + assign unused_part_scrmbl_sigs = ^{part_scrmbl_mtx_gnt[k], + part_scrmbl_req_ready[k], + part_scrmbl_rsp_valid[k], + integ_chk_req[k], + cnsty_chk_req[k]}; + + // Alert assertion for sparse FSM. + `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlPartUnbufFsmCheck_A, + u_part_unbuf.u_state_regs, alert_tx_o[1]) + //////////////////////////////////////////////////////////////////////////////////////////////// + end else if (PartInfo[k].variant == Buffered) begin : gen_buffered + otp_ctrl_part_buf #( + .Info(PartInfo[k]), + .DataDefault(PartInvDefault[PartInfo[k].offset*8 +: PartInfo[k].size*8]) + ) u_part_buf ( + .clk_i, + .rst_ni, + .init_req_i ( part_init_req ), + .init_done_o ( part_init_done[k] ), + .integ_chk_req_i ( integ_chk_req[k] ), + .integ_chk_ack_o ( integ_chk_ack[k] ), + .cnsty_chk_req_i ( cnsty_chk_req[k] ), + .cnsty_chk_ack_o ( cnsty_chk_ack[k] ), + .escalate_en_i ( lc_escalate_en[k] ), + // Only supported by life cycle partition (see further below). + .check_byp_en_i ( lc_ctrl_pkg::Off ), + .error_o ( part_error[k] ), + .fsm_err_o ( part_fsm_err[k] ), + .access_i ( part_access[k] ), + .access_o ( part_access_dai[k] ), + .digest_o ( part_digest[k] ), + .data_o ( part_buf_data[PartInfo[k].offset +: PartInfo[k].size] ), + .otp_req_o ( part_otp_arb_req[k] ), + .otp_cmd_o ( part_otp_arb_bundle[k].cmd ), + .otp_size_o ( part_otp_arb_bundle[k].size ), + .otp_wdata_o ( part_otp_arb_bundle[k].wdata ), + .otp_addr_o ( part_otp_arb_bundle[k].addr ), + .otp_gnt_i ( part_otp_arb_gnt[k] ), + .otp_rvalid_i ( part_otp_rvalid[k] ), + .otp_rdata_i ( part_otp_rdata ), + .otp_err_i ( part_otp_err ), + .scrmbl_mtx_req_o ( part_scrmbl_mtx_req[k] ), + .scrmbl_mtx_gnt_i ( part_scrmbl_mtx_gnt[k] ), + .scrmbl_cmd_o ( part_scrmbl_req_bundle[k].cmd ), + .scrmbl_mode_o ( part_scrmbl_req_bundle[k].mode ), + .scrmbl_sel_o ( part_scrmbl_req_bundle[k].sel ), + .scrmbl_data_o ( part_scrmbl_req_bundle[k].data ), + .scrmbl_valid_o ( part_scrmbl_req_bundle[k].valid ), + .scrmbl_ready_i ( part_scrmbl_req_ready[k] ), + .scrmbl_valid_i ( part_scrmbl_rsp_valid[k] ), + .scrmbl_data_i ( part_scrmbl_rsp_data ) + ); + + // Buffered partitions are not accessible via the TL-UL window. + logic unused_part_axi_sigs; + assign unused_part_axi_sigs = ^part_axi_req[k]; + assign part_axi_gnt[k] = 1'b0; + assign part_axi_rerror[k] = '0; + assign part_axi_rvalid[k] = 1'b0; + assign part_axi_rdata[k] = '0; + + // Alert assertion for sparse FSM. + `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlPartBufFsmCheck_A, + u_part_buf.u_state_regs, alert_tx_o[1]) + `ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntPartBufCheck_A, + u_part_buf.u_prim_count, alert_tx_o[1]) + //////////////////////////////////////////////////////////////////////////////////////////////// + end else if (PartInfo[k].variant == LifeCycle) begin : gen_lifecycle + otp_ctrl_part_buf #( + .Info(PartInfo[k]), + .DataDefault(PartInvDefault[PartInfo[k].offset*8 +: PartInfo[k].size*8]) + ) u_part_buf ( + .clk_i, + .rst_ni, + .init_req_i ( part_init_req ), + .init_done_o ( part_init_done[k] ), + .integ_chk_req_i ( integ_chk_req[k] ), + .integ_chk_ack_o ( integ_chk_ack[k] ), + .cnsty_chk_req_i ( cnsty_chk_req[k] ), + .cnsty_chk_ack_o ( cnsty_chk_ack[k] ), + .escalate_en_i ( lc_escalate_en[k] ), + // This is only supported by the life cycle partition. We need to prevent this partition + // from escalating once the life cycle state in memory is being updated (and hence not + // consistent with the values in the buffer regs anymore). + .check_byp_en_i ( lc_check_byp_en ), + .error_o ( part_error[k] ), + .fsm_err_o ( part_fsm_err[k] ), + .access_i ( part_access[k] ), + .access_o ( part_access_dai[k] ), + .digest_o ( part_digest[k] ), + .data_o ( part_buf_data[PartInfo[k].offset +: PartInfo[k].size] ), + .otp_req_o ( part_otp_arb_req[k] ), + .otp_cmd_o ( part_otp_arb_bundle[k].cmd ), + .otp_size_o ( part_otp_arb_bundle[k].size ), + .otp_wdata_o ( part_otp_arb_bundle[k].wdata ), + .otp_addr_o ( part_otp_arb_bundle[k].addr ), + .otp_gnt_i ( part_otp_arb_gnt[k] ), + .otp_rvalid_i ( part_otp_rvalid[k] ), + .otp_rdata_i ( part_otp_rdata ), + .otp_err_i ( part_otp_err ), + // The LC partition does not need any scrambling features. + .scrmbl_mtx_req_o ( ), + .scrmbl_mtx_gnt_i ( 1'b0 ), + .scrmbl_cmd_o ( ), + .scrmbl_mode_o ( ), + .scrmbl_sel_o ( ), + .scrmbl_data_o ( ), + .scrmbl_valid_o ( ), + .scrmbl_ready_i ( 1'b0 ), + .scrmbl_valid_i ( 1'b0 ), + .scrmbl_data_i ( '0 ) + ); + + // Buffered partitions are not accessible via the TL-UL window. + logic unused_part_axi_sigs; + assign unused_part_axi_sigs = ^part_axi_req[k]; + assign part_axi_gnt[k] = 1'b0; + assign part_axi_rerror[k] = '0; + assign part_axi_rvalid[k] = 1'b0; + assign part_axi_rdata[k] = '0; + + // Tie off unused connections. + assign part_scrmbl_mtx_req[k] = '0; + assign part_scrmbl_req_bundle[k] = '0; + + // This stops lint from complaining about unused signals. + logic unused_part_scrmbl_sigs; + assign unused_part_scrmbl_sigs = ^{part_scrmbl_mtx_gnt[k], + part_scrmbl_req_ready[k], + part_scrmbl_rsp_valid[k]}; + // Alert assertion for sparse FSM. + `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlPartLcFsmCheck_A, + u_part_buf.u_state_regs, alert_tx_o[1]) + `ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntPartLcCheck_A, + u_part_buf.u_prim_count, alert_tx_o[1]) + //////////////////////////////////////////////////////////////////////////////////////////////// + end else begin : gen_invalid + // This is invalid and should break elaboration + assert_static_in_generate_invalid assert_static_in_generate_invalid(); + end + //////////////////////////////////////////////////////////////////////////////////////////////// + end + + ////////////////////////////////// + // Buffered Data Output Mapping // + ////////////////////////////////// + + // Output complete hardware config partition. + // Actual mapping to other IPs is done via the intersignal topgen feature, + // selection of fields can be done using the otp_hw_cfg_t struct fields. + otp_broadcast_t otp_broadcast; + assign otp_broadcast = named_broadcast_assign(part_init_done, part_buf_data); + + // Make sure the broadcast valid is flopped before sending it out. + lc_ctrl_pkg::lc_tx_t otp_broadcast_valid_q; + prim_lc_sender u_prim_lc_sender_otp_broadcast_valid ( + .clk_i, + .rst_ni, + .lc_en_i(otp_broadcast.valid), + .lc_en_o(otp_broadcast_valid_q) + ); + + always_comb begin : p_otp_broadcast_valid + otp_broadcast_o = otp_broadcast; + otp_broadcast_o.valid = otp_broadcast_valid_q; + end + + // Root keys and seeds. + // This uses a generated function to assign all collateral that is marked with "iskeymgr" in + // the memory map. Note that in this case the type is static and represents a superset of all + // options so that we can maintain a stable interface with keymgr (otherwise keymgr will have + // to be templated as well. Unused key material will be tied off to '0. The keymgr has to be + // parameterized accordingly (via SV parameters) to consume the correct key material. + // + // The key material valid signals are set to true if the corresponding digest is nonzero and the + // partition is initialized. On top of that, the entire output is gated by lc_seed_hw_rd_en. + otp_keymgr_key_t otp_keymgr_key; + assign otp_keymgr_key = named_keymgr_key_assign(part_digest, + part_buf_data, + lc_seed_hw_rd_en); + + // Note regarding these breakouts: named_keymgr_key_assign will tie off unused key material / + // valid signals to '0. This is the case for instance in system configurations that keep the seed + // material in the flash instead of OTP. + logic creator_root_key_share0_valid_d, creator_root_key_share0_valid_q; + logic creator_root_key_share1_valid_d, creator_root_key_share1_valid_q; + logic creator_seed_valid_d, creator_seed_valid_q; + logic owner_seed_valid_d, owner_seed_valid_q; + caliptra_prim_flop #( + .Width(4) + ) u_keygmr_key_valid ( + .clk_i, + .rst_ni, + .d_i ({creator_root_key_share0_valid_d, + creator_root_key_share1_valid_d, + creator_seed_valid_d, + owner_seed_valid_d}), + .q_o ({creator_root_key_share0_valid_q, + creator_root_key_share1_valid_q, + creator_seed_valid_q, + owner_seed_valid_q}) + ); + + always_comb begin : p_otp_keymgr_key_valid + // Valid reg inputs + creator_root_key_share0_valid_d = otp_keymgr_key.creator_root_key_share0_valid; + creator_root_key_share1_valid_d = otp_keymgr_key.creator_root_key_share1_valid; + creator_seed_valid_d = otp_keymgr_key.creator_seed_valid; + owner_seed_valid_d = otp_keymgr_key.owner_seed_valid; + // Output to keymgr + otp_keymgr_key_o = otp_keymgr_key; + otp_keymgr_key_o.creator_root_key_share0_valid = creator_root_key_share0_valid_q; + otp_keymgr_key_o.creator_root_key_share1_valid = creator_root_key_share1_valid_q; + otp_keymgr_key_o.creator_seed_valid = creator_seed_valid_q; + otp_keymgr_key_o.owner_seed_valid = owner_seed_valid_q; + end + + // Check that the lc_seed_hw_rd_en remains stable, once the key material is valid. + `ASSERT(LcSeedHwRdEnStable0_A, + $rose(creator_root_key_share0_valid_q) |=> $stable(lc_seed_hw_rd_en) [*1:$], + clk_i, !rst_ni || lc_ctrl_pkg::lc_tx_test_true_loose(lc_escalate_en_i) // Disable if escalating + ) + `ASSERT(LcSeedHwRdEnStable1_A, + $rose(creator_root_key_share1_valid_q) |=> $stable(lc_seed_hw_rd_en) [*1:$], + clk_i, !rst_ni || lc_ctrl_pkg::lc_tx_test_true_loose(lc_escalate_en_i) // Disable if escalating + ) + `ASSERT(LcSeedHwRdEnStable2_A, + $rose(creator_seed_valid_q) |=> $stable(lc_seed_hw_rd_en) [*1:$], + clk_i, !rst_ni || lc_ctrl_pkg::lc_tx_test_true_loose(lc_escalate_en_i) // Disable if escalating + ) + `ASSERT(LcSeedHwRdEnStable3_A, + $rose(owner_seed_valid_q) |=> $stable(lc_seed_hw_rd_en) [*1:$], + clk_i, !rst_ni || lc_ctrl_pkg::lc_tx_test_true_loose(lc_escalate_en_i) // Disable if escalating + ) + + // Scrambling Keys + assign scrmbl_key_seed_valid = part_digest[Secret1Idx] != '0; + assign sram_data_key_seed = part_buf_data[SramDataKeySeedOffset +: + SramDataKeySeedSize]; + assign flash_data_key_seed = part_buf_data[FlashDataKeySeedOffset +: + FlashDataKeySeedSize]; + assign flash_addr_key_seed = part_buf_data[FlashAddrKeySeedOffset +: + FlashAddrKeySeedSize]; + + // Test unlock and exit tokens and RMA token + assign otp_lc_data_o.test_exit_token = part_buf_data[TestExitTokenOffset +: + TestExitTokenSize]; + assign otp_lc_data_o.test_unlock_token = part_buf_data[TestUnlockTokenOffset +: + TestUnlockTokenSize]; + assign otp_lc_data_o.rma_token = part_buf_data[RmaTokenOffset +: + RmaTokenSize]; + + lc_ctrl_pkg::lc_tx_t test_tokens_valid, rma_token_valid, secrets_valid; + // The test tokens have been provisioned. + assign test_tokens_valid = (part_digest[Secret0Idx] != '0) ? lc_ctrl_pkg::On : lc_ctrl_pkg::Off; + // The rma token has been provisioned. + assign rma_token_valid = (part_digest[Secret2Idx] != '0) ? lc_ctrl_pkg::On : lc_ctrl_pkg::Off; + // The device is personalized if the root key has been provisioned and locked. + assign secrets_valid = (part_digest[Secret2Idx] != '0) ? lc_ctrl_pkg::On : lc_ctrl_pkg::Off; + + // Buffer these constants in order to ensure that synthesis does not try to optimize the encoding. + // SEC_CM: TOKEN_VALID.CTRL.MUBI + caliptra_prim_lc_sender #( + .AsyncOn(0) + ) u_prim_lc_sender_test_tokens_valid ( + .clk_i, + .rst_ni, + .lc_en_i(test_tokens_valid), + .lc_en_o(otp_lc_data_o.test_tokens_valid) + ); + + caliptra_prim_lc_sender #( + .AsyncOn(0) + ) u_prim_lc_sender_rma_token_valid ( + .clk_i, + .rst_ni, + .lc_en_i(rma_token_valid), + .lc_en_o(otp_lc_data_o.rma_token_valid) + ); + + caliptra_prim_lc_sender #( + .AsyncOn(0) + ) u_prim_lc_sender_secrets_valid ( + .clk_i, + .rst_ni, + .lc_en_i(secrets_valid), + .lc_en_o(otp_lc_data_o.secrets_valid) + ); + + // Lifecycle state + assign otp_lc_data_o.state = lc_ctrl_state_pkg::lc_state_e'(part_buf_data[LcStateOffset +: + LcStateSize]); + assign otp_lc_data_o.count = lc_ctrl_state_pkg::lc_cnt_e'(part_buf_data[LcTransitionCntOffset +: + LcTransitionCntSize]); + + // Assert life cycle state valid signal only when all partitions have initialized. + assign otp_lc_data_o.valid = &part_init_done; + // Signal whether there are any errors in the life cycle partition (both correctable and + // uncorrectable ones). This bit is made available via the JTAG TAP, which is useful for + // production testing in RAW life cycle state where the OTP regs are not accessible. + assign otp_lc_data_o.error = |part_error[LifeCycleIdx]; + + // Not all bits of part_buf_data are used here. + logic unused_buf_data; + assign unused_buf_data = ^part_buf_data; + + //////////////// + // Assertions // + //////////////// + + `ASSERT_INIT(CreatorRootKeyShare0Size_A, KeyMgrKeyWidth == CreatorRootKeyShare0Size * 8) + `ASSERT_INIT(CreatorRootKeyShare1Size_A, KeyMgrKeyWidth == CreatorRootKeyShare1Size * 8) + `ASSERT_INIT(FlashDataKeySeedSize_A, FlashKeySeedWidth == FlashDataKeySeedSize * 8) + `ASSERT_INIT(FlashAddrKeySeedSize_A, FlashKeySeedWidth == FlashAddrKeySeedSize * 8) + `ASSERT_INIT(SramDataKeySeedSize_A, SramKeySeedWidth == SramDataKeySeedSize * 8) + + `ASSERT_INIT(RmaTokenSize_A, lc_ctrl_state_pkg::LcTokenWidth == RmaTokenSize * 8) + `ASSERT_INIT(TestUnlockTokenSize_A, lc_ctrl_state_pkg::LcTokenWidth == TestUnlockTokenSize * 8) + `ASSERT_INIT(TestExitTokenSize_A, lc_ctrl_state_pkg::LcTokenWidth == TestExitTokenSize * 8) + `ASSERT_INIT(LcStateSize_A, lc_ctrl_state_pkg::LcStateWidth == LcStateSize * 8) + `ASSERT_INIT(LcTransitionCntSize_A, lc_ctrl_state_pkg::LcCountWidth == LcTransitionCntSize * 8) + + `ASSERT_KNOWN(OtpAstPwrSeqKnown_A, otp_ast_pwr_seq_o) + `ASSERT_KNOWN(CoreTlOutKnown_A, core_tl_o) + `ASSERT_KNOWN(PrimTlOutKnown_A, prim_tl_o) + `ASSERT_KNOWN(IntrOtpOperationDoneKnown_A, intr_otp_operation_done_o) + `ASSERT_KNOWN(IntrOtpErrorKnown_A, intr_otp_error_o) + `ASSERT_KNOWN(AlertTxKnown_A, alert_tx_o) + `ASSERT_KNOWN(PwrOtpInitRspKnown_A, pwr_otp_o) + `ASSERT_KNOWN(LcOtpProgramRspKnown_A, lc_otp_program_o) + `ASSERT_KNOWN(OtpLcDataKnown_A, otp_lc_data_o) + `ASSERT_KNOWN(OtpKeymgrKeyKnown_A, otp_keymgr_key_o) + `ASSERT_KNOWN(FlashOtpKeyRspKnown_A, flash_otp_key_o) + `ASSERT_KNOWN(OtpSramKeyKnown_A, sram_otp_key_o) + `ASSERT_KNOWN(OtpOtgnKeyKnown_A, otbn_otp_key_o) + `ASSERT_KNOWN(OtpBroadcastKnown_A, otp_broadcast_o) + + // Alert assertions for sparse FSMs. + `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlDaiFsmCheck_A, + u_otp_ctrl_dai.u_state_regs, alert_tx_o[1]) + `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlKdiFsmCheck_A, + u_otp_ctrl_kdi.u_state_regs, alert_tx_o[1]) + `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlLciFsmCheck_A, + u_otp_ctrl_lci.u_state_regs, alert_tx_o[1]) + `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlLfsrTimerFsmCheck_A, + u_otp_ctrl_lfsr_timer.u_state_regs, alert_tx_o[1]) + `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlScrambleFsmCheck_A, + u_otp_ctrl_scrmbl.u_state_regs, alert_tx_o[1]) + + // Alert assertions for redundant counters. + `ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntIntegCheck_A, + u_otp_ctrl_lfsr_timer.u_prim_count_integ, alert_tx_o[1]) + `ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntCnstyCheck_A, + u_otp_ctrl_lfsr_timer.u_prim_count_cnsty, alert_tx_o[1]) + `ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntDaiCheck_A, + u_otp_ctrl_dai.u_prim_count, alert_tx_o[1]) + `ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntKdiSeedCheck_A, + u_otp_ctrl_kdi.u_prim_count_seed, alert_tx_o[1]) + `ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntKdiEntropyCheck_A, + u_otp_ctrl_kdi.u_prim_count_entropy, alert_tx_o[1]) + `ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntLciCheck_A, + u_otp_ctrl_lci.u_prim_count, alert_tx_o[1]) + `ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntScrmblCheck_A, + u_otp_ctrl_scrmbl.u_prim_count, alert_tx_o[1]) + `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(TlLcGateFsm_A, + u_tlul_lc_gate.u_state_regs, alert_tx_o[2]) + + // Alert assertions for double LFSR. + `ASSERT_PRIM_DOUBLE_LFSR_ERROR_TRIGGER_ALERT(DoubleLfsrCheck_A, + u_otp_ctrl_lfsr_timer.u_prim_double_lfsr, alert_tx_o[1]) + + // Alert assertions for reg_we onehot check + `ASSERT_PRIM_REG_WE_ONEHOT_ERROR_TRIGGER_ALERT(RegWeOnehotCheck_A, u_reg_core, alert_tx_o[2]) + + // Assertions for countermeasures inside prim_otp + `ifndef PRIM_DEFAULT_IMPL + `define PRIM_DEFAULT_IMPL prim_pkg::ImplGeneric + `endif + if (`PRIM_DEFAULT_IMPL == prim_pkg::ImplGeneric) begin : gen_reg_we_assert_generic + `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(PrimFsmCheck_A, + u_otp.gen_generic.u_impl_generic.u_state_regs, alert_tx_o[3]) + `ASSERT_PRIM_REG_WE_ONEHOT_ERROR_TRIGGER_ALERT(PrimRegWeOnehotCheck_A, + u_otp.gen_generic.u_impl_generic.u_reg_top, alert_tx_o[3]) + end +endmodule : otp_ctrl diff --git a/src/fuse_ctrl/rtl/otp_ctrl.sv_orig b/src/fuse_ctrl/rtl/otp_ctrl.sv_orig new file mode 100644 index 000000000..62d440bf6 --- /dev/null +++ b/src/fuse_ctrl/rtl/otp_ctrl.sv_orig @@ -0,0 +1,1565 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// OTP Controller top. +// + +`include "prim_assert.sv" + +module otp_ctrl + import otp_ctrl_pkg::*; + import otp_ctrl_reg_pkg::*; + import otp_ctrl_part_pkg::*; +#( + // Enable asynchronous transitions on alerts. + parameter logic [NumAlerts-1:0] AlertAsyncOn = {NumAlerts{1'b1}}, + // Compile time random constants, to be overriden by topgen. + parameter lfsr_seed_t RndCnstLfsrSeed = RndCnstLfsrSeedDefault, + parameter lfsr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + parameter scrmbl_key_init_t RndCnstScrmblKeyInit = RndCnstScrmblKeyInitDefault, + // Hexfile file to initialize the OTP macro. + // Note that the hexdump needs to account for ECC. + parameter MemInitFile = "" +) ( + // OTP clock + input clk_i, + input rst_ni, + // EDN clock and interface + logic clk_edn_i, + logic rst_edn_ni, + output edn_pkg::edn_req_t edn_o, + input edn_pkg::edn_rsp_t edn_i, + // Bus Interface + input tlul_pkg::tl_h2d_t core_tl_i, + output tlul_pkg::tl_d2h_t core_tl_o, + input tlul_pkg::tl_h2d_t prim_tl_i, + output tlul_pkg::tl_d2h_t prim_tl_o, + // Interrupt Requests + output logic intr_otp_operation_done_o, + output logic intr_otp_error_o, + // Alerts + input prim_alert_pkg::alert_rx_t [NumAlerts-1:0] alert_rx_i, + output prim_alert_pkg::alert_tx_t [NumAlerts-1:0] alert_tx_o, + // Observability to AST + input ast_pkg::ast_obs_ctrl_t obs_ctrl_i, + output logic [7:0] otp_obs_o, + // Macro-specific power sequencing signals to/from AST. + output otp_ast_req_t otp_ast_pwr_seq_o, + input otp_ast_rsp_t otp_ast_pwr_seq_h_i, + // Power manager interface (inputs are synced to OTP clock domain) + input pwrmgr_pkg::pwr_otp_req_t pwr_otp_i, + output pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o, + // Macro-specific test registers going to lifecycle TAP + input lc_otp_vendor_test_req_t lc_otp_vendor_test_i, + output lc_otp_vendor_test_rsp_t lc_otp_vendor_test_o, + // Lifecycle transition command interface + input lc_otp_program_req_t lc_otp_program_i, + output lc_otp_program_rsp_t lc_otp_program_o, + // Lifecycle broadcast inputs + // SEC_CM: LC_CTRL.INTERSIG.MUBI + input lc_ctrl_pkg::lc_tx_t lc_creator_seed_sw_rw_en_i, + input lc_ctrl_pkg::lc_tx_t lc_owner_seed_sw_rw_en_i, + input lc_ctrl_pkg::lc_tx_t lc_seed_hw_rd_en_i, + input lc_ctrl_pkg::lc_tx_t lc_dft_en_i, + input lc_ctrl_pkg::lc_tx_t lc_escalate_en_i, + input lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i, + // OTP broadcast outputs + // SEC_CM: TOKEN_VALID.CTRL.MUBI + output otp_lc_data_t otp_lc_data_o, + output otp_keymgr_key_t otp_keymgr_key_o, + // Scrambling key requests + input flash_otp_key_req_t flash_otp_key_i, + output flash_otp_key_rsp_t flash_otp_key_o, + input sram_otp_key_req_t [NumSramKeyReqSlots-1:0] sram_otp_key_i, + output sram_otp_key_rsp_t [NumSramKeyReqSlots-1:0] sram_otp_key_o, + input otbn_otp_key_req_t otbn_otp_key_i, + output otbn_otp_key_rsp_t otbn_otp_key_o, + // Hardware config bits + output otp_broadcast_t otp_broadcast_o, + // External voltage for OTP + inout wire otp_ext_voltage_h_io, + // Scan + input scan_en_i, + input scan_rst_ni, + input prim_mubi_pkg::mubi4_t scanmode_i, + // Test-related GPIO output + output logic [OtpTestVectWidth-1:0] cio_test_o, + output logic [OtpTestVectWidth-1:0] cio_test_en_o +); + + import prim_mubi_pkg::*; + import prim_util_pkg::vbits; + + //////////////////////// + // Integration Checks // + //////////////////////// + + // This ensures that we can transfer scrambler data blocks in and out of OTP atomically. + `ASSERT_INIT(OtpIfWidth_A, OtpIfWidth == ScrmblBlockWidth) + + // These error codes need to be identical. + `ASSERT_INIT(ErrorCodeWidth_A, OtpErrWidth == prim_otp_pkg::ErrWidth) + `ASSERT_INIT(OtpErrorCode0_A, int'(NoError) == int'(prim_otp_pkg::NoError)) + `ASSERT_INIT(OtpErrorCode1_A, int'(MacroError) == int'(prim_otp_pkg::MacroError)) + `ASSERT_INIT(OtpErrorCode2_A, int'(MacroEccCorrError) == int'(prim_otp_pkg::MacroEccCorrError)) + `ASSERT_INIT(OtpErrorCode3_A, + int'(MacroEccUncorrError) == int'(prim_otp_pkg::MacroEccUncorrError)) + `ASSERT_INIT(OtpErrorCode4_A, + int'(MacroWriteBlankError) == int'(prim_otp_pkg::MacroWriteBlankError)) + + ///////////// + // Regfile // + ///////////// + + // We have one CSR node, one functional TL-UL window and a gate module for that window + logic [2:0] intg_error; + + tlul_pkg::tl_h2d_t tl_win_h2d; + tlul_pkg::tl_d2h_t tl_win_d2h; + + otp_ctrl_reg_pkg::otp_ctrl_core_reg2hw_t reg2hw; + otp_ctrl_reg_pkg::otp_ctrl_core_hw2reg_t hw2reg; + + // SEC_CM: DIRECT_ACCESS.CONFIG.REGWEN, CHECK_TRIGGER.CONFIG.REGWEN, CHECK.CONFIG.REGWEN + otp_ctrl_core_reg_top u_reg_core ( + .clk_i, + .rst_ni, + .tl_i ( core_tl_i ), + .tl_o ( core_tl_o ), + .tl_win_o ( tl_win_h2d ), + .tl_win_i ( tl_win_d2h ), + .reg2hw ( reg2hw ), + .hw2reg ( hw2reg ), + // SEC_CM: BUS.INTEGRITY + .intg_err_o( intg_error[0] ) + ); + + /////////////////////////////////////// + // Life Cycle Signal Synchronization // + /////////////////////////////////////// + + lc_ctrl_pkg::lc_tx_t lc_creator_seed_sw_rw_en, lc_owner_seed_sw_rw_en, + lc_seed_hw_rd_en, lc_check_byp_en; + lc_ctrl_pkg::lc_tx_t [2:0] lc_dft_en; + // NumAgents + lfsr timer and scrambling datapath. + lc_ctrl_pkg::lc_tx_t [NumAgentsIdx+1:0] lc_escalate_en, lc_escalate_en_synced; + // Single wire for gating assertions in arbitration and CDC primitives. + logic lc_escalate_en_any; + + prim_lc_sync #( + .NumCopies(NumAgentsIdx+2) + ) u_prim_lc_sync_escalate_en ( + .clk_i, + .rst_ni, + .lc_en_i(lc_escalate_en_i), + .lc_en_o(lc_escalate_en_synced) + ); + + prim_lc_sync #( + .NumCopies(1) + ) u_prim_lc_sync_creator_seed_sw_rw_en ( + .clk_i, + .rst_ni, + .lc_en_i(lc_creator_seed_sw_rw_en_i), + .lc_en_o({lc_creator_seed_sw_rw_en}) + ); + + prim_lc_sync #( + .NumCopies(1) + ) u_prim_lc_sync_owner_seed_sw_rw_en ( + .clk_i, + .rst_ni, + .lc_en_i(lc_owner_seed_sw_rw_en_i), + .lc_en_o({lc_owner_seed_sw_rw_en}) + ); + + prim_lc_sync #( + .NumCopies(1) + ) u_prim_lc_sync_seed_hw_rd_en ( + .clk_i, + .rst_ni, + .lc_en_i(lc_seed_hw_rd_en_i), + .lc_en_o({lc_seed_hw_rd_en}) + ); + + prim_lc_sync #( + .NumCopies(3) + ) u_prim_lc_sync_dft_en ( + .clk_i, + .rst_ni, + .lc_en_i(lc_dft_en_i), + .lc_en_o(lc_dft_en) + ); + + prim_lc_sync #( + .NumCopies(1) + ) u_prim_lc_sync_check_byp_en ( + .clk_i, + .rst_ni, + .lc_en_i(lc_check_byp_en_i), + .lc_en_o({lc_check_byp_en}) + ); + + ///////////////////////////////////// + // TL-UL SW partition select logic // + ///////////////////////////////////// + + // The SW partitions share the same TL-UL adapter. + logic tlul_req, tlul_gnt, tlul_rvalid; + logic [SwWindowAddrWidth-1:0] tlul_addr; + logic [1:0] tlul_rerror; + logic [31:0] tlul_rdata; + + import prim_mubi_pkg::MuBi4False; + tlul_adapter_sram #( + .SramAw ( SwWindowAddrWidth ), + .SramDw ( 32 ), + .Outstanding ( 1 ), + .ByteAccess ( 0 ), + .ErrOnWrite ( 1 ) // No write accesses allowed here. + ) u_tlul_adapter_sram ( + .clk_i, + .rst_ni, + .en_ifetch_i ( MuBi4False ), + .tl_i ( tl_win_h2d ), + .tl_o ( tl_win_d2h ), + .req_o ( tlul_req ), + .gnt_i ( tlul_gnt ), + .we_o ( ), // unused + .addr_o ( tlul_addr ), + .wdata_o ( ), // unused + .wmask_o ( ), // unused + // SEC_CM: BUS.INTEGRITY + .intg_error_o ( intg_error[1] ), + .rdata_i ( tlul_rdata ), + .rvalid_i ( tlul_rvalid ), + .rerror_i ( tlul_rerror ), + .req_type_o ( ), + .rmw_in_progress_o( ) + ); + + logic [NumPart-1:0] tlul_part_sel_oh; + for (genvar k = 0; k < NumPart; k++) begin : gen_part_sel + localparam logic [OtpByteAddrWidth:0] PartEnd = (OtpByteAddrWidth+1)'(PartInfo[k].offset) + + (OtpByteAddrWidth+1)'(PartInfo[k].size); + if (PartInfo[k].offset == 0) begin : gen_zero_offset + assign tlul_part_sel_oh[k] = ({1'b0, {tlul_addr, 2'b00}} < PartEnd); + end else begin : gen_nonzero_offset + assign tlul_part_sel_oh[k] = ({tlul_addr, 2'b00} >= PartInfo[k].offset) & + ({1'b0, {tlul_addr, 2'b00}} < PartEnd); + end + end + + `ASSERT(PartSelMustBeOnehot_A, $onehot0(tlul_part_sel_oh)) + + logic [NumPartWidth-1:0] tlul_part_idx; + prim_arbiter_fixed #( + .N(NumPart), + .EnDataPort(0) + ) u_part_sel_idx ( + .clk_i, + .rst_ni, + .req_i ( tlul_part_sel_oh ), + .data_i ( '{default: '0} ), + .gnt_o ( ), // unused + .idx_o ( tlul_part_idx ), + .valid_o ( ), // unused + .data_o ( ), // unused + .ready_i ( 1'b0 ) + ); + + logic tlul_oob_err_d, tlul_oob_err_q; + logic [NumPart-1:0] part_tlul_req, part_tlul_gnt, part_tlul_rvalid; + logic [SwWindowAddrWidth-1:0] part_tlul_addr; + logic [NumPart-1:0][1:0] part_tlul_rerror; + logic [NumPart-1:0][31:0] part_tlul_rdata; + + always_comb begin : p_tlul_assign + // Send request to the correct partition. + part_tlul_addr = tlul_addr; + part_tlul_req = '0; + tlul_oob_err_d = 1'b0; + if (tlul_req) begin + if (tlul_part_sel_oh != '0) begin + part_tlul_req[tlul_part_idx] = 1'b1; + end else begin + // Error out in the next cycle if address was out of bounds. + tlul_oob_err_d = 1'b1; + end + end + + // aggregate TL-UL responses + tlul_gnt = |part_tlul_gnt | tlul_oob_err_q; + tlul_rvalid = |part_tlul_rvalid | tlul_oob_err_q; + tlul_rerror = '0; + tlul_rdata = '0; + for (int k = 0; k < NumPart; k++) begin + tlul_rerror |= part_tlul_rerror[k]; + tlul_rdata |= part_tlul_rdata[k]; + end + end + + always_ff @(posedge clk_i or negedge rst_ni) begin : p_tlul_reg + if (!rst_ni) begin + tlul_oob_err_q <= 1'b0; + end else begin + tlul_oob_err_q <= tlul_oob_err_d; + end + end + + ////////////////////////////// + // Access Defaults and CSRs // + ////////////////////////////// + + // SEC_CM: ACCESS.CTRL.MUBI + part_access_t [NumPart-1:0] part_access_pre, part_access; + always_comb begin : p_access_control + // Assigns default and extracts named CSR read enables for SW_CFG partitions. + // SEC_CM: PART.MEM.REGREN + part_access_pre = named_part_access_pre(reg2hw); + + // Permanently lock DAI write and read access to the life cycle partition. + // The LC partition can only be read from and written to via the LC controller. + // SEC_CM: LC_PART.MEM.SW_NOACCESS + part_access_pre[LifeCycleIdx].write_lock = MuBi8True; + part_access_pre[LifeCycleIdx].read_lock = MuBi8True; + + // Special partitions for keymgr material only become writable when + // provisioning is enabled. + if (lc_ctrl_pkg::lc_tx_test_false_loose(lc_creator_seed_sw_rw_en)) begin + for (int k = 0; k < NumPart; k++) begin + if (PartInfo[k].iskeymgr_creator) begin + part_access_pre[k] = {2{prim_mubi_pkg::MuBi8True}}; + end + end + end + if (lc_ctrl_pkg::lc_tx_test_false_loose(lc_owner_seed_sw_rw_en)) begin + for (int k = 0; k < NumPart; k++) begin + if (PartInfo[k].iskeymgr_owner) begin + part_access_pre[k] = {2{prim_mubi_pkg::MuBi8True}}; + end + end + end + end + + // This prevents the synthesis tool from optimizing the multibit signals. + for (genvar k = 0; k < NumPart; k++) begin : gen_bufs + prim_mubi8_sender #( + .AsyncOn(0) + ) u_prim_mubi8_sender_write_lock ( + .clk_i, + .rst_ni, + .mubi_i(part_access_pre[k].write_lock), + .mubi_o(part_access[k].write_lock) + ); + prim_mubi8_sender #( + .AsyncOn(0) + ) u_prim_mubi8_sender_read_lock ( + .clk_i, + .rst_ni, + .mubi_i(part_access_pre[k].read_lock), + .mubi_o(part_access[k].read_lock) + ); + end + + ////////////////////// + // DAI-related CSRs // + ////////////////////// + + logic dai_idle; + logic dai_req; + dai_cmd_e dai_cmd; + logic [OtpByteAddrWidth-1:0] dai_addr; + logic [NumDaiWords-1:0][31:0] dai_wdata, dai_rdata; + logic direct_access_regwen_d, direct_access_regwen_q; + + // This is the HWEXT implementation of a RW0C regwen bit. + assign direct_access_regwen_d = (reg2hw.direct_access_regwen.qe && + !reg2hw.direct_access_regwen.q) ? 1'b0 : direct_access_regwen_q; + + // Any write to this register triggers a DAI command. + assign dai_req = reg2hw.direct_access_cmd.digest.qe | + reg2hw.direct_access_cmd.wr.qe | + reg2hw.direct_access_cmd.rd.qe; + + assign dai_cmd = dai_cmd_e'({reg2hw.direct_access_cmd.digest.q, + reg2hw.direct_access_cmd.wr.q, + reg2hw.direct_access_cmd.rd.q}); + + assign dai_addr = reg2hw.direct_access_address.q; + assign dai_wdata = reg2hw.direct_access_wdata; + + // The DAI and the LCI can initiate write transactions, which + // are critical and we must not power down if such transactions + // are pending. Hence, we signal the LCI/DAI idle state to the + // power manager. This signal is flopped here as it has to + // cross a clock boundary to the power manager. + logic dai_prog_idle, lci_prog_idle, otp_idle_d, otp_idle_q; + assign otp_idle_d = lci_prog_idle & dai_prog_idle; + assign pwr_otp_o.otp_idle = otp_idle_q; + + always_ff @(posedge clk_i or negedge rst_ni) begin : p_idle_regwen_regs + if (!rst_ni) begin + otp_idle_q <= 1'b0; + // The regwen bit has to reset to 1 so that CSR accesses are enabled by default. + direct_access_regwen_q <= 1'b1; + end else begin + otp_idle_q <= otp_idle_d; + direct_access_regwen_q <= direct_access_regwen_d; + end + end + + ////////////////////////////////////// + // Ctrl/Status CSRs, Errors, Alerts // + ////////////////////////////////////// + + // Status and error reporting CSRs, error interrupt generation and alerts. + otp_err_e [NumPart+1:0] part_error; + logic [NumAgents-1:0] part_fsm_err; + logic [NumPart+1:0] part_errors_reduced; + logic otp_operation_done, otp_error; + logic fatal_macro_error_d, fatal_macro_error_q; + logic fatal_check_error_d, fatal_check_error_q; + logic fatal_bus_integ_error_d, fatal_bus_integ_error_q; + logic chk_pending, chk_timeout; + logic lfsr_fsm_err, scrmbl_fsm_err; + always_comb begin : p_errors_alerts + // Note: since these are all fatal alert events, we latch them and keep on sending + // alert events via the alert senders. These regs can only be cleared via a system reset. + fatal_macro_error_d = fatal_macro_error_q; + fatal_check_error_d = fatal_check_error_q; + fatal_bus_integ_error_d = fatal_bus_integ_error_q | (|intg_error); + // These are the per-partition buffered escalation inputs + lc_escalate_en = lc_escalate_en_synced; + // Need a single wire for gating assertions in arbitration and CDC primitives. + lc_escalate_en_any = 1'b0; + + // Aggregate all the macro alerts from the partitions + for (int k = 0; k < NumPart; k++) begin + // Filter for critical error codes that should not occur in the field. + fatal_macro_error_d |= part_error[k] == MacroError; + // While uncorrectable ECC errors are always reported, they do not trigger a fatal alert + // event in some partitions like the VENDOR_TEST partition. + if (PartInfo[k].integrity) begin + fatal_macro_error_d |= part_error[k] == MacroEccUncorrError; + end + end + // Aggregate all the macro alerts from the DAI/LCI + for (int k = NumPart; k < NumPart+2; k++) begin + // Filter for critical error codes that should not occur in the field. + fatal_macro_error_d |= part_error[k] inside {MacroError, MacroEccUncorrError}; + end + + // Aggregate all the remaining errors / alerts from the partitions and the DAI/LCI + for (int k = 0; k < NumPart+2; k++) begin + // Set the error bit if the error status of the corresponding partition is nonzero. + // Need to reverse the order here since the field enumeration in hw2reg.status is reversed. + part_errors_reduced[NumPart+1-k] = |part_error[k]; + // Filter for integrity and consistency check failures. + fatal_check_error_d |= part_error[k] inside {CheckFailError, FsmStateError}; + + // If a fatal alert has been observed in any of the partitions/FSMs, + // we locally trigger escalation within OTP, which moves all FSMs + // to a terminal error state. + if (fatal_macro_error_q || fatal_check_error_q) begin + lc_escalate_en[k] = lc_ctrl_pkg::On; + end + if (lc_ctrl_pkg::lc_tx_test_true_strict(lc_escalate_en[k])) begin + lc_escalate_en_any = 1'b1; + end + end + + // Errors from other non-partition FSMs. + fatal_check_error_d |= chk_timeout | + lfsr_fsm_err | + scrmbl_fsm_err | + (|part_fsm_err); + end + + // If we got an error, we trigger an interrupt. + logic [$bits(part_errors_reduced)+4-1:0] interrupt_triggers_d, interrupt_triggers_q; + + // This makes sure that interrupts are not sticky. + assign interrupt_triggers_d = { + part_errors_reduced, + chk_timeout, + lfsr_fsm_err, + scrmbl_fsm_err, + |part_fsm_err + }; + + assign otp_error = |(interrupt_triggers_d & ~interrupt_triggers_q); + + always_ff @(posedge clk_i or negedge rst_ni) begin : p_alert_regs + if (!rst_ni) begin + fatal_macro_error_q <= '0; + fatal_check_error_q <= '0; + fatal_bus_integ_error_q <= '0; + interrupt_triggers_q <= '0; + end else begin + fatal_macro_error_q <= fatal_macro_error_d; + fatal_check_error_q <= fatal_check_error_d; + fatal_bus_integ_error_q <= fatal_bus_integ_error_d; + interrupt_triggers_q <= interrupt_triggers_d; + end + end + + // CSR assignments are done in one combo process so that we can use + // the parameterized digest_assign task below without multiple driver issues. + logic unused_part_digest; + logic [NumPart-1:0][ScrmblBlockWidth-1:0] part_digest; + logic intr_state_otp_operation_done_d, intr_state_otp_operation_done_de; + logic intr_state_otp_error_d, intr_state_otp_error_de; + always_comb begin : p_csr_assign + // Not all partition digests are consumed, and assigning them to an unused_* signal in the + // function below does not seem to work for some linters. + unused_part_digest = ^part_digest; + // Assign named CSRs (like digests). + hw2reg = named_reg_assign(part_digest); + // DAI related CSRs + hw2reg.direct_access_rdata = dai_rdata; + // ANDing this state with dai_idle write-protects all DAI regs during pending operations. + hw2reg.direct_access_regwen.d = direct_access_regwen_q & dai_idle; + // Assign these to the status register. + hw2reg.status = {part_errors_reduced, + chk_timeout, + lfsr_fsm_err, + scrmbl_fsm_err, + part_fsm_err[KdiIdx], + fatal_bus_integ_error_q, + dai_idle, + chk_pending}; + // Error code registers. + hw2reg.err_code = part_error; + // Interrupt signals + hw2reg.intr_state.otp_operation_done.de = intr_state_otp_operation_done_de; + hw2reg.intr_state.otp_operation_done.d = intr_state_otp_operation_done_d; + hw2reg.intr_state.otp_error.de = intr_state_otp_error_de; + hw2reg.intr_state.otp_error.d = intr_state_otp_error_d; +end + + + ////////////////////////////////// + // Interrupts and Alert Senders // + ////////////////////////////////// + + prim_intr_hw #( + .Width(1) + ) u_intr_operation_done ( + .clk_i, + .rst_ni, + .event_intr_i ( otp_operation_done ), + .reg2hw_intr_enable_q_i ( reg2hw.intr_enable.otp_operation_done.q ), + .reg2hw_intr_test_q_i ( reg2hw.intr_test.otp_operation_done.q ), + .reg2hw_intr_test_qe_i ( reg2hw.intr_test.otp_operation_done.qe ), + .reg2hw_intr_state_q_i ( reg2hw.intr_state.otp_operation_done.q ), + .hw2reg_intr_state_de_o ( intr_state_otp_operation_done_de ), + .hw2reg_intr_state_d_o ( intr_state_otp_operation_done_d ), + .intr_o ( intr_otp_operation_done_o ) + ); + + prim_intr_hw #( + .Width(1) + ) u_intr_error ( + .clk_i, + .rst_ni, + .event_intr_i ( otp_error ), + .reg2hw_intr_enable_q_i ( reg2hw.intr_enable.otp_error.q ), + .reg2hw_intr_test_q_i ( reg2hw.intr_test.otp_error.q ), + .reg2hw_intr_test_qe_i ( reg2hw.intr_test.otp_error.qe ), + .reg2hw_intr_state_q_i ( reg2hw.intr_state.otp_error.q ), + .hw2reg_intr_state_de_o ( intr_state_otp_error_de ), + .hw2reg_intr_state_d_o ( intr_state_otp_error_d ), + .intr_o ( intr_otp_error_o ) + ); + + logic [NumAlerts-1:0] alerts; + logic [NumAlerts-1:0] alert_test; + logic fatal_prim_otp_alert, recov_prim_otp_alert; + + assign alerts = { + recov_prim_otp_alert, + fatal_prim_otp_alert, + fatal_bus_integ_error_q, + fatal_check_error_q, + fatal_macro_error_q + }; + + assign alert_test = { + reg2hw.alert_test.recov_prim_otp_alert.q & + reg2hw.alert_test.recov_prim_otp_alert.qe, + reg2hw.alert_test.fatal_prim_otp_alert.q & + reg2hw.alert_test.fatal_prim_otp_alert.qe, + reg2hw.alert_test.fatal_bus_integ_error.q & + reg2hw.alert_test.fatal_bus_integ_error.qe, + reg2hw.alert_test.fatal_check_error.q & + reg2hw.alert_test.fatal_check_error.qe, + reg2hw.alert_test.fatal_macro_error.q & + reg2hw.alert_test.fatal_macro_error.qe + }; + + localparam logic [NumAlerts-1:0] AlertIsFatal = { + 1'b0, // recov_prim_otp_alert + 1'b1, // fatal_prim_otp_alert + 1'b1, // fatal_bus_integ_error_q + 1'b1, // fatal_check_error_q + 1'b1 // fatal_macro_error_q + }; + + for (genvar k = 0; k < NumAlerts; k++) begin : gen_alert_tx + prim_alert_sender #( + .AsyncOn(AlertAsyncOn[k]), + .IsFatal(AlertIsFatal[k]) + ) u_prim_alert_sender ( + .clk_i, + .rst_ni, + .alert_test_i ( alert_test[k] ), + .alert_req_i ( alerts[k] ), + .alert_ack_o ( ), + .alert_state_o ( ), + .alert_rx_i ( alert_rx_i[k] ), + .alert_tx_o ( alert_tx_o[k] ) + ); + end + + //////////////////////////////// + // LFSR Timer and CSR mapping // + //////////////////////////////// + + logic integ_chk_trig, cnsty_chk_trig; + logic [NumPart-1:0] integ_chk_req, integ_chk_ack; + logic [NumPart-1:0] cnsty_chk_req, cnsty_chk_ack; + logic lfsr_edn_req, lfsr_edn_ack; + logic [EdnDataWidth-1:0] edn_data; + + assign integ_chk_trig = reg2hw.check_trigger.integrity.q & + reg2hw.check_trigger.integrity.qe; + assign cnsty_chk_trig = reg2hw.check_trigger.consistency.q & + reg2hw.check_trigger.consistency.qe; + + // SEC_CM: PART.DATA_REG.BKGN_CHK + otp_ctrl_lfsr_timer #( + .RndCnstLfsrSeed(RndCnstLfsrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm) + ) u_otp_ctrl_lfsr_timer ( + .clk_i, + .rst_ni, + .edn_req_o ( lfsr_edn_req ), + .edn_ack_i ( lfsr_edn_ack ), + .edn_data_i ( edn_data ), + // We can enable the timer once OTP has initialized. + // Note that this is only the initial release that gets + // the timer FSM into an operational state. + // Whether or not the timers / background checks are + // activated depends on the CSR configuration (by default + // they are switched off). + .timer_en_i ( pwr_otp_o.otp_done ), + // This idle signal is the same that is output to the power + // manager, and indicates whether there is an ongoing OTP programming + // operation. It is used to pause the consistency check timeout + // counter in order to prevent spurious timeouts (OTP programming + // operations are very slow compared to readout operations and can + // hence interfere with the timeout mechanism). + .otp_prog_busy_i ( ~otp_idle_d ), + .integ_chk_trig_i ( integ_chk_trig ), + .cnsty_chk_trig_i ( cnsty_chk_trig ), + .chk_pending_o ( chk_pending ), + .timeout_i ( reg2hw.check_timeout.q ), + .integ_period_msk_i ( reg2hw.integrity_check_period.q ), + .cnsty_period_msk_i ( reg2hw.consistency_check_period.q ), + .integ_chk_req_o ( integ_chk_req ), + .cnsty_chk_req_o ( cnsty_chk_req ), + .integ_chk_ack_i ( integ_chk_ack ), + .cnsty_chk_ack_i ( cnsty_chk_ack ), + .escalate_en_i ( lc_escalate_en[NumAgents] ), + .chk_timeout_o ( chk_timeout ), + .fsm_err_o ( lfsr_fsm_err ) + ); + + /////////////////////////////////////// + // EDN Arbitration, Request and Sync // + /////////////////////////////////////// + + // Both the key derivation and LFSR reseeding are low bandwidth, + // hence they can share the same EDN interface. + logic edn_req, edn_ack; + logic key_edn_req, key_edn_ack; + prim_arbiter_tree #( + .N(2), + .EnDataPort(0) + ) u_edn_arb ( + .clk_i, + .rst_ni, + .req_chk_i ( ~lc_escalate_en_any ), + .req_i ( {lfsr_edn_req, key_edn_req} ), + .data_i ( '{default: '0} ), + .gnt_o ( {lfsr_edn_ack, key_edn_ack} ), + .idx_o ( ), // unused + .valid_o ( edn_req ), + .data_o ( ), // unused + .ready_i ( edn_ack ) + ); + + // This synchronizes the data coming from EDN and stacks the + // 32bit EDN words to achieve an internal entropy width of 64bit. + prim_edn_req #( + .OutWidth(EdnDataWidth) + ) u_prim_edn_req ( + .clk_i, + .rst_ni, + .req_chk_i ( ~lc_escalate_en_any ), + .req_i ( edn_req ), + .ack_o ( edn_ack ), + .data_o ( edn_data ), + .fips_o ( ), // unused + .err_o ( ), // unused + .clk_edn_i, + .rst_edn_ni, + .edn_o, + .edn_i + ); + + /////////////////////////////// + // OTP Macro and Arbitration // + /////////////////////////////// + + typedef struct packed { + prim_otp_pkg::cmd_e cmd; + logic [OtpSizeWidth-1:0] size; // Number of native words to write. + logic [OtpIfWidth-1:0] wdata; + logic [OtpAddrWidth-1:0] addr; // Halfword address. + } otp_bundle_t; + + logic [NumAgents-1:0] part_otp_arb_req, part_otp_arb_gnt; + otp_bundle_t part_otp_arb_bundle [NumAgents]; + logic otp_arb_valid, otp_arb_ready; + logic otp_prim_valid, otp_prim_ready; + logic otp_rsp_fifo_valid, otp_rsp_fifo_ready; + logic [vbits(NumAgents)-1:0] otp_arb_idx; + otp_bundle_t otp_arb_bundle; + + // The OTP interface is arbitrated on a per-cycle basis, meaning that back-to-back + // transactions can be completely independent. + prim_arbiter_tree #( + .N(NumAgents), + .DW($bits(otp_bundle_t)) + ) u_otp_arb ( + .clk_i, + .rst_ni, + .req_chk_i ( ~lc_escalate_en_any ), + .req_i ( part_otp_arb_req ), + .data_i ( part_otp_arb_bundle ), + .gnt_o ( part_otp_arb_gnt ), + .idx_o ( otp_arb_idx ), + .valid_o ( otp_arb_valid ), + .data_o ( otp_arb_bundle ), + .ready_i ( otp_arb_ready ) + ); + + // Don't issue more transactions than what the rsp_fifo can keep track of. + assign otp_arb_ready = otp_prim_ready & otp_rsp_fifo_ready; + assign otp_prim_valid = otp_arb_valid & otp_rsp_fifo_ready; + assign otp_rsp_fifo_valid = otp_prim_ready & otp_prim_valid; + + prim_otp_pkg::err_e part_otp_err; + logic [OtpIfWidth-1:0] part_otp_rdata; + logic otp_rvalid; + tlul_pkg::tl_h2d_t prim_tl_h2d_gated; + tlul_pkg::tl_d2h_t prim_tl_d2h_gated; + + // Life cycle qualification of TL-UL test interface. + // SEC_CM: TEST.BUS.LC_GATED + // SEC_CM: TEST_TL_LC_GATE.FSM.SPARSE + tlul_lc_gate #( + .NumGatesPerDirection(2) + ) u_tlul_lc_gate ( + .clk_i, + .rst_ni, + .tl_h2d_i(prim_tl_i), + .tl_d2h_o(prim_tl_o), + .tl_h2d_o(prim_tl_h2d_gated), + .tl_d2h_i(prim_tl_d2h_gated), + .lc_en_i (lc_dft_en[0]), + .flush_req_i('0), + .flush_ack_o(), + .resp_pending_o(), + .err_o (intg_error[2]) + ); + + // Test-related GPIOs. + // SEC_CM: TEST.BUS.LC_GATED + logic [OtpTestVectWidth-1:0] otp_test_vect; + assign cio_test_o = (lc_ctrl_pkg::lc_tx_test_true_strict(lc_dft_en[1])) ? + otp_test_vect : '0; + assign cio_test_en_o = (lc_ctrl_pkg::lc_tx_test_true_strict(lc_dft_en[2])) ? + {OtpTestVectWidth{1'b1}} : '0; + + // SEC_CM: MACRO.MEM.CM, MACRO.MEM.INTEGRITY + prim_otp #( + .Width ( OtpWidth ), + .Depth ( OtpDepth ), + .SizeWidth ( OtpSizeWidth ), + .PwrSeqWidth ( OtpPwrSeqWidth ), + .TestCtrlWidth ( OtpTestCtrlWidth ), + .TestStatusWidth ( OtpTestStatusWidth ), + .TestVectWidth ( OtpTestVectWidth ), + .MemInitFile ( MemInitFile ), + .VendorTestOffset ( VendorTestOffset ), + .VendorTestSize ( VendorTestSize ) + ) u_otp ( + .clk_i, + .rst_ni, + // Observability controls to/from AST + .obs_ctrl_i, + .otp_obs_o, + // Power sequencing signals to/from AST + .pwr_seq_o ( otp_ast_pwr_seq_o.pwr_seq ), + .pwr_seq_h_i ( otp_ast_pwr_seq_h_i.pwr_seq_h ), + .ext_voltage_io ( otp_ext_voltage_h_io ), + // Test interface + .test_ctrl_i ( lc_otp_vendor_test_i.ctrl ), + .test_status_o ( lc_otp_vendor_test_o.status ), + .test_vect_o ( otp_test_vect ), + .test_tl_i ( prim_tl_h2d_gated ), + .test_tl_o ( prim_tl_d2h_gated ), + // Other DFT signals + .scan_en_i, + .scan_rst_ni, + .scanmode_i, + // Alerts + .fatal_alert_o ( fatal_prim_otp_alert ), + .recov_alert_o ( recov_prim_otp_alert ), + // Read / Write command interface + .ready_o ( otp_prim_ready ), + .valid_i ( otp_prim_valid ), + .cmd_i ( otp_arb_bundle.cmd ), + .size_i ( otp_arb_bundle.size ), + .addr_i ( otp_arb_bundle.addr ), + .wdata_i ( otp_arb_bundle.wdata ), + // Read data out + .valid_o ( otp_rvalid ), + .rdata_o ( part_otp_rdata ), + .err_o ( part_otp_err ) + ); + + logic otp_fifo_valid; + logic [vbits(NumAgents)-1:0] otp_part_idx; + logic [NumAgents-1:0] part_otp_rvalid; + + // We can have up to two OTP commands in flight, hence we size this to be 2 deep. + // The partitions can unconditionally sink requested data. + prim_fifo_sync #( + .Width(vbits(NumAgents)), + .Depth(2) + ) u_otp_rsp_fifo ( + .clk_i, + .rst_ni, + .clr_i ( 1'b0 ), + .wvalid_i ( otp_rsp_fifo_valid ), + .wready_o ( otp_rsp_fifo_ready ), + .wdata_i ( otp_arb_idx ), + .rvalid_o ( otp_fifo_valid ), + .rready_i ( otp_rvalid ), + .rdata_o ( otp_part_idx ), + .depth_o ( ), + .full_o ( ), + .err_o ( ) + ); + + // Steer response back to the partition where this request originated. + always_comb begin : p_rvalid + part_otp_rvalid = '0; + part_otp_rvalid[otp_part_idx] = otp_rvalid & otp_fifo_valid; + end + + // Note that this must be true by construction. + `ASSERT(OtpRespFifoUnderflow_A, otp_rvalid |-> otp_fifo_valid) + + ///////////////////////////////////////// + // Scrambling Datapath and Arbitration // + ///////////////////////////////////////// + + // Note: as opposed to the OTP arbitration above, we do not perform cycle-wise arbitration, but + // transaction-wise arbitration. This is implemented using a RR arbiter that acts as a mutex. + // I.e., each agent (e.g. the DAI or a partition) can request a lock on the mutex. Once granted, + // the partition can keep the lock as long as needed for the transaction to complete. The + // partition must yield its lock by deasserting the request signal for the arbiter to proceed. + // Since this scheme does not have built-in preemtion, it must be ensured that the agents + // eventually release their locks for this to be fair. + // + // See also https://docs.opentitan.org/hw/ip/otp_ctrl/doc/index.html#block-diagram for details. + typedef struct packed { + otp_scrmbl_cmd_e cmd; + digest_mode_e mode; + logic [ConstSelWidth-1:0] sel; + logic [ScrmblBlockWidth-1:0] data; + logic valid; + } scrmbl_bundle_t; + + logic [NumAgents-1:0] part_scrmbl_mtx_req, part_scrmbl_mtx_gnt; + scrmbl_bundle_t part_scrmbl_req_bundle [NumAgents]; + scrmbl_bundle_t scrmbl_req_bundle; + logic [vbits(NumAgents)-1:0] scrmbl_mtx_idx; + logic scrmbl_mtx_valid; + + // Note that arbiter decisions do not change when backpressured. + // Hence, the idx_o signal is guaranteed to remain stable until ack'ed. + prim_arbiter_tree #( + .N(NumAgents), + .DW($bits(scrmbl_bundle_t)) + ) u_scrmbl_mtx ( + .clk_i, + .rst_ni, + .req_chk_i ( 1'b0 ), // REQ is allowed to go low again without ACK even + // during normal operation. + .req_i ( part_scrmbl_mtx_req ), + .data_i ( part_scrmbl_req_bundle ), + .gnt_o ( ), + .idx_o ( scrmbl_mtx_idx ), + .valid_o ( scrmbl_mtx_valid ), + .data_o ( scrmbl_req_bundle ), + .ready_i ( 1'b0 ) + ); + + // Since the ready_i signal of the arbiter is statically set to 1'b0 above, we are always in a + // "backpressure" situation, where the RR arbiter will automatically advance the internal RR state + // to give the current winner max priority in subsequent cycles in order to keep the decision + // stable. Rearbitration occurs once the winning agent deasserts its request. + always_comb begin : p_mutex + part_scrmbl_mtx_gnt = '0; + part_scrmbl_mtx_gnt[scrmbl_mtx_idx] = scrmbl_mtx_valid; + end + + logic [ScrmblBlockWidth-1:0] part_scrmbl_rsp_data; + logic scrmbl_arb_req_ready, scrmbl_arb_rsp_valid; + logic [NumAgents-1:0] part_scrmbl_req_ready, part_scrmbl_rsp_valid; + + // SEC_CM: SECRET.MEM.SCRAMBLE + // SEC_CM: PART.MEM.DIGEST + otp_ctrl_scrmbl u_otp_ctrl_scrmbl ( + .clk_i, + .rst_ni, + .cmd_i ( scrmbl_req_bundle.cmd ), + .mode_i ( scrmbl_req_bundle.mode ), + .sel_i ( scrmbl_req_bundle.sel ), + .data_i ( scrmbl_req_bundle.data ), + .valid_i ( scrmbl_req_bundle.valid ), + .ready_o ( scrmbl_arb_req_ready ), + .data_o ( part_scrmbl_rsp_data ), + .valid_o ( scrmbl_arb_rsp_valid ), + .escalate_en_i ( lc_escalate_en[NumAgents+1] ), + .fsm_err_o ( scrmbl_fsm_err ) + ); + + // steer back responses + always_comb begin : p_scmrbl_resp + part_scrmbl_req_ready = '0; + part_scrmbl_rsp_valid = '0; + part_scrmbl_req_ready[scrmbl_mtx_idx] = scrmbl_arb_req_ready; + part_scrmbl_rsp_valid[scrmbl_mtx_idx] = scrmbl_arb_rsp_valid; + end + + ///////////////////////////// + // Direct Access Interface // + ///////////////////////////// + + logic part_init_req; + logic [NumPart-1:0] part_init_done; + part_access_t [NumPart-1:0] part_access_dai; + + // The init request comes from the power manager, which lives in the AON clock domain. + logic pwr_otp_req_synced; + prim_flop_2sync #( + .Width(1) + ) u_otp_init_sync ( + .clk_i, + .rst_ni, + .d_i ( pwr_otp_i.otp_init ), + .q_o ( pwr_otp_req_synced ) + ); + + // Register this signal as it has to cross a clock boundary. + logic pwr_otp_rsp_d, pwr_otp_rsp_q; + assign pwr_otp_o.otp_done = pwr_otp_rsp_q; + + always_ff @(posedge clk_i or negedge rst_ni) begin : p_init_reg + if (!rst_ni) begin + pwr_otp_rsp_q <= 1'b0; + end else begin + pwr_otp_rsp_q <= pwr_otp_rsp_d; + end + end + + otp_ctrl_dai u_otp_ctrl_dai ( + .clk_i, + .rst_ni, + .init_req_i ( pwr_otp_req_synced ), + .init_done_o ( pwr_otp_rsp_d ), + .part_init_req_o ( part_init_req ), + .part_init_done_i ( part_init_done ), + .escalate_en_i ( lc_escalate_en[DaiIdx] ), + .error_o ( part_error[DaiIdx] ), + .fsm_err_o ( part_fsm_err[DaiIdx] ), + .part_access_i ( part_access_dai ), + .dai_addr_i ( dai_addr ), + .dai_cmd_i ( dai_cmd ), + .dai_req_i ( dai_req ), + .dai_wdata_i ( dai_wdata ), + .dai_idle_o ( dai_idle ), + .dai_prog_idle_o ( dai_prog_idle ), + .dai_cmd_done_o ( otp_operation_done ), + .dai_rdata_o ( dai_rdata ), + .otp_req_o ( part_otp_arb_req[DaiIdx] ), + .otp_cmd_o ( part_otp_arb_bundle[DaiIdx].cmd ), + .otp_size_o ( part_otp_arb_bundle[DaiIdx].size ), + .otp_wdata_o ( part_otp_arb_bundle[DaiIdx].wdata ), + .otp_addr_o ( part_otp_arb_bundle[DaiIdx].addr ), + .otp_gnt_i ( part_otp_arb_gnt[DaiIdx] ), + .otp_rvalid_i ( part_otp_rvalid[DaiIdx] ), + .otp_rdata_i ( part_otp_rdata ), + .otp_err_i ( part_otp_err ), + .scrmbl_mtx_req_o ( part_scrmbl_mtx_req[DaiIdx] ), + .scrmbl_mtx_gnt_i ( part_scrmbl_mtx_gnt[DaiIdx] ), + .scrmbl_cmd_o ( part_scrmbl_req_bundle[DaiIdx].cmd ), + .scrmbl_mode_o ( part_scrmbl_req_bundle[DaiIdx].mode ), + .scrmbl_sel_o ( part_scrmbl_req_bundle[DaiIdx].sel ), + .scrmbl_data_o ( part_scrmbl_req_bundle[DaiIdx].data ), + .scrmbl_valid_o ( part_scrmbl_req_bundle[DaiIdx].valid ), + .scrmbl_ready_i ( part_scrmbl_req_ready[DaiIdx] ), + .scrmbl_valid_i ( part_scrmbl_rsp_valid[DaiIdx] ), + .scrmbl_data_i ( part_scrmbl_rsp_data ) + ); + + //////////////////////////////////// + // Lifecycle Transition Interface // + //////////////////////////////////// + + logic [PartInfo[LifeCycleIdx].size-1:0][7:0] lc_otp_program_data; + assign lc_otp_program_data[LcStateOffset-LifeCycleOffset +: LcStateSize] = + lc_otp_program_i.state; + assign lc_otp_program_data[LcTransitionCntOffset-LifeCycleOffset +: LcTransitionCntSize] = + lc_otp_program_i.count; + + otp_ctrl_lci #( + .Info(PartInfo[LifeCycleIdx]) + ) u_otp_ctrl_lci ( + .clk_i, + .rst_ni, + .lci_en_i ( pwr_otp_o.otp_done ), + .escalate_en_i ( lc_escalate_en[LciIdx] ), + .error_o ( part_error[LciIdx] ), + .fsm_err_o ( part_fsm_err[LciIdx] ), + .lci_prog_idle_o ( lci_prog_idle ), + .lc_req_i ( lc_otp_program_i.req ), + .lc_data_i ( lc_otp_program_data ), + .lc_ack_o ( lc_otp_program_o.ack ), + .lc_err_o ( lc_otp_program_o.err ), + .otp_req_o ( part_otp_arb_req[LciIdx] ), + .otp_cmd_o ( part_otp_arb_bundle[LciIdx].cmd ), + .otp_size_o ( part_otp_arb_bundle[LciIdx].size ), + .otp_wdata_o ( part_otp_arb_bundle[LciIdx].wdata ), + .otp_addr_o ( part_otp_arb_bundle[LciIdx].addr ), + .otp_gnt_i ( part_otp_arb_gnt[LciIdx] ), + .otp_rvalid_i ( part_otp_rvalid[LciIdx] ), + .otp_rdata_i ( part_otp_rdata ), + .otp_err_i ( part_otp_err ) + ); + + // Tie off unused connections. + assign part_scrmbl_mtx_req[LciIdx] = '0; + assign part_scrmbl_req_bundle[LciIdx] = '0; + + // This stops lint from complaining about unused signals. + logic unused_lci_scrmbl_sigs; + assign unused_lci_scrmbl_sigs = ^{part_scrmbl_mtx_gnt[LciIdx], + part_scrmbl_req_ready[LciIdx], + part_scrmbl_rsp_valid[LciIdx]}; + + //////////////////////////////////// + // Key Derivation Interface (KDI) // + //////////////////////////////////// + + logic scrmbl_key_seed_valid; + logic [SramKeySeedWidth-1:0] sram_data_key_seed; + logic [FlashKeySeedWidth-1:0] flash_data_key_seed, flash_addr_key_seed; + + otp_ctrl_kdi #( + .RndCnstScrmblKeyInit(RndCnstScrmblKeyInit) + ) u_otp_ctrl_kdi ( + .clk_i, + .rst_ni, + .kdi_en_i ( pwr_otp_o.otp_done ), + .escalate_en_i ( lc_escalate_en[KdiIdx] ), + .fsm_err_o ( part_fsm_err[KdiIdx] ), + .scrmbl_key_seed_valid_i ( scrmbl_key_seed_valid ), + .flash_data_key_seed_i ( flash_data_key_seed ), + .flash_addr_key_seed_i ( flash_addr_key_seed ), + .sram_data_key_seed_i ( sram_data_key_seed ), + .edn_req_o ( key_edn_req ), + .edn_ack_i ( key_edn_ack ), + .edn_data_i ( edn_data ), + .flash_otp_key_i, + .flash_otp_key_o, + .sram_otp_key_i, + .sram_otp_key_o, + .otbn_otp_key_i, + .otbn_otp_key_o, + .scrmbl_mtx_req_o ( part_scrmbl_mtx_req[KdiIdx] ), + .scrmbl_mtx_gnt_i ( part_scrmbl_mtx_gnt[KdiIdx] ), + .scrmbl_cmd_o ( part_scrmbl_req_bundle[KdiIdx].cmd ), + .scrmbl_mode_o ( part_scrmbl_req_bundle[KdiIdx].mode ), + .scrmbl_sel_o ( part_scrmbl_req_bundle[KdiIdx].sel ), + .scrmbl_data_o ( part_scrmbl_req_bundle[KdiIdx].data ), + .scrmbl_valid_o ( part_scrmbl_req_bundle[KdiIdx].valid ), + .scrmbl_ready_i ( part_scrmbl_req_ready[KdiIdx] ), + .scrmbl_valid_i ( part_scrmbl_rsp_valid[KdiIdx] ), + .scrmbl_data_i ( part_scrmbl_rsp_data ) + ); + + // Tie off OTP bus access, since this is not needed. + assign part_otp_arb_req[KdiIdx] = 1'b0; + assign part_otp_arb_bundle[KdiIdx] = '0; + + // This stops lint from complaining about unused signals. + logic unused_kdi_otp_sigs; + assign unused_kdi_otp_sigs = ^{part_otp_arb_gnt[KdiIdx], + part_otp_rvalid[KdiIdx]}; + + ///////////////////////// + // Partition Instances // + ///////////////////////// + + logic [$bits(PartInvDefault)/8-1:0][7:0] part_buf_data; + + for (genvar k = 0; k < NumPart; k ++) begin : gen_partitions + //////////////////////////////////////////////////////////////////////////////////////////////// + if (PartInfo[k].variant == Unbuffered) begin : gen_unbuffered + otp_ctrl_part_unbuf #( + .Info(PartInfo[k]) + ) u_part_unbuf ( + .clk_i, + .rst_ni, + .init_req_i ( part_init_req ), + .init_done_o ( part_init_done[k] ), + .escalate_en_i ( lc_escalate_en[k] ), + .error_o ( part_error[k] ), + .fsm_err_o ( part_fsm_err[k] ), + .access_i ( part_access[k] ), + .access_o ( part_access_dai[k] ), + .digest_o ( part_digest[k] ), + .tlul_req_i ( part_tlul_req[k] ), + .tlul_gnt_o ( part_tlul_gnt[k] ), + .tlul_addr_i ( part_tlul_addr ), + .tlul_rerror_o ( part_tlul_rerror[k] ), + .tlul_rvalid_o ( part_tlul_rvalid[k] ), + .tlul_rdata_o ( part_tlul_rdata[k] ), + .otp_req_o ( part_otp_arb_req[k] ), + .otp_cmd_o ( part_otp_arb_bundle[k].cmd ), + .otp_size_o ( part_otp_arb_bundle[k].size ), + .otp_wdata_o ( part_otp_arb_bundle[k].wdata ), + .otp_addr_o ( part_otp_arb_bundle[k].addr ), + .otp_gnt_i ( part_otp_arb_gnt[k] ), + .otp_rvalid_i ( part_otp_rvalid[k] ), + .otp_rdata_i ( part_otp_rdata ), + .otp_err_i ( part_otp_err ) + ); + + // Tie off unused connections. + assign part_scrmbl_mtx_req[k] = '0; + assign part_scrmbl_req_bundle[k] = '0; + // These checks do not exist in this partition type, + // so we always acknowledge the request. + assign integ_chk_ack[k] = 1'b1; + assign cnsty_chk_ack[k] = 1'b1; + + // No buffered data to expose. + assign part_buf_data[PartInfo[k].offset +: PartInfo[k].size] = '0; + + // This stops lint from complaining about unused signals. + logic unused_part_scrmbl_sigs; + assign unused_part_scrmbl_sigs = ^{part_scrmbl_mtx_gnt[k], + part_scrmbl_req_ready[k], + part_scrmbl_rsp_valid[k], + integ_chk_req[k], + cnsty_chk_req[k]}; + + // Alert assertion for sparse FSM. + `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlPartUnbufFsmCheck_A, + u_part_unbuf.u_state_regs, alert_tx_o[1]) + //////////////////////////////////////////////////////////////////////////////////////////////// + end else if (PartInfo[k].variant == Buffered) begin : gen_buffered + otp_ctrl_part_buf #( + .Info(PartInfo[k]), + .DataDefault(PartInvDefault[PartInfo[k].offset*8 +: PartInfo[k].size*8]) + ) u_part_buf ( + .clk_i, + .rst_ni, + .init_req_i ( part_init_req ), + .init_done_o ( part_init_done[k] ), + .integ_chk_req_i ( integ_chk_req[k] ), + .integ_chk_ack_o ( integ_chk_ack[k] ), + .cnsty_chk_req_i ( cnsty_chk_req[k] ), + .cnsty_chk_ack_o ( cnsty_chk_ack[k] ), + .escalate_en_i ( lc_escalate_en[k] ), + // Only supported by life cycle partition (see further below). + .check_byp_en_i ( lc_ctrl_pkg::Off ), + .error_o ( part_error[k] ), + .fsm_err_o ( part_fsm_err[k] ), + .access_i ( part_access[k] ), + .access_o ( part_access_dai[k] ), + .digest_o ( part_digest[k] ), + .data_o ( part_buf_data[PartInfo[k].offset +: PartInfo[k].size] ), + .otp_req_o ( part_otp_arb_req[k] ), + .otp_cmd_o ( part_otp_arb_bundle[k].cmd ), + .otp_size_o ( part_otp_arb_bundle[k].size ), + .otp_wdata_o ( part_otp_arb_bundle[k].wdata ), + .otp_addr_o ( part_otp_arb_bundle[k].addr ), + .otp_gnt_i ( part_otp_arb_gnt[k] ), + .otp_rvalid_i ( part_otp_rvalid[k] ), + .otp_rdata_i ( part_otp_rdata ), + .otp_err_i ( part_otp_err ), + .scrmbl_mtx_req_o ( part_scrmbl_mtx_req[k] ), + .scrmbl_mtx_gnt_i ( part_scrmbl_mtx_gnt[k] ), + .scrmbl_cmd_o ( part_scrmbl_req_bundle[k].cmd ), + .scrmbl_mode_o ( part_scrmbl_req_bundle[k].mode ), + .scrmbl_sel_o ( part_scrmbl_req_bundle[k].sel ), + .scrmbl_data_o ( part_scrmbl_req_bundle[k].data ), + .scrmbl_valid_o ( part_scrmbl_req_bundle[k].valid ), + .scrmbl_ready_i ( part_scrmbl_req_ready[k] ), + .scrmbl_valid_i ( part_scrmbl_rsp_valid[k] ), + .scrmbl_data_i ( part_scrmbl_rsp_data ) + ); + + // Buffered partitions are not accessible via the TL-UL window. + logic unused_part_tlul_sigs; + assign unused_part_tlul_sigs = ^part_tlul_req[k]; + assign part_tlul_gnt[k] = 1'b0; + assign part_tlul_rerror[k] = '0; + assign part_tlul_rvalid[k] = 1'b0; + assign part_tlul_rdata[k] = '0; + + // Alert assertion for sparse FSM. + `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlPartBufFsmCheck_A, + u_part_buf.u_state_regs, alert_tx_o[1]) + `ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntPartBufCheck_A, + u_part_buf.u_prim_count, alert_tx_o[1]) + //////////////////////////////////////////////////////////////////////////////////////////////// + end else if (PartInfo[k].variant == LifeCycle) begin : gen_lifecycle + otp_ctrl_part_buf #( + .Info(PartInfo[k]), + .DataDefault(PartInvDefault[PartInfo[k].offset*8 +: PartInfo[k].size*8]) + ) u_part_buf ( + .clk_i, + .rst_ni, + .init_req_i ( part_init_req ), + .init_done_o ( part_init_done[k] ), + .integ_chk_req_i ( integ_chk_req[k] ), + .integ_chk_ack_o ( integ_chk_ack[k] ), + .cnsty_chk_req_i ( cnsty_chk_req[k] ), + .cnsty_chk_ack_o ( cnsty_chk_ack[k] ), + .escalate_en_i ( lc_escalate_en[k] ), + // This is only supported by the life cycle partition. We need to prevent this partition + // from escalating once the life cycle state in memory is being updated (and hence not + // consistent with the values in the buffer regs anymore). + .check_byp_en_i ( lc_check_byp_en ), + .error_o ( part_error[k] ), + .fsm_err_o ( part_fsm_err[k] ), + .access_i ( part_access[k] ), + .access_o ( part_access_dai[k] ), + .digest_o ( part_digest[k] ), + .data_o ( part_buf_data[PartInfo[k].offset +: PartInfo[k].size] ), + .otp_req_o ( part_otp_arb_req[k] ), + .otp_cmd_o ( part_otp_arb_bundle[k].cmd ), + .otp_size_o ( part_otp_arb_bundle[k].size ), + .otp_wdata_o ( part_otp_arb_bundle[k].wdata ), + .otp_addr_o ( part_otp_arb_bundle[k].addr ), + .otp_gnt_i ( part_otp_arb_gnt[k] ), + .otp_rvalid_i ( part_otp_rvalid[k] ), + .otp_rdata_i ( part_otp_rdata ), + .otp_err_i ( part_otp_err ), + // The LC partition does not need any scrambling features. + .scrmbl_mtx_req_o ( ), + .scrmbl_mtx_gnt_i ( 1'b0 ), + .scrmbl_cmd_o ( ), + .scrmbl_mode_o ( ), + .scrmbl_sel_o ( ), + .scrmbl_data_o ( ), + .scrmbl_valid_o ( ), + .scrmbl_ready_i ( 1'b0 ), + .scrmbl_valid_i ( 1'b0 ), + .scrmbl_data_i ( '0 ) + ); + + // Buffered partitions are not accessible via the TL-UL window. + logic unused_part_tlul_sigs; + assign unused_part_tlul_sigs = ^part_tlul_req[k]; + assign part_tlul_gnt[k] = 1'b0; + assign part_tlul_rerror[k] = '0; + assign part_tlul_rvalid[k] = 1'b0; + assign part_tlul_rdata[k] = '0; + + // Tie off unused connections. + assign part_scrmbl_mtx_req[k] = '0; + assign part_scrmbl_req_bundle[k] = '0; + + // This stops lint from complaining about unused signals. + logic unused_part_scrmbl_sigs; + assign unused_part_scrmbl_sigs = ^{part_scrmbl_mtx_gnt[k], + part_scrmbl_req_ready[k], + part_scrmbl_rsp_valid[k]}; + // Alert assertion for sparse FSM. + `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlPartLcFsmCheck_A, + u_part_buf.u_state_regs, alert_tx_o[1]) + `ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntPartLcCheck_A, + u_part_buf.u_prim_count, alert_tx_o[1]) + //////////////////////////////////////////////////////////////////////////////////////////////// + end else begin : gen_invalid + // This is invalid and should break elaboration + assert_static_in_generate_invalid assert_static_in_generate_invalid(); + end + //////////////////////////////////////////////////////////////////////////////////////////////// + end + + ////////////////////////////////// + // Buffered Data Output Mapping // + ////////////////////////////////// + + // Output complete hardware config partition. + // Actual mapping to other IPs is done via the intersignal topgen feature, + // selection of fields can be done using the otp_hw_cfg_t struct fields. + otp_broadcast_t otp_broadcast; + assign otp_broadcast = named_broadcast_assign(part_init_done, part_buf_data); + + // Make sure the broadcast valid is flopped before sending it out. + lc_ctrl_pkg::lc_tx_t otp_broadcast_valid_q; + prim_lc_sender u_prim_lc_sender_otp_broadcast_valid ( + .clk_i, + .rst_ni, + .lc_en_i(otp_broadcast.valid), + .lc_en_o(otp_broadcast_valid_q) + ); + + always_comb begin : p_otp_broadcast_valid + otp_broadcast_o = otp_broadcast; + otp_broadcast_o.valid = otp_broadcast_valid_q; + end + + // Root keys and seeds. + // This uses a generated function to assign all collateral that is marked with "iskeymgr" in + // the memory map. Note that in this case the type is static and represents a superset of all + // options so that we can maintain a stable interface with keymgr (otherwise keymgr will have + // to be templated as well. Unused key material will be tied off to '0. The keymgr has to be + // parameterized accordingly (via SV parameters) to consume the correct key material. + // + // The key material valid signals are set to true if the corresponding digest is nonzero and the + // partition is initialized. On top of that, the entire output is gated by lc_seed_hw_rd_en. + otp_keymgr_key_t otp_keymgr_key; + assign otp_keymgr_key = named_keymgr_key_assign(part_digest, + part_buf_data, + lc_seed_hw_rd_en); + + // Note regarding these breakouts: named_keymgr_key_assign will tie off unused key material / + // valid signals to '0. This is the case for instance in system configurations that keep the seed + // material in the flash instead of OTP. + logic creator_root_key_share0_valid_d, creator_root_key_share0_valid_q; + logic creator_root_key_share1_valid_d, creator_root_key_share1_valid_q; + logic creator_seed_valid_d, creator_seed_valid_q; + logic owner_seed_valid_d, owner_seed_valid_q; + prim_flop #( + .Width(4) + ) u_keygmr_key_valid ( + .clk_i, + .rst_ni, + .d_i ({creator_root_key_share0_valid_d, + creator_root_key_share1_valid_d, + creator_seed_valid_d, + owner_seed_valid_d}), + .q_o ({creator_root_key_share0_valid_q, + creator_root_key_share1_valid_q, + creator_seed_valid_q, + owner_seed_valid_q}) + ); + + always_comb begin : p_otp_keymgr_key_valid + // Valid reg inputs + creator_root_key_share0_valid_d = otp_keymgr_key.creator_root_key_share0_valid; + creator_root_key_share1_valid_d = otp_keymgr_key.creator_root_key_share1_valid; + creator_seed_valid_d = otp_keymgr_key.creator_seed_valid; + owner_seed_valid_d = otp_keymgr_key.owner_seed_valid; + // Output to keymgr + otp_keymgr_key_o = otp_keymgr_key; + otp_keymgr_key_o.creator_root_key_share0_valid = creator_root_key_share0_valid_q; + otp_keymgr_key_o.creator_root_key_share1_valid = creator_root_key_share1_valid_q; + otp_keymgr_key_o.creator_seed_valid = creator_seed_valid_q; + otp_keymgr_key_o.owner_seed_valid = owner_seed_valid_q; + end + + // Check that the lc_seed_hw_rd_en remains stable, once the key material is valid. + `ASSERT(LcSeedHwRdEnStable0_A, + $rose(creator_root_key_share0_valid_q) |=> $stable(lc_seed_hw_rd_en) [*1:$], + clk_i, !rst_ni || lc_ctrl_pkg::lc_tx_test_true_loose(lc_escalate_en_i) // Disable if escalating + ) + `ASSERT(LcSeedHwRdEnStable1_A, + $rose(creator_root_key_share1_valid_q) |=> $stable(lc_seed_hw_rd_en) [*1:$], + clk_i, !rst_ni || lc_ctrl_pkg::lc_tx_test_true_loose(lc_escalate_en_i) // Disable if escalating + ) + `ASSERT(LcSeedHwRdEnStable2_A, + $rose(creator_seed_valid_q) |=> $stable(lc_seed_hw_rd_en) [*1:$], + clk_i, !rst_ni || lc_ctrl_pkg::lc_tx_test_true_loose(lc_escalate_en_i) // Disable if escalating + ) + `ASSERT(LcSeedHwRdEnStable3_A, + $rose(owner_seed_valid_q) |=> $stable(lc_seed_hw_rd_en) [*1:$], + clk_i, !rst_ni || lc_ctrl_pkg::lc_tx_test_true_loose(lc_escalate_en_i) // Disable if escalating + ) + + // Scrambling Keys + assign scrmbl_key_seed_valid = part_digest[Secret1Idx] != '0; + assign sram_data_key_seed = part_buf_data[SramDataKeySeedOffset +: + SramDataKeySeedSize]; + assign flash_data_key_seed = part_buf_data[FlashDataKeySeedOffset +: + FlashDataKeySeedSize]; + assign flash_addr_key_seed = part_buf_data[FlashAddrKeySeedOffset +: + FlashAddrKeySeedSize]; + + // Test unlock and exit tokens and RMA token + assign otp_lc_data_o.test_exit_token = part_buf_data[TestExitTokenOffset +: + TestExitTokenSize]; + assign otp_lc_data_o.test_unlock_token = part_buf_data[TestUnlockTokenOffset +: + TestUnlockTokenSize]; + assign otp_lc_data_o.rma_token = part_buf_data[RmaTokenOffset +: + RmaTokenSize]; + + lc_ctrl_pkg::lc_tx_t test_tokens_valid, rma_token_valid, secrets_valid; + // The test tokens have been provisioned. + assign test_tokens_valid = (part_digest[Secret0Idx] != '0) ? lc_ctrl_pkg::On : lc_ctrl_pkg::Off; + // The rma token has been provisioned. + assign rma_token_valid = (part_digest[Secret2Idx] != '0) ? lc_ctrl_pkg::On : lc_ctrl_pkg::Off; + // The device is personalized if the root key has been provisioned and locked. + assign secrets_valid = (part_digest[Secret2Idx] != '0) ? lc_ctrl_pkg::On : lc_ctrl_pkg::Off; + + // Buffer these constants in order to ensure that synthesis does not try to optimize the encoding. + // SEC_CM: TOKEN_VALID.CTRL.MUBI + prim_lc_sender #( + .AsyncOn(0) + ) u_prim_lc_sender_test_tokens_valid ( + .clk_i, + .rst_ni, + .lc_en_i(test_tokens_valid), + .lc_en_o(otp_lc_data_o.test_tokens_valid) + ); + + prim_lc_sender #( + .AsyncOn(0) + ) u_prim_lc_sender_rma_token_valid ( + .clk_i, + .rst_ni, + .lc_en_i(rma_token_valid), + .lc_en_o(otp_lc_data_o.rma_token_valid) + ); + + prim_lc_sender #( + .AsyncOn(0) + ) u_prim_lc_sender_secrets_valid ( + .clk_i, + .rst_ni, + .lc_en_i(secrets_valid), + .lc_en_o(otp_lc_data_o.secrets_valid) + ); + + // Lifecycle state + assign otp_lc_data_o.state = lc_ctrl_state_pkg::lc_state_e'(part_buf_data[LcStateOffset +: + LcStateSize]); + assign otp_lc_data_o.count = lc_ctrl_state_pkg::lc_cnt_e'(part_buf_data[LcTransitionCntOffset +: + LcTransitionCntSize]); + + // Assert life cycle state valid signal only when all partitions have initialized. + assign otp_lc_data_o.valid = &part_init_done; + // Signal whether there are any errors in the life cycle partition (both correctable and + // uncorrectable ones). This bit is made available via the JTAG TAP, which is useful for + // production testing in RAW life cycle state where the OTP regs are not accessible. + assign otp_lc_data_o.error = |part_error[LifeCycleIdx]; + + // Not all bits of part_buf_data are used here. + logic unused_buf_data; + assign unused_buf_data = ^part_buf_data; + + //////////////// + // Assertions // + //////////////// + + `ASSERT_INIT(CreatorRootKeyShare0Size_A, KeyMgrKeyWidth == CreatorRootKeyShare0Size * 8) + `ASSERT_INIT(CreatorRootKeyShare1Size_A, KeyMgrKeyWidth == CreatorRootKeyShare1Size * 8) + `ASSERT_INIT(FlashDataKeySeedSize_A, FlashKeySeedWidth == FlashDataKeySeedSize * 8) + `ASSERT_INIT(FlashAddrKeySeedSize_A, FlashKeySeedWidth == FlashAddrKeySeedSize * 8) + `ASSERT_INIT(SramDataKeySeedSize_A, SramKeySeedWidth == SramDataKeySeedSize * 8) + + `ASSERT_INIT(RmaTokenSize_A, lc_ctrl_state_pkg::LcTokenWidth == RmaTokenSize * 8) + `ASSERT_INIT(TestUnlockTokenSize_A, lc_ctrl_state_pkg::LcTokenWidth == TestUnlockTokenSize * 8) + `ASSERT_INIT(TestExitTokenSize_A, lc_ctrl_state_pkg::LcTokenWidth == TestExitTokenSize * 8) + `ASSERT_INIT(LcStateSize_A, lc_ctrl_state_pkg::LcStateWidth == LcStateSize * 8) + `ASSERT_INIT(LcTransitionCntSize_A, lc_ctrl_state_pkg::LcCountWidth == LcTransitionCntSize * 8) + + `ASSERT_KNOWN(OtpAstPwrSeqKnown_A, otp_ast_pwr_seq_o) + `ASSERT_KNOWN(CoreTlOutKnown_A, core_tl_o) + `ASSERT_KNOWN(PrimTlOutKnown_A, prim_tl_o) + `ASSERT_KNOWN(IntrOtpOperationDoneKnown_A, intr_otp_operation_done_o) + `ASSERT_KNOWN(IntrOtpErrorKnown_A, intr_otp_error_o) + `ASSERT_KNOWN(AlertTxKnown_A, alert_tx_o) + `ASSERT_KNOWN(PwrOtpInitRspKnown_A, pwr_otp_o) + `ASSERT_KNOWN(LcOtpProgramRspKnown_A, lc_otp_program_o) + `ASSERT_KNOWN(OtpLcDataKnown_A, otp_lc_data_o) + `ASSERT_KNOWN(OtpKeymgrKeyKnown_A, otp_keymgr_key_o) + `ASSERT_KNOWN(FlashOtpKeyRspKnown_A, flash_otp_key_o) + `ASSERT_KNOWN(OtpSramKeyKnown_A, sram_otp_key_o) + `ASSERT_KNOWN(OtpOtgnKeyKnown_A, otbn_otp_key_o) + `ASSERT_KNOWN(OtpBroadcastKnown_A, otp_broadcast_o) + + // Alert assertions for sparse FSMs. + `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlDaiFsmCheck_A, + u_otp_ctrl_dai.u_state_regs, alert_tx_o[1]) + `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlKdiFsmCheck_A, + u_otp_ctrl_kdi.u_state_regs, alert_tx_o[1]) + `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlLciFsmCheck_A, + u_otp_ctrl_lci.u_state_regs, alert_tx_o[1]) + `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlLfsrTimerFsmCheck_A, + u_otp_ctrl_lfsr_timer.u_state_regs, alert_tx_o[1]) + `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlScrambleFsmCheck_A, + u_otp_ctrl_scrmbl.u_state_regs, alert_tx_o[1]) + + // Alert assertions for redundant counters. + `ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntIntegCheck_A, + u_otp_ctrl_lfsr_timer.u_prim_count_integ, alert_tx_o[1]) + `ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntCnstyCheck_A, + u_otp_ctrl_lfsr_timer.u_prim_count_cnsty, alert_tx_o[1]) + `ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntDaiCheck_A, + u_otp_ctrl_dai.u_prim_count, alert_tx_o[1]) + `ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntKdiSeedCheck_A, + u_otp_ctrl_kdi.u_prim_count_seed, alert_tx_o[1]) + `ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntKdiEntropyCheck_A, + u_otp_ctrl_kdi.u_prim_count_entropy, alert_tx_o[1]) + `ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntLciCheck_A, + u_otp_ctrl_lci.u_prim_count, alert_tx_o[1]) + `ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntScrmblCheck_A, + u_otp_ctrl_scrmbl.u_prim_count, alert_tx_o[1]) + `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(TlLcGateFsm_A, + u_tlul_lc_gate.u_state_regs, alert_tx_o[2]) + + // Alert assertions for double LFSR. + `ASSERT_PRIM_DOUBLE_LFSR_ERROR_TRIGGER_ALERT(DoubleLfsrCheck_A, + u_otp_ctrl_lfsr_timer.u_prim_double_lfsr, alert_tx_o[1]) + + // Alert assertions for reg_we onehot check + `ASSERT_PRIM_REG_WE_ONEHOT_ERROR_TRIGGER_ALERT(RegWeOnehotCheck_A, u_reg_core, alert_tx_o[2]) + + // Assertions for countermeasures inside prim_otp + `ifndef PRIM_DEFAULT_IMPL + `define PRIM_DEFAULT_IMPL prim_pkg::ImplGeneric + `endif + if (`PRIM_DEFAULT_IMPL == prim_pkg::ImplGeneric) begin : gen_reg_we_assert_generic + `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(PrimFsmCheck_A, + u_otp.gen_generic.u_impl_generic.u_state_regs, alert_tx_o[3]) + `ASSERT_PRIM_REG_WE_ONEHOT_ERROR_TRIGGER_ALERT(PrimRegWeOnehotCheck_A, + u_otp.gen_generic.u_impl_generic.u_reg_top, alert_tx_o[3]) + end +endmodule : otp_ctrl diff --git a/src/fuse_ctrl/rtl/otp_ctrl_axi_pkg.sv b/src/fuse_ctrl/rtl/otp_ctrl_axi_pkg.sv new file mode 100644 index 000000000..21d1e2bf3 --- /dev/null +++ b/src/fuse_ctrl/rtl/otp_ctrl_axi_pkg.sv @@ -0,0 +1,122 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// NOTE: Side channel integrity check is not usedby Caliptra. Instead AXI_ID will be used to +// ensure that responses are sent by OTP to appropriate devices only. +// This package contains logic used by side channel integrity checks. + +package otp_ctrl_axi_pkg; + + parameter int H2DCmdIntgWidth = 7; + parameter int D2HRspIntgWidth = 7; + parameter int DataIntgWidth = 7; + parameter int DataWidth = 32; + + typedef enum logic [2:0] { + PutFullData = 3'h 0, + PutPartialData = 3'h 1, + Get = 3'h 4 + } tl_a_op_e; + + typedef enum logic [2:0] { + AccessAck = 3'h 0, + AccessAckData = 3'h 1 + } tl_d_op_e; + + // AXI Sub a_user + typedef struct packed { + logic [13:0] rsvd; + caliptra_prim_mubi_pkg::mubi4_t instr_type; + logic [H2DCmdIntgWidth-1:0] cmd_intg; + logic [DataIntgWidth-1:0] data_intg; + } axi_a_user_t; + + parameter axi_a_user_t ACI_A_USER_DEFAULT = '{ + rsvd: '0, + instr_type: caliptra_prim_mubi_pkg::Mubi4False, + cmd_intg: {H2DCmdIntgWidth{1'b1}}, + data_intg: {DataIntgWidth{1'b1}} + }; + + typedef struct packed { + caliptra_prim_mubi_pkg::mubi4_t instr_type; + logic [axi_pkg::AW-1:0] addr; + + } + + typedef struct packed { + caliptra_prim_mubi_pkg::nubi4_t instr_type; + logic [axi_pks::AW-1:0] addr; + tl_a_op_e opcode; + logic [axi_pkg::DW/8-1:0] strb, + } axi_h2d_cmd_intg_t; + + //AXI Sub d_user + typedef struct packed { + logic [17:0] rsvd; + logic [D2HRspIntgWidth-1:0] rsp_intg; + logic [DataIntgWidth-1:0] data_intg; + } axi_d_user_t; + + parameter axi_d_user_t AXI_D_USER_DEFAULT = '{ + rsvd: '0, + instr_type: {D2HRspIntgWidth{1'b1}}, + data_intg: {DataIntgWidth{1'b1}} + }; + + typedef struct packed { + tl_d_op_e opcode; + logic [xi_pkg::DW-1:0] size; //TODO - this need to be fixed based on AXI protocol. Placeholder for now + logic error; + } axi_d2h_rsp_intg_t; + + // extract cmd opcode based on AXI write and strb signal values + function automatic translate_axi_cmd_to_opcode(logic axi_write, logic [DataWidth/8-1:0] axi_wstrb); + tl_a_op_e tl_equiv_opcode; + if (!axi_write) begin //AXI Read Cmd + tl_equiv_opcode = Get; + end + else begin // AXI Write Cmd + if (axi_wstrb == 'F) begin // AXI Full Write + tl_equiv_opcode = PutFullData; + end + else begin // AXI Partial Write + tl_equiv_opcode = PutPartialData; + end + end + return tl_equiv_opcode; + endfunction + + // extract rsp/data opcode based on r/W response channels + + // Check for user unsuported values + + // extract variables used for command checking + + // extract variables used for response checking + + // calculate ecc for command checking + + // calculate ecc for data checking + + // return inverted integrity for command payload + + // reutn inverted integrity for data paylod + + + + +endpackage + \ No newline at end of file diff --git a/src/fuse_ctrl/rtl/otp_ctrl_dai.sv b/src/fuse_ctrl/rtl/otp_ctrl_dai.sv new file mode 100644 index 000000000..820eaafed --- /dev/null +++ b/src/fuse_ctrl/rtl/otp_ctrl_dai.sv @@ -0,0 +1,858 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Direct access interface for OTP controller. +// + +`include "prim_flop_macros.sv" + +module otp_ctrl_dai + import otp_ctrl_pkg::*; + import otp_ctrl_reg_pkg::*; + import otp_ctrl_part_pkg::*; +( + input clk_i, + input rst_ni, + // Init reqest from power manager + input init_req_i, + output logic init_done_o, + // Init request going to partitions + output logic part_init_req_o, + input [NumPart-1:0] part_init_done_i, + // Escalation input. This moves the FSM into a terminal state and locks down + // the DAI. + input lc_ctrl_pkg::lc_tx_t escalate_en_i, + // Output error state of DAI, to be consumed by OTP error/alert logic. + // Note that most errors are not recoverable and move the DAI FSM into + // a terminal error state. + output otp_err_e error_o, + // This error signal is pulsed high if the FSM has been glitched into an invalid state. + // Although it is somewhat redundant with the error code in error_o above, it is + // meant to cover cases where we already latched an error code while the FSM is + // glitched into an invalid state (since in that case, the error code will not be + // overridden with the FSM error code so that the original error code is still + // discoverable). + output logic fsm_err_o, + // Access/lock status from partitions + // SEC_CM: ACCESS.CTRL.MUBI + input part_access_t [NumPart-1:0] part_access_i, + // CSR interface + input [OtpByteAddrWidth-1:0] dai_addr_i, + input dai_cmd_e dai_cmd_i, + input logic dai_req_i, + input [NumDaiWords-1:0][31:0] dai_wdata_i, + output logic dai_idle_o, // wired to the status CSRs + output logic dai_prog_idle_o, // wired to lfsr timer and pwrmgr + output logic dai_cmd_done_o, // this is used to raise an IRQ + output logic [NumDaiWords-1:0][31:0] dai_rdata_o, + // OTP interface + output logic otp_req_o, + output prim_otp_pkg::cmd_e otp_cmd_o, + output logic [OtpSizeWidth-1:0] otp_size_o, + output logic [OtpIfWidth-1:0] otp_wdata_o, + output logic [OtpAddrWidth-1:0] otp_addr_o, + input otp_gnt_i, + input otp_rvalid_i, + input [ScrmblBlockWidth-1:0] otp_rdata_i, + input prim_otp_pkg::err_e otp_err_i, + // Scrambling mutex request + output logic scrmbl_mtx_req_o, + input scrmbl_mtx_gnt_i, + // Scrambling datapath interface + output otp_scrmbl_cmd_e scrmbl_cmd_o, + output digest_mode_e scrmbl_mode_o, + output logic [ConstSelWidth-1:0] scrmbl_sel_o, + output logic [ScrmblBlockWidth-1:0] scrmbl_data_o, + output logic scrmbl_valid_o, + input logic scrmbl_ready_i, + input logic scrmbl_valid_i, + input logic [ScrmblBlockWidth-1:0] scrmbl_data_i +); + + //////////////////////// + // Integration Checks // + //////////////////////// + + import prim_mubi_pkg::*; + import prim_util_pkg::vbits; + + localparam int CntWidth = OtpByteAddrWidth - $clog2(ScrmblBlockWidth/8); + + // Integration checks for parameters. + `ASSERT_INIT(CheckNativeOtpWidth0_A, (ScrmblBlockWidth % OtpWidth) == 0) + `ASSERT_INIT(CheckNativeOtpWidth1_A, (32 % OtpWidth) == 0) + + ///////////////////// + // DAI Control FSM // + ///////////////////// + + // SEC_CM: DAI.FSM.SPARSE + // Encoding generated with: + // $ ./util/design/sparse-fsm-encode.py -d 5 -m 20 -n 12 \ + // -s 3011551511 --language=sv + // + // Hamming distance histogram: + // + // 0: -- + // 1: -- + // 2: -- + // 3: -- + // 4: -- + // 5: |||||||||||||||| (31.05%) + // 6: |||||||||||||||||||| (36.84%) + // 7: |||||||| (15.26%) + // 8: |||| (8.95%) + // 9: || (5.26%) + // 10: (1.58%) + // 11: (1.05%) + // 12: -- + // + // Minimum Hamming distance: 5 + // Maximum Hamming distance: 11 + // Minimum Hamming weight: 2 + // Maximum Hamming weight: 9 + // + localparam int StateWidth = 12; + typedef enum logic [StateWidth-1:0] { + ResetSt = 12'b101111010100, + InitOtpSt = 12'b110000110010, + InitPartSt = 12'b000111111001, + IdleSt = 12'b111010000011, + ErrorSt = 12'b100010001110, + ReadSt = 12'b100101100110, + ReadWaitSt = 12'b001100000000, + DescrSt = 12'b011000101111, + DescrWaitSt = 12'b110101011111, + WriteSt = 12'b110111001000, + WriteWaitSt = 12'b111001111100, + ScrSt = 12'b000000010101, + ScrWaitSt = 12'b010110110100, + DigClrSt = 12'b001111001111, + DigReadSt = 12'b001001110011, + DigReadWaitSt = 12'b101110111010, + DigSt = 12'b011111100010, + DigPadSt = 12'b011010011000, + DigFinSt = 12'b110011100101, + DigWaitSt = 12'b100000101001 + } state_e; + + typedef enum logic [1:0] { + OtpData = 2'b00, + DaiData = 2'b01, + ScrmblData = 2'b10 + } data_sel_e; + + + typedef enum logic { + PartOffset = 1'b0, + DaiOffset = 1'b1 + } addr_sel_e; + + state_e state_d, state_q; + logic [CntWidth-1:0] cnt; + logic cnt_en, cnt_clr, cnt_err; + otp_err_e error_d, error_q; + logic data_en, data_clr; + data_sel_e data_sel; + addr_sel_e base_sel_d, base_sel_q; + logic [ScrmblBlockWidth-1:0] data_q; + logic [NumPartWidth-1:0] part_idx; + logic [NumPart-1:0][OtpAddrWidth-1:0] digest_addr_lut; + logic part_sel_valid; + + // Depending on the partition configuration, the wrapper is instructed to ignore integrity + // calculations and checks. To be on the safe side, the partition filters error responses at this + // point and does not report any integrity errors if integrity is disabled. + otp_err_e otp_err; + always_comb begin + otp_err = otp_err_e'(otp_err_i); + if (!PartInfo[part_idx].integrity && + otp_err_e'(otp_err_i) inside {MacroEccCorrError, MacroEccUncorrError}) begin + otp_err = NoError; + end + end + + // Output partition error state. + assign error_o = error_q; + // Working register is connected to data outputs. + assign otp_wdata_o = data_q; + assign scrmbl_data_o = data_q; + // Only expose this working register in IdleSt. + // The FSM below makes sure to clear this register + // after digest and write ops. + assign dai_rdata_o = (state_q == IdleSt) ? data_q : '0; + + always_comb begin : p_fsm + state_d = state_q; + + // Init signals + init_done_o = 1'b1; + part_init_req_o = 1'b0; + + // DAI signals + dai_idle_o = 1'b0; + dai_prog_idle_o = 1'b1; + dai_cmd_done_o = 1'b0; + + // OTP signals + otp_req_o = 1'b0; + otp_cmd_o = prim_otp_pkg::Init; + + // Scrambling mutex + scrmbl_mtx_req_o = 1'b0; + + // Scrambling datapath + scrmbl_cmd_o = LoadShadow; + scrmbl_sel_o = CnstyDigest; + scrmbl_mode_o = StandardMode; + scrmbl_valid_o = 1'b0; + + // Counter + cnt_en = 1'b0; + cnt_clr = 1'b0; + base_sel_d = base_sel_q; + + // Temporary data register + data_en = 1'b0; + data_clr = 1'b0; + data_sel = OtpData; + + // Error Register + error_d = error_q; + fsm_err_o = 1'b0; + + unique case (state_q) + /////////////////////////////////////////////////////////////////// + // We get here after reset and wait until the power manager + // requests OTP initialization. If initialization is requested, + // an init command is written to the OTP macro, and we move on + // to the InitOtpSt waiting state. + ResetSt: begin + init_done_o = 1'b0; + dai_prog_idle_o = 1'b0; + data_clr = 1'b1; + if (init_req_i) begin + otp_req_o = 1'b1; + if (otp_gnt_i) begin + state_d = InitOtpSt; + end + end + end + /////////////////////////////////////////////////////////////////// + // We wait here unitl the OTP macro has initialized without + // error. If an error occurred during this stage, we latch that + // error and move into a terminal error state. + InitOtpSt: begin + init_done_o = 1'b0; + dai_prog_idle_o = 1'b0; + if (otp_rvalid_i) begin + if ((!(otp_err inside {NoError, MacroEccCorrError}))) begin + state_d = ErrorSt; + error_d = otp_err; + end else begin + state_d = InitPartSt; + end + end + end + /////////////////////////////////////////////////////////////////// + // Since the OTP macro is now functional, we can send out an + // initialization request to all partitions and wait until they + // all have initialized. + InitPartSt: begin + init_done_o = 1'b0; + dai_prog_idle_o = 1'b0; + part_init_req_o = 1'b1; + if (part_init_done_i == {NumPart{1'b1}}) begin + state_d = IdleSt; + end + end + /////////////////////////////////////////////////////////////////// + // Idle state where we wait for incoming commands. + // Invalid commands trigger a CmdInvErr, which is recoverable. + IdleSt: begin + dai_idle_o = 1'b1; + if (dai_req_i) begin + // This clears previous (recoverable) and reset the counter. + error_d = NoError; + cnt_clr = 1'b1; + unique case (dai_cmd_i) + DaiRead: begin + state_d = ReadSt; + // Clear the temporary data register. + data_clr = 1'b1; + base_sel_d = DaiOffset; + end + DaiWrite: begin + data_sel = DaiData; + // Fetch data block. + data_en = 1'b1; + base_sel_d = DaiOffset; + // If this partition is scrambled, directly go to write scrambling first. + if (PartInfo[part_idx].secret) begin + state_d = ScrSt; + end else begin + state_d = WriteSt; + end + end + DaiDigest: begin + state_d = DigClrSt; + scrmbl_mtx_req_o = 1'b1; + base_sel_d = PartOffset; + end + default: ; // Ignore invalid commands + endcase // dai_cmd_i + end // dai_req_i + end + /////////////////////////////////////////////////////////////////// + // Each time we request a block of data from OTP, we re-check + // whether read access has been locked for this partition. If + // that is the case, we immediately bail out. Otherwise, we + // request a block of data from OTP. + ReadSt: begin + if (part_sel_valid && (mubi8_test_false_strict(part_access_i[part_idx].read_lock) || + // HW digests always remain readable. + PartInfo[part_idx].hw_digest && otp_addr_o == + digest_addr_lut[part_idx])) begin + otp_req_o = 1'b1; + // Depending on the partition configuration, + // the wrapper is instructed to ignore integrity errors. + if (PartInfo[part_idx].integrity) begin + otp_cmd_o = prim_otp_pkg::Read; + end else begin + otp_cmd_o = prim_otp_pkg::ReadRaw; + end + if (otp_gnt_i) begin + state_d = ReadWaitSt; + end + end else begin + state_d = IdleSt; + error_d = AccessError; // Signal this error, but do not go into terminal error state. + dai_cmd_done_o = 1'b1; + end + end + /////////////////////////////////////////////////////////////////// + // Wait for OTP response and write to readout register. Check + // whether descrambling is required or not. In case an OTP + // transaction fails, latch the OTP error code, and jump to + // terminal error state. + ReadWaitSt: begin + // Continuously check read access and bail out if this is not consistent. + if (part_sel_valid && (mubi8_test_false_strict(part_access_i[part_idx].read_lock) || + // HW digests always remain readable. + PartInfo[part_idx].hw_digest && otp_addr_o == + digest_addr_lut[part_idx])) begin + if (otp_rvalid_i) begin + // Check OTP return code. + if (otp_err inside {NoError, MacroEccCorrError}) begin + data_en = 1'b1; + // We do not need to descramble the digest values. + if (PartInfo[part_idx].secret && otp_addr_o != digest_addr_lut[part_idx]) begin + state_d = DescrSt; + end else begin + state_d = IdleSt; + dai_cmd_done_o = 1'b1; + end + // At this point the only error that we could have gotten are correctable ECC errors. + if (otp_err != NoError) begin + error_d = MacroEccCorrError; + end + end else begin + state_d = ErrorSt; + error_d = otp_err; + end + end + // At this point, this check MUST succeed - otherwise this means that + // there was a tampering attempt. Hence we go into a terminal error state + // when this check fails. + end else begin + state_d = ErrorSt; + error_d = FsmStateError; + end + end + /////////////////////////////////////////////////////////////////// + // Descrambling state. This first acquires the scrambling + // datapath mutex. Note that once the mutex is acquired, we have + // exclusive access to the scrambling datapath until we release + // the mutex by deasserting scrmbl_mtx_req_o. + // SEC_CM: SECRET.MEM.SCRAMBLE + DescrSt: begin + scrmbl_mtx_req_o = 1'b1; + scrmbl_valid_o = 1'b1; + scrmbl_cmd_o = Decrypt; + scrmbl_sel_o = PartInfo[part_idx].key_sel; + if (scrmbl_mtx_gnt_i && scrmbl_ready_i) begin + state_d = DescrWaitSt; + end + end + /////////////////////////////////////////////////////////////////// + // Wait for the descrambled data to return. Note that we release + // the mutex lock upon leaving this state. + // SEC_CM: SECRET.MEM.SCRAMBLE + DescrWaitSt: begin + scrmbl_mtx_req_o = 1'b1; + scrmbl_sel_o = PartInfo[part_idx].key_sel; + data_sel = ScrmblData; + if (scrmbl_valid_i) begin + state_d = IdleSt; + data_en = 1'b1; + dai_cmd_done_o = 1'b1; + end + end + /////////////////////////////////////////////////////////////////// + // First, check whether write accesses are allowed to this + // partition, and error out otherwise. Note that for buffered + // partitions, we do not allow DAI writes to the digest offset. + // Unbuffered partitions have SW managed digests, hence that + // check is not needed in that case. The LC partition is + // permanently write locked and can hence not be written via the DAI. + WriteSt: begin + dai_prog_idle_o = 1'b0; + if (part_sel_valid && mubi8_test_false_strict(part_access_i[part_idx].write_lock) && + // If this is a HW digest write to a buffered partition. + ((PartInfo[part_idx].variant == Buffered && PartInfo[part_idx].hw_digest && + base_sel_q == PartOffset && otp_addr_o == digest_addr_lut[part_idx]) || + // If this is a non HW digest write to a buffered partition. + (PartInfo[part_idx].variant == Buffered && PartInfo[part_idx].hw_digest && + base_sel_q == DaiOffset && otp_addr_o < digest_addr_lut[part_idx]) || + // If this is a write to an unbuffered partition + (PartInfo[part_idx].variant != Buffered && base_sel_q == DaiOffset))) begin + otp_req_o = 1'b1; + // Depending on the partition configuration, + // the wrapper is instructed to ignore integrity errors. + if (PartInfo[part_idx].integrity) begin + otp_cmd_o = prim_otp_pkg::Write; + end else begin + otp_cmd_o = prim_otp_pkg::WriteRaw; + end + if (otp_gnt_i) begin + state_d = WriteWaitSt; + end + end else begin + // Clear working register state. + data_clr = 1'b1; + state_d = IdleSt; + error_d = AccessError; // Signal this error, but do not go into terminal error state. + dai_cmd_done_o = 1'b1; + end + end + /////////////////////////////////////////////////////////////////// + // Wait for OTP response, and then go back to idle. In case an + // OTP transaction fails, latch the OTP error code, and jump to + // terminal error state. + WriteWaitSt: begin + dai_prog_idle_o = 1'b0; + // Continuously check write access and bail out if this is not consistent. + if (part_sel_valid && mubi8_test_false_strict(part_access_i[part_idx].write_lock) && + // If this is a HW digest write to a buffered partition. + ((PartInfo[part_idx].variant == Buffered && PartInfo[part_idx].hw_digest && + base_sel_q == PartOffset && otp_addr_o == digest_addr_lut[part_idx]) || + // If this is a non HW digest write to a buffered partition. + (PartInfo[part_idx].variant == Buffered && PartInfo[part_idx].hw_digest && + base_sel_q == DaiOffset && otp_addr_o < digest_addr_lut[part_idx]) || + // If this is a write to an unbuffered partition + (PartInfo[part_idx].variant != Buffered && base_sel_q == DaiOffset))) begin + + if (otp_rvalid_i) begin + // Check OTP return code. Note that non-blank errors are recoverable. + if ((!(otp_err inside {NoError, MacroWriteBlankError}))) begin + state_d = ErrorSt; + error_d = otp_err; + end else begin + // Clear working register state. + data_clr = 1'b1; + state_d = IdleSt; + dai_cmd_done_o = 1'b1; + // Signal non-blank state, but do not go to terminal error state. + if (otp_err == MacroWriteBlankError) begin + error_d = otp_err; + end + end + end + // At this point, this check MUST succeed - otherwise this means that + // there was a tampering attempt. Hence we go into a terminal error state + // when this check fails. + end else begin + state_d = ErrorSt; + error_d = FsmStateError; + end + end + /////////////////////////////////////////////////////////////////// + // Scrambling state. This first acquires the scrambling + // datapath mutex. Note that once the mutex is acquired, we have + // exclusive access to the scrambling datapath until we release + // the mutex by deasserting scrmbl_mtx_req_o. + // SEC_CM: SECRET.MEM.SCRAMBLE + ScrSt: begin + scrmbl_mtx_req_o = 1'b1; + // Check write access and bail out if this is not consistent. + if (part_sel_valid && mubi8_test_false_strict(part_access_i[part_idx].write_lock) && + // If this is a non HW digest write to a buffered partition. + (PartInfo[part_idx].variant == Buffered && PartInfo[part_idx].secret && + PartInfo[part_idx].hw_digest && base_sel_q == DaiOffset && + otp_addr_o < digest_addr_lut[part_idx])) begin + + scrmbl_valid_o = 1'b1; + scrmbl_cmd_o = Encrypt; + scrmbl_sel_o = PartInfo[part_idx].key_sel; + if (scrmbl_mtx_gnt_i && scrmbl_ready_i) begin + state_d = ScrWaitSt; + end + end else begin + state_d = IdleSt; + error_d = AccessError; // Signal this error, but do not go into terminal error state. + dai_cmd_done_o = 1'b1; + end + end + /////////////////////////////////////////////////////////////////// + // Wait for the scrambled data to return. Note that we release + // the mutex lock upon leaving this state. + // SEC_CM: SECRET.MEM.SCRAMBLE + ScrWaitSt: begin + scrmbl_mtx_req_o = 1'b1; + // Continously check write access and bail out if this is not consistent. + if (part_sel_valid && mubi8_test_false_strict(part_access_i[part_idx].write_lock) && + // If this is a non HW digest write to a buffered partition. + (PartInfo[part_idx].variant == Buffered && PartInfo[part_idx].secret && + PartInfo[part_idx].hw_digest && base_sel_q == DaiOffset && + otp_addr_o < digest_addr_lut[part_idx])) begin + data_sel = ScrmblData; + if (scrmbl_valid_i) begin + state_d = WriteSt; + data_en = 1'b1; + end + // At this point, this check MUST succeed - otherwise this means that + // there was a tampering attempt. Hence we go into a terminal error state + // when this check fails. + end else begin + state_d = ErrorSt; + error_d = FsmStateError; + end + end + /////////////////////////////////////////////////////////////////// + // First, acquire the mutex for the digest and clear the digest state. + // SEC_CM: PART.MEM.DIGEST + DigClrSt: begin + scrmbl_mtx_req_o = 1'b1; + scrmbl_valid_o = 1'b1; + // Need to reset the digest state and set digest mode to "standard". + scrmbl_cmd_o = DigestInit; + if (scrmbl_mtx_gnt_i && scrmbl_ready_i) begin + state_d = DigReadSt; + end + end + /////////////////////////////////////////////////////////////////// + // This requests a 64bit block to be pushed into the digest datapath. + // We also check here whether the partition has been write locked. + // SEC_CM: PART.MEM.DIGEST + DigReadSt: begin + scrmbl_mtx_req_o = 1'b1; + if (part_sel_valid && + mubi8_test_false_strict(part_access_i[part_idx].read_lock) && + mubi8_test_false_strict(part_access_i[part_idx].write_lock)) begin + otp_req_o = 1'b1; + // Depending on the partition configuration, + // the wrapper is instructed to ignore integrity errors. + if (PartInfo[part_idx].integrity) begin + otp_cmd_o = prim_otp_pkg::Read; + end else begin + otp_cmd_o = prim_otp_pkg::ReadRaw; + end + if (otp_gnt_i) begin + state_d = DigReadWaitSt; + end + end else begin + state_d = IdleSt; + error_d = AccessError; // Signal this error, but do not go into terminal error state. + dai_cmd_done_o = 1'b1; + end + end + /////////////////////////////////////////////////////////////////// + // Wait for OTP response and write to readout register. Check + // whether descrambling is required or not. In case an OTP + // transaction fails, latch the OTP error code, and jump to + // terminal error state. + // SEC_CM: PART.MEM.DIGEST + DigReadWaitSt: begin + scrmbl_mtx_req_o = 1'b1; + if (otp_rvalid_i) begin + cnt_en = 1'b1; + // Check OTP return code. + if ((!(otp_err inside {NoError, MacroEccCorrError}))) begin + state_d = ErrorSt; + error_d = otp_err; + end else begin + data_en = 1'b1; + state_d = DigSt; + // Signal soft ECC errors, but do not go into terminal error state. + if (otp_err == MacroEccCorrError) begin + error_d = otp_err; + end + end + end + end + /////////////////////////////////////////////////////////////////// + // Push the word read into the scrambling datapath. The last + // block is repeated in case the number blocks in this partition + // is odd. + // SEC_CM: PART.MEM.DIGEST + DigSt: begin + scrmbl_mtx_req_o = 1'b1; + scrmbl_valid_o = 1'b1; + // No need to digest the digest value itself + if (otp_addr_o == digest_addr_lut[part_idx]) begin + // Trigger digest round in case this is the second block in a row. + if (!cnt[0]) begin + scrmbl_cmd_o = Digest; + if (scrmbl_ready_i) begin + state_d = DigFinSt; + end + // Otherwise, just load low word and go to padding state. + end else if (scrmbl_ready_i) begin + state_d = DigPadSt; + end + end else begin + // Trigger digest round in case this is the second block in a row. + if (!cnt[0]) begin + scrmbl_cmd_o = Digest; + end + // Go back and fetch more data blocks. + if (scrmbl_ready_i) begin + state_d = DigReadSt; + end + end + end + /////////////////////////////////////////////////////////////////// + // Padding state, just repeat the last block and go to digest + // finalization. + // SEC_CM: PART.MEM.DIGEST + DigPadSt: begin + scrmbl_mtx_req_o = 1'b1; + scrmbl_valid_o = 1'b1; + scrmbl_cmd_o = Digest; + if (scrmbl_ready_i) begin + state_d = DigFinSt; + end + end + /////////////////////////////////////////////////////////////////// + // Trigger digest finalization and go wait for the result. + // SEC_CM: PART.MEM.DIGEST + DigFinSt: begin + scrmbl_mtx_req_o = 1'b1; + scrmbl_valid_o = 1'b1; + scrmbl_cmd_o = DigestFinalize; + if (scrmbl_ready_i) begin + state_d = DigWaitSt; + end + end + /////////////////////////////////////////////////////////////////// + // Wait for the digest to return, and write the result to OTP. + // Note that the write address will be correct in this state, + // since the counter has been stepped to the correct address as + // part of the readout sequence, and the correct size for this + // access has been loaded before. + // SEC_CM: PART.MEM.DIGEST + DigWaitSt: begin + scrmbl_mtx_req_o = 1'b1; + data_sel = ScrmblData; + if (scrmbl_valid_i) begin + state_d = WriteSt; + data_en = 1'b1; + end + end + /////////////////////////////////////////////////////////////////// + // Terminal Error State. This locks access to the DAI. Make sure + // an FsmStateError error code is assigned here, in case no error code has + // been assigned yet. + ErrorSt: begin + if (error_q == NoError) begin + error_d = FsmStateError; + end + end + /////////////////////////////////////////////////////////////////// + // We should never get here. If we do (e.g. via a malicious + // glitch), error out immediately. + default: begin + state_d = ErrorSt; + fsm_err_o = 1'b1; + end + /////////////////////////////////////////////////////////////////// + endcase // state_q + + // Unconditionally jump into the terminal error state in case of escalation. + // SEC_CM: DAI.FSM.LOCAL_ESC, DAI.FSM.GLOBAL_ESC + if (lc_ctrl_pkg::lc_tx_test_true_loose(escalate_en_i) || cnt_err) begin + state_d = ErrorSt; + fsm_err_o = 1'b1; + if (state_q != ErrorSt) begin + error_d = FsmStateError; + end + end + end + + //////////////////////////// + // Partition Select Logic // + //////////////////////////// + + // This checks which partition the address belongs to by comparing + // the incoming address to the partition address ranges. The onehot + // bitvector generated by the parallel comparisons is fed into a + // binary tree that determines the partition index with O(log(N)) delay. + + logic [NumPart-1:0] part_sel_oh; + for (genvar k = 0; k < NumPart; k++) begin : gen_part_sel + localparam int unsigned PartEndInt = 32'(PartInfo[k].offset) + 32'(PartInfo[k].size); + localparam int unsigned DigestOffsetInt = PartEndInt - ScrmblBlockWidth / 8; + localparam int unsigned DigestAddrLutInt = DigestOffsetInt >> OtpAddrShift; + + // PartEnd has an extra bit to cope with the case where offset + size overflows. However, we + // arrange the address map to make sure that PartEndInt is at most 1 << OtpByteAddrWidth. Check + // that here. + `ASSERT_INIT(PartEndMax_A, PartEndInt <= (1 << OtpByteAddrWidth)) + + // The shift right by OtpAddrShift drops exactly the bottom bits that are needed to convert + // between OtpAddrWidth and OtpByteAddrWidth, so we know that we can slice safely here. + localparam bit [OtpAddrWidth-1:0] DigestAddrLut = DigestAddrLutInt[OtpAddrWidth-1:0]; + + if (PartInfo[k].offset == 0) begin : gen_zero_offset + assign part_sel_oh[k] = ({1'b0, dai_addr_i} < PartEndInt[OtpByteAddrWidth:0]); + + end else begin : gen_nonzero_offset + assign part_sel_oh[k] = (dai_addr_i >= PartInfo[k].offset) & + ({1'b0, dai_addr_i} < PartEndInt[OtpByteAddrWidth:0]); + end + assign digest_addr_lut[k] = DigestAddrLut; + end + + `ASSERT(ScrmblBlockWidthGe8_A, ScrmblBlockWidth >= 8) + `ASSERT(PartSelMustBeOnehot_A, $onehot0(part_sel_oh)) + + prim_arbiter_fixed #( + .N(NumPart), + .EnDataPort(0) + ) u_part_sel_idx ( + .clk_i, + .rst_ni, + .req_i ( part_sel_oh ), + .data_i ( '{default: '0} ), + .gnt_o ( ), // unused + .idx_o ( part_idx ), + .valid_o ( part_sel_valid ), // used for detecting OOB addresses + .data_o ( ), // unused + .ready_i ( 1'b0 ) + ); + + ///////////////////////////////////// + // Address Calculations for Digest // + ///////////////////////////////////// + + // Depending on whether this is a 32bit or 64bit partition, we cut off the lower address bits. + // Access sizes are either 64bit or 32bit, depending on what region the access goes to. + logic [OtpByteAddrWidth-1:0] addr_base; + always_comb begin : p_size_sel + otp_size_o = OtpSizeWidth'(unsigned'(32 / OtpWidth - 1)); + addr_base = {dai_addr_i[OtpByteAddrWidth-1:2], 2'h0}; + + // 64bit transaction for scrambled partitions. + if (PartInfo[part_idx].secret) begin + otp_size_o = OtpSizeWidth'(unsigned'(ScrmblBlockWidth / OtpWidth - 1)); + addr_base = {dai_addr_i[OtpByteAddrWidth-1:3], 3'h0}; + // 64bit transaction if computing a digest. + end else if (PartInfo[part_idx].hw_digest && (base_sel_q == PartOffset)) begin + otp_size_o = OtpSizeWidth'(unsigned'(ScrmblBlockWidth / OtpWidth - 1)); + addr_base = PartInfo[part_idx].offset; + // 64bit transaction if the DAI address points to the partition's digest offset. + end else if ((PartInfo[part_idx].hw_digest || PartInfo[part_idx].sw_digest) && + (base_sel_q == DaiOffset) && + ({dai_addr_i[OtpByteAddrWidth-1:3], 2'b0} == digest_addr_lut[part_idx])) begin + otp_size_o = OtpSizeWidth'(unsigned'(ScrmblBlockWidth / OtpWidth - 1)); + addr_base = {dai_addr_i[OtpByteAddrWidth-1:3], 3'h0}; + end + end + + // Address counter - this is only used for computing a digest, hence the increment is + // fixed to 8 byte. + // SEC_CM: DAI.CTR.REDUN + prim_count #( + .Width(CntWidth) + ) u_prim_count ( + .clk_i, + .rst_ni, + .clr_i(cnt_clr), + .set_i(1'b0), + .set_cnt_i('0), + .incr_en_i(cnt_en), + .decr_en_i(1'b0), + .step_i(CntWidth'(1)), + .commit_i(1'b1), + .cnt_o(cnt), + .cnt_after_commit_o(), + .err_o(cnt_err) + ); + + // Note that OTP works on halfword (16bit) addresses, hence need to + // shift the addresses appropriately. + logic [OtpByteAddrWidth-1:0] addr_calc; + assign addr_calc = {cnt, {$clog2(ScrmblBlockWidth/8){1'b0}}} + addr_base; + assign otp_addr_o = OtpAddrWidth'(addr_calc >> OtpAddrShift); + + /////////////// + // Registers // + /////////////// + + `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, ResetSt) + + always_ff @(posedge clk_i or negedge rst_ni) begin : p_regs + if (!rst_ni) begin + error_q <= NoError; + data_q <= '0; + base_sel_q <= DaiOffset; + end else begin + error_q <= error_d; + base_sel_q <= base_sel_d; + + // Working register + if (data_clr) begin + data_q <= '0; + end else if (data_en) begin + if (data_sel == ScrmblData) begin + data_q <= scrmbl_data_i; + end else if (data_sel == DaiData) begin + data_q <= dai_wdata_i; + end else begin + data_q <= otp_rdata_i; + end + end + end + end + + //////////////// + // Assertions // + //////////////// + + // Known assertions + `ASSERT_KNOWN(InitDoneKnown_A, init_done_o) + `ASSERT_KNOWN(PartInitReqKnown_A, part_init_req_o) + `ASSERT_KNOWN(ErrorKnown_A, error_o) + `ASSERT_KNOWN(DaiIdleKnown_A, dai_idle_o) + `ASSERT_KNOWN(DaiRdataKnown_A, dai_rdata_o) + `ASSERT_KNOWN(OtpReqKnown_A, otp_req_o) + `ASSERT_KNOWN(OtpCmdKnown_A, otp_cmd_o) + `ASSERT_KNOWN(OtpSizeKnown_A, otp_size_o) + `ASSERT_KNOWN(OtpWdataKnown_A, otp_wdata_o) + `ASSERT_KNOWN(OtpAddrKnown_A, otp_addr_o) + `ASSERT_KNOWN(ScrmblMtxReqKnown_A, scrmbl_mtx_req_o) + `ASSERT_KNOWN(ScrmblCmdKnown_A, scrmbl_cmd_o) + `ASSERT_KNOWN(ScrmblModeKnown_A, scrmbl_mode_o) + `ASSERT_KNOWN(ScrmblSelKnown_A, scrmbl_sel_o) + `ASSERT_KNOWN(ScrmblDataKnown_A, scrmbl_data_o) + `ASSERT_KNOWN(ScrmblValidKnown_A, scrmbl_valid_o) + + // OTP error response + `ASSERT(OtpErrorState_A, + state_q inside {InitOtpSt, ReadWaitSt, WriteWaitSt, DigReadWaitSt} && otp_rvalid_i && + !(otp_err inside {NoError, MacroEccCorrError, MacroWriteBlankError}) + |=> + state_q == ErrorSt && error_o == $past(otp_err)) + +endmodule : otp_ctrl_dai diff --git a/src/fuse_ctrl/rtl/otp_ctrl_ecc_reg.sv b/src/fuse_ctrl/rtl/otp_ctrl_ecc_reg.sv new file mode 100644 index 000000000..2199a7cc6 --- /dev/null +++ b/src/fuse_ctrl/rtl/otp_ctrl_ecc_reg.sv @@ -0,0 +1,105 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Register file for buffered OTP partitions. ECC is used to detect up +// to two simultaneous errors within each 64bit word. + +`include "prim_assert.sv" + +module otp_ctrl_ecc_reg #( + parameter int Width = 64, // bit + parameter int Depth = 128, + localparam int Aw = prim_util_pkg::vbits(Depth) // derived parameter +) ( + input logic clk_i, + input logic rst_ni, + + input logic wren_i, + input logic [Aw-1:0] addr_i, + input logic [Width-1:0] wdata_i, + output logic [Width-1:0] rdata_o, + + // Concurrent output of the register state. + output logic [Depth-1:0][Width-1:0] data_o, + // Concurrent ECC check error is flagged via this signal. + output logic ecc_err_o +); + + // Integration checks for parameters. + `ASSERT_INIT(WidthMustBe64bit_A, Width == 64) + + localparam int EccWidth = 8; + + logic [Depth-1:0][Width-1:0] data_d, data_q; + logic [Depth-1:0][EccWidth-1:0] ecc_d, ecc_q; + logic [Width+EccWidth-1:0] ecc_enc; + + // Only one encoder is needed. + prim_secded_inv_72_64_enc u_prim_secded_inv_72_64_enc ( + .data_i(wdata_i), + .data_o(ecc_enc) + ); + + if (Depth == 1) begin : gen_one_word_only + always_comb begin : p_write + data_o = data_q; + data_d = data_q; + ecc_d = ecc_q; + + rdata_o = '0; + if (32'(addr_i) < Depth) begin + rdata_o = data_q[0]; + if (wren_i) begin + {ecc_d[0], data_d[0]} = ecc_enc; + end + end + end + end else begin : gen_multiple_words + always_comb begin : p_write + data_o = data_q; + data_d = data_q; + ecc_d = ecc_q; + + rdata_o = '0; + if (32'(addr_i) < Depth) begin + rdata_o = data_q[addr_i]; + if (wren_i) begin + {ecc_d[addr_i], data_d[addr_i]} = ecc_enc; + end + end + end + end + + // Concurrent ECC checks. + logic [Depth-1:0][1:0] err; + for (genvar k = 0; k < Depth; k++) begin : gen_ecc_dec + prim_secded_inv_72_64_dec u_prim_secded_inv_72_64_dec ( + .data_i({ecc_q[k], data_q[k]}), + // We only rely on the error detection mechanism, + // and not on error correction. + .data_o(), + .syndrome_o(), + .err_o(err[k]) + ); + end + + assign ecc_err_o = |err; + + always_ff @(posedge clk_i or negedge rst_ni) begin : p_regs + if (!rst_ni) begin + ecc_q <= {Depth{prim_secded_pkg::SecdedInv7264ZeroEcc}}; + data_q <= '0; + end else begin + ecc_q <= ecc_d; + data_q <= data_d; + end + end + + `ASSERT_KNOWN(EccKnown_A, ecc_q) + `ASSERT_KNOWN(DataKnown_A, data_q) + `ASSERT_KNOWN(RDataOutKnown_A, rdata_o) + `ASSERT_KNOWN(DataOutKnown_A, data_o) + `ASSERT_KNOWN(EccErrKnown_A, ecc_err_o) + +endmodule : otp_ctrl_ecc_reg diff --git a/src/fuse_ctrl/rtl/otp_ctrl_kdi.sv b/src/fuse_ctrl/rtl/otp_ctrl_kdi.sv new file mode 100644 index 000000000..581c280e8 --- /dev/null +++ b/src/fuse_ctrl/rtl/otp_ctrl_kdi.sv @@ -0,0 +1,603 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Scrambling key derivation module for OTP. +// + +`include "prim_flop_macros.sv" + +module otp_ctrl_kdi + import otp_ctrl_pkg::*; + import otp_ctrl_reg_pkg::*; + import otp_ctrl_part_pkg::*; +#( + parameter scrmbl_key_init_t RndCnstScrmblKeyInit = RndCnstScrmblKeyInitDefault +) ( + input clk_i, + input rst_ni, + // Pulse to enable this module after OTP partitions have + // been initialized. + input kdi_en_i, + // Escalation input. This moves the FSM into a terminal state. + input lc_ctrl_pkg::lc_tx_t escalate_en_i, + // FSM is in error state + output logic fsm_err_o, + // Key seed inputs from OTP + input logic scrmbl_key_seed_valid_i, + input logic [FlashKeySeedWidth-1:0] flash_data_key_seed_i, + input logic [FlashKeySeedWidth-1:0] flash_addr_key_seed_i, + input logic [SramKeySeedWidth-1:0] sram_data_key_seed_i, + // EDN interface for requesting entropy + output logic edn_req_o, + input edn_ack_i, + input [EdnDataWidth-1:0] edn_data_i, + // Scrambling key requests + input flash_otp_key_req_t flash_otp_key_i, + output flash_otp_key_rsp_t flash_otp_key_o, + input sram_otp_key_req_t [NumSramKeyReqSlots-1:0] sram_otp_key_i, + output sram_otp_key_rsp_t [NumSramKeyReqSlots-1:0] sram_otp_key_o, + input otbn_otp_key_req_t otbn_otp_key_i, + output otbn_otp_key_rsp_t otbn_otp_key_o, + // Scrambling mutex request + output logic scrmbl_mtx_req_o, + input scrmbl_mtx_gnt_i, + // Scrambling datapath interface + output otp_scrmbl_cmd_e scrmbl_cmd_o, + output digest_mode_e scrmbl_mode_o, + output logic [ConstSelWidth-1:0] scrmbl_sel_o, + output logic [ScrmblBlockWidth-1:0] scrmbl_data_o, + output logic scrmbl_valid_o, + input logic scrmbl_ready_i, + input logic scrmbl_valid_i, + input logic [ScrmblBlockWidth-1:0] scrmbl_data_i +); + + import prim_util_pkg::vbits; + + //////////////////////// + // Integration Checks // + //////////////////////// + + // 2xFlash, OTBN + SRAM slots + localparam int NumReq = 3 + NumSramKeyReqSlots; + // Make sure key sizes in the system are multiples of 64bit and not larger than 256bit. + `ASSERT_INIT(KeyNonceSize0_A, (FlashKeySeedWidth <= 256) && ((FlashKeySeedWidth % 64) == 0)) + `ASSERT_INIT(KeyNonceSize1_A, (SramKeySeedWidth <= 256) && ((SramKeySeedWidth % 64) == 0)) + `ASSERT_INIT(KeyNonceSize2_A, (FlashKeyWidth <= 256) && ((FlashKeyWidth % 64) == 0)) + `ASSERT_INIT(KeyNonceSize3_A, (SramKeyWidth <= 256) && ((SramKeyWidth % 64) == 0)) + `ASSERT_INIT(KeyNonceSize4_A, (SramNonceWidth <= 256) && ((SramNonceWidth % 64) == 0)) + `ASSERT_INIT(KeyNonceSize5_A, (OtbnKeyWidth <= 256) && ((OtbnKeyWidth % 64) == 0)) + `ASSERT_INIT(KeyNonceSize6_A, (OtbnNonceWidth <= 256) && ((OtbnNonceWidth % 64) == 0)) + + // Make sure EDN interface has compatible width. + `ASSERT_INIT(EntropyWidthDividesDigestBlockWidth_A, (ScrmblKeyWidth % EdnDataWidth) == 0) + + // Currently the assumption is that the SRAM nonce is the widest. + `ASSERT_INIT(NonceWidth_A, NumNonceChunks * ScrmblBlockWidth == SramNonceWidth) + + /////////////////////////////////// + // Input Mapping and Arbitration // + /////////////////////////////////// + + // The key derivation and token hashing functions are aligned such that 2 x 128bit key + // seeds / token blocks are processed in two subsequent steps using the digest primitive. + // This effectively compresses these blocks down into 2 x 64bit blocks, thereby creating + // one 128bit key or token output. + // + // The same FSM is shared among the different flavors of key derivation and token + // hashing functions, and the following configuration options are available: + // + // 1) ingest an additional 128bit entropy block after ingesting a 128bit key seed. + // 2) keep digest state after producing the first 64bit block instead of reverting to the IV. + // 3) netlist constant index. + // 4) fetch additional entropy for the nonce output. + // 5) whether or not the key seed is valid. if not, it will be defaulted to '0. + // 6) 256bit key seed / token input. + // + // The configuration options are set further below, depending on the request type. + + typedef struct packed { + logic ingest_entropy; // 1) + logic chained_digest; // 2) + digest_sel_e digest_sel; // 3) + logic fetch_nonce; // 4) + logic [1:0] nonce_size; // 4) + logic seed_valid; // 5) + logic [3:0][ScrmblBlockWidth-1:0] seed; // 6) + } req_bundle_t; + + logic [NumReq-1:0] req, gnt; + req_bundle_t req_bundles [NumReq]; + + assign req[0] = flash_otp_key_i.data_req; + assign req[1] = flash_otp_key_i.addr_req; + assign req[2] = otbn_otp_key_i.req; + + assign flash_otp_key_o.data_ack = gnt[0]; + assign flash_otp_key_o.addr_ack = gnt[1]; + assign otbn_otp_key_o.ack = gnt[2]; + + // anchored seeds + logic [FlashKeySeedWidth-1:0] flash_data_key_seed; + logic [FlashKeySeedWidth-1:0] flash_addr_key_seed; + logic [SramKeySeedWidth-1:0] sram_data_key_seed; + + prim_sec_anchor_buf #( + .Width(FlashKeySeedWidth) + ) u_flash_data_key_anchor ( + .in_i(flash_data_key_seed_i), + .out_o(flash_data_key_seed) + ); + + prim_sec_anchor_buf #( + .Width(FlashKeySeedWidth) + ) u_flash_addr_key_anchor ( + .in_i(flash_addr_key_seed_i), + .out_o(flash_addr_key_seed) + ); + + prim_sec_anchor_buf #( + .Width(SramKeySeedWidth) + ) u_sram_data_key_anchor ( + .in_i(sram_data_key_seed_i), + .out_o(sram_data_key_seed) + ); + + // Flash data key + assign req_bundles[0] = '{ingest_entropy: 1'b0, // no random entropy added + chained_digest: 1'b0, // revert to netlist IV between blocks + digest_sel: FlashDataKey, + fetch_nonce: 1'b1, + nonce_size: 2'(FlashKeyWidth/EdnDataWidth-1), + seed_valid: scrmbl_key_seed_valid_i, + seed: flash_data_key_seed}; // 2x128bit + // Flash addr key + assign req_bundles[1] = '{ingest_entropy: 1'b0, // no random entropy added + chained_digest: 1'b0, // revert to netlist IV between blocks + digest_sel: FlashAddrKey, + fetch_nonce: 1'b1, + nonce_size: '0, + seed_valid: scrmbl_key_seed_valid_i, + seed: flash_addr_key_seed}; // 2x128bit + // OTBN key + assign req_bundles[2] = '{ingest_entropy: 1'b1, // ingest random data + chained_digest: 1'b0, // revert to netlist IV between blocks + digest_sel: SramDataKey, + fetch_nonce: 1'b1, // fetch nonce + nonce_size: 2'(OtbnNonceWidth/EdnDataWidth-1), + seed_valid: scrmbl_key_seed_valid_i, + seed: {sram_data_key_seed, // reuse same seed + sram_data_key_seed}}; + + // SRAM keys + for (genvar k = 3; k < NumReq; k++) begin : gen_req_assign + assign req[k] = sram_otp_key_i[k-3].req; + assign sram_otp_key_o[k-3].ack = gnt[k]; + assign req_bundles[k] = '{ingest_entropy: 1'b1, // ingest random data + chained_digest: 1'b0, // revert to netlist IV between blocks + digest_sel: SramDataKey, + fetch_nonce: 1'b1, // fetch nonce + nonce_size: 2'(SramNonceWidth/EdnDataWidth-1), + seed_valid: scrmbl_key_seed_valid_i, + seed: {sram_data_key_seed, // reuse same seed + sram_data_key_seed}}; + end + + // This arbitrates among incoming key derivation requests on a + // round robin basis to prevent deadlock. + logic req_valid, req_ready; + req_bundle_t req_bundle; + + prim_arbiter_tree #( + .N(NumReq), + .DW($bits(req_bundle_t))) + u_req_arb ( + .clk_i, + .rst_ni, + .req_chk_i ( 1'b1 ), + .req_i ( req ), + .data_i ( req_bundles ), + .gnt_o ( gnt ), + .idx_o ( ), + .valid_o ( req_valid ), + .data_o ( req_bundle ), + .ready_i ( req_ready ) + ); + + ////////////////////////////// + // Temporary Regs and Muxes // + ////////////////////////////// + + localparam int CntWidth = 2; + logic seed_cnt_clr, seed_cnt_en, entropy_cnt_clr, entropy_cnt_en, seed_cnt_err, entropy_cnt_err; + logic [CntWidth-1:0] seed_cnt, entropy_cnt; + + // SEC_CM: KDI_SEED.CTR.REDUN + prim_count #( + .Width(CntWidth) + ) u_prim_count_seed ( + .clk_i, + .rst_ni, + .clr_i(seed_cnt_clr), + .set_i(1'b0), + .set_cnt_i('0), + .incr_en_i(seed_cnt_en), + .decr_en_i(1'b0), + .step_i(CntWidth'(1)), + .commit_i(1'b1), + .cnt_o(seed_cnt), + .cnt_after_commit_o(), + .err_o(seed_cnt_err) + ); + + // SEC_CM: KDI_ENTROPY.CTR.REDUN + prim_count #( + .Width(CntWidth) + ) u_prim_count_entropy ( + .clk_i, + .rst_ni, + .clr_i(entropy_cnt_clr), + .set_i(1'b0), + .set_cnt_i('0), + .incr_en_i(entropy_cnt_en), + .decr_en_i(1'b0), + .step_i(CntWidth'(1)), + .commit_i(1'b1), + .cnt_o(entropy_cnt), + .cnt_after_commit_o(), + .err_o(entropy_cnt_err) + ); + + logic seed_valid_reg_en; + logic key_reg_en, nonce_reg_en; + logic seed_valid_d, seed_valid_q; + logic [ScrmblKeyWidth/ScrmblBlockWidth-1:0][ScrmblBlockWidth-1:0] key_out_d, key_out_q; + logic [NumNonceChunks-1:0][ScrmblBlockWidth-1:0] nonce_out_d, nonce_out_q; + + always_comb begin : p_outregs + key_out_d = key_out_q; + nonce_out_d = nonce_out_q; + seed_valid_d = seed_valid_q; + if (key_reg_en) begin + key_out_d[seed_cnt[1]] = scrmbl_data_i; + end + if (nonce_reg_en) begin + nonce_out_d[entropy_cnt[$clog2(NumNonceChunks)-1:0]] = edn_data_i; + end + if (seed_valid_reg_en) begin + seed_valid_d = req_bundle.seed_valid; + end + end + + // Connect keys/nonce outputs to output regs. + prim_sec_anchor_flop #( + .Width(ScrmblKeyWidth), + .ResetValue(RndCnstScrmblKeyInit.key) + ) u_key_out_anchor ( + .clk_i, + .rst_ni, + .d_i(key_out_d), + .q_o(key_out_q) + ); + + assign otbn_otp_key_o.key = key_out_q; + assign otbn_otp_key_o.nonce = nonce_out_q[OtbnNonceSel-1:0]; + assign otbn_otp_key_o.seed_valid = seed_valid_q; + + assign flash_otp_key_o.key = key_out_q; + assign flash_otp_key_o.rand_key = nonce_out_q[FlashNonceSel-1:0]; + assign flash_otp_key_o.seed_valid = seed_valid_q; + + for (genvar k = 0; k < NumSramKeyReqSlots; k++) begin : gen_out_assign + assign sram_otp_key_o[k].key = key_out_q; + assign sram_otp_key_o[k].nonce = nonce_out_q[SramNonceSel-1:0]; + assign sram_otp_key_o[k].seed_valid = seed_valid_q; + end + + typedef enum logic { + SeedData, + EntropyData + } data_sel_e; + + // Select correct 64bit block. + data_sel_e data_sel; + assign scrmbl_data_o = (data_sel == EntropyData) ? nonce_out_q[entropy_cnt[0]] : + // Gate seed value to '0 if invalid. + (req_bundle.seed_valid) ? req_bundle.seed[seed_cnt] : '0; + + ///////////////// + // Control FSM // + ///////////////// + + // SEC_CM: KDI.FSM.SPARSE + // Encoding generated with: + // $ ./util/design/sparse-fsm-encode.py -d 5 -m 11 -n 10 \ + // -s 2544133835 --language=sv + // + // Hamming distance histogram: + // + // 0: -- + // 1: -- + // 2: -- + // 3: -- + // 4: -- + // 5: |||||||||||||||||||| (54.55%) + // 6: |||||||||||||||| (45.45%) + // 7: -- + // 8: -- + // 9: -- + // 10: -- + // + // Minimum Hamming distance: 5 + // Maximum Hamming distance: 6 + // Minimum Hamming weight: 3 + // Maximum Hamming weight: 9 + // + localparam int StateWidth = 10; + typedef enum logic [StateWidth-1:0] { + ResetSt = 10'b0101100001, + IdleSt = 10'b0001011011, + DigClrSt = 10'b1101010110, + DigLoadSt = 10'b0010110111, + FetchEntropySt = 10'b1000001101, + DigEntropySt = 10'b0100111100, + DigFinSt = 10'b1000100010, + DigWaitSt = 10'b1110010001, + FetchNonceSt = 10'b0011000100, + FinishSt = 10'b1011111000, + ErrorSt = 10'b1111101111 + } state_e; + + state_e state_d, state_q; + logic edn_req_d, edn_req_q; + assign edn_req_o = edn_req_q; + + always_comb begin : p_fsm + state_d = state_q; + + // FSM Error output + fsm_err_o = 1'b0; + + // Counters + seed_cnt_en = 1'b0; + seed_cnt_clr = 1'b0; + entropy_cnt_en = 1'b0; + entropy_cnt_clr = 1'b0; + + // EDN 128bit block fetch request. + // This keeps the request alive until it has + // been acked to adhere to the req/ack protocol + // even in cases where the FSM jumps into + // an error state while waiting for a request. + edn_req_d = edn_req_q & ~edn_ack_i; + + // Data selection and temp registers + data_sel = SeedData; + key_reg_en = 1'b0; + nonce_reg_en = 1'b0; + seed_valid_reg_en = 1'b0; + + // Scrambling datapath + scrmbl_mtx_req_o = 1'b0; + scrmbl_sel_o = req_bundle.digest_sel; + scrmbl_cmd_o = LoadShadow; + scrmbl_mode_o = StandardMode; + + scrmbl_valid_o = 1'b0; + + // Request acknowledgement + req_ready = 1'b0; + + unique case (state_q) + /////////////////////////////////////////////////////////////////// + // State right after reset. Wait here until KDI gets enabled. + ResetSt: begin + if (kdi_en_i) begin + state_d = IdleSt; + end + end + /////////////////////////////////////////////////////////////////// + // Wait for a request, then go and acquire the mutex. + IdleSt: begin + if (req_valid) begin + state_d = DigClrSt; + seed_cnt_clr = 1'b1; + entropy_cnt_clr = 1'b1; + end + end + /////////////////////////////////////////////////////////////////// + // First, acquire the mutex for the digest and clear the digest state. + DigClrSt: begin + scrmbl_mtx_req_o = 1'b1; + scrmbl_valid_o = 1'b1; + // Need to reset the digest state and set digest mode to "standard". + scrmbl_cmd_o = DigestInit; + if (scrmbl_mtx_gnt_i && scrmbl_ready_i) begin + state_d = DigLoadSt; + end + end + /////////////////////////////////////////////////////////////////// + // Load two 64bit blocks of the seed, and trigger digest calculation. + DigLoadSt: begin + scrmbl_mtx_req_o = 1'b1; + scrmbl_valid_o = 1'b1; + // Trigger digest round in case this is the second block in a row. + if (seed_cnt[0]) begin + scrmbl_cmd_o = Digest; + if (scrmbl_ready_i) begin + // Go and ingest a block of entropy if required. + if (req_bundle.ingest_entropy) begin + state_d = FetchEntropySt; + // Otherwise go to digest finalization state. + end else begin + state_d = DigFinSt; + end + end + // Just load first 64bit block and stay here. + end else if (scrmbl_ready_i) begin + seed_cnt_en = 1'b1; + end + end + /////////////////////////////////////////////////////////////////// + // Fetch random data to ingest for key derivation. + FetchEntropySt: begin + scrmbl_mtx_req_o = 1'b1; + edn_req_d = 1'b1; + if (edn_ack_i) begin + nonce_reg_en = 1'b1; + // Finished, go and acknowledge this request. + if (entropy_cnt == 2'h1) begin + state_d = DigEntropySt; + entropy_cnt_clr = 1'b1; + // Keep on requesting entropy. + end else begin + entropy_cnt_en = 1'b1; + end + end + end + /////////////////////////////////////////////////////////////////// + // Load two 64bit blocks of entropy data. + DigEntropySt: begin + scrmbl_mtx_req_o = 1'b1; + data_sel = EntropyData; + scrmbl_valid_o = 1'b1; + // Trigger digest round in case this is the second block in a row, + // and go to digest finalization. + if (entropy_cnt[0]) begin + scrmbl_cmd_o = Digest; + if (scrmbl_ready_i) begin + state_d = DigFinSt; + entropy_cnt_clr = 1'b1; + end + // Just load first 64bit block and stay here. + end else if (scrmbl_ready_i) begin + entropy_cnt_en = 1'b1; + end + end + /////////////////////////////////////////////////////////////////// + // Trigger digest finalization and go wait for the result. + DigFinSt: begin + scrmbl_mtx_req_o = 1'b1; + scrmbl_valid_o = 1'b1; + scrmbl_cmd_o = DigestFinalize; + if (scrmbl_ready_i) begin + state_d = DigWaitSt; + end + end + /////////////////////////////////////////////////////////////////// + // Wait for the digest to return, and write the result to the key + // output register. Go back and process the second part of the + // input seed if needed. + DigWaitSt: begin + scrmbl_mtx_req_o = 1'b1; + if (scrmbl_valid_i) begin + key_reg_en = 1'b1; + // Not finished yet, need to go back and produce second 64bit block. + if (seed_cnt == 2'h1) begin + seed_cnt_en = 1'b1; + // In this case the previous digest state is kept, + // which leads to a chained digest. + if (req_bundle.chained_digest) begin + state_d = DigLoadSt; + // In this case we revert the digest state to the netlist IV. + end else begin + state_d = DigClrSt; + end + // This was the second 64bit output block. + end else begin + seed_cnt_clr = 1'b1; + // Make sure we output the status of the key seed in OTP. + seed_valid_reg_en = 1'b1; + // Check whether we need to fetch additional nonce data. + if (req_bundle.fetch_nonce) begin + state_d = FetchNonceSt; + end else begin + // Finished, go and acknowledge this request. + state_d = FinishSt; + end + end + end + end + /////////////////////////////////////////////////////////////////// + // Fetch additional nonce data. Note that the mutex is released in + // this state. + FetchNonceSt: begin + edn_req_d = 1'b1; + if (edn_ack_i) begin + nonce_reg_en = 1'b1; + // Finished, go and acknowledge this request. + if (entropy_cnt == req_bundle.nonce_size) begin + state_d = FinishSt; + entropy_cnt_clr = 1'b1; + // Keep on requesting entropy. + end else begin + entropy_cnt_en = 1'b1; + end + end + end + /////////////////////////////////////////////////////////////////// + // Acknowledge request and go back to IdleSt. + FinishSt: begin + state_d = IdleSt; + req_ready = 1'b1; + end + /////////////////////////////////////////////////////////////////// + // Terminal error state. This raises an alert. + ErrorSt: begin + fsm_err_o = 1'b1; + end + /////////////////////////////////////////////////////////////////// + // This should never happen, hence we directly jump into the + // error state, where an alert will be triggered. + default: begin + state_d = ErrorSt; + fsm_err_o = 1'b1; + end + /////////////////////////////////////////////////////////////////// + endcase // state_q + + // Unconditionally jump into the terminal error state in case of escalation. + // SEC_CM: KDI.FSM.LOCAL_ESC, KDI.FSM.GLOBAL_ESC + if (lc_ctrl_pkg::lc_tx_test_true_loose(escalate_en_i) || + seed_cnt_err || entropy_cnt_err) begin + state_d = ErrorSt; + fsm_err_o = 1'b1; + end + end + + /////////////// + // Registers // + /////////////// + + `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, ResetSt) + + always_ff @(posedge clk_i or negedge rst_ni) begin : p_regs + if (!rst_ni) begin + nonce_out_q <= RndCnstScrmblKeyInit.nonce; + seed_valid_q <= 1'b0; + edn_req_q <= 1'b0; + end else begin + nonce_out_q <= nonce_out_d; + seed_valid_q <= seed_valid_d; + edn_req_q <= edn_req_d; + end + end + + //////////////// + // Assertions // + //////////////// + + `ASSERT_KNOWN(FsmErrKnown_A, fsm_err_o) + `ASSERT_KNOWN(EdnReqKnown_A, edn_req_o) + `ASSERT_KNOWN(FlashOtpKeyRspKnown_A, flash_otp_key_o) + `ASSERT_KNOWN(SramOtpKeyRspKnown_A, sram_otp_key_o) + `ASSERT_KNOWN(OtbnOtpKeyRspKnown_A, otbn_otp_key_o) + `ASSERT_KNOWN(ScrmblMtxReqKnown_A, scrmbl_mtx_req_o) + `ASSERT_KNOWN(ScrmblCmdKnown_A, scrmbl_cmd_o) + `ASSERT_KNOWN(ScrmblModeKnown_A, scrmbl_mode_o) + `ASSERT_KNOWN(ScrmblSelKnown_A, scrmbl_sel_o) + `ASSERT_KNOWN(ScrmblDataKnown_A, scrmbl_data_o) + `ASSERT_KNOWN(ScrmblValidKnown_A, scrmbl_valid_o) + +endmodule : otp_ctrl_kdi diff --git a/src/fuse_ctrl/rtl/otp_ctrl_lci.sv b/src/fuse_ctrl/rtl/otp_ctrl_lci.sv new file mode 100644 index 000000000..122675069 --- /dev/null +++ b/src/fuse_ctrl/rtl/otp_ctrl_lci.sv @@ -0,0 +1,298 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Life cycle interface for performing life cycle transitions in OTP. +// + +`include "prim_flop_macros.sv" + +module otp_ctrl_lci + import otp_ctrl_pkg::*; + import otp_ctrl_reg_pkg::*; + import otp_ctrl_part_pkg::*; +#( + // Lifecycle partition information + parameter part_info_t Info = PartInfoDefault +) ( + input clk_i, + input rst_ni, + input lci_en_i, + // Escalation input. This moves the FSM into a terminal state and locks down + // the partition. + input lc_ctrl_pkg::lc_tx_t escalate_en_i, + // Life cycle transition request. In order to perform a state transition, + // the LC controller signals the new count and state. The OTP wrapper then + // only programs bits that have not been programmed before. + // Note that a transition request will fail if the request attempts to + // clear already programmed bits within OTP. + input lc_req_i, + input logic [Info.size*8-1:0] lc_data_i, + output logic lc_ack_o, + output logic lc_err_o, + // Output error state of partition, to be consumed by OTP error/alert logic. + // Note that most errors are not recoverable and move the partition FSM into + // a terminal error state. + output otp_err_e error_o, + // This error signal is pulsed high if the FSM has been glitched into an invalid state. + // Although it is somewhat redundant with the error code in error_o above, it is + // meant to cover cases where we already latched an error code while the FSM is + // glitched into an invalid state (since in that case, the error code will not be + // overridden with the FSM error code so that the original error code is still + // discoverable). + output logic fsm_err_o, + output logic lci_prog_idle_o, + // OTP interface + output logic otp_req_o, + output prim_otp_pkg::cmd_e otp_cmd_o, + output logic [OtpSizeWidth-1:0] otp_size_o, + output logic [OtpIfWidth-1:0] otp_wdata_o, + output logic [OtpAddrWidth-1:0] otp_addr_o, + input otp_gnt_i, + input otp_rvalid_i, + input [ScrmblBlockWidth-1:0] otp_rdata_i, + input prim_otp_pkg::err_e otp_err_i +); + + //////////////////////// + // Integration Checks // + //////////////////////// + + import prim_util_pkg::vbits; + + localparam int NumLcOtpWords = int'(Info.size) >> OtpAddrShift; + localparam int CntWidth = vbits(NumLcOtpWords); + + localparam int unsigned LastLcOtpWordInt = NumLcOtpWords - 1; + localparam bit [CntWidth-1:0] LastLcOtpWord = LastLcOtpWordInt[CntWidth-1:0]; + + // This is required, since each native OTP word can only be programmed once. + `ASSERT_INIT(LcValueMustBeWiderThanNativeOtpWidth_A, lc_ctrl_state_pkg::LcValueWidth >= OtpWidth) + + //////////////////// + // Controller FSM // + //////////////////// + + // SEC_CM: LCI.FSM.SPARSE + // Encoding generated with: + // $ ./util/design/sparse-fsm-encode.py -d 5 -m 5 -n 9 \ + // -s 558234734 --language=sv + // + // Hamming distance histogram: + // + // 0: -- + // 1: -- + // 2: -- + // 3: -- + // 4: -- + // 5: |||||||||||||||||||| (60.00%) + // 6: ||||||||||||| (40.00%) + // 7: -- + // 8: -- + // 9: -- + // + // Minimum Hamming distance: 5 + // Maximum Hamming distance: 6 + // Minimum Hamming weight: 1 + // Maximum Hamming weight: 7 + // + localparam int StateWidth = 9; + typedef enum logic [StateWidth-1:0] { + ResetSt = 9'b000101011, + IdleSt = 9'b110011110, + WriteSt = 9'b101010001, + WriteWaitSt = 9'b010000000, + ErrorSt = 9'b011111101 + } state_e; + + state_e state_d, state_q; + logic cnt_clr, cnt_en, cnt_err; + logic [CntWidth-1:0] cnt; + otp_err_e error_d, error_q; + + // Output LCI errors + assign error_o = error_q; + + always_comb begin : p_fsm + state_d = state_q; + + // Counter + cnt_en = 1'b0; + cnt_clr = 1'b0; + + // Idle status + lci_prog_idle_o = 1'b1; + + // OTP signals + otp_req_o = 1'b0; + otp_cmd_o = prim_otp_pkg::Read; + + // Response to LC controller + lc_err_o = 1'b0; + lc_ack_o = 1'b0; + + // Error Register + error_d = error_q; + fsm_err_o = 1'b0; + + unique case (state_q) + /////////////////////////////////////////////////////////////////// + // State right after reset. Wait here until LCI gets enabled. + ResetSt: begin + lci_prog_idle_o = 1'b0; + if (lci_en_i) begin + state_d = IdleSt; + end + end + /////////////////////////////////////////////////////////////////// + // Wait for a request from the life cycle controller + IdleSt: begin + if (lc_req_i) begin + state_d = WriteSt; + cnt_clr = 1'b1; + end + end + /////////////////////////////////////////////////////////////////// + // Loop through the lifecycle sate and burn in all words. + // If the write data contains a 0 bit in a position where a bit has already been + // programmed to 1 before, the OTP errors out. + WriteSt: begin + otp_req_o = 1'b1; + otp_cmd_o = prim_otp_pkg::Write; + lci_prog_idle_o = 1'b0; + if (otp_gnt_i) begin + state_d = WriteWaitSt; + end + end + /////////////////////////////////////////////////////////////////// + // Wait for OTP response, and check whether there are more words to burn in. + // In case an OTP transaction fails, latch the OTP error code, and jump to + // terminal error state. + WriteWaitSt: begin + lci_prog_idle_o = 1'b0; + if (otp_rvalid_i) begin + // Check OTP return code. + // Note that if errors occur, we aggregate the error code + // but still attempt to program all remaining words. + // This is done to ensure that a life cycle state with + // ECC correctable errors in some words can still be scrapped. + if (otp_err_e'(otp_err_i) != NoError) begin + error_d = otp_err_e'(otp_err_i); + end + + // Check whether we programmed all OTP words. + // If yes, we are done and can go back to idle. + if (cnt == LastLcOtpWord) begin + state_d = IdleSt; + lc_ack_o = 1'b1; + // If in any of the words a programming error has occurred, + // we signal that accordingly and go to the error state. + if (error_d != NoError) begin + lc_err_o = 1'b1; + state_d = ErrorSt; + end + // Otherwise we increase the OTP word counter. + end else begin + state_d = WriteSt; + cnt_en = 1'b1; + end + end + end + /////////////////////////////////////////////////////////////////// + // Terminal Error State. This locks access to the partition. + // Make sure the partition signals an error state if no error + // code has been latched so far, and lock the buffer regs down. + ErrorSt: begin + if (error_q == NoError) begin + error_d = FsmStateError; + end + end + /////////////////////////////////////////////////////////////////// + // We should never get here. If we do (e.g. via a malicious + // glitch), error out immediately. + default: begin + state_d = ErrorSt; + fsm_err_o = 1'b1; + end + /////////////////////////////////////////////////////////////////// + endcase // state_q + + // Unconditionally jump into the terminal error state in case of escalation. + // SEC_CM: LCI.FSM.LOCAL_ESC, LCI.FSM.GLOBAL_ESC + if (lc_ctrl_pkg::lc_tx_test_true_loose(escalate_en_i) || cnt_err) begin + state_d = ErrorSt; + fsm_err_o = 1'b1; + if (error_q == NoError) begin + error_d = FsmStateError; + end + end + + end + + ////////////////////////////// + // Counter and address calc // + ////////////////////////////// + + // Native OTP word counter + // SEC_CM: LCI.CTR.REDUN + prim_count #( + .Width(CntWidth) + ) u_prim_count ( + .clk_i, + .rst_ni, + .clr_i(cnt_clr), + .set_i(1'b0), + .set_cnt_i('0), + .incr_en_i(cnt_en), + .decr_en_i(1'b0), + .step_i(CntWidth'(1)), + .commit_i(1'b1), + .cnt_o(cnt), + .cnt_after_commit_o(), + .err_o(cnt_err) + ); + + // The output address is "offset + count", but we have to convert Info.offset from a byte address + // to a halfword (16-bit) address by discarding the bottom OtpAddrShift bits. We also make the + // zero-extension of cnt explicit (to avoid width mismatch warnings). + assign otp_addr_o = Info.offset[OtpByteAddrWidth-1:OtpAddrShift] + OtpAddrWidth'(cnt); + + // Always transfer 16bit blocks. + assign otp_size_o = '0; + + logic [NumLcOtpWords-1:0][OtpWidth-1:0] data; + assign data = lc_data_i; + assign otp_wdata_o = (otp_req_o) ? OtpIfWidth'(data[cnt]) : '0; + + logic unused_rdata; + assign unused_rdata = ^otp_rdata_i; + + /////////////// + // Registers // + /////////////// + + `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, ResetSt) + + always_ff @(posedge clk_i or negedge rst_ni) begin : p_regs + if (!rst_ni) begin + error_q <= NoError; + end else begin + error_q <= error_d; + end + end + + //////////////// + // Assertions // + //////////////// + + `ASSERT_KNOWN(LcAckKnown_A, lc_ack_o) + `ASSERT_KNOWN(LcErrKnown_A, lc_err_o) + `ASSERT_KNOWN(ErrorKnown_A, error_o) + `ASSERT_KNOWN(LciIdleKnown_A, lci_prog_idle_o) + `ASSERT_KNOWN(OtpReqKnown_A, otp_req_o) + `ASSERT_KNOWN(OtpCmdKnown_A, otp_cmd_o) + `ASSERT_KNOWN(OtpSizeKnown_A, otp_size_o) + `ASSERT_KNOWN(OtpWdataKnown_A, otp_wdata_o) + `ASSERT_KNOWN(OtpAddrKnown_A, otp_addr_o) + +endmodule : otp_ctrl_lci diff --git a/src/fuse_ctrl/rtl/otp_ctrl_lfsr_timer.sv b/src/fuse_ctrl/rtl/otp_ctrl_lfsr_timer.sv new file mode 100644 index 000000000..22b3ec383 --- /dev/null +++ b/src/fuse_ctrl/rtl/otp_ctrl_lfsr_timer.sv @@ -0,0 +1,397 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// This module implements the LFSR timer for triggering periodic consistency and integrity checks in +// OTP. In particular, this module contains two 40bit counters (one for the consistency and one +// for the integrity checks) and a 40bit LFSR to draw pseudo random wait counts. +// +// The integ_period_msk_i and cnsty_period_msk_i mask signals are used to mask off the LFSR outputs +// and hence determine the maximum wait count that can be drawn. If these values are set to +// zero, the corresponding timer is disabled. +// +// Once a particular check timer has expired, the module will send out a check request to all +// partitions and wait for an acknowledgment. If a particular partition encounters an integrity or +// consistency mismatch, this will be directly reported via the error and alert logic. +// +// In order to guard against wedged partition controllers or arbitration lock ups due to tampering +// attempts, this check timer module also supports a 32bit timeout that can optionally be +// programmed. If a particular check times out, chk_timeout_o will be asserted, which will raise +// an alert via the error logic. +// +// The EntropyWidth LSBs of the LFSR are reseeded with fresh entropy from EDN once +// LfsrUsageThreshold values have been drawn from the LFSR. +// +// It is also possible to trigger one-off checks via integ_chk_trig_i and cnsty_chk_trig_i. +// This can be useful if SW chooses to leave the periodic checks disabled. +// + +`include "prim_flop_macros.sv" + +module otp_ctrl_lfsr_timer + import otp_ctrl_pkg::*; + import otp_ctrl_reg_pkg::*; +#( + // Compile time random constants, to be overriden by topgen. + parameter lfsr_seed_t RndCnstLfsrSeed = RndCnstLfsrSeedDefault, + parameter lfsr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault +) ( + input clk_i, + input rst_ni, + output logic edn_req_o, // request to EDN + input edn_ack_i, // ack from EDN + input [EdnDataWidth-1:0] edn_data_i, // from EDN + input timer_en_i, // enable timer + input otp_prog_busy_i, // indicates whether prog ops are in progress + input integ_chk_trig_i, // one-off trigger for integrity check + input cnsty_chk_trig_i, // one-off trigger for consistency check + output logic chk_pending_o, // indicates whether there are pending checks + input [31:0] timeout_i, // check timeout + input [31:0] integ_period_msk_i, // maximum integrity check mask + input [31:0] cnsty_period_msk_i, // maximum consistency check mask + output logic [NumPart-1:0] integ_chk_req_o, // request to all partitions + output logic [NumPart-1:0] cnsty_chk_req_o, // request to all partitions + input [NumPart-1:0] integ_chk_ack_i, // response from partitions + input [NumPart-1:0] cnsty_chk_ack_i, // response from partitions + input lc_ctrl_pkg::lc_tx_t escalate_en_i, // escalation input, moves FSM into ErrorSt + output logic chk_timeout_o, // a check has timed out + output logic fsm_err_o // the FSM has reached an invalid state +); + + //////////////////// + // Reseed counter // + //////////////////// + + // Count how many times the LFSR has been used to generate a value. + // Once we've reached the limit, we request new entropy from EDN to reseed + // the LFSR. Note that this is not a blocking operation for the timer below. + // I.e., the timer is allowed to continue its operation, and may draw more + // values, even if the EDN reseed request is still in progress. + logic reseed_en, lfsr_en; + logic [$clog2(LfsrUsageThreshold+1)-1:0] reseed_cnt_d, reseed_cnt_q; + assign reseed_cnt_d = (reseed_en) ? '0 : + (edn_req_o) ? reseed_cnt_q : + (lfsr_en) ? reseed_cnt_q + 1'b1 : + reseed_cnt_q; + + assign edn_req_o = (reseed_cnt_q >= LfsrUsageThreshold); + assign reseed_en = edn_req_o & edn_ack_i; + + /////////////////////////// + // Tandem LFSR Instances // + /////////////////////////// + + logic lfsr_err; + logic [LfsrWidth-1:0] entropy; + logic [LfsrWidth-1:0] lfsr_state; + assign entropy = (reseed_en) ? edn_data_i[LfsrWidth-1:0] : '0; + + // We employ two redundant LFSRs to guard against FI attacks. + // If any of the two is glitched and the two LFSR states do not agree, + // the FSM below is moved into a terminal error state. + // SEC_CM: TIMER.LFSR.REDUN + prim_double_lfsr #( + .LfsrDw ( LfsrWidth ), + .EntropyDw ( LfsrWidth ), + .StateOutDw ( LfsrWidth ), + .DefaultSeed ( RndCnstLfsrSeed ), + .StatePermEn ( 1'b1 ), + .StatePerm ( RndCnstLfsrPerm ), + .ExtSeedSVA ( 1'b0 ) + ) u_prim_double_lfsr ( + .clk_i, + .rst_ni, + .seed_en_i ( 1'b0 ), + .seed_i ( '0 ), + .lfsr_en_i ( reseed_en || lfsr_en ), + .entropy_i ( entropy ), + .state_o ( lfsr_state ), + .err_o ( lfsr_err ) + ); + + // Not all entropy bits are used. + logic unused_seed; + assign unused_seed = ^edn_data_i; + + `ASSERT_INIT(EdnIsWideEnough_A, EdnDataWidth >= LfsrWidth) + + ////////////////////////////// + // Tandem Counter Instances // + ////////////////////////////// + + // We employ redundant counters to guard against FI attacks. + // If any of them is glitched and the redundant counter states do not agree, + // the FSM below is moved into a terminal error state. + logic [LfsrWidth-1:0] integ_cnt, cnsty_cnt, integ_cnt_set_val, cnsty_cnt_set_val; + logic [LfsrWidth-1:0] integ_mask, cnsty_mask; + logic integ_set_period, integ_set_timeout, integ_cnt_zero; + logic cnsty_set_period, cnsty_set_timeout, cnsty_cnt_zero; + logic integ_cnt_set, cnsty_cnt_set, integ_cnt_err, cnsty_cnt_err; + logic timeout_zero, integ_msk_zero, cnsty_msk_zero, cnsty_cnt_pause; + + assign timeout_zero = (timeout_i == '0); + assign integ_msk_zero = (integ_period_msk_i == '0); + assign cnsty_msk_zero = (cnsty_period_msk_i == '0); + assign integ_cnt_zero = (integ_cnt == '0); + assign cnsty_cnt_zero = (cnsty_cnt == '0); + + assign integ_cnt_set = integ_set_period || integ_set_timeout; + assign cnsty_cnt_set = cnsty_set_period || cnsty_set_timeout; + + assign integ_mask = {integ_period_msk_i, {LfsrWidth-32{1'b1}}}; + assign cnsty_mask = {cnsty_period_msk_i, {LfsrWidth-32{1'b1}}}; + assign integ_cnt_set_val = (integ_set_period) ? (lfsr_state & integ_mask) : LfsrWidth'(timeout_i); + assign cnsty_cnt_set_val = (cnsty_set_period) ? (lfsr_state & cnsty_mask) : LfsrWidth'(timeout_i); + + // SEC_CM: TIMER_INTEG.CTR.REDUN + prim_count #( + .Width(LfsrWidth) + ) u_prim_count_integ ( + .clk_i, + .rst_ni, + .clr_i(1'b0), + .set_i(integ_cnt_set), + .set_cnt_i(integ_cnt_set_val), + .incr_en_i(1'b0), + .decr_en_i(!integ_cnt_zero), + .step_i(LfsrWidth'(1)), + .commit_i(1'b1), + .cnt_o(integ_cnt), + .cnt_after_commit_o(), + .err_o(integ_cnt_err) + ); + + // SEC_CM: TIMER_CNSTY.CTR.REDUN + prim_count #( + .Width(LfsrWidth) + ) u_prim_count_cnsty ( + .clk_i, + .rst_ni, + .clr_i(1'b0), + .set_i(cnsty_cnt_set), + .set_cnt_i(cnsty_cnt_set_val), + .incr_en_i(1'b0), + .decr_en_i(!cnsty_cnt_zero && !cnsty_cnt_pause), + .step_i(LfsrWidth'(1)), + .commit_i(1'b1), + .cnt_o(cnsty_cnt), + .cnt_after_commit_o(), + .err_o(cnsty_cnt_err) + ); + + ///////////////////// + // Request signals // + ///////////////////// + + logic set_all_integ_reqs, set_all_cnsty_reqs; + logic [NumPart-1:0] integ_chk_req_d, integ_chk_req_q; + logic [NumPart-1:0] cnsty_chk_req_d, cnsty_chk_req_q; + assign integ_chk_req_o = integ_chk_req_q; + assign cnsty_chk_req_o = cnsty_chk_req_q; + assign integ_chk_req_d = (set_all_integ_reqs) ? {NumPart{1'b1}} : + integ_chk_req_q & ~integ_chk_ack_i; + assign cnsty_chk_req_d = (set_all_cnsty_reqs) ? {NumPart{1'b1}} : + cnsty_chk_req_q & ~cnsty_chk_ack_i; + + + // external triggers + logic clr_integ_chk_trig, clr_cnsty_chk_trig; + logic integ_chk_trig_d, integ_chk_trig_q; + logic cnsty_chk_trig_d, cnsty_chk_trig_q; + assign integ_chk_trig_d = (integ_chk_trig_q & ~clr_integ_chk_trig) | integ_chk_trig_i; + assign cnsty_chk_trig_d = (cnsty_chk_trig_q & ~clr_cnsty_chk_trig) | cnsty_chk_trig_i; + + //////////////////////////// + // Ping and Timeout Logic // + //////////////////////////// + + // SEC_CM: TIMER.FSM.SPARSE + // Encoding generated with: + // $ ./util/design/sparse-fsm-encode.py -d 5 -m 5 -n 9 \ + // -s 628816752 --language=sv + // + // Hamming distance histogram: + // + // 0: -- + // 1: -- + // 2: -- + // 3: -- + // 4: -- + // 5: |||||||||||||||||||| (60.00%) + // 6: ||||||||||||| (40.00%) + // 7: -- + // 8: -- + // 9: -- + // + // Minimum Hamming distance: 5 + // Maximum Hamming distance: 6 + // Minimum Hamming weight: 4 + // Maximum Hamming weight: 6 + // + localparam int StateWidth = 9; + typedef enum logic [StateWidth-1:0] { + ResetSt = 9'b100100101, + IdleSt = 9'b001101110, + IntegWaitSt = 9'b010110011, + CnstyWaitSt = 9'b111010110, + ErrorSt = 9'b001011001 + } state_e; + + state_e state_d, state_q; + logic chk_timeout_d, chk_timeout_q; + + assign chk_timeout_o = chk_timeout_q; + + always_comb begin : p_fsm + state_d = state_q; + + // LFSR and counter signals + lfsr_en = 1'b0; + integ_set_period = 1'b0; + cnsty_set_period = 1'b0; + integ_set_timeout = 1'b0; + cnsty_set_timeout = 1'b0; + cnsty_cnt_pause = 1'b0; + + // Requests going to partitions. + set_all_integ_reqs = '0; + set_all_cnsty_reqs = '0; + + // Status signals going to CSRs and error logic. + chk_timeout_d = chk_timeout_q; + chk_pending_o = cnsty_chk_trig_q || integ_chk_trig_q; + fsm_err_o = 1'b0; + + // Clear signals for external triggers + clr_integ_chk_trig = 1'b0; + clr_cnsty_chk_trig = 1'b0; + + unique case (state_q) + /////////////////////////////////////////////////////////////////// + // Wait until enabled. We never return to this state + // once enabled! + ResetSt: begin + if (timer_en_i) begin + state_d = IdleSt; + lfsr_en = 1'b1; + end + end + /////////////////////////////////////////////////////////////////// + // Wait here until one of the two timers expires (if enabled) or if + // a check is triggered externally. + IdleSt: begin + if ((!integ_msk_zero && integ_cnt_zero) || integ_chk_trig_q) begin + state_d = IntegWaitSt; + integ_set_timeout = 1'b1; + set_all_integ_reqs = 1'b1; + clr_integ_chk_trig = integ_chk_trig_q; + end else if ((!cnsty_msk_zero && cnsty_cnt_zero) || cnsty_chk_trig_q) begin + state_d = CnstyWaitSt; + cnsty_set_timeout = 1'b1; + set_all_cnsty_reqs = 1'b1; + clr_cnsty_chk_trig = cnsty_chk_trig_q; + end + end + /////////////////////////////////////////////////////////////////// + // Wait for all the partitions to respond and go back to idle. + // If the timeout is enabled, bail out into terminal error state + // if the timeout counter expires (this will raise an alert). + IntegWaitSt: begin + chk_pending_o = 1'b1; + if (!timeout_zero && integ_cnt_zero) begin + state_d = ErrorSt; + chk_timeout_d = 1'b1; + end else if (integ_chk_req_q == '0) begin + state_d = IdleSt; + // This draws the next wait period. + integ_set_period = 1'b1; + lfsr_en = 1'b1; + end + end + /////////////////////////////////////////////////////////////////// + // Wait for all the partitions to respond and go back to idle. + // If the timeout is enabled, bail out into terminal error state + // if the timeout counter expires (this will raise an alert). + CnstyWaitSt: begin + chk_pending_o = 1'b1; + // Note that consistency checks go back and read from OTP. Hence, + // life cycle transitions and DAI programming operations + // may interfere with these checks and cause them to take longer + // than typically expected. Therefore, the timeout counter is stopped + // during programming operations. + cnsty_cnt_pause = otp_prog_busy_i; + if (!timeout_zero && cnsty_cnt_zero) begin + state_d = ErrorSt; + chk_timeout_d = 1'b1; + end else if (cnsty_chk_req_q == '0) begin + state_d = IdleSt; + // This draws the next wait period. + cnsty_set_period = 1'b1; + lfsr_en = 1'b1; + end + end + /////////////////////////////////////////////////////////////////// + // Terminal error state. This raises an alert. + ErrorSt: begin + // Continuously clear pending checks. + clr_integ_chk_trig = 1'b1; + clr_cnsty_chk_trig = 1'b1; + if (!chk_timeout_q) begin + fsm_err_o = 1'b1; + end + end + /////////////////////////////////////////////////////////////////// + // This should never happen, hence we directly jump into the + // error state, where an alert will be triggered. + default: begin + state_d = ErrorSt; + fsm_err_o = 1'b1; + end + /////////////////////////////////////////////////////////////////// + endcase // state_q + + // Unconditionally jump into the terminal error state in case of escalation, + // or if the two LFSR or counter states do not agree. + // SEC_CM: TIMER.FSM.LOCAL_ESC, TIMER.FSM.GLOBAL_ESC + if (lfsr_err || integ_cnt_err || cnsty_cnt_err || + lc_ctrl_pkg::lc_tx_test_true_loose(escalate_en_i)) begin + state_d = ErrorSt; + fsm_err_o = 1'b1; + end + end + + /////////////// + // Registers // + /////////////// + + `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, ResetSt) + + always_ff @(posedge clk_i or negedge rst_ni) begin : p_regs + if (!rst_ni) begin + integ_chk_req_q <= '0; + cnsty_chk_req_q <= '0; + chk_timeout_q <= 1'b0; + reseed_cnt_q <= '0; + integ_chk_trig_q <= 1'b0; + cnsty_chk_trig_q <= 1'b0; + end else begin + integ_chk_req_q <= integ_chk_req_d; + cnsty_chk_req_q <= cnsty_chk_req_d; + chk_timeout_q <= chk_timeout_d; + reseed_cnt_q <= reseed_cnt_d; + integ_chk_trig_q <= integ_chk_trig_d; + cnsty_chk_trig_q <= cnsty_chk_trig_d; + end + end + + //////////////// + // Assertions // + //////////////// + + `ASSERT_KNOWN(EdnReqKnown_A, edn_req_o) + `ASSERT_KNOWN(ChkPendingKnown_A, chk_pending_o) + `ASSERT_KNOWN(IntegChkReqKnown_A, integ_chk_req_o) + `ASSERT_KNOWN(CnstyChkReqKnown_A, cnsty_chk_req_o) + `ASSERT_KNOWN(ChkTimeoutKnown_A, chk_timeout_o) + +endmodule : otp_ctrl_lfsr_timer diff --git a/src/fuse_ctrl/rtl/otp_ctrl_part_buf.sv b/src/fuse_ctrl/rtl/otp_ctrl_part_buf.sv new file mode 100644 index 000000000..bcd348b71 --- /dev/null +++ b/src/fuse_ctrl/rtl/otp_ctrl_part_buf.sv @@ -0,0 +1,817 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Buffered partition for OTP controller. +// + +`include "prim_flop_macros.sv" + +module otp_ctrl_part_buf + import otp_ctrl_pkg::*; + import otp_ctrl_reg_pkg::*; + import otp_ctrl_part_pkg::*; +#( + // Partition information. + parameter part_info_t Info = PartInfoDefault, + parameter logic [Info.size*8-1:0] DataDefault = '0 +) ( + input clk_i, + input rst_ni, + // Pulse to start partition initialisation (required once per power cycle). + input init_req_i, + output logic init_done_o, + // Integrity check requests + input integ_chk_req_i, + output logic integ_chk_ack_o, + // Consistency check requests + input cnsty_chk_req_i, + output logic cnsty_chk_ack_o, + // Escalation input. This moves the FSM into a terminal state and locks down + // the partition. + input lc_ctrl_pkg::lc_tx_t escalate_en_i, + // Check bypass enable. This bypasses integrity and consistency checks and + // acknowledges all incoming check requests (only used by life cycle). + input lc_ctrl_pkg::lc_tx_t check_byp_en_i, + // Output error state of partition, to be consumed by OTP error/alert logic. + // Note that most errors are not recoverable and move the partition FSM into + // a terminal error state. + output otp_err_e error_o, + // This error signal is pulsed high if the FSM has been glitched into an invalid state. + // Although it is somewhat redundant with the error code in error_o above, it is + // meant to cover cases where we already latched an error code while the FSM is + // glitched into an invalid state (since in that case, the error code will not be + // overridden with the FSM error code so that the original error code is still + // discoverable). + output logic fsm_err_o, + // Access/lock status + // SEC_CM: ACCESS.CTRL.MUBI + input part_access_t access_i, // runtime lock from CSRs + output part_access_t access_o, + // Buffered 64bit digest output. + output logic [ScrmblBlockWidth-1:0] digest_o, + output logic [Info.size*8-1:0] data_o, + // OTP interface + output logic otp_req_o, + output prim_otp_pkg::cmd_e otp_cmd_o, + output logic [OtpSizeWidth-1:0] otp_size_o, + output logic [OtpIfWidth-1:0] otp_wdata_o, + output logic [OtpAddrWidth-1:0] otp_addr_o, + input otp_gnt_i, + input otp_rvalid_i, + input [ScrmblBlockWidth-1:0] otp_rdata_i, + input prim_otp_pkg::err_e otp_err_i, + // Scrambling mutex request + output logic scrmbl_mtx_req_o, + input scrmbl_mtx_gnt_i, + // Scrambling datapath interface + output otp_scrmbl_cmd_e scrmbl_cmd_o, + output digest_mode_e scrmbl_mode_o, + output logic [ConstSelWidth-1:0] scrmbl_sel_o, + output logic [ScrmblBlockWidth-1:0] scrmbl_data_o, + output logic scrmbl_valid_o, + input logic scrmbl_ready_i, + input logic scrmbl_valid_i, + input logic [ScrmblBlockWidth-1:0] scrmbl_data_i +); + + //////////////////////// + // Integration Checks // + //////////////////////// + + import prim_mubi_pkg::*; + import prim_util_pkg::vbits; + + localparam int unsigned DigestOffsetInt = (int'(Info.offset) + + int'(Info.size) - ScrmblBlockWidth/8); + localparam int NumScrmblBlocks = int'(Info.size) / (ScrmblBlockWidth/8); + localparam int CntWidth = vbits(NumScrmblBlocks); + + localparam bit [OtpByteAddrWidth-1:0] DigestOffset = DigestOffsetInt[OtpByteAddrWidth-1:0]; + + localparam int unsigned LastScrmblBlockInt = NumScrmblBlocks - 1; + localparam int unsigned PenultimateScrmblBlockInt = NumScrmblBlocks - 2; + localparam bit [CntWidth-1:0] LastScrmblBlock = LastScrmblBlockInt[CntWidth-1:0]; + localparam bit [CntWidth-1:0] PenultimateScrmblBlock = PenultimateScrmblBlockInt[CntWidth-1:0]; + + // Integration checks for parameters. + `ASSERT_INIT(OffsetMustBeBlockAligned_A, (Info.offset % (ScrmblBlockWidth/8)) == 0) + `ASSERT_INIT(SizeMustBeBlockAligned_A, (Info.size % (ScrmblBlockWidth/8)) == 0) + `ASSERT_INIT(DigestOffsetMustBeRepresentable_A, DigestOffsetInt == int'(DigestOffset)) + `ASSERT(ScrambledImpliesDigest_A, Info.secret |-> Info.hw_digest) + `ASSERT(WriteLockImpliesDigest_A, Info.read_lock |-> Info.hw_digest) + `ASSERT(ReadLockImpliesDigest_A, Info.write_lock |-> Info.hw_digest) + + // This feature is only supposed to be used with partitions that are not scrambled + // and that do not have a digest. + `ASSERT(BypassEnable0_A, Info.secret |-> lc_ctrl_pkg::lc_tx_test_false_strict(check_byp_en_i)) + `ASSERT(BypassEnable1_A, Info.hw_digest |-> lc_ctrl_pkg::lc_tx_test_false_strict(check_byp_en_i)) + + /////////////////////// + // OTP Partition FSM // + /////////////////////// + + // SEC_CM: PART.FSM.SPARSE + // Encoding generated with: + // $ ./util/design/sparse-fsm-encode.py -d 5 -m 16 -n 12 \ + // -s 3370657881 --language=sv + // + // Hamming distance histogram: + // + // 0: -- + // 1: -- + // 2: -- + // 3: -- + // 4: -- + // 5: |||||||||||||| (28.33%) + // 6: |||||||||||||||||||| (38.33%) + // 7: |||||||||| (19.17%) + // 8: ||| (5.83%) + // 9: || (4.17%) + // 10: | (2.50%) + // 11: (0.83%) + // 12: (0.83%) + // + // Minimum Hamming distance: 5 + // Maximum Hamming distance: 12 + // Minimum Hamming weight: 4 + // Maximum Hamming weight: 8 + // + localparam int StateWidth = 12; + typedef enum logic [StateWidth-1:0] { + ResetSt = 12'b011000001110, + InitSt = 12'b110100100111, + InitWaitSt = 12'b001110110001, + InitDescrSt = 12'b110010000100, + InitDescrWaitSt = 12'b100110101000, + IdleSt = 12'b010101001101, + IntegScrSt = 12'b110101011010, + IntegScrWaitSt = 12'b100010011111, + IntegDigClrSt = 12'b101001000001, + IntegDigSt = 12'b011101100010, + IntegDigPadSt = 12'b001101010111, + IntegDigFinSt = 12'b011011100101, + IntegDigWaitSt = 12'b100011110010, + CnstyReadSt = 12'b000001101011, + CnstyReadWaitSt = 12'b101001111100, + ErrorSt = 12'b010110111110 + } state_e; + + typedef enum logic { + ScrmblData, + OtpData + } data_sel_e; + + typedef enum logic { + PartOffset, + DigOffset + } base_sel_e; + + state_e state_d, state_q; + otp_err_e error_d, error_q; + data_sel_e data_sel; + base_sel_e base_sel; + mubi8_t dout_locked_d, dout_locked_q; + logic [CntWidth-1:0] cnt; + logic cnt_en, cnt_clr, cnt_err; + logic ecc_err; + logic buffer_reg_en; + logic [ScrmblBlockWidth-1:0] data_mux; + + // Output partition error state. + assign error_o = error_q; + + // This partition cannot do any write accesses, hence we tie this + // constantly off. + assign otp_wdata_o = '0; + // Depending on the partition configuration, the wrapper is instructed to ignore integrity + // calculations and checks. To be on the safe side, the partition filters error responses at this + // point and does not report any integrity errors if integrity is disabled. + otp_err_e otp_err; + if (Info.integrity) begin : gen_integrity + assign otp_cmd_o = prim_otp_pkg::Read; + assign otp_err = otp_err_e'(otp_err_i); + end else begin : gen_no_integrity + assign otp_cmd_o = prim_otp_pkg::ReadRaw; + always_comb begin + if (otp_err_e'(otp_err_i) inside {MacroEccCorrError, MacroEccUncorrError}) begin + otp_err = NoError; + end else begin + otp_err = otp_err_e'(otp_err_i); + end + end + end + + always_comb begin : p_fsm + state_d = state_q; + + // Redundantly encoded lock signal for buffer regs. + dout_locked_d = dout_locked_q; + + // OTP signals + otp_req_o = 1'b0; + + // Scrambling mutex + scrmbl_mtx_req_o = 1'b0; + + // Scrambling datapath + scrmbl_cmd_o = LoadShadow; + scrmbl_sel_o = CnstyDigest; + scrmbl_mode_o = StandardMode; + scrmbl_valid_o = 1'b0; + + // Counter + cnt_en = 1'b0; + cnt_clr = 1'b0; + base_sel = PartOffset; + + // Buffer register + buffer_reg_en = 1'b0; + data_sel = OtpData; + + // Error Register + error_d = error_q; + fsm_err_o = 1'b0; + + // Integrity/Consistency check responses + cnsty_chk_ack_o = 1'b0; + integ_chk_ack_o = 1'b0; + + unique case (state_q) + /////////////////////////////////////////////////////////////////// + // State right after reset. Wait here until we get a an + // initialization request. + ResetSt: begin + if (init_req_i) begin + state_d = InitSt; + end + end + /////////////////////////////////////////////////////////////////// + // Initialization reads out the digest only in unbuffered + // partitions. Wait here until the OTP request has been granted. + // And then wait until the OTP word comes back. + InitSt: begin + otp_req_o = 1'b1; + if (otp_gnt_i) begin + state_d = InitWaitSt; + end + end + /////////////////////////////////////////////////////////////////// + // Wait for OTP response and write to buffer register, then go to + // descrambling state. In case an OTP transaction fails, latch the + // OTP error code and jump to a + // terminal error state. + InitWaitSt: begin + if (otp_rvalid_i) begin + buffer_reg_en = 1'b1; + if (otp_err inside {NoError, MacroEccCorrError}) begin + // Once we've read and descrambled the whole partition, we can go to integrity + // verification. Note that the last block is the digest value, which does not + // have to be descrambled. + if (cnt == LastScrmblBlock) begin + state_d = IntegDigClrSt; + // Only need to descramble if this is a scrambled partition. + // Otherwise, we can just go back to InitSt and read the next block. + end else if (Info.secret) begin + state_d = InitDescrSt; + end else begin + state_d = InitSt; + cnt_en = 1'b1; + end + // At this point the only error that we could have gotten are correctable ECC errors. + if (otp_err != NoError) begin + error_d = MacroEccCorrError; + end + end else begin + state_d = ErrorSt; + error_d = otp_err; + end + end + end + /////////////////////////////////////////////////////////////////// + // Descrambling state. This first acquires the scrambling + // datapath mutex. Note that once the mutex is acquired, we have + // exclusive access to the scrambling datapath until we release + // the mutex by deasserting scrmbl_mtx_req_o. + // SEC_CM: SECRET.MEM.SCRAMBLE + InitDescrSt: begin + scrmbl_mtx_req_o = 1'b1; + scrmbl_valid_o = 1'b1; + scrmbl_cmd_o = Decrypt; + scrmbl_sel_o = Info.key_sel; + if (scrmbl_mtx_gnt_i && scrmbl_ready_i) begin + state_d = InitDescrWaitSt; + end + end + /////////////////////////////////////////////////////////////////// + // Wait for the descrambled data to return. Note that we release + // the mutex lock upon leaving this state. + // SEC_CM: SECRET.MEM.SCRAMBLE + InitDescrWaitSt: begin + scrmbl_mtx_req_o = 1'b1; + scrmbl_sel_o = Info.key_sel; + data_sel = ScrmblData; + if (scrmbl_valid_i) begin + state_d = InitSt; + buffer_reg_en = 1'b1; + cnt_en = 1'b1; + end + end + /////////////////////////////////////////////////////////////////// + // Idle state. We basically wait for integrity and consistency check + // triggers in this state. + IdleSt: begin + if (integ_chk_req_i) begin + if (Info.hw_digest) begin + state_d = IntegDigClrSt; + // In case there is nothing to check we can just + // acknowledge the request right away, without going to the + // integrity check. + end else begin + integ_chk_ack_o = 1'b1; + end + end else if (cnsty_chk_req_i) begin + state_d = CnstyReadSt; + cnt_clr = 1'b1; + end + end + /////////////////////////////////////////////////////////////////// + // Read the digest. Wait here until the OTP request has been granted. + // And then wait until the OTP word comes back. + // SEC_CM: PART.DATA_REG.BKGN_CHK + CnstyReadSt: begin + otp_req_o = 1'b1; + // In case this partition has a hardware digest, we only have to read + // and compare the digest value. In that case we select the digest offset here. + // Otherwise we have to read and compare the whole partition, in which case we + // select the partition offset, which is the default assignment of base_sel. + if (Info.hw_digest) begin + base_sel = DigOffset; + end + if (otp_gnt_i) begin + state_d = CnstyReadWaitSt; + end + end + /////////////////////////////////////////////////////////////////// + // Wait for OTP response and compare the digest. In case there is + // a mismatch, lock down the partition and go into the terminal error + // state. In case an OTP transaction fails, latch the OTP error code + // and jump to a terminal error state. + // SEC_CM: PART.DATA_REG.BKGN_CHK + CnstyReadWaitSt: begin + if (otp_rvalid_i) begin + if (otp_err inside {NoError, MacroEccCorrError}) begin + // Check whether we need to compare the digest or the full partition + // contents here. + if (Info.hw_digest) begin + // Note that we ignore this check if the digest is still blank. + if (digest_o == data_mux || digest_o == '0) begin + state_d = IdleSt; + cnsty_chk_ack_o = 1'b1; + // Error out and lock the partition if this check fails. + end else begin + state_d = ErrorSt; + error_d = CheckFailError; + // The check has finished and found an error. + cnsty_chk_ack_o = 1'b1; + end + end else begin + // Check whether the read data corresponds with the data buffered in regs. + // Note that this particular check can be bypassed in case a transition is ongoing. + if (scrmbl_data_o == data_mux || + lc_ctrl_pkg::lc_tx_test_true_strict(check_byp_en_i)) begin + // Can go back to idle and acknowledge the + // request if this is the last block. + if (cnt == LastScrmblBlock) begin + state_d = IdleSt; + cnsty_chk_ack_o = 1'b1; + // Need to go back and read out more blocks. + end else begin + state_d = CnstyReadSt; + cnt_en = 1'b1; + end + end else begin + state_d = ErrorSt; + error_d = CheckFailError; + // The check has finished and found an error. + cnsty_chk_ack_o = 1'b1; + end + end + // At this point the only error that we could have gotten are correctable ECC errors. + if (otp_err != NoError) begin + error_d = MacroEccCorrError; + end + end else begin + state_d = ErrorSt; + error_d = otp_err; + // The check has finished and found an error. + cnsty_chk_ack_o = 1'b1; + end + end + end + /////////////////////////////////////////////////////////////////// + // First, acquire the mutex for the digest and clear the digest state. + // SEC_CM: PART.DATA_REG.BKGN_CHK + IntegDigClrSt: begin + // Check whether this partition requires checking at all. + if (Info.hw_digest) begin + scrmbl_mtx_req_o = 1'b1; + scrmbl_valid_o = 1'b1; + cnt_clr = 1'b1; + // Need to reset the digest state and set it to chained + // mode if this partition is scrambled. + scrmbl_cmd_o = DigestInit; + if (Info.secret) begin + scrmbl_mode_o = ChainedMode; + if (scrmbl_mtx_gnt_i && scrmbl_ready_i) begin + state_d = IntegScrSt; + end + // If this partition is not scrambled, we can just directly + // jump to the digest state. + end else begin + scrmbl_mode_o = StandardMode; + if (scrmbl_mtx_gnt_i && scrmbl_ready_i) begin + state_d = IntegDigSt; + end + end + // Otherwise, if this partition is not digest protected, + // we can just go to idle, since there is nothing to check. + // Note that we do not come back to this state in case there is no + // digest, and hence it is safe to unlock the buffer regs at this point. + // This is the only way the buffer regs can get unlocked. + end else begin + state_d = IdleSt; + if (mubi8_test_true_strict(dout_locked_q)) begin + dout_locked_d = MuBi8False; + end + end + end + /////////////////////////////////////////////////////////////////// + // Scramble buffered data (which is held in plaintext form). + // This moves the previous scrambling result into the shadow reg + // for later use. + // SEC_CM: PART.DATA_REG.BKGN_CHK + IntegScrSt: begin + scrmbl_mtx_req_o = 1'b1; + scrmbl_valid_o = 1'b1; + scrmbl_cmd_o = Encrypt; + scrmbl_sel_o = Info.key_sel; + if (scrmbl_ready_i) begin + state_d = IntegScrWaitSt; + end + end + /////////////////////////////////////////////////////////////////// + // Wait for the scrambled data to return. + // SEC_CM: PART.DATA_REG.BKGN_CHK + IntegScrWaitSt: begin + scrmbl_mtx_req_o = 1'b1; + scrmbl_sel_o = Info.key_sel; + if (scrmbl_valid_i) begin + state_d = IntegDigSt; + end + end + /////////////////////////////////////////////////////////////////// + // Push the word read into the scrambling datapath. The last + // block is repeated in case the number blocks in this partition + // is odd. + // SEC_CM: PART.MEM.DIGEST + // SEC_CM: PART.DATA_REG.BKGN_CHK + IntegDigSt: begin + scrmbl_mtx_req_o = 1'b1; + scrmbl_valid_o = 1'b1; + if (scrmbl_ready_i) begin + cnt_en = 1'b1; + // No need to digest the digest value itself + if (cnt == PenultimateScrmblBlock) begin + // Note that the digest operates on 128bit blocks since the data is fed in via the + // PRESENT key input. Therefore, we only trigger a digest update on every second + // 64bit block that is pushed into the scrambling datapath. + if (cnt[0]) begin + scrmbl_cmd_o = Digest; + state_d = IntegDigFinSt; + end else begin + state_d = IntegDigPadSt; + cnt_en = 1'b0; + end + end else begin + // Trigger digest round in case this is the second block in a row. + if (cnt[0]) begin + scrmbl_cmd_o = Digest; + end + // Go back and scramble the next data block if this is + // a scrambled partition. Otherwise just stay here. + if (Info.secret) begin + state_d = IntegScrSt; + end + end + end + end + /////////////////////////////////////////////////////////////////// + // Padding state. When we get here, we've copied the last encryption + // result into the shadow register such that we've effectively + // repeated the last block twice in order to pad the data to 128bit. + // SEC_CM: PART.MEM.DIGEST + // SEC_CM: PART.DATA_REG.BKGN_CHK + IntegDigPadSt: begin + scrmbl_mtx_req_o = 1'b1; + scrmbl_valid_o = 1'b1; + scrmbl_cmd_o = Digest; + if (scrmbl_ready_i) begin + state_d = IntegDigFinSt; + end + end + /////////////////////////////////////////////////////////////////// + // Trigger digest finalization and go wait for the result. + // SEC_CM: PART.MEM.DIGEST + // SEC_CM: PART.DATA_REG.BKGN_CHK + IntegDigFinSt: begin + scrmbl_mtx_req_o = 1'b1; + scrmbl_valid_o = 1'b1; + scrmbl_cmd_o = DigestFinalize; + if (scrmbl_ready_i) begin + state_d = IntegDigWaitSt; + end + end + /////////////////////////////////////////////////////////////////// + // Wait for the digest to return, and double check whether the digest + // matches. If yes, unlock the partition. Otherwise, go into the terminal + // error state, where the partition will be locked down. + // SEC_CM: PART.MEM.DIGEST + // SEC_CM: PART.DATA_REG.BKGN_CHK + IntegDigWaitSt: begin + scrmbl_mtx_req_o = 1'b1; + data_sel = ScrmblData; + if (scrmbl_valid_i) begin + // This is the only way the buffer regs can get unlocked. + // Note that we ignore this check if the digest is still blank. + if (digest_o == data_mux || digest_o == '0) begin + state_d = IdleSt; + // If the partition is still locked, this is the first integrity check after + // initialization. This is the only way the buffer regs can get unlocked. + if (mubi8_test_true_strict(dout_locked_q)) begin + dout_locked_d = MuBi8False; + // Otherwise, this integrity check has requested by the LFSR timer, and we have + // to acknowledge its completion. + end else begin + integ_chk_ack_o = 1'b1; + end + // Error out and lock the partition if this check fails. + end else begin + state_d = ErrorSt; + error_d = CheckFailError; + // The check has finished and found an error. + integ_chk_ack_o = 1'b1; + end + end + end + /////////////////////////////////////////////////////////////////// + // Terminal Error State. This locks access to the partition. + // Make sure the partition signals an error state if no error + // code has been latched so far, and lock the buffer regs down. + ErrorSt: begin + dout_locked_d = MuBi8True; + if (error_q == NoError) begin + error_d = FsmStateError; + end + // If we are in error state, we cannot execute the checks anymore. + // Hence the acknowledgements are returned immediately. + cnsty_chk_ack_o = 1'b1; + integ_chk_ack_o = 1'b1; + end + /////////////////////////////////////////////////////////////////// + // We should never get here. If we do (e.g. via a malicious + // glitch), error out immediately. + default: begin + state_d = ErrorSt; + fsm_err_o = 1'b1; + end + /////////////////////////////////////////////////////////////////// + endcase // state_q + + + // Unconditionally jump into the terminal error state in case of + // an ECC error or escalation, and lock access to the partition down. + // SEC_CM: PART.FSM.LOCAL_ESC + if (ecc_err) begin + state_d = ErrorSt; + if (state_q != ErrorSt) begin + error_d = CheckFailError; + end + end + // SEC_CM: PART.FSM.LOCAL_ESC, PART.FSM.GLOBAL_ESC + if (lc_ctrl_pkg::lc_tx_test_true_loose(escalate_en_i) || cnt_err) begin + state_d = ErrorSt; + fsm_err_o = 1'b1; + if (state_q != ErrorSt) begin + error_d = FsmStateError; + end + end + end + + //////////////////////////// + // Address Calc and Muxes // + //////////////////////////// + + // Address counter - this is only used for computing a digest, hence the increment is + // fixed to 8 byte. + // SEC_CM: PART.CTR.REDUN + prim_count #( + .Width(CntWidth) + ) u_prim_count ( + .clk_i, + .rst_ni, + .clr_i(cnt_clr), + .set_i(1'b0), + .set_cnt_i('0), + .incr_en_i(cnt_en), + .decr_en_i(1'b0), + .step_i(CntWidth'(1)), + .commit_i(1'b1), + .cnt_o(cnt), + .cnt_after_commit_o(), + .err_o(cnt_err) + ); + + logic [OtpByteAddrWidth-1:0] addr_base; + assign addr_base = (base_sel == DigOffset) ? DigestOffset : Info.offset; + + // Note that OTP works on halfword (16bit) addresses, hence need to + // shift the addresses appropriately. + logic [OtpByteAddrWidth-1:0] addr_calc; + assign addr_calc = OtpByteAddrWidth'({cnt, {$clog2(ScrmblBlockWidth/8){1'b0}}}) + addr_base; + assign otp_addr_o = addr_calc[OtpByteAddrWidth-1:OtpAddrShift]; + + if (OtpAddrShift > 0) begin : gen_unused + logic unused_bits; + assign unused_bits = ^addr_calc[OtpAddrShift-1:0]; + end + + // Always transfer 64bit blocks. + assign otp_size_o = OtpSizeWidth'(unsigned'(ScrmblBlockWidth / OtpWidth) - 1); + + assign data_mux = (data_sel == ScrmblData) ? scrmbl_data_i : otp_rdata_i; + + ///////////////// + // Buffer Regs // + ///////////////// + + // SEC_CM: PART.DATA_REG.INTEGRITY + logic [Info.size*8-1:0] data; + otp_ctrl_ecc_reg #( + .Width ( ScrmblBlockWidth ), + .Depth ( NumScrmblBlocks ) + ) u_otp_ctrl_ecc_reg ( + .clk_i, + .rst_ni, + .wren_i ( buffer_reg_en ), + .addr_i ( cnt ), + .wdata_i ( data_mux ), + .rdata_o ( scrmbl_data_o ), + .data_o ( data ), + .ecc_err_o ( ecc_err ) + ); + + // We have successfully initialized the partition once it has been unlocked. + assign init_done_o = mubi8_test_false_strict(dout_locked_q); + // Hardware output gating. + // Note that this is decoupled from the DAI access rules further below. + assign data_o = (init_done_o) ? data : DataDefault; + // The digest does not have to be gated. + assign digest_o = data[$high(data_o) -: ScrmblBlockWidth]; + + //////////////////////// + // DAI Access Control // + //////////////////////// + + // Aggregate all possible DAI write /readlocks. The partition is also locked when uninitialized. + // Note that the locks are redundantly encoded values. + part_access_t access_pre; + prim_mubi8_sender #( + .AsyncOn(0) + ) u_prim_mubi8_sender_write_lock_pre ( + .clk_i, + .rst_ni, + .mubi_i(mubi8_and_lo(dout_locked_q, access_i.write_lock)), + .mubi_o(access_pre.write_lock) + ); + prim_mubi8_sender #( + .AsyncOn(0) + ) u_prim_mubi8_sender_read_lock_pre ( + .clk_i, + .rst_ni, + .mubi_i(mubi8_and_lo(dout_locked_q, access_i.read_lock)), + .mubi_o(access_pre.read_lock) + ); + + // SEC_CM: PART.MEM.SW_UNWRITABLE + if (Info.write_lock) begin : gen_digest_write_lock + mubi8_t digest_locked; + assign digest_locked = (digest_o != '0) ? MuBi8True : MuBi8False; + + // This prevents the synthesis tool from optimizing the multibit signal. + prim_mubi8_sender #( + .AsyncOn(0) + ) u_prim_mubi8_sender_write_lock ( + .clk_i, + .rst_ni, + .mubi_i(mubi8_and_lo(access_pre.write_lock, digest_locked)), + .mubi_o(access_o.write_lock) + ); + + `ASSERT(DigestWriteLocksPartition_A, digest_o |-> mubi8_test_true_loose(access_o.write_lock)) + end else begin : gen_no_digest_write_lock + assign access_o.write_lock = access_pre.write_lock; + end + + // SEC_CM: PART.MEM.SW_UNREADABLE + if (Info.read_lock) begin : gen_digest_read_lock + mubi8_t digest_locked; + assign digest_locked = (digest_o != '0) ? MuBi8True : MuBi8False; + + // This prevents the synthesis tool from optimizing the multibit signal. + prim_mubi8_sender #( + .AsyncOn(0) + ) u_prim_mubi8_sender_read_lock ( + .clk_i, + .rst_ni, + .mubi_i(mubi8_and_lo(access_pre.read_lock, digest_locked)), + .mubi_o(access_o.read_lock) + ); + + `ASSERT(DigestReadLocksPartition_A, digest_o |-> mubi8_test_true_loose(access_o.read_lock)) + end else begin : gen_no_digest_read_lock + assign access_o.read_lock = access_pre.read_lock; + end + + /////////////// + // Registers // + /////////////// + + `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, ResetSt) + + always_ff @(posedge clk_i or negedge rst_ni) begin : p_regs + if (!rst_ni) begin + error_q <= NoError; + // data output is locked by default + dout_locked_q <= MuBi8True; + end else begin + error_q <= error_d; + dout_locked_q <= dout_locked_d; + end + end + + //////////////// + // Assertions // + //////////////// + + // Known assertions + `ASSERT_KNOWN(InitDoneKnown_A, init_done_o) + `ASSERT_KNOWN(IntegChkAckKnown_A, integ_chk_ack_o) + `ASSERT_KNOWN(CnstyChkAckKnown_A, cnsty_chk_ack_o) + `ASSERT_KNOWN(ErrorKnown_A, error_o) + `ASSERT_KNOWN(AccessKnown_A, access_o) + `ASSERT_KNOWN(DigestKnown_A, digest_o) + `ASSERT_KNOWN(DataKnown_A, data_o) + `ASSERT_KNOWN(OtpReqKnown_A, otp_req_o) + `ASSERT_KNOWN(OtpCmdKnown_A, otp_cmd_o) + `ASSERT_KNOWN(OtpSizeKnown_A, otp_size_o) + `ASSERT_KNOWN(OtpWdataKnown_A, otp_wdata_o) + `ASSERT_KNOWN(OtpAddrKnown_A, otp_addr_o) + `ASSERT_KNOWN(ScrmblMtxReqKnown_A, scrmbl_mtx_req_o) + `ASSERT_KNOWN(ScrmblCmdKnown_A, scrmbl_cmd_o) + `ASSERT_KNOWN(ScrmblModeKnown_A, scrmbl_mode_o) + `ASSERT_KNOWN(ScrmblSelKnown_A, scrmbl_sel_o) + `ASSERT_KNOWN(ScrmblDataKnown_A, scrmbl_data_o) + `ASSERT_KNOWN(ScrmblValidKnown_A, scrmbl_valid_o) + + // Uninitialized partitions should always be locked, no matter what. + `ASSERT(InitWriteLocksPartition_A, + mubi8_test_true_loose(dout_locked_q) + |-> + mubi8_test_true_loose(access_o.write_lock)) + `ASSERT(InitReadLocksPartition_A, + mubi8_test_true_loose(dout_locked_q) + |-> + mubi8_test_true_loose(access_o.read_lock)) + // Incoming Lock propagation + `ASSERT(WriteLockPropagation_A, + mubi8_test_true_loose(access_i.write_lock) + |-> + mubi8_test_true_loose(access_o.write_lock)) + `ASSERT(ReadLockPropagation_A, + mubi8_test_true_loose(access_i.read_lock) + |-> + mubi8_test_true_loose(access_o.read_lock)) + // ECC error in buffer regs + `ASSERT(EccErrorState_A, + ecc_err + |=> + state_q == ErrorSt) + // OTP error response + `ASSERT(OtpErrorState_A, + state_q inside {InitWaitSt, CnstyReadWaitSt} && otp_rvalid_i && + !(otp_err inside {NoError, MacroEccCorrError}) && !ecc_err + |=> + state_q == ErrorSt && error_o == $past(otp_err)) + +endmodule : otp_ctrl_part_buf diff --git a/src/fuse_ctrl/rtl/otp_ctrl_part_pkg.sv b/src/fuse_ctrl/rtl/otp_ctrl_part_pkg.sv new file mode 100755 index 000000000..ebc376735 --- /dev/null +++ b/src/fuse_ctrl/rtl/otp_ctrl_part_pkg.sv @@ -0,0 +1,382 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Package partition metadata. +// +// DO NOT EDIT THIS FILE DIRECTLY. +// It has been generated with ./util/design/gen-otp-mmap.py + +package otp_ctrl_part_pkg; + + import prim_util_pkg::vbits; + import otp_ctrl_reg_pkg::*; + import otp_ctrl_pkg::*; + + //////////////////////////////////// + // Scrambling Constants and Types // + //////////////////////////////////// + + parameter int NumScrmblKeys = 3; + parameter int NumDigestSets = 4; + + parameter int ScrmblKeySelWidth = vbits(NumScrmblKeys); + parameter int DigestSetSelWidth = vbits(NumDigestSets); + parameter int ConstSelWidth = (ScrmblKeySelWidth > DigestSetSelWidth) ? + ScrmblKeySelWidth : + DigestSetSelWidth; + + typedef enum logic [ConstSelWidth-1:0] { + StandardMode, + ChainedMode + } digest_mode_e; + + typedef logic [NumScrmblKeys-1:0][ScrmblKeyWidth-1:0] key_array_t; + typedef logic [NumDigestSets-1:0][ScrmblKeyWidth-1:0] digest_const_array_t; + typedef logic [NumDigestSets-1:0][ScrmblBlockWidth-1:0] digest_iv_array_t; + + typedef enum logic [ConstSelWidth-1:0] { + Secret0Key, + Secret1Key, + Secret2Key + } key_sel_e; + + typedef enum logic [ConstSelWidth-1:0] { + CnstyDigest, + FlashDataKey, + FlashAddrKey, + SramDataKey + } digest_sel_e; + + // SEC_CM: SECRET.MEM.SCRAMBLE + parameter key_array_t RndCnstKey = { + 128'h85A9E830BC059BA9286D6E2856A05CC3, + 128'hEFFA6D736C5EFF49AE7B70F9C46E5A62, + 128'h3BA121C5E097DDEB7768B4C666E9C3DA + }; + + // SEC_CM: PART.MEM.DIGEST + // Note: digest set 0 is used for computing the partition digests. Constants at + // higher indices are used to compute the scrambling keys. + parameter digest_const_array_t RndCnstDigestConst = { + 128'h4A22D4B78FE0266FBEE3958332F2939B, + 128'hD60822E1FAEC5C7290C7F21F6224F027, + 128'h277195FC471E4B26B6641214B61D1B43, + 128'hE95F517CB98955B4D5A89AA9109294A + }; + + parameter digest_iv_array_t RndCnstDigestIV = { + 64'hF98C48B1F9377284, + 64'hB7474D640F8A7F5, + 64'hE048B657396B4B83, + 64'hBEAD91D5FA4E0915 + }; + + + ///////////////////////////////////// + // Typedefs for Partition Metadata // + ///////////////////////////////////// + + typedef enum logic [1:0] { + Unbuffered, + Buffered, + LifeCycle + } part_variant_e; + + typedef struct packed { + part_variant_e variant; + // Offset and size within the OTP array, in Bytes. + logic [OtpByteAddrWidth-1:0] offset; + logic [OtpByteAddrWidth-1:0] size; + // Key index to use for scrambling. + key_sel_e key_sel; + // Attributes + logic secret; // Whether the partition is secret (and hence scrambled) + logic sw_digest; // Whether the partition has a software digest + logic hw_digest; // Whether the partition has a hardware digest + logic write_lock; // Whether the partition is write lockable (via digest) + logic read_lock; // Whether the partition is read lockable (via digest) + logic integrity; // Whether the partition is integrity protected + logic iskeymgr_creator; // Whether the partition has any creator key material + logic iskeymgr_owner; // Whether the partition has any owner key material + } part_info_t; + + parameter part_info_t PartInfoDefault = '{ + variant: Unbuffered, + offset: '0, + size: OtpByteAddrWidth'('hFF), + key_sel: key_sel_e'('0), + secret: 1'b0, + sw_digest: 1'b0, + hw_digest: 1'b0, + write_lock: 1'b0, + read_lock: 1'b0, + integrity: 1'b0, + iskeymgr_creator: 1'b0, + iskeymgr_owner: 1'b0 + }; + + //////////////////////// + // Partition Metadata // + //////////////////////// + + localparam part_info_t PartInfo [NumPart] = '{ + // VENDOR_TEST + '{ + variant: Unbuffered, + offset: 12'd0, + size: 64, + key_sel: key_sel_e'('0), + secret: 1'b0, + sw_digest: 1'b1, + hw_digest: 1'b0, + write_lock: 1'b1, + read_lock: 1'b0, + integrity: 1'b0, + iskeymgr_creator: 1'b0, + iskeymgr_owner: 1'b0 + }, + // NON_SECRET_FUSES + '{ + variant: Unbuffered, + offset: 12'd64, + size: 3792, + key_sel: key_sel_e'('0), + secret: 1'b0, + sw_digest: 1'b1, + hw_digest: 1'b0, + write_lock: 1'b1, + read_lock: 1'b0, + integrity: 1'b1, + iskeymgr_creator: 1'b0, + iskeymgr_owner: 1'b0 + }, + // SECRET0 + '{ + variant: Buffered, + offset: 12'd3856, + size: 56, + key_sel: Secret0Key, + secret: 1'b1, + sw_digest: 1'b0, + hw_digest: 1'b1, + write_lock: 1'b1, + read_lock: 1'b1, + integrity: 1'b1, + iskeymgr_creator: 1'b0, + iskeymgr_owner: 1'b0 + }, + // SECRET1 + '{ + variant: Buffered, + offset: 12'd3912, + size: 40, + key_sel: Secret1Key, + secret: 1'b1, + sw_digest: 1'b0, + hw_digest: 1'b1, + write_lock: 1'b1, + read_lock: 1'b1, + integrity: 1'b1, + iskeymgr_creator: 1'b0, + iskeymgr_owner: 1'b0 + }, + // SECRET2 + '{ + variant: Buffered, + offset: 12'd3952, + size: 56, + key_sel: Secret2Key, + secret: 1'b1, + sw_digest: 1'b0, + hw_digest: 1'b1, + write_lock: 1'b1, + read_lock: 1'b1, + integrity: 1'b1, + iskeymgr_creator: 1'b0, + iskeymgr_owner: 1'b0 + }, + // LIFE_CYCLE + '{ + variant: LifeCycle, + offset: 12'd4008, + size: 88, + key_sel: key_sel_e'('0), + secret: 1'b0, + sw_digest: 1'b0, + hw_digest: 1'b0, + write_lock: 1'b0, + read_lock: 1'b0, + integrity: 1'b1, + iskeymgr_creator: 1'b0, + iskeymgr_owner: 1'b0 + } + }; + + typedef enum { + VendorTestIdx, + NonSecretFusesIdx, + Secret0Idx, + Secret1Idx, + Secret2Idx, + LifeCycleIdx, + // These are not "real partitions", but in terms of implementation it is convenient to + // add these at the end of certain arrays. + DaiIdx, + LciIdx, + KdiIdx, + // Number of agents is the last idx+1. + NumAgentsIdx + } part_idx_e; + + parameter int NumAgents = int'(NumAgentsIdx); + + // Breakout types for easier access of individual items. + typedef struct packed { + // This reuses the same encoding as the life cycle signals for indicating valid status. + lc_ctrl_pkg::lc_tx_t valid; + } otp_broadcast_t; + + // default value for intermodule + parameter otp_broadcast_t OTP_BROADCAST_DEFAULT = '{ + valid: lc_ctrl_pkg::Off, + }; + + + // OTP invalid partition default for buffered partitions. + parameter logic [32767:0] PartInvDefault = 32768'({ + 704'({ + 320'h55D0320379A0D260426D99D374E699CAE00E9680BD9B70291C752824C7DDC89694CD3DED94B57819, + 384'hDBC827839FE2DCC27E17D06B5D4E0DDDDBB9844327F20FB5D396D1CE085BDC31105733EAA3880C5A234729143F97B62A + }), + 448'({ + 64'hD3D58610F4851667, + 384'h0 + }), + 320'({ + 64'h5E58D0AA97A0F8F6, + 256'h0 + }), + 448'({ + 64'h2C0DBDDEDF7A854D, + 384'h0 + }), + 30336'({ + 64'hD0BAC511D08ECE0E, + 28704'h0, // unallocated space + 32'h0, + 128'h0, + 768'h63B9485A3856C417CF7A50A9A91EF7F7B3A5B4421F462370FFF698183664DC7EDF3888886BD10DC67ABB319BDA0529AE40119A3C6E63CDF358840E458E4029A6B5AC1F53D00A08C3B28B5C0FEE5F4C02711D135F59A50322B6711DB6F5D40A37, + 384'h0, + 32'h0, + 32'h0, + 32'h0, + 128'h0, + 32'h0 + }), + 512'({ + 64'h2A4D8B51F5D41C8A, + 448'h0 + })}); + + /////////////////////////////////////////////// + // Parameterized Assignment Helper Functions // + /////////////////////////////////////////////// + + function automatic otp_ctrl_core_hw2reg_t named_reg_assign( + logic [NumPart-1:0][ScrmblBlockWidth-1:0] part_digest); + otp_ctrl_core_hw2reg_t hw2reg; + logic unused_sigs; + unused_sigs = ^part_digest; + hw2reg = '0; + hw2reg.vendor_test_digest = part_digest[VendorTestIdx]; + hw2reg.non_secret_fuses_digest = part_digest[NonSecretFusesIdx]; + hw2reg.secret0_digest = part_digest[Secret0Idx]; + hw2reg.secret1_digest = part_digest[Secret1Idx]; + hw2reg.secret2_digest = part_digest[Secret2Idx]; + return hw2reg; + endfunction : named_reg_assign + + function automatic part_access_t [NumPart-1:0] named_part_access_pre( + otp_ctrl_core_reg2hw_t reg2hw); + part_access_t [NumPart-1:0] part_access_pre; + logic unused_sigs; + unused_sigs = ^reg2hw; + // Default (this will be overridden by partition-internal settings). + part_access_pre = {{32'(2*NumPart)}{prim_mubi_pkg::MuBi8False}}; + // Note: these could be made a MuBi CSRs in the future. + // The main thing that is missing right now is proper support for W0C. + // VENDOR_TEST + if (!reg2hw.vendor_test_read_lock) begin + part_access_pre[VendorTestIdx].read_lock = prim_mubi_pkg::MuBi8True; + end + // NON_SECRET_FUSES + if (!reg2hw.non_secret_fuses_read_lock) begin + part_access_pre[NonSecretFusesIdx].read_lock = prim_mubi_pkg::MuBi8True; + end + return part_access_pre; + endfunction : named_part_access_pre + + function automatic otp_broadcast_t named_broadcast_assign( + logic [NumPart-1:0] part_init_done, + logic [$bits(PartInvDefault)/8-1:0][7:0] part_buf_data); + otp_broadcast_t otp_broadcast; + logic valid, unused; + unused = 1'b0; + valid = 1'b1; + // VENDOR_TEST + unused ^= ^{part_init_done[VendorTestIdx], + part_buf_data[VendorTestOffset +: VendorTestSize]}; + // NON_SECRET_FUSES + unused ^= ^{part_init_done[NonSecretFusesIdx], + part_buf_data[NonSecretFusesOffset +: NonSecretFusesSize]}; + // SECRET0 + unused ^= ^{part_init_done[Secret0Idx], + part_buf_data[Secret0Offset +: Secret0Size]}; + // SECRET1 + unused ^= ^{part_init_done[Secret1Idx], + part_buf_data[Secret1Offset +: Secret1Size]}; + // SECRET2 + unused ^= ^{part_init_done[Secret2Idx], + part_buf_data[Secret2Offset +: Secret2Size]}; + // LIFE_CYCLE + unused ^= ^{part_init_done[LifeCycleIdx], + part_buf_data[LifeCycleOffset +: LifeCycleSize]}; + otp_broadcast.valid = lc_ctrl_pkg::lc_tx_bool_to_lc_tx(valid); + return otp_broadcast; + endfunction : named_broadcast_assign + + function automatic otp_keymgr_key_t named_keymgr_key_assign( + logic [NumPart-1:0][ScrmblBlockWidth-1:0] part_digest, + logic [$bits(PartInvDefault)/8-1:0][7:0] part_buf_data, + lc_ctrl_pkg::lc_tx_t lc_seed_hw_rd_en); + otp_keymgr_key_t otp_keymgr_key; + logic valid, unused; + unused = 1'b0; + // For now we use a fixed struct type here so that the + // interface to the keymgr remains stable. The type contains + // a superset of all options, so we have to initialize it to '0 here. + otp_keymgr_key = '0; + // VENDOR_TEST + unused ^= ^{part_digest[VendorTestIdx], + part_buf_data[VendorTestOffset +: VendorTestSize]}; + // NON_SECRET_FUSES + unused ^= ^{part_digest[NonSecretFusesIdx], + part_buf_data[NonSecretFusesOffset +: NonSecretFusesSize]}; + // SECRET0 + unused ^= ^{part_digest[Secret0Idx], + part_buf_data[Secret0Offset +: Secret0Size]}; + // SECRET1 + unused ^= ^{part_digest[Secret1Idx], + part_buf_data[Secret1Offset +: Secret1Size]}; + // SECRET2 + unused ^= ^{part_digest[Secret2Idx], + part_buf_data[Secret2Offset +: Secret2Size]}; + // LIFE_CYCLE + unused ^= ^{part_digest[LifeCycleIdx], + part_buf_data[LifeCycleOffset +: LifeCycleSize]}; + unused ^= valid; + return otp_keymgr_key; + endfunction : named_keymgr_key_assign + +endpackage : otp_ctrl_part_pkg diff --git a/src/fuse_ctrl/rtl/otp_ctrl_part_unbuf.sv b/src/fuse_ctrl/rtl/otp_ctrl_part_unbuf.sv new file mode 100644 index 000000000..23cf3171b --- /dev/null +++ b/src/fuse_ctrl/rtl/otp_ctrl_part_unbuf.sv @@ -0,0 +1,531 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Unbuffered partition for OTP controller. +// + +`include "prim_flop_macros.sv" + +module otp_ctrl_part_unbuf + import otp_ctrl_pkg::*; + import otp_ctrl_reg_pkg::*; + import otp_ctrl_part_pkg::*; +#( + // Partition information. + parameter part_info_t Info = PartInfoDefault +) ( + input clk_i, + input rst_ni, + // Pulse to start partition initialisation (required once per power cycle). + input init_req_i, + output logic init_done_o, + // Escalation input. This moves the FSM into a terminal state and locks down + // the partition. + input lc_ctrl_pkg::lc_tx_t escalate_en_i, + // Output error state of partition, to be consumed by OTP error/alert logic. + // Note that most errors are not recoverable and move the partition FSM into + // a terminal error state. + output otp_err_e error_o, + // This error signal is pulsed high if the FSM has been glitched into an invalid state. + // Although it is somewhat redundant with the error code in error_o above, it is + // meant to cover cases where we already latched an error code while the FSM is + // glitched into an invalid state (since in that case, the error code will not be + // overridden with the FSM error code so that the original error code is still + // discoverable). + output logic fsm_err_o, + // Access/lock status + // SEC_CM: ACCESS.CTRL.MUBI + input part_access_t access_i, // runtime lock from CSRs + output part_access_t access_o, + // Buffered 64bit digest output. + output logic [ScrmblBlockWidth-1:0] digest_o, + // Interface to TL-UL adapter + input logic tlul_req_i, + output logic tlul_gnt_o, + input [SwWindowAddrWidth-1:0] tlul_addr_i, + output logic [1:0] tlul_rerror_o, + output logic tlul_rvalid_o, + output logic [31:0] tlul_rdata_o, + // OTP interface + output logic otp_req_o, + output prim_otp_pkg::cmd_e otp_cmd_o, + output logic [OtpSizeWidth-1:0] otp_size_o, + output logic [OtpIfWidth-1:0] otp_wdata_o, + output logic [OtpAddrWidth-1:0] otp_addr_o, + input otp_gnt_i, + input otp_rvalid_i, + input [ScrmblBlockWidth-1:0] otp_rdata_i, + input prim_otp_pkg::err_e otp_err_i +); + + //////////////////////// + // Integration Checks // + //////////////////////// + + import prim_mubi_pkg::*; + import prim_util_pkg::vbits; + + localparam logic [OtpByteAddrWidth:0] PartEnd = (OtpByteAddrWidth+1)'(Info.offset) + + (OtpByteAddrWidth+1)'(Info.size); + localparam int unsigned DigestOffsetInt = int'(PartEnd) - ScrmblBlockWidth/8; + + localparam bit [OtpByteAddrWidth-1:0] DigestOffset = DigestOffsetInt[OtpByteAddrWidth-1:0]; + + // Integration checks for parameters. + `ASSERT_INIT(OffsetMustBeBlockAligned_A, (Info.offset % (ScrmblBlockWidth/8)) == 0) + `ASSERT_INIT(SizeMustBeBlockAligned_A, (Info.size % (ScrmblBlockWidth/8)) == 0) + `ASSERT_INIT(DigestOffsetMustBeRepresentable_A, DigestOffsetInt == int'(DigestOffset)) + + /////////////////////// + // OTP Partition FSM // + /////////////////////// + + // SEC_CM: PART.FSM.SPARSE + // Encoding generated with: + // $ ./util/design/sparse-fsm-encode.py -d 5 -m 7 -n 10 \ + // -s 4247417884 --language=sv + // + // Hamming distance histogram: + // + // 0: -- + // 1: -- + // 2: -- + // 3: -- + // 4: -- + // 5: |||||||||||||||||||| (52.38%) + // 6: |||||||||||| (33.33%) + // 7: | (4.76%) + // 8: ||| (9.52%) + // 9: -- + // 10: -- + // + // Minimum Hamming distance: 5 + // Maximum Hamming distance: 8 + // Minimum Hamming weight: 3 + // Maximum Hamming weight: 9 + // + localparam int StateWidth = 10; + typedef enum logic [StateWidth-1:0] { + ResetSt = 10'b1010110110, + InitSt = 10'b0100010011, + InitWaitSt = 10'b0001011000, + IdleSt = 10'b1011101001, + ReadSt = 10'b0101101110, + ReadWaitSt = 10'b0110100101, + ErrorSt = 10'b1111011111 + } state_e; + + typedef enum logic { + DigestAddrSel = 1'b0, + DataAddrSel = 1'b1 + } addr_sel_e; + + state_e state_d, state_q; + addr_sel_e otp_addr_sel; + otp_err_e error_d, error_q; + + logic digest_reg_en; + logic ecc_err; + + logic tlul_addr_in_range; + logic [SwWindowAddrWidth-1:0] tlul_addr_d, tlul_addr_q; + + // This is only used to return bus errors when the FSM is in ErrorSt. + logic pending_tlul_error_d, pending_tlul_error_q; + + // Output partition error state. + assign error_o = error_q; + + // This partition cannot do any write accesses, hence we tie this + // constantly off. + assign otp_wdata_o = '0; + // Depending on the partition configuration, the wrapper is instructed to ignore integrity + // calculations and checks. To be on the safe side, the partition filters error responses at this + // point and does not report any integrity errors if integrity is disabled. + otp_err_e otp_err; + if (Info.integrity) begin : gen_integrity + assign otp_cmd_o = prim_otp_pkg::Read; + assign otp_err = otp_err_e'(otp_err_i); + end else begin : gen_no_integrity + assign otp_cmd_o = prim_otp_pkg::ReadRaw; + always_comb begin + if (otp_err_e'(otp_err_i) inside {MacroEccCorrError, MacroEccUncorrError}) begin + otp_err = NoError; + end else begin + otp_err = otp_err_e'(otp_err_i); + end + end + end + + `ASSERT_KNOWN(FsmStateKnown_A, state_q) + always_comb begin : p_fsm + // Default assignments + state_d = state_q; + + // Response to init request + init_done_o = 1'b0; + + // OTP signals + otp_req_o = 1'b0; + otp_addr_sel = DigestAddrSel; + + // TL-UL signals + tlul_gnt_o = 1'b0; + tlul_rvalid_o = 1'b0; + tlul_rerror_o = '0; + + // Enable for buffered digest register + digest_reg_en = 1'b0; + + // Error Register + error_d = error_q; + pending_tlul_error_d = 1'b0; + fsm_err_o = 1'b0; + + unique case (state_q) + /////////////////////////////////////////////////////////////////// + // State right after reset. Wait here until we get a an + // initialization request. + ResetSt: begin + if (init_req_i) begin + // If the partition does not have a digest, no initialization is necessary. + if (Info.sw_digest) begin + state_d = InitSt; + end else begin + state_d = IdleSt; + end + end + end + /////////////////////////////////////////////////////////////////// + // Initialization reads out the digest only in unbuffered + // partitions. Wait here until the OTP request has been granted. + // And then wait until the OTP word comes back. + InitSt: begin + otp_req_o = 1'b1; + if (otp_gnt_i) begin + state_d = InitWaitSt; + end + end + /////////////////////////////////////////////////////////////////// + // Wait for OTP response and write to digest buffer register. In + // case an OTP transaction fails, latch the OTP error code and + // jump to a terminal error state. + InitWaitSt: begin + if (otp_rvalid_i) begin + digest_reg_en = 1'b1; + if (otp_err inside {NoError, MacroEccCorrError}) begin + state_d = IdleSt; + // At this point the only error that we could have gotten are correctable ECC errors. + if (otp_err != NoError) begin + error_d = MacroEccCorrError; + end + end else begin + state_d = ErrorSt; + error_d = otp_err; + end + end + end + /////////////////////////////////////////////////////////////////// + // Wait for TL-UL requests coming in. + // Then latch address and go to readout state. + IdleSt: begin + init_done_o = 1'b1; + if (tlul_req_i) begin + error_d = NoError; // clear recoverable soft errors. + state_d = ReadSt; + tlul_gnt_o = 1'b1; + end + end + /////////////////////////////////////////////////////////////////// + // If the address is out of bounds, or if the partition is + // locked, signal back a bus error. Note that such an error does + // not cause the partition to go into error state. Otherwise if + // these checks pass, an OTP word is requested. + ReadSt: begin + init_done_o = 1'b1; + // Double check the address range. + if (tlul_addr_in_range && mubi8_test_false_strict(access_o.read_lock)) begin + otp_req_o = 1'b1; + otp_addr_sel = DataAddrSel; + if (otp_gnt_i) begin + state_d = ReadWaitSt; + end + end else begin + state_d = IdleSt; + error_d = AccessError; // Signal this error, but do not go into terminal error state. + tlul_rvalid_o = 1'b1; + tlul_rerror_o = 2'b11; // This causes the TL-UL adapter to return a bus error. + end + end + /////////////////////////////////////////////////////////////////// + // Wait for OTP response and release the TL-UL response. In + // case an OTP transaction fails, latch the OTP error code, + // signal a TL-Ul bus error and jump to a terminal error state. + ReadWaitSt: begin + init_done_o = 1'b1; + if (otp_rvalid_i) begin + tlul_rvalid_o = 1'b1; + if (otp_err inside {NoError, MacroEccCorrError}) begin + state_d = IdleSt; + // At this point the only error that we could have gotten are correctable ECC errors. + if (otp_err != NoError) begin + error_d = MacroEccCorrError; + end + end else begin + state_d = ErrorSt; + error_d = otp_err; + // This causes the TL-UL adapter to return a bus error. + tlul_rerror_o = 2'b11; + end + end + end + /////////////////////////////////////////////////////////////////// + // Terminal Error State. This locks access to the partition. + // Make sure the partition signals an error state if no error + // code has been latched so far. + ErrorSt: begin + if (error_q == NoError) begin + error_d = FsmStateError; + end + + // Return bus errors if there are pending TL-UL requests. + if (pending_tlul_error_q) begin + tlul_rerror_o = 2'b11; + tlul_rvalid_o = 1'b1; + end else if (tlul_req_i) begin + tlul_gnt_o = 1'b1; + pending_tlul_error_d = 1'b1; + end + end + /////////////////////////////////////////////////////////////////// + // We should never get here. If we do (e.g. via a malicious + // glitch), error out immediately. + default: begin + state_d = ErrorSt; + fsm_err_o = 1'b1; + end + /////////////////////////////////////////////////////////////////// + endcase // state_q + + // Unconditionally jump into the terminal error state in case of + // an ECC error or escalation, and lock access to the partition down. + // SEC_CM: PART.FSM.LOCAL_ESC + if (ecc_err) begin + state_d = ErrorSt; + if (state_q != ErrorSt) begin + error_d = CheckFailError; + end + end + // SEC_CM: PART.FSM.GLOBAL_ESC + if (lc_ctrl_pkg::lc_tx_test_true_loose(escalate_en_i)) begin + state_d = ErrorSt; + fsm_err_o = 1'b1; + if (state_q != ErrorSt) begin + error_d = FsmStateError; + end + end + end + + /////////////////////////////////// + // Signals to/from TL-UL Adapter // + /////////////////////////////////// + + assign tlul_addr_d = tlul_addr_i; + // Do not forward data in case of an error. + assign tlul_rdata_o = (tlul_rvalid_o && tlul_rerror_o == '0) ? otp_rdata_i[31:0] : '0; + + if (Info.offset == 0) begin : gen_zero_offset + assign tlul_addr_in_range = {1'b0, tlul_addr_q, 2'b00} < PartEnd; + + end else begin : gen_nonzero_offset + assign tlul_addr_in_range = {tlul_addr_q, 2'b00} >= Info.offset && + {1'b0, tlul_addr_q, 2'b00} < PartEnd; + end + + // Note that OTP works on halfword (16bit) addresses, hence need to + // shift the addresses appropriately. + logic [OtpByteAddrWidth-1:0] addr_calc; + assign addr_calc = (otp_addr_sel == DigestAddrSel) ? DigestOffset : {tlul_addr_q, 2'b00}; + assign otp_addr_o = addr_calc[OtpByteAddrWidth-1:OtpAddrShift]; + + if (OtpAddrShift > 0) begin : gen_unused + logic unused_bits; + assign unused_bits = ^addr_calc[OtpAddrShift-1:0]; + end + + // Request 32bit except in case of the digest. + assign otp_size_o = (otp_addr_sel == DigestAddrSel) ? + OtpSizeWidth'(unsigned'(ScrmblBlockWidth / OtpWidth - 1)) : + OtpSizeWidth'(unsigned'(32 / OtpWidth - 1)); + + //////////////// + // Digest Reg // + //////////////// + + if (Info.sw_digest) begin : gen_ecc_reg + // SEC_CM: PART.DATA_REG.INTEGRITY + otp_ctrl_ecc_reg #( + .Width ( ScrmblBlockWidth ), + .Depth ( 1 ) + ) u_otp_ctrl_ecc_reg ( + .clk_i, + .rst_ni, + .wren_i ( digest_reg_en ), + .addr_i ( '0 ), + .wdata_i ( otp_rdata_i ), + .rdata_o ( ), + .data_o ( digest_o ), + .ecc_err_o ( ecc_err ) + ); + end else begin : gen_no_ecc_reg + logic unused_digest_reg_en; + logic unused_rdata; + assign unused_digest_reg_en = digest_reg_en; + assign unused_rdata = ^otp_rdata_i[32 +: 32]; // Upper word is not connected in this case. + assign digest_o = '0; + assign ecc_err = 1'b0; + end + + //////////////////////// + // DAI Access Control // + //////////////////////// + + mubi8_t init_locked; + assign init_locked = (~init_done_o) ? MuBi8True : MuBi8False; + + // Aggregate all possible DAI write locks. The partition is also locked when uninitialized. + // Note that the locks are redundantly encoded values. + part_access_t access_pre; + prim_mubi8_sender #( + .AsyncOn(0) + ) u_prim_mubi8_sender_write_lock_pre ( + .clk_i, + .rst_ni, + .mubi_i(mubi8_and_lo(init_locked, access_i.write_lock)), + .mubi_o(access_pre.write_lock) + ); + prim_mubi8_sender #( + .AsyncOn(0) + ) u_prim_mubi8_sender_read_lock_pre ( + .clk_i, + .rst_ni, + .mubi_i(mubi8_and_lo(init_locked, access_i.read_lock)), + .mubi_o(access_pre.read_lock) + ); + + // SEC_CM: PART.MEM.SW_UNWRITABLE + if (Info.write_lock) begin : gen_digest_write_lock + mubi8_t digest_locked; + assign digest_locked = (digest_o != '0) ? MuBi8True : MuBi8False; + + // This prevents the synthesis tool from optimizing the multibit signal. + prim_mubi8_sender #( + .AsyncOn(0) + ) u_prim_mubi8_sender_write_lock ( + .clk_i, + .rst_ni, + .mubi_i(mubi8_and_lo(access_pre.write_lock, digest_locked)), + .mubi_o(access_o.write_lock) + ); + + `ASSERT(DigestWriteLocksPartition_A, digest_o |-> mubi8_test_true_loose(access_o.write_lock)) + end else begin : gen_no_digest_write_lock + assign access_o.write_lock = access_pre.write_lock; + end + + // SEC_CM: PART.MEM.SW_UNREADABLE + if (Info.read_lock) begin : gen_digest_read_lock + mubi8_t digest_locked; + assign digest_locked = (digest_o != '0) ? MuBi8True : MuBi8False; + + // This prevents the synthesis tool from optimizing the multibit signal. + prim_mubi8_sender #( + .AsyncOn(0) + ) u_prim_mubi8_sender_read_lock ( + .clk_i, + .rst_ni, + .mubi_i(mubi8_and_lo(access_pre.read_lock, digest_locked)), + .mubi_o(access_o.read_lock) + ); + + `ASSERT(DigestReadLocksPartition_A, digest_o |-> mubi8_test_true_loose(access_o.read_lock)) + end else begin : gen_no_digest_read_lock + assign access_o.read_lock = access_pre.read_lock; + end + + /////////////// + // Registers // + /////////////// + + `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, ResetSt) + + always_ff @(posedge clk_i or negedge rst_ni) begin : p_regs + if (!rst_ni) begin + error_q <= NoError; + tlul_addr_q <= '0; + pending_tlul_error_q <= 1'b0; + end else begin + error_q <= error_d; + pending_tlul_error_q <= pending_tlul_error_d; + if (tlul_gnt_o) begin + tlul_addr_q <= tlul_addr_d; + end + end + end + + //////////////// + // Assertions // + //////////////// + + // Known assertions + `ASSERT_KNOWN(InitDoneKnown_A, init_done_o) + `ASSERT_KNOWN(ErrorKnown_A, error_o) + `ASSERT_KNOWN(AccessKnown_A, access_o) + `ASSERT_KNOWN(DigestKnown_A, digest_o) + `ASSERT_KNOWN(TlulGntKnown_A, tlul_gnt_o) + `ASSERT_KNOWN(TlulRerrorKnown_A, tlul_rerror_o) + `ASSERT_KNOWN(TlulRvalidKnown_A, tlul_rvalid_o) + `ASSERT_KNOWN(TlulRdataKnown_A, tlul_rdata_o) + `ASSERT_KNOWN(OtpReqKnown_A, otp_req_o) + `ASSERT_KNOWN(OtpCmdKnown_A, otp_cmd_o) + `ASSERT_KNOWN(OtpSizeKnown_A, otp_size_o) + `ASSERT_KNOWN(OtpWdataKnown_A, otp_wdata_o) + `ASSERT_KNOWN(OtpAddrKnown_A, otp_addr_o) + + // Uninitialized partitions should always be locked, no matter what. + `ASSERT(InitWriteLocksPartition_A, + ~init_done_o + |-> + mubi8_test_true_loose(access_o.write_lock)) + `ASSERT(InitReadLocksPartition_A, + ~init_done_o + |-> + mubi8_test_true_loose(access_o.read_lock)) + // Incoming Lock propagation + `ASSERT(WriteLockPropagation_A, + mubi8_test_true_loose(access_i.write_lock) + |-> + mubi8_test_true_loose(access_o.write_lock)) + `ASSERT(ReadLockPropagation_A, + mubi8_test_true_loose(access_i.read_lock) + |-> + mubi8_test_true_loose(access_o.read_lock)) + // If the partition is read locked, the TL-UL access must error out + `ASSERT(TlulReadOnReadLock_A, + tlul_req_i && tlul_gnt_o ##1 mubi8_test_true_loose(access_o.read_lock) + |-> + tlul_rerror_o > '0 && tlul_rvalid_o) + // ECC error in buffer regs. + `ASSERT(EccErrorState_A, + ecc_err + |=> + state_q == ErrorSt) + // OTP error response + `ASSERT(OtpErrorState_A, + state_q inside {InitWaitSt, ReadWaitSt} && otp_rvalid_i && + !(otp_err inside {NoError, MacroEccCorrError}) && !ecc_err + |=> + state_q == ErrorSt && error_o == $past(otp_err)) + +endmodule : otp_ctrl_part_unbuf diff --git a/src/fuse_ctrl/rtl/otp_ctrl_pkg.sv b/src/fuse_ctrl/rtl/otp_ctrl_pkg.sv new file mode 100644 index 000000000..7a460fdd5 --- /dev/null +++ b/src/fuse_ctrl/rtl/otp_ctrl_pkg.sv @@ -0,0 +1,327 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// + +package otp_ctrl_pkg; + + import prim_util_pkg::vbits; + import otp_ctrl_reg_pkg::*; + + //////////////////////// + // General Parameters // + //////////////////////// + + // Number of vendor-specific test CSR bits coming from and going to + // the life cycle TAP registers. + parameter int OtpTestCtrlWidth = 32; + parameter int OtpTestStatusWidth = 32; + parameter int OtpTestVectWidth = 8; + + // Width of entropy input + parameter int EdnDataWidth = 64; + + parameter int NumPartWidth = vbits(NumPart); + + parameter int SwWindowAddrWidth = vbits(NumSwCfgWindowWords); + + // Background check timer LFSR width. + parameter int LfsrWidth = 40; + // The LFSR will be reseeded once LfsrUsageThreshold + // values have been drawn from it. + parameter int LfsrUsageThreshold = 16; + + // Redundantly encoded and complementary values are used to for signalling to the partition + // controller FSMs and the DAI whether a partition is locked or not. Any other value than + // "Mubi8Lo" is interpreted as "Locked" in those FSMs. + typedef struct packed { + prim_mubi_pkg::mubi8_t read_lock; + prim_mubi_pkg::mubi8_t write_lock; + } part_access_t; + + parameter int DaiCmdWidth = 3; + typedef enum logic [DaiCmdWidth-1:0] { + DaiRead = 3'b001, + DaiWrite = 3'b010, + DaiDigest = 3'b100 + } dai_cmd_e; + + parameter int DeviceIdWidth = 256; + typedef logic [DeviceIdWidth-1:0] otp_device_id_t; + + parameter int ManufStateWidth = 256; + typedef logic [ManufStateWidth-1:0] otp_manuf_state_t; + + ////////////////////////////////////// + // Typedefs for OTP Macro Interface // + ////////////////////////////////////// + + // OTP-macro specific + parameter int OtpWidth = 16; + parameter int OtpAddrWidth = OtpByteAddrWidth - $clog2(OtpWidth/8); + parameter int OtpDepth = 2**OtpAddrWidth; + parameter int OtpSizeWidth = 2; // Allows to transfer up to 4 native OTP words at once. + parameter int OtpErrWidth = 3; + parameter int OtpPwrSeqWidth = 2; + parameter int OtpIfWidth = 2**OtpSizeWidth*OtpWidth; + // Number of Byte address bits to cut off in order to get the native OTP word address. + parameter int OtpAddrShift = OtpByteAddrWidth - OtpAddrWidth; + + typedef enum logic [OtpErrWidth-1:0] { + NoError = 3'h0, + MacroError = 3'h1, + MacroEccCorrError = 3'h2, + MacroEccUncorrError = 3'h3, + MacroWriteBlankError = 3'h4, + AccessError = 3'h5, + CheckFailError = 3'h6, + FsmStateError = 3'h7 + } otp_err_e; + + ///////////////////////////////// + // Typedefs for OTP Scrambling // + ///////////////////////////////// + + parameter int ScrmblKeyWidth = 128; + parameter int ScrmblBlockWidth = 64; + + parameter int NumPresentRounds = 31; + parameter int ScrmblBlockHalfWords = ScrmblBlockWidth / OtpWidth; + + typedef enum logic [2:0] { + Decrypt, + Encrypt, + LoadShadow, + Digest, + DigestInit, + DigestFinalize + } otp_scrmbl_cmd_e; + + /////////////////////////////// + // Typedefs for LC Interface // + /////////////////////////////// + + // The tokens below are all hash post-images + typedef struct packed { + logic valid; + logic error; + // Use lc_state_t and lc_cnt_t here as very wide enumerations ( > 64 bits ) + // are not supported for virtual interfaces by Excelium yet + // https://github.com/lowRISC/opentitan/issues/8884 (Cadence issue: cds_46570160) + // The enumeration types lc_state_e and lc_cnt_e are still ok in other circumstances + lc_ctrl_state_pkg::lc_state_t state; + lc_ctrl_state_pkg::lc_cnt_t count; + // This is set to "On" if the partition containing the + // root secrets have been locked. In that case, the device + // is considered "personalized". + lc_ctrl_pkg::lc_tx_t secrets_valid; + // This is set to "On" if the partition containing the + // test tokens has been locked. + lc_ctrl_pkg::lc_tx_t test_tokens_valid; + lc_ctrl_state_pkg::lc_token_t test_unlock_token; + lc_ctrl_state_pkg::lc_token_t test_exit_token; + // This is set to "On" if the partition containing the + // rma token has been locked. + lc_ctrl_pkg::lc_tx_t rma_token_valid; + lc_ctrl_state_pkg::lc_token_t rma_token; + } otp_lc_data_t; + + // Default for dangling connection. + // Note that we put the life cycle into + // TEST_UNLOCKED0 by default such that top levels without + // the OTP controller can still function. + parameter otp_lc_data_t OTP_LC_DATA_DEFAULT = '{ + valid: 1'b1, + error: 1'b0, + state: lc_ctrl_state_pkg::LcStTestUnlocked0, + count: lc_ctrl_state_pkg::LcCnt1, + secrets_valid: lc_ctrl_pkg::Off, + test_tokens_valid: lc_ctrl_pkg::Off, + test_unlock_token: '0, + test_exit_token: '0, + rma_token_valid: lc_ctrl_pkg::Off, + rma_token: '0 + }; + + typedef struct packed { + logic req; + lc_ctrl_state_pkg::lc_state_e state; + lc_ctrl_state_pkg::lc_cnt_e count; + } lc_otp_program_req_t; + + typedef struct packed { + logic err; + logic ack; + } lc_otp_program_rsp_t; + + // RAW unlock token hashing request. + typedef struct packed { + logic req; + lc_ctrl_state_pkg::lc_token_t token_input; + } lc_otp_token_req_t; + + typedef struct packed { + logic ack; + lc_ctrl_state_pkg::lc_token_t hashed_token; + } lc_otp_token_rsp_t; + + typedef struct packed { + logic [OtpTestCtrlWidth-1:0] ctrl; + } lc_otp_vendor_test_req_t; + + typedef struct packed { + logic [OtpTestStatusWidth-1:0] status; + } lc_otp_vendor_test_rsp_t; + + //////////////////////////////// + // Typedefs for Key Broadcast // + //////////////////////////////// + + parameter int FlashKeySeedWidth = 256; + parameter int SramKeySeedWidth = 128; + parameter int KeyMgrKeyWidth = 256; + parameter int FlashKeyWidth = 128; + parameter int SramKeyWidth = 128; + parameter int SramNonceWidth = 128; + parameter int OtbnKeyWidth = 128; + parameter int OtbnNonceWidth = 64; + + typedef logic [SramKeyWidth-1:0] sram_key_t; + typedef logic [SramNonceWidth-1:0] sram_nonce_t; + typedef logic [OtbnKeyWidth-1:0] otbn_key_t; + typedef logic [OtbnNonceWidth-1:0] otbn_nonce_t; + + localparam int OtbnNonceSel = OtbnNonceWidth / ScrmblBlockWidth; + localparam int FlashNonceSel = FlashKeyWidth / ScrmblBlockWidth; + localparam int SramNonceSel = SramNonceWidth / ScrmblBlockWidth; + + // Get maximum nonce width + localparam int NumNonceChunks = + (OtbnNonceWidth > FlashKeyWidth) ? + ((OtbnNonceWidth > SramNonceSel) ? OtbnNonceSel : SramNonceSel) : + ((FlashKeyWidth > SramNonceSel) ? FlashNonceSel : SramNonceSel); + + typedef struct packed { + logic [KeyMgrKeyWidth-1:0] creator_root_key_share0; + logic creator_root_key_share0_valid; + logic [KeyMgrKeyWidth-1:0] creator_root_key_share1; + logic creator_root_key_share1_valid; + logic [KeyMgrKeyWidth-1:0] creator_seed; + logic creator_seed_valid; + logic [KeyMgrKeyWidth-1:0] owner_seed; + logic owner_seed_valid; + } otp_keymgr_key_t; + + parameter otp_keymgr_key_t OTP_KEYMGR_KEY_DEFAULT = '{ + creator_root_key_share0: 256'hefb7ea7ee90093cf4affd9aaa2d6c0ec446cfdf5f2d5a0bfd7e2d93edc63a102, + creator_root_key_share0_valid: 1'b1, + creator_root_key_share1: 256'h56d24a00181de99e0f690b447a8dde2a1ffb8bc306707107aa6e2410f15cfc37, + creator_root_key_share1_valid: 1'b1, + creator_seed: 256'hc7c50b38655cc87f821e5b07fed85d2c07e222a9e00bef308b3eccba0ba406fa, + creator_seed_valid: 1'b1, + owner_seed: 256'hf5052c0f14782d8b066be9f49c0b2000d3643ff3723ea7db972f69cd3e2e3e68, + owner_seed_valid: 1'b1 + }; + + typedef struct packed { + logic data_req; // Requests static key for data scrambling. + logic addr_req; // Requests static key for address scrambling. + } flash_otp_key_req_t; + + typedef struct packed { + logic req; // Requests ephemeral scrambling key and nonce. + } sram_otp_key_req_t; + + typedef struct packed { + logic req; // Requests ephemeral scrambling key and nonce. + } otbn_otp_key_req_t; + + typedef struct packed { + logic data_ack; // Ack for data key. + logic addr_ack; // Ack for address key. + logic [FlashKeyWidth-1:0] key; // 128bit static scrambling key. + logic [FlashKeyWidth-1:0] rand_key; + logic seed_valid; // Set to 1 if the key seed has been provisioned and is + // valid. + } flash_otp_key_rsp_t; + + // Default for dangling connection + parameter flash_otp_key_rsp_t FLASH_OTP_KEY_RSP_DEFAULT = '{ + data_ack: 1'b1, + addr_ack: 1'b1, + key: '0, + rand_key: '0, + seed_valid: 1'b1 + }; + + typedef struct packed { + logic ack; // Ack for key. + sram_key_t key; // 128bit ephemeral scrambling key. + sram_nonce_t nonce; // 128bit nonce. + logic seed_valid; // Set to 1 if the key seed has been provisioned and is valid. + } sram_otp_key_rsp_t; + + // Default for dangling connection + parameter sram_otp_key_rsp_t SRAM_OTP_KEY_RSP_DEFAULT = '{ + ack: 1'b1, + key: '0, + nonce: '0, + seed_valid: 1'b1 + }; + + typedef struct packed { + logic ack; // Ack for key. + otbn_key_t key; // 128bit ephemeral scrambling key. + otbn_nonce_t nonce; // 256bit nonce. + logic seed_valid; // Set to 1 if the key seed has been provisioned and is valid. + } otbn_otp_key_rsp_t; + + //////////////////////////////// + // Power/Reset Ctrl Interface // + //////////////////////////////// + + typedef struct packed { + logic init; + } pwr_otp_init_req_t; + + typedef struct packed { + logic done; + } pwr_otp_init_rsp_t; + + typedef struct packed { + logic idle; + } otp_pwr_state_t; + + + /////////////////// + // AST Interface // + /////////////////// + + typedef struct packed { + logic [OtpPwrSeqWidth-1:0] pwr_seq; + } otp_ast_req_t; + + typedef struct packed { + logic [OtpPwrSeqWidth-1:0] pwr_seq_h; + } otp_ast_rsp_t; + + /////////////////////////////////////////// + // Defaults for random netlist constants // + /////////////////////////////////////////// + + // These LFSR parameters have been generated with + // $ util/design/gen-lfsr-seed.py --width 40 --seed 4247488366 + typedef logic [LfsrWidth-1:0] lfsr_seed_t; + typedef logic [LfsrWidth-1:0][$clog2(LfsrWidth)-1:0] lfsr_perm_t; + localparam lfsr_seed_t RndCnstLfsrSeedDefault = 40'h453d28ea98; + localparam lfsr_perm_t RndCnstLfsrPermDefault = + 240'h4235171482c225f79289b32181a0163a760355d3447063d16661e44c12a5; + + typedef struct packed { + sram_key_t key; + sram_nonce_t nonce; + } scrmbl_key_init_t; + localparam scrmbl_key_init_t RndCnstScrmblKeyInitDefault = + 256'hcebeb96ffe0eced795f8b2cfe23c1e519e4fa08047a6bcfb811b04f0a479006e; + +endpackage : otp_ctrl_pkg diff --git a/src/fuse_ctrl/rtl/otp_ctrl_scrmbl.sv b/src/fuse_ctrl/rtl/otp_ctrl_scrmbl.sv new file mode 100644 index 000000000..9470ff8eb --- /dev/null +++ b/src/fuse_ctrl/rtl/otp_ctrl_scrmbl.sv @@ -0,0 +1,510 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// This module contains the scrambling datapath for the OTP controller. It basically consists of +// two single-round PRESENT primitives (one for encryption and one for decryption mode), a counter +// with a simple FSM and four working registers, as listed below. +// +// key_state_q (128bit): working register to hold the round key (needed for the key schedule). +// +// data_state_q (64bit): working register to hold the data state in between rounds. +// +// data_shadow_q (64bit): shadow register for holding a second 64bit block of input data. This is +// used to form a 128bit data block for the digest mode, which has a block +// size of 128bit. +// +// digest_state_q (64bit): register to hold the digest state in between digest updates. Technically, +// this is not needed when the data for the digest is fed into this block +// back-to-back. However, the partition integrity checks require that it is +// possible to interleave encryption operations and digest update steps, +// hence an additional state register is needed, as otherwise the digest +// state would be lost. +// +// The scrambling datapath is arranged such that it can also be used for calculating a digest using +// the encryption primitive in a Merkle-Damgard construction. To that end, the PRESENT block cipher +// is turned into a one way function according to the Davies-Meyer scheme. Note however that this +// makes the digest block size 128bit wide, since the Merkle-Damgard construction leverages the +// cipher key input to ingest data. +// +// The scrambling datapath exposes a few simple commands and the FSM hides the complexity +// of steering the appropriate muxes and keeping track of the cipher rounds. These commands are +// briefly explained below. +// +// Decrypt: This decrypts the data block provided via data_i with the key at index sel_i. +// +// Encrypt: This encrypts the data block provided via data_i with the key at index sel_i. +// In addition, this command copies the prvious result into a shadow register before +// the first encryption round for later use in the digest (see description further below). +// This enables interleaved encrypt/digest operation needed for the integrity checks of +// the secret partitions. +// +// LoadShadow: In "StandardMode", the LoadShadow command loads the data provided via data_i into a +// shadow register that is mapped to the lower 64bit of the 128bit digest input data +// block. In "ChainedMode", this command copies the contents of the data state register +// into the shadow register. +// +// DigestInit: This ensures that the digest initialization vector (IV) is selected upon the next +// call of the Digest command. Also, mode_i can be used to set the digest mode. If +// mode_i is set to "StandardMode", the data to be digested has to be provided via +// data_i and LoadShadow. If mode_i is set to "ChainedMode", the digest input is formed +// by concatenating the results of the revious two encryption commands. +// +// Digest: In "StandardMode", this command concatenates the data input supplied via data_i with +// the shadow register in order to form a 128bit block ({data_i, data_shadow_q}). This block +// is then used to encrypt the digest state. In "ChainedMode" digest mode, the 128bit block +// to be digested is formed by concatenating {data_state_q, data_shadow_q}. If a DigestInit +// command has been executed right before calling Digest, the IV selected with sel_i is +// used to initialize the state. +// +// DigestFinalize: This command encrypts the digest state with the finalization constant selected +// by sel_i in order to form the final digest. +// +// References: - https://docs.opentitan.org/hw/ip/otp_ctrl/doc/index.html#design-details +// - https://docs.opentitan.org/hw/ip/prim/doc/prim_present/ +// - https://en.wikipedia.org/wiki/Merkle-Damgard_construction +// - https://en.wikipedia.org/wiki/One-way_compression_function#Davies%E2%80%93Meyer +// - https://en.wikipedia.org/wiki/PRESENT +// - http://www.lightweightcrypto.org/present/present_ches2007.pdf +// + +`include "prim_flop_macros.sv" + +module otp_ctrl_scrmbl + import otp_ctrl_pkg::*; + import otp_ctrl_part_pkg::*; +( + input clk_i, + input rst_ni, + // input data and command + input otp_scrmbl_cmd_e cmd_i, + input digest_mode_e mode_i, + input [ConstSelWidth-1:0] sel_i, + input [ScrmblBlockWidth-1:0] data_i, + input valid_i, + output logic ready_o, + // output data + output logic [ScrmblBlockWidth-1:0] data_o, + output logic valid_o, + // escalation input and FSM error indication + input lc_ctrl_pkg::lc_tx_t escalate_en_i, + output logic fsm_err_o +); + + import prim_util_pkg::vbits; + + //////////////////////// + // Decryption Key LUT // + //////////////////////// + + // Anchor keys, constants and IVs + key_array_t rnd_cnst_key_anchor; + digest_const_array_t rnd_cnst_digest_anchor; + digest_iv_array_t rnd_cnst_digest_iv_anchor; + + for (genvar i = 0; i < NumScrmblKeys; i++) begin : gen_anchor_keys + prim_sec_anchor_buf #( + .Width(ScrmblKeyWidth) + ) u_key_anchor_buf ( + .in_i(RndCnstKey[i]), + .out_o(rnd_cnst_key_anchor[i]) + ); + end + + for (genvar i = 0; i < NumDigestSets; i++) begin : gen_anchor_digests + prim_sec_anchor_buf #( + .Width(ScrmblKeyWidth) + ) u_const_anchor_buf ( + .in_i(RndCnstDigestConst[i]), + .out_o(rnd_cnst_digest_anchor[i]) + ); + + prim_sec_anchor_buf #( + .Width(ScrmblBlockWidth) + ) u_iv_anchor_buf ( + .in_i(RndCnstDigestIV[i]), + .out_o(rnd_cnst_digest_iv_anchor[i]) + ); + end + + + // Align these arrays to power of 2's to prevent X's in the muxing operations further below. + logic [2**$clog2(NumScrmblKeys)-1:0][ScrmblKeyWidth-1:0] otp_enc_key_lut; + logic [2**$clog2(NumScrmblKeys)-1:0][ScrmblKeyWidth-1:0] otp_dec_key_lut; + logic [2**$clog2(NumDigestSets)-1:0][ScrmblKeyWidth-1:0] digest_const_lut; + logic [2**$clog2(NumDigestSets)-1:0][ScrmblBlockWidth-1:0] digest_iv_lut; + + // This pre-calculates the inverse scrambling keys at elab time. + `ASSERT_INIT(NumMaxPresentRounds_A, NumPresentRounds <= 31) + + always_comb begin : p_luts + otp_enc_key_lut = '0; + otp_dec_key_lut = '0; + digest_const_lut = '0; + digest_iv_lut = '0; + + for (int k = 0; k < NumScrmblKeys; k++) begin + localparam logic [4:0] NumRounds = 5'(unsigned'(NumPresentRounds)); + otp_enc_key_lut[k] = rnd_cnst_key_anchor[k]; + // Due to the PRESENT key schedule, we have to step the key schedule function by + // NumPresentRounds forwards to get the decryption key. + otp_dec_key_lut[k] = + prim_cipher_pkg::present_get_dec_key128(rnd_cnst_key_anchor[k], NumRounds); + end + + for (int k = 0; k < NumDigestSets; k++) begin + digest_const_lut[k] = rnd_cnst_digest_anchor[k]; + digest_iv_lut[k] = rnd_cnst_digest_iv_anchor[k]; + end + end + `ASSERT_KNOWN(EncKeyLutKnown_A, otp_enc_key_lut) + `ASSERT_KNOWN(DecKeyLutKnown_A, otp_dec_key_lut) + `ASSERT_KNOWN(DigestConstLutKnown_A, digest_const_lut) + `ASSERT_KNOWN(DigestIvLutKnown_A, digest_iv_lut) + + ////////////// + // Datapath // + ////////////// + + logic [4:0] idx_state_d, idx_state_q; + logic [ScrmblKeyWidth-1:0] key_state_d, key_state_q; + logic [ScrmblBlockWidth-1:0] data_state_d, data_state_q, data_shadow_q; + logic [ScrmblBlockWidth-1:0] digest_state_d, digest_state_q; + logic [ScrmblBlockWidth-1:0] enc_data_out, enc_data_out_xor, dec_data_out; + logic [ScrmblKeyWidth-1:0] dec_key_out, enc_key_out; + logic [4:0] dec_idx_out, enc_idx_out; + logic [ScrmblKeyWidth-1:0] otp_digest_const_mux, otp_enc_key_mux, otp_dec_key_mux; + logic [ScrmblBlockWidth-1:0] otp_digest_iv_mux; + + typedef enum logic [2:0] {SelEncDataOut, + SelDecDataOut, + SelDigestState, + SelEncDataOutXor, + SelDataInput} data_state_sel_e; + + typedef enum logic [2:0] {SelDecKeyOut, + SelEncKeyOut, + SelDecKeyInit, + SelEncKeyInit, + SelDigestConst, + SelDigestInput, + SelDigestChained} key_state_sel_e; + + logic digest_init; + data_state_sel_e data_state_sel; + key_state_sel_e key_state_sel; + logic data_state_en, data_shadow_copy, data_shadow_load, digest_state_en, key_state_en; + digest_mode_e digest_mode_d, digest_mode_q; + + assign otp_enc_key_mux = otp_enc_key_lut[ScrmblKeySelWidth'(sel_i)]; + assign otp_dec_key_mux = otp_dec_key_lut[ScrmblKeySelWidth'(sel_i)]; + assign otp_digest_const_mux = digest_const_lut[DigestSetSelWidth'(sel_i)]; + assign otp_digest_iv_mux = digest_iv_lut[DigestSetSelWidth'(sel_i)]; + + // Make sure we always select a valid key / digest constant. + `ASSERT(CheckNumEncKeys_A, key_state_sel == SelEncKeyInit |-> sel_i < NumScrmblKeys) + `ASSERT(CheckNumDecKeys_A, key_state_sel == SelDecKeyInit |-> sel_i < NumScrmblKeys) + `ASSERT(CheckNumDigest1_A, key_state_sel == SelDigestConst |-> sel_i < NumDigestSets) + + assign data_state_d = (data_state_sel == SelEncDataOut) ? enc_data_out : + (data_state_sel == SelDecDataOut) ? dec_data_out : + (data_state_sel == SelDigestState) ? digest_state_q : + (data_state_sel == SelEncDataOutXor) ? enc_data_out_xor : + data_i; + + assign key_state_d = (key_state_sel == SelDecKeyOut) ? dec_key_out : + (key_state_sel == SelEncKeyOut) ? enc_key_out : + (key_state_sel == SelDecKeyInit) ? otp_dec_key_mux : + (key_state_sel == SelEncKeyInit) ? otp_enc_key_mux : + (key_state_sel == SelDigestConst) ? otp_digest_const_mux : + (key_state_sel == SelDigestChained) ? {data_state_q, data_shadow_q} : + {data_i, data_shadow_q}; + + // Initialize the round index state with 1 in all cases, except for the decrypt operation. + assign idx_state_d = (key_state_sel == SelDecKeyOut) ? dec_idx_out : + (key_state_sel == SelEncKeyOut) ? enc_idx_out : + (key_state_sel == SelDecKeyInit) ? unsigned'(5'(NumPresentRounds)) : + 5'd1; + + // The XOR is for the Davies-Mayer one-way function construction. + assign enc_data_out_xor = enc_data_out ^ digest_state_q; + assign digest_state_d = (digest_init) ? otp_digest_iv_mux : enc_data_out_xor; + + logic valid_q; //valid_d defined below + assign data_o = (valid_q) ? data_state_q : 0; + + ///////// + // FSM // + ///////// + + // SEC_CM: SCRMBL.FSM.SPARSE + // Encoding generated with: + // $ ./util/design/sparse-fsm-encode.py -d 5 -m 5 -n 9 \ + // -s 2193087944 --language=sv + // + // Hamming distance histogram: + // + // 0: -- + // 1: -- + // 2: -- + // 3: -- + // 4: -- + // 5: |||||||||||||||||||| (60.00%) + // 6: ||||||||||||| (40.00%) + // 7: -- + // 8: -- + // 9: -- + // + // Minimum Hamming distance: 5 + // Maximum Hamming distance: 6 + // Minimum Hamming weight: 4 + // Maximum Hamming weight: 7 + // + localparam int StateWidth = 9; + typedef enum logic [StateWidth-1:0] { + IdleSt = 9'b100011001, + DecryptSt = 9'b101101111, + EncryptSt = 9'b010010111, + DigestSt = 9'b111000010, + ErrorSt = 9'b011111000 + } state_e; + + localparam int CntWidth = $clog2(NumPresentRounds+1); + localparam int unsigned LastPresentRoundInt = NumPresentRounds - 1; + localparam bit [CntWidth-1:0] LastPresentRound = LastPresentRoundInt[CntWidth-1:0]; + + state_e state_d, state_q; + logic [CntWidth-1:0] cnt; + logic cnt_clr, cnt_en, cnt_err; + logic valid_d; //valid_q defined above + + assign valid_o = valid_q; + + // SEC_CM: SCRMBL.CTR.REDUN + prim_count #( + .Width(CntWidth) + ) u_prim_count ( + .clk_i, + .rst_ni, + .clr_i(cnt_clr), + .set_i(1'b0), + .set_cnt_i('0), + .incr_en_i(cnt_en), + .decr_en_i(1'b0), + .step_i(CntWidth'(1)), + .commit_i(1'b1), + .cnt_o(cnt), + .cnt_after_commit_o(), + .err_o(cnt_err) + ); + + always_comb begin : p_fsm + state_d = state_q; + digest_mode_d = digest_mode_q; + data_state_sel = SelDataInput; + key_state_sel = SelDigestInput; + digest_init = 1'b0; + data_state_en = 1'b0; + data_shadow_copy = 1'b0; + data_shadow_load = 1'b0; + key_state_en = 1'b0; + digest_state_en = 1'b0; + cnt_en = 1'b0; + cnt_clr = 1'b0; + valid_d = 1'b0; + ready_o = 1'b0; + fsm_err_o = 1'b0; + + unique case (state_q) + /////////////////////////////////////////////////////////////////// + // Idle State: decode command and + // load working regs accordingly + IdleSt: begin + cnt_clr = 1'b1; + ready_o = 1'b1; + + if (valid_i) begin + unique case (cmd_i) + Decrypt: begin + state_d = DecryptSt; + key_state_sel = SelDecKeyInit; + data_state_en = 1'b1; + key_state_en = 1'b1; + end + Encrypt: begin + state_d = EncryptSt; + key_state_sel = SelEncKeyInit; + data_state_en = 1'b1; + key_state_en = 1'b1; + end + LoadShadow: begin + if (digest_mode_q == ChainedMode) begin + data_shadow_copy = 1'b1; + end else begin + data_shadow_load = 1'b1; + end + end + Digest: begin + state_d = DigestSt; + data_state_sel = SelDigestState; + key_state_sel = (digest_mode_q == ChainedMode) ? SelDigestChained : SelDigestInput; + data_state_en = 1'b1; + key_state_en = 1'b1; + end + DigestInit: begin + digest_mode_d = mode_i; + digest_init = 1'b1; + digest_state_en = 1'b1; + end + DigestFinalize: begin + state_d = DigestSt; + data_state_sel = SelDigestState; + key_state_sel = SelDigestConst; + data_state_en = 1'b1; + key_state_en = 1'b1; + digest_mode_d = StandardMode; + end + default: ; // ignore + endcase // cmd_i + end + end + /////////////////////////////////////////////////////////////////// + // Perform decrypt rounds. + DecryptSt: begin + data_state_sel = SelDecDataOut; + key_state_sel = SelDecKeyOut; + data_state_en = 1'b1; + key_state_en = 1'b1; + cnt_en = 1'b1; + if (cnt == LastPresentRound) begin + state_d = IdleSt; + valid_d = 1'b1; + end + end + /////////////////////////////////////////////////////////////////// + // Perform encrypt rounds. + EncryptSt: begin + data_state_sel = SelEncDataOut; + key_state_sel = SelEncKeyOut; + data_state_en = 1'b1; + key_state_en = 1'b1; + cnt_en = 1'b1; + if (cnt == LastPresentRound) begin + state_d = IdleSt; + valid_d = 1'b1; + end + end + /////////////////////////////////////////////////////////////////// + // The digest is calculated with a Merkle-Damgard construction that + // employs the PRESENT encryption datapath. + DigestSt: begin + data_state_sel = SelEncDataOut; + key_state_sel = SelEncKeyOut; + data_state_en = 1'b1; + key_state_en = 1'b1; + cnt_en = 1'b1; + if (cnt == LastPresentRound) begin + state_d = IdleSt; + valid_d = 1'b1; + // Apply XOR for Davies-Meyer construction. + data_state_sel = SelEncDataOutXor; + // Backup digest state for next round of updates. We can't keep this state in the + // data state register as a digest may be calculated together with encryption + // operations in an interleaved way. + digest_state_en = 1'b1; + end + end + /////////////////////////////////////////////////////////////////// + // Terminal error state. This raises an alert. + ErrorSt: begin + fsm_err_o = 1'b1; + end + /////////////////////////////////////////////////////////////////// + // This should never happen, hence we directly jump into the + // error state, where an alert will be triggered. + default: begin + state_d = ErrorSt; + fsm_err_o = 1'b1; + end + /////////////////////////////////////////////////////////////////// + endcase // state_q + + // Unconditionally jump into the terminal error state in case of escalation. + // SEC_CM: SCRMBL.FSM.LOCAL_ESC, SCRMBL.FSM.GLOBAL_ESC + if (lc_ctrl_pkg::lc_tx_test_true_loose(escalate_en_i) || cnt_err) begin + state_d = ErrorSt; + fsm_err_o = 1'b1; + end + end + + ///////////////////////////// + // PRESENT DEC/ENC Modules // + ///////////////////////////// + + prim_present #( + .KeyWidth(128), + .NumRounds(NumPresentRounds), + .NumPhysRounds(1) + ) u_prim_present_enc ( + .data_i ( data_state_q ), + .key_i ( key_state_q ), + .idx_i ( idx_state_q ), + .data_o ( enc_data_out ), + .key_o ( enc_key_out ), + .idx_o ( enc_idx_out ) + ); + + prim_present #( + .KeyWidth(128), + // We are using an iterative full-round implementation here. + .NumRounds(NumPresentRounds), + .NumPhysRounds(1), + .Decrypt(1) + ) u_prim_present_dec ( + .data_i ( data_state_q ), + .key_i ( key_state_q ), + .idx_i ( idx_state_q ), + .data_o ( dec_data_out ), + .key_o ( dec_key_out ), + .idx_o ( dec_idx_out ) + ); + + /////////////// + // Registers // + /////////////// + + `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, IdleSt) + + always_ff @(posedge clk_i or negedge rst_ni) begin : p_regs + if (!rst_ni) begin + key_state_q <= '0; + idx_state_q <= '0; + data_state_q <= '0; + data_shadow_q <= '0; + digest_state_q <= '0; + valid_q <= 1'b0; + digest_mode_q <= StandardMode; + end else begin + valid_q <= valid_d; + digest_mode_q <= digest_mode_d; + + // enable regs + if (key_state_en) begin + key_state_q <= key_state_d; + idx_state_q <= idx_state_d; + end + if (data_state_en) begin + data_state_q <= data_state_d; + end + if (data_shadow_copy) begin + data_shadow_q <= data_state_q; + end else if (data_shadow_load) begin + data_shadow_q <= data_state_d; + end + if (digest_state_en) begin + digest_state_q <= digest_state_d; + end + end + end + +endmodule : otp_ctrl_scrmbl diff --git a/src/fuse_ctrl/rtl/otp_ctrl_token_const.sv b/src/fuse_ctrl/rtl/otp_ctrl_token_const.sv new file mode 100644 index 000000000..35cdc23dd --- /dev/null +++ b/src/fuse_ctrl/rtl/otp_ctrl_token_const.sv @@ -0,0 +1,65 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// This module contains the hash post-image constants for the all-zero and raw unlock tokens. +// This implementation relies on constant propagation to precompute these constants from the +// random netlist constants at compile time, and hence does not contain any "real" logic. + +module otp_ctrl_token_const import otp_ctrl_pkg::*; #( + // Compile time random constants, to be overriden by topgen. + parameter digest_const_array_t RndCnstDigestConst = RndCnstDigestConstDefault, + parameter digest_iv_array_t RndCnstDigestIV = RndCnstDigestIVDefault, + parameter lc_ctrl_pkg::lc_token_t RndCnstRawUnlockToken = RndCnstRawUnlockTokenDefault +) ( + output lc_ctrl_pkg::lc_token_t all_zero_token_hashed_o, + output lc_ctrl_pkg::lc_token_t raw_unlock_token_hashed_o +); + + localparam int NumHashes = 2; + localparam int AllZeroIdx = 0; + localparam int RawUnlockIdx = 1; + + logic [NumHashes-1:0][1:0][ScrmblKeyWidth-1:0] data; + logic [NumHashes-1:0][4:0][ScrmblBlockWidth-1:0] state; + + // First digest is for the all zero token, the second is for the raw unlock token. + assign data[AllZeroIdx][0] = '0; + assign data[RawUnlockIdx][0] = RndCnstRawUnlockToken; + + // Repeat for all precomputed hashes. + for (genvar j = 0; j < NumHashes; j++) begin : gen_hashes + // Initialize all hashes with digest IV. + assign state[j][0] = RndCnstDigestIV[LcRawDigest]; + // Second data block is always the digest finalization constant. + assign data[j][1] = RndCnstDigestConst[LcRawDigest]; + + // Each hash takes four invocations, see diagram c) on + // https://docs.opentitan.org/hw/ip/otp_ctrl/doc/index.html#scrambling-datapath + for (genvar k = 0; k < 4; k++) begin : gen_invocations + logic [ScrmblBlockWidth-1:0] next_state; + + // This relies on constant propagation to + // statically precompute the hashed token values. + prim_present #( + .KeyWidth(128), + .NumRounds(NumPresentRounds) + ) u_prim_present_enc_0 ( + .data_i ( state[j][k] ), + .key_i ( data[j][k%2] ), + .idx_i ( 5'h1 ), + .data_o ( next_state ), + .key_o ( ), + .idx_o ( ) + ); + + // XOR in last state according to the Davies-Meyer scheme. + assign state[j][k+1] = next_state ^ state[j][k]; + end + end + + // Concatenate the two 64bit hash results to form the final digests. + assign all_zero_token_hashed_o = {state[AllZeroIdx][4], state[AllZeroIdx][2]}; + assign raw_unlock_token_hashed_o = {state[RawUnlockIdx][4], state[RawUnlockIdx][2]}; + +endmodule : otp_ctrl_token_const diff --git a/src/fuse_ctrl/rtl/otp_ctrl_top.sv b/src/fuse_ctrl/rtl/otp_ctrl_top.sv new file mode 100644 index 000000000..c12b9d529 --- /dev/null +++ b/src/fuse_ctrl/rtl/otp_ctrl_top.sv @@ -0,0 +1,215 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + + +module otp_ctrl_top + import axi_pkg::*; + ( + input clk_i, + input rst_ni, + + //AXI Interface Core + axi_if.w_sub s_core_axi_w_if, + axi_if.r_sub s_core_axi_r_if, + + //AXI Interface Prim + axi_if.w_sub s_prim_axi_w_if, + axi_if.r_sub s_prim_axi_r_if, + + // Interrupt Requests + output logic intr_otp_operation_done_o, + output logic intr_otp_error_o, + // Alerts + input caliptra_prim_alert_pkg::alert_rx_t [NumAlerts-1:0] alert_rx_i, + output caliptra_prim_alert_pkg::alert_tx_t [NumAlerts-1:0] alert_tx_o, + // Observability to AST + input ast_pkg::ast_obs_ctrl_t obs_ctrl_i, + output logic [7:0] otp_obs_o, + // Macro-specific power sequencing signals to/from AST. + output otp_ast_req_t otp_ast_pwr_seq_o, + input otp_ast_rsp_t otp_ast_pwr_seq_h_i, + // Power manager interface (inputs are synced to OTP clock domain) + input pwrmgr_pkg::pwr_otp_req_t pwr_otp_i, + output pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o, + // Macro-specific test registers going to lifecycle TAP + input lc_otp_vendor_test_req_t lc_otp_vendor_test_i, + output lc_otp_vendor_test_rsp_t lc_otp_vendor_test_o, + // Lifecycle transition command interface + input lc_otp_program_req_t lc_otp_program_i, + output lc_otp_program_rsp_t lc_otp_program_o, + // Lifecycle broadcast inputs + // SEC_CM: LC_CTRL.INTERSIG.MUBI + input lc_ctrl_pkg::lc_tx_t lc_creator_seed_sw_rw_en_i, + input lc_ctrl_pkg::lc_tx_t lc_owner_seed_sw_rw_en_i, + input lc_ctrl_pkg::lc_tx_t lc_seed_hw_rd_en_i, + input lc_ctrl_pkg::lc_tx_t lc_dft_en_i, + input lc_ctrl_pkg::lc_tx_t lc_escalate_en_i, + input lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i, + // OTP broadcast outputs + // SEC_CM: TOKEN_VALID.CTRL.MUBI + output otp_lc_data_t otp_lc_data_o, + output otp_keymgr_key_t otp_keymgr_key_o, + // Scrambling key requests + input flash_otp_key_req_t flash_otp_key_i, + output flash_otp_key_rsp_t flash_otp_key_o, + input sram_otp_key_req_t [NumSramKeyReqSlots-1:0] sram_otp_key_i, + output sram_otp_key_rsp_t [NumSramKeyReqSlots-1:0] sram_otp_key_o, + input otbn_otp_key_req_t otbn_otp_key_i, + output otbn_otp_key_rsp_t otbn_otp_key_o, + // Hardware config bits + output otp_broadcast_t otp_broadcast_o, + // External voltage for OTP + inout wire otp_ext_voltage_h_io, + // Scan + input scan_en_i, + input scan_rst_ni, + input prim_mubi_pkg::mubi4_t scanmode_i, + // Test-related GPIO output + output logic [OtpTestVectWidth-1:0] cio_test_o, + output logic [OtpTestVectWidth-1:0] cio_test_en_o + + ); + + logic core_dv; + logic [AW-1:0] core_addr; + logic core_write; + logic [UW-1:0] core_user; + logic [IW-1:0] core_id; + logic [DW-1:0] core_wdata; + logic [BC-1:0] core_wstrb; + logic [DW-1:0] core_rdata; + logic core_last; + logic core_hld; + logic core_err; + + logic prim_dv; + logic [AW-1:0] prim_addr; + logic prim_write; + logic [UW-1:0] prim_user; + logic [IW-1:0] prim_id; + logic [DW-1:0] prim_wdata; + logic [BC-1:0] prim_wstrb; + logic [DW-1:0] prim_rdata; + logic prim_last; + logic prim_hld; + logic prim_err; + + + // Core AXI sub instance + axi_sub core_axi_sub #( + + ) ( + .clk (clk_i), + .rst_n (rst_ni), + .s_axi_w_if (s_core_axi_w_if), + .s_axi_r_if (s_core_axi_r_if), + .dv (core_dv), + .addr (core_addr), + .write (core_user), + .id (core_id), + .wdata (core_wdata), + .rdata (core_rdata), + .last (core_last), + .hld (core_hld), + .err (core_err) + ); + + // Prim AXI sub instance + axi_sub prim_axi_sub #( + + ) ( + .clk (clk_i), + .rst_n (rst_ni), + .s_axi_w_if (s_prim_axi_w_if), + .s_axi_r_if (s_prim_axi_r_if), + .dv (prim_dv), + .addr (prim_addr), + .write (prim_user), + .id (prim_id), + .wdata (prim_wdata), + .rdata (prim_rdata), + .last (prim_last), + .hld (prim_hld), + .err (prim_err) + ); + + // OTP Ctrl instance + otp_ctrl otp_ctrl #( + + ) ( + .clk_i, + .rst_ni, + .clk_edn_i, + .rst_edn_ni, + .edn_o, + .edn_i, + .core_dv (core_dv), + .core_addr (core_addr), + .core_write (core_write), + .core_wstrb (core_wstrb), + .core_id (core_id), + .core_wdata (core_wdata), + .core_rdata (core_rdata), + .core_last (core_last), + .core_hld (core_hld), + .core_err (core_err), + .prim_dv (prim_dv), + .prim_addr (prim_addr), + .prim_write (prim_write), + .prim_wstrb (prim_wstrb), + .prim_id (prim_id), + .prim_wdata (prim_wdata), + .prim_rdata (prim_rdata), + .prim_last (prim_last), + .prim_hld (prim_hld), + .prim_err (prim_err), + .intr_otp_operation_done_o, + .intr_otp_error_o, + .alert_rx_i, + .alert_rx_o, + .obs_ctrl_i, + .otp_obs_o, + .otp_ast_pwr_seq_o, + .otp_ast_pwr_seq_h_i, + .pwr_otp_i, + .pwr_otp_o, + .lc_otp_vendor_test_i, + .lc_otp_vendor_test_o, + .lc_otp_program_i, + .lc_otp_program_o, + .lc_creator_seed_sw_rw_en_i, + .lc_owner_seed_sw_rw_en_i, + .lc_seed_hw_rd_en_i, + .lc_dft_en_i, + .lc_escalate_en_i, + .lc_check_byp_en_i, + .otp_lc_data_o, + .otp_keymgr_key_o, + .flash_otp_key_i (), + .flash_otp_key_o (), + .sram_otp_key_i (), + .sram_otp_key_o (), + .otbn_otp_key_i (), + .otbn_otp_key_o (), + .otp_broadcast_o, + .otp_ext_voltage_h_io, + .scan_en_i, + .scan_rst_ni, + .scanmode_i, + .cio_test_o, + .cio_test_en_o + ); + +endmodule From e3ee607b817d7c85d9bd71ab022bf0e02569f510 Mon Sep 17 00:00:00 2001 From: Anjana Parthasarathy Date: Tue, 6 Aug 2024 17:32:29 -0700 Subject: [PATCH 53/58] Fixed filename typo in fuse_ctrl config --- src/fuse_ctrl/config/{config.yaml => compile.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/fuse_ctrl/config/{config.yaml => compile.yml} (100%) diff --git a/src/fuse_ctrl/config/config.yaml b/src/fuse_ctrl/config/compile.yml similarity index 100% rename from src/fuse_ctrl/config/config.yaml rename to src/fuse_ctrl/config/compile.yml From f7474f4e44f2560bdc21dc35ba6b3540f12cb239 Mon Sep 17 00:00:00 2001 From: Anjana Parthasarathy Date: Tue, 24 Sep 2024 10:45:06 -0700 Subject: [PATCH 54/58] Initial commit of AXI2TLUL gasket, fuse controller and basic verification testbenches for both --- src/ast/BUILD | 12 + src/ast/README.md | 305 + src/ast/ast.core | 130 + src/ast/ast_pkg.core | 20 + src/ast/ast_regs.html | 52 + src/ast/config/compile.yml | 16 + src/ast/data/BUILD | 30 + src/ast/data/ast.hjson | 621 + src/ast/data/ast_cdc_abstract.sgdc | 631 + src/ast/doc/ast_regs.html | 773 + src/ast/doc/interfaces.md | 129 + src/ast/doc/top_diagram.png | Bin 0 -> 37430 bytes src/ast/lib/ast.lib | 98919 ++++++++++++++++ src/ast/lint/ast.vbl | 16 + src/ast/lint/ast.vlt | 17 + src/ast/lint/ast.waiver | 377 + src/ast/rtl/adc.sv | 141 + src/ast/rtl/adc_ana.sv | 45 + src/ast/rtl/aon_clk.sv | 67 + src/ast/rtl/aon_osc.sv | 132 + src/ast/rtl/ast.sv | 1062 + src/ast/rtl/ast_alert.sv | 77 + src/ast/rtl/ast_bhv_pkg.sv | 50 + src/ast/rtl/ast_clks_byp.sv | 811 + src/ast/rtl/ast_dft.sv | 45 + src/ast/rtl/ast_entropy.sv | 125 + src/ast/rtl/ast_pkg.sv | 169 + src/ast/rtl/ast_pulse_sync.sv | 147 + src/ast/rtl/ast_reg_pkg.sv | 380 + src/ast/rtl/ast_reg_top.sv | 1969 + src/ast/rtl/dev_entropy.sv | 260 + src/ast/rtl/gfr_clk_mux2.sv | 118 + src/ast/rtl/io_clk.sv | 67 + src/ast/rtl/io_osc.sv | 131 + src/ast/rtl/rglts_pdm_3p3v.sv | 416 + src/ast/rtl/rng.sv | 161 + src/ast/rtl/sys_clk.sv | 69 + src/ast/rtl/sys_osc.sv | 158 + src/ast/rtl/usb_clk.sv | 147 + src/ast/rtl/usb_osc.sv | 183 + src/ast/rtl/vcaon_pgd.sv | 57 + src/ast/rtl/vcc_pgd.sv | 59 + src/ast/rtl/vcmain_pgd.sv | 57 + src/ast/rtl/vio_pgd.sv | 59 + src/axi/rtl/axi_if.sv | 3 +- src/axi/rtl/axi_pkg.sv | 21 +- src/axi/rtl/axi_sub.sv | 8 + src/axi/rtl/axi_sub_arb.sv | 4 + src/axi/rtl/axi_sub_rd.sv | 5 +- src/axi/rtl/axi_sub_wr.sv | 5 +- src/axi2tlul/config/compile.yml | 29 + src/axi2tlul/rtl/axi2tlul.sv | 133 + src/axi2tlul/rtl/axi2tlul_cmd_intg_gen.sv | 65 + src/axi2tlul/rtl/sub2tlul.sv | 131 + .../tests/directed/axi2tlul_basic_test.yml | 17 + src/axi2tlul/tb/axi2tlul_scoreboard.sv | 0 src/axi2tlul/tb/axi2tlul_tb.sv | 212 + .../tb/axi2tlul_tester.sv} | 17 +- src/axi2tlul/tb/axi_mgr.sv | 99 + src/axi2tlul/tb/memory_model.sv | 91 + src/axi2tlul/tb/tlul_dev.sv | 132 + src/caliptra_prim/config/compile.yml | 67 +- .../rtl/caliptra_prim_arbiter_fixed.sv | 170 + .../rtl/caliptra_prim_arbiter_tree.sv | 291 + src/caliptra_prim/rtl/caliptra_prim_assert.sv | 2 +- .../rtl/caliptra_prim_assert_sec_cm.svh | 2 +- .../rtl/caliptra_prim_blanker.sv | 5 +- src/caliptra_prim/rtl/caliptra_prim_count.sv | 46 +- .../rtl/caliptra_prim_double_lfsr.sv | 113 + .../rtl/caliptra_prim_edn_req.sv | 215 + .../rtl/caliptra_prim_lc_sender.sv | 68 + .../rtl/caliptra_prim_mubi8_sender.sv | 94 + .../rtl/caliptra_prim_mubi_pkg.sv | 5 + .../rtl/caliptra_prim_onehot_check.sv | 4 +- .../rtl/caliptra_prim_otp_pkg.sv | 50 + .../rtl/caliptra_prim_present.sv | 158 + .../rtl/caliptra_prim_ram_1p_adv.sv | 269 + .../rtl/caliptra_prim_ram_1p_pkg.sv | 20 + .../rtl/caliptra_prim_secded_22_16_dec.sv | 45 + .../rtl/caliptra_prim_secded_22_16_enc.sv | 22 + .../rtl/caliptra_prim_secded_28_22_dec.sv | 51 + .../rtl/caliptra_prim_secded_28_22_enc.sv | 22 + .../rtl/caliptra_prim_secded_39_32_dec.sv | 62 + .../rtl/caliptra_prim_secded_39_32_enc.sv | 23 + .../rtl/caliptra_prim_secded_64_57_dec.sv | 87 + .../rtl/caliptra_prim_secded_64_57_enc.sv | 23 + .../rtl/caliptra_prim_secded_72_64_dec.sv | 95 + .../rtl/caliptra_prim_secded_72_64_enc.sv | 24 + .../caliptra_prim_secded_hamming_22_16_dec.sv | 45 + .../caliptra_prim_secded_hamming_22_16_enc.sv | 22 + .../caliptra_prim_secded_hamming_39_32_dec.sv | 62 + .../caliptra_prim_secded_hamming_39_32_enc.sv | 23 + .../caliptra_prim_secded_hamming_72_64_dec.sv | 95 + .../caliptra_prim_secded_hamming_72_64_enc.sv | 24 + .../caliptra_prim_secded_hamming_76_68_dec.sv | 99 + .../caliptra_prim_secded_hamming_76_68_enc.sv | 24 + .../rtl/caliptra_prim_secded_inv_22_16_dec.sv | 45 + .../rtl/caliptra_prim_secded_inv_22_16_enc.sv | 23 + .../rtl/caliptra_prim_secded_inv_28_22_dec.sv | 51 + .../rtl/caliptra_prim_secded_inv_28_22_enc.sv | 23 + .../rtl/caliptra_prim_secded_inv_39_32_dec.sv | 62 + .../rtl/caliptra_prim_secded_inv_39_32_enc.sv | 24 + .../rtl/caliptra_prim_secded_inv_64_57_dec.sv | 87 + .../rtl/caliptra_prim_secded_inv_64_57_enc.sv | 24 + .../rtl/caliptra_prim_secded_inv_72_64_dec.sv | 95 + .../rtl/caliptra_prim_secded_inv_72_64_enc.sv | 25 + ...iptra_prim_secded_inv_hamming_22_16_dec.sv | 45 + ...iptra_prim_secded_inv_hamming_22_16_enc.sv | 23 + ...iptra_prim_secded_inv_hamming_39_32_dec.sv | 62 + ...iptra_prim_secded_inv_hamming_39_32_enc.sv | 24 + ...iptra_prim_secded_inv_hamming_72_64_dec.sv | 95 + ...iptra_prim_secded_inv_hamming_72_64_enc.sv | 25 + ...iptra_prim_secded_inv_hamming_76_68_dec.sv | 99 + ...iptra_prim_secded_inv_hamming_76_68_enc.sv | 25 + .../rtl/caliptra_prim_secded_pkg.sv | 1787 + src/caliptra_prim/rtl/caliptra_prim_subreg.sv | 17 +- .../rtl/caliptra_prim_subreg_arb.sv | 118 +- .../rtl/caliptra_prim_sync_reqack.sv | 404 + .../rtl/caliptra_prim_sync_reqack_data.sv | 178 + .../rtl/caliptra_prim_util_memload.svh | 68 + src/caliptra_prim_generic/config/compile.yml | 5 + .../rtl/caliptra_prim_generic_and2.sv | 17 + .../rtl/caliptra_prim_generic_otp.sv | 435 + .../rtl/caliptra_prim_generic_ram_1p.sv | 79 + src/edn/config/compile.yml | 4 + src/fuse_ctrl/config/compile.yml | 71 +- src/fuse_ctrl/data/otp-img.2048.vmem | 2057 + src/fuse_ctrl/data/otp_ctrl.hjson | 166 +- src/fuse_ctrl/data/otp_ctrl_img_dev.hjson | 75 + .../data/otp_ctrl_img_non_secret_fuses.hjson | 55 + src/fuse_ctrl/data/otp_ctrl_img_rma.hjson | 77 + src/fuse_ctrl/data/otp_ctrl_mmap.hjson | 57 +- src/fuse_ctrl/rtl/axi_adapter_sram.sv | 402 - .../rtl/caliptra_otp_ctrl_core_reg_top.sv | 536 +- ...t_pkg.sv => caliptra_otp_ctrl_part_pkg.sv} | 111 +- ...p_ctrl_pkg.sv => caliptra_otp_ctrl_pkg.sv} | 43 +- .../rtl/caliptra_otp_ctrl_prim_reg_top.sv | 176 +- .../rtl/caliptra_otp_ctrl_reg_pkg.sv | 206 +- src/fuse_ctrl/rtl/otp_ctrl.sv | 474 +- src/fuse_ctrl/rtl/otp_ctrl_axi_pkg.sv | 122 - src/fuse_ctrl/rtl/otp_ctrl_dai.sv | 80 +- src/fuse_ctrl/rtl/otp_ctrl_ecc_reg.sv | 22 +- src/fuse_ctrl/rtl/otp_ctrl_lci.sv | 42 +- src/fuse_ctrl/rtl/otp_ctrl_lfsr_timer.sv | 26 +- src/fuse_ctrl/rtl/otp_ctrl_part_buf.sv | 100 +- src/fuse_ctrl/rtl/otp_ctrl_part_unbuf.sv | 82 +- src/fuse_ctrl/rtl/otp_ctrl_scrmbl.sv | 40 +- src/fuse_ctrl/rtl/otp_ctrl_token_const.sv | 20 +- src/fuse_ctrl/rtl/otp_ctrl_top.sv | 174 +- .../directed/fuse_ctrl_sign_of_life_test.yml | 17 + src/fuse_ctrl/tb/otp_ctrl_if.sv | 327 + src/fuse_ctrl/tb/otp_ctrl_top_tb.sv | 589 + src/fuse_ctrl/tb/otp_ctrl_top_tb_pkg.sv | 206 + src/lc_ctrl/rtl/lc_ctrl_pkg.sv | 8 +- src/pwrmgr/BUILD | 12 + src/pwrmgr/README.md.tpl | 36 + src/pwrmgr/config/compile.yml | 15 + src/pwrmgr/data/BUILD | 30 + src/pwrmgr/data/pwrmgr.hjson | 577 + src/pwrmgr/data/pwrmgr.hjson.tpl | 807 + src/pwrmgr/data/pwrmgr.tpldesc.hjson | 56 + src/pwrmgr/data/pwrmgr_sec_cm_testplan.hjson | 219 + src/pwrmgr/data/pwrmgr_testplan.hjson | 372 + src/pwrmgr/doc/checklist.md | 266 + src/pwrmgr/doc/interfaces.md.tpl | 67 + src/pwrmgr/doc/programmers_guide.md | 63 + src/pwrmgr/doc/pwrmgr_connectivity.svg | 1 + src/pwrmgr/doc/pwrmgr_fsms.svg | 1 + src/pwrmgr/doc/registers.md.tpl | 435 + src/pwrmgr/doc/theory_of_operation.md | 304 + src/pwrmgr/dv/README.md.tpl | 255 + src/pwrmgr/dv/cov/pwrmgr_cov_bind.sv | 33 + src/pwrmgr/dv/cov/pwrmgr_cov_manual_excl.el | 34 + src/pwrmgr/dv/doc/tb.svg | 1 + src/pwrmgr/dv/env/pwrmgr_env.core | 55 + src/pwrmgr/dv/env/pwrmgr_env.sv | 57 + src/pwrmgr/dv/env/pwrmgr_env_cfg.sv | 52 + src/pwrmgr/dv/env/pwrmgr_env_cov.sv | 193 + src/pwrmgr/dv/env/pwrmgr_env_pkg.sv | 89 + src/pwrmgr/dv/env/pwrmgr_if.sv | 219 + src/pwrmgr/dv/env/pwrmgr_scoreboard.sv | 361 + src/pwrmgr/dv/env/pwrmgr_virtual_sequencer.sv | 14 + .../seq_lib/pwrmgr_aborted_low_power_vseq.sv | 126 + src/pwrmgr/dv/env/seq_lib/pwrmgr_base_vseq.sv | 835 + .../dv/env/seq_lib/pwrmgr_common_vseq.sv | 113 + ...pwrmgr_disable_rom_integrity_check_vseq.sv | 130 + .../pwrmgr_esc_clk_rst_malfunc_vseq.sv | 42 + .../seq_lib/pwrmgr_escalation_timeout_vseq.sv | 68 + .../dv/env/seq_lib/pwrmgr_glitch_vseq.sv | 42 + .../dv/env/seq_lib/pwrmgr_global_esc_vseq.sv | 63 + .../seq_lib/pwrmgr_lowpower_invalid_vseq.sv | 140 + .../pwrmgr_lowpower_wakeup_race_vseq.sv | 138 + .../pwrmgr_repeat_wakeup_reset_vseq.sv | 79 + .../env/seq_lib/pwrmgr_reset_invalid_vseq.sv | 129 + .../dv/env/seq_lib/pwrmgr_reset_vseq.sv | 77 + .../pwrmgr_sec_cm_ctrl_config_regwen_vseq.sv | 38 + .../dv/env/seq_lib/pwrmgr_smoke_vseq.sv | 90 + .../dv/env/seq_lib/pwrmgr_stress_all_vseq.sv | 42 + .../dv/env/seq_lib/pwrmgr_sw_reset_vseq.sv | 54 + src/pwrmgr/dv/env/seq_lib/pwrmgr_vseq_list.sv | 23 + .../seq_lib/pwrmgr_wakeup_reset_vseq.sv.tpl | 169 + .../dv/env/seq_lib/pwrmgr_wakeup_vseq.sv | 127 + src/pwrmgr/dv/pwrmgr_sim.core | 29 + src/pwrmgr/dv/pwrmgr_sim_cfg.hjson | 155 + src/pwrmgr/dv/sva/pwrmgr_ast_sva_if.sv | 145 + src/pwrmgr/dv/sva/pwrmgr_bind.sv | 87 + .../dv/sva/pwrmgr_clock_enables_sva_if.sv | 59 + src/pwrmgr/dv/sva/pwrmgr_rstmgr_sva_if.core | 19 + src/pwrmgr/dv/sva/pwrmgr_rstmgr_sva_if.sv | 49 + src/pwrmgr/dv/sva/pwrmgr_rstreqs_sva_if.sv | 102 + .../dv/sva/pwrmgr_sec_cm_checker_assert.sv | 132 + src/pwrmgr/dv/sva/pwrmgr_sva.core | 43 + src/pwrmgr/dv/tb.sv | 140 + src/pwrmgr/dv/tests/pwrmgr_base_test.sv | 20 + src/pwrmgr/dv/tests/pwrmgr_test.core | 19 + src/pwrmgr/dv/tests/pwrmgr_test_pkg.sv | 22 + src/pwrmgr/lint/pwrmgr.vlt | 5 + src/pwrmgr/lint/pwrmgr.waiver | 5 + src/pwrmgr/lint/pwrmgr_pkg.vlt | 12 + src/pwrmgr/pwrmgr.core.tpl | 66 + src/pwrmgr/pwrmgr_components.core | 80 + src/pwrmgr/pwrmgr_pkg.core.tpl | 31 + src/pwrmgr/pwrmgr_reg.core.tpl | 24 + src/pwrmgr/rtl/pwrmgr.sv | 737 + src/pwrmgr/rtl/pwrmgr_cdc.sv | 333 + src/pwrmgr/rtl/pwrmgr_cdc_pulse.sv | 91 + src/pwrmgr/rtl/pwrmgr_fsm.sv | 542 + src/pwrmgr/rtl/pwrmgr_pkg.sv | 282 + src/pwrmgr/rtl/pwrmgr_reg_pkg.sv | 279 + src/pwrmgr/rtl/pwrmgr_slow_fsm.sv | 358 + src/pwrmgr/rtl/pwrmgr_wake_info.sv | 74 + src/pwrmgr/util/reg_pwrmgr.py | 42 + src/tlul/BUILD | 12 + src/tlul/README.md | 694 + src/tlul/adapter_host.core | 64 + src/tlul/adapter_reg.core | 64 + src/tlul/adapter_sram.core | 64 + src/tlul/common.core | 51 + src/tlul/config/compile.yml | 47 + src/tlul/data/BUILD | 10 + src/tlul/data/tlul.prj.hjson | 31 + src/tlul/data/tlul_testplan.hjson | 81 + src/tlul/doc/TlulProtocolChecker.md | 222 + src/tlul/doc/dv/README.md | 124 + src/tlul/doc/dv/tb.svg | 1 + src/tlul/doc/tlul_adapter_sram.svg | 1 + src/tlul/doc/tlul_socket_1n.svg | 1 + src/tlul/doc/tlul_socket_m1.svg | 1 + src/tlul/generic_dv/README | 7 + .../seq_lib/xbar_access_same_device_vseq.sv | 39 + .../generic_dv/env/seq_lib/xbar_base_vseq.sv | 121 + .../env/seq_lib/xbar_random_vseq.sv | 34 + .../env/seq_lib/xbar_same_source_vseq.sv | 37 + .../env/seq_lib/xbar_seq_err_item.sv | 21 + .../generic_dv/env/seq_lib/xbar_smoke_vseq.sv | 19 + .../env/seq_lib/xbar_stress_all_vseq.sv | 64 + .../xbar_stress_all_with_rand_reset_vseq.sv | 65 + .../env/seq_lib/xbar_tl_host_seq.sv | 69 + .../env/seq_lib/xbar_unmapped_addr_vseq.sv | 19 + .../generic_dv/env/seq_lib/xbar_vseq_list.sv | 14 + src/tlul/generic_dv/env/xbar_env.core | 37 + src/tlul/generic_dv/env/xbar_env.sv | 100 + src/tlul/generic_dv/env/xbar_env_cfg.sv | 101 + src/tlul/generic_dv/env/xbar_env_cov.sv | 79 + src/tlul/generic_dv/env/xbar_env_pkg.sv | 71 + src/tlul/generic_dv/env/xbar_scoreboard.sv | 142 + .../generic_dv/env/xbar_virtual_sequencer.sv | 16 + src/tlul/generic_dv/tb/tb.sv | 27 + src/tlul/generic_dv/tb/xbar_macros.core | 17 + src/tlul/generic_dv/tb/xbar_macros.svh | 49 + src/tlul/generic_dv/tb/xbar_tb.core | 21 + src/tlul/generic_dv/tests/xbar_base_test.sv | 46 + src/tlul/generic_dv/tests/xbar_error_test.sv | 21 + src/tlul/generic_dv/tests/xbar_test.core | 20 + src/tlul/generic_dv/tests/xbar_test_pkg.sv | 19 + src/tlul/generic_dv/xbar_sim_cfg.hjson | 49 + src/tlul/generic_dv/xbar_tests.hjson | 210 + src/tlul/headers.core | 21 + src/tlul/lint/tlul_adapter_host.vlt | 4 + src/tlul/lint/tlul_adapter_host.waiver | 14 + src/tlul/lint/tlul_adapter_reg.vlt | 4 + src/tlul/lint/tlul_adapter_reg.waiver | 13 + src/tlul/lint/tlul_adapter_sram.vlt | 17 + src/tlul/lint/tlul_adapter_sram.waiver | 31 + src/tlul/lint/tlul_common.vlt | 13 + src/tlul/lint/tlul_common.waiver | 17 + src/tlul/lint/tlul_lc_gate.vlt | 24 + src/tlul/lint/tlul_socket_1n.vlt | 8 + src/tlul/lint/tlul_socket_1n.waiver | 23 + src/tlul/lint/tlul_socket_m1.vlt | 12 + src/tlul/lint/tlul_socket_m1.waiver | 17 + src/tlul/lint/tlul_sram2tlul.vlt | 4 + src/tlul/lint/tlul_sram2tlul.waiver | 15 + src/tlul/rtl/sram2tlul.sv | 62 + src/tlul/rtl/tlul_adapter_host.sv | 189 + src/tlul/rtl/tlul_adapter_reg.sv | 237 + src/tlul/rtl/tlul_adapter_sram.sv | 559 + src/tlul/rtl/tlul_assert.sv | 437 + src/tlul/rtl/tlul_assert_multiple.sv | 31 + src/tlul/rtl/tlul_cmd_intg_chk.sv | 53 + src/tlul/rtl/tlul_cmd_intg_gen.sv | 58 + src/tlul/rtl/tlul_data_integ_dec.sv | 27 + src/tlul/rtl/tlul_data_integ_enc.sv | 22 + src/tlul/rtl/tlul_err.sv | 103 + src/tlul/rtl/tlul_err_resp.sv | 77 + src/tlul/rtl/tlul_fifo_async.sv | 98 + src/tlul/rtl/tlul_fifo_sync.sv | 99 + .../rtl/tlul_lc_gate.sv} | 172 +- src/tlul/rtl/tlul_pkg.sv | 221 + src/tlul/rtl/tlul_rsp_intg_chk.sv | 54 + src/tlul/rtl/tlul_rsp_intg_gen.sv | 59 + src/tlul/rtl/tlul_socket_1n.sv | 255 + src/tlul/rtl/tlul_socket_m1.sv | 260 + src/tlul/rtl/tlul_sram_byte.sv | 328 + src/tlul/socket_1n.core | 64 + src/tlul/socket_m1.core | 64 + src/tlul/sram2tlul.core | 62 + src/tlul/tlul.core | 21 + src/tlul/tlul_lc_gate.core | 63 + src/tlul/trans_intg.core | 64 + 320 files changed, 139288 insertions(+), 1760 deletions(-) create mode 100644 src/ast/BUILD create mode 100644 src/ast/README.md create mode 100644 src/ast/ast.core create mode 100644 src/ast/ast_pkg.core create mode 100644 src/ast/ast_regs.html create mode 100644 src/ast/config/compile.yml create mode 100644 src/ast/data/BUILD create mode 100644 src/ast/data/ast.hjson create mode 100644 src/ast/data/ast_cdc_abstract.sgdc create mode 100644 src/ast/doc/ast_regs.html create mode 100644 src/ast/doc/interfaces.md create mode 100644 src/ast/doc/top_diagram.png create mode 100644 src/ast/lib/ast.lib create mode 100644 src/ast/lint/ast.vbl create mode 100644 src/ast/lint/ast.vlt create mode 100644 src/ast/lint/ast.waiver create mode 100644 src/ast/rtl/adc.sv create mode 100644 src/ast/rtl/adc_ana.sv create mode 100644 src/ast/rtl/aon_clk.sv create mode 100644 src/ast/rtl/aon_osc.sv create mode 100644 src/ast/rtl/ast.sv create mode 100644 src/ast/rtl/ast_alert.sv create mode 100644 src/ast/rtl/ast_bhv_pkg.sv create mode 100644 src/ast/rtl/ast_clks_byp.sv create mode 100644 src/ast/rtl/ast_dft.sv create mode 100644 src/ast/rtl/ast_entropy.sv create mode 100644 src/ast/rtl/ast_pkg.sv create mode 100644 src/ast/rtl/ast_pulse_sync.sv create mode 100644 src/ast/rtl/ast_reg_pkg.sv create mode 100644 src/ast/rtl/ast_reg_top.sv create mode 100644 src/ast/rtl/dev_entropy.sv create mode 100644 src/ast/rtl/gfr_clk_mux2.sv create mode 100644 src/ast/rtl/io_clk.sv create mode 100644 src/ast/rtl/io_osc.sv create mode 100644 src/ast/rtl/rglts_pdm_3p3v.sv create mode 100644 src/ast/rtl/rng.sv create mode 100644 src/ast/rtl/sys_clk.sv create mode 100644 src/ast/rtl/sys_osc.sv create mode 100644 src/ast/rtl/usb_clk.sv create mode 100644 src/ast/rtl/usb_osc.sv create mode 100644 src/ast/rtl/vcaon_pgd.sv create mode 100644 src/ast/rtl/vcc_pgd.sv create mode 100644 src/ast/rtl/vcmain_pgd.sv create mode 100644 src/ast/rtl/vio_pgd.sv create mode 100644 src/axi2tlul/config/compile.yml create mode 100644 src/axi2tlul/rtl/axi2tlul.sv create mode 100644 src/axi2tlul/rtl/axi2tlul_cmd_intg_gen.sv create mode 100644 src/axi2tlul/rtl/sub2tlul.sv create mode 100644 src/axi2tlul/stimulus/tests/directed/axi2tlul_basic_test.yml create mode 100644 src/axi2tlul/tb/axi2tlul_scoreboard.sv create mode 100644 src/axi2tlul/tb/axi2tlul_tb.sv rename src/{fuse_ctrl/rtl/axi_sram_byte.sv => axi2tlul/tb/axi2tlul_tester.sv} (52%) create mode 100644 src/axi2tlul/tb/axi_mgr.sv create mode 100644 src/axi2tlul/tb/memory_model.sv create mode 100644 src/axi2tlul/tb/tlul_dev.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_arbiter_fixed.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_arbiter_tree.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_double_lfsr.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_edn_req.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_lc_sender.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_mubi8_sender.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_otp_pkg.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_present.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_ram_1p_adv.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_ram_1p_pkg.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_22_16_dec.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_22_16_enc.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_28_22_dec.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_28_22_enc.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_39_32_dec.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_39_32_enc.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_64_57_dec.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_64_57_enc.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_72_64_dec.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_72_64_enc.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_hamming_22_16_dec.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_hamming_22_16_enc.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_hamming_39_32_dec.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_hamming_39_32_enc.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_hamming_72_64_dec.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_hamming_72_64_enc.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_hamming_76_68_dec.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_hamming_76_68_enc.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_inv_22_16_dec.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_inv_22_16_enc.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_inv_28_22_dec.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_inv_28_22_enc.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_inv_39_32_dec.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_inv_39_32_enc.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_inv_64_57_dec.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_inv_64_57_enc.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_inv_72_64_dec.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_inv_72_64_enc.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_22_16_dec.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_22_16_enc.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_39_32_dec.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_39_32_enc.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_72_64_dec.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_72_64_enc.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_76_68_dec.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_76_68_enc.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_secded_pkg.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_sync_reqack.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_sync_reqack_data.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_util_memload.svh create mode 100644 src/caliptra_prim_generic/rtl/caliptra_prim_generic_and2.sv create mode 100644 src/caliptra_prim_generic/rtl/caliptra_prim_generic_otp.sv create mode 100644 src/caliptra_prim_generic/rtl/caliptra_prim_generic_ram_1p.sv create mode 100644 src/fuse_ctrl/data/otp-img.2048.vmem create mode 100644 src/fuse_ctrl/data/otp_ctrl_img_dev.hjson create mode 100644 src/fuse_ctrl/data/otp_ctrl_img_non_secret_fuses.hjson create mode 100644 src/fuse_ctrl/data/otp_ctrl_img_rma.hjson delete mode 100644 src/fuse_ctrl/rtl/axi_adapter_sram.sv rename src/fuse_ctrl/rtl/{otp_ctrl_part_pkg.sv => caliptra_otp_ctrl_part_pkg.sv} (81%) rename src/fuse_ctrl/rtl/{otp_ctrl_pkg.sv => caliptra_otp_ctrl_pkg.sv} (89%) delete mode 100644 src/fuse_ctrl/rtl/otp_ctrl_axi_pkg.sv create mode 100644 src/fuse_ctrl/stimulus/tests/directed/fuse_ctrl_sign_of_life_test.yml create mode 100755 src/fuse_ctrl/tb/otp_ctrl_if.sv create mode 100644 src/fuse_ctrl/tb/otp_ctrl_top_tb.sv create mode 100644 src/fuse_ctrl/tb/otp_ctrl_top_tb_pkg.sv create mode 100644 src/pwrmgr/BUILD create mode 100644 src/pwrmgr/README.md.tpl create mode 100644 src/pwrmgr/config/compile.yml create mode 100644 src/pwrmgr/data/BUILD create mode 100644 src/pwrmgr/data/pwrmgr.hjson create mode 100644 src/pwrmgr/data/pwrmgr.hjson.tpl create mode 100644 src/pwrmgr/data/pwrmgr.tpldesc.hjson create mode 100644 src/pwrmgr/data/pwrmgr_sec_cm_testplan.hjson create mode 100644 src/pwrmgr/data/pwrmgr_testplan.hjson create mode 100644 src/pwrmgr/doc/checklist.md create mode 100644 src/pwrmgr/doc/interfaces.md.tpl create mode 100644 src/pwrmgr/doc/programmers_guide.md create mode 100644 src/pwrmgr/doc/pwrmgr_connectivity.svg create mode 100644 src/pwrmgr/doc/pwrmgr_fsms.svg create mode 100644 src/pwrmgr/doc/registers.md.tpl create mode 100644 src/pwrmgr/doc/theory_of_operation.md create mode 100644 src/pwrmgr/dv/README.md.tpl create mode 100644 src/pwrmgr/dv/cov/pwrmgr_cov_bind.sv create mode 100644 src/pwrmgr/dv/cov/pwrmgr_cov_manual_excl.el create mode 100644 src/pwrmgr/dv/doc/tb.svg create mode 100644 src/pwrmgr/dv/env/pwrmgr_env.core create mode 100644 src/pwrmgr/dv/env/pwrmgr_env.sv create mode 100644 src/pwrmgr/dv/env/pwrmgr_env_cfg.sv create mode 100644 src/pwrmgr/dv/env/pwrmgr_env_cov.sv create mode 100644 src/pwrmgr/dv/env/pwrmgr_env_pkg.sv create mode 100644 src/pwrmgr/dv/env/pwrmgr_if.sv create mode 100644 src/pwrmgr/dv/env/pwrmgr_scoreboard.sv create mode 100644 src/pwrmgr/dv/env/pwrmgr_virtual_sequencer.sv create mode 100644 src/pwrmgr/dv/env/seq_lib/pwrmgr_aborted_low_power_vseq.sv create mode 100644 src/pwrmgr/dv/env/seq_lib/pwrmgr_base_vseq.sv create mode 100644 src/pwrmgr/dv/env/seq_lib/pwrmgr_common_vseq.sv create mode 100644 src/pwrmgr/dv/env/seq_lib/pwrmgr_disable_rom_integrity_check_vseq.sv create mode 100644 src/pwrmgr/dv/env/seq_lib/pwrmgr_esc_clk_rst_malfunc_vseq.sv create mode 100644 src/pwrmgr/dv/env/seq_lib/pwrmgr_escalation_timeout_vseq.sv create mode 100644 src/pwrmgr/dv/env/seq_lib/pwrmgr_glitch_vseq.sv create mode 100644 src/pwrmgr/dv/env/seq_lib/pwrmgr_global_esc_vseq.sv create mode 100644 src/pwrmgr/dv/env/seq_lib/pwrmgr_lowpower_invalid_vseq.sv create mode 100644 src/pwrmgr/dv/env/seq_lib/pwrmgr_lowpower_wakeup_race_vseq.sv create mode 100644 src/pwrmgr/dv/env/seq_lib/pwrmgr_repeat_wakeup_reset_vseq.sv create mode 100644 src/pwrmgr/dv/env/seq_lib/pwrmgr_reset_invalid_vseq.sv create mode 100644 src/pwrmgr/dv/env/seq_lib/pwrmgr_reset_vseq.sv create mode 100644 src/pwrmgr/dv/env/seq_lib/pwrmgr_sec_cm_ctrl_config_regwen_vseq.sv create mode 100644 src/pwrmgr/dv/env/seq_lib/pwrmgr_smoke_vseq.sv create mode 100644 src/pwrmgr/dv/env/seq_lib/pwrmgr_stress_all_vseq.sv create mode 100644 src/pwrmgr/dv/env/seq_lib/pwrmgr_sw_reset_vseq.sv create mode 100644 src/pwrmgr/dv/env/seq_lib/pwrmgr_vseq_list.sv create mode 100644 src/pwrmgr/dv/env/seq_lib/pwrmgr_wakeup_reset_vseq.sv.tpl create mode 100644 src/pwrmgr/dv/env/seq_lib/pwrmgr_wakeup_vseq.sv create mode 100644 src/pwrmgr/dv/pwrmgr_sim.core create mode 100644 src/pwrmgr/dv/pwrmgr_sim_cfg.hjson create mode 100644 src/pwrmgr/dv/sva/pwrmgr_ast_sva_if.sv create mode 100644 src/pwrmgr/dv/sva/pwrmgr_bind.sv create mode 100644 src/pwrmgr/dv/sva/pwrmgr_clock_enables_sva_if.sv create mode 100644 src/pwrmgr/dv/sva/pwrmgr_rstmgr_sva_if.core create mode 100644 src/pwrmgr/dv/sva/pwrmgr_rstmgr_sva_if.sv create mode 100644 src/pwrmgr/dv/sva/pwrmgr_rstreqs_sva_if.sv create mode 100644 src/pwrmgr/dv/sva/pwrmgr_sec_cm_checker_assert.sv create mode 100644 src/pwrmgr/dv/sva/pwrmgr_sva.core create mode 100644 src/pwrmgr/dv/tb.sv create mode 100644 src/pwrmgr/dv/tests/pwrmgr_base_test.sv create mode 100644 src/pwrmgr/dv/tests/pwrmgr_test.core create mode 100644 src/pwrmgr/dv/tests/pwrmgr_test_pkg.sv create mode 100644 src/pwrmgr/lint/pwrmgr.vlt create mode 100644 src/pwrmgr/lint/pwrmgr.waiver create mode 100644 src/pwrmgr/lint/pwrmgr_pkg.vlt create mode 100644 src/pwrmgr/pwrmgr.core.tpl create mode 100644 src/pwrmgr/pwrmgr_components.core create mode 100644 src/pwrmgr/pwrmgr_pkg.core.tpl create mode 100644 src/pwrmgr/pwrmgr_reg.core.tpl create mode 100644 src/pwrmgr/rtl/pwrmgr.sv create mode 100644 src/pwrmgr/rtl/pwrmgr_cdc.sv create mode 100644 src/pwrmgr/rtl/pwrmgr_cdc_pulse.sv create mode 100644 src/pwrmgr/rtl/pwrmgr_fsm.sv create mode 100644 src/pwrmgr/rtl/pwrmgr_pkg.sv create mode 100644 src/pwrmgr/rtl/pwrmgr_reg_pkg.sv create mode 100644 src/pwrmgr/rtl/pwrmgr_slow_fsm.sv create mode 100644 src/pwrmgr/rtl/pwrmgr_wake_info.sv create mode 100755 src/pwrmgr/util/reg_pwrmgr.py create mode 100644 src/tlul/BUILD create mode 100644 src/tlul/README.md create mode 100644 src/tlul/adapter_host.core create mode 100644 src/tlul/adapter_reg.core create mode 100644 src/tlul/adapter_sram.core create mode 100644 src/tlul/common.core create mode 100644 src/tlul/config/compile.yml create mode 100644 src/tlul/data/BUILD create mode 100644 src/tlul/data/tlul.prj.hjson create mode 100644 src/tlul/data/tlul_testplan.hjson create mode 100644 src/tlul/doc/TlulProtocolChecker.md create mode 100644 src/tlul/doc/dv/README.md create mode 100644 src/tlul/doc/dv/tb.svg create mode 100644 src/tlul/doc/tlul_adapter_sram.svg create mode 100644 src/tlul/doc/tlul_socket_1n.svg create mode 100644 src/tlul/doc/tlul_socket_m1.svg create mode 100644 src/tlul/generic_dv/README create mode 100644 src/tlul/generic_dv/env/seq_lib/xbar_access_same_device_vseq.sv create mode 100644 src/tlul/generic_dv/env/seq_lib/xbar_base_vseq.sv create mode 100644 src/tlul/generic_dv/env/seq_lib/xbar_random_vseq.sv create mode 100644 src/tlul/generic_dv/env/seq_lib/xbar_same_source_vseq.sv create mode 100644 src/tlul/generic_dv/env/seq_lib/xbar_seq_err_item.sv create mode 100644 src/tlul/generic_dv/env/seq_lib/xbar_smoke_vseq.sv create mode 100644 src/tlul/generic_dv/env/seq_lib/xbar_stress_all_vseq.sv create mode 100644 src/tlul/generic_dv/env/seq_lib/xbar_stress_all_with_rand_reset_vseq.sv create mode 100644 src/tlul/generic_dv/env/seq_lib/xbar_tl_host_seq.sv create mode 100644 src/tlul/generic_dv/env/seq_lib/xbar_unmapped_addr_vseq.sv create mode 100644 src/tlul/generic_dv/env/seq_lib/xbar_vseq_list.sv create mode 100644 src/tlul/generic_dv/env/xbar_env.core create mode 100644 src/tlul/generic_dv/env/xbar_env.sv create mode 100644 src/tlul/generic_dv/env/xbar_env_cfg.sv create mode 100644 src/tlul/generic_dv/env/xbar_env_cov.sv create mode 100644 src/tlul/generic_dv/env/xbar_env_pkg.sv create mode 100644 src/tlul/generic_dv/env/xbar_scoreboard.sv create mode 100644 src/tlul/generic_dv/env/xbar_virtual_sequencer.sv create mode 100644 src/tlul/generic_dv/tb/tb.sv create mode 100644 src/tlul/generic_dv/tb/xbar_macros.core create mode 100644 src/tlul/generic_dv/tb/xbar_macros.svh create mode 100644 src/tlul/generic_dv/tb/xbar_tb.core create mode 100644 src/tlul/generic_dv/tests/xbar_base_test.sv create mode 100644 src/tlul/generic_dv/tests/xbar_error_test.sv create mode 100644 src/tlul/generic_dv/tests/xbar_test.core create mode 100644 src/tlul/generic_dv/tests/xbar_test_pkg.sv create mode 100644 src/tlul/generic_dv/xbar_sim_cfg.hjson create mode 100644 src/tlul/generic_dv/xbar_tests.hjson create mode 100644 src/tlul/headers.core create mode 100644 src/tlul/lint/tlul_adapter_host.vlt create mode 100644 src/tlul/lint/tlul_adapter_host.waiver create mode 100644 src/tlul/lint/tlul_adapter_reg.vlt create mode 100644 src/tlul/lint/tlul_adapter_reg.waiver create mode 100644 src/tlul/lint/tlul_adapter_sram.vlt create mode 100644 src/tlul/lint/tlul_adapter_sram.waiver create mode 100644 src/tlul/lint/tlul_common.vlt create mode 100644 src/tlul/lint/tlul_common.waiver create mode 100644 src/tlul/lint/tlul_lc_gate.vlt create mode 100644 src/tlul/lint/tlul_socket_1n.vlt create mode 100644 src/tlul/lint/tlul_socket_1n.waiver create mode 100644 src/tlul/lint/tlul_socket_m1.vlt create mode 100644 src/tlul/lint/tlul_socket_m1.waiver create mode 100644 src/tlul/lint/tlul_sram2tlul.vlt create mode 100644 src/tlul/lint/tlul_sram2tlul.waiver create mode 100644 src/tlul/rtl/sram2tlul.sv create mode 100644 src/tlul/rtl/tlul_adapter_host.sv create mode 100644 src/tlul/rtl/tlul_adapter_reg.sv create mode 100644 src/tlul/rtl/tlul_adapter_sram.sv create mode 100644 src/tlul/rtl/tlul_assert.sv create mode 100644 src/tlul/rtl/tlul_assert_multiple.sv create mode 100644 src/tlul/rtl/tlul_cmd_intg_chk.sv create mode 100644 src/tlul/rtl/tlul_cmd_intg_gen.sv create mode 100644 src/tlul/rtl/tlul_data_integ_dec.sv create mode 100644 src/tlul/rtl/tlul_data_integ_enc.sv create mode 100644 src/tlul/rtl/tlul_err.sv create mode 100644 src/tlul/rtl/tlul_err_resp.sv create mode 100644 src/tlul/rtl/tlul_fifo_async.sv create mode 100644 src/tlul/rtl/tlul_fifo_sync.sv rename src/{fuse_ctrl/rtl/axi_lc_gate.sv => tlul/rtl/tlul_lc_gate.sv} (51%) create mode 100644 src/tlul/rtl/tlul_pkg.sv create mode 100644 src/tlul/rtl/tlul_rsp_intg_chk.sv create mode 100644 src/tlul/rtl/tlul_rsp_intg_gen.sv create mode 100644 src/tlul/rtl/tlul_socket_1n.sv create mode 100644 src/tlul/rtl/tlul_socket_m1.sv create mode 100644 src/tlul/rtl/tlul_sram_byte.sv create mode 100644 src/tlul/socket_1n.core create mode 100644 src/tlul/socket_m1.core create mode 100644 src/tlul/sram2tlul.core create mode 100644 src/tlul/tlul.core create mode 100644 src/tlul/tlul_lc_gate.core create mode 100644 src/tlul/trans_intg.core diff --git a/src/ast/BUILD b/src/ast/BUILD new file mode 100644 index 000000000..fdcf97416 --- /dev/null +++ b/src/ast/BUILD @@ -0,0 +1,12 @@ +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 + +package(default_visibility = ["//visibility:public"]) + +filegroup( + name = "all_files", + srcs = glob(["**"]) + [ + "//hw/top_earlgrey/ip/ast/data:all_files", + ], +) diff --git a/src/ast/README.md b/src/ast/README.md new file mode 100644 index 000000000..85ac71039 --- /dev/null +++ b/src/ast/README.md @@ -0,0 +1,305 @@ +# Analog Sensor Top Technical Specification + +Analog Sensor Top, also known as the AST, is the OpenTitan analog and +security companion. Within the AST are various analog functions (such as +clocks, regulators, random number generators) needed to make the device +function, as well as physical security sensors necessary to protect the +device from physical attacks or manipulation. + +At a high level, AST communicates with a number of OpenTitan comportable +modules. See the diagram below for an overview. + +![Analog Sensor Top Diagram](./doc/top_diagram.png) + +In the following sections, each family of connections is briefly +described and explained. Note, the analog connections to AST are not +shown in the diagram, but will be explained as well. + +# Interface Signals Table + +See the table [here](./doc/interfaces.md). + +# Interfaces Description Note + +The information below augments the [Interface Signals Table](./doc/interfaces.md). +For further details, see the corresponding signals description in the +table. + +# Power Connectivity + +Note: Power signals may not appear in the verilog files, however, they +are described for completeness. + +## External Supplies + +AST has four external power supplies VCC, AVCC, VIOA and VIOB. VCC is +the main supply, AVCC is an analog VCC supply. VIOA and VIOB are two +additional I/O supplies. + +## Core Supplies + +The core supplies are generated from the VCC supply. There are two core +supply domains: VCMAIN and VCAON. VCAON, as its name implies, is the +always-on core supply used to power components that stay active during +device low power states. VCMAIN on the other hand, powers most chip +logic such as RISC-V processor, crypto modules and almost all memories +and peripherals. The VCMAIN supply can be turned off when requested, +VCAON on the other hand, is active whenever VCC is active. AST core +logic is powered by VCAON. + +# Power Control and Reset + +## Core Power Control and Indication + +VCMAIN is the only supply that can be directly influenced by OpenTitan. +The power manager can request VCMAIN to shutdown through main_pd_ni. The +state of VCMAIN is reflected by the vcmain_pok_o signal. + +## IO Power Indication + +IO power state is reflected to OpenTitan by vioa_pok_o and viob_pok_o +signals + +## Main (VCC) Power Detection and Flash Protection + +On VCC power-down detection, 'flash_power_ready_h_o', is +immediately negated. In addition, SYS clock, IO clock and USB clock are +stopped. This means that negation of the VCC supply always triggers the +flash brown-out (BOR) protection circuitry. + +When entering deep-sleep mode, 'flash_power_down_h_o' is +asserted before negating VCMAIN until VCMAIN is back up. + +## Resets + +The AST supports the generation of the root reset for the reset manager. +It is driven by 'vcaon_pok_o' which is generated inside AST. +The 'vcaon_pok_o' is activated when the following conditions +are met: VCC is detected, internal voltage regulator is active and +'por_ni' reset input is inactive. 'por_ni' is +driven by an external chip reset pin. The following table and diagrams +describe the AST sub-modules resets. + +| **Components** | **Reset by** | **Comments** | +|--------------------------------------------------|--------------------------|------------------------------------------------------------------------------------------------------------------------------------------| +| Regulators, 'power-OK' logic and always-on clock | self-start / vcaon_pok_o | These circuits come to life shortly after VCC crosses its detection threshold. vcaon_pok_o serves as their register configuration reset. | +| System/USB/IO clock generators | vcmain_pok_o | vcmain_pok_o is also fed by vcaon_pok_o and por_ni. | +| Interface functions | Input reset | Per the corresponding interface [clock domain reset input](#clock-and-reset-inputs). | + +# Clock Outputs + +AST generates four clocks: System clock, IO clock, USB clock and +Always-on clock. Most clocks have 'enable' inputs and a +corresponding 'valid' output. When the enable is +de-asserted, the corresponding clock stops and valid is dropped to 0. +When the enable is asserted, the clocks begin outputting in a +'glitchless' manner and the valid is raised to 1. Unless +noted otherwise, clocks duty cycle is 50% +/-5%. At boot time, clocks +start toggling at a different (typically slower) frequency than their +target. They are configured to their target frequency by the ROM code. +Once configured, their frequency is maintained within +/-3% of their +target as long as the chip remains in its intended operating conditions +until the next boot. + +The OpenTitan power and clock managers are responsible for manipulating +the enables and observing the valids to know when clocks can be safely +released to the system. + +## USB Clock Calibration + +The USB clock requires an accuracy that cannot be achieved by the AST +clocks natively. As a result, information from USB frames are used to +[calibrate the +clock](../../../ip/usbdev/README.md#clocking). + +# Clock and Reset Inputs + +The root clocks and resets are generated inside AST. However, the clocks +go through gating and optional division in the OpenTitan top level and +propagate back into AST as feedback clocks, each with associated +synchronized reset de-assertion to ensure it can synchronize with the +various comportable modules. The input resets are used for the different +AST interface functions. For further details about AST resets, see +[Resets](#resets) section. + +Note: There are several reasons for routing leaf clocks back into AST +instead of using the root clocks directly + +- The leaf clocks may be divided down from the root clock and that + frequency is used to drive the interface. For example, + clk_src_io_clk_o is 96MHz, but comportable modules use either 48MHz + or 24MHz. + +- The leaf clocks and root clocks have very different clock tree depths + and may be difficult for timing closure if they interacted directly. + +- Decouple AST internal design from OpenTitan top-level interfaces clock + and reset selection. + +# Register Access Interface + +AST registers can be accessed via TL-UL interface. These registers are +used for test and calibration purposes and are not required for runtime +operation. See the [Interface Signals +Table](#interface-signals-table) for more details. + +## AST registers initialization during boot. + +In PROD*/DEV Lifecycle states, the ROM code must copy all AST REGA +registers values from OTP to AST. During other Lifecycle states, the ROM +code may also copy all AST REGA registers. It is recommended for the +ROM code to condition the copy by a digest verification of the register +values. If such a digest is too complicated, a simple tag can be used to +condition the copy instead. The AST register copy operation must be +performed in order and must include all REGA registers (starting from +REGA0 and ending at the last REGA). AST sets the ast_init_done_o signal +after the copy completion. + +After the copy, ROM code can either poll for ast_init_done_o assertion +with 100 us timeout (in practice, it should take way less) or ignore it +and let the next SW layers handle it. It is recommended to set an OTP +field for determining the ROM code action. + +The boot code is expected to check all AST output alert signals before +handing over the control to the next code layer (ROM_EXT). The ROM code +response per alert should be defined in a dedicated OTP space. +Recommended response types (per alert): + +1. Do nothing and don't clear the event + +2. Do nothing (continue to the next SW layer) and clear the event + +3. Log the event in some NV space and halt + +4. Halt immediately + +Note that in TEST_UNLOCK*/RMA state, the booter should always act per +#1 regardless of the OTP setting. + +It is recommended to redundantly code the OTP fields that control the +ROM code branching and also to protect the branching code from fault +injection. + +# ADC + +AST contains an analog to digital converter that can be used to sample +various input signals. For OpenTitan this will primarily be used for +[debug cable detection](https://www.sparkfun.com/products/14746). +To activate the ADC, the corresponding [comportable +module](../../../ip/adc_ctrl/README.md) must first +activate the ADC through 'adc_pd_i'. Once activated, it should select +the channel to sample. Channel transition from zero to non-zero value +starts the ADC conversion. The ADC output is synchronous to the ADC +controller. + +## ADC Usage Flow + +1. Activate the ADC by negating 'adc_pd_i' + +2. Wait 30 uS for the ADC to wake up. + +3. Select an analog channel to measure by setting the corresponding bit + in 'adc_chnsel_i' bus. This triggers a measurement. + +4. Wait until 'adc_d_val' is set and read the result via + 'adc_d_o' + +5. Clear 'adc_chnsel_i' bus to 0. Note that adc_chnsel must + be cleared to 0 before a new channel is selected. + +6. Repeat steps 3-5 if more channels or more measurements are required + +7. Deactivate the ADC by setting 'adc_pd_i' to save power. + +```wavejson +{ signal: [ {node: '.a..b........', phase:0.2}, +{name: 'adc_pd_i' , wave: '10|..|.....|....|..1'}, {name: +'clk_ast_adc_i', wave: 'p.|..|.....|....|...'}, {name: +'adc_chnsel_i' , wave: '0.|.3|..04.|....|0..'}, {name: +'adc_d_val_o' , wave: '0.|..|.1.0.|.1..|.0.'}, {name: 'adc_d_o' , +wave: 'x.|..|.3.x.|.4..|.x.', data: ['ch0', 'ch1', 'ch1']}, ], +edge: [ 'a<->b wakeup time', ] } +``` + +# Random Number Generator + +AST contains a random number generator that outputs random number +bitstreams whenever it is enabled. After enabled by the [comportable +controller](../../../ip/entropy_src/README.md) +through 'rng_en_i', the AST begins generating multiple +independent four random bit streams. rng_b_o bit streams are valid and +can be sampled whenever 'rng_val_o' is asserted according to the +following diagram. + +```wavejson +{signal: [ {name: 'clk' , wave: +'p.|......|......|......'}, {name: 'rng_enable' , wave: +'01|......|......|......'}, {name: 'rng_valid' , wave: +'0.|..10..|..10..|..10..'}, {name: 'rng_b' , wave: +'x.|..3...|..4...|..5.....', data: ['es0','es1','es2']}, ]} +``` + +The expected rng_b_o valid output rate is about 50KHz. For more +information on the RNG interface, please see the [OpenTitan entropy +source module](../../../ip/entropy_src/README.md). + +# Entropy Consumption + +AST consumes entropy for defensive purposes. However, AST does not +consume its raw entropy directly. Instead, AST receives entropy from the +[Entropy Distribution Network +(EDN)](../../../ip/edn/README.md). Note +that entropy_ack and entropy_i are packed into enropy_rsp_i in the +interface. Also note that once entropy_req_o is set, it will remain set +until ack or until reset. + +```wavejson +{signal: [ + +{name: 'clk_ast_es_i' , wave: 'p.|..........'}, + +{name: 'entropy_req_o' , wave: '01|.0.1.....0'}, + +{name: 'entropy_ack_i' , wave: '0.|10.1.01..0'}, + +{name: 'entropy_i' , wave: 'xx|2x.22x222x'}, + +] } +``` + +# Countermeasures and Alerts + +## Alert Events + +AST's sensors and detectors, when triggered, output alert events +to a sensor controller. The event signals are level until acknowledged +by the controller. Further, the events are differentially encoded to +ensure they cannot be hard-wired or faulted to either '1' or +'0'. + +Inside the sensor controller, the events are then converted into alerts +as part of the wider [OpenTitan alert handling +system](../../ip_autogen/alert_handler/README.md). + +## Alert Signaling + +Outgoing alert events are level. Incoming event ack signals clear the +alert event (similar to an interrupt). Outgoing alert events should be +OR'd inside the sensor or power manager (depending on what level of deep +sleep support is needed) to generate wakeup, that way AST does not need +to do any additional handling for wakeups during low power mode. + +The AST defines each alert signal in both positive (P) and negative (N) +polarity (see ast_dif_t typedef with 'p' and 'n' +signals), however, the P and N signals are not necessarily fully +differential, for example, at times, it might occur that both P and N +are at the same value. For alert_o case, the correct way to treat it is +to propagate an alert signal if either P is high or N is low. + +## Countermeasures + +Most countermeasure enablement is controlled by Nuvoton via the +registers interface. Clock jitter is an exception because there is a +reasoning for dynamically turning it on and off (security/performance +tradeoff). Unless stated otherwise, countermeasures are active in all +modes but deep-sleep. diff --git a/src/ast/ast.core b/src/ast/ast.core new file mode 100644 index 000000000..c37f2a785 --- /dev/null +++ b/src/ast/ast.core @@ -0,0 +1,130 @@ +CAPI=2: +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +name: "lowrisc:systems:ast:0.1" +description: "Analog Sensor Top generic views" +filesets: + files_rtl: + depend: + - lowrisc:ip:tlul + - lowrisc:prim:all + - lowrisc:prim:clock_buf + - lowrisc:prim:clock_div + - lowrisc:prim:clock_gating + - lowrisc:prim:clock_inv + - lowrisc:prim:lc_dec + - lowrisc:prim:lfsr + - lowrisc:ip:pinmux_reg + - lowrisc:ip:pinmux_component + - lowrisc:prim:assert + - lowrisc:prim:prim_pkg + - lowrisc:prim:mubi + - lowrisc:prim:multibit_sync + - lowrisc:ip:lc_ctrl_pkg + - lowrisc:ip:edn_pkg + - lowrisc:ip_interfaces:alert_handler_reg + - lowrisc:ip_interfaces:clkmgr_pkg + - lowrisc:ip_interfaces:rstmgr_pkg + files: + - rtl/ast_reg_pkg.sv + - rtl/ast_pkg.sv + - rtl/ast_bhv_pkg.sv + - rtl/ast.sv + - rtl/ast_reg_top.sv + - rtl/adc.sv + - rtl/adc_ana.sv + - rtl/vcc_pgd.sv + - rtl/vio_pgd.sv + - rtl/vcaon_pgd.sv + - rtl/vcmain_pgd.sv + - rtl/ast_alert.sv + - rtl/aon_clk.sv + - rtl/aon_osc.sv + - rtl/io_clk.sv + - rtl/io_osc.sv + - rtl/sys_clk.sv + - rtl/sys_osc.sv + - rtl/usb_clk.sv + - rtl/usb_osc.sv + - rtl/gfr_clk_mux2.sv + - rtl/ast_clks_byp.sv + - rtl/rglts_pdm_3p3v.sv + - rtl/ast_pulse_sync.sv + - rtl/ast_entropy.sv + - rtl/dev_entropy.sv + - rtl/rng.sv + - rtl/ast_dft.sv + file_type: systemVerilogSource + + files_verilator_waiver: + depend: + # common waivers + - lowrisc:lint:common + files: + - lint/ast.vlt + file_type: vlt + + files_ascentlint_waiver: + depend: + # common waivers + - lowrisc:lint:common + files: + - lint/ast.waiver + file_type: waiver + + files_veriblelint_waiver: + depend: + # common waivers + - lowrisc:lint:common + files: + - lint/ast.vbl + file_type: veribleLintWaiver + + +parameters: + SYNTHESIS: + datatype: bool + paramtype: vlogdefine + AST_BYPASS_CLK: + datatype: bool + paramtype: vlogdefine + ANALOGSIM: + datatype: bool + paramtype: vlogdefine + + +targets: + default: &default_target + filesets: + - tool_verilator ? (files_verilator_waiver) + - tool_ascentlint ? (files_ascentlint_waiver) + - tool_veriblelint ? (files_veriblelint_waiver) + - files_rtl + toplevel: ast + parameters: + - SYNTHESIS + - AST_BYPASS_CLK + - ANALOGSIM + + + lint: + <<: *default_target + default_tool: verilator + parameters: + - SYNTHESIS=true + tools: + verilator: + mode: lint-only + verilator_options: + - "-Wall" + + sim: + <<: *default_target + default_tool: vcs + filesets: + - files_rtl + tools: + vcs: + vcs_options: [-sverilog -ntb_opts uvm-1.2 -CFLAGS --std=c99 -CFLAGS -fno-extended-identifiers -CFLAGS --std=c++11 -timescale=1ns/1ps -l vcs.log] + toplevel: ast diff --git a/src/ast/ast_pkg.core b/src/ast/ast_pkg.core new file mode 100644 index 000000000..63703cbff --- /dev/null +++ b/src/ast/ast_pkg.core @@ -0,0 +1,20 @@ +CAPI=2: +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +name: "lowrisc:systems:ast_pkg" +description: "Analog sensor top (AST) wrapper package" + +filesets: + files_rtl: + depend: + - lowrisc:constants:top_pkg + - lowrisc:ip:lc_ctrl_pkg + files: + - rtl/ast_pkg.sv + file_type: systemVerilogSource + +targets: + default: + filesets: + - files_rtl diff --git a/src/ast/ast_regs.html b/src/ast/ast_regs.html new file mode 100644 index 000000000..0abde5782 --- /dev/null +++ b/src/ast/ast_regs.html @@ -0,0 +1,52 @@ + + + + + +
+
ast.REVID @ 0x0
+

AST Revision Identification Register
+Reset: TLUL Reset

+
Reset default = 0x1, mask 0xff
+
+ + + +
31302928272625242322212019181716
 
1514131211109876543210
 REVID
BitsTypeResetNameDescription
7:0ro0x1REVID

Revision

+
+ + + + + +
+
ast.RWTYPE0 @ 0x4
+

RW type with one field

+
Reset default = 0xbc614e, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
RWTYPE0...
1514131211109876543210
...RWTYPE0
BitsTypeResetNameDescription
31:0rw0xbc614eRWTYPE0

field description

+
+ + + + + +
+
ast.RWTYPE1 @ 0x8
+

RW type +with long +description +and multiple fields

+
Reset default = 0x6411, mask 0xff13
+
+ + + + + + + +
31302928272625242322212019181716
 
1514131211109876543210
FIELD15_8 FIELD4 FIELD1FIELD0
BitsTypeResetNameDescription
0rw0x1FIELD0

field 0

1rw0x0FIELD1

field 1

3:2Reserved
4rw0x1FIELD4

field 4

7:5Reserved
15:8rw0x64FIELD15_8

field [15:8]

+
diff --git a/src/ast/config/compile.yml b/src/ast/config/compile.yml new file mode 100644 index 000000000..f790a232b --- /dev/null +++ b/src/ast/config/compile.yml @@ -0,0 +1,16 @@ +--- +provides: [ast_pkg] +schema_version: 2.4.0 +requires: +targets: + rtl: + directories: [$COMPILE_ROOT/rtl] + files: + - $COMPILE_ROOT/rtl/ast_pkg.sv + #- $COMPILE_ROOT/rtl/ast_bhv_pkg.sv + #- $COMPILE_ROOT/rtl/ast_reg_pkg.sv + tb: + directories: [$COMPILE_ROOT/rtl] + files: + - $COMPILE_ROOT/rtl/ast_pkg.sv + diff --git a/src/ast/data/BUILD b/src/ast/data/BUILD new file mode 100644 index 000000000..d71fefb56 --- /dev/null +++ b/src/ast/data/BUILD @@ -0,0 +1,30 @@ +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 + +package(default_visibility = ["//visibility:public"]) + +load( + "//rules:autogen.bzl", + "autogen_hjson_c_header", + "autogen_hjson_rust_header", +) + +autogen_hjson_c_header( + name = "ast_c_regs", + srcs = [ + "ast.hjson", + ], +) + +autogen_hjson_rust_header( + name = "ast_rust_regs", + srcs = [ + "ast.hjson", + ], +) + +filegroup( + name = "all_files", + srcs = glob(["**"]), +) diff --git a/src/ast/data/ast.hjson b/src/ast/data/ast.hjson new file mode 100644 index 000000000..d21b49491 --- /dev/null +++ b/src/ast/data/ast.hjson @@ -0,0 +1,621 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +//############################################################################# +// *Name: ast +// *Module Description: Analog Sensors Top Registers +//############################################################################# +{ name: "ast", + // Unique comportable IP identifier defined under KNOWN_CIP_IDS in the regtool. + cip_id: "34", + design_spec: "../doc", + dv_doc: "", + hw_checklist: "", + sw_checklist: "", + version: "1.0.0", + life_stage: "L1", + design_stage: "D2", + verification_stage: "V2S", + dif_stage: "", + clocking: [ + { clock: "clk_ast_tlul_i", reset: "rst_ast_tlul_ni", primary: true }, + { clock: "clk_ast_adc_i", reset: "rst_ast_adc_ni"}, + { clock: "clk_ast_alert_i", reset: "rst_ast_alert_ni"}, + { clock: "clk_ast_es_i", reset: "rst_ast_es_ni"}, + { clock: "clk_ast_rng_i", reset: "rst_ast_rng_ni"}, + { clock: "clk_ast_usb_i", reset: "rst_ast_usb_ni"}, + ], + bus_interfaces: [ + { protocol: "tlul", + direction: "device" + } + ], + no_auto_alert_regs: "True", + param_list: [ + { name: "NumRegsB", + desc: "Number of registers in the Array-B", + type: "int", + default: "5", + local: "true", + }, + { name: "NumUsbBeaconPulses", + desc: "Number of USB valid beacon pulses for clock to re-calibrate", + type: "int", + default: "8", + local: "true" + }, + ], + regwidth: "32", + registers: [ + { name: "REGA0", + desc: "AST Register 0 for OTP/ROM Write Testing", + swaccess: "ro", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclAll" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x00", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA1", + desc: "AST 1 Register for OTP/ROM Write Testing", + swaccess: "ro", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclAll" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x01", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA2", + desc: "AST 2 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x02", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA3", + desc: "AST 3 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x03", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA4", + desc: "AST 4 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x04", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA5", + desc: "AST 5 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x05", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA6", + desc: "AST 6 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x06", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA7", + desc: "AST 7 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x07", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA8", + desc: "AST 8 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x08", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA9", + desc: "AST 9 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x09", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA10", + desc: "AST 10 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x0A", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA11", + desc: "AST 11 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x0B", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA12", + desc: "AST 13 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x0C", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA13", + desc: "AST 13 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x0D", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA14", + desc: "AST 14 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x0E", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA15", + desc: "AST 15 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x0F", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA16", + desc: "AST 16 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x10", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA17", + desc: "AST 17 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x11", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA18", + desc: "AST 18 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x12", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA19", + desc: "AST 19 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x13", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA20", + desc: "AST 20 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x14", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA21", + desc: "AST 21 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x15", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA22", + desc: "AST 22 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x16", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA23", + desc: "AST 23 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x17", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA24", + desc: "AST 24 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x18", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA25", + desc: "AST 25 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x19", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA26", + desc: "AST 26 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x1A", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA27", + desc: "AST 27 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x1B", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA28", + desc: "AST 28 Register for OTP/ROM Write Testing", + swaccess: "ro", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x1C", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA29", + desc: "AST 29 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x1D", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA30", + desc: "AST 30 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x1E", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA31", + desc: "AST 31 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x1F", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA32", + desc: "AST 32 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x20", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA33", + desc: "AST 33 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x21", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA34", + desc: "AST 34 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x22", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA35", + desc: "AST 35 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x23", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA36", + desc: "AST 36 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x24", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGA37", + desc: "AST 37 Register for OTP/ROM Write Testing", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclWrite" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x25", + }, + ], + }, //---------------------------------------------------------------------- + { name: "REGAL", + desc: "AST Last Register for OTP/ROM Write Testing", + swaccess: "wo", + hwaccess: "hrw", + hwext: "true", + hwqe: "true", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclAll" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0x26", + }, + ], + }, //---------------------------------------------------------------------- + /////////////////////////////////////////////////////////////////////////// + { skipto: "0x200" } + /////////////////////////////////////////////////////////////////////////// + { multireg: + { + name: "REGB", + desc: "AST Registers Array-B to set address space size", + count: "NumRegsB", + cname: "REGB", + swaccess: "rw", + hwaccess: "hro", + tags: [ // don't write random data to any of the AST registers + "excl:CsrAllTests:CsrExclAll" ], + fields: [ + { bits: "31:0", + name: "reg32", + desc: "32-bit Register", + resval: "0", + }, + ], + }, + }, //---------------------------------------------------------------------- + ], +} diff --git a/src/ast/data/ast_cdc_abstract.sgdc b/src/ast/data/ast_cdc_abstract.sgdc new file mode 100644 index 000000000..c8fe774ef --- /dev/null +++ b/src/ast/data/ast_cdc_abstract.sgdc @@ -0,0 +1,631 @@ +################################################################################ +# +# This file has been generated by SpyGlass: +# File Created by: ngotliv +# File Created on: Thu May 19 11:20:01 2022 +# Working Directory: /tanap1/proj_cd14/opentitan/ngotliv/nightly_220518/nuvoton/top/spyglass +# File Location : ./ast_cdc/ast/cdc/cdc_abstract/spyglass_reports/abstract_view/ast_AdcChannels_2_AdcDataWidth_10_Ast2PadOutWidth_9_Entro_1_cdc_abstract.sgdc +# SpyGlass Version : SpyGlass_vR-2020.12-1 +# Policy Name : clock-reset +# Comment : Generated by rule Ac_abstract01 +# +################################################################################ +if { $::sg_use_cdc_abstract_view == 1 } { + abstract_file -version 5.1.0 -scope cdc + + current_design "ast" -def_param + +################################################################# +# abstract_port constraints # +################################################################# + +abstract_port -path_logic combo -ports "otp_power_seq_h_o[0]" -related_ports otp_power_seq_i[0] +abstract_port -path_logic combo -ports "otp_power_seq_h_o[1]" -related_ports otp_power_seq_i[1] +abstract_port -path_logic combo -ports "obs_ctrl_o[obmsl][0]" -related_ports padmux2ast_i[4] +abstract_port -path_logic combo -ports "obs_ctrl_o[obmsl][1]" -related_ports padmux2ast_i[5] +abstract_port -path_logic combo -ports "obs_ctrl_o[obmsl][2]" -related_ports padmux2ast_i[6] +abstract_port -path_logic combo -ports "obs_ctrl_o[obmsl][3]" -related_ports padmux2ast_i[7] +abstract_port -path_logic combo -ports "obs_ctrl_o[obgsl][0]" -related_ports padmux2ast_i[0] +abstract_port -path_logic combo -ports "obs_ctrl_o[obgsl][1]" -related_ports padmux2ast_i[1] +abstract_port -path_logic combo -ports "obs_ctrl_o[obgsl][2]" -related_ports padmux2ast_i[2] +abstract_port -path_logic combo -ports "obs_ctrl_o[obgsl][3]" -related_ports padmux2ast_i[3] + +################################################################# +# clock constraints # +################################################################# + + +# Clock constraint is not generated. + + +################################################################# +# set_case_analysis constraints # +################################################################# + +set_case_analysis -name "tl_o[d_user][rsp_intg][6]" -value 0 +set_case_analysis -name "tl_o[d_sink][0]" -value 0 +set_case_analysis -name "tl_o[d_param][0]" -value 0 +set_case_analysis -name "tl_o[d_param][1]" -value 0 +set_case_analysis -name "tl_o[d_param][2]" -value 0 +set_case_analysis -name "tl_o[d_opcode][1]" -value 0 +set_case_analysis -name "tl_o[d_opcode][2]" -value 0 + +################################################################# +# reset constraints # +################################################################# + +reset -name "tl_o[a_ready]" -value 1 +reset -name "tl_o[d_valid]" -value 0 +reset -name "ast_pwst_o[main_pok]" -value 0 +reset -name "ast_pwst_o[vcc_pok]" -value 0 +reset -name "ast_pwst_h_o[main_pok]" -value 0 +reset -name "ast_pwst_h_o[vcc_pok]" -value 0 +reset -name "flash_power_ready_h_o" -value 0 + +# Synchronous reset constraint is not generated. + + +################################################################# +# quasi_static constraints # +################################################################# + +quasi_static -name "ast2padmux_o[0]" +quasi_static -name "ast2padmux_o[1]" +quasi_static -name "ast2padmux_o[2]" +quasi_static -name "ast2padmux_o[3]" +quasi_static -name "ast2padmux_o[4]" +quasi_static -name "ast2padmux_o[5]" +quasi_static -name "ast2padmux_o[6]" +quasi_static -name "ast2padmux_o[7]" +quasi_static -name "ast2padmux_o[8]" +quasi_static -name "ast2pad_t0_ao" +quasi_static -name "ast2pad_t1_ao" +quasi_static -name "dft_scan_md_o[0]" +quasi_static -name "dft_scan_md_o[1]" +quasi_static -name "dft_scan_md_o[2]" +quasi_static -name "dft_scan_md_o[3]" + +################################################################# +# abstract_port constraints # +################################################################# + +abstract_port -ports "adc_d_o" -scope cdc -clock "clk_ast_adc_i" -related_ports "adc_pd_i" "adc_chnsel_i" +abstract_port -ports "adc_d_val_o" -scope cdc -clock "clk_ast_adc_i" -related_ports "adc_pd_i" "adc_chnsel_i" +abstract_port -ports "alert_req_o[alerts][0][n]" -scope cdc -clock "clk_ast_alert_i" -related_ports "alert_rsp_i[alerts_trig][0][n]" "alert_rsp_i[alerts_ack][0][n]" +abstract_port -ports "alert_req_o[alerts][0][p]" -scope cdc -clock "clk_ast_alert_i" -related_ports "alert_rsp_i[alerts_trig][0][p]" "alert_rsp_i[alerts_ack][0][p]" +abstract_port -ports "alert_req_o[alerts][1][n]" -scope cdc -clock "clk_ast_alert_i" -related_ports "alert_rsp_i[alerts_trig][1][n]" "alert_rsp_i[alerts_ack][1][n]" +abstract_port -ports "alert_req_o[alerts][1][p]" -scope cdc -clock "clk_ast_alert_i" -related_ports "alert_rsp_i[alerts_trig][1][p]" "alert_rsp_i[alerts_ack][1][p]" +abstract_port -ports "alert_req_o[alerts][2][n]" -scope cdc -clock "clk_ast_alert_i" -related_ports "alert_rsp_i[alerts_trig][2][n]" "alert_rsp_i[alerts_ack][2][n]" +abstract_port -ports "alert_req_o[alerts][2][p]" -scope cdc -clock "clk_ast_alert_i" -related_ports "alert_rsp_i[alerts_trig][2][p]" "alert_rsp_i[alerts_ack][2][p]" +abstract_port -ports "alert_req_o[alerts][3][n]" -scope cdc -clock "clk_ast_alert_i" -related_ports "alert_rsp_i[alerts_trig][3][n]" "alert_rsp_i[alerts_ack][3][n]" +abstract_port -ports "alert_req_o[alerts][3][p]" -scope cdc -clock "clk_ast_alert_i" -related_ports "alert_rsp_i[alerts_trig][3][p]" "alert_rsp_i[alerts_ack][3][p]" +abstract_port -ports "alert_req_o[alerts][4][n]" -scope cdc -clock "clk_ast_alert_i" -related_ports "alert_rsp_i[alerts_trig][4][n]" "alert_rsp_i[alerts_ack][4][n]" +abstract_port -ports "alert_req_o[alerts][4][p]" -scope cdc -clock "clk_ast_alert_i" -related_ports "alert_rsp_i[alerts_trig][4][p]" "alert_rsp_i[alerts_ack][4][p]" +abstract_port -ports "alert_req_o[alerts][5][n]" -scope cdc -clock "clk_ast_alert_i" -related_ports "alert_rsp_i[alerts_trig][5][n]" "alert_rsp_i[alerts_ack][5][n]" +abstract_port -ports "alert_req_o[alerts][5][p]" -scope cdc -clock "clk_ast_alert_i" -related_ports "alert_rsp_i[alerts_trig][5][p]" "alert_rsp_i[alerts_ack][5][p]" +abstract_port -ports "alert_req_o[alerts][6][n]" -scope cdc -clock "clk_ast_alert_i" -related_ports "alert_rsp_i[alerts_trig][6][n]" "alert_rsp_i[alerts_ack][6][n]" +abstract_port -ports "alert_req_o[alerts][6][p]" -scope cdc -clock "clk_ast_alert_i" -related_ports "alert_rsp_i[alerts_trig][6][p]" "alert_rsp_i[alerts_ack][6][p]" +abstract_port -ports "alert_req_o[alerts][7][n]" -scope cdc -clock "clk_ast_alert_i" -related_ports "alert_rsp_i[alerts_trig][7][n]" "alert_rsp_i[alerts_ack][7][n]" +abstract_port -ports "alert_req_o[alerts][7][p]" -scope cdc -clock "clk_ast_alert_i" -related_ports "alert_rsp_i[alerts_trig][7][p]" "alert_rsp_i[alerts_ack][7][p]" +abstract_port -ports "alert_req_o[alerts][8][n]" -scope cdc -clock "clk_ast_alert_i" -related_ports "alert_rsp_i[alerts_trig][8][n]" "alert_rsp_i[alerts_ack][8][n]" +abstract_port -ports "alert_req_o[alerts][8][p]" -scope cdc -clock "clk_ast_alert_i" -related_ports "alert_rsp_i[alerts_trig][8][p]" "alert_rsp_i[alerts_ack][8][p]" +abstract_port -ports "alert_req_o[alerts][9][n]" -scope cdc -clock "clk_ast_alert_i" -related_ports "alert_rsp_i[alerts_trig][9][n]" "alert_rsp_i[alerts_ack][9][n]" +abstract_port -ports "alert_req_o[alerts][9][p]" -scope cdc -clock "clk_ast_alert_i" -related_ports "alert_rsp_i[alerts_trig][9][p]" "alert_rsp_i[alerts_ack][9][p]" +abstract_port -ports "alert_req_o[alerts][10][n]" -scope cdc -clock "clk_ast_alert_i" -related_ports "alert_rsp_i[alerts_trig][10][n]" "alert_rsp_i[alerts_ack][10][n]" +abstract_port -ports "alert_req_o[alerts][10][p]" -scope cdc -clock "clk_ast_alert_i" -related_ports "alert_rsp_i[alerts_trig][10][p]" "alert_rsp_i[alerts_ack][10][p]" +abstract_port -ports "alert_req_o[alerts][11][n]" -scope cdc -clock "clk_ast_alert_i" -related_ports "alert_rsp_i[alerts_trig][11][n]" "alert_rsp_i[alerts_ack][11][n]" +abstract_port -ports "alert_req_o[alerts][11][p]" -scope cdc -clock "clk_ast_alert_i" -related_ports "alert_rsp_i[alerts_trig][11][p]" "alert_rsp_i[alerts_ack][11][p]" +abstract_port -ports "alert_req_o[alerts][12][n]" -scope cdc -clock "clk_ast_alert_i" -related_ports "alert_rsp_i[alerts_trig][12][n]" "alert_rsp_i[alerts_ack][12][n]" +abstract_port -ports "alert_req_o[alerts][12][p]" -scope cdc -clock "clk_ast_alert_i" -related_ports "alert_rsp_i[alerts_trig][12][p]" "alert_rsp_i[alerts_ack][12][p]" +abstract_port -ports "entropy_req_o[edn_req]" -scope cdc -clock "clk_ast_es_i" -related_ports "entropy_rsp_i[edn_ack]" +abstract_port -ports "tl_o[a_ready]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_error]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_user][rsp_intg][2]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_user][rsp_intg][3]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_size][0]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_user][rsp_intg][4]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_size][1]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_user][rsp_intg][5]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_data][0]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" "dft_strap_test_i[straps][0]" "dft_strap_test_i[straps][1]" "dft_strap_test_i[valid]" +abstract_port -ports "tl_o[d_data][1]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" "dft_strap_test_i[straps][0]" "dft_strap_test_i[straps][1]" "dft_strap_test_i[valid]" +abstract_port -ports "tl_o[d_data][2]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" "dft_strap_test_i[straps][0]" "dft_strap_test_i[straps][1]" "dft_strap_test_i[valid]" +abstract_port -ports "tl_o[d_data][3]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" "dft_strap_test_i[straps][0]" "dft_strap_test_i[straps][1]" "dft_strap_test_i[valid]" +abstract_port -ports "tl_o[d_data][4]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" "dft_strap_test_i[straps][0]" "dft_strap_test_i[straps][1]" "dft_strap_test_i[valid]" +abstract_port -ports "tl_o[d_data][5]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_data][6]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" "fla_alert_src_i[n]" "fla_alert_src_i[p]" +abstract_port -ports "tl_o[d_data][7]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" "otp_alert_src_i[n]" "otp_alert_src_i[p]" +abstract_port -ports "tl_o[d_data][8]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_data][9]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_data][10]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_data][11]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_data][12]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_data][13]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_data][14]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_data][15]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_data][16]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_data][17]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_data][18]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_data][19]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_data][20]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_data][21]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_data][22]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_data][23]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_data][24]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_data][25]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_data][26]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_data][27]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_data][28]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_data][29]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_data][30]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_data][31]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_source][0]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_source][0]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_source][1]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_source][1]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_source][2]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_source][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_source][3]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_source][3]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_source][4]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_source][4]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_source][5]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_source][5]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_source][6]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_source][6]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_source][7]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_source][7]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_size][0]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_size][0]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_size][1]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_size][1]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_opcode][0]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_valid]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_user][data_intg][0]" -scope cdc -clock "clk_ast_tlul_i" -combo yes -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" "dft_strap_test_i[straps][0]" "dft_strap_test_i[straps][1]" "dft_strap_test_i[valid]" +abstract_port -ports "tl_o[d_user][data_intg][1]" -scope cdc -clock "clk_ast_tlul_i" -combo yes -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" "fla_alert_src_i[n]" "fla_alert_src_i[p]" "dft_strap_test_i[straps][0]" "dft_strap_test_i[straps][1]" "dft_strap_test_i[valid]" +abstract_port -ports "tl_o[d_user][data_intg][2]" -scope cdc -clock "clk_ast_tlul_i" -combo yes -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" "otp_alert_src_i[n]" "otp_alert_src_i[p]" "dft_strap_test_i[straps][0]" "dft_strap_test_i[straps][1]" "dft_strap_test_i[valid]" +abstract_port -ports "tl_o[d_user][data_intg][3]" -scope cdc -clock "clk_ast_tlul_i" -combo yes -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" "fla_alert_src_i[n]" "fla_alert_src_i[p]" "otp_alert_src_i[n]" "otp_alert_src_i[p]" "dft_strap_test_i[straps][0]" "dft_strap_test_i[straps][1]" "dft_strap_test_i[valid]" +abstract_port -ports "tl_o[d_user][data_intg][4]" -scope cdc -clock "clk_ast_tlul_i" -combo yes -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" "dft_strap_test_i[straps][0]" "dft_strap_test_i[straps][1]" "dft_strap_test_i[valid]" +abstract_port -ports "tl_o[d_user][data_intg][5]" -scope cdc -clock "clk_ast_tlul_i" -combo yes -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" "fla_alert_src_i[n]" "fla_alert_src_i[p]" "dft_strap_test_i[straps][0]" "dft_strap_test_i[straps][1]" "dft_strap_test_i[valid]" +abstract_port -ports "tl_o[d_user][data_intg][6]" -scope cdc -clock "clk_ast_tlul_i" -combo yes -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" "otp_alert_src_i[n]" "otp_alert_src_i[p]" "dft_strap_test_i[straps][0]" "dft_strap_test_i[straps][1]" "dft_strap_test_i[valid]" +abstract_port -ports "tl_o[d_user][rsp_intg][0]" -scope cdc -clock "clk_ast_tlul_i" -combo yes -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "tl_o[d_user][rsp_intg][1]" -scope cdc -clock "clk_ast_tlul_i" -combo yes -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "ast_init_done_o" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "usb_io_pu_cal_o" -scope cdc -clock "clk_ast_tlul_i" -combo yes -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "obs_ctrl_o[obmen][0]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "obs_ctrl_o[obmen][1]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "obs_ctrl_o[obmen][2]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "obs_ctrl_o[obmen][3]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "obs_ctrl_o[obmsl][0]" -scope cdc -clock "clk_ast_tlul_i" -combo yes -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "obs_ctrl_o[obmsl][1]" -scope cdc -clock "clk_ast_tlul_i" -combo yes -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "obs_ctrl_o[obmsl][2]" -scope cdc -clock "clk_ast_tlul_i" -combo yes -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "obs_ctrl_o[obmsl][3]" -scope cdc -clock "clk_ast_tlul_i" -combo yes -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "obs_ctrl_o[obgsl][0]" -scope cdc -clock "clk_ast_tlul_i" -combo yes -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "obs_ctrl_o[obgsl][1]" -scope cdc -clock "clk_ast_tlul_i" -combo yes -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "obs_ctrl_o[obgsl][2]" -scope cdc -clock "clk_ast_tlul_i" -combo yes -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "obs_ctrl_o[obgsl][3]" -scope cdc -clock "clk_ast_tlul_i" -combo yes -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "flash_bist_en_o" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "dpram_rmf_o[marg_b][0]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "dpram_rmf_o[marg_b][1]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "dpram_rmf_o[marg_b][2]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "dpram_rmf_o[marg_b][3]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "dpram_rmf_o[marg_en_b]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "dpram_rmf_o[marg_a][0]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "dpram_rmf_o[marg_a][1]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "dpram_rmf_o[marg_a][2]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "dpram_rmf_o[marg_a][3]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "dpram_rmf_o[marg_en_a]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "dpram_rml_o[marg_b][0]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "dpram_rml_o[marg_b][1]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "dpram_rml_o[marg_b][2]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "dpram_rml_o[marg_b][3]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "dpram_rml_o[marg_en_b]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "dpram_rml_o[marg_a][0]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "dpram_rml_o[marg_a][1]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "dpram_rml_o[marg_a][2]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "dpram_rml_o[marg_a][3]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "dpram_rml_o[marg_en_a]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "spram_rm_o[marg][0]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "spram_rm_o[marg][1]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "spram_rm_o[marg][2]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "spram_rm_o[marg][3]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "spram_rm_o[marg_en]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "sprgf_rm_o[marg][0]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "sprgf_rm_o[marg][1]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "sprgf_rm_o[marg][2]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "sprgf_rm_o[marg][3]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "sprgf_rm_o[marg_en]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "sprom_rm_o[marg][0]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "sprom_rm_o[marg][1]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "sprom_rm_o[marg][2]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "sprom_rm_o[marg][3]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "sprom_rm_o[marg_en]" -scope cdc -clock "clk_ast_tlul_i" -related_ports "tl_i[d_ready]" "tl_i[a_user][data_intg][0]" "tl_i[a_user][data_intg][1]" "tl_i[a_user][data_intg][2]" "tl_i[a_user][data_intg][3]" "tl_i[a_user][data_intg][4]" "tl_i[a_user][data_intg][5]" "tl_i[a_user][data_intg][6]" "tl_i[a_user][cmd_intg][0]" "tl_i[a_user][cmd_intg][1]" "tl_i[a_user][cmd_intg][2]" "tl_i[a_user][cmd_intg][3]" "tl_i[a_user][cmd_intg][4]" "tl_i[a_user][cmd_intg][5]" "tl_i[a_user][cmd_intg][6]" "tl_i[a_user][instr_type][0]" "tl_i[a_user][instr_type][1]" "tl_i[a_user][instr_type][2]" "tl_i[a_user][instr_type][3]" "tl_i[a_data][0]" "tl_i[a_data][1]" "tl_i[a_data][2]" "tl_i[a_data][3]" "tl_i[a_data][4]" "tl_i[a_data][5]" "tl_i[a_data][6]" "tl_i[a_data][7]" "tl_i[a_data][8]" "tl_i[a_data][9]" "tl_i[a_data][10]" "tl_i[a_data][11]" "tl_i[a_data][12]" "tl_i[a_data][13]" "tl_i[a_data][14]" "tl_i[a_data][15]" "tl_i[a_data][16]" "tl_i[a_data][17]" "tl_i[a_data][18]" "tl_i[a_data][19]" "tl_i[a_data][20]" "tl_i[a_data][21]" "tl_i[a_data][22]" "tl_i[a_data][23]" "tl_i[a_data][24]" "tl_i[a_data][25]" "tl_i[a_data][26]" "tl_i[a_data][27]" "tl_i[a_data][28]" "tl_i[a_data][29]" "tl_i[a_data][30]" "tl_i[a_data][31]" "tl_i[a_mask][0]" "tl_i[a_mask][1]" "tl_i[a_mask][2]" "tl_i[a_mask][3]" "tl_i[a_address][0]" "tl_i[a_address][1]" "tl_i[a_address][2]" "tl_i[a_address][3]" "tl_i[a_address][4]" "tl_i[a_address][5]" "tl_i[a_address][6]" "tl_i[a_address][7]" "tl_i[a_address][8]" "tl_i[a_address][9]" "tl_i[a_address][10]" "tl_i[a_address][11]" "tl_i[a_address][12]" "tl_i[a_address][13]" "tl_i[a_address][14]" "tl_i[a_address][15]" "tl_i[a_address][16]" "tl_i[a_address][17]" "tl_i[a_address][18]" "tl_i[a_address][19]" "tl_i[a_address][20]" "tl_i[a_address][21]" "tl_i[a_address][22]" "tl_i[a_address][23]" "tl_i[a_address][24]" "tl_i[a_address][25]" "tl_i[a_address][26]" "tl_i[a_address][27]" "tl_i[a_address][28]" "tl_i[a_address][29]" "tl_i[a_address][30]" "tl_i[a_address][31]" "tl_i[a_size][0]" "tl_i[a_size][1]" "tl_i[a_opcode][0]" "tl_i[a_opcode][1]" "tl_i[a_opcode][2]" "tl_i[a_valid]" +abstract_port -ports "ast_pwst_o[vcc_pok]" -scope cdc -clock "clk_src_aon_o" +abstract_port -ports "ast_pwst_o[aon_pok]" -scope cdc -clock "clk_src_aon_o" -related_ports "main_pd_ni" +abstract_port -ports "ast_pwst_o[main_pok]" -scope cdc -clock "clk_src_aon_o" -combo yes -related_ports "main_pd_ni" +abstract_port -ports "ast_pwst_h_o[vcc_pok]" -scope cdc -clock "clk_src_aon_o" +abstract_port -ports "ast_pwst_h_o[aon_pok]" -scope cdc -clock "clk_src_aon_o" -related_ports "main_pd_ni" +abstract_port -ports "ast_pwst_h_o[main_pok]" -scope cdc -clock "clk_src_aon_o" -combo yes -related_ports "main_pd_ni" +abstract_port -ports "flash_power_down_h_o" -scope cdc -clock "clk_src_aon_o" +abstract_port -ports "otp_power_seq_h_o" -scope cdc -clock "clk_src_aon_o" +abstract_port -ports "clk_src_aon_val_o" -scope cdc -clock SG_VIRT_OUT_20 +abstract_port -ports "clk_src_sys_val_o" -scope cdc -clock SG_VIRT_OUT_83 +abstract_port -ports "clk_src_io_val_o" -scope cdc -clock SG_VIRT_OUT_84 +abstract_port -ports "clk_src_usb_val_o" -scope cdc -clock SG_VIRT_OUT_85 + + +################################################################# +#translating input constraints to abstract_port where it involves +#a sync crossing and apending -combo no # +################################################################# + +abstract_port -ports "clk_src_sys_en_i" -scope cdc -clock "clk_src_aon_o" -combo no -combo_ifn "clk_ast_ext_i" +abstract_port -ports "clk_src_sys_jen_i" -scope cdc -clock "clk_src_aon_o" -combo no -combo_ifn "clk_src_sys_o" +abstract_port -ports "clk_src_io_en_i" -scope cdc -clock "clk_src_aon_o" -combo no -combo_ifn "clk_ast_ext_i" +abstract_port -ports "clk_src_usb_en_i" -scope cdc -clock "clk_src_aon_o" -combo no -combo_ifn "clk_ast_ext_i" +abstract_port -ports "rng_en_i" -scope cdc -clock "clk_src_sys_o" -combo no -combo_ifn "clk_ast_tlul_i" +abstract_port -ports "rng_fips_i" -scope cdc -clock "clk_src_sys_o" -combo no -combo_ifn "clk_ast_tlul_i" +abstract_port -ports "ext_freq_is_96m_i" -scope cdc -clock "clk_ast_tlul_i" -combo no +abstract_port -ports "all_clk_byp_req_i" -scope cdc -clock "clk_ast_tlul_i" -combo no +abstract_port -ports "io_clk_byp_req_i" -scope cdc -clock "clk_ast_tlul_i" -combo no + + +################################################################# +#Adding -combo no to abstract_port defined at input port# +#If it invloves a synchronized control crossing # +################################################################# + + +################################################################# +# qualifier constraints # +################################################################# + +#Port with -ignore constraint.Reason:Path is Hanging or Blocked# +abstract_port -ports "ast_pwst_o[io_pok][0]" -scope cdc -ignore -comment "blocked or hanging path" +###################################################### +#Port with -ignore constraint.Reason:Path is Hanging or Blocked# +abstract_port -ports "ast_pwst_o[io_pok][1]" -scope cdc -ignore -comment "blocked or hanging path" +###################################################### +#Port with -ignore constraint.Reason:Path is Hanging or Blocked# +abstract_port -ports "ast_pwst_h_o[io_pok][0]" -scope cdc -ignore -comment "blocked or hanging path" +###################################################### + +#Port with -ignore constraint.Reason:Path is Hanging or Blocked# +abstract_port -ports "ast_pwst_h_o[io_pok][1]" -scope cdc -ignore -comment "blocked or hanging path" +###################################################### +################################################################# +# virtual clock constraints # +################################################################# + +clock -tag SG_VIRT_OUT_20 -domain "domain20" +## "abstraction_new_domain_83" :: bbox_merged_domain_83 +clock -tag SG_VIRT_OUT_83 -domain "abstraction_new_domain_83" +## "abstraction_new_domain_84" :: bbox_merged_domain_84 +clock -tag SG_VIRT_OUT_84 -domain "abstraction_new_domain_84" +## "abstraction_new_domain_85" :: bbox_merged_domain_85 +clock -tag SG_VIRT_OUT_85 -domain "abstraction_new_domain_85" +################################################################# +# cdc_attribute constraints # +################################################################# + + +# cdc_attribute constraint is not generated. + + +################################################################# +# reset_filter_path constraints # +################################################################# + +reset_filter_path -type rdc -from_rst "tl_o[a_ready]" -to_rst "tl_o[d_valid]" "rst_ast_tlul_ni" +reset_filter_path -type rdc -from_rst "tl_o[d_valid]" -to_rst "tl_o[a_ready]" "rst_ast_tlul_ni" +reset_filter_path -type rdc -from_rst "rst_ast_tlul_ni" -to_rst "tl_o[a_ready]" "tl_o[d_valid]" +reset_filter_path -type rdc -from_rst "ast_pwst_o[main_pok]" -to_rst "ast_pwst_h_o[main_pok]" "ast_pwst_h_o[vcc_pok]" +reset_filter_path -type rdc -from_rst "ast_pwst_h_o[main_pok]" -to_rst "ast_pwst_o[main_pok]" "ast_pwst_h_o[vcc_pok]" +reset_filter_path -type rdc -from_rst "ast_pwst_h_o[vcc_pok]" -to_rst "ast_pwst_o[main_pok]" "ast_pwst_h_o[main_pok]" +reset_filter_path -type rdc -from_rst "obs_ctrl_o[obmsl][3]" -to_rst "ast2padmux_o[0]" "ast2padmux_o[1]" "ast2padmux_o[2]" "ast2padmux_o[4]" "ast2padmux_o[5]" "ast2padmux_o[6]" "ast2padmux_o[7]" "ast2padmux_o[8]" +reset_filter_path -type rdc -from_rst "ast2padmux_o[0]" -to_rst "obs_ctrl_o[obmsl][3]" "ast2padmux_o[1]" "ast2padmux_o[2]" "ast2padmux_o[4]" "ast2padmux_o[5]" "ast2padmux_o[6]" "ast2padmux_o[7]" "ast2padmux_o[8]" +reset_filter_path -type rdc -from_rst "ast2padmux_o[1]" -to_rst "obs_ctrl_o[obmsl][3]" "ast2padmux_o[0]" "ast2padmux_o[2]" "ast2padmux_o[4]" "ast2padmux_o[5]" "ast2padmux_o[6]" "ast2padmux_o[7]" "ast2padmux_o[8]" +reset_filter_path -type rdc -from_rst "ast2padmux_o[2]" -to_rst "obs_ctrl_o[obmsl][3]" "ast2padmux_o[0]" "ast2padmux_o[1]" "ast2padmux_o[4]" "ast2padmux_o[5]" "ast2padmux_o[6]" "ast2padmux_o[7]" "ast2padmux_o[8]" +reset_filter_path -type rdc -from_rst "ast2padmux_o[4]" -to_rst "obs_ctrl_o[obmsl][3]" "ast2padmux_o[0]" "ast2padmux_o[1]" "ast2padmux_o[2]" "ast2padmux_o[5]" "ast2padmux_o[6]" "ast2padmux_o[7]" "ast2padmux_o[8]" +reset_filter_path -type rdc -from_rst "ast2padmux_o[5]" -to_rst "obs_ctrl_o[obmsl][3]" "ast2padmux_o[0]" "ast2padmux_o[1]" "ast2padmux_o[2]" "ast2padmux_o[4]" "ast2padmux_o[6]" "ast2padmux_o[7]" "ast2padmux_o[8]" +reset_filter_path -type rdc -from_rst "ast2padmux_o[6]" -to_rst "obs_ctrl_o[obmsl][3]" "ast2padmux_o[0]" "ast2padmux_o[1]" "ast2padmux_o[2]" "ast2padmux_o[4]" "ast2padmux_o[5]" "ast2padmux_o[7]" "ast2padmux_o[8]" +reset_filter_path -type rdc -from_rst "ast2padmux_o[7]" -to_rst "obs_ctrl_o[obmsl][3]" "ast2padmux_o[0]" "ast2padmux_o[1]" "ast2padmux_o[2]" "ast2padmux_o[4]" "ast2padmux_o[5]" "ast2padmux_o[6]" "ast2padmux_o[8]" +reset_filter_path -type rdc -from_rst "ast2padmux_o[8]" -to_rst "obs_ctrl_o[obmsl][3]" "ast2padmux_o[0]" "ast2padmux_o[1]" "ast2padmux_o[2]" "ast2padmux_o[4]" "ast2padmux_o[5]" "ast2padmux_o[6]" "ast2padmux_o[7]" + +################################################################# +# Inferred abstract_port constraints # +################################################################# + + +abstract_port -ports "por_ni" -clock "clk_src_aon_o" -start +abstract_port -ports "fla_alert_src_i[n]" -clock "clk_ast_tlul_i" -combo no -start +abstract_port -ports "fla_alert_src_i[p]" -clock "clk_ast_tlul_i" -combo no -start +abstract_port -ports "otp_alert_src_i[n]" -clock "clk_ast_tlul_i" -combo no -start +abstract_port -ports "otp_alert_src_i[p]" -clock "clk_ast_tlul_i" -combo no -start +abstract_port -ports "sns_clks_i[clk_io_peri]" -ignore -comment "hanging path" +abstract_port -ports "sns_clks_i[clk_usb_peri]" -ignore -comment "hanging path" +abstract_port -ports "sns_clks_i[clk_io_div2_peri]" -ignore -comment "hanging path" +abstract_port -ports "sns_clks_i[clk_io_div4_peri]" -ignore -comment "hanging path" +abstract_port -ports "sns_clks_i[clk_io_div4_timers]" -ignore -comment "hanging path" +abstract_port -ports "sns_clks_i[clk_usb_secure]" -ignore -comment "hanging path" +abstract_port -ports "sns_clks_i[clk_main_secure]" -ignore -comment "hanging path" +abstract_port -ports "sns_clks_i[clk_io_div4_secure]" -ignore -comment "hanging path" +abstract_port -ports "sns_clks_i[clk_io_div2_infra]" -ignore -comment "hanging path" +abstract_port -ports "sns_clks_i[clk_io_infra]" -ignore -comment "hanging path" +abstract_port -ports "sns_clks_i[clk_main_infra]" -ignore -comment "hanging path" +abstract_port -ports "sns_clks_i[clk_io_div4_infra]" -ignore -comment "hanging path" +abstract_port -ports "sns_clks_i[clk_main_otbn]" -ignore -comment "hanging path" +abstract_port -ports "sns_clks_i[clk_main_kmac]" -ignore -comment "hanging path" +abstract_port -ports "sns_clks_i[clk_main_hmac]" -ignore -comment "hanging path" +abstract_port -ports "sns_clks_i[clk_main_aes]" -ignore -comment "hanging path" +abstract_port -ports "sns_clks_i[clk_aon_timers]" -ignore -comment "hanging path" +abstract_port -ports "sns_clks_i[clk_aon_peri]" -ignore -comment "hanging path" +abstract_port -ports "sns_clks_i[clk_aon_secure]" -ignore -comment "hanging path" +abstract_port -ports "sns_clks_i[clk_aon_infra]" -ignore -comment "hanging path" +abstract_port -ports "sns_clks_i[clk_io_div2_powerup]" -ignore -comment "hanging path" +abstract_port -ports "sns_clks_i[clk_usb_powerup]" -ignore -comment "hanging path" +abstract_port -ports "sns_clks_i[clk_io_powerup]" -ignore -comment "hanging path" +abstract_port -ports "sns_clks_i[clk_main_powerup]" -ignore -comment "hanging path" +abstract_port -ports "sns_clks_i[clk_aon_powerup]" -ignore -comment "hanging path" +abstract_port -ports "sns_clks_i[clk_io_div4_powerup]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_i2c2_n][0]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_i2c2_n][1]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_i2c1_n][0]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_i2c1_n][1]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_i2c0_n][0]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_i2c0_n][1]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_usbif_n][0]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_usbif_n][1]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_usb_n][0]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_usb_n][1]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_spi_host1_n][0]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_spi_host1_n][1]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_spi_host0_n][0]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_spi_host0_n][1]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_spi_device_n][0]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_spi_device_n][1]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_sys_aon_n][0]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_sys_aon_n][1]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_sys_io_div4_n][0]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_sys_io_div4_n][1]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_sys_n][0]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_sys_n][1]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_sys_shadowed_n][0]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_sys_shadowed_n][1]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_lc_aon_n][0]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_lc_aon_n][1]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_lc_io_div4_n][0]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_lc_io_div4_n][1]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_lc_io_div4_shadowed_n][0]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_lc_io_div4_shadowed_n][1]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_lc_n][0]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_lc_n][1]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_lc_shadowed_n][0]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_lc_shadowed_n][1]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_por_usb_n][0]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_por_usb_n][1]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_por_io_div4_n][0]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_por_io_div4_n][1]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_por_io_div4_shadowed_n][0]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_por_io_div4_shadowed_n][1]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_por_io_div2_n][0]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_por_io_div2_n][1]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_por_io_n][0]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_por_io_n][1]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_por_n][0]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_por_n][1]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_por_aon_n][0]" -ignore -comment "hanging path" +abstract_port -ports "sns_rsts_i[rst_por_aon_n][1]" -ignore -comment "hanging path" +abstract_port -ports "sns_spi_ext_clk_i" -ignore -comment "hanging path" +abstract_port -ports "vcc_supp_i" -ignore -comment "hanging path" +abstract_port -ports "vcaon_supp_i" -ignore -comment "hanging path" +abstract_port -ports "vcmain_supp_i" -ignore -comment "hanging path" +abstract_port -ports "vioa_supp_i" -ignore -comment "hanging path" +abstract_port -ports "viob_supp_i" -ignore -comment "hanging path" +clock -tag SG_VCLK_1 + +################################################################# +# cdc_filter_coherency constraints # +################################################################# + + +# cdc_filter_coherency constraint is not generated. + + + +################################################################# +# clock_sense constraints # +################################################################# + + +################################################################# +# reset_sense constraints # +################################################################# + +# reset_sense constraint is not generated. Either no reset defined on input ports or no combinational path found from primary resets to output port. + +################################################################# +# block interface constraints # +################################################################# + +abstract_interface_param -name "AdcChannels" -value "2" +abstract_interface_param -name "AdcDataWidth" -value "10" +abstract_interface_param -name "EntropyStreams" -value "4" +abstract_interface_param -name "UsbCalibWidth" -value "20" +abstract_interface_param -name "Ast2PadOutWidth" -value "9" +abstract_interface_param -name "Pad2AstInWidth" -value "9" +abstract_interface_port -name "tl_i" -definition "input tlul_pkg :: tl_h2d_t tl_i;" +abstract_interface_port -name "tl_o" -definition "output tlul_pkg :: tl_d2h_t tl_o;" +abstract_interface_port -name "ast_init_done_o" -definition "output logic ast_init_done_o; " +abstract_interface_port -name "clk_ast_adc_i" -definition "input clk_ast_adc_i; " +abstract_interface_port -name "rst_ast_adc_ni" -definition "input rst_ast_adc_ni; " +abstract_interface_port -name "clk_ast_alert_i" -definition "input clk_ast_alert_i; " +abstract_interface_port -name "rst_ast_alert_ni" -definition "input rst_ast_alert_ni; " +abstract_interface_port -name "clk_ast_es_i" -definition "input clk_ast_es_i; " +abstract_interface_port -name "rst_ast_es_ni" -definition "input rst_ast_es_ni; " +abstract_interface_port -name "clk_ast_rng_i" -definition "input clk_ast_rng_i; " +abstract_interface_port -name "rst_ast_rng_ni" -definition "input rst_ast_rng_ni; " +abstract_interface_port -name "clk_ast_tlul_i" -definition "input clk_ast_tlul_i; " +abstract_interface_port -name "rst_ast_tlul_ni" -definition "input rst_ast_tlul_ni; " +abstract_interface_port -name "clk_ast_usb_i" -definition "input clk_ast_usb_i; " +abstract_interface_port -name "rst_ast_usb_ni" -definition "input rst_ast_usb_ni; " +abstract_interface_port -name "clk_ast_ext_i" -definition "input clk_ast_ext_i; " +abstract_interface_port -name "por_ni" -definition "input por_ni; " +abstract_interface_port -name "sns_clks_i" -definition "input clkmgr_pkg :: clkmgr_out_t sns_clks_i;" +abstract_interface_port -name "sns_rsts_i" -definition "input rstmgr_pkg :: rstmgr_out_t sns_rsts_i;" +abstract_interface_port -name "sns_spi_ext_clk_i" -definition "input sns_spi_ext_clk_i; " +abstract_interface_port -name "vcc_supp_i" -definition "input vcc_supp_i; " +abstract_interface_port -name "vcaon_supp_i" -definition "input vcaon_supp_i; " +abstract_interface_port -name "vcmain_supp_i" -definition "input vcmain_supp_i; " +abstract_interface_port -name "vioa_supp_i" -definition "input vioa_supp_i; " +abstract_interface_port -name "viob_supp_i" -definition "input viob_supp_i; " +abstract_interface_port -name "ast_pwst_o" -definition "output ast_pkg :: ast_pwst_t ast_pwst_o;" +abstract_interface_port -name "ast_pwst_h_o" -definition "output ast_pkg :: ast_pwst_t ast_pwst_h_o;" +abstract_interface_port -name "main_pd_ni" -definition "input main_pd_ni; " +abstract_interface_port -name "main_env_iso_en_i" -definition "input main_env_iso_en_i; " +abstract_interface_port -name "flash_power_down_h_o" -definition "output logic flash_power_down_h_o; " +abstract_interface_port -name "flash_power_ready_h_o" -definition "output logic flash_power_ready_h_o; " +abstract_interface_port -name "otp_power_seq_i" -definition "input [1:0] otp_power_seq_i; " +abstract_interface_port -name "otp_power_seq_h_o" -definition "output logic [1:0] otp_power_seq_h_o; " +abstract_interface_port -name "clk_src_sys_en_i" -definition "input clk_src_sys_en_i; " +abstract_interface_port -name "clk_src_sys_jen_i" -definition "input prim_mubi_pkg :: mubi4_t clk_src_sys_jen_i;" +abstract_interface_port -name "clk_src_sys_o" -definition "output logic clk_src_sys_o; " +abstract_interface_port -name "clk_src_sys_val_o" -definition "output logic clk_src_sys_val_o; " +abstract_interface_port -name "clk_src_aon_o" -definition "output logic clk_src_aon_o; " +abstract_interface_port -name "clk_src_aon_val_o" -definition "output logic clk_src_aon_val_o; " +abstract_interface_port -name "clk_src_io_en_i" -definition "input clk_src_io_en_i; " +abstract_interface_port -name "clk_src_io_o" -definition "output logic clk_src_io_o; " +abstract_interface_port -name "clk_src_io_val_o" -definition "output logic clk_src_io_val_o; " +abstract_interface_port -name "clk_src_io_48m_o" -definition "output prim_mubi_pkg :: mubi4_t clk_src_io_48m_o;" +abstract_interface_port -name "usb_ref_pulse_i" -definition "input usb_ref_pulse_i; " +abstract_interface_port -name "usb_ref_val_i" -definition "input usb_ref_val_i; " +abstract_interface_port -name "clk_src_usb_en_i" -definition "input clk_src_usb_en_i; " +abstract_interface_port -name "clk_src_usb_o" -definition "output logic clk_src_usb_o; " +abstract_interface_port -name "clk_src_usb_val_o" -definition "output logic clk_src_usb_val_o; " +abstract_interface_port -name "usb_io_pu_cal_o" -definition "output logic [(UsbCalibWidth - 1):0] usb_io_pu_cal_o; " +abstract_interface_port -name "adc_pd_i" -definition "input adc_pd_i; " +abstract_interface_port -name "adc_a0_ai" -definition "input ast_pkg :: awire_t adc_a0_ai;" +abstract_interface_port -name "adc_a1_ai" -definition "input ast_pkg :: awire_t adc_a1_ai;" +abstract_interface_port -name "adc_chnsel_i" -definition "input [(AdcChannels - 1):0] adc_chnsel_i; " +abstract_interface_port -name "adc_d_o" -definition "output [(AdcDataWidth - 1):0] adc_d_o; " +abstract_interface_port -name "adc_d_val_o" -definition "output adc_d_val_o; " +abstract_interface_port -name "rng_en_i" -definition "input rng_en_i; " +abstract_interface_port -name "rng_fips_i" -definition "input rng_fips_i; " +abstract_interface_port -name "rng_val_o" -definition "output logic rng_val_o; " +abstract_interface_port -name "rng_b_o" -definition "output logic [(EntropyStreams - 1):0] rng_b_o; " +abstract_interface_port -name "entropy_rsp_i" -definition "input edn_pkg :: edn_rsp_t entropy_rsp_i;" +abstract_interface_port -name "entropy_req_o" -definition "output edn_pkg :: edn_req_t entropy_req_o;" +abstract_interface_port -name "fla_alert_src_i" -definition "input ast_pkg :: ast_dif_t fla_alert_src_i;" +abstract_interface_port -name "otp_alert_src_i" -definition "input ast_pkg :: ast_dif_t otp_alert_src_i;" +abstract_interface_port -name "alert_rsp_i" -definition "input ast_pkg :: ast_alert_rsp_t alert_rsp_i;" +abstract_interface_port -name "alert_req_o" -definition "output ast_pkg :: ast_alert_req_t alert_req_o;" +abstract_interface_port -name "dft_strap_test_i" -definition "input pinmux_pkg :: dft_strap_test_req_t dft_strap_test_i;" +abstract_interface_port -name "lc_dft_en_i" -definition "input lc_ctrl_pkg :: lc_tx_t lc_dft_en_i;" +abstract_interface_port -name "fla_obs_i" -definition "input [(8 - 1):0] fla_obs_i; " +abstract_interface_port -name "otp_obs_i" -definition "input [(8 - 1):0] otp_obs_i; " +abstract_interface_port -name "otm_obs_i" -definition "input [(8 - 1):0] otm_obs_i; " +abstract_interface_port -name "usb_obs_i" -definition "input usb_obs_i; " +abstract_interface_port -name "obs_ctrl_o" -definition "output ast_pkg :: ast_obs_ctrl_t obs_ctrl_o;" +abstract_interface_port -name "padmux2ast_i" -definition "input [(Pad2AstInWidth - 1):0] padmux2ast_i; " +abstract_interface_port -name "ast2padmux_o" -definition "output logic [(Ast2PadOutWidth - 1):0] ast2padmux_o; " +abstract_interface_port -name "ast2pad_t0_ao" -definition "output ast2pad_t0_ao; " +abstract_interface_port -name "ast2pad_t1_ao" -definition "output ast2pad_t1_ao; " +abstract_interface_port -name "ext_freq_is_96m_i" -definition "input prim_mubi_pkg :: mubi4_t ext_freq_is_96m_i;" +abstract_interface_port -name "all_clk_byp_req_i" -definition "input prim_mubi_pkg :: mubi4_t all_clk_byp_req_i;" +abstract_interface_port -name "all_clk_byp_ack_o" -definition "output prim_mubi_pkg :: mubi4_t all_clk_byp_ack_o;" +abstract_interface_port -name "io_clk_byp_req_i" -definition "input prim_mubi_pkg :: mubi4_t io_clk_byp_req_i;" +abstract_interface_port -name "io_clk_byp_ack_o" -definition "output prim_mubi_pkg :: mubi4_t io_clk_byp_ack_o;" +abstract_interface_port -name "flash_bist_en_o" -definition "output prim_mubi_pkg :: mubi4_t flash_bist_en_o;" +abstract_interface_port -name "dpram_rmf_o" -definition "output ast_pkg :: dpm_rm_t dpram_rmf_o;" +abstract_interface_port -name "dpram_rml_o" -definition "output ast_pkg :: dpm_rm_t dpram_rml_o;" +abstract_interface_port -name "spram_rm_o" -definition "output ast_pkg :: spm_rm_t spram_rm_o;" +abstract_interface_port -name "sprgf_rm_o" -definition "output ast_pkg :: spm_rm_t sprgf_rm_o;" +abstract_interface_port -name "sprom_rm_o" -definition "output ast_pkg :: spm_rm_t sprom_rm_o;" +abstract_interface_port -name "dft_scan_md_o" -definition "output prim_mubi_pkg :: mubi4_t dft_scan_md_o;" +abstract_interface_port -name "scan_shift_en_o" -definition "output scan_shift_en_o; " +abstract_interface_port -name "scan_reset_no" -definition "output scan_reset_no; " +} + +if { $::sg_use_cdc_abstract_view == 1 } { + + + current_design "ast" -def_param +abstract_block_violation -name Propagate_Clocks -sev WARNING -count 1 +abstract_block_violation -name Setup_check01 -sev WARNING -count 16 +abstract_block_violation -name ErrorAnalyzeBBox -sev ERROR -count 1 -is_builtin +abstract_block_violation -name SYNTH_78 -sev WARNING -count 10 -is_builtin +abstract_block_violation -name SYNTH_89 -sev WARNING -count 4 -is_builtin +abstract_block_violation -name SYNTH_93 -sev WARNING -count 1 -is_builtin +abstract_block_violation -name SYNTH_1084 -sev ERROR -count 1 -is_builtin +abstract_block_violation -name WRN_1459 -sev WARNING -count 5 -is_builtin +abstract_block_violation -name WRN_1470 -sev WARNING -count 5 -is_builtin +abstract_block_violation -name checkCMD_dirfile03 -sev WARNING -count 29 -is_builtin +abstract_block_violation -name Propagate_Resets -sev WARNING -count 4 +abstract_block_violation -name Setup_blackbox01 -sev WARNING -count 13 +abstract_block_violation -name Clock_check07 -sev WARNING -count 27 + + +block_file_decompiled_start + + input -name "tl_i" -clock "ast.clk_ast_tlul_i" + input -name "ast.rst_ast_adc_ni" -clock "ast.clk_ast_adc_i" + input -name "ast.rst_ast_alert_ni" -clock "ast.clk_ast_alert_i" + input -name "ast.rst_ast_es_ni" -clock "ast.clk_ast_es_i" + input -name "ast.rst_ast_rng_ni" -clock "ast.clk_ast_rng_i" + input -name "ast.rst_ast_tlul_ni" -clock "ast.clk_ast_tlul_i" + input -name "ast.rst_ast_usb_ni" -clock "ast.clk_ast_usb_i" + input -name "ast.main_pd_ni" -clock "ast.clk_src_aon_o" + input -name "ast.main_env_iso_en_i" -clock "ast.clk_src_aon_o" + input -name "otp_power_seq_i" -clock "ast.clk_src_aon_o" + input -name "clk_src_sys_en_i" -clock "ast.clk_src_aon_o" + input -name "clk_src_sys_jen_i" -clock "ast.clk_src_aon_o" + input -name "clk_src_io_en_i" -clock "ast.clk_src_aon_o" + input -name "usb_ref_pulse_i" -clock "ast.clk_ast_usb_i" + input -name "usb_ref_val_i" -clock "ast.clk_ast_usb_i" + input -name "clk_src_usb_en_i" -clock "ast.clk_src_aon_o" + input -name "adc_pd_i" -clock "ast.clk_ast_adc_i" + input -name "adc_a0_ai" -clock "ast.clk_ast_adc_i" + input -name "adc_a1_ai" -clock "ast.clk_ast_adc_i" + input -name "adc_chnsel_i" -clock "ast.clk_ast_adc_i" + input -name "rng_en_i" -clock "ast.clk_src_sys_o" + input -name "rng_fips_i" -clock "ast.clk_src_sys_o" + input -name "entropy_rsp_i" -clock "ast.clk_ast_es_i" + input -name "alert_rsp_i" -clock "ast.clk_ast_alert_i" + input -name "dft_strap_test_i" -clock "ast.clk_ast_tlul_i" + input -name "lc_dft_en_i" -clock "ast.clk_ast_tlul_i" + input -name "fla_obs_i" -clock "ast.clk_ast_tlul_i" + input -name "otp_obs_i" -clock "ast.clk_ast_tlul_i" + input -name "otm_obs_i" -clock "ast.clk_ast_tlul_i" + input -name "usb_obs_i" -clock "ast.clk_ast_tlul_i" + input -name "ext_freq_is_96m_i" -clock "ast.clk_ast_tlul_i" + input -name "all_clk_byp_req_i" -clock "ast.clk_ast_tlul_i" + input -name "io_clk_byp_req_i" -clock "ast.clk_ast_tlul_i" + output -name "tl_o" -clock "ast.clk_ast_tlul_i" + output -name "ast_init_done_o" -clock "ast.clk_ast_tlul_i" + output -name "ast.flash_power_down_h_o" -clock "ast.clk_src_aon_o" + output -name "ast.flash_power_ready_h_o" -clock "ast.clk_src_aon_o" + output -name "ast.otp_power_seq_h_o" -clock "ast.clk_src_aon_o" + output -name "clk_src_sys_val_o" -clock "ast.clk_src_sys_o" + output -name "clk_src_aon_val_o" -clock "ast.clk_src_aon_o" + output -name "clk_src_io_val_o" -clock "ast.clk_src_io_o" + output -name "clk_src_io_48m_o" -clock "ast.clk_src_io_o" + output -name "clk_src_usb_val_o" -clock "ast.clk_src_usb_o" + output -name "usb_io_pu_cal_o" -clock "ast.clk_ast_tlul_i" + output -name "adc_d_o" -clock "ast.clk_ast_adc_i" + output -name "adc_d_val_o" -clock "ast.clk_ast_adc_i" + output -name "rng_val_o" -clock "ast.clk_ast_rng_i" + output -name "rng_b_o" -clock "ast.clk_ast_rng_i" + output -name "entropy_req_o" -clock "ast.clk_ast_es_i" + output -name "alert_req_o" -clock "ast.clk_ast_alert_i" + output -name "obs_ctrl_o" -clock "ast.clk_ast_tlul_i" + output -name "all_clk_byp_ack_o" -clock "ast.clk_src_io_o" + output -name "io_clk_byp_ack_o" -clock "ast.clk_src_io_o" + output -name "flash_bist_en_o" -clock "ast.clk_ast_tlul_i" + output -name "dpram_rmf_o" -clock "ast.clk_ast_tlul_i" + output -name "dpram_rml_o" -clock "ast.clk_ast_tlul_i" + output -name "spram_rm_o" -clock "ast.clk_ast_tlul_i" + output -name "sprgf_rm_o" -clock "ast.clk_ast_tlul_i" + output -name "sprom_rm_o" -clock "ast.clk_ast_tlul_i" + output -name "dft_scan_md_o" -clock "ast.clk_ast_tlul_i" + output -name "scan_shift_en_o" -clock "ast.clk_ast_tlul_i" + output -name "scan_reset_no" -clock "ast.clk_ast_tlul_i" + clock -name "clk_src_sys_o" -domain domain7 -tag SG_AUTO_TAG_7 + clock -name "clk_src_aon_o" -domain domain8 -tag SG_AUTO_TAG_8 + clock -name "clk_src_io_o" -domain domain_9 -tag SG_AUTO_TAG_9 + clock -name "clk_src_usb_o" -domain domain_10 -tag SG_AUTO_TAG_10 + reset -name "fla_alert_src_i" -value 0 + reset -name "otp_alert_src_i" -value 0 + quasi_static -name "padmux2ast_i" + quasi_static -name "ast2padmux_o" + quasi_static -name "ast2pad_t0_ao" + quasi_static -name "ast2pad_t1_ao" + +block_file_decompiled_end +} diff --git a/src/ast/doc/ast_regs.html b/src/ast/doc/ast_regs.html new file mode 100644 index 000000000..0d6a1a428 --- /dev/null +++ b/src/ast/doc/ast_regs.html @@ -0,0 +1,773 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary
Name Offset Length Description
ast.REGA0 0x0 4

AST Register 0 for OTP/ROM Write Testing

ast.REGA1 0x4 4

AST 1 Register for OTP/ROM Write Testing

ast.REGA2 0x8 4

AST 2 Register for OTP/ROM Write Testing

ast.REGA3 0xc 4

AST 3 Register for OTP/ROM Write Testing

ast.REGA4 0x10 4

AST 4 Register for OTP/ROM Write Testing

ast.REGA5 0x14 4

AST 5 Register for OTP/ROM Write Testing

ast.REGA6 0x18 4

AST 6 Register for OTP/ROM Write Testing

ast.REGA7 0x1c 4

AST 7 Register for OTP/ROM Write Testing

ast.REGA8 0x20 4

AST 8 Register for OTP/ROM Write Testing

ast.REGA9 0x24 4

AST 9 Register for OTP/ROM Write Testing

ast.REGA10 0x28 4

AST 10 Register for OTP/ROM Write Testing

ast.REGA11 0x2c 4

AST 11 Register for OTP/ROM Write Testing

ast.REGA12 0x30 4

AST 13 Register for OTP/ROM Write Testing

ast.REGA13 0x34 4

AST 13 Register for OTP/ROM Write Testing

ast.REGA14 0x38 4

AST 14 Register for OTP/ROM Write Testing

ast.REGA15 0x3c 4

AST 15 Register for OTP/ROM Write Testing

ast.REGA16 0x40 4

AST 16 Register for OTP/ROM Write Testing

ast.REGA17 0x44 4

AST 17 Register for OTP/ROM Write Testing

ast.REGA18 0x48 4

AST 18 Register for OTP/ROM Write Testing

ast.REGA19 0x4c 4

AST 19 Register for OTP/ROM Write Testing

ast.REGA20 0x50 4

AST 20 Register for OTP/ROM Write Testing

ast.REGA21 0x54 4

AST 21 Register for OTP/ROM Write Testing

ast.REGA22 0x58 4

AST 22 Register for OTP/ROM Write Testing

ast.REGA23 0x5c 4

AST 23 Register for OTP/ROM Write Testing

ast.REGA24 0x60 4

AST 24 Register for OTP/ROM Write Testing

ast.REGA25 0x64 4

AST 25 Register for OTP/ROM Write Testing

ast.REGA26 0x68 4

AST 26 Register for OTP/ROM Write Testing

ast.REGA27 0x6c 4

AST 27 Register for OTP/ROM Write Testing

ast.REGA28 0x70 4

AST 28 Register for OTP/ROM Write Testing

ast.REGA29 0x74 4

AST 29 Register for OTP/ROM Write Testing

ast.REGA30 0x78 4

AST 30 Register for OTP/ROM Write Testing

ast.REGA31 0x7c 4

AST 31 Register for OTP/ROM Write Testing

ast.REGA32 0x80 4

AST 32 Register for OTP/ROM Write Testing

ast.REGA33 0x84 4

AST 33 Register for OTP/ROM Write Testing

ast.REGA34 0x88 4

AST 34 Register for OTP/ROM Write Testing

ast.REGA35 0x8c 4

AST 35 Register for OTP/ROM Write Testing

ast.REGA36 0x90 4

AST 36 Register for OTP/ROM Write Testing

ast.REGA37 0x94 4

AST 37 Register for OTP/ROM Write Testing

ast.REGAL 0x98 4

AST Last Register for OTP/ROM Write Testing

ast.REGB_0 0x200 4

AST Registers Array-B to set address space size

ast.REGB_1 0x204 4

AST Registers Array-B to set address space size

ast.REGB_2 0x208 4

AST Registers Array-B to set address space size

ast.REGB_3 0x20c 4

AST Registers Array-B to set address space size

ast.REGB_4 0x210 4

AST Registers Array-B to set address space size

+ + + + +
+
ast.REGA0 @ 0x0
+

AST Register 0 for OTP/ROM Write Testing

+
Reset default = 0x0, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0ro0x0reg32

32-bit Register

+
+ + + + + +
+
ast.REGA1 @ 0x4
+

AST 1 Register for OTP/ROM Write Testing

+
Reset default = 0x1, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0ro0x1reg32

32-bit Register

+
+ + + + + +
+
ast.REGA2 @ 0x8
+

AST 2 Register for OTP/ROM Write Testing

+
Reset default = 0x2, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0x2reg32

32-bit Register

+
+ + + + + +
+
ast.REGA3 @ 0xc
+

AST 3 Register for OTP/ROM Write Testing

+
Reset default = 0x3, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0x3reg32

32-bit Register

+
+ + + + + +
+
ast.REGA4 @ 0x10
+

AST 4 Register for OTP/ROM Write Testing

+
Reset default = 0x4, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0x4reg32

32-bit Register

+
+ + + + + +
+
ast.REGA5 @ 0x14
+

AST 5 Register for OTP/ROM Write Testing

+
Reset default = 0x5, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0x5reg32

32-bit Register

+
+ + + + + +
+
ast.REGA6 @ 0x18
+

AST 6 Register for OTP/ROM Write Testing

+
Reset default = 0x6, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0x6reg32

32-bit Register

+
+ + + + + +
+
ast.REGA7 @ 0x1c
+

AST 7 Register for OTP/ROM Write Testing

+
Reset default = 0x7, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0x7reg32

32-bit Register

+
+ + + + + +
+
ast.REGA8 @ 0x20
+

AST 8 Register for OTP/ROM Write Testing

+
Reset default = 0x8, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0x8reg32

32-bit Register

+
+ + + + + +
+
ast.REGA9 @ 0x24
+

AST 9 Register for OTP/ROM Write Testing

+
Reset default = 0x9, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0x9reg32

32-bit Register

+
+ + + + + +
+
ast.REGA10 @ 0x28
+

AST 10 Register for OTP/ROM Write Testing

+
Reset default = 0xa, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0xareg32

32-bit Register

+
+ + + + + +
+
ast.REGA11 @ 0x2c
+

AST 11 Register for OTP/ROM Write Testing

+
Reset default = 0xb, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0xbreg32

32-bit Register

+
+ + + + + +
+
ast.REGA12 @ 0x30
+

AST 13 Register for OTP/ROM Write Testing

+
Reset default = 0xc, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0xcreg32

32-bit Register

+
+ + + + + +
+
ast.REGA13 @ 0x34
+

AST 13 Register for OTP/ROM Write Testing

+
Reset default = 0xd, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0xdreg32

32-bit Register

+
+ + + + + +
+
ast.REGA14 @ 0x38
+

AST 14 Register for OTP/ROM Write Testing

+
Reset default = 0xe, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0xereg32

32-bit Register

+
+ + + + + +
+
ast.REGA15 @ 0x3c
+

AST 15 Register for OTP/ROM Write Testing

+
Reset default = 0xf, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0xfreg32

32-bit Register

+
+ + + + + +
+
ast.REGA16 @ 0x40
+

AST 16 Register for OTP/ROM Write Testing

+
Reset default = 0x10, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0x10reg32

32-bit Register

+
+ + + + + +
+
ast.REGA17 @ 0x44
+

AST 17 Register for OTP/ROM Write Testing

+
Reset default = 0x11, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0x11reg32

32-bit Register

+
+ + + + + +
+
ast.REGA18 @ 0x48
+

AST 18 Register for OTP/ROM Write Testing

+
Reset default = 0x12, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0x12reg32

32-bit Register

+
+ + + + + +
+
ast.REGA19 @ 0x4c
+

AST 19 Register for OTP/ROM Write Testing

+
Reset default = 0x13, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0x13reg32

32-bit Register

+
+ + + + + +
+
ast.REGA20 @ 0x50
+

AST 20 Register for OTP/ROM Write Testing

+
Reset default = 0x14, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0x14reg32

32-bit Register

+
+ + + + + +
+
ast.REGA21 @ 0x54
+

AST 21 Register for OTP/ROM Write Testing

+
Reset default = 0x15, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0x15reg32

32-bit Register

+
+ + + + + +
+
ast.REGA22 @ 0x58
+

AST 22 Register for OTP/ROM Write Testing

+
Reset default = 0x16, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0x16reg32

32-bit Register

+
+ + + + + +
+
ast.REGA23 @ 0x5c
+

AST 23 Register for OTP/ROM Write Testing

+
Reset default = 0x17, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0x17reg32

32-bit Register

+
+ + + + + +
+
ast.REGA24 @ 0x60
+

AST 24 Register for OTP/ROM Write Testing

+
Reset default = 0x18, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0x18reg32

32-bit Register

+
+ + + + + +
+
ast.REGA25 @ 0x64
+

AST 25 Register for OTP/ROM Write Testing

+
Reset default = 0x19, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0x19reg32

32-bit Register

+
+ + + + + +
+
ast.REGA26 @ 0x68
+

AST 26 Register for OTP/ROM Write Testing

+
Reset default = 0x1a, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0x1areg32

32-bit Register

+
+ + + + + +
+
ast.REGA27 @ 0x6c
+

AST 27 Register for OTP/ROM Write Testing

+
Reset default = 0x1b, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0x1breg32

32-bit Register

+
+ + + + + +
+
ast.REGA28 @ 0x70
+

AST 28 Register for OTP/ROM Write Testing

+
Reset default = 0x1c, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0ro0x1creg32

32-bit Register

+
+ + + + + +
+
ast.REGA29 @ 0x74
+

AST 29 Register for OTP/ROM Write Testing

+
Reset default = 0x1d, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0x1dreg32

32-bit Register

+
+ + + + + +
+
ast.REGA30 @ 0x78
+

AST 30 Register for OTP/ROM Write Testing

+
Reset default = 0x1e, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0x1ereg32

32-bit Register

+
+ + + + + +
+
ast.REGA31 @ 0x7c
+

AST 31 Register for OTP/ROM Write Testing

+
Reset default = 0x1f, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0x1freg32

32-bit Register

+
+ + + + + +
+
ast.REGA32 @ 0x80
+

AST 32 Register for OTP/ROM Write Testing

+
Reset default = 0x20, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0x20reg32

32-bit Register

+
+ + + + + +
+
ast.REGA33 @ 0x84
+

AST 33 Register for OTP/ROM Write Testing

+
Reset default = 0x21, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0x21reg32

32-bit Register

+
+ + + + + +
+
ast.REGA34 @ 0x88
+

AST 34 Register for OTP/ROM Write Testing

+
Reset default = 0x22, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0x22reg32

32-bit Register

+
+ + + + + +
+
ast.REGA35 @ 0x8c
+

AST 35 Register for OTP/ROM Write Testing

+
Reset default = 0x23, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0x23reg32

32-bit Register

+
+ + + + + +
+
ast.REGA36 @ 0x90
+

AST 36 Register for OTP/ROM Write Testing

+
Reset default = 0x24, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0x24reg32

32-bit Register

+
+ + + + + +
+
ast.REGA37 @ 0x94
+

AST 37 Register for OTP/ROM Write Testing

+
Reset default = 0x25, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0rw0x25reg32

32-bit Register

+
+ + + + + +
+
ast.REGAL @ 0x98
+

AST Last Register for OTP/ROM Write Testing

+
Reset default = 0x26, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32...
1514131211109876543210
...reg32
BitsTypeResetNameDescription
31:0wo0x26reg32

32-bit Register

+
+ + + + + +
+
ast.REGB_0 @ 0x200
+

AST Registers Array-B to set address space size

+
Reset default = 0x0, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32_0...
1514131211109876543210
...reg32_0
BitsTypeResetNameDescription
31:0rw0x0reg32_0

32-bit Register

+
+ + + + + +
+
ast.REGB_1 @ 0x204
+

AST Registers Array-B to set address space size

+
Reset default = 0x0, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32_1...
1514131211109876543210
...reg32_1
BitsTypeResetNameDescription
31:0rw0x0reg32_1

For REGB1

+
+ + + + + +
+
ast.REGB_2 @ 0x208
+

AST Registers Array-B to set address space size

+
Reset default = 0x0, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32_2...
1514131211109876543210
...reg32_2
BitsTypeResetNameDescription
31:0rw0x0reg32_2

For REGB2

+
+ + + + + +
+
ast.REGB_3 @ 0x20c
+

AST Registers Array-B to set address space size

+
Reset default = 0x0, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32_3...
1514131211109876543210
...reg32_3
BitsTypeResetNameDescription
31:0rw0x0reg32_3

For REGB3

+
+ + + + + +
+
ast.REGB_4 @ 0x210
+

AST Registers Array-B to set address space size

+
Reset default = 0x0, mask 0xffffffff
+
+ + +
31302928272625242322212019181716
reg32_4...
1514131211109876543210
...reg32_4
BitsTypeResetNameDescription
31:0rw0x0reg32_4

For REGB4

+
diff --git a/src/ast/doc/interfaces.md b/src/ast/doc/interfaces.md new file mode 100644 index 000000000..724a06d97 --- /dev/null +++ b/src/ast/doc/interfaces.md @@ -0,0 +1,129 @@ +# Interface Signals + +## Table notes + +### Signal naming conventions used in this document + +Naming here is compliant with the OpenTitan [names](https://github.com/lowRISC/style-guides/blob/master/VerilogCodingStyle.md#naming) and [suffixes](https://github.com/lowRISC/style-guides/blob/master/VerilogCodingStyle.md#suffixes) specification, with the following augmentations: + +- Clock signals start with `clk_*` +- Inputs and outputs are marked with `*_i/o` +- Analog signals are marked with `*_a` +- Non-core level signals are marked with `*_h` +- Dual and negative polarity signals are marked with `*_p/n` + +### Clock domains column + +| name | freq | description | +|-------|--------------|-----------------------------------------------------------------------------------------| +| sys | Up to 100MHz | jittery system clock. Mainly used for high performance and security modules. | +| usb | 48MHz | USB module source clock. | +| aon | 200kHz | Always-on domain clock. The only active clock while chip is in deep-sleep power states. | +| async | | *It does not matter what domain drives the signal* | + +- Input clocks: Each functional interface has a dedicated clock named after the interface. + +## Table + +| Signal Name /
Affiliation | I/O | Width/
Type/
Struct | Clock Domain | Description | +|--------------------------------------------------------------------------|-----|---------------------------|--------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **Power Supplies** | | | | | +| VCC | I | | | VCC is the main power supply. It is driven from an external source and is used to power the internal VCMAIN and VCAON power domains. VCC must always be present when the device is functioning; VCC is also used to power a number of pads that must be always on when the device is functioning. | +| AVCC | I | | | Analog blocks power supply. AVCC and AGND are analog supply and ground signals for the AST analog functions. They mainly serve for ADC and USB clock functionality. AVCC is expected to be driven by the same voltage regulator and have similar power availability as VCC. AVCC and AGND have dedicated package balls/pins. In the future, package pins sharing with VCC and GND may be considered based on post-silicon test results. | +| VCMAIN | O | | | Main core power, driven by internal capless voltage regulator | +| VCAON | O | | | Core voltage power for always-on domain (same voltage range as VCMAIN) | +| VIOA | I | | | IO supply, powering a set of pads. Unlike VCC, the IO supplies can be turned off by external components and the device will continue to function, the unpowered pads however, become inoperable. | +| VIOB | I | | | Same as VIOA, but for a different set of pads. | +| GND | I | | | Ground | +| AGND | I | | | Analog ground (see AVCC for further details) | +| **Power Control and Reset** | | | | | +| otp_power_seq_i | I | 2 | async | Contains the power sequencing signals coming from the OTP macro. | +| otp_power_seq_h_o | O | 2 | async | Contains the power sequencing signals going to the OTP macro (VCC domain). | +| flash_power_down_h_o | O | 1 | async | Connected to flash (VCC domain). Used for flash power management. | +| flash_power_ready_h_o | O | 1 | async | Connected to flash (VCC domain). Used for flash power management. | +| vcmain_pok (*aka* vcmain_pok_o) | O | ast_pwst | async | Main core power-exist indication. Used by the OpenTitan power manager to determine the state of the main digital supply during power up and power down sequencing. | +| vcaon_pok (*aka* vcaon_pok_o) | O | ast_pwst | async | Always-on power-exist indication. Used by the OpenTitan power manager for power-on reset root. | +| vioa_pok (*aka* vioa_pok_o) | O | ast_pwst | async | VIOA power-exist indications. Used as a power-OK status signal. | +| viob_pok (*aka* viob_pok_o) | O | ast_pwst | async | VIOB power-exist indication. Used as a power-OK status signal. | +| por_ni | I | 1 | async | Power on reset input signal to AST. See Resets section for further details | +| main_pd_ni | I | 1 | aon | Power down enable for main core power. 0: main core power is down (deep-sleep state). 1: main core power is up. It may take up to 200 uS from this signal transition to power switching completion by AST (not including boot time and so). Note that flash must be prepared for power down before this signal is asserted. | +| main_env_iso_en_i | I | 1 | aon | Preliminary indication of VCMAIN isolation signal (main_iso_en) assertion. It is used by AST logic to latch interface signals which may no longer be valid after main_iso_en is active. This signal must be set at least 30ns before main_iso_en is active and must remain active at least 30ns after main_iso_en is no longer active. Note that main_iso_en itself asserts ahead of main_pd_ni. ie, the pwrmgr will set this signal to '1' before requesting the power be turned off. Similar, on power-on, the isolation is only released after power is restored and all powered off modules have been reset. | +| ast_init_done_o | O | mubi4 | tlul | When set, it indicates that the AST initialization was performed. Note that this signal may not be set while the chip is in TEST* or RMA lifecycle states. | +| **Clock Outputs** | | | | | +| clk_src_sys_o | O | 1 | sys | 100 MHz clock with jitter (main clock domain). Used as the main system clock. | +| clk_src_sys_val_o | O | 1 | async | System clock valid. Used as "ack" signals for the power manager | +| clk_src_sys_en_i | I | 1 | aon | System clock enable. | +| clk_src_sys_jen_i | I | mubi4 | async | System clock jitter enable | +| clk_src_aon_o | O | 1 | aon | 200 KHz clock for always-on domain. | +| clk_src_aon_val_o | O | 1 | async | aon clock valid | +| clk_src_usb_o | O | 1 | usb | 48 MHz clock for USB. To comply with USB full speed clock specification, it supports frequency accuracy of +/-2500 ppm when usb_ref_pulse_i is available and +/-3% otherwise. It may take up to 50 ms for this clock to reach the accuracy target from the time 'usb_ref_pulse_i' is available. USB clock calibration interface is further detailed here. | +| clk_src_usb_val_o | O | 1 | async | USB clock valid | +| clk_src_usb_en_i | I | 1 | aon | USB clock enable | +| usb_ref_pulse_i | I | 1 | usb | USB reference pulse +/-500ppm. When valid, it is expected to pulse for one usb clock cycle every 1ms. | +| usb_ref_val_i | I | 1 | usb | USB reference valid. This bit serves as a valid signal for the usb_ref_pulse_i signal. It is set to 1 after the first valid usb_ref_pulse_i event is detected and remains high as long as usb_ref_pulse_i continues to behave as expected (per usb_ref_pulse description). Once usb_ref_pulse deviates from its expected behavior, usb_ref_val_i immediately negates to 0 and remains 0 until after the next valid usb_ref_val pulse. | +| clk_src_io_o | O | 1 | io | 96 MHz clock with +/-3% frequency accuracy. Used for peripherals that require a fixed frequency, for example SPI and UART | +| clk_src_io_val_o | O | 1 | async | I/O and timer clock valid. Used as "ack" signals for the Power manager. | +| clk_src_io_en_i | I | 1 | aon | I/O and timer clock enable | +| clk_src_io_48m_o | O | mubi4 | aon | Clock frequency indicator. When set, it indicates that the clk_src_io_o's frequency is 48 MHz; otherwise, it is 96 MHz. | +| **Clock & Reset Inputs** | | | | | +| clk_ast_adc_i | I | 1 | adc | ADC interface clock input | +| clk_ast_rng_i | I | 1 | rng | RNG interface clock input | +| clk_ast_usb_i | I | 1 | usb | USB reference interface clock input | +| clk_ast_es_i | I | 1 | es | Entropy source interface clock input | +| clk_ast_alert_i | I | 1 | alert | Alert interface clock input | +| clk_ast_tlul_i | I | 1 | tlul | TLUL bus interface clock input | +| rst_ast_adc_ni | I | 1 | adc | ADC interface reset (active low) | +| rst_ast_rng_ni | I | 1 | rng | RNG interface reset (active low) | +| rst_ast_usb_ni | I | 1 | usb | USB reference interface reset (active low) | +| rst_ast_es_ni | I | 1 | es | Entropy source interface reset (active low) | +| rst_ast_alert_ni | I | 1 | alert | Alert interface interface reset (active low) | +| rst_ast_tlul_ni | I | 1 | tlul | TLUL bus reference interface reset (active low) | +| **Register Access Interface** | | | | | +| tlul | I/O | tl_* | tlul | TLUL bus interface. Mainly used for configuration, calibration and trimming. At boot time, data is copied from non-volatile storage into AST registers by the SW boot entity. This interface has no further use beyond this point. Runtime interaction with AST is performed by other signals as described in this document. | +| **Analog modules** | | | | | +| adc_a0_ai | I | awire | async | ADC analog input channels 0 to be measured. Signal type is awire (see ana_pkg.sv) | +| adc_a1_ai | I | awire | async | ADC analog input channels 1 to be measured. Signal type is awire (see ana_pkg.sv) | +| adc_d_o | O | 10 | adc | ADC digital data | +| adc_chnsel_i | I | 2 | adc | ADC input channel select (one hot). No more than one channel should be selected at a time. Any change in 'adc_chnsel_i' value must go through all '0'. Changing 'adc_chnsel_i' from '0' value to non-'0' value starts an ADC conversion. | +| adc_d_val_o | O | 1 | adc | ADC digital data valid | +| adc_pd_i | I | 1 | adc | ADC power down - for saving power during deep-sleep state between measurements. When this signal is high, ADC module is in off state, otherwise, it is in active state. For further description about adc_pd_i usage, see ADC module description below. | +| entropy_req_o | O | edn_req | es | Request entropy from EDN | +| entropy_rsp_i | I | edn_rsp | es | EDN entropy request acknowledgement and data. | +| rng_en_i | I | 1 | rng | Input from controller to enable RNG | +| rng_fips_i | I | 1 | rng | Indicates that the AST RNG module is requested to output FIPS SP-800-90B grade RNG bits. This may, but not necessarily affect bit-rate. This bit is a placeholder. The use of this signal inside AST is TBD. | +| rng_val_o | O | 1 | rng | RNG bit valid. This is a per-transaction valid. rng_b_o can be sampled whenever this bit is high. | +| rng_b_o | O | 4 | rng | RNG digital bit streams. The downstream controller of this signal should sample the rng_b_o whenever rng_val_o is high. | +| **Countermeasures and Alerts** | | | | | +| alert_req_o | O | ast_alert_req | alert | Alert events. There are 11 such events. The alerts are associated with countermeasures like Active shield, clock glitch detector, voltage glitch detector, temperature sensor, and others. | +| alert_rsp_i | I | ast_alert_rsp | alert | This structure contains acknowledge signals and force-trigger by software signals for each alert event. The acknowledge signals are assumed to be synchronous pulses. | +| **Trimming Test and Debug** | | | | | +| dft_scan_md_o | O | mubi4 | | Scan mode indication signal. Controllable only when DFT features are enabled (Test and RMA states). Otherwise, these signals are grounded to 0. | +| scan_shift_en_o | O | 1 | | Scan shift enable | +| scan_reset_no | O | 1 | | Scan reset | +| clk_ast_ext_i | I | 1 | async | External clock. While AST generates most of its clocks on-die, it still needs an external clock for clock calibration and first flash/OTP programming. Clock calibration: AST clock sources are inaccurate by default and must be calibrated prior to use. The results of the calibration are stored in OTP and reloaded by software upon system boot. First Flash / OTP programming: AST clock sources are inaccurate by default and may be out of range for initial flash and OTP programming. In this situation, an external clock may be required for initial programming such that a software image can be loaded to calibrate clocks and advance life cycle. | +| dft_strap_test_i | I | dft_strap_test_req | async | Strap inputs for DFT selection | +| flash_bist_en_o | O | mubi4 | | Flash BIST enable | +| vcc_supp_i | I | 1 | async | VCC Supply Test. (supply indication for DV purposes). In FPGA Verilog view, the respective POK signal follows this signal. In other Verilog views this signal should be connected to constant '1' and will be disconnected inside the AST. | +| vcmain_supp_i | I | 1 | async | VCMAIN Supply Test. (supply indication for DV purposes). In FPGA Verilog view, the respective POK signal follows this signal. In other Verilog views this signal should be connected to constant '1' and will be disconnected inside the AST. | +| vcaon_supp_i | I | 1 | async | VCAON Supply Test. (supply indication for DV purposes). In FPGA Verilog view, the respective POK signal follows this signal. In other Verilog views this signal should be connected to constant '1' and will be disconnected inside the AST. | +| vioa_supp_i | I | 1 | async | VIOA Supply Test. (supply indication for DV purposes). In FPGA Verilog view, the respective POK signal follows this signal. In other Verilog views this signal should be connected to constant '1' and will be disconnected inside the AST. | +| viob_supp_i | I | 1 | async | VIOB Supply Test. (supply indication for DV purposes). In FPGA Verilog view, the respective POK signal follows this signal. In other Verilog views this signal should be connected to constant '1' and will be disconnected inside the AST. | +| ast2pad_t0_ao, ast2pad_t1_ao | I/O | async | | Analog debug signals. These signals should be connected directly to chip PADs. They can share PADs with functional signals but when they are used for their analog debug function, the functional I/O must be in tri-state. | +| dpram_rmf_o,
dpram_rml_o,
spram_rm_o,
sprgf_rm_o,
sprom_rm_o | O | dpm_rm | async | RAM/ROM Read-write Margin Trimming | +| padmux2ast_i | I | 6 | async | Digital debug input signals (routed to pin mux). These signals are controllable only when DFT features are enabled (Test and RMA states). Otherwise, these signals are grounded to 0. | +| ast2padmux_o | O | 9 | async | Digital debug output signals (routed to pin mux). These signals are only outputted when DFT features are enabled (Test and RMA states). Otherwise, these signals are grounded to 0. | +| usb_io_pu_cal_o | O | 20 | async | USB I/O calibration and trimming | +| io_clk_byp_req_i | I | mubi4 | async | External clock mux override request for OTP bootstrap purposes. AST responds to the request by setting io_clk_byp_ack_o to 'On'. When this bit is set and ack was received, clk_ast_ext_i serves as the io_clk clock root. Note: When 'On' (after ack), clk_src_io_o clock max frequency is limited to 50 MHz | +| io_clk_byp_ack_o | O | mubi4 | async | AST response to io_clk_byp_req_i. The ack is set to 'On' after clock switching function is performed. | +| all_clk_byp_req_i | I | mubi4 | async | External clock mux override request for OTP bootstrap purposes. AST responds to the request by setting io_clk_byp_ack_o to 'On'. When this bit is set and ack was received, clk_ast_ext_i serves as the io_clk clock root. Note: When 'On' (after ack), clk_src_io_o clock max frequency is limited to 50 MHz | +| all_clk_byp_ack_o | O | mubi4 | async | AST response to io_clk_byp_req_i. The ack is set to 'On' after clock switching function is performed. | +| ext_freq_is_96m_i | I | mubi4 | async | External clock frequency indication to AST. When set, it indicates that the external clock is 96MHz. | +| lc_dft_en_i | I | lc_tx | async | DFT enable | +| fla_obs_i | I | 8 | async | Flash observe bus for debug | +| otp_bos_i | I | 8 | async | OTP observe bus for debug | +| usb_obs_i | I | 1 | async | USB differential receiver output observe for debug | +| otm_obs_i | I | 8 | async | OpenTitan modules observe bus for debug (optional) | +| obs_ctrl_o | O | ast_obs_ctrl | async | Observability control structure. It contains observability module selection, signal group selection and enable logic. Open source modules may choose to use this infrastructure for selecting and gating observability signals to be driven into otm_obs_i bus. Whether to actually use this interface or not for open source modules observability is a project decision. | +| sns_clks_i | I | clkmgr_out | async | Clocks observability | +| sns_rst_i | I | rstmgr_out_t | async | Resets observability | +| sns_spi_ext_clk_i | I | 1 | async | SPI external clock observability | diff --git a/src/ast/doc/top_diagram.png b/src/ast/doc/top_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..6fbe3c831ccd4f83248ff41f041badae9eee948a GIT binary patch literal 37430 zcmeFZcT`i`+CI7x2vtBuP(Z|nC`Ck?f0s-4r1XQHAC@m!P z5(K1JQK>>g3r&$0KoCfferHh6+50sHoWuK|3M6KXlR8VG~us54O|%=E<_lw{LR7 zU%co%^5XWk#N#5ysF1iLD56`)#^a}U=A4w9JWGx)k;`q#NAU87Z22?H^s_qGeb^0= zS|qY_=7$IGR=IsEx*A zjZ(c*M&`V#(?*Joe1)PmtZjnrMsofIZQ2R{1JAQDWb;Ye3wMWKqW|^D`k(PI)F#-^ zOV&R?X77dwF)l~rHvIil2!D_3A74Bx0)tA?^)D{}<5LK&^0%La?M9J!AYz7v;Jy?8 zo(K$#|MZ_zyKoXhD$uSS68rmvVUUQx#=l?pSQZYsWXIfi|Bp{0q7%5ge_uyHZ-P+z zrQ6Tl{`;p8@+1d43jew;;~s>!APw0b{>P_~toV;;{k(2Jh7+P*P~eW*1^?T15bEQv zsIFi4-;n(+IKK}WQJxSqo}D}#Avxal7fhUo7_zpM)j#ziSbF~0(u4BBMXcLvNPrNM zN2^_%o$ZiYnew%VF)PS*4XaXXQfim*TyU2GM*UXIqSUkJ@B4AHnBhsAl?UP52r!kF zQt@Y4diV2SxZKqpNP)N>nA0krSiuFMcZxnZ&EZ5y5Qk9wpRdRgYi($s^7&@DQRMhI zh_78hfB-fba!6DeGnz+(@Mj-!c(*{}#7yv2sMPgSI-iL4@HWaLL4t|05^PJ3ggBA| zlEw28F6d5L2tdTWN0HoM&Mqzx5`n4|H6$9|&NVdIRSmhQ3JW7&R6K#HKm?E^WJRd| zhv7f)|9ANRHTM4v&i_|;4r?dD!$Qa5ZS1`73T4tOF=T2-z97fnpP5Nrq)3vx%k}7yEQa1Z}MW6zf)sBczLsvJA)=u`S+t{C} zpq;D8kr=T~Wr_xUDQ3$hD5-#*9VCGR6puU-k`#kJoi!!M71gJku}-1K4>2zn|l30x3W zaA$GU6UgQIb<%Ev_P3YxQ}p7c;H$ODAB?^(WOvP{_3yaS#NDG+HSak5Mr!qKrInP| z?4KM+cZE$44&4<7NynajSG@KK$}@2~AAB&{eut{y!SFp|eCnNcy>e&^9QIK5aK8?x{{+i@?gCE13a>Z;D45@n>_ zc#PGkp1_KYJTTI9nDjNp=k1o+Y4xB7_dgyp_3V6@q_cW6s-Z%mjOLa-`TBjJd;41? z%?^9qu2XAoFQCzx^IFv%fin}cE`#E^%~@GCmsDh!UH)xNoENb2H5H;-Qe@KflRJ{u z#q->EmLD##$Tf!Acdq+TJ_feAgN1DKZGF8X;W)?D^;E7(JR`&MIC4;q!0>B56kvBv8POcwtt&-!Bp1fF(1`{AR79faO{Uq)Daqxf_eWqZ;t?_i z3FzXivt%_ZeR9jiX5Xw4hJdG!x~ASzgUN6RGa2d_QZQ^! z&UUU;ih!XXWlp8v)l#{|_1TGiR#|dIZ$o}+J8cfbD9Vhrf7gnf&p~xzV|A_Y0Vd|HY2kESy`kHfZLEL3CS&l{2 z`RP3oNf52wWK;{!NI64s+pcDs^Icv-iAW9^FN>6b8dm~NHuTtWffG^T##yJhY4@5O zJZYTDf0C3=svyQDabEL3h$;KlmWVUKG>3G5$o44aKV^TKknKXmtM|$%#)O)$lsvxG z@H}X2c1Dgqv&$y*aw&g$n}}tjp(^;{`s_(y+w zQHV3P*>kC9_^gdG(tqazwbt617qj_pxR-m6^I|t zkcrR^QKBe7rBye136!m6hxg6IdBIU14dkm}M93wBe0M!!l-NTsD(kbT+|gK?5dNOW zC1+uF+|hlX^GiV9VQt=r@3!u_Bt25J2xEWQ9l#@(j88ZDWJLhv`Z>1Q`|_M12<toh2huwsM^6Q{kBTm!S@o#pjH&AnTYcHCuIsLO_qI|mhbrVUpJU%u6AO{H_IRtq38Eat z#k;$7C;K|qUL9L)(DtftR8K6mTNy6;)Qr;2tu205vvlH8UinyNVnc^djT@_KA@%KP z1T(&_`f{GRa{o%$#TK3pK2i|fyZ6J<;XFlm)&B1Jn|_1IQ)042{3%U5obWW!$Gfd* z8&pc*+LmULiXi zQRC8&GdR2&YA05CEoZ8-y{vJuf(H|)_~!JBK9=j5U_U+~?7^QB0AoyZvZ07FQocg+cR7bzusvaYIHUg< z?jMQe|Ifpf@If=#&c+SC*0{XMH8Rb&zuRsHeT8;=usL3dc5LlKvA|N#>~!*QNzH~0Mm1L~CcScQ?s#P+GPh}u;P)$QWp7j+AeV#3Z@WXk5L_cvIO+q@ zwC+BZM5bI{J@554KDc+&vU??#9Ixu=kQbiCnmAiqOuH$2rnh{&FF{Lk{33afOwFHI zBwmn@cO48)g?_tC;lju&&M{%+?Ni)QAD)sP;y7aCrq;%T_S8OSy=~;KrBB+FzX|*n zqPPvC)?r=xq37C^z_4dlV5_{fk~dPP(bR|9-(*EW7fwhqlpT$<$R=XA*<{m3k&YaL z3F7C)fv9;IJI>6kl%RV@S+9aqkRdC3xEZWZ>K5L6KnJzlqYf5*kr?3!>IF0wcIV%epPYVqQLHJyDc zDvG(f?KU#0I7V8O-=X%EN~_X17_pp3i~<9De0@`@bG&{^hoR^94hthA7K(-T;)(at zYcE(c_LUP$Q(TD>Ol`O67btG1eF|7De}TB3xbj#5JJIM55r z@9I`}m#YN`Fj)z&0wVoATc-+iv{kyKRzl{by*4Mw?np=*&K;)}=8gZQbMz@!PC_bT zURWkr{-}x6o9dKipXLSX=}Ir#q^0?adrBOrSJ#~Ku#oDpV=&?;yNfD#wOJtm6%MCD zyO9_g`u%yrUb8kwjAE(I_kkP28!-6-7$p7j(k z?_GY5$E+f9yZD^bESJR<_m{9rJCce}2_E^}MEH=&0NRI>NNQj#B4RbN%3T$Yi0m9U z>o_plUbx8TqHw1Ec6ju#*NZnJM#MRni&=?AIB$)uZ+)v%>?3ylFX_Wp8}|Bm%p-z_ zzU6l`7BxV0)H`jes7E+gD?7UR;*hjKc=O9l2y?~6^S;Ll|1{^du{u6+7zz4lVwr1T zb%#{I^72XLCWfLHKCqgD+Ly7CW8-Co!bvWxE*(sIY$3IS^}gHq7PgHd7j;@pg*zmG zVpPfA8@)#lHLV0#y#agU&!Z|G8ovstgW|}<1#VQYaJ&(u$MKl-h(mu^ny{D9=0ynA zhCRs@&x9!?qL}wdq|mO}aEQjDb?6{85K--Fi7Arf_1lQWU63`<6R@H0M zVK)x;l>9fLq?U#yPFX5nDV|JC3A!5}IOBXOARv#n0uZrM@zUvph=4VvIlyMiE~Hmgby_GH;5N4Ac%&Cw?3EZvin z2)EOUmDMTQQ$T4ZWUfJH=)zlE50X-3znT*a=ds{+giQPAeAl#1kAm!FCfHai2=HcJ z0qyJ>C;^od^D61QJX4+J^rUNx@rHIPTXiQJ=Z|%H_oVAZC9s@_y1U2NkXI!Ydc=*& z(=(1Xc@Z;yBz85_PM2ICw+)BL5+w{7p?Z0IPBg#I(mviSvh=lo?eLoo$i|cJ3Ire* zUpS-Z31+yuZa#rs$rUf&ZY;A|DeYP)U2%9->bnDSrh5icd#-dGoSj&;iL-Yt+gF!* zZ0T6>74H?;$_&A6+(1(pnWR?S+{0{{y({@*j5|`RFL0Tvd_O{UYj~NqN9CH>9w`p} zw~f_OE0p1^9bjb{zTINRn{|pFrqs6u1Up3Nd`jnNa<63W@@mgIcxJIabJ7!r(Y814 z$fG!DPkc9If%OWV;oVscVWLe_o6ooFznpo9t1h*!F>J~fx9}9+KGKEBFvl2&8<(0z zo2QC=JXYg3f@ADy<{s&-DeK*)45`ZB8Mfd?RSKi9noGith6V)h;Ryt9Iv)z*4_A&jK{h3TY&i?SeH z4MK@u`xlDd{%hIh;Uw7`a1wW_zjXFtMzL&S_gdeJn$#rIjPte!ju=a~ny6r`w&bY7 z4>LPD{c()m&#^+VH0BffjI$JY)S@r;vP}EslRiY`jg-d*n#%^8{39Q?tgFAU{}?;bsw;g2V|wge(lPD|n%V8|TH zg|65%Z-FAad@IaFtqMXj9If@0P~PQJSr&=7jO%0>&i^XOOccv~#*fa0XkT)c__cZG zIT-h_^v#EaFY}&5T!rgnkVZ$o4f5ucau7pLVWbqEXUHYNbuG(FCTBhh61u;IHkRmM zv@nvC$!>BaZWtqCVwH+}jl`3@{8v>iPnN0`X-_Qt`zQZV1>PQNxi}6mJ)A_!^xt8O zbnv{vza8NNKd2Sv90^WI-Mk5YZ_Hhqa<=Ff?{S+$vP(1hvwrx+FDa?}aM&fA$Q@2e zvI*jL!9izzO1kdl)>5^NTyZY>u|%rT?8oPBOtd>o46XH<;KSeIELE{%e2;rsn;k$e z@$j8rmBOM6>Ib-Sgh(?D&YxMYy9(cZ03Gf397#X!7C+)V!u7k__g^_h^eJN!t6$ZZ z>EcwiTG*7$aIvA>8!8so`4!-Q-0kr0%bi?MsV0o3?c2qRcFwUrLMrPz&81P=FEx26Cl<^|7q43lC3P^5G(iKh&DOEzdV=HRGt? zx*>7Gr;U<79HdTexia5qI<%UvWNEOYUNk)6$C;4G!vI#^>_chIGBR&TVmrLq)w@jD+`atQd|fR`HmTms9^;PKV!p z;OZh-0a4rSZslo&iGc6Nz)|!Y59MF8OPaWF*Jy1H;-oYn8mpc$HN4sNOuH|ep^>vP z-~?s!Z|fp<2V!;GJMx7$Dw?MM%N74Bn%ADxH4Y1q8@q?R|6aI_Vv#s=iM5}RXMX==maUdN9Qql*~$rd1khv^TF*$Jwm&EHVfEQaJxX%ujchd!HO`n;+NaoUQrt^mtQs72xao?(F1(y=zzohd4%Is*D)z7GG`i|6Ii5g>v^a6205Q=P z;n6JyYUL=K4R{NALbv4rFR{-j(Y)*$3~vELS{05SpM9f6->Rt_<ry|O8l8pvfNrz-{l>gomvY{F5#TlNeg!taP1cYZ}p_NXv9 zh-S3Co---W3x=ZW$AKdJYFKnqJ%by0QoXQ*m*CTs;BF3~R`4{^L+xV!^qQ|~hdup! zXC>a6UJ0v#EB;Z+M{F~z9GcJr4v!&Xhcv1!c8L>z!sbNY!n}djOAa-`NAH2Hp?jYH?Wom5CZ0FC45? zSU()L{5l-2Ux%Y!)jbp2DcUOtGGp7f!Y+k1DH5lgTb0NS1&KR;4TGj%`^jdg4uhcI zmw9_z^W`%>{?Ybe^{KCgQIk@K%YHdn|<`vn4- zD>XPT`ha3SY{+P zcqy*U;MG#c&)-y#{lye_30E~QJQ14vWNZ}f1|u>Tl)jrorMQi*BHsSFq5gpD=f!(e zIcI%zUyd){y0>8AHNR(~kmUSFPE?0`c_SN>s`7|5q_8oS6Cz(on|U@jmv$t!Tg)V0hrHH(46I-ogz6Ypnl+WYm&5x#*>+jp5KC(Xf`qh z-R>CUfaLC9Jk~#mCyP|68>wufUFFQek-ng%wBhfG|61V#ph!cm9Ej} z`H67zfQeVZVt^I=4KXgh{p7eNAR5vA$gF!~pm>SLkAjjc8^)MeeQ1HeG$-!xZV7m# z?SG0XB)G6=7T~4!0or`hJqq`4@eD3#Ly#yqR&lQqJ%)_57fQZ#8Bb0s1ZkQ2e@U%w zK9|_#xZc+2Tx<_J4`AlG3)qz}T_a*4x$fh)+5L?FL?!a%w9k`g`>+qN35$ z@ml#l%r<3!7H7jPf;ICP0l!6Lh1n{)vwwo-!ptmWG)3Fmes{ zuU4>S(q4+hfS|V9jaH@ya^Ui}69yMm7sSoFb=oF6k7@t8)K?u$T6>f8uFEi(xJJT; zHGYuBvA^X=)v6i$fL+F~<>Q5cv<4#PO5fAV#md)LHp!DY%k~;_*`<{g2dv_rdq+kbwm89nx*#OtMs+Hp!U~@gH}uJmNHQ3)t75ufyCz);tT6*TAC5J7SQVw}OpVa~g z>RrLcfeLQa#|W}R_oNVrtt~sYs!P`*kTL-gfMt5;xP3e~N(iYini@jst$;{)mBgJu z%ELxHIvhl&EKIIG@0Zss8MA-c< zd$?goImk|+gMkHYJ3!X!K(gI;GtNV$%1v$oDxlwy6Ql5)%5z~H0Ht`V`Q^^fBF8)} zLbg7&K+uLx;IJL$31(N`yA}IfzWmbXRcS}rddne}-ExSkkGXhBbiO&aQo27;!(E>{ z*5D`LQLhDnr>fe1ag_~tBz^%NH}ro1p2;mJ3F%!BC!{OoM0m(`sT8nnvuD-`%kBRl zEG^g(`Fn5k_l);{){MXBKmVgu`rqMxQ*Zw_cK_K^|9@(u7%Orx08!Y^*2J)7CfkEw z>N(JJg~a&1>f1e3rH-+#&#u}Ialzi zu_=Gj2#@_xUfjSd6V#K_SMcgs<=R#>>QxZ!hFQ(hF!>yDFANXu3@^C_Fxej5cQ+2y zjr7RjQ|!}Lg+RK;#(bp)G~;pO0*!*pJ=?K!N_zIRlqrgq$WM0VA2p48(<5Df2sGHw zY(rzw7<6x6$1ITzN;nM>*=#s?Eo|-X);>dz6<;qAk>BQ6y8kes5?Im0< zn%VcMgRgM$z9l9$nqMihXXh zgBUi_q#U(REX%;ILZsdQTg4prJu(-NLmV7UoT_ur!fU8eN46J-bOEL(-$Fm9cf(E~ z4E`&_6O_T#S152mwpZ~)?aC7aA&bLsQpdI$D);*_%VT!=(Q_>uZ|9np^wgYhodkV4 zA)Q&IB}K*1%k#30djdIsL2Z_%r-^5*;>P#(RUH#WVo&MoaDdRLa^^6f8nBNglT9e2 zrNo-U%{4P_#x2FXIM4_?3d@y@?G2vK)f(O-wGmCy|J`IjhKYRjkOB?Hxf7HGJQw zx<<{8tp?Zxzt|8ixNlbD>P(#r(EqeuynMQF)86{J+DCre7s+m!gZ3kvu7L+Mxc_+G zX>~dmD*0n;GX#}hN8(tit8W5_$VPGF+BI)-Y>NLHxez?zXmA`!EG>5^X`bj@^_#8L zIp$u?Y^{-Y9p*=+27VFLvH8klaxq0$(ng!!6FBJ4MtP0;o@;{MAGnAh7^e{r;i}TT zy-RB!x6eNmk|}G)=E!E|68NZ`1o&&2lwc~)T6L%H`DZkx!b9 zO2I7H9-igZny>1om)~!?E1*kQ?o{d~Hy28+dZk@uJtv%>rHy!F(RDJZi?Mn%lNNWW z(=7`pR;M3uURJfSih?XC*xZD~JXfE!ld4D>Q^8v4vh~tJJui{(<&aT<3pppD?a$yq zr)vT}9!e}wD~O+PoPiNeo!Q5{2+9ImVsdPH%v^9gK!)n|Tbm9^)Ws$Y@jJxXbF@A3 z(r7m6+a@n@togoxm2KX|s(1GVlU&tutXxiU4IinQwzGLu0d&_6b;CmrjcBpI+E{oT|Qve*!Rd3VZ!1J>vmIZhZAd!2#KW`vQGWA(%ebS9OxIh6C{%J z$boxIfLvtK{3JhUNt2Vzs_*-YRZT zQnrW}vtU&Jxow}e<1Mxm_*`mMs%#S078V*EhCZ7+xP97C9QeXpmMB6bFe2}LTo{QH zIiVc&VcxfTZR)+zUF?kLngYE&E}VQ&HME+vJaR#|%I*4Xv3PY_j@gl3w|>fpz$qEU zgu@sV^KcZ>pjP@>F|^O=T#d@!cf|wh&aLU`aA#q2f5n!zT-MxC-3;5N;{+B(mQ=Ou zBT(L^{xqYk0(JGyBve$vVtUS&yma^?y3>O>j@r`0F#!+_G{4CGRXckvYCM|+kJ4X3-fG#AbntL^%H zL`|hF@Doe3F)V+jg2jC+-*VZe;_3iOTp0;S4!Q!`bvjxc-ZYk5bodu1VN*WH88hv>j)C zg@dbNRsVCG@yt0_%Gso^!ZX`I(S3p;=PvO>Uu1NNHf_jkc1=qspAc~x?Z+Y#U)IB-rr`4SO zfm~%+*)a&g^>vfqj>Xh;Up5-V8oE;$*=k+c+;${;3BIs|i*V}fesgso z`LX?mAVTS>%>BC~*u|>6Fk$hWPpIV!t1LA{NND5SwzAZ&;3~DG0a4|T zo?6@hnA6>C<}?h_x6uam{mrgiyo+2;^1chb_nHHE$;Nby)Ow;LRS%zRltPAcrmz2A z0q8Nj{Iha;*PiB^~yx%=C>a* zV&gu(&>!~*8*U&41i4*ZSW`UB%!~F43gJUCC5-0crHmlebE{4+B1k6x0a26I0KmL1 zD%X9ov!-mb!7V(^?0+NcGs-SRPC|Qi{#3hXnO_1Zt4;c#>!sVp3q&FMY^74Hz?tG% z7^*kw0Q7lBu^DgWhM*Si#lJF6fIUCiExQLG3{Z{zP9O;Bt@fLi{uc7##$5L;x4;c`Ty=hGBFAfxb^Tx2)9E$!VZA# zhhJn_E9skB*?By3HO;LV$dgd}7i;=YeXS4TFY1kKYYys9VMHZYDn(-vFtmH4TXWSX zRn~P1Z0)x8>D95Nh67ot@%N2``SY2d&EI(a7O1iXtFdVQSqMWj4k6Zh_eTaya2`P06O-$Rriny$;!Xw4k4FM$lXZ)Yt2Sg%{TZMmCdnyhDMrpXW^uA zN>9vdjin7FQhsQU{1?o^|31J|%X)vcR&^fcZi2@%R@2^yMBl*jul%UR69a@BeNl7o z;f$Q>KkYuz<}J3^3;hn=qam8+wu+ZLc*e-By;WP7FYF?Xf;1R8Mph^e>e7yWSHRiU zH++@SBN5viSkkTs%~o!lSlyqUK&nYOiTie^=D|C$6$d27$?yB$$l{dzt1DgZ(M?zfqct+U8M&f^sd z!LwRM`v#PKoucDaoF9EOk~EhHHO8D~4nOM?EW^21;!P4E(*jo=N8Juqep!D>Py^2& zobnKZ2$U|VtZ%5jYH3X-iT{M>nlqn^82*|$HCcJptF>;w(H&7i9w5pt@^y{ony z+iX*Vd%h<%xgoZ2CYU=MgEC7;i-R;FBJGDcV zQpgpND?q;+VrIJmFlpEd7z(36QwXS9$TetI&b0Aq6{;D(wY~SVY0Y!`JIJLJro?~0 z5RhoU;j{quASdh}*b>NiBcYqErsbHxg$}tFbi?b@=;9Z1j24`r{-zk>0BPFX;8`H3 zG=%rz86cJGl}`Yvc8Rcl8bGHSux*wh950+$r+Xtc7UOvF36u=_S}1yHCc?dq-^AaV z7Ua{lRPko5w``THuy)WZ!*kn4wjS&^V|9zhjjf$aPd(Tw@!3DkrY^ME8-dXgTmz{` znng2;MpqT)tJk#^u*Sw>_bM8Xy^+((Pnh42^uMq5bqi`9=%9zIlOwlPIoY`v32{7n z@|gk3fu%(pV#RgfYm6f*BLM|5L3Ghs94S^N+o)#d0wkpxNNn}jt-+rucWHF#xUdUZ?rXzE_*e+d!D^-N+z4J z5-2jlSj#aze^o3#pHW3uJla|IJ-_#m+nh0)Z60tI4vILt)9kJLP|N)a9fb6CCwoin z?_xiB-)X>bhbThs4&2CGjz}d#EC(S|w~#pK1K=vFdR1!pn zeaz46Y;NCY-+!{Nz#ij01f(O}K}_3%`y=4g29AUZpeq60Tq!Wv>sB^l0dND3Rdm0= z>~+%ras{wn#5UAWH(WfH|5a`6>7siWw+VVNAq-!8cxn6pREuw!Yn&gX3_7B=;@U@Z zm;KpF@isM2R@~j_xM^c+9yqGLQmvO&1#W@uz&Lh8e6_tKh(&C$ebe*OmF-+T8mvw} zL@-9WKYj;ogg9}8kW=D+(YU~K8xC~e;4uce@2*_{CmWT3bLW3JO-fzK_rdeU_j`!L zN0@np?f@>--=;!fWc^{U`0Xi;hNAgg{vZEtL}a5{=ti|mC?gJ#Dra@vzDF<3%ZgI5 zQDDVDiSQGDZFW|dcFRL(%|H6-!2L1t=$n1|yveR7r+U+W`2T)g?(_fZ<>@&h)H^lb zIJ{PK{NDR?oM;ZXyT)c6!;)95xW*xpC*e$=6Lk|Iz}W z79^?r*WGJ*h{Pf|WBnv6^eST?0*#sDU%wt%W%FsTt>Xt~Qckn>c9_nAy{nECxjA>? z)@@g8+nvw1PW9N`Zt4yb16#po!XGxMrHPhZOk@;TR6of65GG7^hi z>zuxh9o6|xl@rc8VW+~42~nT=e$Bl);l^;9AMfkZjQkWd#IztDmG{0#0%;Zo5vYc-=9H&miY1v5$Us$6N3(tSAZ* zA!De`26yKugGNWPxqPycf-*mcIk9m8 z;FSDE&)yh%LrFaDz2l3SFHuIy8d+5X#y&$vUQ}!#==i^X?rrVWaTQYxXRE{$yhoAAboP|r~(n)OF~LQ2*x%3QfT zfz;g4#qTn{YgBl<%l!fB%PiSMmtqQaUu{XM#H7T+#y{w!Y$UaN%QK7Gz==f9y#)$V zp+=fE7;hnsQLWOWPC3KT$zcN;{ERMbZE)^-yx;QuN|<}B5I=EkX(GxAz&Kr8Tv{6+8jYA3MQ#<~pN7?&+20$*PkWp}*Q4F^1F zM5EY_fopePJSNrrb?qcPqJnwQtaK17$sBklMhF7BT^F?+h00jPQaWFu)>Hr}YNgv+ zreEZ9-dt0~w|I6fweuwK^&vib^eoHT}H_(XkccRz}5YQ0YZH zL&8H`y3E?0U(&9hg`+|JIt}taIEYC$ zeK^j>TQ7F);=EpRsn`kW4y68zovEp3ISL{yLpnCj9%$VMW@{p{p*z{vi7@TnUsmNa z`1aZ2n#q=O?e+7*r)y114|8_uDaJoP^||b3(XeR&Lc5WM-}@uphxy!frYii$0!Ozk zQKsnDin-YPt_s(1Y}VNINrtH$@g&~X9LL@t_xD=wllnEc64Bm6vAa9C!6PFlKqQ|s zje8ifT0w6~3S*?$1atxaqL=xf1w_AGvHHJJ55hJpr*!)Rbv&l37f2DSvFT|i(j2^} zTY2eEj~25PmwCO{{7!2}=Y*Z}>4o@nFP`{0Ejgv9M&rTHM8O@AQUgD^4S}~p@ZCuF zAj$t*vv7bfb9yQGd7X7I;hBr=Lg=3(Q*QBG-h9NBtrfwZCI`njP{B0+ONxA<$2o3! zE>%y8h|GI1Ex#;6pvNi+daOhMRX&^9UjaDq2`{_fi-Gp4puV%if@#l|ot0k?3oYQJ z+`b9WQIW+n1TCxJM5D(sdkcU9o_e-uDYU;GICqj*>cP=&%x_aZIjf4 z0bx4BQatw42(S_S-W%clS=3?+uJB`;ej`8@v14{wt~nu1XIfja_DVx4j$o(xB;={p zlIO~j5X0KCl2zoon?SWlQnn*?`HZ($R2SKa<3u-n?ZJBL`%o1H9)(X-P{x8)-Rnjd z^PV~6vJFm?N$&im>r)T{3(PLg4~v^AcRTvHtv&Y}kV;Wow^{me5Et;IFV|KguKwiH zr?RC>Nf?yx)Y|DZ*=SiiyTP>K!d{zPt9pg`z6a1K=!$G}r&z4pln9S*iF7>!t${d+ zscsLpJ?rwh;x7j*Nfz(R-da)nePT;M2yq#>5)@g~PX}DN-(^p$V0>=ZpBO-?M6EKyu z+_%mV8d(YgM3=UnB0Oo^=<~qzCl=NA<6%O9yPVsk+fep;oWT z#Y(g6du&tHyU~+M6vi9dt^q#>w^6v)5aXnS_rS&CKPN9JA3jvKBAxx>=qW{U4A%0f zN?OKR8SBHFt?QcE??4UdJ+R%2_8s3f->q(-iPxY^D=RFZkJr;p6g={0(!R*?pf8C| z^L}~U6aB?|6}ZF>>&=l;cxAo&j@zicAlG=*?O6Jxqh7qEco-PM&RUJ0lR+(PX>o~~ zQrSsAn!eOO-`VTHc32?~t7ybE7)?^T{ejUfxt4Y}N++iFMlx9liMc=fx&OW2(%R+N z@VQco|8s}A-O3tk+r7G`5yMT29!mLZ>Lr!k#yKTBLJ#IHjWVRU8)W#2i-X9kq75!9 z=*iV4aGo|ou_AYDw=Z-+8o)VcTMiLLjt=$6gaZ9ma_bKo9DNV{HFkb8bVmm;+QROtZ(R(nlRi9 ziWQ45mdj^9glD`?2a4E_9np>_`v1*!Xu5~HCU3cJo&U%zsfh4*ply5N;|3?^@ zP8`tb#4*Vu`-0_5m2CnvZKh+ZO7ocK>d-jO2p&z(kv@W*F$EG2L}93{GO51bqw{v9$a=1udho3yVb^GQE1i;&L`))r);* zli5|#xyelDHy(2AEY5zlO|ZSnp}+SG)Eqs&jmRWKhdCzDJt{vuXB7u)?-avqLbcsB zsS`cUi9Oro$E%n)puow;qhd%A5BbX@mG27YI|f-cj_HoGNMsee(O1RO8sQ$4e91Ii z8pXTjRNZ>kvE$E7G%(!|w^Uv9D$uoGcsSg*IyNVstc4N5Y{HxqvE%nq+ozFgEv1_< z>Dh6db`H2qo|k%39dKPZ@k7Nv?$OrOs*x%Li~g~1<~8Ok4loRDncXYfyMwhjp^u)i zU+F5Z08d*TEhudj0}s72C{7k}O%ZbkLjJ3%Bd` z^?y!EGO?+!@85vJBx4Y&D;vm6pdaJBzBcJ|q3|nxzG(_*wD+=m0tyqDt3rff4w3=7 z3nv1@Gz*fBr;o4}@AR#ta(#i3NM{)NocUF`vgXJwJ4-I;0&`(CVk=w{^FkhJCPfLg z#}P@=Ix}Q?1?j1?Kmur(G`d)eXN{N@kGFqtG#zk#<4_Ulxs=D^ymIeh3Z3ddYBt+e zoP945G7VxG6r%8IXU%$=p&i?2Q<=^8#MZb58d6{fb~v%T8$Ry$i}(-Xp$ zU9H<=Cev2OzEud08O)-Gtm_ziBtJyBjf!J)s$HTC7Cth^p3`LT-P&mj+rYa4t_CEm zMQvG=$(9Xu>Pv!A`yez%I{Lw6z0BE$?zwVn+DGl#1N*5Csa3^;O!L9V-zP0u?G8Tq zjK@2V<1mFqG}19CamB=he6{elqYK5W#o7~&FLFtg_B&erj6RX?7NxFB3zR7rBPDd; z+^LF)$qHF(pWMm5Ci4I-&m7efnrU)d=P6f3P4PCj#>=mo_PBO1kZLNY$Fi(b=dLf5 zDt5D}^AbxSrbrvcw?SU^HmNC<(2S zu7DE9=olu4Ksx+5_ML{7;t>=ryRSWavUBjn4?uD2URh9Hc8c~KkM90d`+{|7;a-~& zx$A#z(#(04VeoI`ye=vw<%fK#4r_diu@k0fdOm+s*YWI-#G+r0;iHas1KX7~u8-Yx z|CnSh+|(5$p{O%G64?E%-=j!)J8^SYM6=0TpyXV8*!ER?IQNEUfM1Y?7Etr&Jv6j) zuj2rQf^F*xGWZh@|Hn^0Vq0VKGsucI=oa;3Idnr9Z6AI@TSfjRCABKWdU?CX+v>?B zN=KOMj+un8i&DSD^TQ`@DGso8@tqwOw~Byu5TkWmCar~aVjqLlDfk0ElRs!+>{HnA z`JdkN{RMOOTS1a0!{OD#V&eM)>GST*rrQf=D}y!fv47%+#qQ_pbE=VtA4`I~HL2Rd zBd}$CGOpv2i~j4A*}ChM8bti`33QdD22r+S^#=j?y=^#PUo7=w+T;8t_FMF|Nn3YPw?+O(FHnOk2X$!63w^1xqZE? z-0@Fe!I3Ryi$$P~Cv80NO2N8tGd6yiut{aJe&lZ_OtL(T(C+yxB6mLay^y%>p29gE z!VinpPe<~0K6zXh=u161!2V6MyA|hx*30kHzl|zQAs#N}@$FtTvHlBpIN_n0|1VS6 zuh$zPVyY+LzbjIIdiH*V-p*#H*ayMi7Lxz4IQ$6S?@H~TuCE_2J1A6qu)!YmIrTHy z48kR8#^D9sJx+ULcEG3?Z*HJNz`C)%h$lia6e|JA@}DvJX|nra-RRtU<~Dna{wBn~ zZ2rb#Ff0&<#e3E)x(f5XD+nOuLH~zoa_H{nG>aBMrC$H!uI${p*Xxy4r3IYoIKTE1 z=*BxP^l$v;Rq6-mphUoL9H0gMmRLd(|6pFHnFYQ34wQ#!+)98DQ? z%w3%SRP!}@8xEvZztv(Kv#ZG&G?z4A)B&RCTIiHPN3VNRs;cL4o30DNR*@`b;4KZH zcK^+d{?M_pLCuy3 zC@C*|X>0iLlA`cvfsmw~SA5pa93H+=x5JbDDy0b;hZZbz0;KzJOpVAmMH2OdHe!x@ zrI#4!tW6pSV!wV0yy(ehHrGog>H9a%6xCA{ZLO6@>HQCb7puDi6^^+EG4i$9{8oB! zmEY|nzn}S!B?{n2DFpJW6ys%&U{ujN58z9iiNhEaf(R=9=s7@a=^P40yVmpt0Sd@v z;D8joY2DI_&s^c%Jrxk>c}YK-E;GNZacdk2!bZRb5Q@t5e#YFW(F-P7dzdi~P=}E3yz${lzW*F6o$Gj}r_HOCTJy zf{ASFwp;=B^y7K>w$RHvrg`@xGD7Vv-&9SmI&QYzGU_7e-1)fQ8(8{D1}uC16>L(n z%?<+J1B^Ll2-BQB+^GE8@Bhd^{79i_2!m`tK%l^}6&X4~Oatr-RM`w@6W;r{2SJHU zG1glCYtJ~#lN+Ua8gq-u&jrU|aF+39k?hJ}T=r@#&EqF0P?V>S8NslN-5);5ZcDuE zeq)+(^gCePjSJY(6@|3egA}2Ti9Yuzbj_(UIC!Q+gle+W5TmcfRj|T3EqvtM+C98% z0jb+Xzos^QVzESg3Ao06v$UhYNn5@qU(&<2S0c*8 zB{altQEV_g(?_RTlvseI&`K?Q-7XYWclF*q4t)2uv(xlV$VmmH$aaQFbuVW&TpMO9 zu7=eXxEBh{xy+eIi=a=^RR>wX(9A*~&bY4B(9H#Wp=}h-Sbx~rm7#ukX&~LtDTSpm zVTRFjY_fh(n_CreD{b7>=h>U7k^W5(E%)$6bg05hPp5%dHc7JkQeUGs`%L+%=L3(5 z1>R07sJBgNShPms-7UjYPbPhp_m}v)Ke3yjS9=EJzP%fiyFy2?gV^LW<_H1xH#*O( z^yNjh9vffF!}FmPBkJy*fymNB0xB4-_B1$4nmA`&Hb(Y0$ZZN(NeC2>pGRiVA7dz1K~*kx&Y&}Z251yS?4yf@k$&(uIG~}`6 z{c)Oa-JO}-+2b>AqO7LvqUKh0Dbza9r6}sCn)o_k3cB95KAoJO)6sSZlE<}#>FZqh z1R)}u)!4W9q;#4!Cv{z|_f6(>9C#ZGNh0c$o(A1#(2CAhYADWde!k#tbDbLRqu##@Mnm7}^Li_O(IDHuhyKW107v(sz4%fA8;~-#NecoY$E@oH=Li z=YH<{em?hoU7zc7Jp>5h(I%y2NziA2=|dC#g^eY5W8G$W2kdnFT1Gz}dHgv`>4d%Wn_`=D z&c@irp17Htz`3TkDE`jexaZ+Jc^00rA3g;Z*@t&NUktNAVoZwK0vo2YC6`H??^yK+ zxr-4S4SjL!fYadLg#}QI6-@XUEt~(rm6Y#BRWO}M_8~u={ zwn1ZV$(OEpG5v8++rmHVzAA^A;M_lniN31#)mvn;4y}xCUPhVH?Hc1`vX$2$7q<^A z4Bk@@@%OTy*jxG`#*1nt8MOOT5WPNUB+DArSw*-F_}UzKoj!7}q4HFF?_IGj40G;C zg{4k&mkMs(3}@EO*qPt$inG5;rFEfgDcP1Ohd02^-C|sAijQ{b}3(0NlV3w;QRB*%x)8}t_d1xTntlxOuBmPta zE()DE&bV6OO*`;|sFB+Qh#JRtrc9znVpXF;%Hw3OiQMX?UAX|T7XgJZlExl6LP40wFmx2PhHZjRHF1&IVz4x=`2)-Yc- zPyKkr`Q5BnJ%>iVo1IZRai?$Z)C8D-X@WbqU!8Pc6G_^*y9_Y4mH)Vk&twcWR^#LMJr@ZY=~m9N|?cF?!!0x3%p z6{e7_{UVbc-)U(QLP+D%N6`kBj@Vf-*Z$AP?uVojV?qNeY2=Vkhw|Spe11H4XymyS zJ%6=#I--$TO9emEn41tN7wM356_Zi6)=!Rhobr5EG1s*09f3Qte&Vv(N*k9{Z)i1} zh#gsX#7yu_ur#dWbk8^|JbPwR1aL{|zuKqvV_8Gxa*#^3UgNr5q6r^er;7H*FP5rS zj)hmr^in+m*QPIvLM@Z%bOq_X@;I5Joef^&9{e6x|Nf}j^=1I9sP~NlPB?v9LcFn; z6?jZLAhwEc5gYtiqH+e33Xpv=Y6+d0fdtVRpvrngEZu^{v_KcaCHTKXu zBP}8As&f1suyKWkCIfqy*|+Q^#)e(!+X}Xh%l4J2O19AK2vt3*-w^~#?mNGQ-VaXx zA7R&o<6?m`zSRst-9yOBTN_9|>pQ zOTtI6wgdU8llntFYvh<$=N~9l222f7`JwdE;hT&;W&m8JH`|9Vv=_K3pZb3LH#n{4( z1Lg+1(MS#Cv6&ABJvBer{1fJMArK&v%(UTxD)_de``+o^>Qd7vcK`TjR4|kE=4Tpg zN>+@TS>Dw8!B_WIbdiL_?&7^UmHlLaGVvpHnvedjo^Kw`pTBLE?JoYVa(T3ZZdq2m zAaKg-ph_ib-@MigZH<7oCG@8i>wgoq&I%Gd6_w6p{}rM<52Fa~oo$c$XL+;h^hYS; z-OPlBoYY$op8f2F?PIM5+J0}IH_qCR9;q?4BHOOfc|n7 z`;#~L7lyAr4xw^E1y9(%Iu_6Ha?W9eV<&m`S3(>ronjLK!Q=0My0s9Prm^`xGBa0k zL`wq#*V}$^Y|p)ku!$XsFCFp#k<5R>iZ-n6BUk7SyfS!WxbuF1MKX)Wn9jqmoSCwQm#9?=VD%gYfaW@n7lsPmO}7E~8c-x5STbro^IOtj>n=U_ z!pZb@HjZYFKiHfhr_S6F9$|f`oUZ7T=GS2&Zt!Mx$`l(LKmp9Rm~cH_q>5Rm23Qx| zHL48TM{85sXQ1R3E_CI1oCue?T&Z0Spc7S6!U8PDu2KXRoHY_38#K9(X%@ifS&IC< zIAUwWKvY1cq6la~U++E~A7w1D7fc0=s}2TdZ0v?ssDU{Pnh#fh0lbxa3vzsoXk`~P6F%2G z)t8uplC;FH)(th+CB*K2y>V}2>Hh9r;$HTwdXL(CgJ#SC5kV^ea(^zgB}Kr2WgSwS z9H?INWqGAP#a!lE5#QnJf<4BuZ9suQ`}?5Nt#}!`wT`~bc!vi2ieeLRhlxd-A{!oU z+1aaO>V%Nn6T^8CVXGIkd&k61kcE|6`8X*tkjeZJ97}COzo3ic9t2N3}~ORe2S z0H7GD<(~y<+nIjcu_sQ48=qx!V=9Pu;dZA`Jq*vp6Ec}<3@~BPm@mE9AV!IXyR9?v zHrA444%lV4T6qEn2;d$(xMtO=tIk3CG<(^wYMCB$_0mRV_ENbS9~ z9Mo>9ybC{G;IKMj2B(;mgc+$t6CwiJZ(YyZ**$(<5~0vxMJ}Z(R!l+pIv3LBa|!8w zm%!;Vamvu`#bHKoQ*ox`w**48_bn3)TUx$E`TTyB`Rq+QfgQ+!yk%w%266O`TmP0c zp!dbzAu0oD$ULRZ9JdB;p~wxapqN6-*8mlHx7O*_B!(E?S@Y=X&>cPZb1OvKW?Nsi zXKsZTKDN5W0=7sXm-j22e>0K6x;2ixlR;PRc%GPpc|U9olvNW2W3i;NDI#rmF;I2B zJg{-xWOi&iI+r?jKJrBb^q74_X7!zhI16BNkj%vwo(%}xE;B{0+0x%C328C@* zBN-o246!w{-2$bHEdnqXe>o>TAtv-;2 z>{;b<=nN`y)NmsLF`#XAEa;EyRi^Rk113^EIFY>oF}D56EX}-GKKO0H9-eW`w~=Wq zD&)xMZc*xKU1f?i3T*qr>I4z++sjs=-JP3XZ;Rr4sEfj0flQpy?%N71N09`1z(mWe zAdCE?aIZ2G33hYKrfk=Y;)BDW9=(AG=Ru&hNwh%8YgW7%?n06Y+1XQr7S{ky7qJm!%ugX!*tP;!umYDgaX4PB_O=FMy7~Sh7;xq~ z(OirKDeOq-{XiO8Le<*ZN{!oI;p_t%eQ3~4H8fU zu6cccjP80a0qBqHfyth!5u=*YbU`oKwo$%eW(;Q(Ac(ga^zj&RL`NPsGWQ}7_wR!$ zkB02C`aaqW`^uy;)o;V1N)q)p9aDVL{@j}ujrIs*U4OvZ7+J7XOafhK zK5(U_0nw9p-g^sQcG*rM4t4eRBIkN13Pd-W7t+uk`gaG}JLYKK8Iiq6F&b+Sy& zUR9X=N3Beq zF{r2ym)Jvl^b-==^NaO1&>YVu(?Gv#x!viI#I+A7HQ_@u6~#YCpt7R$9!YKL$1&t* z0%|L9*RVZxTnUVK(3XC1Tv#l6ipChqSa*(~zAaC8(Yapzk#?MQUoxrvOI zouGdv{@RXSsj>dQgOU+Db=rWJ68twwSnh{5s({Y#zss6#jmvMO!v93n|J&Tt)PHB3 z|99+uXv+V8Tqq9TM~mXC?gD9vl43Q$EI-YVq2Jehk#@3mJW4>}--3m|FK(#V)3v9g zVhVtnd?gCM4v70+TW?OX)VVf$@*D@`o~S;%VRZ9FuNQ^+@|14&U*@h`?=<)s$F@WW z^I*1ukwzM)~&@4WW_ub zZ(5Z!0qz3fv6Jo*)BkKk4Cg9}(KQa=v^q8e=(m1&@u;?X|;6RgWg2=?4IMvgi`EBtjdvVu`0`~&@+u(MdpE{kC~nu9qJ1Ik{Yk#<`~!fiM#vP?f_^;R zxj0DXA>kyC?CXeth!+x@-=DCGqr}dn;tWt)*g?!lu!icvJnOz9?85UoVlQ^GHWX(E+XaZv z0)p5?#S8IlB^&23+8Sq4n>fs~DYrZkDr{BrHlyP3uA;PB#qy8wvCn0yl-+<+v&c0q zMX>Ry%JeRuq4|$I|HX0{f5h7U;{XrKWQX`_BF@PL5Q0Qm_@4AUO9mk@twGyve${tn z^;=f;x^1D+=Rk=nOm{45=mJVYbYQJbdfsh=_G_O=Q*Cz#PTkXn1dQ7gPDy%l_ozqd z7WZapL6}L%cUOTjo66hPjiXKX7t)o8}Nbv9ty`GRTCnUUl?MSP)N&Rj5u--p1ACbIA|25#12ie)r17RDn)L_#`!j=ty| zo(&?@Q0KsvvnhIEW|db`pAizyZL&TjbP{r5W|KXqMsAq3#aQPYyhthc{PNF8m4X(dy42tOf~u6cNmzH z`N;MA$$w=kwZi9R#@C*W@v$y8CyTqr1$=13U!HFfcT%C%4QRaURo&Zz$ML39#U(l4e^C3M> zxCipPw5)= zsMk1NoIH8<{P*NDvc9;ESBhuxiWjq`rBlKVJoy;<4u5(r5&VobgCBJsQk0gW z`Gi(pBX~?QO=G=9Y;$lR(te`SVn(@Osn%oQ^>mN()Xn@`owWsVE@bpFap{D8)9VQ} z0eA`Wl3&o&qOg5pf2wzkMAOT>kz`!2=BMjitj7EA=QN)lDP?P);=laWTBWka9PgGP zHu}W*X4a}y0#8Gt-UNhzQp&!o;&5z_dU2b5mLEETen0TER!vk8g!)FLw@^NT6L0O?dv$FWvrD;U^GQ6Q zIrzg)k(I`hD(_XRhCnu%r2@*p9BJ%Og5pl6ZU`6wi#>8OP{{%8635j?l5Gxrzp65- zB>wM?b+CCiaaCBmZ5nv+Z2xzMTzul@A=xuc14?8t*yRcj%3J`>)_&{^DhI=Xm!EaE z9NbsFfUS3i!B7XjzhPtEuIU{S=PwWf*J7x^9gN#%6SGxdHrt2*FBHgO=RBngbMc8^ zfXsBqGA_rlKjSjfv`4sBqy$HWs138355!hE1Fimh&@2W=E2>poM;W1` zxL@-JcKJDf#sXu~&}RDddh7zws{e3vnhP*^`*ydF^hN-!YK*e==czE#RoPkFCC~C8 z#eu1C_NzHoE0;io8F=_~x{c1n0Ie#^`YUDwlrJ?hL9vU(YAmp#1f30}tZEDcgZ{56 z>0m?Ga}|4T+j+!shURT03T}6Z*g!5`@{eNqUiyh*PdSZz~(Tl8Ifd z=Xi7a=0N<$I}}BNw6T+-;^WsxSogj{?Gb*OV z7z>-Rv$kPX1}mGjZez7?R|&*$y_xb~i(E&B~7gZIRX1R{m9v)^<_}`i_Re zTnBS1MxIUgXe>!2!?=&`fK^U&=c*-ESwM^ntCnY~zNpd5MJXGtd!Z_CyYi+Ri#P5; z+1fYOkOEuFiZ+`dksxaM{@C@ouVcC}O4WILq`Pg0*lswq{9EhvQvH# zld|%5h$21Uq_gaoyIIGv*||CMt_Vkr$BzDdW+G1{Si09ul-GJKFUuyyr^n38Q3~Qc zz1`L#7^~IEbhrMMHOgy)&BWoM=r*y9$mu}OO&7z_M#u8Jwf@7Zc@jZT;2DD#b8N@V zFIZU>K5fizRH(Xtc{yuT6?=VD0(*~~)F0o!HbddETz_^RyXd*T5pTY9F1CQ|;kuli z9#<@N`)-vJjn?3FcW7Y7YqH6YyJj5~v=SKT-3nEVn=icmAjLpq?TcS*ZS35m>G$#U z)_fip?3#p|tjpUPvei=B^byA5K!b7sJKr&DW>LoRdkI z9)0H`D247JS3KB>@@#ig&sU+fUlthE95`LSk*NAgV_Au8zAgu`S6w14^lMl``ucLP zy8hX`-s>2OP!MBarXW2Y)5!s^-87 zd6<=`YiSj84zl+N%cC2~qTOB30t0-GQ}01>pIdq0hw6jeMZyHUhl+C-l)1qzh2Hl`e0S~HaGMHujP8{LPS?x?Ew0!^a%?F<>1el z?Yzx+koyXY4){2Tsuj<8bqFxaBQp|NzTvg@@l;PvuQBWm{q2|HNYmV1vZODk$!B^b z2WcO3)k^OmS;SFLbR*P_?Ac- zEa>rgbm8^8bAI-{*VfwHHX2)(an^LO1K52&ar}(Wy;QN`X-6=dU?%4NqCoFS$*Os`pyB&m9qf)q3!VeoSVEQdqM<5!EvA z2xT05HOps^Qu}@#&QIY{q~-UgWUEh1)gNzKbpSP6&N)M8)Uo7Ie%Lunj*Bzs85IH0 zGpj|G_4^((c-KYyHy=}a2IR8j;yPF_g z-Bg*Nj%$i!dC{J%j!uHkzSy^jZM2Dyo%$e(Y0=6FN!sJu5~MnL^j5LC=H8m1&BgaY zJYGYh>a;AetG&qvUT;Os7aoFDzCb5$JoLU3O)A5F57R&!-6HlZzxuhIjO@TG2!aus zf+4)_bN(A~yjTa`BJw;4w6jrL^NjK9i2UPflM>zs5;g7ev=?8ENsMahKuL@BA3dt` z0-iwPR!TS@OV?JdG`MiQ(o`E~%%8GwONigAzVg~;?_ij#&sYR${?++HB}MH4_o+Fy z6-iz>pDXM7qAp`cx}0^`+8gEHJL*Lq=WHUQO6>2ItPXEFZ7I(Qd9fOZXXgk97O-3d#$iD+%ptI4B-0I zs4#^yKag!R5a+mz`D^JW1#4AFoCJ=yRA(QRr81yg z71z@)-G(#c=(F*d5SaoE-QaJ#UB7Xy-Ds#J+E8M+@azm57O+c!-?cz4$zVf`XMsF0QN!x1A&|Ym zBcel3c=AN(sIddLxVe_4ZKi6iWN@ger~r#SxE5r*>aOak*p{ZB(J(Z8oRjN&cu>NG zBF&}$JM?-^PMaI|mGCv|HEKIjusL&PC*wLeOpaUA(MRjS1L_)eL$wz?29UH* zqyF19WV@BYe9RLLeMa)ZIe>E*vLct--YrttAhz z%*IiZn$HT*TRVGRKqu=O-GzV{=`3UhSaBE&kZ4?D!gDJTRfn(fZvV)bD$S}T`z`D>x9?e{rB3ILsH^68wHbB660OXkt)H=cPO+8XXe-TBgM z;W6X$AIO zeJ65|7~p;5FqAu0wAn9vF)Z}{@mopwx;{xZg3s#WZtM*Ske-q^3oYQ7p*0oU^*vQD z7BYON+3ovBd5{PNcReXD;wE)62qDWdmcDo$Ov24|7)cUk>*q zQI=nB?N0z`VLL=>#x-}Y0Q!HY1>Or6PIa6EAm^ETV9M28lGeK1#*>PpV%FjFP6K9X>Vx@h)1#ZD8JEFzSJS`3&i@f z@Gqg}AuWXDnE`|ao3g*$`v|m#t?dc*2#+{1@4)T&zB66M0{Q;$9g}YLOqAL(F1z3C zf3|t7ze2oS2Z=h>aT|~Ra@ebX$s0xGEne`Yq@l7(Hp{iQfH3vz*K@eb?_B^4Yf-hm z6i#^QT&?ux`CpLstKGhnTKSQps|w{Um6|Fz@rXsYwIjXzN_+I@v@u>Bqd_@WC6kq@=| zE^?1&^4nkdw$z;6H2lYn%2$+^&Qe1bT9w{-|H%NTsd{a{XIJU~d@&&a7SK^};yKOk zdVdSc)7J(tF3X8~2dIhLntZ^c)dDjs?hB6h>e<9fznYfwZgduj+6^+VI3-fL)?{#L z)t;!LXglL#$z}}u^|?0l2OoTSI$T+N4;&zRetaT}ArNZeOniSPjuZd$Q{68uo-j?3 zbAibuK(;IfA3PnySo~Y>mh=I>W5ywa#ptgq*d7s2&|ljeul&_D9Oq;#(BFQF5qrvC zS7dzm?^wJQsi6Jd7n%%%ui(-_Wq z^XowV>kfti;AIt`0n916^1;EMZS6LNRV#ntHm-U=l^1G%QPQxvyh6h$^P7yP6h*Vhg39@Q|VmXaw;YM+(mc$fIhI@yPmJE2W zacrc;__pb*Ou@uxf(+DNvqQ^O)4`LyYGr= zc(21cx>rX|Re6ZVKW7(pzt*z3*k+)Sc(*N}JGZSjs5?2ADBndJ^@DnS<)BfOX|&-8 zEAO+>>U}OMIR=Xfx#1pv&gVm^V71Uwlm~52$3|6GQ-;$YwN2!dI~e9Z^3QhwDFm~p zfF6~R27S5esmNINv?k?=ESqxs+)CGDkJYQ+b{eqq;vBb5?_Z>myX(j?NmB%a2T7vpErErO4vRfzsLEWwzxSW-+7%mB z7wW|uu;)^i>W41zotM+dyF7w&7X6gn$68NaCr!XC)WTOx0{xciW(r&)ohHAzZD?Z^ zst;+7|g&-M>2POIOo_K!XPp4J3ha?Z$JU|=?V6I?*ZEwt~bTdBX}l<9E9 z3Wk!lCT(3cAgh|_Csut0kuI;hp$z%-hDz+?QJ6wXS0lU~%7(*j;$5QoPlrvNQVOD& zP*g3UXO7R-gg>MgG+9#FKN(d)^(>4wH{jG}`S?k;Mp|9kFn?fgkol;lcLQ2A%4%7A z!=y5Fd8zscPWZY0j-nYo7JrqR`1){cRS$U(|bXanfx@X$I+0$)U- z6GgEWO)k_>TdPN9S$((DKXWBOzD9euVyVs)fscBtlD1373Q|EUpAYj{ve?y^9e(Q7 z<(;bkIwv#4X-PVMG9CLkK1-qR&tMl*2r=t66}r<=N2=Q8*WmB9qYh%sqQ66!L~Z%vS8Hr6_d`+BD0L-y`^T!G>F0S2p2mn}wth+231wDu++6rLx(@=LqZ6`z5 zunX_~^36x{QB4cq%m<2t+qE^yaxRZJQrn$#bNYzHE7Ya>s<7_ zUuvOt<<(rB1;JRw?sLxChV0)=zOCf5--N`f6x7P7s1=23?i2sFggDEZ-(|s-* zMnOaii;@}o;0|i$^5ZP zR=E9aZ}NTz)lkj2H5_(3{L6>D>VtzLqY1!nc1EpYYtQqkG=#x67)Xwk-E~KjOQaha zb_hl-NLuWG#WM8xj+W8TyPWvTL?oTCHRDLBH_{2)`sbxw5ybP$Dy9lU-&#)fiJYF_ zPVAph30;`mFTIQh-VWw6u72SYTYG2LQLC-}P%;O$1PXU_S?0Et$JKXxWW{Zi;>3cw zN>-P3*B1LEp>NElc~M0M6qgKKuTittUt241Za95_Eg(VkWpI??pL;d%r7*DNCbt+K z`7;~?|7fM)aA?i5b{GEIhK&dB0LPG^3tHKKZn?leA}@iF*vXM0^tTK7BpVK5LGJ96 VUMuweRuJ%~eO_NP=j=7#{{X!i+ZO-; literal 0 HcmV?d00001 diff --git a/src/ast/lib/ast.lib b/src/ast/lib/ast.lib new file mode 100644 index 000000000..b00839d62 --- /dev/null +++ b/src/ast/lib/ast.lib @@ -0,0 +1,98919 @@ +brary("ast") { + + technology (cmos) ; + delay_model : table_lookup ; + library_features ( report_delay_calculation ) ; + date : "Mon Oct 3 13:12:25 2022" ; + revision : "P-2019.03-SP3" ; + nom_process : 1.000 ; + nom_voltage : 0.990 ; + nom_temperature : -40.000 ; + operating_conditions( "SSG0P99VN40C" ) { + process : 1.0000 ; + voltage : 0.9900 ; + temperature : -40.0000 ; + } /* current design opcond */ + default_operating_conditions : "SSG0P99VN40C" ; + voltage_unit : "1V" ; + time_unit : "1ns" ; + capacitive_load_unit (1.000000, pf); + slew_derate_from_library : 0.5000 ; + slew_lower_threshold_pct_rise : 30.0000 ; + slew_lower_threshold_pct_fall : 30.0000 ; + slew_upper_threshold_pct_rise : 70.0000 ; + slew_upper_threshold_pct_fall : 70.0000 ; + input_threshold_pct_rise : 50.0000 ; + input_threshold_pct_fall : 50.0000 ; + output_threshold_pct_rise : 50.0000 ; + output_threshold_pct_fall : 50.0000 ; + k_process_cell_rise : 0.000000; + k_process_cell_fall : 0.000000; + k_volt_cell_rise : 0.000000; + k_volt_cell_fall : 0.000000; + k_temp_cell_rise : 0.000000; + k_temp_cell_fall : 0.000000; + k_process_rise_transition : 0.000000; + k_process_fall_transition : 0.000000; + k_volt_rise_transition : 0.000000; + k_volt_fall_transition : 0.000000; + k_temp_rise_transition : 0.000000; + k_temp_fall_transition : 0.000000; + default_fanout_load : 1.000000; + default_inout_pin_cap : 1.000000; + default_input_pin_cap : 1.000000; + default_output_pin_cap : 0.000000; + current_unit : 1mA; + pulling_resistance_unit : "1kohm"; + comment : "PrimeTime extracted Model." ; + + define(min_delay_flag, timing, boolean); + define(internal_noise_peak_time_below_high, pin, float); + define(internal_noise_width_above_low, pin, float); + define(original_pin, pin, string); + define(internal_noise_peak_time_above_low, pin, float); + define(internal_noise_width_below_high, pin, float); + define(internal_noise_height_above_low, pin, float); + define(internal_noise_height_below_high, pin, float); + + + +/* SCALAR table template is built-in */ + +/* 2-D table template f(in_trans, out_cap) */ +lu_table_template( f_itrans_ocap ) { + variable_1 : input_net_transition; + variable_2 : total_output_net_capacitance; + index_1 (" 0.0000, 1.0000 "); + index_2 (" 0.0000, 1.0000 "); +} + +/* 2-D table template f(d_trans, c_trans) */ +lu_table_template( f_dtrans_ctrans ) { + variable_1 : constrained_pin_transition; + variable_2 : related_pin_transition; + index_1 (" 0.0000, 1.0000 "); + index_2 (" 0.0000, 1.0000 "); +} + +/* 3-D table template f(i_trans, o_cap, r_cap) */ +lu_table_template( f_itrans_ocap_rcap ) { + variable_1 : input_net_transition; + variable_2 : total_output_net_capacitance; + variable_3 : related_out_total_output_net_capacitance; + index_1 (" 0.0000, 1.0000 "); + index_2 (" 0.0000, 1.0000 "); + index_3 (" 0.0000, 1.0000 "); +} + +type ( BUS109_type0 ) { + base_type : array ; + data_type : bit ; + bit_width : 109 ; + bit_from : 108 ; + bit_to : 0 ; +} /* end of type */ +type ( BUS66_type1 ) { + base_type : array ; + data_type : bit ; + bit_width : 66 ; + bit_from : 65 ; + bit_to : 0 ; +} /* end of type */ +type ( BUS27_type2 ) { + base_type : array ; + data_type : bit ; + bit_width : 27 ; + bit_from : 26 ; + bit_to : 0 ; +} /* end of type */ +type ( BUS56_type3 ) { + base_type : array ; + data_type : bit ; + bit_width : 56 ; + bit_from : 55 ; + bit_to : 0 ; +} /* end of type */ +type ( BUS5_type4 ) { + base_type : array ; + data_type : bit ; + bit_width : 5 ; + bit_from : 4 ; + bit_to : 0 ; +} /* end of type */ +type ( BUS2_type5 ) { + base_type : array ; + data_type : bit ; + bit_width : 2 ; + bit_from : 1 ; + bit_to : 0 ; +} /* end of type */ +type ( BUS4_type6 ) { + base_type : array ; + data_type : bit ; + bit_width : 4 ; + bit_from : 3 ; + bit_to : 0 ; +} /* end of type */ +type ( BUS20_type7 ) { + base_type : array ; + data_type : bit ; + bit_width : 20 ; + bit_from : 19 ; + bit_to : 0 ; +} /* end of type */ +type ( BUS10_type8 ) { + base_type : array ; + data_type : bit ; + bit_width : 10 ; + bit_from : 9 ; + bit_to : 0 ; +} /* end of type */ +type ( BUS34_type9 ) { + base_type : array ; + data_type : bit ; + bit_width : 34 ; + bit_from : 33 ; + bit_to : 0 ; +} /* end of type */ +type ( BUS1_type10 ) { + base_type : array ; + data_type : bit ; + bit_width : 1 ; + bit_from : 0 ; + bit_to : 0 ; +} /* end of type */ +type ( BUS52_type11 ) { + base_type : array ; + data_type : bit ; + bit_width : 52 ; + bit_from : 51 ; + bit_to : 0 ; +} /* end of type */ +type ( BUS26_type12 ) { + base_type : array ; + data_type : bit ; + bit_width : 26 ; + bit_from : 25 ; + bit_to : 0 ; +} /* end of type */ +type ( BUS3_type13 ) { + base_type : array ; + data_type : bit ; + bit_width : 3 ; + bit_from : 2 ; + bit_to : 0 ; +} /* end of type */ +type ( BUS8_type14 ) { + base_type : array ; + data_type : bit ; + bit_width : 8 ; + bit_from : 7 ; + bit_to : 0 ; +} /* end of type */ +type ( BUS12_type15 ) { + base_type : array ; + data_type : bit ; + bit_width : 12 ; + bit_from : 11 ; + bit_to : 0 ; +} /* end of type */ +type ( BUS9_type16 ) { + base_type : array ; + data_type : bit ; + bit_width : 9 ; + bit_from : 8 ; + bit_to : 0 ; +} /* end of type */ + +cell( ast ) { + area : 751665.937500 ; + dont_use : true ; + dont_touch : true ; + interface_timing : true; + timing_model_type : "extracted"; + is_macro_cell : true; + +short(tl_o[64], tl_o[63]); + +short(tl_o[64], tl_o[61]); + +short(tl_o[64], tl_o[60]); + +short(tl_o[64], tl_o[59]); + +short(tl_o[64], tl_o[48]); + +short(ast_pwst_o[3], ast_pwst_h_o[3]); + +short(ast_pwst_o[2], ast_pwst_h_o[2]); + +short(ast_pwst_o[1], ast_pwst_h_o[1]); + +short(ast_pwst_o[0], ast_pwst_h_o[0]); +bus ( tl_i ) { + + bus_type : BUS109_type0 ; + direction : input ; + +pin("tl_i[108]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001908 ; + + /* Other user defined attributes. */ + original_pin : tl_i[108]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "6.014905, 5.968750, 5.938533, 5.927176, 5.940784",\ + "6.095888, 6.049733, 6.019516, 6.008159, 6.021767",\ + "6.180377, 6.134222, 6.104005, 6.092648, 6.106256",\ + "6.321913, 6.275758, 6.245541, 6.234183, 6.247791",\ + "6.558708, 6.512553, 6.482336, 6.470979, 6.484587"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "4.829596, 4.783441, 4.753223, 4.741866, 4.755474",\ + "4.919121, 4.872966, 4.842749, 4.831391, 4.844999",\ + "5.021051, 4.974896, 4.944679, 4.933322, 4.946930",\ + "5.203711, 5.157556, 5.127338, 5.115981, 5.129589",\ + "5.532049, 5.485894, 5.455677, 5.444320, 5.457928"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[108]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.214260, -0.171883, -0.137304, -0.099668, 0.184188",\ + "-0.301086, -0.258709, -0.224129, -0.186494, 0.097363",\ + "-0.394315, -0.351937, -0.317358, -0.279723, 0.004134",\ + "-0.557199, -0.514821, -0.480242, -0.442607, -0.158750",\ + "-0.829713, -0.787336, -0.752757, -0.715121, -0.431265"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.264841, -0.198767, -0.140880, -0.098858, 0.121356",\ + "-0.356827, -0.290753, -0.232866, -0.190843, 0.029370",\ + "-0.463555, -0.397481, -0.339595, -0.297572, -0.077359",\ + "-0.650171, -0.584097, -0.526210, -0.484188, -0.239846",\ + "-0.884585, -0.842168, -0.807682, -0.768234, -0.461884"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[108]_hldr*/ + +} /* end of pin tl_i[108] */ + +pin("tl_i[107]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.005151 ; + + /* Other user defined attributes. */ + original_pin : tl_i[107]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.052649, 5.006495, 4.976278, 4.964921, 4.978528",\ + "5.141132, 5.094977, 5.064761, 5.053403, 5.067011",\ + "5.243252, 5.197097, 5.166880, 5.155523, 5.169130",\ + "5.444744, 5.398589, 5.368372, 5.357015, 5.370623",\ + "5.884084, 5.837929, 5.807712, 5.796355, 5.809962"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.045798, 4.999643, 4.969427, 4.958069, 4.971677",\ + "5.140346, 5.094191, 5.063974, 5.052617, 5.066224",\ + "5.268656, 5.222501, 5.192284, 5.180927, 5.194534",\ + "5.518216, 5.472061, 5.441844, 5.430487, 5.444095",\ + "5.954391, 5.908237, 5.878020, 5.866663, 5.880270"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[107]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.187805, -0.145419, -0.110860, -0.072826, 0.215981",\ + "-0.265352, -0.222966, -0.188407, -0.150372, 0.138434",\ + "-0.358696, -0.316325, -0.281731, -0.244378, 0.035979",\ + "-0.536472, -0.494140, -0.459456, -0.423841, -0.165061",\ + "-0.854036, -0.811811, -0.776879, -0.746068, -0.546918"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.171733, -0.105842, -0.048217, -0.006266, 0.214402",\ + "-0.262898, -0.197007, -0.139383, -0.097431, 0.123236",\ + "-0.377606, -0.311610, -0.253836, -0.211843, 0.008564",\ + "-0.589409, -0.523083, -0.464836, -0.422715, -0.203127",\ + "-0.959255, -0.892271, -0.833079, -0.790704, -0.572752"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[107]_hldr*/ + +} /* end of pin tl_i[107] */ + +pin("tl_i[106]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.004836 ; + + /* Other user defined attributes. */ + original_pin : tl_i[106]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.118081, 5.071926, 5.041709, 5.030352, 5.043960",\ + "5.207886, 5.161731, 5.131514, 5.120157, 5.133764",\ + "5.325253, 5.279098, 5.248881, 5.237524, 5.251131",\ + "5.541330, 5.495175, 5.464959, 5.453601, 5.467209",\ + "5.904454, 5.858299, 5.828083, 5.816725, 5.830333"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.110147, 5.063992, 5.033775, 5.022418, 5.036025",\ + "5.198250, 5.152095, 5.121878, 5.110521, 5.124128",\ + "5.332071, 5.285916, 5.255700, 5.244342, 5.257950",\ + "5.577984, 5.531829, 5.501612, 5.490255, 5.503862",\ + "5.995383, 5.949228, 5.919012, 5.907654, 5.921262"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[106]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.198447, -0.132584, -0.074998, -0.033057, 0.187678",\ + "-0.296196, -0.230332, -0.172747, -0.130806, 0.089930",\ + "-0.398836, -0.332973, -0.275387, -0.233446, -0.012711",\ + "-0.579500, -0.513636, -0.456051, -0.414110, -0.193375",\ + "-0.884380, -0.818360, -0.760550, -0.718548, -0.498201"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.292019, -0.249633, -0.215074, -0.177056, 0.111552",\ + "-0.374431, -0.332045, -0.297485, -0.259467, 0.029140",\ + "-0.488086, -0.445700, -0.411141, -0.373122, -0.084515",\ + "-0.684457, -0.642085, -0.607494, -0.570100, -0.289245",\ + "-1.001110, -0.958772, -0.924101, -0.888239, -0.626398"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[106]_hldr*/ + +} /* end of pin tl_i[106] */ + +pin("tl_i[105]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.003624 ; + + /* Other user defined attributes. */ + original_pin : tl_i[105]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "4.863893, 4.817738, 4.787521, 4.776164, 4.789771",\ + "4.956792, 4.910637, 4.880420, 4.869063, 4.882670",\ + "5.049713, 5.003558, 4.973341, 4.961984, 4.975592",\ + "5.212534, 5.166379, 5.136162, 5.124805, 5.138412",\ + "5.493520, 5.447365, 5.417148, 5.405791, 5.419398"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "4.894609, 4.848454, 4.818238, 4.806880, 4.820488",\ + "4.991653, 4.945498, 4.915282, 4.903924, 4.917532",\ + "5.091967, 5.045812, 5.015595, 5.004238, 5.017845",\ + "5.268436, 5.222281, 5.192065, 5.180707, 5.194315",\ + "5.577918, 5.531763, 5.501546, 5.490189, 5.503797"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[105]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.191328, -0.125448, -0.067841, -0.025894, 0.194803",\ + "-0.284713, -0.218834, -0.161226, -0.119279, 0.101417",\ + "-0.376971, -0.311091, -0.253484, -0.211536, 0.009160",\ + "-0.536682, -0.470803, -0.413195, -0.371248, -0.150551",\ + "-0.807364, -0.741369, -0.683595, -0.641603, -0.421195"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.219051, -0.176666, -0.142105, -0.104110, 0.184210",\ + "-0.313450, -0.271065, -0.236504, -0.198509, 0.089812",\ + "-0.408426, -0.366041, -0.331480, -0.293485, -0.005164",\ + "-0.576090, -0.533704, -0.499144, -0.461149, -0.172828",\ + "-0.853410, -0.811045, -0.776438, -0.739355, -0.462356"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[105]_hldr*/ + +} /* end of pin tl_i[105] */ + +pin("tl_i[104]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : tl_i[104]; +} /* end of pin tl_i[104] */ + +pin("tl_i[103]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : tl_i[103]; +} /* end of pin tl_i[103] */ + +pin("tl_i[102]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : tl_i[102]; +} /* end of pin tl_i[102] */ + +pin("tl_i[101]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.002631 ; + + /* Other user defined attributes. */ + original_pin : tl_i[101]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "4.040158, 3.994009, 3.963793, 3.952436, 3.966046",\ + "4.127818, 4.081669, 4.051453, 4.040096, 4.053706",\ + "4.214727, 4.168579, 4.138362, 4.127005, 4.140615",\ + "4.367462, 4.321313, 4.291097, 4.279740, 4.293350",\ + "4.608571, 4.562422, 4.532206, 4.520849, 4.534459"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "4.240349, 4.194201, 4.163985, 4.152627, 4.166238",\ + "4.323653, 4.277504, 4.247288, 4.235931, 4.249541",\ + "4.439158, 4.393010, 4.362793, 4.351436, 4.365047",\ + "4.634571, 4.588422, 4.558206, 4.546849, 4.560459",\ + "4.954862, 4.908714, 4.878498, 4.867140, 4.880751"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[101]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.134918, -0.092500, -0.058015, -0.018552, 0.287989",\ + "-0.219595, -0.177177, -0.142692, -0.103229, 0.203312",\ + "-0.310658, -0.268270, -0.233715, -0.195609, 0.094094",\ + "-0.473587, -0.431270, -0.396549, -0.361659, -0.111869",\ + "-0.749178, -0.707041, -0.671904, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.158345, -0.092411, -0.034724, 0.007245, 0.227804",\ + "-0.246288, -0.180354, -0.122667, -0.080698, 0.139861",\ + "-0.346722, -0.280644, -0.222751, -0.180726, 0.039476",\ + "-0.532525, -0.466073, -0.407644, -0.365475, -0.146201",\ + "-0.854381, -0.786954, -0.727126, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[101]_hldr*/ + +} /* end of pin tl_i[101] */ + +pin("tl_i[100]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.002123 ; + + /* Other user defined attributes. */ + original_pin : tl_i[100]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "4.031560, 3.985412, 3.955196, 3.943839, 3.957449",\ + "4.118053, 4.071905, 4.041688, 4.030331, 4.043941",\ + "4.209411, 4.163263, 4.133047, 4.121689, 4.135300",\ + "4.373650, 4.327502, 4.297286, 4.285928, 4.299539",\ + "4.639607, 4.593459, 4.563242, 4.551885, 4.565495"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "4.345016, 4.298868, 4.268651, 4.257294, 4.270905",\ + "4.436058, 4.389909, 4.359693, 4.348336, 4.361946",\ + "4.527231, 4.481082, 4.450866, 4.439509, 4.453119",\ + "4.689745, 4.643597, 4.613381, 4.602024, 4.615634",\ + "4.957426, 4.911277, 4.881061, 4.869704, 4.883314"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[100]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.134918, -0.092500, -0.058015, -0.018552, 0.287989",\ + "-0.219595, -0.177177, -0.142692, -0.103229, 0.203312",\ + "-0.310658, -0.268270, -0.233715, -0.195609, 0.094094",\ + "-0.473587, -0.431270, -0.396549, -0.361659, -0.111869",\ + "-0.749178, -0.707041, -0.671904, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.158345, -0.092411, -0.034724, 0.007245, 0.227804",\ + "-0.246288, -0.180354, -0.122667, -0.080698, 0.139861",\ + "-0.346722, -0.280644, -0.222751, -0.180726, 0.039476",\ + "-0.532525, -0.466073, -0.407644, -0.365475, -0.146201",\ + "-0.854381, -0.786954, -0.727126, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[100]_hldr*/ + +} /* end of pin tl_i[100] */ + +pin("tl_i[99]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000562 ; + + /* Other user defined attributes. */ + original_pin : tl_i[99]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.202977, 0.157053, 0.126854, 0.115510, 0.129197",\ + "0.287655, 0.241731, 0.211532, 0.200188, 0.213875",\ + "0.378849, 0.332759, 0.302547, 0.291193, 0.304823",\ + "0.542220, 0.495729, 0.465486, 0.454109, 0.467602",\ + "0.818496, 0.771022, 0.740703, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.245106, 0.169786, 0.101633, 0.078675, 0.141673",\ + "0.333057, 0.257736, 0.189583, 0.166625, 0.229623",\ + "0.433433, 0.358121, 0.290014, 0.267131, 0.330810",\ + "0.619112, 0.543823, 0.475835, 0.453147, 0.518594",\ + "0.940670, 0.865438, 0.797763, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[99]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.134918, -0.092500, -0.058015, -0.018552, 0.287989",\ + "-0.219595, -0.177177, -0.142692, -0.103229, 0.203312",\ + "-0.310658, -0.268270, -0.233715, -0.195609, 0.094094",\ + "-0.473587, -0.431270, -0.396549, -0.361659, -0.111869",\ + "-0.749178, -0.707041, -0.671904, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.158345, -0.092411, -0.034724, 0.007245, 0.227804",\ + "-0.246288, -0.180354, -0.122667, -0.080698, 0.139861",\ + "-0.346722, -0.280644, -0.222751, -0.180726, 0.039476",\ + "-0.532525, -0.466073, -0.407644, -0.365475, -0.146201",\ + "-0.854381, -0.786954, -0.727126, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[99]_hldr*/ + +} /* end of pin tl_i[99] */ + +pin("tl_i[98]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000562 ; + + /* Other user defined attributes. */ + original_pin : tl_i[98]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.202977, 0.157053, 0.126854, 0.115510, 0.129197",\ + "0.287655, 0.241731, 0.211532, 0.200188, 0.213875",\ + "0.378849, 0.332759, 0.302547, 0.291193, 0.304823",\ + "0.542220, 0.495729, 0.465486, 0.454109, 0.467602",\ + "0.818496, 0.771022, 0.740703, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.245106, 0.169786, 0.101633, 0.078675, 0.141673",\ + "0.333057, 0.257736, 0.189583, 0.166625, 0.229623",\ + "0.433433, 0.358121, 0.290014, 0.267131, 0.330810",\ + "0.619112, 0.543823, 0.475835, 0.453147, 0.518594",\ + "0.940670, 0.865438, 0.797763, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[98]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.134918, -0.092500, -0.058015, -0.018552, 0.287989",\ + "-0.219595, -0.177177, -0.142692, -0.103229, 0.203312",\ + "-0.310658, -0.268270, -0.233715, -0.195609, 0.094094",\ + "-0.473587, -0.431270, -0.396549, -0.361659, -0.111869",\ + "-0.749178, -0.707041, -0.671904, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.158345, -0.092411, -0.034724, 0.007245, 0.227804",\ + "-0.246288, -0.180354, -0.122667, -0.080698, 0.139861",\ + "-0.346722, -0.280644, -0.222751, -0.180726, 0.039476",\ + "-0.532525, -0.466073, -0.407644, -0.365475, -0.146201",\ + "-0.854381, -0.786954, -0.727126, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[98]_hldr*/ + +} /* end of pin tl_i[98] */ + +pin("tl_i[97]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000562 ; + + /* Other user defined attributes. */ + original_pin : tl_i[97]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.202977, 0.157053, 0.126854, 0.115510, 0.129197",\ + "0.287655, 0.241731, 0.211532, 0.200188, 0.213875",\ + "0.378849, 0.332759, 0.302547, 0.291193, 0.304823",\ + "0.542220, 0.495729, 0.465486, 0.454109, 0.467602",\ + "0.818496, 0.771022, 0.740703, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.245106, 0.169786, 0.101633, 0.078675, 0.141673",\ + "0.333057, 0.257736, 0.189583, 0.166625, 0.229623",\ + "0.433433, 0.358121, 0.290014, 0.267131, 0.330810",\ + "0.619112, 0.543823, 0.475835, 0.453147, 0.518594",\ + "0.940670, 0.865438, 0.797763, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[97]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.134918, -0.092500, -0.058015, -0.018552, 0.287989",\ + "-0.219595, -0.177177, -0.142692, -0.103229, 0.203312",\ + "-0.310658, -0.268270, -0.233715, -0.195609, 0.094094",\ + "-0.473587, -0.431270, -0.396549, -0.361659, -0.111869",\ + "-0.749178, -0.707041, -0.671904, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.158345, -0.092411, -0.034724, 0.007245, 0.227804",\ + "-0.246288, -0.180354, -0.122667, -0.080698, 0.139861",\ + "-0.346722, -0.280644, -0.222751, -0.180726, 0.039476",\ + "-0.532525, -0.466073, -0.407644, -0.365475, -0.146201",\ + "-0.854381, -0.786954, -0.727126, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[97]_hldr*/ + +} /* end of pin tl_i[97] */ + +pin("tl_i[96]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000562 ; + + /* Other user defined attributes. */ + original_pin : tl_i[96]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.202977, 0.157053, 0.126854, 0.115510, 0.129197",\ + "0.287655, 0.241731, 0.211532, 0.200188, 0.213875",\ + "0.378849, 0.332759, 0.302547, 0.291193, 0.304823",\ + "0.542220, 0.495729, 0.465486, 0.454109, 0.467602",\ + "0.818496, 0.771022, 0.740703, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.245106, 0.169786, 0.101633, 0.078675, 0.141673",\ + "0.333057, 0.257736, 0.189583, 0.166625, 0.229623",\ + "0.433433, 0.358121, 0.290014, 0.267131, 0.330810",\ + "0.619112, 0.543823, 0.475835, 0.453147, 0.518594",\ + "0.940670, 0.865438, 0.797763, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[96]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.134918, -0.092500, -0.058015, -0.018552, 0.287989",\ + "-0.219595, -0.177177, -0.142692, -0.103229, 0.203312",\ + "-0.310658, -0.268270, -0.233715, -0.195609, 0.094094",\ + "-0.473587, -0.431270, -0.396549, -0.361659, -0.111869",\ + "-0.749178, -0.707041, -0.671904, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.158345, -0.092411, -0.034724, 0.007245, 0.227804",\ + "-0.246288, -0.180354, -0.122667, -0.080698, 0.139861",\ + "-0.346722, -0.280644, -0.222751, -0.180726, 0.039476",\ + "-0.532525, -0.466073, -0.407644, -0.365475, -0.146201",\ + "-0.854381, -0.786954, -0.727126, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[96]_hldr*/ + +} /* end of pin tl_i[96] */ + +pin("tl_i[95]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000562 ; + + /* Other user defined attributes. */ + original_pin : tl_i[95]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.202977, 0.157053, 0.126854, 0.115510, 0.129197",\ + "0.287655, 0.241731, 0.211532, 0.200188, 0.213875",\ + "0.378849, 0.332759, 0.302547, 0.291193, 0.304823",\ + "0.542220, 0.495729, 0.465486, 0.454109, 0.467602",\ + "0.818496, 0.771022, 0.740703, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.245106, 0.169786, 0.101633, 0.078675, 0.141673",\ + "0.333057, 0.257736, 0.189583, 0.166625, 0.229623",\ + "0.433433, 0.358121, 0.290014, 0.267131, 0.330810",\ + "0.619112, 0.543823, 0.475835, 0.453147, 0.518594",\ + "0.940670, 0.865438, 0.797763, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[95]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.134918, -0.092500, -0.058015, -0.018552, 0.287989",\ + "-0.219595, -0.177177, -0.142692, -0.103229, 0.203312",\ + "-0.310658, -0.268270, -0.233715, -0.195609, 0.094094",\ + "-0.473587, -0.431270, -0.396549, -0.361659, -0.111869",\ + "-0.749178, -0.707041, -0.671904, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.158345, -0.092411, -0.034724, 0.007245, 0.227804",\ + "-0.246288, -0.180354, -0.122667, -0.080698, 0.139861",\ + "-0.346722, -0.280644, -0.222751, -0.180726, 0.039476",\ + "-0.532525, -0.466073, -0.407644, -0.365475, -0.146201",\ + "-0.854381, -0.786954, -0.727126, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[95]_hldr*/ + +} /* end of pin tl_i[95] */ + +pin("tl_i[94]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000562 ; + + /* Other user defined attributes. */ + original_pin : tl_i[94]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.202977, 0.157053, 0.126854, 0.115510, 0.129197",\ + "0.287655, 0.241731, 0.211532, 0.200188, 0.213875",\ + "0.378849, 0.332759, 0.302547, 0.291193, 0.304823",\ + "0.542220, 0.495729, 0.465486, 0.454109, 0.467602",\ + "0.818496, 0.771022, 0.740703, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.245106, 0.169786, 0.101633, 0.078675, 0.141673",\ + "0.333057, 0.257736, 0.189583, 0.166625, 0.229623",\ + "0.433433, 0.358121, 0.290014, 0.267131, 0.330810",\ + "0.619112, 0.543823, 0.475835, 0.453147, 0.518594",\ + "0.940670, 0.865438, 0.797763, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[94]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.134918, -0.092500, -0.058015, -0.018552, 0.287989",\ + "-0.219595, -0.177177, -0.142692, -0.103229, 0.203312",\ + "-0.310658, -0.268270, -0.233715, -0.195609, 0.094094",\ + "-0.473587, -0.431270, -0.396549, -0.361659, -0.111869",\ + "-0.749178, -0.707041, -0.671904, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.158345, -0.092411, -0.034724, 0.007245, 0.227804",\ + "-0.246288, -0.180354, -0.122667, -0.080698, 0.139861",\ + "-0.346722, -0.280644, -0.222751, -0.180726, 0.039476",\ + "-0.532525, -0.466073, -0.407644, -0.365475, -0.146201",\ + "-0.854381, -0.786954, -0.727126, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[94]_hldr*/ + +} /* end of pin tl_i[94] */ + +pin("tl_i[93]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000562 ; + + /* Other user defined attributes. */ + original_pin : tl_i[93]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.202977, 0.157053, 0.126854, 0.115510, 0.129197",\ + "0.287655, 0.241731, 0.211532, 0.200188, 0.213875",\ + "0.378849, 0.332759, 0.302547, 0.291193, 0.304823",\ + "0.542220, 0.495729, 0.465486, 0.454109, 0.467602",\ + "0.818496, 0.771022, 0.740703, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.245106, 0.169786, 0.101633, 0.078675, 0.141673",\ + "0.333057, 0.257736, 0.189583, 0.166625, 0.229623",\ + "0.433433, 0.358121, 0.290014, 0.267131, 0.330810",\ + "0.619112, 0.543823, 0.475835, 0.453147, 0.518594",\ + "0.940670, 0.865438, 0.797763, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[93]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.134918, -0.092500, -0.058015, -0.018552, 0.287989",\ + "-0.219595, -0.177177, -0.142692, -0.103229, 0.203312",\ + "-0.310658, -0.268270, -0.233715, -0.195609, 0.094094",\ + "-0.473587, -0.431270, -0.396549, -0.361659, -0.111869",\ + "-0.749178, -0.707041, -0.671904, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.158345, -0.092411, -0.034724, 0.007245, 0.227804",\ + "-0.246288, -0.180354, -0.122667, -0.080698, 0.139861",\ + "-0.346722, -0.280644, -0.222751, -0.180726, 0.039476",\ + "-0.532525, -0.466073, -0.407644, -0.365475, -0.146201",\ + "-0.854381, -0.786954, -0.727126, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[93]_hldr*/ + +} /* end of pin tl_i[93] */ + +pin("tl_i[92]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000562 ; + + /* Other user defined attributes. */ + original_pin : tl_i[92]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.202977, 0.157053, 0.126854, 0.115510, 0.129197",\ + "0.287655, 0.241731, 0.211532, 0.200188, 0.213875",\ + "0.378849, 0.332759, 0.302547, 0.291193, 0.304823",\ + "0.542220, 0.495729, 0.465486, 0.454109, 0.467602",\ + "0.818496, 0.771022, 0.740703, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.245106, 0.169786, 0.101633, 0.078675, 0.141673",\ + "0.333057, 0.257736, 0.189583, 0.166625, 0.229623",\ + "0.433433, 0.358121, 0.290014, 0.267131, 0.330810",\ + "0.619112, 0.543823, 0.475835, 0.453147, 0.518594",\ + "0.940670, 0.865438, 0.797763, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[92]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.134918, -0.092500, -0.058015, -0.018552, 0.287989",\ + "-0.219595, -0.177177, -0.142692, -0.103229, 0.203312",\ + "-0.310658, -0.268270, -0.233715, -0.195609, 0.094094",\ + "-0.473587, -0.431270, -0.396549, -0.361659, -0.111869",\ + "-0.749178, -0.707041, -0.671904, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.158345, -0.092411, -0.034724, 0.007245, 0.227804",\ + "-0.246288, -0.180354, -0.122667, -0.080698, 0.139861",\ + "-0.346722, -0.280644, -0.222751, -0.180726, 0.039476",\ + "-0.532525, -0.466073, -0.407644, -0.365475, -0.146201",\ + "-0.854381, -0.786954, -0.727126, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[92]_hldr*/ + +} /* end of pin tl_i[92] */ + +pin("tl_i[91]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001976 ; + + /* Other user defined attributes. */ + original_pin : tl_i[91]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "6.041809, 5.995654, 5.965437, 5.954080, 5.967688",\ + "6.129841, 6.083686, 6.053469, 6.042112, 6.055719",\ + "6.240180, 6.194025, 6.163808, 6.152451, 6.166058",\ + "6.431971, 6.385816, 6.355599, 6.344242, 6.357849",\ + "6.749926, 6.703771, 6.673554, 6.662197, 6.675805"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "6.036389, 5.990234, 5.960017, 5.948660, 5.962267",\ + "6.118236, 6.072081, 6.041864, 6.030507, 6.044114",\ + "6.243943, 6.197788, 6.167572, 6.156214, 6.169822",\ + "6.470764, 6.424609, 6.394392, 6.383035, 6.396643",\ + "6.863174, 6.817019, 6.786803, 6.775445, 6.789053"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[91]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.151672, -1.109295, -1.074716, -1.037080, -0.753224",\ + "-1.243671, -1.201294, -1.166714, -1.129079, -0.845222",\ + "-1.323829, -1.281452, -1.246872, -1.209237, -0.925380",\ + "-1.441613, -1.399235, -1.364656, -1.327021, -1.043164",\ + "-1.629556, -1.587178, -1.552599, -1.514964, -1.231107"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.146252, -1.103875, -1.069295, -1.031660, -0.747803",\ + "-1.232066, -1.189688, -1.155109, -1.117473, -0.833617",\ + "-1.316872, -1.274495, -1.239915, -1.202280, -0.918423",\ + "-1.462124, -1.419747, -1.385167, -1.347532, -1.063675",\ + "-1.705527, -1.663150, -1.628571, -1.590935, -1.307079"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[91]_hldr*/ + +} /* end of pin tl_i[91] */ + +pin("tl_i[90]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.003090 ; + + /* Other user defined attributes. */ + original_pin : tl_i[90]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.559815, 5.513660, 5.483444, 5.472086, 5.485694",\ + "5.649643, 5.603488, 5.573271, 5.561914, 5.575521",\ + "5.741996, 5.695841, 5.665624, 5.654267, 5.667874",\ + "5.908573, 5.862418, 5.832201, 5.820844, 5.834452",\ + "6.303185, 6.257030, 6.226814, 6.215456, 6.229064"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.570656, 5.524501, 5.494284, 5.482927, 5.496534",\ + "5.661279, 5.615124, 5.584907, 5.573550, 5.587157",\ + "5.780371, 5.734216, 5.703999, 5.692642, 5.706249",\ + "6.016336, 5.970181, 5.939964, 5.928607, 5.942214",\ + "6.443535, 6.397380, 6.367163, 6.355806, 6.369413"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[90]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.123815, -1.081437, -1.046858, -1.009223, -0.725366",\ + "-1.217456, -1.175079, -1.140499, -1.102864, -0.819007",\ + "-1.332136, -1.289759, -1.255179, -1.217544, -0.933687",\ + "-1.517521, -1.475144, -1.440564, -1.402929, -1.119072",\ + "-1.805479, -1.763102, -1.728523, -1.690887, -1.407031"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.159454, -1.117077, -1.082498, -1.044862, -0.761006",\ + "-1.250402, -1.208025, -1.173445, -1.135810, -0.851953",\ + "-1.352041, -1.309663, -1.275084, -1.237449, -0.953592",\ + "-1.534891, -1.492514, -1.457935, -1.420299, -1.136443",\ + "-1.849478, -1.807101, -1.772522, -1.734886, -1.451030"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[90]_hldr*/ + +} /* end of pin tl_i[90] */ + +pin("tl_i[89]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.002521 ; + + /* Other user defined attributes. */ + original_pin : tl_i[89]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.812771, 5.766616, 5.736399, 5.725042, 5.738649",\ + "5.898168, 5.852013, 5.821796, 5.810439, 5.824046",\ + "5.975654, 5.929499, 5.899282, 5.887925, 5.901533",\ + "6.119768, 6.073613, 6.043396, 6.032039, 6.045647",\ + "6.477526, 6.431371, 6.401154, 6.389797, 6.403404"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.809771, 5.763616, 5.733399, 5.722042, 5.735649",\ + "5.892390, 5.846235, 5.816019, 5.804661, 5.818269",\ + "6.004417, 5.958262, 5.928046, 5.916688, 5.930296",\ + "6.234746, 6.188591, 6.158375, 6.147017, 6.160625",\ + "6.638525, 6.592370, 6.562153, 6.550796, 6.564404"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[89]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.029578, -0.987200, -0.952621, -0.914986, -0.631129",\ + "-1.117165, -1.074787, -1.040208, -1.002573, -0.718716",\ + "-1.206337, -1.163960, -1.129380, -1.091745, -0.807888",\ + "-1.362213, -1.319836, -1.285257, -1.247621, -0.963765",\ + "-1.590532, -1.548155, -1.513575, -1.475940, -1.192083"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.059949, -1.017572, -0.982993, -0.945357, -0.661501",\ + "-1.159550, -1.117173, -1.082594, -1.044958, -0.761102",\ + "-1.261636, -1.219259, -1.184679, -1.147044, -0.863187",\ + "-1.441043, -1.398666, -1.364086, -1.326451, -1.042594",\ + "-1.748482, -1.706105, -1.671526, -1.633890, -1.350034"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[89]_hldr*/ + +} /* end of pin tl_i[89] */ + +pin("tl_i[88]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001007 ; + + /* Other user defined attributes. */ + original_pin : tl_i[88]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.471457, 5.425303, 5.395086, 5.383729, 5.397336",\ + "5.567654, 5.521499, 5.491282, 5.479925, 5.493532",\ + "5.669107, 5.622952, 5.592736, 5.581378, 5.594986",\ + "5.849272, 5.803117, 5.772900, 5.761543, 5.775150",\ + "6.163116, 6.116961, 6.086744, 6.075387, 6.088994"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.500805, 5.454650, 5.424433, 5.413076, 5.426683",\ + "5.598975, 5.552820, 5.522604, 5.511246, 5.524854",\ + "5.704100, 5.657945, 5.627728, 5.616371, 5.629978",\ + "5.884839, 5.838684, 5.808467, 5.797110, 5.810718",\ + "6.188713, 6.142558, 6.112341, 6.100984, 6.114592"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[88]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.083938, -1.041561, -1.006981, -0.969346, -0.685489",\ + "-1.181137, -1.138760, -1.104181, -1.066545, -0.782689",\ + "-1.281549, -1.239172, -1.204592, -1.166957, -0.883101",\ + "-1.453069, -1.410691, -1.376112, -1.338477, -1.054620",\ + "-1.733325, -1.690947, -1.656368, -1.618733, -1.334876"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.081498, -1.039121, -1.004542, -0.966906, -0.683050",\ + "-1.178693, -1.136315, -1.101736, -1.064101, -0.780244",\ + "-1.285877, -1.243499, -1.208920, -1.171285, -0.887428",\ + "-1.474000, -1.431623, -1.397043, -1.359408, -1.075551",\ + "-1.791995, -1.749618, -1.715039, -1.677403, -1.393547"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[88]_hldr*/ + +} /* end of pin tl_i[88] */ + +pin("tl_i[87]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001007 ; + + /* Other user defined attributes. */ + original_pin : tl_i[87]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "6.100426, 6.054271, 6.024055, 6.012697, 6.026305",\ + "6.196661, 6.150506, 6.120289, 6.108932, 6.122540",\ + "6.301589, 6.255434, 6.225217, 6.213860, 6.227468",\ + "6.487259, 6.441104, 6.410888, 6.399530, 6.413138",\ + "6.807995, 6.761840, 6.731623, 6.720266, 6.733873"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "6.124471, 6.078316, 6.048099, 6.036742, 6.050349",\ + "6.222617, 6.176462, 6.146245, 6.134888, 6.148495",\ + "6.331584, 6.285429, 6.255212, 6.243855, 6.257463",\ + "6.520377, 6.474222, 6.444005, 6.432648, 6.446256",\ + "6.841649, 6.795494, 6.765277, 6.753920, 6.767528"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[87]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.134100, -1.091722, -1.057143, -1.019508, -0.735651",\ + "-1.231353, -1.188975, -1.154396, -1.116761, -0.832904",\ + "-1.331896, -1.289519, -1.254940, -1.217304, -0.933448",\ + "-1.503641, -1.461264, -1.426684, -1.389049, -1.105192",\ + "-1.784290, -1.741913, -1.707334, -1.669698, -1.385842"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.132025, -1.089648, -1.055068, -1.017433, -0.733576",\ + "-1.229244, -1.186866, -1.152287, -1.114652, -0.830795",\ + "-1.336593, -1.294216, -1.259636, -1.222001, -0.938144",\ + "-1.525111, -1.482733, -1.448154, -1.410519, -1.126662",\ + "-1.844292, -1.801915, -1.767335, -1.729700, -1.445843"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[87]_hldr*/ + +} /* end of pin tl_i[87] */ + +pin("tl_i[86]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.002623 ; + + /* Other user defined attributes. */ + original_pin : tl_i[86]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.848853, 5.802698, 5.772481, 5.761124, 5.774731",\ + "5.936358, 5.890203, 5.859987, 5.848629, 5.862237",\ + "6.023653, 5.977498, 5.947281, 5.935924, 5.949532",\ + "6.191101, 6.144946, 6.114729, 6.103372, 6.116980",\ + "6.582396, 6.536241, 6.506024, 6.494667, 6.508274"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.843520, 5.797365, 5.767148, 5.755791, 5.769399",\ + "5.932423, 5.886268, 5.856051, 5.844694, 5.858301",\ + "6.047498, 6.001343, 5.971126, 5.959769, 5.973376",\ + "6.285758, 6.239603, 6.209386, 6.198029, 6.211636",\ + "6.722472, 6.676317, 6.646101, 6.634743, 6.648351"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[86]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.087246, -1.044869, -1.010289, -0.972654, -0.688797",\ + "-1.172364, -1.129987, -1.095407, -1.057772, -0.773916",\ + "-1.269076, -1.226699, -1.192120, -1.154484, -0.870628",\ + "-1.437615, -1.395237, -1.360658, -1.323022, -1.039166",\ + "-1.686824, -1.644446, -1.609867, -1.572232, -1.288375"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.118792, -1.076414, -1.041835, -1.004200, -0.720343",\ + "-1.209484, -1.167107, -1.132527, -1.094892, -0.811035",\ + "-1.302947, -1.260570, -1.225991, -1.188355, -0.904499",\ + "-1.465349, -1.422972, -1.388392, -1.350757, -1.066900",\ + "-1.738277, -1.695899, -1.661320, -1.623685, -1.339828"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[86]_hldr*/ + +} /* end of pin tl_i[86] */ + +pin("tl_i[85]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.003219 ; + + /* Other user defined attributes. */ + original_pin : tl_i[85]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.640028, 5.593873, 5.563656, 5.552299, 5.565907",\ + "5.724194, 5.678039, 5.647822, 5.636465, 5.650072",\ + "5.805078, 5.758923, 5.728706, 5.717349, 5.730957",\ + "5.946632, 5.900477, 5.870261, 5.858903, 5.872511",\ + "6.188352, 6.142197, 6.111980, 6.100623, 6.114231"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.625210, 5.579055, 5.548838, 5.537481, 5.551088",\ + "5.706786, 5.660631, 5.630414, 5.619057, 5.632665",\ + "5.812987, 5.766832, 5.736616, 5.725258, 5.738866",\ + "6.001375, 5.955220, 5.925003, 5.913646, 5.927253",\ + "6.317180, 6.271025, 6.240808, 6.229451, 6.243059"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[85]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.041623, -0.999245, -0.964666, -0.927031, -0.643174",\ + "-1.126700, -1.084323, -1.049744, -1.012108, -0.728252",\ + "-1.223403, -1.181025, -1.146446, -1.108811, -0.824954",\ + "-1.391917, -1.349539, -1.314960, -1.277325, -0.993468",\ + "-1.638337, -1.595960, -1.561380, -1.523745, -1.239888"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.073138, -1.030761, -0.996182, -0.958546, -0.674690",\ + "-1.161118, -1.118740, -1.084161, -1.046526, -0.762669",\ + "-1.257352, -1.214975, -1.180395, -1.142760, -0.858903",\ + "-1.419670, -1.377293, -1.342714, -1.305078, -1.021222",\ + "-1.692554, -1.650177, -1.615597, -1.577962, -1.294106"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[85]_hldr*/ + +} /* end of pin tl_i[85] */ + +pin("tl_i[84]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001002 ; + + /* Other user defined attributes. */ + original_pin : tl_i[84]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.863610, 5.817455, 5.787239, 5.775881, 5.789489",\ + "5.963272, 5.917117, 5.886900, 5.875543, 5.889151",\ + "6.072519, 6.026364, 5.996147, 5.984790, 5.998397",\ + "6.263348, 6.217193, 6.186976, 6.175619, 6.189227",\ + "6.585179, 6.539024, 6.508808, 6.497450, 6.511058"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.949015, 5.902860, 5.872643, 5.861286, 5.874893",\ + "6.048979, 6.002824, 5.972607, 5.961250, 5.974857",\ + "6.167165, 6.121010, 6.090793, 6.079436, 6.093043",\ + "6.365981, 6.319826, 6.289609, 6.278252, 6.291860",\ + "6.701097, 6.654942, 6.624725, 6.613368, 6.626975"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[84]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.056499, -1.014122, -0.979543, -0.941907, -0.658051",\ + "-1.146680, -1.104303, -1.069723, -1.032088, -0.748231",\ + "-1.259394, -1.217017, -1.182437, -1.144802, -0.860945",\ + "-1.443621, -1.401244, -1.366664, -1.329029, -1.045172",\ + "-1.712122, -1.669745, -1.635165, -1.597530, -1.313673"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.090162, -1.047785, -1.013205, -0.975570, -0.691713",\ + "-1.180082, -1.137704, -1.103125, -1.065490, -0.781633",\ + "-1.275585, -1.233208, -1.198629, -1.160993, -0.877137",\ + "-1.445900, -1.403523, -1.368944, -1.331308, -1.047452",\ + "-1.745297, -1.702920, -1.668340, -1.630705, -1.346848"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[84]_hldr*/ + +} /* end of pin tl_i[84] */ + +pin("tl_i[83]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.003541 ; + + /* Other user defined attributes. */ + original_pin : tl_i[83]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.687950, 5.641795, 5.611578, 5.600221, 5.613829",\ + "5.774795, 5.728640, 5.698423, 5.687066, 5.700673",\ + "5.876379, 5.830224, 5.800007, 5.788650, 5.802258",\ + "6.080298, 6.034143, 6.003927, 5.992569, 6.006177",\ + "6.432961, 6.386806, 6.356589, 6.345232, 6.358839"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.703408, 5.657253, 5.627037, 5.615679, 5.629287",\ + "5.789980, 5.743825, 5.713608, 5.702251, 5.715858",\ + "5.917695, 5.871540, 5.841323, 5.829966, 5.843574",\ + "6.190283, 6.144128, 6.113912, 6.102554, 6.116162",\ + "6.660905, 6.614750, 6.584533, 6.573176, 6.586783"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[83]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.867726, -0.825349, -0.790770, -0.753134, -0.469278",\ + "-0.951320, -0.908943, -0.874363, -0.836728, -0.552871",\ + "-1.016544, -0.974167, -0.939588, -0.901952, -0.618096",\ + "-1.123735, -1.081358, -1.046778, -1.009143, -0.725286",\ + "-1.291921, -1.249544, -1.214964, -1.177329, -0.893472"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.911896, -0.869519, -0.833451, -0.791428, -0.513448",\ + "-1.012793, -0.970416, -0.921834, -0.879811, -0.614345",\ + "-1.095336, -1.052959, -1.000425, -0.958402, -0.696888",\ + "-1.226252, -1.183874, -1.131083, -1.089060, -0.827803",\ + "-1.440278, -1.397901, -1.344258, -1.302235, -1.041830"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[83]_hldr*/ + +} /* end of pin tl_i[83] */ + +pin("tl_i[82]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.002444 ; + + /* Other user defined attributes. */ + original_pin : tl_i[82]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.708182, 5.662027, 5.631811, 5.620453, 5.634061",\ + "5.801434, 5.755279, 5.725062, 5.713705, 5.727312",\ + "5.894579, 5.848424, 5.818208, 5.806850, 5.820458",\ + "6.057735, 6.011580, 5.981363, 5.970006, 5.983613",\ + "6.337201, 6.291046, 6.260829, 6.249472, 6.263080"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.710078, 5.663923, 5.633707, 5.622349, 5.635957",\ + "5.807050, 5.760895, 5.730678, 5.719321, 5.732928",\ + "5.905420, 5.859265, 5.829048, 5.817691, 5.831298",\ + "6.075630, 6.029475, 5.999258, 5.987901, 6.001508",\ + "6.350610, 6.304455, 6.274238, 6.262881, 6.276488"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[82]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.931103, -0.888726, -0.854147, -0.816511, -0.532655",\ + "-1.016007, -0.973630, -0.939050, -0.901415, -0.617558",\ + "-1.106769, -1.064392, -1.029812, -0.992177, -0.708320",\ + "-1.260793, -1.218416, -1.183836, -1.146201, -0.862344",\ + "-1.523812, -1.481435, -1.446856, -1.409220, -1.125364"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.978443, -0.936065, -0.901486, -0.863851, -0.579994",\ + "-1.073078, -1.030701, -0.996121, -0.958486, -0.674629",\ + "-1.181049, -1.138672, -1.104093, -1.066457, -0.782601",\ + "-1.371690, -1.329313, -1.294734, -1.257098, -0.973242",\ + "-1.704884, -1.662507, -1.627928, -1.590292, -1.306436"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[82]_hldr*/ + +} /* end of pin tl_i[82] */ + +pin("tl_i[81]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.002980 ; + + /* Other user defined attributes. */ + original_pin : tl_i[81]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.772726, 5.726571, 5.696354, 5.684997, 5.698605",\ + "5.867767, 5.821612, 5.791396, 5.780038, 5.793646",\ + "5.991376, 5.945221, 5.915004, 5.903647, 5.917254",\ + "6.241336, 6.195181, 6.164964, 6.153607, 6.167214",\ + "6.709605, 6.663450, 6.633233, 6.621876, 6.635483"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.760269, 5.714114, 5.683897, 5.672540, 5.686147",\ + "5.853128, 5.806973, 5.776756, 5.765399, 5.779006",\ + "5.986612, 5.940457, 5.910241, 5.898883, 5.912491",\ + "6.273496, 6.227341, 6.197124, 6.185767, 6.199374",\ + "6.818243, 6.772088, 6.741871, 6.730514, 6.744122"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[81]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.928193, -0.885816, -0.851236, -0.813601, -0.529744",\ + "-1.010898, -0.968521, -0.933941, -0.896306, -0.612449",\ + "-1.110272, -1.067895, -1.033316, -0.995680, -0.711824",\ + "-1.278434, -1.236057, -1.201477, -1.163842, -0.879985",\ + "-1.568159, -1.525781, -1.491202, -1.453566, -1.169710"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.972769, -0.930391, -0.895812, -0.858176, -0.574320",\ + "-1.064861, -1.022484, -0.987905, -0.950269, -0.666413",\ + "-1.170576, -1.128199, -1.093619, -1.055984, -0.772127",\ + "-1.359091, -1.316714, -1.282135, -1.244499, -0.960643",\ + "-1.694739, -1.652362, -1.617782, -1.580147, -1.296290"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[81]_hldr*/ + +} /* end of pin tl_i[81] */ + +pin("tl_i[80]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.004096 ; + + /* Other user defined attributes. */ + original_pin : tl_i[80]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.423539, 5.377384, 5.347167, 5.335810, 5.349418",\ + "5.507660, 5.461505, 5.431288, 5.419931, 5.433538",\ + "5.588662, 5.542507, 5.512290, 5.500933, 5.514540",\ + "5.729993, 5.683838, 5.653621, 5.642264, 5.655871",\ + "5.971819, 5.925664, 5.895447, 5.884090, 5.897697"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.408631, 5.362476, 5.332260, 5.320902, 5.334510",\ + "5.490341, 5.444186, 5.413970, 5.402612, 5.416220",\ + "5.596552, 5.550397, 5.520180, 5.508823, 5.522430",\ + "5.784794, 5.738639, 5.708422, 5.697065, 5.710672",\ + "6.157783, 6.111628, 6.081411, 6.070054, 6.083661"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[80]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.991939, -0.949562, -0.914982, -0.877347, -0.593490",\ + "-1.074940, -1.032563, -0.997983, -0.960348, -0.676491",\ + "-1.172758, -1.130381, -1.095802, -1.058166, -0.774310",\ + "-1.338347, -1.295969, -1.261390, -1.223755, -0.939898",\ + "-1.624824, -1.582447, -1.547868, -1.510232, -1.226376"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.037009, -0.994632, -0.960053, -0.922417, -0.638561",\ + "-1.129460, -1.087082, -1.052503, -1.014868, -0.731011",\ + "-1.235564, -1.193187, -1.158608, -1.120972, -0.837116",\ + "-1.410576, -1.368199, -1.333619, -1.295984, -1.012127",\ + "-1.676313, -1.633936, -1.599356, -1.561721, -1.277864"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[80]_hldr*/ + +} /* end of pin tl_i[80] */ + +pin("tl_i[79]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001007 ; + + /* Other user defined attributes. */ + original_pin : tl_i[79]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.446656, 5.400501, 5.370284, 5.358927, 5.372534",\ + "5.547154, 5.500999, 5.470783, 5.459425, 5.473033",\ + "5.662600, 5.616445, 5.586228, 5.574871, 5.588478",\ + "5.873106, 5.826951, 5.796734, 5.785377, 5.798985",\ + "6.242186, 6.196031, 6.165814, 6.154457, 6.168064"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.480749, 5.434594, 5.404377, 5.393020, 5.406628",\ + "5.579840, 5.533685, 5.503468, 5.492111, 5.505718",\ + "5.703683, 5.657528, 5.627311, 5.615954, 5.629561",\ + "5.911795, 5.865640, 5.835423, 5.824066, 5.837673",\ + "6.265936, 6.219781, 6.189564, 6.178207, 6.191814"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[79]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.093242, -1.050865, -1.016285, -0.978650, -0.694793",\ + "-1.195110, -1.152733, -1.118154, -1.080518, -0.796662",\ + "-1.314294, -1.271917, -1.237338, -1.199702, -0.915846",\ + "-1.525733, -1.483356, -1.448776, -1.411141, -1.127284",\ + "-1.885126, -1.842748, -1.808169, -1.770533, -1.486677"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.071935, -1.029557, -0.994978, -0.957343, -0.673486",\ + "-1.171764, -1.129387, -1.094808, -1.057172, -0.773316",\ + "-1.298104, -1.255727, -1.221148, -1.183512, -0.899656",\ + "-1.517193, -1.474816, -1.440237, -1.402601, -1.118745",\ + "-1.889590, -1.847213, -1.812633, -1.774998, -1.491141"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[79]_hldr*/ + +} /* end of pin tl_i[79] */ + +pin("tl_i[78]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.002174 ; + + /* Other user defined attributes. */ + original_pin : tl_i[78]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.182078, 5.135923, 5.105707, 5.094349, 5.107957",\ + "5.277516, 5.231361, 5.201145, 5.189787, 5.203395",\ + "5.400351, 5.354196, 5.323979, 5.312622, 5.326229",\ + "5.638412, 5.592257, 5.562040, 5.550683, 5.564290",\ + "6.058977, 6.012822, 5.982605, 5.971248, 5.984856"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.163897, 5.117742, 5.087525, 5.076168, 5.089776",\ + "5.262290, 5.216135, 5.185918, 5.174561, 5.188169",\ + "5.405017, 5.358862, 5.328645, 5.317288, 5.330895",\ + "5.691147, 5.644992, 5.614775, 5.603418, 5.617025",\ + "6.209457, 6.163302, 6.133085, 6.121728, 6.135335"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[78]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.808182, -0.765804, -0.731225, -0.693590, -0.409733",\ + "-0.891099, -0.848721, -0.814142, -0.776506, -0.492650",\ + "-0.960506, -0.918129, -0.883550, -0.845914, -0.562058",\ + "-1.077306, -1.034929, -1.000349, -0.962714, -0.678857",\ + "-1.260451, -1.218073, -1.183494, -1.145859, -0.862002"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.822461, -0.780084, -0.745505, -0.707869, -0.424013",\ + "-0.907616, -0.865238, -0.830659, -0.793024, -0.509167",\ + "-0.995187, -0.952809, -0.918230, -0.880595, -0.596738",\ + "-1.146480, -1.104103, -1.069523, -1.031888, -0.748031",\ + "-1.401185, -1.358808, -1.324229, -1.286593, -1.002737"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[78]_hldr*/ + +} /* end of pin tl_i[78] */ + +pin("tl_i[77]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001980 ; + + /* Other user defined attributes. */ + original_pin : tl_i[77]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.530322, 5.484167, 5.453950, 5.442593, 5.456201",\ + "5.617828, 5.571673, 5.541456, 5.530099, 5.543706",\ + "5.705123, 5.658968, 5.628751, 5.617394, 5.631001",\ + "5.872606, 5.826451, 5.796235, 5.784877, 5.798485",\ + "6.261807, 6.215652, 6.185436, 6.174078, 6.187686"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.524989, 5.478834, 5.448617, 5.437260, 5.450868",\ + "5.613892, 5.567737, 5.537520, 5.526163, 5.539771",\ + "5.728968, 5.682813, 5.652596, 5.641239, 5.654846",\ + "5.967242, 5.921087, 5.890870, 5.879513, 5.893120",\ + "6.403997, 6.357842, 6.327626, 6.316268, 6.329876"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[77]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.941463, -0.899085, -0.864506, -0.826870, -0.543014",\ + "-1.026243, -0.983865, -0.949286, -0.911651, -0.627794",\ + "-1.097818, -1.055441, -1.020861, -0.983226, -0.699369",\ + "-1.219287, -1.176910, -1.142331, -1.104695, -0.820839",\ + "-1.414036, -1.371659, -1.337079, -1.299444, -1.015587"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.962457, -0.920079, -0.885500, -0.847865, -0.564008",\ + "-1.048641, -1.006264, -0.971684, -0.934049, -0.650192",\ + "-1.136345, -1.093968, -1.059388, -1.021753, -0.737896",\ + "-1.287015, -1.244637, -1.210058, -1.172423, -0.888566",\ + "-1.540997, -1.498620, -1.464041, -1.426405, -1.142549"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[77]_hldr*/ + +} /* end of pin tl_i[77] */ + +pin("tl_i[76]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.002121 ; + + /* Other user defined attributes. */ + original_pin : tl_i[76]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.188263, 5.142108, 5.111891, 5.100534, 5.114141",\ + "5.280335, 5.234180, 5.203964, 5.192606, 5.206214",\ + "5.390166, 5.344011, 5.313795, 5.302437, 5.316045",\ + "5.594857, 5.548702, 5.518486, 5.507128, 5.520736",\ + "5.971145, 5.924990, 5.894773, 5.883416, 5.897023"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.181033, 5.134878, 5.104661, 5.093304, 5.106912",\ + "5.279116, 5.232961, 5.202744, 5.191387, 5.204994",\ + "5.410749, 5.364594, 5.334378, 5.323020, 5.336628",\ + "5.655250, 5.609095, 5.578878, 5.567521, 5.581128",\ + "6.082715, 6.036560, 6.006343, 5.994986, 6.008594"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[76]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.873539, -0.831162, -0.796583, -0.758947, -0.475091",\ + "-0.958672, -0.916295, -0.881715, -0.844080, -0.560223",\ + "-1.055412, -1.013035, -0.978456, -0.940820, -0.656964",\ + "-1.223937, -1.181559, -1.146980, -1.109345, -0.825488",\ + "-1.471815, -1.429437, -1.394858, -1.357222, -1.073366"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.905092, -0.862715, -0.828135, -0.790500, -0.506643",\ + "-0.994562, -0.952185, -0.917606, -0.879970, -0.596114",\ + "-1.089293, -1.046916, -1.012336, -0.974701, -0.690844",\ + "-1.251651, -1.209274, -1.174694, -1.137059, -0.853202",\ + "-1.524578, -1.482201, -1.447622, -1.409986, -1.126130"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[76]_hldr*/ + +} /* end of pin tl_i[76] */ + +pin("tl_i[75]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.002542 ; + + /* Other user defined attributes. */ + original_pin : tl_i[75]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.559262, 5.513107, 5.482891, 5.471533, 5.485141",\ + "5.649136, 5.602981, 5.572764, 5.561407, 5.575014",\ + "5.741644, 5.695489, 5.665273, 5.653915, 5.667523",\ + "5.907515, 5.861360, 5.831143, 5.819786, 5.833393",\ + "6.276364, 6.230209, 6.199993, 6.188635, 6.202243"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.570172, 5.524017, 5.493801, 5.482443, 5.496051",\ + "5.660883, 5.614728, 5.584512, 5.573154, 5.586762",\ + "5.779753, 5.733598, 5.703381, 5.692024, 5.705631",\ + "6.011688, 5.965533, 5.935317, 5.923959, 5.937567",\ + "6.423101, 6.376946, 6.346730, 6.335372, 6.348980"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[75]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.889999, -0.847622, -0.813043, -0.775407, -0.491551",\ + "-0.980238, -0.937861, -0.903281, -0.865646, -0.581789",\ + "-1.093020, -1.050642, -1.016063, -0.978428, -0.694571",\ + "-1.275653, -1.233275, -1.198696, -1.161060, -0.877204",\ + "-1.544115, -1.501738, -1.467158, -1.429523, -1.145666"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.923539, -0.881162, -0.846582, -0.808947, -0.525090",\ + "-1.013448, -0.971071, -0.936491, -0.898856, -0.614999",\ + "-1.108924, -1.066547, -1.031967, -0.994332, -0.710475",\ + "-1.279292, -1.236915, -1.202336, -1.164700, -0.880844",\ + "-1.578850, -1.536472, -1.501893, -1.464258, -1.180401"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[75]_hldr*/ + +} /* end of pin tl_i[75] */ + +pin("tl_i[74]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.002632 ; + + /* Other user defined attributes. */ + original_pin : tl_i[74]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.253567, 5.207412, 5.177195, 5.165838, 5.179445",\ + "5.349404, 5.303249, 5.273033, 5.261675, 5.275283",\ + "5.476182, 5.430027, 5.399810, 5.388453, 5.402061",\ + "5.733068, 5.686913, 5.656696, 5.645339, 5.658946",\ + "6.219316, 6.173161, 6.142944, 6.131587, 6.145194"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.241081, 5.194926, 5.164710, 5.153352, 5.166960",\ + "5.334809, 5.288654, 5.258438, 5.247080, 5.260688",\ + "5.471406, 5.425251, 5.395034, 5.383677, 5.397285",\ + "5.764438, 5.718283, 5.688066, 5.676709, 5.690317",\ + "6.325636, 6.279481, 6.249264, 6.237907, 6.251514"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[74]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.935219, -0.892842, -0.858263, -0.820627, -0.536771",\ + "-1.028860, -0.986483, -0.951903, -0.914268, -0.630411",\ + "-1.143547, -1.101169, -1.066590, -1.028955, -0.745098",\ + "-1.326218, -1.283841, -1.249262, -1.211626, -0.927770",\ + "-1.614166, -1.571789, -1.537210, -1.499574, -1.215718"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.970892, -0.928514, -0.893935, -0.856300, -0.572443",\ + "-1.061820, -1.019442, -0.984863, -0.947227, -0.663371",\ + "-1.163435, -1.121057, -1.086478, -1.048843, -0.764986",\ + "-1.346292, -1.303915, -1.269336, -1.231700, -0.947844",\ + "-1.660875, -1.618498, -1.583918, -1.546283, -1.262426"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[74]_hldr*/ + +} /* end of pin tl_i[74] */ + +pin("tl_i[73]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.002107 ; + + /* Other user defined attributes. */ + original_pin : tl_i[73]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.554523, 5.508368, 5.478152, 5.466794, 5.480402",\ + "5.649414, 5.603259, 5.573042, 5.561685, 5.575293",\ + "5.748847, 5.702692, 5.672475, 5.661118, 5.674726",\ + "5.924383, 5.878228, 5.848011, 5.836654, 5.850262",\ + "6.224755, 6.178600, 6.148384, 6.137026, 6.150634"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.589440, 5.543285, 5.513069, 5.501711, 5.515319",\ + "5.687266, 5.641111, 5.610895, 5.599537, 5.613145",\ + "5.793367, 5.747212, 5.716996, 5.705638, 5.719246",\ + "5.973481, 5.927326, 5.897110, 5.885752, 5.899360",\ + "6.270272, 6.224117, 6.193900, 6.182543, 6.196150"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[73]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.898724, -0.856347, -0.821768, -0.784132, -0.500276",\ + "-0.983802, -0.941425, -0.906845, -0.869210, -0.585353",\ + "-1.080504, -1.038127, -1.003548, -0.965912, -0.682056",\ + "-1.249018, -1.206641, -1.172062, -1.134426, -0.850570",\ + "-1.495438, -1.453061, -1.418482, -1.380846, -1.096990"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.930240, -0.887863, -0.853283, -0.815648, -0.531791",\ + "-1.018219, -0.975842, -0.941263, -0.903627, -0.619771",\ + "-1.114454, -1.072076, -1.037497, -0.999861, -0.716005",\ + "-1.276772, -1.234395, -1.199815, -1.162180, -0.878323",\ + "-1.549656, -1.507279, -1.472699, -1.435064, -1.151207"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[73]_hldr*/ + +} /* end of pin tl_i[73] */ + +pin("tl_i[72]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001514 ; + + /* Other user defined attributes. */ + original_pin : tl_i[72]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "4.995496, 4.949341, 4.919124, 4.907767, 4.921374",\ + "5.088820, 5.042665, 5.012448, 5.001091, 5.014698",\ + "5.200553, 5.154398, 5.124181, 5.112824, 5.126431",\ + "5.410159, 5.364004, 5.333787, 5.322430, 5.336038",\ + "5.770847, 5.724692, 5.694476, 5.683118, 5.696726"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "4.983222, 4.937068, 4.906851, 4.895494, 4.909101",\ + "5.083534, 5.037379, 5.007162, 4.995805, 5.009412",\ + "5.216234, 5.170079, 5.139863, 5.128505, 5.142113",\ + "5.462753, 5.416598, 5.386382, 5.375024, 5.388632",\ + "5.894033, 5.847878, 5.817662, 5.806304, 5.819912"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[72]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.828673, -0.786296, -0.751717, -0.714081, -0.430225",\ + "-0.916407, -0.874030, -0.839450, -0.801815, -0.517958",\ + "-1.009412, -0.967034, -0.932455, -0.894819, -0.610963",\ + "-1.161535, -1.119158, -1.084578, -1.046943, -0.763086",\ + "-1.413529, -1.371152, -1.336573, -1.298937, -1.015081"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.840436, -0.798058, -0.763479, -0.725843, -0.441987",\ + "-0.930307, -0.887930, -0.853350, -0.815715, -0.531858",\ + "-1.024595, -0.982218, -0.947639, -0.910003, -0.626147",\ + "-1.178880, -1.136502, -1.101923, -1.064288, -0.780431",\ + "-1.440355, -1.397978, -1.363399, -1.325763, -1.041907"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[72]_hldr*/ + +} /* end of pin tl_i[72] */ + +pin("tl_i[71]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.002444 ; + + /* Other user defined attributes. */ + original_pin : tl_i[71]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.540210, 5.494055, 5.463838, 5.452481, 5.466088",\ + "5.637518, 5.591363, 5.561146, 5.549789, 5.563396",\ + "5.743839, 5.697684, 5.667468, 5.656110, 5.669718",\ + "5.935360, 5.889205, 5.858988, 5.847631, 5.861238",\ + "6.275519, 6.229364, 6.199148, 6.187790, 6.201398"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.544911, 5.498756, 5.468540, 5.457182, 5.470790",\ + "5.643330, 5.597175, 5.566958, 5.555601, 5.569208",\ + "5.758502, 5.712348, 5.682131, 5.670774, 5.684381",\ + "5.954805, 5.908650, 5.878434, 5.867076, 5.880684",\ + "6.290164, 6.244009, 6.213792, 6.202435, 6.216042"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[71]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.882892, -0.840514, -0.805935, -0.768299, -0.484443",\ + "-0.976532, -0.934155, -0.899575, -0.861940, -0.578083",\ + "-1.091232, -1.048855, -1.014276, -0.976640, -0.692784",\ + "-1.273476, -1.231099, -1.196519, -1.158884, -0.875027",\ + "-1.558704, -1.516327, -1.481747, -1.444112, -1.160255"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.918558, -0.876180, -0.841601, -0.803965, -0.520109",\ + "-1.009478, -0.967101, -0.932522, -0.894886, -0.611030",\ + "-1.111122, -1.068745, -1.034165, -0.996530, -0.712673",\ + "-1.293967, -1.251589, -1.217010, -1.179375, -0.895518",\ + "-1.608551, -1.566173, -1.531594, -1.493959, -1.210102"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[71]_hldr*/ + +} /* end of pin tl_i[71] */ + +pin("tl_i[70]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.002521 ; + + /* Other user defined attributes. */ + original_pin : tl_i[70]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.558736, 5.512581, 5.482364, 5.471007, 5.484614",\ + "5.646551, 5.600396, 5.570179, 5.558822, 5.572429",\ + "5.751346, 5.705191, 5.674974, 5.663617, 5.677224",\ + "5.931952, 5.885797, 5.855580, 5.844223, 5.857830",\ + "6.227381, 6.181226, 6.151009, 6.139652, 6.153259"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.559927, 5.513772, 5.483556, 5.472198, 5.485806",\ + "5.643667, 5.597512, 5.567295, 5.555938, 5.569545",\ + "5.760825, 5.714670, 5.684453, 5.673096, 5.686704",\ + "5.980465, 5.934310, 5.904093, 5.892736, 5.906343",\ + "6.363138, 6.316983, 6.286767, 6.275409, 6.289017"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[70]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.108714, -1.066337, -1.031757, -0.994122, -0.710265",\ + "-1.197711, -1.155334, -1.120755, -1.083119, -0.799263",\ + "-1.273206, -1.230828, -1.196249, -1.158614, -0.874757",\ + "-1.400542, -1.358165, -1.323586, -1.285950, -1.002094",\ + "-1.588133, -1.545756, -1.511176, -1.473541, -1.189684"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.109905, -1.067528, -1.032949, -0.995313, -0.711457",\ + "-1.194827, -1.152450, -1.117871, -1.080235, -0.796379",\ + "-1.282685, -1.240308, -1.205728, -1.168093, -0.884236",\ + "-1.434258, -1.391881, -1.357301, -1.319666, -1.035809",\ + "-1.689183, -1.646805, -1.612226, -1.574591, -1.290734"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[70]_hldr*/ + +} /* end of pin tl_i[70] */ + +pin("tl_i[69]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.003551 ; + + /* Other user defined attributes. */ + original_pin : tl_i[69]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.599169, 5.553014, 5.522797, 5.511440, 5.525047",\ + "5.692371, 5.646216, 5.615999, 5.604642, 5.618249",\ + "5.803999, 5.757844, 5.727628, 5.716270, 5.729878",\ + "6.013692, 5.967537, 5.937320, 5.925963, 5.939570",\ + "6.374660, 6.328505, 6.298288, 6.286931, 6.300539"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.586902, 5.540747, 5.510530, 5.499173, 5.512780",\ + "5.687091, 5.640936, 5.610719, 5.599362, 5.612969",\ + "5.819899, 5.773744, 5.743527, 5.732170, 5.745778",\ + "6.066907, 6.020752, 5.990536, 5.979178, 5.992786",\ + "6.499193, 6.453038, 6.422822, 6.411464, 6.425072"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[69]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.320298, -0.254656, -0.197381, -0.155524, 0.065753",\ + "-0.418767, -0.353125, -0.295851, -0.253993, -0.032716",\ + "-0.541359, -0.475718, -0.418443, -0.376585, -0.155308",\ + "-0.758841, -0.693200, -0.635925, -0.594067, -0.372790",\ + "-1.125992, -1.060351, -1.003076, -0.961219, -0.690840"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.551837, -0.504668, -0.447037, -0.405084, -0.122660",\ + "-0.642640, -0.595471, -0.537840, -0.495887, -0.213464",\ + "-0.748319, -0.701138, -0.643507, -0.601553, -0.319143",\ + "-0.935804, -0.888444, -0.830813, -0.788860, -0.506627",\ + "-1.256943, -1.209575, -1.151944, -1.109991, -0.827767"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[69]_hldr*/ + +} /* end of pin tl_i[69] */ + +pin("tl_i[68]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.003064 ; + + /* Other user defined attributes. */ + original_pin : tl_i[68]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.192542, 5.146387, 5.116170, 5.104813, 5.118420",\ + "5.290967, 5.244812, 5.214595, 5.203238, 5.216846",\ + "5.401109, 5.354954, 5.324737, 5.313380, 5.326987",\ + "5.601238, 5.555083, 5.524867, 5.513509, 5.527117",\ + "5.960707, 5.914552, 5.884336, 5.872978, 5.886586"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.225666, 5.179511, 5.149294, 5.137937, 5.151545",\ + "5.325410, 5.279255, 5.249039, 5.237681, 5.251289",\ + "5.445796, 5.399642, 5.369425, 5.358068, 5.371675",\ + "5.657081, 5.610926, 5.580709, 5.569352, 5.582960",\ + "6.029737, 5.983582, 5.953365, 5.942008, 5.955616"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[68]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.383405, -0.317283, -0.259327, -0.217286, 0.002808",\ + "-0.476585, -0.410463, -0.352507, -0.310465, -0.090372",\ + "-0.609199, -0.543558, -0.486283, -0.444425, -0.212329",\ + "-0.768597, -0.702956, -0.645681, -0.603824, -0.382547",\ + "-1.029441, -0.963800, -0.906525, -0.864667, -0.643390"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.807548, -0.765101, -0.730685, -0.689878, -0.366659",\ + "-0.886339, -0.843892, -0.809476, -0.768669, -0.445450",\ + "-0.998027, -0.955579, -0.921164, -0.880357, -0.557138",\ + "-1.202545, -1.160097, -1.125682, -1.084875, -0.761656",\ + "-1.556186, -1.513738, -1.479323, -1.438516, -1.115297"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[68]_hldr*/ + +} /* end of pin tl_i[68] */ + +pin("tl_i[67]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.004926 ; + + /* Other user defined attributes. */ + original_pin : tl_i[67]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.584554, 5.538399, 5.508182, 5.496825, 5.510432",\ + "5.677766, 5.631611, 5.601395, 5.590037, 5.603645",\ + "5.772066, 5.725911, 5.695694, 5.684337, 5.697944",\ + "5.938811, 5.892656, 5.862439, 5.851082, 5.864689",\ + "6.232008, 6.185853, 6.155637, 6.144279, 6.157887"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.609763, 5.563608, 5.533391, 5.522034, 5.535642",\ + "5.706739, 5.660584, 5.630367, 5.619010, 5.632617",\ + "5.807685, 5.761530, 5.731313, 5.719956, 5.733563",\ + "5.987043, 5.940888, 5.910672, 5.899314, 5.912922",\ + "6.348396, 6.302241, 6.272024, 6.260667, 6.274274"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[67]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.485126, -0.438062, -0.380431, -0.338477, -0.011156",\ + "-0.583825, -0.522452, -0.464496, -0.422454, -0.110899",\ + "-0.666073, -0.599951, -0.541995, -0.499953, -0.221634",\ + "-0.802234, -0.736112, -0.678156, -0.636114, -0.414195",\ + "-1.028199, -0.962077, -0.904121, -0.862080, -0.641986"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.387383, -0.321742, -0.264467, -0.222610, -0.001333",\ + "-0.478290, -0.412648, -0.355373, -0.313516, -0.092239",\ + "-0.583616, -0.517975, -0.460700, -0.418842, -0.197565",\ + "-0.772257, -0.706615, -0.649340, -0.607483, -0.386206",\ + "-1.096755, -1.031114, -0.973839, -0.931981, -0.710704"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[67]_hldr*/ + +} /* end of pin tl_i[67] */ + +pin("tl_i[66]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.005701 ; + + /* Other user defined attributes. */ + original_pin : tl_i[66]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.639438, 5.593283, 5.563066, 5.551709, 5.565317",\ + "5.733038, 5.686883, 5.656666, 5.645309, 5.658916",\ + "5.848727, 5.802572, 5.772356, 5.760998, 5.774606",\ + "6.068509, 6.022354, 5.992137, 5.980780, 5.994387",\ + "6.462988, 6.416833, 6.386617, 6.375259, 6.388867"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.621106, 5.574951, 5.544734, 5.533377, 5.546984",\ + "5.717392, 5.671237, 5.641021, 5.629663, 5.643271",\ + "5.853546, 5.807391, 5.777174, 5.765817, 5.779424",\ + "6.124442, 6.078287, 6.048070, 6.036713, 6.050320",\ + "6.621989, 6.575834, 6.545618, 6.534260, 6.547868"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[66]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.421962, -0.356320, -0.299045, -0.257188, -0.035911",\ + "-0.516417, -0.450775, -0.393500, -0.351643, -0.130366",\ + "-0.609921, -0.544280, -0.487005, -0.445147, -0.223870",\ + "-0.772065, -0.706424, -0.649149, -0.607291, -0.386014",\ + "-0.961881, -0.895759, -0.837803, -0.795761, -0.575668"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.486628, -0.441846, -0.402838, -0.353988, 0.043935",\ + "-0.578095, -0.533313, -0.494305, -0.445455, -0.047532",\ + "-0.684334, -0.639552, -0.600544, -0.551694, -0.153771",\ + "-0.874257, -0.829475, -0.790467, -0.741616, -0.343693",\ + "-1.203886, -1.159104, -1.120096, -1.071246, -0.673323"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[66]_hldr*/ + +} /* end of pin tl_i[66] */ + +pin("tl_i[65]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.005716 ; + + /* Other user defined attributes. */ + original_pin : tl_i[65]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.459126, 5.412971, 5.382754, 5.371397, 5.385004",\ + "5.554200, 5.508045, 5.477829, 5.466471, 5.480079",\ + "5.677998, 5.631843, 5.601626, 5.590269, 5.603877",\ + "5.927989, 5.881835, 5.851618, 5.840261, 5.853868",\ + "6.397048, 6.350893, 6.320677, 6.309319, 6.322927"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.446668, 5.400513, 5.370296, 5.358939, 5.372547",\ + "5.539561, 5.493406, 5.463189, 5.451832, 5.465439",\ + "5.673235, 5.627080, 5.596863, 5.585506, 5.599113",\ + "5.960149, 5.913994, 5.883777, 5.872420, 5.886027",\ + "6.505686, 6.459531, 6.429315, 6.417957, 6.431565"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[65]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.425878, -0.360237, -0.302962, -0.261104, -0.039827",\ + "-0.522669, -0.457028, -0.399753, -0.357895, -0.136618",\ + "-0.621719, -0.556077, -0.498802, -0.456945, -0.235668",\ + "-0.791700, -0.725578, -0.667622, -0.625580, -0.405487",\ + "-0.986124, -0.920002, -0.862046, -0.820004, -0.599911"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.460052, -0.415270, -0.376262, -0.327412, 0.070511",\ + "-0.556623, -0.511841, -0.472833, -0.423982, -0.026060",\ + "-0.658589, -0.613808, -0.574799, -0.525949, -0.128026",\ + "-0.841385, -0.796603, -0.757595, -0.708745, -0.310822",\ + "-1.144313, -1.099531, -1.060523, -1.011673, -0.613750"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[65]_hldr*/ + +} /* end of pin tl_i[65] */ + +pin("tl_i[64]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.004569 ; + + /* Other user defined attributes. */ + original_pin : tl_i[64]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.444655, 5.398500, 5.368283, 5.356926, 5.370533",\ + "5.543582, 5.497427, 5.467211, 5.455853, 5.469461",\ + "5.653337, 5.607182, 5.576965, 5.565608, 5.579216",\ + "5.851637, 5.805482, 5.775266, 5.763908, 5.777516",\ + "6.204331, 6.158176, 6.127959, 6.116602, 6.130209"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.478401, 5.432246, 5.402030, 5.390672, 5.404280",\ + "5.578437, 5.532282, 5.502066, 5.490708, 5.504316",\ + "5.698844, 5.652689, 5.622473, 5.611115, 5.624723",\ + "5.908003, 5.861848, 5.831632, 5.820274, 5.833882",\ + "6.273140, 6.226985, 6.196769, 6.185411, 6.199019"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[64]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.425314, -0.367605, -0.313198, -0.274713, -0.048281",\ + "-0.523194, -0.465485, -0.411079, -0.372594, -0.146162",\ + "-0.645804, -0.588095, -0.533688, -0.495204, -0.268772",\ + "-0.855838, -0.798129, -0.743723, -0.705238, -0.478806",\ + "-1.193156, -1.127033, -1.069077, -1.027036, -0.806943"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.376914, -0.311272, -0.253997, -0.212140, 0.059682",\ + "-0.475849, -0.410207, -0.352932, -0.311075, -0.039253",\ + "-0.593819, -0.528177, -0.470902, -0.429045, -0.157173",\ + "-0.797684, -0.732042, -0.674767, -0.632910, -0.360732",\ + "-1.142024, -1.076383, -1.019108, -0.977250, -0.703048"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[64]_hldr*/ + +} /* end of pin tl_i[64] */ + +pin("tl_i[63]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.005918 ; + + /* Other user defined attributes. */ + original_pin : tl_i[63]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.634018, 5.587863, 5.557646, 5.546289, 5.559896",\ + "5.727260, 5.681105, 5.650888, 5.639531, 5.653139",\ + "5.821638, 5.775483, 5.745266, 5.733909, 5.747517",\ + "5.988543, 5.942388, 5.912171, 5.900814, 5.914422",\ + "6.282049, 6.235894, 6.205677, 6.194320, 6.207927"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.659294, 5.613139, 5.582922, 5.571565, 5.585172",\ + "5.756288, 5.710133, 5.679916, 5.668559, 5.682167",\ + "5.857348, 5.811193, 5.780976, 5.769619, 5.783226",\ + "6.036880, 5.990726, 5.960509, 5.949152, 5.962759",\ + "6.341727, 6.295572, 6.265355, 6.253998, 6.267605"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[63]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.425078, -0.367369, -0.312962, -0.274477, -0.048046",\ + "-0.523533, -0.465824, -0.411418, -0.372933, -0.146501",\ + "-0.649060, -0.591351, -0.536945, -0.498460, -0.272028",\ + "-0.863705, -0.805996, -0.751590, -0.713105, -0.486673",\ + "-1.108760, -1.042638, -0.984682, -0.942640, -0.722547"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.375262, -0.309621, -0.252346, -0.210488, 0.061380",\ + "-0.475435, -0.409794, -0.352519, -0.310661, -0.038785",\ + "-0.593964, -0.528323, -0.471048, -0.429190, -0.157265",\ + "-0.799253, -0.733611, -0.676336, -0.634479, -0.362291",\ + "-1.146486, -1.080845, -1.023570, -0.981712, -0.707386"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[63]_hldr*/ + +} /* end of pin tl_i[63] */ + +pin("tl_i[62]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.005914 ; + + /* Other user defined attributes. */ + original_pin : tl_i[62]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.028421, 4.982266, 4.952050, 4.940692, 4.954300",\ + "5.115734, 5.069579, 5.039362, 5.028005, 5.041612",\ + "5.221791, 5.175636, 5.145419, 5.134062, 5.147669",\ + "5.411152, 5.364997, 5.334780, 5.323423, 5.337030",\ + "5.716925, 5.670770, 5.640553, 5.629196, 5.642803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.030477, 4.984322, 4.954105, 4.942748, 4.956356",\ + "5.112976, 5.066821, 5.036604, 5.025247, 5.038854",\ + "5.241773, 5.195618, 5.165401, 5.154044, 5.167651",\ + "5.477729, 5.431574, 5.401357, 5.390000, 5.403607",\ + "5.884023, 5.837868, 5.807651, 5.796294, 5.809901"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[62]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.310949, -0.245308, -0.188033, -0.146175, 0.125715",\ + "-0.408722, -0.343080, -0.285805, -0.243948, 0.028056",\ + "-0.525662, -0.460020, -0.402745, -0.360888, -0.087938",\ + "-0.729867, -0.664225, -0.606950, -0.565093, -0.287448",\ + "-1.073045, -1.007404, -0.950129, -0.908272, -0.621407"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.560733, -0.518534, -0.464760, -0.422807, -0.191354",\ + "-0.659844, -0.617645, -0.563872, -0.521919, -0.290465",\ + "-0.778888, -0.736689, -0.682928, -0.640975, -0.409521",\ + "-0.986411, -0.944213, -0.890754, -0.848801, -0.617348",\ + "-1.324035, -1.281784, -1.238624, -1.196671, -0.966234"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[62]_hldr*/ + +} /* end of pin tl_i[62] */ + +pin("tl_i[61]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.004650 ; + + /* Other user defined attributes. */ + original_pin : tl_i[61]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.050911, 5.004756, 4.974539, 4.963182, 4.976789",\ + "5.138693, 5.092538, 5.062321, 5.050964, 5.064571",\ + "5.242861, 5.196706, 5.166489, 5.155132, 5.168739",\ + "5.438320, 5.392165, 5.361948, 5.350591, 5.364199",\ + "5.753279, 5.707124, 5.676907, 5.665550, 5.679157"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.054683, 5.008528, 4.978311, 4.966954, 4.980561",\ + "5.137789, 5.091634, 5.061417, 5.050060, 5.063667",\ + "5.257940, 5.211785, 5.181569, 5.170211, 5.183819",\ + "5.493972, 5.447817, 5.417600, 5.406243, 5.419850",\ + "5.883592, 5.837437, 5.807220, 5.795863, 5.809470"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[61]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.331346, -0.288929, -0.254443, -0.214995, 0.091355",\ + "-0.415000, -0.372583, -0.338097, -0.298649, 0.007701",\ + "-0.498520, -0.456102, -0.421616, -0.382169, -0.075818",\ + "-0.644671, -0.602253, -0.567767, -0.528320, -0.221969",\ + "-0.885228, -0.842810, -0.808325, -0.768877, -0.462526"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.495414, -0.429474, -0.371779, -0.329808, -0.077326",\ + "-0.577402, -0.511461, -0.453767, -0.411796, -0.165065",\ + "-0.669896, -0.603956, -0.546261, -0.504290, -0.256735",\ + "-0.831937, -0.776516, -0.718821, -0.676851, -0.409235",\ + "-1.083366, -1.040949, -1.006463, -0.967015, -0.660665"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[61]_hldr*/ + +} /* end of pin tl_i[61] */ + +pin("tl_i[60]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.004493 ; + + /* Other user defined attributes. */ + original_pin : tl_i[60]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.075901, 5.029746, 4.999529, 4.988172, 5.001780",\ + "5.162810, 5.116655, 5.086439, 5.075081, 5.088689",\ + "5.262701, 5.216546, 5.186329, 5.174972, 5.188580",\ + "5.463603, 5.417448, 5.387231, 5.375874, 5.389482",\ + "5.887491, 5.841336, 5.811120, 5.799762, 5.813370"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.069137, 5.022982, 4.992765, 4.981408, 4.995015",\ + "5.162019, 5.115864, 5.085647, 5.074290, 5.087897",\ + "5.289857, 5.243702, 5.213485, 5.202128, 5.215735",\ + "5.547719, 5.501564, 5.471347, 5.459990, 5.473598",\ + "5.999206, 5.953051, 5.922834, 5.911477, 5.925084"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[60]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.331961, -0.289544, -0.255058, -0.215610, 0.090740",\ + "-0.416689, -0.374271, -0.339785, -0.300337, 0.006013",\ + "-0.501750, -0.459332, -0.424846, -0.385399, -0.079048",\ + "-0.650840, -0.608422, -0.573936, -0.534488, -0.228138",\ + "-0.898578, -0.856161, -0.821675, -0.782227, -0.475877"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.494855, -0.428915, -0.371220, -0.329249, -0.108704",\ + "-0.577203, -0.511263, -0.453568, -0.411597, -0.191052",\ + "-0.675131, -0.609191, -0.551496, -0.509525, -0.288980",\ + "-0.848911, -0.782971, -0.725276, -0.683305, -0.462760",\ + "-1.143176, -1.077236, -1.019541, -0.977570, -0.757025"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[60]_hldr*/ + +} /* end of pin tl_i[60] */ + +pin("tl_i[59]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.004673 ; + + /* Other user defined attributes. */ + original_pin : tl_i[59]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.018675, 4.972520, 4.942304, 4.930946, 4.944554",\ + "5.111604, 5.065449, 5.035232, 5.023875, 5.037482",\ + "5.204963, 5.158808, 5.128592, 5.117234, 5.130842",\ + "5.368355, 5.322200, 5.291983, 5.280626, 5.294233",\ + "5.654718, 5.608563, 5.578346, 5.566989, 5.580596"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.048488, 5.002333, 4.972116, 4.960759, 4.974366",\ + "5.145526, 5.099371, 5.069155, 5.057797, 5.071405",\ + "5.246175, 5.200020, 5.169804, 5.158446, 5.172054",\ + "5.423032, 5.376877, 5.346661, 5.335303, 5.348911",\ + "5.720785, 5.674630, 5.644413, 5.633056, 5.646663"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[59]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.399850, -0.333910, -0.276215, -0.234244, -0.013699",\ + "-0.490388, -0.424448, -0.366753, -0.324782, -0.104237",\ + "-0.591764, -0.525824, -0.468129, -0.426158, -0.205613",\ + "-0.771660, -0.705720, -0.648025, -0.606054, -0.385509",\ + "-1.061324, -0.995383, -0.937689, -0.895718, -0.675172"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.408211, -0.365794, -0.331308, -0.291860, 0.014490",\ + "-0.495065, -0.452648, -0.418162, -0.378714, -0.072363",\ + "-0.606791, -0.564374, -0.529888, -0.490440, -0.184090",\ + "-0.793280, -0.750863, -0.716377, -0.676929, -0.370579",\ + "-1.099378, -1.056960, -1.022474, -0.983027, -0.676676"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[59]_hldr*/ + +} /* end of pin tl_i[59] */ + +pin("tl_i[58]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.005086 ; + + /* Other user defined attributes. */ + original_pin : tl_i[58]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "4.907104, 4.860949, 4.830732, 4.819375, 4.832983",\ + "4.992526, 4.946371, 4.916154, 4.904797, 4.918404",\ + "5.070096, 5.023941, 4.993724, 4.982367, 4.995975",\ + "5.244753, 5.198598, 5.168381, 5.157024, 5.170631",\ + "5.599957, 5.553802, 5.523586, 5.512228, 5.525836"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "4.904143, 4.857988, 4.827772, 4.816414, 4.830022",\ + "4.986795, 4.940640, 4.910424, 4.899066, 4.912674",\ + "5.098862, 5.052707, 5.022491, 5.011133, 5.024741",\ + "5.327568, 5.281413, 5.251196, 5.239839, 5.253446",\ + "5.728967, 5.682812, 5.652596, 5.641238, 5.654846"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[58]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.409769, -0.343829, -0.286134, -0.244163, -0.023618",\ + "-0.498234, -0.432294, -0.374599, -0.332628, -0.112083",\ + "-0.599794, -0.533854, -0.476159, -0.434188, -0.213643",\ + "-0.781831, -0.715891, -0.658196, -0.616225, -0.395680",\ + "-1.087101, -1.021161, -0.963466, -0.921496, -0.700950"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.423427, -0.381010, -0.346524, -0.307076, -0.000726",\ + "-0.507266, -0.464848, -0.430363, -0.390915, -0.084564",\ + "-0.628312, -0.585894, -0.551408, -0.511960, -0.205610",\ + "-0.825686, -0.783269, -0.748783, -0.709335, -0.402985",\ + "-1.126419, -1.084002, -1.049516, -1.010068, -0.703718"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[58]_hldr*/ + +} /* end of pin tl_i[58] */ + +pin("tl_i[57]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.004084 ; + + /* Other user defined attributes. */ + original_pin : tl_i[57]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "4.853275, 4.807120, 4.776903, 4.765546, 4.779153",\ + "4.941780, 4.895625, 4.865408, 4.854051, 4.867658",\ + "5.043512, 4.997357, 4.967141, 4.955783, 4.969391",\ + "5.245644, 5.199489, 5.169272, 5.157915, 5.171523",\ + "5.684921, 5.638766, 5.608549, 5.597192, 5.610799"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "4.846420, 4.800265, 4.770049, 4.758691, 4.772299",\ + "4.940993, 4.894838, 4.864621, 4.853264, 4.866871",\ + "5.069371, 5.023216, 4.992999, 4.981642, 4.995249",\ + "5.318837, 5.272682, 5.242465, 5.231108, 5.244716",\ + "5.754844, 5.708689, 5.678472, 5.667115, 5.680722"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[57]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.439430, -0.373490, -0.315795, -0.273825, -0.053279",\ + "-0.519622, -0.453682, -0.395987, -0.354016, -0.133471",\ + "-0.597395, -0.531455, -0.473760, -0.431789, -0.211244",\ + "-0.729801, -0.663861, -0.606166, -0.564195, -0.343650",\ + "-0.935990, -0.870050, -0.812355, -0.770384, -0.549839"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.409353, -0.366935, -0.332449, -0.293002, 0.013349",\ + "-0.497213, -0.454795, -0.420310, -0.380862, -0.074511",\ + "-0.585629, -0.543211, -0.508725, -0.469278, -0.162927",\ + "-0.741802, -0.699385, -0.664899, -0.625451, -0.319101",\ + "-0.995469, -0.953051, -0.918565, -0.879117, -0.572767"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[57]_hldr*/ + +} /* end of pin tl_i[57] */ + +pin("tl_i[56]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.005633 ; + + /* Other user defined attributes. */ + original_pin : tl_i[56]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "4.771066, 4.724911, 4.694694, 4.683337, 4.696944",\ + "4.860967, 4.814812, 4.784595, 4.773238, 4.786846",\ + "4.953480, 4.907325, 4.877108, 4.865751, 4.879358",\ + "5.122646, 5.076491, 5.046274, 5.034917, 5.048524",\ + "5.508491, 5.462336, 5.432119, 5.420762, 5.434369"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "4.784305, 4.738150, 4.707933, 4.696576, 4.710184",\ + "4.872721, 4.826566, 4.796349, 4.784992, 4.798599",\ + "4.991727, 4.945572, 4.915355, 4.903998, 4.917605",\ + "5.265233, 5.219078, 5.188861, 5.177504, 5.191111",\ + "5.790774, 5.744619, 5.714402, 5.703045, 5.716652"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[56]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.441652, -0.375711, -0.318017, -0.276046, -0.055500",\ + "-0.524614, -0.458674, -0.400979, -0.359008, -0.138463",\ + "-0.607820, -0.541879, -0.484185, -0.442214, -0.221668",\ + "-0.753165, -0.687225, -0.629530, -0.587559, -0.367014",\ + "-0.987968, -0.922028, -0.864333, -0.822362, -0.601816"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.411476, -0.369059, -0.334573, -0.295125, 0.011225",\ + "-0.499637, -0.457219, -0.422733, -0.383285, -0.076935",\ + "-0.588334, -0.545917, -0.511431, -0.471983, -0.165633",\ + "-0.746601, -0.704183, -0.669698, -0.630250, -0.323899",\ + "-1.003694, -0.961277, -0.926791, -0.887343, -0.580993"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[56]_hldr*/ + +} /* end of pin tl_i[56] */ + +pin("tl_i[55]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.023564 ; + + /* Other user defined attributes. */ + original_pin : tl_i[55]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.825782, 5.779627, 5.749410, 5.738052, 5.751660",\ + "5.912527, 5.866372, 5.836155, 5.824798, 5.838405",\ + "6.021775, 5.975620, 5.945403, 5.934046, 5.947653",\ + "6.207016, 6.160861, 6.130644, 6.119287, 6.132894",\ + "6.502526, 6.456371, 6.426154, 6.414796, 6.428404"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.826127, 5.779972, 5.749755, 5.738398, 5.752005",\ + "5.912270, 5.866115, 5.835897, 5.824540, 5.838148",\ + "6.043355, 5.997200, 5.966982, 5.955625, 5.969233",\ + "6.273898, 6.227743, 6.197526, 6.186169, 6.199776",\ + "6.665429, 6.619274, 6.589057, 6.577700, 6.591307"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[55]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.126806, -0.084700, -0.042324, -0.000326, 0.287989",\ + "-0.211450, -0.169345, -0.128664, -0.086666, 0.203312",\ + "-0.299321, -0.257215, -0.213787, -0.171789, 0.115291",\ + "-0.454534, -0.412428, -0.355362, -0.313364, -0.040427",\ + "-0.701632, -0.635483, -0.577488, -0.535436, -0.297932"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.131974, -0.065963, -0.008166, 0.033833, 0.254201",\ + "-0.225998, -0.159987, -0.102190, -0.060192, 0.160177",\ + "-0.317206, -0.251195, -0.193398, -0.151400, 0.068969",\ + "-0.474232, -0.408221, -0.350424, -0.308425, -0.088057",\ + "-0.725398, -0.659249, -0.601254, -0.559203, -0.339176"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[55]_hldr*/ + +} /* end of pin tl_i[55] */ + +pin("tl_i[54]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.024771 ; + + /* Other user defined attributes. */ + original_pin : tl_i[54]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.671892, 5.625737, 5.595520, 5.584163, 5.597770",\ + "5.766703, 5.720548, 5.690331, 5.678973, 5.692581",\ + "5.865909, 5.819754, 5.789536, 5.778179, 5.791787",\ + "6.041008, 5.994853, 5.964636, 5.953279, 5.966886",\ + "6.340645, 6.294490, 6.264273, 6.252915, 6.266523"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.706592, 5.660437, 5.630219, 5.618862, 5.632470",\ + "5.804386, 5.758231, 5.728014, 5.716657, 5.730264",\ + "5.910204, 5.864049, 5.833832, 5.822474, 5.836082",\ + "6.089930, 6.043775, 6.013557, 6.002200, 6.015808",\ + "6.385911, 6.339756, 6.309539, 6.298182, 6.311790"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[54]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.126806, -0.084700, -0.042324, -0.000326, 0.287989",\ + "-0.211450, -0.169345, -0.128664, -0.086666, 0.203312",\ + "-0.299321, -0.257215, -0.213787, -0.171789, 0.115291",\ + "-0.454534, -0.412428, -0.355362, -0.313364, -0.040427",\ + "-0.701632, -0.635483, -0.577488, -0.535436, -0.297932"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.131974, -0.065963, -0.008166, 0.033833, 0.254201",\ + "-0.225998, -0.159987, -0.102190, -0.060192, 0.160177",\ + "-0.317206, -0.251195, -0.193398, -0.151400, 0.068969",\ + "-0.474232, -0.408221, -0.350424, -0.308425, -0.088057",\ + "-0.725398, -0.659249, -0.601254, -0.559203, -0.339176"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[54]_hldr*/ + +} /* end of pin tl_i[54] */ + +pin("tl_i[53]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.025984 ; + + /* Other user defined attributes. */ + original_pin : tl_i[53]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.405560, 5.359406, 5.329188, 5.317831, 5.331439",\ + "5.489668, 5.443513, 5.413296, 5.401938, 5.415546",\ + "5.570677, 5.524522, 5.494305, 5.482947, 5.496555",\ + "5.711991, 5.665836, 5.635619, 5.624262, 5.637869",\ + "5.953867, 5.907712, 5.877495, 5.866138, 5.879745"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.390637, 5.344482, 5.314265, 5.302907, 5.316515",\ + "5.472354, 5.426199, 5.395982, 5.384624, 5.398232",\ + "5.578566, 5.532411, 5.502193, 5.490836, 5.504444",\ + "5.766796, 5.720641, 5.690423, 5.679066, 5.692674",\ + "6.084168, 6.038013, 6.007796, 5.996439, 6.010046"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[53]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.126806, -0.084700, -0.042324, -0.000326, 0.287989",\ + "-0.211450, -0.169345, -0.128664, -0.086666, 0.203312",\ + "-0.299321, -0.257215, -0.213787, -0.171789, 0.115291",\ + "-0.454534, -0.412428, -0.355362, -0.313364, -0.040427",\ + "-0.701632, -0.635483, -0.577488, -0.535436, -0.297932"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.131974, -0.065963, -0.008166, 0.033833, 0.254201",\ + "-0.225998, -0.159987, -0.102190, -0.060192, 0.160177",\ + "-0.317206, -0.251195, -0.193398, -0.151400, 0.068969",\ + "-0.474232, -0.408221, -0.350424, -0.308425, -0.088057",\ + "-0.725398, -0.659249, -0.601254, -0.559203, -0.339176"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[53]_hldr*/ + +} /* end of pin tl_i[53] */ + +pin("tl_i[52]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.023928 ; + + /* Other user defined attributes. */ + original_pin : tl_i[52]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.851366, 5.805211, 5.774994, 5.763637, 5.777244",\ + "5.940992, 5.894837, 5.864620, 5.853263, 5.866870",\ + "6.046589, 6.000434, 5.970217, 5.958859, 5.972467",\ + "6.242908, 6.196754, 6.166536, 6.155179, 6.168787",\ + "6.655770, 6.609615, 6.579398, 6.568040, 6.581648"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.844427, 5.798272, 5.768054, 5.756697, 5.770305",\ + "5.940210, 5.894055, 5.863838, 5.852481, 5.866088",\ + "6.071230, 6.025075, 5.994858, 5.983501, 5.997108",\ + "6.314948, 6.268793, 6.238575, 6.227218, 6.240826",\ + "6.731011, 6.684856, 6.654639, 6.643281, 6.656889"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[52]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.126806, -0.084700, -0.042324, -0.000326, 0.287989",\ + "-0.211450, -0.169345, -0.128664, -0.086666, 0.203312",\ + "-0.299321, -0.257215, -0.213787, -0.171789, 0.115291",\ + "-0.454534, -0.412428, -0.355362, -0.313364, -0.040427",\ + "-0.701632, -0.635483, -0.577488, -0.535436, -0.297932"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.131974, -0.065963, -0.008166, 0.033833, 0.254201",\ + "-0.225998, -0.159987, -0.102190, -0.060192, 0.160177",\ + "-0.317206, -0.251195, -0.193398, -0.151400, 0.068969",\ + "-0.474232, -0.408221, -0.350424, -0.308425, -0.088057",\ + "-0.725398, -0.659249, -0.601254, -0.559203, -0.339176"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[52]_hldr*/ + +} /* end of pin tl_i[52] */ + +pin("tl_i[51]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.024747 ; + + /* Other user defined attributes. */ + original_pin : tl_i[51]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.766789, 5.720634, 5.690417, 5.679060, 5.692667",\ + "5.856632, 5.810477, 5.780260, 5.768903, 5.782510",\ + "5.949137, 5.902982, 5.872765, 5.861408, 5.875015",\ + "6.115034, 6.068879, 6.038662, 6.027305, 6.040912",\ + "6.488516, 6.442361, 6.412144, 6.400786, 6.414394"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.777621, 5.731466, 5.701249, 5.689892, 5.703499",\ + "5.868374, 5.822219, 5.792002, 5.780644, 5.794252",\ + "5.987092, 5.940937, 5.910720, 5.899363, 5.912970",\ + "6.219129, 6.172974, 6.142756, 6.131399, 6.145007",\ + "6.630526, 6.584371, 6.554153, 6.542796, 6.556404"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[51]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.126806, -0.084700, -0.042324, -0.000326, 0.287989",\ + "-0.211450, -0.169345, -0.128664, -0.086666, 0.203312",\ + "-0.299321, -0.257215, -0.213787, -0.171789, 0.115291",\ + "-0.454534, -0.408918, -0.350984, -0.308948, -0.040427",\ + "-0.633444, -0.567337, -0.509403, -0.467367, -0.247237"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.131974, -0.065963, -0.008166, 0.033833, 0.254201",\ + "-0.225998, -0.159987, -0.102190, -0.060192, 0.160177",\ + "-0.317206, -0.251195, -0.193398, -0.151400, 0.068969",\ + "-0.474232, -0.408221, -0.350424, -0.308425, -0.088057",\ + "-0.660870, -0.594763, -0.536828, -0.494793, -0.274662"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[51]_hldr*/ + +} /* end of pin tl_i[51] */ + +pin("tl_i[50]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.024706 ; + + /* Other user defined attributes. */ + original_pin : tl_i[50]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.432938, 5.386783, 5.356565, 5.345208, 5.358816",\ + "5.522908, 5.476753, 5.446536, 5.435179, 5.448786",\ + "5.615422, 5.569267, 5.539050, 5.527693, 5.541300",\ + "5.781178, 5.735023, 5.704806, 5.693449, 5.707057",\ + "6.151173, 6.105018, 6.074801, 6.063444, 6.077051"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.443795, 5.397640, 5.367423, 5.356066, 5.369673",\ + "5.534675, 5.488520, 5.458302, 5.446945, 5.460553",\ + "5.653760, 5.607605, 5.577388, 5.566031, 5.579638",\ + "5.885449, 5.839294, 5.809077, 5.797719, 5.811327",\ + "6.297242, 6.251087, 6.220870, 6.209512, 6.223120"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[50]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.126806, -0.084700, -0.042324, -0.000326, 0.287989",\ + "-0.211450, -0.169345, -0.128664, -0.086666, 0.203312",\ + "-0.299321, -0.257215, -0.213787, -0.171789, 0.115291",\ + "-0.454534, -0.408918, -0.350984, -0.308948, -0.040427",\ + "-0.633444, -0.567337, -0.509403, -0.467367, -0.247237"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.131974, -0.065963, -0.008166, 0.033833, 0.254201",\ + "-0.225998, -0.159987, -0.102190, -0.060192, 0.160177",\ + "-0.317206, -0.251195, -0.193398, -0.151400, 0.068969",\ + "-0.474232, -0.408221, -0.350424, -0.308425, -0.088057",\ + "-0.660870, -0.594763, -0.536828, -0.494793, -0.274662"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[50]_hldr*/ + +} /* end of pin tl_i[50] */ + +pin("tl_i[49]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.014215 ; + + /* Other user defined attributes. */ + original_pin : tl_i[49]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.612003, 5.565848, 5.535631, 5.524274, 5.537881",\ + "5.697372, 5.651217, 5.621000, 5.609643, 5.623250",\ + "5.774767, 5.728612, 5.698395, 5.687037, 5.700645",\ + "5.943757, 5.897602, 5.867384, 5.856027, 5.869635",\ + "6.302785, 6.256630, 6.226413, 6.215055, 6.228663"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.608959, 5.562804, 5.532587, 5.521230, 5.534837",\ + "5.691543, 5.645388, 5.615170, 5.603813, 5.617421",\ + "5.803527, 5.757372, 5.727155, 5.715797, 5.729405",\ + "6.034389, 5.988234, 5.958016, 5.946659, 5.960267",\ + "6.439312, 6.393157, 6.362939, 6.351582, 6.365190"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[49]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.134918, -0.092500, -0.042324, -0.000326, 0.287989",\ + "-0.219595, -0.177177, -0.128664, -0.086666, 0.203312",\ + "-0.307616, -0.265198, -0.213787, -0.171789, 0.115291",\ + "-0.454448, -0.412253, -0.355362, -0.313364, -0.040427",\ + "-0.692896, -0.635483, -0.577488, -0.535436, -0.297932"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.131974, -0.065963, -0.008166, 0.033833, 0.254201",\ + "-0.225998, -0.159987, -0.102190, -0.060192, 0.160177",\ + "-0.317206, -0.251195, -0.193398, -0.151400, 0.068969",\ + "-0.474232, -0.408221, -0.350424, -0.308425, -0.088057",\ + "-0.725398, -0.659249, -0.601254, -0.559203, -0.339176"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[49]_hldr*/ + +} /* end of pin tl_i[49] */ + +pin("tl_i[48]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.015924 ; + + /* Other user defined attributes. */ + original_pin : tl_i[48]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.342521, 5.296366, 5.266149, 5.254791, 5.268399",\ + "5.430000, 5.383845, 5.353628, 5.342271, 5.355878",\ + "5.517300, 5.471145, 5.440928, 5.429570, 5.443178",\ + "5.691890, 5.645735, 5.615518, 5.604160, 5.617768",\ + "6.098689, 6.052534, 6.022317, 6.010960, 6.024567"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.337069, 5.290914, 5.260696, 5.249339, 5.262947",\ + "5.426027, 5.379872, 5.349655, 5.338298, 5.351905",\ + "5.541069, 5.494914, 5.464697, 5.453340, 5.466947",\ + "5.778956, 5.732801, 5.702584, 5.691227, 5.704834",\ + "6.214471, 6.168316, 6.138099, 6.126742, 6.140349"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[48]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.095389, -0.053327, -0.019395, 0.003631, 0.287989",\ + "-0.178535, -0.136472, -0.102541, -0.079514, 0.203312",\ + "-0.262969, -0.220876, -0.186811, -0.163726, 0.115291",\ + "-0.399970, -0.357878, -0.323812, -0.300727, -0.040427",\ + "-0.613644, -0.571552, -0.537486, -0.514401, -0.297932"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.127054, -0.062200, -0.008166, 0.033833, 0.254201",\ + "-0.207506, -0.142652, -0.088847, -0.050549, 0.160177",\ + "-0.300279, -0.235482, -0.181379, -0.142982, 0.068969",\ + "-0.445930, -0.381133, -0.327029, -0.288632, -0.088057",\ + "-0.677823, -0.613026, -0.558922, -0.520525, -0.325394"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[48]_hldr*/ + +} /* end of pin tl_i[48] */ + +pin("tl_i[47]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.015093 ; + + /* Other user defined attributes. */ + original_pin : tl_i[47]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.720613, 5.674458, 5.644240, 5.632883, 5.646491",\ + "5.808302, 5.762147, 5.731930, 5.720572, 5.734180",\ + "5.909732, 5.863577, 5.833360, 5.822003, 5.835610",\ + "6.090167, 6.044012, 6.013794, 6.002437, 6.016045",\ + "6.375024, 6.328869, 6.298652, 6.287294, 6.300902"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.723861, 5.677706, 5.647489, 5.636132, 5.649739",\ + "5.806833, 5.760678, 5.730461, 5.719103, 5.732711",\ + "5.923954, 5.877799, 5.847582, 5.836225, 5.849832",\ + "6.142916, 6.096761, 6.066544, 6.055186, 6.068794",\ + "6.505251, 6.459096, 6.428879, 6.417521, 6.431129"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[47]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.126806, -0.084700, -0.042324, -0.000326, 0.287989",\ + "-0.211450, -0.169345, -0.128664, -0.086666, 0.203312",\ + "-0.299321, -0.257215, -0.213787, -0.171789, 0.115291",\ + "-0.454448, -0.412253, -0.355362, -0.313364, -0.040427",\ + "-0.692896, -0.635483, -0.577488, -0.535436, -0.297932"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.131974, -0.065963, -0.008166, 0.033833, 0.254201",\ + "-0.225998, -0.159987, -0.102190, -0.060192, 0.160177",\ + "-0.317206, -0.251195, -0.193398, -0.151400, 0.068969",\ + "-0.474232, -0.408221, -0.350424, -0.308425, -0.088057",\ + "-0.725398, -0.659249, -0.601254, -0.559203, -0.339176"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[47]_hldr*/ + +} /* end of pin tl_i[47] */ + +pin("tl_i[46]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.015694 ; + + /* Other user defined attributes. */ + original_pin : tl_i[46]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.747210, 5.701055, 5.670837, 5.659480, 5.673088",\ + "5.834549, 5.788394, 5.758177, 5.746819, 5.760427",\ + "5.931758, 5.885603, 5.855386, 5.844028, 5.857636",\ + "6.119594, 6.073439, 6.043221, 6.031864, 6.045472",\ + "6.512118, 6.465963, 6.435746, 6.424389, 6.437996"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.740419, 5.694264, 5.664047, 5.652689, 5.666297",\ + "5.833758, 5.787603, 5.757386, 5.746029, 5.759636",\ + "5.958529, 5.912374, 5.882157, 5.870800, 5.884408",\ + "6.201867, 6.155712, 6.125495, 6.114138, 6.127745",\ + "6.619649, 6.573494, 6.543277, 6.531919, 6.545527"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[46]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.126806, -0.084700, -0.042324, -0.000326, 0.287989",\ + "-0.211450, -0.169345, -0.128664, -0.086666, 0.203312",\ + "-0.299321, -0.257215, -0.213787, -0.171789, 0.115291",\ + "-0.454448, -0.412253, -0.355362, -0.313364, -0.040427",\ + "-0.692896, -0.635483, -0.577488, -0.535436, -0.297932"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.131974, -0.065963, -0.008166, 0.033833, 0.254201",\ + "-0.225998, -0.159987, -0.102190, -0.060192, 0.160177",\ + "-0.317206, -0.251195, -0.193398, -0.151400, 0.068969",\ + "-0.474232, -0.408221, -0.350424, -0.308425, -0.088057",\ + "-0.725398, -0.659249, -0.601254, -0.559203, -0.339176"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[46]_hldr*/ + +} /* end of pin tl_i[46] */ + +pin("tl_i[45]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.017466 ; + + /* Other user defined attributes. */ + original_pin : tl_i[45]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.112432, 5.066278, 5.036060, 5.024703, 5.038311",\ + "5.197829, 5.151674, 5.121457, 5.110100, 5.123707",\ + "5.275316, 5.229161, 5.198944, 5.187587, 5.201194",\ + "5.419477, 5.373322, 5.343104, 5.331747, 5.345355",\ + "5.777201, 5.731046, 5.700829, 5.689471, 5.703079"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.109432, 5.063277, 5.033060, 5.021703, 5.035310",\ + "5.192052, 5.145897, 5.115680, 5.104322, 5.117930",\ + "5.304079, 5.257924, 5.227707, 5.216350, 5.229957",\ + "5.534409, 5.488254, 5.458036, 5.446679, 5.460287",\ + "5.938303, 5.892148, 5.861931, 5.850574, 5.864181"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[45]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.134918, -0.092500, -0.042324, -0.000326, 0.287989",\ + "-0.219595, -0.177177, -0.128664, -0.086666, 0.203312",\ + "-0.307616, -0.265198, -0.213787, -0.171789, 0.115291",\ + "-0.454448, -0.408918, -0.350984, -0.308948, -0.040427",\ + "-0.633444, -0.567337, -0.509403, -0.467367, -0.247237"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.131974, -0.065963, -0.008166, 0.033833, 0.254201",\ + "-0.225998, -0.159987, -0.102190, -0.060192, 0.160177",\ + "-0.317206, -0.251195, -0.193398, -0.151400, 0.068969",\ + "-0.474232, -0.408221, -0.350424, -0.308425, -0.088057",\ + "-0.660870, -0.594763, -0.536828, -0.494793, -0.274662"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[45]_hldr*/ + +} /* end of pin tl_i[45] */ + +pin("tl_i[44]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.016255 ; + + /* Other user defined attributes. */ + original_pin : tl_i[44]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.787257, 5.741102, 5.710885, 5.699527, 5.713135",\ + "5.887364, 5.841209, 5.810992, 5.799634, 5.813242",\ + "6.003266, 5.957111, 5.926894, 5.915536, 5.929144",\ + "6.212816, 6.166661, 6.136444, 6.125086, 6.138694",\ + "6.574124, 6.527969, 6.497752, 6.486395, 6.500002"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.833889, 5.787734, 5.757517, 5.746160, 5.759767",\ + "5.932858, 5.886703, 5.856485, 5.845128, 5.858736",\ + "6.056724, 6.010569, 5.980351, 5.968994, 5.982602",\ + "6.267234, 6.221079, 6.190862, 6.179505, 6.193112",\ + "6.625524, 6.579369, 6.549152, 6.537795, 6.551402"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[44]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.126806, -0.084700, -0.042324, -0.000326, 0.287989",\ + "-0.211450, -0.169345, -0.128664, -0.086666, 0.203312",\ + "-0.299321, -0.257215, -0.213787, -0.171789, 0.115291",\ + "-0.454448, -0.408918, -0.350984, -0.308948, -0.040427",\ + "-0.633444, -0.567337, -0.509403, -0.467367, -0.247237"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.131974, -0.065963, -0.008166, 0.033833, 0.254201",\ + "-0.225998, -0.159987, -0.102190, -0.060192, 0.160177",\ + "-0.317206, -0.251195, -0.193398, -0.151400, 0.068969",\ + "-0.474232, -0.408221, -0.350424, -0.308425, -0.088057",\ + "-0.660870, -0.594763, -0.536828, -0.494793, -0.274662"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[44]_hldr*/ + +} /* end of pin tl_i[44] */ + +pin("tl_i[43]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.018203 ; + + /* Other user defined attributes. */ + original_pin : tl_i[43]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.371556, 5.325401, 5.295184, 5.283827, 5.297434",\ + "5.461463, 5.415308, 5.385091, 5.373734, 5.387341",\ + "5.553976, 5.507821, 5.477604, 5.466247, 5.479854",\ + "5.719817, 5.673662, 5.643445, 5.632088, 5.645695",\ + "6.097318, 6.051163, 6.020946, 6.009588, 6.023196"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.382551, 5.336396, 5.306179, 5.294822, 5.308429",\ + "5.473218, 5.427063, 5.396846, 5.385489, 5.399096",\ + "5.592251, 5.546096, 5.515879, 5.504522, 5.518129",\ + "5.824078, 5.777923, 5.747705, 5.736348, 5.749956",\ + "6.235509, 6.189354, 6.159137, 6.147780, 6.161387"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[43]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.103114, -0.028963, 0.033559, 0.078022, 0.304626",\ + "-0.178370, -0.104212, -0.041630, 0.002858, 0.229475",\ + "-0.246264, -0.172106, -0.109525, -0.065037, 0.161580",\ + "-0.355098, -0.280940, -0.218359, -0.173870, 0.052747",\ + "-0.519769, -0.445611, -0.383030, -0.338542, -0.111925"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.112706, -0.065963, -0.008166, 0.033833, 0.418070",\ + "-0.200783, -0.156045, -0.102190, -0.060192, 0.330579",\ + "-0.289959, -0.245221, -0.193398, -0.151400, 0.241403",\ + "-0.449366, -0.404628, -0.350424, -0.308425, 0.081996",\ + "-0.660870, -0.594763, -0.536828, -0.494793, -0.185073"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[43]_hldr*/ + +} /* end of pin tl_i[43] */ + +pin("tl_i[42]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.019122 ; + + /* Other user defined attributes. */ + original_pin : tl_i[42]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.198272, 5.152117, 5.121900, 5.110542, 5.124150",\ + "5.294228, 5.248073, 5.217855, 5.206498, 5.220106",\ + "5.404464, 5.358309, 5.328092, 5.316734, 5.330342",\ + "5.594985, 5.548830, 5.518613, 5.507256, 5.520863",\ + "5.917032, 5.870877, 5.840660, 5.829302, 5.842910"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.190427, 5.144272, 5.114055, 5.102697, 5.116305",\ + "5.291961, 5.245806, 5.215589, 5.204232, 5.217839",\ + "5.417454, 5.371299, 5.341082, 5.329724, 5.343332",\ + "5.634560, 5.588405, 5.558187, 5.546830, 5.560438",\ + "6.000741, 5.954587, 5.924369, 5.913012, 5.926620"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[42]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.103114, -0.028963, 0.033559, 0.078022, 0.304626",\ + "-0.178370, -0.104212, -0.041630, 0.002858, 0.229475",\ + "-0.246264, -0.172106, -0.109525, -0.065037, 0.161580",\ + "-0.355098, -0.280940, -0.218359, -0.173870, 0.052747",\ + "-0.519769, -0.445611, -0.383030, -0.338542, -0.111925"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.112706, -0.065963, -0.008166, 0.033833, 0.418070",\ + "-0.200783, -0.156045, -0.102190, -0.060192, 0.330579",\ + "-0.289959, -0.245221, -0.193398, -0.151400, 0.241403",\ + "-0.449366, -0.404628, -0.350424, -0.308425, 0.081996",\ + "-0.660870, -0.594763, -0.536828, -0.494793, -0.185073"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[42]_hldr*/ + +} /* end of pin tl_i[42] */ + +pin("tl_i[41]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.022202 ; + + /* Other user defined attributes. */ + original_pin : tl_i[41]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.148859, 5.102704, 5.072487, 5.061130, 5.074737",\ + "5.233216, 5.187061, 5.156844, 5.145487, 5.159094",\ + "5.314116, 5.267961, 5.237743, 5.226386, 5.239994",\ + "5.455597, 5.409442, 5.379225, 5.367867, 5.381475",\ + "5.695938, 5.649783, 5.619565, 5.608208, 5.621816"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.134229, 5.088074, 5.057857, 5.046499, 5.060107",\ + "5.215816, 5.169661, 5.139443, 5.128086, 5.141694",\ + "5.322016, 5.275861, 5.245644, 5.234286, 5.247894",\ + "5.510269, 5.464114, 5.433897, 5.422539, 5.436147",\ + "5.825513, 5.779358, 5.749141, 5.737783, 5.751391"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[41]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.103114, -0.028963, 0.033559, 0.078022, 0.304626",\ + "-0.178370, -0.104212, -0.041630, 0.002858, 0.229475",\ + "-0.246264, -0.172106, -0.109525, -0.065037, 0.161580",\ + "-0.355098, -0.280940, -0.218359, -0.173870, 0.052747",\ + "-0.519769, -0.445611, -0.383030, -0.338542, -0.111925"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.112706, -0.065963, -0.008166, 0.033833, 0.418070",\ + "-0.200783, -0.156045, -0.102190, -0.060192, 0.330579",\ + "-0.289959, -0.245221, -0.193398, -0.151400, 0.241403",\ + "-0.449366, -0.404628, -0.350424, -0.308425, 0.081996",\ + "-0.660870, -0.594763, -0.536828, -0.494793, -0.185073"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[41]_hldr*/ + +} /* end of pin tl_i[41] */ + +pin("tl_i[40]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.021765 ; + + /* Other user defined attributes. */ + original_pin : tl_i[40]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.554589, 5.508434, 5.478217, 5.466860, 5.480467",\ + "5.642064, 5.595909, 5.565692, 5.554335, 5.567942",\ + "5.729364, 5.683209, 5.652992, 5.641635, 5.655242",\ + "5.918046, 5.871891, 5.841674, 5.830317, 5.843924",\ + "6.322921, 6.276766, 6.246549, 6.235191, 6.248799"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.549117, 5.502962, 5.472744, 5.461387, 5.474995",\ + "5.638085, 5.591930, 5.561713, 5.550356, 5.563963",\ + "5.753121, 5.706966, 5.676749, 5.665391, 5.678999",\ + "5.991310, 5.945155, 5.914938, 5.903581, 5.917188",\ + "6.427492, 6.381337, 6.351120, 6.339763, 6.353370"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[40]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.103114, -0.028963, 0.033559, 0.078022, 0.304626",\ + "-0.178370, -0.104212, -0.041630, 0.002858, 0.229475",\ + "-0.246264, -0.172106, -0.109525, -0.065037, 0.161580",\ + "-0.355098, -0.280940, -0.218359, -0.173870, 0.052747",\ + "-0.519769, -0.445611, -0.383030, -0.338542, -0.111925"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.112706, -0.065963, -0.008166, 0.033833, 0.418070",\ + "-0.200783, -0.156045, -0.102190, -0.060192, 0.330579",\ + "-0.289959, -0.245221, -0.193398, -0.151400, 0.241403",\ + "-0.449366, -0.404628, -0.350424, -0.308425, 0.081996",\ + "-0.716436, -0.659249, -0.601254, -0.559203, -0.185073"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[40]_hldr*/ + +} /* end of pin tl_i[40] */ + +pin("tl_i[39]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.017624 ; + + /* Other user defined attributes. */ + original_pin : tl_i[39]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "4.869242, 4.823087, 4.792870, 4.781513, 4.795120",\ + "4.959149, 4.912994, 4.882777, 4.871420, 4.885027",\ + "5.051662, 5.005507, 4.975290, 4.963933, 4.977540",\ + "5.217504, 5.171349, 5.141131, 5.129774, 5.143382",\ + "5.606756, 5.560601, 5.530384, 5.519027, 5.532634"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "4.880238, 4.834083, 4.803865, 4.792508, 4.806116",\ + "4.970903, 4.924748, 4.894531, 4.883174, 4.896781",\ + "5.089937, 5.043782, 5.013565, 5.002208, 5.015815",\ + "5.321764, 5.275609, 5.245392, 5.234035, 5.247642",\ + "5.733193, 5.687038, 5.656821, 5.645464, 5.659071"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[39]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.103114, -0.028963, 0.033559, 0.078022, 0.304626",\ + "-0.178370, -0.104212, -0.041630, 0.002858, 0.229475",\ + "-0.246264, -0.172106, -0.109525, -0.065037, 0.161580",\ + "-0.355098, -0.280940, -0.218359, -0.173870, 0.052747",\ + "-0.519769, -0.445611, -0.383030, -0.338542, -0.111925"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.112706, -0.065963, -0.008166, 0.033833, 0.418070",\ + "-0.200783, -0.156045, -0.102190, -0.060192, 0.330579",\ + "-0.289959, -0.245221, -0.193398, -0.151400, 0.241403",\ + "-0.449366, -0.404628, -0.350424, -0.308425, 0.081996",\ + "-0.660870, -0.594763, -0.536828, -0.494793, -0.185073"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[39]_hldr*/ + +} /* end of pin tl_i[39] */ + +pin("tl_i[38]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.020036 ; + + /* Other user defined attributes. */ + original_pin : tl_i[38]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.623479, 5.577324, 5.547107, 5.535749, 5.549357",\ + "5.708911, 5.662756, 5.632539, 5.621181, 5.634789",\ + "5.786510, 5.740355, 5.710137, 5.698780, 5.712388",\ + "5.952927, 5.906772, 5.876554, 5.865197, 5.878805",\ + "6.305354, 6.259199, 6.228982, 6.217625, 6.231232"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.620534, 5.574379, 5.544162, 5.532805, 5.546412",\ + "5.703200, 5.657045, 5.626828, 5.615471, 5.629078",\ + "5.815276, 5.769121, 5.738904, 5.727547, 5.741154",\ + "6.045676, 5.999521, 5.969304, 5.957947, 5.971554",\ + "6.448150, 6.401995, 6.371778, 6.360420, 6.374028"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[38]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.103114, -0.028963, 0.033559, 0.078022, 0.304626",\ + "-0.178370, -0.104212, -0.041630, 0.002858, 0.229475",\ + "-0.246264, -0.172106, -0.109525, -0.065037, 0.161580",\ + "-0.355098, -0.280940, -0.218359, -0.173870, 0.052747",\ + "-0.519769, -0.445611, -0.383030, -0.338542, -0.111925"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.112706, -0.065963, -0.008166, 0.033833, 0.418070",\ + "-0.200783, -0.156045, -0.102190, -0.060192, 0.330579",\ + "-0.289959, -0.245221, -0.193398, -0.151400, 0.241403",\ + "-0.449366, -0.404628, -0.350424, -0.308425, 0.081996",\ + "-0.660870, -0.594763, -0.536828, -0.494793, -0.185073"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[38]_hldr*/ + +} /* end of pin tl_i[38] */ + +pin("tl_i[37]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.020927 ; + + /* Other user defined attributes. */ + original_pin : tl_i[37]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.583619, 5.537464, 5.507247, 5.495890, 5.509497",\ + "5.673532, 5.627377, 5.597160, 5.585803, 5.599410",\ + "5.766046, 5.719891, 5.689674, 5.678317, 5.691924",\ + "5.938797, 5.892642, 5.862425, 5.851068, 5.864676",\ + "6.323754, 6.277599, 6.247382, 6.236025, 6.249632"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.594629, 5.548474, 5.518257, 5.506900, 5.520507",\ + "5.685287, 5.639132, 5.608915, 5.597558, 5.611166",\ + "5.804349, 5.758194, 5.727977, 5.716619, 5.730227",\ + "6.036157, 5.990002, 5.959785, 5.948428, 5.962035",\ + "6.447590, 6.401435, 6.371218, 6.359861, 6.373468"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[37]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.103114, -0.028963, 0.033559, 0.078022, 0.304626",\ + "-0.178370, -0.104212, -0.041630, 0.002858, 0.229475",\ + "-0.246264, -0.172106, -0.109525, -0.065037, 0.161580",\ + "-0.355098, -0.280940, -0.218359, -0.173870, 0.052747",\ + "-0.519769, -0.445611, -0.383030, -0.338542, -0.111925"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.112706, -0.065963, -0.008166, 0.033833, 0.418070",\ + "-0.200783, -0.156045, -0.102190, -0.060192, 0.330579",\ + "-0.289959, -0.245221, -0.193398, -0.151400, 0.241403",\ + "-0.449366, -0.404628, -0.350424, -0.308425, 0.081996",\ + "-0.660870, -0.594763, -0.536828, -0.494793, -0.185073"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[37]_hldr*/ + +} /* end of pin tl_i[37] */ + +pin("tl_i[36]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.022013 ; + + /* Other user defined attributes. */ + original_pin : tl_i[36]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.660564, 5.614409, 5.584192, 5.572835, 5.586442",\ + "5.744962, 5.698807, 5.668590, 5.657232, 5.670840",\ + "5.825815, 5.779660, 5.749443, 5.738086, 5.751693",\ + "5.968822, 5.922667, 5.892449, 5.881092, 5.894700",\ + "6.227637, 6.181482, 6.151265, 6.139908, 6.153515"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.645984, 5.599829, 5.569612, 5.558254, 5.571862",\ + "5.727538, 5.681383, 5.651165, 5.639808, 5.653416",\ + "5.833738, 5.787583, 5.757366, 5.746009, 5.759616",\ + "6.023547, 5.977392, 5.947175, 5.935818, 5.949425",\ + "6.386638, 6.340483, 6.310266, 6.298908, 6.312516"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[36]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.103114, -0.028963, 0.033559, 0.078022, 0.304626",\ + "-0.178370, -0.104212, -0.041630, 0.002858, 0.229475",\ + "-0.246264, -0.172106, -0.109525, -0.065037, 0.161580",\ + "-0.355098, -0.280940, -0.218359, -0.173870, 0.052747",\ + "-0.519769, -0.445611, -0.383030, -0.338542, -0.111925"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.112706, -0.065963, -0.008166, 0.033833, 0.418070",\ + "-0.200783, -0.156045, -0.102190, -0.060192, 0.330579",\ + "-0.289959, -0.245221, -0.193398, -0.151400, 0.241403",\ + "-0.449366, -0.404628, -0.350424, -0.308425, 0.081996",\ + "-0.660870, -0.594763, -0.536828, -0.494793, -0.185073"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[36]_hldr*/ + +} /* end of pin tl_i[36] */ + +pin("tl_i[35]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.023123 ; + + /* Other user defined attributes. */ + original_pin : tl_i[35]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.051503, 5.005348, 4.975131, 4.963773, 4.977381",\ + "5.138166, 5.092011, 5.061794, 5.050437, 5.064044",\ + "5.251214, 5.205059, 5.174842, 5.163485, 5.177092",\ + "5.450928, 5.404773, 5.374556, 5.363198, 5.376806",\ + "5.780051, 5.733896, 5.703679, 5.692322, 5.705929"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.051780, 5.005625, 4.975408, 4.964050, 4.977658",\ + "5.133488, 5.087333, 5.057116, 5.045758, 5.059366",\ + "5.260558, 5.214403, 5.184186, 5.172829, 5.186436",\ + "5.487176, 5.441021, 5.410804, 5.399446, 5.413054",\ + "5.889712, 5.843557, 5.813340, 5.801982, 5.815590"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[35]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.126806, -0.060002, 0.003106, 0.047821, 0.287989",\ + "-0.211450, -0.142185, -0.078960, -0.034194, 0.203312",\ + "-0.299321, -0.228917, -0.165692, -0.120927, 0.115291",\ + "-0.454448, -0.386390, -0.323164, -0.278399, -0.040427",\ + "-0.633444, -0.567337, -0.509403, -0.467367, -0.247237"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.117131, -0.065963, -0.008166, 0.033833, 0.413435",\ + "-0.206406, -0.159987, -0.102190, -0.060192, 0.324160",\ + "-0.303102, -0.251195, -0.193398, -0.151400, 0.227464",\ + "-0.474232, -0.408221, -0.350424, -0.308425, 0.053358",\ + "-0.660870, -0.594763, -0.536828, -0.494793, -0.246898"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[35]_hldr*/ + +} /* end of pin tl_i[35] */ + +pin("tl_i[34]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.023475 ; + + /* Other user defined attributes. */ + original_pin : tl_i[34]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.659205, 5.613050, 5.582833, 5.571476, 5.585083",\ + "5.746680, 5.700525, 5.670308, 5.658950, 5.672558",\ + "5.833981, 5.787826, 5.757608, 5.746251, 5.759859",\ + "6.007267, 5.961112, 5.930894, 5.919537, 5.933145",\ + "6.412266, 6.366111, 6.335894, 6.324536, 6.338144"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.653732, 5.607577, 5.577360, 5.566003, 5.579610",\ + "5.742702, 5.696547, 5.666329, 5.654972, 5.668580",\ + "5.857737, 5.811582, 5.781364, 5.770007, 5.783615",\ + "6.095998, 6.049843, 6.019626, 6.008269, 6.021876",\ + "6.532254, 6.486099, 6.455882, 6.444524, 6.458132"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[34]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.126806, -0.060002, 0.003106, 0.047821, 0.287989",\ + "-0.211450, -0.142185, -0.078960, -0.034194, 0.203312",\ + "-0.299321, -0.228917, -0.165692, -0.120927, 0.115291",\ + "-0.454448, -0.386390, -0.323164, -0.278399, -0.040427",\ + "-0.633444, -0.567337, -0.509403, -0.467367, -0.247237"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.117131, -0.065963, -0.008166, 0.033833, 0.413435",\ + "-0.206406, -0.159987, -0.102190, -0.060192, 0.324160",\ + "-0.303102, -0.251195, -0.193398, -0.151400, 0.227464",\ + "-0.474232, -0.408221, -0.350424, -0.308425, 0.053358",\ + "-0.660870, -0.594763, -0.536828, -0.494793, -0.246898"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[34]_hldr*/ + +} /* end of pin tl_i[34] */ + +pin("tl_i[33]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.026365 ; + + /* Other user defined attributes. */ + original_pin : tl_i[33]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.415846, 5.369691, 5.339474, 5.328116, 5.341724",\ + "5.492352, 5.446198, 5.415980, 5.404623, 5.418231",\ + "5.597322, 5.551167, 5.520950, 5.509593, 5.523201",\ + "5.785541, 5.739386, 5.709168, 5.697811, 5.711419",\ + "6.094803, 6.048648, 6.018431, 6.007074, 6.020681"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.396865, 5.350710, 5.320493, 5.309135, 5.322743",\ + "5.469503, 5.423348, 5.393131, 5.381774, 5.395381",\ + "5.589046, 5.542892, 5.512674, 5.501317, 5.514925",\ + "5.798637, 5.752482, 5.722265, 5.710908, 5.724515",\ + "6.156535, 6.110380, 6.080163, 6.068806, 6.082413"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[33]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.103109, -0.028958, 0.033565, 0.078027, 0.304632",\ + "-0.177282, -0.103131, -0.040609, 0.003854, 0.230458",\ + "-0.245176, -0.171025, -0.108503, -0.064040, 0.162564",\ + "-0.354010, -0.279859, -0.217337, -0.172874, 0.053730",\ + "-0.518682, -0.444530, -0.382008, -0.337546, -0.110941"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.112706, -0.065963, -0.008166, 0.033833, 0.418070",\ + "-0.200788, -0.156050, -0.102190, -0.060192, 0.330575",\ + "-0.289964, -0.245226, -0.193398, -0.151400, 0.241399",\ + "-0.449371, -0.404633, -0.350424, -0.308425, 0.081992",\ + "-0.653554, -0.594763, -0.536828, -0.494793, -0.185077"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[33]_hldr*/ + +} /* end of pin tl_i[33] */ + +pin("tl_i[32]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.025030 ; + + /* Other user defined attributes. */ + original_pin : tl_i[32]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.608686, 5.562531, 5.532314, 5.520957, 5.534564",\ + "5.696244, 5.650089, 5.619872, 5.608514, 5.622122",\ + "5.806668, 5.760513, 5.730296, 5.718939, 5.732546",\ + "5.996225, 5.950070, 5.919853, 5.908495, 5.922103",\ + "6.308736, 6.262581, 6.232364, 6.221007, 6.234614"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.604916, 5.558761, 5.528543, 5.517186, 5.530794",\ + "5.686645, 5.640490, 5.610272, 5.598915, 5.612523",\ + "5.804552, 5.758397, 5.728179, 5.716822, 5.730430",\ + "6.035892, 5.989738, 5.959520, 5.948163, 5.961771",\ + "6.435390, 6.389235, 6.359018, 6.347661, 6.361268"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[32]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.103109, -0.028958, 0.033565, 0.078027, 0.315276",\ + "-0.177282, -0.103131, -0.040609, 0.003854, 0.236790",\ + "-0.245176, -0.171025, -0.108503, -0.064040, 0.162564",\ + "-0.354010, -0.279859, -0.217337, -0.172874, 0.053730",\ + "-0.518682, -0.444530, -0.382008, -0.337546, -0.110941"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.112706, -0.048572, 0.008708, 0.050568, 0.418070",\ + "-0.200788, -0.135648, -0.078368, -0.036508, 0.330575",\ + "-0.289964, -0.226296, -0.169017, -0.127157, 0.241399",\ + "-0.449371, -0.387089, -0.329810, -0.287949, 0.081992",\ + "-0.660870, -0.594763, -0.536828, -0.494793, -0.185077"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[32]_hldr*/ + +} /* end of pin tl_i[32] */ + +pin("tl_i[31]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.025825 ; + + /* Other user defined attributes. */ + original_pin : tl_i[31]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.156651, 5.110496, 5.080278, 5.068921, 5.082529",\ + "5.240004, 5.193849, 5.163631, 5.152274, 5.165882",\ + "5.328885, 5.282730, 5.252513, 5.241156, 5.254763",\ + "5.512913, 5.466758, 5.436541, 5.425183, 5.438791",\ + "5.849318, 5.803163, 5.772945, 5.761588, 5.775196"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.160699, 5.114544, 5.084327, 5.072970, 5.086577",\ + "5.238642, 5.192487, 5.162270, 5.150913, 5.164520",\ + "5.344724, 5.298569, 5.268352, 5.256994, 5.270602",\ + "5.598361, 5.552207, 5.521989, 5.510632, 5.524240",\ + "6.070027, 6.023872, 5.993655, 5.982297, 5.995905"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[31]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.103114, -0.028963, 0.033559, 0.078022, 0.315276",\ + "-0.178370, -0.104212, -0.041630, 0.002858, 0.236790",\ + "-0.246264, -0.172106, -0.109525, -0.065037, 0.161580",\ + "-0.355098, -0.280940, -0.218359, -0.173870, 0.052747",\ + "-0.519769, -0.445611, -0.383030, -0.338542, -0.111925"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.112706, -0.048572, 0.008708, 0.050568, 0.418070",\ + "-0.200783, -0.135648, -0.078368, -0.036508, 0.330579",\ + "-0.289959, -0.226296, -0.169017, -0.127157, 0.241403",\ + "-0.449366, -0.387089, -0.329810, -0.287949, 0.081996",\ + "-0.660870, -0.594763, -0.536828, -0.494793, -0.185073"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[31]_hldr*/ + +} /* end of pin tl_i[31] */ + +pin("tl_i[30]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.025050 ; + + /* Other user defined attributes. */ + original_pin : tl_i[30]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.361538, 5.315383, 5.285166, 5.273808, 5.287416",\ + "5.445924, 5.399769, 5.369552, 5.358194, 5.371802",\ + "5.526791, 5.480636, 5.450418, 5.439061, 5.452669",\ + "5.668298, 5.622143, 5.591926, 5.580568, 5.594176",\ + "5.912872, 5.866717, 5.836500, 5.825143, 5.838750"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.346942, 5.300787, 5.270570, 5.259213, 5.272820",\ + "5.428506, 5.382351, 5.352134, 5.340776, 5.354384",\ + "5.534707, 5.488552, 5.458334, 5.446977, 5.460585",\ + "5.723008, 5.676853, 5.646636, 5.635279, 5.648886",\ + "6.057394, 6.011239, 5.981022, 5.969665, 5.983272"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[30]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.103114, -0.028963, 0.033559, 0.078022, 0.315276",\ + "-0.178370, -0.104212, -0.041630, 0.002858, 0.236790",\ + "-0.246264, -0.172106, -0.109525, -0.065037, 0.161580",\ + "-0.355098, -0.280940, -0.218359, -0.173870, 0.052747",\ + "-0.519769, -0.445611, -0.383030, -0.338542, -0.111925"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.112706, -0.048572, 0.008708, 0.050568, 0.418070",\ + "-0.200783, -0.135648, -0.078368, -0.036508, 0.330579",\ + "-0.289959, -0.226296, -0.169017, -0.127157, 0.241403",\ + "-0.449366, -0.387089, -0.329810, -0.287949, 0.081996",\ + "-0.660870, -0.594763, -0.536828, -0.494793, -0.185073"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[30]_hldr*/ + +} /* end of pin tl_i[30] */ + +pin("tl_i[29]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.026087 ; + + /* Other user defined attributes. */ + original_pin : tl_i[29]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.397203, 5.351048, 5.320831, 5.309474, 5.323081",\ + "5.485135, 5.438980, 5.408763, 5.397406, 5.411013",\ + "5.586405, 5.540250, 5.510033, 5.498675, 5.512283",\ + "5.772069, 5.725914, 5.695697, 5.684340, 5.697948",\ + "6.070103, 6.023948, 5.993731, 5.982373, 5.995981"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.401423, 5.355268, 5.325051, 5.313694, 5.327301",\ + "5.484715, 5.438560, 5.408342, 5.396985, 5.410593",\ + "5.608980, 5.562825, 5.532608, 5.521251, 5.534858",\ + "5.841204, 5.795049, 5.764832, 5.753474, 5.767082",\ + "6.247406, 6.201252, 6.171034, 6.159677, 6.173285"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[29]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.103114, -0.028963, 0.033559, 0.078022, 0.315276",\ + "-0.178370, -0.104212, -0.041630, 0.002858, 0.236790",\ + "-0.246264, -0.172106, -0.109525, -0.065037, 0.161580",\ + "-0.355098, -0.280940, -0.218359, -0.173870, 0.052747",\ + "-0.519769, -0.445611, -0.383030, -0.338542, -0.111925"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.112706, -0.048572, 0.008708, 0.050568, 0.418070",\ + "-0.200783, -0.135648, -0.078368, -0.036508, 0.330579",\ + "-0.289959, -0.226296, -0.169017, -0.127157, 0.241403",\ + "-0.449366, -0.387089, -0.329810, -0.287949, 0.081996",\ + "-0.660870, -0.594763, -0.536828, -0.494793, -0.185073"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[29]_hldr*/ + +} /* end of pin tl_i[29] */ + +pin("tl_i[28]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.025799 ; + + /* Other user defined attributes. */ + original_pin : tl_i[28]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.618461, 5.572306, 5.542089, 5.530732, 5.544339",\ + "5.717470, 5.671315, 5.641098, 5.629741, 5.643348",\ + "5.855001, 5.808846, 5.778629, 5.767272, 5.780879",\ + "6.129478, 6.083323, 6.053106, 6.041749, 6.055356",\ + "6.630586, 6.584431, 6.554214, 6.542856, 6.556464"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.605847, 5.559692, 5.529475, 5.518118, 5.531725",\ + "5.703081, 5.656926, 5.626709, 5.615352, 5.628959",\ + "5.850164, 5.804009, 5.773792, 5.762435, 5.776042",\ + "6.157188, 6.111033, 6.080816, 6.069459, 6.083066",\ + "6.726156, 6.680001, 6.649784, 6.638427, 6.652034"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[28]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.103114, -0.028963, 0.033559, 0.078022, 0.315276",\ + "-0.178370, -0.104212, -0.041630, 0.002858, 0.236790",\ + "-0.246264, -0.172106, -0.109525, -0.065037, 0.161580",\ + "-0.355098, -0.280940, -0.218359, -0.173870, 0.052747",\ + "-0.515343, -0.445611, -0.383030, -0.338542, -0.111925"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.112706, -0.048572, 0.008708, 0.050568, 0.418070",\ + "-0.200783, -0.135648, -0.078368, -0.036508, 0.330579",\ + "-0.289959, -0.226296, -0.169017, -0.127157, 0.241403",\ + "-0.449366, -0.384569, -0.318431, -0.272351, 0.081996",\ + "-0.607923, -0.533171, -0.467033, -0.420953, -0.185073"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[28]_hldr*/ + +} /* end of pin tl_i[28] */ + +pin("tl_i[27]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.025120 ; + + /* Other user defined attributes. */ + original_pin : tl_i[27]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.422370, 5.376215, 5.345998, 5.334641, 5.348248",\ + "5.509055, 5.462900, 5.432683, 5.421326, 5.434933",\ + "5.606899, 5.560744, 5.530527, 5.519170, 5.532777",\ + "5.815886, 5.769731, 5.739513, 5.728156, 5.741764",\ + "6.259951, 6.213796, 6.183579, 6.172222, 6.185829"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.415630, 5.369475, 5.339258, 5.327900, 5.341508",\ + "5.508262, 5.462107, 5.431890, 5.420532, 5.434140",\ + "5.634383, 5.588228, 5.558011, 5.546654, 5.560261",\ + "5.884534, 5.838379, 5.808162, 5.796804, 5.810412",\ + "6.321214, 6.275059, 6.244842, 6.233485, 6.247092"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[27]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.103114, -0.028963, 0.033559, 0.078022, 0.315276",\ + "-0.178370, -0.104212, -0.041630, 0.002858, 0.236790",\ + "-0.246264, -0.172106, -0.109525, -0.065037, 0.161580",\ + "-0.355098, -0.280940, -0.218359, -0.173870, 0.052747",\ + "-0.519769, -0.445611, -0.383030, -0.338542, -0.111925"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.112706, -0.048572, 0.008708, 0.050568, 0.418070",\ + "-0.200783, -0.135648, -0.078368, -0.036508, 0.330579",\ + "-0.289959, -0.226296, -0.169017, -0.127157, 0.241403",\ + "-0.449366, -0.387089, -0.329810, -0.287949, 0.081996",\ + "-0.660870, -0.594763, -0.536828, -0.494793, -0.185073"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[27]_hldr*/ + +} /* end of pin tl_i[27] */ + +pin("tl_i[26]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.025620 ; + + /* Other user defined attributes. */ + original_pin : tl_i[26]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.634807, 5.588652, 5.558434, 5.547077, 5.560685",\ + "5.726879, 5.680724, 5.650507, 5.639150, 5.652757",\ + "5.836696, 5.790541, 5.760324, 5.748966, 5.762574",\ + "6.041320, 5.995165, 5.964948, 5.953590, 5.967198",\ + "6.417303, 6.371148, 6.340931, 6.329574, 6.343181"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.627578, 5.581423, 5.551206, 5.539848, 5.553456",\ + "5.725660, 5.679505, 5.649288, 5.637930, 5.651538",\ + "5.857279, 5.811124, 5.780907, 5.769550, 5.783157",\ + "6.101712, 6.055557, 6.025340, 6.013983, 6.027590",\ + "6.528873, 6.482718, 6.452501, 6.441144, 6.454751"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[26]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.103114, -0.028963, 0.033559, 0.078022, 0.315276",\ + "-0.178370, -0.104212, -0.041630, 0.002858, 0.236790",\ + "-0.246264, -0.172106, -0.109525, -0.065037, 0.161580",\ + "-0.355098, -0.280940, -0.218359, -0.173870, 0.052747",\ + "-0.519769, -0.445611, -0.383030, -0.338542, -0.111925"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.112706, -0.048572, 0.008708, 0.050568, 0.418070",\ + "-0.200783, -0.135648, -0.078368, -0.036508, 0.330579",\ + "-0.289959, -0.226296, -0.169017, -0.127157, 0.241403",\ + "-0.449366, -0.387089, -0.329810, -0.287949, 0.081996",\ + "-0.660870, -0.594763, -0.536828, -0.494793, -0.185073"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[26]_hldr*/ + +} /* end of pin tl_i[26] */ + +pin("tl_i[25]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.027861 ; + + /* Other user defined attributes. */ + original_pin : tl_i[25]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.587914, 5.541759, 5.511542, 5.500185, 5.513792",\ + "5.685092, 5.638937, 5.608720, 5.597363, 5.610970",\ + "5.791002, 5.744847, 5.714630, 5.703273, 5.716880",\ + "5.984866, 5.938711, 5.908494, 5.897137, 5.910744",\ + "6.350015, 6.303860, 6.273643, 6.262286, 6.275893"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.597159, 5.551004, 5.520787, 5.509430, 5.523037",\ + "5.695459, 5.649304, 5.619087, 5.607729, 5.621337",\ + "5.810205, 5.764050, 5.733832, 5.722475, 5.736083",\ + "6.008989, 5.962834, 5.932617, 5.921260, 5.934867",\ + "6.374745, 6.328590, 6.298373, 6.287016, 6.300623"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[25]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.103114, -0.028963, 0.033559, 0.078022, 0.315276",\ + "-0.178370, -0.104212, -0.041630, 0.002858, 0.236790",\ + "-0.246264, -0.172106, -0.109525, -0.065037, 0.161580",\ + "-0.355098, -0.280940, -0.218359, -0.173870, 0.052747",\ + "-0.519769, -0.445611, -0.383030, -0.338542, -0.111925"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.112706, -0.048572, 0.008708, 0.050568, 0.418070",\ + "-0.200783, -0.135648, -0.078368, -0.036508, 0.330579",\ + "-0.289959, -0.226296, -0.169017, -0.127157, 0.241403",\ + "-0.449366, -0.387089, -0.329810, -0.287949, 0.081996",\ + "-0.660870, -0.594763, -0.536828, -0.494793, -0.185073"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[25]_hldr*/ + +} /* end of pin tl_i[25] */ + +pin("tl_i[24]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.026383 ; + + /* Other user defined attributes. */ + original_pin : tl_i[24]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.563736, 5.517581, 5.487364, 5.476007, 5.489614",\ + "5.661705, 5.615550, 5.585332, 5.573975, 5.587583",\ + "5.767614, 5.721459, 5.691242, 5.679884, 5.693492",\ + "5.957180, 5.911025, 5.880808, 5.869451, 5.883058",\ + "6.288558, 6.242403, 6.212186, 6.200829, 6.214436"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.590299, 5.544144, 5.513927, 5.502569, 5.516177",\ + "5.689440, 5.643285, 5.613068, 5.601710, 5.615318",\ + "5.803774, 5.757619, 5.727402, 5.716045, 5.729652",\ + "5.994250, 5.948095, 5.917878, 5.906520, 5.920128",\ + "6.312450, 6.266295, 6.236078, 6.224721, 6.238328"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[24]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.103114, -0.028963, 0.033559, 0.078022, 0.315276",\ + "-0.178370, -0.104212, -0.041630, 0.002858, 0.236790",\ + "-0.246264, -0.172106, -0.109525, -0.065037, 0.161580",\ + "-0.355098, -0.280940, -0.218359, -0.173870, 0.052747",\ + "-0.519769, -0.445611, -0.383030, -0.338542, -0.111925"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.112706, -0.048572, 0.008708, 0.050568, 0.418070",\ + "-0.200783, -0.135648, -0.078368, -0.036508, 0.330579",\ + "-0.289959, -0.226296, -0.169017, -0.127157, 0.241403",\ + "-0.449366, -0.387089, -0.329810, -0.287949, 0.081996",\ + "-0.660870, -0.594763, -0.536828, -0.494793, -0.185073"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[24]_hldr*/ + +} /* end of pin tl_i[24] */ + +pin("tl_i[23]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : tl_i[23]; +} /* end of pin tl_i[23] */ + +pin("tl_i[22]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : tl_i[22]; +} /* end of pin tl_i[22] */ + +pin("tl_i[21]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : tl_i[21]; +} /* end of pin tl_i[21] */ + +pin("tl_i[20]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : tl_i[20]; +} /* end of pin tl_i[20] */ + +pin("tl_i[19]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : tl_i[19]; +} /* end of pin tl_i[19] */ + +pin("tl_i[18]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.005233 ; + + /* Other user defined attributes. */ + original_pin : tl_i[18]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.846815, 5.800660, 5.770443, 5.759086, 5.772694",\ + "5.932193, 5.886038, 5.855821, 5.844464, 5.858071",\ + "6.009590, 5.963435, 5.933218, 5.921861, 5.935469",\ + "6.178617, 6.132463, 6.102246, 6.090889, 6.104496",\ + "6.537492, 6.491337, 6.461120, 6.449763, 6.463370"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.843783, 5.797628, 5.767412, 5.756054, 5.769662",\ + "5.926365, 5.880210, 5.849993, 5.838636, 5.852243",\ + "6.038355, 5.992200, 5.961983, 5.950626, 5.964233",\ + "6.269215, 6.223060, 6.192843, 6.181486, 6.195093",\ + "6.674184, 6.628029, 6.597812, 6.586455, 6.600062"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[18]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.329740, -0.287323, -0.252837, -0.213389, 0.092961",\ + "-0.415095, -0.372677, -0.338191, -0.298743, 0.007607",\ + "-0.499351, -0.456933, -0.422448, -0.383000, -0.076649",\ + "-0.641023, -0.598605, -0.564119, -0.524671, -0.218321",\ + "-0.860645, -0.818228, -0.783742, -0.744294, -0.437944"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.392665, -0.350247, -0.315761, -0.276314, 0.030037",\ + "-0.480853, -0.438436, -0.403950, -0.364502, -0.058152",\ + "-0.581004, -0.538587, -0.504101, -0.464653, -0.158303",\ + "-0.765285, -0.722867, -0.665898, -0.623927, -0.342583",\ + "-1.010030, -0.967612, -0.918979, -0.877008, -0.587328"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[18]_hldr*/ + +} /* end of pin tl_i[18] */ + +pin("tl_i[17]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.004306 ; + + /* Other user defined attributes. */ + original_pin : tl_i[17]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "6.132060, 6.085905, 6.055688, 6.044331, 6.057939",\ + "6.217465, 6.171310, 6.141094, 6.129736, 6.143344",\ + "6.294953, 6.248798, 6.218582, 6.207224, 6.220832",\ + "6.439157, 6.393003, 6.362786, 6.351429, 6.365036",\ + "6.796788, 6.750633, 6.720417, 6.709059, 6.722667"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "6.129071, 6.082916, 6.052700, 6.041342, 6.054950",\ + "6.211690, 6.165535, 6.135318, 6.123961, 6.137568",\ + "6.323722, 6.277567, 6.247350, 6.235993, 6.249600",\ + "6.554055, 6.507900, 6.477684, 6.466326, 6.479934",\ + "6.957980, 6.911825, 6.881608, 6.870251, 6.883859"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[17]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.329387, -0.286969, -0.252483, -0.213035, 0.093315",\ + "-0.413395, -0.370977, -0.336491, -0.297044, 0.009307",\ + "-0.496847, -0.454429, -0.419944, -0.380496, -0.074145",\ + "-0.636423, -0.594005, -0.559520, -0.520072, -0.213721",\ + "-0.849170, -0.806753, -0.772267, -0.732819, -0.426469"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.397874, -0.355456, -0.320970, -0.281523, 0.024828",\ + "-0.486065, -0.443648, -0.409162, -0.369714, -0.063364",\ + "-0.585801, -0.543384, -0.506390, -0.464420, -0.163100",\ + "-0.770163, -0.720512, -0.662817, -0.620846, -0.347461",\ + "-1.005635, -0.963218, -0.913955, -0.871984, -0.582934"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[17]_hldr*/ + +} /* end of pin tl_i[17] */ + +pin("tl_i[16]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.003506 ; + + /* Other user defined attributes. */ + original_pin : tl_i[16]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "6.061040, 6.014885, 5.984668, 5.973311, 5.986918",\ + "6.154351, 6.108196, 6.077980, 6.066622, 6.080230",\ + "6.247583, 6.201428, 6.171212, 6.159854, 6.173462",\ + "6.410316, 6.364161, 6.333944, 6.322587, 6.336194",\ + "6.686312, 6.640157, 6.609940, 6.598583, 6.612190"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "6.018520, 5.972365, 5.942149, 5.930791, 5.944399",\ + "6.115014, 6.068859, 6.038642, 6.027285, 6.040893",\ + "6.214722, 6.168567, 6.138350, 6.126993, 6.140600",\ + "6.391147, 6.344992, 6.314775, 6.303418, 6.317025",\ + "6.683747, 6.637592, 6.607376, 6.596018, 6.609626"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[16]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.394478, -0.352061, -0.317575, -0.278127, 0.028223",\ + "-0.483595, -0.441177, -0.404014, -0.362043, -0.060893",\ + "-0.569978, -0.527561, -0.480614, -0.438644, -0.147277",\ + "-0.718308, -0.666396, -0.608701, -0.566730, -0.295606",\ + "-0.932373, -0.866433, -0.808738, -0.766767, -0.544592"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.386365, -0.343947, -0.309462, -0.270014, 0.036337",\ + "-0.468621, -0.426203, -0.391718, -0.352270, -0.045919",\ + "-0.564853, -0.522435, -0.487950, -0.448502, -0.142151",\ + "-0.726358, -0.683941, -0.649455, -0.610007, -0.303657",\ + "-0.988854, -0.946436, -0.911950, -0.872503, -0.566152"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[16]_hldr*/ + +} /* end of pin tl_i[16] */ + +pin("tl_i[15]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.003647 ; + + /* Other user defined attributes. */ + original_pin : tl_i[15]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.804135, 5.757980, 5.727764, 5.716406, 5.730014",\ + "5.902175, 5.856020, 5.825803, 5.814446, 5.828053",\ + "6.008589, 5.962434, 5.932217, 5.920860, 5.934467",\ + "6.199651, 6.153496, 6.123279, 6.111922, 6.125529",\ + "6.533928, 6.487773, 6.457556, 6.446199, 6.459806"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.811823, 5.765668, 5.735451, 5.724094, 5.737701",\ + "5.911395, 5.865240, 5.835023, 5.823666, 5.837274",\ + "6.026561, 5.980406, 5.950189, 5.938832, 5.952439",\ + "6.220825, 6.174670, 6.144454, 6.133096, 6.146704",\ + "6.548571, 6.502416, 6.472199, 6.460842, 6.474449"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[15]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.333549, -0.291131, -0.256645, -0.217198, 0.089153",\ + "-0.416355, -0.373937, -0.339451, -0.300003, 0.006347",\ + "-0.498092, -0.455675, -0.421189, -0.381741, -0.075391",\ + "-0.641500, -0.599082, -0.564596, -0.525149, -0.218798",\ + "-0.881493, -0.839075, -0.804590, -0.765142, -0.458791"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.367074, -0.324657, -0.290171, -0.250723, 0.055627",\ + "-0.454947, -0.412529, -0.378044, -0.338596, -0.032245",\ + "-0.540971, -0.498554, -0.464068, -0.424620, -0.118270",\ + "-0.691009, -0.648592, -0.614106, -0.574658, -0.268308",\ + "-0.937715, -0.895297, -0.860812, -0.821364, -0.515013"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[15]_hldr*/ + +} /* end of pin tl_i[15] */ + +pin("tl_i[14]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000507 ; + + /* Other user defined attributes. */ + original_pin : tl_i[14]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.880361, 5.834206, 5.803989, 5.792632, 5.806239",\ + "5.967889, 5.921734, 5.891517, 5.880160, 5.893767",\ + "6.055178, 6.009023, 5.978806, 5.967449, 5.981056",\ + "6.230941, 6.184786, 6.154569, 6.143212, 6.156819",\ + "6.640085, 6.593930, 6.563713, 6.552356, 6.565963"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.875138, 5.828983, 5.798766, 5.787409, 5.801016",\ + "5.963992, 5.917837, 5.887620, 5.876263, 5.889871",\ + "6.079109, 6.032954, 6.002738, 5.991380, 6.004988",\ + "6.317663, 6.271508, 6.241292, 6.229934, 6.243542",\ + "6.755099, 6.708944, 6.678727, 6.667370, 6.680977"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[14]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.456322, -1.413945, -1.379366, -1.341730, -1.057874",\ + "-1.546534, -1.504156, -1.469577, -1.431942, -1.148085",\ + "-1.659324, -1.616947, -1.582367, -1.544732, -1.260875",\ + "-1.878867, -1.836490, -1.801910, -1.764275, -1.480418",\ + "-2.185190, -2.142812, -2.108233, -2.070598, -1.786741"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.489696, -1.447319, -1.412740, -1.375104, -1.091248",\ + "-1.579588, -1.537211, -1.502631, -1.464996, -1.181139",\ + "-1.675047, -1.632670, -1.598091, -1.560455, -1.276599",\ + "-1.845432, -1.803055, -1.768476, -1.730840, -1.446984",\ + "-2.145069, -2.102692, -2.068113, -2.030477, -1.746621"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[14]_hldr*/ + +} /* end of pin tl_i[14] */ + +pin("tl_i[13]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000507 ; + + /* Other user defined attributes. */ + original_pin : tl_i[13]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "6.164994, 6.118839, 6.088623, 6.077265, 6.090873",\ + "6.252498, 6.206343, 6.176126, 6.164769, 6.178376",\ + "6.339791, 6.293636, 6.263420, 6.252062, 6.265670",\ + "6.496986, 6.450831, 6.420614, 6.409257, 6.422864",\ + "6.898607, 6.852452, 6.822236, 6.810878, 6.824486"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "6.159660, 6.113505, 6.083289, 6.071931, 6.085539",\ + "6.248568, 6.202413, 6.172196, 6.160839, 6.174446",\ + "6.363653, 6.317498, 6.287282, 6.275924, 6.289532",\ + "6.601918, 6.555763, 6.525547, 6.514189, 6.527797",\ + "7.038295, 6.992140, 6.961923, 6.950566, 6.964173"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[13]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.676593, -1.628499, -1.570612, -1.528590, -1.278144",\ + "-1.766810, -1.718717, -1.660830, -1.618807, -1.368362",\ + "-1.879585, -1.831491, -1.773605, -1.731582, -1.481137",\ + "-2.098712, -2.050618, -1.992732, -1.950709, -1.700264",\ + "-2.408059, -2.359965, -2.302078, -2.260055, -2.009610"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.710053, -1.661959, -1.604072, -1.562050, -1.311604",\ + "-1.799952, -1.751858, -1.693972, -1.651949, -1.401504",\ + "-1.895418, -1.847324, -1.789437, -1.747415, -1.496969",\ + "-2.065788, -2.017694, -1.959808, -1.917785, -1.667340",\ + "-2.365375, -2.317281, -2.259394, -2.217371, -1.966926"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[13]_hldr*/ + +} /* end of pin tl_i[13] */ + +pin("tl_i[12]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001105 ; + + /* Other user defined attributes. */ + original_pin : tl_i[12]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.508289, 5.462134, 5.431918, 5.420560, 5.434168",\ + "5.592647, 5.546492, 5.516275, 5.504918, 5.518525",\ + "5.673546, 5.627391, 5.597174, 5.585817, 5.599424",\ + "5.815136, 5.768981, 5.738764, 5.727407, 5.741014",\ + "6.052000, 6.005845, 5.975628, 5.964271, 5.977879"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.430960, 5.384805, 5.354588, 5.343231, 5.356838",\ + "5.522353, 5.476198, 5.445981, 5.434624, 5.448231",\ + "5.614760, 5.568605, 5.538389, 5.527031, 5.540639",\ + "5.776403, 5.730248, 5.700032, 5.688674, 5.702282",\ + "6.049640, 6.003485, 5.973268, 5.961911, 5.975518"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[12]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.265898, -1.223521, -1.188942, -1.151306, -0.867450",\ + "-1.350510, -1.308133, -1.273553, -1.235918, -0.952061",\ + "-1.430668, -1.388291, -1.353711, -1.316076, -1.032219",\ + "-1.572586, -1.530209, -1.495630, -1.457994, -1.174138",\ + "-1.810084, -1.767707, -1.733127, -1.695492, -1.411635"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.242763, -1.200386, -1.165807, -1.128171, -0.844315",\ + "-1.334117, -1.291740, -1.257160, -1.219525, -0.935668",\ + "-1.427063, -1.384685, -1.350106, -1.312471, -1.028614",\ + "-1.589313, -1.546936, -1.512356, -1.474721, -1.190864",\ + "-1.862213, -1.819836, -1.785256, -1.747621, -1.463764"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[12]_hldr*/ + +} /* end of pin tl_i[12] */ + +pin("tl_i[11]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000507 ; + + /* Other user defined attributes. */ + original_pin : tl_i[11]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.261997, 5.215842, 5.185626, 5.174268, 5.187876",\ + "5.353421, 5.307266, 5.277050, 5.265692, 5.279300",\ + "5.463365, 5.417210, 5.386993, 5.375636, 5.389243",\ + "5.679752, 5.633597, 5.603381, 5.592023, 5.605631",\ + "6.088896, 6.042741, 6.012525, 6.001167, 6.014775"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.323949, 5.277794, 5.247577, 5.236220, 5.249827",\ + "5.412804, 5.366649, 5.336432, 5.325075, 5.338682",\ + "5.527921, 5.481766, 5.451549, 5.440192, 5.453799",\ + "5.766475, 5.720320, 5.690103, 5.678746, 5.692353",\ + "6.203910, 6.157755, 6.127538, 6.116181, 6.129788"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[11]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.231498, -1.189121, -1.154542, -1.116906, -0.833050",\ + "-1.321710, -1.279333, -1.244753, -1.207118, -0.923261",\ + "-1.434500, -1.392123, -1.357543, -1.319908, -1.036052",\ + "-1.654043, -1.611666, -1.577086, -1.539451, -1.255594",\ + "-2.055035, -2.012658, -1.978078, -1.940443, -1.656586"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.277769, -1.235391, -1.200812, -1.163177, -0.879320",\ + "-1.368203, -1.325825, -1.291246, -1.253611, -0.969754",\ + "-1.482250, -1.439872, -1.405293, -1.367658, -1.083801",\ + "-1.702415, -1.660038, -1.625458, -1.587823, -1.303966",\ + "-2.095423, -2.053046, -2.018466, -1.980831, -1.696974"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[11]_hldr*/ + +} /* end of pin tl_i[11] */ + +pin("tl_i[10]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000507 ; + + /* Other user defined attributes. */ + original_pin : tl_i[10]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.688106, 5.641951, 5.611734, 5.600377, 5.613985",\ + "5.775612, 5.729457, 5.699240, 5.687883, 5.701490",\ + "5.862906, 5.816751, 5.786535, 5.775177, 5.788785",\ + "6.017570, 5.971415, 5.941198, 5.929841, 5.943448",\ + "6.285493, 6.239338, 6.209121, 6.197764, 6.211371"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.621125, 5.574970, 5.544754, 5.533396, 5.547004",\ + "5.711027, 5.664872, 5.634655, 5.623298, 5.636906",\ + "5.806498, 5.760343, 5.730126, 5.718769, 5.732377",\ + "5.976879, 5.930724, 5.900507, 5.889150, 5.902758",\ + "6.276484, 6.230330, 6.200113, 6.188756, 6.202363"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[10]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.488494, -1.446116, -1.411537, -1.373901, -1.090045",\ + "-1.576000, -1.533622, -1.499043, -1.461408, -1.177551",\ + "-1.663294, -1.620917, -1.586338, -1.548702, -1.264846",\ + "-1.817957, -1.775580, -1.741001, -1.703365, -1.419509",\ + "-2.085881, -2.043503, -2.008924, -1.971289, -1.687432"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.387740, -1.345363, -1.310783, -1.273148, -0.989291",\ + "-1.477641, -1.435264, -1.400684, -1.363049, -1.079192",\ + "-1.573112, -1.530735, -1.496156, -1.458520, -1.174664",\ + "-1.743494, -1.701116, -1.666537, -1.628902, -1.345045",\ + "-2.043099, -2.000721, -1.966142, -1.928507, -1.644650"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[10]_hldr*/ + +} /* end of pin tl_i[10] */ + +pin("tl_i[9]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000507 ; + + /* Other user defined attributes. */ + original_pin : tl_i[9]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.299526, 5.253371, 5.223155, 5.211797, 5.225405",\ + "5.387030, 5.340875, 5.310658, 5.299301, 5.312908",\ + "5.474324, 5.428169, 5.397952, 5.386595, 5.400202",\ + "5.628947, 5.582792, 5.552575, 5.541218, 5.554825",\ + "5.896894, 5.850739, 5.820522, 5.809165, 5.822773"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.267633, 5.221478, 5.191262, 5.179904, 5.193512",\ + "5.357825, 5.311670, 5.281454, 5.270096, 5.283704",\ + "5.453746, 5.407591, 5.377375, 5.366017, 5.379625",\ + "5.626006, 5.579851, 5.549634, 5.538277, 5.551885",\ + "5.922129, 5.875974, 5.845757, 5.834400, 5.848007"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[9]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.240064, -1.197687, -1.163107, -1.125472, -0.841615",\ + "-1.327747, -1.285370, -1.250791, -1.213155, -0.929299",\ + "-1.415402, -1.373024, -1.338445, -1.300810, -1.016953",\ + "-1.572242, -1.529865, -1.495286, -1.457650, -1.173794",\ + "-1.840724, -1.798346, -1.763767, -1.726132, -1.442275"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.220831, -1.178454, -1.143874, -1.106239, -0.822382",\ + "-1.310730, -1.268353, -1.233773, -1.196138, -0.912281",\ + "-1.406196, -1.363818, -1.329239, -1.291603, -1.007747",\ + "-1.576566, -1.534189, -1.499609, -1.461974, -1.178117",\ + "-1.876152, -1.833775, -1.799196, -1.761560, -1.477704"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[9]_hldr*/ + +} /* end of pin tl_i[9] */ + +pin("tl_i[8]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000507 ; + + /* Other user defined attributes. */ + original_pin : tl_i[8]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.306569, 5.260414, 5.230197, 5.218840, 5.232448",\ + "5.394075, 5.347920, 5.317704, 5.306346, 5.319954",\ + "5.481370, 5.435215, 5.404998, 5.393641, 5.407248",\ + "5.636033, 5.589878, 5.559661, 5.548304, 5.561912",\ + "5.903956, 5.857801, 5.827585, 5.816227, 5.829835"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.239589, 5.193434, 5.163217, 5.151860, 5.165467",\ + "5.329490, 5.283335, 5.253119, 5.241761, 5.255369",\ + "5.424961, 5.378806, 5.348589, 5.337232, 5.350840",\ + "5.595343, 5.549188, 5.518971, 5.507614, 5.521221",\ + "5.894948, 5.848793, 5.818576, 5.807219, 5.820827"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[8]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.339799, -1.297422, -1.262842, -1.225207, -0.941350",\ + "-1.427305, -1.384928, -1.350348, -1.312713, -1.028856",\ + "-1.514600, -1.472222, -1.437643, -1.400007, -1.116151",\ + "-1.669263, -1.626886, -1.592306, -1.554671, -1.270814",\ + "-1.937186, -1.894809, -1.860229, -1.822594, -1.538737"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.239045, -1.196668, -1.162088, -1.124453, -0.840596",\ + "-1.328946, -1.286569, -1.251990, -1.214354, -0.930498",\ + "-1.424418, -1.382040, -1.347461, -1.309826, -1.025969",\ + "-1.594799, -1.552422, -1.517842, -1.480207, -1.196350",\ + "-1.894404, -1.852027, -1.817448, -1.779812, -1.495956"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[8]_hldr*/ + +} /* end of pin tl_i[8] */ + +pin("tl_i[7]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000507 ; + + /* Other user defined attributes. */ + original_pin : tl_i[7]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.737750, 5.691595, 5.661378, 5.650021, 5.663628",\ + "5.825280, 5.779125, 5.748908, 5.737551, 5.751158",\ + "5.912570, 5.866415, 5.836198, 5.824841, 5.838448",\ + "6.086271, 6.040116, 6.009899, 5.998541, 6.012149",\ + "6.495438, 6.449283, 6.419065, 6.407708, 6.421316"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.732527, 5.686372, 5.656155, 5.644798, 5.658405",\ + "5.821378, 5.775223, 5.745006, 5.733648, 5.747256",\ + "5.936484, 5.890329, 5.860112, 5.848755, 5.862362",\ + "6.175041, 6.128886, 6.098669, 6.087312, 6.100919",\ + "6.612741, 6.566586, 6.536369, 6.525012, 6.538620"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[7]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.210458, -1.168081, -1.133501, -1.095866, -0.812009",\ + "-1.300683, -1.258306, -1.223726, -1.186091, -0.902234",\ + "-1.413495, -1.371118, -1.336539, -1.298903, -1.015047",\ + "-1.594716, -1.552338, -1.517759, -1.480124, -1.196267",\ + "-1.863199, -1.820821, -1.786242, -1.748607, -1.464750"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.243829, -1.201452, -1.166873, -1.129237, -0.845381",\ + "-1.333722, -1.291345, -1.256766, -1.219130, -0.935274",\ + "-1.429188, -1.386811, -1.352232, -1.314596, -1.030740",\ + "-1.599584, -1.557206, -1.522627, -1.484991, -1.201135",\ + "-1.899240, -1.856863, -1.822283, -1.784648, -1.500791"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[7]_hldr*/ + +} /* end of pin tl_i[7] */ + +pin("tl_i[6]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001034 ; + + /* Other user defined attributes. */ + original_pin : tl_i[6]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.368608, 5.322453, 5.292236, 5.280879, 5.294487",\ + "5.454073, 5.407918, 5.377701, 5.366343, 5.379951",\ + "5.531495, 5.485340, 5.455123, 5.443766, 5.457373",\ + "5.675749, 5.629594, 5.599377, 5.588020, 5.601627",\ + "6.027932, 5.981777, 5.951560, 5.940202, 5.953810"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.365854, 5.319699, 5.289482, 5.278125, 5.291732",\ + "5.448556, 5.402401, 5.372184, 5.360826, 5.374434",\ + "5.560353, 5.514198, 5.483981, 5.472623, 5.486231",\ + "5.789183, 5.743028, 5.712811, 5.701454, 5.715061",\ + "6.188337, 6.142182, 6.111965, 6.100607, 6.114215"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[6]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.925690, -0.883313, -0.848733, -0.811098, -0.527241",\ + "-1.010422, -0.968045, -0.933465, -0.895830, -0.611973",\ + "-1.117256, -1.074878, -1.040299, -1.002663, -0.718807",\ + "-1.269870, -1.227492, -1.192913, -1.155277, -0.871421",\ + "-1.497461, -1.455084, -1.420505, -1.382869, -1.099013"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.942127, -0.899750, -0.865171, -0.827535, -0.543679",\ + "-1.032129, -0.989751, -0.955172, -0.917537, -0.633680",\ + "-1.120122, -1.077745, -1.043165, -1.005530, -0.721673",\ + "-1.275255, -1.232878, -1.198298, -1.160663, -0.876806",\ + "-1.540632, -1.498255, -1.463676, -1.426040, -1.142184"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[6]_hldr*/ + +} /* end of pin tl_i[6] */ + +pin("tl_i[5]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000507 ; + + /* Other user defined attributes. */ + original_pin : tl_i[5]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.646876, 5.600721, 5.570504, 5.559147, 5.572754",\ + "5.734406, 5.688251, 5.658034, 5.646677, 5.660285",\ + "5.821696, 5.775541, 5.745324, 5.733967, 5.747574",\ + "5.997414, 5.951259, 5.921041, 5.909684, 5.923292",\ + "6.406565, 6.360410, 6.330193, 6.318835, 6.332443"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "5.641654, 5.595499, 5.565282, 5.553925, 5.567532",\ + "5.730504, 5.684349, 5.654132, 5.642775, 5.656382",\ + "5.845611, 5.799456, 5.769239, 5.757882, 5.771489",\ + "6.084159, 6.038004, 6.007787, 5.996430, 6.010037",\ + "6.521860, 6.475705, 6.445487, 6.434130, 6.447738"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[5]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.106780, -1.064402, -1.029823, -0.992188, -0.708331",\ + "-1.197005, -1.154628, -1.120048, -1.082413, -0.798556",\ + "-1.309817, -1.267440, -1.232860, -1.195225, -0.911368",\ + "-1.491037, -1.448660, -1.414081, -1.376445, -1.092589",\ + "-1.759520, -1.717143, -1.682564, -1.644928, -1.361072"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-1.140151, -1.097774, -1.063194, -1.025559, -0.741702",\ + "-1.230044, -1.187667, -1.153087, -1.115452, -0.831595",\ + "-1.325510, -1.283133, -1.248553, -1.210918, -0.927061",\ + "-1.495905, -1.453528, -1.418948, -1.381313, -1.097456",\ + "-1.795562, -1.753184, -1.718605, -1.680969, -1.397113"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[5]_hldr*/ + +} /* end of pin tl_i[5] */ + +pin("tl_i[4]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001034 ; + + /* Other user defined attributes. */ + original_pin : tl_i[4]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "4.980015, 4.933860, 4.903643, 4.892286, 4.905893",\ + "5.065440, 5.019285, 4.989068, 4.977711, 4.991318",\ + "5.143021, 5.096866, 5.066648, 5.055291, 5.068899",\ + "5.322774, 5.276619, 5.246402, 5.235044, 5.248652",\ + "5.675738, 5.629583, 5.599366, 5.588009, 5.601616"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "4.977059, 4.930904, 4.900687, 4.889330, 4.902937",\ + "5.059716, 5.013561, 4.983344, 4.971986, 4.985594",\ + "5.171787, 5.125632, 5.095415, 5.084057, 5.097665",\ + "5.401430, 5.355275, 5.325058, 5.313701, 5.327308",\ + "5.800714, 5.754560, 5.724342, 5.712985, 5.726593"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[4]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.891577, -0.849200, -0.814620, -0.776985, -0.493128",\ + "-0.976303, -0.933926, -0.899346, -0.861711, -0.577854",\ + "-1.083459, -1.041082, -1.006503, -0.968867, -0.685011",\ + "-1.234205, -1.191828, -1.157249, -1.119613, -0.835757",\ + "-1.461877, -1.419500, -1.384920, -1.347285, -1.063428"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.907849, -0.865472, -0.830893, -0.793257, -0.509401",\ + "-0.997841, -0.955464, -0.920885, -0.883249, -0.599393",\ + "-1.085765, -1.043387, -1.008808, -0.971172, -0.687316",\ + "-1.240999, -1.198622, -1.164043, -1.126407, -0.842551",\ + "-1.506646, -1.464268, -1.429689, -1.392054, -1.108197"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[4]_hldr*/ + +} /* end of pin tl_i[4] */ + +pin("tl_i[3]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000507 ; + + /* Other user defined attributes. */ + original_pin : tl_i[3]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "4.861817, 4.815662, 4.785445, 4.774088, 4.787695",\ + "4.949495, 4.903340, 4.873123, 4.861766, 4.875373",\ + "5.036715, 4.990560, 4.960342, 4.948985, 4.962593",\ + "5.207161, 5.161006, 5.130789, 5.119431, 5.133039",\ + "5.608678, 5.562523, 5.532306, 5.520948, 5.534556"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "4.856341, 4.810186, 4.779969, 4.768611, 4.782219",\ + "4.945419, 4.899264, 4.869047, 4.857689, 4.871297",\ + "5.060649, 5.014494, 4.984277, 4.972920, 4.986527",\ + "5.297888, 5.251733, 5.221516, 5.210158, 5.223766",\ + "5.732176, 5.686021, 5.655804, 5.644446, 5.658054"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[3]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.940665, -0.898288, -0.863709, -0.826073, -0.542217",\ + "-1.030843, -0.988466, -0.953887, -0.916251, -0.632395",\ + "-1.143556, -1.101179, -1.066599, -1.028964, -0.745108",\ + "-1.327817, -1.285440, -1.250861, -1.213225, -0.929369",\ + "-1.596320, -1.553943, -1.519363, -1.481728, -1.197871"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.974330, -0.931952, -0.897373, -0.859738, -0.575881",\ + "-1.064250, -1.021872, -0.987293, -0.949658, -0.665801",\ + "-1.159754, -1.117377, -1.082797, -1.045162, -0.761305",\ + "-1.330068, -1.287690, -1.253111, -1.215476, -0.931619",\ + "-1.629461, -1.587083, -1.552504, -1.514869, -1.231012"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[3]_hldr*/ + +} /* end of pin tl_i[3] */ + +pin("tl_i[2]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001034 ; + + /* Other user defined attributes. */ + original_pin : tl_i[2]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "4.870526, 4.824371, 4.794154, 4.782797, 4.796404",\ + "4.955990, 4.909835, 4.879618, 4.868261, 4.881868",\ + "5.033412, 4.987257, 4.957040, 4.945683, 4.959291",\ + "5.177666, 5.131511, 5.101294, 5.089936, 5.103544",\ + "5.529849, 5.483694, 5.453477, 5.442120, 5.455727"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "4.867772, 4.821617, 4.791399, 4.780042, 4.793650",\ + "4.950474, 4.904319, 4.874102, 4.862744, 4.876352",\ + "5.062271, 5.016116, 4.985898, 4.974541, 4.988149",\ + "5.291101, 5.244946, 5.214728, 5.203371, 5.216979",\ + "5.690255, 5.644100, 5.613883, 5.602525, 5.616133"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[2]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.870275, -0.827898, -0.793318, -0.755683, -0.471826",\ + "-0.955007, -0.912630, -0.878051, -0.840415, -0.556558",\ + "-1.061841, -1.019464, -0.984884, -0.947249, -0.663392",\ + "-1.214455, -1.172078, -1.137498, -1.099863, -0.816006",\ + "-1.442046, -1.399669, -1.365090, -1.327454, -1.043598"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.886713, -0.844335, -0.809756, -0.772120, -0.488264",\ + "-0.976714, -0.934337, -0.899757, -0.862122, -0.578265",\ + "-1.064707, -1.022330, -0.987750, -0.950115, -0.666258",\ + "-1.219840, -1.177463, -1.142883, -1.105248, -0.821391",\ + "-1.485218, -1.442840, -1.408261, -1.370625, -1.086769"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[2]_hldr*/ + +} /* end of pin tl_i[2] */ + +pin("tl_i[1]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001034 ; + + /* Other user defined attributes. */ + original_pin : tl_i[1]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "4.874022, 4.827868, 4.797650, 4.786293, 4.799901",\ + "4.959486, 4.913332, 4.883114, 4.871757, 4.885365",\ + "5.036908, 4.990753, 4.960536, 4.949179, 4.962786",\ + "5.181162, 5.135007, 5.104790, 5.093432, 5.107040",\ + "5.533345, 5.487190, 5.456973, 5.445615, 5.459223"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "4.871267, 4.825112, 4.794895, 4.783538, 4.797145",\ + "4.953969, 4.907815, 4.877597, 4.866240, 4.879848",\ + "5.065766, 5.019611, 4.989394, 4.978037, 4.991644",\ + "5.294597, 5.248442, 5.218225, 5.206867, 5.220475",\ + "5.693750, 5.647595, 5.617378, 5.606021, 5.619628"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[1]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.871744, -0.829367, -0.794788, -0.757152, -0.473296",\ + "-0.956476, -0.914099, -0.879520, -0.841884, -0.558028",\ + "-1.063310, -1.020933, -0.986354, -0.948718, -0.664862",\ + "-1.215924, -1.173547, -1.138968, -1.101332, -0.817476",\ + "-1.443516, -1.401139, -1.366559, -1.328924, -1.045067"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.888182, -0.845805, -0.811225, -0.773590, -0.489733",\ + "-0.978183, -0.935806, -0.901227, -0.863591, -0.579735",\ + "-1.066176, -1.023799, -0.989220, -0.951584, -0.667728",\ + "-1.221309, -1.178932, -1.144353, -1.106717, -0.822861",\ + "-1.486687, -1.444310, -1.409730, -1.372095, -1.088238"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[1]_hldr*/ + +} /* end of pin tl_i[1] */ + +pin("tl_i[0]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000516 ; + + /* Other user defined attributes. */ + original_pin : tl_i[0]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.175613, 0.100294, 0.032151, 0.009209, 0.072356",\ + "0.264638, 0.189339, 0.121299, 0.098527, 0.163209",\ + "0.360287, 0.285032, 0.217232, 0.194849, 0.263068",\ + "0.526788, 0.451609, 0.383810, 0.361643, 0.432490",\ + "0.806358, 0.731299, 0.662593, 0.639784, 0.707364"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.201785, 0.154982, 0.124714, 0.113318, 0.126704",\ + "0.285559, 0.238387, 0.208091, 0.196673, 0.209933",\ + "0.386189, 0.338377, 0.307866, 0.296333, 0.309292",\ + "0.553781, 0.505930, 0.474764, 0.462933, 0.475551",\ + "0.832990, 0.785063, 0.752603, 0.740184, 0.752132"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[0]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.088868, -0.022902, 0.034829, 0.076810, 0.297292",\ + "-0.178002, -0.111712, -0.053514, -0.011408, 0.208267",\ + "-0.273901, -0.206863, -0.147593, -0.105196, 0.112621",\ + "-0.440525, -0.372044, -0.311267, -0.268345, -0.051699",\ + "-0.719618, -0.648392, -0.585857, -0.542000, -0.322826"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.133037, -0.090779, -0.055923, -0.023644, 0.193736",\ + "-0.216520, -0.174329, -0.139318, -0.110044, 0.070036",\ + "-0.315601, -0.273256, -0.237974, -0.213810, -0.097198",\ + "-0.479066, -0.435673, -0.400366, -0.376078, -0.258082",\ + "-0.750133, -0.704672, -0.669317, -0.644785, -0.524056"); + } + + } /* end of arc clk_ast_tlul_i_tl_i[0]_hldr*/ + +} /* end of pin tl_i[0] */ +} /* end of bus tl_i */ +bus ( tl_o ) { + + bus_type : BUS66_type1 ; + direction : output ; + +pin("tl_o[65]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000991 ; + + /* Other user defined attributes. */ + original_pin : tl_o[65]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000991, 0.073990, 0.161246, 0.321501, 0.642011"); + values ( "0.044997, 0.199162, 0.375038, 0.698306, 1.344843",\ + "0.131049, 0.286337, 0.462145, 0.785022, 1.430777",\ + "0.213199, 0.374466, 0.550102, 0.872645, 1.517732",\ + "0.270183, 0.438865, 0.614219, 0.936559, 1.581241",\ + "0.564592, 0.788723, 0.964610, 1.285306, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000991, 0.073990, 0.161246, 0.321501, 0.642011"); + values ( "0.020343, 0.295887, 0.630096, 1.247585, 2.482563",\ + "0.025257, 0.296852, 0.632059, 1.247585, 2.482563",\ + "0.038535, 0.299143, 0.632095, 1.247585, 2.482563",\ + "0.050320, 0.302473, 0.632193, 1.247585, 2.482563",\ + "0.124837, 0.341325, 0.638465, 1.250160, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000991, 0.073990, 0.161246, 0.321501, 0.642011"); + values ( "0.064792, 0.171653, 0.283425, 0.487864, 0.896742",\ + "0.152284, 0.258972, 0.370706, 0.575169, 0.984096",\ + "0.232529, 0.339311, 0.450733, 0.655198, 1.064127",\ + "0.289052, 0.396859, 0.508277, 0.712443, 1.120775",\ + "0.581256, 0.700191, 0.811913, 1.015459, 1.422552"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000991, 0.073990, 0.161246, 0.321501, 0.642011"); + values ( "0.021933, 0.185126, 0.386052, 0.758836, 1.504404",\ + "0.021933, 0.185264, 0.386558, 0.758836, 1.504404",\ + "0.022969, 0.185264, 0.386558, 0.758836, 1.504404",\ + "0.025189, 0.185264, 0.386558, 0.758836, 1.504404",\ + "0.044032, 0.189320, 0.386558, 0.758836, 1.504684"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[65]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000991, 0.073990, 0.161246, 0.321501, 0.642011"); + values ( "0.044997, 0.199162, 0.375038, 0.698306, 1.344843",\ + "0.131049, 0.286337, 0.462145, 0.785022, 1.430777",\ + "0.213199, 0.374466, 0.550102, 0.872645, 1.517732",\ + "0.270183, 0.438865, 0.614219, 0.936559, 1.581241",\ + "0.564592, 0.788723, 0.964610, 1.285306, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000991, 0.073990, 0.161246, 0.321501, 0.642011"); + values ( "0.020343, 0.295887, 0.630096, 1.246366, 2.473547",\ + "0.025257, 0.296852, 0.632059, 1.246366, 2.473547",\ + "0.038535, 0.299143, 0.632095, 1.246442, 2.473547",\ + "0.050320, 0.302473, 0.632193, 1.247184, 2.473547",\ + "0.124837, 0.341325, 0.638465, 1.250160, 2.473547"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000991, 0.073990, 0.161246, 0.321501, 0.642011"); + values ( "0.064792, 0.171653, 0.283425, 0.487864, 0.896742",\ + "0.152284, 0.258972, 0.370706, 0.575169, 0.984096",\ + "0.232529, 0.339311, 0.450733, 0.655198, 1.064127",\ + "0.289052, 0.396859, 0.508277, 0.712443, 1.120775",\ + "0.581256, 0.700191, 0.811913, 1.015459, 1.422552"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000991, 0.073990, 0.161246, 0.321501, 0.642011"); + values ( "0.021933, 0.184336, 0.384548, 0.756608, 1.500727",\ + "0.021933, 0.184336, 0.384548, 0.756608, 1.500727",\ + "0.022969, 0.184336, 0.384548, 0.756608, 1.500727",\ + "0.025189, 0.184950, 0.385003, 0.757508, 1.502518",\ + "0.044032, 0.189320, 0.385072, 0.758276, 1.504684"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[65]_redg_min*/ + +} /* end of pin tl_o[65] */ + +pin("tl_o[64]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.153409 ; + min_capacitance : 0.000000 ; + max_fanout : 50.000000 ; + function : "0" ; + capacitance : 0.009004 ; + + /* Other user defined attributes. */ + original_pin : tl_o[64]; +} /* end of pin tl_o[64] */ + +pin("tl_o[63]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.153409 ; + min_capacitance : 0.000000 ; + max_fanout : 50.000000 ; + function : "0" ; + capacitance : 0.009004 ; + + /* Other user defined attributes. */ + original_pin : tl_o[63]; +} /* end of pin tl_o[63] */ + +pin("tl_o[62]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002088 ; + + /* Other user defined attributes. */ + original_pin : tl_o[62]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.048389, 0.201372, 0.376697, 0.699413, 1.344843",\ + "0.134717, 0.288547, 0.463802, 0.786127, 1.430777",\ + "0.217972, 0.376674, 0.551758, 0.873749, 1.517732",\ + "0.275938, 0.441068, 0.615873, 0.937662, 1.581241",\ + "0.576253, 0.790939, 0.966256, 1.286403, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.024378, 0.300079, 0.633266, 1.249698, 2.482563",\ + "0.028867, 0.301069, 0.635212, 1.249698, 2.482563",\ + "0.041784, 0.303321, 0.635248, 1.249698, 2.482563",\ + "0.053694, 0.306596, 0.635350, 1.249698, 2.482563",\ + "0.129380, 0.344908, 0.641605, 1.252253, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.068004, 0.173028, 0.284443, 0.488532, 0.896711",\ + "0.155415, 0.260346, 0.371724, 0.575838, 0.984064",\ + "0.235777, 0.340680, 0.451751, 0.655866, 1.064096",\ + "0.292479, 0.398229, 0.509294, 0.713111, 1.120744",\ + "0.586381, 0.701567, 0.812926, 1.016124, 1.422520"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.024753, 0.187586, 0.387908, 0.760055, 1.504347",\ + "0.024753, 0.187732, 0.388412, 0.760055, 1.504347",\ + "0.025828, 0.187732, 0.388412, 0.760055, 1.504347",\ + "0.027889, 0.187732, 0.388412, 0.760055, 1.504347",\ + "0.046464, 0.191695, 0.388412, 0.760055, 1.504627"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[62]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.048389, 0.201372, 0.376697, 0.699413, 1.344843",\ + "0.134717, 0.288547, 0.463802, 0.786127, 1.430777",\ + "0.217972, 0.376674, 0.551758, 0.873749, 1.517732",\ + "0.275938, 0.441068, 0.615873, 0.937662, 1.581241",\ + "0.576253, 0.790939, 0.966256, 1.286403, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.024378, 0.300079, 0.633266, 1.248468, 2.473548",\ + "0.028867, 0.301069, 0.635212, 1.248468, 2.473548",\ + "0.041784, 0.303321, 0.635248, 1.248544, 2.473548",\ + "0.053694, 0.306596, 0.635350, 1.249288, 2.473548",\ + "0.129380, 0.344908, 0.641605, 1.252253, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.068004, 0.173028, 0.284443, 0.488532, 0.896711",\ + "0.155415, 0.260346, 0.371724, 0.575838, 0.984064",\ + "0.235777, 0.340680, 0.451751, 0.655866, 1.064096",\ + "0.292479, 0.398229, 0.509294, 0.713111, 1.120744",\ + "0.586381, 0.701567, 0.812926, 1.016124, 1.422520"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.024753, 0.186786, 0.386401, 0.757824, 1.500670",\ + "0.024753, 0.186786, 0.386401, 0.757824, 1.500670",\ + "0.025828, 0.186786, 0.386401, 0.757824, 1.500670",\ + "0.027889, 0.187397, 0.386858, 0.758726, 1.502461",\ + "0.046464, 0.191695, 0.386930, 0.759496, 1.504627"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[62]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024378, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.218049, 0.171947, 0.141734, 0.130380, 0.144005",\ + "0.225343, 0.179241, 0.149028, 0.137673, 0.151299",\ + "0.298206, 0.252060, 0.221844, 0.210487, 0.224097",\ + "0.392136, 0.345682, 0.315442, 0.304067, 0.317572",\ + "0.819837, 0.772019, 0.741401, 0.729820, 0.742723"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024753, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.263674, 0.188357, 0.120223, 0.097297, 0.160585",\ + "0.270643, 0.195326, 0.127193, 0.104267, 0.167554",\ + "0.342134, 0.266818, 0.198684, 0.175758, 0.239045",\ + "0.448695, 0.373390, 0.305321, 0.282500, 0.346742",\ + "0.946962, 0.871764, 0.804107, 0.782042, 0.853404"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[62]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024378, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139030, -0.096614, -0.062124, -0.022751, 0.282672",\ + "-0.146290, -0.103874, -0.069385, -0.030012, 0.275412",\ + "-0.217578, -0.175163, -0.140673, -0.101300, 0.204124",\ + "-0.305582, -0.263210, -0.228618, -0.191228, 0.089586",\ + "-0.705049, -0.662905, -0.627627, -0.603487, -0.487141"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024753, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.129024, -0.063245, -0.005781, 0.036127, 0.257073",\ + "-0.136957, -0.071178, -0.013715, 0.028194, 0.249139",\ + "-0.213653, -0.147874, -0.090410, -0.048501, 0.172444",\ + "-0.315404, -0.249338, -0.191464, -0.149444, 0.070790",\ + "-0.774971, -0.707116, -0.646741, -0.604032, -0.387962"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[62]_hldr*/ + +} /* end of pin tl_o[62] */ + +pin("tl_o[61]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.153409 ; + min_capacitance : 0.000000 ; + max_fanout : 50.000000 ; + function : "0" ; + capacitance : 0.009004 ; + + /* Other user defined attributes. */ + original_pin : tl_o[61]; +} /* end of pin tl_o[61] */ + +pin("tl_o[60]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.153409 ; + min_capacitance : 0.000000 ; + max_fanout : 50.000000 ; + function : "0" ; + capacitance : 0.009004 ; + + /* Other user defined attributes. */ + original_pin : tl_o[60]; +} /* end of pin tl_o[60] */ + +pin("tl_o[59]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.153409 ; + min_capacitance : 0.000000 ; + max_fanout : 50.000000 ; + function : "0" ; + capacitance : 0.009004 ; + + /* Other user defined attributes. */ + original_pin : tl_o[59]; +} /* end of pin tl_o[59] */ + +pin("tl_o[58]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.003360 ; + + /* Other user defined attributes. */ + original_pin : tl_o[58]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.051828, 0.203934, 0.378621, 0.700695, 1.344843",\ + "0.138345, 0.291109, 0.465724, 0.787408, 1.430777",\ + "0.222447, 0.379233, 0.553677, 0.875029, 1.517732",\ + "0.281266, 0.443623, 0.617791, 0.938941, 1.581241",\ + "0.586734, 0.793508, 0.968165, 1.287675, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.028994, 0.304939, 0.636940, 1.252148, 2.482564",\ + "0.033002, 0.305957, 0.638867, 1.252148, 2.482564",\ + "0.045411, 0.308165, 0.638904, 1.252148, 2.482564",\ + "0.057383, 0.311375, 0.639010, 1.252148, 2.482564",\ + "0.134005, 0.349063, 0.645245, 1.254679, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.070957, 0.174574, 0.285576, 0.489260, 0.896627",\ + "0.158358, 0.261892, 0.372857, 0.576565, 0.983980",\ + "0.238767, 0.342220, 0.452884, 0.656593, 1.064012",\ + "0.295587, 0.399770, 0.510425, 0.713837, 1.120660",\ + "0.590723, 0.703115, 0.814054, 1.016848, 1.422437"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.027799, 0.190353, 0.389974, 0.761380, 1.504194",\ + "0.027799, 0.190507, 0.390474, 0.761380, 1.504194",\ + "0.028742, 0.190507, 0.390474, 0.761380, 1.504194",\ + "0.030673, 0.190507, 0.390474, 0.761380, 1.504194",\ + "0.048664, 0.194365, 0.390474, 0.761380, 1.504474"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[58]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.051828, 0.203934, 0.378621, 0.700695, 1.344843",\ + "0.138345, 0.291109, 0.465724, 0.787408, 1.430777",\ + "0.222447, 0.379233, 0.553677, 0.875029, 1.517732",\ + "0.281266, 0.443623, 0.617791, 0.938941, 1.581241",\ + "0.586734, 0.793508, 0.968165, 1.287675, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.028994, 0.304939, 0.636940, 1.250905, 2.473548",\ + "0.033002, 0.305957, 0.638867, 1.250905, 2.473548",\ + "0.045411, 0.308165, 0.638904, 1.250981, 2.473548",\ + "0.057383, 0.311375, 0.639010, 1.251728, 2.473548",\ + "0.134005, 0.349063, 0.645245, 1.254679, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.070957, 0.174574, 0.285576, 0.489260, 0.896627",\ + "0.158358, 0.261892, 0.372857, 0.576565, 0.983980",\ + "0.238767, 0.342220, 0.452884, 0.656593, 1.064012",\ + "0.295587, 0.399770, 0.510425, 0.713837, 1.120660",\ + "0.590723, 0.703115, 0.814054, 1.016848, 1.422437"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.027799, 0.189542, 0.388462, 0.759147, 1.500517",\ + "0.027799, 0.189542, 0.388462, 0.759147, 1.500517",\ + "0.028742, 0.189542, 0.388462, 0.759147, 1.500517",\ + "0.030673, 0.190148, 0.388922, 0.760051, 1.502309",\ + "0.048664, 0.194365, 0.388998, 0.760823, 1.504474"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[58]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.028994, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.218252, 0.172323, 0.142124, 0.130780, 0.144465",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.027799, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.252073, 0.176751, 0.108592, 0.085625, 0.148539",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[58]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.028994, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.150180, -0.107763, -0.073276, -0.033852, 0.272195",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.027799, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.165228, -0.099313, -0.041654, 0.000307, 0.220914",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[58]_hldr*/ + +} /* end of pin tl_o[58] */ + +pin("tl_o[57]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002160 ; + + /* Other user defined attributes. */ + original_pin : tl_o[57]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.048582, 0.201516, 0.376805, 0.699484, 1.344843",\ + "0.134920, 0.288690, 0.463910, 0.786199, 1.430777",\ + "0.218223, 0.376818, 0.551865, 0.873821, 1.517732",\ + "0.276237, 0.441212, 0.615981, 0.937734, 1.581241",\ + "0.576841, 0.791083, 0.966363, 1.286475, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.024637, 0.300352, 0.633472, 1.249836, 2.482563",\ + "0.029099, 0.301343, 0.635417, 1.249836, 2.482563",\ + "0.041988, 0.303593, 0.635453, 1.249836, 2.482563",\ + "0.053901, 0.306864, 0.635555, 1.249836, 2.482563",\ + "0.129639, 0.345141, 0.641809, 1.252389, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.068110, 0.173083, 0.284476, 0.488542, 0.896675",\ + "0.155520, 0.260402, 0.371756, 0.575847, 0.984028",\ + "0.235884, 0.340735, 0.451783, 0.655876, 1.064060",\ + "0.292590, 0.398284, 0.509326, 0.713120, 1.120708",\ + "0.586537, 0.701623, 0.812958, 1.016134, 1.422485"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.024862, 0.187685, 0.387967, 0.760072, 1.504282",\ + "0.024862, 0.187831, 0.388471, 0.760072, 1.504282",\ + "0.025932, 0.187831, 0.388471, 0.760072, 1.504282",\ + "0.027989, 0.187831, 0.388471, 0.760072, 1.504282",\ + "0.046543, 0.191790, 0.388471, 0.760072, 1.504562"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[57]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.048582, 0.201516, 0.376805, 0.699484, 1.344843",\ + "0.134920, 0.288690, 0.463910, 0.786199, 1.430777",\ + "0.218223, 0.376818, 0.551865, 0.873821, 1.517732",\ + "0.276237, 0.441212, 0.615981, 0.937734, 1.581241",\ + "0.576841, 0.791083, 0.966363, 1.286475, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.024637, 0.300352, 0.633472, 1.248605, 2.473548",\ + "0.029099, 0.301343, 0.635417, 1.248605, 2.473548",\ + "0.041988, 0.303593, 0.635453, 1.248680, 2.473548",\ + "0.053901, 0.306864, 0.635555, 1.249425, 2.473548",\ + "0.129639, 0.345141, 0.641809, 1.252389, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.068110, 0.173083, 0.284476, 0.488542, 0.896675",\ + "0.155520, 0.260402, 0.371756, 0.575847, 0.984028",\ + "0.235884, 0.340735, 0.451783, 0.655876, 1.064060",\ + "0.292590, 0.398284, 0.509326, 0.713120, 1.120708",\ + "0.586537, 0.701623, 0.812958, 1.016134, 1.422485"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.024862, 0.186885, 0.386460, 0.757841, 1.500604",\ + "0.024862, 0.186885, 0.386460, 0.757841, 1.500604",\ + "0.025932, 0.186885, 0.386460, 0.757841, 1.500604",\ + "0.027989, 0.187495, 0.386917, 0.758743, 1.502396",\ + "0.046543, 0.191790, 0.386989, 0.759514, 1.504562"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[57]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024637, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.216235, 0.170306, 0.140106, 0.128763, 0.142448",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024862, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.250736, 0.175414, 0.107255, 0.084288, 0.147202",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[57]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024637, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.148162, -0.105745, -0.071258, -0.031835, 0.274212",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024862, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.163891, -0.097976, -0.040317, 0.001644, 0.222251",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[57]_hldr*/ + +} /* end of pin tl_o[57] */ + +pin("tl_o[56]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000498 ; + + /* Other user defined attributes. */ + original_pin : tl_o[56]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.043170, 0.198167, 0.374291, 0.697809, 1.344843",\ + "0.129019, 0.285342, 0.461399, 0.784525, 1.430777",\ + "0.210407, 0.373473, 0.549357, 0.872149, 1.517732",\ + "0.266777, 0.437873, 0.613474, 0.936063, 1.581241",\ + "0.557497, 0.787726, 0.963869, 1.284812, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.018489, 0.294000, 0.628670, 1.246634, 2.482563",\ + "0.023601, 0.294955, 0.630640, 1.246634, 2.482563",\ + "0.036987, 0.297263, 0.630676, 1.246634, 2.482563",\ + "0.048667, 0.300618, 0.630773, 1.246634, 2.482563",\ + "0.122402, 0.339712, 0.637052, 1.249217, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.063051, 0.171050, 0.282984, 0.487580, 0.896773",\ + "0.150620, 0.258370, 0.370264, 0.574885, 0.984126",\ + "0.230770, 0.338711, 0.450291, 0.654914, 1.064158",\ + "0.287173, 0.396259, 0.507836, 0.712159, 1.120806",\ + "0.578289, 0.699588, 0.811473, 1.015176, 1.422582"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.020634, 0.184048, 0.385247, 0.758318, 1.504460",\ + "0.020634, 0.184183, 0.385754, 0.758318, 1.504460",\ + "0.021564, 0.184183, 0.385754, 0.758318, 1.504460",\ + "0.023878, 0.184183, 0.385754, 0.758318, 1.504460",\ + "0.042695, 0.188280, 0.385754, 0.758318, 1.504740"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[56]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.043170, 0.198167, 0.374291, 0.697809, 1.344843",\ + "0.129019, 0.285342, 0.461399, 0.784525, 1.430777",\ + "0.210407, 0.373473, 0.549357, 0.872149, 1.517732",\ + "0.266777, 0.437873, 0.613474, 0.936063, 1.581241",\ + "0.557497, 0.787726, 0.963869, 1.284812, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.018489, 0.294000, 0.628670, 1.245420, 2.473548",\ + "0.023601, 0.294955, 0.630640, 1.245420, 2.473548",\ + "0.036987, 0.297263, 0.630676, 1.245495, 2.473548",\ + "0.048667, 0.300618, 0.630773, 1.246236, 2.473548",\ + "0.122402, 0.339712, 0.637052, 1.249217, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.063051, 0.171050, 0.282984, 0.487580, 0.896773",\ + "0.150620, 0.258370, 0.370264, 0.574885, 0.984126",\ + "0.230770, 0.338711, 0.450291, 0.654914, 1.064158",\ + "0.287173, 0.396259, 0.507836, 0.712159, 1.120806",\ + "0.578289, 0.699588, 0.811473, 1.015176, 1.422582"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.020634, 0.183263, 0.383745, 0.756091, 1.500782",\ + "0.020634, 0.183263, 0.383745, 0.756091, 1.500782",\ + "0.021564, 0.183263, 0.383745, 0.756091, 1.500782",\ + "0.023878, 0.183878, 0.384198, 0.756990, 1.502574",\ + "0.042695, 0.188280, 0.384266, 0.757757, 1.504740"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[56]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018489, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.213388, 0.167459, 0.137260, 0.125916, 0.139601",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020634, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.248811, 0.173490, 0.105331, 0.082363, 0.145277",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[56]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018489, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.145316, -0.102899, -0.068412, -0.028988, 0.277059",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020634, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.161967, -0.096052, -0.038393, 0.003568, 0.224175",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[56]_hldr*/ + +} /* end of pin tl_o[56] */ + +pin("tl_o[55]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000498 ; + + /* Other user defined attributes. */ + original_pin : tl_o[55]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.043170, 0.198167, 0.374291, 0.697809, 1.344843",\ + "0.129019, 0.285342, 0.461399, 0.784525, 1.430777",\ + "0.210407, 0.373473, 0.549357, 0.872149, 1.517732",\ + "0.266777, 0.437873, 0.613474, 0.936063, 1.581241",\ + "0.557497, 0.787726, 0.963869, 1.284812, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.018489, 0.294000, 0.628670, 1.246634, 2.482563",\ + "0.023601, 0.294955, 0.630640, 1.246634, 2.482563",\ + "0.036987, 0.297263, 0.630676, 1.246634, 2.482563",\ + "0.048667, 0.300618, 0.630773, 1.246634, 2.482563",\ + "0.122402, 0.339712, 0.637052, 1.249217, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.063051, 0.171050, 0.282984, 0.487580, 0.896773",\ + "0.150620, 0.258370, 0.370264, 0.574885, 0.984126",\ + "0.230770, 0.338711, 0.450291, 0.654914, 1.064158",\ + "0.287173, 0.396259, 0.507836, 0.712159, 1.120806",\ + "0.578289, 0.699588, 0.811473, 1.015176, 1.422582"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.020634, 0.184048, 0.385247, 0.758318, 1.504460",\ + "0.020634, 0.184183, 0.385754, 0.758318, 1.504460",\ + "0.021564, 0.184183, 0.385754, 0.758318, 1.504460",\ + "0.023878, 0.184183, 0.385754, 0.758318, 1.504460",\ + "0.042695, 0.188280, 0.385754, 0.758318, 1.504740"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[55]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.043170, 0.198167, 0.374291, 0.697809, 1.344843",\ + "0.129019, 0.285342, 0.461399, 0.784525, 1.430777",\ + "0.210407, 0.373473, 0.549357, 0.872149, 1.517732",\ + "0.266777, 0.437873, 0.613474, 0.936063, 1.581241",\ + "0.557497, 0.787726, 0.963869, 1.284812, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.018489, 0.294000, 0.628670, 1.245420, 2.473548",\ + "0.023601, 0.294955, 0.630640, 1.245420, 2.473548",\ + "0.036987, 0.297263, 0.630676, 1.245495, 2.473548",\ + "0.048667, 0.300618, 0.630773, 1.246236, 2.473548",\ + "0.122402, 0.339712, 0.637052, 1.249217, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.063051, 0.171050, 0.282984, 0.487580, 0.896773",\ + "0.150620, 0.258370, 0.370264, 0.574885, 0.984126",\ + "0.230770, 0.338711, 0.450291, 0.654914, 1.064158",\ + "0.287173, 0.396259, 0.507836, 0.712159, 1.120806",\ + "0.578289, 0.699588, 0.811473, 1.015176, 1.422582"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.020634, 0.183263, 0.383745, 0.756091, 1.500782",\ + "0.020634, 0.183263, 0.383745, 0.756091, 1.500782",\ + "0.021564, 0.183263, 0.383745, 0.756091, 1.500782",\ + "0.023878, 0.183878, 0.384198, 0.756990, 1.502574",\ + "0.042695, 0.188280, 0.384266, 0.757757, 1.504740"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[55]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018489, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.213388, 0.167459, 0.137260, 0.125916, 0.139601",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020634, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.248811, 0.173490, 0.105331, 0.082363, 0.145277",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[55]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018489, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.145316, -0.102899, -0.068412, -0.028988, 0.277059",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020634, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.161967, -0.096052, -0.038393, 0.003568, 0.224175",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[55]_hldr*/ + +} /* end of pin tl_o[55] */ + +pin("tl_o[54]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000498 ; + + /* Other user defined attributes. */ + original_pin : tl_o[54]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.043170, 0.198167, 0.374291, 0.697809, 1.344843",\ + "0.129019, 0.285342, 0.461399, 0.784525, 1.430777",\ + "0.210407, 0.373473, 0.549357, 0.872149, 1.517732",\ + "0.266777, 0.437873, 0.613474, 0.936063, 1.581241",\ + "0.557497, 0.787726, 0.963869, 1.284812, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.018489, 0.294000, 0.628670, 1.246634, 2.482563",\ + "0.023601, 0.294955, 0.630640, 1.246634, 2.482563",\ + "0.036987, 0.297263, 0.630676, 1.246634, 2.482563",\ + "0.048667, 0.300618, 0.630773, 1.246634, 2.482563",\ + "0.122402, 0.339712, 0.637052, 1.249217, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.063051, 0.171050, 0.282984, 0.487580, 0.896773",\ + "0.150620, 0.258370, 0.370264, 0.574885, 0.984126",\ + "0.230770, 0.338711, 0.450291, 0.654914, 1.064158",\ + "0.287173, 0.396259, 0.507836, 0.712159, 1.120806",\ + "0.578289, 0.699588, 0.811473, 1.015176, 1.422582"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.020634, 0.184048, 0.385247, 0.758318, 1.504460",\ + "0.020634, 0.184183, 0.385754, 0.758318, 1.504460",\ + "0.021564, 0.184183, 0.385754, 0.758318, 1.504460",\ + "0.023878, 0.184183, 0.385754, 0.758318, 1.504460",\ + "0.042695, 0.188280, 0.385754, 0.758318, 1.504740"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[54]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.043170, 0.198167, 0.374291, 0.697809, 1.344843",\ + "0.129019, 0.285342, 0.461399, 0.784525, 1.430777",\ + "0.210407, 0.373473, 0.549357, 0.872149, 1.517732",\ + "0.266777, 0.437873, 0.613474, 0.936063, 1.581241",\ + "0.557497, 0.787726, 0.963869, 1.284812, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.018489, 0.294000, 0.628670, 1.245420, 2.473548",\ + "0.023601, 0.294955, 0.630640, 1.245420, 2.473548",\ + "0.036987, 0.297263, 0.630676, 1.245495, 2.473548",\ + "0.048667, 0.300618, 0.630773, 1.246236, 2.473548",\ + "0.122402, 0.339712, 0.637052, 1.249217, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.063051, 0.171050, 0.282984, 0.487580, 0.896773",\ + "0.150620, 0.258370, 0.370264, 0.574885, 0.984126",\ + "0.230770, 0.338711, 0.450291, 0.654914, 1.064158",\ + "0.287173, 0.396259, 0.507836, 0.712159, 1.120806",\ + "0.578289, 0.699588, 0.811473, 1.015176, 1.422582"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.020634, 0.183263, 0.383745, 0.756091, 1.500782",\ + "0.020634, 0.183263, 0.383745, 0.756091, 1.500782",\ + "0.021564, 0.183263, 0.383745, 0.756091, 1.500782",\ + "0.023878, 0.183878, 0.384198, 0.756990, 1.502574",\ + "0.042695, 0.188280, 0.384266, 0.757757, 1.504740"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[54]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018489, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.213388, 0.167459, 0.137260, 0.125916, 0.139601",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020634, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.248811, 0.173490, 0.105331, 0.082363, 0.145277",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[54]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018489, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.145316, -0.102899, -0.068412, -0.028988, 0.277059",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020634, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.161967, -0.096052, -0.038393, 0.003568, 0.224175",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[54]_hldr*/ + +} /* end of pin tl_o[54] */ + +pin("tl_o[53]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000498 ; + + /* Other user defined attributes. */ + original_pin : tl_o[53]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.043170, 0.198167, 0.374291, 0.697809, 1.344843",\ + "0.129019, 0.285342, 0.461399, 0.784525, 1.430777",\ + "0.210407, 0.373473, 0.549357, 0.872149, 1.517732",\ + "0.266777, 0.437873, 0.613474, 0.936063, 1.581241",\ + "0.557497, 0.787726, 0.963869, 1.284812, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.018489, 0.294000, 0.628670, 1.246634, 2.482563",\ + "0.023601, 0.294955, 0.630640, 1.246634, 2.482563",\ + "0.036987, 0.297263, 0.630676, 1.246634, 2.482563",\ + "0.048667, 0.300618, 0.630773, 1.246634, 2.482563",\ + "0.122402, 0.339712, 0.637052, 1.249217, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.063051, 0.171050, 0.282984, 0.487580, 0.896773",\ + "0.150620, 0.258370, 0.370264, 0.574885, 0.984126",\ + "0.230770, 0.338711, 0.450291, 0.654914, 1.064158",\ + "0.287173, 0.396259, 0.507836, 0.712159, 1.120806",\ + "0.578289, 0.699588, 0.811473, 1.015176, 1.422582"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.020634, 0.184048, 0.385247, 0.758318, 1.504460",\ + "0.020634, 0.184183, 0.385754, 0.758318, 1.504460",\ + "0.021564, 0.184183, 0.385754, 0.758318, 1.504460",\ + "0.023878, 0.184183, 0.385754, 0.758318, 1.504460",\ + "0.042695, 0.188280, 0.385754, 0.758318, 1.504740"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[53]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.043170, 0.198167, 0.374291, 0.697809, 1.344843",\ + "0.129019, 0.285342, 0.461399, 0.784525, 1.430777",\ + "0.210407, 0.373473, 0.549357, 0.872149, 1.517732",\ + "0.266777, 0.437873, 0.613474, 0.936063, 1.581241",\ + "0.557497, 0.787726, 0.963869, 1.284812, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.018489, 0.294000, 0.628670, 1.245420, 2.473548",\ + "0.023601, 0.294955, 0.630640, 1.245420, 2.473548",\ + "0.036987, 0.297263, 0.630676, 1.245495, 2.473548",\ + "0.048667, 0.300618, 0.630773, 1.246236, 2.473548",\ + "0.122402, 0.339712, 0.637052, 1.249217, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.063051, 0.171050, 0.282984, 0.487580, 0.896773",\ + "0.150620, 0.258370, 0.370264, 0.574885, 0.984126",\ + "0.230770, 0.338711, 0.450291, 0.654914, 1.064158",\ + "0.287173, 0.396259, 0.507836, 0.712159, 1.120806",\ + "0.578289, 0.699588, 0.811473, 1.015176, 1.422582"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.020634, 0.183263, 0.383745, 0.756091, 1.500782",\ + "0.020634, 0.183263, 0.383745, 0.756091, 1.500782",\ + "0.021564, 0.183263, 0.383745, 0.756091, 1.500782",\ + "0.023878, 0.183878, 0.384198, 0.756990, 1.502574",\ + "0.042695, 0.188280, 0.384266, 0.757757, 1.504740"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[53]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018489, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.213388, 0.167459, 0.137260, 0.125916, 0.139601",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020634, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.248811, 0.173490, 0.105331, 0.082363, 0.145277",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[53]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018489, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.145316, -0.102899, -0.068412, -0.028988, 0.277059",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020634, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.161967, -0.096052, -0.038393, 0.003568, 0.224175",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[53]_hldr*/ + +} /* end of pin tl_o[53] */ + +pin("tl_o[52]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000498 ; + + /* Other user defined attributes. */ + original_pin : tl_o[52]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.043170, 0.198167, 0.374291, 0.697809, 1.344843",\ + "0.129019, 0.285342, 0.461399, 0.784525, 1.430777",\ + "0.210407, 0.373473, 0.549357, 0.872149, 1.517732",\ + "0.266777, 0.437873, 0.613474, 0.936063, 1.581241",\ + "0.557497, 0.787726, 0.963869, 1.284812, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.018489, 0.294000, 0.628670, 1.246634, 2.482563",\ + "0.023601, 0.294955, 0.630640, 1.246634, 2.482563",\ + "0.036987, 0.297263, 0.630676, 1.246634, 2.482563",\ + "0.048667, 0.300618, 0.630773, 1.246634, 2.482563",\ + "0.122402, 0.339712, 0.637052, 1.249217, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.063051, 0.171050, 0.282984, 0.487580, 0.896773",\ + "0.150620, 0.258370, 0.370264, 0.574885, 0.984126",\ + "0.230770, 0.338711, 0.450291, 0.654914, 1.064158",\ + "0.287173, 0.396259, 0.507836, 0.712159, 1.120806",\ + "0.578289, 0.699588, 0.811473, 1.015176, 1.422582"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.020634, 0.184048, 0.385247, 0.758318, 1.504460",\ + "0.020634, 0.184183, 0.385754, 0.758318, 1.504460",\ + "0.021564, 0.184183, 0.385754, 0.758318, 1.504460",\ + "0.023878, 0.184183, 0.385754, 0.758318, 1.504460",\ + "0.042695, 0.188280, 0.385754, 0.758318, 1.504740"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[52]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.043170, 0.198167, 0.374291, 0.697809, 1.344843",\ + "0.129019, 0.285342, 0.461399, 0.784525, 1.430777",\ + "0.210407, 0.373473, 0.549357, 0.872149, 1.517732",\ + "0.266777, 0.437873, 0.613474, 0.936063, 1.581241",\ + "0.557497, 0.787726, 0.963869, 1.284812, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.018489, 0.294000, 0.628670, 1.245420, 2.473548",\ + "0.023601, 0.294955, 0.630640, 1.245420, 2.473548",\ + "0.036987, 0.297263, 0.630676, 1.245495, 2.473548",\ + "0.048667, 0.300618, 0.630773, 1.246236, 2.473548",\ + "0.122402, 0.339712, 0.637052, 1.249217, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.063051, 0.171050, 0.282984, 0.487580, 0.896773",\ + "0.150620, 0.258370, 0.370264, 0.574885, 0.984126",\ + "0.230770, 0.338711, 0.450291, 0.654914, 1.064158",\ + "0.287173, 0.396259, 0.507836, 0.712159, 1.120806",\ + "0.578289, 0.699588, 0.811473, 1.015176, 1.422582"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.020634, 0.183263, 0.383745, 0.756091, 1.500782",\ + "0.020634, 0.183263, 0.383745, 0.756091, 1.500782",\ + "0.021564, 0.183263, 0.383745, 0.756091, 1.500782",\ + "0.023878, 0.183878, 0.384198, 0.756990, 1.502574",\ + "0.042695, 0.188280, 0.384266, 0.757757, 1.504740"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[52]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018489, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.213388, 0.167459, 0.137260, 0.125916, 0.139601",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020634, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.248811, 0.173490, 0.105331, 0.082363, 0.145277",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[52]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018489, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.145316, -0.102899, -0.068412, -0.028988, 0.277059",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020634, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.161967, -0.096052, -0.038393, 0.003568, 0.224175",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[52]_hldr*/ + +} /* end of pin tl_o[52] */ + +pin("tl_o[51]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000498 ; + + /* Other user defined attributes. */ + original_pin : tl_o[51]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.043170, 0.198167, 0.374291, 0.697809, 1.344843",\ + "0.129019, 0.285342, 0.461399, 0.784525, 1.430777",\ + "0.210407, 0.373473, 0.549357, 0.872149, 1.517732",\ + "0.266777, 0.437873, 0.613474, 0.936063, 1.581241",\ + "0.557497, 0.787726, 0.963869, 1.284812, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.018489, 0.294000, 0.628670, 1.246634, 2.482563",\ + "0.023601, 0.294955, 0.630640, 1.246634, 2.482563",\ + "0.036987, 0.297263, 0.630676, 1.246634, 2.482563",\ + "0.048667, 0.300618, 0.630773, 1.246634, 2.482563",\ + "0.122402, 0.339712, 0.637052, 1.249217, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.063051, 0.171050, 0.282984, 0.487580, 0.896773",\ + "0.150620, 0.258370, 0.370264, 0.574885, 0.984126",\ + "0.230770, 0.338711, 0.450291, 0.654914, 1.064158",\ + "0.287173, 0.396259, 0.507836, 0.712159, 1.120806",\ + "0.578289, 0.699588, 0.811473, 1.015176, 1.422582"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.020634, 0.184048, 0.385247, 0.758318, 1.504460",\ + "0.020634, 0.184183, 0.385754, 0.758318, 1.504460",\ + "0.021564, 0.184183, 0.385754, 0.758318, 1.504460",\ + "0.023878, 0.184183, 0.385754, 0.758318, 1.504460",\ + "0.042695, 0.188280, 0.385754, 0.758318, 1.504740"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[51]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.043170, 0.198167, 0.374291, 0.697809, 1.344843",\ + "0.129019, 0.285342, 0.461399, 0.784525, 1.430777",\ + "0.210407, 0.373473, 0.549357, 0.872149, 1.517732",\ + "0.266777, 0.437873, 0.613474, 0.936063, 1.581241",\ + "0.557497, 0.787726, 0.963869, 1.284812, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.018489, 0.294000, 0.628670, 1.245420, 2.473548",\ + "0.023601, 0.294955, 0.630640, 1.245420, 2.473548",\ + "0.036987, 0.297263, 0.630676, 1.245495, 2.473548",\ + "0.048667, 0.300618, 0.630773, 1.246236, 2.473548",\ + "0.122402, 0.339712, 0.637052, 1.249217, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.063051, 0.171050, 0.282984, 0.487580, 0.896773",\ + "0.150620, 0.258370, 0.370264, 0.574885, 0.984126",\ + "0.230770, 0.338711, 0.450291, 0.654914, 1.064158",\ + "0.287173, 0.396259, 0.507836, 0.712159, 1.120806",\ + "0.578289, 0.699588, 0.811473, 1.015176, 1.422582"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.020634, 0.183263, 0.383745, 0.756091, 1.500782",\ + "0.020634, 0.183263, 0.383745, 0.756091, 1.500782",\ + "0.021564, 0.183263, 0.383745, 0.756091, 1.500782",\ + "0.023878, 0.183878, 0.384198, 0.756990, 1.502574",\ + "0.042695, 0.188280, 0.384266, 0.757757, 1.504740"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[51]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018489, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.213388, 0.167459, 0.137260, 0.125916, 0.139601",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020634, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.248811, 0.173490, 0.105331, 0.082363, 0.145277",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[51]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018489, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.145316, -0.102899, -0.068412, -0.028988, 0.277059",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020634, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.161967, -0.096052, -0.038393, 0.003568, 0.224175",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[51]_hldr*/ + +} /* end of pin tl_o[51] */ + +pin("tl_o[50]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000498 ; + + /* Other user defined attributes. */ + original_pin : tl_o[50]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.043170, 0.198167, 0.374291, 0.697809, 1.344843",\ + "0.129019, 0.285342, 0.461399, 0.784525, 1.430777",\ + "0.210407, 0.373473, 0.549357, 0.872149, 1.517732",\ + "0.266777, 0.437873, 0.613474, 0.936063, 1.581241",\ + "0.557497, 0.787726, 0.963869, 1.284812, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.018489, 0.294000, 0.628670, 1.246634, 2.482563",\ + "0.023601, 0.294955, 0.630640, 1.246634, 2.482563",\ + "0.036987, 0.297263, 0.630676, 1.246634, 2.482563",\ + "0.048667, 0.300618, 0.630773, 1.246634, 2.482563",\ + "0.122402, 0.339712, 0.637052, 1.249217, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.063051, 0.171050, 0.282984, 0.487580, 0.896773",\ + "0.150620, 0.258370, 0.370264, 0.574885, 0.984126",\ + "0.230770, 0.338711, 0.450291, 0.654914, 1.064158",\ + "0.287173, 0.396259, 0.507836, 0.712159, 1.120806",\ + "0.578289, 0.699588, 0.811473, 1.015176, 1.422582"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.020634, 0.184048, 0.385247, 0.758318, 1.504460",\ + "0.020634, 0.184183, 0.385754, 0.758318, 1.504460",\ + "0.021564, 0.184183, 0.385754, 0.758318, 1.504460",\ + "0.023878, 0.184183, 0.385754, 0.758318, 1.504460",\ + "0.042695, 0.188280, 0.385754, 0.758318, 1.504740"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[50]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.043170, 0.198167, 0.374291, 0.697809, 1.344843",\ + "0.129019, 0.285342, 0.461399, 0.784525, 1.430777",\ + "0.210407, 0.373473, 0.549357, 0.872149, 1.517732",\ + "0.266777, 0.437873, 0.613474, 0.936063, 1.581241",\ + "0.557497, 0.787726, 0.963869, 1.284812, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.018489, 0.294000, 0.628670, 1.245420, 2.473548",\ + "0.023601, 0.294955, 0.630640, 1.245420, 2.473548",\ + "0.036987, 0.297263, 0.630676, 1.245495, 2.473548",\ + "0.048667, 0.300618, 0.630773, 1.246236, 2.473548",\ + "0.122402, 0.339712, 0.637052, 1.249217, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.063051, 0.171050, 0.282984, 0.487580, 0.896773",\ + "0.150620, 0.258370, 0.370264, 0.574885, 0.984126",\ + "0.230770, 0.338711, 0.450291, 0.654914, 1.064158",\ + "0.287173, 0.396259, 0.507836, 0.712159, 1.120806",\ + "0.578289, 0.699588, 0.811473, 1.015176, 1.422582"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.020634, 0.183263, 0.383745, 0.756091, 1.500782",\ + "0.020634, 0.183263, 0.383745, 0.756091, 1.500782",\ + "0.021564, 0.183263, 0.383745, 0.756091, 1.500782",\ + "0.023878, 0.183878, 0.384198, 0.756990, 1.502574",\ + "0.042695, 0.188280, 0.384266, 0.757757, 1.504740"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[50]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018489, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.213388, 0.167459, 0.137260, 0.125916, 0.139601",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020634, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.248811, 0.173490, 0.105331, 0.082363, 0.145277",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[50]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018489, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.145316, -0.102899, -0.068412, -0.028988, 0.277059",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020634, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.161967, -0.096052, -0.038393, 0.003568, 0.224175",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[50]_hldr*/ + +} /* end of pin tl_o[50] */ + +pin("tl_o[49]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000498 ; + + /* Other user defined attributes. */ + original_pin : tl_o[49]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.043170, 0.198167, 0.374291, 0.697809, 1.344843",\ + "0.129019, 0.285342, 0.461399, 0.784525, 1.430777",\ + "0.210407, 0.373473, 0.549357, 0.872149, 1.517732",\ + "0.266777, 0.437873, 0.613474, 0.936063, 1.581241",\ + "0.557497, 0.787726, 0.963869, 1.284812, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.018489, 0.294000, 0.628670, 1.246634, 2.482563",\ + "0.023601, 0.294955, 0.630640, 1.246634, 2.482563",\ + "0.036987, 0.297263, 0.630676, 1.246634, 2.482563",\ + "0.048667, 0.300618, 0.630773, 1.246634, 2.482563",\ + "0.122402, 0.339712, 0.637052, 1.249217, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.063051, 0.171050, 0.282984, 0.487580, 0.896773",\ + "0.150620, 0.258370, 0.370264, 0.574885, 0.984126",\ + "0.230770, 0.338711, 0.450291, 0.654914, 1.064158",\ + "0.287173, 0.396259, 0.507836, 0.712159, 1.120806",\ + "0.578289, 0.699588, 0.811473, 1.015176, 1.422582"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.020634, 0.184048, 0.385247, 0.758318, 1.504460",\ + "0.020634, 0.184183, 0.385754, 0.758318, 1.504460",\ + "0.021564, 0.184183, 0.385754, 0.758318, 1.504460",\ + "0.023878, 0.184183, 0.385754, 0.758318, 1.504460",\ + "0.042695, 0.188280, 0.385754, 0.758318, 1.504740"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[49]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.043170, 0.198167, 0.374291, 0.697809, 1.344843",\ + "0.129019, 0.285342, 0.461399, 0.784525, 1.430777",\ + "0.210407, 0.373473, 0.549357, 0.872149, 1.517732",\ + "0.266777, 0.437873, 0.613474, 0.936063, 1.581241",\ + "0.557497, 0.787726, 0.963869, 1.284812, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.018489, 0.294000, 0.628670, 1.245420, 2.473548",\ + "0.023601, 0.294955, 0.630640, 1.245420, 2.473548",\ + "0.036987, 0.297263, 0.630676, 1.245495, 2.473548",\ + "0.048667, 0.300618, 0.630773, 1.246236, 2.473548",\ + "0.122402, 0.339712, 0.637052, 1.249217, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.063051, 0.171050, 0.282984, 0.487580, 0.896773",\ + "0.150620, 0.258370, 0.370264, 0.574885, 0.984126",\ + "0.230770, 0.338711, 0.450291, 0.654914, 1.064158",\ + "0.287173, 0.396259, 0.507836, 0.712159, 1.120806",\ + "0.578289, 0.699588, 0.811473, 1.015176, 1.422582"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000498, 0.073496, 0.160876, 0.321254, 0.642011"); + values ( "0.020634, 0.183263, 0.383745, 0.756091, 1.500782",\ + "0.020634, 0.183263, 0.383745, 0.756091, 1.500782",\ + "0.021564, 0.183263, 0.383745, 0.756091, 1.500782",\ + "0.023878, 0.183878, 0.384198, 0.756990, 1.502574",\ + "0.042695, 0.188280, 0.384266, 0.757757, 1.504740"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[49]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018489, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.213388, 0.167459, 0.137260, 0.125916, 0.139601",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020634, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.248811, 0.173490, 0.105331, 0.082363, 0.145277",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[49]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018489, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.145316, -0.102899, -0.068412, -0.028988, 0.277059",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020634, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.161967, -0.096052, -0.038393, 0.003568, 0.224175",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[49]_hldr*/ + +} /* end of pin tl_o[49] */ + +pin("tl_o[48]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.153409 ; + min_capacitance : 0.000000 ; + max_fanout : 50.000000 ; + function : "0" ; + capacitance : 0.009004 ; + + /* Other user defined attributes. */ + original_pin : tl_o[48]; +} /* end of pin tl_o[48] */ + +pin("tl_o[47]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002792 ; + + /* Other user defined attributes. */ + original_pin : tl_o[47]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.050293, 0.202790, 0.377762, 0.700122, 1.344843",\ + "0.136725, 0.289965, 0.464866, 0.786836, 1.430777",\ + "0.220450, 0.378091, 0.552820, 0.874457, 1.517732",\ + "0.278888, 0.442483, 0.616935, 0.938370, 1.581241",\ + "0.582056, 0.792362, 0.967313, 1.287108, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.026933, 0.302770, 0.635300, 1.251054, 2.482563",\ + "0.031156, 0.303775, 0.637236, 1.251054, 2.482563",\ + "0.043792, 0.306003, 0.637272, 1.251054, 2.482563",\ + "0.055737, 0.309242, 0.637376, 1.251054, 2.482563",\ + "0.131941, 0.347209, 0.643620, 1.253596, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.069683, 0.173907, 0.285093, 0.488958, 0.896688",\ + "0.157089, 0.261225, 0.372374, 0.576263, 0.984041",\ + "0.237477, 0.341556, 0.452401, 0.656292, 1.064073",\ + "0.294246, 0.399105, 0.509943, 0.713536, 1.120720",\ + "0.588850, 0.702448, 0.813573, 1.016548, 1.422497"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.026485, 0.189160, 0.389094, 0.760831, 1.504305",\ + "0.026485, 0.189310, 0.389596, 0.760831, 1.504305",\ + "0.027485, 0.189310, 0.389596, 0.760831, 1.504305",\ + "0.029472, 0.189310, 0.389596, 0.760831, 1.504305",\ + "0.047715, 0.193213, 0.389596, 0.760831, 1.504585"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[47]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.050293, 0.202790, 0.377762, 0.700122, 1.344843",\ + "0.136725, 0.289965, 0.464866, 0.786836, 1.430777",\ + "0.220450, 0.378091, 0.552820, 0.874457, 1.517732",\ + "0.278888, 0.442483, 0.616935, 0.938370, 1.581241",\ + "0.582056, 0.792362, 0.967313, 1.287108, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.026933, 0.302770, 0.635300, 1.249818, 2.473548",\ + "0.031156, 0.303775, 0.637236, 1.249818, 2.473548",\ + "0.043792, 0.306003, 0.637272, 1.249893, 2.473548",\ + "0.055737, 0.309242, 0.637376, 1.250639, 2.473548",\ + "0.131941, 0.347209, 0.643620, 1.253596, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.069683, 0.173907, 0.285093, 0.488958, 0.896688",\ + "0.157089, 0.261225, 0.372374, 0.576263, 0.984041",\ + "0.237477, 0.341556, 0.452401, 0.656292, 1.064073",\ + "0.294246, 0.399105, 0.509943, 0.713536, 1.120720",\ + "0.588850, 0.702448, 0.813573, 1.016548, 1.422497"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.026485, 0.188353, 0.387584, 0.758599, 1.500628",\ + "0.026485, 0.188353, 0.387584, 0.758599, 1.500628",\ + "0.027485, 0.188353, 0.387584, 0.758599, 1.500628",\ + "0.029472, 0.188961, 0.388043, 0.759501, 1.502419",\ + "0.047715, 0.193213, 0.388117, 0.760273, 1.504585"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[47]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026933, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.213301, 0.167430, 0.137235, 0.125895, 0.139600",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026485, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.266577, 0.191265, 0.123161, 0.100283, 0.164008",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[47]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026933, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.141091, -0.098663, -0.064202, -0.024280, 0.287954",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026485, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.174450, -0.108363, -0.050457, -0.008429, 0.211751",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[47]_hldr*/ + +} /* end of pin tl_o[47] */ + +pin("tl_o[46]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001816 ; + + /* Other user defined attributes. */ + original_pin : tl_o[46]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.047653, 0.200824, 0.376286, 0.699138, 1.344843",\ + "0.133940, 0.287998, 0.463391, 0.785853, 1.430777",\ + "0.217014, 0.376126, 0.551347, 0.873475, 1.517732",\ + "0.274798, 0.440522, 0.615463, 0.937389, 1.581241",\ + "0.574010, 0.790389, 0.965848, 1.286131, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.023390, 0.299039, 0.632479, 1.249174, 2.482563",\ + "0.027983, 0.300023, 0.634430, 1.249174, 2.482563",\ + "0.041008, 0.302285, 0.634466, 1.249174, 2.482563",\ + "0.052904, 0.305573, 0.634567, 1.249174, 2.482563",\ + "0.128390, 0.344019, 0.640826, 1.251733, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.067359, 0.172690, 0.284194, 0.488370, 0.896722",\ + "0.154772, 0.260009, 0.371475, 0.575675, 0.984076",\ + "0.235124, 0.340344, 0.451502, 0.655704, 1.064107",\ + "0.291800, 0.397892, 0.509045, 0.712948, 1.120755",\ + "0.585433, 0.701229, 0.812678, 1.015963, 1.422532"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.024087, 0.186982, 0.387454, 0.759758, 1.504368",\ + "0.024087, 0.187126, 0.387958, 0.759758, 1.504368",\ + "0.025192, 0.187126, 0.387958, 0.759758, 1.504368",\ + "0.027281, 0.187126, 0.387958, 0.759758, 1.504368",\ + "0.045983, 0.191111, 0.387958, 0.759758, 1.504648"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[46]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.047653, 0.200824, 0.376286, 0.699138, 1.344843",\ + "0.133940, 0.287998, 0.463391, 0.785853, 1.430777",\ + "0.217014, 0.376126, 0.551347, 0.873475, 1.517732",\ + "0.274798, 0.440522, 0.615463, 0.937389, 1.581241",\ + "0.574010, 0.790389, 0.965848, 1.286131, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.023390, 0.299039, 0.632479, 1.247947, 2.473548",\ + "0.027983, 0.300023, 0.634430, 1.247947, 2.473548",\ + "0.041008, 0.302285, 0.634466, 1.248022, 2.473548",\ + "0.052904, 0.305573, 0.634567, 1.248766, 2.473548",\ + "0.128390, 0.344019, 0.640826, 1.251733, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.067359, 0.172690, 0.284194, 0.488370, 0.896722",\ + "0.154772, 0.260009, 0.371475, 0.575675, 0.984076",\ + "0.235124, 0.340344, 0.451502, 0.655704, 1.064107",\ + "0.291800, 0.397892, 0.509045, 0.712948, 1.120755",\ + "0.585433, 0.701229, 0.812678, 1.015963, 1.422532"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.024087, 0.186184, 0.385947, 0.757528, 1.500690",\ + "0.024087, 0.186184, 0.385947, 0.757528, 1.500690",\ + "0.025192, 0.186184, 0.385947, 0.757528, 1.500690",\ + "0.027281, 0.186796, 0.386404, 0.758430, 1.502482",\ + "0.045983, 0.191111, 0.386476, 0.759200, 1.504648"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[46]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.023390, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.211804, 0.165933, 0.135738, 0.124398, 0.138103",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024087, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.265681, 0.190370, 0.122265, 0.099388, 0.163112",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[46]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.023390, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.139610, -0.097182, -0.062721, -0.022799, 0.289435",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024087, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.173560, -0.107472, -0.049566, -0.007539, 0.212641",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[46]_hldr*/ + +} /* end of pin tl_o[46] */ + +pin("tl_o[45]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002729 ; + + /* Other user defined attributes. */ + original_pin : tl_o[45]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.050122, 0.202663, 0.377667, 0.700059, 1.344843",\ + "0.136545, 0.289838, 0.464771, 0.786773, 1.430777",\ + "0.220228, 0.377964, 0.552725, 0.874394, 1.517732",\ + "0.278624, 0.442356, 0.616840, 0.938307, 1.581241",\ + "0.581536, 0.792234, 0.967218, 1.287045, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.026704, 0.302529, 0.635118, 1.250933, 2.482563",\ + "0.030951, 0.303532, 0.637054, 1.250933, 2.482563",\ + "0.043612, 0.305763, 0.637091, 1.250933, 2.482563",\ + "0.055554, 0.309005, 0.637195, 1.250933, 2.482563",\ + "0.131711, 0.347003, 0.643440, 1.253476, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.069519, 0.173822, 0.285028, 0.488913, 0.896683",\ + "0.156925, 0.261140, 0.372309, 0.576218, 0.984036",\ + "0.237311, 0.341470, 0.452336, 0.656247, 1.064068",\ + "0.294074, 0.399020, 0.509878, 0.713491, 1.120715",\ + "0.588609, 0.702362, 0.813509, 1.016503, 1.422492"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.026316, 0.189006, 0.388975, 0.760749, 1.504296",\ + "0.026316, 0.189156, 0.389477, 0.760749, 1.504296",\ + "0.027323, 0.189156, 0.389477, 0.760749, 1.504296",\ + "0.029318, 0.189156, 0.389477, 0.760749, 1.504296",\ + "0.047593, 0.193065, 0.389477, 0.760749, 1.504576"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[45]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.050122, 0.202663, 0.377667, 0.700059, 1.344843",\ + "0.136545, 0.289838, 0.464771, 0.786773, 1.430777",\ + "0.220228, 0.377964, 0.552725, 0.874394, 1.517732",\ + "0.278624, 0.442356, 0.616840, 0.938307, 1.581241",\ + "0.581536, 0.792234, 0.967218, 1.287045, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.026704, 0.302529, 0.635118, 1.249697, 2.473548",\ + "0.030951, 0.303532, 0.637054, 1.249697, 2.473548",\ + "0.043612, 0.305763, 0.637091, 1.249772, 2.473548",\ + "0.055554, 0.309005, 0.637195, 1.250518, 2.473548",\ + "0.131711, 0.347003, 0.643440, 1.253476, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.069519, 0.173822, 0.285028, 0.488913, 0.896683",\ + "0.156925, 0.261140, 0.372309, 0.576218, 0.984036",\ + "0.237311, 0.341470, 0.452336, 0.656247, 1.064068",\ + "0.294074, 0.399020, 0.509878, 0.713491, 1.120715",\ + "0.588609, 0.702362, 0.813509, 1.016503, 1.422492"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.026316, 0.188200, 0.387466, 0.758517, 1.500619",\ + "0.026316, 0.188200, 0.387466, 0.758517, 1.500619",\ + "0.027323, 0.188200, 0.387466, 0.758517, 1.500619",\ + "0.029318, 0.188809, 0.387924, 0.759419, 1.502410",\ + "0.047593, 0.193065, 0.387998, 0.760191, 1.504576"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[45]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026704, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.213204, 0.167333, 0.137138, 0.125798, 0.139503",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026316, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.266513, 0.191202, 0.123098, 0.100220, 0.163945",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[45]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026704, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.140996, -0.098567, -0.064106, -0.024184, 0.288050",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026316, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.174387, -0.108300, -0.050394, -0.008366, 0.211814",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[45]_hldr*/ + +} /* end of pin tl_o[45] */ + +pin("tl_o[44]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002742 ; + + /* Other user defined attributes. */ + original_pin : tl_o[44]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.050158, 0.202690, 0.377687, 0.700072, 1.344843",\ + "0.136583, 0.289865, 0.464791, 0.786786, 1.430777",\ + "0.220274, 0.377991, 0.552745, 0.874407, 1.517732",\ + "0.278679, 0.442383, 0.616860, 0.938320, 1.581241",\ + "0.581645, 0.792261, 0.967238, 1.287058, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.026752, 0.302579, 0.635156, 1.250959, 2.482563",\ + "0.030994, 0.303583, 0.637092, 1.250959, 2.482563",\ + "0.043650, 0.305813, 0.637129, 1.250959, 2.482563",\ + "0.055592, 0.309055, 0.637233, 1.250959, 2.482563",\ + "0.131760, 0.347046, 0.643478, 1.253501, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.069547, 0.173836, 0.285039, 0.488919, 0.896680",\ + "0.156953, 0.261154, 0.372320, 0.576224, 0.984034",\ + "0.237340, 0.341485, 0.452347, 0.656253, 1.064065",\ + "0.294104, 0.399034, 0.509889, 0.713497, 1.120713",\ + "0.588650, 0.702376, 0.813519, 1.016509, 1.422490"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.026345, 0.189032, 0.388994, 0.760760, 1.504292",\ + "0.026345, 0.189182, 0.389496, 0.760760, 1.504292",\ + "0.027351, 0.189182, 0.389496, 0.760760, 1.504292",\ + "0.029344, 0.189182, 0.389496, 0.760760, 1.504292",\ + "0.047614, 0.193091, 0.389496, 0.760760, 1.504572"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[44]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.050158, 0.202690, 0.377687, 0.700072, 1.344843",\ + "0.136583, 0.289865, 0.464791, 0.786786, 1.430777",\ + "0.220274, 0.377991, 0.552745, 0.874407, 1.517732",\ + "0.278679, 0.442383, 0.616860, 0.938320, 1.581241",\ + "0.581645, 0.792261, 0.967238, 1.287058, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.026752, 0.302579, 0.635156, 1.249722, 2.473548",\ + "0.030994, 0.303583, 0.637092, 1.249722, 2.473548",\ + "0.043650, 0.305813, 0.637129, 1.249798, 2.473548",\ + "0.055592, 0.309055, 0.637233, 1.250543, 2.473548",\ + "0.131760, 0.347046, 0.643478, 1.253501, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.069547, 0.173836, 0.285039, 0.488919, 0.896680",\ + "0.156953, 0.261154, 0.372320, 0.576224, 0.984034",\ + "0.237340, 0.341485, 0.452347, 0.656253, 1.064065",\ + "0.294104, 0.399034, 0.509889, 0.713497, 1.120713",\ + "0.588650, 0.702376, 0.813519, 1.016509, 1.422490"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.026345, 0.188226, 0.387484, 0.758528, 1.500614",\ + "0.026345, 0.188226, 0.387484, 0.758528, 1.500614",\ + "0.027351, 0.188226, 0.387484, 0.758528, 1.500614",\ + "0.029344, 0.188835, 0.387943, 0.759431, 1.502406",\ + "0.047614, 0.193091, 0.388017, 0.760202, 1.504572"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[44]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026752, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.213225, 0.167354, 0.137159, 0.125818, 0.139523",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026345, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.266524, 0.191213, 0.123109, 0.100231, 0.163955",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[44]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026752, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.141016, -0.098588, -0.064126, -0.024204, 0.288030",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026345, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.174398, -0.108311, -0.050405, -0.008377, 0.211803",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[44]_hldr*/ + +} /* end of pin tl_o[44] */ + +pin("tl_o[43]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002272 ; + + /* Other user defined attributes. */ + original_pin : tl_o[43]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.048885, 0.201742, 0.376975, 0.699598, 1.344843",\ + "0.135240, 0.288916, 0.464080, 0.786312, 1.430777",\ + "0.218618, 0.377044, 0.552035, 0.873934, 1.517732",\ + "0.276707, 0.441437, 0.616150, 0.937847, 1.581241",\ + "0.577766, 0.791310, 0.966532, 1.286587, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.025044, 0.300781, 0.633796, 1.250052, 2.482563",\ + "0.029464, 0.301774, 0.635740, 1.250052, 2.482563",\ + "0.042308, 0.304021, 0.635776, 1.250052, 2.482563",\ + "0.054226, 0.307286, 0.635878, 1.250052, 2.482563",\ + "0.130048, 0.345508, 0.642131, 1.252603, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.068436, 0.173254, 0.284610, 0.488640, 0.896702",\ + "0.155845, 0.260572, 0.371891, 0.575945, 0.984055",\ + "0.236214, 0.340905, 0.451917, 0.655974, 1.064087",\ + "0.292933, 0.398454, 0.509460, 0.713218, 1.120734",\ + "0.587016, 0.701794, 0.813092, 1.016232, 1.422511"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.025198, 0.187991, 0.388212, 0.760251, 1.504330",\ + "0.025198, 0.188138, 0.388715, 0.760251, 1.504330",\ + "0.026254, 0.188138, 0.388715, 0.760251, 1.504330",\ + "0.028296, 0.188138, 0.388715, 0.760251, 1.504330",\ + "0.046785, 0.192085, 0.388715, 0.760251, 1.504610"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[43]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.048885, 0.201742, 0.376975, 0.699598, 1.344843",\ + "0.135240, 0.288916, 0.464080, 0.786312, 1.430777",\ + "0.218618, 0.377044, 0.552035, 0.873934, 1.517732",\ + "0.276707, 0.441437, 0.616150, 0.937847, 1.581241",\ + "0.577766, 0.791310, 0.966532, 1.286587, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.025044, 0.300781, 0.633796, 1.248820, 2.473548",\ + "0.029464, 0.301774, 0.635740, 1.248820, 2.473548",\ + "0.042308, 0.304021, 0.635776, 1.248896, 2.473548",\ + "0.054226, 0.307286, 0.635878, 1.249640, 2.473548",\ + "0.130048, 0.345508, 0.642131, 1.252603, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.068436, 0.173254, 0.284610, 0.488640, 0.896702",\ + "0.155845, 0.260572, 0.371891, 0.575945, 0.984055",\ + "0.236214, 0.340905, 0.451917, 0.655974, 1.064087",\ + "0.292933, 0.398454, 0.509460, 0.713218, 1.120734",\ + "0.587016, 0.701794, 0.813092, 1.016232, 1.422511"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.025198, 0.187189, 0.386704, 0.758020, 1.500653",\ + "0.025198, 0.187189, 0.386704, 0.758020, 1.500653",\ + "0.026254, 0.187189, 0.386704, 0.758020, 1.500653",\ + "0.028296, 0.187799, 0.387161, 0.758922, 1.502445",\ + "0.046785, 0.192085, 0.387234, 0.759693, 1.504610"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[43]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025044, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.212503, 0.166632, 0.136437, 0.125097, 0.138801",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025198, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.266096, 0.190785, 0.122680, 0.099803, 0.163527",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[43]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025044, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.140302, -0.097874, -0.063412, -0.023490, 0.288744",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025198, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.173972, -0.107885, -0.049979, -0.007951, 0.212229",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[43]_hldr*/ + +} /* end of pin tl_o[43] */ + +pin("tl_o[42]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002445 ; + + /* Other user defined attributes. */ + original_pin : tl_o[42]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.049354, 0.202091, 0.377237, 0.699773, 1.344843",\ + "0.135735, 0.289266, 0.464342, 0.786487, 1.430777",\ + "0.219229, 0.377393, 0.552297, 0.874108, 1.517732",\ + "0.277434, 0.441786, 0.616412, 0.938021, 1.581241",\ + "0.579196, 0.791661, 0.966792, 1.286761, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.025674, 0.301444, 0.634297, 1.250386, 2.482563",\ + "0.030028, 0.302441, 0.636238, 1.250386, 2.482563",\ + "0.042803, 0.304681, 0.636274, 1.250386, 2.482563",\ + "0.054730, 0.307938, 0.636378, 1.250386, 2.482563",\ + "0.130679, 0.346075, 0.642627, 1.252934, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.068801, 0.173445, 0.284745, 0.488720, 0.896671",\ + "0.156209, 0.260764, 0.372026, 0.576025, 0.984024",\ + "0.236584, 0.341096, 0.452053, 0.656054, 1.064056",\ + "0.293318, 0.398645, 0.509595, 0.713298, 1.120704",\ + "0.587553, 0.701985, 0.813226, 1.016311, 1.422480"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.025575, 0.188333, 0.388458, 0.760397, 1.504274",\ + "0.025575, 0.188481, 0.388961, 0.760397, 1.504274",\ + "0.026615, 0.188481, 0.388961, 0.760397, 1.504274",\ + "0.028641, 0.188481, 0.388961, 0.760397, 1.504274",\ + "0.047058, 0.192416, 0.388961, 0.760397, 1.504554"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[42]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.049354, 0.202091, 0.377237, 0.699773, 1.344843",\ + "0.135735, 0.289266, 0.464342, 0.786487, 1.430777",\ + "0.219229, 0.377393, 0.552297, 0.874108, 1.517732",\ + "0.277434, 0.441786, 0.616412, 0.938021, 1.581241",\ + "0.579196, 0.791661, 0.966792, 1.286761, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.025674, 0.301444, 0.634297, 1.249153, 2.473548",\ + "0.030028, 0.302441, 0.636238, 1.249153, 2.473548",\ + "0.042803, 0.304681, 0.636274, 1.249228, 2.473548",\ + "0.054730, 0.307938, 0.636378, 1.249973, 2.473548",\ + "0.130679, 0.346075, 0.642627, 1.252934, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.068801, 0.173445, 0.284745, 0.488720, 0.896671",\ + "0.156209, 0.260764, 0.372026, 0.576025, 0.984024",\ + "0.236584, 0.341096, 0.452053, 0.656054, 1.064056",\ + "0.293318, 0.398645, 0.509595, 0.713298, 1.120704",\ + "0.587553, 0.701985, 0.813226, 1.016311, 1.422480"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.025575, 0.187530, 0.386950, 0.758165, 1.500597",\ + "0.025575, 0.187530, 0.386950, 0.758165, 1.500597",\ + "0.026615, 0.187530, 0.386950, 0.758165, 1.500597",\ + "0.028641, 0.188139, 0.387407, 0.759068, 1.502388",\ + "0.047058, 0.192416, 0.387481, 0.759838, 1.504554"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[42]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025674, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.212769, 0.166898, 0.136703, 0.125363, 0.139067",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025575, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.266237, 0.190925, 0.122821, 0.099943, 0.163668",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[42]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025674, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.140565, -0.098137, -0.063675, -0.023754, 0.288480",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025575, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.174112, -0.108025, -0.050119, -0.008091, 0.212089",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[42]_hldr*/ + +} /* end of pin tl_o[42] */ + +pin("tl_o[41]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002414 ; + + /* Other user defined attributes. */ + original_pin : tl_o[41]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.049270, 0.202028, 0.377190, 0.699741, 1.344843",\ + "0.135646, 0.289203, 0.464294, 0.786455, 1.430777",\ + "0.219118, 0.377330, 0.552249, 0.874077, 1.517732",\ + "0.277303, 0.441723, 0.616364, 0.937990, 1.581241",\ + "0.578938, 0.791597, 0.966745, 1.286729, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.025560, 0.301324, 0.634207, 1.250326, 2.482563",\ + "0.029927, 0.302321, 0.636148, 1.250326, 2.482563",\ + "0.042713, 0.304562, 0.636184, 1.250326, 2.482563",\ + "0.054639, 0.307820, 0.636287, 1.250326, 2.482563",\ + "0.130565, 0.345973, 0.642537, 1.252874, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.068784, 0.173437, 0.284746, 0.488731, 0.896702",\ + "0.156193, 0.260755, 0.372027, 0.576036, 0.984055",\ + "0.236567, 0.341087, 0.452054, 0.656065, 1.064087",\ + "0.293300, 0.398636, 0.509596, 0.713309, 1.120735",\ + "0.587529, 0.701976, 0.813228, 1.016322, 1.422511"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.025558, 0.188317, 0.388460, 0.760417, 1.504331",\ + "0.025558, 0.188465, 0.388963, 0.760417, 1.504331",\ + "0.026598, 0.188465, 0.388963, 0.760417, 1.504331",\ + "0.028625, 0.188465, 0.388963, 0.760417, 1.504331",\ + "0.047045, 0.192400, 0.388963, 0.760417, 1.504611"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[41]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.049270, 0.202028, 0.377190, 0.699741, 1.344843",\ + "0.135646, 0.289203, 0.464294, 0.786455, 1.430777",\ + "0.219118, 0.377330, 0.552249, 0.874077, 1.517732",\ + "0.277303, 0.441723, 0.616364, 0.937990, 1.581241",\ + "0.578938, 0.791597, 0.966745, 1.286729, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.025560, 0.301324, 0.634207, 1.249093, 2.473548",\ + "0.029927, 0.302321, 0.636148, 1.249093, 2.473548",\ + "0.042713, 0.304562, 0.636184, 1.249168, 2.473548",\ + "0.054639, 0.307820, 0.636287, 1.249913, 2.473548",\ + "0.130565, 0.345973, 0.642537, 1.252874, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.068784, 0.173437, 0.284746, 0.488731, 0.896702",\ + "0.156193, 0.260755, 0.372027, 0.576036, 0.984055",\ + "0.236567, 0.341087, 0.452054, 0.656065, 1.064087",\ + "0.293300, 0.398636, 0.509596, 0.713309, 1.120735",\ + "0.587529, 0.701976, 0.813228, 1.016322, 1.422511"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.025558, 0.187514, 0.386952, 0.758186, 1.500654",\ + "0.025558, 0.187514, 0.386952, 0.758186, 1.500654",\ + "0.026598, 0.187514, 0.386952, 0.758186, 1.500654",\ + "0.028625, 0.188124, 0.387410, 0.759088, 1.502445",\ + "0.047045, 0.192400, 0.387483, 0.759859, 1.504611"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[41]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025560, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.212721, 0.166850, 0.136655, 0.125315, 0.139019",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025558, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.266230, 0.190919, 0.122815, 0.099937, 0.163661",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[41]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025560, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.140517, -0.098089, -0.063628, -0.023706, 0.288528",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025558, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.174106, -0.108018, -0.050112, -0.008085, 0.212095",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[41]_hldr*/ + +} /* end of pin tl_o[41] */ + +pin("tl_o[40]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001805 ; + + /* Other user defined attributes. */ + original_pin : tl_o[40]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.047624, 0.200802, 0.376269, 0.699127, 1.344843",\ + "0.133909, 0.287977, 0.463375, 0.785842, 1.430777",\ + "0.216976, 0.376105, 0.551331, 0.873464, 1.517732",\ + "0.274753, 0.440500, 0.615446, 0.937378, 1.581241",\ + "0.573921, 0.790368, 0.965832, 1.286120, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.023351, 0.298998, 0.632448, 1.249153, 2.482563",\ + "0.027948, 0.299981, 0.634399, 1.249153, 2.482563",\ + "0.040978, 0.302244, 0.634435, 1.249153, 2.482563",\ + "0.052873, 0.305533, 0.634536, 1.249153, 2.482563",\ + "0.128351, 0.343984, 0.640795, 1.251713, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.067343, 0.172682, 0.284189, 0.488369, 0.896728",\ + "0.154756, 0.260000, 0.371470, 0.575674, 0.984081",\ + "0.235108, 0.340335, 0.451497, 0.655702, 1.064113",\ + "0.291783, 0.397884, 0.509040, 0.712947, 1.120760",\ + "0.585410, 0.701221, 0.812673, 1.015961, 1.422537"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.024071, 0.186967, 0.387445, 0.759756, 1.504378",\ + "0.024071, 0.187111, 0.387949, 0.759756, 1.504378",\ + "0.025176, 0.187111, 0.387949, 0.759756, 1.504378",\ + "0.027266, 0.187111, 0.387949, 0.759756, 1.504378",\ + "0.045971, 0.191097, 0.387949, 0.759756, 1.504658"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[40]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.047624, 0.200802, 0.376269, 0.699127, 1.344843",\ + "0.133909, 0.287977, 0.463375, 0.785842, 1.430777",\ + "0.216976, 0.376105, 0.551331, 0.873464, 1.517732",\ + "0.274753, 0.440500, 0.615446, 0.937378, 1.581241",\ + "0.573921, 0.790368, 0.965832, 1.286120, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.023351, 0.298998, 0.632448, 1.247926, 2.473548",\ + "0.027948, 0.299981, 0.634399, 1.247926, 2.473548",\ + "0.040978, 0.302244, 0.634435, 1.248002, 2.473548",\ + "0.052873, 0.305533, 0.634536, 1.248745, 2.473548",\ + "0.128351, 0.343984, 0.640795, 1.251713, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.067343, 0.172682, 0.284189, 0.488369, 0.896728",\ + "0.154756, 0.260000, 0.371470, 0.575674, 0.984081",\ + "0.235108, 0.340335, 0.451497, 0.655702, 1.064113",\ + "0.291783, 0.397884, 0.509040, 0.712947, 1.120760",\ + "0.585410, 0.701221, 0.812673, 1.015961, 1.422537"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.024071, 0.186169, 0.385939, 0.757526, 1.500700",\ + "0.024071, 0.186169, 0.385939, 0.757526, 1.500700",\ + "0.025176, 0.186169, 0.385939, 0.757526, 1.500700",\ + "0.027266, 0.186781, 0.386395, 0.758427, 1.502492",\ + "0.045971, 0.191097, 0.386467, 0.759197, 1.504658"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[40]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.023351, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.211788, 0.165917, 0.135722, 0.124381, 0.138086",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024071, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.265675, 0.190363, 0.122259, 0.099381, 0.163106",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[40]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.023351, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.139594, -0.097166, -0.062704, -0.022783, 0.289451",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024071, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.173554, -0.107466, -0.049560, -0.007532, 0.212647",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[40]_hldr*/ + +} /* end of pin tl_o[40] */ + +pin("tl_o[39]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002265 ; + + /* Other user defined attributes. */ + original_pin : tl_o[39]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.048867, 0.201728, 0.376965, 0.699591, 1.344843",\ + "0.135221, 0.288903, 0.464069, 0.786305, 1.430777",\ + "0.218594, 0.377030, 0.552024, 0.873927, 1.517732",\ + "0.276679, 0.441423, 0.616140, 0.937840, 1.581241",\ + "0.577710, 0.791296, 0.966522, 1.286580, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.025020, 0.300755, 0.633777, 1.250039, 2.482563",\ + "0.029442, 0.301748, 0.635720, 1.250039, 2.482563",\ + "0.042289, 0.303995, 0.635756, 1.250039, 2.482563",\ + "0.054207, 0.307260, 0.635859, 1.250039, 2.482563",\ + "0.130023, 0.345486, 0.642111, 1.252590, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.068420, 0.173246, 0.284604, 0.488637, 0.896702",\ + "0.155830, 0.260564, 0.371885, 0.575942, 0.984056",\ + "0.236199, 0.340897, 0.451912, 0.655970, 1.064088",\ + "0.292917, 0.398446, 0.509454, 0.713215, 1.120735",\ + "0.586994, 0.701786, 0.813086, 1.016228, 1.422512"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.025182, 0.187976, 0.388201, 0.760245, 1.504332",\ + "0.025182, 0.188123, 0.388704, 0.760245, 1.504332",\ + "0.026239, 0.188123, 0.388704, 0.760245, 1.504332",\ + "0.028282, 0.188123, 0.388704, 0.760245, 1.504332",\ + "0.046774, 0.192071, 0.388704, 0.760245, 1.504612"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[39]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.048867, 0.201728, 0.376965, 0.699591, 1.344843",\ + "0.135221, 0.288903, 0.464069, 0.786305, 1.430777",\ + "0.218594, 0.377030, 0.552024, 0.873927, 1.517732",\ + "0.276679, 0.441423, 0.616140, 0.937840, 1.581241",\ + "0.577710, 0.791296, 0.966522, 1.286580, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.025020, 0.300755, 0.633777, 1.248807, 2.473548",\ + "0.029442, 0.301748, 0.635720, 1.248807, 2.473548",\ + "0.042289, 0.303995, 0.635756, 1.248883, 2.473548",\ + "0.054207, 0.307260, 0.635859, 1.249627, 2.473548",\ + "0.130023, 0.345486, 0.642111, 1.252590, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.068420, 0.173246, 0.284604, 0.488637, 0.896702",\ + "0.155830, 0.260564, 0.371885, 0.575942, 0.984056",\ + "0.236199, 0.340897, 0.451912, 0.655970, 1.064088",\ + "0.292917, 0.398446, 0.509454, 0.713215, 1.120735",\ + "0.586994, 0.701786, 0.813086, 1.016228, 1.422512"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.025182, 0.187175, 0.386693, 0.758014, 1.500654",\ + "0.025182, 0.187175, 0.386693, 0.758014, 1.500654",\ + "0.026239, 0.187175, 0.386693, 0.758014, 1.500654",\ + "0.028282, 0.187785, 0.387151, 0.758916, 1.502446",\ + "0.046774, 0.192071, 0.387224, 0.759686, 1.504612"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[39]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025020, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.212492, 0.166621, 0.136427, 0.125086, 0.138791",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025182, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.266090, 0.190779, 0.122675, 0.099797, 0.163521",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[39]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025020, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.140291, -0.097863, -0.063402, -0.023480, 0.288754",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025182, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.173966, -0.107879, -0.049973, -0.007945, 0.212235",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[39]_hldr*/ + +} /* end of pin tl_o[39] */ + +pin("tl_o[38]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002414 ; + + /* Other user defined attributes. */ + original_pin : tl_o[38]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.049270, 0.202028, 0.377190, 0.699741, 1.344843",\ + "0.135646, 0.289203, 0.464294, 0.786455, 1.430777",\ + "0.219118, 0.377330, 0.552249, 0.874077, 1.517732",\ + "0.277303, 0.441723, 0.616364, 0.937990, 1.581241",\ + "0.578938, 0.791597, 0.966745, 1.286729, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.025560, 0.301324, 0.634207, 1.250326, 2.482563",\ + "0.029927, 0.302321, 0.636148, 1.250326, 2.482563",\ + "0.042713, 0.304562, 0.636184, 1.250326, 2.482563",\ + "0.054639, 0.307820, 0.636287, 1.250326, 2.482563",\ + "0.130565, 0.345973, 0.642537, 1.252874, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.068784, 0.173437, 0.284746, 0.488731, 0.896702",\ + "0.156193, 0.260755, 0.372027, 0.576036, 0.984055",\ + "0.236567, 0.341087, 0.452054, 0.656065, 1.064087",\ + "0.293300, 0.398636, 0.509596, 0.713309, 1.120735",\ + "0.587529, 0.701976, 0.813228, 1.016322, 1.422511"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.025558, 0.188317, 0.388460, 0.760417, 1.504331",\ + "0.025558, 0.188465, 0.388963, 0.760417, 1.504331",\ + "0.026598, 0.188465, 0.388963, 0.760417, 1.504331",\ + "0.028625, 0.188465, 0.388963, 0.760417, 1.504331",\ + "0.047045, 0.192400, 0.388963, 0.760417, 1.504611"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[38]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.049270, 0.202028, 0.377190, 0.699741, 1.344843",\ + "0.135646, 0.289203, 0.464294, 0.786455, 1.430777",\ + "0.219118, 0.377330, 0.552249, 0.874077, 1.517732",\ + "0.277303, 0.441723, 0.616364, 0.937990, 1.581241",\ + "0.578938, 0.791597, 0.966745, 1.286729, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.025560, 0.301324, 0.634207, 1.249093, 2.473548",\ + "0.029927, 0.302321, 0.636148, 1.249093, 2.473548",\ + "0.042713, 0.304562, 0.636184, 1.249168, 2.473548",\ + "0.054639, 0.307820, 0.636287, 1.249913, 2.473548",\ + "0.130565, 0.345973, 0.642537, 1.252874, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.068784, 0.173437, 0.284746, 0.488731, 0.896702",\ + "0.156193, 0.260755, 0.372027, 0.576036, 0.984055",\ + "0.236567, 0.341087, 0.452054, 0.656065, 1.064087",\ + "0.293300, 0.398636, 0.509596, 0.713309, 1.120735",\ + "0.587529, 0.701976, 0.813228, 1.016322, 1.422511"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.025558, 0.187514, 0.386952, 0.758186, 1.500654",\ + "0.025558, 0.187514, 0.386952, 0.758186, 1.500654",\ + "0.026598, 0.187514, 0.386952, 0.758186, 1.500654",\ + "0.028625, 0.188124, 0.387410, 0.759088, 1.502445",\ + "0.047045, 0.192400, 0.387483, 0.759859, 1.504611"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[38]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025560, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.212721, 0.166850, 0.136655, 0.125315, 0.139019",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025558, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.266230, 0.190919, 0.122815, 0.099937, 0.163661",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[38]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025560, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.140517, -0.098089, -0.063628, -0.023706, 0.288528",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025558, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.174106, -0.108018, -0.050112, -0.008085, 0.212095",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[38]_hldr*/ + +} /* end of pin tl_o[38] */ + +pin("tl_o[37]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002445 ; + + /* Other user defined attributes. */ + original_pin : tl_o[37]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.049354, 0.202091, 0.377237, 0.699773, 1.344843",\ + "0.135735, 0.289266, 0.464342, 0.786487, 1.430777",\ + "0.219229, 0.377393, 0.552297, 0.874108, 1.517732",\ + "0.277434, 0.441786, 0.616412, 0.938021, 1.581241",\ + "0.579196, 0.791661, 0.966792, 1.286761, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.025674, 0.301444, 0.634297, 1.250386, 2.482563",\ + "0.030028, 0.302441, 0.636238, 1.250386, 2.482563",\ + "0.042803, 0.304681, 0.636274, 1.250386, 2.482563",\ + "0.054730, 0.307938, 0.636378, 1.250386, 2.482563",\ + "0.130679, 0.346075, 0.642627, 1.252934, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.068801, 0.173445, 0.284745, 0.488720, 0.896671",\ + "0.156209, 0.260764, 0.372026, 0.576025, 0.984024",\ + "0.236584, 0.341096, 0.452053, 0.656054, 1.064056",\ + "0.293318, 0.398645, 0.509595, 0.713298, 1.120704",\ + "0.587553, 0.701985, 0.813226, 1.016311, 1.422480"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.025575, 0.188333, 0.388458, 0.760397, 1.504274",\ + "0.025575, 0.188481, 0.388961, 0.760397, 1.504274",\ + "0.026615, 0.188481, 0.388961, 0.760397, 1.504274",\ + "0.028641, 0.188481, 0.388961, 0.760397, 1.504274",\ + "0.047058, 0.192416, 0.388961, 0.760397, 1.504554"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[37]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.049354, 0.202091, 0.377237, 0.699773, 1.344843",\ + "0.135735, 0.289266, 0.464342, 0.786487, 1.430777",\ + "0.219229, 0.377393, 0.552297, 0.874108, 1.517732",\ + "0.277434, 0.441786, 0.616412, 0.938021, 1.581241",\ + "0.579196, 0.791661, 0.966792, 1.286761, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.025674, 0.301444, 0.634297, 1.249153, 2.473548",\ + "0.030028, 0.302441, 0.636238, 1.249153, 2.473548",\ + "0.042803, 0.304681, 0.636274, 1.249228, 2.473548",\ + "0.054730, 0.307938, 0.636378, 1.249973, 2.473548",\ + "0.130679, 0.346075, 0.642627, 1.252934, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.068801, 0.173445, 0.284745, 0.488720, 0.896671",\ + "0.156209, 0.260764, 0.372026, 0.576025, 0.984024",\ + "0.236584, 0.341096, 0.452053, 0.656054, 1.064056",\ + "0.293318, 0.398645, 0.509595, 0.713298, 1.120704",\ + "0.587553, 0.701985, 0.813226, 1.016311, 1.422480"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.025575, 0.187530, 0.386950, 0.758165, 1.500597",\ + "0.025575, 0.187530, 0.386950, 0.758165, 1.500597",\ + "0.026615, 0.187530, 0.386950, 0.758165, 1.500597",\ + "0.028641, 0.188139, 0.387407, 0.759068, 1.502388",\ + "0.047058, 0.192416, 0.387481, 0.759838, 1.504554"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[37]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025674, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.212769, 0.166898, 0.136703, 0.125363, 0.139067",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025575, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.266237, 0.190925, 0.122821, 0.099943, 0.163668",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[37]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025674, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.140565, -0.098137, -0.063675, -0.023754, 0.288480",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025575, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.174112, -0.108025, -0.050119, -0.008091, 0.212089",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[37]_hldr*/ + +} /* end of pin tl_o[37] */ + +pin("tl_o[36]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001816 ; + + /* Other user defined attributes. */ + original_pin : tl_o[36]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.047653, 0.200824, 0.376286, 0.699138, 1.344843",\ + "0.133940, 0.287998, 0.463391, 0.785853, 1.430777",\ + "0.217014, 0.376126, 0.551347, 0.873475, 1.517732",\ + "0.274798, 0.440522, 0.615463, 0.937389, 1.581241",\ + "0.574010, 0.790389, 0.965848, 1.286131, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.023390, 0.299039, 0.632479, 1.249174, 2.482563",\ + "0.027983, 0.300023, 0.634430, 1.249174, 2.482563",\ + "0.041008, 0.302285, 0.634466, 1.249174, 2.482563",\ + "0.052904, 0.305573, 0.634567, 1.249174, 2.482563",\ + "0.128390, 0.344019, 0.640826, 1.251733, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.067359, 0.172690, 0.284194, 0.488370, 0.896722",\ + "0.154772, 0.260009, 0.371475, 0.575675, 0.984076",\ + "0.235124, 0.340344, 0.451502, 0.655704, 1.064107",\ + "0.291800, 0.397892, 0.509045, 0.712948, 1.120755",\ + "0.585433, 0.701229, 0.812678, 1.015963, 1.422532"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.024087, 0.186982, 0.387454, 0.759758, 1.504368",\ + "0.024087, 0.187126, 0.387958, 0.759758, 1.504368",\ + "0.025192, 0.187126, 0.387958, 0.759758, 1.504368",\ + "0.027281, 0.187126, 0.387958, 0.759758, 1.504368",\ + "0.045983, 0.191111, 0.387958, 0.759758, 1.504648"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[36]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.047653, 0.200824, 0.376286, 0.699138, 1.344843",\ + "0.133940, 0.287998, 0.463391, 0.785853, 1.430777",\ + "0.217014, 0.376126, 0.551347, 0.873475, 1.517732",\ + "0.274798, 0.440522, 0.615463, 0.937389, 1.581241",\ + "0.574010, 0.790389, 0.965848, 1.286131, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.023390, 0.299039, 0.632479, 1.247947, 2.473548",\ + "0.027983, 0.300023, 0.634430, 1.247947, 2.473548",\ + "0.041008, 0.302285, 0.634466, 1.248022, 2.473548",\ + "0.052904, 0.305573, 0.634567, 1.248766, 2.473548",\ + "0.128390, 0.344019, 0.640826, 1.251733, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.067359, 0.172690, 0.284194, 0.488370, 0.896722",\ + "0.154772, 0.260009, 0.371475, 0.575675, 0.984076",\ + "0.235124, 0.340344, 0.451502, 0.655704, 1.064107",\ + "0.291800, 0.397892, 0.509045, 0.712948, 1.120755",\ + "0.585433, 0.701229, 0.812678, 1.015963, 1.422532"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.024087, 0.186184, 0.385947, 0.757528, 1.500690",\ + "0.024087, 0.186184, 0.385947, 0.757528, 1.500690",\ + "0.025192, 0.186184, 0.385947, 0.757528, 1.500690",\ + "0.027281, 0.186796, 0.386404, 0.758430, 1.502482",\ + "0.045983, 0.191111, 0.386476, 0.759200, 1.504648"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[36]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.023390, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.211804, 0.165933, 0.135738, 0.124398, 0.138103",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024087, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.265681, 0.190370, 0.122265, 0.099388, 0.163112",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[36]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.023390, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.139610, -0.097182, -0.062721, -0.022799, 0.289435",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024087, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.173560, -0.107472, -0.049566, -0.007539, 0.212641",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[36]_hldr*/ + +} /* end of pin tl_o[36] */ + +pin("tl_o[35]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002254 ; + + /* Other user defined attributes. */ + original_pin : tl_o[35]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.048838, 0.201706, 0.376948, 0.699580, 1.344843",\ + "0.135190, 0.288881, 0.464053, 0.786294, 1.430777",\ + "0.218556, 0.377008, 0.552008, 0.873916, 1.517732",\ + "0.276634, 0.441402, 0.616124, 0.937829, 1.581241",\ + "0.577621, 0.791275, 0.966506, 1.286569, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.024980, 0.300714, 0.633745, 1.250018, 2.482564",\ + "0.029407, 0.301707, 0.635689, 1.250018, 2.482564",\ + "0.042258, 0.303954, 0.635725, 1.250018, 2.482564",\ + "0.054175, 0.307220, 0.635828, 1.250018, 2.482564",\ + "0.129984, 0.345451, 0.642080, 1.252569, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.068404, 0.173238, 0.284599, 0.488635, 0.896708",\ + "0.155814, 0.260556, 0.371880, 0.575940, 0.984061",\ + "0.236182, 0.340889, 0.451907, 0.655969, 1.064093",\ + "0.292900, 0.398438, 0.509450, 0.713213, 1.120741",\ + "0.586970, 0.701777, 0.813081, 1.016227, 1.422517"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.025166, 0.187961, 0.388192, 0.760242, 1.504342",\ + "0.025166, 0.188108, 0.388695, 0.760242, 1.504342",\ + "0.026223, 0.188108, 0.388695, 0.760242, 1.504342",\ + "0.028267, 0.188108, 0.388695, 0.760242, 1.504342",\ + "0.046762, 0.192057, 0.388695, 0.760242, 1.504622"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[35]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.048838, 0.201706, 0.376948, 0.699580, 1.344843",\ + "0.135190, 0.288881, 0.464053, 0.786294, 1.430777",\ + "0.218556, 0.377008, 0.552008, 0.873916, 1.517732",\ + "0.276634, 0.441402, 0.616124, 0.937829, 1.581241",\ + "0.577621, 0.791275, 0.966506, 1.286569, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.024980, 0.300714, 0.633745, 1.248787, 2.473548",\ + "0.029407, 0.301707, 0.635689, 1.248787, 2.473548",\ + "0.042258, 0.303954, 0.635725, 1.248862, 2.473548",\ + "0.054175, 0.307220, 0.635828, 1.249606, 2.473548",\ + "0.129984, 0.345451, 0.642080, 1.252569, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.068404, 0.173238, 0.284599, 0.488635, 0.896708",\ + "0.155814, 0.260556, 0.371880, 0.575940, 0.984061",\ + "0.236182, 0.340889, 0.451907, 0.655969, 1.064093",\ + "0.292900, 0.398438, 0.509450, 0.713213, 1.120741",\ + "0.586970, 0.701777, 0.813081, 1.016227, 1.422517"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.025166, 0.187160, 0.386684, 0.758011, 1.500664",\ + "0.025166, 0.187160, 0.386684, 0.758011, 1.500664",\ + "0.026223, 0.187160, 0.386684, 0.758011, 1.500664",\ + "0.028267, 0.187770, 0.387142, 0.758913, 1.502456",\ + "0.046762, 0.192057, 0.387215, 0.759684, 1.504622"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[35]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024980, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.212476, 0.166605, 0.136410, 0.125070, 0.138775",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025166, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.266084, 0.190773, 0.122668, 0.099790, 0.163515",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[35]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024980, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.140275, -0.097847, -0.063386, -0.023464, 0.288770",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025166, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.173960, -0.107873, -0.049967, -0.007939, 0.212241",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[35]_hldr*/ + +} /* end of pin tl_o[35] */ + +pin("tl_o[34]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001996 ; + + /* Other user defined attributes. */ + original_pin : tl_o[34]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.048141, 0.201187, 0.376558, 0.699320, 1.344843",\ + "0.134454, 0.288362, 0.463663, 0.786035, 1.430777",\ + "0.217649, 0.376489, 0.551619, 0.873657, 1.517732",\ + "0.275553, 0.440884, 0.615735, 0.937570, 1.581241",\ + "0.575495, 0.790754, 0.966118, 1.286311, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.024044, 0.299728, 0.633000, 1.249521, 2.482563",\ + "0.028569, 0.300716, 0.634948, 1.249521, 2.482563",\ + "0.041522, 0.302971, 0.634984, 1.249521, 2.482563",\ + "0.053427, 0.306251, 0.635086, 1.249521, 2.482563",\ + "0.129046, 0.344608, 0.641342, 1.252077, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.067740, 0.172889, 0.284335, 0.488454, 0.896691",\ + "0.155151, 0.260208, 0.371616, 0.575759, 0.984044",\ + "0.235509, 0.340542, 0.451643, 0.655787, 1.064076",\ + "0.292201, 0.398091, 0.509186, 0.713032, 1.120723",\ + "0.585993, 0.701429, 0.812818, 1.016046, 1.422500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.024480, 0.187339, 0.387711, 0.759911, 1.504310",\ + "0.024480, 0.187483, 0.388215, 0.759911, 1.504310",\ + "0.025567, 0.187483, 0.388215, 0.759911, 1.504310",\ + "0.027640, 0.187483, 0.388215, 0.759911, 1.504310",\ + "0.046267, 0.191456, 0.388215, 0.759911, 1.504590"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[34]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.048141, 0.201187, 0.376558, 0.699320, 1.344843",\ + "0.134454, 0.288362, 0.463663, 0.786035, 1.430777",\ + "0.217649, 0.376489, 0.551619, 0.873657, 1.517732",\ + "0.275553, 0.440884, 0.615735, 0.937570, 1.581241",\ + "0.575495, 0.790754, 0.966118, 1.286311, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.024044, 0.299728, 0.633000, 1.248292, 2.473548",\ + "0.028569, 0.300716, 0.634948, 1.248292, 2.473548",\ + "0.041522, 0.302971, 0.634984, 1.248368, 2.473548",\ + "0.053427, 0.306251, 0.635086, 1.249112, 2.473548",\ + "0.129046, 0.344608, 0.641342, 1.252077, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.067740, 0.172889, 0.284335, 0.488454, 0.896691",\ + "0.155151, 0.260208, 0.371616, 0.575759, 0.984044",\ + "0.235509, 0.340542, 0.451643, 0.655787, 1.064076",\ + "0.292201, 0.398091, 0.509186, 0.713032, 1.120723",\ + "0.585993, 0.701429, 0.812818, 1.016046, 1.422500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.024480, 0.186540, 0.386204, 0.757680, 1.500633",\ + "0.024480, 0.186540, 0.386204, 0.757680, 1.500633",\ + "0.025567, 0.186540, 0.386204, 0.757680, 1.500633",\ + "0.027640, 0.187150, 0.386661, 0.758582, 1.502424",\ + "0.046267, 0.191456, 0.386733, 0.759352, 1.504590"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[34]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024044, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.212080, 0.166210, 0.136015, 0.124674, 0.138379",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024480, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.265828, 0.190516, 0.122412, 0.099534, 0.163259",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[34]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024044, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.139884, -0.097456, -0.062994, -0.023072, 0.289162",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024480, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.173706, -0.107618, -0.049712, -0.007684, 0.212495",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[34]_hldr*/ + +} /* end of pin tl_o[34] */ + +pin("tl_o[33]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002863 ; + + /* Other user defined attributes. */ + original_pin : tl_o[33]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.050484, 0.202933, 0.377869, 0.700194, 1.344843",\ + "0.136927, 0.290107, 0.464973, 0.786907, 1.430777",\ + "0.220698, 0.378233, 0.552927, 0.874529, 1.517732",\ + "0.279184, 0.442625, 0.617042, 0.938441, 1.581241",\ + "0.582638, 0.792504, 0.967419, 1.287178, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.027190, 0.303040, 0.635504, 1.251191, 2.482564",\ + "0.031386, 0.304046, 0.637439, 1.251191, 2.482564",\ + "0.043994, 0.306272, 0.637475, 1.251191, 2.482564",\ + "0.055941, 0.309507, 0.637579, 1.251191, 2.482564",\ + "0.132198, 0.347439, 0.643822, 1.253731, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.069846, 0.173993, 0.285156, 0.488998, 0.896682",\ + "0.157251, 0.261310, 0.372437, 0.576303, 0.984036",\ + "0.237642, 0.341641, 0.452464, 0.656332, 1.064067",\ + "0.294418, 0.399190, 0.510006, 0.713575, 1.120715",\ + "0.589089, 0.702533, 0.813636, 1.016588, 1.422492"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.026653, 0.189312, 0.389207, 0.760903, 1.504295",\ + "0.026653, 0.189463, 0.389709, 0.760903, 1.504295",\ + "0.027645, 0.189463, 0.389709, 0.760903, 1.504295",\ + "0.029626, 0.189463, 0.389709, 0.760903, 1.504295",\ + "0.047836, 0.193360, 0.389709, 0.760903, 1.504575"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[33]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.050484, 0.202933, 0.377869, 0.700194, 1.344843",\ + "0.136927, 0.290107, 0.464973, 0.786907, 1.430777",\ + "0.220698, 0.378233, 0.552927, 0.874529, 1.517732",\ + "0.279184, 0.442625, 0.617042, 0.938441, 1.581241",\ + "0.582638, 0.792504, 0.967419, 1.287178, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.027190, 0.303040, 0.635504, 1.249953, 2.473548",\ + "0.031386, 0.304046, 0.637439, 1.249953, 2.473548",\ + "0.043994, 0.306272, 0.637475, 1.250028, 2.473548",\ + "0.055941, 0.309507, 0.637579, 1.250774, 2.473548",\ + "0.132198, 0.347439, 0.643822, 1.253731, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.069846, 0.173993, 0.285156, 0.488998, 0.896682",\ + "0.157251, 0.261310, 0.372437, 0.576303, 0.984036",\ + "0.237642, 0.341641, 0.452464, 0.656332, 1.064067",\ + "0.294418, 0.399190, 0.510006, 0.713575, 1.120715",\ + "0.589089, 0.702533, 0.813636, 1.016588, 1.422492"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.026653, 0.188505, 0.387697, 0.758671, 1.500618",\ + "0.026653, 0.188505, 0.387697, 0.758671, 1.500618",\ + "0.027645, 0.188505, 0.387697, 0.758671, 1.500618",\ + "0.029626, 0.189113, 0.388156, 0.759574, 1.502409",\ + "0.047836, 0.193360, 0.388231, 0.760346, 1.504575"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[33]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.027190, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.213409, 0.167538, 0.137343, 0.126003, 0.139708",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026653, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.266639, 0.191328, 0.123224, 0.100346, 0.164070",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[33]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.027190, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.141198, -0.098770, -0.064309, -0.024387, 0.287847",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026653, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.174512, -0.108425, -0.050519, -0.008491, 0.211689",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[33]_hldr*/ + +} /* end of pin tl_o[33] */ + +pin("tl_o[32]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.003362 ; + + /* Other user defined attributes. */ + original_pin : tl_o[32]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.051835, 0.203939, 0.378625, 0.700698, 1.344843",\ + "0.138352, 0.291114, 0.465728, 0.787411, 1.430777",\ + "0.222457, 0.379239, 0.553681, 0.875031, 1.517732",\ + "0.281277, 0.443628, 0.617795, 0.938944, 1.581241",\ + "0.586756, 0.793514, 0.968169, 1.287678, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.029003, 0.304950, 0.636948, 1.252153, 2.482563",\ + "0.033010, 0.305967, 0.638875, 1.252153, 2.482563",\ + "0.045419, 0.308176, 0.638911, 1.252153, 2.482563",\ + "0.057391, 0.311385, 0.639017, 1.252153, 2.482563",\ + "0.134015, 0.349072, 0.645253, 1.254684, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.071047, 0.174622, 0.285622, 0.489305, 0.896671",\ + "0.158449, 0.261939, 0.372903, 0.576610, 0.984024",\ + "0.238859, 0.342267, 0.452930, 0.656639, 1.064056",\ + "0.295683, 0.399817, 0.510471, 0.713882, 1.120704",\ + "0.590856, 0.703163, 0.814100, 1.016894, 1.422481"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.027892, 0.190438, 0.390058, 0.761463, 1.504274",\ + "0.027892, 0.190592, 0.390558, 0.761463, 1.504274",\ + "0.028831, 0.190592, 0.390558, 0.761463, 1.504274",\ + "0.030758, 0.190592, 0.390558, 0.761463, 1.504274",\ + "0.048732, 0.194447, 0.390558, 0.761463, 1.504554"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[32]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.051835, 0.203939, 0.378625, 0.700698, 1.344843",\ + "0.138352, 0.291114, 0.465728, 0.787411, 1.430777",\ + "0.222457, 0.379239, 0.553681, 0.875031, 1.517732",\ + "0.281277, 0.443628, 0.617795, 0.938944, 1.581241",\ + "0.586756, 0.793514, 0.968169, 1.287678, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.029003, 0.304950, 0.636948, 1.250910, 2.473548",\ + "0.033010, 0.305967, 0.638875, 1.250910, 2.473548",\ + "0.045419, 0.308176, 0.638911, 1.250986, 2.473548",\ + "0.057391, 0.311385, 0.639017, 1.251733, 2.473548",\ + "0.134015, 0.349072, 0.645253, 1.254684, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.071047, 0.174622, 0.285622, 0.489305, 0.896671",\ + "0.158449, 0.261939, 0.372903, 0.576610, 0.984024",\ + "0.238859, 0.342267, 0.452930, 0.656639, 1.064056",\ + "0.295683, 0.399817, 0.510471, 0.713882, 1.120704",\ + "0.590856, 0.703163, 0.814100, 1.016894, 1.422481"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.027892, 0.189626, 0.388546, 0.759230, 1.500597",\ + "0.027892, 0.189626, 0.388546, 0.759230, 1.500597",\ + "0.028831, 0.189626, 0.388546, 0.759230, 1.500597",\ + "0.030758, 0.190232, 0.389006, 0.760134, 1.502388",\ + "0.048732, 0.194447, 0.389083, 0.760906, 1.504554"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[32]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.029003, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.214175, 0.168305, 0.138110, 0.126769, 0.140474",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.027892, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.267102, 0.191791, 0.123687, 0.100809, 0.164534",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[32]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.029003, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.141956, -0.099528, -0.065067, -0.025145, 0.287089",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.027892, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.174973, -0.108885, -0.050979, -0.008951, 0.211228",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[32]_hldr*/ + +} /* end of pin tl_o[32] */ + +pin("tl_o[31]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002343 ; + + /* Other user defined attributes. */ + original_pin : tl_o[31]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.049079, 0.201886, 0.377083, 0.699670, 1.344843",\ + "0.135444, 0.289061, 0.464188, 0.786384, 1.430777",\ + "0.218870, 0.377188, 0.552143, 0.874006, 1.517732",\ + "0.277007, 0.441581, 0.616258, 0.937919, 1.581241",\ + "0.578356, 0.791455, 0.966639, 1.286659, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.025304, 0.301054, 0.634003, 1.250190, 2.482563",\ + "0.029697, 0.302049, 0.635945, 1.250190, 2.482563",\ + "0.042512, 0.304293, 0.635981, 1.250190, 2.482563",\ + "0.054434, 0.307555, 0.636084, 1.250190, 2.482563",\ + "0.130308, 0.345742, 0.642335, 1.252740, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.068622, 0.173351, 0.284684, 0.488692, 0.896707",\ + "0.156030, 0.260670, 0.371965, 0.575997, 0.984061",\ + "0.236402, 0.341002, 0.451991, 0.656025, 1.064092",\ + "0.293129, 0.398551, 0.509534, 0.713269, 1.120740",\ + "0.587289, 0.701891, 0.813166, 1.016283, 1.422517"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.025390, 0.188165, 0.388347, 0.760345, 1.504341",\ + "0.025390, 0.188312, 0.388850, 0.760345, 1.504341",\ + "0.026437, 0.188312, 0.388850, 0.760345, 1.504341",\ + "0.028472, 0.188312, 0.388850, 0.760345, 1.504341",\ + "0.046924, 0.192253, 0.388850, 0.760345, 1.504621"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[31]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.049079, 0.201886, 0.377083, 0.699670, 1.344843",\ + "0.135444, 0.289061, 0.464188, 0.786384, 1.430777",\ + "0.218870, 0.377188, 0.552143, 0.874006, 1.517732",\ + "0.277007, 0.441581, 0.616258, 0.937919, 1.581241",\ + "0.578356, 0.791455, 0.966639, 1.286659, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.025304, 0.301054, 0.634003, 1.248957, 2.473548",\ + "0.029697, 0.302049, 0.635945, 1.248957, 2.473548",\ + "0.042512, 0.304293, 0.635981, 1.249033, 2.473548",\ + "0.054434, 0.307555, 0.636084, 1.249777, 2.473548",\ + "0.130308, 0.345742, 0.642335, 1.252740, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.068622, 0.173351, 0.284684, 0.488692, 0.896707",\ + "0.156030, 0.260670, 0.371965, 0.575997, 0.984061",\ + "0.236402, 0.341002, 0.451991, 0.656025, 1.064092",\ + "0.293129, 0.398551, 0.509534, 0.713269, 1.120740",\ + "0.587289, 0.701891, 0.813166, 1.016283, 1.422517"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.025390, 0.187363, 0.386838, 0.758113, 1.500664",\ + "0.025390, 0.187363, 0.386838, 0.758113, 1.500664",\ + "0.026437, 0.187363, 0.386838, 0.758113, 1.500664",\ + "0.028472, 0.187972, 0.387296, 0.759016, 1.502455",\ + "0.046924, 0.192253, 0.387369, 0.759786, 1.504621"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[31]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025304, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.212613, 0.166742, 0.136547, 0.125206, 0.138911",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025390, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.266167, 0.190856, 0.122752, 0.099874, 0.163599",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[31]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025304, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.140410, -0.097982, -0.063521, -0.023599, 0.288635",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025390, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.174043, -0.107956, -0.050050, -0.008022, 0.212157",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[31]_hldr*/ + +} /* end of pin tl_o[31] */ + +pin("tl_o[30]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.003362 ; + + /* Other user defined attributes. */ + original_pin : tl_o[30]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.051835, 0.203939, 0.378625, 0.700698, 1.344843",\ + "0.138352, 0.291114, 0.465728, 0.787411, 1.430777",\ + "0.222457, 0.379239, 0.553681, 0.875031, 1.517732",\ + "0.281277, 0.443628, 0.617795, 0.938944, 1.581241",\ + "0.586756, 0.793514, 0.968169, 1.287678, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.029003, 0.304950, 0.636948, 1.252153, 2.482563",\ + "0.033010, 0.305967, 0.638875, 1.252153, 2.482563",\ + "0.045419, 0.308176, 0.638911, 1.252153, 2.482563",\ + "0.057391, 0.311385, 0.639017, 1.252153, 2.482563",\ + "0.134015, 0.349072, 0.645253, 1.254684, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.071047, 0.174622, 0.285622, 0.489305, 0.896671",\ + "0.158449, 0.261939, 0.372903, 0.576610, 0.984024",\ + "0.238859, 0.342267, 0.452930, 0.656639, 1.064056",\ + "0.295683, 0.399817, 0.510471, 0.713882, 1.120704",\ + "0.590856, 0.703163, 0.814100, 1.016894, 1.422481"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.027892, 0.190438, 0.390058, 0.761463, 1.504274",\ + "0.027892, 0.190592, 0.390558, 0.761463, 1.504274",\ + "0.028831, 0.190592, 0.390558, 0.761463, 1.504274",\ + "0.030758, 0.190592, 0.390558, 0.761463, 1.504274",\ + "0.048732, 0.194447, 0.390558, 0.761463, 1.504554"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[30]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.051835, 0.203939, 0.378625, 0.700698, 1.344843",\ + "0.138352, 0.291114, 0.465728, 0.787411, 1.430777",\ + "0.222457, 0.379239, 0.553681, 0.875031, 1.517732",\ + "0.281277, 0.443628, 0.617795, 0.938944, 1.581241",\ + "0.586756, 0.793514, 0.968169, 1.287678, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.029003, 0.304950, 0.636948, 1.250910, 2.473548",\ + "0.033010, 0.305967, 0.638875, 1.250910, 2.473548",\ + "0.045419, 0.308176, 0.638911, 1.250986, 2.473548",\ + "0.057391, 0.311385, 0.639017, 1.251733, 2.473548",\ + "0.134015, 0.349072, 0.645253, 1.254684, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.071047, 0.174622, 0.285622, 0.489305, 0.896671",\ + "0.158449, 0.261939, 0.372903, 0.576610, 0.984024",\ + "0.238859, 0.342267, 0.452930, 0.656639, 1.064056",\ + "0.295683, 0.399817, 0.510471, 0.713882, 1.120704",\ + "0.590856, 0.703163, 0.814100, 1.016894, 1.422481"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.027892, 0.189626, 0.388546, 0.759230, 1.500597",\ + "0.027892, 0.189626, 0.388546, 0.759230, 1.500597",\ + "0.028831, 0.189626, 0.388546, 0.759230, 1.500597",\ + "0.030758, 0.190232, 0.389006, 0.760134, 1.502388",\ + "0.048732, 0.194447, 0.389083, 0.760906, 1.504554"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[30]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.029003, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.214175, 0.168305, 0.138110, 0.126769, 0.140474",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.027892, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.267102, 0.191791, 0.123687, 0.100809, 0.164534",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[30]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.029003, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.141956, -0.099528, -0.065067, -0.025145, 0.287089",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.027892, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.174973, -0.108885, -0.050979, -0.008951, 0.211228",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[30]_hldr*/ + +} /* end of pin tl_o[30] */ + +pin("tl_o[29]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002863 ; + + /* Other user defined attributes. */ + original_pin : tl_o[29]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.050484, 0.202933, 0.377869, 0.700194, 1.344843",\ + "0.136927, 0.290107, 0.464973, 0.786907, 1.430777",\ + "0.220698, 0.378233, 0.552927, 0.874529, 1.517732",\ + "0.279184, 0.442625, 0.617042, 0.938441, 1.581241",\ + "0.582638, 0.792504, 0.967419, 1.287178, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.027190, 0.303040, 0.635504, 1.251191, 2.482564",\ + "0.031386, 0.304046, 0.637439, 1.251191, 2.482564",\ + "0.043994, 0.306272, 0.637475, 1.251191, 2.482564",\ + "0.055941, 0.309507, 0.637579, 1.251191, 2.482564",\ + "0.132198, 0.347439, 0.643822, 1.253731, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.069846, 0.173993, 0.285156, 0.488998, 0.896682",\ + "0.157251, 0.261310, 0.372437, 0.576303, 0.984036",\ + "0.237642, 0.341641, 0.452464, 0.656332, 1.064067",\ + "0.294418, 0.399190, 0.510006, 0.713575, 1.120715",\ + "0.589089, 0.702533, 0.813636, 1.016588, 1.422492"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.026653, 0.189312, 0.389207, 0.760903, 1.504295",\ + "0.026653, 0.189463, 0.389709, 0.760903, 1.504295",\ + "0.027645, 0.189463, 0.389709, 0.760903, 1.504295",\ + "0.029626, 0.189463, 0.389709, 0.760903, 1.504295",\ + "0.047836, 0.193360, 0.389709, 0.760903, 1.504575"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[29]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.050484, 0.202933, 0.377869, 0.700194, 1.344843",\ + "0.136927, 0.290107, 0.464973, 0.786907, 1.430777",\ + "0.220698, 0.378233, 0.552927, 0.874529, 1.517732",\ + "0.279184, 0.442625, 0.617042, 0.938441, 1.581241",\ + "0.582638, 0.792504, 0.967419, 1.287178, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.027190, 0.303040, 0.635504, 1.249953, 2.473548",\ + "0.031386, 0.304046, 0.637439, 1.249953, 2.473548",\ + "0.043994, 0.306272, 0.637475, 1.250028, 2.473548",\ + "0.055941, 0.309507, 0.637579, 1.250774, 2.473548",\ + "0.132198, 0.347439, 0.643822, 1.253731, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.069846, 0.173993, 0.285156, 0.488998, 0.896682",\ + "0.157251, 0.261310, 0.372437, 0.576303, 0.984036",\ + "0.237642, 0.341641, 0.452464, 0.656332, 1.064067",\ + "0.294418, 0.399190, 0.510006, 0.713575, 1.120715",\ + "0.589089, 0.702533, 0.813636, 1.016588, 1.422492"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.026653, 0.188505, 0.387697, 0.758671, 1.500618",\ + "0.026653, 0.188505, 0.387697, 0.758671, 1.500618",\ + "0.027645, 0.188505, 0.387697, 0.758671, 1.500618",\ + "0.029626, 0.189113, 0.388156, 0.759574, 1.502409",\ + "0.047836, 0.193360, 0.388231, 0.760346, 1.504575"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[29]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.027190, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.213409, 0.167538, 0.137343, 0.126003, 0.139708",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026653, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.266639, 0.191328, 0.123224, 0.100346, 0.164070",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[29]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.027190, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.141198, -0.098770, -0.064309, -0.024387, 0.287847",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026653, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.174512, -0.108425, -0.050519, -0.008491, 0.211689",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[29]_hldr*/ + +} /* end of pin tl_o[29] */ + +pin("tl_o[28]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001816 ; + + /* Other user defined attributes. */ + original_pin : tl_o[28]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.047653, 0.200824, 0.376286, 0.699138, 1.344843",\ + "0.133940, 0.287998, 0.463391, 0.785853, 1.430777",\ + "0.217014, 0.376126, 0.551347, 0.873475, 1.517732",\ + "0.274798, 0.440522, 0.615463, 0.937389, 1.581241",\ + "0.574010, 0.790389, 0.965848, 1.286131, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.023390, 0.299039, 0.632479, 1.249174, 2.482563",\ + "0.027983, 0.300023, 0.634430, 1.249174, 2.482563",\ + "0.041008, 0.302285, 0.634466, 1.249174, 2.482563",\ + "0.052904, 0.305573, 0.634567, 1.249174, 2.482563",\ + "0.128390, 0.344019, 0.640826, 1.251733, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.067359, 0.172690, 0.284194, 0.488370, 0.896722",\ + "0.154772, 0.260009, 0.371475, 0.575675, 0.984076",\ + "0.235124, 0.340344, 0.451502, 0.655704, 1.064107",\ + "0.291800, 0.397892, 0.509045, 0.712948, 1.120755",\ + "0.585433, 0.701229, 0.812678, 1.015963, 1.422532"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.024087, 0.186982, 0.387454, 0.759758, 1.504368",\ + "0.024087, 0.187126, 0.387958, 0.759758, 1.504368",\ + "0.025192, 0.187126, 0.387958, 0.759758, 1.504368",\ + "0.027281, 0.187126, 0.387958, 0.759758, 1.504368",\ + "0.045983, 0.191111, 0.387958, 0.759758, 1.504648"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[28]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.047653, 0.200824, 0.376286, 0.699138, 1.344843",\ + "0.133940, 0.287998, 0.463391, 0.785853, 1.430777",\ + "0.217014, 0.376126, 0.551347, 0.873475, 1.517732",\ + "0.274798, 0.440522, 0.615463, 0.937389, 1.581241",\ + "0.574010, 0.790389, 0.965848, 1.286131, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.023390, 0.299039, 0.632479, 1.247947, 2.473548",\ + "0.027983, 0.300023, 0.634430, 1.247947, 2.473548",\ + "0.041008, 0.302285, 0.634466, 1.248022, 2.473548",\ + "0.052904, 0.305573, 0.634567, 1.248766, 2.473548",\ + "0.128390, 0.344019, 0.640826, 1.251733, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.067359, 0.172690, 0.284194, 0.488370, 0.896722",\ + "0.154772, 0.260009, 0.371475, 0.575675, 0.984076",\ + "0.235124, 0.340344, 0.451502, 0.655704, 1.064107",\ + "0.291800, 0.397892, 0.509045, 0.712948, 1.120755",\ + "0.585433, 0.701229, 0.812678, 1.015963, 1.422532"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.024087, 0.186184, 0.385947, 0.757528, 1.500690",\ + "0.024087, 0.186184, 0.385947, 0.757528, 1.500690",\ + "0.025192, 0.186184, 0.385947, 0.757528, 1.500690",\ + "0.027281, 0.186796, 0.386404, 0.758430, 1.502482",\ + "0.045983, 0.191111, 0.386476, 0.759200, 1.504648"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[28]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.023390, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.211804, 0.165933, 0.135738, 0.124398, 0.138103",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024087, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.265681, 0.190370, 0.122265, 0.099388, 0.163112",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[28]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.023390, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.139610, -0.097182, -0.062721, -0.022799, 0.289435",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024087, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.173560, -0.107472, -0.049566, -0.007539, 0.212641",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[28]_hldr*/ + +} /* end of pin tl_o[28] */ + +pin("tl_o[27]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.003525 ; + + /* Other user defined attributes. */ + original_pin : tl_o[27]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.052275, 0.204267, 0.378871, 0.700862, 1.344843",\ + "0.138817, 0.291442, 0.465974, 0.787575, 1.430777",\ + "0.223030, 0.379567, 0.553927, 0.875195, 1.517732",\ + "0.281960, 0.443955, 0.618041, 0.939108, 1.581241",\ + "0.588098, 0.793843, 0.968413, 1.287841, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.029595, 0.305572, 0.637418, 1.252467, 2.482563",\ + "0.033540, 0.306593, 0.639343, 1.252467, 2.482563",\ + "0.045883, 0.308796, 0.639379, 1.252467, 2.482563",\ + "0.057864, 0.311997, 0.639486, 1.252467, 2.482563",\ + "0.134607, 0.349604, 0.645719, 1.254995, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.071419, 0.174817, 0.285764, 0.489395, 0.896657",\ + "0.158819, 0.262134, 0.373045, 0.576700, 0.984010",\ + "0.239235, 0.342461, 0.453072, 0.656729, 1.064042",\ + "0.296074, 0.400011, 0.510613, 0.713972, 1.120690",\ + "0.591402, 0.703358, 0.814241, 1.016983, 1.422467"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.028276, 0.190786, 0.390316, 0.761627, 1.504248",\ + "0.028276, 0.190941, 0.390816, 0.761627, 1.504248",\ + "0.029198, 0.190941, 0.390816, 0.761627, 1.504248",\ + "0.031109, 0.190941, 0.390816, 0.761627, 1.504248",\ + "0.049009, 0.194783, 0.390816, 0.761627, 1.504528"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[27]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.052275, 0.204267, 0.378871, 0.700862, 1.344843",\ + "0.138817, 0.291442, 0.465974, 0.787575, 1.430777",\ + "0.223030, 0.379567, 0.553927, 0.875195, 1.517732",\ + "0.281960, 0.443955, 0.618041, 0.939108, 1.581241",\ + "0.588098, 0.793843, 0.968413, 1.287841, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.029595, 0.305572, 0.637418, 1.251222, 2.473548",\ + "0.033540, 0.306593, 0.639343, 1.251222, 2.473548",\ + "0.045883, 0.308796, 0.639379, 1.251298, 2.473548",\ + "0.057864, 0.311997, 0.639486, 1.252045, 2.473548",\ + "0.134607, 0.349604, 0.645719, 1.254995, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.071419, 0.174817, 0.285764, 0.489395, 0.896657",\ + "0.158819, 0.262134, 0.373045, 0.576700, 0.984010",\ + "0.239235, 0.342461, 0.453072, 0.656729, 1.064042",\ + "0.296074, 0.400011, 0.510613, 0.713972, 1.120690",\ + "0.591402, 0.703358, 0.814241, 1.016983, 1.422467"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.028276, 0.189973, 0.388804, 0.759393, 1.500571",\ + "0.028276, 0.189973, 0.388804, 0.759393, 1.500571",\ + "0.029198, 0.189973, 0.388804, 0.759393, 1.500571",\ + "0.031109, 0.190579, 0.389264, 0.760297, 1.502363",\ + "0.049009, 0.194783, 0.389341, 0.761070, 1.504528"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[27]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.029595, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.214425, 0.168554, 0.138359, 0.127019, 0.140724",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.028276, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.267246, 0.191934, 0.123830, 0.100952, 0.164677",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[27]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.029595, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.142204, -0.099775, -0.065314, -0.025392, 0.286842",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.028276, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.175115, -0.109028, -0.051122, -0.009094, 0.211086",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[27]_hldr*/ + +} /* end of pin tl_o[27] */ + +pin("tl_o[26]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002267 ; + + /* Other user defined attributes. */ + original_pin : tl_o[26]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.048874, 0.201733, 0.376968, 0.699593, 1.344843",\ + "0.135228, 0.288908, 0.464073, 0.786308, 1.430777",\ + "0.218603, 0.377035, 0.552028, 0.873930, 1.517732",\ + "0.276689, 0.441428, 0.616144, 0.937843, 1.581241",\ + "0.577730, 0.791301, 0.966525, 1.286583, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.025028, 0.300764, 0.633784, 1.250043, 2.482563",\ + "0.029450, 0.301758, 0.635727, 1.250043, 2.482563",\ + "0.042296, 0.304004, 0.635763, 1.250043, 2.482563",\ + "0.054214, 0.307269, 0.635866, 1.250043, 2.482563",\ + "0.130032, 0.345494, 0.642118, 1.252595, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.068432, 0.173252, 0.284609, 0.488641, 0.896705",\ + "0.155842, 0.260570, 0.371890, 0.575946, 0.984059",\ + "0.236211, 0.340904, 0.451917, 0.655975, 1.064090",\ + "0.292930, 0.398452, 0.509460, 0.713219, 1.120738",\ + "0.587011, 0.701792, 0.813092, 1.016233, 1.422515"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.025195, 0.187988, 0.388211, 0.760253, 1.504337",\ + "0.025195, 0.188134, 0.388714, 0.760253, 1.504337",\ + "0.026251, 0.188134, 0.388714, 0.760253, 1.504337",\ + "0.028293, 0.188134, 0.388714, 0.760253, 1.504337",\ + "0.046783, 0.192082, 0.388714, 0.760253, 1.504617"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[26]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.048874, 0.201733, 0.376968, 0.699593, 1.344843",\ + "0.135228, 0.288908, 0.464073, 0.786308, 1.430777",\ + "0.218603, 0.377035, 0.552028, 0.873930, 1.517732",\ + "0.276689, 0.441428, 0.616144, 0.937843, 1.581241",\ + "0.577730, 0.791301, 0.966525, 1.286583, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.025028, 0.300764, 0.633784, 1.248812, 2.473548",\ + "0.029450, 0.301758, 0.635727, 1.248812, 2.473548",\ + "0.042296, 0.304004, 0.635763, 1.248887, 2.473548",\ + "0.054214, 0.307269, 0.635866, 1.249632, 2.473548",\ + "0.130032, 0.345494, 0.642118, 1.252595, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.068432, 0.173252, 0.284609, 0.488641, 0.896705",\ + "0.155842, 0.260570, 0.371890, 0.575946, 0.984059",\ + "0.236211, 0.340904, 0.451917, 0.655975, 1.064090",\ + "0.292930, 0.398452, 0.509460, 0.713219, 1.120738",\ + "0.587011, 0.701792, 0.813092, 1.016233, 1.422515"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.025195, 0.187186, 0.386703, 0.758022, 1.500660",\ + "0.025195, 0.187186, 0.386703, 0.758022, 1.500660",\ + "0.026251, 0.187186, 0.386703, 0.758022, 1.500660",\ + "0.028293, 0.187796, 0.387161, 0.758924, 1.502451",\ + "0.046783, 0.192082, 0.387233, 0.759695, 1.504617"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[26]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025028, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.212496, 0.166625, 0.136430, 0.125090, 0.138795",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025195, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.266095, 0.190783, 0.122679, 0.099801, 0.163526",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[26]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025028, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.140295, -0.097867, -0.063406, -0.023484, 0.288750",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025195, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.173971, -0.107884, -0.049978, -0.007950, 0.212230",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[26]_hldr*/ + +} /* end of pin tl_o[26] */ + +pin("tl_o[25]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002846 ; + + /* Other user defined attributes. */ + original_pin : tl_o[25]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.050438, 0.202899, 0.377843, 0.700177, 1.344843",\ + "0.136878, 0.290073, 0.464947, 0.786890, 1.430777",\ + "0.220639, 0.378199, 0.552901, 0.874512, 1.517732",\ + "0.279113, 0.442591, 0.617016, 0.938424, 1.581241",\ + "0.582498, 0.792470, 0.967394, 1.287161, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.027128, 0.302975, 0.635455, 1.251158, 2.482563",\ + "0.031331, 0.303981, 0.637390, 1.251158, 2.482563",\ + "0.043946, 0.306208, 0.637426, 1.251158, 2.482563",\ + "0.055892, 0.309444, 0.637531, 1.251158, 2.482563",\ + "0.132136, 0.347384, 0.643774, 1.253699, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.069801, 0.173969, 0.285138, 0.488985, 0.896680",\ + "0.157206, 0.261287, 0.372419, 0.576290, 0.984034",\ + "0.237596, 0.341617, 0.452445, 0.656319, 1.064065",\ + "0.294370, 0.399166, 0.509987, 0.713563, 1.120713",\ + "0.589023, 0.702509, 0.813617, 1.016575, 1.422490"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.026606, 0.189270, 0.389174, 0.760880, 1.504292",\ + "0.026606, 0.189420, 0.389676, 0.760880, 1.504292",\ + "0.027601, 0.189420, 0.389676, 0.760880, 1.504292",\ + "0.029583, 0.189420, 0.389676, 0.760880, 1.504292",\ + "0.047803, 0.193320, 0.389676, 0.760880, 1.504571"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[25]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.050438, 0.202899, 0.377843, 0.700177, 1.344843",\ + "0.136878, 0.290073, 0.464947, 0.786890, 1.430777",\ + "0.220639, 0.378199, 0.552901, 0.874512, 1.517732",\ + "0.279113, 0.442591, 0.617016, 0.938424, 1.581241",\ + "0.582498, 0.792470, 0.967394, 1.287161, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.027128, 0.302975, 0.635455, 1.249921, 2.473548",\ + "0.031331, 0.303981, 0.637390, 1.249921, 2.473548",\ + "0.043946, 0.306208, 0.637426, 1.249996, 2.473548",\ + "0.055892, 0.309444, 0.637531, 1.250742, 2.473548",\ + "0.132136, 0.347384, 0.643774, 1.253699, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.069801, 0.173969, 0.285138, 0.488985, 0.896680",\ + "0.157206, 0.261287, 0.372419, 0.576290, 0.984034",\ + "0.237596, 0.341617, 0.452445, 0.656319, 1.064065",\ + "0.294370, 0.399166, 0.509987, 0.713563, 1.120713",\ + "0.589023, 0.702509, 0.813617, 1.016575, 1.422490"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.026606, 0.188463, 0.387664, 0.758648, 1.500614",\ + "0.026606, 0.188463, 0.387664, 0.758648, 1.500614",\ + "0.027601, 0.188463, 0.387664, 0.758648, 1.500614",\ + "0.029583, 0.189071, 0.388123, 0.759551, 1.502406",\ + "0.047803, 0.193320, 0.388198, 0.760322, 1.504571"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[25]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.027128, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.213383, 0.167512, 0.137317, 0.125977, 0.139682",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.266622, 0.191311, 0.123207, 0.100329, 0.164053",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[25]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.027128, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.141173, -0.098745, -0.064283, -0.024362, 0.287872",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.174495, -0.108408, -0.050502, -0.008474, 0.211706",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[25]_hldr*/ + +} /* end of pin tl_o[25] */ + +pin("tl_o[24]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.003210 ; + + /* Other user defined attributes. */ + original_pin : tl_o[24]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.051424, 0.203633, 0.378395, 0.700544, 1.344843",\ + "0.137919, 0.290808, 0.465498, 0.787258, 1.430777",\ + "0.221922, 0.378933, 0.553452, 0.874879, 1.517732",\ + "0.280641, 0.443323, 0.617566, 0.938791, 1.581241",\ + "0.585504, 0.793207, 0.967941, 1.287526, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.028452, 0.304369, 0.636509, 1.251860, 2.482563",\ + "0.032517, 0.305383, 0.638438, 1.251860, 2.482563",\ + "0.044986, 0.307597, 0.638475, 1.251860, 2.482563",\ + "0.056951, 0.310815, 0.638580, 1.251860, 2.482563",\ + "0.133463, 0.348576, 0.644818, 1.254395, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.070659, 0.174419, 0.285469, 0.489200, 0.896663",\ + "0.158062, 0.261736, 0.372750, 0.576505, 0.984016",\ + "0.238466, 0.342065, 0.452777, 0.656534, 1.064048",\ + "0.295275, 0.399615, 0.510318, 0.713777, 1.120695",\ + "0.590286, 0.702959, 0.813947, 1.016789, 1.422472"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.027492, 0.190075, 0.389778, 0.761272, 1.504259",\ + "0.027492, 0.190228, 0.390279, 0.761272, 1.504259",\ + "0.028448, 0.190228, 0.390279, 0.761272, 1.504259",\ + "0.030393, 0.190228, 0.390279, 0.761272, 1.504259",\ + "0.048443, 0.194096, 0.390279, 0.761272, 1.504539"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[24]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.051424, 0.203633, 0.378395, 0.700544, 1.344843",\ + "0.137919, 0.290808, 0.465498, 0.787258, 1.430777",\ + "0.221922, 0.378933, 0.553452, 0.874879, 1.517732",\ + "0.280641, 0.443323, 0.617566, 0.938791, 1.581241",\ + "0.585504, 0.793207, 0.967941, 1.287526, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.028452, 0.304369, 0.636509, 1.250620, 2.473548",\ + "0.032517, 0.305383, 0.638438, 1.250620, 2.473548",\ + "0.044986, 0.307597, 0.638475, 1.250695, 2.473548",\ + "0.056951, 0.310815, 0.638580, 1.251441, 2.473548",\ + "0.133463, 0.348576, 0.644818, 1.254395, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.070659, 0.174419, 0.285469, 0.489200, 0.896663",\ + "0.158062, 0.261736, 0.372750, 0.576505, 0.984016",\ + "0.238466, 0.342065, 0.452777, 0.656534, 1.064048",\ + "0.295275, 0.399615, 0.510318, 0.713777, 1.120695",\ + "0.590286, 0.702959, 0.813947, 1.016789, 1.422472"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.027492, 0.189265, 0.388267, 0.759039, 1.500582",\ + "0.027492, 0.189265, 0.388267, 0.759039, 1.500582",\ + "0.028448, 0.189265, 0.388267, 0.759039, 1.500582",\ + "0.030393, 0.189871, 0.388727, 0.759942, 1.502373",\ + "0.048443, 0.194096, 0.388802, 0.760715, 1.504539"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[24]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.028452, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.213943, 0.168072, 0.137877, 0.126536, 0.140241",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.027492, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.266953, 0.191642, 0.123538, 0.100660, 0.164384",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[24]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.028452, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.141726, -0.099298, -0.064837, -0.024915, 0.287319",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.027492, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.174824, -0.108737, -0.050831, -0.008803, 0.211377",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[24]_hldr*/ + +} /* end of pin tl_o[24] */ + +pin("tl_o[23]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002308 ; + + /* Other user defined attributes. */ + original_pin : tl_o[23]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.048983, 0.201815, 0.377030, 0.699634, 1.344843",\ + "0.135344, 0.288990, 0.464134, 0.786349, 1.430777",\ + "0.218746, 0.377117, 0.552089, 0.873970, 1.517732",\ + "0.276859, 0.441510, 0.616205, 0.937884, 1.581241",\ + "0.578065, 0.791383, 0.966586, 1.286623, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.025176, 0.300919, 0.633901, 1.250122, 2.482564",\ + "0.029582, 0.301914, 0.635844, 1.250122, 2.482564",\ + "0.042411, 0.304159, 0.635880, 1.250122, 2.482564",\ + "0.054332, 0.307422, 0.635983, 1.250122, 2.482564",\ + "0.130180, 0.345627, 0.642234, 1.252672, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.068536, 0.173307, 0.284651, 0.488670, 0.896708",\ + "0.155945, 0.260625, 0.371931, 0.575975, 0.984061",\ + "0.236316, 0.340958, 0.451958, 0.656003, 1.064093",\ + "0.293039, 0.398507, 0.509501, 0.713248, 1.120741",\ + "0.587164, 0.701846, 0.813133, 1.016261, 1.422517"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.025302, 0.188085, 0.388286, 0.760305, 1.504342",\ + "0.025302, 0.188232, 0.388789, 0.760305, 1.504342",\ + "0.026353, 0.188232, 0.388789, 0.760305, 1.504342",\ + "0.028391, 0.188232, 0.388789, 0.760305, 1.504342",\ + "0.046861, 0.192176, 0.388789, 0.760305, 1.504622"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[23]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.048983, 0.201815, 0.377030, 0.699634, 1.344843",\ + "0.135344, 0.288990, 0.464134, 0.786349, 1.430777",\ + "0.218746, 0.377117, 0.552089, 0.873970, 1.517732",\ + "0.276859, 0.441510, 0.616205, 0.937884, 1.581241",\ + "0.578065, 0.791383, 0.966586, 1.286623, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.025176, 0.300919, 0.633901, 1.248890, 2.473548",\ + "0.029582, 0.301914, 0.635844, 1.248890, 2.473548",\ + "0.042411, 0.304159, 0.635880, 1.248965, 2.473548",\ + "0.054332, 0.307422, 0.635983, 1.249710, 2.473548",\ + "0.130180, 0.345627, 0.642234, 1.252672, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.068536, 0.173307, 0.284651, 0.488670, 0.896708",\ + "0.155945, 0.260625, 0.371931, 0.575975, 0.984061",\ + "0.236316, 0.340958, 0.451958, 0.656003, 1.064093",\ + "0.293039, 0.398507, 0.509501, 0.713248, 1.120741",\ + "0.587164, 0.701846, 0.813133, 1.016261, 1.422517"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.025302, 0.187283, 0.386778, 0.758074, 1.500664",\ + "0.025302, 0.187283, 0.386778, 0.758074, 1.500664",\ + "0.026353, 0.187283, 0.386778, 0.758074, 1.500664",\ + "0.028391, 0.187893, 0.387236, 0.758976, 1.502456",\ + "0.046861, 0.192176, 0.387309, 0.759746, 1.504622"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[23]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025176, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.212558, 0.166688, 0.136493, 0.125152, 0.138857",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025302, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.266135, 0.190823, 0.122719, 0.099841, 0.163566",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[23]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025176, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.140357, -0.097929, -0.063467, -0.023545, 0.288689",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025302, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.174011, -0.107923, -0.050017, -0.007990, 0.212190",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[23]_hldr*/ + +} /* end of pin tl_o[23] */ + +pin("tl_o[22]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002254 ; + + /* Other user defined attributes. */ + original_pin : tl_o[22]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.048838, 0.201706, 0.376948, 0.699580, 1.344843",\ + "0.135190, 0.288881, 0.464053, 0.786294, 1.430777",\ + "0.218556, 0.377008, 0.552008, 0.873916, 1.517732",\ + "0.276634, 0.441402, 0.616124, 0.937829, 1.581241",\ + "0.577621, 0.791275, 0.966506, 1.286569, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.024980, 0.300714, 0.633745, 1.250018, 2.482564",\ + "0.029407, 0.301707, 0.635689, 1.250018, 2.482564",\ + "0.042258, 0.303954, 0.635725, 1.250018, 2.482564",\ + "0.054175, 0.307220, 0.635828, 1.250018, 2.482564",\ + "0.129984, 0.345451, 0.642080, 1.252569, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.068404, 0.173238, 0.284599, 0.488635, 0.896708",\ + "0.155814, 0.260556, 0.371880, 0.575940, 0.984061",\ + "0.236182, 0.340889, 0.451907, 0.655969, 1.064093",\ + "0.292900, 0.398438, 0.509450, 0.713213, 1.120741",\ + "0.586970, 0.701777, 0.813081, 1.016227, 1.422517"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.025166, 0.187961, 0.388192, 0.760242, 1.504342",\ + "0.025166, 0.188108, 0.388695, 0.760242, 1.504342",\ + "0.026223, 0.188108, 0.388695, 0.760242, 1.504342",\ + "0.028267, 0.188108, 0.388695, 0.760242, 1.504342",\ + "0.046762, 0.192057, 0.388695, 0.760242, 1.504622"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[22]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.048838, 0.201706, 0.376948, 0.699580, 1.344843",\ + "0.135190, 0.288881, 0.464053, 0.786294, 1.430777",\ + "0.218556, 0.377008, 0.552008, 0.873916, 1.517732",\ + "0.276634, 0.441402, 0.616124, 0.937829, 1.581241",\ + "0.577621, 0.791275, 0.966506, 1.286569, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.024980, 0.300714, 0.633745, 1.248787, 2.473548",\ + "0.029407, 0.301707, 0.635689, 1.248787, 2.473548",\ + "0.042258, 0.303954, 0.635725, 1.248862, 2.473548",\ + "0.054175, 0.307220, 0.635828, 1.249606, 2.473548",\ + "0.129984, 0.345451, 0.642080, 1.252569, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.068404, 0.173238, 0.284599, 0.488635, 0.896708",\ + "0.155814, 0.260556, 0.371880, 0.575940, 0.984061",\ + "0.236182, 0.340889, 0.451907, 0.655969, 1.064093",\ + "0.292900, 0.398438, 0.509450, 0.713213, 1.120741",\ + "0.586970, 0.701777, 0.813081, 1.016227, 1.422517"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.025166, 0.187160, 0.386684, 0.758011, 1.500664",\ + "0.025166, 0.187160, 0.386684, 0.758011, 1.500664",\ + "0.026223, 0.187160, 0.386684, 0.758011, 1.500664",\ + "0.028267, 0.187770, 0.387142, 0.758913, 1.502456",\ + "0.046762, 0.192057, 0.387215, 0.759684, 1.504622"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[22]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024980, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.212476, 0.166605, 0.136410, 0.125070, 0.138775",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025166, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.266084, 0.190773, 0.122668, 0.099790, 0.163515",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[22]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024980, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.140275, -0.097847, -0.063386, -0.023464, 0.288770",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025166, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.173960, -0.107873, -0.049967, -0.007939, 0.212241",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[22]_hldr*/ + +} /* end of pin tl_o[22] */ + +pin("tl_o[21]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.003224 ; + + /* Other user defined attributes. */ + original_pin : tl_o[21]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.051460, 0.203660, 0.378415, 0.700558, 1.344843",\ + "0.137957, 0.290835, 0.465518, 0.787271, 1.430777",\ + "0.221969, 0.378960, 0.553472, 0.874892, 1.517732",\ + "0.280696, 0.443350, 0.617586, 0.938804, 1.581241",\ + "0.585613, 0.793234, 0.967961, 1.287539, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.028500, 0.304420, 0.636547, 1.251886, 2.482563",\ + "0.032560, 0.305434, 0.638476, 1.251886, 2.482563",\ + "0.045023, 0.307647, 0.638513, 1.251886, 2.482563",\ + "0.056989, 0.310864, 0.638618, 1.251886, 2.482563",\ + "0.133511, 0.348619, 0.644856, 1.254420, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.070687, 0.174433, 0.285479, 0.489206, 0.896660",\ + "0.158090, 0.261751, 0.372760, 0.576511, 0.984014",\ + "0.238494, 0.342080, 0.452787, 0.656540, 1.064045",\ + "0.295304, 0.399629, 0.510328, 0.713783, 1.120693",\ + "0.590327, 0.702974, 0.813957, 1.016795, 1.422470"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.027521, 0.190101, 0.389797, 0.761283, 1.504255",\ + "0.027521, 0.190254, 0.390298, 0.761283, 1.504255",\ + "0.028476, 0.190254, 0.390298, 0.761283, 1.504255",\ + "0.030419, 0.190254, 0.390298, 0.761283, 1.504255",\ + "0.048464, 0.194122, 0.390298, 0.761283, 1.504535"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[21]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.051460, 0.203660, 0.378415, 0.700558, 1.344843",\ + "0.137957, 0.290835, 0.465518, 0.787271, 1.430777",\ + "0.221969, 0.378960, 0.553472, 0.874892, 1.517732",\ + "0.280696, 0.443350, 0.617586, 0.938804, 1.581241",\ + "0.585613, 0.793234, 0.967961, 1.287539, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.028500, 0.304420, 0.636547, 1.250645, 2.473547",\ + "0.032560, 0.305434, 0.638476, 1.250645, 2.473547",\ + "0.045023, 0.307647, 0.638513, 1.250720, 2.473547",\ + "0.056989, 0.310864, 0.638618, 1.251467, 2.473547",\ + "0.133511, 0.348619, 0.644856, 1.254420, 2.473547"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.070687, 0.174433, 0.285479, 0.489206, 0.896660",\ + "0.158090, 0.261751, 0.372760, 0.576511, 0.984014",\ + "0.238494, 0.342080, 0.452787, 0.656540, 1.064045",\ + "0.295304, 0.399629, 0.510328, 0.713783, 1.120693",\ + "0.590327, 0.702974, 0.813957, 1.016795, 1.422470"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.027521, 0.189291, 0.388286, 0.759050, 1.500578",\ + "0.027521, 0.189291, 0.388286, 0.759050, 1.500578",\ + "0.028476, 0.189291, 0.388286, 0.759050, 1.500578",\ + "0.030419, 0.189897, 0.388745, 0.759953, 1.502369",\ + "0.048464, 0.194122, 0.388821, 0.760726, 1.504535"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[21]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.028500, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.213963, 0.168092, 0.137897, 0.126557, 0.140261",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.027521, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.266964, 0.191653, 0.123548, 0.100670, 0.164395",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[21]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.028500, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.141746, -0.099318, -0.064857, -0.024935, 0.287299",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.027521, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.174835, -0.108748, -0.050842, -0.008814, 0.211366",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[21]_hldr*/ + +} /* end of pin tl_o[21] */ + +pin("tl_o[20]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001805 ; + + /* Other user defined attributes. */ + original_pin : tl_o[20]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.047624, 0.200802, 0.376269, 0.699127, 1.344843",\ + "0.133909, 0.287977, 0.463375, 0.785842, 1.430777",\ + "0.216976, 0.376105, 0.551331, 0.873464, 1.517732",\ + "0.274753, 0.440500, 0.615446, 0.937378, 1.581241",\ + "0.573921, 0.790368, 0.965832, 1.286120, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.023351, 0.298998, 0.632448, 1.249153, 2.482563",\ + "0.027948, 0.299981, 0.634399, 1.249153, 2.482563",\ + "0.040978, 0.302244, 0.634435, 1.249153, 2.482563",\ + "0.052873, 0.305533, 0.634536, 1.249153, 2.482563",\ + "0.128351, 0.343984, 0.640795, 1.251713, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.067343, 0.172682, 0.284189, 0.488369, 0.896728",\ + "0.154756, 0.260000, 0.371470, 0.575674, 0.984081",\ + "0.235108, 0.340335, 0.451497, 0.655702, 1.064113",\ + "0.291783, 0.397884, 0.509040, 0.712947, 1.120760",\ + "0.585410, 0.701221, 0.812673, 1.015961, 1.422537"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.024071, 0.186967, 0.387445, 0.759756, 1.504378",\ + "0.024071, 0.187111, 0.387949, 0.759756, 1.504378",\ + "0.025176, 0.187111, 0.387949, 0.759756, 1.504378",\ + "0.027266, 0.187111, 0.387949, 0.759756, 1.504378",\ + "0.045971, 0.191097, 0.387949, 0.759756, 1.504658"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[20]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.047624, 0.200802, 0.376269, 0.699127, 1.344843",\ + "0.133909, 0.287977, 0.463375, 0.785842, 1.430777",\ + "0.216976, 0.376105, 0.551331, 0.873464, 1.517732",\ + "0.274753, 0.440500, 0.615446, 0.937378, 1.581241",\ + "0.573921, 0.790368, 0.965832, 1.286120, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.023351, 0.298998, 0.632448, 1.247926, 2.473548",\ + "0.027948, 0.299981, 0.634399, 1.247926, 2.473548",\ + "0.040978, 0.302244, 0.634435, 1.248002, 2.473548",\ + "0.052873, 0.305533, 0.634536, 1.248745, 2.473548",\ + "0.128351, 0.343984, 0.640795, 1.251713, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.067343, 0.172682, 0.284189, 0.488369, 0.896728",\ + "0.154756, 0.260000, 0.371470, 0.575674, 0.984081",\ + "0.235108, 0.340335, 0.451497, 0.655702, 1.064113",\ + "0.291783, 0.397884, 0.509040, 0.712947, 1.120760",\ + "0.585410, 0.701221, 0.812673, 1.015961, 1.422537"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.024071, 0.186169, 0.385939, 0.757526, 1.500700",\ + "0.024071, 0.186169, 0.385939, 0.757526, 1.500700",\ + "0.025176, 0.186169, 0.385939, 0.757526, 1.500700",\ + "0.027266, 0.186781, 0.386395, 0.758427, 1.502492",\ + "0.045971, 0.191097, 0.386467, 0.759197, 1.504658"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[20]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.023351, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.211788, 0.165917, 0.135722, 0.124381, 0.138086",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024071, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.265675, 0.190363, 0.122259, 0.099381, 0.163106",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[20]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.023351, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.139594, -0.097166, -0.062704, -0.022783, 0.289451",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024071, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.173554, -0.107466, -0.049560, -0.007532, 0.212647",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[20]_hldr*/ + +} /* end of pin tl_o[20] */ + +pin("tl_o[19]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002405 ; + + /* Other user defined attributes. */ + original_pin : tl_o[19]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.049247, 0.202011, 0.377177, 0.699733, 1.344843",\ + "0.135622, 0.289186, 0.464282, 0.786447, 1.430777",\ + "0.219089, 0.377313, 0.552236, 0.874068, 1.517732",\ + "0.277267, 0.441706, 0.616352, 0.937981, 1.581241",\ + "0.578868, 0.791580, 0.966732, 1.286721, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.025529, 0.301292, 0.634182, 1.250309, 2.482563",\ + "0.029899, 0.302288, 0.636124, 1.250309, 2.482563",\ + "0.042689, 0.304530, 0.636160, 1.250309, 2.482563",\ + "0.054614, 0.307788, 0.636263, 1.250309, 2.482563",\ + "0.130534, 0.345945, 0.642513, 1.252858, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.068762, 0.173425, 0.284737, 0.488725, 0.896701",\ + "0.156170, 0.260743, 0.372018, 0.576030, 0.984055",\ + "0.236545, 0.341075, 0.452045, 0.656059, 1.064086",\ + "0.293277, 0.398624, 0.509587, 0.713303, 1.120734",\ + "0.587496, 0.701965, 0.813219, 1.016316, 1.422511"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.025535, 0.188296, 0.388444, 0.760406, 1.504329",\ + "0.025535, 0.188444, 0.388947, 0.760406, 1.504329",\ + "0.026576, 0.188444, 0.388947, 0.760406, 1.504329",\ + "0.028604, 0.188444, 0.388947, 0.760406, 1.504329",\ + "0.047029, 0.192380, 0.388947, 0.760406, 1.504609"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[19]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.049247, 0.202011, 0.377177, 0.699733, 1.344843",\ + "0.135622, 0.289186, 0.464282, 0.786447, 1.430777",\ + "0.219089, 0.377313, 0.552236, 0.874068, 1.517732",\ + "0.277267, 0.441706, 0.616352, 0.937981, 1.581241",\ + "0.578868, 0.791580, 0.966732, 1.286721, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.025529, 0.301292, 0.634182, 1.249076, 2.473548",\ + "0.029899, 0.302288, 0.636124, 1.249076, 2.473548",\ + "0.042689, 0.304530, 0.636160, 1.249152, 2.473548",\ + "0.054614, 0.307788, 0.636263, 1.249897, 2.473548",\ + "0.130534, 0.345945, 0.642513, 1.252858, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.068762, 0.173425, 0.284737, 0.488725, 0.896701",\ + "0.156170, 0.260743, 0.372018, 0.576030, 0.984055",\ + "0.236545, 0.341075, 0.452045, 0.656059, 1.064086",\ + "0.293277, 0.398624, 0.509587, 0.713303, 1.120734",\ + "0.587496, 0.701965, 0.813219, 1.016316, 1.422511"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.025535, 0.187494, 0.386936, 0.758174, 1.500652",\ + "0.025535, 0.187494, 0.386936, 0.758174, 1.500652",\ + "0.026576, 0.187494, 0.386936, 0.758174, 1.500652",\ + "0.028604, 0.188103, 0.387393, 0.759077, 1.502444",\ + "0.047029, 0.192380, 0.387467, 0.759848, 1.504609"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[19]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025529, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.212708, 0.166837, 0.136642, 0.125302, 0.139006",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025535, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.266222, 0.190910, 0.122806, 0.099928, 0.163653",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[19]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025529, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.140504, -0.098076, -0.063615, -0.023693, 0.288541",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025535, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.174097, -0.108010, -0.050104, -0.008076, 0.212104",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[19]_hldr*/ + +} /* end of pin tl_o[19] */ + +pin("tl_o[18]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002343 ; + + /* Other user defined attributes. */ + original_pin : tl_o[18]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.049079, 0.201886, 0.377083, 0.699670, 1.344843",\ + "0.135444, 0.289061, 0.464188, 0.786384, 1.430777",\ + "0.218870, 0.377188, 0.552143, 0.874006, 1.517732",\ + "0.277007, 0.441581, 0.616258, 0.937919, 1.581241",\ + "0.578356, 0.791455, 0.966639, 1.286659, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.025304, 0.301054, 0.634003, 1.250190, 2.482563",\ + "0.029697, 0.302049, 0.635945, 1.250190, 2.482563",\ + "0.042512, 0.304293, 0.635981, 1.250190, 2.482563",\ + "0.054434, 0.307555, 0.636084, 1.250190, 2.482563",\ + "0.130308, 0.345742, 0.642335, 1.252740, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.068622, 0.173351, 0.284684, 0.488692, 0.896707",\ + "0.156030, 0.260670, 0.371965, 0.575997, 0.984061",\ + "0.236402, 0.341002, 0.451991, 0.656025, 1.064092",\ + "0.293129, 0.398551, 0.509534, 0.713269, 1.120740",\ + "0.587289, 0.701891, 0.813166, 1.016283, 1.422517"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.025390, 0.188165, 0.388347, 0.760345, 1.504341",\ + "0.025390, 0.188312, 0.388850, 0.760345, 1.504341",\ + "0.026437, 0.188312, 0.388850, 0.760345, 1.504341",\ + "0.028472, 0.188312, 0.388850, 0.760345, 1.504341",\ + "0.046924, 0.192253, 0.388850, 0.760345, 1.504621"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[18]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.049079, 0.201886, 0.377083, 0.699670, 1.344843",\ + "0.135444, 0.289061, 0.464188, 0.786384, 1.430777",\ + "0.218870, 0.377188, 0.552143, 0.874006, 1.517732",\ + "0.277007, 0.441581, 0.616258, 0.937919, 1.581241",\ + "0.578356, 0.791455, 0.966639, 1.286659, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.025304, 0.301054, 0.634003, 1.248957, 2.473548",\ + "0.029697, 0.302049, 0.635945, 1.248957, 2.473548",\ + "0.042512, 0.304293, 0.635981, 1.249033, 2.473548",\ + "0.054434, 0.307555, 0.636084, 1.249777, 2.473548",\ + "0.130308, 0.345742, 0.642335, 1.252740, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.068622, 0.173351, 0.284684, 0.488692, 0.896707",\ + "0.156030, 0.260670, 0.371965, 0.575997, 0.984061",\ + "0.236402, 0.341002, 0.451991, 0.656025, 1.064092",\ + "0.293129, 0.398551, 0.509534, 0.713269, 1.120740",\ + "0.587289, 0.701891, 0.813166, 1.016283, 1.422517"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.025390, 0.187363, 0.386838, 0.758113, 1.500664",\ + "0.025390, 0.187363, 0.386838, 0.758113, 1.500664",\ + "0.026437, 0.187363, 0.386838, 0.758113, 1.500664",\ + "0.028472, 0.187972, 0.387296, 0.759016, 1.502455",\ + "0.046924, 0.192253, 0.387369, 0.759786, 1.504621"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[18]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025304, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.212613, 0.166742, 0.136547, 0.125206, 0.138911",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025390, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.266167, 0.190856, 0.122752, 0.099874, 0.163599",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[18]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025304, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.140410, -0.097982, -0.063521, -0.023599, 0.288635",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025390, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.174043, -0.107956, -0.050050, -0.008022, 0.212157",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[18]_hldr*/ + +} /* end of pin tl_o[18] */ + +pin("tl_o[17]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001292 ; + + /* Other user defined attributes. */ + original_pin : tl_o[17]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.046108, 0.199767, 0.375492, 0.698609, 1.344843",\ + "0.132284, 0.286942, 0.462599, 0.785325, 1.430777",\ + "0.214897, 0.375071, 0.550555, 0.872948, 1.517732",\ + "0.272255, 0.439468, 0.614671, 0.936861, 1.581241",\ + "0.568906, 0.789330, 0.965061, 1.285606, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.021470, 0.297034, 0.630964, 1.248164, 2.482563",\ + "0.026264, 0.298006, 0.632922, 1.248164, 2.482563",\ + "0.039476, 0.300287, 0.632958, 1.248164, 2.482563",\ + "0.051325, 0.303602, 0.633057, 1.248164, 2.482563",\ + "0.126317, 0.342305, 0.639325, 1.250732, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.065928, 0.172045, 0.283720, 0.488064, 0.896750",\ + "0.153370, 0.259364, 0.371001, 0.575369, 0.984104",\ + "0.233677, 0.339702, 0.451028, 0.655397, 1.064135",\ + "0.290278, 0.397250, 0.508572, 0.712642, 1.120783",\ + "0.583192, 0.700584, 0.812206, 1.015657, 1.422559"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.022780, 0.185829, 0.386590, 0.759200, 1.504419",\ + "0.022780, 0.185969, 0.387096, 0.759200, 1.504419",\ + "0.023886, 0.185969, 0.387096, 0.759200, 1.504419",\ + "0.026044, 0.185969, 0.387096, 0.759200, 1.504419",\ + "0.044904, 0.189998, 0.387096, 0.759200, 1.504699"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[17]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.046108, 0.199767, 0.375492, 0.698609, 1.344843",\ + "0.132284, 0.286942, 0.462599, 0.785325, 1.430777",\ + "0.214897, 0.375071, 0.550555, 0.872948, 1.517732",\ + "0.272255, 0.439468, 0.614671, 0.936861, 1.581241",\ + "0.568906, 0.789330, 0.965061, 1.285606, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.021470, 0.297034, 0.630964, 1.246942, 2.473548",\ + "0.026264, 0.298006, 0.632922, 1.246942, 2.473548",\ + "0.039476, 0.300287, 0.632958, 1.247017, 2.473548",\ + "0.051325, 0.303602, 0.633057, 1.247760, 2.473548",\ + "0.126317, 0.342305, 0.639325, 1.250732, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.065928, 0.172045, 0.283720, 0.488064, 0.896750",\ + "0.153370, 0.259364, 0.371001, 0.575369, 0.984104",\ + "0.233677, 0.339702, 0.451028, 0.655397, 1.064135",\ + "0.290278, 0.397250, 0.508572, 0.712642, 1.120783",\ + "0.583192, 0.700584, 0.812206, 1.015657, 1.422559"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.022780, 0.185036, 0.385085, 0.756971, 1.500741",\ + "0.022780, 0.185036, 0.385085, 0.756971, 1.500741",\ + "0.023886, 0.185036, 0.385085, 0.756971, 1.500741",\ + "0.026044, 0.185649, 0.385541, 0.757872, 1.502533",\ + "0.044904, 0.189998, 0.385611, 0.758640, 1.504699"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[17]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.021470, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.210993, 0.165122, 0.134927, 0.123587, 0.137292",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.022780, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.265192, 0.189881, 0.121777, 0.098899, 0.162623",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[17]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.021470, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.138808, -0.096380, -0.061918, -0.021997, 0.290238",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.022780, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.173074, -0.106987, -0.049081, -0.007053, 0.213127",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[17]_hldr*/ + +} /* end of pin tl_o[17] */ + +pin("tl_o[16]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001808 ; + + /* Other user defined attributes. */ + original_pin : tl_o[16]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.047630, 0.200806, 0.376273, 0.699130, 1.344843",\ + "0.133916, 0.287981, 0.463378, 0.785845, 1.430777",\ + "0.216984, 0.376109, 0.551334, 0.873467, 1.517732",\ + "0.274762, 0.440505, 0.615450, 0.937380, 1.581241",\ + "0.573940, 0.790372, 0.965835, 1.286123, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.023359, 0.299007, 0.632455, 1.249158, 2.482563",\ + "0.027955, 0.299990, 0.634405, 1.249158, 2.482563",\ + "0.040984, 0.302252, 0.634441, 1.249158, 2.482563",\ + "0.052879, 0.305541, 0.634542, 1.249158, 2.482563",\ + "0.128359, 0.343991, 0.640802, 1.251717, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.067337, 0.172678, 0.284185, 0.488364, 0.896721",\ + "0.154749, 0.259997, 0.371466, 0.575669, 0.984075",\ + "0.235101, 0.340332, 0.451493, 0.655697, 1.064106",\ + "0.291776, 0.397881, 0.509036, 0.712942, 1.120754",\ + "0.585400, 0.701218, 0.812669, 1.015956, 1.422531"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.024064, 0.186961, 0.387438, 0.759747, 1.504366",\ + "0.024064, 0.187105, 0.387942, 0.759747, 1.504366",\ + "0.025170, 0.187105, 0.387942, 0.759747, 1.504366",\ + "0.027260, 0.187105, 0.387942, 0.759747, 1.504366",\ + "0.045966, 0.191091, 0.387942, 0.759747, 1.504646"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[16]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.047630, 0.200806, 0.376273, 0.699130, 1.344843",\ + "0.133916, 0.287981, 0.463378, 0.785845, 1.430777",\ + "0.216984, 0.376109, 0.551334, 0.873467, 1.517732",\ + "0.274762, 0.440505, 0.615450, 0.937380, 1.581241",\ + "0.573940, 0.790372, 0.965835, 1.286123, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.023359, 0.299007, 0.632455, 1.247931, 2.473548",\ + "0.027955, 0.299990, 0.634405, 1.247931, 2.473548",\ + "0.040984, 0.302252, 0.634441, 1.248006, 2.473548",\ + "0.052879, 0.305541, 0.634542, 1.248749, 2.473548",\ + "0.128359, 0.343991, 0.640802, 1.251717, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.067337, 0.172678, 0.284185, 0.488364, 0.896721",\ + "0.154749, 0.259997, 0.371466, 0.575669, 0.984075",\ + "0.235101, 0.340332, 0.451493, 0.655697, 1.064106",\ + "0.291776, 0.397881, 0.509036, 0.712942, 1.120754",\ + "0.585400, 0.701218, 0.812669, 1.015956, 1.422531"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.024064, 0.186164, 0.385931, 0.757517, 1.500689",\ + "0.024064, 0.186164, 0.385931, 0.757517, 1.500689",\ + "0.025170, 0.186164, 0.385931, 0.757517, 1.500689",\ + "0.027260, 0.186775, 0.386388, 0.758419, 1.502481",\ + "0.045966, 0.191091, 0.386459, 0.759188, 1.504646"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[16]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.023359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.204621, 0.158750, 0.128555, 0.117215, 0.130920",\ + "0.211791, 0.165920, 0.135725, 0.124385, 0.138090",\ + "0.293024, 0.247053, 0.216850, 0.205504, 0.219174",\ + "0.388106, 0.341808, 0.311580, 0.300214, 0.313773",\ + "0.793561, 0.745754, 0.715310, 0.703809, 0.716803"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024064, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.259341, 0.184030, 0.115926, 0.093048, 0.156772",\ + "0.265672, 0.190361, 0.122257, 0.099379, 0.163103",\ + "0.344697, 0.269391, 0.201316, 0.178485, 0.242634",\ + "0.449796, 0.374511, 0.306547, 0.283898, 0.349697",\ + "0.899406, 0.824219, 0.756483, 0.734362, 0.805439"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[16]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.023359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.132553, -0.090125, -0.055664, -0.015742, 0.296492",\ + "-0.139597, -0.097169, -0.062708, -0.022786, 0.289448",\ + "-0.216780, -0.174368, -0.139869, -0.100670, 0.202593",\ + "-0.303076, -0.260711, -0.226103, -0.189037, 0.087742",\ + "-0.670076, -0.627993, -0.592717, -0.568584, -0.452318"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024064, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.167403, -0.101316, -0.043410, -0.001382, 0.218797",\ + "-0.173551, -0.107464, -0.049558, -0.007530, 0.212650",\ + "-0.248843, -0.182697, -0.124706, -0.082655, 0.137377",\ + "-0.346211, -0.279755, -0.221320, -0.179149, 0.040114",\ + "-0.760494, -0.692486, -0.632012, -0.589251, -0.373041"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[16]_hldr*/ + +} /* end of pin tl_o[16] */ + +pin("tl_o[15]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.035370 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + function : "0" ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : tl_o[15]; +} /* end of pin tl_o[15] */ + +pin("tl_o[14]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.154883 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : tl_o[14]; + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[62]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.487261, 0.669190, 0.852549, 1.146075, 1.714279",\ + "0.520839, 0.702769, 0.886128, 1.179654, 1.747858",\ + "0.591826, 0.773756, 0.957115, 1.250640, 1.818845",\ + "0.846910, 1.028840, 1.212200, 1.505725, 2.073928",\ + "1.772164, 1.954093, 2.137452, 2.430978, 2.999182",\ + "0.574671, 0.756577, 0.940009, 1.233380, 1.801632",\ + "0.608250, 0.790156, 0.973588, 1.266959, 1.835211",\ + "0.679237, 0.861143, 1.044574, 1.337945, 1.906198",\ + "0.934321, 1.116227, 1.299660, 1.593030, 2.161281",\ + "1.859574, 2.041480, 2.224912, 2.518283, 3.086535",\ + "0.655541, 0.836911, 1.020036, 1.313408, 1.881664",\ + "0.689120, 0.870490, 1.053615, 1.346987, 1.915242",\ + "0.760107, 0.941477, 1.124601, 1.417974, 1.986230",\ + "1.015191, 1.196561, 1.379687, 1.673059, 2.241313",\ + "1.940444, 2.121814, 2.304939, 2.598311, 3.166567",\ + "0.713217, 0.894460, 1.077579, 1.370653, 1.938311",\ + "0.746796, 0.928038, 1.111158, 1.404232, 1.971890",\ + "0.817783, 0.999025, 1.182144, 1.475219, 2.042877",\ + "1.072867, 1.254110, 1.437230, 1.730303, 2.297960",\ + "1.998120, 2.179363, 2.362482, 2.655556, 3.223215",\ + "1.015892, 1.199670, 1.381211, 1.673666, 2.240149",\ + "1.049471, 1.233248, 1.414790, 1.707245, 2.273727",\ + "1.120458, 1.304235, 1.485777, 1.778232, 2.344714",\ + "1.375542, 1.559320, 1.740862, 2.033317, 2.599797",\ + "2.300795, 2.484573, 2.666114, 2.958570, 3.525052"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.023781, 0.023781, 0.023781, 0.023781, 0.023781",\ + "0.069352, 0.069352, 0.069352, 0.069352, 0.069353",\ + "0.200458, 0.200458, 0.200458, 0.200458, 0.200458",\ + "0.686693, 0.686693, 0.686693, 0.686694, 0.686697",\ + "2.458885, 2.458885, 2.458885, 2.458885, 2.458885",\ + "0.023781, 0.023781, 0.023781, 0.023781, 0.023781",\ + "0.069352, 0.069352, 0.069352, 0.069352, 0.069353",\ + "0.200458, 0.200458, 0.200458, 0.200458, 0.200458",\ + "0.686693, 0.686693, 0.686693, 0.686694, 0.686697",\ + "2.458885, 2.458885, 2.458885, 2.458885, 2.458885",\ + "0.023781, 0.023781, 0.023781, 0.023781, 0.023781",\ + "0.069352, 0.069352, 0.069352, 0.069352, 0.069353",\ + "0.200458, 0.200458, 0.200458, 0.200458, 0.200458",\ + "0.686693, 0.686693, 0.686693, 0.686694, 0.686697",\ + "2.458885, 2.458885, 2.458885, 2.458885, 2.458885",\ + "0.023781, 0.023781, 0.023781, 0.023781, 0.023781",\ + "0.069352, 0.069352, 0.069352, 0.069352, 0.069353",\ + "0.200458, 0.200458, 0.200458, 0.200458, 0.200458",\ + "0.686693, 0.686693, 0.686693, 0.686694, 0.686697",\ + "2.458885, 2.458885, 2.458885, 2.458885, 2.458885",\ + "0.023781, 0.023781, 0.023781, 0.023781, 0.023781",\ + "0.069352, 0.069352, 0.069352, 0.069352, 0.069353",\ + "0.200458, 0.200458, 0.200458, 0.200458, 0.200458",\ + "0.686693, 0.686693, 0.686693, 0.686694, 0.686697",\ + "2.458885, 2.458885, 2.458885, 2.458885, 2.458885"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.570397, 0.827870, 1.084327, 1.522623, 2.399216",\ + "0.611284, 0.868757, 1.125214, 1.563510, 2.440103",\ + "0.671440, 0.928913, 1.185369, 1.623666, 2.500259",\ + "0.840387, 1.097859, 1.354316, 1.792613, 2.669205",\ + "1.423797, 1.681270, 1.937729, 2.376020, 3.252604",\ + "0.658623, 0.915349, 1.171797, 1.609338, 2.485150",\ + "0.699510, 0.956236, 1.212684, 1.650225, 2.526037",\ + "0.759666, 1.016392, 1.272839, 1.710381, 2.586193",\ + "0.928613, 1.185339, 1.441786, 1.879327, 2.755138",\ + "1.512023, 1.768749, 2.025198, 2.462735, 3.338538",\ + "0.747341, 1.004170, 1.259759, 1.696960, 2.572105",\ + "0.788228, 1.045057, 1.300646, 1.737847, 2.612992",\ + "0.848383, 1.105212, 1.360802, 1.798002, 2.673148",\ + "1.017330, 1.274159, 1.529749, 1.966949, 2.842093",\ + "1.600740, 1.857569, 2.113161, 2.550357, 3.425493",\ + "0.810342, 1.069571, 1.323894, 1.760873, 2.635614",\ + "0.851229, 1.110458, 1.364781, 1.801760, 2.676501",\ + "0.911385, 1.170614, 1.424936, 1.861916, 2.736657",\ + "1.080332, 1.339561, 1.593883, 2.030862, 2.905602",\ + "1.663742, 1.922971, 2.177295, 2.614270, 3.489002",\ + "1.142661, 1.431230, 1.675450, 2.110093, 2.981070",\ + "1.183547, 1.472117, 1.716337, 2.150980, 3.021957",\ + "1.243703, 1.532272, 1.776492, 2.211136, 3.082113",\ + "1.412650, 1.701219, 1.945439, 2.380082, 3.251059",\ + "1.996059, 2.284630, 2.528851, 2.963490, 3.834458"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.042573, 0.042574, 0.042574, 0.042574, 0.042574",\ + "0.078573, 0.078573, 0.078573, 0.078574, 0.078575",\ + "0.154782, 0.154782, 0.154782, 0.154783, 0.154784",\ + "0.431097, 0.431097, 0.431098, 0.431098, 0.431098",\ + "1.494947, 1.494947, 1.494950, 1.494958, 1.494974",\ + "0.042573, 0.042574, 0.042574, 0.042574, 0.042574",\ + "0.078573, 0.078573, 0.078573, 0.078574, 0.078575",\ + "0.154782, 0.154782, 0.154782, 0.154783, 0.154784",\ + "0.431097, 0.431097, 0.431098, 0.431098, 0.431098",\ + "1.494947, 1.494947, 1.494950, 1.494958, 1.494974",\ + "0.042573, 0.042574, 0.042574, 0.042574, 0.042574",\ + "0.078573, 0.078573, 0.078573, 0.078574, 0.078575",\ + "0.154782, 0.154782, 0.154782, 0.154783, 0.154784",\ + "0.431097, 0.431097, 0.431098, 0.431098, 0.431098",\ + "1.494947, 1.494947, 1.494950, 1.494958, 1.494974",\ + "0.042573, 0.042574, 0.042574, 0.042574, 0.042574",\ + "0.078573, 0.078573, 0.078573, 0.078574, 0.078575",\ + "0.154782, 0.154782, 0.154782, 0.154783, 0.154784",\ + "0.431097, 0.431097, 0.431098, 0.431098, 0.431098",\ + "1.494947, 1.494947, 1.494950, 1.494958, 1.494974",\ + "0.042573, 0.042574, 0.042574, 0.042574, 0.042574",\ + "0.078573, 0.078573, 0.078573, 0.078574, 0.078575",\ + "0.154782, 0.154782, 0.154782, 0.154783, 0.154784",\ + "0.431097, 0.431097, 0.431098, 0.431098, 0.431098",\ + "1.494947, 1.494947, 1.494950, 1.494958, 1.494974"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[14]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[62]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.487261, 0.668812, 0.852015, 1.145595, 1.713488",\ + "0.520839, 0.702391, 0.885594, 1.179174, 1.747067",\ + "0.591826, 0.773378, 0.956580, 1.250161, 1.818054",\ + "0.846910, 1.028462, 1.211666, 1.505246, 2.073137",\ + "1.772164, 1.953715, 2.136918, 2.430498, 2.998391",\ + "0.574671, 0.756130, 0.939295, 1.232900, 1.800842",\ + "0.608250, 0.789709, 0.972874, 1.266479, 1.834420",\ + "0.679237, 0.860696, 1.043861, 1.337466, 1.905408",\ + "0.934321, 1.115781, 1.298946, 1.592551, 2.160491",\ + "1.859574, 2.041033, 2.224198, 2.517803, 3.085745",\ + "0.655541, 0.836464, 1.019322, 1.312929, 1.880873",\ + "0.689120, 0.870043, 1.052901, 1.346508, 1.914452",\ + "0.760107, 0.941030, 1.123888, 1.417494, 1.985439",\ + "1.015191, 1.196114, 1.378973, 1.672579, 2.240522",\ + "1.940444, 2.121367, 2.304225, 2.597832, 3.165776",\ + "0.713217, 0.894301, 1.077028, 1.370367, 1.937906",\ + "0.746796, 0.927880, 1.110607, 1.403946, 1.971485",\ + "0.817783, 0.998867, 1.181593, 1.474933, 2.042472",\ + "1.072867, 1.253952, 1.436679, 1.730018, 2.297555",\ + "1.998120, 2.179204, 2.361931, 2.655270, 3.222809",\ + "1.015892, 1.199670, 1.380685, 1.673546, 2.240149",\ + "1.049471, 1.233248, 1.414264, 1.707125, 2.273727",\ + "1.120458, 1.304235, 1.485251, 1.778112, 2.344714",\ + "1.375542, 1.559320, 1.740336, 2.033197, 2.599797",\ + "2.300795, 2.484573, 2.665588, 2.958449, 3.525052"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.023781, 0.023781, 0.023781, 0.023781, 0.023781",\ + "0.069352, 0.069352, 0.069352, 0.069352, 0.069352",\ + "0.200457, 0.200457, 0.200457, 0.200457, 0.200457",\ + "0.686690, 0.686690, 0.686690, 0.686692, 0.686695",\ + "2.458656, 2.458656, 2.458656, 2.458656, 2.458656",\ + "0.023781, 0.023781, 0.023781, 0.023781, 0.023781",\ + "0.069352, 0.069352, 0.069352, 0.069352, 0.069352",\ + "0.200457, 0.200457, 0.200457, 0.200457, 0.200457",\ + "0.686690, 0.686690, 0.686690, 0.686692, 0.686695",\ + "2.458656, 2.458656, 2.458656, 2.458656, 2.458656",\ + "0.023781, 0.023781, 0.023781, 0.023781, 0.023781",\ + "0.069352, 0.069352, 0.069352, 0.069352, 0.069352",\ + "0.200457, 0.200457, 0.200457, 0.200457, 0.200457",\ + "0.686690, 0.686690, 0.686690, 0.686692, 0.686695",\ + "2.458656, 2.458656, 2.458656, 2.458656, 2.458656",\ + "0.023781, 0.023781, 0.023781, 0.023781, 0.023781",\ + "0.069352, 0.069352, 0.069352, 0.069352, 0.069352",\ + "0.200457, 0.200457, 0.200457, 0.200457, 0.200457",\ + "0.686690, 0.686690, 0.686690, 0.686692, 0.686695",\ + "2.458656, 2.458656, 2.458656, 2.458656, 2.458656",\ + "0.023781, 0.023781, 0.023781, 0.023781, 0.023781",\ + "0.069352, 0.069352, 0.069352, 0.069352, 0.069352",\ + "0.200457, 0.200457, 0.200457, 0.200457, 0.200457",\ + "0.686690, 0.686690, 0.686690, 0.686692, 0.686695",\ + "2.458656, 2.458656, 2.458656, 2.458656, 2.458656"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.570397, 0.827870, 1.084327, 1.522393, 2.397526",\ + "0.611284, 0.868757, 1.125214, 1.563280, 2.438413",\ + "0.671440, 0.928913, 1.185369, 1.623435, 2.498569",\ + "0.840387, 1.097859, 1.354316, 1.792382, 2.667514",\ + "1.423797, 1.681270, 1.937729, 2.375790, 3.250914",\ + "0.658623, 0.915349, 1.171797, 1.609107, 2.483460",\ + "0.699510, 0.956236, 1.212684, 1.649994, 2.524347",\ + "0.759666, 1.016392, 1.272839, 1.710150, 2.584503",\ + "0.928613, 1.185339, 1.441786, 1.879097, 2.753448",\ + "1.512023, 1.768749, 2.025198, 2.462505, 3.336848",\ + "0.747341, 1.004170, 1.259759, 1.696743, 2.570415",\ + "0.788228, 1.045057, 1.300646, 1.737630, 2.611302",\ + "0.848383, 1.105212, 1.360802, 1.797786, 2.671458",\ + "1.017330, 1.274159, 1.529749, 1.966733, 2.840403",\ + "1.600740, 1.857569, 2.113161, 2.550140, 3.423803",\ + "0.810342, 1.069571, 1.323894, 1.760796, 2.633924",\ + "0.851229, 1.110458, 1.364781, 1.801683, 2.674811",\ + "0.911385, 1.170614, 1.424936, 1.861839, 2.734967",\ + "1.080332, 1.339561, 1.593883, 2.030786, 2.903912",\ + "1.663742, 1.922971, 2.177295, 2.614193, 3.487312",\ + "1.142661, 1.431230, 1.675450, 2.110093, 2.979380",\ + "1.183547, 1.472117, 1.716337, 2.150980, 3.020267",\ + "1.243703, 1.532272, 1.776492, 2.211136, 3.080423",\ + "1.412650, 1.701219, 1.945439, 2.380082, 3.249368",\ + "1.996059, 2.284630, 2.528851, 2.963490, 3.832768"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.042570, 0.042570, 0.042570, 0.042570, 0.042570",\ + "0.078571, 0.078571, 0.078572, 0.078573, 0.078575",\ + "0.154780, 0.154780, 0.154781, 0.154782, 0.154784",\ + "0.431094, 0.431094, 0.431094, 0.431094, 0.431094",\ + "1.494932, 1.494932, 1.494936, 1.494948, 1.494973",\ + "0.042570, 0.042570, 0.042570, 0.042570, 0.042570",\ + "0.078571, 0.078571, 0.078572, 0.078573, 0.078575",\ + "0.154780, 0.154780, 0.154781, 0.154782, 0.154784",\ + "0.431094, 0.431094, 0.431094, 0.431094, 0.431094",\ + "1.494932, 1.494932, 1.494936, 1.494948, 1.494973",\ + "0.042570, 0.042570, 0.042570, 0.042570, 0.042570",\ + "0.078571, 0.078571, 0.078572, 0.078573, 0.078575",\ + "0.154780, 0.154780, 0.154781, 0.154782, 0.154784",\ + "0.431094, 0.431094, 0.431094, 0.431094, 0.431094",\ + "1.494932, 1.494932, 1.494936, 1.494948, 1.494973",\ + "0.042570, 0.042570, 0.042570, 0.042570, 0.042570",\ + "0.078571, 0.078571, 0.078572, 0.078573, 0.078575",\ + "0.154780, 0.154780, 0.154781, 0.154782, 0.154784",\ + "0.431094, 0.431094, 0.431094, 0.431094, 0.431094",\ + "1.494932, 1.494932, 1.494936, 1.494948, 1.494973",\ + "0.042570, 0.042570, 0.042570, 0.042570, 0.042570",\ + "0.078571, 0.078571, 0.078572, 0.078573, 0.078575",\ + "0.154780, 0.154780, 0.154781, 0.154782, 0.154784",\ + "0.431094, 0.431094, 0.431094, 0.431094, 0.431094",\ + "1.494932, 1.494932, 1.494936, 1.494948, 1.494973"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[14]_redg_min*/ + +} /* end of pin tl_o[14] */ + +pin("tl_o[13]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.035370 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : tl_o[13]; + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[58]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.284540, 0.564046, 0.863617, 1.380944, 2.415600",\ + "0.298686, 0.578104, 0.877668, 1.395235, 2.430368",\ + "0.322356, 0.601709, 0.901313, 1.419287, 2.455237",\ + "0.588425, 0.867068, 1.165530, 1.682108, 2.715266",\ + "1.177776, 1.456090, 1.753734, 2.268545, 3.298168",\ + "0.372946, 0.651675, 0.951331, 1.467657, 2.501533",\ + "0.387092, 0.665733, 0.965383, 1.481948, 2.516302",\ + "0.410761, 0.689337, 0.989029, 1.506001, 2.541171",\ + "0.676826, 0.954691, 1.253242, 1.768821, 2.801200",\ + "1.266174, 1.543712, 1.841440, 2.355258, 3.384101",\ + "0.462897, 0.740788, 1.039296, 1.555278, 2.588488",\ + "0.477041, 0.754844, 1.053348, 1.569568, 2.603257",\ + "0.500709, 0.778447, 1.076994, 1.593621, 2.628126",\ + "0.766761, 1.043790, 1.341207, 1.856442, 2.888155",\ + "1.356101, 1.632807, 1.929405, 2.442878, 3.471056",\ + "0.527359, 0.806612, 1.103444, 1.619190, 2.651997",\ + "0.541500, 0.820667, 1.117496, 1.633481, 2.666766",\ + "0.565168, 0.844269, 1.141142, 1.657534, 2.691635",\ + "0.831207, 1.109596, 1.405354, 1.920354, 2.951664",\ + "1.420539, 1.698606, 1.993552, 2.506791, 3.534565",\ + "0.868940, 1.173349, 1.455796, 1.968728, 2.997453",\ + "0.883067, 1.187384, 1.469851, 1.983020, 3.012222",\ + "0.906732, 1.210965, 1.493501, 2.007074, 3.037091",\ + "1.172689, 1.476110, 1.757699, 2.269889, 3.297120",\ + "1.761970, 2.065045, 2.345879, 2.856318, 3.880022"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.185739, 0.187595, 0.200176, 0.234510, 0.303179",\ + "0.203933, 0.205579, 0.217466, 0.250509, 0.316595",\ + "0.237929, 0.239084, 0.249124, 0.278309, 0.336679",\ + "0.816189, 0.816358, 0.816864, 0.818096, 0.820559",\ + "2.192673, 2.192673, 2.192836, 2.193388, 2.194490",\ + "0.185741, 0.187611, 0.200283, 0.234510, 0.303179",\ + "0.203935, 0.205594, 0.217569, 0.250509, 0.316595",\ + "0.237932, 0.239093, 0.249216, 0.278309, 0.336679",\ + "0.816190, 0.816359, 0.816868, 0.818096, 0.820559",\ + "2.192673, 2.192673, 2.192838, 2.193388, 2.194490",\ + "0.185746, 0.187647, 0.200285, 0.234510, 0.303179",\ + "0.203942, 0.205625, 0.217571, 0.250509, 0.316595",\ + "0.237941, 0.239114, 0.249217, 0.278309, 0.336679",\ + "0.816195, 0.816361, 0.816868, 0.818096, 0.820559",\ + "2.192673, 2.192673, 2.192838, 2.193388, 2.194490",\ + "0.185751, 0.187699, 0.200291, 0.234510, 0.303179",\ + "0.203948, 0.205670, 0.217577, 0.250509, 0.316595",\ + "0.237949, 0.239145, 0.249223, 0.278309, 0.336679",\ + "0.816200, 0.816364, 0.816869, 0.818096, 0.820559",\ + "2.192673, 2.192673, 2.192838, 2.193388, 2.194490",\ + "0.185783, 0.188312, 0.200639, 0.234651, 0.303179",\ + "0.203989, 0.206205, 0.217912, 0.250645, 0.316595",\ + "0.238001, 0.239502, 0.249518, 0.278429, 0.336679",\ + "0.816229, 0.816400, 0.816881, 0.818101, 0.820559",\ + "2.192673, 2.192673, 2.192844, 2.193390, 2.194490"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.374522, 0.561124, 0.780572, 1.136359, 1.826584",\ + "0.383805, 0.570576, 0.790645, 1.147661, 1.840366",\ + "0.399074, 0.586082, 0.807015, 1.165645, 1.861569",\ + "0.557633, 0.745097, 0.967701, 1.332699, 2.042731",\ + "0.898199, 1.085553, 1.307755, 1.673592, 2.385983",\ + "0.461924, 0.648520, 0.868125, 1.223665, 1.913938",\ + "0.471207, 0.657972, 0.878200, 1.234966, 1.927719",\ + "0.486476, 0.673478, 0.894572, 1.252950, 1.948923",\ + "0.645035, 0.832494, 1.055262, 1.420004, 2.130085",\ + "0.985600, 1.172950, 1.395316, 1.760897, 2.473337",\ + "0.542814, 0.728848, 0.948152, 1.303693, 1.993969",\ + "0.552097, 0.738300, 0.958227, 1.314994, 2.007751",\ + "0.567368, 0.753806, 0.974599, 1.332979, 2.028955",\ + "0.725929, 0.912822, 1.135289, 1.500032, 2.210116",\ + "1.066495, 1.253278, 1.475343, 1.840926, 2.553368",\ + "0.600620, 0.786398, 1.005694, 1.360937, 2.050617",\ + "0.609906, 0.795850, 1.015768, 1.372238, 2.064399",\ + "0.625179, 0.811356, 1.032140, 1.390222, 2.085602",\ + "0.783746, 0.970371, 1.192830, 1.557276, 2.266764",\ + "1.124310, 1.310827, 1.532884, 1.898169, 2.610016",\ + "0.904940, 1.091713, 1.309322, 1.663948, 2.352501",\ + "0.914244, 1.101169, 1.319397, 1.675249, 2.366283",\ + "0.929544, 1.116681, 1.335769, 1.693234, 2.387488",\ + "1.088161, 1.275707, 1.496459, 1.860287, 2.568655",\ + "1.428713, 1.616160, 1.836513, 2.201180, 2.911908"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.065408, 0.068159, 0.078360, 0.098953, 0.140695",\ + "0.068352, 0.070728, 0.079541, 0.099563, 0.141041",\ + "0.087647, 0.089359, 0.095706, 0.112588, 0.148436",\ + "0.381015, 0.381154, 0.381669, 0.388289, 0.403942",\ + "1.027611, 1.027611, 1.027611, 1.028167, 1.029517",\ + "0.065408, 0.068161, 0.078386, 0.098953, 0.140695",\ + "0.068352, 0.070731, 0.079564, 0.099563, 0.141041",\ + "0.087647, 0.089361, 0.095723, 0.112588, 0.148436",\ + "0.381015, 0.381154, 0.381670, 0.388289, 0.403942",\ + "1.027611, 1.027611, 1.027611, 1.028167, 1.029517",\ + "0.065424, 0.068161, 0.078386, 0.098953, 0.140695",\ + "0.068366, 0.070731, 0.079564, 0.099563, 0.141041",\ + "0.087657, 0.089361, 0.095723, 0.112588, 0.148436",\ + "0.381016, 0.381154, 0.381670, 0.388289, 0.403942",\ + "1.027611, 1.027611, 1.027611, 1.028167, 1.029517",\ + "0.065456, 0.068161, 0.078386, 0.098953, 0.140695",\ + "0.068394, 0.070731, 0.079564, 0.099563, 0.141041",\ + "0.087678, 0.089361, 0.095723, 0.112588, 0.148436",\ + "0.381018, 0.381154, 0.381670, 0.388289, 0.403942",\ + "1.027611, 1.027611, 1.027611, 1.028167, 1.029517",\ + "0.065761, 0.068226, 0.078386, 0.098953, 0.140710",\ + "0.068657, 0.070787, 0.079564, 0.099563, 0.141057",\ + "0.087867, 0.089401, 0.095723, 0.112588, 0.148450",\ + "0.381033, 0.381158, 0.381670, 0.388289, 0.403948",\ + "1.027611, 1.027611, 1.027611, 1.028167, 1.029517"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[13]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[58]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.284540, 0.564046, 0.863617, 1.380550, 2.412738",\ + "0.298686, 0.578104, 0.877668, 1.394840, 2.427504",\ + "0.322356, 0.601709, 0.901313, 1.418892, 2.452366",\ + "0.588425, 0.867068, 1.165530, 1.681715, 2.712415",\ + "1.177776, 1.456090, 1.753734, 2.268156, 3.295343",\ + "0.372946, 0.651675, 0.951331, 1.467263, 2.498672",\ + "0.387092, 0.665733, 0.965383, 1.481553, 2.513437",\ + "0.410761, 0.689337, 0.989029, 1.505605, 2.538300",\ + "0.676826, 0.954691, 1.253242, 1.768429, 2.798349",\ + "1.266174, 1.543712, 1.841440, 2.354868, 3.381277",\ + "0.462897, 0.740788, 1.039296, 1.554907, 2.585627",\ + "0.477041, 0.754844, 1.053348, 1.569197, 2.600392",\ + "0.500709, 0.778447, 1.076994, 1.593250, 2.625255",\ + "0.766761, 1.043790, 1.341207, 1.856073, 2.885304",\ + "1.356101, 1.632807, 1.929405, 2.442513, 3.468232",\ + "0.527359, 0.806612, 1.103444, 1.619057, 2.649136",\ + "0.541500, 0.820667, 1.117496, 1.633347, 2.663901",\ + "0.565168, 0.844269, 1.141142, 1.657400, 2.688764",\ + "0.831207, 1.109596, 1.405354, 1.920222, 2.948813",\ + "1.420539, 1.698606, 1.993552, 2.506659, 3.531741",\ + "0.868940, 1.173349, 1.455796, 1.968728, 2.994592",\ + "0.883067, 1.187384, 1.469851, 1.983020, 3.009357",\ + "0.906732, 1.210965, 1.493501, 2.007074, 3.034220",\ + "1.172689, 1.476110, 1.757699, 2.269889, 3.294269",\ + "1.761970, 2.065045, 2.345879, 2.856318, 3.877197"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.185739, 0.187595, 0.200176, 0.234441, 0.302676",\ + "0.203933, 0.205579, 0.217466, 0.250442, 0.316110",\ + "0.237929, 0.239084, 0.249124, 0.278250, 0.336252",\ + "0.816189, 0.816358, 0.816864, 0.818093, 0.820541",\ + "2.191667, 2.191667, 2.191920, 2.192775, 2.194479",\ + "0.185741, 0.187611, 0.200283, 0.234441, 0.302676",\ + "0.203935, 0.205594, 0.217569, 0.250442, 0.316110",\ + "0.237932, 0.239093, 0.249216, 0.278250, 0.336252",\ + "0.816190, 0.816359, 0.816868, 0.818093, 0.820541",\ + "2.191667, 2.191667, 2.191923, 2.192775, 2.194479",\ + "0.185746, 0.187647, 0.200285, 0.234445, 0.302676",\ + "0.203942, 0.205625, 0.217571, 0.250446, 0.316110",\ + "0.237941, 0.239114, 0.249217, 0.278254, 0.336252",\ + "0.816195, 0.816361, 0.816868, 0.818094, 0.820541",\ + "2.191667, 2.191667, 2.191923, 2.192775, 2.194479",\ + "0.185751, 0.187699, 0.200291, 0.234487, 0.302676",\ + "0.203948, 0.205670, 0.217577, 0.250486, 0.316110",\ + "0.237949, 0.239145, 0.249223, 0.278289, 0.336252",\ + "0.816200, 0.816364, 0.816869, 0.818095, 0.820541",\ + "2.191667, 2.191667, 2.191923, 2.192777, 2.194479",\ + "0.185783, 0.188312, 0.200639, 0.234651, 0.302676",\ + "0.203989, 0.206205, 0.217912, 0.250645, 0.316110",\ + "0.238001, 0.239502, 0.249518, 0.278429, 0.336252",\ + "0.816229, 0.816400, 0.816881, 0.818101, 0.820541",\ + "2.191667, 2.191667, 2.191932, 2.192781, 2.194479"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.374522, 0.560710, 0.779750, 1.135509, 1.825184",\ + "0.383805, 0.570161, 0.789818, 1.146803, 1.838953",\ + "0.399074, 0.585665, 0.806181, 1.164778, 1.860141",\ + "0.557633, 0.744678, 0.966854, 1.331789, 2.041233",\ + "0.898199, 1.085135, 1.306912, 1.672675, 2.384473",\ + "0.461924, 0.648027, 0.867031, 1.222814, 1.912538",\ + "0.471207, 0.657479, 0.877099, 1.234108, 1.926307",\ + "0.486476, 0.672983, 0.893462, 1.252083, 1.947495",\ + "0.645035, 0.831996, 1.054135, 1.419094, 2.128587",\ + "0.985600, 1.172452, 1.394193, 1.759980, 2.471827",\ + "0.542814, 0.728355, 0.947058, 1.302843, 1.992569",\ + "0.552097, 0.737807, 0.957126, 1.314137, 2.006338",\ + "0.567368, 0.753311, 0.973489, 1.332111, 2.027526",\ + "0.725929, 0.912324, 1.134162, 1.499123, 2.208618",\ + "1.066495, 1.252781, 1.474220, 1.840009, 2.551858",\ + "0.600620, 0.786214, 1.004849, 1.360430, 2.049899",\ + "0.609906, 0.795666, 1.014919, 1.371727, 2.063674",\ + "0.625179, 0.811172, 1.031284, 1.389706, 2.084870",\ + "0.783746, 0.970186, 1.191961, 1.556734, 2.265996",\ + "1.124310, 1.310642, 1.532018, 1.897623, 2.609242",\ + "0.904940, 1.091713, 1.308519, 1.663736, 2.352501",\ + "0.914244, 1.101169, 1.318589, 1.675035, 2.366283",\ + "0.929544, 1.116681, 1.334955, 1.693017, 2.387488",\ + "1.088161, 1.275707, 1.495632, 1.860060, 2.568655",\ + "1.428713, 1.616160, 1.835689, 2.200952, 2.911908"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.065408, 0.068145, 0.078282, 0.097416, 0.135633",\ + "0.068319, 0.070715, 0.079474, 0.098027, 0.135980",\ + "0.087624, 0.089350, 0.095658, 0.111069, 0.143404",\ + "0.381014, 0.381153, 0.381665, 0.388242, 0.403865",\ + "1.027072, 1.027072, 1.027072, 1.027705, 1.029249",\ + "0.065408, 0.068145, 0.078282, 0.097416, 0.135633",\ + "0.068319, 0.070715, 0.079474, 0.098027, 0.135980",\ + "0.087624, 0.089350, 0.095658, 0.111069, 0.143404",\ + "0.381014, 0.381153, 0.381665, 0.388242, 0.403865",\ + "1.027072, 1.027072, 1.027072, 1.027705, 1.029249",\ + "0.065424, 0.068145, 0.078282, 0.097416, 0.135633",\ + "0.068333, 0.070715, 0.079474, 0.098027, 0.135980",\ + "0.087634, 0.089350, 0.095658, 0.111069, 0.143404",\ + "0.381014, 0.381153, 0.381665, 0.388242, 0.403865",\ + "1.027072, 1.027072, 1.027072, 1.027705, 1.029249",\ + "0.065456, 0.068155, 0.078306, 0.097463, 0.135725",\ + "0.068362, 0.070724, 0.079494, 0.098073, 0.136072",\ + "0.087655, 0.089356, 0.095672, 0.111109, 0.143482",\ + "0.381016, 0.381154, 0.381666, 0.388261, 0.403903",\ + "1.027072, 1.027072, 1.027072, 1.027707, 1.029253",\ + "0.065761, 0.068226, 0.078310, 0.097503, 0.135836",\ + "0.068628, 0.070787, 0.079498, 0.098113, 0.136183",\ + "0.087847, 0.089401, 0.095675, 0.111142, 0.143576",\ + "0.381032, 0.381158, 0.381666, 0.388277, 0.403948",\ + "1.027072, 1.027072, 1.027072, 1.027708, 1.029258"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[13]_redg_min*/ + +} /* end of pin tl_o[13] */ + +pin("tl_o[12]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.020161 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : tl_o[12]; + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[57]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.475879, 0.665118, 0.888399, 1.250294, 1.951686",\ + "0.526872, 0.716033, 0.939041, 1.300629, 2.001501",\ + "0.604552, 0.793643, 1.016400, 1.377502, 2.077400",\ + "0.813681, 1.002691, 1.225160, 1.585609, 2.284153",\ + "1.367036, 1.556010, 1.778356, 2.138460, 2.836268",\ + "0.563289, 0.752511, 0.975963, 1.337600, 2.039039",\ + "0.614282, 0.803427, 1.026603, 1.387934, 2.088855",\ + "0.691962, 0.881036, 1.103961, 1.464807, 2.164753",\ + "0.901091, 1.090085, 1.312721, 1.672914, 2.371507",\ + "1.454446, 1.643404, 1.865916, 2.225765, 2.923622",\ + "0.644207, 0.832845, 1.055990, 1.417628, 2.119071",\ + "0.695200, 0.883761, 1.106630, 1.467962, 2.168886",\ + "0.772879, 0.961370, 1.183988, 1.544836, 2.244785",\ + "0.982008, 1.170418, 1.392748, 1.752943, 2.451539",\ + "1.535362, 1.723738, 1.945943, 2.305794, 3.003654",\ + "0.701978, 0.890394, 1.113533, 1.474873, 2.175719",\ + "0.752969, 0.941309, 1.164173, 1.525207, 2.225534",\ + "0.830648, 1.018919, 1.241531, 1.602080, 2.301433",\ + "1.039776, 1.227967, 1.450291, 1.810187, 2.508186",\ + "1.593130, 1.781286, 2.003486, 2.363039, 3.060301",\ + "1.005526, 1.195782, 1.417165, 1.777886, 2.477606",\ + "1.056509, 1.246695, 1.467805, 1.828220, 2.527421",\ + "1.134180, 1.324303, 1.545163, 1.905094, 2.603319",\ + "1.343298, 1.533349, 1.753923, 2.113201, 2.810072",\ + "1.896648, 2.086668, 2.307118, 2.666052, 3.362187"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.150008, 0.150413, 0.151867, 0.156224, 0.165642",\ + "0.237388, 0.237631, 0.238503, 0.240761, 0.245540",\ + "0.400537, 0.400554, 0.400616, 0.401193, 0.402548",\ + "0.873945, 0.873960, 0.874011, 0.874292, 0.874933",\ + "2.149644, 2.149644, 2.149644, 2.149724, 2.149920",\ + "0.150008, 0.150413, 0.151871, 0.156224, 0.165642",\ + "0.237388, 0.237631, 0.238506, 0.240761, 0.245540",\ + "0.400537, 0.400554, 0.400616, 0.401193, 0.402548",\ + "0.873945, 0.873960, 0.874011, 0.874292, 0.874933",\ + "2.149644, 2.149644, 2.149644, 2.149724, 2.149920",\ + "0.150011, 0.150413, 0.151871, 0.156224, 0.165642",\ + "0.237390, 0.237631, 0.238506, 0.240761, 0.245540",\ + "0.400537, 0.400554, 0.400616, 0.401193, 0.402548",\ + "0.873945, 0.873960, 0.874011, 0.874292, 0.874933",\ + "2.149644, 2.149644, 2.149644, 2.149724, 2.149920",\ + "0.150016, 0.150413, 0.151871, 0.156224, 0.165642",\ + "0.237393, 0.237631, 0.238506, 0.240761, 0.245540",\ + "0.400537, 0.400554, 0.400616, 0.401193, 0.402548",\ + "0.873946, 0.873960, 0.874011, 0.874292, 0.874933",\ + "2.149644, 2.149644, 2.149644, 2.149724, 2.149920",\ + "0.150062, 0.150423, 0.151871, 0.156224, 0.165645",\ + "0.237420, 0.237637, 0.238506, 0.240761, 0.245542",\ + "0.400539, 0.400554, 0.400616, 0.401193, 0.402548",\ + "0.873947, 0.873960, 0.874011, 0.874292, 0.874933",\ + "2.149644, 2.149644, 2.149644, 2.149724, 2.149920"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.321064, 0.601616, 0.902007, 1.418205, 2.450602",\ + "0.356109, 0.636678, 0.937135, 1.453516, 2.486277",\ + "0.406657, 0.687216, 0.987647, 1.504000, 2.536706",\ + "0.536144, 0.816696, 1.117064, 1.633222, 2.665537",\ + "0.873984, 1.154534, 1.454850, 1.970856, 3.002866",\ + "0.409514, 0.689233, 0.989723, 1.504920, 2.536536",\ + "0.444559, 0.724295, 1.024851, 1.540230, 2.572211",\ + "0.495106, 0.774833, 1.075363, 1.590714, 2.622640",\ + "0.624593, 0.904313, 1.204779, 1.719936, 2.751471",\ + "0.962434, 1.242151, 1.542565, 2.057570, 3.088800",\ + "0.498914, 0.778364, 1.077690, 1.592542, 2.623491",\ + "0.533960, 0.813427, 1.112818, 1.627852, 2.659166",\ + "0.584508, 0.863965, 1.163329, 1.678336, 2.709595",\ + "0.713994, 0.993445, 1.292746, 1.807558, 2.838426",\ + "1.051835, 1.331282, 1.630532, 2.145192, 3.175755",\ + "0.562563, 0.844218, 1.141837, 1.656455, 2.687000",\ + "0.597610, 0.879281, 1.176965, 1.691765, 2.722675",\ + "0.648158, 0.929819, 1.227477, 1.742249, 2.773104",\ + "0.777645, 1.059298, 1.356893, 1.871471, 2.901935",\ + "1.115485, 1.397135, 1.694679, 2.209105, 3.239264",\ + "0.898997, 1.211173, 1.494183, 2.005997, 3.032455",\ + "0.934048, 1.246239, 1.529313, 2.041308, 3.068131",\ + "0.984598, 1.296772, 1.579825, 2.091792, 3.118560",\ + "1.114083, 1.426250, 1.709239, 2.221013, 3.247391",\ + "1.451924, 1.764086, 2.047024, 2.558647, 3.584720"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.072029, 0.072117, 0.072944, 0.075686, 0.081171",\ + "0.105035, 0.105045, 0.105444, 0.106815, 0.109557",\ + "0.191067, 0.191185, 0.191447, 0.191928, 0.192889",\ + "0.434550, 0.434818, 0.434976, 0.434976, 0.434976",\ + "1.073490, 1.073490, 1.073593, 1.073946, 1.074653",\ + "0.072030, 0.072117, 0.072953, 0.075686, 0.081171",\ + "0.105035, 0.105045, 0.105449, 0.106815, 0.109557",\ + "0.191068, 0.191185, 0.191449, 0.191928, 0.192889",\ + "0.434555, 0.434819, 0.434976, 0.434976, 0.434976",\ + "1.073490, 1.073490, 1.073594, 1.073946, 1.074653",\ + "0.072035, 0.072117, 0.072953, 0.075686, 0.081171",\ + "0.105035, 0.105045, 0.105449, 0.106815, 0.109557",\ + "0.191071, 0.191187, 0.191449, 0.191928, 0.192889",\ + "0.434567, 0.434821, 0.434976, 0.434976, 0.434976",\ + "1.073490, 1.073490, 1.073594, 1.073946, 1.074653",\ + "0.072040, 0.072118, 0.072953, 0.075686, 0.081171",\ + "0.105036, 0.105045, 0.105449, 0.106815, 0.109557",\ + "0.191073, 0.191190, 0.191449, 0.191928, 0.192889",\ + "0.434578, 0.434825, 0.434976, 0.434976, 0.434976",\ + "1.073490, 1.073490, 1.073594, 1.073946, 1.074653",\ + "0.072068, 0.072127, 0.072981, 0.075698, 0.081171",\ + "0.105040, 0.105046, 0.105463, 0.106821, 0.109557",\ + "0.191088, 0.191220, 0.191454, 0.191930, 0.192889",\ + "0.434649, 0.434864, 0.434976, 0.434976, 0.434976",\ + "1.073490, 1.073490, 1.073597, 1.073947, 1.074653"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[12]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[57]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.475879, 0.664703, 0.887555, 1.249416, 1.950237",\ + "0.526872, 0.715619, 0.938198, 1.299751, 2.000055",\ + "0.604552, 0.793229, 1.015559, 1.376628, 2.075958",\ + "0.813681, 1.002278, 1.224322, 1.584739, 2.282718",\ + "1.367036, 1.555598, 1.777518, 2.137592, 2.834837",\ + "0.563289, 0.752022, 0.974836, 1.336721, 2.037590",\ + "0.614282, 0.802938, 1.025479, 1.387056, 2.087408",\ + "0.691962, 0.880548, 1.102840, 1.463933, 2.163312",\ + "0.901091, 1.089596, 1.311603, 1.672044, 2.370072",\ + "1.454446, 1.642916, 1.864799, 2.224897, 2.922191",\ + "0.644207, 0.832355, 1.054863, 1.416749, 2.117622",\ + "0.695200, 0.883271, 1.105506, 1.467085, 2.167440",\ + "0.772879, 0.960881, 1.182867, 1.543961, 2.243343",\ + "0.982008, 1.169930, 1.391630, 1.752072, 2.450104",\ + "1.535362, 1.723250, 1.944826, 2.304926, 3.002222",\ + "0.701978, 0.890220, 1.112662, 1.474349, 2.174976",\ + "0.752969, 0.941136, 1.163305, 1.524684, 2.224792",\ + "0.830648, 1.018745, 1.240665, 1.601559, 2.300694",\ + "1.039776, 1.227793, 1.449427, 1.809669, 2.507451",\ + "1.593130, 1.781113, 2.002623, 2.362521, 3.059567",\ + "1.005526, 1.195782, 1.416335, 1.777666, 2.477606",\ + "1.056509, 1.246695, 1.466977, 1.828001, 2.527421",\ + "1.134180, 1.324303, 1.544337, 1.904875, 2.603319",\ + "1.343298, 1.533349, 1.753099, 2.112983, 2.810072",\ + "1.896648, 2.086668, 2.306295, 2.665835, 3.362187"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.150008, 0.150411, 0.151856, 0.156196, 0.165595",\ + "0.237385, 0.237630, 0.238497, 0.240747, 0.245517",\ + "0.400536, 0.400554, 0.400616, 0.401188, 0.402541",\ + "0.873945, 0.873960, 0.874011, 0.874290, 0.874930",\ + "2.149610, 2.149610, 2.149610, 2.149694, 2.149902",\ + "0.150008, 0.150411, 0.151856, 0.156196, 0.165595",\ + "0.237385, 0.237630, 0.238497, 0.240747, 0.245517",\ + "0.400536, 0.400554, 0.400616, 0.401188, 0.402541",\ + "0.873945, 0.873960, 0.874011, 0.874290, 0.874930",\ + "2.149610, 2.149610, 2.149610, 2.149694, 2.149902",\ + "0.150011, 0.150411, 0.151856, 0.156196, 0.165595",\ + "0.237387, 0.237630, 0.238497, 0.240747, 0.245517",\ + "0.400536, 0.400554, 0.400616, 0.401188, 0.402541",\ + "0.873945, 0.873960, 0.874011, 0.874290, 0.874930",\ + "2.149610, 2.149610, 2.149610, 2.149694, 2.149902",\ + "0.150016, 0.150412, 0.151859, 0.156208, 0.165618",\ + "0.237390, 0.237631, 0.238499, 0.240753, 0.245528",\ + "0.400537, 0.400554, 0.400616, 0.401190, 0.402544",\ + "0.873945, 0.873960, 0.874011, 0.874290, 0.874931",\ + "2.149610, 2.149610, 2.149610, 2.149695, 2.149903",\ + "0.150062, 0.150423, 0.151860, 0.156217, 0.165645",\ + "0.237418, 0.237637, 0.238499, 0.240757, 0.245542",\ + "0.400539, 0.400554, 0.400616, 0.401192, 0.402548",\ + "0.873947, 0.873960, 0.874011, 0.874291, 0.874933",\ + "2.149610, 2.149610, 2.149610, 2.149695, 2.149903"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.321064, 0.601616, 0.902007, 1.417819, 2.447771",\ + "0.356109, 0.636678, 0.937135, 1.453129, 2.483444",\ + "0.406657, 0.687216, 0.987647, 1.503613, 2.533873",\ + "0.536144, 0.816696, 1.117064, 1.632835, 2.662707",\ + "0.873984, 1.154534, 1.454850, 1.970470, 3.000039",\ + "0.409514, 0.689233, 0.989723, 1.504534, 2.533705",\ + "0.444559, 0.724295, 1.024851, 1.539844, 2.569378",\ + "0.495106, 0.774833, 1.075363, 1.590328, 2.619807",\ + "0.624593, 0.904313, 1.204779, 1.719550, 2.748641",\ + "0.962434, 1.242151, 1.542565, 2.057184, 3.085972",\ + "0.498914, 0.778364, 1.077690, 1.592179, 2.620660",\ + "0.533960, 0.813427, 1.112818, 1.627489, 2.656333",\ + "0.584508, 0.863965, 1.163329, 1.677973, 2.706762",\ + "0.713994, 0.993445, 1.292746, 1.807195, 2.835596",\ + "1.051835, 1.331282, 1.630532, 2.144830, 3.172927",\ + "0.562563, 0.844218, 1.141837, 1.656326, 2.684169",\ + "0.597610, 0.879281, 1.176965, 1.691636, 2.719842",\ + "0.648158, 0.929819, 1.227477, 1.742120, 2.770271",\ + "0.777645, 1.059298, 1.356893, 1.871342, 2.899105",\ + "1.115485, 1.397135, 1.694679, 2.208976, 3.236436",\ + "0.898997, 1.211173, 1.494183, 2.005997, 3.029625",\ + "0.934048, 1.246239, 1.529313, 2.041308, 3.065298",\ + "0.984598, 1.296772, 1.579825, 2.091792, 3.115727",\ + "1.114083, 1.426250, 1.709239, 2.221013, 3.244561",\ + "1.451924, 1.764086, 2.047024, 2.558647, 3.581892"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.072029, 0.072117, 0.072944, 0.075681, 0.081131",\ + "0.105035, 0.105045, 0.105444, 0.106813, 0.109537",\ + "0.191067, 0.191185, 0.191447, 0.191927, 0.192882",\ + "0.434550, 0.434688, 0.434688, 0.434688, 0.434688",\ + "1.072978, 1.072978, 1.073125, 1.073633, 1.074646",\ + "0.072030, 0.072117, 0.072953, 0.075681, 0.081131",\ + "0.105035, 0.105045, 0.105449, 0.106813, 0.109537",\ + "0.191068, 0.191185, 0.191449, 0.191927, 0.192882",\ + "0.434554, 0.434688, 0.434688, 0.434688, 0.434688",\ + "1.072978, 1.072978, 1.073126, 1.073633, 1.074646",\ + "0.072035, 0.072117, 0.072953, 0.075681, 0.081131",\ + "0.105035, 0.105045, 0.105449, 0.106813, 0.109537",\ + "0.191071, 0.191187, 0.191449, 0.191927, 0.192882",\ + "0.434564, 0.434688, 0.434688, 0.434688, 0.434688",\ + "1.072978, 1.072978, 1.073126, 1.073633, 1.074646",\ + "0.072040, 0.072118, 0.072953, 0.075685, 0.081131",\ + "0.105036, 0.105045, 0.105449, 0.106814, 0.109537",\ + "0.191073, 0.191190, 0.191449, 0.191928, 0.192882",\ + "0.434574, 0.434688, 0.434688, 0.434688, 0.434688",\ + "1.072978, 1.072978, 1.073127, 1.073634, 1.074646",\ + "0.072068, 0.072127, 0.072981, 0.075698, 0.081131",\ + "0.105040, 0.105046, 0.105463, 0.106821, 0.109537",\ + "0.191088, 0.191220, 0.191454, 0.191930, 0.192882",\ + "0.434635, 0.434688, 0.434688, 0.434688, 0.434688",\ + "1.072978, 1.072978, 1.073132, 1.073636, 1.074646"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[12]_redg_min*/ + +} /* end of pin tl_o[12] */ + +pin("tl_o[11]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.154883 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : tl_o[11]; + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[1]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.480044, 0.757907, 1.049391, 1.544816, 2.535666",\ + "0.520846, 0.798709, 1.090193, 1.585618, 2.576470",\ + "0.596179, 0.874043, 1.165526, 1.660950, 2.651799",\ + "0.851223, 1.129087, 1.420574, 1.916010, 2.906884",\ + "1.776399, 2.054266, 2.345743, 2.841143, 3.831943",\ + "0.568493, 0.845495, 1.137043, 1.631531, 2.621600",\ + "0.609294, 0.886297, 1.177845, 1.672334, 2.662404",\ + "0.684628, 0.961631, 1.253178, 1.747665, 2.737732",\ + "0.939672, 1.216675, 1.508226, 2.002726, 2.992818",\ + "1.864848, 2.141854, 2.433396, 2.927858, 3.917876",\ + "0.657525, 0.934585, 1.225009, 1.719154, 2.708555",\ + "0.698327, 0.975387, 1.265811, 1.759956, 2.749359",\ + "0.773660, 1.050721, 1.341145, 1.835288, 2.824687",\ + "1.028704, 1.305765, 1.596192, 2.090348, 3.079773",\ + "1.953881, 2.230944, 2.521362, 3.015481, 4.004831",\ + "0.720671, 1.000379, 1.289153, 1.783067, 2.772064",\ + "0.761473, 1.041181, 1.329955, 1.823870, 2.812868",\ + "0.836807, 1.116515, 1.405289, 1.899202, 2.888196",\ + "1.091850, 1.371559, 1.660336, 2.154262, 3.143282",\ + "2.017027, 2.296738, 2.585506, 3.079395, 4.068340",\ + "1.053915, 1.366570, 1.641292, 2.132528, 3.117520",\ + "1.094717, 1.407372, 1.682094, 2.173331, 3.158324",\ + "1.170050, 1.482705, 1.757427, 2.248662, 3.233653",\ + "1.425094, 1.737749, 2.012475, 2.503723, 3.488738",\ + "2.350272, 2.662929, 2.937644, 3.428855, 4.413796"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.033097, 0.033098, 0.033098, 0.033098, 0.033098",\ + "0.082184, 0.082184, 0.082184, 0.082184, 0.082184",\ + "0.206840, 0.206841, 0.206841, 0.206841, 0.206842",\ + "0.691575, 0.691576, 0.691578, 0.691578, 0.691578",\ + "2.469653, 2.469654, 2.469654, 2.469654, 2.469654",\ + "0.033097, 0.033098, 0.033098, 0.033098, 0.033098",\ + "0.082184, 0.082184, 0.082184, 0.082184, 0.082184",\ + "0.206840, 0.206841, 0.206841, 0.206841, 0.206842",\ + "0.691575, 0.691576, 0.691578, 0.691578, 0.691578",\ + "2.469653, 2.469654, 2.469654, 2.469654, 2.469654",\ + "0.033097, 0.033098, 0.033098, 0.033098, 0.033098",\ + "0.082184, 0.082184, 0.082184, 0.082184, 0.082184",\ + "0.206840, 0.206841, 0.206841, 0.206841, 0.206842",\ + "0.691575, 0.691576, 0.691578, 0.691578, 0.691578",\ + "2.469653, 2.469654, 2.469654, 2.469654, 2.469654",\ + "0.033097, 0.033098, 0.033098, 0.033098, 0.033098",\ + "0.082184, 0.082184, 0.082184, 0.082184, 0.082184",\ + "0.206840, 0.206841, 0.206841, 0.206841, 0.206842",\ + "0.691575, 0.691576, 0.691578, 0.691578, 0.691578",\ + "2.469654, 2.469654, 2.469654, 2.469654, 2.469654",\ + "0.033097, 0.033098, 0.033098, 0.033098, 0.033098",\ + "0.082184, 0.082184, 0.082184, 0.082184, 0.082184",\ + "0.206840, 0.206841, 0.206841, 0.206841, 0.206842",\ + "0.691575, 0.691577, 0.691578, 0.691578, 0.691578",\ + "2.469654, 2.469654, 2.469654, 2.469654, 2.469654"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.577593, 0.759063, 0.958904, 1.285183, 1.919119",\ + "0.619104, 0.800573, 1.000415, 1.326696, 1.960636",\ + "0.678962, 0.860432, 1.060273, 1.386554, 2.020497",\ + "0.847206, 1.028676, 1.228518, 1.554798, 2.188738",\ + "1.428635, 1.610105, 1.809947, 2.136236, 2.770198",\ + "0.665008, 0.846447, 1.046407, 1.372488, 2.006473",\ + "0.706519, 0.887958, 1.087918, 1.414001, 2.047990",\ + "0.766377, 0.947816, 1.147776, 1.473860, 2.107850",\ + "0.934621, 1.116060, 1.316020, 1.642103, 2.276092",\ + "1.516050, 1.697490, 1.897449, 2.223541, 2.857552",\ + "0.745878, 0.926784, 1.126434, 1.452517, 2.086504",\ + "0.787388, 0.968295, 1.167944, 1.494029, 2.128021",\ + "0.847246, 1.028153, 1.227803, 1.553888, 2.187881",\ + "1.015491, 1.196397, 1.396047, 1.722131, 2.356123",\ + "1.596920, 1.777826, 1.977476, 2.303569, 2.937583",\ + "0.803511, 0.984332, 1.183978, 1.509762, 2.143152",\ + "0.845022, 1.025843, 1.225488, 1.551274, 2.184669",\ + "0.904880, 1.085701, 1.285347, 1.611133, 2.244529",\ + "1.073124, 1.253945, 1.453591, 1.779376, 2.412771",\ + "1.654553, 1.835374, 2.035020, 2.360815, 2.994231",\ + "1.105600, 1.289533, 1.487611, 1.812776, 2.445014",\ + "1.147110, 1.331044, 1.529122, 1.854289, 2.486530",\ + "1.206968, 1.390902, 1.588980, 1.914148, 2.546391",\ + "1.375213, 1.559146, 1.757225, 2.082391, 2.714632",\ + "1.956642, 2.140575, 2.338654, 2.663829, 3.296093"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.045173, 0.045173, 0.045173, 0.045173, 0.045173",\ + "0.078561, 0.078561, 0.078561, 0.078562, 0.078566",\ + "0.153692, 0.153692, 0.153692, 0.153692, 0.153692",\ + "0.429868, 0.429868, 0.429868, 0.429868, 0.429868",\ + "1.490308, 1.490308, 1.490308, 1.490340, 1.490420",\ + "0.045173, 0.045173, 0.045173, 0.045173, 0.045173",\ + "0.078561, 0.078561, 0.078561, 0.078562, 0.078566",\ + "0.153692, 0.153692, 0.153692, 0.153692, 0.153692",\ + "0.429868, 0.429868, 0.429868, 0.429868, 0.429868",\ + "1.490308, 1.490308, 1.490308, 1.490340, 1.490420",\ + "0.045173, 0.045173, 0.045173, 0.045173, 0.045173",\ + "0.078561, 0.078561, 0.078561, 0.078562, 0.078566",\ + "0.153692, 0.153692, 0.153692, 0.153692, 0.153692",\ + "0.429868, 0.429868, 0.429868, 0.429868, 0.429868",\ + "1.490308, 1.490308, 1.490308, 1.490340, 1.490420",\ + "0.045173, 0.045173, 0.045173, 0.045173, 0.045173",\ + "0.078561, 0.078561, 0.078561, 0.078562, 0.078566",\ + "0.153692, 0.153692, 0.153692, 0.153692, 0.153692",\ + "0.429868, 0.429868, 0.429868, 0.429868, 0.429868",\ + "1.490308, 1.490308, 1.490308, 1.490340, 1.490420",\ + "0.045173, 0.045173, 0.045173, 0.045173, 0.045173",\ + "0.078561, 0.078561, 0.078561, 0.078562, 0.078566",\ + "0.153692, 0.153692, 0.153692, 0.153692, 0.153692",\ + "0.429868, 0.429868, 0.429868, 0.429868, 0.429868",\ + "1.490308, 1.490308, 1.490308, 1.490340, 1.490420"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[11]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[1]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.480044, 0.757907, 1.049391, 1.544474, 2.533147",\ + "0.520846, 0.798709, 1.090193, 1.585276, 2.573951",\ + "0.596179, 0.874043, 1.165526, 1.660608, 2.649279",\ + "0.851223, 1.129087, 1.420574, 1.915668, 2.904364",\ + "1.776399, 2.054266, 2.345743, 2.840801, 3.829424",\ + "0.568493, 0.845495, 1.137043, 1.631189, 2.619081",\ + "0.609294, 0.886297, 1.177845, 1.671992, 2.659884",\ + "0.684628, 0.961631, 1.253178, 1.747323, 2.735213",\ + "0.939672, 1.216675, 1.508226, 2.002384, 2.990298",\ + "1.864848, 2.141854, 2.433396, 2.927516, 3.915357",\ + "0.657525, 0.934585, 1.225009, 1.718833, 2.706036",\ + "0.698327, 0.975387, 1.265811, 1.759635, 2.746840",\ + "0.773660, 1.050721, 1.341145, 1.834967, 2.822168",\ + "1.028704, 1.305765, 1.596192, 2.090027, 3.077253",\ + "1.953881, 2.230944, 2.521362, 3.015160, 4.002313",\ + "0.720671, 1.000379, 1.289153, 1.782954, 2.769545",\ + "0.761473, 1.041181, 1.329955, 1.823757, 2.810349",\ + "0.836807, 1.116515, 1.405289, 1.899088, 2.885677",\ + "1.091850, 1.371559, 1.660336, 2.154149, 3.140762",\ + "2.017027, 2.296738, 2.585506, 3.079281, 4.065822",\ + "1.053915, 1.366570, 1.641292, 2.132528, 3.115001",\ + "1.094717, 1.407372, 1.682094, 2.173331, 3.155805",\ + "1.170050, 1.482705, 1.757427, 2.248662, 3.231133",\ + "1.425094, 1.737749, 2.012475, 2.503723, 3.486218",\ + "2.350272, 2.662929, 2.937644, 3.428855, 4.411278"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.033097, 0.033097, 0.033097, 0.033097, 0.033097",\ + "0.082175, 0.082175, 0.082175, 0.082175, 0.082175",\ + "0.206840, 0.206841, 0.206841, 0.206841, 0.206842",\ + "0.691460, 0.691460, 0.691460, 0.691460, 0.691460",\ + "2.469630, 2.469654, 2.469654, 2.469654, 2.469654",\ + "0.033097, 0.033097, 0.033097, 0.033097, 0.033097",\ + "0.082175, 0.082175, 0.082175, 0.082175, 0.082175",\ + "0.206840, 0.206841, 0.206841, 0.206841, 0.206842",\ + "0.691460, 0.691460, 0.691460, 0.691460, 0.691460",\ + "2.469631, 2.469654, 2.469654, 2.469654, 2.469654",\ + "0.033097, 0.033097, 0.033097, 0.033097, 0.033097",\ + "0.082175, 0.082175, 0.082175, 0.082175, 0.082175",\ + "0.206840, 0.206841, 0.206841, 0.206841, 0.206842",\ + "0.691460, 0.691460, 0.691460, 0.691460, 0.691460",\ + "2.469633, 2.469654, 2.469654, 2.469654, 2.469654",\ + "0.033097, 0.033097, 0.033097, 0.033097, 0.033097",\ + "0.082175, 0.082175, 0.082175, 0.082175, 0.082175",\ + "0.206840, 0.206841, 0.206841, 0.206841, 0.206842",\ + "0.691460, 0.691460, 0.691460, 0.691460, 0.691460",\ + "2.469634, 2.469654, 2.469654, 2.469654, 2.469654",\ + "0.033097, 0.033097, 0.033097, 0.033097, 0.033097",\ + "0.082175, 0.082175, 0.082175, 0.082175, 0.082175",\ + "0.206840, 0.206841, 0.206841, 0.206841, 0.206842",\ + "0.691460, 0.691460, 0.691460, 0.691460, 0.691460",\ + "2.469645, 2.469654, 2.469654, 2.469654, 2.469654"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.577593, 0.758693, 0.958244, 1.284509, 1.918007",\ + "0.619104, 0.800204, 0.999755, 1.326021, 1.959524",\ + "0.678962, 0.860062, 1.059613, 1.385880, 2.019384",\ + "0.847206, 1.028306, 1.227857, 1.554123, 2.187625",\ + "1.428635, 1.609735, 1.809286, 2.135561, 2.769086",\ + "0.665008, 0.846012, 1.045525, 1.371814, 2.005360",\ + "0.706519, 0.887523, 1.087036, 1.413326, 2.046877",\ + "0.766377, 0.947381, 1.146894, 1.473185, 2.106737",\ + "0.934621, 1.115625, 1.315138, 1.641428, 2.274979",\ + "1.516050, 1.697054, 1.896567, 2.222867, 2.856439",\ + "0.745878, 0.926348, 1.125552, 1.451842, 2.085392",\ + "0.787388, 0.967859, 1.167063, 1.493355, 2.126909",\ + "0.847246, 1.027717, 1.226921, 1.553214, 2.186769",\ + "1.015491, 1.195961, 1.395165, 1.721457, 2.355011",\ + "1.596920, 1.777390, 1.976594, 2.302895, 2.936471",\ + "0.803511, 0.984182, 1.183296, 1.509360, 2.142581",\ + "0.845022, 1.025692, 1.224806, 1.550872, 2.184098",\ + "0.904880, 1.085551, 1.284665, 1.610731, 2.243959",\ + "1.073124, 1.253795, 1.452909, 1.778975, 2.412200",\ + "1.654553, 1.835224, 2.034338, 2.360413, 2.993660",\ + "1.105600, 1.289533, 1.486960, 1.812607, 2.445014",\ + "1.147110, 1.331044, 1.528471, 1.854120, 2.486530",\ + "1.206968, 1.390902, 1.588329, 1.913979, 2.546391",\ + "1.375213, 1.559146, 1.756574, 2.082222, 2.714632",\ + "1.956642, 2.140575, 2.338003, 2.663660, 3.296093"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.045164, 0.045164, 0.045164, 0.045164, 0.045164",\ + "0.078561, 0.078561, 0.078561, 0.078562, 0.078566",\ + "0.153612, 0.153612, 0.153612, 0.153612, 0.153612",\ + "0.429864, 0.429864, 0.429864, 0.429864, 0.429864",\ + "1.490306, 1.490306, 1.490306, 1.490338, 1.490419",\ + "0.045164, 0.045164, 0.045164, 0.045164, 0.045164",\ + "0.078561, 0.078561, 0.078561, 0.078562, 0.078566",\ + "0.153612, 0.153612, 0.153612, 0.153612, 0.153612",\ + "0.429864, 0.429864, 0.429864, 0.429864, 0.429864",\ + "1.490306, 1.490306, 1.490306, 1.490338, 1.490419",\ + "0.045164, 0.045164, 0.045164, 0.045164, 0.045164",\ + "0.078561, 0.078561, 0.078561, 0.078562, 0.078566",\ + "0.153612, 0.153612, 0.153612, 0.153612, 0.153612",\ + "0.429864, 0.429864, 0.429864, 0.429864, 0.429864",\ + "1.490306, 1.490306, 1.490306, 1.490338, 1.490419",\ + "0.045164, 0.045164, 0.045164, 0.045164, 0.045164",\ + "0.078561, 0.078561, 0.078561, 0.078562, 0.078566",\ + "0.153612, 0.153612, 0.153612, 0.153612, 0.153612",\ + "0.429864, 0.429864, 0.429864, 0.429864, 0.429864",\ + "1.490306, 1.490306, 1.490306, 1.490339, 1.490419",\ + "0.045164, 0.045164, 0.045164, 0.045164, 0.045164",\ + "0.078561, 0.078561, 0.078561, 0.078562, 0.078566",\ + "0.153612, 0.153612, 0.153612, 0.153612, 0.153612",\ + "0.429864, 0.429864, 0.429864, 0.429864, 0.429864",\ + "1.490306, 1.490306, 1.490306, 1.490339, 1.490420"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[11]_redg_min*/ + +} /* end of pin tl_o[11] */ + +pin("tl_o[10]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.020161 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : tl_o[10]; + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[1]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.364012, 0.625791, 0.912362, 1.416686, 2.425334",\ + "0.413794, 0.675738, 0.964329, 1.475067, 2.496546",\ + "0.489422, 0.751529, 1.041528, 1.556366, 2.586045",\ + "0.695293, 0.957830, 1.249004, 1.765727, 2.799173",\ + "1.246075, 1.508922, 1.800327, 2.315899, 3.347043",\ + "0.451427, 0.713333, 1.000043, 1.503402, 2.511267",\ + "0.501209, 0.763281, 1.052029, 1.561783, 2.582479",\ + "0.576836, 0.839074, 1.129242, 1.643082, 2.671978",\ + "0.782708, 1.045378, 1.336724, 1.852442, 2.885106",\ + "1.333490, 1.596474, 1.888044, 2.402615, 3.432977",\ + "0.533466, 0.802315, 1.088010, 1.591024, 2.598222",\ + "0.583252, 0.852266, 1.139997, 1.649405, 2.669434",\ + "0.658880, 0.928062, 1.217209, 1.730705, 2.758933",\ + "0.864753, 1.134376, 1.424692, 1.940065, 2.972061",\ + "1.415530, 1.685480, 1.976011, 2.490237, 3.519932",\ + "0.596367, 0.867953, 1.152155, 1.654938, 2.661731",\ + "0.646156, 0.917908, 1.204143, 1.713319, 2.732943",\ + "0.721785, 0.993709, 1.281356, 1.794618, 2.822442",\ + "0.927659, 1.200036, 1.488839, 2.003978, 3.035570",\ + "1.478432, 1.751152, 2.040158, 2.554151, 3.583441",\ + "0.928059, 1.232317, 1.504384, 2.004435, 3.007188",\ + "0.977868, 1.282318, 1.556437, 2.062843, 3.078399",\ + "1.053501, 1.358177, 1.633692, 2.144160, 3.167898",\ + "1.259380, 1.564660, 1.841193, 2.353528, 3.381027",\ + "1.810129, 2.115913, 2.392501, 2.903695, 3.928897"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.177438, 0.178519, 0.189473, 0.223901, 0.292757",\ + "0.251359, 0.253407, 0.263275, 0.290387, 0.344610",\ + "0.412697, 0.412697, 0.415313, 0.424472, 0.442790",\ + "0.885478, 0.885674, 0.886375, 0.887778, 0.890585",\ + "2.162748, 2.162748, 2.162938, 2.163605, 2.164938",\ + "0.177438, 0.178526, 0.189583, 0.223901, 0.292757",\ + "0.251359, 0.253420, 0.263361, 0.290387, 0.344610",\ + "0.412697, 0.412697, 0.415342, 0.424472, 0.442790",\ + "0.885478, 0.885676, 0.886379, 0.887778, 0.890585",\ + "2.162748, 2.162748, 2.162940, 2.163605, 2.164938",\ + "0.177475, 0.178542, 0.189585, 0.223901, 0.292757",\ + "0.251427, 0.253451, 0.263362, 0.290387, 0.344610",\ + "0.412697, 0.412697, 0.415343, 0.424472, 0.442790",\ + "0.885478, 0.885680, 0.886380, 0.887778, 0.890585",\ + "2.162748, 2.162748, 2.162940, 2.163605, 2.164938",\ + "0.177499, 0.178566, 0.189590, 0.223901, 0.292757",\ + "0.251473, 0.253495, 0.263367, 0.290387, 0.344610",\ + "0.412697, 0.412697, 0.415344, 0.424472, 0.442790",\ + "0.885478, 0.885687, 0.886380, 0.887778, 0.890585",\ + "2.162748, 2.162748, 2.162940, 2.163605, 2.164938",\ + "0.177651, 0.178840, 0.189940, 0.224044, 0.292757",\ + "0.251761, 0.254016, 0.263642, 0.290499, 0.344610",\ + "0.412697, 0.412697, 0.415437, 0.424510, 0.442790",\ + "0.885478, 0.885760, 0.886394, 0.887784, 0.890585",\ + "2.162748, 2.162748, 2.162947, 2.163608, 2.164938"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.312852, 0.568984, 0.862555, 1.382336, 2.421899",\ + "0.348118, 0.610654, 0.902338, 1.419180, 2.452865",\ + "0.406005, 0.669261, 0.960734, 1.473580, 2.499271",\ + "0.536962, 0.800144, 1.091137, 1.602535, 2.625331",\ + "0.874185, 1.136967, 1.427801, 1.940429, 2.965686",\ + "0.400266, 0.656542, 0.950284, 1.469051, 2.507832",\ + "0.435533, 0.698205, 0.990058, 1.505895, 2.538798",\ + "0.493420, 0.756819, 1.048442, 1.560295, 2.585205",\ + "0.624377, 0.887700, 1.178840, 1.689250, 2.711264",\ + "0.961600, 1.224520, 1.515508, 2.027145, 3.051620",\ + "0.481136, 0.745561, 1.038252, 1.556674, 2.594787",\ + "0.517546, 0.787210, 1.078026, 1.593518, 2.625753",\ + "0.575445, 0.845837, 1.136409, 1.647918, 2.672160",\ + "0.706398, 0.976717, 1.266807, 1.776872, 2.798219",\ + "1.043615, 1.313530, 1.603475, 2.114767, 3.138575",\ + "0.538770, 0.811253, 1.102400, 1.620588, 2.658296",\ + "0.580430, 0.852880, 1.142173, 1.657432, 2.689262",\ + "0.638337, 0.911526, 1.200556, 1.711832, 2.735669",\ + "0.769288, 1.042406, 1.330954, 1.840786, 2.861728",\ + "1.106500, 1.379207, 1.667622, 2.178681, 3.202084",\ + "0.869562, 1.176250, 1.454786, 1.970150, 3.003752",\ + "0.912016, 1.217620, 1.494529, 2.006981, 3.034719",\ + "0.969972, 1.276495, 1.552871, 2.061365, 3.081125",\ + "1.100910, 1.407358, 1.683254, 2.190313, 3.207185",\ + "1.438092, 1.744035, 2.019935, 2.528213, 3.547540"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.081554, 0.088992, 0.106415, 0.139136, 0.204579",\ + "0.124645, 0.129773, 0.146146, 0.179503, 0.246217",\ + "0.203924, 0.205651, 0.213739, 0.234366, 0.275621",\ + "0.443609, 0.443974, 0.447191, 0.457130, 0.477008",\ + "1.100873, 1.101320, 1.101850, 1.102085, 1.102555",\ + "0.081554, 0.089042, 0.106519, 0.139136, 0.204579",\ + "0.124645, 0.129815, 0.146252, 0.179503, 0.246217",\ + "0.203924, 0.205665, 0.213805, 0.234366, 0.275621",\ + "0.443609, 0.443976, 0.447223, 0.457130, 0.477008",\ + "1.100873, 1.101323, 1.101851, 1.102085, 1.102555",\ + "0.081568, 0.089158, 0.106521, 0.139136, 0.204579",\ + "0.124713, 0.129914, 0.146254, 0.179503, 0.246217",\ + "0.203955, 0.205697, 0.213806, 0.234366, 0.275621",\ + "0.443622, 0.443982, 0.447223, 0.457130, 0.477008",\ + "1.100888, 1.101329, 1.101851, 1.102085, 1.102555",\ + "0.081595, 0.089328, 0.106526, 0.139136, 0.204579",\ + "0.124759, 0.130058, 0.146259, 0.179503, 0.246217",\ + "0.203975, 0.205743, 0.213809, 0.234366, 0.275621",\ + "0.443630, 0.443990, 0.447225, 0.457130, 0.477008",\ + "1.100898, 1.101339, 1.101851, 1.102085, 1.102555",\ + "0.082871, 0.091307, 0.106858, 0.139272, 0.204579",\ + "0.125047, 0.131735, 0.146598, 0.179642, 0.246217",\ + "0.204103, 0.206281, 0.214019, 0.234452, 0.275621",\ + "0.443681, 0.444082, 0.447326, 0.457171, 0.477008",\ + "1.100961, 1.101453, 1.101854, 1.102086, 1.102555"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[10]_redg_2703*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[57]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.350851, 0.591855, 0.864128, 1.320281, 2.232588",\ + "0.400592, 0.641701, 0.915140, 1.374804, 2.294134",\ + "0.476229, 0.717426, 0.992120, 1.455680, 2.382801",\ + "0.682141, 0.923562, 1.199150, 1.664642, 2.595626",\ + "1.233045, 1.474598, 1.750161, 2.214853, 3.144235",\ + "0.438261, 0.679403, 0.951654, 1.406996, 2.318522",\ + "0.488002, 0.729251, 1.002677, 1.461519, 2.380068",\ + "0.563639, 0.804976, 1.079670, 1.542395, 2.468735",\ + "0.769551, 1.011115, 1.286705, 1.751357, 2.681560",\ + "1.320455, 1.562152, 1.837715, 2.301567, 3.230169",\ + "0.519097, 0.768378, 1.039617, 1.494618, 2.405477",\ + "0.568838, 0.818228, 1.090640, 1.549141, 2.467023",\ + "0.644474, 0.893955, 1.167633, 1.630017, 2.555690",\ + "0.850399, 1.100099, 1.374669, 1.838978, 2.768515",\ + "1.401325, 1.651139, 1.925678, 2.389189, 3.317124",\ + "0.576709, 0.834005, 1.103754, 1.558531, 2.468986",\ + "0.626450, 0.883858, 1.154778, 1.613054, 2.530532",\ + "0.702087, 0.959588, 1.231772, 1.693930, 2.619199",\ + "0.908034, 1.165738, 1.438808, 1.902892, 2.832024",\ + "1.459002, 1.716783, 1.989817, 2.453102, 3.380633",\ + "0.898537, 1.198301, 1.455491, 1.907824, 2.814442",\ + "0.948280, 1.248191, 1.506551, 1.962362, 2.875988",\ + "1.023916, 1.323954, 1.583584, 2.043254, 2.964655",\ + "1.229826, 1.530187, 1.790640, 2.252224, 3.177480",\ + "1.780725, 2.081283, 2.341641, 2.802431, 3.726089"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.177532, 0.178920, 0.189751, 0.222197, 0.287089",\ + "0.251535, 0.254167, 0.264114, 0.288993, 0.338750",\ + "0.412948, 0.412948, 0.415205, 0.423013, 0.438629",\ + "0.885646, 0.885671, 0.886007, 0.887039, 0.889103",\ + "2.163153, 2.163153, 2.163261, 2.163636, 2.164385",\ + "0.177532, 0.178929, 0.189854, 0.222197, 0.287089",\ + "0.251535, 0.254184, 0.264193, 0.288993, 0.338750",\ + "0.412948, 0.412948, 0.415229, 0.423013, 0.438629",\ + "0.885646, 0.885672, 0.886011, 0.887039, 0.889103",\ + "2.163153, 2.163153, 2.163263, 2.163636, 2.164385",\ + "0.177534, 0.178950, 0.189855, 0.222197, 0.287089",\ + "0.251540, 0.254224, 0.264194, 0.288993, 0.338750",\ + "0.412948, 0.412948, 0.415230, 0.423013, 0.438629",\ + "0.885646, 0.885672, 0.886011, 0.887039, 0.889103",\ + "2.163153, 2.163153, 2.163263, 2.163636, 2.164385",\ + "0.177539, 0.178981, 0.189861, 0.222197, 0.287089",\ + "0.251549, 0.254282, 0.264198, 0.288993, 0.338750",\ + "0.412948, 0.412948, 0.415231, 0.423013, 0.438629",\ + "0.885646, 0.885673, 0.886011, 0.887039, 0.889103",\ + "2.163153, 2.163153, 2.163263, 2.163636, 2.164385",\ + "0.177778, 0.179340, 0.190190, 0.222331, 0.287089",\ + "0.252003, 0.254964, 0.264451, 0.289096, 0.338750",\ + "0.412948, 0.412948, 0.415310, 0.423045, 0.438629",\ + "0.885646, 0.885682, 0.886021, 0.887043, 0.889103",\ + "2.163153, 2.163153, 2.163266, 2.163637, 2.164385"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.307193, 0.533242, 0.809521, 1.279856, 2.220526",\ + "0.336644, 0.576689, 0.852349, 1.318694, 2.251385",\ + "0.393241, 0.634932, 0.911048, 1.376848, 2.308447",\ + "0.524233, 0.765871, 1.043018, 1.512641, 2.451889",\ + "0.861499, 1.102901, 1.379688, 1.849255, 2.788391",\ + "0.394603, 0.620790, 0.897092, 1.366570, 2.306459",\ + "0.424054, 0.664240, 0.939907, 1.405409, 2.337319",\ + "0.480651, 0.722487, 0.998605, 1.463562, 2.394381",\ + "0.611643, 0.853426, 1.130586, 1.599356, 2.537823",\ + "0.948909, 1.190453, 1.467256, 1.935970, 2.874325",\ + "0.475519, 0.709763, 0.985056, 1.454192, 2.393414",\ + "0.504970, 0.753222, 1.027871, 1.493031, 2.424274",\ + "0.561503, 0.811478, 1.086568, 1.551184, 2.481336",\ + "0.692478, 0.942415, 1.218550, 1.686978, 2.624778",\ + "1.029784, 1.279438, 1.555220, 2.023592, 2.961280",\ + "0.533285, 0.775388, 1.049196, 1.518106, 2.456923",\ + "0.562736, 0.818858, 1.092010, 1.556944, 2.487783",\ + "0.619148, 0.877127, 1.150707, 1.615098, 2.544845",\ + "0.750090, 1.008062, 1.282690, 1.750891, 2.688287",\ + "1.087471, 1.345078, 1.619360, 2.087505, 3.024789",\ + "0.839984, 1.139662, 1.401077, 1.867458, 2.802380",\ + "0.883084, 1.183263, 1.443850, 1.906280, 2.833239",\ + "0.940909, 1.241684, 1.502542, 1.964431, 2.890301",\ + "1.071899, 1.372601, 1.634564, 2.100240, 3.033743",\ + "1.409163, 1.709532, 1.971233, 2.436854, 3.370245"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.079414, 0.084257, 0.099312, 0.127519, 0.183935",\ + "0.124385, 0.127318, 0.139681, 0.167608, 0.223461",\ + "0.203732, 0.204755, 0.210826, 0.226691, 0.258421",\ + "0.443641, 0.444109, 0.446299, 0.452176, 0.463930",\ + "1.100911, 1.101486, 1.102125, 1.102253, 1.102511",\ + "0.079414, 0.084301, 0.099401, 0.127519, 0.183935",\ + "0.124385, 0.127346, 0.139769, 0.167608, 0.223461",\ + "0.203732, 0.204765, 0.210876, 0.226691, 0.258421",\ + "0.443641, 0.444112, 0.446317, 0.452176, 0.463930",\ + "1.100911, 1.101489, 1.102125, 1.102253, 1.102511",\ + "0.079415, 0.084402, 0.099402, 0.127519, 0.183935",\ + "0.124385, 0.127408, 0.139771, 0.167608, 0.223461",\ + "0.203732, 0.204786, 0.210877, 0.226691, 0.258421",\ + "0.443642, 0.444120, 0.446318, 0.452176, 0.463930",\ + "1.100913, 1.101498, 1.102125, 1.102253, 1.102511",\ + "0.079417, 0.084547, 0.099407, 0.127519, 0.183935",\ + "0.124385, 0.127499, 0.139776, 0.167608, 0.223461",\ + "0.203733, 0.204818, 0.210879, 0.226691, 0.258421",\ + "0.443643, 0.444130, 0.446319, 0.452176, 0.463930",\ + "1.100914, 1.101511, 1.102125, 1.102253, 1.102511",\ + "0.079511, 0.086252, 0.099693, 0.127636, 0.183935",\ + "0.124397, 0.128559, 0.140059, 0.167723, 0.223461",\ + "0.203741, 0.205184, 0.211040, 0.226757, 0.258421",\ + "0.443724, 0.444251, 0.446378, 0.452200, 0.463930",\ + "1.101013, 1.101659, 1.102126, 1.102254, 1.102511"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[10]_redg_2585*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[58]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.331228, 0.527324, 0.786001, 1.224167, 2.100501",\ + "0.382369, 0.578501, 0.836813, 1.274472, 2.149791",\ + "0.460186, 0.652490, 0.910342, 1.347469, 2.221725",\ + "0.669327, 0.853217, 1.110120, 1.545833, 2.417260",\ + "1.222502, 1.402990, 1.654377, 2.088484, 2.956696",\ + "0.418630, 0.614835, 0.873467, 1.310880, 2.186435",\ + "0.469770, 0.666010, 0.924278, 1.361185, 2.235725",\ + "0.547588, 0.739998, 0.997805, 1.434183, 2.307659",\ + "0.756729, 0.940720, 1.197578, 1.632546, 2.503194",\ + "1.309904, 1.490380, 1.741831, 2.175197, 3.042630",\ + "0.499484, 0.703690, 0.961427, 1.398501, 2.273390",\ + "0.550625, 0.754862, 1.012238, 1.448806, 2.322680",\ + "0.628442, 0.828845, 1.085765, 1.521803, 2.394614",\ + "0.837583, 1.029560, 1.285538, 1.720167, 2.590149",\ + "1.390758, 1.574844, 1.829791, 2.262817, 3.129585",\ + "0.557217, 0.769141, 1.025562, 1.462414, 2.336899",\ + "0.608358, 0.820308, 1.076372, 1.512718, 2.386189",\ + "0.686176, 0.894284, 1.149899, 1.585716, 2.458123",\ + "0.895316, 1.094988, 1.349672, 1.784079, 2.653658",\ + "1.448492, 1.640260, 1.893925, 2.326730, 3.193094",\ + "0.860852, 1.131485, 1.377112, 1.811626, 2.682355",\ + "0.911997, 1.182598, 1.427917, 1.861928, 2.731645",\ + "0.989815, 1.256499, 1.501439, 1.934923, 2.803579",\ + "1.198957, 1.457069, 1.701197, 2.133281, 2.999114",\ + "1.752135, 2.002200, 2.245434, 2.675925, 3.538550"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.247574, 0.253107, 0.265836, 0.292486, 0.345785",\ + "0.313887, 0.316030, 0.323178, 0.341027, 0.376725",\ + "0.435753, 0.438083, 0.443130, 0.454659, 0.477717",\ + "0.887719, 0.887719, 0.887745, 0.887834, 0.888012",\ + "2.165595, 2.165595, 2.165595, 2.165595, 2.165595",\ + "0.247574, 0.253139, 0.265920, 0.292486, 0.345785",\ + "0.313887, 0.316042, 0.323234, 0.341027, 0.376725",\ + "0.435753, 0.438094, 0.443166, 0.454659, 0.477717",\ + "0.887719, 0.887719, 0.887746, 0.887834, 0.888012",\ + "2.165595, 2.165595, 2.165595, 2.165595, 2.165595",\ + "0.247586, 0.253211, 0.265921, 0.292486, 0.345785",\ + "0.313891, 0.316070, 0.323235, 0.341027, 0.376725",\ + "0.435759, 0.438118, 0.443167, 0.454659, 0.477717",\ + "0.887719, 0.887719, 0.887746, 0.887834, 0.888012",\ + "2.165595, 2.165595, 2.165595, 2.165595, 2.165595",\ + "0.247608, 0.253315, 0.265926, 0.292486, 0.345785",\ + "0.313900, 0.316110, 0.323238, 0.341027, 0.376725",\ + "0.435772, 0.438153, 0.443169, 0.454659, 0.477717",\ + "0.887719, 0.887719, 0.887746, 0.887834, 0.888012",\ + "2.165595, 2.165595, 2.165595, 2.165595, 2.165595",\ + "0.247822, 0.254533, 0.266196, 0.292595, 0.345785",\ + "0.313983, 0.316581, 0.323419, 0.341101, 0.376725",\ + "0.435894, 0.438565, 0.443286, 0.454706, 0.477717",\ + "0.887719, 0.887719, 0.887747, 0.887835, 0.888012",\ + "2.165595, 2.165595, 2.165595, 2.165595, 2.165595"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.262843, 0.528242, 0.786656, 1.223429, 2.096977",\ + "0.297860, 0.563309, 0.821748, 1.258583, 2.132253",\ + "0.348398, 0.613835, 0.872220, 1.308997, 2.182551",\ + "0.477894, 0.743312, 1.001644, 1.438265, 2.311508",\ + "0.815730, 1.081145, 1.339443, 1.775996, 2.649102",\ + "0.351215, 0.615754, 0.874118, 1.310142, 2.182910",\ + "0.386233, 0.650820, 0.909210, 1.345296, 2.218187",\ + "0.436771, 0.701346, 0.959682, 1.395710, 2.268485",\ + "0.566267, 0.830823, 1.089105, 1.524978, 2.397442",\ + "0.904103, 1.168656, 1.426904, 1.862709, 2.735036",\ + "0.441060, 0.704611, 0.962078, 1.397763, 2.269865",\ + "0.476082, 0.739678, 0.997171, 1.432917, 2.305142",\ + "0.526621, 0.790203, 1.047642, 1.483330, 2.355440",\ + "0.656116, 0.919680, 1.177066, 1.612599, 2.484397",\ + "0.993953, 1.257513, 1.514864, 1.950330, 2.821991",\ + "0.505420, 0.770065, 1.026212, 1.461676, 2.333374",\ + "0.540445, 0.805132, 1.061305, 1.496829, 2.368651",\ + "0.590985, 0.855656, 1.111776, 1.547243, 2.418949",\ + "0.720478, 0.985133, 1.241200, 1.676511, 2.547906",\ + "1.058316, 1.322965, 1.578998, 2.014242, 2.885500",\ + "0.846347, 1.132446, 1.377748, 1.810882, 2.678830",\ + "0.881392, 1.167515, 1.412841, 1.846036, 2.714107",\ + "0.931940, 1.218030, 1.463312, 1.896449, 2.764405",\ + "1.061427, 1.347505, 1.592734, 2.025717, 2.893362",\ + "1.399268, 1.685334, 1.930532, 2.363448, 3.230956"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.080673, 0.084979, 0.095299, 0.118135, 0.163806",\ + "0.121691, 0.122534, 0.126916, 0.139600, 0.164968",\ + "0.211121, 0.211686, 0.213778, 0.219384, 0.230596",\ + "0.447776, 0.448001, 0.448970, 0.451208, 0.455684",\ + "1.099948, 1.099948, 1.099948, 1.099948, 1.099948",\ + "0.080714, 0.085004, 0.095371, 0.118135, 0.163806",\ + "0.121700, 0.122539, 0.126956, 0.139600, 0.164968",\ + "0.211127, 0.211689, 0.213796, 0.219384, 0.230596",\ + "0.447776, 0.448003, 0.448977, 0.451208, 0.455684",\ + "1.099948, 1.099948, 1.099948, 1.099948, 1.099948",\ + "0.080840, 0.085056, 0.095372, 0.118135, 0.163806",\ + "0.121728, 0.122548, 0.126957, 0.139600, 0.164968",\ + "0.211145, 0.211695, 0.213796, 0.219384, 0.230596",\ + "0.447776, 0.448008, 0.448977, 0.451208, 0.455684",\ + "1.099948, 1.099948, 1.099948, 1.099948, 1.099948",\ + "0.080962, 0.085133, 0.095376, 0.118135, 0.163806",\ + "0.121755, 0.122562, 0.126959, 0.139600, 0.164968",\ + "0.211163, 0.211704, 0.213797, 0.219384, 0.230596",\ + "0.447776, 0.448014, 0.448977, 0.451208, 0.455684",\ + "1.099948, 1.099948, 1.099948, 1.099948, 1.099948",\ + "0.081743, 0.086029, 0.095607, 0.118229, 0.163806",\ + "0.121930, 0.122722, 0.127087, 0.139652, 0.164968",\ + "0.211276, 0.211814, 0.213854, 0.219407, 0.230596",\ + "0.447776, 0.448092, 0.449000, 0.451217, 0.455684",\ + "1.099948, 1.099948, 1.099948, 1.099948, 1.099948"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[10]_redg_2468*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[62]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.515413, 0.691814, 0.891527, 1.333812, 2.218381",\ + "0.561951, 0.738352, 0.942909, 1.385434, 2.270486",\ + "0.647617, 0.824017, 1.044838, 1.487336, 2.372332",\ + "0.870983, 1.047384, 1.281978, 1.724502, 2.609548",\ + "1.434991, 1.611392, 1.857594, 2.300149, 3.185259",\ + "0.602824, 0.779196, 0.979010, 1.420527, 2.304315",\ + "0.649362, 0.825734, 1.030392, 1.472149, 2.356420",\ + "0.735027, 0.911399, 1.132321, 1.574051, 2.458265",\ + "0.958394, 1.134766, 1.369462, 1.811216, 2.695482",\ + "1.522402, 1.698774, 1.945078, 2.386864, 3.271193",\ + "0.683657, 0.859530, 1.066972, 1.508148, 2.391270",\ + "0.730195, 0.906068, 1.118354, 1.559771, 2.443375",\ + "0.815861, 0.991733, 1.220284, 1.661672, 2.545220",\ + "1.039228, 1.215100, 1.457424, 1.898838, 2.782437",\ + "1.603236, 1.779108, 2.033040, 2.474486, 3.358148",\ + "0.741263, 0.917078, 1.131107, 1.572062, 2.454779",\ + "0.787801, 0.963617, 1.182490, 1.623684, 2.506884",\ + "0.873466, 1.049282, 1.284419, 1.725586, 2.608729",\ + "1.096833, 1.272649, 1.521559, 1.962752, 2.845946",\ + "1.660841, 1.842122, 2.097176, 2.538399, 3.421657",\ + "1.043307, 1.237664, 1.482704, 1.921298, 2.800235",\ + "1.089845, 1.288972, 1.534089, 1.972921, 2.852340",\ + "1.175511, 1.390910, 1.636018, 2.074823, 2.954185",\ + "1.398878, 1.628042, 1.873158, 2.311989, 3.191402",\ + "1.962886, 2.203649, 2.448775, 2.887636, 3.767113"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.052252, 0.052252, 0.052266, 0.052296, 0.052356",\ + "0.174387, 0.174387, 0.174377, 0.174356, 0.174314",\ + "0.378093, 0.378093, 0.378069, 0.378020, 0.377921",\ + "0.885671, 0.885671, 0.885661, 0.885629, 0.885567",\ + "2.162771, 2.162771, 2.162787, 2.162833, 2.162925",\ + "0.052252, 0.052252, 0.052266, 0.052296, 0.052356",\ + "0.174387, 0.174387, 0.174377, 0.174356, 0.174314",\ + "0.378093, 0.378093, 0.378069, 0.378020, 0.377921",\ + "0.885671, 0.885671, 0.885661, 0.885629, 0.885567",\ + "2.162771, 2.162771, 2.162787, 2.162833, 2.162925",\ + "0.052252, 0.052252, 0.052266, 0.052296, 0.052356",\ + "0.174387, 0.174387, 0.174377, 0.174356, 0.174314",\ + "0.378093, 0.378093, 0.378069, 0.378020, 0.377921",\ + "0.885671, 0.885671, 0.885661, 0.885629, 0.885567",\ + "2.162771, 2.162771, 2.162787, 2.162833, 2.162925",\ + "0.052252, 0.052252, 0.052266, 0.052296, 0.052356",\ + "0.174387, 0.174387, 0.174377, 0.174356, 0.174314",\ + "0.378093, 0.378093, 0.378069, 0.378020, 0.377921",\ + "0.885671, 0.885671, 0.885661, 0.885629, 0.885567",\ + "2.162771, 2.162772, 2.162787, 2.162833, 2.162925",\ + "0.052252, 0.052255, 0.052266, 0.052296, 0.052356",\ + "0.174387, 0.174384, 0.174376, 0.174356, 0.174314",\ + "0.378093, 0.378087, 0.378069, 0.378020, 0.377921",\ + "0.885671, 0.885670, 0.885660, 0.885629, 0.885567",\ + "2.162771, 2.162773, 2.162788, 2.162833, 2.162925"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.453647, 0.675841, 0.933001, 1.375582, 2.260746",\ + "0.507082, 0.698390, 0.955556, 1.398159, 2.283364",\ + "0.567945, 0.744346, 0.996821, 1.439418, 2.324611",\ + "0.702647, 0.879047, 1.118872, 1.561445, 2.446589",\ + "1.049097, 1.225497, 1.451556, 1.894090, 2.779158",\ + "0.541058, 0.763317, 1.020484, 1.462297, 2.346680",\ + "0.594493, 0.785866, 1.043040, 1.484873, 2.369298",\ + "0.655356, 0.831728, 1.084305, 1.526132, 2.410545",\ + "0.790057, 0.966429, 1.206356, 1.648159, 2.532523",\ + "1.136508, 1.312880, 1.539039, 1.980805, 2.865092",\ + "0.621891, 0.852130, 1.108447, 1.549919, 2.433635",\ + "0.675327, 0.874679, 1.131002, 1.572495, 2.456253",\ + "0.736189, 0.915945, 1.172267, 1.613754, 2.497500",\ + "0.870891, 1.046763, 1.294318, 1.735781, 2.619478",\ + "1.217341, 1.393214, 1.627002, 2.068427, 2.952047",\ + "0.679497, 0.917520, 1.172582, 1.613832, 2.497144",\ + "0.732932, 0.940069, 1.195138, 1.636409, 2.519762",\ + "0.793795, 0.981336, 1.236402, 1.677668, 2.561009",\ + "0.928497, 1.104312, 1.358454, 1.799695, 2.682987",\ + "1.274947, 1.450762, 1.691137, 2.132340, 3.015556",\ + "0.991265, 1.279047, 1.524182, 1.963070, 2.842600",\ + "1.034976, 1.301596, 1.546737, 1.985646, 2.865218",\ + "1.095839, 1.342862, 1.588002, 2.026905, 2.906465",\ + "1.230541, 1.464921, 1.710053, 2.148932, 3.028443",\ + "1.576991, 1.797617, 2.042736, 2.481577, 3.361012"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.060254, 0.060270, 0.060353, 0.060563, 0.060983",\ + "0.114289, 0.114310, 0.114425, 0.114712, 0.115288",\ + "0.199967, 0.199967, 0.200091, 0.200354, 0.200879",\ + "0.445518, 0.445518, 0.445532, 0.445561, 0.445620",\ + "1.101422, 1.101422, 1.101415, 1.101402, 1.101375",\ + "0.060254, 0.060270, 0.060354, 0.060563, 0.060983",\ + "0.114289, 0.114310, 0.114425, 0.114712, 0.115288",\ + "0.199967, 0.199967, 0.200092, 0.200354, 0.200879",\ + "0.445518, 0.445518, 0.445532, 0.445561, 0.445620",\ + "1.101422, 1.101422, 1.101415, 1.101402, 1.101375",\ + "0.060254, 0.060270, 0.060354, 0.060563, 0.060983",\ + "0.114289, 0.114311, 0.114426, 0.114712, 0.115288",\ + "0.199967, 0.199987, 0.200092, 0.200354, 0.200879",\ + "0.445518, 0.445518, 0.445532, 0.445561, 0.445620",\ + "1.101422, 1.101422, 1.101415, 1.101402, 1.101375",\ + "0.060254, 0.060271, 0.060354, 0.060563, 0.060983",\ + "0.114289, 0.114311, 0.114426, 0.114712, 0.115288",\ + "0.199967, 0.199988, 0.200092, 0.200354, 0.200879",\ + "0.445518, 0.445518, 0.445532, 0.445561, 0.445620",\ + "1.101422, 1.101422, 1.101415, 1.101402, 1.101375",\ + "0.060254, 0.060277, 0.060356, 0.060564, 0.060983",\ + "0.114289, 0.114319, 0.114428, 0.114714, 0.115288",\ + "0.199967, 0.199995, 0.200095, 0.200355, 0.200879",\ + "0.445518, 0.445521, 0.445532, 0.445561, 0.445620",\ + "1.101422, 1.101420, 1.101415, 1.101402, 1.101375"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[10]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[1]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.248860, 0.467650, 0.646178, 0.935763, 1.497723",\ + "0.314404, 0.533194, 0.711724, 1.001313, 1.563285",\ + "0.400894, 0.619685, 0.798218, 1.087823, 1.649829",\ + "0.616887, 0.835682, 1.014242, 1.303952, 1.866190",\ + "1.171447, 1.390243, 1.568813, 1.858561, 2.420885",\ + "0.337260, 0.554969, 0.733459, 1.023068, 1.585076",\ + "0.402804, 0.620513, 0.799004, 1.088619, 1.650638",\ + "0.489294, 0.707003, 0.885499, 1.175128, 1.737183",\ + "0.705288, 0.923001, 1.101523, 1.391257, 1.953543",\ + "1.259847, 1.477562, 1.656094, 1.945866, 2.508239",\ + "0.426158, 0.635305, 0.813486, 1.103096, 1.665108",\ + "0.491702, 0.700850, 0.879031, 1.168647, 1.730670",\ + "0.578191, 0.787340, 0.965526, 1.255157, 1.817214",\ + "0.794185, 1.003338, 1.181550, 1.471285, 2.033575",\ + "1.348745, 1.557899, 1.736121, 2.025895, 2.588270",\ + "0.489181, 0.693123, 0.871180, 1.160527, 1.722125",\ + "0.554726, 0.758668, 0.936725, 1.226078, 1.787687",\ + "0.641215, 0.845158, 1.023220, 1.312588, 1.874232",\ + "0.857210, 1.061156, 1.239244, 1.528717, 2.090593",\ + "1.411770, 1.615717, 1.793815, 2.083326, 2.645288",\ + "0.817972, 0.998369, 1.174837, 1.463701, 2.024349",\ + "0.883517, 1.063914, 1.240382, 1.529251, 2.089911",\ + "0.970006, 1.150404, 1.326877, 1.615761, 2.176455",\ + "1.186001, 1.366402, 1.542901, 1.831890, 2.392817",\ + "1.740560, 1.920963, 2.097472, 2.386500, 2.947513"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.135658, 0.135697, 0.135954, 0.136439, 0.137406",\ + "0.233360, 0.233354, 0.233337, 0.233240, 0.233017",\ + "0.397359, 0.397363, 0.397387, 0.397480, 0.397688",\ + "0.873501, 0.873500, 0.873498, 0.873489, 0.873469",\ + "2.140095, 2.140101, 2.140141, 2.140298, 2.140647",\ + "0.135659, 0.135697, 0.135954, 0.136439, 0.137406",\ + "0.233360, 0.233354, 0.233337, 0.233240, 0.233017",\ + "0.397359, 0.397363, 0.397387, 0.397480, 0.397688",\ + "0.873501, 0.873500, 0.873498, 0.873489, 0.873469",\ + "2.140095, 2.140101, 2.140141, 2.140298, 2.140647",\ + "0.135662, 0.135697, 0.135954, 0.136439, 0.137406",\ + "0.233359, 0.233354, 0.233337, 0.233240, 0.233017",\ + "0.397360, 0.397363, 0.397387, 0.397480, 0.397688",\ + "0.873500, 0.873500, 0.873498, 0.873489, 0.873469",\ + "2.140095, 2.140101, 2.140141, 2.140298, 2.140647",\ + "0.135665, 0.135698, 0.135954, 0.136441, 0.137409",\ + "0.233359, 0.233354, 0.233337, 0.233240, 0.233016",\ + "0.397360, 0.397363, 0.397387, 0.397480, 0.397689",\ + "0.873500, 0.873500, 0.873498, 0.873489, 0.873469",\ + "2.140096, 2.140101, 2.140141, 2.140298, 2.140648",\ + "0.135663, 0.135699, 0.135954, 0.136442, 0.137411",\ + "0.233359, 0.233354, 0.233337, 0.233240, 0.233016",\ + "0.397360, 0.397363, 0.397387, 0.397480, 0.397689",\ + "0.873500, 0.873500, 0.873498, 0.873489, 0.873469",\ + "2.140096, 2.140101, 2.140141, 2.140299, 2.140649"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.265941, 0.478440, 0.661761, 0.953483, 1.516542",\ + "0.295974, 0.514750, 0.693420, 0.983435, 1.546355",\ + "0.342294, 0.561099, 0.739726, 1.029692, 1.592503",\ + "0.466491, 0.685293, 0.863899, 1.153787, 1.716424",\ + "0.798732, 1.017531, 1.196112, 1.485904, 2.048326",\ + "0.354342, 0.565759, 0.749042, 1.040788, 1.603895",\ + "0.384375, 0.602069, 0.780701, 1.070740, 1.633708",\ + "0.430695, 0.648418, 0.827006, 1.116997, 1.679856",\ + "0.554892, 0.772612, 0.951180, 1.241092, 1.803777",\ + "0.887133, 1.104849, 1.283393, 1.573209, 2.135679",\ + "0.443241, 0.646096, 0.829069, 1.120816, 1.683927",\ + "0.473273, 0.682406, 0.860728, 1.150768, 1.713740",\ + "0.519593, 0.728755, 0.907033, 1.197025, 1.759888",\ + "0.643790, 0.852948, 1.031207, 1.321121, 1.883808",\ + "0.976031, 1.185186, 1.363420, 1.653237, 2.215711",\ + "0.506266, 0.703926, 0.886774, 1.178249, 1.740947",\ + "0.536299, 0.740226, 0.918422, 1.208200, 1.770759",\ + "0.582618, 0.786573, 0.964728, 1.254457, 1.816907",\ + "0.706815, 0.910767, 1.088901, 1.378552, 1.940827",\ + "1.039055, 1.243004, 1.421114, 1.710669, 2.272729",\ + "0.825950, 1.009259, 1.190433, 1.481423, 2.043174",\ + "0.864615, 1.045486, 1.222079, 1.511375, 2.072986",\ + "0.911409, 1.091819, 1.268385, 1.557632, 2.119133",\ + "1.035605, 1.216013, 1.392558, 1.681726, 2.243053",\ + "1.367846, 1.548250, 1.724771, 2.013843, 2.574954"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.067593, 0.067594, 0.067599, 0.067617, 0.067659",\ + "0.104760, 0.104760, 0.104762, 0.104772, 0.104794",\ + "0.190700, 0.190700, 0.190699, 0.190697, 0.190692",\ + "0.432608, 0.432613, 0.432644, 0.432766, 0.433037",\ + "1.067886, 1.067868, 1.067749, 1.067290, 1.066264",\ + "0.067593, 0.067594, 0.067599, 0.067617, 0.067659",\ + "0.104760, 0.104760, 0.104762, 0.104772, 0.104794",\ + "0.190700, 0.190700, 0.190699, 0.190697, 0.190692",\ + "0.432608, 0.432613, 0.432644, 0.432766, 0.433037",\ + "1.067886, 1.067868, 1.067749, 1.067290, 1.066264",\ + "0.067593, 0.067594, 0.067599, 0.067617, 0.067659",\ + "0.104760, 0.104760, 0.104762, 0.104772, 0.104794",\ + "0.190700, 0.190700, 0.190699, 0.190697, 0.190692",\ + "0.432609, 0.432613, 0.432644, 0.432766, 0.433037",\ + "1.067884, 1.067868, 1.067749, 1.067290, 1.066264",\ + "0.067593, 0.067594, 0.067599, 0.067617, 0.067659",\ + "0.104760, 0.104760, 0.104762, 0.104772, 0.104794",\ + "0.190700, 0.190700, 0.190699, 0.190697, 0.190692",\ + "0.432609, 0.432613, 0.432644, 0.432766, 0.433038",\ + "1.067883, 1.067868, 1.067749, 1.067289, 1.066261",\ + "0.067593, 0.067594, 0.067599, 0.067617, 0.067659",\ + "0.104760, 0.104760, 0.104762, 0.104772, 0.104794",\ + "0.190700, 0.190700, 0.190699, 0.190697, 0.190692",\ + "0.432609, 0.432613, 0.432644, 0.432766, 0.433039",\ + "1.067883, 1.067867, 1.067749, 1.067287, 1.066258"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[10]_redg_min_2547*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[57]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.230530, 0.471836, 0.662565, 0.965687, 1.550670",\ + "0.296073, 0.537386, 0.728118, 1.031247, 1.616246",\ + "0.382561, 0.623892, 0.814634, 1.117786, 1.702834",\ + "0.598538, 0.839995, 1.030804, 1.334111, 1.919485",\ + "1.153092, 1.394595, 1.585429, 1.888794, 2.474288",\ + "0.318838, 0.559155, 0.749846, 1.052992, 1.638023",\ + "0.384382, 0.624704, 0.815398, 1.118552, 1.703600",\ + "0.470869, 0.711210, 0.901915, 1.205091, 1.790187",\ + "0.686851, 0.927314, 1.118085, 1.421416, 2.006838",\ + "1.241406, 1.481914, 1.672710, 1.976099, 2.561641",\ + "0.407830, 0.639488, 0.829873, 1.133020, 1.718055",\ + "0.473374, 0.705038, 0.895425, 1.198581, 1.783631",\ + "0.559863, 0.791544, 0.981942, 1.285120, 1.870219",\ + "0.775854, 1.007647, 1.198112, 1.501445, 2.086870",\ + "1.330413, 1.562247, 1.752737, 2.056127, 2.641673",\ + "0.471102, 0.697352, 0.887595, 1.190479, 1.775129",\ + "0.536647, 0.762902, 0.953148, 1.256040, 1.840706",\ + "0.623137, 0.849408, 1.039664, 1.342579, 1.927294",\ + "0.839138, 1.065512, 1.255835, 1.558905, 2.143945",\ + "1.393700, 1.620112, 1.810460, 2.113587, 2.698749",\ + "0.805138, 1.002911, 1.191255, 1.493676, 2.077422",\ + "0.870685, 1.068460, 1.256808, 1.559237, 2.142998",\ + "0.957184, 1.154967, 1.343324, 1.645776, 2.229586",\ + "1.173243, 1.371074, 1.559495, 1.862102, 2.446239",\ + "1.727827, 1.925676, 2.114120, 2.416785, 3.001042"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.135507, 0.136708, 0.137351, 0.137726, 0.138133",\ + "0.232782, 0.232782, 0.232782, 0.232782, 0.232782",\ + "0.397345, 0.397457, 0.397518, 0.397656, 0.397948",\ + "0.873409, 0.873409, 0.873409, 0.873409, 0.873409",\ + "2.140071, 2.140260, 2.140361, 2.140594, 2.141085",\ + "0.135540, 0.136708, 0.137351, 0.137726, 0.138133",\ + "0.232782, 0.232782, 0.232782, 0.232782, 0.232782",\ + "0.397348, 0.397457, 0.397518, 0.397656, 0.397948",\ + "0.873409, 0.873409, 0.873409, 0.873409, 0.873409",\ + "2.140076, 2.140260, 2.140361, 2.140594, 2.141085",\ + "0.135636, 0.136708, 0.137351, 0.137726, 0.138133",\ + "0.232782, 0.232782, 0.232782, 0.232782, 0.232782",\ + "0.397357, 0.397457, 0.397518, 0.397656, 0.397948",\ + "0.873409, 0.873409, 0.873409, 0.873409, 0.873409",\ + "2.140091, 2.140260, 2.140361, 2.140594, 2.141085",\ + "0.135724, 0.136712, 0.137353, 0.137727, 0.138134",\ + "0.232782, 0.232782, 0.232782, 0.232782, 0.232782",\ + "0.397365, 0.397458, 0.397518, 0.397657, 0.397949",\ + "0.873409, 0.873409, 0.873409, 0.873409, 0.873409",\ + "2.140105, 2.140261, 2.140362, 2.140594, 2.141086",\ + "0.136284, 0.136744, 0.137353, 0.137727, 0.138135",\ + "0.232782, 0.232782, 0.232782, 0.232782, 0.232782",\ + "0.397418, 0.397461, 0.397518, 0.397657, 0.397950",\ + "0.873409, 0.873409, 0.873409, 0.873409, 0.873409",\ + "2.140193, 2.140266, 2.140362, 2.140595, 2.141087"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.247536, 0.465909, 0.655111, 0.957872, 1.542809",\ + "0.277578, 0.504859, 0.694166, 0.997452, 1.583596",\ + "0.323906, 0.557991, 0.747485, 1.050859, 1.637228",\ + "0.448115, 0.688036, 0.877811, 1.181150, 1.767445",\ + "0.780371, 1.021927, 1.212790, 1.516219, 2.101851",\ + "0.335860, 0.553227, 0.742392, 1.045177, 1.630162",\ + "0.365901, 0.592177, 0.781447, 1.084757, 1.670949",\ + "0.412227, 0.645309, 0.834766, 1.138164, 1.724581",\ + "0.536433, 0.775355, 0.965092, 1.268455, 1.854799",\ + "0.868686, 1.109246, 1.300071, 1.603524, 2.189205",\ + "0.424900, 0.633561, 0.822419, 1.125205, 1.710194",\ + "0.454934, 0.672511, 0.861474, 1.164785, 1.750981",\ + "0.501255, 0.725643, 0.914793, 1.218192, 1.804613",\ + "0.625454, 0.855688, 1.045119, 1.348483, 1.934830",\ + "0.957698, 1.189579, 1.380097, 1.683553, 2.269236",\ + "0.488215, 0.691382, 0.880139, 1.182665, 1.767268",\ + "0.518244, 0.730333, 0.919194, 1.222246, 1.808058",\ + "0.564561, 0.783480, 0.972513, 1.275653, 1.861690",\ + "0.688753, 0.913547, 1.102839, 1.405944, 1.991908",\ + "1.020988, 1.247444, 1.437820, 1.741013, 2.326312",\ + "0.816645, 0.996641, 1.183799, 1.485862, 2.069561",\ + "0.852522, 1.035597, 1.222854, 1.525444, 2.110354",\ + "0.898812, 1.088847, 1.276173, 1.578852, 2.163987",\ + "1.022959, 1.219069, 1.406500, 1.709143, 2.294204",\ + "1.355140, 1.553009, 1.741481, 2.044211, 2.628607"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.067590, 0.067613, 0.067625, 0.067653, 0.067711",\ + "0.104758, 0.104770, 0.104776, 0.104791, 0.104822",\ + "0.190676, 0.190676, 0.190676, 0.190676, 0.190676",\ + "0.432590, 0.432736, 0.432815, 0.432996, 0.433377",\ + "1.063080, 1.063080, 1.063080, 1.063080, 1.063080",\ + "0.067591, 0.067613, 0.067625, 0.067653, 0.067711",\ + "0.104758, 0.104770, 0.104776, 0.104791, 0.104822",\ + "0.190676, 0.190676, 0.190676, 0.190676, 0.190676",\ + "0.432594, 0.432736, 0.432815, 0.432996, 0.433377",\ + "1.063080, 1.063080, 1.063080, 1.063080, 1.063080",\ + "0.067593, 0.067613, 0.067625, 0.067653, 0.067711",\ + "0.104759, 0.104770, 0.104776, 0.104791, 0.104822",\ + "0.190676, 0.190676, 0.190676, 0.190676, 0.190676",\ + "0.432605, 0.432736, 0.432815, 0.432996, 0.433377",\ + "1.063080, 1.063080, 1.063080, 1.063080, 1.063080",\ + "0.067594, 0.067613, 0.067625, 0.067653, 0.067711",\ + "0.104760, 0.104770, 0.104776, 0.104791, 0.104822",\ + "0.190676, 0.190676, 0.190676, 0.190676, 0.190676",\ + "0.432616, 0.432737, 0.432815, 0.432996, 0.433378",\ + "1.063080, 1.063080, 1.063080, 1.063080, 1.063080",\ + "0.067593, 0.067614, 0.067625, 0.067653, 0.067711",\ + "0.104766, 0.104770, 0.104776, 0.104791, 0.104822",\ + "0.190676, 0.190676, 0.190676, 0.190676, 0.190676",\ + "0.432685, 0.432741, 0.432815, 0.432997, 0.433379",\ + "1.063080, 1.063080, 1.063080, 1.063080, 1.063080"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[10]_redg_min*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[58]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.244473, 0.505671, 0.697935, 0.998174, 1.574785",\ + "0.300254, 0.556634, 0.748837, 1.048824, 1.624875",\ + "0.376032, 0.633972, 0.826223, 1.125987, 1.701451",\ + "0.578226, 0.841738, 1.034663, 1.334155, 1.908979",\ + "1.122810, 1.385726, 1.587938, 1.887184, 2.461388",\ + "0.332840, 0.592988, 0.785216, 1.085479, 1.662138",\ + "0.388618, 0.643952, 0.836118, 1.136129, 1.712228",\ + "0.464390, 0.721290, 0.913504, 1.213292, 1.788804",\ + "0.666574, 0.929242, 1.121944, 1.421460, 1.996333",\ + "1.211151, 1.473226, 1.675219, 1.974489, 2.548742",\ + "0.422672, 0.673316, 0.865243, 1.165508, 1.742170",\ + "0.478441, 0.724280, 0.916145, 1.216158, 1.792260",\ + "0.554191, 0.801618, 0.993531, 1.293321, 1.868836",\ + "0.756345, 1.010087, 1.201971, 1.501488, 2.076365",\ + "1.300900, 1.562060, 1.755246, 2.054518, 2.628773",\ + "0.487019, 0.731152, 0.922971, 1.222957, 1.799227",\ + "0.542778, 0.782116, 0.973873, 1.273607, 1.849315",\ + "0.618509, 0.859454, 1.051260, 1.350769, 1.925890",\ + "0.820633, 1.067923, 1.259699, 1.558936, 2.133417",\ + "1.365167, 1.621171, 1.812974, 2.111965, 2.685824",\ + "0.827863, 1.036490, 1.226631, 1.526145, 2.101498",\ + "0.883564, 1.087454, 1.277533, 1.576794, 2.151585",\ + "0.959165, 1.164792, 1.354919, 1.653956, 2.228158",\ + "1.161104, 1.373262, 1.563359, 1.862122, 2.435683",\ + "1.705499, 1.926510, 2.116634, 2.415150, 2.988089"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.150101, 0.150101, 0.150101, 0.151542, 0.155060",\ + "0.237371, 0.237371, 0.237371, 0.238239, 0.240357",\ + "0.400588, 0.400588, 0.400588, 0.400716, 0.401031",\ + "0.873603, 0.873603, 0.873603, 0.873603, 0.873603",\ + "2.136242, 2.138523, 2.138971, 2.139329, 2.139329",\ + "0.150101, 0.150101, 0.150101, 0.151542, 0.155060",\ + "0.237371, 0.237371, 0.237371, 0.238239, 0.240357",\ + "0.400588, 0.400588, 0.400588, 0.400716, 0.401031",\ + "0.873603, 0.873603, 0.873603, 0.873603, 0.873603",\ + "2.136282, 2.138528, 2.138971, 2.139329, 2.139329",\ + "0.150101, 0.150101, 0.150101, 0.151542, 0.155060",\ + "0.237371, 0.237371, 0.237371, 0.238239, 0.240357",\ + "0.400588, 0.400588, 0.400588, 0.400716, 0.401031",\ + "0.873603, 0.873603, 0.873603, 0.873603, 0.873603",\ + "2.136409, 2.138540, 2.138971, 2.139329, 2.139329",\ + "0.150101, 0.150101, 0.150101, 0.151547, 0.155068",\ + "0.237371, 0.237371, 0.237371, 0.238242, 0.240362",\ + "0.400588, 0.400588, 0.400588, 0.400717, 0.401031",\ + "0.873603, 0.873603, 0.873603, 0.873603, 0.873603",\ + "2.136531, 2.137884, 2.138973, 2.139329, 2.139329",\ + "0.150101, 0.150101, 0.150101, 0.151550, 0.155079",\ + "0.237371, 0.237371, 0.237371, 0.238244, 0.240369",\ + "0.400588, 0.400588, 0.400588, 0.400717, 0.401032",\ + "0.873603, 0.873603, 0.873603, 0.873603, 0.873603",\ + "2.137311, 2.137926, 2.138974, 2.139329, 2.139329"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.243871, 0.423733, 0.615818, 0.915684, 1.491530",\ + "0.279786, 0.459520, 0.651316, 0.952173, 1.530680",\ + "0.334281, 0.513862, 0.705260, 1.006477, 1.586195",\ + "0.467807, 0.647364, 0.838496, 1.139651, 1.719442",\ + "0.802494, 0.981904, 1.172736, 1.473617, 2.052986",\ + "0.331272, 0.511050, 0.703099, 1.002989, 1.578883",\ + "0.367188, 0.546838, 0.738597, 1.039478, 1.618034",\ + "0.421683, 0.601180, 0.792541, 1.093782, 1.673548",\ + "0.555208, 0.734681, 0.925777, 1.226957, 1.806796",\ + "0.889896, 1.069221, 1.260017, 1.560922, 2.140339",\ + "0.412125, 0.591378, 0.783126, 1.083017, 1.658915",\ + "0.448040, 0.627166, 0.818624, 1.119507, 1.698066",\ + "0.502534, 0.681508, 0.872568, 1.173811, 1.753580",\ + "0.636060, 0.815010, 1.005804, 1.306985, 1.886827",\ + "0.970746, 1.149549, 1.340044, 1.640951, 2.220371",\ + "0.469856, 0.649214, 0.840854, 1.140466, 1.715970",\ + "0.505769, 0.685001, 0.876351, 1.176959, 1.755127",\ + "0.560262, 0.739342, 0.930294, 1.231264, 1.810644",\ + "0.693787, 0.872844, 1.063529, 1.364439, 1.943892",\ + "1.028472, 1.207383, 1.397769, 1.698404, 2.277434",\ + "0.773472, 0.954547, 1.144514, 1.443653, 2.018239",\ + "0.809371, 0.990331, 1.180011, 1.480149, 2.057404",\ + "0.863847, 1.044668, 1.233954, 1.534456, 2.112924",\ + "0.997369, 1.178169, 1.367189, 1.667630, 2.246172",\ + "1.332038, 1.512705, 1.701428, 2.001595, 2.579713"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.071845, 0.072069, 0.072077, 0.072933, 0.075022",\ + "0.105010, 0.105036, 0.105037, 0.105381, 0.106219",\ + "0.190967, 0.191120, 0.191139, 0.191258, 0.191538",\ + "0.431534, 0.431534, 0.431534, 0.431534, 0.431534",\ + "1.063081, 1.064842, 1.065453, 1.065643, 1.065643",\ + "0.071845, 0.072069, 0.072077, 0.072933, 0.075022",\ + "0.105010, 0.105036, 0.105037, 0.105381, 0.106219",\ + "0.190967, 0.191120, 0.191139, 0.191258, 0.191538",\ + "0.431534, 0.431534, 0.431534, 0.431534, 0.431534",\ + "1.063081, 1.064842, 1.065453, 1.065643, 1.065643",\ + "0.071847, 0.072069, 0.072077, 0.072933, 0.075022",\ + "0.105010, 0.105036, 0.105037, 0.105381, 0.106219",\ + "0.190967, 0.191120, 0.191139, 0.191258, 0.191538",\ + "0.431534, 0.431534, 0.431534, 0.431534, 0.431534",\ + "1.063091, 1.064842, 1.065453, 1.065643, 1.065643",\ + "0.071849, 0.072070, 0.072077, 0.072936, 0.075027",\ + "0.105011, 0.105036, 0.105037, 0.105382, 0.106221",\ + "0.190969, 0.191121, 0.191139, 0.191259, 0.191539",\ + "0.431534, 0.431534, 0.431534, 0.431534, 0.431534",\ + "1.063112, 1.064849, 1.065454, 1.065643, 1.065643",\ + "0.071874, 0.072076, 0.072077, 0.072938, 0.075034",\ + "0.105014, 0.105037, 0.105037, 0.105382, 0.106223",\ + "0.190986, 0.191125, 0.191139, 0.191259, 0.191540",\ + "0.431534, 0.431534, 0.431534, 0.431534, 0.431534",\ + "1.063308, 1.064895, 1.065455, 1.065643, 1.065643"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[10]_redg_min_2493*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[62]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.377825, 0.634223, 0.868848, 1.157402, 1.717689",\ + "0.428298, 0.684702, 0.914931, 1.203491, 1.763791",\ + "0.530100, 0.786503, 1.000029, 1.288605, 1.848942",\ + "0.768016, 1.024419, 1.221793, 1.510395, 2.070789",\ + "1.340420, 1.596824, 1.783889, 2.072520, 2.632977",\ + "0.466032, 0.721699, 0.956129, 1.244707, 1.805043",\ + "0.516506, 0.772177, 1.002212, 1.290796, 1.851145",\ + "0.618307, 0.873978, 1.087310, 1.375910, 1.936295",\ + "0.856223, 1.111895, 1.309074, 1.597700, 2.158142",\ + "1.428628, 1.684300, 1.871170, 2.159825, 2.720331",\ + "0.554696, 0.810512, 1.036155, 1.324735, 1.885074",\ + "0.605170, 0.860990, 1.082239, 1.370825, 1.931176",\ + "0.706971, 0.962791, 1.167337, 1.455939, 2.016327",\ + "0.944887, 1.200708, 1.389101, 1.677728, 2.238174",\ + "1.517292, 1.773113, 1.951197, 2.239853, 2.800363",\ + "0.617648, 0.875902, 1.093848, 1.382165, 1.942089",\ + "0.668122, 0.926381, 1.139932, 1.428254, 1.988191",\ + "0.769923, 1.028182, 1.225029, 1.513368, 2.073342",\ + "1.007839, 1.266098, 1.446793, 1.735158, 2.295189",\ + "1.580244, 1.831772, 2.008889, 2.297283, 2.857378",\ + "0.949653, 1.221972, 1.397504, 1.685336, 2.244309",\ + "1.000127, 1.268054, 1.443587, 1.731425, 2.290411",\ + "1.101928, 1.353148, 1.528685, 1.816540, 2.375562",\ + "1.339844, 1.574905, 1.750449, 2.038329, 2.597409",\ + "1.912249, 2.136994, 2.312545, 2.600454, 3.159598"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.041017, 0.041026, 0.041033, 0.041274, 0.041853",\ + "0.147926, 0.147927, 0.147928, 0.147959, 0.148033",\ + "0.374819, 0.374818, 0.374816, 0.374779, 0.374688",\ + "0.869171, 0.869170, 0.869169, 0.869164, 0.869153",\ + "2.137120, 2.137120, 2.137119, 2.137116, 2.137110",\ + "0.041017, 0.041026, 0.041033, 0.041274, 0.041853",\ + "0.147926, 0.147927, 0.147928, 0.147959, 0.148033",\ + "0.374819, 0.374818, 0.374816, 0.374779, 0.374688",\ + "0.869171, 0.869170, 0.869169, 0.869164, 0.869153",\ + "2.137120, 2.137120, 2.137119, 2.137116, 2.137110",\ + "0.041017, 0.041026, 0.041033, 0.041274, 0.041853",\ + "0.147926, 0.147927, 0.147928, 0.147959, 0.148033",\ + "0.374819, 0.374817, 0.374816, 0.374779, 0.374688",\ + "0.869171, 0.869170, 0.869169, 0.869164, 0.869153",\ + "2.137120, 2.137120, 2.137119, 2.137116, 2.137110",\ + "0.041017, 0.041026, 0.041033, 0.041275, 0.041855",\ + "0.147926, 0.147927, 0.147928, 0.147959, 0.148033",\ + "0.374819, 0.374817, 0.374816, 0.374778, 0.374688",\ + "0.869171, 0.869170, 0.869169, 0.869164, 0.869153",\ + "2.137120, 2.137120, 2.137119, 2.137116, 2.137110",\ + "0.041017, 0.041017, 0.041033, 0.041276, 0.041856",\ + "0.147926, 0.147926, 0.147928, 0.147959, 0.148034",\ + "0.374819, 0.374819, 0.374816, 0.374778, 0.374687",\ + "0.869171, 0.869171, 0.869169, 0.869164, 0.869153",\ + "2.137120, 2.137120, 2.137119, 2.137116, 2.137110"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.419293, 0.629601, 0.807148, 1.095622, 1.655731",\ + "0.441693, 0.683002, 0.860568, 1.149118, 1.709396",\ + "0.483042, 0.739446, 0.921121, 1.209730, 1.770140",\ + "0.605027, 0.861431, 1.052488, 1.341094, 1.901499",\ + "0.936548, 1.192951, 1.389827, 1.678402, 2.238737",\ + "0.507500, 0.716919, 0.894429, 1.182927, 1.743084",\ + "0.529901, 0.770320, 0.947849, 1.236423, 1.796750",\ + "0.571249, 0.826922, 1.008402, 1.297035, 1.857493",\ + "0.693234, 0.948907, 1.139769, 1.428399, 1.988852",\ + "1.024755, 1.280427, 1.477108, 1.765707, 2.326091",\ + "0.596164, 0.797253, 0.974456, 1.262956, 1.823116",\ + "0.618565, 0.850654, 1.027876, 1.316451, 1.876781",\ + "0.659913, 0.911193, 1.088429, 1.377064, 1.937525",\ + "0.781898, 1.037719, 1.219796, 1.508428, 2.068884",\ + "1.113419, 1.369240, 1.557135, 1.845736, 2.406122",\ + "0.659116, 0.855070, 1.032148, 1.320385, 1.880130",\ + "0.681517, 0.908471, 1.085568, 1.373881, 1.933796",\ + "0.722865, 0.969009, 1.146121, 1.434493, 1.994540",\ + "0.844850, 1.100376, 1.277488, 1.565857, 2.125898",\ + "1.176371, 1.434630, 1.614827, 1.903165, 2.463137",\ + "0.981445, 1.160292, 1.335804, 1.623556, 2.182350",\ + "1.013522, 1.213693, 1.389224, 1.677052, 2.236016",\ + "1.054870, 1.274231, 1.449777, 1.737664, 2.296760",\ + "1.176855, 1.405599, 1.581144, 1.869029, 2.428119",\ + "1.508376, 1.742946, 1.918483, 2.206336, 2.765357"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.045770, 0.045770, 0.045769, 0.045752, 0.045711",\ + "0.091340, 0.091340, 0.091340, 0.091330, 0.091307",\ + "0.185791, 0.185791, 0.185790, 0.185786, 0.185775",\ + "0.432252, 0.432252, 0.432252, 0.432251, 0.432251",\ + "1.064249, 1.064249, 1.064249, 1.064249, 1.064250",\ + "0.045770, 0.045770, 0.045769, 0.045752, 0.045711",\ + "0.091340, 0.091340, 0.091340, 0.091330, 0.091307",\ + "0.185791, 0.185791, 0.185790, 0.185786, 0.185775",\ + "0.432252, 0.432252, 0.432252, 0.432251, 0.432251",\ + "1.064249, 1.064249, 1.064249, 1.064249, 1.064250",\ + "0.045770, 0.045770, 0.045769, 0.045752, 0.045711",\ + "0.091340, 0.091340, 0.091340, 0.091330, 0.091307",\ + "0.185791, 0.185791, 0.185790, 0.185786, 0.185775",\ + "0.432252, 0.432252, 0.432252, 0.432251, 0.432251",\ + "1.064249, 1.064249, 1.064249, 1.064249, 1.064250",\ + "0.045770, 0.045770, 0.045769, 0.045752, 0.045711",\ + "0.091340, 0.091340, 0.091340, 0.091330, 0.091307",\ + "0.185791, 0.185791, 0.185790, 0.185786, 0.185775",\ + "0.432252, 0.432252, 0.432252, 0.432251, 0.432251",\ + "1.064249, 1.064249, 1.064249, 1.064249, 1.064250",\ + "0.045770, 0.045770, 0.045769, 0.045752, 0.045711",\ + "0.091340, 0.091340, 0.091340, 0.091330, 0.091307",\ + "0.185791, 0.185791, 0.185790, 0.185786, 0.185775",\ + "0.432252, 0.432252, 0.432252, 0.432251, 0.432251",\ + "1.064249, 1.064249, 1.064249, 1.064249, 1.064250"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[10]_redg_min_2445*/ + +} /* end of pin tl_o[10] */ + +pin("tl_o[9]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.020161 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : tl_o[9]; + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[1]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.555398, 0.819461, 1.110403, 1.621818, 2.644648",\ + "0.601280, 0.865373, 1.156432, 1.668153, 2.691596",\ + "0.685796, 0.949972, 1.241371, 1.753978, 2.779193",\ + "0.906647, 1.170955, 1.462887, 1.976883, 3.004877",\ + "1.467724, 1.732179, 2.024706, 2.540253, 3.571347",\ + "0.642813, 0.907018, 1.198106, 1.708533, 2.730582",\ + "0.688695, 0.952929, 1.244136, 1.754869, 2.777529",\ + "0.773211, 1.037529, 1.329078, 1.840694, 2.865127",\ + "0.994062, 1.258512, 1.550598, 2.063599, 3.090810",\ + "1.555139, 1.819737, 2.112422, 2.626968, 3.657281",\ + "0.724929, 0.996034, 1.286073, 1.796156, 2.817537",\ + "0.770813, 1.041946, 1.332103, 1.842491, 2.864485",\ + "0.855331, 1.126547, 1.417045, 1.928316, 2.952082",\ + "1.076186, 1.347532, 1.638566, 2.151221, 3.177765",\ + "1.637269, 1.908760, 2.200390, 2.714591, 3.744236",\ + "0.787882, 1.061721, 1.350220, 1.860070, 2.881046",\ + "0.833767, 1.107633, 1.396250, 1.906405, 2.927994",\ + "0.918287, 1.192236, 1.481192, 1.992230, 3.015591",\ + "1.139145, 1.413225, 1.702713, 2.215135, 3.241274",\ + "1.700230, 1.974455, 2.264537, 2.778505, 3.807745",\ + "1.119904, 1.426659, 1.702520, 2.209597, 3.226502",\ + "1.165792, 1.472579, 1.748554, 2.255933, 3.273450",\ + "1.250324, 1.557204, 1.833505, 2.341762, 3.361047",\ + "1.471201, 1.778225, 2.055039, 2.564673, 3.586730",\ + "2.032307, 2.339493, 2.616879, 3.128049, 4.153201"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.051283, 0.051370, 0.051891, 0.053400, 0.056417",\ + "0.173670, 0.173612, 0.173379, 0.172770, 0.171552",\ + "0.376316, 0.376196, 0.375752, 0.374635, 0.372400",\ + "0.881676, 0.881670, 0.881647, 0.881590, 0.881477",\ + "2.159552, 2.159744, 2.159980, 2.159997, 2.160033",\ + "0.051283, 0.051370, 0.051896, 0.053400, 0.056417",\ + "0.173670, 0.173612, 0.173377, 0.172770, 0.171552",\ + "0.376316, 0.376195, 0.375749, 0.374635, 0.372400",\ + "0.881676, 0.881670, 0.881647, 0.881590, 0.881477",\ + "2.159552, 2.159745, 2.159980, 2.159997, 2.160033",\ + "0.051286, 0.051372, 0.051896, 0.053400, 0.056417",\ + "0.173668, 0.173611, 0.173377, 0.172770, 0.171552",\ + "0.376312, 0.376193, 0.375749, 0.374635, 0.372400",\ + "0.881675, 0.881670, 0.881647, 0.881590, 0.881477",\ + "2.159557, 2.159749, 2.159980, 2.159997, 2.160033",\ + "0.051287, 0.051374, 0.051896, 0.053400, 0.056417",\ + "0.173667, 0.173610, 0.173377, 0.172770, 0.171552",\ + "0.376309, 0.376191, 0.375749, 0.374635, 0.372400",\ + "0.881675, 0.881670, 0.881647, 0.881590, 0.881477",\ + "2.159559, 2.159753, 2.159980, 2.159997, 2.160033",\ + "0.051300, 0.051396, 0.051912, 0.053406, 0.056417",\ + "0.173659, 0.173595, 0.173370, 0.172767, 0.171552",\ + "0.376292, 0.376160, 0.375737, 0.374630, 0.372400",\ + "0.881675, 0.881668, 0.881646, 0.881590, 0.881477",\ + "2.159577, 2.159810, 2.159980, 2.159997, 2.160033"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.496610, 0.760268, 1.051112, 1.563657, 2.588749",\ + "0.547372, 0.811417, 1.102287, 1.613514, 2.635968",\ + "0.606137, 0.870487, 1.162590, 1.677032, 2.705914",\ + "0.741015, 1.005340, 1.297339, 1.811510, 2.839852",\ + "1.088533, 1.352702, 1.644074, 2.156609, 3.181679",\ + "0.584025, 0.847822, 1.138818, 1.650373, 2.674682",\ + "0.634786, 0.898974, 1.189989, 1.700229, 2.721902",\ + "0.693552, 0.958046, 1.250303, 1.763747, 2.791848",\ + "0.828430, 1.092898, 1.385051, 1.898225, 2.925786",\ + "1.175948, 1.440259, 1.731781, 2.243324, 3.267613",\ + "0.666128, 0.936832, 1.226786, 1.737995, 2.761637",\ + "0.716902, 0.987989, 1.277956, 1.787852, 2.808857",\ + "0.775678, 1.047066, 1.338270, 1.851369, 2.878803",\ + "0.910556, 1.181918, 1.473018, 1.985848, 3.012741",\ + "1.258068, 1.529277, 1.819748, 2.330947, 3.354568",\ + "0.729072, 1.002510, 1.290933, 1.801909, 2.825146",\ + "0.779855, 1.053676, 1.342103, 1.851766, 2.872366",\ + "0.838638, 1.112759, 1.402418, 1.915283, 2.942312",\ + "0.973515, 1.247610, 1.537165, 2.049762, 3.076250",\ + "1.321024, 1.594967, 1.883895, 2.394861, 3.418077",\ + "1.061036, 1.367345, 1.643245, 2.151441, 3.170603",\ + "1.111874, 1.418610, 1.694402, 2.201292, 3.217822",\ + "1.170700, 1.477770, 1.754749, 2.264823, 3.287768",\ + "1.305573, 1.612615, 1.889494, 2.399300, 3.421706",\ + "1.653060, 1.959932, 2.236207, 2.744392, 3.763533"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.056276, 0.056853, 0.059193, 0.065291, 0.077487",\ + "0.108806, 0.109601, 0.112826, 0.121230, 0.138038",\ + "0.194961, 0.195687, 0.198632, 0.206304, 0.221649",\ + "0.444958, 0.445039, 0.445369, 0.446227, 0.447944",\ + "1.101681, 1.101643, 1.101491, 1.101094, 1.100299",\ + "0.056276, 0.056857, 0.059213, 0.065291, 0.077487",\ + "0.108806, 0.109606, 0.112853, 0.121230, 0.138038",\ + "0.194961, 0.195692, 0.198656, 0.206304, 0.221649",\ + "0.444958, 0.445040, 0.445371, 0.446227, 0.447944",\ + "1.101681, 1.101643, 1.101490, 1.101094, 1.100299",\ + "0.056295, 0.056865, 0.059213, 0.065291, 0.077487",\ + "0.108832, 0.109618, 0.112853, 0.121230, 0.138038",\ + "0.194985, 0.195703, 0.198657, 0.206304, 0.221649",\ + "0.444961, 0.445041, 0.445371, 0.446227, 0.447944",\ + "1.101680, 1.101642, 1.101490, 1.101094, 1.100299",\ + "0.056308, 0.056878, 0.059214, 0.065291, 0.077487",\ + "0.108850, 0.109635, 0.112855, 0.121230, 0.138038",\ + "0.195002, 0.195719, 0.198658, 0.206304, 0.221649",\ + "0.444963, 0.445043, 0.445372, 0.446227, 0.447944",\ + "1.101679, 1.101642, 1.101490, 1.101094, 1.100299",\ + "0.056389, 0.057025, 0.059276, 0.065316, 0.077487",\ + "0.108962, 0.109837, 0.112940, 0.121265, 0.138038",\ + "0.195104, 0.195903, 0.198736, 0.206336, 0.221649",\ + "0.444974, 0.445063, 0.445380, 0.446231, 0.447944",\ + "1.101673, 1.101632, 1.101485, 1.101092, 1.100299"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[9]_redg_2686*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[57]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.541885, 0.785038, 1.063858, 1.534026, 2.474360",\ + "0.587770, 0.830960, 1.109901, 1.580353, 2.521255",\ + "0.672293, 0.915590, 1.194882, 1.666154, 2.608697",\ + "0.893156, 1.136622, 1.416462, 1.889021, 2.834138",\ + "1.454245, 1.697900, 1.978353, 2.452348, 3.400338",\ + "0.629296, 0.872602, 1.151428, 1.620740, 2.560294",\ + "0.675181, 0.918525, 1.197473, 1.667067, 2.607188",\ + "0.759703, 1.003156, 1.282456, 1.752868, 2.694631",\ + "0.980566, 1.224188, 1.504040, 1.975736, 2.920072",\ + "1.541656, 1.785468, 2.065936, 2.539063, 3.486272",\ + "0.710134, 0.961613, 1.239393, 1.708362, 2.647249",\ + "0.756019, 1.007537, 1.285437, 1.754689, 2.694144",\ + "0.840542, 1.092169, 1.370420, 1.840490, 2.781586",\ + "1.061405, 1.313204, 1.592004, 2.063357, 3.007027",\ + "1.622495, 1.874487, 2.153900, 2.626685, 3.573227",\ + "0.767752, 1.027293, 1.303532, 1.772275, 2.710758",\ + "0.813637, 1.073217, 1.349577, 1.818602, 2.757653",\ + "0.898160, 1.157852, 1.434560, 1.904403, 2.845095",\ + "1.119024, 1.378891, 1.656144, 2.127271, 3.070536",\ + "1.680114, 1.940177, 2.218040, 2.690598, 3.636736",\ + "1.089850, 1.392206, 1.655411, 2.121627, 3.056214",\ + "1.135741, 1.438139, 1.701459, 2.167955, 3.103108",\ + "1.220283, 1.522803, 1.786450, 2.253759, 3.190551",\ + "1.441176, 1.743885, 2.008048, 2.476632, 3.415992",\ + "2.002299, 2.305221, 2.569958, 3.039965, 3.982192"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.051290, 0.051402, 0.051767, 0.052622, 0.054331",\ + "0.173665, 0.173591, 0.173350, 0.172786, 0.171658",\ + "0.376306, 0.376151, 0.375734, 0.374850, 0.373082",\ + "0.881676, 0.881673, 0.881655, 0.881609, 0.881516",\ + "2.159523, 2.159652, 2.159853, 2.159909, 2.160021",\ + "0.051290, 0.051403, 0.051770, 0.052622, 0.054331",\ + "0.173665, 0.173591, 0.173349, 0.172786, 0.171658",\ + "0.376306, 0.376150, 0.375732, 0.374850, 0.373082",\ + "0.881676, 0.881673, 0.881655, 0.881609, 0.881516",\ + "2.159523, 2.159653, 2.159854, 2.159909, 2.160021",\ + "0.051290, 0.051405, 0.051770, 0.052622, 0.054331",\ + "0.173665, 0.173589, 0.173349, 0.172786, 0.171658",\ + "0.376305, 0.376148, 0.375732, 0.374850, 0.373082",\ + "0.881676, 0.881673, 0.881655, 0.881609, 0.881516",\ + "2.159523, 2.159656, 2.159854, 2.159909, 2.160021",\ + "0.051291, 0.051407, 0.051770, 0.052622, 0.054331",\ + "0.173665, 0.173588, 0.173348, 0.172786, 0.171658",\ + "0.376305, 0.376145, 0.375731, 0.374850, 0.373082",\ + "0.881676, 0.881673, 0.881655, 0.881609, 0.881516",\ + "2.159523, 2.159659, 2.159854, 2.159909, 2.160021",\ + "0.051310, 0.051436, 0.051779, 0.052625, 0.054331",\ + "0.173652, 0.173569, 0.173343, 0.172784, 0.171658",\ + "0.376278, 0.376105, 0.375722, 0.374847, 0.373082",\ + "0.881676, 0.881672, 0.881655, 0.881609, 0.881516",\ + "2.159524, 2.159705, 2.159854, 2.159909, 2.160021"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.483063, 0.725694, 1.002821, 1.469018, 2.401413",\ + "0.533858, 0.776987, 1.055733, 1.525727, 2.465714",\ + "0.592650, 0.836170, 1.116186, 1.589157, 2.535098",\ + "0.727526, 0.971013, 1.250922, 1.723643, 2.669083",\ + "1.075030, 1.318318, 1.597581, 2.068786, 3.011196",\ + "0.570473, 0.813255, 1.090379, 1.555733, 2.487347",\ + "0.621268, 0.864551, 1.143303, 1.612441, 2.551647",\ + "0.680060, 0.923737, 1.203766, 1.675871, 2.621032",\ + "0.814936, 1.058579, 1.338501, 1.810357, 2.755017",\ + "1.162440, 1.405883, 1.685155, 2.155501, 3.097130",\ + "0.651310, 0.902258, 1.178342, 1.643355, 2.574302",\ + "0.702106, 0.953562, 1.231267, 1.700063, 2.638602",\ + "0.760899, 1.012754, 1.291730, 1.763493, 2.707987",\ + "0.895775, 1.147596, 1.426465, 1.897979, 2.841972",\ + "1.243279, 1.494897, 1.773119, 2.243123, 3.184085",\ + "0.708926, 0.967926, 1.242482, 1.707268, 2.637811",\ + "0.759724, 1.019241, 1.295407, 1.763976, 2.702111",\ + "0.818518, 1.078441, 1.355870, 1.827407, 2.771496",\ + "0.953394, 1.213283, 1.490605, 1.961892, 2.905481",\ + "1.300897, 1.560579, 1.837259, 2.307036, 3.247594",\ + "1.030934, 1.332704, 1.594321, 2.056603, 2.983267",\ + "1.081818, 1.384149, 1.647285, 2.113327, 3.047567",\ + "1.140679, 1.443450, 1.707778, 2.176770, 3.116952",\ + "1.275549, 1.578283, 1.842510, 2.311255, 3.250937",\ + "1.623018, 1.925528, 2.189149, 2.656392, 3.593050"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.056326, 0.057067, 0.059477, 0.065125, 0.076422",\ + "0.108874, 0.109896, 0.113217, 0.121001, 0.136571",\ + "0.195024, 0.195957, 0.198988, 0.206096, 0.220310",\ + "0.444965, 0.445069, 0.445409, 0.446204, 0.447794",\ + "1.101678, 1.101629, 1.101472, 1.101105, 1.100369",\ + "0.056326, 0.057072, 0.059494, 0.065125, 0.076422",\ + "0.108874, 0.109903, 0.113241, 0.121001, 0.136571",\ + "0.195024, 0.195963, 0.199011, 0.206096, 0.220310",\ + "0.444965, 0.445070, 0.445411, 0.446204, 0.447794",\ + "1.101678, 1.101629, 1.101471, 1.101105, 1.100369",\ + "0.056327, 0.057083, 0.059495, 0.065125, 0.076422",\ + "0.108876, 0.109918, 0.113242, 0.121001, 0.136571",\ + "0.195025, 0.195977, 0.199011, 0.206096, 0.220310",\ + "0.444965, 0.445072, 0.445411, 0.446204, 0.447794",\ + "1.101678, 1.101628, 1.101471, 1.101105, 1.100369",\ + "0.056330, 0.057100, 0.059496, 0.065125, 0.076422",\ + "0.108880, 0.109941, 0.113243, 0.121001, 0.136571",\ + "0.195029, 0.195998, 0.199012, 0.206096, 0.220310",\ + "0.444966, 0.445074, 0.445411, 0.446204, 0.447794",\ + "1.101677, 1.101627, 1.101471, 1.101105, 1.100369",\ + "0.056457, 0.057292, 0.059553, 0.065149, 0.076422",\ + "0.109056, 0.110205, 0.113322, 0.121034, 0.136571",\ + "0.195189, 0.196239, 0.199085, 0.206125, 0.220310",\ + "0.444983, 0.445101, 0.445419, 0.446207, 0.447794",\ + "1.101669, 1.101615, 1.101467, 1.101103, 1.100369"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[9]_redg_2573*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[58]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.565069, 0.820938, 1.075987, 1.513367, 2.388129",\ + "0.610722, 0.866590, 1.121640, 1.559020, 2.433781",\ + "0.694431, 0.950300, 1.205350, 1.642730, 2.517491",\ + "0.914051, 1.169920, 1.424969, 1.862349, 2.737111",\ + "1.473307, 1.729176, 1.984225, 2.421606, 3.296367",\ + "0.653273, 0.908426, 1.163451, 1.600080, 2.474062",\ + "0.698926, 0.954078, 1.209104, 1.645733, 2.519715",\ + "0.782636, 1.037788, 1.292814, 1.729443, 2.603425",\ + "1.002255, 1.257407, 1.512433, 1.949062, 2.823044",\ + "1.561512, 1.816664, 2.071689, 2.508319, 3.382300",\ + "0.742600, 0.997231, 1.251411, 1.687701, 2.561017",\ + "0.788253, 1.042883, 1.297064, 1.733354, 2.606670",\ + "0.871963, 1.126593, 1.380774, 1.817064, 2.690380",\ + "1.091582, 1.346213, 1.600393, 2.036683, 2.909999",\ + "1.650838, 1.905469, 2.159649, 2.595939, 3.469255",\ + "0.806459, 1.062609, 1.315545, 1.751614, 2.624526",\ + "0.852112, 1.108261, 1.361198, 1.797266, 2.670179",\ + "0.935822, 1.191971, 1.444908, 1.880976, 2.753889",\ + "1.155441, 1.411591, 1.664527, 2.100595, 2.973508",\ + "1.714697, 1.970847, 2.223783, 2.659852, 3.532764",\ + "1.144184, 1.424102, 1.667087, 2.100822, 2.969982",\ + "1.189837, 1.469755, 1.712740, 2.146475, 3.015635",\ + "1.273547, 1.553465, 1.796450, 2.230185, 3.099345",\ + "1.493166, 1.773084, 2.016069, 2.449804, 3.318964",\ + "2.052423, 2.332341, 2.575326, 3.009061, 3.878221"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.051575, 0.051575, 0.051575, 0.051575, 0.051575",\ + "0.175957, 0.175957, 0.175957, 0.175957, 0.175957",\ + "0.378358, 0.378358, 0.378358, 0.378358, 0.378358",\ + "0.881680, 0.881680, 0.881680, 0.881680, 0.881680",\ + "2.159378, 2.159378, 2.159378, 2.159378, 2.159378",\ + "0.051575, 0.051575, 0.051575, 0.051575, 0.051575",\ + "0.175957, 0.175957, 0.175957, 0.175957, 0.175957",\ + "0.378358, 0.378358, 0.378358, 0.378358, 0.378358",\ + "0.881680, 0.881680, 0.881680, 0.881680, 0.881680",\ + "2.159378, 2.159378, 2.159378, 2.159378, 2.159378",\ + "0.051575, 0.051575, 0.051575, 0.051575, 0.051575",\ + "0.175957, 0.175957, 0.175957, 0.175957, 0.175957",\ + "0.378358, 0.378358, 0.378358, 0.378358, 0.378358",\ + "0.881680, 0.881680, 0.881680, 0.881680, 0.881680",\ + "2.159378, 2.159378, 2.159378, 2.159378, 2.159378",\ + "0.051575, 0.051575, 0.051575, 0.051575, 0.051575",\ + "0.175957, 0.175957, 0.175957, 0.175957, 0.175957",\ + "0.378358, 0.378358, 0.378358, 0.378358, 0.378358",\ + "0.881680, 0.881680, 0.881680, 0.881680, 0.881680",\ + "2.159378, 2.159378, 2.159378, 2.159378, 2.159378",\ + "0.051575, 0.051575, 0.051575, 0.051575, 0.051575",\ + "0.175957, 0.175957, 0.175957, 0.175957, 0.175957",\ + "0.378358, 0.378358, 0.378358, 0.378358, 0.378358",\ + "0.881680, 0.881680, 0.881680, 0.881680, 0.881680",\ + "2.159378, 2.159378, 2.159378, 2.159378, 2.159378"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.512229, 0.768098, 1.023147, 1.460527, 2.335289",\ + "0.557112, 0.812981, 1.068030, 1.505411, 2.380172",\ + "0.613030, 0.868899, 1.123949, 1.561329, 2.436090",\ + "0.748455, 1.004324, 1.259373, 1.696754, 2.571515",\ + "1.097588, 1.353456, 1.608506, 2.045886, 2.920648",\ + "0.600433, 0.855585, 1.110611, 1.547240, 2.421222",\ + "0.645316, 0.900469, 1.155494, 1.592124, 2.466105",\ + "0.701235, 0.956387, 1.211413, 1.648042, 2.522024",\ + "0.836659, 1.091812, 1.346837, 1.783467, 2.657449",\ + "1.185792, 1.440944, 1.695970, 2.132599, 3.006581",\ + "0.689760, 0.944391, 1.198571, 1.634861, 2.508177",\ + "0.734643, 0.989274, 1.243454, 1.679744, 2.553061",\ + "0.790562, 1.045192, 1.299373, 1.735663, 2.608979",\ + "0.925986, 1.180617, 1.434798, 1.871087, 2.744404",\ + "1.275119, 1.529750, 1.783930, 2.220220, 3.093536",\ + "0.753619, 1.009769, 1.262705, 1.698774, 2.571686",\ + "0.798502, 1.054652, 1.307589, 1.743657, 2.616570",\ + "0.854421, 1.110570, 1.363507, 1.799575, 2.672488",\ + "0.989845, 1.245995, 1.498932, 1.935000, 2.807913",\ + "1.338978, 1.595128, 1.848064, 2.284132, 3.157045",\ + "1.091344, 1.371262, 1.614247, 2.047982, 2.917142",\ + "1.136228, 1.416146, 1.659131, 2.092866, 2.962026",\ + "1.192146, 1.472064, 1.715049, 2.148784, 3.017944",\ + "1.327571, 1.607489, 1.850474, 2.284209, 3.153369",\ + "1.676703, 1.956621, 2.199606, 2.633341, 3.502501"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.047854, 0.047854, 0.047854, 0.047854, 0.047854",\ + "0.098249, 0.098249, 0.098249, 0.098249, 0.098249",\ + "0.188801, 0.188801, 0.188801, 0.188801, 0.188801",\ + "0.444112, 0.444112, 0.444112, 0.444112, 0.444112",\ + "1.101794, 1.101794, 1.101794, 1.101794, 1.101794",\ + "0.047854, 0.047854, 0.047854, 0.047854, 0.047854",\ + "0.098249, 0.098249, 0.098249, 0.098249, 0.098249",\ + "0.188801, 0.188801, 0.188801, 0.188801, 0.188801",\ + "0.444112, 0.444112, 0.444112, 0.444112, 0.444112",\ + "1.101794, 1.101794, 1.101794, 1.101794, 1.101794",\ + "0.047854, 0.047854, 0.047854, 0.047854, 0.047854",\ + "0.098249, 0.098249, 0.098249, 0.098249, 0.098249",\ + "0.188801, 0.188801, 0.188801, 0.188801, 0.188801",\ + "0.444112, 0.444112, 0.444112, 0.444112, 0.444112",\ + "1.101794, 1.101794, 1.101794, 1.101794, 1.101794",\ + "0.047854, 0.047854, 0.047854, 0.047854, 0.047854",\ + "0.098249, 0.098249, 0.098249, 0.098249, 0.098249",\ + "0.188801, 0.188801, 0.188801, 0.188801, 0.188801",\ + "0.444112, 0.444112, 0.444112, 0.444112, 0.444112",\ + "1.101794, 1.101794, 1.101794, 1.101794, 1.101794",\ + "0.047854, 0.047854, 0.047854, 0.047854, 0.047854",\ + "0.098249, 0.098249, 0.098249, 0.098249, 0.098249",\ + "0.188801, 0.188801, 0.188801, 0.188801, 0.188801",\ + "0.444112, 0.444112, 0.444112, 0.444112, 0.444112",\ + "1.101794, 1.101794, 1.101794, 1.101794, 1.101794"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[9]_redg_2453*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[62]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.405081, 0.661604, 0.918671, 1.360881, 2.245302",\ + "0.455961, 0.712483, 0.969534, 1.411694, 2.296014",\ + "0.533364, 0.789887, 1.046932, 1.489066, 2.373335",\ + "0.741794, 0.998316, 1.255349, 1.697444, 2.581634",\ + "1.295078, 1.551601, 1.808624, 2.250684, 3.134805",\ + "0.493291, 0.749080, 1.006153, 1.447596, 2.331236",\ + "0.544172, 0.799959, 1.057016, 1.498409, 2.381948",\ + "0.621574, 0.877363, 1.134413, 1.575781, 2.459269",\ + "0.830004, 1.085792, 1.342831, 1.784158, 2.667568",\ + "1.383288, 1.639076, 1.896105, 2.337399, 3.220738",\ + "0.581963, 0.837893, 1.094115, 1.535218, 2.418191",\ + "0.632844, 0.888772, 1.144979, 1.586031, 2.468903",\ + "0.710247, 0.966176, 1.222376, 1.663403, 2.546224",\ + "0.918676, 1.174605, 1.430793, 1.871780, 2.754523",\ + "1.471960, 1.727890, 1.984068, 2.425020, 3.307693",\ + "0.644923, 0.903284, 1.158251, 1.599131, 2.481700",\ + "0.695804, 0.954163, 1.209114, 1.649944, 2.532412",\ + "0.773206, 1.031567, 1.286511, 1.727316, 2.609733",\ + "0.981636, 1.239996, 1.494928, 1.935694, 2.818032",\ + "1.534920, 1.793280, 2.048203, 2.488934, 3.371202",\ + "0.976976, 1.264814, 1.509846, 1.948367, 2.827156",\ + "1.027857, 1.315693, 1.560709, 1.999180, 2.877868",\ + "1.105260, 1.393097, 1.638106, 2.076551, 2.955189",\ + "1.313689, 1.601526, 1.846523, 2.284929, 3.163488",\ + "1.866973, 2.154810, 2.399797, 2.838169, 3.716659"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.235856, 0.236036, 0.236876, 0.239059, 0.243424",\ + "0.297458, 0.297578, 0.298135, 0.299584, 0.302483",\ + "0.424282, 0.424361, 0.424727, 0.425678, 0.427582",\ + "0.882507, 0.882519, 0.882580, 0.882733, 0.883038",\ + "2.159515, 2.159525, 2.159563, 2.159647, 2.159816",\ + "0.235857, 0.236037, 0.236883, 0.239059, 0.243424",\ + "0.297459, 0.297578, 0.298140, 0.299584, 0.302483",\ + "0.424283, 0.424361, 0.424730, 0.425678, 0.427582",\ + "0.882507, 0.882519, 0.882580, 0.882733, 0.883038",\ + "2.159515, 2.159525, 2.159563, 2.159647, 2.159816",\ + "0.235860, 0.236040, 0.236883, 0.239059, 0.243424",\ + "0.297461, 0.297581, 0.298140, 0.299584, 0.302483",\ + "0.424284, 0.424363, 0.424730, 0.425678, 0.427582",\ + "0.882507, 0.882519, 0.882580, 0.882733, 0.883038",\ + "2.159515, 2.159525, 2.159563, 2.159647, 2.159816",\ + "0.235863, 0.236045, 0.236883, 0.239059, 0.243424",\ + "0.297463, 0.297583, 0.298140, 0.299584, 0.302483",\ + "0.424285, 0.424365, 0.424730, 0.425678, 0.427582",\ + "0.882507, 0.882519, 0.882580, 0.882733, 0.883038",\ + "2.159515, 2.159525, 2.159563, 2.159647, 2.159816",\ + "0.235880, 0.236097, 0.236905, 0.239068, 0.243424",\ + "0.297474, 0.297618, 0.298155, 0.299590, 0.302483",\ + "0.424293, 0.424387, 0.424740, 0.425682, 0.427582",\ + "0.882507, 0.882524, 0.882582, 0.882733, 0.883038",\ + "2.159515, 2.159528, 2.159564, 2.159647, 2.159816"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.367521, 0.579425, 0.836465, 1.278595, 2.162855",\ + "0.401633, 0.614821, 0.871879, 1.314094, 2.198523",\ + "0.451390, 0.668626, 0.925663, 1.367835, 2.252179",\ + "0.579943, 0.801765, 1.058753, 1.500789, 2.384860",\ + "0.915527, 1.146173, 1.403096, 1.844941, 2.728633",\ + "0.454931, 0.666901, 0.923947, 1.365310, 2.248789",\ + "0.489043, 0.702297, 0.959362, 1.400808, 2.284457",\ + "0.538801, 0.756101, 1.013145, 1.454550, 2.338113",\ + "0.667354, 0.889241, 1.146235, 1.587503, 2.470794",\ + "1.002937, 1.233649, 1.490577, 1.931656, 2.814567",\ + "0.535766, 0.755714, 1.011909, 1.452931, 2.335744",\ + "0.569878, 0.791110, 1.047324, 1.488430, 2.371412",\ + "0.619635, 0.844914, 1.101107, 1.542171, 2.425068",\ + "0.748188, 0.978053, 1.234197, 1.675125, 2.557749",\ + "1.083772, 1.322461, 1.578539, 2.019278, 2.901522",\ + "0.593373, 0.821105, 1.076045, 1.516845, 2.399253",\ + "0.627485, 0.856501, 1.111459, 1.552344, 2.434921",\ + "0.677243, 0.910304, 1.165242, 1.606085, 2.488577",\ + "0.805795, 1.043444, 1.298333, 1.739039, 2.621258",\ + "1.141379, 1.387851, 1.642674, 2.083191, 2.965031",\ + "0.895433, 1.182634, 1.427639, 1.866081, 2.744709",\ + "0.930201, 1.218028, 1.463055, 1.901580, 2.780377",\ + "0.984012, 1.271830, 1.516838, 1.955320, 2.834033",\ + "1.117159, 1.404967, 1.649927, 2.088274, 2.966714",\ + "1.461575, 1.749372, 1.994267, 2.432426, 3.310487"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.080902, 0.080967, 0.081775, 0.084238, 0.089162",\ + "0.117510, 0.117523, 0.117812, 0.118746, 0.120614",\ + "0.210641, 0.210651, 0.210781, 0.211182, 0.211986",\ + "0.448308, 0.448315, 0.448372, 0.448536, 0.448865",\ + "1.101372, 1.101392, 1.101478, 1.101676, 1.102071",\ + "0.080902, 0.080968, 0.081783, 0.084238, 0.089162",\ + "0.117510, 0.117523, 0.117815, 0.118746, 0.120614",\ + "0.210641, 0.210651, 0.210782, 0.211182, 0.211986",\ + "0.448308, 0.448315, 0.448373, 0.448536, 0.448865",\ + "1.101372, 1.101392, 1.101479, 1.101676, 1.102071",\ + "0.080902, 0.080970, 0.081783, 0.084238, 0.089162",\ + "0.117510, 0.117523, 0.117815, 0.118746, 0.120614",\ + "0.210641, 0.210651, 0.210782, 0.211182, 0.211986",\ + "0.448308, 0.448315, 0.448373, 0.448536, 0.448865",\ + "1.101372, 1.101393, 1.101479, 1.101676, 1.102071",\ + "0.080902, 0.080972, 0.081783, 0.084238, 0.089162",\ + "0.117510, 0.117524, 0.117815, 0.118746, 0.120614",\ + "0.210641, 0.210651, 0.210782, 0.211182, 0.211986",\ + "0.448308, 0.448315, 0.448373, 0.448536, 0.448865",\ + "1.101372, 1.101393, 1.101479, 1.101676, 1.102071",\ + "0.080902, 0.080995, 0.081808, 0.084248, 0.089162",\ + "0.117510, 0.117529, 0.117825, 0.118750, 0.120614",\ + "0.210641, 0.210655, 0.210786, 0.211184, 0.211986",\ + "0.448308, 0.448318, 0.448374, 0.448537, 0.448865",\ + "1.101372, 1.101400, 1.101481, 1.101677, 1.102071"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[9]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[1]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.350120, 0.565633, 0.746735, 1.037548, 1.600373",\ + "0.398981, 0.614494, 0.795596, 1.086408, 1.649232",\ + "0.501090, 0.716603, 0.897704, 1.188518, 1.751342",\ + "0.737189, 0.952702, 1.133804, 1.424618, 1.987443",\ + "1.308796, 1.524309, 1.705411, 1.996226, 2.559053",\ + "0.438515, 0.652951, 0.834015, 1.124853, 1.687726",\ + "0.487376, 0.701812, 0.882876, 1.173713, 1.736585",\ + "0.589485, 0.803921, 0.984985, 1.275823, 1.838695",\ + "0.825584, 1.040021, 1.221085, 1.511923, 2.074796",\ + "1.397191, 1.611628, 1.792692, 2.083531, 2.646406",\ + "0.527399, 0.733288, 0.914042, 1.204882, 1.767758",\ + "0.576260, 0.782149, 0.962903, 1.253742, 1.816617",\ + "0.678369, 0.884258, 1.065012, 1.355851, 1.918727",\ + "0.914468, 1.120357, 1.301112, 1.591951, 2.154828",\ + "1.486075, 1.691964, 1.872719, 2.163559, 2.726438",\ + "0.590410, 0.791118, 0.971742, 1.262314, 1.824777",\ + "0.639271, 0.839979, 1.020603, 1.311174, 1.873636",\ + "0.741380, 0.942088, 1.122712, 1.413283, 1.975746",\ + "0.977479, 1.178187, 1.358811, 1.649383, 2.211848",\ + "1.549087, 1.749794, 1.930419, 2.220991, 2.783457",\ + "0.913253, 1.096448, 1.275400, 1.565488, 2.127003",\ + "0.962113, 1.145308, 1.324261, 1.614348, 2.175863",\ + "1.064222, 1.247418, 1.426370, 1.716458, 2.277973",\ + "1.300322, 1.483517, 1.662469, 1.952558, 2.514074",\ + "1.871929, 2.055124, 2.234077, 2.524166, 3.085683"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.032791, 0.032791, 0.032792, 0.032797, 0.032808",\ + "0.150563, 0.150563, 0.150562, 0.150560, 0.150555",\ + "0.376248, 0.376248, 0.376248, 0.376247, 0.376244",\ + "0.869894, 0.869894, 0.869894, 0.869892, 0.869888",\ + "2.137202, 2.137202, 2.137202, 2.137203, 2.137204",\ + "0.032791, 0.032791, 0.032792, 0.032797, 0.032808",\ + "0.150563, 0.150563, 0.150562, 0.150560, 0.150555",\ + "0.376248, 0.376248, 0.376248, 0.376247, 0.376244",\ + "0.869894, 0.869894, 0.869894, 0.869892, 0.869888",\ + "2.137202, 2.137202, 2.137202, 2.137203, 2.137204",\ + "0.032791, 0.032791, 0.032792, 0.032797, 0.032808",\ + "0.150563, 0.150563, 0.150562, 0.150560, 0.150555",\ + "0.376248, 0.376248, 0.376248, 0.376247, 0.376244",\ + "0.869894, 0.869894, 0.869894, 0.869892, 0.869888",\ + "2.137202, 2.137202, 2.137202, 2.137203, 2.137204",\ + "0.032791, 0.032791, 0.032792, 0.032797, 0.032808",\ + "0.150563, 0.150563, 0.150562, 0.150560, 0.150555",\ + "0.376248, 0.376248, 0.376248, 0.376247, 0.376244",\ + "0.869894, 0.869894, 0.869894, 0.869892, 0.869888",\ + "2.137202, 2.137202, 2.137202, 2.137203, 2.137204",\ + "0.032791, 0.032791, 0.032792, 0.032797, 0.032808",\ + "0.150563, 0.150563, 0.150562, 0.150560, 0.150555",\ + "0.376248, 0.376248, 0.376248, 0.376247, 0.376244",\ + "0.869894, 0.869894, 0.869894, 0.869892, 0.869888",\ + "2.137202, 2.137202, 2.137202, 2.137203, 2.137204"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.373967, 0.592587, 0.771355, 1.061366, 1.624150",\ + "0.409637, 0.625150, 0.806253, 1.097068, 1.659896",\ + "0.450922, 0.666435, 0.847537, 1.138352, 1.701180",\ + "0.573066, 0.788579, 0.969681, 1.260496, 1.823323",\ + "0.905340, 1.120854, 1.301956, 1.592770, 2.155596",\ + "0.462362, 0.679906, 0.858636, 1.148671, 1.711503",\ + "0.498033, 0.712469, 0.893534, 1.184373, 1.747249",\ + "0.539317, 0.753753, 0.934818, 1.225657, 1.788534",\ + "0.661461, 0.875897, 1.056962, 1.347801, 1.910677",\ + "0.993736, 1.208172, 1.389236, 1.680075, 2.242949",\ + "0.551246, 0.760243, 0.938663, 1.228699, 1.791535",\ + "0.586916, 0.792806, 0.973560, 1.264401, 1.827281",\ + "0.628201, 0.834090, 1.014845, 1.305686, 1.868565",\ + "0.750345, 0.956234, 1.136989, 1.427829, 1.990708",\ + "1.082619, 1.288509, 1.469263, 1.760103, 2.322981",\ + "0.614257, 0.818060, 0.996357, 1.286131, 1.848554",\ + "0.649928, 0.850636, 1.031260, 1.321833, 1.884300",\ + "0.691212, 0.891920, 1.072545, 1.363118, 1.925585",\ + "0.813356, 1.014064, 1.194689, 1.485261, 2.047728",\ + "1.145631, 1.346339, 1.526963, 1.817535, 2.380001",\ + "0.943056, 1.123302, 1.300014, 1.589306, 2.150780",\ + "0.972770, 1.155965, 1.334918, 1.625008, 2.186526",\ + "1.014054, 1.197250, 1.376202, 1.666292, 2.227811",\ + "1.136198, 1.319394, 1.498346, 1.788436, 2.349954",\ + "1.468473, 1.651668, 1.830621, 2.120710, 2.682227"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.047453, 0.047453, 0.047453, 0.047451, 0.047447",\ + "0.092188, 0.092188, 0.092188, 0.092188, 0.092187",\ + "0.186056, 0.186056, 0.186056, 0.186056, 0.186055",\ + "0.432423, 0.432423, 0.432423, 0.432422, 0.432422",\ + "1.065140, 1.065140, 1.065140, 1.065138, 1.065135",\ + "0.047453, 0.047453, 0.047453, 0.047451, 0.047447",\ + "0.092188, 0.092188, 0.092188, 0.092188, 0.092187",\ + "0.186056, 0.186056, 0.186056, 0.186056, 0.186055",\ + "0.432423, 0.432423, 0.432423, 0.432422, 0.432422",\ + "1.065140, 1.065140, 1.065140, 1.065138, 1.065135",\ + "0.047453, 0.047453, 0.047453, 0.047451, 0.047447",\ + "0.092188, 0.092188, 0.092188, 0.092188, 0.092187",\ + "0.186056, 0.186056, 0.186056, 0.186056, 0.186055",\ + "0.432423, 0.432423, 0.432423, 0.432422, 0.432422",\ + "1.065140, 1.065140, 1.065140, 1.065138, 1.065135",\ + "0.047453, 0.047453, 0.047453, 0.047451, 0.047447",\ + "0.092188, 0.092188, 0.092188, 0.092188, 0.092187",\ + "0.186056, 0.186056, 0.186056, 0.186056, 0.186055",\ + "0.432423, 0.432423, 0.432423, 0.432422, 0.432422",\ + "1.065140, 1.065140, 1.065140, 1.065138, 1.065135",\ + "0.047453, 0.047453, 0.047453, 0.047451, 0.047447",\ + "0.092188, 0.092188, 0.092188, 0.092188, 0.092187",\ + "0.186056, 0.186056, 0.186056, 0.186056, 0.186055",\ + "0.432423, 0.432423, 0.432423, 0.432422, 0.432422",\ + "1.065140, 1.065140, 1.065140, 1.065138, 1.065135"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[9]_redg_min_2531*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[57]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.331760, 0.553188, 0.742512, 1.045826, 1.632024",\ + "0.380621, 0.602049, 0.791372, 1.094686, 1.680882",\ + "0.482730, 0.704158, 0.893481, 1.196795, 1.782993",\ + "0.718830, 0.940258, 1.129582, 1.432896, 2.019095",\ + "1.290437, 1.511866, 1.701190, 2.004506, 2.590707",\ + "0.420081, 0.640507, 0.829793, 1.133131, 1.719378",\ + "0.468942, 0.689367, 0.878653, 1.181991, 1.768235",\ + "0.571051, 0.791476, 0.980762, 1.284101, 1.870346",\ + "0.807150, 1.027576, 1.216862, 1.520201, 2.106449",\ + "1.378757, 1.599184, 1.788471, 2.091811, 2.678061",\ + "0.509110, 0.720840, 0.909820, 1.213160, 1.799409",\ + "0.557971, 0.769701, 0.958680, 1.262019, 1.848267",\ + "0.660080, 0.871810, 1.060789, 1.364129, 1.950378",\ + "0.896179, 1.107910, 1.296889, 1.600230, 2.186480",\ + "1.467786, 1.679518, 1.868498, 2.171839, 2.758092",\ + "0.572416, 0.778663, 0.967540, 1.270620, 1.856487",\ + "0.621277, 0.827523, 1.016400, 1.319480, 1.905344",\ + "0.723386, 0.929632, 1.118510, 1.421590, 2.007455",\ + "0.959485, 1.165732, 1.354610, 1.657691, 2.243557",\ + "1.531092, 1.737340, 1.926218, 2.229300, 2.815169",\ + "0.903758, 1.083926, 1.271200, 1.573819, 2.158782",\ + "0.952619, 1.132786, 1.320060, 1.622678, 2.207640",\ + "1.054728, 1.234896, 1.422170, 1.724788, 2.309751",\ + "1.290827, 1.470996, 1.658270, 1.960889, 2.545854",\ + "1.862434, 2.042603, 2.229878, 2.532498, 3.117465"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.032790, 0.032796, 0.032799, 0.032806, 0.032822",\ + "0.150563, 0.150560, 0.150559, 0.150556, 0.150549",\ + "0.376248, 0.376247, 0.376246, 0.376245, 0.376241",\ + "0.869894, 0.869894, 0.869894, 0.869893, 0.869890",\ + "2.137202, 2.137202, 2.137202, 2.137202, 2.137204",\ + "0.032790, 0.032796, 0.032799, 0.032806, 0.032822",\ + "0.150563, 0.150560, 0.150559, 0.150556, 0.150549",\ + "0.376248, 0.376247, 0.376246, 0.376245, 0.376241",\ + "0.869894, 0.869894, 0.869894, 0.869893, 0.869890",\ + "2.137202, 2.137202, 2.137202, 2.137202, 2.137204",\ + "0.032791, 0.032796, 0.032799, 0.032806, 0.032822",\ + "0.150563, 0.150560, 0.150559, 0.150556, 0.150549",\ + "0.376248, 0.376247, 0.376246, 0.376245, 0.376241",\ + "0.869894, 0.869894, 0.869894, 0.869893, 0.869890",\ + "2.137202, 2.137202, 2.137202, 2.137202, 2.137204",\ + "0.032791, 0.032796, 0.032799, 0.032806, 0.032822",\ + "0.150562, 0.150560, 0.150559, 0.150556, 0.150549",\ + "0.376248, 0.376247, 0.376246, 0.376245, 0.376241",\ + "0.869894, 0.869894, 0.869894, 0.869893, 0.869890",\ + "2.137202, 2.137202, 2.137202, 2.137202, 2.137204",\ + "0.032791, 0.032796, 0.032799, 0.032807, 0.032822",\ + "0.150563, 0.150560, 0.150559, 0.150556, 0.150549",\ + "0.376248, 0.376247, 0.376246, 0.376245, 0.376241",\ + "0.869894, 0.869894, 0.869894, 0.869893, 0.869890",\ + "2.137202, 2.137202, 2.137202, 2.137202, 2.137204"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.355611, 0.590269, 0.779821, 1.083137, 1.669339",\ + "0.391278, 0.612708, 0.802032, 1.105348, 1.691551",\ + "0.432562, 0.653992, 0.843316, 1.146633, 1.732836",\ + "0.554706, 0.776136, 0.965460, 1.268776, 1.854978",\ + "0.886981, 1.108410, 1.297734, 1.601049, 2.187249",\ + "0.443930, 0.677587, 0.867102, 1.170442, 1.756692",\ + "0.479599, 0.700026, 0.889313, 1.192653, 1.778904",\ + "0.520883, 0.741310, 0.930597, 1.233938, 1.820189",\ + "0.643027, 0.863454, 1.052741, 1.356081, 1.942332",\ + "0.975302, 1.195728, 1.385015, 1.688354, 2.274603",\ + "0.532956, 0.757921, 0.947129, 1.250471, 1.836724",\ + "0.568627, 0.780360, 0.969340, 1.272682, 1.858936",\ + "0.609912, 0.821644, 1.010624, 1.313967, 1.900221",\ + "0.732056, 0.943788, 1.132768, 1.436110, 2.022363",\ + "1.064331, 1.276062, 1.465042, 1.768383, 2.354635",\ + "0.596259, 0.815760, 1.004849, 1.307931, 1.893801",\ + "0.631934, 0.838182, 1.027060, 1.330143, 1.916013",\ + "0.673218, 0.879466, 1.068345, 1.371427, 1.957298",\ + "0.795362, 1.001610, 1.190488, 1.493571, 2.079441",\ + "1.127637, 1.333884, 1.522762, 1.825843, 2.411712",\ + "0.930491, 1.121142, 1.308509, 1.611130, 2.196097",\ + "0.963275, 1.143445, 1.330720, 1.633341, 2.218309",\ + "1.004560, 1.184730, 1.372005, 1.674626, 2.259594",\ + "1.126704, 1.306873, 1.494148, 1.796769, 2.381737",\ + "1.458978, 1.639148, 1.826422, 2.129042, 2.714008"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002160, 0.075158, 0.162122, 0.322085, 0.642011"); + values ( "0.047454, 0.047451, 0.047450, 0.047447, 0.047442",\ + "0.092188, 0.092188, 0.092188, 0.092188, 0.092187",\ + "0.186056, 0.186056, 0.186056, 0.186055, 0.186055",\ + "0.432423, 0.432422, 0.432422, 0.432422, 0.432421",\ + "1.065141, 1.065139, 1.065138, 1.065135, 1.065130",\ + "0.047453, 0.047451, 0.047450, 0.047447, 0.047442",\ + "0.092188, 0.092188, 0.092188, 0.092188, 0.092187",\ + "0.186056, 0.186056, 0.186056, 0.186055, 0.186055",\ + "0.432423, 0.432422, 0.432422, 0.432422, 0.432421",\ + "1.065141, 1.065139, 1.065138, 1.065135, 1.065130",\ + "0.047453, 0.047451, 0.047450, 0.047447, 0.047442",\ + "0.092188, 0.092188, 0.092188, 0.092188, 0.092187",\ + "0.186056, 0.186056, 0.186056, 0.186055, 0.186055",\ + "0.432423, 0.432422, 0.432422, 0.432422, 0.432421",\ + "1.065140, 1.065139, 1.065138, 1.065135, 1.065130",\ + "0.047453, 0.047451, 0.047450, 0.047447, 0.047442",\ + "0.092188, 0.092188, 0.092188, 0.092188, 0.092187",\ + "0.186056, 0.186056, 0.186056, 0.186055, 0.186055",\ + "0.432423, 0.432422, 0.432422, 0.432422, 0.432421",\ + "1.065140, 1.065139, 1.065138, 1.065135, 1.065130",\ + "0.047452, 0.047451, 0.047450, 0.047447, 0.047442",\ + "0.092188, 0.092188, 0.092188, 0.092188, 0.092187",\ + "0.186056, 0.186056, 0.186056, 0.186055, 0.186055",\ + "0.432423, 0.432422, 0.432422, 0.432422, 0.432421",\ + "1.065140, 1.065139, 1.065138, 1.065135, 1.065130"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[9]_redg_min*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[58]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.441216, 0.635561, 0.817859, 1.110553, 1.677168",\ + "0.490035, 0.684380, 0.866679, 1.159372, 1.725988",\ + "0.592166, 0.786511, 0.968809, 1.261503, 1.828118",\ + "0.828311, 1.022655, 1.204954, 1.497648, 2.064263",\ + "1.399982, 1.594326, 1.776625, 2.069319, 2.635934",\ + "0.529420, 0.722878, 0.905140, 1.197858, 1.764521",\ + "0.578240, 0.771698, 0.953960, 1.246678, 1.813341",\ + "0.680371, 0.873829, 1.056091, 1.348809, 1.915472",\ + "0.916515, 1.109973, 1.292235, 1.584953, 2.151616",\ + "1.488186, 1.681644, 1.863906, 2.156624, 2.723287",\ + "0.618747, 0.803206, 0.985167, 1.277887, 1.844553",\ + "0.667567, 0.852026, 1.033987, 1.326706, 1.893373",\ + "0.769697, 0.954157, 1.136117, 1.428837, 1.995504",\ + "1.005842, 1.190301, 1.372262, 1.664981, 2.231648",\ + "1.577513, 1.761972, 1.943933, 2.236652, 2.803319",\ + "0.681460, 0.861042, 1.042871, 1.335324, 1.901586",\ + "0.730280, 0.909862, 1.091691, 1.384144, 1.950405",\ + "0.832411, 1.011993, 1.193822, 1.486274, 2.052536",\ + "1.068555, 1.248137, 1.429966, 1.722419, 2.288681",\ + "1.640226, 1.819808, 2.001637, 2.294090, 2.860352",\ + "0.985102, 1.166382, 1.346527, 1.638502, 2.203828",\ + "1.033922, 1.215202, 1.395347, 1.687321, 2.252647",\ + "1.136052, 1.317332, 1.497478, 1.789452, 2.354778",\ + "1.372197, 1.553477, 1.733622, 2.025596, 2.590923",\ + "1.943868, 2.125148, 2.305293, 2.597268, 3.162594"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.033216, 0.033216, 0.033216, 0.033216, 0.033216",\ + "0.150378, 0.150378, 0.150378, 0.150378, 0.150378",\ + "0.376160, 0.376160, 0.376160, 0.376160, 0.376160",\ + "0.870043, 0.870043, 0.870043, 0.870043, 0.870043",\ + "2.137131, 2.137131, 2.137131, 2.137131, 2.137131",\ + "0.033216, 0.033216, 0.033216, 0.033216, 0.033216",\ + "0.150378, 0.150378, 0.150378, 0.150378, 0.150378",\ + "0.376160, 0.376160, 0.376160, 0.376160, 0.376160",\ + "0.870043, 0.870043, 0.870043, 0.870043, 0.870043",\ + "2.137131, 2.137131, 2.137131, 2.137131, 2.137131",\ + "0.033216, 0.033216, 0.033216, 0.033216, 0.033216",\ + "0.150378, 0.150378, 0.150378, 0.150378, 0.150378",\ + "0.376160, 0.376160, 0.376160, 0.376160, 0.376160",\ + "0.870043, 0.870043, 0.870043, 0.870043, 0.870043",\ + "2.137131, 2.137131, 2.137131, 2.137131, 2.137131",\ + "0.033216, 0.033216, 0.033216, 0.033216, 0.033216",\ + "0.150378, 0.150378, 0.150378, 0.150378, 0.150378",\ + "0.376160, 0.376160, 0.376160, 0.376160, 0.376160",\ + "0.870043, 0.870043, 0.870043, 0.870043, 0.870043",\ + "2.137131, 2.137131, 2.137131, 2.137131, 2.137131",\ + "0.033216, 0.033216, 0.033216, 0.033216, 0.033216",\ + "0.150378, 0.150378, 0.150378, 0.150378, 0.150378",\ + "0.376160, 0.376160, 0.376160, 0.376160, 0.376160",\ + "0.870043, 0.870043, 0.870043, 0.870043, 0.870043",\ + "2.137131, 2.137131, 2.137131, 2.137131, 2.137131"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.478632, 0.663448, 0.845746, 1.138440, 1.705055",\ + "0.500859, 0.695203, 0.877502, 1.170196, 1.736811",\ + "0.542150, 0.736495, 0.918793, 1.211487, 1.778102",\ + "0.664276, 0.858621, 1.040919, 1.333613, 1.900228",\ + "0.996499, 1.190843, 1.373142, 1.665835, 2.232451",\ + "0.566836, 0.750765, 0.933027, 1.225745, 1.792408",\ + "0.589063, 0.782521, 0.964783, 1.257501, 1.824164",\ + "0.630354, 0.823812, 1.006074, 1.298792, 1.865455",\ + "0.752480, 0.945938, 1.128200, 1.420918, 1.987581",\ + "1.084703, 1.278161, 1.460423, 1.753141, 2.319804",\ + "0.651614, 0.831093, 1.013054, 1.305773, 1.872440",\ + "0.678390, 0.862849, 1.044810, 1.337529, 1.904196",\ + "0.719681, 0.904140, 1.086101, 1.378820, 1.945487",\ + "0.841807, 1.026266, 1.208227, 1.500947, 2.067613",\ + "1.174030, 1.358489, 1.540450, 1.833169, 2.399836",\ + "0.709347, 0.888930, 1.070759, 1.363211, 1.929473",\ + "0.741103, 0.920685, 1.102514, 1.394967, 1.961228",\ + "0.782394, 0.961976, 1.143806, 1.436258, 2.002520",\ + "0.904520, 1.084103, 1.265932, 1.558384, 2.124646",\ + "1.236743, 1.416325, 1.598154, 1.890607, 2.456868",\ + "1.012989, 1.194269, 1.374414, 1.666389, 2.231715",\ + "1.044745, 1.226025, 1.406170, 1.698144, 2.263471",\ + "1.086036, 1.267316, 1.447461, 1.739436, 2.304762",\ + "1.208162, 1.389442, 1.569587, 1.861562, 2.426888",\ + "1.540385, 1.721665, 1.901810, 2.193784, 2.759110"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003360, 0.076358, 0.163022, 0.322685, 0.642011"); + values ( "0.047293, 0.047293, 0.047293, 0.047293, 0.047293",\ + "0.092166, 0.092166, 0.092166, 0.092166, 0.092166",\ + "0.186036, 0.186036, 0.186036, 0.186036, 0.186036",\ + "0.432397, 0.432397, 0.432397, 0.432397, 0.432397",\ + "1.065004, 1.065004, 1.065004, 1.065004, 1.065004",\ + "0.047293, 0.047293, 0.047293, 0.047293, 0.047293",\ + "0.092166, 0.092166, 0.092166, 0.092166, 0.092166",\ + "0.186036, 0.186036, 0.186036, 0.186036, 0.186036",\ + "0.432397, 0.432397, 0.432397, 0.432397, 0.432397",\ + "1.065004, 1.065004, 1.065004, 1.065004, 1.065004",\ + "0.047293, 0.047293, 0.047293, 0.047293, 0.047293",\ + "0.092166, 0.092166, 0.092166, 0.092166, 0.092166",\ + "0.186036, 0.186036, 0.186036, 0.186036, 0.186036",\ + "0.432397, 0.432397, 0.432397, 0.432397, 0.432397",\ + "1.065004, 1.065004, 1.065004, 1.065004, 1.065004",\ + "0.047293, 0.047293, 0.047293, 0.047293, 0.047293",\ + "0.092166, 0.092166, 0.092166, 0.092166, 0.092166",\ + "0.186036, 0.186036, 0.186036, 0.186036, 0.186036",\ + "0.432397, 0.432397, 0.432397, 0.432397, 0.432397",\ + "1.065004, 1.065004, 1.065004, 1.065004, 1.065004",\ + "0.047293, 0.047293, 0.047293, 0.047293, 0.047293",\ + "0.092166, 0.092166, 0.092166, 0.092166, 0.092166",\ + "0.186036, 0.186036, 0.186036, 0.186036, 0.186036",\ + "0.432397, 0.432397, 0.432397, 0.432397, 0.432397",\ + "1.065004, 1.065004, 1.065004, 1.065004, 1.065004"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[9]_redg_min_2476*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[62]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.348914, 0.525100, 0.702588, 0.991299, 1.552048",\ + "0.404496, 0.580679, 0.758142, 1.046740, 1.607235",\ + "0.479870, 0.656050, 0.833489, 1.121981, 1.682238",\ + "0.681478, 0.857653, 1.035056, 1.323386, 1.883276",\ + "1.225627, 1.401797, 1.579170, 1.867368, 2.426959",\ + "0.436324, 0.612419, 0.789869, 1.078604, 1.639402",\ + "0.491907, 0.667998, 0.845423, 1.134045, 1.694588",\ + "0.567281, 0.743368, 0.920770, 1.209286, 1.769591",\ + "0.768889, 0.944971, 1.122336, 1.410691, 1.970629",\ + "1.313037, 1.489116, 1.666451, 1.954674, 2.514312",\ + "0.517159, 0.692753, 0.869896, 1.158633, 1.719433",\ + "0.572742, 0.748332, 0.925450, 1.214074, 1.774620",\ + "0.648115, 0.823702, 1.000796, 1.289315, 1.849623",\ + "0.849723, 1.025305, 1.202363, 1.490720, 2.050661",\ + "1.393872, 1.569450, 1.746478, 2.034702, 2.594344",\ + "0.574766, 0.750569, 0.927588, 1.216063, 1.776449",\ + "0.630349, 0.806149, 0.983142, 1.271503, 1.831635",\ + "0.705722, 0.881519, 1.058488, 1.346744, 1.906637",\ + "0.907331, 1.083122, 1.260055, 1.548149, 2.107674",\ + "1.451479, 1.627266, 1.804170, 2.092131, 2.651357",\ + "0.876826, 1.055796, 1.231244, 1.519234, 2.078671",\ + "0.932408, 1.111374, 1.286798, 1.574675, 2.133856",\ + "1.007782, 1.186745, 1.362144, 1.649915, 2.208858",\ + "1.209389, 1.388348, 1.563711, 1.851319, 2.409893",\ + "1.753537, 1.932492, 2.107826, 2.395301, 2.953575"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.151029, 0.151029, 0.151029, 0.151092, 0.151248",\ + "0.243808, 0.243808, 0.243808, 0.243837, 0.243906",\ + "0.409516, 0.409519, 0.409535, 0.409607, 0.409769",\ + "0.874760, 0.874761, 0.874769, 0.874803, 0.874880",\ + "2.138597, 2.138606, 2.138675, 2.138985, 2.139684",\ + "0.151029, 0.151029, 0.151029, 0.151092, 0.151248",\ + "0.243808, 0.243808, 0.243808, 0.243837, 0.243906",\ + "0.409516, 0.409519, 0.409535, 0.409607, 0.409769",\ + "0.874760, 0.874761, 0.874769, 0.874803, 0.874880",\ + "2.138597, 2.138606, 2.138675, 2.138985, 2.139684",\ + "0.151029, 0.151029, 0.151029, 0.151092, 0.151248",\ + "0.243808, 0.243808, 0.243808, 0.243837, 0.243906",\ + "0.409516, 0.409519, 0.409535, 0.409607, 0.409769",\ + "0.874760, 0.874761, 0.874769, 0.874803, 0.874880",\ + "2.138597, 2.138606, 2.138675, 2.138985, 2.139684",\ + "0.151029, 0.151029, 0.151029, 0.151092, 0.151248",\ + "0.243808, 0.243808, 0.243808, 0.243837, 0.243907",\ + "0.409516, 0.409519, 0.409535, 0.409607, 0.409769",\ + "0.874760, 0.874761, 0.874769, 0.874803, 0.874880",\ + "2.138597, 2.138606, 2.138675, 2.138986, 2.139686",\ + "0.151029, 0.151029, 0.151029, 0.151092, 0.151249",\ + "0.243808, 0.243808, 0.243808, 0.243837, 0.243907",\ + "0.409517, 0.409519, 0.409535, 0.409607, 0.409770",\ + "0.874760, 0.874761, 0.874769, 0.874803, 0.874881",\ + "2.138598, 2.138607, 2.138675, 2.138986, 2.139688"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.322905, 0.543708, 0.721197, 1.009915, 1.570680",\ + "0.358307, 0.577820, 0.755311, 1.044036, 1.604817",\ + "0.412119, 0.627577, 0.805068, 1.093794, 1.654579",\ + "0.545267, 0.756130, 0.933618, 1.222334, 1.783093",\ + "0.889685, 1.091714, 1.269206, 1.557937, 2.118731",\ + "0.411116, 0.631026, 0.808478, 1.097220, 1.658034",\ + "0.446518, 0.665138, 0.842591, 1.131341, 1.692170",\ + "0.500329, 0.714895, 0.892349, 1.181100, 1.741932",\ + "0.633477, 0.843448, 1.020899, 1.309639, 1.870447",\ + "0.977895, 1.179032, 1.356487, 1.645242, 2.206084",\ + "0.499788, 0.711360, 0.888505, 1.177248, 1.738065",\ + "0.535189, 0.745472, 0.922618, 1.211369, 1.772202",\ + "0.589001, 0.795229, 0.972376, 1.261128, 1.821964",\ + "0.722149, 0.923782, 1.100926, 1.389667, 1.950478",\ + "1.066566, 1.259366, 1.436514, 1.725270, 2.286115",\ + "0.562748, 0.769177, 0.946197, 1.234678, 1.795081",\ + "0.598149, 0.803289, 0.980311, 1.268799, 1.829218",\ + "0.651961, 0.853046, 1.030068, 1.318558, 1.878979",\ + "0.785108, 0.981599, 1.158618, 1.447097, 2.007494",\ + "1.129526, 1.317183, 1.494206, 1.782700, 2.343131",\ + "0.894800, 1.074403, 1.249853, 1.537850, 2.097302",\ + "0.929545, 1.108515, 1.283966, 1.571971, 2.131439",\ + "0.979303, 1.158272, 1.333724, 1.621730, 2.181201",\ + "1.107856, 1.286825, 1.462274, 1.750269, 2.309716",\ + "1.443439, 1.622409, 1.797862, 2.085872, 2.645353"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002088, 0.075087, 0.162069, 0.322049, 0.642011"); + values ( "0.073594, 0.073593, 0.073590, 0.073574, 0.073539",\ + "0.105770, 0.105770, 0.105771, 0.105778, 0.105792",\ + "0.191100, 0.191101, 0.191103, 0.191113, 0.191136",\ + "0.432555, 0.432553, 0.432541, 0.432487, 0.432365",\ + "1.065544, 1.065545, 1.065557, 1.065609, 1.065728",\ + "0.073594, 0.073593, 0.073590, 0.073574, 0.073539",\ + "0.105770, 0.105770, 0.105771, 0.105778, 0.105792",\ + "0.191100, 0.191101, 0.191103, 0.191113, 0.191136",\ + "0.432555, 0.432553, 0.432541, 0.432487, 0.432365",\ + "1.065544, 1.065545, 1.065557, 1.065609, 1.065728",\ + "0.073594, 0.073593, 0.073590, 0.073574, 0.073539",\ + "0.105770, 0.105770, 0.105771, 0.105778, 0.105792",\ + "0.191100, 0.191101, 0.191103, 0.191113, 0.191136",\ + "0.432554, 0.432553, 0.432541, 0.432487, 0.432365",\ + "1.065544, 1.065545, 1.065557, 1.065609, 1.065728",\ + "0.073594, 0.073593, 0.073590, 0.073574, 0.073539",\ + "0.105770, 0.105770, 0.105771, 0.105778, 0.105792",\ + "0.191100, 0.191101, 0.191103, 0.191113, 0.191136",\ + "0.432554, 0.432553, 0.432541, 0.432487, 0.432365",\ + "1.065544, 1.065545, 1.065557, 1.065610, 1.065728",\ + "0.073594, 0.073593, 0.073590, 0.073574, 0.073539",\ + "0.105770, 0.105770, 0.105771, 0.105778, 0.105792",\ + "0.191100, 0.191101, 0.191103, 0.191113, 0.191136",\ + "0.432554, 0.432553, 0.432541, 0.432487, 0.432365",\ + "1.065544, 1.065545, 1.065557, 1.065610, 1.065729"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[9]_redg_min_2427*/ + +} /* end of pin tl_o[9] */ + +pin("tl_o[8]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.154883 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : tl_o[8]; + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[17]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.373916, 0.599728, 0.894574, 1.388503, 2.376363",\ + "0.415183, 0.640172, 0.934074, 1.428691, 2.417925",\ + "0.491066, 0.715879, 1.009866, 1.504530, 2.493859",\ + "0.745862, 0.970981, 1.264787, 1.759400, 2.748624",\ + "1.670986, 1.894752, 2.189083, 2.684630, 3.675724",\ + "0.461357, 0.687335, 0.982222, 1.475219, 2.462296",\ + "0.502624, 0.727773, 1.021724, 1.515406, 2.503859",\ + "0.578507, 0.803480, 1.097517, 1.591246, 2.579792",\ + "0.833304, 1.058581, 1.352438, 1.846115, 2.834558",\ + "1.758428, 1.982354, 2.276736, 2.771345, 3.761657",\ + "0.542237, 0.776480, 1.070189, 1.562842, 2.549252",\ + "0.583504, 0.816901, 1.109691, 1.603029, 2.590814",\ + "0.659387, 0.892609, 1.185483, 1.678869, 2.666748",\ + "0.914185, 1.147708, 1.440404, 1.933738, 2.921513",\ + "1.839308, 2.071485, 2.364703, 2.858968, 3.848613",\ + "0.599958, 0.842354, 1.134332, 1.626756, 2.612761",\ + "0.641225, 0.882751, 1.173835, 1.666943, 2.654323",\ + "0.717108, 0.958461, 1.249627, 1.742782, 2.730257",\ + "0.971907, 1.213556, 1.504548, 1.997652, 2.985022",\ + "1.897030, 2.137338, 2.428847, 2.922882, 3.912122",\ + "0.902648, 1.209455, 1.486456, 1.976211, 2.958217",\ + "0.943914, 1.249574, 1.525966, 2.016402, 2.999779",\ + "1.019797, 1.325301, 1.601758, 2.092241, 3.075712",\ + "1.274609, 1.580356, 1.856679, 2.347110, 3.330478",\ + "2.199727, 2.504201, 2.780987, 3.272345, 4.257577"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.034807, 0.034870, 0.035021, 0.035342, 0.035983",\ + "0.083278, 0.083283, 0.083326, 0.083445, 0.083683",\ + "0.208556, 0.208575, 0.208609, 0.208619, 0.208640",\ + "0.692765, 0.692765, 0.692980, 0.693734, 0.695242",\ + "2.477403, 2.477403, 2.477403, 2.477403, 2.477403",\ + "0.034807, 0.034871, 0.035022, 0.035342, 0.035983",\ + "0.083278, 0.083283, 0.083327, 0.083445, 0.083683",\ + "0.208556, 0.208576, 0.208609, 0.208619, 0.208640",\ + "0.692765, 0.692765, 0.692982, 0.693734, 0.695242",\ + "2.477403, 2.477403, 2.477403, 2.477403, 2.477403",\ + "0.034807, 0.034872, 0.035022, 0.035342, 0.035983",\ + "0.083278, 0.083284, 0.083327, 0.083445, 0.083683",\ + "0.208556, 0.208576, 0.208609, 0.208619, 0.208640",\ + "0.692765, 0.692765, 0.692982, 0.693734, 0.695242",\ + "2.477403, 2.477403, 2.477403, 2.477403, 2.477403",\ + "0.034808, 0.034873, 0.035022, 0.035342, 0.035983",\ + "0.083278, 0.083284, 0.083327, 0.083445, 0.083683",\ + "0.208556, 0.208577, 0.208609, 0.208619, 0.208640",\ + "0.692765, 0.692765, 0.692982, 0.693734, 0.695242",\ + "2.477403, 2.477403, 2.477403, 2.477403, 2.477403",\ + "0.034810, 0.034887, 0.035026, 0.035343, 0.035983",\ + "0.083278, 0.083286, 0.083328, 0.083446, 0.083683",\ + "0.208556, 0.208584, 0.208609, 0.208619, 0.208640",\ + "0.692765, 0.692765, 0.692990, 0.693737, 0.695242",\ + "2.477403, 2.477403, 2.477403, 2.477403, 2.477403"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.420490, 0.645190, 0.938944, 1.432430, 2.419402",\ + "0.461359, 0.686264, 0.979881, 1.473291, 2.460111",\ + "0.521542, 0.746363, 1.040033, 1.533430, 2.520226",\ + "0.690406, 0.915382, 1.209000, 1.702350, 2.689050",\ + "1.273072, 1.496794, 1.790318, 2.283708, 3.270487",\ + "0.507931, 0.732792, 1.026591, 1.519145, 2.505336",\ + "0.548801, 0.773865, 1.067528, 1.560006, 2.546045",\ + "0.608983, 0.833965, 1.127680, 1.620146, 2.606159",\ + "0.777848, 1.002983, 1.296647, 1.789066, 2.774984",\ + "1.360514, 1.584395, 1.877965, 2.370424, 3.356421",\ + "0.588811, 0.821923, 1.114557, 1.606768, 2.592291",\ + "0.629680, 0.862994, 1.155494, 1.647629, 2.633000",\ + "0.689863, 0.923095, 1.215646, 1.707769, 2.693114",\ + "0.858728, 1.092113, 1.384613, 1.876689, 2.861939",\ + "1.441395, 1.673523, 1.965932, 2.458046, 3.443376",\ + "0.646531, 0.887777, 1.178701, 1.670682, 2.655800",\ + "0.687400, 0.928846, 1.219638, 1.711543, 2.696509",\ + "0.747584, 0.988947, 1.279790, 1.771683, 2.756623",\ + "0.916448, 1.157964, 1.448757, 1.940602, 2.925448",\ + "1.499118, 1.739372, 2.030076, 2.521960, 3.506885",\ + "0.949211, 1.254642, 1.530820, 2.020136, 3.001256",\ + "0.990081, 1.295683, 1.571756, 2.060997, 3.041965",\ + "1.050271, 1.355798, 1.631908, 2.121136, 3.102079",\ + "1.219138, 1.524806, 1.800875, 2.290056, 3.270904",\ + "1.801826, 2.106188, 2.382194, 2.871414, 3.852341"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.042658, 0.042646, 0.042619, 0.042581, 0.042505",\ + "0.078946, 0.078946, 0.078946, 0.078946, 0.078946",\ + "0.155293, 0.155293, 0.155279, 0.155230, 0.155132",\ + "0.431058, 0.431058, 0.431019, 0.430882, 0.430609",\ + "1.497229, 1.495745, 1.494360, 1.494360, 1.494360",\ + "0.042658, 0.042646, 0.042618, 0.042581, 0.042505",\ + "0.078946, 0.078946, 0.078946, 0.078946, 0.078946",\ + "0.155293, 0.155293, 0.155279, 0.155230, 0.155132",\ + "0.431058, 0.431058, 0.431018, 0.430882, 0.430609",\ + "1.497229, 1.495736, 1.494360, 1.494360, 1.494360",\ + "0.042658, 0.042646, 0.042618, 0.042581, 0.042505",\ + "0.078946, 0.078946, 0.078946, 0.078946, 0.078946",\ + "0.155293, 0.155293, 0.155279, 0.155230, 0.155132",\ + "0.431058, 0.431058, 0.431018, 0.430882, 0.430609",\ + "1.497225, 1.495716, 1.494360, 1.494360, 1.494360",\ + "0.042658, 0.042646, 0.042618, 0.042581, 0.042505",\ + "0.078946, 0.078946, 0.078946, 0.078946, 0.078946",\ + "0.155293, 0.155293, 0.155278, 0.155230, 0.155132",\ + "0.431058, 0.431058, 0.431018, 0.430882, 0.430609",\ + "1.497218, 1.495687, 1.494360, 1.494360, 1.494360",\ + "0.042658, 0.042642, 0.042618, 0.042580, 0.042505",\ + "0.078946, 0.078946, 0.078946, 0.078946, 0.078946",\ + "0.155293, 0.155293, 0.155278, 0.155230, 0.155132",\ + "0.431058, 0.431058, 0.431017, 0.430882, 0.430609",\ + "1.497153, 1.495349, 1.494360, 1.494360, 1.494360"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[8]_redg_2694*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[18]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.746021, 1.001665, 1.285647, 1.784442, 2.782033",\ + "0.780412, 1.036056, 1.320037, 1.818832, 2.816423",\ + "0.851654, 1.107299, 1.391280, 1.890076, 2.887667",\ + "1.105821, 1.361465, 1.645446, 2.144242, 3.141833",\ + "2.030393, 2.286036, 2.570016, 3.068810, 4.066399",\ + "0.833430, 1.089212, 1.373307, 1.871157, 2.867967",\ + "0.867821, 1.123603, 1.407697, 1.905547, 2.902357",\ + "0.939063, 1.194845, 1.478940, 1.976790, 2.973600",\ + "1.193229, 1.449012, 1.733106, 2.230957, 3.227767",\ + "2.117802, 2.373583, 2.657676, 3.155524, 4.152333",\ + "0.914308, 1.178178, 1.461272, 1.958778, 2.954922",\ + "0.948698, 1.212569, 1.495662, 1.993168, 2.989312",\ + "1.019941, 1.283811, 1.566905, 2.064412, 3.060555",\ + "1.274107, 1.537978, 1.821072, 2.318578, 3.314722",\ + "2.198680, 2.462549, 2.745641, 3.243146, 4.239288",\ + "0.974568, 1.243791, 1.525417, 2.022691, 3.018431",\ + "1.008959, 1.278181, 1.559807, 2.057082, 3.052821",\ + "1.080201, 1.349424, 1.631050, 2.128325, 3.124064",\ + "1.334368, 1.603591, 1.885216, 2.382491, 3.378231",\ + "2.258940, 2.528162, 2.809785, 3.307059, 4.302797",\ + "1.309682, 1.607944, 1.877586, 2.372160, 3.363887",\ + "1.344072, 1.642334, 1.911976, 2.406550, 3.398277",\ + "1.415315, 1.713577, 1.983219, 2.477793, 3.469521",\ + "1.669481, 1.967744, 2.237385, 2.731960, 3.723687",\ + "2.594053, 2.892314, 3.161954, 3.656528, 4.648253"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.034112, 0.034112, 0.034112, 0.034112, 0.034113",\ + "0.083750, 0.083750, 0.083750, 0.083750, 0.083751",\ + "0.208404, 0.208404, 0.208405, 0.208405, 0.208405",\ + "0.692758, 0.692758, 0.692759, 0.692761, 0.692766",\ + "2.464359, 2.464359, 2.464359, 2.464359, 2.464359",\ + "0.034112, 0.034112, 0.034112, 0.034112, 0.034113",\ + "0.083750, 0.083750, 0.083750, 0.083750, 0.083751",\ + "0.208404, 0.208404, 0.208405, 0.208405, 0.208405",\ + "0.692758, 0.692758, 0.692759, 0.692761, 0.692766",\ + "2.464359, 2.464359, 2.464359, 2.464359, 2.464359",\ + "0.034112, 0.034112, 0.034112, 0.034112, 0.034113",\ + "0.083750, 0.083750, 0.083750, 0.083750, 0.083751",\ + "0.208404, 0.208404, 0.208405, 0.208405, 0.208405",\ + "0.692758, 0.692758, 0.692759, 0.692761, 0.692766",\ + "2.464359, 2.464359, 2.464359, 2.464359, 2.464359",\ + "0.034112, 0.034112, 0.034112, 0.034112, 0.034113",\ + "0.083750, 0.083750, 0.083750, 0.083750, 0.083751",\ + "0.208404, 0.208404, 0.208405, 0.208405, 0.208405",\ + "0.692758, 0.692758, 0.692759, 0.692761, 0.692766",\ + "2.464359, 2.464359, 2.464359, 2.464359, 2.464359",\ + "0.034112, 0.034112, 0.034112, 0.034112, 0.034113",\ + "0.083750, 0.083750, 0.083750, 0.083750, 0.083751",\ + "0.208404, 0.208404, 0.208405, 0.208405, 0.208405",\ + "0.692758, 0.692758, 0.692759, 0.692761, 0.692766",\ + "2.464359, 2.464359, 2.464359, 2.464359, 2.464359"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.777783, 1.033425, 1.317405, 1.816199, 2.813788",\ + "0.819535, 1.075178, 1.359157, 1.857951, 2.855540",\ + "0.879465, 1.135108, 1.419087, 1.917882, 2.915471",\ + "1.047583, 1.303225, 1.587205, 2.085999, 3.083588",\ + "1.629496, 1.885133, 2.169106, 2.667897, 3.665479",\ + "0.865191, 1.120972, 1.405064, 1.902913, 2.899722",\ + "0.906944, 1.162724, 1.446817, 1.944666, 2.941474",\ + "0.966874, 1.222655, 1.506747, 2.004596, 3.001405",\ + "1.134991, 1.390772, 1.674865, 2.172714, 3.169522",\ + "1.716905, 1.972680, 2.256766, 2.754611, 3.751413",\ + "0.946069, 1.209938, 1.493030, 1.990535, 2.986677",\ + "0.987822, 1.251690, 1.534782, 2.032288, 3.028429",\ + "1.047752, 1.311621, 1.594713, 2.092218, 3.088360",\ + "1.215869, 1.479738, 1.762830, 2.260335, 3.256477",\ + "1.797783, 2.061646, 2.344732, 2.842233, 3.838368",\ + "1.006330, 1.275551, 1.557174, 2.054448, 3.050186",\ + "1.048082, 1.317303, 1.598927, 2.096201, 3.091938",\ + "1.108012, 1.377234, 1.658857, 2.156131, 3.151869",\ + "1.276130, 1.545351, 1.826975, 2.324248, 3.319986",\ + "1.858043, 2.127259, 2.408876, 2.906147, 3.901877",\ + "1.341443, 1.639703, 1.909343, 2.403917, 3.395642",\ + "1.383195, 1.681456, 1.951096, 2.445669, 3.437394",\ + "1.443126, 1.741386, 2.011026, 2.505599, 3.497324",\ + "1.611243, 1.909503, 2.179143, 2.673717, 3.665442",\ + "2.193155, 2.491410, 2.761045, 3.255615, 4.247333"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.045877, 0.045877, 0.045878, 0.045878, 0.045878",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494119, 1.494119, 1.494119, 1.494119, 1.494120",\ + "0.045877, 0.045877, 0.045878, 0.045878, 0.045878",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494119, 1.494119, 1.494119, 1.494119, 1.494120",\ + "0.045877, 0.045877, 0.045878, 0.045878, 0.045878",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494119, 1.494119, 1.494119, 1.494119, 1.494120",\ + "0.045877, 0.045877, 0.045878, 0.045878, 0.045878",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494119, 1.494119, 1.494119, 1.494119, 1.494120",\ + "0.045877, 0.045877, 0.045878, 0.045878, 0.045878",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494119, 1.494119, 1.494119, 1.494119, 1.494120"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[8]_redg_2719*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[23]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.329434, 0.567970, 0.849310, 1.349062, 2.348564",\ + "0.370729, 0.609110, 0.889780, 1.387186, 2.381998",\ + "0.446657, 0.684926, 0.965184, 1.461121, 2.452996",\ + "0.702252, 0.940104, 1.219789, 1.715647, 2.707363",\ + "1.626635, 1.863892, 2.145200, 2.640602, 3.631406",\ + "0.416843, 0.655497, 0.936973, 1.435776, 2.434498",\ + "0.458138, 0.696638, 0.977436, 1.473900, 2.467931",\ + "0.534066, 0.772454, 1.052835, 1.547836, 2.538929",\ + "0.789661, 1.027628, 1.307440, 1.802361, 2.793297",\ + "1.714044, 1.951428, 2.232849, 2.727316, 3.717340",\ + "0.497703, 0.744421, 1.024939, 1.523398, 2.521453",\ + "0.538998, 0.785561, 1.065401, 1.561522, 2.554886",\ + "0.614927, 0.861378, 1.140800, 1.635457, 2.625884",\ + "0.870521, 1.116544, 1.395405, 1.889983, 2.880252",\ + "1.794904, 2.040369, 2.320814, 2.814938, 3.804295",\ + "0.555377, 0.809972, 1.089084, 1.587311, 2.584962",\ + "0.596671, 0.851113, 1.129546, 1.625435, 2.618395",\ + "0.672599, 0.926930, 1.204945, 1.699371, 2.689393",\ + "0.928193, 1.182084, 1.459549, 1.953896, 2.943761",\ + "1.852575, 2.105947, 2.384958, 2.878851, 3.867804",\ + "0.876916, 1.173402, 1.441262, 1.936784, 2.930418",\ + "0.918063, 1.214545, 1.481701, 1.974898, 2.963851",\ + "0.993829, 1.290365, 1.557085, 2.048828, 3.034849",\ + "1.249296, 1.545383, 1.811688, 2.303353, 3.289217",\ + "2.172819, 2.469679, 2.737093, 3.228306, 4.213260"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.035016, 0.035016, 0.035955, 0.039196, 0.045676",\ + "0.083549, 0.083549, 0.083885, 0.085044, 0.087361",\ + "0.208718, 0.208718, 0.208874, 0.209415, 0.210496",\ + "0.692609, 0.692819, 0.692927, 0.693072, 0.693361",\ + "2.477031, 2.477031, 2.477148, 2.477552, 2.478359",\ + "0.035016, 0.035016, 0.035965, 0.039196, 0.045676",\ + "0.083549, 0.083549, 0.083888, 0.085044, 0.087361",\ + "0.208718, 0.208718, 0.208876, 0.209415, 0.210496",\ + "0.692609, 0.692820, 0.692927, 0.693072, 0.693361",\ + "2.477031, 2.477031, 2.477149, 2.477552, 2.478359",\ + "0.035016, 0.035016, 0.035966, 0.039196, 0.045676",\ + "0.083549, 0.083549, 0.083888, 0.085044, 0.087361",\ + "0.208718, 0.208718, 0.208876, 0.209415, 0.210496",\ + "0.692610, 0.692821, 0.692927, 0.693072, 0.693361",\ + "2.477031, 2.477031, 2.477149, 2.477552, 2.478359",\ + "0.035016, 0.035016, 0.035966, 0.039196, 0.045676",\ + "0.083549, 0.083549, 0.083889, 0.085044, 0.087361",\ + "0.208718, 0.208718, 0.208876, 0.209415, 0.210496",\ + "0.692612, 0.692822, 0.692927, 0.693072, 0.693361",\ + "2.477031, 2.477031, 2.477149, 2.477552, 2.478359",\ + "0.035016, 0.035016, 0.035999, 0.039209, 0.045676",\ + "0.083549, 0.083549, 0.083900, 0.085048, 0.087361",\ + "0.208718, 0.208718, 0.208882, 0.209417, 0.210496",\ + "0.692711, 0.692838, 0.692929, 0.693072, 0.693361",\ + "2.477031, 2.477031, 2.477154, 2.477553, 2.478359"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.376302, 0.614890, 0.892196, 1.378119, 2.349964",\ + "0.417201, 0.655792, 0.932845, 1.417492, 2.386786",\ + "0.477347, 0.716035, 0.992408, 1.474614, 2.439025",\ + "0.646325, 0.884988, 1.160689, 1.640497, 2.600112",\ + "1.229570, 1.466407, 1.742451, 2.222424, 3.182369",\ + "0.463711, 0.702417, 0.979816, 1.464833, 2.435898",\ + "0.504610, 0.743320, 1.020461, 1.504206, 2.472719",\ + "0.564756, 0.803563, 1.080016, 1.561328, 2.524959",\ + "0.733734, 0.972517, 1.248289, 1.727211, 2.686046",\ + "1.316979, 1.553937, 1.830052, 2.309139, 3.268303",\ + "0.544574, 0.791340, 1.067780, 1.552455, 2.522853",\ + "0.585473, 0.832245, 1.108425, 1.591828, 2.559674",\ + "0.645618, 0.892489, 1.167980, 1.648950, 2.611914",\ + "0.814594, 1.061442, 1.336253, 1.814833, 2.773001",\ + "1.397827, 1.642867, 1.918017, 2.396760, 3.355258",\ + "0.602253, 0.856891, 1.131923, 1.616368, 2.586362",\ + "0.643149, 0.897798, 1.172568, 1.655741, 2.623183",\ + "0.703295, 0.958043, 1.232122, 1.712863, 2.675423",\ + "0.872267, 1.126997, 1.400395, 1.878746, 2.836510",\ + "1.455475, 1.708427, 1.982158, 2.460673, 3.418767",\ + "0.923807, 1.220314, 1.483961, 1.965784, 2.931818",\ + "0.964736, 1.261250, 1.524593, 2.005152, 2.968639",\ + "1.024895, 1.321501, 1.584123, 2.062263, 3.020879",\ + "1.193870, 1.490460, 1.752371, 2.228136, 3.181966",\ + "1.775178, 2.071965, 2.334136, 2.810064, 3.764223"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.042685, 0.042788, 0.042938, 0.042938, 0.042938",\ + "0.078477, 0.079298, 0.079365, 0.079365, 0.079365",\ + "0.155270, 0.155314, 0.155322, 0.155322, 0.155322",\ + "0.431182, 0.431182, 0.431182, 0.431182, 0.431182",\ + "1.494069, 1.494069, 1.494069, 1.494069, 1.494069",\ + "0.042685, 0.042789, 0.042938, 0.042938, 0.042938",\ + "0.078477, 0.079299, 0.079365, 0.079365, 0.079365",\ + "0.155270, 0.155314, 0.155322, 0.155322, 0.155322",\ + "0.431182, 0.431182, 0.431182, 0.431182, 0.431182",\ + "1.494069, 1.494069, 1.494069, 1.494069, 1.494069",\ + "0.042685, 0.042791, 0.042938, 0.042938, 0.042938",\ + "0.078482, 0.079299, 0.079365, 0.079365, 0.079365",\ + "0.155270, 0.155314, 0.155322, 0.155322, 0.155322",\ + "0.431182, 0.431182, 0.431182, 0.431182, 0.431182",\ + "1.494069, 1.494069, 1.494069, 1.494069, 1.494069",\ + "0.042685, 0.042794, 0.042938, 0.042938, 0.042938",\ + "0.078491, 0.079301, 0.079365, 0.079365, 0.079365",\ + "0.155271, 0.155315, 0.155322, 0.155322, 0.155322",\ + "0.431182, 0.431182, 0.431182, 0.431182, 0.431182",\ + "1.494069, 1.494069, 1.494069, 1.494069, 1.494069",\ + "0.042685, 0.042831, 0.042938, 0.042938, 0.042938",\ + "0.078956, 0.079318, 0.079365, 0.079365, 0.079365",\ + "0.155294, 0.155316, 0.155322, 0.155322, 0.155322",\ + "0.431182, 0.431182, 0.431182, 0.431182, 0.431182",\ + "1.494069, 1.494069, 1.494069, 1.494069, 1.494069"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[8]_redg*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[24]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.731951, 0.980905, 1.256242, 1.719746, 2.646754",\ + "0.766341, 1.015295, 1.290632, 1.754136, 2.681144",\ + "0.837584, 1.086538, 1.361876, 1.825380, 2.752387",\ + "1.091750, 1.340704, 1.616042, 2.079546, 3.006554",\ + "2.016322, 2.265275, 2.540610, 3.004114, 3.931121",\ + "0.819353, 1.068475, 1.343788, 1.806459, 2.732687",\ + "0.853744, 1.102866, 1.378179, 1.840850, 2.767077",\ + "0.924986, 1.174109, 1.449422, 1.912093, 2.838321",\ + "1.179153, 1.428275, 1.703588, 2.166259, 3.092487",\ + "2.103725, 2.352845, 2.628156, 3.090827, 4.017055",\ + "0.900166, 1.157465, 1.431751, 1.894080, 2.819643",\ + "0.934556, 1.191856, 1.466141, 1.928470, 2.854033",\ + "1.005799, 1.263098, 1.537384, 1.999714, 2.925276",\ + "1.259965, 1.517265, 1.791550, 2.253880, 3.179442",\ + "2.184537, 2.441835, 2.716118, 3.178448, 4.104010",\ + "0.957806, 1.223112, 1.495889, 1.957993, 2.883152",\ + "0.992196, 1.257502, 1.530279, 1.992383, 2.917542",\ + "1.063439, 1.328745, 1.601523, 2.063626, 2.988785",\ + "1.317605, 1.582911, 1.855689, 2.317793, 3.242951",\ + "2.242177, 2.507481, 2.780257, 3.242361, 4.167519",\ + "1.292888, 1.587742, 1.847697, 2.307310, 3.228608",\ + "1.327278, 1.622132, 1.882087, 2.341700, 3.262998",\ + "1.398521, 1.693375, 1.953330, 2.412943, 3.334241",\ + "1.652687, 1.947541, 2.207496, 2.667110, 3.588408",\ + "2.577259, 2.872111, 3.132065, 3.591678, 4.512975"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.034112, 0.034112, 0.034112, 0.034112, 0.034112",\ + "0.083750, 0.083750, 0.083750, 0.083750, 0.083751",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692758, 0.692758, 0.692759, 0.692760, 0.692764",\ + "2.464354, 2.464354, 2.464354, 2.464354, 2.464354",\ + "0.034112, 0.034112, 0.034112, 0.034112, 0.034112",\ + "0.083750, 0.083750, 0.083750, 0.083750, 0.083751",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692758, 0.692758, 0.692759, 0.692760, 0.692764",\ + "2.464354, 2.464354, 2.464354, 2.464354, 2.464354",\ + "0.034112, 0.034112, 0.034112, 0.034112, 0.034112",\ + "0.083750, 0.083750, 0.083750, 0.083750, 0.083751",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692758, 0.692758, 0.692759, 0.692760, 0.692764",\ + "2.464354, 2.464354, 2.464354, 2.464354, 2.464354",\ + "0.034112, 0.034112, 0.034112, 0.034112, 0.034112",\ + "0.083750, 0.083750, 0.083750, 0.083750, 0.083751",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692758, 0.692758, 0.692759, 0.692760, 0.692764",\ + "2.464354, 2.464354, 2.464354, 2.464354, 2.464354",\ + "0.034112, 0.034112, 0.034112, 0.034112, 0.034112",\ + "0.083750, 0.083750, 0.083750, 0.083750, 0.083751",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692758, 0.692758, 0.692759, 0.692760, 0.692764",\ + "2.464354, 2.464354, 2.464354, 2.464354, 2.464354"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.763712, 1.012664, 1.287999, 1.751503, 2.678509",\ + "0.805464, 1.054416, 1.329752, 1.793255, 2.720262",\ + "0.865395, 1.114347, 1.389682, 1.853185, 2.780192",\ + "1.033512, 1.282464, 1.557799, 2.021303, 2.948309",\ + "1.615425, 1.864370, 2.139697, 2.603199, 3.530203",\ + "0.851115, 1.100234, 1.375545, 1.838216, 2.764443",\ + "0.892867, 1.141987, 1.417298, 1.879968, 2.806196",\ + "0.952797, 1.201917, 1.477228, 1.939899, 2.866126",\ + "1.120914, 1.370034, 1.645345, 2.108016, 3.034243",\ + "1.702827, 1.951940, 2.227243, 2.689913, 3.616137",\ + "0.931927, 1.189224, 1.463507, 1.925837, 2.851398",\ + "0.973680, 1.230977, 1.505260, 1.967589, 2.893151",\ + "1.033610, 1.290907, 1.565190, 2.027519, 2.953081",\ + "1.201727, 1.459024, 1.733307, 2.195637, 3.121198",\ + "1.783640, 2.040930, 2.315206, 2.777534, 3.703092",\ + "0.989567, 1.254871, 1.527646, 1.989749, 2.914907",\ + "1.031319, 1.296623, 1.569398, 2.031502, 2.956660",\ + "1.091250, 1.356553, 1.629329, 2.091432, 3.016590",\ + "1.259367, 1.524671, 1.797446, 2.259549, 3.184707",\ + "1.841280, 2.106576, 2.379344, 2.841446, 3.766601",\ + "1.324649, 1.619500, 1.879453, 2.339067, 3.260363",\ + "1.366401, 1.661253, 1.921206, 2.380819, 3.302116",\ + "1.426332, 1.721183, 1.981136, 2.440749, 3.362046",\ + "1.594449, 1.889300, 2.149253, 2.608866, 3.530163",\ + "2.176360, 2.471204, 2.731152, 3.190763, 4.112057"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.045877, 0.045877, 0.045877, 0.045877, 0.045877",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494119, 1.494119, 1.494119, 1.494119, 1.494120",\ + "0.045877, 0.045877, 0.045877, 0.045877, 0.045877",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494119, 1.494119, 1.494119, 1.494119, 1.494120",\ + "0.045877, 0.045877, 0.045877, 0.045877, 0.045877",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494119, 1.494119, 1.494119, 1.494119, 1.494120",\ + "0.045877, 0.045877, 0.045877, 0.045877, 0.045877",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494119, 1.494119, 1.494119, 1.494119, 1.494120",\ + "0.045877, 0.045877, 0.045877, 0.045877, 0.045877",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494119, 1.494119, 1.494119, 1.494119, 1.494120"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[8]_redg_2432*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[26]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.602525, 0.840752, 1.118848, 1.606867, 2.582905",\ + "0.636915, 0.875142, 1.153247, 1.641296, 2.617393",\ + "0.708158, 0.946386, 1.224478, 1.712482, 2.688491",\ + "0.962324, 1.200552, 1.478688, 1.966845, 2.943158",\ + "1.886897, 2.125118, 2.403212, 2.891220, 3.867236",\ + "0.689934, 0.928280, 1.206475, 1.693581, 2.668839",\ + "0.724325, 0.962670, 1.240873, 1.728010, 2.703327",\ + "0.795567, 1.033914, 1.312104, 1.799197, 2.774425",\ + "1.049734, 1.288080, 1.566315, 2.053559, 3.029092",\ + "1.974307, 2.212646, 2.490838, 2.977934, 3.953170",\ + "0.770795, 1.017206, 1.294439, 1.781203, 2.755794",\ + "0.805185, 1.051596, 1.328838, 1.815632, 2.790282",\ + "0.876428, 1.122840, 1.400069, 1.886818, 2.861380",\ + "1.130594, 1.377006, 1.654280, 2.141181, 3.116047",\ + "2.055167, 2.301572, 2.578803, 3.065556, 4.040125",\ + "0.828465, 1.082761, 1.358582, 1.845116, 2.819303",\ + "0.862855, 1.117151, 1.392981, 1.879545, 2.853791",\ + "0.934098, 1.188395, 1.464212, 1.950732, 2.924889",\ + "1.188264, 1.442561, 1.718422, 2.205094, 3.179556",\ + "2.112837, 2.367127, 2.642946, 3.129469, 4.103634",\ + "1.149414, 1.446227, 1.710642, 2.194541, 3.164759",\ + "1.183804, 1.480617, 1.745041, 2.228970, 3.199247",\ + "1.255047, 1.551860, 1.816271, 2.300156, 3.270345",\ + "1.509214, 1.806027, 2.070484, 2.554519, 3.525012",\ + "2.433782, 2.730593, 2.995005, 3.478894, 4.449090"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.034112, 0.034112, 0.034113, 0.034114, 0.034116",\ + "0.083749, 0.083750, 0.083752, 0.083758, 0.083770",\ + "0.208405, 0.208405, 0.208405, 0.208405, 0.208405",\ + "0.692756, 0.692757, 0.692767, 0.692798, 0.692859",\ + "2.464362, 2.464362, 2.464362, 2.464362, 2.464362",\ + "0.034112, 0.034112, 0.034113, 0.034114, 0.034116",\ + "0.083749, 0.083750, 0.083752, 0.083758, 0.083770",\ + "0.208405, 0.208405, 0.208405, 0.208405, 0.208405",\ + "0.692756, 0.692757, 0.692767, 0.692798, 0.692859",\ + "2.464362, 2.464362, 2.464362, 2.464362, 2.464362",\ + "0.034112, 0.034112, 0.034113, 0.034114, 0.034116",\ + "0.083749, 0.083750, 0.083752, 0.083758, 0.083770",\ + "0.208405, 0.208405, 0.208405, 0.208405, 0.208405",\ + "0.692756, 0.692757, 0.692767, 0.692798, 0.692859",\ + "2.464362, 2.464362, 2.464362, 2.464362, 2.464362",\ + "0.034112, 0.034112, 0.034113, 0.034114, 0.034116",\ + "0.083749, 0.083750, 0.083752, 0.083758, 0.083770",\ + "0.208405, 0.208405, 0.208405, 0.208405, 0.208405",\ + "0.692756, 0.692757, 0.692767, 0.692798, 0.692859",\ + "2.464362, 2.464362, 2.464362, 2.464362, 2.464362",\ + "0.034112, 0.034112, 0.034113, 0.034114, 0.034116",\ + "0.083749, 0.083750, 0.083752, 0.083758, 0.083770",\ + "0.208405, 0.208405, 0.208405, 0.208405, 0.208405",\ + "0.692756, 0.692757, 0.692767, 0.692798, 0.692859",\ + "2.464362, 2.464362, 2.464362, 2.464362, 2.464362"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.634287, 0.872507, 1.150200, 1.636823, 2.610071",\ + "0.676039, 0.914259, 1.192001, 1.678792, 2.652375",\ + "0.735970, 0.974190, 1.251983, 1.738955, 2.712900",\ + "0.904087, 1.142307, 1.420172, 1.907391, 2.881829",\ + "1.486003, 1.724197, 2.002198, 2.489875, 3.465229",\ + "0.721696, 0.960035, 1.237821, 1.723538, 2.696005",\ + "0.763449, 1.001787, 1.279623, 1.765507, 2.738309",\ + "0.823379, 1.061718, 1.339606, 1.825670, 2.798834",\ + "0.991496, 1.229835, 1.507796, 1.994106, 2.967763",\ + "1.573412, 1.811725, 2.089823, 2.576589, 3.551162",\ + "0.802557, 1.048961, 1.325786, 1.811159, 2.782960",\ + "0.844309, 1.090713, 1.367588, 1.853128, 2.825264",\ + "0.904240, 1.150644, 1.427571, 1.913292, 2.885789",\ + "1.072357, 1.318761, 1.595761, 2.081728, 3.054718",\ + "1.654273, 1.900651, 2.177788, 2.664211, 3.638118",\ + "0.860227, 1.114515, 1.389929, 1.875073, 2.846469",\ + "0.901979, 1.156268, 1.431731, 1.917042, 2.888773",\ + "0.961910, 1.216198, 1.491714, 1.977205, 2.949298",\ + "1.130027, 1.384316, 1.659903, 2.145641, 3.118227",\ + "1.711942, 1.966206, 2.241930, 2.728124, 3.701627",\ + "1.181171, 1.477981, 1.741974, 2.224492, 3.191925",\ + "1.222923, 1.519734, 1.783778, 2.266461, 3.234229",\ + "1.282854, 1.579664, 1.843763, 2.326625, 3.294754",\ + "1.450971, 1.747782, 2.011955, 2.495062, 3.463683",\ + "2.032870, 2.329673, 2.593987, 3.077547, 4.047082"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.045878, 0.045878, 0.045878, 0.045878, 0.045878",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494118, 1.494119, 1.494120, 1.494126, 1.494136",\ + "0.045878, 0.045878, 0.045878, 0.045878, 0.045878",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494118, 1.494119, 1.494120, 1.494126, 1.494136",\ + "0.045878, 0.045878, 0.045878, 0.045878, 0.045878",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494118, 1.494119, 1.494120, 1.494126, 1.494136",\ + "0.045878, 0.045878, 0.045878, 0.045878, 0.045878",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494118, 1.494119, 1.494120, 1.494126, 1.494136",\ + "0.045878, 0.045878, 0.045878, 0.045878, 0.045878",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494118, 1.494119, 1.494120, 1.494126, 1.494136"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[8]_redg_2526*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[28]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.555636, 0.806104, 1.084905, 1.584821, 2.584653",\ + "0.590029, 0.840498, 1.119303, 1.619235, 2.619098",\ + "0.661266, 0.911734, 1.190528, 1.690421, 2.690205",\ + "0.915433, 1.165901, 1.444770, 1.944926, 2.945236",\ + "1.840038, 2.090508, 2.369324, 2.869289, 3.869217",\ + "0.643048, 0.893609, 1.172570, 1.671536, 2.670587",\ + "0.677441, 0.928003, 1.206968, 1.705950, 2.705032",\ + "0.748679, 0.999240, 1.278193, 1.777135, 2.776139",\ + "1.002845, 1.253406, 1.532436, 2.031641, 3.031170",\ + "1.927450, 2.178014, 2.456990, 2.956004, 3.955151",\ + "0.723905, 0.982497, 1.260536, 1.759158, 2.757542",\ + "0.758298, 1.016890, 1.294935, 1.793572, 2.791987",\ + "0.829535, 1.088127, 1.366160, 1.864758, 2.863094",\ + "1.083702, 1.342294, 1.620402, 2.119263, 3.118125",\ + "2.008307, 2.266901, 2.544956, 3.043626, 4.042106",\ + "0.781799, 1.047996, 1.324681, 1.823071, 2.821051",\ + "0.816193, 1.082390, 1.359079, 1.857485, 2.855496",\ + "0.887430, 1.153626, 1.430304, 1.928671, 2.926603",\ + "1.141596, 1.407793, 1.684547, 2.183176, 3.181634",\ + "2.066201, 2.332401, 2.609101, 3.107539, 4.105615",\ + "1.114657, 1.410772, 1.676864, 2.172549, 3.166507",\ + "1.149050, 1.445166, 1.711262, 2.206963, 3.200952",\ + "1.220287, 1.516402, 1.782487, 2.278148, 3.272059",\ + "1.474454, 1.770569, 2.036732, 2.532654, 3.527090",\ + "2.399059, 2.695177, 2.961284, 3.457017, 4.451071"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.034112, 0.034113, 0.034114, 0.034119, 0.034130",\ + "0.083750, 0.083751, 0.083761, 0.083790, 0.083849",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692761, 0.692766, 0.692810, 0.692941, 0.693203",\ + "2.465173, 2.465199, 2.466091, 2.469060, 2.474999",\ + "0.034112, 0.034113, 0.034114, 0.034119, 0.034130",\ + "0.083750, 0.083751, 0.083761, 0.083790, 0.083849",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692761, 0.692766, 0.692810, 0.692941, 0.693203",\ + "2.465173, 2.465199, 2.466100, 2.469060, 2.474999",\ + "0.034112, 0.034113, 0.034114, 0.034119, 0.034130",\ + "0.083750, 0.083751, 0.083761, 0.083790, 0.083849",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692761, 0.692766, 0.692810, 0.692941, 0.693203",\ + "2.465173, 2.465199, 2.466100, 2.469060, 2.474999",\ + "0.034112, 0.034113, 0.034114, 0.034119, 0.034130",\ + "0.083750, 0.083751, 0.083761, 0.083790, 0.083849",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692761, 0.692766, 0.692810, 0.692941, 0.693203",\ + "2.465173, 2.465200, 2.466101, 2.469060, 2.474999",\ + "0.034112, 0.034113, 0.034114, 0.034119, 0.034130",\ + "0.083751, 0.083752, 0.083762, 0.083790, 0.083849",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692761, 0.692768, 0.692812, 0.692941, 0.693203",\ + "2.465173, 2.465210, 2.466131, 2.469072, 2.474999"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.587433, 0.837905, 1.116317, 1.614875, 2.611990",\ + "0.629185, 0.879656, 1.158119, 1.656853, 2.654322",\ + "0.689115, 0.939586, 1.218100, 1.717010, 2.714829",\ + "0.857231, 1.107703, 1.386286, 1.885441, 2.883749",\ + "1.439262, 1.689742, 1.968444, 2.467987, 3.467073",\ + "0.674846, 0.925410, 1.203978, 1.701590, 2.697924",\ + "0.716597, 0.967161, 1.245781, 1.743568, 2.740255",\ + "0.776528, 1.027092, 1.305762, 1.803725, 2.800763",\ + "0.944644, 1.195208, 1.473949, 1.972156, 2.969683",\ + "1.526675, 1.777247, 2.056108, 2.554702, 3.553007",\ + "0.755703, 1.014297, 1.291944, 1.789212, 2.784879",\ + "0.797454, 1.056048, 1.333747, 1.831190, 2.827210",\ + "0.857384, 1.115979, 1.393728, 1.891347, 2.887718",\ + "1.025501, 1.284095, 1.561916, 2.059778, 3.056638",\ + "1.607531, 1.866135, 2.144074, 2.642324, 3.639962",\ + "0.813597, 1.079797, 1.356089, 1.853126, 2.848388",\ + "0.855349, 1.121548, 1.397891, 1.895104, 2.890719",\ + "0.915279, 1.181478, 1.457873, 1.955260, 2.951227",\ + "1.083395, 1.349595, 1.626060, 2.123692, 3.120147",\ + "1.665427, 1.931634, 2.208219, 2.706238, 3.703471",\ + "1.146455, 1.442573, 1.708257, 2.202597, 3.193844",\ + "1.188207, 1.484324, 1.750062, 2.244576, 3.236176",\ + "1.248137, 1.544255, 1.810045, 2.304733, 3.296683",\ + "1.416253, 1.712371, 1.978235, 2.473166, 3.465603",\ + "1.998287, 2.294412, 2.560398, 3.055713, 4.048927"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.045876, 0.045875, 0.045861, 0.045821, 0.045741",\ + "0.079914, 0.079913, 0.079913, 0.079910, 0.079906",\ + "0.155804, 0.155803, 0.155792, 0.155761, 0.155698",\ + "0.431307, 0.431307, 0.431304, 0.431297, 0.431282",\ + "1.494119, 1.494120, 1.494128, 1.494150, 1.494195",\ + "0.045876, 0.045875, 0.045861, 0.045821, 0.045741",\ + "0.079914, 0.079913, 0.079913, 0.079910, 0.079906",\ + "0.155804, 0.155803, 0.155792, 0.155761, 0.155698",\ + "0.431307, 0.431307, 0.431304, 0.431297, 0.431282",\ + "1.494119, 1.494120, 1.494128, 1.494150, 1.494195",\ + "0.045876, 0.045875, 0.045861, 0.045821, 0.045741",\ + "0.079914, 0.079913, 0.079913, 0.079910, 0.079906",\ + "0.155804, 0.155803, 0.155792, 0.155761, 0.155698",\ + "0.431307, 0.431307, 0.431304, 0.431297, 0.431282",\ + "1.494119, 1.494120, 1.494128, 1.494150, 1.494195",\ + "0.045876, 0.045875, 0.045861, 0.045821, 0.045741",\ + "0.079914, 0.079913, 0.079913, 0.079910, 0.079906",\ + "0.155804, 0.155803, 0.155792, 0.155761, 0.155698",\ + "0.431307, 0.431307, 0.431304, 0.431297, 0.431282",\ + "1.494119, 1.494120, 1.494128, 1.494150, 1.494195",\ + "0.045876, 0.045874, 0.045861, 0.045821, 0.045741",\ + "0.079914, 0.079913, 0.079913, 0.079910, 0.079906",\ + "0.155804, 0.155802, 0.155792, 0.155761, 0.155698",\ + "0.431307, 0.431307, 0.431304, 0.431297, 0.431282",\ + "1.494119, 1.494120, 1.494128, 1.494150, 1.494195"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[8]_redg_2616*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[30]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.634427, 0.872697, 1.149292, 1.635475, 2.607842",\ + "0.668851, 0.907120, 1.183712, 1.669888, 2.642240",\ + "0.739833, 0.978100, 1.254713, 1.740957, 2.713446",\ + "0.993985, 1.232251, 1.508868, 1.995127, 2.967646",\ + "1.919059, 2.157313, 2.433878, 2.919960, 3.892124",\ + "0.721829, 0.960233, 1.236908, 1.722188, 2.693776",\ + "0.756252, 0.994656, 1.271329, 1.756601, 2.728174",\ + "0.827235, 1.065637, 1.342330, 1.827670, 2.799379",\ + "1.081387, 1.319787, 1.596485, 2.081840, 3.053579",\ + "2.006460, 2.244850, 2.521494, 3.006673, 3.978058",\ + "0.802677, 1.049143, 1.324872, 1.809809, 2.780731",\ + "0.837101, 1.083566, 1.359292, 1.844222, 2.815129",\ + "0.908083, 1.154546, 1.430293, 1.915291, 2.886334",\ + "1.162235, 1.408697, 1.684448, 2.169461, 3.140534",\ + "2.087309, 2.333760, 2.609457, 3.094293, 4.065013",\ + "0.860401, 1.114674, 1.389014, 1.873721, 2.844240",\ + "0.894825, 1.149096, 1.423434, 1.908134, 2.878638",\ + "0.965807, 1.220077, 1.494435, 1.979203, 2.949843",\ + "1.219959, 1.474228, 1.748591, 2.233373, 3.204043",\ + "2.145033, 2.399290, 2.673600, 3.158206, 4.128522",\ + "1.188527, 1.477957, 1.741051, 2.223131, 3.189696",\ + "1.222950, 1.512379, 1.775471, 2.257544, 3.224094",\ + "1.293931, 1.583360, 1.846473, 2.328613, 3.295300",\ + "1.548083, 1.837511, 2.100628, 2.582783, 3.549500",\ + "2.473149, 2.762573, 3.025636, 3.507615, 4.473978"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.034240, 0.034240, 0.034242, 0.034250, 0.034266",\ + "0.083583, 0.083583, 0.083588, 0.083605, 0.083639",\ + "0.208066, 0.208067, 0.208071, 0.208084, 0.208111",\ + "0.693291, 0.693291, 0.693291, 0.693291, 0.693291",\ + "2.470530, 2.470530, 2.470531, 2.470531, 2.470532",\ + "0.034240, 0.034240, 0.034243, 0.034250, 0.034266",\ + "0.083583, 0.083583, 0.083589, 0.083605, 0.083639",\ + "0.208066, 0.208067, 0.208071, 0.208084, 0.208111",\ + "0.693291, 0.693291, 0.693291, 0.693291, 0.693291",\ + "2.470530, 2.470530, 2.470531, 2.470531, 2.470532",\ + "0.034240, 0.034240, 0.034243, 0.034250, 0.034266",\ + "0.083583, 0.083583, 0.083589, 0.083605, 0.083639",\ + "0.208066, 0.208067, 0.208071, 0.208084, 0.208111",\ + "0.693291, 0.693291, 0.693291, 0.693291, 0.693291",\ + "2.470530, 2.470530, 2.470531, 2.470531, 2.470532",\ + "0.034240, 0.034240, 0.034243, 0.034250, 0.034266",\ + "0.083583, 0.083583, 0.083589, 0.083605, 0.083639",\ + "0.208066, 0.208067, 0.208071, 0.208084, 0.208111",\ + "0.693291, 0.693291, 0.693291, 0.693291, 0.693291",\ + "2.470530, 2.470530, 2.470531, 2.470531, 2.470532",\ + "0.034240, 0.034240, 0.034243, 0.034250, 0.034266",\ + "0.083583, 0.083583, 0.083589, 0.083605, 0.083639",\ + "0.208066, 0.208067, 0.208071, 0.208084, 0.208111",\ + "0.693291, 0.693291, 0.693291, 0.693291, 0.693291",\ + "2.470530, 2.470530, 2.470531, 2.470531, 2.470532"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.661467, 0.899737, 1.176348, 1.662586, 2.635063",\ + "0.703763, 0.942033, 1.218582, 1.704611, 2.676670",\ + "0.764325, 1.002595, 1.279082, 1.764899, 2.736534",\ + "0.933255, 1.171525, 1.447944, 1.933534, 2.904712",\ + "1.516509, 1.754779, 2.031088, 2.516304, 3.486737",\ + "0.748868, 0.987273, 1.263965, 1.749299, 2.720997",\ + "0.791164, 1.029569, 1.306198, 1.791324, 2.762603",\ + "0.851727, 1.090131, 1.366697, 1.851612, 2.822468",\ + "1.020657, 1.259062, 1.535559, 2.020247, 2.990646",\ + "1.603910, 1.842315, 2.118701, 2.603017, 3.572671",\ + "0.829717, 1.076183, 1.351928, 1.836920, 2.807952",\ + "0.872012, 1.118479, 1.394161, 1.878945, 2.849558",\ + "0.932575, 1.179041, 1.454660, 1.939233, 2.909423",\ + "1.101505, 1.347972, 1.623522, 2.107867, 3.077601",\ + "1.684759, 1.931225, 2.206665, 2.690638, 3.659626",\ + "0.887441, 1.141714, 1.416070, 1.900832, 2.871461",\ + "0.929737, 1.184009, 1.458303, 1.942857, 2.913067",\ + "0.990299, 1.244572, 1.518803, 2.003145, 2.972932",\ + "1.159229, 1.413502, 1.687665, 2.171780, 3.141110",\ + "1.742483, 1.996755, 2.270807, 2.754550, 3.723135",\ + "1.215567, 1.504997, 1.768108, 2.250242, 3.216917",\ + "1.257862, 1.547292, 1.810339, 2.292266, 3.258523",\ + "1.318425, 1.607855, 1.870836, 2.352553, 3.318388",\ + "1.487355, 1.776785, 2.039696, 2.521187, 3.486566",\ + "2.070609, 2.360038, 2.622834, 3.103956, 4.068591"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.045862, 0.045862, 0.045862, 0.045862, 0.045862",\ + "0.079960, 0.079960, 0.079960, 0.079960, 0.079960",\ + "0.155688, 0.155688, 0.155688, 0.155688, 0.155688",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498067, 1.498067, 1.498067, 1.498067, 1.498067",\ + "0.045862, 0.045862, 0.045862, 0.045862, 0.045862",\ + "0.079960, 0.079960, 0.079960, 0.079960, 0.079960",\ + "0.155688, 0.155688, 0.155688, 0.155688, 0.155688",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498067, 1.498067, 1.498067, 1.498067, 1.498067",\ + "0.045862, 0.045862, 0.045862, 0.045862, 0.045862",\ + "0.079960, 0.079960, 0.079960, 0.079960, 0.079960",\ + "0.155688, 0.155688, 0.155688, 0.155688, 0.155688",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498067, 1.498067, 1.498067, 1.498067, 1.498067",\ + "0.045862, 0.045862, 0.045862, 0.045862, 0.045862",\ + "0.079960, 0.079960, 0.079960, 0.079960, 0.079960",\ + "0.155688, 0.155688, 0.155688, 0.155688, 0.155688",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498067, 1.498067, 1.498067, 1.498067, 1.498067",\ + "0.045862, 0.045862, 0.045862, 0.045862, 0.045862",\ + "0.079960, 0.079960, 0.079960, 0.079960, 0.079960",\ + "0.155688, 0.155688, 0.155688, 0.155688, 0.155688",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498067, 1.498067, 1.498067, 1.498067, 1.498067"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[8]_redg_2722*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[36]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.584050, 0.834549, 1.112490, 1.609591, 2.603792",\ + "0.618482, 0.868982, 1.146923, 1.644024, 2.638226",\ + "0.689476, 0.939977, 1.217929, 1.715062, 2.709330",\ + "0.943640, 1.194143, 1.472115, 1.969317, 2.963722",\ + "1.868820, 2.119334, 2.397313, 2.894526, 3.888954",\ + "0.671463, 0.922054, 1.200147, 1.696306, 2.689726",\ + "0.705894, 0.956486, 1.234580, 1.730739, 2.724160",\ + "0.776888, 1.027482, 1.305585, 1.801777, 2.795263",\ + "1.031053, 1.281648, 1.559772, 2.056032, 3.049656",\ + "1.956232, 2.206839, 2.484970, 2.981241, 3.974888",\ + "0.752319, 1.010941, 1.288113, 1.783928, 2.776681",\ + "0.786751, 1.045373, 1.322546, 1.818361, 2.811115",\ + "0.857745, 1.116369, 1.393551, 1.889400, 2.882218",\ + "1.111909, 1.370534, 1.647738, 2.143654, 3.136611",\ + "2.037089, 2.295726, 2.572936, 3.068864, 4.061843",\ + "0.810059, 1.076439, 1.352257, 1.847842, 2.840190",\ + "0.844490, 1.110871, 1.386690, 1.882275, 2.874624",\ + "0.915485, 1.181867, 1.457695, 1.953313, 2.945727",\ + "1.169649, 1.436033, 1.711882, 2.207568, 3.200120",\ + "2.094831, 2.361224, 2.637080, 3.132777, 4.125352",\ + "1.143033, 1.439203, 1.704411, 2.197307, 3.185646",\ + "1.177464, 1.473635, 1.738844, 2.231740, 3.220080",\ + "1.248459, 1.544631, 1.809850, 2.302778, 3.291183",\ + "1.502625, 1.798797, 2.064037, 2.557034, 3.545576",\ + "2.427809, 2.723989, 2.989235, 3.482243, 4.470808"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.034240, 0.034241, 0.034251, 0.034278, 0.034331",\ + "0.083583, 0.083586, 0.083606, 0.083665, 0.083782",\ + "0.208067, 0.208069, 0.208085, 0.208132, 0.208225",\ + "0.693300, 0.693300, 0.693300, 0.693300, 0.693300",\ + "2.470758, 2.470775, 2.471205, 2.472677, 2.475621",\ + "0.034240, 0.034241, 0.034251, 0.034278, 0.034331",\ + "0.083583, 0.083586, 0.083607, 0.083665, 0.083782",\ + "0.208067, 0.208069, 0.208085, 0.208132, 0.208225",\ + "0.693300, 0.693300, 0.693300, 0.693300, 0.693300",\ + "2.470758, 2.470775, 2.471210, 2.472677, 2.475621",\ + "0.034240, 0.034241, 0.034251, 0.034278, 0.034331",\ + "0.083583, 0.083586, 0.083607, 0.083665, 0.083782",\ + "0.208067, 0.208069, 0.208085, 0.208132, 0.208225",\ + "0.693300, 0.693300, 0.693300, 0.693300, 0.693300",\ + "2.470758, 2.470775, 2.471210, 2.472677, 2.475621",\ + "0.034240, 0.034241, 0.034251, 0.034278, 0.034331",\ + "0.083583, 0.083586, 0.083607, 0.083665, 0.083782",\ + "0.208067, 0.208069, 0.208085, 0.208132, 0.208225",\ + "0.693300, 0.693300, 0.693300, 0.693300, 0.693300",\ + "2.470760, 2.470775, 2.471210, 2.472677, 2.475621",\ + "0.034240, 0.034242, 0.034251, 0.034278, 0.034331",\ + "0.083584, 0.083587, 0.083607, 0.083665, 0.083782",\ + "0.208067, 0.208070, 0.208086, 0.208132, 0.208225",\ + "0.693300, 0.693300, 0.693300, 0.693300, 0.693300",\ + "2.470765, 2.470777, 2.471225, 2.472683, 2.475621"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.611087, 0.861585, 1.139535, 1.636665, 2.630925",\ + "0.653383, 0.903882, 1.181783, 1.678745, 2.672669",\ + "0.713946, 0.964444, 1.242285, 1.739034, 2.732533",\ + "0.882876, 1.133375, 1.411144, 1.907646, 2.900649",\ + "1.466128, 1.716626, 1.994359, 2.490734, 3.483483",\ + "0.698499, 0.949090, 1.227192, 1.723380, 2.716859",\ + "0.740795, 0.991387, 1.269439, 1.765460, 2.758603",\ + "0.801358, 1.051949, 1.329940, 1.825749, 2.818467",\ + "0.970289, 1.220880, 1.498799, 1.994361, 2.986582",\ + "1.553540, 1.804131, 2.082013, 2.577449, 3.569417",\ + "0.779356, 1.037977, 1.315158, 1.811002, 2.803814",\ + "0.821652, 1.080273, 1.357405, 1.853082, 2.845558",\ + "0.882215, 1.140836, 1.417906, 1.913371, 2.905422",\ + "1.051145, 1.309767, 1.586765, 2.081983, 3.073537",\ + "1.634397, 1.893018, 2.169979, 2.665071, 3.656372",\ + "0.837095, 1.103475, 1.379302, 1.874916, 2.867323",\ + "0.879392, 1.145772, 1.421550, 1.916996, 2.909067",\ + "0.939954, 1.206334, 1.482050, 1.977285, 2.968931",\ + "1.108885, 1.375265, 1.650909, 2.145896, 3.137046",\ + "1.692136, 1.958516, 2.234123, 2.728984, 3.719881",\ + "1.170069, 1.466239, 1.731456, 2.224381, 3.212779",\ + "1.212365, 1.508535, 1.773702, 2.266461, 3.254523",\ + "1.272928, 1.569098, 1.834201, 2.326749, 3.314387",\ + "1.441859, 1.738029, 2.003057, 2.495359, 3.482502",\ + "2.025110, 2.321280, 2.586270, 3.078447, 4.065337"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.045859, 0.045858, 0.045856, 0.045847, 0.045830",\ + "0.079972, 0.079972, 0.079972, 0.079972, 0.079972",\ + "0.155685, 0.155685, 0.155683, 0.155678, 0.155666",\ + "0.431271, 0.431271, 0.431271, 0.431270, 0.431268",\ + "1.498064, 1.498063, 1.498061, 1.498051, 1.498033",\ + "0.045859, 0.045858, 0.045856, 0.045847, 0.045830",\ + "0.079972, 0.079972, 0.079972, 0.079972, 0.079972",\ + "0.155685, 0.155685, 0.155683, 0.155678, 0.155666",\ + "0.431271, 0.431271, 0.431271, 0.431270, 0.431268",\ + "1.498064, 1.498063, 1.498060, 1.498051, 1.498033",\ + "0.045859, 0.045858, 0.045856, 0.045847, 0.045830",\ + "0.079972, 0.079972, 0.079972, 0.079972, 0.079972",\ + "0.155685, 0.155685, 0.155683, 0.155678, 0.155666",\ + "0.431271, 0.431271, 0.431271, 0.431270, 0.431268",\ + "1.498064, 1.498063, 1.498060, 1.498051, 1.498033",\ + "0.045859, 0.045858, 0.045856, 0.045847, 0.045830",\ + "0.079972, 0.079972, 0.079972, 0.079972, 0.079972",\ + "0.155685, 0.155685, 0.155683, 0.155678, 0.155666",\ + "0.431271, 0.431271, 0.431271, 0.431270, 0.431268",\ + "1.498064, 1.498063, 1.498060, 1.498051, 1.498033",\ + "0.045858, 0.045858, 0.045856, 0.045847, 0.045830",\ + "0.079972, 0.079972, 0.079972, 0.079972, 0.079972",\ + "0.155685, 0.155685, 0.155683, 0.155678, 0.155666",\ + "0.431271, 0.431271, 0.431271, 0.431270, 0.431268",\ + "1.498063, 1.498063, 1.498060, 1.498051, 1.498033"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[8]_redg_2499*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[38]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.576605, 0.831535, 1.088524, 1.527728, 2.406135",\ + "0.611028, 0.865958, 1.122948, 1.562156, 2.440572",\ + "0.682011, 0.936939, 1.193932, 1.633147, 2.511575",\ + "0.936163, 1.191091, 1.448086, 1.887307, 2.765749",\ + "1.861240, 2.116160, 2.373173, 2.812451, 3.691008",\ + "0.664013, 0.919020, 1.175996, 1.614442, 2.492069",\ + "0.698437, 0.953443, 1.210420, 1.648871, 2.526506",\ + "0.769419, 1.024424, 1.281404, 1.719861, 2.597509",\ + "1.023571, 1.278576, 1.535558, 1.974021, 2.851683",\ + "1.948648, 2.203645, 2.460645, 2.899166, 3.776942",\ + "0.751657, 1.007845, 1.263958, 1.702063, 2.579024",\ + "0.786080, 1.042268, 1.298382, 1.736492, 2.613461",\ + "0.857063, 1.113249, 1.369366, 1.807482, 2.684464",\ + "1.111215, 1.367401, 1.623520, 2.061643, 2.938638",\ + "2.036291, 2.292470, 2.548607, 2.986787, 3.863897",\ + "0.814841, 1.073252, 1.328092, 1.765976, 2.642533",\ + "0.849265, 1.107675, 1.362517, 1.800405, 2.676970",\ + "0.920247, 1.178657, 1.433500, 1.871395, 2.747973",\ + "1.174399, 1.432808, 1.687654, 2.125556, 3.002147",\ + "2.099474, 2.357878, 2.612742, 3.050700, 3.927406",\ + "1.148308, 1.435007, 1.679656, 2.115198, 2.987988",\ + "1.182731, 1.469430, 1.714081, 2.149627, 3.022426",\ + "1.253713, 1.540412, 1.785064, 2.220617, 3.093429",\ + "1.507865, 1.794564, 2.039218, 2.474777, 3.347603",\ + "2.432936, 2.719633, 2.964306, 3.399922, 4.272861"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.034240, 0.034240, 0.034246, 0.034266, 0.034306",\ + "0.083583, 0.083583, 0.083596, 0.083639, 0.083725",\ + "0.208066, 0.208066, 0.208076, 0.208111, 0.208180",\ + "0.693294, 0.693296, 0.693300, 0.693300, 0.693300",\ + "2.470544, 2.470544, 2.470714, 2.471298, 2.472467",\ + "0.034240, 0.034240, 0.034246, 0.034266, 0.034306",\ + "0.083583, 0.083583, 0.083596, 0.083639, 0.083725",\ + "0.208066, 0.208066, 0.208077, 0.208111, 0.208180",\ + "0.693294, 0.693296, 0.693300, 0.693300, 0.693300",\ + "2.470544, 2.470544, 2.470715, 2.471298, 2.472467",\ + "0.034240, 0.034240, 0.034246, 0.034266, 0.034306",\ + "0.083583, 0.083583, 0.083596, 0.083639, 0.083725",\ + "0.208066, 0.208066, 0.208077, 0.208111, 0.208180",\ + "0.693294, 0.693296, 0.693300, 0.693300, 0.693300",\ + "2.470544, 2.470544, 2.470716, 2.471298, 2.472467",\ + "0.034240, 0.034240, 0.034246, 0.034266, 0.034306",\ + "0.083583, 0.083583, 0.083596, 0.083639, 0.083725",\ + "0.208066, 0.208066, 0.208077, 0.208111, 0.208180",\ + "0.693294, 0.693296, 0.693300, 0.693300, 0.693300",\ + "2.470544, 2.470544, 2.470716, 2.471298, 2.472467",\ + "0.034240, 0.034240, 0.034246, 0.034266, 0.034306",\ + "0.083583, 0.083583, 0.083596, 0.083639, 0.083725",\ + "0.208066, 0.208066, 0.208077, 0.208111, 0.208180",\ + "0.693294, 0.693297, 0.693300, 0.693300, 0.693300",\ + "2.470544, 2.470544, 2.470721, 2.471301, 2.472467"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.603644, 0.858574, 1.115563, 1.554765, 2.433169",\ + "0.645940, 0.900870, 1.157859, 1.597061, 2.475466",\ + "0.706502, 0.961433, 1.218421, 1.657624, 2.536028",\ + "0.875433, 1.130363, 1.387352, 1.826554, 2.704960",\ + "1.458686, 1.713616, 1.970605, 2.409806, 3.288209",\ + "0.691052, 0.946059, 1.203035, 1.641479, 2.519103",\ + "0.733348, 0.988355, 1.245331, 1.683775, 2.561400",\ + "0.793911, 1.048918, 1.305893, 1.744338, 2.621962",\ + "0.962841, 1.217848, 1.474824, 1.913269, 2.790894",\ + "1.546094, 1.801101, 2.058077, 2.496521, 3.374143",\ + "0.778696, 1.034884, 1.290997, 1.729101, 2.606058",\ + "0.820992, 1.077180, 1.333292, 1.771397, 2.648355",\ + "0.881555, 1.137743, 1.393855, 1.831960, 2.708917",\ + "1.050485, 1.306673, 1.562785, 2.000890, 2.877849",\ + "1.633738, 1.889926, 2.146038, 2.584142, 3.461098",\ + "0.841881, 1.100292, 1.355131, 1.793014, 2.669567",\ + "0.884176, 1.142587, 1.397427, 1.835310, 2.711864",\ + "0.944739, 1.203150, 1.457990, 1.895873, 2.772426",\ + "1.113669, 1.372080, 1.626920, 2.064803, 2.941358",\ + "1.696922, 1.955333, 2.210173, 2.648055, 3.524607",\ + "1.175348, 1.462047, 1.706695, 2.142236, 3.015023",\ + "1.217643, 1.504343, 1.748991, 2.184532, 3.057320",\ + "1.278206, 1.564905, 1.809554, 2.245094, 3.117882",\ + "1.447136, 1.733835, 1.978484, 2.414025, 3.286813",\ + "2.030389, 2.317089, 2.561737, 2.997277, 3.870063"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.045862, 0.045862, 0.045861, 0.045860, 0.045856",\ + "0.079962, 0.079962, 0.079962, 0.079962, 0.079962",\ + "0.155688, 0.155688, 0.155687, 0.155686, 0.155684",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498067, 1.498067, 1.498066, 1.498065, 1.498061",\ + "0.045862, 0.045862, 0.045861, 0.045860, 0.045856",\ + "0.079962, 0.079962, 0.079962, 0.079962, 0.079962",\ + "0.155688, 0.155688, 0.155687, 0.155686, 0.155684",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498067, 1.498067, 1.498066, 1.498065, 1.498061",\ + "0.045862, 0.045862, 0.045861, 0.045860, 0.045856",\ + "0.079962, 0.079962, 0.079962, 0.079962, 0.079962",\ + "0.155688, 0.155688, 0.155687, 0.155686, 0.155684",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498067, 1.498067, 1.498066, 1.498065, 1.498061",\ + "0.045862, 0.045862, 0.045861, 0.045860, 0.045856",\ + "0.079962, 0.079962, 0.079962, 0.079962, 0.079962",\ + "0.155688, 0.155688, 0.155687, 0.155686, 0.155684",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498067, 1.498067, 1.498066, 1.498065, 1.498061",\ + "0.045862, 0.045862, 0.045861, 0.045860, 0.045856",\ + "0.079962, 0.079962, 0.079962, 0.079962, 0.079962",\ + "0.155688, 0.155688, 0.155687, 0.155686, 0.155684",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498067, 1.498067, 1.498066, 1.498065, 1.498061"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[8]_redg_2578*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[43]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.703817, 0.965190, 1.250386, 1.755046, 2.764366",\ + "0.738210, 0.999583, 1.284779, 1.789440, 2.798762",\ + "0.809448, 1.070821, 1.356016, 1.860676, 2.869994",\ + "1.063614, 1.324987, 1.610183, 2.114842, 3.124160",\ + "1.988218, 2.249590, 2.534788, 3.039459, 4.048801",\ + "0.791226, 1.052733, 1.338065, 1.841760, 2.850300",\ + "0.825619, 1.087126, 1.372458, 1.876155, 2.884696",\ + "0.896857, 1.158363, 1.443695, 1.947390, 2.955927",\ + "1.151023, 1.412530, 1.697862, 2.201556, 3.210094",\ + "2.075627, 2.337133, 2.622467, 3.126173, 4.134735",\ + "0.874336, 1.141692, 1.426031, 1.929382, 2.937255",\ + "0.908729, 1.176085, 1.460424, 1.963776, 2.971651",\ + "0.979967, 1.247323, 1.531661, 2.035012, 3.042882",\ + "1.234133, 1.501489, 1.785827, 2.289178, 3.297049",\ + "2.158737, 2.426092, 2.710433, 3.213795, 4.221690",\ + "0.937775, 1.207295, 1.490176, 1.993295, 3.000764",\ + "0.972168, 1.241688, 1.524569, 2.027689, 3.035160",\ + "1.043406, 1.312926, 1.595807, 2.098925, 3.106391",\ + "1.297572, 1.567092, 1.849973, 2.353091, 3.360558",\ + "2.222176, 2.491695, 2.774579, 3.277709, 4.285199",\ + "1.272869, 1.571325, 1.842405, 2.342789, 3.346220",\ + "1.307262, 1.605718, 1.876798, 2.377183, 3.380616",\ + "1.378499, 1.676956, 1.948035, 2.448418, 3.451848",\ + "1.632666, 1.931122, 2.202202, 2.702585, 3.706014",\ + "2.557269, 2.855725, 3.126807, 3.627202, 4.630655"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.034112, 0.034112, 0.034113, 0.034115, 0.034118",\ + "0.083750, 0.083751, 0.083754, 0.083762, 0.083778",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692760, 0.692763, 0.692780, 0.692819, 0.692898",\ + "2.465101, 2.465101, 2.465179, 2.465445, 2.465979",\ + "0.034112, 0.034112, 0.034113, 0.034115, 0.034118",\ + "0.083750, 0.083751, 0.083754, 0.083762, 0.083778",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692760, 0.692763, 0.692780, 0.692819, 0.692898",\ + "2.465101, 2.465101, 2.465179, 2.465445, 2.465979",\ + "0.034112, 0.034112, 0.034113, 0.034115, 0.034118",\ + "0.083750, 0.083751, 0.083754, 0.083762, 0.083778",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692760, 0.692763, 0.692780, 0.692819, 0.692898",\ + "2.465101, 2.465101, 2.465179, 2.465445, 2.465979",\ + "0.034112, 0.034112, 0.034113, 0.034115, 0.034118",\ + "0.083750, 0.083751, 0.083754, 0.083762, 0.083778",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692760, 0.692763, 0.692780, 0.692819, 0.692898",\ + "2.465101, 2.465101, 2.465180, 2.465445, 2.465979",\ + "0.034112, 0.034112, 0.034113, 0.034115, 0.034118",\ + "0.083750, 0.083751, 0.083754, 0.083762, 0.083778",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692760, 0.692765, 0.692780, 0.692820, 0.692898",\ + "2.465101, 2.465101, 2.465182, 2.465446, 2.465979"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.735613, 0.996985, 1.282184, 1.786857, 2.796203",\ + "0.777364, 1.038737, 1.323936, 1.828608, 2.837953",\ + "0.837295, 1.098667, 1.383866, 1.888539, 2.897883",\ + "1.005411, 1.266784, 1.551982, 2.056655, 3.065999",\ + "1.587437, 1.848807, 2.134015, 2.638729, 3.648157",\ + "0.823022, 1.084528, 1.369863, 1.873571, 2.882137",\ + "0.864774, 1.126280, 1.411614, 1.915322, 2.923887",\ + "0.924704, 1.186210, 1.471545, 1.975253, 2.983817",\ + "1.092821, 1.354327, 1.639661, 2.143369, 3.151933",\ + "1.674846, 1.936350, 2.221694, 2.725443, 3.734090",\ + "0.906132, 1.173487, 1.457829, 1.961193, 2.969092",\ + "0.947883, 1.215239, 1.499580, 2.002944, 3.010842",\ + "1.007814, 1.275169, 1.559510, 2.062875, 3.070772",\ + "1.175930, 1.443286, 1.727627, 2.230991, 3.238888",\ + "1.757956, 2.025309, 2.309659, 2.813065, 3.821045",\ + "0.969571, 1.239090, 1.521974, 2.025106, 3.032601",\ + "1.011322, 1.280842, 1.563726, 2.066857, 3.074351",\ + "1.071253, 1.340772, 1.623656, 2.126788, 3.134281",\ + "1.239369, 1.508889, 1.791773, 2.294904, 3.302397",\ + "1.821394, 2.090912, 2.373805, 2.876978, 3.884554",\ + "1.304665, 1.603120, 1.874203, 2.374600, 3.378057",\ + "1.346416, 1.644871, 1.915954, 2.416351, 3.419807",\ + "1.406347, 1.704802, 1.975885, 2.476281, 3.479737",\ + "1.574463, 1.872918, 2.144001, 2.644397, 3.647853",\ + "2.156488, 2.454941, 2.726034, 3.226472, 4.230011"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.045877, 0.045877, 0.045877, 0.045877, 0.045877",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155804, 0.155804, 0.155804, 0.155804, 0.155804",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494119, 1.494120, 1.494123, 1.494129, 1.494143",\ + "0.045877, 0.045877, 0.045877, 0.045877, 0.045877",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155804, 0.155804, 0.155804, 0.155804, 0.155804",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494119, 1.494120, 1.494123, 1.494129, 1.494143",\ + "0.045877, 0.045877, 0.045877, 0.045877, 0.045877",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155804, 0.155804, 0.155804, 0.155804, 0.155804",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494119, 1.494120, 1.494123, 1.494129, 1.494143",\ + "0.045877, 0.045877, 0.045877, 0.045877, 0.045877",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155804, 0.155804, 0.155804, 0.155804, 0.155804",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494119, 1.494120, 1.494123, 1.494129, 1.494143",\ + "0.045877, 0.045877, 0.045877, 0.045877, 0.045877",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155804, 0.155804, 0.155804, 0.155804, 0.155804",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494119, 1.494120, 1.494123, 1.494129, 1.494143"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[8]_redg_2448*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[44]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.689792, 0.930744, 1.201013, 1.654265, 2.560769",\ + "0.724185, 0.965137, 1.235406, 1.688659, 2.595164",\ + "0.795422, 1.036375, 1.306643, 1.759894, 2.666397",\ + "1.049588, 1.290541, 1.560810, 2.014061, 2.920563",\ + "1.974192, 2.215145, 2.485415, 2.938676, 3.845196",\ + "0.777198, 1.018294, 1.288529, 1.740979, 2.646702",\ + "0.811591, 1.052687, 1.322922, 1.775373, 2.681098",\ + "0.882828, 1.123924, 1.394159, 1.846608, 2.752330",\ + "1.136994, 1.378091, 1.648325, 2.100775, 3.006497",\ + "2.061598, 2.302694, 2.572931, 3.025389, 3.931130",\ + "0.858027, 1.107253, 1.376491, 1.828600, 2.733657",\ + "0.892420, 1.141646, 1.410884, 1.862994, 2.768053",\ + "0.963658, 1.212883, 1.482121, 1.934230, 2.839285",\ + "1.217824, 1.467050, 1.736287, 2.188396, 3.093452",\ + "2.142428, 2.391653, 2.660893, 3.113011, 4.018085",\ + "0.915670, 1.172855, 1.440628, 1.892513, 2.797166",\ + "0.950063, 1.207248, 1.475021, 1.926907, 2.831562",\ + "1.021300, 1.278486, 1.546258, 1.998143, 2.902794",\ + "1.275467, 1.532652, 1.800424, 2.252309, 3.156961",\ + "2.200070, 2.457256, 2.725030, 3.176924, 4.081594",\ + "1.241554, 1.536923, 1.792333, 2.241791, 3.142622",\ + "1.275947, 1.571316, 1.826726, 2.276185, 3.177018",\ + "1.347184, 1.642554, 1.897963, 2.347420, 3.248250",\ + "1.601351, 1.896721, 2.152130, 2.601587, 3.502417",\ + "2.525954, 2.821324, 3.076735, 3.526202, 4.427050"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.034112, 0.034112, 0.034113, 0.034114, 0.034116",\ + "0.083750, 0.083751, 0.083753, 0.083759, 0.083772",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692760, 0.692762, 0.692773, 0.692804, 0.692866",\ + "2.465102, 2.465102, 2.465164, 2.465378, 2.465806",\ + "0.034112, 0.034112, 0.034113, 0.034114, 0.034116",\ + "0.083750, 0.083751, 0.083753, 0.083759, 0.083772",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692760, 0.692762, 0.692774, 0.692804, 0.692866",\ + "2.465102, 2.465102, 2.465165, 2.465378, 2.465806",\ + "0.034112, 0.034112, 0.034113, 0.034114, 0.034116",\ + "0.083750, 0.083751, 0.083753, 0.083759, 0.083772",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692760, 0.692762, 0.692774, 0.692804, 0.692866",\ + "2.465102, 2.465102, 2.465165, 2.465378, 2.465806",\ + "0.034112, 0.034112, 0.034113, 0.034114, 0.034116",\ + "0.083750, 0.083751, 0.083753, 0.083759, 0.083772",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692760, 0.692762, 0.692774, 0.692804, 0.692866",\ + "2.465102, 2.465102, 2.465165, 2.465378, 2.465806",\ + "0.034112, 0.034112, 0.034113, 0.034114, 0.034116",\ + "0.083750, 0.083751, 0.083753, 0.083759, 0.083772",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692760, 0.692762, 0.692774, 0.692805, 0.692866",\ + "2.465102, 2.465102, 2.465167, 2.465379, 2.465806"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.721587, 0.962540, 1.232811, 1.686073, 2.592597",\ + "0.763339, 1.004291, 1.274563, 1.727824, 2.634348",\ + "0.823269, 1.064222, 1.334493, 1.787755, 2.694278",\ + "0.991386, 1.232338, 1.502609, 1.955871, 2.862394",\ + "1.573411, 1.814363, 2.084642, 2.537936, 3.444525",\ + "0.808993, 1.050089, 1.320327, 1.772787, 2.678531",\ + "0.850745, 1.091841, 1.362078, 1.814538, 2.720282",\ + "0.910675, 1.151771, 1.422008, 1.874469, 2.780212",\ + "1.078792, 1.319888, 1.590125, 2.042585, 2.948328",\ + "1.660817, 1.901912, 2.172157, 2.624650, 3.530459",\ + "0.889823, 1.139049, 1.408289, 1.860408, 2.765486",\ + "0.931575, 1.180800, 1.450040, 1.902159, 2.807237",\ + "0.991505, 1.240730, 1.509970, 1.962090, 2.867167",\ + "1.159622, 1.408847, 1.678087, 2.130206, 3.035283",\ + "1.741647, 1.990871, 2.260119, 2.712271, 3.617414",\ + "0.947466, 1.204651, 1.472426, 1.924321, 2.828995",\ + "0.989217, 1.246402, 1.514177, 1.966072, 2.870746",\ + "1.049147, 1.306333, 1.574107, 2.026003, 2.930676",\ + "1.217264, 1.474449, 1.742224, 2.194119, 3.098792",\ + "1.799289, 2.056473, 2.324256, 2.776184, 3.680923",\ + "1.273350, 1.568719, 1.824131, 2.273599, 3.174451",\ + "1.315101, 1.610470, 1.865882, 2.315350, 3.216202",\ + "1.375032, 1.670401, 1.925813, 2.375281, 3.276132",\ + "1.543148, 1.838517, 2.093929, 2.543397, 3.444248",\ + "2.125174, 2.420541, 2.675962, 3.125462, 4.026379"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.045877, 0.045876, 0.045872, 0.045863, 0.045844",\ + "0.079914, 0.079914, 0.079913, 0.079913, 0.079912",\ + "0.155804, 0.155804, 0.155801, 0.155793, 0.155779",\ + "0.431307, 0.431307, 0.431306, 0.431304, 0.431301",\ + "1.494119, 1.494119, 1.494121, 1.494127, 1.494137",\ + "0.045877, 0.045876, 0.045872, 0.045863, 0.045844",\ + "0.079914, 0.079914, 0.079913, 0.079913, 0.079912",\ + "0.155804, 0.155804, 0.155801, 0.155793, 0.155779",\ + "0.431307, 0.431307, 0.431306, 0.431304, 0.431301",\ + "1.494119, 1.494120, 1.494121, 1.494127, 1.494137",\ + "0.045877, 0.045876, 0.045872, 0.045863, 0.045844",\ + "0.079914, 0.079914, 0.079913, 0.079913, 0.079912",\ + "0.155804, 0.155804, 0.155801, 0.155793, 0.155779",\ + "0.431307, 0.431307, 0.431306, 0.431304, 0.431301",\ + "1.494119, 1.494120, 1.494121, 1.494127, 1.494137",\ + "0.045877, 0.045876, 0.045872, 0.045863, 0.045844",\ + "0.079914, 0.079914, 0.079913, 0.079913, 0.079912",\ + "0.155804, 0.155804, 0.155801, 0.155793, 0.155779",\ + "0.431307, 0.431307, 0.431306, 0.431304, 0.431301",\ + "1.494119, 1.494120, 1.494121, 1.494127, 1.494137",\ + "0.045877, 0.045876, 0.045872, 0.045863, 0.045844",\ + "0.079914, 0.079914, 0.079913, 0.079913, 0.079912",\ + "0.155804, 0.155803, 0.155801, 0.155793, 0.155779",\ + "0.431307, 0.431307, 0.431306, 0.431304, 0.431301",\ + "1.494119, 1.494120, 1.494121, 1.494127, 1.494137"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[8]_redg_2742*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[47]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.554088, 0.796303, 1.062117, 1.540354, 2.496829",\ + "0.588520, 0.830735, 1.096550, 1.574794, 2.531283",\ + "0.659515, 0.901730, 1.167548, 1.645811, 2.602338",\ + "0.913680, 1.155895, 1.421738, 1.900092, 2.856801",\ + "1.838864, 2.081077, 2.346923, 2.825343, 3.782184",\ + "0.641494, 0.883776, 1.149711, 1.627068, 2.582762",\ + "0.675925, 0.918208, 1.184143, 1.661508, 2.617217",\ + "0.746920, 0.989202, 1.255142, 1.732525, 2.688272",\ + "1.001085, 1.243367, 1.509332, 1.986806, 2.942735",\ + "1.926270, 2.168550, 2.434517, 2.912057, 3.868118",\ + "0.722307, 0.972564, 1.237674, 1.714689, 2.669717",\ + "0.756739, 1.006995, 1.272107, 1.749129, 2.704172",\ + "0.827734, 1.077990, 1.343105, 1.820146, 2.775227",\ + "1.081899, 1.332155, 1.597295, 2.074427, 3.029690",\ + "2.007083, 2.257337, 2.522481, 2.999678, 3.955073",\ + "0.781255, 1.037917, 1.301816, 1.778602, 2.733226",\ + "0.815687, 1.072348, 1.336248, 1.813042, 2.767681",\ + "0.886682, 1.143343, 1.407246, 1.884059, 2.838736",\ + "1.140847, 1.397507, 1.661436, 2.138340, 3.093199",\ + "2.066033, 2.322690, 2.586622, 3.063591, 4.018582",\ + "1.116786, 1.399065, 1.653774, 2.127983, 3.078682",\ + "1.151218, 1.433496, 1.688207, 2.162423, 3.113137",\ + "1.222213, 1.504490, 1.759205, 2.233440, 3.184192",\ + "1.476379, 1.758654, 2.013396, 2.487721, 3.438655",\ + "2.401570, 2.683832, 2.938582, 3.412973, 4.364038"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.034240, 0.034243, 0.034261, 0.034303, 0.034388",\ + "0.083583, 0.083591, 0.083624, 0.083701, 0.083855",\ + "0.208066, 0.208072, 0.208099, 0.208159, 0.208278",\ + "0.693300, 0.693300, 0.693300, 0.693300, 0.693300",\ + "2.470761, 2.470782, 2.471502, 2.473964, 2.478889",\ + "0.034240, 0.034244, 0.034261, 0.034303, 0.034388",\ + "0.083583, 0.083591, 0.083625, 0.083701, 0.083855",\ + "0.208066, 0.208072, 0.208099, 0.208159, 0.208278",\ + "0.693300, 0.693300, 0.693300, 0.693300, 0.693300",\ + "2.470761, 2.470782, 2.471509, 2.473964, 2.478889",\ + "0.034240, 0.034244, 0.034261, 0.034303, 0.034388",\ + "0.083583, 0.083591, 0.083625, 0.083701, 0.083855",\ + "0.208066, 0.208073, 0.208099, 0.208159, 0.208278",\ + "0.693300, 0.693300, 0.693300, 0.693300, 0.693300",\ + "2.470761, 2.470782, 2.471509, 2.473964, 2.478889",\ + "0.034240, 0.034244, 0.034261, 0.034303, 0.034388",\ + "0.083583, 0.083591, 0.083625, 0.083701, 0.083855",\ + "0.208066, 0.208073, 0.208099, 0.208159, 0.208278",\ + "0.693300, 0.693300, 0.693300, 0.693300, 0.693300",\ + "2.470764, 2.470782, 2.471510, 2.473964, 2.478889",\ + "0.034240, 0.034245, 0.034262, 0.034304, 0.034388",\ + "0.083583, 0.083594, 0.083625, 0.083701, 0.083855",\ + "0.208066, 0.208075, 0.208100, 0.208159, 0.208278",\ + "0.693300, 0.693300, 0.693300, 0.693300, 0.693300",\ + "2.470774, 2.470782, 2.471535, 2.473974, 2.478889"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.581124, 0.823340, 1.089156, 1.567400, 2.523887",\ + "0.623421, 0.865636, 1.131410, 1.609509, 2.565706",\ + "0.683983, 0.926199, 1.191909, 1.669792, 2.625559",\ + "0.852914, 1.095129, 1.360763, 1.838384, 2.793625",\ + "1.436165, 1.678380, 1.944001, 2.421576, 3.376727",\ + "0.668530, 0.910813, 1.176750, 1.654113, 2.609821",\ + "0.710826, 0.953109, 1.219003, 1.696222, 2.651640",\ + "0.771389, 1.013672, 1.279502, 1.756506, 2.711493",\ + "0.940320, 1.182602, 1.448355, 1.925098, 2.879559",\ + "1.523571, 1.765853, 2.031593, 2.508290, 3.462660",\ + "0.749343, 0.999600, 1.264713, 1.741735, 2.696776",\ + "0.791640, 1.041896, 1.306967, 1.783844, 2.738595",\ + "0.852202, 1.102459, 1.367465, 1.844127, 2.798448",\ + "1.021133, 1.271390, 1.536319, 2.012719, 2.966514",\ + "1.604384, 1.854641, 2.119556, 2.595911, 3.549615",\ + "0.808291, 1.064953, 1.328854, 1.805647, 2.760285",\ + "0.850588, 1.107249, 1.371108, 1.847756, 2.802104",\ + "0.911150, 1.167812, 1.431607, 1.908040, 2.861957",\ + "1.080081, 1.336743, 1.600460, 2.076632, 3.030023",\ + "1.663332, 1.919994, 2.183697, 2.659824, 3.613124",\ + "1.143822, 1.426101, 1.680813, 2.155028, 3.105741",\ + "1.186118, 1.468397, 1.723065, 2.197137, 3.147560",\ + "1.246681, 1.528960, 1.783561, 2.257420, 3.207412",\ + "1.415612, 1.697891, 1.952412, 2.426010, 3.375479",\ + "1.998863, 2.281142, 2.535649, 3.009202, 3.958580"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.045859, 0.045859, 0.045870, 0.045908, 0.045983",\ + "0.079961, 0.079962, 0.079962, 0.079962, 0.079962",\ + "0.155685, 0.155686, 0.155686, 0.155686, 0.155686",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498064, 1.498064, 1.498064, 1.498064, 1.498064",\ + "0.045859, 0.045859, 0.045870, 0.045908, 0.045983",\ + "0.079961, 0.079962, 0.079962, 0.079962, 0.079962",\ + "0.155685, 0.155686, 0.155686, 0.155686, 0.155686",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498064, 1.498064, 1.498064, 1.498064, 1.498064",\ + "0.045859, 0.045859, 0.045870, 0.045908, 0.045983",\ + "0.079961, 0.079962, 0.079962, 0.079962, 0.079962",\ + "0.155685, 0.155686, 0.155686, 0.155686, 0.155686",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498064, 1.498064, 1.498064, 1.498064, 1.498064",\ + "0.045859, 0.045859, 0.045870, 0.045908, 0.045983",\ + "0.079961, 0.079962, 0.079962, 0.079962, 0.079962",\ + "0.155685, 0.155686, 0.155686, 0.155686, 0.155686",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498064, 1.498064, 1.498064, 1.498064, 1.498064",\ + "0.045859, 0.045859, 0.045871, 0.045908, 0.045983",\ + "0.079962, 0.079962, 0.079962, 0.079962, 0.079962",\ + "0.155685, 0.155686, 0.155686, 0.155686, 0.155686",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498064, 1.498064, 1.498064, 1.498064, 1.498064"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[8]_redg_2612*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[17]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.306542, 0.508788, 0.717853, 1.042526, 1.663915",\ + "0.340106, 0.542413, 0.751464, 1.076125, 1.697497",\ + "0.411112, 0.613496, 0.822458, 1.147079, 1.768433",\ + "0.665955, 0.868524, 1.077364, 1.401917, 2.023216",\ + "1.591125, 1.794899, 2.003187, 2.327733, 2.949505",\ + "0.395283, 0.596107, 0.805134, 1.129831, 1.751269",\ + "0.428854, 0.629732, 0.838745, 1.163429, 1.784850",\ + "0.499862, 0.700815, 0.909738, 1.234384, 1.855787",\ + "0.754705, 0.955843, 1.164644, 1.489222, 2.110569",\ + "1.679862, 1.882218, 2.090468, 2.415038, 3.036858",\ + "0.484964, 0.676444, 0.885161, 1.209860, 1.831300",\ + "0.518558, 0.710069, 0.918772, 1.243458, 1.864882",\ + "0.589569, 0.781152, 0.989765, 1.314412, 1.935818",\ + "0.844412, 1.036181, 1.244671, 1.569251, 2.190600",\ + "1.769534, 1.962556, 2.170495, 2.495067, 3.116889",\ + "0.543833, 0.734313, 0.942926, 1.267362, 1.888460",\ + "0.577463, 0.767939, 0.976537, 1.300961, 1.922042",\ + "0.648577, 0.839021, 1.047530, 1.371915, 1.992978",\ + "0.903624, 1.094050, 1.302436, 1.626753, 2.247760",\ + "1.830206, 2.020424, 2.228258, 2.552570, 3.174051",\ + "0.846614, 1.039923, 1.246594, 1.570597, 2.190856",\ + "0.880244, 1.073548, 1.280205, 1.604196, 2.224438",\ + "0.951354, 1.144630, 1.351198, 1.675150, 2.295374",\ + "1.206399, 1.399658, 1.606104, 1.929988, 2.550156",\ + "2.132956, 2.326026, 2.531926, 2.855805, 3.476448"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.023786, 0.023786, 0.023786, 0.023810, 0.023868",\ + "0.069294, 0.069294, 0.069294, 0.069316, 0.069369",\ + "0.199985, 0.199985, 0.199985, 0.199985, 0.199985",\ + "0.685151, 0.685311, 0.685321, 0.685321, 0.685321",\ + "2.446158, 2.446158, 2.446667, 2.447885, 2.450424",\ + "0.023786, 0.023786, 0.023786, 0.023810, 0.023868",\ + "0.069294, 0.069294, 0.069294, 0.069316, 0.069369",\ + "0.199985, 0.199985, 0.199985, 0.199985, 0.199985",\ + "0.685156, 0.685311, 0.685321, 0.685321, 0.685321",\ + "2.446158, 2.446158, 2.446667, 2.447885, 2.450424",\ + "0.023786, 0.023786, 0.023786, 0.023810, 0.023868",\ + "0.069294, 0.069294, 0.069294, 0.069316, 0.069369",\ + "0.199985, 0.199985, 0.199985, 0.199985, 0.199985",\ + "0.685169, 0.685311, 0.685321, 0.685321, 0.685321",\ + "2.446158, 2.446158, 2.446667, 2.447885, 2.450424",\ + "0.023786, 0.023786, 0.023786, 0.023810, 0.023869",\ + "0.069294, 0.069294, 0.069294, 0.069316, 0.069369",\ + "0.199985, 0.199985, 0.199985, 0.199985, 0.199985",\ + "0.685155, 0.685312, 0.685321, 0.685321, 0.685321",\ + "2.446158, 2.446158, 2.446668, 2.447888, 2.450430",\ + "0.023786, 0.023786, 0.023786, 0.023810, 0.023869",\ + "0.069294, 0.069294, 0.069294, 0.069316, 0.069370",\ + "0.199985, 0.199985, 0.199985, 0.199985, 0.199985",\ + "0.685173, 0.685316, 0.685321, 0.685321, 0.685321",\ + "2.446158, 2.446158, 2.446668, 2.447891, 2.450438"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.300762, 0.504583, 0.713270, 1.038101, 1.660218",\ + "0.333089, 0.537036, 0.745749, 1.070675, 1.693005",\ + "0.383451, 0.587349, 0.796071, 1.121057, 1.743526",\ + "0.544532, 0.748090, 0.956809, 1.281806, 1.904306",\ + "1.125564, 1.330456, 1.540080, 1.865115, 2.486899",\ + "0.389512, 0.591901, 0.800551, 1.125406, 1.747571",\ + "0.421839, 0.624354, 0.833030, 1.157980, 1.780358",\ + "0.472201, 0.674668, 0.883352, 1.208362, 1.830879",\ + "0.633282, 0.835409, 1.044090, 1.369112, 1.991659",\ + "1.214288, 1.417775, 1.627361, 1.952420, 2.574253",\ + "0.479218, 0.672239, 0.880578, 1.205435, 1.827603",\ + "0.511548, 0.704692, 0.913057, 1.238009, 1.860390",\ + "0.561908, 0.755005, 0.963379, 1.288391, 1.910911",\ + "0.722989, 0.915746, 1.124117, 1.449140, 2.071691",\ + "1.303923, 1.498112, 1.707387, 2.032449, 2.654284",\ + "0.539760, 0.730108, 0.938342, 1.262939, 1.884765",\ + "0.572206, 0.762561, 0.970821, 1.295513, 1.917552",\ + "0.622521, 0.812874, 1.021143, 1.345895, 1.968074",\ + "0.783248, 0.973615, 1.181881, 1.506644, 2.128853",\ + "1.365347, 1.555982, 1.765154, 2.089952, 2.711445",\ + "0.842526, 1.035714, 1.242010, 1.566174, 2.187163",\ + "0.874973, 1.068167, 1.274489, 1.598749, 2.219951",\ + "0.925287, 1.118480, 1.324811, 1.649131, 2.270473",\ + "1.086016, 1.279222, 1.485549, 1.809880, 2.431253",\ + "1.668147, 1.861596, 2.068822, 2.393188, 3.013843"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.030099, 0.030091, 0.030091, 0.030077, 0.030045",\ + "0.059380, 0.059246, 0.059238, 0.059238, 0.059238",\ + "0.131641, 0.131636, 0.131630, 0.131627, 0.131627",\ + "0.418133, 0.418133, 0.418133, 0.418133, 0.418133",\ + "1.484352, 1.482541, 1.482428, 1.482428, 1.482428",\ + "0.030099, 0.030091, 0.030091, 0.030077, 0.030045",\ + "0.059376, 0.059246, 0.059238, 0.059238, 0.059238",\ + "0.131641, 0.131636, 0.131630, 0.131627, 0.131627",\ + "0.418133, 0.418133, 0.418133, 0.418133, 0.418133",\ + "1.484298, 1.482541, 1.482428, 1.482428, 1.482428",\ + "0.030098, 0.030091, 0.030091, 0.030077, 0.030045",\ + "0.059366, 0.059246, 0.059238, 0.059238, 0.059238",\ + "0.131641, 0.131636, 0.131630, 0.131627, 0.131627",\ + "0.418133, 0.418133, 0.418133, 0.418133, 0.418133",\ + "1.484152, 1.482541, 1.482428, 1.482428, 1.482428",\ + "0.030099, 0.030091, 0.030091, 0.030077, 0.030045",\ + "0.059378, 0.059246, 0.059238, 0.059238, 0.059238",\ + "0.131641, 0.131636, 0.131630, 0.131627, 0.131627",\ + "0.418133, 0.418133, 0.418133, 0.418133, 0.418133",\ + "1.484315, 1.482534, 1.482428, 1.482428, 1.482428",\ + "0.030098, 0.030091, 0.030091, 0.030077, 0.030045",\ + "0.059362, 0.059242, 0.059238, 0.059238, 0.059238",\ + "0.131641, 0.131636, 0.131630, 0.131627, 0.131627",\ + "0.418133, 0.418133, 0.418133, 0.418133, 0.418133",\ + "1.484105, 1.482485, 1.482428, 1.482428, 1.482428"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[8]_redg_min_2559*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[18]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.534853, 0.754941, 0.932292, 1.220792, 1.781149",\ + "0.576549, 0.796638, 0.973989, 1.262489, 1.822845",\ + "0.652730, 0.872819, 1.050170, 1.338670, 1.899026",\ + "0.908126, 1.128215, 1.305566, 1.594066, 2.154422",\ + "1.832504, 2.052592, 2.229943, 2.518443, 3.078799",\ + "0.623250, 0.842260, 1.019573, 1.308098, 1.868502",\ + "0.664946, 0.883956, 1.061270, 1.349794, 1.910198",\ + "0.741127, 0.960137, 1.137451, 1.425975, 1.986380",\ + "0.996523, 1.215533, 1.392847, 1.681371, 2.241775",\ + "1.920900, 2.139910, 2.317224, 2.605748, 3.166152",\ + "0.712601, 0.922592, 1.099600, 1.388126, 1.948534",\ + "0.754297, 0.964289, 1.141297, 1.429822, 1.990230",\ + "0.830478, 1.040470, 1.217478, 1.506004, 2.066411",\ + "1.085874, 1.295865, 1.472873, 1.761399, 2.321807",\ + "2.010251, 2.220243, 2.397251, 2.685777, 3.246184",\ + "0.776250, 0.980408, 1.157292, 1.445555, 2.005549",\ + "0.817947, 1.022105, 1.198989, 1.487252, 2.047245",\ + "0.894128, 1.098286, 1.275170, 1.563433, 2.123426",\ + "1.149523, 1.353682, 1.530566, 1.818829, 2.378822",\ + "2.073901, 2.278059, 2.454943, 2.743206, 3.303199",\ + "1.107332, 1.285624, 1.460948, 1.748727, 2.307770",\ + "1.149029, 1.327321, 1.502644, 1.790423, 2.349466",\ + "1.225210, 1.403502, 1.578825, 1.866605, 2.425647",\ + "1.480606, 1.658898, 1.834221, 2.122000, 2.681043",\ + "2.404983, 2.583275, 2.758598, 3.046378, 3.605420"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070068, 0.070068",\ + "0.199415, 0.199415, 0.199415, 0.199415, 0.199415",\ + "0.685787, 0.685787, 0.685787, 0.685787, 0.685787",\ + "2.455201, 2.455201, 2.455201, 2.455201, 2.455201",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070068, 0.070068",\ + "0.199415, 0.199415, 0.199415, 0.199415, 0.199415",\ + "0.685787, 0.685787, 0.685787, 0.685787, 0.685787",\ + "2.455201, 2.455201, 2.455201, 2.455201, 2.455201",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070068, 0.070068",\ + "0.199415, 0.199415, 0.199415, 0.199415, 0.199415",\ + "0.685787, 0.685787, 0.685787, 0.685787, 0.685787",\ + "2.455201, 2.455201, 2.455201, 2.455201, 2.455201",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070068, 0.070068",\ + "0.199415, 0.199415, 0.199415, 0.199415, 0.199415",\ + "0.685787, 0.685787, 0.685787, 0.685787, 0.685787",\ + "2.455201, 2.455201, 2.455201, 2.455201, 2.455201",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070068, 0.070068",\ + "0.199415, 0.199415, 0.199415, 0.199415, 0.199415",\ + "0.685787, 0.685787, 0.685787, 0.685787, 0.685787",\ + "2.455201, 2.455201, 2.455201, 2.455201, 2.455201"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.555098, 0.775186, 0.952537, 1.241037, 1.801394",\ + "0.587348, 0.807436, 0.984787, 1.273287, 1.833643",\ + "0.637660, 0.857748, 1.035099, 1.323599, 1.883955",\ + "0.798324, 1.018412, 1.195763, 1.484263, 2.044619",\ + "1.379457, 1.599546, 1.776897, 2.065397, 2.625753",\ + "0.643495, 0.862505, 1.039818, 1.328343, 1.888747",\ + "0.675744, 0.894754, 1.072068, 1.360592, 1.920997",\ + "0.726057, 0.945067, 1.122380, 1.410905, 1.971309",\ + "0.886720, 1.105730, 1.283044, 1.571568, 2.131973",\ + "1.467854, 1.686864, 1.864178, 2.152702, 2.713106",\ + "0.732846, 0.942837, 1.119845, 1.408371, 1.968779",\ + "0.765095, 0.975087, 1.152095, 1.440621, 2.001028",\ + "0.815408, 1.025399, 1.202407, 1.490933, 2.051341",\ + "0.976071, 1.186063, 1.363071, 1.651597, 2.212004",\ + "1.557205, 1.767197, 1.944205, 2.232730, 2.793138",\ + "0.796495, 1.000653, 1.177537, 1.465801, 2.025794",\ + "0.828745, 1.032903, 1.209787, 1.498050, 2.058043",\ + "0.879057, 1.083215, 1.260099, 1.548362, 2.108356",\ + "1.039721, 1.243879, 1.420763, 1.709026, 2.269019",\ + "1.620855, 1.825013, 2.001897, 2.290160, 2.850153",\ + "1.127577, 1.305869, 1.481193, 1.768972, 2.328015",\ + "1.159827, 1.338119, 1.513443, 1.801222, 2.360265",\ + "1.210139, 1.388431, 1.563755, 1.851534, 2.410577",\ + "1.370803, 1.549095, 1.724418, 2.012197, 2.571240",\ + "1.951937, 2.130229, 2.305552, 2.593331, 3.152374"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.029705, 0.029705, 0.029705, 0.029705, 0.029705",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131486, 0.131486, 0.131486, 0.131486, 0.131486",\ + "0.419471, 0.419471, 0.419471, 0.419471, 0.419471",\ + "1.482977, 1.482977, 1.482976, 1.482976, 1.482976",\ + "0.029705, 0.029705, 0.029705, 0.029705, 0.029705",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131486, 0.131486, 0.131486, 0.131486, 0.131486",\ + "0.419471, 0.419471, 0.419471, 0.419471, 0.419471",\ + "1.482977, 1.482977, 1.482976, 1.482976, 1.482976",\ + "0.029705, 0.029705, 0.029705, 0.029705, 0.029705",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131486, 0.131486, 0.131486, 0.131486, 0.131486",\ + "0.419471, 0.419471, 0.419471, 0.419471, 0.419471",\ + "1.482977, 1.482977, 1.482976, 1.482976, 1.482976",\ + "0.029705, 0.029705, 0.029705, 0.029705, 0.029705",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131486, 0.131486, 0.131486, 0.131486, 0.131486",\ + "0.419471, 0.419471, 0.419471, 0.419471, 0.419471",\ + "1.482977, 1.482977, 1.482976, 1.482976, 1.482976",\ + "0.029705, 0.029705, 0.029705, 0.029705, 0.029705",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131486, 0.131486, 0.131486, 0.131486, 0.131486",\ + "0.419471, 0.419471, 0.419471, 0.419471, 0.419471",\ + "1.482977, 1.482977, 1.482976, 1.482976, 1.482976"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[8]_redg_min_2577*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[23]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.256885, 0.492153, 0.681988, 0.987164, 1.577680",\ + "0.290472, 0.525767, 0.715632, 1.020810, 1.611303",\ + "0.361355, 0.596664, 0.786663, 1.091855, 1.682256",\ + "0.616370, 0.851426, 1.041598, 1.346846, 1.937220",\ + "1.541773, 1.775412, 1.968861, 2.274571, 2.863136",\ + "0.345363, 0.579471, 0.769269, 1.074469, 1.665033",\ + "0.378951, 0.613085, 0.802913, 1.108115, 1.698656",\ + "0.449834, 0.683983, 0.873944, 1.179160, 1.769609",\ + "0.704852, 0.938744, 1.128879, 1.434151, 2.024573",\ + "1.630270, 1.862731, 2.056142, 2.361876, 2.950490",\ + "0.434929, 0.659804, 0.849296, 1.154498, 1.745065",\ + "0.468520, 0.693418, 0.882940, 1.188143, 1.778688",\ + "0.539403, 0.764315, 0.953971, 1.259189, 1.849641",\ + "0.794431, 1.019077, 1.208906, 1.514180, 2.104605",\ + "1.719892, 1.943063, 2.136169, 2.441904, 3.030521",\ + "0.498770, 0.717639, 0.907017, 1.211964, 1.802153",\ + "0.532364, 0.751252, 0.940661, 1.245610, 1.835775",\ + "0.603247, 0.822149, 1.011693, 1.316654, 1.906729",\ + "0.858284, 1.076910, 1.266629, 1.571645, 2.161693",\ + "1.783785, 2.000890, 2.193899, 2.499368, 3.087604",\ + "0.836421, 1.022987, 1.210677, 1.515166, 2.104462",\ + "0.870034, 1.056600, 1.244321, 1.548812, 2.138084",\ + "0.940914, 1.127492, 1.315353, 1.619857, 2.209037",\ + "1.196012, 1.382245, 1.570289, 1.874848, 2.464001",\ + "2.121767, 2.306184, 2.497561, 2.802569, 3.389907"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.023821, 0.023821, 0.023821, 0.023833, 0.023862",\ + "0.069303, 0.069303, 0.069343, 0.069357, 0.069357",\ + "0.199561, 0.199561, 0.199561, 0.199561, 0.199561",\ + "0.684891, 0.684891, 0.685012, 0.685055, 0.685055",\ + "2.453468, 2.453468, 2.454037, 2.454505, 2.455152",\ + "0.023821, 0.023821, 0.023821, 0.023833, 0.023862",\ + "0.069303, 0.069303, 0.069343, 0.069357, 0.069357",\ + "0.199561, 0.199561, 0.199561, 0.199561, 0.199561",\ + "0.684891, 0.684891, 0.685012, 0.685055, 0.685055",\ + "2.453468, 2.453468, 2.454037, 2.454505, 2.455152",\ + "0.023821, 0.023821, 0.023821, 0.023833, 0.023862",\ + "0.069303, 0.069303, 0.069343, 0.069357, 0.069357",\ + "0.199561, 0.199561, 0.199561, 0.199561, 0.199561",\ + "0.684891, 0.684891, 0.685012, 0.685055, 0.685055",\ + "2.453468, 2.453468, 2.454037, 2.454505, 2.455152",\ + "0.023821, 0.023821, 0.023821, 0.023833, 0.023862",\ + "0.069303, 0.069303, 0.069343, 0.069357, 0.069357",\ + "0.199561, 0.199561, 0.199561, 0.199561, 0.199561",\ + "0.684891, 0.684891, 0.685012, 0.685055, 0.685055",\ + "2.453468, 2.453468, 2.454039, 2.454505, 2.455154",\ + "0.023821, 0.023821, 0.023821, 0.023833, 0.023862",\ + "0.069303, 0.069303, 0.069343, 0.069357, 0.069357",\ + "0.199561, 0.199561, 0.199561, 0.199561, 0.199561",\ + "0.684891, 0.684891, 0.685012, 0.685055, 0.685055",\ + "2.453468, 2.453468, 2.454039, 2.454506, 2.455156"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.251684, 0.487150, 0.676755, 0.981685, 1.571796",\ + "0.284092, 0.519474, 0.709133, 1.014097, 1.604246",\ + "0.334486, 0.569802, 0.759438, 1.064423, 1.654643",\ + "0.495295, 0.730692, 0.920083, 1.225063, 1.815495",\ + "1.076466, 1.311284, 1.500832, 1.805703, 2.395659",\ + "0.340147, 0.574468, 0.764036, 1.068990, 1.659150",\ + "0.372555, 0.606792, 0.796414, 1.101402, 1.691600",\ + "0.422950, 0.657120, 0.846719, 1.151728, 1.741997",\ + "0.583764, 0.818010, 1.007364, 1.312368, 1.902848",\ + "1.164940, 1.398602, 1.588113, 1.893008, 2.483012",\ + "0.429671, 0.654801, 0.844063, 1.149019, 1.739182",\ + "0.462080, 0.687125, 0.876441, 1.181431, 1.771631",\ + "0.512476, 0.737453, 0.926746, 1.231757, 1.822028",\ + "0.673307, 0.898343, 1.087391, 1.392396, 1.982880",\ + "1.254498, 1.478935, 1.668140, 1.973037, 2.563044",\ + "0.493473, 0.712635, 0.901784, 1.206484, 1.796268",\ + "0.525883, 0.744960, 0.934162, 1.238896, 1.828718",\ + "0.576281, 0.795287, 0.984467, 1.289223, 1.879116",\ + "0.737126, 0.956178, 1.145111, 1.449862, 2.039968",\ + "1.318331, 1.536764, 1.725861, 2.030502, 2.620130",\ + "0.830874, 1.017982, 1.205444, 1.509686, 2.098576",\ + "0.863289, 1.050307, 1.237822, 1.542099, 2.131026",\ + "0.913697, 1.100635, 1.288127, 1.592425, 2.181424",\ + "1.074636, 1.261533, 1.448771, 1.753065, 2.342276",\ + "1.655932, 1.842073, 2.029521, 2.333704, 2.922437"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.030092, 0.030092, 0.030092, 0.030170, 0.030363",\ + "0.059437, 0.059437, 0.059437, 0.059474, 0.059565",\ + "0.131608, 0.131608, 0.131661, 0.131712, 0.131790",\ + "0.417862, 0.417862, 0.417862, 0.417990, 0.418302",\ + "1.478309, 1.478309, 1.478309, 1.478309, 1.478309",\ + "0.030092, 0.030092, 0.030092, 0.030170, 0.030363",\ + "0.059437, 0.059437, 0.059437, 0.059474, 0.059565",\ + "0.131608, 0.131608, 0.131661, 0.131712, 0.131790",\ + "0.417862, 0.417862, 0.417862, 0.417990, 0.418302",\ + "1.478309, 1.478309, 1.478309, 1.478309, 1.478309",\ + "0.030092, 0.030092, 0.030092, 0.030170, 0.030363",\ + "0.059437, 0.059437, 0.059437, 0.059474, 0.059565",\ + "0.131608, 0.131608, 0.131661, 0.131712, 0.131790",\ + "0.417862, 0.417862, 0.417862, 0.417990, 0.418302",\ + "1.478309, 1.478309, 1.478309, 1.478309, 1.478309",\ + "0.030092, 0.030092, 0.030092, 0.030170, 0.030363",\ + "0.059437, 0.059437, 0.059437, 0.059474, 0.059565",\ + "0.131608, 0.131608, 0.131661, 0.131712, 0.131790",\ + "0.417862, 0.417862, 0.417862, 0.417990, 0.418303",\ + "1.478309, 1.478309, 1.478309, 1.478309, 1.478309",\ + "0.030092, 0.030092, 0.030092, 0.030171, 0.030364",\ + "0.059437, 0.059437, 0.059437, 0.059474, 0.059565",\ + "0.131608, 0.131608, 0.131661, 0.131712, 0.131790",\ + "0.417862, 0.417862, 0.417862, 0.417990, 0.418303",\ + "1.478309, 1.478309, 1.478309, 1.478309, 1.478309"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[8]_redg_min_2320*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[24]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.514526, 0.752428, 0.939979, 1.239804, 1.819405",\ + "0.556223, 0.794124, 0.981676, 1.281500, 1.861101",\ + "0.632404, 0.870306, 1.057857, 1.357682, 1.937282",\ + "0.887800, 1.125701, 1.313253, 1.613077, 2.192678",\ + "1.812177, 2.050079, 2.237630, 2.537455, 3.117055",\ + "0.602829, 0.839746, 1.027260, 1.327109, 1.906758",\ + "0.644526, 0.881442, 1.068957, 1.368805, 1.948454",\ + "0.720707, 0.957623, 1.145138, 1.444987, 2.024636",\ + "0.976103, 1.213019, 1.400534, 1.700382, 2.280031",\ + "1.900480, 2.137396, 2.324911, 2.624760, 3.204408",\ + "0.692380, 0.920074, 1.107287, 1.407137, 1.986790",\ + "0.734076, 0.961771, 1.148984, 1.448834, 2.028486",\ + "0.810257, 1.037952, 1.225165, 1.525015, 2.104667",\ + "1.065653, 1.293347, 1.480561, 1.780411, 2.360063",\ + "1.990030, 2.217725, 2.404938, 2.704788, 3.284440",\ + "0.756421, 0.977914, 1.165004, 1.464591, 2.043853",\ + "0.798118, 1.019611, 1.206700, 1.506287, 2.085550",\ + "0.874299, 1.095792, 1.282882, 1.582469, 2.161731",\ + "1.129694, 1.351188, 1.538277, 1.837864, 2.417127",\ + "2.054072, 2.275565, 2.462655, 2.762241, 3.341504",\ + "1.095322, 1.283284, 1.468662, 1.767782, 2.346133",\ + "1.137018, 1.324980, 1.510358, 1.809478, 2.387829",\ + "1.213199, 1.401161, 1.586540, 1.885659, 2.464011",\ + "1.468595, 1.656557, 1.841935, 2.141055, 2.719406",\ + "2.392972, 2.580935, 2.766313, 3.065432, 3.643783"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070068, 0.070068",\ + "0.199415, 0.199415, 0.199415, 0.199415, 0.199415",\ + "0.685787, 0.685787, 0.685787, 0.685787, 0.685786",\ + "2.455201, 2.455201, 2.455201, 2.455201, 2.455201",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070068, 0.070068",\ + "0.199415, 0.199415, 0.199415, 0.199415, 0.199415",\ + "0.685787, 0.685787, 0.685787, 0.685787, 0.685786",\ + "2.455201, 2.455201, 2.455201, 2.455201, 2.455201",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070068, 0.070068",\ + "0.199415, 0.199415, 0.199415, 0.199415, 0.199415",\ + "0.685787, 0.685787, 0.685787, 0.685787, 0.685786",\ + "2.455201, 2.455201, 2.455201, 2.455201, 2.455201",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070068, 0.070068",\ + "0.199415, 0.199415, 0.199415, 0.199415, 0.199415",\ + "0.685787, 0.685787, 0.685787, 0.685787, 0.685786",\ + "2.455201, 2.455201, 2.455201, 2.455201, 2.455201",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070068, 0.070068",\ + "0.199415, 0.199415, 0.199415, 0.199415, 0.199415",\ + "0.685787, 0.685787, 0.685787, 0.685787, 0.685786",\ + "2.455201, 2.455201, 2.455201, 2.455201, 2.455201"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.534772, 0.772673, 0.960224, 1.260049, 1.839650",\ + "0.567021, 0.804923, 0.992474, 1.292299, 1.871899",\ + "0.617333, 0.855235, 1.042786, 1.342611, 1.922212",\ + "0.777997, 1.015898, 1.203450, 1.503274, 2.082875",\ + "1.359131, 1.597032, 1.784584, 2.084409, 2.664009",\ + "0.623075, 0.859991, 1.047505, 1.347354, 1.927003",\ + "0.655324, 0.892240, 1.079755, 1.379604, 1.959253",\ + "0.705636, 0.942553, 1.130067, 1.429916, 2.009565",\ + "0.866300, 1.103216, 1.290731, 1.590580, 2.170229",\ + "1.447434, 1.684350, 1.871865, 2.171714, 2.751363",\ + "0.712625, 0.940319, 1.127532, 1.427382, 2.007035",\ + "0.744874, 0.972569, 1.159782, 1.459632, 2.039284",\ + "0.795187, 1.022881, 1.210094, 1.509944, 2.089597",\ + "0.955850, 1.183545, 1.370758, 1.670608, 2.250260",\ + "1.536984, 1.764679, 1.951892, 2.251742, 2.831394",\ + "0.776666, 0.998159, 1.185249, 1.484836, 2.064098",\ + "0.808916, 1.030409, 1.217499, 1.517086, 2.096348",\ + "0.859228, 1.080721, 1.267811, 1.567398, 2.146660",\ + "1.019892, 1.241385, 1.428475, 1.728061, 2.307324",\ + "1.601026, 1.822519, 2.009609, 2.309195, 2.888458",\ + "1.115567, 1.303529, 1.488907, 1.788027, 2.366378",\ + "1.147816, 1.335778, 1.521157, 1.820276, 2.398628",\ + "1.198129, 1.386091, 1.571469, 1.870589, 2.448940",\ + "1.358792, 1.546754, 1.732133, 2.031252, 2.609604",\ + "1.939926, 2.127888, 2.313267, 2.612386, 3.190738"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.029705, 0.029705, 0.029705, 0.029705, 0.029705",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131486, 0.131486, 0.131486, 0.131486, 0.131486",\ + "0.419471, 0.419471, 0.419471, 0.419471, 0.419471",\ + "1.482977, 1.482976, 1.482976, 1.482976, 1.482976",\ + "0.029705, 0.029705, 0.029705, 0.029705, 0.029705",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131486, 0.131486, 0.131486, 0.131486, 0.131486",\ + "0.419471, 0.419471, 0.419471, 0.419471, 0.419471",\ + "1.482977, 1.482976, 1.482976, 1.482976, 1.482976",\ + "0.029705, 0.029705, 0.029705, 0.029705, 0.029705",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131486, 0.131486, 0.131486, 0.131486, 0.131486",\ + "0.419471, 0.419471, 0.419471, 0.419471, 0.419471",\ + "1.482977, 1.482976, 1.482976, 1.482976, 1.482976",\ + "0.029705, 0.029705, 0.029705, 0.029705, 0.029705",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131486, 0.131486, 0.131486, 0.131486, 0.131486",\ + "0.419471, 0.419471, 0.419471, 0.419471, 0.419471",\ + "1.482977, 1.482976, 1.482976, 1.482976, 1.482976",\ + "0.029705, 0.029705, 0.029705, 0.029705, 0.029705",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131486, 0.131486, 0.131486, 0.131486, 0.131486",\ + "0.419471, 0.419471, 0.419471, 0.419471, 0.419471",\ + "1.482976, 1.482976, 1.482976, 1.482976, 1.482976"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[8]_redg_min_2351*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[26]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.430447, 0.665884, 0.855738, 1.160934, 1.751473",\ + "0.472143, 0.707581, 0.897435, 1.202631, 1.793169",\ + "0.548324, 0.783762, 0.973616, 1.278812, 1.869350",\ + "0.803720, 1.039157, 1.229011, 1.534208, 2.124746",\ + "1.728097, 1.963542, 2.153391, 2.458586, 3.049126",\ + "0.518928, 0.753203, 0.943019, 1.248240, 1.838826",\ + "0.560625, 0.794899, 0.984715, 1.289936, 1.880523",\ + "0.636806, 0.871080, 1.060897, 1.366117, 1.956704",\ + "0.892201, 1.126475, 1.316292, 1.621513, 2.212099",\ + "1.816579, 2.050861, 2.240672, 2.545891, 3.136479",\ + "0.608483, 0.833536, 1.023046, 1.328268, 1.918858",\ + "0.650179, 0.875232, 1.064742, 1.369964, 1.960554",\ + "0.726361, 0.951413, 1.140924, 1.446146, 2.036736",\ + "0.981756, 1.206808, 1.396319, 1.701541, 2.292131",\ + "1.906135, 2.131194, 2.320698, 2.625919, 3.216511",\ + "0.672303, 0.891371, 1.080767, 1.385734, 1.975946",\ + "0.713999, 0.933067, 1.122464, 1.427431, 2.017642",\ + "0.790181, 1.009248, 1.198645, 1.503612, 2.093823",\ + "1.045576, 1.264643, 1.454041, 1.759007, 2.349219",\ + "1.969955, 2.189029, 2.378420, 2.683385, 3.273599",\ + "1.009821, 1.196720, 1.384428, 1.688937, 2.278255",\ + "1.051517, 1.238416, 1.426124, 1.730633, 2.319951",\ + "1.127699, 1.314597, 1.502305, 1.806814, 2.396132",\ + "1.383094, 1.569992, 1.757701, 2.062210, 2.651528",\ + "2.307477, 2.494378, 2.682080, 2.986588, 3.575908"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070068, 0.070068",\ + "0.199414, 0.199414, 0.199414, 0.199415, 0.199419",\ + "0.685786, 0.685786, 0.685786, 0.685787, 0.685790",\ + "2.455200, 2.455200, 2.455201, 2.455201, 2.455201",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070068, 0.070068",\ + "0.199414, 0.199414, 0.199414, 0.199415, 0.199419",\ + "0.685786, 0.685786, 0.685786, 0.685787, 0.685790",\ + "2.455200, 2.455200, 2.455201, 2.455201, 2.455201",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070068, 0.070068",\ + "0.199414, 0.199414, 0.199414, 0.199415, 0.199419",\ + "0.685786, 0.685786, 0.685786, 0.685787, 0.685790",\ + "2.455200, 2.455200, 2.455201, 2.455201, 2.455201",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070068, 0.070068",\ + "0.199414, 0.199414, 0.199414, 0.199415, 0.199419",\ + "0.685786, 0.685786, 0.685786, 0.685787, 0.685790",\ + "2.455200, 2.455200, 2.455201, 2.455201, 2.455201",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070068, 0.070068",\ + "0.199414, 0.199414, 0.199414, 0.199415, 0.199419",\ + "0.685786, 0.685786, 0.685786, 0.685787, 0.685790",\ + "2.455200, 2.455200, 2.455201, 2.455201, 2.455201"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.450692, 0.686130, 0.875983, 1.181180, 1.771718",\ + "0.482941, 0.718379, 0.908233, 1.213429, 1.803968",\ + "0.533254, 0.768692, 0.958545, 1.263741, 1.854280",\ + "0.693917, 0.929356, 1.119209, 1.424405, 2.014944",\ + "1.275051, 1.510488, 1.700342, 2.005539, 2.596077",\ + "0.539173, 0.773448, 0.963264, 1.268485, 1.859071",\ + "0.571423, 0.805697, 0.995514, 1.300734, 1.891321",\ + "0.621735, 0.856010, 1.045826, 1.351047, 1.941633",\ + "0.782399, 1.016674, 1.206490, 1.511710, 2.102297",\ + "1.363533, 1.597806, 1.787623, 2.092844, 2.683430",\ + "0.628728, 0.853781, 1.043291, 1.348513, 1.939103",\ + "0.660978, 0.886030, 1.075541, 1.380763, 1.971353",\ + "0.711290, 0.936343, 1.125853, 1.431075, 2.021665",\ + "0.871954, 1.097007, 1.286517, 1.591739, 2.182329",\ + "1.453087, 1.678139, 1.867650, 2.172873, 2.763462",\ + "0.692548, 0.911616, 1.101013, 1.405979, 1.996191",\ + "0.724798, 0.943865, 1.133262, 1.438229, 2.028440",\ + "0.775110, 0.994178, 1.183574, 1.488541, 2.078753",\ + "0.935774, 1.154842, 1.344238, 1.649205, 2.239417",\ + "1.516907, 1.735974, 1.925371, 2.230339, 2.820550",\ + "1.030066, 1.216965, 1.404673, 1.709182, 2.298500",\ + "1.062316, 1.249214, 1.436922, 1.741432, 2.330750",\ + "1.112628, 1.299527, 1.487235, 1.791744, 2.381062",\ + "1.273292, 1.460191, 1.647898, 1.952407, 2.541725",\ + "1.854424, 2.041323, 2.229032, 2.533541, 3.122859"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.029705, 0.029705, 0.029705, 0.029705, 0.029706",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131485, 0.131485, 0.131485, 0.131486, 0.131486",\ + "0.419455, 0.419455, 0.419455, 0.419455, 0.419455",\ + "1.482976, 1.482976, 1.482976, 1.482977, 1.482979",\ + "0.029705, 0.029705, 0.029705, 0.029705, 0.029706",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131485, 0.131485, 0.131485, 0.131486, 0.131486",\ + "0.419455, 0.419455, 0.419455, 0.419455, 0.419455",\ + "1.482976, 1.482976, 1.482976, 1.482977, 1.482979",\ + "0.029705, 0.029705, 0.029705, 0.029705, 0.029706",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131485, 0.131485, 0.131485, 0.131486, 0.131486",\ + "0.419455, 0.419455, 0.419455, 0.419455, 0.419455",\ + "1.482976, 1.482976, 1.482976, 1.482977, 1.482979",\ + "0.029705, 0.029705, 0.029705, 0.029705, 0.029706",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131485, 0.131485, 0.131485, 0.131486, 0.131486",\ + "0.419455, 0.419455, 0.419455, 0.419455, 0.419455",\ + "1.482976, 1.482976, 1.482976, 1.482977, 1.482979",\ + "0.029705, 0.029705, 0.029705, 0.029705, 0.029706",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131485, 0.131485, 0.131485, 0.131486, 0.131486",\ + "0.419455, 0.419455, 0.419455, 0.419455, 0.419455",\ + "1.482976, 1.482976, 1.482976, 1.482977, 1.482979"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[8]_redg_min_2670*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[28]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.408175, 0.641513, 0.827140, 1.126924, 1.707803",\ + "0.449871, 0.683209, 0.868836, 1.168620, 1.749499",\ + "0.526051, 0.759389, 0.945016, 1.244800, 1.825679",\ + "0.781441, 1.014779, 1.200407, 1.500191, 2.081069",\ + "1.705890, 1.939226, 2.124851, 2.424636, 3.005520",\ + "0.496580, 0.728832, 0.914421, 1.214229, 1.795156",\ + "0.538276, 0.770527, 0.956117, 1.255925, 1.836852",\ + "0.614456, 0.846708, 1.032297, 1.332105, 1.913032",\ + "0.869846, 1.102098, 1.287688, 1.587496, 2.168422",\ + "1.794296, 2.026545, 2.212132, 2.511941, 3.092873",\ + "0.585662, 0.809167, 0.994448, 1.294258, 1.875188",\ + "0.627357, 0.850863, 1.036144, 1.335954, 1.916884",\ + "0.703538, 0.927043, 1.112324, 1.412134, 1.993064",\ + "0.958928, 1.182433, 1.367714, 1.667524, 2.248454",\ + "1.883377, 2.106880, 2.292159, 2.591970, 3.172904",\ + "0.648932, 0.866998, 1.052159, 1.351712, 1.932252",\ + "0.690627, 0.908694, 1.093855, 1.393408, 1.973947",\ + "0.766807, 0.984874, 1.170035, 1.469588, 2.050128",\ + "1.022198, 1.240264, 1.425425, 1.724978, 2.305518",\ + "1.946647, 2.164711, 2.349869, 2.649424, 3.229968",\ + "0.982958, 1.172329, 1.355818, 1.654905, 2.234531",\ + "1.024654, 1.214025, 1.397514, 1.696600, 2.276227",\ + "1.100834, 1.290205, 1.473694, 1.772781, 2.352407",\ + "1.356225, 1.545595, 1.729084, 2.028171, 2.607797",\ + "2.280672, 2.470042, 2.653529, 2.952617, 3.532248"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070075, 0.070075, 0.070075, 0.070075, 0.070076",\ + "0.199411, 0.199411, 0.199411, 0.199411, 0.199413",\ + "0.685859, 0.685859, 0.685859, 0.685862, 0.685867",\ + "2.455194, 2.455194, 2.455194, 2.455194, 2.455194",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070075, 0.070075, 0.070075, 0.070075, 0.070076",\ + "0.199411, 0.199411, 0.199411, 0.199411, 0.199413",\ + "0.685859, 0.685859, 0.685859, 0.685862, 0.685867",\ + "2.455194, 2.455194, 2.455194, 2.455194, 2.455194",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070075, 0.070075, 0.070075, 0.070075, 0.070076",\ + "0.199411, 0.199411, 0.199411, 0.199411, 0.199413",\ + "0.685859, 0.685859, 0.685859, 0.685862, 0.685867",\ + "2.455194, 2.455194, 2.455194, 2.455194, 2.455194",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070075, 0.070075, 0.070075, 0.070075, 0.070076",\ + "0.199411, 0.199411, 0.199411, 0.199411, 0.199413",\ + "0.685859, 0.685859, 0.685859, 0.685862, 0.685867",\ + "2.455194, 2.455194, 2.455194, 2.455194, 2.455194",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070075, 0.070075, 0.070075, 0.070075, 0.070076",\ + "0.199411, 0.199411, 0.199411, 0.199411, 0.199413",\ + "0.685859, 0.685859, 0.685859, 0.685862, 0.685867",\ + "2.455194, 2.455194, 2.455194, 2.455194, 2.455194"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.428422, 0.661761, 0.847388, 1.147172, 1.728051",\ + "0.460669, 0.694007, 0.879634, 1.179418, 1.760297",\ + "0.510985, 0.744323, 0.929950, 1.229734, 1.810613",\ + "0.671649, 0.904987, 1.090614, 1.390398, 1.971277",\ + "1.252766, 1.486104, 1.671732, 1.971516, 2.552394",\ + "0.516828, 0.749079, 0.934668, 1.234477, 1.815404",\ + "0.549074, 0.781326, 0.966915, 1.266723, 1.847650",\ + "0.599390, 0.831641, 1.017231, 1.317039, 1.897966",\ + "0.760054, 0.992305, 1.177894, 1.477703, 2.058630",\ + "1.341171, 1.573423, 1.759013, 2.058821, 2.639747",\ + "0.605909, 0.829414, 1.014695, 1.314505, 1.895436",\ + "0.638156, 0.861661, 1.046942, 1.346752, 1.927682",\ + "0.688472, 0.911977, 1.097257, 1.397068, 1.977998",\ + "0.849135, 1.072640, 1.257921, 1.557731, 2.138662",\ + "1.430253, 1.653758, 1.839040, 2.138849, 2.719779",\ + "0.669179, 0.887245, 1.072406, 1.371959, 1.952499",\ + "0.701426, 0.919492, 1.104653, 1.404206, 1.984746",\ + "0.751741, 0.969808, 1.154969, 1.454522, 2.035062",\ + "0.912405, 1.130471, 1.315632, 1.615185, 2.195725",\ + "1.493523, 1.711589, 1.896750, 2.196303, 2.776842",\ + "1.003206, 1.192577, 1.376065, 1.675152, 2.254779",\ + "1.035452, 1.224823, 1.408312, 1.707399, 2.287025",\ + "1.085768, 1.275139, 1.458628, 1.757715, 2.337341",\ + "1.246432, 1.435803, 1.619291, 1.918378, 2.498005",\ + "1.827550, 2.016920, 2.200410, 2.499496, 3.079122"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.029703, 0.029703, 0.029703, 0.029704, 0.029704",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131485, 0.131485, 0.131485, 0.131485, 0.131485",\ + "0.419470, 0.419470, 0.419470, 0.419470, 0.419470",\ + "1.483040, 1.483040, 1.483040, 1.483042, 1.483046",\ + "0.029703, 0.029703, 0.029703, 0.029704, 0.029704",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131485, 0.131485, 0.131485, 0.131485, 0.131485",\ + "0.419470, 0.419470, 0.419470, 0.419470, 0.419470",\ + "1.483040, 1.483040, 1.483040, 1.483042, 1.483046",\ + "0.029703, 0.029703, 0.029703, 0.029704, 0.029704",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131485, 0.131485, 0.131485, 0.131485, 0.131485",\ + "0.419470, 0.419470, 0.419470, 0.419470, 0.419470",\ + "1.483040, 1.483040, 1.483040, 1.483042, 1.483046",\ + "0.029703, 0.029703, 0.029703, 0.029704, 0.029704",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131485, 0.131485, 0.131485, 0.131485, 0.131485",\ + "0.419470, 0.419470, 0.419470, 0.419470, 0.419470",\ + "1.483040, 1.483040, 1.483040, 1.483042, 1.483046",\ + "0.029703, 0.029703, 0.029703, 0.029704, 0.029704",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131485, 0.131485, 0.131485, 0.131485, 0.131485",\ + "0.419470, 0.419470, 0.419470, 0.419470, 0.419470",\ + "1.483040, 1.483040, 1.483040, 1.483042, 1.483047"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[8]_redg_min*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[30]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.454515, 0.687556, 0.876637, 1.181062, 1.770586",\ + "0.496240, 0.729281, 0.918362, 1.222787, 1.812311",\ + "0.572297, 0.805339, 0.994419, 1.298844, 1.888368",\ + "0.827855, 1.060896, 1.249979, 1.554404, 2.143927",\ + "1.752113, 1.985154, 2.174236, 2.478661, 3.068184",\ + "0.542959, 0.774874, 0.963918, 1.268367, 1.857939",\ + "0.584684, 0.816599, 1.005643, 1.310092, 1.899664",\ + "0.660741, 0.892656, 1.081700, 1.386149, 1.975721",\ + "0.916299, 1.148213, 1.337260, 1.641709, 2.231281",\ + "1.840557, 2.072472, 2.261517, 2.565966, 3.155538",\ + "0.633029, 0.855201, 1.043945, 1.348395, 1.937971",\ + "0.674754, 0.896927, 1.085670, 1.390121, 1.979696",\ + "0.750812, 0.972984, 1.161727, 1.466178, 2.055753",\ + "1.006370, 1.228541, 1.417287, 1.721738, 2.311312",\ + "1.930628, 2.152800, 2.341543, 2.645994, 3.235569",\ + "0.697606, 0.913035, 1.101665, 1.405861, 1.995059",\ + "0.739331, 0.954761, 1.143391, 1.447586, 2.036784",\ + "0.815389, 1.030818, 1.219448, 1.523643, 2.112841",\ + "1.070947, 1.286375, 1.475007, 1.779203, 2.368400",\ + "1.995205, 2.210634, 2.399264, 2.703460, 3.292657",\ + "1.037719, 1.218357, 1.405324, 1.709062, 2.297368",\ + "1.079444, 1.260083, 1.447049, 1.750787, 2.339093",\ + "1.155501, 1.336140, 1.523106, 1.826844, 2.415150",\ + "1.411059, 1.591697, 1.778666, 2.082405, 2.670709",\ + "2.335317, 2.515956, 2.702923, 3.006661, 3.594966"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.025366, 0.025366, 0.025366, 0.025366, 0.025366",\ + "0.070222, 0.070222, 0.070222, 0.070222, 0.070222",\ + "0.199531, 0.199531, 0.199531, 0.199531, 0.199531",\ + "0.686584, 0.686584, 0.686584, 0.686584, 0.686584",\ + "2.452471, 2.452462, 2.452462, 2.452446, 2.452406",\ + "0.025366, 0.025366, 0.025366, 0.025366, 0.025366",\ + "0.070222, 0.070222, 0.070222, 0.070222, 0.070222",\ + "0.199531, 0.199531, 0.199531, 0.199531, 0.199531",\ + "0.686584, 0.686584, 0.686584, 0.686584, 0.686584",\ + "2.452471, 2.452462, 2.452462, 2.452446, 2.452406",\ + "0.025366, 0.025366, 0.025366, 0.025366, 0.025366",\ + "0.070222, 0.070222, 0.070222, 0.070222, 0.070222",\ + "0.199531, 0.199531, 0.199531, 0.199531, 0.199531",\ + "0.686584, 0.686584, 0.686584, 0.686584, 0.686584",\ + "2.452471, 2.452462, 2.452462, 2.452446, 2.452406",\ + "0.025366, 0.025366, 0.025366, 0.025366, 0.025366",\ + "0.070222, 0.070222, 0.070222, 0.070222, 0.070222",\ + "0.199531, 0.199531, 0.199531, 0.199531, 0.199531",\ + "0.686584, 0.686584, 0.686584, 0.686584, 0.686584",\ + "2.452470, 2.452462, 2.452462, 2.452446, 2.452406",\ + "0.025366, 0.025366, 0.025366, 0.025366, 0.025366",\ + "0.070222, 0.070222, 0.070222, 0.070222, 0.070222",\ + "0.199531, 0.199531, 0.199531, 0.199531, 0.199531",\ + "0.686584, 0.686584, 0.686584, 0.686584, 0.686584",\ + "2.452470, 2.452462, 2.452462, 2.452446, 2.452406"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.477114, 0.710155, 0.899236, 1.203661, 1.793185",\ + "0.509144, 0.742185, 0.931266, 1.235691, 1.825215",\ + "0.559532, 0.792574, 0.981654, 1.286079, 1.875603",\ + "0.720561, 0.953603, 1.142682, 1.447107, 2.036631",\ + "1.300536, 1.533577, 1.722657, 2.027082, 2.616606",\ + "0.565558, 0.797473, 0.986517, 1.290966, 1.880538",\ + "0.597588, 0.829503, 1.018547, 1.322996, 1.912568",\ + "0.647976, 0.879891, 1.068935, 1.373384, 1.962957",\ + "0.809005, 1.040920, 1.229963, 1.534412, 2.123985",\ + "1.388980, 1.620895, 1.809938, 2.114387, 2.703959",\ + "0.655628, 0.877800, 1.066544, 1.370995, 1.960570",\ + "0.687658, 0.909830, 1.098574, 1.403025, 1.992600",\ + "0.738047, 0.960219, 1.148962, 1.453413, 2.042988",\ + "0.899075, 1.121248, 1.309990, 1.614440, 2.204016",\ + "1.479050, 1.701223, 1.889965, 2.194416, 2.783991",\ + "0.720205, 0.935634, 1.124265, 1.428460, 2.017658",\ + "0.752235, 0.967664, 1.156295, 1.460490, 2.049688",\ + "0.802624, 1.018053, 1.206683, 1.510878, 2.100076",\ + "0.963652, 1.179082, 1.367711, 1.671906, 2.261104",\ + "1.543628, 1.759057, 1.947685, 2.251881, 2.841079",\ + "1.060318, 1.240956, 1.427923, 1.731662, 2.319967",\ + "1.092348, 1.272986, 1.459953, 1.763692, 2.351997",\ + "1.142736, 1.323375, 1.510341, 1.814080, 2.402385",\ + "1.303765, 1.484404, 1.671369, 1.975107, 2.563413",\ + "1.883740, 2.064379, 2.251344, 2.555082, 3.143388"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.029863, 0.029863, 0.029863, 0.029863, 0.029863",\ + "0.059265, 0.059264, 0.059264, 0.059264, 0.059262",\ + "0.131521, 0.131521, 0.131521, 0.131521, 0.131521",\ + "0.417786, 0.417783, 0.417783, 0.417777, 0.417763",\ + "1.484506, 1.484504, 1.484504, 1.484501, 1.484494",\ + "0.029863, 0.029863, 0.029863, 0.029863, 0.029863",\ + "0.059265, 0.059264, 0.059264, 0.059264, 0.059262",\ + "0.131521, 0.131521, 0.131521, 0.131521, 0.131521",\ + "0.417786, 0.417783, 0.417783, 0.417777, 0.417763",\ + "1.484506, 1.484504, 1.484504, 1.484501, 1.484494",\ + "0.029863, 0.029863, 0.029863, 0.029863, 0.029863",\ + "0.059265, 0.059264, 0.059264, 0.059264, 0.059262",\ + "0.131521, 0.131521, 0.131521, 0.131521, 0.131521",\ + "0.417785, 0.417783, 0.417783, 0.417777, 0.417763",\ + "1.484505, 1.484504, 1.484504, 1.484501, 1.484494",\ + "0.029863, 0.029863, 0.029863, 0.029863, 0.029863",\ + "0.059265, 0.059264, 0.059264, 0.059264, 0.059262",\ + "0.131521, 0.131521, 0.131521, 0.131521, 0.131521",\ + "0.417785, 0.417783, 0.417783, 0.417777, 0.417763",\ + "1.484505, 1.484504, 1.484504, 1.484501, 1.484494",\ + "0.029863, 0.029863, 0.029863, 0.029863, 0.029863",\ + "0.059265, 0.059264, 0.059264, 0.059264, 0.059262",\ + "0.131521, 0.131521, 0.131521, 0.131521, 0.131521",\ + "0.417785, 0.417783, 0.417783, 0.417777, 0.417763",\ + "1.484505, 1.484504, 1.484504, 1.484501, 1.484493"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[8]_redg_min_2361*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[36]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.425794, 0.659396, 0.844981, 1.144718, 1.725521",\ + "0.467517, 0.701119, 0.886704, 1.186441, 1.767244",\ + "0.543582, 0.777185, 0.962769, 1.262506, 1.843310",\ + "0.799075, 1.032669, 1.218262, 1.518000, 2.098799",\ + "1.723381, 1.956982, 2.142568, 2.442305, 3.023108",\ + "0.514202, 0.746714, 0.932262, 1.232023, 1.812875",\ + "0.555925, 0.788437, 0.973985, 1.273746, 1.854598",\ + "0.631990, 0.864504, 1.050050, 1.349811, 1.930663",\ + "0.887482, 1.119988, 1.305543, 1.605305, 2.186153",\ + "1.811789, 2.044301, 2.229849, 2.529610, 3.110461",\ + "0.603290, 0.827050, 1.012289, 1.312051, 1.892906",\ + "0.645013, 0.868772, 1.054012, 1.353774, 1.934629",\ + "0.721078, 0.944839, 1.130077, 1.429839, 2.010695",\ + "0.976570, 1.200323, 1.385570, 1.685334, 2.266185",\ + "1.900877, 2.124636, 2.309876, 2.609639, 3.190493",\ + "0.666566, 0.884881, 1.069999, 1.369505, 1.949970",\ + "0.708289, 0.926604, 1.111723, 1.411228, 1.991693",\ + "0.784354, 1.002670, 1.187788, 1.487293, 2.067758",\ + "1.039845, 1.258154, 1.443280, 1.742788, 2.323248",\ + "1.964153, 2.182467, 2.367587, 2.667093, 3.247556",\ + "1.000632, 1.190214, 1.373659, 1.672698, 2.252249",\ + "1.042355, 1.231937, 1.415382, 1.714421, 2.293972",\ + "1.118420, 1.308003, 1.491447, 1.790486, 2.370037",\ + "1.373908, 1.563487, 1.746940, 2.045980, 2.625527",\ + "2.298218, 2.487800, 2.671246, 2.970286, 3.549836"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.025354, 0.025353, 0.025353, 0.025353, 0.025353",\ + "0.070228, 0.070228, 0.070228, 0.070228, 0.070228",\ + "0.199490, 0.199485, 0.199485, 0.199485, 0.199485",\ + "0.686682, 0.686682, 0.686679, 0.686679, 0.686679",\ + "2.452544, 2.452522, 2.452521, 2.452511, 2.452485",\ + "0.025354, 0.025353, 0.025353, 0.025353, 0.025353",\ + "0.070228, 0.070228, 0.070228, 0.070228, 0.070228",\ + "0.199490, 0.199485, 0.199485, 0.199485, 0.199485",\ + "0.686682, 0.686682, 0.686679, 0.686679, 0.686679",\ + "2.452543, 2.452522, 2.452521, 2.452511, 2.452485",\ + "0.025354, 0.025353, 0.025353, 0.025353, 0.025353",\ + "0.070228, 0.070228, 0.070228, 0.070228, 0.070228",\ + "0.199489, 0.199485, 0.199485, 0.199485, 0.199485",\ + "0.686682, 0.686682, 0.686679, 0.686679, 0.686679",\ + "2.452541, 2.452522, 2.452521, 2.452511, 2.452485",\ + "0.025354, 0.025353, 0.025353, 0.025353, 0.025353",\ + "0.070228, 0.070228, 0.070228, 0.070228, 0.070228",\ + "0.199489, 0.199485, 0.199485, 0.199485, 0.199485",\ + "0.686682, 0.686682, 0.686679, 0.686679, 0.686679",\ + "2.452540, 2.452522, 2.452521, 2.452511, 2.452485",\ + "0.025353, 0.025353, 0.025353, 0.025353, 0.025353",\ + "0.070228, 0.070228, 0.070228, 0.070228, 0.070228",\ + "0.199487, 0.199485, 0.199485, 0.199485, 0.199485",\ + "0.686682, 0.686682, 0.686679, 0.686679, 0.686679",\ + "2.452530, 2.452522, 2.452521, 2.452511, 2.452485"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.448384, 0.681985, 0.867571, 1.167308, 1.748111",\ + "0.480409, 0.714010, 0.899596, 1.199333, 1.780136",\ + "0.530816, 0.764419, 0.950003, 1.249740, 1.830544",\ + "0.691874, 0.925480, 1.111061, 1.410797, 1.991603",\ + "1.271848, 1.505453, 1.691034, 1.990770, 2.571576",\ + "0.536792, 0.769304, 0.954852, 1.254613, 1.835465",\ + "0.568817, 0.801328, 0.986877, 1.286638, 1.867489",\ + "0.619224, 0.851737, 1.037284, 1.337045, 1.917897",\ + "0.780282, 1.012799, 1.198342, 1.498102, 2.078956",\ + "1.360255, 1.592772, 1.778315, 2.078075, 2.658929",\ + "0.625880, 0.849639, 1.034879, 1.334642, 1.915496",\ + "0.657905, 0.881663, 1.066904, 1.366667, 1.947521",\ + "0.708312, 0.932072, 1.117311, 1.417073, 1.997929",\ + "0.869371, 1.093134, 1.278369, 1.578131, 2.158988",\ + "1.449344, 1.673107, 1.858342, 2.158104, 2.738961",\ + "0.689156, 0.907470, 1.092590, 1.392096, 1.972560",\ + "0.721181, 0.939495, 1.124615, 1.424121, 2.004584",\ + "0.771588, 0.989904, 1.175022, 1.474527, 2.054992",\ + "0.932647, 1.150965, 1.336080, 1.635585, 2.216051",\ + "1.512620, 1.730939, 1.916053, 2.215558, 2.796025",\ + "1.023221, 1.212804, 1.396249, 1.695289, 2.274839",\ + "1.055246, 1.244828, 1.428274, 1.727314, 2.306864",\ + "1.105654, 1.295237, 1.478681, 1.777720, 2.357271",\ + "1.266715, 1.456299, 1.639739, 1.938777, 2.518331",\ + "1.846688, 2.036272, 2.219712, 2.518751, 3.098304"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.029862, 0.029862, 0.029862, 0.029862, 0.029862",\ + "0.059267, 0.059267, 0.059267, 0.059266, 0.059265",\ + "0.131513, 0.131512, 0.131512, 0.131512, 0.131512",\ + "0.417810, 0.417803, 0.417803, 0.417799, 0.417790",\ + "1.484519, 1.484515, 1.484514, 1.484513, 1.484508",\ + "0.029862, 0.029862, 0.029862, 0.029862, 0.029862",\ + "0.059267, 0.059267, 0.059267, 0.059266, 0.059265",\ + "0.131513, 0.131512, 0.131512, 0.131512, 0.131512",\ + "0.417810, 0.417803, 0.417803, 0.417799, 0.417790",\ + "1.484518, 1.484515, 1.484514, 1.484513, 1.484508",\ + "0.029862, 0.029862, 0.029862, 0.029862, 0.029862",\ + "0.059267, 0.059267, 0.059267, 0.059266, 0.059265",\ + "0.131513, 0.131512, 0.131512, 0.131512, 0.131512",\ + "0.417810, 0.417803, 0.417803, 0.417799, 0.417790",\ + "1.484518, 1.484515, 1.484514, 1.484513, 1.484508",\ + "0.029862, 0.029862, 0.029862, 0.029862, 0.029862",\ + "0.059267, 0.059267, 0.059267, 0.059266, 0.059265",\ + "0.131513, 0.131512, 0.131512, 0.131512, 0.131512",\ + "0.417809, 0.417803, 0.417803, 0.417799, 0.417790",\ + "1.484518, 1.484515, 1.484514, 1.484513, 1.484508",\ + "0.029862, 0.029862, 0.029862, 0.029862, 0.029862",\ + "0.059267, 0.059267, 0.059267, 0.059266, 0.059265",\ + "0.131512, 0.131512, 0.131512, 0.131512, 0.131512",\ + "0.417806, 0.417803, 0.417803, 0.417799, 0.417790",\ + "1.484516, 1.484515, 1.484514, 1.484513, 1.484508"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[8]_redg_min_2707*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[38]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.411437, 0.641763, 0.827440, 1.121826, 1.689429",\ + "0.453163, 0.683488, 0.869165, 1.163551, 1.731154",\ + "0.529220, 0.759545, 0.945221, 1.239608, 1.807211",\ + "0.784777, 1.015107, 1.200787, 1.495173, 2.062773",\ + "1.709036, 1.939362, 2.125040, 2.419426, 2.987028",\ + "0.499750, 0.729081, 0.914721, 1.209131, 1.776782",\ + "0.541475, 0.770807, 0.956446, 1.250857, 1.818508",\ + "0.617533, 0.846863, 1.032502, 1.326913, 1.894564",\ + "0.873090, 1.102426, 1.288068, 1.582478, 2.150126",\ + "1.797349, 2.026680, 2.212321, 2.506731, 3.074381",\ + "0.588895, 0.809414, 0.994747, 1.289160, 1.856814",\ + "0.630620, 0.851139, 1.036473, 1.330885, 1.898539",\ + "0.706677, 0.927196, 1.112529, 1.406941, 1.974596",\ + "0.962234, 1.182758, 1.368095, 1.662507, 2.230158",\ + "1.886493, 2.107013, 2.292347, 2.586760, 3.154413",\ + "0.652369, 0.867238, 1.052459, 1.346598, 1.913847",\ + "0.694094, 0.908963, 1.094185, 1.388323, 1.955572",\ + "0.770151, 0.985020, 1.170241, 1.464380, 2.031629",\ + "1.025709, 1.240582, 1.425807, 1.719945, 2.287190",\ + "1.949967, 2.164837, 2.350059, 2.644198, 3.211446",\ + "0.987682, 1.172511, 1.356118, 1.649777, 2.216089",\ + "1.029408, 1.214237, 1.397843, 1.691502, 2.257815",\ + "1.105465, 1.290294, 1.473899, 1.767559, 2.333871",\ + "1.361025, 1.545856, 1.729465, 2.023124, 2.589433",\ + "2.285281, 2.470111, 2.653718, 2.947377, 3.513689"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.025366, 0.025366, 0.025366, 0.025366, 0.025366",\ + "0.070223, 0.070222, 0.070221, 0.070221, 0.070221",\ + "0.199530, 0.199530, 0.199530, 0.199530, 0.199530",\ + "0.686589, 0.686583, 0.686578, 0.686576, 0.686576",\ + "2.452462, 2.452462, 2.452462, 2.452450, 2.452423",\ + "0.025366, 0.025366, 0.025366, 0.025366, 0.025366",\ + "0.070223, 0.070222, 0.070221, 0.070221, 0.070221",\ + "0.199530, 0.199530, 0.199530, 0.199530, 0.199530",\ + "0.686589, 0.686583, 0.686578, 0.686576, 0.686576",\ + "2.452462, 2.452462, 2.452462, 2.452450, 2.452423",\ + "0.025366, 0.025366, 0.025366, 0.025366, 0.025366",\ + "0.070223, 0.070222, 0.070221, 0.070221, 0.070221",\ + "0.199530, 0.199530, 0.199530, 0.199530, 0.199530",\ + "0.686588, 0.686583, 0.686578, 0.686576, 0.686576",\ + "2.452462, 2.452462, 2.452462, 2.452450, 2.452423",\ + "0.025366, 0.025366, 0.025366, 0.025366, 0.025366",\ + "0.070223, 0.070222, 0.070221, 0.070221, 0.070221",\ + "0.199530, 0.199530, 0.199530, 0.199530, 0.199530",\ + "0.686588, 0.686583, 0.686578, 0.686576, 0.686576",\ + "2.452462, 2.452462, 2.452462, 2.452450, 2.452423",\ + "0.025366, 0.025366, 0.025366, 0.025366, 0.025366",\ + "0.070222, 0.070222, 0.070221, 0.070221, 0.070221",\ + "0.199530, 0.199530, 0.199530, 0.199530, 0.199530",\ + "0.686585, 0.686583, 0.686578, 0.686576, 0.686576",\ + "2.452462, 2.452462, 2.452462, 2.452450, 2.452422"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.434036, 0.664363, 0.850040, 1.144426, 1.712028",\ + "0.466066, 0.696393, 0.882070, 1.176457, 1.744059",\ + "0.516455, 0.746780, 0.932457, 1.226843, 1.794446",\ + "0.677484, 0.907807, 1.093482, 1.387868, 1.955473",\ + "1.257459, 1.487782, 1.673457, 1.967843, 2.535448",\ + "0.522349, 0.751681, 0.937321, 1.231731, 1.799382",\ + "0.554379, 0.783711, 0.969351, 1.263762, 1.831412",\ + "0.604768, 0.834099, 1.019738, 1.314148, 1.881800",\ + "0.765797, 0.995125, 1.180763, 1.475173, 2.042827",\ + "1.345772, 1.575100, 1.760738, 2.055148, 2.622802",\ + "0.611494, 0.832013, 1.017348, 1.311760, 1.879413",\ + "0.643524, 0.864044, 1.049378, 1.343790, 1.911444",\ + "0.693912, 0.914431, 1.099764, 1.394177, 1.961831",\ + "0.854941, 1.075458, 1.260790, 1.555202, 2.122858",\ + "1.434916, 1.655433, 1.840765, 2.135177, 2.702833",\ + "0.674968, 0.889838, 1.075059, 1.369198, 1.936446",\ + "0.706998, 0.921868, 1.107090, 1.401229, 1.968477",\ + "0.757386, 0.972255, 1.157476, 1.451615, 2.018864",\ + "0.918415, 1.133282, 1.318501, 1.612640, 2.179891",\ + "1.498390, 1.713257, 1.898476, 2.192615, 2.759866",\ + "1.010282, 1.195111, 1.378718, 1.672377, 2.238689",\ + "1.042312, 1.227141, 1.410748, 1.704407, 2.270719",\ + "1.092700, 1.277529, 1.461135, 1.754794, 2.321106",\ + "1.253727, 1.438555, 1.622160, 1.915819, 2.482133",\ + "1.833702, 2.018530, 2.202135, 2.495794, 3.062109"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.029863, 0.029863, 0.029863, 0.029863, 0.029863",\ + "0.059264, 0.059264, 0.059264, 0.059264, 0.059262",\ + "0.131521, 0.131521, 0.131521, 0.131521, 0.131521",\ + "0.417782, 0.417782, 0.417782, 0.417778, 0.417769",\ + "1.484504, 1.484504, 1.484504, 1.484501, 1.484496",\ + "0.029863, 0.029863, 0.029863, 0.029863, 0.029863",\ + "0.059264, 0.059264, 0.059264, 0.059264, 0.059262",\ + "0.131521, 0.131521, 0.131521, 0.131521, 0.131521",\ + "0.417782, 0.417782, 0.417782, 0.417778, 0.417769",\ + "1.484504, 1.484504, 1.484504, 1.484501, 1.484496",\ + "0.029863, 0.029863, 0.029863, 0.029863, 0.029863",\ + "0.059264, 0.059264, 0.059264, 0.059264, 0.059262",\ + "0.131521, 0.131521, 0.131521, 0.131521, 0.131521",\ + "0.417782, 0.417782, 0.417782, 0.417778, 0.417769",\ + "1.484504, 1.484504, 1.484504, 1.484501, 1.484496",\ + "0.029863, 0.029863, 0.029863, 0.029863, 0.029863",\ + "0.059264, 0.059264, 0.059264, 0.059264, 0.059262",\ + "0.131521, 0.131521, 0.131521, 0.131521, 0.131521",\ + "0.417782, 0.417782, 0.417782, 0.417778, 0.417769",\ + "1.484504, 1.484504, 1.484504, 1.484501, 1.484496",\ + "0.029863, 0.029863, 0.029863, 0.029863, 0.029863",\ + "0.059264, 0.059264, 0.059264, 0.059264, 0.059262",\ + "0.131521, 0.131521, 0.131521, 0.131521, 0.131521",\ + "0.417782, 0.417782, 0.417782, 0.417778, 0.417769",\ + "1.484504, 1.484504, 1.484504, 1.484501, 1.484496"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[8]_redg_min_2292*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[43]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.506400, 0.723405, 0.901534, 1.190767, 1.752239",\ + "0.548095, 0.765101, 0.943229, 1.232462, 1.793935",\ + "0.624275, 0.841281, 1.019409, 1.308642, 1.870115",\ + "0.879665, 1.096670, 1.274799, 1.564032, 2.125504",\ + "1.804122, 2.021127, 2.199255, 2.488489, 3.049961",\ + "0.594776, 0.810723, 0.988814, 1.278072, 1.839592",\ + "0.636472, 0.852419, 1.030510, 1.319767, 1.881288",\ + "0.712652, 0.928599, 1.106690, 1.395947, 1.957468",\ + "0.968041, 1.183989, 1.362080, 1.651337, 2.212858",\ + "1.892498, 2.108445, 2.286536, 2.575794, 3.137315",\ + "0.684027, 0.891056, 1.068841, 1.358100, 1.919624",\ + "0.725722, 0.932752, 1.110537, 1.399796, 1.961320",\ + "0.801902, 1.008932, 1.186717, 1.475976, 2.037500",\ + "1.057292, 1.264322, 1.442107, 1.731366, 2.292889",\ + "1.981749, 2.188778, 2.366563, 2.655822, 3.217346",\ + "0.747566, 0.948873, 1.126535, 1.415531, 1.976642",\ + "0.789261, 0.990569, 1.168231, 1.457227, 2.018338",\ + "0.865441, 1.066749, 1.244411, 1.533407, 2.094518",\ + "1.120831, 1.322138, 1.499801, 1.788796, 2.349907",\ + "2.045288, 2.246595, 2.424257, 2.713253, 3.274364",\ + "1.075492, 1.254095, 1.430191, 1.718704, 2.278866",\ + "1.117188, 1.295791, 1.471887, 1.760399, 2.320562",\ + "1.193368, 1.371971, 1.548067, 1.836579, 2.396742",\ + "1.448757, 1.627361, 1.803456, 2.091969, 2.652131",\ + "2.373214, 2.551817, 2.727913, 3.016426, 3.576588"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070076, 0.070076, 0.070076, 0.070076, 0.070076",\ + "0.199408, 0.199408, 0.199408, 0.199409, 0.199410",\ + "0.685874, 0.685874, 0.685874, 0.685874, 0.685874",\ + "2.455194, 2.455194, 2.455194, 2.455194, 2.455194",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070076, 0.070076, 0.070076, 0.070076, 0.070076",\ + "0.199408, 0.199408, 0.199408, 0.199409, 0.199410",\ + "0.685874, 0.685874, 0.685874, 0.685874, 0.685874",\ + "2.455194, 2.455194, 2.455194, 2.455194, 2.455194",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070076, 0.070076, 0.070076, 0.070076, 0.070076",\ + "0.199408, 0.199408, 0.199408, 0.199409, 0.199410",\ + "0.685874, 0.685874, 0.685874, 0.685874, 0.685874",\ + "2.455194, 2.455194, 2.455194, 2.455194, 2.455194",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070076, 0.070076, 0.070076, 0.070076, 0.070076",\ + "0.199408, 0.199408, 0.199408, 0.199409, 0.199410",\ + "0.685874, 0.685874, 0.685874, 0.685874, 0.685874",\ + "2.455194, 2.455194, 2.455194, 2.455194, 2.455194",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070076, 0.070076, 0.070076, 0.070076, 0.070076",\ + "0.199408, 0.199408, 0.199408, 0.199409, 0.199410",\ + "0.685874, 0.685874, 0.685874, 0.685874, 0.685874",\ + "2.455194, 2.455194, 2.455194, 2.455194, 2.455194"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.526648, 0.743653, 0.921781, 1.211015, 1.772487",\ + "0.558894, 0.775899, 0.954027, 1.243261, 1.804733",\ + "0.609210, 0.826215, 1.004344, 1.293577, 1.855049",\ + "0.769874, 0.986879, 1.165008, 1.454241, 2.015713",\ + "1.350989, 1.567995, 1.746123, 2.035356, 2.596828",\ + "0.615024, 0.830971, 1.009062, 1.298320, 1.859840",\ + "0.647270, 0.863217, 1.041308, 1.330566, 1.892087",\ + "0.697586, 0.913533, 1.091625, 1.380882, 1.942403",\ + "0.858250, 1.074197, 1.252288, 1.541546, 2.103066",\ + "1.439366, 1.655313, 1.833404, 2.122661, 2.684182",\ + "0.704275, 0.911304, 1.089089, 1.378348, 1.939872",\ + "0.736521, 0.943550, 1.121335, 1.410594, 1.972118",\ + "0.786837, 0.993866, 1.171651, 1.460910, 2.022434",\ + "0.947501, 1.154530, 1.332315, 1.621574, 2.183098",\ + "1.528616, 1.735646, 1.913431, 2.202690, 2.764214",\ + "0.767814, 0.969121, 1.146783, 1.435779, 1.996890",\ + "0.800060, 1.001367, 1.179029, 1.468025, 2.029136",\ + "0.850376, 1.051683, 1.229346, 1.518341, 2.079452",\ + "1.011040, 1.212347, 1.390009, 1.679005, 2.240116",\ + "1.592155, 1.793463, 1.971125, 2.260120, 2.821231",\ + "1.095740, 1.274343, 1.450439, 1.738951, 2.299114",\ + "1.127986, 1.306589, 1.482685, 1.771198, 2.331360",\ + "1.178302, 1.356906, 1.533001, 1.821514, 2.381676",\ + "1.338966, 1.517570, 1.693665, 1.982178, 2.542340",\ + "1.920082, 2.098685, 2.274781, 2.563293, 3.123456"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.029703, 0.029703, 0.029703, 0.029703, 0.029703",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131484, 0.131484, 0.131484, 0.131485, 0.131485",\ + "0.419485, 0.419485, 0.419484, 0.419483, 0.419481",\ + "1.483052, 1.483052, 1.483052, 1.483052, 1.483052",\ + "0.029703, 0.029703, 0.029703, 0.029703, 0.029703",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131484, 0.131484, 0.131484, 0.131485, 0.131485",\ + "0.419485, 0.419485, 0.419484, 0.419483, 0.419481",\ + "1.483052, 1.483052, 1.483052, 1.483052, 1.483052",\ + "0.029703, 0.029703, 0.029703, 0.029703, 0.029703",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131484, 0.131484, 0.131484, 0.131485, 0.131485",\ + "0.419485, 0.419485, 0.419484, 0.419483, 0.419481",\ + "1.483052, 1.483052, 1.483052, 1.483052, 1.483052",\ + "0.029703, 0.029703, 0.029703, 0.029703, 0.029703",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131484, 0.131484, 0.131484, 0.131485, 0.131485",\ + "0.419485, 0.419485, 0.419484, 0.419483, 0.419481",\ + "1.483052, 1.483052, 1.483052, 1.483052, 1.483052",\ + "0.029703, 0.029703, 0.029703, 0.029703, 0.029703",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131484, 0.131484, 0.131484, 0.131485, 0.131485",\ + "0.419485, 0.419485, 0.419484, 0.419483, 0.419481",\ + "1.483052, 1.483052, 1.483052, 1.483052, 1.483052"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[8]_redg_min_2480*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[44]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.487215, 0.727664, 0.917972, 1.220770, 1.805421",\ + "0.528910, 0.769360, 0.959668, 1.262466, 1.847117",\ + "0.605090, 0.845540, 1.035848, 1.338646, 1.923296",\ + "0.860480, 1.100929, 1.291238, 1.594035, 2.178686",\ + "1.784937, 2.025386, 2.215694, 2.518492, 3.103143",\ + "0.575514, 0.814982, 1.005253, 1.308075, 1.892774",\ + "0.617210, 0.856678, 1.046949, 1.349771, 1.934470",\ + "0.693390, 0.932858, 1.123129, 1.425951, 2.010650",\ + "0.948779, 1.188247, 1.378519, 1.681340, 2.266040",\ + "1.873236, 2.112704, 2.302975, 2.605797, 3.190496",\ + "0.664798, 0.895313, 1.085280, 1.388104, 1.972806",\ + "0.706493, 0.937009, 1.126976, 1.429799, 2.014502",\ + "0.782673, 1.013189, 1.203156, 1.505979, 2.090682",\ + "1.038063, 1.268578, 1.458545, 1.761369, 2.346071",\ + "1.962520, 2.193035, 2.383002, 2.685826, 3.270528",\ + "0.728479, 0.953177, 1.143002, 1.445563, 2.029881",\ + "0.770175, 0.994873, 1.184698, 1.487259, 2.071577",\ + "0.846355, 1.071053, 1.260878, 1.563439, 2.147756",\ + "1.101744, 1.326442, 1.516268, 1.818828, 2.403146",\ + "2.026201, 2.250899, 2.440724, 2.743285, 3.327603",\ + "1.065102, 1.258723, 1.446662, 1.748759, 2.332174",\ + "1.106798, 1.300419, 1.488358, 1.790455, 2.373869",\ + "1.182978, 1.376599, 1.564538, 1.866635, 2.450049",\ + "1.438367, 1.631989, 1.819927, 2.122025, 2.705439",\ + "2.362824, 2.556445, 2.744384, 3.046481, 3.629896"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070076, 0.070076, 0.070076, 0.070076, 0.070076",\ + "0.199408, 0.199409, 0.199409, 0.199410, 0.199412",\ + "0.685874, 0.685874, 0.685874, 0.685874, 0.685874",\ + "2.455194, 2.455194, 2.455194, 2.455194, 2.455194",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070076, 0.070076, 0.070076, 0.070076, 0.070076",\ + "0.199408, 0.199409, 0.199409, 0.199410, 0.199412",\ + "0.685874, 0.685874, 0.685874, 0.685874, 0.685874",\ + "2.455194, 2.455194, 2.455194, 2.455194, 2.455194",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070076, 0.070076, 0.070076, 0.070076, 0.070076",\ + "0.199408, 0.199409, 0.199409, 0.199410, 0.199412",\ + "0.685874, 0.685874, 0.685874, 0.685874, 0.685874",\ + "2.455194, 2.455194, 2.455194, 2.455194, 2.455194",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070076, 0.070076, 0.070076, 0.070076, 0.070076",\ + "0.199408, 0.199409, 0.199409, 0.199410, 0.199412",\ + "0.685874, 0.685874, 0.685874, 0.685874, 0.685874",\ + "2.455194, 2.455194, 2.455194, 2.455194, 2.455194",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070076, 0.070076, 0.070076, 0.070076, 0.070076",\ + "0.199409, 0.199409, 0.199409, 0.199410, 0.199412",\ + "0.685874, 0.685874, 0.685874, 0.685874, 0.685874",\ + "2.455194, 2.455194, 2.455194, 2.455194, 2.455194"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.507462, 0.747912, 0.938220, 1.241018, 1.825669",\ + "0.539708, 0.780158, 0.970466, 1.273264, 1.857915",\ + "0.590025, 0.830474, 1.020782, 1.323580, 1.908231",\ + "0.750689, 0.991138, 1.181446, 1.484244, 2.068895",\ + "1.331804, 1.572254, 1.762562, 2.065360, 2.650010",\ + "0.595762, 0.835230, 1.025501, 1.328323, 1.913022",\ + "0.628008, 0.867476, 1.057747, 1.360569, 1.945268",\ + "0.678324, 0.917792, 1.108063, 1.410885, 1.995584",\ + "0.838988, 1.078456, 1.268727, 1.571549, 2.156248",\ + "1.420103, 1.659572, 1.849843, 2.152665, 2.737364",\ + "0.685045, 0.915561, 1.105528, 1.408352, 1.993054",\ + "0.717292, 0.947807, 1.137774, 1.440598, 2.025300",\ + "0.767608, 0.998123, 1.188090, 1.490914, 2.075616",\ + "0.928272, 1.158787, 1.348754, 1.651578, 2.236280",\ + "1.509387, 1.739902, 1.929870, 2.232693, 2.817395",\ + "0.748727, 0.973425, 1.163250, 1.465811, 2.050128",\ + "0.780973, 1.005671, 1.195496, 1.498057, 2.082375",\ + "0.831289, 1.055987, 1.245812, 1.548373, 2.132691",\ + "0.991953, 1.216651, 1.406476, 1.709037, 2.293355",\ + "1.573069, 1.797767, 1.987592, 2.290153, 2.874470",\ + "1.085350, 1.278971, 1.466910, 1.769007, 2.352422",\ + "1.117596, 1.311217, 1.499156, 1.801253, 2.384668",\ + "1.167912, 1.361534, 1.549472, 1.851569, 2.434984",\ + "1.328576, 1.522197, 1.710136, 2.012233, 2.595648",\ + "1.909692, 2.103313, 2.291251, 2.593349, 3.176763"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.029703, 0.029703, 0.029703, 0.029703, 0.029704",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131484, 0.131485, 0.131485, 0.131485, 0.131485",\ + "0.419485, 0.419484, 0.419483, 0.419481, 0.419478",\ + "1.483052, 1.483052, 1.483052, 1.483052, 1.483052",\ + "0.029703, 0.029703, 0.029703, 0.029703, 0.029704",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131484, 0.131485, 0.131485, 0.131485, 0.131485",\ + "0.419485, 0.419484, 0.419483, 0.419481, 0.419478",\ + "1.483052, 1.483052, 1.483052, 1.483052, 1.483052",\ + "0.029703, 0.029703, 0.029703, 0.029703, 0.029704",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131484, 0.131485, 0.131485, 0.131485, 0.131485",\ + "0.419485, 0.419484, 0.419483, 0.419481, 0.419478",\ + "1.483052, 1.483052, 1.483052, 1.483052, 1.483052",\ + "0.029703, 0.029703, 0.029703, 0.029703, 0.029704",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131484, 0.131485, 0.131485, 0.131485, 0.131485",\ + "0.419485, 0.419484, 0.419483, 0.419481, 0.419478",\ + "1.483052, 1.483052, 1.483052, 1.483052, 1.483052",\ + "0.029703, 0.029703, 0.029703, 0.029703, 0.029704",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131484, 0.131485, 0.131485, 0.131485, 0.131485",\ + "0.419484, 0.419484, 0.419483, 0.419481, 0.419478",\ + "1.483052, 1.483052, 1.483052, 1.483052, 1.483052"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[8]_redg_min_2458*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[47]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.401855, 0.617772, 0.797138, 1.086913, 1.648811",\ + "0.443578, 0.659495, 0.838861, 1.128636, 1.690534",\ + "0.519643, 0.735561, 0.914927, 1.204702, 1.766600",\ + "0.775133, 0.991049, 1.170417, 1.460191, 2.022084",\ + "1.699442, 1.915359, 2.094725, 2.384500, 2.946397",\ + "0.490138, 0.705090, 0.884419, 1.174218, 1.736165",\ + "0.531861, 0.746813, 0.926142, 1.215941, 1.777887",\ + "0.607927, 0.822879, 1.002208, 1.292007, 1.853954",\ + "0.863417, 1.078367, 1.257698, 1.547496, 2.109437",\ + "1.787725, 2.002677, 2.182006, 2.471805, 3.033750",\ + "0.579402, 0.785421, 0.964446, 1.254247, 1.816196",\ + "0.621125, 0.827144, 1.006169, 1.295970, 1.857919",\ + "0.697191, 0.903209, 1.082235, 1.372035, 1.933985",\ + "0.952680, 1.158697, 1.337725, 1.627524, 2.189469",\ + "1.876989, 2.083007, 2.262033, 2.551833, 3.113782",\ + "0.643076, 0.843251, 1.022143, 1.311678, 1.873216",\ + "0.684799, 0.884974, 1.063866, 1.353401, 1.914939",\ + "0.760865, 0.961040, 1.139932, 1.429467, 1.991005",\ + "1.016354, 1.216527, 1.395422, 1.684956, 2.246489",\ + "1.940663, 2.140838, 2.319730, 2.609265, 3.170802",\ + "0.967710, 1.148559, 1.325799, 1.614851, 2.175443",\ + "1.009433, 1.190282, 1.367522, 1.656574, 2.217166",\ + "1.085498, 1.266348, 1.443587, 1.732640, 2.293232",\ + "1.340988, 1.521835, 1.699077, 1.988128, 2.548716",\ + "2.265296, 2.446146, 2.623385, 2.912438, 3.473029"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.025354, 0.025353, 0.025353, 0.025353, 0.025352",\ + "0.070228, 0.070228, 0.070228, 0.070228, 0.070228",\ + "0.199488, 0.199487, 0.199487, 0.199486, 0.199483",\ + "0.686687, 0.686687, 0.686686, 0.686686, 0.686686",\ + "2.452523, 2.452519, 2.452519, 2.452513, 2.452498",\ + "0.025354, 0.025353, 0.025353, 0.025353, 0.025352",\ + "0.070228, 0.070228, 0.070228, 0.070228, 0.070228",\ + "0.199488, 0.199487, 0.199487, 0.199486, 0.199483",\ + "0.686687, 0.686687, 0.686686, 0.686686, 0.686686",\ + "2.452523, 2.452519, 2.452519, 2.452513, 2.452498",\ + "0.025354, 0.025353, 0.025353, 0.025353, 0.025352",\ + "0.070228, 0.070228, 0.070228, 0.070228, 0.070228",\ + "0.199487, 0.199487, 0.199487, 0.199486, 0.199483",\ + "0.686687, 0.686687, 0.686686, 0.686686, 0.686686",\ + "2.452523, 2.452519, 2.452519, 2.452513, 2.452498",\ + "0.025354, 0.025353, 0.025353, 0.025353, 0.025352",\ + "0.070228, 0.070228, 0.070228, 0.070228, 0.070228",\ + "0.199487, 0.199487, 0.199487, 0.199486, 0.199483",\ + "0.686687, 0.686687, 0.686686, 0.686686, 0.686686",\ + "2.452523, 2.452519, 2.452519, 2.452513, 2.452498",\ + "0.025354, 0.025353, 0.025353, 0.025353, 0.025352",\ + "0.070228, 0.070228, 0.070228, 0.070228, 0.070228",\ + "0.199487, 0.199487, 0.199487, 0.199486, 0.199483",\ + "0.686687, 0.686687, 0.686686, 0.686686, 0.686686",\ + "2.452523, 2.452519, 2.452519, 2.452513, 2.452498"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.424445, 0.640362, 0.819728, 1.109503, 1.671400",\ + "0.456469, 0.672387, 0.851753, 1.141528, 1.703424",\ + "0.506877, 0.722795, 0.902161, 1.191936, 1.753834",\ + "0.667936, 0.883855, 1.063220, 1.352995, 1.914896",\ + "1.247909, 1.463828, 1.643193, 1.932969, 2.494869",\ + "0.512729, 0.727680, 0.907009, 1.196808, 1.758754",\ + "0.544753, 0.759704, 0.939034, 1.228833, 1.790778",\ + "0.595161, 0.810113, 0.989442, 1.279241, 1.841187",\ + "0.756220, 0.971173, 1.150501, 1.440300, 2.002249",\ + "1.336193, 1.551146, 1.730474, 2.020274, 2.582222",\ + "0.601992, 0.808011, 0.987036, 1.276837, 1.838785",\ + "0.634017, 0.840035, 1.019061, 1.308861, 1.870810",\ + "0.684425, 0.890443, 1.069469, 1.359269, 1.921219",\ + "0.845484, 1.051504, 1.230528, 1.520329, 2.082281",\ + "1.425457, 1.631477, 1.810501, 2.100302, 2.662254",\ + "0.665666, 0.865841, 1.044734, 1.334268, 1.895805",\ + "0.697691, 0.897865, 1.076758, 1.366293, 1.927830",\ + "0.748099, 0.948274, 1.127166, 1.416701, 1.978239",\ + "0.909158, 1.109334, 1.288225, 1.577760, 2.139301",\ + "1.489131, 1.689307, 1.868198, 2.157734, 2.719274",\ + "0.990300, 1.171149, 1.348389, 1.637441, 2.198032",\ + "1.022324, 1.203173, 1.380413, 1.669466, 2.230056",\ + "1.072732, 1.253582, 1.430821, 1.719874, 2.280466",\ + "1.233791, 1.414642, 1.591880, 1.880933, 2.441528",\ + "1.813765, 1.994615, 2.171854, 2.460907, 3.021501"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.029862, 0.029862, 0.029862, 0.029862, 0.029862",\ + "0.059267, 0.059267, 0.059267, 0.059266, 0.059266",\ + "0.131512, 0.131512, 0.131512, 0.131512, 0.131512",\ + "0.417803, 0.417802, 0.417802, 0.417800, 0.417795",\ + "1.484515, 1.484514, 1.484514, 1.484513, 1.484510",\ + "0.029862, 0.029862, 0.029862, 0.029862, 0.029862",\ + "0.059267, 0.059267, 0.059267, 0.059266, 0.059266",\ + "0.131512, 0.131512, 0.131512, 0.131512, 0.131512",\ + "0.417803, 0.417802, 0.417802, 0.417800, 0.417795",\ + "1.484515, 1.484514, 1.484514, 1.484513, 1.484510",\ + "0.029862, 0.029862, 0.029862, 0.029862, 0.029862",\ + "0.059267, 0.059267, 0.059267, 0.059266, 0.059266",\ + "0.131512, 0.131512, 0.131512, 0.131512, 0.131512",\ + "0.417803, 0.417802, 0.417802, 0.417800, 0.417795",\ + "1.484515, 1.484514, 1.484514, 1.484513, 1.484510",\ + "0.029862, 0.029862, 0.029862, 0.029862, 0.029862",\ + "0.059267, 0.059267, 0.059267, 0.059266, 0.059266",\ + "0.131512, 0.131512, 0.131512, 0.131512, 0.131512",\ + "0.417803, 0.417802, 0.417802, 0.417800, 0.417795",\ + "1.484515, 1.484514, 1.484514, 1.484513, 1.484510",\ + "0.029862, 0.029862, 0.029862, 0.029862, 0.029862",\ + "0.059267, 0.059267, 0.059267, 0.059266, 0.059266",\ + "0.131512, 0.131512, 0.131512, 0.131512, 0.131512",\ + "0.417803, 0.417802, 0.417802, 0.417800, 0.417795",\ + "1.484515, 1.484514, 1.484514, 1.484513, 1.484510"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[8]_redg_min_2440*/ + +} /* end of pin tl_o[8] */ + +pin("tl_o[7]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.035370 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : tl_o[7]; + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[18]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.763083, 1.005361, 1.270323, 1.744250, 2.692104",\ + "0.776922, 1.019201, 1.284163, 1.758090, 2.705944",\ + "0.800433, 1.042711, 1.307673, 1.781600, 2.729455",\ + "1.069305, 1.311583, 1.576544, 2.050472, 2.998326",\ + "1.663833, 1.906111, 2.171072, 2.644999, 3.592854",\ + "0.850491, 1.092832, 1.357904, 1.830964, 2.778038",\ + "0.864331, 1.106672, 1.371744, 1.844804, 2.791878",\ + "0.887842, 1.130182, 1.395254, 1.868315, 2.815388",\ + "1.156713, 1.399054, 1.664126, 2.137186, 3.084260",\ + "1.751242, 1.993582, 2.258653, 2.731714, 3.678787",\ + "0.931306, 1.181626, 1.445868, 1.918586, 2.864993",\ + "0.945146, 1.195466, 1.459708, 1.932426, 2.878833",\ + "0.968656, 1.218976, 1.483218, 1.955936, 2.902343",\ + "1.237528, 1.487848, 1.752090, 2.224808, 3.171215",\ + "1.832057, 2.082376, 2.346617, 2.819335, 3.765743",\ + "0.989274, 1.246989, 1.510009, 1.982499, 2.928502",\ + "1.003114, 1.260829, 1.523849, 1.996339, 2.942342",\ + "1.026624, 1.284340, 1.547359, 2.019849, 2.965852",\ + "1.295496, 1.553211, 1.816230, 2.288721, 3.234724",\ + "1.890025, 2.147739, 2.410758, 2.883248, 3.829252",\ + "1.322822, 1.608220, 1.861925, 2.331865, 3.273958",\ + "1.336662, 1.622059, 1.875765, 2.345705, 3.287798",\ + "1.360173, 1.645570, 1.899276, 2.369215, 3.311308",\ + "1.629045, 1.914441, 2.168147, 2.638086, 3.580180",\ + "2.223573, 2.508969, 2.762674, 3.232614, 4.174707"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.129963, 0.129969, 0.129995, 0.130055, 0.130175",\ + "0.157856, 0.157859, 0.157877, 0.157917, 0.157996",\ + "0.203046, 0.203047, 0.203054, 0.203070, 0.203103",\ + "0.823721, 0.823721, 0.823721, 0.823721, 0.823721",\ + "2.222145, 2.222145, 2.222145, 2.222145, 2.222145",\ + "0.129963, 0.129969, 0.129995, 0.130055, 0.130175",\ + "0.157856, 0.157859, 0.157877, 0.157917, 0.157996",\ + "0.203046, 0.203047, 0.203054, 0.203070, 0.203103",\ + "0.823721, 0.823721, 0.823721, 0.823721, 0.823721",\ + "2.222145, 2.222145, 2.222145, 2.222145, 2.222145",\ + "0.129963, 0.129969, 0.129995, 0.130055, 0.130175",\ + "0.157856, 0.157860, 0.157877, 0.157917, 0.157996",\ + "0.203046, 0.203047, 0.203054, 0.203070, 0.203103",\ + "0.823721, 0.823721, 0.823721, 0.823721, 0.823721",\ + "2.222145, 2.222145, 2.222145, 2.222145, 2.222145",\ + "0.129963, 0.129969, 0.129995, 0.130055, 0.130175",\ + "0.157856, 0.157860, 0.157877, 0.157917, 0.157996",\ + "0.203046, 0.203047, 0.203054, 0.203070, 0.203103",\ + "0.823721, 0.823721, 0.823721, 0.823721, 0.823721",\ + "2.222145, 2.222145, 2.222145, 2.222145, 2.222145",\ + "0.129963, 0.129972, 0.129996, 0.130055, 0.130175",\ + "0.157856, 0.157861, 0.157877, 0.157917, 0.157996",\ + "0.203046, 0.203048, 0.203055, 0.203071, 0.203103",\ + "0.823721, 0.823721, 0.823721, 0.823721, 0.823721",\ + "2.222145, 2.222145, 2.222145, 2.222145, 2.222145"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.698169, 0.940449, 1.205412, 1.679339, 2.627193",\ + "0.711314, 0.953594, 1.218557, 1.692484, 2.640338",\ + "0.732465, 0.974745, 1.239707, 1.713634, 2.661488",\ + "0.908675, 1.150953, 1.415913, 1.889840, 2.837695",\ + "1.242989, 1.485267, 1.750227, 2.224154, 3.172009",\ + "0.785578, 1.027920, 1.292994, 1.766054, 2.713127",\ + "0.798723, 1.041065, 1.306139, 1.779198, 2.726272",\ + "0.819874, 1.062215, 1.327289, 1.800348, 2.747422",\ + "0.996084, 1.238424, 1.503495, 1.976555, 2.923629",\ + "1.330398, 1.572737, 1.837808, 2.310869, 3.257943",\ + "0.866392, 1.116714, 1.380958, 1.853675, 2.800082",\ + "0.879538, 1.129859, 1.394103, 1.866820, 2.813227",\ + "0.900689, 1.151010, 1.415252, 1.887970, 2.834377",\ + "1.076899, 1.327218, 1.591458, 2.064176, 3.010584",\ + "1.411212, 1.661532, 1.925772, 2.398490, 3.344898",\ + "0.924360, 1.182077, 1.445098, 1.917589, 2.863591",\ + "0.937505, 1.195222, 1.458243, 1.930733, 2.876736",\ + "0.958657, 1.216373, 1.479393, 1.951883, 2.897886",\ + "1.134866, 1.392581, 1.655599, 2.128089, 3.074093",\ + "1.469180, 1.726895, 1.989913, 2.462403, 3.408407",\ + "1.257909, 1.543308, 1.797015, 2.266954, 3.209047",\ + "1.271054, 1.556453, 1.810160, 2.280099, 3.222192",\ + "1.292205, 1.577603, 1.831310, 2.301249, 3.243342",\ + "1.468415, 1.753811, 2.007515, 2.477455, 3.419549",\ + "1.802729, 2.088125, 2.341829, 2.811769, 3.753863"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.086495, 0.086495, 0.086495, 0.086495, 0.086495",\ + "0.090876, 0.090876, 0.090876, 0.090876, 0.090876",\ + "0.110244, 0.110244, 0.110244, 0.110244, 0.110244",\ + "0.380767, 0.380767, 0.380767, 0.380768, 0.380769",\ + "1.026303, 1.026303, 1.026304, 1.026307, 1.026312",\ + "0.086495, 0.086495, 0.086495, 0.086495, 0.086495",\ + "0.090876, 0.090876, 0.090876, 0.090876, 0.090876",\ + "0.110244, 0.110244, 0.110244, 0.110244, 0.110244",\ + "0.380767, 0.380767, 0.380767, 0.380768, 0.380769",\ + "1.026303, 1.026303, 1.026305, 1.026307, 1.026312",\ + "0.086495, 0.086495, 0.086495, 0.086495, 0.086495",\ + "0.090876, 0.090876, 0.090876, 0.090876, 0.090876",\ + "0.110244, 0.110244, 0.110244, 0.110244, 0.110244",\ + "0.380767, 0.380767, 0.380767, 0.380768, 0.380769",\ + "1.026303, 1.026303, 1.026305, 1.026307, 1.026312",\ + "0.086495, 0.086495, 0.086495, 0.086495, 0.086495",\ + "0.090876, 0.090876, 0.090876, 0.090876, 0.090876",\ + "0.110244, 0.110244, 0.110244, 0.110244, 0.110244",\ + "0.380767, 0.380767, 0.380767, 0.380768, 0.380769",\ + "1.026303, 1.026303, 1.026305, 1.026307, 1.026312",\ + "0.086495, 0.086495, 0.086495, 0.086495, 0.086495",\ + "0.090876, 0.090876, 0.090876, 0.090876, 0.090876",\ + "0.110244, 0.110244, 0.110244, 0.110244, 0.110244",\ + "0.380767, 0.380767, 0.380767, 0.380768, 0.380769",\ + "1.026303, 1.026303, 1.026305, 1.026307, 1.026312"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[7]_redg_2625*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[19]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.787208, 1.042240, 1.299016, 1.737737, 2.615179",\ + "0.801048, 1.056080, 1.312856, 1.751576, 2.629018",\ + "0.824558, 1.079590, 1.336366, 1.775087, 2.652528",\ + "1.093430, 1.348462, 1.605238, 2.043957, 2.921395",\ + "1.687959, 1.942991, 2.199766, 2.638483, 3.515917",\ + "0.874617, 1.129725, 1.386486, 1.824451, 2.701113",\ + "0.888456, 1.143564, 1.400326, 1.838291, 2.714952",\ + "0.911967, 1.167075, 1.423836, 1.861801, 2.738462",\ + "1.180839, 1.435947, 1.692708, 2.130671, 3.007329",\ + "1.775367, 2.030476, 2.287236, 2.725197, 3.601851",\ + "0.962301, 1.218548, 1.474448, 1.912073, 2.788068",\ + "0.976141, 1.232388, 1.488288, 1.925912, 2.801907",\ + "0.999652, 1.255898, 1.511798, 1.949423, 2.825417",\ + "1.268523, 1.524770, 1.780670, 2.218293, 3.094284",\ + "1.863052, 2.119299, 2.375198, 2.812819, 3.688806",\ + "1.025488, 1.283954, 1.538583, 1.975986, 2.851577",\ + "1.039328, 1.297794, 1.552423, 1.989825, 2.865416",\ + "1.062838, 1.321304, 1.575933, 2.013336, 2.888926",\ + "1.331710, 1.590176, 1.844805, 2.282206, 3.157793",\ + "1.926239, 2.184705, 2.439332, 2.876732, 3.752315",\ + "1.358969, 1.645690, 1.890142, 2.325206, 3.197033",\ + "1.372809, 1.659530, 1.903982, 2.339045, 3.210872",\ + "1.396320, 1.683041, 1.927492, 2.362556, 3.234382",\ + "1.665192, 1.951913, 2.196364, 2.631425, 3.503249",\ + "2.259720, 2.546442, 2.790892, 3.225951, 4.097771"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.129962, 0.129962, 0.129971, 0.130001, 0.130060",\ + "0.157855, 0.157855, 0.157861, 0.157880, 0.157920",\ + "0.203046, 0.203046, 0.203048, 0.203056, 0.203072",\ + "0.823721, 0.823721, 0.823721, 0.823721, 0.823720",\ + "2.222145, 2.222145, 2.222145, 2.222145, 2.222145",\ + "0.129962, 0.129962, 0.129971, 0.130001, 0.130060",\ + "0.157855, 0.157855, 0.157861, 0.157880, 0.157920",\ + "0.203046, 0.203046, 0.203048, 0.203056, 0.203072",\ + "0.823721, 0.823721, 0.823721, 0.823721, 0.823720",\ + "2.222145, 2.222145, 2.222145, 2.222145, 2.222145",\ + "0.129962, 0.129962, 0.129971, 0.130001, 0.130060",\ + "0.157855, 0.157855, 0.157861, 0.157880, 0.157920",\ + "0.203046, 0.203046, 0.203048, 0.203056, 0.203072",\ + "0.823721, 0.823721, 0.823721, 0.823721, 0.823720",\ + "2.222145, 2.222145, 2.222145, 2.222145, 2.222145",\ + "0.129962, 0.129962, 0.129971, 0.130001, 0.130060",\ + "0.157855, 0.157855, 0.157861, 0.157880, 0.157920",\ + "0.203046, 0.203046, 0.203048, 0.203056, 0.203072",\ + "0.823721, 0.823721, 0.823721, 0.823721, 0.823720",\ + "2.222145, 2.222145, 2.222145, 2.222145, 2.222145",\ + "0.129962, 0.129962, 0.129971, 0.130001, 0.130060",\ + "0.157855, 0.157855, 0.157861, 0.157880, 0.157920",\ + "0.203046, 0.203046, 0.203048, 0.203056, 0.203072",\ + "0.823721, 0.823721, 0.823721, 0.823721, 0.823720",\ + "2.222145, 2.222145, 2.222145, 2.222145, 2.222145"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.722294, 0.977326, 1.234104, 1.672832, 2.550288",\ + "0.735440, 0.990472, 1.247249, 1.685975, 2.563427",\ + "0.756591, 1.011623, 1.268399, 1.707123, 2.584570",\ + "0.932801, 1.187833, 1.444607, 1.883322, 2.760752",\ + "1.267115, 1.522147, 1.778921, 2.217637, 3.095068",\ + "0.809702, 1.064811, 1.321574, 1.759546, 2.636222",\ + "0.822848, 1.077956, 1.334719, 1.772689, 2.649361",\ + "0.843999, 1.099107, 1.355870, 1.793837, 2.670504",\ + "1.020210, 1.275318, 1.532078, 1.970036, 2.846686",\ + "1.354523, 1.609631, 1.866392, 2.304351, 3.181002",\ + "0.897387, 1.153634, 1.409536, 1.847168, 2.723177",\ + "0.910533, 1.166780, 1.422681, 1.860311, 2.736316",\ + "0.931684, 1.187931, 1.443832, 1.881459, 2.757459",\ + "1.107894, 1.364141, 1.620039, 2.057658, 2.933641",\ + "1.442208, 1.698455, 1.954353, 2.391973, 3.267957",\ + "0.960574, 1.219040, 1.473671, 1.911081, 2.786686",\ + "0.973719, 1.232186, 1.486816, 1.924224, 2.799825",\ + "0.994870, 1.253337, 1.507966, 1.945372, 2.820968",\ + "1.171081, 1.429547, 1.684174, 2.121571, 2.997150",\ + "1.505394, 1.763861, 2.018488, 2.455886, 3.331466",\ + "1.294055, 1.580776, 1.825230, 2.260301, 3.132142",\ + "1.307201, 1.593922, 1.838375, 2.273444, 3.145281",\ + "1.328352, 1.615073, 1.859525, 2.294591, 3.166424",\ + "1.504562, 1.791284, 2.035733, 2.470791, 3.342606",\ + "1.838876, 2.125597, 2.370047, 2.805105, 3.676922"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.086495, 0.086495, 0.086490, 0.086470, 0.086430",\ + "0.090877, 0.090877, 0.090872, 0.090854, 0.090818",\ + "0.110245, 0.110245, 0.110240, 0.110223, 0.110189",\ + "0.380767, 0.380767, 0.380767, 0.380767, 0.380768",\ + "1.026303, 1.026303, 1.026303, 1.026305, 1.026307",\ + "0.086495, 0.086495, 0.086490, 0.086470, 0.086430",\ + "0.090877, 0.090877, 0.090872, 0.090854, 0.090818",\ + "0.110245, 0.110245, 0.110240, 0.110223, 0.110189",\ + "0.380767, 0.380767, 0.380767, 0.380767, 0.380768",\ + "1.026303, 1.026303, 1.026303, 1.026305, 1.026307",\ + "0.086495, 0.086495, 0.086490, 0.086470, 0.086430",\ + "0.090877, 0.090877, 0.090872, 0.090854, 0.090818",\ + "0.110245, 0.110245, 0.110240, 0.110223, 0.110189",\ + "0.380767, 0.380767, 0.380767, 0.380767, 0.380768",\ + "1.026303, 1.026303, 1.026303, 1.026305, 1.026307",\ + "0.086495, 0.086495, 0.086490, 0.086470, 0.086430",\ + "0.090877, 0.090877, 0.090872, 0.090854, 0.090818",\ + "0.110245, 0.110245, 0.110240, 0.110223, 0.110189",\ + "0.380767, 0.380767, 0.380767, 0.380767, 0.380768",\ + "1.026303, 1.026303, 1.026303, 1.026305, 1.026307",\ + "0.086495, 0.086495, 0.086489, 0.086470, 0.086430",\ + "0.090877, 0.090877, 0.090872, 0.090854, 0.090818",\ + "0.110245, 0.110245, 0.110240, 0.110223, 0.110189",\ + "0.380767, 0.380767, 0.380767, 0.380767, 0.380768",\ + "1.026303, 1.026303, 1.026303, 1.026305, 1.026307"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[7]_redg_2692*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[22]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.841286, 1.079720, 1.357044, 1.842422, 2.813178",\ + "0.855126, 1.093560, 1.370884, 1.856262, 2.827017",\ + "0.878637, 1.117071, 1.394394, 1.879772, 2.850528",\ + "1.147509, 1.385943, 1.663266, 2.148643, 3.119398",\ + "1.742037, 1.980471, 2.257795, 2.743171, 3.713924",\ + "0.928696, 1.167248, 1.444662, 1.929136, 2.899111",\ + "0.942536, 1.181088, 1.458502, 1.942976, 2.912951",\ + "0.966046, 1.204598, 1.482012, 1.966486, 2.936461",\ + "1.234918, 1.473470, 1.750884, 2.235358, 3.205331",\ + "1.829447, 2.067999, 2.345412, 2.829885, 3.799858",\ + "1.009558, 1.256174, 1.532627, 2.016758, 2.986066",\ + "1.023398, 1.270014, 1.546467, 2.030598, 2.999906",\ + "1.046908, 1.293524, 1.569977, 2.054108, 3.023416",\ + "1.315780, 1.562396, 1.838849, 2.322979, 3.292286",\ + "1.910309, 2.156925, 2.433377, 2.917507, 3.886813",\ + "1.067230, 1.321729, 1.596769, 2.080671, 3.049575",\ + "1.081070, 1.335569, 1.610609, 2.094511, 3.063415",\ + "1.104580, 1.359079, 1.634119, 2.118021, 3.086925",\ + "1.373452, 1.627951, 1.902991, 2.386893, 3.355795",\ + "1.967981, 2.222480, 2.497520, 2.981421, 3.950322",\ + "1.388249, 1.685192, 1.948802, 2.430085, 3.395031",\ + "1.402089, 1.699032, 1.962642, 2.443925, 3.408871",\ + "1.425600, 1.722542, 1.986153, 2.467435, 3.432381",\ + "1.694472, 1.991414, 2.255024, 2.736306, 3.701252",\ + "2.289001, 2.585943, 2.849553, 3.330834, 4.295778"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.129963, 0.129963, 0.129966, 0.129976, 0.129998",\ + "0.157855, 0.157855, 0.157857, 0.157864, 0.157879",\ + "0.203046, 0.203046, 0.203046, 0.203049, 0.203055",\ + "0.823721, 0.823721, 0.823721, 0.823721, 0.823721",\ + "2.222145, 2.222145, 2.222145, 2.222145, 2.222145",\ + "0.129963, 0.129963, 0.129966, 0.129976, 0.129998",\ + "0.157855, 0.157855, 0.157857, 0.157864, 0.157879",\ + "0.203046, 0.203046, 0.203046, 0.203049, 0.203055",\ + "0.823721, 0.823721, 0.823721, 0.823721, 0.823721",\ + "2.222145, 2.222145, 2.222145, 2.222145, 2.222145",\ + "0.129963, 0.129963, 0.129966, 0.129976, 0.129998",\ + "0.157855, 0.157855, 0.157857, 0.157864, 0.157879",\ + "0.203046, 0.203046, 0.203046, 0.203049, 0.203055",\ + "0.823721, 0.823721, 0.823721, 0.823721, 0.823721",\ + "2.222145, 2.222145, 2.222145, 2.222145, 2.222145",\ + "0.129963, 0.129963, 0.129966, 0.129976, 0.129998",\ + "0.157855, 0.157855, 0.157857, 0.157864, 0.157879",\ + "0.203046, 0.203046, 0.203046, 0.203049, 0.203055",\ + "0.823721, 0.823721, 0.823721, 0.823721, 0.823721",\ + "2.222145, 2.222145, 2.222145, 2.222145, 2.222145",\ + "0.129963, 0.129963, 0.129966, 0.129977, 0.129998",\ + "0.157855, 0.157855, 0.157857, 0.157864, 0.157879",\ + "0.203046, 0.203046, 0.203047, 0.203049, 0.203055",\ + "0.823721, 0.823721, 0.823721, 0.823721, 0.823721",\ + "2.222145, 2.222145, 2.222145, 2.222145, 2.222145"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.776372, 1.014807, 1.292131, 1.777511, 2.748272",\ + "0.789518, 1.027952, 1.305276, 1.790656, 2.761415",\ + "0.810669, 1.049103, 1.326427, 1.811806, 2.782563",\ + "0.986879, 1.225313, 1.502636, 1.988012, 2.958764",\ + "1.321193, 1.559627, 1.836950, 2.322326, 3.293078",\ + "0.863782, 1.102334, 1.379749, 1.864226, 2.834206",\ + "0.876927, 1.115480, 1.392894, 1.877370, 2.847349",\ + "0.898079, 1.136631, 1.414045, 1.898520, 2.868497",\ + "1.074289, 1.312841, 1.590254, 2.074727, 3.044697",\ + "1.408602, 1.647155, 1.924568, 2.409040, 3.379012",\ + "0.944644, 1.191260, 1.467714, 1.951848, 2.921161",\ + "0.957790, 1.204406, 1.480859, 1.964992, 2.934304",\ + "0.978941, 1.225557, 1.502010, 1.986142, 2.955452",\ + "1.155151, 1.401767, 1.678219, 2.162348, 3.131652",\ + "1.489465, 1.736081, 2.012533, 2.496662, 3.465967",\ + "1.002316, 1.256815, 1.531856, 2.015761, 2.984670",\ + "1.015462, 1.269960, 1.545001, 2.028905, 2.997813",\ + "1.036613, 1.291111, 1.566152, 2.050055, 3.018961",\ + "1.212823, 1.467322, 1.742362, 2.226262, 3.195161",\ + "1.547137, 1.801636, 2.076675, 2.560575, 3.529476",\ + "1.323336, 1.620278, 1.883889, 2.365174, 3.330126",\ + "1.336481, 1.633424, 1.897034, 2.378319, 3.343269",\ + "1.357632, 1.654575, 1.918185, 2.399469, 3.364417",\ + "1.533842, 1.830785, 2.094395, 2.575675, 3.540617",\ + "1.868156, 2.165099, 2.428709, 2.909989, 3.874932"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.086495, 0.086495, 0.086493, 0.086486, 0.086471",\ + "0.090877, 0.090877, 0.090875, 0.090868, 0.090855",\ + "0.110244, 0.110244, 0.110243, 0.110237, 0.110224",\ + "0.380767, 0.380767, 0.380767, 0.380767, 0.380767",\ + "1.026303, 1.026303, 1.026303, 1.026304, 1.026305",\ + "0.086495, 0.086495, 0.086493, 0.086486, 0.086471",\ + "0.090877, 0.090877, 0.090875, 0.090868, 0.090855",\ + "0.110244, 0.110244, 0.110243, 0.110237, 0.110224",\ + "0.380767, 0.380767, 0.380767, 0.380767, 0.380767",\ + "1.026303, 1.026303, 1.026303, 1.026304, 1.026305",\ + "0.086495, 0.086495, 0.086493, 0.086486, 0.086471",\ + "0.090877, 0.090877, 0.090875, 0.090868, 0.090855",\ + "0.110244, 0.110244, 0.110243, 0.110237, 0.110224",\ + "0.380767, 0.380767, 0.380767, 0.380767, 0.380767",\ + "1.026303, 1.026303, 1.026303, 1.026304, 1.026305",\ + "0.086495, 0.086495, 0.086493, 0.086486, 0.086471",\ + "0.090877, 0.090877, 0.090875, 0.090868, 0.090855",\ + "0.110244, 0.110244, 0.110243, 0.110237, 0.110224",\ + "0.380767, 0.380767, 0.380767, 0.380767, 0.380767",\ + "1.026303, 1.026303, 1.026303, 1.026304, 1.026305",\ + "0.086495, 0.086495, 0.086493, 0.086486, 0.086471",\ + "0.090877, 0.090877, 0.090875, 0.090868, 0.090855",\ + "0.110244, 0.110244, 0.110243, 0.110237, 0.110224",\ + "0.380767, 0.380767, 0.380767, 0.380767, 0.380767",\ + "1.026303, 1.026303, 1.026303, 1.026304, 1.026305"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[7]_redg*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[25]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.798247, 1.048384, 1.323795, 1.814843, 2.796940",\ + "0.812087, 1.062224, 1.337635, 1.828683, 2.810778",\ + "0.835598, 1.085734, 1.361145, 1.852193, 2.834289",\ + "1.104470, 1.354606, 1.630016, 2.121061, 3.103152",\ + "1.698998, 1.949135, 2.224544, 2.715585, 3.697667",\ + "0.885653, 1.135896, 1.411429, 1.901557, 2.882874",\ + "0.899493, 1.149736, 1.425268, 1.915396, 2.896712",\ + "0.923003, 1.173246, 1.448779, 1.938907, 2.920223",\ + "1.191875, 1.442118, 1.717650, 2.207775, 3.189086",\ + "1.786403, 2.036647, 2.312177, 2.802298, 3.783601",\ + "0.966497, 1.224769, 1.499393, 1.989178, 2.969829",\ + "0.980337, 1.238609, 1.513233, 2.003017, 2.983667",\ + "1.003847, 1.262119, 1.536743, 2.026528, 3.007178",\ + "1.272719, 1.530991, 1.805614, 2.295396, 3.276041",\ + "1.867248, 2.125520, 2.400141, 2.889919, 3.870556",\ + "1.026473, 1.290246, 1.563536, 2.053091, 3.033338",\ + "1.040313, 1.304086, 1.577376, 2.066930, 3.047176",\ + "1.063823, 1.327596, 1.600886, 2.090441, 3.070687",\ + "1.332695, 1.596468, 1.869757, 2.359309, 3.339550",\ + "1.927224, 2.190996, 2.464285, 2.953832, 3.934065",\ + "1.363781, 1.652852, 1.915624, 2.402524, 3.378794",\ + "1.377621, 1.666692, 1.929464, 2.416363, 3.392632",\ + "1.401132, 1.690202, 1.952974, 2.439874, 3.416142",\ + "1.670003, 1.959074, 2.221846, 2.708742, 3.685006",\ + "2.264532, 2.553603, 2.816373, 3.303265, 4.279521"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.129964, 0.129964, 0.129977, 0.130025, 0.130119",\ + "0.157856, 0.157856, 0.157865, 0.157896, 0.157959",\ + "0.203046, 0.203046, 0.203050, 0.203062, 0.203088",\ + "0.823721, 0.823721, 0.823721, 0.823720, 0.823720",\ + "2.222145, 2.222145, 2.222145, 2.222145, 2.222145",\ + "0.129964, 0.129964, 0.129978, 0.130025, 0.130119",\ + "0.157856, 0.157856, 0.157865, 0.157896, 0.157959",\ + "0.203046, 0.203046, 0.203050, 0.203062, 0.203088",\ + "0.823721, 0.823721, 0.823721, 0.823720, 0.823720",\ + "2.222145, 2.222145, 2.222145, 2.222145, 2.222145",\ + "0.129964, 0.129964, 0.129978, 0.130025, 0.130119",\ + "0.157856, 0.157856, 0.157865, 0.157896, 0.157959",\ + "0.203046, 0.203046, 0.203050, 0.203062, 0.203088",\ + "0.823721, 0.823721, 0.823721, 0.823720, 0.823720",\ + "2.222145, 2.222145, 2.222145, 2.222145, 2.222145",\ + "0.129964, 0.129964, 0.129978, 0.130025, 0.130119",\ + "0.157856, 0.157856, 0.157865, 0.157896, 0.157959",\ + "0.203046, 0.203046, 0.203050, 0.203062, 0.203088",\ + "0.823721, 0.823721, 0.823721, 0.823720, 0.823720",\ + "2.222145, 2.222145, 2.222145, 2.222145, 2.222145",\ + "0.129964, 0.129964, 0.129978, 0.130025, 0.130119",\ + "0.157856, 0.157856, 0.157865, 0.157896, 0.157959",\ + "0.203046, 0.203046, 0.203050, 0.203062, 0.203088",\ + "0.823721, 0.823721, 0.823721, 0.823720, 0.823720",\ + "2.222145, 2.222145, 2.222145, 2.222145, 2.222145"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.733334, 0.983470, 1.258885, 1.749946, 2.732069",\ + "0.746479, 0.996616, 1.272029, 1.763087, 2.745203",\ + "0.767630, 1.017767, 1.293179, 1.784232, 2.766337",\ + "0.943840, 1.193977, 1.469384, 1.960422, 2.942497",\ + "1.278154, 1.528290, 1.803698, 2.294737, 3.276814",\ + "0.820739, 1.070982, 1.346519, 1.836660, 2.818002",\ + "0.833884, 1.084128, 1.359663, 1.849801, 2.831136",\ + "0.855036, 1.105279, 1.380813, 1.870946, 2.852271",\ + "1.031245, 1.281489, 1.557018, 2.047136, 3.028431",\ + "1.365559, 1.615803, 1.891332, 2.381451, 3.362748",\ + "0.901583, 1.159855, 1.434483, 1.924281, 2.904958",\ + "0.914729, 1.173001, 1.447627, 1.937422, 2.918091",\ + "0.935880, 1.194152, 1.468777, 1.958567, 2.939226",\ + "1.112090, 1.370362, 1.644982, 2.134757, 3.115386",\ + "1.446404, 1.704675, 1.979296, 2.469072, 3.449703",\ + "0.961559, 1.225332, 1.498626, 1.988194, 2.968467",\ + "0.974705, 1.238478, 1.511771, 2.001335, 2.981600",\ + "0.995856, 1.259629, 1.532920, 2.022480, 3.002735",\ + "1.172065, 1.435838, 1.709126, 2.198669, 3.178895",\ + "1.506379, 1.770152, 2.043440, 2.532985, 3.513212",\ + "1.298868, 1.587939, 1.850715, 2.337627, 3.313922",\ + "1.312013, 1.601084, 1.863859, 2.350768, 3.327056",\ + "1.333164, 1.622235, 1.885009, 2.371913, 3.348191",\ + "1.509374, 1.798445, 2.061214, 2.548103, 3.524351",\ + "1.843688, 2.132759, 2.395528, 2.882418, 3.858668"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.086494, 0.086494, 0.086484, 0.086448, 0.086375",\ + "0.090876, 0.090876, 0.090867, 0.090834, 0.090768",\ + "0.110244, 0.110244, 0.110235, 0.110204, 0.110143",\ + "0.380767, 0.380767, 0.380767, 0.380767, 0.380768",\ + "1.026303, 1.026303, 1.026304, 1.026306, 1.026310",\ + "0.086494, 0.086494, 0.086484, 0.086448, 0.086375",\ + "0.090876, 0.090876, 0.090867, 0.090834, 0.090768",\ + "0.110244, 0.110244, 0.110235, 0.110204, 0.110143",\ + "0.380767, 0.380767, 0.380767, 0.380767, 0.380768",\ + "1.026303, 1.026303, 1.026304, 1.026306, 1.026310",\ + "0.086494, 0.086494, 0.086484, 0.086448, 0.086375",\ + "0.090876, 0.090876, 0.090867, 0.090834, 0.090768",\ + "0.110244, 0.110244, 0.110235, 0.110204, 0.110143",\ + "0.380767, 0.380767, 0.380767, 0.380767, 0.380768",\ + "1.026303, 1.026303, 1.026304, 1.026306, 1.026310",\ + "0.086494, 0.086494, 0.086484, 0.086448, 0.086375",\ + "0.090876, 0.090876, 0.090867, 0.090834, 0.090768",\ + "0.110244, 0.110244, 0.110235, 0.110204, 0.110143",\ + "0.380767, 0.380767, 0.380767, 0.380767, 0.380768",\ + "1.026303, 1.026303, 1.026304, 1.026306, 1.026310",\ + "0.086494, 0.086494, 0.086483, 0.086447, 0.086375",\ + "0.090876, 0.090876, 0.090866, 0.090834, 0.090768",\ + "0.110244, 0.110244, 0.110234, 0.110204, 0.110143",\ + "0.380767, 0.380767, 0.380767, 0.380767, 0.380768",\ + "1.026303, 1.026303, 1.026304, 1.026306, 1.026310"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[7]_redg_2506*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[29]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.669029, 0.924047, 1.180422, 1.619320, 2.497118",\ + "0.682742, 0.937760, 1.194134, 1.633031, 2.510826",\ + "0.706267, 0.961286, 1.217660, 1.656557, 2.534352",\ + "0.974450, 1.229468, 1.485840, 1.924731, 2.802514",\ + "1.567911, 1.822930, 2.079299, 2.518181, 3.395944",\ + "0.756434, 1.011535, 1.267892, 1.706034, 2.583051",\ + "0.770147, 1.025247, 1.281604, 1.719745, 2.596760",\ + "0.793673, 1.048773, 1.305130, 1.743271, 2.620286",\ + "1.061855, 1.316955, 1.573310, 2.011445, 2.888448",\ + "1.655316, 1.910417, 2.166769, 2.604894, 3.481877",\ + "0.844902, 1.100352, 1.355853, 1.793655, 2.670006",\ + "0.858615, 1.114065, 1.369565, 1.807366, 2.683715",\ + "0.882141, 1.137591, 1.393091, 1.830892, 2.707241",\ + "1.150323, 1.405773, 1.661271, 2.099066, 2.975403",\ + "1.743784, 1.999234, 2.254730, 2.692515, 3.568832",\ + "0.908398, 1.165749, 1.419987, 1.857568, 2.733515",\ + "0.922111, 1.179461, 1.433699, 1.871279, 2.747224",\ + "0.945637, 1.202987, 1.457225, 1.894805, 2.770750",\ + "1.213819, 1.471169, 1.725405, 2.162979, 3.038912",\ + "1.807280, 2.064631, 2.318864, 2.756428, 3.632341",\ + "1.243831, 1.527415, 1.771546, 2.206786, 3.078971",\ + "1.257544, 1.541128, 1.785259, 2.220497, 3.092680",\ + "1.281070, 1.564654, 1.808785, 2.244023, 3.116206",\ + "1.549252, 1.832836, 2.076965, 2.512197, 3.384368",\ + "2.142714, 2.426297, 2.670424, 3.105646, 3.977798"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.126073, 0.126073, 0.126073, 0.126072, 0.126070",\ + "0.155270, 0.155270, 0.155270, 0.155269, 0.155268",\ + "0.202000, 0.202000, 0.202000, 0.201999, 0.201999",\ + "0.823664, 0.823664, 0.823664, 0.823664, 0.823663",\ + "2.222140, 2.222140, 2.222140, 2.222140, 2.222140",\ + "0.126073, 0.126073, 0.126073, 0.126072, 0.126070",\ + "0.155270, 0.155270, 0.155270, 0.155269, 0.155268",\ + "0.202000, 0.202000, 0.202000, 0.201999, 0.201999",\ + "0.823664, 0.823664, 0.823664, 0.823664, 0.823663",\ + "2.222140, 2.222140, 2.222140, 2.222140, 2.222140",\ + "0.126073, 0.126073, 0.126073, 0.126072, 0.126070",\ + "0.155270, 0.155270, 0.155270, 0.155269, 0.155268",\ + "0.202000, 0.202000, 0.202000, 0.201999, 0.201999",\ + "0.823664, 0.823664, 0.823664, 0.823664, 0.823663",\ + "2.222140, 2.222140, 2.222140, 2.222140, 2.222140",\ + "0.126073, 0.126073, 0.126073, 0.126072, 0.126070",\ + "0.155270, 0.155270, 0.155270, 0.155269, 0.155268",\ + "0.202000, 0.202000, 0.202000, 0.201999, 0.201999",\ + "0.823664, 0.823664, 0.823664, 0.823664, 0.823663",\ + "2.222140, 2.222140, 2.222140, 2.222140, 2.222140",\ + "0.126073, 0.126073, 0.126073, 0.126072, 0.126070",\ + "0.155270, 0.155270, 0.155270, 0.155269, 0.155268",\ + "0.202000, 0.202000, 0.202000, 0.201999, 0.201999",\ + "0.823664, 0.823664, 0.823664, 0.823664, 0.823663",\ + "2.222140, 2.222140, 2.222140, 2.222140, 2.222140"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.607434, 0.862452, 1.118835, 1.557764, 2.435622",\ + "0.619657, 0.874676, 1.131056, 1.569977, 2.447818",\ + "0.639561, 0.894580, 1.150957, 1.589866, 2.467684",\ + "0.811812, 1.066830, 1.323197, 1.762070, 2.639816",\ + "1.146382, 1.401400, 1.657768, 2.096643, 2.974393",\ + "0.694839, 0.949939, 1.206305, 1.644478, 2.521555",\ + "0.707062, 0.962163, 1.218526, 1.656691, 2.533751",\ + "0.726967, 0.982067, 1.238427, 1.676580, 2.553618",\ + "0.899217, 1.154317, 1.410667, 1.848784, 2.725749",\ + "1.233787, 1.488888, 1.745238, 2.183357, 3.060327",\ + "0.783307, 1.038757, 1.294266, 1.732099, 2.608510",\ + "0.795531, 1.050981, 1.306487, 1.744312, 2.620707",\ + "0.815435, 1.070885, 1.326388, 1.764201, 2.640573",\ + "0.987685, 1.243135, 1.498628, 1.936405, 2.812705",\ + "1.322255, 1.577705, 1.833199, 2.270978, 3.147282",\ + "0.846803, 1.104153, 1.358401, 1.796012, 2.672019",\ + "0.859026, 1.116377, 1.370622, 1.808224, 2.684216",\ + "0.878930, 1.136281, 1.390523, 1.828114, 2.704082",\ + "1.051181, 1.308532, 1.562762, 2.000318, 2.876214",\ + "1.385751, 1.643102, 1.897333, 2.334891, 3.210791",\ + "1.182236, 1.465820, 1.709960, 2.145230, 3.017476",\ + "1.194460, 1.478043, 1.722182, 2.157442, 3.029672",\ + "1.214364, 1.497947, 1.742082, 2.177332, 3.049538",\ + "1.386614, 1.670198, 1.914322, 2.349535, 3.221670",\ + "1.721184, 2.004768, 2.248892, 2.684108, 3.556247"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.077163, 0.077163, 0.077138, 0.077052, 0.076882",\ + "0.082420, 0.082420, 0.082398, 0.082320, 0.082166",\ + "0.102329, 0.102329, 0.102308, 0.102236, 0.102091",\ + "0.380733, 0.380733, 0.380733, 0.380733, 0.380733",\ + "1.026132, 1.026132, 1.026132, 1.026132, 1.026132",\ + "0.077163, 0.077163, 0.077137, 0.077052, 0.076882",\ + "0.082420, 0.082420, 0.082397, 0.082320, 0.082166",\ + "0.102329, 0.102329, 0.102308, 0.102236, 0.102091",\ + "0.380733, 0.380733, 0.380733, 0.380733, 0.380733",\ + "1.026132, 1.026132, 1.026132, 1.026132, 1.026132",\ + "0.077163, 0.077163, 0.077137, 0.077052, 0.076882",\ + "0.082420, 0.082420, 0.082397, 0.082320, 0.082166",\ + "0.102329, 0.102329, 0.102308, 0.102236, 0.102091",\ + "0.380733, 0.380733, 0.380733, 0.380733, 0.380733",\ + "1.026132, 1.026132, 1.026132, 1.026132, 1.026132",\ + "0.077163, 0.077163, 0.077137, 0.077052, 0.076882",\ + "0.082420, 0.082420, 0.082397, 0.082320, 0.082166",\ + "0.102329, 0.102329, 0.102308, 0.102236, 0.102091",\ + "0.380733, 0.380733, 0.380733, 0.380733, 0.380733",\ + "1.026132, 1.026132, 1.026132, 1.026132, 1.026132",\ + "0.077163, 0.077163, 0.077137, 0.077052, 0.076882",\ + "0.082420, 0.082420, 0.082397, 0.082320, 0.082166",\ + "0.102329, 0.102329, 0.102307, 0.102236, 0.102091",\ + "0.380733, 0.380733, 0.380733, 0.380733, 0.380733",\ + "1.026132, 1.026132, 1.026132, 1.026132, 1.026132"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[7]_redg_2663*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[30]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.646825, 0.888812, 1.155481, 1.637557, 2.601710",\ + "0.660538, 0.902524, 1.169192, 1.651265, 2.615411",\ + "0.684064, 0.926050, 1.192718, 1.674791, 2.638938",\ + "0.952246, 1.194231, 1.460892, 1.942948, 2.907060",\ + "1.545707, 1.787690, 2.054341, 2.536369, 3.500427",\ + "0.734227, 0.976289, 1.243085, 1.724270, 2.687644",\ + "0.747939, 0.990001, 1.256796, 1.737978, 2.701345",\ + "0.771465, 1.013527, 1.280322, 1.761504, 2.724872",\ + "1.039647, 1.281708, 1.548496, 2.029661, 2.992994",\ + "1.633109, 1.875167, 2.141944, 2.623083, 3.586361",\ + "0.815033, 1.065071, 1.331047, 1.811891, 2.774599",\ + "0.828746, 1.078784, 1.344759, 1.825599, 2.788300",\ + "0.852272, 1.102309, 1.368284, 1.849125, 2.811827",\ + "1.120454, 1.370490, 1.636458, 2.117281, 3.079949",\ + "1.713915, 1.963950, 2.229907, 2.710703, 3.673316",\ + "0.875218, 1.130416, 1.395189, 1.875803, 2.838108",\ + "0.888931, 1.144128, 1.408900, 1.889511, 2.851809",\ + "0.912457, 1.167654, 1.432426, 1.913038, 2.875336",\ + "1.180639, 1.435834, 1.700600, 2.181194, 3.143458",\ + "1.774100, 2.029294, 2.294049, 2.774616, 3.736825",\ + "1.213104, 1.491515, 1.747184, 2.225196, 3.183564",\ + "1.226817, 1.505228, 1.760895, 2.238904, 3.197265",\ + "1.250343, 1.528753, 1.784421, 2.262430, 3.220792",\ + "1.518525, 1.796934, 2.052595, 2.530586, 3.488914",\ + "2.111986, 2.390392, 2.646044, 3.124008, 4.082281"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.126070, 0.126070, 0.126065, 0.126046, 0.126010",\ + "0.155268, 0.155268, 0.155265, 0.155253, 0.155228",\ + "0.201999, 0.201999, 0.201998, 0.201993, 0.201983",\ + "0.823664, 0.823664, 0.823664, 0.823662, 0.823659",\ + "2.222140, 2.222140, 2.222140, 2.222140, 2.222140",\ + "0.126070, 0.126070, 0.126065, 0.126046, 0.126010",\ + "0.155268, 0.155268, 0.155265, 0.155253, 0.155228",\ + "0.201999, 0.201999, 0.201998, 0.201993, 0.201983",\ + "0.823664, 0.823664, 0.823664, 0.823662, 0.823659",\ + "2.222140, 2.222140, 2.222140, 2.222140, 2.222140",\ + "0.126070, 0.126070, 0.126065, 0.126046, 0.126010",\ + "0.155268, 0.155268, 0.155265, 0.155253, 0.155228",\ + "0.201999, 0.201999, 0.201998, 0.201993, 0.201983",\ + "0.823664, 0.823664, 0.823664, 0.823662, 0.823659",\ + "2.222140, 2.222140, 2.222140, 2.222140, 2.222140",\ + "0.126070, 0.126070, 0.126065, 0.126046, 0.126010",\ + "0.155268, 0.155268, 0.155265, 0.155253, 0.155228",\ + "0.201999, 0.201999, 0.201998, 0.201993, 0.201983",\ + "0.823664, 0.823664, 0.823664, 0.823662, 0.823659",\ + "2.222140, 2.222140, 2.222140, 2.222140, 2.222140",\ + "0.126070, 0.126070, 0.126065, 0.126046, 0.126010",\ + "0.155268, 0.155268, 0.155265, 0.155253, 0.155228",\ + "0.201999, 0.201999, 0.201998, 0.201993, 0.201983",\ + "0.823664, 0.823664, 0.823664, 0.823662, 0.823659",\ + "2.222140, 2.222140, 2.222140, 2.222140, 2.222140"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.585231, 0.827223, 1.093925, 1.576086, 2.540408",\ + "0.597454, 0.839445, 1.106138, 1.588275, 2.552550",\ + "0.617358, 0.859347, 1.126027, 1.608132, 2.572344",\ + "0.789607, 1.031589, 1.298230, 1.780235, 2.744245",\ + "1.124177, 1.366160, 1.632803, 2.114814, 3.078838",\ + "0.672632, 0.914701, 1.181530, 1.662799, 2.626341",\ + "0.684856, 0.926922, 1.193742, 1.674988, 2.638484",\ + "0.704759, 0.946824, 1.213631, 1.694846, 2.658278",\ + "0.877009, 1.119066, 1.385834, 1.866948, 2.830179",\ + "1.211579, 1.453637, 1.720407, 2.201528, 3.164772",\ + "0.753439, 1.003483, 1.269492, 1.750420, 2.713296",\ + "0.765663, 1.015705, 1.281705, 1.762609, 2.725439",\ + "0.785566, 1.035606, 1.301594, 1.782466, 2.745233",\ + "0.957816, 1.207848, 1.473796, 1.954568, 2.917134",\ + "1.292386, 1.542419, 1.808370, 2.289148, 3.251727",\ + "0.813624, 1.068828, 1.333634, 1.814332, 2.776805",\ + "0.825847, 1.081049, 1.345847, 1.826521, 2.788948",\ + "0.845751, 1.100950, 1.365736, 1.846379, 2.808742",\ + "1.018000, 1.273192, 1.537938, 2.018481, 2.980643",\ + "1.352571, 1.607763, 1.872511, 2.353061, 3.315236",\ + "1.151510, 1.429929, 1.685630, 2.163725, 3.122262",\ + "1.163733, 1.442150, 1.697842, 2.175914, 3.134404",\ + "1.183637, 1.462051, 1.717731, 2.195772, 3.154198",\ + "1.355886, 1.634290, 1.889933, 2.367873, 3.326099",\ + "1.690457, 1.968861, 2.224506, 2.702453, 3.660692"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.077160, 0.077143, 0.077050, 0.076813, 0.076339",\ + "0.082418, 0.082403, 0.082319, 0.082104, 0.081674",\ + "0.102327, 0.102313, 0.102234, 0.102033, 0.101631",\ + "0.380733, 0.380733, 0.380733, 0.380733, 0.380732",\ + "1.026132, 1.026132, 1.026131, 1.026130, 1.026129",\ + "0.077160, 0.077143, 0.077050, 0.076813, 0.076339",\ + "0.082418, 0.082403, 0.082318, 0.082104, 0.081674",\ + "0.102327, 0.102313, 0.102234, 0.102033, 0.101631",\ + "0.380733, 0.380733, 0.380733, 0.380733, 0.380732",\ + "1.026132, 1.026132, 1.026131, 1.026130, 1.026129",\ + "0.077160, 0.077143, 0.077050, 0.076813, 0.076339",\ + "0.082418, 0.082402, 0.082318, 0.082104, 0.081674",\ + "0.102327, 0.102313, 0.102234, 0.102033, 0.101631",\ + "0.380733, 0.380733, 0.380733, 0.380733, 0.380732",\ + "1.026132, 1.026132, 1.026131, 1.026130, 1.026129",\ + "0.077160, 0.077142, 0.077050, 0.076813, 0.076339",\ + "0.082418, 0.082402, 0.082318, 0.082104, 0.081674",\ + "0.102327, 0.102312, 0.102234, 0.102033, 0.101631",\ + "0.380733, 0.380733, 0.380733, 0.380733, 0.380732",\ + "1.026132, 1.026132, 1.026131, 1.026130, 1.026129",\ + "0.077160, 0.077137, 0.077047, 0.076812, 0.076339",\ + "0.082418, 0.082397, 0.082316, 0.082103, 0.081674",\ + "0.102327, 0.102307, 0.102232, 0.102032, 0.101631",\ + "0.380733, 0.380733, 0.380733, 0.380733, 0.380732",\ + "1.026132, 1.026132, 1.026131, 1.026130, 1.026129"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[7]_redg_2738*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[34]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.837009, 1.103664, 1.394023, 1.889858, 2.881526",\ + "0.850722, 1.117377, 1.407736, 1.903570, 2.895239",\ + "0.874247, 1.140903, 1.431262, 1.927096, 2.918765",\ + "1.142429, 1.409085, 1.699444, 2.195278, 3.186947",\ + "1.735891, 2.002547, 2.292906, 2.788740, 3.780409",\ + "0.924420, 1.191252, 1.481675, 1.976572, 2.967460",\ + "0.938133, 1.204965, 1.495388, 1.990285, 2.981173",\ + "0.961659, 1.228491, 1.518914, 2.013811, 3.004699",\ + "1.229841, 1.496673, 1.787096, 2.281993, 3.272881",\ + "1.823303, 2.090135, 2.380557, 2.875455, 3.866343",\ + "1.005339, 1.280324, 1.569641, 2.064194, 3.054415",\ + "1.019052, 1.294036, 1.583354, 2.077907, 3.068128",\ + "1.042578, 1.317562, 1.606879, 2.101433, 3.091654",\ + "1.310760, 1.585744, 1.875061, 2.369615, 3.359836",\ + "1.904221, 2.179206, 2.468523, 2.963077, 3.953298",\ + "1.066406, 1.346091, 1.633785, 2.128108, 3.117924",\ + "1.080119, 1.359803, 1.647498, 2.141821, 3.131637",\ + "1.103644, 1.383329, 1.671023, 2.165346, 3.155163",\ + "1.371826, 1.651511, 1.939205, 2.433528, 3.423345",\ + "1.965288, 2.244973, 2.532667, 3.026990, 4.016807",\ + "1.402561, 1.712010, 1.985925, 2.477567, 3.463380",\ + "1.416273, 1.725723, 1.999638, 2.491279, 3.477093",\ + "1.439799, 1.749248, 2.023164, 2.514805, 3.500619",\ + "1.707981, 2.017431, 2.291346, 2.782987, 3.768801",\ + "2.301443, 2.610892, 2.884808, 3.376449, 4.362263"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.126073, 0.126073, 0.126073, 0.126073, 0.126073",\ + "0.155270, 0.155270, 0.155270, 0.155270, 0.155270",\ + "0.202000, 0.202000, 0.202000, 0.202000, 0.202000",\ + "0.823664, 0.823664, 0.823664, 0.823664, 0.823664",\ + "2.222140, 2.222140, 2.222140, 2.222140, 2.222140",\ + "0.126073, 0.126073, 0.126073, 0.126073, 0.126073",\ + "0.155270, 0.155270, 0.155270, 0.155270, 0.155270",\ + "0.202000, 0.202000, 0.202000, 0.202000, 0.202000",\ + "0.823664, 0.823664, 0.823664, 0.823664, 0.823664",\ + "2.222140, 2.222140, 2.222140, 2.222140, 2.222140",\ + "0.126073, 0.126073, 0.126073, 0.126073, 0.126073",\ + "0.155270, 0.155270, 0.155270, 0.155270, 0.155270",\ + "0.202000, 0.202000, 0.202000, 0.202000, 0.202000",\ + "0.823664, 0.823664, 0.823664, 0.823664, 0.823664",\ + "2.222140, 2.222140, 2.222140, 2.222140, 2.222140",\ + "0.126073, 0.126073, 0.126073, 0.126073, 0.126073",\ + "0.155270, 0.155270, 0.155270, 0.155270, 0.155270",\ + "0.202000, 0.202000, 0.202000, 0.202000, 0.202000",\ + "0.823664, 0.823664, 0.823664, 0.823664, 0.823664",\ + "2.222140, 2.222140, 2.222140, 2.222140, 2.222140",\ + "0.126073, 0.126073, 0.126073, 0.126073, 0.126073",\ + "0.155270, 0.155270, 0.155270, 0.155270, 0.155270",\ + "0.202000, 0.202000, 0.202000, 0.202000, 0.202000",\ + "0.823664, 0.823664, 0.823664, 0.823664, 0.823664",\ + "2.222140, 2.222140, 2.222140, 2.222140, 2.222140"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.775414, 1.042069, 1.332428, 1.828263, 2.819932",\ + "0.787637, 1.054293, 1.344652, 1.840486, 2.832155",\ + "0.807541, 1.074197, 1.364556, 1.860390, 2.852059",\ + "0.979792, 1.246447, 1.536806, 2.032640, 3.024309",\ + "1.314362, 1.581017, 1.871376, 2.367211, 3.358880",\ + "0.862825, 1.129657, 1.420080, 1.914977, 2.905865",\ + "0.875049, 1.141881, 1.432303, 1.927201, 2.918089",\ + "0.894953, 1.161785, 1.452208, 1.947105, 2.937993",\ + "1.067203, 1.334035, 1.624458, 2.119355, 3.110243",\ + "1.401773, 1.668605, 1.959028, 2.453925, 3.444813",\ + "0.943744, 1.218729, 1.508046, 2.002599, 2.992820",\ + "0.955968, 1.230952, 1.520269, 2.014823, 3.005044",\ + "0.975872, 1.250856, 1.540173, 2.034727, 3.024948",\ + "1.148122, 1.423107, 1.712424, 2.206977, 3.197198",\ + "1.482692, 1.757677, 2.046994, 2.541547, 3.531768",\ + "1.004811, 1.284495, 1.572190, 2.066513, 3.056329",\ + "1.017034, 1.296719, 1.584413, 2.078736, 3.068553",\ + "1.036938, 1.316623, 1.604317, 2.098640, 3.088457",\ + "1.209189, 1.488873, 1.776568, 2.270891, 3.260707",\ + "1.543759, 1.823443, 2.111138, 2.605461, 3.595277",\ + "1.340966, 1.650415, 1.924330, 2.415972, 3.401785",\ + "1.353189, 1.662638, 1.936553, 2.428195, 3.414009",\ + "1.373093, 1.682542, 1.956458, 2.448099, 3.433913",\ + "1.545344, 1.854793, 2.128708, 2.620349, 3.606163",\ + "1.879914, 2.189363, 2.463278, 2.954920, 3.940733"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.077162, 0.077162, 0.077162, 0.077162, 0.077162",\ + "0.082420, 0.082420, 0.082420, 0.082420, 0.082420",\ + "0.102329, 0.102329, 0.102329, 0.102329, 0.102329",\ + "0.380733, 0.380733, 0.380733, 0.380733, 0.380733",\ + "1.026132, 1.026132, 1.026132, 1.026132, 1.026132",\ + "0.077162, 0.077162, 0.077162, 0.077162, 0.077162",\ + "0.082420, 0.082420, 0.082420, 0.082420, 0.082420",\ + "0.102329, 0.102329, 0.102329, 0.102329, 0.102329",\ + "0.380733, 0.380733, 0.380733, 0.380733, 0.380733",\ + "1.026132, 1.026132, 1.026132, 1.026132, 1.026132",\ + "0.077162, 0.077162, 0.077162, 0.077162, 0.077162",\ + "0.082420, 0.082420, 0.082420, 0.082420, 0.082420",\ + "0.102329, 0.102329, 0.102329, 0.102329, 0.102329",\ + "0.380733, 0.380733, 0.380733, 0.380733, 0.380733",\ + "1.026132, 1.026132, 1.026132, 1.026132, 1.026132",\ + "0.077162, 0.077162, 0.077162, 0.077162, 0.077162",\ + "0.082420, 0.082420, 0.082420, 0.082420, 0.082420",\ + "0.102329, 0.102329, 0.102329, 0.102329, 0.102329",\ + "0.380733, 0.380733, 0.380733, 0.380733, 0.380733",\ + "1.026132, 1.026132, 1.026132, 1.026132, 1.026132",\ + "0.077162, 0.077162, 0.077162, 0.077162, 0.077162",\ + "0.082420, 0.082420, 0.082420, 0.082420, 0.082420",\ + "0.102329, 0.102329, 0.102329, 0.102329, 0.102329",\ + "0.380733, 0.380733, 0.380733, 0.380733, 0.380733",\ + "1.026132, 1.026132, 1.026132, 1.026132, 1.026132"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[7]_redg_2382*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[35]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.820636, 1.072596, 1.352895, 1.817949, 2.748057",\ + "0.834349, 1.086309, 1.366608, 1.831662, 2.761770",\ + "0.857874, 1.109835, 1.390133, 1.855188, 2.785295",\ + "1.126056, 1.378017, 1.658316, 2.123370, 3.053478",\ + "1.719518, 1.971479, 2.251777, 2.716831, 3.646940",\ + "0.908045, 1.160181, 1.440449, 1.904663, 2.833991",\ + "0.921758, 1.173894, 1.454162, 1.918376, 2.847703",\ + "0.945284, 1.197419, 1.477687, 1.941902, 2.871229",\ + "1.213466, 1.465601, 1.745869, 2.210084, 3.139411",\ + "1.806928, 2.059063, 2.339331, 2.803546, 3.732873",\ + "0.988950, 1.249236, 1.528412, 1.992285, 2.920946",\ + "1.002662, 1.262948, 1.542125, 2.005998, 2.934659",\ + "1.026188, 1.286474, 1.565651, 2.029524, 2.958184",\ + "1.294370, 1.554656, 1.833833, 2.297706, 3.226367",\ + "1.887832, 2.148118, 2.427295, 2.891167, 3.819828",\ + "1.046704, 1.314977, 1.592551, 2.056198, 2.984455",\ + "1.060416, 1.328690, 1.606264, 2.069911, 2.998168",\ + "1.083942, 1.352216, 1.629790, 2.093437, 3.021693",\ + "1.352124, 1.620398, 1.897972, 2.361619, 3.289876",\ + "1.945586, 2.213860, 2.491434, 2.955081, 3.883337",\ + "1.375818, 1.680630, 1.944378, 2.405528, 3.329911",\ + "1.389531, 1.694343, 1.958091, 2.419240, 3.343624",\ + "1.413056, 1.717869, 1.981617, 2.442766, 3.367149",\ + "1.681239, 1.986051, 2.249799, 2.710948, 3.635332",\ + "2.274700, 2.579513, 2.843261, 3.304410, 4.228793"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.126073, 0.126073, 0.126073, 0.126073, 0.126073",\ + "0.155270, 0.155270, 0.155270, 0.155270, 0.155270",\ + "0.202000, 0.202000, 0.202000, 0.202000, 0.202000",\ + "0.823664, 0.823664, 0.823664, 0.823664, 0.823664",\ + "2.222140, 2.222140, 2.222140, 2.222140, 2.222140",\ + "0.126073, 0.126073, 0.126073, 0.126073, 0.126073",\ + "0.155270, 0.155270, 0.155270, 0.155270, 0.155270",\ + "0.202000, 0.202000, 0.202000, 0.202000, 0.202000",\ + "0.823664, 0.823664, 0.823664, 0.823664, 0.823664",\ + "2.222140, 2.222140, 2.222140, 2.222140, 2.222140",\ + "0.126073, 0.126073, 0.126073, 0.126073, 0.126073",\ + "0.155270, 0.155270, 0.155270, 0.155270, 0.155270",\ + "0.202000, 0.202000, 0.202000, 0.202000, 0.202000",\ + "0.823664, 0.823664, 0.823664, 0.823664, 0.823664",\ + "2.222140, 2.222140, 2.222140, 2.222140, 2.222140",\ + "0.126073, 0.126073, 0.126073, 0.126073, 0.126073",\ + "0.155270, 0.155270, 0.155270, 0.155270, 0.155270",\ + "0.202000, 0.202000, 0.202000, 0.202000, 0.202000",\ + "0.823664, 0.823664, 0.823664, 0.823664, 0.823664",\ + "2.222140, 2.222140, 2.222140, 2.222140, 2.222140",\ + "0.126073, 0.126073, 0.126073, 0.126073, 0.126073",\ + "0.155270, 0.155270, 0.155270, 0.155270, 0.155270",\ + "0.202000, 0.202000, 0.202000, 0.202000, 0.202000",\ + "0.823664, 0.823664, 0.823664, 0.823664, 0.823664",\ + "2.222140, 2.222140, 2.222140, 2.222140, 2.222140"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.759041, 1.011001, 1.291300, 1.756354, 2.686462",\ + "0.771264, 1.023225, 1.303523, 1.768578, 2.698686",\ + "0.791168, 1.043129, 1.323427, 1.788481, 2.718590",\ + "0.963419, 1.215379, 1.495678, 1.960732, 2.890840",\ + "1.297989, 1.549949, 1.830248, 2.295302, 3.225410",\ + "0.846450, 1.098586, 1.378854, 1.843068, 2.772396",\ + "0.858674, 1.110809, 1.391077, 1.855292, 2.784619",\ + "0.878578, 1.130713, 1.410981, 1.875196, 2.804523",\ + "1.050828, 1.302964, 1.583232, 2.047446, 2.976774",\ + "1.385398, 1.637534, 1.917802, 2.382016, 3.311344",\ + "0.927355, 1.187640, 1.466817, 1.930690, 2.859351",\ + "0.939578, 1.199864, 1.479041, 1.942914, 2.871574",\ + "0.959482, 1.219768, 1.498945, 1.962818, 2.891478",\ + "1.131733, 1.392018, 1.671195, 2.135068, 3.063729",\ + "1.466303, 1.726588, 2.005765, 2.469638, 3.398299",\ + "0.985108, 1.253382, 1.530956, 1.994603, 2.922860",\ + "0.997332, 1.265606, 1.543180, 2.006827, 2.935083",\ + "1.017236, 1.285510, 1.563084, 2.026731, 2.954987",\ + "1.189487, 1.457760, 1.735334, 2.198981, 3.127238",\ + "1.524057, 1.792330, 2.069904, 2.533551, 3.461808",\ + "1.314223, 1.619035, 1.882783, 2.343933, 3.268316",\ + "1.326446, 1.631259, 1.895007, 2.356156, 3.280540",\ + "1.346350, 1.651163, 1.914911, 2.376060, 3.300443",\ + "1.518601, 1.823413, 2.087161, 2.548311, 3.472694",\ + "1.853171, 2.157983, 2.421731, 2.882881, 3.807264"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.077162, 0.077162, 0.077162, 0.077162, 0.077162",\ + "0.082420, 0.082420, 0.082420, 0.082420, 0.082420",\ + "0.102329, 0.102329, 0.102329, 0.102329, 0.102329",\ + "0.380733, 0.380733, 0.380733, 0.380733, 0.380733",\ + "1.026132, 1.026132, 1.026132, 1.026132, 1.026132",\ + "0.077162, 0.077162, 0.077162, 0.077162, 0.077162",\ + "0.082420, 0.082420, 0.082420, 0.082420, 0.082420",\ + "0.102329, 0.102329, 0.102329, 0.102329, 0.102329",\ + "0.380733, 0.380733, 0.380733, 0.380733, 0.380733",\ + "1.026132, 1.026132, 1.026132, 1.026132, 1.026132",\ + "0.077162, 0.077162, 0.077162, 0.077162, 0.077162",\ + "0.082420, 0.082420, 0.082420, 0.082420, 0.082420",\ + "0.102329, 0.102329, 0.102329, 0.102329, 0.102329",\ + "0.380733, 0.380733, 0.380733, 0.380733, 0.380733",\ + "1.026132, 1.026132, 1.026132, 1.026132, 1.026132",\ + "0.077162, 0.077162, 0.077162, 0.077162, 0.077162",\ + "0.082420, 0.082420, 0.082420, 0.082420, 0.082420",\ + "0.102329, 0.102329, 0.102329, 0.102329, 0.102329",\ + "0.380733, 0.380733, 0.380733, 0.380733, 0.380733",\ + "1.026132, 1.026132, 1.026132, 1.026132, 1.026132",\ + "0.077162, 0.077162, 0.077162, 0.077162, 0.077162",\ + "0.082420, 0.082420, 0.082420, 0.082420, 0.082420",\ + "0.102329, 0.102329, 0.102329, 0.102329, 0.102329",\ + "0.380733, 0.380733, 0.380733, 0.380733, 0.380733",\ + "1.026132, 1.026132, 1.026132, 1.026132, 1.026132"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[7]_redg_2443*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[38]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.834699, 1.095622, 1.384637, 1.885838, 2.888237",\ + "0.848411, 1.109334, 1.398350, 1.899550, 2.901949",\ + "0.871937, 1.132860, 1.421876, 1.923076, 2.925475",\ + "1.140119, 1.401042, 1.690057, 2.191256, 3.193652",\ + "1.733580, 1.994503, 2.283517, 2.784714, 3.787106",\ + "0.922107, 1.183198, 1.472305, 1.972552, 2.974171",\ + "0.935819, 1.196910, 1.486017, 1.986264, 2.987883",\ + "0.959345, 1.220436, 1.509543, 2.009790, 3.011409",\ + "1.227527, 1.488618, 1.777724, 2.277970, 3.279586",\ + "1.820988, 2.082079, 2.371185, 2.871428, 3.873040",\ + "1.002997, 1.272227, 1.560270, 2.060173, 3.061126",\ + "1.016710, 1.285939, 1.573983, 2.073886, 3.074838",\ + "1.040236, 1.309465, 1.597508, 2.097411, 3.098364",\ + "1.308417, 1.577647, 1.865690, 2.365591, 3.366541",\ + "1.901878, 2.171108, 2.459150, 2.959049, 3.959995",\ + "1.063922, 1.337931, 1.624415, 2.124086, 3.124635",\ + "1.077635, 1.351643, 1.638128, 2.137799, 3.138347",\ + "1.101161, 1.375169, 1.661654, 2.161325, 3.161873",\ + "1.369342, 1.643351, 1.929835, 2.429504, 3.430050",\ + "1.962803, 2.236812, 2.523295, 3.022963, 4.023504",\ + "1.400271, 1.703161, 1.976608, 2.473565, 3.470091",\ + "1.413984, 1.716874, 1.990321, 2.487277, 3.483803",\ + "1.437509, 1.740399, 2.013846, 2.510803, 3.507329",\ + "1.705691, 2.008581, 2.282028, 2.778982, 3.775506",\ + "2.299152, 2.602042, 2.875488, 3.372441, 4.368960"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.126070, 0.126070, 0.126070, 0.126069, 0.126068",\ + "0.155268, 0.155268, 0.155268, 0.155268, 0.155267",\ + "0.201999, 0.201999, 0.201999, 0.201999, 0.201998",\ + "0.823664, 0.823664, 0.823664, 0.823664, 0.823664",\ + "2.222140, 2.222140, 2.222140, 2.222140, 2.222140",\ + "0.126070, 0.126070, 0.126070, 0.126069, 0.126068",\ + "0.155268, 0.155268, 0.155268, 0.155268, 0.155267",\ + "0.201999, 0.201999, 0.201999, 0.201999, 0.201998",\ + "0.823664, 0.823664, 0.823664, 0.823664, 0.823664",\ + "2.222140, 2.222140, 2.222140, 2.222140, 2.222140",\ + "0.126070, 0.126070, 0.126070, 0.126069, 0.126068",\ + "0.155268, 0.155268, 0.155268, 0.155268, 0.155267",\ + "0.201999, 0.201999, 0.201999, 0.201999, 0.201998",\ + "0.823664, 0.823664, 0.823664, 0.823664, 0.823664",\ + "2.222140, 2.222140, 2.222140, 2.222140, 2.222140",\ + "0.126070, 0.126070, 0.126070, 0.126069, 0.126068",\ + "0.155268, 0.155268, 0.155268, 0.155268, 0.155267",\ + "0.201999, 0.201999, 0.201999, 0.201999, 0.201998",\ + "0.823664, 0.823664, 0.823664, 0.823664, 0.823664",\ + "2.222140, 2.222140, 2.222140, 2.222140, 2.222140",\ + "0.126070, 0.126070, 0.126070, 0.126069, 0.126068",\ + "0.155268, 0.155268, 0.155268, 0.155268, 0.155267",\ + "0.201999, 0.201999, 0.201999, 0.201999, 0.201998",\ + "0.823664, 0.823664, 0.823664, 0.823664, 0.823664",\ + "2.222140, 2.222140, 2.222140, 2.222140, 2.222140"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.773106, 1.034029, 1.323047, 1.824254, 2.826667",\ + "0.785329, 1.046252, 1.335269, 1.836474, 2.838884",\ + "0.805232, 1.066155, 1.355171, 1.856374, 2.858778",\ + "0.977479, 1.238403, 1.527417, 2.028611, 3.031000",\ + "1.312050, 1.572973, 1.861987, 2.363182, 3.365571",\ + "0.860514, 1.121605, 1.410714, 1.910968, 2.912601",\ + "0.872737, 1.133828, 1.422936, 1.923188, 2.924818",\ + "0.892640, 1.153731, 1.442839, 1.943088, 2.944712",\ + "1.064888, 1.325979, 1.615084, 2.115325, 3.116933",\ + "1.399458, 1.660549, 1.949654, 2.449896, 3.451505",\ + "0.941405, 1.210634, 1.498679, 1.998589, 2.999556",\ + "0.953628, 1.222857, 1.510902, 2.010810, 3.011773",\ + "0.973531, 1.242760, 1.530804, 2.030710, 3.031667",\ + "1.145778, 1.415007, 1.703049, 2.202947, 3.203888",\ + "1.480349, 1.749578, 2.037620, 2.537518, 3.538460",\ + "1.002329, 1.276338, 1.562824, 2.062502, 3.063065",\ + "1.014552, 1.288561, 1.575047, 2.074723, 3.075282",\ + "1.034455, 1.308464, 1.594949, 2.094623, 3.095176",\ + "1.206703, 1.480712, 1.767194, 2.266860, 3.267397",\ + "1.541273, 1.815282, 2.101765, 2.601431, 3.601969",\ + "1.338678, 1.641568, 1.915017, 2.411981, 3.408521",\ + "1.350901, 1.653791, 1.927240, 2.424201, 3.420738",\ + "1.370804, 1.673694, 1.947142, 2.444101, 3.440632",\ + "1.543052, 1.845942, 2.119387, 2.616338, 3.612854",\ + "1.877622, 2.180512, 2.453958, 2.950909, 3.947425"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.077156, 0.077156, 0.077150, 0.077131, 0.077093",\ + "0.082414, 0.082414, 0.082409, 0.082392, 0.082357",\ + "0.102324, 0.102324, 0.102319, 0.102303, 0.102270",\ + "0.380733, 0.380733, 0.380733, 0.380733, 0.380733",\ + "1.026132, 1.026132, 1.026132, 1.026132, 1.026131",\ + "0.077156, 0.077156, 0.077150, 0.077131, 0.077093",\ + "0.082414, 0.082414, 0.082409, 0.082392, 0.082357",\ + "0.102324, 0.102324, 0.102319, 0.102303, 0.102270",\ + "0.380733, 0.380733, 0.380733, 0.380733, 0.380733",\ + "1.026132, 1.026132, 1.026132, 1.026132, 1.026131",\ + "0.077156, 0.077156, 0.077150, 0.077131, 0.077093",\ + "0.082414, 0.082414, 0.082409, 0.082392, 0.082357",\ + "0.102324, 0.102324, 0.102319, 0.102303, 0.102270",\ + "0.380733, 0.380733, 0.380733, 0.380733, 0.380733",\ + "1.026132, 1.026132, 1.026132, 1.026132, 1.026131",\ + "0.077156, 0.077156, 0.077150, 0.077131, 0.077093",\ + "0.082414, 0.082414, 0.082409, 0.082392, 0.082357",\ + "0.102324, 0.102324, 0.102319, 0.102303, 0.102270",\ + "0.380733, 0.380733, 0.380733, 0.380733, 0.380733",\ + "1.026132, 1.026132, 1.026132, 1.026132, 1.026131",\ + "0.077156, 0.077156, 0.077150, 0.077131, 0.077093",\ + "0.082414, 0.082414, 0.082409, 0.082392, 0.082357",\ + "0.102324, 0.102324, 0.102319, 0.102303, 0.102270",\ + "0.380733, 0.380733, 0.380733, 0.380733, 0.380733",\ + "1.026132, 1.026132, 1.026132, 1.026132, 1.026131"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[7]_redg_2590*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[39]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.813664, 1.067787, 1.348972, 1.815159, 2.747532",\ + "0.827376, 1.081499, 1.362685, 1.828871, 2.761244",\ + "0.850902, 1.105025, 1.386211, 1.852397, 2.784770",\ + "1.119084, 1.373207, 1.654392, 2.120577, 3.052948",\ + "1.712545, 1.966668, 2.247853, 2.714036, 3.646404",\ + "0.901073, 1.155375, 1.436530, 1.901873, 2.833466",\ + "0.914786, 1.169088, 1.450242, 1.915586, 2.847178",\ + "0.938311, 1.192614, 1.473768, 1.939111, 2.870703",\ + "1.206493, 1.460795, 1.741949, 2.207292, 3.138882",\ + "1.799954, 2.054256, 2.335410, 2.800751, 3.732338",\ + "0.981887, 1.244438, 1.524493, 1.989495, 2.920421",\ + "0.995600, 1.258151, 1.538206, 2.003207, 2.934133",\ + "1.019126, 1.281676, 1.561732, 2.026733, 2.957659",\ + "1.287307, 1.549858, 1.829913, 2.294913, 3.225837",\ + "1.880768, 2.143319, 2.423373, 2.888372, 3.819293",\ + "1.039467, 1.310192, 1.588632, 2.053408, 2.983930",\ + "1.053180, 1.323904, 1.602345, 2.067121, 2.997642",\ + "1.076705, 1.347430, 1.625871, 2.090646, 3.021168",\ + "1.344887, 1.615612, 1.894052, 2.358827, 3.289346",\ + "1.938348, 2.209073, 2.487513, 2.952286, 3.882802",\ + "1.371275, 1.675984, 1.940471, 2.402742, 3.329386",\ + "1.384988, 1.689697, 1.954183, 2.416455, 3.343098",\ + "1.408514, 1.713222, 1.977709, 2.439981, 3.366623",\ + "1.676695, 1.981404, 2.245890, 2.708161, 3.634802",\ + "2.270156, 2.574865, 2.839351, 3.301620, 4.228258"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.126070, 0.126070, 0.126070, 0.126069, 0.126068",\ + "0.155268, 0.155268, 0.155268, 0.155268, 0.155267",\ + "0.201999, 0.201999, 0.201999, 0.201999, 0.201999",\ + "0.823664, 0.823664, 0.823664, 0.823664, 0.823664",\ + "2.222140, 2.222140, 2.222140, 2.222140, 2.222140",\ + "0.126070, 0.126070, 0.126070, 0.126069, 0.126068",\ + "0.155268, 0.155268, 0.155268, 0.155268, 0.155267",\ + "0.201999, 0.201999, 0.201999, 0.201999, 0.201999",\ + "0.823664, 0.823664, 0.823664, 0.823664, 0.823664",\ + "2.222140, 2.222140, 2.222140, 2.222140, 2.222140",\ + "0.126070, 0.126070, 0.126070, 0.126069, 0.126068",\ + "0.155268, 0.155268, 0.155268, 0.155268, 0.155267",\ + "0.201999, 0.201999, 0.201999, 0.201999, 0.201999",\ + "0.823664, 0.823664, 0.823664, 0.823664, 0.823664",\ + "2.222140, 2.222140, 2.222140, 2.222140, 2.222140",\ + "0.126070, 0.126070, 0.126070, 0.126069, 0.126068",\ + "0.155268, 0.155268, 0.155268, 0.155268, 0.155267",\ + "0.201999, 0.201999, 0.201999, 0.201999, 0.201999",\ + "0.823664, 0.823664, 0.823664, 0.823664, 0.823664",\ + "2.222140, 2.222140, 2.222140, 2.222140, 2.222140",\ + "0.126070, 0.126070, 0.126070, 0.126069, 0.126068",\ + "0.155268, 0.155268, 0.155268, 0.155268, 0.155267",\ + "0.201999, 0.201999, 0.201999, 0.201999, 0.201999",\ + "0.823664, 0.823664, 0.823664, 0.823664, 0.823664",\ + "2.222140, 2.222140, 2.222140, 2.222140, 2.222140"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.752071, 1.006194, 1.287381, 1.753572, 2.685955",\ + "0.764294, 1.018417, 1.299603, 1.765793, 2.698174",\ + "0.784197, 1.038320, 1.319506, 1.785694, 2.718071",\ + "0.956445, 1.210568, 1.491752, 1.957934, 2.890299",\ + "1.291015, 1.545138, 1.826322, 2.292505, 3.224871",\ + "0.839480, 1.093783, 1.374938, 1.840287, 2.771889",\ + "0.851703, 1.106005, 1.387161, 1.852508, 2.784107",\ + "0.871606, 1.125909, 1.407063, 1.872409, 2.804004",\ + "1.043854, 1.298156, 1.579309, 2.044649, 2.976233",\ + "1.378424, 1.632726, 1.913880, 2.379220, 3.310805",\ + "0.920294, 1.182845, 1.462902, 1.927908, 2.858844",\ + "0.932517, 1.195068, 1.475124, 1.940130, 2.871062",\ + "0.952420, 1.214971, 1.495027, 1.960030, 2.890960",\ + "1.124668, 1.387219, 1.667273, 2.132271, 3.063188",\ + "1.459238, 1.721789, 2.001843, 2.466841, 3.397760",\ + "0.977874, 1.248599, 1.527041, 1.991822, 2.922353",\ + "0.990097, 1.260822, 1.539264, 2.004043, 2.934571",\ + "1.010000, 1.280725, 1.559166, 2.023944, 2.954468",\ + "1.182248, 1.452972, 1.731412, 2.196184, 3.126697",\ + "1.516818, 1.787543, 2.065982, 2.530755, 3.461269",\ + "1.309683, 1.614391, 1.878880, 2.341156, 3.267809",\ + "1.321906, 1.626614, 1.891102, 2.353377, 3.280027",\ + "1.341809, 1.646517, 1.911005, 2.373278, 3.299924",\ + "1.514056, 1.818765, 2.083251, 2.545518, 3.472153",\ + "1.848626, 2.153335, 2.417821, 2.880089, 3.806725"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.077156, 0.077156, 0.077152, 0.077138, 0.077112",\ + "0.082414, 0.082414, 0.082410, 0.082398, 0.082374",\ + "0.102323, 0.102323, 0.102320, 0.102309, 0.102286",\ + "0.380733, 0.380733, 0.380733, 0.380733, 0.380733",\ + "1.026132, 1.026132, 1.026132, 1.026132, 1.026131",\ + "0.077156, 0.077156, 0.077152, 0.077138, 0.077112",\ + "0.082414, 0.082414, 0.082410, 0.082398, 0.082374",\ + "0.102323, 0.102323, 0.102320, 0.102309, 0.102286",\ + "0.380733, 0.380733, 0.380733, 0.380733, 0.380733",\ + "1.026132, 1.026132, 1.026132, 1.026132, 1.026131",\ + "0.077156, 0.077156, 0.077152, 0.077138, 0.077112",\ + "0.082414, 0.082414, 0.082410, 0.082398, 0.082374",\ + "0.102323, 0.102323, 0.102320, 0.102309, 0.102286",\ + "0.380733, 0.380733, 0.380733, 0.380733, 0.380733",\ + "1.026132, 1.026132, 1.026132, 1.026132, 1.026131",\ + "0.077156, 0.077156, 0.077152, 0.077138, 0.077112",\ + "0.082414, 0.082414, 0.082410, 0.082398, 0.082374",\ + "0.102323, 0.102323, 0.102320, 0.102309, 0.102286",\ + "0.380733, 0.380733, 0.380733, 0.380733, 0.380733",\ + "1.026132, 1.026132, 1.026132, 1.026132, 1.026131",\ + "0.077156, 0.077156, 0.077151, 0.077138, 0.077112",\ + "0.082414, 0.082414, 0.082410, 0.082398, 0.082374",\ + "0.102323, 0.102323, 0.102320, 0.102309, 0.102286",\ + "0.380733, 0.380733, 0.380733, 0.380733, 0.380733",\ + "1.026132, 1.026132, 1.026132, 1.026132, 1.026131"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[7]_redg_2633*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[40]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.689280, 0.957537, 1.249948, 1.745707, 2.737226",\ + "0.703254, 0.971515, 1.263950, 1.759776, 2.751428",\ + "0.726748, 0.995009, 1.287441, 1.783259, 2.774894",\ + "0.996345, 1.264632, 1.557197, 2.053374, 3.045727",\ + "1.591995, 1.860324, 2.153094, 2.649826, 3.643289",\ + "0.776693, 1.045135, 1.337600, 1.832422, 2.823160",\ + "0.790666, 1.059113, 1.351603, 1.846491, 2.837361",\ + "0.814160, 1.082607, 1.375093, 1.869974, 2.860828",\ + "1.083757, 1.352230, 1.644851, 2.140089, 3.131661",\ + "1.679408, 1.947922, 2.240750, 2.736541, 3.729223",\ + "0.857617, 1.134236, 1.425566, 1.920044, 2.910115",\ + "0.871591, 1.148215, 1.439569, 1.934113, 2.924316",\ + "0.895085, 1.171708, 1.463060, 1.957596, 2.947783",\ + "1.164682, 1.441333, 1.732817, 2.227711, 3.218616",\ + "1.760333, 2.037025, 2.328716, 2.824163, 3.816178",\ + "0.918265, 1.200047, 1.489710, 1.983958, 2.973624",\ + "0.932239, 1.214026, 1.503713, 1.998027, 2.987825",\ + "0.955733, 1.237519, 1.527204, 2.021510, 3.011292",\ + "1.225332, 1.507144, 1.796961, 2.291625, 3.282125",\ + "1.820984, 2.102838, 2.392860, 2.888076, 3.879687",\ + "1.253788, 1.566464, 1.841850, 2.333418, 3.319080",\ + "1.267763, 1.580444, 1.855854, 2.347487, 3.333282",\ + "1.291257, 1.603937, 1.879344, 2.370970, 3.356748",\ + "1.560858, 1.873569, 2.149106, 2.641086, 3.627581",\ + "2.156515, 2.469274, 2.745010, 3.237540, 4.225142"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.130558, 0.130764, 0.132053, 0.135744, 0.143126",\ + "0.158251, 0.158388, 0.159397, 0.162380, 0.168346",\ + "0.203206, 0.203261, 0.203904, 0.205928, 0.209976",\ + "0.823780, 0.823782, 0.823793, 0.823822, 0.823881",\ + "2.222146, 2.222146, 2.222146, 2.222146, 2.222146",\ + "0.130558, 0.130766, 0.132065, 0.135744, 0.143126",\ + "0.158251, 0.158389, 0.159406, 0.162380, 0.168346",\ + "0.203206, 0.203262, 0.203910, 0.205928, 0.209976",\ + "0.823780, 0.823782, 0.823793, 0.823822, 0.823881",\ + "2.222146, 2.222146, 2.222146, 2.222146, 2.222146",\ + "0.130559, 0.130769, 0.132065, 0.135744, 0.143126",\ + "0.158251, 0.158391, 0.159406, 0.162380, 0.168346",\ + "0.203206, 0.203262, 0.203910, 0.205928, 0.209976",\ + "0.823780, 0.823782, 0.823793, 0.823822, 0.823881",\ + "2.222146, 2.222146, 2.222146, 2.222146, 2.222146",\ + "0.130568, 0.130774, 0.132066, 0.135744, 0.143126",\ + "0.158257, 0.158394, 0.159407, 0.162380, 0.168346",\ + "0.203208, 0.203264, 0.203911, 0.205928, 0.209976",\ + "0.823780, 0.823782, 0.823793, 0.823822, 0.823881",\ + "2.222146, 2.222146, 2.222146, 2.222146, 2.222146",\ + "0.130591, 0.130830, 0.132103, 0.135759, 0.143126",\ + "0.158273, 0.158432, 0.159437, 0.162392, 0.168346",\ + "0.203215, 0.203279, 0.203931, 0.205936, 0.209976",\ + "0.823780, 0.823783, 0.823793, 0.823822, 0.823881",\ + "2.222146, 2.222146, 2.222146, 2.222146, 2.222146"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.620877, 0.889007, 1.180779, 1.674812, 2.662879",\ + "0.634992, 0.903157, 1.195106, 1.689619, 2.678645",\ + "0.657454, 0.925667, 1.217856, 1.713018, 2.703341",\ + "0.837827, 1.106191, 1.399143, 1.896364, 2.890807",\ + "1.171871, 1.440226, 1.733128, 2.230216, 3.224392",\ + "0.708289, 0.976604, 1.268425, 1.761527, 2.748812",\ + "0.722404, 0.990754, 1.282755, 1.776334, 2.764579",\ + "0.744867, 1.013264, 1.305507, 1.799733, 2.789275",\ + "0.925240, 1.193790, 1.486800, 1.983079, 2.976740",\ + "1.259284, 1.527824, 1.820785, 2.316931, 3.310326",\ + "0.789214, 1.065703, 1.356391, 1.849149, 2.835768",\ + "0.803329, 1.079854, 1.370721, 1.863956, 2.851534",\ + "0.825791, 1.102365, 1.393473, 1.887355, 2.876230",\ + "1.006165, 1.282894, 1.574766, 2.070702, 3.063695",\ + "1.340209, 1.616928, 1.908751, 2.404553, 3.397281",\ + "0.849857, 1.131511, 1.420535, 1.913063, 2.899276",\ + "0.863973, 1.145663, 1.434865, 1.927870, 2.915043",\ + "0.886438, 1.168175, 1.457617, 1.951269, 2.939739",\ + "1.066817, 1.348707, 1.638911, 2.134615, 3.127204",\ + "1.400861, 1.682741, 1.972895, 2.468467, 3.460790",\ + "1.185366, 1.497892, 1.772658, 2.262515, 3.244732",\ + "1.199486, 1.512054, 1.786992, 2.277325, 3.260499",\ + "1.221956, 1.534580, 1.809751, 2.300726, 3.285195",\ + "1.402352, 1.715153, 1.991066, 2.484081, 3.472661",\ + "1.736395, 2.049184, 2.325049, 2.817932, 3.806246"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.096307, 0.096664, 0.098460, 0.103314, 0.113023",\ + "0.099768, 0.100091, 0.101719, 0.106118, 0.114915",\ + "0.118566, 0.118869, 0.120392, 0.124509, 0.132743",\ + "0.380772, 0.380786, 0.381010, 0.381719, 0.383137",\ + "1.026329, 1.026338, 1.026379, 1.026486, 1.026699",\ + "0.096307, 0.096666, 0.098476, 0.103314, 0.113023",\ + "0.099768, 0.100093, 0.101733, 0.106118, 0.114915",\ + "0.118566, 0.118871, 0.120405, 0.124509, 0.132743",\ + "0.380772, 0.380786, 0.381012, 0.381719, 0.383137",\ + "1.026329, 1.026338, 1.026379, 1.026486, 1.026699",\ + "0.096307, 0.096672, 0.098476, 0.103314, 0.113023",\ + "0.099768, 0.100099, 0.101733, 0.106118, 0.114915",\ + "0.118566, 0.118876, 0.120406, 0.124509, 0.132743",\ + "0.380772, 0.380786, 0.381012, 0.381719, 0.383137",\ + "1.026329, 1.026339, 1.026379, 1.026486, 1.026699",\ + "0.096322, 0.096680, 0.098477, 0.103314, 0.113023",\ + "0.099782, 0.100106, 0.101734, 0.106118, 0.114915",\ + "0.118579, 0.118883, 0.120406, 0.124509, 0.132743",\ + "0.380772, 0.380787, 0.381012, 0.381719, 0.383137",\ + "1.026330, 1.026339, 1.026379, 1.026486, 1.026699",\ + "0.096361, 0.096780, 0.098526, 0.103335, 0.113023",\ + "0.099817, 0.100196, 0.101779, 0.106136, 0.114915",\ + "0.118612, 0.118967, 0.120448, 0.124526, 0.132743",\ + "0.380772, 0.380792, 0.381019, 0.381722, 0.383137",\ + "1.026331, 1.026341, 1.026381, 1.026486, 1.026699"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[7]_redg_2683*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[42]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.195231, 0.463005, 0.734474, 1.195010, 2.116083",\ + "0.209369, 0.477311, 0.748785, 1.209873, 2.132048",\ + "0.233103, 0.501280, 0.772498, 1.233725, 2.156177",\ + "0.505445, 0.772942, 1.041862, 1.499718, 2.415430",\ + "1.101330, 1.368410, 1.636340, 2.092443, 3.004649",\ + "0.282639, 0.550544, 0.822013, 1.281725, 2.202017",\ + "0.296777, 0.564849, 0.836326, 1.296587, 2.217982",\ + "0.320749, 0.588817, 0.860040, 1.320439, 2.242111",\ + "0.593808, 0.860470, 1.129393, 1.586432, 2.501364",\ + "1.189691, 1.455935, 1.723865, 2.179157, 3.090583",\ + "0.371453, 0.639490, 0.909976, 1.369346, 2.288972",\ + "0.385884, 0.653793, 0.924289, 1.384209, 2.304937",\ + "0.410095, 0.677755, 0.948003, 1.408060, 2.329066",\ + "0.683117, 0.949390, 1.217355, 1.674054, 2.588319",\ + "1.278993, 1.544848, 1.811828, 2.266779, 3.177538",\ + "0.435127, 0.705073, 0.974115, 1.433259, 2.352481",\ + "0.449557, 0.719372, 0.988428, 1.448122, 2.368446",\ + "0.473764, 0.743329, 1.012141, 1.471974, 2.392575",\ + "0.746751, 1.014935, 1.281493, 1.737967, 2.651828",\ + "1.342621, 1.610383, 1.875965, 2.330692, 3.241047",\ + "0.771711, 1.068883, 1.325895, 1.782569, 2.697937",\ + "0.786132, 1.083144, 1.340213, 1.797434, 2.713902",\ + "0.810321, 1.107028, 1.363928, 1.821286, 2.738031",\ + "1.083085, 1.378307, 1.633246, 2.087266, 2.997284",\ + "1.678917, 1.973635, 2.227701, 2.679984, 3.586503"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.185659, 0.236480, 0.332306, 0.503768, 0.846690",\ + "0.203762, 0.251201, 0.346416, 0.519962, 0.867054",\ + "0.237818, 0.275998, 0.366817, 0.542132, 0.892761",\ + "0.823305, 0.824108, 0.854501, 0.958291, 1.165871",\ + "2.222180, 2.222247, 2.228687, 2.250859, 2.295203",\ + "0.185659, 0.236778, 0.332846, 0.503768, 0.846690",\ + "0.203762, 0.251491, 0.346963, 0.519962, 0.867054",\ + "0.238090, 0.276257, 0.367369, 0.542132, 0.892761",\ + "0.823322, 0.824110, 0.854828, 0.958291, 1.165871",\ + "2.222181, 2.222247, 2.228756, 2.250859, 2.295203",\ + "0.187582, 0.237448, 0.332856, 0.503768, 0.846690",\ + "0.205428, 0.252143, 0.346973, 0.519962, 0.867054",\ + "0.238891, 0.276838, 0.367379, 0.542132, 0.892761",\ + "0.823369, 0.824113, 0.854835, 0.958291, 1.165871",\ + "2.222186, 2.222247, 2.228758, 2.250859, 2.295203",\ + "0.188921, 0.238422, 0.332885, 0.503768, 0.846690",\ + "0.206588, 0.253091, 0.347002, 0.519962, 0.867054",\ + "0.239638, 0.277682, 0.367409, 0.542132, 0.892761",\ + "0.823414, 0.824119, 0.854852, 0.958291, 1.165871",\ + "2.222191, 2.222247, 2.228761, 2.250859, 2.295203",\ + "0.197449, 0.249827, 0.334624, 0.504477, 0.846690",\ + "0.213977, 0.264195, 0.348763, 0.520680, 0.867054",\ + "0.244398, 0.287568, 0.369187, 0.542857, 0.892761",\ + "0.823697, 0.824180, 0.855905, 0.958721, 1.165871",\ + "2.222221, 2.222247, 2.228986, 2.250950, 2.295203"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.199835, 0.394068, 0.663502, 1.119151, 2.030450",\ + "0.208748, 0.404375, 0.677456, 1.139816, 2.064535",\ + "0.223610, 0.421071, 0.699454, 1.171923, 2.116862",\ + "0.380613, 0.582386, 0.880612, 1.405667, 2.455778",\ + "0.716679, 0.922290, 1.228480, 1.784735, 2.897244",\ + "0.287243, 0.481603, 0.751025, 1.205865, 2.116384",\ + "0.296156, 0.491921, 0.765001, 1.226530, 2.150469",\ + "0.311018, 0.508632, 0.787030, 1.258637, 2.202796",\ + "0.468021, 0.669977, 0.968355, 1.492382, 2.541712",\ + "0.804087, 1.009874, 1.316321, 1.871449, 2.983178",\ + "0.368115, 0.570540, 0.838988, 1.293487, 2.203339",\ + "0.377029, 0.580882, 0.852964, 1.314152, 2.237424",\ + "0.391890, 0.597628, 0.874994, 1.346259, 2.289751",\ + "0.548893, 0.759039, 1.056321, 1.580003, 2.628667",\ + "0.884959, 1.098920, 1.404289, 1.959070, 3.070133",\ + "0.425818, 0.636109, 0.903125, 1.357400, 2.266848",\ + "0.434733, 0.646488, 0.917102, 1.378065, 2.300933",\ + "0.449593, 0.663284, 0.939134, 1.410172, 2.353260",\ + "0.606596, 0.824792, 1.120470, 1.643916, 2.692176",\ + "0.942662, 1.164649, 1.468444, 2.022984, 3.133642",\ + "0.728861, 0.999767, 1.254856, 1.706689, 2.612304",\ + "0.737784, 1.010567, 1.268901, 1.727382, 2.646389",\ + "0.752638, 1.027949, 1.291036, 1.759531, 2.698716",\ + "0.909639, 1.190589, 1.472905, 1.993493, 3.037632",\ + "1.245701, 1.530174, 1.821195, 2.372689, 3.479098"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.051713, 0.082206, 0.146667, 0.272496, 0.524154",\ + "0.059242, 0.084148, 0.146833, 0.273232, 0.526032",\ + "0.082676, 0.098099, 0.151707, 0.276480, 0.526025",\ + "0.382075, 0.382564, 0.407345, 0.490228, 0.655996",\ + "1.027888, 1.027888, 1.042321, 1.092011, 1.191392",\ + "0.051713, 0.082387, 0.147063, 0.272496, 0.524154",\ + "0.059242, 0.084316, 0.147231, 0.273232, 0.526032",\ + "0.082676, 0.098212, 0.152100, 0.276480, 0.526025",\ + "0.382075, 0.382568, 0.407606, 0.490228, 0.655996",\ + "1.027888, 1.027888, 1.042477, 1.092011, 1.191392",\ + "0.051782, 0.082793, 0.147071, 0.272496, 0.524154",\ + "0.059284, 0.084694, 0.147238, 0.273232, 0.526032",\ + "0.082697, 0.098465, 0.152108, 0.276480, 0.526025",\ + "0.382075, 0.382579, 0.407611, 0.490228, 0.655996",\ + "1.027888, 1.027888, 1.042480, 1.092011, 1.191392",\ + "0.051916, 0.083384, 0.147092, 0.272496, 0.524154",\ + "0.059368, 0.085243, 0.147259, 0.273232, 0.526032",\ + "0.082738, 0.098832, 0.152128, 0.276480, 0.526025",\ + "0.382075, 0.382594, 0.407625, 0.490228, 0.655996",\ + "1.027888, 1.027888, 1.042489, 1.092011, 1.191392",\ + "0.053133, 0.090301, 0.148368, 0.273016, 0.524154",\ + "0.060124, 0.091679, 0.148542, 0.273755, 0.526032",\ + "0.083110, 0.103136, 0.153394, 0.276996, 0.526025",\ + "0.382075, 0.382769, 0.408465, 0.490571, 0.655996",\ + "1.027888, 1.027888, 1.042993, 1.092217, 1.191392"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[7]_redg_2504*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[43]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.107724, 0.368276, 0.625542, 1.061117, 1.932266",\ + "0.118290, 0.379979, 0.639987, 1.079831, 1.959519",\ + "0.141262, 0.402747, 0.664893, 1.109231, 1.997905",\ + "0.466405, 0.694370, 0.967258, 1.421195, 2.329069",\ + "1.080370, 1.299790, 1.592495, 2.085614, 3.071851",\ + "0.196001, 0.455768, 0.713003, 1.147831, 2.018200",\ + "0.206570, 0.467481, 0.727462, 1.166545, 2.045453",\ + "0.229522, 0.490254, 0.752382, 1.195945, 2.083839",\ + "0.553814, 0.781928, 1.054777, 1.507910, 2.415003",\ + "1.167779, 1.387403, 1.680137, 2.172328, 3.157785",\ + "0.284966, 0.544612, 0.800965, 1.235453, 2.105155",\ + "0.295543, 0.556347, 0.815424, 1.254167, 2.132408",\ + "0.318436, 0.579132, 0.840344, 1.283567, 2.170794",\ + "0.634637, 0.870922, 1.142740, 1.595531, 2.501958",\ + "1.248620, 1.476519, 1.768103, 2.259950, 3.244740",\ + "0.348239, 0.610047, 0.865099, 1.299366, 2.168664",\ + "0.358823, 0.621814, 0.879558, 1.318080, 2.195917",\ + "0.381662, 0.644617, 0.904480, 1.347480, 2.234303",\ + "0.692234, 0.936575, 1.206877, 1.659445, 2.565467",\ + "1.306252, 1.542352, 1.832246, 2.323863, 3.308249",\ + "0.682278, 0.972118, 1.216627, 1.648574, 2.514120",\ + "0.692910, 0.984256, 1.231130, 1.667306, 2.541373",\ + "0.715403, 1.007266, 1.256096, 1.696724, 2.579759",\ + "1.001252, 1.301193, 1.558591, 2.008728, 2.910923",\ + "1.608596, 1.909065, 2.184358, 2.673309, 3.653705"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.074735, 0.092677, 0.146088, 0.239899, 0.427522",\ + "0.102638, 0.120071, 0.176792, 0.284601, 0.500219",\ + "0.161882, 0.174744, 0.229174, 0.352169, 0.598157",\ + "0.823637, 0.823637, 0.866367, 1.013938, 1.309078",\ + "2.221941, 2.221941, 2.244685, 2.323231, 2.480325",\ + "0.074735, 0.092846, 0.146384, 0.239899, 0.427522",\ + "0.102638, 0.120235, 0.177132, 0.284601, 0.500219",\ + "0.161882, 0.174865, 0.229562, 0.352169, 0.598157",\ + "0.823637, 0.823637, 0.866833, 1.013938, 1.309078",\ + "2.221941, 2.221941, 2.244933, 2.323231, 2.480325",\ + "0.074735, 0.093227, 0.146389, 0.239899, 0.427522",\ + "0.102638, 0.120606, 0.177138, 0.284601, 0.500219",\ + "0.161882, 0.175138, 0.229569, 0.352169, 0.598157",\ + "0.823637, 0.823637, 0.866841, 1.013938, 1.309078",\ + "2.221941, 2.221941, 2.244937, 2.323231, 2.480325",\ + "0.074735, 0.093782, 0.146405, 0.239899, 0.427522",\ + "0.102638, 0.121144, 0.177156, 0.284601, 0.500219",\ + "0.161882, 0.175536, 0.229590, 0.352169, 0.598157",\ + "0.823637, 0.823637, 0.866866, 1.013938, 1.309078",\ + "2.221941, 2.221941, 2.244950, 2.323231, 2.480325",\ + "0.074735, 0.100272, 0.147356, 0.240288, 0.427522",\ + "0.102638, 0.127451, 0.178250, 0.285047, 0.500219",\ + "0.161882, 0.180189, 0.230838, 0.352678, 0.598157",\ + "0.823637, 0.823637, 0.868363, 1.014548, 1.309078",\ + "2.221941, 2.221941, 2.245747, 2.323557, 2.480325"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.140111, 0.321611, 0.507696, 0.851050, 1.569056",\ + "0.146136, 0.328572, 0.525511, 0.902870, 1.657587",\ + "0.156561, 0.339884, 0.570480, 0.970939, 1.771856",\ + "0.297184, 0.522021, 0.807737, 1.302651, 2.292479",\ + "0.634484, 0.861679, 1.151767, 1.684827, 2.750947",\ + "0.227520, 0.408999, 0.595163, 0.937764, 1.654990",\ + "0.233545, 0.415960, 0.612788, 0.989584, 1.743521",\ + "0.243970, 0.427273, 0.657830, 1.057653, 1.857790",\ + "0.384593, 0.609585, 0.895385, 1.389365, 2.378412",\ + "0.721893, 0.949200, 1.239535, 1.771541, 2.836881",\ + "0.308387, 0.489332, 0.675190, 1.025386, 1.741945",\ + "0.314418, 0.496293, 0.700747, 1.077206, 1.830476",\ + "0.324849, 0.509849, 0.745789, 1.145275, 1.944745",\ + "0.465472, 0.698592, 0.983351, 1.476987, 2.465368",\ + "0.802748, 1.038111, 1.327502, 1.859163, 2.923836",\ + "0.366068, 0.546880, 0.732732, 1.089299, 1.805454",\ + "0.372111, 0.553842, 0.764871, 1.141119, 1.893985",\ + "0.382553, 0.575066, 0.809918, 1.209188, 2.008254",\ + "0.523176, 0.764266, 1.047495, 1.540900, 2.528877",\ + "0.860406, 1.103644, 1.391653, 1.923076, 2.987345",\ + "0.668860, 0.879530, 1.082095, 1.438189, 2.150910",\ + "0.675009, 0.902838, 1.115808, 1.490086, 2.239441",\ + "0.685552, 0.934577, 1.161089, 1.558250, 2.353710",\ + "0.829810, 1.129123, 1.399624, 1.890354, 2.874332",\ + "1.174406, 1.466850, 1.744170, 2.272687, 3.332801"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.063168, 0.063168, 0.086358, 0.196253, 0.354186",\ + "0.068741, 0.068741, 0.139035, 0.228534, 0.407534",\ + "0.084603, 0.084603, 0.170977, 0.272661, 0.476028",\ + "0.381099, 0.384014, 0.432690, 0.586065, 0.892815",\ + "1.028844, 1.028844, 1.069535, 1.210064, 1.491123",\ + "0.063168, 0.063168, 0.086418, 0.196253, 0.354186",\ + "0.068741, 0.068741, 0.139317, 0.228534, 0.407534",\ + "0.084603, 0.084603, 0.171298, 0.272661, 0.476028",\ + "0.381099, 0.384041, 0.433173, 0.586065, 0.892815",\ + "1.028844, 1.028844, 1.069978, 1.210064, 1.491123",\ + "0.063168, 0.063168, 0.086418, 0.196253, 0.354186",\ + "0.068741, 0.068741, 0.139322, 0.228534, 0.407534",\ + "0.084603, 0.108427, 0.171304, 0.272661, 0.476028",\ + "0.381099, 0.384103, 0.433182, 0.586065, 0.892815",\ + "1.028844, 1.028844, 1.069987, 1.210064, 1.491123",\ + "0.063168, 0.063168, 0.086418, 0.196253, 0.354186",\ + "0.068741, 0.068741, 0.139337, 0.228534, 0.407534",\ + "0.084603, 0.109141, 0.171320, 0.272661, 0.476028",\ + "0.381099, 0.384193, 0.433208, 0.586065, 0.892815",\ + "1.028844, 1.028844, 1.070010, 1.210064, 1.491123",\ + "0.063168, 0.081229, 0.118354, 0.196580, 0.354186",\ + "0.068741, 0.094387, 0.140245, 0.228905, 0.407534",\ + "0.084603, 0.117503, 0.172352, 0.273082, 0.476028",\ + "0.381099, 0.385248, 0.434764, 0.586700, 0.892815",\ + "1.028844, 1.028844, 1.071436, 1.210646, 1.491123"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[7]_redg_2464*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[45]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.666340, 0.928130, 1.212847, 1.689620, 2.643166",\ + "0.680315, 0.942109, 1.226845, 1.703665, 2.657306",\ + "0.703809, 0.965603, 1.250336, 1.727151, 2.680780",\ + "0.973410, 1.235228, 1.520067, 1.997139, 2.951283",\ + "1.569066, 1.830922, 2.115924, 2.593394, 3.548335",\ + "0.753746, 1.015729, 1.300436, 1.776334, 2.729100",\ + "0.767721, 1.029708, 1.314434, 1.790379, 2.743240",\ + "0.791215, 1.053202, 1.337926, 1.813865, 2.766714",\ + "1.060816, 1.322827, 1.607657, 2.083853, 3.037217",\ + "1.656472, 1.918522, 2.203516, 2.680108, 3.634269",\ + "0.834559, 1.104799, 1.388400, 1.863955, 2.816055",\ + "0.848533, 1.118778, 1.402398, 1.878000, 2.830195",\ + "0.872027, 1.142272, 1.425889, 1.901486, 2.853669",\ + "1.141628, 1.411898, 1.695621, 2.171474, 3.124172",\ + "1.737284, 2.007593, 2.291479, 2.767729, 3.721224",\ + "0.896255, 1.170562, 1.452541, 1.927868, 2.879564",\ + "0.910230, 1.184541, 1.466539, 1.941913, 2.893704",\ + "0.933724, 1.208035, 1.490030, 1.965399, 2.917178",\ + "1.203325, 1.477661, 1.759762, 2.235387, 3.187681",\ + "1.798983, 2.073358, 2.355620, 2.831642, 3.784733",\ + "1.233218, 1.536514, 1.804484, 2.277243, 3.225020",\ + "1.247192, 1.550495, 1.818483, 2.291289, 3.239160",\ + "1.270686, 1.573988, 1.841974, 2.314774, 3.262634",\ + "1.540289, 1.843622, 2.111709, 2.584763, 3.533137",\ + "2.135948, 2.439330, 2.707571, 3.181020, 4.130188"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.130524, 0.130598, 0.131270, 0.133249, 0.137207",\ + "0.158228, 0.158278, 0.158724, 0.160039, 0.162669",\ + "0.203197, 0.203217, 0.203397, 0.203929, 0.204993",\ + "0.823780, 0.823782, 0.823791, 0.823812, 0.823854",\ + "2.222145, 2.222146, 2.222146, 2.222149, 2.222153",\ + "0.130524, 0.130599, 0.131276, 0.133249, 0.137207",\ + "0.158228, 0.158278, 0.158728, 0.160039, 0.162669",\ + "0.203197, 0.203217, 0.203399, 0.203929, 0.204993",\ + "0.823780, 0.823782, 0.823791, 0.823812, 0.823854",\ + "2.222145, 2.222146, 2.222146, 2.222149, 2.222153",\ + "0.130525, 0.130600, 0.131276, 0.133249, 0.137207",\ + "0.158229, 0.158279, 0.158728, 0.160039, 0.162669",\ + "0.203197, 0.203217, 0.203399, 0.203929, 0.204993",\ + "0.823780, 0.823782, 0.823791, 0.823812, 0.823854",\ + "2.222145, 2.222146, 2.222146, 2.222149, 2.222153",\ + "0.130526, 0.130602, 0.131276, 0.133249, 0.137207",\ + "0.158229, 0.158280, 0.158728, 0.160039, 0.162669",\ + "0.203197, 0.203218, 0.203399, 0.203929, 0.204993",\ + "0.823780, 0.823782, 0.823791, 0.823812, 0.823854",\ + "2.222145, 2.222146, 2.222146, 2.222149, 2.222153",\ + "0.130530, 0.130626, 0.131296, 0.133257, 0.137207",\ + "0.158232, 0.158296, 0.158741, 0.160044, 0.162669",\ + "0.203198, 0.203224, 0.203404, 0.203931, 0.204993",\ + "0.823780, 0.823783, 0.823791, 0.823812, 0.823854",\ + "2.222146, 2.222146, 2.222146, 2.222149, 2.222153"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.597919, 0.859592, 1.143801, 1.619336, 2.570405",\ + "0.612039, 0.873744, 1.158095, 1.633973, 2.585731",\ + "0.634508, 0.896258, 1.180798, 1.657142, 2.609831",\ + "0.814903, 1.076792, 1.361938, 1.839759, 2.795403",\ + "1.148946, 1.410826, 1.695932, 2.173658, 3.129110",\ + "0.685326, 0.947190, 1.231387, 1.706050, 2.656339",\ + "0.699445, 0.961343, 1.245681, 1.720687, 2.671665",\ + "0.721914, 0.983856, 1.268386, 1.743856, 2.695765",\ + "0.902309, 1.164392, 1.449531, 1.926473, 2.881336",\ + "1.236352, 1.498426, 1.783525, 2.260372, 3.215044",\ + "0.766138, 1.036258, 1.319350, 1.793671, 2.743294",\ + "0.780258, 1.050411, 1.333645, 1.808309, 2.758620",\ + "0.802727, 1.072925, 1.356350, 1.831478, 2.782720",\ + "0.983121, 1.253464, 1.537494, 2.014095, 2.968292",\ + "1.317164, 1.587497, 1.871488, 2.347994, 3.301999",\ + "0.827832, 1.102018, 1.383491, 1.857584, 2.806803",\ + "0.841953, 1.116172, 1.397786, 1.872221, 2.822129",\ + "0.864423, 1.138688, 1.420491, 1.895391, 2.846229",\ + "1.044820, 1.319229, 1.601635, 2.078008, 3.031801",\ + "1.378863, 1.653263, 1.935629, 2.411906, 3.365508",\ + "1.164787, 1.467934, 1.735422, 2.206954, 3.152259",\ + "1.178910, 1.482098, 1.749720, 2.221593, 3.167585",\ + "1.201382, 1.504627, 1.772430, 2.244764, 3.191684",\ + "1.381788, 1.685212, 1.953590, 2.427387, 3.377256",\ + "1.715830, 2.019242, 2.287583, 2.761285, 3.710964"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.096357, 0.096687, 0.098113, 0.101595, 0.108560",\ + "0.099813, 0.100112, 0.101404, 0.104560, 0.110871",\ + "0.118608, 0.118888, 0.120098, 0.123051, 0.128958",\ + "0.380772, 0.380788, 0.380959, 0.381468, 0.382485",\ + "1.026328, 1.026331, 1.026361, 1.026448, 1.026622",\ + "0.096357, 0.096690, 0.098124, 0.101595, 0.108560",\ + "0.099813, 0.100115, 0.101414, 0.104560, 0.110871",\ + "0.118608, 0.118891, 0.120107, 0.123051, 0.128958",\ + "0.380772, 0.380788, 0.380960, 0.381468, 0.382485",\ + "1.026328, 1.026331, 1.026361, 1.026448, 1.026622",\ + "0.096357, 0.096696, 0.098124, 0.101595, 0.108560",\ + "0.099813, 0.100120, 0.101415, 0.104560, 0.110871",\ + "0.118609, 0.118896, 0.120107, 0.123051, 0.128958",\ + "0.380772, 0.380788, 0.380960, 0.381468, 0.382485",\ + "1.026328, 1.026331, 1.026361, 1.026448, 1.026622",\ + "0.096364, 0.096704, 0.098125, 0.101595, 0.108560",\ + "0.099820, 0.100128, 0.101415, 0.104560, 0.110871",\ + "0.118615, 0.118903, 0.120108, 0.123051, 0.128958",\ + "0.380772, 0.380789, 0.380961, 0.381468, 0.382485",\ + "1.026328, 1.026331, 1.026361, 1.026448, 1.026622",\ + "0.096383, 0.096806, 0.098160, 0.101610, 0.108560",\ + "0.099837, 0.100220, 0.101447, 0.104573, 0.110871",\ + "0.118631, 0.118989, 0.120138, 0.123064, 0.128958",\ + "0.380772, 0.380794, 0.380966, 0.381470, 0.382485",\ + "1.026328, 1.026332, 1.026362, 1.026448, 1.026622"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[7]_redg_2715*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[18]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.476785, 0.693340, 0.873015, 1.163119, 1.725535",\ + "0.496002, 0.712556, 0.892232, 1.182336, 1.744752",\ + "0.527650, 0.744204, 0.923880, 1.213984, 1.776400",\ + "0.818239, 1.034793, 1.214469, 1.504573, 2.066989",\ + "1.412242, 1.628797, 1.808472, 2.098576, 2.660992",\ + "0.565076, 0.780658, 0.960296, 1.250424, 1.812889",\ + "0.584292, 0.799874, 0.979512, 1.269641, 1.832105",\ + "0.615941, 0.831523, 1.011161, 1.301289, 1.863753",\ + "0.906530, 1.122112, 1.301750, 1.591878, 2.154342",\ + "1.500533, 1.716115, 1.895753, 2.185881, 2.748345",\ + "0.654117, 0.860991, 1.040323, 1.330453, 1.892920",\ + "0.673334, 0.880207, 1.059539, 1.349669, 1.912137",\ + "0.704982, 0.911855, 1.091188, 1.381318, 1.943785",\ + "0.995571, 1.202444, 1.381777, 1.671907, 2.234374",\ + "1.589574, 1.796447, 1.975780, 2.265910, 2.828377",\ + "0.717479, 0.918821, 1.098020, 1.387885, 1.949940",\ + "0.736695, 0.938038, 1.117237, 1.407101, 1.969157",\ + "0.768343, 0.969686, 1.148885, 1.438750, 2.000805",\ + "1.058932, 1.260275, 1.439474, 1.729339, 2.291394",\ + "1.652935, 1.854278, 2.033477, 2.323342, 2.885397",\ + "1.042371, 1.224140, 1.401676, 1.691058, 2.252168",\ + "1.061587, 1.243356, 1.420893, 1.710275, 2.271384",\ + "1.093235, 1.275004, 1.452541, 1.741923, 2.303032",\ + "1.383824, 1.565593, 1.743130, 2.032512, 2.593621",\ + "1.977827, 2.159596, 2.337133, 2.626515, 3.187624"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.115267, 0.115267, 0.115267, 0.115267, 0.115267",\ + "0.141939, 0.141939, 0.141939, 0.141939, 0.141939",\ + "0.190556, 0.190556, 0.190556, 0.190556, 0.190556",\ + "0.817533, 0.817533, 0.817533, 0.817533, 0.817533",\ + "2.193353, 2.193353, 2.193353, 2.193353, 2.193353",\ + "0.115267, 0.115267, 0.115267, 0.115267, 0.115267",\ + "0.141939, 0.141939, 0.141939, 0.141939, 0.141939",\ + "0.190556, 0.190556, 0.190556, 0.190556, 0.190556",\ + "0.817533, 0.817533, 0.817533, 0.817533, 0.817533",\ + "2.193353, 2.193353, 2.193353, 2.193353, 2.193353",\ + "0.115267, 0.115267, 0.115267, 0.115267, 0.115267",\ + "0.141939, 0.141939, 0.141939, 0.141939, 0.141939",\ + "0.190556, 0.190556, 0.190556, 0.190556, 0.190556",\ + "0.817533, 0.817533, 0.817533, 0.817533, 0.817533",\ + "2.193353, 2.193353, 2.193353, 2.193353, 2.193353",\ + "0.115267, 0.115267, 0.115267, 0.115267, 0.115267",\ + "0.141939, 0.141939, 0.141939, 0.141939, 0.141939",\ + "0.190556, 0.190556, 0.190556, 0.190556, 0.190556",\ + "0.817533, 0.817533, 0.817533, 0.817533, 0.817533",\ + "2.193353, 2.193353, 2.193353, 2.193353, 2.193353",\ + "0.115267, 0.115267, 0.115267, 0.115267, 0.115267",\ + "0.141939, 0.141939, 0.141939, 0.141939, 0.141939",\ + "0.190556, 0.190556, 0.190556, 0.190556, 0.190556",\ + "0.817533, 0.817533, 0.817533, 0.817533, 0.817533",\ + "2.193353, 2.193353, 2.193353, 2.193353, 2.193353"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.489199, 0.705753, 0.885429, 1.175533, 1.737949",\ + "0.497006, 0.713560, 0.893235, 1.183340, 1.745756",\ + "0.510387, 0.726941, 0.906617, 1.196721, 1.759137",\ + "0.662333, 0.878887, 1.058563, 1.348667, 1.911083",\ + "0.995767, 1.212322, 1.391997, 1.682102, 2.244518",\ + "0.577490, 0.793071, 0.972710, 1.262838, 1.825302",\ + "0.585296, 0.800878, 0.980516, 1.270645, 1.833109",\ + "0.598678, 0.814260, 0.993898, 1.284026, 1.846490",\ + "0.750624, 0.966205, 1.145844, 1.435972, 1.998436",\ + "1.084058, 1.299640, 1.479278, 1.769407, 2.331871",\ + "0.666531, 0.873404, 1.052737, 1.342866, 1.905334",\ + "0.674337, 0.881211, 1.060543, 1.350673, 1.913141",\ + "0.687719, 0.894592, 1.073925, 1.364055, 1.926522",\ + "0.839665, 1.046538, 1.225871, 1.516001, 2.078468",\ + "1.173099, 1.379973, 1.559305, 1.849435, 2.411902",\ + "0.729892, 0.931235, 1.110434, 1.400298, 1.962354",\ + "0.737699, 0.939041, 1.118240, 1.408105, 1.970161",\ + "0.751080, 0.952423, 1.131622, 1.421487, 1.983542",\ + "0.903026, 1.104369, 1.283568, 1.573432, 2.135488",\ + "1.236461, 1.437803, 1.617002, 1.906867, 2.468923",\ + "1.054784, 1.236553, 1.414090, 1.703472, 2.264581",\ + "1.062591, 1.244360, 1.421896, 1.711279, 2.272388",\ + "1.075972, 1.257741, 1.435278, 1.724660, 2.285769",\ + "1.227918, 1.409687, 1.587224, 1.876606, 2.437715",\ + "1.561353, 1.743122, 1.920659, 2.210041, 2.771150"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.049723, 0.049723, 0.049723, 0.049723, 0.049723",\ + "0.055443, 0.055443, 0.055443, 0.055443, 0.055443",\ + "0.075302, 0.075302, 0.075302, 0.075302, 0.075302",\ + "0.368589, 0.368589, 0.368589, 0.368589, 0.368589",\ + "1.002262, 1.002262, 1.002262, 1.002262, 1.002262",\ + "0.049723, 0.049723, 0.049723, 0.049723, 0.049723",\ + "0.055443, 0.055443, 0.055443, 0.055443, 0.055443",\ + "0.075302, 0.075302, 0.075302, 0.075302, 0.075302",\ + "0.368589, 0.368589, 0.368589, 0.368589, 0.368589",\ + "1.002262, 1.002262, 1.002262, 1.002262, 1.002262",\ + "0.049723, 0.049723, 0.049723, 0.049723, 0.049723",\ + "0.055443, 0.055443, 0.055443, 0.055443, 0.055443",\ + "0.075302, 0.075302, 0.075302, 0.075302, 0.075302",\ + "0.368589, 0.368589, 0.368589, 0.368589, 0.368589",\ + "1.002262, 1.002262, 1.002262, 1.002262, 1.002262",\ + "0.049723, 0.049723, 0.049723, 0.049723, 0.049723",\ + "0.055443, 0.055443, 0.055443, 0.055443, 0.055443",\ + "0.075302, 0.075302, 0.075302, 0.075302, 0.075302",\ + "0.368589, 0.368589, 0.368589, 0.368589, 0.368589",\ + "1.002262, 1.002262, 1.002262, 1.002262, 1.002262",\ + "0.049723, 0.049723, 0.049723, 0.049723, 0.049723",\ + "0.055443, 0.055443, 0.055443, 0.055443, 0.055443",\ + "0.075302, 0.075302, 0.075302, 0.075302, 0.075302",\ + "0.368589, 0.368589, 0.368589, 0.368589, 0.368589",\ + "1.002262, 1.002262, 1.002262, 1.002262, 1.002262"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[7]_redg_min_2568*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[19]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.486016, 0.718373, 0.902601, 1.196441, 1.764052",\ + "0.505233, 0.737590, 0.921817, 1.215657, 1.783269",\ + "0.536881, 0.769238, 0.953465, 1.247305, 1.814917",\ + "0.827470, 1.059827, 1.244054, 1.537894, 2.105506",\ + "1.421473, 1.653830, 1.838057, 2.131897, 2.699509",\ + "0.574330, 0.805691, 0.989882, 1.283746, 1.851406",\ + "0.593546, 0.824908, 1.009098, 1.302962, 1.870622",\ + "0.625194, 0.856556, 1.040746, 1.334610, 1.902271",\ + "0.915783, 1.147145, 1.331335, 1.625199, 2.192860",\ + "1.509786, 1.741148, 1.925338, 2.219203, 2.786862",\ + "0.663471, 0.886024, 1.069909, 1.363774, 1.931437",\ + "0.682687, 0.905240, 1.089125, 1.382991, 1.950654",\ + "0.714335, 0.936888, 1.120773, 1.414639, 1.982302",\ + "1.004924, 1.227477, 1.411362, 1.705228, 2.272891",\ + "1.598927, 1.821480, 2.005365, 2.299231, 2.866894",\ + "0.726940, 0.943856, 1.127617, 1.421213, 1.988470",\ + "0.746156, 0.963072, 1.146833, 1.440429, 2.007687",\ + "0.777804, 0.994720, 1.178482, 1.472077, 2.039335",\ + "1.068393, 1.285309, 1.469070, 1.762666, 2.329924",\ + "1.662396, 1.879312, 2.063073, 2.356669, 2.923927",\ + "1.062221, 1.249183, 1.431275, 1.724391, 2.290713",\ + "1.081437, 1.268400, 1.450491, 1.743608, 2.309929",\ + "1.113086, 1.300048, 1.482139, 1.775256, 2.341578",\ + "1.403675, 1.590637, 1.772728, 2.065845, 2.632166",\ + "1.997678, 2.184640, 2.366731, 2.659848, 3.226169"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.115267, 0.115267, 0.115267, 0.115267, 0.115267",\ + "0.141939, 0.141939, 0.141939, 0.141939, 0.141939",\ + "0.190556, 0.190556, 0.190556, 0.190556, 0.190556",\ + "0.817533, 0.817533, 0.817533, 0.817533, 0.817533",\ + "2.193353, 2.193353, 2.193353, 2.193353, 2.193353",\ + "0.115267, 0.115267, 0.115267, 0.115267, 0.115267",\ + "0.141939, 0.141939, 0.141939, 0.141939, 0.141939",\ + "0.190556, 0.190556, 0.190556, 0.190556, 0.190556",\ + "0.817533, 0.817533, 0.817533, 0.817533, 0.817533",\ + "2.193353, 2.193353, 2.193353, 2.193353, 2.193353",\ + "0.115267, 0.115267, 0.115267, 0.115267, 0.115267",\ + "0.141939, 0.141939, 0.141939, 0.141939, 0.141939",\ + "0.190556, 0.190556, 0.190556, 0.190556, 0.190556",\ + "0.817533, 0.817533, 0.817533, 0.817533, 0.817533",\ + "2.193353, 2.193353, 2.193353, 2.193353, 2.193353",\ + "0.115267, 0.115267, 0.115267, 0.115267, 0.115267",\ + "0.141939, 0.141939, 0.141939, 0.141939, 0.141939",\ + "0.190556, 0.190556, 0.190556, 0.190556, 0.190556",\ + "0.817533, 0.817533, 0.817533, 0.817533, 0.817533",\ + "2.193353, 2.193353, 2.193353, 2.193353, 2.193353",\ + "0.115267, 0.115267, 0.115267, 0.115267, 0.115267",\ + "0.141939, 0.141939, 0.141939, 0.141939, 0.141939",\ + "0.190556, 0.190556, 0.190556, 0.190556, 0.190556",\ + "0.817533, 0.817533, 0.817533, 0.817533, 0.817533",\ + "2.193353, 2.193353, 2.193353, 2.193353, 2.193353"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.498430, 0.730787, 0.915014, 1.208854, 1.776466",\ + "0.506236, 0.738593, 0.922821, 1.216661, 1.784272",\ + "0.519618, 0.751975, 0.936202, 1.230042, 1.797654",\ + "0.671564, 0.903921, 1.088148, 1.381988, 1.949600",\ + "1.004998, 1.237355, 1.421583, 1.715423, 2.283034",\ + "0.586743, 0.818105, 1.002295, 1.296159, 1.863819",\ + "0.594550, 0.825911, 1.010102, 1.303966, 1.871626",\ + "0.607931, 0.839293, 1.023483, 1.317347, 1.885008",\ + "0.759877, 0.991239, 1.175429, 1.469293, 2.036953",\ + "1.093312, 1.324673, 1.508864, 1.802728, 2.370388",\ + "0.675884, 0.898437, 1.082322, 1.376188, 1.943851",\ + "0.683691, 0.906244, 1.090129, 1.383994, 1.951658",\ + "0.697072, 0.919625, 1.103510, 1.397376, 1.965039",\ + "0.849018, 1.071571, 1.255456, 1.549322, 2.116985",\ + "1.182453, 1.405006, 1.588891, 1.882756, 2.450419",\ + "0.739353, 0.956269, 1.140030, 1.433626, 2.000884",\ + "0.747160, 0.964076, 1.147837, 1.441433, 2.008690",\ + "0.760541, 0.977457, 1.161218, 1.454814, 2.022072",\ + "0.912487, 1.129403, 1.313164, 1.606760, 2.174018",\ + "1.245922, 1.462838, 1.646599, 1.940195, 2.507452",\ + "1.074634, 1.261597, 1.443688, 1.736805, 2.303126",\ + "1.082441, 1.269403, 1.451495, 1.744612, 2.310933",\ + "1.095823, 1.282785, 1.464876, 1.757993, 2.324314",\ + "1.247769, 1.434731, 1.616822, 1.909939, 2.476260",\ + "1.581203, 1.768166, 1.950257, 2.243373, 2.809695"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.049723, 0.049723, 0.049723, 0.049723, 0.049723",\ + "0.055443, 0.055443, 0.055443, 0.055443, 0.055443",\ + "0.075302, 0.075302, 0.075302, 0.075302, 0.075302",\ + "0.368589, 0.368589, 0.368589, 0.368589, 0.368589",\ + "1.002262, 1.002262, 1.002262, 1.002262, 1.002262",\ + "0.049723, 0.049723, 0.049723, 0.049723, 0.049723",\ + "0.055443, 0.055443, 0.055443, 0.055443, 0.055443",\ + "0.075302, 0.075302, 0.075302, 0.075302, 0.075302",\ + "0.368589, 0.368589, 0.368589, 0.368589, 0.368589",\ + "1.002262, 1.002262, 1.002262, 1.002262, 1.002262",\ + "0.049723, 0.049723, 0.049723, 0.049723, 0.049723",\ + "0.055443, 0.055443, 0.055443, 0.055443, 0.055443",\ + "0.075302, 0.075302, 0.075302, 0.075302, 0.075302",\ + "0.368589, 0.368589, 0.368589, 0.368589, 0.368589",\ + "1.002262, 1.002262, 1.002262, 1.002262, 1.002262",\ + "0.049723, 0.049723, 0.049723, 0.049723, 0.049723",\ + "0.055443, 0.055443, 0.055443, 0.055443, 0.055443",\ + "0.075302, 0.075302, 0.075302, 0.075302, 0.075302",\ + "0.368589, 0.368589, 0.368589, 0.368589, 0.368589",\ + "1.002262, 1.002262, 1.002262, 1.002262, 1.002262",\ + "0.049723, 0.049723, 0.049723, 0.049723, 0.049723",\ + "0.055443, 0.055443, 0.055443, 0.055443, 0.055443",\ + "0.075302, 0.075302, 0.075302, 0.075302, 0.075302",\ + "0.368589, 0.368589, 0.368589, 0.368589, 0.368589",\ + "1.002262, 1.002262, 1.002262, 1.002262, 1.002262"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[7]_redg_min_2617*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[22]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.524148, 0.759556, 0.949466, 1.254683, 1.845217",\ + "0.543365, 0.778772, 0.968683, 1.273899, 1.864433",\ + "0.575013, 0.810420, 1.000331, 1.305547, 1.896082",\ + "0.865602, 1.101009, 1.290920, 1.596136, 2.186671",\ + "1.459605, 1.695012, 1.884923, 2.190139, 2.780674",\ + "0.612629, 0.846874, 1.036747, 1.341988, 1.932570",\ + "0.631845, 0.866090, 1.055964, 1.361204, 1.951787",\ + "0.663493, 0.897739, 1.087612, 1.392852, 1.983435",\ + "0.954082, 1.188328, 1.378201, 1.683442, 2.274024",\ + "1.548085, 1.782331, 1.972204, 2.277444, 2.868027",\ + "0.702172, 0.927207, 1.116774, 1.422016, 2.012602",\ + "0.721389, 0.946423, 1.135991, 1.441233, 2.031818",\ + "0.753037, 0.978072, 1.167639, 1.472881, 2.063467",\ + "1.043626, 1.268661, 1.458228, 1.763470, 2.354056",\ + "1.637629, 1.862664, 2.052231, 2.357473, 2.948059",\ + "0.765979, 0.985042, 1.174496, 1.479482, 2.069690",\ + "0.785195, 1.004258, 1.193712, 1.498699, 2.088906",\ + "0.816843, 1.035906, 1.225360, 1.530347, 2.120554",\ + "1.107432, 1.326495, 1.515949, 1.820936, 2.411143",\ + "1.701435, 1.920498, 2.109952, 2.414939, 3.005147",\ + "1.103410, 1.290390, 1.478156, 1.782685, 2.371999",\ + "1.122626, 1.309606, 1.497372, 1.801901, 2.391215",\ + "1.154274, 1.341254, 1.529020, 1.833550, 2.422863",\ + "1.444863, 1.631843, 1.819609, 2.124139, 2.713452",\ + "2.038866, 2.225846, 2.413612, 2.718142, 3.307455"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.115267, 0.115267, 0.115267, 0.115267, 0.115267",\ + "0.141939, 0.141939, 0.141939, 0.141939, 0.141939",\ + "0.190556, 0.190556, 0.190556, 0.190556, 0.190556",\ + "0.817533, 0.817533, 0.817533, 0.817533, 0.817533",\ + "2.193353, 2.193353, 2.193353, 2.193353, 2.193353",\ + "0.115267, 0.115267, 0.115267, 0.115267, 0.115267",\ + "0.141939, 0.141939, 0.141939, 0.141939, 0.141939",\ + "0.190556, 0.190556, 0.190556, 0.190556, 0.190556",\ + "0.817533, 0.817533, 0.817533, 0.817533, 0.817533",\ + "2.193353, 2.193353, 2.193353, 2.193353, 2.193353",\ + "0.115267, 0.115267, 0.115267, 0.115267, 0.115267",\ + "0.141939, 0.141939, 0.141939, 0.141939, 0.141939",\ + "0.190556, 0.190556, 0.190556, 0.190556, 0.190556",\ + "0.817533, 0.817533, 0.817533, 0.817533, 0.817533",\ + "2.193353, 2.193353, 2.193353, 2.193353, 2.193353",\ + "0.115267, 0.115267, 0.115267, 0.115267, 0.115267",\ + "0.141939, 0.141939, 0.141939, 0.141939, 0.141939",\ + "0.190556, 0.190556, 0.190556, 0.190556, 0.190556",\ + "0.817533, 0.817533, 0.817533, 0.817533, 0.817533",\ + "2.193353, 2.193353, 2.193353, 2.193353, 2.193353",\ + "0.115267, 0.115267, 0.115267, 0.115267, 0.115267",\ + "0.141939, 0.141939, 0.141939, 0.141939, 0.141939",\ + "0.190556, 0.190556, 0.190556, 0.190556, 0.190556",\ + "0.817533, 0.817533, 0.817533, 0.817533, 0.817533",\ + "2.193353, 2.193353, 2.193353, 2.193353, 2.193353"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.536562, 0.771969, 0.961880, 1.267096, 1.857630",\ + "0.544368, 0.779776, 0.969686, 1.274903, 1.865437",\ + "0.557750, 0.793157, 0.983068, 1.288284, 1.878819",\ + "0.709696, 0.945103, 1.135014, 1.440230, 2.030764",\ + "1.043130, 1.278538, 1.468448, 1.773665, 2.364199",\ + "0.625042, 0.859287, 1.049161, 1.354401, 1.944984",\ + "0.632849, 0.867094, 1.056967, 1.362208, 1.952790",\ + "0.646230, 0.880476, 1.070349, 1.375589, 1.966172",\ + "0.798176, 1.032422, 1.222295, 1.527535, 2.118118",\ + "1.131611, 1.365856, 1.555729, 1.860970, 2.451552",\ + "0.714586, 0.939620, 1.129188, 1.434430, 2.025015",\ + "0.722392, 0.947427, 1.136994, 1.442236, 2.032822",\ + "0.735774, 0.960809, 1.150376, 1.455618, 2.046204",\ + "0.887720, 1.112755, 1.302322, 1.607564, 2.198149",\ + "1.221154, 1.446189, 1.635756, 1.940998, 2.531584",\ + "0.778392, 0.997455, 1.186909, 1.491896, 2.082103",\ + "0.786199, 1.005262, 1.194716, 1.499702, 2.089910",\ + "0.799580, 1.018643, 1.208097, 1.513084, 2.103292",\ + "0.951526, 1.170589, 1.360043, 1.665030, 2.255237",\ + "1.284961, 1.504024, 1.693478, 1.998464, 2.588672",\ + "1.115823, 1.302803, 1.490569, 1.795098, 2.384412",\ + "1.123630, 1.310610, 1.498376, 1.802905, 2.392219",\ + "1.137011, 1.323991, 1.511757, 1.816287, 2.405600",\ + "1.288957, 1.475937, 1.663703, 1.968233, 2.557546",\ + "1.622392, 1.809372, 1.997138, 2.301667, 2.890981"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.049723, 0.049723, 0.049723, 0.049723, 0.049723",\ + "0.055443, 0.055443, 0.055443, 0.055443, 0.055443",\ + "0.075302, 0.075302, 0.075302, 0.075302, 0.075302",\ + "0.368589, 0.368589, 0.368589, 0.368589, 0.368589",\ + "1.002262, 1.002262, 1.002262, 1.002262, 1.002262",\ + "0.049723, 0.049723, 0.049723, 0.049723, 0.049723",\ + "0.055443, 0.055443, 0.055443, 0.055443, 0.055443",\ + "0.075302, 0.075302, 0.075302, 0.075302, 0.075302",\ + "0.368589, 0.368589, 0.368589, 0.368589, 0.368589",\ + "1.002262, 1.002262, 1.002262, 1.002262, 1.002262",\ + "0.049723, 0.049723, 0.049723, 0.049723, 0.049723",\ + "0.055443, 0.055443, 0.055443, 0.055443, 0.055443",\ + "0.075302, 0.075302, 0.075302, 0.075302, 0.075302",\ + "0.368589, 0.368589, 0.368589, 0.368589, 0.368589",\ + "1.002262, 1.002262, 1.002262, 1.002262, 1.002262",\ + "0.049723, 0.049723, 0.049723, 0.049723, 0.049723",\ + "0.055443, 0.055443, 0.055443, 0.055443, 0.055443",\ + "0.075302, 0.075302, 0.075302, 0.075302, 0.075302",\ + "0.368589, 0.368589, 0.368589, 0.368589, 0.368589",\ + "1.002262, 1.002262, 1.002262, 1.002262, 1.002262",\ + "0.049723, 0.049723, 0.049723, 0.049723, 0.049723",\ + "0.055443, 0.055443, 0.055443, 0.055443, 0.055443",\ + "0.075302, 0.075302, 0.075302, 0.075302, 0.075302",\ + "0.368589, 0.368589, 0.368589, 0.368589, 0.368589",\ + "1.002262, 1.002262, 1.002262, 1.002262, 1.002262"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[7]_redg_min*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[25]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.507236, 0.738300, 0.923184, 1.222269, 1.802199",\ + "0.526452, 0.757517, 0.942400, 1.241485, 1.821415",\ + "0.558100, 0.789165, 0.974048, 1.273133, 1.853063",\ + "0.848689, 1.079754, 1.264637, 1.563722, 2.143652",\ + "1.442692, 1.673757, 1.858641, 2.157725, 2.737655",\ + "0.595614, 0.825618, 1.010465, 1.309574, 1.889552",\ + "0.614831, 0.844835, 1.029681, 1.328790, 1.908768",\ + "0.646479, 0.876483, 1.061329, 1.360438, 1.940417",\ + "0.937068, 1.167072, 1.351918, 1.651027, 2.231006",\ + "1.531071, 1.761075, 1.945922, 2.245030, 2.825009",\ + "0.685193, 0.905949, 1.090492, 1.389602, 1.969584",\ + "0.704409, 0.925165, 1.109708, 1.408819, 1.988800",\ + "0.736058, 0.956813, 1.141356, 1.440467, 2.020448",\ + "1.026647, 1.247402, 1.431945, 1.731056, 2.311038",\ + "1.620650, 1.841405, 2.025949, 2.325059, 2.905041",\ + "0.749178, 0.963779, 1.148202, 1.447056, 2.026647",\ + "0.768394, 0.982995, 1.167418, 1.466272, 2.045864",\ + "0.800042, 1.014643, 1.199067, 1.497920, 2.077512",\ + "1.090631, 1.305233, 1.489656, 1.788509, 2.368101",\ + "1.684634, 1.899235, 2.083659, 2.382513, 2.962104",\ + "1.087729, 1.269086, 1.451859, 1.750247, 2.328927",\ + "1.106946, 1.288302, 1.471076, 1.769464, 2.348143",\ + "1.138594, 1.319950, 1.502724, 1.801112, 2.379791",\ + "1.429183, 1.610539, 1.793313, 2.091701, 2.670381",\ + "2.023186, 2.204542, 2.387316, 2.685704, 3.264384"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.115268, 0.115268, 0.115268, 0.115268, 0.115268",\ + "0.141939, 0.141939, 0.141939, 0.141939, 0.141939",\ + "0.190556, 0.190556, 0.190556, 0.190556, 0.190556",\ + "0.817533, 0.817533, 0.817533, 0.817533, 0.817533",\ + "2.193353, 2.193353, 2.193353, 2.193353, 2.193353",\ + "0.115268, 0.115268, 0.115268, 0.115268, 0.115268",\ + "0.141939, 0.141939, 0.141939, 0.141939, 0.141939",\ + "0.190556, 0.190556, 0.190556, 0.190556, 0.190556",\ + "0.817533, 0.817533, 0.817533, 0.817533, 0.817533",\ + "2.193353, 2.193353, 2.193353, 2.193353, 2.193353",\ + "0.115268, 0.115268, 0.115268, 0.115268, 0.115268",\ + "0.141939, 0.141939, 0.141939, 0.141939, 0.141939",\ + "0.190556, 0.190556, 0.190556, 0.190556, 0.190556",\ + "0.817533, 0.817533, 0.817533, 0.817533, 0.817533",\ + "2.193353, 2.193353, 2.193353, 2.193353, 2.193353",\ + "0.115268, 0.115268, 0.115268, 0.115268, 0.115268",\ + "0.141939, 0.141939, 0.141939, 0.141939, 0.141939",\ + "0.190556, 0.190556, 0.190556, 0.190556, 0.190556",\ + "0.817533, 0.817533, 0.817533, 0.817533, 0.817533",\ + "2.193353, 2.193353, 2.193353, 2.193353, 2.193353",\ + "0.115268, 0.115268, 0.115268, 0.115268, 0.115268",\ + "0.141939, 0.141939, 0.141939, 0.141939, 0.141939",\ + "0.190556, 0.190556, 0.190556, 0.190556, 0.190556",\ + "0.817533, 0.817533, 0.817533, 0.817533, 0.817533",\ + "2.193353, 2.193353, 2.193353, 2.193353, 2.193353"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.519649, 0.750714, 0.935597, 1.234682, 1.814612",\ + "0.527456, 0.758521, 0.943404, 1.242489, 1.822419",\ + "0.540837, 0.771902, 0.956786, 1.255870, 1.835800",\ + "0.692783, 0.923848, 1.108731, 1.407816, 1.987746",\ + "1.026218, 1.257282, 1.442166, 1.741251, 2.321181",\ + "0.608028, 0.838032, 1.022878, 1.321987, 1.901966",\ + "0.615835, 0.845838, 1.030685, 1.329794, 1.909772",\ + "0.629216, 0.859220, 1.044067, 1.343176, 1.923154",\ + "0.781162, 1.011166, 1.196012, 1.495121, 2.075100",\ + "1.114597, 1.344600, 1.529447, 1.828556, 2.408534",\ + "0.697607, 0.918362, 1.102905, 1.402016, 1.981997",\ + "0.705413, 0.926169, 1.110712, 1.409823, 1.989804",\ + "0.718795, 0.939550, 1.124094, 1.423204, 2.003186",\ + "0.870741, 1.091496, 1.276039, 1.575150, 2.155131",\ + "1.204175, 1.424931, 1.609474, 1.908584, 2.488566",\ + "0.761591, 0.976192, 1.160616, 1.459469, 2.039061",\ + "0.769398, 0.983999, 1.168422, 1.467276, 2.046868",\ + "0.782779, 0.997381, 1.181804, 1.480658, 2.060249",\ + "0.934725, 1.149326, 1.333750, 1.632603, 2.212195",\ + "1.268160, 1.482761, 1.667184, 1.966038, 2.545630",\ + "1.100143, 1.281499, 1.464273, 1.762661, 2.341341",\ + "1.107950, 1.289306, 1.472080, 1.770468, 2.349147",\ + "1.121331, 1.302687, 1.485461, 1.783849, 2.362529",\ + "1.273277, 1.454633, 1.637407, 1.935795, 2.514474",\ + "1.606712, 1.788068, 1.970841, 2.269229, 2.847909"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.049723, 0.049723, 0.049723, 0.049723, 0.049723",\ + "0.055443, 0.055443, 0.055443, 0.055443, 0.055443",\ + "0.075302, 0.075302, 0.075302, 0.075302, 0.075302",\ + "0.368589, 0.368589, 0.368589, 0.368589, 0.368589",\ + "1.002262, 1.002262, 1.002262, 1.002262, 1.002262",\ + "0.049723, 0.049723, 0.049723, 0.049723, 0.049723",\ + "0.055443, 0.055443, 0.055443, 0.055443, 0.055443",\ + "0.075302, 0.075302, 0.075302, 0.075302, 0.075302",\ + "0.368589, 0.368589, 0.368589, 0.368589, 0.368589",\ + "1.002262, 1.002262, 1.002262, 1.002262, 1.002262",\ + "0.049723, 0.049723, 0.049723, 0.049723, 0.049723",\ + "0.055443, 0.055443, 0.055443, 0.055443, 0.055443",\ + "0.075302, 0.075302, 0.075302, 0.075302, 0.075302",\ + "0.368589, 0.368589, 0.368589, 0.368589, 0.368589",\ + "1.002262, 1.002262, 1.002262, 1.002262, 1.002262",\ + "0.049723, 0.049723, 0.049723, 0.049723, 0.049723",\ + "0.055443, 0.055443, 0.055443, 0.055443, 0.055443",\ + "0.075302, 0.075302, 0.075302, 0.075302, 0.075302",\ + "0.368589, 0.368589, 0.368589, 0.368589, 0.368589",\ + "1.002262, 1.002262, 1.002262, 1.002262, 1.002262",\ + "0.049723, 0.049723, 0.049723, 0.049723, 0.049723",\ + "0.055443, 0.055443, 0.055443, 0.055443, 0.055443",\ + "0.075302, 0.075302, 0.075302, 0.075302, 0.075302",\ + "0.368589, 0.368589, 0.368589, 0.368589, 0.368589",\ + "1.002262, 1.002262, 1.002262, 1.002262, 1.002262"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[7]_redg_min_2419*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[29]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.424754, 0.655573, 0.839933, 1.133631, 1.700828",\ + "0.443986, 0.674805, 0.859165, 1.152863, 1.720060",\ + "0.475654, 0.706473, 0.890833, 1.184531, 1.751728",\ + "0.765910, 0.996730, 1.181089, 1.474787, 2.041985",\ + "1.359893, 1.590712, 1.775072, 2.068770, 2.635967",\ + "0.513060, 0.742891, 0.927214, 1.220936, 1.788182",\ + "0.532291, 0.762123, 0.946446, 1.240168, 1.807413",\ + "0.563959, 0.793791, 0.978114, 1.271836, 1.839081",\ + "0.854216, 1.084048, 1.268370, 1.562092, 2.129338",\ + "1.448198, 1.678030, 1.862353, 2.156075, 2.723320",\ + "0.602427, 0.823222, 1.007241, 1.300965, 1.868213",\ + "0.621658, 0.842453, 1.026473, 1.320196, 1.887445",\ + "0.653326, 0.874121, 1.058141, 1.351864, 1.919113",\ + "0.943583, 1.164378, 1.348397, 1.642121, 2.209370",\ + "1.537565, 1.758360, 1.942380, 2.236103, 2.803352",\ + "0.666215, 0.881051, 1.064950, 1.358403, 1.925246",\ + "0.685446, 0.900283, 1.084182, 1.377634, 1.944478",\ + "0.717114, 0.931951, 1.115850, 1.409302, 1.976146",\ + "1.007371, 1.222207, 1.406106, 1.699559, 2.266402",\ + "1.601353, 1.816190, 2.000089, 2.293541, 2.860385",\ + "1.003512, 1.186351, 1.368608, 1.661581, 2.227489",\ + "1.022744, 1.205583, 1.387839, 1.680812, 2.246720",\ + "1.054412, 1.237251, 1.419507, 1.712481, 2.278388",\ + "1.344668, 1.527507, 1.709764, 2.002737, 2.568645",\ + "1.938651, 2.121490, 2.303746, 2.596720, 3.162627"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.112220, 0.112220, 0.112220, 0.112220, 0.112220",\ + "0.140967, 0.140967, 0.140967, 0.140967, 0.140967",\ + "0.189997, 0.189997, 0.189997, 0.189997, 0.189997",\ + "0.817613, 0.817613, 0.817613, 0.817613, 0.817613",\ + "2.194227, 2.194227, 2.194227, 2.194227, 2.194227",\ + "0.112220, 0.112220, 0.112220, 0.112220, 0.112220",\ + "0.140967, 0.140967, 0.140967, 0.140967, 0.140967",\ + "0.189997, 0.189997, 0.189997, 0.189997, 0.189997",\ + "0.817613, 0.817613, 0.817613, 0.817613, 0.817613",\ + "2.194227, 2.194227, 2.194227, 2.194227, 2.194227",\ + "0.112220, 0.112220, 0.112220, 0.112220, 0.112220",\ + "0.140967, 0.140967, 0.140967, 0.140967, 0.140967",\ + "0.189997, 0.189997, 0.189997, 0.189997, 0.189997",\ + "0.817613, 0.817613, 0.817613, 0.817613, 0.817613",\ + "2.194227, 2.194227, 2.194227, 2.194227, 2.194227",\ + "0.112220, 0.112220, 0.112220, 0.112220, 0.112220",\ + "0.140967, 0.140967, 0.140967, 0.140967, 0.140967",\ + "0.189997, 0.189997, 0.189997, 0.189997, 0.189997",\ + "0.817613, 0.817613, 0.817613, 0.817613, 0.817613",\ + "2.194227, 2.194227, 2.194227, 2.194227, 2.194227",\ + "0.112220, 0.112220, 0.112220, 0.112220, 0.112220",\ + "0.140967, 0.140967, 0.140967, 0.140967, 0.140967",\ + "0.189997, 0.189997, 0.189997, 0.189997, 0.189997",\ + "0.817613, 0.817613, 0.817613, 0.817613, 0.817613",\ + "2.194227, 2.194227, 2.194227, 2.194227, 2.194227"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.436529, 0.667348, 0.851708, 1.145406, 1.712603",\ + "0.444331, 0.675151, 0.859510, 1.153208, 1.720405",\ + "0.457727, 0.688547, 0.872906, 1.166604, 1.733801",\ + "0.609942, 0.840761, 1.025121, 1.318819, 1.886016",\ + "0.943575, 1.174394, 1.358754, 1.652452, 2.219649",\ + "0.524834, 0.754666, 0.938989, 1.232711, 1.799956",\ + "0.532637, 0.762468, 0.946791, 1.240513, 1.807759",\ + "0.546033, 0.775864, 0.960187, 1.253909, 1.821155",\ + "0.698247, 0.928079, 1.112402, 1.406124, 1.973369",\ + "1.031881, 1.261712, 1.446035, 1.739757, 2.307003",\ + "0.614201, 0.834996, 1.019016, 1.312739, 1.879988",\ + "0.622004, 0.842799, 1.026818, 1.320542, 1.887790",\ + "0.635400, 0.856195, 1.040214, 1.333938, 1.901186",\ + "0.787614, 1.008409, 1.192429, 1.486152, 2.053401",\ + "1.121248, 1.342043, 1.526062, 1.819786, 2.387034",\ + "0.677989, 0.892826, 1.076725, 1.370177, 1.937021",\ + "0.685792, 0.900628, 1.084527, 1.377980, 1.944823",\ + "0.699188, 0.914024, 1.097923, 1.391376, 1.958219",\ + "0.851402, 1.066239, 1.250138, 1.543590, 2.110434",\ + "1.185036, 1.399872, 1.583771, 1.877224, 2.444067",\ + "1.015287, 1.198126, 1.380382, 1.673356, 2.239263",\ + "1.023089, 1.205928, 1.388185, 1.681158, 2.247066",\ + "1.036485, 1.219324, 1.401581, 1.694554, 2.260462",\ + "1.188700, 1.371539, 1.553795, 1.846768, 2.412676",\ + "1.522333, 1.705172, 1.887429, 2.180402, 2.746310"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.049540, 0.049540, 0.049540, 0.049540, 0.049540",\ + "0.055489, 0.055489, 0.055489, 0.055489, 0.055489",\ + "0.075307, 0.075307, 0.075307, 0.075307, 0.075307",\ + "0.368653, 0.368653, 0.368653, 0.368653, 0.368653",\ + "1.002321, 1.002321, 1.002321, 1.002321, 1.002321",\ + "0.049540, 0.049540, 0.049540, 0.049540, 0.049540",\ + "0.055489, 0.055489, 0.055489, 0.055489, 0.055489",\ + "0.075307, 0.075307, 0.075307, 0.075307, 0.075307",\ + "0.368653, 0.368653, 0.368653, 0.368653, 0.368653",\ + "1.002321, 1.002321, 1.002321, 1.002321, 1.002321",\ + "0.049540, 0.049540, 0.049540, 0.049540, 0.049540",\ + "0.055489, 0.055489, 0.055489, 0.055489, 0.055489",\ + "0.075307, 0.075307, 0.075307, 0.075307, 0.075307",\ + "0.368653, 0.368653, 0.368653, 0.368653, 0.368653",\ + "1.002321, 1.002321, 1.002321, 1.002321, 1.002321",\ + "0.049540, 0.049540, 0.049540, 0.049540, 0.049540",\ + "0.055489, 0.055489, 0.055489, 0.055489, 0.055489",\ + "0.075307, 0.075307, 0.075307, 0.075307, 0.075307",\ + "0.368653, 0.368653, 0.368653, 0.368653, 0.368653",\ + "1.002321, 1.002321, 1.002321, 1.002321, 1.002321",\ + "0.049540, 0.049540, 0.049540, 0.049540, 0.049540",\ + "0.055489, 0.055489, 0.055489, 0.055489, 0.055489",\ + "0.075307, 0.075307, 0.075307, 0.075307, 0.075307",\ + "0.368653, 0.368653, 0.368653, 0.368653, 0.368653",\ + "1.002321, 1.002321, 1.002321, 1.002321, 1.002321"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[7]_redg_min_2319*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[30]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.417176, 0.631777, 0.810666, 1.100090, 1.661570",\ + "0.436407, 0.651008, 0.829897, 1.119321, 1.680801",\ + "0.468075, 0.682676, 0.861565, 1.150989, 1.712470",\ + "0.758331, 0.972932, 1.151822, 1.441245, 2.002726",\ + "1.352314, 1.566915, 1.745804, 2.035228, 2.596708",\ + "0.505449, 0.719094, 0.897947, 1.187395, 1.748923",\ + "0.524681, 0.738326, 0.917178, 1.206626, 1.768155",\ + "0.556349, 0.769994, 0.948847, 1.238294, 1.799823",\ + "0.846605, 1.060250, 1.239103, 1.528551, 2.090079",\ + "1.440588, 1.654232, 1.833085, 2.122533, 2.684062",\ + "0.594993, 0.799422, 0.977974, 1.267423, 1.828955",\ + "0.614224, 0.818654, 0.997205, 1.286655, 1.848186",\ + "0.645892, 0.850322, 1.028873, 1.318323, 1.879855",\ + "0.936148, 1.140578, 1.319129, 1.608579, 2.170111",\ + "1.530131, 1.734560, 1.913112, 2.202561, 2.764093",\ + "0.659061, 0.857252, 1.035670, 1.324854, 1.885975",\ + "0.678293, 0.876483, 1.054902, 1.344086, 1.905207",\ + "0.709961, 0.908151, 1.086570, 1.375754, 1.936875",\ + "1.000217, 1.198407, 1.376826, 1.666010, 2.227131",\ + "1.594199, 1.792390, 1.970809, 2.259993, 2.821113",\ + "0.982918, 1.162544, 1.339325, 1.628026, 2.188202",\ + "1.002150, 1.181776, 1.358556, 1.647258, 2.207434",\ + "1.033818, 1.213444, 1.390224, 1.678926, 2.239102",\ + "1.324074, 1.503700, 1.680480, 1.969182, 2.529358",\ + "1.918056, 2.097682, 2.274463, 2.563165, 3.123341"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.112216, 0.112216, 0.112216, 0.112216, 0.112216",\ + "0.140967, 0.140967, 0.140967, 0.140967, 0.140967",\ + "0.189998, 0.189998, 0.189998, 0.189998, 0.189998",\ + "0.817613, 0.817613, 0.817613, 0.817613, 0.817613",\ + "2.194229, 2.194229, 2.194229, 2.194229, 2.194229",\ + "0.112216, 0.112216, 0.112216, 0.112216, 0.112216",\ + "0.140967, 0.140967, 0.140967, 0.140967, 0.140967",\ + "0.189998, 0.189998, 0.189998, 0.189998, 0.189998",\ + "0.817613, 0.817613, 0.817613, 0.817613, 0.817613",\ + "2.194229, 2.194229, 2.194229, 2.194229, 2.194229",\ + "0.112216, 0.112216, 0.112216, 0.112216, 0.112216",\ + "0.140967, 0.140967, 0.140967, 0.140967, 0.140967",\ + "0.189998, 0.189998, 0.189998, 0.189998, 0.189998",\ + "0.817613, 0.817613, 0.817613, 0.817613, 0.817613",\ + "2.194229, 2.194229, 2.194229, 2.194229, 2.194229",\ + "0.112216, 0.112216, 0.112216, 0.112216, 0.112216",\ + "0.140967, 0.140967, 0.140967, 0.140967, 0.140967",\ + "0.189998, 0.189998, 0.189998, 0.189998, 0.189998",\ + "0.817613, 0.817613, 0.817613, 0.817613, 0.817613",\ + "2.194229, 2.194229, 2.194229, 2.194229, 2.194229",\ + "0.112216, 0.112216, 0.112216, 0.112216, 0.112216",\ + "0.140967, 0.140967, 0.140967, 0.140967, 0.140967",\ + "0.189998, 0.189998, 0.189998, 0.189998, 0.189998",\ + "0.817613, 0.817613, 0.817613, 0.817613, 0.817613",\ + "2.194229, 2.194229, 2.194229, 2.194229, 2.194229"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.428949, 0.643550, 0.822439, 1.111863, 1.673344",\ + "0.436752, 0.651353, 0.830242, 1.119666, 1.681146",\ + "0.450148, 0.664749, 0.843638, 1.133062, 1.694542",\ + "0.602363, 0.816964, 0.995853, 1.285277, 1.846757",\ + "0.935996, 1.150597, 1.329487, 1.618910, 2.180391",\ + "0.517223, 0.730868, 0.909721, 1.199168, 1.760697",\ + "0.525026, 0.738670, 0.917523, 1.206971, 1.768500",\ + "0.538422, 0.752066, 0.930919, 1.220367, 1.781896",\ + "0.690637, 0.904281, 1.083134, 1.372582, 1.934110",\ + "1.024270, 1.237915, 1.416768, 1.706216, 2.267744",\ + "0.606766, 0.811196, 0.989747, 1.279197, 1.840729",\ + "0.614569, 0.818998, 0.997550, 1.286999, 1.848531",\ + "0.627965, 0.832394, 1.010946, 1.300395, 1.861927",\ + "0.780180, 0.984609, 1.163161, 1.452610, 2.014142",\ + "1.113814, 1.318243, 1.496794, 1.786244, 2.347776",\ + "0.670835, 0.869025, 1.047444, 1.336628, 1.897749",\ + "0.678637, 0.876828, 1.055247, 1.344431, 1.905551",\ + "0.692033, 0.890224, 1.068643, 1.357827, 1.918947",\ + "0.844248, 1.042439, 1.220857, 1.510042, 2.071162",\ + "1.177882, 1.376072, 1.554491, 1.843675, 2.404796",\ + "0.994692, 1.174318, 1.351099, 1.639800, 2.199976",\ + "1.002494, 1.182121, 1.358901, 1.647603, 2.207778",\ + "1.015890, 1.195517, 1.372297, 1.660999, 2.221174",\ + "1.168105, 1.347732, 1.524512, 1.813214, 2.373389",\ + "1.501739, 1.681365, 1.858145, 2.146847, 2.707023"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.049540, 0.049540, 0.049540, 0.049540, 0.049540",\ + "0.055490, 0.055490, 0.055490, 0.055490, 0.055490",\ + "0.075307, 0.075307, 0.075307, 0.075307, 0.075307",\ + "0.368653, 0.368653, 0.368653, 0.368653, 0.368653",\ + "1.002321, 1.002321, 1.002321, 1.002321, 1.002321",\ + "0.049540, 0.049540, 0.049540, 0.049540, 0.049540",\ + "0.055490, 0.055490, 0.055490, 0.055490, 0.055490",\ + "0.075307, 0.075307, 0.075307, 0.075307, 0.075307",\ + "0.368653, 0.368653, 0.368653, 0.368653, 0.368653",\ + "1.002321, 1.002321, 1.002321, 1.002321, 1.002321",\ + "0.049540, 0.049540, 0.049540, 0.049540, 0.049540",\ + "0.055490, 0.055490, 0.055490, 0.055490, 0.055490",\ + "0.075307, 0.075307, 0.075307, 0.075307, 0.075307",\ + "0.368653, 0.368653, 0.368653, 0.368653, 0.368653",\ + "1.002321, 1.002321, 1.002321, 1.002321, 1.002321",\ + "0.049540, 0.049540, 0.049540, 0.049540, 0.049540",\ + "0.055490, 0.055490, 0.055490, 0.055490, 0.055490",\ + "0.075307, 0.075307, 0.075307, 0.075307, 0.075307",\ + "0.368653, 0.368653, 0.368653, 0.368653, 0.368653",\ + "1.002321, 1.002321, 1.002321, 1.002321, 1.002321",\ + "0.049540, 0.049540, 0.049540, 0.049540, 0.049540",\ + "0.055490, 0.055490, 0.055490, 0.055490, 0.055490",\ + "0.075307, 0.075307, 0.075307, 0.075307, 0.075307",\ + "0.368653, 0.368653, 0.368653, 0.368653, 0.368653",\ + "1.002321, 1.002321, 1.002321, 1.002321, 1.002321"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[7]_redg_min_2377*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[34]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.566889, 0.778471, 0.964383, 1.255517, 1.814850",\ + "0.586120, 0.797703, 0.983615, 1.274748, 1.834081",\ + "0.617788, 0.829371, 1.015283, 1.306417, 1.865749",\ + "0.908045, 1.119627, 1.305539, 1.596673, 2.156006",\ + "1.502027, 1.713610, 1.899522, 2.190655, 2.749988",\ + "0.655251, 0.865790, 1.051664, 1.342822, 1.902203",\ + "0.674483, 0.885021, 1.070896, 1.362054, 1.921435",\ + "0.706151, 0.916689, 1.102564, 1.393722, 1.953103",\ + "0.996407, 1.206946, 1.392820, 1.683978, 2.243359",\ + "1.590390, 1.800928, 1.986803, 2.277961, 2.837342",\ + "0.744310, 0.946124, 1.131691, 1.422850, 1.982235",\ + "0.763542, 0.965355, 1.150923, 1.442082, 2.001466",\ + "0.795210, 0.997024, 1.182591, 1.473750, 2.033134",\ + "1.085467, 1.287280, 1.472847, 1.764007, 2.323391",\ + "1.679449, 1.881263, 2.066830, 2.357989, 2.917373",\ + "0.807605, 1.003952, 1.189403, 1.480278, 2.039247",\ + "0.826837, 1.023183, 1.208634, 1.499510, 2.058478",\ + "0.858505, 1.054851, 1.240302, 1.531178, 2.090147",\ + "1.148761, 1.345108, 1.530559, 1.821435, 2.380403",\ + "1.742744, 1.939090, 2.124541, 2.415417, 2.974385",\ + "1.127529, 1.309255, 1.493062, 1.783449, 2.341464",\ + "1.146761, 1.328487, 1.512293, 1.802681, 2.360695",\ + "1.178429, 1.360155, 1.543962, 1.834349, 2.392364",\ + "1.468686, 1.650411, 1.834218, 2.124605, 2.682620",\ + "2.062668, 2.244394, 2.428200, 2.718588, 3.276602"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.112220, 0.112220, 0.112220, 0.112220, 0.112220",\ + "0.140967, 0.140967, 0.140967, 0.140967, 0.140967",\ + "0.189997, 0.189997, 0.189997, 0.189997, 0.189997",\ + "0.817613, 0.817613, 0.817613, 0.817613, 0.817613",\ + "2.194227, 2.194227, 2.194227, 2.194227, 2.194227",\ + "0.112220, 0.112220, 0.112220, 0.112220, 0.112220",\ + "0.140967, 0.140967, 0.140967, 0.140967, 0.140967",\ + "0.189997, 0.189997, 0.189997, 0.189997, 0.189997",\ + "0.817613, 0.817613, 0.817613, 0.817613, 0.817613",\ + "2.194227, 2.194227, 2.194227, 2.194227, 2.194227",\ + "0.112220, 0.112220, 0.112220, 0.112220, 0.112220",\ + "0.140967, 0.140967, 0.140967, 0.140967, 0.140967",\ + "0.189997, 0.189997, 0.189997, 0.189997, 0.189997",\ + "0.817613, 0.817613, 0.817613, 0.817613, 0.817613",\ + "2.194227, 2.194227, 2.194227, 2.194227, 2.194227",\ + "0.112220, 0.112220, 0.112220, 0.112220, 0.112220",\ + "0.140967, 0.140967, 0.140967, 0.140967, 0.140967",\ + "0.189997, 0.189997, 0.189997, 0.189997, 0.189997",\ + "0.817613, 0.817613, 0.817613, 0.817613, 0.817613",\ + "2.194227, 2.194227, 2.194227, 2.194227, 2.194227",\ + "0.112220, 0.112220, 0.112220, 0.112220, 0.112220",\ + "0.140967, 0.140967, 0.140967, 0.140967, 0.140967",\ + "0.189997, 0.189997, 0.189997, 0.189997, 0.189997",\ + "0.817613, 0.817613, 0.817613, 0.817613, 0.817613",\ + "2.194227, 2.194227, 2.194227, 2.194227, 2.194227"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.578663, 0.790246, 0.976158, 1.267292, 1.826624",\ + "0.586466, 0.798048, 0.983960, 1.275094, 1.834427",\ + "0.599862, 0.811444, 0.997356, 1.288490, 1.847823",\ + "0.752076, 0.963659, 1.149571, 1.440704, 2.000037",\ + "1.085710, 1.297292, 1.483204, 1.774338, 2.333671",\ + "0.667026, 0.877564, 1.063439, 1.354597, 1.913978",\ + "0.674828, 0.885367, 1.071241, 1.362399, 1.921780",\ + "0.688224, 0.898763, 1.084637, 1.375795, 1.935176",\ + "0.840439, 1.050977, 1.236852, 1.528010, 2.087391",\ + "1.174072, 1.384611, 1.570485, 1.861643, 2.421024",\ + "0.756085, 0.957898, 1.143466, 1.434625, 1.994009",\ + "0.763888, 0.965701, 1.151268, 1.442428, 2.001812",\ + "0.777284, 0.979097, 1.164664, 1.455824, 2.015208",\ + "0.929498, 1.131311, 1.316879, 1.608038, 2.167422",\ + "1.263131, 1.464945, 1.650512, 1.941671, 2.501056",\ + "0.819380, 1.015726, 1.201177, 1.492053, 2.051021",\ + "0.827182, 1.023529, 1.208980, 1.499856, 2.058824",\ + "0.840578, 1.036925, 1.222376, 1.513252, 2.072220",\ + "0.992793, 1.189139, 1.374590, 1.665466, 2.224434",\ + "1.326426, 1.522773, 1.708224, 1.999099, 2.558068",\ + "1.139304, 1.321030, 1.504837, 1.795224, 2.353239",\ + "1.147106, 1.328832, 1.512639, 1.803026, 2.361041",\ + "1.160502, 1.342228, 1.526035, 1.816422, 2.374437",\ + "1.312717, 1.494443, 1.678249, 1.968637, 2.526651",\ + "1.646350, 1.828076, 2.011883, 2.302270, 2.860285"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.049540, 0.049540, 0.049540, 0.049540, 0.049540",\ + "0.055489, 0.055489, 0.055489, 0.055489, 0.055489",\ + "0.075307, 0.075307, 0.075307, 0.075307, 0.075307",\ + "0.368653, 0.368653, 0.368653, 0.368653, 0.368653",\ + "1.002321, 1.002321, 1.002321, 1.002321, 1.002321",\ + "0.049540, 0.049540, 0.049540, 0.049540, 0.049540",\ + "0.055489, 0.055489, 0.055489, 0.055489, 0.055489",\ + "0.075307, 0.075307, 0.075307, 0.075307, 0.075307",\ + "0.368653, 0.368653, 0.368653, 0.368653, 0.368653",\ + "1.002321, 1.002321, 1.002321, 1.002321, 1.002321",\ + "0.049540, 0.049540, 0.049540, 0.049540, 0.049540",\ + "0.055489, 0.055489, 0.055489, 0.055489, 0.055489",\ + "0.075307, 0.075307, 0.075307, 0.075307, 0.075307",\ + "0.368653, 0.368653, 0.368653, 0.368653, 0.368653",\ + "1.002321, 1.002321, 1.002321, 1.002321, 1.002321",\ + "0.049540, 0.049540, 0.049540, 0.049540, 0.049540",\ + "0.055489, 0.055489, 0.055489, 0.055489, 0.055489",\ + "0.075307, 0.075307, 0.075307, 0.075307, 0.075307",\ + "0.368653, 0.368653, 0.368653, 0.368653, 0.368653",\ + "1.002321, 1.002321, 1.002321, 1.002321, 1.002321",\ + "0.049540, 0.049540, 0.049540, 0.049540, 0.049540",\ + "0.055489, 0.055489, 0.055489, 0.055489, 0.055489",\ + "0.075307, 0.075307, 0.075307, 0.075307, 0.075307",\ + "0.368653, 0.368653, 0.368653, 0.368653, 0.368653",\ + "1.002321, 1.002321, 1.002321, 1.002321, 1.002321"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[7]_redg_min_2596*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[35]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.541408, 0.751703, 0.928714, 1.212888, 1.762989",\ + "0.560640, 0.770935, 0.947946, 1.232119, 1.782221",\ + "0.592308, 0.802603, 0.979614, 1.263787, 1.813889",\ + "0.882565, 1.092860, 1.269870, 1.554044, 2.104145",\ + "1.476547, 1.686842, 1.863853, 2.148026, 2.698128",\ + "0.629685, 0.839022, 1.015995, 1.300193, 1.850343",\ + "0.648917, 0.858253, 1.035227, 1.319424, 1.869574",\ + "0.680585, 0.889921, 1.066895, 1.351092, 1.901242",\ + "0.970842, 1.180178, 1.357151, 1.641349, 2.191499",\ + "1.564824, 1.774160, 1.951134, 2.235331, 2.785481",\ + "0.718639, 0.919355, 1.096022, 1.380221, 1.930374",\ + "0.737870, 0.938586, 1.115254, 1.399453, 1.949606",\ + "0.769538, 0.970254, 1.146922, 1.431121, 1.981274",\ + "1.059795, 1.260511, 1.437178, 1.721377, 2.271530",\ + "1.653777, 1.854493, 2.031161, 2.315360, 2.865513",\ + "0.781897, 0.977177, 1.153713, 1.437638, 1.987364",\ + "0.801129, 0.996408, 1.172945, 1.456870, 2.006596",\ + "0.832797, 1.028076, 1.204613, 1.488538, 2.038264",\ + "1.123053, 1.318333, 1.494869, 1.778794, 2.328521",\ + "1.717036, 1.912315, 2.088852, 2.372777, 2.922503",\ + "1.102548, 1.282436, 1.457368, 1.740799, 2.289555",\ + "1.121780, 1.301668, 1.476600, 1.760030, 2.308787",\ + "1.153448, 1.333336, 1.508268, 1.791698, 2.340455",\ + "1.443705, 1.623593, 1.798525, 2.081955, 2.630712",\ + "2.037687, 2.217575, 2.392507, 2.675937, 3.224694"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.112220, 0.112220, 0.112220, 0.112220, 0.112220",\ + "0.140967, 0.140967, 0.140967, 0.140967, 0.140967",\ + "0.189997, 0.189997, 0.189997, 0.189997, 0.189997",\ + "0.817613, 0.817613, 0.817613, 0.817613, 0.817613",\ + "2.194227, 2.194227, 2.194227, 2.194227, 2.194227",\ + "0.112220, 0.112220, 0.112220, 0.112220, 0.112220",\ + "0.140967, 0.140967, 0.140967, 0.140967, 0.140967",\ + "0.189997, 0.189997, 0.189997, 0.189997, 0.189997",\ + "0.817613, 0.817613, 0.817613, 0.817613, 0.817613",\ + "2.194227, 2.194227, 2.194227, 2.194227, 2.194227",\ + "0.112220, 0.112220, 0.112220, 0.112220, 0.112220",\ + "0.140967, 0.140967, 0.140967, 0.140967, 0.140967",\ + "0.189997, 0.189997, 0.189997, 0.189997, 0.189997",\ + "0.817613, 0.817613, 0.817613, 0.817613, 0.817613",\ + "2.194227, 2.194227, 2.194227, 2.194227, 2.194227",\ + "0.112220, 0.112220, 0.112220, 0.112220, 0.112220",\ + "0.140967, 0.140967, 0.140967, 0.140967, 0.140967",\ + "0.189997, 0.189997, 0.189997, 0.189997, 0.189997",\ + "0.817613, 0.817613, 0.817613, 0.817613, 0.817613",\ + "2.194227, 2.194227, 2.194227, 2.194227, 2.194227",\ + "0.112220, 0.112220, 0.112220, 0.112220, 0.112220",\ + "0.140967, 0.140967, 0.140967, 0.140967, 0.140967",\ + "0.189997, 0.189997, 0.189997, 0.189997, 0.189997",\ + "0.817613, 0.817613, 0.817613, 0.817613, 0.817613",\ + "2.194227, 2.194227, 2.194227, 2.194227, 2.194227"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.553183, 0.763478, 0.940489, 1.224662, 1.774764",\ + "0.560986, 0.771280, 0.948291, 1.232465, 1.782566",\ + "0.574382, 0.784676, 0.961687, 1.245861, 1.795962",\ + "0.726596, 0.936891, 1.113902, 1.398075, 1.948177",\ + "1.060230, 1.270525, 1.447535, 1.731709, 2.281810",\ + "0.641460, 0.850796, 1.027770, 1.311967, 1.862117",\ + "0.649263, 0.858599, 1.035572, 1.319770, 1.869920",\ + "0.662659, 0.871995, 1.048968, 1.333166, 1.883316",\ + "0.814873, 1.024209, 1.201183, 1.485380, 2.035530",\ + "1.148507, 1.357843, 1.534816, 1.819014, 2.369164",\ + "0.730413, 0.931129, 1.107797, 1.391996, 1.942149",\ + "0.738216, 0.938932, 1.115599, 1.399798, 1.949951",\ + "0.751612, 0.952328, 1.128995, 1.413194, 1.963347",\ + "0.903826, 1.104542, 1.281210, 1.565409, 2.115561",\ + "1.237460, 1.438176, 1.614843, 1.899042, 2.449195",\ + "0.793672, 0.988951, 1.165488, 1.449413, 1.999139",\ + "0.801474, 0.996754, 1.173290, 1.457215, 2.006941",\ + "0.814870, 1.010150, 1.186686, 1.470611, 2.020338",\ + "0.967085, 1.162364, 1.338901, 1.622826, 2.172552",\ + "1.300718, 1.495998, 1.672534, 1.956459, 2.506185",\ + "1.114323, 1.294211, 1.469143, 1.752573, 2.301330",\ + "1.122126, 1.302013, 1.476946, 1.760376, 2.309132",\ + "1.135522, 1.315410, 1.490342, 1.773772, 2.322528",\ + "1.287736, 1.467624, 1.642556, 1.925986, 2.474743",\ + "1.621369, 1.801257, 1.976189, 2.259620, 2.808376"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.049540, 0.049540, 0.049540, 0.049540, 0.049540",\ + "0.055489, 0.055489, 0.055489, 0.055489, 0.055489",\ + "0.075307, 0.075307, 0.075307, 0.075307, 0.075307",\ + "0.368653, 0.368653, 0.368653, 0.368653, 0.368653",\ + "1.002321, 1.002321, 1.002321, 1.002321, 1.002321",\ + "0.049540, 0.049540, 0.049540, 0.049540, 0.049540",\ + "0.055489, 0.055489, 0.055489, 0.055489, 0.055489",\ + "0.075307, 0.075307, 0.075307, 0.075307, 0.075307",\ + "0.368653, 0.368653, 0.368653, 0.368653, 0.368653",\ + "1.002321, 1.002321, 1.002321, 1.002321, 1.002321",\ + "0.049540, 0.049540, 0.049540, 0.049540, 0.049540",\ + "0.055489, 0.055489, 0.055489, 0.055489, 0.055489",\ + "0.075307, 0.075307, 0.075307, 0.075307, 0.075307",\ + "0.368653, 0.368653, 0.368653, 0.368653, 0.368653",\ + "1.002321, 1.002321, 1.002321, 1.002321, 1.002321",\ + "0.049540, 0.049540, 0.049540, 0.049540, 0.049540",\ + "0.055489, 0.055489, 0.055489, 0.055489, 0.055489",\ + "0.075307, 0.075307, 0.075307, 0.075307, 0.075307",\ + "0.368653, 0.368653, 0.368653, 0.368653, 0.368653",\ + "1.002321, 1.002321, 1.002321, 1.002321, 1.002321",\ + "0.049540, 0.049540, 0.049540, 0.049540, 0.049540",\ + "0.055489, 0.055489, 0.055489, 0.055489, 0.055489",\ + "0.075307, 0.075307, 0.075307, 0.075307, 0.075307",\ + "0.368653, 0.368653, 0.368653, 0.368653, 0.368653",\ + "1.002321, 1.002321, 1.002321, 1.002321, 1.002321"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[7]_redg_min_2653*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[38]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.563785, 0.784261, 0.961831, 1.250241, 1.810232",\ + "0.583017, 0.803492, 0.981063, 1.269472, 1.829463",\ + "0.614685, 0.835161, 1.012731, 1.301141, 1.861132",\ + "0.904941, 1.125417, 1.302987, 1.591397, 2.151388",\ + "1.498924, 1.719399, 1.896969, 2.185379, 2.745370",\ + "0.652174, 0.871579, 1.049112, 1.337546, 1.897585",\ + "0.671405, 0.890811, 1.068343, 1.356778, 1.916817",\ + "0.703073, 0.922479, 1.100012, 1.388446, 1.948485",\ + "0.993330, 1.212735, 1.390268, 1.678702, 2.238741",\ + "1.587312, 1.806717, 1.984250, 2.272684, 2.832724",\ + "0.741539, 0.951911, 1.129139, 1.417575, 1.977617",\ + "0.760771, 0.971143, 1.148370, 1.436806, 1.996849",\ + "0.792439, 1.002811, 1.180039, 1.468474, 2.028517",\ + "1.082695, 1.293067, 1.470295, 1.758730, 2.318773",\ + "1.676677, 1.887050, 2.064277, 2.352713, 2.912755",\ + "0.805219, 1.009732, 1.186831, 1.475004, 2.034631",\ + "0.824451, 1.028963, 1.206063, 1.494235, 2.053863",\ + "0.856119, 1.060631, 1.237731, 1.525903, 2.085531",\ + "1.146375, 1.350887, 1.527987, 1.816159, 2.375787",\ + "1.740357, 1.944870, 2.121970, 2.410142, 2.969770",\ + "1.135828, 1.314976, 1.490487, 1.778174, 2.336852",\ + "1.155060, 1.334207, 1.509718, 1.797406, 2.356083",\ + "1.186728, 1.365875, 1.541386, 1.829074, 2.387752",\ + "1.476984, 1.656131, 1.831642, 2.119330, 2.678008",\ + "2.070967, 2.250114, 2.425625, 2.713313, 3.271990"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.112216, 0.112216, 0.112216, 0.112216, 0.112216",\ + "0.140967, 0.140967, 0.140967, 0.140967, 0.140967",\ + "0.189998, 0.189998, 0.189998, 0.189998, 0.189998",\ + "0.817613, 0.817613, 0.817613, 0.817613, 0.817613",\ + "2.194229, 2.194229, 2.194229, 2.194229, 2.194229",\ + "0.112216, 0.112216, 0.112216, 0.112216, 0.112216",\ + "0.140967, 0.140967, 0.140967, 0.140967, 0.140967",\ + "0.189998, 0.189998, 0.189998, 0.189998, 0.189998",\ + "0.817613, 0.817613, 0.817613, 0.817613, 0.817613",\ + "2.194229, 2.194229, 2.194229, 2.194229, 2.194229",\ + "0.112216, 0.112216, 0.112216, 0.112216, 0.112216",\ + "0.140967, 0.140967, 0.140967, 0.140967, 0.140967",\ + "0.189998, 0.189998, 0.189998, 0.189998, 0.189998",\ + "0.817613, 0.817613, 0.817613, 0.817613, 0.817613",\ + "2.194229, 2.194229, 2.194229, 2.194229, 2.194229",\ + "0.112216, 0.112216, 0.112216, 0.112216, 0.112216",\ + "0.140967, 0.140967, 0.140967, 0.140967, 0.140967",\ + "0.189998, 0.189998, 0.189998, 0.189998, 0.189998",\ + "0.817613, 0.817613, 0.817613, 0.817613, 0.817613",\ + "2.194229, 2.194229, 2.194229, 2.194229, 2.194229",\ + "0.112216, 0.112216, 0.112216, 0.112216, 0.112216",\ + "0.140967, 0.140967, 0.140967, 0.140967, 0.140967",\ + "0.189998, 0.189998, 0.189998, 0.189998, 0.189998",\ + "0.817613, 0.817613, 0.817613, 0.817613, 0.817613",\ + "2.194229, 2.194229, 2.194229, 2.194229, 2.194229"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.575559, 0.796035, 0.973605, 1.262015, 1.822006",\ + "0.583362, 0.803837, 0.981407, 1.269817, 1.829808",\ + "0.596758, 0.817233, 0.994803, 1.283213, 1.843204",\ + "0.748972, 0.969448, 1.147018, 1.435428, 1.995419",\ + "1.082606, 1.303082, 1.480652, 1.769062, 2.329053",\ + "0.663947, 0.883353, 1.060886, 1.349320, 1.909359",\ + "0.671750, 0.891155, 1.068688, 1.357122, 1.917162",\ + "0.685146, 0.904551, 1.082084, 1.370518, 1.930558",\ + "0.837361, 1.056766, 1.234299, 1.522733, 2.082772",\ + "1.170995, 1.390400, 1.567933, 1.856367, 2.416406",\ + "0.753313, 0.963685, 1.140913, 1.429348, 1.989391",\ + "0.761115, 0.971488, 1.148715, 1.437151, 1.997193",\ + "0.774511, 0.984884, 1.162111, 1.450547, 2.010589",\ + "0.926726, 1.137099, 1.314326, 1.602762, 2.162804",\ + "1.260360, 1.470732, 1.647960, 1.936395, 2.496438",\ + "0.816993, 1.021505, 1.198605, 1.486777, 2.046405",\ + "0.824796, 1.029308, 1.206408, 1.494580, 2.054208",\ + "0.838192, 1.042704, 1.219804, 1.507976, 2.067604",\ + "0.990406, 1.194919, 1.372019, 1.660191, 2.219819",\ + "1.324040, 1.528552, 1.705652, 1.993824, 2.553452",\ + "1.147602, 1.326749, 1.502260, 1.789948, 2.348625",\ + "1.155405, 1.334552, 1.510063, 1.797751, 2.356428",\ + "1.168801, 1.347948, 1.523459, 1.811147, 2.369824",\ + "1.321016, 1.500163, 1.675674, 1.963362, 2.522039",\ + "1.654649, 1.833796, 2.009307, 2.296995, 2.855672"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.049540, 0.049540, 0.049540, 0.049540, 0.049540",\ + "0.055490, 0.055490, 0.055490, 0.055490, 0.055490",\ + "0.075307, 0.075307, 0.075307, 0.075307, 0.075307",\ + "0.368653, 0.368653, 0.368653, 0.368653, 0.368653",\ + "1.002321, 1.002321, 1.002321, 1.002321, 1.002321",\ + "0.049540, 0.049540, 0.049540, 0.049540, 0.049540",\ + "0.055490, 0.055490, 0.055490, 0.055490, 0.055490",\ + "0.075307, 0.075307, 0.075307, 0.075307, 0.075307",\ + "0.368653, 0.368653, 0.368653, 0.368653, 0.368653",\ + "1.002321, 1.002321, 1.002321, 1.002321, 1.002321",\ + "0.049540, 0.049540, 0.049540, 0.049540, 0.049540",\ + "0.055490, 0.055490, 0.055490, 0.055490, 0.055490",\ + "0.075307, 0.075307, 0.075307, 0.075307, 0.075307",\ + "0.368653, 0.368653, 0.368653, 0.368653, 0.368653",\ + "1.002321, 1.002321, 1.002321, 1.002321, 1.002321",\ + "0.049540, 0.049540, 0.049540, 0.049540, 0.049540",\ + "0.055490, 0.055490, 0.055490, 0.055490, 0.055490",\ + "0.075307, 0.075307, 0.075307, 0.075307, 0.075307",\ + "0.368653, 0.368653, 0.368653, 0.368653, 0.368653",\ + "1.002321, 1.002321, 1.002321, 1.002321, 1.002321",\ + "0.049540, 0.049540, 0.049540, 0.049540, 0.049540",\ + "0.055490, 0.055490, 0.055490, 0.055490, 0.055490",\ + "0.075307, 0.075307, 0.075307, 0.075307, 0.075307",\ + "0.368653, 0.368653, 0.368653, 0.368653, 0.368653",\ + "1.002321, 1.002321, 1.002321, 1.002321, 1.002321"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[7]_redg_min_2304*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[39]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.537611, 0.765413, 0.949557, 1.244019, 1.813116",\ + "0.556843, 0.784645, 0.968788, 1.263250, 1.832347",\ + "0.588511, 0.816313, 1.000457, 1.294918, 1.864016",\ + "0.878767, 1.106569, 1.290713, 1.585174, 2.154272",\ + "1.472749, 1.700552, 1.884695, 2.179157, 2.748254",\ + "0.625940, 0.852732, 1.036838, 1.331324, 1.900469",\ + "0.645171, 0.871963, 1.056069, 1.350555, 1.919701",\ + "0.676839, 0.903631, 1.087738, 1.382223, 1.951369",\ + "0.967095, 1.193887, 1.377994, 1.672480, 2.241625",\ + "1.561078, 1.787870, 1.971976, 2.266462, 2.835608",\ + "0.715049, 0.933065, 1.116865, 1.411352, 1.980501",\ + "0.734280, 0.952296, 1.136096, 1.430584, 1.999732",\ + "0.765948, 0.983964, 1.167764, 1.462252, 2.031401",\ + "1.056204, 1.274220, 1.458020, 1.752508, 2.321657",\ + "1.650187, 1.868203, 2.052003, 2.346490, 2.915639",\ + "0.778454, 0.990889, 1.174573, 1.468792, 2.037537",\ + "0.797686, 1.010120, 1.193804, 1.488024, 2.056769",\ + "0.829354, 1.041789, 1.225472, 1.519692, 2.088437",\ + "1.119610, 1.332045, 1.515728, 1.809948, 2.378693",\ + "1.713592, 1.926027, 2.109711, 2.403930, 2.972675",\ + "1.113336, 1.296163, 1.478231, 1.771973, 2.339783",\ + "1.132567, 1.315395, 1.497462, 1.791204, 2.359015",\ + "1.164236, 1.347063, 1.529130, 1.822872, 2.390683",\ + "1.454492, 1.637319, 1.819386, 2.113128, 2.680939",\ + "2.048474, 2.231302, 2.413369, 2.707111, 3.274921"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.112216, 0.112216, 0.112216, 0.112216, 0.112216",\ + "0.140967, 0.140967, 0.140967, 0.140967, 0.140967",\ + "0.189998, 0.189998, 0.189998, 0.189998, 0.189998",\ + "0.817613, 0.817613, 0.817613, 0.817613, 0.817613",\ + "2.194229, 2.194229, 2.194229, 2.194229, 2.194229",\ + "0.112216, 0.112216, 0.112216, 0.112216, 0.112216",\ + "0.140967, 0.140967, 0.140967, 0.140967, 0.140967",\ + "0.189998, 0.189998, 0.189998, 0.189998, 0.189998",\ + "0.817613, 0.817613, 0.817613, 0.817613, 0.817613",\ + "2.194229, 2.194229, 2.194229, 2.194229, 2.194229",\ + "0.112216, 0.112216, 0.112216, 0.112216, 0.112216",\ + "0.140967, 0.140967, 0.140967, 0.140967, 0.140967",\ + "0.189998, 0.189998, 0.189998, 0.189998, 0.189998",\ + "0.817613, 0.817613, 0.817613, 0.817613, 0.817613",\ + "2.194229, 2.194229, 2.194229, 2.194229, 2.194229",\ + "0.112216, 0.112216, 0.112216, 0.112216, 0.112216",\ + "0.140967, 0.140967, 0.140967, 0.140967, 0.140967",\ + "0.189998, 0.189998, 0.189998, 0.189998, 0.189998",\ + "0.817613, 0.817613, 0.817613, 0.817613, 0.817613",\ + "2.194229, 2.194229, 2.194229, 2.194229, 2.194229",\ + "0.112216, 0.112216, 0.112216, 0.112216, 0.112216",\ + "0.140967, 0.140967, 0.140967, 0.140967, 0.140967",\ + "0.189998, 0.189998, 0.189998, 0.189998, 0.189998",\ + "0.817613, 0.817613, 0.817613, 0.817613, 0.817613",\ + "2.194229, 2.194229, 2.194229, 2.194229, 2.194229"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.549385, 0.777187, 0.961331, 1.255792, 1.824890",\ + "0.557187, 0.784990, 0.969133, 1.263595, 1.832692",\ + "0.570583, 0.798386, 0.982529, 1.276991, 1.846088",\ + "0.722798, 0.950600, 1.134744, 1.429206, 1.998303",\ + "1.056432, 1.284234, 1.468378, 1.762839, 2.331937",\ + "0.637713, 0.864505, 1.048611, 1.343097, 1.912243",\ + "0.645516, 0.872308, 1.056414, 1.350900, 1.920045",\ + "0.658912, 0.885704, 1.069810, 1.364296, 1.933442",\ + "0.811127, 1.037919, 1.222025, 1.516511, 2.085656",\ + "1.144760, 1.371552, 1.555659, 1.850145, 2.419290",\ + "0.726822, 0.944838, 1.128638, 1.423126, 1.992275",\ + "0.734625, 0.952641, 1.136441, 1.430928, 2.000077",\ + "0.748021, 0.966037, 1.149837, 1.444324, 2.013473",\ + "0.900236, 1.118252, 1.302052, 1.596539, 2.165688",\ + "1.233869, 1.451885, 1.635685, 1.930173, 2.499322",\ + "0.790228, 1.002663, 1.186347, 1.480566, 2.049311",\ + "0.798030, 1.010465, 1.194149, 1.488369, 2.057113",\ + "0.811427, 1.023861, 1.207545, 1.501765, 2.070509",\ + "0.963641, 1.176076, 1.359760, 1.653979, 2.222724",\ + "1.297275, 1.509710, 1.693393, 1.987613, 2.556358",\ + "1.125110, 1.307937, 1.490004, 1.783746, 2.351557",\ + "1.132912, 1.315740, 1.497807, 1.791549, 2.359360",\ + "1.146308, 1.329136, 1.511203, 1.804945, 2.372756",\ + "1.298523, 1.481350, 1.663418, 1.957160, 2.524971",\ + "1.632157, 1.814984, 1.997051, 2.290793, 2.858604"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.049540, 0.049540, 0.049540, 0.049540, 0.049540",\ + "0.055490, 0.055490, 0.055490, 0.055490, 0.055490",\ + "0.075307, 0.075307, 0.075307, 0.075307, 0.075307",\ + "0.368653, 0.368653, 0.368653, 0.368653, 0.368653",\ + "1.002321, 1.002321, 1.002321, 1.002321, 1.002321",\ + "0.049540, 0.049540, 0.049540, 0.049540, 0.049540",\ + "0.055490, 0.055490, 0.055490, 0.055490, 0.055490",\ + "0.075307, 0.075307, 0.075307, 0.075307, 0.075307",\ + "0.368653, 0.368653, 0.368653, 0.368653, 0.368653",\ + "1.002321, 1.002321, 1.002321, 1.002321, 1.002321",\ + "0.049540, 0.049540, 0.049540, 0.049540, 0.049540",\ + "0.055490, 0.055490, 0.055490, 0.055490, 0.055490",\ + "0.075307, 0.075307, 0.075307, 0.075307, 0.075307",\ + "0.368653, 0.368653, 0.368653, 0.368653, 0.368653",\ + "1.002321, 1.002321, 1.002321, 1.002321, 1.002321",\ + "0.049540, 0.049540, 0.049540, 0.049540, 0.049540",\ + "0.055490, 0.055490, 0.055490, 0.055490, 0.055490",\ + "0.075307, 0.075307, 0.075307, 0.075307, 0.075307",\ + "0.368653, 0.368653, 0.368653, 0.368653, 0.368653",\ + "1.002321, 1.002321, 1.002321, 1.002321, 1.002321",\ + "0.049540, 0.049540, 0.049540, 0.049540, 0.049540",\ + "0.055490, 0.055490, 0.055490, 0.055490, 0.055490",\ + "0.075307, 0.075307, 0.075307, 0.075307, 0.075307",\ + "0.368653, 0.368653, 0.368653, 0.368653, 0.368653",\ + "1.002321, 1.002321, 1.002321, 1.002321, 1.002321"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[7]_redg_min_2347*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[40]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.452626, 0.644345, 0.833940, 1.131261, 1.702487",\ + "0.471843, 0.663562, 0.853157, 1.150478, 1.721704",\ + "0.503492, 0.695211, 0.884806, 1.182126, 1.753352",\ + "0.794073, 0.985792, 1.175388, 1.472708, 2.043935",\ + "1.388076, 1.579795, 1.769390, 2.066711, 2.637938",\ + "0.540843, 0.731664, 0.921221, 1.218566, 1.789840",\ + "0.560059, 0.750880, 0.940438, 1.237783, 1.809057",\ + "0.591708, 0.782529, 0.972087, 1.269431, 1.840706",\ + "0.882290, 1.073111, 1.262668, 1.560013, 2.131288",\ + "1.476292, 1.667113, 1.856671, 2.154016, 2.725291",\ + "0.629383, 0.811999, 1.001248, 1.298594, 1.869872",\ + "0.648600, 0.831216, 1.020465, 1.317811, 1.889089",\ + "0.680249, 0.862864, 1.052114, 1.349460, 1.920737",\ + "0.970830, 1.153446, 1.342695, 1.640042, 2.211320",\ + "1.564833, 1.747448, 1.936698, 2.234045, 2.805323",\ + "0.690888, 0.869827, 1.058969, 1.356037, 1.926912",\ + "0.710105, 0.889043, 1.078185, 1.375254, 1.946129",\ + "0.741754, 0.920692, 1.109834, 1.406902, 1.977778",\ + "1.032335, 1.211274, 1.400416, 1.697484, 2.268360",\ + "1.626338, 1.805276, 1.994418, 2.291487, 2.862363",\ + "0.993056, 1.175134, 1.362629, 1.659220, 2.229164",\ + "1.012272, 1.194351, 1.381846, 1.678436, 2.248380",\ + "1.043921, 1.226000, 1.413495, 1.710085, 2.280029",\ + "1.334502, 1.516581, 1.704077, 2.000667, 2.570611",\ + "1.928505, 2.110584, 2.298079, 2.594670, 3.164614"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.115198, 0.115198, 0.115199, 0.115202, 0.115208",\ + "0.141976, 0.141976, 0.141976, 0.141975, 0.141974",\ + "0.190577, 0.190577, 0.190577, 0.190577, 0.190576",\ + "0.817535, 0.817535, 0.817535, 0.817535, 0.817534",\ + "2.193373, 2.193373, 2.193373, 2.193372, 2.193370",\ + "0.115198, 0.115198, 0.115199, 0.115202, 0.115208",\ + "0.141976, 0.141976, 0.141976, 0.141975, 0.141974",\ + "0.190577, 0.190577, 0.190577, 0.190577, 0.190576",\ + "0.817535, 0.817535, 0.817535, 0.817535, 0.817534",\ + "2.193373, 2.193373, 2.193373, 2.193372, 2.193370",\ + "0.115198, 0.115198, 0.115199, 0.115202, 0.115208",\ + "0.141976, 0.141976, 0.141976, 0.141975, 0.141974",\ + "0.190577, 0.190577, 0.190577, 0.190577, 0.190576",\ + "0.817535, 0.817535, 0.817535, 0.817535, 0.817534",\ + "2.193373, 2.193373, 2.193373, 2.193372, 2.193370",\ + "0.115198, 0.115198, 0.115199, 0.115202, 0.115208",\ + "0.141976, 0.141976, 0.141976, 0.141975, 0.141974",\ + "0.190577, 0.190577, 0.190577, 0.190577, 0.190576",\ + "0.817535, 0.817535, 0.817535, 0.817535, 0.817534",\ + "2.193373, 2.193373, 2.193373, 2.193372, 2.193370",\ + "0.115198, 0.115198, 0.115199, 0.115202, 0.115208",\ + "0.141976, 0.141976, 0.141976, 0.141975, 0.141974",\ + "0.190577, 0.190577, 0.190577, 0.190577, 0.190576",\ + "0.817535, 0.817535, 0.817535, 0.817535, 0.817534",\ + "2.193373, 2.193373, 2.193373, 2.193372, 2.193370"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.465025, 0.656744, 0.846340, 1.143661, 1.714888",\ + "0.472832, 0.664551, 0.854146, 1.151467, 1.722695",\ + "0.486213, 0.677933, 0.867528, 1.164849, 1.736077",\ + "0.638165, 0.829885, 1.019480, 1.316801, 1.888028",\ + "0.971605, 1.163324, 1.352919, 1.650240, 2.221466",\ + "0.553242, 0.744063, 0.933621, 1.230966, 1.802242",\ + "0.561048, 0.751869, 0.941427, 1.238772, 1.810048",\ + "0.574430, 0.765251, 0.954809, 1.252154, 1.823430",\ + "0.726382, 0.917203, 1.106761, 1.404106, 1.975381",\ + "1.059821, 1.250642, 1.440200, 1.737545, 2.308820",\ + "0.641782, 0.824398, 1.013648, 1.310994, 1.882273",\ + "0.649589, 0.832204, 1.021454, 1.318801, 1.890080",\ + "0.662971, 0.845586, 1.034836, 1.332183, 1.903462",\ + "0.814923, 0.997538, 1.186788, 1.484134, 2.055413",\ + "1.148362, 1.330977, 1.520227, 1.817573, 2.388851",\ + "0.703287, 0.882226, 1.071368, 1.368437, 1.939313",\ + "0.711094, 0.890032, 1.079175, 1.376243, 1.947120",\ + "0.724476, 0.903414, 1.092556, 1.389625, 1.960502",\ + "0.876427, 1.055366, 1.244508, 1.541577, 2.112453",\ + "1.209867, 1.388805, 1.577947, 1.875016, 2.445891",\ + "1.005455, 1.187533, 1.375029, 1.671620, 2.241565",\ + "1.013261, 1.195340, 1.382835, 1.679426, 2.249371",\ + "1.026643, 1.208722, 1.396217, 1.692808, 2.262753",\ + "1.178595, 1.360674, 1.548169, 1.844760, 2.414704",\ + "1.512034, 1.694113, 1.881608, 2.178198, 2.748142"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.049719, 0.049719, 0.049719, 0.049719, 0.049720",\ + "0.055444, 0.055444, 0.055444, 0.055444, 0.055444",\ + "0.075302, 0.075302, 0.075302, 0.075302, 0.075302",\ + "0.368591, 0.368591, 0.368591, 0.368591, 0.368591",\ + "1.002263, 1.002263, 1.002263, 1.002263, 1.002263",\ + "0.049719, 0.049719, 0.049719, 0.049719, 0.049720",\ + "0.055444, 0.055444, 0.055444, 0.055444, 0.055444",\ + "0.075302, 0.075302, 0.075302, 0.075302, 0.075302",\ + "0.368591, 0.368591, 0.368591, 0.368591, 0.368591",\ + "1.002263, 1.002263, 1.002263, 1.002263, 1.002263",\ + "0.049719, 0.049719, 0.049719, 0.049719, 0.049720",\ + "0.055444, 0.055444, 0.055444, 0.055444, 0.055444",\ + "0.075302, 0.075302, 0.075302, 0.075302, 0.075302",\ + "0.368591, 0.368591, 0.368591, 0.368591, 0.368591",\ + "1.002263, 1.002263, 1.002263, 1.002263, 1.002263",\ + "0.049719, 0.049719, 0.049719, 0.049719, 0.049720",\ + "0.055444, 0.055444, 0.055444, 0.055444, 0.055444",\ + "0.075302, 0.075302, 0.075302, 0.075302, 0.075302",\ + "0.368591, 0.368591, 0.368591, 0.368591, 0.368591",\ + "1.002263, 1.002263, 1.002263, 1.002263, 1.002263",\ + "0.049719, 0.049719, 0.049719, 0.049719, 0.049720",\ + "0.055444, 0.055444, 0.055444, 0.055444, 0.055444",\ + "0.075302, 0.075302, 0.075302, 0.075302, 0.075302",\ + "0.368591, 0.368591, 0.368591, 0.368591, 0.368591",\ + "1.002263, 1.002263, 1.002263, 1.002263, 1.002263"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[7]_redg_min_2394*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[42]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.181258, 0.362750, 0.559584, 0.877059, 1.491654",\ + "0.196091, 0.377154, 0.575199, 0.895881, 1.517263",\ + "0.221299, 0.401436, 0.600771, 0.925894, 1.556997",\ + "0.494050, 0.669272, 0.865120, 1.207435, 1.883536",\ + "1.086888, 1.260498, 1.453339, 1.802428, 2.497703",\ + "0.268666, 0.450068, 0.646865, 0.964364, 1.579007",\ + "0.283499, 0.464472, 0.662480, 0.983186, 1.604617",\ + "0.308707, 0.488754, 0.688052, 1.013199, 1.644350",\ + "0.581459, 0.756590, 0.952401, 1.294740, 1.970890",\ + "1.174296, 1.347816, 1.540620, 1.889733, 2.585056",\ + "0.349534, 0.530400, 0.726892, 1.044393, 1.659039",\ + "0.364365, 0.544804, 0.742507, 1.063215, 1.684648",\ + "0.389566, 0.569086, 0.768079, 1.093227, 1.724382",\ + "0.662286, 0.836922, 1.032428, 1.374768, 2.050921",\ + "1.255114, 1.428148, 1.620646, 1.969761, 2.665088",\ + "0.407230, 0.588238, 0.784630, 1.101888, 1.716185",\ + "0.422055, 0.602641, 0.800248, 1.120718, 1.741811",\ + "0.447245, 0.626919, 0.825823, 1.150743, 1.781568",\ + "0.719903, 0.894737, 1.090165, 1.432339, 2.108216",\ + "1.312710, 1.485957, 1.678376, 2.027355, 2.722429",\ + "0.710204, 0.893608, 1.088293, 1.405116, 2.018565",\ + "0.724980, 0.907999, 1.103911, 1.423953, 2.044210",\ + "0.750065, 0.932253, 1.129487, 1.453987, 2.083996",\ + "1.022164, 1.199940, 1.393827, 1.735630, 2.410775",\ + "1.614788, 1.791118, 1.982037, 2.330666, 3.025044"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.126844, 0.127605, 0.133435, 0.151631, 0.191178",\ + "0.149772, 0.150309, 0.154650, 0.170542, 0.205735",\ + "0.195024, 0.195582, 0.198470, 0.210618, 0.237900",\ + "0.816153, 0.816255, 0.816260, 0.817805, 0.821592",\ + "2.194128, 2.194405, 2.194418, 2.195894, 2.199512",\ + "0.126844, 0.127605, 0.133435, 0.151631, 0.191178",\ + "0.149772, 0.150309, 0.154650, 0.170542, 0.205735",\ + "0.195024, 0.195582, 0.198470, 0.210618, 0.237900",\ + "0.816153, 0.816255, 0.816260, 0.817805, 0.821592",\ + "2.194128, 2.194405, 2.194418, 2.195894, 2.199512",\ + "0.126849, 0.127605, 0.133435, 0.151631, 0.191178",\ + "0.149775, 0.150309, 0.154650, 0.170542, 0.205735",\ + "0.195028, 0.195582, 0.198470, 0.210618, 0.237900",\ + "0.816153, 0.816255, 0.816260, 0.817805, 0.821592",\ + "2.194129, 2.194405, 2.194418, 2.195894, 2.199512",\ + "0.126859, 0.127607, 0.133449, 0.151680, 0.191274",\ + "0.149782, 0.150311, 0.154660, 0.170585, 0.205820",\ + "0.195035, 0.195584, 0.198477, 0.210651, 0.237965",\ + "0.816155, 0.816256, 0.816260, 0.817810, 0.821601",\ + "2.194133, 2.194406, 2.194418, 2.195898, 2.199521",\ + "0.126945, 0.127627, 0.133451, 0.151721, 0.191389",\ + "0.149843, 0.150326, 0.154662, 0.170622, 0.205922",\ + "0.195098, 0.195599, 0.198478, 0.210679, 0.238045",\ + "0.816166, 0.816259, 0.816260, 0.817813, 0.821612",\ + "2.194165, 2.194413, 2.194418, 2.195902, 2.199532"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.117102, 0.379947, 0.573156, 0.882174, 1.479232",\ + "0.126091, 0.389068, 0.582472, 0.892519, 1.491929",\ + "0.141699, 0.404157, 0.597820, 0.909153, 1.511489",\ + "0.306945, 0.562483, 0.755606, 1.068523, 1.675209",\ + "0.649757, 0.897030, 1.089718, 1.401787, 2.006775",\ + "0.205481, 0.467265, 0.660437, 0.969479, 1.566586",\ + "0.214473, 0.476386, 0.669753, 0.979824, 1.579283",\ + "0.230076, 0.491475, 0.685100, 0.996458, 1.598842",\ + "0.395245, 0.649801, 0.842887, 1.155828, 1.762562",\ + "0.738017, 0.984348, 1.176999, 1.489092, 2.094129",\ + "0.294834, 0.547598, 0.740463, 1.049507, 1.646617",\ + "0.303840, 0.556719, 0.749780, 1.059852, 1.659314",\ + "0.319425, 0.571807, 0.765127, 1.076486, 1.678874",\ + "0.484368, 0.730134, 0.922914, 1.235856, 1.842594",\ + "0.827025, 1.064680, 1.257025, 1.569121, 2.174160",\ + "0.358511, 0.605438, 0.798193, 1.106982, 1.703722",\ + "0.367529, 0.614560, 0.807510, 1.117329, 1.716424",\ + "0.383098, 0.629648, 0.822858, 1.133967, 1.735991",\ + "0.547830, 0.787974, 0.980643, 1.293342, 1.899721",\ + "0.890379, 1.122520, 1.314754, 1.626604, 2.231284",\ + "0.695115, 0.910825, 1.101854, 1.410191, 2.006050",\ + "0.704209, 0.919948, 1.111171, 1.420541, 2.018759",\ + "0.719674, 0.935035, 1.126519, 1.437182, 2.038335",\ + "0.883062, 1.093358, 1.284304, 1.596561, 2.202077",\ + "1.224926, 1.427904, 1.618415, 1.929822, 2.533635"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.044794, 0.049393, 0.054601, 0.068665, 0.098782",\ + "0.053408, 0.055750, 0.059102, 0.072238, 0.101610",\ + "0.075784, 0.075784, 0.077996, 0.088605, 0.112682",\ + "0.368045, 0.368045, 0.368833, 0.370655, 0.374434",\ + "1.001402, 1.001402, 1.001776, 1.002637, 1.004422",\ + "0.044917, 0.049393, 0.054601, 0.068665, 0.098782",\ + "0.053471, 0.055750, 0.059102, 0.072238, 0.101610",\ + "0.075784, 0.075784, 0.077996, 0.088605, 0.112682",\ + "0.368045, 0.368045, 0.368833, 0.370655, 0.374434",\ + "1.001402, 1.001402, 1.001776, 1.002637, 1.004422",\ + "0.045280, 0.049393, 0.054601, 0.068665, 0.098782",\ + "0.053656, 0.055750, 0.059102, 0.072238, 0.101610",\ + "0.075784, 0.075784, 0.077996, 0.088605, 0.112682",\ + "0.368045, 0.368045, 0.368833, 0.370655, 0.374434",\ + "1.001402, 1.001402, 1.001776, 1.002637, 1.004422",\ + "0.045619, 0.049410, 0.054613, 0.068702, 0.098855",\ + "0.053828, 0.055759, 0.059110, 0.072274, 0.101681",\ + "0.075784, 0.075784, 0.078001, 0.088634, 0.112740",\ + "0.368045, 0.368045, 0.368835, 0.370660, 0.374443",\ + "1.001402, 1.001402, 1.001777, 1.002639, 1.004426",\ + "0.047777, 0.049532, 0.054615, 0.068733, 0.098943",\ + "0.054927, 0.055821, 0.059111, 0.072304, 0.101766",\ + "0.075784, 0.075784, 0.078002, 0.088659, 0.112810",\ + "0.368045, 0.368045, 0.368835, 0.370664, 0.374454",\ + "1.001402, 1.001402, 1.001777, 1.002641, 1.004432"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[7]_redg_min_2316*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[43]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.098350, 0.258117, 0.412724, 0.663632, 1.151052",\ + "0.111306, 0.279646, 0.445289, 0.710490, 1.223646",\ + "0.138089, 0.311436, 0.490658, 0.774246, 1.320793",\ + "0.424991, 0.637508, 0.825514, 1.153509, 1.801342",\ + "1.020536, 1.249709, 1.439386, 1.764952, 2.405506",\ + "0.185759, 0.345435, 0.500005, 0.750937, 1.238405",\ + "0.198715, 0.366964, 0.532570, 0.797795, 1.310999",\ + "0.225498, 0.398754, 0.577939, 0.861551, 1.408146",\ + "0.513280, 0.724826, 0.912795, 1.240814, 1.888696",\ + "1.108868, 1.337027, 1.526667, 1.852257, 2.492859",\ + "0.266486, 0.425768, 0.580032, 0.830966, 1.318437",\ + "0.279498, 0.447297, 0.612597, 0.877824, 1.391031",\ + "0.306314, 0.479087, 0.657966, 0.941579, 1.488178",\ + "0.602279, 0.805159, 0.992822, 1.320843, 1.968727",\ + "1.197992, 1.417360, 1.606694, 1.932286, 2.572891",\ + "0.323899, 0.483524, 0.637672, 0.888307, 1.375276",\ + "0.337018, 0.505085, 0.670262, 0.935196, 1.447932",\ + "0.363897, 0.536894, 0.715662, 0.998992, 1.545160",\ + "0.665584, 0.862970, 1.050539, 1.378378, 2.025954",\ + "1.261413, 1.475185, 1.664415, 1.989812, 2.630099",\ + "0.624253, 0.788317, 0.941319, 1.191402, 1.677284",\ + "0.638351, 0.810106, 0.973913, 1.238318, 1.750015",\ + "0.665802, 0.842047, 1.019319, 1.302149, 1.847340",\ + "0.990853, 1.168154, 1.354199, 1.681640, 2.328429",\ + "1.596393, 1.780461, 1.968075, 2.293067, 2.932554"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.028418, 0.053830, 0.061535, 0.076150, 0.106328",\ + "0.053925, 0.080459, 0.084933, 0.098494, 0.128975",\ + "0.117469, 0.123739, 0.136658, 0.151484, 0.176772",\ + "0.813025, 0.813025, 0.813025, 0.814972, 0.819748",\ + "2.191689, 2.192946, 2.194005, 2.200700, 2.216248",\ + "0.028418, 0.053830, 0.061535, 0.076150, 0.106328",\ + "0.053925, 0.080459, 0.084933, 0.098494, 0.128975",\ + "0.117469, 0.123739, 0.136658, 0.151484, 0.176772",\ + "0.813025, 0.813025, 0.813025, 0.814972, 0.819748",\ + "2.191723, 2.192946, 2.194005, 2.200700, 2.216248",\ + "0.028584, 0.053830, 0.061535, 0.076150, 0.106328",\ + "0.054098, 0.080459, 0.084933, 0.098494, 0.128975",\ + "0.117510, 0.123739, 0.136658, 0.151484, 0.176772",\ + "0.813025, 0.813025, 0.813025, 0.814972, 0.819748",\ + "2.191823, 2.192946, 2.194005, 2.200700, 2.216248",\ + "0.028905, 0.053925, 0.061551, 0.076187, 0.106401",\ + "0.054433, 0.080559, 0.084941, 0.098531, 0.129049",\ + "0.117589, 0.123763, 0.136688, 0.151514, 0.176833",\ + "0.813025, 0.813025, 0.813025, 0.814978, 0.819760",\ + "2.191915, 2.192951, 2.194008, 2.200718, 2.216285",\ + "0.031805, 0.054598, 0.061553, 0.076218, 0.106489",\ + "0.057461, 0.081261, 0.084942, 0.098563, 0.129138",\ + "0.118304, 0.123929, 0.136693, 0.151541, 0.176907",\ + "0.813025, 0.813025, 0.813025, 0.814982, 0.819773",\ + "2.192503, 2.192984, 2.194008, 2.200735, 2.216331"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.069370, 0.283193, 0.491815, 0.800919, 1.367462",\ + "0.075632, 0.304498, 0.517002, 0.813952, 1.385072",\ + "0.088234, 0.333476, 0.530104, 0.830255, 1.407585",\ + "0.254611, 0.476253, 0.671078, 0.977854, 1.568006",\ + "0.593217, 0.801399, 0.995520, 1.304053, 1.898975",\ + "0.156902, 0.370515, 0.579033, 0.888224, 1.454816",\ + "0.163435, 0.391863, 0.604283, 0.901257, 1.472425",\ + "0.176298, 0.420901, 0.617385, 0.917560, 1.494938",\ + "0.342791, 0.563572, 0.758359, 1.065159, 1.655359",\ + "0.681370, 0.888717, 1.082801, 1.391358, 1.986328",\ + "0.243698, 0.458976, 0.666990, 0.968253, 1.534847",\ + "0.251018, 0.480422, 0.684310, 0.981285, 1.552457",\ + "0.264645, 0.506852, 0.697412, 0.997588, 1.574970",\ + "0.431471, 0.643905, 0.838386, 1.145188, 1.735391",\ + "0.769972, 0.969050, 1.162828, 1.471387, 2.066360",\ + "0.304960, 0.523854, 0.731112, 1.025689, 1.591878",\ + "0.313009, 0.545444, 0.742029, 1.038728, 1.609498",\ + "0.327344, 0.564695, 0.755135, 1.055038, 1.632026",\ + "0.494481, 0.701749, 0.896119, 1.202653, 1.792478",\ + "0.832908, 1.026881, 1.220559, 1.528858, 2.123458",\ + "0.626203, 0.851949, 1.035624, 1.328867, 1.894116",\ + "0.638895, 0.858887, 1.045689, 1.341910, 1.911750",\ + "0.657734, 0.870103, 1.058796, 1.358227, 1.934296",\ + "0.821978, 1.007166, 1.199781, 1.505856, 2.094786",\ + "1.150367, 1.332198, 1.524221, 1.832065, 2.425780"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.013843, 0.057624, 0.075770, 0.080313, 0.107471",\ + "0.025205, 0.064739, 0.067587, 0.083073, 0.115488",\ + "0.053856, 0.083413, 0.086593, 0.102413, 0.134994",\ + "0.368605, 0.368605, 0.369807, 0.373448, 0.381327",\ + "1.000406, 1.000406, 1.002130, 1.003829, 1.006481",\ + "0.014774, 0.057698, 0.075841, 0.080313, 0.107471",\ + "0.026141, 0.064772, 0.067587, 0.083073, 0.115488",\ + "0.054523, 0.083449, 0.086593, 0.102413, 0.134994",\ + "0.368605, 0.368605, 0.369807, 0.373448, 0.381327",\ + "1.000406, 1.000406, 1.002130, 1.003829, 1.006481",\ + "0.017481, 0.057867, 0.075842, 0.080313, 0.107471",\ + "0.028863, 0.064847, 0.067587, 0.083073, 0.115488",\ + "0.056460, 0.078305, 0.086593, 0.102413, 0.134994",\ + "0.368605, 0.368605, 0.369807, 0.373448, 0.381327",\ + "1.000406, 1.000406, 1.002130, 1.003829, 1.006481",\ + "0.019992, 0.058113, 0.075846, 0.080346, 0.107536",\ + "0.031388, 0.064955, 0.067602, 0.083112, 0.115566",\ + "0.058257, 0.078397, 0.086610, 0.102452, 0.135073",\ + "0.368605, 0.368605, 0.369809, 0.373458, 0.381346",\ + "1.000406, 1.000406, 1.002134, 1.003832, 1.006488",\ + "0.035969, 0.049040, 0.064123, 0.080374, 0.107616",\ + "0.047452, 0.060595, 0.067604, 0.083146, 0.115661",\ + "0.069690, 0.079044, 0.086613, 0.102486, 0.135168",\ + "0.368605, 0.368605, 0.369810, 0.373466, 0.381369",\ + "1.000406, 1.000406, 1.002134, 1.003835, 1.006495"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[7]_redg_min_2285*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[45]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.431291, 0.619330, 0.796158, 1.080125, 1.629897",\ + "0.450507, 0.638547, 0.815375, 1.099342, 1.649114",\ + "0.482156, 0.670196, 0.847024, 1.130990, 1.680763",\ + "0.772737, 0.960778, 1.137606, 1.421573, 1.971346",\ + "1.366740, 1.554780, 1.731609, 2.015576, 2.565349",\ + "0.519710, 0.706648, 0.883439, 1.167430, 1.717251",\ + "0.538927, 0.725865, 0.902656, 1.186647, 1.736468",\ + "0.570576, 0.757514, 0.934305, 1.218296, 1.768116",\ + "0.861157, 1.048096, 1.224887, 1.508878, 2.058700",\ + "1.455159, 1.642098, 1.818890, 2.102881, 2.652703",\ + "0.609345, 0.786979, 0.963466, 1.247459, 1.797282",\ + "0.628561, 0.806196, 0.982683, 1.266675, 1.816499",\ + "0.660210, 0.837845, 1.014332, 1.298324, 1.848148",\ + "0.950791, 1.128427, 1.304914, 1.588907, 2.138731",\ + "1.544794, 1.722429, 1.898916, 2.182909, 2.732734",\ + "0.668670, 0.844800, 1.021158, 1.304875, 1.854273",\ + "0.687887, 0.864017, 1.040374, 1.324092, 1.873490",\ + "0.719535, 0.895665, 1.072023, 1.355741, 1.905138",\ + "1.010116, 1.186247, 1.362605, 1.646324, 2.195722",\ + "1.604119, 1.780250, 1.956608, 2.240326, 2.789725",\ + "0.971362, 1.150042, 1.324812, 1.608036, 2.156464",\ + "0.990578, 1.169258, 1.344029, 1.627252, 2.175681",\ + "1.022227, 1.200907, 1.375677, 1.658901, 2.207329",\ + "1.312808, 1.491489, 1.666260, 1.949484, 2.497913",\ + "1.906811, 2.085492, 2.260262, 2.543486, 3.091916"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.115194, 0.115201, 0.115205, 0.115209, 0.115217",\ + "0.141976, 0.141976, 0.141976, 0.141975, 0.141974",\ + "0.190577, 0.190577, 0.190577, 0.190577, 0.190576",\ + "0.817535, 0.817535, 0.817535, 0.817534, 0.817534",\ + "2.193374, 2.193372, 2.193371, 2.193370, 2.193367",\ + "0.115194, 0.115201, 0.115205, 0.115209, 0.115217",\ + "0.141976, 0.141976, 0.141976, 0.141975, 0.141974",\ + "0.190577, 0.190577, 0.190577, 0.190577, 0.190576",\ + "0.817535, 0.817535, 0.817535, 0.817534, 0.817534",\ + "2.193374, 2.193372, 2.193371, 2.193370, 2.193367",\ + "0.115194, 0.115201, 0.115205, 0.115209, 0.115217",\ + "0.141976, 0.141976, 0.141976, 0.141975, 0.141974",\ + "0.190577, 0.190577, 0.190577, 0.190577, 0.190576",\ + "0.817535, 0.817535, 0.817535, 0.817534, 0.817534",\ + "2.193374, 2.193372, 2.193371, 2.193370, 2.193367",\ + "0.115194, 0.115201, 0.115205, 0.115209, 0.115217",\ + "0.141976, 0.141976, 0.141976, 0.141975, 0.141974",\ + "0.190577, 0.190577, 0.190577, 0.190577, 0.190576",\ + "0.817535, 0.817535, 0.817535, 0.817534, 0.817534",\ + "2.193374, 2.193372, 2.193371, 2.193370, 2.193367",\ + "0.115195, 0.115202, 0.115205, 0.115209, 0.115217",\ + "0.141976, 0.141976, 0.141976, 0.141975, 0.141974",\ + "0.190577, 0.190577, 0.190577, 0.190577, 0.190576",\ + "0.817535, 0.817535, 0.817535, 0.817534, 0.817534",\ + "2.193374, 2.193372, 2.193371, 2.193370, 2.193367"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.443689, 0.631730, 0.808559, 1.092526, 1.642300",\ + "0.451495, 0.639537, 0.816365, 1.100333, 1.650107",\ + "0.464877, 0.652918, 0.829747, 1.113715, 1.663489",\ + "0.616830, 0.804870, 0.981699, 1.265666, 1.815439",\ + "0.950269, 1.138309, 1.315137, 1.599104, 2.148877",\ + "0.532108, 0.719048, 0.895840, 1.179832, 1.729654",\ + "0.539915, 0.726855, 0.903646, 1.187638, 1.737461",\ + "0.553297, 0.740236, 0.917028, 1.201020, 1.750842",\ + "0.705249, 0.892188, 1.068980, 1.352971, 1.902793",\ + "1.038688, 1.225627, 1.402418, 1.686409, 2.236230",\ + "0.621743, 0.799379, 0.975867, 1.259860, 1.809685",\ + "0.629550, 0.807186, 0.983673, 1.267667, 1.817492",\ + "0.642931, 0.820567, 0.997055, 1.281049, 1.830874",\ + "0.794884, 0.972519, 1.149006, 1.432999, 1.982824",\ + "1.128323, 1.305958, 1.482445, 1.766438, 2.316262",\ + "0.681068, 0.857200, 1.033558, 1.317277, 1.866676",\ + "0.688875, 0.865006, 1.041365, 1.325083, 1.874483",\ + "0.702257, 0.878388, 1.054746, 1.338465, 1.887864",\ + "0.854209, 1.030340, 1.206698, 1.490416, 2.039815",\ + "1.187648, 1.363779, 1.540136, 1.823854, 2.373252",\ + "0.983760, 1.162441, 1.337212, 1.620437, 2.168867",\ + "0.991567, 1.170248, 1.345019, 1.628244, 2.176674",\ + "1.004948, 1.183630, 1.358401, 1.641625, 2.190056",\ + "1.156901, 1.335582, 1.510352, 1.793576, 2.342006",\ + "1.490340, 1.669020, 1.843791, 2.127015, 2.675444"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.049719, 0.049719, 0.049720, 0.049720, 0.049720",\ + "0.055444, 0.055444, 0.055444, 0.055444, 0.055444",\ + "0.075302, 0.075302, 0.075302, 0.075302, 0.075302",\ + "0.368591, 0.368591, 0.368591, 0.368591, 0.368591",\ + "1.002263, 1.002263, 1.002263, 1.002263, 1.002263",\ + "0.049719, 0.049719, 0.049720, 0.049720, 0.049720",\ + "0.055444, 0.055444, 0.055444, 0.055444, 0.055444",\ + "0.075302, 0.075302, 0.075302, 0.075302, 0.075302",\ + "0.368591, 0.368591, 0.368591, 0.368591, 0.368591",\ + "1.002263, 1.002263, 1.002263, 1.002263, 1.002263",\ + "0.049719, 0.049719, 0.049720, 0.049720, 0.049720",\ + "0.055444, 0.055444, 0.055444, 0.055444, 0.055444",\ + "0.075302, 0.075302, 0.075302, 0.075302, 0.075302",\ + "0.368591, 0.368591, 0.368591, 0.368591, 0.368591",\ + "1.002263, 1.002263, 1.002263, 1.002263, 1.002263",\ + "0.049719, 0.049719, 0.049720, 0.049720, 0.049720",\ + "0.055444, 0.055444, 0.055444, 0.055444, 0.055444",\ + "0.075302, 0.075302, 0.075302, 0.075302, 0.075302",\ + "0.368591, 0.368591, 0.368591, 0.368591, 0.368591",\ + "1.002263, 1.002263, 1.002263, 1.002263, 1.002263",\ + "0.049719, 0.049719, 0.049720, 0.049720, 0.049720",\ + "0.055444, 0.055444, 0.055444, 0.055444, 0.055444",\ + "0.075302, 0.075302, 0.075302, 0.075302, 0.075302",\ + "0.368591, 0.368591, 0.368591, 0.368591, 0.368591",\ + "1.002263, 1.002263, 1.002263, 1.002263, 1.002263"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[7]_redg_min_2529*/ + +} /* end of pin tl_o[7] */ + +pin("tl_o[6]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.154883 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : tl_o[6]; + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[16]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.555603, 0.806076, 1.084885, 1.584808, 2.584653",\ + "0.589996, 0.840470, 1.119283, 1.619221, 2.619098",\ + "0.661233, 0.911707, 1.190508, 1.690407, 2.690205",\ + "0.915400, 1.165873, 1.444750, 1.944912, 2.945236",\ + "1.840005, 2.090481, 2.369305, 2.869275, 3.869217",\ + "0.643016, 0.893581, 1.172550, 1.671522, 2.670587",\ + "0.677409, 0.927975, 1.206949, 1.705936, 2.705032",\ + "0.748646, 0.999212, 1.278174, 1.777122, 2.776139",\ + "1.002812, 1.253378, 1.532416, 2.031627, 3.031170",\ + "1.927417, 2.177986, 2.456970, 2.955990, 3.955151",\ + "0.723872, 0.982469, 1.260517, 1.759145, 2.757542",\ + "0.758265, 1.016862, 1.294915, 1.793559, 2.791987",\ + "0.829503, 1.088099, 1.366140, 1.864744, 2.863094",\ + "1.083669, 1.342266, 1.620383, 2.119249, 3.118125",\ + "2.008274, 2.266873, 2.544936, 3.043612, 4.042106",\ + "0.781752, 1.047969, 1.324661, 1.823058, 2.821051",\ + "0.816145, 1.082362, 1.359060, 1.857472, 2.855496",\ + "0.887382, 1.153599, 1.430285, 1.928658, 2.926603",\ + "1.141549, 1.407765, 1.684527, 2.183163, 3.181634",\ + "2.066154, 2.332373, 2.609081, 3.107526, 4.105615",\ + "1.114573, 1.410746, 1.676844, 2.172535, 3.166507",\ + "1.148966, 1.445139, 1.711242, 2.206949, 3.200952",\ + "1.220203, 1.516376, 1.782467, 2.278135, 3.272059",\ + "1.474370, 1.770542, 2.036712, 2.532641, 3.527090",\ + "2.398975, 2.695150, 2.961264, 3.457003, 4.451071"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.034112, 0.034113, 0.034114, 0.034119, 0.034130",\ + "0.083750, 0.083751, 0.083761, 0.083790, 0.083849",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692761, 0.692766, 0.692810, 0.692941, 0.693203",\ + "2.465173, 2.465199, 2.466091, 2.469060, 2.474999",\ + "0.034112, 0.034113, 0.034114, 0.034119, 0.034130",\ + "0.083750, 0.083751, 0.083761, 0.083790, 0.083849",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692761, 0.692766, 0.692810, 0.692941, 0.693203",\ + "2.465173, 2.465199, 2.466100, 2.469060, 2.474999",\ + "0.034112, 0.034113, 0.034114, 0.034119, 0.034130",\ + "0.083750, 0.083751, 0.083761, 0.083790, 0.083849",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692761, 0.692766, 0.692810, 0.692941, 0.693203",\ + "2.465173, 2.465199, 2.466100, 2.469060, 2.474999",\ + "0.034112, 0.034113, 0.034114, 0.034119, 0.034130",\ + "0.083750, 0.083751, 0.083761, 0.083790, 0.083849",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692761, 0.692766, 0.692810, 0.692941, 0.693203",\ + "2.465173, 2.465200, 2.466101, 2.469060, 2.474999",\ + "0.034112, 0.034113, 0.034114, 0.034119, 0.034130",\ + "0.083751, 0.083752, 0.083761, 0.083790, 0.083849",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692761, 0.692768, 0.692812, 0.692941, 0.693203",\ + "2.465173, 2.465210, 2.466131, 2.469072, 2.474999"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.587400, 0.837877, 1.116297, 1.614862, 2.611990",\ + "0.629152, 0.879628, 1.158099, 1.656840, 2.654322",\ + "0.689082, 0.939558, 1.218080, 1.716996, 2.714829",\ + "0.857199, 1.107675, 1.386266, 1.885427, 2.883749",\ + "1.439229, 1.689714, 1.968424, 2.467974, 3.467073",\ + "0.674813, 0.925382, 1.203958, 1.701576, 2.697924",\ + "0.716564, 0.967133, 1.245761, 1.743555, 2.740255",\ + "0.776495, 1.027063, 1.305742, 1.803711, 2.800763",\ + "0.944611, 1.195180, 1.473930, 1.972142, 2.969683",\ + "1.526642, 1.777219, 2.056088, 2.554689, 3.553007",\ + "0.755670, 1.014269, 1.291924, 1.789199, 2.784879",\ + "0.797421, 1.056020, 1.333727, 1.831177, 2.827210",\ + "0.857352, 1.115951, 1.393708, 1.891333, 2.887718",\ + "1.025468, 1.284067, 1.561896, 2.059765, 3.056638",\ + "1.607499, 1.866107, 2.144055, 2.642311, 3.639962",\ + "0.813550, 1.079769, 1.356069, 1.853112, 2.848388",\ + "0.855301, 1.121520, 1.397871, 1.895091, 2.890719",\ + "0.915231, 1.181451, 1.457853, 1.955247, 2.951227",\ + "1.083348, 1.349567, 1.626040, 2.123678, 3.120147",\ + "1.665379, 1.931606, 2.208199, 2.706225, 3.703471",\ + "1.146371, 1.442547, 1.708238, 2.202584, 3.193844",\ + "1.188122, 1.484298, 1.750042, 2.244563, 3.236176",\ + "1.248053, 1.544228, 1.810025, 2.304720, 3.296683",\ + "1.416169, 1.712345, 1.978215, 2.473152, 3.465603",\ + "1.998202, 2.294386, 2.560378, 3.055700, 4.048927"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.045876, 0.045875, 0.045861, 0.045821, 0.045741",\ + "0.079914, 0.079913, 0.079913, 0.079910, 0.079906",\ + "0.155804, 0.155803, 0.155792, 0.155761, 0.155698",\ + "0.431307, 0.431307, 0.431304, 0.431297, 0.431282",\ + "1.494119, 1.494120, 1.494128, 1.494150, 1.494195",\ + "0.045876, 0.045875, 0.045861, 0.045821, 0.045741",\ + "0.079914, 0.079913, 0.079913, 0.079910, 0.079906",\ + "0.155804, 0.155803, 0.155792, 0.155761, 0.155698",\ + "0.431307, 0.431307, 0.431304, 0.431297, 0.431282",\ + "1.494119, 1.494120, 1.494128, 1.494150, 1.494195",\ + "0.045876, 0.045875, 0.045861, 0.045821, 0.045741",\ + "0.079914, 0.079913, 0.079913, 0.079910, 0.079906",\ + "0.155804, 0.155803, 0.155792, 0.155761, 0.155698",\ + "0.431307, 0.431307, 0.431304, 0.431297, 0.431282",\ + "1.494119, 1.494120, 1.494128, 1.494150, 1.494195",\ + "0.045876, 0.045875, 0.045861, 0.045821, 0.045741",\ + "0.079914, 0.079913, 0.079913, 0.079910, 0.079906",\ + "0.155804, 0.155803, 0.155792, 0.155761, 0.155698",\ + "0.431307, 0.431307, 0.431304, 0.431297, 0.431282",\ + "1.494119, 1.494120, 1.494128, 1.494150, 1.494195",\ + "0.045876, 0.045874, 0.045861, 0.045821, 0.045741",\ + "0.079914, 0.079913, 0.079913, 0.079910, 0.079906",\ + "0.155804, 0.155802, 0.155792, 0.155761, 0.155698",\ + "0.431307, 0.431307, 0.431304, 0.431297, 0.431282",\ + "1.494119, 1.494120, 1.494128, 1.494150, 1.494195"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[6]_redg_2615*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[17]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.674108, 0.912583, 1.208888, 1.707377, 2.704357",\ + "0.708540, 0.947015, 1.243320, 1.741811, 2.738792",\ + "0.779534, 1.018009, 1.314315, 1.812807, 2.809791",\ + "1.033699, 1.272174, 1.568481, 2.066974, 3.063961",\ + "1.958883, 2.197359, 2.493670, 2.992175, 3.989184",\ + "0.761549, 1.000192, 1.296551, 1.794093, 2.790291",\ + "0.795981, 1.034624, 1.330983, 1.828526, 2.824726",\ + "0.866976, 1.105618, 1.401978, 1.899523, 2.895725",\ + "1.121141, 1.359783, 1.656144, 2.153690, 3.149894",\ + "2.046324, 2.284967, 2.581333, 3.078891, 4.075118",\ + "0.842432, 1.089339, 1.384517, 1.881716, 2.877246",\ + "0.876864, 1.123771, 1.418950, 1.916149, 2.911681",\ + "0.947859, 1.194765, 1.489945, 1.987146, 2.982680",\ + "1.202024, 1.448930, 1.744111, 2.241313, 3.236850",\ + "2.127208, 2.374115, 2.669300, 3.166513, 4.162073",\ + "0.900159, 1.155216, 1.448662, 1.945630, 2.940755",\ + "0.934591, 1.189648, 1.483094, 1.980063, 2.975190",\ + "1.005585, 1.260643, 1.554090, 2.051059, 3.046189",\ + "1.259750, 1.514808, 1.808255, 2.305226, 3.300359",\ + "2.184934, 2.439992, 2.733444, 3.230427, 4.225582",\ + "1.202901, 1.522357, 1.800832, 2.295105, 3.286211",\ + "1.237333, 1.556789, 1.835264, 2.329538, 3.320646",\ + "1.308327, 1.627784, 1.906260, 2.400534, 3.391645",\ + "1.562492, 1.881949, 2.160425, 2.654701, 3.645814",\ + "2.487676, 2.807133, 3.085615, 3.579902, 4.571038"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.034241, 0.034241, 0.034241, 0.034244, 0.034249",\ + "0.083584, 0.083584, 0.083586, 0.083591, 0.083602",\ + "0.208067, 0.208067, 0.208069, 0.208073, 0.208081",\ + "0.693279, 0.693282, 0.693285, 0.693285, 0.693285",\ + "2.470759, 2.470761, 2.470771, 2.470795, 2.470844",\ + "0.034241, 0.034241, 0.034241, 0.034244, 0.034249",\ + "0.083584, 0.083584, 0.083586, 0.083591, 0.083602",\ + "0.208067, 0.208067, 0.208069, 0.208073, 0.208081",\ + "0.693279, 0.693282, 0.693285, 0.693285, 0.693285",\ + "2.470759, 2.470761, 2.470771, 2.470795, 2.470844",\ + "0.034241, 0.034241, 0.034241, 0.034244, 0.034249",\ + "0.083584, 0.083584, 0.083586, 0.083591, 0.083602",\ + "0.208067, 0.208067, 0.208069, 0.208073, 0.208081",\ + "0.693279, 0.693282, 0.693285, 0.693285, 0.693285",\ + "2.470759, 2.470761, 2.470771, 2.470795, 2.470844",\ + "0.034241, 0.034241, 0.034241, 0.034244, 0.034249",\ + "0.083584, 0.083584, 0.083586, 0.083591, 0.083602",\ + "0.208067, 0.208067, 0.208069, 0.208073, 0.208081",\ + "0.693279, 0.693282, 0.693285, 0.693285, 0.693285",\ + "2.470759, 2.470761, 2.470771, 2.470795, 2.470844",\ + "0.034241, 0.034241, 0.034241, 0.034244, 0.034249",\ + "0.083584, 0.083584, 0.083586, 0.083591, 0.083602",\ + "0.208067, 0.208067, 0.208069, 0.208073, 0.208081",\ + "0.693279, 0.693283, 0.693285, 0.693285, 0.693285",\ + "2.470759, 2.470762, 2.470771, 2.470795, 2.470844"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.701144, 0.939619, 1.235924, 1.734413, 2.731392",\ + "0.743441, 0.981916, 1.278220, 1.776710, 2.773689",\ + "0.804003, 1.042478, 1.338783, 1.837273, 2.834251",\ + "0.972934, 1.211409, 1.507714, 2.006203, 3.003182",\ + "1.556185, 1.794660, 2.090965, 2.589454, 3.586433",\ + "0.788586, 1.027228, 1.323587, 1.821129, 2.817326",\ + "0.830882, 1.069525, 1.365883, 1.863425, 2.859622",\ + "0.891445, 1.130087, 1.426446, 1.923988, 2.920185",\ + "1.060375, 1.299018, 1.595377, 2.092919, 3.089116",\ + "1.643626, 1.882269, 2.178628, 2.676170, 3.672367",\ + "0.869469, 1.116375, 1.411554, 1.908752, 2.904281",\ + "0.911765, 1.158672, 1.453850, 1.951048, 2.946578",\ + "0.972328, 1.219234, 1.514413, 2.011611, 3.007140",\ + "1.141259, 1.388165, 1.683344, 2.180542, 3.176071",\ + "1.724510, 1.971416, 2.266594, 2.763793, 3.759322",\ + "0.927195, 1.182252, 1.475698, 1.972666, 2.967790",\ + "0.969492, 1.224549, 1.517995, 2.014962, 3.010087",\ + "1.030054, 1.285111, 1.578557, 2.075525, 3.070649",\ + "1.198985, 1.454042, 1.747488, 2.244456, 3.239580",\ + "1.782236, 2.037293, 2.330739, 2.827706, 3.822831",\ + "1.229937, 1.549393, 1.827868, 2.322140, 3.313246",\ + "1.272233, 1.591690, 1.870165, 2.364437, 3.355543",\ + "1.332796, 1.652252, 1.930727, 2.424999, 3.416105",\ + "1.501727, 1.821183, 2.099658, 2.593930, 3.585036",\ + "2.084978, 2.404434, 2.682909, 3.177181, 4.168287"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.045859, 0.045859, 0.045858, 0.045858, 0.045857",\ + "0.079962, 0.079962, 0.079962, 0.079962, 0.079962",\ + "0.155685, 0.155685, 0.155685, 0.155685, 0.155685",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498064, 1.498064, 1.498063, 1.498063, 1.498062",\ + "0.045859, 0.045859, 0.045858, 0.045858, 0.045857",\ + "0.079962, 0.079962, 0.079962, 0.079962, 0.079962",\ + "0.155685, 0.155685, 0.155685, 0.155685, 0.155685",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498064, 1.498064, 1.498063, 1.498063, 1.498062",\ + "0.045859, 0.045859, 0.045858, 0.045858, 0.045857",\ + "0.079962, 0.079962, 0.079962, 0.079962, 0.079962",\ + "0.155685, 0.155685, 0.155685, 0.155685, 0.155685",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498064, 1.498064, 1.498063, 1.498063, 1.498062",\ + "0.045859, 0.045859, 0.045858, 0.045858, 0.045857",\ + "0.079962, 0.079962, 0.079962, 0.079962, 0.079962",\ + "0.155685, 0.155685, 0.155685, 0.155685, 0.155685",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498064, 1.498064, 1.498063, 1.498063, 1.498062",\ + "0.045859, 0.045859, 0.045858, 0.045858, 0.045857",\ + "0.079962, 0.079962, 0.079962, 0.079962, 0.079962",\ + "0.155685, 0.155685, 0.155685, 0.155685, 0.155685",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498064, 1.498063, 1.498063, 1.498063, 1.498062"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[6]_redg_2662*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[19]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.445529, 0.709512, 0.994214, 1.487610, 2.474404",\ + "0.486774, 0.750744, 1.035473, 1.529006, 2.516072",\ + "0.562671, 0.826637, 1.111362, 1.604919, 2.592032",\ + "0.817960, 1.082041, 1.366717, 1.860078, 2.846800",\ + "1.742890, 2.007130, 2.292228, 2.786041, 3.773666",\ + "0.532938, 0.797075, 1.081856, 1.574325, 2.560338",\ + "0.574183, 0.838307, 1.123116, 1.615720, 2.602005",\ + "0.650079, 0.914199, 1.199006, 1.691633, 2.677966",\ + "0.905369, 1.169603, 1.454359, 1.946792, 2.932734",\ + "1.830298, 2.094694, 2.379872, 2.872755, 3.859600",\ + "0.616182, 0.886074, 1.169821, 1.661946, 2.647293",\ + "0.657426, 0.927306, 1.211081, 1.703342, 2.688961",\ + "0.733323, 1.003198, 1.286970, 1.779255, 2.764921",\ + "0.988623, 1.258602, 1.542324, 2.034413, 3.019689",\ + "1.913549, 2.183697, 2.467836, 2.960376, 3.946555",\ + "0.679766, 0.951735, 1.233965, 1.725859, 2.710802",\ + "0.721010, 0.992966, 1.275225, 1.767255, 2.752470",\ + "0.796907, 1.068859, 1.351114, 1.843168, 2.828430",\ + "1.052215, 1.324263, 1.606468, 2.098326, 3.083198",\ + "1.977138, 2.249364, 2.531980, 3.024289, 4.010064",\ + "1.015779, 1.316457, 1.586079, 2.075305, 3.056258",\ + "1.057021, 1.357686, 1.627340, 2.116701, 3.097925",\ + "1.132920, 1.433575, 1.703230, 2.192614, 3.173886",\ + "1.388277, 1.688981, 1.958581, 2.447772, 3.428654",\ + "2.313181, 2.614154, 2.884099, 3.373737, 4.355520"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.034901, 0.034921, 0.035051, 0.035499, 0.036393",\ + "0.083287, 0.083291, 0.083337, 0.083496, 0.083813",\ + "0.208547, 0.208578, 0.208621, 0.208624, 0.208631",\ + "0.692555, 0.692580, 0.692833, 0.693579, 0.695072",\ + "2.479533, 2.479533, 2.479533, 2.479533, 2.479533",\ + "0.034901, 0.034921, 0.035053, 0.035499, 0.036393",\ + "0.083287, 0.083291, 0.083337, 0.083496, 0.083813",\ + "0.208547, 0.208579, 0.208621, 0.208624, 0.208631",\ + "0.692555, 0.692580, 0.692835, 0.693579, 0.695072",\ + "2.479533, 2.479533, 2.479533, 2.479533, 2.479533",\ + "0.034903, 0.034921, 0.035053, 0.035499, 0.036393",\ + "0.083287, 0.083291, 0.083337, 0.083496, 0.083813",\ + "0.208547, 0.208579, 0.208621, 0.208624, 0.208631",\ + "0.692555, 0.692581, 0.692835, 0.693579, 0.695072",\ + "2.479533, 2.479533, 2.479533, 2.479533, 2.479533",\ + "0.034905, 0.034921, 0.035053, 0.035499, 0.036393",\ + "0.083287, 0.083291, 0.083337, 0.083496, 0.083813",\ + "0.208547, 0.208580, 0.208621, 0.208624, 0.208631",\ + "0.692555, 0.692581, 0.692835, 0.693579, 0.695072",\ + "2.479533, 2.479533, 2.479533, 2.479533, 2.479533",\ + "0.034914, 0.034921, 0.035057, 0.035500, 0.036393",\ + "0.083289, 0.083291, 0.083339, 0.083496, 0.083813",\ + "0.208549, 0.208590, 0.208621, 0.208624, 0.208631",\ + "0.692555, 0.692590, 0.692843, 0.693582, 0.695072",\ + "2.479533, 2.479533, 2.479533, 2.479533, 2.479533"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.491807, 0.755750, 1.040134, 1.532324, 2.516704",\ + "0.532692, 0.796638, 1.081002, 1.573128, 2.557379",\ + "0.593088, 0.857084, 1.141423, 1.633441, 2.617476",\ + "0.762034, 1.026038, 1.310351, 1.802328, 2.786283",\ + "1.345402, 1.609523, 1.893616, 2.385030, 3.367858",\ + "0.579215, 0.843313, 1.127773, 1.619038, 2.602638",\ + "0.620100, 0.884201, 1.168641, 1.659842, 2.643312",\ + "0.680497, 0.944646, 1.229061, 1.720155, 2.703410",\ + "0.849443, 1.113601, 1.397989, 1.889042, 2.872216",\ + "1.432811, 1.697085, 1.981253, 2.471745, 3.453792",\ + "0.662453, 0.932313, 1.215738, 1.706660, 2.689593",\ + "0.703338, 0.973200, 1.256606, 1.747463, 2.730268",\ + "0.763739, 1.033646, 1.317026, 1.807776, 2.790365",\ + "0.932687, 1.202600, 1.485954, 1.976664, 2.959171",\ + "1.516071, 1.786084, 2.069218, 2.559366, 3.540747",\ + "0.726033, 0.997974, 1.279881, 1.770573, 2.753102",\ + "0.766918, 1.038862, 1.320749, 1.811376, 2.793777",\ + "0.827322, 1.099308, 1.381169, 1.871690, 2.853874",\ + "0.996272, 1.268262, 1.550097, 2.040577, 3.022680",\ + "1.579666, 1.851744, 2.133361, 2.623279, 3.604256",\ + "1.062019, 1.362705, 1.631983, 2.120014, 3.098558",\ + "1.102906, 1.403592, 1.672850, 2.160817, 3.139233",\ + "1.163330, 1.464039, 1.733269, 2.221130, 3.199330",\ + "1.332287, 1.632990, 1.902197, 2.390017, 3.368136",\ + "1.915751, 2.216458, 2.485455, 2.972717, 3.949712"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.042675, 0.042675, 0.042652, 0.042575, 0.042419",\ + "0.078931, 0.078931, 0.078931, 0.078931, 0.078931",\ + "0.155291, 0.155291, 0.155277, 0.155229, 0.155132",\ + "0.431055, 0.431055, 0.431011, 0.430859, 0.430555",\ + "1.494840, 1.494148, 1.493909, 1.493909, 1.493909",\ + "0.042675, 0.042675, 0.042652, 0.042575, 0.042419",\ + "0.078931, 0.078931, 0.078931, 0.078931, 0.078931",\ + "0.155291, 0.155291, 0.155277, 0.155229, 0.155132",\ + "0.431055, 0.431055, 0.431011, 0.430859, 0.430555",\ + "1.494840, 1.494147, 1.493909, 1.493909, 1.493909",\ + "0.042675, 0.042675, 0.042652, 0.042575, 0.042419",\ + "0.078931, 0.078931, 0.078931, 0.078931, 0.078931",\ + "0.155291, 0.155291, 0.155277, 0.155229, 0.155132",\ + "0.431055, 0.431055, 0.431011, 0.430859, 0.430555",\ + "1.494787, 1.494143, 1.493909, 1.493909, 1.493909",\ + "0.042675, 0.042675, 0.042652, 0.042575, 0.042419",\ + "0.078931, 0.078931, 0.078931, 0.078931, 0.078931",\ + "0.155291, 0.155291, 0.155277, 0.155229, 0.155132",\ + "0.431055, 0.431055, 0.431011, 0.430859, 0.430555",\ + "1.494750, 1.494138, 1.493909, 1.493909, 1.493909",\ + "0.042675, 0.042675, 0.042651, 0.042574, 0.042419",\ + "0.078931, 0.078931, 0.078931, 0.078931, 0.078931",\ + "0.155291, 0.155291, 0.155276, 0.155229, 0.155132",\ + "0.431055, 0.431055, 0.431009, 0.430858, 0.430555",\ + "1.494514, 1.494079, 1.493909, 1.493909, 1.493909"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[6]_redg_2660*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[20]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.327672, 0.566275, 0.848132, 1.348276, 2.348564",\ + "0.368967, 0.607415, 0.888608, 1.386404, 2.381997",\ + "0.444897, 0.683231, 0.964015, 1.460342, 2.452995",\ + "0.700493, 0.938416, 1.218620, 1.714868, 2.707363",\ + "1.624950, 1.862182, 2.144032, 2.639823, 3.631406",\ + "0.415085, 0.653799, 0.935798, 1.434991, 2.434498",\ + "0.456380, 0.694939, 0.976266, 1.473119, 2.467931",\ + "0.532309, 0.770755, 1.051669, 1.547057, 2.538929",\ + "0.787906, 1.025936, 1.306274, 1.801582, 2.793297",\ + "1.712363, 1.949714, 2.231684, 2.726538, 3.717340",\ + "0.495952, 0.742730, 1.023765, 1.522613, 2.521453",\ + "0.537247, 0.783870, 1.064233, 1.560741, 2.554886",\ + "0.613176, 0.859686, 1.139635, 1.634679, 2.625884",\ + "0.868772, 1.114859, 1.394240, 1.889205, 2.880252",\ + "1.793228, 2.038663, 2.319650, 2.814160, 3.804295",\ + "0.553602, 0.808292, 1.087909, 1.586527, 2.584962",\ + "0.594896, 0.849433, 1.128377, 1.624655, 2.618395",\ + "0.670825, 0.925249, 1.203779, 1.698593, 2.689393",\ + "0.926420, 1.180411, 1.458384, 1.953118, 2.943761",\ + "1.850875, 2.104251, 2.383794, 2.878074, 3.867804",\ + "0.871915, 1.171803, 1.440094, 1.936005, 2.930418",\ + "0.913062, 1.212946, 1.480538, 1.974123, 2.963851",\ + "0.988827, 1.288766, 1.555925, 2.048055, 3.034849",\ + "1.244293, 1.543790, 1.810529, 2.302580, 3.289217",\ + "2.167832, 2.468068, 2.735935, 3.227534, 4.213260"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.035017, 0.035017, 0.035948, 0.039191, 0.045676",\ + "0.083549, 0.083549, 0.083882, 0.085042, 0.087361",\ + "0.208718, 0.208718, 0.208873, 0.209414, 0.210496",\ + "0.692609, 0.692819, 0.692927, 0.693071, 0.693361",\ + "2.477031, 2.477031, 2.477147, 2.477551, 2.478359",\ + "0.035017, 0.035017, 0.035958, 0.039191, 0.045676",\ + "0.083549, 0.083549, 0.083886, 0.085042, 0.087361",\ + "0.208718, 0.208718, 0.208875, 0.209414, 0.210496",\ + "0.692609, 0.692819, 0.692927, 0.693071, 0.693361",\ + "2.477031, 2.477031, 2.477149, 2.477551, 2.478359",\ + "0.035017, 0.035017, 0.035958, 0.039191, 0.045676",\ + "0.083549, 0.083549, 0.083886, 0.085042, 0.087361",\ + "0.208718, 0.208718, 0.208875, 0.209414, 0.210496",\ + "0.692610, 0.692820, 0.692927, 0.693071, 0.693361",\ + "2.477031, 2.477031, 2.477149, 2.477551, 2.478359",\ + "0.035017, 0.035017, 0.035959, 0.039191, 0.045676",\ + "0.083549, 0.083549, 0.083886, 0.085042, 0.087361",\ + "0.208718, 0.208718, 0.208875, 0.209414, 0.210496",\ + "0.692612, 0.692821, 0.692927, 0.693071, 0.693361",\ + "2.477031, 2.477031, 2.477149, 2.477551, 2.478359",\ + "0.035017, 0.035017, 0.035992, 0.039204, 0.045676",\ + "0.083549, 0.083549, 0.083898, 0.085047, 0.087361",\ + "0.208718, 0.208718, 0.208880, 0.209416, 0.210496",\ + "0.692710, 0.692838, 0.692928, 0.693072, 0.693361",\ + "2.477031, 2.477031, 2.477153, 2.477553, 2.478359"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.374541, 0.613195, 0.891051, 1.377355, 2.349964",\ + "0.415440, 0.654096, 0.931703, 1.416730, 2.386785",\ + "0.475586, 0.714339, 0.991271, 1.473856, 2.439025",\ + "0.644564, 0.883292, 1.159558, 1.639742, 2.600112",\ + "1.227810, 1.464706, 1.741320, 2.221670, 3.182369",\ + "0.461954, 0.700719, 0.978673, 1.464070, 2.435898",\ + "0.502853, 0.741620, 1.019321, 1.503445, 2.472719",\ + "0.562998, 0.801863, 1.078882, 1.560571, 2.524959",\ + "0.731977, 0.970816, 1.247161, 1.726457, 2.686046",\ + "1.315223, 1.552233, 1.828923, 2.308385, 3.268303",\ + "0.542824, 0.789649, 1.066638, 1.551692, 2.522853",\ + "0.583722, 0.830553, 1.107287, 1.591067, 2.559674",\ + "0.643867, 0.890796, 1.166847, 1.648193, 2.611914",\ + "0.812844, 1.059749, 1.335126, 1.814080, 2.773001",\ + "1.396076, 1.641170, 1.916889, 2.396007, 3.355258",\ + "0.600479, 0.855211, 1.130781, 1.615606, 2.586362",\ + "0.641375, 0.896117, 1.171429, 1.654981, 2.623183",\ + "0.701520, 0.956361, 1.230989, 1.712107, 2.675423",\ + "0.870493, 1.125315, 1.399267, 1.877993, 2.836510",\ + "1.453700, 1.706742, 1.981030, 2.459920, 3.418767",\ + "0.918806, 1.218716, 1.482825, 1.965026, 2.931818",\ + "0.959736, 1.259650, 1.523460, 2.004396, 2.968639",\ + "1.019894, 1.319901, 1.582996, 2.061512, 3.020879",\ + "1.188870, 1.488860, 1.751250, 2.227388, 3.181966",\ + "1.770179, 2.070362, 2.333014, 2.809316, 3.764223"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.042685, 0.042786, 0.042938, 0.042938, 0.042938",\ + "0.078477, 0.079297, 0.079365, 0.079365, 0.079365",\ + "0.155270, 0.155314, 0.155322, 0.155322, 0.155322",\ + "0.431181, 0.431181, 0.431181, 0.431181, 0.431181",\ + "1.494069, 1.494069, 1.494069, 1.494069, 1.494069",\ + "0.042685, 0.042787, 0.042938, 0.042938, 0.042938",\ + "0.078477, 0.079298, 0.079365, 0.079365, 0.079365",\ + "0.155270, 0.155314, 0.155322, 0.155322, 0.155322",\ + "0.431181, 0.431181, 0.431181, 0.431181, 0.431181",\ + "1.494069, 1.494069, 1.494069, 1.494069, 1.494069",\ + "0.042685, 0.042789, 0.042938, 0.042938, 0.042938",\ + "0.078482, 0.079299, 0.079365, 0.079365, 0.079365",\ + "0.155270, 0.155314, 0.155322, 0.155322, 0.155322",\ + "0.431181, 0.431181, 0.431181, 0.431181, 0.431181",\ + "1.494069, 1.494069, 1.494069, 1.494069, 1.494069",\ + "0.042685, 0.042792, 0.042938, 0.042938, 0.042938",\ + "0.078491, 0.079300, 0.079365, 0.079365, 0.079365",\ + "0.155271, 0.155314, 0.155322, 0.155322, 0.155322",\ + "0.431181, 0.431181, 0.431181, 0.431181, 0.431181",\ + "1.494069, 1.494069, 1.494069, 1.494069, 1.494069",\ + "0.042685, 0.042830, 0.042938, 0.042938, 0.042938",\ + "0.078951, 0.079317, 0.079365, 0.079365, 0.079365",\ + "0.155294, 0.155316, 0.155322, 0.155322, 0.155322",\ + "0.431181, 0.431181, 0.431181, 0.431181, 0.431181",\ + "1.494069, 1.494069, 1.494069, 1.494069, 1.494069"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[6]_redg_2717*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[21]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.430110, 0.674363, 0.945987, 1.398684, 2.304079",\ + "0.471359, 0.715604, 0.987211, 1.439891, 2.345252",\ + "0.547252, 0.791500, 1.063102, 1.515754, 2.421058",\ + "0.802426, 1.046828, 1.318547, 1.770909, 2.675633",\ + "1.727400, 1.971804, 2.243712, 2.696691, 3.602648",\ + "0.517512, 0.761931, 1.033499, 1.485397, 2.390012",\ + "0.558762, 0.803171, 1.074723, 1.526605, 2.431185",\ + "0.634655, 0.879067, 1.150614, 1.602467, 2.506991",\ + "0.889829, 1.134397, 1.406058, 1.857622, 2.761567",\ + "1.814803, 2.059373, 2.331226, 2.783404, 3.688582",\ + "0.598336, 0.850913, 1.121461, 1.573018, 2.476967",\ + "0.639585, 0.892153, 1.162685, 1.614225, 2.518140",\ + "0.715478, 0.968049, 1.238575, 1.690088, 2.593946",\ + "0.970652, 1.223382, 1.494019, 1.945243, 2.848522",\ + "1.895626, 2.148358, 2.419187, 2.871025, 3.775537",\ + "0.655998, 0.916548, 1.185597, 1.636931, 2.540476",\ + "0.697247, 0.957788, 1.226822, 1.678138, 2.581649",\ + "0.773140, 1.033684, 1.302712, 1.754000, 2.657455",\ + "1.028314, 1.289021, 1.558156, 2.009156, 2.912031",\ + "1.953288, 2.213997, 2.483324, 2.934937, 3.839046",\ + "0.986976, 1.281046, 1.537295, 1.986203, 2.885932",\ + "1.028225, 1.322284, 1.578519, 2.027411, 2.927105",\ + "1.104119, 1.398180, 1.654409, 2.103273, 3.002912",\ + "1.359298, 1.653568, 1.909851, 2.358427, 3.257487",\ + "2.284269, 2.578546, 2.835025, 3.284211, 4.184502"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.034880, 0.034905, 0.035033, 0.035354, 0.035995",\ + "0.083283, 0.083287, 0.083329, 0.083448, 0.083687",\ + "0.208545, 0.208582, 0.208618, 0.208622, 0.208628",\ + "0.692606, 0.692606, 0.692841, 0.693640, 0.695237",\ + "2.479823, 2.479823, 2.479823, 2.479823, 2.479823",\ + "0.034880, 0.034906, 0.035034, 0.035354, 0.035995",\ + "0.083283, 0.083287, 0.083329, 0.083448, 0.083687",\ + "0.208545, 0.208582, 0.208618, 0.208622, 0.208628",\ + "0.692606, 0.692606, 0.692844, 0.693640, 0.695237",\ + "2.479823, 2.479823, 2.479823, 2.479823, 2.479823",\ + "0.034880, 0.034906, 0.035034, 0.035354, 0.035995",\ + "0.083283, 0.083288, 0.083329, 0.083448, 0.083687",\ + "0.208545, 0.208582, 0.208618, 0.208622, 0.208628",\ + "0.692606, 0.692606, 0.692844, 0.693640, 0.695237",\ + "2.479823, 2.479823, 2.479823, 2.479823, 2.479823",\ + "0.034880, 0.034907, 0.035034, 0.035354, 0.035995",\ + "0.083283, 0.083288, 0.083329, 0.083448, 0.083687",\ + "0.208546, 0.208583, 0.208618, 0.208622, 0.208628",\ + "0.692606, 0.692606, 0.692844, 0.693640, 0.695237",\ + "2.479823, 2.479823, 2.479823, 2.479823, 2.479823",\ + "0.034881, 0.034915, 0.035037, 0.035355, 0.035995",\ + "0.083283, 0.083289, 0.083330, 0.083449, 0.083687",\ + "0.208552, 0.208592, 0.208618, 0.208622, 0.208628",\ + "0.692606, 0.692606, 0.692852, 0.693643, 0.695237",\ + "2.479823, 2.479823, 2.479823, 2.479823, 2.479823"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.476452, 0.720627, 0.992222, 1.445174, 2.351079",\ + "0.517334, 0.761513, 1.033104, 1.486024, 2.391864",\ + "0.577683, 0.821926, 1.093569, 1.546380, 2.452001",\ + "0.746610, 0.990875, 1.262519, 1.715235, 2.620666",\ + "1.329814, 1.574285, 1.846012, 2.298098, 3.202269",\ + "0.563855, 0.808193, 1.079735, 1.531888, 2.437013",\ + "0.604736, 0.849079, 1.120617, 1.572738, 2.477798",\ + "0.665086, 0.909493, 1.181081, 1.633093, 2.537935",\ + "0.834013, 1.078442, 1.350031, 1.801948, 2.706600",\ + "1.417216, 1.661854, 1.933522, 2.384811, 3.288203",\ + "0.644678, 0.897174, 1.167696, 1.619509, 2.523968",\ + "0.685559, 0.938060, 1.208579, 1.660358, 2.564753",\ + "0.745909, 0.998475, 1.269043, 1.720713, 2.624890",\ + "0.914836, 1.167425, 1.437993, 1.889569, 2.793555",\ + "1.498040, 1.750840, 2.021483, 2.472431, 3.375158",\ + "0.702340, 0.962807, 1.231833, 1.683421, 2.587477",\ + "0.743221, 1.003693, 1.272716, 1.724271, 2.628262",\ + "0.803571, 1.064109, 1.333179, 1.784626, 2.688399",\ + "0.972498, 1.233060, 1.502129, 1.953481, 2.857064",\ + "1.555702, 1.816481, 2.085620, 2.536344, 3.438667",\ + "1.033316, 1.327279, 1.583534, 2.032695, 2.932933",\ + "1.074197, 1.368167, 1.624416, 2.073545, 2.973718",\ + "1.134549, 1.428604, 1.684879, 2.133899, 3.033855",\ + "1.303477, 1.597562, 1.853827, 2.302754, 3.202520",\ + "1.886688, 2.181050, 2.437312, 2.885614, 3.784123"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.042687, 0.042687, 0.042669, 0.042608, 0.042485",\ + "0.078970, 0.078970, 0.078967, 0.078960, 0.078944",\ + "0.155296, 0.155296, 0.155281, 0.155232, 0.155132",\ + "0.431084, 0.431084, 0.431042, 0.430897, 0.430607",\ + "1.495395, 1.494888, 1.494241, 1.494241, 1.494241",\ + "0.042687, 0.042687, 0.042669, 0.042608, 0.042485",\ + "0.078970, 0.078970, 0.078967, 0.078960, 0.078944",\ + "0.155296, 0.155296, 0.155281, 0.155232, 0.155132",\ + "0.431084, 0.431084, 0.431041, 0.430897, 0.430607",\ + "1.495395, 1.494883, 1.494241, 1.494241, 1.494241",\ + "0.042687, 0.042687, 0.042669, 0.042608, 0.042485",\ + "0.078970, 0.078970, 0.078967, 0.078960, 0.078944",\ + "0.155296, 0.155296, 0.155281, 0.155232, 0.155132",\ + "0.431084, 0.431084, 0.431041, 0.430897, 0.430607",\ + "1.495394, 1.494874, 1.494241, 1.494241, 1.494241",\ + "0.042687, 0.042687, 0.042669, 0.042608, 0.042485",\ + "0.078970, 0.078970, 0.078967, 0.078960, 0.078944",\ + "0.155296, 0.155296, 0.155281, 0.155232, 0.155132",\ + "0.431084, 0.431084, 0.431041, 0.430897, 0.430607",\ + "1.495394, 1.494860, 1.494241, 1.494241, 1.494241",\ + "0.042687, 0.042687, 0.042668, 0.042607, 0.042485",\ + "0.078970, 0.078970, 0.078967, 0.078960, 0.078944",\ + "0.155296, 0.155296, 0.155280, 0.155231, 0.155132",\ + "0.431084, 0.431084, 0.431040, 0.430896, 0.430607",\ + "1.495370, 1.494698, 1.494241, 1.494241, 1.494241"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[6]_redg*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[25]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.554256, 0.796472, 1.062238, 1.540435, 2.496829",\ + "0.588688, 0.830904, 1.096670, 1.574875, 2.531283",\ + "0.659682, 0.901899, 1.167669, 1.645892, 2.602338",\ + "0.913848, 1.156064, 1.421858, 1.900173, 2.856801",\ + "1.839032, 2.081247, 2.347044, 2.825424, 3.782184",\ + "0.641661, 0.883946, 1.149831, 1.627148, 2.582762",\ + "0.676093, 0.918377, 1.184264, 1.661588, 2.617217",\ + "0.747088, 0.989372, 1.255262, 1.732605, 2.688272",\ + "1.001253, 1.243537, 1.509452, 1.986886, 2.942735",\ + "1.926437, 2.168720, 2.434638, 2.912138, 3.868118",\ + "0.722474, 0.972733, 1.237795, 1.714769, 2.669717",\ + "0.756906, 1.007164, 1.272227, 1.749209, 2.704172",\ + "0.827901, 1.078159, 1.343225, 1.820227, 2.775227",\ + "1.082066, 1.332324, 1.597415, 2.074507, 3.029690",\ + "2.007250, 2.257506, 2.522601, 2.999759, 3.955073",\ + "0.781555, 1.038084, 1.301936, 1.778682, 2.733226",\ + "0.815987, 1.072516, 1.336368, 1.813122, 2.767681",\ + "0.886982, 1.143511, 1.407367, 1.884140, 2.838736",\ + "1.141147, 1.397675, 1.661557, 2.138420, 3.093199",\ + "2.066333, 2.322857, 2.586742, 3.063672, 4.018582",\ + "1.117315, 1.399225, 1.653894, 2.128062, 3.078682",\ + "1.151748, 1.433656, 1.688326, 2.162502, 3.113137",\ + "1.222743, 1.504651, 1.759325, 2.233520, 3.184192",\ + "1.476909, 1.758815, 2.013515, 2.487801, 3.438655",\ + "2.402100, 2.683993, 2.938702, 3.413052, 4.364038"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.034240, 0.034243, 0.034261, 0.034303, 0.034388",\ + "0.083583, 0.083591, 0.083624, 0.083701, 0.083855",\ + "0.208066, 0.208072, 0.208099, 0.208159, 0.208278",\ + "0.693300, 0.693300, 0.693300, 0.693300, 0.693300",\ + "2.470761, 2.470782, 2.471502, 2.473964, 2.478889",\ + "0.034240, 0.034244, 0.034261, 0.034303, 0.034388",\ + "0.083583, 0.083591, 0.083625, 0.083701, 0.083855",\ + "0.208066, 0.208072, 0.208099, 0.208159, 0.208278",\ + "0.693300, 0.693300, 0.693300, 0.693300, 0.693300",\ + "2.470761, 2.470782, 2.471510, 2.473964, 2.478889",\ + "0.034240, 0.034244, 0.034261, 0.034303, 0.034388",\ + "0.083583, 0.083591, 0.083625, 0.083701, 0.083855",\ + "0.208066, 0.208073, 0.208099, 0.208159, 0.208278",\ + "0.693300, 0.693300, 0.693300, 0.693300, 0.693300",\ + "2.470761, 2.470782, 2.471510, 2.473964, 2.478889",\ + "0.034240, 0.034244, 0.034261, 0.034303, 0.034388",\ + "0.083583, 0.083591, 0.083625, 0.083701, 0.083855",\ + "0.208066, 0.208073, 0.208099, 0.208159, 0.208278",\ + "0.693300, 0.693300, 0.693300, 0.693300, 0.693300",\ + "2.470764, 2.470782, 2.471510, 2.473964, 2.478889",\ + "0.034240, 0.034245, 0.034262, 0.034304, 0.034388",\ + "0.083583, 0.083594, 0.083625, 0.083701, 0.083855",\ + "0.208066, 0.208075, 0.208100, 0.208159, 0.208278",\ + "0.693300, 0.693300, 0.693300, 0.693300, 0.693300",\ + "2.470774, 2.470782, 2.471535, 2.473975, 2.478889"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.581292, 0.823509, 1.089276, 1.567480, 2.523887",\ + "0.623589, 0.865805, 1.131530, 1.609589, 2.565706",\ + "0.684151, 0.926368, 1.192030, 1.669873, 2.625559",\ + "0.853082, 1.095299, 1.360884, 1.838464, 2.793625",\ + "1.436333, 1.678550, 1.944122, 2.421657, 3.376727",\ + "0.668697, 0.910982, 1.176870, 1.654194, 2.609821",\ + "0.710994, 0.953278, 1.219123, 1.696303, 2.651640",\ + "0.771556, 1.013841, 1.279622, 1.756587, 2.711493",\ + "0.940487, 1.182772, 1.448475, 1.925178, 2.879559",\ + "1.523738, 1.766023, 2.031713, 2.508370, 3.462660",\ + "0.749510, 0.999769, 1.264833, 1.741815, 2.696776",\ + "0.791807, 1.042065, 1.307087, 1.783924, 2.738595",\ + "0.852369, 1.102628, 1.367586, 1.844208, 2.798448",\ + "1.021300, 1.271559, 1.536439, 2.012799, 2.966514",\ + "1.604551, 1.854810, 2.119677, 2.595992, 3.549615",\ + "0.808591, 1.065121, 1.328974, 1.805728, 2.760285",\ + "0.850888, 1.107417, 1.371228, 1.847837, 2.802104",\ + "0.911450, 1.167980, 1.431727, 1.908121, 2.861957",\ + "1.080381, 1.336911, 1.600580, 2.076712, 3.030023",\ + "1.663632, 1.920162, 2.183818, 2.659904, 3.613124",\ + "1.144351, 1.426262, 1.680932, 2.155108, 3.105741",\ + "1.186648, 1.468558, 1.723184, 2.197216, 3.147560",\ + "1.247211, 1.529121, 1.783681, 2.257499, 3.207412",\ + "1.416141, 1.698051, 1.952531, 2.426090, 3.375479",\ + "1.999392, 2.281302, 2.535769, 3.009282, 3.958580"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.045859, 0.045859, 0.045870, 0.045908, 0.045983",\ + "0.079961, 0.079962, 0.079962, 0.079962, 0.079962",\ + "0.155685, 0.155686, 0.155686, 0.155686, 0.155686",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498064, 1.498064, 1.498064, 1.498064, 1.498064",\ + "0.045859, 0.045859, 0.045870, 0.045908, 0.045983",\ + "0.079961, 0.079962, 0.079962, 0.079962, 0.079962",\ + "0.155685, 0.155686, 0.155686, 0.155686, 0.155686",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498064, 1.498064, 1.498064, 1.498064, 1.498064",\ + "0.045859, 0.045859, 0.045870, 0.045908, 0.045983",\ + "0.079961, 0.079962, 0.079962, 0.079962, 0.079962",\ + "0.155685, 0.155686, 0.155686, 0.155686, 0.155686",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498064, 1.498064, 1.498064, 1.498064, 1.498064",\ + "0.045859, 0.045859, 0.045870, 0.045908, 0.045983",\ + "0.079961, 0.079962, 0.079962, 0.079962, 0.079962",\ + "0.155685, 0.155686, 0.155686, 0.155686, 0.155686",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498064, 1.498064, 1.498064, 1.498064, 1.498064",\ + "0.045859, 0.045859, 0.045871, 0.045908, 0.045983",\ + "0.079962, 0.079962, 0.079962, 0.079962, 0.079962",\ + "0.155685, 0.155686, 0.155686, 0.155686, 0.155686",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498064, 1.498064, 1.498064, 1.498064, 1.498064"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[6]_redg_2473*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[28]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.778393, 1.030571, 1.315131, 1.821345, 2.833774",\ + "0.812784, 1.064961, 1.349521, 1.855736, 2.868164",\ + "0.884026, 1.136204, 1.420765, 1.926979, 2.939408",\ + "1.138193, 1.390371, 1.674931, 2.181146, 3.193574",\ + "2.062764, 2.314940, 2.599499, 3.105713, 4.118140",\ + "0.865806, 1.118101, 1.402816, 1.908060, 2.919708",\ + "0.900196, 1.152491, 1.437207, 1.942451, 2.954098",\ + "0.971439, 1.223734, 1.508450, 2.013694, 3.025342",\ + "1.225605, 1.477901, 1.762616, 2.267860, 3.279508",\ + "2.150177, 2.402470, 2.687184, 3.192428, 4.204074",\ + "0.946677, 1.207046, 1.490783, 1.995683, 3.006663",\ + "0.981067, 1.241436, 1.525173, 2.030073, 3.041053",\ + "1.052310, 1.312679, 1.596416, 2.101316, 3.112297",\ + "1.306477, 1.566845, 1.850583, 2.355483, 3.366463",\ + "2.231048, 2.491415, 2.775151, 3.280050, 4.291029",\ + "1.005325, 1.272628, 1.554929, 2.059596, 3.070172",\ + "1.039716, 1.307018, 1.589319, 2.093987, 3.104562",\ + "1.110958, 1.378261, 1.660562, 2.165230, 3.175806",\ + "1.365125, 1.632428, 1.914729, 2.419396, 3.429972",\ + "2.289696, 2.556998, 2.839297, 3.343963, 4.354538",\ + "1.337288, 1.636376, 1.907175, 2.409100, 3.415628",\ + "1.371678, 1.670766, 1.941566, 2.443490, 3.450018",\ + "1.442921, 1.742009, 2.012809, 2.514733, 3.521262",\ + "1.697088, 1.996176, 2.266975, 2.768899, 3.775428",\ + "2.621658, 2.920745, 3.191543, 3.693467, 4.699994"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.034112, 0.034112, 0.034112, 0.034112, 0.034113",\ + "0.083750, 0.083750, 0.083750, 0.083750, 0.083752",\ + "0.208404, 0.208405, 0.208405, 0.208405, 0.208405",\ + "0.692757, 0.692757, 0.692758, 0.692761, 0.692767",\ + "2.464329, 2.464329, 2.464329, 2.464329, 2.464329",\ + "0.034112, 0.034112, 0.034112, 0.034112, 0.034113",\ + "0.083750, 0.083750, 0.083750, 0.083750, 0.083752",\ + "0.208404, 0.208405, 0.208405, 0.208405, 0.208405",\ + "0.692757, 0.692757, 0.692758, 0.692761, 0.692767",\ + "2.464329, 2.464329, 2.464329, 2.464329, 2.464329",\ + "0.034112, 0.034112, 0.034112, 0.034112, 0.034113",\ + "0.083750, 0.083750, 0.083750, 0.083750, 0.083752",\ + "0.208404, 0.208405, 0.208405, 0.208405, 0.208405",\ + "0.692757, 0.692757, 0.692758, 0.692761, 0.692767",\ + "2.464329, 2.464329, 2.464329, 2.464329, 2.464329",\ + "0.034112, 0.034112, 0.034112, 0.034112, 0.034113",\ + "0.083750, 0.083750, 0.083750, 0.083750, 0.083752",\ + "0.208404, 0.208405, 0.208405, 0.208405, 0.208405",\ + "0.692757, 0.692757, 0.692758, 0.692761, 0.692767",\ + "2.464329, 2.464329, 2.464329, 2.464329, 2.464329",\ + "0.034112, 0.034112, 0.034112, 0.034112, 0.034113",\ + "0.083750, 0.083750, 0.083750, 0.083750, 0.083752",\ + "0.208404, 0.208405, 0.208405, 0.208405, 0.208405",\ + "0.692757, 0.692757, 0.692758, 0.692761, 0.692767",\ + "2.464329, 2.464329, 2.464329, 2.464329, 2.464329"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.810153, 1.062330, 1.346888, 1.853102, 2.865529",\ + "0.851906, 1.104082, 1.388641, 1.894854, 2.907281",\ + "0.911836, 1.164013, 1.448571, 1.954785, 2.967211",\ + "1.079953, 1.332130, 1.616688, 2.122902, 3.135329",\ + "1.661862, 1.914034, 2.198587, 2.704797, 3.717218",\ + "0.897566, 1.149860, 1.434573, 1.939816, 2.951462",\ + "0.939318, 1.191612, 1.476326, 1.981569, 2.993215",\ + "0.999249, 1.251543, 1.536256, 2.041499, 3.053145",\ + "1.167366, 1.419660, 1.704374, 2.209617, 3.221262",\ + "1.749275, 2.001564, 2.286272, 2.791512, 3.803152",\ + "0.978437, 1.238804, 1.522540, 2.027439, 3.038417",\ + "1.020190, 1.280557, 1.564292, 2.069191, 3.080170",\ + "1.080120, 1.340487, 1.624223, 2.129122, 3.140100",\ + "1.248237, 1.508604, 1.792340, 2.297239, 3.308218",\ + "1.830146, 2.090508, 2.374238, 2.879134, 3.890107",\ + "1.037085, 1.304387, 1.586686, 2.091352, 3.101926",\ + "1.078838, 1.346139, 1.628438, 2.133105, 3.143679",\ + "1.138768, 1.406070, 1.688369, 2.193035, 3.203609",\ + "1.306885, 1.574187, 1.856486, 2.361152, 3.371727",\ + "1.888794, 2.156091, 2.438385, 2.943048, 3.953616",\ + "1.369048, 1.668134, 1.938932, 2.440856, 3.447382",\ + "1.410800, 1.709887, 1.980685, 2.482608, 3.489135",\ + "1.470731, 1.769817, 2.040615, 2.542538, 3.549065",\ + "1.638848, 1.937934, 2.208732, 2.710656, 3.717183",\ + "2.220756, 2.519837, 2.790631, 3.292551, 4.299072"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.045877, 0.045878, 0.045878, 0.045878, 0.045878",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494119, 1.494119, 1.494119, 1.494119, 1.494120",\ + "0.045877, 0.045878, 0.045878, 0.045878, 0.045878",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494119, 1.494119, 1.494119, 1.494119, 1.494120",\ + "0.045877, 0.045878, 0.045878, 0.045878, 0.045878",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494119, 1.494119, 1.494119, 1.494119, 1.494120",\ + "0.045877, 0.045878, 0.045878, 0.045878, 0.045878",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494119, 1.494119, 1.494119, 1.494119, 1.494120",\ + "0.045877, 0.045878, 0.045878, 0.045878, 0.045878",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494119, 1.494119, 1.494119, 1.494119, 1.494120"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[6]_redg_2603*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[29]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.769218, 1.013990, 1.288183, 1.753076, 2.682863",\ + "0.803608, 1.048380, 1.322573, 1.787467, 2.717253",\ + "0.874851, 1.119623, 1.393816, 1.858710, 2.788497",\ + "1.129017, 1.373789, 1.647983, 2.112876, 3.042663",\ + "2.053588, 2.298358, 2.572550, 3.037443, 3.967230",\ + "0.856623, 1.101544, 1.375734, 1.839790, 2.768797",\ + "0.891013, 1.135935, 1.410125, 1.874180, 2.803187",\ + "0.962256, 1.207178, 1.481368, 1.945424, 2.874431",\ + "1.216422, 1.461344, 1.735534, 2.199590, 3.128597",\ + "2.140993, 2.385913, 2.660101, 3.124157, 4.053164",\ + "0.937445, 1.190511, 1.463697, 1.927411, 2.855752",\ + "0.971835, 1.224902, 1.498087, 1.961801, 2.890142",\ + "1.043078, 1.296145, 1.569331, 2.033045, 2.961386",\ + "1.297244, 1.550311, 1.823497, 2.287211, 3.215552",\ + "2.221816, 2.474880, 2.748064, 3.211778, 4.140119",\ + "0.995080, 1.256125, 1.527836, 1.991324, 2.919261",\ + "1.029471, 1.290515, 1.562226, 2.025714, 2.953651",\ + "1.100714, 1.361758, 1.633469, 2.096957, 3.024895",\ + "1.354880, 1.615925, 1.887636, 2.351124, 3.279061",\ + "2.279451, 2.540493, 2.812203, 3.275691, 4.203628",\ + "1.324766, 1.620334, 1.879659, 2.340649, 3.264717",\ + "1.359156, 1.654725, 1.914049, 2.375039, 3.299107",\ + "1.430399, 1.725968, 1.985292, 2.446283, 3.370351",\ + "1.684566, 1.980134, 2.239459, 2.700449, 3.624517",\ + "2.609136, 2.904703, 3.164026, 3.625016, 4.549084"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.034112, 0.034112, 0.034112, 0.034112, 0.034113",\ + "0.083750, 0.083750, 0.083750, 0.083751, 0.083752",\ + "0.208404, 0.208405, 0.208405, 0.208405, 0.208405",\ + "0.692757, 0.692757, 0.692758, 0.692762, 0.692768",\ + "2.464326, 2.464326, 2.464326, 2.464326, 2.464326",\ + "0.034112, 0.034112, 0.034112, 0.034112, 0.034113",\ + "0.083750, 0.083750, 0.083750, 0.083751, 0.083752",\ + "0.208404, 0.208405, 0.208405, 0.208405, 0.208405",\ + "0.692757, 0.692757, 0.692758, 0.692762, 0.692768",\ + "2.464326, 2.464326, 2.464326, 2.464326, 2.464326",\ + "0.034112, 0.034112, 0.034112, 0.034112, 0.034113",\ + "0.083750, 0.083750, 0.083750, 0.083751, 0.083752",\ + "0.208404, 0.208405, 0.208405, 0.208405, 0.208405",\ + "0.692757, 0.692757, 0.692758, 0.692762, 0.692768",\ + "2.464326, 2.464326, 2.464326, 2.464326, 2.464326",\ + "0.034112, 0.034112, 0.034112, 0.034112, 0.034113",\ + "0.083750, 0.083750, 0.083750, 0.083751, 0.083752",\ + "0.208404, 0.208405, 0.208405, 0.208405, 0.208405",\ + "0.692757, 0.692757, 0.692758, 0.692762, 0.692768",\ + "2.464326, 2.464326, 2.464326, 2.464326, 2.464326",\ + "0.034112, 0.034112, 0.034112, 0.034112, 0.034113",\ + "0.083750, 0.083750, 0.083750, 0.083751, 0.083752",\ + "0.208404, 0.208405, 0.208405, 0.208405, 0.208405",\ + "0.692757, 0.692757, 0.692758, 0.692762, 0.692768",\ + "2.464326, 2.464326, 2.464326, 2.464326, 2.464326"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.800978, 1.045748, 1.319939, 1.784832, 2.714618",\ + "0.842730, 1.087500, 1.361691, 1.826584, 2.756371",\ + "0.902660, 1.147430, 1.421622, 1.886515, 2.816301",\ + "1.070778, 1.315548, 1.589739, 2.054632, 2.984419",\ + "1.652686, 1.897449, 2.171633, 2.636526, 3.566311",\ + "0.888383, 1.133302, 1.407490, 1.871546, 2.800552",\ + "0.930135, 1.175055, 1.449243, 1.913298, 2.842305",\ + "0.990066, 1.234985, 1.509173, 1.973228, 2.902235",\ + "1.158183, 1.403102, 1.677290, 2.141346, 3.070352",\ + "1.740091, 1.985004, 2.259185, 2.723239, 3.652244",\ + "0.969205, 1.222269, 1.495453, 1.959167, 2.887507",\ + "1.010957, 1.264022, 1.537205, 2.000919, 2.929260",\ + "1.070888, 1.323952, 1.597136, 2.060850, 2.989190",\ + "1.239005, 1.492069, 1.765253, 2.228967, 3.157307",\ + "1.820914, 2.073971, 2.347147, 2.810860, 3.739199",\ + "1.026840, 1.287883, 1.559592, 2.023079, 2.951016",\ + "1.068593, 1.329635, 1.601344, 2.064832, 2.992769",\ + "1.128523, 1.389565, 1.661275, 2.124762, 3.052699",\ + "1.296640, 1.557683, 1.829392, 2.292880, 3.220816",\ + "1.878549, 2.139584, 2.411286, 2.874773, 3.802708",\ + "1.356526, 1.652092, 1.911415, 2.372405, 3.296472",\ + "1.398278, 1.693844, 1.953167, 2.414157, 3.338225",\ + "1.458209, 1.753775, 2.013098, 2.474087, 3.398155",\ + "1.626326, 1.921892, 2.181215, 2.642205, 3.566272",\ + "2.208233, 2.503792, 2.763109, 3.224098, 4.148165"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.045877, 0.045878, 0.045878, 0.045878, 0.045878",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494119, 1.494119, 1.494119, 1.494119, 1.494121",\ + "0.045877, 0.045878, 0.045878, 0.045878, 0.045878",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494119, 1.494119, 1.494119, 1.494119, 1.494121",\ + "0.045877, 0.045878, 0.045878, 0.045878, 0.045878",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494119, 1.494119, 1.494119, 1.494119, 1.494121",\ + "0.045877, 0.045878, 0.045878, 0.045878, 0.045878",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494119, 1.494119, 1.494119, 1.494119, 1.494121",\ + "0.045877, 0.045878, 0.045878, 0.045878, 0.045878",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494119, 1.494119, 1.494119, 1.494119, 1.494121"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[6]_redg_2649*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[32]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.634427, 0.872697, 1.149292, 1.635475, 2.607842",\ + "0.668851, 0.907120, 1.183712, 1.669888, 2.642240",\ + "0.739833, 0.978100, 1.254713, 1.740957, 2.713446",\ + "0.993985, 1.232251, 1.508868, 1.995127, 2.967646",\ + "1.919059, 2.157313, 2.433878, 2.919960, 3.892124",\ + "0.721829, 0.960233, 1.236908, 1.722188, 2.693776",\ + "0.756252, 0.994656, 1.271329, 1.756601, 2.728174",\ + "0.827235, 1.065637, 1.342330, 1.827670, 2.799379",\ + "1.081387, 1.319787, 1.596485, 2.081840, 3.053579",\ + "2.006460, 2.244850, 2.521494, 3.006673, 3.978058",\ + "0.802677, 1.049143, 1.324872, 1.809809, 2.780731",\ + "0.837101, 1.083566, 1.359292, 1.844222, 2.815129",\ + "0.908083, 1.154546, 1.430293, 1.915291, 2.886334",\ + "1.162235, 1.408697, 1.684448, 2.169461, 3.140534",\ + "2.087309, 2.333760, 2.609457, 3.094293, 4.065013",\ + "0.860401, 1.114674, 1.389014, 1.873721, 2.844240",\ + "0.894825, 1.149096, 1.423434, 1.908134, 2.878638",\ + "0.965807, 1.220077, 1.494435, 1.979203, 2.949843",\ + "1.219959, 1.474228, 1.748591, 2.233373, 3.204043",\ + "2.145033, 2.399290, 2.673600, 3.158206, 4.128522",\ + "1.188527, 1.477957, 1.741051, 2.223131, 3.189696",\ + "1.222950, 1.512379, 1.775471, 2.257544, 3.224094",\ + "1.293931, 1.583360, 1.846473, 2.328613, 3.295300",\ + "1.548083, 1.837511, 2.100628, 2.582783, 3.549500",\ + "2.473149, 2.762573, 3.025636, 3.507615, 4.473978"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.034240, 0.034240, 0.034242, 0.034250, 0.034266",\ + "0.083583, 0.083583, 0.083588, 0.083605, 0.083639",\ + "0.208066, 0.208067, 0.208071, 0.208084, 0.208111",\ + "0.693291, 0.693291, 0.693291, 0.693291, 0.693291",\ + "2.470530, 2.470530, 2.470531, 2.470531, 2.470532",\ + "0.034240, 0.034240, 0.034243, 0.034250, 0.034266",\ + "0.083583, 0.083583, 0.083589, 0.083605, 0.083639",\ + "0.208066, 0.208067, 0.208071, 0.208084, 0.208111",\ + "0.693291, 0.693291, 0.693291, 0.693291, 0.693291",\ + "2.470530, 2.470530, 2.470531, 2.470531, 2.470532",\ + "0.034240, 0.034240, 0.034243, 0.034250, 0.034266",\ + "0.083583, 0.083583, 0.083589, 0.083605, 0.083639",\ + "0.208066, 0.208067, 0.208071, 0.208084, 0.208111",\ + "0.693291, 0.693291, 0.693291, 0.693291, 0.693291",\ + "2.470530, 2.470530, 2.470531, 2.470531, 2.470532",\ + "0.034240, 0.034240, 0.034243, 0.034250, 0.034266",\ + "0.083583, 0.083583, 0.083589, 0.083605, 0.083639",\ + "0.208066, 0.208067, 0.208071, 0.208084, 0.208111",\ + "0.693291, 0.693291, 0.693291, 0.693291, 0.693291",\ + "2.470530, 2.470530, 2.470531, 2.470531, 2.470532",\ + "0.034240, 0.034240, 0.034243, 0.034250, 0.034266",\ + "0.083583, 0.083583, 0.083589, 0.083605, 0.083639",\ + "0.208066, 0.208067, 0.208071, 0.208084, 0.208111",\ + "0.693291, 0.693291, 0.693291, 0.693291, 0.693291",\ + "2.470530, 2.470530, 2.470531, 2.470531, 2.470532"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.661467, 0.899737, 1.176348, 1.662586, 2.635063",\ + "0.703763, 0.942033, 1.218582, 1.704611, 2.676670",\ + "0.764325, 1.002595, 1.279082, 1.764899, 2.736534",\ + "0.933255, 1.171525, 1.447944, 1.933534, 2.904712",\ + "1.516509, 1.754779, 2.031088, 2.516304, 3.486737",\ + "0.748868, 0.987273, 1.263965, 1.749299, 2.720997",\ + "0.791164, 1.029569, 1.306198, 1.791324, 2.762603",\ + "0.851727, 1.090131, 1.366697, 1.851612, 2.822468",\ + "1.020657, 1.259062, 1.535559, 2.020247, 2.990646",\ + "1.603910, 1.842315, 2.118701, 2.603017, 3.572671",\ + "0.829717, 1.076183, 1.351928, 1.836920, 2.807952",\ + "0.872012, 1.118479, 1.394161, 1.878945, 2.849558",\ + "0.932575, 1.179041, 1.454660, 1.939233, 2.909423",\ + "1.101505, 1.347972, 1.623522, 2.107867, 3.077601",\ + "1.684759, 1.931225, 2.206665, 2.690638, 3.659626",\ + "0.887441, 1.141714, 1.416070, 1.900832, 2.871461",\ + "0.929737, 1.184009, 1.458303, 1.942857, 2.913067",\ + "0.990299, 1.244572, 1.518803, 2.003145, 2.972932",\ + "1.159229, 1.413502, 1.687665, 2.171780, 3.141110",\ + "1.742483, 1.996755, 2.270807, 2.754550, 3.723135",\ + "1.215567, 1.504997, 1.768108, 2.250242, 3.216917",\ + "1.257862, 1.547292, 1.810339, 2.292266, 3.258523",\ + "1.318425, 1.607855, 1.870836, 2.352553, 3.318388",\ + "1.487355, 1.776785, 2.039696, 2.521187, 3.486566",\ + "2.070609, 2.360038, 2.622834, 3.103956, 4.068591"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.045862, 0.045862, 0.045862, 0.045862, 0.045862",\ + "0.079960, 0.079960, 0.079960, 0.079960, 0.079960",\ + "0.155688, 0.155688, 0.155688, 0.155688, 0.155688",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498067, 1.498067, 1.498067, 1.498067, 1.498067",\ + "0.045862, 0.045862, 0.045862, 0.045862, 0.045862",\ + "0.079960, 0.079960, 0.079960, 0.079960, 0.079960",\ + "0.155688, 0.155688, 0.155688, 0.155688, 0.155688",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498067, 1.498067, 1.498067, 1.498067, 1.498067",\ + "0.045862, 0.045862, 0.045862, 0.045862, 0.045862",\ + "0.079960, 0.079960, 0.079960, 0.079960, 0.079960",\ + "0.155688, 0.155688, 0.155688, 0.155688, 0.155688",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498067, 1.498067, 1.498067, 1.498067, 1.498067",\ + "0.045862, 0.045862, 0.045862, 0.045862, 0.045862",\ + "0.079960, 0.079960, 0.079960, 0.079960, 0.079960",\ + "0.155688, 0.155688, 0.155688, 0.155688, 0.155688",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498067, 1.498067, 1.498067, 1.498067, 1.498067",\ + "0.045862, 0.045862, 0.045862, 0.045862, 0.045862",\ + "0.079960, 0.079960, 0.079960, 0.079960, 0.079960",\ + "0.155688, 0.155688, 0.155688, 0.155688, 0.155688",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498067, 1.498067, 1.498067, 1.498067, 1.498067"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[6]_redg_2302*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[38]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.679396, 0.938967, 1.226201, 1.725937, 2.725407",\ + "0.713789, 0.973360, 1.260594, 1.760331, 2.759802",\ + "0.785026, 1.044598, 1.331832, 1.831566, 2.831035",\ + "1.039193, 1.298764, 1.585998, 2.085732, 3.085201",\ + "1.963796, 2.223368, 2.510604, 3.010348, 4.009837",\ + "0.766804, 1.026534, 1.313864, 1.812651, 2.811341",\ + "0.801197, 1.060927, 1.348257, 1.847045, 2.845736",\ + "0.872434, 1.132165, 1.419494, 1.918280, 2.916969",\ + "1.126601, 1.386331, 1.673661, 2.172447, 3.171135",\ + "2.051204, 2.310935, 2.598267, 3.097062, 4.095771",\ + "0.847692, 1.115543, 1.401829, 1.900272, 2.898296",\ + "0.882085, 1.149936, 1.436222, 1.934666, 2.932691",\ + "0.953322, 1.221174, 1.507460, 2.005902, 3.003924",\ + "1.207489, 1.475340, 1.761626, 2.260068, 3.258090",\ + "2.132092, 2.399944, 2.686232, 3.184684, 4.182726",\ + "0.908548, 1.181219, 1.465974, 1.964185, 2.961805",\ + "0.942941, 1.215612, 1.500367, 1.998580, 2.996200",\ + "1.014178, 1.286850, 1.571604, 2.069815, 3.067433",\ + "1.268345, 1.541016, 1.825771, 2.323982, 3.321599",\ + "2.192948, 2.465620, 2.750377, 3.248597, 4.246235",\ + "1.244710, 1.546113, 1.818152, 2.313658, 3.307261",\ + "1.279103, 1.580506, 1.852545, 2.348052, 3.341656",\ + "1.350341, 1.651744, 1.923782, 2.419287, 3.412889",\ + "1.604507, 1.905910, 2.177949, 2.673453, 3.667055",\ + "2.529111, 2.830513, 3.102555, 3.598069, 4.591691"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.034112, 0.034112, 0.034113, 0.034114, 0.034117",\ + "0.083750, 0.083751, 0.083753, 0.083761, 0.083776",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692760, 0.692762, 0.692776, 0.692813, 0.692889",\ + "2.465102, 2.465102, 2.465169, 2.465398, 2.465856",\ + "0.034112, 0.034112, 0.034113, 0.034114, 0.034117",\ + "0.083750, 0.083751, 0.083753, 0.083761, 0.083776",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692760, 0.692762, 0.692776, 0.692813, 0.692889",\ + "2.465102, 2.465102, 2.465170, 2.465398, 2.465856",\ + "0.034112, 0.034112, 0.034113, 0.034114, 0.034117",\ + "0.083750, 0.083751, 0.083753, 0.083761, 0.083776",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692760, 0.692762, 0.692776, 0.692813, 0.692889",\ + "2.465102, 2.465102, 2.465170, 2.465398, 2.465856",\ + "0.034112, 0.034112, 0.034113, 0.034114, 0.034117",\ + "0.083750, 0.083751, 0.083753, 0.083761, 0.083776",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692760, 0.692762, 0.692776, 0.692813, 0.692889",\ + "2.465102, 2.465102, 2.465170, 2.465398, 2.465856",\ + "0.034112, 0.034112, 0.034113, 0.034114, 0.034117",\ + "0.083750, 0.083751, 0.083754, 0.083761, 0.083776",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692760, 0.692763, 0.692776, 0.692814, 0.692889",\ + "2.465102, 2.465102, 2.465172, 2.465399, 2.465856"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.711192, 0.970763, 1.257999, 1.757746, 2.757238",\ + "0.752943, 1.012514, 1.299751, 1.799497, 2.798988",\ + "0.812873, 1.072445, 1.359681, 1.859427, 2.858919",\ + "0.980990, 1.240561, 1.527798, 2.027544, 3.027034",\ + "1.563015, 1.822585, 2.109830, 2.609611, 3.609173",\ + "0.798600, 1.058330, 1.345662, 1.844460, 2.843172",\ + "0.840351, 1.100081, 1.387414, 1.886211, 2.884922",\ + "0.900282, 1.160012, 1.447344, 1.946141, 2.944853",\ + "1.068398, 1.328128, 1.615461, 2.114258, 3.112968",\ + "1.650424, 1.910152, 2.197493, 2.696325, 3.695107",\ + "0.879488, 1.147339, 1.433627, 1.932081, 2.930127",\ + "0.921239, 1.189090, 1.475379, 1.973832, 2.971877",\ + "0.981170, 1.249021, 1.535309, 2.033763, 3.031808",\ + "1.149286, 1.417137, 1.703426, 2.201879, 3.199923",\ + "1.731312, 1.999161, 2.285458, 2.783947, 3.782062",\ + "0.940344, 1.213015, 1.497772, 1.995995, 2.993636",\ + "0.982095, 1.254766, 1.539524, 2.037745, 3.035386",\ + "1.042026, 1.314697, 1.599454, 2.097676, 3.095317",\ + "1.210142, 1.482813, 1.767570, 2.265792, 3.263432",\ + "1.792167, 2.064837, 2.349603, 2.847860, 3.845571",\ + "1.276506, 1.577909, 1.849950, 2.345467, 3.339092",\ + "1.318258, 1.619660, 1.891702, 2.387218, 3.380842",\ + "1.378188, 1.679591, 1.951632, 2.447148, 3.440773",\ + "1.546304, 1.847707, 2.119749, 2.615264, 3.608888",\ + "2.128330, 2.429730, 2.701782, 3.197332, 4.191027"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.045877, 0.045877, 0.045877, 0.045877, 0.045877",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155804, 0.155804, 0.155804, 0.155804, 0.155804",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494119, 1.494120, 1.494122, 1.494128, 1.494141",\ + "0.045877, 0.045877, 0.045877, 0.045877, 0.045877",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155804, 0.155804, 0.155804, 0.155804, 0.155804",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494119, 1.494120, 1.494122, 1.494128, 1.494141",\ + "0.045877, 0.045877, 0.045877, 0.045877, 0.045877",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155804, 0.155804, 0.155804, 0.155804, 0.155804",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494119, 1.494120, 1.494122, 1.494128, 1.494141",\ + "0.045877, 0.045877, 0.045877, 0.045877, 0.045877",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155804, 0.155804, 0.155804, 0.155804, 0.155804",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494119, 1.494120, 1.494122, 1.494128, 1.494141",\ + "0.045877, 0.045877, 0.045877, 0.045877, 0.045877",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155804, 0.155804, 0.155804, 0.155804, 0.155804",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494119, 1.494120, 1.494122, 1.494128, 1.494141"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[6]_redg_2566*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[39]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.658633, 0.912014, 1.190716, 1.652421, 2.575833",\ + "0.693026, 0.946407, 1.225109, 1.686815, 2.610227",\ + "0.764264, 1.017644, 1.296346, 1.758051, 2.681462",\ + "1.018430, 1.271811, 1.550512, 2.012218, 2.935628",\ + "1.943034, 2.196414, 2.475117, 2.936828, 3.860250",\ + "0.746043, 0.999594, 1.278259, 1.739136, 2.661767",\ + "0.780436, 1.033988, 1.312652, 1.773529, 2.696161",\ + "0.851673, 1.105225, 1.383889, 1.844766, 2.767396",\ + "1.105840, 1.359391, 1.638056, 2.098932, 3.021562",\ + "2.030443, 2.283995, 2.562661, 3.023543, 3.946184",\ + "0.826857, 1.088640, 1.366222, 1.826758, 2.748722",\ + "0.861250, 1.123033, 1.400615, 1.861151, 2.783116",\ + "0.932488, 1.194270, 1.471853, 1.932387, 2.854351",\ + "1.186654, 1.448437, 1.726019, 2.186554, 3.108517",\ + "2.111258, 2.373040, 2.650624, 3.111165, 4.033139",\ + "0.884438, 1.154368, 1.430361, 1.890671, 2.812231",\ + "0.918831, 1.188761, 1.464754, 1.925064, 2.846625",\ + "0.990068, 1.259999, 1.535991, 1.996301, 2.917860",\ + "1.244235, 1.514165, 1.790157, 2.250467, 3.172026",\ + "2.168839, 2.438769, 2.714763, 3.175078, 4.096648",\ + "1.216287, 1.519868, 1.782153, 2.239986, 3.157687",\ + "1.250680, 1.554260, 1.816547, 2.274380, 3.192081",\ + "1.321917, 1.625498, 1.887784, 2.345616, 3.263316",\ + "1.576084, 1.879665, 2.141950, 2.599783, 3.517482",\ + "2.500688, 2.804268, 3.066556, 3.524393, 4.442104"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.034112, 0.034112, 0.034113, 0.034114, 0.034116",\ + "0.083750, 0.083750, 0.083752, 0.083758, 0.083770",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692760, 0.692760, 0.692769, 0.692798, 0.692856",\ + "2.465103, 2.465103, 2.465140, 2.465270, 2.465530",\ + "0.034112, 0.034112, 0.034113, 0.034114, 0.034116",\ + "0.083750, 0.083750, 0.083752, 0.083758, 0.083770",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692760, 0.692760, 0.692770, 0.692798, 0.692856",\ + "2.465103, 2.465103, 2.465141, 2.465270, 2.465530",\ + "0.034112, 0.034112, 0.034113, 0.034114, 0.034116",\ + "0.083750, 0.083750, 0.083752, 0.083758, 0.083770",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692760, 0.692760, 0.692770, 0.692798, 0.692856",\ + "2.465103, 2.465103, 2.465141, 2.465270, 2.465530",\ + "0.034112, 0.034112, 0.034113, 0.034114, 0.034116",\ + "0.083750, 0.083750, 0.083752, 0.083758, 0.083770",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692760, 0.692760, 0.692770, 0.692798, 0.692856",\ + "2.465103, 2.465103, 2.465141, 2.465270, 2.465530",\ + "0.034112, 0.034112, 0.034113, 0.034114, 0.034116",\ + "0.083750, 0.083750, 0.083752, 0.083758, 0.083770",\ + "0.208404, 0.208404, 0.208404, 0.208404, 0.208404",\ + "0.692760, 0.692761, 0.692770, 0.692799, 0.692856",\ + "2.465103, 2.465103, 2.465142, 2.465271, 2.465530"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.690429, 0.943810, 1.222513, 1.684225, 2.607649",\ + "0.732181, 0.985561, 1.264264, 1.725976, 2.649400",\ + "0.792111, 1.045491, 1.324195, 1.785906, 2.709330",\ + "0.960228, 1.213608, 1.492311, 1.954023, 2.877446",\ + "1.542253, 1.795633, 2.074341, 2.536073, 3.459536",\ + "0.777839, 1.031390, 1.310056, 1.770939, 2.693583",\ + "0.819590, 1.073142, 1.351808, 1.812690, 2.735333",\ + "0.879520, 1.133072, 1.411738, 1.872621, 2.795264",\ + "1.047637, 1.301189, 1.579854, 2.040737, 2.963380",\ + "1.629662, 1.883214, 2.161885, 2.622787, 3.545470",\ + "0.858653, 1.120436, 1.398020, 1.858561, 2.780538",\ + "0.900405, 1.162187, 1.439771, 1.900312, 2.822289",\ + "0.960335, 1.222118, 1.499701, 1.960243, 2.882219",\ + "1.128451, 1.390234, 1.667818, 2.128359, 3.050335",\ + "1.710477, 1.972259, 2.249848, 2.710409, 3.632425",\ + "0.916234, 1.186164, 1.462158, 1.922474, 2.844047",\ + "0.957985, 1.227916, 1.503910, 1.964226, 2.885798",\ + "1.017915, 1.287846, 1.563840, 2.024156, 2.945728",\ + "1.186032, 1.455963, 1.731956, 2.192272, 3.113844",\ + "1.768058, 2.037988, 2.313987, 2.774323, 3.695934",\ + "1.248083, 1.551663, 1.813951, 2.271790, 3.189503",\ + "1.289834, 1.593415, 1.855702, 2.313541, 3.231254",\ + "1.349765, 1.653345, 1.915633, 2.373471, 3.291184",\ + "1.517881, 1.821462, 2.083749, 2.541588, 3.459300",\ + "2.099906, 2.403486, 2.665780, 3.123638, 4.041390"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.045877, 0.045876, 0.045874, 0.045865, 0.045847",\ + "0.079914, 0.079914, 0.079913, 0.079913, 0.079912",\ + "0.155804, 0.155804, 0.155802, 0.155795, 0.155781",\ + "0.431307, 0.431307, 0.431306, 0.431305, 0.431302",\ + "1.494119, 1.494119, 1.494121, 1.494126, 1.494135",\ + "0.045877, 0.045876, 0.045874, 0.045865, 0.045847",\ + "0.079914, 0.079914, 0.079913, 0.079913, 0.079912",\ + "0.155804, 0.155804, 0.155802, 0.155795, 0.155781",\ + "0.431307, 0.431307, 0.431306, 0.431305, 0.431302",\ + "1.494119, 1.494119, 1.494121, 1.494126, 1.494135",\ + "0.045877, 0.045876, 0.045874, 0.045865, 0.045847",\ + "0.079914, 0.079914, 0.079913, 0.079913, 0.079912",\ + "0.155804, 0.155804, 0.155802, 0.155795, 0.155781",\ + "0.431307, 0.431307, 0.431306, 0.431305, 0.431302",\ + "1.494119, 1.494119, 1.494121, 1.494126, 1.494135",\ + "0.045877, 0.045876, 0.045874, 0.045865, 0.045847",\ + "0.079914, 0.079914, 0.079913, 0.079913, 0.079912",\ + "0.155804, 0.155804, 0.155802, 0.155795, 0.155781",\ + "0.431307, 0.431307, 0.431306, 0.431305, 0.431302",\ + "1.494119, 1.494119, 1.494121, 1.494126, 1.494135",\ + "0.045877, 0.045876, 0.045874, 0.045865, 0.045847",\ + "0.079914, 0.079914, 0.079913, 0.079913, 0.079912",\ + "0.155804, 0.155804, 0.155802, 0.155795, 0.155781",\ + "0.431307, 0.431307, 0.431306, 0.431305, 0.431302",\ + "1.494119, 1.494119, 1.494121, 1.494126, 1.494135"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[6]_redg_2608*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[41]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.576605, 0.831535, 1.088524, 1.527728, 2.406135",\ + "0.611028, 0.865958, 1.122948, 1.562156, 2.440572",\ + "0.682011, 0.936939, 1.193932, 1.633147, 2.511575",\ + "0.936163, 1.191091, 1.448086, 1.887307, 2.765749",\ + "1.861240, 2.116160, 2.373173, 2.812451, 3.691008",\ + "0.664013, 0.919020, 1.175996, 1.614442, 2.492069",\ + "0.698437, 0.953443, 1.210420, 1.648871, 2.526506",\ + "0.769419, 1.024424, 1.281404, 1.719861, 2.597509",\ + "1.023571, 1.278576, 1.535558, 1.974021, 2.851683",\ + "1.948648, 2.203645, 2.460645, 2.899166, 3.776942",\ + "0.751657, 1.007845, 1.263958, 1.702063, 2.579024",\ + "0.786080, 1.042268, 1.298382, 1.736492, 2.613461",\ + "0.857063, 1.113249, 1.369366, 1.807482, 2.684464",\ + "1.111215, 1.367401, 1.623520, 2.061643, 2.938638",\ + "2.036291, 2.292470, 2.548607, 2.986787, 3.863897",\ + "0.814841, 1.073252, 1.328092, 1.765976, 2.642533",\ + "0.849265, 1.107675, 1.362517, 1.800405, 2.676970",\ + "0.920247, 1.178657, 1.433500, 1.871395, 2.747973",\ + "1.174399, 1.432808, 1.687654, 2.125556, 3.002147",\ + "2.099474, 2.357878, 2.612742, 3.050700, 3.927406",\ + "1.148308, 1.435007, 1.679656, 2.115198, 2.987988",\ + "1.182731, 1.469430, 1.714081, 2.149627, 3.022426",\ + "1.253713, 1.540412, 1.785064, 2.220617, 3.093429",\ + "1.507865, 1.794564, 2.039218, 2.474777, 3.347603",\ + "2.432936, 2.719633, 2.964306, 3.399922, 4.272861"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.034240, 0.034240, 0.034246, 0.034266, 0.034306",\ + "0.083583, 0.083583, 0.083596, 0.083639, 0.083725",\ + "0.208066, 0.208066, 0.208076, 0.208111, 0.208180",\ + "0.693294, 0.693296, 0.693300, 0.693300, 0.693300",\ + "2.470544, 2.470544, 2.470714, 2.471298, 2.472467",\ + "0.034240, 0.034240, 0.034246, 0.034266, 0.034306",\ + "0.083583, 0.083583, 0.083596, 0.083639, 0.083725",\ + "0.208066, 0.208066, 0.208077, 0.208111, 0.208180",\ + "0.693294, 0.693296, 0.693300, 0.693300, 0.693300",\ + "2.470544, 2.470544, 2.470715, 2.471298, 2.472467",\ + "0.034240, 0.034240, 0.034246, 0.034266, 0.034306",\ + "0.083583, 0.083583, 0.083596, 0.083639, 0.083725",\ + "0.208066, 0.208066, 0.208077, 0.208111, 0.208180",\ + "0.693294, 0.693296, 0.693300, 0.693300, 0.693300",\ + "2.470544, 2.470544, 2.470716, 2.471298, 2.472467",\ + "0.034240, 0.034240, 0.034246, 0.034266, 0.034306",\ + "0.083583, 0.083583, 0.083596, 0.083639, 0.083725",\ + "0.208066, 0.208066, 0.208077, 0.208111, 0.208180",\ + "0.693294, 0.693296, 0.693300, 0.693300, 0.693300",\ + "2.470544, 2.470544, 2.470716, 2.471298, 2.472467",\ + "0.034240, 0.034240, 0.034246, 0.034266, 0.034306",\ + "0.083583, 0.083583, 0.083596, 0.083639, 0.083725",\ + "0.208066, 0.208066, 0.208077, 0.208111, 0.208180",\ + "0.693294, 0.693297, 0.693300, 0.693300, 0.693300",\ + "2.470544, 2.470544, 2.470721, 2.471301, 2.472467"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.603644, 0.858574, 1.115563, 1.554765, 2.433169",\ + "0.645940, 0.900870, 1.157859, 1.597061, 2.475466",\ + "0.706502, 0.961433, 1.218421, 1.657624, 2.536028",\ + "0.875433, 1.130363, 1.387352, 1.826554, 2.704960",\ + "1.458686, 1.713616, 1.970605, 2.409806, 3.288209",\ + "0.691052, 0.946059, 1.203035, 1.641479, 2.519103",\ + "0.733348, 0.988355, 1.245331, 1.683775, 2.561400",\ + "0.793911, 1.048918, 1.305893, 1.744338, 2.621962",\ + "0.962841, 1.217848, 1.474824, 1.913269, 2.790894",\ + "1.546094, 1.801101, 2.058077, 2.496521, 3.374143",\ + "0.778696, 1.034884, 1.290997, 1.729101, 2.606058",\ + "0.820992, 1.077180, 1.333292, 1.771397, 2.648355",\ + "0.881555, 1.137743, 1.393855, 1.831960, 2.708917",\ + "1.050485, 1.306673, 1.562785, 2.000890, 2.877849",\ + "1.633738, 1.889926, 2.146038, 2.584142, 3.461098",\ + "0.841881, 1.100292, 1.355131, 1.793014, 2.669567",\ + "0.884176, 1.142587, 1.397427, 1.835310, 2.711864",\ + "0.944739, 1.203150, 1.457990, 1.895873, 2.772426",\ + "1.113669, 1.372080, 1.626920, 2.064803, 2.941358",\ + "1.696922, 1.955333, 2.210173, 2.648055, 3.524607",\ + "1.175348, 1.462047, 1.706695, 2.142236, 3.015023",\ + "1.217643, 1.504343, 1.748991, 2.184532, 3.057320",\ + "1.278206, 1.564905, 1.809554, 2.245094, 3.117882",\ + "1.447136, 1.733835, 1.978484, 2.414025, 3.286813",\ + "2.030389, 2.317089, 2.561737, 2.997277, 3.870063"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.045862, 0.045862, 0.045861, 0.045860, 0.045856",\ + "0.079962, 0.079962, 0.079962, 0.079962, 0.079962",\ + "0.155688, 0.155688, 0.155687, 0.155686, 0.155684",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498067, 1.498067, 1.498066, 1.498065, 1.498061",\ + "0.045862, 0.045862, 0.045861, 0.045860, 0.045856",\ + "0.079962, 0.079962, 0.079962, 0.079962, 0.079962",\ + "0.155688, 0.155688, 0.155687, 0.155686, 0.155684",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498067, 1.498067, 1.498066, 1.498065, 1.498061",\ + "0.045862, 0.045862, 0.045861, 0.045860, 0.045856",\ + "0.079962, 0.079962, 0.079962, 0.079962, 0.079962",\ + "0.155688, 0.155688, 0.155687, 0.155686, 0.155684",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498067, 1.498067, 1.498066, 1.498065, 1.498061",\ + "0.045862, 0.045862, 0.045861, 0.045860, 0.045856",\ + "0.079962, 0.079962, 0.079962, 0.079962, 0.079962",\ + "0.155688, 0.155688, 0.155687, 0.155686, 0.155684",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498067, 1.498067, 1.498066, 1.498065, 1.498061",\ + "0.045862, 0.045862, 0.045861, 0.045860, 0.045856",\ + "0.079962, 0.079962, 0.079962, 0.079962, 0.079962",\ + "0.155688, 0.155688, 0.155687, 0.155686, 0.155684",\ + "0.431271, 0.431271, 0.431271, 0.431271, 0.431271",\ + "1.498067, 1.498067, 1.498066, 1.498065, 1.498061"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[6]_redg_2536*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[46]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.746778, 1.007936, 1.300121, 1.808548, 2.825403",\ + "0.781168, 1.042326, 1.334511, 1.842939, 2.859794",\ + "0.852412, 1.113570, 1.405754, 1.914182, 2.931037",\ + "1.106578, 1.367736, 1.659921, 2.168348, 3.185203",\ + "2.031144, 2.292302, 2.584487, 3.092916, 4.109773",\ + "0.834191, 1.095510, 1.387813, 1.895263, 2.911337",\ + "0.868581, 1.129900, 1.422203, 1.929654, 2.945728",\ + "0.939824, 1.201144, 1.493447, 2.000897, 3.016971",\ + "1.193991, 1.455310, 1.747613, 2.255063, 3.271137",\ + "2.118557, 2.379876, 2.672179, 3.179631, 4.195706",\ + "0.915090, 1.184556, 1.475780, 1.982886, 2.998292",\ + "0.949480, 1.218946, 1.510170, 2.017276, 3.032683",\ + "1.020724, 1.290190, 1.581414, 2.088519, 3.103926",\ + "1.274890, 1.544356, 1.835580, 2.342686, 3.358092",\ + "2.199456, 2.468922, 2.760146, 3.267253, 4.282661",\ + "0.974724, 1.250286, 1.539926, 2.046799, 3.061801",\ + "1.009114, 1.284676, 1.574316, 2.081189, 3.096192",\ + "1.080358, 1.355919, 1.645560, 2.152433, 3.167435",\ + "1.334524, 1.610085, 1.899726, 2.406599, 3.421601",\ + "2.259090, 2.534652, 2.824292, 3.331166, 4.346170",\ + "1.308449, 1.615752, 1.892195, 2.396312, 3.407257",\ + "1.342839, 1.650142, 1.926585, 2.430702, 3.441648",\ + "1.414083, 1.721386, 1.997829, 2.501945, 3.512891",\ + "1.668249, 1.975552, 2.251995, 2.756112, 3.767057",\ + "2.592815, 2.900118, 3.176561, 3.680679, 4.691627"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.034112, 0.034112, 0.034112, 0.034112, 0.034112",\ + "0.083749, 0.083749, 0.083749, 0.083750, 0.083750",\ + "0.208405, 0.208405, 0.208405, 0.208405, 0.208405",\ + "0.692756, 0.692756, 0.692756, 0.692758, 0.692761",\ + "2.464216, 2.464216, 2.464222, 2.464247, 2.464295",\ + "0.034112, 0.034112, 0.034112, 0.034112, 0.034112",\ + "0.083749, 0.083749, 0.083749, 0.083750, 0.083750",\ + "0.208405, 0.208405, 0.208405, 0.208405, 0.208405",\ + "0.692756, 0.692756, 0.692756, 0.692758, 0.692761",\ + "2.464216, 2.464216, 2.464222, 2.464247, 2.464295",\ + "0.034112, 0.034112, 0.034112, 0.034112, 0.034112",\ + "0.083749, 0.083749, 0.083749, 0.083750, 0.083750",\ + "0.208405, 0.208405, 0.208405, 0.208405, 0.208405",\ + "0.692756, 0.692756, 0.692756, 0.692758, 0.692761",\ + "2.464216, 2.464216, 2.464222, 2.464247, 2.464295",\ + "0.034112, 0.034112, 0.034112, 0.034112, 0.034112",\ + "0.083749, 0.083749, 0.083749, 0.083750, 0.083750",\ + "0.208405, 0.208405, 0.208405, 0.208405, 0.208405",\ + "0.692756, 0.692756, 0.692756, 0.692758, 0.692761",\ + "2.464216, 2.464216, 2.464222, 2.464247, 2.464295",\ + "0.034112, 0.034112, 0.034112, 0.034112, 0.034112",\ + "0.083749, 0.083749, 0.083749, 0.083750, 0.083750",\ + "0.208405, 0.208405, 0.208405, 0.208405, 0.208405",\ + "0.692756, 0.692756, 0.692756, 0.692758, 0.692761",\ + "2.464216, 2.464216, 2.464223, 2.464247, 2.464295"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.778533, 1.039691, 1.331875, 1.840304, 2.857162",\ + "0.820286, 1.081443, 1.373628, 1.882057, 2.898914",\ + "0.880216, 1.141374, 1.433558, 1.941987, 2.958845",\ + "1.048333, 1.309491, 1.601676, 2.110105, 3.126962",\ + "1.630225, 1.891381, 2.183566, 2.692000, 3.708866",\ + "0.865946, 1.127265, 1.419568, 1.927019, 2.943096",\ + "0.907698, 1.169017, 1.461320, 1.968772, 2.984848",\ + "0.967629, 1.228948, 1.521251, 2.028702, 3.044779",\ + "1.135746, 1.397065, 1.689368, 2.196820, 3.212896",\ + "1.717638, 1.978955, 2.271259, 2.778715, 3.794800",\ + "0.946845, 1.216310, 1.507534, 2.014642, 3.030051",\ + "0.988598, 1.258063, 1.549287, 2.056394, 3.071803",\ + "1.048528, 1.317993, 1.609217, 2.116324, 3.131734",\ + "1.216645, 1.486111, 1.777335, 2.284442, 3.299851",\ + "1.798537, 2.068001, 2.359225, 2.866337, 3.881755",\ + "1.006479, 1.282040, 1.571681, 2.078555, 3.093560",\ + "1.048231, 1.323793, 1.613433, 2.120307, 3.135312",\ + "1.108162, 1.383723, 1.673364, 2.180238, 3.195243",\ + "1.276279, 1.551840, 1.841481, 2.348355, 3.363360",\ + "1.858171, 2.133730, 2.423372, 2.930250, 3.945264",\ + "1.340204, 1.647506, 1.923949, 2.428067, 3.439016",\ + "1.381956, 1.689259, 1.965702, 2.469820, 3.480768",\ + "1.441887, 1.749189, 2.025632, 2.529750, 3.540699",\ + "1.610004, 1.917307, 2.193750, 2.697868, 3.708816",\ + "2.191895, 2.499197, 2.775640, 3.279763, 4.290720"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.045878, 0.045878, 0.045878, 0.045878, 0.045878",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494118, 1.494118, 1.494119, 1.494119, 1.494119",\ + "0.045878, 0.045878, 0.045878, 0.045878, 0.045878",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494118, 1.494118, 1.494119, 1.494119, 1.494119",\ + "0.045878, 0.045878, 0.045878, 0.045878, 0.045878",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494118, 1.494118, 1.494119, 1.494119, 1.494119",\ + "0.045878, 0.045878, 0.045878, 0.045878, 0.045878",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494118, 1.494118, 1.494119, 1.494119, 1.494119",\ + "0.045878, 0.045878, 0.045878, 0.045878, 0.045878",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494118, 1.494118, 1.494119, 1.494119, 1.494119"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[6]_redg_2630*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[47]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.730000, 0.984087, 1.265833, 1.734427, 2.671616",\ + "0.764390, 1.018477, 1.300223, 1.768817, 2.706006",\ + "0.835634, 1.089720, 1.371467, 1.840061, 2.777249",\ + "1.089800, 1.343887, 1.625633, 2.094227, 3.031415",\ + "2.014367, 2.268453, 2.550199, 3.018794, 3.955984",\ + "0.817406, 1.071683, 1.353396, 1.821141, 2.757549",\ + "0.851796, 1.106073, 1.387787, 1.855531, 2.791939",\ + "0.923039, 1.177317, 1.459030, 1.926775, 2.863183",\ + "1.177206, 1.431483, 1.713197, 2.180941, 3.117349",\ + "2.101773, 2.356050, 2.637762, 3.105508, 4.041918",\ + "0.898242, 1.160744, 1.441359, 1.908762, 2.844504",\ + "0.932632, 1.195135, 1.475749, 1.943152, 2.878895",\ + "1.003876, 1.266378, 1.546993, 2.014396, 2.950138",\ + "1.258042, 1.520545, 1.801159, 2.268562, 3.204304",\ + "2.182609, 2.445111, 2.725725, 3.193129, 4.128873",\ + "0.955902, 1.226495, 1.505499, 1.972675, 2.908013",\ + "0.990292, 1.260885, 1.539889, 2.007065, 2.942404",\ + "1.061535, 1.332129, 1.611133, 2.078309, 3.013647",\ + "1.315702, 1.586295, 1.865299, 2.332475, 3.267813",\ + "2.240268, 2.510862, 2.789865, 3.257042, 4.192382",\ + "1.290536, 1.592309, 1.857360, 2.322016, 3.253469",\ + "1.324926, 1.626699, 1.891750, 2.356406, 3.287859",\ + "1.396169, 1.697943, 1.962993, 2.427649, 3.359103",\ + "1.650336, 1.952109, 2.217160, 2.681816, 3.613269",\ + "2.574903, 2.876675, 3.141726, 3.606383, 4.537838"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.034112, 0.034112, 0.034112, 0.034112, 0.034112",\ + "0.083749, 0.083749, 0.083749, 0.083750, 0.083750",\ + "0.208405, 0.208405, 0.208405, 0.208405, 0.208405",\ + "0.692756, 0.692756, 0.692756, 0.692757, 0.692760",\ + "2.464221, 2.464222, 2.464226, 2.464241, 2.464270",\ + "0.034112, 0.034112, 0.034112, 0.034112, 0.034112",\ + "0.083749, 0.083749, 0.083749, 0.083750, 0.083750",\ + "0.208405, 0.208405, 0.208405, 0.208405, 0.208405",\ + "0.692756, 0.692756, 0.692756, 0.692757, 0.692760",\ + "2.464221, 2.464222, 2.464226, 2.464241, 2.464270",\ + "0.034112, 0.034112, 0.034112, 0.034112, 0.034112",\ + "0.083749, 0.083749, 0.083749, 0.083750, 0.083750",\ + "0.208405, 0.208405, 0.208405, 0.208405, 0.208405",\ + "0.692756, 0.692756, 0.692756, 0.692757, 0.692760",\ + "2.464221, 2.464222, 2.464226, 2.464241, 2.464270",\ + "0.034112, 0.034112, 0.034112, 0.034112, 0.034112",\ + "0.083749, 0.083749, 0.083749, 0.083750, 0.083750",\ + "0.208405, 0.208405, 0.208405, 0.208405, 0.208405",\ + "0.692756, 0.692756, 0.692756, 0.692757, 0.692760",\ + "2.464221, 2.464222, 2.464226, 2.464241, 2.464270",\ + "0.034112, 0.034112, 0.034112, 0.034112, 0.034112",\ + "0.083749, 0.083749, 0.083749, 0.083750, 0.083750",\ + "0.208405, 0.208405, 0.208405, 0.208405, 0.208405",\ + "0.692756, 0.692756, 0.692756, 0.692757, 0.692760",\ + "2.464221, 2.464222, 2.464226, 2.464241, 2.464270"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.761755, 1.015841, 1.297587, 1.766182, 2.703373",\ + "0.803508, 1.057594, 1.339340, 1.807935, 2.745125",\ + "0.863438, 1.117525, 1.399270, 1.867865, 2.805056",\ + "1.031556, 1.285642, 1.567388, 2.035983, 2.973173",\ + "1.613449, 1.867533, 2.149277, 2.617876, 3.555073",\ + "0.849161, 1.103438, 1.385151, 1.852896, 2.789307",\ + "0.890914, 1.145190, 1.426903, 1.894649, 2.831059",\ + "0.950844, 1.205121, 1.486834, 1.954579, 2.890990",\ + "1.118961, 1.373238, 1.654951, 2.122696, 3.059107",\ + "1.700854, 1.955129, 2.236841, 2.704590, 3.641007",\ + "0.929998, 1.192499, 1.473114, 1.940517, 2.876262",\ + "0.971750, 1.234252, 1.514866, 1.982270, 2.918014",\ + "1.031680, 1.294182, 1.574797, 2.042201, 2.977945",\ + "1.199798, 1.462299, 1.742914, 2.210318, 3.146062",\ + "1.781691, 2.044191, 2.324804, 2.792211, 3.727962",\ + "0.987657, 1.258250, 1.537253, 2.004430, 2.939771",\ + "1.029410, 1.300003, 1.579006, 2.046183, 2.981523",\ + "1.089340, 1.359933, 1.638936, 2.106113, 3.041454",\ + "1.257457, 1.528050, 1.807054, 2.274230, 3.209571",\ + "1.839350, 2.109941, 2.388943, 2.856124, 3.791471",\ + "1.322291, 1.624063, 1.889114, 2.353771, 3.285227",\ + "1.364043, 1.665816, 1.930866, 2.395524, 3.326979",\ + "1.423974, 1.725746, 1.990797, 2.455454, 3.386910",\ + "1.592091, 1.893864, 2.158914, 2.623571, 3.555027",\ + "2.173984, 2.475754, 2.740804, 3.205465, 4.136927"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.045878, 0.045878, 0.045878, 0.045878, 0.045878",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494118, 1.494118, 1.494119, 1.494119, 1.494119",\ + "0.045878, 0.045878, 0.045878, 0.045878, 0.045878",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494118, 1.494118, 1.494119, 1.494119, 1.494119",\ + "0.045878, 0.045878, 0.045878, 0.045878, 0.045878",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494118, 1.494118, 1.494119, 1.494119, 1.494119",\ + "0.045878, 0.045878, 0.045878, 0.045878, 0.045878",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494118, 1.494118, 1.494119, 1.494119, 1.494119",\ + "0.045878, 0.045878, 0.045878, 0.045878, 0.045878",\ + "0.079914, 0.079914, 0.079914, 0.079914, 0.079914",\ + "0.155805, 0.155805, 0.155805, 0.155805, 0.155805",\ + "0.431307, 0.431307, 0.431307, 0.431307, 0.431307",\ + "1.494118, 1.494118, 1.494119, 1.494119, 1.494119"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[6]_redg_2588*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[16]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.408137, 0.641492, 0.827125, 1.126915, 1.707802",\ + "0.449833, 0.683188, 0.868821, 1.168611, 1.749498",\ + "0.526013, 0.759368, 0.945001, 1.244791, 1.825678",\ + "0.781403, 1.014758, 1.200392, 1.500182, 2.081068",\ + "1.705853, 1.939205, 2.124836, 2.424627, 3.005518",\ + "0.496543, 0.728810, 0.914406, 1.214220, 1.795155",\ + "0.538239, 0.770506, 0.956102, 1.255916, 1.836851",\ + "0.614419, 0.846686, 1.032282, 1.332096, 1.913031",\ + "0.869809, 1.102077, 1.287673, 1.587487, 2.168421",\ + "1.794258, 2.026523, 2.212117, 2.511932, 3.092872",\ + "0.585620, 0.809145, 0.994433, 1.294249, 1.875187",\ + "0.627316, 0.850841, 1.036129, 1.335945, 1.916883",\ + "0.703496, 0.927021, 1.112309, 1.412125, 1.993063",\ + "0.958887, 1.182412, 1.367700, 1.667515, 2.248453",\ + "1.883336, 2.106858, 2.292144, 2.591961, 3.172904",\ + "0.648884, 0.866977, 1.052144, 1.351703, 1.932250",\ + "0.690580, 0.908672, 1.093840, 1.393399, 1.973946",\ + "0.766760, 0.984852, 1.170020, 1.469579, 2.050126",\ + "1.022151, 1.240243, 1.425410, 1.724970, 2.305516",\ + "1.946599, 2.164690, 2.349855, 2.649415, 3.229967",\ + "0.982874, 1.172308, 1.355803, 1.654896, 2.234530",\ + "1.024570, 1.214004, 1.397499, 1.696592, 2.276226",\ + "1.100750, 1.290184, 1.473679, 1.772772, 2.352406",\ + "1.356140, 1.545574, 1.729069, 2.028162, 2.607796",\ + "2.280588, 2.470021, 2.653514, 2.952608, 3.532247"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070075, 0.070075, 0.070075, 0.070075, 0.070076",\ + "0.199411, 0.199411, 0.199411, 0.199411, 0.199413",\ + "0.685859, 0.685859, 0.685859, 0.685862, 0.685867",\ + "2.455194, 2.455194, 2.455194, 2.455194, 2.455194",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070075, 0.070075, 0.070075, 0.070075, 0.070076",\ + "0.199411, 0.199411, 0.199411, 0.199411, 0.199413",\ + "0.685859, 0.685859, 0.685859, 0.685862, 0.685867",\ + "2.455194, 2.455194, 2.455194, 2.455194, 2.455194",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070075, 0.070075, 0.070075, 0.070075, 0.070076",\ + "0.199411, 0.199411, 0.199411, 0.199411, 0.199413",\ + "0.685859, 0.685859, 0.685859, 0.685862, 0.685867",\ + "2.455194, 2.455194, 2.455194, 2.455194, 2.455194",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070075, 0.070075, 0.070075, 0.070075, 0.070076",\ + "0.199411, 0.199411, 0.199411, 0.199411, 0.199413",\ + "0.685859, 0.685859, 0.685859, 0.685862, 0.685867",\ + "2.455194, 2.455194, 2.455194, 2.455194, 2.455194",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070075, 0.070075, 0.070075, 0.070075, 0.070076",\ + "0.199411, 0.199411, 0.199411, 0.199411, 0.199413",\ + "0.685859, 0.685859, 0.685859, 0.685862, 0.685867",\ + "2.455194, 2.455194, 2.455194, 2.455194, 2.455194"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.428385, 0.661739, 0.847373, 1.147163, 1.728050",\ + "0.460631, 0.693986, 0.879619, 1.179409, 1.760296",\ + "0.510947, 0.744302, 0.929935, 1.229725, 1.810612",\ + "0.671611, 0.904965, 1.090599, 1.390389, 1.971276",\ + "1.252728, 1.486083, 1.671717, 1.971507, 2.552392",\ + "0.516791, 0.749058, 0.934654, 1.234468, 1.815403",\ + "0.549037, 0.781304, 0.966900, 1.266714, 1.847649",\ + "0.599353, 0.831620, 1.017216, 1.317030, 1.897965",\ + "0.760017, 0.992284, 1.177880, 1.477694, 2.058629",\ + "1.341134, 1.573402, 1.758998, 2.058812, 2.639746",\ + "0.605868, 0.829393, 1.014680, 1.314497, 1.895434",\ + "0.638114, 0.861639, 1.046927, 1.346743, 1.927681",\ + "0.688430, 0.911955, 1.097243, 1.397059, 1.977997",\ + "0.849094, 1.072619, 1.257906, 1.557723, 2.138661",\ + "1.430211, 1.653737, 1.839025, 2.138841, 2.719778",\ + "0.669132, 0.887224, 1.072391, 1.371951, 1.952498",\ + "0.701378, 0.919471, 1.104638, 1.404197, 1.984744",\ + "0.751694, 0.969786, 1.154953, 1.454513, 2.035060",\ + "0.912358, 1.130450, 1.315617, 1.615177, 2.195724",\ + "1.493475, 1.711568, 1.896736, 2.196295, 2.776841",\ + "1.003122, 1.192555, 1.376050, 1.675143, 2.254777",\ + "1.035368, 1.224802, 1.408297, 1.707390, 2.287024",\ + "1.085684, 1.275118, 1.458613, 1.757706, 2.337340",\ + "1.246348, 1.435782, 1.619277, 1.918369, 2.498003",\ + "1.827465, 2.016899, 2.200395, 2.499487, 3.079121"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.029703, 0.029703, 0.029703, 0.029704, 0.029704",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131485, 0.131485, 0.131485, 0.131485, 0.131485",\ + "0.419470, 0.419470, 0.419470, 0.419470, 0.419470",\ + "1.483040, 1.483040, 1.483040, 1.483042, 1.483046",\ + "0.029703, 0.029703, 0.029703, 0.029704, 0.029704",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131485, 0.131485, 0.131485, 0.131485, 0.131485",\ + "0.419470, 0.419470, 0.419470, 0.419470, 0.419470",\ + "1.483040, 1.483040, 1.483040, 1.483042, 1.483046",\ + "0.029703, 0.029703, 0.029703, 0.029704, 0.029704",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131485, 0.131485, 0.131485, 0.131485, 0.131485",\ + "0.419470, 0.419470, 0.419470, 0.419470, 0.419470",\ + "1.483040, 1.483040, 1.483040, 1.483042, 1.483046",\ + "0.029703, 0.029703, 0.029703, 0.029704, 0.029704",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131485, 0.131485, 0.131485, 0.131485, 0.131485",\ + "0.419470, 0.419470, 0.419470, 0.419470, 0.419470",\ + "1.483040, 1.483040, 1.483040, 1.483042, 1.483046",\ + "0.029703, 0.029703, 0.029703, 0.029704, 0.029704",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131485, 0.131485, 0.131485, 0.131485, 0.131485",\ + "0.419470, 0.419470, 0.419470, 0.419470, 0.419470",\ + "1.483040, 1.483040, 1.483040, 1.483042, 1.483047"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[6]_redg_min_2478*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[17]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.516812, 0.720433, 0.930283, 1.259401, 1.891051",\ + "0.558535, 0.762156, 0.972006, 1.301124, 1.932775",\ + "0.634601, 0.838222, 1.048072, 1.377190, 2.008840",\ + "0.890090, 1.093710, 1.303558, 1.632676, 2.264330",\ + "1.814399, 2.018020, 2.227869, 2.556987, 3.188638",\ + "0.605540, 0.807752, 1.017564, 1.346706, 1.978405",\ + "0.647263, 0.849475, 1.059287, 1.388429, 2.020128",\ + "0.723329, 0.925541, 1.135353, 1.464495, 2.096194",\ + "0.978818, 1.181028, 1.390838, 1.719981, 2.351683",\ + "1.903127, 2.105338, 2.315150, 2.644292, 3.275992",\ + "0.695187, 0.888089, 1.097591, 1.426734, 2.058436",\ + "0.736910, 0.929812, 1.139314, 1.468457, 2.100160",\ + "0.812976, 1.005878, 1.215380, 1.544523, 2.176225",\ + "1.068465, 1.261366, 1.470865, 1.800010, 2.431715",\ + "1.992774, 2.185676, 2.395177, 2.724321, 3.356023",\ + "0.755223, 0.945959, 1.155358, 1.484250, 2.115621",\ + "0.796946, 0.987682, 1.197081, 1.525973, 2.157344",\ + "0.873011, 1.063748, 1.273147, 1.602039, 2.233410",\ + "1.128500, 1.319236, 1.528632, 1.857525, 2.488900",\ + "2.052809, 2.243546, 2.452944, 2.781836, 3.413208",\ + "1.058034, 1.251576, 1.459026, 1.787495, 2.418047",\ + "1.099757, 1.293299, 1.500749, 1.829218, 2.459770",\ + "1.175823, 1.369365, 1.576815, 1.905284, 2.535836",\ + "1.431312, 1.624853, 1.832301, 2.160770, 2.791326",\ + "2.355621, 2.549163, 2.756612, 3.085082, 3.715634"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.025354, 0.025354, 0.025354, 0.025354, 0.025354",\ + "0.070228, 0.070228, 0.070228, 0.070228, 0.070228",\ + "0.199485, 0.199485, 0.199485, 0.199486, 0.199488",\ + "0.686680, 0.686680, 0.686680, 0.686680, 0.686680",\ + "2.452500, 2.452500, 2.452512, 2.452522, 2.452533",\ + "0.025354, 0.025354, 0.025354, 0.025354, 0.025354",\ + "0.070228, 0.070228, 0.070228, 0.070228, 0.070228",\ + "0.199485, 0.199485, 0.199485, 0.199486, 0.199488",\ + "0.686680, 0.686680, 0.686680, 0.686680, 0.686680",\ + "2.452500, 2.452500, 2.452512, 2.452522, 2.452533",\ + "0.025354, 0.025354, 0.025354, 0.025354, 0.025354",\ + "0.070228, 0.070228, 0.070228, 0.070228, 0.070228",\ + "0.199485, 0.199485, 0.199485, 0.199486, 0.199488",\ + "0.686680, 0.686680, 0.686680, 0.686680, 0.686680",\ + "2.452500, 2.452500, 2.452512, 2.452522, 2.452533",\ + "0.025354, 0.025354, 0.025354, 0.025354, 0.025354",\ + "0.070228, 0.070228, 0.070228, 0.070228, 0.070228",\ + "0.199485, 0.199485, 0.199485, 0.199486, 0.199488",\ + "0.686680, 0.686680, 0.686680, 0.686680, 0.686680",\ + "2.452500, 2.452500, 2.452512, 2.452522, 2.452533",\ + "0.025354, 0.025354, 0.025354, 0.025354, 0.025354",\ + "0.070228, 0.070228, 0.070228, 0.070228, 0.070228",\ + "0.199485, 0.199485, 0.199485, 0.199486, 0.199488",\ + "0.686680, 0.686680, 0.686680, 0.686680, 0.686680",\ + "2.452500, 2.452500, 2.452512, 2.452522, 2.452533"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.539402, 0.743023, 0.952873, 1.281991, 1.913641",\ + "0.571427, 0.775047, 0.984897, 1.314015, 1.945666",\ + "0.621835, 0.825456, 1.035306, 1.364424, 1.996074",\ + "0.782894, 0.986516, 1.196367, 1.525485, 2.157133",\ + "1.362868, 1.566489, 1.776340, 2.105458, 2.737106",\ + "0.628130, 0.830342, 1.040154, 1.369296, 2.000995",\ + "0.660155, 0.862366, 1.072178, 1.401320, 2.033020",\ + "0.710563, 0.912774, 1.122587, 1.451729, 2.083427",\ + "0.871623, 1.073835, 1.283648, 1.612790, 2.244487",\ + "1.451596, 1.653808, 1.863621, 2.192763, 2.824460",\ + "0.717777, 0.910679, 1.120180, 1.449324, 2.081027",\ + "0.749802, 0.942704, 1.152205, 1.481349, 2.113051",\ + "0.800210, 0.993112, 1.202614, 1.531757, 2.163459",\ + "0.961270, 1.154172, 1.363675, 1.692818, 2.324518",\ + "1.541243, 1.734145, 1.943648, 2.272791, 2.904491",\ + "0.777813, 0.968549, 1.177947, 1.506840, 2.138211",\ + "0.809837, 1.000574, 1.209971, 1.538864, 2.170236",\ + "0.860245, 1.050982, 1.260381, 1.589273, 2.220644",\ + "1.021305, 1.212042, 1.421442, 1.750333, 2.381703",\ + "1.601278, 1.792015, 2.001415, 2.330307, 2.961676",\ + "1.080624, 1.274166, 1.481616, 1.810085, 2.440637",\ + "1.112649, 1.306190, 1.513640, 1.842109, 2.472662",\ + "1.163057, 1.356599, 1.564049, 1.892518, 2.523069",\ + "1.324117, 1.517659, 1.725110, 2.053579, 2.684129",\ + "1.904090, 2.097632, 2.305083, 2.633552, 3.264102"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.029862, 0.029862, 0.029862, 0.029862, 0.029862",\ + "0.059266, 0.059266, 0.059266, 0.059267, 0.059267",\ + "0.131512, 0.131512, 0.131512, 0.131512, 0.131513",\ + "0.417796, 0.417796, 0.417800, 0.417803, 0.417807",\ + "1.484511, 1.484511, 1.484513, 1.484514, 1.484517",\ + "0.029862, 0.029862, 0.029862, 0.029862, 0.029862",\ + "0.059266, 0.059266, 0.059266, 0.059267, 0.059267",\ + "0.131512, 0.131512, 0.131512, 0.131512, 0.131513",\ + "0.417796, 0.417796, 0.417800, 0.417803, 0.417807",\ + "1.484511, 1.484511, 1.484513, 1.484514, 1.484517",\ + "0.029862, 0.029862, 0.029862, 0.029862, 0.029862",\ + "0.059266, 0.059266, 0.059266, 0.059267, 0.059267",\ + "0.131512, 0.131512, 0.131512, 0.131512, 0.131513",\ + "0.417796, 0.417796, 0.417800, 0.417803, 0.417807",\ + "1.484511, 1.484511, 1.484513, 1.484514, 1.484517",\ + "0.029862, 0.029862, 0.029862, 0.029862, 0.029862",\ + "0.059266, 0.059266, 0.059266, 0.059267, 0.059267",\ + "0.131512, 0.131512, 0.131512, 0.131512, 0.131513",\ + "0.417796, 0.417796, 0.417800, 0.417803, 0.417807",\ + "1.484511, 1.484511, 1.484513, 1.484514, 1.484517",\ + "0.029862, 0.029862, 0.029862, 0.029862, 0.029862",\ + "0.059266, 0.059266, 0.059266, 0.059267, 0.059267",\ + "0.131512, 0.131512, 0.131512, 0.131512, 0.131513",\ + "0.417796, 0.417796, 0.417800, 0.417803, 0.417807",\ + "1.484511, 1.484511, 1.484513, 1.484514, 1.484517"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[6]_redg_min_2528*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[19]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.343347, 0.560733, 0.738878, 1.027873, 1.588767",\ + "0.376901, 0.594286, 0.772429, 1.061825, 1.623703",\ + "0.447931, 0.665317, 0.843465, 1.132863, 1.694739",\ + "0.702775, 0.920161, 1.098308, 1.387706, 1.949584",\ + "1.627697, 1.845075, 2.023177, 2.312590, 2.874544",\ + "0.431725, 0.648051, 0.826159, 1.115178, 1.676121",\ + "0.465279, 0.681604, 0.859710, 1.149130, 1.711057",\ + "0.536309, 0.752636, 0.930746, 1.220168, 1.782093",\ + "0.791152, 1.007479, 1.185589, 1.475011, 2.036938",\ + "1.716075, 1.932394, 2.110458, 2.399895, 2.961898",\ + "0.521054, 0.728383, 0.906186, 1.195207, 1.756152",\ + "0.554608, 0.761937, 0.939737, 1.229159, 1.791088",\ + "0.625638, 0.832968, 1.010773, 1.300196, 1.862124",\ + "0.880482, 1.087811, 1.265616, 1.555040, 2.116970",\ + "1.805404, 2.012726, 2.190485, 2.479923, 3.041929",\ + "0.584699, 0.786201, 0.963880, 1.252637, 1.813169",\ + "0.618252, 0.819754, 0.997431, 1.286590, 1.848107",\ + "0.689283, 0.890786, 1.068467, 1.357627, 1.919143",\ + "0.944126, 1.145629, 1.323310, 1.612471, 2.173989",\ + "1.869048, 2.070544, 2.248179, 2.537354, 3.098948",\ + "0.912898, 1.091426, 1.267535, 1.555809, 2.115392",\ + "0.946452, 1.124980, 1.301087, 1.589763, 2.150333",\ + "1.017482, 1.196011, 1.372123, 1.660800, 2.221369",\ + "1.272326, 1.450854, 1.626966, 1.915644, 2.476214",\ + "2.197247, 2.375769, 2.551834, 2.840528, 3.401175"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.023744, 0.023744, 0.023744, 0.023744, 0.023744",\ + "0.069296, 0.069296, 0.069296, 0.069296, 0.069296",\ + "0.200223, 0.200225, 0.200229, 0.200251, 0.200303",\ + "0.685855, 0.685857, 0.685864, 0.685915, 0.686035",\ + "2.446888, 2.446896, 2.446897, 2.446897, 2.446897",\ + "0.023744, 0.023744, 0.023744, 0.023744, 0.023744",\ + "0.069296, 0.069296, 0.069296, 0.069296, 0.069296",\ + "0.200223, 0.200225, 0.200229, 0.200251, 0.200303",\ + "0.685855, 0.685857, 0.685864, 0.685915, 0.686035",\ + "2.446888, 2.446896, 2.446897, 2.446897, 2.446897",\ + "0.023744, 0.023744, 0.023744, 0.023744, 0.023744",\ + "0.069296, 0.069296, 0.069296, 0.069296, 0.069296",\ + "0.200223, 0.200225, 0.200229, 0.200251, 0.200303",\ + "0.685855, 0.685857, 0.685864, 0.685915, 0.686035",\ + "2.446889, 2.446896, 2.446897, 2.446897, 2.446897",\ + "0.023744, 0.023744, 0.023744, 0.023744, 0.023744",\ + "0.069296, 0.069296, 0.069296, 0.069296, 0.069296",\ + "0.200223, 0.200225, 0.200229, 0.200251, 0.200303",\ + "0.685855, 0.685857, 0.685864, 0.685915, 0.686035",\ + "2.446889, 2.446896, 2.446897, 2.446897, 2.446897",\ + "0.023744, 0.023744, 0.023744, 0.023744, 0.023744",\ + "0.069296, 0.069296, 0.069296, 0.069296, 0.069296",\ + "0.200223, 0.200225, 0.200229, 0.200251, 0.200303",\ + "0.685855, 0.685857, 0.685864, 0.685915, 0.686035",\ + "2.446889, 2.446896, 2.446897, 2.446897, 2.446897"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.337578, 0.554964, 0.733111, 1.022508, 1.584385",\ + "0.369918, 0.587304, 0.765454, 1.054853, 1.616734",\ + "0.420270, 0.637656, 0.815804, 1.105202, 1.667081",\ + "0.581348, 0.798734, 0.976881, 1.266279, 1.828157",\ + "1.161863, 1.379232, 1.557282, 1.846629, 2.408468",\ + "0.425956, 0.642282, 0.820392, 1.109813, 1.671738",\ + "0.458296, 0.674622, 0.852735, 1.142159, 1.704088",\ + "0.508648, 0.724974, 0.903085, 1.192507, 1.754434",\ + "0.669726, 0.886052, 1.064162, 1.353584, 1.915510",\ + "1.250240, 1.466550, 1.644563, 1.933934, 2.495822",\ + "0.515285, 0.722614, 0.900419, 1.189842, 1.751770",\ + "0.547625, 0.754955, 0.932762, 1.222187, 1.784119",\ + "0.597977, 0.805307, 0.983111, 1.272535, 1.834466",\ + "0.759055, 0.966385, 1.144189, 1.433612, 1.995542",\ + "1.339568, 1.546883, 1.724590, 2.013963, 2.575853",\ + "0.578929, 0.780432, 0.958113, 1.247273, 1.808789",\ + "0.611270, 0.812772, 0.990456, 1.279618, 1.841138",\ + "0.661622, 0.863124, 1.040806, 1.329967, 1.891485",\ + "0.822700, 1.024202, 1.201883, 1.491044, 2.052561",\ + "1.403211, 1.604700, 1.782284, 2.071394, 2.632872",\ + "0.907129, 1.085657, 1.261768, 1.550446, 2.111014",\ + "0.939469, 1.117998, 1.294111, 1.582791, 2.143364",\ + "0.989821, 1.168350, 1.344461, 1.633139, 2.193710",\ + "1.150899, 1.329427, 1.505538, 1.794216, 2.354787",\ + "1.731412, 1.909925, 2.085939, 2.374567, 2.935098"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.030095, 0.030094, 0.030093, 0.030093, 0.030093",\ + "0.059305, 0.059302, 0.059288, 0.059276, 0.059261",\ + "0.131696, 0.131694, 0.131680, 0.131669, 0.131651",\ + "0.419114, 0.419122, 0.419145, 0.419266, 0.419546",\ + "1.483332, 1.483297, 1.483098, 1.482941, 1.482729",\ + "0.030095, 0.030094, 0.030093, 0.030093, 0.030093",\ + "0.059305, 0.059302, 0.059288, 0.059276, 0.059261",\ + "0.131696, 0.131694, 0.131680, 0.131669, 0.131651",\ + "0.419115, 0.419122, 0.419145, 0.419266, 0.419546",\ + "1.483331, 1.483297, 1.483098, 1.482941, 1.482729",\ + "0.030095, 0.030094, 0.030093, 0.030093, 0.030093",\ + "0.059305, 0.059302, 0.059288, 0.059276, 0.059261",\ + "0.131696, 0.131694, 0.131680, 0.131669, 0.131651",\ + "0.419115, 0.419122, 0.419145, 0.419266, 0.419546",\ + "1.483328, 1.483297, 1.483098, 1.482941, 1.482729",\ + "0.030095, 0.030094, 0.030093, 0.030093, 0.030093",\ + "0.059304, 0.059302, 0.059288, 0.059276, 0.059261",\ + "0.131695, 0.131694, 0.131680, 0.131668, 0.131651",\ + "0.419116, 0.419122, 0.419145, 0.419267, 0.419547",\ + "1.483325, 1.483297, 1.483097, 1.482941, 1.482729",\ + "0.030095, 0.030094, 0.030093, 0.030093, 0.030093",\ + "0.059305, 0.059302, 0.059288, 0.059276, 0.059260",\ + "0.131696, 0.131694, 0.131680, 0.131668, 0.131651",\ + "0.419115, 0.419122, 0.419145, 0.419267, 0.419548",\ + "1.483327, 1.483296, 1.483097, 1.482941, 1.482728"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[6]_redg_min_2593*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[20]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.254656, 0.491006, 0.681199, 0.986728, 1.577708",\ + "0.288244, 0.524620, 0.714843, 1.020374, 1.611331",\ + "0.359123, 0.595519, 0.785873, 1.091419, 1.682284",\ + "0.614167, 0.850282, 1.040808, 1.346411, 1.937248",\ + "1.539512, 1.774279, 1.968056, 2.274137, 2.863164",\ + "0.343150, 0.578325, 0.768480, 1.074033, 1.665062",\ + "0.376740, 0.611939, 0.802124, 1.107679, 1.698684",\ + "0.447618, 0.682838, 0.873154, 1.178725, 1.769638",\ + "0.702665, 0.937601, 1.128089, 1.433716, 2.024602",\ + "1.628026, 1.861597, 2.055336, 2.361442, 2.950518",\ + "0.432477, 0.658660, 0.848507, 1.154062, 1.745093",\ + "0.466070, 0.692274, 0.882150, 1.187708, 1.778716",\ + "0.536949, 0.763173, 0.953181, 1.258753, 1.849669",\ + "0.792003, 1.017936, 1.208116, 1.513744, 2.104633",\ + "1.717412, 1.941932, 2.135364, 2.441470, 3.030550",\ + "0.495969, 0.716495, 0.906228, 1.211528, 1.802181",\ + "0.529564, 0.750109, 0.939872, 1.245174, 1.835804",\ + "0.600443, 0.821007, 1.010903, 1.316219, 1.906757",\ + "0.855505, 1.075769, 1.265838, 1.571210, 2.161721",\ + "1.780957, 1.999760, 2.193094, 2.498934, 3.087633",\ + "0.831401, 1.021856, 1.209889, 1.514732, 2.104490",\ + "0.865014, 1.055469, 1.243533, 1.548377, 2.138113",\ + "0.935893, 1.126362, 1.314564, 1.619422, 2.209066",\ + "1.191001, 1.381117, 1.569499, 1.874413, 2.464029",\ + "2.116730, 2.305066, 2.496756, 2.802135, 3.389936"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.023821, 0.023821, 0.023821, 0.023833, 0.023862",\ + "0.069303, 0.069303, 0.069342, 0.069357, 0.069357",\ + "0.199561, 0.199561, 0.199561, 0.199561, 0.199561",\ + "0.684891, 0.684891, 0.685011, 0.685055, 0.685055",\ + "2.453468, 2.453468, 2.454035, 2.454504, 2.455152",\ + "0.023821, 0.023821, 0.023821, 0.023833, 0.023862",\ + "0.069303, 0.069303, 0.069342, 0.069357, 0.069357",\ + "0.199561, 0.199561, 0.199561, 0.199561, 0.199561",\ + "0.684891, 0.684891, 0.685011, 0.685055, 0.685055",\ + "2.453468, 2.453468, 2.454035, 2.454504, 2.455152",\ + "0.023821, 0.023821, 0.023821, 0.023833, 0.023862",\ + "0.069303, 0.069303, 0.069342, 0.069357, 0.069357",\ + "0.199561, 0.199561, 0.199561, 0.199561, 0.199561",\ + "0.684891, 0.684891, 0.685011, 0.685055, 0.685055",\ + "2.453468, 2.453468, 2.454035, 2.454504, 2.455152",\ + "0.023821, 0.023821, 0.023821, 0.023833, 0.023862",\ + "0.069303, 0.069303, 0.069343, 0.069357, 0.069357",\ + "0.199561, 0.199561, 0.199561, 0.199561, 0.199561",\ + "0.684891, 0.684891, 0.685012, 0.685055, 0.685055",\ + "2.453468, 2.453468, 2.454036, 2.454505, 2.455154",\ + "0.023821, 0.023821, 0.023821, 0.023833, 0.023862",\ + "0.069303, 0.069303, 0.069343, 0.069357, 0.069357",\ + "0.199561, 0.199561, 0.199561, 0.199561, 0.199561",\ + "0.684891, 0.684891, 0.685012, 0.685055, 0.685055",\ + "2.453468, 2.453468, 2.454036, 2.454506, 2.455156"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.249454, 0.486004, 0.675967, 0.981250, 1.571825",\ + "0.281865, 0.518328, 0.708344, 1.013662, 1.604275",\ + "0.332260, 0.568655, 0.758650, 1.063988, 1.654672",\ + "0.493098, 0.729544, 0.919296, 1.224627, 1.815523",\ + "1.073988, 1.310152, 1.500044, 1.805268, 2.395687",\ + "0.337933, 0.573322, 0.763248, 1.068555, 1.659178",\ + "0.370344, 0.605646, 0.795625, 1.100967, 1.691628",\ + "0.420740, 0.655974, 0.845931, 1.151293, 1.742025",\ + "0.581582, 0.816862, 1.006577, 1.311932, 1.902877",\ + "1.162485, 1.397470, 1.587325, 1.892573, 2.483041",\ + "0.427218, 0.653657, 0.843275, 1.148583, 1.739210",\ + "0.459630, 0.685981, 0.875652, 1.180995, 1.771660",\ + "0.510027, 0.736309, 0.925958, 1.231322, 1.822057",\ + "0.670883, 0.897197, 1.086604, 1.391961, 1.982908",\ + "1.251823, 1.477805, 1.667352, 1.972602, 2.563072",\ + "0.490671, 0.711493, 0.900996, 1.206049, 1.796297",\ + "0.523083, 0.743816, 0.933373, 1.238461, 1.828747",\ + "0.573482, 0.794144, 0.983679, 1.288787, 1.879144",\ + "0.734351, 0.955034, 1.144324, 1.449427, 2.039996",\ + "1.315324, 1.535635, 1.725073, 2.030067, 2.620159",\ + "0.825858, 1.016851, 1.204656, 1.509252, 2.098604",\ + "0.858274, 1.049176, 1.237034, 1.541664, 2.131054",\ + "0.908682, 1.099504, 1.287340, 1.591990, 2.181452",\ + "1.069631, 1.260400, 1.447985, 1.752630, 2.342305",\ + "1.650816, 1.840953, 2.028734, 2.333270, 2.922466"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.030092, 0.030092, 0.030092, 0.030170, 0.030363",\ + "0.059437, 0.059437, 0.059437, 0.059474, 0.059565",\ + "0.131608, 0.131608, 0.131661, 0.131712, 0.131790",\ + "0.417862, 0.417862, 0.417862, 0.417989, 0.418302",\ + "1.478309, 1.478309, 1.478309, 1.478309, 1.478309",\ + "0.030092, 0.030092, 0.030092, 0.030170, 0.030363",\ + "0.059437, 0.059437, 0.059437, 0.059474, 0.059565",\ + "0.131608, 0.131608, 0.131661, 0.131712, 0.131790",\ + "0.417862, 0.417862, 0.417862, 0.417989, 0.418302",\ + "1.478309, 1.478309, 1.478309, 1.478309, 1.478309",\ + "0.030092, 0.030092, 0.030092, 0.030170, 0.030363",\ + "0.059437, 0.059437, 0.059437, 0.059474, 0.059565",\ + "0.131608, 0.131608, 0.131661, 0.131712, 0.131790",\ + "0.417862, 0.417862, 0.417862, 0.417989, 0.418302",\ + "1.478309, 1.478309, 1.478309, 1.478309, 1.478309",\ + "0.030092, 0.030092, 0.030092, 0.030170, 0.030363",\ + "0.059437, 0.059437, 0.059437, 0.059474, 0.059565",\ + "0.131608, 0.131608, 0.131661, 0.131712, 0.131790",\ + "0.417862, 0.417862, 0.417862, 0.417990, 0.418303",\ + "1.478309, 1.478309, 1.478309, 1.478309, 1.478309",\ + "0.030092, 0.030092, 0.030092, 0.030170, 0.030364",\ + "0.059437, 0.059437, 0.059437, 0.059474, 0.059565",\ + "0.131608, 0.131608, 0.131661, 0.131712, 0.131790",\ + "0.417862, 0.417862, 0.417862, 0.417990, 0.418303",\ + "1.478309, 1.478309, 1.478309, 1.478309, 1.478309"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[6]_redg_min_2636*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[21]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.325472, 0.549886, 0.736679, 1.035269, 1.612348",\ + "0.359026, 0.583502, 0.770294, 1.068882, 1.645956",\ + "0.430054, 0.654527, 0.841316, 1.139890, 1.716933",\ + "0.684897, 0.909477, 1.096261, 1.394816, 1.971817",\ + "1.609849, 1.835494, 2.022258, 2.320729, 2.897541",\ + "0.413759, 0.637204, 0.823960, 1.122574, 1.699702",\ + "0.447318, 0.670820, 0.857575, 1.156187, 1.733310",\ + "0.518346, 0.741845, 0.928597, 1.227195, 1.804287",\ + "0.773189, 0.996795, 1.183542, 1.482121, 2.059171",\ + "1.698136, 1.922812, 2.109539, 2.408034, 2.984894",\ + "0.503271, 0.717533, 0.903987, 1.202602, 1.779733",\ + "0.536839, 0.751148, 0.937602, 1.236216, 1.813341",\ + "0.607869, 0.822173, 1.008624, 1.307223, 1.884319",\ + "0.862712, 1.077123, 1.263569, 1.562150, 2.139202",\ + "1.787644, 2.003140, 2.189566, 2.488062, 3.064926",\ + "0.567278, 0.775354, 0.961702, 1.260053, 1.836791",\ + "0.600857, 0.808970, 0.995318, 1.293666, 1.870399",\ + "0.671888, 0.879995, 1.066339, 1.364674, 1.941376",\ + "0.926731, 1.134945, 1.321284, 1.619600, 2.196259",\ + "1.851648, 2.060962, 2.247281, 2.545512, 3.121983",\ + "0.902611, 1.080594, 1.265360, 1.563241, 2.139063",\ + "0.936228, 1.114210, 1.298975, 1.596854, 2.172671",\ + "1.007260, 1.185235, 1.369997, 1.667862, 2.243648",\ + "1.262219, 1.440184, 1.624942, 1.922788, 2.498532",\ + "2.188276, 2.366200, 2.550939, 2.848700, 3.424254"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.023797, 0.023797, 0.023797, 0.023789, 0.023770",\ + "0.069301, 0.069300, 0.069300, 0.069299, 0.069296",\ + "0.200200, 0.200200, 0.200200, 0.200200, 0.200200",\ + "0.685818, 0.685818, 0.685818, 0.685818, 0.685818",\ + "2.446848, 2.446711, 2.446702, 2.446700, 2.446699",\ + "0.023797, 0.023797, 0.023797, 0.023789, 0.023770",\ + "0.069301, 0.069300, 0.069300, 0.069299, 0.069296",\ + "0.200200, 0.200200, 0.200200, 0.200200, 0.200200",\ + "0.685818, 0.685818, 0.685818, 0.685818, 0.685818",\ + "2.446844, 2.446711, 2.446702, 2.446700, 2.446699",\ + "0.023797, 0.023797, 0.023797, 0.023789, 0.023770",\ + "0.069301, 0.069300, 0.069300, 0.069299, 0.069296",\ + "0.200200, 0.200200, 0.200200, 0.200200, 0.200200",\ + "0.685818, 0.685818, 0.685818, 0.685818, 0.685818",\ + "2.446834, 2.446711, 2.446702, 2.446700, 2.446699",\ + "0.023797, 0.023797, 0.023797, 0.023789, 0.023770",\ + "0.069301, 0.069300, 0.069300, 0.069299, 0.069296",\ + "0.200200, 0.200200, 0.200200, 0.200200, 0.200200",\ + "0.685818, 0.685818, 0.685818, 0.685818, 0.685818",\ + "2.446823, 2.446710, 2.446702, 2.446700, 2.446699",\ + "0.023797, 0.023797, 0.023797, 0.023789, 0.023770",\ + "0.069301, 0.069300, 0.069300, 0.069299, 0.069296",\ + "0.200200, 0.200200, 0.200200, 0.200200, 0.200200",\ + "0.685818, 0.685818, 0.685818, 0.685818, 0.685818",\ + "2.446830, 2.446707, 2.446702, 2.446700, 2.446699"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.319701, 0.545442, 0.732220, 1.030751, 1.607697",\ + "0.352039, 0.577906, 0.764685, 1.063221, 1.640180",\ + "0.402393, 0.628225, 0.815004, 1.113542, 1.690503",\ + "0.563471, 0.788964, 0.975744, 1.274281, 1.851241",\ + "1.144048, 1.371915, 1.558729, 1.857404, 2.434677",\ + "0.407993, 0.632759, 0.819501, 1.118056, 1.695051",\ + "0.440331, 0.665224, 0.851966, 1.150527, 1.727533",\ + "0.490684, 0.715542, 0.902285, 1.200847, 1.777857",\ + "0.651763, 0.876282, 1.063025, 1.361586, 1.938595",\ + "1.232329, 1.459233, 1.646010, 1.944710, 2.522030",\ + "0.497516, 0.713088, 0.899528, 1.198085, 1.775082",\ + "0.529855, 0.745552, 0.931993, 1.230555, 1.807565",\ + "0.580208, 0.795871, 0.982312, 1.280875, 1.857888",\ + "0.741286, 0.956611, 1.143052, 1.441614, 2.018626",\ + "1.321819, 1.539562, 1.726037, 2.024738, 2.602062",\ + "0.561534, 0.770909, 0.957244, 1.255535, 1.832140",\ + "0.593874, 0.803374, 0.989709, 1.288005, 1.864622",\ + "0.644226, 0.853692, 1.040028, 1.338326, 1.914946",\ + "0.805304, 1.014432, 1.200767, 1.499064, 2.075684",\ + "1.385806, 1.597383, 1.783752, 2.082189, 2.659120",\ + "0.898194, 1.076148, 1.260901, 1.558723, 2.134412",\ + "0.930657, 1.108613, 1.293366, 1.591193, 2.166894",\ + "0.980975, 1.158931, 1.343685, 1.641514, 2.217218",\ + "1.141715, 1.319671, 1.504425, 1.802253, 2.377955",\ + "1.724358, 1.902624, 2.087410, 2.385377, 2.961392"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.030095, 0.030095, 0.030095, 0.030095, 0.030095",\ + "0.059314, 0.059250, 0.059241, 0.059238, 0.059238",\ + "0.131704, 0.131646, 0.131637, 0.131633, 0.131629",\ + "0.418989, 0.418989, 0.418989, 0.418989, 0.418989",\ + "1.483458, 1.482592, 1.482500, 1.482470, 1.482449",\ + "0.030095, 0.030095, 0.030095, 0.030095, 0.030095",\ + "0.059313, 0.059250, 0.059241, 0.059238, 0.059238",\ + "0.131703, 0.131646, 0.131637, 0.131633, 0.131629",\ + "0.418989, 0.418989, 0.418989, 0.418989, 0.418989",\ + "1.483437, 1.482592, 1.482500, 1.482470, 1.482449",\ + "0.030095, 0.030095, 0.030095, 0.030095, 0.030095",\ + "0.059308, 0.059250, 0.059241, 0.059238, 0.059238",\ + "0.131698, 0.131646, 0.131637, 0.131633, 0.131629",\ + "0.418989, 0.418989, 0.418989, 0.418989, 0.418989",\ + "1.483369, 1.482592, 1.482500, 1.482470, 1.482449",\ + "0.030095, 0.030095, 0.030095, 0.030095, 0.030095",\ + "0.059303, 0.059250, 0.059241, 0.059238, 0.059238",\ + "0.131694, 0.131646, 0.131637, 0.131633, 0.131629",\ + "0.418989, 0.418989, 0.418989, 0.418989, 0.418989",\ + "1.483305, 1.482589, 1.482500, 1.482470, 1.482449",\ + "0.030095, 0.030095, 0.030095, 0.030095, 0.030095",\ + "0.059306, 0.059248, 0.059241, 0.059238, 0.059238",\ + "0.131697, 0.131645, 0.131637, 0.131633, 0.131629",\ + "0.418989, 0.418989, 0.418989, 0.418989, 0.418989",\ + "1.482893, 1.482566, 1.482500, 1.482470, 1.482448"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[6]_redg_min_2688*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[25]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.402084, 0.617885, 0.797210, 1.086950, 1.648801",\ + "0.443807, 0.659608, 0.838933, 1.128673, 1.690524",\ + "0.519872, 0.735673, 0.914998, 1.204739, 1.766590",\ + "0.775363, 0.991161, 1.170488, 1.460228, 2.022074",\ + "1.699671, 1.915471, 2.094797, 2.384537, 2.946387",\ + "0.490367, 0.705202, 0.884491, 1.174255, 1.736155",\ + "0.532090, 0.746925, 0.926214, 1.215978, 1.777877",\ + "0.608155, 0.822991, 1.002279, 1.292044, 1.853944",\ + "0.863645, 1.078479, 1.257769, 1.547533, 2.109427",\ + "1.787954, 2.002789, 2.182077, 2.471842, 3.033741",\ + "0.579657, 0.785533, 0.964518, 1.254284, 1.816186",\ + "0.621380, 0.827256, 1.006241, 1.296007, 1.857909",\ + "0.697445, 0.903322, 1.082306, 1.372073, 1.933975",\ + "0.952935, 1.158809, 1.337796, 1.627561, 2.189459",\ + "1.877244, 2.083119, 2.262105, 2.551871, 3.113772",\ + "0.643368, 0.843363, 1.022215, 1.311715, 1.873206",\ + "0.685091, 0.885086, 1.063938, 1.353438, 1.914929",\ + "0.761157, 0.961152, 1.140003, 1.429504, 1.990995",\ + "1.016647, 1.216639, 1.395493, 1.684993, 2.246479",\ + "1.940955, 2.140950, 2.319802, 2.609302, 3.170792",\ + "0.967924, 1.148670, 1.325870, 1.614888, 2.175433",\ + "1.009647, 1.190393, 1.367593, 1.656611, 2.217156",\ + "1.085713, 1.266459, 1.443658, 1.732677, 2.293222",\ + "1.341202, 1.521946, 1.699148, 1.988165, 2.548706",\ + "2.265511, 2.446256, 2.623457, 2.912475, 3.473019"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.025354, 0.025353, 0.025353, 0.025353, 0.025352",\ + "0.070228, 0.070228, 0.070228, 0.070228, 0.070228",\ + "0.199488, 0.199487, 0.199487, 0.199486, 0.199483",\ + "0.686687, 0.686687, 0.686686, 0.686686, 0.686686",\ + "2.452523, 2.452519, 2.452519, 2.452513, 2.452498",\ + "0.025354, 0.025353, 0.025353, 0.025353, 0.025352",\ + "0.070228, 0.070228, 0.070228, 0.070228, 0.070228",\ + "0.199488, 0.199487, 0.199487, 0.199486, 0.199483",\ + "0.686687, 0.686687, 0.686686, 0.686686, 0.686686",\ + "2.452523, 2.452519, 2.452519, 2.452513, 2.452498",\ + "0.025354, 0.025353, 0.025353, 0.025353, 0.025352",\ + "0.070228, 0.070228, 0.070228, 0.070228, 0.070228",\ + "0.199487, 0.199487, 0.199487, 0.199486, 0.199483",\ + "0.686687, 0.686687, 0.686686, 0.686686, 0.686686",\ + "2.452523, 2.452519, 2.452519, 2.452513, 2.452498",\ + "0.025354, 0.025353, 0.025353, 0.025353, 0.025352",\ + "0.070228, 0.070228, 0.070228, 0.070228, 0.070228",\ + "0.199487, 0.199487, 0.199487, 0.199486, 0.199483",\ + "0.686687, 0.686687, 0.686686, 0.686686, 0.686686",\ + "2.452523, 2.452519, 2.452519, 2.452513, 2.452498",\ + "0.025354, 0.025353, 0.025353, 0.025353, 0.025352",\ + "0.070228, 0.070228, 0.070228, 0.070228, 0.070228",\ + "0.199487, 0.199487, 0.199487, 0.199486, 0.199483",\ + "0.686687, 0.686687, 0.686686, 0.686686, 0.686686",\ + "2.452523, 2.452519, 2.452519, 2.452513, 2.452498"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.424674, 0.640474, 0.819800, 1.109540, 1.671391",\ + "0.456699, 0.672499, 0.851824, 1.141565, 1.703415",\ + "0.507106, 0.722907, 0.902232, 1.191973, 1.753824",\ + "0.668165, 0.883968, 1.063291, 1.353033, 1.914886",\ + "1.248139, 1.463941, 1.643265, 1.933006, 2.494859",\ + "0.512957, 0.727792, 0.907081, 1.196846, 1.758744",\ + "0.544981, 0.759817, 0.939105, 1.228870, 1.790768",\ + "0.595389, 0.810225, 0.989513, 1.279278, 1.841177",\ + "0.756448, 0.971285, 1.150572, 1.440338, 2.002240",\ + "1.336421, 1.551259, 1.730546, 2.020311, 2.582213",\ + "0.602247, 0.808123, 0.987108, 1.276874, 1.838776",\ + "0.634272, 0.840147, 1.019132, 1.308898, 1.870800",\ + "0.684679, 0.890556, 1.069540, 1.359307, 1.921209",\ + "0.845739, 1.051616, 1.230599, 1.520366, 2.082271",\ + "1.425712, 1.631589, 1.810572, 2.100339, 2.662244",\ + "0.665958, 0.865953, 1.044805, 1.334306, 1.895796",\ + "0.697983, 0.897977, 1.076829, 1.366330, 1.927820",\ + "0.748391, 0.948386, 1.127237, 1.416738, 1.978229",\ + "0.909450, 1.109446, 1.288296, 1.577798, 2.139291",\ + "1.489423, 1.689419, 1.868270, 2.157771, 2.719264",\ + "0.990514, 1.171260, 1.348460, 1.637478, 2.198022",\ + "1.022539, 1.203284, 1.380485, 1.669502, 2.230046",\ + "1.072946, 1.253692, 1.430892, 1.719911, 2.280456",\ + "1.234006, 1.414753, 1.591951, 1.880970, 2.441518",\ + "1.813979, 1.994726, 2.171925, 2.460944, 3.021491"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.029862, 0.029862, 0.029862, 0.029862, 0.029862",\ + "0.059267, 0.059267, 0.059267, 0.059266, 0.059266",\ + "0.131512, 0.131512, 0.131512, 0.131512, 0.131512",\ + "0.417803, 0.417802, 0.417802, 0.417800, 0.417795",\ + "1.484515, 1.484514, 1.484514, 1.484513, 1.484510",\ + "0.029862, 0.029862, 0.029862, 0.029862, 0.029862",\ + "0.059267, 0.059267, 0.059267, 0.059266, 0.059266",\ + "0.131512, 0.131512, 0.131512, 0.131512, 0.131512",\ + "0.417803, 0.417802, 0.417802, 0.417800, 0.417795",\ + "1.484515, 1.484514, 1.484514, 1.484513, 1.484510",\ + "0.029862, 0.029862, 0.029862, 0.029862, 0.029862",\ + "0.059267, 0.059267, 0.059267, 0.059266, 0.059266",\ + "0.131512, 0.131512, 0.131512, 0.131512, 0.131512",\ + "0.417803, 0.417802, 0.417802, 0.417800, 0.417795",\ + "1.484515, 1.484514, 1.484514, 1.484513, 1.484510",\ + "0.029862, 0.029862, 0.029862, 0.029862, 0.029862",\ + "0.059267, 0.059267, 0.059267, 0.059266, 0.059266",\ + "0.131512, 0.131512, 0.131512, 0.131512, 0.131512",\ + "0.417803, 0.417802, 0.417802, 0.417800, 0.417795",\ + "1.484515, 1.484514, 1.484514, 1.484513, 1.484510",\ + "0.029862, 0.029862, 0.029862, 0.029862, 0.029862",\ + "0.059267, 0.059267, 0.059267, 0.059266, 0.059266",\ + "0.131512, 0.131512, 0.131512, 0.131512, 0.131512",\ + "0.417803, 0.417802, 0.417802, 0.417800, 0.417795",\ + "1.484515, 1.484514, 1.484514, 1.484513, 1.484510"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[6]_redg_min_2386*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[28]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.556345, 0.776897, 0.954428, 1.243066, 1.803585",\ + "0.598041, 0.818593, 0.996124, 1.284762, 1.845281",\ + "0.674223, 0.894775, 1.072306, 1.360943, 1.921462",\ + "0.929618, 1.150170, 1.327701, 1.616339, 2.176858",\ + "1.853996, 2.074548, 2.252079, 2.540716, 3.101235",\ + "0.644757, 0.864215, 1.041709, 1.330371, 1.890938",\ + "0.686453, 0.905912, 1.083405, 1.372067, 1.932634",\ + "0.762635, 0.982093, 1.159587, 1.448249, 2.008816",\ + "1.018030, 1.237489, 1.414982, 1.703644, 2.264211",\ + "1.942408, 2.161866, 2.339360, 2.628021, 3.188588",\ + "0.733857, 0.944551, 1.121736, 1.410399, 1.970970",\ + "0.775553, 0.986247, 1.163432, 1.452096, 2.012666",\ + "0.851735, 1.062428, 1.239614, 1.528277, 2.088847",\ + "1.107130, 1.317824, 1.495009, 1.783673, 2.344243",\ + "2.031507, 2.242201, 2.419386, 2.708050, 3.268620",\ + "0.797144, 1.002367, 1.179428, 1.467829, 2.027984",\ + "0.838840, 1.044064, 1.221124, 1.509525, 2.069680",\ + "0.915021, 1.120245, 1.297306, 1.585706, 2.145862",\ + "1.170417, 1.375641, 1.552701, 1.841102, 2.401258",\ + "2.094794, 2.300018, 2.477078, 2.765479, 3.325634",\ + "1.128157, 1.307597, 1.483084, 1.771000, 2.330204",\ + "1.169853, 1.349293, 1.524780, 1.812697, 2.371901",\ + "1.246035, 1.425474, 1.600962, 1.888878, 2.448082",\ + "1.501431, 1.680870, 1.856357, 2.144274, 2.703477",\ + "2.425808, 2.605247, 2.780735, 3.068651, 3.627855"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070068, 0.070068",\ + "0.199415, 0.199415, 0.199415, 0.199415, 0.199415",\ + "0.685787, 0.685787, 0.685787, 0.685787, 0.685786",\ + "2.455201, 2.455201, 2.455201, 2.455201, 2.455201",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070068, 0.070068",\ + "0.199415, 0.199415, 0.199415, 0.199415, 0.199415",\ + "0.685787, 0.685787, 0.685787, 0.685787, 0.685786",\ + "2.455201, 2.455201, 2.455201, 2.455201, 2.455201",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070068, 0.070068",\ + "0.199415, 0.199415, 0.199415, 0.199415, 0.199415",\ + "0.685787, 0.685787, 0.685787, 0.685787, 0.685786",\ + "2.455201, 2.455201, 2.455201, 2.455201, 2.455201",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070068, 0.070068",\ + "0.199415, 0.199415, 0.199415, 0.199415, 0.199415",\ + "0.685787, 0.685787, 0.685787, 0.685787, 0.685786",\ + "2.455201, 2.455201, 2.455201, 2.455201, 2.455201",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070068, 0.070068",\ + "0.199415, 0.199415, 0.199415, 0.199415, 0.199415",\ + "0.685787, 0.685787, 0.685787, 0.685787, 0.685786",\ + "2.455201, 2.455201, 2.455201, 2.455201, 2.455201"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.576590, 0.797142, 0.974673, 1.263311, 1.823830",\ + "0.608840, 0.829392, 1.006923, 1.295561, 1.856079",\ + "0.659152, 0.879704, 1.057235, 1.345873, 1.906392",\ + "0.819816, 1.040368, 1.217899, 1.506536, 2.067055",\ + "1.400950, 1.621502, 1.799033, 2.087670, 2.648189",\ + "0.665002, 0.884461, 1.061954, 1.350616, 1.911183",\ + "0.697252, 0.916710, 1.094204, 1.382866, 1.943433",\ + "0.747564, 0.967022, 1.144516, 1.433178, 1.993745",\ + "0.908228, 1.127686, 1.305180, 1.593842, 2.154409",\ + "1.489362, 1.708820, 1.886313, 2.174975, 2.735543",\ + "0.754102, 0.964796, 1.141981, 1.430644, 1.991215",\ + "0.786352, 0.997045, 1.174231, 1.462894, 2.023464",\ + "0.836664, 1.047358, 1.224543, 1.513206, 2.073777",\ + "0.997328, 1.208021, 1.385207, 1.673870, 2.234440",\ + "1.578462, 1.789155, 1.966340, 2.255004, 2.815574",\ + "0.817389, 1.022612, 1.199673, 1.488074, 2.048229",\ + "0.849638, 1.054862, 1.231923, 1.520324, 2.080479",\ + "0.899951, 1.105174, 1.282235, 1.570636, 2.130791",\ + "1.060614, 1.265838, 1.442899, 1.731299, 2.291455",\ + "1.641748, 1.846972, 2.024032, 2.312433, 2.872589",\ + "1.148402, 1.327842, 1.503329, 1.791245, 2.350449",\ + "1.180652, 1.360092, 1.535579, 1.823495, 2.382699",\ + "1.230964, 1.410404, 1.585891, 1.873807, 2.433011",\ + "1.391628, 1.571068, 1.746555, 2.034471, 2.593675",\ + "1.972762, 2.152201, 2.327689, 2.615605, 3.174809"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.029705, 0.029705, 0.029705, 0.029705, 0.029705",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131486, 0.131486, 0.131486, 0.131486, 0.131486",\ + "0.419471, 0.419471, 0.419471, 0.419471, 0.419471",\ + "1.482976, 1.482976, 1.482976, 1.482976, 1.482976",\ + "0.029705, 0.029705, 0.029705, 0.029705, 0.029705",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131486, 0.131486, 0.131486, 0.131486, 0.131486",\ + "0.419471, 0.419471, 0.419471, 0.419471, 0.419471",\ + "1.482976, 1.482976, 1.482976, 1.482976, 1.482976",\ + "0.029705, 0.029705, 0.029705, 0.029705, 0.029705",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131486, 0.131486, 0.131486, 0.131486, 0.131486",\ + "0.419471, 0.419471, 0.419471, 0.419471, 0.419471",\ + "1.482976, 1.482976, 1.482976, 1.482976, 1.482976",\ + "0.029705, 0.029705, 0.029705, 0.029705, 0.029705",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131486, 0.131486, 0.131486, 0.131486, 0.131486",\ + "0.419471, 0.419471, 0.419471, 0.419471, 0.419471",\ + "1.482976, 1.482976, 1.482976, 1.482976, 1.482976",\ + "0.029705, 0.029705, 0.029705, 0.029705, 0.029705",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131486, 0.131486, 0.131486, 0.131486, 0.131486",\ + "0.419471, 0.419471, 0.419471, 0.419471, 0.419471",\ + "1.482976, 1.482976, 1.482976, 1.482976, 1.482976"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[6]_redg_min*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[29]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.538673, 0.779387, 0.972430, 1.279750, 1.873102",\ + "0.580369, 0.821084, 1.014127, 1.321447, 1.914798",\ + "0.656550, 0.897265, 1.090308, 1.397628, 1.990980",\ + "0.911946, 1.152661, 1.345703, 1.653024, 2.246375",\ + "1.836323, 2.077038, 2.270081, 2.577401, 3.170752",\ + "0.626961, 0.866705, 1.059711, 1.367055, 1.960455",\ + "0.668657, 0.908401, 1.101408, 1.408752, 2.002152",\ + "0.744839, 0.984583, 1.177589, 1.484933, 2.078333",\ + "1.000234, 1.239979, 1.432984, 1.740329, 2.333729",\ + "1.924612, 2.164356, 2.357362, 2.664706, 3.258105",\ + "0.716276, 0.947035, 1.139738, 1.447084, 2.040487",\ + "0.757973, 0.988732, 1.181434, 1.488780, 2.082183",\ + "0.834154, 1.064913, 1.257616, 1.564962, 2.158365",\ + "1.089550, 1.320309, 1.513011, 1.820357, 2.413760",\ + "2.013927, 2.244686, 2.437389, 2.744734, 3.338137",\ + "0.780015, 1.004896, 1.197467, 1.504554, 2.097583",\ + "0.821712, 1.046593, 1.239163, 1.546250, 2.139279",\ + "0.897893, 1.122774, 1.315345, 1.622432, 2.215461",\ + "1.153289, 1.378170, 1.570740, 1.877827, 2.470857",\ + "2.077666, 2.302547, 2.495118, 2.802204, 3.395233",\ + "1.117001, 1.310416, 1.501127, 1.807759, 2.399902",\ + "1.158697, 1.352113, 1.542824, 1.849456, 2.441598",\ + "1.234879, 1.428294, 1.619005, 1.925637, 2.517779",\ + "1.490274, 1.683690, 1.874401, 2.181033, 2.773175",\ + "2.414652, 2.608067, 2.798778, 3.105409, 3.697551"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070068, 0.070068",\ + "0.199415, 0.199415, 0.199415, 0.199415, 0.199415",\ + "0.685787, 0.685787, 0.685787, 0.685786, 0.685786",\ + "2.455201, 2.455201, 2.455201, 2.455201, 2.455201",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070068, 0.070068",\ + "0.199415, 0.199415, 0.199415, 0.199415, 0.199415",\ + "0.685787, 0.685787, 0.685787, 0.685786, 0.685786",\ + "2.455201, 2.455201, 2.455201, 2.455201, 2.455201",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070068, 0.070068",\ + "0.199415, 0.199415, 0.199415, 0.199415, 0.199415",\ + "0.685787, 0.685787, 0.685787, 0.685786, 0.685786",\ + "2.455201, 2.455201, 2.455201, 2.455201, 2.455201",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070068, 0.070068",\ + "0.199415, 0.199415, 0.199415, 0.199415, 0.199415",\ + "0.685787, 0.685787, 0.685787, 0.685786, 0.685786",\ + "2.455201, 2.455201, 2.455201, 2.455201, 2.455201",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070068, 0.070068",\ + "0.199415, 0.199415, 0.199415, 0.199415, 0.199415",\ + "0.685787, 0.685787, 0.685787, 0.685786, 0.685786",\ + "2.455201, 2.455201, 2.455201, 2.455201, 2.455201"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.558918, 0.799632, 0.992675, 1.299995, 1.893347",\ + "0.591168, 0.831882, 1.024925, 1.332245, 1.925597",\ + "0.641480, 0.882194, 1.075237, 1.382557, 1.975909",\ + "0.802143, 1.042858, 1.235901, 1.543221, 2.136573",\ + "1.383277, 1.623992, 1.817035, 2.124355, 2.717707",\ + "0.647206, 0.886950, 1.079956, 1.387300, 1.980700",\ + "0.679456, 0.919200, 1.112206, 1.419550, 2.012950",\ + "0.729768, 0.969512, 1.162518, 1.469862, 2.063262",\ + "0.890432, 1.130176, 1.323182, 1.630526, 2.223926",\ + "1.471565, 1.711310, 1.904316, 2.211660, 2.805060",\ + "0.736521, 0.967281, 1.159983, 1.467329, 2.060732",\ + "0.768771, 0.999530, 1.192233, 1.499579, 2.092982",\ + "0.819083, 1.049842, 1.242545, 1.549891, 2.143294",\ + "0.979747, 1.210506, 1.403209, 1.710555, 2.303958",\ + "1.560881, 1.791640, 1.984343, 2.291688, 2.885092",\ + "0.800261, 1.025141, 1.217712, 1.524799, 2.117828",\ + "0.832510, 1.057391, 1.249962, 1.557049, 2.150078",\ + "0.882822, 1.107703, 1.300274, 1.607361, 2.200390",\ + "1.043486, 1.268367, 1.460938, 1.768024, 2.361054",\ + "1.624620, 1.849501, 2.042072, 2.349159, 2.942188",\ + "1.137246, 1.330662, 1.521373, 1.828004, 2.420147",\ + "1.169496, 1.362911, 1.553622, 1.860254, 2.452396",\ + "1.219808, 1.413224, 1.603935, 1.910566, 2.502709",\ + "1.380472, 1.573887, 1.764598, 2.071230, 2.663373",\ + "1.961606, 2.155021, 2.345732, 2.652364, 3.244506"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.029705, 0.029705, 0.029705, 0.029705, 0.029705",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131486, 0.131486, 0.131486, 0.131486, 0.131486",\ + "0.419471, 0.419471, 0.419471, 0.419471, 0.419471",\ + "1.482976, 1.482976, 1.482976, 1.482976, 1.482976",\ + "0.029705, 0.029705, 0.029705, 0.029705, 0.029705",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131486, 0.131486, 0.131486, 0.131486, 0.131486",\ + "0.419471, 0.419471, 0.419471, 0.419471, 0.419471",\ + "1.482976, 1.482976, 1.482976, 1.482976, 1.482976",\ + "0.029705, 0.029705, 0.029705, 0.029705, 0.029705",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131486, 0.131486, 0.131486, 0.131486, 0.131486",\ + "0.419471, 0.419471, 0.419471, 0.419471, 0.419471",\ + "1.482976, 1.482976, 1.482976, 1.482976, 1.482976",\ + "0.029705, 0.029705, 0.029705, 0.029705, 0.029705",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131486, 0.131486, 0.131486, 0.131486, 0.131486",\ + "0.419471, 0.419471, 0.419471, 0.419471, 0.419471",\ + "1.482976, 1.482976, 1.482976, 1.482976, 1.482976",\ + "0.029705, 0.029705, 0.029705, 0.029705, 0.029705",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131486, 0.131486, 0.131486, 0.131486, 0.131486",\ + "0.419471, 0.419471, 0.419471, 0.419471, 0.419471",\ + "1.482976, 1.482976, 1.482976, 1.482976, 1.482976"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[6]_redg_min_2306*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[32]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.454515, 0.687556, 0.876637, 1.181062, 1.770586",\ + "0.496240, 0.729281, 0.918362, 1.222787, 1.812311",\ + "0.572297, 0.805339, 0.994419, 1.298844, 1.888368",\ + "0.827855, 1.060896, 1.249979, 1.554404, 2.143927",\ + "1.752113, 1.985154, 2.174236, 2.478661, 3.068184",\ + "0.542959, 0.774874, 0.963918, 1.268367, 1.857939",\ + "0.584684, 0.816599, 1.005643, 1.310092, 1.899664",\ + "0.660741, 0.892656, 1.081700, 1.386149, 1.975721",\ + "0.916299, 1.148213, 1.337260, 1.641709, 2.231281",\ + "1.840557, 2.072472, 2.261517, 2.565966, 3.155538",\ + "0.633029, 0.855201, 1.043945, 1.348395, 1.937971",\ + "0.674754, 0.896927, 1.085670, 1.390121, 1.979696",\ + "0.750812, 0.972984, 1.161727, 1.466178, 2.055753",\ + "1.006370, 1.228541, 1.417287, 1.721738, 2.311312",\ + "1.930628, 2.152800, 2.341543, 2.645994, 3.235569",\ + "0.697606, 0.913035, 1.101665, 1.405861, 1.995059",\ + "0.739331, 0.954761, 1.143391, 1.447586, 2.036784",\ + "0.815389, 1.030818, 1.219448, 1.523643, 2.112841",\ + "1.070947, 1.286375, 1.475007, 1.779203, 2.368400",\ + "1.995205, 2.210634, 2.399264, 2.703460, 3.292657",\ + "1.037719, 1.218357, 1.405324, 1.709062, 2.297368",\ + "1.079444, 1.260083, 1.447049, 1.750787, 2.339093",\ + "1.155501, 1.336140, 1.523106, 1.826844, 2.415150",\ + "1.411059, 1.591697, 1.778666, 2.082405, 2.670709",\ + "2.335317, 2.515956, 2.702923, 3.006661, 3.594966"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.025366, 0.025366, 0.025366, 0.025366, 0.025366",\ + "0.070222, 0.070222, 0.070222, 0.070222, 0.070222",\ + "0.199531, 0.199531, 0.199531, 0.199531, 0.199531",\ + "0.686584, 0.686584, 0.686584, 0.686584, 0.686584",\ + "2.452471, 2.452462, 2.452462, 2.452446, 2.452406",\ + "0.025366, 0.025366, 0.025366, 0.025366, 0.025366",\ + "0.070222, 0.070222, 0.070222, 0.070222, 0.070222",\ + "0.199531, 0.199531, 0.199531, 0.199531, 0.199531",\ + "0.686584, 0.686584, 0.686584, 0.686584, 0.686584",\ + "2.452471, 2.452462, 2.452462, 2.452446, 2.452406",\ + "0.025366, 0.025366, 0.025366, 0.025366, 0.025366",\ + "0.070222, 0.070222, 0.070222, 0.070222, 0.070222",\ + "0.199531, 0.199531, 0.199531, 0.199531, 0.199531",\ + "0.686584, 0.686584, 0.686584, 0.686584, 0.686584",\ + "2.452471, 2.452462, 2.452462, 2.452446, 2.452406",\ + "0.025366, 0.025366, 0.025366, 0.025366, 0.025366",\ + "0.070222, 0.070222, 0.070222, 0.070222, 0.070222",\ + "0.199531, 0.199531, 0.199531, 0.199531, 0.199531",\ + "0.686584, 0.686584, 0.686584, 0.686584, 0.686584",\ + "2.452470, 2.452462, 2.452462, 2.452446, 2.452406",\ + "0.025366, 0.025366, 0.025366, 0.025366, 0.025366",\ + "0.070222, 0.070222, 0.070222, 0.070222, 0.070222",\ + "0.199531, 0.199531, 0.199531, 0.199531, 0.199531",\ + "0.686584, 0.686584, 0.686584, 0.686584, 0.686584",\ + "2.452470, 2.452462, 2.452462, 2.452446, 2.452406"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.477114, 0.710155, 0.899236, 1.203661, 1.793185",\ + "0.509144, 0.742185, 0.931266, 1.235691, 1.825215",\ + "0.559532, 0.792574, 0.981654, 1.286079, 1.875603",\ + "0.720561, 0.953603, 1.142682, 1.447107, 2.036631",\ + "1.300536, 1.533577, 1.722657, 2.027082, 2.616606",\ + "0.565558, 0.797473, 0.986517, 1.290966, 1.880538",\ + "0.597588, 0.829503, 1.018547, 1.322996, 1.912568",\ + "0.647976, 0.879891, 1.068935, 1.373384, 1.962957",\ + "0.809005, 1.040920, 1.229963, 1.534412, 2.123985",\ + "1.388980, 1.620895, 1.809938, 2.114387, 2.703959",\ + "0.655628, 0.877800, 1.066544, 1.370995, 1.960570",\ + "0.687658, 0.909830, 1.098574, 1.403025, 1.992600",\ + "0.738047, 0.960219, 1.148962, 1.453413, 2.042988",\ + "0.899075, 1.121248, 1.309990, 1.614440, 2.204016",\ + "1.479050, 1.701223, 1.889965, 2.194416, 2.783991",\ + "0.720205, 0.935634, 1.124265, 1.428460, 2.017658",\ + "0.752235, 0.967664, 1.156295, 1.460490, 2.049688",\ + "0.802624, 1.018053, 1.206683, 1.510878, 2.100076",\ + "0.963652, 1.179082, 1.367711, 1.671906, 2.261104",\ + "1.543628, 1.759057, 1.947685, 2.251881, 2.841079",\ + "1.060318, 1.240956, 1.427923, 1.731662, 2.319967",\ + "1.092348, 1.272986, 1.459953, 1.763692, 2.351997",\ + "1.142736, 1.323375, 1.510341, 1.814080, 2.402385",\ + "1.303765, 1.484404, 1.671369, 1.975107, 2.563413",\ + "1.883740, 2.064379, 2.251344, 2.555082, 3.143388"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.029863, 0.029863, 0.029863, 0.029863, 0.029863",\ + "0.059265, 0.059264, 0.059264, 0.059264, 0.059262",\ + "0.131521, 0.131521, 0.131521, 0.131521, 0.131521",\ + "0.417786, 0.417783, 0.417783, 0.417777, 0.417763",\ + "1.484506, 1.484504, 1.484504, 1.484501, 1.484494",\ + "0.029863, 0.029863, 0.029863, 0.029863, 0.029863",\ + "0.059265, 0.059264, 0.059264, 0.059264, 0.059262",\ + "0.131521, 0.131521, 0.131521, 0.131521, 0.131521",\ + "0.417786, 0.417783, 0.417783, 0.417777, 0.417763",\ + "1.484506, 1.484504, 1.484504, 1.484501, 1.484494",\ + "0.029863, 0.029863, 0.029863, 0.029863, 0.029863",\ + "0.059265, 0.059264, 0.059264, 0.059264, 0.059262",\ + "0.131521, 0.131521, 0.131521, 0.131521, 0.131521",\ + "0.417785, 0.417783, 0.417783, 0.417777, 0.417763",\ + "1.484505, 1.484504, 1.484504, 1.484501, 1.484494",\ + "0.029863, 0.029863, 0.029863, 0.029863, 0.029863",\ + "0.059265, 0.059264, 0.059264, 0.059264, 0.059262",\ + "0.131521, 0.131521, 0.131521, 0.131521, 0.131521",\ + "0.417785, 0.417783, 0.417783, 0.417777, 0.417763",\ + "1.484505, 1.484504, 1.484504, 1.484501, 1.484494",\ + "0.029863, 0.029863, 0.029863, 0.029863, 0.029863",\ + "0.059265, 0.059264, 0.059264, 0.059264, 0.059262",\ + "0.131521, 0.131521, 0.131521, 0.131521, 0.131521",\ + "0.417785, 0.417783, 0.417783, 0.417777, 0.417763",\ + "1.484505, 1.484504, 1.484504, 1.484501, 1.484493"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[6]_redg_min_2463*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[38]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.490508, 0.711036, 0.888618, 1.176984, 1.736809",\ + "0.532203, 0.752732, 0.930314, 1.218679, 1.778504",\ + "0.608383, 0.828912, 1.006494, 1.294859, 1.854684",\ + "0.863773, 1.084302, 1.261884, 1.550249, 2.110074",\ + "1.788229, 2.008758, 2.186340, 2.474705, 3.034531",\ + "0.578896, 0.798355, 0.975899, 1.264289, 1.824162",\ + "0.620592, 0.840050, 1.017595, 1.305984, 1.865858",\ + "0.696772, 0.916230, 1.093775, 1.382164, 1.942038",\ + "0.952161, 1.171620, 1.349165, 1.637554, 2.197427",\ + "1.876618, 2.096076, 2.273621, 2.562011, 3.121884",\ + "0.668261, 0.878687, 1.055926, 1.344317, 1.904194",\ + "0.709957, 0.920382, 1.097622, 1.386013, 1.945889",\ + "0.786137, 0.996562, 1.173802, 1.462193, 2.022069",\ + "1.041527, 1.251952, 1.429191, 1.717583, 2.277459",\ + "1.965983, 2.176409, 2.353648, 2.642039, 3.201916",\ + "0.731942, 0.936503, 1.113619, 1.401746, 1.961208",\ + "0.773637, 0.978198, 1.155315, 1.443442, 2.002903",\ + "0.849817, 1.054379, 1.231495, 1.519622, 2.079083",\ + "1.105207, 1.309768, 1.486884, 1.775012, 2.334473",\ + "2.029663, 2.234225, 2.411341, 2.699468, 3.258930",\ + "1.063585, 1.241717, 1.417274, 1.704917, 2.263427",\ + "1.105281, 1.283412, 1.458970, 1.746613, 2.305123",\ + "1.181460, 1.359592, 1.535150, 1.822793, 2.381303",\ + "1.436850, 1.614982, 1.790540, 2.078182, 2.636693",\ + "2.361307, 2.539439, 2.714996, 3.002639, 3.561149"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070076, 0.070076, 0.070076, 0.070076, 0.070076",\ + "0.199409, 0.199409, 0.199409, 0.199409, 0.199410",\ + "0.685874, 0.685874, 0.685874, 0.685874, 0.685874",\ + "2.455194, 2.455194, 2.455194, 2.455194, 2.455194",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070076, 0.070076, 0.070076, 0.070076, 0.070076",\ + "0.199409, 0.199409, 0.199409, 0.199409, 0.199410",\ + "0.685874, 0.685874, 0.685874, 0.685874, 0.685874",\ + "2.455194, 2.455194, 2.455194, 2.455194, 2.455194",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070076, 0.070076, 0.070076, 0.070076, 0.070076",\ + "0.199409, 0.199409, 0.199409, 0.199409, 0.199410",\ + "0.685874, 0.685874, 0.685874, 0.685874, 0.685874",\ + "2.455194, 2.455194, 2.455194, 2.455194, 2.455194",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070076, 0.070076, 0.070076, 0.070076, 0.070076",\ + "0.199409, 0.199409, 0.199409, 0.199409, 0.199410",\ + "0.685874, 0.685874, 0.685874, 0.685874, 0.685874",\ + "2.455194, 2.455194, 2.455194, 2.455194, 2.455194",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070076, 0.070076, 0.070076, 0.070076, 0.070076",\ + "0.199409, 0.199409, 0.199409, 0.199409, 0.199410",\ + "0.685874, 0.685874, 0.685874, 0.685874, 0.685874",\ + "2.455194, 2.455194, 2.455194, 2.455194, 2.455194"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.510756, 0.731284, 0.908866, 1.197232, 1.757056",\ + "0.543002, 0.763530, 0.941112, 1.229478, 1.789302",\ + "0.593318, 0.813846, 0.991428, 1.279794, 1.839619",\ + "0.753982, 0.974510, 1.152092, 1.440458, 2.000283",\ + "1.335097, 1.555626, 1.733208, 2.021573, 2.581398",\ + "0.599144, 0.818602, 0.996147, 1.284537, 1.844410",\ + "0.631390, 0.850848, 1.028393, 1.316783, 1.876656",\ + "0.681706, 0.901165, 1.078709, 1.367099, 1.926972",\ + "0.842370, 1.061828, 1.239373, 1.527763, 2.087636",\ + "1.423486, 1.642944, 1.820489, 2.108878, 2.668751",\ + "0.688509, 0.898935, 1.076174, 1.364565, 1.924441",\ + "0.720755, 0.931181, 1.108420, 1.396811, 1.956687",\ + "0.771071, 0.981497, 1.158736, 1.447127, 2.007004",\ + "0.931735, 1.142161, 1.319400, 1.607791, 2.167668",\ + "1.512851, 1.723276, 1.900516, 2.188907, 2.748783",\ + "0.752190, 0.956751, 1.133867, 1.421994, 1.981456",\ + "0.784436, 0.988997, 1.166113, 1.454240, 2.013701",\ + "0.834752, 1.039313, 1.216429, 1.504556, 2.064018",\ + "0.995416, 1.199977, 1.377093, 1.665220, 2.224682",\ + "1.576531, 1.781092, 1.958208, 2.246336, 2.805797",\ + "1.083833, 1.261965, 1.437522, 1.725165, 2.283675",\ + "1.116079, 1.294211, 1.469768, 1.757411, 2.315921",\ + "1.166395, 1.344527, 1.520084, 1.807727, 2.366237",\ + "1.327059, 1.505191, 1.680748, 1.968391, 2.526901",\ + "1.908174, 2.086306, 2.261864, 2.549506, 3.108017"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.029703, 0.029703, 0.029703, 0.029703, 0.029703",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131485, 0.131485, 0.131485, 0.131485, 0.131485",\ + "0.419479, 0.419479, 0.419479, 0.419479, 0.419479",\ + "1.483052, 1.483052, 1.483052, 1.483052, 1.483052",\ + "0.029703, 0.029703, 0.029703, 0.029703, 0.029703",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131485, 0.131485, 0.131485, 0.131485, 0.131485",\ + "0.419479, 0.419479, 0.419479, 0.419479, 0.419479",\ + "1.483052, 1.483052, 1.483052, 1.483052, 1.483052",\ + "0.029703, 0.029703, 0.029703, 0.029703, 0.029703",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131485, 0.131485, 0.131485, 0.131485, 0.131485",\ + "0.419479, 0.419479, 0.419479, 0.419479, 0.419479",\ + "1.483052, 1.483052, 1.483052, 1.483052, 1.483052",\ + "0.029703, 0.029703, 0.029703, 0.029703, 0.029703",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131485, 0.131485, 0.131485, 0.131485, 0.131485",\ + "0.419479, 0.419479, 0.419479, 0.419479, 0.419479",\ + "1.483052, 1.483052, 1.483052, 1.483052, 1.483052",\ + "0.029703, 0.029703, 0.029703, 0.029703, 0.029703",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131485, 0.131485, 0.131485, 0.131485, 0.131485",\ + "0.419479, 0.419479, 0.419479, 0.419479, 0.419479",\ + "1.483052, 1.483052, 1.483052, 1.483052, 1.483052"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[6]_redg_min_2279*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[39]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.464141, 0.703934, 0.888128, 1.182401, 1.751067",\ + "0.505836, 0.745630, 0.929824, 1.224097, 1.792763",\ + "0.582016, 0.821810, 1.006004, 1.300277, 1.868943",\ + "0.837406, 1.077200, 1.261394, 1.555666, 2.124333",\ + "1.761863, 2.001656, 2.185850, 2.480123, 3.048789",\ + "0.552479, 0.791253, 0.975409, 1.269706, 1.838421",\ + "0.594175, 0.832948, 1.017105, 1.311402, 1.880116",\ + "0.670355, 0.909128, 1.093285, 1.387582, 1.956296",\ + "0.925745, 1.164518, 1.348675, 1.642971, 2.211686",\ + "1.850201, 2.088974, 2.273131, 2.567428, 3.136143",\ + "0.641618, 0.871586, 1.055436, 1.349735, 1.918452",\ + "0.683313, 0.913281, 1.097132, 1.391430, 1.960148",\ + "0.759493, 0.989461, 1.173312, 1.467610, 2.036328",\ + "1.014883, 1.244851, 1.428701, 1.723000, 2.291718",\ + "1.939340, 2.169307, 2.353158, 2.647456, 3.216174",\ + "0.705051, 0.929417, 1.113144, 1.407174, 1.975487",\ + "0.746746, 0.971112, 1.154840, 1.448870, 2.017183",\ + "0.822926, 1.047292, 1.231020, 1.525050, 2.093363",\ + "1.078316, 1.302682, 1.486409, 1.780439, 2.348753",\ + "2.002773, 2.227139, 2.410866, 2.704896, 3.273209",\ + "1.040106, 1.234739, 1.416802, 1.710354, 2.277733",\ + "1.081802, 1.276435, 1.458498, 1.752050, 2.319428",\ + "1.157982, 1.352615, 1.534678, 1.828230, 2.395608",\ + "1.413371, 1.608004, 1.790067, 2.083619, 2.650998",\ + "2.337828, 2.532461, 2.714524, 3.008076, 3.575455"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070076, 0.070076, 0.070076, 0.070076, 0.070076",\ + "0.199408, 0.199408, 0.199409, 0.199409, 0.199411",\ + "0.685874, 0.685874, 0.685874, 0.685874, 0.685874",\ + "2.455194, 2.455194, 2.455194, 2.455194, 2.455194",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070076, 0.070076, 0.070076, 0.070076, 0.070076",\ + "0.199408, 0.199408, 0.199409, 0.199409, 0.199411",\ + "0.685874, 0.685874, 0.685874, 0.685874, 0.685874",\ + "2.455194, 2.455194, 2.455194, 2.455194, 2.455194",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070076, 0.070076, 0.070076, 0.070076, 0.070076",\ + "0.199408, 0.199408, 0.199409, 0.199409, 0.199411",\ + "0.685874, 0.685874, 0.685874, 0.685874, 0.685874",\ + "2.455194, 2.455194, 2.455194, 2.455194, 2.455194",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070076, 0.070076, 0.070076, 0.070076, 0.070076",\ + "0.199408, 0.199408, 0.199409, 0.199409, 0.199411",\ + "0.685874, 0.685874, 0.685874, 0.685874, 0.685874",\ + "2.455194, 2.455194, 2.455194, 2.455194, 2.455194",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070076, 0.070076, 0.070076, 0.070076, 0.070076",\ + "0.199408, 0.199408, 0.199409, 0.199409, 0.199411",\ + "0.685874, 0.685874, 0.685874, 0.685874, 0.685874",\ + "2.455194, 2.455194, 2.455194, 2.455194, 2.455194"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.484389, 0.724182, 0.908376, 1.202649, 1.771315",\ + "0.516635, 0.756428, 0.940622, 1.234895, 1.803561",\ + "0.566951, 0.806745, 0.990938, 1.285211, 1.853878",\ + "0.727615, 0.967409, 1.151602, 1.445875, 2.014541",\ + "1.308730, 1.548524, 1.732718, 2.026990, 2.595657",\ + "0.572727, 0.811501, 0.995657, 1.289954, 1.858669",\ + "0.604973, 0.843747, 1.027903, 1.322200, 1.890915",\ + "0.655290, 0.894063, 1.078219, 1.372516, 1.941231",\ + "0.815953, 1.054727, 1.238883, 1.533180, 2.101895",\ + "1.397069, 1.635842, 1.819999, 2.114295, 2.683010",\ + "0.661866, 0.891834, 1.075684, 1.369982, 1.938700",\ + "0.694112, 0.924080, 1.107930, 1.402228, 1.970946",\ + "0.744428, 0.974396, 1.158246, 1.452545, 2.021263",\ + "0.905092, 1.135060, 1.318910, 1.613209, 2.181926",\ + "1.486207, 1.716175, 1.900026, 2.194324, 2.763042",\ + "0.725299, 0.949665, 1.133392, 1.427422, 1.995735",\ + "0.757545, 0.981911, 1.165638, 1.459668, 2.027981",\ + "0.807861, 1.032227, 1.215954, 1.509984, 2.078298",\ + "0.968525, 1.192891, 1.376618, 1.670648, 2.238961",\ + "1.549640, 1.774006, 1.957734, 2.251764, 2.820077",\ + "1.060354, 1.254987, 1.437050, 1.730602, 2.297981",\ + "1.092600, 1.287233, 1.469296, 1.762848, 2.330226",\ + "1.142916, 1.337549, 1.519612, 1.813164, 2.380543",\ + "1.303580, 1.498213, 1.680276, 1.973828, 2.541207",\ + "1.884696, 2.079328, 2.261392, 2.554944, 3.122322"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.029703, 0.029703, 0.029703, 0.029703, 0.029704",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131484, 0.131484, 0.131484, 0.131485, 0.131485",\ + "0.419474, 0.419474, 0.419474, 0.419474, 0.419474",\ + "1.483052, 1.483052, 1.483052, 1.483052, 1.483052",\ + "0.029703, 0.029703, 0.029703, 0.029703, 0.029704",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131484, 0.131484, 0.131484, 0.131485, 0.131485",\ + "0.419474, 0.419474, 0.419474, 0.419474, 0.419474",\ + "1.483052, 1.483052, 1.483052, 1.483052, 1.483052",\ + "0.029703, 0.029703, 0.029703, 0.029703, 0.029704",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131484, 0.131484, 0.131484, 0.131485, 0.131485",\ + "0.419474, 0.419474, 0.419474, 0.419474, 0.419474",\ + "1.483052, 1.483052, 1.483052, 1.483052, 1.483052",\ + "0.029703, 0.029703, 0.029703, 0.029703, 0.029704",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131484, 0.131484, 0.131484, 0.131485, 0.131485",\ + "0.419474, 0.419474, 0.419474, 0.419474, 0.419474",\ + "1.483052, 1.483052, 1.483052, 1.483052, 1.483052",\ + "0.029703, 0.029703, 0.029703, 0.029703, 0.029704",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131484, 0.131484, 0.131484, 0.131485, 0.131485",\ + "0.419474, 0.419474, 0.419474, 0.419474, 0.419474",\ + "1.483052, 1.483052, 1.483052, 1.483052, 1.483052"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[6]_redg_min_2323*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[41]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.411437, 0.641763, 0.827440, 1.121826, 1.689429",\ + "0.453163, 0.683488, 0.869165, 1.163551, 1.731154",\ + "0.529220, 0.759545, 0.945221, 1.239608, 1.807211",\ + "0.784777, 1.015107, 1.200787, 1.495173, 2.062773",\ + "1.709036, 1.939362, 2.125040, 2.419426, 2.987028",\ + "0.499750, 0.729081, 0.914721, 1.209131, 1.776782",\ + "0.541475, 0.770807, 0.956446, 1.250857, 1.818508",\ + "0.617533, 0.846863, 1.032502, 1.326913, 1.894564",\ + "0.873090, 1.102426, 1.288068, 1.582478, 2.150126",\ + "1.797349, 2.026680, 2.212321, 2.506731, 3.074381",\ + "0.588895, 0.809414, 0.994747, 1.289160, 1.856814",\ + "0.630620, 0.851139, 1.036473, 1.330885, 1.898539",\ + "0.706677, 0.927196, 1.112529, 1.406941, 1.974596",\ + "0.962234, 1.182758, 1.368095, 1.662507, 2.230158",\ + "1.886493, 2.107013, 2.292347, 2.586760, 3.154413",\ + "0.652369, 0.867238, 1.052459, 1.346598, 1.913847",\ + "0.694094, 0.908963, 1.094185, 1.388323, 1.955572",\ + "0.770151, 0.985020, 1.170241, 1.464380, 2.031629",\ + "1.025709, 1.240582, 1.425807, 1.719945, 2.287190",\ + "1.949967, 2.164837, 2.350059, 2.644198, 3.211446",\ + "0.987682, 1.172511, 1.356118, 1.649777, 2.216089",\ + "1.029408, 1.214237, 1.397843, 1.691502, 2.257815",\ + "1.105465, 1.290294, 1.473899, 1.767559, 2.333871",\ + "1.361025, 1.545856, 1.729465, 2.023124, 2.589433",\ + "2.285281, 2.470111, 2.653718, 2.947377, 3.513689"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.025366, 0.025366, 0.025366, 0.025366, 0.025366",\ + "0.070223, 0.070222, 0.070221, 0.070221, 0.070221",\ + "0.199530, 0.199530, 0.199530, 0.199530, 0.199530",\ + "0.686589, 0.686583, 0.686578, 0.686576, 0.686576",\ + "2.452462, 2.452462, 2.452462, 2.452450, 2.452423",\ + "0.025366, 0.025366, 0.025366, 0.025366, 0.025366",\ + "0.070223, 0.070222, 0.070221, 0.070221, 0.070221",\ + "0.199530, 0.199530, 0.199530, 0.199530, 0.199530",\ + "0.686589, 0.686583, 0.686578, 0.686576, 0.686576",\ + "2.452462, 2.452462, 2.452462, 2.452450, 2.452423",\ + "0.025366, 0.025366, 0.025366, 0.025366, 0.025366",\ + "0.070223, 0.070222, 0.070221, 0.070221, 0.070221",\ + "0.199530, 0.199530, 0.199530, 0.199530, 0.199530",\ + "0.686588, 0.686583, 0.686578, 0.686576, 0.686576",\ + "2.452462, 2.452462, 2.452462, 2.452450, 2.452423",\ + "0.025366, 0.025366, 0.025366, 0.025366, 0.025366",\ + "0.070223, 0.070222, 0.070221, 0.070221, 0.070221",\ + "0.199530, 0.199530, 0.199530, 0.199530, 0.199530",\ + "0.686588, 0.686583, 0.686578, 0.686576, 0.686576",\ + "2.452462, 2.452462, 2.452462, 2.452450, 2.452423",\ + "0.025366, 0.025366, 0.025366, 0.025366, 0.025366",\ + "0.070222, 0.070222, 0.070221, 0.070221, 0.070221",\ + "0.199530, 0.199530, 0.199530, 0.199530, 0.199530",\ + "0.686585, 0.686583, 0.686578, 0.686576, 0.686576",\ + "2.452462, 2.452462, 2.452462, 2.452450, 2.452422"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.434036, 0.664363, 0.850040, 1.144426, 1.712028",\ + "0.466066, 0.696393, 0.882070, 1.176457, 1.744059",\ + "0.516455, 0.746780, 0.932457, 1.226843, 1.794446",\ + "0.677484, 0.907807, 1.093482, 1.387868, 1.955473",\ + "1.257459, 1.487782, 1.673457, 1.967843, 2.535448",\ + "0.522349, 0.751681, 0.937321, 1.231731, 1.799382",\ + "0.554379, 0.783711, 0.969351, 1.263762, 1.831412",\ + "0.604768, 0.834099, 1.019738, 1.314148, 1.881800",\ + "0.765797, 0.995125, 1.180763, 1.475173, 2.042827",\ + "1.345772, 1.575100, 1.760738, 2.055148, 2.622802",\ + "0.611494, 0.832013, 1.017348, 1.311760, 1.879413",\ + "0.643524, 0.864044, 1.049378, 1.343790, 1.911444",\ + "0.693912, 0.914431, 1.099764, 1.394177, 1.961831",\ + "0.854941, 1.075458, 1.260790, 1.555202, 2.122858",\ + "1.434916, 1.655433, 1.840765, 2.135177, 2.702833",\ + "0.674968, 0.889838, 1.075059, 1.369198, 1.936446",\ + "0.706998, 0.921868, 1.107090, 1.401229, 1.968477",\ + "0.757386, 0.972255, 1.157476, 1.451615, 2.018864",\ + "0.918415, 1.133282, 1.318501, 1.612640, 2.179891",\ + "1.498390, 1.713257, 1.898476, 2.192615, 2.759866",\ + "1.010282, 1.195111, 1.378718, 1.672377, 2.238689",\ + "1.042312, 1.227141, 1.410748, 1.704407, 2.270719",\ + "1.092700, 1.277529, 1.461135, 1.754794, 2.321106",\ + "1.253727, 1.438555, 1.622160, 1.915819, 2.482133",\ + "1.833702, 2.018530, 2.202135, 2.495794, 3.062109"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.029863, 0.029863, 0.029863, 0.029863, 0.029863",\ + "0.059264, 0.059264, 0.059264, 0.059264, 0.059262",\ + "0.131521, 0.131521, 0.131521, 0.131521, 0.131521",\ + "0.417782, 0.417782, 0.417782, 0.417778, 0.417769",\ + "1.484504, 1.484504, 1.484504, 1.484501, 1.484496",\ + "0.029863, 0.029863, 0.029863, 0.029863, 0.029863",\ + "0.059264, 0.059264, 0.059264, 0.059264, 0.059262",\ + "0.131521, 0.131521, 0.131521, 0.131521, 0.131521",\ + "0.417782, 0.417782, 0.417782, 0.417778, 0.417769",\ + "1.484504, 1.484504, 1.484504, 1.484501, 1.484496",\ + "0.029863, 0.029863, 0.029863, 0.029863, 0.029863",\ + "0.059264, 0.059264, 0.059264, 0.059264, 0.059262",\ + "0.131521, 0.131521, 0.131521, 0.131521, 0.131521",\ + "0.417782, 0.417782, 0.417782, 0.417778, 0.417769",\ + "1.484504, 1.484504, 1.484504, 1.484501, 1.484496",\ + "0.029863, 0.029863, 0.029863, 0.029863, 0.029863",\ + "0.059264, 0.059264, 0.059264, 0.059264, 0.059262",\ + "0.131521, 0.131521, 0.131521, 0.131521, 0.131521",\ + "0.417782, 0.417782, 0.417782, 0.417778, 0.417769",\ + "1.484504, 1.484504, 1.484504, 1.484501, 1.484496",\ + "0.029863, 0.029863, 0.029863, 0.029863, 0.029863",\ + "0.059264, 0.059264, 0.059264, 0.059264, 0.059262",\ + "0.131521, 0.131521, 0.131521, 0.131521, 0.131521",\ + "0.417782, 0.417782, 0.417782, 0.417778, 0.417769",\ + "1.484504, 1.484504, 1.484504, 1.484501, 1.484496"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[6]_redg_min_2346*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[46]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.554942, 0.776691, 0.954630, 1.243547, 1.804386",\ + "0.596638, 0.818387, 0.996327, 1.285244, 1.846083",\ + "0.672820, 0.894569, 1.072508, 1.361425, 1.922264",\ + "0.928215, 1.149964, 1.327903, 1.616820, 2.177659",\ + "1.852598, 2.074347, 2.252286, 2.541204, 3.102043",\ + "0.643350, 0.864010, 1.041911, 1.330852, 1.891740",\ + "0.685047, 0.905706, 1.083608, 1.372549, 1.933436",\ + "0.761228, 0.981887, 1.159789, 1.448730, 2.009617",\ + "1.016623, 1.237282, 1.415184, 1.704125, 2.265012",\ + "1.941007, 2.161666, 2.339567, 2.628509, 3.189397",\ + "0.732441, 0.944345, 1.121938, 1.410881, 1.971771",\ + "0.774137, 0.986041, 1.163634, 1.452577, 2.013468",\ + "0.850318, 1.062222, 1.239816, 1.528758, 2.089649",\ + "1.105714, 1.317617, 1.495211, 1.784153, 2.345044",\ + "2.030097, 2.242001, 2.419594, 2.708537, 3.269428",\ + "0.795719, 1.002162, 1.179631, 1.468310, 2.028787",\ + "0.837415, 1.043858, 1.221328, 1.510007, 2.070483",\ + "0.913596, 1.120039, 1.297509, 1.586188, 2.146664",\ + "1.168992, 1.375434, 1.552904, 1.841583, 2.402059",\ + "2.093375, 2.299818, 2.477287, 2.765967, 3.326444",\ + "1.127968, 1.307390, 1.483287, 1.771482, 2.331008",\ + "1.169664, 1.349087, 1.524984, 1.813179, 2.372704",\ + "1.245846, 1.425268, 1.601165, 1.889360, 2.448885",\ + "1.501241, 1.680663, 1.856560, 2.144755, 2.704280",\ + "2.425624, 2.605047, 2.780944, 3.069139, 3.628665"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070069, 0.070069",\ + "0.199414, 0.199414, 0.199414, 0.199414, 0.199414",\ + "0.685793, 0.685793, 0.685793, 0.685794, 0.685795",\ + "2.455201, 2.455201, 2.455201, 2.455201, 2.455200",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070069, 0.070069",\ + "0.199414, 0.199414, 0.199414, 0.199414, 0.199414",\ + "0.685793, 0.685793, 0.685793, 0.685794, 0.685795",\ + "2.455201, 2.455201, 2.455201, 2.455201, 2.455200",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070069, 0.070069",\ + "0.199414, 0.199414, 0.199414, 0.199414, 0.199414",\ + "0.685793, 0.685793, 0.685793, 0.685794, 0.685795",\ + "2.455201, 2.455201, 2.455201, 2.455201, 2.455200",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070069, 0.070069",\ + "0.199414, 0.199414, 0.199414, 0.199414, 0.199414",\ + "0.685793, 0.685793, 0.685793, 0.685794, 0.685795",\ + "2.455201, 2.455201, 2.455201, 2.455201, 2.455200",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070069, 0.070069",\ + "0.199414, 0.199414, 0.199414, 0.199414, 0.199414",\ + "0.685793, 0.685793, 0.685793, 0.685794, 0.685795",\ + "2.455201, 2.455201, 2.455201, 2.455201, 2.455200"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.575187, 0.796936, 0.974876, 1.263793, 1.824632",\ + "0.607437, 0.829186, 1.007125, 1.296042, 1.856881",\ + "0.657749, 0.879498, 1.057438, 1.346354, 1.907194",\ + "0.818413, 1.040162, 1.218101, 1.507018, 2.067857",\ + "1.399546, 1.621294, 1.799234, 2.088151, 2.648989",\ + "0.663596, 0.884255, 1.062156, 1.351098, 1.911985",\ + "0.695845, 0.916504, 1.094406, 1.383347, 1.944234",\ + "0.746158, 0.966817, 1.144718, 1.433660, 1.994547",\ + "0.906821, 1.127481, 1.305382, 1.594323, 2.155211",\ + "1.487954, 1.708613, 1.886515, 2.175456, 2.736343",\ + "0.752686, 0.964590, 1.142183, 1.431126, 1.992017",\ + "0.784936, 0.996840, 1.174433, 1.463375, 2.024266",\ + "0.835248, 1.047152, 1.224745, 1.513688, 2.074579",\ + "0.995912, 1.207816, 1.385409, 1.674352, 2.235242",\ + "1.577044, 1.788948, 1.966541, 2.255484, 2.816375",\ + "0.815964, 1.022407, 1.199876, 1.488556, 2.049032",\ + "0.848214, 1.054656, 1.232126, 1.520805, 2.081281",\ + "0.898526, 1.104969, 1.282438, 1.571118, 2.131594",\ + "1.059190, 1.265632, 1.443102, 1.731781, 2.292258",\ + "1.640322, 1.846765, 2.024235, 2.312914, 2.873390",\ + "1.148213, 1.327636, 1.503533, 1.791728, 2.351253",\ + "1.180463, 1.359885, 1.535782, 1.823977, 2.383502",\ + "1.230775, 1.410198, 1.586095, 1.874290, 2.433815",\ + "1.391439, 1.570861, 1.746758, 2.034954, 2.594479",\ + "1.972571, 2.151994, 2.327891, 2.616086, 3.175611"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.029705, 0.029705, 0.029705, 0.029705, 0.029705",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131485, 0.131485, 0.131485, 0.131485, 0.131485",\ + "0.419472, 0.419472, 0.419472, 0.419472, 0.419472",\ + "1.482982, 1.482982, 1.482982, 1.482983, 1.482983",\ + "0.029705, 0.029705, 0.029705, 0.029705, 0.029705",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131485, 0.131485, 0.131485, 0.131485, 0.131485",\ + "0.419472, 0.419472, 0.419472, 0.419472, 0.419472",\ + "1.482982, 1.482982, 1.482982, 1.482983, 1.482983",\ + "0.029705, 0.029705, 0.029705, 0.029705, 0.029705",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131485, 0.131485, 0.131485, 0.131485, 0.131485",\ + "0.419472, 0.419472, 0.419472, 0.419472, 0.419472",\ + "1.482982, 1.482982, 1.482982, 1.482983, 1.482983",\ + "0.029705, 0.029705, 0.029705, 0.029705, 0.029705",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131485, 0.131485, 0.131485, 0.131485, 0.131485",\ + "0.419472, 0.419472, 0.419472, 0.419472, 0.419472",\ + "1.482982, 1.482982, 1.482982, 1.482983, 1.482983",\ + "0.029705, 0.029705, 0.029705, 0.029705, 0.029705",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131485, 0.131485, 0.131485, 0.131485, 0.131485",\ + "0.419472, 0.419472, 0.419472, 0.419472, 0.419472",\ + "1.482982, 1.482982, 1.482982, 1.482983, 1.482983"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[6]_redg_min_2465*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[47]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.533753, 0.762081, 0.946644, 1.241934, 1.812791",\ + "0.575449, 0.803777, 0.988340, 1.283630, 1.854487",\ + "0.651630, 0.879958, 1.064522, 1.359811, 1.930668",\ + "0.907026, 1.135353, 1.319917, 1.615206, 2.186064",\ + "1.831408, 2.059737, 2.244300, 2.539591, 3.110448",\ + "0.622078, 0.849399, 1.033925, 1.329239, 1.900144",\ + "0.663775, 0.891095, 1.075621, 1.370935, 1.941841",\ + "0.739956, 0.967276, 1.151803, 1.447117, 2.018022",\ + "0.995351, 1.222671, 1.407198, 1.702512, 2.273417",\ + "1.919734, 2.147055, 2.331581, 2.626896, 3.197802",\ + "0.711467, 0.929729, 1.113952, 1.409267, 1.980176",\ + "0.753164, 0.971426, 1.155648, 1.450964, 2.021872",\ + "0.829345, 1.047607, 1.231829, 1.527145, 2.098053",\ + "1.084740, 1.303002, 1.487225, 1.782540, 2.353448",\ + "2.009123, 2.227385, 2.411608, 2.706924, 3.277833",\ + "0.775260, 0.987553, 1.171661, 1.466710, 2.037218",\ + "0.816956, 1.029250, 1.213358, 1.508406, 2.078914",\ + "0.893137, 1.105431, 1.289539, 1.584587, 2.155095",\ + "1.148533, 1.360826, 1.544934, 1.839983, 2.410490",\ + "2.072916, 2.285210, 2.469318, 2.764367, 3.334875",\ + "1.112589, 1.292819, 1.475319, 1.769892, 2.339470",\ + "1.154285, 1.334515, 1.517015, 1.811588, 2.381167",\ + "1.230466, 1.410696, 1.593196, 1.887769, 2.457348",\ + "1.485862, 1.666091, 1.848592, 2.143165, 2.712743",\ + "2.410245, 2.590475, 2.772975, 3.067549, 3.637128"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070069, 0.070069",\ + "0.199414, 0.199414, 0.199414, 0.199414, 0.199415",\ + "0.685793, 0.685793, 0.685794, 0.685794, 0.685795",\ + "2.455201, 2.455201, 2.455201, 2.455201, 2.455200",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070069, 0.070069",\ + "0.199414, 0.199414, 0.199414, 0.199414, 0.199415",\ + "0.685793, 0.685793, 0.685794, 0.685794, 0.685795",\ + "2.455201, 2.455201, 2.455201, 2.455201, 2.455200",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070069, 0.070069",\ + "0.199414, 0.199414, 0.199414, 0.199414, 0.199415",\ + "0.685793, 0.685793, 0.685794, 0.685794, 0.685795",\ + "2.455201, 2.455201, 2.455201, 2.455201, 2.455200",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070069, 0.070069",\ + "0.199414, 0.199414, 0.199414, 0.199414, 0.199415",\ + "0.685793, 0.685793, 0.685794, 0.685794, 0.685795",\ + "2.455201, 2.455201, 2.455201, 2.455201, 2.455200",\ + "0.025314, 0.025314, 0.025314, 0.025314, 0.025314",\ + "0.070068, 0.070068, 0.070068, 0.070069, 0.070069",\ + "0.199414, 0.199414, 0.199414, 0.199414, 0.199415",\ + "0.685793, 0.685793, 0.685794, 0.685794, 0.685795",\ + "2.455201, 2.455201, 2.455201, 2.455201, 2.455200"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.553998, 0.782326, 0.966889, 1.262179, 1.833036",\ + "0.586248, 0.814575, 0.999139, 1.294429, 1.865286",\ + "0.636560, 0.864888, 1.049451, 1.344741, 1.915598",\ + "0.797224, 1.025552, 1.210115, 1.505405, 2.076262",\ + "1.378356, 1.606684, 1.791247, 2.086537, 2.657394",\ + "0.642324, 0.869644, 1.054170, 1.349484, 1.920390",\ + "0.674573, 0.901893, 1.086420, 1.381734, 1.952639",\ + "0.724886, 0.952206, 1.136732, 1.432046, 2.002952",\ + "0.885549, 1.112870, 1.297396, 1.592710, 2.163615",\ + "1.466682, 1.694002, 1.878528, 2.173842, 2.744748",\ + "0.731713, 0.949975, 1.134197, 1.429513, 2.000421",\ + "0.763962, 0.982224, 1.166447, 1.461762, 2.032670",\ + "0.814275, 1.032536, 1.216759, 1.512075, 2.082983",\ + "0.974938, 1.193200, 1.377423, 1.672738, 2.243647",\ + "1.556071, 1.774333, 1.958555, 2.253871, 2.824779",\ + "0.795505, 1.007799, 1.191907, 1.486955, 2.057463",\ + "0.827755, 1.040048, 1.224156, 1.519205, 2.089712",\ + "0.878067, 1.090361, 1.274469, 1.569517, 2.140025",\ + "1.038731, 1.251024, 1.435133, 1.730181, 2.300689",\ + "1.619863, 1.832157, 2.016265, 2.311313, 2.881821",\ + "1.132834, 1.313064, 1.495564, 1.790137, 2.359716",\ + "1.165084, 1.345313, 1.527814, 1.822387, 2.391965",\ + "1.215396, 1.395626, 1.578126, 1.872699, 2.442278",\ + "1.376060, 1.556290, 1.738790, 2.033363, 2.602942",\ + "1.957192, 2.137422, 2.319922, 2.614495, 3.184073"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003215, 0.011703, 0.042600, 0.154883"); + index_3 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.029705, 0.029705, 0.029705, 0.029705, 0.029705",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131485, 0.131485, 0.131485, 0.131485, 0.131485",\ + "0.419472, 0.419472, 0.419472, 0.419472, 0.419472",\ + "1.482982, 1.482982, 1.482982, 1.482983, 1.482983",\ + "0.029705, 0.029705, 0.029705, 0.029705, 0.029705",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131485, 0.131485, 0.131485, 0.131485, 0.131485",\ + "0.419472, 0.419472, 0.419472, 0.419472, 0.419472",\ + "1.482982, 1.482982, 1.482982, 1.482983, 1.482983",\ + "0.029705, 0.029705, 0.029705, 0.029705, 0.029705",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131485, 0.131485, 0.131485, 0.131485, 0.131485",\ + "0.419472, 0.419472, 0.419472, 0.419472, 0.419472",\ + "1.482982, 1.482982, 1.482982, 1.482983, 1.482983",\ + "0.029705, 0.029705, 0.029705, 0.029705, 0.029705",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131485, 0.131485, 0.131485, 0.131485, 0.131485",\ + "0.419472, 0.419472, 0.419472, 0.419472, 0.419472",\ + "1.482982, 1.482982, 1.482982, 1.482983, 1.482983",\ + "0.029705, 0.029705, 0.029705, 0.029705, 0.029705",\ + "0.059407, 0.059407, 0.059407, 0.059407, 0.059407",\ + "0.131485, 0.131485, 0.131485, 0.131485, 0.131485",\ + "0.419472, 0.419472, 0.419472, 0.419472, 0.419472",\ + "1.482982, 1.482982, 1.482982, 1.482983, 1.482983"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[6]_redg_min_2401*/ + +} /* end of pin tl_o[6] */ + +pin("tl_o[5]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.035370 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : tl_o[5]; + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[16]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.586415, 0.856406, 1.147453, 1.645288, 2.640958",\ + "0.600096, 0.870093, 1.161170, 1.659087, 2.654921",\ + "0.623625, 0.893621, 1.184696, 1.682603, 2.678417",\ + "0.891636, 1.161662, 1.452904, 1.951255, 2.947956",\ + "1.484832, 1.754906, 2.046407, 2.545443, 3.543516",\ + "0.673827, 0.943991, 1.235112, 1.732003, 2.726892",\ + "0.687508, 0.957678, 1.248830, 1.745802, 2.740855",\ + "0.711038, 0.981207, 1.272355, 1.769318, 2.764350",\ + "0.979048, 1.249249, 1.540565, 2.037970, 3.033889",\ + "1.572245, 1.842492, 2.134070, 2.632158, 3.629450",\ + "0.756613, 1.033065, 1.323078, 1.819625, 2.813847",\ + "0.770294, 1.046752, 1.336796, 1.833425, 2.827810",\ + "0.793824, 1.070281, 1.360321, 1.856940, 2.851305",\ + "1.061835, 1.338323, 1.628531, 2.125592, 3.120844",\ + "1.655032, 1.931567, 2.222036, 2.719780, 3.716405",\ + "0.819991, 1.098835, 1.387222, 1.883539, 2.877356",\ + "0.833672, 1.112521, 1.400940, 1.897338, 2.891319",\ + "0.857202, 1.136050, 1.424465, 1.920853, 2.914814",\ + "1.125213, 1.404093, 1.692675, 2.189505, 3.184353",\ + "1.718410, 1.997339, 2.286180, 2.783694, 3.779914",\ + "1.154701, 1.464769, 1.739384, 2.233007, 3.222812",\ + "1.168382, 1.478458, 1.753102, 2.246807, 3.236775",\ + "1.191912, 1.501987, 1.776627, 2.270322, 3.260271",\ + "1.459925, 1.770039, 2.044842, 2.538976, 3.529809",\ + "2.053125, 2.363301, 2.638354, 3.133168, 4.125370"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.122235, 0.122284, 0.123237, 0.126336, 0.132533",\ + "0.151847, 0.152077, 0.152973, 0.155170, 0.159564",\ + "0.201011, 0.201013, 0.201253, 0.202081, 0.203737",\ + "0.823650, 0.823653, 0.823667, 0.823703, 0.823775",\ + "2.222134, 2.222134, 2.222136, 2.222140, 2.222148",\ + "0.122235, 0.122284, 0.123247, 0.126336, 0.132533",\ + "0.151847, 0.152079, 0.152980, 0.155170, 0.159564",\ + "0.201011, 0.201013, 0.201256, 0.202081, 0.203737",\ + "0.823650, 0.823653, 0.823667, 0.823703, 0.823775",\ + "2.222134, 2.222134, 2.222136, 2.222140, 2.222148",\ + "0.122236, 0.122285, 0.123247, 0.126336, 0.132533",\ + "0.151853, 0.152082, 0.152980, 0.155170, 0.159564",\ + "0.201011, 0.201013, 0.201256, 0.202081, 0.203737",\ + "0.823650, 0.823653, 0.823667, 0.823703, 0.823775",\ + "2.222134, 2.222134, 2.222136, 2.222140, 2.222148",\ + "0.122236, 0.122286, 0.123248, 0.126336, 0.132533",\ + "0.151856, 0.152088, 0.152981, 0.155170, 0.159564",\ + "0.201011, 0.201013, 0.201256, 0.202081, 0.203737",\ + "0.823650, 0.823653, 0.823667, 0.823703, 0.823775",\ + "2.222134, 2.222134, 2.222136, 2.222140, 2.222148",\ + "0.122239, 0.122302, 0.123279, 0.126348, 0.132533",\ + "0.151880, 0.152153, 0.153003, 0.155179, 0.159564",\ + "0.201011, 0.201014, 0.201264, 0.202084, 0.203737",\ + "0.823651, 0.823654, 0.823667, 0.823703, 0.823775",\ + "2.222134, 2.222135, 2.222136, 2.222140, 2.222148"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.525645, 0.795489, 1.085730, 1.581432, 2.572836",\ + "0.537639, 0.807524, 1.097989, 1.594284, 2.586873",\ + "0.557233, 0.827173, 1.117941, 1.615037, 2.609230",\ + "0.728499, 0.998614, 1.290344, 1.789985, 2.789268",\ + "1.063132, 1.333237, 1.624904, 2.124381, 3.123334",\ + "0.613058, 0.883074, 1.173382, 1.668147, 2.658770",\ + "0.625052, 0.895109, 1.185643, 1.680999, 2.672807",\ + "0.644646, 0.914759, 1.205598, 1.701752, 2.695163",\ + "0.815911, 1.086201, 1.378008, 1.876700, 2.875202",\ + "1.150545, 1.420823, 1.712568, 2.211096, 3.209268",\ + "0.695842, 0.972144, 1.261348, 1.755769, 2.745725",\ + "0.707837, 0.984180, 1.273609, 1.768621, 2.759762",\ + "0.727431, 1.003831, 1.293564, 1.789375, 2.782119",\ + "0.898699, 1.175277, 1.465974, 1.964322, 2.962157",\ + "1.233333, 1.509899, 1.800534, 2.298718, 3.296223",\ + "0.759218, 1.037910, 1.325492, 1.819683, 2.809234",\ + "0.771213, 1.049947, 1.337753, 1.832534, 2.823271",\ + "0.790808, 1.069599, 1.357708, 1.853288, 2.845628",\ + "0.962077, 1.241050, 1.530119, 2.028236, 3.025666",\ + "1.296711, 1.575672, 1.864679, 2.362631, 3.359732",\ + "1.093920, 1.403797, 1.677632, 2.169142, 3.154690",\ + "1.105917, 1.415847, 1.689899, 2.181997, 3.168727",\ + "1.125515, 1.435517, 1.709862, 2.202754, 3.191083",\ + "1.296794, 1.607024, 1.882299, 2.377712, 3.371122",\ + "1.631427, 1.941643, 2.216857, 2.712107, 3.705188"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.074841, 0.075254, 0.077521, 0.083520, 0.095518",\ + "0.080316, 0.080691, 0.082745, 0.088181, 0.099053",\ + "0.100360, 0.100711, 0.102633, 0.107721, 0.117897",\ + "0.380688, 0.380691, 0.380703, 0.380732, 0.380789",\ + "1.025905, 1.025920, 1.025979, 1.026125, 1.026416",\ + "0.074841, 0.075258, 0.077540, 0.083520, 0.095518",\ + "0.080316, 0.080694, 0.082762, 0.088181, 0.099053",\ + "0.100360, 0.100714, 0.102649, 0.107721, 0.117897",\ + "0.380688, 0.380691, 0.380703, 0.380732, 0.380789",\ + "1.025905, 1.025920, 1.025980, 1.026125, 1.026416",\ + "0.074846, 0.075266, 0.077540, 0.083520, 0.095518",\ + "0.080321, 0.080701, 0.082762, 0.088181, 0.099053",\ + "0.100365, 0.100721, 0.102650, 0.107721, 0.117897",\ + "0.380688, 0.380691, 0.380703, 0.380732, 0.380789",\ + "1.025905, 1.025920, 1.025980, 1.026125, 1.026416",\ + "0.074850, 0.075277, 0.077541, 0.083520, 0.095518",\ + "0.080324, 0.080712, 0.082763, 0.088181, 0.099053",\ + "0.100368, 0.100730, 0.102651, 0.107721, 0.117897",\ + "0.380688, 0.380691, 0.380703, 0.380732, 0.380789",\ + "1.025905, 1.025921, 1.025980, 1.026125, 1.026416",\ + "0.074873, 0.075411, 0.077602, 0.083545, 0.095518",\ + "0.080345, 0.080833, 0.082819, 0.088203, 0.099053",\ + "0.100387, 0.100844, 0.102702, 0.107742, 0.117897",\ + "0.380688, 0.380692, 0.380703, 0.380732, 0.380789",\ + "1.025907, 1.025925, 1.025981, 1.026126, 1.026416"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[5]_redg_2627*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[20]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.792764, 1.054507, 1.346593, 1.853632, 2.867709",\ + "0.806316, 1.068059, 1.360145, 1.867184, 2.881261",\ + "0.829846, 1.091589, 1.383675, 1.890714, 2.904791",\ + "1.097219, 1.358962, 1.651048, 2.158087, 3.172164",\ + "1.691027, 1.952770, 2.244857, 2.751895, 3.765972",\ + "0.880176, 1.142082, 1.434281, 1.940346, 2.953642",\ + "0.893728, 1.155634, 1.447833, 1.953899, 2.967195",\ + "0.917258, 1.179164, 1.471363, 1.977429, 2.990725",\ + "1.184632, 1.446538, 1.738737, 2.244802, 3.258098",\ + "1.778440, 2.040346, 2.332545, 2.838610, 3.851906",\ + "0.961078, 1.231132, 1.522248, 2.027969, 3.040597",\ + "0.974630, 1.244684, 1.535800, 2.041521, 3.054150",\ + "0.998160, 1.268215, 1.559330, 2.065051, 3.077680",\ + "1.265533, 1.535588, 1.826703, 2.332424, 3.345053",\ + "1.859341, 2.129396, 2.420511, 2.926232, 3.938861",\ + "1.020773, 1.296868, 1.586394, 2.091882, 3.104106",\ + "1.034325, 1.310420, 1.599946, 2.105434, 3.117659",\ + "1.057855, 1.333951, 1.623476, 2.128964, 3.141189",\ + "1.325228, 1.601324, 1.890849, 2.396338, 3.408562",\ + "1.919036, 2.195132, 2.484657, 2.990146, 4.002370",\ + "1.354614, 1.662408, 1.938648, 2.441389, 3.449563",\ + "1.368166, 1.675960, 1.952201, 2.454941, 3.463115",\ + "1.391696, 1.699491, 1.975731, 2.478471, 3.486645",\ + "1.659069, 1.966864, 2.243104, 2.745844, 3.754018",\ + "2.252877, 2.560672, 2.836912, 3.339653, 4.347826"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.121333, 0.121333, 0.121333, 0.121333, 0.121333",\ + "0.151701, 0.151701, 0.151701, 0.151701, 0.151701",\ + "0.201129, 0.201129, 0.201129, 0.201129, 0.201129",\ + "0.823409, 0.823409, 0.823409, 0.823409, 0.823409",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121333, 0.121333, 0.121333, 0.121333, 0.121333",\ + "0.151701, 0.151701, 0.151701, 0.151701, 0.151701",\ + "0.201129, 0.201129, 0.201129, 0.201129, 0.201129",\ + "0.823409, 0.823409, 0.823409, 0.823409, 0.823409",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121333, 0.121333, 0.121333, 0.121333, 0.121333",\ + "0.151701, 0.151701, 0.151701, 0.151701, 0.151701",\ + "0.201129, 0.201129, 0.201129, 0.201129, 0.201129",\ + "0.823409, 0.823409, 0.823409, 0.823409, 0.823409",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121333, 0.121333, 0.121333, 0.121333, 0.121333",\ + "0.151701, 0.151701, 0.151701, 0.151701, 0.151701",\ + "0.201129, 0.201129, 0.201129, 0.201129, 0.201129",\ + "0.823409, 0.823409, 0.823409, 0.823409, 0.823409",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121333, 0.121333, 0.121333, 0.121333, 0.121333",\ + "0.151701, 0.151701, 0.151701, 0.151701, 0.151701",\ + "0.201129, 0.201129, 0.201129, 0.201129, 0.201129",\ + "0.823409, 0.823409, 0.823409, 0.823409, 0.823409",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.760378, 1.022121, 1.314208, 1.821246, 2.835323",\ + "0.768321, 1.030064, 1.322150, 1.829189, 2.843266",\ + "0.781801, 1.043544, 1.335630, 1.842669, 2.856746",\ + "0.935753, 1.197497, 1.489583, 1.996622, 3.010698",\ + "1.275653, 1.537396, 1.829482, 2.336521, 3.350598",\ + "0.847791, 1.109697, 1.401896, 1.907961, 2.921257",\ + "0.855733, 1.117639, 1.409838, 1.915904, 2.929199",\ + "0.869213, 1.131119, 1.423318, 1.929384, 2.942679",\ + "1.023166, 1.285072, 1.577271, 2.083336, 3.096632",\ + "1.363066, 1.624972, 1.917171, 2.423236, 3.436532",\ + "0.928693, 1.198747, 1.489862, 1.995583, 3.008212",\ + "0.936635, 1.206689, 1.497805, 2.003526, 3.016155",\ + "0.950115, 1.220170, 1.511285, 2.017006, 3.029634",\ + "1.104068, 1.374122, 1.665238, 2.170959, 3.183587",\ + "1.443967, 1.714022, 2.005137, 2.510858, 3.523487",\ + "0.988388, 1.264483, 1.554008, 2.059497, 3.071721",\ + "0.996330, 1.272425, 1.561951, 2.067439, 3.079664",\ + "1.009810, 1.285905, 1.575431, 2.080919, 3.093143",\ + "1.163763, 1.439858, 1.729384, 2.234872, 3.247096",\ + "1.503662, 1.779758, 2.069283, 2.574772, 3.586996",\ + "1.322228, 1.630023, 1.906263, 2.409003, 3.417177",\ + "1.330171, 1.637965, 1.914206, 2.416946, 3.425119",\ + "1.343651, 1.651445, 1.927685, 2.430426, 3.438600",\ + "1.497604, 1.805398, 2.081638, 2.584379, 3.592552",\ + "1.837503, 2.145298, 2.421538, 2.924278, 3.932452"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.061223, 0.061223, 0.061223, 0.061223, 0.061223",\ + "0.068571, 0.068571, 0.068571, 0.068571, 0.068571",\ + "0.090396, 0.090396, 0.090396, 0.090396, 0.090396",\ + "0.380686, 0.380686, 0.380686, 0.380686, 0.380686",\ + "1.025895, 1.025895, 1.025895, 1.025895, 1.025895",\ + "0.061223, 0.061223, 0.061223, 0.061223, 0.061223",\ + "0.068571, 0.068571, 0.068571, 0.068571, 0.068571",\ + "0.090396, 0.090396, 0.090396, 0.090396, 0.090396",\ + "0.380686, 0.380686, 0.380686, 0.380686, 0.380686",\ + "1.025895, 1.025895, 1.025895, 1.025895, 1.025895",\ + "0.061223, 0.061223, 0.061223, 0.061223, 0.061223",\ + "0.068571, 0.068571, 0.068571, 0.068571, 0.068571",\ + "0.090396, 0.090396, 0.090396, 0.090396, 0.090396",\ + "0.380686, 0.380686, 0.380686, 0.380686, 0.380686",\ + "1.025895, 1.025895, 1.025895, 1.025895, 1.025895",\ + "0.061223, 0.061223, 0.061223, 0.061223, 0.061223",\ + "0.068571, 0.068571, 0.068571, 0.068571, 0.068571",\ + "0.090396, 0.090396, 0.090396, 0.090396, 0.090396",\ + "0.380686, 0.380686, 0.380686, 0.380686, 0.380686",\ + "1.025895, 1.025895, 1.025895, 1.025895, 1.025895",\ + "0.061223, 0.061223, 0.061223, 0.061223, 0.061223",\ + "0.068571, 0.068571, 0.068571, 0.068571, 0.068571",\ + "0.090396, 0.090396, 0.090396, 0.090396, 0.090396",\ + "0.380686, 0.380686, 0.380686, 0.380686, 0.380686",\ + "1.025895, 1.025895, 1.025895, 1.025895, 1.025895"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[5]_redg_2734*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[22]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.773575, 1.028253, 1.310824, 1.779371, 2.716465",\ + "0.787127, 1.041805, 1.324376, 1.792923, 2.730017",\ + "0.810657, 1.065335, 1.347906, 1.816453, 2.753547",\ + "1.078030, 1.332708, 1.615279, 2.083826, 3.020920",\ + "1.671839, 1.926517, 2.209088, 2.677635, 3.614729",\ + "0.860984, 1.115846, 1.398389, 1.866085, 2.802399",\ + "0.874536, 1.129398, 1.411941, 1.879637, 2.815951",\ + "0.898067, 1.152928, 1.435471, 1.903167, 2.839481",\ + "1.165440, 1.420301, 1.702844, 2.170541, 3.106854",\ + "1.759248, 2.014110, 2.296653, 2.764349, 3.700663",\ + "0.941840, 1.204919, 1.486352, 1.953707, 2.889354",\ + "0.955392, 1.218471, 1.499904, 1.967259, 2.902906",\ + "0.978923, 1.242001, 1.523435, 1.990789, 2.926436",\ + "1.246296, 1.509374, 1.790808, 2.258162, 3.193809",\ + "1.840104, 2.103183, 2.384616, 2.851971, 3.787618",\ + "0.999500, 1.270687, 1.550492, 2.017620, 2.952863",\ + "1.013052, 1.284239, 1.564044, 2.031172, 2.966415",\ + "1.036583, 1.307769, 1.587574, 2.054702, 2.989945",\ + "1.303956, 1.575142, 1.854947, 2.322075, 3.257318",\ + "1.897764, 2.168951, 2.448756, 2.915884, 3.851127",\ + "1.331207, 1.636652, 1.902354, 2.366964, 3.298319",\ + "1.344759, 1.650204, 1.915906, 2.380516, 3.311871",\ + "1.368289, 1.673734, 1.939437, 2.404047, 3.335401",\ + "1.635662, 1.941107, 2.206810, 2.671420, 3.602774",\ + "2.229471, 2.534916, 2.800618, 3.265228, 4.196583"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.121333, 0.121333, 0.121333, 0.121333, 0.121333",\ + "0.151701, 0.151701, 0.151701, 0.151701, 0.151701",\ + "0.201129, 0.201129, 0.201129, 0.201129, 0.201129",\ + "0.823409, 0.823409, 0.823409, 0.823409, 0.823409",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121333, 0.121333, 0.121333, 0.121333, 0.121333",\ + "0.151701, 0.151701, 0.151701, 0.151701, 0.151701",\ + "0.201129, 0.201129, 0.201129, 0.201129, 0.201129",\ + "0.823409, 0.823409, 0.823409, 0.823409, 0.823409",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121333, 0.121333, 0.121333, 0.121333, 0.121333",\ + "0.151701, 0.151701, 0.151701, 0.151701, 0.151701",\ + "0.201129, 0.201129, 0.201129, 0.201129, 0.201129",\ + "0.823409, 0.823409, 0.823409, 0.823409, 0.823409",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121333, 0.121333, 0.121333, 0.121333, 0.121333",\ + "0.151701, 0.151701, 0.151701, 0.151701, 0.151701",\ + "0.201129, 0.201129, 0.201129, 0.201129, 0.201129",\ + "0.823409, 0.823409, 0.823409, 0.823409, 0.823409",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121333, 0.121333, 0.121333, 0.121333, 0.121333",\ + "0.151701, 0.151701, 0.151701, 0.151701, 0.151701",\ + "0.201129, 0.201129, 0.201129, 0.201129, 0.201129",\ + "0.823409, 0.823409, 0.823409, 0.823409, 0.823409",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.741190, 0.995868, 1.278439, 1.746986, 2.684080",\ + "0.749133, 1.003811, 1.286381, 1.754929, 2.692023",\ + "0.762613, 1.017291, 1.299861, 1.768409, 2.705503",\ + "0.916565, 1.171243, 1.453814, 1.922361, 2.859455",\ + "1.256465, 1.511143, 1.793714, 2.262261, 3.199355",\ + "0.828600, 1.083461, 1.366004, 1.833700, 2.770014",\ + "0.836542, 1.091403, 1.373946, 1.841643, 2.777956",\ + "0.850022, 1.104883, 1.387426, 1.855123, 2.791436",\ + "1.003975, 1.258836, 1.541379, 2.009076, 2.945389",\ + "1.343874, 1.598736, 1.881279, 2.348975, 3.285289",\ + "0.909456, 1.172534, 1.453968, 1.921322, 2.856969",\ + "0.917398, 1.180476, 1.461910, 1.929265, 2.864911",\ + "0.930878, 1.193956, 1.475390, 1.942744, 2.878391",\ + "1.084831, 1.347909, 1.629343, 2.096697, 3.032344",\ + "1.424730, 1.687809, 1.969242, 2.436597, 3.372244",\ + "0.967116, 1.238302, 1.518107, 1.985235, 2.920478",\ + "0.975058, 1.246245, 1.526050, 1.993178, 2.928420",\ + "0.988538, 1.259725, 1.539530, 2.006658, 2.941900",\ + "1.142491, 1.413677, 1.693483, 2.160611, 3.095853",\ + "1.482390, 1.753577, 2.033382, 2.500510, 3.435753",\ + "1.298822, 1.604267, 1.869970, 2.334579, 3.265934",\ + "1.306764, 1.612210, 1.877912, 2.342522, 3.273876",\ + "1.320244, 1.625690, 1.891392, 2.356002, 3.287356",\ + "1.474197, 1.779642, 2.045345, 2.509955, 3.441309",\ + "1.814097, 2.119542, 2.385244, 2.849854, 3.781209"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.061223, 0.061223, 0.061223, 0.061223, 0.061223",\ + "0.068571, 0.068571, 0.068571, 0.068571, 0.068571",\ + "0.090396, 0.090396, 0.090396, 0.090396, 0.090396",\ + "0.380686, 0.380686, 0.380686, 0.380686, 0.380686",\ + "1.025895, 1.025895, 1.025895, 1.025895, 1.025895",\ + "0.061223, 0.061223, 0.061223, 0.061223, 0.061223",\ + "0.068571, 0.068571, 0.068571, 0.068571, 0.068571",\ + "0.090396, 0.090396, 0.090396, 0.090396, 0.090396",\ + "0.380686, 0.380686, 0.380686, 0.380686, 0.380686",\ + "1.025895, 1.025895, 1.025895, 1.025895, 1.025895",\ + "0.061223, 0.061223, 0.061223, 0.061223, 0.061223",\ + "0.068571, 0.068571, 0.068571, 0.068571, 0.068571",\ + "0.090396, 0.090396, 0.090396, 0.090396, 0.090396",\ + "0.380686, 0.380686, 0.380686, 0.380686, 0.380686",\ + "1.025895, 1.025895, 1.025895, 1.025895, 1.025895",\ + "0.061223, 0.061223, 0.061223, 0.061223, 0.061223",\ + "0.068571, 0.068571, 0.068571, 0.068571, 0.068571",\ + "0.090396, 0.090396, 0.090396, 0.090396, 0.090396",\ + "0.380686, 0.380686, 0.380686, 0.380686, 0.380686",\ + "1.025895, 1.025895, 1.025895, 1.025895, 1.025895",\ + "0.061223, 0.061223, 0.061223, 0.061223, 0.061223",\ + "0.068571, 0.068571, 0.068571, 0.068571, 0.068571",\ + "0.090396, 0.090396, 0.090396, 0.090396, 0.090396",\ + "0.380686, 0.380686, 0.380686, 0.380686, 0.380686",\ + "1.025895, 1.025895, 1.025895, 1.025895, 1.025895"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[5]_redg*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[23]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.741012, 0.979467, 1.257014, 1.743332, 2.715968",\ + "0.754606, 0.993061, 1.270608, 1.756926, 2.729561",\ + "0.778146, 1.016601, 1.294148, 1.780466, 2.753102",\ + "1.045683, 1.284138, 1.561685, 2.048002, 3.020638",\ + "1.638147, 1.876602, 2.154149, 2.640466, 3.613101",\ + "0.828421, 1.066996, 1.344635, 1.830046, 2.801901",\ + "0.842015, 1.080589, 1.358228, 1.843640, 2.815495",\ + "0.865555, 1.104130, 1.381769, 1.867180, 2.839035",\ + "1.133092, 1.371667, 1.649306, 2.134717, 3.106571",\ + "1.725556, 1.964131, 2.241770, 2.727180, 3.699034",\ + "0.909283, 1.155921, 1.432599, 1.917668, 2.888856",\ + "0.922877, 1.169514, 1.446193, 1.931262, 2.902450",\ + "0.946417, 1.193055, 1.469733, 1.954802, 2.925990",\ + "1.213954, 1.460592, 1.737270, 2.222339, 3.193527",\ + "1.806418, 2.053056, 2.329734, 2.814802, 3.785990",\ + "0.966958, 1.221474, 1.496742, 1.981581, 2.952365",\ + "0.980552, 1.235068, 1.510336, 1.995175, 2.965959",\ + "1.004092, 1.258608, 1.533876, 2.018715, 2.989499",\ + "1.271629, 1.526145, 1.801413, 2.286252, 3.257035",\ + "1.864093, 2.118609, 2.393877, 2.878715, 3.849499",\ + "1.288363, 1.584928, 1.848784, 2.330998, 3.297822",\ + "1.301956, 1.598522, 1.862378, 2.344592, 3.311415",\ + "1.325497, 1.622062, 1.885918, 2.368132, 3.334955",\ + "1.593034, 1.889599, 2.153455, 2.635669, 3.602492",\ + "2.185498, 2.482063, 2.745919, 3.228132, 4.194955"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.121485, 0.121485, 0.121485, 0.121485, 0.121484",\ + "0.152032, 0.152032, 0.152032, 0.152031, 0.152028",\ + "0.200984, 0.200984, 0.200984, 0.200984, 0.200984",\ + "0.823612, 0.823612, 0.823612, 0.823612, 0.823612",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121485, 0.121485, 0.121485, 0.121485, 0.121484",\ + "0.152032, 0.152032, 0.152032, 0.152031, 0.152028",\ + "0.200984, 0.200984, 0.200984, 0.200984, 0.200984",\ + "0.823612, 0.823612, 0.823612, 0.823612, 0.823612",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121485, 0.121485, 0.121485, 0.121485, 0.121484",\ + "0.152032, 0.152032, 0.152032, 0.152031, 0.152028",\ + "0.200984, 0.200984, 0.200984, 0.200984, 0.200984",\ + "0.823612, 0.823612, 0.823612, 0.823612, 0.823612",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121485, 0.121485, 0.121485, 0.121485, 0.121484",\ + "0.152032, 0.152032, 0.152032, 0.152031, 0.152028",\ + "0.200984, 0.200984, 0.200984, 0.200984, 0.200984",\ + "0.823612, 0.823612, 0.823612, 0.823612, 0.823612",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121485, 0.121485, 0.121485, 0.121485, 0.121484",\ + "0.152032, 0.152032, 0.152032, 0.152031, 0.152028",\ + "0.200984, 0.200984, 0.200984, 0.200984, 0.200984",\ + "0.823612, 0.823612, 0.823612, 0.823612, 0.823612",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.682520, 0.920976, 1.198522, 1.684841, 2.657480",\ + "0.693882, 0.932337, 1.209884, 1.696203, 2.668840",\ + "0.712620, 0.951075, 1.228621, 1.714940, 2.687577",\ + "0.881167, 1.119623, 1.397169, 1.883486, 2.856120",\ + "1.215977, 1.454432, 1.731979, 2.218296, 3.190930",\ + "0.769929, 1.008504, 1.286143, 1.771556, 2.743413",\ + "0.781291, 1.019865, 1.297505, 1.782917, 2.754774",\ + "0.800029, 1.038603, 1.316242, 1.801654, 2.773510",\ + "0.968576, 1.207151, 1.484790, 1.970200, 2.942054",\ + "1.303386, 1.541960, 1.819599, 2.305010, 3.276864",\ + "0.850791, 1.097429, 1.374108, 1.859177, 2.830368",\ + "0.862152, 1.108790, 1.385469, 1.870539, 2.841729",\ + "0.880890, 1.127528, 1.404207, 1.889276, 2.860465",\ + "1.049438, 1.296076, 1.572754, 2.057822, 3.029009",\ + "1.384248, 1.630886, 1.907564, 2.392632, 3.363819",\ + "0.908466, 1.162982, 1.438250, 1.923091, 2.893877",\ + "0.919828, 1.174344, 1.449612, 1.934452, 2.905238",\ + "0.938565, 1.193082, 1.468349, 1.953189, 2.923974",\ + "1.107113, 1.361629, 1.636897, 2.121735, 3.092518",\ + "1.441923, 1.696439, 1.971707, 2.456545, 3.427328",\ + "1.229871, 1.526436, 1.790293, 2.272508, 3.239333",\ + "1.241232, 1.537798, 1.801654, 2.283869, 3.250694",\ + "1.259970, 1.556535, 1.820392, 2.302606, 3.269430",\ + "1.428518, 1.725083, 1.988939, 2.471152, 3.437974",\ + "1.763328, 2.059893, 2.323749, 2.805962, 3.772784"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.068436, 0.068436, 0.068435, 0.068432, 0.068425",\ + "0.074512, 0.074512, 0.074511, 0.074509, 0.074503",\ + "0.094928, 0.094928, 0.094927, 0.094924, 0.094919",\ + "0.380690, 0.380690, 0.380690, 0.380690, 0.380690",\ + "1.025917, 1.025917, 1.025917, 1.025917, 1.025917",\ + "0.068436, 0.068436, 0.068435, 0.068432, 0.068425",\ + "0.074512, 0.074512, 0.074511, 0.074509, 0.074503",\ + "0.094928, 0.094928, 0.094927, 0.094924, 0.094919",\ + "0.380690, 0.380690, 0.380690, 0.380690, 0.380690",\ + "1.025917, 1.025917, 1.025917, 1.025917, 1.025917",\ + "0.068436, 0.068436, 0.068435, 0.068432, 0.068425",\ + "0.074512, 0.074512, 0.074511, 0.074509, 0.074503",\ + "0.094928, 0.094928, 0.094927, 0.094924, 0.094919",\ + "0.380690, 0.380690, 0.380690, 0.380690, 0.380690",\ + "1.025917, 1.025917, 1.025917, 1.025917, 1.025917",\ + "0.068436, 0.068436, 0.068435, 0.068432, 0.068425",\ + "0.074512, 0.074512, 0.074511, 0.074509, 0.074503",\ + "0.094928, 0.094928, 0.094927, 0.094924, 0.094919",\ + "0.380690, 0.380690, 0.380690, 0.380690, 0.380690",\ + "1.025917, 1.025917, 1.025917, 1.025917, 1.025917",\ + "0.068436, 0.068436, 0.068435, 0.068432, 0.068425",\ + "0.074512, 0.074512, 0.074511, 0.074509, 0.074503",\ + "0.094928, 0.094928, 0.094927, 0.094924, 0.094919",\ + "0.380690, 0.380690, 0.380690, 0.380690, 0.380690",\ + "1.025917, 1.025917, 1.025917, 1.025917, 1.025917"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[5]_redg_2374*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[25]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.697898, 0.947965, 1.225734, 1.724852, 2.723087",\ + "0.711492, 0.961559, 1.239327, 1.738445, 2.736680",\ + "0.735032, 0.985099, 1.262868, 1.761985, 2.760221",\ + "1.002569, 1.252636, 1.530404, 2.029521, 3.027754",\ + "1.595033, 1.845100, 2.122868, 2.621982, 3.620212",\ + "0.785303, 1.035477, 1.313393, 1.811565, 2.809021",\ + "0.798897, 1.049071, 1.326987, 1.825159, 2.822614",\ + "0.822437, 1.072611, 1.350527, 1.848699, 2.846154",\ + "1.089974, 1.340148, 1.618063, 2.116235, 3.113688",\ + "1.682438, 1.932612, 2.210527, 2.708696, 3.706145",\ + "0.866148, 1.124350, 1.401358, 1.899186, 2.895976",\ + "0.879741, 1.137944, 1.414951, 1.912780, 2.909569",\ + "0.903282, 1.161484, 1.438491, 1.936320, 2.933109",\ + "1.170819, 1.429021, 1.706028, 2.203856, 3.200643",\ + "1.763283, 2.021485, 2.298491, 2.796317, 3.793100",\ + "0.926036, 1.189827, 1.465502, 1.963099, 2.959485",\ + "0.939630, 1.203421, 1.479096, 1.976693, 2.973078",\ + "0.963170, 1.226961, 1.502636, 2.000233, 2.996618",\ + "1.230707, 1.494498, 1.770173, 2.267768, 3.264152",\ + "1.823171, 2.086962, 2.362636, 2.860230, 3.856609",\ + "1.263356, 1.552433, 1.817672, 2.312566, 3.304941",\ + "1.276949, 1.566026, 1.831266, 2.326159, 3.318534",\ + "1.300490, 1.589567, 1.854806, 2.349699, 3.342074",\ + "1.568027, 1.857104, 2.122343, 2.617235, 3.609608",\ + "2.160491, 2.449568, 2.714806, 3.209696, 4.202065"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.121485, 0.121485, 0.121485, 0.121483, 0.121479",\ + "0.152032, 0.152032, 0.152035, 0.152046, 0.152069",\ + "0.200984, 0.200984, 0.200984, 0.200984, 0.200984",\ + "0.823612, 0.823612, 0.823612, 0.823612, 0.823611",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121485, 0.121485, 0.121485, 0.121483, 0.121479",\ + "0.152032, 0.152032, 0.152035, 0.152046, 0.152069",\ + "0.200984, 0.200984, 0.200984, 0.200984, 0.200984",\ + "0.823612, 0.823612, 0.823612, 0.823612, 0.823611",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121485, 0.121485, 0.121485, 0.121483, 0.121479",\ + "0.152032, 0.152032, 0.152035, 0.152046, 0.152069",\ + "0.200984, 0.200984, 0.200984, 0.200984, 0.200984",\ + "0.823612, 0.823612, 0.823612, 0.823612, 0.823611",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121485, 0.121485, 0.121485, 0.121483, 0.121479",\ + "0.152032, 0.152032, 0.152035, 0.152046, 0.152069",\ + "0.200984, 0.200984, 0.200984, 0.200984, 0.200984",\ + "0.823612, 0.823612, 0.823612, 0.823612, 0.823611",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121485, 0.121485, 0.121485, 0.121483, 0.121479",\ + "0.152032, 0.152032, 0.152035, 0.152046, 0.152069",\ + "0.200984, 0.200984, 0.200984, 0.200984, 0.200984",\ + "0.823612, 0.823612, 0.823612, 0.823612, 0.823611",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.639406, 0.889474, 1.167244, 1.666367, 2.664614",\ + "0.650768, 0.900835, 1.178605, 1.677727, 2.675971",\ + "0.669506, 0.919573, 1.197342, 1.696462, 2.694701",\ + "0.838053, 1.088120, 1.365887, 1.865001, 2.863227",\ + "1.172863, 1.422930, 1.700697, 2.199811, 3.198038",\ + "0.726812, 0.976986, 1.254903, 1.753081, 2.750548",\ + "0.738173, 0.988347, 1.266264, 1.764440, 2.761904",\ + "0.756911, 1.007085, 1.285001, 1.783175, 2.780635",\ + "0.925458, 1.175632, 1.453547, 1.951714, 2.949161",\ + "1.260268, 1.510442, 1.788356, 2.286525, 3.283972",\ + "0.807656, 1.065858, 1.342867, 1.840702, 2.837503",\ + "0.819017, 1.077220, 1.354228, 1.852061, 2.848859",\ + "0.837755, 1.095958, 1.372966, 1.870796, 2.867590",\ + "1.006303, 1.264505, 1.541511, 2.039335, 3.036116",\ + "1.341113, 1.599315, 1.876321, 2.374146, 3.370927",\ + "0.867545, 1.131335, 1.407012, 1.904615, 2.901012",\ + "0.878906, 1.142697, 1.418373, 1.915974, 2.912368",\ + "0.897644, 1.161434, 1.437110, 1.934709, 2.931099",\ + "1.066191, 1.329982, 1.605656, 2.103248, 3.099625",\ + "1.401001, 1.664792, 1.940466, 2.438058, 3.434436",\ + "1.204864, 1.493941, 1.759182, 2.254081, 3.246468",\ + "1.216225, 1.505302, 1.770543, 2.265441, 3.257824",\ + "1.234963, 1.524040, 1.789280, 2.284176, 3.276555",\ + "1.403511, 1.692588, 1.957826, 2.452714, 3.445081",\ + "1.738321, 2.027398, 2.292636, 2.787525, 3.779892"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.068435, 0.068435, 0.068431, 0.068415, 0.068383",\ + "0.074512, 0.074512, 0.074508, 0.074493, 0.074464",\ + "0.094928, 0.094928, 0.094924, 0.094910, 0.094883",\ + "0.380690, 0.380690, 0.380690, 0.380690, 0.380691",\ + "1.025917, 1.025917, 1.025917, 1.025918, 1.025919",\ + "0.068435, 0.068435, 0.068431, 0.068415, 0.068383",\ + "0.074512, 0.074512, 0.074508, 0.074493, 0.074464",\ + "0.094928, 0.094928, 0.094924, 0.094910, 0.094883",\ + "0.380690, 0.380690, 0.380690, 0.380690, 0.380691",\ + "1.025917, 1.025917, 1.025917, 1.025918, 1.025919",\ + "0.068435, 0.068435, 0.068431, 0.068415, 0.068383",\ + "0.074512, 0.074512, 0.074508, 0.074493, 0.074464",\ + "0.094928, 0.094928, 0.094924, 0.094910, 0.094883",\ + "0.380690, 0.380690, 0.380690, 0.380690, 0.380691",\ + "1.025917, 1.025917, 1.025917, 1.025918, 1.025919",\ + "0.068435, 0.068435, 0.068431, 0.068415, 0.068383",\ + "0.074512, 0.074512, 0.074508, 0.074493, 0.074464",\ + "0.094928, 0.094928, 0.094924, 0.094910, 0.094883",\ + "0.380690, 0.380690, 0.380690, 0.380690, 0.380691",\ + "1.025917, 1.025917, 1.025917, 1.025918, 1.025919",\ + "0.068435, 0.068435, 0.068430, 0.068415, 0.068383",\ + "0.074512, 0.074512, 0.074507, 0.074493, 0.074464",\ + "0.094928, 0.094928, 0.094923, 0.094910, 0.094883",\ + "0.380690, 0.380690, 0.380690, 0.380690, 0.380691",\ + "1.025917, 1.025917, 1.025917, 1.025918, 1.025919"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[5]_redg_2490*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[26]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.564894, 0.815791, 1.094396, 1.559341, 2.489231",\ + "0.578576, 0.829479, 1.108111, 1.573121, 2.503140",\ + "0.602105, 0.853007, 1.131636, 1.596638, 2.526642",\ + "0.870117, 1.121053, 1.399829, 1.865184, 2.795893",\ + "1.463316, 1.714304, 1.993307, 2.459207, 3.391007",\ + "0.652304, 0.903365, 1.181950, 1.646055, 2.575164",\ + "0.665985, 0.917053, 1.195665, 1.659835, 2.589074",\ + "0.689515, 0.940582, 1.219190, 1.683353, 2.612576",\ + "0.957527, 1.208627, 1.487384, 1.951898, 2.881827",\ + "1.550725, 1.801879, 2.080863, 2.545921, 3.476941",\ + "0.733136, 0.992396, 1.269913, 1.733677, 2.662119",\ + "0.746817, 1.006083, 1.283628, 1.747457, 2.676029",\ + "0.770346, 1.029612, 1.307153, 1.770974, 2.699531",\ + "1.038358, 1.297659, 1.575347, 2.039520, 2.968782",\ + "1.631557, 1.890911, 2.168827, 2.633543, 3.563896",\ + "0.790750, 1.058102, 1.334052, 1.797590, 2.725628",\ + "0.804431, 1.071790, 1.347767, 1.811370, 2.739538",\ + "0.827961, 1.095319, 1.371293, 1.834888, 2.763040",\ + "1.095973, 1.363366, 1.639486, 2.103433, 3.032291",\ + "1.689171, 1.956620, 2.232966, 2.697456, 3.627405",\ + "1.120458, 1.423346, 1.685878, 2.146919, 3.071084",\ + "1.134140, 1.437036, 1.699593, 2.160699, 3.084994",\ + "1.157669, 1.460564, 1.723119, 2.184217, 3.108496",\ + "1.425683, 1.728623, 1.991316, 2.452764, 3.377747",\ + "2.018884, 2.321894, 2.584802, 3.046790, 3.972861"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.122237, 0.122291, 0.122948, 0.124971, 0.129018",\ + "0.151797, 0.151880, 0.152446, 0.154040, 0.157229",\ + "0.201011, 0.201013, 0.201172, 0.201712, 0.202792",\ + "0.823650, 0.823653, 0.823665, 0.823694, 0.823752",\ + "2.222134, 2.222134, 2.222135, 2.222138, 2.222144",\ + "0.122237, 0.122291, 0.122954, 0.124971, 0.129018",\ + "0.151797, 0.151881, 0.152451, 0.154040, 0.157229",\ + "0.201011, 0.201013, 0.201174, 0.201712, 0.202792",\ + "0.823650, 0.823653, 0.823665, 0.823694, 0.823752",\ + "2.222134, 2.222134, 2.222135, 2.222138, 2.222144",\ + "0.122237, 0.122292, 0.122954, 0.124971, 0.129018",\ + "0.151797, 0.151883, 0.152451, 0.154040, 0.157229",\ + "0.201011, 0.201013, 0.201174, 0.201712, 0.202792",\ + "0.823650, 0.823653, 0.823665, 0.823694, 0.823752",\ + "2.222134, 2.222134, 2.222135, 2.222138, 2.222144",\ + "0.122238, 0.122294, 0.122955, 0.124971, 0.129018",\ + "0.151797, 0.151885, 0.152452, 0.154040, 0.157229",\ + "0.201011, 0.201013, 0.201174, 0.201712, 0.202792",\ + "0.823650, 0.823653, 0.823665, 0.823694, 0.823752",\ + "2.222134, 2.222134, 2.222135, 2.222138, 2.222144",\ + "0.122241, 0.122311, 0.122975, 0.124980, 0.129018",\ + "0.151805, 0.151911, 0.152468, 0.154047, 0.157229",\ + "0.201012, 0.201014, 0.201180, 0.201714, 0.202792",\ + "0.823651, 0.823654, 0.823666, 0.823694, 0.823752",\ + "2.222134, 2.222134, 2.222135, 2.222138, 2.222144"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.504118, 0.754852, 1.032751, 1.495998, 2.422494",\ + "0.516114, 0.766894, 1.044988, 1.508707, 2.436146",\ + "0.535711, 0.786551, 1.064911, 1.529268, 2.457982",\ + "0.706984, 0.958018, 1.237222, 1.703603, 2.636367",\ + "1.041617, 1.292639, 1.571788, 2.038038, 2.970540",\ + "0.591527, 0.842425, 1.120299, 1.582713, 2.508428",\ + "0.603524, 0.854467, 1.132538, 1.595422, 2.522079",\ + "0.623120, 0.874125, 1.152463, 1.615983, 2.543916",\ + "0.794393, 1.045593, 1.324780, 1.790318, 2.722301",\ + "1.129027, 1.380214, 1.659346, 2.124753, 3.056474",\ + "0.672359, 0.931452, 1.208262, 1.670335, 2.595383",\ + "0.684355, 0.943495, 1.220501, 1.683044, 2.609035",\ + "0.703952, 0.963154, 1.240426, 1.703604, 2.630871",\ + "0.875225, 1.134627, 1.412743, 1.877940, 2.809256",\ + "1.209858, 1.469247, 1.747309, 2.212375, 3.143429",\ + "0.729973, 0.997154, 1.272401, 1.734248, 2.658892",\ + "0.741969, 1.009198, 1.284640, 1.746957, 2.672544",\ + "0.761566, 1.028859, 1.304565, 1.767518, 2.694380",\ + "0.932840, 1.200337, 1.476882, 1.941853, 2.872765",\ + "1.267473, 1.534957, 1.811448, 2.276288, 3.206938",\ + "1.059672, 1.362345, 1.624210, 2.083570, 3.004348",\ + "1.071671, 1.374403, 1.636453, 2.096281, 3.018000",\ + "1.091271, 1.394084, 1.656385, 2.116844, 3.039836",\ + "1.262555, 1.565626, 1.828723, 2.291188, 3.218221",\ + "1.597188, 1.900242, 2.163287, 2.625622, 3.552394"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.074860, 0.075317, 0.077304, 0.082076, 0.091621",\ + "0.080333, 0.080747, 0.082548, 0.086873, 0.095522",\ + "0.100376, 0.100764, 0.102449, 0.106497, 0.114592",\ + "0.380687, 0.380688, 0.380696, 0.380717, 0.380759",\ + "1.025901, 1.025907, 1.025944, 1.026050, 1.026262",\ + "0.074860, 0.075320, 0.077319, 0.082076, 0.091621",\ + "0.080333, 0.080751, 0.082562, 0.086873, 0.095522",\ + "0.100376, 0.100767, 0.102462, 0.106497, 0.114592",\ + "0.380687, 0.380688, 0.380696, 0.380717, 0.380759",\ + "1.025901, 1.025907, 1.025945, 1.026050, 1.026262",\ + "0.074860, 0.075329, 0.077319, 0.082076, 0.091621",\ + "0.080334, 0.080759, 0.082562, 0.086873, 0.095522",\ + "0.100376, 0.100774, 0.102462, 0.106497, 0.114592",\ + "0.380687, 0.380688, 0.380696, 0.380717, 0.380759",\ + "1.025901, 1.025907, 1.025945, 1.026050, 1.026262",\ + "0.074860, 0.075342, 0.077320, 0.082076, 0.091621",\ + "0.080334, 0.080770, 0.082563, 0.086873, 0.095522",\ + "0.100377, 0.100785, 0.102463, 0.106497, 0.114592",\ + "0.380687, 0.380688, 0.380696, 0.380717, 0.380759",\ + "1.025901, 1.025907, 1.025945, 1.026050, 1.026262",\ + "0.074886, 0.075492, 0.077368, 0.082096, 0.091621",\ + "0.080357, 0.080906, 0.082607, 0.086890, 0.095522",\ + "0.100399, 0.100912, 0.102504, 0.106513, 0.114592",\ + "0.380687, 0.380689, 0.380696, 0.380717, 0.380759",\ + "1.025902, 1.025909, 1.025946, 1.026050, 1.026262"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[5]_redg_2519*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[27]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.601589, 0.856514, 1.112604, 1.552662, 2.432779",\ + "0.615142, 0.870066, 1.126156, 1.566215, 2.446333",\ + "0.638672, 0.893596, 1.149686, 1.589744, 2.469861",\ + "0.906045, 1.160969, 1.417061, 1.857126, 2.737255",\ + "1.499860, 1.754785, 2.010744, 2.450359, 3.329590",\ + "0.689139, 0.944005, 1.200076, 1.639375, 2.518713",\ + "0.702691, 0.957558, 1.213628, 1.652928, 2.532267",\ + "0.726222, 0.981088, 1.237158, 1.676457, 2.555795",\ + "0.993595, 1.248461, 1.504533, 1.943839, 2.823189",\ + "1.587410, 1.842276, 2.098214, 2.537072, 3.415524",\ + "0.778517, 1.032815, 1.288036, 1.726995, 2.605668",\ + "0.792069, 1.046367, 1.301588, 1.740548, 2.619222",\ + "0.815599, 1.069897, 1.325118, 1.764078, 2.642750",\ + "1.082972, 1.337270, 1.592493, 2.031459, 2.910144",\ + "1.676788, 1.931085, 2.186174, 2.624692, 3.502479",\ + "0.842460, 1.098198, 1.352170, 1.790908, 2.669177",\ + "0.856012, 1.111750, 1.365723, 1.804461, 2.682731",\ + "0.879542, 1.135280, 1.389253, 1.827990, 2.706259",\ + "1.146915, 1.402653, 1.656628, 2.095372, 2.973653",\ + "1.740730, 1.996469, 2.250309, 2.688605, 3.565988",\ + "1.180709, 1.459770, 1.703739, 2.140127, 3.014633",\ + "1.194261, 1.473322, 1.717291, 2.153680, 3.028187",\ + "1.217791, 1.496852, 1.740821, 2.177209, 3.051715",\ + "1.485164, 1.764225, 2.008196, 2.444591, 3.319109",\ + "2.078980, 2.358040, 2.601873, 3.037822, 3.911444"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.121333, 0.121333, 0.121337, 0.121351, 0.121379",\ + "0.151701, 0.151701, 0.151700, 0.151698, 0.151693",\ + "0.201129, 0.201129, 0.201130, 0.201137, 0.201149",\ + "0.823409, 0.823409, 0.823407, 0.823401, 0.823387",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121333, 0.121333, 0.121337, 0.121351, 0.121379",\ + "0.151701, 0.151701, 0.151700, 0.151698, 0.151693",\ + "0.201129, 0.201129, 0.201130, 0.201137, 0.201149",\ + "0.823409, 0.823409, 0.823407, 0.823401, 0.823387",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121333, 0.121333, 0.121337, 0.121351, 0.121379",\ + "0.151701, 0.151701, 0.151700, 0.151698, 0.151693",\ + "0.201129, 0.201129, 0.201130, 0.201137, 0.201149",\ + "0.823409, 0.823409, 0.823407, 0.823401, 0.823387",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121333, 0.121333, 0.121337, 0.121351, 0.121379",\ + "0.151701, 0.151701, 0.151700, 0.151698, 0.151693",\ + "0.201129, 0.201129, 0.201130, 0.201137, 0.201149",\ + "0.823409, 0.823409, 0.823407, 0.823401, 0.823387",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121333, 0.121333, 0.121337, 0.121351, 0.121379",\ + "0.151701, 0.151701, 0.151700, 0.151698, 0.151693",\ + "0.201129, 0.201129, 0.201131, 0.201137, 0.201149",\ + "0.823409, 0.823409, 0.823407, 0.823401, 0.823387",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.569211, 0.824136, 1.079695, 1.517959, 2.394488",\ + "0.577154, 0.832078, 1.087637, 1.525902, 2.402431",\ + "0.590634, 0.845558, 1.101117, 1.539382, 2.415911",\ + "0.744587, 0.999511, 1.255305, 1.694361, 2.572475",\ + "1.084486, 1.339411, 1.594970, 2.033235, 2.909765",\ + "0.656761, 0.911627, 1.167161, 1.604672, 2.480422",\ + "0.664704, 0.919570, 1.175103, 1.612615, 2.488365",\ + "0.678184, 0.933050, 1.188583, 1.626095, 2.501845",\ + "0.832137, 1.087003, 1.342773, 1.781074, 2.658409",\ + "1.172036, 1.426902, 1.682436, 2.119948, 2.995698",\ + "0.746139, 1.000437, 1.255121, 1.692293, 2.567377",\ + "0.754081, 1.008379, 1.263063, 1.700235, 2.575320",\ + "0.767561, 1.021859, 1.276543, 1.713715, 2.588800",\ + "0.921514, 1.175812, 1.430733, 1.868695, 2.745364",\ + "1.261414, 1.515711, 1.770396, 2.207568, 3.082654",\ + "0.810081, 1.065820, 1.319255, 1.756205, 2.630886",\ + "0.818024, 1.073762, 1.327198, 1.764148, 2.638829",\ + "0.831504, 1.087242, 1.340678, 1.777627, 2.652309",\ + "0.985457, 1.241195, 1.494868, 1.932607, 2.808873",\ + "1.325356, 1.581095, 1.834530, 2.271481, 3.146163",\ + "1.148331, 1.427392, 1.670806, 2.105417, 2.976342",\ + "1.156273, 1.435334, 1.678748, 2.113359, 2.984285",\ + "1.169753, 1.448814, 1.692228, 2.126839, 2.997765",\ + "1.323706, 1.602767, 1.846426, 2.281822, 3.154329",\ + "1.663605, 1.942666, 2.186081, 2.620692, 3.491619"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.061223, 0.061223, 0.061191, 0.061085, 0.060871",\ + "0.068571, 0.068571, 0.068550, 0.068476, 0.068328",\ + "0.090396, 0.090396, 0.090388, 0.090358, 0.090299",\ + "0.380686, 0.380686, 0.380686, 0.380686, 0.380686",\ + "1.025895, 1.025895, 1.025895, 1.025895, 1.025894",\ + "0.061223, 0.061223, 0.061191, 0.061085, 0.060871",\ + "0.068571, 0.068571, 0.068549, 0.068476, 0.068328",\ + "0.090396, 0.090396, 0.090387, 0.090358, 0.090299",\ + "0.380686, 0.380686, 0.380686, 0.380686, 0.380686",\ + "1.025895, 1.025895, 1.025895, 1.025895, 1.025894",\ + "0.061223, 0.061223, 0.061191, 0.061085, 0.060871",\ + "0.068571, 0.068571, 0.068549, 0.068476, 0.068328",\ + "0.090396, 0.090396, 0.090387, 0.090358, 0.090299",\ + "0.380686, 0.380686, 0.380686, 0.380686, 0.380686",\ + "1.025895, 1.025895, 1.025895, 1.025895, 1.025894",\ + "0.061223, 0.061223, 0.061191, 0.061085, 0.060871",\ + "0.068571, 0.068571, 0.068549, 0.068476, 0.068328",\ + "0.090396, 0.090396, 0.090387, 0.090358, 0.090299",\ + "0.380686, 0.380686, 0.380686, 0.380686, 0.380686",\ + "1.025895, 1.025895, 1.025895, 1.025895, 1.025894",\ + "0.061223, 0.061223, 0.061190, 0.061084, 0.060871",\ + "0.068571, 0.068571, 0.068549, 0.068475, 0.068328",\ + "0.090396, 0.090396, 0.090387, 0.090358, 0.090299",\ + "0.380686, 0.380686, 0.380686, 0.380686, 0.380686",\ + "1.025895, 1.025895, 1.025895, 1.025895, 1.025894"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[5]_redg_2575*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[30]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.577162, 0.819115, 1.086143, 1.569512, 2.536249",\ + "0.590714, 0.832667, 1.099696, 1.583067, 2.549807",\ + "0.614244, 0.856197, 1.123226, 1.606594, 2.573331",\ + "0.881617, 1.123572, 1.390607, 1.873991, 2.840761",\ + "1.475569, 1.717569, 1.984519, 2.467402, 3.433167",\ + "0.664563, 0.906592, 1.173751, 1.656225, 2.622182",\ + "0.678115, 0.920144, 1.187304, 1.669780, 2.635741",\ + "0.701645, 0.943674, 1.210834, 1.693307, 2.659265",\ + "0.969019, 1.211049, 1.478215, 1.960705, 2.926694",\ + "1.562970, 1.805047, 2.072125, 2.554115, 3.519101",\ + "0.745370, 0.995374, 1.261714, 1.743845, 2.709137",\ + "0.758922, 1.008926, 1.275267, 1.757400, 2.722696",\ + "0.782452, 1.032456, 1.298797, 1.780928, 2.746220",\ + "1.049826, 1.299831, 1.566178, 2.048325, 3.013649",\ + "1.643777, 1.893830, 2.160089, 2.641735, 3.606056",\ + "0.805541, 1.060718, 1.325856, 1.807758, 2.772646",\ + "0.819093, 1.074270, 1.339409, 1.821313, 2.786205",\ + "0.842623, 1.097800, 1.362939, 1.844840, 2.809729",\ + "1.109996, 1.365175, 1.630320, 2.112238, 3.077158",\ + "1.703948, 1.959175, 2.224230, 2.705648, 3.669565",\ + "1.143425, 1.421812, 1.677865, 2.157156, 3.118103",\ + "1.156977, 1.435364, 1.691418, 2.170711, 3.131661",\ + "1.180507, 1.458894, 1.714947, 2.194238, 3.155185",\ + "1.447880, 1.726269, 1.982328, 2.461636, 3.422615",\ + "2.041832, 2.320285, 2.576234, 3.055044, 4.015021"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.121333, 0.121336, 0.121350, 0.121386, 0.121458",\ + "0.151694, 0.151694, 0.151695, 0.151695, 0.151695",\ + "0.201129, 0.201130, 0.201136, 0.201152, 0.201184",\ + "0.823409, 0.823409, 0.823409, 0.823409, 0.823409",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121333, 0.121336, 0.121350, 0.121386, 0.121458",\ + "0.151694, 0.151694, 0.151695, 0.151695, 0.151695",\ + "0.201129, 0.201130, 0.201136, 0.201152, 0.201184",\ + "0.823409, 0.823409, 0.823409, 0.823409, 0.823409",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121333, 0.121336, 0.121350, 0.121386, 0.121458",\ + "0.151694, 0.151694, 0.151695, 0.151695, 0.151695",\ + "0.201129, 0.201130, 0.201136, 0.201152, 0.201184",\ + "0.823409, 0.823409, 0.823409, 0.823409, 0.823409",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121333, 0.121336, 0.121350, 0.121386, 0.121458",\ + "0.151694, 0.151694, 0.151695, 0.151695, 0.151695",\ + "0.201129, 0.201130, 0.201136, 0.201152, 0.201184",\ + "0.823409, 0.823409, 0.823409, 0.823409, 0.823409",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121333, 0.121337, 0.121351, 0.121386, 0.121458",\ + "0.151694, 0.151694, 0.151695, 0.151695, 0.151695",\ + "0.201129, 0.201130, 0.201137, 0.201152, 0.201184",\ + "0.823409, 0.823409, 0.823409, 0.823409, 0.823409",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.544918, 0.786919, 1.051943, 1.528303, 2.481022",\ + "0.552861, 0.794861, 1.060131, 1.537319, 2.491697",\ + "0.566341, 0.808341, 1.074013, 1.552566, 2.509672",\ + "0.720294, 0.962295, 1.229085, 1.711427, 2.676111",\ + "1.060194, 1.302195, 1.568545, 2.049397, 3.011100",\ + "0.632320, 0.874396, 1.139529, 1.615016, 2.566956",\ + "0.640262, 0.882339, 1.147719, 1.624032, 2.577631",\ + "0.653742, 0.895819, 1.161606, 1.639279, 2.595606",\ + "0.807696, 1.049772, 1.316690, 1.798140, 2.762045",\ + "1.147596, 1.389672, 1.656145, 2.136110, 3.097034",\ + "0.713127, 0.963179, 1.227492, 1.702637, 2.653911",\ + "0.721069, 0.971121, 1.235682, 1.711653, 2.664586",\ + "0.734549, 0.984601, 1.249569, 1.726900, 2.682561",\ + "0.888502, 1.138555, 1.404653, 1.885761, 2.849000",\ + "1.228403, 1.478455, 1.744108, 2.223730, 3.183989",\ + "0.773297, 1.028524, 1.291633, 1.766549, 2.717420",\ + "0.781240, 1.036467, 1.299823, 1.775565, 2.728095",\ + "0.794720, 1.049947, 1.313710, 1.790812, 2.746070",\ + "0.948673, 1.203900, 1.468795, 1.949673, 2.912509",\ + "1.288574, 1.543800, 1.808250, 2.287643, 3.247498",\ + "1.111181, 1.389635, 1.643570, 2.115918, 3.062876",\ + "1.119124, 1.397577, 1.651768, 2.124938, 3.073550",\ + "1.132604, 1.411057, 1.665669, 2.140191, 3.091526",\ + "1.286557, 1.565011, 1.820792, 2.299067, 3.257965",\ + "1.626457, 1.904911, 2.160232, 2.637031, 3.592954"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.061220, 0.061199, 0.061091, 0.060821, 0.060280",\ + "0.068569, 0.068555, 0.068480, 0.068293, 0.067919",\ + "0.090395, 0.090390, 0.090360, 0.090285, 0.090136",\ + "0.380686, 0.380686, 0.380686, 0.380685, 0.380684",\ + "1.025895, 1.025895, 1.025894, 1.025891, 1.025886",\ + "0.061220, 0.061199, 0.061090, 0.060821, 0.060280",\ + "0.068569, 0.068555, 0.068480, 0.068293, 0.067919",\ + "0.090395, 0.090390, 0.090360, 0.090285, 0.090136",\ + "0.380686, 0.380686, 0.380686, 0.380685, 0.380684",\ + "1.025895, 1.025895, 1.025894, 1.025891, 1.025886",\ + "0.061220, 0.061198, 0.061090, 0.060821, 0.060280",\ + "0.068569, 0.068554, 0.068480, 0.068293, 0.067919",\ + "0.090395, 0.090390, 0.090360, 0.090285, 0.090136",\ + "0.380686, 0.380686, 0.380686, 0.380685, 0.380684",\ + "1.025895, 1.025895, 1.025894, 1.025891, 1.025886",\ + "0.061220, 0.061198, 0.061090, 0.060821, 0.060280",\ + "0.068569, 0.068554, 0.068479, 0.068293, 0.067919",\ + "0.090395, 0.090389, 0.090360, 0.090285, 0.090136",\ + "0.380686, 0.380686, 0.380686, 0.380685, 0.380684",\ + "1.025895, 1.025895, 1.025894, 1.025891, 1.025886",\ + "0.061220, 0.061191, 0.061087, 0.060819, 0.060280",\ + "0.068569, 0.068549, 0.068478, 0.068292, 0.067919",\ + "0.090395, 0.090387, 0.090359, 0.090285, 0.090136",\ + "0.380686, 0.380686, 0.380686, 0.380685, 0.380684",\ + "1.025895, 1.025895, 1.025894, 1.025891, 1.025886"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[5]_redg_2704*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[32]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.666137, 0.908208, 1.174611, 1.656033, 2.618876",\ + "0.679731, 0.921802, 1.188205, 1.669626, 2.632469",\ + "0.703271, 0.945343, 1.211745, 1.693166, 2.656009",\ + "0.970809, 1.212879, 1.479281, 1.960701, 2.923540",\ + "1.563272, 1.805343, 2.071744, 2.553161, 3.515995",\ + "0.753539, 0.995685, 1.262213, 1.742746, 2.704810",\ + "0.767133, 1.009279, 1.275807, 1.756339, 2.718403",\ + "0.790673, 1.032819, 1.299347, 1.779880, 2.741943",\ + "1.058210, 1.300356, 1.566883, 2.047414, 3.009474",\ + "1.650674, 1.892820, 2.159346, 2.639874, 3.601928",\ + "0.834346, 1.084466, 1.350176, 1.830367, 2.791765",\ + "0.847940, 1.098060, 1.363770, 1.843960, 2.805358",\ + "0.871480, 1.121600, 1.387310, 1.867500, 2.828898",\ + "1.139017, 1.389137, 1.654846, 2.135035, 3.096429",\ + "1.731481, 1.981601, 2.247309, 2.727494, 3.688883",\ + "0.894640, 1.149809, 1.414318, 1.894279, 2.855274",\ + "0.908234, 1.163403, 1.427911, 1.907872, 2.868867",\ + "0.931774, 1.186943, 1.451452, 1.931413, 2.892407",\ + "1.199311, 1.454480, 1.718988, 2.198947, 3.159938",\ + "1.791775, 2.046944, 2.311450, 2.791407, 3.752392",\ + "1.232542, 1.510890, 1.766306, 2.243669, 3.200730",\ + "1.246135, 1.524484, 1.779900, 2.257262, 3.214323",\ + "1.269676, 1.548024, 1.803440, 2.280803, 3.237863",\ + "1.537213, 1.815561, 2.070976, 2.548337, 3.505394",\ + "2.129677, 2.408025, 2.663439, 3.140797, 4.097848"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.121485, 0.121485, 0.121485, 0.121485, 0.121485",\ + "0.152032, 0.152032, 0.152043, 0.152082, 0.152158",\ + "0.200984, 0.200984, 0.200984, 0.200984, 0.200984",\ + "0.823612, 0.823612, 0.823612, 0.823612, 0.823612",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222135",\ + "0.121485, 0.121485, 0.121485, 0.121485, 0.121485",\ + "0.152032, 0.152032, 0.152044, 0.152082, 0.152158",\ + "0.200984, 0.200984, 0.200984, 0.200984, 0.200984",\ + "0.823612, 0.823612, 0.823612, 0.823612, 0.823612",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222135",\ + "0.121485, 0.121485, 0.121485, 0.121485, 0.121485",\ + "0.152032, 0.152032, 0.152044, 0.152082, 0.152158",\ + "0.200984, 0.200984, 0.200984, 0.200984, 0.200984",\ + "0.823612, 0.823612, 0.823612, 0.823612, 0.823612",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222135",\ + "0.121485, 0.121485, 0.121485, 0.121485, 0.121485",\ + "0.152032, 0.152032, 0.152044, 0.152082, 0.152158",\ + "0.200984, 0.200984, 0.200984, 0.200984, 0.200984",\ + "0.823612, 0.823612, 0.823612, 0.823612, 0.823612",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222135",\ + "0.121485, 0.121485, 0.121485, 0.121485, 0.121485",\ + "0.152032, 0.152032, 0.152044, 0.152082, 0.152158",\ + "0.200984, 0.200984, 0.200984, 0.200984, 0.200984",\ + "0.823612, 0.823612, 0.823612, 0.823612, 0.823612",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222135"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.607646, 0.849717, 1.116124, 1.597554, 2.560414",\ + "0.619007, 0.861079, 1.127484, 1.608912, 2.571767",\ + "0.637745, 0.879816, 1.146220, 1.627645, 2.590494",\ + "0.806293, 1.048363, 1.314763, 1.796177, 2.759006",\ + "1.141102, 1.383173, 1.649573, 2.130988, 3.093818",\ + "0.695047, 0.937194, 1.203726, 1.684267, 2.646348",\ + "0.706409, 0.948555, 1.215086, 1.695625, 2.657701",\ + "0.725146, 0.967293, 1.233822, 1.714358, 2.676428",\ + "0.893694, 1.135840, 1.402365, 1.882890, 2.844940",\ + "1.228504, 1.470650, 1.737175, 2.217701, 3.179752",\ + "0.775854, 1.025975, 1.291688, 1.771888, 2.733303",\ + "0.787216, 1.037337, 1.303049, 1.783245, 2.744656",\ + "0.805953, 1.056074, 1.321785, 1.801978, 2.763383",\ + "0.974501, 1.224621, 1.490328, 1.970511, 2.931895",\ + "1.309311, 1.559431, 1.825138, 2.305322, 3.266707",\ + "0.836149, 1.091318, 1.355830, 1.835800, 2.796812",\ + "0.847510, 1.102679, 1.367190, 1.847158, 2.808165",\ + "0.866248, 1.121417, 1.385927, 1.865891, 2.826892",\ + "1.034796, 1.289964, 1.554469, 2.034424, 2.995404",\ + "1.369605, 1.624774, 1.889280, 2.369234, 3.330216",\ + "1.174050, 1.452400, 1.707819, 2.185190, 3.142268",\ + "1.185411, 1.463761, 1.719179, 2.196548, 3.153621",\ + "1.204149, 1.482498, 1.737915, 2.215281, 3.172348",\ + "1.372697, 1.651045, 1.906458, 2.383814, 3.340860",\ + "1.707507, 1.985855, 2.241268, 2.718624, 3.675672"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.068435, 0.068435, 0.068435, 0.068435, 0.068435",\ + "0.074512, 0.074512, 0.074512, 0.074512, 0.074512",\ + "0.094928, 0.094928, 0.094928, 0.094928, 0.094928",\ + "0.380690, 0.380690, 0.380690, 0.380691, 0.380692",\ + "1.025917, 1.025917, 1.025918, 1.025920, 1.025925",\ + "0.068435, 0.068435, 0.068435, 0.068435, 0.068435",\ + "0.074512, 0.074512, 0.074512, 0.074512, 0.074512",\ + "0.094928, 0.094928, 0.094928, 0.094928, 0.094928",\ + "0.380690, 0.380690, 0.380690, 0.380691, 0.380692",\ + "1.025917, 1.025917, 1.025918, 1.025920, 1.025925",\ + "0.068435, 0.068435, 0.068435, 0.068435, 0.068435",\ + "0.074512, 0.074512, 0.074512, 0.074512, 0.074512",\ + "0.094928, 0.094928, 0.094928, 0.094928, 0.094928",\ + "0.380690, 0.380690, 0.380690, 0.380691, 0.380692",\ + "1.025917, 1.025917, 1.025918, 1.025920, 1.025925",\ + "0.068435, 0.068435, 0.068435, 0.068435, 0.068435",\ + "0.074512, 0.074512, 0.074512, 0.074512, 0.074512",\ + "0.094928, 0.094928, 0.094928, 0.094928, 0.094928",\ + "0.380690, 0.380690, 0.380690, 0.380691, 0.380692",\ + "1.025917, 1.025917, 1.025918, 1.025920, 1.025925",\ + "0.068435, 0.068435, 0.068435, 0.068435, 0.068435",\ + "0.074512, 0.074512, 0.074512, 0.074512, 0.074512",\ + "0.094928, 0.094928, 0.094928, 0.094928, 0.094928",\ + "0.380690, 0.380690, 0.380690, 0.380691, 0.380692",\ + "1.025917, 1.025917, 1.025918, 1.025920, 1.025925"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[5]_redg_2327*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[33]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.688394, 0.943298, 1.199532, 1.637805, 2.514353",\ + "0.701988, 0.956891, 1.213125, 1.651399, 2.527946",\ + "0.725528, 0.980432, 1.236665, 1.674939, 2.551486",\ + "0.993065, 1.247969, 1.504202, 1.942475, 2.819022",\ + "1.585529, 1.840433, 2.096666, 2.534938, 3.411482",\ + "0.775799, 1.030785, 1.286999, 1.724519, 2.600287",\ + "0.789393, 1.044379, 1.300593, 1.738113, 2.613880",\ + "0.812933, 1.067919, 1.324133, 1.761653, 2.637420",\ + "1.080470, 1.335456, 1.591670, 2.029189, 2.904955",\ + "1.672934, 1.927920, 2.184134, 2.621652, 3.497416",\ + "0.864143, 1.119604, 1.374960, 1.812140, 2.687242",\ + "0.877736, 1.133197, 1.388554, 1.825734, 2.700835",\ + "0.901277, 1.156737, 1.412094, 1.849274, 2.724375",\ + "1.168814, 1.424274, 1.679631, 2.116810, 2.991910",\ + "1.761278, 2.016739, 2.272095, 2.709273, 3.584371",\ + "0.927637, 1.185001, 1.439095, 1.876053, 2.750751",\ + "0.941231, 1.198595, 1.452689, 1.889647, 2.764344",\ + "0.964771, 1.222135, 1.476229, 1.913187, 2.787884",\ + "1.232308, 1.489672, 1.743766, 2.180723, 3.055419",\ + "1.824772, 2.082136, 2.336229, 2.773186, 3.647880",\ + "1.263060, 1.546678, 1.790648, 2.225268, 3.096207",\ + "1.276654, 1.560272, 1.804242, 2.238862, 3.109800",\ + "1.300194, 1.583812, 1.827782, 2.262402, 3.133340",\ + "1.567731, 1.851349, 2.095319, 2.529938, 3.400876",\ + "2.160195, 2.443813, 2.687783, 3.122401, 3.993336"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.121485, 0.121485, 0.121485, 0.121484, 0.121482",\ + "0.152032, 0.152032, 0.152031, 0.152028, 0.152021",\ + "0.200984, 0.200984, 0.200984, 0.200984, 0.200984",\ + "0.823612, 0.823612, 0.823612, 0.823612, 0.823612",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121485, 0.121485, 0.121485, 0.121484, 0.121482",\ + "0.152032, 0.152032, 0.152031, 0.152028, 0.152021",\ + "0.200984, 0.200984, 0.200984, 0.200984, 0.200984",\ + "0.823612, 0.823612, 0.823612, 0.823612, 0.823612",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121485, 0.121485, 0.121485, 0.121484, 0.121482",\ + "0.152032, 0.152032, 0.152031, 0.152028, 0.152021",\ + "0.200984, 0.200984, 0.200984, 0.200984, 0.200984",\ + "0.823612, 0.823612, 0.823612, 0.823612, 0.823612",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121485, 0.121485, 0.121485, 0.121484, 0.121482",\ + "0.152032, 0.152032, 0.152031, 0.152028, 0.152021",\ + "0.200984, 0.200984, 0.200984, 0.200984, 0.200984",\ + "0.823612, 0.823612, 0.823612, 0.823612, 0.823612",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121485, 0.121485, 0.121485, 0.121484, 0.121482",\ + "0.152032, 0.152032, 0.152031, 0.152028, 0.152021",\ + "0.200984, 0.200984, 0.200984, 0.200984, 0.200984",\ + "0.823612, 0.823612, 0.823612, 0.823612, 0.823612",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.629902, 0.884806, 1.141041, 1.579317, 2.455871",\ + "0.641263, 0.896167, 1.152402, 1.590678, 2.467230",\ + "0.660001, 0.914905, 1.171139, 1.609414, 2.485964",\ + "0.828549, 1.083453, 1.339686, 1.777957, 2.654500",\ + "1.163359, 1.418263, 1.674496, 2.112767, 2.989310",\ + "0.717307, 0.972293, 1.228508, 1.666031, 2.541805",\ + "0.728669, 0.983655, 1.239870, 1.677392, 2.553164",\ + "0.747406, 1.002393, 1.258607, 1.696128, 2.571898",\ + "0.915954, 1.170941, 1.427154, 1.864671, 2.740433",\ + "1.250764, 1.505750, 1.761964, 2.199481, 3.075244",\ + "0.805651, 1.061112, 1.316469, 1.753652, 2.628760",\ + "0.817012, 1.072473, 1.327831, 1.765013, 2.640119",\ + "0.835750, 1.091211, 1.346568, 1.783749, 2.658853",\ + "1.004298, 1.259759, 1.515115, 1.952292, 2.827389",\ + "1.339108, 1.594568, 1.849925, 2.287102, 3.162199",\ + "0.869145, 1.126509, 1.380604, 1.817565, 2.692269",\ + "0.880507, 1.137871, 1.391965, 1.828925, 2.703628",\ + "0.899244, 1.156608, 1.410703, 1.847662, 2.722362",\ + "1.067792, 1.325156, 1.579249, 2.016205, 2.890898",\ + "1.402602, 1.659966, 1.914059, 2.351015, 3.225708",\ + "1.204568, 1.488186, 1.732157, 2.166780, 3.037725",\ + "1.215930, 1.499547, 1.743518, 2.178141, 3.049084",\ + "1.234668, 1.518285, 1.762256, 2.196877, 3.067818",\ + "1.403215, 1.686833, 1.930802, 2.365420, 3.236354",\ + "1.738025, 2.021643, 2.265612, 2.700230, 3.571164"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.068436, 0.068436, 0.068433, 0.068425, 0.068407",\ + "0.074512, 0.074512, 0.074510, 0.074502, 0.074487",\ + "0.094928, 0.094928, 0.094926, 0.094919, 0.094904",\ + "0.380690, 0.380690, 0.380690, 0.380690, 0.380690",\ + "1.025917, 1.025917, 1.025917, 1.025917, 1.025916",\ + "0.068436, 0.068436, 0.068433, 0.068425, 0.068407",\ + "0.074512, 0.074512, 0.074510, 0.074502, 0.074487",\ + "0.094928, 0.094928, 0.094926, 0.094919, 0.094904",\ + "0.380690, 0.380690, 0.380690, 0.380690, 0.380690",\ + "1.025917, 1.025917, 1.025917, 1.025917, 1.025916",\ + "0.068436, 0.068436, 0.068433, 0.068425, 0.068407",\ + "0.074512, 0.074512, 0.074510, 0.074502, 0.074487",\ + "0.094928, 0.094928, 0.094926, 0.094919, 0.094904",\ + "0.380690, 0.380690, 0.380690, 0.380690, 0.380690",\ + "1.025917, 1.025917, 1.025917, 1.025917, 1.025916",\ + "0.068436, 0.068436, 0.068433, 0.068425, 0.068407",\ + "0.074512, 0.074512, 0.074510, 0.074502, 0.074487",\ + "0.094928, 0.094928, 0.094926, 0.094919, 0.094904",\ + "0.380690, 0.380690, 0.380690, 0.380690, 0.380690",\ + "1.025917, 1.025917, 1.025917, 1.025917, 1.025916",\ + "0.068436, 0.068436, 0.068433, 0.068425, 0.068407",\ + "0.074512, 0.074512, 0.074510, 0.074502, 0.074487",\ + "0.094928, 0.094928, 0.094926, 0.094919, 0.094904",\ + "0.380690, 0.380690, 0.380690, 0.380690, 0.380690",\ + "1.025917, 1.025917, 1.025917, 1.025917, 1.025916"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[5]_redg_2344*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[37]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.195231, 0.463005, 0.734474, 1.195010, 2.116083",\ + "0.209369, 0.477311, 0.748785, 1.209873, 2.132048",\ + "0.233103, 0.501280, 0.772498, 1.233725, 2.156177",\ + "0.505445, 0.772942, 1.041862, 1.499718, 2.415430",\ + "1.101330, 1.368410, 1.636340, 2.092443, 3.004649",\ + "0.282639, 0.550544, 0.822013, 1.281725, 2.202017",\ + "0.296777, 0.564849, 0.836326, 1.296587, 2.217982",\ + "0.320749, 0.588817, 0.860040, 1.320439, 2.242111",\ + "0.593808, 0.860470, 1.129393, 1.586432, 2.501364",\ + "1.189691, 1.455935, 1.723865, 2.179157, 3.090583",\ + "0.371453, 0.639490, 0.909976, 1.369346, 2.288972",\ + "0.385884, 0.653793, 0.924289, 1.384209, 2.304937",\ + "0.410095, 0.677755, 0.948003, 1.408060, 2.329066",\ + "0.683117, 0.949390, 1.217355, 1.674054, 2.588319",\ + "1.278993, 1.544848, 1.811828, 2.266779, 3.177538",\ + "0.435127, 0.705073, 0.974115, 1.433259, 2.352481",\ + "0.449557, 0.719372, 0.988428, 1.448122, 2.368446",\ + "0.473764, 0.743329, 1.012141, 1.471974, 2.392575",\ + "0.746751, 1.014935, 1.281493, 1.737967, 2.651828",\ + "1.342621, 1.610383, 1.875965, 2.330692, 3.241047",\ + "0.771711, 1.068883, 1.325895, 1.782569, 2.697937",\ + "0.786132, 1.083144, 1.340213, 1.797434, 2.713902",\ + "0.810321, 1.107028, 1.363928, 1.821286, 2.738031",\ + "1.083085, 1.378307, 1.633246, 2.087266, 2.997284",\ + "1.678917, 1.973635, 2.227701, 2.679984, 3.586503"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.185659, 0.236480, 0.332306, 0.503768, 0.846690",\ + "0.203762, 0.251201, 0.346416, 0.519962, 0.867054",\ + "0.237818, 0.275998, 0.366817, 0.542132, 0.892761",\ + "0.823305, 0.824108, 0.854501, 0.958291, 1.165871",\ + "2.222180, 2.222247, 2.228687, 2.250859, 2.295203",\ + "0.185659, 0.236778, 0.332846, 0.503768, 0.846690",\ + "0.203762, 0.251491, 0.346963, 0.519962, 0.867054",\ + "0.238090, 0.276257, 0.367369, 0.542132, 0.892761",\ + "0.823322, 0.824110, 0.854828, 0.958291, 1.165871",\ + "2.222181, 2.222247, 2.228756, 2.250859, 2.295203",\ + "0.187582, 0.237448, 0.332856, 0.503768, 0.846690",\ + "0.205428, 0.252143, 0.346973, 0.519962, 0.867054",\ + "0.238891, 0.276838, 0.367379, 0.542132, 0.892761",\ + "0.823369, 0.824113, 0.854835, 0.958291, 1.165871",\ + "2.222186, 2.222247, 2.228758, 2.250859, 2.295203",\ + "0.188921, 0.238422, 0.332885, 0.503768, 0.846690",\ + "0.206588, 0.253091, 0.347002, 0.519962, 0.867054",\ + "0.239638, 0.277682, 0.367409, 0.542132, 0.892761",\ + "0.823414, 0.824119, 0.854852, 0.958291, 1.165871",\ + "2.222191, 2.222247, 2.228761, 2.250859, 2.295203",\ + "0.197449, 0.249827, 0.334624, 0.504477, 0.846690",\ + "0.213977, 0.264195, 0.348763, 0.520680, 0.867054",\ + "0.244398, 0.287568, 0.369187, 0.542857, 0.892761",\ + "0.823697, 0.824180, 0.855905, 0.958721, 1.165871",\ + "2.222221, 2.222247, 2.228986, 2.250950, 2.295203"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.199835, 0.394068, 0.663502, 1.119151, 2.030450",\ + "0.208748, 0.404375, 0.677456, 1.139816, 2.064535",\ + "0.223610, 0.421071, 0.699454, 1.171923, 2.116862",\ + "0.380613, 0.582386, 0.880612, 1.405667, 2.455778",\ + "0.716679, 0.922290, 1.228480, 1.784735, 2.897244",\ + "0.287243, 0.481603, 0.751025, 1.205865, 2.116384",\ + "0.296156, 0.491921, 0.765001, 1.226530, 2.150469",\ + "0.311018, 0.508632, 0.787030, 1.258637, 2.202796",\ + "0.468021, 0.669977, 0.968355, 1.492382, 2.541712",\ + "0.804087, 1.009874, 1.316321, 1.871449, 2.983178",\ + "0.368115, 0.570540, 0.838988, 1.293487, 2.203339",\ + "0.377029, 0.580882, 0.852964, 1.314152, 2.237424",\ + "0.391890, 0.597628, 0.874994, 1.346259, 2.289751",\ + "0.548893, 0.759039, 1.056321, 1.580003, 2.628667",\ + "0.884959, 1.098920, 1.404289, 1.959070, 3.070133",\ + "0.425818, 0.636109, 0.903125, 1.357400, 2.266848",\ + "0.434733, 0.646488, 0.917102, 1.378065, 2.300933",\ + "0.449593, 0.663284, 0.939134, 1.410172, 2.353260",\ + "0.606596, 0.824792, 1.120470, 1.643916, 2.692176",\ + "0.942662, 1.164649, 1.468444, 2.022984, 3.133642",\ + "0.728861, 0.999767, 1.254856, 1.706689, 2.612304",\ + "0.737784, 1.010567, 1.268901, 1.727382, 2.646389",\ + "0.752638, 1.027949, 1.291036, 1.759531, 2.698716",\ + "0.909639, 1.190589, 1.472905, 1.993493, 3.037632",\ + "1.245701, 1.530174, 1.821195, 2.372689, 3.479098"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.051713, 0.082206, 0.146667, 0.272496, 0.524154",\ + "0.059242, 0.084148, 0.146833, 0.273232, 0.526032",\ + "0.082676, 0.098099, 0.151707, 0.276480, 0.526025",\ + "0.382075, 0.382564, 0.407345, 0.490228, 0.655996",\ + "1.027888, 1.027888, 1.042321, 1.092011, 1.191392",\ + "0.051713, 0.082387, 0.147063, 0.272496, 0.524154",\ + "0.059242, 0.084316, 0.147231, 0.273232, 0.526032",\ + "0.082676, 0.098212, 0.152100, 0.276480, 0.526025",\ + "0.382075, 0.382568, 0.407606, 0.490228, 0.655996",\ + "1.027888, 1.027888, 1.042477, 1.092011, 1.191392",\ + "0.051782, 0.082793, 0.147071, 0.272496, 0.524154",\ + "0.059284, 0.084694, 0.147238, 0.273232, 0.526032",\ + "0.082697, 0.098465, 0.152108, 0.276480, 0.526025",\ + "0.382075, 0.382579, 0.407611, 0.490228, 0.655996",\ + "1.027888, 1.027888, 1.042480, 1.092011, 1.191392",\ + "0.051916, 0.083384, 0.147092, 0.272496, 0.524154",\ + "0.059368, 0.085243, 0.147259, 0.273232, 0.526032",\ + "0.082738, 0.098832, 0.152128, 0.276480, 0.526025",\ + "0.382075, 0.382594, 0.407625, 0.490228, 0.655996",\ + "1.027888, 1.027888, 1.042489, 1.092011, 1.191392",\ + "0.053133, 0.090301, 0.148368, 0.273016, 0.524154",\ + "0.060124, 0.091679, 0.148542, 0.273755, 0.526032",\ + "0.083110, 0.103136, 0.153394, 0.276996, 0.526025",\ + "0.382075, 0.382769, 0.408465, 0.490571, 0.655996",\ + "1.027888, 1.027888, 1.042993, 1.092217, 1.191392"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[5]_redg_2530*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[40]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.737863, 1.003362, 1.291646, 1.782380, 2.763848",\ + "0.751415, 1.016914, 1.305198, 1.795933, 2.777400",\ + "0.774946, 1.040444, 1.328728, 1.819463, 2.800930",\ + "1.042319, 1.307818, 1.596103, 2.086838, 3.068308",\ + "1.636291, 1.901789, 2.190096, 2.680906, 3.662528",\ + "0.825276, 1.090943, 1.379283, 1.869095, 2.849782",\ + "0.838828, 1.104495, 1.392835, 1.882647, 2.863334",\ + "0.862358, 1.128025, 1.416365, 1.906177, 2.886864",\ + "1.129732, 1.395399, 1.683739, 2.173553, 3.154242",\ + "1.723704, 1.989370, 2.277732, 2.767621, 3.748461",\ + "0.906195, 1.180006, 1.467248, 1.956717, 2.936737",\ + "0.919747, 1.193558, 1.480801, 1.970270, 2.950289",\ + "0.943277, 1.217088, 1.504331, 1.993800, 2.973819",\ + "1.210651, 1.484462, 1.771705, 2.261175, 3.241197",\ + "1.804622, 2.078433, 2.365698, 2.855243, 3.835416",\ + "0.966681, 1.245760, 1.531392, 2.020631, 3.000246",\ + "0.980233, 1.259312, 1.544944, 2.034183, 3.013798",\ + "1.003763, 1.282842, 1.568474, 2.057713, 3.037328",\ + "1.271137, 1.550216, 1.835848, 2.325089, 3.304706",\ + "1.865109, 2.144188, 2.429842, 2.919157, 3.898925",\ + "1.301775, 1.611517, 1.883481, 2.370070, 3.345702",\ + "1.315328, 1.625069, 1.897033, 2.383622, 3.359254",\ + "1.338858, 1.648599, 1.920563, 2.407152, 3.382784",\ + "1.606231, 1.915973, 2.187937, 2.674527, 3.650162",\ + "2.200203, 2.509944, 2.781931, 3.268596, 4.244381"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.121334, 0.121334, 0.121335, 0.121338, 0.121343",\ + "0.151694, 0.151694, 0.151693, 0.151692, 0.151690",\ + "0.201129, 0.201129, 0.201129, 0.201131, 0.201133",\ + "0.823409, 0.823409, 0.823408, 0.823407, 0.823404",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121334, 0.121334, 0.121335, 0.121338, 0.121343",\ + "0.151694, 0.151694, 0.151693, 0.151692, 0.151690",\ + "0.201129, 0.201129, 0.201129, 0.201131, 0.201133",\ + "0.823409, 0.823409, 0.823408, 0.823407, 0.823404",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121334, 0.121334, 0.121335, 0.121338, 0.121343",\ + "0.151694, 0.151694, 0.151693, 0.151692, 0.151690",\ + "0.201129, 0.201129, 0.201129, 0.201131, 0.201133",\ + "0.823409, 0.823409, 0.823408, 0.823407, 0.823404",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121334, 0.121334, 0.121335, 0.121338, 0.121343",\ + "0.151694, 0.151694, 0.151693, 0.151692, 0.151690",\ + "0.201129, 0.201129, 0.201129, 0.201131, 0.201133",\ + "0.823409, 0.823409, 0.823408, 0.823407, 0.823404",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121334, 0.121334, 0.121335, 0.121338, 0.121343",\ + "0.151694, 0.151694, 0.151693, 0.151692, 0.151690",\ + "0.201129, 0.201129, 0.201129, 0.201131, 0.201133",\ + "0.823409, 0.823409, 0.823408, 0.823407, 0.823404",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.705640, 0.971139, 1.259445, 1.750256, 2.731876",\ + "0.713583, 0.979081, 1.267388, 1.758198, 2.739818",\ + "0.727063, 0.992561, 1.280868, 1.771678, 2.753298",\ + "0.881016, 1.146515, 1.434821, 1.925632, 2.907252",\ + "1.220917, 1.486415, 1.774721, 2.265532, 3.247153",\ + "0.793053, 1.058720, 1.347082, 1.836970, 2.817810",\ + "0.800995, 1.066662, 1.355024, 1.844913, 2.825752",\ + "0.814475, 1.080142, 1.368504, 1.858393, 2.839232",\ + "0.968429, 1.234096, 1.522458, 2.012346, 2.993186",\ + "1.308329, 1.573996, 1.862358, 2.352247, 3.333086",\ + "0.873972, 1.147783, 1.435048, 1.924593, 2.904765",\ + "0.881914, 1.155725, 1.442990, 1.932535, 2.912707",\ + "0.895394, 1.169205, 1.456470, 1.946015, 2.926187",\ + "1.049348, 1.323159, 1.610423, 2.099968, 3.080141",\ + "1.389248, 1.663059, 1.950324, 2.439869, 3.420042",\ + "0.934458, 1.213537, 1.499191, 1.988506, 2.968274",\ + "0.942401, 1.221480, 1.507133, 1.996449, 2.976216",\ + "0.955880, 1.234959, 1.520613, 2.009929, 2.989696",\ + "1.109834, 1.388913, 1.674567, 2.163882, 3.143650",\ + "1.449734, 1.728813, 2.014467, 2.503783, 3.483551",\ + "1.269552, 1.579294, 1.851281, 2.337945, 3.313730",\ + "1.277495, 1.587236, 1.859223, 2.345888, 3.321672",\ + "1.290975, 1.600716, 1.872703, 2.359368, 3.335152",\ + "1.444928, 1.754670, 2.026657, 2.513321, 3.489106",\ + "1.784829, 2.094570, 2.366557, 2.853222, 3.829007"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.061214, 0.061214, 0.061208, 0.061187, 0.061144",\ + "0.068565, 0.068565, 0.068561, 0.068546, 0.068517",\ + "0.090394, 0.090394, 0.090392, 0.090386, 0.090375",\ + "0.380686, 0.380686, 0.380686, 0.380686, 0.380686",\ + "1.025894, 1.025894, 1.025894, 1.025894, 1.025894",\ + "0.061214, 0.061214, 0.061207, 0.061187, 0.061144",\ + "0.068565, 0.068565, 0.068561, 0.068546, 0.068517",\ + "0.090394, 0.090394, 0.090392, 0.090386, 0.090375",\ + "0.380686, 0.380686, 0.380686, 0.380686, 0.380686",\ + "1.025894, 1.025894, 1.025894, 1.025894, 1.025894",\ + "0.061214, 0.061214, 0.061207, 0.061187, 0.061144",\ + "0.068565, 0.068565, 0.068561, 0.068546, 0.068517",\ + "0.090394, 0.090394, 0.090392, 0.090386, 0.090375",\ + "0.380686, 0.380686, 0.380686, 0.380686, 0.380686",\ + "1.025894, 1.025894, 1.025894, 1.025894, 1.025894",\ + "0.061214, 0.061214, 0.061207, 0.061187, 0.061144",\ + "0.068565, 0.068565, 0.068561, 0.068546, 0.068517",\ + "0.090394, 0.090394, 0.090392, 0.090386, 0.090375",\ + "0.380686, 0.380686, 0.380686, 0.380686, 0.380686",\ + "1.025894, 1.025894, 1.025894, 1.025894, 1.025894",\ + "0.061214, 0.061214, 0.061207, 0.061186, 0.061144",\ + "0.068565, 0.068565, 0.068561, 0.068546, 0.068517",\ + "0.090394, 0.090394, 0.090392, 0.090386, 0.090375",\ + "0.380686, 0.380686, 0.380686, 0.380686, 0.380686",\ + "1.025894, 1.025894, 1.025894, 1.025894, 1.025894"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[5]_redg_2668*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[44]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.109772, 0.369798, 0.626503, 1.061758, 1.932266",\ + "0.120352, 0.381519, 0.640958, 1.080478, 1.959519",\ + "0.143356, 0.404296, 0.665874, 1.109884, 1.997905",\ + "0.467994, 0.696012, 0.968260, 1.421863, 2.329069",\ + "1.081974, 1.301531, 1.593583, 2.086339, 3.071851",\ + "0.198042, 0.457293, 0.713962, 1.148472, 2.018200",\ + "0.208624, 0.469024, 0.728430, 1.167192, 2.045453",\ + "0.231607, 0.491807, 0.753360, 1.196598, 2.083839",\ + "0.555400, 0.783574, 1.055776, 1.508577, 2.415003",\ + "1.169380, 1.389148, 1.681223, 2.173053, 3.157785",\ + "0.287235, 0.546131, 0.801923, 1.236093, 2.105155",\ + "0.297824, 0.557883, 0.816391, 1.254813, 2.132408",\ + "0.320747, 0.580678, 0.841322, 1.284219, 2.170794",\ + "0.636219, 0.872561, 1.143739, 1.596198, 2.501958",\ + "1.250216, 1.478256, 1.769187, 2.260674, 3.244740",\ + "0.350832, 0.611557, 0.866057, 1.300006, 2.168664",\ + "0.361428, 0.623341, 0.880526, 1.318726, 2.195917",\ + "0.384293, 0.646153, 0.905457, 1.348132, 2.234303",\ + "0.693839, 0.938203, 1.207876, 1.660111, 2.565467",\ + "1.307871, 1.544076, 1.833331, 2.324587, 3.308249",\ + "0.686914, 0.973559, 1.217580, 1.649209, 2.514120",\ + "0.697552, 0.985713, 1.232092, 1.667947, 2.541373",\ + "0.720052, 1.008731, 1.257069, 1.697372, 2.579759",\ + "1.005905, 1.302737, 1.559584, 2.009390, 2.910923",\ + "1.610583, 1.910693, 2.185437, 2.674028, 3.653705"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.074635, 0.092924, 0.146295, 0.240037, 0.427522",\ + "0.102546, 0.120314, 0.177030, 0.284760, 0.500219",\ + "0.161902, 0.174975, 0.229446, 0.352350, 0.598157",\ + "0.823637, 0.823637, 0.866693, 1.014155, 1.309078",\ + "2.221941, 2.221941, 2.244858, 2.323347, 2.480325",\ + "0.074635, 0.093094, 0.146590, 0.240037, 0.427522",\ + "0.102546, 0.120480, 0.177368, 0.284760, 0.500219",\ + "0.161902, 0.175097, 0.229832, 0.352350, 0.598157",\ + "0.823637, 0.823637, 0.867157, 1.014155, 1.309078",\ + "2.221941, 2.221941, 2.245105, 2.323347, 2.480325",\ + "0.074635, 0.093474, 0.146595, 0.240037, 0.427522",\ + "0.102546, 0.120849, 0.177375, 0.284760, 0.500219",\ + "0.161902, 0.175368, 0.229839, 0.352350, 0.598157",\ + "0.823637, 0.823637, 0.867165, 1.014155, 1.309078",\ + "2.221941, 2.221941, 2.245110, 2.323347, 2.480325",\ + "0.074635, 0.094026, 0.146611, 0.240037, 0.427522",\ + "0.102546, 0.121384, 0.177393, 0.284760, 0.500219",\ + "0.161902, 0.175763, 0.229860, 0.352350, 0.598157",\ + "0.823637, 0.823637, 0.867190, 1.014155, 1.309078",\ + "2.221941, 2.221941, 2.245123, 2.323347, 2.480325",\ + "0.074635, 0.100491, 0.147562, 0.240424, 0.427522",\ + "0.102546, 0.127666, 0.178485, 0.285204, 0.500219",\ + "0.161902, 0.180384, 0.231107, 0.352857, 0.598157",\ + "0.823637, 0.823637, 0.868686, 1.014764, 1.309078",\ + "2.221941, 2.221941, 2.245919, 2.323671, 2.480325"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.141728, 0.322683, 0.508414, 0.851578, 1.569056",\ + "0.147760, 0.329649, 0.526344, 0.903425, 1.657587",\ + "0.158195, 0.340967, 0.571363, 0.971528, 1.771856",\ + "0.298823, 0.523674, 0.808829, 1.303379, 2.292479",\ + "0.636132, 0.863255, 1.152943, 1.685611, 2.750947",\ + "0.229134, 0.410071, 0.595881, 0.938291, 1.654990",\ + "0.235166, 0.417039, 0.613620, 0.990139, 1.743521",\ + "0.245601, 0.428357, 0.658712, 1.058241, 1.857790",\ + "0.386229, 0.611242, 0.896475, 1.390093, 2.378412",\ + "0.723538, 0.950780, 1.240708, 1.772325, 2.836881",\ + "0.309995, 0.490402, 0.675907, 1.025913, 1.741945",\ + "0.316032, 0.497370, 0.701577, 1.077760, 1.830476",\ + "0.326472, 0.511248, 0.746671, 1.145863, 1.944745",\ + "0.467101, 0.700242, 0.984439, 1.477714, 2.465368",\ + "0.804387, 1.039684, 1.328675, 1.859946, 2.923836",\ + "0.367698, 0.547951, 0.733450, 1.089826, 1.805454",\ + "0.373747, 0.554919, 0.765701, 1.141673, 1.893985",\ + "0.384198, 0.576458, 0.810799, 1.209776, 2.008254",\ + "0.524826, 0.765905, 1.048583, 1.541627, 2.528877",\ + "0.862067, 1.105206, 1.392825, 1.923859, 2.987345",\ + "0.670854, 0.880709, 1.082881, 1.438713, 2.150910",\ + "0.677008, 0.904085, 1.116634, 1.490636, 2.239441",\ + "0.687558, 0.935916, 1.161966, 1.558834, 2.353710",\ + "0.834408, 1.130676, 1.400707, 1.891076, 2.874332",\ + "1.178988, 1.468337, 1.745336, 2.273465, 3.332801"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.063168, 0.063168, 0.086452, 0.196369, 0.354186",\ + "0.068741, 0.068741, 0.139232, 0.228666, 0.407534",\ + "0.084603, 0.084603, 0.171201, 0.272810, 0.476028",\ + "0.381099, 0.384063, 0.433028, 0.586290, 0.892815",\ + "1.028844, 1.028844, 1.069845, 1.210271, 1.491123",\ + "0.063168, 0.063168, 0.086512, 0.196369, 0.354186",\ + "0.068741, 0.068741, 0.139513, 0.228666, 0.407534",\ + "0.084603, 0.084603, 0.171521, 0.272810, 0.476028",\ + "0.381099, 0.384091, 0.433510, 0.586290, 0.892815",\ + "1.028844, 1.028844, 1.070287, 1.210271, 1.491123",\ + "0.063168, 0.063168, 0.086512, 0.196369, 0.354186",\ + "0.068741, 0.068741, 0.139518, 0.228666, 0.407534",\ + "0.084603, 0.108819, 0.171527, 0.272810, 0.476028",\ + "0.381099, 0.384153, 0.433519, 0.586290, 0.892815",\ + "1.028844, 1.028844, 1.070295, 1.210271, 1.491123",\ + "0.063168, 0.063168, 0.086512, 0.196369, 0.354186",\ + "0.068741, 0.068741, 0.139534, 0.228666, 0.407534",\ + "0.084603, 0.109528, 0.171544, 0.272810, 0.476028",\ + "0.381099, 0.384242, 0.433545, 0.586290, 0.892815",\ + "1.028844, 1.028844, 1.070319, 1.210271, 1.491123",\ + "0.063168, 0.081414, 0.118527, 0.196695, 0.354186",\ + "0.068741, 0.094649, 0.140441, 0.229035, 0.407534",\ + "0.084603, 0.117839, 0.172574, 0.273230, 0.476028",\ + "0.381099, 0.385290, 0.435099, 0.586923, 0.892815",\ + "1.028844, 1.028844, 1.071743, 1.210851, 1.491123"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[5]_redg_2709*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[45]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.715344, 0.975445, 1.253880, 1.716396, 2.641427",\ + "0.728896, 0.988997, 1.267432, 1.729948, 2.654979",\ + "0.752427, 1.012527, 1.290962, 1.753478, 2.678509",\ + "1.019800, 1.279901, 1.558336, 2.020853, 2.945885",\ + "1.613771, 1.873872, 2.152319, 2.614874, 3.539985",\ + "0.802750, 1.063030, 1.341425, 1.803109, 2.727360",\ + "0.816303, 1.076582, 1.354977, 1.816662, 2.740913",\ + "0.839833, 1.100112, 1.378507, 1.840192, 2.764443",\ + "1.107206, 1.367486, 1.645881, 2.107566, 3.031819",\ + "1.701178, 1.961458, 2.239864, 2.701588, 3.625918",\ + "0.883600, 1.152069, 1.429387, 1.890731, 2.814316",\ + "0.897153, 1.165621, 1.442940, 1.904283, 2.827868",\ + "0.920683, 1.189151, 1.466470, 1.927813, 2.851398",\ + "1.188056, 1.456525, 1.733844, 2.195188, 3.118774",\ + "1.782027, 2.050497, 2.327826, 2.789209, 3.712873",\ + "0.945225, 1.217787, 1.493526, 1.954644, 2.877825",\ + "0.958777, 1.231339, 1.507078, 1.968196, 2.891377",\ + "0.982307, 1.254869, 1.530608, 1.991726, 2.914907",\ + "1.249681, 1.522243, 1.797982, 2.259101, 3.182283",\ + "1.843652, 2.116215, 2.391965, 2.853122, 3.776382",\ + "1.282097, 1.583212, 1.845325, 2.303960, 3.223280",\ + "1.295649, 1.596764, 1.858877, 2.317512, 3.236833",\ + "1.319179, 1.620294, 1.882407, 2.341042, 3.260363",\ + "1.586553, 1.887668, 2.149781, 2.608417, 3.527739",\ + "2.180524, 2.481639, 2.743765, 3.202439, 4.121839"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.121334, 0.121334, 0.121335, 0.121336, 0.121339",\ + "0.151694, 0.151694, 0.151694, 0.151693, 0.151692",\ + "0.201129, 0.201129, 0.201129, 0.201130, 0.201131",\ + "0.823409, 0.823409, 0.823409, 0.823408, 0.823406",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121334, 0.121334, 0.121335, 0.121336, 0.121339",\ + "0.151694, 0.151694, 0.151694, 0.151693, 0.151692",\ + "0.201129, 0.201129, 0.201129, 0.201130, 0.201131",\ + "0.823409, 0.823409, 0.823409, 0.823408, 0.823406",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121334, 0.121334, 0.121335, 0.121336, 0.121339",\ + "0.151694, 0.151694, 0.151694, 0.151693, 0.151692",\ + "0.201129, 0.201129, 0.201129, 0.201130, 0.201131",\ + "0.823409, 0.823409, 0.823409, 0.823408, 0.823406",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121334, 0.121334, 0.121335, 0.121336, 0.121339",\ + "0.151694, 0.151694, 0.151694, 0.151693, 0.151692",\ + "0.201129, 0.201129, 0.201129, 0.201130, 0.201131",\ + "0.823409, 0.823409, 0.823409, 0.823408, 0.823406",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134",\ + "0.121334, 0.121334, 0.121335, 0.121336, 0.121339",\ + "0.151694, 0.151694, 0.151694, 0.151693, 0.151692",\ + "0.201129, 0.201129, 0.201129, 0.201130, 0.201131",\ + "0.823409, 0.823409, 0.823409, 0.823408, 0.823406",\ + "2.222134, 2.222134, 2.222134, 2.222134, 2.222134"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.683121, 0.943222, 1.221668, 1.684223, 2.609334",\ + "0.691063, 0.951164, 1.229611, 1.692166, 2.617276",\ + "0.704543, 0.964644, 1.243091, 1.705646, 2.630756",\ + "0.858497, 1.118598, 1.397044, 1.859599, 2.784709",\ + "1.198397, 1.458498, 1.736945, 2.199500, 3.124610",\ + "0.770527, 1.030807, 1.309213, 1.770937, 2.695267",\ + "0.778469, 1.038749, 1.317156, 1.778880, 2.703210",\ + "0.791949, 1.052229, 1.330636, 1.792360, 2.716690",\ + "0.945903, 1.206183, 1.484589, 1.946313, 2.870643",\ + "1.285803, 1.546083, 1.824489, 2.286213, 3.210544",\ + "0.851377, 1.119846, 1.397176, 1.858559, 2.782223",\ + "0.859320, 1.127788, 1.405118, 1.866501, 2.790165",\ + "0.872799, 1.141268, 1.418598, 1.879981, 2.803645",\ + "1.026753, 1.295222, 1.572552, 2.033935, 2.957598",\ + "1.366653, 1.635122, 1.912452, 2.373835, 3.297499",\ + "0.913002, 1.185564, 1.461314, 1.922472, 2.845731",\ + "0.920944, 1.193506, 1.469257, 1.930414, 2.853674",\ + "0.934424, 1.206986, 1.482737, 1.943894, 2.867154",\ + "1.088378, 1.360940, 1.636690, 2.097847, 3.021107",\ + "1.428278, 1.700840, 1.976590, 2.437748, 3.361008",\ + "1.249874, 1.550989, 1.813114, 2.271788, 3.191187",\ + "1.257816, 1.558931, 1.821056, 2.279730, 3.199130",\ + "1.271296, 1.572411, 1.834536, 2.293210, 3.212610",\ + "1.425250, 1.726365, 1.988490, 2.447164, 3.366563",\ + "1.765150, 2.066265, 2.328390, 2.787064, 3.706464"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.061213, 0.061213, 0.061210, 0.061198, 0.061174",\ + "0.068565, 0.068565, 0.068562, 0.068554, 0.068538",\ + "0.090394, 0.090394, 0.090393, 0.090389, 0.090383",\ + "0.380686, 0.380686, 0.380686, 0.380686, 0.380686",\ + "1.025894, 1.025894, 1.025894, 1.025894, 1.025894",\ + "0.061213, 0.061213, 0.061210, 0.061198, 0.061174",\ + "0.068565, 0.068565, 0.068562, 0.068554, 0.068538",\ + "0.090394, 0.090394, 0.090393, 0.090389, 0.090383",\ + "0.380686, 0.380686, 0.380686, 0.380686, 0.380686",\ + "1.025894, 1.025894, 1.025894, 1.025894, 1.025894",\ + "0.061213, 0.061213, 0.061210, 0.061198, 0.061174",\ + "0.068565, 0.068565, 0.068562, 0.068554, 0.068538",\ + "0.090394, 0.090394, 0.090393, 0.090389, 0.090383",\ + "0.380686, 0.380686, 0.380686, 0.380686, 0.380686",\ + "1.025894, 1.025894, 1.025894, 1.025894, 1.025894",\ + "0.061213, 0.061213, 0.061210, 0.061198, 0.061174",\ + "0.068565, 0.068565, 0.068562, 0.068554, 0.068538",\ + "0.090394, 0.090394, 0.090393, 0.090389, 0.090383",\ + "0.380686, 0.380686, 0.380686, 0.380686, 0.380686",\ + "1.025894, 1.025894, 1.025894, 1.025894, 1.025894",\ + "0.061213, 0.061213, 0.061210, 0.061198, 0.061174",\ + "0.068565, 0.068565, 0.068562, 0.068554, 0.068538",\ + "0.090394, 0.090394, 0.090393, 0.090389, 0.090383",\ + "0.380686, 0.380686, 0.380686, 0.380686, 0.380686",\ + "1.025894, 1.025894, 1.025894, 1.025894, 1.025894"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[5]_redg_2681*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[16]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.385362, 0.574573, 0.765319, 1.061205, 1.627908",\ + "0.404628, 0.593839, 0.784585, 1.080471, 1.647174",\ + "0.436306, 0.625517, 0.816263, 1.112149, 1.678852",\ + "0.725958, 0.915169, 1.105914, 1.401800, 1.968502",\ + "1.319903, 1.509114, 1.699858, 1.995744, 2.562446",\ + "0.473615, 0.661891, 0.852600, 1.148510, 1.715261",\ + "0.492881, 0.681157, 0.871866, 1.167776, 1.734527",\ + "0.524560, 0.712836, 0.903544, 1.199454, 1.766205",\ + "0.814212, 1.002488, 1.193195, 1.489105, 2.055855",\ + "1.408156, 1.596432, 1.787139, 2.083049, 2.649799",\ + "0.562261, 0.742226, 0.932626, 1.228538, 1.795292",\ + "0.581527, 0.761492, 0.951893, 1.247805, 1.814559",\ + "0.613206, 0.793171, 0.983571, 1.279483, 1.846237",\ + "0.902858, 1.082823, 1.273222, 1.569133, 2.135887",\ + "1.496802, 1.676767, 1.867166, 2.163077, 2.729831",\ + "0.620370, 0.800057, 0.990350, 1.285975, 1.852322",\ + "0.639636, 0.819323, 1.009616, 1.305241, 1.871588",\ + "0.671315, 0.851002, 1.041294, 1.336920, 1.903266",\ + "0.960967, 1.140654, 1.330945, 1.626570, 2.192916",\ + "1.554911, 1.734598, 1.924889, 2.220514, 2.786860",\ + "0.922623, 1.105385, 1.294011, 1.589153, 2.154560",\ + "0.941889, 1.124651, 1.313277, 1.608420, 2.173826",\ + "0.973567, 1.156330, 1.344955, 1.640098, 2.205504",\ + "1.263219, 1.445982, 1.634606, 1.929748, 2.495154",\ + "1.857164, 2.039926, 2.228550, 2.523692, 3.089098"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.107385, 0.107385, 0.107386, 0.107387, 0.107387",\ + "0.140617, 0.140617, 0.140617, 0.140618, 0.140619",\ + "0.189797, 0.189797, 0.189797, 0.189797, 0.189798",\ + "0.817737, 0.817737, 0.817737, 0.817737, 0.817737",\ + "2.195570, 2.195570, 2.195569, 2.195569, 2.195568",\ + "0.107385, 0.107385, 0.107386, 0.107387, 0.107387",\ + "0.140617, 0.140617, 0.140617, 0.140618, 0.140619",\ + "0.189797, 0.189797, 0.189797, 0.189797, 0.189798",\ + "0.817737, 0.817737, 0.817737, 0.817737, 0.817737",\ + "2.195570, 2.195570, 2.195569, 2.195569, 2.195568",\ + "0.107385, 0.107385, 0.107386, 0.107387, 0.107387",\ + "0.140617, 0.140617, 0.140617, 0.140618, 0.140619",\ + "0.189797, 0.189797, 0.189797, 0.189797, 0.189798",\ + "0.817737, 0.817737, 0.817737, 0.817737, 0.817737",\ + "2.195570, 2.195570, 2.195569, 2.195569, 2.195568",\ + "0.107385, 0.107385, 0.107386, 0.107387, 0.107387",\ + "0.140617, 0.140617, 0.140617, 0.140618, 0.140619",\ + "0.189797, 0.189797, 0.189797, 0.189797, 0.189798",\ + "0.817737, 0.817737, 0.817737, 0.817737, 0.817737",\ + "2.195570, 2.195570, 2.195569, 2.195569, 2.195568",\ + "0.107385, 0.107385, 0.107386, 0.107387, 0.107387",\ + "0.140617, 0.140617, 0.140617, 0.140618, 0.140619",\ + "0.189797, 0.189797, 0.189797, 0.189797, 0.189798",\ + "0.817737, 0.817737, 0.817737, 0.817737, 0.817737",\ + "2.195570, 2.195570, 2.195569, 2.195569, 2.195568"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.395642, 0.585187, 0.775931, 1.071620, 1.637841",\ + "0.403773, 0.592984, 0.783728, 1.079613, 1.646315",\ + "0.417192, 0.606403, 0.797147, 1.093032, 1.659734",\ + "0.569868, 0.759079, 0.949823, 1.245708, 1.812411",\ + "0.903831, 1.093042, 1.283787, 1.579672, 2.146375",\ + "0.483904, 0.672505, 0.863212, 1.158925, 1.725194",\ + "0.492026, 0.680302, 0.871009, 1.166918, 1.733668",\ + "0.505446, 0.693722, 0.884428, 1.180337, 1.747088",\ + "0.658121, 0.846397, 1.037104, 1.333013, 1.899764",\ + "0.992085, 1.180361, 1.371068, 1.666977, 2.233728",\ + "0.572576, 0.752841, 0.943239, 1.238954, 1.805226",\ + "0.580672, 0.760637, 0.951036, 1.246946, 1.813700",\ + "0.594092, 0.774057, 0.964455, 1.260366, 1.827119",\ + "0.746767, 0.926732, 1.117131, 1.413042, 1.979796",\ + "1.080731, 1.260696, 1.451095, 1.747006, 2.313760",\ + "0.630984, 0.810671, 1.000962, 1.296390, 1.862254",\ + "0.638781, 0.818468, 1.008759, 1.304383, 1.870729",\ + "0.652200, 0.831887, 1.022178, 1.317803, 1.884149",\ + "0.804876, 0.984563, 1.174854, 1.470479, 2.036825",\ + "1.138840, 1.318527, 1.508818, 1.804443, 2.370789",\ + "0.933237, 1.115999, 1.304623, 1.599568, 2.164490",\ + "0.941034, 1.123796, 1.312420, 1.607561, 2.172967",\ + "0.954453, 1.137215, 1.325839, 1.620981, 2.186387",\ + "1.107129, 1.289891, 1.478515, 1.773657, 2.339063",\ + "1.441092, 1.623855, 1.812479, 2.107621, 2.673027"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.049251, 0.049251, 0.049251, 0.049251, 0.049251",\ + "0.055580, 0.055580, 0.055580, 0.055580, 0.055580",\ + "0.075314, 0.075314, 0.075314, 0.075314, 0.075314",\ + "0.368762, 0.368762, 0.368762, 0.368762, 0.368762",\ + "1.002200, 1.002200, 1.002200, 1.002200, 1.002201",\ + "0.049251, 0.049251, 0.049251, 0.049251, 0.049251",\ + "0.055580, 0.055580, 0.055580, 0.055580, 0.055580",\ + "0.075314, 0.075314, 0.075314, 0.075314, 0.075314",\ + "0.368762, 0.368762, 0.368762, 0.368762, 0.368762",\ + "1.002200, 1.002200, 1.002200, 1.002200, 1.002201",\ + "0.049251, 0.049251, 0.049251, 0.049251, 0.049251",\ + "0.055580, 0.055580, 0.055580, 0.055580, 0.055580",\ + "0.075314, 0.075314, 0.075314, 0.075314, 0.075314",\ + "0.368762, 0.368762, 0.368762, 0.368762, 0.368762",\ + "1.002200, 1.002200, 1.002200, 1.002200, 1.002201",\ + "0.049251, 0.049251, 0.049251, 0.049251, 0.049251",\ + "0.055580, 0.055580, 0.055580, 0.055580, 0.055580",\ + "0.075314, 0.075314, 0.075314, 0.075314, 0.075314",\ + "0.368762, 0.368762, 0.368762, 0.368762, 0.368762",\ + "1.002200, 1.002200, 1.002200, 1.002200, 1.002201",\ + "0.049251, 0.049251, 0.049251, 0.049251, 0.049251",\ + "0.055580, 0.055580, 0.055580, 0.055580, 0.055580",\ + "0.075314, 0.075314, 0.075314, 0.075314, 0.075314",\ + "0.368762, 0.368762, 0.368762, 0.368762, 0.368762",\ + "1.002200, 1.002200, 1.002200, 1.002200, 1.002201"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[5]_redg_min_2495*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[20]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.535388, 0.757178, 0.935245, 1.224116, 1.784806",\ + "0.554760, 0.776550, 0.954617, 1.243488, 1.804178",\ + "0.586214, 0.808003, 0.986070, 1.274942, 1.835631",\ + "0.875148, 1.096938, 1.275005, 1.563877, 2.124566",\ + "1.469041, 1.690830, 1.868897, 2.157769, 2.718458",\ + "0.623792, 0.844496, 1.022526, 1.311421, 1.872159",\ + "0.643164, 0.863868, 1.041898, 1.330793, 1.891531",\ + "0.674618, 0.895322, 1.073351, 1.362247, 1.922985",\ + "0.963552, 1.184257, 1.362286, 1.651182, 2.211919",\ + "1.557444, 1.778149, 1.956178, 2.245074, 2.805811",\ + "0.712864, 0.924832, 1.102553, 1.391450, 1.952191",\ + "0.732236, 0.944203, 1.121924, 1.410822, 1.971563",\ + "0.763690, 0.975657, 1.153378, 1.442276, 2.003016",\ + "1.052624, 1.264592, 1.442313, 1.731210, 2.291951",\ + "1.646516, 1.858484, 2.036205, 2.325102, 2.885843",\ + "0.776122, 0.982654, 1.160246, 1.448879, 2.009206",\ + "0.795494, 1.002026, 1.179617, 1.468251, 2.028577",\ + "0.826948, 1.033479, 1.211071, 1.499705, 2.060031",\ + "1.115882, 1.322414, 1.500006, 1.788640, 2.348966",\ + "1.709774, 1.916306, 2.093898, 2.382532, 2.942858",\ + "1.107140, 1.287923, 1.463902, 1.752051, 2.311426",\ + "1.126512, 1.307295, 1.483274, 1.771423, 2.330798",\ + "1.157965, 1.338748, 1.514728, 1.802877, 2.362252",\ + "1.446900, 1.627683, 1.803662, 2.091812, 2.651186",\ + "2.040792, 2.221575, 2.397554, 2.685704, 3.245078"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.108154, 0.108154, 0.108154, 0.108154, 0.108154",\ + "0.141536, 0.141536, 0.141536, 0.141536, 0.141536",\ + "0.190539, 0.190539, 0.190539, 0.190539, 0.190539",\ + "0.817689, 0.817689, 0.817689, 0.817689, 0.817689",\ + "2.194880, 2.194880, 2.194880, 2.194880, 2.194880",\ + "0.108154, 0.108154, 0.108154, 0.108154, 0.108154",\ + "0.141536, 0.141536, 0.141536, 0.141536, 0.141536",\ + "0.190539, 0.190539, 0.190539, 0.190539, 0.190539",\ + "0.817689, 0.817689, 0.817689, 0.817689, 0.817689",\ + "2.194880, 2.194880, 2.194880, 2.194880, 2.194880",\ + "0.108154, 0.108154, 0.108154, 0.108154, 0.108154",\ + "0.141536, 0.141536, 0.141536, 0.141536, 0.141536",\ + "0.190539, 0.190539, 0.190539, 0.190539, 0.190539",\ + "0.817689, 0.817689, 0.817689, 0.817689, 0.817689",\ + "2.194880, 2.194880, 2.194880, 2.194880, 2.194880",\ + "0.108154, 0.108154, 0.108154, 0.108154, 0.108154",\ + "0.141536, 0.141536, 0.141536, 0.141536, 0.141536",\ + "0.190539, 0.190539, 0.190539, 0.190539, 0.190539",\ + "0.817689, 0.817689, 0.817689, 0.817689, 0.817689",\ + "2.194880, 2.194880, 2.194880, 2.194880, 2.194880",\ + "0.108154, 0.108154, 0.108154, 0.108154, 0.108154",\ + "0.141536, 0.141536, 0.141536, 0.141536, 0.141536",\ + "0.190539, 0.190539, 0.190539, 0.190539, 0.190539",\ + "0.817689, 0.817689, 0.817689, 0.817689, 0.817689",\ + "2.194880, 2.194880, 2.194880, 2.194880, 2.194880"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.544632, 0.766422, 0.944489, 1.233360, 1.794050",\ + "0.552443, 0.774232, 0.952299, 1.241171, 1.801860",\ + "0.565862, 0.787651, 0.965718, 1.254590, 1.815279",\ + "0.718832, 0.940622, 1.118689, 1.407560, 1.968250",\ + "1.052901, 1.274690, 1.452757, 1.741629, 2.302318",\ + "0.633036, 0.853740, 1.031770, 1.320665, 1.881403",\ + "0.640847, 0.861551, 1.039580, 1.328476, 1.889213",\ + "0.654266, 0.874970, 1.052999, 1.341895, 1.902633",\ + "0.807236, 1.027940, 1.205970, 1.494865, 2.055603",\ + "1.141305, 1.362009, 1.540038, 1.828934, 2.389672",\ + "0.722108, 0.934075, 1.111796, 1.400694, 1.961435",\ + "0.729918, 0.941886, 1.119607, 1.408504, 1.969245",\ + "0.743338, 0.955305, 1.133026, 1.421923, 1.982664",\ + "0.896308, 1.108276, 1.285997, 1.574894, 2.135635",\ + "1.230376, 1.442344, 1.620065, 1.908962, 2.469703",\ + "0.785366, 0.991898, 1.169490, 1.458123, 2.018450",\ + "0.793177, 0.999708, 1.177300, 1.465934, 2.026260",\ + "0.806596, 1.013127, 1.190719, 1.479353, 2.039679",\ + "0.959566, 1.166098, 1.343690, 1.632324, 2.192650",\ + "1.293635, 1.500166, 1.677758, 1.966392, 2.526718",\ + "1.116384, 1.297167, 1.473146, 1.761295, 2.320670",\ + "1.124194, 1.304977, 1.480956, 1.769106, 2.328480",\ + "1.137613, 1.318397, 1.494376, 1.782525, 2.341900",\ + "1.290584, 1.471367, 1.647346, 1.935495, 2.494870",\ + "1.624652, 1.805435, 1.981414, 2.269564, 2.828938"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.046250, 0.046250, 0.046250, 0.046250, 0.046250",\ + "0.051898, 0.051898, 0.051898, 0.051898, 0.051898",\ + "0.075290, 0.075290, 0.075290, 0.075290, 0.075290",\ + "0.368839, 0.368839, 0.368839, 0.368839, 0.368839",\ + "1.000959, 1.000959, 1.000959, 1.000959, 1.000959",\ + "0.046250, 0.046250, 0.046250, 0.046250, 0.046250",\ + "0.051898, 0.051898, 0.051898, 0.051898, 0.051898",\ + "0.075290, 0.075290, 0.075290, 0.075290, 0.075290",\ + "0.368839, 0.368839, 0.368839, 0.368839, 0.368839",\ + "1.000959, 1.000959, 1.000959, 1.000959, 1.000959",\ + "0.046250, 0.046250, 0.046250, 0.046250, 0.046250",\ + "0.051898, 0.051898, 0.051898, 0.051898, 0.051898",\ + "0.075290, 0.075290, 0.075290, 0.075290, 0.075290",\ + "0.368839, 0.368839, 0.368839, 0.368839, 0.368839",\ + "1.000959, 1.000959, 1.000959, 1.000959, 1.000959",\ + "0.046250, 0.046250, 0.046250, 0.046250, 0.046250",\ + "0.051898, 0.051898, 0.051898, 0.051898, 0.051898",\ + "0.075290, 0.075290, 0.075290, 0.075290, 0.075290",\ + "0.368839, 0.368839, 0.368839, 0.368839, 0.368839",\ + "1.000959, 1.000959, 1.000959, 1.000959, 1.000959",\ + "0.046250, 0.046250, 0.046250, 0.046250, 0.046250",\ + "0.051898, 0.051898, 0.051898, 0.051898, 0.051898",\ + "0.075290, 0.075290, 0.075290, 0.075290, 0.075290",\ + "0.368839, 0.368839, 0.368839, 0.368839, 0.368839",\ + "1.000959, 1.000959, 1.000959, 1.000959, 1.000959"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[5]_redg_min_2650*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[22]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.511815, 0.739156, 0.923211, 1.217666, 1.786831",\ + "0.531187, 0.758528, 0.942583, 1.237038, 1.806203",\ + "0.562641, 0.789981, 0.974037, 1.268491, 1.837657",\ + "0.851575, 1.078916, 1.262971, 1.557426, 2.126591",\ + "1.445467, 1.672808, 1.856863, 2.151318, 2.720483",\ + "0.600144, 0.826474, 1.010492, 1.304971, 1.874184",\ + "0.619516, 0.845846, 1.029864, 1.324343, 1.893556",\ + "0.650970, 0.877300, 1.061317, 1.355796, 1.925010",\ + "0.939904, 1.166234, 1.350252, 1.644731, 2.213945",\ + "1.533796, 1.760126, 1.944144, 2.238623, 2.807837",\ + "0.689248, 0.906807, 1.090519, 1.384999, 1.954216",\ + "0.708620, 0.926179, 1.109891, 1.404371, 1.973588",\ + "0.740074, 0.957633, 1.141344, 1.435825, 2.005042",\ + "1.029009, 1.246567, 1.430279, 1.724759, 2.293976",\ + "1.622900, 1.840459, 2.024171, 2.318651, 2.887868",\ + "0.752647, 0.964632, 1.148227, 1.442439, 2.011252",\ + "0.772019, 0.984004, 1.167598, 1.461811, 2.030624",\ + "0.803473, 1.015458, 1.199052, 1.493265, 2.062078",\ + "1.092407, 1.304392, 1.487987, 1.782200, 2.351013",\ + "1.686299, 1.898284, 2.081879, 2.376091, 2.944905",\ + "1.087484, 1.269911, 1.451885, 1.745620, 2.313499",\ + "1.106856, 1.289283, 1.471256, 1.764992, 2.332871",\ + "1.138310, 1.320737, 1.502710, 1.796445, 2.364325",\ + "1.427244, 1.609671, 1.791645, 2.085380, 2.653259",\ + "2.021136, 2.203563, 2.385537, 2.679272, 3.247151"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.108154, 0.108154, 0.108154, 0.108154, 0.108154",\ + "0.141536, 0.141536, 0.141536, 0.141536, 0.141536",\ + "0.190539, 0.190539, 0.190539, 0.190539, 0.190539",\ + "0.817689, 0.817689, 0.817689, 0.817689, 0.817689",\ + "2.194880, 2.194880, 2.194880, 2.194880, 2.194880",\ + "0.108154, 0.108154, 0.108154, 0.108154, 0.108154",\ + "0.141536, 0.141536, 0.141536, 0.141536, 0.141536",\ + "0.190539, 0.190539, 0.190539, 0.190539, 0.190539",\ + "0.817689, 0.817689, 0.817689, 0.817689, 0.817689",\ + "2.194880, 2.194880, 2.194880, 2.194880, 2.194880",\ + "0.108154, 0.108154, 0.108154, 0.108154, 0.108154",\ + "0.141536, 0.141536, 0.141536, 0.141536, 0.141536",\ + "0.190539, 0.190539, 0.190539, 0.190539, 0.190539",\ + "0.817689, 0.817689, 0.817689, 0.817689, 0.817689",\ + "2.194880, 2.194880, 2.194880, 2.194880, 2.194880",\ + "0.108154, 0.108154, 0.108154, 0.108154, 0.108154",\ + "0.141536, 0.141536, 0.141536, 0.141536, 0.141536",\ + "0.190539, 0.190539, 0.190539, 0.190539, 0.190539",\ + "0.817689, 0.817689, 0.817689, 0.817689, 0.817689",\ + "2.194880, 2.194880, 2.194880, 2.194880, 2.194880",\ + "0.108154, 0.108154, 0.108154, 0.108154, 0.108154",\ + "0.141536, 0.141536, 0.141536, 0.141536, 0.141536",\ + "0.190539, 0.190539, 0.190539, 0.190539, 0.190539",\ + "0.817689, 0.817689, 0.817689, 0.817689, 0.817689",\ + "2.194880, 2.194880, 2.194880, 2.194880, 2.194880"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.521059, 0.748400, 0.932455, 1.226910, 1.796075",\ + "0.528870, 0.756210, 0.940265, 1.234720, 1.803885",\ + "0.542289, 0.769629, 0.953685, 1.248139, 1.817305",\ + "0.695259, 0.922600, 1.106655, 1.401110, 1.970275",\ + "1.029328, 1.256668, 1.440723, 1.735178, 2.304343",\ + "0.609388, 0.835718, 1.019736, 1.314215, 1.883428",\ + "0.617199, 0.843528, 1.027546, 1.322025, 1.891239",\ + "0.630618, 0.856948, 1.040965, 1.335444, 1.904658",\ + "0.783588, 1.009918, 1.193936, 1.488415, 2.057629",\ + "1.117657, 1.343987, 1.528004, 1.822483, 2.391697",\ + "0.698492, 0.916051, 1.099763, 1.394243, 1.963460",\ + "0.706303, 0.923862, 1.107573, 1.402054, 1.971270",\ + "0.719722, 0.937281, 1.120992, 1.415473, 1.984690",\ + "0.872692, 1.090251, 1.273963, 1.568443, 2.137660",\ + "1.206761, 1.424320, 1.608031, 1.902512, 2.471728",\ + "0.761891, 0.973876, 1.157471, 1.451683, 2.020496",\ + "0.769701, 0.981686, 1.165281, 1.459494, 2.028307",\ + "0.783120, 0.995106, 1.178700, 1.472913, 2.041726",\ + "0.936091, 1.148076, 1.331671, 1.625883, 2.194696",\ + "1.270159, 1.482144, 1.665739, 1.959952, 2.528765",\ + "1.096728, 1.279155, 1.461128, 1.754864, 2.322743",\ + "1.104538, 1.286965, 1.468939, 1.762674, 2.330553",\ + "1.117958, 1.300385, 1.482358, 1.776093, 2.343972",\ + "1.270928, 1.453355, 1.635329, 1.929064, 2.496943",\ + "1.604996, 1.787423, 1.969397, 2.263132, 2.831011"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.046251, 0.046251, 0.046251, 0.046251, 0.046251",\ + "0.051898, 0.051898, 0.051898, 0.051898, 0.051898",\ + "0.075290, 0.075290, 0.075290, 0.075290, 0.075290",\ + "0.368839, 0.368839, 0.368839, 0.368839, 0.368839",\ + "1.000959, 1.000959, 1.000959, 1.000959, 1.000959",\ + "0.046251, 0.046251, 0.046251, 0.046251, 0.046251",\ + "0.051898, 0.051898, 0.051898, 0.051898, 0.051898",\ + "0.075290, 0.075290, 0.075290, 0.075290, 0.075290",\ + "0.368839, 0.368839, 0.368839, 0.368839, 0.368839",\ + "1.000959, 1.000959, 1.000959, 1.000959, 1.000959",\ + "0.046251, 0.046251, 0.046251, 0.046251, 0.046251",\ + "0.051898, 0.051898, 0.051898, 0.051898, 0.051898",\ + "0.075290, 0.075290, 0.075290, 0.075290, 0.075290",\ + "0.368839, 0.368839, 0.368839, 0.368839, 0.368839",\ + "1.000959, 1.000959, 1.000959, 1.000959, 1.000959",\ + "0.046251, 0.046251, 0.046251, 0.046251, 0.046251",\ + "0.051898, 0.051898, 0.051898, 0.051898, 0.051898",\ + "0.075290, 0.075290, 0.075290, 0.075290, 0.075290",\ + "0.368839, 0.368839, 0.368839, 0.368839, 0.368839",\ + "1.000959, 1.000959, 1.000959, 1.000959, 1.000959",\ + "0.046251, 0.046251, 0.046251, 0.046251, 0.046251",\ + "0.051898, 0.051898, 0.051898, 0.051898, 0.051898",\ + "0.075290, 0.075290, 0.075290, 0.075290, 0.075290",\ + "0.368839, 0.368839, 0.368839, 0.368839, 0.368839",\ + "1.000959, 1.000959, 1.000959, 1.000959, 1.000959"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[5]_redg_min_2744*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[23]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.459602, 0.694897, 0.884768, 1.189946, 1.780432",\ + "0.478889, 0.714184, 0.904055, 1.209233, 1.799719",\ + "0.510523, 0.745818, 0.935689, 1.240867, 1.831353",\ + "0.800033, 1.035329, 1.225199, 1.530377, 2.120863",\ + "1.393967, 1.629262, 1.819133, 2.124311, 2.714797",\ + "0.548080, 0.782215, 0.972049, 1.277251, 1.867785",\ + "0.567367, 0.801502, 0.991336, 1.296538, 1.887073",\ + "0.599001, 0.833136, 1.022970, 1.328172, 1.918707",\ + "0.888512, 1.122647, 1.312480, 1.617682, 2.208217",\ + "1.482446, 1.716581, 1.906414, 2.211616, 2.802151",\ + "0.637650, 0.862548, 1.052076, 1.357279, 1.947817",\ + "0.656937, 0.881835, 1.071363, 1.376566, 1.967104",\ + "0.688571, 0.913469, 1.102997, 1.408201, 1.998738",\ + "0.978081, 1.202980, 1.392507, 1.697711, 2.288249",\ + "1.572015, 1.796914, 1.986441, 2.291645, 2.882183",\ + "0.701494, 0.920383, 1.109797, 1.414745, 2.004905",\ + "0.720781, 0.939670, 1.129084, 1.434032, 2.024192",\ + "0.752415, 0.971304, 1.160718, 1.465667, 2.055826",\ + "1.041925, 1.260814, 1.450228, 1.755177, 2.345336",\ + "1.635859, 1.854748, 2.044163, 2.349111, 2.939270",\ + "1.039162, 1.225730, 1.413457, 1.717948, 2.307214",\ + "1.058449, 1.245017, 1.432744, 1.737235, 2.326501",\ + "1.090083, 1.276651, 1.464378, 1.768869, 2.358135",\ + "1.379594, 1.566161, 1.753889, 2.058379, 2.647645",\ + "1.973528, 2.160095, 2.347823, 2.652313, 3.241579"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.107537, 0.107537, 0.107537, 0.107537, 0.107537",\ + "0.140565, 0.140565, 0.140565, 0.140565, 0.140565",\ + "0.189766, 0.189766, 0.189766, 0.189766, 0.189766",\ + "0.817728, 0.817728, 0.817728, 0.817728, 0.817728",\ + "2.195434, 2.195434, 2.195434, 2.195434, 2.195434",\ + "0.107537, 0.107537, 0.107537, 0.107537, 0.107537",\ + "0.140565, 0.140565, 0.140565, 0.140565, 0.140565",\ + "0.189766, 0.189766, 0.189766, 0.189766, 0.189766",\ + "0.817728, 0.817728, 0.817728, 0.817728, 0.817728",\ + "2.195434, 2.195434, 2.195434, 2.195434, 2.195434",\ + "0.107537, 0.107537, 0.107537, 0.107537, 0.107537",\ + "0.140565, 0.140565, 0.140565, 0.140565, 0.140565",\ + "0.189766, 0.189766, 0.189766, 0.189766, 0.189766",\ + "0.817728, 0.817728, 0.817728, 0.817728, 0.817728",\ + "2.195434, 2.195434, 2.195434, 2.195434, 2.195434",\ + "0.107537, 0.107537, 0.107537, 0.107537, 0.107537",\ + "0.140565, 0.140565, 0.140565, 0.140565, 0.140565",\ + "0.189766, 0.189766, 0.189766, 0.189766, 0.189766",\ + "0.817728, 0.817728, 0.817728, 0.817728, 0.817728",\ + "2.195434, 2.195434, 2.195434, 2.195434, 2.195434",\ + "0.107537, 0.107537, 0.107537, 0.107537, 0.107537",\ + "0.140565, 0.140565, 0.140565, 0.140565, 0.140565",\ + "0.189766, 0.189766, 0.189766, 0.189766, 0.189766",\ + "0.817728, 0.817728, 0.817728, 0.817728, 0.817728",\ + "2.195434, 2.195434, 2.195434, 2.195434, 2.195434"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.469945, 0.705240, 0.895111, 1.200289, 1.790776",\ + "0.477744, 0.713040, 0.902911, 1.208089, 1.798575",\ + "0.491164, 0.726459, 0.916330, 1.221508, 1.811994",\ + "0.643898, 0.879193, 1.069064, 1.374242, 1.964728",\ + "0.977882, 1.213178, 1.403048, 1.708226, 2.298713",\ + "0.558424, 0.792559, 0.982392, 1.287594, 1.878129",\ + "0.566223, 0.800358, 0.990192, 1.295394, 1.885928",\ + "0.579643, 0.813778, 1.003611, 1.308813, 1.899348",\ + "0.732376, 0.966511, 1.156345, 1.461547, 2.052081",\ + "1.066361, 1.300496, 1.490329, 1.795531, 2.386066",\ + "0.647993, 0.872891, 1.062419, 1.367623, 1.958161",\ + "0.655793, 0.880691, 1.070219, 1.375422, 1.965960",\ + "0.669212, 0.894110, 1.083638, 1.388842, 1.979379",\ + "0.821946, 1.046844, 1.236372, 1.541575, 2.132113",\ + "1.155930, 1.380829, 1.570356, 1.875560, 2.466098",\ + "0.711837, 0.930726, 1.120141, 1.425089, 2.015248",\ + "0.719636, 0.938526, 1.127940, 1.432888, 2.023048",\ + "0.733056, 0.951945, 1.141359, 1.446308, 2.036467",\ + "0.885790, 1.104679, 1.294093, 1.599041, 2.189201",\ + "1.219774, 1.438663, 1.628078, 1.933026, 2.523185",\ + "1.049506, 1.236073, 1.423800, 1.728291, 2.317557",\ + "1.057305, 1.243873, 1.431600, 1.736091, 2.325356",\ + "1.070724, 1.257292, 1.445019, 1.749510, 2.338776",\ + "1.223458, 1.410026, 1.597753, 1.902244, 2.491510",\ + "1.557443, 1.744010, 1.931738, 2.236228, 2.825494"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.049261, 0.049261, 0.049261, 0.049261, 0.049261",\ + "0.055612, 0.055612, 0.055612, 0.055612, 0.055612",\ + "0.075309, 0.075309, 0.075309, 0.075309, 0.075309",\ + "0.368777, 0.368777, 0.368777, 0.368777, 0.368777",\ + "1.002182, 1.002182, 1.002182, 1.002182, 1.002182",\ + "0.049261, 0.049261, 0.049261, 0.049261, 0.049261",\ + "0.055612, 0.055612, 0.055612, 0.055612, 0.055612",\ + "0.075309, 0.075309, 0.075309, 0.075309, 0.075309",\ + "0.368777, 0.368777, 0.368777, 0.368777, 0.368777",\ + "1.002182, 1.002182, 1.002182, 1.002182, 1.002182",\ + "0.049261, 0.049261, 0.049261, 0.049261, 0.049261",\ + "0.055612, 0.055612, 0.055612, 0.055612, 0.055612",\ + "0.075309, 0.075309, 0.075309, 0.075309, 0.075309",\ + "0.368777, 0.368777, 0.368777, 0.368777, 0.368777",\ + "1.002182, 1.002182, 1.002182, 1.002182, 1.002182",\ + "0.049261, 0.049261, 0.049261, 0.049261, 0.049261",\ + "0.055612, 0.055612, 0.055612, 0.055612, 0.055612",\ + "0.075309, 0.075309, 0.075309, 0.075309, 0.075309",\ + "0.368777, 0.368777, 0.368777, 0.368777, 0.368777",\ + "1.002182, 1.002182, 1.002182, 1.002182, 1.002182",\ + "0.049261, 0.049261, 0.049261, 0.049261, 0.049261",\ + "0.055612, 0.055612, 0.055612, 0.055612, 0.055612",\ + "0.075309, 0.075309, 0.075309, 0.075309, 0.075309",\ + "0.368777, 0.368777, 0.368777, 0.368777, 0.368777",\ + "1.002182, 1.002182, 1.002182, 1.002182, 1.002182"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[5]_redg_min*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[25]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.443166, 0.674145, 0.859025, 1.158118, 1.738072",\ + "0.462453, 0.693432, 0.878312, 1.177405, 1.757359",\ + "0.494087, 0.725066, 0.909946, 1.209039, 1.788993",\ + "0.783598, 1.014576, 1.199456, 1.498549, 2.078503",\ + "1.377531, 1.608510, 1.793390, 2.092483, 2.672437",\ + "0.531545, 0.761463, 0.946306, 1.245423, 1.825425",\ + "0.550832, 0.780750, 0.965593, 1.264710, 1.844712",\ + "0.582466, 0.812384, 0.997227, 1.296344, 1.876346",\ + "0.871976, 1.101894, 1.286737, 1.585854, 2.165856",\ + "1.465910, 1.695828, 1.880671, 2.179788, 2.759790",\ + "0.621124, 0.841793, 1.026333, 1.325452, 1.905457",\ + "0.640411, 0.861080, 1.045620, 1.344739, 1.924744",\ + "0.672045, 0.892714, 1.077254, 1.376373, 1.956378",\ + "0.961555, 1.182224, 1.366764, 1.665883, 2.245888",\ + "1.555489, 1.776158, 1.960698, 2.259817, 2.839822",\ + "0.685109, 0.899623, 1.084043, 1.382905, 1.962520",\ + "0.704396, 0.918910, 1.103330, 1.402192, 1.981807",\ + "0.736030, 0.950545, 1.134964, 1.433826, 2.013442",\ + "1.025540, 1.240054, 1.424474, 1.723336, 2.302952",\ + "1.619474, 1.833988, 2.018408, 2.317270, 2.896885",\ + "1.023662, 1.204930, 1.387700, 1.686096, 2.264800",\ + "1.042949, 1.224217, 1.406987, 1.705384, 2.284087",\ + "1.074583, 1.255852, 1.438621, 1.737018, 2.315721",\ + "1.364093, 1.545362, 1.728131, 2.026528, 2.605231",\ + "1.958027, 2.139296, 2.322065, 2.620461, 3.199165"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.107537, 0.107537, 0.107537, 0.107537, 0.107537",\ + "0.140565, 0.140565, 0.140565, 0.140565, 0.140565",\ + "0.189766, 0.189766, 0.189766, 0.189766, 0.189766",\ + "0.817728, 0.817728, 0.817728, 0.817728, 0.817728",\ + "2.195434, 2.195434, 2.195434, 2.195434, 2.195434",\ + "0.107537, 0.107537, 0.107537, 0.107537, 0.107537",\ + "0.140565, 0.140565, 0.140565, 0.140565, 0.140565",\ + "0.189766, 0.189766, 0.189766, 0.189766, 0.189766",\ + "0.817728, 0.817728, 0.817728, 0.817728, 0.817728",\ + "2.195434, 2.195434, 2.195434, 2.195434, 2.195434",\ + "0.107537, 0.107537, 0.107537, 0.107537, 0.107537",\ + "0.140565, 0.140565, 0.140565, 0.140565, 0.140565",\ + "0.189766, 0.189766, 0.189766, 0.189766, 0.189766",\ + "0.817728, 0.817728, 0.817728, 0.817728, 0.817728",\ + "2.195434, 2.195434, 2.195434, 2.195434, 2.195434",\ + "0.107537, 0.107537, 0.107537, 0.107537, 0.107537",\ + "0.140565, 0.140565, 0.140565, 0.140565, 0.140565",\ + "0.189766, 0.189766, 0.189766, 0.189766, 0.189766",\ + "0.817728, 0.817728, 0.817728, 0.817728, 0.817728",\ + "2.195434, 2.195434, 2.195434, 2.195434, 2.195434",\ + "0.107537, 0.107537, 0.107537, 0.107537, 0.107537",\ + "0.140565, 0.140565, 0.140565, 0.140565, 0.140565",\ + "0.189766, 0.189766, 0.189766, 0.189766, 0.189766",\ + "0.817728, 0.817728, 0.817728, 0.817728, 0.817728",\ + "2.195434, 2.195434, 2.195434, 2.195434, 2.195434"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.453509, 0.684488, 0.869368, 1.168461, 1.748415",\ + "0.461309, 0.692287, 0.877167, 1.176260, 1.756214",\ + "0.474728, 0.705707, 0.890586, 1.189680, 1.769634",\ + "0.627462, 0.858441, 1.043320, 1.342414, 1.922367",\ + "0.961447, 1.192425, 1.377305, 1.676398, 2.256352",\ + "0.541888, 0.771806, 0.956649, 1.255766, 1.835768",\ + "0.549688, 0.779605, 0.964448, 1.263565, 1.843568",\ + "0.563107, 0.793025, 0.977867, 1.276985, 1.856987",\ + "0.715841, 0.945758, 1.130601, 1.429719, 2.009721",\ + "1.049826, 1.279743, 1.464586, 1.763703, 2.343705",\ + "0.631467, 0.852136, 1.036675, 1.335794, 1.915800",\ + "0.639266, 0.859936, 1.044475, 1.343594, 1.923599",\ + "0.652686, 0.873355, 1.057894, 1.357013, 1.937019",\ + "0.805420, 1.026089, 1.210628, 1.509747, 2.089752",\ + "1.139404, 1.360074, 1.544613, 1.843732, 2.423737",\ + "0.695451, 0.909966, 1.094386, 1.393248, 1.972863",\ + "0.703251, 0.917766, 1.102185, 1.401047, 1.980663",\ + "0.716670, 0.931185, 1.115605, 1.414467, 1.994082",\ + "0.869404, 1.083919, 1.268338, 1.567201, 2.146816",\ + "1.203389, 1.417904, 1.602323, 1.901185, 2.480801",\ + "1.034004, 1.215273, 1.398043, 1.696439, 2.275143",\ + "1.041804, 1.223073, 1.405843, 1.704239, 2.282942",\ + "1.055223, 1.236492, 1.419262, 1.717658, 2.296362",\ + "1.207957, 1.389226, 1.571996, 1.870392, 2.449096",\ + "1.541942, 1.723211, 1.905981, 2.204377, 2.783080"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002846, 0.075844, 0.162637, 0.322428, 0.642011"); + values ( "0.049261, 0.049261, 0.049261, 0.049261, 0.049261",\ + "0.055612, 0.055612, 0.055612, 0.055612, 0.055612",\ + "0.075309, 0.075309, 0.075309, 0.075309, 0.075309",\ + "0.368777, 0.368777, 0.368777, 0.368777, 0.368777",\ + "1.002182, 1.002182, 1.002182, 1.002182, 1.002182",\ + "0.049261, 0.049261, 0.049261, 0.049261, 0.049261",\ + "0.055612, 0.055612, 0.055612, 0.055612, 0.055612",\ + "0.075309, 0.075309, 0.075309, 0.075309, 0.075309",\ + "0.368777, 0.368777, 0.368777, 0.368777, 0.368777",\ + "1.002182, 1.002182, 1.002182, 1.002182, 1.002182",\ + "0.049261, 0.049261, 0.049261, 0.049261, 0.049261",\ + "0.055612, 0.055612, 0.055612, 0.055612, 0.055612",\ + "0.075309, 0.075309, 0.075309, 0.075309, 0.075309",\ + "0.368777, 0.368777, 0.368777, 0.368777, 0.368777",\ + "1.002182, 1.002182, 1.002182, 1.002182, 1.002182",\ + "0.049261, 0.049261, 0.049261, 0.049261, 0.049261",\ + "0.055612, 0.055612, 0.055612, 0.055612, 0.055612",\ + "0.075309, 0.075309, 0.075309, 0.075309, 0.075309",\ + "0.368777, 0.368777, 0.368777, 0.368777, 0.368777",\ + "1.002182, 1.002182, 1.002182, 1.002182, 1.002182",\ + "0.049261, 0.049261, 0.049261, 0.049261, 0.049261",\ + "0.055612, 0.055612, 0.055612, 0.055612, 0.055612",\ + "0.075309, 0.075309, 0.075309, 0.075309, 0.075309",\ + "0.368777, 0.368777, 0.368777, 0.368777, 0.368777",\ + "1.002182, 1.002182, 1.002182, 1.002182, 1.002182"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[5]_redg_min_2400*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[26]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.356883, 0.553789, 0.735718, 1.027079, 1.590482",\ + "0.376149, 0.573056, 0.754984, 1.046346, 1.609749",\ + "0.407828, 0.604733, 0.786661, 1.078023, 1.641427",\ + "0.697481, 0.894382, 1.076308, 1.367671, 1.931077",\ + "1.291425, 1.488327, 1.670252, 1.961614, 2.525021",\ + "0.445232, 0.641107, 0.822999, 1.114385, 1.677836",\ + "0.464498, 0.660374, 0.842265, 1.133651, 1.697102",\ + "0.496176, 0.692052, 0.873942, 1.165328, 1.728780",\ + "0.785829, 0.981701, 1.163589, 1.454976, 2.018430",\ + "1.379774, 1.575645, 1.757533, 2.048919, 2.612374",\ + "0.534400, 0.721441, 0.903025, 1.194413, 1.757867",\ + "0.553666, 0.740707, 0.922292, 1.213680, 1.777134",\ + "0.585345, 0.772385, 0.953969, 1.245357, 1.808812",\ + "0.874998, 1.062034, 1.243616, 1.535004, 2.098462",\ + "1.468942, 1.655978, 1.837560, 2.128948, 2.692406",\ + "0.597862, 0.779261, 0.960728, 1.251846, 1.814890",\ + "0.617128, 0.798528, 0.979995, 1.271113, 1.834156",\ + "0.648807, 0.830206, 1.011672, 1.302790, 1.865834",\ + "0.938459, 1.119855, 1.301319, 1.592437, 2.155484",\ + "1.532403, 1.713799, 1.895263, 2.186381, 2.749428",\ + "0.904924, 1.084513, 1.264385, 1.555021, 2.117120",\ + "0.924190, 1.103779, 1.283652, 1.574288, 2.136386",\ + "0.955869, 1.135457, 1.315329, 1.605965, 2.168064",\ + "1.245522, 1.425106, 1.604976, 1.895612, 2.457714",\ + "1.839466, 2.019050, 2.198920, 2.489556, 3.051658"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.107384, 0.107384, 0.107384, 0.107384, 0.107384",\ + "0.140617, 0.140617, 0.140617, 0.140617, 0.140617",\ + "0.189796, 0.189796, 0.189796, 0.189796, 0.189796",\ + "0.817737, 0.817737, 0.817737, 0.817737, 0.817737",\ + "2.195571, 2.195567, 2.195565, 2.195564, 2.195564",\ + "0.107384, 0.107384, 0.107384, 0.107384, 0.107384",\ + "0.140617, 0.140617, 0.140617, 0.140617, 0.140617",\ + "0.189796, 0.189796, 0.189796, 0.189796, 0.189796",\ + "0.817737, 0.817737, 0.817737, 0.817737, 0.817737",\ + "2.195571, 2.195567, 2.195565, 2.195564, 2.195564",\ + "0.107384, 0.107384, 0.107384, 0.107384, 0.107384",\ + "0.140617, 0.140617, 0.140617, 0.140617, 0.140617",\ + "0.189796, 0.189796, 0.189796, 0.189796, 0.189796",\ + "0.817737, 0.817737, 0.817737, 0.817737, 0.817737",\ + "2.195571, 2.195567, 2.195565, 2.195564, 2.195564",\ + "0.107384, 0.107384, 0.107384, 0.107384, 0.107384",\ + "0.140617, 0.140617, 0.140617, 0.140617, 0.140617",\ + "0.189796, 0.189796, 0.189796, 0.189796, 0.189796",\ + "0.817737, 0.817737, 0.817737, 0.817737, 0.817737",\ + "2.195570, 2.195567, 2.195565, 2.195564, 2.195564",\ + "0.107384, 0.107384, 0.107384, 0.107384, 0.107384",\ + "0.140617, 0.140617, 0.140617, 0.140617, 0.140617",\ + "0.189796, 0.189796, 0.189796, 0.189796, 0.189796",\ + "0.817737, 0.817737, 0.817737, 0.817737, 0.817737",\ + "2.195571, 2.195567, 2.195565, 2.195564, 2.195564"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.367499, 0.564398, 0.746322, 1.037684, 1.601092",\ + "0.375296, 0.572195, 0.754119, 1.045481, 1.608889",\ + "0.388715, 0.585614, 0.767538, 1.058901, 1.622309",\ + "0.541390, 0.738291, 0.920216, 1.211578, 1.774985",\ + "0.875354, 1.072255, 1.254180, 1.545543, 2.108949",\ + "0.455848, 0.651716, 0.833603, 1.124989, 1.688446",\ + "0.463644, 0.659513, 0.841400, 1.132786, 1.696243",\ + "0.477064, 0.672932, 0.854819, 1.146206, 1.709662",\ + "0.629739, 0.825609, 1.007497, 1.298883, 1.862338",\ + "0.963703, 1.159573, 1.341461, 1.632848, 2.196303",\ + "0.545016, 0.732049, 0.913630, 1.205018, 1.768477",\ + "0.552812, 0.739846, 0.921427, 1.212815, 1.776274",\ + "0.566232, 0.753265, 0.934846, 1.226234, 1.789694",\ + "0.718907, 0.905942, 1.087524, 1.378912, 1.942370",\ + "1.052871, 1.239906, 1.421488, 1.712876, 2.276334",\ + "0.608477, 0.789870, 0.971332, 1.262451, 1.825500",\ + "0.616274, 0.797667, 0.979129, 1.270248, 1.833297",\ + "0.629693, 0.811086, 0.992549, 1.283667, 1.846716",\ + "0.782368, 0.963763, 1.145226, 1.436345, 1.999392",\ + "1.116332, 1.297727, 1.479191, 1.770309, 2.333357",\ + "0.915539, 1.095121, 1.274990, 1.565626, 2.127729",\ + "0.923336, 1.102918, 1.282787, 1.573422, 2.135526",\ + "0.936756, 1.116337, 1.296206, 1.586842, 2.148946",\ + "1.089431, 1.269014, 1.448884, 1.739519, 2.301622",\ + "1.423395, 1.602978, 1.782848, 2.073484, 2.635586"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.049251, 0.049251, 0.049251, 0.049251, 0.049251",\ + "0.055579, 0.055579, 0.055579, 0.055579, 0.055579",\ + "0.075314, 0.075314, 0.075314, 0.075314, 0.075314",\ + "0.368762, 0.368762, 0.368762, 0.368762, 0.368762",\ + "1.002200, 1.002200, 1.002200, 1.002200, 1.002201",\ + "0.049251, 0.049251, 0.049251, 0.049251, 0.049251",\ + "0.055579, 0.055579, 0.055579, 0.055579, 0.055579",\ + "0.075314, 0.075314, 0.075314, 0.075314, 0.075314",\ + "0.368762, 0.368762, 0.368762, 0.368762, 0.368762",\ + "1.002200, 1.002200, 1.002200, 1.002200, 1.002201",\ + "0.049251, 0.049251, 0.049251, 0.049251, 0.049251",\ + "0.055579, 0.055579, 0.055579, 0.055579, 0.055579",\ + "0.075314, 0.075314, 0.075314, 0.075314, 0.075314",\ + "0.368762, 0.368762, 0.368762, 0.368762, 0.368762",\ + "1.002200, 1.002200, 1.002200, 1.002200, 1.002201",\ + "0.049251, 0.049251, 0.049251, 0.049251, 0.049251",\ + "0.055579, 0.055579, 0.055579, 0.055579, 0.055579",\ + "0.075314, 0.075314, 0.075314, 0.075314, 0.075314",\ + "0.368762, 0.368762, 0.368762, 0.368762, 0.368762",\ + "1.002200, 1.002200, 1.002200, 1.002200, 1.002201",\ + "0.049251, 0.049251, 0.049251, 0.049251, 0.049251",\ + "0.055579, 0.055579, 0.055579, 0.055579, 0.055579",\ + "0.075314, 0.075314, 0.075314, 0.075314, 0.075314",\ + "0.368762, 0.368762, 0.368762, 0.368762, 0.368762",\ + "1.002200, 1.002200, 1.002200, 1.002200, 1.002201"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[5]_redg_min_2447*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[27]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.379724, 0.609078, 0.793072, 1.086354, 1.652961",\ + "0.399096, 0.628450, 0.812444, 1.105726, 1.672333",\ + "0.430550, 0.659904, 0.843898, 1.137180, 1.703787",\ + "0.719484, 0.948838, 1.132833, 1.426114, 1.992722",\ + "1.313376, 1.542730, 1.726725, 2.020006, 2.586613",\ + "0.468018, 0.696395, 0.880353, 1.173659, 1.740315",\ + "0.487390, 0.715767, 0.899725, 1.193031, 1.759686",\ + "0.518844, 0.747221, 0.931179, 1.224485, 1.791140",\ + "0.807778, 1.036156, 1.220114, 1.513419, 2.080075",\ + "1.401670, 1.630048, 1.814005, 2.107311, 2.673967",\ + "0.557713, 0.776723, 0.960380, 1.253688, 1.820346",\ + "0.577085, 0.796095, 0.979752, 1.273059, 1.839718",\ + "0.608539, 0.827548, 1.011206, 1.304513, 1.871172",\ + "0.897473, 1.116483, 1.300140, 1.593448, 2.160107",\ + "1.491365, 1.710375, 1.894032, 2.187340, 2.753998",\ + "0.621964, 0.834551, 1.018089, 1.311125, 1.877379",\ + "0.641336, 0.853923, 1.037461, 1.330497, 1.896751",\ + "0.672790, 0.885376, 1.068915, 1.361951, 1.928205",\ + "0.961724, 1.174311, 1.357849, 1.650886, 2.217139",\ + "1.555616, 1.768203, 1.951741, 2.244777, 2.811031",\ + "0.960843, 1.139831, 1.321745, 1.614302, 2.179622",\ + "0.980214, 1.159203, 1.341117, 1.633674, 2.198994",\ + "1.011668, 1.190656, 1.372571, 1.665128, 2.230447",\ + "1.300603, 1.479591, 1.661506, 1.954063, 2.519382",\ + "1.894495, 2.073483, 2.255398, 2.547955, 3.113274"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.108154, 0.108154, 0.108154, 0.108154, 0.108154",\ + "0.141536, 0.141536, 0.141536, 0.141536, 0.141536",\ + "0.190539, 0.190539, 0.190539, 0.190539, 0.190539",\ + "0.817689, 0.817689, 0.817689, 0.817689, 0.817689",\ + "2.194880, 2.194880, 2.194880, 2.194880, 2.194880",\ + "0.108154, 0.108154, 0.108154, 0.108154, 0.108154",\ + "0.141536, 0.141536, 0.141536, 0.141536, 0.141536",\ + "0.190539, 0.190539, 0.190539, 0.190539, 0.190539",\ + "0.817689, 0.817689, 0.817689, 0.817689, 0.817689",\ + "2.194880, 2.194880, 2.194880, 2.194880, 2.194880",\ + "0.108154, 0.108154, 0.108154, 0.108154, 0.108154",\ + "0.141536, 0.141536, 0.141536, 0.141536, 0.141536",\ + "0.190539, 0.190539, 0.190539, 0.190539, 0.190539",\ + "0.817689, 0.817689, 0.817689, 0.817689, 0.817689",\ + "2.194880, 2.194880, 2.194880, 2.194880, 2.194880",\ + "0.108154, 0.108154, 0.108154, 0.108154, 0.108154",\ + "0.141536, 0.141536, 0.141536, 0.141536, 0.141536",\ + "0.190539, 0.190539, 0.190539, 0.190539, 0.190539",\ + "0.817689, 0.817689, 0.817689, 0.817689, 0.817689",\ + "2.194880, 2.194880, 2.194880, 2.194880, 2.194880",\ + "0.108154, 0.108154, 0.108154, 0.108154, 0.108154",\ + "0.141536, 0.141536, 0.141536, 0.141536, 0.141536",\ + "0.190539, 0.190539, 0.190539, 0.190539, 0.190539",\ + "0.817689, 0.817689, 0.817689, 0.817689, 0.817689",\ + "2.194880, 2.194880, 2.194880, 2.194880, 2.194880"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.388968, 0.618322, 0.802316, 1.095598, 1.662205",\ + "0.396778, 0.626132, 0.810127, 1.103408, 1.670016",\ + "0.410197, 0.639552, 0.823546, 1.116827, 1.683435",\ + "0.563168, 0.792522, 0.976516, 1.269798, 1.836405",\ + "0.897236, 1.126590, 1.310585, 1.603866, 2.170474",\ + "0.477262, 0.705639, 0.889597, 1.182903, 1.749559",\ + "0.485072, 0.713450, 0.897408, 1.190713, 1.757369",\ + "0.498491, 0.726869, 0.910827, 1.204133, 1.770788",\ + "0.651462, 0.879839, 1.063797, 1.357103, 1.923759",\ + "0.985530, 1.213908, 1.397866, 1.691172, 2.257827",\ + "0.566957, 0.785967, 0.969624, 1.262932, 1.829590",\ + "0.574767, 0.793777, 0.977435, 1.270742, 1.837401",\ + "0.588187, 0.807196, 0.990854, 1.284161, 1.850820",\ + "0.741157, 0.960167, 1.143824, 1.437132, 2.003790",\ + "1.075225, 1.294235, 1.477893, 1.771200, 2.337859",\ + "0.631208, 0.843795, 1.027333, 1.320369, 1.886623",\ + "0.639018, 0.851605, 1.035143, 1.328180, 1.894433",\ + "0.652438, 0.865024, 1.048563, 1.341599, 1.907853",\ + "0.805408, 1.017995, 1.201533, 1.494569, 2.060823",\ + "1.139476, 1.352063, 1.535602, 1.828638, 2.394892",\ + "0.970087, 1.149075, 1.330989, 1.623546, 2.188866",\ + "0.977897, 1.156885, 1.338800, 1.631357, 2.196676",\ + "0.991316, 1.170304, 1.352219, 1.644776, 2.210095",\ + "1.144287, 1.323275, 1.505189, 1.797747, 2.363066",\ + "1.478355, 1.657343, 1.839258, 2.131815, 2.697134"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.046251, 0.046251, 0.046251, 0.046251, 0.046251",\ + "0.051898, 0.051898, 0.051898, 0.051898, 0.051898",\ + "0.075290, 0.075290, 0.075290, 0.075290, 0.075290",\ + "0.368839, 0.368839, 0.368839, 0.368839, 0.368839",\ + "1.000959, 1.000959, 1.000959, 1.000959, 1.000959",\ + "0.046251, 0.046251, 0.046251, 0.046251, 0.046251",\ + "0.051898, 0.051898, 0.051898, 0.051898, 0.051898",\ + "0.075290, 0.075290, 0.075290, 0.075290, 0.075290",\ + "0.368839, 0.368839, 0.368839, 0.368839, 0.368839",\ + "1.000959, 1.000959, 1.000959, 1.000959, 1.000959",\ + "0.046251, 0.046251, 0.046251, 0.046251, 0.046251",\ + "0.051898, 0.051898, 0.051898, 0.051898, 0.051898",\ + "0.075290, 0.075290, 0.075290, 0.075290, 0.075290",\ + "0.368839, 0.368839, 0.368839, 0.368839, 0.368839",\ + "1.000959, 1.000959, 1.000959, 1.000959, 1.000959",\ + "0.046251, 0.046251, 0.046251, 0.046251, 0.046251",\ + "0.051898, 0.051898, 0.051898, 0.051898, 0.051898",\ + "0.075290, 0.075290, 0.075290, 0.075290, 0.075290",\ + "0.368839, 0.368839, 0.368839, 0.368839, 0.368839",\ + "1.000959, 1.000959, 1.000959, 1.000959, 1.000959",\ + "0.046251, 0.046251, 0.046251, 0.046251, 0.046251",\ + "0.051898, 0.051898, 0.051898, 0.051898, 0.051898",\ + "0.075290, 0.075290, 0.075290, 0.075290, 0.075290",\ + "0.368839, 0.368839, 0.368839, 0.368839, 0.368839",\ + "1.000959, 1.000959, 1.000959, 1.000959, 1.000959"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[5]_redg_min_2729*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[30]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.369185, 0.583807, 0.762700, 1.052121, 1.613591",\ + "0.388557, 0.603178, 0.782071, 1.071493, 1.632963",\ + "0.420011, 0.634632, 0.813526, 1.102947, 1.664417",\ + "0.708947, 0.923568, 1.102462, 1.391883, 1.953353",\ + "1.302839, 1.517461, 1.696354, 1.985775, 2.547245",\ + "0.457459, 0.671124, 0.849981, 1.139426, 1.700945",\ + "0.476830, 0.690496, 0.869353, 1.158798, 1.720316",\ + "0.508285, 0.721950, 0.900807, 1.190252, 1.751771",\ + "0.797221, 1.010886, 1.189743, 1.479188, 2.040707",\ + "1.391113, 1.604778, 1.783635, 2.073080, 2.634599",\ + "0.547002, 0.751452, 0.930008, 1.219455, 1.780976",\ + "0.566373, 0.770824, 0.949379, 1.238826, 1.800348",\ + "0.597828, 0.802278, 0.980834, 1.270281, 1.831802",\ + "0.886764, 1.091214, 1.269770, 1.559216, 2.120738",\ + "1.480656, 1.685106, 1.863662, 2.153109, 2.714630",\ + "0.611070, 0.809282, 0.987704, 1.276886, 1.837996",\ + "0.630442, 0.828653, 1.007076, 1.296257, 1.857368",\ + "0.661896, 0.860107, 1.038530, 1.327712, 1.888822",\ + "0.950832, 1.149043, 1.327466, 1.616648, 2.177758",\ + "1.544724, 1.742936, 1.921358, 2.210540, 2.771650",\ + "0.934949, 1.114574, 1.291359, 1.580058, 2.140224",\ + "0.954320, 1.133946, 1.310730, 1.599430, 2.159595",\ + "0.985774, 1.165400, 1.342185, 1.630884, 2.191050",\ + "1.274710, 1.454336, 1.631121, 1.919820, 2.479985",\ + "1.868603, 2.048229, 2.225013, 2.513712, 3.073878"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.108153, 0.108153, 0.108153, 0.108153, 0.108153",\ + "0.141536, 0.141536, 0.141536, 0.141536, 0.141536",\ + "0.190539, 0.190539, 0.190539, 0.190539, 0.190539",\ + "0.817689, 0.817689, 0.817689, 0.817689, 0.817689",\ + "2.194882, 2.194882, 2.194882, 2.194882, 2.194882",\ + "0.108153, 0.108153, 0.108153, 0.108153, 0.108153",\ + "0.141536, 0.141536, 0.141536, 0.141536, 0.141536",\ + "0.190539, 0.190539, 0.190539, 0.190539, 0.190539",\ + "0.817689, 0.817689, 0.817689, 0.817689, 0.817689",\ + "2.194882, 2.194882, 2.194882, 2.194882, 2.194882",\ + "0.108153, 0.108153, 0.108153, 0.108153, 0.108153",\ + "0.141536, 0.141536, 0.141536, 0.141536, 0.141536",\ + "0.190539, 0.190539, 0.190539, 0.190539, 0.190539",\ + "0.817689, 0.817689, 0.817689, 0.817689, 0.817689",\ + "2.194882, 2.194882, 2.194882, 2.194882, 2.194882",\ + "0.108153, 0.108153, 0.108153, 0.108153, 0.108153",\ + "0.141536, 0.141536, 0.141536, 0.141536, 0.141536",\ + "0.190539, 0.190539, 0.190539, 0.190539, 0.190539",\ + "0.817689, 0.817689, 0.817689, 0.817689, 0.817689",\ + "2.194882, 2.194882, 2.194882, 2.194882, 2.194882",\ + "0.108153, 0.108153, 0.108153, 0.108153, 0.108153",\ + "0.141536, 0.141536, 0.141536, 0.141536, 0.141536",\ + "0.190539, 0.190539, 0.190539, 0.190539, 0.190539",\ + "0.817689, 0.817689, 0.817689, 0.817689, 0.817689",\ + "2.194882, 2.194882, 2.194882, 2.194882, 2.194882"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.378431, 0.593053, 0.771946, 1.061368, 1.622838",\ + "0.386242, 0.600863, 0.779757, 1.069178, 1.630648",\ + "0.399661, 0.614283, 0.793176, 1.082597, 1.644067",\ + "0.552631, 0.767253, 0.946146, 1.235567, 1.797037",\ + "0.886699, 1.101321, 1.280214, 1.569635, 2.131105",\ + "0.466705, 0.680371, 0.859227, 1.148673, 1.710191",\ + "0.474516, 0.688181, 0.867038, 1.156483, 1.718002",\ + "0.487935, 0.701600, 0.880457, 1.169902, 1.731421",\ + "0.640905, 0.854570, 1.033427, 1.322872, 1.884391",\ + "0.974973, 1.188638, 1.367495, 1.656940, 2.218459",\ + "0.556248, 0.760699, 0.939254, 1.228701, 1.790223",\ + "0.564059, 0.768509, 0.947065, 1.236512, 1.798033",\ + "0.577478, 0.781928, 0.960484, 1.249931, 1.811453",\ + "0.730448, 0.934898, 1.113454, 1.402901, 1.964422",\ + "1.064516, 1.268966, 1.447522, 1.736969, 2.298491",\ + "0.620317, 0.818528, 0.996951, 1.286133, 1.847243",\ + "0.628127, 0.826339, 1.004761, 1.293943, 1.855053",\ + "0.641546, 0.839758, 1.018181, 1.307362, 1.868473",\ + "0.794516, 0.992728, 1.171150, 1.460332, 2.021443",\ + "1.128584, 1.326796, 1.505219, 1.794400, 2.355511",\ + "0.944195, 1.123821, 1.300605, 1.589304, 2.149470",\ + "0.952006, 1.131631, 1.308416, 1.597115, 2.157280",\ + "0.965425, 1.145051, 1.321835, 1.610534, 2.170700",\ + "1.118395, 1.298021, 1.474805, 1.763504, 2.323670",\ + "1.452463, 1.632089, 1.808873, 2.097572, 2.657738"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.046253, 0.046253, 0.046253, 0.046253, 0.046253",\ + "0.051900, 0.051900, 0.051900, 0.051900, 0.051900",\ + "0.075290, 0.075290, 0.075290, 0.075290, 0.075290",\ + "0.368838, 0.368838, 0.368838, 0.368838, 0.368838",\ + "1.000959, 1.000959, 1.000959, 1.000959, 1.000959",\ + "0.046253, 0.046253, 0.046253, 0.046253, 0.046253",\ + "0.051900, 0.051900, 0.051900, 0.051900, 0.051900",\ + "0.075290, 0.075290, 0.075290, 0.075290, 0.075290",\ + "0.368838, 0.368838, 0.368838, 0.368838, 0.368838",\ + "1.000959, 1.000959, 1.000959, 1.000959, 1.000959",\ + "0.046253, 0.046253, 0.046253, 0.046253, 0.046253",\ + "0.051900, 0.051900, 0.051900, 0.051900, 0.051900",\ + "0.075290, 0.075290, 0.075290, 0.075290, 0.075290",\ + "0.368838, 0.368838, 0.368838, 0.368838, 0.368838",\ + "1.000959, 1.000959, 1.000959, 1.000959, 1.000959",\ + "0.046253, 0.046253, 0.046253, 0.046253, 0.046253",\ + "0.051900, 0.051900, 0.051900, 0.051900, 0.051900",\ + "0.075290, 0.075290, 0.075290, 0.075290, 0.075290",\ + "0.368838, 0.368838, 0.368838, 0.368838, 0.368838",\ + "1.000959, 1.000959, 1.000959, 1.000959, 1.000959",\ + "0.046253, 0.046253, 0.046253, 0.046253, 0.046253",\ + "0.051900, 0.051900, 0.051900, 0.051900, 0.051900",\ + "0.075290, 0.075290, 0.075290, 0.075290, 0.075290",\ + "0.368838, 0.368838, 0.368838, 0.368838, 0.368838",\ + "1.000959, 1.000959, 1.000959, 1.000959, 1.000959"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[5]_redg_min_2349*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[32]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.417064, 0.631505, 0.810363, 1.099808, 1.661366",\ + "0.436351, 0.650792, 0.829650, 1.119095, 1.680653",\ + "0.467985, 0.682426, 0.861284, 1.150729, 1.712287",\ + "0.757495, 0.971936, 1.150794, 1.440239, 2.001797",\ + "1.351429, 1.565870, 1.744728, 2.034173, 2.595731",\ + "0.505338, 0.718823, 0.897644, 1.187113, 1.748719",\ + "0.524625, 0.738110, 0.916931, 1.206400, 1.768006",\ + "0.556259, 0.769744, 0.948565, 1.238034, 1.799640",\ + "0.845769, 1.059254, 1.238075, 1.527544, 2.089150",\ + "1.439703, 1.653188, 1.832009, 2.121478, 2.683084",\ + "0.594882, 0.799151, 0.977671, 1.267141, 1.828751",\ + "0.614169, 0.818438, 0.996958, 1.286428, 1.848038",\ + "0.645804, 0.850072, 1.028592, 1.318063, 1.879672",\ + "0.935313, 1.139582, 1.318102, 1.607573, 2.169182",\ + "1.529247, 1.733516, 1.912036, 2.201506, 2.763116",\ + "0.658952, 0.856980, 1.035367, 1.324573, 1.885771",\ + "0.678239, 0.876267, 1.054654, 1.343860, 1.905058",\ + "0.709873, 0.907901, 1.086289, 1.375494, 1.936692",\ + "0.999383, 1.197411, 1.375799, 1.665004, 2.226202",\ + "1.593317, 1.791345, 1.969732, 2.258938, 2.820136",\ + "0.982644, 1.162273, 1.339022, 1.627745, 2.187998",\ + "1.001931, 1.181560, 1.358309, 1.647032, 2.207285",\ + "1.033565, 1.213194, 1.389943, 1.678666, 2.238919",\ + "1.323075, 1.502704, 1.679453, 1.968176, 2.528430",\ + "1.917009, 2.096638, 2.273387, 2.562110, 3.122364"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.107537, 0.107537, 0.107537, 0.107537, 0.107537",\ + "0.140565, 0.140565, 0.140565, 0.140565, 0.140565",\ + "0.189766, 0.189766, 0.189766, 0.189766, 0.189766",\ + "0.817728, 0.817728, 0.817728, 0.817728, 0.817728",\ + "2.195434, 2.195434, 2.195434, 2.195434, 2.195434",\ + "0.107537, 0.107537, 0.107537, 0.107537, 0.107537",\ + "0.140565, 0.140565, 0.140565, 0.140565, 0.140565",\ + "0.189766, 0.189766, 0.189766, 0.189766, 0.189766",\ + "0.817728, 0.817728, 0.817728, 0.817728, 0.817728",\ + "2.195434, 2.195434, 2.195434, 2.195434, 2.195434",\ + "0.107537, 0.107537, 0.107537, 0.107537, 0.107537",\ + "0.140565, 0.140565, 0.140565, 0.140565, 0.140565",\ + "0.189766, 0.189766, 0.189766, 0.189766, 0.189766",\ + "0.817728, 0.817728, 0.817728, 0.817728, 0.817728",\ + "2.195434, 2.195434, 2.195434, 2.195434, 2.195434",\ + "0.107537, 0.107537, 0.107537, 0.107537, 0.107537",\ + "0.140565, 0.140565, 0.140565, 0.140565, 0.140565",\ + "0.189766, 0.189766, 0.189766, 0.189766, 0.189766",\ + "0.817728, 0.817728, 0.817728, 0.817728, 0.817728",\ + "2.195434, 2.195434, 2.195434, 2.195434, 2.195434",\ + "0.107537, 0.107537, 0.107537, 0.107537, 0.107537",\ + "0.140565, 0.140565, 0.140565, 0.140565, 0.140565",\ + "0.189766, 0.189766, 0.189766, 0.189766, 0.189766",\ + "0.817728, 0.817728, 0.817728, 0.817728, 0.817728",\ + "2.195434, 2.195434, 2.195434, 2.195434, 2.195434"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.427407, 0.641848, 0.820706, 1.110151, 1.671709",\ + "0.435207, 0.649648, 0.828505, 1.117950, 1.679508",\ + "0.448626, 0.663067, 0.841925, 1.131369, 1.692927",\ + "0.601360, 0.815801, 0.994659, 1.284103, 1.845661",\ + "0.935344, 1.149785, 1.328643, 1.618088, 2.179646",\ + "0.515681, 0.729166, 0.907987, 1.197456, 1.759062",\ + "0.523481, 0.736965, 0.915786, 1.205255, 1.766862",\ + "0.536900, 0.750385, 0.929206, 1.218675, 1.780281",\ + "0.689634, 0.903118, 1.081940, 1.371408, 1.933015",\ + "1.023618, 1.237103, 1.415924, 1.705393, 2.266999",\ + "0.605225, 0.809494, 0.988014, 1.277484, 1.839094",\ + "0.613025, 0.817293, 0.995813, 1.285284, 1.846893",\ + "0.626444, 0.830712, 1.009233, 1.298703, 1.860313",\ + "0.779178, 0.983446, 1.161967, 1.451437, 2.013046",\ + "1.113163, 1.317431, 1.495951, 1.785421, 2.347031",\ + "0.669295, 0.867323, 1.045710, 1.334916, 1.896114",\ + "0.677094, 0.875123, 1.053510, 1.342715, 1.903913",\ + "0.690513, 0.888542, 1.066929, 1.356135, 1.917333",\ + "0.843247, 1.041276, 1.219663, 1.508868, 2.070067",\ + "1.177232, 1.375260, 1.553648, 1.842853, 2.404051",\ + "0.992987, 1.172616, 1.349365, 1.638088, 2.198341",\ + "1.000786, 1.180416, 1.357164, 1.645887, 2.206141",\ + "1.014206, 1.193835, 1.370584, 1.659307, 2.219560",\ + "1.166939, 1.346569, 1.523317, 1.812040, 2.372294",\ + "1.500924, 1.680553, 1.857302, 2.146025, 2.706279"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.049261, 0.049261, 0.049261, 0.049261, 0.049261",\ + "0.055612, 0.055612, 0.055612, 0.055612, 0.055612",\ + "0.075309, 0.075309, 0.075309, 0.075309, 0.075309",\ + "0.368777, 0.368777, 0.368777, 0.368777, 0.368777",\ + "1.002182, 1.002182, 1.002182, 1.002182, 1.002182",\ + "0.049261, 0.049261, 0.049261, 0.049261, 0.049261",\ + "0.055612, 0.055612, 0.055612, 0.055612, 0.055612",\ + "0.075309, 0.075309, 0.075309, 0.075309, 0.075309",\ + "0.368777, 0.368777, 0.368777, 0.368777, 0.368777",\ + "1.002182, 1.002182, 1.002182, 1.002182, 1.002182",\ + "0.049261, 0.049261, 0.049261, 0.049261, 0.049261",\ + "0.055612, 0.055612, 0.055612, 0.055612, 0.055612",\ + "0.075309, 0.075309, 0.075309, 0.075309, 0.075309",\ + "0.368777, 0.368777, 0.368777, 0.368777, 0.368777",\ + "1.002182, 1.002182, 1.002182, 1.002182, 1.002182",\ + "0.049261, 0.049261, 0.049261, 0.049261, 0.049261",\ + "0.055612, 0.055612, 0.055612, 0.055612, 0.055612",\ + "0.075309, 0.075309, 0.075309, 0.075309, 0.075309",\ + "0.368777, 0.368777, 0.368777, 0.368777, 0.368777",\ + "1.002182, 1.002182, 1.002182, 1.002182, 1.002182",\ + "0.049261, 0.049261, 0.049261, 0.049261, 0.049261",\ + "0.055612, 0.055612, 0.055612, 0.055612, 0.055612",\ + "0.075309, 0.075309, 0.075309, 0.075309, 0.075309",\ + "0.368777, 0.368777, 0.368777, 0.368777, 0.368777",\ + "1.002182, 1.002182, 1.002182, 1.002182, 1.002182"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[5]_redg_min_2494*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[33]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.423145, 0.655225, 0.838651, 1.132010, 1.699224",\ + "0.442432, 0.674512, 0.857938, 1.151296, 1.718511",\ + "0.474066, 0.706146, 0.889572, 1.182931, 1.750145",\ + "0.763577, 0.995656, 1.179082, 1.472441, 2.039655",\ + "1.357510, 1.589590, 1.773016, 2.066375, 2.633589",\ + "0.511451, 0.742543, 0.925932, 1.219315, 1.786577",\ + "0.530738, 0.761829, 0.945219, 1.238602, 1.805864",\ + "0.562372, 0.793464, 0.976853, 1.270236, 1.837498",\ + "0.851883, 1.082974, 1.266363, 1.559746, 2.127008",\ + "1.445816, 1.676908, 1.860297, 2.153680, 2.720942",\ + "0.600820, 0.822873, 1.005959, 1.299343, 1.866609",\ + "0.620107, 0.842160, 1.025246, 1.318630, 1.885896",\ + "0.651741, 0.873794, 1.056880, 1.350264, 1.917530",\ + "0.941251, 1.163304, 1.346390, 1.639775, 2.207040",\ + "1.535185, 1.757238, 1.940324, 2.233708, 2.800974",\ + "0.664609, 0.880707, 1.063666, 1.356781, 1.923642",\ + "0.683896, 0.899994, 1.082952, 1.376068, 1.942929",\ + "0.715530, 0.931628, 1.114587, 1.407702, 1.974563",\ + "1.005041, 1.221138, 1.404097, 1.697213, 2.264073",\ + "1.598974, 1.815072, 1.998031, 2.291147, 2.858007",\ + "1.001916, 1.186040, 1.367322, 1.659959, 2.225884",\ + "1.021203, 1.205327, 1.386609, 1.679246, 2.245171",\ + "1.052837, 1.236961, 1.418243, 1.710881, 2.276805",\ + "1.342347, 1.526471, 1.707754, 2.000391, 2.566315",\ + "1.936281, 2.120405, 2.301688, 2.594325, 3.160249"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.107537, 0.107537, 0.107537, 0.107537, 0.107537",\ + "0.140565, 0.140565, 0.140565, 0.140565, 0.140565",\ + "0.189766, 0.189766, 0.189766, 0.189766, 0.189766",\ + "0.817728, 0.817728, 0.817728, 0.817728, 0.817728",\ + "2.195434, 2.195434, 2.195434, 2.195434, 2.195434",\ + "0.107537, 0.107537, 0.107537, 0.107537, 0.107537",\ + "0.140565, 0.140565, 0.140565, 0.140565, 0.140565",\ + "0.189766, 0.189766, 0.189766, 0.189766, 0.189766",\ + "0.817728, 0.817728, 0.817728, 0.817728, 0.817728",\ + "2.195434, 2.195434, 2.195434, 2.195434, 2.195434",\ + "0.107537, 0.107537, 0.107537, 0.107537, 0.107537",\ + "0.140565, 0.140565, 0.140565, 0.140565, 0.140565",\ + "0.189766, 0.189766, 0.189766, 0.189766, 0.189766",\ + "0.817728, 0.817728, 0.817728, 0.817728, 0.817728",\ + "2.195434, 2.195434, 2.195434, 2.195434, 2.195434",\ + "0.107537, 0.107537, 0.107537, 0.107537, 0.107537",\ + "0.140565, 0.140565, 0.140565, 0.140565, 0.140565",\ + "0.189766, 0.189766, 0.189766, 0.189766, 0.189766",\ + "0.817728, 0.817728, 0.817728, 0.817728, 0.817728",\ + "2.195434, 2.195434, 2.195434, 2.195434, 2.195434",\ + "0.107537, 0.107537, 0.107537, 0.107537, 0.107537",\ + "0.140565, 0.140565, 0.140565, 0.140565, 0.140565",\ + "0.189766, 0.189766, 0.189766, 0.189766, 0.189766",\ + "0.817728, 0.817728, 0.817728, 0.817728, 0.817728",\ + "2.195434, 2.195434, 2.195434, 2.195434, 2.195434"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.433489, 0.665568, 0.848994, 1.142353, 1.709567",\ + "0.441288, 0.673367, 0.856794, 1.150152, 1.717367",\ + "0.454707, 0.686787, 0.870213, 1.163572, 1.730786",\ + "0.607441, 0.839521, 1.022947, 1.316305, 1.883520",\ + "0.941426, 1.173505, 1.356931, 1.650290, 2.217504",\ + "0.521794, 0.752886, 0.936275, 1.229658, 1.796920",\ + "0.529594, 0.760685, 0.944075, 1.237458, 1.804720",\ + "0.543013, 0.774105, 0.957494, 1.250877, 1.818139",\ + "0.695747, 0.926838, 1.110228, 1.403611, 1.970873",\ + "1.029732, 1.260823, 1.444212, 1.737595, 2.304857",\ + "0.611163, 0.833216, 1.016302, 1.309687, 1.876952",\ + "0.618962, 0.841016, 1.024101, 1.317486, 1.884752",\ + "0.632382, 0.854435, 1.037521, 1.330905, 1.898171",\ + "0.785116, 1.007169, 1.190255, 1.483639, 2.050905",\ + "1.119100, 1.341153, 1.524239, 1.817624, 2.384889",\ + "0.674952, 0.891050, 1.074009, 1.367125, 1.933985",\ + "0.682752, 0.898850, 1.081808, 1.374924, 1.941785",\ + "0.696171, 0.912269, 1.095228, 1.388343, 1.955204",\ + "0.848905, 1.065003, 1.247962, 1.541077, 2.107938",\ + "1.182890, 1.398987, 1.581946, 1.875062, 2.441922",\ + "1.012259, 1.196383, 1.377666, 1.670303, 2.236228",\ + "1.020059, 1.204182, 1.385465, 1.678102, 2.244027",\ + "1.033478, 1.217602, 1.398885, 1.691522, 2.257446",\ + "1.186212, 1.370336, 1.551618, 1.844255, 2.410180",\ + "1.520197, 1.704320, 1.885603, 2.178240, 2.744164"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.049261, 0.049261, 0.049261, 0.049261, 0.049261",\ + "0.055612, 0.055612, 0.055612, 0.055612, 0.055612",\ + "0.075309, 0.075309, 0.075309, 0.075309, 0.075309",\ + "0.368777, 0.368777, 0.368777, 0.368777, 0.368777",\ + "1.002182, 1.002182, 1.002182, 1.002182, 1.002182",\ + "0.049261, 0.049261, 0.049261, 0.049261, 0.049261",\ + "0.055612, 0.055612, 0.055612, 0.055612, 0.055612",\ + "0.075309, 0.075309, 0.075309, 0.075309, 0.075309",\ + "0.368777, 0.368777, 0.368777, 0.368777, 0.368777",\ + "1.002182, 1.002182, 1.002182, 1.002182, 1.002182",\ + "0.049261, 0.049261, 0.049261, 0.049261, 0.049261",\ + "0.055612, 0.055612, 0.055612, 0.055612, 0.055612",\ + "0.075309, 0.075309, 0.075309, 0.075309, 0.075309",\ + "0.368777, 0.368777, 0.368777, 0.368777, 0.368777",\ + "1.002182, 1.002182, 1.002182, 1.002182, 1.002182",\ + "0.049261, 0.049261, 0.049261, 0.049261, 0.049261",\ + "0.055612, 0.055612, 0.055612, 0.055612, 0.055612",\ + "0.075309, 0.075309, 0.075309, 0.075309, 0.075309",\ + "0.368777, 0.368777, 0.368777, 0.368777, 0.368777",\ + "1.002182, 1.002182, 1.002182, 1.002182, 1.002182",\ + "0.049261, 0.049261, 0.049261, 0.049261, 0.049261",\ + "0.055612, 0.055612, 0.055612, 0.055612, 0.055612",\ + "0.075309, 0.075309, 0.075309, 0.075309, 0.075309",\ + "0.368777, 0.368777, 0.368777, 0.368777, 0.368777",\ + "1.002182, 1.002182, 1.002182, 1.002182, 1.002182"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[5]_redg_min_2512*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[37]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.181258, 0.362750, 0.559584, 0.877059, 1.491654",\ + "0.196091, 0.377154, 0.575199, 0.895881, 1.517263",\ + "0.221299, 0.401436, 0.600771, 0.925894, 1.556997",\ + "0.494050, 0.669272, 0.865120, 1.207435, 1.883536",\ + "1.086888, 1.260498, 1.453339, 1.802428, 2.497703",\ + "0.268666, 0.450068, 0.646865, 0.964364, 1.579007",\ + "0.283499, 0.464472, 0.662480, 0.983186, 1.604617",\ + "0.308707, 0.488754, 0.688052, 1.013199, 1.644350",\ + "0.581459, 0.756590, 0.952401, 1.294740, 1.970890",\ + "1.174296, 1.347816, 1.540620, 1.889733, 2.585056",\ + "0.349534, 0.530400, 0.726892, 1.044393, 1.659039",\ + "0.364365, 0.544804, 0.742507, 1.063215, 1.684648",\ + "0.389566, 0.569086, 0.768079, 1.093227, 1.724382",\ + "0.662286, 0.836922, 1.032428, 1.374768, 2.050921",\ + "1.255114, 1.428148, 1.620646, 1.969761, 2.665088",\ + "0.407230, 0.588238, 0.784630, 1.101888, 1.716185",\ + "0.422055, 0.602641, 0.800248, 1.120718, 1.741811",\ + "0.447245, 0.626919, 0.825823, 1.150743, 1.781568",\ + "0.719903, 0.894737, 1.090165, 1.432339, 2.108216",\ + "1.312710, 1.485957, 1.678376, 2.027355, 2.722429",\ + "0.710204, 0.893608, 1.088293, 1.405116, 2.018565",\ + "0.724980, 0.907999, 1.103911, 1.423953, 2.044210",\ + "0.750065, 0.932253, 1.129487, 1.453987, 2.083996",\ + "1.022164, 1.199940, 1.393827, 1.735630, 2.410775",\ + "1.614788, 1.791118, 1.982037, 2.330666, 3.025044"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.126844, 0.127605, 0.133435, 0.151631, 0.191178",\ + "0.149772, 0.150309, 0.154650, 0.170542, 0.205735",\ + "0.195024, 0.195582, 0.198470, 0.210618, 0.237900",\ + "0.816153, 0.816255, 0.816260, 0.817805, 0.821592",\ + "2.194128, 2.194405, 2.194418, 2.195894, 2.199512",\ + "0.126844, 0.127605, 0.133435, 0.151631, 0.191178",\ + "0.149772, 0.150309, 0.154650, 0.170542, 0.205735",\ + "0.195024, 0.195582, 0.198470, 0.210618, 0.237900",\ + "0.816153, 0.816255, 0.816260, 0.817805, 0.821592",\ + "2.194128, 2.194405, 2.194418, 2.195894, 2.199512",\ + "0.126849, 0.127605, 0.133435, 0.151631, 0.191178",\ + "0.149775, 0.150309, 0.154650, 0.170542, 0.205735",\ + "0.195028, 0.195582, 0.198470, 0.210618, 0.237900",\ + "0.816153, 0.816255, 0.816260, 0.817805, 0.821592",\ + "2.194129, 2.194405, 2.194418, 2.195894, 2.199512",\ + "0.126859, 0.127607, 0.133449, 0.151680, 0.191274",\ + "0.149782, 0.150311, 0.154660, 0.170585, 0.205820",\ + "0.195035, 0.195584, 0.198477, 0.210651, 0.237965",\ + "0.816155, 0.816256, 0.816260, 0.817810, 0.821601",\ + "2.194133, 2.194406, 2.194418, 2.195898, 2.199521",\ + "0.126945, 0.127627, 0.133451, 0.151721, 0.191389",\ + "0.149843, 0.150326, 0.154662, 0.170622, 0.205922",\ + "0.195098, 0.195599, 0.198478, 0.210679, 0.238045",\ + "0.816166, 0.816259, 0.816260, 0.817813, 0.821612",\ + "2.194165, 2.194413, 2.194418, 2.195902, 2.199532"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.117102, 0.379947, 0.573156, 0.882174, 1.479232",\ + "0.126091, 0.389068, 0.582472, 0.892519, 1.491929",\ + "0.141699, 0.404157, 0.597820, 0.909153, 1.511489",\ + "0.306945, 0.562483, 0.755606, 1.068523, 1.675209",\ + "0.649757, 0.897030, 1.089718, 1.401787, 2.006775",\ + "0.205481, 0.467265, 0.660437, 0.969479, 1.566586",\ + "0.214473, 0.476386, 0.669753, 0.979824, 1.579283",\ + "0.230076, 0.491475, 0.685100, 0.996458, 1.598842",\ + "0.395245, 0.649801, 0.842887, 1.155828, 1.762562",\ + "0.738017, 0.984348, 1.176999, 1.489092, 2.094129",\ + "0.294834, 0.547598, 0.740463, 1.049507, 1.646617",\ + "0.303840, 0.556719, 0.749780, 1.059852, 1.659314",\ + "0.319425, 0.571807, 0.765127, 1.076486, 1.678874",\ + "0.484368, 0.730134, 0.922914, 1.235856, 1.842594",\ + "0.827025, 1.064680, 1.257025, 1.569121, 2.174160",\ + "0.358511, 0.605438, 0.798193, 1.106982, 1.703722",\ + "0.367529, 0.614560, 0.807510, 1.117329, 1.716424",\ + "0.383098, 0.629648, 0.822858, 1.133967, 1.735991",\ + "0.547830, 0.787974, 0.980643, 1.293342, 1.899721",\ + "0.890379, 1.122520, 1.314754, 1.626604, 2.231284",\ + "0.695115, 0.910825, 1.101854, 1.410191, 2.006050",\ + "0.704209, 0.919948, 1.111171, 1.420541, 2.018759",\ + "0.719674, 0.935035, 1.126519, 1.437182, 2.038335",\ + "0.883062, 1.093358, 1.284304, 1.596561, 2.202077",\ + "1.224926, 1.427904, 1.618415, 1.929822, 2.533635"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.044794, 0.049393, 0.054601, 0.068665, 0.098782",\ + "0.053408, 0.055750, 0.059102, 0.072238, 0.101610",\ + "0.075784, 0.075784, 0.077996, 0.088605, 0.112682",\ + "0.368045, 0.368045, 0.368833, 0.370655, 0.374434",\ + "1.001402, 1.001402, 1.001776, 1.002637, 1.004422",\ + "0.044917, 0.049393, 0.054601, 0.068665, 0.098782",\ + "0.053471, 0.055750, 0.059102, 0.072238, 0.101610",\ + "0.075784, 0.075784, 0.077996, 0.088605, 0.112682",\ + "0.368045, 0.368045, 0.368833, 0.370655, 0.374434",\ + "1.001402, 1.001402, 1.001776, 1.002637, 1.004422",\ + "0.045280, 0.049393, 0.054601, 0.068665, 0.098782",\ + "0.053656, 0.055750, 0.059102, 0.072238, 0.101610",\ + "0.075784, 0.075784, 0.077996, 0.088605, 0.112682",\ + "0.368045, 0.368045, 0.368833, 0.370655, 0.374434",\ + "1.001402, 1.001402, 1.001776, 1.002637, 1.004422",\ + "0.045619, 0.049410, 0.054613, 0.068702, 0.098855",\ + "0.053828, 0.055759, 0.059110, 0.072274, 0.101681",\ + "0.075784, 0.075784, 0.078001, 0.088634, 0.112740",\ + "0.368045, 0.368045, 0.368835, 0.370660, 0.374443",\ + "1.001402, 1.001402, 1.001777, 1.002639, 1.004426",\ + "0.047777, 0.049532, 0.054615, 0.068733, 0.098943",\ + "0.054927, 0.055821, 0.059111, 0.072304, 0.101766",\ + "0.075784, 0.075784, 0.078002, 0.088659, 0.112810",\ + "0.368045, 0.368045, 0.368835, 0.370664, 0.374454",\ + "1.001402, 1.001402, 1.001777, 1.002641, 1.004432"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[5]_redg_min_2747*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[40]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.496413, 0.709649, 0.894786, 1.185670, 1.745053",\ + "0.515784, 0.729021, 0.914158, 1.205042, 1.764425",\ + "0.547238, 0.760475, 0.945612, 1.236496, 1.795879",\ + "0.836174, 1.049411, 1.234548, 1.525432, 2.084815",\ + "1.430066, 1.643303, 1.828440, 2.119324, 2.678707",\ + "0.584781, 0.796968, 0.982067, 1.272975, 1.832407",\ + "0.604153, 0.816339, 1.001439, 1.292347, 1.851778",\ + "0.635607, 0.847793, 1.032893, 1.323801, 1.883232",\ + "0.924543, 1.136729, 1.321829, 1.612737, 2.172168",\ + "1.518435, 1.730622, 1.915721, 2.206629, 2.766061",\ + "0.673752, 0.877303, 1.062094, 1.353004, 1.912438",\ + "0.693124, 0.896674, 1.081466, 1.372375, 1.931810",\ + "0.724578, 0.928128, 1.112920, 1.403829, 1.963264",\ + "1.013514, 1.217064, 1.401856, 1.692765, 2.252200",\ + "1.607406, 1.810957, 1.995748, 2.286657, 2.846092",\ + "0.736919, 0.935130, 1.119804, 1.410431, 1.969450",\ + "0.756291, 0.954502, 1.139176, 1.429803, 1.988822",\ + "0.787745, 0.985956, 1.170630, 1.461257, 2.020276",\ + "1.076681, 1.274892, 1.459566, 1.750193, 2.309212",\ + "1.670573, 1.868784, 2.053458, 2.344085, 2.903104",\ + "1.058360, 1.240438, 1.423463, 1.713602, 2.271667",\ + "1.077731, 1.259810, 1.442835, 1.732974, 2.291038",\ + "1.109185, 1.291264, 1.474289, 1.764428, 2.322492",\ + "1.398121, 1.580200, 1.763225, 2.053364, 2.611428",\ + "1.992013, 2.174092, 2.357117, 2.647256, 3.205320"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.108153, 0.108153, 0.108153, 0.108153, 0.108153",\ + "0.141536, 0.141536, 0.141536, 0.141536, 0.141536",\ + "0.190539, 0.190539, 0.190539, 0.190539, 0.190539",\ + "0.817689, 0.817689, 0.817689, 0.817689, 0.817689",\ + "2.194882, 2.194882, 2.194882, 2.194882, 2.194882",\ + "0.108153, 0.108153, 0.108153, 0.108153, 0.108153",\ + "0.141536, 0.141536, 0.141536, 0.141536, 0.141536",\ + "0.190539, 0.190539, 0.190539, 0.190539, 0.190539",\ + "0.817689, 0.817689, 0.817689, 0.817689, 0.817689",\ + "2.194882, 2.194882, 2.194882, 2.194882, 2.194882",\ + "0.108153, 0.108153, 0.108153, 0.108153, 0.108153",\ + "0.141536, 0.141536, 0.141536, 0.141536, 0.141536",\ + "0.190539, 0.190539, 0.190539, 0.190539, 0.190539",\ + "0.817689, 0.817689, 0.817689, 0.817689, 0.817689",\ + "2.194882, 2.194882, 2.194882, 2.194882, 2.194882",\ + "0.108153, 0.108153, 0.108153, 0.108153, 0.108153",\ + "0.141536, 0.141536, 0.141536, 0.141536, 0.141536",\ + "0.190539, 0.190539, 0.190539, 0.190539, 0.190539",\ + "0.817689, 0.817689, 0.817689, 0.817689, 0.817689",\ + "2.194882, 2.194882, 2.194882, 2.194882, 2.194882",\ + "0.108153, 0.108153, 0.108153, 0.108153, 0.108153",\ + "0.141536, 0.141536, 0.141536, 0.141536, 0.141536",\ + "0.190539, 0.190539, 0.190539, 0.190539, 0.190539",\ + "0.817689, 0.817689, 0.817689, 0.817689, 0.817689",\ + "2.194882, 2.194882, 2.194882, 2.194882, 2.194882"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.505659, 0.718896, 0.904033, 1.194916, 1.754300",\ + "0.513469, 0.726706, 0.911843, 1.202727, 1.762110",\ + "0.526889, 0.740125, 0.925263, 1.216146, 1.775529",\ + "0.679859, 0.893095, 1.078233, 1.369116, 1.928499",\ + "1.013927, 1.227163, 1.412301, 1.703184, 2.262567",\ + "0.594028, 0.806214, 0.991314, 1.282222, 1.841653",\ + "0.601838, 0.814024, 0.999124, 1.290032, 1.849463",\ + "0.615257, 0.827444, 1.012543, 1.303451, 1.862883",\ + "0.768227, 0.980414, 1.165513, 1.456421, 2.015853",\ + "1.102295, 1.314482, 1.499582, 1.790489, 2.349921",\ + "0.682999, 0.886549, 1.071341, 1.362250, 1.921685",\ + "0.690809, 0.894360, 1.079151, 1.370060, 1.929495",\ + "0.704229, 0.907779, 1.092570, 1.383480, 1.942914",\ + "0.857199, 1.060749, 1.245540, 1.536450, 2.095884",\ + "1.191267, 1.394817, 1.579608, 1.870518, 2.429952",\ + "0.746166, 0.944377, 1.129050, 1.419678, 1.978696",\ + "0.753976, 0.952187, 1.136861, 1.427488, 1.986507",\ + "0.767395, 0.965607, 1.150280, 1.440908, 1.999926",\ + "0.920365, 1.118577, 1.303250, 1.593878, 2.152896",\ + "1.254433, 1.452645, 1.637318, 1.927946, 2.486964",\ + "1.067606, 1.249685, 1.432710, 1.722849, 2.280913",\ + "1.075416, 1.257495, 1.440520, 1.730659, 2.288723",\ + "1.088836, 1.270914, 1.453939, 1.744078, 2.302143",\ + "1.241806, 1.423884, 1.606909, 1.897048, 2.455113",\ + "1.575874, 1.757952, 1.940977, 2.231116, 2.789181"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.046252, 0.046252, 0.046252, 0.046252, 0.046252",\ + "0.051899, 0.051899, 0.051899, 0.051899, 0.051899",\ + "0.075290, 0.075290, 0.075290, 0.075290, 0.075290",\ + "0.368838, 0.368838, 0.368838, 0.368838, 0.368838",\ + "1.000959, 1.000959, 1.000959, 1.000959, 1.000959",\ + "0.046252, 0.046252, 0.046252, 0.046252, 0.046252",\ + "0.051899, 0.051899, 0.051899, 0.051899, 0.051899",\ + "0.075290, 0.075290, 0.075290, 0.075290, 0.075290",\ + "0.368838, 0.368838, 0.368838, 0.368838, 0.368838",\ + "1.000959, 1.000959, 1.000959, 1.000959, 1.000959",\ + "0.046252, 0.046252, 0.046252, 0.046252, 0.046252",\ + "0.051899, 0.051899, 0.051899, 0.051899, 0.051899",\ + "0.075290, 0.075290, 0.075290, 0.075290, 0.075290",\ + "0.368838, 0.368838, 0.368838, 0.368838, 0.368838",\ + "1.000959, 1.000959, 1.000959, 1.000959, 1.000959",\ + "0.046252, 0.046252, 0.046252, 0.046252, 0.046252",\ + "0.051899, 0.051899, 0.051899, 0.051899, 0.051899",\ + "0.075290, 0.075290, 0.075290, 0.075290, 0.075290",\ + "0.368838, 0.368838, 0.368838, 0.368838, 0.368838",\ + "1.000959, 1.000959, 1.000959, 1.000959, 1.000959",\ + "0.046252, 0.046252, 0.046252, 0.046252, 0.046252",\ + "0.051899, 0.051899, 0.051899, 0.051899, 0.051899",\ + "0.075290, 0.075290, 0.075290, 0.075290, 0.075290",\ + "0.368838, 0.368838, 0.368838, 0.368838, 0.368838",\ + "1.000959, 1.000959, 1.000959, 1.000959, 1.000959"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[5]_redg_min_2380*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[44]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.099932, 0.259054, 0.413318, 0.663965, 1.151026",\ + "0.112861, 0.280635, 0.445926, 0.710841, 1.223619",\ + "0.139635, 0.312455, 0.491350, 0.774619, 1.320764",\ + "0.427093, 0.638536, 0.826241, 1.153952, 1.801309",\ + "1.022612, 1.250759, 1.440120, 1.765390, 2.405472",\ + "0.187338, 0.346372, 0.500599, 0.751271, 1.238380",\ + "0.200267, 0.367953, 0.533207, 0.798146, 1.310972",\ + "0.227041, 0.399773, 0.578631, 0.861924, 1.408118",\ + "0.515372, 0.725854, 0.913522, 1.241257, 1.888662",\ + "1.110934, 1.338077, 1.527401, 1.852695, 2.492826",\ + "0.268065, 0.426703, 0.580626, 0.831299, 1.318411",\ + "0.281048, 0.448284, 0.613234, 0.878174, 1.391004",\ + "0.307853, 0.480104, 0.658657, 0.941953, 1.488149",\ + "0.604596, 0.806184, 0.993549, 1.321285, 1.968694",\ + "1.200284, 1.418408, 1.607428, 1.932723, 2.572857",\ + "0.325504, 0.484459, 0.638266, 0.888640, 1.375251",\ + "0.338594, 0.506071, 0.670899, 0.935546, 1.447905",\ + "0.365461, 0.537910, 0.716354, 0.999365, 1.545131",\ + "0.668221, 0.863995, 1.051266, 1.378821, 2.025920",\ + "1.264029, 1.476232, 1.665149, 1.990250, 2.630066",\ + "0.626239, 0.789242, 0.941912, 1.191734, 1.677259",\ + "0.640305, 0.811082, 0.974549, 1.238668, 1.749989",\ + "0.667742, 0.843054, 1.020009, 1.302522, 1.847312",\ + "0.992829, 1.169169, 1.354925, 1.682082, 2.328396",\ + "1.601053, 1.781498, 1.968808, 2.293504, 2.932521"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.028418, 0.053985, 0.061562, 0.076171, 0.106327",\ + "0.053853, 0.080619, 0.084946, 0.098515, 0.128974",\ + "0.117398, 0.123775, 0.136709, 0.151501, 0.176771",\ + "0.813025, 0.813025, 0.813025, 0.814975, 0.819748",\ + "2.191540, 2.192948, 2.194009, 2.200710, 2.216247",\ + "0.028418, 0.053985, 0.061562, 0.076171, 0.106327",\ + "0.053853, 0.080619, 0.084946, 0.098515, 0.128974",\ + "0.117398, 0.123775, 0.136709, 0.151501, 0.176771",\ + "0.813025, 0.813025, 0.813025, 0.814975, 0.819748",\ + "2.191577, 2.192948, 2.194009, 2.200710, 2.216247",\ + "0.028577, 0.053985, 0.061562, 0.076171, 0.106327",\ + "0.054019, 0.080619, 0.084946, 0.098515, 0.128974",\ + "0.117437, 0.123775, 0.136709, 0.151501, 0.176771",\ + "0.813025, 0.813025, 0.813025, 0.814975, 0.819748",\ + "2.191688, 2.192948, 2.194009, 2.200710, 2.216247",\ + "0.028892, 0.054081, 0.061577, 0.076207, 0.106399",\ + "0.054349, 0.080719, 0.084954, 0.098552, 0.129047",\ + "0.117516, 0.123799, 0.136740, 0.151532, 0.176832",\ + "0.813025, 0.813025, 0.813025, 0.814981, 0.819759",\ + "2.191792, 2.192953, 2.194012, 2.200729, 2.216285",\ + "0.031778, 0.054753, 0.061580, 0.076239, 0.106487",\ + "0.057369, 0.081423, 0.084955, 0.098584, 0.129136",\ + "0.118236, 0.123966, 0.136744, 0.151558, 0.176905",\ + "0.813025, 0.813025, 0.813025, 0.814986, 0.819773",\ + "2.192455, 2.192990, 2.194012, 2.200745, 2.216330"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.071387, 0.284408, 0.492606, 0.801306, 1.367433",\ + "0.077667, 0.305792, 0.517732, 0.814342, 1.385042",\ + "0.090238, 0.334877, 0.530841, 0.830649, 1.407555",\ + "0.256635, 0.477338, 0.671832, 0.978257, 1.567975",\ + "0.595228, 0.802461, 0.996271, 1.304460, 1.898944",\ + "0.158934, 0.371732, 0.579823, 0.888611, 1.454786",\ + "0.165476, 0.393159, 0.605013, 0.901647, 1.472395",\ + "0.178302, 0.422304, 0.618122, 0.917954, 1.494908",\ + "0.344810, 0.564656, 0.759113, 1.065562, 1.655329",\ + "0.683378, 0.889779, 1.083552, 1.391765, 1.986297",\ + "0.245972, 0.460189, 0.667780, 0.968640, 1.534818",\ + "0.253296, 0.481714, 0.685040, 0.981676, 1.552427",\ + "0.266884, 0.507931, 0.698149, 0.997983, 1.574940",\ + "0.433723, 0.644987, 0.839140, 1.145591, 1.735360",\ + "0.772213, 0.970110, 1.163579, 1.471793, 2.066329",\ + "0.307535, 0.525062, 0.731901, 1.026077, 1.591848",\ + "0.315597, 0.546729, 0.742759, 1.039118, 1.609468",\ + "0.329903, 0.565774, 0.755873, 1.055433, 1.631996",\ + "0.497055, 0.702831, 0.896872, 1.203056, 1.792447",\ + "0.835472, 1.027940, 1.221311, 1.529264, 2.123427",\ + "0.630646, 0.853005, 1.036340, 1.329254, 1.894087",\ + "0.643411, 0.859949, 1.046418, 1.342300, 1.911721",\ + "0.662302, 0.871170, 1.059532, 1.358621, 1.934267",\ + "0.824001, 1.008235, 1.200534, 1.506258, 2.094755",\ + "1.152404, 1.333245, 1.524972, 1.832471, 2.425749"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.014090, 0.057759, 0.075820, 0.080331, 0.107469",\ + "0.025180, 0.064799, 0.067612, 0.083095, 0.115487",\ + "0.053782, 0.083479, 0.086622, 0.102435, 0.134993",\ + "0.368605, 0.368605, 0.369812, 0.373454, 0.381327",\ + "1.000406, 1.000406, 1.002137, 1.003830, 1.006481",\ + "0.014987, 0.057834, 0.075890, 0.080331, 0.107469",\ + "0.026088, 0.064832, 0.067612, 0.083095, 0.115487",\ + "0.054430, 0.083516, 0.086622, 0.102435, 0.134993",\ + "0.368605, 0.368605, 0.369812, 0.373454, 0.381327",\ + "1.000406, 1.000406, 1.002137, 1.003830, 1.006481",\ + "0.017662, 0.058002, 0.075892, 0.080331, 0.107469",\ + "0.028799, 0.064906, 0.067612, 0.083095, 0.115487",\ + "0.056363, 0.078451, 0.086622, 0.102435, 0.134993",\ + "0.368605, 0.368605, 0.369812, 0.373454, 0.381327",\ + "1.000406, 1.000406, 1.002137, 1.003830, 1.006481",\ + "0.020186, 0.058246, 0.075896, 0.080364, 0.107535",\ + "0.031356, 0.065014, 0.067628, 0.083134, 0.115565",\ + "0.058188, 0.078544, 0.086639, 0.102475, 0.135071",\ + "0.368605, 0.368605, 0.369814, 0.373463, 0.381346",\ + "1.000406, 1.000406, 1.002141, 1.003834, 1.006488",\ + "0.036287, 0.049252, 0.064182, 0.080393, 0.107614",\ + "0.047669, 0.060805, 0.067630, 0.083168, 0.115659",\ + "0.069823, 0.079193, 0.086642, 0.102509, 0.135166",\ + "0.368605, 0.368605, 0.369815, 0.373471, 0.381369",\ + "1.000406, 1.000406, 1.002141, 1.003836, 1.006495"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[5]_redg_min_2421*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[45]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.473885, 0.684615, 0.861464, 1.145505, 1.695445",\ + "0.493257, 0.703986, 0.880836, 1.164877, 1.714816",\ + "0.524711, 0.735440, 0.912290, 1.196331, 1.746270",\ + "0.813647, 1.024377, 1.201226, 1.485267, 2.035206",\ + "1.407539, 1.618269, 1.795118, 2.079159, 2.629098",\ + "0.562155, 0.771933, 0.948745, 1.232810, 1.782798",\ + "0.581527, 0.791304, 0.968117, 1.252182, 1.802170",\ + "0.612981, 0.822758, 0.999571, 1.283636, 1.833624",\ + "0.901917, 1.111694, 1.288507, 1.572572, 2.122560",\ + "1.495809, 1.705587, 1.882399, 2.166464, 2.716452",\ + "0.651344, 0.852264, 1.028772, 1.312839, 1.862830",\ + "0.670716, 0.871635, 1.048143, 1.332211, 1.882201",\ + "0.702170, 0.903089, 1.079598, 1.363665, 1.913656",\ + "0.991106, 1.192025, 1.368534, 1.652601, 2.202591",\ + "1.584998, 1.785918, 1.962426, 2.246493, 2.796484",\ + "0.714933, 0.910084, 1.086463, 1.370256, 1.919821",\ + "0.734305, 0.929456, 1.105835, 1.389627, 1.939192",\ + "0.765759, 0.960910, 1.137289, 1.421082, 1.970646",\ + "1.054695, 1.249846, 1.426225, 1.710018, 2.259583",\ + "1.648587, 1.843739, 2.020117, 2.303910, 2.853475",\ + "1.036585, 1.215328, 1.390118, 1.673416, 2.222012",\ + "1.055957, 1.234700, 1.409489, 1.692788, 2.241384",\ + "1.087411, 1.266154, 1.440943, 1.724242, 2.272838",\ + "1.376347, 1.555090, 1.729879, 2.013178, 2.561774",\ + "1.970239, 2.148982, 2.323771, 2.607070, 3.155666"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.108153, 0.108153, 0.108153, 0.108153, 0.108153",\ + "0.141536, 0.141536, 0.141536, 0.141536, 0.141536",\ + "0.190539, 0.190539, 0.190539, 0.190539, 0.190539",\ + "0.817689, 0.817689, 0.817689, 0.817689, 0.817689",\ + "2.194882, 2.194882, 2.194882, 2.194882, 2.194882",\ + "0.108153, 0.108153, 0.108153, 0.108153, 0.108153",\ + "0.141536, 0.141536, 0.141536, 0.141536, 0.141536",\ + "0.190539, 0.190539, 0.190539, 0.190539, 0.190539",\ + "0.817689, 0.817689, 0.817689, 0.817689, 0.817689",\ + "2.194882, 2.194882, 2.194882, 2.194882, 2.194882",\ + "0.108153, 0.108153, 0.108153, 0.108153, 0.108153",\ + "0.141536, 0.141536, 0.141536, 0.141536, 0.141536",\ + "0.190539, 0.190539, 0.190539, 0.190539, 0.190539",\ + "0.817689, 0.817689, 0.817689, 0.817689, 0.817689",\ + "2.194882, 2.194882, 2.194882, 2.194882, 2.194882",\ + "0.108153, 0.108153, 0.108153, 0.108153, 0.108153",\ + "0.141536, 0.141536, 0.141536, 0.141536, 0.141536",\ + "0.190539, 0.190539, 0.190539, 0.190539, 0.190539",\ + "0.817689, 0.817689, 0.817689, 0.817689, 0.817689",\ + "2.194882, 2.194882, 2.194882, 2.194882, 2.194882",\ + "0.108153, 0.108153, 0.108153, 0.108153, 0.108153",\ + "0.141536, 0.141536, 0.141536, 0.141536, 0.141536",\ + "0.190539, 0.190539, 0.190539, 0.190539, 0.190539",\ + "0.817689, 0.817689, 0.817689, 0.817689, 0.817689",\ + "2.194882, 2.194882, 2.194882, 2.194882, 2.194882"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.483132, 0.693861, 0.870710, 1.154752, 1.704691",\ + "0.490942, 0.701672, 0.878521, 1.162562, 1.712502",\ + "0.504361, 0.715091, 0.891940, 1.175981, 1.725921",\ + "0.657331, 0.868061, 1.044910, 1.328951, 1.878891",\ + "0.991399, 1.202129, 1.378978, 1.663020, 2.212959",\ + "0.571402, 0.781179, 0.957991, 1.242057, 1.792045",\ + "0.579212, 0.788990, 0.965802, 1.249867, 1.799855",\ + "0.592631, 0.802409, 0.979221, 1.263286, 1.813274",\ + "0.745601, 0.955379, 1.132191, 1.416256, 1.966244",\ + "1.079669, 1.289447, 1.466259, 1.750325, 2.300312",\ + "0.660591, 0.861510, 1.038018, 1.322085, 1.872076",\ + "0.668401, 0.869320, 1.045829, 1.329896, 1.879887",\ + "0.681820, 0.882740, 1.059248, 1.343315, 1.893306",\ + "0.834790, 1.035710, 1.212218, 1.496285, 2.046276",\ + "1.168858, 1.369778, 1.546286, 1.830353, 2.380344",\ + "0.724180, 0.919331, 1.095710, 1.379503, 1.929067",\ + "0.731990, 0.927141, 1.103520, 1.387313, 1.936877",\ + "0.745409, 0.940561, 1.116939, 1.400732, 1.950297",\ + "0.898379, 1.093531, 1.269909, 1.553702, 2.103267",\ + "1.232447, 1.427599, 1.603977, 1.887770, 2.437335",\ + "1.045832, 1.224575, 1.399364, 1.682663, 2.231259",\ + "1.053642, 1.232385, 1.407174, 1.690473, 2.239069",\ + "1.067061, 1.245804, 1.420594, 1.703892, 2.252488",\ + "1.220031, 1.398774, 1.573564, 1.856862, 2.405458",\ + "1.554100, 1.732842, 1.907632, 2.190930, 2.739527"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000540, 0.001536, 0.012434, 0.035370"); + index_3 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.046252, 0.046252, 0.046252, 0.046252, 0.046252",\ + "0.051899, 0.051899, 0.051899, 0.051899, 0.051899",\ + "0.075290, 0.075290, 0.075290, 0.075290, 0.075290",\ + "0.368838, 0.368838, 0.368838, 0.368838, 0.368838",\ + "1.000959, 1.000959, 1.000959, 1.000959, 1.000959",\ + "0.046252, 0.046252, 0.046252, 0.046252, 0.046252",\ + "0.051899, 0.051899, 0.051899, 0.051899, 0.051899",\ + "0.075290, 0.075290, 0.075290, 0.075290, 0.075290",\ + "0.368838, 0.368838, 0.368838, 0.368838, 0.368838",\ + "1.000959, 1.000959, 1.000959, 1.000959, 1.000959",\ + "0.046252, 0.046252, 0.046252, 0.046252, 0.046252",\ + "0.051899, 0.051899, 0.051899, 0.051899, 0.051899",\ + "0.075290, 0.075290, 0.075290, 0.075290, 0.075290",\ + "0.368838, 0.368838, 0.368838, 0.368838, 0.368838",\ + "1.000959, 1.000959, 1.000959, 1.000959, 1.000959",\ + "0.046252, 0.046252, 0.046252, 0.046252, 0.046252",\ + "0.051899, 0.051899, 0.051899, 0.051899, 0.051899",\ + "0.075290, 0.075290, 0.075290, 0.075290, 0.075290",\ + "0.368838, 0.368838, 0.368838, 0.368838, 0.368838",\ + "1.000959, 1.000959, 1.000959, 1.000959, 1.000959",\ + "0.046252, 0.046252, 0.046252, 0.046252, 0.046252",\ + "0.051899, 0.051899, 0.051899, 0.051899, 0.051899",\ + "0.075290, 0.075290, 0.075290, 0.075290, 0.075290",\ + "0.368838, 0.368838, 0.368838, 0.368838, 0.368838",\ + "1.000959, 1.000959, 1.000959, 1.000959, 1.000959"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[5]_redg_min_2516*/ + +} /* end of pin tl_o[5] */ + +pin("tl_o[4]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.020161 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : tl_o[4]; + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[17]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.778821, 1.003429, 1.297149, 1.790603, 2.777510",\ + "0.825348, 1.049956, 1.343676, 1.837130, 2.824038",\ + "0.910982, 1.135590, 1.429310, 1.922764, 2.909672",\ + "1.134301, 1.358909, 1.652629, 2.146083, 3.132991",\ + "1.698246, 1.922854, 2.216574, 2.710028, 3.696936",\ + "0.866262, 1.091031, 1.384796, 1.877318, 2.863444",\ + "0.912789, 1.137558, 1.431323, 1.923846, 2.909971",\ + "0.998423, 1.223192, 1.516957, 2.009480, 2.995605",\ + "1.221742, 1.446511, 1.740276, 2.232799, 3.218925",\ + "1.785687, 2.010456, 2.304221, 2.796744, 3.782870",\ + "0.947141, 1.180161, 1.472762, 1.964941, 2.950399",\ + "0.993669, 1.226688, 1.519289, 2.011468, 2.996926",\ + "1.079303, 1.312322, 1.604924, 2.097103, 3.082561",\ + "1.302622, 1.535641, 1.828242, 2.320421, 3.305880",\ + "1.866567, 2.099586, 2.392188, 2.884367, 3.869825",\ + "1.004861, 1.246014, 1.536906, 2.028855, 3.013908",\ + "1.051388, 1.292541, 1.583433, 2.075382, 3.060435",\ + "1.137022, 1.378175, 1.669067, 2.161016, 3.146070",\ + "1.360341, 1.601494, 1.892386, 2.384335, 3.369389",\ + "1.924286, 2.165440, 2.456331, 2.948280, 3.933334",\ + "1.307537, 1.612873, 1.889025, 2.378309, 3.359364",\ + "1.354064, 1.659401, 1.935552, 2.424836, 3.405891",\ + "1.439698, 1.745035, 2.021186, 2.510470, 3.491526",\ + "1.663017, 1.968354, 2.244505, 2.733789, 3.714845",\ + "2.226962, 2.532299, 2.808450, 3.297734, 4.278790"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.052220, 0.052220, 0.052220, 0.052220, 0.052220",\ + "0.174408, 0.174408, 0.174408, 0.174408, 0.174408",\ + "0.378144, 0.378144, 0.378144, 0.378144, 0.378144",\ + "0.885509, 0.885509, 0.885509, 0.885509, 0.885509",\ + "2.163010, 2.163010, 2.163010, 2.163010, 2.163010",\ + "0.052220, 0.052220, 0.052220, 0.052220, 0.052220",\ + "0.174408, 0.174408, 0.174408, 0.174408, 0.174408",\ + "0.378144, 0.378144, 0.378144, 0.378144, 0.378144",\ + "0.885509, 0.885509, 0.885509, 0.885509, 0.885509",\ + "2.163010, 2.163010, 2.163010, 2.163010, 2.163010",\ + "0.052220, 0.052220, 0.052220, 0.052220, 0.052220",\ + "0.174408, 0.174408, 0.174408, 0.174408, 0.174408",\ + "0.378144, 0.378144, 0.378144, 0.378144, 0.378144",\ + "0.885509, 0.885509, 0.885509, 0.885509, 0.885509",\ + "2.163010, 2.163010, 2.163010, 2.163010, 2.163010",\ + "0.052220, 0.052220, 0.052220, 0.052220, 0.052220",\ + "0.174408, 0.174408, 0.174408, 0.174408, 0.174408",\ + "0.378144, 0.378144, 0.378144, 0.378144, 0.378144",\ + "0.885509, 0.885509, 0.885509, 0.885509, 0.885509",\ + "2.163010, 2.163010, 2.163010, 2.163010, 2.163010",\ + "0.052220, 0.052220, 0.052220, 0.052220, 0.052220",\ + "0.174408, 0.174408, 0.174408, 0.174408, 0.174408",\ + "0.378144, 0.378144, 0.378144, 0.378144, 0.378144",\ + "0.885509, 0.885509, 0.885509, 0.885509, 0.885509",\ + "2.163010, 2.163010, 2.163010, 2.163010, 2.163010"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.717206, 0.941815, 1.235535, 1.728989, 2.715896",\ + "0.770496, 0.995104, 1.288824, 1.782278, 2.769186",\ + "0.831244, 1.055852, 1.349573, 1.843026, 2.829934",\ + "0.965956, 1.190564, 1.484284, 1.977738, 2.964645",\ + "1.312464, 1.537072, 1.830792, 2.324246, 3.311154",\ + "0.804648, 1.029416, 1.323182, 1.815704, 2.801830",\ + "0.857937, 1.082706, 1.376471, 1.868994, 2.855119",\ + "0.918686, 1.143454, 1.437219, 1.929742, 2.915868",\ + "1.053397, 1.278166, 1.571931, 2.064453, 3.050579",\ + "1.399905, 1.624674, 1.918439, 2.410962, 3.397088",\ + "0.885527, 1.118547, 1.411148, 1.903327, 2.888785",\ + "0.938817, 1.171836, 1.464437, 1.956616, 2.942075",\ + "0.999565, 1.232585, 1.525186, 2.017365, 3.002823",\ + "1.134276, 1.367296, 1.659897, 2.152076, 3.137534",\ + "1.480785, 1.713804, 2.006406, 2.498585, 3.484043",\ + "0.943246, 1.184400, 1.475292, 1.967241, 2.952294",\ + "0.996536, 1.237689, 1.528581, 2.020530, 3.005584",\ + "1.057284, 1.298438, 1.589330, 2.081279, 3.066332",\ + "1.191995, 1.433149, 1.724041, 2.215990, 3.201043",\ + "1.538504, 1.779658, 2.070549, 2.562499, 3.547552",\ + "1.245923, 1.551259, 1.827411, 2.316695, 3.297750",\ + "1.299212, 1.604549, 1.880700, 2.369984, 3.351039",\ + "1.359961, 1.665297, 1.941449, 2.430732, 3.411788",\ + "1.494672, 1.800008, 2.076160, 2.565444, 3.546499",\ + "1.841180, 2.146517, 2.422668, 2.911952, 3.893008"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.060037, 0.060037, 0.060037, 0.060037, 0.060037",\ + "0.113990, 0.113990, 0.113990, 0.113990, 0.113990",\ + "0.199694, 0.199694, 0.199694, 0.199694, 0.199694",\ + "0.445487, 0.445487, 0.445487, 0.445487, 0.445487",\ + "1.101436, 1.101436, 1.101436, 1.101436, 1.101436",\ + "0.060037, 0.060037, 0.060037, 0.060037, 0.060037",\ + "0.113990, 0.113990, 0.113990, 0.113990, 0.113990",\ + "0.199694, 0.199694, 0.199694, 0.199694, 0.199694",\ + "0.445487, 0.445487, 0.445487, 0.445487, 0.445487",\ + "1.101436, 1.101436, 1.101436, 1.101436, 1.101436",\ + "0.060037, 0.060037, 0.060037, 0.060037, 0.060037",\ + "0.113990, 0.113990, 0.113990, 0.113990, 0.113990",\ + "0.199694, 0.199694, 0.199694, 0.199694, 0.199694",\ + "0.445487, 0.445487, 0.445487, 0.445487, 0.445487",\ + "1.101436, 1.101436, 1.101436, 1.101436, 1.101436",\ + "0.060037, 0.060037, 0.060037, 0.060037, 0.060037",\ + "0.113990, 0.113990, 0.113990, 0.113990, 0.113990",\ + "0.199694, 0.199694, 0.199694, 0.199694, 0.199694",\ + "0.445487, 0.445487, 0.445487, 0.445487, 0.445487",\ + "1.101436, 1.101436, 1.101436, 1.101436, 1.101436",\ + "0.060037, 0.060037, 0.060037, 0.060037, 0.060037",\ + "0.113990, 0.113990, 0.113990, 0.113990, 0.113990",\ + "0.199694, 0.199694, 0.199694, 0.199694, 0.199694",\ + "0.445487, 0.445487, 0.445487, 0.445487, 0.445487",\ + "1.101436, 1.101436, 1.101436, 1.101436, 1.101436"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[4]_redg_2677*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[19]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.619374, 0.887475, 1.180133, 1.686418, 2.698987",\ + "0.666474, 0.934595, 1.227354, 1.733911, 2.747024",\ + "0.753747, 1.021925, 1.314971, 1.822307, 2.836977",\ + "0.979596, 1.247862, 1.541350, 2.049887, 3.066961",\ + "1.546840, 1.815220, 2.109287, 2.619390, 3.639598",\ + "0.706782, 0.975064, 1.267816, 1.773132, 2.784921",\ + "0.753882, 1.022185, 1.315038, 1.820625, 2.832958",\ + "0.841156, 1.109515, 1.402658, 1.909021, 2.922911",\ + "1.067004, 1.335453, 1.629041, 2.136601, 3.152895",\ + "1.634248, 1.902812, 2.196982, 2.706105, 3.725532",\ + "0.790149, 1.064125, 1.355782, 1.860753, 2.871876",\ + "0.837250, 1.111246, 1.403004, 1.908246, 2.919913",\ + "0.924524, 1.198577, 1.490623, 1.996642, 3.009866",\ + "1.150375, 1.424515, 1.717007, 2.224223, 3.239850",\ + "1.717623, 1.991877, 2.284948, 2.793726, 3.812487",\ + "0.853818, 1.129875, 1.419928, 1.924667, 2.935385",\ + "0.900919, 1.176996, 1.467150, 1.972159, 2.983422",\ + "0.988195, 1.264329, 1.554770, 2.060555, 3.073375",\ + "1.214048, 1.490269, 1.781153, 2.288136, 3.303359",\ + "1.781297, 2.057633, 2.349094, 2.857639, 3.875996",\ + "1.190374, 1.495641, 1.772172, 2.274166, 3.280841",\ + "1.237478, 1.542768, 1.819397, 2.321660, 3.328878",\ + "1.324760, 1.630116, 1.907025, 2.410059, 3.418831",\ + "1.550623, 1.856080, 2.133420, 2.637645, 3.648815",\ + "2.117886, 2.423474, 2.701378, 3.207154, 4.221452"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.053871, 0.053928, 0.055014, 0.058545, 0.065606",\ + "0.173261, 0.173221, 0.173020, 0.172475, 0.171386",\ + "0.375447, 0.375353, 0.374960, 0.373952, 0.371937",\ + "0.885472, 0.885429, 0.885258, 0.884858, 0.884057",\ + "2.163064, 2.163128, 2.163351, 2.163842, 2.164825",\ + "0.053871, 0.053928, 0.055025, 0.058545, 0.065606",\ + "0.173261, 0.173221, 0.173019, 0.172475, 0.171386",\ + "0.375447, 0.375352, 0.374957, 0.373952, 0.371937",\ + "0.885472, 0.885428, 0.885257, 0.884858, 0.884057",\ + "2.163064, 2.163129, 2.163352, 2.163842, 2.164825",\ + "0.053872, 0.053929, 0.055025, 0.058545, 0.065606",\ + "0.173260, 0.173220, 0.173019, 0.172475, 0.171386",\ + "0.375444, 0.375351, 0.374957, 0.373952, 0.371937",\ + "0.885472, 0.885428, 0.885257, 0.884858, 0.884057",\ + "2.163065, 2.163130, 2.163352, 2.163842, 2.164825",\ + "0.053873, 0.053930, 0.055026, 0.058545, 0.065606",\ + "0.173259, 0.173219, 0.173019, 0.172475, 0.171386",\ + "0.375442, 0.375349, 0.374957, 0.373952, 0.371937",\ + "0.885471, 0.885427, 0.885257, 0.884858, 0.884057",\ + "2.163066, 2.163132, 2.163352, 2.163842, 2.164825",\ + "0.053880, 0.053946, 0.055062, 0.058559, 0.065606",\ + "0.173255, 0.173209, 0.173013, 0.172473, 0.171386",\ + "0.375432, 0.375324, 0.374946, 0.373948, 0.371937",\ + "0.885469, 0.885413, 0.885253, 0.884856, 0.884057",\ + "2.163070, 2.163151, 2.163357, 2.163844, 2.164825"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.549769, 0.817593, 1.110465, 1.618513, 2.634607",\ + "0.610729, 0.878819, 1.171421, 1.677554, 2.689819",\ + "0.677494, 0.945792, 1.239448, 1.748438, 2.766419",\ + "0.811699, 1.079980, 1.373547, 1.882297, 2.899797",\ + "1.155145, 1.423320, 1.716351, 2.223647, 3.238237",\ + "0.637177, 0.905181, 1.198154, 1.705227, 2.720541",\ + "0.698137, 0.966409, 1.259104, 1.764268, 2.775753",\ + "0.764902, 1.033383, 1.327140, 1.835153, 2.852353",\ + "0.899107, 1.167571, 1.461238, 1.969011, 2.985731",\ + "1.242554, 1.510911, 1.804038, 2.310361, 3.324171",\ + "0.720537, 0.994237, 1.286120, 1.792848, 2.807496",\ + "0.781504, 1.055469, 1.347070, 1.851890, 2.862708",\ + "0.848274, 1.122447, 1.415106, 1.922774, 2.939308",\ + "0.982479, 1.256634, 1.549204, 2.056633, 3.072686",\ + "1.325922, 1.599972, 1.892004, 2.397983, 3.411126",\ + "0.784201, 1.059981, 1.350266, 1.856762, 2.871005",\ + "0.845173, 1.121219, 1.411216, 1.915803, 2.926217",\ + "0.911947, 1.188202, 1.479252, 1.986687, 3.002817",\ + "1.046151, 1.322389, 1.613351, 2.120546, 3.136195",\ + "1.389593, 1.665724, 1.956150, 2.461896, 3.474635",\ + "1.120725, 1.425673, 1.702529, 2.206268, 3.216461",\ + "1.181728, 1.486982, 1.763459, 2.265301, 3.271673",\ + "1.248526, 1.554021, 1.831524, 2.336198, 3.348273",\ + "1.382729, 1.688203, 1.965620, 2.470056, 3.481651",\ + "1.726158, 2.031510, 2.308404, 2.811399, 3.820091"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.071629, 0.072032, 0.074063, 0.079575, 0.090597",\ + "0.129720, 0.130266, 0.133020, 0.140492, 0.155435",\ + "0.214056, 0.214554, 0.217069, 0.223890, 0.237532",\ + "0.447094, 0.447150, 0.447431, 0.448194, 0.449721",\ + "1.100693, 1.100667, 1.100537, 1.100183, 1.099477",\ + "0.071629, 0.072034, 0.074081, 0.079575, 0.090597",\ + "0.129720, 0.130270, 0.133044, 0.140492, 0.155435",\ + "0.214056, 0.214558, 0.217090, 0.223890, 0.237532",\ + "0.447094, 0.447150, 0.447434, 0.448194, 0.449721",\ + "1.100693, 1.100667, 1.100536, 1.100183, 1.099477",\ + "0.071640, 0.072041, 0.074081, 0.079575, 0.090597",\ + "0.129735, 0.130278, 0.133044, 0.140492, 0.155435",\ + "0.214069, 0.214565, 0.217091, 0.223890, 0.237532",\ + "0.447096, 0.447151, 0.447434, 0.448194, 0.449721",\ + "1.100692, 1.100666, 1.100536, 1.100183, 1.099477",\ + "0.071647, 0.072050, 0.074082, 0.079575, 0.090597",\ + "0.129745, 0.130291, 0.133046, 0.140492, 0.155435",\ + "0.214078, 0.214577, 0.217092, 0.223890, 0.237532",\ + "0.447097, 0.447152, 0.447434, 0.448194, 0.449721",\ + "1.100691, 1.100666, 1.100535, 1.100183, 1.099477",\ + "0.071694, 0.072157, 0.074138, 0.079598, 0.090597",\ + "0.129808, 0.130436, 0.133121, 0.140523, 0.155435",\ + "0.214136, 0.214709, 0.217161, 0.223918, 0.237532",\ + "0.447103, 0.447167, 0.447442, 0.448198, 0.449721",\ + "1.100688, 1.100659, 1.100532, 1.100182, 1.099477"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[4]_redg_2675*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[21]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.603037, 0.850281, 1.131477, 1.604469, 2.550452",\ + "0.650138, 0.897409, 1.178701, 1.651927, 2.598380",\ + "0.737413, 0.984763, 1.266326, 1.740225, 2.688022",\ + "0.963264, 1.210735, 1.492718, 1.967654, 2.917526",\ + "1.530512, 1.778140, 2.060669, 2.536958, 3.489536",\ + "0.690439, 0.937872, 1.219053, 1.691182, 2.636385",\ + "0.737540, 0.985001, 1.266277, 1.738640, 2.684314",\ + "0.824816, 1.072355, 1.353904, 1.826938, 2.773956",\ + "1.050667, 1.298328, 1.580299, 2.054367, 3.003459",\ + "1.617915, 1.865734, 2.148256, 2.623672, 3.575470",\ + "0.771264, 1.026907, 1.307016, 1.778803, 2.723340",\ + "0.818366, 1.074036, 1.354240, 1.826261, 2.771269",\ + "0.905641, 1.161391, 1.441867, 1.914558, 2.860911",\ + "1.131493, 1.387366, 1.668262, 2.141988, 3.090415",\ + "1.698741, 1.954774, 2.236218, 2.711293, 3.662425",\ + "0.828931, 1.092619, 1.371156, 1.842715, 2.786849",\ + "0.876032, 1.139748, 1.418380, 1.890174, 2.834778",\ + "0.963308, 1.227105, 1.506008, 1.978471, 2.924420",\ + "1.189160, 1.453082, 1.732403, 2.205900, 3.153924",\ + "1.756409, 2.020493, 2.300359, 2.775205, 3.725934",\ + "1.160146, 1.458017, 1.723059, 2.192071, 3.132305",\ + "1.207253, 1.505153, 1.770286, 2.239531, 3.180234",\ + "1.294543, 1.592528, 1.857920, 2.327831, 3.269876",\ + "1.520419, 1.818533, 2.084326, 2.555264, 3.499380",\ + "2.087698, 2.385982, 2.652296, 3.124575, 4.071390"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.053872, 0.053951, 0.054623, 0.056651, 0.060707",\ + "0.173260, 0.173205, 0.173015, 0.172544, 0.171603",\ + "0.375444, 0.375315, 0.374890, 0.373861, 0.371802",\ + "0.885479, 0.885459, 0.885341, 0.885032, 0.884415",\ + "2.163055, 2.163084, 2.163257, 2.163712, 2.164621",\ + "0.053872, 0.053952, 0.054629, 0.056651, 0.060707",\ + "0.173260, 0.173205, 0.173013, 0.172544, 0.171603",\ + "0.375444, 0.375314, 0.374887, 0.373861, 0.371802",\ + "0.885479, 0.885459, 0.885340, 0.885032, 0.884415",\ + "2.163055, 2.163084, 2.163259, 2.163712, 2.164621",\ + "0.053873, 0.053953, 0.054629, 0.056651, 0.060707",\ + "0.173260, 0.173204, 0.173013, 0.172544, 0.171603",\ + "0.375443, 0.375312, 0.374887, 0.373861, 0.371802",\ + "0.885479, 0.885458, 0.885340, 0.885032, 0.884415",\ + "2.163055, 2.163085, 2.163259, 2.163712, 2.164621",\ + "0.053873, 0.053954, 0.054629, 0.056651, 0.060707",\ + "0.173259, 0.173203, 0.173013, 0.172544, 0.171603",\ + "0.375443, 0.375310, 0.374887, 0.373861, 0.371802",\ + "0.885479, 0.885458, 0.885340, 0.885032, 0.884415",\ + "2.163055, 2.163086, 2.163259, 2.163712, 2.164621",\ + "0.053888, 0.053973, 0.054650, 0.056659, 0.060707",\ + "0.173249, 0.173190, 0.173008, 0.172542, 0.171603",\ + "0.375418, 0.375279, 0.374876, 0.373857, 0.371802",\ + "0.885478, 0.885451, 0.885337, 0.885031, 0.884415",\ + "2.163055, 2.163095, 2.163263, 2.163714, 2.164621"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.533423, 0.780287, 1.060158, 1.529873, 2.469302",\ + "0.594392, 0.841621, 1.122764, 1.595624, 2.541345",\ + "0.661163, 0.908679, 1.190820, 1.666147, 2.616802",\ + "0.795368, 1.042860, 1.324916, 1.800036, 2.750276",\ + "1.138811, 1.386156, 1.667706, 2.141570, 3.089298",\ + "0.620825, 0.867875, 1.147723, 1.616586, 2.555236",\ + "0.681794, 0.929212, 1.210339, 1.682338, 2.627278",\ + "0.748566, 0.996272, 1.278403, 1.752861, 2.702736",\ + "0.882770, 1.130452, 1.412499, 1.886750, 2.836210",\ + "1.226213, 1.473748, 1.755284, 2.228283, 3.175232",\ + "0.701650, 0.956905, 1.235686, 1.704207, 2.642191",\ + "0.762619, 1.018247, 1.298302, 1.769958, 2.714233",\ + "0.829392, 1.085311, 1.366366, 1.840481, 2.789691",\ + "0.963596, 1.219491, 1.500462, 1.974370, 2.923165",\ + "1.307039, 1.562785, 1.843247, 2.315904, 3.262187",\ + "0.759315, 1.022609, 1.299826, 1.768119, 2.705700",\ + "0.820286, 1.083958, 1.362442, 1.833871, 2.777742",\ + "0.887059, 1.151028, 1.430506, 1.904394, 2.853200",\ + "1.021263, 1.285207, 1.564602, 2.038283, 2.986674",\ + "1.364706, 1.628498, 1.907387, 2.379816, 3.325696",\ + "1.090457, 1.387917, 1.651696, 2.117462, 3.051156",\ + "1.151498, 1.449352, 1.714345, 2.183227, 3.123199",\ + "1.218327, 1.516490, 1.782434, 2.253760, 3.198656",\ + "1.352526, 1.650664, 1.916528, 2.387648, 3.332130",\ + "1.695940, 1.993920, 2.259300, 2.729176, 3.671152"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.071642, 0.072195, 0.074119, 0.078878, 0.088395",\ + "0.129738, 0.130488, 0.133096, 0.139547, 0.152449",\ + "0.214072, 0.214757, 0.217138, 0.223027, 0.234806",\ + "0.447096, 0.447173, 0.447439, 0.448098, 0.449416",\ + "1.100692, 1.100656, 1.100533, 1.100228, 1.099618",\ + "0.071642, 0.072199, 0.074134, 0.078878, 0.088395",\ + "0.129738, 0.130493, 0.133116, 0.139547, 0.152449",\ + "0.214072, 0.214761, 0.217156, 0.223027, 0.234806",\ + "0.447096, 0.447173, 0.447441, 0.448098, 0.449416",\ + "1.100692, 1.100656, 1.100532, 1.100228, 1.099618",\ + "0.071643, 0.072206, 0.074135, 0.078878, 0.088395",\ + "0.129740, 0.130503, 0.133117, 0.139547, 0.152449",\ + "0.214073, 0.214770, 0.217157, 0.223027, 0.234806",\ + "0.447096, 0.447174, 0.447441, 0.448098, 0.449416",\ + "1.100692, 1.100656, 1.100532, 1.100228, 1.099618",\ + "0.071645, 0.072218, 0.074135, 0.078878, 0.088395",\ + "0.129742, 0.130518, 0.133118, 0.139547, 0.152449",\ + "0.214076, 0.214784, 0.217158, 0.223027, 0.234806",\ + "0.447096, 0.447176, 0.447441, 0.448098, 0.449416",\ + "1.100692, 1.100655, 1.100532, 1.100228, 1.099618",\ + "0.071752, 0.072348, 0.074184, 0.078897, 0.088395",\ + "0.129887, 0.130696, 0.133183, 0.139574, 0.152449",\ + "0.214208, 0.214946, 0.217217, 0.223052, 0.234806",\ + "0.447111, 0.447194, 0.447448, 0.448101, 0.449416",\ + "1.100685, 1.100646, 1.100529, 1.100227, 1.099618"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[4]_redg_2280*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[23]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.240088, 0.510351, 0.797290, 1.285614, 2.262263",\ + "0.291602, 0.560872, 0.847259, 1.336249, 2.314227",\ + "0.366122, 0.638120, 0.923420, 1.410996, 2.386150",\ + "0.571697, 0.846754, 1.130217, 1.614147, 2.582006",\ + "1.124964, 1.399896, 1.682080, 2.162757, 3.124112",\ + "0.327497, 0.597936, 0.884917, 1.372329, 2.348197",\ + "0.379011, 0.648452, 0.934889, 1.422963, 2.400161",\ + "0.453531, 0.725696, 1.011044, 1.497711, 2.472083",\ + "0.660133, 0.934325, 1.217830, 1.700861, 2.667939",\ + "1.213404, 1.487464, 1.769683, 2.249471, 3.210046",\ + "0.411710, 0.686989, 0.972882, 1.459950, 2.435152",\ + "0.462735, 0.737494, 1.022853, 1.510585, 2.487116",\ + "0.540482, 0.814729, 1.099009, 1.585332, 2.559038",\ + "0.749582, 1.023346, 1.305795, 1.788483, 2.754894",\ + "1.302860, 1.576480, 1.857647, 2.337093, 3.297001",\ + "0.475438, 0.752729, 1.037025, 1.523864, 2.498661",\ + "0.526464, 0.803218, 1.086996, 1.574498, 2.550625",\ + "0.604208, 0.880438, 1.163152, 1.649246, 2.622547",\ + "0.813313, 1.089039, 1.369937, 1.852396, 2.818403",\ + "1.366598, 1.642166, 1.921789, 2.401006, 3.360510",\ + "0.812369, 1.118362, 1.389087, 1.873289, 2.844117",\ + "0.863397, 1.168668, 1.439066, 1.923926, 2.896081",\ + "0.941125, 1.245720, 1.515207, 1.998668, 2.968004",\ + "1.150264, 1.454128, 1.721955, 2.201803, 3.163859",\ + "1.703596, 2.007172, 2.273774, 2.750400, 3.705966"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.247846, 0.302431, 0.404057, 0.594296, 0.974773",\ + "0.313758, 0.345633, 0.434590, 0.626480, 1.010259",\ + "0.435716, 0.458123, 0.529642, 0.703929, 1.052501",\ + "0.888071, 0.889365, 0.917551, 1.014829, 1.209385",\ + "2.165074, 2.165320, 2.171775, 2.192811, 2.234884",\ + "0.247846, 0.302730, 0.404657, 0.594296, 0.974773",\ + "0.313758, 0.345847, 0.435195, 0.626480, 1.010259",\ + "0.435716, 0.458259, 0.530192, 0.703929, 1.052501",\ + "0.888105, 0.889365, 0.917858, 1.014829, 1.209385",\ + "2.165074, 2.165323, 2.171841, 2.192811, 2.234884",\ + "0.250151, 0.303407, 0.404668, 0.594296, 0.974773",\ + "0.314673, 0.346332, 0.435207, 0.626480, 1.010259",\ + "0.436528, 0.458564, 0.530202, 0.703929, 1.052501",\ + "0.888203, 0.889365, 0.917863, 1.014829, 1.209385",\ + "2.165074, 2.165328, 2.171843, 2.192811, 2.234884",\ + "0.251745, 0.304389, 0.404700, 0.594296, 0.974773",\ + "0.315306, 0.347037, 0.435239, 0.626480, 1.010259",\ + "0.437090, 0.459008, 0.530231, 0.703929, 1.052501",\ + "0.888293, 0.889365, 0.917880, 1.014829, 1.209385",\ + "2.165074, 2.165335, 2.171846, 2.192811, 2.234884",\ + "0.261887, 0.315894, 0.406630, 0.595083, 0.974773",\ + "0.319332, 0.355290, 0.437185, 0.627274, 1.010259",\ + "0.440663, 0.464208, 0.531999, 0.704650, 1.052501",\ + "0.888871, 0.889365, 0.918867, 1.015232, 1.209385",\ + "2.165074, 2.165424, 2.172060, 2.192898, 2.234884"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.240635, 0.424668, 0.712248, 1.199722, 2.174669",\ + "0.275706, 0.462604, 0.757879, 1.262184, 2.270793",\ + "0.326245, 0.516372, 0.817019, 1.338091, 2.380235",\ + "0.455748, 0.646142, 0.952035, 1.495042, 2.581054",\ + "0.793588, 0.988001, 1.296787, 1.858775, 2.982751",\ + "0.328044, 0.512258, 0.799873, 1.286436, 2.260602",\ + "0.363115, 0.550213, 0.845556, 1.348898, 2.356727",\ + "0.413654, 0.603984, 0.904750, 1.424805, 2.466169",\ + "0.543157, 0.733746, 1.039835, 1.581756, 2.666988",\ + "0.880997, 1.075589, 1.384646, 1.945489, 3.068685",\ + "0.408911, 0.601324, 0.887837, 1.374058, 2.347558",\ + "0.443982, 0.639320, 0.933522, 1.436520, 2.443682",\ + "0.494519, 0.693099, 0.992716, 1.512427, 2.553124",\ + "0.624023, 0.822845, 1.127803, 1.669378, 2.753943",\ + "0.961862, 1.164649, 1.472615, 2.033111, 3.155640",\ + "0.466595, 0.667083, 0.951980, 1.437971, 2.411067",\ + "0.501666, 0.705138, 0.997668, 1.500433, 2.507191",\ + "0.552202, 0.758927, 1.056865, 1.576340, 2.616633",\ + "0.681705, 0.888650, 1.191955, 1.733291, 2.817452",\ + "1.019543, 1.230399, 1.536770, 2.097024, 3.219149",\ + "0.769432, 1.032936, 1.304034, 1.787393, 2.756523",\ + "0.804503, 1.071688, 1.349892, 1.849925, 2.852647",\ + "0.855021, 1.125605, 1.409260, 1.925902, 2.962089",\ + "0.984519, 1.255053, 1.544572, 2.082943, 3.162908",\ + "1.322350, 1.596157, 1.889580, 2.446754, 3.564605"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.078325, 0.113595, 0.189416, 0.342002, 0.647174",\ + "0.120997, 0.134862, 0.194741, 0.345549, 0.647167",\ + "0.210707, 0.216021, 0.258625, 0.388109, 0.647078",\ + "0.448759, 0.449630, 0.471236, 0.541414, 0.681771",\ + "1.101439, 1.102394, 1.113437, 1.151551, 1.227780",\ + "0.078325, 0.113799, 0.189898, 0.342002, 0.647174",\ + "0.120997, 0.134966, 0.195216, 0.345549, 0.647167",\ + "0.210707, 0.216054, 0.259033, 0.388109, 0.647078",\ + "0.448759, 0.449638, 0.471457, 0.541414, 0.681771",\ + "1.101439, 1.102394, 1.113557, 1.151551, 1.227780",\ + "0.078410, 0.114258, 0.189906, 0.342002, 0.647174",\ + "0.121014, 0.135201, 0.195225, 0.345549, 0.647167",\ + "0.210718, 0.216128, 0.259041, 0.388109, 0.647078",\ + "0.448759, 0.449657, 0.471461, 0.541414, 0.681771",\ + "1.101445, 1.102394, 1.113560, 1.151551, 1.227780",\ + "0.078573, 0.114926, 0.189932, 0.342002, 0.647174",\ + "0.121047, 0.135543, 0.195250, 0.345549, 0.647167",\ + "0.210740, 0.216235, 0.259062, 0.388109, 0.647078",\ + "0.448759, 0.449684, 0.471473, 0.541414, 0.681771",\ + "1.101456, 1.102394, 1.113566, 1.151551, 1.227780",\ + "0.080054, 0.122746, 0.191480, 0.342634, 0.647174",\ + "0.121349, 0.139547, 0.196780, 0.346174, 0.647167",\ + "0.210939, 0.217494, 0.260376, 0.388645, 0.647078",\ + "0.448759, 0.449998, 0.472185, 0.541705, 0.681771",\ + "1.101560, 1.102394, 1.113953, 1.151709, 1.227780"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[4]_redg_2359*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[24]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.197425, 0.431841, 0.691115, 1.132558, 2.015443",\ + "0.256864, 0.482200, 0.742850, 1.186401, 2.073503",\ + "0.340685, 0.558516, 0.820189, 1.263949, 2.151470",\ + "0.552702, 0.766228, 1.030335, 1.473577, 2.360062",\ + "1.106653, 1.318570, 1.585965, 2.032625, 2.925946",\ + "0.284828, 0.519347, 0.778592, 1.219271, 2.101377",\ + "0.344267, 0.569712, 0.830334, 1.273115, 2.159437",\ + "0.428088, 0.646034, 0.907673, 1.350662, 2.237404",\ + "0.640105, 0.853764, 1.117818, 1.560291, 2.445995",\ + "1.194056, 1.406120, 1.673459, 2.119339, 3.011880",\ + "0.365631, 0.608197, 0.866553, 1.306892, 2.188332",\ + "0.425081, 0.658572, 0.918295, 1.360735, 2.246392",\ + "0.508910, 0.734909, 0.995634, 1.438283, 2.324359",\ + "0.720937, 0.942676, 1.205779, 1.647911, 2.532950",\ + "1.274892, 1.495066, 1.761420, 2.206959, 3.098835",\ + "0.423252, 0.673639, 0.930688, 1.370805, 2.251841",\ + "0.482725, 0.724031, 0.982430, 1.424648, 2.309901",\ + "0.566569, 0.800388, 1.059769, 1.502196, 2.387868",\ + "0.778616, 1.008210, 1.269914, 1.711824, 2.596459",\ + "1.332580, 1.560649, 1.825555, 2.270872, 3.162344",\ + "0.752151, 1.035876, 1.282272, 1.720031, 2.597297",\ + "0.801570, 1.086457, 1.334035, 1.773883, 2.655357",\ + "0.877150, 1.163054, 1.411376, 1.851432, 2.733324",\ + "1.083205, 1.371523, 1.621516, 2.061058, 2.941916",\ + "1.635753, 1.924533, 2.177192, 2.620120, 3.507800"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.177313, 0.213491, 0.303378, 0.457569, 0.765950",\ + "0.250045, 0.279673, 0.356803, 0.520196, 0.846983",\ + "0.414565, 0.415724, 0.459633, 0.603345, 0.890769",\ + "0.887843, 0.887860, 0.923876, 1.046142, 1.290675",\ + "2.163223, 2.163223, 2.177277, 2.225018, 2.320500",\ + "0.177313, 0.213790, 0.303862, 0.457569, 0.765950",\ + "0.250045, 0.279868, 0.357315, 0.520196, 0.846983",\ + "0.414565, 0.415735, 0.460084, 0.603345, 0.890769",\ + "0.887843, 0.887860, 0.924259, 1.046142, 1.290675",\ + "2.163223, 2.163223, 2.177427, 2.225018, 2.320500",\ + "0.177336, 0.214442, 0.303871, 0.457569, 0.765950",\ + "0.250094, 0.280294, 0.357324, 0.520196, 0.846983",\ + "0.414565, 0.415758, 0.460092, 0.603345, 0.890769",\ + "0.887843, 0.887860, 0.924267, 1.046142, 1.290675",\ + "2.163223, 2.163223, 2.177430, 2.225018, 2.320500",\ + "0.177382, 0.215390, 0.303897, 0.457569, 0.765950",\ + "0.250194, 0.280912, 0.357352, 0.520196, 0.846983",\ + "0.414565, 0.415792, 0.460117, 0.603345, 0.890769",\ + "0.887843, 0.887860, 0.924288, 1.046142, 1.290675",\ + "2.163223, 2.163223, 2.177438, 2.225018, 2.320500",\ + "0.179822, 0.226518, 0.305460, 0.458204, 0.765950",\ + "0.255479, 0.288172, 0.359009, 0.520869, 0.846983",\ + "0.414565, 0.416193, 0.461574, 0.603937, 0.890769",\ + "0.887843, 0.887866, 0.925527, 1.046646, 1.290675",\ + "2.163223, 2.163223, 2.177922, 2.225215, 2.320500"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.186404, 0.372214, 0.626375, 1.055893, 1.914929",\ + "0.215796, 0.420104, 0.691914, 1.154775, 2.080498",\ + "0.262340, 0.480772, 0.763179, 1.249218, 2.221297",\ + "0.391105, 0.611507, 0.905161, 1.430325, 2.480653",\ + "0.735355, 0.947201, 1.248974, 1.808736, 2.928262",\ + "0.273807, 0.459710, 0.713814, 1.142606, 2.000863",\ + "0.303199, 0.507653, 0.779458, 1.241489, 2.166432",\ + "0.349742, 0.568345, 0.850795, 1.335931, 2.307231",\ + "0.478508, 0.699079, 0.992901, 1.517038, 2.566586",\ + "0.822757, 1.034759, 1.336822, 1.895450, 3.014196",\ + "0.354668, 0.548536, 0.801774, 1.230227, 2.087818",\ + "0.384060, 0.596593, 0.867420, 1.329109, 2.253387",\ + "0.430602, 0.657342, 0.938759, 1.423552, 2.394186",\ + "0.559360, 0.788071, 1.080866, 1.604659, 2.653542",\ + "0.903600, 1.123721, 1.424789, 1.983071, 3.101151",\ + "0.412406, 0.613944, 0.865907, 1.294139, 2.151327",\ + "0.441797, 0.662169, 0.931558, 1.393022, 2.316896",\ + "0.488337, 0.722997, 1.002901, 1.487465, 2.457695",\ + "0.617079, 0.853721, 1.145016, 1.668572, 2.717051",\ + "0.961302, 1.189327, 1.488945, 2.046983, 3.164660",\ + "0.716048, 0.975780, 1.217370, 1.643317, 2.496783",\ + "0.745435, 1.025964, 1.283359, 1.742337, 2.662352",\ + "0.795621, 1.087736, 1.354937, 1.836875, 2.803151",\ + "0.926531, 1.218392, 1.497448, 2.018143, 3.062507",\ + "1.264602, 1.553481, 1.841728, 2.396697, 3.510116"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.071183, 0.106867, 0.175274, 0.296411, 0.538686",\ + "0.120882, 0.144922, 0.213025, 0.350085, 0.624205",\ + "0.200934, 0.210784, 0.256174, 0.378831, 0.624145",\ + "0.444933, 0.444933, 0.478341, 0.591820, 0.818777",\ + "1.101084, 1.102468, 1.122484, 1.190474, 1.326455",\ + "0.071183, 0.107086, 0.175654, 0.296411, 0.538686",\ + "0.120882, 0.145109, 0.213454, 0.350085, 0.624205",\ + "0.200934, 0.210847, 0.256559, 0.378831, 0.624145",\ + "0.444933, 0.444933, 0.478697, 0.591820, 0.818777",\ + "1.101084, 1.102468, 1.122697, 1.190474, 1.326455",\ + "0.071251, 0.107567, 0.175661, 0.296411, 0.538686",\ + "0.120905, 0.145516, 0.213462, 0.350085, 0.624205",\ + "0.200952, 0.210983, 0.256566, 0.378831, 0.624145",\ + "0.444933, 0.444933, 0.478703, 0.591820, 0.818777",\ + "1.101092, 1.102468, 1.122701, 1.190474, 1.326455",\ + "0.071390, 0.108264, 0.175682, 0.296411, 0.538686",\ + "0.120951, 0.146107, 0.213486, 0.350085, 0.624205",\ + "0.200988, 0.211181, 0.256587, 0.378831, 0.624145",\ + "0.444933, 0.444933, 0.478723, 0.591820, 0.818777",\ + "1.101108, 1.102468, 1.122713, 1.190474, 1.326455",\ + "0.072681, 0.116454, 0.176910, 0.296910, 0.538686",\ + "0.121377, 0.153048, 0.214875, 0.350649, 0.624205",\ + "0.202909, 0.213502, 0.257831, 0.379336, 0.624145",\ + "0.444933, 0.444933, 0.479873, 0.592287, 0.818777",\ + "1.101257, 1.102468, 1.123402, 1.190754, 1.326455"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[4]_redg_2411*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[27]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.553758, 0.808668, 1.064878, 1.505326, 2.386221",\ + "0.599911, 0.854821, 1.111032, 1.551482, 2.432382",\ + "0.684215, 0.939125, 1.195335, 1.635783, 2.516678",\ + "0.905378, 1.160288, 1.416497, 1.856937, 2.737819",\ + "1.466255, 1.721165, 1.977368, 2.417791, 3.298636",\ + "0.641291, 0.896159, 1.152351, 1.592039, 2.472155",\ + "0.687444, 0.942312, 1.198505, 1.638195, 2.518316",\ + "0.771748, 1.026616, 1.282809, 1.722496, 2.602612",\ + "0.992912, 1.247780, 1.503970, 1.943650, 2.823752",\ + "1.553789, 1.808657, 2.064841, 2.504504, 3.384570",\ + "0.730669, 0.984969, 1.240312, 1.679659, 2.559110",\ + "0.776822, 1.031122, 1.286465, 1.725815, 2.605271",\ + "0.861126, 1.115426, 1.370769, 1.810116, 2.689567",\ + "1.082289, 1.336589, 1.591930, 2.031271, 2.910707",\ + "1.643166, 1.897466, 2.152802, 2.592124, 3.471525",\ + "0.794611, 1.050352, 1.304446, 1.743572, 2.622619",\ + "0.840764, 1.096505, 1.350600, 1.789728, 2.668780",\ + "0.925068, 1.180809, 1.434903, 1.874029, 2.753076",\ + "1.146232, 1.401973, 1.656065, 2.095183, 2.974216",\ + "1.707109, 1.962849, 2.216936, 2.656037, 3.535034",\ + "1.132859, 1.411925, 1.656019, 2.092792, 2.968075",\ + "1.179013, 1.458078, 1.702173, 2.138948, 3.014236",\ + "1.263317, 1.542382, 1.786476, 2.223249, 3.098532",\ + "1.484480, 1.763546, 2.007637, 2.444404, 3.319673",\ + "2.045357, 2.324422, 2.568509, 3.005257, 3.880490"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.051937, 0.051937, 0.051947, 0.051981, 0.052048",\ + "0.176967, 0.176967, 0.176984, 0.177041, 0.177156",\ + "0.380998, 0.380998, 0.381005, 0.381032, 0.381085",\ + "0.885970, 0.885970, 0.885970, 0.885970, 0.885971",\ + "2.162331, 2.162331, 2.162331, 2.162331, 2.162330",\ + "0.051937, 0.051937, 0.051947, 0.051981, 0.052048",\ + "0.176967, 0.176967, 0.176984, 0.177041, 0.177156",\ + "0.380998, 0.380998, 0.381006, 0.381032, 0.381085",\ + "0.885970, 0.885970, 0.885970, 0.885970, 0.885971",\ + "2.162331, 2.162331, 2.162331, 2.162331, 2.162330",\ + "0.051937, 0.051937, 0.051947, 0.051981, 0.052048",\ + "0.176967, 0.176967, 0.176984, 0.177041, 0.177156",\ + "0.380998, 0.380998, 0.381006, 0.381032, 0.381085",\ + "0.885970, 0.885970, 0.885970, 0.885970, 0.885971",\ + "2.162331, 2.162331, 2.162331, 2.162331, 2.162330",\ + "0.051937, 0.051937, 0.051947, 0.051981, 0.052048",\ + "0.176967, 0.176967, 0.176984, 0.177041, 0.177156",\ + "0.380998, 0.380998, 0.381006, 0.381032, 0.381085",\ + "0.885970, 0.885970, 0.885970, 0.885970, 0.885971",\ + "2.162331, 2.162331, 2.162331, 2.162331, 2.162330",\ + "0.051937, 0.051937, 0.051947, 0.051981, 0.052048",\ + "0.176967, 0.176967, 0.176985, 0.177042, 0.177156",\ + "0.380998, 0.380998, 0.381006, 0.381032, 0.381085",\ + "0.885970, 0.885970, 0.885970, 0.885970, 0.885971",\ + "2.162331, 2.162331, 2.162331, 2.162331, 2.162330"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.540267, 0.795177, 1.050726, 1.488938, 2.365363",\ + "0.562618, 0.817528, 1.073077, 1.511289, 2.387713",\ + "0.603939, 0.858848, 1.114838, 1.554540, 2.433944",\ + "0.736907, 0.991817, 1.248027, 1.688475, 2.569372",\ + "1.086012, 1.340922, 1.597135, 2.037591, 2.918504",\ + "0.627801, 0.882669, 1.138192, 1.575651, 2.451297",\ + "0.650152, 0.905020, 1.160543, 1.598002, 2.473647",\ + "0.691472, 0.946340, 1.202309, 1.641253, 2.519878",\ + "0.824440, 1.079308, 1.335500, 1.775188, 2.655306",\ + "1.173546, 1.428414, 1.684608, 2.124305, 3.004438",\ + "0.717178, 0.971478, 1.226152, 1.663272, 2.538252",\ + "0.739529, 0.993829, 1.248503, 1.685622, 2.560602",\ + "0.780849, 1.035149, 1.290269, 1.728874, 2.606833",\ + "0.913818, 1.168118, 1.423461, 1.862809, 2.742261",\ + "1.262923, 1.517223, 1.772569, 2.211925, 3.091393",\ + "0.781121, 1.036862, 1.290286, 1.727184, 2.601761",\ + "0.803471, 1.059212, 1.312637, 1.749535, 2.624111",\ + "0.844792, 1.100533, 1.354404, 1.792786, 2.670342",\ + "0.977760, 1.233501, 1.487595, 1.926721, 2.805770",\ + "1.326866, 1.582607, 1.836703, 2.275837, 3.154902",\ + "1.119369, 1.398434, 1.641836, 2.076395, 2.947217",\ + "1.141720, 1.420785, 1.664187, 2.098746, 2.969567",\ + "1.183040, 1.462106, 1.705969, 2.142004, 3.015798",\ + "1.316008, 1.595074, 1.839168, 2.275942, 3.151226",\ + "1.665114, 1.944180, 2.188276, 2.625058, 3.500358"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.048201, 0.048201, 0.048170, 0.048066, 0.047859",\ + "0.098620, 0.098620, 0.098587, 0.098478, 0.098260",\ + "0.188783, 0.188783, 0.188784, 0.188790, 0.188801",\ + "0.444126, 0.444126, 0.444125, 0.444121, 0.444113",\ + "1.101816, 1.101816, 1.101814, 1.101807, 1.101794",\ + "0.048201, 0.048201, 0.048170, 0.048066, 0.047859",\ + "0.098620, 0.098620, 0.098587, 0.098478, 0.098260",\ + "0.188783, 0.188783, 0.188784, 0.188790, 0.188801",\ + "0.444126, 0.444126, 0.444125, 0.444121, 0.444113",\ + "1.101816, 1.101816, 1.101814, 1.101807, 1.101794",\ + "0.048201, 0.048201, 0.048170, 0.048066, 0.047859",\ + "0.098620, 0.098620, 0.098587, 0.098478, 0.098260",\ + "0.188783, 0.188783, 0.188784, 0.188790, 0.188801",\ + "0.444126, 0.444126, 0.444125, 0.444121, 0.444113",\ + "1.101816, 1.101816, 1.101814, 1.101807, 1.101794",\ + "0.048201, 0.048201, 0.048170, 0.048066, 0.047859",\ + "0.098620, 0.098620, 0.098587, 0.098478, 0.098260",\ + "0.188783, 0.188783, 0.188784, 0.188790, 0.188801",\ + "0.444126, 0.444126, 0.444125, 0.444121, 0.444113",\ + "1.101816, 1.101816, 1.101814, 1.101807, 1.101794",\ + "0.048201, 0.048201, 0.048169, 0.048066, 0.047859",\ + "0.098620, 0.098620, 0.098586, 0.098478, 0.098260",\ + "0.188783, 0.188783, 0.188784, 0.188790, 0.188801",\ + "0.444126, 0.444126, 0.444125, 0.444121, 0.444113",\ + "1.101816, 1.101816, 1.101814, 1.101807, 1.101794"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[4]_redg_2563*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[31]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.525875, 0.768087, 1.036195, 1.520933, 2.490408",\ + "0.572028, 0.814241, 1.082351, 1.567096, 2.536584",\ + "0.656332, 0.898544, 1.166652, 1.651390, 2.620866",\ + "0.877495, 1.119706, 1.387806, 1.872524, 2.841960",\ + "1.438372, 1.680579, 1.948659, 2.433326, 3.402659",\ + "0.613284, 0.855558, 1.123811, 1.607647, 2.576342",\ + "0.659437, 0.901712, 1.169967, 1.653810, 2.622518",\ + "0.743741, 0.986015, 1.254268, 1.738104, 2.706800",\ + "0.964904, 1.207177, 1.475422, 1.959238, 2.927894",\ + "1.525780, 1.768050, 2.036275, 2.520041, 3.488593",\ + "0.694098, 0.944352, 1.211775, 1.695269, 2.663297",\ + "0.740251, 0.990506, 1.257931, 1.741431, 2.709473",\ + "0.824555, 1.074809, 1.342232, 1.825726, 2.793755",\ + "1.045718, 1.295971, 1.563386, 2.046860, 3.014849",\ + "1.606595, 1.856844, 2.124239, 2.607662, 3.575548",\ + "0.752011, 1.009716, 1.275917, 1.759182, 2.726806",\ + "0.798164, 1.055869, 1.322073, 1.805345, 2.772982",\ + "0.882468, 1.140173, 1.406374, 1.889639, 2.857264",\ + "1.103631, 1.361335, 1.627528, 2.110773, 3.078358",\ + "1.664508, 1.922208, 2.188382, 2.671575, 3.639057",\ + "1.085549, 1.370949, 1.627944, 2.108593, 3.072262",\ + "1.131702, 1.417103, 1.674100, 2.154755, 3.118438",\ + "1.216006, 1.501406, 1.758401, 2.239050, 3.202720",\ + "1.437170, 1.722567, 1.979555, 2.460184, 3.423814",\ + "1.998046, 2.283439, 2.540407, 3.020985, 3.984513"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.051938, 0.051944, 0.051982, 0.052078, 0.052272",\ + "0.176969, 0.176980, 0.177043, 0.177207, 0.177534",\ + "0.380998, 0.381003, 0.381033, 0.381108, 0.381260",\ + "0.885971, 0.885971, 0.885971, 0.885974, 0.885979",\ + "2.162331, 2.162331, 2.162331, 2.162331, 2.162331",\ + "0.051938, 0.051944, 0.051982, 0.052078, 0.052272",\ + "0.176969, 0.176980, 0.177044, 0.177207, 0.177534",\ + "0.380998, 0.381004, 0.381033, 0.381108, 0.381260",\ + "0.885971, 0.885971, 0.885971, 0.885974, 0.885979",\ + "2.162331, 2.162331, 2.162331, 2.162331, 2.162331",\ + "0.051938, 0.051945, 0.051982, 0.052078, 0.052272",\ + "0.176969, 0.176980, 0.177044, 0.177207, 0.177534",\ + "0.380998, 0.381004, 0.381033, 0.381108, 0.381260",\ + "0.885971, 0.885971, 0.885971, 0.885974, 0.885979",\ + "2.162331, 2.162331, 2.162331, 2.162331, 2.162331",\ + "0.051938, 0.051945, 0.051982, 0.052078, 0.052272",\ + "0.176969, 0.176981, 0.177044, 0.177207, 0.177534",\ + "0.380998, 0.381004, 0.381033, 0.381108, 0.381260",\ + "0.885971, 0.885971, 0.885971, 0.885974, 0.885979",\ + "2.162331, 2.162331, 2.162331, 2.162331, 2.162331",\ + "0.051938, 0.051947, 0.051983, 0.052079, 0.052272",\ + "0.176969, 0.176984, 0.177045, 0.177208, 0.177534",\ + "0.380998, 0.381006, 0.381034, 0.381109, 0.381260",\ + "0.885971, 0.885971, 0.885972, 0.885974, 0.885979",\ + "2.162331, 2.162331, 2.162331, 2.162331, 2.162331"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.512519, 0.754762, 1.019445, 1.492217, 2.437761",\ + "0.534869, 0.777112, 1.043739, 1.523217, 2.482171",\ + "0.576190, 0.818433, 1.086345, 1.570253, 2.538069",\ + "0.709024, 0.951236, 1.219345, 1.704084, 2.673563",\ + "1.058130, 1.300344, 1.568461, 2.053223, 3.022748",\ + "0.599927, 0.842233, 1.107023, 1.578931, 2.523695",\ + "0.622278, 0.864583, 1.131338, 1.609931, 2.568105",\ + "0.663599, 0.905904, 1.173958, 1.656967, 2.624003",\ + "0.796432, 1.038707, 1.306960, 1.790798, 2.759497",\ + "1.145538, 1.387814, 1.656077, 2.139938, 3.108682",\ + "0.680742, 0.931028, 1.194987, 1.666553, 2.610650",\ + "0.703093, 0.953378, 1.219303, 1.697553, 2.655060",\ + "0.744413, 0.994699, 1.261922, 1.744589, 2.710958",\ + "0.877247, 1.127501, 1.394925, 1.878420, 2.846452",\ + "1.226353, 1.476609, 1.744041, 2.227559, 3.195637",\ + "0.738655, 0.996392, 1.259127, 1.730466, 2.674159",\ + "0.761006, 1.018743, 1.283444, 1.761466, 2.718569",\ + "0.802326, 1.060063, 1.326064, 1.808502, 2.774467",\ + "0.935160, 1.192865, 1.459067, 1.942333, 2.909961",\ + "1.284266, 1.541972, 1.808183, 2.291472, 3.259146",\ + "1.072193, 1.357636, 1.611032, 2.079827, 3.019615",\ + "1.094544, 1.379987, 1.635417, 2.110855, 3.064025",\ + "1.135864, 1.421307, 1.678082, 2.157909, 3.119923",\ + "1.268698, 1.554098, 1.811093, 2.291744, 3.255417",\ + "1.617804, 1.903206, 2.160210, 2.640883, 3.604602"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.048198, 0.048178, 0.048063, 0.047766, 0.047172",\ + "0.098616, 0.098596, 0.098475, 0.098162, 0.097537",\ + "0.188783, 0.188784, 0.188790, 0.188806, 0.188837",\ + "0.444126, 0.444125, 0.444121, 0.444109, 0.444085",\ + "1.101815, 1.101814, 1.101807, 1.101788, 1.101750",\ + "0.048198, 0.048178, 0.048062, 0.047766, 0.047172",\ + "0.098616, 0.098596, 0.098474, 0.098162, 0.097537",\ + "0.188783, 0.188784, 0.188790, 0.188806, 0.188837",\ + "0.444126, 0.444125, 0.444121, 0.444109, 0.444085",\ + "1.101815, 1.101814, 1.101807, 1.101788, 1.101750",\ + "0.048198, 0.048177, 0.048062, 0.047766, 0.047172",\ + "0.098616, 0.098595, 0.098474, 0.098162, 0.097537",\ + "0.188783, 0.188784, 0.188790, 0.188806, 0.188837",\ + "0.444126, 0.444125, 0.444121, 0.444109, 0.444085",\ + "1.101815, 1.101814, 1.101807, 1.101788, 1.101750",\ + "0.048198, 0.048177, 0.048062, 0.047766, 0.047172",\ + "0.098616, 0.098594, 0.098474, 0.098162, 0.097537",\ + "0.188783, 0.188784, 0.188790, 0.188806, 0.188837",\ + "0.444126, 0.444125, 0.444121, 0.444109, 0.444085",\ + "1.101815, 1.101814, 1.101807, 1.101788, 1.101750",\ + "0.048198, 0.048170, 0.048059, 0.047765, 0.047172",\ + "0.098616, 0.098587, 0.098471, 0.098161, 0.097537",\ + "0.188783, 0.188784, 0.188790, 0.188806, 0.188837",\ + "0.444126, 0.444125, 0.444121, 0.444109, 0.444085",\ + "1.101815, 1.101814, 1.101807, 1.101788, 1.101750"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[4]_redg*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[32]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.659689, 0.901731, 1.166165, 1.640730, 2.589860",\ + "0.706217, 0.948259, 1.212695, 1.687267, 2.636411",\ + "0.791853, 1.033895, 1.298337, 1.772929, 2.722115",\ + "1.015175, 1.257217, 1.521667, 1.996292, 2.945540",\ + "1.579124, 1.821166, 2.085628, 2.560294, 3.509625",\ + "0.747090, 0.989208, 1.253745, 1.727443, 2.675794",\ + "0.793618, 1.035736, 1.300275, 1.773980, 2.722345",\ + "0.879254, 1.121372, 1.385917, 1.859643, 2.808049",\ + "1.102576, 1.344694, 1.609248, 2.083005, 3.031474",\ + "1.666525, 1.908643, 2.173209, 2.647007, 3.595559",\ + "0.827897, 1.077990, 1.341708, 1.815064, 2.762749",\ + "0.874425, 1.124518, 1.388238, 1.861601, 2.809300",\ + "0.960061, 1.210154, 1.473880, 1.947263, 2.895004",\ + "1.183383, 1.433476, 1.697210, 2.170625, 3.118429",\ + "1.747332, 1.997425, 2.261171, 2.734627, 3.682514",\ + "0.888137, 1.143334, 1.405848, 1.878976, 2.826258",\ + "0.934665, 1.189862, 1.452378, 1.925513, 2.872809",\ + "1.020301, 1.275498, 1.538020, 2.011176, 2.958513",\ + "1.243623, 1.498820, 1.761351, 2.234538, 3.181938",\ + "1.807572, 2.062769, 2.325312, 2.798540, 3.746023",\ + "1.226031, 1.504429, 1.757767, 2.228338, 3.171714",\ + "1.272558, 1.550957, 1.804297, 2.274875, 3.218265",\ + "1.358195, 1.636593, 1.889939, 2.360538, 3.303969",\ + "1.581517, 1.859915, 2.113271, 2.583900, 3.527394",\ + "2.145466, 2.423864, 2.677232, 3.147902, 4.091479"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.052222, 0.052222, 0.052228, 0.052249, 0.052290",\ + "0.174407, 0.174407, 0.174407, 0.174407, 0.174407",\ + "0.378141, 0.378141, 0.378141, 0.378141, 0.378141",\ + "0.885509, 0.885509, 0.885509, 0.885509, 0.885509",\ + "2.163010, 2.163011, 2.163015, 2.163025, 2.163045",\ + "0.052222, 0.052222, 0.052228, 0.052249, 0.052290",\ + "0.174407, 0.174407, 0.174407, 0.174407, 0.174407",\ + "0.378141, 0.378141, 0.378141, 0.378141, 0.378141",\ + "0.885509, 0.885509, 0.885509, 0.885509, 0.885509",\ + "2.163010, 2.163011, 2.163015, 2.163025, 2.163045",\ + "0.052222, 0.052222, 0.052228, 0.052249, 0.052290",\ + "0.174407, 0.174407, 0.174407, 0.174407, 0.174407",\ + "0.378141, 0.378141, 0.378141, 0.378141, 0.378141",\ + "0.885509, 0.885509, 0.885509, 0.885509, 0.885509",\ + "2.163010, 2.163011, 2.163015, 2.163025, 2.163045",\ + "0.052222, 0.052222, 0.052228, 0.052249, 0.052290",\ + "0.174407, 0.174407, 0.174407, 0.174407, 0.174407",\ + "0.378141, 0.378141, 0.378141, 0.378141, 0.378141",\ + "0.885509, 0.885509, 0.885509, 0.885509, 0.885509",\ + "2.163010, 2.163011, 2.163015, 2.163025, 2.163045",\ + "0.052222, 0.052222, 0.052229, 0.052249, 0.052290",\ + "0.174407, 0.174407, 0.174407, 0.174407, 0.174407",\ + "0.378141, 0.378141, 0.378141, 0.378141, 0.378141",\ + "0.885509, 0.885509, 0.885509, 0.885509, 0.885509",\ + "2.163010, 2.163011, 2.163015, 2.163025, 2.163045"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.598065, 0.840108, 1.104513, 1.578978, 2.527908",\ + "0.651364, 0.893406, 1.157839, 1.632400, 2.581522",\ + "0.712119, 0.954162, 1.218616, 1.693252, 2.642524",\ + "0.846830, 1.088872, 1.353324, 1.827954, 2.777214",\ + "1.193335, 1.435377, 1.699819, 2.174410, 3.123593",\ + "0.685466, 0.927585, 1.192093, 1.665691, 2.613842",\ + "0.738765, 0.980883, 1.245419, 1.719113, 2.667456",\ + "0.799521, 1.041639, 1.306196, 1.779965, 2.728458",\ + "0.934231, 1.176349, 1.440905, 1.914667, 2.863148",\ + "1.280736, 1.522854, 1.787399, 2.261123, 3.209527",\ + "0.766273, 1.016367, 1.280056, 1.753312, 2.700797",\ + "0.819572, 1.069665, 1.333382, 1.806733, 2.754411",\ + "0.880328, 1.130420, 1.394158, 1.867585, 2.815413",\ + "1.015038, 1.265131, 1.528867, 2.002288, 2.950103",\ + "1.361543, 1.611636, 1.875361, 2.348744, 3.296482",\ + "0.826513, 1.081711, 1.344196, 1.817225, 2.764306",\ + "0.879812, 1.135009, 1.397522, 1.870646, 2.817920",\ + "0.940568, 1.195765, 1.458299, 1.931498, 2.878922",\ + "1.075278, 1.330475, 1.593008, 2.066200, 3.013612",\ + "1.421783, 1.676980, 1.939502, 2.412656, 3.359991",\ + "1.164407, 1.442806, 1.696114, 2.166586, 3.109762",\ + "1.217705, 1.496104, 1.749441, 2.220008, 3.163376",\ + "1.278461, 1.556859, 1.810219, 2.280860, 3.224378",\ + "1.413172, 1.691570, 1.944927, 2.415563, 3.359068",\ + "1.759677, 2.038075, 2.291421, 2.762018, 3.705447"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.060051, 0.060051, 0.060093, 0.060235, 0.060520",\ + "0.114009, 0.114009, 0.114066, 0.114262, 0.114654",\ + "0.199711, 0.199711, 0.199764, 0.199943, 0.200301",\ + "0.445489, 0.445489, 0.445495, 0.445515, 0.445555",\ + "1.101435, 1.101435, 1.101435, 1.101435, 1.101435",\ + "0.060051, 0.060051, 0.060094, 0.060235, 0.060520",\ + "0.114009, 0.114009, 0.114067, 0.114262, 0.114654",\ + "0.199711, 0.199711, 0.199765, 0.199943, 0.200301",\ + "0.445489, 0.445489, 0.445495, 0.445515, 0.445555",\ + "1.101435, 1.101435, 1.101435, 1.101435, 1.101435",\ + "0.060051, 0.060051, 0.060094, 0.060235, 0.060520",\ + "0.114009, 0.114009, 0.114067, 0.114262, 0.114654",\ + "0.199711, 0.199711, 0.199765, 0.199943, 0.200301",\ + "0.445489, 0.445489, 0.445495, 0.445515, 0.445555",\ + "1.101435, 1.101435, 1.101435, 1.101435, 1.101435",\ + "0.060051, 0.060051, 0.060094, 0.060235, 0.060520",\ + "0.114009, 0.114009, 0.114067, 0.114262, 0.114654",\ + "0.199711, 0.199711, 0.199765, 0.199943, 0.200301",\ + "0.445489, 0.445489, 0.445495, 0.445515, 0.445555",\ + "1.101435, 1.101435, 1.101435, 1.101435, 1.101435",\ + "0.060051, 0.060051, 0.060095, 0.060236, 0.060520",\ + "0.114009, 0.114009, 0.114069, 0.114263, 0.114654",\ + "0.199711, 0.199711, 0.199767, 0.199944, 0.200301",\ + "0.445489, 0.445489, 0.445496, 0.445515, 0.445555",\ + "1.101435, 1.101435, 1.101435, 1.101435, 1.101435"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[4]_redg_2315*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[34]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.689570, 0.955359, 1.243359, 1.733584, 2.714034",\ + "0.735723, 1.001512, 1.289513, 1.779738, 2.760189",\ + "0.820027, 1.085816, 1.373816, 1.864041, 2.844491",\ + "1.041190, 1.306978, 1.594979, 2.085202, 3.065649",\ + "1.602065, 1.867854, 2.155853, 2.646073, 3.626513",\ + "0.776981, 1.042942, 1.330993, 1.820299, 2.799968",\ + "0.823135, 1.089095, 1.377147, 1.866453, 2.846122",\ + "0.907439, 1.173399, 1.461450, 1.950756, 2.930425",\ + "1.128601, 1.394562, 1.682613, 2.171917, 3.151583",\ + "1.689477, 1.955437, 2.243487, 2.732788, 3.712447",\ + "0.857898, 1.132003, 1.418959, 1.907921, 2.886923",\ + "0.904051, 1.178156, 1.465112, 1.954075, 2.933077",\ + "0.988355, 1.262460, 1.549416, 2.038378, 3.017380",\ + "1.209518, 1.483622, 1.770578, 2.259539, 3.238538",\ + "1.770393, 2.044498, 2.331453, 2.820410, 3.799402",\ + "0.918904, 1.197754, 1.483102, 1.971834, 2.950432",\ + "0.965057, 1.243907, 1.529255, 2.017988, 2.996586",\ + "1.049361, 1.328211, 1.613559, 2.102291, 3.080889",\ + "1.270524, 1.549374, 1.834721, 2.323452, 3.302047",\ + "1.831399, 2.110249, 2.395596, 2.884323, 3.862911",\ + "1.254896, 1.563490, 1.835185, 2.321270, 3.295888",\ + "1.301049, 1.609643, 1.881339, 2.367424, 3.342042",\ + "1.385353, 1.693947, 1.965642, 2.451727, 3.426345",\ + "1.606516, 1.915110, 2.186805, 2.672888, 3.647503",\ + "2.167391, 2.475986, 2.747679, 3.233759, 4.208367"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.051940, 0.051940, 0.051942, 0.051949, 0.051962",\ + "0.176972, 0.176972, 0.176976, 0.176987, 0.177010",\ + "0.381000, 0.381000, 0.381002, 0.381007, 0.381017",\ + "0.885971, 0.885971, 0.885971, 0.885971, 0.885971",\ + "2.162330, 2.162330, 2.162330, 2.162330, 2.162330",\ + "0.051940, 0.051940, 0.051942, 0.051949, 0.051962",\ + "0.176972, 0.176972, 0.176976, 0.176987, 0.177010",\ + "0.381000, 0.381000, 0.381002, 0.381007, 0.381017",\ + "0.885971, 0.885971, 0.885971, 0.885971, 0.885971",\ + "2.162330, 2.162330, 2.162330, 2.162330, 2.162330",\ + "0.051940, 0.051940, 0.051942, 0.051949, 0.051962",\ + "0.176972, 0.176972, 0.176976, 0.176987, 0.177010",\ + "0.381000, 0.381000, 0.381002, 0.381007, 0.381017",\ + "0.885971, 0.885971, 0.885971, 0.885971, 0.885971",\ + "2.162330, 2.162330, 2.162330, 2.162330, 2.162330",\ + "0.051940, 0.051940, 0.051942, 0.051949, 0.051962",\ + "0.176972, 0.176972, 0.176976, 0.176987, 0.177010",\ + "0.381000, 0.381000, 0.381002, 0.381007, 0.381017",\ + "0.885971, 0.885971, 0.885971, 0.885971, 0.885971",\ + "2.162330, 2.162330, 2.162330, 2.162330, 2.162330",\ + "0.051940, 0.051940, 0.051942, 0.051949, 0.051962",\ + "0.176972, 0.176972, 0.176976, 0.176987, 0.177010",\ + "0.381000, 0.381000, 0.381002, 0.381007, 0.381017",\ + "0.885971, 0.885971, 0.885971, 0.885971, 0.885971",\ + "2.162330, 2.162330, 2.162330, 2.162330, 2.162330"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.676230, 0.942019, 1.230037, 1.720324, 2.700896",\ + "0.698581, 0.964369, 1.252388, 1.742674, 2.723247",\ + "0.739901, 1.005690, 1.293708, 1.783995, 2.764567",\ + "0.872719, 1.138507, 1.426508, 1.916733, 2.897183",\ + "1.221825, 1.487614, 1.775615, 2.265841, 3.246295",\ + "0.763642, 1.029602, 1.317671, 1.807038, 2.786830",\ + "0.785992, 1.051952, 1.340022, 1.829389, 2.809181",\ + "0.827313, 1.093273, 1.381342, 1.870709, 2.850501",\ + "0.960130, 1.226091, 1.514142, 2.003448, 2.983117",\ + "1.309237, 1.575197, 1.863249, 2.352556, 3.332229",\ + "0.844558, 1.118663, 1.405637, 1.894660, 2.873785",\ + "0.866909, 1.141013, 1.427987, 1.917011, 2.896136",\ + "0.908229, 1.182334, 1.469308, 1.958331, 2.937456",\ + "1.041047, 1.315151, 1.602108, 2.091070, 3.070072",\ + "1.390153, 1.664258, 1.951214, 2.440178, 3.419184",\ + "0.905564, 1.184414, 1.469780, 1.958574, 2.937294",\ + "0.927915, 1.206764, 1.492131, 1.980924, 2.959645",\ + "0.969235, 1.248085, 1.533451, 2.022245, 3.000965",\ + "1.102053, 1.380903, 1.666251, 2.154983, 3.133581",\ + "1.451159, 1.730009, 2.015357, 2.504092, 3.482693",\ + "1.241556, 1.550150, 1.821864, 2.308010, 3.282750",\ + "1.263907, 1.572501, 1.844214, 2.330360, 3.305101",\ + "1.305227, 1.613822, 1.885535, 2.371680, 3.346421",\ + "1.438045, 1.746639, 2.018334, 2.504419, 3.479037",\ + "1.787151, 2.095746, 2.367441, 2.853527, 3.828149"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.048192, 0.048192, 0.048186, 0.048165, 0.048124",\ + "0.098610, 0.098610, 0.098604, 0.098582, 0.098538",\ + "0.188783, 0.188783, 0.188784, 0.188785, 0.188787",\ + "0.444126, 0.444126, 0.444126, 0.444125, 0.444123",\ + "1.101815, 1.101815, 1.101815, 1.101813, 1.101811",\ + "0.048192, 0.048192, 0.048186, 0.048165, 0.048124",\ + "0.098610, 0.098610, 0.098604, 0.098582, 0.098538",\ + "0.188783, 0.188783, 0.188784, 0.188785, 0.188787",\ + "0.444126, 0.444126, 0.444126, 0.444125, 0.444123",\ + "1.101815, 1.101815, 1.101815, 1.101813, 1.101811",\ + "0.048192, 0.048192, 0.048186, 0.048165, 0.048124",\ + "0.098610, 0.098610, 0.098604, 0.098582, 0.098538",\ + "0.188783, 0.188783, 0.188784, 0.188785, 0.188787",\ + "0.444126, 0.444126, 0.444126, 0.444125, 0.444123",\ + "1.101815, 1.101815, 1.101815, 1.101813, 1.101811",\ + "0.048192, 0.048192, 0.048186, 0.048165, 0.048124",\ + "0.098610, 0.098610, 0.098604, 0.098582, 0.098538",\ + "0.188783, 0.188783, 0.188784, 0.188785, 0.188787",\ + "0.444126, 0.444126, 0.444126, 0.444125, 0.444123",\ + "1.101815, 1.101815, 1.101815, 1.101813, 1.101811",\ + "0.048192, 0.048192, 0.048185, 0.048165, 0.048124",\ + "0.098610, 0.098610, 0.098604, 0.098582, 0.098538",\ + "0.188783, 0.188783, 0.188784, 0.188785, 0.188787",\ + "0.444126, 0.444126, 0.444126, 0.444125, 0.444123",\ + "1.101815, 1.101815, 1.101815, 1.101813, 1.101811"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[4]_redg_2360*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[35]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.664659, 0.924878, 1.203873, 1.666613, 2.592093",\ + "0.710813, 0.971031, 1.250026, 1.712767, 2.638247",\ + "0.795116, 1.055335, 1.334330, 1.797070, 2.722549",\ + "1.016279, 1.276498, 1.555493, 2.018232, 2.943710",\ + "1.577155, 1.837373, 2.116368, 2.579105, 3.504579",\ + "0.752069, 1.012459, 1.291420, 1.753327, 2.678026",\ + "0.798222, 1.058612, 1.337573, 1.799481, 2.724180",\ + "0.882526, 1.142916, 1.421877, 1.883784, 2.808483",\ + "1.103689, 1.364079, 1.643039, 2.104946, 3.029644",\ + "1.664564, 1.924954, 2.203914, 2.665819, 3.590512",\ + "0.832929, 1.101504, 1.379383, 1.840949, 2.764981",\ + "0.879082, 1.147657, 1.425536, 1.887103, 2.811135",\ + "0.963386, 1.231961, 1.509840, 1.971406, 2.895438",\ + "1.184549, 1.453124, 1.731003, 2.192568, 3.116599",\ + "1.745424, 2.013999, 2.291878, 2.753441, 3.677467",\ + "0.893718, 1.167232, 1.443522, 1.904862, 2.828490",\ + "0.939871, 1.213386, 1.489675, 1.951016, 2.874644",\ + "1.024175, 1.297689, 1.573979, 2.035319, 2.958947",\ + "1.245338, 1.518852, 1.795141, 2.256481, 3.180108",\ + "1.806213, 2.079728, 2.356016, 2.817354, 3.740976",\ + "1.228556, 1.532729, 1.795325, 2.254182, 3.173946",\ + "1.274709, 1.578882, 1.841479, 2.300336, 3.220100",\ + "1.359013, 1.663186, 1.925782, 2.384639, 3.304403",\ + "1.580175, 1.884349, 2.146945, 2.605801, 3.525564",\ + "2.141051, 2.445224, 2.707820, 3.166674, 4.086432"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.051940, 0.051940, 0.051941, 0.051945, 0.051952",\ + "0.176973, 0.176973, 0.176974, 0.176981, 0.176994",\ + "0.381000, 0.381000, 0.381001, 0.381004, 0.381010",\ + "0.885971, 0.885971, 0.885971, 0.885971, 0.885971",\ + "2.162330, 2.162330, 2.162330, 2.162330, 2.162330",\ + "0.051940, 0.051940, 0.051941, 0.051945, 0.051952",\ + "0.176973, 0.176973, 0.176974, 0.176981, 0.176994",\ + "0.381000, 0.381000, 0.381001, 0.381004, 0.381010",\ + "0.885971, 0.885971, 0.885971, 0.885971, 0.885971",\ + "2.162330, 2.162330, 2.162330, 2.162330, 2.162330",\ + "0.051940, 0.051940, 0.051941, 0.051945, 0.051952",\ + "0.176973, 0.176973, 0.176974, 0.176981, 0.176994",\ + "0.381000, 0.381000, 0.381001, 0.381004, 0.381010",\ + "0.885971, 0.885971, 0.885971, 0.885971, 0.885971",\ + "2.162330, 2.162330, 2.162330, 2.162330, 2.162330",\ + "0.051940, 0.051940, 0.051941, 0.051945, 0.051952",\ + "0.176973, 0.176973, 0.176974, 0.176981, 0.176994",\ + "0.381000, 0.381000, 0.381001, 0.381004, 0.381010",\ + "0.885971, 0.885971, 0.885971, 0.885971, 0.885971",\ + "2.162330, 2.162330, 2.162330, 2.162330, 2.162330",\ + "0.051940, 0.051940, 0.051941, 0.051945, 0.051952",\ + "0.176973, 0.176973, 0.176974, 0.176981, 0.176994",\ + "0.381000, 0.381000, 0.381001, 0.381004, 0.381010",\ + "0.885971, 0.885971, 0.885971, 0.885971, 0.885971",\ + "2.162330, 2.162330, 2.162330, 2.162330, 2.162330"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.651319, 0.911538, 1.190542, 1.653312, 2.578852",\ + "0.673670, 0.933888, 1.212892, 1.675662, 2.601202",\ + "0.714990, 0.975209, 1.254213, 1.716983, 2.642523",\ + "0.847808, 1.108027, 1.387022, 1.849762, 2.775242",\ + "1.196915, 1.457133, 1.736129, 2.198870, 3.124351",\ + "0.738728, 0.999118, 1.278088, 1.740026, 2.664785",\ + "0.761079, 1.021469, 1.300439, 1.762377, 2.687136",\ + "0.802400, 1.062789, 1.341759, 1.803697, 2.728456",\ + "0.935218, 1.195608, 1.474569, 1.936476, 2.861175",\ + "1.284324, 1.544714, 1.823675, 2.285584, 3.210285",\ + "0.819588, 1.088164, 1.366052, 1.827648, 2.751740",\ + "0.841939, 1.110514, 1.388402, 1.849998, 2.774091",\ + "0.883259, 1.151835, 1.429723, 1.891319, 2.815412",\ + "1.016078, 1.284653, 1.562532, 2.024098, 2.948130",\ + "1.365184, 1.633759, 1.911639, 2.373206, 3.297240",\ + "0.880378, 1.153892, 1.430190, 1.891561, 2.815249",\ + "0.902728, 1.176243, 1.452541, 1.913912, 2.837600",\ + "0.944049, 1.217563, 1.493861, 1.955232, 2.878921",\ + "1.076867, 1.350381, 1.626671, 2.088011, 3.011639",\ + "1.425974, 1.699488, 1.975777, 2.437119, 3.360749",\ + "1.215215, 1.519388, 1.781994, 2.240881, 3.160706",\ + "1.237566, 1.541739, 1.804345, 2.263232, 3.183056",\ + "1.278886, 1.583060, 1.845665, 2.304552, 3.224377",\ + "1.411705, 1.715878, 1.978474, 2.437331, 3.357095",\ + "1.760811, 2.064984, 2.327581, 2.786439, 3.706205"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.048191, 0.048191, 0.048188, 0.048176, 0.048153",\ + "0.098610, 0.098610, 0.098606, 0.098594, 0.098570",\ + "0.188783, 0.188783, 0.188783, 0.188784, 0.188785",\ + "0.444126, 0.444126, 0.444126, 0.444125, 0.444124",\ + "1.101815, 1.101815, 1.101815, 1.101814, 1.101813",\ + "0.048191, 0.048191, 0.048188, 0.048176, 0.048153",\ + "0.098610, 0.098610, 0.098606, 0.098594, 0.098570",\ + "0.188783, 0.188783, 0.188783, 0.188784, 0.188785",\ + "0.444126, 0.444126, 0.444126, 0.444125, 0.444124",\ + "1.101815, 1.101815, 1.101815, 1.101814, 1.101813",\ + "0.048191, 0.048191, 0.048188, 0.048176, 0.048153",\ + "0.098610, 0.098610, 0.098606, 0.098594, 0.098570",\ + "0.188783, 0.188783, 0.188783, 0.188784, 0.188785",\ + "0.444126, 0.444126, 0.444126, 0.444125, 0.444124",\ + "1.101815, 1.101815, 1.101815, 1.101814, 1.101813",\ + "0.048191, 0.048191, 0.048188, 0.048176, 0.048153",\ + "0.098610, 0.098610, 0.098606, 0.098594, 0.098570",\ + "0.188783, 0.188783, 0.188783, 0.188784, 0.188785",\ + "0.444126, 0.444126, 0.444126, 0.444125, 0.444124",\ + "1.101815, 1.101815, 1.101815, 1.101814, 1.101813",\ + "0.048191, 0.048191, 0.048188, 0.048176, 0.048153",\ + "0.098610, 0.098610, 0.098606, 0.098594, 0.098570",\ + "0.188783, 0.188783, 0.188783, 0.188784, 0.188785",\ + "0.444126, 0.444126, 0.444126, 0.444125, 0.444124",\ + "1.101815, 1.101815, 1.101815, 1.101814, 1.101813"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[4]_redg_2403*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[36]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.748501, 1.009671, 1.301852, 1.810246, 2.827035",\ + "0.794654, 1.055824, 1.348005, 1.856399, 2.873188",\ + "0.878958, 1.140128, 1.432309, 1.940704, 2.957492",\ + "1.100121, 1.361291, 1.653472, 2.161867, 3.178656",\ + "1.660998, 1.922168, 2.214350, 2.722744, 3.739532",\ + "0.835913, 1.097245, 1.389544, 1.896961, 2.912969",\ + "0.882066, 1.143398, 1.435697, 1.943114, 2.959122",\ + "0.966370, 1.227702, 1.520001, 2.027418, 3.043426",\ + "1.187534, 1.448865, 1.741165, 2.248582, 3.264589",\ + "1.748411, 2.009742, 2.302042, 2.809459, 3.825466",\ + "0.916813, 1.186291, 1.477511, 1.984584, 2.999924",\ + "0.962966, 1.232444, 1.523664, 2.030737, 3.046077",\ + "1.047270, 1.316748, 1.607968, 2.115041, 3.130381",\ + "1.268433, 1.537911, 1.829131, 2.336204, 3.351544",\ + "1.829310, 2.098788, 2.390008, 2.897081, 3.912421",\ + "0.976448, 1.252020, 1.541657, 2.048497, 3.063433",\ + "1.022601, 1.298173, 1.587810, 2.094650, 3.109586",\ + "1.106905, 1.382477, 1.672114, 2.178954, 3.193890",\ + "1.328068, 1.603641, 1.893278, 2.400118, 3.415053",\ + "1.888945, 2.164518, 2.454154, 2.960994, 3.975930",\ + "1.310176, 1.617488, 1.893926, 2.398009, 3.408889",\ + "1.356329, 1.663641, 1.940079, 2.444162, 3.455042",\ + "1.440634, 1.747945, 2.024383, 2.528466, 3.539346",\ + "1.661797, 1.969109, 2.245546, 2.749630, 3.760509",\ + "2.222674, 2.529986, 2.806423, 3.310507, 4.321386"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.051937, 0.051937, 0.051937, 0.051937, 0.051937",\ + "0.176967, 0.176967, 0.176967, 0.176967, 0.176967",\ + "0.380998, 0.380998, 0.380998, 0.380998, 0.380998",\ + "0.885970, 0.885970, 0.885970, 0.885970, 0.885970",\ + "2.162331, 2.162331, 2.162331, 2.162331, 2.162331",\ + "0.051937, 0.051937, 0.051937, 0.051937, 0.051937",\ + "0.176967, 0.176967, 0.176967, 0.176967, 0.176967",\ + "0.380998, 0.380998, 0.380998, 0.380998, 0.380998",\ + "0.885970, 0.885970, 0.885970, 0.885970, 0.885970",\ + "2.162331, 2.162331, 2.162331, 2.162331, 2.162331",\ + "0.051937, 0.051937, 0.051937, 0.051937, 0.051937",\ + "0.176967, 0.176967, 0.176967, 0.176967, 0.176967",\ + "0.380998, 0.380998, 0.380998, 0.380998, 0.380998",\ + "0.885970, 0.885970, 0.885970, 0.885970, 0.885970",\ + "2.162331, 2.162331, 2.162331, 2.162331, 2.162331",\ + "0.051937, 0.051937, 0.051937, 0.051937, 0.051937",\ + "0.176967, 0.176967, 0.176967, 0.176967, 0.176967",\ + "0.380998, 0.380998, 0.380998, 0.380998, 0.380998",\ + "0.885970, 0.885970, 0.885970, 0.885970, 0.885970",\ + "2.162331, 2.162331, 2.162331, 2.162331, 2.162331",\ + "0.051937, 0.051937, 0.051937, 0.051937, 0.051937",\ + "0.176967, 0.176967, 0.176967, 0.176967, 0.176967",\ + "0.380998, 0.380998, 0.380998, 0.380998, 0.380998",\ + "0.885970, 0.885970, 0.885970, 0.885970, 0.885970",\ + "2.162331, 2.162331, 2.162331, 2.162331, 2.162331"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.735004, 0.996174, 1.288355, 1.796750, 2.813539",\ + "0.757355, 1.018525, 1.310706, 1.819101, 2.835889",\ + "0.798676, 1.059846, 1.352027, 1.860421, 2.877210",\ + "0.931650, 1.192820, 1.485001, 1.993395, 3.010184",\ + "1.280755, 1.541925, 1.834106, 2.342501, 3.359290",\ + "0.822417, 1.083748, 1.376048, 1.883465, 2.899472",\ + "0.844768, 1.106099, 1.398399, 1.905816, 2.921823",\ + "0.886088, 1.147419, 1.439719, 1.947136, 2.963144",\ + "1.019062, 1.280394, 1.572693, 2.080110, 3.096118",\ + "1.368168, 1.629499, 1.921799, 2.429216, 3.445223",\ + "0.903316, 1.172794, 1.464014, 1.971087, 2.986427",\ + "0.925667, 1.195145, 1.486365, 1.993438, 3.008778",\ + "0.966988, 1.236465, 1.527686, 2.034758, 3.050099",\ + "1.099962, 1.369439, 1.660660, 2.167732, 3.183073",\ + "1.449067, 1.718545, 2.009765, 2.516838, 3.532178",\ + "0.962951, 1.238524, 1.528160, 2.035001, 3.049936",\ + "0.985302, 1.260875, 1.550511, 2.057351, 3.072287",\ + "1.026623, 1.302195, 1.591832, 2.098672, 3.113608",\ + "1.159597, 1.435169, 1.724806, 2.231646, 3.246582",\ + "1.508702, 1.784275, 2.073912, 2.580752, 3.595687",\ + "1.296680, 1.603992, 1.880429, 2.384513, 3.395392",\ + "1.319031, 1.626343, 1.902780, 2.406864, 3.417743",\ + "1.360351, 1.667663, 1.944100, 2.448184, 3.459064",\ + "1.493325, 1.800637, 2.077075, 2.581158, 3.592038",\ + "1.842431, 2.149743, 2.426180, 2.930264, 3.941144"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.048201, 0.048201, 0.048201, 0.048201, 0.048201",\ + "0.098620, 0.098620, 0.098620, 0.098620, 0.098620",\ + "0.188783, 0.188783, 0.188783, 0.188783, 0.188783",\ + "0.444126, 0.444126, 0.444126, 0.444126, 0.444126",\ + "1.101816, 1.101816, 1.101816, 1.101816, 1.101816",\ + "0.048201, 0.048201, 0.048201, 0.048201, 0.048201",\ + "0.098620, 0.098620, 0.098620, 0.098620, 0.098620",\ + "0.188783, 0.188783, 0.188783, 0.188783, 0.188783",\ + "0.444126, 0.444126, 0.444126, 0.444126, 0.444126",\ + "1.101816, 1.101816, 1.101816, 1.101816, 1.101816",\ + "0.048201, 0.048201, 0.048201, 0.048201, 0.048201",\ + "0.098620, 0.098620, 0.098620, 0.098620, 0.098620",\ + "0.188783, 0.188783, 0.188783, 0.188783, 0.188783",\ + "0.444126, 0.444126, 0.444126, 0.444126, 0.444126",\ + "1.101816, 1.101816, 1.101816, 1.101816, 1.101816",\ + "0.048201, 0.048201, 0.048201, 0.048201, 0.048201",\ + "0.098620, 0.098620, 0.098620, 0.098620, 0.098620",\ + "0.188783, 0.188783, 0.188783, 0.188783, 0.188783",\ + "0.444126, 0.444126, 0.444126, 0.444126, 0.444126",\ + "1.101816, 1.101816, 1.101816, 1.101816, 1.101816",\ + "0.048201, 0.048201, 0.048201, 0.048201, 0.048201",\ + "0.098620, 0.098620, 0.098620, 0.098620, 0.098620",\ + "0.188783, 0.188783, 0.188783, 0.188783, 0.188783",\ + "0.444126, 0.444126, 0.444126, 0.444126, 0.444126",\ + "1.101816, 1.101816, 1.101816, 1.101816, 1.101816"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[4]_redg_2467*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[37]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.730463, 0.984563, 1.266812, 1.735637, 2.673288",\ + "0.776616, 1.030716, 1.312965, 1.781790, 2.719441",\ + "0.860920, 1.115021, 1.397269, 1.866094, 2.803746",\ + "1.082084, 1.336184, 1.618432, 2.087258, 3.024909",\ + "1.642961, 1.897061, 2.179309, 2.648135, 3.585786",\ + "0.817871, 1.072157, 1.354377, 1.822352, 2.759222",\ + "0.864024, 1.118310, 1.400530, 1.868505, 2.805375",\ + "0.948328, 1.202614, 1.484834, 1.952809, 2.889679",\ + "1.169492, 1.423777, 1.705998, 2.173972, 3.110843",\ + "1.730369, 1.984654, 2.266875, 2.734849, 3.671720",\ + "0.898712, 1.161224, 1.442341, 1.909973, 2.846177",\ + "0.944865, 1.207377, 1.488494, 1.956126, 2.892330",\ + "1.029169, 1.291681, 1.572798, 2.040430, 2.976635",\ + "1.250332, 1.512845, 1.793961, 2.261594, 3.197798",\ + "1.811209, 2.073722, 2.354838, 2.822471, 3.758675",\ + "0.956353, 1.226984, 1.506480, 1.973886, 2.909686",\ + "1.002506, 1.273137, 1.552633, 2.020039, 2.955839",\ + "1.086810, 1.357441, 1.636937, 2.104343, 3.040143",\ + "1.307973, 1.578604, 1.858101, 2.325507, 3.261307",\ + "1.868850, 2.139482, 2.418978, 2.886384, 3.822184",\ + "1.288825, 1.592869, 1.858345, 2.323230, 3.255142",\ + "1.334978, 1.639022, 1.904498, 2.369383, 3.301295",\ + "1.419282, 1.723326, 1.988802, 2.453687, 3.385599",\ + "1.640445, 1.944490, 2.209965, 2.674851, 3.606763",\ + "2.201322, 2.505367, 2.770842, 3.235728, 4.167640"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.051937, 0.051937, 0.051937, 0.051937, 0.051937",\ + "0.176967, 0.176967, 0.176967, 0.176967, 0.176967",\ + "0.380998, 0.380998, 0.380998, 0.380998, 0.380998",\ + "0.885970, 0.885970, 0.885970, 0.885970, 0.885970",\ + "2.162331, 2.162331, 2.162331, 2.162331, 2.162331",\ + "0.051937, 0.051937, 0.051937, 0.051937, 0.051937",\ + "0.176967, 0.176967, 0.176967, 0.176967, 0.176967",\ + "0.380998, 0.380998, 0.380998, 0.380998, 0.380998",\ + "0.885970, 0.885970, 0.885970, 0.885970, 0.885970",\ + "2.162331, 2.162331, 2.162331, 2.162331, 2.162331",\ + "0.051937, 0.051937, 0.051937, 0.051937, 0.051937",\ + "0.176967, 0.176967, 0.176967, 0.176967, 0.176967",\ + "0.380998, 0.380998, 0.380998, 0.380998, 0.380998",\ + "0.885970, 0.885970, 0.885970, 0.885970, 0.885970",\ + "2.162331, 2.162331, 2.162331, 2.162331, 2.162331",\ + "0.051937, 0.051937, 0.051937, 0.051937, 0.051937",\ + "0.176967, 0.176967, 0.176967, 0.176967, 0.176967",\ + "0.380998, 0.380998, 0.380998, 0.380998, 0.380998",\ + "0.885970, 0.885970, 0.885970, 0.885970, 0.885970",\ + "2.162331, 2.162331, 2.162331, 2.162331, 2.162331",\ + "0.051937, 0.051937, 0.051937, 0.051937, 0.051937",\ + "0.176967, 0.176967, 0.176967, 0.176967, 0.176967",\ + "0.380998, 0.380998, 0.380998, 0.380998, 0.380998",\ + "0.885970, 0.885970, 0.885970, 0.885970, 0.885970",\ + "2.162331, 2.162331, 2.162331, 2.162331, 2.162331"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.716967, 0.971067, 1.253316, 1.722141, 2.659792",\ + "0.739318, 0.993418, 1.275667, 1.744492, 2.682143",\ + "0.780639, 1.034739, 1.316987, 1.785813, 2.723464",\ + "0.913612, 1.167712, 1.449961, 1.918786, 2.856437",\ + "1.262718, 1.516818, 1.799066, 2.267892, 3.205543",\ + "0.804375, 1.058661, 1.340881, 1.808856, 2.745726",\ + "0.826726, 1.081012, 1.363232, 1.831207, 2.768077",\ + "0.868047, 1.122332, 1.404552, 1.872527, 2.809398",\ + "1.001020, 1.255306, 1.537526, 2.005501, 2.942371",\ + "1.350126, 1.604411, 1.886632, 2.354606, 3.291477",\ + "0.885216, 1.147728, 1.428845, 1.896477, 2.832681",\ + "0.907567, 1.170079, 1.451195, 1.918828, 2.855032",\ + "0.948887, 1.211399, 1.492516, 1.960149, 2.896353",\ + "1.081861, 1.344373, 1.625489, 2.093122, 3.029326",\ + "1.430966, 1.693479, 1.974595, 2.442228, 3.378432",\ + "0.942857, 1.213488, 1.492984, 1.960390, 2.896190",\ + "0.965208, 1.235839, 1.515335, 1.982741, 2.918541",\ + "1.006528, 1.277159, 1.556656, 2.024062, 2.959862",\ + "1.139502, 1.410133, 1.689629, 2.157035, 3.092835",\ + "1.488607, 1.759238, 2.038735, 2.506141, 3.441941",\ + "1.275329, 1.579373, 1.844849, 2.309734, 3.241646",\ + "1.297680, 1.601724, 1.867200, 2.332085, 3.263997",\ + "1.339000, 1.643044, 1.908520, 2.373406, 3.305318",\ + "1.471974, 1.776018, 2.041493, 2.506379, 3.438291",\ + "1.821079, 2.125124, 2.390599, 2.855485, 3.787397"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.048201, 0.048201, 0.048201, 0.048201, 0.048201",\ + "0.098620, 0.098620, 0.098620, 0.098620, 0.098620",\ + "0.188783, 0.188783, 0.188783, 0.188783, 0.188783",\ + "0.444126, 0.444126, 0.444126, 0.444126, 0.444126",\ + "1.101816, 1.101816, 1.101816, 1.101816, 1.101816",\ + "0.048201, 0.048201, 0.048201, 0.048201, 0.048201",\ + "0.098620, 0.098620, 0.098620, 0.098620, 0.098620",\ + "0.188783, 0.188783, 0.188783, 0.188783, 0.188783",\ + "0.444126, 0.444126, 0.444126, 0.444126, 0.444126",\ + "1.101816, 1.101816, 1.101816, 1.101816, 1.101816",\ + "0.048201, 0.048201, 0.048201, 0.048201, 0.048201",\ + "0.098620, 0.098620, 0.098620, 0.098620, 0.098620",\ + "0.188783, 0.188783, 0.188783, 0.188783, 0.188783",\ + "0.444126, 0.444126, 0.444126, 0.444126, 0.444126",\ + "1.101816, 1.101816, 1.101816, 1.101816, 1.101816",\ + "0.048201, 0.048201, 0.048201, 0.048201, 0.048201",\ + "0.098620, 0.098620, 0.098620, 0.098620, 0.098620",\ + "0.188783, 0.188783, 0.188783, 0.188783, 0.188783",\ + "0.444126, 0.444126, 0.444126, 0.444126, 0.444126",\ + "1.101816, 1.101816, 1.101816, 1.101816, 1.101816",\ + "0.048201, 0.048201, 0.048201, 0.048201, 0.048201",\ + "0.098620, 0.098620, 0.098620, 0.098620, 0.098620",\ + "0.188783, 0.188783, 0.188783, 0.188783, 0.188783",\ + "0.444126, 0.444126, 0.444126, 0.444126, 0.444126",\ + "1.101816, 1.101816, 1.101816, 1.101816, 1.101816"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[4]_redg_2517*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[40]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.732857, 0.971343, 1.249163, 1.734893, 2.706354",\ + "0.779384, 1.017870, 1.295690, 1.781420, 2.752881",\ + "0.865018, 1.103504, 1.381324, 1.867054, 2.838515",\ + "1.088337, 1.326823, 1.604643, 2.090373, 3.061833",\ + "1.652282, 1.890768, 2.168588, 2.654318, 3.625778",\ + "0.820269, 1.058867, 1.336783, 1.821608, 2.792287",\ + "0.866797, 1.105394, 1.383311, 1.868135, 2.838814",\ + "0.952431, 1.191029, 1.468945, 1.953769, 2.924448",\ + "1.175750, 1.414347, 1.692263, 2.177088, 3.147767",\ + "1.739695, 1.978293, 2.256209, 2.741033, 3.711712",\ + "0.901137, 1.147799, 1.424749, 1.909230, 2.879242",\ + "0.947664, 1.194327, 1.471276, 1.955757, 2.925770",\ + "1.033299, 1.279961, 1.556910, 2.041391, 3.011404",\ + "1.256617, 1.503280, 1.780229, 2.264710, 3.234722",\ + "1.820563, 2.067225, 2.344174, 2.828655, 3.798667",\ + "0.958789, 1.213364, 1.488891, 1.973144, 2.942751",\ + "1.005316, 1.259891, 1.535418, 2.019671, 2.989279",\ + "1.090950, 1.345525, 1.621053, 2.105305, 3.074913",\ + "1.314269, 1.568844, 1.844371, 2.328624, 3.298231",\ + "1.878214, 2.132789, 2.408317, 2.892569, 3.862176",\ + "1.276921, 1.576900, 1.840930, 2.322562, 3.288208",\ + "1.323448, 1.623428, 1.887457, 2.369089, 3.334734",\ + "1.409082, 1.709062, 1.973091, 2.454723, 3.420369",\ + "1.632401, 1.932381, 2.196410, 2.678042, 3.643687",\ + "2.196346, 2.496326, 2.760355, 3.241987, 4.207632"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.052220, 0.052220, 0.052220, 0.052220, 0.052220",\ + "0.174408, 0.174408, 0.174408, 0.174408, 0.174408",\ + "0.378144, 0.378144, 0.378144, 0.378144, 0.378144",\ + "0.885509, 0.885509, 0.885509, 0.885508, 0.885506",\ + "2.163010, 2.163010, 2.163010, 2.163012, 2.163014",\ + "0.052220, 0.052220, 0.052220, 0.052220, 0.052220",\ + "0.174408, 0.174408, 0.174408, 0.174408, 0.174408",\ + "0.378144, 0.378144, 0.378144, 0.378144, 0.378144",\ + "0.885509, 0.885509, 0.885509, 0.885508, 0.885506",\ + "2.163010, 2.163010, 2.163010, 2.163012, 2.163014",\ + "0.052220, 0.052220, 0.052220, 0.052220, 0.052220",\ + "0.174408, 0.174408, 0.174408, 0.174408, 0.174408",\ + "0.378144, 0.378144, 0.378144, 0.378144, 0.378144",\ + "0.885509, 0.885509, 0.885509, 0.885508, 0.885506",\ + "2.163010, 2.163010, 2.163010, 2.163012, 2.163014",\ + "0.052220, 0.052220, 0.052220, 0.052220, 0.052220",\ + "0.174408, 0.174408, 0.174408, 0.174408, 0.174408",\ + "0.378144, 0.378144, 0.378144, 0.378144, 0.378144",\ + "0.885509, 0.885509, 0.885509, 0.885508, 0.885506",\ + "2.163010, 2.163010, 2.163010, 2.163012, 2.163014",\ + "0.052220, 0.052220, 0.052220, 0.052220, 0.052220",\ + "0.174408, 0.174408, 0.174408, 0.174408, 0.174408",\ + "0.378144, 0.378144, 0.378144, 0.378144, 0.378144",\ + "0.885509, 0.885509, 0.885509, 0.885508, 0.885506",\ + "2.163010, 2.163010, 2.163010, 2.163012, 2.163014"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.671243, 0.909729, 1.187549, 1.673279, 2.644740",\ + "0.724532, 0.963018, 1.240838, 1.726568, 2.698029",\ + "0.785280, 1.023767, 1.301586, 1.787316, 2.758777",\ + "0.919992, 1.158478, 1.436297, 1.922028, 2.893488",\ + "1.266500, 1.504986, 1.782806, 2.268536, 3.239997",\ + "0.758655, 0.997253, 1.275169, 1.759994, 2.730674",\ + "0.811945, 1.050542, 1.328459, 1.813283, 2.783962",\ + "0.872693, 1.111291, 1.389207, 1.874031, 2.844710",\ + "1.007404, 1.246002, 1.523918, 2.008743, 2.979422",\ + "1.353913, 1.592511, 1.870427, 2.355251, 3.325931",\ + "0.839523, 1.086185, 1.363135, 1.847616, 2.817629",\ + "0.892813, 1.139475, 1.416424, 1.900905, 2.870918",\ + "0.953561, 1.200223, 1.477172, 1.961653, 2.931665",\ + "1.088272, 1.334934, 1.611884, 2.096365, 3.066377",\ + "1.434781, 1.681443, 1.958392, 2.442873, 3.412886",\ + "0.897175, 1.151750, 1.427277, 1.911530, 2.881138",\ + "0.950464, 1.205039, 1.480567, 1.964819, 2.934427",\ + "1.011212, 1.265788, 1.541315, 2.025567, 2.995174",\ + "1.145923, 1.400499, 1.676026, 2.160278, 3.129886",\ + "1.492432, 1.747007, 2.022535, 2.506787, 3.476395",\ + "1.215307, 1.515286, 1.779316, 2.260948, 3.226594",\ + "1.268596, 1.568576, 1.832605, 2.314237, 3.279882",\ + "1.329345, 1.629324, 1.893353, 2.374985, 3.340631",\ + "1.464056, 1.764035, 2.028064, 2.509696, 3.475342",\ + "1.810564, 2.110544, 2.374573, 2.856205, 3.821851"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.060037, 0.060037, 0.060037, 0.060037, 0.060036",\ + "0.113989, 0.113989, 0.113989, 0.113989, 0.113988",\ + "0.199694, 0.199694, 0.199694, 0.199693, 0.199693",\ + "0.445487, 0.445487, 0.445487, 0.445487, 0.445487",\ + "1.101436, 1.101436, 1.101436, 1.101436, 1.101436",\ + "0.060037, 0.060037, 0.060037, 0.060037, 0.060036",\ + "0.113989, 0.113989, 0.113989, 0.113989, 0.113988",\ + "0.199694, 0.199694, 0.199694, 0.199693, 0.199693",\ + "0.445487, 0.445487, 0.445487, 0.445487, 0.445487",\ + "1.101436, 1.101436, 1.101436, 1.101436, 1.101436",\ + "0.060037, 0.060037, 0.060037, 0.060037, 0.060036",\ + "0.113989, 0.113989, 0.113989, 0.113989, 0.113988",\ + "0.199694, 0.199694, 0.199694, 0.199693, 0.199693",\ + "0.445487, 0.445487, 0.445487, 0.445487, 0.445487",\ + "1.101436, 1.101436, 1.101436, 1.101436, 1.101436",\ + "0.060037, 0.060037, 0.060037, 0.060037, 0.060036",\ + "0.113989, 0.113989, 0.113989, 0.113989, 0.113988",\ + "0.199694, 0.199694, 0.199694, 0.199693, 0.199693",\ + "0.445487, 0.445487, 0.445487, 0.445487, 0.445487",\ + "1.101436, 1.101436, 1.101436, 1.101436, 1.101436",\ + "0.060037, 0.060037, 0.060037, 0.060037, 0.060036",\ + "0.113989, 0.113989, 0.113989, 0.113989, 0.113988",\ + "0.199694, 0.199694, 0.199694, 0.199693, 0.199693",\ + "0.445487, 0.445487, 0.445487, 0.445487, 0.445487",\ + "1.101436, 1.101436, 1.101436, 1.101436, 1.101436"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[4]_redg_2654*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[46]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.687805, 0.938142, 1.214956, 1.708122, 2.694454",\ + "0.734333, 0.984670, 1.261485, 1.754655, 2.740993",\ + "0.819969, 1.070307, 1.347124, 1.840302, 2.826659",\ + "1.043291, 1.293629, 1.570450, 2.063643, 3.050026",\ + "1.607241, 1.857579, 2.134405, 2.627615, 3.614036",\ + "0.775217, 1.025647, 1.302601, 1.794837, 2.780388",\ + "0.821745, 1.072175, 1.349129, 1.841369, 2.826927",\ + "0.907382, 1.157812, 1.434768, 1.927017, 2.912592",\ + "1.130704, 1.381134, 1.658095, 2.150357, 3.135960",\ + "1.694654, 1.945083, 2.222049, 2.714330, 3.699970",\ + "0.856074, 1.114534, 1.390566, 1.882460, 2.867343",\ + "0.902602, 1.161062, 1.437095, 1.928992, 2.913882",\ + "0.988238, 1.246698, 1.522734, 2.014640, 2.999547",\ + "1.211560, 1.470021, 1.746060, 2.237980, 3.222915",\ + "1.775510, 2.033970, 2.310015, 2.801953, 3.786925",\ + "0.913872, 1.180032, 1.454710, 1.946373, 2.930852",\ + "0.960400, 1.226560, 1.501239, 1.992905, 2.977391",\ + "1.046036, 1.312197, 1.586878, 2.078553, 3.063056",\ + "1.269358, 1.535519, 1.810204, 2.301893, 3.286424",\ + "1.833308, 2.099468, 2.374159, 2.865866, 3.850434",\ + "1.246728, 1.542797, 1.806824, 2.295822, 3.276308",\ + "1.293256, 1.589325, 1.853353, 2.342354, 3.322847",\ + "1.378892, 1.674961, 1.938992, 2.428002, 3.408513",\ + "1.602214, 1.898283, 2.162318, 2.651342, 3.631880",\ + "2.166164, 2.462233, 2.726274, 3.215315, 4.195890"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.052222, 0.052222, 0.052225, 0.052234, 0.052252",\ + "0.174407, 0.174407, 0.174405, 0.174399, 0.174386",\ + "0.378140, 0.378140, 0.378136, 0.378121, 0.378092",\ + "0.885509, 0.885509, 0.885508, 0.885504, 0.885495",\ + "2.163010, 2.163010, 2.163012, 2.163018, 2.163031",\ + "0.052222, 0.052222, 0.052225, 0.052234, 0.052252",\ + "0.174407, 0.174407, 0.174405, 0.174399, 0.174386",\ + "0.378140, 0.378140, 0.378136, 0.378121, 0.378092",\ + "0.885509, 0.885509, 0.885508, 0.885504, 0.885495",\ + "2.163010, 2.163010, 2.163012, 2.163018, 2.163031",\ + "0.052222, 0.052222, 0.052225, 0.052234, 0.052252",\ + "0.174407, 0.174407, 0.174405, 0.174399, 0.174386",\ + "0.378140, 0.378140, 0.378136, 0.378121, 0.378092",\ + "0.885509, 0.885509, 0.885508, 0.885504, 0.885495",\ + "2.163010, 2.163010, 2.163012, 2.163018, 2.163031",\ + "0.052222, 0.052222, 0.052225, 0.052234, 0.052252",\ + "0.174407, 0.174407, 0.174405, 0.174399, 0.174386",\ + "0.378140, 0.378140, 0.378136, 0.378121, 0.378092",\ + "0.885509, 0.885509, 0.885508, 0.885504, 0.885495",\ + "2.163010, 2.163010, 2.163012, 2.163018, 2.163031",\ + "0.052222, 0.052222, 0.052225, 0.052234, 0.052252",\ + "0.174407, 0.174407, 0.174405, 0.174399, 0.174386",\ + "0.378140, 0.378140, 0.378136, 0.378121, 0.378092",\ + "0.885509, 0.885509, 0.885508, 0.885504, 0.885495",\ + "2.163010, 2.163010, 2.163012, 2.163018, 2.163031"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.626180, 0.876518, 1.153319, 1.646441, 2.632685",\ + "0.679480, 0.929817, 1.206631, 1.699795, 2.686123",\ + "0.740236, 0.990574, 1.267397, 1.760594, 2.746988",\ + "0.874947, 1.125284, 1.402106, 1.895301, 2.881690",\ + "1.221451, 1.471789, 1.748606, 2.241784, 3.228139",\ + "0.713593, 0.964022, 1.240963, 1.733156, 2.718619",\ + "0.766892, 1.017322, 1.294275, 1.786510, 2.772057",\ + "0.827649, 1.078079, 1.355041, 1.847309, 2.832922",\ + "0.962359, 1.212789, 1.489751, 1.982016, 2.967624",\ + "1.308864, 1.559294, 1.836250, 2.328499, 3.314073",\ + "0.794449, 1.052909, 1.328929, 1.820778, 2.805574",\ + "0.847749, 1.106209, 1.382241, 1.874132, 2.859012",\ + "0.908505, 1.166965, 1.443007, 1.934931, 2.919877",\ + "1.043216, 1.301676, 1.577716, 2.069638, 3.054579",\ + "1.389720, 1.648180, 1.924216, 2.416121, 3.401028",\ + "0.852247, 1.118408, 1.393072, 1.884692, 2.869083",\ + "0.905546, 1.171707, 1.446384, 1.938046, 2.922521",\ + "0.966303, 1.232464, 1.507150, 1.998845, 2.983386",\ + "1.101013, 1.367174, 1.641860, 2.133552, 3.118088",\ + "1.447518, 1.713679, 1.988360, 2.480035, 3.464537",\ + "1.185103, 1.481172, 1.745186, 2.234141, 3.214539",\ + "1.238403, 1.534472, 1.798498, 2.287495, 3.267977",\ + "1.299159, 1.595228, 1.859265, 2.348294, 3.328842",\ + "1.433870, 1.729939, 1.993974, 2.483001, 3.463544",\ + "1.780374, 2.076443, 2.340474, 2.829484, 3.809993"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.060053, 0.060053, 0.060071, 0.060133, 0.060259",\ + "0.114010, 0.114010, 0.114035, 0.114122, 0.114295",\ + "0.199713, 0.199713, 0.199736, 0.199815, 0.199972",\ + "0.445490, 0.445490, 0.445492, 0.445501, 0.445519",\ + "1.101435, 1.101435, 1.101434, 1.101430, 1.101422",\ + "0.060053, 0.060053, 0.060071, 0.060133, 0.060259",\ + "0.114010, 0.114010, 0.114035, 0.114122, 0.114295",\ + "0.199713, 0.199713, 0.199736, 0.199815, 0.199972",\ + "0.445490, 0.445490, 0.445492, 0.445501, 0.445519",\ + "1.101435, 1.101435, 1.101434, 1.101430, 1.101422",\ + "0.060053, 0.060053, 0.060071, 0.060133, 0.060259",\ + "0.114010, 0.114010, 0.114035, 0.114122, 0.114295",\ + "0.199713, 0.199713, 0.199736, 0.199815, 0.199972",\ + "0.445490, 0.445490, 0.445492, 0.445501, 0.445519",\ + "1.101435, 1.101435, 1.101434, 1.101430, 1.101422",\ + "0.060053, 0.060053, 0.060071, 0.060133, 0.060259",\ + "0.114010, 0.114010, 0.114036, 0.114122, 0.114295",\ + "0.199713, 0.199713, 0.199736, 0.199815, 0.199972",\ + "0.445490, 0.445490, 0.445492, 0.445501, 0.445519",\ + "1.101435, 1.101435, 1.101434, 1.101430, 1.101422",\ + "0.060053, 0.060053, 0.060071, 0.060134, 0.060259",\ + "0.114010, 0.114010, 0.114036, 0.114122, 0.114295",\ + "0.199713, 0.199713, 0.199737, 0.199815, 0.199972",\ + "0.445490, 0.445490, 0.445492, 0.445501, 0.445519",\ + "1.101435, 1.101435, 1.101434, 1.101430, 1.101422"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[4]_redg_2645*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[17]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.486994, 0.689024, 0.898048, 1.222707, 1.844099",\ + "0.536854, 0.738884, 0.947908, 1.272568, 1.893960",\ + "0.638722, 0.840752, 1.049776, 1.374436, 1.995828",\ + "0.876584, 1.078614, 1.287637, 1.612297, 2.233689",\ + "1.448904, 1.650934, 1.859958, 2.184618, 2.806009",\ + "0.575735, 0.776343, 0.985328, 1.310012, 1.931453",\ + "0.625596, 0.826203, 1.035189, 1.359873, 1.981313",\ + "0.727464, 0.928071, 1.137057, 1.461741, 2.083181",\ + "0.965325, 1.165933, 1.374918, 1.699602, 2.321043",\ + "1.537645, 1.738253, 1.947239, 2.271923, 2.893363",\ + "0.665418, 0.856680, 1.065355, 1.390041, 2.011484",\ + "0.715279, 0.906541, 1.115216, 1.439901, 2.061345",\ + "0.817147, 1.008409, 1.217084, 1.541770, 2.163213",\ + "1.055008, 1.246270, 1.454945, 1.779631, 2.401074",\ + "1.627329, 1.818590, 2.027266, 2.351951, 2.973394",\ + "0.724126, 0.914549, 1.123120, 1.447544, 2.068644",\ + "0.773987, 0.964410, 1.172981, 1.497404, 2.118505",\ + "0.875855, 1.066278, 1.274849, 1.599272, 2.220373",\ + "1.113716, 1.304139, 1.512710, 1.837134, 2.458234",\ + "1.686036, 1.876459, 2.085031, 2.409454, 3.030555",\ + "1.026901, 1.220157, 1.426788, 1.750778, 2.371040",\ + "1.076761, 1.270018, 1.476649, 1.800639, 2.420901",\ + "1.178629, 1.371886, 1.578517, 1.902507, 2.522769",\ + "1.416491, 1.609747, 1.816378, 2.140368, 2.760630",\ + "1.988811, 2.182067, 2.388699, 2.712689, 3.332951"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.039800, 0.039800, 0.039800, 0.039800, 0.039800",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375010, 0.375010, 0.375010, 0.375010, 0.375010",\ + "0.869309, 0.869309, 0.869309, 0.869309, 0.869309",\ + "2.137202, 2.137202, 2.137202, 2.137202, 2.137202",\ + "0.039800, 0.039800, 0.039800, 0.039800, 0.039800",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375010, 0.375010, 0.375010, 0.375010, 0.375010",\ + "0.869309, 0.869309, 0.869309, 0.869309, 0.869309",\ + "2.137202, 2.137202, 2.137202, 2.137202, 2.137202",\ + "0.039800, 0.039800, 0.039800, 0.039800, 0.039800",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375010, 0.375010, 0.375010, 0.375010, 0.375010",\ + "0.869309, 0.869309, 0.869309, 0.869309, 0.869309",\ + "2.137202, 2.137202, 2.137202, 2.137202, 2.137202",\ + "0.039800, 0.039800, 0.039800, 0.039800, 0.039800",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375010, 0.375010, 0.375010, 0.375010, 0.375010",\ + "0.869309, 0.869309, 0.869309, 0.869309, 0.869309",\ + "2.137202, 2.137202, 2.137202, 2.137202, 2.137202",\ + "0.039800, 0.039800, 0.039800, 0.039800, 0.039800",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375010, 0.375010, 0.375010, 0.375010, 0.375010",\ + "0.869309, 0.869309, 0.869309, 0.869309, 0.869309",\ + "2.137202, 2.137202, 2.137202, 2.137202, 2.137202"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.527722, 0.729752, 0.938776, 1.263436, 1.884828",\ + "0.550072, 0.752102, 0.961126, 1.285786, 1.907177",\ + "0.591435, 0.793465, 1.002489, 1.327149, 1.948541",\ + "0.713471, 0.915501, 1.124525, 1.449185, 2.070576",\ + "1.045084, 1.247114, 1.456138, 1.780797, 2.402189",\ + "0.616463, 0.817071, 1.026057, 1.350741, 1.972181",\ + "0.638813, 0.839421, 1.048407, 1.373091, 1.994531",\ + "0.680177, 0.880784, 1.089770, 1.414454, 2.035894",\ + "0.802212, 1.002820, 1.211806, 1.536490, 2.157930",\ + "1.133825, 1.334433, 1.543419, 1.868103, 2.489543",\ + "0.706147, 0.897409, 1.106084, 1.430769, 2.052213",\ + "0.728497, 0.919758, 1.128434, 1.453119, 2.074563",\ + "0.769860, 0.961122, 1.169797, 1.494483, 2.115926",\ + "0.891896, 1.083158, 1.291833, 1.616518, 2.237962",\ + "1.223509, 1.414770, 1.623446, 1.948131, 2.569574",\ + "0.764855, 0.955278, 1.163849, 1.488272, 2.109373",\ + "0.787204, 0.977627, 1.186199, 1.510622, 2.131722",\ + "0.828568, 1.018991, 1.227562, 1.551985, 2.173086",\ + "0.950603, 1.141026, 1.349598, 1.674021, 2.295122",\ + "1.282216, 1.472639, 1.681211, 2.005634, 2.626734",\ + "1.067629, 1.260886, 1.467517, 1.791507, 2.411769",\ + "1.089979, 1.283235, 1.489867, 1.813857, 2.434119",\ + "1.131342, 1.324599, 1.531230, 1.855220, 2.475482",\ + "1.253378, 1.446635, 1.653266, 1.977256, 2.597517",\ + "1.584991, 1.778247, 1.984879, 2.308869, 2.929131"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001292, 0.074290, 0.161471, 0.321651, 0.642011"); + values ( "0.045856, 0.045856, 0.045856, 0.045856, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045856, 0.045856, 0.045856, 0.045856, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045856, 0.045856, 0.045856, 0.045856, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045856, 0.045856, 0.045856, 0.045856, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045856, 0.045856, 0.045856, 0.045856, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[4]_redg_min_2543*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[19]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.402983, 0.589298, 0.781819, 1.078308, 1.645139",\ + "0.452846, 0.639161, 0.831682, 1.128171, 1.695002",\ + "0.554714, 0.741029, 0.933550, 1.230039, 1.796870",\ + "0.792575, 0.978890, 1.171412, 1.467901, 2.034731",\ + "1.364896, 1.551211, 1.743732, 2.040221, 2.607052",\ + "0.491182, 0.676616, 0.869099, 1.165613, 1.732492",\ + "0.541046, 0.726479, 0.918963, 1.215477, 1.782355",\ + "0.642913, 0.828347, 1.020831, 1.317344, 1.884223",\ + "0.880775, 1.066208, 1.258693, 1.555206, 2.122085",\ + "1.453095, 1.638529, 1.831013, 2.127527, 2.694405",\ + "0.578213, 0.756948, 0.949126, 1.245641, 1.812524",\ + "0.628077, 0.806812, 0.998990, 1.295505, 1.862387",\ + "0.729944, 0.908679, 1.100858, 1.397373, 1.964255",\ + "0.967806, 1.146541, 1.338719, 1.635234, 2.202116",\ + "1.540126, 1.718862, 1.911040, 2.207555, 2.774437",\ + "0.635881, 0.814778, 1.006854, 1.303079, 1.869555",\ + "0.685744, 0.864642, 1.056718, 1.352942, 1.919418",\ + "0.787612, 0.966509, 1.158586, 1.454810, 2.021286",\ + "1.025473, 1.204371, 1.396447, 1.692672, 2.259147",\ + "1.597794, 1.776692, 1.968768, 2.264992, 2.831468",\ + "0.938596, 1.120091, 1.310515, 1.606257, 2.171795",\ + "0.988459, 1.169954, 1.360379, 1.656120, 2.221658",\ + "1.090327, 1.271822, 1.462247, 1.757988, 2.323526",\ + "1.328188, 1.509683, 1.700108, 1.995849, 2.561387",\ + "1.900509, 2.082004, 2.272429, 2.568170, 3.133708"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.039806, 0.039806, 0.039806, 0.039805, 0.039804",\ + "0.147771, 0.147771, 0.147771, 0.147771, 0.147770",\ + "0.375009, 0.375009, 0.375009, 0.375009, 0.375009",\ + "0.869292, 0.869292, 0.869292, 0.869292, 0.869292",\ + "2.137192, 2.137192, 2.137192, 2.137192, 2.137192",\ + "0.039806, 0.039806, 0.039806, 0.039805, 0.039804",\ + "0.147771, 0.147771, 0.147771, 0.147771, 0.147770",\ + "0.375009, 0.375009, 0.375009, 0.375009, 0.375009",\ + "0.869292, 0.869292, 0.869292, 0.869292, 0.869292",\ + "2.137192, 2.137192, 2.137192, 2.137192, 2.137192",\ + "0.039806, 0.039806, 0.039806, 0.039805, 0.039804",\ + "0.147771, 0.147771, 0.147771, 0.147771, 0.147770",\ + "0.375009, 0.375009, 0.375009, 0.375009, 0.375009",\ + "0.869292, 0.869292, 0.869292, 0.869292, 0.869292",\ + "2.137192, 2.137192, 2.137192, 2.137192, 2.137192",\ + "0.039806, 0.039806, 0.039806, 0.039805, 0.039804",\ + "0.147771, 0.147771, 0.147771, 0.147771, 0.147770",\ + "0.375009, 0.375009, 0.375009, 0.375009, 0.375009",\ + "0.869292, 0.869292, 0.869292, 0.869292, 0.869292",\ + "2.137192, 2.137192, 2.137192, 2.137192, 2.137192",\ + "0.039806, 0.039806, 0.039806, 0.039805, 0.039804",\ + "0.147771, 0.147771, 0.147771, 0.147771, 0.147770",\ + "0.375009, 0.375009, 0.375009, 0.375009, 0.375009",\ + "0.869292, 0.869292, 0.869292, 0.869292, 0.869292",\ + "2.137192, 2.137192, 2.137192, 2.137192, 2.137192"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.423040, 0.630029, 0.815796, 1.107776, 1.669457",\ + "0.466065, 0.652380, 0.844901, 1.141390, 1.708220",\ + "0.507428, 0.693743, 0.886264, 1.182753, 1.749583",\ + "0.629463, 0.815778, 1.008300, 1.304789, 1.871619",\ + "0.961076, 1.147391, 1.339912, 1.636401, 2.203231",\ + "0.511411, 0.717348, 0.903077, 1.195081, 1.756810",\ + "0.554264, 0.739698, 0.932182, 1.228695, 1.795574",\ + "0.595627, 0.781061, 0.973545, 1.270058, 1.836937",\ + "0.717663, 0.903096, 1.095581, 1.392094, 1.958972",\ + "1.049275, 1.234709, 1.427193, 1.723706, 2.290585",\ + "0.600722, 0.797680, 0.983104, 1.275110, 1.836842",\ + "0.641295, 0.820030, 1.012209, 1.308724, 1.875605",\ + "0.682658, 0.861393, 1.053572, 1.350087, 1.916969",\ + "0.804694, 0.983429, 1.175608, 1.472122, 2.039004",\ + "1.136306, 1.315041, 1.507220, 1.803735, 2.370616",\ + "0.664349, 0.855510, 1.040816, 1.332541, 1.893861",\ + "0.698963, 0.877860, 1.069937, 1.366161, 1.932636",\ + "0.740326, 0.919223, 1.111300, 1.407524, 1.974000",\ + "0.862361, 1.041259, 1.233335, 1.529560, 2.096035",\ + "1.193974, 1.372871, 1.564948, 1.861172, 2.427648",\ + "0.979328, 1.160823, 1.344474, 1.635713, 2.196086",\ + "1.001678, 1.183173, 1.373598, 1.669339, 2.234876",\ + "1.043041, 1.224536, 1.414961, 1.710702, 2.276240",\ + "1.165076, 1.346571, 1.536997, 1.832738, 2.398275",\ + "1.496689, 1.678184, 1.868609, 2.164350, 2.729888"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002405, 0.075404, 0.162307, 0.322208, 0.642011"); + values ( "0.045855, 0.045855, 0.045855, 0.045855, 0.045855",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045855, 0.045855, 0.045855, 0.045855, 0.045855",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045855, 0.045855, 0.045855, 0.045855, 0.045855",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045855, 0.045855, 0.045855, 0.045855, 0.045855",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045855, 0.045855, 0.045855, 0.045855, 0.045855",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[4]_redg_min_2604*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[21]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.374729, 0.574327, 0.761134, 1.059803, 1.637058",\ + "0.424592, 0.624191, 0.810999, 1.109666, 1.686921",\ + "0.526460, 0.726059, 0.912867, 1.211534, 1.788789",\ + "0.764322, 0.963920, 1.150728, 1.449396, 2.026650",\ + "1.336642, 1.536241, 1.723049, 2.021717, 2.598970",\ + "0.463046, 0.661644, 0.848415, 1.147108, 1.724412",\ + "0.512909, 0.711509, 0.898280, 1.196972, 1.774274",\ + "0.614777, 0.813377, 1.000148, 1.298839, 1.876142",\ + "0.852638, 1.051238, 1.238009, 1.536701, 2.114003",\ + "1.424959, 1.623559, 1.810330, 2.109022, 2.686324",\ + "0.552645, 0.741973, 0.928442, 1.227136, 1.804443",\ + "0.602508, 0.791838, 0.978307, 1.277000, 1.854306",\ + "0.704376, 0.893705, 1.080175, 1.378868, 1.956174",\ + "0.942238, 1.131567, 1.318036, 1.616729, 2.194035",\ + "1.514558, 1.703888, 1.890357, 2.189050, 2.766356",\ + "0.616737, 0.799794, 0.986158, 1.284587, 1.861501",\ + "0.666600, 0.849659, 1.036023, 1.334451, 1.911364",\ + "0.768468, 0.951526, 1.137890, 1.436318, 2.013232",\ + "1.006329, 1.189388, 1.375752, 1.674180, 2.251093",\ + "1.578650, 1.761709, 1.948073, 2.246500, 2.823413",\ + "0.927115, 1.105032, 1.289816, 1.587775, 2.163774",\ + "0.976978, 1.154897, 1.339680, 1.637639, 2.213636",\ + "1.078846, 1.256764, 1.441548, 1.739507, 2.315504",\ + "1.316707, 1.494626, 1.679409, 1.977368, 2.553366",\ + "1.889028, 2.066947, 2.251730, 2.549689, 3.125686"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.039798, 0.039798, 0.039798, 0.039798, 0.039798",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375008, 0.375008, 0.375009, 0.375009, 0.375009",\ + "0.869292, 0.869292, 0.869292, 0.869292, 0.869292",\ + "2.137192, 2.137192, 2.137192, 2.137192, 2.137192",\ + "0.039798, 0.039798, 0.039798, 0.039798, 0.039798",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375008, 0.375008, 0.375009, 0.375009, 0.375009",\ + "0.869292, 0.869292, 0.869292, 0.869292, 0.869292",\ + "2.137192, 2.137192, 2.137192, 2.137192, 2.137192",\ + "0.039798, 0.039798, 0.039798, 0.039798, 0.039798",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375008, 0.375008, 0.375009, 0.375009, 0.375009",\ + "0.869292, 0.869292, 0.869292, 0.869292, 0.869292",\ + "2.137192, 2.137192, 2.137192, 2.137192, 2.137192",\ + "0.039798, 0.039798, 0.039798, 0.039798, 0.039798",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375008, 0.375008, 0.375009, 0.375009, 0.375009",\ + "0.869292, 0.869292, 0.869292, 0.869292, 0.869292",\ + "2.137192, 2.137192, 2.137192, 2.137192, 2.137192",\ + "0.039798, 0.039798, 0.039798, 0.039798, 0.039798",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375008, 0.375008, 0.375009, 0.375009, 0.375009",\ + "0.869292, 0.869292, 0.869292, 0.869292, 0.869292",\ + "2.137192, 2.137192, 2.137192, 2.137192, 2.137192"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.405230, 0.615060, 0.801868, 1.100535, 1.677789",\ + "0.437811, 0.637410, 0.824218, 1.122885, 1.700139",\ + "0.479174, 0.678774, 0.865581, 1.164248, 1.741502",\ + "0.601210, 0.800809, 0.987617, 1.286284, 1.863538",\ + "0.932822, 1.132421, 1.319229, 1.617896, 2.195150",\ + "0.493512, 0.702378, 0.889149, 1.187840, 1.765142",\ + "0.526127, 0.724728, 0.911499, 1.210190, 1.787492",\ + "0.567491, 0.766091, 0.952862, 1.251554, 1.828856",\ + "0.689526, 0.888126, 1.074898, 1.373589, 1.950891",\ + "1.021139, 1.219739, 1.406510, 1.705201, 2.282504",\ + "0.583007, 0.782706, 0.969176, 1.267869, 1.845174",\ + "0.615727, 0.805056, 0.991526, 1.290219, 1.867524",\ + "0.657090, 0.846420, 1.032889, 1.331582, 1.908887",\ + "0.779126, 0.968455, 1.154925, 1.453618, 2.030923",\ + "1.110738, 1.300067, 1.486537, 1.785230, 2.362535",\ + "0.646999, 0.840528, 1.026891, 1.325319, 1.902232",\ + "0.679819, 0.862878, 1.049241, 1.347669, 1.924582",\ + "0.721182, 0.904241, 1.090605, 1.389032, 1.965945",\ + "0.843217, 1.026276, 1.212640, 1.511068, 2.087981",\ + "1.174830, 1.357889, 1.544252, 1.842680, 2.419593",\ + "0.967847, 1.145766, 1.330549, 1.628508, 2.204504",\ + "0.990197, 1.168116, 1.352899, 1.650858, 2.226855",\ + "1.031560, 1.209479, 1.394262, 1.692221, 2.268218",\ + "1.153596, 1.331514, 1.516298, 1.814256, 2.390253",\ + "1.485208, 1.663126, 1.847910, 2.145869, 2.721866"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.045855, 0.045855, 0.045855, 0.045855, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045855, 0.045855, 0.045855, 0.045855, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045855, 0.045855, 0.045855, 0.045855, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045855, 0.045855, 0.045855, 0.045855, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045855, 0.045855, 0.045855, 0.045855, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[4]_redg_min_2705*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[23]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.222114, 0.403093, 0.604570, 0.931647, 1.565679",\ + "0.278140, 0.457431, 0.657946, 0.989844, 1.636478",\ + "0.353958, 0.531643, 0.731437, 1.068535, 1.728488",\ + "0.556156, 0.731457, 0.928039, 1.271464, 1.949653",\ + "1.100796, 1.274143, 1.466860, 1.814002, 2.504620",\ + "0.309523, 0.490411, 0.691851, 1.018952, 1.653032",\ + "0.365549, 0.544749, 0.745227, 1.077150, 1.723831",\ + "0.441367, 0.618961, 0.818717, 1.155840, 1.815842",\ + "0.643566, 0.818775, 1.015320, 1.358769, 2.037007",\ + "1.188205, 1.361462, 1.554141, 1.901307, 2.591974",\ + "0.390388, 0.570744, 0.771878, 1.098981, 1.733064",\ + "0.446403, 0.625082, 0.825254, 1.157178, 1.803863",\ + "0.522211, 0.699294, 0.898744, 1.235869, 1.895873",\ + "0.724394, 0.899108, 1.095347, 1.438797, 2.117038",\ + "1.269020, 1.441795, 1.634168, 1.981336, 2.672005",\ + "0.448070, 0.628579, 0.829627, 1.156500, 1.790257",\ + "0.504064, 0.682912, 0.883001, 1.214712, 1.861086",\ + "0.579852, 0.757117, 0.956490, 1.293419, 1.953129",\ + "0.782005, 0.956923, 1.153085, 1.496370, 2.174338",\ + "1.326607, 1.499602, 1.691897, 2.038924, 2.729335",\ + "0.750884, 0.933934, 1.133292, 1.459748, 2.092693",\ + "0.806686, 0.988222, 1.186665, 1.517973, 2.163558",\ + "0.882290, 1.062385, 1.260154, 1.596694, 2.255640",\ + "1.084171, 1.262128, 1.456748, 1.799664, 2.476902",\ + "1.628551, 1.804755, 1.995558, 2.342230, 3.031935"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.149901, 0.149901, 0.154272, 0.175587, 0.224039",\ + "0.237266, 0.237266, 0.240202, 0.254165, 0.285843",\ + "0.399712, 0.400490, 0.400737, 0.406993, 0.422155",\ + "0.873536, 0.873536, 0.873536, 0.874623, 0.877289",\ + "2.137324, 2.139116, 2.139203, 2.139986, 2.141907",\ + "0.149901, 0.149901, 0.154272, 0.175587, 0.224039",\ + "0.237266, 0.237266, 0.240202, 0.254165, 0.285843",\ + "0.399712, 0.400490, 0.400737, 0.406993, 0.422155",\ + "0.873536, 0.873536, 0.873536, 0.874623, 0.877289",\ + "2.137324, 2.139116, 2.139203, 2.139986, 2.141907",\ + "0.149901, 0.149901, 0.154272, 0.175587, 0.224039",\ + "0.237266, 0.237266, 0.240202, 0.254165, 0.285843",\ + "0.399717, 0.400490, 0.400737, 0.406993, 0.422155",\ + "0.873536, 0.873536, 0.873536, 0.874623, 0.877289",\ + "2.137336, 2.139116, 2.139203, 2.139986, 2.141907",\ + "0.149901, 0.149901, 0.154282, 0.175646, 0.224156",\ + "0.237266, 0.237266, 0.240209, 0.254204, 0.285920",\ + "0.399727, 0.400493, 0.400738, 0.407012, 0.422192",\ + "0.873536, 0.873536, 0.873536, 0.874626, 0.877296",\ + "2.137358, 2.139123, 2.139203, 2.139988, 2.141912",\ + "0.149901, 0.149901, 0.154284, 0.175697, 0.224297",\ + "0.237266, 0.237266, 0.240210, 0.254237, 0.286012",\ + "0.399816, 0.400514, 0.400738, 0.407027, 0.422236",\ + "0.873536, 0.873536, 0.873536, 0.874629, 0.877303",\ + "2.137563, 2.139170, 2.139203, 2.139990, 2.141917"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.146813, 0.421543, 0.619073, 0.936497, 1.550523",\ + "0.182955, 0.455962, 0.653305, 0.972716, 1.591584",\ + "0.237642, 0.505732, 0.702816, 1.023104, 1.644353",\ + "0.371091, 0.634162, 0.830900, 1.151008, 1.772115",\ + "0.705966, 0.969914, 1.166368, 1.485322, 2.103856",\ + "0.235216, 0.509090, 0.706354, 1.023802, 1.637876",\ + "0.271333, 0.543280, 0.740586, 1.060021, 1.678937",\ + "0.325990, 0.593050, 0.790097, 1.110409, 1.731706",\ + "0.459423, 0.721480, 0.918180, 1.238313, 1.859468",\ + "0.794276, 1.057232, 1.253649, 1.572627, 2.191210",\ + "0.324565, 0.589422, 0.786381, 1.103830, 1.717908",\ + "0.360611, 0.623613, 0.820613, 1.140050, 1.758969",\ + "0.415179, 0.673383, 0.870124, 1.190438, 1.811738",\ + "0.548565, 0.801813, 0.998207, 1.318341, 1.939500",\ + "0.883356, 1.137565, 1.333676, 1.652655, 2.271241",\ + "0.388205, 0.647259, 0.844120, 1.161325, 1.775052",\ + "0.424183, 0.681450, 0.878352, 1.197550, 1.816125",\ + "0.478670, 0.731220, 0.927863, 1.247941, 1.868900",\ + "0.612012, 0.859650, 1.055945, 1.375844, 1.996662",\ + "0.946745, 1.195402, 1.391413, 1.710155, 2.328397",\ + "0.724572, 0.952620, 1.147783, 1.464552, 2.077430",\ + "0.760125, 0.986813, 1.182015, 1.500782, 2.118517",\ + "0.814091, 1.036585, 1.231526, 1.551176, 2.171298",\ + "0.947154, 1.165011, 1.359608, 1.679079, 2.299060",\ + "1.281518, 1.500770, 1.695075, 2.013387, 2.630787"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002308, 0.075306, 0.162234, 0.322159, 0.642011"); + values ( "0.071550, 0.074340, 0.076398, 0.092998, 0.129684",\ + "0.104996, 0.104996, 0.106760, 0.117958, 0.143880",\ + "0.191043, 0.191210, 0.191730, 0.197481, 0.211138",\ + "0.431517, 0.431517, 0.431517, 0.433284, 0.437618",\ + "1.064302, 1.065326, 1.065376, 1.065376, 1.065376",\ + "0.071556, 0.071791, 0.076398, 0.092998, 0.129684",\ + "0.104996, 0.104996, 0.106760, 0.117958, 0.143880",\ + "0.191048, 0.191210, 0.191730, 0.197481, 0.211138",\ + "0.431517, 0.431517, 0.431517, 0.433284, 0.437618",\ + "1.064330, 1.065326, 1.065376, 1.065376, 1.065376",\ + "0.071575, 0.071791, 0.076398, 0.092998, 0.129684",\ + "0.104996, 0.104996, 0.106760, 0.117958, 0.143880",\ + "0.191061, 0.191210, 0.191730, 0.197481, 0.211138",\ + "0.431517, 0.431517, 0.431517, 0.433284, 0.437618",\ + "1.064411, 1.065326, 1.065376, 1.065376, 1.065376",\ + "0.071593, 0.071792, 0.076409, 0.093042, 0.129773",\ + "0.104996, 0.104996, 0.106764, 0.117989, 0.143943",\ + "0.191073, 0.191211, 0.191731, 0.197497, 0.211171",\ + "0.431517, 0.431517, 0.431517, 0.433289, 0.437628",\ + "1.064486, 1.065330, 1.065376, 1.065376, 1.065376",\ + "0.071706, 0.071799, 0.076411, 0.093080, 0.129880",\ + "0.104996, 0.104996, 0.106764, 0.118016, 0.144018",\ + "0.191152, 0.191215, 0.191732, 0.197512, 0.211211",\ + "0.431517, 0.431517, 0.431517, 0.433294, 0.437641",\ + "1.064965, 1.065357, 1.065376, 1.065376, 1.065376"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[4]_redg_min*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[24]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.170538, 0.344791, 0.534395, 0.834671, 1.413373",\ + "0.220382, 0.410357, 0.608123, 0.926913, 1.543930",\ + "0.296720, 0.496999, 0.695612, 1.028145, 1.678018",\ + "0.503635, 0.714092, 0.910615, 1.258034, 1.946089",\ + "1.056522, 1.269056, 1.463869, 1.813497, 2.508420",\ + "0.258747, 0.432108, 0.621676, 0.921976, 1.500726",\ + "0.308608, 0.497675, 0.695404, 1.014218, 1.631283",\ + "0.384956, 0.584317, 0.782893, 1.115450, 1.765372",\ + "0.591859, 0.801410, 0.997896, 1.345339, 2.033442",\ + "1.144699, 1.356374, 1.551150, 1.900803, 2.595773",\ + "0.340253, 0.512437, 0.701702, 1.002005, 1.580758",\ + "0.397921, 0.578003, 0.775430, 1.094246, 1.711315",\ + "0.474302, 0.664646, 0.862920, 1.195478, 1.845403",\ + "0.681166, 0.881738, 1.077923, 1.425368, 2.113474",\ + "1.233862, 1.436702, 1.631177, 1.980831, 2.675804",\ + "0.397891, 0.570245, 0.759425, 1.059457, 1.637819",\ + "0.461736, 0.635815, 0.833172, 1.151745, 1.768469",\ + "0.538147, 0.722460, 0.920664, 1.253017, 1.902637",\ + "0.744974, 0.939560, 1.135661, 1.482953, 2.170799",\ + "1.297532, 1.494526, 1.688912, 2.038425, 2.733147",\ + "0.700600, 0.875392, 1.063084, 1.362647, 1.940096",\ + "0.765324, 0.940987, 1.136834, 1.454975, 2.070858",\ + "0.851439, 1.027647, 1.224326, 1.556282, 2.205122",\ + "1.066882, 1.244797, 1.439323, 1.786257, 2.473396",\ + "1.621173, 1.799784, 1.992573, 2.341736, 3.035763"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.138974, 0.138974, 0.138974, 0.148689, 0.172413",\ + "0.231167, 0.231167, 0.231167, 0.238024, 0.254767",\ + "0.397287, 0.397287, 0.397287, 0.400375, 0.407916",\ + "0.872442, 0.873368, 0.873689, 0.874395, 0.875876",\ + "2.139574, 2.140537, 2.140572, 2.140672, 2.140918",\ + "0.138974, 0.138974, 0.138974, 0.148689, 0.172413",\ + "0.231167, 0.231167, 0.231167, 0.238024, 0.254767",\ + "0.397287, 0.397287, 0.397287, 0.400375, 0.407916",\ + "0.872465, 0.873368, 0.873689, 0.874395, 0.875876",\ + "2.139599, 2.140537, 2.140572, 2.140672, 2.140918",\ + "0.138974, 0.138974, 0.138974, 0.148689, 0.172413",\ + "0.231167, 0.231167, 0.231167, 0.238024, 0.254767",\ + "0.397287, 0.397287, 0.397287, 0.400375, 0.407916",\ + "0.872537, 0.873368, 0.873689, 0.874395, 0.875876",\ + "2.139673, 2.140537, 2.140572, 2.140672, 2.140918",\ + "0.138974, 0.138974, 0.138974, 0.148718, 0.172471",\ + "0.231167, 0.231167, 0.231167, 0.238044, 0.254807",\ + "0.397287, 0.397287, 0.397287, 0.400384, 0.407935",\ + "0.872606, 0.873372, 0.873689, 0.874396, 0.875879",\ + "2.139745, 2.140541, 2.140572, 2.140673, 2.140918",\ + "0.138974, 0.138974, 0.138974, 0.148743, 0.172540",\ + "0.231167, 0.231167, 0.231167, 0.238062, 0.254856",\ + "0.397287, 0.397287, 0.397287, 0.400392, 0.407957",\ + "0.872562, 0.873396, 0.873689, 0.874398, 0.875884",\ + "2.139699, 2.140566, 2.140572, 2.140673, 2.140919"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.114471, 0.367066, 0.558465, 0.861628, 1.446142",\ + "0.150570, 0.396419, 0.587661, 0.892759, 1.482112",\ + "0.204674, 0.442227, 0.633125, 0.939020, 1.530584",\ + "0.336064, 0.565592, 0.755956, 1.061790, 1.653617",\ + "0.673293, 0.896815, 1.086094, 1.390763, 1.980611",\ + "0.202627, 0.454384, 0.645746, 0.948933, 1.533495",\ + "0.238831, 0.483737, 0.674942, 0.980064, 1.569466",\ + "0.292913, 0.529545, 0.720406, 1.026325, 1.617937",\ + "0.424271, 0.652910, 0.843237, 1.149095, 1.740970",\ + "0.761475, 0.984133, 1.173375, 1.478068, 2.067965",\ + "0.291726, 0.534712, 0.725773, 1.028962, 1.613527",\ + "0.328254, 0.564066, 0.754969, 1.060092, 1.649498",\ + "0.382266, 0.609874, 0.800433, 1.106354, 1.697969",\ + "0.513528, 0.733239, 0.923264, 1.229123, 1.821002",\ + "0.850652, 1.064461, 1.253402, 1.558096, 2.147996",\ + "0.355336, 0.592555, 0.783499, 1.086421, 1.670602",\ + "0.392174, 0.621907, 0.812695, 1.117557, 1.706585",\ + "0.446119, 0.667711, 0.858158, 1.163821, 1.755061",\ + "0.577288, 0.791071, 0.980987, 1.286592, 1.878095",\ + "0.914335, 1.122288, 1.311124, 1.615562, 2.205085",\ + "0.691472, 0.897945, 1.087159, 1.389617, 1.972896",\ + "0.730295, 0.927282, 1.116354, 1.420759, 2.008893",\ + "0.783810, 0.973061, 1.161817, 1.467025, 2.057376",\ + "0.914389, 1.096386, 1.284647, 1.589795, 2.180410",\ + "1.248447, 1.427560, 1.614782, 1.918764, 2.507394"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.055015, 0.067356, 0.073976, 0.088784, 0.119708",\ + "0.104870, 0.104870, 0.106669, 0.116295, 0.138275",\ + "0.190674, 0.190674, 0.191255, 0.196129, 0.207539",\ + "0.432838, 0.433934, 0.434139, 0.435063, 0.437176",\ + "1.062723, 1.062723, 1.063223, 1.064130, 1.065922",\ + "0.055327, 0.067356, 0.073976, 0.088784, 0.119708",\ + "0.104870, 0.104870, 0.106669, 0.116295, 0.138275",\ + "0.190674, 0.190674, 0.191255, 0.196129, 0.207539",\ + "0.432865, 0.433934, 0.434139, 0.435063, 0.437176",\ + "1.062723, 1.062723, 1.063223, 1.064130, 1.065922",\ + "0.056284, 0.067356, 0.073976, 0.088784, 0.119708",\ + "0.104870, 0.104870, 0.106669, 0.116295, 0.138275",\ + "0.190674, 0.190674, 0.191255, 0.196129, 0.207539",\ + "0.432950, 0.433934, 0.434139, 0.435063, 0.437176",\ + "1.062723, 1.062723, 1.063223, 1.064130, 1.065922",\ + "0.057202, 0.067402, 0.073991, 0.088822, 0.119782",\ + "0.104870, 0.104870, 0.106673, 0.116322, 0.138328",\ + "0.190674, 0.190674, 0.191256, 0.196143, 0.207567",\ + "0.433032, 0.433938, 0.434140, 0.435065, 0.437181",\ + "1.062723, 1.062723, 1.063224, 1.064132, 1.065926",\ + "0.063072, 0.067724, 0.073993, 0.088854, 0.119873",\ + "0.104870, 0.104870, 0.106674, 0.116345, 0.138392",\ + "0.190674, 0.190674, 0.191256, 0.196155, 0.207600",\ + "0.433553, 0.433966, 0.434140, 0.435067, 0.437187",\ + "1.062723, 1.062723, 1.063224, 1.064134, 1.065932"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[4]_redg_min_2340*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[27]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.337877, 0.567396, 0.751267, 1.044506, 1.611115",\ + "0.385816, 0.615335, 0.799206, 1.092445, 1.659054",\ + "0.487851, 0.717370, 0.901241, 1.194480, 1.761089",\ + "0.725267, 0.954786, 1.138657, 1.431895, 1.998505",\ + "1.296926, 1.526444, 1.710315, 2.003554, 2.570163",\ + "0.426171, 0.654713, 0.838548, 1.131811, 1.698468",\ + "0.474110, 0.702653, 0.886487, 1.179750, 1.746408",\ + "0.576145, 0.804687, 0.988522, 1.281785, 1.848443",\ + "0.813561, 1.042103, 1.225938, 1.519201, 2.085858",\ + "1.385220, 1.613762, 1.797596, 2.090859, 2.657517",\ + "0.515866, 0.735041, 0.918575, 1.211839, 1.778500",\ + "0.563806, 0.782980, 0.966514, 1.259778, 1.826439",\ + "0.665841, 0.885015, 1.068549, 1.361813, 1.928474",\ + "0.903256, 1.122430, 1.305965, 1.599229, 2.165890",\ + "1.474915, 1.694089, 1.877623, 2.170888, 2.737548",\ + "0.580118, 0.792869, 0.976284, 1.269277, 1.835533",\ + "0.628057, 0.840809, 1.024223, 1.317216, 1.883472",\ + "0.730092, 0.942843, 1.126258, 1.419251, 1.985507",\ + "0.967507, 1.180259, 1.363673, 1.656667, 2.222923",\ + "1.539166, 1.751918, 1.935332, 2.228325, 2.794581",\ + "0.919018, 1.098154, 1.279940, 1.572454, 2.137775",\ + "0.966958, 1.146093, 1.327879, 1.620393, 2.185715",\ + "1.068992, 1.248128, 1.429914, 1.722428, 2.287750",\ + "1.306408, 1.485543, 1.667330, 1.959844, 2.525165",\ + "1.878067, 2.057202, 2.238988, 2.531503, 3.096824"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.032950, 0.032950, 0.032950, 0.032950, 0.032950",\ + "0.148290, 0.148290, 0.148290, 0.148290, 0.148290",\ + "0.376177, 0.376177, 0.376177, 0.376177, 0.376177",\ + "0.871096, 0.871096, 0.871096, 0.871096, 0.871096",\ + "2.136637, 2.136637, 2.136637, 2.136637, 2.136637",\ + "0.032950, 0.032950, 0.032950, 0.032950, 0.032950",\ + "0.148290, 0.148290, 0.148290, 0.148290, 0.148290",\ + "0.376177, 0.376177, 0.376177, 0.376177, 0.376177",\ + "0.871096, 0.871096, 0.871096, 0.871096, 0.871096",\ + "2.136637, 2.136637, 2.136637, 2.136637, 2.136637",\ + "0.032950, 0.032950, 0.032950, 0.032950, 0.032950",\ + "0.148290, 0.148290, 0.148290, 0.148290, 0.148290",\ + "0.376177, 0.376177, 0.376177, 0.376177, 0.376177",\ + "0.871096, 0.871096, 0.871096, 0.871096, 0.871096",\ + "2.136637, 2.136637, 2.136637, 2.136637, 2.136637",\ + "0.032950, 0.032950, 0.032950, 0.032950, 0.032950",\ + "0.148290, 0.148290, 0.148290, 0.148290, 0.148290",\ + "0.376177, 0.376177, 0.376177, 0.376177, 0.376177",\ + "0.871096, 0.871096, 0.871096, 0.871096, 0.871096",\ + "2.136637, 2.136637, 2.136637, 2.136637, 2.136637",\ + "0.032950, 0.032950, 0.032950, 0.032950, 0.032950",\ + "0.148290, 0.148290, 0.148290, 0.148290, 0.148290",\ + "0.376177, 0.376177, 0.376177, 0.376177, 0.376177",\ + "0.871096, 0.871096, 0.871096, 0.871096, 0.871096",\ + "2.136637, 2.136637, 2.136637, 2.136637, 2.136637"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.372253, 0.601881, 0.784032, 1.076595, 1.643049",\ + "0.397511, 0.627029, 0.810901, 1.104139, 1.670748",\ + "0.438896, 0.668415, 0.852286, 1.145524, 1.712134",\ + "0.561215, 0.790734, 0.974605, 1.267843, 1.834453",\ + "0.893448, 1.122967, 1.306838, 1.600076, 2.166686",\ + "0.460528, 0.689198, 0.871313, 1.163900, 1.730402",\ + "0.485805, 0.714347, 0.898181, 1.191444, 1.758102",\ + "0.527190, 0.755732, 0.939567, 1.232830, 1.799487",\ + "0.649509, 0.878051, 1.061886, 1.355149, 1.921806",\ + "0.981742, 1.210284, 1.394119, 1.687381, 2.254039",\ + "0.550165, 0.769525, 0.951340, 1.243928, 1.810434",\ + "0.575500, 0.794674, 0.978208, 1.271473, 1.838133",\ + "0.616885, 0.836059, 1.019594, 1.312858, 1.879519",\ + "0.739204, 0.958378, 1.141913, 1.435177, 2.001838",\ + "1.071437, 1.290611, 1.474146, 1.767410, 2.334071",\ + "0.614360, 0.827361, 1.009044, 1.301366, 1.867467",\ + "0.639751, 0.852503, 1.035917, 1.328910, 1.895166",\ + "0.681136, 0.893888, 1.077302, 1.370296, 1.936552",\ + "0.803456, 1.016207, 1.199622, 1.492615, 2.058871",\ + "1.135688, 1.348440, 1.531854, 1.824847, 2.391104",\ + "0.951814, 1.132696, 1.312700, 1.604543, 2.169709",\ + "0.978652, 1.157787, 1.339573, 1.632088, 2.197409",\ + "1.020037, 1.199172, 1.380959, 1.673473, 2.238794",\ + "1.142356, 1.321491, 1.503278, 1.795792, 2.361114",\ + "1.474589, 1.653724, 1.835510, 2.128025, 2.693346"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.039649, 0.039649, 0.039649, 0.039649, 0.039649",\ + "0.089554, 0.089554, 0.089554, 0.089554, 0.089554",\ + "0.186013, 0.186013, 0.186013, 0.186013, 0.186013",\ + "0.432402, 0.432402, 0.432402, 0.432402, 0.432402",\ + "1.065031, 1.065031, 1.065031, 1.065031, 1.065031",\ + "0.039649, 0.039649, 0.039649, 0.039649, 0.039649",\ + "0.089554, 0.089554, 0.089554, 0.089554, 0.089554",\ + "0.186013, 0.186013, 0.186013, 0.186013, 0.186013",\ + "0.432402, 0.432402, 0.432402, 0.432402, 0.432402",\ + "1.065031, 1.065031, 1.065031, 1.065031, 1.065031",\ + "0.039649, 0.039649, 0.039649, 0.039649, 0.039649",\ + "0.089554, 0.089554, 0.089554, 0.089554, 0.089554",\ + "0.186013, 0.186013, 0.186013, 0.186013, 0.186013",\ + "0.432402, 0.432402, 0.432402, 0.432402, 0.432402",\ + "1.065031, 1.065031, 1.065031, 1.065031, 1.065031",\ + "0.039649, 0.039649, 0.039649, 0.039649, 0.039649",\ + "0.089554, 0.089554, 0.089554, 0.089554, 0.089554",\ + "0.186013, 0.186013, 0.186013, 0.186013, 0.186013",\ + "0.432402, 0.432402, 0.432402, 0.432402, 0.432402",\ + "1.065031, 1.065031, 1.065031, 1.065031, 1.065031",\ + "0.039649, 0.039649, 0.039649, 0.039649, 0.039649",\ + "0.089554, 0.089554, 0.089554, 0.089554, 0.089554",\ + "0.186013, 0.186013, 0.186013, 0.186013, 0.186013",\ + "0.432402, 0.432402, 0.432402, 0.432402, 0.432402",\ + "1.065031, 1.065031, 1.065031, 1.065031, 1.065031"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[4]_redg_min_2710*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[31]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.323167, 0.539803, 0.719494, 1.009588, 1.571964",\ + "0.371106, 0.587742, 0.767433, 1.057527, 1.619903",\ + "0.473141, 0.689777, 0.869468, 1.159562, 1.721938",\ + "0.710557, 0.927193, 1.106884, 1.396978, 1.959354",\ + "1.282216, 1.498852, 1.678543, 1.968637, 2.531013",\ + "0.411457, 0.627121, 0.806775, 1.096893, 1.659318",\ + "0.459396, 0.675060, 0.854714, 1.144832, 1.707257",\ + "0.561431, 0.777095, 0.956749, 1.246867, 1.809292",\ + "0.798847, 1.014511, 1.194165, 1.484283, 2.046708",\ + "1.370506, 1.586170, 1.765824, 2.055942, 2.618367",\ + "0.500498, 0.707454, 0.886802, 1.176922, 1.739349",\ + "0.548437, 0.755393, 0.934741, 1.224860, 1.787288",\ + "0.650472, 0.857428, 1.036776, 1.326895, 1.889323",\ + "0.887888, 1.094844, 1.274192, 1.564311, 2.126739",\ + "1.459547, 1.666503, 1.845851, 2.135971, 2.698398",\ + "0.563859, 0.765284, 0.944499, 1.234353, 1.796369",\ + "0.611798, 0.813223, 0.992438, 1.282292, 1.844308",\ + "0.713833, 0.915258, 1.094473, 1.384327, 1.946343",\ + "0.951249, 1.152674, 1.331889, 1.621743, 2.183759",\ + "1.522908, 1.724333, 1.903548, 2.193402, 2.755418",\ + "0.888835, 1.070603, 1.248155, 1.537527, 2.098596",\ + "0.936774, 1.118542, 1.296094, 1.585466, 2.146535",\ + "1.038809, 1.220577, 1.398129, 1.687501, 2.248570",\ + "1.276225, 1.457993, 1.635545, 1.924917, 2.485986",\ + "1.847884, 2.029652, 2.207204, 2.496576, 3.057645"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.032953, 0.032953, 0.032953, 0.032953, 0.032953",\ + "0.148289, 0.148289, 0.148289, 0.148289, 0.148289",\ + "0.376177, 0.376177, 0.376177, 0.376177, 0.376177",\ + "0.871095, 0.871095, 0.871095, 0.871095, 0.871095",\ + "2.136637, 2.136637, 2.136637, 2.136637, 2.136637",\ + "0.032953, 0.032953, 0.032953, 0.032953, 0.032953",\ + "0.148289, 0.148289, 0.148289, 0.148289, 0.148289",\ + "0.376177, 0.376177, 0.376177, 0.376177, 0.376177",\ + "0.871095, 0.871095, 0.871095, 0.871095, 0.871095",\ + "2.136637, 2.136637, 2.136637, 2.136637, 2.136637",\ + "0.032953, 0.032953, 0.032953, 0.032953, 0.032953",\ + "0.148289, 0.148289, 0.148289, 0.148289, 0.148289",\ + "0.376177, 0.376177, 0.376177, 0.376177, 0.376177",\ + "0.871095, 0.871095, 0.871095, 0.871095, 0.871095",\ + "2.136637, 2.136637, 2.136637, 2.136637, 2.136637",\ + "0.032953, 0.032953, 0.032953, 0.032953, 0.032953",\ + "0.148289, 0.148289, 0.148289, 0.148289, 0.148289",\ + "0.376177, 0.376177, 0.376177, 0.376177, 0.376177",\ + "0.871095, 0.871095, 0.871095, 0.871095, 0.871095",\ + "2.136637, 2.136637, 2.136637, 2.136637, 2.136637",\ + "0.032953, 0.032953, 0.032953, 0.032953, 0.032953",\ + "0.148289, 0.148289, 0.148289, 0.148289, 0.148289",\ + "0.376177, 0.376177, 0.376177, 0.376177, 0.376177",\ + "0.871095, 0.871095, 0.871095, 0.871095, 0.871095",\ + "2.136637, 2.136637, 2.136637, 2.136637, 2.136637"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.360736, 0.577372, 0.757063, 1.047157, 1.609533",\ + "0.382801, 0.599437, 0.779128, 1.069222, 1.631598",\ + "0.424186, 0.640822, 0.820514, 1.110608, 1.672984",\ + "0.546505, 0.763141, 0.942833, 1.232926, 1.795303",\ + "0.878738, 1.095374, 1.275065, 1.565159, 2.127535",\ + "0.449026, 0.664690, 0.844344, 1.134462, 1.696887",\ + "0.471091, 0.686755, 0.866409, 1.156527, 1.718952",\ + "0.512477, 0.728141, 0.907795, 1.197913, 1.760337",\ + "0.634796, 0.850460, 1.030114, 1.320232, 1.882656",\ + "0.967028, 1.182692, 1.362346, 1.652464, 2.214889",\ + "0.538067, 0.745023, 0.924371, 1.214491, 1.776918",\ + "0.560132, 0.767088, 0.946436, 1.236556, 1.798984",\ + "0.601517, 0.808473, 0.987821, 1.277941, 1.840369",\ + "0.723837, 0.930792, 1.110141, 1.400260, 1.962688",\ + "1.056069, 1.263025, 1.442373, 1.732492, 2.294920",\ + "0.601428, 0.802853, 0.982068, 1.271922, 1.833938",\ + "0.623493, 0.824919, 1.004133, 1.293988, 1.856004",\ + "0.664878, 0.866304, 1.045519, 1.335373, 1.897389",\ + "0.787198, 0.988623, 1.167838, 1.457692, 2.019708",\ + "1.119430, 1.320855, 1.500070, 1.789924, 2.351940",\ + "0.926404, 1.108172, 1.285724, 1.575096, 2.136165",\ + "0.948469, 1.130237, 1.307790, 1.597161, 2.158231",\ + "0.989855, 1.171622, 1.349175, 1.638546, 2.199616",\ + "1.112174, 1.293941, 1.471494, 1.760865, 2.321935",\ + "1.444406, 1.626174, 1.803726, 2.093098, 2.654167"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.039651, 0.039651, 0.039651, 0.039651, 0.039651",\ + "0.089556, 0.089556, 0.089556, 0.089556, 0.089556",\ + "0.186013, 0.186013, 0.186013, 0.186013, 0.186013",\ + "0.432402, 0.432402, 0.432402, 0.432402, 0.432402",\ + "1.065030, 1.065030, 1.065030, 1.065030, 1.065030",\ + "0.039651, 0.039651, 0.039651, 0.039651, 0.039651",\ + "0.089556, 0.089556, 0.089556, 0.089556, 0.089556",\ + "0.186013, 0.186013, 0.186013, 0.186013, 0.186013",\ + "0.432402, 0.432402, 0.432402, 0.432402, 0.432402",\ + "1.065030, 1.065030, 1.065030, 1.065030, 1.065030",\ + "0.039651, 0.039651, 0.039651, 0.039651, 0.039651",\ + "0.089556, 0.089556, 0.089556, 0.089556, 0.089556",\ + "0.186013, 0.186013, 0.186013, 0.186013, 0.186013",\ + "0.432402, 0.432402, 0.432402, 0.432402, 0.432402",\ + "1.065030, 1.065030, 1.065030, 1.065030, 1.065030",\ + "0.039651, 0.039651, 0.039651, 0.039651, 0.039651",\ + "0.089556, 0.089556, 0.089556, 0.089556, 0.089556",\ + "0.186013, 0.186013, 0.186013, 0.186013, 0.186013",\ + "0.432402, 0.432402, 0.432402, 0.432402, 0.432402",\ + "1.065030, 1.065030, 1.065030, 1.065030, 1.065030",\ + "0.039651, 0.039651, 0.039651, 0.039651, 0.039651",\ + "0.089556, 0.089556, 0.089556, 0.089556, 0.089556",\ + "0.186013, 0.186013, 0.186013, 0.186013, 0.186013",\ + "0.432402, 0.432402, 0.432402, 0.432402, 0.432402",\ + "1.065030, 1.065030, 1.065030, 1.065030, 1.065030"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[4]_redg_min_2399*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[32]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.393798, 0.608317, 0.787191, 1.076625, 1.638145",\ + "0.443659, 0.658178, 0.837052, 1.126486, 1.688006",\ + "0.545527, 0.760046, 0.938920, 1.228354, 1.789874",\ + "0.783388, 0.997908, 1.176781, 1.466215, 2.027735",\ + "1.355708, 1.570228, 1.749101, 2.038536, 2.600056",\ + "0.482072, 0.695635, 0.874472, 1.163930, 1.725499",\ + "0.531933, 0.745496, 0.924333, 1.213791, 1.775360",\ + "0.633801, 0.847364, 1.026201, 1.315659, 1.877228",\ + "0.871662, 1.085225, 1.264062, 1.553521, 2.115089",\ + "1.443982, 1.657546, 1.836382, 2.125841, 2.687409",\ + "0.571616, 0.775963, 0.954499, 1.243959, 1.805530",\ + "0.621477, 0.825824, 1.004360, 1.293820, 1.855391",\ + "0.723345, 0.927692, 1.106228, 1.395688, 1.957259",\ + "0.961206, 1.165553, 1.344089, 1.633549, 2.195120",\ + "1.533526, 1.737874, 1.916409, 2.205869, 2.767441",\ + "0.635684, 0.833793, 1.012195, 1.301390, 1.862550",\ + "0.685545, 0.883654, 1.062056, 1.351251, 1.912411",\ + "0.787413, 0.985522, 1.163924, 1.453119, 2.014279",\ + "1.025275, 1.223383, 1.401785, 1.690980, 2.252141",\ + "1.597595, 1.795703, 1.974106, 2.263301, 2.824461",\ + "0.959458, 1.139086, 1.315850, 1.604562, 2.164778",\ + "1.009318, 1.188946, 1.365711, 1.654423, 2.214639",\ + "1.111187, 1.290814, 1.467579, 1.756291, 2.316507",\ + "1.349048, 1.528676, 1.705440, 1.994153, 2.554368",\ + "1.921368, 2.100996, 2.277760, 2.566473, 3.126688"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.039801, 0.039801, 0.039801, 0.039801, 0.039801",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375010, 0.375010, 0.375010, 0.375010, 0.375010",\ + "0.869309, 0.869309, 0.869309, 0.869309, 0.869309",\ + "2.137202, 2.137202, 2.137202, 2.137202, 2.137202",\ + "0.039801, 0.039801, 0.039801, 0.039801, 0.039801",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375010, 0.375010, 0.375010, 0.375010, 0.375010",\ + "0.869309, 0.869309, 0.869309, 0.869309, 0.869309",\ + "2.137202, 2.137202, 2.137202, 2.137202, 2.137202",\ + "0.039801, 0.039801, 0.039801, 0.039801, 0.039801",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375010, 0.375010, 0.375010, 0.375010, 0.375010",\ + "0.869309, 0.869309, 0.869309, 0.869309, 0.869309",\ + "2.137202, 2.137202, 2.137202, 2.137202, 2.137202",\ + "0.039801, 0.039801, 0.039801, 0.039801, 0.039801",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375010, 0.375010, 0.375010, 0.375010, 0.375010",\ + "0.869309, 0.869309, 0.869309, 0.869309, 0.869309",\ + "2.137202, 2.137202, 2.137202, 2.137202, 2.137202",\ + "0.039801, 0.039801, 0.039801, 0.039801, 0.039801",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375010, 0.375010, 0.375010, 0.375010, 0.375010",\ + "0.869309, 0.869309, 0.869309, 0.869309, 0.869309",\ + "2.137202, 2.137202, 2.137202, 2.137202, 2.137202"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.434527, 0.649046, 0.827920, 1.117354, 1.678874",\ + "0.456877, 0.671396, 0.850269, 1.139704, 1.701224",\ + "0.498240, 0.712759, 0.891633, 1.181067, 1.742587",\ + "0.620276, 0.834795, 1.013668, 1.303103, 1.864623",\ + "0.951889, 1.166408, 1.345281, 1.634716, 2.196236",\ + "0.522801, 0.736364, 0.915201, 1.204659, 1.766227",\ + "0.545151, 0.758714, 0.937550, 1.227009, 1.788577",\ + "0.586514, 0.800077, 0.978914, 1.268372, 1.829941",\ + "0.708550, 0.922113, 1.100950, 1.390408, 1.951976",\ + "1.040162, 1.253726, 1.432562, 1.722021, 2.283589",\ + "0.612344, 0.816692, 0.995228, 1.284688, 1.846259",\ + "0.634694, 0.839042, 1.017577, 1.307038, 1.868609",\ + "0.676058, 0.880405, 1.058941, 1.348401, 1.909972",\ + "0.798093, 1.002441, 1.180976, 1.470437, 2.032008",\ + "1.129706, 1.334054, 1.512589, 1.802049, 2.363621",\ + "0.676413, 0.874521, 1.052924, 1.342119, 1.903279",\ + "0.698763, 0.896871, 1.075274, 1.364469, 1.925629",\ + "0.740127, 0.938235, 1.116637, 1.405832, 1.966993",\ + "0.862162, 1.060270, 1.238673, 1.527868, 2.089028",\ + "1.193775, 1.391883, 1.570286, 1.859481, 2.420641",\ + "1.000186, 1.179814, 1.356578, 1.645291, 2.205507",\ + "1.022536, 1.202164, 1.378928, 1.667641, 2.227856",\ + "1.063900, 1.243527, 1.420292, 1.709004, 2.269220",\ + "1.185935, 1.365563, 1.542327, 1.831040, 2.391255",\ + "1.517548, 1.697176, 1.873940, 2.162653, 2.722868"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003362, 0.076361, 0.163024, 0.322686, 0.642011"); + values ( "0.045856, 0.045856, 0.045856, 0.045856, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045856, 0.045856, 0.045856, 0.045856, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045856, 0.045856, 0.045856, 0.045856, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045856, 0.045856, 0.045856, 0.045856, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045856, 0.045856, 0.045856, 0.045856, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[4]_redg_min_2477*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[34]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.454939, 0.667221, 0.852612, 1.143493, 1.702667",\ + "0.502878, 0.715160, 0.900551, 1.191432, 1.750605",\ + "0.604913, 0.817195, 1.002586, 1.293467, 1.852640",\ + "0.842329, 1.054611, 1.240002, 1.530883, 2.090056",\ + "1.413988, 1.626270, 1.811661, 2.102542, 2.661716",\ + "0.543302, 0.754540, 0.939893, 1.230798, 1.790020",\ + "0.591241, 0.802479, 0.987832, 1.278737, 1.837959",\ + "0.693276, 0.904514, 1.089867, 1.380772, 1.939994",\ + "0.930692, 1.141930, 1.327283, 1.618188, 2.177410",\ + "1.502351, 1.713589, 1.898942, 2.189847, 2.749069",\ + "0.632361, 0.834874, 1.019920, 1.310827, 1.870051",\ + "0.680300, 0.882813, 1.067859, 1.358765, 1.917990",\ + "0.782335, 0.984848, 1.169894, 1.460800, 2.020025",\ + "1.019751, 1.222264, 1.407310, 1.698216, 2.257441",\ + "1.591410, 1.793923, 1.978969, 2.269875, 2.829100",\ + "0.695656, 0.892702, 1.077631, 1.368254, 1.927063",\ + "0.743595, 0.940641, 1.125570, 1.416193, 1.975002",\ + "0.845629, 1.042676, 1.227605, 1.518228, 2.077037",\ + "1.083045, 1.280092, 1.465021, 1.755644, 2.314453",\ + "1.654704, 1.851751, 2.036680, 2.327303, 2.886112",\ + "1.016280, 1.198005, 1.381290, 1.671425, 2.229280",\ + "1.064219, 1.245944, 1.429229, 1.719364, 2.277219",\ + "1.166254, 1.347979, 1.531264, 1.821398, 2.379254",\ + "1.403669, 1.585395, 1.768679, 2.058815, 2.616670",\ + "1.975328, 2.157054, 2.340338, 2.630474, 3.188329"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.032953, 0.032953, 0.032953, 0.032953, 0.032953",\ + "0.148289, 0.148289, 0.148289, 0.148289, 0.148289",\ + "0.376177, 0.376177, 0.376177, 0.376177, 0.376177",\ + "0.871096, 0.871096, 0.871096, 0.871096, 0.871096",\ + "2.136637, 2.136637, 2.136637, 2.136637, 2.136637",\ + "0.032953, 0.032953, 0.032953, 0.032953, 0.032953",\ + "0.148289, 0.148289, 0.148289, 0.148289, 0.148289",\ + "0.376177, 0.376177, 0.376177, 0.376177, 0.376177",\ + "0.871096, 0.871096, 0.871096, 0.871096, 0.871096",\ + "2.136637, 2.136637, 2.136637, 2.136637, 2.136637",\ + "0.032953, 0.032953, 0.032953, 0.032953, 0.032953",\ + "0.148289, 0.148289, 0.148289, 0.148289, 0.148289",\ + "0.376177, 0.376177, 0.376177, 0.376177, 0.376177",\ + "0.871096, 0.871096, 0.871096, 0.871096, 0.871096",\ + "2.136637, 2.136637, 2.136637, 2.136637, 2.136637",\ + "0.032953, 0.032953, 0.032953, 0.032953, 0.032953",\ + "0.148289, 0.148289, 0.148289, 0.148289, 0.148289",\ + "0.376177, 0.376177, 0.376177, 0.376177, 0.376177",\ + "0.871096, 0.871096, 0.871096, 0.871096, 0.871096",\ + "2.136637, 2.136637, 2.136637, 2.136637, 2.136637",\ + "0.032953, 0.032953, 0.032953, 0.032953, 0.032953",\ + "0.148289, 0.148289, 0.148289, 0.148289, 0.148289",\ + "0.376177, 0.376177, 0.376177, 0.376177, 0.376177",\ + "0.871096, 0.871096, 0.871096, 0.871096, 0.871096",\ + "2.136637, 2.136637, 2.136637, 2.136637, 2.136637"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.492508, 0.704790, 0.890181, 1.181062, 1.740236",\ + "0.514573, 0.726856, 0.912247, 1.203127, 1.762301",\ + "0.555959, 0.768241, 0.953632, 1.244512, 1.803686",\ + "0.678278, 0.890560, 1.075951, 1.366831, 1.926005",\ + "1.010510, 1.222792, 1.408183, 1.699064, 2.258237",\ + "0.580871, 0.792109, 0.977462, 1.268367, 1.827589",\ + "0.602936, 0.814174, 0.999527, 1.290432, 1.849654",\ + "0.644321, 0.855559, 1.040913, 1.331817, 1.891039",\ + "0.766640, 0.977878, 1.163232, 1.454136, 2.013358",\ + "1.098873, 1.310111, 1.495464, 1.786369, 2.345591",\ + "0.669930, 0.872443, 1.057489, 1.348396, 1.907620",\ + "0.691995, 0.894508, 1.079554, 1.370461, 1.929686",\ + "0.733381, 0.935894, 1.120940, 1.411846, 1.971071",\ + "0.855700, 1.058213, 1.243259, 1.534165, 2.093390",\ + "1.187932, 1.390445, 1.575491, 1.866397, 2.425622",\ + "0.733225, 0.930271, 1.115200, 1.405823, 1.964632",\ + "0.755290, 0.952336, 1.137265, 1.427888, 1.986697",\ + "0.796675, 0.993721, 1.178650, 1.469274, 2.028083",\ + "0.918994, 1.116040, 1.300969, 1.591593, 2.150402",\ + "1.251227, 1.448273, 1.633202, 1.923825, 2.482634",\ + "1.053849, 1.235574, 1.418859, 1.708994, 2.266849",\ + "1.075914, 1.257639, 1.440924, 1.731059, 2.288914",\ + "1.117299, 1.299025, 1.482309, 1.772444, 2.330299",\ + "1.239618, 1.421344, 1.604628, 1.894763, 2.452619",\ + "1.571851, 1.753576, 1.936861, 2.226995, 2.784851"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.039651, 0.039651, 0.039651, 0.039651, 0.039651",\ + "0.089555, 0.089555, 0.089555, 0.089555, 0.089555",\ + "0.186013, 0.186013, 0.186013, 0.186013, 0.186013",\ + "0.432402, 0.432402, 0.432402, 0.432402, 0.432402",\ + "1.065030, 1.065030, 1.065030, 1.065030, 1.065030",\ + "0.039651, 0.039651, 0.039651, 0.039651, 0.039651",\ + "0.089555, 0.089555, 0.089555, 0.089555, 0.089555",\ + "0.186013, 0.186013, 0.186013, 0.186013, 0.186013",\ + "0.432402, 0.432402, 0.432402, 0.432402, 0.432402",\ + "1.065030, 1.065030, 1.065030, 1.065030, 1.065030",\ + "0.039651, 0.039651, 0.039651, 0.039651, 0.039651",\ + "0.089555, 0.089555, 0.089555, 0.089555, 0.089555",\ + "0.186013, 0.186013, 0.186013, 0.186013, 0.186013",\ + "0.432402, 0.432402, 0.432402, 0.432402, 0.432402",\ + "1.065030, 1.065030, 1.065030, 1.065030, 1.065030",\ + "0.039651, 0.039651, 0.039651, 0.039651, 0.039651",\ + "0.089555, 0.089555, 0.089555, 0.089555, 0.089555",\ + "0.186013, 0.186013, 0.186013, 0.186013, 0.186013",\ + "0.432402, 0.432402, 0.432402, 0.432402, 0.432402",\ + "1.065030, 1.065030, 1.065030, 1.065030, 1.065030",\ + "0.039651, 0.039651, 0.039651, 0.039651, 0.039651",\ + "0.089555, 0.089555, 0.089555, 0.089555, 0.089555",\ + "0.186013, 0.186013, 0.186013, 0.186013, 0.186013",\ + "0.432402, 0.432402, 0.432402, 0.432402, 0.432402",\ + "1.065030, 1.065030, 1.065030, 1.065030, 1.065030"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[4]_redg_min_2561*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[35]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.429494, 0.640486, 0.817408, 1.101335, 1.650898",\ + "0.477433, 0.688425, 0.865347, 1.149274, 1.698837",\ + "0.579467, 0.790460, 0.967382, 1.251309, 1.800872",\ + "0.816883, 1.027876, 1.204798, 1.488725, 2.038288",\ + "1.388543, 1.599535, 1.776457, 2.060384, 2.609947",\ + "0.517769, 0.727804, 0.904689, 1.188640, 1.738251",\ + "0.565708, 0.775743, 0.952628, 1.236579, 1.786190",\ + "0.667743, 0.877778, 1.054663, 1.338614, 1.888225",\ + "0.905159, 1.115194, 1.292079, 1.576030, 2.125641",\ + "1.476818, 1.686853, 1.863738, 2.147689, 2.697300",\ + "0.606719, 0.808137, 0.984716, 1.268669, 1.818283",\ + "0.654658, 0.856076, 1.032655, 1.316607, 1.866222",\ + "0.756693, 0.958111, 1.134690, 1.418642, 1.968257",\ + "0.994109, 1.195527, 1.372106, 1.656058, 2.205673",\ + "1.565768, 1.767186, 1.943765, 2.227717, 2.777332",\ + "0.669974, 0.865958, 1.042407, 1.326085, 1.875272",\ + "0.717913, 0.913897, 1.090346, 1.374024, 1.923211",\ + "0.819948, 1.015932, 1.192381, 1.476059, 2.025246",\ + "1.057364, 1.253348, 1.429797, 1.713475, 2.262662",\ + "1.629023, 1.825007, 2.001456, 2.285134, 2.834321",\ + "0.991556, 1.171211, 1.346062, 1.629245, 2.177461",\ + "1.039495, 1.219150, 1.394001, 1.677184, 2.225400",\ + "1.141530, 1.321185, 1.496036, 1.779219, 2.327435",\ + "1.378946, 1.558601, 1.733452, 2.016635, 2.564851",\ + "1.950605, 2.130260, 2.305111, 2.588294, 3.136510"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.032953, 0.032953, 0.032953, 0.032953, 0.032953",\ + "0.148289, 0.148289, 0.148289, 0.148289, 0.148289",\ + "0.376177, 0.376177, 0.376177, 0.376177, 0.376177",\ + "0.871096, 0.871096, 0.871096, 0.871096, 0.871096",\ + "2.136637, 2.136637, 2.136637, 2.136637, 2.136637",\ + "0.032953, 0.032953, 0.032953, 0.032953, 0.032953",\ + "0.148289, 0.148289, 0.148289, 0.148289, 0.148289",\ + "0.376177, 0.376177, 0.376177, 0.376177, 0.376177",\ + "0.871096, 0.871096, 0.871096, 0.871096, 0.871096",\ + "2.136637, 2.136637, 2.136637, 2.136637, 2.136637",\ + "0.032953, 0.032953, 0.032953, 0.032953, 0.032953",\ + "0.148289, 0.148289, 0.148289, 0.148289, 0.148289",\ + "0.376177, 0.376177, 0.376177, 0.376177, 0.376177",\ + "0.871096, 0.871096, 0.871096, 0.871096, 0.871096",\ + "2.136637, 2.136637, 2.136637, 2.136637, 2.136637",\ + "0.032953, 0.032953, 0.032953, 0.032953, 0.032953",\ + "0.148289, 0.148289, 0.148289, 0.148289, 0.148289",\ + "0.376177, 0.376177, 0.376177, 0.376177, 0.376177",\ + "0.871096, 0.871096, 0.871096, 0.871096, 0.871096",\ + "2.136637, 2.136637, 2.136637, 2.136637, 2.136637",\ + "0.032953, 0.032953, 0.032953, 0.032953, 0.032953",\ + "0.148289, 0.148289, 0.148289, 0.148289, 0.148289",\ + "0.376177, 0.376177, 0.376177, 0.376177, 0.376177",\ + "0.871096, 0.871096, 0.871096, 0.871096, 0.871096",\ + "2.136637, 2.136637, 2.136637, 2.136637, 2.136637"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.467063, 0.678055, 0.854977, 1.138904, 1.688467",\ + "0.489128, 0.700120, 0.877042, 1.160969, 1.710532",\ + "0.530513, 0.741505, 0.918428, 1.202354, 1.751917",\ + "0.652832, 0.863824, 1.040747, 1.324673, 1.874236",\ + "0.985064, 1.196057, 1.372979, 1.656906, 2.206469",\ + "0.555338, 0.765373, 0.942258, 1.226209, 1.775820",\ + "0.577403, 0.787438, 0.964323, 1.248274, 1.797885",\ + "0.618789, 0.828824, 1.005709, 1.289660, 1.839271",\ + "0.741108, 0.951143, 1.128028, 1.411978, 1.961590",\ + "1.073340, 1.283375, 1.460260, 1.744211, 2.293822",\ + "0.644288, 0.845706, 1.022285, 1.306238, 1.855852",\ + "0.666353, 0.867771, 1.044350, 1.328303, 1.877917",\ + "0.707738, 0.909157, 1.085736, 1.369688, 1.919302",\ + "0.830057, 1.031476, 1.208055, 1.492007, 2.041621",\ + "1.162290, 1.363708, 1.540287, 1.824239, 2.373854",\ + "0.707543, 0.903527, 1.079976, 1.363654, 1.912841",\ + "0.729608, 0.925592, 1.102041, 1.385719, 1.934906",\ + "0.770994, 0.966978, 1.143427, 1.427104, 1.976291",\ + "0.893313, 1.089297, 1.265746, 1.549423, 2.098610",\ + "1.225545, 1.421529, 1.597978, 1.881656, 2.430843",\ + "1.029125, 1.208780, 1.383631, 1.666814, 2.215030",\ + "1.051190, 1.230845, 1.405696, 1.688879, 2.237095",\ + "1.092575, 1.272231, 1.447082, 1.730264, 2.278481",\ + "1.214894, 1.394550, 1.569401, 1.852583, 2.400800",\ + "1.547127, 1.726782, 1.901633, 2.184816, 2.733032"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.039651, 0.039651, 0.039651, 0.039651, 0.039651",\ + "0.089556, 0.089556, 0.089556, 0.089556, 0.089556",\ + "0.186013, 0.186013, 0.186013, 0.186013, 0.186013",\ + "0.432402, 0.432402, 0.432402, 0.432402, 0.432402",\ + "1.065030, 1.065030, 1.065030, 1.065030, 1.065030",\ + "0.039651, 0.039651, 0.039651, 0.039651, 0.039651",\ + "0.089556, 0.089556, 0.089556, 0.089556, 0.089556",\ + "0.186013, 0.186013, 0.186013, 0.186013, 0.186013",\ + "0.432402, 0.432402, 0.432402, 0.432402, 0.432402",\ + "1.065030, 1.065030, 1.065030, 1.065030, 1.065030",\ + "0.039651, 0.039651, 0.039651, 0.039651, 0.039651",\ + "0.089556, 0.089556, 0.089556, 0.089556, 0.089556",\ + "0.186013, 0.186013, 0.186013, 0.186013, 0.186013",\ + "0.432402, 0.432402, 0.432402, 0.432402, 0.432402",\ + "1.065030, 1.065030, 1.065030, 1.065030, 1.065030",\ + "0.039651, 0.039651, 0.039651, 0.039651, 0.039651",\ + "0.089556, 0.089556, 0.089556, 0.089556, 0.089556",\ + "0.186013, 0.186013, 0.186013, 0.186013, 0.186013",\ + "0.432402, 0.432402, 0.432402, 0.432402, 0.432402",\ + "1.065030, 1.065030, 1.065030, 1.065030, 1.065030",\ + "0.039651, 0.039651, 0.039651, 0.039651, 0.039651",\ + "0.089556, 0.089556, 0.089556, 0.089556, 0.089556",\ + "0.186013, 0.186013, 0.186013, 0.186013, 0.186013",\ + "0.432402, 0.432402, 0.432402, 0.432402, 0.432402",\ + "1.065030, 1.065030, 1.065030, 1.065030, 1.065030"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[4]_redg_min_2624*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[36]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.495805, 0.717554, 0.895492, 1.184407, 1.745240",\ + "0.543744, 0.765493, 0.943432, 1.232346, 1.793180",\ + "0.645779, 0.867528, 1.045467, 1.334381, 1.895214",\ + "0.883194, 1.104943, 1.282882, 1.571797, 2.132630",\ + "1.454853, 1.676602, 1.854541, 2.143455, 2.704289",\ + "0.584213, 0.804872, 0.982773, 1.271712, 1.832594",\ + "0.632152, 0.852811, 1.030712, 1.319651, 1.880533",\ + "0.734187, 0.954846, 1.132747, 1.421686, 1.982568",\ + "0.971603, 1.192262, 1.370163, 1.659102, 2.219983",\ + "1.543261, 1.763920, 1.941822, 2.230760, 2.791642",\ + "0.673303, 0.885207, 1.062800, 1.351740, 1.912625",\ + "0.721243, 0.933146, 1.110739, 1.399680, 1.960565",\ + "0.823277, 1.035181, 1.212774, 1.501714, 2.062599",\ + "1.060693, 1.272597, 1.450190, 1.739130, 2.300015",\ + "1.632352, 1.844256, 2.021849, 2.310789, 2.871674",\ + "0.736581, 0.943024, 1.120493, 1.409170, 1.969641",\ + "0.784520, 0.990963, 1.168432, 1.457109, 2.017580",\ + "0.886555, 1.092998, 1.270467, 1.559144, 2.119615",\ + "1.123971, 1.330414, 1.507883, 1.796560, 2.357030",\ + "1.695630, 1.902072, 2.079542, 2.368218, 2.928689",\ + "1.068830, 1.248253, 1.424150, 1.712342, 2.271862",\ + "1.116770, 1.296192, 1.472089, 1.760281, 2.319801",\ + "1.218804, 1.398227, 1.574124, 1.862316, 2.421836",\ + "1.456220, 1.635643, 1.811539, 2.099732, 2.659251",\ + "2.027879, 2.207301, 2.383198, 2.671391, 3.230910"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.032950, 0.032950, 0.032950, 0.032950, 0.032950",\ + "0.148290, 0.148290, 0.148290, 0.148290, 0.148290",\ + "0.376177, 0.376177, 0.376177, 0.376177, 0.376177",\ + "0.871096, 0.871096, 0.871096, 0.871096, 0.871096",\ + "2.136637, 2.136637, 2.136637, 2.136637, 2.136637",\ + "0.032950, 0.032950, 0.032950, 0.032950, 0.032950",\ + "0.148290, 0.148290, 0.148290, 0.148290, 0.148290",\ + "0.376177, 0.376177, 0.376177, 0.376177, 0.376177",\ + "0.871096, 0.871096, 0.871096, 0.871096, 0.871096",\ + "2.136637, 2.136637, 2.136637, 2.136637, 2.136637",\ + "0.032950, 0.032950, 0.032950, 0.032950, 0.032950",\ + "0.148290, 0.148290, 0.148290, 0.148290, 0.148290",\ + "0.376177, 0.376177, 0.376177, 0.376177, 0.376177",\ + "0.871096, 0.871096, 0.871096, 0.871096, 0.871096",\ + "2.136637, 2.136637, 2.136637, 2.136637, 2.136637",\ + "0.032950, 0.032950, 0.032950, 0.032950, 0.032950",\ + "0.148290, 0.148290, 0.148290, 0.148290, 0.148290",\ + "0.376177, 0.376177, 0.376177, 0.376177, 0.376177",\ + "0.871096, 0.871096, 0.871096, 0.871096, 0.871096",\ + "2.136637, 2.136637, 2.136637, 2.136637, 2.136637",\ + "0.032950, 0.032950, 0.032950, 0.032950, 0.032950",\ + "0.148290, 0.148290, 0.148290, 0.148290, 0.148290",\ + "0.376177, 0.376177, 0.376177, 0.376177, 0.376177",\ + "0.871096, 0.871096, 0.871096, 0.871096, 0.871096",\ + "2.136637, 2.136637, 2.136637, 2.136637, 2.136637"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.529176, 0.750903, 0.928871, 1.217786, 1.778615",\ + "0.555438, 0.777187, 0.955126, 1.244040, 1.804874",\ + "0.596823, 0.818572, 0.996511, 1.285426, 1.846259",\ + "0.719142, 0.940891, 1.118830, 1.407745, 1.968578",\ + "1.051375, 1.273124, 1.451063, 1.739977, 2.300811",\ + "0.617584, 0.838221, 1.016152, 1.305091, 1.865968",\ + "0.643846, 0.864506, 1.042407, 1.331345, 1.892227",\ + "0.685232, 0.905891, 1.083792, 1.372731, 1.933612",\ + "0.807551, 1.028210, 1.206111, 1.495050, 2.055932",\ + "1.139784, 1.360443, 1.538344, 1.827282, 2.388164",\ + "0.706675, 0.918556, 1.096179, 1.385120, 1.946000",\ + "0.732937, 0.944841, 1.122434, 1.411374, 1.972259",\ + "0.774322, 0.986226, 1.163819, 1.452759, 2.013644",\ + "0.896641, 1.108545, 1.286138, 1.575078, 2.135963",\ + "1.228874, 1.440778, 1.618371, 1.907311, 2.468196",\ + "0.769953, 0.976375, 1.153872, 1.442550, 2.003015",\ + "0.796215, 1.002657, 1.180127, 1.468804, 2.029274",\ + "0.837600, 1.044043, 1.221512, 1.510189, 2.070659",\ + "0.959919, 1.166362, 1.343831, 1.632508, 2.192978",\ + "1.292152, 1.498595, 1.676064, 1.964741, 2.525211",\ + "1.101828, 1.281614, 1.457528, 1.745722, 2.305236",\ + "1.128464, 1.307886, 1.483783, 1.771976, 2.331495",\ + "1.169849, 1.349272, 1.525168, 1.813361, 2.372880",\ + "1.292168, 1.471591, 1.647487, 1.935680, 2.495200",\ + "1.624401, 1.803824, 1.979720, 2.267913, 2.827432"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.039649, 0.039649, 0.039649, 0.039649, 0.039649",\ + "0.089554, 0.089554, 0.089554, 0.089554, 0.089554",\ + "0.186013, 0.186013, 0.186013, 0.186013, 0.186013",\ + "0.432402, 0.432402, 0.432402, 0.432402, 0.432402",\ + "1.065031, 1.065031, 1.065031, 1.065031, 1.065031",\ + "0.039649, 0.039649, 0.039649, 0.039649, 0.039649",\ + "0.089554, 0.089554, 0.089554, 0.089554, 0.089554",\ + "0.186013, 0.186013, 0.186013, 0.186013, 0.186013",\ + "0.432402, 0.432402, 0.432402, 0.432402, 0.432402",\ + "1.065031, 1.065031, 1.065031, 1.065031, 1.065031",\ + "0.039649, 0.039649, 0.039649, 0.039649, 0.039649",\ + "0.089554, 0.089554, 0.089554, 0.089554, 0.089554",\ + "0.186013, 0.186013, 0.186013, 0.186013, 0.186013",\ + "0.432402, 0.432402, 0.432402, 0.432402, 0.432402",\ + "1.065031, 1.065031, 1.065031, 1.065031, 1.065031",\ + "0.039649, 0.039649, 0.039649, 0.039649, 0.039649",\ + "0.089554, 0.089554, 0.089554, 0.089554, 0.089554",\ + "0.186013, 0.186013, 0.186013, 0.186013, 0.186013",\ + "0.432402, 0.432402, 0.432402, 0.432402, 0.432402",\ + "1.065031, 1.065031, 1.065031, 1.065031, 1.065031",\ + "0.039649, 0.039649, 0.039649, 0.039649, 0.039649",\ + "0.089554, 0.089554, 0.089554, 0.089554, 0.089554",\ + "0.186013, 0.186013, 0.186013, 0.186013, 0.186013",\ + "0.432402, 0.432402, 0.432402, 0.432402, 0.432402",\ + "1.065031, 1.065031, 1.065031, 1.065031, 1.065031"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[4]_redg_min_2674*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[37]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.473135, 0.702103, 0.886918, 1.182452, 1.753613",\ + "0.521074, 0.750043, 0.934857, 1.230392, 1.801553",\ + "0.623109, 0.852077, 1.036892, 1.332426, 1.903588",\ + "0.860525, 1.089493, 1.274307, 1.569842, 2.141003",\ + "1.432183, 1.661152, 1.845966, 2.141501, 2.712662",\ + "0.561467, 0.789422, 0.974199, 1.269758, 1.840967",\ + "0.609406, 0.837361, 1.022138, 1.317697, 1.888906",\ + "0.711441, 0.939396, 1.124173, 1.419731, 1.990941",\ + "0.948857, 1.176811, 1.361588, 1.657147, 2.228357",\ + "1.520515, 1.748470, 1.933247, 2.228806, 2.800015",\ + "0.650685, 0.869754, 1.054226, 1.349786, 1.920998",\ + "0.698624, 0.917693, 1.102165, 1.397725, 1.968938",\ + "0.800659, 1.019728, 1.204200, 1.499760, 2.070972",\ + "1.038074, 1.257143, 1.441615, 1.737176, 2.308388",\ + "1.609733, 1.828802, 2.013274, 2.308835, 2.880047",\ + "0.714235, 0.927578, 1.111935, 1.407229, 1.978040",\ + "0.762174, 0.975517, 1.159875, 1.455168, 2.025979",\ + "0.864209, 1.077552, 1.261909, 1.557203, 2.128014",\ + "1.101624, 1.314968, 1.499325, 1.794618, 2.365430",\ + "1.673283, 1.886627, 2.070984, 2.366277, 2.937088",\ + "1.050030, 1.232851, 1.415593, 1.710411, 2.280293",\ + "1.097969, 1.280791, 1.463533, 1.758350, 2.328232",\ + "1.200004, 1.382825, 1.565567, 1.860385, 2.430267",\ + "1.437420, 1.620241, 1.802983, 2.097801, 2.667683",\ + "2.009078, 2.191900, 2.374642, 2.669460, 3.239341"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.032950, 0.032950, 0.032950, 0.032950, 0.032950",\ + "0.148290, 0.148290, 0.148290, 0.148290, 0.148290",\ + "0.376177, 0.376177, 0.376177, 0.376177, 0.376177",\ + "0.871096, 0.871096, 0.871096, 0.871096, 0.871096",\ + "2.136637, 2.136637, 2.136637, 2.136637, 2.136637",\ + "0.032950, 0.032950, 0.032950, 0.032950, 0.032950",\ + "0.148290, 0.148290, 0.148290, 0.148290, 0.148290",\ + "0.376177, 0.376177, 0.376177, 0.376177, 0.376177",\ + "0.871096, 0.871096, 0.871096, 0.871096, 0.871096",\ + "2.136637, 2.136637, 2.136637, 2.136637, 2.136637",\ + "0.032950, 0.032950, 0.032950, 0.032950, 0.032950",\ + "0.148290, 0.148290, 0.148290, 0.148290, 0.148290",\ + "0.376177, 0.376177, 0.376177, 0.376177, 0.376177",\ + "0.871096, 0.871096, 0.871096, 0.871096, 0.871096",\ + "2.136637, 2.136637, 2.136637, 2.136637, 2.136637",\ + "0.032950, 0.032950, 0.032950, 0.032950, 0.032950",\ + "0.148290, 0.148290, 0.148290, 0.148290, 0.148290",\ + "0.376177, 0.376177, 0.376177, 0.376177, 0.376177",\ + "0.871096, 0.871096, 0.871096, 0.871096, 0.871096",\ + "2.136637, 2.136637, 2.136637, 2.136637, 2.136637",\ + "0.032950, 0.032950, 0.032950, 0.032950, 0.032950",\ + "0.148290, 0.148290, 0.148290, 0.148290, 0.148290",\ + "0.376177, 0.376177, 0.376177, 0.376177, 0.376177",\ + "0.871096, 0.871096, 0.871096, 0.871096, 0.871096",\ + "2.136637, 2.136637, 2.136637, 2.136637, 2.136637"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.506490, 0.734939, 0.919745, 1.215248, 1.786338",\ + "0.532768, 0.761737, 0.946551, 1.242086, 1.813247",\ + "0.574154, 0.803122, 0.987937, 1.283471, 1.854632",\ + "0.696473, 0.925441, 1.110256, 1.405790, 1.976951",\ + "1.028706, 1.257674, 1.442488, 1.738023, 2.309184",\ + "0.594824, 0.822257, 1.007026, 1.302553, 1.873691",\ + "0.621100, 0.849055, 1.033832, 1.329391, 1.900600",\ + "0.662486, 0.890440, 1.075217, 1.370776, 1.941986",\ + "0.784805, 1.012759, 1.197537, 1.493095, 2.064305",\ + "1.117038, 1.344992, 1.529769, 1.825328, 2.396538",\ + "0.684045, 0.902590, 1.087053, 1.382582, 1.953723",\ + "0.710318, 0.929387, 1.113859, 1.409419, 1.980632",\ + "0.751704, 0.970773, 1.155244, 1.450805, 2.022017",\ + "0.874023, 1.093092, 1.277564, 1.573124, 2.144336",\ + "1.206255, 1.425324, 1.609796, 1.905357, 2.476569",\ + "0.747598, 0.960414, 1.144763, 1.440024, 2.010764",\ + "0.773868, 0.987212, 1.171569, 1.466862, 2.037673",\ + "0.815253, 1.028597, 1.212954, 1.508247, 2.079059",\ + "0.937573, 1.150916, 1.335273, 1.630566, 2.201378",\ + "1.269805, 1.483149, 1.667506, 1.962799, 2.533611",\ + "1.083412, 1.265686, 1.448421, 1.743207, 2.313017",\ + "1.109663, 1.292485, 1.475227, 1.770045, 2.339926",\ + "1.151049, 1.333870, 1.516612, 1.811430, 2.381312",\ + "1.273368, 1.456189, 1.638931, 1.933749, 2.503631",\ + "1.605601, 1.788422, 1.971164, 2.265982, 2.835864"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.039649, 0.039649, 0.039649, 0.039649, 0.039649",\ + "0.089554, 0.089554, 0.089554, 0.089554, 0.089554",\ + "0.186013, 0.186013, 0.186013, 0.186013, 0.186013",\ + "0.432402, 0.432402, 0.432402, 0.432402, 0.432402",\ + "1.065031, 1.065031, 1.065031, 1.065031, 1.065031",\ + "0.039649, 0.039649, 0.039649, 0.039649, 0.039649",\ + "0.089554, 0.089554, 0.089554, 0.089554, 0.089554",\ + "0.186013, 0.186013, 0.186013, 0.186013, 0.186013",\ + "0.432402, 0.432402, 0.432402, 0.432402, 0.432402",\ + "1.065031, 1.065031, 1.065031, 1.065031, 1.065031",\ + "0.039649, 0.039649, 0.039649, 0.039649, 0.039649",\ + "0.089554, 0.089554, 0.089554, 0.089554, 0.089554",\ + "0.186013, 0.186013, 0.186013, 0.186013, 0.186013",\ + "0.432402, 0.432402, 0.432402, 0.432402, 0.432402",\ + "1.065031, 1.065031, 1.065031, 1.065031, 1.065031",\ + "0.039649, 0.039649, 0.039649, 0.039649, 0.039649",\ + "0.089554, 0.089554, 0.089554, 0.089554, 0.089554",\ + "0.186013, 0.186013, 0.186013, 0.186013, 0.186013",\ + "0.432402, 0.432402, 0.432402, 0.432402, 0.432402",\ + "1.065031, 1.065031, 1.065031, 1.065031, 1.065031",\ + "0.039649, 0.039649, 0.039649, 0.039649, 0.039649",\ + "0.089554, 0.089554, 0.089554, 0.089554, 0.089554",\ + "0.186013, 0.186013, 0.186013, 0.186013, 0.186013",\ + "0.432402, 0.432402, 0.432402, 0.432402, 0.432402",\ + "1.065031, 1.065031, 1.065031, 1.065031, 1.065031"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[4]_redg_min_2733*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[40]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.434817, 0.671194, 0.861423, 1.166955, 1.757904",\ + "0.484677, 0.721055, 0.911284, 1.216816, 1.807764",\ + "0.586545, 0.822923, 1.013152, 1.318684, 1.909632",\ + "0.824407, 1.060784, 1.251013, 1.556545, 2.147494",\ + "1.396727, 1.633105, 1.823334, 2.128865, 2.719814",\ + "0.523312, 0.758513, 0.948704, 1.254260, 1.845257",\ + "0.573172, 0.808374, 0.998565, 1.304121, 1.895118",\ + "0.675041, 0.910242, 1.100433, 1.405989, 1.996986",\ + "0.912902, 1.148103, 1.338294, 1.643850, 2.234847",\ + "1.485222, 1.720423, 1.910614, 2.216170, 2.807168",\ + "0.612642, 0.838848, 1.028731, 1.334289, 1.925289",\ + "0.662503, 0.888709, 1.078592, 1.384149, 1.975149",\ + "0.764371, 0.990577, 1.180460, 1.486017, 2.077017",\ + "1.002232, 1.228438, 1.418321, 1.723879, 2.314878",\ + "1.574552, 1.800758, 1.990641, 2.296199, 2.887199",\ + "0.676136, 0.896683, 1.086453, 1.391755, 1.982376",\ + "0.725997, 0.946544, 1.136314, 1.441616, 2.032237",\ + "0.827865, 1.048412, 1.238182, 1.543484, 2.134105",\ + "1.065726, 1.286273, 1.476043, 1.781345, 2.371966",\ + "1.638046, 1.858593, 2.048363, 2.353665, 2.944287",\ + "1.011585, 1.202042, 1.390114, 1.694958, 2.284685",\ + "1.061446, 1.251903, 1.439975, 1.744819, 2.334546",\ + "1.163314, 1.353770, 1.541843, 1.846687, 2.436414",\ + "1.401175, 1.591632, 1.779704, 2.084548, 2.674275",\ + "1.973496, 2.163952, 2.352024, 2.656868, 3.246596"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.039800, 0.039800, 0.039800, 0.039800, 0.039800",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375010, 0.375010, 0.375010, 0.375010, 0.375010",\ + "0.869309, 0.869309, 0.869309, 0.869309, 0.869309",\ + "2.137202, 2.137202, 2.137202, 2.137202, 2.137202",\ + "0.039800, 0.039800, 0.039800, 0.039800, 0.039800",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375010, 0.375010, 0.375010, 0.375010, 0.375010",\ + "0.869309, 0.869309, 0.869309, 0.869309, 0.869309",\ + "2.137202, 2.137202, 2.137202, 2.137202, 2.137202",\ + "0.039800, 0.039800, 0.039800, 0.039800, 0.039800",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375010, 0.375010, 0.375010, 0.375010, 0.375010",\ + "0.869309, 0.869309, 0.869309, 0.869309, 0.869309",\ + "2.137202, 2.137202, 2.137202, 2.137202, 2.137202",\ + "0.039800, 0.039800, 0.039800, 0.039800, 0.039800",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375010, 0.375010, 0.375010, 0.375010, 0.375010",\ + "0.869309, 0.869309, 0.869309, 0.869309, 0.869309",\ + "2.137202, 2.137202, 2.137202, 2.137202, 2.137202",\ + "0.039800, 0.039800, 0.039800, 0.039800, 0.039800",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375010, 0.375010, 0.375010, 0.375010, 0.375010",\ + "0.869309, 0.869309, 0.869309, 0.869309, 0.869309",\ + "2.137202, 2.137202, 2.137202, 2.137202, 2.137202"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.475545, 0.711923, 0.902152, 1.207684, 1.798632",\ + "0.497895, 0.734273, 0.924502, 1.230033, 1.820982",\ + "0.539258, 0.775636, 0.965865, 1.271397, 1.862345",\ + "0.661294, 0.897672, 1.087901, 1.393432, 1.984381",\ + "0.992907, 1.229285, 1.419514, 1.725045, 2.315994",\ + "0.564040, 0.799242, 0.989433, 1.294989, 1.885986",\ + "0.586390, 0.821591, 1.011783, 1.317338, 1.908335",\ + "0.627753, 0.862955, 1.053146, 1.358702, 1.949699",\ + "0.749789, 0.984990, 1.175182, 1.480737, 2.071735",\ + "1.081402, 1.316603, 1.506794, 1.812350, 2.403347",\ + "0.653370, 0.879577, 1.069460, 1.375017, 1.966017",\ + "0.675720, 0.901927, 1.091810, 1.397367, 1.988367",\ + "0.717084, 0.943290, 1.133173, 1.438730, 2.029730",\ + "0.839119, 1.065326, 1.255209, 1.560766, 2.151766",\ + "1.170732, 1.396938, 1.586821, 1.892379, 2.483379",\ + "0.716865, 0.937412, 1.127182, 1.432483, 2.023105",\ + "0.739214, 0.959762, 1.149531, 1.454833, 2.045455",\ + "0.780578, 1.001125, 1.190895, 1.496197, 2.086818",\ + "0.902614, 1.123161, 1.312930, 1.618232, 2.208854",\ + "1.234226, 1.454773, 1.644543, 1.949845, 2.540467",\ + "1.052314, 1.242770, 1.430842, 1.735687, 2.325414",\ + "1.074664, 1.265120, 1.453192, 1.758036, 2.347764",\ + "1.116027, 1.306484, 1.494555, 1.799400, 2.389127",\ + "1.238063, 1.428519, 1.616591, 1.921436, 2.511163",\ + "1.569676, 1.760132, 1.948204, 2.253048, 2.842776"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.045856, 0.045856, 0.045856, 0.045856, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045856, 0.045856, 0.045856, 0.045856, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045856, 0.045856, 0.045856, 0.045856, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045856, 0.045856, 0.045856, 0.045856, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045856, 0.045856, 0.045856, 0.045856, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[4]_redg_min_2365*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[46]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.415362, 0.648627, 0.834270, 1.134053, 1.714917",\ + "0.465223, 0.698488, 0.884131, 1.183914, 1.764778",\ + "0.567091, 0.800357, 0.985999, 1.285782, 1.866646",\ + "0.804953, 1.038218, 1.223860, 1.523643, 2.104508",\ + "1.377273, 1.610538, 1.796180, 2.095963, 2.676828",\ + "0.503768, 0.735946, 0.921550, 1.221358, 1.802271",\ + "0.553629, 0.785807, 0.971411, 1.271219, 1.852132",\ + "0.655497, 0.887675, 1.073280, 1.373087, 1.954000",\ + "0.893359, 1.125536, 1.311141, 1.610948, 2.191861",\ + "1.465679, 1.697857, 1.883461, 2.183269, 2.764181",\ + "0.592852, 0.816281, 1.001577, 1.301386, 1.882302",\ + "0.642713, 0.866142, 1.051438, 1.351248, 1.932163",\ + "0.744581, 0.968010, 1.153306, 1.453116, 2.034031",\ + "0.982442, 1.205871, 1.391168, 1.690977, 2.271893",\ + "1.554763, 1.778192, 1.963488, 2.263297, 2.844213",\ + "0.656124, 0.874112, 1.059288, 1.358840, 1.939366",\ + "0.705985, 0.923973, 1.109149, 1.408702, 1.989227",\ + "0.807853, 1.025841, 1.211017, 1.510570, 2.091095",\ + "1.045714, 1.263703, 1.448879, 1.748431, 2.328956",\ + "1.618035, 1.836023, 2.021199, 2.320751, 2.901277",\ + "0.990163, 1.179444, 1.362947, 1.662033, 2.241645",\ + "1.040024, 1.229305, 1.412809, 1.711895, 2.291506",\ + "1.141892, 1.331173, 1.514677, 1.813762, 2.393374",\ + "1.379753, 1.569034, 1.752538, 2.051624, 2.631236",\ + "1.952073, 2.141355, 2.324858, 2.623944, 3.203556"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.039801, 0.039801, 0.039801, 0.039801, 0.039801",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375010, 0.375010, 0.375010, 0.375010, 0.375010",\ + "0.869309, 0.869309, 0.869309, 0.869309, 0.869309",\ + "2.137202, 2.137202, 2.137202, 2.137202, 2.137202",\ + "0.039801, 0.039801, 0.039801, 0.039801, 0.039801",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375010, 0.375010, 0.375010, 0.375010, 0.375010",\ + "0.869309, 0.869309, 0.869309, 0.869309, 0.869309",\ + "2.137202, 2.137202, 2.137202, 2.137202, 2.137202",\ + "0.039801, 0.039801, 0.039801, 0.039801, 0.039801",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375010, 0.375010, 0.375010, 0.375010, 0.375010",\ + "0.869309, 0.869309, 0.869309, 0.869309, 0.869309",\ + "2.137202, 2.137202, 2.137202, 2.137202, 2.137202",\ + "0.039801, 0.039801, 0.039801, 0.039801, 0.039801",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375010, 0.375010, 0.375010, 0.375010, 0.375010",\ + "0.869309, 0.869309, 0.869309, 0.869309, 0.869309",\ + "2.137202, 2.137202, 2.137202, 2.137202, 2.137202",\ + "0.039801, 0.039801, 0.039801, 0.039801, 0.039801",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375010, 0.375010, 0.375010, 0.375010, 0.375010",\ + "0.869309, 0.869309, 0.869309, 0.869309, 0.869309",\ + "2.137202, 2.137202, 2.137202, 2.137202, 2.137202"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.456091, 0.689356, 0.874999, 1.174782, 1.755646",\ + "0.478441, 0.711706, 0.897348, 1.197132, 1.777996",\ + "0.519805, 0.753070, 0.938712, 1.238495, 1.819360",\ + "0.641840, 0.875105, 1.060748, 1.360531, 1.941395",\ + "0.973453, 1.206718, 1.392360, 1.692143, 2.273008",\ + "0.544497, 0.776675, 0.962279, 1.262087, 1.843000",\ + "0.566847, 0.799025, 0.984629, 1.284437, 1.865350",\ + "0.608211, 0.840388, 1.025993, 1.325800, 1.906713",\ + "0.730246, 0.962424, 1.148028, 1.447836, 2.028749",\ + "1.061859, 1.294037, 1.479641, 1.779449, 2.360361",\ + "0.633581, 0.857010, 1.042306, 1.342116, 1.923031",\ + "0.655931, 0.879360, 1.064656, 1.364465, 1.945381",\ + "0.697294, 0.920723, 1.106020, 1.405829, 1.986745",\ + "0.819330, 1.042759, 1.228055, 1.527864, 2.108780",\ + "1.150943, 1.374372, 1.559668, 1.859477, 2.440393",\ + "0.696853, 0.914841, 1.100017, 1.399570, 1.980095",\ + "0.719203, 0.937191, 1.122367, 1.421919, 2.002445",\ + "0.760566, 0.978555, 1.163731, 1.463283, 2.043808",\ + "0.882602, 1.100590, 1.285766, 1.585318, 2.165844",\ + "1.214215, 1.432203, 1.617379, 1.916931, 2.497457",\ + "1.030892, 1.220173, 1.403677, 1.702762, 2.282374",\ + "1.053242, 1.242523, 1.426026, 1.725112, 2.304724",\ + "1.094605, 1.283886, 1.467390, 1.766476, 2.346087",\ + "1.216641, 1.405922, 1.589425, 1.888511, 2.468123",\ + "1.548254, 1.737535, 1.921038, 2.220124, 2.799736"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.045856, 0.045856, 0.045856, 0.045856, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045856, 0.045856, 0.045856, 0.045856, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045856, 0.045856, 0.045856, 0.045856, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045856, 0.045856, 0.045856, 0.045856, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045856, 0.045856, 0.045856, 0.045856, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[4]_redg_min_2479*/ + +} /* end of pin tl_o[4] */ + +pin("tl_o[3]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.034401 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : tl_o[3]; + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[20]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.510374, 0.770025, 1.057985, 1.558099, 2.558328",\ + "0.560483, 0.820133, 1.108094, 1.608212, 2.608449",\ + "0.649192, 0.908842, 1.196806, 1.696939, 2.697205",\ + "0.873358, 1.133008, 1.420973, 1.921111, 2.921387",\ + "1.425993, 1.685643, 1.973609, 2.473750, 3.474032",\ + "0.597787, 0.857587, 1.145651, 1.644814, 2.644262",\ + "0.647895, 0.907696, 1.195760, 1.694927, 2.694383",\ + "0.736605, 0.996405, 1.284473, 1.783654, 2.783139",\ + "0.960770, 1.220570, 1.508639, 2.007826, 3.007321",\ + "1.513405, 1.773205, 2.061275, 2.560465, 3.559966",\ + "0.678684, 0.946606, 1.233617, 1.732436, 2.731217",\ + "0.728793, 0.996715, 1.283726, 1.782550, 2.781338",\ + "0.817502, 1.085424, 1.372439, 1.871277, 2.870094",\ + "1.041668, 1.309589, 1.596606, 2.095448, 3.094276",\ + "1.594303, 1.862224, 2.149241, 2.648087, 3.646921",\ + "0.738268, 1.012297, 1.297762, 1.796350, 2.794726",\ + "0.788377, 1.062406, 1.347871, 1.846463, 2.844847",\ + "0.877086, 1.151115, 1.436584, 1.935190, 2.933603",\ + "1.101252, 1.375280, 1.660750, 2.159362, 3.157785",\ + "1.653887, 1.927915, 2.213386, 2.712001, 3.710430",\ + "1.071814, 1.377311, 1.649946, 2.145828, 3.140182",\ + "1.121922, 1.427420, 1.700056, 2.195941, 3.190303",\ + "1.210632, 1.516129, 1.788768, 2.284668, 3.279059",\ + "1.434798, 1.740294, 2.012935, 2.508840, 3.503241",\ + "1.987432, 2.292929, 2.565571, 3.061479, 4.055886"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.046974, 0.046974, 0.046974, 0.046974, 0.046974",\ + "0.140333, 0.140333, 0.140333, 0.140333, 0.140333",\ + "0.324731, 0.324733, 0.324746, 0.324779, 0.324846",\ + "0.855415, 0.855427, 0.855504, 0.855712, 0.856129",\ + "2.185958, 2.185963, 2.186002, 2.186108, 2.186319",\ + "0.046974, 0.046974, 0.046974, 0.046974, 0.046974",\ + "0.140333, 0.140333, 0.140333, 0.140333, 0.140333",\ + "0.324731, 0.324733, 0.324746, 0.324779, 0.324846",\ + "0.855415, 0.855427, 0.855504, 0.855712, 0.856129",\ + "2.185958, 2.185964, 2.186003, 2.186108, 2.186319",\ + "0.046974, 0.046974, 0.046974, 0.046974, 0.046974",\ + "0.140333, 0.140333, 0.140333, 0.140333, 0.140333",\ + "0.324731, 0.324733, 0.324746, 0.324779, 0.324846",\ + "0.855415, 0.855427, 0.855504, 0.855712, 0.856129",\ + "2.185958, 2.185964, 2.186003, 2.186108, 2.186319",\ + "0.046974, 0.046974, 0.046974, 0.046974, 0.046974",\ + "0.140333, 0.140333, 0.140333, 0.140333, 0.140333",\ + "0.324731, 0.324733, 0.324746, 0.324779, 0.324846",\ + "0.855415, 0.855427, 0.855504, 0.855712, 0.856129",\ + "2.185958, 2.185964, 2.186003, 2.186108, 2.186319",\ + "0.046974, 0.046974, 0.046974, 0.046974, 0.046974",\ + "0.140333, 0.140333, 0.140333, 0.140333, 0.140333",\ + "0.324731, 0.324734, 0.324746, 0.324779, 0.324846",\ + "0.855415, 0.855432, 0.855507, 0.855713, 0.856129",\ + "2.185958, 2.185966, 2.186004, 2.186108, 2.186319"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.546335, 0.805984, 1.093953, 1.594109, 2.594421",\ + "0.568030, 0.827679, 1.115650, 1.615810, 2.616129",\ + "0.609553, 0.869202, 1.157173, 1.657335, 2.657660",\ + "0.742836, 1.002485, 1.290455, 1.790615, 2.790934",\ + "1.091714, 1.351363, 1.639332, 2.139487, 3.139795",\ + "0.633748, 0.893546, 1.181620, 1.680824, 2.680355",\ + "0.655443, 0.915241, 1.203316, 1.702524, 2.702063",\ + "0.696966, 0.956764, 1.244839, 1.744050, 2.743593",\ + "0.830248, 1.090047, 1.378121, 1.877330, 2.876868",\ + "1.179126, 1.438925, 1.726998, 2.226201, 3.225729",\ + "0.714645, 0.982566, 1.269586, 1.768446, 2.767310",\ + "0.736340, 1.004261, 1.291282, 1.790147, 2.789018",\ + "0.777863, 1.045783, 1.332805, 1.831672, 2.830549",\ + "0.911146, 1.179066, 1.466088, 1.964952, 2.963823",\ + "1.260024, 1.527944, 1.814965, 2.313824, 3.312684",\ + "0.774229, 1.048256, 1.333731, 1.832360, 2.830819",\ + "0.795924, 1.069952, 1.355427, 1.854060, 2.852527",\ + "0.837447, 1.111474, 1.396950, 1.895586, 2.894058",\ + "0.970730, 1.244757, 1.530232, 2.028866, 3.027332",\ + "1.319608, 1.593635, 1.879110, 2.377737, 3.376193",\ + "1.107775, 1.413270, 1.685916, 2.181838, 3.176275",\ + "1.129470, 1.434965, 1.707612, 2.203538, 3.197983",\ + "1.170993, 1.476488, 1.749135, 2.245064, 3.239513",\ + "1.304275, 1.609771, 1.882417, 2.378344, 3.372788",\ + "1.653153, 1.958649, 2.231294, 2.727215, 3.721649"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.045624, 0.045624, 0.045626, 0.045626, 0.045626",\ + "0.082731, 0.082731, 0.082731, 0.082731, 0.082731",\ + "0.171712, 0.171713, 0.171715, 0.171723, 0.171737",\ + "0.455137, 0.455143, 0.455182, 0.455287, 0.455497",\ + "1.170722, 1.170724, 1.170739, 1.170779, 1.170860",\ + "0.045624, 0.045624, 0.045626, 0.045626, 0.045626",\ + "0.082731, 0.082731, 0.082731, 0.082731, 0.082731",\ + "0.171712, 0.171713, 0.171715, 0.171723, 0.171737",\ + "0.455137, 0.455143, 0.455182, 0.455287, 0.455497",\ + "1.170722, 1.170724, 1.170739, 1.170779, 1.170860",\ + "0.045624, 0.045624, 0.045626, 0.045626, 0.045626",\ + "0.082731, 0.082731, 0.082731, 0.082731, 0.082731",\ + "0.171712, 0.171713, 0.171715, 0.171723, 0.171737",\ + "0.455137, 0.455143, 0.455182, 0.455287, 0.455497",\ + "1.170722, 1.170724, 1.170739, 1.170779, 1.170860",\ + "0.045624, 0.045625, 0.045626, 0.045626, 0.045626",\ + "0.082731, 0.082731, 0.082731, 0.082731, 0.082731",\ + "0.171712, 0.171713, 0.171715, 0.171723, 0.171737",\ + "0.455137, 0.455143, 0.455182, 0.455287, 0.455497",\ + "1.170722, 1.170724, 1.170739, 1.170779, 1.170860",\ + "0.045624, 0.045625, 0.045626, 0.045626, 0.045626",\ + "0.082731, 0.082731, 0.082731, 0.082731, 0.082731",\ + "0.171712, 0.171713, 0.171715, 0.171723, 0.171737",\ + "0.455137, 0.455145, 0.455183, 0.455287, 0.455497",\ + "1.170722, 1.170725, 1.170740, 1.170779, 1.170860"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[3]_redg_2748*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[22]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.491611, 0.745113, 1.023814, 1.485459, 2.408749",\ + "0.541720, 0.795222, 1.073923, 1.535570, 2.458864",\ + "0.630429, 0.883931, 1.162634, 1.624290, 2.547600",\ + "0.854595, 1.108097, 1.386801, 1.848459, 2.771775",\ + "1.407230, 1.660732, 1.939436, 2.401096, 3.324415",\ + "0.579020, 0.832694, 1.111357, 1.572173, 2.494682",\ + "0.629129, 0.882803, 1.161466, 1.622284, 2.544798",\ + "0.717839, 0.971512, 1.250178, 1.711004, 2.633534",\ + "0.942004, 1.195678, 1.474344, 1.935173, 2.857708",\ + "1.494639, 1.748312, 2.026979, 2.487810, 3.410349",\ + "0.659835, 0.921740, 1.199320, 1.659795, 2.581637",\ + "0.709944, 0.971848, 1.249429, 1.709906, 2.631753",\ + "0.798653, 1.060558, 1.338141, 1.798626, 2.720489",\ + "1.022819, 1.284723, 1.562307, 2.022795, 2.944664",\ + "1.575454, 1.837358, 2.114943, 2.575432, 3.497304",\ + "0.717415, 0.987469, 1.263459, 1.723708, 2.645146",\ + "0.767524, 1.037577, 1.313568, 1.773819, 2.695262",\ + "0.856233, 1.126287, 1.402279, 1.862539, 2.783998",\ + "1.080399, 1.350452, 1.626446, 2.086708, 3.008173",\ + "1.633034, 1.903087, 2.179081, 2.639345, 3.560813",\ + "1.049306, 1.352971, 1.615251, 2.073024, 2.990602",\ + "1.099415, 1.403079, 1.665360, 2.123135, 3.040718",\ + "1.188124, 1.491788, 1.754072, 2.211854, 3.129454",\ + "1.412290, 1.715954, 1.978238, 2.436024, 3.353629",\ + "1.964925, 2.268589, 2.530873, 2.988661, 3.906269"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.046974, 0.046972, 0.046943, 0.046848, 0.046659",\ + "0.140333, 0.140333, 0.140330, 0.140323, 0.140308",\ + "0.324732, 0.324732, 0.324740, 0.324766, 0.324817",\ + "0.855415, 0.855418, 0.855468, 0.855628, 0.855950",\ + "2.185958, 2.185959, 2.185984, 2.186066, 2.186228",\ + "0.046974, 0.046972, 0.046943, 0.046848, 0.046659",\ + "0.140333, 0.140333, 0.140330, 0.140323, 0.140308",\ + "0.324732, 0.324732, 0.324740, 0.324766, 0.324817",\ + "0.855415, 0.855418, 0.855468, 0.855628, 0.855950",\ + "2.185958, 2.185959, 2.185985, 2.186066, 2.186228",\ + "0.046974, 0.046972, 0.046943, 0.046848, 0.046659",\ + "0.140333, 0.140333, 0.140330, 0.140323, 0.140308",\ + "0.324732, 0.324732, 0.324740, 0.324766, 0.324817",\ + "0.855415, 0.855418, 0.855468, 0.855628, 0.855950",\ + "2.185958, 2.185959, 2.185985, 2.186066, 2.186228",\ + "0.046974, 0.046972, 0.046943, 0.046848, 0.046659",\ + "0.140333, 0.140333, 0.140330, 0.140323, 0.140308",\ + "0.324732, 0.324732, 0.324740, 0.324766, 0.324817",\ + "0.855415, 0.855418, 0.855468, 0.855628, 0.855950",\ + "2.185958, 2.185959, 2.185985, 2.186066, 2.186228",\ + "0.046974, 0.046972, 0.046942, 0.046848, 0.046659",\ + "0.140333, 0.140333, 0.140330, 0.140323, 0.140308",\ + "0.324732, 0.324732, 0.324740, 0.324766, 0.324817",\ + "0.855415, 0.855419, 0.855470, 0.855629, 0.855950",\ + "2.185958, 2.185960, 2.185985, 2.186066, 2.186228"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.527572, 0.781074, 1.059780, 1.521448, 2.444784",\ + "0.549267, 0.802769, 1.081476, 1.543146, 2.466486",\ + "0.590790, 0.844292, 1.122999, 1.584671, 2.508013",\ + "0.724072, 0.977574, 1.256281, 1.717952, 2.641292",\ + "1.072951, 1.326452, 1.605159, 2.066826, 2.990160",\ + "0.614981, 0.868654, 1.147323, 1.608162, 2.530717",\ + "0.636677, 0.890350, 1.169019, 1.629860, 2.552420",\ + "0.678199, 0.931872, 1.210542, 1.671385, 2.593947",\ + "0.811482, 1.065155, 1.343825, 1.804666, 2.727225",\ + "1.160360, 1.414033, 1.692702, 2.153540, 3.076094",\ + "0.695796, 0.957700, 1.235286, 1.695784, 2.617672",\ + "0.717491, 0.979395, 1.256982, 1.717482, 2.639375",\ + "0.759014, 1.020918, 1.298506, 1.759007, 2.680902",\ + "0.892296, 1.154201, 1.431788, 1.892287, 2.814180",\ + "1.241175, 1.503079, 1.780665, 2.241162, 3.163049",\ + "0.753376, 1.023429, 1.299425, 1.759697, 2.681181",\ + "0.775071, 1.045124, 1.321121, 1.781395, 2.702884",\ + "0.816594, 1.086647, 1.362644, 1.822920, 2.744411",\ + "0.949877, 1.219929, 1.495926, 1.956201, 2.877689",\ + "1.298755, 1.568808, 1.844804, 2.305075, 3.226558",\ + "1.085267, 1.388931, 1.651218, 2.109013, 3.026638",\ + "1.106962, 1.410626, 1.672914, 2.130711, 3.048340",\ + "1.148485, 1.452149, 1.714437, 2.172235, 3.089867",\ + "1.281768, 1.585431, 1.847719, 2.305516, 3.223145",\ + "1.630646, 1.934309, 2.196596, 2.654391, 3.572014"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.045624, 0.045624, 0.045624, 0.045624, 0.045624",\ + "0.082731, 0.082731, 0.082731, 0.082731, 0.082731",\ + "0.171712, 0.171712, 0.171714, 0.171720, 0.171731",\ + "0.455137, 0.455138, 0.455163, 0.455244, 0.455407",\ + "1.170722, 1.170722, 1.170732, 1.170763, 1.170825",\ + "0.045624, 0.045624, 0.045624, 0.045624, 0.045624",\ + "0.082731, 0.082731, 0.082731, 0.082731, 0.082731",\ + "0.171712, 0.171712, 0.171714, 0.171720, 0.171731",\ + "0.455137, 0.455138, 0.455164, 0.455244, 0.455407",\ + "1.170722, 1.170722, 1.170732, 1.170763, 1.170825",\ + "0.045624, 0.045624, 0.045624, 0.045624, 0.045624",\ + "0.082731, 0.082731, 0.082731, 0.082731, 0.082731",\ + "0.171712, 0.171712, 0.171714, 0.171720, 0.171731",\ + "0.455137, 0.455138, 0.455164, 0.455244, 0.455407",\ + "1.170722, 1.170722, 1.170732, 1.170763, 1.170825",\ + "0.045624, 0.045624, 0.045624, 0.045624, 0.045624",\ + "0.082731, 0.082731, 0.082731, 0.082731, 0.082731",\ + "0.171712, 0.171712, 0.171714, 0.171720, 0.171731",\ + "0.455137, 0.455138, 0.455164, 0.455244, 0.455407",\ + "1.170722, 1.170722, 1.170732, 1.170763, 1.170825",\ + "0.045624, 0.045624, 0.045624, 0.045624, 0.045624",\ + "0.082731, 0.082731, 0.082731, 0.082731, 0.082731",\ + "0.171712, 0.171712, 0.171714, 0.171720, 0.171731",\ + "0.455137, 0.455139, 0.455164, 0.455245, 0.455407",\ + "1.170722, 1.170722, 1.170732, 1.170763, 1.170825"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[3]_redg_2324*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[31]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.570251, 0.828412, 1.116558, 1.622590, 2.634653",\ + "0.620360, 0.878521, 1.166668, 1.672702, 2.684771",\ + "0.709070, 0.967232, 1.255383, 1.761428, 2.773518",\ + "0.933236, 1.191399, 1.479551, 1.985599, 2.997696",\ + "1.485871, 1.744034, 2.032187, 2.538238, 3.550339",\ + "0.657660, 0.915972, 1.204241, 1.709304, 2.720587",\ + "0.707769, 0.966081, 1.254351, 1.759417, 2.770705",\ + "0.796479, 1.054792, 1.343066, 1.848142, 2.859451",\ + "1.020645, 1.278959, 1.567234, 2.072314, 3.083630",\ + "1.573280, 1.831594, 2.119870, 2.624952, 3.636273",\ + "0.738545, 1.004968, 1.292206, 1.796926, 2.807542",\ + "0.788654, 1.055077, 1.342316, 1.847038, 2.857660",\ + "0.877364, 1.143789, 1.431032, 1.935764, 2.946406",\ + "1.101530, 1.367955, 1.655199, 2.159935, 3.170585",\ + "1.654165, 1.920590, 2.207835, 2.712574, 3.723228",\ + "0.799029, 1.070625, 1.356352, 1.860839, 2.871051",\ + "0.849138, 1.120734, 1.406462, 1.910952, 2.921169",\ + "0.937848, 1.209445, 1.495178, 1.999677, 3.009915",\ + "1.162014, 1.433611, 1.719345, 2.223849, 3.234094",\ + "1.714649, 1.986246, 2.271981, 2.776487, 3.786737",\ + "1.134610, 1.435289, 1.708595, 2.210337, 3.216507",\ + "1.184719, 1.485398, 1.758705, 2.260450, 3.266625",\ + "1.273429, 1.574110, 1.847420, 2.349176, 3.355371",\ + "1.497595, 1.798276, 2.071588, 2.573347, 3.579550",\ + "2.050230, 2.350911, 2.624224, 3.125986, 4.132193"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.046967, 0.046968, 0.046968, 0.046968, 0.046968",\ + "0.140332, 0.140332, 0.140332, 0.140332, 0.140332",\ + "0.324733, 0.324734, 0.324740, 0.324758, 0.324793",\ + "0.855426, 0.855431, 0.855470, 0.855580, 0.855800",\ + "2.185963, 2.185966, 2.185986, 2.186041, 2.186152",\ + "0.046967, 0.046968, 0.046968, 0.046968, 0.046968",\ + "0.140332, 0.140332, 0.140332, 0.140332, 0.140332",\ + "0.324733, 0.324734, 0.324740, 0.324758, 0.324793",\ + "0.855426, 0.855431, 0.855470, 0.855580, 0.855800",\ + "2.185963, 2.185966, 2.185986, 2.186041, 2.186152",\ + "0.046967, 0.046968, 0.046968, 0.046968, 0.046968",\ + "0.140332, 0.140332, 0.140332, 0.140332, 0.140332",\ + "0.324733, 0.324734, 0.324740, 0.324758, 0.324793",\ + "0.855426, 0.855431, 0.855470, 0.855580, 0.855800",\ + "2.185963, 2.185966, 2.185986, 2.186041, 2.186152",\ + "0.046967, 0.046968, 0.046968, 0.046968, 0.046968",\ + "0.140332, 0.140332, 0.140332, 0.140332, 0.140332",\ + "0.324733, 0.324734, 0.324740, 0.324758, 0.324793",\ + "0.855426, 0.855431, 0.855470, 0.855580, 0.855800",\ + "2.185963, 2.185966, 2.185986, 2.186041, 2.186152",\ + "0.046967, 0.046968, 0.046968, 0.046968, 0.046968",\ + "0.140332, 0.140332, 0.140332, 0.140332, 0.140332",\ + "0.324733, 0.324734, 0.324740, 0.324758, 0.324793",\ + "0.855426, 0.855433, 0.855471, 0.855580, 0.855800",\ + "2.185963, 2.185967, 2.185986, 2.186041, 2.186152"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.606214, 0.864377, 1.152534, 1.658596, 2.670718",\ + "0.627909, 0.886073, 1.174231, 1.680295, 2.692423",\ + "0.669432, 0.927596, 1.215755, 1.721821, 2.733952",\ + "0.802715, 1.060879, 1.349037, 1.855101, 2.867229",\ + "1.151593, 1.409756, 1.697913, 2.203973, 3.216093",\ + "0.693623, 0.951938, 1.240217, 1.745310, 2.756651",\ + "0.715318, 0.973633, 1.261914, 1.767010, 2.778357",\ + "0.756841, 1.015157, 1.303438, 1.808535, 2.819886",\ + "0.890124, 1.148439, 1.436720, 1.941815, 2.953162",\ + "1.239002, 1.497316, 1.785596, 2.290687, 3.302027",\ + "0.774507, 1.040934, 1.328183, 1.832932, 2.843606",\ + "0.796203, 1.062629, 1.349880, 1.854631, 2.865312",\ + "0.837726, 1.104153, 1.391404, 1.896157, 2.906841",\ + "0.971008, 1.237435, 1.524685, 2.029437, 3.040117",\ + "1.319886, 1.586312, 1.873561, 2.378309, 3.388982",\ + "0.834992, 1.106590, 1.392329, 1.896845, 2.907115",\ + "0.856687, 1.128286, 1.414026, 1.918545, 2.928821",\ + "0.898210, 1.169809, 1.455549, 1.960070, 2.970350",\ + "1.031493, 1.303092, 1.588831, 2.093350, 3.103626",\ + "1.380370, 1.651969, 1.937707, 2.442222, 3.452491",\ + "1.170573, 1.471255, 1.744571, 2.246343, 3.252572",\ + "1.192269, 1.492951, 1.766268, 2.268043, 3.274277",\ + "1.233792, 1.534474, 1.807792, 2.309569, 3.315806",\ + "1.367074, 1.667757, 1.941074, 2.442849, 3.449082",\ + "1.715952, 2.016634, 2.289950, 2.791721, 3.797947"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.045622, 0.045622, 0.045622, 0.045622, 0.045622",\ + "0.082730, 0.082730, 0.082730, 0.082730, 0.082730",\ + "0.171713, 0.171713, 0.171714, 0.171718, 0.171726",\ + "0.455143, 0.455145, 0.455165, 0.455220, 0.455331",\ + "1.170724, 1.170725, 1.170732, 1.170754, 1.170796",\ + "0.045622, 0.045622, 0.045622, 0.045622, 0.045622",\ + "0.082730, 0.082730, 0.082730, 0.082730, 0.082730",\ + "0.171713, 0.171713, 0.171714, 0.171718, 0.171726",\ + "0.455143, 0.455145, 0.455165, 0.455220, 0.455331",\ + "1.170724, 1.170725, 1.170732, 1.170754, 1.170796",\ + "0.045622, 0.045622, 0.045622, 0.045622, 0.045622",\ + "0.082730, 0.082730, 0.082730, 0.082730, 0.082730",\ + "0.171713, 0.171713, 0.171714, 0.171718, 0.171726",\ + "0.455143, 0.455145, 0.455165, 0.455220, 0.455331",\ + "1.170724, 1.170725, 1.170732, 1.170754, 1.170796",\ + "0.045622, 0.045622, 0.045622, 0.045622, 0.045622",\ + "0.082730, 0.082730, 0.082730, 0.082730, 0.082730",\ + "0.171713, 0.171713, 0.171714, 0.171718, 0.171726",\ + "0.455143, 0.455145, 0.455165, 0.455220, 0.455331",\ + "1.170724, 1.170725, 1.170732, 1.170754, 1.170796",\ + "0.045622, 0.045622, 0.045622, 0.045622, 0.045622",\ + "0.082730, 0.082730, 0.082730, 0.082730, 0.082730",\ + "0.171713, 0.171713, 0.171714, 0.171718, 0.171726",\ + "0.455143, 0.455146, 0.455165, 0.455220, 0.455331",\ + "1.170724, 1.170725, 1.170733, 1.170754, 1.170796"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[3]_redg_2270*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[33]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.553742, 0.804842, 1.083529, 1.550229, 2.483630",\ + "0.603850, 0.854951, 1.133639, 1.600341, 2.533747",\ + "0.692561, 0.943663, 1.222354, 1.689065, 2.622488",\ + "0.916727, 1.167829, 1.446522, 1.913236, 2.846664",\ + "1.469362, 1.720464, 1.999158, 2.465874, 3.399306",\ + "0.641147, 0.892423, 1.171086, 1.636943, 2.569564",\ + "0.691255, 0.942532, 1.221196, 1.687055, 2.619680",\ + "0.779966, 1.031244, 1.309911, 1.775779, 2.708421",\ + "1.004132, 1.255410, 1.534079, 1.999949, 2.932598",\ + "1.556767, 1.808045, 2.086715, 2.552587, 3.485240",\ + "0.721960, 0.981448, 1.259048, 1.724564, 2.656519",\ + "0.772069, 1.031557, 1.309159, 1.774676, 2.706635",\ + "0.860779, 1.120269, 1.397874, 1.863400, 2.795376",\ + "1.084945, 1.344435, 1.622041, 2.087571, 3.019553",\ + "1.637580, 1.897070, 2.174678, 2.640208, 3.572195",\ + "0.779579, 1.047145, 1.323188, 1.788477, 2.720028",\ + "0.829687, 1.097255, 1.373298, 1.838589, 2.770144",\ + "0.918398, 1.185966, 1.462013, 1.927313, 2.858885",\ + "1.142564, 1.410133, 1.686181, 2.151483, 3.083062",\ + "1.695199, 1.962768, 2.238817, 2.704121, 3.635704",\ + "1.113274, 1.412343, 1.675029, 2.137809, 3.065484",\ + "1.163383, 1.462452, 1.725139, 2.187922, 3.115601",\ + "1.252093, 1.551164, 1.813854, 2.276645, 3.204341",\ + "1.476259, 1.775330, 2.038022, 2.500816, 3.428518",\ + "2.028894, 2.327965, 2.590658, 3.053454, 3.981160"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.046966, 0.046965, 0.046949, 0.046900, 0.046802",\ + "0.140332, 0.140332, 0.140331, 0.140327, 0.140319",\ + "0.324733, 0.324734, 0.324738, 0.324752, 0.324778",\ + "0.855428, 0.855430, 0.855457, 0.855540, 0.855707",\ + "2.185964, 2.185965, 2.185979, 2.186021, 2.186105",\ + "0.046966, 0.046965, 0.046949, 0.046900, 0.046802",\ + "0.140332, 0.140332, 0.140331, 0.140327, 0.140319",\ + "0.324733, 0.324734, 0.324738, 0.324752, 0.324778",\ + "0.855428, 0.855430, 0.855457, 0.855540, 0.855707",\ + "2.185964, 2.185965, 2.185979, 2.186021, 2.186105",\ + "0.046966, 0.046965, 0.046949, 0.046900, 0.046802",\ + "0.140332, 0.140332, 0.140331, 0.140327, 0.140319",\ + "0.324733, 0.324734, 0.324738, 0.324752, 0.324778",\ + "0.855428, 0.855430, 0.855457, 0.855540, 0.855707",\ + "2.185964, 2.185965, 2.185979, 2.186021, 2.186105",\ + "0.046966, 0.046965, 0.046949, 0.046900, 0.046802",\ + "0.140332, 0.140332, 0.140331, 0.140327, 0.140319",\ + "0.324733, 0.324734, 0.324738, 0.324752, 0.324778",\ + "0.855428, 0.855430, 0.855457, 0.855540, 0.855707",\ + "2.185964, 2.185965, 2.185979, 2.186021, 2.186105",\ + "0.046966, 0.046965, 0.046949, 0.046900, 0.046802",\ + "0.140332, 0.140332, 0.140331, 0.140327, 0.140319",\ + "0.324733, 0.324734, 0.324738, 0.324752, 0.324778",\ + "0.855428, 0.855430, 0.855458, 0.855541, 0.855707",\ + "2.185964, 2.185965, 2.185979, 2.186021, 2.186105"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.589705, 0.840809, 1.119505, 1.586230, 2.519679",\ + "0.611400, 0.862504, 1.141202, 1.607929, 2.541383",\ + "0.652923, 0.904028, 1.182726, 1.649454, 2.582911",\ + "0.786206, 1.037310, 1.316008, 1.782735, 2.716188",\ + "1.135083, 1.386187, 1.664884, 2.131607, 3.065055",\ + "0.677110, 0.928390, 1.207063, 1.672943, 2.605613",\ + "0.698805, 0.950085, 1.228760, 1.694643, 2.627316",\ + "0.740328, 0.991609, 1.270283, 1.736168, 2.668845",\ + "0.873611, 1.124891, 1.403565, 1.869448, 2.802122",\ + "1.222489, 1.473768, 1.752441, 2.218321, 3.150989",\ + "0.757923, 1.017414, 1.295025, 1.760565, 2.692568",\ + "0.779619, 1.039110, 1.316722, 1.782264, 2.714272",\ + "0.821142, 1.080633, 1.358246, 1.823789, 2.755800",\ + "0.954424, 1.213916, 1.491528, 1.957069, 2.889077",\ + "1.303302, 1.562793, 1.840404, 2.305942, 3.237944",\ + "0.815542, 1.083112, 1.359165, 1.824477, 2.756077",\ + "0.837237, 1.104808, 1.380862, 1.846177, 2.777781",\ + "0.878760, 1.146331, 1.422385, 1.887702, 2.819309",\ + "1.012043, 1.279613, 1.555667, 2.020982, 2.952586",\ + "1.360920, 1.628491, 1.904543, 2.369855, 3.301453",\ + "1.149238, 1.448310, 1.711006, 2.173810, 3.101533",\ + "1.170933, 1.470006, 1.732703, 2.195509, 3.123237",\ + "1.212456, 1.511529, 1.774227, 2.237035, 3.164765",\ + "1.345739, 1.644811, 1.907508, 2.370315, 3.298042",\ + "1.694616, 1.993689, 2.256384, 2.719187, 3.646909"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.045622, 0.045620, 0.045614, 0.045600, 0.045572",\ + "0.082730, 0.082730, 0.082728, 0.082724, 0.082717",\ + "0.171713, 0.171713, 0.171714, 0.171717, 0.171723",\ + "0.455143, 0.455144, 0.455158, 0.455200, 0.455284",\ + "1.170724, 1.170725, 1.170730, 1.170746, 1.170779",\ + "0.045622, 0.045620, 0.045614, 0.045600, 0.045572",\ + "0.082730, 0.082730, 0.082728, 0.082724, 0.082717",\ + "0.171713, 0.171713, 0.171714, 0.171717, 0.171723",\ + "0.455143, 0.455144, 0.455158, 0.455200, 0.455284",\ + "1.170724, 1.170725, 1.170730, 1.170746, 1.170779",\ + "0.045622, 0.045620, 0.045614, 0.045600, 0.045572",\ + "0.082730, 0.082730, 0.082728, 0.082724, 0.082717",\ + "0.171713, 0.171713, 0.171714, 0.171717, 0.171723",\ + "0.455143, 0.455144, 0.455158, 0.455200, 0.455284",\ + "1.170724, 1.170725, 1.170730, 1.170746, 1.170779",\ + "0.045622, 0.045620, 0.045614, 0.045600, 0.045572",\ + "0.082730, 0.082730, 0.082728, 0.082724, 0.082717",\ + "0.171713, 0.171713, 0.171714, 0.171717, 0.171723",\ + "0.455143, 0.455144, 0.455158, 0.455200, 0.455284",\ + "1.170724, 1.170725, 1.170730, 1.170746, 1.170779",\ + "0.045622, 0.045620, 0.045614, 0.045600, 0.045572",\ + "0.082730, 0.082730, 0.082728, 0.082724, 0.082717",\ + "0.171713, 0.171713, 0.171714, 0.171717, 0.171723",\ + "0.455143, 0.455145, 0.455158, 0.455200, 0.455284",\ + "1.170724, 1.170725, 1.170730, 1.170746, 1.170779"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[3]_redg_2356*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[35]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.451072, 0.689495, 0.967641, 1.455853, 2.432276",\ + "0.493930, 0.732354, 1.010260, 1.497643, 2.472409",\ + "0.570383, 0.808808, 1.086665, 1.573880, 2.548310",\ + "0.793657, 1.032083, 1.309620, 1.795731, 2.767951",\ + "1.356346, 1.594772, 1.872207, 2.357962, 3.329473",\ + "0.538482, 0.777023, 1.055268, 1.542567, 2.518210",\ + "0.581340, 0.819882, 1.097884, 1.584358, 2.558343",\ + "0.657793, 0.896336, 1.174289, 1.660595, 2.634244",\ + "0.881067, 1.119611, 1.397241, 1.882445, 2.853885",\ + "1.443756, 1.682300, 1.959826, 2.444677, 3.415407",\ + "0.619344, 0.865949, 1.143233, 1.630189, 2.605165",\ + "0.662202, 0.908808, 1.185849, 1.671979, 2.645298",\ + "0.738655, 0.985262, 1.262254, 1.748217, 2.721199",\ + "0.961929, 1.208537, 1.485206, 1.970067, 2.940840",\ + "1.524618, 1.771226, 2.047791, 2.532299, 3.502362",\ + "0.677016, 0.931504, 1.207376, 1.694102, 2.668674",\ + "0.719874, 0.974362, 1.249992, 1.735892, 2.708807",\ + "0.796327, 1.050816, 1.326397, 1.812130, 2.784708",\ + "1.019601, 1.274091, 1.549348, 2.033980, 3.004349",\ + "1.582290, 1.836781, 2.111933, 2.596212, 3.565871",\ + "0.998045, 1.294967, 1.559438, 2.043528, 3.014130",\ + "1.040903, 1.337826, 1.602045, 2.085314, 3.054263",\ + "1.117357, 1.414280, 1.678448, 2.161551, 3.130164",\ + "1.340631, 1.637555, 1.901389, 2.383397, 3.349805",\ + "1.903320, 2.200244, 2.463970, 2.945627, 3.911327"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.072525, 0.072525, 0.072525, 0.072525, 0.072526",\ + "0.151107, 0.151107, 0.151107, 0.151107, 0.151107",\ + "0.326363, 0.326363, 0.326363, 0.326363, 0.326363",\ + "0.855550, 0.855550, 0.855550, 0.855550, 0.855551",\ + "2.186890, 2.186890, 2.186890, 2.186890, 2.186891",\ + "0.072525, 0.072525, 0.072525, 0.072525, 0.072526",\ + "0.151107, 0.151107, 0.151107, 0.151107, 0.151107",\ + "0.326363, 0.326363, 0.326363, 0.326363, 0.326363",\ + "0.855550, 0.855550, 0.855550, 0.855550, 0.855551",\ + "2.186890, 2.186890, 2.186890, 2.186890, 2.186891",\ + "0.072525, 0.072525, 0.072525, 0.072525, 0.072526",\ + "0.151107, 0.151107, 0.151107, 0.151107, 0.151107",\ + "0.326363, 0.326363, 0.326363, 0.326363, 0.326363",\ + "0.855550, 0.855550, 0.855550, 0.855550, 0.855551",\ + "2.186890, 2.186890, 2.186890, 2.186890, 2.186891",\ + "0.072525, 0.072525, 0.072525, 0.072525, 0.072526",\ + "0.151107, 0.151107, 0.151107, 0.151107, 0.151107",\ + "0.326363, 0.326363, 0.326363, 0.326363, 0.326363",\ + "0.855550, 0.855550, 0.855550, 0.855550, 0.855551",\ + "2.186890, 2.186890, 2.186890, 2.186890, 2.186891",\ + "0.072525, 0.072525, 0.072525, 0.072525, 0.072526",\ + "0.151107, 0.151107, 0.151107, 0.151107, 0.151107",\ + "0.326363, 0.326363, 0.326363, 0.326363, 0.326363",\ + "0.855550, 0.855550, 0.855550, 0.855550, 0.855551",\ + "2.186890, 2.186890, 2.186890, 2.186890, 2.186891"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.463085, 0.701506, 0.978942, 1.464699, 2.436214",\ + "0.490745, 0.729166, 1.006601, 1.492359, 2.463874",\ + "0.539949, 0.778370, 1.055805, 1.541563, 2.513078",\ + "0.680533, 0.918956, 1.196391, 1.682148, 2.653661",\ + "1.033170, 1.271589, 1.549246, 2.035768, 3.008812",\ + "0.550495, 0.789034, 1.066561, 1.551413, 2.522148",\ + "0.578155, 0.816694, 1.094220, 1.579073, 2.549807",\ + "0.627359, 0.865897, 1.143424, 1.628277, 2.599012",\ + "0.767943, 1.006484, 1.284010, 1.768862, 2.739595",\ + "1.120580, 1.359117, 1.636868, 2.122482, 3.094745",\ + "0.631357, 0.877960, 1.154525, 1.639035, 2.609103",\ + "0.659017, 0.905619, 1.182185, 1.666695, 2.636762",\ + "0.708221, 0.954823, 1.231389, 1.715899, 2.685967",\ + "0.848805, 1.095410, 1.371975, 1.856484, 2.826550",\ + "1.201442, 1.448043, 1.724832, 2.210104, 3.181700",\ + "0.689029, 0.943515, 1.218668, 1.702948, 2.672612",\ + "0.716689, 0.971174, 1.246328, 1.730608, 2.700271",\ + "0.765893, 1.020378, 1.295531, 1.779812, 2.749476",\ + "0.906477, 1.160964, 1.436117, 1.920397, 2.890059",\ + "1.259114, 1.513598, 1.788975, 2.274017, 3.245209",\ + "1.010056, 1.306978, 1.570705, 2.052364, 3.018068",\ + "1.037716, 1.334638, 1.598365, 2.080023, 3.045727",\ + "1.086920, 1.383842, 1.647568, 2.129227, 3.094932",\ + "1.227505, 1.524428, 1.788154, 2.269813, 3.235515",\ + "1.580140, 1.877061, 2.141020, 2.623435, 3.590666"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.031044, 0.031047, 0.031141, 0.031458, 0.032092",\ + "0.078404, 0.078404, 0.078413, 0.078441, 0.078497",\ + "0.173505, 0.173505, 0.173505, 0.173505, 0.173505",\ + "0.457145, 0.457145, 0.457145, 0.457145, 0.457145",\ + "1.169261, 1.169261, 1.169280, 1.169343, 1.169468",\ + "0.031044, 0.031047, 0.031142, 0.031458, 0.032092",\ + "0.078404, 0.078404, 0.078413, 0.078441, 0.078497",\ + "0.173505, 0.173505, 0.173505, 0.173505, 0.173505",\ + "0.457145, 0.457145, 0.457145, 0.457145, 0.457145",\ + "1.169261, 1.169261, 1.169280, 1.169343, 1.169468",\ + "0.031044, 0.031047, 0.031142, 0.031458, 0.032092",\ + "0.078404, 0.078404, 0.078413, 0.078441, 0.078497",\ + "0.173505, 0.173505, 0.173505, 0.173505, 0.173505",\ + "0.457145, 0.457145, 0.457145, 0.457145, 0.457145",\ + "1.169261, 1.169261, 1.169280, 1.169343, 1.169468",\ + "0.031044, 0.031047, 0.031142, 0.031458, 0.032092",\ + "0.078404, 0.078404, 0.078413, 0.078441, 0.078497",\ + "0.173505, 0.173505, 0.173505, 0.173505, 0.173505",\ + "0.457145, 0.457145, 0.457145, 0.457145, 0.457145",\ + "1.169261, 1.169261, 1.169280, 1.169343, 1.169468",\ + "0.031045, 0.031048, 0.031146, 0.031459, 0.032092",\ + "0.078404, 0.078404, 0.078413, 0.078441, 0.078497",\ + "0.173505, 0.173505, 0.173505, 0.173505, 0.173505",\ + "0.457145, 0.457145, 0.457145, 0.457145, 0.457145",\ + "1.169261, 1.169262, 1.169281, 1.169343, 1.169468"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[3]_redg_2423*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[36]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.549373, 0.808602, 1.094677, 1.588458, 2.576021",\ + "0.599470, 0.858699, 1.144772, 1.638553, 2.626115",\ + "0.688134, 0.947361, 1.233431, 1.727210, 2.714768",\ + "0.912284, 1.171509, 1.457578, 1.951357, 2.938914",\ + "1.464909, 1.724133, 2.010202, 2.503980, 3.491537",\ + "0.636786, 0.896164, 1.182323, 1.675173, 2.661954",\ + "0.686883, 0.946261, 1.232418, 1.725268, 2.712049",\ + "0.775547, 1.034922, 1.321077, 1.813925, 2.800702",\ + "0.999696, 1.259071, 1.545225, 2.038072, 3.024848",\ + "1.552321, 1.811695, 2.097848, 2.590695, 3.577471",\ + "0.717681, 0.985182, 1.270288, 1.762795, 2.748909",\ + "0.767778, 1.035279, 1.320384, 1.812890, 2.799004",\ + "0.856442, 1.123940, 1.409043, 1.901547, 2.887657",\ + "1.080592, 1.348089, 1.633190, 2.125694, 3.111803",\ + "1.633216, 1.900714, 2.185814, 2.678318, 3.664426",\ + "0.777205, 1.050872, 1.334432, 1.826709, 2.812418",\ + "0.827302, 1.100968, 1.384528, 1.876804, 2.862513",\ + "0.915966, 1.189630, 1.473186, 1.965461, 2.951166",\ + "1.140115, 1.413779, 1.697334, 2.189608, 3.175312",\ + "1.692740, 1.966403, 2.249958, 2.742231, 3.727935",\ + "1.110638, 1.415870, 1.686553, 2.176160, 3.157875",\ + "1.160735, 1.465966, 1.736648, 2.226255, 3.207969",\ + "1.249399, 1.554628, 1.825307, 2.314913, 3.296622",\ + "1.473549, 1.778776, 2.049454, 2.539060, 3.520768",\ + "2.026173, 2.331400, 2.602078, 3.091683, 4.073391"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.046980, 0.046981, 0.046983, 0.046983, 0.046983",\ + "0.140333, 0.140333, 0.140334, 0.140334, 0.140334",\ + "0.324730, 0.324730, 0.324730, 0.324732, 0.324735",\ + "0.855404, 0.855405, 0.855408, 0.855419, 0.855440",\ + "2.185952, 2.185953, 2.185954, 2.185960, 2.185970",\ + "0.046980, 0.046981, 0.046983, 0.046983, 0.046983",\ + "0.140333, 0.140333, 0.140334, 0.140334, 0.140334",\ + "0.324730, 0.324730, 0.324730, 0.324732, 0.324735",\ + "0.855404, 0.855405, 0.855408, 0.855419, 0.855440",\ + "2.185952, 2.185953, 2.185954, 2.185960, 2.185970",\ + "0.046980, 0.046981, 0.046983, 0.046983, 0.046983",\ + "0.140333, 0.140333, 0.140334, 0.140334, 0.140334",\ + "0.324730, 0.324730, 0.324730, 0.324732, 0.324735",\ + "0.855404, 0.855405, 0.855408, 0.855419, 0.855440",\ + "2.185952, 2.185953, 2.185954, 2.185960, 2.185970",\ + "0.046980, 0.046981, 0.046983, 0.046983, 0.046983",\ + "0.140333, 0.140333, 0.140334, 0.140334, 0.140334",\ + "0.324730, 0.324730, 0.324730, 0.324732, 0.324735",\ + "0.855405, 0.855405, 0.855408, 0.855419, 0.855440",\ + "2.185952, 2.185953, 2.185954, 2.185960, 2.185970",\ + "0.046980, 0.046982, 0.046983, 0.046983, 0.046983",\ + "0.140333, 0.140334, 0.140334, 0.140334, 0.140334",\ + "0.324730, 0.324730, 0.324730, 0.324732, 0.324735",\ + "0.855405, 0.855405, 0.855408, 0.855419, 0.855440",\ + "2.185952, 2.185953, 2.185954, 2.185960, 2.185970"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.585206, 0.844429, 1.130494, 1.624271, 2.611824",\ + "0.606889, 0.866111, 1.152175, 1.645951, 2.633503",\ + "0.648404, 0.907626, 1.193689, 1.687465, 2.675017",\ + "0.781694, 1.040916, 1.326981, 1.820757, 2.808309",\ + "1.130589, 1.389812, 1.675878, 2.169654, 3.157208",\ + "0.672619, 0.931991, 1.218140, 1.710986, 2.697757",\ + "0.694301, 0.953673, 1.239821, 1.732666, 2.719437",\ + "0.735816, 0.995187, 1.281336, 1.774180, 2.760951",\ + "0.869107, 1.128478, 1.414627, 1.907472, 2.894243",\ + "1.218002, 1.477374, 1.763524, 2.256369, 3.243142",\ + "0.753514, 1.021009, 1.306106, 1.798608, 2.784713",\ + "0.775196, 1.042691, 1.327787, 1.820288, 2.806392",\ + "0.816712, 1.084206, 1.369301, 1.861803, 2.847906",\ + "0.950002, 1.217496, 1.502593, 1.995094, 2.981198",\ + "1.298897, 1.566392, 1.851490, 2.343992, 3.330097",\ + "0.813038, 1.086698, 1.370250, 1.862521, 2.848222",\ + "0.834720, 1.108380, 1.391931, 1.884202, 2.869901",\ + "0.876235, 1.149895, 1.433445, 1.925716, 2.911415",\ + "1.009526, 1.283186, 1.566736, 2.059008, 3.044707",\ + "1.358421, 1.632081, 1.915633, 2.407905, 3.393606",\ + "1.146470, 1.451694, 1.722370, 2.211973, 3.193677",\ + "1.168153, 1.473376, 1.744051, 2.233654, 3.215357",\ + "1.209668, 1.514891, 1.785565, 2.275168, 3.256871",\ + "1.342959, 1.648182, 1.918857, 2.408459, 3.390163",\ + "1.691854, 1.997078, 2.267754, 2.757357, 3.739062"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.045699, 0.045703, 0.045708, 0.045711, 0.045717",\ + "0.082751, 0.082753, 0.082754, 0.082755, 0.082756",\ + "0.171712, 0.171712, 0.171712, 0.171712, 0.171713",\ + "0.455132, 0.455132, 0.455133, 0.455139, 0.455149",\ + "1.170720, 1.170720, 1.170720, 1.170722, 1.170727",\ + "0.045699, 0.045703, 0.045708, 0.045711, 0.045717",\ + "0.082751, 0.082753, 0.082754, 0.082755, 0.082756",\ + "0.171712, 0.171712, 0.171712, 0.171712, 0.171713",\ + "0.455132, 0.455132, 0.455133, 0.455139, 0.455149",\ + "1.170720, 1.170720, 1.170720, 1.170722, 1.170727",\ + "0.045699, 0.045703, 0.045708, 0.045711, 0.045717",\ + "0.082751, 0.082753, 0.082754, 0.082755, 0.082756",\ + "0.171712, 0.171712, 0.171712, 0.171712, 0.171713",\ + "0.455132, 0.455132, 0.455133, 0.455139, 0.455149",\ + "1.170720, 1.170720, 1.170720, 1.170722, 1.170727",\ + "0.045699, 0.045703, 0.045708, 0.045711, 0.045717",\ + "0.082752, 0.082753, 0.082754, 0.082755, 0.082756",\ + "0.171712, 0.171712, 0.171712, 0.171712, 0.171713",\ + "0.455132, 0.455132, 0.455133, 0.455139, 0.455149",\ + "1.170720, 1.170720, 1.170720, 1.170722, 1.170727",\ + "0.045700, 0.045704, 0.045708, 0.045711, 0.045717",\ + "0.082752, 0.082753, 0.082754, 0.082755, 0.082756",\ + "0.171712, 0.171712, 0.171712, 0.171712, 0.171713",\ + "0.455132, 0.455132, 0.455133, 0.455139, 0.455149",\ + "1.170720, 1.170720, 1.170720, 1.170722, 1.170727"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[3]_redg_2482*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[37]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.531759, 0.784650, 1.063366, 1.526559, 2.452945",\ + "0.581856, 0.834746, 1.113461, 1.576654, 2.503039",\ + "0.670520, 0.923407, 1.202119, 1.665310, 2.591694",\ + "0.894669, 1.147555, 1.426266, 1.889457, 2.815840",\ + "1.447294, 1.700179, 1.978889, 2.442080, 3.368464",\ + "0.619167, 0.872231, 1.150913, 1.613273, 2.538878",\ + "0.669264, 0.922327, 1.201009, 1.663368, 2.588973",\ + "0.757928, 1.010988, 1.289666, 1.752025, 2.677628",\ + "0.982077, 1.235136, 1.513813, 1.976171, 2.901774",\ + "1.534702, 1.787760, 2.066437, 2.528795, 3.454397",\ + "0.699981, 0.961270, 1.238877, 1.700895, 2.625834",\ + "0.750078, 1.011366, 1.288972, 1.750990, 2.675928",\ + "0.838742, 1.100027, 1.377629, 1.839646, 2.764583",\ + "1.062892, 1.324176, 1.601776, 2.063793, 2.988729",\ + "1.615517, 1.876800, 2.154400, 2.616416, 3.541352",\ + "0.757572, 1.026990, 1.303015, 1.764808, 2.689342",\ + "0.807669, 1.077086, 1.353110, 1.814903, 2.739437",\ + "0.896333, 1.165747, 1.441768, 1.903559, 2.828092",\ + "1.120482, 1.389895, 1.665915, 2.127706, 3.052238",\ + "1.673107, 1.942519, 2.218538, 2.680329, 3.604861",\ + "1.090182, 1.392406, 1.654823, 2.114129, 3.034798",\ + "1.140279, 1.442501, 1.704918, 2.164223, 3.084893",\ + "1.228943, 1.531161, 1.793575, 2.252880, 3.173548",\ + "1.453092, 1.755309, 2.017722, 2.477027, 3.397694",\ + "2.005717, 2.307933, 2.570345, 3.029650, 3.950317"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.046980, 0.046980, 0.046980, 0.046980, 0.046980",\ + "0.140333, 0.140333, 0.140333, 0.140333, 0.140333",\ + "0.324730, 0.324730, 0.324730, 0.324731, 0.324732",\ + "0.855404, 0.855404, 0.855405, 0.855410, 0.855418",\ + "2.185952, 2.185952, 2.185953, 2.185955, 2.185959",\ + "0.046980, 0.046980, 0.046980, 0.046980, 0.046980",\ + "0.140333, 0.140333, 0.140333, 0.140333, 0.140333",\ + "0.324730, 0.324730, 0.324730, 0.324731, 0.324732",\ + "0.855404, 0.855404, 0.855405, 0.855410, 0.855418",\ + "2.185952, 2.185952, 2.185953, 2.185955, 2.185959",\ + "0.046980, 0.046980, 0.046980, 0.046980, 0.046980",\ + "0.140333, 0.140333, 0.140333, 0.140333, 0.140333",\ + "0.324730, 0.324730, 0.324730, 0.324731, 0.324732",\ + "0.855404, 0.855404, 0.855405, 0.855410, 0.855418",\ + "2.185952, 2.185952, 2.185953, 2.185955, 2.185959",\ + "0.046980, 0.046980, 0.046980, 0.046980, 0.046980",\ + "0.140333, 0.140333, 0.140333, 0.140333, 0.140333",\ + "0.324730, 0.324730, 0.324730, 0.324731, 0.324732",\ + "0.855404, 0.855404, 0.855405, 0.855410, 0.855418",\ + "2.185952, 2.185952, 2.185953, 2.185955, 2.185959",\ + "0.046980, 0.046980, 0.046980, 0.046980, 0.046980",\ + "0.140333, 0.140333, 0.140333, 0.140333, 0.140333",\ + "0.324730, 0.324730, 0.324730, 0.324731, 0.324732",\ + "0.855404, 0.855404, 0.855406, 0.855410, 0.855418",\ + "2.185952, 2.185952, 2.185953, 2.185955, 2.185959"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.567591, 0.820473, 1.099180, 1.562370, 2.488752",\ + "0.589274, 0.842155, 1.120860, 1.584051, 2.510432",\ + "0.630789, 0.883670, 1.162374, 1.625565, 2.551946",\ + "0.764080, 1.016961, 1.295666, 1.758857, 2.685237",\ + "1.112975, 1.365857, 1.644563, 2.107754, 3.034136",\ + "0.655000, 0.908054, 1.186727, 1.649085, 2.574686",\ + "0.676682, 0.929736, 1.208408, 1.670765, 2.596366",\ + "0.718198, 0.971251, 1.249922, 1.712279, 2.637879",\ + "0.851488, 1.104542, 1.383214, 1.845571, 2.771171",\ + "1.200383, 1.453438, 1.732111, 2.194468, 3.120070",\ + "0.735814, 0.997094, 1.274690, 1.736706, 2.661641",\ + "0.757496, 1.018775, 1.296371, 1.758387, 2.683321",\ + "0.799012, 1.060290, 1.337885, 1.799901, 2.724834",\ + "0.932302, 1.193581, 1.471177, 1.933192, 2.858126",\ + "1.281197, 1.542477, 1.820074, 2.282090, 3.207025",\ + "0.793404, 1.062813, 1.338829, 1.800619, 2.725150",\ + "0.815087, 1.084495, 1.360510, 1.822300, 2.746830",\ + "0.856602, 1.126010, 1.402024, 1.863814, 2.788343",\ + "0.989893, 1.259301, 1.535315, 1.997105, 2.921635",\ + "1.338787, 1.608197, 1.884213, 2.346003, 3.270534",\ + "1.126013, 1.428226, 1.690636, 2.149940, 3.070606",\ + "1.147696, 1.449908, 1.712317, 2.171620, 3.092286",\ + "1.189211, 1.491422, 1.753831, 2.213135, 3.133800",\ + "1.322502, 1.624713, 1.887123, 2.346426, 3.267091",\ + "1.671397, 1.973610, 2.236020, 2.695324, 3.615990"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.045699, 0.045705, 0.045710, 0.045712, 0.045714",\ + "0.082751, 0.082753, 0.082755, 0.082755, 0.082756",\ + "0.171712, 0.171712, 0.171712, 0.171712, 0.171712",\ + "0.455131, 0.455131, 0.455132, 0.455134, 0.455138",\ + "1.170720, 1.170720, 1.170720, 1.170721, 1.170722",\ + "0.045699, 0.045705, 0.045710, 0.045712, 0.045714",\ + "0.082751, 0.082753, 0.082755, 0.082755, 0.082756",\ + "0.171712, 0.171712, 0.171712, 0.171712, 0.171712",\ + "0.455131, 0.455131, 0.455132, 0.455134, 0.455138",\ + "1.170720, 1.170720, 1.170720, 1.170721, 1.170722",\ + "0.045699, 0.045705, 0.045710, 0.045712, 0.045714",\ + "0.082751, 0.082753, 0.082755, 0.082755, 0.082756",\ + "0.171712, 0.171712, 0.171712, 0.171712, 0.171712",\ + "0.455131, 0.455131, 0.455132, 0.455134, 0.455138",\ + "1.170720, 1.170720, 1.170720, 1.170721, 1.170722",\ + "0.045699, 0.045705, 0.045710, 0.045712, 0.045714",\ + "0.082751, 0.082753, 0.082755, 0.082755, 0.082756",\ + "0.171712, 0.171712, 0.171712, 0.171712, 0.171712",\ + "0.455131, 0.455131, 0.455132, 0.455134, 0.455138",\ + "1.170720, 1.170720, 1.170720, 1.170721, 1.170722",\ + "0.045700, 0.045706, 0.045710, 0.045712, 0.045714",\ + "0.082752, 0.082753, 0.082755, 0.082755, 0.082756",\ + "0.171712, 0.171712, 0.171712, 0.171712, 0.171712",\ + "0.455131, 0.455131, 0.455132, 0.455134, 0.455138",\ + "1.170720, 1.170720, 1.170720, 1.170721, 1.170722"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[3]_redg_2546*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[39]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.406169, 0.656592, 0.934420, 1.432277, 2.427991",\ + "0.449017, 0.699439, 0.977034, 1.474087, 2.468193",\ + "0.525461, 0.775882, 1.053428, 1.550312, 2.544081",\ + "0.748731, 0.999151, 1.276378, 1.772159, 2.763722",\ + "1.311413, 1.561833, 1.838149, 2.330786, 3.316060",\ + "0.493579, 0.744100, 1.022078, 1.518992, 2.513925",\ + "0.536427, 0.786947, 1.064689, 1.560801, 2.554126",\ + "0.612871, 0.863390, 1.141083, 1.637027, 2.630014",\ + "0.836140, 1.086659, 1.364029, 1.858874, 2.849656",\ + "1.398823, 1.649341, 1.925790, 2.417500, 3.401994",\ + "0.574430, 0.832981, 1.110043, 1.606613, 2.600880",\ + "0.617278, 0.875827, 1.152654, 1.648423, 2.641081",\ + "0.693722, 0.952271, 1.229048, 1.724649, 2.716969",\ + "0.916992, 1.175540, 1.451994, 1.946496, 2.936611",\ + "1.479674, 1.738222, 2.013755, 2.505122, 3.488949",\ + "0.633136, 0.898470, 1.174188, 1.670527, 2.664389",\ + "0.675984, 0.941316, 1.216799, 1.712336, 2.704590",\ + "0.752428, 1.017760, 1.293192, 1.788562, 2.780478",\ + "0.975698, 1.241029, 1.516138, 2.010409, 3.000120",\ + "1.538380, 1.803711, 2.077899, 2.569036, 3.552458",\ + "0.968049, 1.261165, 1.526347, 2.019992, 3.009845",\ + "1.010896, 1.304012, 1.568950, 2.061798, 3.050046",\ + "1.087340, 1.380455, 1.645342, 2.138023, 3.125935",\ + "1.310609, 1.603724, 1.868277, 2.359865, 3.345576",\ + "1.873291, 2.166406, 2.430006, 2.918479, 3.897913"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.072784, 0.072803, 0.073020, 0.073739, 0.075177",\ + "0.151157, 0.151161, 0.151203, 0.151342, 0.151621",\ + "0.326364, 0.326364, 0.326365, 0.326368, 0.326373",\ + "0.855741, 0.855755, 0.855915, 0.856445, 0.857505",\ + "2.187214, 2.187237, 2.187508, 2.188406, 2.190202",\ + "0.072784, 0.072803, 0.073022, 0.073739, 0.075177",\ + "0.151157, 0.151161, 0.151203, 0.151342, 0.151621",\ + "0.326364, 0.326364, 0.326365, 0.326368, 0.326373",\ + "0.855741, 0.855755, 0.855917, 0.856445, 0.857505",\ + "2.187214, 2.187237, 2.187511, 2.188406, 2.190202",\ + "0.072785, 0.072803, 0.073022, 0.073739, 0.075177",\ + "0.151157, 0.151161, 0.151203, 0.151342, 0.151621",\ + "0.326364, 0.326364, 0.326365, 0.326368, 0.326373",\ + "0.855742, 0.855755, 0.855917, 0.856445, 0.857505",\ + "2.187214, 2.187238, 2.187511, 2.188406, 2.190202",\ + "0.072787, 0.072803, 0.073023, 0.073739, 0.075177",\ + "0.151157, 0.151161, 0.151203, 0.151342, 0.151621",\ + "0.326364, 0.326364, 0.326365, 0.326368, 0.326373",\ + "0.855743, 0.855755, 0.855917, 0.856445, 0.857505",\ + "2.187217, 2.187238, 2.187511, 2.188406, 2.190202",\ + "0.072792, 0.072806, 0.073030, 0.073742, 0.075177",\ + "0.151158, 0.151161, 0.151205, 0.151343, 0.151621",\ + "0.326364, 0.326364, 0.326365, 0.326368, 0.326373",\ + "0.855747, 0.855757, 0.855922, 0.856447, 0.857505",\ + "2.187224, 2.187241, 2.187521, 2.188410, 2.190202"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.418201, 0.668626, 0.943179, 1.429721, 2.402805",\ + "0.445861, 0.696286, 0.970980, 1.458010, 2.432069",\ + "0.495070, 0.745495, 1.020403, 1.508166, 2.483693",\ + "0.635634, 0.886057, 1.161631, 1.651703, 2.631847",\ + "0.988299, 1.238725, 1.516052, 2.012175, 3.004421",\ + "0.505610, 0.756134, 1.030800, 1.516435, 2.488739",\ + "0.533270, 0.783794, 1.058603, 1.544724, 2.518003",\ + "0.582480, 0.833003, 1.108028, 1.594880, 2.569627",\ + "0.723043, 0.973565, 1.249264, 1.738417, 2.717781",\ + "1.075708, 1.326233, 1.603704, 2.098890, 3.090355",\ + "0.586462, 0.845014, 1.118765, 1.604057, 2.575694",\ + "0.614122, 0.872674, 1.146568, 1.632346, 2.604958",\ + "0.663331, 0.921884, 1.195993, 1.682502, 2.656582",\ + "0.803894, 1.062445, 1.337229, 1.826039, 2.804736",\ + "1.156560, 1.415114, 1.691670, 2.186512, 3.177310",\ + "0.645168, 0.910503, 1.182908, 1.667970, 2.639203",\ + "0.672828, 0.938163, 1.210711, 1.696259, 2.668467",\ + "0.722037, 0.987373, 1.260136, 1.746415, 2.720091",\ + "0.862600, 1.127934, 1.401372, 1.889952, 2.868245",\ + "1.215266, 1.480603, 1.755814, 2.250425, 3.240819",\ + "0.980081, 1.273199, 1.534953, 2.017389, 2.984659",\ + "1.007741, 1.300859, 1.562760, 2.045680, 3.013923",\ + "1.056951, 1.350069, 1.612193, 2.095839, 3.065547",\ + "1.197513, 1.490629, 1.753453, 2.239386, 3.213701",\ + "1.550180, 1.843298, 2.107956, 2.599883, 3.586275"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.031046, 0.031099, 0.031481, 0.032572, 0.034755",\ + "0.078404, 0.078409, 0.078443, 0.078540, 0.078733",\ + "0.173504, 0.173502, 0.173487, 0.173444, 0.173357",\ + "0.457144, 0.457135, 0.457066, 0.456868, 0.456473",\ + "1.169261, 1.169272, 1.169347, 1.169562, 1.169994",\ + "0.031046, 0.031099, 0.031484, 0.032572, 0.034755",\ + "0.078404, 0.078409, 0.078443, 0.078540, 0.078733",\ + "0.173504, 0.173502, 0.173487, 0.173444, 0.173357",\ + "0.457144, 0.457135, 0.457065, 0.456868, 0.456473",\ + "1.169261, 1.169272, 1.169348, 1.169562, 1.169994",\ + "0.031046, 0.031100, 0.031484, 0.032572, 0.034755",\ + "0.078404, 0.078409, 0.078443, 0.078540, 0.078733",\ + "0.173504, 0.173502, 0.173487, 0.173444, 0.173357",\ + "0.457144, 0.457134, 0.457065, 0.456868, 0.456473",\ + "1.169261, 1.169272, 1.169348, 1.169562, 1.169994",\ + "0.031048, 0.031101, 0.031484, 0.032572, 0.034755",\ + "0.078404, 0.078409, 0.078443, 0.078540, 0.078733",\ + "0.173504, 0.173502, 0.173487, 0.173444, 0.173357",\ + "0.457144, 0.457134, 0.457065, 0.456868, 0.456473",\ + "1.169261, 1.169272, 1.169348, 1.169562, 1.169994",\ + "0.031051, 0.031118, 0.031495, 0.032577, 0.034755",\ + "0.078405, 0.078410, 0.078444, 0.078540, 0.078733",\ + "0.173504, 0.173502, 0.173487, 0.173443, 0.173357",\ + "0.457143, 0.457131, 0.457063, 0.456867, 0.456473",\ + "1.169262, 1.169275, 1.169350, 1.169563, 1.169994"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[3]_redg_2619*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[41]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.553465, 0.819964, 1.109829, 1.605668, 2.597345",\ + "0.603560, 0.870058, 1.159923, 1.655763, 2.647441",\ + "0.692214, 0.958711, 1.248576, 1.744417, 2.736099",\ + "0.916360, 1.182856, 1.472721, 1.968563, 2.960246",\ + "1.468983, 1.735479, 2.025344, 2.521186, 3.512870",\ + "0.640874, 0.907555, 1.197480, 1.692382, 2.683279",\ + "0.690968, 0.957649, 1.247574, 1.742477, 2.733375",\ + "0.779622, 1.046302, 1.336226, 1.831131, 2.822032",\ + "1.003768, 1.270447, 1.560372, 2.055277, 3.046180",\ + "1.556391, 1.823070, 2.112994, 2.607900, 3.598804",\ + "0.721784, 0.996619, 1.285445, 1.780004, 2.770234",\ + "0.771879, 1.046713, 1.335539, 1.830098, 2.820330",\ + "0.860533, 1.135366, 1.424191, 1.918753, 2.908988",\ + "1.084679, 1.359511, 1.648337, 2.142899, 3.133135",\ + "1.637302, 1.912134, 2.200959, 2.695522, 3.685759",\ + "0.783629, 1.062374, 1.349589, 1.843917, 2.833743",\ + "0.833723, 1.112468, 1.399683, 1.894011, 2.883839",\ + "0.922377, 1.201121, 1.488336, 1.982666, 2.972497",\ + "1.146523, 1.425267, 1.712481, 2.206812, 3.196644",\ + "1.699146, 1.977889, 2.265103, 2.759435, 3.749268",\ + "1.121586, 1.428200, 1.701728, 2.193373, 3.179199",\ + "1.171680, 1.478294, 1.751822, 2.243467, 3.229295",\ + "1.260334, 1.566947, 1.840474, 2.332122, 3.317953",\ + "1.484480, 1.791093, 2.064620, 2.556268, 3.542100",\ + "2.037102, 2.343715, 2.617242, 3.108891, 4.094724"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.046988, 0.046989, 0.046990, 0.046990, 0.046990",\ + "0.140334, 0.140334, 0.140334, 0.140334, 0.140334",\ + "0.324728, 0.324728, 0.324728, 0.324730, 0.324733",\ + "0.855392, 0.855392, 0.855394, 0.855403, 0.855422",\ + "2.185946, 2.185946, 2.185947, 2.185952, 2.185961",\ + "0.046988, 0.046989, 0.046990, 0.046990, 0.046990",\ + "0.140334, 0.140334, 0.140334, 0.140334, 0.140334",\ + "0.324728, 0.324728, 0.324728, 0.324730, 0.324733",\ + "0.855392, 0.855392, 0.855394, 0.855403, 0.855422",\ + "2.185946, 2.185946, 2.185947, 2.185952, 2.185961",\ + "0.046988, 0.046989, 0.046990, 0.046990, 0.046990",\ + "0.140334, 0.140334, 0.140334, 0.140334, 0.140334",\ + "0.324728, 0.324728, 0.324728, 0.324730, 0.324733",\ + "0.855392, 0.855392, 0.855394, 0.855403, 0.855422",\ + "2.185946, 2.185946, 2.185947, 2.185952, 2.185961",\ + "0.046988, 0.046989, 0.046990, 0.046990, 0.046990",\ + "0.140334, 0.140334, 0.140334, 0.140334, 0.140334",\ + "0.324728, 0.324728, 0.324728, 0.324730, 0.324733",\ + "0.855392, 0.855392, 0.855394, 0.855403, 0.855422",\ + "2.185946, 2.185946, 2.185947, 2.185952, 2.185961",\ + "0.046988, 0.046989, 0.046990, 0.046990, 0.046990",\ + "0.140334, 0.140334, 0.140334, 0.140334, 0.140334",\ + "0.324728, 0.324728, 0.324728, 0.324730, 0.324733",\ + "0.855392, 0.855392, 0.855394, 0.855403, 0.855422",\ + "2.185946, 2.185946, 2.185947, 2.185952, 2.185961"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.589270, 0.855765, 1.145630, 1.641474, 2.633161",\ + "0.610950, 0.877444, 1.167309, 1.663153, 2.654842",\ + "0.652464, 0.918958, 1.208822, 1.704667, 2.696356",\ + "0.785756, 1.052250, 1.342115, 1.837959, 2.829648",\ + "1.134654, 1.401149, 1.691014, 2.186858, 3.178545",\ + "0.676679, 0.943356, 1.233280, 1.728188, 2.719095",\ + "0.698358, 0.965036, 1.254959, 1.749868, 2.740776",\ + "0.739872, 1.006549, 1.296473, 1.791381, 2.782290",\ + "0.873164, 1.139841, 1.429765, 1.924673, 2.915581",\ + "1.222063, 1.488740, 1.778664, 2.273572, 3.264479",\ + "0.757589, 1.032420, 1.321245, 1.815809, 2.806050",\ + "0.779269, 1.054100, 1.342925, 1.837489, 2.827731",\ + "0.820783, 1.095613, 1.384438, 1.879003, 2.869245",\ + "0.954075, 1.228905, 1.517730, 2.012295, 3.002537",\ + "1.302974, 1.577804, 1.866629, 2.361193, 3.351434",\ + "0.819433, 1.098175, 1.385389, 1.879722, 2.869559",\ + "0.841113, 1.119855, 1.407069, 1.901402, 2.891240",\ + "0.882627, 1.161368, 1.448582, 1.942916, 2.932754",\ + "1.015919, 1.294661, 1.581874, 2.076208, 3.066046",\ + "1.364817, 1.643559, 1.930773, 2.425107, 3.414943",\ + "1.157390, 1.464001, 1.737528, 2.229178, 3.215015",\ + "1.179069, 1.485680, 1.759207, 2.250858, 3.236696",\ + "1.220583, 1.527194, 1.800721, 2.292372, 3.278210",\ + "1.353875, 1.660486, 1.934013, 2.425664, 3.411501",\ + "1.702774, 2.009385, 2.282912, 2.774562, 3.760399"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.045715, 0.045718, 0.045719, 0.045719, 0.045719",\ + "0.082756, 0.082757, 0.082757, 0.082757, 0.082757",\ + "0.171711, 0.171711, 0.171711, 0.171712, 0.171712",\ + "0.455125, 0.455125, 0.455126, 0.455131, 0.455140",\ + "1.170717, 1.170717, 1.170718, 1.170720, 1.170723",\ + "0.045715, 0.045718, 0.045719, 0.045719, 0.045719",\ + "0.082756, 0.082757, 0.082757, 0.082757, 0.082757",\ + "0.171711, 0.171711, 0.171711, 0.171712, 0.171712",\ + "0.455125, 0.455125, 0.455126, 0.455131, 0.455140",\ + "1.170717, 1.170717, 1.170718, 1.170720, 1.170723",\ + "0.045715, 0.045718, 0.045719, 0.045719, 0.045719",\ + "0.082756, 0.082757, 0.082757, 0.082757, 0.082757",\ + "0.171711, 0.171711, 0.171711, 0.171712, 0.171712",\ + "0.455125, 0.455125, 0.455126, 0.455131, 0.455140",\ + "1.170717, 1.170717, 1.170718, 1.170720, 1.170723",\ + "0.045716, 0.045718, 0.045719, 0.045719, 0.045719",\ + "0.082756, 0.082757, 0.082757, 0.082757, 0.082757",\ + "0.171711, 0.171711, 0.171711, 0.171712, 0.171712",\ + "0.455125, 0.455125, 0.455126, 0.455131, 0.455140",\ + "1.170717, 1.170717, 1.170718, 1.170720, 1.170723",\ + "0.045716, 0.045718, 0.045719, 0.045719, 0.045719",\ + "0.082756, 0.082757, 0.082757, 0.082757, 0.082757",\ + "0.171711, 0.171711, 0.171711, 0.171712, 0.171712",\ + "0.455125, 0.455125, 0.455126, 0.455131, 0.455140",\ + "1.170717, 1.170717, 1.170718, 1.170720, 1.170723"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[3]_redg_2551*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[42]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.535912, 0.788172, 1.068241, 1.533239, 2.463234",\ + "0.586006, 0.838266, 1.118335, 1.583333, 2.513329",\ + "0.674661, 0.926920, 1.206988, 1.671987, 2.601985",\ + "0.898807, 1.151066, 1.431133, 1.896132, 2.826131",\ + "1.451430, 1.703688, 1.983755, 2.448755, 3.378754",\ + "0.623320, 0.875758, 1.155794, 1.619953, 2.549168",\ + "0.673414, 0.925853, 1.205888, 1.670047, 2.599263",\ + "0.762069, 1.014506, 1.294541, 1.758701, 2.687918",\ + "0.986215, 1.238652, 1.518686, 1.982847, 2.912065",\ + "1.538838, 1.791275, 2.071309, 2.535469, 3.464688",\ + "0.704222, 0.964810, 1.243757, 1.707574, 2.636123",\ + "0.754316, 1.014904, 1.293851, 1.757668, 2.686218",\ + "0.842971, 1.103558, 1.382504, 1.846323, 2.774873",\ + "1.067117, 1.327704, 1.606649, 2.070468, 2.999020",\ + "1.619740, 1.880326, 2.159272, 2.623091, 3.551643",\ + "0.761984, 1.030547, 1.307896, 1.771487, 2.699632",\ + "0.812078, 1.080642, 1.357990, 1.821582, 2.749727",\ + "0.900733, 1.169295, 1.446643, 1.910236, 2.838382",\ + "1.124879, 1.393441, 1.670788, 2.134381, 3.062529",\ + "1.677502, 1.946064, 2.223411, 2.687004, 3.615152",\ + "1.092601, 1.396168, 1.659722, 2.120816, 3.045088",\ + "1.142695, 1.446262, 1.709816, 2.170910, 3.095183",\ + "1.231350, 1.534915, 1.798469, 2.259564, 3.183838",\ + "1.455496, 1.759061, 2.022614, 2.483710, 3.407985",\ + "2.008119, 2.311684, 2.575236, 3.036332, 3.960608"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.046988, 0.046989, 0.046990, 0.046990, 0.046990",\ + "0.140334, 0.140334, 0.140334, 0.140334, 0.140334",\ + "0.324728, 0.324728, 0.324728, 0.324729, 0.324730",\ + "0.855391, 0.855391, 0.855393, 0.855398, 0.855408",\ + "2.185946, 2.185946, 2.185946, 2.185949, 2.185954",\ + "0.046988, 0.046989, 0.046990, 0.046990, 0.046990",\ + "0.140334, 0.140334, 0.140334, 0.140334, 0.140334",\ + "0.324728, 0.324728, 0.324728, 0.324729, 0.324730",\ + "0.855391, 0.855391, 0.855393, 0.855398, 0.855408",\ + "2.185946, 2.185946, 2.185946, 2.185949, 2.185954",\ + "0.046988, 0.046989, 0.046990, 0.046990, 0.046990",\ + "0.140334, 0.140334, 0.140334, 0.140334, 0.140334",\ + "0.324728, 0.324728, 0.324728, 0.324729, 0.324730",\ + "0.855391, 0.855391, 0.855393, 0.855398, 0.855408",\ + "2.185946, 2.185946, 2.185946, 2.185949, 2.185954",\ + "0.046988, 0.046989, 0.046990, 0.046990, 0.046990",\ + "0.140334, 0.140334, 0.140334, 0.140334, 0.140334",\ + "0.324728, 0.324728, 0.324728, 0.324729, 0.324730",\ + "0.855391, 0.855391, 0.855393, 0.855398, 0.855408",\ + "2.185946, 2.185946, 2.185946, 2.185949, 2.185954",\ + "0.046988, 0.046989, 0.046990, 0.046990, 0.046990",\ + "0.140334, 0.140334, 0.140334, 0.140334, 0.140334",\ + "0.324728, 0.324728, 0.324728, 0.324729, 0.324730",\ + "0.855391, 0.855391, 0.855393, 0.855398, 0.855408",\ + "2.185946, 2.185946, 2.185946, 2.185949, 2.185954"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.571718, 0.823975, 1.104042, 1.569042, 2.499043",\ + "0.593398, 0.845655, 1.125721, 1.590722, 2.520724",\ + "0.634911, 0.887169, 1.167235, 1.632236, 2.562238",\ + "0.768203, 1.020461, 1.300527, 1.765528, 2.695529",\ + "1.117102, 1.369359, 1.649426, 2.114426, 3.044427",\ + "0.659126, 0.911562, 1.191595, 1.655756, 2.584977",\ + "0.680806, 0.933241, 1.213274, 1.677436, 2.606658",\ + "0.722320, 0.974755, 1.254788, 1.718950, 2.648171",\ + "0.855612, 1.108047, 1.388080, 1.852242, 2.781463",\ + "1.204510, 1.456946, 1.736979, 2.201141, 3.130361",\ + "0.740028, 1.000613, 1.279558, 1.743378, 2.671932",\ + "0.761708, 1.022293, 1.301237, 1.765058, 2.693613",\ + "0.803222, 1.063807, 1.342751, 1.806571, 2.735126",\ + "0.936514, 1.197099, 1.476043, 1.939863, 2.868418",\ + "1.285412, 1.545998, 1.824942, 2.288762, 3.217316",\ + "0.797790, 1.066351, 1.343697, 1.807291, 2.735441",\ + "0.819470, 1.088030, 1.365376, 1.828971, 2.757122",\ + "0.860984, 1.129544, 1.406890, 1.870484, 2.798635",\ + "0.994276, 1.262836, 1.540182, 2.003777, 2.931927",\ + "1.343174, 1.611735, 1.889081, 2.352675, 3.280825",\ + "1.128407, 1.431970, 1.695523, 2.156619, 3.080897",\ + "1.150087, 1.453650, 1.717202, 2.178299, 3.102577",\ + "1.191600, 1.495163, 1.758715, 2.219813, 3.144091",\ + "1.324893, 1.628456, 1.892008, 2.353105, 3.277383",\ + "1.673791, 1.977355, 2.240907, 2.702003, 3.626281"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.045715, 0.045716, 0.045718, 0.045718, 0.045718",\ + "0.082756, 0.082756, 0.082757, 0.082757, 0.082757",\ + "0.171711, 0.171711, 0.171711, 0.171712, 0.171712",\ + "0.455125, 0.455125, 0.455126, 0.455128, 0.455133",\ + "1.170717, 1.170717, 1.170717, 1.170718, 1.170720",\ + "0.045715, 0.045716, 0.045718, 0.045718, 0.045718",\ + "0.082756, 0.082756, 0.082757, 0.082757, 0.082757",\ + "0.171711, 0.171711, 0.171711, 0.171712, 0.171712",\ + "0.455125, 0.455125, 0.455126, 0.455128, 0.455133",\ + "1.170717, 1.170717, 1.170717, 1.170718, 1.170720",\ + "0.045715, 0.045716, 0.045718, 0.045718, 0.045718",\ + "0.082756, 0.082756, 0.082757, 0.082757, 0.082757",\ + "0.171711, 0.171711, 0.171711, 0.171712, 0.171712",\ + "0.455125, 0.455125, 0.455126, 0.455128, 0.455133",\ + "1.170717, 1.170717, 1.170717, 1.170718, 1.170720",\ + "0.045715, 0.045716, 0.045718, 0.045718, 0.045718",\ + "0.082756, 0.082756, 0.082757, 0.082757, 0.082757",\ + "0.171711, 0.171711, 0.171711, 0.171712, 0.171712",\ + "0.455125, 0.455125, 0.455126, 0.455128, 0.455133",\ + "1.170717, 1.170717, 1.170717, 1.170718, 1.170720",\ + "0.045715, 0.045717, 0.045718, 0.045718, 0.045718",\ + "0.082756, 0.082756, 0.082757, 0.082757, 0.082757",\ + "0.171711, 0.171711, 0.171711, 0.171712, 0.171712",\ + "0.455125, 0.455125, 0.455126, 0.455128, 0.455133",\ + "1.170717, 1.170717, 1.170717, 1.170718, 1.170720"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[3]_redg_2487*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[43]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.552964, 0.814309, 1.099442, 1.604025, 2.613190",\ + "0.595811, 0.857156, 1.142289, 1.646869, 2.656030",\ + "0.672254, 0.933599, 1.218732, 1.723310, 2.732467",\ + "0.895523, 1.156868, 1.442001, 1.946579, 2.955732",\ + "1.458204, 1.719550, 2.004683, 2.509259, 3.518410",\ + "0.640373, 0.901851, 1.187121, 1.690739, 2.699123",\ + "0.683220, 0.944698, 1.229968, 1.733584, 2.741963",\ + "0.759663, 1.021142, 1.306411, 1.810025, 2.818400",\ + "0.982932, 1.244411, 1.529680, 2.033293, 3.041666",\ + "1.545614, 1.807093, 2.092361, 2.595973, 3.604344",\ + "0.723483, 0.990810, 1.275087, 1.778361, 2.786078",\ + "0.766329, 1.033657, 1.317933, 1.821205, 2.828918",\ + "0.842772, 1.110100, 1.394377, 1.897646, 2.905355",\ + "1.066041, 1.333369, 1.617646, 2.120914, 3.128621",\ + "1.628723, 1.896051, 2.180327, 2.683595, 3.691299",\ + "0.786922, 1.056412, 1.339232, 1.842274, 2.849587",\ + "0.829768, 1.099259, 1.382079, 1.885119, 2.892427",\ + "0.906211, 1.175702, 1.458522, 1.961560, 2.968864",\ + "1.129480, 1.398971, 1.681791, 2.184828, 3.192130",\ + "1.692162, 1.961653, 2.244473, 2.747508, 3.754808",\ + "1.122015, 1.420432, 1.691460, 2.191767, 3.195044",\ + "1.164862, 1.463279, 1.734307, 2.234612, 3.237884",\ + "1.241305, 1.539723, 1.810750, 2.311053, 3.314321",\ + "1.464574, 1.762992, 2.034019, 2.534321, 3.537586",\ + "2.027255, 2.325674, 2.596701, 3.097001, 4.100264"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.072811, 0.072811, 0.072826, 0.072880, 0.072987",\ + "0.151162, 0.151162, 0.151165, 0.151176, 0.151196",\ + "0.326364, 0.326364, 0.326364, 0.326364, 0.326365",\ + "0.855761, 0.855761, 0.855772, 0.855812, 0.855891",\ + "2.187247, 2.187247, 2.187266, 2.187333, 2.187467",\ + "0.072811, 0.072811, 0.072827, 0.072880, 0.072987",\ + "0.151162, 0.151162, 0.151165, 0.151176, 0.151196",\ + "0.326364, 0.326364, 0.326364, 0.326364, 0.326365",\ + "0.855761, 0.855761, 0.855772, 0.855812, 0.855891",\ + "2.187247, 2.187247, 2.187267, 2.187333, 2.187467",\ + "0.072811, 0.072811, 0.072827, 0.072880, 0.072987",\ + "0.151162, 0.151162, 0.151165, 0.151176, 0.151196",\ + "0.326364, 0.326364, 0.326364, 0.326364, 0.326365",\ + "0.855761, 0.855761, 0.855772, 0.855812, 0.855891",\ + "2.187247, 2.187247, 2.187267, 2.187333, 2.187467",\ + "0.072811, 0.072811, 0.072827, 0.072880, 0.072987",\ + "0.151162, 0.151162, 0.151165, 0.151176, 0.151196",\ + "0.326364, 0.326364, 0.326364, 0.326364, 0.326365",\ + "0.855761, 0.855761, 0.855772, 0.855812, 0.855891",\ + "2.187247, 2.187247, 2.187267, 2.187333, 2.187467",\ + "0.072811, 0.072811, 0.072827, 0.072880, 0.072987",\ + "0.151162, 0.151162, 0.151165, 0.151176, 0.151196",\ + "0.326364, 0.326364, 0.326364, 0.326364, 0.326365",\ + "0.855761, 0.855761, 0.855773, 0.855812, 0.855891",\ + "2.187247, 2.187247, 2.187267, 2.187334, 2.187467"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.564998, 0.826343, 1.111477, 1.616063, 2.625237",\ + "0.592658, 0.854002, 1.139137, 1.643723, 2.652897",\ + "0.641868, 0.903212, 1.188347, 1.692935, 2.702110",\ + "0.782429, 1.043773, 1.328907, 1.833490, 2.842657",\ + "1.135098, 1.396442, 1.681576, 2.186166, 3.195345",\ + "0.652408, 0.913885, 1.199155, 1.702778, 2.711171",\ + "0.680068, 0.941545, 1.226815, 1.730438, 2.738831",\ + "0.729278, 0.990755, 1.276025, 1.779649, 2.788044",\ + "0.869838, 1.131316, 1.416586, 1.920205, 2.928591",\ + "1.222507, 1.483984, 1.769255, 2.272880, 3.281279",\ + "0.735517, 1.002843, 1.287121, 1.790400, 2.798126",\ + "0.763177, 1.030503, 1.314781, 1.818060, 2.825786",\ + "0.812387, 1.079713, 1.363991, 1.867271, 2.874999",\ + "0.952947, 1.220274, 1.504552, 2.007827, 3.015546",\ + "1.305617, 1.572943, 1.857221, 2.360502, 3.368234",\ + "0.798956, 1.068446, 1.351267, 1.854313, 2.861635",\ + "0.826616, 1.096106, 1.378927, 1.881973, 2.889295",\ + "0.875826, 1.145315, 1.428137, 1.931184, 2.938508",\ + "1.016386, 1.285877, 1.568697, 2.071740, 3.079055",\ + "1.369056, 1.638545, 1.921366, 2.424415, 3.431743",\ + "1.134049, 1.432466, 1.703495, 2.203806, 3.207091",\ + "1.161709, 1.460126, 1.731154, 2.231466, 3.234751",\ + "1.210919, 1.509335, 1.780365, 2.280677, 3.283964",\ + "1.351480, 1.649897, 1.920925, 2.421233, 3.424510",\ + "1.704149, 2.002565, 2.273594, 2.773909, 3.777199"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.031035, 0.031069, 0.031220, 0.031570, 0.032271",\ + "0.078403, 0.078406, 0.078420, 0.078451, 0.078513",\ + "0.173505, 0.173505, 0.173505, 0.173505, 0.173505",\ + "0.457146, 0.457146, 0.457146, 0.457146, 0.457146",\ + "1.169259, 1.169266, 1.169295, 1.169365, 1.169503",\ + "0.031035, 0.031069, 0.031221, 0.031570, 0.032271",\ + "0.078403, 0.078406, 0.078420, 0.078451, 0.078513",\ + "0.173505, 0.173505, 0.173505, 0.173505, 0.173505",\ + "0.457146, 0.457146, 0.457146, 0.457146, 0.457146",\ + "1.169259, 1.169266, 1.169296, 1.169365, 1.169503",\ + "0.031035, 0.031070, 0.031221, 0.031570, 0.032271",\ + "0.078403, 0.078406, 0.078420, 0.078451, 0.078513",\ + "0.173505, 0.173505, 0.173505, 0.173505, 0.173505",\ + "0.457146, 0.457146, 0.457146, 0.457146, 0.457146",\ + "1.169259, 1.169266, 1.169296, 1.169365, 1.169503",\ + "0.031035, 0.031071, 0.031221, 0.031570, 0.032271",\ + "0.078403, 0.078406, 0.078420, 0.078451, 0.078513",\ + "0.173505, 0.173505, 0.173505, 0.173505, 0.173505",\ + "0.457146, 0.457146, 0.457146, 0.457146, 0.457146",\ + "1.169259, 1.169266, 1.169296, 1.169365, 1.169503",\ + "0.031035, 0.031083, 0.031224, 0.031571, 0.032271",\ + "0.078403, 0.078407, 0.078420, 0.078451, 0.078513",\ + "0.173505, 0.173505, 0.173505, 0.173505, 0.173505",\ + "0.457146, 0.457146, 0.457146, 0.457146, 0.457146",\ + "1.169259, 1.169268, 1.169296, 1.169365, 1.169503"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[3]_redg*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[44]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.538940, 0.779876, 1.050099, 1.503272, 2.409617",\ + "0.581786, 0.822723, 1.092946, 1.546117, 2.452459",\ + "0.658229, 0.899166, 1.169389, 1.622558, 2.528897",\ + "0.881498, 1.122435, 1.392658, 1.845826, 2.752164",\ + "1.444180, 1.685117, 1.955339, 2.408507, 3.314842",\ + "0.626346, 0.867426, 1.137614, 1.589986, 2.495551",\ + "0.669192, 0.910272, 1.180461, 1.632831, 2.538393",\ + "0.745635, 0.986716, 1.256904, 1.709272, 2.614831",\ + "0.968904, 1.209985, 1.480173, 1.932540, 2.838098",\ + "1.531586, 1.772666, 2.042854, 2.495221, 3.400776",\ + "0.707175, 0.956384, 1.225576, 1.677607, 2.582506",\ + "0.750022, 0.999231, 1.268423, 1.720452, 2.625348",\ + "0.826465, 1.075674, 1.344866, 1.796893, 2.701786",\ + "1.049734, 1.298944, 1.568135, 2.020162, 2.925053",\ + "1.612416, 1.861625, 2.130816, 2.582842, 3.487731",\ + "0.764818, 1.021986, 1.289713, 1.741520, 2.646015",\ + "0.807664, 1.064833, 1.332560, 1.784365, 2.688857",\ + "0.884107, 1.141276, 1.409003, 1.860806, 2.765295",\ + "1.107376, 1.364545, 1.632272, 2.084074, 2.988562",\ + "1.670058, 1.927227, 2.194953, 2.646755, 3.551240",\ + "1.090702, 1.386049, 1.641418, 2.090797, 2.991471",\ + "1.133548, 1.428896, 1.684264, 2.133642, 3.034313",\ + "1.209992, 1.505339, 1.760707, 2.210084, 3.110751",\ + "1.433261, 1.728608, 1.983976, 2.433352, 3.334018",\ + "1.995942, 2.291290, 2.546658, 2.996032, 3.896696"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.072811, 0.072811, 0.072823, 0.072863, 0.072944",\ + "0.151162, 0.151162, 0.151164, 0.151172, 0.151188",\ + "0.326364, 0.326364, 0.326364, 0.326364, 0.326365",\ + "0.855761, 0.855761, 0.855770, 0.855800, 0.855859",\ + "2.187248, 2.187248, 2.187262, 2.187313, 2.187414",\ + "0.072811, 0.072811, 0.072823, 0.072863, 0.072944",\ + "0.151162, 0.151162, 0.151165, 0.151172, 0.151188",\ + "0.326364, 0.326364, 0.326364, 0.326364, 0.326365",\ + "0.855761, 0.855761, 0.855770, 0.855800, 0.855859",\ + "2.187248, 2.187248, 2.187262, 2.187313, 2.187414",\ + "0.072811, 0.072811, 0.072823, 0.072863, 0.072944",\ + "0.151162, 0.151162, 0.151165, 0.151172, 0.151188",\ + "0.326364, 0.326364, 0.326364, 0.326364, 0.326365",\ + "0.855761, 0.855761, 0.855770, 0.855800, 0.855859",\ + "2.187248, 2.187248, 2.187262, 2.187313, 2.187414",\ + "0.072811, 0.072811, 0.072823, 0.072863, 0.072944",\ + "0.151162, 0.151162, 0.151165, 0.151172, 0.151188",\ + "0.326364, 0.326364, 0.326364, 0.326364, 0.326365",\ + "0.855761, 0.855761, 0.855770, 0.855800, 0.855859",\ + "2.187248, 2.187248, 2.187263, 2.187313, 2.187414",\ + "0.072811, 0.072811, 0.072824, 0.072864, 0.072944",\ + "0.151162, 0.151162, 0.151165, 0.151172, 0.151188",\ + "0.326364, 0.326364, 0.326364, 0.326364, 0.326365",\ + "0.855761, 0.855761, 0.855770, 0.855800, 0.855859",\ + "2.187248, 2.187248, 2.187263, 2.187313, 2.187414"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.550974, 0.791910, 1.062134, 1.515310, 2.421661",\ + "0.578634, 0.819570, 1.089794, 1.542970, 2.449322",\ + "0.627844, 0.868780, 1.139004, 1.592180, 2.498534",\ + "0.768404, 1.009341, 1.279564, 1.732737, 2.639084",\ + "1.121073, 1.362010, 1.632233, 2.085412, 2.991768",\ + "0.638380, 0.879460, 1.149649, 1.602023, 2.507595",\ + "0.666040, 0.907120, 1.177309, 1.629683, 2.535255",\ + "0.715250, 0.956330, 1.226519, 1.678894, 2.584468",\ + "0.855810, 1.096890, 1.367079, 1.819451, 2.725018",\ + "1.208480, 1.449559, 1.719748, 2.172125, 3.077702",\ + "0.719210, 0.968418, 1.237611, 1.689645, 2.594550",\ + "0.746870, 0.996078, 1.265271, 1.717305, 2.622211",\ + "0.796080, 1.045288, 1.314481, 1.766516, 2.671423",\ + "0.936640, 1.185849, 1.455041, 1.907072, 2.811973",\ + "1.289309, 1.538518, 1.807710, 2.259747, 3.164657",\ + "0.776852, 1.034020, 1.301748, 1.753558, 2.658059",\ + "0.804512, 1.061680, 1.329408, 1.781218, 2.685719",\ + "0.853722, 1.110890, 1.378618, 1.830429, 2.734932",\ + "0.994283, 1.251451, 1.519178, 1.970985, 2.875482",\ + "1.346952, 1.604120, 1.871847, 2.323660, 3.228166",\ + "1.102736, 1.398083, 1.653452, 2.102835, 3.003515",\ + "1.130396, 1.425743, 1.681112, 2.130495, 3.031176",\ + "1.179606, 1.474952, 1.730322, 2.179706, 3.080388",\ + "1.320167, 1.615513, 1.870883, 2.320263, 3.220938",\ + "1.672836, 1.968182, 2.223552, 2.672937, 3.573622"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.031036, 0.031054, 0.031161, 0.031438, 0.031991",\ + "0.078403, 0.078405, 0.078414, 0.078439, 0.078488",\ + "0.173505, 0.173505, 0.173505, 0.173505, 0.173505",\ + "0.457146, 0.457146, 0.457146, 0.457146, 0.457146",\ + "1.169259, 1.169263, 1.169284, 1.169338, 1.169448",\ + "0.031036, 0.031055, 0.031162, 0.031438, 0.031991",\ + "0.078403, 0.078405, 0.078414, 0.078439, 0.078488",\ + "0.173505, 0.173505, 0.173505, 0.173505, 0.173505",\ + "0.457146, 0.457146, 0.457146, 0.457146, 0.457146",\ + "1.169259, 1.169263, 1.169284, 1.169338, 1.169448",\ + "0.031036, 0.031055, 0.031162, 0.031438, 0.031991",\ + "0.078403, 0.078405, 0.078414, 0.078439, 0.078488",\ + "0.173505, 0.173505, 0.173505, 0.173505, 0.173505",\ + "0.457146, 0.457146, 0.457146, 0.457146, 0.457146",\ + "1.169259, 1.169263, 1.169284, 1.169338, 1.169448",\ + "0.031036, 0.031055, 0.031162, 0.031438, 0.031991",\ + "0.078403, 0.078405, 0.078414, 0.078439, 0.078488",\ + "0.173505, 0.173505, 0.173505, 0.173505, 0.173505",\ + "0.457146, 0.457146, 0.457146, 0.457146, 0.457146",\ + "1.169259, 1.169263, 1.169284, 1.169338, 1.169448",\ + "0.031036, 0.031062, 0.031165, 0.031439, 0.031991",\ + "0.078403, 0.078406, 0.078415, 0.078439, 0.078488",\ + "0.173505, 0.173505, 0.173505, 0.173505, 0.173505",\ + "0.457146, 0.457146, 0.457146, 0.457146, 0.457146",\ + "1.169259, 1.169264, 1.169285, 1.169339, 1.169448"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[3]_redg_2727*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[46]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.564410, 0.823611, 1.109689, 1.603513, 2.591161",\ + "0.607267, 0.866469, 1.152547, 1.646371, 2.634019",\ + "0.683720, 0.942922, 1.229000, 1.722825, 2.710474",\ + "0.906994, 1.166196, 1.452275, 1.946099, 2.933748",\ + "1.469683, 1.728885, 2.014963, 2.508788, 3.496438",\ + "0.651822, 0.911173, 1.197335, 1.690228, 2.677094",\ + "0.694680, 0.954031, 1.240193, 1.733086, 2.719953",\ + "0.771133, 1.030483, 1.316646, 1.809540, 2.796407",\ + "0.994407, 1.253758, 1.539921, 2.032814, 3.019682",\ + "1.557095, 1.816446, 2.102610, 2.595503, 3.582371",\ + "0.732717, 1.000191, 1.285301, 1.777850, 2.764050",\ + "0.775575, 1.043049, 1.328159, 1.820708, 2.806908",\ + "0.852028, 1.119502, 1.404612, 1.897162, 2.883362",\ + "1.075302, 1.342776, 1.627887, 2.120436, 3.106637",\ + "1.637990, 1.905464, 2.190576, 2.683125, 3.669326",\ + "0.792238, 1.065880, 1.349444, 1.841763, 2.827559",\ + "0.835095, 1.108738, 1.392303, 1.884622, 2.870417",\ + "0.911548, 1.185191, 1.468756, 1.961075, 2.946871",\ + "1.134822, 1.408465, 1.692031, 2.184350, 3.170146",\ + "1.697511, 1.971154, 2.254719, 2.747039, 3.732835",\ + "1.125661, 1.430876, 1.701565, 2.191215, 3.173015",\ + "1.168519, 1.473734, 1.744423, 2.234074, 3.215873",\ + "1.244972, 1.550187, 1.820877, 2.310527, 3.292327",\ + "1.468246, 1.773462, 2.044151, 2.533802, 3.515602",\ + "2.030934, 2.336150, 2.606840, 3.096491, 4.078291"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.072526, 0.072519, 0.072509, 0.072504, 0.072494",\ + "0.151107, 0.151106, 0.151104, 0.151103, 0.151101",\ + "0.326363, 0.326363, 0.326363, 0.326363, 0.326363",\ + "0.855551, 0.855546, 0.855538, 0.855535, 0.855527",\ + "2.186892, 2.186883, 2.186870, 2.186864, 2.186852",\ + "0.072526, 0.072519, 0.072509, 0.072504, 0.072494",\ + "0.151107, 0.151105, 0.151104, 0.151103, 0.151101",\ + "0.326363, 0.326363, 0.326363, 0.326363, 0.326363",\ + "0.855551, 0.855546, 0.855538, 0.855535, 0.855527",\ + "2.186892, 2.186883, 2.186870, 2.186864, 2.186852",\ + "0.072526, 0.072519, 0.072509, 0.072504, 0.072494",\ + "0.151107, 0.151105, 0.151104, 0.151103, 0.151101",\ + "0.326363, 0.326363, 0.326363, 0.326363, 0.326363",\ + "0.855551, 0.855546, 0.855538, 0.855535, 0.855527",\ + "2.186892, 2.186882, 2.186870, 2.186864, 2.186852",\ + "0.072526, 0.072519, 0.072509, 0.072504, 0.072494",\ + "0.151107, 0.151105, 0.151104, 0.151103, 0.151101",\ + "0.326363, 0.326363, 0.326363, 0.326363, 0.326363",\ + "0.855551, 0.855546, 0.855538, 0.855535, 0.855527",\ + "2.186892, 2.186882, 2.186870, 2.186864, 2.186852",\ + "0.072525, 0.072517, 0.072509, 0.072504, 0.072494",\ + "0.151107, 0.151105, 0.151104, 0.151103, 0.151101",\ + "0.326363, 0.326363, 0.326363, 0.326363, 0.326363",\ + "0.855551, 0.855544, 0.855538, 0.855535, 0.855527",\ + "2.186891, 2.186880, 2.186870, 2.186864, 2.186852"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.576423, 0.835624, 1.121701, 1.615525, 2.603172",\ + "0.604083, 0.863284, 1.149361, 1.643184, 2.630832",\ + "0.653288, 0.912488, 1.198565, 1.692388, 2.680036",\ + "0.793871, 1.053072, 1.339149, 1.832974, 2.820621",\ + "1.146508, 1.405709, 1.691785, 2.185609, 3.173255",\ + "0.663836, 0.923186, 1.209347, 1.702240, 2.689106",\ + "0.691496, 0.950845, 1.237007, 1.729899, 2.716765",\ + "0.740700, 1.000050, 1.286211, 1.779103, 2.765969",\ + "0.881284, 1.140634, 1.426796, 1.919688, 2.906555",\ + "1.233921, 1.493270, 1.779431, 2.272324, 3.259189",\ + "0.744731, 1.012204, 1.297313, 1.789862, 2.776061",\ + "0.772390, 1.039863, 1.324972, 1.817521, 2.803720",\ + "0.821595, 1.089068, 1.374177, 1.866726, 2.852924",\ + "0.962178, 1.229652, 1.514761, 2.007311, 2.993510",\ + "1.314816, 1.582289, 1.867397, 2.359946, 3.346144",\ + "0.804251, 1.077893, 1.361457, 1.853775, 2.839570",\ + "0.831911, 1.105553, 1.389116, 1.881435, 2.867229",\ + "0.881115, 1.154757, 1.438321, 1.930639, 2.916433",\ + "1.021699, 1.295341, 1.578905, 2.071224, 3.057019",\ + "1.374336, 1.647978, 1.931541, 2.423859, 3.409653",\ + "1.137675, 1.442889, 1.713577, 2.203227, 3.185026",\ + "1.165335, 1.470549, 1.741237, 2.230887, 3.212686",\ + "1.214539, 1.519753, 1.790441, 2.280091, 3.261889",\ + "1.355123, 1.660337, 1.931026, 2.420676, 3.402475",\ + "1.707760, 2.012974, 2.283661, 2.773311, 3.755109"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.031042, 0.031042, 0.031051, 0.031083, 0.031146",\ + "0.078404, 0.078404, 0.078405, 0.078407, 0.078413",\ + "0.173505, 0.173505, 0.173505, 0.173505, 0.173505",\ + "0.457145, 0.457145, 0.457146, 0.457146, 0.457146",\ + "1.169260, 1.169260, 1.169262, 1.169268, 1.169281",\ + "0.031042, 0.031042, 0.031051, 0.031083, 0.031146",\ + "0.078404, 0.078404, 0.078405, 0.078407, 0.078413",\ + "0.173505, 0.173505, 0.173505, 0.173505, 0.173505",\ + "0.457145, 0.457145, 0.457146, 0.457146, 0.457146",\ + "1.169260, 1.169260, 1.169262, 1.169268, 1.169281",\ + "0.031042, 0.031042, 0.031051, 0.031083, 0.031146",\ + "0.078404, 0.078404, 0.078405, 0.078407, 0.078413",\ + "0.173505, 0.173505, 0.173505, 0.173505, 0.173505",\ + "0.457145, 0.457146, 0.457146, 0.457146, 0.457146",\ + "1.169260, 1.169260, 1.169262, 1.169268, 1.169281",\ + "0.031042, 0.031042, 0.031051, 0.031083, 0.031146",\ + "0.078404, 0.078404, 0.078405, 0.078407, 0.078413",\ + "0.173505, 0.173505, 0.173505, 0.173505, 0.173505",\ + "0.457145, 0.457146, 0.457146, 0.457146, 0.457146",\ + "1.169260, 1.169260, 1.169262, 1.169268, 1.169281",\ + "0.031042, 0.031042, 0.031051, 0.031083, 0.031146",\ + "0.078404, 0.078404, 0.078405, 0.078407, 0.078413",\ + "0.173505, 0.173505, 0.173505, 0.173505, 0.173505",\ + "0.457145, 0.457146, 0.457146, 0.457146, 0.457146",\ + "1.169260, 1.169260, 1.169262, 1.169268, 1.169281"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[3]_redg_2658*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[47]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.548070, 0.800917, 1.079123, 1.542119, 2.468112",\ + "0.590927, 0.843775, 1.121981, 1.584977, 2.510970",\ + "0.667380, 0.920228, 1.198434, 1.661431, 2.587423",\ + "0.890654, 1.143502, 1.421709, 1.884705, 2.810698",\ + "1.453343, 1.706191, 1.984398, 2.447394, 3.373387",\ + "0.635475, 0.888501, 1.166668, 1.628833, 2.554045",\ + "0.678333, 0.931359, 1.209527, 1.671691, 2.596904",\ + "0.754786, 1.007812, 1.285980, 1.748145, 2.673357",\ + "0.978060, 1.231086, 1.509255, 1.971419, 2.896632",\ + "1.540748, 1.793775, 2.071944, 2.534108, 3.459321",\ + "0.716287, 0.977534, 1.254631, 1.716454, 2.641000",\ + "0.759144, 1.020392, 1.297489, 1.759312, 2.683859",\ + "0.835597, 1.096845, 1.373943, 1.835766, 2.760312",\ + "1.058871, 1.320120, 1.597218, 2.059040, 2.983587",\ + "1.621560, 1.882808, 2.159906, 2.621729, 3.546276",\ + "0.773896, 1.043245, 1.318770, 1.780367, 2.704509",\ + "0.816754, 1.086103, 1.361628, 1.823225, 2.747368",\ + "0.893206, 1.162556, 1.438081, 1.899679, 2.823821",\ + "1.116481, 1.385830, 1.661356, 2.122953, 3.047096",\ + "1.679169, 1.948519, 2.224045, 2.685642, 3.609785",\ + "1.108670, 1.408584, 1.670573, 2.129684, 3.049965",\ + "1.151528, 1.451442, 1.713432, 2.172543, 3.092824",\ + "1.227981, 1.527896, 1.789885, 2.248996, 3.169277",\ + "1.451255, 1.751170, 2.013160, 2.472271, 3.392552",\ + "2.013944, 2.313859, 2.575849, 3.034960, 3.955241"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.072526, 0.072516, 0.072505, 0.072503, 0.072500",\ + "0.151107, 0.151105, 0.151103, 0.151102, 0.151102",\ + "0.326363, 0.326363, 0.326363, 0.326363, 0.326363",\ + "0.855551, 0.855543, 0.855535, 0.855534, 0.855532",\ + "2.186892, 2.186879, 2.186865, 2.186863, 2.186859",\ + "0.072526, 0.072516, 0.072505, 0.072503, 0.072500",\ + "0.151107, 0.151105, 0.151103, 0.151102, 0.151102",\ + "0.326363, 0.326363, 0.326363, 0.326363, 0.326363",\ + "0.855551, 0.855543, 0.855535, 0.855534, 0.855532",\ + "2.186892, 2.186878, 2.186865, 2.186863, 2.186859",\ + "0.072526, 0.072515, 0.072505, 0.072503, 0.072500",\ + "0.151107, 0.151105, 0.151103, 0.151102, 0.151102",\ + "0.326363, 0.326363, 0.326363, 0.326363, 0.326363",\ + "0.855551, 0.855543, 0.855535, 0.855534, 0.855532",\ + "2.186892, 2.186878, 2.186865, 2.186863, 2.186859",\ + "0.072526, 0.072515, 0.072505, 0.072503, 0.072500",\ + "0.151107, 0.151105, 0.151103, 0.151102, 0.151102",\ + "0.326363, 0.326363, 0.326363, 0.326363, 0.326363",\ + "0.855551, 0.855543, 0.855535, 0.855534, 0.855532",\ + "2.186892, 2.186878, 2.186865, 2.186863, 2.186859",\ + "0.072524, 0.072513, 0.072505, 0.072503, 0.072500",\ + "0.151107, 0.151104, 0.151103, 0.151102, 0.151102",\ + "0.326363, 0.326363, 0.326363, 0.326363, 0.326363",\ + "0.855550, 0.855541, 0.855535, 0.855534, 0.855532",\ + "2.186889, 2.186875, 2.186865, 2.186863, 2.186859"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.560083, 0.812930, 1.091135, 1.554131, 2.480123",\ + "0.587743, 0.840589, 1.118794, 1.581790, 2.507782",\ + "0.636947, 0.889794, 1.167998, 1.630994, 2.556986",\ + "0.777531, 1.030378, 1.308583, 1.771580, 2.697572",\ + "1.130168, 1.383014, 1.661218, 2.124214, 3.050207",\ + "0.647489, 0.900513, 1.178680, 1.640844, 2.566057",\ + "0.675148, 0.928173, 1.206340, 1.668504, 2.593716",\ + "0.724353, 0.977377, 1.255544, 1.717708, 2.642920",\ + "0.864936, 1.117962, 1.396129, 1.858294, 2.783506",\ + "1.217574, 1.470598, 1.748764, 2.210928, 3.136140",\ + "0.728300, 0.989547, 1.266643, 1.728466, 2.653012",\ + "0.755960, 1.017207, 1.294303, 1.756125, 2.680671",\ + "0.805164, 1.066411, 1.343507, 1.805329, 2.729875",\ + "0.945748, 1.206995, 1.484092, 1.945915, 2.870461",\ + "1.298385, 1.559631, 1.836727, 2.298549, 3.223095",\ + "0.785910, 1.055257, 1.330781, 1.792379, 2.716521",\ + "0.813569, 1.082917, 1.358441, 1.820038, 2.744180",\ + "0.862774, 1.132121, 1.407645, 1.869242, 2.793384",\ + "1.003357, 1.272706, 1.548230, 2.009828, 2.933970",\ + "1.355995, 1.625342, 1.900865, 2.362462, 3.286604",\ + "1.120684, 1.420597, 1.682585, 2.141696, 3.061977",\ + "1.148343, 1.448256, 1.710245, 2.169356, 3.089636",\ + "1.197548, 1.497461, 1.759449, 2.218560, 3.138840",\ + "1.338132, 1.638045, 1.900034, 2.359145, 3.279426",\ + "1.690769, 1.990681, 2.252669, 2.711780, 3.632061"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.031042, 0.031042, 0.031047, 0.031067, 0.031107",\ + "0.078404, 0.078404, 0.078404, 0.078406, 0.078410",\ + "0.173505, 0.173505, 0.173505, 0.173505, 0.173505",\ + "0.457145, 0.457145, 0.457145, 0.457145, 0.457145",\ + "1.169260, 1.169260, 1.169261, 1.169265, 1.169273",\ + "0.031042, 0.031042, 0.031047, 0.031067, 0.031107",\ + "0.078404, 0.078404, 0.078404, 0.078406, 0.078410",\ + "0.173505, 0.173505, 0.173505, 0.173505, 0.173505",\ + "0.457145, 0.457145, 0.457145, 0.457145, 0.457145",\ + "1.169260, 1.169260, 1.169261, 1.169265, 1.169273",\ + "0.031042, 0.031042, 0.031047, 0.031067, 0.031107",\ + "0.078404, 0.078404, 0.078404, 0.078406, 0.078410",\ + "0.173505, 0.173505, 0.173505, 0.173505, 0.173505",\ + "0.457145, 0.457145, 0.457145, 0.457145, 0.457145",\ + "1.169260, 1.169260, 1.169261, 1.169265, 1.169273",\ + "0.031042, 0.031042, 0.031047, 0.031067, 0.031107",\ + "0.078404, 0.078404, 0.078404, 0.078406, 0.078410",\ + "0.173505, 0.173505, 0.173505, 0.173505, 0.173505",\ + "0.457145, 0.457145, 0.457145, 0.457145, 0.457145",\ + "1.169260, 1.169260, 1.169261, 1.169265, 1.169273",\ + "0.031042, 0.031042, 0.031048, 0.031067, 0.031107",\ + "0.078404, 0.078404, 0.078404, 0.078406, 0.078410",\ + "0.173505, 0.173505, 0.173505, 0.173505, 0.173505",\ + "0.457145, 0.457145, 0.457145, 0.457145, 0.457145",\ + "1.169260, 1.169260, 1.169261, 1.169265, 1.169273"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[3]_redg_2601*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[20]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.380795, 0.602668, 0.780712, 1.069465, 1.629809",\ + "0.415064, 0.636936, 0.814980, 1.103733, 1.664078",\ + "0.488546, 0.710419, 0.888463, 1.177216, 1.737561",\ + "0.709765, 0.931638, 1.109681, 1.398435, 1.958779",\ + "1.271568, 1.493441, 1.671484, 1.960238, 2.520582",\ + "0.469199, 0.689987, 0.867992, 1.156770, 1.717163",\ + "0.503468, 0.724255, 0.902261, 1.191038, 1.751431",\ + "0.576950, 0.797738, 0.975743, 1.264521, 1.824914",\ + "0.798169, 1.018957, 1.196962, 1.485740, 2.046133",\ + "1.359972, 1.580759, 1.758765, 2.047543, 2.607936",\ + "0.558271, 0.770322, 0.948019, 1.236798, 1.797194",\ + "0.592539, 0.804590, 0.982288, 1.271067, 1.831463",\ + "0.666022, 0.878073, 1.055770, 1.344549, 1.904946",\ + "0.887241, 1.099292, 1.276989, 1.565768, 2.126164",\ + "1.449044, 1.661095, 1.838792, 2.127571, 2.687967",\ + "0.621529, 0.828138, 1.005713, 1.294227, 1.854208",\ + "0.655798, 0.862407, 1.039981, 1.328496, 1.888477",\ + "0.729280, 0.935889, 1.113464, 1.401978, 1.961960",\ + "0.950499, 1.157108, 1.334682, 1.623197, 2.183178",\ + "1.512302, 1.718911, 1.896485, 2.185000, 2.744981",\ + "0.953935, 1.133367, 1.309369, 1.597399, 2.156428",\ + "0.988204, 1.167636, 1.343637, 1.631667, 2.190696",\ + "1.061687, 1.241118, 1.417120, 1.705150, 2.264179",\ + "1.282905, 1.462337, 1.638339, 1.926369, 2.485398",\ + "1.844708, 2.024140, 2.200142, 2.488172, 3.047201"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.027358, 0.027358, 0.027358, 0.027363, 0.027374",\ + "0.129497, 0.129497, 0.129497, 0.129497, 0.129497",\ + "0.314624, 0.314624, 0.314624, 0.314624, 0.314624",\ + "0.831905, 0.831905, 0.831905, 0.831905, 0.831908",\ + "2.131887, 2.131887, 2.131887, 2.131888, 2.131889",\ + "0.027358, 0.027358, 0.027358, 0.027363, 0.027374",\ + "0.129497, 0.129497, 0.129497, 0.129497, 0.129497",\ + "0.314624, 0.314624, 0.314624, 0.314624, 0.314624",\ + "0.831905, 0.831905, 0.831905, 0.831905, 0.831908",\ + "2.131887, 2.131887, 2.131887, 2.131888, 2.131889",\ + "0.027358, 0.027358, 0.027358, 0.027363, 0.027374",\ + "0.129497, 0.129497, 0.129497, 0.129497, 0.129497",\ + "0.314624, 0.314624, 0.314624, 0.314624, 0.314624",\ + "0.831905, 0.831905, 0.831905, 0.831905, 0.831908",\ + "2.131887, 2.131887, 2.131887, 2.131888, 2.131889",\ + "0.027358, 0.027358, 0.027358, 0.027363, 0.027374",\ + "0.129497, 0.129497, 0.129497, 0.129497, 0.129497",\ + "0.314624, 0.314624, 0.314624, 0.314624, 0.314624",\ + "0.831905, 0.831905, 0.831905, 0.831905, 0.831908",\ + "2.131887, 2.131887, 2.131887, 2.131888, 2.131889",\ + "0.027358, 0.027358, 0.027358, 0.027363, 0.027374",\ + "0.129497, 0.129497, 0.129497, 0.129497, 0.129497",\ + "0.314624, 0.314624, 0.314624, 0.314624, 0.314624",\ + "0.831905, 0.831905, 0.831905, 0.831905, 0.831908",\ + "2.131887, 2.131887, 2.131887, 2.131888, 2.131889"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.351941, 0.573814, 0.751857, 1.040610, 1.600955",\ + "0.377860, 0.599733, 0.777776, 1.066529, 1.626874",\ + "0.432503, 0.654375, 0.832419, 1.121172, 1.681517",\ + "0.582379, 0.804252, 0.982296, 1.271049, 1.831393",\ + "0.955531, 1.177403, 1.355447, 1.644200, 2.204545",\ + "0.440345, 0.661132, 0.839138, 1.127915, 1.688308",\ + "0.466264, 0.687051, 0.865057, 1.153834, 1.714228",\ + "0.520907, 0.741694, 0.919700, 1.208477, 1.768870",\ + "0.670783, 0.891571, 1.069576, 1.358354, 1.918747",\ + "1.043935, 1.264722, 1.442728, 1.731505, 2.291898",\ + "0.529417, 0.741468, 0.919165, 1.207944, 1.768340",\ + "0.555336, 0.767386, 0.945084, 1.233863, 1.794259",\ + "0.609978, 0.822029, 0.999727, 1.288506, 1.848902",\ + "0.759855, 0.971906, 1.149603, 1.438382, 1.998778",\ + "1.133006, 1.345057, 1.522755, 1.811534, 2.371930",\ + "0.592675, 0.799284, 0.976858, 1.265373, 1.825354",\ + "0.618594, 0.825203, 1.002777, 1.291292, 1.851273",\ + "0.673236, 0.879846, 1.057420, 1.345935, 1.905916",\ + "0.823113, 1.029722, 1.207296, 1.495811, 2.055792",\ + "1.196265, 1.402874, 1.580448, 1.868963, 2.428944",\ + "0.925081, 1.104513, 1.280515, 1.568545, 2.127573",\ + "0.951000, 1.130432, 1.306434, 1.594464, 2.153493",\ + "1.005643, 1.185075, 1.361076, 1.649106, 2.208135",\ + "1.155519, 1.334951, 1.510953, 1.798983, 2.358012",\ + "1.528671, 1.708103, 1.884104, 2.172134, 2.731164"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.001805, 0.074804, 0.161857, 0.321908, 0.642011"); + values ( "0.015511, 0.015511, 0.015511, 0.015511, 0.015512",\ + "0.067734, 0.067734, 0.067734, 0.067734, 0.067734",\ + "0.170292, 0.170292, 0.170292, 0.170292, 0.170293",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122213, 1.122213, 1.122213, 1.122213, 1.122214",\ + "0.015511, 0.015511, 0.015511, 0.015511, 0.015512",\ + "0.067734, 0.067734, 0.067734, 0.067734, 0.067734",\ + "0.170292, 0.170292, 0.170292, 0.170292, 0.170293",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122213, 1.122213, 1.122213, 1.122213, 1.122214",\ + "0.015511, 0.015511, 0.015511, 0.015511, 0.015512",\ + "0.067734, 0.067734, 0.067734, 0.067734, 0.067734",\ + "0.170292, 0.170292, 0.170292, 0.170292, 0.170293",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122213, 1.122213, 1.122213, 1.122213, 1.122214",\ + "0.015511, 0.015511, 0.015511, 0.015511, 0.015512",\ + "0.067734, 0.067734, 0.067734, 0.067734, 0.067734",\ + "0.170292, 0.170292, 0.170292, 0.170292, 0.170293",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122213, 1.122213, 1.122213, 1.122213, 1.122214",\ + "0.015511, 0.015511, 0.015511, 0.015511, 0.015512",\ + "0.067734, 0.067734, 0.067734, 0.067734, 0.067734",\ + "0.170292, 0.170292, 0.170292, 0.170292, 0.170293",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122213, 1.122213, 1.122213, 1.122213, 1.122214"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[3]_redg_min_2664*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[22]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.357049, 0.595251, 0.779226, 1.073282, 1.641542",\ + "0.391318, 0.630694, 0.814727, 1.108794, 1.677077",\ + "0.464801, 0.704176, 0.888210, 1.182277, 1.750560",\ + "0.686019, 0.925396, 1.109429, 1.403496, 1.971779",\ + "1.247822, 1.487198, 1.671232, 1.965299, 2.533582",\ + "0.445388, 0.682569, 0.866506, 1.160588, 1.728896",\ + "0.479656, 0.718012, 0.902008, 1.196099, 1.764431",\ + "0.553139, 0.791495, 0.975491, 1.269582, 1.837914",\ + "0.774358, 1.012714, 1.196710, 1.490801, 2.059132",\ + "1.336161, 1.574517, 1.758512, 2.052604, 2.620935",\ + "0.534519, 0.762902, 0.946533, 1.240616, 1.808927",\ + "0.568788, 0.798345, 0.982035, 1.276128, 1.844462",\ + "0.642270, 0.871828, 1.055518, 1.349610, 1.917945",\ + "0.863489, 1.093047, 1.276737, 1.570829, 2.139164",\ + "1.425292, 1.654850, 1.838539, 2.132632, 2.700967",\ + "0.597943, 0.820727, 1.004241, 1.298055, 1.865961",\ + "0.632211, 0.856174, 1.039743, 1.333567, 1.901497",\ + "0.705694, 0.929657, 1.113225, 1.407049, 1.974979",\ + "0.926913, 1.150876, 1.334444, 1.628268, 2.196198",\ + "1.488716, 1.712679, 1.896247, 2.190071, 2.758001",\ + "0.932941, 1.126006, 1.307899, 1.601235, 2.168205",\ + "0.967209, 1.161484, 1.343401, 1.636746, 2.203741",\ + "1.040692, 1.234967, 1.416883, 1.710229, 2.277223",\ + "1.261911, 1.456186, 1.638102, 1.931448, 2.498442",\ + "1.823713, 2.017988, 2.199905, 2.493251, 3.060245"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.027366, 0.027366, 0.027366, 0.027374, 0.027393",\ + "0.129494, 0.129494, 0.129494, 0.129494, 0.129494",\ + "0.314624, 0.314624, 0.314624, 0.314624, 0.314624",\ + "0.831904, 0.831904, 0.831904, 0.831906, 0.831910",\ + "2.131887, 2.131887, 2.131887, 2.131888, 2.131891",\ + "0.027366, 0.027366, 0.027366, 0.027374, 0.027393",\ + "0.129494, 0.129494, 0.129494, 0.129494, 0.129494",\ + "0.314624, 0.314624, 0.314624, 0.314624, 0.314624",\ + "0.831904, 0.831904, 0.831904, 0.831906, 0.831910",\ + "2.131887, 2.131887, 2.131887, 2.131888, 2.131891",\ + "0.027366, 0.027366, 0.027366, 0.027374, 0.027393",\ + "0.129494, 0.129494, 0.129494, 0.129494, 0.129494",\ + "0.314624, 0.314624, 0.314624, 0.314624, 0.314624",\ + "0.831904, 0.831904, 0.831904, 0.831906, 0.831910",\ + "2.131887, 2.131887, 2.131887, 2.131888, 2.131891",\ + "0.027366, 0.027366, 0.027366, 0.027374, 0.027393",\ + "0.129494, 0.129494, 0.129494, 0.129494, 0.129494",\ + "0.314624, 0.314624, 0.314624, 0.314624, 0.314624",\ + "0.831904, 0.831904, 0.831904, 0.831906, 0.831910",\ + "2.131887, 2.131887, 2.131887, 2.131888, 2.131891",\ + "0.027366, 0.027366, 0.027366, 0.027374, 0.027393",\ + "0.129494, 0.129494, 0.129494, 0.129494, 0.129494",\ + "0.314624, 0.314624, 0.314624, 0.314624, 0.314624",\ + "0.831904, 0.831904, 0.831904, 0.831906, 0.831910",\ + "2.131887, 2.131887, 2.131887, 2.131888, 2.131891"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.328195, 0.567571, 0.751605, 1.045671, 1.613954",\ + "0.354114, 0.593490, 0.777524, 1.071590, 1.639874",\ + "0.408757, 0.648133, 0.832166, 1.126233, 1.694516",\ + "0.558634, 0.798009, 0.982043, 1.276110, 1.844393",\ + "0.931785, 1.171161, 1.355194, 1.649261, 2.217544",\ + "0.416534, 0.654889, 0.838885, 1.132977, 1.701308",\ + "0.442453, 0.680808, 0.864804, 1.158895, 1.727227",\ + "0.497095, 0.735451, 0.919447, 1.213538, 1.781870",\ + "0.646972, 0.885328, 1.069324, 1.363415, 1.931746",\ + "1.020123, 1.258479, 1.442475, 1.736566, 2.304898",\ + "0.505665, 0.735223, 0.918912, 1.213005, 1.781339",\ + "0.531584, 0.761142, 0.944831, 1.238924, 1.807259",\ + "0.586226, 0.815784, 0.999474, 1.293567, 1.861901",\ + "0.736103, 0.965661, 1.149351, 1.443443, 2.011778",\ + "1.109254, 1.338812, 1.522502, 1.816595, 2.384929",\ + "0.569089, 0.793052, 0.976620, 1.270444, 1.838374",\ + "0.595008, 0.818971, 1.002539, 1.296363, 1.864293",\ + "0.649650, 0.873613, 1.057182, 1.351006, 1.918935",\ + "0.799527, 1.023490, 1.207058, 1.500882, 2.068812",\ + "1.172678, 1.396641, 1.580210, 1.874034, 2.441963",\ + "0.904086, 1.098361, 1.280278, 1.573624, 2.140618",\ + "0.930005, 1.124280, 1.306197, 1.599543, 2.166537",\ + "0.984648, 1.178923, 1.360839, 1.654185, 2.221179",\ + "1.134525, 1.328800, 1.510716, 1.804062, 2.371056",\ + "1.507676, 1.701951, 1.883868, 2.177213, 2.744207"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.015511, 0.015511, 0.015511, 0.015511, 0.015512",\ + "0.067734, 0.067734, 0.067734, 0.067734, 0.067734",\ + "0.170292, 0.170292, 0.170292, 0.170292, 0.170293",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122212, 1.122212, 1.122212, 1.122213, 1.122215",\ + "0.015511, 0.015511, 0.015511, 0.015511, 0.015512",\ + "0.067734, 0.067734, 0.067734, 0.067734, 0.067734",\ + "0.170292, 0.170292, 0.170292, 0.170292, 0.170293",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122212, 1.122212, 1.122212, 1.122213, 1.122215",\ + "0.015511, 0.015511, 0.015511, 0.015511, 0.015512",\ + "0.067734, 0.067734, 0.067734, 0.067734, 0.067734",\ + "0.170292, 0.170292, 0.170292, 0.170292, 0.170293",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122212, 1.122212, 1.122212, 1.122213, 1.122215",\ + "0.015511, 0.015511, 0.015511, 0.015511, 0.015512",\ + "0.067734, 0.067734, 0.067734, 0.067734, 0.067734",\ + "0.170292, 0.170292, 0.170292, 0.170292, 0.170293",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122212, 1.122212, 1.122212, 1.122213, 1.122215",\ + "0.015511, 0.015511, 0.015511, 0.015511, 0.015512",\ + "0.067734, 0.067734, 0.067734, 0.067734, 0.067734",\ + "0.170292, 0.170292, 0.170292, 0.170292, 0.170293",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122212, 1.122212, 1.122212, 1.122213, 1.122215"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[3]_redg_min*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[31]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.439056, 0.659338, 0.836735, 1.125199, 1.685426",\ + "0.473321, 0.693604, 0.871000, 1.159464, 1.719692",\ + "0.546805, 0.767087, 0.944484, 1.232948, 1.793175",\ + "0.768026, 0.988308, 1.165705, 1.454169, 2.014396",\ + "1.329834, 1.550117, 1.727513, 2.015977, 2.576204",\ + "0.527452, 0.746657, 0.924016, 1.212504, 1.772779",\ + "0.561718, 0.780922, 0.958281, 1.246769, 1.807045",\ + "0.635202, 0.854406, 1.031765, 1.320253, 1.880529",\ + "0.856422, 1.075626, 1.252986, 1.541474, 2.101749",\ + "1.418231, 1.637435, 1.814794, 2.103282, 2.663558",\ + "0.616803, 0.826989, 1.004043, 1.292532, 1.852811",\ + "0.651068, 0.861255, 1.038308, 1.326798, 1.887077",\ + "0.724552, 0.934738, 1.111792, 1.400281, 1.960560",\ + "0.945773, 1.155959, 1.333013, 1.621502, 2.181781",\ + "1.507581, 1.717768, 1.894821, 2.183311, 2.743589",\ + "0.680452, 0.884805, 1.061735, 1.349962, 1.909826",\ + "0.714717, 0.919071, 1.096000, 1.384227, 1.944092",\ + "0.788201, 0.992554, 1.169484, 1.457711, 2.017575",\ + "1.009422, 1.213775, 1.390705, 1.678931, 2.238796",\ + "1.571230, 1.775584, 1.952513, 2.240740, 2.800604",\ + "1.011732, 1.190021, 1.365390, 1.653133, 2.212047",\ + "1.045997, 1.224287, 1.399656, 1.687398, 2.246312",\ + "1.119481, 1.297770, 1.473139, 1.760882, 2.319796",\ + "1.340702, 1.518991, 1.694360, 1.982103, 2.541017",\ + "1.902511, 2.080800, 2.256169, 2.543911, 3.102825"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.027424, 0.027424, 0.027425, 0.027426, 0.027427",\ + "0.129493, 0.129493, 0.129493, 0.129493, 0.129493",\ + "0.314624, 0.314624, 0.314624, 0.314624, 0.314623",\ + "0.831916, 0.831916, 0.831916, 0.831917, 0.831917",\ + "2.131895, 2.131895, 2.131895, 2.131895, 2.131895",\ + "0.027424, 0.027424, 0.027425, 0.027426, 0.027427",\ + "0.129493, 0.129493, 0.129493, 0.129493, 0.129493",\ + "0.314624, 0.314624, 0.314624, 0.314624, 0.314623",\ + "0.831916, 0.831916, 0.831916, 0.831917, 0.831917",\ + "2.131895, 2.131895, 2.131895, 2.131895, 2.131895",\ + "0.027424, 0.027424, 0.027425, 0.027426, 0.027427",\ + "0.129493, 0.129493, 0.129493, 0.129493, 0.129493",\ + "0.314624, 0.314624, 0.314624, 0.314624, 0.314623",\ + "0.831916, 0.831916, 0.831916, 0.831917, 0.831917",\ + "2.131895, 2.131895, 2.131895, 2.131895, 2.131895",\ + "0.027424, 0.027424, 0.027425, 0.027426, 0.027427",\ + "0.129493, 0.129493, 0.129493, 0.129493, 0.129493",\ + "0.314624, 0.314624, 0.314624, 0.314624, 0.314623",\ + "0.831916, 0.831916, 0.831916, 0.831917, 0.831917",\ + "2.131895, 2.131895, 2.131895, 2.131895, 2.131895",\ + "0.027424, 0.027424, 0.027425, 0.027426, 0.027427",\ + "0.129493, 0.129493, 0.129493, 0.129493, 0.129493",\ + "0.314624, 0.314624, 0.314624, 0.314624, 0.314623",\ + "0.831916, 0.831916, 0.831916, 0.831917, 0.831917",\ + "2.131895, 2.131895, 2.131895, 2.131895, 2.131895"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.410231, 0.630513, 0.807909, 1.096372, 1.656599",\ + "0.436125, 0.656408, 0.833804, 1.122268, 1.682495",\ + "0.490769, 0.711051, 0.888448, 1.176911, 1.737139",\ + "0.640645, 0.860927, 1.038324, 1.326787, 1.887015",\ + "1.013797, 1.234079, 1.411476, 1.699939, 2.260167",\ + "0.498627, 0.717831, 0.895190, 1.183677, 1.743952",\ + "0.524522, 0.743726, 0.921085, 1.209573, 1.769848",\ + "0.579165, 0.798369, 0.975729, 1.264216, 1.824492",\ + "0.729041, 0.948246, 1.125605, 1.414093, 1.974368",\ + "1.102193, 1.321398, 1.498757, 1.787244, 2.347520",\ + "0.587977, 0.798164, 0.975217, 1.263706, 1.823984",\ + "0.613872, 0.824059, 1.001112, 1.289602, 1.849880",\ + "0.668516, 0.878702, 1.055755, 1.344245, 1.904523",\ + "0.818392, 1.028578, 1.205631, 1.494121, 2.054400",\ + "1.191543, 1.401730, 1.578784, 1.867273, 2.427552",\ + "0.651626, 0.855980, 1.032909, 1.321135, 1.880999",\ + "0.677521, 0.881875, 1.058804, 1.347031, 1.906895",\ + "0.732164, 0.936518, 1.113448, 1.401674, 1.961538",\ + "0.882041, 1.086394, 1.263324, 1.551550, 2.111415",\ + "1.255192, 1.459546, 1.636476, 1.924702, 2.484566",\ + "0.982907, 1.161196, 1.336565, 1.624306, 2.183219",\ + "1.008801, 1.187091, 1.362460, 1.650202, 2.209116",\ + "1.063445, 1.241734, 1.417103, 1.704845, 2.263759",\ + "1.213321, 1.391610, 1.566979, 1.854722, 2.413635",\ + "1.586473, 1.764762, 1.940131, 2.227873, 2.786787"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.015464, 0.015464, 0.015465, 0.015465, 0.015467",\ + "0.067728, 0.067728, 0.067728, 0.067728, 0.067729",\ + "0.170295, 0.170295, 0.170295, 0.170295, 0.170295",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122218, 1.122218, 1.122218, 1.122218, 1.122218",\ + "0.015464, 0.015464, 0.015465, 0.015465, 0.015467",\ + "0.067728, 0.067728, 0.067728, 0.067728, 0.067729",\ + "0.170295, 0.170295, 0.170295, 0.170295, 0.170295",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122218, 1.122218, 1.122218, 1.122218, 1.122218",\ + "0.015464, 0.015464, 0.015465, 0.015465, 0.015467",\ + "0.067728, 0.067728, 0.067728, 0.067728, 0.067729",\ + "0.170295, 0.170295, 0.170295, 0.170295, 0.170295",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122218, 1.122218, 1.122218, 1.122218, 1.122218",\ + "0.015464, 0.015464, 0.015465, 0.015465, 0.015467",\ + "0.067728, 0.067728, 0.067728, 0.067728, 0.067729",\ + "0.170295, 0.170295, 0.170295, 0.170295, 0.170295",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122218, 1.122218, 1.122218, 1.122218, 1.122218",\ + "0.015464, 0.015464, 0.015465, 0.015465, 0.015467",\ + "0.067728, 0.067728, 0.067728, 0.067728, 0.067729",\ + "0.170295, 0.170295, 0.170295, 0.170295, 0.170295",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122218, 1.122218, 1.122218, 1.122218, 1.122218"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[3]_redg_min_2417*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[33]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.416720, 0.653678, 0.840231, 1.138631, 1.715459",\ + "0.450985, 0.687943, 0.874496, 1.172896, 1.749724",\ + "0.524469, 0.761427, 0.947980, 1.246380, 1.823208",\ + "0.745690, 0.982648, 1.169201, 1.467601, 2.044429",\ + "1.307499, 1.544456, 1.731009, 2.029409, 2.606237",\ + "0.505034, 0.740996, 0.927512, 1.225936, 1.802812",\ + "0.539300, 0.775261, 0.961777, 1.260202, 1.837078",\ + "0.612783, 0.848745, 1.035261, 1.333685, 1.910561",\ + "0.834004, 1.069966, 1.256482, 1.554906, 2.131782",\ + "1.395813, 1.631774, 1.818290, 2.116714, 2.693590",\ + "0.594427, 0.821326, 1.007539, 1.305964, 1.882844",\ + "0.628693, 0.855591, 1.041804, 1.340230, 1.917109",\ + "0.702176, 0.929075, 1.115288, 1.413714, 1.990593",\ + "0.923397, 1.150296, 1.336509, 1.634935, 2.211814",\ + "1.485206, 1.712105, 1.898317, 2.196743, 2.773622",\ + "0.658240, 0.879157, 1.065253, 1.363414, 1.939900",\ + "0.692506, 0.913422, 1.099519, 1.397680, 1.974165",\ + "0.765989, 0.986906, 1.173002, 1.471163, 2.047649",\ + "0.987210, 1.208127, 1.394223, 1.692384, 2.268870",\ + "1.549019, 1.769935, 1.956032, 2.254193, 2.830678",\ + "0.995697, 1.184467, 1.368911, 1.666602, 2.242170",\ + "1.029963, 1.218732, 1.403177, 1.700868, 2.276436",\ + "1.103446, 1.292216, 1.476660, 1.774352, 2.349919",\ + "1.324667, 1.513437, 1.697881, 1.995573, 2.571140",\ + "1.886476, 2.075245, 2.259690, 2.557381, 3.132948"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.027423, 0.027425, 0.027425, 0.027426, 0.027428",\ + "0.129493, 0.129493, 0.129493, 0.129493, 0.129493",\ + "0.314624, 0.314624, 0.314624, 0.314624, 0.314623",\ + "0.831916, 0.831916, 0.831917, 0.831917, 0.831917",\ + "2.131895, 2.131895, 2.131895, 2.131895, 2.131895",\ + "0.027423, 0.027425, 0.027425, 0.027426, 0.027428",\ + "0.129493, 0.129493, 0.129493, 0.129493, 0.129493",\ + "0.314624, 0.314624, 0.314624, 0.314624, 0.314623",\ + "0.831916, 0.831916, 0.831917, 0.831917, 0.831917",\ + "2.131895, 2.131895, 2.131895, 2.131895, 2.131895",\ + "0.027423, 0.027425, 0.027425, 0.027426, 0.027428",\ + "0.129493, 0.129493, 0.129493, 0.129493, 0.129493",\ + "0.314624, 0.314624, 0.314624, 0.314624, 0.314623",\ + "0.831916, 0.831916, 0.831917, 0.831917, 0.831917",\ + "2.131895, 2.131895, 2.131895, 2.131895, 2.131895",\ + "0.027423, 0.027425, 0.027425, 0.027426, 0.027428",\ + "0.129493, 0.129493, 0.129493, 0.129493, 0.129493",\ + "0.314624, 0.314624, 0.314624, 0.314624, 0.314623",\ + "0.831916, 0.831916, 0.831917, 0.831917, 0.831917",\ + "2.131895, 2.131895, 2.131895, 2.131895, 2.131895",\ + "0.027424, 0.027425, 0.027425, 0.027426, 0.027428",\ + "0.129493, 0.129493, 0.129493, 0.129493, 0.129493",\ + "0.314624, 0.314624, 0.314624, 0.314624, 0.314623",\ + "0.831916, 0.831916, 0.831917, 0.831917, 0.831917",\ + "2.131895, 2.131895, 2.131895, 2.131895, 2.131895"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.387894, 0.624852, 0.811405, 1.109804, 1.686631",\ + "0.413789, 0.650747, 0.837300, 1.135700, 1.712528",\ + "0.468433, 0.705391, 0.891944, 1.190343, 1.767171",\ + "0.618309, 0.855267, 1.041820, 1.340220, 1.917047",\ + "0.991461, 1.228418, 1.414971, 1.713371, 2.290199",\ + "0.476209, 0.712170, 0.898686, 1.197109, 1.773985",\ + "0.502103, 0.738065, 0.924581, 1.223005, 1.799881",\ + "0.556747, 0.792708, 0.979225, 1.277649, 1.854524",\ + "0.706623, 0.942585, 1.129101, 1.427525, 2.004401",\ + "1.079775, 1.315736, 1.502252, 1.800677, 2.377553",\ + "0.565602, 0.792500, 0.978712, 1.277138, 1.854016",\ + "0.591497, 0.818395, 1.004608, 1.303034, 1.879913",\ + "0.646140, 0.873039, 1.059251, 1.357677, 1.934556",\ + "0.796016, 1.022915, 1.209128, 1.507553, 2.084432",\ + "1.169168, 1.396067, 1.582279, 1.880705, 2.457584",\ + "0.629415, 0.850331, 1.036427, 1.334588, 1.911072",\ + "0.655310, 0.876226, 1.062322, 1.360483, 1.936969",\ + "0.709953, 0.930869, 1.116966, 1.415127, 1.991612",\ + "0.859829, 1.080746, 1.266842, 1.565003, 2.141489",\ + "1.232981, 1.453897, 1.639994, 1.938155, 2.514640",\ + "0.966871, 1.155640, 1.340085, 1.637776, 2.213343",\ + "0.992766, 1.181536, 1.365980, 1.663672, 2.239239",\ + "1.047410, 1.236179, 1.420624, 1.718315, 2.293883",\ + "1.197286, 1.386055, 1.570500, 1.868191, 2.443759",\ + "1.570438, 1.759207, 1.943652, 2.241343, 2.816911"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.015464, 0.015465, 0.015465, 0.015466, 0.015467",\ + "0.067728, 0.067728, 0.067728, 0.067728, 0.067729",\ + "0.170295, 0.170295, 0.170295, 0.170295, 0.170295",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122217, 1.122218, 1.122218, 1.122218, 1.122218",\ + "0.015464, 0.015465, 0.015465, 0.015466, 0.015467",\ + "0.067728, 0.067728, 0.067728, 0.067728, 0.067729",\ + "0.170295, 0.170295, 0.170295, 0.170295, 0.170295",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122217, 1.122218, 1.122218, 1.122218, 1.122218",\ + "0.015464, 0.015465, 0.015465, 0.015466, 0.015467",\ + "0.067728, 0.067728, 0.067728, 0.067728, 0.067729",\ + "0.170295, 0.170295, 0.170295, 0.170295, 0.170295",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122217, 1.122218, 1.122218, 1.122218, 1.122218",\ + "0.015464, 0.015465, 0.015465, 0.015466, 0.015467",\ + "0.067728, 0.067728, 0.067728, 0.067728, 0.067729",\ + "0.170295, 0.170295, 0.170295, 0.170295, 0.170295",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122217, 1.122218, 1.122218, 1.122218, 1.122218",\ + "0.015465, 0.015465, 0.015465, 0.015466, 0.015467",\ + "0.067728, 0.067728, 0.067728, 0.067728, 0.067729",\ + "0.170295, 0.170295, 0.170295, 0.170295, 0.170295",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122218, 1.122218, 1.122218, 1.122218, 1.122218"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[3]_redg_min_2525*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[35]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.317807, 0.553382, 0.743028, 1.048041, 1.638313",\ + "0.360716, 0.596291, 0.785937, 1.090950, 1.681222",\ + "0.437216, 0.672790, 0.862436, 1.167450, 1.757720",\ + "0.660515, 0.896090, 1.085736, 1.390749, 1.981019",\ + "1.219139, 1.454558, 1.644426, 1.949632, 2.540179",\ + "0.406273, 0.640700, 0.830308, 1.135346, 1.725666",\ + "0.449182, 0.683609, 0.873218, 1.178255, 1.768575",\ + "0.525681, 0.760108, 0.949717, 1.254755, 1.845074",\ + "0.748981, 0.983408, 1.173017, 1.478054, 2.068373",\ + "1.307619, 1.541876, 1.731707, 2.036937, 2.627532",\ + "0.495773, 0.721033, 0.910335, 1.215375, 1.805698",\ + "0.538682, 0.763942, 0.953244, 1.258284, 1.848607",\ + "0.615182, 0.840441, 1.029744, 1.334783, 1.925105",\ + "0.838481, 1.063741, 1.253043, 1.558083, 2.148405",\ + "1.397163, 1.622209, 1.811734, 2.116965, 2.707564",\ + "0.559539, 0.778868, 0.968056, 1.272841, 1.862785",\ + "0.602449, 0.821777, 1.010965, 1.315750, 1.905694",\ + "0.678948, 0.898276, 1.087465, 1.392249, 1.982193",\ + "0.902248, 1.121576, 1.310764, 1.615548, 2.205492",\ + "1.460969, 1.680044, 1.869455, 2.174432, 2.764652",\ + "0.896716, 1.084217, 1.271716, 1.576043, 2.165093",\ + "0.939625, 1.127126, 1.314625, 1.618952, 2.208002",\ + "1.016124, 1.203625, 1.391125, 1.695451, 2.284501",\ + "1.239424, 1.426925, 1.614424, 1.918751, 2.507800",\ + "1.798400, 1.985393, 2.173115, 2.477634, 3.066961"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.048588, 0.048588, 0.048588, 0.048588, 0.048588",\ + "0.136074, 0.136074, 0.136074, 0.136074, 0.136074",\ + "0.314166, 0.314166, 0.314166, 0.314166, 0.314166",\ + "0.833609, 0.833609, 0.833609, 0.833609, 0.833609",\ + "2.135110, 2.135110, 2.135110, 2.135111, 2.135114",\ + "0.048588, 0.048588, 0.048588, 0.048588, 0.048588",\ + "0.136074, 0.136074, 0.136074, 0.136074, 0.136074",\ + "0.314166, 0.314166, 0.314166, 0.314166, 0.314166",\ + "0.833609, 0.833609, 0.833609, 0.833609, 0.833609",\ + "2.135110, 2.135110, 2.135110, 2.135111, 2.135114",\ + "0.048588, 0.048588, 0.048588, 0.048588, 0.048588",\ + "0.136074, 0.136074, 0.136074, 0.136074, 0.136074",\ + "0.314166, 0.314166, 0.314166, 0.314166, 0.314166",\ + "0.833609, 0.833609, 0.833609, 0.833609, 0.833609",\ + "2.135110, 2.135110, 2.135110, 2.135111, 2.135114",\ + "0.048588, 0.048588, 0.048588, 0.048588, 0.048588",\ + "0.136074, 0.136074, 0.136074, 0.136074, 0.136074",\ + "0.314166, 0.314166, 0.314166, 0.314166, 0.314166",\ + "0.833609, 0.833609, 0.833609, 0.833609, 0.833609",\ + "2.135110, 2.135110, 2.135110, 2.135111, 2.135114",\ + "0.048588, 0.048588, 0.048588, 0.048588, 0.048588",\ + "0.136074, 0.136074, 0.136074, 0.136074, 0.136074",\ + "0.314166, 0.314166, 0.314166, 0.314166, 0.314166",\ + "0.833609, 0.833609, 0.833609, 0.833609, 0.833609",\ + "2.135110, 2.135110, 2.135110, 2.135111, 2.135114"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.305217, 0.540636, 0.730505, 1.035711, 1.626258",\ + "0.334877, 0.570296, 0.760166, 1.065372, 1.655918",\ + "0.386817, 0.622236, 0.812106, 1.117312, 1.707858",\ + "0.535277, 0.770695, 0.960565, 1.265772, 1.856318",\ + "0.899736, 1.135311, 1.324957, 1.629971, 2.220244",\ + "0.393698, 0.627954, 0.817786, 1.123016, 1.713611",\ + "0.423358, 0.657614, 0.847447, 1.152677, 1.743272",\ + "0.475298, 0.709554, 0.899387, 1.204617, 1.795212",\ + "0.623757, 0.858014, 1.047846, 1.353077, 1.943671",\ + "0.988201, 1.222629, 1.412238, 1.717276, 2.307598",\ + "0.483241, 0.708287, 0.897813, 1.203045, 1.793643",\ + "0.512901, 0.737947, 0.927473, 1.232705, 1.823303",\ + "0.564842, 0.789887, 0.979414, 1.284645, 1.875243",\ + "0.713301, 0.938347, 1.127873, 1.433105, 2.023703",\ + "1.077702, 1.302962, 1.492265, 1.797305, 2.387629",\ + "0.547048, 0.766122, 0.955534, 1.260511, 1.850731",\ + "0.576708, 0.795782, 0.985195, 1.290171, 1.880391",\ + "0.628648, 0.847722, 1.037135, 1.342111, 1.932331",\ + "0.777107, 0.996181, 1.185595, 1.490571, 2.080791",\ + "1.141469, 1.360797, 1.549985, 1.854770, 2.444716",\ + "0.884478, 1.071471, 1.259194, 1.563713, 2.153039",\ + "0.914138, 1.101131, 1.288855, 1.593374, 2.182700",\ + "0.966078, 1.153071, 1.340795, 1.645314, 2.234640",\ + "1.114538, 1.301530, 1.489255, 1.793774, 2.383100",\ + "1.478645, 1.666146, 1.853645, 2.157973, 2.747025"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002254, 0.075253, 0.162193, 0.322132, 0.642011"); + values ( "0.026620, 0.026620, 0.026620, 0.026620, 0.026620",\ + "0.075782, 0.075782, 0.075782, 0.075782, 0.075782",\ + "0.169298, 0.169298, 0.169298, 0.169298, 0.169298",\ + "0.439562, 0.439563, 0.439563, 0.439565, 0.439573",\ + "1.119158, 1.119160, 1.119160, 1.119170, 1.119193",\ + "0.026620, 0.026620, 0.026620, 0.026620, 0.026620",\ + "0.075782, 0.075782, 0.075782, 0.075782, 0.075782",\ + "0.169298, 0.169298, 0.169298, 0.169298, 0.169298",\ + "0.439562, 0.439563, 0.439563, 0.439565, 0.439573",\ + "1.119158, 1.119160, 1.119160, 1.119170, 1.119193",\ + "0.026620, 0.026620, 0.026620, 0.026620, 0.026620",\ + "0.075782, 0.075782, 0.075782, 0.075782, 0.075782",\ + "0.169298, 0.169298, 0.169298, 0.169298, 0.169298",\ + "0.439562, 0.439563, 0.439563, 0.439565, 0.439573",\ + "1.119158, 1.119160, 1.119160, 1.119170, 1.119193",\ + "0.026620, 0.026620, 0.026620, 0.026620, 0.026620",\ + "0.075782, 0.075782, 0.075782, 0.075782, 0.075782",\ + "0.169298, 0.169298, 0.169298, 0.169298, 0.169298",\ + "0.439562, 0.439563, 0.439563, 0.439565, 0.439573",\ + "1.119159, 1.119160, 1.119160, 1.119170, 1.119193",\ + "0.026620, 0.026620, 0.026620, 0.026620, 0.026620",\ + "0.075782, 0.075782, 0.075782, 0.075782, 0.075782",\ + "0.169298, 0.169298, 0.169298, 0.169298, 0.169298",\ + "0.439562, 0.439563, 0.439563, 0.439565, 0.439573",\ + "1.119160, 1.119160, 1.119160, 1.119170, 1.119193"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[3]_redg_min_2639*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[36]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.385015, 0.606699, 0.784745, 1.073680, 1.634527",\ + "0.435014, 0.656698, 0.834744, 1.123679, 1.684526",\ + "0.515571, 0.737187, 0.915297, 1.204231, 1.765078",\ + "0.736804, 0.958420, 1.136530, 1.425464, 1.986311",\ + "1.298648, 1.520264, 1.698375, 1.987309, 2.548156",\ + "0.473424, 0.694018, 0.872026, 1.160985, 1.721881",\ + "0.523423, 0.744017, 0.922025, 1.210984, 1.771880",\ + "0.603979, 0.824505, 1.002578, 1.291536, 1.852431",\ + "0.825212, 1.045738, 1.223811, 1.512769, 2.073665",\ + "1.387057, 1.607583, 1.785656, 2.074614, 2.635510",\ + "0.562514, 0.774353, 0.952053, 1.241014, 1.801912",\ + "0.612513, 0.824352, 1.002052, 1.291013, 1.851911",\ + "0.693070, 0.904840, 1.082605, 1.371564, 1.932463",\ + "0.914303, 1.126073, 1.303838, 1.592798, 2.153697",\ + "1.476147, 1.687918, 1.865683, 2.154643, 2.715541",\ + "0.625792, 0.832174, 1.009746, 1.298444, 1.858928",\ + "0.675791, 0.882173, 1.059745, 1.348443, 1.908927",\ + "0.756348, 0.962666, 1.140298, 1.428994, 1.989478",\ + "0.977581, 1.183899, 1.361531, 1.650227, 2.210711",\ + "1.539425, 1.745744, 1.923376, 2.212072, 2.772557",\ + "0.956955, 1.137434, 1.313402, 1.601616, 2.161149",\ + "1.006954, 1.187433, 1.363401, 1.651615, 2.211148",\ + "1.086373, 1.267959, 1.443954, 1.732166, 2.291699",\ + "1.307606, 1.489192, 1.665187, 1.953399, 2.512933",\ + "1.869451, 2.051037, 2.227032, 2.515244, 3.074778"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.027446, 0.027446, 0.027446, 0.027446, 0.027445",\ + "0.129491, 0.129491, 0.129491, 0.129491, 0.129491",\ + "0.314623, 0.314623, 0.314623, 0.314623, 0.314623",\ + "0.831920, 0.831920, 0.831920, 0.831920, 0.831920",\ + "2.131897, 2.131897, 2.131897, 2.131897, 2.131897",\ + "0.027446, 0.027446, 0.027446, 0.027446, 0.027445",\ + "0.129491, 0.129491, 0.129491, 0.129491, 0.129491",\ + "0.314623, 0.314623, 0.314623, 0.314623, 0.314623",\ + "0.831920, 0.831920, 0.831920, 0.831920, 0.831920",\ + "2.131897, 2.131897, 2.131897, 2.131897, 2.131897",\ + "0.027446, 0.027446, 0.027446, 0.027446, 0.027445",\ + "0.129491, 0.129491, 0.129491, 0.129491, 0.129491",\ + "0.314623, 0.314623, 0.314623, 0.314623, 0.314623",\ + "0.831920, 0.831920, 0.831920, 0.831920, 0.831920",\ + "2.131897, 2.131897, 2.131897, 2.131897, 2.131897",\ + "0.027446, 0.027446, 0.027446, 0.027446, 0.027445",\ + "0.129491, 0.129491, 0.129491, 0.129491, 0.129491",\ + "0.314623, 0.314623, 0.314623, 0.314623, 0.314623",\ + "0.831920, 0.831920, 0.831920, 0.831920, 0.831920",\ + "2.131897, 2.131897, 2.131897, 2.131897, 2.131897",\ + "0.027446, 0.027446, 0.027446, 0.027446, 0.027445",\ + "0.129491, 0.129491, 0.129491, 0.129491, 0.129491",\ + "0.314623, 0.314623, 0.314623, 0.314623, 0.314623",\ + "0.831920, 0.831920, 0.831920, 0.831920, 0.831920",\ + "2.131897, 2.131897, 2.131897, 2.131897, 2.131897"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.379185, 0.600800, 0.778912, 1.067847, 1.628695",\ + "0.404931, 0.626547, 0.804658, 1.093592, 1.654439",\ + "0.459580, 0.681196, 0.859307, 1.148241, 1.709088",\ + "0.609453, 0.831069, 1.009180, 1.298114, 1.858961",\ + "0.965195, 1.186879, 1.364924, 1.653859, 2.214706",\ + "0.467593, 0.688119, 0.866193, 1.155152, 1.716048",\ + "0.493340, 0.713866, 0.891939, 1.180897, 1.741792",\ + "0.547989, 0.768515, 0.946587, 1.235546, 1.796441",\ + "0.697862, 0.918388, 1.096461, 1.385419, 1.946315",\ + "1.053603, 1.274197, 1.452205, 1.741164, 2.302060",\ + "0.556683, 0.768454, 0.946220, 1.235180, 1.796080",\ + "0.582430, 0.794201, 0.971965, 1.260925, 1.821824",\ + "0.637079, 0.848850, 1.026614, 1.315574, 1.876473",\ + "0.786952, 0.998723, 1.176488, 1.465447, 2.026346",\ + "1.142694, 1.354532, 1.532232, 1.821193, 2.382091",\ + "0.619961, 0.826280, 1.003913, 1.292610, 1.853095",\ + "0.645708, 0.852026, 1.029659, 1.318355, 1.878839",\ + "0.700357, 0.906675, 1.084307, 1.373004, 1.933488",\ + "0.850230, 1.056549, 1.234181, 1.522877, 2.083362",\ + "1.205971, 1.412353, 1.589925, 1.878623, 2.439106",\ + "0.949987, 1.131573, 1.307569, 1.595782, 2.155316",\ + "0.975733, 1.157320, 1.333315, 1.621527, 2.181061",\ + "1.030382, 1.211969, 1.387964, 1.676176, 2.235709",\ + "1.180256, 1.361842, 1.537837, 1.826049, 2.385583",\ + "1.537134, 1.717614, 1.893581, 2.181795, 2.741328"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.015175, 0.015175, 0.015173, 0.015172, 0.015170",\ + "0.067694, 0.067694, 0.067694, 0.067694, 0.067694",\ + "0.170296, 0.170296, 0.170296, 0.170296, 0.170296",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122219, 1.122219, 1.122219, 1.122219, 1.122219",\ + "0.015175, 0.015175, 0.015173, 0.015172, 0.015170",\ + "0.067694, 0.067694, 0.067694, 0.067694, 0.067694",\ + "0.170296, 0.170296, 0.170296, 0.170296, 0.170296",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122219, 1.122219, 1.122219, 1.122219, 1.122219",\ + "0.015175, 0.015175, 0.015173, 0.015172, 0.015170",\ + "0.067694, 0.067694, 0.067694, 0.067694, 0.067694",\ + "0.170296, 0.170296, 0.170296, 0.170296, 0.170296",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122219, 1.122219, 1.122219, 1.122219, 1.122219",\ + "0.015175, 0.015175, 0.015173, 0.015172, 0.015170",\ + "0.067694, 0.067694, 0.067694, 0.067694, 0.067694",\ + "0.170296, 0.170296, 0.170296, 0.170296, 0.170296",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122219, 1.122219, 1.122219, 1.122219, 1.122219",\ + "0.015175, 0.015175, 0.015173, 0.015172, 0.015170",\ + "0.067694, 0.067694, 0.067694, 0.067694, 0.067694",\ + "0.170296, 0.170296, 0.170296, 0.170296, 0.170296",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122219, 1.122219, 1.122219, 1.122219, 1.122219"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[3]_redg_min_2690*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[37]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.362229, 0.589916, 0.774631, 1.069784, 1.640082",\ + "0.412228, 0.639915, 0.824630, 1.119783, 1.690081",\ + "0.492795, 0.719167, 0.903893, 1.199092, 1.769493",\ + "0.714028, 0.940400, 1.125127, 1.420325, 1.990727",\ + "1.275872, 1.502245, 1.686972, 1.982170, 2.552572",\ + "0.450567, 0.677234, 0.861912, 1.157089, 1.727435",\ + "0.500567, 0.727233, 0.911911, 1.207088, 1.777434",\ + "0.581133, 0.806485, 0.991174, 1.286397, 1.856847",\ + "0.802366, 1.027718, 1.212408, 1.507630, 2.078080",\ + "1.364210, 1.589563, 1.774253, 2.069476, 2.639925",\ + "0.539804, 0.757567, 0.941939, 1.237118, 1.807467",\ + "0.589803, 0.807566, 0.991938, 1.287117, 1.857466",\ + "0.670367, 0.886817, 1.071201, 1.366425, 1.936878",\ + "0.891600, 1.108051, 1.292434, 1.587659, 2.158112",\ + "1.453444, 1.669896, 1.854280, 2.149504, 2.719957",\ + "0.603371, 0.815390, 0.999649, 1.294559, 1.864506",\ + "0.653370, 0.865389, 1.049648, 1.344558, 1.914505",\ + "0.733934, 0.944641, 1.128911, 1.423867, 1.993918",\ + "0.955166, 1.165874, 1.350144, 1.645100, 2.215151",\ + "1.517011, 1.727719, 1.911989, 2.206946, 2.776997",\ + "0.939278, 1.120654, 1.303307, 1.597741, 2.166757",\ + "0.989277, 1.170653, 1.353306, 1.647740, 2.216756",\ + "1.069831, 1.249906, 1.432569, 1.727049, 2.296169",\ + "1.291064, 1.471139, 1.653802, 1.948282, 2.517402",\ + "1.852909, 2.032984, 2.215647, 2.510128, 3.079247"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.027448, 0.027445, 0.027445, 0.027445, 0.027445",\ + "0.129491, 0.129491, 0.129491, 0.129491, 0.129491",\ + "0.314623, 0.314623, 0.314623, 0.314623, 0.314623",\ + "0.831920, 0.831920, 0.831920, 0.831920, 0.831920",\ + "2.131897, 2.131897, 2.131897, 2.131897, 2.131897",\ + "0.027448, 0.027445, 0.027445, 0.027445, 0.027445",\ + "0.129491, 0.129491, 0.129491, 0.129491, 0.129491",\ + "0.314623, 0.314623, 0.314623, 0.314623, 0.314623",\ + "0.831920, 0.831920, 0.831920, 0.831920, 0.831920",\ + "2.131897, 2.131897, 2.131897, 2.131897, 2.131897",\ + "0.027447, 0.027445, 0.027445, 0.027445, 0.027445",\ + "0.129491, 0.129491, 0.129491, 0.129491, 0.129491",\ + "0.314623, 0.314623, 0.314623, 0.314623, 0.314623",\ + "0.831920, 0.831920, 0.831920, 0.831920, 0.831920",\ + "2.131897, 2.131897, 2.131897, 2.131897, 2.131897",\ + "0.027447, 0.027445, 0.027445, 0.027445, 0.027445",\ + "0.129491, 0.129491, 0.129491, 0.129491, 0.129491",\ + "0.314623, 0.314623, 0.314623, 0.314623, 0.314623",\ + "0.831920, 0.831920, 0.831920, 0.831920, 0.831920",\ + "2.131897, 2.131897, 2.131897, 2.131897, 2.131897",\ + "0.027446, 0.027445, 0.027445, 0.027445, 0.027445",\ + "0.129491, 0.129491, 0.129491, 0.129491, 0.129491",\ + "0.314623, 0.314623, 0.314623, 0.314623, 0.314623",\ + "0.831920, 0.831920, 0.831920, 0.831920, 0.831920",\ + "2.131897, 2.131897, 2.131897, 2.131897, 2.131897"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.356406, 0.582783, 0.767510, 1.062709, 1.633111",\ + "0.382155, 0.608528, 0.793254, 1.088453, 1.658855",\ + "0.436803, 0.663177, 0.847903, 1.143102, 1.713504",\ + "0.586677, 0.813050, 0.997777, 1.292975, 1.863377",\ + "0.942409, 1.170095, 1.354810, 1.649963, 2.220260",\ + "0.444744, 0.670102, 0.854791, 1.150014, 1.720465",\ + "0.470493, 0.695846, 0.880535, 1.175758, 1.746208",\ + "0.525141, 0.750495, 0.935184, 1.230407, 1.800857",\ + "0.675015, 0.900368, 1.085058, 1.380280, 1.950730",\ + "1.030747, 1.257413, 1.442091, 1.737268, 2.307614",\ + "0.533979, 0.750434, 0.934818, 1.230043, 1.800496",\ + "0.559727, 0.776178, 0.960562, 1.255787, 1.826240",\ + "0.614376, 0.830827, 1.015211, 1.310436, 1.880889",\ + "0.764250, 0.980701, 1.165085, 1.460309, 2.030762",\ + "1.119983, 1.337745, 1.522118, 1.817296, 2.387645",\ + "0.597545, 0.808257, 0.992528, 1.287485, 1.857536",\ + "0.623294, 0.834002, 1.018272, 1.313228, 1.883280",\ + "0.677942, 0.888651, 1.072921, 1.367877, 1.937928",\ + "0.827816, 1.038524, 1.222794, 1.517751, 2.087802",\ + "1.183551, 1.395569, 1.579828, 1.874738, 2.444685",\ + "0.933445, 1.113522, 1.296186, 1.590666, 2.159787",\ + "0.959191, 1.139267, 1.321930, 1.616410, 2.185530",\ + "1.013840, 1.193916, 1.376579, 1.671059, 2.240179",\ + "1.163714, 1.343789, 1.526452, 1.820932, 2.390052",\ + "1.519457, 1.700833, 1.883486, 2.177920, 2.746935"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.015179, 0.015170, 0.015169, 0.015169, 0.015168",\ + "0.067695, 0.067694, 0.067694, 0.067694, 0.067694",\ + "0.170296, 0.170296, 0.170296, 0.170296, 0.170296",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122219, 1.122219, 1.122219, 1.122219, 1.122219",\ + "0.015179, 0.015170, 0.015169, 0.015169, 0.015168",\ + "0.067695, 0.067694, 0.067694, 0.067694, 0.067694",\ + "0.170296, 0.170296, 0.170296, 0.170296, 0.170296",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122219, 1.122219, 1.122219, 1.122219, 1.122219",\ + "0.015178, 0.015170, 0.015169, 0.015169, 0.015168",\ + "0.067695, 0.067694, 0.067694, 0.067694, 0.067694",\ + "0.170296, 0.170296, 0.170296, 0.170296, 0.170296",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122219, 1.122219, 1.122219, 1.122219, 1.122219",\ + "0.015177, 0.015170, 0.015169, 0.015169, 0.015168",\ + "0.067695, 0.067694, 0.067694, 0.067694, 0.067694",\ + "0.170296, 0.170296, 0.170296, 0.170296, 0.170296",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122219, 1.122219, 1.122219, 1.122219, 1.122219",\ + "0.015173, 0.015170, 0.015169, 0.015169, 0.015168",\ + "0.067694, 0.067694, 0.067694, 0.067694, 0.067694",\ + "0.170296, 0.170296, 0.170296, 0.170296, 0.170296",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122219, 1.122219, 1.122219, 1.122219, 1.122219"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[3]_redg_min_2258*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[39]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.309159, 0.541794, 0.727047, 1.026481, 1.606878",\ + "0.349227, 0.581863, 0.767115, 1.066549, 1.646947",\ + "0.425113, 0.657750, 0.843001, 1.142434, 1.722832",\ + "0.644749, 0.877387, 1.062637, 1.362070, 1.942469",\ + "1.197363, 1.430001, 1.615251, 1.914684, 2.495083",\ + "0.397555, 0.629112, 0.814328, 1.113786, 1.694232",\ + "0.437623, 0.669181, 0.854396, 1.153854, 1.734300",\ + "0.513508, 0.745068, 0.930282, 1.229739, 1.810186",\ + "0.733145, 0.964705, 1.149918, 1.449375, 2.029822",\ + "1.285759, 1.517319, 1.702532, 2.001989, 2.582437",\ + "0.486858, 0.709445, 0.894355, 1.193814, 1.774263",\ + "0.526927, 0.749514, 0.934423, 1.233882, 1.814332",\ + "0.602812, 0.825401, 1.010309, 1.309767, 1.890217",\ + "0.822449, 1.045038, 1.229945, 1.529404, 2.109854",\ + "1.375063, 1.597652, 1.782559, 2.082017, 2.662468",\ + "0.550445, 0.767276, 0.952066, 1.251268, 1.831326",\ + "0.590513, 0.807345, 0.992134, 1.291336, 1.871395",\ + "0.666399, 0.883232, 1.068019, 1.367221, 1.947281",\ + "0.886036, 1.102869, 1.287656, 1.586857, 2.166918",\ + "1.438650, 1.655483, 1.840269, 2.139471, 2.719532",\ + "0.886476, 1.072598, 1.255724, 1.554460, 2.133606",\ + "0.926545, 1.112668, 1.295792, 1.594528, 2.173675",\ + "1.002432, 1.188554, 1.371677, 1.670413, 2.249560",\ + "1.222068, 1.408191, 1.591314, 1.890050, 2.469197",\ + "1.774683, 1.960806, 2.143928, 2.442663, 3.021811"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.048599, 0.048599, 0.048599, 0.048599, 0.048600",\ + "0.136046, 0.136046, 0.136046, 0.136046, 0.136046",\ + "0.314136, 0.314136, 0.314136, 0.314136, 0.314136",\ + "0.833556, 0.833556, 0.833556, 0.833556, 0.833556",\ + "2.135299, 2.135299, 2.135299, 2.135304, 2.135317",\ + "0.048599, 0.048599, 0.048599, 0.048599, 0.048600",\ + "0.136046, 0.136046, 0.136046, 0.136046, 0.136046",\ + "0.314136, 0.314136, 0.314136, 0.314136, 0.314136",\ + "0.833556, 0.833556, 0.833556, 0.833556, 0.833556",\ + "2.135299, 2.135299, 2.135299, 2.135304, 2.135317",\ + "0.048599, 0.048599, 0.048599, 0.048599, 0.048600",\ + "0.136046, 0.136046, 0.136046, 0.136046, 0.136046",\ + "0.314136, 0.314136, 0.314136, 0.314136, 0.314136",\ + "0.833556, 0.833556, 0.833556, 0.833556, 0.833556",\ + "2.135299, 2.135299, 2.135299, 2.135304, 2.135317",\ + "0.048599, 0.048599, 0.048599, 0.048599, 0.048600",\ + "0.136046, 0.136046, 0.136046, 0.136046, 0.136046",\ + "0.314136, 0.314136, 0.314136, 0.314136, 0.314136",\ + "0.833556, 0.833556, 0.833556, 0.833556, 0.833556",\ + "2.135299, 2.135299, 2.135299, 2.135304, 2.135317",\ + "0.048599, 0.048599, 0.048599, 0.048599, 0.048600",\ + "0.136046, 0.136046, 0.136046, 0.136046, 0.136046",\ + "0.314136, 0.314136, 0.314136, 0.314136, 0.314136",\ + "0.833556, 0.833556, 0.833556, 0.833556, 0.833556",\ + "2.135299, 2.135299, 2.135299, 2.135304, 2.135317"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.283419, 0.516054, 0.701307, 1.000741, 1.581138",\ + "0.313066, 0.545699, 0.730954, 1.030388, 1.610784",\ + "0.365001, 0.597634, 0.782889, 1.082323, 1.662719",\ + "0.513456, 0.746088, 0.931344, 1.230778, 1.811174",\ + "0.885857, 1.118488, 1.303746, 1.603180, 2.183575",\ + "0.371815, 0.603373, 0.788588, 1.088046, 1.668492",\ + "0.401461, 0.633018, 0.818235, 1.117693, 1.698138",\ + "0.453396, 0.684952, 0.870170, 1.169628, 1.750072",\ + "0.601851, 0.833406, 1.018625, 1.318083, 1.898527",\ + "0.974253, 1.205806, 1.391027, 1.690485, 2.270928",\ + "0.461119, 0.683706, 0.868615, 1.168074, 1.748523",\ + "0.490765, 0.713351, 0.898262, 1.197721, 1.778169",\ + "0.542700, 0.765285, 0.950197, 1.249656, 1.830104",\ + "0.691155, 0.913739, 1.098652, 1.398111, 1.978559",\ + "1.063556, 1.286139, 1.471054, 1.770513, 2.350960",\ + "0.524705, 0.741537, 0.926326, 1.225528, 1.805587",\ + "0.554351, 0.771182, 0.955972, 1.255175, 1.835233",\ + "0.606286, 0.823116, 1.007907, 1.307110, 1.887167",\ + "0.754741, 0.971570, 1.156362, 1.455565, 2.035622",\ + "1.127142, 1.343970, 1.528764, 1.827967, 2.408023",\ + "0.860737, 1.046859, 1.229984, 1.528720, 2.107866",\ + "0.890382, 1.076504, 1.259631, 1.558367, 2.137512",\ + "0.942317, 1.128438, 1.311566, 1.610302, 2.189447",\ + "1.090771, 1.276893, 1.460021, 1.758757, 2.337902",\ + "1.463172, 1.649293, 1.832423, 2.131159, 2.710303"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002265, 0.075263, 0.162201, 0.322138, 0.642011"); + values ( "0.026622, 0.026622, 0.026622, 0.026622, 0.026622",\ + "0.075784, 0.075784, 0.075784, 0.075784, 0.075784",\ + "0.169301, 0.169301, 0.169301, 0.169301, 0.169301",\ + "0.439546, 0.439546, 0.439546, 0.439549, 0.439556",\ + "1.119113, 1.119113, 1.119113, 1.119121, 1.119143",\ + "0.026622, 0.026622, 0.026622, 0.026622, 0.026622",\ + "0.075784, 0.075784, 0.075784, 0.075784, 0.075784",\ + "0.169301, 0.169301, 0.169301, 0.169301, 0.169301",\ + "0.439546, 0.439546, 0.439546, 0.439549, 0.439556",\ + "1.119113, 1.119113, 1.119113, 1.119121, 1.119143",\ + "0.026622, 0.026622, 0.026622, 0.026622, 0.026622",\ + "0.075784, 0.075784, 0.075784, 0.075784, 0.075784",\ + "0.169301, 0.169301, 0.169301, 0.169301, 0.169301",\ + "0.439546, 0.439546, 0.439546, 0.439549, 0.439556",\ + "1.119113, 1.119113, 1.119113, 1.119121, 1.119143",\ + "0.026622, 0.026622, 0.026622, 0.026622, 0.026622",\ + "0.075784, 0.075784, 0.075784, 0.075784, 0.075784",\ + "0.169301, 0.169301, 0.169301, 0.169301, 0.169301",\ + "0.439546, 0.439546, 0.439546, 0.439549, 0.439556",\ + "1.119113, 1.119113, 1.119113, 1.119121, 1.119143",\ + "0.026622, 0.026622, 0.026622, 0.026622, 0.026622",\ + "0.075784, 0.075784, 0.075784, 0.075784, 0.075784",\ + "0.169301, 0.169301, 0.169301, 0.169301, 0.169301",\ + "0.439546, 0.439546, 0.439546, 0.439549, 0.439556",\ + "1.119113, 1.119113, 1.119113, 1.119121, 1.119143"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[3]_redg_min_2336*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[41]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.409726, 0.620265, 0.806005, 1.096897, 1.655910",\ + "0.459725, 0.670264, 0.856003, 1.146896, 1.705909",\ + "0.539627, 0.750535, 0.935997, 1.226788, 1.785793",\ + "0.760860, 0.971768, 1.157229, 1.448020, 2.007025",\ + "1.322703, 1.533611, 1.719072, 2.009862, 2.568867",\ + "0.498079, 0.707583, 0.893286, 1.184203, 1.743264",\ + "0.548078, 0.757582, 0.943284, 1.234201, 1.793262",\ + "0.627981, 0.837853, 1.023278, 1.314093, 1.873147",\ + "0.849213, 1.059086, 1.244510, 1.535325, 2.094379",\ + "1.411056, 1.620929, 1.806353, 2.097167, 2.656221",\ + "0.587342, 0.787916, 0.973312, 1.264231, 1.823296",\ + "0.637340, 0.837914, 1.023311, 1.314230, 1.873294",\ + "0.717243, 0.918186, 1.103305, 1.394121, 1.953178",\ + "0.938476, 1.139418, 1.324537, 1.615354, 2.174411",\ + "1.500319, 1.701261, 1.886380, 2.177196, 2.736252",\ + "0.650926, 0.845743, 1.031024, 1.321659, 1.880308",\ + "0.700925, 0.895741, 1.081023, 1.371658, 1.930306",\ + "0.780828, 0.976013, 1.161016, 1.451549, 2.010190",\ + "1.002060, 1.197245, 1.382248, 1.672781, 2.231423",\ + "1.563903, 1.759089, 1.944091, 2.234624, 2.793264",\ + "0.970227, 1.151036, 1.334683, 1.624829, 2.182525",\ + "1.020226, 1.201034, 1.384681, 1.674827, 2.232523",\ + "1.100497, 1.281306, 1.464674, 1.754719, 2.312408",\ + "1.321730, 1.502538, 1.685907, 1.975951, 2.533640",\ + "1.883573, 2.064381, 2.247749, 2.537794, 3.095482"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.027428, 0.027428, 0.027429, 0.027429, 0.027431",\ + "0.129493, 0.129493, 0.129493, 0.129493, 0.129493",\ + "0.314623, 0.314623, 0.314623, 0.314623, 0.314623",\ + "0.831917, 0.831917, 0.831917, 0.831917, 0.831917",\ + "2.131895, 2.131895, 2.131895, 2.131895, 2.131896",\ + "0.027428, 0.027428, 0.027429, 0.027429, 0.027431",\ + "0.129493, 0.129493, 0.129493, 0.129493, 0.129493",\ + "0.314623, 0.314623, 0.314623, 0.314623, 0.314623",\ + "0.831917, 0.831917, 0.831917, 0.831917, 0.831917",\ + "2.131895, 2.131895, 2.131895, 2.131895, 2.131896",\ + "0.027428, 0.027428, 0.027429, 0.027429, 0.027431",\ + "0.129493, 0.129493, 0.129493, 0.129493, 0.129493",\ + "0.314623, 0.314623, 0.314623, 0.314623, 0.314623",\ + "0.831917, 0.831917, 0.831917, 0.831917, 0.831917",\ + "2.131895, 2.131895, 2.131895, 2.131895, 2.131896",\ + "0.027428, 0.027428, 0.027429, 0.027429, 0.027431",\ + "0.129493, 0.129493, 0.129493, 0.129493, 0.129493",\ + "0.314623, 0.314623, 0.314623, 0.314623, 0.314623",\ + "0.831917, 0.831917, 0.831917, 0.831917, 0.831917",\ + "2.131895, 2.131895, 2.131895, 2.131895, 2.131896",\ + "0.027428, 0.027428, 0.027429, 0.027429, 0.027431",\ + "0.129493, 0.129493, 0.129493, 0.129493, 0.129493",\ + "0.314623, 0.314623, 0.314623, 0.314623, 0.314623",\ + "0.831917, 0.831917, 0.831917, 0.831917, 0.831917",\ + "2.131895, 2.131895, 2.131895, 2.131895, 2.131896"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.403233, 0.614141, 0.799601, 1.090390, 1.649393",\ + "0.428986, 0.639894, 0.825355, 1.116146, 1.675151",\ + "0.483635, 0.694543, 0.880004, 1.170794, 1.729799",\ + "0.633508, 0.844416, 1.029877, 1.320668, 1.879673",\ + "0.989900, 1.200439, 1.386178, 1.677071, 2.236084",\ + "0.491587, 0.701459, 0.886882, 1.177695, 1.736746",\ + "0.517340, 0.727212, 0.912636, 1.203451, 1.762504",\ + "0.571988, 0.781861, 0.967285, 1.258099, 1.817153",\ + "0.721862, 0.931734, 1.117158, 1.407973, 1.967026",\ + "1.078253, 1.287757, 1.473459, 1.764376, 2.323438",\ + "0.580849, 0.781792, 0.966909, 1.257724, 1.816778",\ + "0.606602, 0.807544, 0.992663, 1.283479, 1.842536",\ + "0.661251, 0.862193, 1.047312, 1.338128, 1.897184",\ + "0.811124, 1.012067, 1.197185, 1.488001, 2.047058",\ + "1.167515, 1.368089, 1.553486, 1.844405, 2.403470",\ + "0.644433, 0.839619, 1.024620, 1.315152, 1.873790",\ + "0.670186, 0.865372, 1.050374, 1.340907, 1.899548",\ + "0.724835, 0.920020, 1.105023, 1.395556, 1.954196",\ + "0.874709, 1.069894, 1.254896, 1.545429, 2.104070",\ + "1.231100, 1.425916, 1.611198, 1.901833, 2.460482",\ + "0.964103, 1.144912, 1.328278, 1.618321, 2.176007",\ + "0.989856, 1.170664, 1.354033, 1.644077, 2.201765",\ + "1.044504, 1.225313, 1.408681, 1.698726, 2.256414",\ + "1.194378, 1.375186, 1.558555, 1.848599, 2.406287",\ + "1.550400, 1.731209, 1.914856, 2.205003, 2.762699"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.015187, 0.015187, 0.015189, 0.015192, 0.015197",\ + "0.067696, 0.067696, 0.067696, 0.067696, 0.067697",\ + "0.170295, 0.170295, 0.170295, 0.170295, 0.170295",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122218, 1.122218, 1.122218, 1.122218, 1.122218",\ + "0.015187, 0.015187, 0.015189, 0.015192, 0.015197",\ + "0.067696, 0.067696, 0.067696, 0.067696, 0.067697",\ + "0.170295, 0.170295, 0.170295, 0.170295, 0.170295",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122218, 1.122218, 1.122218, 1.122218, 1.122218",\ + "0.015187, 0.015187, 0.015189, 0.015192, 0.015197",\ + "0.067696, 0.067696, 0.067696, 0.067696, 0.067697",\ + "0.170295, 0.170295, 0.170295, 0.170295, 0.170295",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122218, 1.122218, 1.122218, 1.122218, 1.122218",\ + "0.015187, 0.015187, 0.015189, 0.015192, 0.015197",\ + "0.067696, 0.067696, 0.067696, 0.067696, 0.067697",\ + "0.170295, 0.170295, 0.170295, 0.170295, 0.170295",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122218, 1.122218, 1.122218, 1.122218, 1.122218",\ + "0.015187, 0.015187, 0.015189, 0.015192, 0.015197",\ + "0.067696, 0.067696, 0.067696, 0.067696, 0.067697",\ + "0.170295, 0.170295, 0.170295, 0.170295, 0.170295",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122218, 1.122218, 1.122218, 1.122218, 1.122218"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[3]_redg_min_2358*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[42]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.383225, 0.593036, 0.770038, 1.054268, 1.604513",\ + "0.433223, 0.643035, 0.820037, 1.104266, 1.654512",\ + "0.513146, 0.723307, 0.900324, 1.184595, 1.734933",\ + "0.734379, 0.944539, 1.121556, 1.405827, 1.956165",\ + "1.296223, 1.506382, 1.683399, 1.967670, 2.518007",\ + "0.471502, 0.680354, 0.857319, 1.141573, 1.691867",\ + "0.521500, 0.730353, 0.907318, 1.191571, 1.741865",\ + "0.601422, 0.810625, 0.987605, 1.271900, 1.822286",\ + "0.822655, 1.031858, 1.208837, 1.493132, 2.043518",\ + "1.384499, 1.593700, 1.770680, 2.054975, 2.605360",\ + "0.560557, 0.760687, 0.937346, 1.221601, 1.771898",\ + "0.610556, 0.810685, 0.987345, 1.271600, 1.821897",\ + "0.690474, 0.890957, 1.067632, 1.351929, 1.902318",\ + "0.911707, 1.112190, 1.288864, 1.573161, 2.123550",\ + "1.473551, 1.674033, 1.850707, 2.135003, 2.685391",\ + "0.623957, 0.818509, 0.995037, 1.279018, 1.828889",\ + "0.673955, 0.868507, 1.045036, 1.329017, 1.878888",\ + "0.753870, 0.948779, 1.125323, 1.409346, 1.959309",\ + "0.975103, 1.170012, 1.346555, 1.630578, 2.180541",\ + "1.536947, 1.731855, 1.908398, 2.192420, 2.742383",\ + "0.944232, 1.123764, 1.298692, 1.582179, 2.131082",\ + "0.994231, 1.173763, 1.348691, 1.632178, 2.181080",\ + "1.074451, 1.254037, 1.428978, 1.712507, 2.261501",\ + "1.295684, 1.475269, 1.650211, 1.933739, 2.482733",\ + "1.857528, 2.037112, 2.212053, 2.495582, 3.044575"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.027427, 0.027429, 0.027430, 0.027431, 0.027432",\ + "0.129493, 0.129493, 0.129493, 0.129493, 0.129493",\ + "0.314624, 0.314623, 0.314623, 0.314623, 0.314623",\ + "0.831917, 0.831917, 0.831917, 0.831917, 0.831918",\ + "2.131895, 2.131895, 2.131895, 2.131895, 2.131896",\ + "0.027427, 0.027429, 0.027430, 0.027431, 0.027432",\ + "0.129493, 0.129493, 0.129493, 0.129493, 0.129493",\ + "0.314624, 0.314623, 0.314623, 0.314623, 0.314623",\ + "0.831917, 0.831917, 0.831917, 0.831917, 0.831918",\ + "2.131895, 2.131895, 2.131895, 2.131895, 2.131896",\ + "0.027428, 0.027429, 0.027430, 0.027431, 0.027432",\ + "0.129493, 0.129493, 0.129493, 0.129493, 0.129493",\ + "0.314624, 0.314623, 0.314623, 0.314623, 0.314623",\ + "0.831917, 0.831917, 0.831917, 0.831917, 0.831918",\ + "2.131895, 2.131895, 2.131895, 2.131895, 2.131896",\ + "0.027428, 0.027429, 0.027430, 0.027431, 0.027432",\ + "0.129493, 0.129493, 0.129493, 0.129493, 0.129493",\ + "0.314624, 0.314623, 0.314623, 0.314623, 0.314623",\ + "0.831917, 0.831917, 0.831917, 0.831917, 0.831918",\ + "2.131895, 2.131895, 2.131895, 2.131895, 2.131896",\ + "0.027428, 0.027429, 0.027430, 0.027431, 0.027432",\ + "0.129493, 0.129493, 0.129493, 0.129493, 0.129493",\ + "0.314624, 0.314623, 0.314623, 0.314623, 0.314623",\ + "0.831917, 0.831917, 0.831917, 0.831917, 0.831918",\ + "2.131895, 2.131895, 2.131895, 2.131895, 2.131896"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.376757, 0.586911, 0.763927, 1.048197, 1.598532",\ + "0.402506, 0.612665, 0.789682, 1.073953, 1.624290",\ + "0.457155, 0.667314, 0.844331, 1.128602, 1.678938",\ + "0.607028, 0.817188, 0.994204, 1.278475, 1.828812",\ + "0.963398, 1.173210, 1.350212, 1.634442, 2.184688",\ + "0.465033, 0.674229, 0.851208, 1.135502, 1.685885",\ + "0.490782, 0.699983, 0.876963, 1.161258, 1.711643",\ + "0.545431, 0.754632, 0.931612, 1.215907, 1.766292",\ + "0.695304, 0.904506, 1.081485, 1.365780, 1.916165",\ + "1.051675, 1.260528, 1.437493, 1.721747, 2.272042",\ + "0.554085, 0.754561, 0.931235, 1.215531, 1.765917",\ + "0.579834, 0.780316, 0.956990, 1.241287, 1.791675",\ + "0.634483, 0.834964, 1.011639, 1.295935, 1.846323",\ + "0.784356, 0.984838, 1.161512, 1.445809, 1.996197",\ + "1.140731, 1.340860, 1.517520, 1.801775, 2.352073",\ + "0.617480, 0.812384, 0.988926, 1.272948, 1.822908",\ + "0.643230, 0.838138, 1.014681, 1.298704, 1.848666",\ + "0.697878, 0.892787, 1.069330, 1.353353, 1.903315",\ + "0.847752, 1.042660, 1.219203, 1.503226, 2.053188",\ + "1.204130, 1.398682, 1.575211, 1.859193, 2.409064",\ + "0.938061, 1.117640, 1.292582, 1.576109, 2.125101",\ + "0.963811, 1.143395, 1.318336, 1.601865, 2.150858",\ + "1.018459, 1.198044, 1.372985, 1.656513, 2.205507",\ + "1.168333, 1.347917, 1.522858, 1.806387, 2.355381",\ + "1.524406, 1.703938, 1.878866, 2.162354, 2.711256"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.015179, 0.015189, 0.015191, 0.015192, 0.015197",\ + "0.067695, 0.067696, 0.067696, 0.067696, 0.067697",\ + "0.170295, 0.170295, 0.170295, 0.170295, 0.170295",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122218, 1.122218, 1.122218, 1.122218, 1.122218",\ + "0.015179, 0.015189, 0.015191, 0.015192, 0.015197",\ + "0.067695, 0.067696, 0.067696, 0.067696, 0.067697",\ + "0.170295, 0.170295, 0.170295, 0.170295, 0.170295",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122218, 1.122218, 1.122218, 1.122218, 1.122218",\ + "0.015180, 0.015189, 0.015191, 0.015192, 0.015197",\ + "0.067695, 0.067696, 0.067696, 0.067696, 0.067697",\ + "0.170295, 0.170295, 0.170295, 0.170295, 0.170295",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122218, 1.122218, 1.122218, 1.122218, 1.122218",\ + "0.015181, 0.015190, 0.015191, 0.015192, 0.015197",\ + "0.067695, 0.067696, 0.067696, 0.067696, 0.067697",\ + "0.170295, 0.170295, 0.170295, 0.170295, 0.170295",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122218, 1.122218, 1.122218, 1.122218, 1.122218",\ + "0.015181, 0.015190, 0.015191, 0.015192, 0.015197",\ + "0.067695, 0.067696, 0.067696, 0.067696, 0.067697",\ + "0.170295, 0.170295, 0.170295, 0.170295, 0.170295",\ + "0.440750, 0.440750, 0.440750, 0.440750, 0.440750",\ + "1.122218, 1.122218, 1.122218, 1.122218, 1.122218"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[3]_redg_min_2303*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[43]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.405550, 0.622555, 0.800684, 1.089918, 1.651394",\ + "0.445619, 0.662624, 0.840753, 1.129987, 1.691463",\ + "0.521505, 0.738510, 0.916639, 1.205873, 1.767349",\ + "0.741141, 0.958147, 1.136276, 1.425510, 1.986986",\ + "1.293756, 1.510761, 1.688890, 1.978124, 2.539600",\ + "0.493926, 0.709873, 0.887965, 1.177224, 1.738747",\ + "0.533995, 0.749942, 0.928034, 1.217292, 1.778816",\ + "0.609881, 0.825828, 1.003920, 1.293178, 1.854702",\ + "0.829518, 1.045465, 1.223557, 1.512815, 2.074339",\ + "1.382132, 1.598079, 1.776171, 2.065429, 2.626953",\ + "0.583177, 0.790206, 0.967992, 1.257252, 1.818779",\ + "0.623246, 0.830275, 1.008061, 1.297321, 1.858848",\ + "0.699132, 0.906161, 1.083947, 1.373207, 1.934734",\ + "0.918768, 1.125798, 1.303584, 1.592844, 2.154371",\ + "1.471382, 1.678412, 1.856198, 2.145458, 2.706985",\ + "0.646716, 0.848023, 1.025686, 1.314683, 1.875797",\ + "0.686785, 0.888092, 1.065755, 1.354752, 1.915866",\ + "0.762671, 0.963978, 1.141641, 1.430638, 1.991752",\ + "0.982307, 1.183615, 1.361278, 1.650275, 2.211389",\ + "1.534921, 1.736229, 1.913892, 2.202889, 2.764003",\ + "0.974642, 1.153245, 1.329341, 1.617855, 2.178021",\ + "1.014711, 1.193314, 1.369410, 1.657924, 2.218090",\ + "1.090597, 1.269200, 1.445296, 1.733810, 2.293976",\ + "1.310234, 1.488837, 1.664933, 1.953447, 2.513613",\ + "1.862848, 2.041451, 2.217547, 2.506061, 3.066227"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.048600, 0.048600, 0.048600, 0.048600, 0.048600",\ + "0.136047, 0.136047, 0.136047, 0.136047, 0.136047",\ + "0.314137, 0.314137, 0.314137, 0.314137, 0.314137",\ + "0.833559, 0.833559, 0.833559, 0.833559, 0.833558",\ + "2.135322, 2.135322, 2.135323, 2.135323, 2.135323",\ + "0.048600, 0.048600, 0.048600, 0.048600, 0.048600",\ + "0.136047, 0.136047, 0.136047, 0.136047, 0.136047",\ + "0.314137, 0.314137, 0.314137, 0.314137, 0.314137",\ + "0.833559, 0.833559, 0.833559, 0.833559, 0.833558",\ + "2.135322, 2.135322, 2.135323, 2.135323, 2.135323",\ + "0.048600, 0.048600, 0.048600, 0.048600, 0.048600",\ + "0.136047, 0.136047, 0.136047, 0.136047, 0.136047",\ + "0.314137, 0.314137, 0.314137, 0.314137, 0.314137",\ + "0.833559, 0.833559, 0.833559, 0.833559, 0.833558",\ + "2.135322, 2.135322, 2.135323, 2.135323, 2.135323",\ + "0.048600, 0.048600, 0.048600, 0.048600, 0.048600",\ + "0.136047, 0.136047, 0.136047, 0.136047, 0.136047",\ + "0.314137, 0.314137, 0.314137, 0.314137, 0.314137",\ + "0.833559, 0.833559, 0.833559, 0.833559, 0.833558",\ + "2.135322, 2.135322, 2.135323, 2.135323, 2.135323",\ + "0.048600, 0.048600, 0.048600, 0.048600, 0.048600",\ + "0.136047, 0.136047, 0.136047, 0.136047, 0.136047",\ + "0.314137, 0.314137, 0.314137, 0.314137, 0.314137",\ + "0.833559, 0.833559, 0.833559, 0.833559, 0.833558",\ + "2.135322, 2.135322, 2.135323, 2.135323, 2.135323"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.379810, 0.596815, 0.774944, 1.064179, 1.625654",\ + "0.409456, 0.626461, 0.804590, 1.093824, 1.655300",\ + "0.461390, 0.678396, 0.856524, 1.145759, 1.707235",\ + "0.609845, 0.826850, 1.004979, 1.294214, 1.855689",\ + "0.982246, 1.199251, 1.377380, 1.666614, 2.228090",\ + "0.468186, 0.684134, 0.862225, 1.151484, 1.713008",\ + "0.497832, 0.713779, 0.891871, 1.181129, 1.742653",\ + "0.549766, 0.765714, 0.943805, 1.233064, 1.794588",\ + "0.698221, 0.914169, 1.092260, 1.381519, 1.943043",\ + "1.070622, 1.286569, 1.464661, 1.753919, 2.315443",\ + "0.557437, 0.764467, 0.942252, 1.231513, 1.793039",\ + "0.587083, 0.794112, 0.971898, 1.261158, 1.822685",\ + "0.639017, 0.846047, 1.023832, 1.313093, 1.874619",\ + "0.787472, 0.994502, 1.172287, 1.461547, 2.023074",\ + "1.159873, 1.366902, 1.544688, 1.833948, 2.395475",\ + "0.620976, 0.822284, 0.999946, 1.288943, 1.850057",\ + "0.650622, 0.851929, 1.029592, 1.318589, 1.879703",\ + "0.702556, 0.903864, 1.081526, 1.370523, 1.931637",\ + "0.851011, 1.052318, 1.229981, 1.518978, 2.080092",\ + "1.223412, 1.424719, 1.602382, 1.891379, 2.452493",\ + "0.948902, 1.127506, 1.303602, 1.592116, 2.152281",\ + "0.978548, 1.157151, 1.333247, 1.621761, 2.181927",\ + "1.030483, 1.209086, 1.385182, 1.673696, 2.233861",\ + "1.178937, 1.357541, 1.533637, 1.822151, 2.382316",\ + "1.551338, 1.729941, 1.906037, 2.194551, 2.754717"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002272, 0.075270, 0.162206, 0.322141, 0.642011"); + values ( "0.026625, 0.026625, 0.026625, 0.026625, 0.026625",\ + "0.075785, 0.075785, 0.075785, 0.075785, 0.075785",\ + "0.169304, 0.169304, 0.169304, 0.169304, 0.169303",\ + "0.439544, 0.439544, 0.439544, 0.439546, 0.439549",\ + "1.119108, 1.119108, 1.119109, 1.119113, 1.119123",\ + "0.026625, 0.026625, 0.026625, 0.026625, 0.026625",\ + "0.075785, 0.075785, 0.075785, 0.075785, 0.075785",\ + "0.169304, 0.169304, 0.169304, 0.169304, 0.169303",\ + "0.439544, 0.439544, 0.439544, 0.439546, 0.439549",\ + "1.119108, 1.119108, 1.119109, 1.119113, 1.119123",\ + "0.026625, 0.026625, 0.026625, 0.026625, 0.026625",\ + "0.075785, 0.075785, 0.075785, 0.075785, 0.075785",\ + "0.169304, 0.169304, 0.169304, 0.169304, 0.169303",\ + "0.439544, 0.439544, 0.439544, 0.439546, 0.439549",\ + "1.119108, 1.119108, 1.119109, 1.119113, 1.119123",\ + "0.026625, 0.026625, 0.026625, 0.026625, 0.026625",\ + "0.075785, 0.075785, 0.075785, 0.075785, 0.075785",\ + "0.169304, 0.169304, 0.169304, 0.169304, 0.169303",\ + "0.439544, 0.439544, 0.439544, 0.439546, 0.439549",\ + "1.119108, 1.119108, 1.119109, 1.119113, 1.119123",\ + "0.026625, 0.026625, 0.026625, 0.026625, 0.026625",\ + "0.075785, 0.075785, 0.075785, 0.075785, 0.075785",\ + "0.169304, 0.169304, 0.169304, 0.169304, 0.169303",\ + "0.439544, 0.439544, 0.439544, 0.439546, 0.439549",\ + "1.119108, 1.119108, 1.119109, 1.119113, 1.119123"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[3]_redg_min_2271*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[44]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.386364, 0.626816, 0.817125, 1.119925, 1.704580",\ + "0.426433, 0.666885, 0.857194, 1.159994, 1.744649",\ + "0.502319, 0.742771, 0.933080, 1.235880, 1.820535",\ + "0.721956, 0.962408, 1.152717, 1.455517, 2.040172",\ + "1.274570, 1.515022, 1.705331, 2.008131, 2.592786",\ + "0.474664, 0.714134, 0.904406, 1.207230, 1.791934",\ + "0.514733, 0.754203, 0.944475, 1.247299, 1.832002",\ + "0.590619, 0.830089, 1.020361, 1.323185, 1.907888",\ + "0.810256, 1.049726, 1.239998, 1.542822, 2.127525",\ + "1.362870, 1.602340, 1.792612, 2.095436, 2.680139",\ + "0.563948, 0.794465, 0.984433, 1.287259, 1.871965",\ + "0.604017, 0.834534, 1.024502, 1.327327, 1.912034",\ + "0.679903, 0.910420, 1.100388, 1.403213, 1.987920",\ + "0.899539, 1.130056, 1.320024, 1.622850, 2.207557",\ + "1.452153, 1.682670, 1.872638, 2.175464, 2.760171",\ + "0.627629, 0.852329, 1.042155, 1.344718, 1.929040",\ + "0.667698, 0.892398, 1.082224, 1.384787, 1.969109",\ + "0.743584, 0.968284, 1.158110, 1.460673, 2.044995",\ + "0.963221, 1.187921, 1.377747, 1.680310, 2.264632",\ + "1.515835, 1.740535, 1.930361, 2.232924, 2.817246",\ + "0.964253, 1.157875, 1.345814, 1.647914, 2.231333",\ + "1.004322, 1.197944, 1.385883, 1.687983, 2.271402",\ + "1.080208, 1.273830, 1.461769, 1.763869, 2.347288",\ + "1.299845, 1.493467, 1.681406, 1.983506, 2.566925",\ + "1.852459, 2.046081, 2.234020, 2.536120, 3.119539"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.048600, 0.048600, 0.048600, 0.048600, 0.048600",\ + "0.136047, 0.136047, 0.136047, 0.136047, 0.136047",\ + "0.314137, 0.314137, 0.314137, 0.314137, 0.314137",\ + "0.833559, 0.833559, 0.833559, 0.833558, 0.833558",\ + "2.135322, 2.135323, 2.135323, 2.135323, 2.135323",\ + "0.048600, 0.048600, 0.048600, 0.048600, 0.048600",\ + "0.136047, 0.136047, 0.136047, 0.136047, 0.136047",\ + "0.314137, 0.314137, 0.314137, 0.314137, 0.314137",\ + "0.833559, 0.833559, 0.833559, 0.833558, 0.833558",\ + "2.135322, 2.135323, 2.135323, 2.135323, 2.135323",\ + "0.048600, 0.048600, 0.048600, 0.048600, 0.048600",\ + "0.136047, 0.136047, 0.136047, 0.136047, 0.136047",\ + "0.314137, 0.314137, 0.314137, 0.314137, 0.314137",\ + "0.833559, 0.833559, 0.833559, 0.833558, 0.833558",\ + "2.135322, 2.135323, 2.135323, 2.135323, 2.135323",\ + "0.048600, 0.048600, 0.048600, 0.048600, 0.048600",\ + "0.136047, 0.136047, 0.136047, 0.136047, 0.136047",\ + "0.314137, 0.314137, 0.314137, 0.314137, 0.314137",\ + "0.833559, 0.833559, 0.833559, 0.833558, 0.833558",\ + "2.135322, 2.135323, 2.135323, 2.135323, 2.135323",\ + "0.048600, 0.048600, 0.048600, 0.048600, 0.048600",\ + "0.136047, 0.136047, 0.136047, 0.136047, 0.136047",\ + "0.314137, 0.314137, 0.314137, 0.314137, 0.314137",\ + "0.833559, 0.833559, 0.833559, 0.833558, 0.833558",\ + "2.135323, 2.135323, 2.135323, 2.135323, 2.135323"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.360625, 0.601076, 0.791385, 1.094185, 1.678841",\ + "0.390270, 0.630722, 0.821031, 1.123831, 1.708486",\ + "0.442205, 0.682656, 0.872965, 1.175765, 1.760421",\ + "0.590660, 0.831111, 1.021420, 1.324220, 1.908875",\ + "0.963060, 1.203512, 1.393821, 1.696621, 2.281276",\ + "0.448924, 0.688394, 0.878666, 1.181490, 1.766194",\ + "0.478570, 0.718040, 0.908312, 1.211136, 1.795840",\ + "0.530504, 0.769974, 0.960246, 1.263070, 1.847774",\ + "0.678959, 0.918429, 1.108701, 1.411525, 1.996229",\ + "1.051360, 1.290830, 1.481102, 1.783926, 2.368629",\ + "0.538208, 0.768725, 0.958693, 1.261519, 1.846226",\ + "0.567854, 0.798371, 0.988339, 1.291164, 1.875871",\ + "0.619788, 0.850305, 1.040273, 1.343099, 1.927806",\ + "0.768243, 0.998760, 1.188728, 1.491554, 2.076260",\ + "1.140644, 1.371161, 1.561129, 1.863954, 2.448661",\ + "0.601890, 0.826589, 1.016415, 1.318978, 1.903300",\ + "0.631535, 0.856235, 1.046061, 1.348624, 1.932946",\ + "0.683470, 0.908169, 1.097996, 1.400558, 1.984880",\ + "0.831925, 1.056624, 1.246450, 1.549013, 2.133335",\ + "1.204325, 1.429025, 1.618851, 1.921414, 2.505736",\ + "0.938514, 1.132136, 1.320075, 1.622174, 2.205594",\ + "0.968159, 1.161781, 1.349720, 1.651820, 2.235239",\ + "1.020094, 1.213716, 1.401655, 1.703755, 2.287174",\ + "1.168548, 1.362170, 1.550110, 1.852209, 2.435628",\ + "1.540949, 1.734571, 1.922510, 2.224610, 2.808029"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002742, 0.075741, 0.162559, 0.322376, 0.642011"); + values ( "0.026625, 0.026625, 0.026625, 0.026625, 0.026624",\ + "0.075785, 0.075785, 0.075785, 0.075785, 0.075785",\ + "0.169304, 0.169304, 0.169304, 0.169304, 0.169303",\ + "0.439544, 0.439546, 0.439547, 0.439548, 0.439550",\ + "1.119107, 1.119112, 1.119115, 1.119119, 1.119125",\ + "0.026625, 0.026625, 0.026625, 0.026625, 0.026624",\ + "0.075785, 0.075785, 0.075785, 0.075785, 0.075785",\ + "0.169304, 0.169304, 0.169304, 0.169304, 0.169303",\ + "0.439544, 0.439546, 0.439547, 0.439548, 0.439550",\ + "1.119107, 1.119112, 1.119115, 1.119119, 1.119125",\ + "0.026625, 0.026625, 0.026625, 0.026625, 0.026624",\ + "0.075785, 0.075785, 0.075785, 0.075785, 0.075785",\ + "0.169304, 0.169304, 0.169304, 0.169304, 0.169303",\ + "0.439544, 0.439546, 0.439547, 0.439548, 0.439550",\ + "1.119108, 1.119112, 1.119115, 1.119119, 1.119125",\ + "0.026625, 0.026625, 0.026625, 0.026625, 0.026624",\ + "0.075785, 0.075785, 0.075785, 0.075785, 0.075785",\ + "0.169304, 0.169304, 0.169304, 0.169304, 0.169303",\ + "0.439544, 0.439546, 0.439547, 0.439548, 0.439550",\ + "1.119108, 1.119112, 1.119115, 1.119119, 1.119125",\ + "0.026625, 0.026625, 0.026625, 0.026625, 0.026624",\ + "0.075785, 0.075785, 0.075785, 0.075785, 0.075785",\ + "0.169304, 0.169304, 0.169304, 0.169304, 0.169303",\ + "0.439545, 0.439546, 0.439547, 0.439548, 0.439550",\ + "1.119111, 1.119112, 1.119115, 1.119119, 1.119125"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[3]_redg_min_2441*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[46]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.401355, 0.623039, 0.801084, 1.090019, 1.650864",\ + "0.444265, 0.665948, 0.843993, 1.132928, 1.693773",\ + "0.520764, 0.742448, 0.920493, 1.209427, 1.770273",\ + "0.744064, 0.965747, 1.143793, 1.432727, 1.993572",\ + "1.303239, 1.524854, 1.702965, 1.991765, 2.552283",\ + "0.489764, 0.710357, 0.888365, 1.177324, 1.738218",\ + "0.532673, 0.753266, 0.931274, 1.220233, 1.781127",\ + "0.609173, 0.829766, 1.007774, 1.296732, 1.857626",\ + "0.832472, 1.053066, 1.231073, 1.520032, 2.080926",\ + "1.391647, 1.612173, 1.790246, 2.079070, 2.639636",\ + "0.578854, 0.790693, 0.968392, 1.257352, 1.818249",\ + "0.621763, 0.833602, 1.011301, 1.300261, 1.861158",\ + "0.698263, 0.910101, 1.087801, 1.376761, 1.937658",\ + "0.921562, 1.133401, 1.311100, 1.600060, 2.160957",\ + "1.480738, 1.692508, 1.870273, 2.159099, 2.719668",\ + "0.642132, 0.848514, 1.026085, 1.314782, 1.875265",\ + "0.685041, 0.891423, 1.068994, 1.357691, 1.918174",\ + "0.761541, 0.967922, 1.145494, 1.434191, 1.994673",\ + "0.984840, 1.191222, 1.368793, 1.657490, 2.217973",\ + "1.544015, 1.750334, 1.927966, 2.216528, 2.776682",\ + "0.973287, 1.153774, 1.329742, 1.617954, 2.177485",\ + "1.016196, 1.196683, 1.372651, 1.660863, 2.220395",\ + "1.092696, 1.273183, 1.449150, 1.737363, 2.296894",\ + "1.315995, 1.496482, 1.672450, 1.960662, 2.520194",\ + "1.874038, 2.055627, 2.231622, 2.519700, 3.078903"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.048588, 0.048588, 0.048588, 0.048588, 0.048588",\ + "0.136076, 0.136076, 0.136076, 0.136076, 0.136076",\ + "0.314168, 0.314168, 0.314168, 0.314168, 0.314168",\ + "0.833612, 0.833612, 0.833612, 0.833612, 0.833613",\ + "2.135107, 2.135107, 2.135107, 2.135106, 2.135106",\ + "0.048588, 0.048588, 0.048588, 0.048588, 0.048588",\ + "0.136076, 0.136076, 0.136076, 0.136076, 0.136076",\ + "0.314168, 0.314168, 0.314168, 0.314168, 0.314168",\ + "0.833612, 0.833612, 0.833612, 0.833612, 0.833613",\ + "2.135107, 2.135107, 2.135107, 2.135106, 2.135106",\ + "0.048588, 0.048588, 0.048588, 0.048588, 0.048588",\ + "0.136076, 0.136076, 0.136076, 0.136076, 0.136076",\ + "0.314168, 0.314168, 0.314168, 0.314168, 0.314168",\ + "0.833612, 0.833612, 0.833612, 0.833612, 0.833613",\ + "2.135107, 2.135107, 2.135107, 2.135106, 2.135106",\ + "0.048588, 0.048588, 0.048588, 0.048588, 0.048588",\ + "0.136076, 0.136076, 0.136076, 0.136076, 0.136076",\ + "0.314168, 0.314168, 0.314168, 0.314168, 0.314168",\ + "0.833612, 0.833612, 0.833612, 0.833612, 0.833613",\ + "2.135107, 2.135107, 2.135107, 2.135106, 2.135106",\ + "0.048588, 0.048588, 0.048588, 0.048588, 0.048588",\ + "0.136076, 0.136076, 0.136076, 0.136076, 0.136076",\ + "0.314168, 0.314168, 0.314168, 0.314168, 0.314168",\ + "0.833612, 0.833612, 0.833612, 0.833612, 0.833613",\ + "2.135107, 2.135107, 2.135107, 2.135106, 2.135106"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.389319, 0.610934, 0.789045, 1.077845, 1.638363",\ + "0.418979, 0.640595, 0.818706, 1.107506, 1.668024",\ + "0.470920, 0.692535, 0.870646, 1.159446, 1.719964",\ + "0.619380, 0.840995, 1.019106, 1.307906, 1.868424",\ + "0.983284, 1.204968, 1.383013, 1.671947, 2.232793",\ + "0.477727, 0.698253, 0.876326, 1.165150, 1.725716",\ + "0.507388, 0.727914, 0.905987, 1.194811, 1.755377",\ + "0.559328, 0.779854, 0.957927, 1.246751, 1.807317",\ + "0.707788, 0.928314, 1.106387, 1.395211, 1.955777",\ + "1.071693, 1.292286, 1.470294, 1.759253, 2.320147",\ + "0.566817, 0.778588, 0.956353, 1.245178, 1.805748",\ + "0.596478, 0.808249, 0.986014, 1.274839, 1.835409",\ + "0.648419, 0.860189, 1.037954, 1.326780, 1.887349",\ + "0.796878, 1.008649, 1.186414, 1.475240, 2.035809",\ + "1.160783, 1.372622, 1.550321, 1.839281, 2.400178",\ + "0.630095, 0.836414, 1.014046, 1.302608, 1.862762",\ + "0.659756, 0.866074, 1.043707, 1.332269, 1.892423",\ + "0.711696, 0.918015, 1.095647, 1.384209, 1.944364",\ + "0.860156, 1.066475, 1.244107, 1.532669, 2.092824",\ + "1.224061, 1.430443, 1.608014, 1.896711, 2.457193",\ + "0.960117, 1.141707, 1.317702, 1.605780, 2.164983",\ + "0.989778, 1.171368, 1.347363, 1.635441, 2.194643",\ + "1.041718, 1.223308, 1.399303, 1.687381, 2.246584",\ + "1.190178, 1.371768, 1.547763, 1.835841, 2.395044",\ + "1.555216, 1.735703, 1.911671, 2.199883, 2.759414"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.026623, 0.026623, 0.026623, 0.026623, 0.026623",\ + "0.075784, 0.075784, 0.075784, 0.075784, 0.075784",\ + "0.169301, 0.169301, 0.169301, 0.169301, 0.169301",\ + "0.439562, 0.439562, 0.439562, 0.439562, 0.439561",\ + "1.119158, 1.119158, 1.119158, 1.119158, 1.119157",\ + "0.026623, 0.026623, 0.026623, 0.026623, 0.026623",\ + "0.075784, 0.075784, 0.075784, 0.075784, 0.075784",\ + "0.169301, 0.169301, 0.169301, 0.169301, 0.169301",\ + "0.439562, 0.439562, 0.439562, 0.439562, 0.439561",\ + "1.119158, 1.119158, 1.119158, 1.119158, 1.119157",\ + "0.026623, 0.026623, 0.026623, 0.026623, 0.026623",\ + "0.075784, 0.075784, 0.075784, 0.075784, 0.075784",\ + "0.169301, 0.169301, 0.169301, 0.169301, 0.169301",\ + "0.439562, 0.439562, 0.439562, 0.439562, 0.439561",\ + "1.119158, 1.119158, 1.119158, 1.119158, 1.119157",\ + "0.026623, 0.026623, 0.026623, 0.026623, 0.026623",\ + "0.075784, 0.075784, 0.075784, 0.075784, 0.075784",\ + "0.169301, 0.169301, 0.169301, 0.169301, 0.169301",\ + "0.439562, 0.439562, 0.439562, 0.439562, 0.439561",\ + "1.119158, 1.119158, 1.119158, 1.119158, 1.119157",\ + "0.026623, 0.026623, 0.026623, 0.026623, 0.026623",\ + "0.075784, 0.075784, 0.075784, 0.075784, 0.075784",\ + "0.169301, 0.169301, 0.169301, 0.169301, 0.169301",\ + "0.439562, 0.439562, 0.439562, 0.439562, 0.439561",\ + "1.119158, 1.119158, 1.119158, 1.119158, 1.119157"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[3]_redg_min_2497*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[47]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.380051, 0.607077, 0.791540, 1.086441, 1.656420",\ + "0.422960, 0.649986, 0.834449, 1.129350, 1.699329",\ + "0.499459, 0.726486, 0.910949, 1.205850, 1.775828",\ + "0.722759, 0.949785, 1.134248, 1.429149, 1.999128",\ + "1.281942, 1.507667, 1.692145, 1.987100, 2.557201",\ + "0.468382, 0.694395, 0.878821, 1.173746, 1.743773",\ + "0.511291, 0.737304, 0.921730, 1.216655, 1.786682",\ + "0.587791, 0.813804, 0.998230, 1.293155, 1.863182",\ + "0.811090, 1.037103, 1.221529, 1.516454, 2.086481",\ + "1.370273, 1.594985, 1.779426, 2.074405, 2.644555",\ + "0.557789, 0.774725, 0.958848, 1.253775, 1.823805",\ + "0.600698, 0.817634, 1.001757, 1.296684, 1.866714",\ + "0.677198, 0.894134, 1.078257, 1.373183, 1.943213",\ + "0.900497, 1.117434, 1.301556, 1.596483, 2.166513",\ + "1.459679, 1.675315, 1.859452, 2.154434, 2.724586",\ + "0.621599, 0.832548, 1.016557, 1.311216, 1.880844",\ + "0.664508, 0.875457, 1.059467, 1.354125, 1.923753",\ + "0.741007, 0.951957, 1.135966, 1.430625, 2.000253",\ + "0.964307, 1.175256, 1.359266, 1.653924, 2.223552",\ + "1.523487, 1.733139, 1.917162, 2.211875, 2.781626",\ + "0.958721, 1.137805, 1.320215, 1.614397, 2.183095",\ + "1.001630, 1.180714, 1.363124, 1.657306, 2.226004",\ + "1.078130, 1.257213, 1.439624, 1.733806, 2.302503",\ + "1.301429, 1.480513, 1.662923, 1.957105, 2.525803",\ + "1.859271, 2.038396, 2.220819, 2.515056, 3.083877"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.048588, 0.048588, 0.048588, 0.048588, 0.048588",\ + "0.136075, 0.136076, 0.136076, 0.136076, 0.136076",\ + "0.314168, 0.314168, 0.314168, 0.314168, 0.314168",\ + "0.833612, 0.833613, 0.833613, 0.833613, 0.833613",\ + "2.135108, 2.135106, 2.135105, 2.135105, 2.135105",\ + "0.048588, 0.048588, 0.048588, 0.048588, 0.048588",\ + "0.136075, 0.136076, 0.136076, 0.136076, 0.136076",\ + "0.314168, 0.314168, 0.314168, 0.314168, 0.314168",\ + "0.833612, 0.833613, 0.833613, 0.833613, 0.833613",\ + "2.135108, 2.135106, 2.135105, 2.135105, 2.135105",\ + "0.048588, 0.048588, 0.048588, 0.048588, 0.048588",\ + "0.136076, 0.136076, 0.136076, 0.136076, 0.136076",\ + "0.314168, 0.314168, 0.314168, 0.314168, 0.314168",\ + "0.833612, 0.833613, 0.833613, 0.833613, 0.833613",\ + "2.135108, 2.135106, 2.135105, 2.135105, 2.135105",\ + "0.048588, 0.048588, 0.048588, 0.048588, 0.048588",\ + "0.136076, 0.136076, 0.136076, 0.136076, 0.136076",\ + "0.314168, 0.314168, 0.314168, 0.314168, 0.314168",\ + "0.833612, 0.833613, 0.833613, 0.833613, 0.833613",\ + "2.135108, 2.135106, 2.135105, 2.135105, 2.135105",\ + "0.048588, 0.048588, 0.048588, 0.048588, 0.048588",\ + "0.136076, 0.136076, 0.136076, 0.136076, 0.136076",\ + "0.314168, 0.314168, 0.314168, 0.314168, 0.314168",\ + "0.833612, 0.833613, 0.833613, 0.833613, 0.833613",\ + "2.135108, 2.135106, 2.135105, 2.135105, 2.135105"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.368022, 0.593747, 0.778225, 1.073180, 1.643281",\ + "0.397682, 0.623408, 0.807886, 1.102841, 1.672942",\ + "0.449623, 0.675348, 0.859826, 1.154781, 1.724883",\ + "0.598083, 0.823808, 1.008286, 1.303241, 1.873343",\ + "0.961980, 1.189006, 1.373469, 1.668370, 2.238349",\ + "0.456353, 0.681065, 0.865506, 1.160485, 1.730635",\ + "0.486014, 0.710726, 0.895167, 1.190146, 1.760296",\ + "0.537954, 0.762666, 0.947107, 1.242086, 1.812236",\ + "0.686414, 0.911126, 1.095567, 1.390546, 1.960696",\ + "1.050311, 1.276324, 1.460750, 1.755675, 2.325702",\ + "0.545759, 0.761395, 0.945533, 1.240514, 1.810667",\ + "0.575419, 0.791056, 0.975194, 1.270175, 1.840328",\ + "0.627360, 0.842997, 1.027134, 1.322115, 1.892268",\ + "0.775819, 0.991457, 1.175594, 1.470575, 2.040728",\ + "1.139718, 1.356654, 1.540777, 1.835704, 2.405734",\ + "0.609567, 0.819218, 1.003242, 1.297955, 1.867706",\ + "0.639228, 0.848879, 1.032903, 1.327616, 1.897367",\ + "0.691168, 0.900820, 1.084843, 1.379556, 1.949308",\ + "0.839628, 1.049280, 1.233303, 1.528016, 2.097767",\ + "1.203528, 1.414477, 1.598486, 1.893145, 2.462773",\ + "0.945351, 1.124476, 1.306899, 1.601136, 2.169957",\ + "0.975012, 1.154137, 1.336560, 1.630797, 2.199618",\ + "1.026952, 1.206077, 1.388500, 1.682738, 2.251558",\ + "1.175412, 1.354537, 1.536960, 1.831198, 2.400018",\ + "1.540650, 1.719733, 1.902144, 2.196326, 2.765023"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001581, 0.004543, 0.013052, 0.034401"); + index_3 ( "0.002792, 0.075790, 0.162597, 0.322401, 0.642011"); + values ( "0.026623, 0.026623, 0.026623, 0.026623, 0.026623",\ + "0.075784, 0.075784, 0.075784, 0.075784, 0.075784",\ + "0.169301, 0.169301, 0.169301, 0.169301, 0.169301",\ + "0.439562, 0.439562, 0.439561, 0.439561, 0.439561",\ + "1.119159, 1.119158, 1.119157, 1.119157, 1.119157",\ + "0.026623, 0.026623, 0.026623, 0.026623, 0.026623",\ + "0.075784, 0.075784, 0.075784, 0.075784, 0.075784",\ + "0.169301, 0.169301, 0.169301, 0.169301, 0.169301",\ + "0.439562, 0.439562, 0.439561, 0.439561, 0.439561",\ + "1.119159, 1.119158, 1.119157, 1.119157, 1.119157",\ + "0.026623, 0.026623, 0.026623, 0.026623, 0.026623",\ + "0.075784, 0.075784, 0.075784, 0.075784, 0.075784",\ + "0.169301, 0.169301, 0.169301, 0.169301, 0.169301",\ + "0.439562, 0.439562, 0.439561, 0.439561, 0.439561",\ + "1.119159, 1.119158, 1.119157, 1.119157, 1.119157",\ + "0.026623, 0.026623, 0.026623, 0.026623, 0.026623",\ + "0.075784, 0.075784, 0.075784, 0.075784, 0.075784",\ + "0.169301, 0.169301, 0.169301, 0.169301, 0.169301",\ + "0.439562, 0.439562, 0.439561, 0.439561, 0.439561",\ + "1.119159, 1.119158, 1.119157, 1.119157, 1.119157",\ + "0.026623, 0.026623, 0.026623, 0.026623, 0.026623",\ + "0.075784, 0.075784, 0.075784, 0.075784, 0.075784",\ + "0.169301, 0.169301, 0.169301, 0.169301, 0.169301",\ + "0.439562, 0.439562, 0.439561, 0.439561, 0.439561",\ + "1.119159, 1.119157, 1.119157, 1.119157, 1.119157"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[3]_redg_min_2420*/ + +} /* end of pin tl_o[3] */ + +pin("tl_o[2]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.020161 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : tl_o[2]; + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[16]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.596162, 0.867359, 1.159405, 1.656731, 2.651384",\ + "0.643260, 0.914475, 1.206618, 1.704208, 2.699388",\ + "0.730525, 1.001791, 1.294214, 1.792557, 2.789245",\ + "0.956361, 1.227706, 1.520560, 2.020066, 3.019080",\ + "1.523589, 1.795036, 2.088453, 2.589476, 3.591523",\ + "0.683575, 0.954952, 1.247062, 1.743446, 2.737318",\ + "0.730672, 1.002068, 1.294276, 1.790923, 2.785322",\ + "0.817938, 1.089384, 1.381874, 1.879272, 2.875178",\ + "1.043774, 1.315300, 1.608224, 2.106781, 3.105014",\ + "1.611001, 1.882631, 2.176121, 2.676191, 3.677457",\ + "0.766406, 1.044042, 1.335028, 1.831069, 2.824273",\ + "0.813504, 1.091158, 1.382242, 1.878545, 2.872277",\ + "0.900771, 1.178475, 1.469840, 1.966895, 2.962133",\ + "1.126608, 1.404392, 1.696190, 2.194404, 3.191969",\ + "1.693838, 1.971725, 2.264088, 2.763813, 3.764412",\ + "0.829815, 1.109836, 1.399173, 1.894982, 2.887782",\ + "0.876913, 1.156952, 1.446387, 1.942459, 2.935786",\ + "0.964180, 1.244271, 1.533985, 2.030808, 3.025642",\ + "1.190018, 1.470190, 1.760335, 2.258317, 3.255478",\ + "1.757249, 2.037525, 2.328233, 2.827727, 3.827921",\ + "1.164720, 1.476052, 1.751329, 2.244448, 3.233238",\ + "1.211820, 1.523174, 1.798545, 2.291926, 3.281242",\ + "1.299091, 1.610508, 1.886151, 2.380279, 3.371099",\ + "1.524935, 1.836451, 2.112513, 2.607793, 3.600934",\ + "2.092175, 2.403818, 2.680427, 3.177208, 4.173377"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.053862, 0.053914, 0.054909, 0.058152, 0.064638",\ + "0.173267, 0.173231, 0.173035, 0.172508, 0.171453",\ + "0.375460, 0.375376, 0.374957, 0.373858, 0.371660",\ + "0.885481, 0.885445, 0.885292, 0.884908, 0.884140",\ + "2.163051, 2.163105, 2.163316, 2.163829, 2.164857",\ + "0.053862, 0.053914, 0.054919, 0.058152, 0.064638",\ + "0.173267, 0.173231, 0.173034, 0.172508, 0.171453",\ + "0.375460, 0.375376, 0.374953, 0.373858, 0.371660",\ + "0.885481, 0.885444, 0.885291, 0.884908, 0.884140",\ + "2.163051, 2.163105, 2.163317, 2.163829, 2.164857",\ + "0.053863, 0.053915, 0.054919, 0.058152, 0.064638",\ + "0.173266, 0.173230, 0.173034, 0.172508, 0.171453",\ + "0.375459, 0.375374, 0.374953, 0.373858, 0.371660",\ + "0.885480, 0.885444, 0.885290, 0.884908, 0.884140",\ + "2.163052, 2.163106, 2.163317, 2.163829, 2.164857",\ + "0.053864, 0.053916, 0.054920, 0.058152, 0.064638",\ + "0.173266, 0.173229, 0.173034, 0.172508, 0.171453",\ + "0.375457, 0.375372, 0.374953, 0.373858, 0.371660",\ + "0.885480, 0.885443, 0.885290, 0.884908, 0.884140",\ + "2.163053, 2.163108, 2.163317, 2.163829, 2.164857",\ + "0.053868, 0.053932, 0.054952, 0.058165, 0.064638",\ + "0.173263, 0.173218, 0.173028, 0.172506, 0.171453",\ + "0.375451, 0.375346, 0.374942, 0.373853, 0.371660",\ + "0.885476, 0.885432, 0.885287, 0.884906, 0.884140",\ + "2.163059, 2.163123, 2.163322, 2.163831, 2.164857"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.526597, 0.797546, 1.089766, 1.588771, 2.586781",\ + "0.587519, 0.858706, 1.150697, 1.647877, 2.642235",\ + "0.654254, 0.925628, 1.218645, 1.718590, 2.718481",\ + "0.788462, 1.059820, 1.352751, 1.852464, 2.851889",\ + "1.131923, 1.403187, 1.695595, 2.193900, 3.190510",\ + "0.614010, 0.885137, 1.177429, 1.675486, 2.672715",\ + "0.674932, 0.946299, 1.238354, 1.734592, 2.728169",\ + "0.741667, 1.013223, 1.306311, 1.805305, 2.804415",\ + "0.875874, 1.147414, 1.440416, 1.939178, 2.937823",\ + "1.219336, 1.490780, 1.783256, 2.280615, 3.276443",\ + "0.696837, 0.974222, 1.265395, 1.763108, 2.759670",\ + "0.757763, 1.035389, 1.326320, 1.822214, 2.815124",\ + "0.824502, 1.102316, 1.394277, 1.892928, 2.891370",\ + "0.958709, 1.236507, 1.528382, 2.026801, 3.024778",\ + "1.302169, 1.579871, 1.871222, 2.368237, 3.363399",\ + "0.760242, 1.040009, 1.329540, 1.827022, 2.823179",\ + "0.821171, 1.101182, 1.390465, 1.886127, 2.878633",\ + "0.887912, 1.168114, 1.458422, 1.956841, 2.954879",\ + "1.022119, 1.302305, 1.592527, 2.090714, 3.088287",\ + "1.365578, 1.645666, 1.935366, 2.432151, 3.426908",\ + "1.095129, 1.406150, 1.681713, 2.176495, 3.168635",\ + "1.156076, 1.467395, 1.742619, 2.235593, 3.224089",\ + "1.222832, 1.534384, 1.810604, 2.306318, 3.300335",\ + "1.357038, 1.668570, 1.944707, 2.440191, 3.433743",\ + "1.700489, 2.011903, 2.287532, 2.781621, 3.772364"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.071571, 0.071932, 0.073911, 0.079246, 0.089916",\ + "0.129642, 0.130131, 0.132813, 0.140046, 0.154511",\ + "0.213984, 0.214431, 0.216880, 0.223483, 0.236689",\ + "0.447086, 0.447136, 0.447410, 0.448149, 0.449626",\ + "1.100696, 1.100673, 1.100546, 1.100205, 1.099521",\ + "0.071571, 0.071935, 0.073927, 0.079246, 0.089916",\ + "0.129642, 0.130135, 0.132836, 0.140046, 0.154511",\ + "0.213984, 0.214435, 0.216901, 0.223483, 0.236689",\ + "0.447086, 0.447137, 0.447412, 0.448149, 0.449626",\ + "1.100696, 1.100673, 1.100545, 1.100205, 1.099521",\ + "0.071578, 0.071942, 0.073928, 0.079246, 0.089916",\ + "0.129651, 0.130144, 0.132837, 0.140046, 0.154511",\ + "0.213993, 0.214443, 0.216901, 0.223483, 0.236689",\ + "0.447087, 0.447137, 0.447412, 0.448149, 0.449626",\ + "1.100696, 1.100673, 1.100545, 1.100205, 1.099521",\ + "0.071582, 0.071951, 0.073929, 0.079246, 0.089916",\ + "0.129657, 0.130157, 0.132838, 0.140046, 0.154511",\ + "0.213998, 0.214454, 0.216902, 0.223483, 0.236689",\ + "0.447088, 0.447139, 0.447413, 0.448149, 0.449626",\ + "1.100696, 1.100672, 1.100545, 1.100205, 1.099521",\ + "0.071611, 0.072061, 0.073983, 0.079268, 0.089916",\ + "0.129696, 0.130306, 0.132911, 0.140076, 0.154511",\ + "0.214033, 0.214590, 0.216969, 0.223510, 0.236689",\ + "0.447092, 0.447154, 0.447420, 0.448152, 0.449626",\ + "1.100694, 1.100665, 1.100542, 1.100203, 1.099521"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[2]_redg_2642*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[18]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.620483, 0.875327, 1.158797, 1.657448, 2.654750",\ + "0.666691, 0.921535, 1.205006, 1.703663, 2.700977",\ + "0.750941, 1.005785, 1.289255, 1.787906, 2.785209",\ + "0.971936, 1.226783, 1.510836, 2.011498, 3.012820",\ + "1.532384, 1.787236, 2.072631, 2.577909, 3.588464",\ + "0.707891, 0.962871, 1.246456, 1.744162, 2.740684",\ + "0.754100, 1.009078, 1.292665, 1.790377, 2.786911",\ + "0.838350, 1.093329, 1.376915, 1.874621, 2.871142",\ + "1.059345, 1.314327, 1.598502, 2.098212, 3.098754",\ + "1.619793, 1.874780, 2.160311, 2.664623, 3.674398",\ + "0.788766, 1.051830, 1.334422, 1.831784, 2.827639",\ + "0.834975, 1.098037, 1.380631, 1.877999, 2.873866",\ + "0.919225, 1.182288, 1.464880, 1.962242, 2.958097",\ + "1.140220, 1.403286, 1.686468, 2.185834, 3.185709",\ + "1.700668, 1.963739, 2.248277, 2.752245, 3.761353",\ + "0.848948, 1.117433, 1.398566, 1.895697, 2.891148",\ + "0.895156, 1.163640, 1.444775, 1.941912, 2.937375",\ + "0.979406, 1.247891, 1.529024, 2.026155, 3.021606",\ + "1.200402, 1.468889, 1.750613, 2.249747, 3.249218",\ + "1.760850, 2.029342, 2.312423, 2.816158, 3.824862",\ + "1.183848, 1.481469, 1.750734, 2.245165, 3.236604",\ + "1.230056, 1.527677, 1.796943, 2.291380, 3.282831",\ + "1.314306, 1.611928, 1.881192, 2.375623, 3.367063",\ + "1.535303, 1.832926, 2.102801, 2.599223, 3.594674",\ + "2.095753, 2.393380, 2.664657, 3.165653, 4.170318"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.052746, 0.052746, 0.052770, 0.052852, 0.053015",\ + "0.178338, 0.178338, 0.178378, 0.178516, 0.178792",\ + "0.381631, 0.381631, 0.381650, 0.381714, 0.381841",\ + "0.885930, 0.885935, 0.885937, 0.885937, 0.885937",\ + "2.162390, 2.162390, 2.162427, 2.162551, 2.162801",\ + "0.052746, 0.052746, 0.052770, 0.052852, 0.053015",\ + "0.178338, 0.178338, 0.178378, 0.178516, 0.178792",\ + "0.381631, 0.381631, 0.381650, 0.381714, 0.381841",\ + "0.885930, 0.885935, 0.885937, 0.885937, 0.885937",\ + "2.162390, 2.162390, 2.162427, 2.162551, 2.162801",\ + "0.052746, 0.052746, 0.052770, 0.052852, 0.053015",\ + "0.178338, 0.178338, 0.178378, 0.178516, 0.178792",\ + "0.381631, 0.381631, 0.381650, 0.381714, 0.381841",\ + "0.885930, 0.885935, 0.885937, 0.885937, 0.885937",\ + "2.162390, 2.162390, 2.162427, 2.162551, 2.162801",\ + "0.052746, 0.052746, 0.052770, 0.052852, 0.053015",\ + "0.178338, 0.178338, 0.178378, 0.178516, 0.178792",\ + "0.381631, 0.381631, 0.381650, 0.381714, 0.381841",\ + "0.885931, 0.885935, 0.885937, 0.885937, 0.885937",\ + "2.162390, 2.162390, 2.162427, 2.162551, 2.162801",\ + "0.052746, 0.052746, 0.052771, 0.052852, 0.053015",\ + "0.178338, 0.178338, 0.178380, 0.178516, 0.178792",\ + "0.381631, 0.381631, 0.381651, 0.381714, 0.381841",\ + "0.885932, 0.885936, 0.885937, 0.885937, 0.885937",\ + "2.162390, 2.162390, 2.162428, 2.162552, 2.162801"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.568910, 0.823730, 1.112547, 1.629674, 2.663928",\ + "0.612218, 0.867064, 1.154057, 1.664859, 2.686463",\ + "0.668015, 0.922863, 1.208574, 1.714952, 2.727708",\ + "0.803644, 1.058488, 1.343000, 1.845245, 2.849735",\ + "1.152943, 1.407785, 1.691260, 2.189933, 3.187279",\ + "0.656319, 0.911274, 1.200265, 1.716388, 2.749862",\ + "0.699627, 0.954607, 1.241755, 1.751573, 2.772397",\ + "0.755424, 1.010406, 1.296258, 1.801666, 2.813642",\ + "0.891053, 1.146032, 1.430671, 1.931960, 2.935669",\ + "1.240352, 1.495328, 1.778919, 2.276647, 3.273213",\ + "0.737194, 1.000233, 1.288231, 1.804010, 2.836817",\ + "0.780502, 1.043566, 1.329721, 1.839195, 2.859352",\ + "0.836299, 1.099365, 1.384223, 1.889288, 2.900597",\ + "0.971928, 1.234991, 1.518637, 2.019581, 3.022624",\ + "1.321227, 1.584288, 1.866885, 2.364269, 3.360168",\ + "0.797372, 1.065835, 1.352379, 1.867923, 2.900326",\ + "0.840683, 1.109169, 1.393867, 1.903108, 2.922861",\ + "0.896481, 1.164968, 1.448369, 1.953201, 2.964106",\ + "1.032109, 1.300594, 1.582782, 2.083494, 3.086133",\ + "1.381408, 1.649890, 1.931029, 2.428182, 3.423677",\ + "1.132264, 1.429870, 1.704734, 2.217468, 3.245782",\ + "1.175584, 1.473206, 1.746158, 2.252626, 3.268317",\ + "1.231382, 1.529005, 1.800615, 2.302701, 3.309562",\ + "1.367010, 1.664631, 1.934986, 2.432977, 3.431589",\ + "1.716307, 2.013927, 2.283197, 2.777650, 3.769133"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.046309, 0.046309, 0.046284, 0.046200, 0.046032",\ + "0.096054, 0.096054, 0.095973, 0.095695, 0.095137",\ + "0.188958, 0.188958, 0.188958, 0.188958, 0.188958",\ + "0.444028, 0.444028, 0.444025, 0.444014, 0.443993",\ + "1.101657, 1.101657, 1.101653, 1.101637, 1.101605",\ + "0.046309, 0.046309, 0.046284, 0.046200, 0.046032",\ + "0.096054, 0.096054, 0.095972, 0.095695, 0.095137",\ + "0.188958, 0.188958, 0.188958, 0.188958, 0.188958",\ + "0.444028, 0.444028, 0.444025, 0.444014, 0.443993",\ + "1.101657, 1.101657, 1.101653, 1.101637, 1.101605",\ + "0.046309, 0.046309, 0.046284, 0.046200, 0.046032",\ + "0.096054, 0.096054, 0.095972, 0.095695, 0.095137",\ + "0.188958, 0.188958, 0.188958, 0.188958, 0.188958",\ + "0.444028, 0.444028, 0.444025, 0.444014, 0.443993",\ + "1.101657, 1.101657, 1.101653, 1.101637, 1.101605",\ + "0.046309, 0.046309, 0.046284, 0.046200, 0.046032",\ + "0.096054, 0.096054, 0.095972, 0.095695, 0.095137",\ + "0.188958, 0.188958, 0.188958, 0.188958, 0.188958",\ + "0.444028, 0.444028, 0.444025, 0.444014, 0.443993",\ + "1.101657, 1.101657, 1.101653, 1.101637, 1.101605",\ + "0.046309, 0.046309, 0.046283, 0.046200, 0.046032",\ + "0.096054, 0.096054, 0.095970, 0.095693, 0.095137",\ + "0.188958, 0.188958, 0.188958, 0.188958, 0.188958",\ + "0.444028, 0.444028, 0.444025, 0.444014, 0.443993",\ + "1.101657, 1.101657, 1.101653, 1.101637, 1.101605"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[2]_redg_2640*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[21]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.197465, 0.431884, 0.691143, 1.132576, 2.015443",\ + "0.256904, 0.482244, 0.742878, 1.186420, 2.073503",\ + "0.340726, 0.558560, 0.820216, 1.263968, 2.151470",\ + "0.552743, 0.766273, 1.030363, 1.473596, 2.360062",\ + "1.106694, 1.318615, 1.585993, 2.032644, 2.925946",\ + "0.284867, 0.519390, 0.778620, 1.219289, 2.101377",\ + "0.344307, 0.569755, 0.830361, 1.273133, 2.159437",\ + "0.428128, 0.646078, 0.907700, 1.350681, 2.237404",\ + "0.640145, 0.853808, 1.117845, 1.560309, 2.445995",\ + "1.194097, 1.406166, 1.673486, 2.119357, 3.011879",\ + "0.365670, 0.608240, 0.866580, 1.306910, 2.188332",\ + "0.425121, 0.658616, 0.918322, 1.360754, 2.246392",\ + "0.508950, 0.734952, 0.995661, 1.438301, 2.324359",\ + "0.720977, 0.942721, 1.205806, 1.647930, 2.532950",\ + "1.274933, 1.495112, 1.761447, 2.206978, 3.098835",\ + "0.423291, 0.673682, 0.930715, 1.370823, 2.251841",\ + "0.482765, 0.724074, 0.982457, 1.424666, 2.309901",\ + "0.566610, 0.800431, 1.059796, 1.502214, 2.387868",\ + "0.778657, 1.008255, 1.269941, 1.711842, 2.596459",\ + "1.332621, 1.560694, 1.825583, 2.270890, 3.162344",\ + "0.752280, 1.035917, 1.282299, 1.720049, 2.597297",\ + "0.801700, 1.086498, 1.334062, 1.773901, 2.655357",\ + "0.877280, 1.163095, 1.411404, 1.851450, 2.733324",\ + "1.083334, 1.371566, 1.621543, 2.061076, 2.941916",\ + "1.635803, 1.924576, 2.177220, 2.620138, 3.507800"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.177313, 0.213506, 0.303388, 0.457575, 0.765950",\ + "0.250045, 0.279683, 0.356813, 0.520203, 0.846983",\ + "0.414563, 0.415723, 0.459642, 0.603351, 0.890769",\ + "0.887841, 0.887858, 0.923884, 1.046147, 1.290675",\ + "2.163213, 2.163213, 2.177271, 2.225014, 2.320500",\ + "0.177313, 0.213805, 0.303871, 0.457575, 0.765950",\ + "0.250045, 0.279878, 0.357325, 0.520203, 0.846983",\ + "0.414563, 0.415734, 0.460093, 0.603351, 0.890769",\ + "0.887841, 0.887859, 0.924267, 1.046147, 1.290675",\ + "2.163213, 2.163213, 2.177421, 2.225014, 2.320500",\ + "0.177336, 0.214457, 0.303880, 0.457575, 0.765950",\ + "0.250094, 0.280303, 0.357335, 0.520203, 0.846983",\ + "0.414563, 0.415757, 0.460101, 0.603351, 0.890769",\ + "0.887841, 0.887859, 0.924274, 1.046147, 1.290675",\ + "2.163213, 2.163213, 2.177424, 2.225014, 2.320500",\ + "0.177382, 0.215405, 0.303907, 0.457575, 0.765950",\ + "0.250194, 0.280922, 0.357363, 0.520203, 0.846983",\ + "0.414563, 0.415792, 0.460126, 0.603351, 0.890769",\ + "0.887841, 0.887859, 0.924295, 1.046147, 1.290675",\ + "2.163213, 2.163213, 2.177432, 2.225014, 2.320500",\ + "0.179823, 0.226531, 0.305470, 0.458210, 0.765950",\ + "0.255480, 0.288180, 0.359019, 0.520875, 0.846983",\ + "0.414563, 0.416192, 0.461583, 0.603943, 0.890769",\ + "0.887841, 0.887865, 0.925535, 1.046651, 1.290675",\ + "2.163213, 2.163213, 2.177916, 2.225211, 2.320500"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.186444, 0.372257, 0.626401, 1.055911, 1.914929",\ + "0.215837, 0.420150, 0.691942, 1.154794, 2.080498",\ + "0.262380, 0.480818, 0.763209, 1.249238, 2.221297",\ + "0.391146, 0.611553, 0.905194, 1.430347, 2.480653",\ + "0.735395, 0.947247, 1.249008, 1.808760, 2.928262",\ + "0.273847, 0.459753, 0.713841, 1.142624, 2.000862",\ + "0.303239, 0.507698, 0.779487, 1.241508, 2.166432",\ + "0.349783, 0.568392, 0.850825, 1.335951, 2.307231",\ + "0.478548, 0.699125, 0.992933, 1.517060, 2.566586",\ + "0.822797, 1.034805, 1.336856, 1.895473, 3.014196",\ + "0.354708, 0.548579, 0.801801, 1.230244, 2.087817",\ + "0.384100, 0.596639, 0.867448, 1.329128, 2.253387",\ + "0.430643, 0.657388, 0.938789, 1.423572, 2.394186",\ + "0.559400, 0.788117, 1.080899, 1.604681, 2.653542",\ + "0.903640, 1.123767, 1.424824, 1.983094, 3.101151",\ + "0.412447, 0.613987, 0.865934, 1.294157, 2.151326",\ + "0.441838, 0.662214, 0.931587, 1.393041, 2.316896",\ + "0.488379, 0.723043, 1.002931, 1.487485, 2.457695",\ + "0.617120, 0.853767, 1.145048, 1.668593, 2.717051",\ + "0.961342, 1.189372, 1.488979, 2.047006, 3.164660",\ + "0.716098, 0.975821, 1.217396, 1.643334, 2.496783",\ + "0.745485, 1.026006, 1.283388, 1.742355, 2.662352",\ + "0.795750, 1.087780, 1.354967, 1.836895, 2.803151",\ + "0.926660, 1.218436, 1.497480, 2.018165, 3.062507",\ + "1.264652, 1.553524, 1.841762, 2.396720, 3.510116"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.071183, 0.106877, 0.175281, 0.296416, 0.538687",\ + "0.120882, 0.144932, 0.213033, 0.350090, 0.624205",\ + "0.200934, 0.210788, 0.256182, 0.378836, 0.624145",\ + "0.444935, 0.444935, 0.478349, 0.591825, 0.818777",\ + "1.101088, 1.102468, 1.122488, 1.190477, 1.326455",\ + "0.071183, 0.107097, 0.175661, 0.296416, 0.538687",\ + "0.120882, 0.145118, 0.213463, 0.350090, 0.624205",\ + "0.200934, 0.210850, 0.256566, 0.378836, 0.624145",\ + "0.444935, 0.444935, 0.478705, 0.591825, 0.818777",\ + "1.101088, 1.102468, 1.122701, 1.190477, 1.326455",\ + "0.071251, 0.107578, 0.175668, 0.296416, 0.538687",\ + "0.120905, 0.145525, 0.213471, 0.350090, 0.624205",\ + "0.200952, 0.210986, 0.256574, 0.378836, 0.624145",\ + "0.444935, 0.444935, 0.478711, 0.591825, 0.818777",\ + "1.101096, 1.102468, 1.122705, 1.190477, 1.326455",\ + "0.071390, 0.108275, 0.175689, 0.296416, 0.538687",\ + "0.120951, 0.146116, 0.213494, 0.350090, 0.624205",\ + "0.200988, 0.211184, 0.256595, 0.378836, 0.624145",\ + "0.444935, 0.444935, 0.478731, 0.591825, 0.818777",\ + "1.101112, 1.102468, 1.122717, 1.190477, 1.326455",\ + "0.072681, 0.116463, 0.176917, 0.296915, 0.538687",\ + "0.121377, 0.153056, 0.214884, 0.350655, 0.624205",\ + "0.202910, 0.213504, 0.257838, 0.379341, 0.624145",\ + "0.444935, 0.444935, 0.479881, 0.592292, 0.818777",\ + "1.101261, 1.102468, 1.123406, 1.190757, 1.326455"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[2]_redg_2293*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[24]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.606811, 0.855240, 1.131420, 1.600406, 2.538379",\ + "0.653020, 0.901448, 1.177629, 1.646621, 2.584605",\ + "0.737270, 0.985698, 1.261878, 1.730864, 2.668837",\ + "0.958264, 1.206694, 1.482871, 1.951840, 2.889778",\ + "1.518707, 1.767142, 2.043312, 2.512236, 3.450085",\ + "0.694214, 0.942805, 1.218983, 1.687119, 2.624312",\ + "0.740423, 0.989013, 1.265193, 1.733334, 2.670539",\ + "0.824672, 1.073263, 1.349441, 1.817578, 2.754771",\ + "1.045666, 1.294259, 1.570434, 2.038553, 2.975712",\ + "1.606110, 1.854707, 2.130875, 2.598950, 3.536019",\ + "0.775027, 1.031783, 1.306946, 1.774740, 2.711267",\ + "0.821236, 1.077992, 1.353155, 1.820955, 2.757494",\ + "0.905485, 1.162242, 1.437404, 1.905199, 2.841726",\ + "1.126479, 1.383237, 1.658397, 2.126174, 3.062667",\ + "1.686923, 1.943686, 2.218838, 2.686570, 3.622974",\ + "0.832667, 1.097413, 1.371085, 1.838653, 2.774776",\ + "0.878876, 1.143622, 1.417294, 1.884868, 2.821003",\ + "0.963125, 1.227872, 1.501543, 1.969111, 2.905235",\ + "1.184119, 1.448868, 1.722536, 2.190087, 3.126176",\ + "1.744563, 2.009316, 2.282977, 2.750483, 3.686483",\ + "1.167769, 1.461851, 1.722948, 2.187993, 3.120233",\ + "1.213978, 1.508059, 1.769157, 2.234208, 3.166459",\ + "1.298227, 1.592309, 1.853406, 2.318451, 3.250691",\ + "1.519221, 1.813305, 2.074399, 2.539426, 3.471632",\ + "2.079665, 2.373755, 2.634840, 3.099823, 4.031939"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.052753, 0.052753, 0.052776, 0.052854, 0.053011",\ + "0.178350, 0.178350, 0.178389, 0.178521, 0.178785",\ + "0.381637, 0.381637, 0.381655, 0.381716, 0.381838",\ + "0.885927, 0.885931, 0.885936, 0.885936, 0.885936",\ + "2.162395, 2.162395, 2.162430, 2.162547, 2.162780",\ + "0.052753, 0.052753, 0.052777, 0.052854, 0.053011",\ + "0.178350, 0.178350, 0.178389, 0.178521, 0.178785",\ + "0.381637, 0.381637, 0.381655, 0.381716, 0.381838",\ + "0.885927, 0.885931, 0.885936, 0.885936, 0.885936",\ + "2.162395, 2.162395, 2.162430, 2.162547, 2.162780",\ + "0.052753, 0.052753, 0.052777, 0.052854, 0.053011",\ + "0.178350, 0.178350, 0.178389, 0.178521, 0.178785",\ + "0.381637, 0.381637, 0.381655, 0.381716, 0.381838",\ + "0.885927, 0.885931, 0.885936, 0.885936, 0.885936",\ + "2.162395, 2.162395, 2.162430, 2.162547, 2.162780",\ + "0.052753, 0.052753, 0.052777, 0.052854, 0.053011",\ + "0.178350, 0.178350, 0.178389, 0.178521, 0.178785",\ + "0.381637, 0.381637, 0.381655, 0.381716, 0.381838",\ + "0.885927, 0.885931, 0.885936, 0.885936, 0.885936",\ + "2.162395, 2.162395, 2.162430, 2.162547, 2.162780",\ + "0.052753, 0.052753, 0.052777, 0.052855, 0.053011",\ + "0.178350, 0.178350, 0.178390, 0.178521, 0.178785",\ + "0.381637, 0.381637, 0.381656, 0.381716, 0.381838",\ + "0.885927, 0.885932, 0.885936, 0.885936, 0.885936",\ + "2.162395, 2.162395, 2.162431, 2.162547, 2.162780"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.555254, 0.803664, 1.079873, 1.549041, 2.487376",\ + "0.598546, 0.846975, 1.123154, 1.592132, 2.530087",\ + "0.654342, 0.902772, 1.178949, 1.647912, 2.585838",\ + "0.789973, 1.038401, 1.314582, 1.783569, 2.721544",\ + "1.139274, 1.387700, 1.663883, 2.132891, 3.070906",\ + "0.642657, 0.891229, 1.167437, 1.635754, 2.573310",\ + "0.685949, 0.934540, 1.210717, 1.678845, 2.616020",\ + "0.741745, 0.990338, 1.266512, 1.734625, 2.671772",\ + "0.877376, 1.125967, 1.402145, 1.870283, 2.807478",\ + "1.226676, 1.475265, 1.751447, 2.219604, 3.156840",\ + "0.723469, 0.980207, 1.255399, 1.723375, 2.660265",\ + "0.766762, 1.023519, 1.298680, 1.766466, 2.702976",\ + "0.822557, 1.079316, 1.354475, 1.822246, 2.758727",\ + "0.958189, 1.214945, 1.490107, 1.957903, 2.894433",\ + "1.307489, 1.564244, 1.839409, 2.307225, 3.243795",\ + "0.781109, 1.045837, 1.319539, 1.787287, 2.723774",\ + "0.824402, 1.089149, 1.362819, 1.830378, 2.766484",\ + "0.880198, 1.144946, 1.418614, 1.886158, 2.822236",\ + "1.015829, 1.280575, 1.554247, 2.021816, 2.957942",\ + "1.365129, 1.629874, 1.903549, 2.371138, 3.307304",\ + "1.116211, 1.410268, 1.671404, 2.136628, 3.069230",\ + "1.159504, 1.453587, 1.714682, 2.179718, 3.111940",\ + "1.215299, 1.509384, 1.770477, 2.235498, 3.167692",\ + "1.350931, 1.645012, 1.906110, 2.371156, 3.303398",\ + "1.700231, 1.994310, 2.255412, 2.720478, 3.652760"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.046307, 0.046307, 0.046284, 0.046204, 0.046045",\ + "0.096045, 0.096045, 0.095965, 0.095693, 0.095150",\ + "0.188958, 0.188958, 0.188958, 0.188958, 0.188958",\ + "0.444028, 0.444028, 0.444025, 0.444014, 0.443994",\ + "1.101656, 1.101656, 1.101651, 1.101636, 1.101606",\ + "0.046307, 0.046307, 0.046284, 0.046204, 0.046045",\ + "0.096045, 0.096045, 0.095964, 0.095693, 0.095150",\ + "0.188958, 0.188958, 0.188958, 0.188958, 0.188958",\ + "0.444028, 0.444028, 0.444025, 0.444014, 0.443994",\ + "1.101656, 1.101656, 1.101651, 1.101636, 1.101606",\ + "0.046307, 0.046307, 0.046284, 0.046204, 0.046045",\ + "0.096045, 0.096045, 0.095964, 0.095693, 0.095150",\ + "0.188958, 0.188958, 0.188958, 0.188958, 0.188958",\ + "0.444028, 0.444028, 0.444025, 0.444014, 0.443994",\ + "1.101656, 1.101656, 1.101651, 1.101636, 1.101606",\ + "0.046307, 0.046307, 0.046284, 0.046204, 0.046045",\ + "0.096045, 0.096045, 0.095964, 0.095693, 0.095150",\ + "0.188958, 0.188958, 0.188958, 0.188958, 0.188958",\ + "0.444028, 0.444028, 0.444025, 0.444014, 0.443994",\ + "1.101656, 1.101656, 1.101651, 1.101636, 1.101606",\ + "0.046307, 0.046307, 0.046283, 0.046204, 0.046045",\ + "0.096045, 0.096045, 0.095961, 0.095692, 0.095150",\ + "0.188958, 0.188958, 0.188958, 0.188958, 0.188958",\ + "0.444028, 0.444028, 0.444025, 0.444014, 0.443994",\ + "1.101656, 1.101656, 1.101651, 1.101636, 1.101606"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[2]_redg_2451*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[26]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.574242, 0.825673, 1.106128, 1.575345, 2.513779",\ + "0.621341, 0.872791, 1.153329, 1.622748, 2.561586",\ + "0.708610, 0.960115, 1.240890, 1.710886, 2.650879",\ + "0.934451, 1.186041, 1.467182, 1.938070, 2.879846",\ + "1.501685, 1.753387, 2.035005, 2.507055, 3.451155",\ + "0.661652, 0.913251, 1.193695, 1.662059, 2.599712",\ + "0.708750, 0.960370, 1.240897, 1.709462, 2.647520",\ + "0.796019, 1.047694, 1.328459, 1.797601, 2.736813",\ + "1.021860, 1.273621, 1.554754, 2.024784, 2.965779",\ + "1.589094, 1.840967, 2.122581, 2.593769, 3.537089",\ + "0.742484, 1.002291, 1.281659, 1.749681, 2.686667",\ + "0.789583, 1.049409, 1.328861, 1.797084, 2.734475",\ + "0.876852, 1.136734, 1.416423, 1.885223, 2.823768",\ + "1.102693, 1.362663, 1.642718, 2.112406, 3.052734",\ + "1.669927, 1.930012, 2.210544, 2.681391, 3.624044",\ + "0.800100, 1.068010, 1.345799, 1.813594, 2.750176",\ + "0.847199, 1.115129, 1.393000, 1.860997, 2.797984",\ + "0.934467, 1.202456, 1.480563, 1.949136, 2.887277",\ + "1.160309, 1.428387, 1.706858, 2.176319, 3.116243",\ + "1.727543, 1.995738, 2.274684, 2.745304, 3.687553",\ + "1.129877, 1.433405, 1.697668, 2.162941, 3.095633",\ + "1.176977, 1.480531, 1.744871, 2.210345, 3.143440",\ + "1.264251, 1.567875, 1.832440, 2.298486, 3.232733",\ + "1.490099, 1.793832, 2.058744, 2.525673, 3.461699",\ + "2.057343, 2.361218, 2.626582, 3.094663, 4.033009"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.053866, 0.053921, 0.054375, 0.055698, 0.058344",\ + "0.173264, 0.173226, 0.173060, 0.172656, 0.171847",\ + "0.375455, 0.375364, 0.374978, 0.374041, 0.372167",\ + "0.885489, 0.885476, 0.885382, 0.885110, 0.884566",\ + "2.163040, 2.163059, 2.163198, 2.163598, 2.164399",\ + "0.053866, 0.053922, 0.054379, 0.055698, 0.058344",\ + "0.173264, 0.173226, 0.173059, 0.172656, 0.171847",\ + "0.375455, 0.375363, 0.374975, 0.374041, 0.372167",\ + "0.885489, 0.885476, 0.885381, 0.885110, 0.884566",\ + "2.163040, 2.163059, 2.163199, 2.163598, 2.164399",\ + "0.053866, 0.053923, 0.054379, 0.055698, 0.058344",\ + "0.173264, 0.173225, 0.173059, 0.172656, 0.171847",\ + "0.375455, 0.375361, 0.374975, 0.374041, 0.372167",\ + "0.885489, 0.885476, 0.885381, 0.885110, 0.884566",\ + "2.163040, 2.163059, 2.163199, 2.163598, 2.164399",\ + "0.053866, 0.053924, 0.054379, 0.055698, 0.058344",\ + "0.173264, 0.173224, 0.173059, 0.172656, 0.171847",\ + "0.375454, 0.375359, 0.374975, 0.374041, 0.372167",\ + "0.885489, 0.885476, 0.885381, 0.885110, 0.884566",\ + "2.163040, 2.163060, 2.163199, 2.163598, 2.164399",\ + "0.053870, 0.053942, 0.054392, 0.055703, 0.058344",\ + "0.173261, 0.173212, 0.173054, 0.172654, 0.171847",\ + "0.375447, 0.375331, 0.374965, 0.374037, 0.372167",\ + "0.885488, 0.885472, 0.885378, 0.885109, 0.884566",\ + "2.163042, 2.163065, 2.163203, 2.163600, 2.164399"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.504662, 0.755823, 1.035123, 1.501524, 2.434327",\ + "0.565599, 0.817019, 1.097428, 1.566532, 2.504740",\ + "0.632345, 0.883968, 1.165247, 1.636471, 2.578919",\ + "0.766552, 1.018158, 1.299363, 1.770409, 2.712501",\ + "1.110008, 1.361510, 1.642273, 2.112240, 3.052173",\ + "0.592071, 0.843399, 1.122681, 1.588239, 2.520261",\ + "0.653008, 0.904597, 1.184994, 1.653246, 2.590674",\ + "0.719755, 0.971548, 1.252820, 1.723185, 2.664853",\ + "0.853962, 1.105738, 1.386936, 1.857124, 2.798434",\ + "1.197417, 1.449089, 1.729842, 2.198954, 3.138107",\ + "0.672903, 0.932434, 1.210645, 1.675861, 2.607216",\ + "0.733841, 0.993636, 1.272958, 1.740868, 2.677629",\ + "0.800588, 1.060591, 1.340784, 1.810807, 2.751808",\ + "0.934794, 1.194780, 1.474900, 1.944745, 2.885390",\ + "1.278250, 1.538130, 1.817806, 2.286576, 3.225062",\ + "0.730518, 0.998146, 1.274784, 1.739774, 2.670725",\ + "0.791456, 1.059355, 1.337098, 1.804781, 2.741138",\ + "0.858203, 1.126316, 1.404924, 1.874720, 2.815317",\ + "0.992410, 1.260504, 1.539040, 2.008659, 2.948899",\ + "1.335865, 1.603851, 1.881946, 2.350489, 3.288571",\ + "1.060274, 1.363457, 1.626624, 2.089109, 3.016181",\ + "1.121233, 1.424747, 1.688966, 2.154127, 3.086594",\ + "1.187996, 1.491771, 1.756814, 2.224075, 3.160773",\ + "1.322202, 1.625954, 1.890928, 2.358013, 3.294354",\ + "1.665648, 1.969269, 2.233823, 2.699839, 3.634027"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.071595, 0.071985, 0.073663, 0.077752, 0.085929",\ + "0.129674, 0.130204, 0.132478, 0.138021, 0.149107",\ + "0.214013, 0.214497, 0.216573, 0.221634, 0.231755",\ + "0.447089, 0.447144, 0.447376, 0.447942, 0.449074",\ + "1.100695, 1.100670, 1.100562, 1.100300, 1.099777",\ + "0.071595, 0.071989, 0.073676, 0.077752, 0.085929",\ + "0.129674, 0.130208, 0.132495, 0.138021, 0.149107",\ + "0.214013, 0.214501, 0.216589, 0.221634, 0.231755",\ + "0.447089, 0.447144, 0.447378, 0.447942, 0.449074",\ + "1.100695, 1.100670, 1.100561, 1.100300, 1.099777",\ + "0.071595, 0.071996, 0.073676, 0.077752, 0.085929",\ + "0.129674, 0.130218, 0.132496, 0.138021, 0.149107",\ + "0.214014, 0.214510, 0.216590, 0.221634, 0.231755",\ + "0.447089, 0.447145, 0.447378, 0.447942, 0.449074",\ + "1.100695, 1.100669, 1.100561, 1.100300, 1.099777",\ + "0.071596, 0.072006, 0.073677, 0.077752, 0.085929",\ + "0.129675, 0.130232, 0.132497, 0.138021, 0.149107",\ + "0.214014, 0.214523, 0.216591, 0.221634, 0.231755",\ + "0.447090, 0.447146, 0.447378, 0.447942, 0.449074",\ + "1.100695, 1.100668, 1.100561, 1.100300, 1.099777",\ + "0.071627, 0.072128, 0.073719, 0.077769, 0.085929",\ + "0.129718, 0.130397, 0.132553, 0.138044, 0.149107",\ + "0.214054, 0.214674, 0.216642, 0.221655, 0.231755",\ + "0.447094, 0.447163, 0.447384, 0.447944, 0.449074",\ + "1.100693, 1.100661, 1.100559, 1.100299, 1.099777"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[2]_redg_2541*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[27]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.244315, 0.514723, 0.800077, 1.287472, 2.262263",\ + "0.295834, 0.565221, 0.850051, 1.338109, 2.314226",\ + "0.370354, 0.642449, 0.926203, 1.412852, 2.386149",\ + "0.577074, 0.851060, 1.132979, 1.615988, 2.582005",\ + "1.130301, 1.404191, 1.684823, 2.164586, 3.124112",\ + "0.331716, 0.602319, 0.887697, 1.374185, 2.348197",\ + "0.383234, 0.652812, 0.937673, 1.424822, 2.400160",\ + "0.457755, 0.730036, 1.013820, 1.499564, 2.472083",\ + "0.665475, 0.938641, 1.220586, 1.702701, 2.667939",\ + "1.218705, 1.491770, 1.772419, 2.251299, 3.210045",\ + "0.417649, 0.691352, 0.975660, 1.461806, 2.435152",\ + "0.468650, 0.741835, 1.025635, 1.512442, 2.487115",\ + "0.546403, 0.819049, 1.101783, 1.587185, 2.559038",\ + "0.755504, 1.027643, 1.308548, 1.790321, 2.754894",\ + "1.308745, 1.580767, 1.860382, 2.338919, 3.297000",\ + "0.482221, 0.757061, 1.039803, 1.525718, 2.498661",\ + "0.533223, 0.807529, 1.089778, 1.576355, 2.550624",\ + "0.610973, 0.884729, 1.165926, 1.651097, 2.622547",\ + "0.820080, 1.093307, 1.372690, 1.854234, 2.818403",\ + "1.373332, 1.646424, 1.924523, 2.402832, 3.360509",\ + "0.824496, 1.122462, 1.391851, 1.875132, 2.844117",\ + "0.875514, 1.172748, 1.441833, 1.925771, 2.896080",\ + "0.953244, 1.249783, 1.517967, 2.000508, 2.968003",\ + "1.162385, 1.458171, 1.724694, 2.203629, 3.163859",\ + "1.715704, 2.011206, 2.276494, 2.752214, 3.705966"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.247846, 0.303832, 0.405143, 0.595020, 0.974773",\ + "0.313786, 0.346638, 0.435686, 0.627210, 1.010259",\ + "0.435716, 0.458756, 0.530637, 0.704592, 1.052501",\ + "0.888071, 0.889365, 0.918106, 1.015199, 1.209385",\ + "2.165255, 2.165436, 2.171895, 2.192891, 2.234884",\ + "0.247846, 0.304139, 0.405737, 0.595020, 0.974773",\ + "0.313786, 0.346858, 0.436285, 0.627210, 1.010259",\ + "0.435716, 0.458895, 0.531182, 0.704592, 1.052501",\ + "0.888102, 0.889365, 0.918410, 1.015199, 1.209385",\ + "2.165255, 2.165437, 2.171961, 2.192891, 2.234884",\ + "0.250082, 0.304803, 0.405749, 0.595020, 0.974773",\ + "0.314671, 0.347334, 0.436296, 0.627210, 1.010259",\ + "0.436504, 0.459195, 0.531192, 0.704592, 1.052501",\ + "0.888199, 0.889365, 0.918416, 1.015199, 1.209385",\ + "2.165255, 2.165441, 2.171962, 2.192891, 2.234884",\ + "0.251727, 0.305767, 0.405781, 0.595020, 0.974773",\ + "0.315322, 0.348025, 0.436329, 0.627210, 1.010259",\ + "0.437083, 0.459631, 0.531222, 0.704592, 1.052501",\ + "0.888292, 0.889365, 0.918433, 1.015199, 1.209385",\ + "2.165255, 2.165446, 2.171966, 2.192891, 2.234884",\ + "0.262263, 0.317092, 0.407706, 0.595800, 0.974773",\ + "0.319491, 0.356149, 0.438270, 0.627998, 1.010259",\ + "0.440795, 0.464750, 0.532985, 0.705307, 1.052501",\ + "0.888892, 0.889365, 0.919417, 1.015598, 1.209385",\ + "2.165255, 2.165507, 2.172179, 2.192978, 2.234884"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.244906, 0.429066, 0.715031, 1.201577, 2.174669",\ + "0.279961, 0.467088, 0.760757, 1.264102, 2.270793",\ + "0.330500, 0.520871, 0.819993, 1.340074, 2.380235",\ + "0.460001, 0.650607, 0.955135, 1.497108, 2.581054",\ + "0.797840, 0.992388, 1.299994, 1.860913, 2.982751",\ + "0.332306, 0.516668, 0.802648, 1.288290, 2.260602",\ + "0.367361, 0.554708, 0.848427, 1.350815, 2.356727",\ + "0.417900, 0.608494, 0.907716, 1.426787, 2.466169",\ + "0.547401, 0.738223, 1.042926, 1.583821, 2.666988",\ + "0.885240, 1.079987, 1.387844, 1.947626, 3.068685",\ + "0.413157, 0.605714, 0.890611, 1.375910, 2.347558",\ + "0.448212, 0.643794, 0.936391, 1.438436, 2.443682",\ + "0.498750, 0.697588, 0.995681, 1.514407, 2.553124",\ + "0.628251, 0.827301, 1.130892, 1.671441, 2.753943",\ + "0.966089, 1.169027, 1.475811, 2.035246, 3.155640",\ + "0.470897, 0.671442, 0.954754, 1.439822, 2.411067",\ + "0.505953, 0.709581, 1.000537, 1.502348, 2.507191",\ + "0.556489, 0.763385, 1.059829, 1.578320, 2.616633",\ + "0.685989, 0.893075, 1.195044, 1.735354, 2.817452",\ + "1.023827, 1.234747, 1.539967, 2.099159, 3.219149",\ + "0.774671, 1.037059, 1.306793, 1.789232, 2.756522",\ + "0.809728, 1.075884, 1.352747, 1.851827, 2.852647",\ + "0.860246, 1.129813, 1.412209, 1.927867, 2.962089",\ + "0.989742, 1.259233, 1.547645, 2.084991, 3.162908",\ + "1.327573, 1.600271, 1.892761, 2.448874, 3.564605"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.078481, 0.114548, 0.190287, 0.342583, 0.647174",\ + "0.121015, 0.135349, 0.195602, 0.346123, 0.647167",\ + "0.210717, 0.216175, 0.259364, 0.388602, 0.647078",\ + "0.448759, 0.449668, 0.471637, 0.541681, 0.681771",\ + "1.102116, 1.102394, 1.113655, 1.151696, 1.227780",\ + "0.078481, 0.114757, 0.190764, 0.342583, 0.647174",\ + "0.121015, 0.135456, 0.196073, 0.346123, 0.647167",\ + "0.210717, 0.216208, 0.259768, 0.388602, 0.647078",\ + "0.448759, 0.449677, 0.471856, 0.541681, 0.681771",\ + "1.102116, 1.102394, 1.113774, 1.151696, 1.227780",\ + "0.078556, 0.115208, 0.190773, 0.342583, 0.647174",\ + "0.121030, 0.135687, 0.196082, 0.346123, 0.647167",\ + "0.210727, 0.216281, 0.259776, 0.388602, 0.647078",\ + "0.448759, 0.449695, 0.471860, 0.541681, 0.681771",\ + "1.102118, 1.102394, 1.113776, 1.151696, 1.227780",\ + "0.078710, 0.115863, 0.190799, 0.342583, 0.647174",\ + "0.121062, 0.136023, 0.196108, 0.346123, 0.647167",\ + "0.210748, 0.216386, 0.259798, 0.388602, 0.647078",\ + "0.448759, 0.449721, 0.471872, 0.541681, 0.681771",\ + "1.102121, 1.102394, 1.113783, 1.151696, 1.227780",\ + "0.080154, 0.123560, 0.192343, 0.343209, 0.647174",\ + "0.121358, 0.139963, 0.197633, 0.346742, 0.647167",\ + "0.210943, 0.217625, 0.261108, 0.389133, 0.647078",\ + "0.448759, 0.450031, 0.472582, 0.541969, 0.681771",\ + "1.102151, 1.102394, 1.114168, 1.151853, 1.227780"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[2]_redg_2586*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[28]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.802622, 1.056036, 1.346324, 1.867286, 2.909209",\ + "0.849165, 1.102582, 1.392879, 1.913861, 2.955825",\ + "0.934845, 1.188269, 1.478593, 1.999634, 3.041714",\ + "1.158235, 1.411669, 1.702036, 2.223166, 3.265427",\ + "1.722272, 1.975720, 2.266142, 2.787390, 3.829885",\ + "0.890034, 1.143575, 1.434056, 1.954001, 2.995142",\ + "0.936578, 1.190121, 1.480612, 2.000576, 3.041759",\ + "1.022258, 1.275808, 1.566326, 2.086349, 3.127648",\ + "1.245647, 1.499208, 1.789768, 2.309881, 3.351360",\ + "1.809685, 2.063260, 2.353875, 2.874104, 3.915819",\ + "0.970907, 1.232542, 1.522024, 2.041623, 3.082098",\ + "1.017450, 1.279087, 1.568579, 2.088199, 3.128714",\ + "1.103130, 1.364774, 1.654293, 2.173971, 3.214603",\ + "1.326520, 1.588175, 1.877736, 2.397503, 3.438315",\ + "1.890557, 2.152227, 2.441842, 2.961727, 4.002774",\ + "1.029596, 1.298156, 1.586172, 2.105536, 3.145607",\ + "1.076139, 1.344701, 1.632727, 2.152112, 3.192223",\ + "1.161819, 1.430389, 1.718441, 2.237885, 3.278112",\ + "1.385208, 1.653790, 1.941884, 2.461417, 3.501824",\ + "1.949246, 2.217842, 2.505991, 3.025640, 4.066283",\ + "1.361666, 1.662270, 1.938568, 2.455101, 3.491063",\ + "1.408209, 1.708817, 1.985123, 2.501677, 3.537679",\ + "1.493889, 1.794507, 2.070838, 2.587449, 3.623568",\ + "1.717279, 2.017912, 2.294282, 2.810982, 3.847281",\ + "2.281316, 2.581969, 2.858389, 3.375206, 4.411739"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.052266, 0.052273, 0.052301, 0.052359, 0.052477",\ + "0.174376, 0.174371, 0.174352, 0.174312, 0.174230",\ + "0.378069, 0.378057, 0.378013, 0.377917, 0.377724",\ + "0.885437, 0.885434, 0.885402, 0.885305, 0.885113",\ + "2.163117, 2.163121, 2.163168, 2.163310, 2.163594",\ + "0.052266, 0.052273, 0.052301, 0.052359, 0.052477",\ + "0.174376, 0.174371, 0.174352, 0.174312, 0.174230",\ + "0.378069, 0.378057, 0.378012, 0.377917, 0.377724",\ + "0.885437, 0.885434, 0.885401, 0.885305, 0.885113",\ + "2.163117, 2.163121, 2.163169, 2.163310, 2.163594",\ + "0.052266, 0.052274, 0.052301, 0.052359, 0.052477",\ + "0.174376, 0.174371, 0.174352, 0.174312, 0.174230",\ + "0.378069, 0.378057, 0.378012, 0.377917, 0.377724",\ + "0.885437, 0.885434, 0.885401, 0.885305, 0.885113",\ + "2.163117, 2.163121, 2.163169, 2.163310, 2.163594",\ + "0.052266, 0.052274, 0.052301, 0.052359, 0.052477",\ + "0.174376, 0.174371, 0.174352, 0.174312, 0.174230",\ + "0.378069, 0.378057, 0.378012, 0.377917, 0.377724",\ + "0.885437, 0.885434, 0.885401, 0.885305, 0.885113",\ + "2.163117, 2.163121, 2.163169, 2.163310, 2.163594",\ + "0.052266, 0.052276, 0.052301, 0.052360, 0.052477",\ + "0.174376, 0.174369, 0.174352, 0.174311, 0.174230",\ + "0.378069, 0.378052, 0.378011, 0.377916, 0.377724",\ + "0.885437, 0.885432, 0.885400, 0.885305, 0.885113",\ + "2.163117, 2.163123, 2.163170, 2.163311, 2.163594"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.740784, 0.994165, 1.284321, 1.804998, 2.846352",\ + "0.794288, 1.047701, 1.337984, 1.858934, 2.900834",\ + "0.855205, 1.108643, 1.399026, 1.920190, 2.962518",\ + "0.989902, 1.243338, 1.533712, 2.054859, 3.097151",\ + "1.336325, 1.589748, 1.880072, 2.401109, 3.443183",\ + "0.828197, 1.081704, 1.372052, 1.891713, 2.932285",\ + "0.881701, 1.135240, 1.425716, 1.945649, 2.986768",\ + "0.942617, 1.196183, 1.486758, 2.006905, 3.048452",\ + "1.077314, 1.330878, 1.621445, 2.141573, 3.183085",\ + "1.423737, 1.677287, 1.967804, 2.487824, 3.529117",\ + "0.909070, 1.170669, 1.460019, 1.979335, 3.019240",\ + "0.962574, 1.224207, 1.513683, 2.033271, 3.073723",\ + "1.023490, 1.285149, 1.574726, 2.094527, 3.135407",\ + "1.158187, 1.419844, 1.709412, 2.229196, 3.270040",\ + "1.504610, 1.766254, 2.055771, 2.575446, 3.616072",\ + "0.967758, 1.236282, 1.524167, 2.043248, 3.082749",\ + "1.021262, 1.289820, 1.577832, 2.097185, 3.137232",\ + "1.082179, 1.350764, 1.638874, 2.158441, 3.198916",\ + "1.216876, 1.485459, 1.773561, 2.293109, 3.333549",\ + "1.563299, 1.831868, 2.119919, 2.639359, 3.679581",\ + "1.299828, 1.600384, 1.876561, 2.392812, 3.428205",\ + "1.353332, 1.653935, 1.930228, 2.446749, 3.482688",\ + "1.414249, 1.714888, 1.991272, 2.508006, 3.544372",\ + "1.548946, 1.849582, 2.125958, 2.642674, 3.679005",\ + "1.895369, 2.195986, 2.472316, 2.988924, 4.025037"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.060356, 0.060405, 0.060595, 0.061007, 0.061830",\ + "0.114429, 0.114496, 0.114756, 0.115316, 0.116436",\ + "0.200095, 0.200156, 0.200394, 0.200905, 0.201928",\ + "0.445532, 0.445539, 0.445566, 0.445623, 0.445737",\ + "1.101415, 1.101412, 1.101400, 1.101373, 1.101320",\ + "0.060356, 0.060405, 0.060597, 0.061007, 0.061830",\ + "0.114429, 0.114496, 0.114758, 0.115316, 0.116436",\ + "0.200095, 0.200157, 0.200396, 0.200905, 0.201928",\ + "0.445532, 0.445539, 0.445566, 0.445623, 0.445737",\ + "1.101415, 1.101412, 1.101400, 1.101373, 1.101320",\ + "0.060356, 0.060406, 0.060597, 0.061007, 0.061830",\ + "0.114429, 0.114498, 0.114758, 0.115316, 0.116436",\ + "0.200095, 0.200158, 0.200396, 0.200905, 0.201928",\ + "0.445532, 0.445539, 0.445566, 0.445623, 0.445737",\ + "1.101415, 1.101412, 1.101400, 1.101373, 1.101320",\ + "0.060356, 0.060408, 0.060597, 0.061007, 0.061830",\ + "0.114429, 0.114500, 0.114758, 0.115316, 0.116436",\ + "0.200095, 0.200160, 0.200396, 0.200905, 0.201928",\ + "0.445532, 0.445540, 0.445566, 0.445623, 0.445737",\ + "1.101415, 1.101412, 1.101400, 1.101373, 1.101320",\ + "0.060356, 0.060425, 0.060601, 0.061009, 0.061830",\ + "0.114429, 0.114524, 0.114764, 0.115319, 0.116436",\ + "0.200095, 0.200182, 0.200401, 0.200907, 0.201928",\ + "0.445532, 0.445542, 0.445567, 0.445623, 0.445737",\ + "1.101415, 1.101411, 1.101399, 1.101373, 1.101320"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[2]_redg_2628*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[29]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.793277, 1.039130, 1.319023, 1.798101, 2.756257",\ + "0.839819, 1.085675, 1.365575, 1.844669, 2.802857",\ + "0.925498, 1.171358, 1.451280, 1.930420, 2.888700",\ + "1.148884, 1.394753, 1.674707, 2.153918, 3.112340",\ + "1.712918, 1.958797, 2.238793, 2.718097, 3.676705",\ + "0.880682, 1.126695, 1.406620, 1.884815, 2.842191",\ + "0.927225, 1.173240, 1.453171, 1.931383, 2.888791",\ + "1.012903, 1.258923, 1.538876, 2.017133, 2.974633",\ + "1.236289, 1.482318, 1.762303, 2.240632, 3.198274",\ + "1.800323, 2.046363, 2.326390, 2.804811, 3.762639",\ + "0.961504, 1.215685, 1.494583, 1.972436, 2.929146",\ + "1.008047, 1.262229, 1.541135, 2.019004, 2.975746",\ + "1.093725, 1.347913, 1.626839, 2.104754, 3.061589",\ + "1.317111, 1.571308, 1.850267, 2.328253, 3.285229",\ + "1.881145, 2.135353, 2.414354, 2.892432, 3.849594",\ + "1.019140, 1.281331, 1.558724, 2.036349, 2.992655",\ + "1.065682, 1.327876, 1.605276, 2.082916, 3.039255",\ + "1.151360, 1.413560, 1.690981, 2.168667, 3.125098",\ + "1.374747, 1.636955, 1.914408, 2.392166, 3.348738",\ + "1.938781, 2.201000, 2.478495, 2.956345, 3.913103",\ + "1.348815, 1.645927, 1.910691, 2.385732, 3.338111",\ + "1.395358, 1.692472, 1.957243, 2.432300, 3.384711",\ + "1.481036, 1.778158, 2.042948, 2.518051, 3.470554",\ + "1.704422, 2.001556, 2.266376, 2.741550, 3.694194",\ + "2.268456, 2.565605, 2.830464, 3.305729, 4.258559"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.052265, 0.052270, 0.052291, 0.052337, 0.052430",\ + "0.174378, 0.174374, 0.174359, 0.174327, 0.174262",\ + "0.378072, 0.378063, 0.378028, 0.377953, 0.377801",\ + "0.885436, 0.885432, 0.885397, 0.885300, 0.885105",\ + "2.163117, 2.163124, 2.163175, 2.163318, 2.163605",\ + "0.052265, 0.052270, 0.052291, 0.052337, 0.052430",\ + "0.174378, 0.174374, 0.174359, 0.174327, 0.174262",\ + "0.378072, 0.378063, 0.378028, 0.377953, 0.377801",\ + "0.885436, 0.885432, 0.885397, 0.885300, 0.885105",\ + "2.163117, 2.163124, 2.163175, 2.163318, 2.163605",\ + "0.052265, 0.052270, 0.052291, 0.052337, 0.052430",\ + "0.174378, 0.174374, 0.174359, 0.174327, 0.174262",\ + "0.378072, 0.378063, 0.378028, 0.377953, 0.377801",\ + "0.885436, 0.885432, 0.885397, 0.885300, 0.885105",\ + "2.163117, 2.163124, 2.163175, 2.163318, 2.163605",\ + "0.052265, 0.052270, 0.052291, 0.052337, 0.052430",\ + "0.174378, 0.174374, 0.174359, 0.174327, 0.174262",\ + "0.378072, 0.378062, 0.378028, 0.377953, 0.377801",\ + "0.885436, 0.885432, 0.885397, 0.885300, 0.885105",\ + "2.163117, 2.163124, 2.163175, 2.163318, 2.163605",\ + "0.052265, 0.052272, 0.052292, 0.052338, 0.052430",\ + "0.174378, 0.174372, 0.174359, 0.174327, 0.174262",\ + "0.378072, 0.378059, 0.378027, 0.377952, 0.377801",\ + "0.885436, 0.885430, 0.885396, 0.885299, 0.885105",\ + "2.163117, 2.163126, 2.163177, 2.163319, 2.163605"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.731449, 0.977276, 1.257067, 1.735920, 2.693626",\ + "0.784944, 1.030796, 1.310685, 1.789754, 2.747891",\ + "0.845853, 1.091725, 1.371691, 1.850929, 2.809405",\ + "0.980551, 1.226421, 1.506381, 1.985605, 2.944052",\ + "1.326977, 1.572838, 1.852758, 2.331896, 3.290171",\ + "0.818854, 1.064841, 1.344662, 1.822633, 2.779559",\ + "0.872349, 1.118361, 1.398281, 1.876467, 2.833825",\ + "0.933258, 1.179290, 1.459288, 1.937643, 2.895339",\ + "1.067956, 1.313987, 1.593977, 2.072318, 3.029986",\ + "1.414383, 1.660403, 1.940354, 2.418609, 3.376105",\ + "0.899676, 1.153830, 1.432626, 1.910254, 2.866514",\ + "0.953171, 1.207350, 1.486244, 1.964088, 2.920780",\ + "1.014081, 1.268280, 1.547251, 2.025264, 2.982294",\ + "1.148778, 1.402976, 1.681941, 2.159939, 3.116941",\ + "1.495205, 1.749392, 2.028318, 2.506230, 3.463060",\ + "0.957311, 1.219475, 1.496767, 1.974167, 2.930023",\ + "1.010806, 1.272997, 1.550386, 2.028001, 2.984289",\ + "1.071716, 1.333927, 1.611393, 2.089177, 3.045803",\ + "1.206414, 1.468623, 1.746082, 2.223852, 3.180450",\ + "1.552840, 1.815039, 2.092459, 2.570143, 3.526569",\ + "1.286987, 1.584062, 1.848731, 2.323550, 3.275480",\ + "1.340482, 1.637592, 1.902352, 2.377385, 3.329745",\ + "1.401392, 1.698529, 1.963361, 2.438561, 3.391259",\ + "1.536089, 1.833225, 2.098050, 2.573236, 3.525906",\ + "1.882516, 2.179637, 2.444427, 2.919527, 3.872025"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.060343, 0.060380, 0.060528, 0.060852, 0.061502",\ + "0.114411, 0.114462, 0.114664, 0.115106, 0.115991",\ + "0.200079, 0.200126, 0.200310, 0.200714, 0.201522",\ + "0.445531, 0.445536, 0.445556, 0.445602, 0.445692",\ + "1.101416, 1.101414, 1.101404, 1.101383, 1.101341",\ + "0.060343, 0.060381, 0.060529, 0.060852, 0.061502",\ + "0.114411, 0.114463, 0.114665, 0.115106, 0.115991",\ + "0.200079, 0.200126, 0.200311, 0.200714, 0.201522",\ + "0.445531, 0.445536, 0.445556, 0.445602, 0.445692",\ + "1.101416, 1.101414, 1.101404, 1.101383, 1.101341",\ + "0.060343, 0.060382, 0.060529, 0.060852, 0.061502",\ + "0.114411, 0.114464, 0.114665, 0.115106, 0.115991",\ + "0.200079, 0.200127, 0.200311, 0.200714, 0.201522",\ + "0.445531, 0.445536, 0.445556, 0.445602, 0.445692",\ + "1.101416, 1.101413, 1.101404, 1.101383, 1.101341",\ + "0.060343, 0.060383, 0.060529, 0.060852, 0.061502",\ + "0.114411, 0.114465, 0.114665, 0.115106, 0.115991",\ + "0.200079, 0.200128, 0.200311, 0.200714, 0.201522",\ + "0.445531, 0.445536, 0.445556, 0.445602, 0.445692",\ + "1.101416, 1.101413, 1.101404, 1.101383, 1.101341",\ + "0.060343, 0.060396, 0.060532, 0.060854, 0.061502",\ + "0.114411, 0.114483, 0.114670, 0.115108, 0.115991",\ + "0.200079, 0.200145, 0.200315, 0.200715, 0.201522",\ + "0.445531, 0.445538, 0.445557, 0.445602, 0.445692",\ + "1.101416, 1.101413, 1.101404, 1.101383, 1.101341"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[2]_redg_2679*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[31]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.704078, 0.962448, 1.254543, 1.772415, 2.808159",\ + "0.750305, 1.008676, 1.300771, 1.818645, 2.854393",\ + "0.834537, 1.092907, 1.385001, 1.902873, 2.938617",\ + "1.055475, 1.313845, 1.605937, 2.123804, 3.159536",\ + "1.615778, 1.874147, 2.166233, 2.684084, 3.719787",\ + "0.791487, 1.050012, 1.342263, 1.859129, 2.894093",\ + "0.837714, 1.096239, 1.388491, 1.905359, 2.940326",\ + "0.921945, 1.180470, 1.472721, 1.989588, 3.024551",\ + "1.142884, 1.401409, 1.693658, 2.210518, 3.245470",\ + "1.703187, 1.961710, 2.253953, 2.770799, 3.805721",\ + "0.872371, 1.139015, 1.430229, 1.946751, 2.981048",\ + "0.918598, 1.185243, 1.476457, 1.992981, 3.027281",\ + "1.002829, 1.269474, 1.560688, 2.077209, 3.111506",\ + "1.223768, 1.490412, 1.781624, 2.298140, 3.332425",\ + "1.784070, 2.050714, 2.341920, 2.858420, 3.892676",\ + "0.932831, 1.204683, 1.494377, 2.010664, 3.044557",\ + "0.979058, 1.250910, 1.540605, 2.056894, 3.090790",\ + "1.063289, 1.335141, 1.624835, 2.141123, 3.175015",\ + "1.284228, 1.556080, 1.845772, 2.362053, 3.395934",\ + "1.844531, 2.116381, 2.406067, 2.922334, 3.956185",\ + "1.268348, 1.569475, 1.846740, 2.360211, 3.390013",\ + "1.314575, 1.615702, 1.892967, 2.406441, 3.436246",\ + "1.398806, 1.699933, 1.977198, 2.490670, 3.520471",\ + "1.619745, 1.920872, 2.198134, 2.711600, 3.741390",\ + "2.180047, 2.481173, 2.758430, 3.271881, 4.301641"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.053020, 0.053022, 0.053032, 0.053060, 0.053117",\ + "0.178801, 0.178804, 0.178822, 0.178869, 0.178965",\ + "0.381845, 0.381847, 0.381855, 0.381877, 0.381921",\ + "0.885630, 0.885624, 0.885585, 0.885483, 0.885278",\ + "2.162832, 2.162841, 2.162898, 2.163049, 2.163351",\ + "0.053020, 0.053022, 0.053032, 0.053060, 0.053117",\ + "0.178801, 0.178804, 0.178822, 0.178869, 0.178965",\ + "0.381845, 0.381847, 0.381855, 0.381877, 0.381921",\ + "0.885630, 0.885624, 0.885585, 0.885483, 0.885278",\ + "2.162832, 2.162841, 2.162899, 2.163049, 2.163351",\ + "0.053020, 0.053022, 0.053032, 0.053060, 0.053117",\ + "0.178801, 0.178804, 0.178822, 0.178869, 0.178965",\ + "0.381845, 0.381847, 0.381855, 0.381877, 0.381921",\ + "0.885630, 0.885624, 0.885585, 0.885483, 0.885278",\ + "2.162832, 2.162841, 2.162899, 2.163049, 2.163351",\ + "0.053020, 0.053022, 0.053032, 0.053060, 0.053117",\ + "0.178801, 0.178804, 0.178822, 0.178869, 0.178965",\ + "0.381845, 0.381847, 0.381855, 0.381877, 0.381921",\ + "0.885630, 0.885624, 0.885585, 0.885483, 0.885278",\ + "2.162832, 2.162841, 2.162899, 2.163049, 2.163351",\ + "0.053020, 0.053022, 0.053033, 0.053061, 0.053117",\ + "0.178801, 0.178805, 0.178823, 0.178870, 0.178965",\ + "0.381845, 0.381847, 0.381855, 0.381877, 0.381921",\ + "0.885630, 0.885621, 0.885584, 0.885482, 0.885278",\ + "2.162832, 2.162845, 2.162900, 2.163050, 2.163351"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.653096, 0.911470, 1.203587, 1.721520, 2.757385",\ + "0.695785, 0.954155, 1.246248, 1.764117, 2.799856",\ + "0.751534, 1.009904, 1.301996, 1.819860, 2.855588",\ + "0.887244, 1.145615, 1.437709, 1.955581, 2.991326",\ + "1.236608, 1.494979, 1.787076, 2.304955, 3.340714",\ + "0.740505, 0.999033, 1.291307, 1.808234, 2.843319",\ + "0.783194, 1.041719, 1.333969, 1.850832, 2.885789",\ + "0.838943, 1.097468, 1.389716, 1.906574, 2.941522",\ + "0.974653, 1.233178, 1.525429, 2.042296, 3.077260",\ + "1.324017, 1.582542, 1.874796, 2.391670, 3.426647",\ + "0.821388, 1.088037, 1.379274, 1.895856, 2.930274",\ + "0.864078, 1.130722, 1.421935, 1.938454, 2.972744",\ + "0.919827, 1.186471, 1.477682, 1.994196, 3.028477",\ + "1.055537, 1.322181, 1.613395, 2.129917, 3.164215",\ + "1.404901, 1.671546, 1.962763, 2.479291, 3.513602",\ + "0.881849, 1.153705, 1.443422, 1.959769, 2.993783",\ + "0.924538, 1.196390, 1.486083, 2.002367, 3.036253",\ + "0.980287, 1.252139, 1.541830, 2.058109, 3.091986",\ + "1.115997, 1.387849, 1.677543, 2.193830, 3.227724",\ + "1.465361, 1.737213, 2.026911, 2.543204, 3.577111",\ + "1.217365, 1.518498, 1.795785, 2.309317, 3.339239",\ + "1.260055, 1.561182, 1.838445, 2.351914, 3.381710",\ + "1.315804, 1.616930, 1.894192, 2.407657, 3.437442",\ + "1.451514, 1.752641, 2.029906, 2.543378, 3.573180",\ + "1.800878, 2.102005, 2.379273, 2.892752, 3.922567"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.046012, 0.046005, 0.045968, 0.045869, 0.045670",\ + "0.095119, 0.095114, 0.095079, 0.094989, 0.094807",\ + "0.188959, 0.188960, 0.188961, 0.188966, 0.188975",\ + "0.443992, 0.443992, 0.443991, 0.443987, 0.443980",\ + "1.101604, 1.101604, 1.101601, 1.101596, 1.101585",\ + "0.046012, 0.046005, 0.045968, 0.045869, 0.045670",\ + "0.095119, 0.095114, 0.095079, 0.094989, 0.094807",\ + "0.188959, 0.188960, 0.188961, 0.188966, 0.188975",\ + "0.443992, 0.443992, 0.443991, 0.443987, 0.443980",\ + "1.101604, 1.101604, 1.101601, 1.101596, 1.101585",\ + "0.046012, 0.046005, 0.045968, 0.045869, 0.045670",\ + "0.095119, 0.095114, 0.095079, 0.094989, 0.094807",\ + "0.188959, 0.188960, 0.188961, 0.188966, 0.188975",\ + "0.443992, 0.443992, 0.443991, 0.443987, 0.443980",\ + "1.101604, 1.101604, 1.101601, 1.101596, 1.101585",\ + "0.046012, 0.046005, 0.045968, 0.045869, 0.045670",\ + "0.095119, 0.095113, 0.095079, 0.094989, 0.094807",\ + "0.188959, 0.188960, 0.188961, 0.188966, 0.188975",\ + "0.443992, 0.443992, 0.443991, 0.443987, 0.443980",\ + "1.101604, 1.101604, 1.101601, 1.101596, 1.101585",\ + "0.046012, 0.046003, 0.045967, 0.045868, 0.045670",\ + "0.095119, 0.095111, 0.095078, 0.094988, 0.094807",\ + "0.188959, 0.188960, 0.188961, 0.188966, 0.188975",\ + "0.443992, 0.443992, 0.443991, 0.443987, 0.443980",\ + "1.101604, 1.101603, 1.101601, 1.101596, 1.101585"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[2]_redg*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[33]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.687749, 0.939290, 1.220370, 1.693212, 2.638895",\ + "0.733976, 0.985517, 1.266598, 1.739441, 2.685128",\ + "0.818208, 1.069748, 1.350828, 1.823670, 2.769354",\ + "1.039147, 1.290687, 1.571764, 2.044601, 2.990274",\ + "1.599449, 1.850988, 2.132060, 2.604883, 3.550529",\ + "0.775154, 1.026875, 1.307946, 1.779925, 2.724829",\ + "0.821381, 1.073102, 1.354175, 1.826155, 2.771062",\ + "0.905613, 1.157333, 1.438405, 1.910384, 2.855288",\ + "1.126552, 1.378272, 1.659341, 2.131315, 3.076208",\ + "1.686854, 1.938572, 2.219636, 2.691597, 3.636462",\ + "0.855968, 1.115908, 1.395910, 1.867546, 2.811784",\ + "0.902195, 1.162135, 1.442138, 1.913776, 2.858017",\ + "0.986426, 1.246367, 1.526368, 1.998005, 2.942243",\ + "1.207365, 1.467305, 1.747304, 2.218936, 3.163163",\ + "1.767667, 2.027606, 2.307599, 2.779218, 3.723417",\ + "0.913586, 1.181618, 1.460050, 1.931459, 2.875293",\ + "0.959814, 1.227846, 1.506278, 1.977689, 2.921526",\ + "1.044045, 1.312077, 1.590508, 2.061918, 3.005752",\ + "1.264984, 1.533015, 1.811444, 2.282849, 3.226672",\ + "1.825286, 2.093316, 2.371740, 2.843130, 3.786926",\ + "1.247292, 1.546964, 1.811953, 2.280817, 3.220749",\ + "1.293519, 1.593192, 1.858181, 2.327047, 3.266982",\ + "1.377751, 1.677423, 1.942412, 2.411276, 3.351208",\ + "1.598690, 1.898361, 2.163348, 2.632206, 3.572128",\ + "2.158992, 2.458661, 2.723643, 3.192488, 4.132382"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.053020, 0.053023, 0.053033, 0.053059, 0.053110",\ + "0.178802, 0.178805, 0.178823, 0.178866, 0.178953",\ + "0.381846, 0.381847, 0.381856, 0.381876, 0.381916",\ + "0.885629, 0.885621, 0.885582, 0.885489, 0.885303",\ + "2.162833, 2.162845, 2.162902, 2.163039, 2.163313",\ + "0.053020, 0.053023, 0.053033, 0.053059, 0.053110",\ + "0.178802, 0.178805, 0.178823, 0.178866, 0.178953",\ + "0.381846, 0.381847, 0.381856, 0.381876, 0.381916",\ + "0.885629, 0.885621, 0.885582, 0.885489, 0.885303",\ + "2.162833, 2.162845, 2.162903, 2.163039, 2.163313",\ + "0.053020, 0.053023, 0.053033, 0.053059, 0.053110",\ + "0.178802, 0.178805, 0.178823, 0.178866, 0.178953",\ + "0.381846, 0.381847, 0.381856, 0.381876, 0.381916",\ + "0.885629, 0.885621, 0.885582, 0.885489, 0.885303",\ + "2.162833, 2.162846, 2.162903, 2.163039, 2.163313",\ + "0.053020, 0.053023, 0.053033, 0.053059, 0.053110",\ + "0.178802, 0.178805, 0.178823, 0.178866, 0.178953",\ + "0.381846, 0.381847, 0.381856, 0.381876, 0.381916",\ + "0.885629, 0.885621, 0.885582, 0.885489, 0.885303",\ + "2.162833, 2.162846, 2.162903, 2.163039, 2.163313",\ + "0.053020, 0.053023, 0.053033, 0.053059, 0.053110",\ + "0.178802, 0.178807, 0.178824, 0.178867, 0.178953",\ + "0.381846, 0.381848, 0.381856, 0.381876, 0.381916",\ + "0.885629, 0.885618, 0.885581, 0.885489, 0.885303",\ + "2.162833, 2.162850, 2.162904, 2.163039, 2.163313"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.636768, 0.888313, 1.169416, 1.642313, 2.588106",\ + "0.679456, 0.930997, 1.212076, 1.684915, 2.630593",\ + "0.735206, 0.986745, 1.267823, 1.740657, 2.686327",\ + "0.870915, 1.122456, 1.403536, 1.876378, 2.822062",\ + "1.220279, 1.471821, 1.752903, 2.225752, 3.171448",\ + "0.724173, 0.975898, 1.256993, 1.729026, 2.674040",\ + "0.766861, 1.018582, 1.299652, 1.771628, 2.716527",\ + "0.822611, 1.074330, 1.355399, 1.827371, 2.772260",\ + "0.958320, 1.210041, 1.491113, 1.963092, 2.907996",\ + "1.307685, 1.559406, 1.840480, 2.312465, 3.257382",\ + "0.804986, 1.064932, 1.344956, 1.816648, 2.760995",\ + "0.847675, 1.107615, 1.387615, 1.859249, 2.803482",\ + "0.903424, 1.163364, 1.443362, 1.914992, 2.859215",\ + "1.039134, 1.299074, 1.579076, 2.050713, 2.994951",\ + "1.388498, 1.648439, 1.928443, 2.400086, 3.344337",\ + "0.862605, 1.130642, 1.409096, 1.880560, 2.824504",\ + "0.905293, 1.173325, 1.451756, 1.923162, 2.866991",\ + "0.961043, 1.229074, 1.507503, 1.978905, 2.922724",\ + "1.096752, 1.364785, 1.643216, 2.114626, 3.058460",\ + "1.446117, 1.714149, 1.992583, 2.463999, 3.407846",\ + "1.196311, 1.495989, 1.761000, 2.229918, 3.169960",\ + "1.238999, 1.538671, 1.803659, 2.272520, 3.212447",\ + "1.294749, 1.594420, 1.859406, 2.328263, 3.268181",\ + "1.430458, 1.730130, 1.995120, 2.463984, 3.403916",\ + "1.779823, 2.079495, 2.344487, 2.813357, 3.753302"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.046010, 0.046003, 0.045965, 0.045875, 0.045695",\ + "0.095118, 0.095111, 0.095077, 0.094995, 0.094830",\ + "0.188959, 0.188960, 0.188961, 0.188966, 0.188974",\ + "0.443992, 0.443992, 0.443991, 0.443988, 0.443981",\ + "1.101604, 1.101603, 1.101601, 1.101596, 1.101586",\ + "0.046010, 0.046002, 0.045965, 0.045875, 0.045695",\ + "0.095118, 0.095111, 0.095077, 0.094995, 0.094830",\ + "0.188959, 0.188960, 0.188961, 0.188966, 0.188974",\ + "0.443992, 0.443992, 0.443991, 0.443988, 0.443981",\ + "1.101604, 1.101603, 1.101601, 1.101596, 1.101586",\ + "0.046010, 0.046002, 0.045965, 0.045875, 0.045695",\ + "0.095118, 0.095111, 0.095077, 0.094995, 0.094830",\ + "0.188959, 0.188960, 0.188961, 0.188966, 0.188974",\ + "0.443992, 0.443992, 0.443991, 0.443988, 0.443981",\ + "1.101604, 1.101603, 1.101601, 1.101596, 1.101586",\ + "0.046010, 0.046002, 0.045965, 0.045875, 0.045695",\ + "0.095118, 0.095111, 0.095077, 0.094995, 0.094830",\ + "0.188959, 0.188960, 0.188962, 0.188966, 0.188974",\ + "0.443992, 0.443992, 0.443991, 0.443988, 0.443981",\ + "1.101604, 1.101603, 1.101601, 1.101596, 1.101586",\ + "0.046010, 0.045999, 0.045964, 0.045875, 0.045695",\ + "0.095118, 0.095108, 0.095076, 0.094994, 0.094830",\ + "0.188959, 0.188960, 0.188962, 0.188966, 0.188974",\ + "0.443992, 0.443992, 0.443991, 0.443988, 0.443981",\ + "1.101604, 1.101603, 1.101601, 1.101596, 1.101586"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[2]_redg_2370*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[34]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.622933, 0.904214, 1.205191, 1.719790, 2.748989",\ + "0.669468, 0.950758, 1.251803, 1.766599, 2.796192",\ + "0.755125, 1.036441, 1.337680, 1.853039, 2.883759",\ + "0.978478, 1.259834, 1.561373, 2.077602, 3.110059",\ + "1.542469, 1.823877, 2.125806, 2.643168, 3.677893",\ + "0.710344, 0.991835, 1.292902, 1.806505, 2.834923",\ + "0.756879, 1.038379, 1.339514, 1.853314, 2.882126",\ + "0.842536, 1.124062, 1.425393, 1.939754, 2.969692",\ + "1.065890, 1.347456, 1.649089, 2.164316, 3.195993",\ + "1.629880, 1.911499, 2.213525, 2.729883, 3.763827",\ + "0.799646, 1.080982, 1.380869, 1.894127, 2.921878",\ + "0.846182, 1.127527, 1.427481, 1.940936, 2.969081",\ + "0.931839, 1.213210, 1.513360, 2.027376, 3.056648",\ + "1.155193, 1.436604, 1.737056, 2.251938, 3.282948",\ + "1.719185, 2.000648, 2.301492, 2.817505, 3.850782",\ + "0.863267, 1.146859, 1.445016, 1.958041, 2.985387",\ + "0.909803, 1.193403, 1.491629, 2.004849, 3.032590",\ + "0.995460, 1.279087, 1.577507, 2.091290, 3.120157",\ + "1.218815, 1.502483, 1.801203, 2.315852, 3.346457",\ + "1.782807, 2.066528, 2.365640, 2.881418, 3.914291",\ + "1.199521, 1.514063, 1.797347, 2.307577, 3.330843",\ + "1.246057, 1.560610, 1.843961, 2.354387, 3.378046",\ + "1.331717, 1.646302, 1.929846, 2.440829, 3.465612",\ + "1.555075, 1.869709, 2.153550, 2.665395, 3.691913",\ + "2.119071, 2.433770, 2.717999, 3.230966, 4.259747"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.052243, 0.052269, 0.054671, 0.062895, 0.079343",\ + "0.174393, 0.174375, 0.174239, 0.173844, 0.173056",\ + "0.378107, 0.378064, 0.377824, 0.377171, 0.375864",\ + "0.885321, 0.885201, 0.884881, 0.884213, 0.882876",\ + "2.163287, 2.163464, 2.163713, 2.163931, 2.164366",\ + "0.052243, 0.052269, 0.054697, 0.062895, 0.079343",\ + "0.174393, 0.174374, 0.174237, 0.173844, 0.173056",\ + "0.378107, 0.378064, 0.377822, 0.377171, 0.375864",\ + "0.885321, 0.885200, 0.884879, 0.884213, 0.882876",\ + "2.163287, 2.163465, 2.163714, 2.163931, 2.164366",\ + "0.052243, 0.052270, 0.054697, 0.062895, 0.079343",\ + "0.174392, 0.174374, 0.174237, 0.173844, 0.173056",\ + "0.378106, 0.378063, 0.377822, 0.377171, 0.375864",\ + "0.885318, 0.885198, 0.884879, 0.884213, 0.882876",\ + "2.163292, 2.163468, 2.163714, 2.163931, 2.164366",\ + "0.052244, 0.052270, 0.054698, 0.062895, 0.079343",\ + "0.174392, 0.174374, 0.174237, 0.173844, 0.173056",\ + "0.378106, 0.378062, 0.377822, 0.377171, 0.375864",\ + "0.885315, 0.885196, 0.884879, 0.884213, 0.882876",\ + "2.163296, 2.163471, 2.163714, 2.163931, 2.164366",\ + "0.052246, 0.052278, 0.054782, 0.062929, 0.079343",\ + "0.174391, 0.174368, 0.174233, 0.173843, 0.173056",\ + "0.378102, 0.378049, 0.377815, 0.377168, 0.375864",\ + "0.885300, 0.885164, 0.884872, 0.884210, 0.882876",\ + "2.163318, 2.163518, 2.163716, 2.163932, 2.164366"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.561209, 0.842364, 1.145718, 1.669104, 2.715876",\ + "0.614604, 0.895880, 1.196912, 1.711724, 2.741347",\ + "0.675435, 0.956806, 1.258457, 1.775014, 2.808127",\ + "0.810139, 1.091502, 1.393093, 1.909477, 2.942242",\ + "1.156606, 1.437920, 1.739149, 2.254480, 3.285141",\ + "0.648620, 0.929984, 1.233457, 1.755819, 2.801810",\ + "0.702015, 0.983501, 1.284623, 1.798438, 2.827281",\ + "0.762846, 1.044428, 1.346174, 1.861729, 2.894061",\ + "0.897551, 1.179124, 1.480810, 1.996191, 3.028176",\ + "1.244017, 1.525542, 1.826863, 2.341195, 3.371075",\ + "0.737920, 1.019129, 1.321424, 1.843441, 2.888765",\ + "0.791317, 1.072648, 1.372590, 1.886060, 2.914236",\ + "0.852150, 1.133576, 1.434141, 1.949351, 2.981016",\ + "0.986854, 1.268272, 1.568777, 2.083813, 3.115131",\ + "1.333320, 1.614689, 1.914829, 2.428817, 3.458030",\ + "0.801540, 1.085002, 1.385573, 1.907354, 2.952274",\ + "0.854938, 1.138524, 1.436738, 1.949974, 2.977745",\ + "0.915772, 1.199455, 1.498289, 2.013264, 3.044525",\ + "1.050476, 1.334151, 1.632925, 2.147727, 3.178640",\ + "1.396941, 1.680567, 1.978977, 2.492730, 3.521539",\ + "1.137784, 1.452168, 1.737993, 2.256927, 3.297729",\ + "1.191192, 1.505727, 1.789070, 2.299511, 3.323201",\ + "1.252033, 1.566686, 1.850639, 2.362809, 3.389981",\ + "1.386736, 1.701380, 1.985273, 2.497271, 3.524096",\ + "1.733197, 2.047781, 2.331315, 2.842270, 3.866995"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.060194, 0.060374, 0.061744, 0.065730, 0.073703",\ + "0.114206, 0.114454, 0.116316, 0.121721, 0.132532",\ + "0.199891, 0.200118, 0.201818, 0.206753, 0.216623",\ + "0.445510, 0.445535, 0.445725, 0.446277, 0.447381",\ + "1.101426, 1.101414, 1.101326, 1.101071, 1.100560",\ + "0.060194, 0.060375, 0.061757, 0.065730, 0.073703",\ + "0.114206, 0.114455, 0.116333, 0.121721, 0.132532",\ + "0.199891, 0.200119, 0.201834, 0.206753, 0.216623",\ + "0.445510, 0.445535, 0.445727, 0.446277, 0.447381",\ + "1.101426, 1.101414, 1.101325, 1.101071, 1.100560",\ + "0.060197, 0.060379, 0.061757, 0.065730, 0.073703",\ + "0.114210, 0.114460, 0.116333, 0.121721, 0.132532",\ + "0.199895, 0.200123, 0.201834, 0.206753, 0.216623",\ + "0.445510, 0.445535, 0.445727, 0.446277, 0.447381",\ + "1.101426, 1.101414, 1.101325, 1.101071, 1.100560",\ + "0.060200, 0.060383, 0.061757, 0.065730, 0.073703",\ + "0.114213, 0.114466, 0.116334, 0.121721, 0.132532",\ + "0.199898, 0.200129, 0.201835, 0.206753, 0.216623",\ + "0.445510, 0.445536, 0.445727, 0.446277, 0.447381",\ + "1.101425, 1.101413, 1.101325, 1.101071, 1.100560",\ + "0.060213, 0.060438, 0.061798, 0.065747, 0.073703",\ + "0.114232, 0.114541, 0.116389, 0.121744, 0.132532",\ + "0.199915, 0.200198, 0.201885, 0.206773, 0.216623",\ + "0.445512, 0.445544, 0.445733, 0.446279, 0.447381",\ + "1.101425, 1.101410, 1.101323, 1.101070, 1.100560"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[2]_redg_2367*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[41]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.746470, 1.014882, 1.306808, 1.802638, 2.794297",\ + "0.792702, 1.061114, 1.353041, 1.848873, 2.840536",\ + "0.876929, 1.145341, 1.437267, 1.933097, 2.924756",\ + "1.097854, 1.366266, 1.658190, 2.154013, 3.145659",\ + "1.658121, 1.926532, 2.218450, 2.714257, 3.705872",\ + "0.833878, 1.102487, 1.394459, 1.889352, 2.880230",\ + "0.880110, 1.148719, 1.440691, 1.935587, 2.926469",\ + "0.964337, 1.232946, 1.524917, 2.019811, 3.010689",\ + "1.185262, 1.453871, 1.745840, 2.240727, 3.231593",\ + "1.745530, 2.014137, 2.306100, 2.800972, 3.791806",\ + "0.914792, 1.191581, 1.482424, 1.976974, 2.967185",\ + "0.961024, 1.237813, 1.528656, 2.023208, 3.013424",\ + "1.045251, 1.322040, 1.612882, 2.107432, 3.097644",\ + "1.266176, 1.542965, 1.833805, 2.328349, 3.318548",\ + "1.826444, 2.103231, 2.394065, 2.888593, 3.878761",\ + "0.976718, 1.257380, 1.546568, 2.040887, 3.030694",\ + "1.022949, 1.303612, 1.592801, 2.087121, 3.076933",\ + "1.107176, 1.387838, 1.677027, 2.171345, 3.161153",\ + "1.328102, 1.608763, 1.897949, 2.392262, 3.382057",\ + "1.888369, 2.169030, 2.458210, 2.952506, 3.942270",\ + "1.314895, 1.623717, 1.898706, 2.390343, 3.376151",\ + "1.361127, 1.669949, 1.944939, 2.436577, 3.422390",\ + "1.445354, 1.754176, 2.029165, 2.520801, 3.506609",\ + "1.666279, 1.975101, 2.250087, 2.741717, 3.727513",\ + "2.226547, 2.535367, 2.810348, 3.301962, 4.287725"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.053085, 0.053087, 0.053099, 0.053129, 0.053189",\ + "0.178912, 0.178915, 0.178935, 0.178986, 0.179088",\ + "0.381897, 0.381898, 0.381907, 0.381931, 0.381978",\ + "0.885391, 0.885384, 0.885342, 0.885232, 0.885012",\ + "2.163183, 2.163193, 2.163255, 2.163418, 2.163742",\ + "0.053085, 0.053087, 0.053099, 0.053129, 0.053189",\ + "0.178912, 0.178915, 0.178935, 0.178986, 0.179088",\ + "0.381897, 0.381898, 0.381907, 0.381931, 0.381978",\ + "0.885391, 0.885384, 0.885342, 0.885232, 0.885012",\ + "2.163183, 2.163194, 2.163256, 2.163418, 2.163742",\ + "0.053085, 0.053087, 0.053099, 0.053129, 0.053189",\ + "0.178912, 0.178915, 0.178935, 0.178986, 0.179088",\ + "0.381897, 0.381898, 0.381907, 0.381931, 0.381978",\ + "0.885391, 0.885384, 0.885342, 0.885232, 0.885012",\ + "2.163183, 2.163194, 2.163256, 2.163418, 2.163742",\ + "0.053085, 0.053087, 0.053099, 0.053129, 0.053189",\ + "0.178912, 0.178915, 0.178935, 0.178986, 0.179088",\ + "0.381897, 0.381898, 0.381907, 0.381931, 0.381978",\ + "0.885391, 0.885384, 0.885342, 0.885232, 0.885012",\ + "2.163183, 2.163194, 2.163256, 2.163418, 2.163742",\ + "0.053085, 0.053088, 0.053099, 0.053129, 0.053189",\ + "0.178912, 0.178916, 0.178935, 0.178986, 0.179088",\ + "0.381897, 0.381899, 0.381907, 0.381931, 0.381978",\ + "0.885391, 0.885382, 0.885341, 0.885232, 0.885012",\ + "2.163183, 2.163198, 2.163258, 2.163418, 2.163742"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.695629, 0.964045, 1.256010, 1.751953, 2.743838",\ + "0.738170, 1.006582, 1.298507, 1.794334, 2.785986",\ + "0.793908, 1.062320, 1.354243, 1.850064, 2.841706",\ + "0.929637, 1.198049, 1.489976, 1.985806, 2.977466",\ + "1.279017, 1.547430, 1.839359, 2.335196, 3.326870",\ + "0.783037, 1.051650, 1.343661, 1.838667, 2.829772",\ + "0.825579, 1.094187, 1.386158, 1.881048, 2.871920",\ + "0.881317, 1.149925, 1.441893, 1.936778, 2.927640",\ + "1.017045, 1.285654, 1.577626, 2.072520, 3.063399",\ + "1.366425, 1.635035, 1.927009, 2.421910, 3.412804",\ + "0.863951, 1.140744, 1.431626, 1.926289, 2.916727",\ + "0.906492, 1.183281, 1.474123, 1.968669, 2.958875",\ + "0.962231, 1.239019, 1.529858, 2.024400, 3.014595",\ + "1.097959, 1.374748, 1.665591, 2.160141, 3.150354",\ + "1.447339, 1.724128, 2.014974, 2.509532, 3.499759",\ + "0.925877, 1.206543, 1.495770, 1.990202, 2.980236",\ + "0.968418, 1.249080, 1.538267, 2.032583, 3.022384",\ + "1.024156, 1.304818, 1.594002, 2.088313, 3.078104",\ + "1.159885, 1.440547, 1.729735, 2.224055, 3.213863",\ + "1.509265, 1.789927, 2.079118, 2.573445, 3.563268",\ + "1.264054, 1.572882, 1.847910, 2.339658, 3.325692",\ + "1.306595, 1.615417, 1.890405, 2.382038, 3.367840",\ + "1.362333, 1.671155, 1.946141, 2.437769, 3.423560",\ + "1.498062, 1.806884, 2.081874, 2.573510, 3.559319",\ + "1.847442, 2.156265, 2.431257, 2.922901, 3.908724"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.045780, 0.045773, 0.045733, 0.045626, 0.045413",\ + "0.094908, 0.094902, 0.094864, 0.094767, 0.094572",\ + "0.188970, 0.188970, 0.188972, 0.188977, 0.188987",\ + "0.443984, 0.443984, 0.443983, 0.443979, 0.443971",\ + "1.101591, 1.101591, 1.101588, 1.101583, 1.101571",\ + "0.045780, 0.045773, 0.045733, 0.045626, 0.045413",\ + "0.094908, 0.094902, 0.094864, 0.094767, 0.094572",\ + "0.188970, 0.188970, 0.188972, 0.188977, 0.188987",\ + "0.443984, 0.443984, 0.443983, 0.443979, 0.443971",\ + "1.101591, 1.101591, 1.101588, 1.101583, 1.101571",\ + "0.045780, 0.045773, 0.045733, 0.045626, 0.045413",\ + "0.094908, 0.094901, 0.094864, 0.094767, 0.094572",\ + "0.188970, 0.188970, 0.188972, 0.188977, 0.188987",\ + "0.443984, 0.443984, 0.443983, 0.443979, 0.443971",\ + "1.101591, 1.101591, 1.101588, 1.101583, 1.101571",\ + "0.045780, 0.045773, 0.045732, 0.045626, 0.045413",\ + "0.094908, 0.094901, 0.094864, 0.094767, 0.094572",\ + "0.188970, 0.188970, 0.188972, 0.188977, 0.188987",\ + "0.443984, 0.443984, 0.443983, 0.443979, 0.443971",\ + "1.101591, 1.101591, 1.101588, 1.101583, 1.101571",\ + "0.045780, 0.045771, 0.045731, 0.045626, 0.045413",\ + "0.094908, 0.094899, 0.094863, 0.094766, 0.094572",\ + "0.188970, 0.188970, 0.188972, 0.188977, 0.188987",\ + "0.443984, 0.443984, 0.443983, 0.443979, 0.443971",\ + "1.101591, 1.101591, 1.101588, 1.101583, 1.101571"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[2]_redg_2564*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[42]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.720239, 0.982131, 1.267428, 1.744868, 2.699749",\ + "0.766471, 1.028363, 1.313660, 1.791102, 2.745986",\ + "0.850698, 1.112590, 1.397886, 1.875327, 2.830208",\ + "1.071623, 1.333515, 1.618809, 2.096245, 3.051117",\ + "1.631890, 1.893781, 2.179071, 2.656495, 3.611344",\ + "0.807647, 1.069728, 1.355020, 1.831583, 2.785683",\ + "0.853879, 1.115960, 1.401253, 1.877816, 2.831920",\ + "0.938106, 1.200187, 1.485479, 1.962041, 2.916142",\ + "1.159031, 1.421112, 1.706402, 2.182960, 3.137051",\ + "1.719299, 1.981378, 2.266663, 2.743210, 3.697278",\ + "0.888462, 1.158804, 1.442984, 1.919204, 2.872638",\ + "0.934694, 1.205035, 1.489217, 1.965438, 2.918875",\ + "1.018921, 1.289262, 1.573443, 2.049663, 3.003097",\ + "1.239846, 1.510187, 1.794366, 2.270581, 3.224006",\ + "1.800113, 2.070453, 2.354627, 2.830831, 3.784233",\ + "0.949702, 1.224575, 1.507125, 1.983117, 2.936147",\ + "0.995934, 1.270807, 1.553358, 2.029351, 2.982384",\ + "1.080161, 1.355034, 1.637584, 2.113576, 3.066606",\ + "1.301086, 1.575958, 1.858507, 2.334494, 3.287515",\ + "1.861354, 2.136225, 2.418768, 2.894744, 3.847742",\ + "1.285416, 1.590595, 1.859077, 2.332497, 3.281603",\ + "1.331648, 1.636827, 1.905309, 2.378731, 3.327840",\ + "1.415875, 1.721054, 1.989536, 2.462955, 3.412062",\ + "1.636800, 1.941979, 2.210458, 2.683874, 3.632971",\ + "2.197067, 2.502244, 2.770720, 3.244124, 4.193198"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.053086, 0.053088, 0.053097, 0.053119, 0.053163",\ + "0.178912, 0.178915, 0.178931, 0.178968, 0.179043",\ + "0.381897, 0.381898, 0.381905, 0.381923, 0.381957",\ + "0.885390, 0.885384, 0.885350, 0.885270, 0.885109",\ + "2.163185, 2.163195, 2.163244, 2.163362, 2.163599",\ + "0.053086, 0.053088, 0.053097, 0.053119, 0.053163",\ + "0.178912, 0.178915, 0.178931, 0.178968, 0.179043",\ + "0.381897, 0.381898, 0.381905, 0.381923, 0.381957",\ + "0.885390, 0.885384, 0.885350, 0.885270, 0.885109",\ + "2.163185, 2.163195, 2.163244, 2.163362, 2.163599",\ + "0.053086, 0.053088, 0.053097, 0.053119, 0.053163",\ + "0.178912, 0.178916, 0.178931, 0.178968, 0.179043",\ + "0.381897, 0.381898, 0.381905, 0.381923, 0.381957",\ + "0.885390, 0.885383, 0.885350, 0.885270, 0.885109",\ + "2.163185, 2.163195, 2.163244, 2.163362, 2.163599",\ + "0.053086, 0.053088, 0.053097, 0.053119, 0.053163",\ + "0.178912, 0.178916, 0.178931, 0.178968, 0.179043",\ + "0.381897, 0.381898, 0.381905, 0.381923, 0.381957",\ + "0.885390, 0.885383, 0.885350, 0.885270, 0.885109",\ + "2.163185, 2.163195, 2.163244, 2.163362, 2.163599",\ + "0.053086, 0.053088, 0.053097, 0.053119, 0.053163",\ + "0.178912, 0.178917, 0.178931, 0.178968, 0.179043",\ + "0.381897, 0.381899, 0.381906, 0.381923, 0.381957",\ + "0.885390, 0.885381, 0.885349, 0.885270, 0.885109",\ + "2.163185, 2.163199, 2.163245, 2.163363, 2.163599"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.669399, 0.931295, 1.216611, 1.694099, 2.649075",\ + "0.711939, 0.973832, 1.259127, 1.736565, 2.691442",\ + "0.767677, 1.029569, 1.314863, 1.792297, 2.747166",\ + "0.903406, 1.165299, 1.450595, 1.928036, 2.882917",\ + "1.252786, 1.514679, 1.799978, 2.277424, 3.232316",\ + "0.756807, 1.018892, 1.304204, 1.780813, 2.735009",\ + "0.799348, 1.061428, 1.346719, 1.823279, 2.777375",\ + "0.855086, 1.117166, 1.402455, 1.879012, 2.833100",\ + "0.990815, 1.252895, 1.538187, 2.014750, 2.968851",\ + "1.340194, 1.602276, 1.887570, 2.364138, 3.318250",\ + "0.837622, 1.107967, 1.392168, 1.868435, 2.821964",\ + "0.880162, 1.150504, 1.434683, 1.910901, 2.864330",\ + "0.935900, 1.206241, 1.490419, 1.966633, 2.920055",\ + "1.071629, 1.341971, 1.626151, 2.102372, 3.055806",\ + "1.421009, 1.691351, 1.975534, 2.451760, 3.405205",\ + "0.898862, 1.173739, 1.456309, 1.932348, 2.885473",\ + "0.941403, 1.216275, 1.498824, 1.974814, 2.927839",\ + "0.997141, 1.272013, 1.554560, 2.030546, 2.983564",\ + "1.132869, 1.407742, 1.690292, 2.166285, 3.119315",\ + "1.482249, 1.757123, 2.039675, 2.515673, 3.468714",\ + "1.234576, 1.539761, 1.808261, 2.281728, 3.230929",\ + "1.277116, 1.582295, 1.850776, 2.324194, 3.273295",\ + "1.332854, 1.638033, 1.906512, 2.379926, 3.329020",\ + "1.468583, 1.773762, 2.042244, 2.515665, 3.464771",\ + "1.817963, 2.123143, 2.391627, 2.865052, 3.814170"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.045779, 0.045773, 0.045741, 0.045663, 0.045507",\ + "0.094907, 0.094901, 0.094871, 0.094800, 0.094658",\ + "0.188970, 0.188970, 0.188972, 0.188975, 0.188983",\ + "0.443984, 0.443984, 0.443983, 0.443980, 0.443975",\ + "1.101591, 1.101591, 1.101589, 1.101584, 1.101576",\ + "0.045779, 0.045773, 0.045740, 0.045663, 0.045507",\ + "0.094907, 0.094901, 0.094871, 0.094800, 0.094658",\ + "0.188970, 0.188970, 0.188972, 0.188975, 0.188983",\ + "0.443984, 0.443984, 0.443983, 0.443980, 0.443975",\ + "1.101591, 1.101591, 1.101589, 1.101584, 1.101576",\ + "0.045779, 0.045773, 0.045740, 0.045663, 0.045507",\ + "0.094907, 0.094901, 0.094871, 0.094800, 0.094658",\ + "0.188970, 0.188970, 0.188972, 0.188975, 0.188983",\ + "0.443984, 0.443984, 0.443983, 0.443980, 0.443975",\ + "1.101591, 1.101591, 1.101589, 1.101584, 1.101576",\ + "0.045779, 0.045772, 0.045740, 0.045663, 0.045507",\ + "0.094907, 0.094901, 0.094871, 0.094800, 0.094658",\ + "0.188970, 0.188970, 0.188972, 0.188975, 0.188983",\ + "0.443984, 0.443984, 0.443983, 0.443980, 0.443975",\ + "1.101591, 1.101591, 1.101589, 1.101584, 1.101576",\ + "0.045779, 0.045770, 0.045740, 0.045662, 0.045507",\ + "0.094907, 0.094898, 0.094871, 0.094800, 0.094658",\ + "0.188970, 0.188970, 0.188972, 0.188975, 0.188983",\ + "0.443984, 0.443984, 0.443983, 0.443980, 0.443975",\ + "1.101591, 1.101590, 1.101589, 1.101584, 1.101576"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[2]_redg_2515*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[45]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.505424, 0.768046, 1.055041, 1.540850, 2.512468",\ + "0.551960, 0.814596, 1.101656, 1.587624, 2.559559",\ + "0.637620, 0.900293, 1.187543, 1.673963, 2.646803",\ + "0.860979, 1.123711, 1.411252, 1.898370, 2.872607",\ + "1.424976, 1.687784, 1.975705, 2.463734, 3.439793",\ + "0.593483, 0.855643, 1.142658, 1.627564, 2.598402",\ + "0.640020, 0.902192, 1.189274, 1.674337, 2.645493",\ + "0.725680, 0.987891, 1.275163, 1.760677, 2.732737",\ + "0.949039, 1.211309, 1.498873, 1.985084, 2.958541",\ + "1.513036, 1.775383, 2.063330, 2.550448, 3.525727",\ + "0.682045, 0.944707, 1.230622, 1.715185, 2.685357",\ + "0.728581, 0.991257, 1.277238, 1.761959, 2.732448",\ + "0.814241, 1.076956, 1.363127, 1.848298, 2.819692",\ + "1.037599, 1.300375, 1.586838, 2.072705, 3.045496",\ + "1.601596, 1.864452, 2.151294, 2.638070, 3.612682",\ + "0.745042, 1.010463, 1.294765, 1.779098, 2.748866",\ + "0.791578, 1.057013, 1.341381, 1.825872, 2.795957",\ + "0.877238, 1.142714, 1.427269, 1.912211, 2.883201",\ + "1.100596, 1.366135, 1.650980, 2.136618, 3.109005",\ + "1.664593, 1.930213, 2.215437, 2.701982, 3.676191",\ + "1.077301, 1.376325, 1.646801, 2.128510, 3.094322",\ + "1.123837, 1.422881, 1.693418, 2.175285, 3.141412",\ + "1.209496, 1.508595, 1.779311, 2.261626, 3.228657",\ + "1.432853, 1.732038, 2.003029, 2.486036, 3.454461",\ + "1.996848, 2.296144, 2.567495, 3.051404, 4.021647"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.052246, 0.052286, 0.053457, 0.057279, 0.064922",\ + "0.174390, 0.174392, 0.174392, 0.174392, 0.174392",\ + "0.378101, 0.378105, 0.378105, 0.378105, 0.378105",\ + "0.885463, 0.885472, 0.885472, 0.885472, 0.885472",\ + "2.163077, 2.163087, 2.163255, 2.163786, 2.164848",\ + "0.052246, 0.052286, 0.053469, 0.057279, 0.064922",\ + "0.174390, 0.174392, 0.174392, 0.174392, 0.174392",\ + "0.378101, 0.378105, 0.378105, 0.378105, 0.378105",\ + "0.885464, 0.885472, 0.885472, 0.885472, 0.885472",\ + "2.163077, 2.163087, 2.163257, 2.163786, 2.164848",\ + "0.052246, 0.052287, 0.053469, 0.057279, 0.064922",\ + "0.174390, 0.174392, 0.174392, 0.174392, 0.174392",\ + "0.378102, 0.378105, 0.378105, 0.378105, 0.378105",\ + "0.885464, 0.885472, 0.885472, 0.885472, 0.885472",\ + "2.163077, 2.163087, 2.163257, 2.163786, 2.164848",\ + "0.052246, 0.052288, 0.053470, 0.057279, 0.064922",\ + "0.174390, 0.174392, 0.174392, 0.174392, 0.174392",\ + "0.378102, 0.378105, 0.378105, 0.378105, 0.378105",\ + "0.885465, 0.885472, 0.885472, 0.885472, 0.885472",\ + "2.163077, 2.163087, 2.163257, 2.163786, 2.164848",\ + "0.052246, 0.052302, 0.053509, 0.057295, 0.064922",\ + "0.174391, 0.174392, 0.174392, 0.174392, 0.174392",\ + "0.378103, 0.378105, 0.378105, 0.378105, 0.378105",\ + "0.885469, 0.885472, 0.885472, 0.885472, 0.885472",\ + "2.163077, 2.163090, 2.163262, 2.163788, 2.164848"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.443684, 0.706121, 0.992534, 1.477296, 2.446822",\ + "0.497094, 0.759709, 1.046667, 1.532387, 2.503829",\ + "0.557938, 0.820691, 1.108342, 1.595724, 2.570488",\ + "0.692641, 0.955383, 1.242975, 1.730217, 2.704702",\ + "1.039101, 1.301772, 1.589012, 2.075409, 3.048203",\ + "0.531743, 0.793716, 1.080148, 1.564010, 2.532755",\ + "0.585154, 0.847306, 1.134284, 1.619101, 2.589763",\ + "0.645997, 0.908289, 1.195965, 1.682438, 2.656422",\ + "0.780700, 1.042981, 1.330598, 1.816931, 2.790636",\ + "1.127160, 1.389370, 1.676632, 2.162122, 3.134136",\ + "0.620305, 0.882776, 1.168112, 1.651631, 2.619710",\ + "0.673715, 0.936370, 1.222248, 1.706723, 2.676718",\ + "0.734558, 0.997357, 1.283929, 1.770059, 2.743377",\ + "0.869261, 1.132048, 1.418562, 1.904553, 2.877591",\ + "1.215722, 1.478435, 1.764596, 2.249744, 3.221091",\ + "0.683303, 0.948526, 1.232255, 1.715544, 2.683219",\ + "0.736712, 1.002125, 1.286391, 1.770636, 2.740227",\ + "0.797555, 1.063117, 1.348072, 1.833972, 2.806886",\ + "0.932258, 1.197807, 1.482705, 1.968466, 2.941100",\ + "1.278719, 1.544192, 1.828738, 2.313657, 3.284600",\ + "1.015567, 1.314320, 1.584279, 2.064952, 3.028676",\ + "1.068972, 1.367985, 1.638425, 2.120048, 3.085683",\ + "1.129811, 1.429028, 1.700123, 2.183391, 3.152342",\ + "1.264514, 1.563714, 1.834755, 2.317884, 3.286556",\ + "1.610977, 1.910073, 2.180780, 2.663072, 3.630056"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.060218, 0.060490, 0.061813, 0.065017, 0.071424",\ + "0.114238, 0.114613, 0.116413, 0.120756, 0.129442",\ + "0.199921, 0.200263, 0.201907, 0.205872, 0.213802",\ + "0.445513, 0.445551, 0.445735, 0.446179, 0.447066",\ + "1.101424, 1.101424, 1.101424, 1.101424, 1.101424",\ + "0.060218, 0.060493, 0.061823, 0.065017, 0.071424",\ + "0.114238, 0.114616, 0.116427, 0.120756, 0.129442",\ + "0.199921, 0.200266, 0.201919, 0.205872, 0.213802",\ + "0.445513, 0.445551, 0.445736, 0.446179, 0.447066",\ + "1.101424, 1.101424, 1.101424, 1.101424, 1.101424",\ + "0.060218, 0.060498, 0.061824, 0.065017, 0.071424",\ + "0.114238, 0.114624, 0.116427, 0.120756, 0.129442",\ + "0.199921, 0.200273, 0.201920, 0.205872, 0.213802",\ + "0.445513, 0.445552, 0.445736, 0.446179, 0.447066",\ + "1.101424, 1.101424, 1.101424, 1.101424, 1.101424",\ + "0.060218, 0.060507, 0.061824, 0.065017, 0.071424",\ + "0.114238, 0.114635, 0.116428, 0.120756, 0.129442",\ + "0.199921, 0.200284, 0.201920, 0.205872, 0.213802",\ + "0.445513, 0.445553, 0.445737, 0.446179, 0.447066",\ + "1.101424, 1.101424, 1.101424, 1.101424, 1.101424",\ + "0.060218, 0.060603, 0.061857, 0.065030, 0.071424",\ + "0.114238, 0.114768, 0.116472, 0.120774, 0.129442",\ + "0.199921, 0.200405, 0.201961, 0.205888, 0.213802",\ + "0.445513, 0.445567, 0.445741, 0.446180, 0.447066",\ + "1.101424, 1.101424, 1.101424, 1.101424, 1.101424"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[2]_redg_2700*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[16]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.378256, 0.565826, 0.756593, 1.054119, 1.624836",\ + "0.428118, 0.615688, 0.806455, 1.103981, 1.674699",\ + "0.529986, 0.717556, 0.908323, 1.205849, 1.776567",\ + "0.767847, 0.955417, 1.146184, 1.443710, 2.014428",\ + "1.340168, 1.527737, 1.718505, 2.016031, 2.586749",\ + "0.466466, 0.653144, 0.843873, 1.141424, 1.712190",\ + "0.516328, 0.703006, 0.893736, 1.191286, 1.762052",\ + "0.618195, 0.804874, 0.995604, 1.293154, 1.863920",\ + "0.856057, 1.042735, 1.233465, 1.531015, 2.101782",\ + "1.428377, 1.615056, 1.805786, 2.103336, 2.674102",\ + "0.553983, 0.733479, 0.923900, 1.221452, 1.792222",\ + "0.603845, 0.783341, 0.973763, 1.271315, 1.842084",\ + "0.705713, 0.885209, 1.075631, 1.373183, 1.943952",\ + "0.943574, 1.123071, 1.313492, 1.611044, 2.181813",\ + "1.515895, 1.695391, 1.885813, 2.183364, 2.754134",\ + "0.611623, 0.791310, 0.981624, 1.278894, 1.849260",\ + "0.661485, 0.841172, 1.031486, 1.328757, 1.899123",\ + "0.763353, 0.943040, 1.133354, 1.430624, 2.000991",\ + "1.001214, 1.180901, 1.371215, 1.668486, 2.238852",\ + "1.573535, 1.753222, 1.943536, 2.240806, 2.811173",\ + "0.913876, 1.096638, 1.285285, 1.582076, 2.151510",\ + "0.963738, 1.146500, 1.335147, 1.631939, 2.201373",\ + "1.065606, 1.248368, 1.437015, 1.733807, 2.303241",\ + "1.303467, 1.486229, 1.674876, 1.971668, 2.541102",\ + "1.875787, 2.058550, 2.247197, 2.543989, 3.113423"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.039802, 0.039802, 0.039803, 0.039804, 0.039804",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375009, 0.375009, 0.375009, 0.375009, 0.375009",\ + "0.869291, 0.869291, 0.869292, 0.869292, 0.869292",\ + "2.137192, 2.137192, 2.137192, 2.137192, 2.137192",\ + "0.039802, 0.039802, 0.039803, 0.039804, 0.039804",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375009, 0.375009, 0.375009, 0.375009, 0.375009",\ + "0.869291, 0.869291, 0.869292, 0.869292, 0.869292",\ + "2.137192, 2.137192, 2.137192, 2.137192, 2.137192",\ + "0.039802, 0.039802, 0.039803, 0.039804, 0.039804",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375009, 0.375009, 0.375009, 0.375009, 0.375009",\ + "0.869291, 0.869291, 0.869292, 0.869292, 0.869292",\ + "2.137192, 2.137192, 2.137192, 2.137192, 2.137192",\ + "0.039802, 0.039802, 0.039803, 0.039804, 0.039804",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375009, 0.375009, 0.375009, 0.375009, 0.375009",\ + "0.869291, 0.869291, 0.869292, 0.869292, 0.869292",\ + "2.137192, 2.137192, 2.137192, 2.137192, 2.137192",\ + "0.039802, 0.039802, 0.039803, 0.039804, 0.039804",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375009, 0.375009, 0.375009, 0.375009, 0.375009",\ + "0.869291, 0.869291, 0.869292, 0.869292, 0.869292",\ + "2.137192, 2.137192, 2.137192, 2.137192, 2.137192"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.406562, 0.606556, 0.797323, 1.091399, 1.653630",\ + "0.441336, 0.628906, 0.819673, 1.117199, 1.687917",\ + "0.482700, 0.670269, 0.861036, 1.158563, 1.729280",\ + "0.604735, 0.792305, 0.983072, 1.280598, 1.851316",\ + "0.936348, 1.123917, 1.314685, 1.612211, 2.182929",\ + "0.494915, 0.693874, 0.884604, 1.178704, 1.740983",\ + "0.529546, 0.716224, 0.906954, 1.204504, 1.775270",\ + "0.570909, 0.757588, 0.948317, 1.245868, 1.816634",\ + "0.692944, 0.879623, 1.070353, 1.367903, 1.938669",\ + "1.024557, 1.211236, 1.401965, 1.699516, 2.270282",\ + "0.583845, 0.774209, 0.964631, 1.258732, 1.821015",\ + "0.617063, 0.796559, 0.986981, 1.284533, 1.855302",\ + "0.658427, 0.837923, 1.028344, 1.325896, 1.896666",\ + "0.780462, 0.959958, 1.150380, 1.447932, 2.018701",\ + "1.112075, 1.291571, 1.481992, 1.779544, 2.350314",\ + "0.646974, 0.832040, 1.022354, 1.316164, 1.878034",\ + "0.674703, 0.854390, 1.044704, 1.341975, 1.912341",\ + "0.716066, 0.895753, 1.086067, 1.383338, 1.953704",\ + "0.838102, 1.017789, 1.208103, 1.505373, 2.075740",\ + "1.169714, 1.349402, 1.539716, 1.836986, 2.407352",\ + "0.954606, 1.137368, 1.326015, 1.619337, 2.180259",\ + "0.976956, 1.159718, 1.348365, 1.645157, 2.214591",\ + "1.018319, 1.201081, 1.389728, 1.686520, 2.255954",\ + "1.140355, 1.323117, 1.511764, 1.808556, 2.377990",\ + "1.471967, 1.654730, 1.843377, 2.140168, 2.709602"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001808, 0.074806, 0.161858, 0.321909, 0.642011"); + values ( "0.045856, 0.045856, 0.045856, 0.045856, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045856, 0.045856, 0.045856, 0.045856, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045856, 0.045856, 0.045856, 0.045856, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045856, 0.045856, 0.045856, 0.045856, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045856, 0.045856, 0.045856, 0.045856, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[2]_redg_min_2509*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[18]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.377666, 0.597755, 0.775019, 1.063430, 1.623644",\ + "0.425426, 0.645514, 0.822779, 1.111188, 1.671399",\ + "0.527520, 0.747609, 0.924873, 1.213283, 1.773495",\ + "0.765177, 0.985265, 1.162530, 1.450942, 2.011159",\ + "1.337186, 1.557274, 1.734539, 2.022954, 2.583179",\ + "0.466063, 0.685073, 0.862300, 1.150735, 1.710998",\ + "0.513823, 0.732832, 0.910060, 1.198493, 1.758752",\ + "0.615917, 0.834927, 1.012154, 1.300588, 1.860848",\ + "0.853574, 1.072584, 1.249811, 1.538247, 2.098513",\ + "1.425583, 1.644592, 1.821819, 2.110259, 2.670533",\ + "0.555414, 0.765406, 0.942327, 1.230764, 1.791029",\ + "0.603174, 0.813165, 0.990086, 1.278522, 1.838784",\ + "0.705268, 0.915260, 1.092181, 1.380617, 1.940880",\ + "0.942925, 1.152916, 1.329838, 1.618276, 2.178544",\ + "1.514933, 1.724925, 1.901846, 2.190288, 2.750564",\ + "0.619064, 0.823222, 1.000019, 1.288193, 1.848044",\ + "0.666823, 0.870981, 1.047778, 1.335951, 1.895798",\ + "0.768918, 0.973076, 1.149873, 1.438046, 1.997895",\ + "1.006574, 1.210732, 1.387530, 1.675705, 2.235559",\ + "1.578583, 1.782741, 1.959538, 2.247717, 2.807579",\ + "0.950146, 1.128438, 1.303674, 1.591364, 2.150265",\ + "0.997905, 1.176197, 1.351434, 1.639122, 2.198019",\ + "1.100000, 1.278292, 1.453528, 1.741217, 2.300115",\ + "1.337656, 1.515949, 1.691185, 1.978876, 2.537780",\ + "1.909665, 2.087957, 2.263194, 2.550888, 3.109800"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.035377, 0.035377, 0.035377, 0.035399, 0.035455",\ + "0.147294, 0.147294, 0.147294, 0.147285, 0.147262",\ + "0.375697, 0.375697, 0.375697, 0.375693, 0.375682",\ + "0.871174, 0.871174, 0.871174, 0.871174, 0.871174",\ + "2.136600, 2.136600, 2.136600, 2.136600, 2.136600",\ + "0.035377, 0.035377, 0.035377, 0.035399, 0.035455",\ + "0.147294, 0.147294, 0.147294, 0.147285, 0.147262",\ + "0.375697, 0.375697, 0.375697, 0.375693, 0.375682",\ + "0.871174, 0.871174, 0.871174, 0.871174, 0.871174",\ + "2.136600, 2.136600, 2.136600, 2.136600, 2.136600",\ + "0.035377, 0.035377, 0.035377, 0.035399, 0.035455",\ + "0.147294, 0.147294, 0.147294, 0.147285, 0.147262",\ + "0.375697, 0.375697, 0.375697, 0.375693, 0.375682",\ + "0.871174, 0.871174, 0.871174, 0.871174, 0.871174",\ + "2.136600, 2.136600, 2.136600, 2.136600, 2.136600",\ + "0.035377, 0.035377, 0.035377, 0.035399, 0.035455",\ + "0.147294, 0.147294, 0.147294, 0.147285, 0.147262",\ + "0.375697, 0.375697, 0.375697, 0.375693, 0.375681",\ + "0.871174, 0.871174, 0.871174, 0.871174, 0.871174",\ + "2.136600, 2.136600, 2.136600, 2.136600, 2.136600",\ + "0.035377, 0.035377, 0.035377, 0.035400, 0.035455",\ + "0.147294, 0.147294, 0.147294, 0.147285, 0.147262",\ + "0.375697, 0.375697, 0.375697, 0.375693, 0.375681",\ + "0.871174, 0.871174, 0.871174, 0.871174, 0.871174",\ + "2.136600, 2.136600, 2.136600, 2.136600, 2.136600"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.402575, 0.622525, 0.800017, 1.088497, 1.648804",\ + "0.437980, 0.658068, 0.835333, 1.123750, 1.683980",\ + "0.479393, 0.699481, 0.876745, 1.165163, 1.725394",\ + "0.601610, 0.821698, 0.998963, 1.287380, 1.847608",\ + "0.933557, 1.153646, 1.330910, 1.619324, 2.179546",\ + "0.490972, 0.709843, 0.887297, 1.175802, 1.736157",\ + "0.526376, 0.745386, 0.922613, 1.211055, 1.771333",\ + "0.567789, 0.786799, 0.964026, 1.252468, 1.812747",\ + "0.690007, 0.909017, 1.086244, 1.374685, 1.934961",\ + "1.021954, 1.240964, 1.418191, 1.706629, 2.266899",\ + "0.580323, 0.790176, 0.967324, 1.255831, 1.816189",\ + "0.615727, 0.825719, 1.002640, 1.291084, 1.851365",\ + "0.657140, 0.867132, 1.044053, 1.332497, 1.892779",\ + "0.779358, 0.989349, 1.166271, 1.454713, 2.014993",\ + "1.111305, 1.321296, 1.498218, 1.786658, 2.346931",\ + "0.643973, 0.848003, 1.025017, 1.313260, 1.873204",\ + "0.679377, 0.883535, 1.060332, 1.348513, 1.908380",\ + "0.720790, 0.924948, 1.101745, 1.389926, 1.949794",\ + "0.843007, 1.047165, 1.223963, 1.512143, 2.072008",\ + "1.174954, 1.379112, 1.555910, 1.844087, 2.403945",\ + "0.972398, 1.153296, 1.328672, 1.616431, 2.175425",\ + "1.010459, 1.188751, 1.363988, 1.651684, 2.210601",\ + "1.051872, 1.230164, 1.405401, 1.693097, 2.252014",\ + "1.174089, 1.352381, 1.527618, 1.815314, 2.374228",\ + "1.506037, 1.684329, 1.859565, 2.147258, 2.706166"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.039065, 0.039065, 0.039065, 0.039064, 0.039061",\ + "0.088924, 0.088924, 0.088924, 0.088923, 0.088920",\ + "0.185901, 0.185901, 0.185901, 0.185900, 0.185897",\ + "0.432264, 0.432264, 0.432264, 0.432263, 0.432260",\ + "1.064285, 1.064285, 1.064285, 1.064278, 1.064261",\ + "0.039065, 0.039065, 0.039065, 0.039064, 0.039061",\ + "0.088924, 0.088924, 0.088924, 0.088923, 0.088920",\ + "0.185901, 0.185901, 0.185901, 0.185900, 0.185897",\ + "0.432264, 0.432264, 0.432264, 0.432263, 0.432260",\ + "1.064285, 1.064285, 1.064285, 1.064278, 1.064261",\ + "0.039065, 0.039065, 0.039065, 0.039064, 0.039061",\ + "0.088924, 0.088924, 0.088924, 0.088923, 0.088920",\ + "0.185901, 0.185901, 0.185901, 0.185900, 0.185897",\ + "0.432264, 0.432264, 0.432264, 0.432263, 0.432260",\ + "1.064285, 1.064285, 1.064285, 1.064278, 1.064261",\ + "0.039065, 0.039065, 0.039065, 0.039064, 0.039061",\ + "0.088924, 0.088924, 0.088924, 0.088923, 0.088920",\ + "0.185901, 0.185901, 0.185901, 0.185900, 0.185897",\ + "0.432264, 0.432264, 0.432264, 0.432263, 0.432260",\ + "1.064285, 1.064285, 1.064285, 1.064278, 1.064261",\ + "0.039065, 0.039065, 0.039065, 0.039064, 0.039061",\ + "0.088924, 0.088924, 0.088924, 0.088923, 0.088920",\ + "0.185901, 0.185901, 0.185901, 0.185900, 0.185897",\ + "0.432264, 0.432264, 0.432264, 0.432263, 0.432260",\ + "1.064285, 1.064285, 1.064285, 1.064278, 1.064261"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[2]_redg_min_2574*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[21]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.170596, 0.344816, 0.534412, 0.834679, 1.413369",\ + "0.220441, 0.410383, 0.608141, 0.926922, 1.543926",\ + "0.296778, 0.497025, 0.695631, 1.028154, 1.678015",\ + "0.503693, 0.714118, 0.910633, 1.258044, 1.946084",\ + "1.056578, 1.269082, 1.463888, 1.813508, 2.508415",\ + "0.258804, 0.432134, 0.621693, 0.921985, 1.500723",\ + "0.308666, 0.497701, 0.695422, 1.014227, 1.631279",\ + "0.385015, 0.584343, 0.782912, 1.115460, 1.765368",\ + "0.591916, 0.801436, 0.997914, 1.345350, 2.033438",\ + "1.144755, 1.356400, 1.551169, 1.900813, 2.595769",\ + "0.340291, 0.512462, 0.701720, 1.002013, 1.580754",\ + "0.397987, 0.578029, 0.775449, 1.094256, 1.711311",\ + "0.474366, 0.664671, 0.862939, 1.195488, 1.845400",\ + "0.681230, 0.881765, 1.077941, 1.425378, 2.113470",\ + "1.233925, 1.436728, 1.631195, 1.980842, 2.675800",\ + "0.397929, 0.570271, 0.759443, 1.059465, 1.637816",\ + "0.461810, 0.635841, 0.833191, 1.151754, 1.768465",\ + "0.538221, 0.722485, 0.920682, 1.253027, 1.902633",\ + "0.745047, 0.939586, 1.135680, 1.482963, 2.170795",\ + "1.297604, 1.494552, 1.688930, 2.038435, 2.733142",\ + "0.700648, 0.875417, 1.063102, 1.362655, 1.940093",\ + "0.765372, 0.941013, 1.136853, 1.454984, 2.070854",\ + "0.851488, 1.027673, 1.224345, 1.556291, 2.205118",\ + "1.066931, 1.244823, 1.439341, 1.786267, 2.473392",\ + "1.621222, 1.799810, 1.992591, 2.341746, 3.035759"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.138974, 0.138974, 0.138974, 0.148690, 0.172413",\ + "0.231167, 0.231167, 0.231167, 0.238024, 0.254767",\ + "0.397287, 0.397287, 0.397287, 0.400375, 0.407916",\ + "0.872440, 0.873368, 0.873689, 0.874395, 0.875876",\ + "2.139579, 2.140538, 2.140572, 2.140672, 2.140918",\ + "0.138974, 0.138974, 0.138974, 0.148690, 0.172413",\ + "0.231167, 0.231167, 0.231167, 0.238024, 0.254767",\ + "0.397287, 0.397287, 0.397287, 0.400375, 0.407916",\ + "0.872464, 0.873368, 0.873689, 0.874395, 0.875876",\ + "2.139603, 2.140538, 2.140572, 2.140672, 2.140918",\ + "0.138974, 0.138974, 0.138974, 0.148690, 0.172413",\ + "0.231167, 0.231167, 0.231167, 0.238024, 0.254767",\ + "0.397287, 0.397287, 0.397287, 0.400375, 0.407916",\ + "0.872536, 0.873368, 0.873689, 0.874395, 0.875876",\ + "2.139678, 2.140538, 2.140572, 2.140672, 2.140918",\ + "0.138974, 0.138974, 0.138974, 0.148719, 0.172470",\ + "0.231167, 0.231167, 0.231167, 0.238044, 0.254807",\ + "0.397287, 0.397287, 0.397287, 0.400384, 0.407935",\ + "0.872605, 0.873372, 0.873689, 0.874397, 0.875879",\ + "2.139749, 2.140541, 2.140572, 2.140673, 2.140918",\ + "0.138974, 0.138974, 0.138974, 0.148743, 0.172540",\ + "0.231167, 0.231167, 0.231167, 0.238062, 0.254856",\ + "0.397287, 0.397287, 0.397287, 0.400392, 0.407957",\ + "0.872560, 0.873396, 0.873689, 0.874398, 0.875884",\ + "2.139703, 2.140566, 2.140572, 2.140673, 2.140919"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.114526, 0.367093, 0.558483, 0.861637, 1.446138",\ + "0.150625, 0.396446, 0.587679, 0.892767, 1.482109",\ + "0.204730, 0.442254, 0.633143, 0.939029, 1.530580",\ + "0.336119, 0.565619, 0.755974, 1.061799, 1.653613",\ + "0.673349, 0.896842, 1.086112, 1.390772, 1.980608",\ + "0.202682, 0.454411, 0.645764, 0.948942, 1.533492",\ + "0.238886, 0.483764, 0.674960, 0.980073, 1.569463",\ + "0.292968, 0.529572, 0.720424, 1.026334, 1.617934",\ + "0.424327, 0.652937, 0.843255, 1.149104, 1.740967",\ + "0.761530, 0.984159, 1.173393, 1.478077, 2.067961",\ + "0.291788, 0.534739, 0.725791, 1.028971, 1.613523",\ + "0.328316, 0.564093, 0.754987, 1.060101, 1.649494",\ + "0.382328, 0.609901, 0.800451, 1.106363, 1.697965",\ + "0.513590, 0.733265, 0.923281, 1.229132, 1.820998",\ + "0.850714, 1.064488, 1.253420, 1.558105, 2.147993",\ + "0.355407, 0.592582, 0.783517, 1.086430, 1.670599",\ + "0.392245, 0.621934, 0.812712, 1.117566, 1.706581",\ + "0.446190, 0.667738, 0.858175, 1.163830, 1.755058",\ + "0.577359, 0.791098, 0.981005, 1.286600, 1.878091",\ + "0.914407, 1.122314, 1.311141, 1.615571, 2.205081",\ + "0.691600, 0.897972, 1.087176, 1.389626, 1.972893",\ + "0.730424, 0.927308, 1.116372, 1.420767, 2.008889",\ + "0.783940, 0.973087, 1.161835, 1.467034, 2.057372",\ + "0.914518, 1.096413, 1.284664, 1.589804, 2.180407",\ + "1.248497, 1.427586, 1.614800, 1.918772, 2.507391"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003224, 0.076222, 0.162920, 0.322617, 0.642011"); + values ( "0.055015, 0.067358, 0.073977, 0.088785, 0.119708",\ + "0.104870, 0.104870, 0.106669, 0.116295, 0.138275",\ + "0.190674, 0.190674, 0.191255, 0.196129, 0.207539",\ + "0.432841, 0.433934, 0.434139, 0.435063, 0.437176",\ + "1.062723, 1.062723, 1.063223, 1.064130, 1.065922",\ + "0.055327, 0.067358, 0.073977, 0.088785, 0.119708",\ + "0.104870, 0.104870, 0.106669, 0.116295, 0.138275",\ + "0.190674, 0.190674, 0.191255, 0.196129, 0.207539",\ + "0.432868, 0.433934, 0.434139, 0.435063, 0.437176",\ + "1.062723, 1.062723, 1.063223, 1.064130, 1.065922",\ + "0.056284, 0.067358, 0.073977, 0.088785, 0.119708",\ + "0.104870, 0.104870, 0.106669, 0.116295, 0.138275",\ + "0.190674, 0.190674, 0.191255, 0.196129, 0.207539",\ + "0.432953, 0.433934, 0.434139, 0.435063, 0.437176",\ + "1.062723, 1.062723, 1.063223, 1.064130, 1.065922",\ + "0.057202, 0.067404, 0.073991, 0.088823, 0.119782",\ + "0.104870, 0.104870, 0.106673, 0.116322, 0.138328",\ + "0.190674, 0.190674, 0.191256, 0.196143, 0.207567",\ + "0.433035, 0.433938, 0.434140, 0.435065, 0.437181",\ + "1.062723, 1.062723, 1.063224, 1.064132, 1.065926",\ + "0.063074, 0.067726, 0.073994, 0.088855, 0.119873",\ + "0.104870, 0.104870, 0.106674, 0.116345, 0.138392",\ + "0.190674, 0.190674, 0.191256, 0.196155, 0.207600",\ + "0.433555, 0.433967, 0.434140, 0.435067, 0.437187",\ + "1.062723, 1.062723, 1.063224, 1.064134, 1.065932"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[2]_redg_min_2723*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[24]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.357397, 0.601995, 0.794649, 1.097312, 1.679722",\ + "0.405158, 0.649756, 0.842409, 1.145087, 1.727533",\ + "0.507252, 0.751850, 0.944504, 1.247180, 1.829623",\ + "0.744907, 0.989505, 1.182159, 1.483890, 2.064025",\ + "1.316914, 1.559947, 1.747496, 2.046616, 2.624655",\ + "0.445689, 0.689313, 0.881930, 1.184617, 1.767075",\ + "0.493449, 0.737074, 0.929690, 1.232392, 1.814886",\ + "0.595543, 0.839168, 1.031785, 1.334485, 1.916976",\ + "0.833198, 1.076823, 1.269440, 1.571195, 2.151379",\ + "1.405205, 1.647264, 1.834777, 2.133921, 2.712009",\ + "0.535203, 0.769642, 0.961957, 1.264645, 1.847107",\ + "0.582964, 0.817402, 1.009717, 1.312421, 1.894918",\ + "0.685058, 0.919496, 1.111811, 1.414514, 1.997008",\ + "0.922713, 1.157152, 1.349467, 1.651224, 2.231411",\ + "1.494720, 1.727593, 1.914804, 2.213950, 2.792040",\ + "0.599211, 0.827507, 1.019685, 1.322102, 1.904177",\ + "0.646972, 0.875268, 1.067446, 1.369877, 1.951988",\ + "0.749066, 0.977362, 1.169540, 1.471970, 2.054078",\ + "0.986721, 1.215017, 1.407195, 1.708678, 2.288475",\ + "1.558728, 1.785452, 1.972520, 2.271401, 2.849100",\ + "0.937895, 1.133051, 1.323345, 1.625296, 2.206465",\ + "0.985656, 1.180812, 1.371106, 1.673071, 2.254277",\ + "1.087750, 1.282906, 1.473200, 1.775164, 2.356366",\ + "1.325405, 1.520561, 1.710855, 2.011869, 2.590756",\ + "1.897411, 2.090956, 2.276178, 2.574590, 3.151375"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.035362, 0.035362, 0.035362, 0.035420, 0.035563",\ + "0.147300, 0.147300, 0.147300, 0.147294, 0.147280",\ + "0.375700, 0.375700, 0.375700, 0.375690, 0.375665",\ + "0.871174, 0.871174, 0.871174, 0.871174, 0.871175",\ + "2.136600, 2.136600, 2.136600, 2.136600, 2.136600",\ + "0.035362, 0.035362, 0.035362, 0.035420, 0.035563",\ + "0.147300, 0.147300, 0.147300, 0.147294, 0.147280",\ + "0.375700, 0.375700, 0.375700, 0.375690, 0.375665",\ + "0.871174, 0.871174, 0.871174, 0.871174, 0.871175",\ + "2.136600, 2.136600, 2.136600, 2.136600, 2.136600",\ + "0.035362, 0.035362, 0.035362, 0.035420, 0.035563",\ + "0.147300, 0.147300, 0.147300, 0.147294, 0.147280",\ + "0.375700, 0.375700, 0.375700, 0.375690, 0.375665",\ + "0.871174, 0.871174, 0.871174, 0.871174, 0.871175",\ + "2.136600, 2.136600, 2.136600, 2.136600, 2.136600",\ + "0.035362, 0.035362, 0.035362, 0.035421, 0.035564",\ + "0.147300, 0.147300, 0.147300, 0.147294, 0.147280",\ + "0.375700, 0.375700, 0.375700, 0.375690, 0.375665",\ + "0.871174, 0.871174, 0.871174, 0.871174, 0.871175",\ + "2.136600, 2.136600, 2.136600, 2.136600, 2.136600",\ + "0.035362, 0.035362, 0.035362, 0.035421, 0.035564",\ + "0.147300, 0.147300, 0.147300, 0.147294, 0.147280",\ + "0.375700, 0.375700, 0.375700, 0.375690, 0.375665",\ + "0.871174, 0.871174, 0.871174, 0.871174, 0.871175",\ + "2.136600, 2.136600, 2.136600, 2.136600, 2.136600"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.382270, 0.607170, 0.794344, 1.093466, 1.671509",\ + "0.417706, 0.645645, 0.832819, 1.131939, 1.709979",\ + "0.459119, 0.700449, 0.887937, 1.187057, 1.765097",\ + "0.581337, 0.825935, 1.018589, 1.319527, 1.897724",\ + "0.913286, 1.157884, 1.350538, 1.652760, 2.234094",\ + "0.470573, 0.694488, 0.881625, 1.180771, 1.758862",\ + "0.505998, 0.732962, 0.920100, 1.219244, 1.797333",\ + "0.547411, 0.787767, 0.975218, 1.274362, 1.852450",\ + "0.669629, 0.913253, 1.105870, 1.406832, 1.985077",\ + "1.001577, 1.245202, 1.437819, 1.740065, 2.321447",\ + "0.560124, 0.774817, 0.961652, 1.260799, 1.838894",\ + "0.595513, 0.813291, 1.000127, 1.299273, 1.877364",\ + "0.636925, 0.868096, 1.055245, 1.354391, 1.932482",\ + "0.759143, 0.993582, 1.185897, 1.486860, 2.065109",\ + "1.091092, 1.325531, 1.517846, 1.820093, 2.401479",\ + "0.624166, 0.832637, 1.019369, 1.318251, 1.895954",\ + "0.659520, 0.871112, 1.057843, 1.356724, 1.934424",\ + "0.700933, 0.925949, 1.112961, 1.411842, 1.989542",\ + "0.823151, 1.051447, 1.243625, 1.544312, 2.122169",\ + "1.155100, 1.383396, 1.575574, 1.877549, 2.458546",\ + "0.960128, 1.137870, 1.323027, 1.621440, 2.198229",\ + "0.998204, 1.176344, 1.361501, 1.659913, 2.236699",\ + "1.039617, 1.231408, 1.416619, 1.715032, 2.291817",\ + "1.161835, 1.356991, 1.547285, 1.847501, 2.424445",\ + "1.493784, 1.688940, 1.879234, 2.180742, 2.760831"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003210, 0.076209, 0.162911, 0.322611, 0.642011"); + values ( "0.039065, 0.039065, 0.039065, 0.039064, 0.039059",\ + "0.088925, 0.088925, 0.088925, 0.088923, 0.088919",\ + "0.185901, 0.185901, 0.185901, 0.185900, 0.185895",\ + "0.432265, 0.432265, 0.432265, 0.432264, 0.432260",\ + "1.064290, 1.064290, 1.064290, 1.064282, 1.064264",\ + "0.039065, 0.039065, 0.039065, 0.039064, 0.039059",\ + "0.088925, 0.088925, 0.088925, 0.088923, 0.088919",\ + "0.185901, 0.185901, 0.185901, 0.185900, 0.185895",\ + "0.432265, 0.432265, 0.432265, 0.432264, 0.432260",\ + "1.064290, 1.064290, 1.064290, 1.064282, 1.064264",\ + "0.039065, 0.039065, 0.039065, 0.039064, 0.039059",\ + "0.088925, 0.088925, 0.088925, 0.088923, 0.088919",\ + "0.185901, 0.185901, 0.185901, 0.185900, 0.185895",\ + "0.432265, 0.432265, 0.432265, 0.432264, 0.432260",\ + "1.064290, 1.064290, 1.064290, 1.064282, 1.064264",\ + "0.039065, 0.039065, 0.039065, 0.039064, 0.039059",\ + "0.088925, 0.088925, 0.088925, 0.088923, 0.088919",\ + "0.185901, 0.185901, 0.185901, 0.185900, 0.185895",\ + "0.432265, 0.432265, 0.432265, 0.432264, 0.432260",\ + "1.064290, 1.064290, 1.064290, 1.064282, 1.064264",\ + "0.039065, 0.039065, 0.039065, 0.039064, 0.039059",\ + "0.088925, 0.088925, 0.088925, 0.088923, 0.088919",\ + "0.185901, 0.185901, 0.185901, 0.185900, 0.185895",\ + "0.432265, 0.432265, 0.432265, 0.432264, 0.432260",\ + "1.064290, 1.064290, 1.064290, 1.064282, 1.064264"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[2]_redg_min_2363*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[26]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.348095, 0.545075, 0.727042, 1.018426, 1.581852",\ + "0.397956, 0.594939, 0.776906, 1.068290, 1.631715",\ + "0.499824, 0.696806, 0.878774, 1.170157, 1.733583",\ + "0.737685, 0.934668, 1.116635, 1.408019, 1.971444",\ + "1.310006, 1.506989, 1.688956, 1.980340, 2.543765",\ + "0.436445, 0.632394, 0.814323, 1.105731, 1.669206",\ + "0.486307, 0.682257, 0.864187, 1.155595, 1.719068",\ + "0.588175, 0.784125, 0.966055, 1.257463, 1.820936",\ + "0.826036, 1.021986, 1.203916, 1.495324, 2.058797",\ + "1.398357, 1.594307, 1.776237, 2.067645, 2.631118",\ + "0.525620, 0.712727, 0.894350, 1.185759, 1.749237",\ + "0.575481, 0.762590, 0.944214, 1.235623, 1.799100",\ + "0.677349, 0.864458, 1.046082, 1.337491, 1.900968",\ + "0.915211, 1.102319, 1.283943, 1.575353, 2.138829",\ + "1.487531, 1.674640, 1.856264, 2.147673, 2.711150",\ + "0.589087, 0.770548, 0.952053, 1.243192, 1.806260",\ + "0.638949, 0.820411, 1.001917, 1.293056, 1.856122",\ + "0.740817, 0.922279, 1.103785, 1.394924, 1.957990",\ + "0.978678, 1.160140, 1.341646, 1.632786, 2.195851",\ + "1.550998, 1.732461, 1.913967, 2.205106, 2.768172",\ + "0.896146, 1.075801, 1.255710, 1.546367, 2.108490",\ + "0.946008, 1.125664, 1.305574, 1.596231, 2.158352",\ + "1.047876, 1.227532, 1.407442, 1.698099, 2.260220",\ + "1.285737, 1.465394, 1.645303, 1.935960, 2.498081",\ + "1.858057, 2.037714, 2.217624, 2.508281, 3.070402"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.039799, 0.039799, 0.039799, 0.039799, 0.039799",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375009, 0.375009, 0.375009, 0.375009, 0.375009",\ + "0.869291, 0.869291, 0.869292, 0.869292, 0.869292",\ + "2.137191, 2.137192, 2.137192, 2.137192, 2.137192",\ + "0.039799, 0.039799, 0.039799, 0.039799, 0.039799",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375009, 0.375009, 0.375009, 0.375009, 0.375009",\ + "0.869291, 0.869291, 0.869292, 0.869292, 0.869292",\ + "2.137191, 2.137192, 2.137192, 2.137192, 2.137192",\ + "0.039799, 0.039799, 0.039799, 0.039799, 0.039799",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375009, 0.375009, 0.375009, 0.375009, 0.375009",\ + "0.869291, 0.869291, 0.869292, 0.869292, 0.869292",\ + "2.137191, 2.137192, 2.137192, 2.137192, 2.137192",\ + "0.039799, 0.039799, 0.039799, 0.039799, 0.039799",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375009, 0.375009, 0.375009, 0.375009, 0.375009",\ + "0.869291, 0.869291, 0.869292, 0.869292, 0.869292",\ + "2.137191, 2.137192, 2.137192, 2.137192, 2.137192",\ + "0.039799, 0.039799, 0.039799, 0.039799, 0.039799",\ + "0.147770, 0.147770, 0.147770, 0.147770, 0.147770",\ + "0.375009, 0.375009, 0.375009, 0.375009, 0.375009",\ + "0.869291, 0.869291, 0.869292, 0.869292, 0.869292",\ + "2.137191, 2.137192, 2.137192, 2.137192, 2.137192"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.386309, 0.585807, 0.767775, 1.059158, 1.622583",\ + "0.411174, 0.608157, 0.790125, 1.081508, 1.644933",\ + "0.452537, 0.649520, 0.831488, 1.122872, 1.686296",\ + "0.574573, 0.771556, 0.953524, 1.244907, 1.808332",\ + "0.906186, 1.103168, 1.285136, 1.576519, 2.139944",\ + "0.474546, 0.673125, 0.855056, 1.146463, 1.709936",\ + "0.499525, 0.695475, 0.877406, 1.168813, 1.732286",\ + "0.540888, 0.736839, 0.918769, 1.210177, 1.773650",\ + "0.662924, 0.858874, 1.040805, 1.332212, 1.895685",\ + "0.994536, 1.190487, 1.372417, 1.663825, 2.227298",\ + "0.563389, 0.753458, 0.935083, 1.226492, 1.789968",\ + "0.588699, 0.775808, 0.957433, 1.248842, 1.812318",\ + "0.630063, 0.817172, 0.998796, 1.290205, 1.853681",\ + "0.752098, 0.939207, 1.120831, 1.412241, 1.975717",\ + "1.083711, 1.270820, 1.452444, 1.743853, 2.307329",\ + "0.626548, 0.811280, 0.992786, 1.283925, 1.846990",\ + "0.652167, 0.833630, 1.015136, 1.306275, 1.869340",\ + "0.693530, 0.874993, 1.056499, 1.347638, 1.910704",\ + "0.815566, 0.997028, 1.178535, 1.469674, 2.032739",\ + "1.147178, 1.328641, 1.510147, 1.801286, 2.364352",\ + "0.936876, 1.116533, 1.296443, 1.587100, 2.149220",\ + "0.959225, 1.138883, 1.318793, 1.609450, 2.171570",\ + "1.000589, 1.180246, 1.360156, 1.650813, 2.212934",\ + "1.122624, 1.302282, 1.482192, 1.772848, 2.334969",\ + "1.454237, 1.633894, 1.813804, 2.104461, 2.666582"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002267, 0.075266, 0.162203, 0.322139, 0.642011"); + values ( "0.045856, 0.045856, 0.045856, 0.045856, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045856, 0.045856, 0.045856, 0.045856, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045856, 0.045856, 0.045856, 0.045856, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045856, 0.045856, 0.045856, 0.045856, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247",\ + "0.045856, 0.045856, 0.045856, 0.045856, 0.045856",\ + "0.091389, 0.091389, 0.091389, 0.091389, 0.091389",\ + "0.185814, 0.185814, 0.185814, 0.185814, 0.185814",\ + "0.432252, 0.432252, 0.432252, 0.432252, 0.432252",\ + "1.064247, 1.064247, 1.064247, 1.064247, 1.064247"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[2]_redg_min_2685*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[27]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.226427, 0.405869, 0.606598, 0.932774, 1.565599",\ + "0.282384, 0.460178, 0.659964, 0.990994, 1.636396",\ + "0.358192, 0.534364, 0.733448, 1.069708, 1.728405",\ + "0.560390, 0.734140, 0.930018, 1.272669, 1.949568",\ + "1.105015, 1.276795, 1.468799, 1.815230, 2.504534",\ + "0.313828, 0.493186, 0.693879, 1.020079, 1.652953",\ + "0.369785, 0.547496, 0.747245, 1.078299, 1.723750",\ + "0.445593, 0.621681, 0.820729, 1.157013, 1.815759",\ + "0.647791, 0.821458, 1.017299, 1.359975, 2.036922",\ + "1.192415, 1.364112, 1.556080, 1.902535, 2.591887",\ + "0.394677, 0.573514, 0.773906, 1.100108, 1.732984",\ + "0.450625, 0.627823, 0.827272, 1.158327, 1.803782",\ + "0.526423, 0.702008, 0.900756, 1.237042, 1.895791",\ + "0.728608, 0.901785, 1.097326, 1.440003, 2.116953",\ + "1.273221, 1.444439, 1.636107, 1.982563, 2.671918",\ + "0.452415, 0.631348, 0.831654, 1.157626, 1.790177",\ + "0.508343, 0.685651, 0.885018, 1.215861, 1.861005",\ + "0.584122, 0.759831, 0.958501, 1.294592, 1.953046",\ + "0.786278, 0.959598, 1.155063, 1.497575, 2.174253",\ + "1.330868, 1.502245, 1.693835, 2.040151, 2.729248",\ + "0.756161, 0.936672, 1.135317, 1.460873, 2.092613",\ + "0.811907, 0.990932, 1.188681, 1.519120, 2.163478",\ + "0.887507, 1.065070, 1.262163, 1.597865, 2.255558",\ + "1.089394, 1.264774, 1.458724, 1.800867, 2.476817",\ + "1.633766, 1.807370, 1.997495, 2.343456, 3.031849"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.149901, 0.149901, 0.154318, 0.175674, 0.224033",\ + "0.237266, 0.237266, 0.240233, 0.254222, 0.285839",\ + "0.400134, 0.400516, 0.400740, 0.407020, 0.422153",\ + "0.873536, 0.873536, 0.873536, 0.874627, 0.877289",\ + "2.137014, 2.139136, 2.139203, 2.139990, 2.141907",\ + "0.149901, 0.149901, 0.154318, 0.175674, 0.224033",\ + "0.237266, 0.237266, 0.240233, 0.254222, 0.285839",\ + "0.400134, 0.400516, 0.400740, 0.407020, 0.422153",\ + "0.873536, 0.873536, 0.873536, 0.874627, 0.877289",\ + "2.137014, 2.139136, 2.139203, 2.139990, 2.141907",\ + "0.149901, 0.149901, 0.154318, 0.175674, 0.224033",\ + "0.237266, 0.237266, 0.240233, 0.254222, 0.285839",\ + "0.400136, 0.400516, 0.400740, 0.407020, 0.422153",\ + "0.873536, 0.873536, 0.873536, 0.874627, 0.877289",\ + "2.137026, 2.139136, 2.139203, 2.139990, 2.141907",\ + "0.149901, 0.149901, 0.154329, 0.175732, 0.224149",\ + "0.237266, 0.237266, 0.240240, 0.254260, 0.285916",\ + "0.400141, 0.400517, 0.400740, 0.407038, 0.422190",\ + "0.873536, 0.873536, 0.873536, 0.874631, 0.877295",\ + "2.137051, 2.139143, 2.139203, 2.139992, 2.141911",\ + "0.149901, 0.149901, 0.154330, 0.175783, 0.224291",\ + "0.237266, 0.237266, 0.240241, 0.254293, 0.286008",\ + "0.400183, 0.400527, 0.400740, 0.407054, 0.422234",\ + "0.873536, 0.873536, 0.873536, 0.874633, 0.877303",\ + "2.137286, 2.139199, 2.139203, 2.139994, 2.141917"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.152176, 0.424550, 0.621056, 0.937588, 1.550446",\ + "0.188303, 0.458742, 0.655289, 0.973816, 1.591506",\ + "0.242989, 0.508512, 0.704797, 1.024208, 1.644274",\ + "0.376456, 0.636940, 0.832877, 1.152112, 1.772037",\ + "0.711310, 0.972696, 1.168342, 1.486421, 2.103779",\ + "0.240546, 0.511867, 0.708337, 1.024893, 1.637799",\ + "0.276651, 0.546059, 0.742570, 1.061121, 1.678860",\ + "0.331309, 0.595830, 0.792078, 1.111513, 1.731628",\ + "0.464761, 0.724258, 0.920158, 1.239417, 1.859390",\ + "0.799595, 1.060013, 1.255623, 1.573726, 2.191132",\ + "0.330479, 0.592194, 0.788364, 1.104922, 1.717831",\ + "0.366514, 0.626386, 0.822597, 1.141150, 1.758891",\ + "0.421085, 0.676157, 0.872105, 1.191542, 1.811660",\ + "0.554489, 0.804585, 1.000185, 1.319445, 1.939422",\ + "0.889264, 1.140340, 1.335650, 1.653755, 2.271164",\ + "0.394961, 0.650030, 0.846103, 1.162416, 1.774975",\ + "0.430928, 0.684222, 0.880335, 1.198650, 1.816048",\ + "0.485415, 0.733993, 0.929843, 1.249045, 1.868822",\ + "0.618773, 0.862421, 1.057922, 1.376948, 1.996584",\ + "0.953489, 1.198177, 1.393386, 1.711254, 2.328319",\ + "0.736666, 0.955361, 1.149764, 1.465641, 2.077353",\ + "0.772199, 0.989556, 1.183996, 1.501880, 2.118440",\ + "0.826145, 1.039328, 1.233504, 1.552278, 2.171221",\ + "0.959204, 1.167753, 1.361583, 1.680181, 2.298982",\ + "1.293546, 1.503515, 1.697047, 2.014484, 2.630710"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.003525, 0.076523, 0.163147, 0.322768, 0.642011"); + values ( "0.071550, 0.071795, 0.076447, 0.093063, 0.129680",\ + "0.104996, 0.104996, 0.106778, 0.118004, 0.143877",\ + "0.191021, 0.191212, 0.191736, 0.197505, 0.211137",\ + "0.431517, 0.431517, 0.431517, 0.433292, 0.437617",\ + "1.063952, 1.065332, 1.065376, 1.065376, 1.065376",\ + "0.071556, 0.071795, 0.076447, 0.093063, 0.129680",\ + "0.104996, 0.104996, 0.106778, 0.118004, 0.143877",\ + "0.191026, 0.191212, 0.191736, 0.197505, 0.211137",\ + "0.431517, 0.431517, 0.431517, 0.433292, 0.437617",\ + "1.063986, 1.065332, 1.065376, 1.065376, 1.065376",\ + "0.071574, 0.071795, 0.076447, 0.093063, 0.129680",\ + "0.104996, 0.104996, 0.106778, 0.118004, 0.143877",\ + "0.191041, 0.191212, 0.191736, 0.197505, 0.211137",\ + "0.431517, 0.431517, 0.431517, 0.433292, 0.437617",\ + "1.064092, 1.065332, 1.065376, 1.065376, 1.065376",\ + "0.071593, 0.071796, 0.076458, 0.093108, 0.129768",\ + "0.104996, 0.104996, 0.106782, 0.118035, 0.143939",\ + "0.191055, 0.191213, 0.191737, 0.197522, 0.211169",\ + "0.431517, 0.431517, 0.431517, 0.433297, 0.437628",\ + "1.064195, 1.065337, 1.065376, 1.065376, 1.065376",\ + "0.071710, 0.071803, 0.076460, 0.093146, 0.129875",\ + "0.104996, 0.104996, 0.106783, 0.118062, 0.144015",\ + "0.191146, 0.191218, 0.191737, 0.197536, 0.211209",\ + "0.431517, 0.431517, 0.431517, 0.433301, 0.437640",\ + "1.064855, 1.065373, 1.065376, 1.065376, 1.065376"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[2]_redg_min_2743*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[28]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.511543, 0.732095, 0.909621, 1.198355, 1.759116",\ + "0.561373, 0.781924, 0.959450, 1.248185, 1.808946",\ + "0.663244, 0.883796, 1.061322, 1.350056, 1.910817",\ + "0.901102, 1.121654, 1.299180, 1.587914, 2.148676",\ + "1.473419, 1.693970, 1.871496, 2.160231, 2.720992",\ + "0.599955, 0.819413, 0.996902, 1.285660, 1.846469",\ + "0.649784, 0.869243, 1.046731, 1.335490, 1.896299",\ + "0.751656, 0.971114, 1.148603, 1.437361, 1.998171",\ + "0.989514, 1.208973, 1.386461, 1.675220, 2.236029",\ + "1.561830, 1.781289, 1.958777, 2.247536, 2.808345",\ + "0.689055, 0.899748, 1.076928, 1.365689, 1.926501",\ + "0.738884, 0.949578, 1.126758, 1.415518, 1.976331",\ + "0.840756, 1.051450, 1.228629, 1.517390, 2.078202",\ + "1.078614, 1.289308, 1.466488, 1.755248, 2.316061",\ + "1.650930, 1.861624, 2.038804, 2.327564, 2.888377",\ + "0.752342, 0.957565, 1.134620, 1.423118, 1.983516",\ + "0.802171, 1.007395, 1.184450, 1.472948, 2.033346",\ + "0.904043, 1.109266, 1.286322, 1.574819, 2.135217",\ + "1.141901, 1.347125, 1.524180, 1.812678, 2.373076",\ + "1.714217, 1.919441, 2.096496, 2.384994, 2.945392",\ + "1.083355, 1.262794, 1.438277, 1.726290, 2.285737",\ + "1.133185, 1.312624, 1.488106, 1.776120, 2.335567",\ + "1.235056, 1.414496, 1.589978, 1.877991, 2.437438",\ + "1.472914, 1.652354, 1.827836, 2.115849, 2.675297",\ + "2.045231, 2.224670, 2.400152, 2.688166, 3.247612"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.039738, 0.039738, 0.039738, 0.039738, 0.039738",\ + "0.147762, 0.147762, 0.147762, 0.147762, 0.147762",\ + "0.375019, 0.375019, 0.375019, 0.375019, 0.375019",\ + "0.869329, 0.869329, 0.869329, 0.869329, 0.869329",\ + "2.137213, 2.137213, 2.137213, 2.137213, 2.137213",\ + "0.039738, 0.039738, 0.039738, 0.039738, 0.039738",\ + "0.147762, 0.147762, 0.147762, 0.147762, 0.147762",\ + "0.375019, 0.375019, 0.375019, 0.375019, 0.375019",\ + "0.869329, 0.869329, 0.869329, 0.869329, 0.869329",\ + "2.137213, 2.137213, 2.137213, 2.137213, 2.137213",\ + "0.039738, 0.039738, 0.039738, 0.039738, 0.039738",\ + "0.147762, 0.147762, 0.147762, 0.147762, 0.147762",\ + "0.375019, 0.375019, 0.375019, 0.375019, 0.375019",\ + "0.869329, 0.869329, 0.869329, 0.869329, 0.869329",\ + "2.137213, 2.137213, 2.137213, 2.137213, 2.137213",\ + "0.039738, 0.039738, 0.039738, 0.039738, 0.039738",\ + "0.147762, 0.147762, 0.147762, 0.147762, 0.147762",\ + "0.375019, 0.375019, 0.375019, 0.375019, 0.375019",\ + "0.869329, 0.869329, 0.869329, 0.869329, 0.869329",\ + "2.137213, 2.137213, 2.137213, 2.137213, 2.137213",\ + "0.039738, 0.039738, 0.039738, 0.039738, 0.039738",\ + "0.147762, 0.147762, 0.147762, 0.147762, 0.147762",\ + "0.375019, 0.375019, 0.375019, 0.375019, 0.375019",\ + "0.869329, 0.869329, 0.869329, 0.869329, 0.869329",\ + "2.137213, 2.137213, 2.137213, 2.137213, 2.137213"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.544225, 0.764777, 0.942302, 1.231037, 1.791798",\ + "0.574581, 0.795133, 0.972659, 1.261393, 1.822155",\ + "0.615945, 0.836497, 1.014023, 1.302758, 1.863519",\ + "0.737984, 0.958535, 1.136061, 1.424796, 1.985557",\ + "1.069601, 1.290153, 1.467679, 1.756413, 2.317174",\ + "0.632637, 0.852095, 1.029583, 1.318342, 1.879151",\ + "0.662993, 0.882452, 1.059940, 1.348698, 1.909508",\ + "0.704357, 0.923816, 1.101304, 1.390063, 1.950872",\ + "0.826395, 1.045854, 1.223342, 1.512101, 2.072910",\ + "1.158013, 1.377472, 1.554960, 1.843718, 2.404528",\ + "0.721737, 0.932430, 1.109610, 1.398370, 1.959183",\ + "0.752093, 0.962787, 1.139967, 1.428727, 1.989540",\ + "0.793457, 1.004151, 1.181331, 1.470091, 2.030904",\ + "0.915496, 1.126189, 1.303369, 1.592129, 2.152942",\ + "1.247113, 1.457807, 1.634987, 1.923747, 2.484560",\ + "0.785023, 0.990247, 1.167302, 1.455800, 2.016198",\ + "0.815380, 1.020603, 1.197659, 1.486156, 2.046555",\ + "0.856744, 1.061968, 1.239023, 1.527521, 2.087919",\ + "0.978782, 1.184006, 1.361061, 1.649559, 2.209957",\ + "1.310400, 1.515623, 1.692679, 1.981176, 2.541574",\ + "1.116037, 1.295476, 1.470958, 1.758972, 2.318419",\ + "1.146393, 1.325833, 1.501315, 1.789329, 2.348775",\ + "1.187757, 1.367197, 1.542679, 1.830693, 2.390140",\ + "1.309796, 1.489235, 1.664717, 1.952731, 2.512178",\ + "1.641413, 1.820853, 1.996335, 2.284348, 2.843795"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001816, 0.074814, 0.161865, 0.321913, 0.642011"); + values ( "0.045860, 0.045860, 0.045860, 0.045860, 0.045860",\ + "0.091392, 0.091392, 0.091392, 0.091392, 0.091392",\ + "0.185815, 0.185815, 0.185815, 0.185815, 0.185815",\ + "0.432253, 0.432253, 0.432253, 0.432253, 0.432253",\ + "1.064246, 1.064246, 1.064246, 1.064246, 1.064246",\ + "0.045860, 0.045860, 0.045860, 0.045860, 0.045860",\ + "0.091392, 0.091392, 0.091392, 0.091392, 0.091392",\ + "0.185815, 0.185815, 0.185815, 0.185815, 0.185815",\ + "0.432253, 0.432253, 0.432253, 0.432253, 0.432253",\ + "1.064246, 1.064246, 1.064246, 1.064246, 1.064246",\ + "0.045860, 0.045860, 0.045860, 0.045860, 0.045860",\ + "0.091392, 0.091392, 0.091392, 0.091392, 0.091392",\ + "0.185815, 0.185815, 0.185815, 0.185815, 0.185815",\ + "0.432253, 0.432253, 0.432253, 0.432253, 0.432253",\ + "1.064246, 1.064246, 1.064246, 1.064246, 1.064246",\ + "0.045860, 0.045860, 0.045860, 0.045860, 0.045860",\ + "0.091392, 0.091392, 0.091392, 0.091392, 0.091392",\ + "0.185815, 0.185815, 0.185815, 0.185815, 0.185815",\ + "0.432253, 0.432253, 0.432253, 0.432253, 0.432253",\ + "1.064246, 1.064246, 1.064246, 1.064246, 1.064246",\ + "0.045860, 0.045860, 0.045860, 0.045860, 0.045860",\ + "0.091392, 0.091392, 0.091392, 0.091392, 0.091392",\ + "0.185815, 0.185815, 0.185815, 0.185815, 0.185815",\ + "0.432253, 0.432253, 0.432253, 0.432253, 0.432253",\ + "1.064246, 1.064246, 1.064246, 1.064246, 1.064246"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[2]_redg_min*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[29]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.493881, 0.730366, 0.921755, 1.228337, 1.821155",\ + "0.543711, 0.780195, 0.971585, 1.278167, 1.870984",\ + "0.645582, 0.882067, 1.073456, 1.380038, 1.972856",\ + "0.883440, 1.119925, 1.311315, 1.617896, 2.210714",\ + "1.455756, 1.692241, 1.883631, 2.190213, 2.783030",\ + "0.582168, 0.817683, 1.009036, 1.315642, 1.908508",\ + "0.631998, 0.867513, 1.058866, 1.365472, 1.958338",\ + "0.733870, 0.969384, 1.160737, 1.467343, 2.060209",\ + "0.971728, 1.207243, 1.398596, 1.705202, 2.298068",\ + "1.544044, 1.779559, 1.970912, 2.277518, 2.870384",\ + "0.671482, 0.898014, 1.089063, 1.395671, 1.988540",\ + "0.721312, 0.947843, 1.138893, 1.445500, 2.038369",\ + "0.823183, 1.049715, 1.240764, 1.547372, 2.140241",\ + "1.061042, 1.287573, 1.478623, 1.785230, 2.378099",\ + "1.633358, 1.859889, 2.050939, 2.357546, 2.950415",\ + "0.735219, 0.955859, 1.146789, 1.453140, 2.045635",\ + "0.785049, 1.005688, 1.196618, 1.502970, 2.095464",\ + "0.886921, 1.107560, 1.298490, 1.604841, 2.197336",\ + "1.124779, 1.345418, 1.536348, 1.842699, 2.435194",\ + "1.697095, 1.917734, 2.108664, 2.415015, 3.007510",\ + "1.072194, 1.261268, 1.450449, 1.756345, 2.347952",\ + "1.122024, 1.311097, 1.500278, 1.806174, 2.397781",\ + "1.223895, 1.412969, 1.602150, 1.908046, 2.499653",\ + "1.461754, 1.650827, 1.840008, 2.145904, 2.737511",\ + "2.034070, 2.223143, 2.412324, 2.718220, 3.309827"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.039738, 0.039738, 0.039738, 0.039738, 0.039738",\ + "0.147762, 0.147762, 0.147762, 0.147762, 0.147762",\ + "0.375019, 0.375019, 0.375019, 0.375019, 0.375019",\ + "0.869329, 0.869329, 0.869329, 0.869329, 0.869329",\ + "2.137213, 2.137213, 2.137213, 2.137213, 2.137213",\ + "0.039738, 0.039738, 0.039738, 0.039738, 0.039738",\ + "0.147762, 0.147762, 0.147762, 0.147762, 0.147762",\ + "0.375019, 0.375019, 0.375019, 0.375019, 0.375019",\ + "0.869329, 0.869329, 0.869329, 0.869329, 0.869329",\ + "2.137213, 2.137213, 2.137213, 2.137213, 2.137213",\ + "0.039738, 0.039738, 0.039738, 0.039738, 0.039738",\ + "0.147762, 0.147762, 0.147762, 0.147762, 0.147762",\ + "0.375019, 0.375019, 0.375019, 0.375019, 0.375019",\ + "0.869329, 0.869329, 0.869329, 0.869329, 0.869329",\ + "2.137213, 2.137213, 2.137213, 2.137213, 2.137213",\ + "0.039738, 0.039738, 0.039738, 0.039738, 0.039738",\ + "0.147762, 0.147762, 0.147762, 0.147762, 0.147762",\ + "0.375019, 0.375019, 0.375019, 0.375019, 0.375019",\ + "0.869329, 0.869329, 0.869329, 0.869329, 0.869329",\ + "2.137213, 2.137213, 2.137213, 2.137213, 2.137213",\ + "0.039738, 0.039738, 0.039738, 0.039738, 0.039738",\ + "0.147762, 0.147762, 0.147762, 0.147762, 0.147762",\ + "0.375019, 0.375019, 0.375019, 0.375019, 0.375019",\ + "0.869329, 0.869329, 0.869329, 0.869329, 0.869329",\ + "2.137213, 2.137213, 2.137213, 2.137213, 2.137213"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.526563, 0.763047, 0.954437, 1.261019, 1.853837",\ + "0.556919, 0.793404, 0.984794, 1.291375, 1.884193",\ + "0.598283, 0.834768, 1.026158, 1.332739, 1.925557",\ + "0.720322, 0.956806, 1.148196, 1.454778, 2.047596",\ + "1.051939, 1.288424, 1.479813, 1.786395, 2.379213",\ + "0.614850, 0.850365, 1.041718, 1.348324, 1.941190",\ + "0.645207, 0.880722, 1.072075, 1.378680, 1.971546",\ + "0.686571, 0.922086, 1.113439, 1.420045, 2.012911",\ + "0.808609, 1.044124, 1.235477, 1.542083, 2.134949",\ + "1.140227, 1.375741, 1.567094, 1.873700, 2.466566",\ + "0.704164, 0.930695, 1.121745, 1.428352, 2.021222",\ + "0.734520, 0.961052, 1.152102, 1.458709, 2.051578",\ + "0.775885, 1.002416, 1.193466, 1.500073, 2.092942",\ + "0.897923, 1.124454, 1.315504, 1.622111, 2.214981",\ + "1.229540, 1.456072, 1.647121, 1.953729, 2.546598",\ + "0.767901, 0.988540, 1.179470, 1.485822, 2.078316",\ + "0.798258, 1.018897, 1.209827, 1.516178, 2.108673",\ + "0.839622, 1.060261, 1.251191, 1.557542, 2.150037",\ + "0.961660, 1.182299, 1.373229, 1.679581, 2.272075",\ + "1.293278, 1.513917, 1.704847, 2.011198, 2.603693",\ + "1.104876, 1.293949, 1.483130, 1.789026, 2.380633",\ + "1.135232, 1.324306, 1.513487, 1.819383, 2.410990",\ + "1.176597, 1.365670, 1.554851, 1.860747, 2.452354",\ + "1.298635, 1.487708, 1.676889, 1.982785, 2.574392",\ + "1.630252, 1.819326, 2.008507, 2.314403, 2.906010"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.045860, 0.045860, 0.045860, 0.045860, 0.045860",\ + "0.091392, 0.091392, 0.091392, 0.091392, 0.091392",\ + "0.185815, 0.185815, 0.185815, 0.185815, 0.185815",\ + "0.432253, 0.432253, 0.432253, 0.432253, 0.432253",\ + "1.064246, 1.064246, 1.064246, 1.064246, 1.064246",\ + "0.045860, 0.045860, 0.045860, 0.045860, 0.045860",\ + "0.091392, 0.091392, 0.091392, 0.091392, 0.091392",\ + "0.185815, 0.185815, 0.185815, 0.185815, 0.185815",\ + "0.432253, 0.432253, 0.432253, 0.432253, 0.432253",\ + "1.064246, 1.064246, 1.064246, 1.064246, 1.064246",\ + "0.045860, 0.045860, 0.045860, 0.045860, 0.045860",\ + "0.091392, 0.091392, 0.091392, 0.091392, 0.091392",\ + "0.185815, 0.185815, 0.185815, 0.185815, 0.185815",\ + "0.432253, 0.432253, 0.432253, 0.432253, 0.432253",\ + "1.064246, 1.064246, 1.064246, 1.064246, 1.064246",\ + "0.045860, 0.045860, 0.045860, 0.045860, 0.045860",\ + "0.091392, 0.091392, 0.091392, 0.091392, 0.091392",\ + "0.185815, 0.185815, 0.185815, 0.185815, 0.185815",\ + "0.432253, 0.432253, 0.432253, 0.432253, 0.432253",\ + "1.064246, 1.064246, 1.064246, 1.064246, 1.064246",\ + "0.045860, 0.045860, 0.045860, 0.045860, 0.045860",\ + "0.091392, 0.091392, 0.091392, 0.091392, 0.091392",\ + "0.185815, 0.185815, 0.185815, 0.185815, 0.185815",\ + "0.432253, 0.432253, 0.432253, 0.432253, 0.432253",\ + "1.064246, 1.064246, 1.064246, 1.064246, 1.064246"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[2]_redg_min_2333*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[31]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.470602, 0.685204, 0.866879, 1.157031, 1.717773",\ + "0.518644, 0.733246, 0.914922, 1.205074, 1.765816",\ + "0.620710, 0.835312, 1.016988, 1.307140, 1.867882",\ + "0.851211, 1.065814, 1.247489, 1.537641, 2.098383",\ + "1.409103, 1.623705, 1.805381, 2.095532, 2.656275",\ + "0.558998, 0.772522, 0.954160, 1.244336, 1.805127",\ + "0.607041, 0.820565, 1.002203, 1.292379, 1.853169",\ + "0.709107, 0.922631, 1.104269, 1.394445, 1.955235",\ + "0.939608, 1.153132, 1.334770, 1.624946, 2.185737",\ + "1.497499, 1.711023, 1.892661, 2.182837, 2.743628",\ + "0.648348, 0.852854, 1.034187, 1.324365, 1.885158",\ + "0.696391, 0.900897, 1.082230, 1.372408, 1.933201",\ + "0.798457, 1.002963, 1.184296, 1.474474, 2.035267",\ + "1.028958, 1.233464, 1.414797, 1.704975, 2.265768",\ + "1.586850, 1.791356, 1.972688, 2.262866, 2.823659",\ + "0.711997, 0.910682, 1.091889, 1.381795, 1.942174",\ + "0.760040, 0.958725, 1.139932, 1.429837, 1.990217",\ + "0.862106, 1.060791, 1.241998, 1.531904, 2.092283",\ + "1.092607, 1.291292, 1.472499, 1.762405, 2.322784",\ + "1.650499, 1.849183, 2.030391, 2.320296, 2.880676",\ + "1.035012, 1.215977, 1.395546, 1.684966, 2.244397",\ + "1.083055, 1.264019, 1.443589, 1.733009, 2.292439",\ + "1.185121, 1.366086, 1.545655, 1.835075, 2.394506",\ + "1.415622, 1.596586, 1.776156, 2.065576, 2.625007",\ + "1.973513, 2.154478, 2.334047, 2.623468, 3.182898"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.036124, 0.036124, 0.036124, 0.036124, 0.036124",\ + "0.147307, 0.147307, 0.147307, 0.147307, 0.147307",\ + "0.375576, 0.375576, 0.375576, 0.375576, 0.375576",\ + "0.871151, 0.871151, 0.871151, 0.871151, 0.871151",\ + "2.136611, 2.136611, 2.136611, 2.136611, 2.136611",\ + "0.036124, 0.036124, 0.036124, 0.036124, 0.036124",\ + "0.147307, 0.147307, 0.147307, 0.147307, 0.147307",\ + "0.375576, 0.375576, 0.375576, 0.375576, 0.375576",\ + "0.871151, 0.871151, 0.871151, 0.871151, 0.871151",\ + "2.136611, 2.136611, 2.136611, 2.136611, 2.136611",\ + "0.036124, 0.036124, 0.036124, 0.036124, 0.036124",\ + "0.147307, 0.147307, 0.147307, 0.147307, 0.147307",\ + "0.375576, 0.375576, 0.375576, 0.375576, 0.375576",\ + "0.871151, 0.871151, 0.871151, 0.871151, 0.871151",\ + "2.136611, 2.136611, 2.136611, 2.136611, 2.136611",\ + "0.036124, 0.036124, 0.036124, 0.036124, 0.036124",\ + "0.147307, 0.147307, 0.147307, 0.147307, 0.147307",\ + "0.375576, 0.375576, 0.375576, 0.375576, 0.375576",\ + "0.871151, 0.871151, 0.871151, 0.871151, 0.871151",\ + "2.136611, 2.136611, 2.136611, 2.136611, 2.136611",\ + "0.036124, 0.036124, 0.036124, 0.036124, 0.036124",\ + "0.147307, 0.147307, 0.147307, 0.147307, 0.147307",\ + "0.375576, 0.375576, 0.375576, 0.375576, 0.375576",\ + "0.871151, 0.871151, 0.871151, 0.871151, 0.871151",\ + "2.136611, 2.136611, 2.136611, 2.136611, 2.136611"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.455792, 0.670394, 0.852070, 1.142222, 1.702964",\ + "0.494395, 0.708997, 0.890673, 1.180825, 1.741567",\ + "0.549522, 0.764125, 0.945800, 1.235952, 1.796694",\ + "0.682338, 0.896940, 1.078616, 1.368768, 1.929510",\ + "1.022840, 1.237442, 1.419117, 1.709269, 2.270011",\ + "0.544189, 0.757712, 0.939351, 1.229527, 1.790317",\ + "0.582792, 0.796315, 0.977954, 1.268130, 1.828920",\ + "0.637919, 0.851443, 1.033081, 1.323257, 1.884048",\ + "0.770735, 0.984258, 1.165897, 1.456073, 2.016863",\ + "1.111236, 1.324760, 1.506398, 1.796574, 2.357365",\ + "0.633539, 0.838045, 1.019377, 1.309555, 1.870349",\ + "0.672142, 0.876648, 1.057981, 1.348158, 1.908952",\ + "0.727269, 0.931775, 1.113108, 1.403286, 1.964079",\ + "0.860085, 1.064591, 1.245924, 1.536101, 2.096895",\ + "1.200586, 1.405093, 1.586425, 1.876603, 2.437396",\ + "0.697188, 0.895872, 1.077080, 1.366985, 1.927365",\ + "0.735791, 0.934475, 1.115683, 1.405588, 1.965968",\ + "0.790918, 0.989603, 1.170810, 1.460716, 2.021095",\ + "0.923734, 1.122418, 1.303626, 1.593531, 2.153911",\ + "1.264235, 1.462920, 1.644127, 1.934033, 2.494412",\ + "1.020202, 1.201167, 1.380737, 1.670157, 2.229587",\ + "1.058805, 1.239770, 1.419340, 1.708760, 2.268190",\ + "1.113933, 1.294898, 1.474467, 1.763887, 2.323318",\ + "1.246748, 1.427713, 1.607283, 1.896703, 2.456133",\ + "1.587250, 1.768215, 1.947784, 2.237205, 2.796635"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002343, 0.075342, 0.162260, 0.322177, 0.642011"); + values ( "0.039238, 0.039238, 0.039238, 0.039238, 0.039238",\ + "0.089111, 0.089111, 0.089111, 0.089111, 0.089111",\ + "0.185883, 0.185883, 0.185883, 0.185883, 0.185883",\ + "0.432255, 0.432255, 0.432255, 0.432255, 0.432255",\ + "1.064240, 1.064240, 1.064240, 1.064240, 1.064240",\ + "0.039238, 0.039238, 0.039238, 0.039238, 0.039238",\ + "0.089111, 0.089111, 0.089111, 0.089111, 0.089111",\ + "0.185883, 0.185883, 0.185883, 0.185883, 0.185883",\ + "0.432255, 0.432255, 0.432255, 0.432255, 0.432255",\ + "1.064240, 1.064240, 1.064240, 1.064240, 1.064240",\ + "0.039238, 0.039238, 0.039238, 0.039238, 0.039238",\ + "0.089111, 0.089111, 0.089111, 0.089111, 0.089111",\ + "0.185883, 0.185883, 0.185883, 0.185883, 0.185883",\ + "0.432255, 0.432255, 0.432255, 0.432255, 0.432255",\ + "1.064240, 1.064240, 1.064240, 1.064240, 1.064240",\ + "0.039238, 0.039238, 0.039238, 0.039238, 0.039238",\ + "0.089111, 0.089111, 0.089111, 0.089111, 0.089111",\ + "0.185883, 0.185883, 0.185883, 0.185883, 0.185883",\ + "0.432255, 0.432255, 0.432255, 0.432255, 0.432255",\ + "1.064240, 1.064240, 1.064240, 1.064240, 1.064240",\ + "0.039238, 0.039238, 0.039238, 0.039238, 0.039238",\ + "0.089111, 0.089111, 0.089111, 0.089111, 0.089111",\ + "0.185883, 0.185883, 0.185883, 0.185883, 0.185883",\ + "0.432255, 0.432255, 0.432255, 0.432255, 0.432255",\ + "1.064240, 1.064240, 1.064240, 1.064240, 1.064240"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[2]_redg_min_2437*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[33]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.448199, 0.668078, 0.854477, 1.152594, 1.728783",\ + "0.496242, 0.716121, 0.902520, 1.200637, 1.776826",\ + "0.598308, 0.818187, 1.004586, 1.302703, 1.878892",\ + "0.828809, 1.048688, 1.235087, 1.533204, 2.109392",\ + "1.386700, 1.606579, 1.792978, 2.091095, 2.667284",\ + "0.536520, 0.755396, 0.941758, 1.239900, 1.816137",\ + "0.584563, 0.803439, 0.989801, 1.287942, 1.864179",\ + "0.686629, 0.905505, 1.091867, 1.390008, 1.966245",\ + "0.917129, 1.136006, 1.322368, 1.620509, 2.196746",\ + "1.475021, 1.693897, 1.880259, 2.178401, 2.754637",\ + "0.625932, 0.835726, 1.021785, 1.319928, 1.896168",\ + "0.673975, 0.883769, 1.069828, 1.367971, 1.944211",\ + "0.776041, 0.985835, 1.171894, 1.470037, 2.046277",\ + "1.006542, 1.216336, 1.402395, 1.700537, 2.276778",\ + "1.564433, 1.774227, 1.960286, 2.258429, 2.834669",\ + "0.689763, 0.893549, 1.079499, 1.377377, 1.953223",\ + "0.737806, 0.941592, 1.127542, 1.425420, 2.001266",\ + "0.839872, 1.043658, 1.229608, 1.527486, 2.103332",\ + "1.070373, 1.274158, 1.460109, 1.757986, 2.333832",\ + "1.628264, 1.832049, 2.018000, 2.315878, 2.891724",\ + "1.020000, 1.198799, 1.383157, 1.680565, 2.255491",\ + "1.068043, 1.246842, 1.431200, 1.728607, 2.303534",\ + "1.170109, 1.348908, 1.533266, 1.830673, 2.405600",\ + "1.400609, 1.579409, 1.763767, 2.061174, 2.636101",\ + "1.958501, 2.137300, 2.321658, 2.619065, 3.193992"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.036124, 0.036124, 0.036124, 0.036124, 0.036124",\ + "0.147307, 0.147307, 0.147307, 0.147307, 0.147307",\ + "0.375576, 0.375576, 0.375576, 0.375576, 0.375576",\ + "0.871151, 0.871151, 0.871151, 0.871151, 0.871151",\ + "2.136611, 2.136611, 2.136611, 2.136611, 2.136611",\ + "0.036124, 0.036124, 0.036124, 0.036124, 0.036124",\ + "0.147307, 0.147307, 0.147307, 0.147307, 0.147307",\ + "0.375576, 0.375576, 0.375576, 0.375576, 0.375576",\ + "0.871151, 0.871151, 0.871151, 0.871151, 0.871151",\ + "2.136611, 2.136611, 2.136611, 2.136611, 2.136611",\ + "0.036124, 0.036124, 0.036124, 0.036124, 0.036124",\ + "0.147307, 0.147307, 0.147307, 0.147307, 0.147307",\ + "0.375576, 0.375576, 0.375576, 0.375576, 0.375576",\ + "0.871151, 0.871151, 0.871151, 0.871151, 0.871151",\ + "2.136611, 2.136611, 2.136611, 2.136611, 2.136611",\ + "0.036124, 0.036124, 0.036124, 0.036124, 0.036124",\ + "0.147307, 0.147307, 0.147307, 0.147307, 0.147307",\ + "0.375576, 0.375576, 0.375576, 0.375576, 0.375576",\ + "0.871151, 0.871151, 0.871151, 0.871151, 0.871151",\ + "2.136611, 2.136611, 2.136611, 2.136611, 2.136611",\ + "0.036124, 0.036124, 0.036124, 0.036124, 0.036124",\ + "0.147307, 0.147307, 0.147307, 0.147307, 0.147307",\ + "0.375576, 0.375576, 0.375576, 0.375576, 0.375576",\ + "0.871151, 0.871151, 0.871151, 0.871151, 0.871151",\ + "2.136611, 2.136611, 2.136611, 2.136611, 2.136611"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.433389, 0.653268, 0.839667, 1.137784, 1.713973",\ + "0.471993, 0.691871, 0.878270, 1.176387, 1.752576",\ + "0.527120, 0.746999, 0.933398, 1.231515, 1.807704",\ + "0.659935, 0.879814, 1.066213, 1.364330, 1.940519",\ + "1.000437, 1.220316, 1.406715, 1.704832, 2.281021",\ + "0.521709, 0.740586, 0.926948, 1.225089, 1.801326",\ + "0.560313, 0.779189, 0.965551, 1.263693, 1.839930",\ + "0.615440, 0.834317, 1.020679, 1.318820, 1.895057",\ + "0.748256, 0.967132, 1.153494, 1.451635, 2.027873",\ + "1.088757, 1.307634, 1.493996, 1.792137, 2.368374",\ + "0.611122, 0.820916, 1.006975, 1.305118, 1.881358",\ + "0.649725, 0.859520, 1.045578, 1.343721, 1.919961",\ + "0.704853, 0.914647, 1.100706, 1.398849, 1.975089",\ + "0.837668, 1.047462, 1.233521, 1.531664, 2.107904",\ + "1.178170, 1.387964, 1.574023, 1.872166, 2.448406",\ + "0.674953, 0.878738, 1.064689, 1.362566, 1.938412",\ + "0.713556, 0.917342, 1.103292, 1.401170, 1.977016",\ + "0.768684, 0.972469, 1.158420, 1.456297, 2.032143",\ + "0.901499, 1.105285, 1.291235, 1.589113, 2.164959",\ + "1.242001, 1.445786, 1.631737, 1.929615, 2.505460",\ + "1.005189, 1.183989, 1.368347, 1.665754, 2.240681",\ + "1.043793, 1.222592, 1.406950, 1.704358, 2.279284",\ + "1.098920, 1.277719, 1.462078, 1.759485, 2.334412",\ + "1.231736, 1.410535, 1.594893, 1.892301, 2.467227",\ + "1.572237, 1.751037, 1.935395, 2.232802, 2.807729"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002863, 0.075861, 0.162650, 0.322437, 0.642011"); + values ( "0.039239, 0.039239, 0.039239, 0.039239, 0.039239",\ + "0.089112, 0.089112, 0.089112, 0.089112, 0.089112",\ + "0.185883, 0.185883, 0.185883, 0.185883, 0.185883",\ + "0.432255, 0.432255, 0.432255, 0.432255, 0.432255",\ + "1.064240, 1.064240, 1.064240, 1.064240, 1.064240",\ + "0.039239, 0.039239, 0.039239, 0.039239, 0.039239",\ + "0.089112, 0.089112, 0.089112, 0.089112, 0.089112",\ + "0.185883, 0.185883, 0.185883, 0.185883, 0.185883",\ + "0.432255, 0.432255, 0.432255, 0.432255, 0.432255",\ + "1.064240, 1.064240, 1.064240, 1.064240, 1.064240",\ + "0.039239, 0.039239, 0.039239, 0.039239, 0.039239",\ + "0.089112, 0.089112, 0.089112, 0.089112, 0.089112",\ + "0.185883, 0.185883, 0.185883, 0.185883, 0.185883",\ + "0.432255, 0.432255, 0.432255, 0.432255, 0.432255",\ + "1.064240, 1.064240, 1.064240, 1.064240, 1.064240",\ + "0.039239, 0.039239, 0.039239, 0.039239, 0.039239",\ + "0.089112, 0.089112, 0.089112, 0.089112, 0.089112",\ + "0.185883, 0.185883, 0.185883, 0.185883, 0.185883",\ + "0.432255, 0.432255, 0.432255, 0.432255, 0.432255",\ + "1.064240, 1.064240, 1.064240, 1.064240, 1.064240",\ + "0.039239, 0.039239, 0.039239, 0.039239, 0.039239",\ + "0.089112, 0.089112, 0.089112, 0.089112, 0.089112",\ + "0.185883, 0.185883, 0.185883, 0.185883, 0.185883",\ + "0.432255, 0.432255, 0.432255, 0.432255, 0.432255",\ + "1.064240, 1.064240, 1.064240, 1.064240, 1.064240"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[2]_redg_min_2540*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[34]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.361629, 0.625108, 0.820219, 1.137042, 1.751491",\ + "0.411458, 0.674937, 0.870045, 1.186864, 1.801305",\ + "0.513330, 0.776809, 0.971917, 1.288736, 1.903178",\ + "0.751188, 1.014667, 1.209775, 1.526594, 2.141035",\ + "1.323504, 1.586983, 1.782091, 2.098909, 2.713349",\ + "0.450018, 0.712426, 0.907500, 1.224347, 1.838845",\ + "0.499848, 0.762256, 0.957326, 1.274169, 1.888658",\ + "0.601719, 0.864127, 1.059198, 1.376041, 1.990532",\ + "0.839577, 1.101985, 1.297056, 1.613899, 2.228389",\ + "1.411893, 1.674302, 1.869372, 2.186214, 2.800702",\ + "0.539154, 0.792761, 0.987527, 1.304375, 1.918876",\ + "0.588984, 0.842590, 1.037353, 1.354197, 1.968690",\ + "0.690855, 0.944462, 1.139225, 1.456070, 2.070563",\ + "0.928713, 1.182320, 1.377083, 1.693927, 2.308420",\ + "1.501029, 1.754636, 1.949399, 2.266243, 2.880734",\ + "0.602519, 0.850602, 1.045260, 1.361870, 1.976021",\ + "0.652348, 0.900431, 1.095087, 1.411692, 2.025835",\ + "0.754220, 1.002303, 1.196958, 1.513565, 2.127708",\ + "0.992078, 1.240161, 1.434817, 1.751422, 2.365565",\ + "1.564394, 1.812477, 2.007132, 2.323737, 2.937879",\ + "0.937147, 1.156000, 1.348922, 1.665098, 2.278399",\ + "0.986977, 1.205830, 1.398749, 1.714920, 2.328213",\ + "1.088848, 1.307701, 1.500621, 1.816792, 2.430086",\ + "1.326707, 1.545559, 1.738479, 2.054650, 2.667943",\ + "1.899023, 2.117875, 2.310795, 2.626965, 3.240257"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.039738, 0.039738, 0.039733, 0.039724, 0.039707",\ + "0.147762, 0.147762, 0.147761, 0.147760, 0.147758",\ + "0.375020, 0.375020, 0.375020, 0.375022, 0.375024",\ + "0.869330, 0.869330, 0.869330, 0.869331, 0.869332",\ + "2.137214, 2.137214, 2.137214, 2.137214, 2.137215",\ + "0.039738, 0.039738, 0.039733, 0.039724, 0.039707",\ + "0.147762, 0.147762, 0.147761, 0.147760, 0.147758",\ + "0.375020, 0.375020, 0.375020, 0.375022, 0.375024",\ + "0.869330, 0.869330, 0.869330, 0.869331, 0.869332",\ + "2.137214, 2.137214, 2.137214, 2.137214, 2.137215",\ + "0.039738, 0.039738, 0.039733, 0.039724, 0.039707",\ + "0.147762, 0.147762, 0.147761, 0.147760, 0.147758",\ + "0.375020, 0.375020, 0.375020, 0.375022, 0.375024",\ + "0.869330, 0.869330, 0.869330, 0.869331, 0.869332",\ + "2.137214, 2.137214, 2.137214, 2.137214, 2.137215",\ + "0.039738, 0.039738, 0.039733, 0.039724, 0.039706",\ + "0.147762, 0.147762, 0.147761, 0.147760, 0.147758",\ + "0.375020, 0.375020, 0.375020, 0.375022, 0.375024",\ + "0.869330, 0.869330, 0.869330, 0.869331, 0.869332",\ + "2.137214, 2.137214, 2.137214, 2.137214, 2.137215",\ + "0.039738, 0.039738, 0.039733, 0.039724, 0.039706",\ + "0.147762, 0.147762, 0.147761, 0.147760, 0.147758",\ + "0.375020, 0.375020, 0.375020, 0.375022, 0.375024",\ + "0.869330, 0.869330, 0.869330, 0.869331, 0.869332",\ + "2.137214, 2.137214, 2.137214, 2.137215, 2.137215"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.394276, 0.657755, 0.852725, 1.169033, 1.782342",\ + "0.424667, 0.688146, 0.883253, 1.200070, 1.814509",\ + "0.466031, 0.729510, 0.924618, 1.241435, 1.855873",\ + "0.588069, 0.851548, 1.046656, 1.363473, 1.977913",\ + "0.919687, 1.183166, 1.378274, 1.695092, 2.309533",\ + "0.482665, 0.745074, 0.940006, 1.256338, 1.869696",\ + "0.513056, 0.775464, 0.970534, 1.287375, 1.901862",\ + "0.554420, 0.816828, 1.011898, 1.328740, 1.943227",\ + "0.676459, 0.938867, 1.133937, 1.450778, 2.065267",\ + "1.008076, 1.270484, 1.465555, 1.782397, 2.396886",\ + "0.571801, 0.825408, 1.020033, 1.336366, 1.949727",\ + "0.602192, 0.855799, 1.050561, 1.367404, 1.981894",\ + "0.643556, 0.897163, 1.091925, 1.408768, 2.023258",\ + "0.765595, 1.019201, 1.213964, 1.530807, 2.145298",\ + "1.097212, 1.350819, 1.545582, 1.862426, 2.476918",\ + "0.635166, 0.883249, 1.077766, 1.393860, 2.006869",\ + "0.665557, 0.913640, 1.108294, 1.424899, 2.039039",\ + "0.706921, 0.955004, 1.149659, 1.466263, 2.080403",\ + "0.828959, 1.077042, 1.271697, 1.588302, 2.202443",\ + "1.160577, 1.408660, 1.603315, 1.919921, 2.534063",\ + "0.969795, 1.188647, 1.381428, 1.697086, 2.309244",\ + "1.000185, 1.219038, 1.411957, 1.728126, 2.341417",\ + "1.041550, 1.260402, 1.453321, 1.769491, 2.382781",\ + "1.163588, 1.382441, 1.575360, 1.891530, 2.504821",\ + "1.495205, 1.714058, 1.906978, 2.223148, 2.836441"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.001996, 0.074995, 0.162000, 0.322004, 0.642011"); + values ( "0.045860, 0.045860, 0.045861, 0.045861, 0.045862",\ + "0.091392, 0.091392, 0.091392, 0.091392, 0.091393",\ + "0.185815, 0.185815, 0.185815, 0.185815, 0.185816",\ + "0.432253, 0.432253, 0.432253, 0.432253, 0.432253",\ + "1.064246, 1.064246, 1.064246, 1.064246, 1.064246",\ + "0.045860, 0.045860, 0.045861, 0.045861, 0.045862",\ + "0.091392, 0.091392, 0.091392, 0.091392, 0.091393",\ + "0.185815, 0.185815, 0.185815, 0.185815, 0.185816",\ + "0.432253, 0.432253, 0.432253, 0.432253, 0.432253",\ + "1.064246, 1.064246, 1.064246, 1.064246, 1.064246",\ + "0.045860, 0.045860, 0.045861, 0.045861, 0.045862",\ + "0.091392, 0.091392, 0.091392, 0.091392, 0.091393",\ + "0.185815, 0.185815, 0.185815, 0.185815, 0.185816",\ + "0.432253, 0.432253, 0.432253, 0.432253, 0.432253",\ + "1.064246, 1.064246, 1.064246, 1.064246, 1.064246",\ + "0.045860, 0.045860, 0.045861, 0.045861, 0.045862",\ + "0.091392, 0.091392, 0.091392, 0.091392, 0.091393",\ + "0.185815, 0.185815, 0.185815, 0.185815, 0.185816",\ + "0.432253, 0.432253, 0.432253, 0.432253, 0.432253",\ + "1.064246, 1.064246, 1.064246, 1.064246, 1.064246",\ + "0.045860, 0.045860, 0.045861, 0.045861, 0.045862",\ + "0.091392, 0.091392, 0.091392, 0.091392, 0.091393",\ + "0.185815, 0.185815, 0.185815, 0.185815, 0.185816",\ + "0.432253, 0.432253, 0.432253, 0.432253, 0.432253",\ + "1.064246, 1.064246, 1.064246, 1.064246, 1.064246"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[2]_redg_min_2607*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[41]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.485123, 0.675497, 0.864625, 1.161795, 1.733234",\ + "0.533166, 0.723539, 0.912668, 1.209837, 1.781277",\ + "0.635232, 0.825605, 1.014734, 1.311903, 1.883343",\ + "0.865729, 1.056102, 1.245231, 1.542400, 2.113840",\ + "1.423621, 1.613994, 1.803123, 2.100292, 2.671732",\ + "0.573330, 0.762815, 0.951906, 1.249100, 1.820588",\ + "0.621373, 0.810857, 0.999949, 1.297143, 1.868630",\ + "0.723439, 0.912923, 1.102015, 1.399209, 1.970696",\ + "0.953936, 1.143420, 1.332512, 1.629706, 2.201193",\ + "1.511828, 1.701312, 1.890404, 2.187598, 2.759085",\ + "0.662165, 0.843147, 1.031933, 1.329129, 1.900620",\ + "0.710207, 0.891190, 1.079975, 1.377171, 1.948662",\ + "0.812273, 0.993256, 1.182042, 1.479237, 2.050728",\ + "1.042770, 1.223753, 1.412539, 1.709734, 2.281225",\ + "1.600662, 1.781645, 1.970431, 2.267626, 2.839117",\ + "0.722821, 0.900974, 1.089653, 1.386572, 1.957662",\ + "0.770863, 0.949017, 1.137696, 1.434614, 2.005704",\ + "0.872929, 1.051083, 1.239762, 1.536680, 2.107770",\ + "1.103426, 1.281580, 1.470258, 1.767177, 2.338267",\ + "1.661318, 1.839472, 2.028151, 2.325069, 2.896159",\ + "1.025458, 1.206267, 1.393313, 1.689754, 2.259915",\ + "1.073501, 1.254310, 1.441355, 1.737797, 2.307958",\ + "1.175567, 1.356376, 1.543421, 1.839863, 2.410024",\ + "1.406064, 1.586873, 1.773918, 2.070360, 2.640521",\ + "1.963956, 2.144765, 2.331810, 2.628252, 3.198413"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.036124, 0.036124, 0.036124, 0.036124, 0.036124",\ + "0.147307, 0.147307, 0.147307, 0.147307, 0.147307",\ + "0.375576, 0.375576, 0.375576, 0.375576, 0.375576",\ + "0.871150, 0.871150, 0.871150, 0.871150, 0.871150",\ + "2.136611, 2.136611, 2.136611, 2.136611, 2.136611",\ + "0.036124, 0.036124, 0.036124, 0.036124, 0.036124",\ + "0.147307, 0.147307, 0.147307, 0.147307, 0.147307",\ + "0.375576, 0.375576, 0.375576, 0.375576, 0.375576",\ + "0.871150, 0.871150, 0.871150, 0.871150, 0.871150",\ + "2.136611, 2.136611, 2.136611, 2.136611, 2.136611",\ + "0.036124, 0.036124, 0.036124, 0.036124, 0.036124",\ + "0.147307, 0.147307, 0.147307, 0.147307, 0.147307",\ + "0.375576, 0.375576, 0.375576, 0.375576, 0.375576",\ + "0.871150, 0.871150, 0.871150, 0.871150, 0.871150",\ + "2.136611, 2.136611, 2.136611, 2.136611, 2.136611",\ + "0.036124, 0.036124, 0.036124, 0.036124, 0.036124",\ + "0.147307, 0.147307, 0.147307, 0.147307, 0.147307",\ + "0.375576, 0.375576, 0.375576, 0.375576, 0.375576",\ + "0.871150, 0.871150, 0.871150, 0.871150, 0.871150",\ + "2.136611, 2.136611, 2.136611, 2.136611, 2.136611",\ + "0.036124, 0.036124, 0.036124, 0.036124, 0.036124",\ + "0.147307, 0.147307, 0.147307, 0.147307, 0.147307",\ + "0.375576, 0.375576, 0.375576, 0.375576, 0.375576",\ + "0.871150, 0.871150, 0.871150, 0.871150, 0.871150",\ + "2.136611, 2.136611, 2.136611, 2.136611, 2.136611"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.470306, 0.660679, 0.849808, 1.146978, 1.718417",\ + "0.508912, 0.699286, 0.888414, 1.185584, 1.757023",\ + "0.564040, 0.754413, 0.943542, 1.240712, 1.812151",\ + "0.696855, 0.887228, 1.076357, 1.373527, 1.944966",\ + "1.037356, 1.227730, 1.416858, 1.714028, 2.285468",\ + "0.558513, 0.747998, 0.937089, 1.234283, 1.805771",\ + "0.597120, 0.786604, 0.975695, 1.272889, 1.844377",\ + "0.652247, 0.841732, 1.030823, 1.328017, 1.899504",\ + "0.785062, 0.974547, 1.163638, 1.460832, 2.032320",\ + "1.125564, 1.315048, 1.504139, 1.801333, 2.372821",\ + "0.647348, 0.828330, 1.017116, 1.314311, 1.885802",\ + "0.685954, 0.866936, 1.055722, 1.352918, 1.924409",\ + "0.741081, 0.922064, 1.110850, 1.408045, 1.979536",\ + "0.873897, 1.054879, 1.243665, 1.540860, 2.112351",\ + "1.214398, 1.395380, 1.584166, 1.881362, 2.452853",\ + "0.708003, 0.886157, 1.074836, 1.371754, 1.942844",\ + "0.746610, 0.924764, 1.113442, 1.410361, 1.981451",\ + "0.801737, 0.979891, 1.168570, 1.465488, 2.036578",\ + "0.934552, 1.112706, 1.301385, 1.598303, 2.169393",\ + "1.275054, 1.453207, 1.641886, 1.938805, 2.509895",\ + "1.010641, 1.191450, 1.378495, 1.674937, 2.245098",\ + "1.049248, 1.230056, 1.417102, 1.713544, 2.283704",\ + "1.104375, 1.285184, 1.472229, 1.768671, 2.338832",\ + "1.237190, 1.417999, 1.605044, 1.901486, 2.471647",\ + "1.577692, 1.758500, 1.945546, 2.241987, 2.812148"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002414, 0.075412, 0.162313, 0.322212, 0.642011"); + values ( "0.039243, 0.039243, 0.039243, 0.039243, 0.039243",\ + "0.089116, 0.089116, 0.089116, 0.089116, 0.089116",\ + "0.185883, 0.185883, 0.185883, 0.185883, 0.185883",\ + "0.432255, 0.432255, 0.432255, 0.432255, 0.432255",\ + "1.064240, 1.064240, 1.064240, 1.064240, 1.064240",\ + "0.039243, 0.039243, 0.039243, 0.039243, 0.039243",\ + "0.089116, 0.089116, 0.089116, 0.089116, 0.089116",\ + "0.185883, 0.185883, 0.185883, 0.185883, 0.185883",\ + "0.432255, 0.432255, 0.432255, 0.432255, 0.432255",\ + "1.064240, 1.064240, 1.064240, 1.064240, 1.064240",\ + "0.039243, 0.039243, 0.039243, 0.039243, 0.039243",\ + "0.089116, 0.089116, 0.089116, 0.089116, 0.089116",\ + "0.185883, 0.185883, 0.185883, 0.185883, 0.185883",\ + "0.432255, 0.432255, 0.432255, 0.432255, 0.432255",\ + "1.064240, 1.064240, 1.064240, 1.064240, 1.064240",\ + "0.039243, 0.039243, 0.039243, 0.039243, 0.039243",\ + "0.089116, 0.089116, 0.089116, 0.089116, 0.089116",\ + "0.185883, 0.185883, 0.185883, 0.185883, 0.185883",\ + "0.432255, 0.432255, 0.432255, 0.432255, 0.432255",\ + "1.064240, 1.064240, 1.064240, 1.064240, 1.064240",\ + "0.039243, 0.039243, 0.039243, 0.039243, 0.039243",\ + "0.089116, 0.089116, 0.089116, 0.089116, 0.089116",\ + "0.185883, 0.185883, 0.185883, 0.185883, 0.185883",\ + "0.432255, 0.432255, 0.432255, 0.432255, 0.432255",\ + "1.064240, 1.064240, 1.064240, 1.064240, 1.064240"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[2]_redg_min_2372*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[42]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.459771, 0.648282, 0.825192, 1.109164, 1.658848",\ + "0.507814, 0.696324, 0.873234, 1.157206, 1.706890",\ + "0.609880, 0.798391, 0.975300, 1.259272, 1.808956",\ + "0.840377, 1.028888, 1.205797, 1.489769, 2.039453",\ + "1.398269, 1.586780, 1.763690, 2.047661, 2.597345",\ + "0.548200, 0.735600, 0.912473, 1.196469, 1.746201",\ + "0.596242, 0.783643, 0.960515, 1.244511, 1.794243",\ + "0.698308, 0.885709, 1.062581, 1.346577, 1.896309",\ + "0.928805, 1.116206, 1.293078, 1.577074, 2.126806",\ + "1.486698, 1.674098, 1.850971, 2.134966, 2.684699",\ + "0.637701, 0.815933, 0.992500, 1.276497, 1.826233",\ + "0.685743, 0.863975, 1.040542, 1.324540, 1.874275",\ + "0.787809, 0.966041, 1.142608, 1.426606, 1.976341",\ + "1.018306, 1.196538, 1.373105, 1.657103, 2.206838",\ + "1.576198, 1.754430, 1.930997, 2.214995, 2.764730",\ + "0.697261, 0.873753, 1.050191, 1.333914, 1.883222",\ + "0.745304, 0.921796, 1.098233, 1.381956, 1.931265",\ + "0.847370, 1.023862, 1.200299, 1.484022, 2.033331",\ + "1.077867, 1.254359, 1.430796, 1.714519, 2.263828",\ + "1.635759, 1.812251, 1.988688, 2.272411, 2.821720",\ + "0.999714, 1.179002, 1.353846, 1.637074, 2.185413",\ + "1.047756, 1.227044, 1.401888, 1.685117, 2.233455",\ + "1.149822, 1.329110, 1.503954, 1.787183, 2.335521",\ + "1.380320, 1.559607, 1.734451, 2.017680, 2.566018",\ + "1.938212, 2.117499, 2.292344, 2.575572, 3.123910"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.036124, 0.036124, 0.036124, 0.036124, 0.036124",\ + "0.147307, 0.147307, 0.147307, 0.147307, 0.147307",\ + "0.375576, 0.375576, 0.375576, 0.375576, 0.375576",\ + "0.871150, 0.871150, 0.871150, 0.871150, 0.871150",\ + "2.136611, 2.136611, 2.136611, 2.136611, 2.136611",\ + "0.036124, 0.036124, 0.036124, 0.036124, 0.036124",\ + "0.147307, 0.147307, 0.147307, 0.147307, 0.147307",\ + "0.375576, 0.375576, 0.375576, 0.375576, 0.375576",\ + "0.871150, 0.871150, 0.871150, 0.871150, 0.871150",\ + "2.136611, 2.136611, 2.136611, 2.136611, 2.136611",\ + "0.036124, 0.036124, 0.036124, 0.036124, 0.036124",\ + "0.147307, 0.147307, 0.147307, 0.147307, 0.147307",\ + "0.375576, 0.375576, 0.375576, 0.375576, 0.375576",\ + "0.871150, 0.871150, 0.871150, 0.871150, 0.871150",\ + "2.136611, 2.136611, 2.136611, 2.136611, 2.136611",\ + "0.036124, 0.036124, 0.036124, 0.036124, 0.036124",\ + "0.147307, 0.147307, 0.147307, 0.147307, 0.147307",\ + "0.375576, 0.375576, 0.375576, 0.375576, 0.375576",\ + "0.871150, 0.871150, 0.871150, 0.871150, 0.871150",\ + "2.136611, 2.136611, 2.136611, 2.136611, 2.136611",\ + "0.036124, 0.036124, 0.036124, 0.036124, 0.036124",\ + "0.147307, 0.147307, 0.147307, 0.147307, 0.147307",\ + "0.375576, 0.375576, 0.375576, 0.375576, 0.375576",\ + "0.871150, 0.871150, 0.871150, 0.871150, 0.871150",\ + "2.136611, 2.136611, 2.136611, 2.136611, 2.136611"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.444954, 0.633465, 0.810375, 1.094347, 1.644030",\ + "0.483561, 0.672071, 0.848981, 1.132953, 1.682637",\ + "0.538688, 0.727199, 0.904109, 1.188081, 1.737764",\ + "0.671503, 0.860014, 1.036924, 1.320896, 1.870579",\ + "1.012004, 1.200515, 1.377425, 1.661397, 2.211081",\ + "0.533383, 0.720783, 0.897656, 1.181652, 1.731384",\ + "0.571989, 0.759389, 0.936262, 1.220258, 1.769990",\ + "0.627117, 0.814517, 0.991390, 1.275386, 1.825118",\ + "0.759932, 0.947332, 1.124205, 1.408201, 1.957933",\ + "1.100433, 1.287833, 1.464706, 1.748702, 2.298434",\ + "0.622883, 0.801115, 0.977683, 1.261680, 1.811415",\ + "0.661490, 0.839722, 1.016289, 1.300287, 1.850022",\ + "0.716617, 0.894849, 1.071416, 1.355414, 1.905149",\ + "0.849432, 1.027664, 1.204232, 1.488229, 2.037964",\ + "1.189934, 1.368166, 1.544733, 1.828730, 2.378466",\ + "0.682444, 0.858936, 1.035374, 1.319097, 1.868405",\ + "0.721051, 0.897543, 1.073980, 1.357703, 1.907012",\ + "0.776178, 0.952670, 1.129108, 1.412831, 1.962139",\ + "0.908993, 1.085485, 1.261923, 1.545646, 2.094954",\ + "1.249495, 1.425987, 1.602424, 1.886147, 2.435456",\ + "0.984897, 1.164185, 1.339029, 1.622257, 2.170596",\ + "1.023503, 1.202791, 1.377635, 1.660863, 2.209202",\ + "1.078631, 1.257918, 1.432763, 1.715991, 2.264329",\ + "1.211446, 1.390733, 1.565578, 1.848806, 2.397144",\ + "1.551947, 1.731235, 1.906079, 2.189307, 2.737646"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002445, 0.075444, 0.162337, 0.322228, 0.642011"); + values ( "0.039243, 0.039243, 0.039243, 0.039243, 0.039243",\ + "0.089116, 0.089116, 0.089116, 0.089116, 0.089116",\ + "0.185883, 0.185883, 0.185883, 0.185883, 0.185883",\ + "0.432255, 0.432255, 0.432255, 0.432255, 0.432255",\ + "1.064240, 1.064240, 1.064240, 1.064240, 1.064240",\ + "0.039243, 0.039243, 0.039243, 0.039243, 0.039243",\ + "0.089116, 0.089116, 0.089116, 0.089116, 0.089116",\ + "0.185883, 0.185883, 0.185883, 0.185883, 0.185883",\ + "0.432255, 0.432255, 0.432255, 0.432255, 0.432255",\ + "1.064240, 1.064240, 1.064240, 1.064240, 1.064240",\ + "0.039243, 0.039243, 0.039243, 0.039243, 0.039243",\ + "0.089116, 0.089116, 0.089116, 0.089116, 0.089116",\ + "0.185883, 0.185883, 0.185883, 0.185883, 0.185883",\ + "0.432255, 0.432255, 0.432255, 0.432255, 0.432255",\ + "1.064240, 1.064240, 1.064240, 1.064240, 1.064240",\ + "0.039243, 0.039243, 0.039243, 0.039243, 0.039243",\ + "0.089116, 0.089116, 0.089116, 0.089116, 0.089116",\ + "0.185883, 0.185883, 0.185883, 0.185883, 0.185883",\ + "0.432255, 0.432255, 0.432255, 0.432255, 0.432255",\ + "1.064240, 1.064240, 1.064240, 1.064240, 1.064240",\ + "0.039243, 0.039243, 0.039243, 0.039243, 0.039243",\ + "0.089116, 0.089116, 0.089116, 0.089116, 0.089116",\ + "0.185883, 0.185883, 0.185883, 0.185883, 0.185883",\ + "0.432255, 0.432255, 0.432255, 0.432255, 0.432255",\ + "1.064240, 1.064240, 1.064240, 1.064240, 1.064240"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[2]_redg_min_2329*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[45]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.301772, 0.506117, 0.689126, 0.977165, 1.531523",\ + "0.351626, 0.555943, 0.738945, 1.026979, 1.581328",\ + "0.453495, 0.657815, 0.840818, 1.128852, 1.683202",\ + "0.691355, 0.895673, 1.078675, 1.366709, 1.921058",\ + "1.263674, 1.467989, 1.650990, 1.939023, 2.493371",\ + "0.390122, 0.593435, 0.776407, 1.064470, 1.618876",\ + "0.439975, 0.643261, 0.826226, 1.114284, 1.668681",\ + "0.541844, 0.745133, 0.928099, 1.216157, 1.770555",\ + "0.779704, 0.982991, 1.165956, 1.454014, 2.008411",\ + "1.352023, 1.555307, 1.738271, 2.026328, 2.580724",\ + "0.479549, 0.673766, 0.856434, 1.144499, 1.698908",\ + "0.529399, 0.723592, 0.906253, 1.194312, 1.748713",\ + "0.631269, 0.825464, 1.008125, 1.296185, 1.850587",\ + "0.869129, 1.063322, 1.245983, 1.534042, 2.088443",\ + "1.441448, 1.635638, 1.818298, 2.106356, 2.660756",\ + "0.543362, 0.731582, 0.914140, 1.201921, 1.755909",\ + "0.593211, 0.781408, 0.963959, 1.251735, 1.805714",\ + "0.695080, 0.883280, 1.065832, 1.353608, 1.907588",\ + "0.932940, 1.121138, 1.303689, 1.591465, 2.145445",\ + "1.505259, 1.693454, 1.876004, 2.163779, 2.717757",\ + "0.859181, 1.036793, 1.217797, 1.505086, 2.058114",\ + "0.909031, 1.086618, 1.267616, 1.554900, 2.107919",\ + "1.010900, 1.188490, 1.369488, 1.656773, 2.209793",\ + "1.248760, 1.426348, 1.607346, 1.894630, 2.447649",\ + "1.821079, 1.998664, 2.179661, 2.466944, 3.019962"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.039786, 0.039731, 0.039718, 0.039707, 0.039690",\ + "0.147768, 0.147761, 0.147759, 0.147758, 0.147756",\ + "0.375012, 0.375021, 0.375023, 0.375024, 0.375027",\ + "0.869318, 0.869319, 0.869321, 0.869323, 0.869326",\ + "2.137207, 2.137208, 2.137209, 2.137210, 2.137212",\ + "0.039784, 0.039731, 0.039718, 0.039707, 0.039690",\ + "0.147768, 0.147761, 0.147759, 0.147758, 0.147756",\ + "0.375012, 0.375021, 0.375023, 0.375024, 0.375027",\ + "0.869318, 0.869319, 0.869321, 0.869323, 0.869326",\ + "2.137207, 2.137208, 2.137209, 2.137210, 2.137212",\ + "0.039780, 0.039731, 0.039718, 0.039707, 0.039690",\ + "0.147767, 0.147761, 0.147759, 0.147758, 0.147756",\ + "0.375013, 0.375021, 0.375023, 0.375024, 0.375027",\ + "0.869318, 0.869319, 0.869321, 0.869323, 0.869326",\ + "2.137207, 2.137208, 2.137209, 2.137210, 2.137212",\ + "0.039776, 0.039731, 0.039718, 0.039707, 0.039690",\ + "0.147767, 0.147761, 0.147759, 0.147758, 0.147756",\ + "0.375014, 0.375021, 0.375023, 0.375024, 0.375027",\ + "0.869318, 0.869319, 0.869321, 0.869323, 0.869326",\ + "2.137207, 2.137208, 2.137209, 2.137210, 2.137212",\ + "0.039779, 0.039730, 0.039718, 0.039707, 0.039690",\ + "0.147767, 0.147761, 0.147759, 0.147758, 0.147756",\ + "0.375013, 0.375021, 0.375023, 0.375024, 0.375027",\ + "0.869318, 0.869319, 0.869321, 0.869323, 0.869326",\ + "2.137207, 2.137208, 2.137209, 2.137210, 2.137212"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.335876, 0.546804, 0.729804, 1.017837, 1.572184",\ + "0.364841, 0.569151, 0.752151, 1.040183, 1.594529",\ + "0.406205, 0.610515, 0.793515, 1.081547, 1.635894",\ + "0.528241, 0.732554, 0.915554, 1.203587, 1.757934",\ + "0.859855, 1.064172, 1.247173, 1.535207, 2.089556",\ + "0.424190, 0.634122, 0.817085, 1.105142, 1.659538",\ + "0.453190, 0.656469, 0.839432, 1.127488, 1.681883",\ + "0.494554, 0.697833, 0.880796, 1.168852, 1.723248",\ + "0.616590, 0.819872, 1.002835, 1.290892, 1.845288",\ + "0.948204, 1.151490, 1.334454, 1.622512, 2.176909",\ + "0.513507, 0.714453, 0.897112, 1.185170, 1.739569",\ + "0.542614, 0.736800, 0.919459, 1.207516, 1.761914",\ + "0.583978, 0.778164, 0.960823, 1.248881, 1.803279",\ + "0.706014, 0.900203, 1.082862, 1.370920, 1.925319",\ + "1.037629, 1.231821, 1.414481, 1.702540, 2.256941",\ + "0.577218, 0.772269, 0.954818, 1.242593, 1.796571",\ + "0.606425, 0.794616, 0.977165, 1.264939, 1.818916",\ + "0.647789, 0.835980, 1.018529, 1.306303, 1.860281",\ + "0.769825, 0.958019, 1.140568, 1.428343, 1.982321",\ + "1.101440, 1.289637, 1.472187, 1.759963, 2.313942",\ + "0.899896, 1.077479, 1.258475, 1.545758, 2.098775",\ + "0.922245, 1.099826, 1.280822, 1.568104, 2.121120",\ + "0.963609, 1.141190, 1.322186, 1.609468, 2.162485",\ + "1.085645, 1.263229, 1.444225, 1.731508, 2.284525",\ + "1.417260, 1.594847, 1.775844, 2.063128, 2.616147"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001159, 0.003003, 0.007781, 0.020161"); + index_3 ( "0.002729, 0.075727, 0.162549, 0.322370, 0.642011"); + values ( "0.045857, 0.045861, 0.045862, 0.045862, 0.045864",\ + "0.091390, 0.091392, 0.091392, 0.091393, 0.091393",\ + "0.185814, 0.185815, 0.185815, 0.185816, 0.185816",\ + "0.432252, 0.432253, 0.432253, 0.432253, 0.432253",\ + "1.064247, 1.064246, 1.064246, 1.064246, 1.064246",\ + "0.045857, 0.045861, 0.045862, 0.045862, 0.045864",\ + "0.091390, 0.091392, 0.091392, 0.091393, 0.091393",\ + "0.185814, 0.185815, 0.185815, 0.185816, 0.185816",\ + "0.432252, 0.432253, 0.432253, 0.432253, 0.432253",\ + "1.064247, 1.064246, 1.064246, 1.064246, 1.064246",\ + "0.045857, 0.045861, 0.045862, 0.045862, 0.045864",\ + "0.091390, 0.091392, 0.091392, 0.091393, 0.091393",\ + "0.185814, 0.185815, 0.185815, 0.185816, 0.185816",\ + "0.432252, 0.432253, 0.432253, 0.432253, 0.432253",\ + "1.064247, 1.064246, 1.064246, 1.064246, 1.064246",\ + "0.045857, 0.045861, 0.045862, 0.045862, 0.045864",\ + "0.091390, 0.091392, 0.091392, 0.091393, 0.091393",\ + "0.185814, 0.185815, 0.185815, 0.185816, 0.185816",\ + "0.432252, 0.432253, 0.432253, 0.432253, 0.432253",\ + "1.064247, 1.064246, 1.064246, 1.064246, 1.064246",\ + "0.045857, 0.045861, 0.045862, 0.045862, 0.045864",\ + "0.091390, 0.091392, 0.091392, 0.091393, 0.091393",\ + "0.185814, 0.185815, 0.185815, 0.185816, 0.185816",\ + "0.432252, 0.432253, 0.432253, 0.432253, 0.432253",\ + "1.064247, 1.064246, 1.064246, 1.064246, 1.064246"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[2]_redg_min_2545*/ + +} /* end of pin tl_o[2] */ + +pin("tl_o[1]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001509 ; + + /* Other user defined attributes. */ + original_pin : tl_o[1]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.046822, 0.200204, 0.375821, 0.698828, 1.344843",\ + "0.133063, 0.287379, 0.462927, 0.785543, 1.430777",\ + "0.215932, 0.375508, 0.550883, 0.873166, 1.517732",\ + "0.273510, 0.439904, 0.614999, 0.937080, 1.581241",\ + "0.571476, 0.789768, 0.965387, 1.285824, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.022274, 0.297864, 0.631591, 1.248582, 2.482564",\ + "0.026983, 0.298841, 0.633546, 1.248582, 2.482564",\ + "0.040131, 0.301114, 0.633582, 1.248582, 2.482564",\ + "0.052012, 0.304418, 0.633682, 1.248582, 2.482564",\ + "0.127272, 0.343015, 0.639946, 1.251147, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.066617, 0.172302, 0.283906, 0.488180, 0.896728",\ + "0.154032, 0.259620, 0.371187, 0.575485, 0.984081",\ + "0.234373, 0.339957, 0.451214, 0.655513, 1.064113",\ + "0.291019, 0.397505, 0.508757, 0.712758, 1.120761",\ + "0.584343, 0.700840, 0.812391, 1.015773, 1.422537"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.023322, 0.186287, 0.386928, 0.759411, 1.504378",\ + "0.023322, 0.186429, 0.387433, 0.759411, 1.504378",\ + "0.024460, 0.186429, 0.387433, 0.759411, 1.504378",\ + "0.026582, 0.186429, 0.387433, 0.759411, 1.504378",\ + "0.045430, 0.190441, 0.387433, 0.759411, 1.504658"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[1]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.046822, 0.200204, 0.375821, 0.698828, 1.344843",\ + "0.133063, 0.287379, 0.462927, 0.785543, 1.430777",\ + "0.215932, 0.375508, 0.550883, 0.873166, 1.517732",\ + "0.273510, 0.439904, 0.614999, 0.937080, 1.581241",\ + "0.571476, 0.789768, 0.965387, 1.285824, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.022274, 0.297864, 0.631591, 1.247358, 2.473548",\ + "0.026983, 0.298841, 0.633546, 1.247358, 2.473548",\ + "0.040131, 0.301114, 0.633582, 1.247433, 2.473548",\ + "0.052012, 0.304418, 0.633682, 1.248176, 2.473548",\ + "0.127272, 0.343015, 0.639946, 1.251147, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.066617, 0.172302, 0.283906, 0.488180, 0.896728",\ + "0.154032, 0.259620, 0.371187, 0.575485, 0.984081",\ + "0.234373, 0.339957, 0.451214, 0.655513, 1.064113",\ + "0.291019, 0.397505, 0.508757, 0.712758, 1.120761",\ + "0.584343, 0.700840, 0.812391, 1.015773, 1.422537"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001509, 0.074507, 0.161634, 0.321760, 0.642011"); + values ( "0.023322, 0.185492, 0.385423, 0.757182, 1.500701",\ + "0.023322, 0.185492, 0.385423, 0.757182, 1.500701",\ + "0.024460, 0.185492, 0.385423, 0.757182, 1.500701",\ + "0.026582, 0.186104, 0.385879, 0.758083, 1.502492",\ + "0.045430, 0.190441, 0.385949, 0.758852, 1.504658"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[1]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.022274, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.215141, 0.169212, 0.139013, 0.127669, 0.141354",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.023322, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.250035, 0.174713, 0.106554, 0.083587, 0.146501",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[1]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.022274, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.147068, -0.104651, -0.070164, -0.030741, 0.275306",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.023322, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.163191, -0.097276, -0.039617, 0.002344, 0.222952",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[1]_hldr*/ + +} /* end of pin tl_o[1] */ + +pin("tl_o[0]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.044859 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : tl_o[0]; + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[65]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000590, 0.001754, 0.015524, 0.044859"); + index_3 ( "0.000991, 0.073990, 0.161246, 0.321501, 0.642011"); + values ( "0.097208, 0.256769, 0.409091, 0.656426, 1.137408",\ + "0.115461, 0.284095, 0.450445, 0.715246, 1.227124",\ + "0.150308, 0.323698, 0.505958, 0.792733, 1.344666",\ + "0.555435, 0.728531, 0.927338, 1.279607, 1.977668",\ + "1.416767, 1.591727, 1.785882, 2.145544, 2.866017",\ + "0.184700, 0.344133, 0.496471, 0.743731, 1.224761",\ + "0.202953, 0.371467, 0.537861, 0.802551, 1.314477",\ + "0.237800, 0.411073, 0.593415, 0.880038, 1.432020",\ + "0.642927, 0.815906, 1.014839, 1.366912, 2.065021",\ + "1.504259, 1.679104, 1.873371, 2.232849, 2.953371",\ + "0.265280, 0.424472, 0.576498, 0.823760, 1.304793",\ + "0.283590, 0.451806, 0.617887, 0.882580, 1.394509",\ + "0.318468, 0.491412, 0.673442, 0.960067, 1.512051",\ + "0.723592, 0.896245, 1.094866, 1.446940, 2.145053",\ + "1.584936, 1.759443, 1.953398, 2.312878, 3.033402",\ + "0.322520, 0.482020, 0.634043, 0.881006, 1.361440",\ + "0.340954, 0.509354, 0.675432, 0.939825, 1.451157",\ + "0.375896, 0.548960, 0.730986, 1.017312, 1.568699",\ + "0.781016, 0.953793, 1.152410, 1.504186, 2.201700",\ + "1.642386, 1.816991, 2.010942, 2.370123, 3.090050",\ + "0.620809, 0.786662, 0.937678, 1.184021, 1.663244",\ + "0.640290, 0.814221, 0.979067, 1.242841, 1.752972",\ + "0.675782, 0.853946, 1.034621, 1.320328, 1.870529",\ + "1.080868, 1.258772, 1.456046, 1.807201, 2.503586",\ + "1.942453, 2.122015, 2.314578, 2.673139, 3.391944"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000590, 0.001754, 0.015524, 0.044859"); + index_3 ( "0.000991, 0.073990, 0.161246, 0.321501, 0.642011"); + values ( "0.031051, 0.064939, 0.106507, 0.168112, 0.284243",\ + "0.062823, 0.089481, 0.136238, 0.207829, 0.343471",\ + "0.126154, 0.132352, 0.184740, 0.267437, 0.424225",\ + "0.854886, 0.854886, 0.855036, 0.913502, 1.057002",\ + "2.399794, 2.399794, 2.399794, 2.406500, 2.422973",\ + "0.031051, 0.064968, 0.106612, 0.168112, 0.284243",\ + "0.062823, 0.089504, 0.136357, 0.207829, 0.343471",\ + "0.126154, 0.132357, 0.184878, 0.267437, 0.424225",\ + "0.854886, 0.854886, 0.855037, 0.913502, 1.057002",\ + "2.399794, 2.399794, 2.399794, 2.406500, 2.422973",\ + "0.031266, 0.064968, 0.106612, 0.168112, 0.284243",\ + "0.062992, 0.089504, 0.136357, 0.207829, 0.343471",\ + "0.126193, 0.132357, 0.184878, 0.267437, 0.424225",\ + "0.854886, 0.854886, 0.855037, 0.913502, 1.057002",\ + "2.399794, 2.399794, 2.399794, 2.406500, 2.422973",\ + "0.031727, 0.064968, 0.106612, 0.168112, 0.284243",\ + "0.063355, 0.089504, 0.136357, 0.207829, 0.343471",\ + "0.126277, 0.132357, 0.184878, 0.267437, 0.424225",\ + "0.854886, 0.854886, 0.855037, 0.913502, 1.057002",\ + "2.399794, 2.399794, 2.399794, 2.406500, 2.422973",\ + "0.035640, 0.065810, 0.106612, 0.168112, 0.284287",\ + "0.066433, 0.090167, 0.136357, 0.207829, 0.343522",\ + "0.126993, 0.132511, 0.184878, 0.267437, 0.424284",\ + "0.854886, 0.854886, 0.855037, 0.913502, 1.057056",\ + "2.399794, 2.399794, 2.399794, 2.406500, 2.422979"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000590, 0.001754, 0.015524, 0.044859"); + index_3 ( "0.000991, 0.073990, 0.161246, 0.321501, 0.642011"); + values ( "0.062809, 0.283388, 0.498683, 0.866951, 1.603486",\ + "0.068905, 0.306781, 0.537627, 0.930389, 1.715913",\ + "0.080269, 0.336426, 0.586045, 1.007586, 1.850669",\ + "0.212849, 0.497229, 0.809203, 1.343143, 2.411022",\ + "0.495174, 0.777787, 1.106916, 1.706802, 2.906575",\ + "0.150255, 0.370725, 0.585933, 0.953667, 1.689420",\ + "0.156684, 0.394170, 0.624955, 1.017105, 1.801846",\ + "0.168373, 0.423879, 0.673464, 1.094302, 1.936603",\ + "0.301203, 0.584867, 0.896980, 1.429859, 2.496955",\ + "0.583505, 0.865416, 1.194902, 1.793518, 2.992509",\ + "0.236169, 0.459238, 0.673893, 1.041290, 1.776375",\ + "0.243498, 0.482807, 0.712916, 1.104728, 1.888801",\ + "0.256066, 0.512668, 0.761427, 1.181925, 2.023558",\ + "0.389574, 0.674096, 0.984949, 1.517482, 2.583910",\ + "0.671814, 0.954623, 1.282876, 1.881141, 3.079464",\ + "0.296494, 0.524194, 0.738017, 1.105204, 1.839884",\ + "0.304623, 0.547943, 0.777044, 1.168642, 1.952310",\ + "0.317970, 0.578026, 0.825559, 1.245839, 2.087067",\ + "0.452080, 0.740091, 1.049099, 1.581396, 2.647419",\ + "0.734265, 1.020587, 1.347036, 1.945055, 3.142973",\ + "0.612030, 0.880553, 1.088866, 1.454138, 2.185340",\ + "0.625211, 0.906402, 1.128142, 1.517678, 2.297766",\ + "0.643489, 0.939075, 1.176949, 1.594995, 2.432523",\ + "0.781402, 1.108582, 1.401631, 1.931020, 2.992876",\ + "1.063240, 1.388711, 1.700238, 2.294955, 3.488429"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000590, 0.001754, 0.015524, 0.044859"); + index_3 ( "0.000991, 0.073990, 0.161246, 0.321501, 0.642011"); + values ( "0.011160, 0.064436, 0.116932, 0.202254, 0.372899",\ + "0.020800, 0.078264, 0.137685, 0.234686, 0.428687",\ + "0.041454, 0.098634, 0.166400, 0.277542, 0.499826",\ + "0.284826, 0.291930, 0.346150, 0.498019, 0.801757",\ + "0.801745, 0.802553, 0.834131, 0.941202, 1.155343",\ + "0.012155, 0.064608, 0.117203, 0.202254, 0.372899",\ + "0.021847, 0.078458, 0.137993, 0.234686, 0.428687",\ + "0.042416, 0.098854, 0.166753, 0.277542, 0.499826",\ + "0.284826, 0.291998, 0.346632, 0.498019, 0.801757",\ + "0.801745, 0.802560, 0.834471, 0.941202, 1.155343",\ + "0.014841, 0.065015, 0.117208, 0.202254, 0.372899",\ + "0.024678, 0.078917, 0.137999, 0.234686, 0.428687",\ + "0.045017, 0.099375, 0.166760, 0.277542, 0.499826",\ + "0.284826, 0.292159, 0.346641, 0.498019, 0.801757",\ + "0.801745, 0.802579, 0.834477, 0.941202, 1.155343",\ + "0.017226, 0.065607, 0.117221, 0.202254, 0.372899",\ + "0.027191, 0.079585, 0.138014, 0.234686, 0.428687",\ + "0.047325, 0.100134, 0.166777, 0.277542, 0.499826",\ + "0.284826, 0.292394, 0.346665, 0.498019, 0.801757",\ + "0.801745, 0.802605, 0.834494, 0.941202, 1.155343",\ + "0.032302, 0.072514, 0.118088, 0.202610, 0.372899",\ + "0.043078, 0.087374, 0.139000, 0.235090, 0.428687",\ + "0.061921, 0.108981, 0.167906, 0.278005, 0.499826",\ + "0.284826, 0.295133, 0.348208, 0.498652, 0.801757",\ + "0.801745, 0.802917, 0.835582, 0.941648, 1.155343"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[0]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "tl_o[65]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000590, 0.001754, 0.015524, 0.044859"); + index_3 ( "0.000991, 0.073990, 0.161246, 0.321501, 0.642011"); + values ( "0.091649, 0.250131, 0.402296, 0.649078, 1.128418",\ + "0.104662, 0.273549, 0.438178, 0.701696, 1.211503",\ + "0.129595, 0.307072, 0.486657, 0.770890, 1.318582",\ + "0.419859, 0.596841, 0.797852, 1.150232, 1.846445",\ + "1.036012, 1.213814, 1.416984, 1.786820, 2.524206",\ + "0.179141, 0.337450, 0.489577, 0.736383, 1.215771",\ + "0.192154, 0.360868, 0.525459, 0.789001, 1.298857",\ + "0.217087, 0.394391, 0.573938, 0.858195, 1.405936",\ + "0.507351, 0.684160, 0.885133, 1.237537, 1.933798",\ + "1.123504, 1.301133, 1.504265, 1.874125, 2.611559",\ + "0.259715, 0.417789, 0.569604, 0.816412, 1.295803",\ + "0.272795, 0.441207, 0.605486, 0.869029, 1.378888",\ + "0.297783, 0.474730, 0.653965, 0.938223, 1.485967",\ + "0.588044, 0.764499, 0.965159, 1.317566, 2.013830",\ + "1.204202, 1.381472, 1.584292, 1.954154, 2.691591",\ + "0.316944, 0.475532, 0.627237, 0.873742, 1.352620",\ + "0.330166, 0.498989, 0.663147, 0.926397, 1.435779",\ + "0.355271, 0.532545, 0.711661, 0.995637, 1.542949",\ + "0.645525, 0.822313, 1.022907, 1.375159, 2.071169",\ + "1.261694, 1.439288, 1.642045, 2.011797, 2.749029",\ + "0.615137, 0.780253, 0.930886, 1.176831, 1.654602",\ + "0.629566, 0.803991, 0.966800, 1.229517, 1.737849",\ + "0.655668, 0.837777, 1.015319, 1.298796, 1.845130",\ + "0.945865, 1.127532, 1.326573, 1.678471, 2.373782",\ + "1.562129, 1.744529, 1.945711, 2.315152, 3.051762"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000590, 0.001754, 0.015524, 0.044859"); + index_3 ( "0.000991, 0.073990, 0.161246, 0.321501, 0.642011"); + values ( "0.022568, 0.058250, 0.097501, 0.158155, 0.273924",\ + "0.045222, 0.077904, 0.123497, 0.193808, 0.327390",\ + "0.090348, 0.107489, 0.163971, 0.245678, 0.396404",\ + "0.621445, 0.621445, 0.621445, 0.691541, 0.864683",\ + "1.751287, 1.751287, 1.752785, 1.770247, 1.811996",\ + "0.022568, 0.058250, 0.097501, 0.158155, 0.273924",\ + "0.045222, 0.077904, 0.123497, 0.193808, 0.327390",\ + "0.090348, 0.107489, 0.163971, 0.245678, 0.396404",\ + "0.621445, 0.621445, 0.621445, 0.691541, 0.864683",\ + "1.751287, 1.751287, 1.752785, 1.770247, 1.811996",\ + "0.022795, 0.058250, 0.097501, 0.158155, 0.273924",\ + "0.045430, 0.077904, 0.123497, 0.193808, 0.327390",\ + "0.090457, 0.107489, 0.163971, 0.245678, 0.396404",\ + "0.621445, 0.621445, 0.621445, 0.691541, 0.864683",\ + "1.751287, 1.751287, 1.752785, 1.770247, 1.811996",\ + "0.023283, 0.058385, 0.097589, 0.158295, 0.274203",\ + "0.045877, 0.078027, 0.123601, 0.193969, 0.327712",\ + "0.090692, 0.107553, 0.164104, 0.245861, 0.396767",\ + "0.621445, 0.621445, 0.621445, 0.691750, 0.865100",\ + "1.751287, 1.751287, 1.752788, 1.770297, 1.812096",\ + "0.027423, 0.059345, 0.097603, 0.158415, 0.274540",\ + "0.049669, 0.078907, 0.123617, 0.194107, 0.328101",\ + "0.092680, 0.108015, 0.164124, 0.246016, 0.397205",\ + "0.621445, 0.621445, 0.621445, 0.691929, 0.865604",\ + "1.751287, 1.751287, 1.752789, 1.770340, 1.812218"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000590, 0.001754, 0.015524, 0.044859"); + index_3 ( "0.000991, 0.073990, 0.161246, 0.321501, 0.642011"); + values ( "0.062799, 0.282922, 0.497986, 0.866154, 1.602100",\ + "0.068878, 0.306290, 0.537336, 0.930038, 1.714836",\ + "0.080236, 0.335964, 0.585498, 1.006969, 1.849055",\ + "0.212818, 0.496736, 0.807979, 1.341514, 2.406755",\ + "0.493894, 0.777156, 1.106499, 1.705590, 2.901373",\ + "0.150236, 0.370257, 0.585236, 0.952870, 1.688034",\ + "0.156640, 0.393680, 0.624665, 1.016754, 1.800770",\ + "0.168330, 0.423416, 0.672918, 1.093685, 1.934989",\ + "0.301173, 0.584370, 0.895755, 1.428230, 2.492689",\ + "0.582238, 0.864786, 1.194485, 1.792306, 2.987307",\ + "0.236126, 0.458767, 0.673196, 1.040499, 1.774989",\ + "0.243411, 0.482319, 0.712626, 1.104385, 1.887725",\ + "0.255996, 0.512204, 0.760881, 1.181320, 2.021944",\ + "0.389544, 0.673587, 0.983724, 1.515878, 2.579644",\ + "0.670583, 0.953997, 1.282458, 1.879963, 3.074262",\ + "0.296431, 0.523718, 0.737319, 1.104467, 1.838498",\ + "0.304497, 0.547459, 0.776753, 1.168383, 1.951234",\ + "0.317876, 0.577559, 0.825013, 1.245352, 2.085453",\ + "0.452050, 0.739568, 1.047875, 1.580045, 2.643153",\ + "0.733066, 1.019967, 1.346619, 1.944209, 3.137771",\ + "0.611833, 0.880022, 1.088168, 1.453430, 2.183954",\ + "0.624839, 0.905962, 1.127852, 1.517465, 2.296690",\ + "0.643244, 0.938579, 1.176404, 1.594573, 2.430909",\ + "0.781372, 1.107880, 1.400406, 1.929807, 2.988609",\ + "1.062240, 1.388161, 1.699817, 2.294288, 3.483227"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000590, 0.001754, 0.015524, 0.044859"); + index_3 ( "0.000991, 0.073990, 0.161246, 0.321501, 0.642011"); + values ( "0.011131, 0.063936, 0.115966, 0.201201, 0.370930",\ + "0.020777, 0.078242, 0.137616, 0.234279, 0.426765",\ + "0.041132, 0.097162, 0.164744, 0.275022, 0.494619",\ + "0.282873, 0.290343, 0.344847, 0.495374, 0.795117",\ + "0.794988, 0.797692, 0.832143, 0.938552, 1.150445",\ + "0.012121, 0.064104, 0.116237, 0.201201, 0.370930",\ + "0.021825, 0.078435, 0.137924, 0.234279, 0.426765",\ + "0.042062, 0.097382, 0.165095, 0.275022, 0.494619",\ + "0.282873, 0.290415, 0.345327, 0.495374, 0.795117",\ + "0.794988, 0.797718, 0.832482, 0.938552, 1.150445",\ + "0.014795, 0.064505, 0.116242, 0.201211, 0.370930",\ + "0.024656, 0.078894, 0.137930, 0.234291, 0.426765",\ + "0.044575, 0.097903, 0.165102, 0.275036, 0.494619",\ + "0.282873, 0.290585, 0.345336, 0.495392, 0.795117",\ + "0.794988, 0.797779, 0.832488, 0.938565, 1.150445",\ + "0.017168, 0.065086, 0.116256, 0.201314, 0.370930",\ + "0.027169, 0.079562, 0.137945, 0.234407, 0.426765",\ + "0.046806, 0.098662, 0.165119, 0.275169, 0.494619",\ + "0.282873, 0.290832, 0.345360, 0.495573, 0.795117",\ + "0.794988, 0.797869, 0.832505, 0.938693, 1.150445",\ + "0.032175, 0.071874, 0.117123, 0.201725, 0.370930",\ + "0.043057, 0.087350, 0.138929, 0.234874, 0.426765",\ + "0.060912, 0.107509, 0.166242, 0.275701, 0.494619",\ + "0.282873, 0.293712, 0.346892, 0.496300, 0.795117",\ + "0.794988, 0.798911, 0.833588, 0.939207, 1.150445"); + } + + } /* end of arc clk_ast_tlul_i_tl_o[0]_redg_min*/ + +} /* end of pin tl_o[0] */ +} /* end of bus tl_o */ + +pin("ast_init_done_o") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000556 ; + + /* Other user defined attributes. */ + original_pin : ast_init_done_o; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000556, 0.073554, 0.160919, 0.321283, 0.642011"); + values ( "0.043384, 0.198284, 0.374379, 0.697867, 1.344843",\ + "0.129257, 0.285459, 0.461486, 0.784583, 1.430777",\ + "0.210733, 0.373589, 0.549444, 0.872207, 1.517732",\ + "0.267175, 0.437989, 0.613561, 0.936121, 1.581241",\ + "0.558327, 0.787842, 0.963956, 1.284870, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000556, 0.073554, 0.160919, 0.321283, 0.642011"); + values ( "0.018706, 0.294221, 0.628837, 1.246746, 2.482563",\ + "0.023795, 0.295177, 0.630806, 1.246746, 2.482563",\ + "0.037168, 0.297482, 0.630842, 1.246746, 2.482563",\ + "0.048861, 0.300835, 0.630939, 1.246746, 2.482563",\ + "0.122687, 0.339900, 0.637218, 1.249328, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000556, 0.073554, 0.160919, 0.321283, 0.642011"); + values ( "0.063197, 0.171101, 0.283015, 0.487593, 0.896749",\ + "0.150760, 0.258420, 0.370296, 0.574898, 0.984103",\ + "0.230918, 0.338761, 0.450323, 0.654927, 1.064134",\ + "0.287331, 0.396309, 0.507868, 0.712173, 1.120782",\ + "0.578538, 0.699638, 0.811505, 1.015189, 1.422559"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000556, 0.073554, 0.160919, 0.321283, 0.642011"); + values ( "0.020743, 0.184138, 0.385305, 0.758342, 1.504417",\ + "0.020743, 0.184274, 0.385812, 0.758342, 1.504417",\ + "0.021682, 0.184274, 0.385812, 0.758342, 1.504417",\ + "0.023987, 0.184274, 0.385812, 0.758342, 1.504417",\ + "0.042807, 0.188367, 0.385812, 0.758342, 1.504697"); + } + + } /* end of arc clk_ast_tlul_i_ast_init_done_o_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000556, 0.073554, 0.160919, 0.321283, 0.642011"); + values ( "0.043384, 0.198284, 0.374379, 0.697867, 1.344843",\ + "0.129257, 0.285459, 0.461486, 0.784583, 1.430777",\ + "0.210733, 0.373589, 0.549444, 0.872207, 1.517732",\ + "0.267175, 0.437989, 0.613561, 0.936121, 1.581241",\ + "0.558327, 0.787842, 0.963956, 1.284870, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000556, 0.073554, 0.160919, 0.321283, 0.642011"); + values ( "0.018706, 0.294221, 0.628837, 1.245531, 2.473548",\ + "0.023795, 0.295177, 0.630806, 1.245531, 2.473548",\ + "0.037168, 0.297482, 0.630842, 1.245606, 2.473548",\ + "0.048861, 0.300835, 0.630939, 1.246347, 2.473548",\ + "0.122687, 0.339900, 0.637218, 1.249328, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000556, 0.073554, 0.160919, 0.321283, 0.642011"); + values ( "0.063197, 0.171101, 0.283015, 0.487593, 0.896749",\ + "0.150760, 0.258420, 0.370296, 0.574898, 0.984103",\ + "0.230918, 0.338761, 0.450323, 0.654927, 1.064134",\ + "0.287331, 0.396309, 0.507868, 0.712173, 1.120782",\ + "0.578538, 0.699638, 0.811505, 1.015189, 1.422559"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000556, 0.073554, 0.160919, 0.321283, 0.642011"); + values ( "0.020743, 0.183352, 0.383802, 0.756115, 1.500740",\ + "0.020743, 0.183352, 0.383802, 0.756115, 1.500740",\ + "0.021682, 0.183352, 0.383802, 0.756115, 1.500740",\ + "0.023987, 0.183968, 0.384256, 0.757015, 1.502532",\ + "0.042807, 0.188367, 0.384324, 0.757782, 1.504697"); + } + + } /* end of arc clk_ast_tlul_i_ast_init_done_o_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018706, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.166278, 0.120559, 0.090376, 0.079044, 0.092801",\ + "0.171862, 0.126143, 0.095959, 0.084628, 0.098385",\ + "0.245234, 0.199449, 0.169261, 0.157926, 0.171660",\ + "0.322551, 0.276573, 0.246370, 0.235023, 0.248691",\ + "0.666536, 0.618843, 0.588507, 0.577057, 0.590140"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020743, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.195653, 0.120302, 0.052066, 0.028959, 0.090570",\ + "0.201000, 0.125650, 0.057413, 0.034307, 0.095918",\ + "0.271909, 0.196575, 0.128353, 0.105282, 0.167257",\ + "0.351861, 0.276541, 0.208391, 0.185439, 0.248491",\ + "0.700887, 0.625677, 0.558111, 0.536111, 0.607801"); + } + + } /* end of arc clk_ast_tlul_i_ast_init_done_o_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018706, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.098385, -0.055930, -0.021532, 0.019602, 0.346880",\ + "-0.103969, -0.061514, -0.027115, 0.014019, 0.341296",\ + "-0.177290, -0.134846, -0.100420, -0.059816, 0.260884",\ + "-0.254454, -0.212046, -0.177538, -0.138520, 0.162505",\ + "-0.597087, -0.554990, -0.519760, -0.494735, -0.367407"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020743, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.108800, -0.043157, 0.014117, 0.055975, 0.277251",\ + "-0.114148, -0.048505, 0.008770, 0.050627, 0.271903",\ + "-0.185082, -0.119364, -0.061987, -0.020103, 0.200995",\ + "-0.265110, -0.199164, -0.141461, -0.099488, 0.121043",\ + "-0.614747, -0.546974, -0.486651, -0.443970, -0.227977"); + } + + } /* end of arc clk_ast_tlul_i_ast_init_done_o_hldr*/ + +} /* end of pin ast_init_done_o */ + +pin("clk_ast_adc_i") { + direction : input ; + clock : true ; + max_transition : 2.480000 ; + capacitance : 0.009042 ; + + /* Other user defined attributes. */ + original_pin : clk_ast_adc_i; + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : min_pulse_width ; + fall_constraint( scalar ){ + values ( "0.151080"); + } + + } /* end of arc clk_ast_adc_i_clk_ast_adc_i_pwl*/ + + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : min_pulse_width ; + rise_constraint( scalar ){ + values ( "0.077628"); + } + + } /* end of arc clk_ast_adc_i_clk_ast_adc_i_pwh*/ + +} /* end of pin clk_ast_adc_i */ + +pin("rst_ast_adc_ni") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.009042 ; + + /* Other user defined attributes. */ + original_pin : rst_ast_adc_ni; + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : recovery_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.274432, 0.227738, 0.193623, 0.189926, 0.219386",\ + "0.355422, 0.308727, 0.274612, 0.270915, 0.300375",\ + "0.429898, 0.383203, 0.349088, 0.345391, 0.374851",\ + "0.553172, 0.506477, 0.472362, 0.468665, 0.498125",\ + "0.739732, 0.693038, 0.658922, 0.655226, 0.684685"); + } + + } /* end of arc clk_ast_adc_i_rst_ast_adc_ni_recrr*/ + + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : removal_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.027752, 0.053659, 0.141339, 0.280082, 0.570819",\ + "-0.108741, -0.027330, 0.060350, 0.199093, 0.489830",\ + "-0.183217, -0.101806, -0.014126, 0.124617, 0.415354",\ + "-0.306491, -0.225081, -0.137400, 0.001342, 0.292080",\ + "-0.493052, -0.411641, -0.323961, -0.185218, 0.105519"); + } + + } /* end of arc clk_ast_adc_i_rst_ast_adc_ni_remrr*/ + +} /* end of pin rst_ast_adc_ni */ + +pin("clk_ast_alert_i") { + direction : input ; + clock : true ; + max_transition : 2.480000 ; + capacitance : 0.111907 ; + + /* Other user defined attributes. */ + original_pin : clk_ast_alert_i; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : min_pulse_width ; + fall_constraint( scalar ){ + values ( "0.131491"); + } + + } /* end of arc clk_ast_alert_i_clk_ast_alert_i_pwl*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : min_pulse_width ; + rise_constraint( scalar ){ + values ( "0.073311"); + } + + } /* end of arc clk_ast_alert_i_clk_ast_alert_i_pwh*/ + +} /* end of pin clk_ast_alert_i */ + +pin("rst_ast_alert_ni") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.063611 ; + + /* Other user defined attributes. */ + original_pin : rst_ast_alert_ni; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : recovery_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.113563, 0.076989, 0.018933, 0.022110, 0.146261",\ + "0.193721, 0.155461, 0.100982, 0.103788, 0.220372",\ + "0.282614, 0.243810, 0.191411, 0.194005, 0.308054",\ + "0.566671, 0.464344, 0.331922, 0.334358, 0.433019",\ + "1.363218, 1.178999, 0.828491, 0.816184, 0.684690"); + } + + } /* end of arc clk_ast_alert_i_rst_ast_alert_ni_recrr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : recovery_rising ; + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.092068, 0.057718, -0.003401, -0.002983, 0.002097",\ + "0.189535, 0.154850, 0.093649, 0.094132, 0.100007",\ + "0.301664, 0.264351, 0.202415, 0.202944, 0.209366",\ + "0.503950, 0.455349, 0.390148, 0.390390, 0.393333",\ + "0.857313, 0.785929, 0.714140, 0.713804, 0.709723"); + } + + } /* end of arc clk_ast_alert_i_rst_ast_alert_ni_recfr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : removal_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.123357, 0.181341, 0.319709, 0.347503, 0.685278",\ + "0.102353, 0.159959, 0.295858, 0.323234, 0.655939",\ + "0.092806, 0.153066, 0.290747, 0.317698, 0.645224",\ + "0.064479, 0.123792, 0.266686, 0.294183, 0.628352",\ + "-0.004662, 0.048858, 0.204447, 0.233992, 0.593057"); + } + + } /* end of arc clk_ast_alert_i_rst_ast_alert_ni_remrr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : removal_rising ; + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.074257, 0.131115, 0.268439, 0.296209, 0.633696",\ + "-0.014192, 0.042690, 0.179264, 0.206921, 0.543039",\ + "-0.102387, -0.045223, 0.090380, 0.117827, 0.451393",\ + "-0.249899, -0.191425, -0.054943, -0.027706, 0.303305",\ + "-0.492713, -0.431597, -0.293340, -0.266527, 0.059328"); + } + + } /* end of arc clk_ast_alert_i_rst_ast_alert_ni_remfr*/ + +} /* end of pin rst_ast_alert_ni */ + +pin("clk_ast_es_i") { + direction : input ; + clock : true ; + max_transition : 2.480000 ; + capacitance : 0.142021 ; + + /* Other user defined attributes. */ + original_pin : clk_ast_es_i; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : min_pulse_width ; + fall_constraint( scalar ){ + values ( "0.131491"); + } + + } /* end of arc clk_ast_es_i_clk_ast_es_i_pwl*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : min_pulse_width ; + rise_constraint( scalar ){ + values ( "0.073311"); + } + + } /* end of arc clk_ast_es_i_clk_ast_es_i_pwh*/ + +} /* end of pin clk_ast_es_i */ + +pin("rst_ast_es_ni") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.184622 ; + + /* Other user defined attributes. */ + original_pin : rst_ast_es_ni; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : recovery_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.210479, 0.169372, 0.114546, 0.118621, 0.168150",\ + "0.293165, 0.250654, 0.192180, 0.195438, 0.235030",\ + "0.391384, 0.349291, 0.288209, 0.290833, 0.322724",\ + "0.566327, 0.524466, 0.460601, 0.462751, 0.488884",\ + "0.947368, 0.905673, 0.836972, 0.838520, 0.857344"); + } + + } /* end of arc clk_ast_es_i_rst_ast_es_ni_recrr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : removal_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.051490, -0.010118, 0.054432, 0.065559, 0.200781",\ + "-0.130202, -0.094826, -0.027856, -0.016996, 0.114987",\ + "-0.215839, -0.180431, -0.119977, -0.109196, 0.021823",\ + "-0.347231, -0.311623, -0.255002, -0.244742, -0.120048",\ + "-0.619519, -0.583379, -0.529999, -0.521121, -0.413232"); + } + + } /* end of arc clk_ast_es_i_rst_ast_es_ni_remrr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : recovery_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.330641, 0.279192, 0.245179, 0.243672, 0.279220",\ + "0.409639, 0.358190, 0.324177, 0.322670, 0.358218",\ + "0.487644, 0.436183, 0.402110, 0.400492, 0.435798",\ + "0.623048, 0.571541, 0.537264, 0.535269, 0.569741",\ + "0.842293, 0.790722, 0.756013, 0.753223, 0.785948"); + } + + } /* end of arc clk_ast_ext_i_rst_ast_es_ni_recrr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : removal_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.138360, -0.088735, -0.049180, 0.004893, 0.111904",\ + "-0.218903, -0.169277, -0.129723, -0.075649, 0.031362",\ + "-0.301318, -0.252007, -0.212321, -0.158231, -0.051325",\ + "-0.443423, -0.394857, -0.354861, -0.300729, -0.194073",\ + "-0.673239, -0.626523, -0.585755, -0.531523, -0.425485"); + } + + } /* end of arc clk_ast_ext_i_rst_ast_es_ni_remrr*/ + +} /* end of pin rst_ast_es_ni */ + +pin("clk_ast_rng_i") { + direction : input ; + clock : true ; + max_transition : 2.480000 ; + capacitance : 0.016298 ; + + /* Other user defined attributes. */ + original_pin : clk_ast_rng_i; + timing () { + related_pin : "clk_ast_rng_i" ; + timing_type : min_pulse_width ; + fall_constraint( scalar ){ + values ( "0.131491"); + } + + } /* end of arc clk_ast_rng_i_clk_ast_rng_i_pwl*/ + + timing () { + related_pin : "clk_ast_rng_i" ; + timing_type : min_pulse_width ; + rise_constraint( scalar ){ + values ( "0.073311"); + } + + } /* end of arc clk_ast_rng_i_clk_ast_rng_i_pwh*/ + +} /* end of pin clk_ast_rng_i */ + +pin("rst_ast_rng_ni") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.019282 ; + + /* Other user defined attributes. */ + original_pin : rst_ast_rng_ni; + timing () { + related_pin : "clk_ast_rng_i" ; + timing_type : recovery_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.397809, 0.355150, 0.299205, 0.303092, 0.350337",\ + "0.476858, 0.434199, 0.378254, 0.382142, 0.429386",\ + "0.555484, 0.512828, 0.456739, 0.460590, 0.507394",\ + "0.694132, 0.651484, 0.595040, 0.598802, 0.644521",\ + "0.924501, 0.881869, 0.824615, 0.828174, 0.871421"); + } + + } /* end of arc clk_ast_rng_i_rst_ast_rng_ni_recrr*/ + + timing () { + related_pin : "clk_ast_rng_i" ; + timing_type : removal_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.051490, -0.010118, 0.054432, 0.065559, 0.200781",\ + "-0.130202, -0.094826, -0.027856, -0.016996, 0.114987",\ + "-0.215839, -0.180431, -0.119977, -0.109196, 0.021823",\ + "-0.347231, -0.311623, -0.255002, -0.244742, -0.120048",\ + "-0.619519, -0.580113, -0.514458, -0.503429, -0.369398"); + } + + } /* end of arc clk_ast_rng_i_rst_ast_rng_ni_remrr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : recovery_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.210479, 0.160879, 0.128086, 0.118621, 0.168150",\ + "0.293165, 0.241596, 0.206622, 0.195438, 0.235030",\ + "0.391384, 0.339830, 0.303295, 0.290833, 0.322724",\ + "0.566327, 0.514573, 0.476374, 0.462751, 0.488884",\ + "0.947368, 0.895031, 0.853939, 0.838520, 0.857344"); + } + + } /* end of arc clk_ast_tlul_i_rst_ast_rng_ni_recrr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : removal_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.124168, -0.077180, -0.040446, -0.015137, 0.108101",\ + "-0.205037, -0.158304, -0.123014, -0.098281, 0.025219",\ + "-0.301967, -0.254997, -0.221149, -0.197116, -0.074898",\ + "-0.470369, -0.422280, -0.389838, -0.366778, -0.249319",\ + "-0.834370, -0.783388, -0.753247, -0.732123, -0.626660"); + } + + } /* end of arc clk_ast_tlul_i_rst_ast_rng_ni_remrr*/ + +} /* end of pin rst_ast_rng_ni */ + +pin("clk_ast_tlul_i") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.070969 ; + + /* Other user defined attributes. */ + original_pin : clk_ast_tlul_i; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : min_pulse_width ; + fall_constraint( scalar ){ + values ( "0.149001"); + } + + } /* end of arc clk_ast_tlul_i_clk_ast_tlul_i_pwl*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : min_pulse_width ; + rise_constraint( scalar ){ + values ( "0.073311"); + } + + } /* end of arc clk_ast_tlul_i_clk_ast_tlul_i_pwh*/ + +} /* end of pin clk_ast_tlul_i */ + +pin("rst_ast_tlul_ni") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 2.103311 ; + + /* Other user defined attributes. */ + original_pin : rst_ast_tlul_ni; + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : recovery_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.716936, 0.665384, 0.628579, 0.622004, 0.646451",\ + "0.794990, 0.743439, 0.706634, 0.700058, 0.724506",\ + "0.863378, 0.811826, 0.775021, 0.768446, 0.792893",\ + "0.983598, 0.932046, 0.895241, 0.888666, 0.913113",\ + "1.184568, 1.133018, 1.096165, 1.089503, 1.113762"); + } + + } /* end of arc clk_ast_ext_i_rst_ast_tlul_ni_recrr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : removal_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.208883, -0.162400, -0.121535, -0.067290, 0.038670",\ + "-0.289818, -0.243335, -0.202470, -0.148225, -0.042265",\ + "-0.371428, -0.325048, -0.284140, -0.229890, -0.123964",\ + "-0.514608, -0.468588, -0.427530, -0.373260, -0.267455",\ + "-0.754762, -0.708893, -0.668362, -0.614349, -0.508655"); + } + + } /* end of arc clk_ast_ext_i_rst_ast_tlul_ni_remrr*/ + + timing () { + related_pin : "clk_ast_rng_i" ; + timing_type : recovery_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.210479, 0.169372, 0.114546, 0.118621, 0.168150",\ + "0.293165, 0.250654, 0.192180, 0.195438, 0.235030",\ + "0.391384, 0.349291, 0.288209, 0.290833, 0.322724",\ + "0.566327, 0.524466, 0.460601, 0.462751, 0.488884",\ + "0.947368, 0.905673, 0.836972, 0.838520, 0.857344"); + } + + } /* end of arc clk_ast_rng_i_rst_ast_tlul_ni_recrr*/ + + timing () { + related_pin : "clk_ast_rng_i" ; + timing_type : removal_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.124168, -0.086693, -0.025277, -0.015137, 0.108101",\ + "-0.205037, -0.167443, -0.108443, -0.098281, 0.025219",\ + "-0.301967, -0.263763, -0.207172, -0.197116, -0.074898",\ + "-0.470369, -0.430682, -0.376443, -0.366778, -0.249319",\ + "-0.834370, -0.791194, -0.740802, -0.732123, -0.626660"); + } + + } /* end of arc clk_ast_rng_i_rst_ast_tlul_ni_remrr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : recovery_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "1.869923, 1.822277, 1.788958, 1.777550, 1.806108",\ + "1.951337, 1.903690, 1.870372, 1.858964, 1.887521",\ + "2.032032, 1.984385, 1.951067, 1.939659, 1.968216",\ + "2.170088, 2.122442, 2.089123, 2.077716, 2.106273",\ + "2.387489, 2.339843, 2.306524, 2.295116, 2.323674"); + } + + } /* end of arc clk_ast_tlul_i_rst_ast_tlul_ni_recrr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : removal_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.059314, 0.134642, 0.207217, 0.259023, 0.524416",\ + "-0.004435, 0.071727, 0.144173, 0.196109, 0.463735",\ + "-0.061661, 0.013696, 0.087717, 0.140099, 0.405234",\ + "-0.144853, -0.069971, 0.004287, 0.056772, 0.321975",\ + "-0.313738, -0.239256, -0.166173, -0.113918, 0.154394"); + } + + } /* end of arc clk_ast_tlul_i_rst_ast_tlul_ni_remrr*/ + +} /* end of pin rst_ast_tlul_ni */ + +pin("clk_ast_usb_i") { + direction : input ; + clock : true ; + max_transition : 2.480000 ; + capacitance : 0.008679 ; + + /* Other user defined attributes. */ + original_pin : clk_ast_usb_i; + timing () { + related_pin : "clk_ast_usb_i" ; + timing_type : min_pulse_width ; + fall_constraint( scalar ){ + values ( "0.131491"); + } + + } /* end of arc clk_ast_usb_i_clk_ast_usb_i_pwl*/ + + timing () { + related_pin : "clk_ast_usb_i" ; + timing_type : min_pulse_width ; + rise_constraint( scalar ){ + values ( "0.073311"); + } + + } /* end of arc clk_ast_usb_i_clk_ast_usb_i_pwh*/ + +} /* end of pin clk_ast_usb_i */ + +pin("rst_ast_usb_ni") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.013220 ; + + /* Other user defined attributes. */ + original_pin : rst_ast_usb_ni; + timing () { + related_pin : "clk_ast_usb_i" ; + timing_type : recovery_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.400327, 0.357670, 0.301625, 0.305488, 0.352426",\ + "0.476049, 0.433392, 0.377347, 0.381210, 0.428148",\ + "0.548090, 0.505436, 0.449256, 0.453084, 0.499610",\ + "0.675976, 0.633329, 0.576799, 0.580539, 0.625997",\ + "0.887381, 0.844752, 0.787402, 0.790936, 0.833890"); + } + + } /* end of arc clk_ast_usb_i_rst_ast_usb_ni_recrr*/ + + timing () { + related_pin : "clk_ast_usb_i" ; + timing_type : removal_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.128239, -0.088359, -0.022542, -0.011521, 0.122413",\ + "-0.208722, -0.168842, -0.103025, -0.092004, 0.041930",\ + "-0.287884, -0.248004, -0.182187, -0.171166, -0.037232",\ + "-0.421984, -0.382104, -0.316287, -0.305266, -0.171332",\ + "-0.631259, -0.591379, -0.525562, -0.514541, -0.380607"); + } + + } /* end of arc clk_ast_usb_i_rst_ast_usb_ni_remrr*/ + +} /* end of pin rst_ast_usb_ni */ + +pin("clk_ast_ext_i") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.005952 ; + + /* Other user defined attributes. */ + original_pin : clk_ast_ext_i; + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : min_pulse_width ; + fall_constraint( scalar ){ + values ( "0.300783"); + } + + } /* end of arc clk_ast_ext_i_clk_ast_ext_i_pwl*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : min_pulse_width ; + rise_constraint( scalar ){ + values ( "0.123380"); + } + + } /* end of arc clk_ast_ext_i_clk_ast_ext_i_pwh*/ + +} /* end of pin clk_ast_ext_i */ + +pin("por_ni") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000461 ; + + /* Other user defined attributes. */ + original_pin : por_ni; +} /* end of pin por_ni */ +bus ( sns_clks_i ) { + + bus_type : BUS27_type2 ; + direction : input ; + +pin("sns_clks_i[26]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_clks_i[26]; +} /* end of pin sns_clks_i[26] */ + +pin("sns_clks_i[25]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_clks_i[25]; +} /* end of pin sns_clks_i[25] */ + +pin("sns_clks_i[24]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_clks_i[24]; +} /* end of pin sns_clks_i[24] */ + +pin("sns_clks_i[23]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_clks_i[23]; +} /* end of pin sns_clks_i[23] */ + +pin("sns_clks_i[22]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_clks_i[22]; +} /* end of pin sns_clks_i[22] */ + +pin("sns_clks_i[21]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_clks_i[21]; +} /* end of pin sns_clks_i[21] */ + +pin("sns_clks_i[20]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_clks_i[20]; +} /* end of pin sns_clks_i[20] */ + +pin("sns_clks_i[19]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_clks_i[19]; +} /* end of pin sns_clks_i[19] */ + +pin("sns_clks_i[18]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_clks_i[18]; +} /* end of pin sns_clks_i[18] */ + +pin("sns_clks_i[17]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_clks_i[17]; +} /* end of pin sns_clks_i[17] */ + +pin("sns_clks_i[16]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_clks_i[16]; +} /* end of pin sns_clks_i[16] */ + +pin("sns_clks_i[15]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_clks_i[15]; +} /* end of pin sns_clks_i[15] */ + +pin("sns_clks_i[14]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_clks_i[14]; +} /* end of pin sns_clks_i[14] */ + +pin("sns_clks_i[13]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_clks_i[13]; +} /* end of pin sns_clks_i[13] */ + +pin("sns_clks_i[12]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_clks_i[12]; +} /* end of pin sns_clks_i[12] */ + +pin("sns_clks_i[11]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_clks_i[11]; +} /* end of pin sns_clks_i[11] */ + +pin("sns_clks_i[10]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_clks_i[10]; +} /* end of pin sns_clks_i[10] */ + +pin("sns_clks_i[9]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_clks_i[9]; +} /* end of pin sns_clks_i[9] */ + +pin("sns_clks_i[8]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_clks_i[8]; +} /* end of pin sns_clks_i[8] */ + +pin("sns_clks_i[7]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_clks_i[7]; +} /* end of pin sns_clks_i[7] */ + +pin("sns_clks_i[6]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_clks_i[6]; +} /* end of pin sns_clks_i[6] */ + +pin("sns_clks_i[5]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_clks_i[5]; +} /* end of pin sns_clks_i[5] */ + +pin("sns_clks_i[4]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_clks_i[4]; +} /* end of pin sns_clks_i[4] */ + +pin("sns_clks_i[3]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_clks_i[3]; +} /* end of pin sns_clks_i[3] */ + +pin("sns_clks_i[2]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_clks_i[2]; +} /* end of pin sns_clks_i[2] */ + +pin("sns_clks_i[1]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_clks_i[1]; +} /* end of pin sns_clks_i[1] */ + +pin("sns_clks_i[0]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_clks_i[0]; +} /* end of pin sns_clks_i[0] */ +} /* end of bus sns_clks_i */ +bus ( sns_rsts_i ) { + + bus_type : BUS56_type3 ; + direction : input ; + +pin("sns_rsts_i[55]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[55]; +} /* end of pin sns_rsts_i[55] */ + +pin("sns_rsts_i[54]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[54]; +} /* end of pin sns_rsts_i[54] */ + +pin("sns_rsts_i[53]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[53]; +} /* end of pin sns_rsts_i[53] */ + +pin("sns_rsts_i[52]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[52]; +} /* end of pin sns_rsts_i[52] */ + +pin("sns_rsts_i[51]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[51]; +} /* end of pin sns_rsts_i[51] */ + +pin("sns_rsts_i[50]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[50]; +} /* end of pin sns_rsts_i[50] */ + +pin("sns_rsts_i[49]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[49]; +} /* end of pin sns_rsts_i[49] */ + +pin("sns_rsts_i[48]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[48]; +} /* end of pin sns_rsts_i[48] */ + +pin("sns_rsts_i[47]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[47]; +} /* end of pin sns_rsts_i[47] */ + +pin("sns_rsts_i[46]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[46]; +} /* end of pin sns_rsts_i[46] */ + +pin("sns_rsts_i[45]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[45]; +} /* end of pin sns_rsts_i[45] */ + +pin("sns_rsts_i[44]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[44]; +} /* end of pin sns_rsts_i[44] */ + +pin("sns_rsts_i[43]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[43]; +} /* end of pin sns_rsts_i[43] */ + +pin("sns_rsts_i[42]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[42]; +} /* end of pin sns_rsts_i[42] */ + +pin("sns_rsts_i[41]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[41]; +} /* end of pin sns_rsts_i[41] */ + +pin("sns_rsts_i[40]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[40]; +} /* end of pin sns_rsts_i[40] */ + +pin("sns_rsts_i[39]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[39]; +} /* end of pin sns_rsts_i[39] */ + +pin("sns_rsts_i[38]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[38]; +} /* end of pin sns_rsts_i[38] */ + +pin("sns_rsts_i[37]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[37]; +} /* end of pin sns_rsts_i[37] */ + +pin("sns_rsts_i[36]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[36]; +} /* end of pin sns_rsts_i[36] */ + +pin("sns_rsts_i[35]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[35]; +} /* end of pin sns_rsts_i[35] */ + +pin("sns_rsts_i[34]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[34]; +} /* end of pin sns_rsts_i[34] */ + +pin("sns_rsts_i[33]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[33]; +} /* end of pin sns_rsts_i[33] */ + +pin("sns_rsts_i[32]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[32]; +} /* end of pin sns_rsts_i[32] */ + +pin("sns_rsts_i[31]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[31]; +} /* end of pin sns_rsts_i[31] */ + +pin("sns_rsts_i[30]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[30]; +} /* end of pin sns_rsts_i[30] */ + +pin("sns_rsts_i[29]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[29]; +} /* end of pin sns_rsts_i[29] */ + +pin("sns_rsts_i[28]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[28]; +} /* end of pin sns_rsts_i[28] */ + +pin("sns_rsts_i[27]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[27]; +} /* end of pin sns_rsts_i[27] */ + +pin("sns_rsts_i[26]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[26]; +} /* end of pin sns_rsts_i[26] */ + +pin("sns_rsts_i[25]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[25]; +} /* end of pin sns_rsts_i[25] */ + +pin("sns_rsts_i[24]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[24]; +} /* end of pin sns_rsts_i[24] */ + +pin("sns_rsts_i[23]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[23]; +} /* end of pin sns_rsts_i[23] */ + +pin("sns_rsts_i[22]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[22]; +} /* end of pin sns_rsts_i[22] */ + +pin("sns_rsts_i[21]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[21]; +} /* end of pin sns_rsts_i[21] */ + +pin("sns_rsts_i[20]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[20]; +} /* end of pin sns_rsts_i[20] */ + +pin("sns_rsts_i[19]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[19]; +} /* end of pin sns_rsts_i[19] */ + +pin("sns_rsts_i[18]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[18]; +} /* end of pin sns_rsts_i[18] */ + +pin("sns_rsts_i[17]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[17]; +} /* end of pin sns_rsts_i[17] */ + +pin("sns_rsts_i[16]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[16]; +} /* end of pin sns_rsts_i[16] */ + +pin("sns_rsts_i[15]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[15]; +} /* end of pin sns_rsts_i[15] */ + +pin("sns_rsts_i[14]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[14]; +} /* end of pin sns_rsts_i[14] */ + +pin("sns_rsts_i[13]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[13]; +} /* end of pin sns_rsts_i[13] */ + +pin("sns_rsts_i[12]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[12]; +} /* end of pin sns_rsts_i[12] */ + +pin("sns_rsts_i[11]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[11]; +} /* end of pin sns_rsts_i[11] */ + +pin("sns_rsts_i[10]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[10]; +} /* end of pin sns_rsts_i[10] */ + +pin("sns_rsts_i[9]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[9]; +} /* end of pin sns_rsts_i[9] */ + +pin("sns_rsts_i[8]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[8]; +} /* end of pin sns_rsts_i[8] */ + +pin("sns_rsts_i[7]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[7]; +} /* end of pin sns_rsts_i[7] */ + +pin("sns_rsts_i[6]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[6]; +} /* end of pin sns_rsts_i[6] */ + +pin("sns_rsts_i[5]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[5]; +} /* end of pin sns_rsts_i[5] */ + +pin("sns_rsts_i[4]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[4]; +} /* end of pin sns_rsts_i[4] */ + +pin("sns_rsts_i[3]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[3]; +} /* end of pin sns_rsts_i[3] */ + +pin("sns_rsts_i[2]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[2]; +} /* end of pin sns_rsts_i[2] */ + +pin("sns_rsts_i[1]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[1]; +} /* end of pin sns_rsts_i[1] */ + +pin("sns_rsts_i[0]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_rsts_i[0]; +} /* end of pin sns_rsts_i[0] */ +} /* end of bus sns_rsts_i */ + +pin("sns_spi_ext_clk_i") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : sns_spi_ext_clk_i; +} /* end of pin sns_spi_ext_clk_i */ + +pin("vcc_supp_i") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : vcc_supp_i; +} /* end of pin vcc_supp_i */ + +pin("vcaon_supp_i") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : vcaon_supp_i; +} /* end of pin vcaon_supp_i */ + +pin("vcmain_supp_i") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : vcmain_supp_i; +} /* end of pin vcmain_supp_i */ + +pin("vioa_supp_i") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : vioa_supp_i; +} /* end of pin vioa_supp_i */ + +pin("viob_supp_i") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : viob_supp_i; +} /* end of pin viob_supp_i */ +bus ( ast_pwst_o ) { + + bus_type : BUS5_type4 ; + direction : output ; + +pin("ast_pwst_o[4]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.652273 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000495 ; + + /* Other user defined attributes. */ + original_pin : ast_pwst_o[4]; +} /* end of pin ast_pwst_o[4] */ + +pin("ast_pwst_o[3]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.634048 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.007560 ; + + /* Other user defined attributes. */ + original_pin : ast_pwst_o[3]; +} /* end of pin ast_pwst_o[3] */ + +pin("ast_pwst_o[2]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.029213 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000584 ; + + /* Other user defined attributes. */ + original_pin : ast_pwst_o[2]; + timing () { + related_pin : "ast_pwst_o[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.018088, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.120368, 0.186170, 0.300859, 0.616258, 1.455810",\ + "0.125647, 0.191441, 0.306120, 0.621529, 1.461089",\ + "0.207819, 0.273839, 0.388973, 0.704719, 1.544218",\ + "0.296772, 0.362735, 0.477872, 0.794339, 1.635091",\ + "0.704776, 0.781389, 0.901027, 1.217412, 2.063059"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.018088, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.118650, 0.232640, 0.431328, 0.981607, 2.441227",\ + "0.118668, 0.232640, 0.431330, 0.981682, 2.441227",\ + "0.118668, 0.233537, 0.432463, 0.981682, 2.441227",\ + "0.120002, 0.233537, 0.433774, 0.981682, 2.441227",\ + "0.161250, 0.255527, 0.435044, 0.981682, 2.441227"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.021349, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.061996, 0.075776, 0.099734, 0.165532, 0.340715",\ + "0.068682, 0.082462, 0.106420, 0.172219, 0.347402",\ + "0.154377, 0.169144, 0.193145, 0.258865, 0.434247",\ + "0.245754, 0.264276, 0.291081, 0.357185, 0.532518",\ + "0.645975, 0.686648, 0.737659, 0.832084, 1.014107"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.021349, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.026953, 0.051423, 0.094862, 0.215093, 0.534102",\ + "0.026955, 0.051424, 0.094862, 0.215093, 0.534102",\ + "0.033450, 0.053875, 0.094993, 0.215093, 0.534241",\ + "0.046741, 0.065795, 0.101823, 0.215093, 0.534701",\ + "0.120319, 0.148529, 0.186126, 0.267902, 0.543427"); + } + + } /* end of arc ast_pwst_o[4]_ast_pwst_o[2]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "ast_pwst_o[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.017926, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.120368, 0.186170, 0.300859, 0.616258, 1.455810",\ + "0.125568, 0.191362, 0.306040, 0.621450, 1.461010",\ + "0.207819, 0.273839, 0.388973, 0.704719, 1.544218",\ + "0.296772, 0.362735, 0.477872, 0.794339, 1.635091",\ + "0.704776, 0.781389, 0.901027, 1.217412, 2.063059"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.017926, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.118650, 0.232611, 0.431328, 0.977612, 2.431972",\ + "0.118650, 0.232611, 0.431330, 0.977612, 2.431972",\ + "0.118650, 0.233259, 0.432463, 0.977612, 2.431972",\ + "0.120002, 0.233259, 0.433774, 0.977612, 2.431972",\ + "0.161250, 0.255527, 0.435044, 0.981481, 2.431972"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.020771, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.061996, 0.075776, 0.099734, 0.165532, 0.340715",\ + "0.068410, 0.082189, 0.106148, 0.171946, 0.347129",\ + "0.154377, 0.169144, 0.193145, 0.258865, 0.434247",\ + "0.245754, 0.264276, 0.291081, 0.357185, 0.532518",\ + "0.645975, 0.686648, 0.737659, 0.832084, 1.014107"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.020771, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.026953, 0.051423, 0.094862, 0.214557, 0.534102",\ + "0.026954, 0.051424, 0.094862, 0.214557, 0.534102",\ + "0.033450, 0.053875, 0.094993, 0.214557, 0.534241",\ + "0.046741, 0.065795, 0.101823, 0.215088, 0.534701",\ + "0.120319, 0.148529, 0.186126, 0.267902, 0.543427"); + } + + } /* end of arc ast_pwst_o[4]_ast_pwst_o[2]_una_min*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : recovery_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.120145, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.404676, 0.353105, 0.318351, 0.315478, 0.348023",\ + "0.454532, 0.402961, 0.368207, 0.365334, 0.397879",\ + "0.484555, 0.432984, 0.398230, 0.395357, 0.427902",\ + "0.566329, 0.514758, 0.480004, 0.477131, 0.509676",\ + "0.956464, 0.904894, 0.869963, 0.866772, 0.898621"); + } + + } /* end of arc clk_ast_ext_i_ast_pwst_o[2]_recrr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : removal_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.118140, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.316729, -0.270030, -0.234537, -0.184982, -0.086025",\ + "-0.365783, -0.319083, -0.283591, -0.234035, -0.135079",\ + "-0.396608, -0.349909, -0.314416, -0.264861, -0.165904",\ + "-0.478382, -0.431683, -0.396190, -0.346635, -0.247678",\ + "-0.868371, -0.821645, -0.786315, -0.736867, -0.638027"); + } + + } /* end of arc clk_ast_ext_i_ast_pwst_o[2]_remrr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "380000.531250, 380000.593750, 380000.718750, 380001.031250, 380001.875000",\ + "380000.625000, 380000.687500, 380000.812500, 380001.125000, 380001.968750",\ + "380000.687500, 380000.750000, 380000.875000, 380001.187500, 380002.031250",\ + "380000.750000, 380000.812500, 380000.937500, 380001.250000, 380002.093750",\ + "380001.062500, 380001.125000, 380001.250000, 380001.562500, 380002.406250"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.120145, 0.234100, 0.432069, 0.982878, 2.445448",\ + "0.120145, 0.234100, 0.432069, 0.982878, 2.445448",\ + "0.120145, 0.234100, 0.432069, 0.982878, 2.445448",\ + "0.120145, 0.234100, 0.432069, 0.982878, 2.445448",\ + "0.120145, 0.234100, 0.432069, 0.982878, 2.445448"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "380001.875000, 380001.875000, 380001.906250, 380001.968750, 380002.156250",\ + "380001.968750, 380001.968750, 380002.000000, 380002.062500, 380002.250000",\ + "380002.062500, 380002.062500, 380002.093750, 380002.156250, 380002.343750",\ + "380002.125000, 380002.125000, 380002.156250, 380002.218750, 380002.406250",\ + "380002.468750, 380002.468750, 380002.500000, 380002.562500, 380002.750000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.031251, 0.056161, 0.101276, 0.226771, 0.561875",\ + "0.031251, 0.056161, 0.101276, 0.226771, 0.561875",\ + "0.031251, 0.056161, 0.101276, 0.226771, 0.561875",\ + "0.031251, 0.056161, 0.101276, 0.226771, 0.561875",\ + "0.031251, 0.056161, 0.101276, 0.226771, 0.561875"); + } + + } /* end of arc clk_ast_tlul_i_ast_pwst_o[2]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.396377, 0.462195, 0.577090, 0.892530, 1.731965",\ + "0.483687, 0.549505, 0.664400, 0.979841, 1.819276",\ + "0.581466, 0.647284, 0.762179, 1.077619, 1.917054",\ + "0.654025, 0.719843, 0.834738, 1.150178, 1.989613",\ + "1.042482, 1.108301, 1.223195, 1.538636, 2.378071"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.118140, 0.231881, 0.431660, 0.979741, 2.437812",\ + "0.118140, 0.231881, 0.431660, 0.979741, 2.437812",\ + "0.118140, 0.231881, 0.431660, 0.979741, 2.437812",\ + "0.118140, 0.231881, 0.431660, 0.979741, 2.437812",\ + "0.118140, 0.231881, 0.431660, 0.979741, 2.437812"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.326727, 0.341464, 0.366815, 0.435950, 0.619738",\ + "0.414576, 0.429313, 0.454664, 0.523799, 0.707587",\ + "0.495656, 0.510394, 0.535744, 0.604879, 0.788667",\ + "0.553927, 0.568665, 0.594015, 0.663150, 0.846938",\ + "0.864022, 0.878760, 0.904110, 0.973245, 1.157033"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.026020, 0.051544, 0.096671, 0.220662, 0.551206",\ + "0.026020, 0.051544, 0.096671, 0.220662, 0.551206",\ + "0.026020, 0.051544, 0.096671, 0.220662, 0.551206",\ + "0.026020, 0.051544, 0.096671, 0.220662, 0.551206",\ + "0.026020, 0.051544, 0.096671, 0.220662, 0.551206"); + } + + } /* end of arc clk_ast_tlul_i_ast_pwst_o[2]_redg_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "380000.406250, 380000.468750, 380000.593750, 380000.906250, 380001.750000",\ + "380000.500000, 380000.562500, 380000.687500, 380001.000000, 380001.843750",\ + "380000.593750, 380000.656250, 380000.781250, 380001.093750, 380001.937500",\ + "380000.750000, 380000.812500, 380000.937500, 380001.250000, 380002.093750",\ + "380001.000000, 380001.062500, 380001.187500, 380001.500000, 380002.343750"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.120145, 0.234100, 0.432069, 0.982878, 2.445448",\ + "0.120145, 0.234100, 0.432069, 0.982878, 2.445448",\ + "0.120145, 0.234100, 0.432069, 0.982878, 2.445448",\ + "0.120145, 0.234100, 0.432069, 0.982878, 2.445448",\ + "0.120145, 0.234100, 0.432069, 0.982878, 2.445448"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "380001.781250, 380001.781250, 380001.812500, 380001.875000, 380002.062500",\ + "380001.875000, 380001.875000, 380001.906250, 380001.968750, 380002.156250",\ + "380002.000000, 380002.000000, 380002.031250, 380002.093750, 380002.281250",\ + "380002.187500, 380002.187500, 380002.218750, 380002.281250, 380002.468750",\ + "380002.500000, 380002.500000, 380002.531250, 380002.593750, 380002.781250"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.031236, 0.056156, 0.101275, 0.226769, 0.561877",\ + "0.031236, 0.056156, 0.101275, 0.226769, 0.561877",\ + "0.031236, 0.056156, 0.101275, 0.226769, 0.561877",\ + "0.031236, 0.056156, 0.101275, 0.226769, 0.561877",\ + "0.031236, 0.056156, 0.101275, 0.226769, 0.561877"); + } + + } /* end of arc padmux2ast_i[4]_ast_pwst_o[2]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "379999.937500, 380000.000000, 380000.093750, 380000.406250, 380001.250000",\ + "380000.031250, 380000.093750, 380000.187500, 380000.500000, 380001.343750",\ + "380000.093750, 380000.156250, 380000.250000, 380000.562500, 380001.406250",\ + "380000.250000, 380000.312500, 380000.406250, 380000.718750, 380001.562500",\ + "380000.468750, 380000.531250, 380000.625000, 380000.937500, 380001.781250"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.118145, 0.231881, 0.431660, 0.979741, 2.437852",\ + "0.118145, 0.231881, 0.431660, 0.979741, 2.437852",\ + "0.118145, 0.231881, 0.431660, 0.979741, 2.437852",\ + "0.118145, 0.231881, 0.431660, 0.979741, 2.437852",\ + "0.118145, 0.231881, 0.431660, 0.979741, 2.437852"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "380001.375000, 380001.406250, 380001.437500, 380001.500000, 380001.687500",\ + "380001.468750, 380001.500000, 380001.531250, 380001.593750, 380001.781250",\ + "380001.562500, 380001.593750, 380001.625000, 380001.687500, 380001.875000",\ + "380001.750000, 380001.781250, 380001.812500, 380001.875000, 380002.062500",\ + "380002.000000, 380002.031250, 380002.062500, 380002.125000, 380002.312500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.026020, 0.051544, 0.096671, 0.220662, 0.551206",\ + "0.026020, 0.051544, 0.096671, 0.220662, 0.551206",\ + "0.026020, 0.051544, 0.096671, 0.220662, 0.551206",\ + "0.026020, 0.051544, 0.096671, 0.220662, 0.551206",\ + "0.026020, 0.051544, 0.096671, 0.220662, 0.551206"); + } + + } /* end of arc padmux2ast_i[4]_ast_pwst_o[2]_una_min*/ + +} /* end of pin ast_pwst_o[2] */ + +pin("ast_pwst_o[1]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.101136 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : ast_pwst_o[1]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "970008.437500, 970008.625000, 970008.750000, 970009.000000, 970009.875000",\ + "970008.562500, 970008.750000, 970008.875000, 970009.125000, 970010.000000",\ + "970008.687500, 970008.875000, 970009.000000, 970009.250000, 970010.125000",\ + "970008.687500, 970008.875000, 970009.000000, 970009.250000, 970010.125000",\ + "970009.062500, 970009.250000, 970009.375000, 970009.625000, 970010.500000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "970005.937500, 970006.062500, 970006.187500, 970006.375000, 970007.000000",\ + "970006.062500, 970006.187500, 970006.312500, 970006.500000, 970007.125000",\ + "970006.062500, 970006.187500, 970006.312500, 970006.500000, 970007.125000",\ + "970006.187500, 970006.312500, 970006.437500, 970006.625000, 970007.250000",\ + "970006.437500, 970006.562500, 970006.687500, 970006.875000, 970007.500000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101"); + } + + } /* end of arc clk_ast_tlul_i_ast_pwst_o[1]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "7.046945, 7.238483, 7.357924, 7.616586, 8.489688",\ + "7.134256, 7.325794, 7.445234, 7.703897, 8.576999",\ + "7.232034, 7.423573, 7.543013, 7.801675, 8.674777",\ + "7.304593, 7.496131, 7.615571, 7.874234, 8.747335",\ + "7.693051, 7.884589, 8.004029, 8.262691, 9.135794"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "5.236063, 5.393305, 5.518865, 5.706539, 6.296398",\ + "5.323912, 5.481154, 5.606714, 5.794387, 6.384247",\ + "5.404993, 5.562235, 5.687795, 5.875468, 6.465328",\ + "5.463264, 5.620506, 5.746066, 5.933739, 6.523599",\ + "5.773359, 5.930601, 6.056160, 6.243834, 6.833694"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242588, 0.288084, 0.303651, 0.497673, 1.551133",\ + "0.242588, 0.288084, 0.303651, 0.497673, 1.551133",\ + "0.242588, 0.288084, 0.303651, 0.497673, 1.551133",\ + "0.242588, 0.288084, 0.303651, 0.497673, 1.551133",\ + "0.242588, 0.288084, 0.303651, 0.497673, 1.551133"); + } + + } /* end of arc clk_ast_tlul_i_ast_pwst_o[1]_redg_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "380006.593750, 380006.781250, 380006.906250, 380007.156250, 380008.031250",\ + "380006.687500, 380006.875000, 380007.000000, 380007.250000, 380008.125000",\ + "380006.781250, 380006.968750, 380007.093750, 380007.343750, 380008.218750",\ + "380006.937500, 380007.125000, 380007.250000, 380007.500000, 380008.375000",\ + "380007.187500, 380007.375000, 380007.500000, 380007.750000, 380008.625000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "380006.281250, 380006.437500, 380006.562500, 380006.750000, 380007.343750",\ + "380006.375000, 380006.531250, 380006.656250, 380006.843750, 380007.437500",\ + "380006.500000, 380006.656250, 380006.781250, 380006.968750, 380007.562500",\ + "380006.687500, 380006.843750, 380006.968750, 380007.156250, 380007.750000",\ + "380007.000000, 380007.156250, 380007.281250, 380007.468750, 380008.062500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101"); + } + + } /* end of arc padmux2ast_i[4]_ast_pwst_o[1]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "380006.593750, 380006.781250, 380006.906250, 380007.156250, 380008.031250",\ + "380006.687500, 380006.875000, 380007.000000, 380007.250000, 380008.125000",\ + "380006.750000, 380006.937500, 380007.062500, 380007.312500, 380008.187500",\ + "380006.906250, 380007.093750, 380007.218750, 380007.468750, 380008.343750",\ + "380007.125000, 380007.312500, 380007.437500, 380007.687500, 380008.562500"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "380006.281250, 380006.437500, 380006.562500, 380006.750000, 380007.343750",\ + "380006.375000, 380006.531250, 380006.656250, 380006.843750, 380007.437500",\ + "380006.468750, 380006.625000, 380006.750000, 380006.937500, 380007.531250",\ + "380006.656250, 380006.812500, 380006.937500, 380007.125000, 380007.718750",\ + "380006.906250, 380007.062500, 380007.187500, 380007.375000, 380007.968750"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132"); + } + + } /* end of arc padmux2ast_i[4]_ast_pwst_o[1]_una_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "970005.812500, 970005.937500, 970006.062500, 970006.250000, 970006.875000",\ + "970005.937500, 970006.062500, 970006.187500, 970006.375000, 970007.000000",\ + "970005.937500, 970006.062500, 970006.187500, 970006.375000, 970007.000000",\ + "970006.187500, 970006.312500, 970006.437500, 970006.625000, 970007.250000",\ + "970006.437500, 970006.562500, 970006.687500, 970006.875000, 970007.500000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "970008.312500, 970008.500000, 970008.625000, 970008.875000, 970009.750000",\ + "970008.437500, 970008.625000, 970008.750000, 970009.000000, 970009.875000",\ + "970008.562500, 970008.750000, 970008.875000, 970009.125000, 970010.000000",\ + "970008.812500, 970009.000000, 970009.125000, 970009.375000, 970010.250000",\ + "970009.062500, 970009.250000, 970009.375000, 970009.625000, 970010.500000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832"); + } + + } /* end of arc padmux2ast_i[4]_ast_pwst_o[1]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "970005.812500, 970005.937500, 970006.062500, 970006.250000, 970006.875000",\ + "970005.937500, 970006.062500, 970006.187500, 970006.375000, 970007.000000",\ + "970005.937500, 970006.062500, 970006.187500, 970006.375000, 970007.000000",\ + "970006.062500, 970006.187500, 970006.312500, 970006.500000, 970007.125000",\ + "970006.312500, 970006.437500, 970006.562500, 970006.750000, 970007.375000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "970008.312500, 970008.500000, 970008.625000, 970008.875000, 970009.750000",\ + "970008.437500, 970008.625000, 970008.750000, 970009.000000, 970009.875000",\ + "970008.562500, 970008.750000, 970008.875000, 970009.125000, 970010.000000",\ + "970008.687500, 970008.875000, 970009.000000, 970009.250000, 970010.125000",\ + "970008.937500, 970009.125000, 970009.250000, 970009.500000, 970010.375000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127"); + } + + } /* end of arc padmux2ast_i[4]_ast_pwst_o[1]_inv_min*/ + + timing () { + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "590006.687500, 590006.875000, 590007.000000, 590007.250000, 590008.125000",\ + "590006.812500, 590007.000000, 590007.125000, 590007.375000, 590008.250000",\ + "590006.812500, 590007.000000, 590007.125000, 590007.375000, 590008.250000",\ + "590006.937500, 590007.125000, 590007.250000, 590007.500000, 590008.375000",\ + "590007.187500, 590007.375000, 590007.500000, 590007.750000, 590008.625000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256090, 0.317188, 0.317188, 0.797460, 2.395127",\ + "0.256090, 0.317188, 0.317188, 0.797460, 2.395127",\ + "0.256090, 0.317188, 0.317188, 0.797460, 2.395127",\ + "0.256090, 0.317188, 0.317188, 0.797460, 2.395127",\ + "0.256090, 0.317188, 0.317188, 0.797460, 2.395127"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "590005.562500, 590005.687500, 590005.812500, 590006.000000, 590006.625000",\ + "590005.687500, 590005.812500, 590005.937500, 590006.125000, 590006.750000",\ + "590005.812500, 590005.937500, 590006.062500, 590006.250000, 590006.875000",\ + "590005.937500, 590006.062500, 590006.187500, 590006.375000, 590007.000000",\ + "590006.312500, 590006.437500, 590006.562500, 590006.750000, 590007.375000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101"); + } + + } /* end of arc padmux2ast_i[5]_ast_pwst_o[1]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "590006.687500, 590006.875000, 590007.000000, 590007.250000, 590008.125000",\ + "590006.687500, 590006.875000, 590007.000000, 590007.250000, 590008.125000",\ + "590006.812500, 590007.000000, 590007.125000, 590007.375000, 590008.250000",\ + "590006.937500, 590007.125000, 590007.250000, 590007.500000, 590008.375000",\ + "590007.187500, 590007.375000, 590007.500000, 590007.750000, 590008.625000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "590005.562500, 590005.687500, 590005.812500, 590006.000000, 590006.625000",\ + "590005.687500, 590005.812500, 590005.937500, 590006.125000, 590006.750000",\ + "590005.812500, 590005.937500, 590006.062500, 590006.250000, 590006.875000",\ + "590005.937500, 590006.062500, 590006.187500, 590006.375000, 590007.000000",\ + "590006.187500, 590006.312500, 590006.437500, 590006.625000, 590007.250000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101"); + } + + } /* end of arc padmux2ast_i[5]_ast_pwst_o[1]_una_min*/ + +} /* end of pin ast_pwst_o[1] */ + +pin("ast_pwst_o[0]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.101136 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : ast_pwst_o[0]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "970008.437500, 970008.625000, 970008.750000, 970009.000000, 970009.875000",\ + "970008.562500, 970008.750000, 970008.875000, 970009.125000, 970010.000000",\ + "970008.687500, 970008.875000, 970009.000000, 970009.250000, 970010.125000",\ + "970008.687500, 970008.875000, 970009.000000, 970009.250000, 970010.125000",\ + "970009.062500, 970009.250000, 970009.375000, 970009.625000, 970010.500000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "970005.937500, 970006.062500, 970006.187500, 970006.375000, 970007.000000",\ + "970006.062500, 970006.187500, 970006.312500, 970006.500000, 970007.125000",\ + "970006.062500, 970006.187500, 970006.312500, 970006.500000, 970007.125000",\ + "970006.187500, 970006.312500, 970006.437500, 970006.625000, 970007.250000",\ + "970006.437500, 970006.562500, 970006.687500, 970006.875000, 970007.500000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101"); + } + + } /* end of arc clk_ast_tlul_i_ast_pwst_o[0]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "7.046945, 7.238483, 7.357924, 7.616586, 8.489688",\ + "7.134256, 7.325794, 7.445234, 7.703897, 8.576999",\ + "7.232034, 7.423573, 7.543013, 7.801675, 8.674777",\ + "7.304593, 7.496131, 7.615571, 7.874234, 8.747335",\ + "7.693051, 7.884589, 8.004029, 8.262691, 9.135794"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "5.236063, 5.393305, 5.518865, 5.706539, 6.296398",\ + "5.323912, 5.481154, 5.606714, 5.794387, 6.384247",\ + "5.404993, 5.562235, 5.687795, 5.875468, 6.465328",\ + "5.463264, 5.620506, 5.746066, 5.933739, 6.523599",\ + "5.773359, 5.930601, 6.056160, 6.243834, 6.833694"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242588, 0.288084, 0.303651, 0.497673, 1.551133",\ + "0.242588, 0.288084, 0.303651, 0.497673, 1.551133",\ + "0.242588, 0.288084, 0.303651, 0.497673, 1.551133",\ + "0.242588, 0.288084, 0.303651, 0.497673, 1.551133",\ + "0.242588, 0.288084, 0.303651, 0.497673, 1.551133"); + } + + } /* end of arc clk_ast_tlul_i_ast_pwst_o[0]_redg_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "380006.593750, 380006.781250, 380006.906250, 380007.156250, 380008.031250",\ + "380006.687500, 380006.875000, 380007.000000, 380007.250000, 380008.125000",\ + "380006.781250, 380006.968750, 380007.093750, 380007.343750, 380008.218750",\ + "380006.937500, 380007.125000, 380007.250000, 380007.500000, 380008.375000",\ + "380007.187500, 380007.375000, 380007.500000, 380007.750000, 380008.625000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "380006.281250, 380006.437500, 380006.562500, 380006.750000, 380007.343750",\ + "380006.375000, 380006.531250, 380006.656250, 380006.843750, 380007.437500",\ + "380006.500000, 380006.656250, 380006.781250, 380006.968750, 380007.562500",\ + "380006.687500, 380006.843750, 380006.968750, 380007.156250, 380007.750000",\ + "380007.000000, 380007.156250, 380007.281250, 380007.468750, 380008.062500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101"); + } + + } /* end of arc padmux2ast_i[4]_ast_pwst_o[0]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "380006.593750, 380006.781250, 380006.906250, 380007.156250, 380008.031250",\ + "380006.687500, 380006.875000, 380007.000000, 380007.250000, 380008.125000",\ + "380006.750000, 380006.937500, 380007.062500, 380007.312500, 380008.187500",\ + "380006.906250, 380007.093750, 380007.218750, 380007.468750, 380008.343750",\ + "380007.125000, 380007.312500, 380007.437500, 380007.687500, 380008.562500"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "380006.281250, 380006.437500, 380006.562500, 380006.750000, 380007.343750",\ + "380006.375000, 380006.531250, 380006.656250, 380006.843750, 380007.437500",\ + "380006.468750, 380006.625000, 380006.750000, 380006.937500, 380007.531250",\ + "380006.656250, 380006.812500, 380006.937500, 380007.125000, 380007.718750",\ + "380006.906250, 380007.062500, 380007.187500, 380007.375000, 380007.968750"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132"); + } + + } /* end of arc padmux2ast_i[4]_ast_pwst_o[0]_una_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "970005.812500, 970005.937500, 970006.062500, 970006.250000, 970006.875000",\ + "970005.937500, 970006.062500, 970006.187500, 970006.375000, 970007.000000",\ + "970005.937500, 970006.062500, 970006.187500, 970006.375000, 970007.000000",\ + "970006.187500, 970006.312500, 970006.437500, 970006.625000, 970007.250000",\ + "970006.437500, 970006.562500, 970006.687500, 970006.875000, 970007.500000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "970008.312500, 970008.500000, 970008.625000, 970008.875000, 970009.750000",\ + "970008.437500, 970008.625000, 970008.750000, 970009.000000, 970009.875000",\ + "970008.562500, 970008.750000, 970008.875000, 970009.125000, 970010.000000",\ + "970008.812500, 970009.000000, 970009.125000, 970009.375000, 970010.250000",\ + "970009.062500, 970009.250000, 970009.375000, 970009.625000, 970010.500000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832"); + } + + } /* end of arc padmux2ast_i[4]_ast_pwst_o[0]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "970005.812500, 970005.937500, 970006.062500, 970006.250000, 970006.875000",\ + "970005.937500, 970006.062500, 970006.187500, 970006.375000, 970007.000000",\ + "970005.937500, 970006.062500, 970006.187500, 970006.375000, 970007.000000",\ + "970006.062500, 970006.187500, 970006.312500, 970006.500000, 970007.125000",\ + "970006.312500, 970006.437500, 970006.562500, 970006.750000, 970007.375000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "970008.312500, 970008.500000, 970008.625000, 970008.875000, 970009.750000",\ + "970008.437500, 970008.625000, 970008.750000, 970009.000000, 970009.875000",\ + "970008.562500, 970008.750000, 970008.875000, 970009.125000, 970010.000000",\ + "970008.687500, 970008.875000, 970009.000000, 970009.250000, 970010.125000",\ + "970008.937500, 970009.125000, 970009.250000, 970009.500000, 970010.375000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127"); + } + + } /* end of arc padmux2ast_i[4]_ast_pwst_o[0]_inv_min*/ + + timing () { + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "590006.687500, 590006.875000, 590007.000000, 590007.250000, 590008.125000",\ + "590006.812500, 590007.000000, 590007.125000, 590007.375000, 590008.250000",\ + "590006.812500, 590007.000000, 590007.125000, 590007.375000, 590008.250000",\ + "590006.937500, 590007.125000, 590007.250000, 590007.500000, 590008.375000",\ + "590007.187500, 590007.375000, 590007.500000, 590007.750000, 590008.625000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256090, 0.317188, 0.317188, 0.797460, 2.395127",\ + "0.256090, 0.317188, 0.317188, 0.797460, 2.395127",\ + "0.256090, 0.317188, 0.317188, 0.797460, 2.395127",\ + "0.256090, 0.317188, 0.317188, 0.797460, 2.395127",\ + "0.256090, 0.317188, 0.317188, 0.797460, 2.395127"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "590005.562500, 590005.687500, 590005.812500, 590006.000000, 590006.625000",\ + "590005.687500, 590005.812500, 590005.937500, 590006.125000, 590006.750000",\ + "590005.812500, 590005.937500, 590006.062500, 590006.250000, 590006.875000",\ + "590005.937500, 590006.062500, 590006.187500, 590006.375000, 590007.000000",\ + "590006.312500, 590006.437500, 590006.562500, 590006.750000, 590007.375000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101"); + } + + } /* end of arc padmux2ast_i[5]_ast_pwst_o[0]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "590006.687500, 590006.875000, 590007.000000, 590007.250000, 590008.125000",\ + "590006.687500, 590006.875000, 590007.000000, 590007.250000, 590008.125000",\ + "590006.812500, 590007.000000, 590007.125000, 590007.375000, 590008.250000",\ + "590006.937500, 590007.125000, 590007.250000, 590007.500000, 590008.375000",\ + "590007.187500, 590007.375000, 590007.500000, 590007.750000, 590008.625000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "590005.562500, 590005.687500, 590005.812500, 590006.000000, 590006.625000",\ + "590005.687500, 590005.812500, 590005.937500, 590006.125000, 590006.750000",\ + "590005.812500, 590005.937500, 590006.062500, 590006.250000, 590006.875000",\ + "590005.937500, 590006.062500, 590006.187500, 590006.375000, 590007.000000",\ + "590006.187500, 590006.312500, 590006.437500, 590006.625000, 590007.250000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101"); + } + + } /* end of arc padmux2ast_i[5]_ast_pwst_o[0]_una_min*/ + +} /* end of pin ast_pwst_o[0] */ +} /* end of bus ast_pwst_o */ +bus ( ast_pwst_h_o ) { + + bus_type : BUS5_type4 ; + direction : output ; + +pin("ast_pwst_h_o[4]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.158177 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.003358 ; + + /* Other user defined attributes. */ + original_pin : ast_pwst_h_o[4]; +} /* end of pin ast_pwst_h_o[4] */ + +pin("ast_pwst_h_o[3]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.634048 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.007560 ; + + /* Other user defined attributes. */ + original_pin : ast_pwst_h_o[3]; +} /* end of pin ast_pwst_h_o[3] */ + +pin("ast_pwst_h_o[2]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.029213 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000584 ; + + /* Other user defined attributes. */ + original_pin : ast_pwst_h_o[2]; + timing () { + related_pin : "ast_pwst_o[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.018088, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.120368, 0.186170, 0.300859, 0.616258, 1.455810",\ + "0.125647, 0.191441, 0.306120, 0.621529, 1.461089",\ + "0.207819, 0.273839, 0.388973, 0.704719, 1.544218",\ + "0.296772, 0.362735, 0.477872, 0.794339, 1.635091",\ + "0.704776, 0.781389, 0.901027, 1.217412, 2.063059"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.018088, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.118650, 0.232640, 0.431328, 0.981607, 2.441227",\ + "0.118668, 0.232640, 0.431330, 0.981682, 2.441227",\ + "0.118668, 0.233537, 0.432463, 0.981682, 2.441227",\ + "0.120002, 0.233537, 0.433774, 0.981682, 2.441227",\ + "0.161250, 0.255527, 0.435044, 0.981682, 2.441227"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.021349, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.061996, 0.075776, 0.099734, 0.165532, 0.340715",\ + "0.068682, 0.082462, 0.106420, 0.172219, 0.347402",\ + "0.154377, 0.169144, 0.193145, 0.258865, 0.434247",\ + "0.245754, 0.264276, 0.291081, 0.357185, 0.532518",\ + "0.645975, 0.686648, 0.737659, 0.832084, 1.014107"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.021349, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.026953, 0.051423, 0.094862, 0.215093, 0.534102",\ + "0.026955, 0.051424, 0.094862, 0.215093, 0.534102",\ + "0.033450, 0.053875, 0.094993, 0.215093, 0.534241",\ + "0.046741, 0.065795, 0.101823, 0.215093, 0.534701",\ + "0.120319, 0.148529, 0.186126, 0.267902, 0.543427"); + } + + } /* end of arc ast_pwst_o[4]_ast_pwst_o[2]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "ast_pwst_o[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.017926, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.120368, 0.186170, 0.300859, 0.616258, 1.455810",\ + "0.125568, 0.191362, 0.306040, 0.621450, 1.461010",\ + "0.207819, 0.273839, 0.388973, 0.704719, 1.544218",\ + "0.296772, 0.362735, 0.477872, 0.794339, 1.635091",\ + "0.704776, 0.781389, 0.901027, 1.217412, 2.063059"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.017926, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.118650, 0.232611, 0.431328, 0.977612, 2.431972",\ + "0.118650, 0.232611, 0.431330, 0.977612, 2.431972",\ + "0.118650, 0.233259, 0.432463, 0.977612, 2.431972",\ + "0.120002, 0.233259, 0.433774, 0.977612, 2.431972",\ + "0.161250, 0.255527, 0.435044, 0.981481, 2.431972"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.020771, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.061996, 0.075776, 0.099734, 0.165532, 0.340715",\ + "0.068410, 0.082189, 0.106148, 0.171946, 0.347129",\ + "0.154377, 0.169144, 0.193145, 0.258865, 0.434247",\ + "0.245754, 0.264276, 0.291081, 0.357185, 0.532518",\ + "0.645975, 0.686648, 0.737659, 0.832084, 1.014107"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.020771, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.026953, 0.051423, 0.094862, 0.214557, 0.534102",\ + "0.026954, 0.051424, 0.094862, 0.214557, 0.534102",\ + "0.033450, 0.053875, 0.094993, 0.214557, 0.534241",\ + "0.046741, 0.065795, 0.101823, 0.215088, 0.534701",\ + "0.120319, 0.148529, 0.186126, 0.267902, 0.543427"); + } + + } /* end of arc ast_pwst_o[4]_ast_pwst_o[2]_una_min*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : recovery_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.120145, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.404676, 0.353105, 0.318351, 0.315478, 0.348023",\ + "0.454532, 0.402961, 0.368207, 0.365334, 0.397879",\ + "0.484555, 0.432984, 0.398230, 0.395357, 0.427902",\ + "0.566329, 0.514758, 0.480004, 0.477131, 0.509676",\ + "0.956464, 0.904894, 0.869963, 0.866772, 0.898621"); + } + + } /* end of arc clk_ast_ext_i_ast_pwst_o[2]_recrr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : removal_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.118140, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.316729, -0.270030, -0.234537, -0.184982, -0.086025",\ + "-0.365783, -0.319083, -0.283591, -0.234035, -0.135079",\ + "-0.396608, -0.349909, -0.314416, -0.264861, -0.165904",\ + "-0.478382, -0.431683, -0.396190, -0.346635, -0.247678",\ + "-0.868371, -0.821645, -0.786315, -0.736867, -0.638027"); + } + + } /* end of arc clk_ast_ext_i_ast_pwst_o[2]_remrr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "380000.531250, 380000.593750, 380000.718750, 380001.031250, 380001.875000",\ + "380000.625000, 380000.687500, 380000.812500, 380001.125000, 380001.968750",\ + "380000.687500, 380000.750000, 380000.875000, 380001.187500, 380002.031250",\ + "380000.750000, 380000.812500, 380000.937500, 380001.250000, 380002.093750",\ + "380001.062500, 380001.125000, 380001.250000, 380001.562500, 380002.406250"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.120145, 0.234100, 0.432069, 0.982878, 2.445448",\ + "0.120145, 0.234100, 0.432069, 0.982878, 2.445448",\ + "0.120145, 0.234100, 0.432069, 0.982878, 2.445448",\ + "0.120145, 0.234100, 0.432069, 0.982878, 2.445448",\ + "0.120145, 0.234100, 0.432069, 0.982878, 2.445448"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "380001.875000, 380001.875000, 380001.906250, 380001.968750, 380002.156250",\ + "380001.968750, 380001.968750, 380002.000000, 380002.062500, 380002.250000",\ + "380002.062500, 380002.062500, 380002.093750, 380002.156250, 380002.343750",\ + "380002.125000, 380002.125000, 380002.156250, 380002.218750, 380002.406250",\ + "380002.468750, 380002.468750, 380002.500000, 380002.562500, 380002.750000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.031251, 0.056161, 0.101276, 0.226771, 0.561875",\ + "0.031251, 0.056161, 0.101276, 0.226771, 0.561875",\ + "0.031251, 0.056161, 0.101276, 0.226771, 0.561875",\ + "0.031251, 0.056161, 0.101276, 0.226771, 0.561875",\ + "0.031251, 0.056161, 0.101276, 0.226771, 0.561875"); + } + + } /* end of arc clk_ast_tlul_i_ast_pwst_o[2]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.396377, 0.462195, 0.577090, 0.892530, 1.731965",\ + "0.483687, 0.549505, 0.664400, 0.979841, 1.819276",\ + "0.581466, 0.647284, 0.762179, 1.077619, 1.917054",\ + "0.654025, 0.719843, 0.834738, 1.150178, 1.989613",\ + "1.042482, 1.108301, 1.223195, 1.538636, 2.378071"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.118140, 0.231881, 0.431660, 0.979741, 2.437812",\ + "0.118140, 0.231881, 0.431660, 0.979741, 2.437812",\ + "0.118140, 0.231881, 0.431660, 0.979741, 2.437812",\ + "0.118140, 0.231881, 0.431660, 0.979741, 2.437812",\ + "0.118140, 0.231881, 0.431660, 0.979741, 2.437812"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.326727, 0.341464, 0.366815, 0.435950, 0.619738",\ + "0.414576, 0.429313, 0.454664, 0.523799, 0.707587",\ + "0.495656, 0.510394, 0.535744, 0.604879, 0.788667",\ + "0.553927, 0.568665, 0.594015, 0.663150, 0.846938",\ + "0.864022, 0.878760, 0.904110, 0.973245, 1.157033"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.026020, 0.051544, 0.096671, 0.220662, 0.551206",\ + "0.026020, 0.051544, 0.096671, 0.220662, 0.551206",\ + "0.026020, 0.051544, 0.096671, 0.220662, 0.551206",\ + "0.026020, 0.051544, 0.096671, 0.220662, 0.551206",\ + "0.026020, 0.051544, 0.096671, 0.220662, 0.551206"); + } + + } /* end of arc clk_ast_tlul_i_ast_pwst_o[2]_redg_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "380000.406250, 380000.468750, 380000.593750, 380000.906250, 380001.750000",\ + "380000.500000, 380000.562500, 380000.687500, 380001.000000, 380001.843750",\ + "380000.593750, 380000.656250, 380000.781250, 380001.093750, 380001.937500",\ + "380000.750000, 380000.812500, 380000.937500, 380001.250000, 380002.093750",\ + "380001.000000, 380001.062500, 380001.187500, 380001.500000, 380002.343750"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.120145, 0.234100, 0.432069, 0.982878, 2.445448",\ + "0.120145, 0.234100, 0.432069, 0.982878, 2.445448",\ + "0.120145, 0.234100, 0.432069, 0.982878, 2.445448",\ + "0.120145, 0.234100, 0.432069, 0.982878, 2.445448",\ + "0.120145, 0.234100, 0.432069, 0.982878, 2.445448"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "380001.781250, 380001.781250, 380001.812500, 380001.875000, 380002.062500",\ + "380001.875000, 380001.875000, 380001.906250, 380001.968750, 380002.156250",\ + "380002.000000, 380002.000000, 380002.031250, 380002.093750, 380002.281250",\ + "380002.187500, 380002.187500, 380002.218750, 380002.281250, 380002.468750",\ + "380002.500000, 380002.500000, 380002.531250, 380002.593750, 380002.781250"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.031236, 0.056156, 0.101275, 0.226769, 0.561877",\ + "0.031236, 0.056156, 0.101275, 0.226769, 0.561877",\ + "0.031236, 0.056156, 0.101275, 0.226769, 0.561877",\ + "0.031236, 0.056156, 0.101275, 0.226769, 0.561877",\ + "0.031236, 0.056156, 0.101275, 0.226769, 0.561877"); + } + + } /* end of arc padmux2ast_i[4]_ast_pwst_o[2]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "379999.937500, 380000.000000, 380000.093750, 380000.406250, 380001.250000",\ + "380000.031250, 380000.093750, 380000.187500, 380000.500000, 380001.343750",\ + "380000.093750, 380000.156250, 380000.250000, 380000.562500, 380001.406250",\ + "380000.250000, 380000.312500, 380000.406250, 380000.718750, 380001.562500",\ + "380000.468750, 380000.531250, 380000.625000, 380000.937500, 380001.781250"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.118145, 0.231881, 0.431660, 0.979741, 2.437852",\ + "0.118145, 0.231881, 0.431660, 0.979741, 2.437852",\ + "0.118145, 0.231881, 0.431660, 0.979741, 2.437852",\ + "0.118145, 0.231881, 0.431660, 0.979741, 2.437852",\ + "0.118145, 0.231881, 0.431660, 0.979741, 2.437852"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "380001.375000, 380001.406250, 380001.437500, 380001.500000, 380001.687500",\ + "380001.468750, 380001.500000, 380001.531250, 380001.593750, 380001.781250",\ + "380001.562500, 380001.593750, 380001.625000, 380001.687500, 380001.875000",\ + "380001.750000, 380001.781250, 380001.812500, 380001.875000, 380002.062500",\ + "380002.000000, 380002.031250, 380002.062500, 380002.125000, 380002.312500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000584, 0.001979, 0.004430, 0.011183, 0.029213"); + values ( "0.026020, 0.051544, 0.096671, 0.220662, 0.551206",\ + "0.026020, 0.051544, 0.096671, 0.220662, 0.551206",\ + "0.026020, 0.051544, 0.096671, 0.220662, 0.551206",\ + "0.026020, 0.051544, 0.096671, 0.220662, 0.551206",\ + "0.026020, 0.051544, 0.096671, 0.220662, 0.551206"); + } + + } /* end of arc padmux2ast_i[4]_ast_pwst_o[2]_una_min*/ + +} /* end of pin ast_pwst_h_o[2] */ + +pin("ast_pwst_h_o[1]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.101136 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : ast_pwst_h_o[1]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "970008.437500, 970008.625000, 970008.750000, 970009.000000, 970009.875000",\ + "970008.562500, 970008.750000, 970008.875000, 970009.125000, 970010.000000",\ + "970008.687500, 970008.875000, 970009.000000, 970009.250000, 970010.125000",\ + "970008.687500, 970008.875000, 970009.000000, 970009.250000, 970010.125000",\ + "970009.062500, 970009.250000, 970009.375000, 970009.625000, 970010.500000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "970005.937500, 970006.062500, 970006.187500, 970006.375000, 970007.000000",\ + "970006.062500, 970006.187500, 970006.312500, 970006.500000, 970007.125000",\ + "970006.062500, 970006.187500, 970006.312500, 970006.500000, 970007.125000",\ + "970006.187500, 970006.312500, 970006.437500, 970006.625000, 970007.250000",\ + "970006.437500, 970006.562500, 970006.687500, 970006.875000, 970007.500000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101"); + } + + } /* end of arc clk_ast_tlul_i_ast_pwst_o[1]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "7.046945, 7.238483, 7.357924, 7.616586, 8.489688",\ + "7.134256, 7.325794, 7.445234, 7.703897, 8.576999",\ + "7.232034, 7.423573, 7.543013, 7.801675, 8.674777",\ + "7.304593, 7.496131, 7.615571, 7.874234, 8.747335",\ + "7.693051, 7.884589, 8.004029, 8.262691, 9.135794"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "5.236063, 5.393305, 5.518865, 5.706539, 6.296398",\ + "5.323912, 5.481154, 5.606714, 5.794387, 6.384247",\ + "5.404993, 5.562235, 5.687795, 5.875468, 6.465328",\ + "5.463264, 5.620506, 5.746066, 5.933739, 6.523599",\ + "5.773359, 5.930601, 6.056160, 6.243834, 6.833694"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242588, 0.288084, 0.303651, 0.497673, 1.551133",\ + "0.242588, 0.288084, 0.303651, 0.497673, 1.551133",\ + "0.242588, 0.288084, 0.303651, 0.497673, 1.551133",\ + "0.242588, 0.288084, 0.303651, 0.497673, 1.551133",\ + "0.242588, 0.288084, 0.303651, 0.497673, 1.551133"); + } + + } /* end of arc clk_ast_tlul_i_ast_pwst_o[1]_redg_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "380006.593750, 380006.781250, 380006.906250, 380007.156250, 380008.031250",\ + "380006.687500, 380006.875000, 380007.000000, 380007.250000, 380008.125000",\ + "380006.781250, 380006.968750, 380007.093750, 380007.343750, 380008.218750",\ + "380006.937500, 380007.125000, 380007.250000, 380007.500000, 380008.375000",\ + "380007.187500, 380007.375000, 380007.500000, 380007.750000, 380008.625000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "380006.281250, 380006.437500, 380006.562500, 380006.750000, 380007.343750",\ + "380006.375000, 380006.531250, 380006.656250, 380006.843750, 380007.437500",\ + "380006.500000, 380006.656250, 380006.781250, 380006.968750, 380007.562500",\ + "380006.687500, 380006.843750, 380006.968750, 380007.156250, 380007.750000",\ + "380007.000000, 380007.156250, 380007.281250, 380007.468750, 380008.062500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101"); + } + + } /* end of arc padmux2ast_i[4]_ast_pwst_o[1]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "380006.593750, 380006.781250, 380006.906250, 380007.156250, 380008.031250",\ + "380006.687500, 380006.875000, 380007.000000, 380007.250000, 380008.125000",\ + "380006.750000, 380006.937500, 380007.062500, 380007.312500, 380008.187500",\ + "380006.906250, 380007.093750, 380007.218750, 380007.468750, 380008.343750",\ + "380007.125000, 380007.312500, 380007.437500, 380007.687500, 380008.562500"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "380006.281250, 380006.437500, 380006.562500, 380006.750000, 380007.343750",\ + "380006.375000, 380006.531250, 380006.656250, 380006.843750, 380007.437500",\ + "380006.468750, 380006.625000, 380006.750000, 380006.937500, 380007.531250",\ + "380006.656250, 380006.812500, 380006.937500, 380007.125000, 380007.718750",\ + "380006.906250, 380007.062500, 380007.187500, 380007.375000, 380007.968750"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132"); + } + + } /* end of arc padmux2ast_i[4]_ast_pwst_o[1]_una_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "970005.812500, 970005.937500, 970006.062500, 970006.250000, 970006.875000",\ + "970005.937500, 970006.062500, 970006.187500, 970006.375000, 970007.000000",\ + "970005.937500, 970006.062500, 970006.187500, 970006.375000, 970007.000000",\ + "970006.187500, 970006.312500, 970006.437500, 970006.625000, 970007.250000",\ + "970006.437500, 970006.562500, 970006.687500, 970006.875000, 970007.500000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "970008.312500, 970008.500000, 970008.625000, 970008.875000, 970009.750000",\ + "970008.437500, 970008.625000, 970008.750000, 970009.000000, 970009.875000",\ + "970008.562500, 970008.750000, 970008.875000, 970009.125000, 970010.000000",\ + "970008.812500, 970009.000000, 970009.125000, 970009.375000, 970010.250000",\ + "970009.062500, 970009.250000, 970009.375000, 970009.625000, 970010.500000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832"); + } + + } /* end of arc padmux2ast_i[4]_ast_pwst_o[1]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "970005.812500, 970005.937500, 970006.062500, 970006.250000, 970006.875000",\ + "970005.937500, 970006.062500, 970006.187500, 970006.375000, 970007.000000",\ + "970005.937500, 970006.062500, 970006.187500, 970006.375000, 970007.000000",\ + "970006.062500, 970006.187500, 970006.312500, 970006.500000, 970007.125000",\ + "970006.312500, 970006.437500, 970006.562500, 970006.750000, 970007.375000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "970008.312500, 970008.500000, 970008.625000, 970008.875000, 970009.750000",\ + "970008.437500, 970008.625000, 970008.750000, 970009.000000, 970009.875000",\ + "970008.562500, 970008.750000, 970008.875000, 970009.125000, 970010.000000",\ + "970008.687500, 970008.875000, 970009.000000, 970009.250000, 970010.125000",\ + "970008.937500, 970009.125000, 970009.250000, 970009.500000, 970010.375000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127"); + } + + } /* end of arc padmux2ast_i[4]_ast_pwst_o[1]_inv_min*/ + + timing () { + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "590006.687500, 590006.875000, 590007.000000, 590007.250000, 590008.125000",\ + "590006.812500, 590007.000000, 590007.125000, 590007.375000, 590008.250000",\ + "590006.812500, 590007.000000, 590007.125000, 590007.375000, 590008.250000",\ + "590006.937500, 590007.125000, 590007.250000, 590007.500000, 590008.375000",\ + "590007.187500, 590007.375000, 590007.500000, 590007.750000, 590008.625000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256090, 0.317188, 0.317188, 0.797460, 2.395127",\ + "0.256090, 0.317188, 0.317188, 0.797460, 2.395127",\ + "0.256090, 0.317188, 0.317188, 0.797460, 2.395127",\ + "0.256090, 0.317188, 0.317188, 0.797460, 2.395127",\ + "0.256090, 0.317188, 0.317188, 0.797460, 2.395127"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "590005.562500, 590005.687500, 590005.812500, 590006.000000, 590006.625000",\ + "590005.687500, 590005.812500, 590005.937500, 590006.125000, 590006.750000",\ + "590005.812500, 590005.937500, 590006.062500, 590006.250000, 590006.875000",\ + "590005.937500, 590006.062500, 590006.187500, 590006.375000, 590007.000000",\ + "590006.312500, 590006.437500, 590006.562500, 590006.750000, 590007.375000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101"); + } + + } /* end of arc padmux2ast_i[5]_ast_pwst_o[1]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "590006.687500, 590006.875000, 590007.000000, 590007.250000, 590008.125000",\ + "590006.687500, 590006.875000, 590007.000000, 590007.250000, 590008.125000",\ + "590006.812500, 590007.000000, 590007.125000, 590007.375000, 590008.250000",\ + "590006.937500, 590007.125000, 590007.250000, 590007.500000, 590008.375000",\ + "590007.187500, 590007.375000, 590007.500000, 590007.750000, 590008.625000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "590005.562500, 590005.687500, 590005.812500, 590006.000000, 590006.625000",\ + "590005.687500, 590005.812500, 590005.937500, 590006.125000, 590006.750000",\ + "590005.812500, 590005.937500, 590006.062500, 590006.250000, 590006.875000",\ + "590005.937500, 590006.062500, 590006.187500, 590006.375000, 590007.000000",\ + "590006.187500, 590006.312500, 590006.437500, 590006.625000, 590007.250000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101"); + } + + } /* end of arc padmux2ast_i[5]_ast_pwst_o[1]_una_min*/ + +} /* end of pin ast_pwst_h_o[1] */ + +pin("ast_pwst_h_o[0]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.101136 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : ast_pwst_h_o[0]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "970008.437500, 970008.625000, 970008.750000, 970009.000000, 970009.875000",\ + "970008.562500, 970008.750000, 970008.875000, 970009.125000, 970010.000000",\ + "970008.687500, 970008.875000, 970009.000000, 970009.250000, 970010.125000",\ + "970008.687500, 970008.875000, 970009.000000, 970009.250000, 970010.125000",\ + "970009.062500, 970009.250000, 970009.375000, 970009.625000, 970010.500000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "970005.937500, 970006.062500, 970006.187500, 970006.375000, 970007.000000",\ + "970006.062500, 970006.187500, 970006.312500, 970006.500000, 970007.125000",\ + "970006.062500, 970006.187500, 970006.312500, 970006.500000, 970007.125000",\ + "970006.187500, 970006.312500, 970006.437500, 970006.625000, 970007.250000",\ + "970006.437500, 970006.562500, 970006.687500, 970006.875000, 970007.500000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101"); + } + + } /* end of arc clk_ast_tlul_i_ast_pwst_o[0]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "7.046945, 7.238483, 7.357924, 7.616586, 8.489688",\ + "7.134256, 7.325794, 7.445234, 7.703897, 8.576999",\ + "7.232034, 7.423573, 7.543013, 7.801675, 8.674777",\ + "7.304593, 7.496131, 7.615571, 7.874234, 8.747335",\ + "7.693051, 7.884589, 8.004029, 8.262691, 9.135794"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "5.236063, 5.393305, 5.518865, 5.706539, 6.296398",\ + "5.323912, 5.481154, 5.606714, 5.794387, 6.384247",\ + "5.404993, 5.562235, 5.687795, 5.875468, 6.465328",\ + "5.463264, 5.620506, 5.746066, 5.933739, 6.523599",\ + "5.773359, 5.930601, 6.056160, 6.243834, 6.833694"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242588, 0.288084, 0.303651, 0.497673, 1.551133",\ + "0.242588, 0.288084, 0.303651, 0.497673, 1.551133",\ + "0.242588, 0.288084, 0.303651, 0.497673, 1.551133",\ + "0.242588, 0.288084, 0.303651, 0.497673, 1.551133",\ + "0.242588, 0.288084, 0.303651, 0.497673, 1.551133"); + } + + } /* end of arc clk_ast_tlul_i_ast_pwst_o[0]_redg_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "380006.593750, 380006.781250, 380006.906250, 380007.156250, 380008.031250",\ + "380006.687500, 380006.875000, 380007.000000, 380007.250000, 380008.125000",\ + "380006.781250, 380006.968750, 380007.093750, 380007.343750, 380008.218750",\ + "380006.937500, 380007.125000, 380007.250000, 380007.500000, 380008.375000",\ + "380007.187500, 380007.375000, 380007.500000, 380007.750000, 380008.625000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "380006.281250, 380006.437500, 380006.562500, 380006.750000, 380007.343750",\ + "380006.375000, 380006.531250, 380006.656250, 380006.843750, 380007.437500",\ + "380006.500000, 380006.656250, 380006.781250, 380006.968750, 380007.562500",\ + "380006.687500, 380006.843750, 380006.968750, 380007.156250, 380007.750000",\ + "380007.000000, 380007.156250, 380007.281250, 380007.468750, 380008.062500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101"); + } + + } /* end of arc padmux2ast_i[4]_ast_pwst_o[0]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "380006.593750, 380006.781250, 380006.906250, 380007.156250, 380008.031250",\ + "380006.687500, 380006.875000, 380007.000000, 380007.250000, 380008.125000",\ + "380006.750000, 380006.937500, 380007.062500, 380007.312500, 380008.187500",\ + "380006.906250, 380007.093750, 380007.218750, 380007.468750, 380008.343750",\ + "380007.125000, 380007.312500, 380007.437500, 380007.687500, 380008.562500"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "380006.281250, 380006.437500, 380006.562500, 380006.750000, 380007.343750",\ + "380006.375000, 380006.531250, 380006.656250, 380006.843750, 380007.437500",\ + "380006.468750, 380006.625000, 380006.750000, 380006.937500, 380007.531250",\ + "380006.656250, 380006.812500, 380006.937500, 380007.125000, 380007.718750",\ + "380006.906250, 380007.062500, 380007.187500, 380007.375000, 380007.968750"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132"); + } + + } /* end of arc padmux2ast_i[4]_ast_pwst_o[0]_una_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "970005.812500, 970005.937500, 970006.062500, 970006.250000, 970006.875000",\ + "970005.937500, 970006.062500, 970006.187500, 970006.375000, 970007.000000",\ + "970005.937500, 970006.062500, 970006.187500, 970006.375000, 970007.000000",\ + "970006.187500, 970006.312500, 970006.437500, 970006.625000, 970007.250000",\ + "970006.437500, 970006.562500, 970006.687500, 970006.875000, 970007.500000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "970008.312500, 970008.500000, 970008.625000, 970008.875000, 970009.750000",\ + "970008.437500, 970008.625000, 970008.750000, 970009.000000, 970009.875000",\ + "970008.562500, 970008.750000, 970008.875000, 970009.125000, 970010.000000",\ + "970008.812500, 970009.000000, 970009.125000, 970009.375000, 970010.250000",\ + "970009.062500, 970009.250000, 970009.375000, 970009.625000, 970010.500000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832",\ + "0.256850, 0.317997, 0.317997, 0.797663, 2.394832"); + } + + } /* end of arc padmux2ast_i[4]_ast_pwst_o[0]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "970005.812500, 970005.937500, 970006.062500, 970006.250000, 970006.875000",\ + "970005.937500, 970006.062500, 970006.187500, 970006.375000, 970007.000000",\ + "970005.937500, 970006.062500, 970006.187500, 970006.375000, 970007.000000",\ + "970006.062500, 970006.187500, 970006.312500, 970006.500000, 970007.125000",\ + "970006.312500, 970006.437500, 970006.562500, 970006.750000, 970007.375000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132",\ + "0.242595, 0.288092, 0.303657, 0.497674, 1.551132"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "970008.312500, 970008.500000, 970008.625000, 970008.875000, 970009.750000",\ + "970008.437500, 970008.625000, 970008.750000, 970009.000000, 970009.875000",\ + "970008.562500, 970008.750000, 970008.875000, 970009.125000, 970010.000000",\ + "970008.687500, 970008.875000, 970009.000000, 970009.250000, 970010.125000",\ + "970008.937500, 970009.125000, 970009.250000, 970009.500000, 970010.375000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127"); + } + + } /* end of arc padmux2ast_i[4]_ast_pwst_o[0]_inv_min*/ + + timing () { + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "590006.687500, 590006.875000, 590007.000000, 590007.250000, 590008.125000",\ + "590006.812500, 590007.000000, 590007.125000, 590007.375000, 590008.250000",\ + "590006.812500, 590007.000000, 590007.125000, 590007.375000, 590008.250000",\ + "590006.937500, 590007.125000, 590007.250000, 590007.500000, 590008.375000",\ + "590007.187500, 590007.375000, 590007.500000, 590007.750000, 590008.625000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256090, 0.317188, 0.317188, 0.797460, 2.395127",\ + "0.256090, 0.317188, 0.317188, 0.797460, 2.395127",\ + "0.256090, 0.317188, 0.317188, 0.797460, 2.395127",\ + "0.256090, 0.317188, 0.317188, 0.797460, 2.395127",\ + "0.256090, 0.317188, 0.317188, 0.797460, 2.395127"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "590005.562500, 590005.687500, 590005.812500, 590006.000000, 590006.625000",\ + "590005.687500, 590005.812500, 590005.937500, 590006.125000, 590006.750000",\ + "590005.812500, 590005.937500, 590006.062500, 590006.250000, 590006.875000",\ + "590005.937500, 590006.062500, 590006.187500, 590006.375000, 590007.000000",\ + "590006.312500, 590006.437500, 590006.562500, 590006.750000, 590007.375000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101"); + } + + } /* end of arc padmux2ast_i[5]_ast_pwst_o[0]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "590006.687500, 590006.875000, 590007.000000, 590007.250000, 590008.125000",\ + "590006.687500, 590006.875000, 590007.000000, 590007.250000, 590008.125000",\ + "590006.812500, 590007.000000, 590007.125000, 590007.375000, 590008.250000",\ + "590006.937500, 590007.125000, 590007.250000, 590007.500000, 590008.375000",\ + "590007.187500, 590007.375000, 590007.500000, 590007.750000, 590008.625000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127",\ + "0.256090, 0.291712, 0.291712, 0.797460, 2.395127"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "590005.562500, 590005.687500, 590005.812500, 590006.000000, 590006.625000",\ + "590005.687500, 590005.812500, 590005.937500, 590006.125000, 590006.750000",\ + "590005.812500, 590005.937500, 590006.062500, 590006.250000, 590006.875000",\ + "590005.937500, 590006.062500, 590006.187500, 590006.375000, 590007.000000",\ + "590006.187500, 590006.312500, 590006.437500, 590006.625000, 590007.250000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002606, 0.008844, 0.030015, 0.101136"); + values ( "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101",\ + "0.242962, 0.288493, 0.303943, 0.497719, 1.551101"); + } + + } /* end of arc padmux2ast_i[5]_ast_pwst_o[0]_una_min*/ + +} /* end of pin ast_pwst_h_o[0] */ +} /* end of bus ast_pwst_h_o */ + +pin("main_pd_ni") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001140 ; + + /* Other user defined attributes. */ + original_pin : main_pd_ni; +} /* end of pin main_pd_ni */ + +pin("main_env_iso_en_i") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000488 ; + + /* Other user defined attributes. */ + original_pin : main_env_iso_en_i; +} /* end of pin main_env_iso_en_i */ + +pin("flash_power_down_h_o") { + direction : output ; + max_transition : 3.720000 ; + min_transition : 0.000000 ; + max_capacitance : 0.350585 ; + min_capacitance : 0.000387 ; + max_fanout : 50.000000 ; + capacitance : 0.004062 ; + + /* Other user defined attributes. */ + original_pin : flash_power_down_h_o; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "380000.718750, 380000.781250, 380000.937500, 380001.375000, 380002.718750",\ + "380000.812500, 380000.875000, 380001.031250, 380001.468750, 380002.812500",\ + "380000.875000, 380000.937500, 380001.093750, 380001.531250, 380002.875000",\ + "380000.937500, 380001.000000, 380001.156250, 380001.593750, 380002.937500",\ + "380001.250000, 380001.312500, 380001.468750, 380001.906250, 380003.250000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.074057, 0.193193, 0.452097, 1.259663, 3.712074",\ + "0.074058, 0.193193, 0.452097, 1.259663, 3.712070",\ + "0.074060, 0.193194, 0.452097, 1.259660, 3.712049",\ + "0.074063, 0.193195, 0.452097, 1.259657, 3.712028",\ + "0.074111, 0.193204, 0.452092, 1.259600, 3.711658"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "380002.000000, 380002.031250, 380002.093750, 380002.312500, 380002.843750",\ + "380002.093750, 380002.125000, 380002.187500, 380002.406250, 380002.937500",\ + "380002.187500, 380002.218750, 380002.281250, 380002.500000, 380003.031250",\ + "380002.250000, 380002.281250, 380002.343750, 380002.562500, 380003.093750",\ + "380002.593750, 380002.625000, 380002.687500, 380002.906250, 380003.437500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.054518, 0.105901, 0.199326, 0.496289, 1.444364",\ + "0.054518, 0.105901, 0.199326, 0.496289, 1.444364",\ + "0.054518, 0.105901, 0.199326, 0.496289, 1.444364",\ + "0.054518, 0.105901, 0.199326, 0.496289, 1.444364",\ + "0.054518, 0.105901, 0.199326, 0.496289, 1.444364"); + } + + } /* end of arc clk_ast_tlul_i_flash_power_down_h_o_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.352648, 0.424230, 0.570187, 1.017271, 2.367661",\ + "0.440969, 0.512551, 0.658508, 1.105592, 2.455982",\ + "0.531538, 0.603120, 0.749077, 1.196161, 2.546552",\ + "0.596976, 0.668558, 0.814515, 1.261599, 2.611990",\ + "0.939689, 1.011271, 1.157229, 1.604312, 2.954703"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.074048, 0.193192, 0.452098, 1.259674, 3.712141",\ + "0.074048, 0.193192, 0.452098, 1.259674, 3.712141",\ + "0.074048, 0.193192, 0.452098, 1.259674, 3.712141",\ + "0.074048, 0.193192, 0.452098, 1.259674, 3.712141",\ + "0.074048, 0.193192, 0.452098, 1.259674, 3.712141"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.254546, 0.300198, 0.374019, 0.564384, 1.125543",\ + "0.341890, 0.387542, 0.461363, 0.651728, 1.212887",\ + "0.422786, 0.468439, 0.542260, 0.732625, 1.293784",\ + "0.480635, 0.526288, 0.600109, 0.790475, 1.351633",\ + "0.785321, 0.830974, 0.904795, 1.095161, 1.656318"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.054514, 0.105890, 0.199332, 0.496290, 1.444361",\ + "0.054514, 0.105890, 0.199332, 0.496290, 1.444361",\ + "0.054513, 0.105889, 0.199332, 0.496290, 1.444360",\ + "0.054513, 0.105887, 0.199332, 0.496290, 1.444359",\ + "0.054513, 0.105887, 0.199332, 0.496290, 1.444358"); + } + + } /* end of arc clk_ast_tlul_i_flash_power_down_h_o_redg_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "380000.593750, 380000.656250, 380000.812500, 380001.250000, 380002.593750",\ + "380000.687500, 380000.750000, 380000.906250, 380001.343750, 380002.687500",\ + "380000.781250, 380000.843750, 380001.000000, 380001.437500, 380002.781250",\ + "380000.937500, 380001.000000, 380001.156250, 380001.593750, 380002.937500",\ + "380001.187500, 380001.250000, 380001.406250, 380001.843750, 380003.187500"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.074048, 0.193192, 0.452098, 1.259674, 3.712141",\ + "0.074048, 0.193192, 0.452098, 1.259674, 3.712141",\ + "0.074048, 0.193192, 0.452098, 1.259674, 3.712141",\ + "0.074048, 0.193192, 0.452098, 1.259674, 3.712141",\ + "0.074048, 0.193192, 0.452098, 1.259674, 3.712141"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "380001.906250, 380001.937500, 380002.000000, 380002.218750, 380002.750000",\ + "380002.000000, 380002.031250, 380002.093750, 380002.312500, 380002.843750",\ + "380002.125000, 380002.156250, 380002.218750, 380002.437500, 380002.968750",\ + "380002.312500, 380002.343750, 380002.406250, 380002.625000, 380003.156250",\ + "380002.625000, 380002.656250, 380002.718750, 380002.937500, 380003.468750"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.054518, 0.105901, 0.199326, 0.496289, 1.444364",\ + "0.054518, 0.105901, 0.199326, 0.496289, 1.444364",\ + "0.054518, 0.105901, 0.199326, 0.496289, 1.444364",\ + "0.054518, 0.105901, 0.199326, 0.496289, 1.444364",\ + "0.054518, 0.105901, 0.199326, 0.496289, 1.444364"); + } + + } /* end of arc padmux2ast_i[4]_flash_power_down_h_o_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "380000.593750, 380000.656250, 380000.812500, 380001.250000, 380002.593750",\ + "380000.687500, 380000.750000, 380000.906250, 380001.343750, 380002.687500",\ + "380000.750000, 380000.812500, 380000.968750, 380001.406250, 380002.750000",\ + "380000.906250, 380000.968750, 380001.125000, 380001.562500, 380002.906250",\ + "380001.125000, 380001.187500, 380001.343750, 380001.781250, 380003.125000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.074048, 0.193192, 0.452098, 1.259674, 3.712141",\ + "0.074048, 0.193192, 0.452098, 1.259674, 3.712141",\ + "0.074048, 0.193192, 0.452098, 1.259674, 3.712141",\ + "0.074048, 0.193192, 0.452098, 1.259674, 3.712141",\ + "0.074048, 0.193192, 0.452098, 1.259674, 3.712141"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "380001.906250, 380001.937500, 380002.000000, 380002.218750, 380002.750000",\ + "380002.000000, 380002.031250, 380002.093750, 380002.312500, 380002.843750",\ + "380002.093750, 380002.125000, 380002.187500, 380002.406250, 380002.937500",\ + "380002.281250, 380002.312500, 380002.375000, 380002.593750, 380003.125000",\ + "380002.531250, 380002.562500, 380002.625000, 380002.843750, 380003.375000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.054518, 0.105901, 0.199326, 0.496289, 1.444364",\ + "0.054518, 0.105901, 0.199326, 0.496289, 1.444364",\ + "0.054518, 0.105901, 0.199326, 0.496289, 1.444364",\ + "0.054518, 0.105901, 0.199326, 0.496289, 1.444364",\ + "0.054518, 0.105901, 0.199326, 0.496289, 1.444364"); + } + + } /* end of arc padmux2ast_i[4]_flash_power_down_h_o_una_min*/ + +} /* end of pin flash_power_down_h_o */ + +pin("flash_power_ready_h_o") { + direction : output ; + max_transition : 3.720000 ; + min_transition : 0.000000 ; + max_capacitance : 0.350585 ; + min_capacitance : 0.000387 ; + max_fanout : 50.000000 ; + capacitance : 0.004062 ; + + /* Other user defined attributes. */ + original_pin : flash_power_ready_h_o; +} /* end of pin flash_power_ready_h_o */ +bus ( otp_power_seq_i ) { + + bus_type : BUS2_type5 ; + direction : input ; + +pin("otp_power_seq_i[1]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.002066 ; + + /* Other user defined attributes. */ + original_pin : otp_power_seq_i[1]; +} /* end of pin otp_power_seq_i[1] */ + +pin("otp_power_seq_i[0]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.002439 ; + + /* Other user defined attributes. */ + original_pin : otp_power_seq_i[0]; +} /* end of pin otp_power_seq_i[0] */ +} /* end of bus otp_power_seq_i */ +bus ( otp_power_seq_h_o ) { + + bus_type : BUS2_type5 ; + direction : output ; + +pin("otp_power_seq_h_o[1]") { + direction : output ; + max_transition : 3.720000 ; + min_transition : 0.000000 ; + max_capacitance : 0.350585 ; + min_capacitance : 0.000387 ; + max_fanout : 50.000000 ; + capacitance : 0.004062 ; + + /* Other user defined attributes. */ + original_pin : otp_power_seq_h_o[1]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "380000.812500, 380000.875000, 380001.031250, 380001.468750, 380002.812500",\ + "380000.906250, 380000.968750, 380001.125000, 380001.562500, 380002.906250",\ + "380000.968750, 380001.031250, 380001.187500, 380001.625000, 380002.968750",\ + "380001.031250, 380001.093750, 380001.250000, 380001.687500, 380003.031250",\ + "380001.343750, 380001.406250, 380001.562500, 380002.000000, 380003.343750"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.074053, 0.193192, 0.452098, 1.259669, 3.712109",\ + "0.074053, 0.193192, 0.452098, 1.259669, 3.712109",\ + "0.074053, 0.193192, 0.452098, 1.259669, 3.712109",\ + "0.074053, 0.193192, 0.452098, 1.259669, 3.712109",\ + "0.074053, 0.193192, 0.452098, 1.259669, 3.712109"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "380002.312500, 380002.343750, 380002.406250, 380002.625000, 380003.156250",\ + "380002.406250, 380002.437500, 380002.500000, 380002.718750, 380003.250000",\ + "380002.500000, 380002.531250, 380002.593750, 380002.812500, 380003.343750",\ + "380002.562500, 380002.593750, 380002.656250, 380002.875000, 380003.406250",\ + "380002.906250, 380002.937500, 380003.000000, 380003.218750, 380003.750000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.054525, 0.105893, 0.199328, 0.496289, 1.444343",\ + "0.054525, 0.105893, 0.199328, 0.496289, 1.444343",\ + "0.054525, 0.105893, 0.199328, 0.496289, 1.444343",\ + "0.054525, 0.105893, 0.199328, 0.496289, 1.444343",\ + "0.054525, 0.105893, 0.199328, 0.496289, 1.444343"); + } + + } /* end of arc clk_ast_tlul_i_otp_power_seq_h_o[1]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.448711, 0.520292, 0.666247, 1.113340, 2.463725",\ + "0.537164, 0.608745, 0.754701, 1.201793, 2.552178",\ + "0.627117, 0.698698, 0.844654, 1.291746, 2.642131",\ + "0.691522, 0.763103, 0.909059, 1.356151, 2.706536",\ + "1.028584, 1.100166, 1.246121, 1.693213, 3.043598"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.074053, 0.193192, 0.452098, 1.259669, 3.712109",\ + "0.074053, 0.193192, 0.452098, 1.259669, 3.712109",\ + "0.074053, 0.193192, 0.452098, 1.259669, 3.712109",\ + "0.074053, 0.193192, 0.452098, 1.259669, 3.712109",\ + "0.074053, 0.193192, 0.452098, 1.259669, 3.712109"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.535143, 0.580795, 0.654612, 0.844979, 1.406126",\ + "0.622520, 0.668171, 0.741989, 0.932356, 1.493503",\ + "0.703389, 0.749041, 0.822858, 1.013225, 1.574372",\ + "0.761087, 0.806739, 0.880556, 1.070923, 1.632070",\ + "1.064074, 1.109726, 1.183543, 1.373910, 1.935057"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.054525, 0.105893, 0.199328, 0.496289, 1.444343",\ + "0.054525, 0.105893, 0.199328, 0.496289, 1.444343",\ + "0.054525, 0.105893, 0.199328, 0.496289, 1.444343",\ + "0.054525, 0.105893, 0.199328, 0.496289, 1.444343",\ + "0.054525, 0.105893, 0.199328, 0.496289, 1.444343"); + } + + } /* end of arc clk_ast_tlul_i_otp_power_seq_h_o[1]_redg_min*/ + + timing () { + related_pin : "otp_power_seq_i[1]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.280735, 0.352314, 0.498262, 0.945381, 2.295748",\ + "0.365932, 0.437494, 0.583395, 1.030705, 2.380943",\ + "0.458471, 0.529972, 0.675698, 1.123714, 2.473475",\ + "0.634070, 0.705499, 0.850886, 1.299582, 2.649080",\ + "0.942777, 1.014243, 1.159029, 1.607148, 2.957408"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.074065, 0.193195, 0.452096, 1.259655, 3.712015",\ + "0.074153, 0.193212, 0.452096, 1.259655, 3.712015",\ + "0.074479, 0.193278, 0.452096, 1.259655, 3.712015",\ + "0.075512, 0.193773, 0.452096, 1.259655, 3.712015",\ + "0.077859, 0.195201, 0.452096, 1.259655, 3.712015"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.164110, 0.209762, 0.283580, 0.473944, 1.035104",\ + "0.247135, 0.292784, 0.366597, 0.556994, 1.118023",\ + "0.324377, 0.370013, 0.443807, 0.634329, 1.194869",\ + "0.452551, 0.498155, 0.571901, 0.762742, 1.322028",\ + "0.650770, 0.696491, 0.770670, 0.961172, 1.520128"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.054518, 0.105900, 0.199326, 0.496289, 1.444363",\ + "0.054583, 0.105900, 0.199350, 0.496296, 1.444363",\ + "0.054828, 0.105900, 0.199442, 0.496321, 1.444363",\ + "0.055455, 0.105900, 0.199678, 0.496387, 1.444363",\ + "0.057468, 0.107107, 0.200875, 0.496387, 1.444363"); + } + + } /* end of arc otp_power_seq_i[1]_otp_power_seq_h_o[1]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "otp_power_seq_i[1]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.280735, 0.352314, 0.498262, 0.945381, 2.295748",\ + "0.365932, 0.437494, 0.583395, 1.030705, 2.380943",\ + "0.458471, 0.529972, 0.675698, 1.123714, 2.473475",\ + "0.634070, 0.705499, 0.850886, 1.299582, 2.649080",\ + "0.942777, 1.014243, 1.159029, 1.607148, 2.957408"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.074065, 0.193195, 0.451499, 1.259037, 3.706044",\ + "0.074153, 0.193212, 0.451499, 1.259037, 3.706044",\ + "0.074479, 0.193278, 0.451499, 1.259037, 3.706044",\ + "0.075512, 0.193773, 0.451499, 1.259037, 3.706044",\ + "0.077859, 0.195201, 0.451499, 1.259378, 3.706689"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.164110, 0.209762, 0.283580, 0.473944, 1.035104",\ + "0.247135, 0.292784, 0.366597, 0.556994, 1.118023",\ + "0.324377, 0.370013, 0.443807, 0.634329, 1.194869",\ + "0.452551, 0.498155, 0.571901, 0.762742, 1.322028",\ + "0.650770, 0.696491, 0.770670, 0.961172, 1.520128"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.054518, 0.104862, 0.199326, 0.496289, 1.441414",\ + "0.054583, 0.104862, 0.199350, 0.496296, 1.441414",\ + "0.054828, 0.104862, 0.199442, 0.496321, 1.441414",\ + "0.055455, 0.104862, 0.199678, 0.496356, 1.441414",\ + "0.057468, 0.107107, 0.200875, 0.496356, 1.442153"); + } + + } /* end of arc otp_power_seq_i[1]_otp_power_seq_h_o[1]_una_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "380000.687500, 380000.750000, 380000.906250, 380001.343750, 380002.687500",\ + "380000.781250, 380000.843750, 380001.000000, 380001.437500, 380002.781250",\ + "380000.875000, 380000.937500, 380001.093750, 380001.531250, 380002.875000",\ + "380001.031250, 380001.093750, 380001.250000, 380001.687500, 380003.031250",\ + "380001.281250, 380001.343750, 380001.500000, 380001.937500, 380003.281250"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.074053, 0.193192, 0.452098, 1.259669, 3.712109",\ + "0.074053, 0.193192, 0.452098, 1.259669, 3.712109",\ + "0.074053, 0.193192, 0.452098, 1.259669, 3.712109",\ + "0.074053, 0.193192, 0.452098, 1.259669, 3.712109",\ + "0.074053, 0.193192, 0.452098, 1.259669, 3.712109"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "380002.218750, 380002.250000, 380002.312500, 380002.531250, 380003.062500",\ + "380002.312500, 380002.343750, 380002.406250, 380002.625000, 380003.156250",\ + "380002.437500, 380002.468750, 380002.531250, 380002.750000, 380003.281250",\ + "380002.625000, 380002.656250, 380002.718750, 380002.937500, 380003.468750",\ + "380002.937500, 380002.968750, 380003.031250, 380003.250000, 380003.781250"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.054525, 0.105893, 0.199328, 0.496289, 1.444343",\ + "0.054525, 0.105893, 0.199328, 0.496289, 1.444343",\ + "0.054525, 0.105893, 0.199328, 0.496289, 1.444343",\ + "0.054525, 0.105893, 0.199328, 0.496289, 1.444343",\ + "0.054525, 0.105893, 0.199328, 0.496289, 1.444343"); + } + + } /* end of arc padmux2ast_i[4]_otp_power_seq_h_o[1]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "380000.687500, 380000.750000, 380000.906250, 380001.343750, 380002.687500",\ + "380000.781250, 380000.843750, 380001.000000, 380001.437500, 380002.781250",\ + "380000.843750, 380000.906250, 380001.062500, 380001.500000, 380002.843750",\ + "380001.000000, 380001.062500, 380001.218750, 380001.656250, 380003.000000",\ + "380001.218750, 380001.281250, 380001.437500, 380001.875000, 380003.218750"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.074053, 0.193192, 0.452098, 1.259669, 3.712109",\ + "0.074053, 0.193192, 0.452098, 1.259669, 3.712109",\ + "0.074053, 0.193192, 0.452098, 1.259669, 3.712109",\ + "0.074053, 0.193192, 0.452098, 1.259669, 3.712109",\ + "0.074053, 0.193192, 0.452098, 1.259669, 3.712109"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "380002.218750, 380002.250000, 380002.312500, 380002.531250, 380003.062500",\ + "380002.312500, 380002.343750, 380002.406250, 380002.625000, 380003.156250",\ + "380002.406250, 380002.437500, 380002.500000, 380002.718750, 380003.250000",\ + "380002.593750, 380002.625000, 380002.687500, 380002.906250, 380003.437500",\ + "380002.843750, 380002.875000, 380002.937500, 380003.156250, 380003.687500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.054525, 0.105893, 0.199328, 0.496289, 1.444343",\ + "0.054525, 0.105893, 0.199328, 0.496289, 1.444343",\ + "0.054525, 0.105893, 0.199328, 0.496289, 1.444343",\ + "0.054525, 0.105893, 0.199328, 0.496289, 1.444343",\ + "0.054525, 0.105893, 0.199328, 0.496289, 1.444343"); + } + + } /* end of arc padmux2ast_i[4]_otp_power_seq_h_o[1]_una_min*/ + +} /* end of pin otp_power_seq_h_o[1] */ + +pin("otp_power_seq_h_o[0]") { + direction : output ; + max_transition : 3.720000 ; + min_transition : 0.000000 ; + max_capacitance : 0.350585 ; + min_capacitance : 0.000387 ; + max_fanout : 50.000000 ; + capacitance : 0.004062 ; + + /* Other user defined attributes. */ + original_pin : otp_power_seq_h_o[0]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "380002.312500, 380002.406250, 380002.531250, 380003.000000, 380004.343750",\ + "380002.406250, 380002.500000, 380002.625000, 380003.093750, 380004.437500",\ + "380002.500000, 380002.593750, 380002.718750, 380003.187500, 380004.531250",\ + "380002.562500, 380002.656250, 380002.781250, 380003.250000, 380004.593750",\ + "380002.906250, 380003.000000, 380003.125000, 380003.593750, 380004.937500"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.073833, 0.193149, 0.452120, 1.259926, 3.713809",\ + "0.073833, 0.193149, 0.452120, 1.259926, 3.713809",\ + "0.073833, 0.193149, 0.452120, 1.259926, 3.713809",\ + "0.073834, 0.193149, 0.452120, 1.259926, 3.713806",\ + "0.073834, 0.193149, 0.452120, 1.259926, 3.713804"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "380000.593750, 380000.656250, 380000.718750, 380000.906250, 380001.468750",\ + "380000.687500, 380000.750000, 380000.812500, 380001.000000, 380001.562500",\ + "380000.750000, 380000.812500, 380000.875000, 380001.062500, 380001.625000",\ + "380000.812500, 380000.875000, 380000.937500, 380001.125000, 380001.687500",\ + "380001.125000, 380001.187500, 380001.250000, 380001.437500, 380002.000000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.054415, 0.105307, 0.199650, 0.496371, 1.443909",\ + "0.054415, 0.105307, 0.199650, 0.496371, 1.443909",\ + "0.054415, 0.105307, 0.199650, 0.496371, 1.443909",\ + "0.054415, 0.105309, 0.199649, 0.496371, 1.443911",\ + "0.054417, 0.105319, 0.199643, 0.496370, 1.443919"); + } + + } /* end of arc clk_ast_tlul_i_otp_power_seq_h_o[0]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.573426, 0.645049, 0.791123, 1.237737, 2.588445",\ + "0.660803, 0.732425, 0.878500, 1.325114, 2.675822",\ + "0.741672, 0.813295, 0.959369, 1.405983, 2.756691",\ + "0.799370, 0.870993, 1.017067, 1.463682, 2.814389",\ + "1.102357, 1.173980, 1.320054, 1.766668, 3.117376"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.073832, 0.193148, 0.452121, 1.259928, 3.713817",\ + "0.073832, 0.193148, 0.452121, 1.259928, 3.713817",\ + "0.073832, 0.193148, 0.452121, 1.259928, 3.713817",\ + "0.073832, 0.193148, 0.452121, 1.259928, 3.713817",\ + "0.073832, 0.193148, 0.452121, 1.259928, 3.713817"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.260939, 0.306616, 0.380550, 0.571046, 1.131945",\ + "0.349392, 0.395070, 0.469004, 0.659499, 1.220399",\ + "0.439345, 0.485023, 0.558957, 0.749452, 1.310352",\ + "0.503750, 0.549428, 0.623362, 0.813857, 1.374757",\ + "0.840813, 0.886490, 0.960424, 1.150919, 1.711819"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.054414, 0.105305, 0.199651, 0.496372, 1.443908",\ + "0.054414, 0.105305, 0.199651, 0.496372, 1.443908",\ + "0.054414, 0.105305, 0.199651, 0.496372, 1.443908",\ + "0.054414, 0.105305, 0.199651, 0.496372, 1.443908",\ + "0.054414, 0.105305, 0.199651, 0.496372, 1.443908"); + } + + } /* end of arc clk_ast_tlul_i_otp_power_seq_h_o[0]_redg_min*/ + + timing () { + related_pin : "otp_power_seq_i[0]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.258742, 0.330399, 0.476573, 0.922786, 2.273765",\ + "0.342268, 0.413906, 0.560027, 1.006455, 2.357289",\ + "0.432373, 0.503959, 0.649927, 1.096969, 2.447388",\ + "0.604916, 0.676353, 0.821884, 1.270636, 2.619913",\ + "0.890695, 0.962107, 1.107175, 1.555746, 2.905733"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.073647, 0.193112, 0.452140, 1.260145, 3.715251",\ + "0.073746, 0.193131, 0.452140, 1.260145, 3.715251",\ + "0.074030, 0.193188, 0.452140, 1.260145, 3.715251",\ + "0.074867, 0.193375, 0.452140, 1.260145, 3.715251",\ + "0.076941, 0.194654, 0.452140, 1.260145, 3.715251"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.158895, 0.204571, 0.278502, 0.468994, 1.029901",\ + "0.236396, 0.282061, 0.355936, 0.546363, 1.107398",\ + "0.299798, 0.345438, 0.419238, 0.609722, 1.170409",\ + "0.399856, 0.445471, 0.519267, 0.710096, 1.269222",\ + "0.539370, 0.585337, 0.659872, 0.850367, 1.409363"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.054417, 0.105322, 0.199642, 0.496369, 1.443922",\ + "0.054466, 0.105609, 0.199642, 0.496369, 1.443922",\ + "0.054754, 0.105639, 0.199642, 0.496369, 1.443922",\ + "0.055765, 0.105639, 0.199849, 0.496390, 1.443922",\ + "0.058856, 0.108680, 0.201816, 0.496464, 1.443922"); + } + + } /* end of arc otp_power_seq_i[0]_otp_power_seq_h_o[0]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "otp_power_seq_i[0]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.258742, 0.330399, 0.476573, 0.922786, 2.273765",\ + "0.342268, 0.413906, 0.560027, 1.006455, 2.357289",\ + "0.432373, 0.503959, 0.649927, 1.096969, 2.447388",\ + "0.604916, 0.676353, 0.821884, 1.270636, 2.619913",\ + "0.890695, 0.962107, 1.107175, 1.555746, 2.905733"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.073647, 0.193112, 0.451380, 1.258785, 3.705802",\ + "0.073746, 0.193131, 0.451380, 1.258785, 3.705802",\ + "0.074030, 0.193188, 0.451380, 1.258785, 3.705802",\ + "0.074867, 0.193375, 0.451380, 1.258785, 3.705802",\ + "0.076941, 0.194654, 0.451380, 1.259595, 3.705802"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.158895, 0.204571, 0.278502, 0.468994, 1.029901",\ + "0.236396, 0.282061, 0.355936, 0.546363, 1.107398",\ + "0.299798, 0.345438, 0.419238, 0.609722, 1.170409",\ + "0.399856, 0.445471, 0.519267, 0.710096, 1.269222",\ + "0.539370, 0.585337, 0.659872, 0.850367, 1.409363"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.054417, 0.105076, 0.199414, 0.496314, 1.441319",\ + "0.054466, 0.105076, 0.199414, 0.496314, 1.441319",\ + "0.054754, 0.105076, 0.199414, 0.496314, 1.441319",\ + "0.055765, 0.105076, 0.199849, 0.496390, 1.441319",\ + "0.058856, 0.108680, 0.201816, 0.496464, 1.442721"); + } + + } /* end of arc otp_power_seq_i[0]_otp_power_seq_h_o[0]_una_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "380000.468750, 380000.531250, 380000.593750, 380000.781250, 380001.343750",\ + "380000.562500, 380000.625000, 380000.687500, 380000.875000, 380001.437500",\ + "380000.656250, 380000.718750, 380000.781250, 380000.968750, 380001.531250",\ + "380000.812500, 380000.875000, 380000.937500, 380001.125000, 380001.687500",\ + "380001.062500, 380001.125000, 380001.187500, 380001.375000, 380001.937500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.054414, 0.105305, 0.199651, 0.496372, 1.443908",\ + "0.054414, 0.105305, 0.199651, 0.496372, 1.443908",\ + "0.054414, 0.105305, 0.199651, 0.496372, 1.443908",\ + "0.054414, 0.105305, 0.199651, 0.496372, 1.443908",\ + "0.054414, 0.105305, 0.199651, 0.496372, 1.443908"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "380002.218750, 380002.312500, 380002.437500, 380002.906250, 380004.250000",\ + "380002.312500, 380002.406250, 380002.531250, 380003.000000, 380004.343750",\ + "380002.437500, 380002.531250, 380002.656250, 380003.125000, 380004.468750",\ + "380002.625000, 380002.718750, 380002.843750, 380003.312500, 380004.656250",\ + "380002.937500, 380003.031250, 380003.156250, 380003.625000, 380004.968750"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.073832, 0.193148, 0.452121, 1.259928, 3.713817",\ + "0.073832, 0.193148, 0.452121, 1.259928, 3.713817",\ + "0.073832, 0.193148, 0.452121, 1.259928, 3.713817",\ + "0.073832, 0.193148, 0.452121, 1.259928, 3.713817",\ + "0.073832, 0.193148, 0.452121, 1.259928, 3.713817"); + } + + } /* end of arc padmux2ast_i[4]_otp_power_seq_h_o[0]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "380000.468750, 380000.531250, 380000.593750, 380000.781250, 380001.343750",\ + "380000.562500, 380000.625000, 380000.687500, 380000.875000, 380001.437500",\ + "380000.625000, 380000.687500, 380000.750000, 380000.937500, 380001.500000",\ + "380000.781250, 380000.843750, 380000.906250, 380001.093750, 380001.656250",\ + "380001.000000, 380001.062500, 380001.125000, 380001.312500, 380001.875000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.054414, 0.105305, 0.199651, 0.496372, 1.443908",\ + "0.054414, 0.105305, 0.199651, 0.496372, 1.443908",\ + "0.054414, 0.105305, 0.199651, 0.496372, 1.443908",\ + "0.054414, 0.105305, 0.199651, 0.496372, 1.443908",\ + "0.054414, 0.105305, 0.199651, 0.496372, 1.443908"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "380002.218750, 380002.312500, 380002.437500, 380002.906250, 380004.250000",\ + "380002.312500, 380002.406250, 380002.531250, 380003.000000, 380004.343750",\ + "380002.406250, 380002.500000, 380002.625000, 380003.093750, 380004.437500",\ + "380002.593750, 380002.687500, 380002.812500, 380003.281250, 380004.625000",\ + "380002.843750, 380002.937500, 380003.062500, 380003.531250, 380004.875000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.004062, 0.015733, 0.040393, 0.117156, 0.350585"); + values ( "0.073832, 0.193148, 0.452121, 1.259928, 3.713817",\ + "0.073832, 0.193148, 0.452121, 1.259928, 3.713817",\ + "0.073832, 0.193148, 0.452121, 1.259928, 3.713817",\ + "0.073832, 0.193148, 0.452121, 1.259928, 3.713817",\ + "0.073832, 0.193148, 0.452121, 1.259928, 3.713817"); + } + + } /* end of arc padmux2ast_i[4]_otp_power_seq_h_o[0]_inv_min*/ + +} /* end of pin otp_power_seq_h_o[0] */ +} /* end of bus otp_power_seq_h_o */ + +pin("clk_src_sys_en_i") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.002156 ; + + /* Other user defined attributes. */ + original_pin : clk_src_sys_en_i; + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.200076, 0.146984, 0.107694, 0.090457, 0.087585",\ + "0.271588, 0.219415, 0.179927, 0.162045, 0.157577",\ + "0.363033, 0.310027, 0.270334, 0.252385, 0.247965",\ + "0.507780, 0.454308, 0.413646, 0.395357, 0.391106",\ + "0.811131, 0.757315, 0.714144, 0.694969, 0.691143"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.249331, 0.166333, 0.091045, 0.049669, 0.020498",\ + "0.324602, 0.241857, 0.166855, 0.126539, 0.100040",\ + "0.429418, 0.345854, 0.270221, 0.227986, 0.196782",\ + "0.605833, 0.521783, 0.445878, 0.397956, 0.350944",\ + "0.983325, 0.898854, 0.822917, 0.761117, 0.674795"); + } + + } /* end of arc clk_ast_ext_i_clk_src_sys_en_i_stupr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.096530, -0.053812, -0.018112, 0.032751, 0.135173",\ + "-0.166367, -0.123600, -0.088245, -0.037477, 0.065076",\ + "-0.251291, -0.208679, -0.174484, -0.124115, -0.021332",\ + "-0.373429, -0.330963, -0.299719, -0.251733, -0.152256",\ + "-0.620310, -0.578080, -0.553843, -0.512151, -0.422314"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.130907, -0.055165, 0.010770, 0.102409, 0.285045",\ + "-0.205839, -0.131127, -0.064641, 0.027653, 0.211502",\ + "-0.308157, -0.233980, -0.166224, -0.072248, 0.114884",\ + "-0.470591, -0.397956, -0.329423, -0.234665, -0.046227",\ + "-0.811364, -0.742478, -0.673228, -0.578223, -0.389923"); + } + + } /* end of arc clk_ast_ext_i_clk_src_sys_en_i_hldr*/ + +} /* end of pin clk_src_sys_en_i */ +bus ( clk_src_sys_jen_i ) { + + bus_type : BUS4_type6 ; + direction : input ; + +pin("clk_src_sys_jen_i[3]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000648 ; + + /* Other user defined attributes. */ + original_pin : clk_src_sys_jen_i[3]; + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.116868, 0.046289, 0.009123, -0.023399, -0.072101",\ + "0.130035, 0.060315, 0.022495, -0.010308, -0.059037",\ + "0.171476, 0.101933, 0.064692, 0.030941, -0.021156",\ + "0.330098, 0.263569, 0.222296, 0.181197, 0.112987",\ + "0.772581, 0.713134, 0.646673, 0.587289, 0.496722"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.164832, 0.206226, 0.283518, 0.436969, 0.781571",\ + "0.176771, 0.218346, 0.296254, 0.450000, 0.794722",\ + "0.219963, 0.260510, 0.337961, 0.490822, 0.833567",\ + "0.396019, 0.435268, 0.507744, 0.654408, 0.985407",\ + "0.931350, 0.951153, 1.007354, 1.144760, 1.468564"); + } + + } /* end of arc clk_ast_ext_i_clk_src_sys_jen_i[3]_stupr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.015255, 0.029491, 0.060650, 0.100375, 0.176530",\ + "-0.028040, 0.015174, 0.046352, 0.086407, 0.163478",\ + "-0.067695, -0.029062, 0.006032, 0.048125, 0.126390",\ + "-0.170614, -0.143005, -0.113142, -0.070129, 0.016864",\ + "-0.388675, -0.412783, -0.403332, -0.363654, -0.262218"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.058687, -0.133819, -0.215174, -0.342668, -0.608913",\ + "-0.070579, -0.145649, -0.226804, -0.353700, -0.618487",\ + "-0.113780, -0.187774, -0.267897, -0.394083, -0.658063",\ + "-0.257059, -0.339271, -0.416614, -0.539608, -0.797794",\ + "-0.613549, -0.743897, -0.832843, -0.961101, -1.220625"); + } + + } /* end of arc clk_ast_ext_i_clk_src_sys_jen_i[3]_hldr*/ + +} /* end of pin clk_src_sys_jen_i[3] */ + +pin("clk_src_sys_jen_i[2]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001189 ; + + /* Other user defined attributes. */ + original_pin : clk_src_sys_jen_i[2]; + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.200076, 0.146984, 0.107694, 0.090457, 0.087585",\ + "0.210849, 0.158775, 0.118789, 0.100962, 0.097230",\ + "0.247906, 0.195949, 0.156513, 0.138649, 0.134169",\ + "0.400793, 0.347442, 0.307665, 0.289688, 0.285288",\ + "0.811131, 0.757315, 0.714144, 0.694969, 0.691143"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.249331, 0.166333, 0.091045, 0.049669, 0.020498",\ + "0.258619, 0.175944, 0.100656, 0.060195, 0.033618",\ + "0.297457, 0.214925, 0.140086, 0.100267, 0.074986",\ + "0.472698, 0.388796, 0.312903, 0.269875, 0.236728",\ + "0.983325, 0.898854, 0.822917, 0.761117, 0.674795"); + } + + } /* end of arc clk_ast_ext_i_clk_src_sys_jen_i[2]_stupr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.096530, -0.053812, -0.018112, 0.032751, 0.135173",\ + "-0.107327, -0.064625, -0.028931, 0.021950, 0.124428",\ + "-0.144374, -0.101567, -0.065911, -0.015040, 0.087453",\ + "-0.286358, -0.243809, -0.210094, -0.159889, -0.057011",\ + "-0.620310, -0.578080, -0.553843, -0.512151, -0.422314"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.130907, -0.055165, 0.010770, 0.102409, 0.285045",\ + "-0.140562, -0.065848, 0.000282, 0.091894, 0.274227",\ + "-0.179341, -0.104491, -0.038333, 0.053525, 0.236523",\ + "-0.350407, -0.276449, -0.208169, -0.113499, 0.074989",\ + "-0.811364, -0.742478, -0.673228, -0.578223, -0.389923"); + } + + } /* end of arc clk_ast_ext_i_clk_src_sys_jen_i[2]_hldr*/ + +} /* end of pin clk_src_sys_jen_i[2] */ + +pin("clk_src_sys_jen_i[1]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001189 ; + + /* Other user defined attributes. */ + original_pin : clk_src_sys_jen_i[1]; + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.200076, 0.146984, 0.107694, 0.090457, 0.087585",\ + "0.210849, 0.158775, 0.118789, 0.100962, 0.097230",\ + "0.247906, 0.195949, 0.156513, 0.138649, 0.134169",\ + "0.400793, 0.347442, 0.307665, 0.289688, 0.285288",\ + "0.811131, 0.757315, 0.714144, 0.694969, 0.691143"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.249331, 0.166333, 0.091045, 0.049669, 0.020498",\ + "0.258619, 0.175944, 0.100656, 0.060195, 0.033618",\ + "0.297457, 0.214925, 0.140086, 0.100267, 0.074986",\ + "0.472698, 0.388796, 0.312903, 0.269875, 0.236728",\ + "0.983325, 0.898854, 0.822917, 0.761117, 0.674795"); + } + + } /* end of arc clk_ast_ext_i_clk_src_sys_jen_i[1]_stupr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.096530, -0.053812, -0.018112, 0.032751, 0.135173",\ + "-0.107327, -0.064625, -0.028931, 0.021950, 0.124428",\ + "-0.144374, -0.101567, -0.065911, -0.015040, 0.087453",\ + "-0.286358, -0.243809, -0.210094, -0.159889, -0.057011",\ + "-0.620310, -0.578080, -0.553843, -0.512151, -0.422314"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.130907, -0.055165, 0.010770, 0.102409, 0.285045",\ + "-0.140562, -0.065848, 0.000282, 0.091894, 0.274227",\ + "-0.179341, -0.104491, -0.038333, 0.053525, 0.236523",\ + "-0.350407, -0.276449, -0.208169, -0.113499, 0.074989",\ + "-0.811364, -0.742478, -0.673228, -0.578223, -0.389923"); + } + + } /* end of arc clk_ast_ext_i_clk_src_sys_jen_i[1]_hldr*/ + +} /* end of pin clk_src_sys_jen_i[1] */ + +pin("clk_src_sys_jen_i[0]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000648 ; + + /* Other user defined attributes. */ + original_pin : clk_src_sys_jen_i[0]; + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.116868, 0.046289, 0.009123, -0.023399, -0.072101",\ + "0.130035, 0.060315, 0.022495, -0.010308, -0.059037",\ + "0.171476, 0.101933, 0.064692, 0.030941, -0.021156",\ + "0.330098, 0.263569, 0.222296, 0.181197, 0.112987",\ + "0.772581, 0.713134, 0.646673, 0.587289, 0.496722"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.164832, 0.206226, 0.283518, 0.436969, 0.781571",\ + "0.176771, 0.218346, 0.296254, 0.450000, 0.794722",\ + "0.219963, 0.260510, 0.337961, 0.490822, 0.833567",\ + "0.396019, 0.435268, 0.507744, 0.654408, 0.985407",\ + "0.931350, 0.951153, 1.007354, 1.144760, 1.468564"); + } + + } /* end of arc clk_ast_ext_i_clk_src_sys_jen_i[0]_stupr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.015255, 0.029491, 0.060650, 0.100375, 0.176530",\ + "-0.028040, 0.015174, 0.046352, 0.086407, 0.163478",\ + "-0.067695, -0.029062, 0.006032, 0.048125, 0.126390",\ + "-0.170614, -0.143005, -0.113142, -0.070129, 0.016864",\ + "-0.388675, -0.412783, -0.403332, -0.363654, -0.262218"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.058687, -0.133819, -0.215174, -0.342668, -0.608913",\ + "-0.070579, -0.145649, -0.226804, -0.353700, -0.618487",\ + "-0.113780, -0.187774, -0.267897, -0.394083, -0.658063",\ + "-0.257059, -0.339271, -0.416614, -0.539608, -0.797794",\ + "-0.613549, -0.743897, -0.832843, -0.961101, -1.220625"); + } + + } /* end of arc clk_ast_ext_i_clk_src_sys_jen_i[0]_hldr*/ + +} /* end of pin clk_src_sys_jen_i[0] */ +} /* end of bus clk_src_sys_jen_i */ + +pin("clk_src_sys_o") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.069236 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.009042 ; + + /* Other user defined attributes. */ + original_pin : clk_src_sys_o; + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : falling_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "1.261778, 1.293108, 1.361483, 1.578982, 2.139170",\ + "1.261778, 1.293108, 1.361483, 1.578982, 2.139170",\ + "1.261778, 1.293108, 1.361483, 1.578982, 2.139170",\ + "1.261778, 1.293108, 1.361483, 1.578982, 2.139170",\ + "1.261778, 1.293108, 1.361483, 1.578982, 2.139170"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "1.205621, 1.248652, 1.342563, 1.639882, 2.402873",\ + "1.205621, 1.248652, 1.342563, 1.639882, 2.402873",\ + "1.205621, 1.248652, 1.342563, 1.639882, 2.402873",\ + "1.205621, 1.248652, 1.342563, 1.639882, 2.402873",\ + "1.205621, 1.248652, 1.342563, 1.639882, 2.402873"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "0.321380, 0.396761, 0.561274, 1.083463, 2.426166",\ + "0.321380, 0.396761, 0.561274, 1.083463, 2.426166",\ + "0.321380, 0.396761, 0.561274, 1.083463, 2.426166",\ + "0.321380, 0.396761, 0.561274, 1.083463, 2.426166",\ + "0.321380, 0.396761, 0.561274, 1.083463, 2.426166"); + } + + } /* end of arc clk_ast_ext_i_clk_src_sys_o_fedg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_ext_i" ; + timing_type : falling_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "1.260982, 1.292312, 1.360687, 1.578186, 2.138375",\ + "1.260982, 1.292312, 1.360687, 1.578186, 2.138375",\ + "1.260982, 1.292312, 1.360687, 1.578186, 2.138375",\ + "1.260982, 1.292312, 1.360687, 1.578186, 2.138375",\ + "1.260982, 1.292312, 1.360687, 1.578186, 2.138375"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "1.203406, 1.246437, 1.340349, 1.637667, 2.400659",\ + "1.203406, 1.246437, 1.340349, 1.637667, 2.400659",\ + "1.203406, 1.246437, 1.340349, 1.637667, 2.400659",\ + "1.203406, 1.246437, 1.340349, 1.637667, 2.400659",\ + "1.203406, 1.246437, 1.340349, 1.637667, 2.400659"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "0.321380, 0.396761, 0.561274, 1.083463, 2.426166",\ + "0.321380, 0.396761, 0.561274, 1.083463, 2.426166",\ + "0.321380, 0.396761, 0.561274, 1.083463, 2.426166",\ + "0.321380, 0.396761, 0.561274, 1.083463, 2.426166",\ + "0.321380, 0.396761, 0.561274, 1.083463, 2.426166"); + } + + } /* end of arc clk_ast_ext_i_clk_src_sys_o_fedg_min*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "1.165332, 1.196662, 1.265037, 1.482536, 2.042725",\ + "1.244902, 1.276232, 1.344607, 1.562106, 2.122294",\ + "1.324816, 1.356146, 1.424521, 1.642020, 2.202208",\ + "1.454541, 1.485872, 1.554247, 1.771746, 2.331934",\ + "1.654547, 1.685877, 1.754252, 1.971751, 2.531940"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "1.060530, 1.103561, 1.197473, 1.494792, 2.257783",\ + "1.149702, 1.192733, 1.286645, 1.583964, 2.346955",\ + "1.240645, 1.283676, 1.377588, 1.674906, 2.437898",\ + "1.395684, 1.438715, 1.532626, 1.829945, 2.592937",\ + "1.648565, 1.691596, 1.785508, 2.082827, 2.845818"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "0.321380, 0.396761, 0.561274, 1.083463, 2.426166",\ + "0.321380, 0.396761, 0.561274, 1.083463, 2.426166",\ + "0.321380, 0.396761, 0.561274, 1.083463, 2.426166",\ + "0.321380, 0.396761, 0.561274, 1.083463, 2.426166",\ + "0.321380, 0.396761, 0.561274, 1.083463, 2.426166"); + } + + } /* end of arc clk_ast_ext_i_clk_src_sys_o_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_ext_i" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "1.149655, 1.180985, 1.249360, 1.466859, 2.027048",\ + "1.229405, 1.260735, 1.329110, 1.546609, 2.106797",\ + "1.304807, 1.336138, 1.404513, 1.622012, 2.182200",\ + "1.424932, 1.456262, 1.524637, 1.742136, 2.302324",\ + "1.608101, 1.639431, 1.707806, 1.925305, 2.485494"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "1.052743, 1.095775, 1.189686, 1.487005, 2.249996",\ + "1.140331, 1.183362, 1.277273, 1.574592, 2.337583",\ + "1.227129, 1.270160, 1.364072, 1.661390, 2.424382",\ + "1.376376, 1.419407, 1.513318, 1.810637, 2.573628",\ + "1.620792, 1.663824, 1.757735, 2.055053, 2.818045"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "0.321380, 0.396761, 0.561274, 1.083463, 2.426166",\ + "0.321380, 0.396761, 0.561274, 1.083463, 2.426166",\ + "0.321380, 0.396761, 0.561274, 1.083463, 2.426166",\ + "0.321380, 0.396761, 0.561274, 1.083463, 2.426166",\ + "0.321380, 0.396761, 0.561274, 1.083463, 2.426166"); + } + + } /* end of arc clk_ast_ext_i_clk_src_sys_o_una_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "970011.625000, 970011.687500, 970011.750000, 970011.937500, 970012.500000",\ + "970011.750000, 970011.812500, 970011.875000, 970012.062500, 970012.625000",\ + "970011.875000, 970011.937500, 970012.000000, 970012.187500, 970012.750000",\ + "970011.875000, 970011.937500, 970012.000000, 970012.187500, 970012.750000",\ + "970012.250000, 970012.312500, 970012.375000, 970012.562500, 970013.125000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "0.268551, 0.328271, 0.458604, 0.872597, 1.937878",\ + "0.268551, 0.328271, 0.458604, 0.872597, 1.937878",\ + "0.268551, 0.328271, 0.458604, 0.872597, 1.937878",\ + "0.268551, 0.328271, 0.458604, 0.872597, 1.937878",\ + "0.268551, 0.328271, 0.458604, 0.872597, 1.937878"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "970010.187500, 970010.250000, 970010.375000, 970010.625000, 970011.437500",\ + "970010.312500, 970010.375000, 970010.500000, 970010.750000, 970011.562500",\ + "970010.437500, 970010.500000, 970010.625000, 970010.875000, 970011.687500",\ + "970010.437500, 970010.500000, 970010.625000, 970010.875000, 970011.687500",\ + "970010.812500, 970010.875000, 970011.000000, 970011.250000, 970012.062500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "0.319241, 0.394420, 0.558621, 1.081391, 2.429504",\ + "0.319241, 0.394420, 0.558621, 1.081391, 2.429504",\ + "0.319241, 0.394420, 0.558621, 1.081391, 2.429504",\ + "0.319241, 0.394420, 0.558621, 1.081391, 2.429504",\ + "0.319241, 0.394420, 0.558621, 1.081391, 2.429504"); + } + + } /* end of arc clk_ast_tlul_i_clk_src_sys_o_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "0.692745, 0.724133, 0.792634, 1.010340, 1.570735",\ + "0.780545, 0.811933, 0.880435, 1.098141, 1.658535",\ + "0.861845, 0.893233, 0.961734, 1.179440, 1.739835",\ + "0.919998, 0.951386, 1.019887, 1.237593, 1.797988",\ + "1.228719, 1.260107, 1.328608, 1.546314, 2.106709"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "0.771503, 0.814271, 0.907608, 1.204488, 1.969053",\ + "0.859377, 0.902145, 0.995481, 1.292362, 2.056926",\ + "0.953713, 0.996481, 1.089818, 1.386698, 2.151263",\ + "1.021471, 1.064239, 1.157575, 1.454456, 2.219020",\ + "1.382169, 1.424937, 1.518274, 1.815154, 2.579719"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "0.317826, 0.392935, 0.556854, 1.079626, 2.426166",\ + "0.317826, 0.392935, 0.556854, 1.079626, 2.426166",\ + "0.317826, 0.392935, 0.556854, 1.079626, 2.426166",\ + "0.317826, 0.392935, 0.556854, 1.079626, 2.426166",\ + "0.317826, 0.392935, 0.556854, 1.079626, 2.426166"); + } + + } /* end of arc clk_ast_tlul_i_clk_src_sys_o_redg_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "970007.000000, 970007.000000, 970007.062500, 970007.312500, 970007.875000",\ + "970007.125000, 970007.125000, 970007.187500, 970007.437500, 970008.000000",\ + "970007.125000, 970007.125000, 970007.187500, 970007.437500, 970008.000000",\ + "970007.375000, 970007.375000, 970007.437500, 970007.687500, 970008.250000",\ + "970007.625000, 970007.625000, 970007.687500, 970007.937500, 970008.500000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "0.268551, 0.328271, 0.458604, 0.872597, 1.937878",\ + "0.268551, 0.328271, 0.458604, 0.872597, 1.937878",\ + "0.268551, 0.328271, 0.458604, 0.872597, 1.937878",\ + "0.268551, 0.328271, 0.458604, 0.872597, 1.937878",\ + "0.268551, 0.328271, 0.458604, 0.872597, 1.937878"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "970010.062500, 970010.125000, 970010.250000, 970010.500000, 970011.312500",\ + "970010.187500, 970010.250000, 970010.375000, 970010.625000, 970011.437500",\ + "970010.312500, 970010.375000, 970010.500000, 970010.750000, 970011.562500",\ + "970010.562500, 970010.625000, 970010.750000, 970011.000000, 970011.812500",\ + "970010.812500, 970010.875000, 970011.000000, 970011.250000, 970012.062500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "0.319241, 0.394420, 0.558621, 1.081391, 2.429504",\ + "0.319241, 0.394420, 0.558621, 1.081391, 2.429504",\ + "0.319241, 0.394420, 0.558621, 1.081391, 2.429504",\ + "0.319241, 0.394420, 0.558621, 1.081391, 2.429504",\ + "0.319241, 0.394420, 0.558621, 1.081391, 2.429504"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_sys_o_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "380001.281250, 380001.312500, 380001.375000, 380001.593750, 380002.156250",\ + "380001.375000, 380001.406250, 380001.468750, 380001.687500, 380002.250000",\ + "380001.437500, 380001.468750, 380001.531250, 380001.750000, 380002.312500",\ + "380001.593750, 380001.625000, 380001.687500, 380001.906250, 380002.468750",\ + "380001.812500, 380001.843750, 380001.906250, 380002.125000, 380002.687500"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "380002.656250, 380002.718750, 380002.812500, 380003.093750, 380003.875000",\ + "380002.750000, 380002.812500, 380002.906250, 380003.187500, 380003.968750",\ + "380002.843750, 380002.906250, 380003.000000, 380003.281250, 380004.062500",\ + "380003.031250, 380003.093750, 380003.187500, 380003.468750, 380004.250000",\ + "380003.281250, 380003.343750, 380003.437500, 380003.718750, 380004.500000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "0.317826, 0.392935, 0.556854, 1.079626, 2.426166",\ + "0.317826, 0.392935, 0.556854, 1.079626, 2.426166",\ + "0.317826, 0.392935, 0.556854, 1.079626, 2.426166",\ + "0.317826, 0.392935, 0.556854, 1.079626, 2.426166",\ + "0.317826, 0.392935, 0.556854, 1.079626, 2.426166"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_sys_o_una_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "970008.250000, 970008.250000, 970008.375000, 970008.687500, 970009.437500",\ + "970008.375000, 970008.375000, 970008.500000, 970008.812500, 970009.562500",\ + "970008.375000, 970008.375000, 970008.500000, 970008.812500, 970009.562500",\ + "970008.625000, 970008.625000, 970008.750000, 970009.062500, 970009.812500",\ + "970008.875000, 970008.875000, 970009.000000, 970009.312500, 970010.062500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "0.319241, 0.394420, 0.558621, 1.081391, 2.429504",\ + "0.319241, 0.394420, 0.558621, 1.081391, 2.429504",\ + "0.319241, 0.394420, 0.558621, 1.081391, 2.429504",\ + "0.319241, 0.394420, 0.558621, 1.081391, 2.429504",\ + "0.319241, 0.394420, 0.558621, 1.081391, 2.429504"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "970011.500000, 970011.562500, 970011.625000, 970011.812500, 970012.375000",\ + "970011.625000, 970011.687500, 970011.750000, 970011.937500, 970012.500000",\ + "970011.750000, 970011.812500, 970011.875000, 970012.062500, 970012.625000",\ + "970012.000000, 970012.062500, 970012.125000, 970012.312500, 970012.875000",\ + "970012.250000, 970012.312500, 970012.375000, 970012.562500, 970013.125000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "0.268551, 0.328271, 0.458604, 0.872597, 1.937878",\ + "0.268551, 0.328271, 0.458604, 0.872597, 1.937878",\ + "0.268551, 0.328271, 0.458604, 0.872597, 1.937878",\ + "0.268551, 0.328271, 0.458604, 0.872597, 1.937878",\ + "0.268551, 0.328271, 0.458604, 0.872597, 1.937878"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_sys_o_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "380000.531250, 380000.562500, 380000.656250, 380000.937500, 380001.718750",\ + "380000.625000, 380000.656250, 380000.750000, 380001.031250, 380001.812500",\ + "380000.687500, 380000.718750, 380000.812500, 380001.093750, 380001.875000",\ + "380000.843750, 380000.875000, 380000.968750, 380001.250000, 380002.031250",\ + "380001.062500, 380001.093750, 380001.187500, 380001.468750, 380002.250000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "0.317826, 0.392935, 0.556854, 1.079626, 2.426166",\ + "0.317826, 0.392935, 0.556854, 1.079626, 2.426166",\ + "0.317826, 0.392935, 0.556854, 1.079626, 2.426166",\ + "0.317826, 0.392935, 0.556854, 1.079626, 2.426166",\ + "0.317826, 0.392935, 0.556854, 1.079626, 2.426166"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "380001.875000, 380001.906250, 380001.968750, 380002.187500, 380002.750000",\ + "380001.968750, 380002.000000, 380002.062500, 380002.281250, 380002.843750",\ + "380002.062500, 380002.093750, 380002.156250, 380002.375000, 380002.937500",\ + "380002.250000, 380002.281250, 380002.343750, 380002.562500, 380003.125000",\ + "380002.500000, 380002.531250, 380002.593750, 380002.812500, 380003.375000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_sys_o_inv_min*/ + + timing () { + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "590009.875000, 590009.937500, 590010.000000, 590010.187500, 590010.750000",\ + "590010.000000, 590010.062500, 590010.125000, 590010.312500, 590010.875000",\ + "590010.000000, 590010.062500, 590010.125000, 590010.312500, 590010.875000",\ + "590010.125000, 590010.187500, 590010.250000, 590010.437500, 590011.000000",\ + "590010.375000, 590010.437500, 590010.500000, 590010.687500, 590011.250000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "0.268551, 0.328271, 0.458604, 0.872597, 1.937878",\ + "0.268551, 0.328271, 0.458604, 0.872597, 1.937878",\ + "0.268551, 0.328271, 0.458604, 0.872597, 1.937878",\ + "0.268551, 0.328271, 0.458604, 0.872597, 1.937878",\ + "0.268551, 0.328271, 0.458604, 0.872597, 1.937878"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "590008.000000, 590008.000000, 590008.125000, 590008.437500, 590009.187500",\ + "590008.125000, 590008.125000, 590008.250000, 590008.562500, 590009.312500",\ + "590008.250000, 590008.250000, 590008.375000, 590008.687500, 590009.437500",\ + "590008.375000, 590008.375000, 590008.500000, 590008.812500, 590009.562500",\ + "590008.750000, 590008.750000, 590008.875000, 590009.187500, 590009.937500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "0.319235, 0.394420, 0.558621, 1.081391, 2.429503",\ + "0.319235, 0.394420, 0.558621, 1.081391, 2.429503",\ + "0.319235, 0.394420, 0.558621, 1.081391, 2.429503",\ + "0.319235, 0.394420, 0.558621, 1.081391, 2.429503",\ + "0.319235, 0.394420, 0.558621, 1.081391, 2.429503"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_sys_o_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "590008.625000, 590008.625000, 590008.687500, 590008.937500, 590009.500000",\ + "590008.625000, 590008.625000, 590008.687500, 590008.937500, 590009.500000",\ + "590008.750000, 590008.750000, 590008.812500, 590009.062500, 590009.625000",\ + "590008.875000, 590008.875000, 590008.937500, 590009.187500, 590009.750000",\ + "590009.125000, 590009.125000, 590009.187500, 590009.437500, 590010.000000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "590006.875000, 590006.937500, 590007.000000, 590007.312500, 590008.062500",\ + "590007.000000, 590007.062500, 590007.125000, 590007.437500, 590008.187500",\ + "590007.125000, 590007.187500, 590007.250000, 590007.562500, 590008.312500",\ + "590007.250000, 590007.312500, 590007.375000, 590007.687500, 590008.437500",\ + "590007.500000, 590007.562500, 590007.625000, 590007.937500, 590008.687500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "0.319235, 0.394241, 0.557935, 1.080416, 2.426166",\ + "0.319235, 0.394241, 0.557935, 1.080416, 2.426166",\ + "0.319235, 0.394241, 0.557935, 1.080416, 2.426166",\ + "0.319235, 0.394241, 0.557935, 1.080416, 2.426166",\ + "0.319235, 0.394241, 0.557935, 1.080416, 2.426166"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_sys_o_una_min*/ + + timing () { + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "590008.437500, 590008.500000, 590008.625000, 590008.875000, 590009.687500",\ + "590008.562500, 590008.625000, 590008.750000, 590009.000000, 590009.812500",\ + "590008.562500, 590008.625000, 590008.750000, 590009.000000, 590009.812500",\ + "590008.687500, 590008.750000, 590008.875000, 590009.125000, 590009.937500",\ + "590008.937500, 590009.000000, 590009.125000, 590009.375000, 590010.187500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "0.319235, 0.394420, 0.558621, 1.081391, 2.429503",\ + "0.319235, 0.394420, 0.558621, 1.081391, 2.429503",\ + "0.319235, 0.394420, 0.558621, 1.081391, 2.429503",\ + "0.319235, 0.394420, 0.558621, 1.081391, 2.429503",\ + "0.319235, 0.394420, 0.558621, 1.081391, 2.429503"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "590006.750000, 590006.750000, 590006.812500, 590007.062500, 590007.625000",\ + "590006.875000, 590006.875000, 590006.937500, 590007.187500, 590007.750000",\ + "590007.000000, 590007.000000, 590007.062500, 590007.312500, 590007.875000",\ + "590007.125000, 590007.125000, 590007.187500, 590007.437500, 590008.000000",\ + "590007.500000, 590007.500000, 590007.562500, 590007.812500, 590008.375000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "0.268551, 0.328271, 0.458604, 0.872597, 1.937878",\ + "0.268551, 0.328271, 0.458604, 0.872597, 1.937878",\ + "0.268551, 0.328271, 0.458604, 0.872597, 1.937878",\ + "0.268551, 0.328271, 0.458604, 0.872597, 1.937878",\ + "0.268551, 0.328271, 0.458604, 0.872597, 1.937878"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_sys_o_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "590008.437500, 590008.500000, 590008.625000, 590008.875000, 590009.687500",\ + "590008.437500, 590008.500000, 590008.625000, 590008.875000, 590009.687500",\ + "590008.562500, 590008.625000, 590008.750000, 590009.000000, 590009.812500",\ + "590008.687500, 590008.750000, 590008.875000, 590009.125000, 590009.937500",\ + "590008.937500, 590009.000000, 590009.125000, 590009.375000, 590010.187500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "0.319235, 0.394241, 0.557935, 1.080416, 2.426166",\ + "0.319235, 0.394241, 0.557935, 1.080416, 2.426166",\ + "0.319235, 0.394241, 0.557935, 1.080416, 2.426166",\ + "0.319235, 0.394241, 0.557935, 1.080416, 2.426166",\ + "0.319235, 0.394241, 0.557935, 1.080416, 2.426166"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "590006.750000, 590006.750000, 590006.812500, 590007.062500, 590007.625000",\ + "590006.875000, 590006.875000, 590006.937500, 590007.187500, 590007.750000",\ + "590007.000000, 590007.000000, 590007.062500, 590007.312500, 590007.875000",\ + "590007.125000, 590007.125000, 590007.187500, 590007.437500, 590008.000000",\ + "590007.375000, 590007.375000, 590007.437500, 590007.687500, 590008.250000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.009042, 0.011190, 0.015878, 0.030798, 0.069236"); + values ( "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571",\ + "0.266320, 0.325777, 0.455536, 0.867948, 1.929571"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_sys_o_inv_min*/ + +} /* end of pin clk_src_sys_o */ + +pin("clk_src_sys_val_o") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.090214 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002720 ; + + /* Other user defined attributes. */ + original_pin : clk_src_sys_val_o; + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "0.393375, 0.428628, 0.510890, 0.784879, 1.641015",\ + "0.480773, 0.516025, 0.598287, 0.872277, 1.728413",\ + "0.561620, 0.596872, 0.679134, 0.953123, 1.809259",\ + "0.699752, 0.735005, 0.817267, 1.091256, 1.947392",\ + "0.940296, 0.975559, 1.057603, 1.330256, 2.187617"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "0.090897, 0.157759, 0.313710, 0.838441, 2.477149",\ + "0.090897, 0.157759, 0.313710, 0.838441, 2.477149",\ + "0.090897, 0.157759, 0.313710, 0.838441, 2.477149",\ + "0.090897, 0.157759, 0.313710, 0.838441, 2.477149",\ + "0.090897, 0.157759, 0.313710, 0.838442, 2.477149"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "0.432455, 0.458343, 0.517176, 0.707295, 1.304954",\ + "0.519853, 0.545740, 0.604574, 0.794693, 1.392351",\ + "0.600665, 0.626553, 0.685387, 0.875506, 1.473164",\ + "0.738675, 0.764563, 0.823397, 1.013516, 1.611174",\ + "0.958865, 0.984753, 1.043586, 1.233705, 1.831364"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "0.074157, 0.115650, 0.215819, 0.564523, 1.651598",\ + "0.074157, 0.115650, 0.215819, 0.564523, 1.651598",\ + "0.074157, 0.115650, 0.215819, 0.564523, 1.651598",\ + "0.074157, 0.115650, 0.215819, 0.564523, 1.651598",\ + "0.074157, 0.115650, 0.215819, 0.564523, 1.651598"); + } + + } /* end of arc clk_ast_ext_i_clk_src_sys_val_o_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "0.266769, 0.302004, 0.384050, 0.657034, 1.516706",\ + "0.354958, 0.390193, 0.472239, 0.745222, 1.604895",\ + "0.442595, 0.477830, 0.559876, 0.832859, 1.692532",\ + "0.590863, 0.626097, 0.708144, 0.981127, 1.840799",\ + "0.826177, 0.861412, 0.943458, 1.216442, 2.076114"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "0.090757, 0.157284, 0.313129, 0.831079, 2.456895",\ + "0.090757, 0.157284, 0.313129, 0.831079, 2.456895",\ + "0.090757, 0.157284, 0.313129, 0.831079, 2.456895",\ + "0.090757, 0.157284, 0.313129, 0.831079, 2.456895",\ + "0.090757, 0.157284, 0.313129, 0.831079, 2.456895"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "0.303512, 0.329439, 0.388317, 0.578409, 1.176194",\ + "0.391701, 0.417628, 0.476506, 0.666598, 1.264383",\ + "0.479338, 0.505265, 0.564143, 0.754235, 1.352020",\ + "0.627605, 0.653533, 0.712411, 0.902503, 1.500287",\ + "0.853156, 0.879043, 0.937890, 1.128062, 1.724915"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "0.072021, 0.113734, 0.214400, 0.561002, 1.650535",\ + "0.072021, 0.113734, 0.214400, 0.561002, 1.650535",\ + "0.072021, 0.113734, 0.214400, 0.561002, 1.650535",\ + "0.072021, 0.113734, 0.214400, 0.561002, 1.650535",\ + "0.072021, 0.113734, 0.214400, 0.561002, 1.650535"); + } + + } /* end of arc clk_ast_ext_i_clk_src_sys_val_o_redg_min*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.091331, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.274613, 0.222555, 0.182645, 0.164813, 0.160978",\ + "0.311604, 0.259547, 0.219637, 0.201805, 0.197970",\ + "0.350063, 0.298005, 0.258095, 0.240263, 0.236428",\ + "0.426515, 0.374464, 0.334588, 0.316753, 0.312873",\ + "0.811131, 0.757315, 0.714144, 0.694969, 0.691143"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.074152, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.319192, 0.236521, 0.161241, 0.120791, 0.094238",\ + "0.350005, 0.267334, 0.192054, 0.151604, 0.125051",\ + "0.404336, 0.321669, 0.246404, 0.205976, 0.179465",\ + "0.493898, 0.411245, 0.336023, 0.295656, 0.269270",\ + "0.983325, 0.898854, 0.822917, 0.761117, 0.683170"); + } + + } /* end of arc clk_ast_ext_i_clk_src_sys_val_o_stupr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.090757, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.098980, -0.056266, -0.020568, 0.030300, 0.132735",\ + "-0.130504, -0.087736, -0.052066, -0.001191, 0.101296",\ + "-0.166367, -0.123600, -0.088245, -0.037477, 0.065076",\ + "-0.251291, -0.208679, -0.174484, -0.124115, -0.021332",\ + "-0.620310, -0.578080, -0.553843, -0.512151, -0.422314"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.072021, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.133098, -0.057590, 0.008390, 0.100023, 0.282590",\ + "-0.157464, -0.082691, -0.016549, 0.075171, 0.257794",\ + "-0.205839, -0.131127, -0.064641, 0.027653, 0.211502",\ + "-0.308157, -0.233980, -0.166224, -0.072248, 0.114884",\ + "-0.787774, -0.712937, -0.646782, -0.554947, -0.372013"); + } + + } /* end of arc clk_ast_ext_i_clk_src_sys_val_o_hldr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : recovery_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.091331, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.404032, 0.352558, 0.318430, 0.316711, 0.351792",\ + "0.438477, 0.387003, 0.352875, 0.351156, 0.386237",\ + "0.480582, 0.429108, 0.394981, 0.393261, 0.428342",\ + "0.577835, 0.526352, 0.492184, 0.490390, 0.525306",\ + "1.061708, 1.010135, 0.975535, 0.972941, 1.006095"); + } + + } /* end of arc clk_ast_ext_i_clk_src_sys_val_o_recrr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : removal_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.090757, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.316209, -0.269420, -0.233349, -0.183696, -0.085143",\ + "-0.350428, -0.303639, -0.267567, -0.217915, -0.119361",\ + "-0.392769, -0.345980, -0.309909, -0.260256, -0.161702",\ + "-0.490012, -0.443234, -0.407200, -0.357545, -0.258944",\ + "-0.973610, -0.926934, -0.891298, -0.841646, -0.742588"); + } + + } /* end of arc clk_ast_ext_i_clk_src_sys_val_o_remrr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "970010.375000, 970010.437500, 970010.500000, 970010.750000, 970011.625000",\ + "970010.500000, 970010.562500, 970010.625000, 970010.875000, 970011.750000",\ + "970010.625000, 970010.687500, 970010.750000, 970011.000000, 970011.875000",\ + "970010.625000, 970010.687500, 970010.750000, 970011.000000, 970011.875000",\ + "970011.000000, 970011.062500, 970011.125000, 970011.375000, 970012.250000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "0.091331, 0.157635, 0.313856, 0.840284, 2.469430",\ + "0.091331, 0.157635, 0.313856, 0.840284, 2.469430",\ + "0.091331, 0.157635, 0.313856, 0.840284, 2.469430",\ + "0.091331, 0.157635, 0.313856, 0.840284, 2.469430",\ + "0.091331, 0.157635, 0.313856, 0.840284, 2.469430"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "970010.375000, 970010.375000, 970010.437500, 970010.625000, 970011.250000",\ + "970010.500000, 970010.500000, 970010.562500, 970010.750000, 970011.375000",\ + "970010.625000, 970010.625000, 970010.687500, 970010.875000, 970011.500000",\ + "970010.625000, 970010.625000, 970010.687500, 970010.875000, 970011.500000",\ + "970011.000000, 970011.000000, 970011.062500, 970011.250000, 970011.875000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "0.074152, 0.115602, 0.215213, 0.563923, 1.651340",\ + "0.074152, 0.115602, 0.215213, 0.563923, 1.651340",\ + "0.074152, 0.115602, 0.215213, 0.563923, 1.651340",\ + "0.074152, 0.115602, 0.215213, 0.563923, 1.651340",\ + "0.074152, 0.115602, 0.215213, 0.563923, 1.651340"); + } + + } /* end of arc clk_ast_tlul_i_clk_src_sys_val_o_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "0.735494, 0.770750, 0.853002, 1.126914, 1.983374",\ + "0.823294, 0.858551, 0.940802, 1.214714, 2.071174",\ + "0.904594, 0.939850, 1.022102, 1.296013, 2.152474",\ + "0.962747, 0.998003, 1.080255, 1.354167, 2.210627",\ + "1.271467, 1.306724, 1.388975, 1.662887, 2.519347"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "0.090757, 0.157284, 0.313155, 0.830725, 2.460156",\ + "0.090757, 0.157284, 0.313155, 0.830725, 2.460156",\ + "0.090757, 0.157284, 0.313155, 0.830725, 2.460156",\ + "0.090757, 0.157284, 0.313155, 0.830725, 2.460156",\ + "0.090757, 0.157284, 0.313155, 0.830725, 2.460156"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "0.709749, 0.735637, 0.794488, 0.984673, 1.581583",\ + "0.797549, 0.823438, 0.882288, 1.072473, 1.669383",\ + "0.878849, 0.904737, 0.963588, 1.153773, 1.750682",\ + "0.937002, 0.962891, 1.021741, 1.211926, 1.808836",\ + "1.245723, 1.271611, 1.330462, 1.520647, 2.117556"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "0.072027, 0.113736, 0.214396, 0.560990, 1.651196",\ + "0.072027, 0.113736, 0.214396, 0.560990, 1.651196",\ + "0.072027, 0.113736, 0.214396, 0.560990, 1.651196",\ + "0.072027, 0.113736, 0.214396, 0.560990, 1.651196",\ + "0.072027, 0.113736, 0.214396, 0.560990, 1.651196"); + } + + } /* end of arc clk_ast_tlul_i_clk_src_sys_val_o_redg_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "970007.125000, 970007.187500, 970007.250000, 970007.562500, 970008.375000",\ + "970007.250000, 970007.312500, 970007.375000, 970007.687500, 970008.500000",\ + "970007.250000, 970007.312500, 970007.375000, 970007.687500, 970008.500000",\ + "970007.500000, 970007.562500, 970007.625000, 970007.937500, 970008.750000",\ + "970007.750000, 970007.812500, 970007.875000, 970008.187500, 970009.000000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "0.091331, 0.157635, 0.313856, 0.840284, 2.469430",\ + "0.091331, 0.157635, 0.313856, 0.840284, 2.469430",\ + "0.091331, 0.157635, 0.313856, 0.840284, 2.469430",\ + "0.091331, 0.157635, 0.313856, 0.840284, 2.469430",\ + "0.091331, 0.157635, 0.313856, 0.840284, 2.469430"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "970010.250000, 970010.250000, 970010.312500, 970010.500000, 970011.125000",\ + "970010.375000, 970010.375000, 970010.437500, 970010.625000, 970011.250000",\ + "970010.500000, 970010.500000, 970010.562500, 970010.750000, 970011.375000",\ + "970010.750000, 970010.750000, 970010.812500, 970011.000000, 970011.625000",\ + "970011.000000, 970011.000000, 970011.062500, 970011.250000, 970011.875000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "0.074152, 0.115602, 0.215213, 0.563923, 1.651340",\ + "0.074152, 0.115602, 0.215213, 0.563923, 1.651340",\ + "0.074152, 0.115602, 0.215213, 0.563923, 1.651340",\ + "0.074152, 0.115602, 0.215213, 0.563923, 1.651340",\ + "0.074152, 0.115602, 0.215213, 0.563923, 1.651340"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_sys_val_o_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "380000.500000, 380000.531250, 380000.593750, 380000.875000, 380001.750000",\ + "380000.593750, 380000.625000, 380000.687500, 380000.968750, 380001.843750",\ + "380000.656250, 380000.687500, 380000.750000, 380001.031250, 380001.906250",\ + "380000.812500, 380000.843750, 380000.906250, 380001.187500, 380002.062500",\ + "380001.031250, 380001.062500, 380001.125000, 380001.406250, 380002.281250"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "0.090757, 0.157284, 0.313155, 0.830725, 2.460156",\ + "0.090757, 0.157284, 0.313155, 0.830725, 2.460156",\ + "0.090757, 0.157284, 0.313155, 0.830725, 2.460156",\ + "0.090757, 0.157284, 0.313155, 0.830725, 2.460156",\ + "0.090757, 0.157284, 0.313155, 0.830725, 2.460156"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "380001.906250, 380001.937500, 380002.000000, 380002.187500, 380002.781250",\ + "380002.000000, 380002.031250, 380002.093750, 380002.281250, 380002.875000",\ + "380002.093750, 380002.125000, 380002.187500, 380002.375000, 380002.968750",\ + "380002.281250, 380002.312500, 380002.375000, 380002.562500, 380003.156250",\ + "380002.531250, 380002.562500, 380002.625000, 380002.812500, 380003.406250"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "0.072027, 0.113736, 0.214396, 0.560990, 1.651196",\ + "0.072027, 0.113736, 0.214396, 0.560990, 1.651196",\ + "0.072027, 0.113736, 0.214396, 0.560990, 1.651196",\ + "0.072027, 0.113736, 0.214396, 0.560990, 1.651196",\ + "0.072027, 0.113736, 0.214396, 0.560990, 1.651196"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_sys_val_o_una_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "970007.187500, 970007.187500, 970007.250000, 970007.437500, 970008.062500",\ + "970007.312500, 970007.312500, 970007.375000, 970007.562500, 970008.187500",\ + "970007.312500, 970007.312500, 970007.375000, 970007.562500, 970008.187500",\ + "970007.562500, 970007.562500, 970007.625000, 970007.812500, 970008.437500",\ + "970007.812500, 970007.812500, 970007.875000, 970008.062500, 970008.687500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "0.074152, 0.115602, 0.215213, 0.563923, 1.651340",\ + "0.074152, 0.115602, 0.215213, 0.563923, 1.651340",\ + "0.074152, 0.115602, 0.215213, 0.563923, 1.651340",\ + "0.074152, 0.115602, 0.215213, 0.563923, 1.651340",\ + "0.074152, 0.115602, 0.215213, 0.563923, 1.651340"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "970010.250000, 970010.312500, 970010.375000, 970010.625000, 970011.500000",\ + "970010.375000, 970010.437500, 970010.500000, 970010.750000, 970011.625000",\ + "970010.500000, 970010.562500, 970010.625000, 970010.875000, 970011.750000",\ + "970010.750000, 970010.812500, 970010.875000, 970011.125000, 970012.000000",\ + "970011.000000, 970011.062500, 970011.125000, 970011.375000, 970012.250000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "0.091331, 0.157635, 0.313856, 0.840284, 2.469430",\ + "0.091331, 0.157635, 0.313856, 0.840284, 2.469430",\ + "0.091331, 0.157635, 0.313856, 0.840284, 2.469430",\ + "0.091331, 0.157635, 0.313856, 0.840284, 2.469430",\ + "0.091331, 0.157635, 0.313856, 0.840284, 2.469430"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_sys_val_o_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "380000.531250, 380000.562500, 380000.625000, 380000.812500, 380001.406250",\ + "380000.625000, 380000.656250, 380000.718750, 380000.906250, 380001.500000",\ + "380000.687500, 380000.718750, 380000.781250, 380000.968750, 380001.562500",\ + "380000.843750, 380000.875000, 380000.937500, 380001.125000, 380001.718750",\ + "380001.062500, 380001.093750, 380001.156250, 380001.343750, 380001.937500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "0.072027, 0.113736, 0.214396, 0.560990, 1.651196",\ + "0.072027, 0.113736, 0.214396, 0.560990, 1.651196",\ + "0.072027, 0.113736, 0.214396, 0.560990, 1.651196",\ + "0.072027, 0.113736, 0.214396, 0.560990, 1.651196",\ + "0.072027, 0.113736, 0.214396, 0.560990, 1.651196"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "380001.937500, 380001.968750, 380002.062500, 380002.343750, 380003.187500",\ + "380002.031250, 380002.062500, 380002.156250, 380002.437500, 380003.281250",\ + "380002.125000, 380002.156250, 380002.250000, 380002.531250, 380003.375000",\ + "380002.312500, 380002.343750, 380002.437500, 380002.718750, 380003.562500",\ + "380002.562500, 380002.593750, 380002.687500, 380002.968750, 380003.812500"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "0.090757, 0.157284, 0.313155, 0.830725, 2.460156",\ + "0.090757, 0.157284, 0.313155, 0.830725, 2.460156",\ + "0.090757, 0.157284, 0.313155, 0.830725, 2.460156",\ + "0.090757, 0.157284, 0.313155, 0.830725, 2.460156",\ + "0.090757, 0.157284, 0.313155, 0.830725, 2.460156"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_sys_val_o_inv_min*/ + + timing () { + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "590008.625000, 590008.687500, 590008.750000, 590009.000000, 590009.875000",\ + "590008.750000, 590008.812500, 590008.875000, 590009.125000, 590010.000000",\ + "590008.750000, 590008.812500, 590008.875000, 590009.125000, 590010.000000",\ + "590008.875000, 590008.937500, 590009.000000, 590009.250000, 590010.125000",\ + "590009.125000, 590009.187500, 590009.250000, 590009.500000, 590010.375000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "0.091331, 0.157635, 0.313861, 0.840307, 2.469430",\ + "0.091331, 0.157635, 0.313861, 0.840307, 2.469430",\ + "0.091331, 0.157635, 0.313861, 0.840307, 2.469430",\ + "0.091331, 0.157635, 0.313861, 0.840307, 2.469430",\ + "0.091331, 0.157635, 0.313861, 0.840307, 2.469430"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "590006.937500, 590006.937500, 590007.000000, 590007.187500, 590007.812500",\ + "590007.062500, 590007.062500, 590007.125000, 590007.312500, 590007.937500",\ + "590007.187500, 590007.187500, 590007.250000, 590007.437500, 590008.062500",\ + "590007.312500, 590007.312500, 590007.375000, 590007.562500, 590008.187500",\ + "590007.687500, 590007.687500, 590007.750000, 590007.937500, 590008.562500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "0.074152, 0.115602, 0.215213, 0.563930, 1.651340",\ + "0.074152, 0.115602, 0.215213, 0.563930, 1.651340",\ + "0.074152, 0.115602, 0.215213, 0.563930, 1.651340",\ + "0.074152, 0.115602, 0.215213, 0.563930, 1.651340",\ + "0.074152, 0.115602, 0.215213, 0.563930, 1.651340"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_sys_val_o_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "590008.437500, 590008.437500, 590008.562500, 590008.812500, 590009.687500",\ + "590008.437500, 590008.437500, 590008.562500, 590008.812500, 590009.687500",\ + "590008.562500, 590008.562500, 590008.687500, 590008.937500, 590009.812500",\ + "590008.687500, 590008.687500, 590008.812500, 590009.062500, 590009.937500",\ + "590008.937500, 590008.937500, 590009.062500, 590009.312500, 590010.187500"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "0.090757, 0.157286, 0.312487, 0.829843, 2.465812",\ + "0.090757, 0.157286, 0.312487, 0.829843, 2.465812",\ + "0.090757, 0.157286, 0.312487, 0.829843, 2.465812",\ + "0.090757, 0.157286, 0.312487, 0.829843, 2.465812",\ + "0.090757, 0.157286, 0.312487, 0.829843, 2.465812"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "590006.750000, 590006.812500, 590006.875000, 590007.062500, 590007.625000",\ + "590006.875000, 590006.937500, 590007.000000, 590007.187500, 590007.750000",\ + "590007.000000, 590007.062500, 590007.125000, 590007.312500, 590007.875000",\ + "590007.125000, 590007.187500, 590007.250000, 590007.437500, 590008.000000",\ + "590007.375000, 590007.437500, 590007.500000, 590007.687500, 590008.250000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "0.072111, 0.113800, 0.214396, 0.559011, 1.650020",\ + "0.072111, 0.113800, 0.214396, 0.559011, 1.650020",\ + "0.072111, 0.113800, 0.214396, 0.559011, 1.650020",\ + "0.072111, 0.113800, 0.214396, 0.559011, 1.650020",\ + "0.072111, 0.113800, 0.214396, 0.559011, 1.650020"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_sys_val_o_una_min*/ + + timing () { + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "590008.625000, 590008.625000, 590008.687500, 590008.875000, 590009.500000",\ + "590008.750000, 590008.750000, 590008.812500, 590009.000000, 590009.625000",\ + "590008.750000, 590008.750000, 590008.812500, 590009.000000, 590009.625000",\ + "590008.875000, 590008.875000, 590008.937500, 590009.125000, 590009.750000",\ + "590009.125000, 590009.125000, 590009.187500, 590009.375000, 590010.000000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "0.074152, 0.115602, 0.215213, 0.563930, 1.651340",\ + "0.074152, 0.115602, 0.215213, 0.563930, 1.651340",\ + "0.074152, 0.115602, 0.215213, 0.563930, 1.651340",\ + "0.074152, 0.115602, 0.215213, 0.563930, 1.651340",\ + "0.074152, 0.115602, 0.215213, 0.563930, 1.651340"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "590006.875000, 590006.937500, 590007.000000, 590007.312500, 590008.125000",\ + "590007.000000, 590007.062500, 590007.125000, 590007.437500, 590008.250000",\ + "590007.125000, 590007.187500, 590007.250000, 590007.562500, 590008.375000",\ + "590007.250000, 590007.312500, 590007.375000, 590007.687500, 590008.500000",\ + "590007.625000, 590007.687500, 590007.750000, 590008.062500, 590008.875000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "0.091331, 0.157635, 0.313861, 0.840307, 2.469430",\ + "0.091331, 0.157635, 0.313861, 0.840307, 2.469430",\ + "0.091331, 0.157635, 0.313861, 0.840307, 2.469430",\ + "0.091331, 0.157635, 0.313861, 0.840307, 2.469430",\ + "0.091331, 0.157635, 0.313861, 0.840307, 2.469430"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_sys_val_o_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "590008.625000, 590008.625000, 590008.687500, 590008.875000, 590009.500000",\ + "590008.625000, 590008.625000, 590008.687500, 590008.875000, 590009.500000",\ + "590008.750000, 590008.750000, 590008.812500, 590009.000000, 590009.625000",\ + "590008.875000, 590008.875000, 590008.937500, 590009.125000, 590009.750000",\ + "590009.125000, 590009.125000, 590009.187500, 590009.375000, 590010.000000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "0.072111, 0.113800, 0.214396, 0.559011, 1.650020",\ + "0.072111, 0.113800, 0.214396, 0.559011, 1.650020",\ + "0.072111, 0.113800, 0.214396, 0.559011, 1.650020",\ + "0.072111, 0.113800, 0.214396, 0.559011, 1.650020",\ + "0.072111, 0.113800, 0.214396, 0.559011, 1.650020"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "590006.875000, 590006.937500, 590007.000000, 590007.312500, 590008.125000",\ + "590007.000000, 590007.062500, 590007.125000, 590007.437500, 590008.250000",\ + "590007.125000, 590007.187500, 590007.250000, 590007.562500, 590008.375000",\ + "590007.250000, 590007.312500, 590007.375000, 590007.687500, 590008.500000",\ + "590007.500000, 590007.562500, 590007.625000, 590007.937500, 590008.750000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002720, 0.005181, 0.010916, 0.030014, 0.090214"); + values ( "0.090757, 0.157286, 0.312487, 0.829843, 2.465812",\ + "0.090757, 0.157286, 0.312487, 0.829843, 2.465812",\ + "0.090757, 0.157286, 0.312487, 0.829843, 2.465812",\ + "0.090757, 0.157286, 0.312487, 0.829843, 2.465812",\ + "0.090757, 0.157286, 0.312487, 0.829843, 2.465812"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_sys_val_o_inv_min*/ + +} /* end of pin clk_src_sys_val_o */ + +pin("clk_src_aon_o") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 4.852190 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.018084 ; + + /* Other user defined attributes. */ + original_pin : clk_src_aon_o; + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "0.829798, 0.861406, 1.030187, 1.471304, 2.111221",\ + "0.918104, 0.949713, 1.118494, 1.559610, 2.199528",\ + "1.006314, 1.037922, 1.206704, 1.647820, 2.287737",\ + "1.155623, 1.187232, 1.356013, 1.797129, 2.437046",\ + "1.394957, 1.426565, 1.595346, 2.036462, 2.676380"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "0.018689, 0.076907, 0.397582, 1.240182, 2.462523",\ + "0.018689, 0.076907, 0.397582, 1.240182, 2.462523",\ + "0.018689, 0.076907, 0.397582, 1.240182, 2.462523",\ + "0.018689, 0.076907, 0.397582, 1.240182, 2.462523",\ + "0.018689, 0.076907, 0.397582, 1.240182, 2.462523"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "0.883488, 0.912350, 1.061245, 1.451119, 2.016701",\ + "0.970887, 0.999749, 1.148644, 1.538518, 2.104100",\ + "1.051701, 1.080563, 1.229459, 1.619333, 2.184914",\ + "1.189711, 1.218573, 1.367469, 1.757343, 2.322925",\ + "1.410200, 1.439062, 1.587957, 1.977831, 2.543413"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "0.017866, 0.065807, 0.337647, 1.043323, 2.067033",\ + "0.017866, 0.065807, 0.337647, 1.043323, 2.067033",\ + "0.017866, 0.065807, 0.337647, 1.043323, 2.067033",\ + "0.017866, 0.065807, 0.337647, 1.043323, 2.067033",\ + "0.017866, 0.065807, 0.337647, 1.043323, 2.067033"); + } + + } /* end of arc clk_ast_ext_i_clk_src_aon_o_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "0.829665, 0.861273, 1.030054, 1.471171, 2.111088",\ + "0.917971, 0.949579, 1.118361, 1.559477, 2.199394",\ + "1.006180, 1.037788, 1.206569, 1.647686, 2.287603",\ + "1.155489, 1.187097, 1.355879, 1.796995, 2.436912",\ + "1.394823, 1.426431, 1.595212, 2.036328, 2.676246"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "0.018689, 0.076907, 0.397582, 1.240182, 2.462523",\ + "0.018689, 0.076907, 0.397582, 1.240182, 2.462523",\ + "0.018689, 0.076907, 0.397582, 1.240182, 2.462523",\ + "0.018689, 0.076907, 0.397582, 1.240182, 2.462523",\ + "0.018689, 0.076907, 0.397582, 1.240182, 2.462523"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "0.882434, 0.911296, 1.060191, 1.450065, 2.015647",\ + "0.969833, 0.998695, 1.147590, 1.537464, 2.103046",\ + "1.050646, 1.079508, 1.228404, 1.618278, 2.183859",\ + "1.188651, 1.217513, 1.366409, 1.756283, 2.321865",\ + "1.409136, 1.437999, 1.586894, 1.976768, 2.542350"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "0.017866, 0.065807, 0.337647, 1.043323, 2.067033",\ + "0.017866, 0.065807, 0.337647, 1.043323, 2.067033",\ + "0.017866, 0.065807, 0.337647, 1.043323, 2.067033",\ + "0.017866, 0.065807, 0.337647, 1.043323, 2.067033",\ + "0.017866, 0.065807, 0.337647, 1.043323, 2.067033"); + } + + } /* end of arc clk_ast_ext_i_clk_src_aon_o_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "970010.562500, 970010.562500, 970010.750000, 970011.187500, 970011.812500",\ + "970010.687500, 970010.687500, 970010.875000, 970011.312500, 970011.937500",\ + "970010.812500, 970010.812500, 970011.000000, 970011.437500, 970012.062500",\ + "970010.812500, 970010.812500, 970011.000000, 970011.437500, 970012.062500",\ + "970011.187500, 970011.187500, 970011.375000, 970011.812500, 970012.437500"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "0.018690, 0.076907, 0.397572, 1.240181, 2.462535",\ + "0.018690, 0.076907, 0.397572, 1.240181, 2.462535",\ + "0.018690, 0.076907, 0.397572, 1.240181, 2.462535",\ + "0.018690, 0.076907, 0.397572, 1.240181, 2.462535",\ + "0.018690, 0.076907, 0.397572, 1.240181, 2.462535"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "970010.375000, 970010.375000, 970010.562500, 970010.937500, 970011.500000",\ + "970010.500000, 970010.500000, 970010.687500, 970011.062500, 970011.625000",\ + "970010.625000, 970010.625000, 970010.812500, 970011.187500, 970011.750000",\ + "970010.625000, 970010.625000, 970010.812500, 970011.187500, 970011.750000",\ + "970011.000000, 970011.000000, 970011.187500, 970011.562500, 970012.125000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "0.017866, 0.065807, 0.337660, 1.043334, 2.067039",\ + "0.017866, 0.065807, 0.337660, 1.043334, 2.067039",\ + "0.017866, 0.065807, 0.337660, 1.043334, 2.067039",\ + "0.017866, 0.065807, 0.337660, 1.043334, 2.067039",\ + "0.017866, 0.065807, 0.337660, 1.043334, 2.067039"); + } + + } /* end of arc clk_ast_tlul_i_clk_src_aon_o_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "0.860464, 0.892073, 1.060854, 1.501970, 2.141887",\ + "0.948265, 0.979873, 1.148654, 1.589771, 2.229688",\ + "1.029564, 1.061172, 1.229954, 1.671070, 2.310987",\ + "1.087717, 1.119326, 1.288107, 1.729223, 2.369140",\ + "1.396438, 1.428046, 1.596828, 2.037944, 2.677861"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "0.018689, 0.076907, 0.397582, 1.240182, 2.462523",\ + "0.018689, 0.076907, 0.397582, 1.240182, 2.462523",\ + "0.018689, 0.076907, 0.397582, 1.240182, 2.462523",\ + "0.018689, 0.076907, 0.397582, 1.240182, 2.462523",\ + "0.018689, 0.076907, 0.397582, 1.240182, 2.462523"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "0.970766, 0.999628, 1.148520, 1.538388, 2.103961",\ + "1.058640, 1.087502, 1.236394, 1.626262, 2.191835",\ + "1.152976, 1.181838, 1.330730, 1.720598, 2.286171",\ + "1.220734, 1.249595, 1.398488, 1.788356, 2.353929",\ + "1.581432, 1.610294, 1.759186, 2.149055, 2.714628"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "0.017866, 0.065808, 0.337669, 1.043341, 2.067043",\ + "0.017866, 0.065808, 0.337669, 1.043341, 2.067043",\ + "0.017866, 0.065808, 0.337669, 1.043341, 2.067043",\ + "0.017866, 0.065808, 0.337669, 1.043341, 2.067043",\ + "0.017866, 0.065808, 0.337669, 1.043341, 2.067043"); + } + + } /* end of arc clk_ast_tlul_i_clk_src_aon_o_redg_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "970007.187500, 970007.187500, 970007.375000, 970007.812500, 970008.437500",\ + "970007.312500, 970007.312500, 970007.500000, 970007.937500, 970008.562500",\ + "970007.312500, 970007.312500, 970007.500000, 970007.937500, 970008.562500",\ + "970007.562500, 970007.562500, 970007.750000, 970008.187500, 970008.812500",\ + "970007.812500, 970007.812500, 970008.000000, 970008.437500, 970009.062500"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "0.018690, 0.076907, 0.397572, 1.240181, 2.462535",\ + "0.018690, 0.076907, 0.397572, 1.240181, 2.462535",\ + "0.018690, 0.076907, 0.397572, 1.240181, 2.462535",\ + "0.018690, 0.076907, 0.397572, 1.240181, 2.462535",\ + "0.018690, 0.076907, 0.397572, 1.240181, 2.462535"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "970010.250000, 970010.250000, 970010.437500, 970010.812500, 970011.375000",\ + "970010.375000, 970010.375000, 970010.562500, 970010.937500, 970011.500000",\ + "970010.500000, 970010.500000, 970010.687500, 970011.062500, 970011.625000",\ + "970010.750000, 970010.750000, 970010.937500, 970011.312500, 970011.875000",\ + "970011.000000, 970011.000000, 970011.187500, 970011.562500, 970012.125000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "0.017866, 0.065807, 0.337660, 1.043334, 2.067039",\ + "0.017866, 0.065807, 0.337660, 1.043334, 2.067039",\ + "0.017866, 0.065807, 0.337660, 1.043334, 2.067039",\ + "0.017866, 0.065807, 0.337660, 1.043334, 2.067039",\ + "0.017866, 0.065807, 0.337660, 1.043334, 2.067039"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_aon_o_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "380008.531250, 380008.562500, 380008.750000, 380009.187500, 380009.812500",\ + "380008.625000, 380008.656250, 380008.843750, 380009.281250, 380009.906250",\ + "380008.687500, 380008.718750, 380008.906250, 380009.343750, 380009.968750",\ + "380008.843750, 380008.875000, 380009.062500, 380009.500000, 380010.125000",\ + "380009.062500, 380009.093750, 380009.281250, 380009.718750, 380010.343750"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "0.018689, 0.076907, 0.397582, 1.240182, 2.462523",\ + "0.018689, 0.076907, 0.397582, 1.240182, 2.462523",\ + "0.018689, 0.076907, 0.397582, 1.240182, 2.462523",\ + "0.018689, 0.076907, 0.397582, 1.240182, 2.462523",\ + "0.018689, 0.076907, 0.397582, 1.240182, 2.462523"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "380007.906250, 380007.906250, 380008.062500, 380008.468750, 380009.031250",\ + "380008.000000, 380008.000000, 380008.156250, 380008.562500, 380009.125000",\ + "380008.093750, 380008.093750, 380008.250000, 380008.656250, 380009.218750",\ + "380008.281250, 380008.281250, 380008.437500, 380008.843750, 380009.406250",\ + "380008.531250, 380008.531250, 380008.687500, 380009.093750, 380009.656250"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "0.017866, 0.065808, 0.337669, 1.043341, 2.067043",\ + "0.017866, 0.065808, 0.337669, 1.043341, 2.067043",\ + "0.017866, 0.065808, 0.337669, 1.043341, 2.067043",\ + "0.017866, 0.065808, 0.337669, 1.043341, 2.067043",\ + "0.017866, 0.065808, 0.337669, 1.043341, 2.067043"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_aon_o_una_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "970007.437500, 970007.437500, 970007.625000, 970008.000000, 970008.562500",\ + "970007.562500, 970007.562500, 970007.750000, 970008.125000, 970008.687500",\ + "970007.562500, 970007.562500, 970007.750000, 970008.125000, 970008.687500",\ + "970007.812500, 970007.812500, 970008.000000, 970008.375000, 970008.937500",\ + "970008.062500, 970008.062500, 970008.250000, 970008.625000, 970009.187500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "0.017866, 0.065807, 0.337660, 1.043334, 2.067039",\ + "0.017866, 0.065807, 0.337660, 1.043334, 2.067039",\ + "0.017866, 0.065807, 0.337660, 1.043334, 2.067039",\ + "0.017866, 0.065807, 0.337660, 1.043334, 2.067039",\ + "0.017866, 0.065807, 0.337660, 1.043334, 2.067039"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "970010.437500, 970010.437500, 970010.625000, 970011.062500, 970011.687500",\ + "970010.562500, 970010.562500, 970010.750000, 970011.187500, 970011.812500",\ + "970010.687500, 970010.687500, 970010.875000, 970011.312500, 970011.937500",\ + "970010.937500, 970010.937500, 970011.125000, 970011.562500, 970012.187500",\ + "970011.187500, 970011.187500, 970011.375000, 970011.812500, 970012.437500"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "0.018690, 0.076907, 0.397572, 1.240181, 2.462535",\ + "0.018690, 0.076907, 0.397572, 1.240181, 2.462535",\ + "0.018690, 0.076907, 0.397572, 1.240181, 2.462535",\ + "0.018690, 0.076907, 0.397572, 1.240181, 2.462535",\ + "0.018690, 0.076907, 0.397572, 1.240181, 2.462535"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_aon_o_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "380000.750000, 380000.750000, 380000.906250, 380001.312500, 380001.875000",\ + "380000.843750, 380000.843750, 380001.000000, 380001.406250, 380001.968750",\ + "380000.906250, 380000.906250, 380001.062500, 380001.468750, 380002.031250",\ + "380001.062500, 380001.062500, 380001.218750, 380001.625000, 380002.187500",\ + "380001.281250, 380001.281250, 380001.437500, 380001.843750, 380002.406250"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "0.017866, 0.065808, 0.337669, 1.043341, 2.067043",\ + "0.017866, 0.065808, 0.337669, 1.043341, 2.067043",\ + "0.017866, 0.065808, 0.337669, 1.043341, 2.067043",\ + "0.017866, 0.065808, 0.337669, 1.043341, 2.067043",\ + "0.017866, 0.065808, 0.337669, 1.043341, 2.067043"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "380002.031250, 380002.062500, 380002.250000, 380002.687500, 380003.312500",\ + "380002.125000, 380002.156250, 380002.343750, 380002.781250, 380003.406250",\ + "380002.218750, 380002.250000, 380002.437500, 380002.875000, 380003.500000",\ + "380002.406250, 380002.437500, 380002.625000, 380003.062500, 380003.687500",\ + "380002.656250, 380002.687500, 380002.875000, 380003.312500, 380003.937500"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "0.018689, 0.076907, 0.397582, 1.240182, 2.462523",\ + "0.018689, 0.076907, 0.397582, 1.240182, 2.462523",\ + "0.018689, 0.076907, 0.397582, 1.240182, 2.462523",\ + "0.018689, 0.076907, 0.397582, 1.240182, 2.462523",\ + "0.018689, 0.076907, 0.397582, 1.240182, 2.462523"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_aon_o_inv_min*/ + + timing () { + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "590008.812500, 590008.812500, 590009.000000, 590009.437500, 590010.062500",\ + "590008.937500, 590008.937500, 590009.125000, 590009.562500, 590010.187500",\ + "590008.937500, 590008.937500, 590009.125000, 590009.562500, 590010.187500",\ + "590009.062500, 590009.062500, 590009.250000, 590009.687500, 590010.312500",\ + "590009.312500, 590009.312500, 590009.500000, 590009.937500, 590010.562500"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "0.018690, 0.076907, 0.397572, 1.240181, 2.462535",\ + "0.018690, 0.076907, 0.397572, 1.240181, 2.462535",\ + "0.018690, 0.076907, 0.397572, 1.240181, 2.462535",\ + "0.018690, 0.076907, 0.397572, 1.240181, 2.462535",\ + "0.018690, 0.076907, 0.397572, 1.240181, 2.462535"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "590007.187500, 590007.187500, 590007.375000, 590007.750000, 590008.312500",\ + "590007.312500, 590007.312500, 590007.500000, 590007.875000, 590008.437500",\ + "590007.437500, 590007.437500, 590007.625000, 590008.000000, 590008.562500",\ + "590007.562500, 590007.562500, 590007.750000, 590008.125000, 590008.687500",\ + "590007.937500, 590007.937500, 590008.125000, 590008.500000, 590009.062500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "0.017866, 0.065807, 0.337660, 1.043334, 2.067039",\ + "0.017866, 0.065807, 0.337660, 1.043334, 2.067039",\ + "0.017866, 0.065807, 0.337660, 1.043334, 2.067039",\ + "0.017866, 0.065807, 0.337660, 1.043334, 2.067039",\ + "0.017866, 0.065807, 0.337660, 1.043334, 2.067039"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_aon_o_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "590008.812500, 590008.812500, 590009.000000, 590009.437500, 590010.062500",\ + "590008.812500, 590008.812500, 590009.000000, 590009.437500, 590010.062500",\ + "590008.937500, 590008.937500, 590009.125000, 590009.562500, 590010.187500",\ + "590009.062500, 590009.062500, 590009.250000, 590009.687500, 590010.312500",\ + "590009.312500, 590009.312500, 590009.500000, 590009.937500, 590010.562500"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "0.018689, 0.076907, 0.397577, 1.240181, 2.462529",\ + "0.018689, 0.076907, 0.397577, 1.240181, 2.462529",\ + "0.018689, 0.076907, 0.397577, 1.240181, 2.462529",\ + "0.018689, 0.076907, 0.397577, 1.240181, 2.462529",\ + "0.018689, 0.076907, 0.397577, 1.240181, 2.462529"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "590007.187500, 590007.187500, 590007.375000, 590007.750000, 590008.312500",\ + "590007.312500, 590007.312500, 590007.500000, 590007.875000, 590008.437500",\ + "590007.437500, 590007.437500, 590007.625000, 590008.000000, 590008.562500",\ + "590007.562500, 590007.562500, 590007.750000, 590008.125000, 590008.687500",\ + "590007.812500, 590007.812500, 590008.000000, 590008.375000, 590008.937500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "0.017866, 0.065808, 0.337663, 1.043336, 2.067040",\ + "0.017866, 0.065808, 0.337663, 1.043336, 2.067040",\ + "0.017866, 0.065808, 0.337663, 1.043336, 2.067040",\ + "0.017866, 0.065808, 0.337663, 1.043336, 2.067040",\ + "0.017866, 0.065808, 0.337663, 1.043336, 2.067040"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_aon_o_una_min*/ + + timing () { + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "590008.625000, 590008.625000, 590008.812500, 590009.187500, 590009.750000",\ + "590008.750000, 590008.750000, 590008.937500, 590009.312500, 590009.875000",\ + "590008.750000, 590008.750000, 590008.937500, 590009.312500, 590009.875000",\ + "590008.875000, 590008.875000, 590009.062500, 590009.437500, 590010.000000",\ + "590009.125000, 590009.125000, 590009.312500, 590009.687500, 590010.250000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "0.017866, 0.065807, 0.337660, 1.043334, 2.067039",\ + "0.017866, 0.065807, 0.337660, 1.043334, 2.067039",\ + "0.017866, 0.065807, 0.337660, 1.043334, 2.067039",\ + "0.017866, 0.065807, 0.337660, 1.043334, 2.067039",\ + "0.017866, 0.065807, 0.337660, 1.043334, 2.067039"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "590006.937500, 590006.937500, 590007.125000, 590007.562500, 590008.187500",\ + "590007.062500, 590007.062500, 590007.250000, 590007.687500, 590008.312500",\ + "590007.187500, 590007.187500, 590007.375000, 590007.812500, 590008.437500",\ + "590007.312500, 590007.312500, 590007.500000, 590007.937500, 590008.562500",\ + "590007.687500, 590007.687500, 590007.875000, 590008.312500, 590008.937500"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "0.018690, 0.076907, 0.397572, 1.240181, 2.462535",\ + "0.018690, 0.076907, 0.397572, 1.240181, 2.462535",\ + "0.018690, 0.076907, 0.397572, 1.240181, 2.462535",\ + "0.018690, 0.076907, 0.397572, 1.240181, 2.462535",\ + "0.018690, 0.076907, 0.397572, 1.240181, 2.462535"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_aon_o_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "590008.625000, 590008.625000, 590008.812500, 590009.187500, 590009.750000",\ + "590008.625000, 590008.625000, 590008.812500, 590009.187500, 590009.750000",\ + "590008.750000, 590008.750000, 590008.937500, 590009.312500, 590009.875000",\ + "590008.875000, 590008.875000, 590009.062500, 590009.437500, 590010.000000",\ + "590009.125000, 590009.125000, 590009.312500, 590009.687500, 590010.250000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "0.017866, 0.065808, 0.337663, 1.043336, 2.067040",\ + "0.017866, 0.065808, 0.337663, 1.043336, 2.067040",\ + "0.017866, 0.065808, 0.337663, 1.043336, 2.067040",\ + "0.017866, 0.065808, 0.337663, 1.043336, 2.067040",\ + "0.017866, 0.065808, 0.337663, 1.043336, 2.067040"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "590006.937500, 590006.937500, 590007.125000, 590007.562500, 590008.187500",\ + "590007.062500, 590007.062500, 590007.250000, 590007.687500, 590008.312500",\ + "590007.187500, 590007.187500, 590007.375000, 590007.812500, 590008.437500",\ + "590007.312500, 590007.312500, 590007.500000, 590007.937500, 590008.562500",\ + "590007.562500, 590007.562500, 590007.750000, 590008.187500, 590008.812500"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.018084, 0.134289, 0.768982, 2.435137, 4.852190"); + values ( "0.018689, 0.076907, 0.397577, 1.240181, 2.462529",\ + "0.018689, 0.076907, 0.397577, 1.240181, 2.462529",\ + "0.018689, 0.076907, 0.397577, 1.240181, 2.462529",\ + "0.018689, 0.076907, 0.397577, 1.240181, 2.462529",\ + "0.018689, 0.076907, 0.397577, 1.240181, 2.462529"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_aon_o_inv_min*/ + +} /* end of pin clk_src_aon_o */ + +pin("clk_src_aon_val_o") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.090214 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001189 ; + + /* Other user defined attributes. */ + original_pin : clk_src_aon_val_o; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "970010.375000, 970010.375000, 970010.500000, 970010.750000, 970011.625000",\ + "970010.500000, 970010.500000, 970010.625000, 970010.875000, 970011.750000",\ + "970010.625000, 970010.625000, 970010.750000, 970011.000000, 970011.875000",\ + "970010.625000, 970010.625000, 970010.750000, 970011.000000, 970011.875000",\ + "970011.000000, 970011.000000, 970011.125000, 970011.375000, 970012.250000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "0.051936, 0.116244, 0.271542, 0.799035, 2.469430",\ + "0.051936, 0.116244, 0.271542, 0.799035, 2.469430",\ + "0.051936, 0.116244, 0.271542, 0.799035, 2.469430",\ + "0.051936, 0.116244, 0.271542, 0.799035, 2.469430",\ + "0.051936, 0.116244, 0.271542, 0.799035, 2.469430"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "970010.312500, 970010.375000, 970010.437500, 970010.625000, 970011.250000",\ + "970010.437500, 970010.500000, 970010.562500, 970010.750000, 970011.375000",\ + "970010.562500, 970010.625000, 970010.687500, 970010.875000, 970011.500000",\ + "970010.562500, 970010.625000, 970010.687500, 970010.875000, 970011.500000",\ + "970010.937500, 970011.000000, 970011.062500, 970011.250000, 970011.875000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "0.049199, 0.090220, 0.188113, 0.536743, 1.653005",\ + "0.049199, 0.090220, 0.188113, 0.536743, 1.653005",\ + "0.049199, 0.090220, 0.188113, 0.536743, 1.653005",\ + "0.049199, 0.090220, 0.188113, 0.536743, 1.653005",\ + "0.049199, 0.090220, 0.188113, 0.536743, 1.653005"); + } + + } /* end of arc clk_ast_tlul_i_clk_src_aon_val_o_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "0.710726, 0.747218, 0.829413, 1.103529, 1.981775",\ + "0.798527, 0.835019, 0.917213, 1.191329, 2.069575",\ + "0.879826, 0.916318, 0.998513, 1.272629, 2.150875",\ + "0.937979, 0.974471, 1.056666, 1.330782, 2.209028",\ + "1.246700, 1.283192, 1.365386, 1.639502, 2.517748"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "0.051468, 0.115906, 0.271423, 0.789292, 2.460133",\ + "0.051468, 0.115906, 0.271423, 0.789292, 2.460133",\ + "0.051468, 0.115906, 0.271423, 0.789292, 2.460133",\ + "0.051468, 0.115906, 0.271423, 0.789292, 2.460133",\ + "0.051468, 0.115906, 0.271423, 0.789292, 2.460133"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "0.688713, 0.718170, 0.777854, 0.968115, 1.580205",\ + "0.776513, 0.805970, 0.865655, 1.055915, 1.668005",\ + "0.857813, 0.887270, 0.946954, 1.137214, 1.749305",\ + "0.915966, 0.945423, 1.005107, 1.195368, 1.807458",\ + "1.224687, 1.254144, 1.313828, 1.504088, 2.116179"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "0.046907, 0.088182, 0.186999, 0.533681, 1.651611",\ + "0.046907, 0.088182, 0.186999, 0.533681, 1.651611",\ + "0.046907, 0.088182, 0.186999, 0.533681, 1.651611",\ + "0.046907, 0.088182, 0.186999, 0.533681, 1.651611",\ + "0.046907, 0.088182, 0.186999, 0.533681, 1.651611"); + } + + } /* end of arc clk_ast_tlul_i_clk_src_aon_val_o_redg_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "970007.125000, 970007.125000, 970007.250000, 970007.500000, 970008.375000",\ + "970007.250000, 970007.250000, 970007.375000, 970007.625000, 970008.500000",\ + "970007.250000, 970007.250000, 970007.375000, 970007.625000, 970008.500000",\ + "970007.500000, 970007.500000, 970007.625000, 970007.875000, 970008.750000",\ + "970007.750000, 970007.750000, 970007.875000, 970008.125000, 970009.000000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "0.051936, 0.116244, 0.271542, 0.799035, 2.469430",\ + "0.051936, 0.116244, 0.271542, 0.799035, 2.469430",\ + "0.051936, 0.116244, 0.271542, 0.799035, 2.469430",\ + "0.051936, 0.116244, 0.271542, 0.799035, 2.469430",\ + "0.051936, 0.116244, 0.271542, 0.799035, 2.469430"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "970010.187500, 970010.250000, 970010.312500, 970010.500000, 970011.125000",\ + "970010.312500, 970010.375000, 970010.437500, 970010.625000, 970011.250000",\ + "970010.437500, 970010.500000, 970010.562500, 970010.750000, 970011.375000",\ + "970010.687500, 970010.750000, 970010.812500, 970011.000000, 970011.625000",\ + "970010.937500, 970011.000000, 970011.062500, 970011.250000, 970011.875000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "0.049199, 0.090220, 0.188113, 0.536743, 1.653005",\ + "0.049199, 0.090220, 0.188113, 0.536743, 1.653005",\ + "0.049199, 0.090220, 0.188113, 0.536743, 1.653005",\ + "0.049199, 0.090220, 0.188113, 0.536743, 1.653005",\ + "0.049199, 0.090220, 0.188113, 0.536743, 1.653005"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_aon_val_o_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "380000.468750, 380000.500000, 380000.593750, 380000.843750, 380001.750000",\ + "380000.562500, 380000.593750, 380000.687500, 380000.937500, 380001.843750",\ + "380000.625000, 380000.656250, 380000.750000, 380001.000000, 380001.906250",\ + "380000.781250, 380000.812500, 380000.906250, 380001.156250, 380002.062500",\ + "380001.000000, 380001.031250, 380001.125000, 380001.375000, 380002.281250"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "0.051468, 0.115906, 0.271423, 0.789292, 2.460133",\ + "0.051468, 0.115906, 0.271423, 0.789292, 2.460133",\ + "0.051468, 0.115906, 0.271423, 0.789292, 2.460133",\ + "0.051468, 0.115906, 0.271423, 0.789292, 2.460133",\ + "0.051468, 0.115906, 0.271423, 0.789292, 2.460133"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "380001.906250, 380001.937500, 380002.000000, 380002.187500, 380002.781250",\ + "380002.000000, 380002.031250, 380002.093750, 380002.281250, 380002.875000",\ + "380002.093750, 380002.125000, 380002.187500, 380002.375000, 380002.968750",\ + "380002.281250, 380002.312500, 380002.375000, 380002.562500, 380003.156250",\ + "380002.531250, 380002.562500, 380002.625000, 380002.812500, 380003.406250"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "0.046907, 0.088182, 0.186999, 0.533681, 1.651611",\ + "0.046907, 0.088182, 0.186999, 0.533681, 1.651611",\ + "0.046907, 0.088182, 0.186999, 0.533681, 1.651611",\ + "0.046907, 0.088182, 0.186999, 0.533681, 1.651611",\ + "0.046907, 0.088182, 0.186999, 0.533681, 1.651611"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_aon_val_o_una_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "970007.187500, 970007.187500, 970007.250000, 970007.437500, 970008.062500",\ + "970007.312500, 970007.312500, 970007.375000, 970007.562500, 970008.187500",\ + "970007.312500, 970007.312500, 970007.375000, 970007.562500, 970008.187500",\ + "970007.562500, 970007.562500, 970007.625000, 970007.812500, 970008.437500",\ + "970007.812500, 970007.812500, 970007.875000, 970008.062500, 970008.687500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "0.049199, 0.090220, 0.188113, 0.536743, 1.653005",\ + "0.049199, 0.090220, 0.188113, 0.536743, 1.653005",\ + "0.049199, 0.090220, 0.188113, 0.536743, 1.653005",\ + "0.049199, 0.090220, 0.188113, 0.536743, 1.653005",\ + "0.049199, 0.090220, 0.188113, 0.536743, 1.653005"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "970010.250000, 970010.250000, 970010.375000, 970010.625000, 970011.500000",\ + "970010.375000, 970010.375000, 970010.500000, 970010.750000, 970011.625000",\ + "970010.500000, 970010.500000, 970010.625000, 970010.875000, 970011.750000",\ + "970010.750000, 970010.750000, 970010.875000, 970011.125000, 970012.000000",\ + "970011.000000, 970011.000000, 970011.125000, 970011.375000, 970012.250000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "0.051936, 0.116244, 0.271542, 0.799035, 2.469430",\ + "0.051936, 0.116244, 0.271542, 0.799035, 2.469430",\ + "0.051936, 0.116244, 0.271542, 0.799035, 2.469430",\ + "0.051936, 0.116244, 0.271542, 0.799035, 2.469430",\ + "0.051936, 0.116244, 0.271542, 0.799035, 2.469430"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_aon_val_o_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "380000.500000, 380000.531250, 380000.593750, 380000.781250, 380001.406250",\ + "380000.593750, 380000.625000, 380000.687500, 380000.875000, 380001.500000",\ + "380000.656250, 380000.687500, 380000.750000, 380000.937500, 380001.562500",\ + "380000.812500, 380000.843750, 380000.906250, 380001.093750, 380001.718750",\ + "380001.031250, 380001.062500, 380001.125000, 380001.312500, 380001.937500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "0.046907, 0.088182, 0.186999, 0.533681, 1.651611",\ + "0.046907, 0.088182, 0.186999, 0.533681, 1.651611",\ + "0.046907, 0.088182, 0.186999, 0.533681, 1.651611",\ + "0.046907, 0.088182, 0.186999, 0.533681, 1.651611",\ + "0.046907, 0.088182, 0.186999, 0.533681, 1.651611"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "380001.906250, 380001.968750, 380002.031250, 380002.312500, 380003.187500",\ + "380002.000000, 380002.062500, 380002.125000, 380002.406250, 380003.281250",\ + "380002.093750, 380002.156250, 380002.218750, 380002.500000, 380003.375000",\ + "380002.281250, 380002.343750, 380002.406250, 380002.687500, 380003.562500",\ + "380002.531250, 380002.593750, 380002.656250, 380002.937500, 380003.812500"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "0.051468, 0.115906, 0.271423, 0.789292, 2.460133",\ + "0.051468, 0.115906, 0.271423, 0.789292, 2.460133",\ + "0.051468, 0.115906, 0.271423, 0.789292, 2.460133",\ + "0.051468, 0.115906, 0.271423, 0.789292, 2.460133",\ + "0.051468, 0.115906, 0.271423, 0.789292, 2.460133"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_aon_val_o_inv_min*/ + + timing () { + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "590008.625000, 590008.625000, 590008.750000, 590009.000000, 590009.875000",\ + "590008.750000, 590008.750000, 590008.875000, 590009.125000, 590010.000000",\ + "590008.750000, 590008.750000, 590008.875000, 590009.125000, 590010.000000",\ + "590008.875000, 590008.875000, 590009.000000, 590009.250000, 590010.125000",\ + "590009.125000, 590009.125000, 590009.250000, 590009.500000, 590010.375000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "0.051936, 0.116244, 0.271542, 0.799058, 2.469430",\ + "0.051936, 0.116244, 0.271542, 0.799058, 2.469430",\ + "0.051936, 0.116244, 0.271542, 0.799058, 2.469430",\ + "0.051936, 0.116244, 0.271542, 0.799058, 2.469430",\ + "0.051936, 0.116244, 0.271542, 0.799058, 2.469430"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "590006.937500, 590006.937500, 590007.000000, 590007.187500, 590007.812500",\ + "590007.062500, 590007.062500, 590007.125000, 590007.312500, 590007.937500",\ + "590007.187500, 590007.187500, 590007.250000, 590007.437500, 590008.062500",\ + "590007.312500, 590007.312500, 590007.375000, 590007.562500, 590008.187500",\ + "590007.687500, 590007.687500, 590007.750000, 590007.937500, 590008.562500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "0.049199, 0.090220, 0.188113, 0.536750, 1.653005",\ + "0.049199, 0.090220, 0.188113, 0.536750, 1.653005",\ + "0.049199, 0.090220, 0.188113, 0.536750, 1.653005",\ + "0.049199, 0.090220, 0.188113, 0.536750, 1.653005",\ + "0.049199, 0.090220, 0.188113, 0.536750, 1.653005"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_aon_val_o_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "590008.437500, 590008.437500, 590008.500000, 590008.812500, 590009.687500",\ + "590008.437500, 590008.437500, 590008.500000, 590008.812500, 590009.687500",\ + "590008.562500, 590008.562500, 590008.625000, 590008.937500, 590009.812500",\ + "590008.687500, 590008.687500, 590008.750000, 590009.062500, 590009.937500",\ + "590008.937500, 590008.937500, 590009.000000, 590009.312500, 590010.187500"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "0.051557, 0.115907, 0.271016, 0.788173, 2.465855",\ + "0.051557, 0.115907, 0.271016, 0.788173, 2.465855",\ + "0.051557, 0.115907, 0.271016, 0.788173, 2.465855",\ + "0.051557, 0.115907, 0.271016, 0.788173, 2.465855",\ + "0.051557, 0.115907, 0.271016, 0.788173, 2.465855"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "590006.750000, 590006.750000, 590006.812500, 590007.000000, 590007.625000",\ + "590006.875000, 590006.875000, 590006.937500, 590007.125000, 590007.750000",\ + "590007.000000, 590007.000000, 590007.062500, 590007.250000, 590007.875000",\ + "590007.125000, 590007.125000, 590007.187500, 590007.375000, 590008.000000",\ + "590007.375000, 590007.375000, 590007.437500, 590007.625000, 590008.250000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "0.046941, 0.088258, 0.187000, 0.531185, 1.650439",\ + "0.046941, 0.088258, 0.187000, 0.531185, 1.650439",\ + "0.046941, 0.088258, 0.187000, 0.531185, 1.650439",\ + "0.046941, 0.088258, 0.187000, 0.531185, 1.650439",\ + "0.046941, 0.088258, 0.187000, 0.531185, 1.650439"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_aon_val_o_una_min*/ + + timing () { + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "590008.562500, 590008.625000, 590008.687500, 590008.875000, 590009.500000",\ + "590008.687500, 590008.750000, 590008.812500, 590009.000000, 590009.625000",\ + "590008.687500, 590008.750000, 590008.812500, 590009.000000, 590009.625000",\ + "590008.812500, 590008.875000, 590008.937500, 590009.125000, 590009.750000",\ + "590009.062500, 590009.125000, 590009.187500, 590009.375000, 590010.000000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "0.049199, 0.090220, 0.188113, 0.536750, 1.653005",\ + "0.049199, 0.090220, 0.188113, 0.536750, 1.653005",\ + "0.049199, 0.090220, 0.188113, 0.536750, 1.653005",\ + "0.049199, 0.090220, 0.188113, 0.536750, 1.653005",\ + "0.049199, 0.090220, 0.188113, 0.536750, 1.653005"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "590006.875000, 590006.875000, 590007.000000, 590007.250000, 590008.125000",\ + "590007.000000, 590007.000000, 590007.125000, 590007.375000, 590008.250000",\ + "590007.125000, 590007.125000, 590007.250000, 590007.500000, 590008.375000",\ + "590007.250000, 590007.250000, 590007.375000, 590007.625000, 590008.500000",\ + "590007.625000, 590007.625000, 590007.750000, 590008.000000, 590008.875000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "0.051936, 0.116244, 0.271542, 0.799058, 2.469430",\ + "0.051936, 0.116244, 0.271542, 0.799058, 2.469430",\ + "0.051936, 0.116244, 0.271542, 0.799058, 2.469430",\ + "0.051936, 0.116244, 0.271542, 0.799058, 2.469430",\ + "0.051936, 0.116244, 0.271542, 0.799058, 2.469430"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_aon_val_o_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "590008.562500, 590008.625000, 590008.687500, 590008.875000, 590009.500000",\ + "590008.562500, 590008.625000, 590008.687500, 590008.875000, 590009.500000",\ + "590008.687500, 590008.750000, 590008.812500, 590009.000000, 590009.625000",\ + "590008.812500, 590008.875000, 590008.937500, 590009.125000, 590009.750000",\ + "590009.062500, 590009.125000, 590009.187500, 590009.375000, 590010.000000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "0.046941, 0.088258, 0.187000, 0.531185, 1.650439",\ + "0.046941, 0.088258, 0.187000, 0.531185, 1.650439",\ + "0.046941, 0.088258, 0.187000, 0.531185, 1.650439",\ + "0.046941, 0.088258, 0.187000, 0.531185, 1.650439",\ + "0.046941, 0.088258, 0.187000, 0.531185, 1.650439"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "590006.875000, 590006.875000, 590007.000000, 590007.250000, 590008.125000",\ + "590007.000000, 590007.000000, 590007.125000, 590007.375000, 590008.250000",\ + "590007.125000, 590007.125000, 590007.250000, 590007.500000, 590008.375000",\ + "590007.250000, 590007.250000, 590007.375000, 590007.625000, 590008.500000",\ + "590007.500000, 590007.500000, 590007.625000, 590007.875000, 590008.750000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001189, 0.003650, 0.009385, 0.028484, 0.090214"); + values ( "0.051557, 0.115907, 0.271016, 0.788173, 2.465855",\ + "0.051557, 0.115907, 0.271016, 0.788173, 2.465855",\ + "0.051557, 0.115907, 0.271016, 0.788173, 2.465855",\ + "0.051557, 0.115907, 0.271016, 0.788173, 2.465855",\ + "0.051557, 0.115907, 0.271016, 0.788173, 2.465855"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_aon_val_o_inv_min*/ + +} /* end of pin clk_src_aon_val_o */ + +pin("clk_src_io_en_i") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.002154 ; + + /* Other user defined attributes. */ + original_pin : clk_src_io_en_i; + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.200076, 0.146984, 0.107694, 0.090457, 0.087585",\ + "0.271588, 0.219415, 0.179927, 0.162045, 0.157577",\ + "0.363033, 0.310027, 0.270334, 0.252385, 0.247965",\ + "0.507780, 0.454308, 0.413646, 0.395357, 0.391106",\ + "0.811131, 0.757315, 0.714144, 0.694969, 0.691143"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.249331, 0.166333, 0.091045, 0.049669, 0.020498",\ + "0.324602, 0.241857, 0.166855, 0.126539, 0.100040",\ + "0.429418, 0.345854, 0.270221, 0.227986, 0.196782",\ + "0.605833, 0.521783, 0.445878, 0.397956, 0.350944",\ + "0.983325, 0.898854, 0.822917, 0.761117, 0.674795"); + } + + } /* end of arc clk_ast_ext_i_clk_src_io_en_i_stupr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.096530, -0.053812, -0.018112, 0.032751, 0.135173",\ + "-0.166367, -0.123600, -0.088245, -0.037477, 0.065076",\ + "-0.251291, -0.208679, -0.174484, -0.124115, -0.021332",\ + "-0.373429, -0.330963, -0.299719, -0.251733, -0.152256",\ + "-0.620310, -0.578080, -0.553843, -0.512151, -0.422314"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.130907, -0.055165, 0.010770, 0.102409, 0.285045",\ + "-0.205839, -0.131127, -0.064641, 0.027653, 0.211502",\ + "-0.308157, -0.233980, -0.166224, -0.072248, 0.114884",\ + "-0.470591, -0.397956, -0.329423, -0.234665, -0.046227",\ + "-0.811364, -0.742478, -0.673228, -0.578223, -0.389923"); + } + + } /* end of arc clk_ast_ext_i_clk_src_io_en_i_hldr*/ + +} /* end of pin clk_src_io_en_i */ + +pin("clk_src_io_o") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.069236 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.028657 ; + + /* Other user defined attributes. */ + original_pin : clk_src_io_o; + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : falling_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "1.549102, 1.558939, 1.580409, 1.648733, 2.140488",\ + "1.549102, 1.558939, 1.580409, 1.648733, 2.140488",\ + "1.549102, 1.558939, 1.580409, 1.648733, 2.140488",\ + "1.549102, 1.558939, 1.580409, 1.648733, 2.140488",\ + "1.549102, 1.558939, 1.580409, 1.648733, 2.140488"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "1.576328, 1.589726, 1.618968, 1.712027, 2.381811",\ + "1.576328, 1.589726, 1.618968, 1.712027, 2.381811",\ + "1.576328, 1.589726, 1.618968, 1.712027, 2.381811",\ + "1.576328, 1.589726, 1.618968, 1.712027, 2.381811",\ + "1.576328, 1.589726, 1.618968, 1.712027, 2.381811"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "0.969570, 0.993149, 1.044609, 1.208373, 2.387050",\ + "0.969570, 0.993149, 1.044609, 1.208373, 2.387050",\ + "0.969570, 0.993149, 1.044609, 1.208373, 2.387050",\ + "0.969570, 0.993149, 1.044609, 1.208373, 2.387050",\ + "0.969570, 0.993149, 1.044609, 1.208373, 2.387050"); + } + + } /* end of arc clk_ast_ext_i_clk_src_io_o_fedg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_ext_i" ; + timing_type : falling_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "1.548301, 1.558138, 1.579608, 1.647932, 2.139687",\ + "1.548301, 1.558138, 1.579608, 1.647932, 2.139687",\ + "1.548301, 1.558138, 1.579608, 1.647932, 2.139687",\ + "1.548301, 1.558138, 1.579608, 1.647932, 2.139687",\ + "1.548301, 1.558138, 1.579608, 1.647932, 2.139687"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "1.574098, 1.587497, 1.616739, 1.709798, 2.379581",\ + "1.574098, 1.587497, 1.616739, 1.709798, 2.379581",\ + "1.574098, 1.587497, 1.616739, 1.709798, 2.379581",\ + "1.574098, 1.587497, 1.616739, 1.709798, 2.379581",\ + "1.574098, 1.587497, 1.616739, 1.709798, 2.379581"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "0.969570, 0.993149, 1.044608, 1.208373, 2.387050",\ + "0.969570, 0.993149, 1.044608, 1.208373, 2.387050",\ + "0.969570, 0.993149, 1.044608, 1.208373, 2.387050",\ + "0.969570, 0.993149, 1.044608, 1.208373, 2.387050",\ + "0.969570, 0.993149, 1.044608, 1.208373, 2.387050"); + } + + } /* end of arc clk_ast_ext_i_clk_src_io_o_fedg_min*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "1.452656, 1.462494, 1.483963, 1.552287, 2.044042",\ + "1.532226, 1.542063, 1.563532, 1.631856, 2.123611",\ + "1.612140, 1.621977, 1.643447, 1.711771, 2.203526",\ + "1.741866, 1.751703, 1.773172, 1.841496, 2.333251",\ + "1.941871, 1.951709, 1.973178, 2.041502, 2.533257"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "1.431237, 1.444636, 1.473878, 1.566937, 2.236720",\ + "1.520409, 1.533808, 1.563050, 1.656109, 2.325892",\ + "1.611352, 1.624751, 1.653993, 1.747052, 2.416835",\ + "1.766391, 1.779789, 1.809031, 1.902090, 2.571874",\ + "2.019272, 2.032671, 2.061913, 2.154972, 2.824755"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "0.969570, 0.993149, 1.044609, 1.208373, 2.387050",\ + "0.969570, 0.993149, 1.044609, 1.208373, 2.387050",\ + "0.969570, 0.993149, 1.044609, 1.208373, 2.387050",\ + "0.969570, 0.993149, 1.044609, 1.208373, 2.387050",\ + "0.969570, 0.993149, 1.044609, 1.208373, 2.387050"); + } + + } /* end of arc clk_ast_ext_i_clk_src_io_o_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_ext_i" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "1.436974, 1.446811, 1.468281, 1.536605, 2.028360",\ + "1.516723, 1.526561, 1.548030, 1.616354, 2.108109",\ + "1.592126, 1.601964, 1.623433, 1.691757, 2.183512",\ + "1.712250, 1.722088, 1.743557, 1.811881, 2.303636",\ + "1.895420, 1.905257, 1.926727, 1.995051, 2.486806"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "1.423435, 1.436834, 1.466076, 1.559135, 2.228919",\ + "1.511023, 1.524422, 1.553663, 1.646723, 2.316506",\ + "1.597821, 1.611220, 1.640462, 1.733521, 2.403305",\ + "1.747068, 1.760467, 1.789708, 1.882767, 2.552551",\ + "1.991484, 2.004883, 2.034125, 2.127184, 2.796968"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "0.969570, 0.993149, 1.044608, 1.208373, 2.387050",\ + "0.969570, 0.993149, 1.044608, 1.208373, 2.387050",\ + "0.969570, 0.993149, 1.044608, 1.208373, 2.387050",\ + "0.969570, 0.993149, 1.044608, 1.208373, 2.387050",\ + "0.969570, 0.993149, 1.044608, 1.208373, 2.387050"); + } + + } /* end of arc clk_ast_ext_i_clk_src_io_o_una_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "970011.937500, 970011.937500, 970011.937500, 970012.062500, 970012.500000",\ + "970012.062500, 970012.062500, 970012.062500, 970012.187500, 970012.625000",\ + "970012.187500, 970012.187500, 970012.187500, 970012.312500, 970012.750000",\ + "970012.187500, 970012.187500, 970012.187500, 970012.312500, 970012.750000",\ + "970012.562500, 970012.562500, 970012.562500, 970012.687500, 970013.125000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "0.813271, 0.831978, 0.872805, 1.002733, 1.937878",\ + "0.813271, 0.831978, 0.872805, 1.002733, 1.937878",\ + "0.813271, 0.831978, 0.872805, 1.002733, 1.937878",\ + "0.813271, 0.831978, 0.872805, 1.002733, 1.937878",\ + "0.813271, 0.831978, 0.872805, 1.002733, 1.937878"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "970010.562500, 970010.625000, 970010.625000, 970010.687500, 970011.375000",\ + "970010.687500, 970010.750000, 970010.750000, 970010.812500, 970011.500000",\ + "970010.812500, 970010.875000, 970010.875000, 970010.937500, 970011.625000",\ + "970010.812500, 970010.875000, 970010.875000, 970010.937500, 970011.625000",\ + "970011.187500, 970011.250000, 970011.250000, 970011.312500, 970012.000000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "0.967112, 0.990771, 1.042405, 1.206725, 2.390203",\ + "0.967112, 0.990771, 1.042405, 1.206725, 2.390203",\ + "0.967112, 0.990771, 1.042405, 1.206725, 2.390203",\ + "0.967112, 0.990771, 1.042405, 1.206725, 2.390203",\ + "0.967112, 0.990771, 1.042405, 1.206725, 2.390203"); + } + + } /* end of arc clk_ast_tlul_i_clk_src_io_o_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "0.979131, 0.988972, 1.010450, 1.078799, 1.570735",\ + "1.066932, 1.076773, 1.098250, 1.166599, 1.658535",\ + "1.148231, 1.158072, 1.179549, 1.247899, 1.739835",\ + "1.206384, 1.216226, 1.237703, 1.306052, 1.797988",\ + "1.515105, 1.524946, 1.546423, 1.614772, 2.106709"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "1.139635, 1.153062, 1.182364, 1.275615, 1.946779",\ + "1.227509, 1.240935, 1.270237, 1.363488, 2.034653",\ + "1.321845, 1.335272, 1.364574, 1.457825, 2.128989",\ + "1.389603, 1.403029, 1.432331, 1.525582, 2.196747",\ + "1.750301, 1.763728, 1.793030, 1.886281, 2.557446"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "0.965198, 0.988888, 1.040589, 1.205123, 2.387050",\ + "0.965198, 0.988888, 1.040589, 1.205123, 2.387050",\ + "0.965198, 0.988888, 1.040589, 1.205123, 2.387050",\ + "0.965198, 0.988888, 1.040589, 1.205123, 2.387050",\ + "0.965198, 0.988888, 1.040589, 1.205123, 2.387050"); + } + + } /* end of arc clk_ast_tlul_i_clk_src_io_o_redg_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "970007.250000, 970007.250000, 970007.312500, 970007.375000, 970007.875000",\ + "970007.375000, 970007.375000, 970007.437500, 970007.500000, 970008.000000",\ + "970007.375000, 970007.375000, 970007.437500, 970007.500000, 970008.000000",\ + "970007.625000, 970007.625000, 970007.687500, 970007.750000, 970008.250000",\ + "970007.875000, 970007.875000, 970007.937500, 970008.000000, 970008.500000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "0.813271, 0.831978, 0.872805, 1.002733, 1.937878",\ + "0.813271, 0.831978, 0.872805, 1.002733, 1.937878",\ + "0.813271, 0.831978, 0.872805, 1.002733, 1.937878",\ + "0.813271, 0.831978, 0.872805, 1.002733, 1.937878",\ + "0.813271, 0.831978, 0.872805, 1.002733, 1.937878"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "970010.437500, 970010.500000, 970010.500000, 970010.562500, 970011.250000",\ + "970010.562500, 970010.625000, 970010.625000, 970010.687500, 970011.375000",\ + "970010.687500, 970010.750000, 970010.750000, 970010.812500, 970011.500000",\ + "970010.937500, 970011.000000, 970011.000000, 970011.062500, 970011.750000",\ + "970011.187500, 970011.250000, 970011.250000, 970011.312500, 970012.000000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "0.967112, 0.990771, 1.042405, 1.206725, 2.390203",\ + "0.967112, 0.990771, 1.042405, 1.206725, 2.390203",\ + "0.967112, 0.990771, 1.042405, 1.206725, 2.390203",\ + "0.967112, 0.990771, 1.042405, 1.206725, 2.390203",\ + "0.967112, 0.990771, 1.042405, 1.206725, 2.390203"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_io_o_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "380001.562500, 380001.593750, 380001.593750, 380001.687500, 380002.156250",\ + "380001.656250, 380001.687500, 380001.687500, 380001.781250, 380002.250000",\ + "380001.718750, 380001.750000, 380001.750000, 380001.843750, 380002.312500",\ + "380001.875000, 380001.906250, 380001.906250, 380002.000000, 380002.468750",\ + "380002.093750, 380002.125000, 380002.125000, 380002.218750, 380002.687500"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "380003.031250, 380003.062500, 380003.093750, 380003.187500, 380003.843750",\ + "380003.125000, 380003.156250, 380003.187500, 380003.281250, 380003.937500",\ + "380003.218750, 380003.250000, 380003.281250, 380003.375000, 380004.031250",\ + "380003.406250, 380003.437500, 380003.468750, 380003.562500, 380004.218750",\ + "380003.656250, 380003.687500, 380003.718750, 380003.812500, 380004.468750"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "0.965198, 0.988888, 1.040589, 1.205123, 2.387050",\ + "0.965198, 0.988888, 1.040589, 1.205123, 2.387050",\ + "0.965198, 0.988888, 1.040589, 1.205123, 2.387050",\ + "0.965198, 0.988888, 1.040589, 1.205123, 2.387050",\ + "0.965198, 0.988888, 1.040589, 1.205123, 2.387050"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_io_o_una_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "970008.625000, 970008.625000, 970008.625000, 970008.750000, 970009.437500",\ + "970008.750000, 970008.750000, 970008.750000, 970008.875000, 970009.562500",\ + "970008.750000, 970008.750000, 970008.750000, 970008.875000, 970009.562500",\ + "970009.000000, 970009.000000, 970009.000000, 970009.125000, 970009.812500",\ + "970009.250000, 970009.250000, 970009.250000, 970009.375000, 970010.062500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "0.967112, 0.990771, 1.042405, 1.206725, 2.390203",\ + "0.967112, 0.990771, 1.042405, 1.206725, 2.390203",\ + "0.967112, 0.990771, 1.042405, 1.206725, 2.390203",\ + "0.967112, 0.990771, 1.042405, 1.206725, 2.390203",\ + "0.967112, 0.990771, 1.042405, 1.206725, 2.390203"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "970011.812500, 970011.812500, 970011.812500, 970011.937500, 970012.375000",\ + "970011.937500, 970011.937500, 970011.937500, 970012.062500, 970012.500000",\ + "970012.062500, 970012.062500, 970012.062500, 970012.187500, 970012.625000",\ + "970012.312500, 970012.312500, 970012.312500, 970012.437500, 970012.875000",\ + "970012.562500, 970012.562500, 970012.562500, 970012.687500, 970013.125000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "0.813271, 0.831978, 0.872805, 1.002733, 1.937878",\ + "0.813271, 0.831978, 0.872805, 1.002733, 1.937878",\ + "0.813271, 0.831978, 0.872805, 1.002733, 1.937878",\ + "0.813271, 0.831978, 0.872805, 1.002733, 1.937878",\ + "0.813271, 0.831978, 0.872805, 1.002733, 1.937878"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_io_o_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "380000.875000, 380000.906250, 380000.937500, 380001.031250, 380001.687500",\ + "380000.968750, 380001.000000, 380001.031250, 380001.125000, 380001.781250",\ + "380001.031250, 380001.062500, 380001.093750, 380001.187500, 380001.843750",\ + "380001.187500, 380001.218750, 380001.250000, 380001.343750, 380002.000000",\ + "380001.406250, 380001.437500, 380001.468750, 380001.562500, 380002.218750"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "0.965198, 0.988888, 1.040589, 1.205123, 2.387050",\ + "0.965198, 0.988888, 1.040589, 1.205123, 2.387050",\ + "0.965198, 0.988888, 1.040589, 1.205123, 2.387050",\ + "0.965198, 0.988888, 1.040589, 1.205123, 2.387050",\ + "0.965198, 0.988888, 1.040589, 1.205123, 2.387050"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "380002.156250, 380002.187500, 380002.187500, 380002.281250, 380002.750000",\ + "380002.250000, 380002.281250, 380002.281250, 380002.375000, 380002.843750",\ + "380002.343750, 380002.375000, 380002.375000, 380002.468750, 380002.937500",\ + "380002.531250, 380002.562500, 380002.562500, 380002.656250, 380003.125000",\ + "380002.781250, 380002.812500, 380002.812500, 380002.906250, 380003.375000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_io_o_inv_min*/ + + timing () { + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "590010.187500, 590010.187500, 590010.187500, 590010.312500, 590010.750000",\ + "590010.312500, 590010.312500, 590010.312500, 590010.437500, 590010.875000",\ + "590010.312500, 590010.312500, 590010.312500, 590010.437500, 590010.875000",\ + "590010.437500, 590010.437500, 590010.437500, 590010.562500, 590011.000000",\ + "590010.687500, 590010.687500, 590010.687500, 590010.812500, 590011.250000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "0.813271, 0.831978, 0.872805, 1.002733, 1.937878",\ + "0.813271, 0.831978, 0.872805, 1.002733, 1.937878",\ + "0.813271, 0.831978, 0.872805, 1.002733, 1.937878",\ + "0.813271, 0.831978, 0.872805, 1.002733, 1.937878",\ + "0.813271, 0.831978, 0.872805, 1.002733, 1.937878"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "590008.375000, 590008.375000, 590008.375000, 590008.500000, 590009.187500",\ + "590008.500000, 590008.500000, 590008.500000, 590008.625000, 590009.312500",\ + "590008.625000, 590008.625000, 590008.625000, 590008.750000, 590009.437500",\ + "590008.750000, 590008.750000, 590008.750000, 590008.875000, 590009.562500",\ + "590009.125000, 590009.125000, 590009.125000, 590009.250000, 590009.937500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "0.967112, 0.990771, 1.042405, 1.206725, 2.390202",\ + "0.967112, 0.990771, 1.042405, 1.206725, 2.390202",\ + "0.967112, 0.990771, 1.042405, 1.206725, 2.390202",\ + "0.967112, 0.990771, 1.042405, 1.206725, 2.390202",\ + "0.967112, 0.990771, 1.042405, 1.206725, 2.390202"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_io_o_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "590008.875000, 590008.875000, 590008.937500, 590009.000000, 590009.500000",\ + "590008.875000, 590008.875000, 590008.937500, 590009.000000, 590009.500000",\ + "590009.000000, 590009.000000, 590009.062500, 590009.125000, 590009.625000",\ + "590009.125000, 590009.125000, 590009.187500, 590009.250000, 590009.750000",\ + "590009.375000, 590009.375000, 590009.437500, 590009.500000, 590010.000000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "590007.250000, 590007.250000, 590007.312500, 590007.375000, 590008.062500",\ + "590007.375000, 590007.375000, 590007.437500, 590007.500000, 590008.187500",\ + "590007.500000, 590007.500000, 590007.562500, 590007.625000, 590008.312500",\ + "590007.625000, 590007.625000, 590007.687500, 590007.750000, 590008.437500",\ + "590007.875000, 590007.875000, 590007.937500, 590008.000000, 590008.687500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "0.965982, 0.989673, 1.041377, 1.205920, 2.387050",\ + "0.965982, 0.989673, 1.041377, 1.205920, 2.387050",\ + "0.965982, 0.989673, 1.041377, 1.205920, 2.387050",\ + "0.965982, 0.989673, 1.041377, 1.205920, 2.387050",\ + "0.965982, 0.989673, 1.041377, 1.205920, 2.387050"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_io_o_una_min*/ + + timing () { + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "590008.812500, 590008.875000, 590008.875000, 590008.937500, 590009.625000",\ + "590008.937500, 590009.000000, 590009.000000, 590009.062500, 590009.750000",\ + "590008.937500, 590009.000000, 590009.000000, 590009.062500, 590009.750000",\ + "590009.062500, 590009.125000, 590009.125000, 590009.187500, 590009.875000",\ + "590009.312500, 590009.375000, 590009.375000, 590009.437500, 590010.125000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "0.967112, 0.990771, 1.042405, 1.206725, 2.390202",\ + "0.967112, 0.990771, 1.042405, 1.206725, 2.390202",\ + "0.967112, 0.990771, 1.042405, 1.206725, 2.390202",\ + "0.967112, 0.990771, 1.042405, 1.206725, 2.390202",\ + "0.967112, 0.990771, 1.042405, 1.206725, 2.390202"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "590007.000000, 590007.000000, 590007.062500, 590007.125000, 590007.625000",\ + "590007.125000, 590007.125000, 590007.187500, 590007.250000, 590007.750000",\ + "590007.250000, 590007.250000, 590007.312500, 590007.375000, 590007.875000",\ + "590007.375000, 590007.375000, 590007.437500, 590007.500000, 590008.000000",\ + "590007.750000, 590007.750000, 590007.812500, 590007.875000, 590008.375000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "0.813271, 0.831978, 0.872805, 1.002733, 1.937878",\ + "0.813271, 0.831978, 0.872805, 1.002733, 1.937878",\ + "0.813271, 0.831978, 0.872805, 1.002733, 1.937878",\ + "0.813271, 0.831978, 0.872805, 1.002733, 1.937878",\ + "0.813271, 0.831978, 0.872805, 1.002733, 1.937878"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_io_o_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "590008.812500, 590008.875000, 590008.875000, 590008.937500, 590009.625000",\ + "590008.812500, 590008.875000, 590008.875000, 590008.937500, 590009.625000",\ + "590008.937500, 590009.000000, 590009.000000, 590009.062500, 590009.750000",\ + "590009.062500, 590009.125000, 590009.125000, 590009.187500, 590009.875000",\ + "590009.312500, 590009.375000, 590009.375000, 590009.437500, 590010.125000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "0.965982, 0.989673, 1.041377, 1.205920, 2.387050",\ + "0.965982, 0.989673, 1.041377, 1.205920, 2.387050",\ + "0.965982, 0.989673, 1.041377, 1.205920, 2.387050",\ + "0.965982, 0.989673, 1.041377, 1.205920, 2.387050",\ + "0.965982, 0.989673, 1.041377, 1.205920, 2.387050"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "590007.000000, 590007.000000, 590007.062500, 590007.125000, 590007.625000",\ + "590007.125000, 590007.125000, 590007.187500, 590007.250000, 590007.750000",\ + "590007.250000, 590007.250000, 590007.312500, 590007.375000, 590007.875000",\ + "590007.375000, 590007.375000, 590007.437500, 590007.500000, 590008.000000",\ + "590007.625000, 590007.625000, 590007.687500, 590007.750000, 590008.250000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028657, 0.029332, 0.030805, 0.035494, 0.069236"); + values ( "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571",\ + "0.808825, 0.827468, 0.868155, 0.997637, 1.929571"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_io_o_inv_min*/ + +} /* end of pin clk_src_io_o */ + +pin("clk_src_io_val_o") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.090214 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : clk_src_io_val_o; + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.349435, 0.390046, 0.472189, 0.746558, 1.641427",\ + "0.436833, 0.477444, 0.559587, 0.833956, 1.728824",\ + "0.517679, 0.558291, 0.640433, 0.914803, 1.809671",\ + "0.655812, 0.696423, 0.778566, 1.052935, 1.947804",\ + "0.895822, 0.936589, 1.018755, 1.291518, 2.187617"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.023045, 0.083902, 0.239677, 0.764755, 2.477069",\ + "0.023045, 0.083902, 0.239677, 0.764755, 2.477069",\ + "0.023045, 0.083902, 0.239677, 0.764755, 2.477069",\ + "0.023045, 0.083902, 0.239677, 0.764755, 2.477069",\ + "0.023045, 0.083902, 0.239677, 0.764756, 2.477069"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.392641, 0.430353, 0.490673, 0.680876, 1.305538",\ + "0.480039, 0.517751, 0.578071, 0.768273, 1.392936",\ + "0.560851, 0.598563, 0.658884, 0.849086, 1.473748",\ + "0.698861, 0.736574, 0.796894, 0.987096, 1.611758",\ + "0.919051, 0.956763, 1.017083, 1.207286, 1.831948"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.028953, 0.070788, 0.167469, 0.516472, 1.652650",\ + "0.028953, 0.070788, 0.167469, 0.516472, 1.652650",\ + "0.028953, 0.070788, 0.167469, 0.516472, 1.652650",\ + "0.028953, 0.070788, 0.167469, 0.516472, 1.652650",\ + "0.028953, 0.070788, 0.167469, 0.516472, 1.652650"); + } + + } /* end of arc clk_ast_ext_i_clk_src_io_val_o_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.222488, 0.262832, 0.344930, 0.617962, 1.516487",\ + "0.310677, 0.351020, 0.433119, 0.706150, 1.604676",\ + "0.398314, 0.438657, 0.520756, 0.793787, 1.692313",\ + "0.546582, 0.586925, 0.669023, 0.942055, 1.840581",\ + "0.781897, 0.822240, 0.904338, 1.177370, 2.075895"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.021529, 0.083764, 0.238778, 0.757629, 2.456834",\ + "0.021529, 0.083764, 0.238778, 0.757629, 2.456834",\ + "0.021529, 0.083764, 0.238778, 0.757629, 2.456834",\ + "0.021529, 0.083764, 0.238778, 0.757629, 2.456834",\ + "0.021529, 0.083764, 0.238778, 0.757629, 2.456834"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.263406, 0.301157, 0.361570, 0.551735, 1.176520",\ + "0.351595, 0.389345, 0.449758, 0.639924, 1.264709",\ + "0.439232, 0.476982, 0.537395, 0.727561, 1.352346",\ + "0.587500, 0.625250, 0.685663, 0.875828, 1.500613",\ + "0.814247, 0.851409, 0.911729, 1.102035, 1.725865"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.025912, 0.068635, 0.165828, 0.512808, 1.651582",\ + "0.025912, 0.068635, 0.165828, 0.512808, 1.651582",\ + "0.025912, 0.068635, 0.165828, 0.512808, 1.651582",\ + "0.025912, 0.068635, 0.165828, 0.512808, 1.651582",\ + "0.025912, 0.068635, 0.165828, 0.512808, 1.651582"); + } + + } /* end of arc clk_ast_ext_i_clk_src_io_val_o_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "970010.312500, 970010.375000, 970010.437500, 970010.750000, 970011.625000",\ + "970010.437500, 970010.500000, 970010.562500, 970010.875000, 970011.750000",\ + "970010.562500, 970010.625000, 970010.687500, 970011.000000, 970011.875000",\ + "970010.562500, 970010.625000, 970010.687500, 970011.000000, 970011.875000",\ + "970010.937500, 970011.000000, 970011.062500, 970011.375000, 970012.250000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.022870, 0.084359, 0.238855, 0.766786, 2.469430",\ + "0.022870, 0.084359, 0.238855, 0.766786, 2.469430",\ + "0.022870, 0.084359, 0.238855, 0.766786, 2.469430",\ + "0.022870, 0.084359, 0.238855, 0.766786, 2.469430",\ + "0.022870, 0.084359, 0.238855, 0.766786, 2.469430"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "970010.312500, 970010.375000, 970010.437500, 970010.625000, 970011.250000",\ + "970010.437500, 970010.500000, 970010.562500, 970010.750000, 970011.375000",\ + "970010.562500, 970010.625000, 970010.687500, 970010.875000, 970011.500000",\ + "970010.562500, 970010.625000, 970010.687500, 970010.875000, 970011.500000",\ + "970010.937500, 970011.000000, 970011.062500, 970011.250000, 970011.875000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.028495, 0.070786, 0.167370, 0.515896, 1.652424",\ + "0.028495, 0.070786, 0.167370, 0.515896, 1.652424",\ + "0.028495, 0.070786, 0.167370, 0.515896, 1.652424",\ + "0.028495, 0.070786, 0.167370, 0.515896, 1.652424",\ + "0.028495, 0.070786, 0.167370, 0.515896, 1.652424"); + } + + } /* end of arc clk_ast_tlul_i_clk_src_io_val_o_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.691562, 0.732168, 0.814319, 1.088582, 1.983787",\ + "0.779362, 0.819968, 0.902120, 1.176383, 2.071587",\ + "0.860662, 0.901268, 0.983419, 1.257682, 2.152886",\ + "0.918815, 0.959421, 1.041572, 1.315835, 2.211040",\ + "1.227535, 1.268142, 1.350293, 1.624556, 2.519760"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.021561, 0.083764, 0.238778, 0.757109, 2.460111",\ + "0.021561, 0.083764, 0.238778, 0.757109, 2.460111",\ + "0.021561, 0.083764, 0.238778, 0.757109, 2.460111",\ + "0.021561, 0.083764, 0.238778, 0.757109, 2.460111",\ + "0.021561, 0.083764, 0.238778, 0.757109, 2.460111"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.670852, 0.708006, 0.768329, 0.958648, 1.582536",\ + "0.758652, 0.795807, 0.856129, 1.046448, 1.670336",\ + "0.839952, 0.877106, 0.937428, 1.127748, 1.751636",\ + "0.898105, 0.935259, 0.995582, 1.185901, 1.809789",\ + "1.206825, 1.243980, 1.304302, 1.494621, 2.118509"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.025902, 0.068641, 0.165825, 0.512797, 1.652262",\ + "0.025902, 0.068641, 0.165825, 0.512797, 1.652262",\ + "0.025902, 0.068641, 0.165825, 0.512797, 1.652262",\ + "0.025902, 0.068641, 0.165825, 0.512797, 1.652262",\ + "0.025902, 0.068641, 0.165825, 0.512797, 1.652262"); + } + + } /* end of arc clk_ast_tlul_i_clk_src_io_val_o_redg_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "970007.125000, 970007.125000, 970007.250000, 970007.500000, 970008.375000",\ + "970007.250000, 970007.250000, 970007.375000, 970007.625000, 970008.500000",\ + "970007.250000, 970007.250000, 970007.375000, 970007.625000, 970008.500000",\ + "970007.500000, 970007.500000, 970007.625000, 970007.875000, 970008.750000",\ + "970007.750000, 970007.750000, 970007.875000, 970008.125000, 970009.000000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.022870, 0.084359, 0.238855, 0.766786, 2.469430",\ + "0.022870, 0.084359, 0.238855, 0.766786, 2.469430",\ + "0.022870, 0.084359, 0.238855, 0.766786, 2.469430",\ + "0.022870, 0.084359, 0.238855, 0.766786, 2.469430",\ + "0.022870, 0.084359, 0.238855, 0.766786, 2.469430"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "970010.187500, 970010.250000, 970010.312500, 970010.500000, 970011.125000",\ + "970010.312500, 970010.375000, 970010.437500, 970010.625000, 970011.250000",\ + "970010.437500, 970010.500000, 970010.562500, 970010.750000, 970011.375000",\ + "970010.687500, 970010.750000, 970010.812500, 970011.000000, 970011.625000",\ + "970010.937500, 970011.000000, 970011.062500, 970011.250000, 970011.875000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.028495, 0.070786, 0.167370, 0.515896, 1.652424",\ + "0.028495, 0.070786, 0.167370, 0.515896, 1.652424",\ + "0.028495, 0.070786, 0.167370, 0.515896, 1.652424",\ + "0.028495, 0.070786, 0.167370, 0.515896, 1.652424",\ + "0.028495, 0.070786, 0.167370, 0.515896, 1.652424"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_io_val_o_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "380000.437500, 380000.500000, 380000.562500, 380000.843750, 380001.750000",\ + "380000.531250, 380000.593750, 380000.656250, 380000.937500, 380001.843750",\ + "380000.593750, 380000.656250, 380000.718750, 380001.000000, 380001.906250",\ + "380000.750000, 380000.812500, 380000.875000, 380001.156250, 380002.062500",\ + "380000.968750, 380001.031250, 380001.093750, 380001.375000, 380002.281250"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.021561, 0.083764, 0.238778, 0.757109, 2.460111",\ + "0.021561, 0.083764, 0.238778, 0.757109, 2.460111",\ + "0.021561, 0.083764, 0.238778, 0.757109, 2.460111",\ + "0.021561, 0.083764, 0.238778, 0.757109, 2.460111",\ + "0.021561, 0.083764, 0.238778, 0.757109, 2.460111"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "380001.875000, 380001.906250, 380001.968750, 380002.156250, 380002.781250",\ + "380001.968750, 380002.000000, 380002.062500, 380002.250000, 380002.875000",\ + "380002.062500, 380002.093750, 380002.156250, 380002.343750, 380002.968750",\ + "380002.250000, 380002.281250, 380002.343750, 380002.531250, 380003.156250",\ + "380002.500000, 380002.531250, 380002.593750, 380002.781250, 380003.406250"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.025902, 0.068641, 0.165825, 0.512797, 1.652262",\ + "0.025902, 0.068641, 0.165825, 0.512797, 1.652262",\ + "0.025902, 0.068641, 0.165825, 0.512797, 1.652262",\ + "0.025902, 0.068641, 0.165825, 0.512797, 1.652262",\ + "0.025902, 0.068641, 0.165825, 0.512797, 1.652262"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_io_val_o_una_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "970007.125000, 970007.187500, 970007.250000, 970007.437500, 970008.062500",\ + "970007.250000, 970007.312500, 970007.375000, 970007.562500, 970008.187500",\ + "970007.250000, 970007.312500, 970007.375000, 970007.562500, 970008.187500",\ + "970007.500000, 970007.562500, 970007.625000, 970007.812500, 970008.437500",\ + "970007.750000, 970007.812500, 970007.875000, 970008.062500, 970008.687500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.028495, 0.070786, 0.167370, 0.515896, 1.652424",\ + "0.028495, 0.070786, 0.167370, 0.515896, 1.652424",\ + "0.028495, 0.070786, 0.167370, 0.515896, 1.652424",\ + "0.028495, 0.070786, 0.167370, 0.515896, 1.652424",\ + "0.028495, 0.070786, 0.167370, 0.515896, 1.652424"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "970010.187500, 970010.250000, 970010.312500, 970010.625000, 970011.500000",\ + "970010.312500, 970010.375000, 970010.437500, 970010.750000, 970011.625000",\ + "970010.437500, 970010.500000, 970010.562500, 970010.875000, 970011.750000",\ + "970010.687500, 970010.750000, 970010.812500, 970011.125000, 970012.000000",\ + "970010.937500, 970011.000000, 970011.062500, 970011.375000, 970012.250000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.022870, 0.084359, 0.238855, 0.766786, 2.469430",\ + "0.022870, 0.084359, 0.238855, 0.766786, 2.469430",\ + "0.022870, 0.084359, 0.238855, 0.766786, 2.469430",\ + "0.022870, 0.084359, 0.238855, 0.766786, 2.469430",\ + "0.022870, 0.084359, 0.238855, 0.766786, 2.469430"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_io_val_o_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "380000.500000, 380000.531250, 380000.593750, 380000.781250, 380001.406250",\ + "380000.593750, 380000.625000, 380000.687500, 380000.875000, 380001.500000",\ + "380000.656250, 380000.687500, 380000.750000, 380000.937500, 380001.562500",\ + "380000.812500, 380000.843750, 380000.906250, 380001.093750, 380001.718750",\ + "380001.031250, 380001.062500, 380001.125000, 380001.312500, 380001.937500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.025902, 0.068641, 0.165825, 0.512797, 1.652262",\ + "0.025902, 0.068641, 0.165825, 0.512797, 1.652262",\ + "0.025902, 0.068641, 0.165825, 0.512797, 1.652262",\ + "0.025902, 0.068641, 0.165825, 0.512797, 1.652262",\ + "0.025902, 0.068641, 0.165825, 0.512797, 1.652262"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "380001.906250, 380001.937500, 380002.031250, 380002.281250, 380003.187500",\ + "380002.000000, 380002.031250, 380002.125000, 380002.375000, 380003.281250",\ + "380002.093750, 380002.125000, 380002.218750, 380002.468750, 380003.375000",\ + "380002.281250, 380002.312500, 380002.406250, 380002.656250, 380003.562500",\ + "380002.531250, 380002.562500, 380002.656250, 380002.906250, 380003.812500"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.021561, 0.083764, 0.238778, 0.757109, 2.460111",\ + "0.021561, 0.083764, 0.238778, 0.757109, 2.460111",\ + "0.021561, 0.083764, 0.238778, 0.757109, 2.460111",\ + "0.021561, 0.083764, 0.238778, 0.757109, 2.460111",\ + "0.021561, 0.083764, 0.238778, 0.757109, 2.460111"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_io_val_o_inv_min*/ + + timing () { + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "590008.562500, 590008.625000, 590008.687500, 590009.000000, 590009.875000",\ + "590008.687500, 590008.750000, 590008.812500, 590009.125000, 590010.000000",\ + "590008.687500, 590008.750000, 590008.812500, 590009.125000, 590010.000000",\ + "590008.812500, 590008.875000, 590008.937500, 590009.250000, 590010.125000",\ + "590009.062500, 590009.125000, 590009.187500, 590009.500000, 590010.375000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.022871, 0.084359, 0.238855, 0.766810, 2.469430",\ + "0.022871, 0.084359, 0.238855, 0.766810, 2.469430",\ + "0.022871, 0.084359, 0.238855, 0.766810, 2.469430",\ + "0.022871, 0.084359, 0.238855, 0.766810, 2.469430",\ + "0.022871, 0.084359, 0.238855, 0.766810, 2.469430"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "590006.875000, 590006.937500, 590007.000000, 590007.187500, 590007.812500",\ + "590007.000000, 590007.062500, 590007.125000, 590007.312500, 590007.937500",\ + "590007.125000, 590007.187500, 590007.250000, 590007.437500, 590008.062500",\ + "590007.250000, 590007.312500, 590007.375000, 590007.562500, 590008.187500",\ + "590007.625000, 590007.687500, 590007.750000, 590007.937500, 590008.562500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.028495, 0.070786, 0.167370, 0.515903, 1.652424",\ + "0.028495, 0.070786, 0.167370, 0.515903, 1.652424",\ + "0.028495, 0.070786, 0.167370, 0.515903, 1.652424",\ + "0.028495, 0.070786, 0.167370, 0.515903, 1.652424",\ + "0.028495, 0.070786, 0.167370, 0.515903, 1.652424"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_io_val_o_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "590008.375000, 590008.437500, 590008.500000, 590008.812500, 590009.687500",\ + "590008.375000, 590008.437500, 590008.500000, 590008.812500, 590009.687500",\ + "590008.500000, 590008.562500, 590008.625000, 590008.937500, 590009.812500",\ + "590008.625000, 590008.687500, 590008.750000, 590009.062500, 590009.937500",\ + "590008.875000, 590008.937500, 590009.000000, 590009.312500, 590010.187500"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.022032, 0.083764, 0.238625, 0.755849, 2.465788",\ + "0.022032, 0.083764, 0.238625, 0.755849, 2.465788",\ + "0.022032, 0.083764, 0.238625, 0.755849, 2.465788",\ + "0.022032, 0.083764, 0.238625, 0.755849, 2.465788",\ + "0.022032, 0.083764, 0.238625, 0.755849, 2.465788"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "590006.750000, 590006.750000, 590006.812500, 590007.000000, 590007.625000",\ + "590006.875000, 590006.875000, 590006.937500, 590007.125000, 590007.750000",\ + "590007.000000, 590007.000000, 590007.062500, 590007.250000, 590007.875000",\ + "590007.125000, 590007.125000, 590007.187500, 590007.375000, 590008.000000",\ + "590007.375000, 590007.375000, 590007.437500, 590007.625000, 590008.250000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.026015, 0.068726, 0.165865, 0.510718, 1.651078",\ + "0.026015, 0.068726, 0.165865, 0.510718, 1.651078",\ + "0.026015, 0.068726, 0.165865, 0.510718, 1.651078",\ + "0.026015, 0.068726, 0.165865, 0.510718, 1.651078",\ + "0.026015, 0.068726, 0.165865, 0.510718, 1.651078"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_io_val_o_una_min*/ + + timing () { + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "590008.562500, 590008.625000, 590008.687500, 590008.875000, 590009.500000",\ + "590008.687500, 590008.750000, 590008.812500, 590009.000000, 590009.625000",\ + "590008.687500, 590008.750000, 590008.812500, 590009.000000, 590009.625000",\ + "590008.812500, 590008.875000, 590008.937500, 590009.125000, 590009.750000",\ + "590009.062500, 590009.125000, 590009.187500, 590009.375000, 590010.000000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.028495, 0.070786, 0.167370, 0.515903, 1.652424",\ + "0.028495, 0.070786, 0.167370, 0.515903, 1.652424",\ + "0.028495, 0.070786, 0.167370, 0.515903, 1.652424",\ + "0.028495, 0.070786, 0.167370, 0.515903, 1.652424",\ + "0.028495, 0.070786, 0.167370, 0.515903, 1.652424"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "590006.875000, 590006.875000, 590007.000000, 590007.250000, 590008.125000",\ + "590007.000000, 590007.000000, 590007.125000, 590007.375000, 590008.250000",\ + "590007.125000, 590007.125000, 590007.250000, 590007.500000, 590008.375000",\ + "590007.250000, 590007.250000, 590007.375000, 590007.625000, 590008.500000",\ + "590007.625000, 590007.625000, 590007.750000, 590008.000000, 590008.875000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.022871, 0.084359, 0.238855, 0.766810, 2.469430",\ + "0.022871, 0.084359, 0.238855, 0.766810, 2.469430",\ + "0.022871, 0.084359, 0.238855, 0.766810, 2.469430",\ + "0.022871, 0.084359, 0.238855, 0.766810, 2.469430",\ + "0.022871, 0.084359, 0.238855, 0.766810, 2.469430"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_io_val_o_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "590008.562500, 590008.625000, 590008.687500, 590008.875000, 590009.500000",\ + "590008.562500, 590008.625000, 590008.687500, 590008.875000, 590009.500000",\ + "590008.687500, 590008.750000, 590008.812500, 590009.000000, 590009.625000",\ + "590008.812500, 590008.875000, 590008.937500, 590009.125000, 590009.750000",\ + "590009.062500, 590009.125000, 590009.187500, 590009.375000, 590010.000000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.026015, 0.068726, 0.165865, 0.510718, 1.651078",\ + "0.026015, 0.068726, 0.165865, 0.510718, 1.651078",\ + "0.026015, 0.068726, 0.165865, 0.510718, 1.651078",\ + "0.026015, 0.068726, 0.165865, 0.510718, 1.651078",\ + "0.026015, 0.068726, 0.165865, 0.510718, 1.651078"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "590006.875000, 590006.875000, 590007.000000, 590007.250000, 590008.125000",\ + "590007.000000, 590007.000000, 590007.125000, 590007.375000, 590008.250000",\ + "590007.125000, 590007.125000, 590007.250000, 590007.500000, 590008.375000",\ + "590007.250000, 590007.250000, 590007.375000, 590007.625000, 590008.500000",\ + "590007.500000, 590007.500000, 590007.625000, 590007.875000, 590008.750000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.022032, 0.083764, 0.238625, 0.755849, 2.465788",\ + "0.022032, 0.083764, 0.238625, 0.755849, 2.465788",\ + "0.022032, 0.083764, 0.238625, 0.755849, 2.465788",\ + "0.022032, 0.083764, 0.238625, 0.755849, 2.465788",\ + "0.022032, 0.083764, 0.238625, 0.755849, 2.465788"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_io_val_o_inv_min*/ + +} /* end of pin clk_src_io_val_o */ +bus ( clk_src_io_48m_o ) { + + bus_type : BUS4_type6 ; + direction : output ; + +pin("clk_src_io_48m_o[3]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.161713 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : clk_src_io_48m_o[3]; + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.100843, 0.266735, 0.427088, 0.747616, 1.388635",\ + "0.184687, 0.350464, 0.510809, 0.831717, 1.473578",\ + "0.260267, 0.426010, 0.586434, 0.907636, 1.550114",\ + "0.386507, 0.552662, 0.713534, 1.034573, 1.676504",\ + "0.580400, 0.747044, 0.907773, 1.228098, 1.868510"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015579, 0.316961, 0.624670, 1.238691, 2.466601",\ + "0.015665, 0.316961, 0.624670, 1.238691, 2.466601",\ + "0.015665, 0.317088, 0.625771, 1.239746, 2.466601",\ + "0.015838, 0.317088, 0.625771, 1.239746, 2.466601",\ + "0.016716, 0.317340, 0.625771, 1.239746, 2.466601"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.088041, 0.202376, 0.303813, 0.506089, 0.910516",\ + "0.168483, 0.282824, 0.383745, 0.585711, 0.989669",\ + "0.247358, 0.362640, 0.463376, 0.664815, 1.067688",\ + "0.380658, 0.500049, 0.601022, 0.802517, 1.205414",\ + "0.586485, 0.719001, 0.819955, 1.021830, 1.425575"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015700, 0.193950, 0.379890, 0.747742, 1.482887",\ + "0.016044, 0.193950, 0.379890, 0.747742, 1.485202",\ + "0.017520, 0.193950, 0.379890, 0.747742, 1.485202",\ + "0.022344, 0.194037, 0.379890, 0.747742, 1.485202",\ + "0.034639, 0.196727, 0.379890, 0.748439, 1.491839"); + } + + } /* end of arc clk_ast_ext_i_clk_src_io_48m_o[3]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.100718, 0.266618, 0.426903, 0.747412, 1.388420",\ + "0.184686, 0.350463, 0.510806, 0.831715, 1.473578",\ + "0.260208, 0.425985, 0.586426, 0.907607, 1.550030",\ + "0.386259, 0.552119, 0.712336, 1.032993, 1.674352",\ + "0.580173, 0.746795, 0.907585, 1.227594, 1.867283"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015496, 0.316821, 0.622606, 1.236473, 2.462725",\ + "0.015496, 0.316821, 0.622606, 1.236473, 2.462725",\ + "0.015496, 0.316929, 0.622606, 1.236473, 2.462725",\ + "0.015814, 0.316929, 0.622606, 1.236473, 2.462725",\ + "0.016700, 0.316929, 0.623370, 1.236473, 2.462725"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.087868, 0.202376, 0.303809, 0.506029, 0.910334",\ + "0.168483, 0.282824, 0.383745, 0.585711, 0.989669",\ + "0.247358, 0.362640, 0.463376, 0.664779, 1.067573",\ + "0.380658, 0.500049, 0.601022, 0.802517, 1.205414",\ + "0.586485, 0.718955, 0.819794, 1.021516, 1.424967"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015619, 0.192979, 0.376641, 0.744531, 1.480142",\ + "0.016032, 0.192979, 0.376641, 0.744531, 1.480142",\ + "0.017339, 0.192979, 0.376641, 0.744531, 1.480142",\ + "0.022190, 0.193551, 0.376842, 0.744531, 1.480142",\ + "0.033893, 0.196557, 0.377640, 0.746288, 1.484937"); + } + + } /* end of arc clk_ast_ext_i_clk_src_io_48m_o[3]_redg_min*/ + + timing () { + related_pin : "clk_src_io_o" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.103995, 0.269872, 0.430200, 0.750758, 1.391853",\ + "0.158337, 0.324154, 0.484388, 0.804979, 1.446186",\ + "0.282603, 0.448419, 0.608923, 0.930096, 1.572477",\ + "0.334665, 0.500651, 0.661339, 0.982445, 1.624600",\ + "0.580400, 0.747044, 0.907773, 1.228098, 1.868510"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015542, 0.317035, 0.624600, 1.238588, 2.466325",\ + "0.015645, 0.317035, 0.624600, 1.238588, 2.466325",\ + "0.015645, 0.317066, 0.625211, 1.239292, 2.466325",\ + "0.015655, 0.317066, 0.625211, 1.239292, 2.466325",\ + "0.016716, 0.317340, 0.625211, 1.239292, 2.466325"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.090477, 0.204718, 0.305888, 0.507773, 0.911447",\ + "0.141442, 0.255688, 0.356617, 0.558511, 0.962305",\ + "0.270943, 0.386953, 0.487730, 0.689180, 1.092056",\ + "0.325917, 0.443620, 0.544496, 0.745968, 1.148855",\ + "0.586485, 0.719001, 0.819955, 1.021830, 1.425575"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015734, 0.193610, 0.378735, 0.747021, 1.483183",\ + "0.015916, 0.193610, 0.378735, 0.747293, 1.484513",\ + "0.018374, 0.193610, 0.378735, 0.747293, 1.484513",\ + "0.020363, 0.193614, 0.378735, 0.747293, 1.484513",\ + "0.034639, 0.196727, 0.378735, 0.748439, 1.491839"); + } + + } /* end of arc clk_src_io_o_clk_src_io_48m_o[3]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_src_io_o" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.103875, 0.269735, 0.430056, 0.750620, 1.391729",\ + "0.158336, 0.324133, 0.484382, 0.804893, 1.445917",\ + "0.282510, 0.448302, 0.608704, 0.929792, 1.572026",\ + "0.333572, 0.499397, 0.659708, 0.980584, 1.622387",\ + "0.580173, 0.746795, 0.907585, 1.227594, 1.867283"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015480, 0.316838, 0.623370, 1.236473, 2.462725",\ + "0.015480, 0.316838, 0.623370, 1.236473, 2.462725",\ + "0.015480, 0.316929, 0.623370, 1.236473, 2.462725",\ + "0.015652, 0.316929, 0.623370, 1.236473, 2.462725",\ + "0.016700, 0.316929, 0.623370, 1.236473, 2.462725"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.090378, 0.204717, 0.305882, 0.507735, 0.911343",\ + "0.141442, 0.255688, 0.356617, 0.558510, 0.962304",\ + "0.270943, 0.386953, 0.487730, 0.689150, 1.091961",\ + "0.324941, 0.442615, 0.543488, 0.744945, 1.147798",\ + "0.586485, 0.718955, 0.819794, 1.021516, 1.424967"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015687, 0.193080, 0.376676, 0.744928, 1.481536",\ + "0.015912, 0.193080, 0.376676, 0.744928, 1.481536",\ + "0.018197, 0.193080, 0.376676, 0.744928, 1.481536",\ + "0.020162, 0.193312, 0.376758, 0.744928, 1.481536",\ + "0.033893, 0.196557, 0.377640, 0.746288, 1.484937"); + } + + } /* end of arc clk_src_io_o_clk_src_io_48m_o[3]_redg_min*/ + +} /* end of pin clk_src_io_48m_o[3] */ + +pin("clk_src_io_48m_o[2]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.158177 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : clk_src_io_48m_o[2]; + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.055481, 0.185725, 0.392886, 0.714270, 1.356390",\ + "0.142013, 0.273097, 0.480288, 0.802449, 1.446276",\ + "0.227644, 0.367997, 0.574907, 0.896875, 1.540369",\ + "0.372058, 0.538899, 0.745297, 1.066605, 1.708810",\ + "0.601931, 0.834236, 1.042645, 1.363437, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.021797, 0.238359, 0.631876, 1.247087, 2.477274",\ + "0.025516, 0.238359, 0.631876, 1.247087, 2.477274",\ + "0.039138, 0.240277, 0.631876, 1.247087, 2.477473",\ + "0.067159, 0.248694, 0.631876, 1.247087, 2.479640",\ + "0.123088, 0.289704, 0.642858, 1.251241, 2.479640"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.082179, 0.183018, 0.316461, 0.522191, 0.932963",\ + "0.170164, 0.270956, 0.404436, 0.610175, 1.020954",\ + "0.251445, 0.351944, 0.485256, 0.690977, 1.101771",\ + "0.388999, 0.491163, 0.624361, 0.829801, 1.240010",\ + "0.607343, 0.718683, 0.852150, 1.057410, 1.467133"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.025565, 0.151628, 0.387851, 0.763293, 1.515348",\ + "0.025565, 0.151804, 0.389259, 0.763293, 1.515348",\ + "0.025976, 0.151804, 0.389479, 0.764390, 1.515348",\ + "0.029120, 0.151804, 0.389479, 0.764390, 1.515348",\ + "0.041734, 0.154598, 0.389479, 0.764390, 1.515348"); + } + + } /* end of arc clk_ast_ext_i_clk_src_io_48m_o[2]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.055478, 0.185724, 0.392885, 0.714263, 1.356368",\ + "0.141644, 0.273073, 0.480017, 0.801359, 1.443459",\ + "0.227644, 0.367995, 0.574890, 0.896861, 1.540369",\ + "0.372055, 0.538895, 0.745296, 1.066605, 1.708810",\ + "0.601899, 0.834203, 1.042596, 1.363402, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.021795, 0.238265, 0.630524, 1.245754, 2.477107",\ + "0.025501, 0.238265, 0.630524, 1.245754, 2.477170",\ + "0.039138, 0.240263, 0.630524, 1.245754, 2.477473",\ + "0.067158, 0.248694, 0.630752, 1.245754, 2.478674",\ + "0.122913, 0.289395, 0.639350, 1.248196, 2.478674"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.082179, 0.183018, 0.316461, 0.522190, 0.932959",\ + "0.170151, 0.270913, 0.404355, 0.610080, 1.020840",\ + "0.251186, 0.351686, 0.484981, 0.690703, 1.101507",\ + "0.388979, 0.491150, 0.624343, 0.829707, 1.239752",\ + "0.607308, 0.718634, 0.852099, 1.057372, 1.467127"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.025557, 0.151128, 0.387354, 0.761934, 1.510661",\ + "0.025557, 0.151128, 0.387354, 0.761934, 1.510661",\ + "0.025965, 0.151128, 0.387354, 0.761934, 1.511090",\ + "0.029101, 0.151585, 0.387354, 0.761934, 1.511090",\ + "0.041668, 0.154530, 0.388178, 0.761934, 1.511090"); + } + + } /* end of arc clk_ast_ext_i_clk_src_io_48m_o[2]_redg_min*/ + + timing () { + related_pin : "clk_src_io_o" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.058414, 0.188667, 0.395813, 0.717110, 1.359045",\ + "0.112550, 0.243041, 0.450135, 0.772138, 1.415649",\ + "0.253196, 0.398235, 0.605055, 0.926906, 1.570171",\ + "0.312752, 0.468715, 0.675324, 0.996903, 1.639637",\ + "0.601931, 0.834236, 1.042645, 1.363437, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.021790, 0.238360, 0.631894, 1.247121, 2.477336",\ + "0.023317, 0.238360, 0.631894, 1.247121, 2.477336",\ + "0.044096, 0.241766, 0.631894, 1.247121, 2.477920",\ + "0.055652, 0.245238, 0.631894, 1.247121, 2.478962",\ + "0.123088, 0.289704, 0.642858, 1.251241, 2.479640"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.085404, 0.186224, 0.319679, 0.525413, 0.936188",\ + "0.141978, 0.242754, 0.376239, 0.581985, 0.992777",\ + "0.275783, 0.376576, 0.509868, 0.715539, 1.126231",\ + "0.332511, 0.433991, 0.567236, 0.772791, 1.183241",\ + "0.607343, 0.718683, 0.852150, 1.057410, 1.467133"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.025646, 0.151693, 0.388430, 0.763132, 1.513362",\ + "0.025646, 0.151849, 0.389568, 0.763815, 1.513362",\ + "0.026529, 0.151849, 0.389568, 0.764056, 1.513362",\ + "0.027825, 0.151849, 0.389568, 0.764056, 1.513362",\ + "0.041734, 0.154598, 0.389568, 0.764056, 1.513362"); + } + + } /* end of arc clk_src_io_o_clk_src_io_48m_o[2]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_src_io_o" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.058410, 0.188665, 0.395812, 0.717100, 1.359014",\ + "0.112399, 0.243028, 0.450025, 0.771635, 1.414310",\ + "0.253195, 0.398233, 0.605040, 0.926895, 1.570171",\ + "0.311693, 0.467461, 0.674069, 0.995655, 1.638404",\ + "0.601899, 0.834203, 1.042596, 1.363402, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.021782, 0.238225, 0.630549, 1.245808, 2.476689",\ + "0.023311, 0.238225, 0.630549, 1.245808, 2.476689",\ + "0.044096, 0.241755, 0.630564, 1.245808, 2.477789",\ + "0.055446, 0.245170, 0.630656, 1.245808, 2.478512",\ + "0.122913, 0.289395, 0.639350, 1.248196, 2.478674"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.085404, 0.186224, 0.319679, 0.525413, 0.936188",\ + "0.141970, 0.242733, 0.376196, 0.581868, 0.992503",\ + "0.275567, 0.376362, 0.509639, 0.715298, 1.125968",\ + "0.331384, 0.432856, 0.566092, 0.771606, 1.181968",\ + "0.607308, 0.718634, 0.852099, 1.057372, 1.467127"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.025646, 0.151208, 0.387784, 0.761934, 1.511090",\ + "0.025646, 0.151208, 0.387784, 0.761934, 1.511090",\ + "0.026523, 0.151208, 0.387784, 0.761934, 1.511090",\ + "0.027795, 0.151394, 0.387784, 0.761934, 1.511090",\ + "0.041668, 0.154530, 0.388178, 0.761934, 1.511090"); + } + + } /* end of arc clk_src_io_o_clk_src_io_48m_o[2]_redg_min*/ + +} /* end of pin clk_src_io_48m_o[2] */ + +pin("clk_src_io_48m_o[1]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.158177 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : clk_src_io_48m_o[1]; + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.055481, 0.185725, 0.392886, 0.714270, 1.356390",\ + "0.142013, 0.273097, 0.480288, 0.802449, 1.446276",\ + "0.227644, 0.367997, 0.574907, 0.896875, 1.540369",\ + "0.372058, 0.538899, 0.745297, 1.066605, 1.708810",\ + "0.601931, 0.834236, 1.042645, 1.363437, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.021797, 0.238359, 0.631876, 1.247087, 2.477274",\ + "0.025516, 0.238359, 0.631876, 1.247087, 2.477274",\ + "0.039138, 0.240277, 0.631876, 1.247087, 2.477473",\ + "0.067159, 0.248694, 0.631876, 1.247087, 2.479640",\ + "0.123088, 0.289704, 0.642858, 1.251241, 2.479640"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.082179, 0.183018, 0.316461, 0.522191, 0.932963",\ + "0.170164, 0.270956, 0.404436, 0.610175, 1.020954",\ + "0.251445, 0.351944, 0.485256, 0.690977, 1.101771",\ + "0.388999, 0.491163, 0.624361, 0.829801, 1.240010",\ + "0.607343, 0.718683, 0.852150, 1.057410, 1.467133"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.025565, 0.151628, 0.387851, 0.763293, 1.515348",\ + "0.025565, 0.151804, 0.389259, 0.763293, 1.515348",\ + "0.025976, 0.151804, 0.389479, 0.764390, 1.515348",\ + "0.029120, 0.151804, 0.389479, 0.764390, 1.515348",\ + "0.041734, 0.154598, 0.389479, 0.764390, 1.515348"); + } + + } /* end of arc clk_ast_ext_i_clk_src_io_48m_o[1]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.055478, 0.185724, 0.392885, 0.714263, 1.356368",\ + "0.141644, 0.273073, 0.480017, 0.801359, 1.443459",\ + "0.227644, 0.367995, 0.574890, 0.896861, 1.540369",\ + "0.372055, 0.538895, 0.745296, 1.066605, 1.708810",\ + "0.601899, 0.834203, 1.042596, 1.363402, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.021795, 0.238265, 0.630524, 1.245754, 2.477107",\ + "0.025501, 0.238265, 0.630524, 1.245754, 2.477170",\ + "0.039138, 0.240263, 0.630524, 1.245754, 2.477473",\ + "0.067158, 0.248694, 0.630752, 1.245754, 2.478674",\ + "0.122913, 0.289395, 0.639350, 1.248196, 2.478674"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.082179, 0.183018, 0.316461, 0.522190, 0.932959",\ + "0.170151, 0.270913, 0.404355, 0.610080, 1.020840",\ + "0.251186, 0.351686, 0.484981, 0.690703, 1.101507",\ + "0.388979, 0.491150, 0.624343, 0.829707, 1.239752",\ + "0.607308, 0.718634, 0.852099, 1.057372, 1.467127"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.025557, 0.151128, 0.387354, 0.761934, 1.510661",\ + "0.025557, 0.151128, 0.387354, 0.761934, 1.510661",\ + "0.025965, 0.151128, 0.387354, 0.761934, 1.511090",\ + "0.029101, 0.151585, 0.387354, 0.761934, 1.511090",\ + "0.041668, 0.154530, 0.388178, 0.761934, 1.511090"); + } + + } /* end of arc clk_ast_ext_i_clk_src_io_48m_o[1]_redg_min*/ + + timing () { + related_pin : "clk_src_io_o" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.058414, 0.188667, 0.395813, 0.717110, 1.359045",\ + "0.112550, 0.243041, 0.450135, 0.772138, 1.415649",\ + "0.253196, 0.398235, 0.605055, 0.926906, 1.570171",\ + "0.312752, 0.468715, 0.675324, 0.996903, 1.639637",\ + "0.601931, 0.834236, 1.042645, 1.363437, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.021790, 0.238360, 0.631894, 1.247121, 2.477336",\ + "0.023317, 0.238360, 0.631894, 1.247121, 2.477336",\ + "0.044096, 0.241766, 0.631894, 1.247121, 2.477920",\ + "0.055652, 0.245238, 0.631894, 1.247121, 2.478962",\ + "0.123088, 0.289704, 0.642858, 1.251241, 2.479640"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.085404, 0.186224, 0.319679, 0.525413, 0.936188",\ + "0.141978, 0.242754, 0.376239, 0.581985, 0.992777",\ + "0.275783, 0.376576, 0.509868, 0.715539, 1.126231",\ + "0.332511, 0.433991, 0.567236, 0.772791, 1.183241",\ + "0.607343, 0.718683, 0.852150, 1.057410, 1.467133"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.025646, 0.151693, 0.388430, 0.763132, 1.513362",\ + "0.025646, 0.151849, 0.389568, 0.763815, 1.513362",\ + "0.026529, 0.151849, 0.389568, 0.764056, 1.513362",\ + "0.027825, 0.151849, 0.389568, 0.764056, 1.513362",\ + "0.041734, 0.154598, 0.389568, 0.764056, 1.513362"); + } + + } /* end of arc clk_src_io_o_clk_src_io_48m_o[1]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_src_io_o" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.058410, 0.188665, 0.395812, 0.717100, 1.359014",\ + "0.112399, 0.243028, 0.450025, 0.771635, 1.414310",\ + "0.253195, 0.398233, 0.605040, 0.926895, 1.570171",\ + "0.311693, 0.467461, 0.674069, 0.995655, 1.638404",\ + "0.601899, 0.834203, 1.042596, 1.363402, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.021782, 0.238225, 0.630549, 1.245808, 2.476689",\ + "0.023311, 0.238225, 0.630549, 1.245808, 2.476689",\ + "0.044096, 0.241755, 0.630564, 1.245808, 2.477789",\ + "0.055446, 0.245170, 0.630656, 1.245808, 2.478512",\ + "0.122913, 0.289395, 0.639350, 1.248196, 2.478674"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.085404, 0.186224, 0.319679, 0.525413, 0.936188",\ + "0.141970, 0.242733, 0.376196, 0.581868, 0.992503",\ + "0.275567, 0.376362, 0.509639, 0.715298, 1.125968",\ + "0.331384, 0.432856, 0.566092, 0.771606, 1.181968",\ + "0.607308, 0.718634, 0.852099, 1.057372, 1.467127"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.025646, 0.151208, 0.387784, 0.761934, 1.511090",\ + "0.025646, 0.151208, 0.387784, 0.761934, 1.511090",\ + "0.026523, 0.151208, 0.387784, 0.761934, 1.511090",\ + "0.027795, 0.151394, 0.387784, 0.761934, 1.511090",\ + "0.041668, 0.154530, 0.388178, 0.761934, 1.511090"); + } + + } /* end of arc clk_src_io_o_clk_src_io_48m_o[1]_redg_min*/ + +} /* end of pin clk_src_io_48m_o[1] */ + +pin("clk_src_io_48m_o[0]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.161713 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : clk_src_io_48m_o[0]; + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.100843, 0.266735, 0.427088, 0.747616, 1.388635",\ + "0.184687, 0.350464, 0.510809, 0.831717, 1.473578",\ + "0.260267, 0.426010, 0.586434, 0.907636, 1.550114",\ + "0.386507, 0.552662, 0.713534, 1.034573, 1.676504",\ + "0.580400, 0.747044, 0.907773, 1.228098, 1.868510"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015579, 0.316961, 0.624670, 1.238691, 2.466601",\ + "0.015665, 0.316961, 0.624670, 1.238691, 2.466601",\ + "0.015665, 0.317088, 0.625771, 1.239746, 2.466601",\ + "0.015838, 0.317088, 0.625771, 1.239746, 2.466601",\ + "0.016716, 0.317340, 0.625771, 1.239746, 2.466601"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.088041, 0.202376, 0.303813, 0.506089, 0.910516",\ + "0.168483, 0.282824, 0.383745, 0.585711, 0.989669",\ + "0.247358, 0.362640, 0.463376, 0.664815, 1.067688",\ + "0.380658, 0.500049, 0.601022, 0.802517, 1.205414",\ + "0.586485, 0.719001, 0.819955, 1.021830, 1.425575"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015700, 0.193950, 0.379890, 0.747742, 1.482887",\ + "0.016044, 0.193950, 0.379890, 0.747742, 1.485202",\ + "0.017520, 0.193950, 0.379890, 0.747742, 1.485202",\ + "0.022344, 0.194037, 0.379890, 0.747742, 1.485202",\ + "0.034639, 0.196727, 0.379890, 0.748439, 1.491839"); + } + + } /* end of arc clk_ast_ext_i_clk_src_io_48m_o[0]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.100718, 0.266618, 0.426903, 0.747412, 1.388420",\ + "0.184686, 0.350463, 0.510806, 0.831715, 1.473578",\ + "0.260208, 0.425985, 0.586426, 0.907607, 1.550030",\ + "0.386259, 0.552119, 0.712336, 1.032993, 1.674352",\ + "0.580173, 0.746795, 0.907585, 1.227594, 1.867283"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015496, 0.316821, 0.622606, 1.236473, 2.462725",\ + "0.015496, 0.316821, 0.622606, 1.236473, 2.462725",\ + "0.015496, 0.316929, 0.622606, 1.236473, 2.462725",\ + "0.015814, 0.316929, 0.622606, 1.236473, 2.462725",\ + "0.016700, 0.316929, 0.623370, 1.236473, 2.462725"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.087868, 0.202376, 0.303809, 0.506029, 0.910334",\ + "0.168483, 0.282824, 0.383745, 0.585711, 0.989669",\ + "0.247358, 0.362640, 0.463376, 0.664779, 1.067573",\ + "0.380658, 0.500049, 0.601022, 0.802517, 1.205414",\ + "0.586485, 0.718955, 0.819794, 1.021516, 1.424967"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015619, 0.192979, 0.376641, 0.744531, 1.480142",\ + "0.016032, 0.192979, 0.376641, 0.744531, 1.480142",\ + "0.017339, 0.192979, 0.376641, 0.744531, 1.480142",\ + "0.022190, 0.193551, 0.376842, 0.744531, 1.480142",\ + "0.033893, 0.196557, 0.377640, 0.746288, 1.484937"); + } + + } /* end of arc clk_ast_ext_i_clk_src_io_48m_o[0]_redg_min*/ + + timing () { + related_pin : "clk_src_io_o" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.103995, 0.269872, 0.430200, 0.750758, 1.391853",\ + "0.158337, 0.324154, 0.484388, 0.804979, 1.446186",\ + "0.282603, 0.448419, 0.608923, 0.930096, 1.572477",\ + "0.334665, 0.500651, 0.661339, 0.982445, 1.624600",\ + "0.580400, 0.747044, 0.907773, 1.228098, 1.868510"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015542, 0.317035, 0.624600, 1.238588, 2.466325",\ + "0.015645, 0.317035, 0.624600, 1.238588, 2.466325",\ + "0.015645, 0.317066, 0.625211, 1.239292, 2.466325",\ + "0.015655, 0.317066, 0.625211, 1.239292, 2.466325",\ + "0.016716, 0.317340, 0.625211, 1.239292, 2.466325"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.090477, 0.204718, 0.305888, 0.507773, 0.911447",\ + "0.141442, 0.255688, 0.356617, 0.558511, 0.962305",\ + "0.270943, 0.386953, 0.487730, 0.689180, 1.092056",\ + "0.325917, 0.443620, 0.544496, 0.745968, 1.148855",\ + "0.586485, 0.719001, 0.819955, 1.021830, 1.425575"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015734, 0.193610, 0.378735, 0.747021, 1.483183",\ + "0.015916, 0.193610, 0.378735, 0.747293, 1.484513",\ + "0.018374, 0.193610, 0.378735, 0.747293, 1.484513",\ + "0.020363, 0.193614, 0.378735, 0.747293, 1.484513",\ + "0.034639, 0.196727, 0.378735, 0.748439, 1.491839"); + } + + } /* end of arc clk_src_io_o_clk_src_io_48m_o[0]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_src_io_o" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.103875, 0.269735, 0.430056, 0.750620, 1.391729",\ + "0.158336, 0.324133, 0.484382, 0.804893, 1.445917",\ + "0.282510, 0.448302, 0.608704, 0.929792, 1.572026",\ + "0.333572, 0.499397, 0.659708, 0.980584, 1.622387",\ + "0.580173, 0.746795, 0.907585, 1.227594, 1.867283"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015480, 0.316838, 0.623370, 1.236473, 2.462725",\ + "0.015480, 0.316838, 0.623370, 1.236473, 2.462725",\ + "0.015480, 0.316929, 0.623370, 1.236473, 2.462725",\ + "0.015652, 0.316929, 0.623370, 1.236473, 2.462725",\ + "0.016700, 0.316929, 0.623370, 1.236473, 2.462725"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.090378, 0.204717, 0.305882, 0.507735, 0.911343",\ + "0.141442, 0.255688, 0.356617, 0.558510, 0.962304",\ + "0.270943, 0.386953, 0.487730, 0.689150, 1.091961",\ + "0.324941, 0.442615, 0.543488, 0.744945, 1.147798",\ + "0.586485, 0.718955, 0.819794, 1.021516, 1.424967"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015687, 0.193080, 0.376676, 0.744928, 1.481536",\ + "0.015912, 0.193080, 0.376676, 0.744928, 1.481536",\ + "0.018197, 0.193080, 0.376676, 0.744928, 1.481536",\ + "0.020162, 0.193312, 0.376758, 0.744928, 1.481536",\ + "0.033893, 0.196557, 0.377640, 0.746288, 1.484937"); + } + + } /* end of arc clk_src_io_o_clk_src_io_48m_o[0]_redg_min*/ + +} /* end of pin clk_src_io_48m_o[0] */ +} /* end of bus clk_src_io_48m_o */ + +pin("usb_ref_pulse_i") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000498 ; + + /* Other user defined attributes. */ + original_pin : usb_ref_pulse_i; + timing () { + related_pin : "clk_ast_usb_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.601598, 0.562432, 0.511802, 0.512897, 0.526214",\ + "0.685611, 0.646445, 0.595815, 0.596911, 0.610227",\ + "0.776643, 0.737477, 0.686847, 0.687943, 0.701259",\ + "0.941188, 0.902022, 0.851392, 0.852488, 0.865804",\ + "1.218007, 1.178841, 1.128211, 1.129307, 1.142623"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.502275, 0.444594, 0.389492, 0.390588, 0.403904",\ + "0.590200, 0.532519, 0.477417, 0.478513, 0.491829",\ + "0.690598, 0.632917, 0.577816, 0.578911, 0.592227",\ + "0.875082, 0.817401, 0.762299, 0.763395, 0.776711",\ + "1.192023, 1.134342, 1.079240, 1.080336, 1.093652"); + } + + } /* end of arc clk_ast_usb_i_usb_ref_pulse_i_stupr*/ + + timing () { + related_pin : "clk_ast_usb_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.289933, -0.256850, -0.198215, -0.184587, -0.018969",\ + "-0.373947, -0.340864, -0.282229, -0.268602, -0.102983",\ + "-0.464983, -0.431900, -0.373265, -0.359637, -0.194019",\ + "-0.629535, -0.596452, -0.537817, -0.524189, -0.358571",\ + "-0.906192, -0.873109, -0.814474, -0.800846, -0.635228"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.244346, -0.193347, -0.096886, -0.078739, 0.141805",\ + "-0.332296, -0.281297, -0.184836, -0.166688, 0.053856",\ + "-0.432681, -0.381682, -0.285221, -0.267073, -0.046529",\ + "-0.616949, -0.565951, -0.469489, -0.451342, -0.230798",\ + "-0.933995, -0.882996, -0.786535, -0.768387, -0.547843"); + } + + } /* end of arc clk_ast_usb_i_usb_ref_pulse_i_hldr*/ + +} /* end of pin usb_ref_pulse_i */ + +pin("usb_ref_val_i") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000622 ; + + /* Other user defined attributes. */ + original_pin : usb_ref_val_i; + timing () { + related_pin : "clk_ast_usb_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.572947, 0.533781, 0.483152, 0.484247, 0.497563",\ + "0.655514, 0.616348, 0.565718, 0.566814, 0.580130",\ + "0.734317, 0.695151, 0.644522, 0.645617, 0.658933",\ + "0.870061, 0.830896, 0.780266, 0.781361, 0.794677",\ + "1.084318, 1.045152, 0.994522, 0.995618, 1.008934"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.471556, 0.413875, 0.358773, 0.359869, 0.373185",\ + "0.557541, 0.499860, 0.444758, 0.445854, 0.459170",\ + "0.648123, 0.590443, 0.535341, 0.536436, 0.549753",\ + "0.811397, 0.753716, 0.698614, 0.699710, 0.713026",\ + "1.086303, 1.028622, 0.973521, 0.974616, 0.987932"); + } + + } /* end of arc clk_ast_usb_i_usb_ref_val_i_stupr*/ + + timing () { + related_pin : "clk_ast_usb_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.261299, -0.228217, -0.169581, -0.155962, 0.009554",\ + "-0.343866, -0.310783, -0.252148, -0.238528, -0.073013",\ + "-0.422669, -0.389587, -0.330951, -0.317332, -0.151816",\ + "-0.558414, -0.525331, -0.466695, -0.453076, -0.287561",\ + "-0.772670, -0.739587, -0.680952, -0.667332, -0.501817"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.213704, -0.162701, -0.066223, -0.048077, 0.172450",\ + "-0.299689, -0.248686, -0.152209, -0.134063, 0.086465",\ + "-0.390272, -0.339269, -0.242791, -0.224645, -0.004118",\ + "-0.553545, -0.502542, -0.406065, -0.387919, -0.167392",\ + "-0.828451, -0.777448, -0.680971, -0.662825, -0.442298"); + } + + } /* end of arc clk_ast_usb_i_usb_ref_val_i_hldr*/ + +} /* end of pin usb_ref_val_i */ + +pin("clk_src_usb_en_i") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001677 ; + + /* Other user defined attributes. */ + original_pin : clk_src_usb_en_i; + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.200076, 0.146984, 0.107694, 0.090457, 0.087585",\ + "0.271588, 0.219415, 0.179927, 0.162045, 0.157577",\ + "0.363033, 0.310027, 0.270334, 0.252385, 0.247965",\ + "0.507780, 0.454308, 0.413646, 0.395357, 0.391106",\ + "0.811131, 0.757315, 0.714144, 0.694969, 0.691143"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.249331, 0.166333, 0.091045, 0.049669, 0.020498",\ + "0.324602, 0.241857, 0.166855, 0.126539, 0.100040",\ + "0.429418, 0.345854, 0.270221, 0.227986, 0.196782",\ + "0.605833, 0.521783, 0.445878, 0.397956, 0.350944",\ + "0.983325, 0.898854, 0.822917, 0.761117, 0.674795"); + } + + } /* end of arc clk_ast_ext_i_clk_src_usb_en_i_stupr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.096530, -0.053812, -0.018112, 0.032751, 0.135173",\ + "-0.166367, -0.123600, -0.088245, -0.037477, 0.065076",\ + "-0.251291, -0.208679, -0.174484, -0.124115, -0.021332",\ + "-0.373429, -0.330963, -0.299719, -0.251733, -0.152256",\ + "-0.620310, -0.578080, -0.553843, -0.512151, -0.422314"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.130907, -0.055165, 0.010770, 0.102409, 0.285045",\ + "-0.205839, -0.131127, -0.064641, 0.027653, 0.211502",\ + "-0.308157, -0.233980, -0.166224, -0.072248, 0.114884",\ + "-0.470591, -0.397956, -0.329423, -0.234665, -0.046227",\ + "-0.811364, -0.742478, -0.673228, -0.578223, -0.389923"); + } + + } /* end of arc clk_ast_ext_i_clk_src_usb_en_i_hldr*/ + +} /* end of pin clk_src_usb_en_i */ + +pin("clk_src_usb_o") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.069236 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : clk_src_usb_o; + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : falling_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "1.737872, 1.770095, 1.839437, 2.057034, 2.749000",\ + "1.737872, 1.770095, 1.839437, 2.057034, 2.749000",\ + "1.737872, 1.770095, 1.839437, 2.057034, 2.749000",\ + "1.737872, 1.770095, 1.839437, 2.057034, 2.749000",\ + "1.737872, 1.770095, 1.839437, 2.057034, 2.749000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.017599, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017599, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017599, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017599, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017599, 0.075142, 0.205270, 0.618216, 1.929571"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "1.568604, 1.612346, 1.706142, 2.005007, 2.947481",\ + "1.568604, 1.612346, 1.706142, 2.005007, 2.947481",\ + "1.568604, 1.612346, 1.706142, 2.005007, 2.947481",\ + "1.568604, 1.612346, 1.706142, 2.005007, 2.947481",\ + "1.568604, 1.612346, 1.706142, 2.005007, 2.947481"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.020388, 0.096008, 0.262833, 0.786379, 2.444935",\ + "0.020388, 0.096008, 0.262833, 0.786379, 2.444935",\ + "0.020388, 0.096008, 0.262833, 0.786379, 2.444935",\ + "0.020388, 0.096008, 0.262833, 0.786379, 2.444935",\ + "0.020388, 0.096008, 0.262833, 0.786379, 2.444935"); + } + + } /* end of arc clk_ast_ext_i_clk_src_usb_o_fedg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_ext_i" ; + timing_type : falling_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "1.093582, 1.125805, 1.195148, 1.412745, 2.104710",\ + "1.093582, 1.125805, 1.195148, 1.412745, 2.104710",\ + "1.093582, 1.125805, 1.195148, 1.412745, 2.104710",\ + "1.093582, 1.125805, 1.195148, 1.412745, 2.104710",\ + "1.093582, 1.125805, 1.195148, 1.412745, 2.104710"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "1.010551, 1.054292, 1.148088, 1.446953, 2.389427",\ + "1.010551, 1.054292, 1.148088, 1.446953, 2.389427",\ + "1.010551, 1.054292, 1.148088, 1.446953, 2.389427",\ + "1.010551, 1.054292, 1.148088, 1.446953, 2.389427",\ + "1.010551, 1.054292, 1.148088, 1.446953, 2.389427"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.020388, 0.096008, 0.262833, 0.786379, 2.444935",\ + "0.020388, 0.096008, 0.262833, 0.786379, 2.444935",\ + "0.020388, 0.096008, 0.262833, 0.786379, 2.444935",\ + "0.020388, 0.096008, 0.262833, 0.786379, 2.444935",\ + "0.020388, 0.096008, 0.262833, 0.786379, 2.444935"); + } + + } /* end of arc clk_ast_ext_i_clk_src_usb_o_fedg_min*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "1.101180, 1.133403, 1.202745, 1.420342, 2.112307",\ + "1.189325, 1.221548, 1.290891, 1.508488, 2.200453",\ + "1.285347, 1.317570, 1.386912, 1.604509, 2.296474",\ + "1.453311, 1.485534, 1.554876, 1.772473, 2.464438",\ + "1.727352, 1.759575, 1.828917, 2.046515, 2.738480"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.017599, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017599, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017599, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017599, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017599, 0.075142, 0.205270, 0.618216, 1.929571"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "1.029003, 1.072744, 1.166540, 1.465405, 2.407880",\ + "1.116853, 1.160595, 1.254391, 1.553256, 2.495730",\ + "1.198296, 1.242037, 1.335833, 1.634698, 2.577173",\ + "1.337780, 1.381521, 1.475317, 1.774182, 2.716657",\ + "1.565882, 1.609623, 1.703419, 2.002285, 2.944759"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.020388, 0.096008, 0.262833, 0.786379, 2.444935",\ + "0.020388, 0.096008, 0.262833, 0.786379, 2.444935",\ + "0.020388, 0.096008, 0.262833, 0.786379, 2.444935",\ + "0.020388, 0.096008, 0.262833, 0.786379, 2.444935",\ + "0.020388, 0.096008, 0.262833, 0.786379, 2.444935"); + } + + } /* end of arc clk_ast_ext_i_clk_src_usb_o_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "1.100277, 1.132500, 1.201842, 1.419439, 2.111404",\ + "1.188403, 1.220626, 1.289968, 1.507565, 2.199530",\ + "1.284444, 1.316668, 1.386010, 1.603607, 2.295572",\ + "1.452407, 1.484630, 1.553972, 1.771569, 2.463535",\ + "1.726368, 1.758591, 1.827933, 2.045531, 2.737496"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "1.026546, 1.070287, 1.164084, 1.462948, 2.405423",\ + "1.114365, 1.158106, 1.251902, 1.550767, 2.493242",\ + "1.195575, 1.239316, 1.333112, 1.631977, 2.574452",\ + "1.335306, 1.379047, 1.472843, 1.771708, 2.714183",\ + "1.563376, 1.607117, 1.700913, 1.999778, 2.942253"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.020388, 0.096008, 0.262833, 0.786379, 2.444935",\ + "0.020388, 0.096008, 0.262833, 0.786379, 2.444935",\ + "0.020388, 0.096008, 0.262833, 0.786379, 2.444935",\ + "0.020388, 0.096008, 0.262833, 0.786379, 2.444935",\ + "0.020388, 0.096008, 0.262833, 0.786379, 2.444935"); + } + + } /* end of arc clk_ast_ext_i_clk_src_usb_o_redg_min*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "1.641426, 1.673649, 1.742991, 1.960589, 2.652554",\ + "1.720995, 1.753218, 1.822561, 2.040158, 2.732123",\ + "1.800790, 1.833013, 1.902355, 2.119953, 2.811918",\ + "1.930632, 1.962856, 2.032198, 2.249795, 2.941760",\ + "2.130731, 2.162954, 2.232296, 2.449894, 3.141859"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.017599, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017599, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017599, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017599, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017599, 0.075142, 0.205270, 0.618216, 1.929571"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "1.423514, 1.467255, 1.561051, 1.859916, 2.802391",\ + "1.512686, 1.556427, 1.650223, 1.949089, 2.891563",\ + "1.603640, 1.647381, 1.741178, 2.040043, 2.982517",\ + "1.758735, 1.802476, 1.896272, 2.195137, 3.137612",\ + "2.011581, 2.055323, 2.149119, 2.447984, 3.390458"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.020388, 0.096008, 0.262833, 0.786379, 2.444935",\ + "0.020388, 0.096008, 0.262833, 0.786379, 2.444935",\ + "0.020388, 0.096008, 0.262833, 0.786379, 2.444935",\ + "0.020388, 0.096008, 0.262833, 0.786379, 2.444935",\ + "0.020388, 0.096008, 0.262833, 0.786379, 2.444935"); + } + + } /* end of arc clk_ast_ext_i_clk_src_usb_o_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_ext_i" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "1.625646, 1.657869, 1.727212, 1.944809, 2.636774",\ + "1.705396, 1.737619, 1.806961, 2.024558, 2.716523",\ + "1.780640, 1.812864, 1.882206, 2.099803, 2.791768",\ + "1.900872, 1.933095, 2.002438, 2.220035, 2.912000",\ + "2.084163, 2.116387, 2.185729, 2.403326, 3.095291"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "1.415430, 1.459171, 1.552967, 1.851832, 2.794307",\ + "1.503017, 1.546759, 1.640555, 1.939419, 2.881894",\ + "1.589827, 1.633568, 1.727364, 2.026229, 2.968703",\ + "1.739106, 1.782847, 1.876643, 2.175508, 3.117983",\ + "1.983528, 2.027269, 2.121065, 2.419930, 3.362405"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.020388, 0.096008, 0.262833, 0.786379, 2.444935",\ + "0.020388, 0.096008, 0.262833, 0.786379, 2.444935",\ + "0.020388, 0.096008, 0.262833, 0.786379, 2.444935",\ + "0.020388, 0.096008, 0.262833, 0.786379, 2.444935",\ + "0.020388, 0.096008, 0.262833, 0.786379, 2.444935"); + } + + } /* end of arc clk_ast_ext_i_clk_src_usb_o_una_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "970012.125000, 970012.187500, 970012.250000, 970012.437500, 970013.125000",\ + "970012.250000, 970012.312500, 970012.375000, 970012.562500, 970013.250000",\ + "970012.375000, 970012.437500, 970012.500000, 970012.687500, 970013.375000",\ + "970012.375000, 970012.437500, 970012.500000, 970012.687500, 970013.375000",\ + "970012.750000, 970012.812500, 970012.875000, 970013.062500, 970013.750000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.042128, 0.086864, 0.207230, 0.622005, 1.937878",\ + "0.042128, 0.086864, 0.207230, 0.622005, 1.937878",\ + "0.042128, 0.086864, 0.207230, 0.622005, 1.937878",\ + "0.042128, 0.086864, 0.207230, 0.622005, 1.937878",\ + "0.042128, 0.086864, 0.207230, 0.622005, 1.937878"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "970010.062500, 970010.062500, 970010.187500, 970010.500000, 970011.437500",\ + "970010.187500, 970010.187500, 970010.312500, 970010.625000, 970011.562500",\ + "970010.312500, 970010.312500, 970010.437500, 970010.750000, 970011.687500",\ + "970010.312500, 970010.312500, 970010.437500, 970010.750000, 970011.687500",\ + "970010.687500, 970010.687500, 970010.812500, 970011.125000, 970012.062500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.038124, 0.100137, 0.260986, 0.783299, 2.448362",\ + "0.038124, 0.100137, 0.260986, 0.783299, 2.448362",\ + "0.038124, 0.100137, 0.260986, 0.783299, 2.448362",\ + "0.038124, 0.100137, 0.260986, 0.783299, 2.448362",\ + "0.038124, 0.100137, 0.260986, 0.783299, 2.448362"); + } + + } /* end of arc clk_ast_tlul_i_clk_src_usb_o_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.559788, 0.592011, 0.660516, 0.878515, 1.570735",\ + "0.647589, 0.679811, 0.748316, 0.966316, 1.658535",\ + "0.728888, 0.761111, 0.829615, 1.047615, 1.739835",\ + "0.787041, 0.819264, 0.887769, 1.105768, 1.797988",\ + "1.095762, 1.127984, 1.196489, 1.414489, 2.106709"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.600873, 0.644670, 0.738286, 1.035322, 1.979740",\ + "0.688747, 0.732544, 0.826160, 1.123196, 2.067614",\ + "0.783083, 0.826880, 0.920496, 1.217532, 2.161950",\ + "0.850841, 0.894638, 0.988254, 1.285290, 2.229708",\ + "1.211540, 1.255336, 1.348952, 1.645988, 2.590406"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.020039, 0.095921, 0.259491, 0.781146, 2.444935",\ + "0.020039, 0.095921, 0.259491, 0.781146, 2.444935",\ + "0.020039, 0.095921, 0.259491, 0.781146, 2.444935",\ + "0.020039, 0.095921, 0.259491, 0.781146, 2.444935",\ + "0.020039, 0.095921, 0.259491, 0.781146, 2.444935"); + } + + } /* end of arc clk_ast_tlul_i_clk_src_usb_o_redg_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "970006.875000, 970006.875000, 970006.937500, 970007.187500, 970007.875000",\ + "970007.000000, 970007.000000, 970007.062500, 970007.312500, 970008.000000",\ + "970007.000000, 970007.000000, 970007.062500, 970007.312500, 970008.000000",\ + "970007.250000, 970007.250000, 970007.312500, 970007.562500, 970008.250000",\ + "970007.500000, 970007.500000, 970007.562500, 970007.812500, 970008.500000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.042128, 0.086864, 0.207230, 0.622005, 1.937878",\ + "0.042128, 0.086864, 0.207230, 0.622005, 1.937878",\ + "0.042128, 0.086864, 0.207230, 0.622005, 1.937878",\ + "0.042128, 0.086864, 0.207230, 0.622005, 1.937878",\ + "0.042128, 0.086864, 0.207230, 0.622005, 1.937878"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "970009.937500, 970009.937500, 970010.062500, 970010.375000, 970011.312500",\ + "970010.062500, 970010.062500, 970010.187500, 970010.500000, 970011.437500",\ + "970010.187500, 970010.187500, 970010.312500, 970010.625000, 970011.562500",\ + "970010.437500, 970010.437500, 970010.562500, 970010.875000, 970011.812500",\ + "970010.687500, 970010.687500, 970010.812500, 970011.125000, 970012.062500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.038124, 0.100137, 0.260986, 0.783299, 2.448362",\ + "0.038124, 0.100137, 0.260986, 0.783299, 2.448362",\ + "0.038124, 0.100137, 0.260986, 0.783299, 2.448362",\ + "0.038124, 0.100137, 0.260986, 0.783299, 2.448362",\ + "0.038124, 0.100137, 0.260986, 0.783299, 2.448362"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_usb_o_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "380001.781250, 380001.812500, 380001.875000, 380002.093750, 380002.781250",\ + "380001.875000, 380001.906250, 380001.968750, 380002.187500, 380002.875000",\ + "380001.937500, 380001.968750, 380002.031250, 380002.250000, 380002.937500",\ + "380002.093750, 380002.125000, 380002.187500, 380002.406250, 380003.093750",\ + "380002.312500, 380002.343750, 380002.406250, 380002.625000, 380003.312500"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "380003.031250, 380003.062500, 380003.156250, 380003.468750, 380004.406250",\ + "380003.125000, 380003.156250, 380003.250000, 380003.562500, 380004.500000",\ + "380003.218750, 380003.250000, 380003.343750, 380003.656250, 380004.593750",\ + "380003.406250, 380003.437500, 380003.531250, 380003.843750, 380004.781250",\ + "380003.656250, 380003.687500, 380003.781250, 380004.093750, 380005.031250"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.020039, 0.095921, 0.259491, 0.781146, 2.444935",\ + "0.020039, 0.095921, 0.259491, 0.781146, 2.444935",\ + "0.020039, 0.095921, 0.259491, 0.781146, 2.444935",\ + "0.020039, 0.095921, 0.259491, 0.781146, 2.444935",\ + "0.020039, 0.095921, 0.259491, 0.781146, 2.444935"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_usb_o_una_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "970008.625000, 970008.687500, 970008.750000, 970009.062500, 970010.000000",\ + "970008.750000, 970008.812500, 970008.875000, 970009.187500, 970010.125000",\ + "970008.750000, 970008.812500, 970008.875000, 970009.187500, 970010.125000",\ + "970009.000000, 970009.062500, 970009.125000, 970009.437500, 970010.375000",\ + "970009.250000, 970009.312500, 970009.375000, 970009.687500, 970010.625000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.038124, 0.100137, 0.260986, 0.783299, 2.448362",\ + "0.038124, 0.100137, 0.260986, 0.783299, 2.448362",\ + "0.038124, 0.100137, 0.260986, 0.783299, 2.448362",\ + "0.038124, 0.100137, 0.260986, 0.783299, 2.448362",\ + "0.038124, 0.100137, 0.260986, 0.783299, 2.448362"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "970012.000000, 970012.062500, 970012.125000, 970012.312500, 970013.000000",\ + "970012.125000, 970012.187500, 970012.250000, 970012.437500, 970013.125000",\ + "970012.250000, 970012.312500, 970012.375000, 970012.562500, 970013.250000",\ + "970012.500000, 970012.562500, 970012.625000, 970012.812500, 970013.500000",\ + "970012.750000, 970012.812500, 970012.875000, 970013.062500, 970013.750000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.042128, 0.086864, 0.207230, 0.622005, 1.937878",\ + "0.042128, 0.086864, 0.207230, 0.622005, 1.937878",\ + "0.042128, 0.086864, 0.207230, 0.622005, 1.937878",\ + "0.042128, 0.086864, 0.207230, 0.622005, 1.937878",\ + "0.042128, 0.086864, 0.207230, 0.622005, 1.937878"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_usb_o_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "380000.343750, 380000.375000, 380000.468750, 380000.781250, 380001.718750",\ + "380000.437500, 380000.468750, 380000.562500, 380000.875000, 380001.812500",\ + "380000.500000, 380000.531250, 380000.625000, 380000.937500, 380001.875000",\ + "380000.656250, 380000.687500, 380000.781250, 380001.093750, 380002.031250",\ + "380000.875000, 380000.906250, 380001.000000, 380001.312500, 380002.250000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.020039, 0.095921, 0.259491, 0.781146, 2.444935",\ + "0.020039, 0.095921, 0.259491, 0.781146, 2.444935",\ + "0.020039, 0.095921, 0.259491, 0.781146, 2.444935",\ + "0.020039, 0.095921, 0.259491, 0.781146, 2.444935",\ + "0.020039, 0.095921, 0.259491, 0.781146, 2.444935"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "380001.750000, 380001.781250, 380001.843750, 380002.062500, 380002.750000",\ + "380001.843750, 380001.875000, 380001.937500, 380002.156250, 380002.843750",\ + "380001.937500, 380001.968750, 380002.031250, 380002.250000, 380002.937500",\ + "380002.125000, 380002.156250, 380002.218750, 380002.437500, 380003.125000",\ + "380002.375000, 380002.406250, 380002.468750, 380002.687500, 380003.375000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_usb_o_inv_min*/ + + timing () { + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "590010.375000, 590010.437500, 590010.500000, 590010.687500, 590011.375000",\ + "590010.500000, 590010.562500, 590010.625000, 590010.812500, 590011.500000",\ + "590010.500000, 590010.562500, 590010.625000, 590010.812500, 590011.500000",\ + "590010.625000, 590010.687500, 590010.750000, 590010.937500, 590011.625000",\ + "590010.875000, 590010.937500, 590011.000000, 590011.187500, 590011.875000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.042077, 0.086820, 0.207230, 0.622005, 1.937878",\ + "0.042077, 0.086820, 0.207230, 0.622005, 1.937878",\ + "0.042077, 0.086820, 0.207230, 0.622005, 1.937878",\ + "0.042077, 0.086820, 0.207230, 0.622005, 1.937878",\ + "0.042077, 0.086820, 0.207230, 0.622005, 1.937878"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "590008.375000, 590008.437500, 590008.500000, 590008.812500, 590009.750000",\ + "590008.500000, 590008.562500, 590008.625000, 590008.937500, 590009.875000",\ + "590008.625000, 590008.687500, 590008.750000, 590009.062500, 590010.000000",\ + "590008.750000, 590008.812500, 590008.875000, 590009.187500, 590010.125000",\ + "590009.125000, 590009.187500, 590009.250000, 590009.562500, 590010.500000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.038124, 0.100137, 0.260980, 0.783299, 2.448362",\ + "0.038124, 0.100137, 0.260980, 0.783299, 2.448362",\ + "0.038124, 0.100137, 0.260980, 0.783299, 2.448362",\ + "0.038124, 0.100137, 0.260980, 0.783299, 2.448362",\ + "0.038124, 0.100137, 0.260980, 0.783299, 2.448362"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_usb_o_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "590008.437500, 590008.500000, 590008.562500, 590008.812500, 590009.500000",\ + "590008.437500, 590008.500000, 590008.562500, 590008.812500, 590009.500000",\ + "590008.562500, 590008.625000, 590008.687500, 590008.937500, 590009.625000",\ + "590008.687500, 590008.750000, 590008.812500, 590009.062500, 590009.750000",\ + "590008.937500, 590009.000000, 590009.062500, 590009.312500, 590010.000000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "590006.687500, 590006.750000, 590006.875000, 590007.125000, 590008.125000",\ + "590006.812500, 590006.875000, 590007.000000, 590007.250000, 590008.250000",\ + "590006.937500, 590007.000000, 590007.125000, 590007.375000, 590008.375000",\ + "590007.062500, 590007.125000, 590007.250000, 590007.500000, 590008.500000",\ + "590007.312500, 590007.375000, 590007.500000, 590007.750000, 590008.750000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.020388, 0.095624, 0.260980, 0.781920, 2.444935",\ + "0.020388, 0.095624, 0.260980, 0.781920, 2.444935",\ + "0.020388, 0.095624, 0.260980, 0.781920, 2.444935",\ + "0.020388, 0.095624, 0.260980, 0.781920, 2.444935",\ + "0.020388, 0.095624, 0.260980, 0.781920, 2.444935"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_usb_o_una_min*/ + + timing () { + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "590008.312500, 590008.312500, 590008.437500, 590008.750000, 590009.687500",\ + "590008.437500, 590008.437500, 590008.562500, 590008.875000, 590009.812500",\ + "590008.437500, 590008.437500, 590008.562500, 590008.875000, 590009.812500",\ + "590008.562500, 590008.562500, 590008.687500, 590009.000000, 590009.937500",\ + "590008.812500, 590008.812500, 590008.937500, 590009.250000, 590010.187500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.038124, 0.100137, 0.260980, 0.783299, 2.448362",\ + "0.038124, 0.100137, 0.260980, 0.783299, 2.448362",\ + "0.038124, 0.100137, 0.260980, 0.783299, 2.448362",\ + "0.038124, 0.100137, 0.260980, 0.783299, 2.448362",\ + "0.038124, 0.100137, 0.260980, 0.783299, 2.448362"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "590006.625000, 590006.625000, 590006.687500, 590006.937500, 590007.625000",\ + "590006.750000, 590006.750000, 590006.812500, 590007.062500, 590007.750000",\ + "590006.875000, 590006.875000, 590006.937500, 590007.187500, 590007.875000",\ + "590007.000000, 590007.000000, 590007.062500, 590007.312500, 590008.000000",\ + "590007.375000, 590007.375000, 590007.437500, 590007.687500, 590008.375000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.042077, 0.086820, 0.207230, 0.622005, 1.937878",\ + "0.042077, 0.086820, 0.207230, 0.622005, 1.937878",\ + "0.042077, 0.086820, 0.207230, 0.622005, 1.937878",\ + "0.042077, 0.086820, 0.207230, 0.622005, 1.937878",\ + "0.042077, 0.086820, 0.207230, 0.622005, 1.937878"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_usb_o_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "590008.312500, 590008.312500, 590008.437500, 590008.750000, 590009.687500",\ + "590008.312500, 590008.312500, 590008.437500, 590008.750000, 590009.687500",\ + "590008.437500, 590008.437500, 590008.562500, 590008.875000, 590009.812500",\ + "590008.562500, 590008.562500, 590008.687500, 590009.000000, 590009.937500",\ + "590008.812500, 590008.812500, 590008.937500, 590009.250000, 590010.187500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.020388, 0.095624, 0.260980, 0.781920, 2.444935",\ + "0.020388, 0.095624, 0.260980, 0.781920, 2.444935",\ + "0.020388, 0.095624, 0.260980, 0.781920, 2.444935",\ + "0.020388, 0.095624, 0.260980, 0.781920, 2.444935",\ + "0.020388, 0.095624, 0.260980, 0.781920, 2.444935"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "590006.625000, 590006.625000, 590006.687500, 590006.937500, 590007.625000",\ + "590006.750000, 590006.750000, 590006.812500, 590007.062500, 590007.750000",\ + "590006.875000, 590006.875000, 590006.937500, 590007.187500, 590007.875000",\ + "590007.000000, 590007.000000, 590007.062500, 590007.312500, 590008.000000",\ + "590007.250000, 590007.250000, 590007.312500, 590007.562500, 590008.250000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002148, 0.006836, 0.021756, 0.069236"); + values ( "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571",\ + "0.017600, 0.075142, 0.205270, 0.618216, 1.929571"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_usb_o_inv_min*/ + +} /* end of pin clk_src_usb_o */ + +pin("clk_src_usb_val_o") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.090214 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : clk_src_usb_val_o; + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.349057, 0.389670, 0.471811, 0.746196, 1.641015",\ + "0.436455, 0.477067, 0.559209, 0.833594, 1.728413",\ + "0.517302, 0.557914, 0.640055, 0.914441, 1.809259",\ + "0.655434, 0.696047, 0.778188, 1.052573, 1.947392",\ + "0.895822, 0.936589, 1.018755, 1.291518, 2.187617"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.023046, 0.083902, 0.239672, 0.764755, 2.477149",\ + "0.023046, 0.083902, 0.239672, 0.764755, 2.477149",\ + "0.023046, 0.083902, 0.239672, 0.764755, 2.477149",\ + "0.023046, 0.083902, 0.239672, 0.764755, 2.477149",\ + "0.023046, 0.083902, 0.239672, 0.764756, 2.477149"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.392641, 0.430353, 0.490673, 0.680876, 1.305538",\ + "0.480039, 0.517751, 0.578071, 0.768273, 1.392936",\ + "0.560851, 0.598563, 0.658884, 0.849086, 1.473748",\ + "0.698861, 0.736574, 0.796894, 0.987096, 1.611758",\ + "0.919051, 0.956763, 1.017083, 1.207286, 1.831948"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.028951, 0.070788, 0.167468, 0.516468, 1.652661",\ + "0.028951, 0.070788, 0.167468, 0.516468, 1.652661",\ + "0.028951, 0.070788, 0.167468, 0.516468, 1.652661",\ + "0.028951, 0.070788, 0.167468, 0.516468, 1.652661",\ + "0.028951, 0.070788, 0.167468, 0.516468, 1.652661"); + } + + } /* end of arc clk_ast_ext_i_clk_src_usb_val_o_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.222724, 0.263066, 0.345165, 0.618191, 1.516706",\ + "0.310912, 0.351255, 0.433354, 0.706380, 1.604895",\ + "0.398549, 0.438892, 0.520991, 0.794016, 1.692532",\ + "0.546817, 0.587159, 0.669259, 0.942284, 1.840799",\ + "0.782132, 0.822474, 0.904573, 1.177599, 2.076114"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.021530, 0.083764, 0.238778, 0.757619, 2.456895",\ + "0.021530, 0.083764, 0.238778, 0.757619, 2.456895",\ + "0.021530, 0.083764, 0.238778, 0.757619, 2.456895",\ + "0.021530, 0.083764, 0.238778, 0.757619, 2.456895",\ + "0.021530, 0.083764, 0.238778, 0.757619, 2.456895"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.263657, 0.301407, 0.361820, 0.551984, 1.176778",\ + "0.351846, 0.389595, 0.450008, 0.640173, 1.264967",\ + "0.439483, 0.477232, 0.537645, 0.727810, 1.352604",\ + "0.587750, 0.625500, 0.685913, 0.876077, 1.500872",\ + "0.813891, 0.851054, 0.911373, 1.101677, 1.725499"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.025914, 0.068635, 0.165828, 0.512808, 1.651598",\ + "0.025914, 0.068635, 0.165828, 0.512808, 1.651598",\ + "0.025914, 0.068635, 0.165828, 0.512808, 1.651598",\ + "0.025914, 0.068635, 0.165828, 0.512808, 1.651598",\ + "0.025914, 0.068635, 0.165828, 0.512808, 1.651598"); + } + + } /* end of arc clk_ast_ext_i_clk_src_usb_val_o_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "970010.312500, 970010.375000, 970010.437500, 970010.750000, 970011.625000",\ + "970010.437500, 970010.500000, 970010.562500, 970010.875000, 970011.750000",\ + "970010.562500, 970010.625000, 970010.687500, 970011.000000, 970011.875000",\ + "970010.562500, 970010.625000, 970010.687500, 970011.000000, 970011.875000",\ + "970010.937500, 970011.000000, 970011.062500, 970011.375000, 970012.250000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.022871, 0.084362, 0.238855, 0.766838, 2.469430",\ + "0.022871, 0.084362, 0.238855, 0.766838, 2.469430",\ + "0.022871, 0.084362, 0.238855, 0.766838, 2.469430",\ + "0.022871, 0.084362, 0.238855, 0.766838, 2.469430",\ + "0.022871, 0.084362, 0.238855, 0.766838, 2.469430"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "970010.312500, 970010.375000, 970010.437500, 970010.625000, 970011.250000",\ + "970010.437500, 970010.500000, 970010.562500, 970010.750000, 970011.375000",\ + "970010.562500, 970010.625000, 970010.687500, 970010.875000, 970011.500000",\ + "970010.562500, 970010.625000, 970010.687500, 970010.875000, 970011.500000",\ + "970010.937500, 970011.000000, 970011.062500, 970011.250000, 970011.875000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.028494, 0.070786, 0.167369, 0.515912, 1.652408",\ + "0.028494, 0.070786, 0.167369, 0.515912, 1.652408",\ + "0.028494, 0.070786, 0.167369, 0.515912, 1.652408",\ + "0.028494, 0.070786, 0.167369, 0.515912, 1.652408",\ + "0.028494, 0.070786, 0.167369, 0.515912, 1.652408"); + } + + } /* end of arc clk_ast_tlul_i_clk_src_usb_val_o_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.691181, 0.731788, 0.813938, 1.088216, 1.983374",\ + "0.778982, 0.819588, 0.901739, 1.176016, 2.071174",\ + "0.860281, 0.900888, 0.983038, 1.257316, 2.152474",\ + "0.918434, 0.959041, 1.041191, 1.315469, 2.210627",\ + "1.227155, 1.267762, 1.349912, 1.624190, 2.519347"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.021562, 0.083764, 0.238778, 0.757102, 2.460156",\ + "0.021562, 0.083764, 0.238778, 0.757102, 2.460156",\ + "0.021562, 0.083764, 0.238778, 0.757102, 2.460156",\ + "0.021562, 0.083764, 0.238778, 0.757102, 2.460156",\ + "0.021562, 0.083764, 0.238778, 0.757102, 2.460156"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.670492, 0.707647, 0.767969, 0.958286, 1.582166",\ + "0.758292, 0.795447, 0.855769, 1.046087, 1.669967",\ + "0.839591, 0.876747, 0.937069, 1.127386, 1.751266",\ + "0.897745, 0.934900, 0.995222, 1.185539, 1.809419",\ + "1.206465, 1.243621, 1.303943, 1.494260, 2.118140"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.025904, 0.068640, 0.165825, 0.512797, 1.652262",\ + "0.025904, 0.068640, 0.165825, 0.512797, 1.652262",\ + "0.025904, 0.068640, 0.165825, 0.512797, 1.652262",\ + "0.025904, 0.068640, 0.165825, 0.512797, 1.652262",\ + "0.025904, 0.068640, 0.165825, 0.512797, 1.652262"); + } + + } /* end of arc clk_ast_tlul_i_clk_src_usb_val_o_redg_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "970007.125000, 970007.125000, 970007.250000, 970007.500000, 970008.375000",\ + "970007.250000, 970007.250000, 970007.375000, 970007.625000, 970008.500000",\ + "970007.250000, 970007.250000, 970007.375000, 970007.625000, 970008.500000",\ + "970007.500000, 970007.500000, 970007.625000, 970007.875000, 970008.750000",\ + "970007.750000, 970007.750000, 970007.875000, 970008.125000, 970009.000000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.022871, 0.084362, 0.238855, 0.766838, 2.469430",\ + "0.022871, 0.084362, 0.238855, 0.766838, 2.469430",\ + "0.022871, 0.084362, 0.238855, 0.766838, 2.469430",\ + "0.022871, 0.084362, 0.238855, 0.766838, 2.469430",\ + "0.022871, 0.084362, 0.238855, 0.766838, 2.469430"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "970010.187500, 970010.250000, 970010.312500, 970010.500000, 970011.125000",\ + "970010.312500, 970010.375000, 970010.437500, 970010.625000, 970011.250000",\ + "970010.437500, 970010.500000, 970010.562500, 970010.750000, 970011.375000",\ + "970010.687500, 970010.750000, 970010.812500, 970011.000000, 970011.625000",\ + "970010.937500, 970011.000000, 970011.062500, 970011.250000, 970011.875000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.028494, 0.070786, 0.167369, 0.515912, 1.652408",\ + "0.028494, 0.070786, 0.167369, 0.515912, 1.652408",\ + "0.028494, 0.070786, 0.167369, 0.515912, 1.652408",\ + "0.028494, 0.070786, 0.167369, 0.515912, 1.652408",\ + "0.028494, 0.070786, 0.167369, 0.515912, 1.652408"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_usb_val_o_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "380000.437500, 380000.500000, 380000.562500, 380000.843750, 380001.750000",\ + "380000.531250, 380000.593750, 380000.656250, 380000.937500, 380001.843750",\ + "380000.593750, 380000.656250, 380000.718750, 380001.000000, 380001.906250",\ + "380000.750000, 380000.812500, 380000.875000, 380001.156250, 380002.062500",\ + "380000.968750, 380001.031250, 380001.093750, 380001.375000, 380002.281250"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.021562, 0.083764, 0.238778, 0.757102, 2.460156",\ + "0.021562, 0.083764, 0.238778, 0.757102, 2.460156",\ + "0.021562, 0.083764, 0.238778, 0.757102, 2.460156",\ + "0.021562, 0.083764, 0.238778, 0.757102, 2.460156",\ + "0.021562, 0.083764, 0.238778, 0.757102, 2.460156"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "380001.875000, 380001.906250, 380001.968750, 380002.156250, 380002.781250",\ + "380001.968750, 380002.000000, 380002.062500, 380002.250000, 380002.875000",\ + "380002.062500, 380002.093750, 380002.156250, 380002.343750, 380002.968750",\ + "380002.250000, 380002.281250, 380002.343750, 380002.531250, 380003.156250",\ + "380002.500000, 380002.531250, 380002.593750, 380002.781250, 380003.406250"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.025904, 0.068640, 0.165825, 0.512797, 1.652262",\ + "0.025904, 0.068640, 0.165825, 0.512797, 1.652262",\ + "0.025904, 0.068640, 0.165825, 0.512797, 1.652262",\ + "0.025904, 0.068640, 0.165825, 0.512797, 1.652262",\ + "0.025904, 0.068640, 0.165825, 0.512797, 1.652262"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_usb_val_o_una_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "970007.125000, 970007.187500, 970007.250000, 970007.437500, 970008.062500",\ + "970007.250000, 970007.312500, 970007.375000, 970007.562500, 970008.187500",\ + "970007.250000, 970007.312500, 970007.375000, 970007.562500, 970008.187500",\ + "970007.500000, 970007.562500, 970007.625000, 970007.812500, 970008.437500",\ + "970007.750000, 970007.812500, 970007.875000, 970008.062500, 970008.687500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.028494, 0.070786, 0.167369, 0.515912, 1.652408",\ + "0.028494, 0.070786, 0.167369, 0.515912, 1.652408",\ + "0.028494, 0.070786, 0.167369, 0.515912, 1.652408",\ + "0.028494, 0.070786, 0.167369, 0.515912, 1.652408",\ + "0.028494, 0.070786, 0.167369, 0.515912, 1.652408"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "970010.187500, 970010.250000, 970010.312500, 970010.625000, 970011.500000",\ + "970010.312500, 970010.375000, 970010.437500, 970010.750000, 970011.625000",\ + "970010.437500, 970010.500000, 970010.562500, 970010.875000, 970011.750000",\ + "970010.687500, 970010.750000, 970010.812500, 970011.125000, 970012.000000",\ + "970010.937500, 970011.000000, 970011.062500, 970011.375000, 970012.250000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.022871, 0.084362, 0.238855, 0.766838, 2.469430",\ + "0.022871, 0.084362, 0.238855, 0.766838, 2.469430",\ + "0.022871, 0.084362, 0.238855, 0.766838, 2.469430",\ + "0.022871, 0.084362, 0.238855, 0.766838, 2.469430",\ + "0.022871, 0.084362, 0.238855, 0.766838, 2.469430"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_usb_val_o_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "380000.500000, 380000.531250, 380000.593750, 380000.781250, 380001.406250",\ + "380000.593750, 380000.625000, 380000.687500, 380000.875000, 380001.500000",\ + "380000.656250, 380000.687500, 380000.750000, 380000.937500, 380001.562500",\ + "380000.812500, 380000.843750, 380000.906250, 380001.093750, 380001.718750",\ + "380001.031250, 380001.062500, 380001.125000, 380001.312500, 380001.937500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.025904, 0.068640, 0.165825, 0.512797, 1.652262",\ + "0.025904, 0.068640, 0.165825, 0.512797, 1.652262",\ + "0.025904, 0.068640, 0.165825, 0.512797, 1.652262",\ + "0.025904, 0.068640, 0.165825, 0.512797, 1.652262",\ + "0.025904, 0.068640, 0.165825, 0.512797, 1.652262"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "380001.906250, 380001.937500, 380002.031250, 380002.281250, 380003.187500",\ + "380002.000000, 380002.031250, 380002.125000, 380002.375000, 380003.281250",\ + "380002.093750, 380002.125000, 380002.218750, 380002.468750, 380003.375000",\ + "380002.281250, 380002.312500, 380002.406250, 380002.656250, 380003.562500",\ + "380002.531250, 380002.562500, 380002.656250, 380002.906250, 380003.812500"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.021562, 0.083764, 0.238778, 0.757102, 2.460156",\ + "0.021562, 0.083764, 0.238778, 0.757102, 2.460156",\ + "0.021562, 0.083764, 0.238778, 0.757102, 2.460156",\ + "0.021562, 0.083764, 0.238778, 0.757102, 2.460156",\ + "0.021562, 0.083764, 0.238778, 0.757102, 2.460156"); + } + + } /* end of arc padmux2ast_i[4]_clk_src_usb_val_o_inv_min*/ + + timing () { + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "590008.562500, 590008.625000, 590008.687500, 590009.000000, 590009.875000",\ + "590008.687500, 590008.750000, 590008.812500, 590009.125000, 590010.000000",\ + "590008.687500, 590008.750000, 590008.812500, 590009.125000, 590010.000000",\ + "590008.812500, 590008.875000, 590008.937500, 590009.250000, 590010.125000",\ + "590009.062500, 590009.125000, 590009.187500, 590009.500000, 590010.375000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.022871, 0.084362, 0.238855, 0.766861, 2.469430",\ + "0.022871, 0.084362, 0.238855, 0.766861, 2.469430",\ + "0.022871, 0.084362, 0.238855, 0.766861, 2.469430",\ + "0.022871, 0.084362, 0.238855, 0.766861, 2.469430",\ + "0.022871, 0.084362, 0.238855, 0.766861, 2.469430"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "590006.875000, 590006.937500, 590007.000000, 590007.187500, 590007.812500",\ + "590007.000000, 590007.062500, 590007.125000, 590007.312500, 590007.937500",\ + "590007.125000, 590007.187500, 590007.250000, 590007.437500, 590008.062500",\ + "590007.250000, 590007.312500, 590007.375000, 590007.562500, 590008.187500",\ + "590007.625000, 590007.687500, 590007.750000, 590007.937500, 590008.562500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.028494, 0.070786, 0.167369, 0.515919, 1.652408",\ + "0.028494, 0.070786, 0.167369, 0.515919, 1.652408",\ + "0.028494, 0.070786, 0.167369, 0.515919, 1.652408",\ + "0.028494, 0.070786, 0.167369, 0.515919, 1.652408",\ + "0.028494, 0.070786, 0.167369, 0.515919, 1.652408"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_usb_val_o_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "590008.375000, 590008.437500, 590008.500000, 590008.812500, 590009.687500",\ + "590008.375000, 590008.437500, 590008.500000, 590008.812500, 590009.687500",\ + "590008.500000, 590008.562500, 590008.625000, 590008.937500, 590009.812500",\ + "590008.625000, 590008.687500, 590008.750000, 590009.062500, 590009.937500",\ + "590008.875000, 590008.937500, 590009.000000, 590009.312500, 590010.187500"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.022032, 0.083764, 0.238629, 0.755850, 2.465812",\ + "0.022032, 0.083764, 0.238629, 0.755850, 2.465812",\ + "0.022032, 0.083764, 0.238629, 0.755850, 2.465812",\ + "0.022032, 0.083764, 0.238629, 0.755850, 2.465812",\ + "0.022032, 0.083764, 0.238629, 0.755850, 2.465812"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "590006.750000, 590006.750000, 590006.812500, 590007.000000, 590007.625000",\ + "590006.875000, 590006.875000, 590006.937500, 590007.125000, 590007.750000",\ + "590007.000000, 590007.000000, 590007.062500, 590007.250000, 590007.875000",\ + "590007.125000, 590007.125000, 590007.187500, 590007.375000, 590008.000000",\ + "590007.375000, 590007.375000, 590007.437500, 590007.625000, 590008.250000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.026011, 0.068726, 0.165863, 0.510725, 1.651082",\ + "0.026011, 0.068726, 0.165863, 0.510725, 1.651082",\ + "0.026011, 0.068726, 0.165863, 0.510725, 1.651082",\ + "0.026011, 0.068726, 0.165863, 0.510725, 1.651082",\ + "0.026011, 0.068726, 0.165863, 0.510725, 1.651082"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_usb_val_o_una_min*/ + + timing () { + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "590008.562500, 590008.625000, 590008.687500, 590008.875000, 590009.500000",\ + "590008.687500, 590008.750000, 590008.812500, 590009.000000, 590009.625000",\ + "590008.687500, 590008.750000, 590008.812500, 590009.000000, 590009.625000",\ + "590008.812500, 590008.875000, 590008.937500, 590009.125000, 590009.750000",\ + "590009.062500, 590009.125000, 590009.187500, 590009.375000, 590010.000000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.028494, 0.070786, 0.167369, 0.515919, 1.652408",\ + "0.028494, 0.070786, 0.167369, 0.515919, 1.652408",\ + "0.028494, 0.070786, 0.167369, 0.515919, 1.652408",\ + "0.028494, 0.070786, 0.167369, 0.515919, 1.652408",\ + "0.028494, 0.070786, 0.167369, 0.515919, 1.652408"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "590006.875000, 590006.875000, 590007.000000, 590007.250000, 590008.125000",\ + "590007.000000, 590007.000000, 590007.125000, 590007.375000, 590008.250000",\ + "590007.125000, 590007.125000, 590007.250000, 590007.500000, 590008.375000",\ + "590007.250000, 590007.250000, 590007.375000, 590007.625000, 590008.500000",\ + "590007.625000, 590007.625000, 590007.750000, 590008.000000, 590008.875000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.022871, 0.084362, 0.238855, 0.766861, 2.469430",\ + "0.022871, 0.084362, 0.238855, 0.766861, 2.469430",\ + "0.022871, 0.084362, 0.238855, 0.766861, 2.469430",\ + "0.022871, 0.084362, 0.238855, 0.766861, 2.469430",\ + "0.022871, 0.084362, 0.238855, 0.766861, 2.469430"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_usb_val_o_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "590008.562500, 590008.625000, 590008.687500, 590008.875000, 590009.500000",\ + "590008.562500, 590008.625000, 590008.687500, 590008.875000, 590009.500000",\ + "590008.687500, 590008.750000, 590008.812500, 590009.000000, 590009.625000",\ + "590008.812500, 590008.875000, 590008.937500, 590009.125000, 590009.750000",\ + "590009.062500, 590009.125000, 590009.187500, 590009.375000, 590010.000000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.026011, 0.068726, 0.165863, 0.510725, 1.651082",\ + "0.026011, 0.068726, 0.165863, 0.510725, 1.651082",\ + "0.026011, 0.068726, 0.165863, 0.510725, 1.651082",\ + "0.026011, 0.068726, 0.165863, 0.510725, 1.651082",\ + "0.026011, 0.068726, 0.165863, 0.510725, 1.651082"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "590006.875000, 590006.875000, 590007.000000, 590007.250000, 590008.125000",\ + "590007.000000, 590007.000000, 590007.125000, 590007.375000, 590008.250000",\ + "590007.125000, 590007.125000, 590007.250000, 590007.500000, 590008.375000",\ + "590007.250000, 590007.250000, 590007.375000, 590007.625000, 590008.500000",\ + "590007.500000, 590007.500000, 590007.625000, 590007.875000, 590008.750000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.002461, 0.008196, 0.027294, 0.090214"); + values ( "0.022032, 0.083764, 0.238629, 0.755850, 2.465812",\ + "0.022032, 0.083764, 0.238629, 0.755850, 2.465812",\ + "0.022032, 0.083764, 0.238629, 0.755850, 2.465812",\ + "0.022032, 0.083764, 0.238629, 0.755850, 2.465812",\ + "0.022032, 0.083764, 0.238629, 0.755850, 2.465812"); + } + + } /* end of arc padmux2ast_i[5]_clk_src_usb_val_o_inv_min*/ + +} /* end of pin clk_src_usb_val_o */ +bus ( usb_io_pu_cal_o ) { + + bus_type : BUS20_type7 ; + direction : output ; + +pin("usb_io_pu_cal_o[19]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.044612 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : usb_io_pu_cal_o[19]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.314417, 0.335777, 0.372002, 0.776684, 1.668587",\ + "0.399220, 0.420577, 0.456801, 0.861483, 1.753386",\ + "0.475457, 0.496832, 0.533065, 0.937750, 1.829653",\ + "0.530163, 0.551559, 0.587801, 0.992490, 1.884393",\ + "0.830581, 0.852045, 0.888318, 1.293020, 2.184924"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.044702, 0.070201, 0.128218, 0.852056, 2.450125",\ + "0.044702, 0.070201, 0.128218, 0.852056, 2.450125",\ + "0.044702, 0.070201, 0.128220, 0.852056, 2.450126",\ + "0.044702, 0.070225, 0.128223, 0.852056, 2.450128",\ + "0.046369, 0.071964, 0.128232, 0.852062, 2.450135"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.217558, 0.227289, 0.241063, 0.379813, 0.685715",\ + "0.306214, 0.315945, 0.329719, 0.468469, 0.774371",\ + "0.401954, 0.411685, 0.425460, 0.564210, 0.870112",\ + "0.471485, 0.481216, 0.494992, 0.633742, 0.939644",\ + "0.839028, 0.848765, 0.862546, 1.001302, 1.307204"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.025202, 0.034115, 0.048740, 0.301167, 0.860107",\ + "0.025202, 0.034115, 0.048740, 0.301167, 0.860107",\ + "0.025203, 0.034116, 0.048742, 0.301167, 0.860107",\ + "0.025205, 0.034118, 0.048744, 0.301167, 0.860107",\ + "0.025222, 0.034137, 0.048764, 0.301167, 0.860107"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[19]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.197396, 0.217798, 0.253787, 0.659515, 1.549779",\ + "0.285773, 0.306177, 0.342166, 0.747894, 1.638158",\ + "0.375534, 0.395928, 0.431912, 0.837641, 1.727905",\ + "0.439799, 0.460179, 0.496157, 0.901887, 1.792151",\ + "0.781328, 0.801955, 0.838037, 1.243750, 2.134013"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.041661, 0.069999, 0.126709, 0.849969, 2.447141",\ + "0.041661, 0.069999, 0.126709, 0.849969, 2.447141",\ + "0.041661, 0.069999, 0.126709, 0.849969, 2.447141",\ + "0.041661, 0.069999, 0.126709, 0.849969, 2.447141",\ + "0.041673, 0.070094, 0.126932, 0.849969, 2.447141"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.177011, 0.187648, 0.201756, 0.342079, 0.647165",\ + "0.264382, 0.275019, 0.289127, 0.429450, 0.734536",\ + "0.342508, 0.353145, 0.367252, 0.507575, 0.812661",\ + "0.397042, 0.407678, 0.421785, 0.562107, 0.867194",\ + "0.681430, 0.692081, 0.706196, 0.846525, 1.151605"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.024113, 0.032746, 0.047552, 0.299568, 0.856157",\ + "0.024113, 0.032746, 0.047552, 0.299568, 0.856157",\ + "0.024113, 0.032746, 0.047552, 0.299568, 0.856157",\ + "0.024113, 0.032746, 0.047552, 0.299568, 0.856157",\ + "0.024126, 0.032778, 0.047567, 0.299569, 0.856157"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[19]_redg_min*/ + +} /* end of pin usb_io_pu_cal_o[19] */ + +pin("usb_io_pu_cal_o[18]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.044612 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : usb_io_pu_cal_o[18]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.314417, 0.335777, 0.372002, 0.776684, 1.668587",\ + "0.399220, 0.420577, 0.456801, 0.861483, 1.753386",\ + "0.475457, 0.496832, 0.533065, 0.937750, 1.829653",\ + "0.530163, 0.551559, 0.587801, 0.992490, 1.884393",\ + "0.830581, 0.852045, 0.888318, 1.293020, 2.184924"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.044702, 0.070201, 0.128218, 0.852056, 2.450125",\ + "0.044702, 0.070201, 0.128218, 0.852056, 2.450125",\ + "0.044702, 0.070201, 0.128220, 0.852056, 2.450126",\ + "0.044702, 0.070225, 0.128223, 0.852056, 2.450128",\ + "0.046369, 0.071964, 0.128232, 0.852062, 2.450135"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.217558, 0.227289, 0.241063, 0.379813, 0.685715",\ + "0.306214, 0.315945, 0.329719, 0.468469, 0.774371",\ + "0.401954, 0.411685, 0.425460, 0.564210, 0.870112",\ + "0.471485, 0.481216, 0.494992, 0.633742, 0.939644",\ + "0.839028, 0.848765, 0.862546, 1.001302, 1.307204"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.025200, 0.034112, 0.048740, 0.301167, 0.860107",\ + "0.025200, 0.034112, 0.048740, 0.301167, 0.860107",\ + "0.025202, 0.034115, 0.048742, 0.301167, 0.860107",\ + "0.025205, 0.034118, 0.048744, 0.301167, 0.860107",\ + "0.025221, 0.034136, 0.048764, 0.301167, 0.860107"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[18]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.211928, 0.232331, 0.268319, 0.674047, 1.564311",\ + "0.300343, 0.320746, 0.356735, 0.762463, 1.652727",\ + "0.394726, 0.415129, 0.451117, 0.856845, 1.747110",\ + "0.462784, 0.483187, 0.519176, 0.924904, 1.815168",\ + "0.787427, 0.807827, 0.843815, 1.249543, 2.139807"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.041661, 0.070068, 0.126730, 0.849972, 2.447344",\ + "0.041661, 0.070068, 0.126730, 0.849972, 2.447344",\ + "0.041661, 0.070068, 0.126730, 0.849972, 2.447344",\ + "0.041661, 0.070068, 0.126730, 0.849972, 2.447345",\ + "0.041673, 0.070061, 0.126728, 0.849969, 2.447347"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.180996, 0.190508, 0.204096, 0.342744, 0.648655",\ + "0.266400, 0.277038, 0.291146, 0.430107, 0.736018",\ + "0.342508, 0.353145, 0.367252, 0.507575, 0.812661",\ + "0.397042, 0.407678, 0.421785, 0.562107, 0.867194",\ + "0.681430, 0.692081, 0.706196, 0.846525, 1.151605"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.024113, 0.032746, 0.047552, 0.299568, 0.856157",\ + "0.024113, 0.032746, 0.047552, 0.299568, 0.856157",\ + "0.024113, 0.032746, 0.047552, 0.299568, 0.856157",\ + "0.024113, 0.032746, 0.047552, 0.299568, 0.856157",\ + "0.024126, 0.032778, 0.047567, 0.299569, 0.856157"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[18]_redg_min*/ + +} /* end of pin usb_io_pu_cal_o[18] */ + +pin("usb_io_pu_cal_o[17]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.044612 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : usb_io_pu_cal_o[17]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.314417, 0.335777, 0.372002, 0.776684, 1.668587",\ + "0.399220, 0.420577, 0.456801, 0.861483, 1.753386",\ + "0.475457, 0.496832, 0.533065, 0.937750, 1.829653",\ + "0.530163, 0.551559, 0.587801, 0.992490, 1.884393",\ + "0.830581, 0.852045, 0.888318, 1.293020, 2.184924"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.044601, 0.070148, 0.128218, 0.852056, 2.450125",\ + "0.044663, 0.070159, 0.128218, 0.852056, 2.450125",\ + "0.044669, 0.070182, 0.128220, 0.852056, 2.450126",\ + "0.044669, 0.070225, 0.128223, 0.852056, 2.450128",\ + "0.046118, 0.071698, 0.128232, 0.852061, 2.450135"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.217558, 0.227289, 0.241063, 0.379813, 0.685715",\ + "0.306214, 0.315945, 0.329719, 0.468469, 0.774371",\ + "0.401954, 0.411685, 0.425460, 0.564210, 0.870112",\ + "0.471485, 0.481216, 0.494992, 0.633742, 0.939644",\ + "0.839028, 0.848765, 0.862546, 1.001302, 1.307204"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.025212, 0.034126, 0.048740, 0.301166, 0.860107",\ + "0.025213, 0.034127, 0.048740, 0.301166, 0.860107",\ + "0.025216, 0.034130, 0.048742, 0.301166, 0.860107",\ + "0.025218, 0.034133, 0.048744, 0.301166, 0.860107",\ + "0.025235, 0.034151, 0.048764, 0.301166, 0.860107"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[17]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.194489, 0.214889, 0.250877, 0.656605, 1.546869",\ + "0.282628, 0.303028, 0.339015, 0.744743, 1.635008",\ + "0.372036, 0.392436, 0.428424, 0.834152, 1.724416",\ + "0.436052, 0.456452, 0.492440, 0.898167, 1.788432",\ + "0.763219, 0.783617, 0.819604, 1.225332, 2.115596"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.041661, 0.070060, 0.126728, 0.849972, 2.447347",\ + "0.041661, 0.070060, 0.126728, 0.849972, 2.447347",\ + "0.041661, 0.070060, 0.126728, 0.849972, 2.447347",\ + "0.041661, 0.070060, 0.126728, 0.849972, 2.447347",\ + "0.041673, 0.070054, 0.126726, 0.849969, 2.447349"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.175899, 0.186544, 0.200656, 0.340982, 0.646065",\ + "0.263271, 0.273916, 0.288028, 0.428355, 0.733437",\ + "0.344128, 0.354771, 0.368883, 0.509209, 0.814291",\ + "0.401818, 0.412460, 0.426571, 0.566896, 0.871980",\ + "0.705550, 0.716209, 0.730328, 0.870660, 1.175736"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.024113, 0.032746, 0.047558, 0.299568, 0.856133",\ + "0.024113, 0.032746, 0.047558, 0.299568, 0.856133",\ + "0.024113, 0.032746, 0.047558, 0.299568, 0.856133",\ + "0.024113, 0.032746, 0.047558, 0.299568, 0.856133",\ + "0.024126, 0.032778, 0.047574, 0.299569, 0.856133"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[17]_redg_min*/ + +} /* end of pin usb_io_pu_cal_o[17] */ + +pin("usb_io_pu_cal_o[16]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.044612 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : usb_io_pu_cal_o[16]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.314417, 0.335777, 0.372002, 0.776684, 1.668587",\ + "0.399220, 0.420577, 0.456801, 0.861483, 1.753386",\ + "0.475457, 0.496832, 0.533065, 0.937750, 1.829653",\ + "0.530163, 0.551559, 0.587801, 0.992490, 1.884393",\ + "0.830581, 0.852045, 0.888318, 1.293020, 2.184924"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.044695, 0.070193, 0.128218, 0.852056, 2.450125",\ + "0.044695, 0.070193, 0.128218, 0.852056, 2.450125",\ + "0.044695, 0.070193, 0.128220, 0.852056, 2.450126",\ + "0.044695, 0.070225, 0.128223, 0.852056, 2.450128",\ + "0.044695, 0.070368, 0.128232, 0.852056, 2.450135"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.217558, 0.227289, 0.241063, 0.379813, 0.685715",\ + "0.306214, 0.315945, 0.329719, 0.468469, 0.774371",\ + "0.401954, 0.411685, 0.425460, 0.564210, 0.870112",\ + "0.471485, 0.481216, 0.494992, 0.633742, 0.939644",\ + "0.839028, 0.848765, 0.862546, 1.001302, 1.307204"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.025212, 0.034126, 0.048740, 0.301166, 0.860107",\ + "0.025212, 0.034126, 0.048740, 0.301166, 0.860107",\ + "0.025216, 0.034130, 0.048742, 0.301166, 0.860107",\ + "0.025218, 0.034133, 0.048744, 0.301166, 0.860107",\ + "0.025235, 0.034151, 0.048764, 0.301166, 0.860107"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[16]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.241214, 0.262542, 0.298754, 0.703431, 1.595333",\ + "0.329624, 0.350953, 0.387164, 0.791841, 1.683743",\ + "0.418828, 0.440156, 0.476368, 0.881044, 1.772947",\ + "0.478173, 0.498573, 0.534561, 0.940289, 1.830553",\ + "0.763219, 0.783617, 0.819604, 1.225332, 2.115596"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.041661, 0.070060, 0.126728, 0.849972, 2.447347",\ + "0.041661, 0.070060, 0.126728, 0.849972, 2.447347",\ + "0.041661, 0.070060, 0.126728, 0.849972, 2.447347",\ + "0.041661, 0.070060, 0.126728, 0.849972, 2.447347",\ + "0.041673, 0.070054, 0.126726, 0.849969, 2.447349"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.180996, 0.190508, 0.204096, 0.342744, 0.648655",\ + "0.268360, 0.277871, 0.291459, 0.430107, 0.736018",\ + "0.349209, 0.358716, 0.372303, 0.510951, 0.816863",\ + "0.406926, 0.416431, 0.430016, 0.568664, 0.874576",\ + "0.710950, 0.720466, 0.734056, 0.872703, 1.178614"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.024113, 0.032746, 0.047559, 0.299568, 0.856139",\ + "0.024113, 0.032746, 0.047559, 0.299568, 0.856139",\ + "0.024113, 0.032746, 0.047559, 0.299568, 0.856139",\ + "0.024113, 0.032746, 0.047559, 0.299568, 0.856139",\ + "0.024126, 0.032778, 0.047572, 0.299569, 0.856139"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[16]_redg_min*/ + +} /* end of pin usb_io_pu_cal_o[16] */ + +pin("usb_io_pu_cal_o[15]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.044612 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : usb_io_pu_cal_o[15]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.320701, 0.342069, 0.378299, 0.782982, 1.674885",\ + "0.408065, 0.429433, 0.465663, 0.870347, 1.762250",\ + "0.488969, 0.510342, 0.546573, 0.951258, 1.843161",\ + "0.546844, 0.568237, 0.604478, 1.009167, 1.901070",\ + "0.862468, 0.884064, 0.920396, 1.325122, 2.217029"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.044702, 0.070201, 0.128219, 0.852056, 2.450125",\ + "0.044702, 0.070201, 0.128219, 0.852056, 2.450125",\ + "0.044702, 0.070201, 0.128220, 0.852056, 2.450126",\ + "0.044702, 0.070220, 0.128222, 0.852056, 2.450128",\ + "0.046369, 0.071964, 0.128250, 0.852062, 2.450147"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.208477, 0.218207, 0.231981, 0.370730, 0.676633",\ + "0.296951, 0.306682, 0.320455, 0.459205, 0.765107",\ + "0.387709, 0.397440, 0.411214, 0.549964, 0.855866",\ + "0.453111, 0.462843, 0.476618, 0.615368, 0.921270",\ + "0.800244, 0.809980, 0.823761, 0.962517, 1.268419"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.025202, 0.034115, 0.048739, 0.301167, 0.860107",\ + "0.025202, 0.034115, 0.048739, 0.301167, 0.860107",\ + "0.025203, 0.034116, 0.048740, 0.301167, 0.860107",\ + "0.025205, 0.034118, 0.048742, 0.301167, 0.860107",\ + "0.025222, 0.034137, 0.048763, 0.301167, 0.860107"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[15]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.197396, 0.217798, 0.253787, 0.659515, 1.549779",\ + "0.285773, 0.306177, 0.342166, 0.747894, 1.638158",\ + "0.375534, 0.395928, 0.431912, 0.837641, 1.727905",\ + "0.439799, 0.460179, 0.496157, 0.901887, 1.792151",\ + "0.781328, 0.801955, 0.838037, 1.243750, 2.134013"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.041685, 0.069999, 0.126709, 0.849953, 2.447141",\ + "0.041695, 0.069999, 0.126709, 0.849953, 2.447141",\ + "0.041741, 0.069999, 0.126709, 0.849953, 2.447141",\ + "0.041758, 0.069999, 0.126709, 0.849953, 2.447141",\ + "0.041766, 0.070174, 0.126932, 0.849953, 2.447141"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.177011, 0.187648, 0.201756, 0.340918, 0.646830",\ + "0.264382, 0.275019, 0.289127, 0.428292, 0.734203",\ + "0.342508, 0.353145, 0.367252, 0.506601, 0.812513",\ + "0.397042, 0.407678, 0.421785, 0.561150, 0.867061",\ + "0.681430, 0.692081, 0.706196, 0.845682, 1.151594"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.024118, 0.032771, 0.047553, 0.299569, 0.856201",\ + "0.024118, 0.032771, 0.047553, 0.299569, 0.856201",\ + "0.024117, 0.032767, 0.047553, 0.299569, 0.856201",\ + "0.024117, 0.032759, 0.047552, 0.299568, 0.856201",\ + "0.024117, 0.032759, 0.047552, 0.299568, 0.856157"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[15]_redg_min*/ + +} /* end of pin usb_io_pu_cal_o[15] */ + +pin("usb_io_pu_cal_o[14]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.044612 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : usb_io_pu_cal_o[14]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.320701, 0.342069, 0.378299, 0.782982, 1.674885",\ + "0.408065, 0.429433, 0.465663, 0.870347, 1.762250",\ + "0.488969, 0.510342, 0.546573, 0.951258, 1.843161",\ + "0.546844, 0.568237, 0.604478, 1.009167, 1.901070",\ + "0.862468, 0.884064, 0.920396, 1.325122, 2.217029"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.044702, 0.070201, 0.128219, 0.852056, 2.450125",\ + "0.044702, 0.070201, 0.128219, 0.852056, 2.450125",\ + "0.044702, 0.070201, 0.128220, 0.852056, 2.450126",\ + "0.044702, 0.070220, 0.128222, 0.852056, 2.450128",\ + "0.046369, 0.071964, 0.128250, 0.852062, 2.450147"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.208477, 0.218207, 0.231981, 0.370730, 0.676633",\ + "0.296951, 0.306682, 0.320455, 0.459205, 0.765107",\ + "0.387709, 0.397440, 0.411214, 0.549964, 0.855866",\ + "0.453111, 0.462843, 0.476618, 0.615368, 0.921270",\ + "0.800244, 0.809980, 0.823761, 0.962517, 1.268419"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.025200, 0.034112, 0.048739, 0.301167, 0.860107",\ + "0.025200, 0.034112, 0.048739, 0.301167, 0.860107",\ + "0.025202, 0.034115, 0.048740, 0.301167, 0.860107",\ + "0.025205, 0.034118, 0.048742, 0.301167, 0.860107",\ + "0.025221, 0.034136, 0.048763, 0.301167, 0.860107"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[14]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.211928, 0.232331, 0.268319, 0.674047, 1.564311",\ + "0.300343, 0.320746, 0.356735, 0.762463, 1.652727",\ + "0.394726, 0.415129, 0.451117, 0.856845, 1.747110",\ + "0.462784, 0.483187, 0.519176, 0.924904, 1.815168",\ + "0.787427, 0.807827, 0.843815, 1.249543, 2.139807"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.041685, 0.070068, 0.126730, 0.849967, 2.447344",\ + "0.041695, 0.070068, 0.126730, 0.849965, 2.447344",\ + "0.041741, 0.070068, 0.126730, 0.849957, 2.447344",\ + "0.041758, 0.070068, 0.126730, 0.849954, 2.447345",\ + "0.041766, 0.070061, 0.126728, 0.849953, 2.447347"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.179169, 0.188682, 0.202271, 0.340918, 0.646830",\ + "0.266400, 0.276055, 0.289644, 0.428292, 0.734203",\ + "0.342508, 0.353145, 0.367252, 0.506601, 0.812513",\ + "0.397042, 0.407678, 0.421785, 0.561150, 0.867061",\ + "0.681430, 0.692081, 0.706196, 0.845682, 1.151594"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.024118, 0.032771, 0.047553, 0.299569, 0.856201",\ + "0.024118, 0.032771, 0.047553, 0.299569, 0.856201",\ + "0.024117, 0.032767, 0.047553, 0.299569, 0.856201",\ + "0.024117, 0.032759, 0.047552, 0.299568, 0.856201",\ + "0.024117, 0.032759, 0.047552, 0.299568, 0.856157"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[14]_redg_min*/ + +} /* end of pin usb_io_pu_cal_o[14] */ + +pin("usb_io_pu_cal_o[13]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.044612 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : usb_io_pu_cal_o[13]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.320701, 0.342069, 0.378299, 0.782982, 1.674885",\ + "0.408065, 0.429433, 0.465663, 0.870347, 1.762250",\ + "0.488969, 0.510342, 0.546573, 0.951258, 1.843161",\ + "0.546844, 0.568237, 0.604478, 1.009167, 1.901070",\ + "0.862468, 0.884064, 0.920396, 1.325122, 2.217029"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.044601, 0.070167, 0.128219, 0.852056, 2.450125",\ + "0.044663, 0.070167, 0.128219, 0.852056, 2.450125",\ + "0.044669, 0.070177, 0.128220, 0.852056, 2.450126",\ + "0.044669, 0.070220, 0.128222, 0.852056, 2.450128",\ + "0.046118, 0.071698, 0.128250, 0.852061, 2.450147"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.208477, 0.218207, 0.231981, 0.372429, 0.677586",\ + "0.296951, 0.306682, 0.320688, 0.461137, 0.766294",\ + "0.391373, 0.402162, 0.416428, 0.556878, 0.862036",\ + "0.460819, 0.471609, 0.485876, 0.626327, 0.931486",\ + "0.825748, 0.836544, 0.850818, 0.991274, 1.296437"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.025212, 0.034126, 0.048739, 0.301166, 0.860107",\ + "0.025213, 0.034127, 0.048739, 0.301166, 0.860107",\ + "0.025216, 0.034130, 0.048740, 0.301166, 0.860107",\ + "0.025218, 0.034133, 0.048742, 0.301166, 0.860107",\ + "0.025235, 0.034151, 0.048763, 0.301166, 0.860107"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[13]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.194489, 0.214889, 0.250877, 0.656605, 1.546869",\ + "0.282628, 0.303028, 0.339015, 0.744743, 1.635008",\ + "0.372036, 0.392436, 0.428424, 0.834152, 1.724416",\ + "0.436052, 0.456452, 0.492440, 0.898167, 1.788432",\ + "0.763219, 0.783617, 0.819604, 1.225332, 2.115596"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.041685, 0.070060, 0.126728, 0.849967, 2.447347",\ + "0.041695, 0.070060, 0.126728, 0.849965, 2.447347",\ + "0.041741, 0.070060, 0.126728, 0.849957, 2.447347",\ + "0.041758, 0.070060, 0.126728, 0.849954, 2.447347",\ + "0.041766, 0.070054, 0.126726, 0.849953, 2.447349"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.175899, 0.186544, 0.200656, 0.340918, 0.646065",\ + "0.263271, 0.273916, 0.288028, 0.428292, 0.733437",\ + "0.344128, 0.354365, 0.367954, 0.506601, 0.812513",\ + "0.399406, 0.408915, 0.422502, 0.561150, 0.867061",\ + "0.683934, 0.693446, 0.707035, 0.845682, 1.151594"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.024118, 0.032771, 0.047561, 0.299569, 0.856177",\ + "0.024118, 0.032771, 0.047561, 0.299569, 0.856176",\ + "0.024117, 0.032767, 0.047560, 0.299569, 0.856176",\ + "0.024117, 0.032759, 0.047558, 0.299568, 0.856176",\ + "0.024117, 0.032759, 0.047558, 0.299568, 0.856133"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[13]_redg_min*/ + +} /* end of pin usb_io_pu_cal_o[13] */ + +pin("usb_io_pu_cal_o[12]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.044612 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : usb_io_pu_cal_o[12]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.320701, 0.342069, 0.378299, 0.782982, 1.674885",\ + "0.408065, 0.429433, 0.465663, 0.870347, 1.762250",\ + "0.488969, 0.510342, 0.546573, 0.951258, 1.843161",\ + "0.546844, 0.568237, 0.604478, 1.009167, 1.901070",\ + "0.862468, 0.884064, 0.920396, 1.325122, 2.217029"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.044695, 0.070193, 0.128219, 0.852056, 2.450125",\ + "0.044695, 0.070193, 0.128219, 0.852056, 2.450125",\ + "0.044695, 0.070193, 0.128220, 0.852056, 2.450126",\ + "0.044695, 0.070220, 0.128222, 0.852056, 2.450128",\ + "0.044695, 0.070644, 0.128250, 0.852056, 2.450147"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.208477, 0.218207, 0.231981, 0.372429, 0.677586",\ + "0.296951, 0.306682, 0.320455, 0.460894, 0.766051",\ + "0.391373, 0.402162, 0.416428, 0.556878, 0.862036",\ + "0.460819, 0.471609, 0.485876, 0.626327, 0.931486",\ + "0.825748, 0.836544, 0.850818, 0.991274, 1.296437"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.025212, 0.034126, 0.048739, 0.301166, 0.860107",\ + "0.025212, 0.034126, 0.048739, 0.301166, 0.860107",\ + "0.025216, 0.034130, 0.048740, 0.301166, 0.860107",\ + "0.025218, 0.034133, 0.048742, 0.301166, 0.860107",\ + "0.025235, 0.034151, 0.048763, 0.301166, 0.860107"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[12]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.238920, 0.260258, 0.296474, 0.701152, 1.593054",\ + "0.327371, 0.348714, 0.384932, 0.789611, 1.681513",\ + "0.416587, 0.437948, 0.474174, 0.878857, 1.770759",\ + "0.478173, 0.498573, 0.534561, 0.940289, 1.830553",\ + "0.763219, 0.783617, 0.819604, 1.225332, 2.115596"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.041685, 0.070060, 0.126728, 0.849967, 2.447347",\ + "0.041695, 0.070060, 0.126728, 0.849965, 2.447347",\ + "0.041741, 0.070060, 0.126728, 0.849957, 2.447347",\ + "0.041758, 0.070060, 0.126728, 0.849954, 2.447347",\ + "0.041766, 0.070054, 0.126726, 0.849953, 2.447349"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.179169, 0.188682, 0.202271, 0.340918, 0.646830",\ + "0.266542, 0.276055, 0.289644, 0.428292, 0.734203",\ + "0.344853, 0.354365, 0.367954, 0.506601, 0.812513",\ + "0.399406, 0.408915, 0.422502, 0.561150, 0.867061",\ + "0.683934, 0.693446, 0.707035, 0.845682, 1.151594"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.024118, 0.032771, 0.047563, 0.299569, 0.856171",\ + "0.024118, 0.032771, 0.047563, 0.299569, 0.856171",\ + "0.024117, 0.032767, 0.047561, 0.299569, 0.856171",\ + "0.024117, 0.032759, 0.047559, 0.299568, 0.856171",\ + "0.024117, 0.032759, 0.047559, 0.299568, 0.856139"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[12]_redg_min*/ + +} /* end of pin usb_io_pu_cal_o[12] */ + +pin("usb_io_pu_cal_o[11]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.044612 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : usb_io_pu_cal_o[11]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.310563, 0.333600, 0.370684, 0.776237, 1.666485",\ + "0.397928, 0.420965, 0.458048, 0.863602, 1.753849",\ + "0.478891, 0.501955, 0.539050, 0.944602, 1.834849",\ + "0.536743, 0.559839, 0.596947, 1.002497, 1.892744",\ + "0.858742, 0.881931, 0.919078, 1.324622, 2.214868"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.051871, 0.077785, 0.129094, 0.852080, 2.449966",\ + "0.051871, 0.077785, 0.129094, 0.852080, 2.449966",\ + "0.051946, 0.077865, 0.129119, 0.852080, 2.449966",\ + "0.052034, 0.077959, 0.129147, 0.852081, 2.449966",\ + "0.052292, 0.078232, 0.129231, 0.852081, 2.450003"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.206143, 0.216949, 0.231236, 0.371702, 0.676873",\ + "0.294617, 0.305423, 0.319710, 0.460177, 0.765348",\ + "0.385375, 0.396181, 0.410468, 0.550935, 0.856106",\ + "0.450776, 0.461583, 0.475870, 0.616338, 0.921509",\ + "0.797902, 0.808713, 0.823006, 0.963477, 1.268652"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.025267, 0.034187, 0.048727, 0.301161, 0.860108",\ + "0.025267, 0.034187, 0.048727, 0.301161, 0.860108",\ + "0.025267, 0.034188, 0.048728, 0.301161, 0.860108",\ + "0.025268, 0.034189, 0.048730, 0.301161, 0.860108",\ + "0.025282, 0.034204, 0.048751, 0.301161, 0.860108"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[11]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.205226, 0.224853, 0.260301, 0.664656, 1.556533",\ + "0.293604, 0.313232, 0.348681, 0.753036, 1.644913",\ + "0.383357, 0.402977, 0.438423, 0.842777, 1.734654",\ + "0.447610, 0.467222, 0.502663, 0.907016, 1.798893",\ + "0.789341, 0.809115, 0.844630, 1.249013, 2.140893"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.037493, 0.066493, 0.127978, 0.850658, 2.444969",\ + "0.037493, 0.066493, 0.127978, 0.850658, 2.444969",\ + "0.037493, 0.066493, 0.127978, 0.850658, 2.444969",\ + "0.037493, 0.066493, 0.127978, 0.850658, 2.444969",\ + "0.037854, 0.066833, 0.128000, 0.850658, 2.444969"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.179497, 0.189096, 0.202727, 0.341364, 0.647272",\ + "0.266868, 0.276467, 0.290098, 0.428735, 0.734643",\ + "0.344994, 0.354592, 0.368223, 0.506860, 0.812768",\ + "0.399528, 0.409125, 0.422756, 0.561393, 0.867301",\ + "0.683921, 0.693531, 0.707168, 0.845803, 1.151711"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.024391, 0.033017, 0.047459, 0.299575, 0.856462",\ + "0.024391, 0.033017, 0.047459, 0.299575, 0.856462",\ + "0.024391, 0.033017, 0.047459, 0.299575, 0.856462",\ + "0.024391, 0.033017, 0.047459, 0.299575, 0.856462",\ + "0.024427, 0.033054, 0.047472, 0.299575, 0.856462"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[11]_redg_min*/ + +} /* end of pin usb_io_pu_cal_o[11] */ + +pin("usb_io_pu_cal_o[10]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.044612 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : usb_io_pu_cal_o[10]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.310563, 0.333600, 0.370684, 0.776237, 1.666485",\ + "0.397928, 0.420965, 0.458048, 0.863602, 1.753849",\ + "0.478891, 0.501955, 0.539050, 0.944602, 1.834849",\ + "0.536743, 0.559839, 0.596947, 1.002497, 1.892744",\ + "0.858742, 0.881931, 0.919078, 1.324622, 2.214868"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.051871, 0.077785, 0.129094, 0.852080, 2.449966",\ + "0.051871, 0.077785, 0.129094, 0.852080, 2.449966",\ + "0.051946, 0.077865, 0.129119, 0.852080, 2.449966",\ + "0.052034, 0.077959, 0.129147, 0.852081, 2.449966",\ + "0.052292, 0.078232, 0.129231, 0.852081, 2.450003"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.206143, 0.216949, 0.231236, 0.371702, 0.676873",\ + "0.294617, 0.305423, 0.319710, 0.460177, 0.765348",\ + "0.385375, 0.396181, 0.410468, 0.550935, 0.856106",\ + "0.450776, 0.461583, 0.475870, 0.616338, 0.921509",\ + "0.797902, 0.808713, 0.823006, 0.963477, 1.268652"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.025267, 0.034187, 0.048724, 0.301161, 0.860108",\ + "0.025267, 0.034187, 0.048724, 0.301161, 0.860108",\ + "0.025267, 0.034188, 0.048727, 0.301161, 0.860108",\ + "0.025268, 0.034189, 0.048730, 0.301161, 0.860108",\ + "0.025282, 0.034204, 0.048750, 0.301161, 0.860108"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[10]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.219758, 0.239385, 0.274833, 0.679189, 1.571066",\ + "0.308173, 0.327801, 0.363249, 0.767605, 1.659482",\ + "0.402556, 0.422183, 0.457632, 0.861987, 1.753864",\ + "0.470615, 0.490242, 0.525690, 0.930046, 1.821923",\ + "0.795255, 0.814880, 0.850328, 1.254683, 2.146560"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.037493, 0.066526, 0.127980, 0.850723, 2.444973",\ + "0.037493, 0.066526, 0.127980, 0.850723, 2.444973",\ + "0.037493, 0.066525, 0.127980, 0.850723, 2.444973",\ + "0.037493, 0.066525, 0.127980, 0.850723, 2.444972",\ + "0.037489, 0.066522, 0.127980, 0.850723, 2.444969"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.184074, 0.193673, 0.207304, 0.345941, 0.651849",\ + "0.268886, 0.278485, 0.292117, 0.430754, 0.736662",\ + "0.344994, 0.354592, 0.368223, 0.506860, 0.812768",\ + "0.399528, 0.409125, 0.422756, 0.561393, 0.867301",\ + "0.683921, 0.693531, 0.707168, 0.845803, 1.151711"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.024391, 0.033017, 0.047459, 0.299575, 0.856462",\ + "0.024391, 0.033017, 0.047459, 0.299575, 0.856462",\ + "0.024391, 0.033017, 0.047459, 0.299575, 0.856462",\ + "0.024391, 0.033017, 0.047459, 0.299575, 0.856462",\ + "0.024427, 0.033054, 0.047472, 0.299575, 0.856462"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[10]_redg_min*/ + +} /* end of pin usb_io_pu_cal_o[10] */ + +pin("usb_io_pu_cal_o[9]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.044612 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : usb_io_pu_cal_o[9]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.310563, 0.333600, 0.370684, 0.776237, 1.666485",\ + "0.397928, 0.420965, 0.458048, 0.863602, 1.753849",\ + "0.478891, 0.501955, 0.539050, 0.944602, 1.834849",\ + "0.536743, 0.559839, 0.596947, 1.002497, 1.892744",\ + "0.858742, 0.881931, 0.919078, 1.324622, 2.214868"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.051871, 0.077785, 0.129094, 0.852080, 2.449964",\ + "0.051871, 0.077785, 0.129094, 0.852080, 2.449965",\ + "0.051946, 0.077865, 0.129119, 0.852080, 2.449965",\ + "0.052034, 0.077959, 0.129147, 0.852081, 2.449965",\ + "0.052292, 0.078232, 0.129231, 0.852081, 2.449997"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.209465, 0.219196, 0.232970, 0.371719, 0.677621",\ + "0.298173, 0.307904, 0.321678, 0.460428, 0.766330",\ + "0.393912, 0.403643, 0.417418, 0.556169, 0.862071",\ + "0.463358, 0.473091, 0.486867, 0.625618, 0.931520",\ + "0.828290, 0.838027, 0.851809, 0.990566, 1.296468"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.025267, 0.034187, 0.048739, 0.301161, 0.860107",\ + "0.025267, 0.034187, 0.048740, 0.301161, 0.860107",\ + "0.025267, 0.034188, 0.048743, 0.301161, 0.860107",\ + "0.025268, 0.034189, 0.048747, 0.301161, 0.860107",\ + "0.025282, 0.034204, 0.048767, 0.301161, 0.860107"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[9]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.202317, 0.221942, 0.257390, 0.661745, 1.553622",\ + "0.290456, 0.310081, 0.345529, 0.749884, 1.641761",\ + "0.379864, 0.399489, 0.434937, 0.839292, 1.731169",\ + "0.443880, 0.463505, 0.498953, 0.903308, 1.795185",\ + "0.771045, 0.790669, 0.826116, 1.230471, 2.122348"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.037489, 0.066522, 0.127980, 0.850724, 2.444973",\ + "0.037489, 0.066522, 0.127980, 0.850724, 2.444973",\ + "0.037489, 0.066522, 0.127980, 0.850724, 2.444973",\ + "0.037489, 0.066522, 0.127980, 0.850724, 2.444972",\ + "0.037486, 0.066519, 0.127980, 0.850725, 2.444969"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.178388, 0.187993, 0.201627, 0.340263, 0.646171",\ + "0.265760, 0.275365, 0.289000, 0.427635, 0.733544",\ + "0.345043, 0.355588, 0.369648, 0.508490, 0.814398",\ + "0.399593, 0.410134, 0.424192, 0.564475, 0.869603",\ + "0.684147, 0.694701, 0.708766, 0.849054, 1.154177"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.024411, 0.033033, 0.047459, 0.299575, 0.856462",\ + "0.024411, 0.033033, 0.047459, 0.299575, 0.856462",\ + "0.024411, 0.033033, 0.047459, 0.299575, 0.856462",\ + "0.024411, 0.033033, 0.047459, 0.299575, 0.856462",\ + "0.024446, 0.033071, 0.047472, 0.299576, 0.856462"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[9]_redg_min*/ + +} /* end of pin usb_io_pu_cal_o[9] */ + +pin("usb_io_pu_cal_o[8]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.044612 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : usb_io_pu_cal_o[8]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.310563, 0.333600, 0.370684, 0.776237, 1.666485",\ + "0.397928, 0.420965, 0.458048, 0.863602, 1.753849",\ + "0.478891, 0.501955, 0.539050, 0.944602, 1.834849",\ + "0.536743, 0.559839, 0.596947, 1.002497, 1.892744",\ + "0.858742, 0.881931, 0.919078, 1.324622, 2.214868"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.051871, 0.077785, 0.129094, 0.852080, 2.449966",\ + "0.051871, 0.077785, 0.129094, 0.852080, 2.449966",\ + "0.051946, 0.077865, 0.129119, 0.852080, 2.449966",\ + "0.052034, 0.077959, 0.129147, 0.852081, 2.449966",\ + "0.052292, 0.078232, 0.129231, 0.852081, 2.449966"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.209465, 0.219196, 0.232970, 0.371719, 0.677621",\ + "0.297931, 0.307661, 0.321435, 0.460184, 0.766087",\ + "0.393912, 0.403643, 0.417418, 0.556169, 0.862071",\ + "0.463358, 0.473091, 0.486867, 0.625618, 0.931520",\ + "0.828290, 0.838027, 0.851809, 0.990566, 1.296468"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.025267, 0.034187, 0.048739, 0.301161, 0.860107",\ + "0.025267, 0.034187, 0.048739, 0.301161, 0.860107",\ + "0.025267, 0.034188, 0.048743, 0.301161, 0.860107",\ + "0.025268, 0.034189, 0.048747, 0.301161, 0.860107",\ + "0.025282, 0.034204, 0.048767, 0.301161, 0.860107"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[8]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.248424, 0.271436, 0.308509, 0.714064, 1.604311",\ + "0.336713, 0.359725, 0.396797, 0.802353, 1.692600",\ + "0.429673, 0.449299, 0.484746, 0.889101, 1.780978",\ + "0.486001, 0.505626, 0.541074, 0.945429, 1.837306",\ + "0.771045, 0.790669, 0.826116, 1.230471, 2.122348"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.037489, 0.066522, 0.127980, 0.850724, 2.444973",\ + "0.037489, 0.066522, 0.127980, 0.850724, 2.444973",\ + "0.037489, 0.066522, 0.127980, 0.850724, 2.444973",\ + "0.037489, 0.066522, 0.127980, 0.850724, 2.444972",\ + "0.037486, 0.066519, 0.127980, 0.850725, 2.444969"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.184129, 0.194678, 0.208740, 0.349027, 0.654152",\ + "0.268945, 0.279493, 0.293555, 0.433842, 0.738967",\ + "0.345043, 0.355588, 0.369648, 0.509933, 0.815059",\ + "0.399593, 0.410134, 0.424192, 0.564475, 0.869603",\ + "0.684147, 0.694701, 0.708766, 0.849054, 1.154177"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.024415, 0.033034, 0.047459, 0.299575, 0.856462",\ + "0.024415, 0.033034, 0.047459, 0.299575, 0.856462",\ + "0.024415, 0.033034, 0.047459, 0.299575, 0.856462",\ + "0.024415, 0.033034, 0.047459, 0.299575, 0.856462",\ + "0.024441, 0.033067, 0.047472, 0.299576, 0.856462"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[8]_redg_min*/ + +} /* end of pin usb_io_pu_cal_o[8] */ + +pin("usb_io_pu_cal_o[7]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.044612 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : usb_io_pu_cal_o[7]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.310638, 0.333683, 0.370769, 0.776322, 1.666569",\ + "0.398002, 0.421047, 0.458133, 0.863687, 1.753934",\ + "0.478900, 0.501952, 0.539042, 0.944594, 1.834842",\ + "0.536750, 0.559833, 0.596935, 1.002486, 1.892733",\ + "0.841468, 0.864657, 0.901804, 1.307347, 2.197594"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.051891, 0.077808, 0.129101, 0.852080, 2.449966",\ + "0.051892, 0.077808, 0.129101, 0.852080, 2.449966",\ + "0.051912, 0.077829, 0.129108, 0.852080, 2.449966",\ + "0.051998, 0.077921, 0.129136, 0.852080, 2.449966",\ + "0.052293, 0.078232, 0.129231, 0.852081, 2.450003"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.213971, 0.224767, 0.239042, 0.379500, 0.684663",\ + "0.302629, 0.313425, 0.327700, 0.468158, 0.773321",\ + "0.398375, 0.409171, 0.423447, 0.563905, 0.869068",\ + "0.467906, 0.478703, 0.492979, 0.633438, 0.938602",\ + "0.835457, 0.846260, 0.860543, 1.001007, 1.306175"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.025238, 0.034155, 0.048727, 0.301163, 0.860108",\ + "0.025238, 0.034155, 0.048727, 0.301163, 0.860108",\ + "0.025238, 0.034156, 0.048728, 0.301163, 0.860108",\ + "0.025240, 0.034158, 0.048730, 0.301163, 0.860108",\ + "0.025257, 0.034176, 0.048751, 0.301163, 0.860108"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[7]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.205226, 0.224853, 0.260301, 0.664656, 1.556533",\ + "0.293604, 0.313232, 0.348681, 0.753036, 1.644913",\ + "0.383357, 0.402977, 0.438423, 0.842777, 1.734654",\ + "0.447610, 0.467222, 0.502663, 0.907016, 1.798893",\ + "0.789341, 0.809115, 0.844630, 1.249013, 2.140893"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.037493, 0.066493, 0.127978, 0.850658, 2.444959",\ + "0.037493, 0.066493, 0.127978, 0.850658, 2.444959",\ + "0.037493, 0.066493, 0.127978, 0.850658, 2.444959",\ + "0.037493, 0.066493, 0.127978, 0.850658, 2.444959",\ + "0.037854, 0.066833, 0.128000, 0.850658, 2.444959"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.176807, 0.187341, 0.201395, 0.341364, 0.646807",\ + "0.264176, 0.274709, 0.288763, 0.428735, 0.734175",\ + "0.344994, 0.354592, 0.368223, 0.506860, 0.812768",\ + "0.399528, 0.409125, 0.422756, 0.561393, 0.867301",\ + "0.683921, 0.693531, 0.707168, 0.845803, 1.151711"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.024391, 0.033017, 0.047448, 0.299575, 0.856488",\ + "0.024391, 0.033017, 0.047448, 0.299575, 0.856488",\ + "0.024391, 0.033017, 0.047448, 0.299575, 0.856488",\ + "0.024391, 0.033017, 0.047450, 0.299575, 0.856488",\ + "0.024427, 0.033054, 0.047464, 0.299575, 0.856488"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[7]_redg_min*/ + +} /* end of pin usb_io_pu_cal_o[7] */ + +pin("usb_io_pu_cal_o[6]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.044612 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : usb_io_pu_cal_o[6]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.310638, 0.333683, 0.370769, 0.776322, 1.666569",\ + "0.398002, 0.421047, 0.458133, 0.863687, 1.753934",\ + "0.478900, 0.501952, 0.539042, 0.944594, 1.834842",\ + "0.536750, 0.559833, 0.596935, 1.002486, 1.892733",\ + "0.841468, 0.864657, 0.901804, 1.307347, 2.197594"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.051891, 0.077808, 0.129101, 0.852080, 2.449966",\ + "0.051892, 0.077808, 0.129101, 0.852080, 2.449966",\ + "0.051912, 0.077829, 0.129108, 0.852080, 2.449966",\ + "0.051998, 0.077921, 0.129136, 0.852080, 2.449966",\ + "0.052293, 0.078232, 0.129231, 0.852081, 2.450003"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.213971, 0.224767, 0.239042, 0.379500, 0.684663",\ + "0.302629, 0.313425, 0.327700, 0.468158, 0.773321",\ + "0.398375, 0.409171, 0.423447, 0.563905, 0.869068",\ + "0.467906, 0.478703, 0.492979, 0.633438, 0.938602",\ + "0.835457, 0.846260, 0.860543, 1.001007, 1.306175"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.025238, 0.034155, 0.048724, 0.301163, 0.860108",\ + "0.025238, 0.034155, 0.048724, 0.301163, 0.860108",\ + "0.025238, 0.034156, 0.048727, 0.301163, 0.860108",\ + "0.025240, 0.034158, 0.048730, 0.301163, 0.860108",\ + "0.025257, 0.034176, 0.048750, 0.301163, 0.860108"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[6]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.219758, 0.239385, 0.274833, 0.679189, 1.571066",\ + "0.308173, 0.327801, 0.363249, 0.767605, 1.659482",\ + "0.402556, 0.422183, 0.457632, 0.861987, 1.753864",\ + "0.469866, 0.490242, 0.525690, 0.930046, 1.821923",\ + "0.795255, 0.814880, 0.850328, 1.254683, 2.146560"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.037493, 0.066526, 0.127980, 0.850723, 2.444963",\ + "0.037493, 0.066526, 0.127980, 0.850723, 2.444963",\ + "0.037493, 0.066525, 0.127980, 0.850723, 2.444963",\ + "0.037493, 0.066525, 0.127980, 0.850723, 2.444962",\ + "0.037489, 0.066522, 0.127980, 0.850723, 2.444959"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.176807, 0.187341, 0.201395, 0.341676, 0.646807",\ + "0.264176, 0.274709, 0.288763, 0.429043, 0.734175",\ + "0.344994, 0.354592, 0.368223, 0.506860, 0.812768",\ + "0.399528, 0.409125, 0.422756, 0.561393, 0.867301",\ + "0.683921, 0.693531, 0.707168, 0.845803, 1.151711"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.024391, 0.033017, 0.047448, 0.299575, 0.856488",\ + "0.024391, 0.033017, 0.047448, 0.299575, 0.856488",\ + "0.024391, 0.033017, 0.047448, 0.299575, 0.856488",\ + "0.024391, 0.033017, 0.047450, 0.299575, 0.856488",\ + "0.024427, 0.033054, 0.047464, 0.299575, 0.856488"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[6]_redg_min*/ + +} /* end of pin usb_io_pu_cal_o[6] */ + +pin("usb_io_pu_cal_o[5]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.044612 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : usb_io_pu_cal_o[5]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.320620, 0.341983, 0.378211, 0.782894, 1.674796",\ + "0.407985, 0.429348, 0.465575, 0.870258, 1.762161",\ + "0.488889, 0.510256, 0.546486, 0.951170, 1.843073",\ + "0.546764, 0.568152, 0.604391, 1.009078, 1.900981",\ + "0.851568, 0.873026, 0.909296, 1.313997, 2.205901"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.044601, 0.070156, 0.128218, 0.852056, 2.450125",\ + "0.044663, 0.070159, 0.128218, 0.852056, 2.450125",\ + "0.044669, 0.070166, 0.128219, 0.852056, 2.450125",\ + "0.044669, 0.070209, 0.128222, 0.852056, 2.450127",\ + "0.046118, 0.071698, 0.128231, 0.852061, 2.450134"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.216513, 0.226251, 0.240034, 0.378792, 0.684694",\ + "0.305171, 0.314909, 0.328692, 0.467450, 0.773352",\ + "0.400916, 0.410655, 0.424439, 0.563197, 0.869098",\ + "0.470448, 0.480187, 0.493971, 0.632730, 0.938632",\ + "0.838001, 0.847745, 0.861536, 1.000300, 1.306202"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.025212, 0.034126, 0.048771, 0.301166, 0.860107",\ + "0.025213, 0.034127, 0.048771, 0.301166, 0.860107",\ + "0.025216, 0.034130, 0.048772, 0.301166, 0.860107",\ + "0.025218, 0.034133, 0.048774, 0.301166, 0.860107",\ + "0.025235, 0.034151, 0.048795, 0.301166, 0.860107"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[5]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.194489, 0.214889, 0.250877, 0.656605, 1.546869",\ + "0.282628, 0.303028, 0.339015, 0.744743, 1.635008",\ + "0.372036, 0.392436, 0.428424, 0.834152, 1.724416",\ + "0.436052, 0.456452, 0.492440, 0.898167, 1.788432",\ + "0.763219, 0.783617, 0.819604, 1.225332, 2.115596"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.041711, 0.070060, 0.126728, 0.849963, 2.447347",\ + "0.041711, 0.070060, 0.126728, 0.849963, 2.447347",\ + "0.041711, 0.070060, 0.126728, 0.849963, 2.447347",\ + "0.041711, 0.070060, 0.126728, 0.849963, 2.447347",\ + "0.041716, 0.070054, 0.126726, 0.849962, 2.447349"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.175899, 0.186544, 0.200656, 0.340982, 0.646065",\ + "0.263271, 0.273916, 0.288028, 0.428355, 0.733437",\ + "0.344128, 0.354771, 0.368883, 0.509209, 0.814291",\ + "0.401818, 0.412460, 0.426571, 0.566896, 0.871980",\ + "0.705550, 0.716209, 0.730328, 0.870579, 1.175736"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.024130, 0.032772, 0.047558, 0.299569, 0.856133",\ + "0.024130, 0.032772, 0.047558, 0.299569, 0.856133",\ + "0.024130, 0.032772, 0.047558, 0.299569, 0.856133",\ + "0.024130, 0.032776, 0.047558, 0.299569, 0.856133",\ + "0.024160, 0.032809, 0.047574, 0.299570, 0.856133"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[5]_redg_min*/ + +} /* end of pin usb_io_pu_cal_o[5] */ + +pin("usb_io_pu_cal_o[4]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.044612 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : usb_io_pu_cal_o[4]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.320620, 0.341983, 0.378211, 0.782894, 1.674796",\ + "0.407985, 0.429348, 0.465575, 0.870258, 1.762161",\ + "0.488889, 0.510256, 0.546486, 0.951170, 1.843073",\ + "0.546764, 0.568152, 0.604391, 1.009078, 1.900981",\ + "0.851568, 0.873026, 0.909296, 1.313997, 2.205901"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.044695, 0.070193, 0.128218, 0.852056, 2.450125",\ + "0.044695, 0.070193, 0.128218, 0.852056, 2.450125",\ + "0.044695, 0.070193, 0.128219, 0.852056, 2.450125",\ + "0.044695, 0.070209, 0.128222, 0.852056, 2.450127",\ + "0.044695, 0.070356, 0.128231, 0.852056, 2.450134"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.216513, 0.226251, 0.240034, 0.378792, 0.684694",\ + "0.305171, 0.314909, 0.328692, 0.467450, 0.773352",\ + "0.400916, 0.410655, 0.424439, 0.563197, 0.869098",\ + "0.470448, 0.480187, 0.493971, 0.632730, 0.938632",\ + "0.838001, 0.847745, 0.861536, 1.000300, 1.306202"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.025212, 0.034126, 0.048771, 0.301166, 0.860107",\ + "0.025212, 0.034126, 0.048771, 0.301166, 0.860107",\ + "0.025216, 0.034130, 0.048772, 0.301166, 0.860107",\ + "0.025218, 0.034133, 0.048774, 0.301166, 0.860107",\ + "0.025235, 0.034151, 0.048795, 0.301166, 0.860107"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[4]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.238935, 0.260283, 0.296504, 0.701185, 1.593087",\ + "0.327362, 0.348711, 0.384931, 0.789612, 1.681514",\ + "0.416458, 0.437806, 0.474027, 0.878708, 1.770610",\ + "0.478173, 0.498573, 0.534561, 0.940289, 1.830553",\ + "0.763219, 0.783617, 0.819604, 1.225332, 2.115596"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.041711, 0.070060, 0.126728, 0.849963, 2.447347",\ + "0.041711, 0.070060, 0.126728, 0.849963, 2.447347",\ + "0.041711, 0.070060, 0.126728, 0.849963, 2.447347",\ + "0.041711, 0.070060, 0.126728, 0.849963, 2.447347",\ + "0.041716, 0.070054, 0.126726, 0.849962, 2.447349"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.179257, 0.188774, 0.202365, 0.341012, 0.646923",\ + "0.266626, 0.276142, 0.289732, 0.428379, 0.734291",\ + "0.347482, 0.356996, 0.370585, 0.509232, 0.815144",\ + "0.405200, 0.414714, 0.428304, 0.566951, 0.872863",\ + "0.708812, 0.718338, 0.731933, 0.870579, 1.176490"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.024130, 0.032772, 0.047559, 0.299569, 0.856139",\ + "0.024130, 0.032772, 0.047559, 0.299569, 0.856139",\ + "0.024130, 0.032772, 0.047559, 0.299569, 0.856139",\ + "0.024130, 0.032776, 0.047559, 0.299569, 0.856139",\ + "0.024160, 0.032809, 0.047572, 0.299570, 0.856139"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[4]_redg_min*/ + +} /* end of pin usb_io_pu_cal_o[4] */ + +pin("usb_io_pu_cal_o[3]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.044612 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : usb_io_pu_cal_o[3]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.320745, 0.342120, 0.378352, 0.783037, 1.674940",\ + "0.408109, 0.429484, 0.465717, 0.870402, 1.762305",\ + "0.488983, 0.510358, 0.546591, 0.951276, 1.843179",\ + "0.546734, 0.568108, 0.604341, 1.009026, 1.900929",\ + "0.851113, 0.872490, 0.908724, 1.313410, 2.205313"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.044702, 0.070201, 0.128220, 0.852056, 2.450126",\ + "0.044702, 0.070201, 0.128220, 0.852056, 2.450126",\ + "0.044702, 0.070201, 0.128220, 0.852056, 2.450126",\ + "0.044702, 0.070201, 0.128220, 0.852056, 2.450126",\ + "0.046369, 0.071964, 0.128220, 0.852062, 2.450126"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.216415, 0.226147, 0.239922, 0.378673, 0.684575",\ + "0.304894, 0.314626, 0.328401, 0.467152, 0.773054",\ + "0.400819, 0.410552, 0.424328, 0.563079, 0.868981",\ + "0.469454, 0.479186, 0.492962, 0.631714, 0.937616",\ + "0.837901, 0.847639, 0.861421, 1.000178, 1.306080"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.025202, 0.034115, 0.048744, 0.301167, 0.860107",\ + "0.025202, 0.034115, 0.048744, 0.301167, 0.860107",\ + "0.025203, 0.034116, 0.048746, 0.301167, 0.860107",\ + "0.025205, 0.034118, 0.048746, 0.301167, 0.860107",\ + "0.025222, 0.034137, 0.048767, 0.301167, 0.860107"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[3]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.197396, 0.217798, 0.253787, 0.659515, 1.549779",\ + "0.285773, 0.306177, 0.342166, 0.747894, 1.638158",\ + "0.375534, 0.395928, 0.431912, 0.837641, 1.727905",\ + "0.439799, 0.460179, 0.496157, 0.901887, 1.792151",\ + "0.781328, 0.801955, 0.838037, 1.243750, 2.134013"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.041723, 0.069999, 0.126709, 0.849959, 2.447141",\ + "0.041723, 0.069999, 0.126709, 0.849959, 2.447141",\ + "0.041723, 0.069999, 0.126709, 0.849959, 2.447141",\ + "0.041723, 0.069999, 0.126709, 0.849959, 2.447141",\ + "0.041728, 0.070141, 0.126932, 0.849959, 2.447141"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.177011, 0.187648, 0.201756, 0.342079, 0.647165",\ + "0.264382, 0.275019, 0.289127, 0.429450, 0.734536",\ + "0.342508, 0.353145, 0.367252, 0.507575, 0.812661",\ + "0.397042, 0.407678, 0.421785, 0.562107, 0.867194",\ + "0.681430, 0.692081, 0.706196, 0.846525, 1.151605"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.024102, 0.032747, 0.047552, 0.299568, 0.856157",\ + "0.024102, 0.032747, 0.047552, 0.299568, 0.856157",\ + "0.024102, 0.032747, 0.047552, 0.299568, 0.856157",\ + "0.024102, 0.032747, 0.047552, 0.299568, 0.856157",\ + "0.024132, 0.032784, 0.047567, 0.299569, 0.856157"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[3]_redg_min*/ + +} /* end of pin usb_io_pu_cal_o[3] */ + +pin("usb_io_pu_cal_o[2]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.044612 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : usb_io_pu_cal_o[2]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.320745, 0.342120, 0.378352, 0.783037, 1.674940",\ + "0.408109, 0.429484, 0.465717, 0.870402, 1.762305",\ + "0.488983, 0.510358, 0.546591, 0.951276, 1.843179",\ + "0.546734, 0.568108, 0.604341, 1.009026, 1.900929",\ + "0.851113, 0.872490, 0.908724, 1.313410, 2.205313"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.044702, 0.070201, 0.128220, 0.852056, 2.450126",\ + "0.044702, 0.070201, 0.128220, 0.852056, 2.450126",\ + "0.044702, 0.070201, 0.128220, 0.852056, 2.450126",\ + "0.044702, 0.070201, 0.128220, 0.852056, 2.450126",\ + "0.046369, 0.071964, 0.128220, 0.852062, 2.450126"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.216415, 0.226147, 0.239922, 0.378673, 0.684575",\ + "0.304894, 0.314626, 0.328401, 0.467152, 0.773054",\ + "0.400819, 0.410552, 0.424328, 0.563079, 0.868981",\ + "0.469454, 0.479186, 0.492962, 0.631714, 0.937616",\ + "0.837901, 0.847639, 0.861421, 1.000178, 1.306080"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.025200, 0.034112, 0.048744, 0.301167, 0.860107",\ + "0.025200, 0.034112, 0.048744, 0.301167, 0.860107",\ + "0.025202, 0.034115, 0.048746, 0.301167, 0.860107",\ + "0.025205, 0.034118, 0.048746, 0.301166, 0.860107",\ + "0.025221, 0.034136, 0.048767, 0.301165, 0.860107"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[2]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.211928, 0.232331, 0.268319, 0.674047, 1.564311",\ + "0.300343, 0.320746, 0.356735, 0.762463, 1.652727",\ + "0.394726, 0.415129, 0.451117, 0.856845, 1.747110",\ + "0.462784, 0.483187, 0.519176, 0.924904, 1.815168",\ + "0.787427, 0.807827, 0.843815, 1.249543, 2.139807"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.041723, 0.070068, 0.126730, 0.849961, 2.447344",\ + "0.041723, 0.070068, 0.126730, 0.849961, 2.447344",\ + "0.041723, 0.070068, 0.126730, 0.849961, 2.447344",\ + "0.041723, 0.070068, 0.126730, 0.849961, 2.447345",\ + "0.041728, 0.070061, 0.126728, 0.849959, 2.447347"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.181588, 0.192225, 0.206333, 0.346656, 0.651742",\ + "0.266400, 0.277038, 0.291146, 0.431469, 0.736554",\ + "0.342508, 0.353145, 0.367252, 0.507575, 0.812661",\ + "0.397042, 0.407678, 0.421785, 0.562107, 0.867194",\ + "0.681430, 0.692081, 0.706196, 0.846525, 1.151605"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.024102, 0.032747, 0.047552, 0.299568, 0.856157",\ + "0.024102, 0.032747, 0.047552, 0.299568, 0.856157",\ + "0.024102, 0.032747, 0.047552, 0.299568, 0.856157",\ + "0.024102, 0.032747, 0.047552, 0.299568, 0.856157",\ + "0.024132, 0.032784, 0.047567, 0.299569, 0.856157"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[2]_redg_min*/ + +} /* end of pin usb_io_pu_cal_o[2] */ + +pin("usb_io_pu_cal_o[1]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.044612 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : usb_io_pu_cal_o[1]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.320745, 0.342120, 0.378352, 0.783037, 1.674940",\ + "0.408109, 0.429484, 0.465717, 0.870402, 1.762305",\ + "0.488983, 0.510358, 0.546591, 0.951276, 1.843179",\ + "0.546734, 0.568108, 0.604341, 1.009026, 1.900929",\ + "0.851113, 0.872490, 0.908724, 1.313410, 2.205313"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.044601, 0.070181, 0.128220, 0.852056, 2.450126",\ + "0.044663, 0.070181, 0.128220, 0.852056, 2.450126",\ + "0.044669, 0.070181, 0.128220, 0.852056, 2.450126",\ + "0.044669, 0.070181, 0.128220, 0.852056, 2.450126",\ + "0.046118, 0.071698, 0.128220, 0.852061, 2.450126"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.216415, 0.226147, 0.239922, 0.378673, 0.684575",\ + "0.304894, 0.314626, 0.328401, 0.467152, 0.773054",\ + "0.400819, 0.410552, 0.424328, 0.563079, 0.868981",\ + "0.469454, 0.479186, 0.492962, 0.631714, 0.937616",\ + "0.837901, 0.847639, 0.861421, 1.000178, 1.306080"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.025212, 0.034126, 0.048744, 0.301166, 0.860107",\ + "0.025213, 0.034127, 0.048744, 0.301166, 0.860107",\ + "0.025216, 0.034130, 0.048746, 0.301165, 0.860107",\ + "0.025218, 0.034133, 0.048746, 0.301165, 0.860107",\ + "0.025235, 0.034151, 0.048767, 0.301164, 0.860107"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[1]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.194489, 0.214889, 0.250877, 0.656605, 1.546869",\ + "0.282628, 0.303028, 0.339015, 0.744743, 1.635008",\ + "0.372036, 0.392436, 0.428424, 0.834152, 1.724416",\ + "0.436052, 0.456452, 0.492440, 0.898167, 1.788432",\ + "0.763219, 0.783617, 0.819604, 1.225332, 2.115596"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.041723, 0.070060, 0.126728, 0.849961, 2.447347",\ + "0.041723, 0.070060, 0.126728, 0.849961, 2.447347",\ + "0.041723, 0.070060, 0.126728, 0.849961, 2.447347",\ + "0.041723, 0.070060, 0.126728, 0.849961, 2.447347",\ + "0.041728, 0.070054, 0.126726, 0.849959, 2.447349"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.175899, 0.186544, 0.200656, 0.340982, 0.646065",\ + "0.263271, 0.273916, 0.288028, 0.428355, 0.733437",\ + "0.344128, 0.354771, 0.368883, 0.509209, 0.814291",\ + "0.401818, 0.412460, 0.426571, 0.566896, 0.871980",\ + "0.705550, 0.716209, 0.730328, 0.870660, 1.175736"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.024102, 0.032747, 0.047558, 0.299568, 0.856133",\ + "0.024102, 0.032747, 0.047558, 0.299568, 0.856133",\ + "0.024102, 0.032747, 0.047558, 0.299568, 0.856133",\ + "0.024102, 0.032747, 0.047558, 0.299568, 0.856133",\ + "0.024132, 0.032784, 0.047574, 0.299569, 0.856133"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[1]_redg_min*/ + +} /* end of pin usb_io_pu_cal_o[1] */ + +pin("usb_io_pu_cal_o[0]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.044612 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : usb_io_pu_cal_o[0]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.320745, 0.342120, 0.378352, 0.783037, 1.674940",\ + "0.408109, 0.429484, 0.465717, 0.870402, 1.762305",\ + "0.488983, 0.510358, 0.546591, 0.951276, 1.843179",\ + "0.546734, 0.568108, 0.604341, 1.009026, 1.900929",\ + "0.851113, 0.872490, 0.908724, 1.313410, 2.205313"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.044695, 0.070193, 0.128220, 0.852056, 2.450126",\ + "0.044695, 0.070193, 0.128220, 0.852056, 2.450126",\ + "0.044695, 0.070193, 0.128220, 0.852056, 2.450126",\ + "0.044695, 0.070193, 0.128220, 0.852056, 2.450126",\ + "0.044688, 0.070187, 0.128220, 0.852056, 2.450126"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.216415, 0.226147, 0.239922, 0.378673, 0.684575",\ + "0.304894, 0.314626, 0.328401, 0.467152, 0.773054",\ + "0.400819, 0.410552, 0.424328, 0.563079, 0.868981",\ + "0.469454, 0.479186, 0.492962, 0.631714, 0.937616",\ + "0.837901, 0.847639, 0.861421, 1.000178, 1.306080"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.025212, 0.034126, 0.048744, 0.301166, 0.860107",\ + "0.025212, 0.034126, 0.048744, 0.301166, 0.860107",\ + "0.025216, 0.034130, 0.048746, 0.301165, 0.860107",\ + "0.025218, 0.034133, 0.048746, 0.301165, 0.860107",\ + "0.025235, 0.034151, 0.048767, 0.301164, 0.860107"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[0]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.253595, 0.273995, 0.309982, 0.715710, 1.605975",\ + "0.340966, 0.361366, 0.397353, 0.803081, 1.693346",\ + "0.421845, 0.442245, 0.478233, 0.883961, 1.774225",\ + "0.478173, 0.498573, 0.534561, 0.940289, 1.830553",\ + "0.763219, 0.783617, 0.819604, 1.225332, 2.115596"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.041723, 0.070060, 0.126728, 0.849961, 2.447347",\ + "0.041723, 0.070060, 0.126728, 0.849961, 2.447347",\ + "0.041723, 0.070060, 0.126728, 0.849961, 2.447347",\ + "0.041723, 0.070060, 0.126728, 0.849961, 2.447347",\ + "0.041728, 0.070054, 0.126726, 0.849959, 2.447349"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.187072, 0.197718, 0.211831, 0.352158, 0.657240",\ + "0.275510, 0.286157, 0.300270, 0.440597, 0.745678",\ + "0.366248, 0.376893, 0.391005, 0.531331, 0.836413",\ + "0.431562, 0.442205, 0.456315, 0.596641, 0.901724",\ + "0.774613, 0.785269, 0.799387, 0.939719, 1.244796"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.000583, 0.001725, 0.015098, 0.044612"); + values ( "0.024102, 0.032747, 0.047559, 0.299568, 0.856139",\ + "0.024102, 0.032747, 0.047559, 0.299568, 0.856139",\ + "0.024102, 0.032747, 0.047559, 0.299568, 0.856139",\ + "0.024102, 0.032747, 0.047559, 0.299568, 0.856139",\ + "0.024132, 0.032784, 0.047572, 0.299569, 0.856139"); + } + + } /* end of arc clk_ast_tlul_i_usb_io_pu_cal_o[0]_redg_min*/ + +} /* end of pin usb_io_pu_cal_o[0] */ +} /* end of bus usb_io_pu_cal_o */ + +pin("adc_pd_i") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000990 ; + + /* Other user defined attributes. */ + original_pin : adc_pd_i; + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.145974, 0.070413, 0.002322, -0.008532, 0.040411",\ + "0.237817, 0.162519, 0.094482, 0.084652, 0.136438",\ + "0.327313, 0.252083, 0.184412, 0.176262, 0.232381",\ + "0.476369, 0.401228, 0.333138, 0.324719, 0.380566",\ + "0.727129, 0.652156, 0.582810, 0.572596, 0.624823"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.143537, 0.097803, 0.067619, 0.059035, 0.070038",\ + "0.237266, 0.190708, 0.160460, 0.151771, 0.162549",\ + "0.329371, 0.281569, 0.251215, 0.242361, 0.252794",\ + "0.482853, 0.435010, 0.403977, 0.394743, 0.404895",\ + "0.739407, 0.691484, 0.659103, 0.649115, 0.658707"); + } + + } /* end of arc clk_ast_adc_i_adc_pd_i_stupr*/ + + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.059104, 0.006478, 0.063764, 0.149867, 0.326932",\ + "-0.151184, -0.084885, -0.026675, 0.059343, 0.235088",\ + "-0.241063, -0.173618, -0.113766, -0.027872, 0.145596",\ + "-0.389953, -0.320592, -0.259252, -0.172562, 0.001425",\ + "-0.640054, -0.566890, -0.503114, -0.414430, -0.237640"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.075633, -0.033180, 0.001225, 0.107355, 0.367997",\ + "-0.168712, -0.126409, -0.091657, -0.008939, 0.184913",\ + "-0.259774, -0.217681, -0.182405, -0.135026, -0.041991",\ + "-0.408979, -0.365800, -0.330498, -0.282705, -0.188522",\ + "-0.657040, -0.611703, -0.576351, -0.527733, -0.431269"); + } + + } /* end of arc clk_ast_adc_i_adc_pd_i_hldr*/ + +} /* end of pin adc_pd_i */ + +pin("adc_a0_ai") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : adc_a0_ai; +} /* end of pin adc_a0_ai */ + +pin("adc_a1_ai") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : adc_a1_ai; +} /* end of pin adc_a1_ai */ +bus ( adc_chnsel_i ) { + + bus_type : BUS2_type5 ; + direction : input ; + +pin("adc_chnsel_i[1]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000460 ; + + /* Other user defined attributes. */ + original_pin : adc_chnsel_i[1]; + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.500117, 0.461902, 0.438325, 0.435047, 0.453355",\ + "0.595615, 0.557400, 0.533823, 0.530545, 0.548853",\ + "0.695525, 0.657310, 0.633733, 0.630455, 0.648763",\ + "0.875461, 0.837246, 0.813669, 0.810391, 0.828699",\ + "1.191947, 1.153731, 1.130154, 1.126876, 1.145184"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.605397, 0.537315, 0.507057, 0.526616, 0.751141",\ + "0.681420, 0.613337, 0.583080, 0.602638, 0.827164",\ + "0.783637, 0.715554, 0.685297, 0.704855, 0.929381",\ + "0.996963, 0.928735, 0.898477, 0.918181, 1.142707",\ + "1.384407, 1.315680, 1.285422, 1.305625, 1.530151"); + } + + } /* end of arc clk_ast_adc_i_adc_chnsel_i[1]_stupr*/ + + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.108536, -0.069519, -0.039211, 0.000204, 0.221057",\ + "-0.207833, -0.168834, -0.138446, -0.098987, 0.125559",\ + "-0.311546, -0.272599, -0.241997, -0.202419, 0.025649",\ + "-0.492274, -0.453433, -0.422380, -0.382553, -0.154287",\ + "-0.791907, -0.753246, -0.721402, -0.681127, -0.470772"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.305777, -0.243225, -0.192080, -0.118367, 0.030759",\ + "-0.381816, -0.319265, -0.268119, -0.194406, -0.045281",\ + "-0.483977, -0.421325, -0.370075, -0.296389, -0.147462",\ + "-0.695975, -0.632864, -0.581137, -0.507574, -0.359554",\ + "-1.082510, -1.018340, -0.965517, -0.892237, -0.746305"); + } + + } /* end of arc clk_ast_adc_i_adc_chnsel_i[1]_hldr*/ + +} /* end of pin adc_chnsel_i[1] */ + +pin("adc_chnsel_i[0]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000438 ; + + /* Other user defined attributes. */ + original_pin : adc_chnsel_i[0]; + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.501910, 0.463695, 0.440118, 0.436840, 0.455148",\ + "0.598688, 0.560473, 0.536896, 0.533618, 0.551926",\ + "0.702673, 0.664458, 0.640881, 0.637603, 0.655911",\ + "0.888472, 0.850257, 0.826680, 0.823402, 0.841710",\ + "1.218538, 1.180323, 1.156746, 1.153468, 1.171776"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.606473, 0.538391, 0.508134, 0.527691, 0.752217",\ + "0.684191, 0.616110, 0.585852, 0.605410, 0.829935",\ + "0.780333, 0.712252, 0.681994, 0.701552, 0.926077",\ + "0.980044, 0.911864, 0.881606, 0.901262, 1.125788",\ + "1.359676, 1.291175, 1.260918, 1.280894, 1.505420"); + } + + } /* end of arc clk_ast_adc_i_adc_chnsel_i[0]_stupr*/ + + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.110705, -0.071690, -0.041374, -0.001954, 0.219264",\ + "-0.211096, -0.172099, -0.141707, -0.102245, 0.122486",\ + "-0.318758, -0.279812, -0.249205, -0.209624, 0.018501",\ + "-0.505427, -0.466584, -0.435539, -0.395715, -0.167298",\ + "-0.819228, -0.780572, -0.748725, -0.708453, -0.497364"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.306862, -0.244315, -0.193173, -0.119459, 0.029674",\ + "-0.384597, -0.322050, -0.270908, -0.197194, -0.048061",\ + "-0.480694, -0.418072, -0.366852, -0.293158, -0.144173",\ + "-0.679326, -0.616367, -0.564798, -0.491194, -0.342874",\ + "-1.058081, -0.994264, -0.941806, -0.868432, -0.721804"); + } + + } /* end of arc clk_ast_adc_i_adc_chnsel_i[0]_hldr*/ + +} /* end of pin adc_chnsel_i[0] */ +} /* end of bus adc_chnsel_i */ +bus ( adc_d_o ) { + + bus_type : BUS10_type8 ; + direction : output ; + +pin("adc_d_o[9]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000474 ; + + /* Other user defined attributes. */ + original_pin : adc_d_o[9]; + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.043083, 0.198120, 0.374256, 0.697785, 1.344843",\ + "0.128923, 0.285295, 0.461364, 0.784501, 1.430777",\ + "0.210274, 0.373426, 0.549322, 0.872125, 1.517732",\ + "0.345402, 0.527885, 0.703101, 1.025419, 1.670053",\ + "0.557160, 0.787678, 0.963834, 1.284789, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.018401, 0.293911, 0.628602, 1.246589, 2.482563",\ + "0.023522, 0.294865, 0.630572, 1.246589, 2.482563",\ + "0.036913, 0.297173, 0.630608, 1.246589, 2.482563",\ + "0.064917, 0.305223, 0.630841, 1.247228, 2.482563",\ + "0.122287, 0.339635, 0.636985, 1.249173, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.062966, 0.171021, 0.282962, 0.487566, 0.896774",\ + "0.150539, 0.258340, 0.370243, 0.574871, 0.984127",\ + "0.230685, 0.338682, 0.450270, 0.654899, 1.064159",\ + "0.365948, 0.476706, 0.588287, 0.792199, 1.200024",\ + "0.578145, 0.699559, 0.811451, 1.015162, 1.422583"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.020571, 0.183996, 0.385207, 0.758292, 1.504462",\ + "0.020571, 0.184130, 0.385715, 0.758292, 1.504462",\ + "0.021496, 0.184130, 0.385715, 0.758292, 1.504462",\ + "0.027055, 0.184687, 0.385715, 0.758292, 1.504742",\ + "0.042630, 0.188229, 0.385715, 0.758292, 1.504742"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[9]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_adc_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.043083, 0.198120, 0.374256, 0.697785, 1.344843",\ + "0.128923, 0.285295, 0.461364, 0.784501, 1.430777",\ + "0.210274, 0.373426, 0.549322, 0.872125, 1.517732",\ + "0.345402, 0.527885, 0.703101, 1.025419, 1.670053",\ + "0.557160, 0.787678, 0.963834, 1.284789, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.018401, 0.293911, 0.628602, 1.245375, 2.473548",\ + "0.023522, 0.294865, 0.630572, 1.245375, 2.473548",\ + "0.036913, 0.297173, 0.630608, 1.245450, 2.473548",\ + "0.064917, 0.305223, 0.630841, 1.247228, 2.473548",\ + "0.122287, 0.339635, 0.636985, 1.249173, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.062966, 0.171021, 0.282962, 0.487566, 0.896774",\ + "0.150539, 0.258340, 0.370243, 0.574871, 0.984127",\ + "0.230685, 0.338682, 0.450270, 0.654899, 1.064159",\ + "0.365948, 0.476706, 0.588287, 0.792199, 1.200024",\ + "0.578145, 0.699559, 0.811451, 1.015162, 1.422583"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.020571, 0.183210, 0.383705, 0.756065, 1.500784",\ + "0.020571, 0.183210, 0.383705, 0.756065, 1.500784",\ + "0.021496, 0.183210, 0.383705, 0.756065, 1.500784",\ + "0.027055, 0.184687, 0.384226, 0.757731, 1.504742",\ + "0.042630, 0.188229, 0.384226, 0.757731, 1.504742"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[9]_redg_min*/ + + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018401, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.203067, 0.157249, 0.127058, 0.118464, 0.129443",\ + "0.207936, 0.162118, 0.131927, 0.123333, 0.134312",\ + "0.282684, 0.236865, 0.206674, 0.198080, 0.209060",\ + "0.376050, 0.329912, 0.299696, 0.291061, 0.301953",\ + "0.789608, 0.741801, 0.711356, 0.702451, 0.712846"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020571, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.248522, 0.173196, 0.105012, 0.094508, 0.144555",\ + "0.253666, 0.178340, 0.110157, 0.099653, 0.149700",\ + "0.325959, 0.250633, 0.182449, 0.171946, 0.221993",\ + "0.430477, 0.355166, 0.287060, 0.276913, 0.327879",\ + "0.906305, 0.831103, 0.763471, 0.755707, 0.812875"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[9]_stupr*/ + + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018401, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.129733, -0.087286, -0.052870, 0.052534, 0.311104",\ + "-0.134675, -0.092227, -0.057811, 0.047593, 0.306162",\ + "-0.208828, -0.166380, -0.131964, -0.026560, 0.232009",\ + "-0.298006, -0.255611, -0.221074, -0.123848, 0.111390",\ + "-0.695505, -0.653392, -0.618114, -0.570728, -0.477670"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020571, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.128225, -0.062545, -0.005224, 0.080862, 0.257839",\ + "-0.134070, -0.068391, -0.011070, 0.075016, 0.251993",\ + "-0.211053, -0.145374, -0.088052, -0.001967, 0.175010",\ + "-0.312522, -0.246536, -0.188774, -0.102722, 0.073645",\ + "-0.766129, -0.698256, -0.637868, -0.551957, -0.379066"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[9]_hldr*/ + +} /* end of pin adc_d_o[9] */ + +pin("adc_d_o[8]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000474 ; + + /* Other user defined attributes. */ + original_pin : adc_d_o[8]; + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.043083, 0.198120, 0.374256, 0.697785, 1.344843",\ + "0.128923, 0.285295, 0.461364, 0.784501, 1.430777",\ + "0.210274, 0.373426, 0.549322, 0.872125, 1.517732",\ + "0.345402, 0.527885, 0.703101, 1.025419, 1.670053",\ + "0.557160, 0.787678, 0.963834, 1.284789, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.018401, 0.293911, 0.628602, 1.246589, 2.482563",\ + "0.023522, 0.294865, 0.630572, 1.246589, 2.482563",\ + "0.036913, 0.297173, 0.630608, 1.246589, 2.482563",\ + "0.064917, 0.305223, 0.630841, 1.247228, 2.482563",\ + "0.122287, 0.339635, 0.636985, 1.249173, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.062966, 0.171021, 0.282962, 0.487566, 0.896774",\ + "0.150539, 0.258340, 0.370243, 0.574871, 0.984127",\ + "0.230685, 0.338682, 0.450270, 0.654899, 1.064159",\ + "0.365948, 0.476706, 0.588287, 0.792199, 1.200024",\ + "0.578145, 0.699559, 0.811451, 1.015162, 1.422583"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.020571, 0.183996, 0.385207, 0.758292, 1.504462",\ + "0.020571, 0.184130, 0.385715, 0.758292, 1.504462",\ + "0.021496, 0.184130, 0.385715, 0.758292, 1.504462",\ + "0.027055, 0.184687, 0.385715, 0.758292, 1.504742",\ + "0.042630, 0.188229, 0.385715, 0.758292, 1.504742"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[8]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_adc_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.043083, 0.198120, 0.374256, 0.697785, 1.344843",\ + "0.128923, 0.285295, 0.461364, 0.784501, 1.430777",\ + "0.210274, 0.373426, 0.549322, 0.872125, 1.517732",\ + "0.345402, 0.527885, 0.703101, 1.025419, 1.670053",\ + "0.557160, 0.787678, 0.963834, 1.284789, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.018401, 0.293911, 0.628602, 1.245375, 2.473548",\ + "0.023522, 0.294865, 0.630572, 1.245375, 2.473548",\ + "0.036913, 0.297173, 0.630608, 1.245450, 2.473548",\ + "0.064917, 0.305223, 0.630841, 1.247228, 2.473548",\ + "0.122287, 0.339635, 0.636985, 1.249173, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.062966, 0.171021, 0.282962, 0.487566, 0.896774",\ + "0.150539, 0.258340, 0.370243, 0.574871, 0.984127",\ + "0.230685, 0.338682, 0.450270, 0.654899, 1.064159",\ + "0.365948, 0.476706, 0.588287, 0.792199, 1.200024",\ + "0.578145, 0.699559, 0.811451, 1.015162, 1.422583"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.020571, 0.183210, 0.383705, 0.756065, 1.500784",\ + "0.020571, 0.183210, 0.383705, 0.756065, 1.500784",\ + "0.021496, 0.183210, 0.383705, 0.756065, 1.500784",\ + "0.027055, 0.184687, 0.384226, 0.757731, 1.504742",\ + "0.042630, 0.188229, 0.384226, 0.757731, 1.504742"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[8]_redg_min*/ + + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018401, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.203067, 0.157249, 0.127058, 0.118464, 0.129443",\ + "0.207936, 0.162118, 0.131927, 0.123333, 0.134312",\ + "0.282684, 0.236865, 0.206674, 0.198080, 0.209060",\ + "0.376050, 0.329912, 0.299696, 0.291061, 0.301953",\ + "0.789608, 0.741801, 0.711356, 0.702451, 0.712846"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020571, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.248522, 0.173196, 0.105012, 0.094508, 0.144555",\ + "0.253666, 0.178340, 0.110157, 0.099653, 0.149700",\ + "0.325959, 0.250633, 0.182449, 0.171946, 0.221993",\ + "0.430477, 0.355166, 0.287060, 0.276913, 0.327879",\ + "0.906305, 0.831103, 0.763471, 0.755707, 0.812875"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[8]_stupr*/ + + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018401, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.129733, -0.087286, -0.052870, 0.052534, 0.311104",\ + "-0.134675, -0.092227, -0.057811, 0.047593, 0.306162",\ + "-0.208828, -0.166380, -0.131964, -0.026560, 0.232009",\ + "-0.298006, -0.255611, -0.221074, -0.123848, 0.111390",\ + "-0.695505, -0.653392, -0.618114, -0.570728, -0.477670"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020571, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.128225, -0.062545, -0.005224, 0.080862, 0.257839",\ + "-0.134070, -0.068391, -0.011070, 0.075016, 0.251993",\ + "-0.211053, -0.145374, -0.088052, -0.001967, 0.175010",\ + "-0.312522, -0.246536, -0.188774, -0.102722, 0.073645",\ + "-0.766129, -0.698256, -0.637868, -0.551957, -0.379066"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[8]_hldr*/ + +} /* end of pin adc_d_o[8] */ + +pin("adc_d_o[7]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000474 ; + + /* Other user defined attributes. */ + original_pin : adc_d_o[7]; + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.043083, 0.198120, 0.374256, 0.697785, 1.344843",\ + "0.128923, 0.285295, 0.461364, 0.784501, 1.430777",\ + "0.210274, 0.373426, 0.549322, 0.872125, 1.517732",\ + "0.345402, 0.527885, 0.703101, 1.025419, 1.670053",\ + "0.557160, 0.787678, 0.963834, 1.284789, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.018401, 0.293911, 0.628602, 1.246589, 2.482563",\ + "0.023522, 0.294865, 0.630572, 1.246589, 2.482563",\ + "0.036913, 0.297173, 0.630608, 1.246589, 2.482563",\ + "0.064917, 0.305223, 0.630841, 1.247228, 2.482563",\ + "0.122287, 0.339635, 0.636985, 1.249173, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.062966, 0.171021, 0.282962, 0.487566, 0.896774",\ + "0.150539, 0.258340, 0.370243, 0.574871, 0.984127",\ + "0.230685, 0.338682, 0.450270, 0.654899, 1.064159",\ + "0.365948, 0.476706, 0.588287, 0.792199, 1.200024",\ + "0.578145, 0.699559, 0.811451, 1.015162, 1.422583"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.020571, 0.183996, 0.385207, 0.758292, 1.504462",\ + "0.020571, 0.184130, 0.385715, 0.758292, 1.504462",\ + "0.021496, 0.184130, 0.385715, 0.758292, 1.504462",\ + "0.027055, 0.184687, 0.385715, 0.758292, 1.504742",\ + "0.042630, 0.188229, 0.385715, 0.758292, 1.504742"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[7]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_adc_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.043083, 0.198120, 0.374256, 0.697785, 1.344843",\ + "0.128923, 0.285295, 0.461364, 0.784501, 1.430777",\ + "0.210274, 0.373426, 0.549322, 0.872125, 1.517732",\ + "0.345402, 0.527885, 0.703101, 1.025419, 1.670053",\ + "0.557160, 0.787678, 0.963834, 1.284789, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.018401, 0.293911, 0.628602, 1.245375, 2.473548",\ + "0.023522, 0.294865, 0.630572, 1.245375, 2.473548",\ + "0.036913, 0.297173, 0.630608, 1.245450, 2.473548",\ + "0.064917, 0.305223, 0.630841, 1.247228, 2.473548",\ + "0.122287, 0.339635, 0.636985, 1.249173, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.062966, 0.171021, 0.282962, 0.487566, 0.896774",\ + "0.150539, 0.258340, 0.370243, 0.574871, 0.984127",\ + "0.230685, 0.338682, 0.450270, 0.654899, 1.064159",\ + "0.365948, 0.476706, 0.588287, 0.792199, 1.200024",\ + "0.578145, 0.699559, 0.811451, 1.015162, 1.422583"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.020571, 0.183210, 0.383705, 0.756065, 1.500784",\ + "0.020571, 0.183210, 0.383705, 0.756065, 1.500784",\ + "0.021496, 0.183210, 0.383705, 0.756065, 1.500784",\ + "0.027055, 0.184687, 0.384226, 0.757731, 1.504742",\ + "0.042630, 0.188229, 0.384226, 0.757731, 1.504742"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[7]_redg_min*/ + + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018401, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.203067, 0.157249, 0.127058, 0.118464, 0.129443",\ + "0.207936, 0.162118, 0.131927, 0.123333, 0.134312",\ + "0.282684, 0.236865, 0.206674, 0.198080, 0.209060",\ + "0.376050, 0.329912, 0.299696, 0.291061, 0.301953",\ + "0.789608, 0.741801, 0.711356, 0.702451, 0.712846"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020571, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.248522, 0.173196, 0.105012, 0.094508, 0.144555",\ + "0.253666, 0.178340, 0.110157, 0.099653, 0.149700",\ + "0.325959, 0.250633, 0.182449, 0.171946, 0.221993",\ + "0.430477, 0.355166, 0.287060, 0.276913, 0.327879",\ + "0.906305, 0.831103, 0.763471, 0.755707, 0.812875"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[7]_stupr*/ + + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018401, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.129733, -0.087286, -0.052870, 0.052534, 0.311104",\ + "-0.134675, -0.092227, -0.057811, 0.047593, 0.306162",\ + "-0.208828, -0.166380, -0.131964, -0.026560, 0.232009",\ + "-0.298006, -0.255611, -0.221074, -0.123848, 0.111390",\ + "-0.695505, -0.653392, -0.618114, -0.570728, -0.477670"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020571, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.128225, -0.062545, -0.005224, 0.080862, 0.257839",\ + "-0.134070, -0.068391, -0.011070, 0.075016, 0.251993",\ + "-0.211053, -0.145374, -0.088052, -0.001967, 0.175010",\ + "-0.312522, -0.246536, -0.188774, -0.102722, 0.073645",\ + "-0.766129, -0.698256, -0.637868, -0.551957, -0.379066"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[7]_hldr*/ + +} /* end of pin adc_d_o[7] */ + +pin("adc_d_o[6]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000474 ; + + /* Other user defined attributes. */ + original_pin : adc_d_o[6]; + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.043083, 0.198120, 0.374256, 0.697785, 1.344843",\ + "0.128923, 0.285295, 0.461364, 0.784501, 1.430777",\ + "0.210274, 0.373426, 0.549322, 0.872125, 1.517732",\ + "0.345402, 0.527885, 0.703101, 1.025419, 1.670053",\ + "0.557160, 0.787678, 0.963834, 1.284789, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.018401, 0.293911, 0.628602, 1.246589, 2.482563",\ + "0.023522, 0.294865, 0.630572, 1.246589, 2.482563",\ + "0.036913, 0.297173, 0.630608, 1.246589, 2.482563",\ + "0.064917, 0.305223, 0.630841, 1.247228, 2.482563",\ + "0.122287, 0.339635, 0.636985, 1.249173, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.062966, 0.171021, 0.282962, 0.487566, 0.896774",\ + "0.150539, 0.258340, 0.370243, 0.574871, 0.984127",\ + "0.230685, 0.338682, 0.450270, 0.654899, 1.064159",\ + "0.365948, 0.476706, 0.588287, 0.792199, 1.200024",\ + "0.578145, 0.699559, 0.811451, 1.015162, 1.422583"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.020571, 0.183996, 0.385207, 0.758292, 1.504462",\ + "0.020571, 0.184130, 0.385715, 0.758292, 1.504462",\ + "0.021496, 0.184130, 0.385715, 0.758292, 1.504462",\ + "0.027055, 0.184687, 0.385715, 0.758292, 1.504742",\ + "0.042630, 0.188229, 0.385715, 0.758292, 1.504742"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[6]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_adc_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.043083, 0.198120, 0.374256, 0.697785, 1.344843",\ + "0.128923, 0.285295, 0.461364, 0.784501, 1.430777",\ + "0.210274, 0.373426, 0.549322, 0.872125, 1.517732",\ + "0.345402, 0.527885, 0.703101, 1.025419, 1.670053",\ + "0.557160, 0.787678, 0.963834, 1.284789, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.018401, 0.293911, 0.628602, 1.245375, 2.473548",\ + "0.023522, 0.294865, 0.630572, 1.245375, 2.473548",\ + "0.036913, 0.297173, 0.630608, 1.245450, 2.473548",\ + "0.064917, 0.305223, 0.630841, 1.247228, 2.473548",\ + "0.122287, 0.339635, 0.636985, 1.249173, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.062966, 0.171021, 0.282962, 0.487566, 0.896774",\ + "0.150539, 0.258340, 0.370243, 0.574871, 0.984127",\ + "0.230685, 0.338682, 0.450270, 0.654899, 1.064159",\ + "0.365948, 0.476706, 0.588287, 0.792199, 1.200024",\ + "0.578145, 0.699559, 0.811451, 1.015162, 1.422583"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.020571, 0.183210, 0.383705, 0.756065, 1.500784",\ + "0.020571, 0.183210, 0.383705, 0.756065, 1.500784",\ + "0.021496, 0.183210, 0.383705, 0.756065, 1.500784",\ + "0.027055, 0.184687, 0.384226, 0.757731, 1.504742",\ + "0.042630, 0.188229, 0.384226, 0.757731, 1.504742"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[6]_redg_min*/ + + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018401, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.203067, 0.157249, 0.127058, 0.118464, 0.129443",\ + "0.207936, 0.162118, 0.131927, 0.123333, 0.134312",\ + "0.282684, 0.236865, 0.206674, 0.198080, 0.209060",\ + "0.376050, 0.329912, 0.299696, 0.291061, 0.301953",\ + "0.789608, 0.741801, 0.711356, 0.702451, 0.712846"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020571, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.248522, 0.173196, 0.105012, 0.094508, 0.144555",\ + "0.253666, 0.178340, 0.110157, 0.099653, 0.149700",\ + "0.325959, 0.250633, 0.182449, 0.171946, 0.221993",\ + "0.430477, 0.355166, 0.287060, 0.276913, 0.327879",\ + "0.906305, 0.831103, 0.763471, 0.755707, 0.812875"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[6]_stupr*/ + + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018401, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.129733, -0.087286, -0.052870, 0.052534, 0.311104",\ + "-0.134675, -0.092227, -0.057811, 0.047593, 0.306162",\ + "-0.208828, -0.166380, -0.131964, -0.026560, 0.232009",\ + "-0.298006, -0.255611, -0.221074, -0.123848, 0.111390",\ + "-0.695505, -0.653392, -0.618114, -0.570728, -0.477670"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020571, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.128225, -0.062545, -0.005224, 0.080862, 0.257839",\ + "-0.134070, -0.068391, -0.011070, 0.075016, 0.251993",\ + "-0.211053, -0.145374, -0.088052, -0.001967, 0.175010",\ + "-0.312522, -0.246536, -0.188774, -0.102722, 0.073645",\ + "-0.766129, -0.698256, -0.637868, -0.551957, -0.379066"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[6]_hldr*/ + +} /* end of pin adc_d_o[6] */ + +pin("adc_d_o[5]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000474 ; + + /* Other user defined attributes. */ + original_pin : adc_d_o[5]; + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.043083, 0.198120, 0.374256, 0.697785, 1.344843",\ + "0.128923, 0.285295, 0.461364, 0.784501, 1.430777",\ + "0.210274, 0.373426, 0.549322, 0.872125, 1.517732",\ + "0.345402, 0.527885, 0.703101, 1.025419, 1.670053",\ + "0.557160, 0.787678, 0.963834, 1.284789, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.018401, 0.293911, 0.628602, 1.246589, 2.482563",\ + "0.023522, 0.294865, 0.630572, 1.246589, 2.482563",\ + "0.036913, 0.297173, 0.630608, 1.246589, 2.482563",\ + "0.064917, 0.305223, 0.630841, 1.247228, 2.482563",\ + "0.122287, 0.339635, 0.636985, 1.249173, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.062966, 0.171021, 0.282962, 0.487566, 0.896774",\ + "0.150539, 0.258340, 0.370243, 0.574871, 0.984127",\ + "0.230685, 0.338682, 0.450270, 0.654899, 1.064159",\ + "0.365948, 0.476706, 0.588287, 0.792199, 1.200024",\ + "0.578145, 0.699559, 0.811451, 1.015162, 1.422583"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.020571, 0.183996, 0.385207, 0.758292, 1.504462",\ + "0.020571, 0.184130, 0.385715, 0.758292, 1.504462",\ + "0.021496, 0.184130, 0.385715, 0.758292, 1.504462",\ + "0.027055, 0.184687, 0.385715, 0.758292, 1.504742",\ + "0.042630, 0.188229, 0.385715, 0.758292, 1.504742"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[5]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_adc_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.043083, 0.198120, 0.374256, 0.697785, 1.344843",\ + "0.128923, 0.285295, 0.461364, 0.784501, 1.430777",\ + "0.210274, 0.373426, 0.549322, 0.872125, 1.517732",\ + "0.345402, 0.527885, 0.703101, 1.025419, 1.670053",\ + "0.557160, 0.787678, 0.963834, 1.284789, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.018401, 0.293911, 0.628602, 1.245375, 2.473548",\ + "0.023522, 0.294865, 0.630572, 1.245375, 2.473548",\ + "0.036913, 0.297173, 0.630608, 1.245450, 2.473548",\ + "0.064917, 0.305223, 0.630841, 1.247228, 2.473548",\ + "0.122287, 0.339635, 0.636985, 1.249173, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.062966, 0.171021, 0.282962, 0.487566, 0.896774",\ + "0.150539, 0.258340, 0.370243, 0.574871, 0.984127",\ + "0.230685, 0.338682, 0.450270, 0.654899, 1.064159",\ + "0.365948, 0.476706, 0.588287, 0.792199, 1.200024",\ + "0.578145, 0.699559, 0.811451, 1.015162, 1.422583"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.020571, 0.183210, 0.383705, 0.756065, 1.500784",\ + "0.020571, 0.183210, 0.383705, 0.756065, 1.500784",\ + "0.021496, 0.183210, 0.383705, 0.756065, 1.500784",\ + "0.027055, 0.184687, 0.384226, 0.757731, 1.504742",\ + "0.042630, 0.188229, 0.384226, 0.757731, 1.504742"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[5]_redg_min*/ + + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018401, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.203067, 0.157249, 0.127058, 0.118464, 0.129443",\ + "0.207936, 0.162118, 0.131927, 0.123333, 0.134312",\ + "0.282684, 0.236865, 0.206674, 0.198080, 0.209060",\ + "0.376050, 0.329912, 0.299696, 0.291061, 0.301953",\ + "0.789608, 0.741801, 0.711356, 0.702451, 0.712846"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020571, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.248522, 0.173196, 0.105012, 0.094508, 0.144555",\ + "0.253666, 0.178340, 0.110157, 0.099653, 0.149700",\ + "0.325959, 0.250633, 0.182449, 0.171946, 0.221993",\ + "0.430477, 0.355166, 0.287060, 0.276913, 0.327879",\ + "0.906305, 0.831103, 0.763471, 0.755707, 0.812875"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[5]_stupr*/ + + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018401, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.129733, -0.087286, -0.052870, 0.052534, 0.311104",\ + "-0.134675, -0.092227, -0.057811, 0.047593, 0.306162",\ + "-0.208828, -0.166380, -0.131964, -0.026560, 0.232009",\ + "-0.298006, -0.255611, -0.221074, -0.123848, 0.111390",\ + "-0.695505, -0.653392, -0.618114, -0.570728, -0.477670"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020571, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.128225, -0.062545, -0.005224, 0.080862, 0.257839",\ + "-0.134070, -0.068391, -0.011070, 0.075016, 0.251993",\ + "-0.211053, -0.145374, -0.088052, -0.001967, 0.175010",\ + "-0.312522, -0.246536, -0.188774, -0.102722, 0.073645",\ + "-0.766129, -0.698256, -0.637868, -0.551957, -0.379066"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[5]_hldr*/ + +} /* end of pin adc_d_o[5] */ + +pin("adc_d_o[4]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000474 ; + + /* Other user defined attributes. */ + original_pin : adc_d_o[4]; + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.043083, 0.198120, 0.374256, 0.697785, 1.344843",\ + "0.128923, 0.285295, 0.461364, 0.784501, 1.430777",\ + "0.210274, 0.373426, 0.549322, 0.872125, 1.517732",\ + "0.345402, 0.527885, 0.703101, 1.025419, 1.670053",\ + "0.557160, 0.787678, 0.963834, 1.284789, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.018401, 0.293911, 0.628602, 1.246589, 2.482563",\ + "0.023522, 0.294865, 0.630572, 1.246589, 2.482563",\ + "0.036913, 0.297173, 0.630608, 1.246589, 2.482563",\ + "0.064917, 0.305223, 0.630841, 1.247228, 2.482563",\ + "0.122287, 0.339635, 0.636985, 1.249173, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.062966, 0.171021, 0.282962, 0.487566, 0.896774",\ + "0.150539, 0.258340, 0.370243, 0.574871, 0.984127",\ + "0.230685, 0.338682, 0.450270, 0.654899, 1.064159",\ + "0.365948, 0.476706, 0.588287, 0.792199, 1.200024",\ + "0.578145, 0.699559, 0.811451, 1.015162, 1.422583"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.020571, 0.183996, 0.385207, 0.758292, 1.504462",\ + "0.020571, 0.184130, 0.385715, 0.758292, 1.504462",\ + "0.021496, 0.184130, 0.385715, 0.758292, 1.504462",\ + "0.027055, 0.184687, 0.385715, 0.758292, 1.504742",\ + "0.042630, 0.188229, 0.385715, 0.758292, 1.504742"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[4]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_adc_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.043083, 0.198120, 0.374256, 0.697785, 1.344843",\ + "0.128923, 0.285295, 0.461364, 0.784501, 1.430777",\ + "0.210274, 0.373426, 0.549322, 0.872125, 1.517732",\ + "0.345402, 0.527885, 0.703101, 1.025419, 1.670053",\ + "0.557160, 0.787678, 0.963834, 1.284789, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.018401, 0.293911, 0.628602, 1.245375, 2.473548",\ + "0.023522, 0.294865, 0.630572, 1.245375, 2.473548",\ + "0.036913, 0.297173, 0.630608, 1.245450, 2.473548",\ + "0.064917, 0.305223, 0.630841, 1.247228, 2.473548",\ + "0.122287, 0.339635, 0.636985, 1.249173, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.062966, 0.171021, 0.282962, 0.487566, 0.896774",\ + "0.150539, 0.258340, 0.370243, 0.574871, 0.984127",\ + "0.230685, 0.338682, 0.450270, 0.654899, 1.064159",\ + "0.365948, 0.476706, 0.588287, 0.792199, 1.200024",\ + "0.578145, 0.699559, 0.811451, 1.015162, 1.422583"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.020571, 0.183210, 0.383705, 0.756065, 1.500784",\ + "0.020571, 0.183210, 0.383705, 0.756065, 1.500784",\ + "0.021496, 0.183210, 0.383705, 0.756065, 1.500784",\ + "0.027055, 0.184687, 0.384226, 0.757731, 1.504742",\ + "0.042630, 0.188229, 0.384226, 0.757731, 1.504742"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[4]_redg_min*/ + + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018401, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.203067, 0.157249, 0.127058, 0.118464, 0.129443",\ + "0.207936, 0.162118, 0.131927, 0.123333, 0.134312",\ + "0.282684, 0.236865, 0.206674, 0.198080, 0.209060",\ + "0.376050, 0.329912, 0.299696, 0.291061, 0.301953",\ + "0.789608, 0.741801, 0.711356, 0.702451, 0.712846"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020571, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.248522, 0.173196, 0.105012, 0.094508, 0.144555",\ + "0.253666, 0.178340, 0.110157, 0.099653, 0.149700",\ + "0.325959, 0.250633, 0.182449, 0.171946, 0.221993",\ + "0.430477, 0.355166, 0.287060, 0.276913, 0.327879",\ + "0.906305, 0.831103, 0.763471, 0.755707, 0.812875"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[4]_stupr*/ + + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018401, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.129733, -0.087286, -0.052870, 0.052534, 0.311104",\ + "-0.134675, -0.092227, -0.057811, 0.047593, 0.306162",\ + "-0.208828, -0.166380, -0.131964, -0.026560, 0.232009",\ + "-0.298006, -0.255611, -0.221074, -0.123848, 0.111390",\ + "-0.695505, -0.653392, -0.618114, -0.570728, -0.477670"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020571, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.128225, -0.062545, -0.005224, 0.080862, 0.257839",\ + "-0.134070, -0.068391, -0.011070, 0.075016, 0.251993",\ + "-0.211053, -0.145374, -0.088052, -0.001967, 0.175010",\ + "-0.312522, -0.246536, -0.188774, -0.102722, 0.073645",\ + "-0.766129, -0.698256, -0.637868, -0.551957, -0.379066"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[4]_hldr*/ + +} /* end of pin adc_d_o[4] */ + +pin("adc_d_o[3]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000474 ; + + /* Other user defined attributes. */ + original_pin : adc_d_o[3]; + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.043083, 0.198120, 0.374256, 0.697785, 1.344843",\ + "0.128923, 0.285295, 0.461364, 0.784501, 1.430777",\ + "0.210274, 0.373426, 0.549322, 0.872125, 1.517732",\ + "0.345402, 0.527885, 0.703101, 1.025419, 1.670053",\ + "0.557160, 0.787678, 0.963834, 1.284789, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.018401, 0.293911, 0.628602, 1.246589, 2.482563",\ + "0.023522, 0.294865, 0.630572, 1.246589, 2.482563",\ + "0.036913, 0.297173, 0.630608, 1.246589, 2.482563",\ + "0.064917, 0.305223, 0.630841, 1.247228, 2.482563",\ + "0.122287, 0.339635, 0.636985, 1.249173, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.062966, 0.171021, 0.282962, 0.487566, 0.896774",\ + "0.150539, 0.258340, 0.370243, 0.574871, 0.984127",\ + "0.230685, 0.338682, 0.450270, 0.654899, 1.064159",\ + "0.365948, 0.476706, 0.588287, 0.792199, 1.200024",\ + "0.578145, 0.699559, 0.811451, 1.015162, 1.422583"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.020571, 0.183996, 0.385207, 0.758292, 1.504462",\ + "0.020571, 0.184130, 0.385715, 0.758292, 1.504462",\ + "0.021496, 0.184130, 0.385715, 0.758292, 1.504462",\ + "0.027055, 0.184687, 0.385715, 0.758292, 1.504742",\ + "0.042630, 0.188229, 0.385715, 0.758292, 1.504742"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[3]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_adc_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.043083, 0.198120, 0.374256, 0.697785, 1.344843",\ + "0.128923, 0.285295, 0.461364, 0.784501, 1.430777",\ + "0.210274, 0.373426, 0.549322, 0.872125, 1.517732",\ + "0.345402, 0.527885, 0.703101, 1.025419, 1.670053",\ + "0.557160, 0.787678, 0.963834, 1.284789, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.018401, 0.293911, 0.628602, 1.245375, 2.473548",\ + "0.023522, 0.294865, 0.630572, 1.245375, 2.473548",\ + "0.036913, 0.297173, 0.630608, 1.245450, 2.473548",\ + "0.064917, 0.305223, 0.630841, 1.247228, 2.473548",\ + "0.122287, 0.339635, 0.636985, 1.249173, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.062966, 0.171021, 0.282962, 0.487566, 0.896774",\ + "0.150539, 0.258340, 0.370243, 0.574871, 0.984127",\ + "0.230685, 0.338682, 0.450270, 0.654899, 1.064159",\ + "0.365948, 0.476706, 0.588287, 0.792199, 1.200024",\ + "0.578145, 0.699559, 0.811451, 1.015162, 1.422583"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.020571, 0.183210, 0.383705, 0.756065, 1.500784",\ + "0.020571, 0.183210, 0.383705, 0.756065, 1.500784",\ + "0.021496, 0.183210, 0.383705, 0.756065, 1.500784",\ + "0.027055, 0.184687, 0.384226, 0.757731, 1.504742",\ + "0.042630, 0.188229, 0.384226, 0.757731, 1.504742"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[3]_redg_min*/ + + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018401, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.203067, 0.157249, 0.127058, 0.118464, 0.129443",\ + "0.207936, 0.162118, 0.131927, 0.123333, 0.134312",\ + "0.282684, 0.236865, 0.206674, 0.198080, 0.209060",\ + "0.376050, 0.329912, 0.299696, 0.291061, 0.301953",\ + "0.789608, 0.741801, 0.711356, 0.702451, 0.712846"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020571, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.248522, 0.173196, 0.105012, 0.094508, 0.144555",\ + "0.253666, 0.178340, 0.110157, 0.099653, 0.149700",\ + "0.325959, 0.250633, 0.182449, 0.171946, 0.221993",\ + "0.430477, 0.355166, 0.287060, 0.276913, 0.327879",\ + "0.906305, 0.831103, 0.763471, 0.755707, 0.812875"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[3]_stupr*/ + + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018401, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.129733, -0.087286, -0.052870, 0.052534, 0.311104",\ + "-0.134675, -0.092227, -0.057811, 0.047593, 0.306162",\ + "-0.208828, -0.166380, -0.131964, -0.026560, 0.232009",\ + "-0.298006, -0.255611, -0.221074, -0.123848, 0.111390",\ + "-0.695505, -0.653392, -0.618114, -0.570728, -0.477670"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020571, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.128225, -0.062545, -0.005224, 0.080862, 0.257839",\ + "-0.134070, -0.068391, -0.011070, 0.075016, 0.251993",\ + "-0.211053, -0.145374, -0.088052, -0.001967, 0.175010",\ + "-0.312522, -0.246536, -0.188774, -0.102722, 0.073645",\ + "-0.766129, -0.698256, -0.637868, -0.551957, -0.379066"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[3]_hldr*/ + +} /* end of pin adc_d_o[3] */ + +pin("adc_d_o[2]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000474 ; + + /* Other user defined attributes. */ + original_pin : adc_d_o[2]; + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.043083, 0.198120, 0.374256, 0.697785, 1.344843",\ + "0.128923, 0.285295, 0.461364, 0.784501, 1.430777",\ + "0.210274, 0.373426, 0.549322, 0.872125, 1.517732",\ + "0.345402, 0.527885, 0.703101, 1.025419, 1.670053",\ + "0.557160, 0.787678, 0.963834, 1.284789, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.018401, 0.293911, 0.628602, 1.246589, 2.482563",\ + "0.023522, 0.294865, 0.630572, 1.246589, 2.482563",\ + "0.036913, 0.297173, 0.630608, 1.246589, 2.482563",\ + "0.064917, 0.305223, 0.630841, 1.247228, 2.482563",\ + "0.122287, 0.339635, 0.636985, 1.249173, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.062966, 0.171021, 0.282962, 0.487566, 0.896774",\ + "0.150539, 0.258340, 0.370243, 0.574871, 0.984127",\ + "0.230685, 0.338682, 0.450270, 0.654899, 1.064159",\ + "0.365948, 0.476706, 0.588287, 0.792199, 1.200024",\ + "0.578145, 0.699559, 0.811451, 1.015162, 1.422583"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.020571, 0.183996, 0.385207, 0.758292, 1.504462",\ + "0.020571, 0.184130, 0.385715, 0.758292, 1.504462",\ + "0.021496, 0.184130, 0.385715, 0.758292, 1.504462",\ + "0.027055, 0.184687, 0.385715, 0.758292, 1.504742",\ + "0.042630, 0.188229, 0.385715, 0.758292, 1.504742"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[2]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_adc_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.043083, 0.198120, 0.374256, 0.697785, 1.344843",\ + "0.128923, 0.285295, 0.461364, 0.784501, 1.430777",\ + "0.210274, 0.373426, 0.549322, 0.872125, 1.517732",\ + "0.345402, 0.527885, 0.703101, 1.025419, 1.670053",\ + "0.557160, 0.787678, 0.963834, 1.284789, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.018401, 0.293911, 0.628602, 1.245375, 2.473548",\ + "0.023522, 0.294865, 0.630572, 1.245375, 2.473548",\ + "0.036913, 0.297173, 0.630608, 1.245450, 2.473548",\ + "0.064917, 0.305223, 0.630841, 1.247228, 2.473548",\ + "0.122287, 0.339635, 0.636985, 1.249173, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.062966, 0.171021, 0.282962, 0.487566, 0.896774",\ + "0.150539, 0.258340, 0.370243, 0.574871, 0.984127",\ + "0.230685, 0.338682, 0.450270, 0.654899, 1.064159",\ + "0.365948, 0.476706, 0.588287, 0.792199, 1.200024",\ + "0.578145, 0.699559, 0.811451, 1.015162, 1.422583"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.020571, 0.183210, 0.383705, 0.756065, 1.500784",\ + "0.020571, 0.183210, 0.383705, 0.756065, 1.500784",\ + "0.021496, 0.183210, 0.383705, 0.756065, 1.500784",\ + "0.027055, 0.184687, 0.384226, 0.757731, 1.504742",\ + "0.042630, 0.188229, 0.384226, 0.757731, 1.504742"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[2]_redg_min*/ + + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018401, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.203067, 0.157249, 0.127058, 0.118464, 0.129443",\ + "0.207936, 0.162118, 0.131927, 0.123333, 0.134312",\ + "0.282684, 0.236865, 0.206674, 0.198080, 0.209060",\ + "0.376050, 0.329912, 0.299696, 0.291061, 0.301953",\ + "0.789608, 0.741801, 0.711356, 0.702451, 0.712846"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020571, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.248522, 0.173196, 0.105012, 0.094508, 0.144555",\ + "0.253666, 0.178340, 0.110157, 0.099653, 0.149700",\ + "0.325959, 0.250633, 0.182449, 0.171946, 0.221993",\ + "0.430477, 0.355166, 0.287060, 0.276913, 0.327879",\ + "0.906305, 0.831103, 0.763471, 0.755707, 0.812875"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[2]_stupr*/ + + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018401, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.129733, -0.087286, -0.052870, 0.052534, 0.311104",\ + "-0.134675, -0.092227, -0.057811, 0.047593, 0.306162",\ + "-0.208828, -0.166380, -0.131964, -0.026560, 0.232009",\ + "-0.298006, -0.255611, -0.221074, -0.123848, 0.111390",\ + "-0.695505, -0.653392, -0.618114, -0.570728, -0.477670"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020571, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.128225, -0.062545, -0.005224, 0.080862, 0.257839",\ + "-0.134070, -0.068391, -0.011070, 0.075016, 0.251993",\ + "-0.211053, -0.145374, -0.088052, -0.001967, 0.175010",\ + "-0.312522, -0.246536, -0.188774, -0.102722, 0.073645",\ + "-0.766129, -0.698256, -0.637868, -0.551957, -0.379066"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[2]_hldr*/ + +} /* end of pin adc_d_o[2] */ + +pin("adc_d_o[1]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000474 ; + + /* Other user defined attributes. */ + original_pin : adc_d_o[1]; + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.043083, 0.198120, 0.374256, 0.697785, 1.344843",\ + "0.128923, 0.285295, 0.461364, 0.784501, 1.430777",\ + "0.210274, 0.373426, 0.549322, 0.872125, 1.517732",\ + "0.345402, 0.527885, 0.703101, 1.025419, 1.670053",\ + "0.557160, 0.787678, 0.963834, 1.284789, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.018401, 0.293911, 0.628602, 1.246589, 2.482563",\ + "0.023522, 0.294865, 0.630572, 1.246589, 2.482563",\ + "0.036913, 0.297173, 0.630608, 1.246589, 2.482563",\ + "0.064917, 0.305223, 0.630841, 1.247228, 2.482563",\ + "0.122287, 0.339635, 0.636985, 1.249173, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.062966, 0.171021, 0.282962, 0.487566, 0.896774",\ + "0.150539, 0.258340, 0.370243, 0.574871, 0.984127",\ + "0.230685, 0.338682, 0.450270, 0.654899, 1.064159",\ + "0.365948, 0.476706, 0.588287, 0.792199, 1.200024",\ + "0.578145, 0.699559, 0.811451, 1.015162, 1.422583"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.020571, 0.183996, 0.385207, 0.758292, 1.504462",\ + "0.020571, 0.184130, 0.385715, 0.758292, 1.504462",\ + "0.021496, 0.184130, 0.385715, 0.758292, 1.504462",\ + "0.027055, 0.184687, 0.385715, 0.758292, 1.504742",\ + "0.042630, 0.188229, 0.385715, 0.758292, 1.504742"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[1]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_adc_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.043083, 0.198120, 0.374256, 0.697785, 1.344843",\ + "0.128923, 0.285295, 0.461364, 0.784501, 1.430777",\ + "0.210274, 0.373426, 0.549322, 0.872125, 1.517732",\ + "0.345402, 0.527885, 0.703101, 1.025419, 1.670053",\ + "0.557160, 0.787678, 0.963834, 1.284789, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.018401, 0.293911, 0.628602, 1.245375, 2.473548",\ + "0.023522, 0.294865, 0.630572, 1.245375, 2.473548",\ + "0.036913, 0.297173, 0.630608, 1.245450, 2.473548",\ + "0.064917, 0.305223, 0.630841, 1.247228, 2.473548",\ + "0.122287, 0.339635, 0.636985, 1.249173, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.062966, 0.171021, 0.282962, 0.487566, 0.896774",\ + "0.150539, 0.258340, 0.370243, 0.574871, 0.984127",\ + "0.230685, 0.338682, 0.450270, 0.654899, 1.064159",\ + "0.365948, 0.476706, 0.588287, 0.792199, 1.200024",\ + "0.578145, 0.699559, 0.811451, 1.015162, 1.422583"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.020571, 0.183210, 0.383705, 0.756065, 1.500784",\ + "0.020571, 0.183210, 0.383705, 0.756065, 1.500784",\ + "0.021496, 0.183210, 0.383705, 0.756065, 1.500784",\ + "0.027055, 0.184687, 0.384226, 0.757731, 1.504742",\ + "0.042630, 0.188229, 0.384226, 0.757731, 1.504742"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[1]_redg_min*/ + + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018401, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.203067, 0.157249, 0.127058, 0.118464, 0.129443",\ + "0.207936, 0.162118, 0.131927, 0.123333, 0.134312",\ + "0.282684, 0.236865, 0.206674, 0.198080, 0.209060",\ + "0.376050, 0.329912, 0.299696, 0.291061, 0.301953",\ + "0.789608, 0.741801, 0.711356, 0.702451, 0.712846"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020571, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.248522, 0.173196, 0.105012, 0.094508, 0.144555",\ + "0.253666, 0.178340, 0.110157, 0.099653, 0.149700",\ + "0.325959, 0.250633, 0.182449, 0.171946, 0.221993",\ + "0.430477, 0.355166, 0.287060, 0.276913, 0.327879",\ + "0.906305, 0.831103, 0.763471, 0.755707, 0.812875"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[1]_stupr*/ + + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018401, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.129733, -0.087286, -0.052870, 0.052534, 0.311104",\ + "-0.134675, -0.092227, -0.057811, 0.047593, 0.306162",\ + "-0.208828, -0.166380, -0.131964, -0.026560, 0.232009",\ + "-0.298006, -0.255611, -0.221074, -0.123848, 0.111390",\ + "-0.695505, -0.653392, -0.618114, -0.570728, -0.477670"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020571, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.128225, -0.062545, -0.005224, 0.080862, 0.257839",\ + "-0.134070, -0.068391, -0.011070, 0.075016, 0.251993",\ + "-0.211053, -0.145374, -0.088052, -0.001967, 0.175010",\ + "-0.312522, -0.246536, -0.188774, -0.102722, 0.073645",\ + "-0.766129, -0.698256, -0.637868, -0.551957, -0.379066"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[1]_hldr*/ + +} /* end of pin adc_d_o[1] */ + +pin("adc_d_o[0]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000474 ; + + /* Other user defined attributes. */ + original_pin : adc_d_o[0]; + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.043083, 0.198120, 0.374256, 0.697785, 1.344843",\ + "0.128923, 0.285295, 0.461364, 0.784501, 1.430777",\ + "0.210274, 0.373426, 0.549322, 0.872125, 1.517732",\ + "0.345402, 0.527885, 0.703101, 1.025419, 1.670053",\ + "0.557160, 0.787678, 0.963834, 1.284789, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.018401, 0.293911, 0.628602, 1.246589, 2.482563",\ + "0.023522, 0.294865, 0.630572, 1.246589, 2.482563",\ + "0.036913, 0.297173, 0.630608, 1.246589, 2.482563",\ + "0.064917, 0.305223, 0.630841, 1.247228, 2.482563",\ + "0.122287, 0.339635, 0.636985, 1.249173, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.062966, 0.171021, 0.282962, 0.487566, 0.896774",\ + "0.150539, 0.258340, 0.370243, 0.574871, 0.984127",\ + "0.230685, 0.338682, 0.450270, 0.654899, 1.064159",\ + "0.365948, 0.476706, 0.588287, 0.792199, 1.200024",\ + "0.578145, 0.699559, 0.811451, 1.015162, 1.422583"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.020571, 0.183996, 0.385207, 0.758292, 1.504462",\ + "0.020571, 0.184130, 0.385715, 0.758292, 1.504462",\ + "0.021496, 0.184130, 0.385715, 0.758292, 1.504462",\ + "0.027055, 0.184687, 0.385715, 0.758292, 1.504742",\ + "0.042630, 0.188229, 0.385715, 0.758292, 1.504742"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[0]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_adc_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.043083, 0.198120, 0.374256, 0.697785, 1.344843",\ + "0.128923, 0.285295, 0.461364, 0.784501, 1.430777",\ + "0.210274, 0.373426, 0.549322, 0.872125, 1.517732",\ + "0.345402, 0.527885, 0.703101, 1.025419, 1.670053",\ + "0.557160, 0.787678, 0.963834, 1.284789, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.018401, 0.293911, 0.628602, 1.245375, 2.473548",\ + "0.023522, 0.294865, 0.630572, 1.245375, 2.473548",\ + "0.036913, 0.297173, 0.630608, 1.245450, 2.473548",\ + "0.064917, 0.305223, 0.630841, 1.247228, 2.473548",\ + "0.122287, 0.339635, 0.636985, 1.249173, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.062966, 0.171021, 0.282962, 0.487566, 0.896774",\ + "0.150539, 0.258340, 0.370243, 0.574871, 0.984127",\ + "0.230685, 0.338682, 0.450270, 0.654899, 1.064159",\ + "0.365948, 0.476706, 0.588287, 0.792199, 1.200024",\ + "0.578145, 0.699559, 0.811451, 1.015162, 1.422583"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000474, 0.073473, 0.160858, 0.321243, 0.642011"); + values ( "0.020571, 0.183210, 0.383705, 0.756065, 1.500784",\ + "0.020571, 0.183210, 0.383705, 0.756065, 1.500784",\ + "0.021496, 0.183210, 0.383705, 0.756065, 1.500784",\ + "0.027055, 0.184687, 0.384226, 0.757731, 1.504742",\ + "0.042630, 0.188229, 0.384226, 0.757731, 1.504742"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[0]_redg_min*/ + + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018401, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.203067, 0.157249, 0.127058, 0.118464, 0.129443",\ + "0.207936, 0.162118, 0.131927, 0.123333, 0.134312",\ + "0.282684, 0.236865, 0.206674, 0.198080, 0.209060",\ + "0.376050, 0.329912, 0.299696, 0.291061, 0.301953",\ + "0.789608, 0.741801, 0.711356, 0.702451, 0.712846"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020571, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.248522, 0.173196, 0.105012, 0.094508, 0.144555",\ + "0.253666, 0.178340, 0.110157, 0.099653, 0.149700",\ + "0.325959, 0.250633, 0.182449, 0.171946, 0.221993",\ + "0.430477, 0.355166, 0.287060, 0.276913, 0.327879",\ + "0.906305, 0.831103, 0.763471, 0.755707, 0.812875"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[0]_stupr*/ + + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018401, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.129733, -0.087286, -0.052870, 0.052534, 0.311104",\ + "-0.134675, -0.092227, -0.057811, 0.047593, 0.306162",\ + "-0.208828, -0.166380, -0.131964, -0.026560, 0.232009",\ + "-0.298006, -0.255611, -0.221074, -0.123848, 0.111390",\ + "-0.695505, -0.653392, -0.618114, -0.570728, -0.477670"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020571, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.128225, -0.062545, -0.005224, 0.080862, 0.257839",\ + "-0.134070, -0.068391, -0.011070, 0.075016, 0.251993",\ + "-0.211053, -0.145374, -0.088052, -0.001967, 0.175010",\ + "-0.312522, -0.246536, -0.188774, -0.102722, 0.073645",\ + "-0.766129, -0.698256, -0.637868, -0.551957, -0.379066"); + } + + } /* end of arc clk_ast_adc_i_adc_d_o[0]_hldr*/ + +} /* end of pin adc_d_o[0] */ +} /* end of bus adc_d_o */ + +pin("adc_d_val_o") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000485 ; + + /* Other user defined attributes. */ + original_pin : adc_d_val_o; + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000485, 0.073484, 0.160867, 0.321248, 0.642011"); + values ( "0.043124, 0.198142, 0.374272, 0.697796, 1.344843",\ + "0.128968, 0.285317, 0.461380, 0.784513, 1.430777",\ + "0.210336, 0.373448, 0.549338, 0.872136, 1.517732",\ + "0.345497, 0.527907, 0.703118, 1.025430, 1.670053",\ + "0.557318, 0.787701, 0.963851, 1.284800, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000485, 0.073484, 0.160867, 0.321248, 0.642011"); + values ( "0.018442, 0.293953, 0.628634, 1.246610, 2.482563",\ + "0.023559, 0.294907, 0.630604, 1.246610, 2.482563",\ + "0.036948, 0.297215, 0.630640, 1.246610, 2.482563",\ + "0.064957, 0.305264, 0.630873, 1.247249, 2.482563",\ + "0.122341, 0.339671, 0.637017, 1.249194, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000485, 0.073484, 0.160867, 0.321248, 0.642011"); + values ( "0.062980, 0.171026, 0.282963, 0.487563, 0.896764",\ + "0.150552, 0.258345, 0.370244, 0.574868, 0.984118",\ + "0.230698, 0.338686, 0.450271, 0.654897, 1.064149",\ + "0.365964, 0.476710, 0.588288, 0.792197, 1.200014",\ + "0.578168, 0.699563, 0.811453, 1.015159, 1.422574"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000485, 0.073484, 0.160867, 0.321248, 0.642011"); + values ( "0.020581, 0.184004, 0.385209, 0.758288, 1.504444",\ + "0.020581, 0.184139, 0.385717, 0.758288, 1.504444",\ + "0.021507, 0.184139, 0.385717, 0.758288, 1.504444",\ + "0.027064, 0.184695, 0.385717, 0.758288, 1.504725",\ + "0.042640, 0.188237, 0.385717, 0.758288, 1.504725"); + } + + } /* end of arc clk_ast_adc_i_adc_d_val_o_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_adc_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000485, 0.073484, 0.160867, 0.321248, 0.642011"); + values ( "0.043124, 0.198142, 0.374272, 0.697796, 1.344843",\ + "0.128968, 0.285317, 0.461380, 0.784513, 1.430777",\ + "0.210336, 0.373448, 0.549338, 0.872136, 1.517732",\ + "0.345497, 0.527907, 0.703118, 1.025430, 1.670053",\ + "0.557318, 0.787701, 0.963851, 1.284800, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000485, 0.073484, 0.160867, 0.321248, 0.642011"); + values ( "0.018442, 0.293953, 0.628634, 1.245396, 2.473548",\ + "0.023559, 0.294907, 0.630604, 1.245396, 2.473548",\ + "0.036948, 0.297215, 0.630640, 1.245471, 2.473548",\ + "0.064957, 0.305264, 0.630873, 1.247249, 2.473548",\ + "0.122341, 0.339671, 0.637017, 1.249194, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000485, 0.073484, 0.160867, 0.321248, 0.642011"); + values ( "0.062980, 0.171026, 0.282963, 0.487563, 0.896764",\ + "0.150552, 0.258345, 0.370244, 0.574868, 0.984118",\ + "0.230698, 0.338686, 0.450271, 0.654897, 1.064149",\ + "0.365964, 0.476710, 0.588288, 0.792197, 1.200014",\ + "0.578168, 0.699563, 0.811453, 1.015159, 1.422574"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000485, 0.073484, 0.160867, 0.321248, 0.642011"); + values ( "0.020581, 0.183219, 0.383707, 0.756060, 1.500767",\ + "0.020581, 0.183219, 0.383707, 0.756060, 1.500767",\ + "0.021507, 0.183219, 0.383707, 0.756060, 1.500767",\ + "0.027064, 0.184695, 0.384228, 0.757727, 1.504725",\ + "0.042640, 0.188237, 0.384228, 0.757727, 1.504725"); + } + + } /* end of arc clk_ast_adc_i_adc_d_val_o_redg_min*/ + + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018442, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.243976, 0.197294, 0.167037, 0.158332, 0.169076",\ + "0.249724, 0.203042, 0.172784, 0.164080, 0.174823",\ + "0.330128, 0.283446, 0.253188, 0.244484, 0.255227",\ + "0.421667, 0.374985, 0.344728, 0.336023, 0.346766",\ + "0.857546, 0.810300, 0.779998, 0.771221, 0.781810"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020581, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.235882, 0.160549, 0.092329, 0.081659, 0.131277",\ + "0.241065, 0.165732, 0.097513, 0.086843, 0.136460",\ + "0.320960, 0.245631, 0.177435, 0.166874, 0.216773",\ + "0.424142, 0.348830, 0.280724, 0.270576, 0.321539",\ + "0.869196, 0.793968, 0.726309, 0.718213, 0.774472"); + } + + } /* end of arc clk_ast_adc_i_adc_d_val_o_stupr*/ + + timing () { + related_pin : "clk_ast_adc_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.018442, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.172771, -0.130490, -0.095686, -0.016470, 0.167392",\ + "-0.178433, -0.136153, -0.101349, -0.022133, 0.161730",\ + "-0.256684, -0.214404, -0.179600, -0.100383, 0.083479",\ + "-0.345053, -0.302773, -0.267969, -0.188752, -0.004890",\ + "-0.762797, -0.720612, -0.685586, -0.621349, -0.480218"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020581, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.121789, -0.056140, 0.001137, 0.087226, 0.264264",\ + "-0.127527, -0.061878, -0.004601, 0.081488, 0.258526",\ + "-0.211930, -0.146176, -0.088749, -0.002671, 0.174159",\ + "-0.309060, -0.243056, -0.185270, -0.099220, 0.077113",\ + "-0.732847, -0.665438, -0.605637, -0.519740, -0.346201"); + } + + } /* end of arc clk_ast_adc_i_adc_d_val_o_hldr*/ + +} /* end of pin adc_d_val_o */ + +pin("rng_en_i") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001189 ; + + /* Other user defined attributes. */ + original_pin : rng_en_i; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.200076, 0.146984, 0.107694, 0.091175, 0.087585",\ + "0.210849, 0.158775, 0.118789, 0.101895, 0.097230",\ + "0.247906, 0.195949, 0.156513, 0.139769, 0.134169",\ + "0.400793, 0.347442, 0.307665, 0.290788, 0.285288",\ + "0.811131, 0.757315, 0.714144, 0.695925, 0.691143"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.249331, 0.166333, 0.091045, 0.056957, 0.020498",\ + "0.258619, 0.175944, 0.100656, 0.066835, 0.033618",\ + "0.297457, 0.214925, 0.140086, 0.106583, 0.074986",\ + "0.472698, 0.388796, 0.312903, 0.278157, 0.236728",\ + "0.983325, 0.898854, 0.822917, 0.782684, 0.674795"); + } + + } /* end of arc clk_ast_tlul_i_rng_en_i_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.096530, -0.053812, -0.018112, 0.007162, 0.135173",\ + "-0.107327, -0.064625, -0.028931, -0.003653, 0.124428",\ + "-0.144374, -0.101567, -0.065911, -0.040647, 0.087453",\ + "-0.286358, -0.243809, -0.210094, -0.185592, -0.057011",\ + "-0.620310, -0.578080, -0.553843, -0.534595, -0.422314"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.130907, -0.055165, 0.010770, 0.056779, 0.285045",\ + "-0.140562, -0.065848, 0.000282, 0.046339, 0.274227",\ + "-0.179341, -0.104491, -0.038333, 0.007805, 0.236523",\ + "-0.350407, -0.276449, -0.208169, -0.160590, 0.074989",\ + "-0.811364, -0.742478, -0.673228, -0.625268, -0.389923"); + } + + } /* end of arc clk_ast_tlul_i_rng_en_i_hldr*/ + +} /* end of pin rng_en_i */ + +pin("rng_fips_i") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001189 ; + + /* Other user defined attributes. */ + original_pin : rng_fips_i; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.200076, 0.146984, 0.107694, 0.091175, 0.087585",\ + "0.210849, 0.158775, 0.118789, 0.101895, 0.097230",\ + "0.247906, 0.195949, 0.156513, 0.139769, 0.134169",\ + "0.400793, 0.347442, 0.307665, 0.290788, 0.285288",\ + "0.811131, 0.757315, 0.714144, 0.695925, 0.691143"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.249331, 0.166333, 0.091045, 0.056957, 0.020498",\ + "0.258619, 0.175944, 0.100656, 0.066835, 0.033618",\ + "0.297457, 0.214925, 0.140086, 0.106583, 0.074986",\ + "0.472698, 0.388796, 0.312903, 0.278157, 0.236728",\ + "0.983325, 0.898854, 0.822917, 0.782684, 0.674795"); + } + + } /* end of arc clk_ast_tlul_i_rng_fips_i_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.096530, -0.053812, -0.018112, 0.007162, 0.135173",\ + "-0.107327, -0.064625, -0.028931, -0.003653, 0.124428",\ + "-0.144374, -0.101567, -0.065911, -0.040647, 0.087453",\ + "-0.286358, -0.243809, -0.210094, -0.185592, -0.057011",\ + "-0.620310, -0.578080, -0.553843, -0.534595, -0.422314"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.130907, -0.055165, 0.010770, 0.056779, 0.285045",\ + "-0.140562, -0.065848, 0.000282, 0.046339, 0.274227",\ + "-0.179341, -0.104491, -0.038333, 0.007805, 0.236523",\ + "-0.350407, -0.276449, -0.208169, -0.160590, 0.074989",\ + "-0.811364, -0.742478, -0.673228, -0.625268, -0.389923"); + } + + } /* end of arc clk_ast_tlul_i_rng_fips_i_hldr*/ + +} /* end of pin rng_fips_i */ + +pin("rng_val_o") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000506 ; + + /* Other user defined attributes. */ + original_pin : rng_val_o; + timing () { + related_pin : "clk_ast_rng_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000506, 0.073504, 0.160882, 0.321258, 0.642011"); + values ( "0.043198, 0.198183, 0.374303, 0.697816, 1.344843",\ + "0.100770, 0.256465, 0.432811, 0.755524, 1.400950",\ + "0.234375, 0.400817, 0.576577, 0.899279, 1.544683",\ + "0.266829, 0.437889, 0.613486, 0.936071, 1.581241",\ + "0.557607, 0.787741, 0.963881, 1.284820, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000506, 0.073504, 0.160882, 0.321258, 0.642011"); + values ( "0.018518, 0.294029, 0.628692, 1.246649, 2.482563",\ + "0.020629, 0.294660, 0.630087, 1.246649, 2.482563",\ + "0.041968, 0.298715, 0.630739, 1.246649, 2.482563",\ + "0.048693, 0.300646, 0.630795, 1.246649, 2.482563",\ + "0.122440, 0.339737, 0.637074, 1.249232, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000506, 0.073504, 0.160882, 0.321258, 0.642011"); + values ( "0.063098, 0.171066, 0.282997, 0.487591, 0.896779",\ + "0.123042, 0.230894, 0.342842, 0.547360, 0.956396",\ + "0.254755, 0.363148, 0.474725, 0.679218, 1.088204",\ + "0.287224, 0.396275, 0.507850, 0.712171, 1.120812",\ + "0.578369, 0.699604, 0.811487, 1.015187, 1.422589"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000506, 0.073504, 0.160882, 0.321258, 0.642011"); + values ( "0.020669, 0.184077, 0.385272, 0.758339, 1.504472",\ + "0.020669, 0.184227, 0.385542, 0.758386, 1.504472",\ + "0.022583, 0.184227, 0.385542, 0.758386, 1.504472",\ + "0.023913, 0.184227, 0.385542, 0.758386, 1.504472",\ + "0.042731, 0.188308, 0.385542, 0.758386, 1.504752"); + } + + } /* end of arc clk_ast_rng_i_rng_val_o_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_rng_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000506, 0.073504, 0.160882, 0.321258, 0.642011"); + values ( "0.043198, 0.198183, 0.374303, 0.697816, 1.344843",\ + "0.100770, 0.256465, 0.432811, 0.755524, 1.400950",\ + "0.234375, 0.400817, 0.576577, 0.899279, 1.544683",\ + "0.266829, 0.437889, 0.613486, 0.936071, 1.581241",\ + "0.557607, 0.787741, 0.963881, 1.284820, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000506, 0.073504, 0.160882, 0.321258, 0.642011"); + values ( "0.018518, 0.294029, 0.628692, 1.245563, 2.473548",\ + "0.020629, 0.294660, 0.630087, 1.245563, 2.473548",\ + "0.041968, 0.298715, 0.630739, 1.245824, 2.473548",\ + "0.048693, 0.300646, 0.630795, 1.246251, 2.473548",\ + "0.122440, 0.339737, 0.637074, 1.249232, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000506, 0.073504, 0.160882, 0.321258, 0.642011"); + values ( "0.063098, 0.171066, 0.282997, 0.487591, 0.896779",\ + "0.123042, 0.230894, 0.342842, 0.547360, 0.956396",\ + "0.254755, 0.363148, 0.474725, 0.679218, 1.088204",\ + "0.287224, 0.396275, 0.507850, 0.712171, 1.120812",\ + "0.578369, 0.699604, 0.811487, 1.015187, 1.422589"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000506, 0.073504, 0.160882, 0.321258, 0.642011"); + values ( "0.020669, 0.183553, 0.383962, 0.756493, 1.501555",\ + "0.020669, 0.183553, 0.383962, 0.756493, 1.501555",\ + "0.022583, 0.183553, 0.383962, 0.756493, 1.501555",\ + "0.023913, 0.183907, 0.384224, 0.757011, 1.502586",\ + "0.042731, 0.188308, 0.384291, 0.757778, 1.504752"); + } + + } /* end of arc clk_ast_rng_i_rng_val_o_redg_min*/ + +} /* end of pin rng_val_o */ +bus ( rng_b_o ) { + + bus_type : BUS4_type6 ; + direction : output ; + +pin("rng_b_o[3]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001003 ; + + /* Other user defined attributes. */ + original_pin : rng_b_o[3]; + timing () { + related_pin : "clk_ast_rng_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.045041, 0.199186, 0.375056, 0.698318, 1.344843",\ + "0.102677, 0.257471, 0.433562, 0.756025, 1.400950",\ + "0.237455, 0.401819, 0.577329, 0.899780, 1.544683",\ + "0.270266, 0.438889, 0.614237, 0.936571, 1.581241",\ + "0.564763, 0.788747, 0.964628, 1.285318, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.020388, 0.295933, 0.630131, 1.247608, 2.482563",\ + "0.022435, 0.296571, 0.631520, 1.247608, 2.482563",\ + "0.043575, 0.300601, 0.632171, 1.247608, 2.482563",\ + "0.050360, 0.302518, 0.632228, 1.247608, 2.482563",\ + "0.124896, 0.341364, 0.638500, 1.250182, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.064894, 0.171688, 0.283456, 0.487892, 0.896762",\ + "0.124805, 0.231515, 0.343301, 0.547660, 0.956379",\ + "0.256621, 0.363767, 0.475184, 0.679518, 1.088186",\ + "0.289162, 0.396894, 0.508308, 0.712471, 1.120795",\ + "0.581429, 0.700226, 0.811944, 1.015486, 1.422571"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.022008, 0.185188, 0.386108, 0.758886, 1.504440",\ + "0.022008, 0.185339, 0.386379, 0.758933, 1.504440",\ + "0.023991, 0.185339, 0.386379, 0.758933, 1.504440",\ + "0.025265, 0.185339, 0.386379, 0.758933, 1.504440",\ + "0.044109, 0.189380, 0.386379, 0.758933, 1.504720"); + } + + } /* end of arc clk_ast_rng_i_rng_b_o[3]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_rng_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.045041, 0.199186, 0.375056, 0.698318, 1.344843",\ + "0.102677, 0.257471, 0.433562, 0.756025, 1.400950",\ + "0.237455, 0.401819, 0.577329, 0.899780, 1.544683",\ + "0.270266, 0.438889, 0.614237, 0.936571, 1.581241",\ + "0.564763, 0.788747, 0.964628, 1.285318, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.020388, 0.295933, 0.630131, 1.246518, 2.473548",\ + "0.022435, 0.296571, 0.631520, 1.246518, 2.473548",\ + "0.043575, 0.300601, 0.632171, 1.246779, 2.473548",\ + "0.050360, 0.302518, 0.632228, 1.247206, 2.473548",\ + "0.124896, 0.341364, 0.638500, 1.250182, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.064894, 0.171688, 0.283456, 0.487892, 0.896762",\ + "0.124805, 0.231515, 0.343301, 0.547660, 0.956379",\ + "0.256621, 0.363767, 0.475184, 0.679518, 1.088186",\ + "0.289162, 0.396894, 0.508308, 0.712471, 1.120795",\ + "0.581429, 0.700226, 0.811944, 1.015486, 1.422571"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.022008, 0.184659, 0.384798, 0.757040, 1.501523",\ + "0.022008, 0.184659, 0.384798, 0.757040, 1.501523",\ + "0.023991, 0.184659, 0.384798, 0.757040, 1.501523",\ + "0.025265, 0.185012, 0.385060, 0.757558, 1.502554",\ + "0.044109, 0.189380, 0.385129, 0.758326, 1.504720"); + } + + } /* end of arc clk_ast_rng_i_rng_b_o[3]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_falling ; + clock_gating_flag : true ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020388, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.036802, 0.036802, 0.036802, 0.036802, 0.036802",\ + "0.042346, 0.042346, 0.042346, 0.042346, 0.042346",\ + "0.109280, 0.109280, 0.109280, 0.109280, 0.109280",\ + "0.178232, 0.178232, 0.178232, 0.178232, 0.178232",\ + "0.458063, 0.458063, 0.458063, 0.458063, 0.458063"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.022008, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.053733, 0.053733, 0.053733, 0.053733, 0.053733",\ + "0.060946, 0.060946, 0.060946, 0.060946, 0.060946",\ + "0.137682, 0.137682, 0.137682, 0.137682, 0.137682",\ + "0.226588, 0.226588, 0.226588, 0.226588, 0.226588",\ + "0.644240, 0.644240, 0.644240, 0.644240, 0.644240"); + } + + } /* end of arc clk_ast_tlul_i_rng_b_o[3]_cgsf*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + clock_gating_flag : true ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.020388, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.034468, -0.034468, -0.034468, -0.034468, -0.034468",\ + "-0.040015, -0.040015, -0.040015, -0.040015, -0.040015",\ + "-0.106260, -0.106260, -0.106260, -0.106260, -0.106260",\ + "-0.173208, -0.173208, -0.173208, -0.173208, -0.173208",\ + "-0.445027, -0.445027, -0.445027, -0.445027, -0.445027"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.022008, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.046633, -0.046633, -0.046633, -0.046633, -0.046633",\ + "-0.053872, -0.053872, -0.053872, -0.053872, -0.053872",\ + "-0.131912, -0.131912, -0.131912, -0.131912, -0.131912",\ + "-0.220120, -0.220120, -0.220120, -0.220120, -0.220120",\ + "-0.629632, -0.629632, -0.629632, -0.629632, -0.629632"); + } + + } /* end of arc clk_ast_tlul_i_rng_b_o[3]_cghr*/ + +} /* end of pin rng_b_o[3] */ + +pin("rng_b_o[2]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001003 ; + + /* Other user defined attributes. */ + original_pin : rng_b_o[2]; + timing () { + related_pin : "clk_ast_rng_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.045041, 0.199186, 0.375056, 0.698318, 1.344843",\ + "0.102677, 0.257471, 0.433562, 0.756025, 1.400950",\ + "0.237455, 0.401819, 0.577329, 0.899780, 1.544683",\ + "0.270266, 0.438889, 0.614237, 0.936571, 1.581241",\ + "0.564763, 0.788747, 0.964628, 1.285318, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.020388, 0.295933, 0.630131, 1.247608, 2.482563",\ + "0.022435, 0.296571, 0.631520, 1.247608, 2.482563",\ + "0.043575, 0.300601, 0.632171, 1.247608, 2.482563",\ + "0.050360, 0.302518, 0.632228, 1.247608, 2.482563",\ + "0.124896, 0.341364, 0.638500, 1.250182, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.064894, 0.171688, 0.283456, 0.487892, 0.896762",\ + "0.124805, 0.231515, 0.343301, 0.547660, 0.956379",\ + "0.256621, 0.363767, 0.475184, 0.679518, 1.088186",\ + "0.289162, 0.396894, 0.508308, 0.712471, 1.120795",\ + "0.581429, 0.700226, 0.811944, 1.015486, 1.422571"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.022008, 0.185188, 0.386108, 0.758886, 1.504440",\ + "0.022008, 0.185339, 0.386379, 0.758933, 1.504440",\ + "0.023991, 0.185339, 0.386379, 0.758933, 1.504440",\ + "0.025265, 0.185339, 0.386379, 0.758933, 1.504440",\ + "0.044109, 0.189380, 0.386379, 0.758933, 1.504720"); + } + + } /* end of arc clk_ast_rng_i_rng_b_o[2]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_rng_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.045041, 0.199186, 0.375056, 0.698318, 1.344843",\ + "0.102677, 0.257471, 0.433562, 0.756025, 1.400950",\ + "0.237455, 0.401819, 0.577329, 0.899780, 1.544683",\ + "0.270266, 0.438889, 0.614237, 0.936571, 1.581241",\ + "0.564763, 0.788747, 0.964628, 1.285318, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.020388, 0.295933, 0.630131, 1.246518, 2.473548",\ + "0.022435, 0.296571, 0.631520, 1.246518, 2.473548",\ + "0.043575, 0.300601, 0.632171, 1.246779, 2.473548",\ + "0.050360, 0.302518, 0.632228, 1.247206, 2.473548",\ + "0.124896, 0.341364, 0.638500, 1.250182, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.064894, 0.171688, 0.283456, 0.487892, 0.896762",\ + "0.124805, 0.231515, 0.343301, 0.547660, 0.956379",\ + "0.256621, 0.363767, 0.475184, 0.679518, 1.088186",\ + "0.289162, 0.396894, 0.508308, 0.712471, 1.120795",\ + "0.581429, 0.700226, 0.811944, 1.015486, 1.422571"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.022008, 0.184659, 0.384798, 0.757040, 1.501523",\ + "0.022008, 0.184659, 0.384798, 0.757040, 1.501523",\ + "0.023991, 0.184659, 0.384798, 0.757040, 1.501523",\ + "0.025265, 0.185012, 0.385060, 0.757558, 1.502554",\ + "0.044109, 0.189380, 0.385129, 0.758326, 1.504720"); + } + + } /* end of arc clk_ast_rng_i_rng_b_o[2]_redg_min*/ + +} /* end of pin rng_b_o[2] */ + +pin("rng_b_o[1]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001003 ; + + /* Other user defined attributes. */ + original_pin : rng_b_o[1]; + timing () { + related_pin : "clk_ast_rng_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.045041, 0.199186, 0.375056, 0.698318, 1.344843",\ + "0.102677, 0.257471, 0.433562, 0.756025, 1.400950",\ + "0.237455, 0.401819, 0.577329, 0.899780, 1.544683",\ + "0.270266, 0.438889, 0.614237, 0.936571, 1.581241",\ + "0.564763, 0.788747, 0.964628, 1.285318, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.020388, 0.295933, 0.630131, 1.247608, 2.482563",\ + "0.022435, 0.296571, 0.631520, 1.247608, 2.482563",\ + "0.043575, 0.300601, 0.632171, 1.247608, 2.482563",\ + "0.050360, 0.302518, 0.632228, 1.247608, 2.482563",\ + "0.124896, 0.341364, 0.638500, 1.250182, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.064894, 0.171688, 0.283456, 0.487892, 0.896762",\ + "0.124805, 0.231515, 0.343301, 0.547660, 0.956379",\ + "0.256621, 0.363767, 0.475184, 0.679518, 1.088186",\ + "0.289162, 0.396894, 0.508308, 0.712471, 1.120795",\ + "0.581429, 0.700226, 0.811944, 1.015486, 1.422571"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.022008, 0.185188, 0.386108, 0.758886, 1.504440",\ + "0.022008, 0.185339, 0.386379, 0.758933, 1.504440",\ + "0.023991, 0.185339, 0.386379, 0.758933, 1.504440",\ + "0.025265, 0.185339, 0.386379, 0.758933, 1.504440",\ + "0.044109, 0.189380, 0.386379, 0.758933, 1.504720"); + } + + } /* end of arc clk_ast_rng_i_rng_b_o[1]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_rng_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.045041, 0.199186, 0.375056, 0.698318, 1.344843",\ + "0.102677, 0.257471, 0.433562, 0.756025, 1.400950",\ + "0.237455, 0.401819, 0.577329, 0.899780, 1.544683",\ + "0.270266, 0.438889, 0.614237, 0.936571, 1.581241",\ + "0.564763, 0.788747, 0.964628, 1.285318, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.020388, 0.295933, 0.630131, 1.246518, 2.473548",\ + "0.022435, 0.296571, 0.631520, 1.246518, 2.473548",\ + "0.043575, 0.300601, 0.632171, 1.246779, 2.473548",\ + "0.050360, 0.302518, 0.632228, 1.247206, 2.473548",\ + "0.124896, 0.341364, 0.638500, 1.250182, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.064894, 0.171688, 0.283456, 0.487892, 0.896762",\ + "0.124805, 0.231515, 0.343301, 0.547660, 0.956379",\ + "0.256621, 0.363767, 0.475184, 0.679518, 1.088186",\ + "0.289162, 0.396894, 0.508308, 0.712471, 1.120795",\ + "0.581429, 0.700226, 0.811944, 1.015486, 1.422571"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.022008, 0.184659, 0.384798, 0.757040, 1.501523",\ + "0.022008, 0.184659, 0.384798, 0.757040, 1.501523",\ + "0.023991, 0.184659, 0.384798, 0.757040, 1.501523",\ + "0.025265, 0.185012, 0.385060, 0.757558, 1.502554",\ + "0.044109, 0.189380, 0.385129, 0.758326, 1.504720"); + } + + } /* end of arc clk_ast_rng_i_rng_b_o[1]_redg_min*/ + +} /* end of pin rng_b_o[1] */ + +pin("rng_b_o[0]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001003 ; + + /* Other user defined attributes. */ + original_pin : rng_b_o[0]; + timing () { + related_pin : "clk_ast_rng_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.045041, 0.199186, 0.375056, 0.698318, 1.344843",\ + "0.102677, 0.257471, 0.433562, 0.756025, 1.400950",\ + "0.237455, 0.401819, 0.577329, 0.899780, 1.544683",\ + "0.270266, 0.438889, 0.614237, 0.936571, 1.581241",\ + "0.564763, 0.788747, 0.964628, 1.285318, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.020388, 0.295933, 0.630131, 1.247608, 2.482563",\ + "0.022435, 0.296571, 0.631520, 1.247608, 2.482563",\ + "0.043575, 0.300601, 0.632171, 1.247608, 2.482563",\ + "0.050360, 0.302518, 0.632228, 1.247608, 2.482563",\ + "0.124896, 0.341364, 0.638500, 1.250182, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.064894, 0.171688, 0.283456, 0.487892, 0.896762",\ + "0.124805, 0.231515, 0.343301, 0.547660, 0.956379",\ + "0.256621, 0.363767, 0.475184, 0.679518, 1.088186",\ + "0.289162, 0.396894, 0.508308, 0.712471, 1.120795",\ + "0.581429, 0.700226, 0.811944, 1.015486, 1.422571"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.022008, 0.185188, 0.386108, 0.758886, 1.504440",\ + "0.022008, 0.185339, 0.386379, 0.758933, 1.504440",\ + "0.023991, 0.185339, 0.386379, 0.758933, 1.504440",\ + "0.025265, 0.185339, 0.386379, 0.758933, 1.504440",\ + "0.044109, 0.189380, 0.386379, 0.758933, 1.504720"); + } + + } /* end of arc clk_ast_rng_i_rng_b_o[0]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_rng_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.045041, 0.199186, 0.375056, 0.698318, 1.344843",\ + "0.102677, 0.257471, 0.433562, 0.756025, 1.400950",\ + "0.237455, 0.401819, 0.577329, 0.899780, 1.544683",\ + "0.270266, 0.438889, 0.614237, 0.936571, 1.581241",\ + "0.564763, 0.788747, 0.964628, 1.285318, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.020388, 0.295933, 0.630131, 1.246518, 2.473548",\ + "0.022435, 0.296571, 0.631520, 1.246518, 2.473548",\ + "0.043575, 0.300601, 0.632171, 1.246779, 2.473548",\ + "0.050360, 0.302518, 0.632228, 1.247206, 2.473548",\ + "0.124896, 0.341364, 0.638500, 1.250182, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.064894, 0.171688, 0.283456, 0.487892, 0.896762",\ + "0.124805, 0.231515, 0.343301, 0.547660, 0.956379",\ + "0.256621, 0.363767, 0.475184, 0.679518, 1.088186",\ + "0.289162, 0.396894, 0.508308, 0.712471, 1.120795",\ + "0.581429, 0.700226, 0.811944, 1.015486, 1.422571"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.022008, 0.184659, 0.384798, 0.757040, 1.501523",\ + "0.022008, 0.184659, 0.384798, 0.757040, 1.501523",\ + "0.023991, 0.184659, 0.384798, 0.757040, 1.501523",\ + "0.025265, 0.185012, 0.385060, 0.757558, 1.502554",\ + "0.044109, 0.189380, 0.385129, 0.758326, 1.504720"); + } + + } /* end of arc clk_ast_rng_i_rng_b_o[0]_redg_min*/ + +} /* end of pin rng_b_o[0] */ +} /* end of bus rng_b_o */ +bus ( entropy_rsp_i ) { + + bus_type : BUS34_type9 ; + direction : input ; + +pin("entropy_rsp_i[33]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001563 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[33]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "1.119801, 1.062115, 1.000165, 1.001253, 1.020223",\ + "1.200891, 1.143205, 1.081255, 1.082343, 1.101313",\ + "1.316914, 1.259228, 1.197278, 1.198366, 1.217336",\ + "1.518457, 1.460771, 1.398821, 1.399909, 1.418879",\ + "1.859802, 1.802116, 1.740050, 1.741138, 1.760224"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.903123, 0.863686, 0.813020, 0.814108, 0.827330",\ + "1.003527, 0.964090, 0.913424, 0.914512, 0.927734",\ + "1.127836, 1.088399, 1.037733, 1.038821, 1.052043",\ + "1.347378, 1.307941, 1.257275, 1.258363, 1.271584",\ + "1.738717, 1.699280, 1.648614, 1.649702, 1.662924"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[33]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.168954, -0.118035, -0.021877, -0.003703, 0.217154",\ + "-0.249369, -0.198449, -0.102291, -0.084118, 0.136740",\ + "-0.329424, -0.278473, -0.182197, -0.164034, 0.056702",\ + "-0.457832, -0.406830, -0.310356, -0.292210, -0.071679",\ + "-0.639075, -0.587937, -0.490944, -0.472842, -0.252849"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.139897, -0.089049, 0.006833, 0.025029, 0.246173",\ + "-0.240100, -0.189184, -0.093041, -0.074866, 0.146007",\ + "-0.358064, -0.306668, -0.208689, -0.190671, 0.057939",\ + "-0.516949, -0.483468, -0.393287, -0.375391, -0.096605",\ + "-0.756377, -0.722936, -0.665170, -0.641259, -0.350671"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[33]_hldr*/ + +} /* end of pin entropy_rsp_i[33] */ + +pin("entropy_rsp_i[32]") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[32]; +} /* end of pin entropy_rsp_i[32] */ + +pin("entropy_rsp_i[31]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[31]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[31]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[31]_hldr*/ + +} /* end of pin entropy_rsp_i[31] */ + +pin("entropy_rsp_i[30]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[30]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[30]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[30]_hldr*/ + +} /* end of pin entropy_rsp_i[30] */ + +pin("entropy_rsp_i[29]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[29]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[29]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[29]_hldr*/ + +} /* end of pin entropy_rsp_i[29] */ + +pin("entropy_rsp_i[28]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[28]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[28]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[28]_hldr*/ + +} /* end of pin entropy_rsp_i[28] */ + +pin("entropy_rsp_i[27]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[27]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[27]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[27]_hldr*/ + +} /* end of pin entropy_rsp_i[27] */ + +pin("entropy_rsp_i[26]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[26]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[26]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[26]_hldr*/ + +} /* end of pin entropy_rsp_i[26] */ + +pin("entropy_rsp_i[25]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[25]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[25]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[25]_hldr*/ + +} /* end of pin entropy_rsp_i[25] */ + +pin("entropy_rsp_i[24]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[24]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[24]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[24]_hldr*/ + +} /* end of pin entropy_rsp_i[24] */ + +pin("entropy_rsp_i[23]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[23]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[23]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[23]_hldr*/ + +} /* end of pin entropy_rsp_i[23] */ + +pin("entropy_rsp_i[22]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[22]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[22]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[22]_hldr*/ + +} /* end of pin entropy_rsp_i[22] */ + +pin("entropy_rsp_i[21]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[21]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[21]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[21]_hldr*/ + +} /* end of pin entropy_rsp_i[21] */ + +pin("entropy_rsp_i[20]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[20]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[20]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[20]_hldr*/ + +} /* end of pin entropy_rsp_i[20] */ + +pin("entropy_rsp_i[19]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[19]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[19]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[19]_hldr*/ + +} /* end of pin entropy_rsp_i[19] */ + +pin("entropy_rsp_i[18]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[18]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[18]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[18]_hldr*/ + +} /* end of pin entropy_rsp_i[18] */ + +pin("entropy_rsp_i[17]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[17]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[17]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[17]_hldr*/ + +} /* end of pin entropy_rsp_i[17] */ + +pin("entropy_rsp_i[16]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[16]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[16]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[16]_hldr*/ + +} /* end of pin entropy_rsp_i[16] */ + +pin("entropy_rsp_i[15]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[15]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[15]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[15]_hldr*/ + +} /* end of pin entropy_rsp_i[15] */ + +pin("entropy_rsp_i[14]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[14]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[14]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[14]_hldr*/ + +} /* end of pin entropy_rsp_i[14] */ + +pin("entropy_rsp_i[13]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[13]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[13]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[13]_hldr*/ + +} /* end of pin entropy_rsp_i[13] */ + +pin("entropy_rsp_i[12]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[12]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[12]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[12]_hldr*/ + +} /* end of pin entropy_rsp_i[12] */ + +pin("entropy_rsp_i[11]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[11]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[11]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[11]_hldr*/ + +} /* end of pin entropy_rsp_i[11] */ + +pin("entropy_rsp_i[10]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[10]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[10]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[10]_hldr*/ + +} /* end of pin entropy_rsp_i[10] */ + +pin("entropy_rsp_i[9]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[9]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[9]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[9]_hldr*/ + +} /* end of pin entropy_rsp_i[9] */ + +pin("entropy_rsp_i[8]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[8]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[8]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[8]_hldr*/ + +} /* end of pin entropy_rsp_i[8] */ + +pin("entropy_rsp_i[7]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[7]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[7]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[7]_hldr*/ + +} /* end of pin entropy_rsp_i[7] */ + +pin("entropy_rsp_i[6]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[6]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[6]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[6]_hldr*/ + +} /* end of pin entropy_rsp_i[6] */ + +pin("entropy_rsp_i[5]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[5]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[5]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[5]_hldr*/ + +} /* end of pin entropy_rsp_i[5] */ + +pin("entropy_rsp_i[4]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[4]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[4]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[4]_hldr*/ + +} /* end of pin entropy_rsp_i[4] */ + +pin("entropy_rsp_i[3]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[3]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[3]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[3]_hldr*/ + +} /* end of pin entropy_rsp_i[3] */ + +pin("entropy_rsp_i[2]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[2]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[2]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[2]_hldr*/ + +} /* end of pin entropy_rsp_i[2] */ + +pin("entropy_rsp_i[1]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[1]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[1]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[1]_hldr*/ + +} /* end of pin entropy_rsp_i[1] */ + +pin("entropy_rsp_i[0]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001123 ; + + /* Other user defined attributes. */ + original_pin : entropy_rsp_i[0]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.202977, 0.164874, 0.114384, 0.115510, 0.129197",\ + "0.287655, 0.249552, 0.199062, 0.200188, 0.213875",\ + "0.378849, 0.340583, 0.290072, 0.291193, 0.304823",\ + "0.542220, 0.503561, 0.452999, 0.454109, 0.467602",\ + "0.818496, 0.778874, 0.728184, 0.729266, 0.742423"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.245106, 0.187436, 0.073491, 0.078675, 0.141673",\ + "0.333057, 0.275386, 0.161441, 0.166625, 0.229623",\ + "0.433433, 0.375759, 0.261891, 0.267131, 0.330810",\ + "0.619112, 0.561430, 0.447762, 0.453147, 0.518594",\ + "0.940670, 0.882965, 0.769819, 0.775584, 0.845650"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[0]_stupr*/ + + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.134918, -0.101431, -0.043776, -0.018552, 0.287989",\ + "-0.219595, -0.186108, -0.128453, -0.103229, 0.203312",\ + "-0.310658, -0.277219, -0.219447, -0.195609, 0.094094",\ + "-0.473587, -0.440262, -0.382212, -0.361659, -0.111869",\ + "-0.749178, -0.716141, -0.657395, -0.645080, -0.495412"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.158345, -0.107350, -0.010904, 0.007245, 0.227804",\ + "-0.246288, -0.195293, -0.098847, -0.080698, 0.139861",\ + "-0.346722, -0.295637, -0.198845, -0.180726, 0.039476",\ + "-0.532525, -0.481205, -0.383518, -0.365475, -0.146201",\ + "-0.854381, -0.802448, -0.702421, -0.684578, -0.467728"); + } + + } /* end of arc clk_ast_es_i_entropy_rsp_i[0]_hldr*/ + +} /* end of pin entropy_rsp_i[0] */ +} /* end of bus entropy_rsp_i */ +bus ( entropy_req_o ) { + + bus_type : BUS1_type10 ; + direction : output ; + +pin("entropy_req_o[0]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : entropy_req_o[0]; + timing () { + related_pin : "clk_ast_es_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.072998, 0.160503, 0.321005, 0.642011"); + values ( "0.041147, 0.197164, 0.373538, 0.697306, 1.344843",\ + "0.098611, 0.255444, 0.432048, 0.755015, 1.400950",\ + "0.230794, 0.399801, 0.575814, 0.898771, 1.544683",\ + "0.262809, 0.436873, 0.612723, 0.935562, 1.581241",\ + "0.549011, 0.786720, 0.963122, 1.284314, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.072998, 0.160503, 0.321005, 0.642011"); + values ( "0.016407, 0.292097, 0.627231, 1.245675, 2.482563",\ + "0.018818, 0.292719, 0.628632, 1.245675, 2.482563",\ + "0.040240, 0.296800, 0.629285, 1.245675, 2.482563",\ + "0.046879, 0.298746, 0.629340, 1.245675, 2.482563",\ + "0.119467, 0.338085, 0.635627, 1.248267, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.072998, 0.160503, 0.321005, 0.642011"); + values ( "0.061012, 0.170429, 0.282525, 0.487280, 0.896790",\ + "0.121003, 0.230257, 0.342370, 0.547049, 0.956407",\ + "0.252523, 0.362513, 0.474253, 0.678907, 1.088215",\ + "0.284909, 0.395640, 0.507378, 0.711860, 1.120823",\ + "0.574684, 0.698966, 0.811016, 1.014877, 1.422600"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.072998, 0.160503, 0.321005, 0.642011"); + values ( "0.018854, 0.182937, 0.384410, 0.757771, 1.504492",\ + "0.018854, 0.183085, 0.384681, 0.757818, 1.504492",\ + "0.021110, 0.183085, 0.384681, 0.757818, 1.504492",\ + "0.022486, 0.183085, 0.384681, 0.757818, 1.504492",\ + "0.041128, 0.187207, 0.384681, 0.757818, 1.504772"); + } + + } /* end of arc clk_ast_es_i_entropy_req_o[0]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_es_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.072998, 0.160503, 0.321005, 0.642011"); + values ( "0.041147, 0.197164, 0.373538, 0.697306, 1.344843",\ + "0.098611, 0.255444, 0.432048, 0.755015, 1.400950",\ + "0.230794, 0.399801, 0.575814, 0.898771, 1.544683",\ + "0.262809, 0.436873, 0.612723, 0.935562, 1.581241",\ + "0.549011, 0.786720, 0.963122, 1.284314, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.072998, 0.160503, 0.321005, 0.642011"); + values ( "0.016407, 0.292097, 0.627231, 1.244593, 2.473548",\ + "0.018818, 0.292719, 0.628632, 1.244593, 2.473548",\ + "0.040240, 0.296800, 0.629285, 1.244855, 2.473548",\ + "0.046879, 0.298746, 0.629340, 1.245281, 2.473548",\ + "0.119467, 0.338085, 0.635627, 1.248267, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.072998, 0.160503, 0.321005, 0.642011"); + values ( "0.061012, 0.170429, 0.282525, 0.487280, 0.896790",\ + "0.121003, 0.230257, 0.342370, 0.547049, 0.956407",\ + "0.252523, 0.362513, 0.474253, 0.678907, 1.088215",\ + "0.284909, 0.395640, 0.507378, 0.711860, 1.120823",\ + "0.574684, 0.698966, 0.811016, 1.014877, 1.422600"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.072998, 0.160503, 0.321005, 0.642011"); + values ( "0.018854, 0.182418, 0.383102, 0.755926, 1.501575",\ + "0.018854, 0.182418, 0.383102, 0.755926, 1.501575",\ + "0.021110, 0.182418, 0.383102, 0.755926, 1.501575",\ + "0.022486, 0.182773, 0.383362, 0.756444, 1.502606",\ + "0.041128, 0.187207, 0.383428, 0.757210, 1.504772"); + } + + } /* end of arc clk_ast_es_i_entropy_req_o[0]_redg_min*/ + +} /* end of pin entropy_req_o[0] */ +} /* end of bus entropy_req_o */ +bus ( fla_alert_src_i ) { + + bus_type : BUS2_type5 ; + direction : input ; + +pin("fla_alert_src_i[1]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000977 ; + + /* Other user defined attributes. */ + original_pin : fla_alert_src_i[1]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.160061, 0.122171, 0.071764, 0.072890, 0.086576",\ + "0.244155, 0.206260, 0.155798, 0.156930, 0.170689",\ + "0.325133, 0.287001, 0.236508, 0.237633, 0.251310",\ + "0.464429, 0.425692, 0.375119, 0.376227, 0.389693",\ + "0.687556, 0.647617, 0.596849, 0.597922, 0.610956"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.188609, 0.130944, 0.016876, 0.021970, 0.083878",\ + "0.276270, 0.218603, 0.104578, 0.109703, 0.171989",\ + "0.365048, 0.307375, 0.193490, 0.198718, 0.262247",\ + "0.519717, 0.462029, 0.348488, 0.353966, 0.420536",\ + "0.771986, 0.714301, 0.601221, 0.607099, 0.678536"); + } + + } /* end of arc clk_ast_alert_i_fla_alert_src_i[1]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.092219, -0.058653, -0.001237, 0.026220, 0.359896",\ + "-0.176268, -0.142720, -0.085214, -0.058223, 0.269794",\ + "-0.257056, -0.223577, -0.165901, -0.140924, 0.162616",\ + "-0.395865, -0.362566, -0.304455, -0.284621, -0.043580",\ + "-0.617889, -0.584914, -0.525934, -0.516364, -0.400062"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.101777, -0.050927, 0.044966, 0.063162, 0.284294",\ + "-0.189465, -0.138565, -0.042479, -0.024300, 0.196634",\ + "-0.278331, -0.227265, -0.130550, -0.112424, 0.107856",\ + "-0.433215, -0.381745, -0.283488, -0.265494, -0.046811",\ + "-0.685809, -0.633481, -0.532401, -0.514612, -0.298423"); + } + + } /* end of arc clk_ast_alert_i_fla_alert_src_i[1]_hldr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : recovery_rising ; + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.346181, 0.303572, 0.245705, 0.249110, 0.290489",\ + "0.442377, 0.399789, 0.341790, 0.345163, 0.386153",\ + "0.570076, 0.527583, 0.468994, 0.472224, 0.511474",\ + "0.816390, 0.774143, 0.714024, 0.716882, 0.751614",\ + "1.243561, 1.201654, 1.139151, 1.141470, 1.169661"); + } + + } /* end of arc clk_ast_alert_i_fla_alert_src_i[1]_recfr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : removal_rising ; + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.258352, -0.220900, -0.161340, -0.151153, -0.027357",\ + "-0.354483, -0.317000, -0.257562, -0.247380, -0.123649",\ + "-0.481891, -0.444270, -0.385376, -0.375219, -0.251777",\ + "-0.727449, -0.689470, -0.631990, -0.621894, -0.499204",\ + "-1.152401, -1.113697, -1.058374, -1.048432, -0.927596"); + } + + } /* end of arc clk_ast_alert_i_fla_alert_src_i[1]_remfr*/ + +} /* end of pin fla_alert_src_i[1] */ + +pin("fla_alert_src_i[0]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001210 ; + + /* Other user defined attributes. */ + original_pin : fla_alert_src_i[0]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.153898, 0.096234, -0.017862, -0.012789, 0.048865",\ + "0.234547, 0.176873, 0.063006, 0.068247, 0.131938",\ + "0.312922, 0.255231, 0.141780, 0.147323, 0.214693",\ + "0.443628, 0.385987, 0.272716, 0.278561, 0.349586",\ + "0.643976, 0.586670, 0.471971, 0.477562, 0.545510"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.135497, 0.097521, 0.047194, 0.048307, 0.061839",\ + "0.227162, 0.188584, 0.138031, 0.139144, 0.152665",\ + "0.314547, 0.274830, 0.224128, 0.225207, 0.238331",\ + "0.459106, 0.419271, 0.367632, 0.368682, 0.381446",\ + "0.699539, 0.659946, 0.606277, 0.607276, 0.619410"); + } + + } /* end of arc clk_ast_alert_i_fla_alert_src_i[0]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.067048, -0.016232, 0.079533, 0.097739, 0.319005",\ + "-0.147841, -0.096754, 0.000043, 0.018162, 0.238358",\ + "-0.226477, -0.174901, -0.076238, -0.058278, 0.159985",\ + "-0.357390, -0.304774, -0.203323, -0.185507, 0.031000",\ + "-0.557290, -0.502515, -0.398294, -0.380283, -0.161393"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.067653, -0.034085, 0.023249, 0.050680, 0.384046",\ + "-0.158725, -0.125379, -0.067382, -0.046199, 0.211248",\ + "-0.245194, -0.212186, -0.153370, -0.141879, -0.002219",\ + "-0.386154, -0.352349, -0.293338, -0.283677, -0.166272",\ + "-0.618941, -0.583206, -0.524120, -0.514248, -0.394277"); + } + + } /* end of arc clk_ast_alert_i_fla_alert_src_i[0]_hldr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : recovery_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.348301, 0.305676, 0.248104, 0.251583, 0.293858",\ + "0.429286, 0.386661, 0.329089, 0.332567, 0.374842",\ + "0.504635, 0.462011, 0.404396, 0.407864, 0.450008",\ + "0.638699, 0.596084, 0.538251, 0.541665, 0.583146",\ + "0.863013, 0.820471, 0.762185, 0.765489, 0.805634"); + } + + } /* end of arc clk_ast_alert_i_fla_alert_src_i[0]_recrr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : removal_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.260501, -0.223062, -0.163229, -0.153056, -0.029425",\ + "-0.341485, -0.304046, -0.244213, -0.234040, -0.110409",\ + "-0.416836, -0.379397, -0.319604, -0.309428, -0.185759",\ + "-0.550887, -0.513443, -0.453851, -0.443663, -0.319850",\ + "-0.774977, -0.737427, -0.678253, -0.668084, -0.544492"); + } + + } /* end of arc clk_ast_alert_i_fla_alert_src_i[0]_remrr*/ + +} /* end of pin fla_alert_src_i[0] */ +} /* end of bus fla_alert_src_i */ +bus ( otp_alert_src_i ) { + + bus_type : BUS2_type5 ; + direction : input ; + +pin("otp_alert_src_i[1]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000977 ; + + /* Other user defined attributes. */ + original_pin : otp_alert_src_i[1]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.160061, 0.122171, 0.071764, 0.072890, 0.086576",\ + "0.244155, 0.206260, 0.155798, 0.156930, 0.170689",\ + "0.325133, 0.287001, 0.236508, 0.237633, 0.251310",\ + "0.464429, 0.425692, 0.375119, 0.376227, 0.389693",\ + "0.687556, 0.647617, 0.596849, 0.597922, 0.610956"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.188609, 0.130944, 0.016876, 0.021970, 0.083878",\ + "0.276270, 0.218603, 0.104578, 0.109703, 0.171989",\ + "0.365048, 0.307375, 0.193490, 0.198718, 0.262247",\ + "0.519717, 0.462029, 0.348488, 0.353966, 0.420536",\ + "0.771986, 0.714301, 0.601221, 0.607099, 0.678536"); + } + + } /* end of arc clk_ast_alert_i_otp_alert_src_i[1]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.092219, -0.058653, -0.001237, 0.026220, 0.359896",\ + "-0.176268, -0.142720, -0.085214, -0.058223, 0.269794",\ + "-0.257056, -0.223577, -0.165901, -0.140924, 0.162616",\ + "-0.395865, -0.362566, -0.304455, -0.284621, -0.043580",\ + "-0.617889, -0.584914, -0.525934, -0.516364, -0.400062"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.101777, -0.050927, 0.044966, 0.063162, 0.284294",\ + "-0.189465, -0.138565, -0.042479, -0.024300, 0.196634",\ + "-0.278331, -0.227265, -0.130550, -0.112424, 0.107856",\ + "-0.433215, -0.381745, -0.283488, -0.265494, -0.046811",\ + "-0.685809, -0.633481, -0.532401, -0.514612, -0.298423"); + } + + } /* end of arc clk_ast_alert_i_otp_alert_src_i[1]_hldr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : recovery_rising ; + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.346181, 0.303572, 0.245705, 0.249110, 0.290489",\ + "0.442377, 0.399789, 0.341790, 0.345163, 0.386153",\ + "0.570076, 0.527583, 0.468994, 0.472224, 0.511474",\ + "0.816390, 0.774143, 0.714024, 0.716882, 0.751614",\ + "1.243561, 1.201654, 1.139151, 1.141470, 1.169661"); + } + + } /* end of arc clk_ast_alert_i_otp_alert_src_i[1]_recfr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : removal_rising ; + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.258352, -0.220900, -0.161340, -0.151153, -0.027357",\ + "-0.354483, -0.317000, -0.257562, -0.247380, -0.123649",\ + "-0.481891, -0.444270, -0.385376, -0.375219, -0.251777",\ + "-0.727449, -0.689470, -0.631990, -0.621894, -0.499204",\ + "-1.152401, -1.113697, -1.058374, -1.048432, -0.927596"); + } + + } /* end of arc clk_ast_alert_i_otp_alert_src_i[1]_remfr*/ + +} /* end of pin otp_alert_src_i[1] */ + +pin("otp_alert_src_i[0]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001210 ; + + /* Other user defined attributes. */ + original_pin : otp_alert_src_i[0]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.153898, 0.096234, -0.017862, -0.012789, 0.048865",\ + "0.234547, 0.176873, 0.063006, 0.068247, 0.131938",\ + "0.312922, 0.255231, 0.141780, 0.147323, 0.214693",\ + "0.443628, 0.385987, 0.272716, 0.278561, 0.349586",\ + "0.643976, 0.586670, 0.471971, 0.477562, 0.545510"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.135497, 0.097521, 0.047194, 0.048307, 0.061839",\ + "0.227162, 0.188584, 0.138031, 0.139144, 0.152665",\ + "0.314547, 0.274830, 0.224128, 0.225207, 0.238331",\ + "0.459106, 0.419271, 0.367632, 0.368682, 0.381446",\ + "0.699539, 0.659946, 0.606277, 0.607276, 0.619410"); + } + + } /* end of arc clk_ast_alert_i_otp_alert_src_i[0]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.067048, -0.016232, 0.079533, 0.097739, 0.319005",\ + "-0.147841, -0.096754, 0.000043, 0.018162, 0.238358",\ + "-0.226477, -0.174901, -0.076238, -0.058278, 0.159985",\ + "-0.357390, -0.304774, -0.203323, -0.185507, 0.031000",\ + "-0.557290, -0.502515, -0.398294, -0.380283, -0.161393"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.067653, -0.034085, 0.023249, 0.050680, 0.384046",\ + "-0.158725, -0.125379, -0.067382, -0.046199, 0.211248",\ + "-0.245194, -0.212186, -0.153370, -0.141879, -0.002219",\ + "-0.386154, -0.352349, -0.293338, -0.283677, -0.166272",\ + "-0.618941, -0.583206, -0.524120, -0.514248, -0.394277"); + } + + } /* end of arc clk_ast_alert_i_otp_alert_src_i[0]_hldr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : recovery_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.348301, 0.305676, 0.248104, 0.251583, 0.293858",\ + "0.429286, 0.386661, 0.329089, 0.332567, 0.374842",\ + "0.504635, 0.462011, 0.404396, 0.407864, 0.450008",\ + "0.638699, 0.596084, 0.538251, 0.541665, 0.583146",\ + "0.863013, 0.820471, 0.762185, 0.765489, 0.805634"); + } + + } /* end of arc clk_ast_alert_i_otp_alert_src_i[0]_recrr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : removal_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.260501, -0.223062, -0.163229, -0.153056, -0.029425",\ + "-0.341485, -0.304046, -0.244213, -0.234040, -0.110409",\ + "-0.416836, -0.379397, -0.319604, -0.309428, -0.185759",\ + "-0.550887, -0.513443, -0.453851, -0.443663, -0.319850",\ + "-0.774977, -0.737427, -0.678253, -0.668084, -0.544492"); + } + + } /* end of arc clk_ast_alert_i_otp_alert_src_i[0]_remrr*/ + +} /* end of pin otp_alert_src_i[0] */ +} /* end of bus otp_alert_src_i */ +bus ( alert_rsp_i ) { + + bus_type : BUS52_type11 ; + direction : input ; + +pin("alert_rsp_i[51]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000591 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[51]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.199726, 0.138633, 0.033463, 0.054461, 0.309637",\ + "0.287373, 0.226285, 0.121029, 0.142110, 0.398309",\ + "0.384684, 0.323610, 0.218105, 0.239430, 0.498591",\ + "0.560847, 0.499591, 0.393454, 0.414928, 0.675905",\ + "0.860633, 0.798634, 0.691077, 0.712170, 0.968509"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.214871, 0.178837, 0.123974, 0.124132, 0.126049",\ + "0.298634, 0.262602, 0.208037, 0.208173, 0.209823",\ + "0.403277, 0.367383, 0.313251, 0.313345, 0.314481",\ + "0.578488, 0.543087, 0.488416, 0.488511, 0.489666",\ + "0.868870, 0.834430, 0.778706, 0.778804, 0.779997"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[51]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.112157, -0.054218, 0.050557, 0.069205, 0.295841",\ + "-0.199804, -0.141906, -0.036659, -0.018006, 0.208689",\ + "-0.297115, -0.239335, -0.132721, -0.114053, 0.112815",\ + "-0.473050, -0.415309, -0.306338, -0.287512, -0.058720",\ + "-0.771971, -0.713924, -0.601352, -0.581984, -0.346599"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.126284, -0.091801, -0.026053, 0.006825, 0.406380",\ + "-0.209910, -0.175609, -0.109372, -0.076372, 0.324685",\ + "-0.312970, -0.278942, -0.212075, -0.178671, 0.227297",\ + "-0.483276, -0.448963, -0.383263, -0.349244, 0.064176",\ + "-0.764074, -0.729205, -0.665784, -0.630568, -0.202592"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[51]_hldr*/ + +} /* end of pin alert_rsp_i[51] */ + +pin("alert_rsp_i[50]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000589 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[50]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.192162, 0.131067, 0.025934, 0.046895, 0.301630",\ + "0.279200, 0.218116, 0.112785, 0.133940, 0.391038",\ + "0.372216, 0.311153, 0.205428, 0.226969, 0.488754",\ + "0.526955, 0.465449, 0.358834, 0.380180, 0.639596",\ + "0.781727, 0.719289, 0.610887, 0.631753, 0.885337"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.203639, 0.167601, 0.112469, 0.112646, 0.114806",\ + "0.292883, 0.256848, 0.201897, 0.202061, 0.204057",\ + "0.398578, 0.362549, 0.308291, 0.308405, 0.309779",\ + "0.587975, 0.552224, 0.497936, 0.498030, 0.499172",\ + "0.915076, 0.879998, 0.824973, 0.825069, 0.826237"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[50]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.104592, -0.046636, 0.057935, 0.076581, 0.303191",\ + "-0.191631, -0.133768, -0.028107, -0.009449, 0.217299",\ + "-0.284646, -0.226970, -0.119146, -0.100465, 0.126557",\ + "-0.438866, -0.381023, -0.270840, -0.251831, -0.020821",\ + "-0.692552, -0.634323, -0.519612, -0.499921, -0.260619"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.115174, -0.080527, -0.015220, 0.017546, 0.415745",\ + "-0.204335, -0.169799, -0.104194, -0.071353, 0.327762",\ + "-0.309715, -0.275599, -0.208862, -0.175734, 0.226866",\ + "-0.496251, -0.462141, -0.395611, -0.362029, 0.046093",\ + "-0.816650, -0.782151, -0.717215, -0.682795, -0.264493"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[50]_hldr*/ + +} /* end of pin alert_rsp_i[50] */ + +pin("alert_rsp_i[49]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000591 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[49]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.199726, 0.138633, 0.033463, 0.054461, 0.309637",\ + "0.287373, 0.226285, 0.121029, 0.142110, 0.398309",\ + "0.384684, 0.323610, 0.218105, 0.239430, 0.498591",\ + "0.560847, 0.499591, 0.393454, 0.414928, 0.675905",\ + "0.860633, 0.798634, 0.691077, 0.712170, 0.968509"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.214871, 0.178837, 0.123974, 0.124132, 0.126049",\ + "0.298634, 0.262602, 0.208037, 0.208173, 0.209823",\ + "0.403277, 0.367383, 0.313251, 0.313345, 0.314481",\ + "0.578488, 0.543087, 0.488416, 0.488511, 0.489666",\ + "0.868870, 0.834430, 0.778706, 0.778804, 0.779997"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[49]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.112157, -0.054218, 0.050557, 0.069205, 0.295841",\ + "-0.199804, -0.141906, -0.036659, -0.018006, 0.208689",\ + "-0.297115, -0.239335, -0.132721, -0.114053, 0.112815",\ + "-0.473050, -0.415309, -0.306338, -0.287512, -0.058720",\ + "-0.771971, -0.713924, -0.601352, -0.581984, -0.346599"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.126284, -0.091801, -0.026053, 0.006825, 0.406380",\ + "-0.209910, -0.175609, -0.109372, -0.076372, 0.324685",\ + "-0.312970, -0.278942, -0.212075, -0.178671, 0.227297",\ + "-0.483276, -0.448963, -0.383263, -0.349244, 0.064176",\ + "-0.764074, -0.729205, -0.665784, -0.630568, -0.202592"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[49]_hldr*/ + +} /* end of pin alert_rsp_i[49] */ + +pin("alert_rsp_i[48]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000589 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[48]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.192162, 0.131067, 0.025934, 0.046895, 0.301630",\ + "0.279200, 0.218116, 0.112785, 0.133940, 0.391038",\ + "0.372216, 0.311153, 0.205428, 0.226969, 0.488754",\ + "0.526955, 0.465449, 0.358834, 0.380180, 0.639596",\ + "0.781727, 0.719289, 0.610887, 0.631753, 0.885337"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.203639, 0.167601, 0.112469, 0.112646, 0.114806",\ + "0.292883, 0.256848, 0.201897, 0.202061, 0.204057",\ + "0.398578, 0.362549, 0.308291, 0.308405, 0.309779",\ + "0.587975, 0.552224, 0.497936, 0.498030, 0.499172",\ + "0.915076, 0.879998, 0.824973, 0.825069, 0.826237"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[48]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.104592, -0.046636, 0.057935, 0.076581, 0.303191",\ + "-0.191631, -0.133768, -0.028107, -0.009449, 0.217299",\ + "-0.284646, -0.226970, -0.119146, -0.100465, 0.126557",\ + "-0.438866, -0.381023, -0.270840, -0.251831, -0.020821",\ + "-0.692552, -0.634323, -0.519612, -0.499921, -0.260619"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.115174, -0.080527, -0.015220, 0.017546, 0.415745",\ + "-0.204335, -0.169799, -0.104194, -0.071353, 0.327762",\ + "-0.309715, -0.275599, -0.208862, -0.175734, 0.226866",\ + "-0.496251, -0.462141, -0.395611, -0.362029, 0.046093",\ + "-0.816650, -0.782151, -0.717215, -0.682795, -0.264493"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[48]_hldr*/ + +} /* end of pin alert_rsp_i[48] */ + +pin("alert_rsp_i[47]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000591 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[47]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.199726, 0.138633, 0.033463, 0.054461, 0.309637",\ + "0.287373, 0.226285, 0.121029, 0.142110, 0.398309",\ + "0.384684, 0.323610, 0.218105, 0.239430, 0.498591",\ + "0.560847, 0.499591, 0.393454, 0.414928, 0.675905",\ + "0.860633, 0.798634, 0.691077, 0.712170, 0.968509"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.214871, 0.178837, 0.123974, 0.124132, 0.126049",\ + "0.298634, 0.262602, 0.208037, 0.208173, 0.209823",\ + "0.403277, 0.367383, 0.313251, 0.313345, 0.314481",\ + "0.578488, 0.543087, 0.488416, 0.488511, 0.489666",\ + "0.868870, 0.834430, 0.778706, 0.778804, 0.779997"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[47]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.112157, -0.054218, 0.050557, 0.069205, 0.295841",\ + "-0.199804, -0.141906, -0.036659, -0.018006, 0.208689",\ + "-0.297115, -0.239335, -0.132721, -0.114053, 0.112815",\ + "-0.473050, -0.415309, -0.306338, -0.287512, -0.058720",\ + "-0.771971, -0.713924, -0.601352, -0.581984, -0.346599"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.126284, -0.091801, -0.026053, 0.006825, 0.406380",\ + "-0.209910, -0.175609, -0.109372, -0.076372, 0.324685",\ + "-0.312970, -0.278942, -0.212075, -0.178671, 0.227297",\ + "-0.483276, -0.448963, -0.383263, -0.349244, 0.064176",\ + "-0.764074, -0.729205, -0.665784, -0.630568, -0.202592"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[47]_hldr*/ + +} /* end of pin alert_rsp_i[47] */ + +pin("alert_rsp_i[46]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000589 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[46]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.192162, 0.131067, 0.025934, 0.046895, 0.301630",\ + "0.279200, 0.218116, 0.112785, 0.133940, 0.391038",\ + "0.372216, 0.311153, 0.205428, 0.226969, 0.488754",\ + "0.526955, 0.465449, 0.358834, 0.380180, 0.639596",\ + "0.781727, 0.719289, 0.610887, 0.631753, 0.885337"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.203639, 0.167601, 0.112469, 0.112646, 0.114806",\ + "0.292883, 0.256848, 0.201897, 0.202061, 0.204057",\ + "0.398578, 0.362549, 0.308291, 0.308405, 0.309779",\ + "0.587975, 0.552224, 0.497936, 0.498030, 0.499172",\ + "0.915076, 0.879998, 0.824973, 0.825069, 0.826237"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[46]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.104592, -0.046636, 0.057935, 0.076581, 0.303191",\ + "-0.191631, -0.133768, -0.028107, -0.009449, 0.217299",\ + "-0.284646, -0.226970, -0.119146, -0.100465, 0.126557",\ + "-0.438866, -0.381023, -0.270840, -0.251831, -0.020821",\ + "-0.692552, -0.634323, -0.519612, -0.499921, -0.260619"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.115174, -0.080527, -0.015220, 0.017546, 0.415745",\ + "-0.204335, -0.169799, -0.104194, -0.071353, 0.327762",\ + "-0.309715, -0.275599, -0.208862, -0.175734, 0.226866",\ + "-0.496251, -0.462141, -0.395611, -0.362029, 0.046093",\ + "-0.816650, -0.782151, -0.717215, -0.682795, -0.264493"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[46]_hldr*/ + +} /* end of pin alert_rsp_i[46] */ + +pin("alert_rsp_i[45]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000591 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[45]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.199726, 0.138633, 0.033463, 0.054461, 0.309637",\ + "0.287373, 0.226285, 0.121029, 0.142110, 0.398309",\ + "0.384684, 0.323610, 0.218105, 0.239430, 0.498591",\ + "0.560847, 0.499591, 0.393454, 0.414928, 0.675905",\ + "0.860633, 0.798634, 0.691077, 0.712170, 0.968509"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.214871, 0.178837, 0.123974, 0.124132, 0.126049",\ + "0.298634, 0.262602, 0.208037, 0.208173, 0.209823",\ + "0.403277, 0.367383, 0.313251, 0.313345, 0.314481",\ + "0.578488, 0.543087, 0.488416, 0.488511, 0.489666",\ + "0.868870, 0.834430, 0.778706, 0.778804, 0.779997"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[45]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.112157, -0.054218, 0.050557, 0.069205, 0.295841",\ + "-0.199804, -0.141906, -0.036659, -0.018006, 0.208689",\ + "-0.297115, -0.239335, -0.132721, -0.114053, 0.112815",\ + "-0.473050, -0.415309, -0.306338, -0.287512, -0.058720",\ + "-0.771971, -0.713924, -0.601352, -0.581984, -0.346599"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.126284, -0.091801, -0.026053, 0.006825, 0.406380",\ + "-0.209910, -0.175609, -0.109372, -0.076372, 0.324685",\ + "-0.312970, -0.278942, -0.212075, -0.178671, 0.227297",\ + "-0.483276, -0.448963, -0.383263, -0.349244, 0.064176",\ + "-0.764074, -0.729205, -0.665784, -0.630568, -0.202592"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[45]_hldr*/ + +} /* end of pin alert_rsp_i[45] */ + +pin("alert_rsp_i[44]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000589 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[44]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.192162, 0.131067, 0.025934, 0.046895, 0.301630",\ + "0.279200, 0.218116, 0.112785, 0.133940, 0.391038",\ + "0.372216, 0.311153, 0.205428, 0.226969, 0.488754",\ + "0.526955, 0.465449, 0.358834, 0.380180, 0.639596",\ + "0.781727, 0.719289, 0.610887, 0.631753, 0.885337"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.203639, 0.167601, 0.112469, 0.112646, 0.114806",\ + "0.292883, 0.256848, 0.201897, 0.202061, 0.204057",\ + "0.398578, 0.362549, 0.308291, 0.308405, 0.309779",\ + "0.587975, 0.552224, 0.497936, 0.498030, 0.499172",\ + "0.915076, 0.879998, 0.824973, 0.825069, 0.826237"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[44]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.104592, -0.046636, 0.057935, 0.076581, 0.303191",\ + "-0.191631, -0.133768, -0.028107, -0.009449, 0.217299",\ + "-0.284646, -0.226970, -0.119146, -0.100465, 0.126557",\ + "-0.438866, -0.381023, -0.270840, -0.251831, -0.020821",\ + "-0.692552, -0.634323, -0.519612, -0.499921, -0.260619"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.115174, -0.080527, -0.015220, 0.017546, 0.415745",\ + "-0.204335, -0.169799, -0.104194, -0.071353, 0.327762",\ + "-0.309715, -0.275599, -0.208862, -0.175734, 0.226866",\ + "-0.496251, -0.462141, -0.395611, -0.362029, 0.046093",\ + "-0.816650, -0.782151, -0.717215, -0.682795, -0.264493"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[44]_hldr*/ + +} /* end of pin alert_rsp_i[44] */ + +pin("alert_rsp_i[43]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000591 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[43]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.199726, 0.138633, 0.033463, 0.054461, 0.309637",\ + "0.287373, 0.226285, 0.121029, 0.142110, 0.398309",\ + "0.384684, 0.323610, 0.218105, 0.239430, 0.498591",\ + "0.560847, 0.499591, 0.393454, 0.414928, 0.675905",\ + "0.860633, 0.798634, 0.691077, 0.712170, 0.968509"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.214871, 0.178837, 0.123974, 0.124132, 0.126049",\ + "0.298634, 0.262602, 0.208037, 0.208173, 0.209823",\ + "0.403277, 0.367383, 0.313251, 0.313345, 0.314481",\ + "0.578488, 0.543087, 0.488416, 0.488511, 0.489666",\ + "0.868870, 0.834430, 0.778706, 0.778804, 0.779997"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[43]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.112157, -0.054218, 0.050557, 0.069205, 0.295841",\ + "-0.199804, -0.141906, -0.036659, -0.018006, 0.208689",\ + "-0.297115, -0.239335, -0.132721, -0.114053, 0.112815",\ + "-0.473050, -0.415309, -0.306338, -0.287512, -0.058720",\ + "-0.771971, -0.713924, -0.601352, -0.581984, -0.346599"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.126284, -0.091801, -0.026053, 0.006825, 0.406380",\ + "-0.209910, -0.175609, -0.109372, -0.076372, 0.324685",\ + "-0.312970, -0.278942, -0.212075, -0.178671, 0.227297",\ + "-0.483276, -0.448963, -0.383263, -0.349244, 0.064176",\ + "-0.764074, -0.729205, -0.665784, -0.630568, -0.202592"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[43]_hldr*/ + +} /* end of pin alert_rsp_i[43] */ + +pin("alert_rsp_i[42]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000589 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[42]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.192162, 0.131067, 0.025934, 0.046895, 0.301630",\ + "0.279200, 0.218116, 0.112785, 0.133940, 0.391038",\ + "0.372216, 0.311153, 0.205428, 0.226969, 0.488754",\ + "0.526955, 0.465449, 0.358834, 0.380180, 0.639596",\ + "0.781727, 0.719289, 0.610887, 0.631753, 0.885337"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.203639, 0.167601, 0.112469, 0.112646, 0.114806",\ + "0.292883, 0.256848, 0.201897, 0.202061, 0.204057",\ + "0.398578, 0.362549, 0.308291, 0.308405, 0.309779",\ + "0.587975, 0.552224, 0.497936, 0.498030, 0.499172",\ + "0.915076, 0.879998, 0.824973, 0.825069, 0.826237"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[42]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.104592, -0.046636, 0.057935, 0.076581, 0.303191",\ + "-0.191631, -0.133768, -0.028107, -0.009449, 0.217299",\ + "-0.284646, -0.226970, -0.119146, -0.100465, 0.126557",\ + "-0.438866, -0.381023, -0.270840, -0.251831, -0.020821",\ + "-0.692552, -0.634323, -0.519612, -0.499921, -0.260619"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.115174, -0.080527, -0.015220, 0.017546, 0.415745",\ + "-0.204335, -0.169799, -0.104194, -0.071353, 0.327762",\ + "-0.309715, -0.275599, -0.208862, -0.175734, 0.226866",\ + "-0.496251, -0.462141, -0.395611, -0.362029, 0.046093",\ + "-0.816650, -0.782151, -0.717215, -0.682795, -0.264493"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[42]_hldr*/ + +} /* end of pin alert_rsp_i[42] */ + +pin("alert_rsp_i[41]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000591 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[41]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.199726, 0.138633, 0.033463, 0.054461, 0.309637",\ + "0.287373, 0.226285, 0.121029, 0.142110, 0.398309",\ + "0.384684, 0.323610, 0.218105, 0.239430, 0.498591",\ + "0.560847, 0.499591, 0.393454, 0.414928, 0.675905",\ + "0.860633, 0.798634, 0.691077, 0.712170, 0.968509"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.214871, 0.178837, 0.123974, 0.124132, 0.126049",\ + "0.298634, 0.262602, 0.208037, 0.208173, 0.209823",\ + "0.403277, 0.367383, 0.313251, 0.313345, 0.314481",\ + "0.578488, 0.543087, 0.488416, 0.488511, 0.489666",\ + "0.868870, 0.834430, 0.778706, 0.778804, 0.779997"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[41]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.112157, -0.054218, 0.050557, 0.069205, 0.295841",\ + "-0.199804, -0.141906, -0.036659, -0.018006, 0.208689",\ + "-0.297115, -0.239335, -0.132721, -0.114053, 0.112815",\ + "-0.473050, -0.415309, -0.306338, -0.287512, -0.058720",\ + "-0.771971, -0.713924, -0.601352, -0.581984, -0.346599"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.126284, -0.091801, -0.026053, 0.006825, 0.406380",\ + "-0.209910, -0.175609, -0.109372, -0.076372, 0.324685",\ + "-0.312970, -0.278942, -0.212075, -0.178671, 0.227297",\ + "-0.483276, -0.448963, -0.383263, -0.349244, 0.064176",\ + "-0.764074, -0.729205, -0.665784, -0.630568, -0.202592"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[41]_hldr*/ + +} /* end of pin alert_rsp_i[41] */ + +pin("alert_rsp_i[40]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000589 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[40]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.192162, 0.131067, 0.025934, 0.046895, 0.301630",\ + "0.279200, 0.218116, 0.112785, 0.133940, 0.391038",\ + "0.372216, 0.311153, 0.205428, 0.226969, 0.488754",\ + "0.526955, 0.465449, 0.358834, 0.380180, 0.639596",\ + "0.781727, 0.719289, 0.610887, 0.631753, 0.885337"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.203639, 0.167601, 0.112469, 0.112646, 0.114806",\ + "0.292883, 0.256848, 0.201897, 0.202061, 0.204057",\ + "0.398578, 0.362549, 0.308291, 0.308405, 0.309779",\ + "0.587975, 0.552224, 0.497936, 0.498030, 0.499172",\ + "0.915076, 0.879998, 0.824973, 0.825069, 0.826237"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[40]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.104592, -0.046636, 0.057935, 0.076581, 0.303191",\ + "-0.191631, -0.133768, -0.028107, -0.009449, 0.217299",\ + "-0.284646, -0.226970, -0.119146, -0.100465, 0.126557",\ + "-0.438866, -0.381023, -0.270840, -0.251831, -0.020821",\ + "-0.692552, -0.634323, -0.519612, -0.499921, -0.260619"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.115174, -0.080527, -0.015220, 0.017546, 0.415745",\ + "-0.204335, -0.169799, -0.104194, -0.071353, 0.327762",\ + "-0.309715, -0.275599, -0.208862, -0.175734, 0.226866",\ + "-0.496251, -0.462141, -0.395611, -0.362029, 0.046093",\ + "-0.816650, -0.782151, -0.717215, -0.682795, -0.264493"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[40]_hldr*/ + +} /* end of pin alert_rsp_i[40] */ + +pin("alert_rsp_i[39]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000591 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[39]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.199726, 0.138633, 0.033463, 0.054461, 0.309637",\ + "0.287373, 0.226285, 0.121029, 0.142110, 0.398309",\ + "0.384684, 0.323610, 0.218105, 0.239430, 0.498591",\ + "0.560847, 0.499591, 0.393454, 0.414928, 0.675905",\ + "0.860633, 0.798634, 0.691077, 0.712170, 0.968509"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.214871, 0.178837, 0.123974, 0.124132, 0.126049",\ + "0.298634, 0.262602, 0.208037, 0.208173, 0.209823",\ + "0.403277, 0.367383, 0.313251, 0.313345, 0.314481",\ + "0.578488, 0.543087, 0.488416, 0.488511, 0.489666",\ + "0.868870, 0.834430, 0.778706, 0.778804, 0.779997"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[39]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.112157, -0.054218, 0.050557, 0.069205, 0.295841",\ + "-0.199804, -0.141906, -0.036659, -0.018006, 0.208689",\ + "-0.297115, -0.239335, -0.132721, -0.114053, 0.112815",\ + "-0.473050, -0.415309, -0.306338, -0.287512, -0.058720",\ + "-0.771971, -0.713924, -0.601352, -0.581984, -0.346599"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.126284, -0.091801, -0.026053, 0.006825, 0.406380",\ + "-0.209910, -0.175609, -0.109372, -0.076372, 0.324685",\ + "-0.312970, -0.278942, -0.212075, -0.178671, 0.227297",\ + "-0.483276, -0.448963, -0.383263, -0.349244, 0.064176",\ + "-0.764074, -0.729205, -0.665784, -0.630568, -0.202592"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[39]_hldr*/ + +} /* end of pin alert_rsp_i[39] */ + +pin("alert_rsp_i[38]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000589 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[38]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.192162, 0.131067, 0.025934, 0.046895, 0.301630",\ + "0.279200, 0.218116, 0.112785, 0.133940, 0.391038",\ + "0.372216, 0.311153, 0.205428, 0.226969, 0.488754",\ + "0.526955, 0.465449, 0.358834, 0.380180, 0.639596",\ + "0.781727, 0.719289, 0.610887, 0.631753, 0.885337"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.203639, 0.167601, 0.112469, 0.112646, 0.114806",\ + "0.292883, 0.256848, 0.201897, 0.202061, 0.204057",\ + "0.398578, 0.362549, 0.308291, 0.308405, 0.309779",\ + "0.587975, 0.552224, 0.497936, 0.498030, 0.499172",\ + "0.915076, 0.879998, 0.824973, 0.825069, 0.826237"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[38]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.104592, -0.046636, 0.057935, 0.076581, 0.303191",\ + "-0.191631, -0.133768, -0.028107, -0.009449, 0.217299",\ + "-0.284646, -0.226970, -0.119146, -0.100465, 0.126557",\ + "-0.438866, -0.381023, -0.270840, -0.251831, -0.020821",\ + "-0.692552, -0.634323, -0.519612, -0.499921, -0.260619"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.115174, -0.080527, -0.015220, 0.017546, 0.415745",\ + "-0.204335, -0.169799, -0.104194, -0.071353, 0.327762",\ + "-0.309715, -0.275599, -0.208862, -0.175734, 0.226866",\ + "-0.496251, -0.462141, -0.395611, -0.362029, 0.046093",\ + "-0.816650, -0.782151, -0.717215, -0.682795, -0.264493"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[38]_hldr*/ + +} /* end of pin alert_rsp_i[38] */ + +pin("alert_rsp_i[37]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000591 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[37]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.199726, 0.138633, 0.033463, 0.054461, 0.309637",\ + "0.287373, 0.226285, 0.121029, 0.142110, 0.398309",\ + "0.384684, 0.323610, 0.218105, 0.239430, 0.498591",\ + "0.560847, 0.499591, 0.393454, 0.414928, 0.675905",\ + "0.860633, 0.798634, 0.691077, 0.712170, 0.968509"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.214871, 0.178837, 0.123974, 0.124132, 0.126049",\ + "0.298634, 0.262602, 0.208037, 0.208173, 0.209823",\ + "0.403277, 0.367383, 0.313251, 0.313345, 0.314481",\ + "0.578488, 0.543087, 0.488416, 0.488511, 0.489666",\ + "0.868870, 0.834430, 0.778706, 0.778804, 0.779997"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[37]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.112157, -0.054218, 0.050557, 0.069205, 0.295841",\ + "-0.199804, -0.141906, -0.036659, -0.018006, 0.208689",\ + "-0.297115, -0.239335, -0.132721, -0.114053, 0.112815",\ + "-0.473050, -0.415309, -0.306338, -0.287512, -0.058720",\ + "-0.771971, -0.713924, -0.601352, -0.581984, -0.346599"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.126284, -0.091801, -0.026053, 0.006825, 0.406380",\ + "-0.209910, -0.175609, -0.109372, -0.076372, 0.324685",\ + "-0.312970, -0.278942, -0.212075, -0.178671, 0.227297",\ + "-0.483276, -0.448963, -0.383263, -0.349244, 0.064176",\ + "-0.764074, -0.729205, -0.665784, -0.630568, -0.202592"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[37]_hldr*/ + +} /* end of pin alert_rsp_i[37] */ + +pin("alert_rsp_i[36]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000589 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[36]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.192162, 0.131067, 0.025934, 0.046895, 0.301630",\ + "0.279200, 0.218116, 0.112785, 0.133940, 0.391038",\ + "0.372216, 0.311153, 0.205428, 0.226969, 0.488754",\ + "0.526955, 0.465449, 0.358834, 0.380180, 0.639596",\ + "0.781727, 0.719289, 0.610887, 0.631753, 0.885337"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.203639, 0.167601, 0.112469, 0.112646, 0.114806",\ + "0.292883, 0.256848, 0.201897, 0.202061, 0.204057",\ + "0.398578, 0.362549, 0.308291, 0.308405, 0.309779",\ + "0.587975, 0.552224, 0.497936, 0.498030, 0.499172",\ + "0.915076, 0.879998, 0.824973, 0.825069, 0.826237"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[36]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.104592, -0.046636, 0.057935, 0.076581, 0.303191",\ + "-0.191631, -0.133768, -0.028107, -0.009449, 0.217299",\ + "-0.284646, -0.226970, -0.119146, -0.100465, 0.126557",\ + "-0.438866, -0.381023, -0.270840, -0.251831, -0.020821",\ + "-0.692552, -0.634323, -0.519612, -0.499921, -0.260619"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.115174, -0.080527, -0.015220, 0.017546, 0.415745",\ + "-0.204335, -0.169799, -0.104194, -0.071353, 0.327762",\ + "-0.309715, -0.275599, -0.208862, -0.175734, 0.226866",\ + "-0.496251, -0.462141, -0.395611, -0.362029, 0.046093",\ + "-0.816650, -0.782151, -0.717215, -0.682795, -0.264493"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[36]_hldr*/ + +} /* end of pin alert_rsp_i[36] */ + +pin("alert_rsp_i[35]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000591 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[35]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.199726, 0.138633, 0.033463, 0.054461, 0.309637",\ + "0.287373, 0.226285, 0.121029, 0.142110, 0.398309",\ + "0.384684, 0.323610, 0.218105, 0.239430, 0.498591",\ + "0.560847, 0.499591, 0.393454, 0.414928, 0.675905",\ + "0.860633, 0.798634, 0.691077, 0.712170, 0.968509"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.214871, 0.178837, 0.123974, 0.124132, 0.126049",\ + "0.298634, 0.262602, 0.208037, 0.208173, 0.209823",\ + "0.403277, 0.367383, 0.313251, 0.313345, 0.314481",\ + "0.578488, 0.543087, 0.488416, 0.488511, 0.489666",\ + "0.868870, 0.834430, 0.778706, 0.778804, 0.779997"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[35]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.112157, -0.054218, 0.050557, 0.069205, 0.295841",\ + "-0.199804, -0.141906, -0.036659, -0.018006, 0.208689",\ + "-0.297115, -0.239335, -0.132721, -0.114053, 0.112815",\ + "-0.473050, -0.415309, -0.306338, -0.287512, -0.058720",\ + "-0.771971, -0.713924, -0.601352, -0.581984, -0.346599"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.126284, -0.091801, -0.026053, 0.006825, 0.406380",\ + "-0.209910, -0.175609, -0.109372, -0.076372, 0.324685",\ + "-0.312970, -0.278942, -0.212075, -0.178671, 0.227297",\ + "-0.483276, -0.448963, -0.383263, -0.349244, 0.064176",\ + "-0.764074, -0.729205, -0.665784, -0.630568, -0.202592"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[35]_hldr*/ + +} /* end of pin alert_rsp_i[35] */ + +pin("alert_rsp_i[34]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000589 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[34]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.192162, 0.131067, 0.025934, 0.046895, 0.301630",\ + "0.279200, 0.218116, 0.112785, 0.133940, 0.391038",\ + "0.372216, 0.311153, 0.205428, 0.226969, 0.488754",\ + "0.526955, 0.465449, 0.358834, 0.380180, 0.639596",\ + "0.781727, 0.719289, 0.610887, 0.631753, 0.885337"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.203639, 0.167601, 0.112469, 0.112646, 0.114806",\ + "0.292883, 0.256848, 0.201897, 0.202061, 0.204057",\ + "0.398578, 0.362549, 0.308291, 0.308405, 0.309779",\ + "0.587975, 0.552224, 0.497936, 0.498030, 0.499172",\ + "0.915076, 0.879998, 0.824973, 0.825069, 0.826237"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[34]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.104592, -0.046636, 0.057935, 0.076581, 0.303191",\ + "-0.191631, -0.133768, -0.028107, -0.009449, 0.217299",\ + "-0.284646, -0.226970, -0.119146, -0.100465, 0.126557",\ + "-0.438866, -0.381023, -0.270840, -0.251831, -0.020821",\ + "-0.692552, -0.634323, -0.519612, -0.499921, -0.260619"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.115174, -0.080527, -0.015220, 0.017546, 0.415745",\ + "-0.204335, -0.169799, -0.104194, -0.071353, 0.327762",\ + "-0.309715, -0.275599, -0.208862, -0.175734, 0.226866",\ + "-0.496251, -0.462141, -0.395611, -0.362029, 0.046093",\ + "-0.816650, -0.782151, -0.717215, -0.682795, -0.264493"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[34]_hldr*/ + +} /* end of pin alert_rsp_i[34] */ + +pin("alert_rsp_i[33]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000591 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[33]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.199726, 0.138633, 0.033463, 0.054461, 0.309637",\ + "0.287373, 0.226285, 0.121029, 0.142110, 0.398309",\ + "0.384684, 0.323610, 0.218105, 0.239430, 0.498591",\ + "0.560847, 0.499591, 0.393454, 0.414928, 0.675905",\ + "0.860633, 0.798634, 0.691077, 0.712170, 0.968509"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.214871, 0.178837, 0.123974, 0.124132, 0.126049",\ + "0.298634, 0.262602, 0.208037, 0.208173, 0.209823",\ + "0.403277, 0.367383, 0.313251, 0.313345, 0.314481",\ + "0.578488, 0.543087, 0.488416, 0.488511, 0.489666",\ + "0.868870, 0.834430, 0.778706, 0.778804, 0.779997"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[33]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.112157, -0.054218, 0.050557, 0.069205, 0.295841",\ + "-0.199804, -0.141906, -0.036659, -0.018006, 0.208689",\ + "-0.297115, -0.239335, -0.132721, -0.114053, 0.112815",\ + "-0.473050, -0.415309, -0.306338, -0.287512, -0.058720",\ + "-0.771971, -0.713924, -0.601352, -0.581984, -0.346599"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.126284, -0.091801, -0.026053, 0.006825, 0.406380",\ + "-0.209910, -0.175609, -0.109372, -0.076372, 0.324685",\ + "-0.312970, -0.278942, -0.212075, -0.178671, 0.227297",\ + "-0.483276, -0.448963, -0.383263, -0.349244, 0.064176",\ + "-0.764074, -0.729205, -0.665784, -0.630568, -0.202592"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[33]_hldr*/ + +} /* end of pin alert_rsp_i[33] */ + +pin("alert_rsp_i[32]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000589 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[32]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.192162, 0.131067, 0.025934, 0.046895, 0.301630",\ + "0.279200, 0.218116, 0.112785, 0.133940, 0.391038",\ + "0.372216, 0.311153, 0.205428, 0.226969, 0.488754",\ + "0.526955, 0.465449, 0.358834, 0.380180, 0.639596",\ + "0.781727, 0.719289, 0.610887, 0.631753, 0.885337"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.203639, 0.167601, 0.112469, 0.112646, 0.114806",\ + "0.292883, 0.256848, 0.201897, 0.202061, 0.204057",\ + "0.398578, 0.362549, 0.308291, 0.308405, 0.309779",\ + "0.587975, 0.552224, 0.497936, 0.498030, 0.499172",\ + "0.915076, 0.879998, 0.824973, 0.825069, 0.826237"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[32]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.104592, -0.046636, 0.057935, 0.076581, 0.303191",\ + "-0.191631, -0.133768, -0.028107, -0.009449, 0.217299",\ + "-0.284646, -0.226970, -0.119146, -0.100465, 0.126557",\ + "-0.438866, -0.381023, -0.270840, -0.251831, -0.020821",\ + "-0.692552, -0.634323, -0.519612, -0.499921, -0.260619"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.115174, -0.080527, -0.015220, 0.017546, 0.415745",\ + "-0.204335, -0.169799, -0.104194, -0.071353, 0.327762",\ + "-0.309715, -0.275599, -0.208862, -0.175734, 0.226866",\ + "-0.496251, -0.462141, -0.395611, -0.362029, 0.046093",\ + "-0.816650, -0.782151, -0.717215, -0.682795, -0.264493"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[32]_hldr*/ + +} /* end of pin alert_rsp_i[32] */ + +pin("alert_rsp_i[31]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000591 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[31]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.199726, 0.138633, 0.033463, 0.054461, 0.309637",\ + "0.287373, 0.226285, 0.121029, 0.142110, 0.398309",\ + "0.384684, 0.323610, 0.218105, 0.239430, 0.498591",\ + "0.560847, 0.499591, 0.393454, 0.414928, 0.675905",\ + "0.860633, 0.798634, 0.691077, 0.712170, 0.968509"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.214871, 0.178837, 0.123974, 0.124132, 0.126049",\ + "0.298634, 0.262602, 0.208037, 0.208173, 0.209823",\ + "0.403277, 0.367383, 0.313251, 0.313345, 0.314481",\ + "0.578488, 0.543087, 0.488416, 0.488511, 0.489666",\ + "0.868870, 0.834430, 0.778706, 0.778804, 0.779997"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[31]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.112157, -0.054218, 0.050557, 0.069205, 0.295841",\ + "-0.199804, -0.141906, -0.036659, -0.018006, 0.208689",\ + "-0.297115, -0.239335, -0.132721, -0.114053, 0.112815",\ + "-0.473050, -0.415309, -0.306338, -0.287512, -0.058720",\ + "-0.771971, -0.713924, -0.601352, -0.581984, -0.346599"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.126284, -0.091801, -0.026053, 0.006825, 0.406380",\ + "-0.209910, -0.175609, -0.109372, -0.076372, 0.324685",\ + "-0.312970, -0.278942, -0.212075, -0.178671, 0.227297",\ + "-0.483276, -0.448963, -0.383263, -0.349244, 0.064176",\ + "-0.764074, -0.729205, -0.665784, -0.630568, -0.202592"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[31]_hldr*/ + +} /* end of pin alert_rsp_i[31] */ + +pin("alert_rsp_i[30]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000589 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[30]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.192162, 0.131067, 0.025934, 0.046895, 0.301630",\ + "0.279200, 0.218116, 0.112785, 0.133940, 0.391038",\ + "0.372216, 0.311153, 0.205428, 0.226969, 0.488754",\ + "0.526955, 0.465449, 0.358834, 0.380180, 0.639596",\ + "0.781727, 0.719289, 0.610887, 0.631753, 0.885337"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.203639, 0.167601, 0.112469, 0.112646, 0.114806",\ + "0.292883, 0.256848, 0.201897, 0.202061, 0.204057",\ + "0.398578, 0.362549, 0.308291, 0.308405, 0.309779",\ + "0.587975, 0.552224, 0.497936, 0.498030, 0.499172",\ + "0.915076, 0.879998, 0.824973, 0.825069, 0.826237"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[30]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.104592, -0.046636, 0.057935, 0.076581, 0.303191",\ + "-0.191631, -0.133768, -0.028107, -0.009449, 0.217299",\ + "-0.284646, -0.226970, -0.119146, -0.100465, 0.126557",\ + "-0.438866, -0.381023, -0.270840, -0.251831, -0.020821",\ + "-0.692552, -0.634323, -0.519612, -0.499921, -0.260619"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.115174, -0.080527, -0.015220, 0.017546, 0.415745",\ + "-0.204335, -0.169799, -0.104194, -0.071353, 0.327762",\ + "-0.309715, -0.275599, -0.208862, -0.175734, 0.226866",\ + "-0.496251, -0.462141, -0.395611, -0.362029, 0.046093",\ + "-0.816650, -0.782151, -0.717215, -0.682795, -0.264493"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[30]_hldr*/ + +} /* end of pin alert_rsp_i[30] */ + +pin("alert_rsp_i[29]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000591 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[29]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.199726, 0.138633, 0.033463, 0.054461, 0.309637",\ + "0.287373, 0.226285, 0.121029, 0.142110, 0.398309",\ + "0.384684, 0.323610, 0.218105, 0.239430, 0.498591",\ + "0.560847, 0.499591, 0.393454, 0.414928, 0.675905",\ + "0.860633, 0.798634, 0.691077, 0.712170, 0.968509"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.214871, 0.178837, 0.123974, 0.124132, 0.126049",\ + "0.298634, 0.262602, 0.208037, 0.208173, 0.209823",\ + "0.403277, 0.367383, 0.313251, 0.313345, 0.314481",\ + "0.578488, 0.543087, 0.488416, 0.488511, 0.489666",\ + "0.868870, 0.834430, 0.778706, 0.778804, 0.779997"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[29]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.112157, -0.054218, 0.050557, 0.069205, 0.295841",\ + "-0.199804, -0.141906, -0.036659, -0.018006, 0.208689",\ + "-0.297115, -0.239335, -0.132721, -0.114053, 0.112815",\ + "-0.473050, -0.415309, -0.306338, -0.287512, -0.058720",\ + "-0.771971, -0.713924, -0.601352, -0.581984, -0.346599"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.126284, -0.091801, -0.026053, 0.006825, 0.406380",\ + "-0.209910, -0.175609, -0.109372, -0.076372, 0.324685",\ + "-0.312970, -0.278942, -0.212075, -0.178671, 0.227297",\ + "-0.483276, -0.448963, -0.383263, -0.349244, 0.064176",\ + "-0.764074, -0.729205, -0.665784, -0.630568, -0.202592"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[29]_hldr*/ + +} /* end of pin alert_rsp_i[29] */ + +pin("alert_rsp_i[28]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000589 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[28]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.192162, 0.131067, 0.025934, 0.046895, 0.301630",\ + "0.279200, 0.218116, 0.112785, 0.133940, 0.391038",\ + "0.372216, 0.311153, 0.205428, 0.226969, 0.488754",\ + "0.526955, 0.465449, 0.358834, 0.380180, 0.639596",\ + "0.781727, 0.719289, 0.610887, 0.631753, 0.885337"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.203639, 0.167601, 0.112469, 0.112646, 0.114806",\ + "0.292883, 0.256848, 0.201897, 0.202061, 0.204057",\ + "0.398578, 0.362549, 0.308291, 0.308405, 0.309779",\ + "0.587975, 0.552224, 0.497936, 0.498030, 0.499172",\ + "0.915076, 0.879998, 0.824973, 0.825069, 0.826237"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[28]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.104592, -0.046636, 0.057935, 0.076581, 0.303191",\ + "-0.191631, -0.133768, -0.028107, -0.009449, 0.217299",\ + "-0.284646, -0.226970, -0.119146, -0.100465, 0.126557",\ + "-0.438866, -0.381023, -0.270840, -0.251831, -0.020821",\ + "-0.692552, -0.634323, -0.519612, -0.499921, -0.260619"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.115174, -0.080527, -0.015220, 0.017546, 0.415745",\ + "-0.204335, -0.169799, -0.104194, -0.071353, 0.327762",\ + "-0.309715, -0.275599, -0.208862, -0.175734, 0.226866",\ + "-0.496251, -0.462141, -0.395611, -0.362029, 0.046093",\ + "-0.816650, -0.782151, -0.717215, -0.682795, -0.264493"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[28]_hldr*/ + +} /* end of pin alert_rsp_i[28] */ + +pin("alert_rsp_i[27]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000591 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[27]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.199726, 0.138633, 0.033463, 0.054461, 0.309637",\ + "0.287373, 0.226285, 0.121029, 0.142110, 0.398309",\ + "0.384684, 0.323610, 0.218105, 0.239430, 0.498591",\ + "0.560847, 0.499591, 0.393454, 0.414928, 0.675905",\ + "0.860633, 0.798634, 0.691077, 0.712170, 0.968509"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.214871, 0.178837, 0.123974, 0.124132, 0.126049",\ + "0.298634, 0.262602, 0.208037, 0.208173, 0.209823",\ + "0.403277, 0.367383, 0.313251, 0.313345, 0.314481",\ + "0.578488, 0.543087, 0.488416, 0.488511, 0.489666",\ + "0.868870, 0.834430, 0.778706, 0.778804, 0.779997"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[27]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.112157, -0.054218, 0.050557, 0.069205, 0.295841",\ + "-0.199804, -0.141906, -0.036659, -0.018006, 0.208689",\ + "-0.297115, -0.239335, -0.132721, -0.114053, 0.112815",\ + "-0.473050, -0.415309, -0.306338, -0.287512, -0.058720",\ + "-0.771971, -0.713924, -0.601352, -0.581984, -0.346599"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.126284, -0.091801, -0.026053, 0.006825, 0.406380",\ + "-0.209910, -0.175609, -0.109372, -0.076372, 0.324685",\ + "-0.312970, -0.278942, -0.212075, -0.178671, 0.227297",\ + "-0.483276, -0.448963, -0.383263, -0.349244, 0.064176",\ + "-0.764074, -0.729205, -0.665784, -0.630568, -0.202592"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[27]_hldr*/ + +} /* end of pin alert_rsp_i[27] */ + +pin("alert_rsp_i[26]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000589 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[26]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.192162, 0.131067, 0.025934, 0.046895, 0.301630",\ + "0.279200, 0.218116, 0.112785, 0.133940, 0.391038",\ + "0.372216, 0.311153, 0.205428, 0.226969, 0.488754",\ + "0.526955, 0.465449, 0.358834, 0.380180, 0.639596",\ + "0.781727, 0.719289, 0.610887, 0.631753, 0.885337"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.203639, 0.167601, 0.112469, 0.112646, 0.114806",\ + "0.292883, 0.256848, 0.201897, 0.202061, 0.204057",\ + "0.398578, 0.362549, 0.308291, 0.308405, 0.309779",\ + "0.587975, 0.552224, 0.497936, 0.498030, 0.499172",\ + "0.915076, 0.879998, 0.824973, 0.825069, 0.826237"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[26]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.104592, -0.046636, 0.057935, 0.076581, 0.303191",\ + "-0.191631, -0.133768, -0.028107, -0.009449, 0.217299",\ + "-0.284646, -0.226970, -0.119146, -0.100465, 0.126557",\ + "-0.438866, -0.381023, -0.270840, -0.251831, -0.020821",\ + "-0.692552, -0.634323, -0.519612, -0.499921, -0.260619"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.115174, -0.080527, -0.015220, 0.017546, 0.415745",\ + "-0.204335, -0.169799, -0.104194, -0.071353, 0.327762",\ + "-0.309715, -0.275599, -0.208862, -0.175734, 0.226866",\ + "-0.496251, -0.462141, -0.395611, -0.362029, 0.046093",\ + "-0.816650, -0.782151, -0.717215, -0.682795, -0.264493"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[26]_hldr*/ + +} /* end of pin alert_rsp_i[26] */ + +pin("alert_rsp_i[25]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000448 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[25]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.185938, 0.149895, 0.094200, 0.094419, 0.097084",\ + "0.272325, 0.236283, 0.180640, 0.180856, 0.183473",\ + "0.358907, 0.322867, 0.267423, 0.267624, 0.270063",\ + "0.517339, 0.481305, 0.426450, 0.426607, 0.428517",\ + "0.782742, 0.746824, 0.692719, 0.692812, 0.693947"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.247782, 0.186691, 0.081487, 0.102517, 0.358097",\ + "0.337069, 0.275978, 0.170775, 0.191805, 0.447385",\ + "0.437523, 0.376437, 0.271157, 0.292262, 0.548747",\ + "0.618326, 0.557252, 0.451732, 0.473072, 0.732422",\ + "0.922412, 0.861156, 0.755022, 0.776496, 1.037479"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[25]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.097073, -0.062070, 0.002277, 0.034799, 0.430045",\ + "-0.183156, -0.148183, -0.083758, -0.051216, 0.344267",\ + "-0.269694, -0.234839, -0.170093, -0.137470, 0.259003",\ + "-0.427321, -0.392813, -0.327135, -0.294275, 0.105065",\ + "-0.690363, -0.656367, -0.589370, -0.556034, -0.150898"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.143047, -0.085078, 0.019349, 0.037994, 0.264586",\ + "-0.232868, -0.174900, -0.070472, -0.051827, 0.174765",\ + "-0.335734, -0.277819, -0.172775, -0.154124, 0.072546",\ + "-0.517254, -0.459461, -0.352995, -0.334328, -0.107479",\ + "-0.818219, -0.760494, -0.651701, -0.632901, -0.404435"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[25]_hldr*/ + +} /* end of pin alert_rsp_i[25] */ + +pin("alert_rsp_i[24]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000500 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[24]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.220674, 0.184637, 0.129589, 0.129760, 0.131844",\ + "0.297060, 0.261023, 0.205975, 0.206146, 0.208230",\ + "0.368632, 0.332596, 0.277611, 0.277778, 0.279805",\ + "0.497931, 0.461898, 0.407219, 0.407363, 0.409115",\ + "0.712779, 0.676837, 0.622759, 0.622852, 0.623986"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.209550, 0.148448, 0.043450, 0.064279, 0.317417",\ + "0.301584, 0.240483, 0.135457, 0.156314, 0.409784",\ + "0.402135, 0.341040, 0.235908, 0.256868, 0.511598",\ + "0.580476, 0.519395, 0.414005, 0.435218, 0.693015",\ + "0.877762, 0.816594, 0.710628, 0.732149, 0.993683"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[24]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.105222, -0.070365, -0.005626, 0.026996, 0.423447",\ + "-0.183185, -0.148328, -0.083588, -0.050966, 0.345485",\ + "-0.257972, -0.223201, -0.158231, -0.125551, 0.271609",\ + "-0.390468, -0.355966, -0.290271, -0.257407, 0.141987",\ + "-0.603765, -0.569785, -0.502723, -0.469420, -0.064694"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.121294, -0.063271, 0.040519, 0.059158, 0.285669",\ + "-0.213390, -0.155380, -0.051441, -0.032801, 0.193729",\ + "-0.313842, -0.255881, -0.151371, -0.132725, 0.093876",\ + "-0.490960, -0.433113, -0.327285, -0.308625, -0.081856",\ + "-0.786249, -0.728564, -0.620239, -0.601510, -0.373902"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[24]_hldr*/ + +} /* end of pin alert_rsp_i[24] */ + +pin("alert_rsp_i[23]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000448 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[23]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.185938, 0.149895, 0.094200, 0.094419, 0.097084",\ + "0.272325, 0.236283, 0.180640, 0.180856, 0.183473",\ + "0.358907, 0.322867, 0.267423, 0.267624, 0.270063",\ + "0.517339, 0.481305, 0.426450, 0.426607, 0.428517",\ + "0.782742, 0.746824, 0.692719, 0.692812, 0.693947"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.247782, 0.186691, 0.081487, 0.102517, 0.358097",\ + "0.337069, 0.275978, 0.170775, 0.191805, 0.447385",\ + "0.437523, 0.376437, 0.271157, 0.292262, 0.548747",\ + "0.618326, 0.557252, 0.451732, 0.473072, 0.732422",\ + "0.922412, 0.861156, 0.755022, 0.776496, 1.037479"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[23]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.097073, -0.062070, 0.002277, 0.034799, 0.430045",\ + "-0.183156, -0.148183, -0.083758, -0.051216, 0.344267",\ + "-0.269694, -0.234839, -0.170093, -0.137470, 0.259003",\ + "-0.427321, -0.392813, -0.327135, -0.294275, 0.105065",\ + "-0.690363, -0.656367, -0.589370, -0.556034, -0.150898"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.143047, -0.085078, 0.019349, 0.037994, 0.264586",\ + "-0.232868, -0.174900, -0.070472, -0.051827, 0.174765",\ + "-0.335734, -0.277819, -0.172775, -0.154124, 0.072546",\ + "-0.517254, -0.459461, -0.352995, -0.334328, -0.107479",\ + "-0.818219, -0.760494, -0.651701, -0.632901, -0.404435"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[23]_hldr*/ + +} /* end of pin alert_rsp_i[23] */ + +pin("alert_rsp_i[22]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000500 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[22]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.220674, 0.184637, 0.129589, 0.129760, 0.131844",\ + "0.297060, 0.261023, 0.205975, 0.206146, 0.208230",\ + "0.368632, 0.332596, 0.277611, 0.277778, 0.279805",\ + "0.497931, 0.461898, 0.407219, 0.407363, 0.409115",\ + "0.712779, 0.676837, 0.622759, 0.622852, 0.623986"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.209550, 0.148448, 0.043450, 0.064279, 0.317417",\ + "0.301584, 0.240483, 0.135457, 0.156314, 0.409784",\ + "0.402135, 0.341040, 0.235908, 0.256868, 0.511598",\ + "0.580476, 0.519395, 0.414005, 0.435218, 0.693015",\ + "0.877762, 0.816594, 0.710628, 0.732149, 0.993683"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[22]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.105222, -0.070365, -0.005626, 0.026996, 0.423447",\ + "-0.183185, -0.148328, -0.083588, -0.050966, 0.345485",\ + "-0.257972, -0.223201, -0.158231, -0.125551, 0.271609",\ + "-0.390468, -0.355966, -0.290271, -0.257407, 0.141987",\ + "-0.603765, -0.569785, -0.502723, -0.469420, -0.064694"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.121294, -0.063271, 0.040519, 0.059158, 0.285669",\ + "-0.213390, -0.155380, -0.051441, -0.032801, 0.193729",\ + "-0.313842, -0.255881, -0.151371, -0.132725, 0.093876",\ + "-0.490960, -0.433113, -0.327285, -0.308625, -0.081856",\ + "-0.786249, -0.728564, -0.620239, -0.601510, -0.373902"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[22]_hldr*/ + +} /* end of pin alert_rsp_i[22] */ + +pin("alert_rsp_i[21]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000448 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[21]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.185938, 0.149895, 0.094200, 0.094419, 0.097084",\ + "0.272325, 0.236283, 0.180640, 0.180856, 0.183473",\ + "0.358907, 0.322867, 0.267423, 0.267624, 0.270063",\ + "0.517339, 0.481305, 0.426450, 0.426607, 0.428517",\ + "0.782742, 0.746824, 0.692719, 0.692812, 0.693947"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.247782, 0.186691, 0.081487, 0.102517, 0.358097",\ + "0.337069, 0.275978, 0.170775, 0.191805, 0.447385",\ + "0.437523, 0.376437, 0.271157, 0.292262, 0.548747",\ + "0.618326, 0.557252, 0.451732, 0.473072, 0.732422",\ + "0.922412, 0.861156, 0.755022, 0.776496, 1.037479"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[21]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.097073, -0.062070, 0.002277, 0.034799, 0.430045",\ + "-0.183156, -0.148183, -0.083758, -0.051216, 0.344267",\ + "-0.269694, -0.234839, -0.170093, -0.137470, 0.259003",\ + "-0.427321, -0.392813, -0.327135, -0.294275, 0.105065",\ + "-0.690363, -0.656367, -0.589370, -0.556034, -0.150898"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.143047, -0.085078, 0.019349, 0.037994, 0.264586",\ + "-0.232868, -0.174900, -0.070472, -0.051827, 0.174765",\ + "-0.335734, -0.277819, -0.172775, -0.154124, 0.072546",\ + "-0.517254, -0.459461, -0.352995, -0.334328, -0.107479",\ + "-0.818219, -0.760494, -0.651701, -0.632901, -0.404435"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[21]_hldr*/ + +} /* end of pin alert_rsp_i[21] */ + +pin("alert_rsp_i[20]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000500 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[20]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.220674, 0.184637, 0.129589, 0.129760, 0.131844",\ + "0.297060, 0.261023, 0.205975, 0.206146, 0.208230",\ + "0.368632, 0.332596, 0.277611, 0.277778, 0.279805",\ + "0.497931, 0.461898, 0.407219, 0.407363, 0.409115",\ + "0.712779, 0.676837, 0.622759, 0.622852, 0.623986"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.209550, 0.148448, 0.043450, 0.064279, 0.317417",\ + "0.301584, 0.240483, 0.135457, 0.156314, 0.409784",\ + "0.402135, 0.341040, 0.235908, 0.256868, 0.511598",\ + "0.580476, 0.519395, 0.414005, 0.435218, 0.693015",\ + "0.877762, 0.816594, 0.710628, 0.732149, 0.993683"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[20]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.105222, -0.070365, -0.005626, 0.026996, 0.423447",\ + "-0.183185, -0.148328, -0.083588, -0.050966, 0.345485",\ + "-0.257972, -0.223201, -0.158231, -0.125551, 0.271609",\ + "-0.390468, -0.355966, -0.290271, -0.257407, 0.141987",\ + "-0.603765, -0.569785, -0.502723, -0.469420, -0.064694"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.121294, -0.063271, 0.040519, 0.059158, 0.285669",\ + "-0.213390, -0.155380, -0.051441, -0.032801, 0.193729",\ + "-0.313842, -0.255881, -0.151371, -0.132725, 0.093876",\ + "-0.490960, -0.433113, -0.327285, -0.308625, -0.081856",\ + "-0.786249, -0.728564, -0.620239, -0.601510, -0.373902"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[20]_hldr*/ + +} /* end of pin alert_rsp_i[20] */ + +pin("alert_rsp_i[19]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000448 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[19]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.185938, 0.149895, 0.094200, 0.094419, 0.097084",\ + "0.272325, 0.236283, 0.180640, 0.180856, 0.183473",\ + "0.358907, 0.322867, 0.267423, 0.267624, 0.270063",\ + "0.517339, 0.481305, 0.426450, 0.426607, 0.428517",\ + "0.782742, 0.746824, 0.692719, 0.692812, 0.693947"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.247782, 0.186691, 0.081487, 0.102517, 0.358097",\ + "0.337069, 0.275978, 0.170775, 0.191805, 0.447385",\ + "0.437523, 0.376437, 0.271157, 0.292262, 0.548747",\ + "0.618326, 0.557252, 0.451732, 0.473072, 0.732422",\ + "0.922412, 0.861156, 0.755022, 0.776496, 1.037479"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[19]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.097073, -0.062070, 0.002277, 0.034799, 0.430045",\ + "-0.183156, -0.148183, -0.083758, -0.051216, 0.344267",\ + "-0.269694, -0.234839, -0.170093, -0.137470, 0.259003",\ + "-0.427321, -0.392813, -0.327135, -0.294275, 0.105065",\ + "-0.690363, -0.656367, -0.589370, -0.556034, -0.150898"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.143047, -0.085078, 0.019349, 0.037994, 0.264586",\ + "-0.232868, -0.174900, -0.070472, -0.051827, 0.174765",\ + "-0.335734, -0.277819, -0.172775, -0.154124, 0.072546",\ + "-0.517254, -0.459461, -0.352995, -0.334328, -0.107479",\ + "-0.818219, -0.760494, -0.651701, -0.632901, -0.404435"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[19]_hldr*/ + +} /* end of pin alert_rsp_i[19] */ + +pin("alert_rsp_i[18]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000500 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[18]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.220674, 0.184637, 0.129589, 0.129760, 0.131844",\ + "0.297060, 0.261023, 0.205975, 0.206146, 0.208230",\ + "0.368632, 0.332596, 0.277611, 0.277778, 0.279805",\ + "0.497931, 0.461898, 0.407219, 0.407363, 0.409115",\ + "0.712779, 0.676837, 0.622759, 0.622852, 0.623986"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.209550, 0.148448, 0.043450, 0.064279, 0.317417",\ + "0.301584, 0.240483, 0.135457, 0.156314, 0.409784",\ + "0.402135, 0.341040, 0.235908, 0.256868, 0.511598",\ + "0.580476, 0.519395, 0.414005, 0.435218, 0.693015",\ + "0.877762, 0.816594, 0.710628, 0.732149, 0.993683"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[18]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.105222, -0.070365, -0.005626, 0.026996, 0.423447",\ + "-0.183185, -0.148328, -0.083588, -0.050966, 0.345485",\ + "-0.257972, -0.223201, -0.158231, -0.125551, 0.271609",\ + "-0.390468, -0.355966, -0.290271, -0.257407, 0.141987",\ + "-0.603765, -0.569785, -0.502723, -0.469420, -0.064694"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.121294, -0.063271, 0.040519, 0.059158, 0.285669",\ + "-0.213390, -0.155380, -0.051441, -0.032801, 0.193729",\ + "-0.313842, -0.255881, -0.151371, -0.132725, 0.093876",\ + "-0.490960, -0.433113, -0.327285, -0.308625, -0.081856",\ + "-0.786249, -0.728564, -0.620239, -0.601510, -0.373902"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[18]_hldr*/ + +} /* end of pin alert_rsp_i[18] */ + +pin("alert_rsp_i[17]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000448 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[17]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.185938, 0.149895, 0.094200, 0.094419, 0.097084",\ + "0.272325, 0.236283, 0.180640, 0.180856, 0.183473",\ + "0.358907, 0.322867, 0.267423, 0.267624, 0.270063",\ + "0.517339, 0.481305, 0.426450, 0.426607, 0.428517",\ + "0.782742, 0.746824, 0.692719, 0.692812, 0.693947"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.247782, 0.186691, 0.081487, 0.102517, 0.358097",\ + "0.337069, 0.275978, 0.170775, 0.191805, 0.447385",\ + "0.437523, 0.376437, 0.271157, 0.292262, 0.548747",\ + "0.618326, 0.557252, 0.451732, 0.473072, 0.732422",\ + "0.922412, 0.861156, 0.755022, 0.776496, 1.037479"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[17]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.097073, -0.062070, 0.002277, 0.034799, 0.430045",\ + "-0.183156, -0.148183, -0.083758, -0.051216, 0.344267",\ + "-0.269694, -0.234839, -0.170093, -0.137470, 0.259003",\ + "-0.427321, -0.392813, -0.327135, -0.294275, 0.105065",\ + "-0.690363, -0.656367, -0.589370, -0.556034, -0.150898"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.143047, -0.085078, 0.019349, 0.037994, 0.264586",\ + "-0.232868, -0.174900, -0.070472, -0.051827, 0.174765",\ + "-0.335734, -0.277819, -0.172775, -0.154124, 0.072546",\ + "-0.517254, -0.459461, -0.352995, -0.334328, -0.107479",\ + "-0.818219, -0.760494, -0.651701, -0.632901, -0.404435"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[17]_hldr*/ + +} /* end of pin alert_rsp_i[17] */ + +pin("alert_rsp_i[16]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000500 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[16]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.220674, 0.184637, 0.129589, 0.129760, 0.131844",\ + "0.297060, 0.261023, 0.205975, 0.206146, 0.208230",\ + "0.368632, 0.332596, 0.277611, 0.277778, 0.279805",\ + "0.497931, 0.461898, 0.407219, 0.407363, 0.409115",\ + "0.712779, 0.676837, 0.622759, 0.622852, 0.623986"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.209550, 0.148448, 0.043450, 0.064279, 0.317417",\ + "0.301584, 0.240483, 0.135457, 0.156314, 0.409784",\ + "0.402135, 0.341040, 0.235908, 0.256868, 0.511598",\ + "0.580476, 0.519395, 0.414005, 0.435218, 0.693015",\ + "0.877762, 0.816594, 0.710628, 0.732149, 0.993683"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[16]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.105222, -0.070365, -0.005626, 0.026996, 0.423447",\ + "-0.183185, -0.148328, -0.083588, -0.050966, 0.345485",\ + "-0.257972, -0.223201, -0.158231, -0.125551, 0.271609",\ + "-0.390468, -0.355966, -0.290271, -0.257407, 0.141987",\ + "-0.603765, -0.569785, -0.502723, -0.469420, -0.064694"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.121294, -0.063271, 0.040519, 0.059158, 0.285669",\ + "-0.213390, -0.155380, -0.051441, -0.032801, 0.193729",\ + "-0.313842, -0.255881, -0.151371, -0.132725, 0.093876",\ + "-0.490960, -0.433113, -0.327285, -0.308625, -0.081856",\ + "-0.786249, -0.728564, -0.620239, -0.601510, -0.373902"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[16]_hldr*/ + +} /* end of pin alert_rsp_i[16] */ + +pin("alert_rsp_i[15]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000448 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[15]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.185938, 0.149895, 0.094200, 0.094419, 0.097084",\ + "0.272325, 0.236283, 0.180640, 0.180856, 0.183473",\ + "0.358907, 0.322867, 0.267423, 0.267624, 0.270063",\ + "0.517339, 0.481305, 0.426450, 0.426607, 0.428517",\ + "0.782742, 0.746824, 0.692719, 0.692812, 0.693947"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.247782, 0.186691, 0.081487, 0.102517, 0.358097",\ + "0.337069, 0.275978, 0.170775, 0.191805, 0.447385",\ + "0.437523, 0.376437, 0.271157, 0.292262, 0.548747",\ + "0.618326, 0.557252, 0.451732, 0.473072, 0.732422",\ + "0.922412, 0.861156, 0.755022, 0.776496, 1.037479"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[15]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.097073, -0.062070, 0.002277, 0.034799, 0.430045",\ + "-0.183156, -0.148183, -0.083758, -0.051216, 0.344267",\ + "-0.269694, -0.234839, -0.170093, -0.137470, 0.259003",\ + "-0.427321, -0.392813, -0.327135, -0.294275, 0.105065",\ + "-0.690363, -0.656367, -0.589370, -0.556034, -0.150898"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.143047, -0.085078, 0.019349, 0.037994, 0.264586",\ + "-0.232868, -0.174900, -0.070472, -0.051827, 0.174765",\ + "-0.335734, -0.277819, -0.172775, -0.154124, 0.072546",\ + "-0.517254, -0.459461, -0.352995, -0.334328, -0.107479",\ + "-0.818219, -0.760494, -0.651701, -0.632901, -0.404435"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[15]_hldr*/ + +} /* end of pin alert_rsp_i[15] */ + +pin("alert_rsp_i[14]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000500 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[14]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.220674, 0.184637, 0.129589, 0.129760, 0.131844",\ + "0.297060, 0.261023, 0.205975, 0.206146, 0.208230",\ + "0.368632, 0.332596, 0.277611, 0.277778, 0.279805",\ + "0.497931, 0.461898, 0.407219, 0.407363, 0.409115",\ + "0.712779, 0.676837, 0.622759, 0.622852, 0.623986"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.209550, 0.148448, 0.043450, 0.064279, 0.317417",\ + "0.301584, 0.240483, 0.135457, 0.156314, 0.409784",\ + "0.402135, 0.341040, 0.235908, 0.256868, 0.511598",\ + "0.580476, 0.519395, 0.414005, 0.435218, 0.693015",\ + "0.877762, 0.816594, 0.710628, 0.732149, 0.993683"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[14]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.105222, -0.070365, -0.005626, 0.026996, 0.423447",\ + "-0.183185, -0.148328, -0.083588, -0.050966, 0.345485",\ + "-0.257972, -0.223201, -0.158231, -0.125551, 0.271609",\ + "-0.390468, -0.355966, -0.290271, -0.257407, 0.141987",\ + "-0.603765, -0.569785, -0.502723, -0.469420, -0.064694"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.121294, -0.063271, 0.040519, 0.059158, 0.285669",\ + "-0.213390, -0.155380, -0.051441, -0.032801, 0.193729",\ + "-0.313842, -0.255881, -0.151371, -0.132725, 0.093876",\ + "-0.490960, -0.433113, -0.327285, -0.308625, -0.081856",\ + "-0.786249, -0.728564, -0.620239, -0.601510, -0.373902"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[14]_hldr*/ + +} /* end of pin alert_rsp_i[14] */ + +pin("alert_rsp_i[13]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000448 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[13]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.185938, 0.149895, 0.094200, 0.094419, 0.097084",\ + "0.272325, 0.236283, 0.180640, 0.180856, 0.183473",\ + "0.358907, 0.322867, 0.267423, 0.267624, 0.270063",\ + "0.517339, 0.481305, 0.426450, 0.426607, 0.428517",\ + "0.782742, 0.746824, 0.692719, 0.692812, 0.693947"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.247782, 0.186691, 0.081487, 0.102517, 0.358097",\ + "0.337069, 0.275978, 0.170775, 0.191805, 0.447385",\ + "0.437523, 0.376437, 0.271157, 0.292262, 0.548747",\ + "0.618326, 0.557252, 0.451732, 0.473072, 0.732422",\ + "0.922412, 0.861156, 0.755022, 0.776496, 1.037479"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[13]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.097073, -0.062070, 0.002277, 0.034799, 0.430045",\ + "-0.183156, -0.148183, -0.083758, -0.051216, 0.344267",\ + "-0.269694, -0.234839, -0.170093, -0.137470, 0.259003",\ + "-0.427321, -0.392813, -0.327135, -0.294275, 0.105065",\ + "-0.690363, -0.656367, -0.589370, -0.556034, -0.150898"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.143047, -0.085078, 0.019349, 0.037994, 0.264586",\ + "-0.232868, -0.174900, -0.070472, -0.051827, 0.174765",\ + "-0.335734, -0.277819, -0.172775, -0.154124, 0.072546",\ + "-0.517254, -0.459461, -0.352995, -0.334328, -0.107479",\ + "-0.818219, -0.760494, -0.651701, -0.632901, -0.404435"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[13]_hldr*/ + +} /* end of pin alert_rsp_i[13] */ + +pin("alert_rsp_i[12]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000500 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[12]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.220674, 0.184637, 0.129589, 0.129760, 0.131844",\ + "0.297060, 0.261023, 0.205975, 0.206146, 0.208230",\ + "0.368632, 0.332596, 0.277611, 0.277778, 0.279805",\ + "0.497931, 0.461898, 0.407219, 0.407363, 0.409115",\ + "0.712779, 0.676837, 0.622759, 0.622852, 0.623986"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.209550, 0.148448, 0.043450, 0.064279, 0.317417",\ + "0.301584, 0.240483, 0.135457, 0.156314, 0.409784",\ + "0.402135, 0.341040, 0.235908, 0.256868, 0.511598",\ + "0.580476, 0.519395, 0.414005, 0.435218, 0.693015",\ + "0.877762, 0.816594, 0.710628, 0.732149, 0.993683"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[12]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.105222, -0.070365, -0.005626, 0.026996, 0.423447",\ + "-0.183185, -0.148328, -0.083588, -0.050966, 0.345485",\ + "-0.257972, -0.223201, -0.158231, -0.125551, 0.271609",\ + "-0.390468, -0.355966, -0.290271, -0.257407, 0.141987",\ + "-0.603765, -0.569785, -0.502723, -0.469420, -0.064694"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.121294, -0.063271, 0.040519, 0.059158, 0.285669",\ + "-0.213390, -0.155380, -0.051441, -0.032801, 0.193729",\ + "-0.313842, -0.255881, -0.151371, -0.132725, 0.093876",\ + "-0.490960, -0.433113, -0.327285, -0.308625, -0.081856",\ + "-0.786249, -0.728564, -0.620239, -0.601510, -0.373902"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[12]_hldr*/ + +} /* end of pin alert_rsp_i[12] */ + +pin("alert_rsp_i[11]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000448 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[11]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.185938, 0.149895, 0.094200, 0.094419, 0.097084",\ + "0.272325, 0.236283, 0.180640, 0.180856, 0.183473",\ + "0.358907, 0.322867, 0.267423, 0.267624, 0.270063",\ + "0.517339, 0.481305, 0.426450, 0.426607, 0.428517",\ + "0.782742, 0.746824, 0.692719, 0.692812, 0.693947"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.247782, 0.186691, 0.081487, 0.102517, 0.358097",\ + "0.337069, 0.275978, 0.170775, 0.191805, 0.447385",\ + "0.437523, 0.376437, 0.271157, 0.292262, 0.548747",\ + "0.618326, 0.557252, 0.451732, 0.473072, 0.732422",\ + "0.922412, 0.861156, 0.755022, 0.776496, 1.037479"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[11]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.097073, -0.062070, 0.002277, 0.034799, 0.430045",\ + "-0.183156, -0.148183, -0.083758, -0.051216, 0.344267",\ + "-0.269694, -0.234839, -0.170093, -0.137470, 0.259003",\ + "-0.427321, -0.392813, -0.327135, -0.294275, 0.105065",\ + "-0.690363, -0.656367, -0.589370, -0.556034, -0.150898"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.143047, -0.085078, 0.019349, 0.037994, 0.264586",\ + "-0.232868, -0.174900, -0.070472, -0.051827, 0.174765",\ + "-0.335734, -0.277819, -0.172775, -0.154124, 0.072546",\ + "-0.517254, -0.459461, -0.352995, -0.334328, -0.107479",\ + "-0.818219, -0.760494, -0.651701, -0.632901, -0.404435"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[11]_hldr*/ + +} /* end of pin alert_rsp_i[11] */ + +pin("alert_rsp_i[10]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000500 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[10]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.220674, 0.184637, 0.129589, 0.129760, 0.131844",\ + "0.297060, 0.261023, 0.205975, 0.206146, 0.208230",\ + "0.368632, 0.332596, 0.277611, 0.277778, 0.279805",\ + "0.497931, 0.461898, 0.407219, 0.407363, 0.409115",\ + "0.712779, 0.676837, 0.622759, 0.622852, 0.623986"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.209550, 0.148448, 0.043450, 0.064279, 0.317417",\ + "0.301584, 0.240483, 0.135457, 0.156314, 0.409784",\ + "0.402135, 0.341040, 0.235908, 0.256868, 0.511598",\ + "0.580476, 0.519395, 0.414005, 0.435218, 0.693015",\ + "0.877762, 0.816594, 0.710628, 0.732149, 0.993683"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[10]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.105222, -0.070365, -0.005626, 0.026996, 0.423447",\ + "-0.183185, -0.148328, -0.083588, -0.050966, 0.345485",\ + "-0.257972, -0.223201, -0.158231, -0.125551, 0.271609",\ + "-0.390468, -0.355966, -0.290271, -0.257407, 0.141987",\ + "-0.603765, -0.569785, -0.502723, -0.469420, -0.064694"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.121294, -0.063271, 0.040519, 0.059158, 0.285669",\ + "-0.213390, -0.155380, -0.051441, -0.032801, 0.193729",\ + "-0.313842, -0.255881, -0.151371, -0.132725, 0.093876",\ + "-0.490960, -0.433113, -0.327285, -0.308625, -0.081856",\ + "-0.786249, -0.728564, -0.620239, -0.601510, -0.373902"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[10]_hldr*/ + +} /* end of pin alert_rsp_i[10] */ + +pin("alert_rsp_i[9]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000448 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[9]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.185938, 0.149895, 0.094200, 0.094419, 0.097084",\ + "0.272325, 0.236283, 0.180640, 0.180856, 0.183473",\ + "0.358907, 0.322867, 0.267423, 0.267624, 0.270063",\ + "0.517339, 0.481305, 0.426450, 0.426607, 0.428517",\ + "0.782742, 0.746824, 0.692719, 0.692812, 0.693947"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.247782, 0.186691, 0.081487, 0.102517, 0.358097",\ + "0.337069, 0.275978, 0.170775, 0.191805, 0.447385",\ + "0.437523, 0.376437, 0.271157, 0.292262, 0.548747",\ + "0.618326, 0.557252, 0.451732, 0.473072, 0.732422",\ + "0.922412, 0.861156, 0.755022, 0.776496, 1.037479"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[9]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.097073, -0.062070, 0.002277, 0.034799, 0.430045",\ + "-0.183156, -0.148183, -0.083758, -0.051216, 0.344267",\ + "-0.269694, -0.234839, -0.170093, -0.137470, 0.259003",\ + "-0.427321, -0.392813, -0.327135, -0.294275, 0.105065",\ + "-0.690363, -0.656367, -0.589370, -0.556034, -0.150898"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.143047, -0.085078, 0.019349, 0.037994, 0.264586",\ + "-0.232868, -0.174900, -0.070472, -0.051827, 0.174765",\ + "-0.335734, -0.277819, -0.172775, -0.154124, 0.072546",\ + "-0.517254, -0.459461, -0.352995, -0.334328, -0.107479",\ + "-0.818219, -0.760494, -0.651701, -0.632901, -0.404435"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[9]_hldr*/ + +} /* end of pin alert_rsp_i[9] */ + +pin("alert_rsp_i[8]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000500 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[8]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.220674, 0.184637, 0.129589, 0.129760, 0.131844",\ + "0.297060, 0.261023, 0.205975, 0.206146, 0.208230",\ + "0.368632, 0.332596, 0.277611, 0.277778, 0.279805",\ + "0.497931, 0.461898, 0.407219, 0.407363, 0.409115",\ + "0.712779, 0.676837, 0.622759, 0.622852, 0.623986"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.209550, 0.148448, 0.043450, 0.064279, 0.317417",\ + "0.301584, 0.240483, 0.135457, 0.156314, 0.409784",\ + "0.402135, 0.341040, 0.235908, 0.256868, 0.511598",\ + "0.580476, 0.519395, 0.414005, 0.435218, 0.693015",\ + "0.877762, 0.816594, 0.710628, 0.732149, 0.993683"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[8]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.105222, -0.070365, -0.005626, 0.026996, 0.423447",\ + "-0.183185, -0.148328, -0.083588, -0.050966, 0.345485",\ + "-0.257972, -0.223201, -0.158231, -0.125551, 0.271609",\ + "-0.390468, -0.355966, -0.290271, -0.257407, 0.141987",\ + "-0.603765, -0.569785, -0.502723, -0.469420, -0.064694"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.121294, -0.063271, 0.040519, 0.059158, 0.285669",\ + "-0.213390, -0.155380, -0.051441, -0.032801, 0.193729",\ + "-0.313842, -0.255881, -0.151371, -0.132725, 0.093876",\ + "-0.490960, -0.433113, -0.327285, -0.308625, -0.081856",\ + "-0.786249, -0.728564, -0.620239, -0.601510, -0.373902"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[8]_hldr*/ + +} /* end of pin alert_rsp_i[8] */ + +pin("alert_rsp_i[7]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000448 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[7]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.185938, 0.149895, 0.094200, 0.094419, 0.097084",\ + "0.272325, 0.236283, 0.180640, 0.180856, 0.183473",\ + "0.358907, 0.322867, 0.267423, 0.267624, 0.270063",\ + "0.517339, 0.481305, 0.426450, 0.426607, 0.428517",\ + "0.782742, 0.746824, 0.692719, 0.692812, 0.693947"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.247782, 0.186691, 0.081487, 0.102517, 0.358097",\ + "0.337069, 0.275978, 0.170775, 0.191805, 0.447385",\ + "0.437523, 0.376437, 0.271157, 0.292262, 0.548747",\ + "0.618326, 0.557252, 0.451732, 0.473072, 0.732422",\ + "0.922412, 0.861156, 0.755022, 0.776496, 1.037479"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[7]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.097073, -0.062070, 0.002277, 0.034799, 0.430045",\ + "-0.183156, -0.148183, -0.083758, -0.051216, 0.344267",\ + "-0.269694, -0.234839, -0.170093, -0.137470, 0.259003",\ + "-0.427321, -0.392813, -0.327135, -0.294275, 0.105065",\ + "-0.690363, -0.656367, -0.589370, -0.556034, -0.150898"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.143047, -0.085078, 0.019349, 0.037994, 0.264586",\ + "-0.232868, -0.174900, -0.070472, -0.051827, 0.174765",\ + "-0.335734, -0.277819, -0.172775, -0.154124, 0.072546",\ + "-0.517254, -0.459461, -0.352995, -0.334328, -0.107479",\ + "-0.818219, -0.760494, -0.651701, -0.632901, -0.404435"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[7]_hldr*/ + +} /* end of pin alert_rsp_i[7] */ + +pin("alert_rsp_i[6]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000500 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[6]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.220674, 0.184637, 0.129589, 0.129760, 0.131844",\ + "0.297060, 0.261023, 0.205975, 0.206146, 0.208230",\ + "0.368632, 0.332596, 0.277611, 0.277778, 0.279805",\ + "0.497931, 0.461898, 0.407219, 0.407363, 0.409115",\ + "0.712779, 0.676837, 0.622759, 0.622852, 0.623986"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.209550, 0.148448, 0.043450, 0.064279, 0.317417",\ + "0.301584, 0.240483, 0.135457, 0.156314, 0.409784",\ + "0.402135, 0.341040, 0.235908, 0.256868, 0.511598",\ + "0.580476, 0.519395, 0.414005, 0.435218, 0.693015",\ + "0.877762, 0.816594, 0.710628, 0.732149, 0.993683"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[6]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.105222, -0.070365, -0.005626, 0.026996, 0.423447",\ + "-0.183185, -0.148328, -0.083588, -0.050966, 0.345485",\ + "-0.257972, -0.223201, -0.158231, -0.125551, 0.271609",\ + "-0.390468, -0.355966, -0.290271, -0.257407, 0.141987",\ + "-0.603765, -0.569785, -0.502723, -0.469420, -0.064694"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.121294, -0.063271, 0.040519, 0.059158, 0.285669",\ + "-0.213390, -0.155380, -0.051441, -0.032801, 0.193729",\ + "-0.313842, -0.255881, -0.151371, -0.132725, 0.093876",\ + "-0.490960, -0.433113, -0.327285, -0.308625, -0.081856",\ + "-0.786249, -0.728564, -0.620239, -0.601510, -0.373902"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[6]_hldr*/ + +} /* end of pin alert_rsp_i[6] */ + +pin("alert_rsp_i[5]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000448 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[5]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.185938, 0.149895, 0.094200, 0.094419, 0.097084",\ + "0.272325, 0.236283, 0.180640, 0.180856, 0.183473",\ + "0.358907, 0.322867, 0.267423, 0.267624, 0.270063",\ + "0.517339, 0.481305, 0.426450, 0.426607, 0.428517",\ + "0.782742, 0.746824, 0.692719, 0.692812, 0.693947"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.247782, 0.186691, 0.081487, 0.102517, 0.358097",\ + "0.337069, 0.275978, 0.170775, 0.191805, 0.447385",\ + "0.437523, 0.376437, 0.271157, 0.292262, 0.548747",\ + "0.618326, 0.557252, 0.451732, 0.473072, 0.732422",\ + "0.922412, 0.861156, 0.755022, 0.776496, 1.037479"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[5]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.097073, -0.062070, 0.002277, 0.034799, 0.430045",\ + "-0.183156, -0.148183, -0.083758, -0.051216, 0.344267",\ + "-0.269694, -0.234839, -0.170093, -0.137470, 0.259003",\ + "-0.427321, -0.392813, -0.327135, -0.294275, 0.105065",\ + "-0.690363, -0.656367, -0.589370, -0.556034, -0.150898"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.143047, -0.085078, 0.019349, 0.037994, 0.264586",\ + "-0.232868, -0.174900, -0.070472, -0.051827, 0.174765",\ + "-0.335734, -0.277819, -0.172775, -0.154124, 0.072546",\ + "-0.517254, -0.459461, -0.352995, -0.334328, -0.107479",\ + "-0.818219, -0.760494, -0.651701, -0.632901, -0.404435"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[5]_hldr*/ + +} /* end of pin alert_rsp_i[5] */ + +pin("alert_rsp_i[4]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000500 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[4]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.220674, 0.184637, 0.129589, 0.129760, 0.131844",\ + "0.297060, 0.261023, 0.205975, 0.206146, 0.208230",\ + "0.368632, 0.332596, 0.277611, 0.277778, 0.279805",\ + "0.497931, 0.461898, 0.407219, 0.407363, 0.409115",\ + "0.712779, 0.676837, 0.622759, 0.622852, 0.623986"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.209550, 0.148448, 0.043450, 0.064279, 0.317417",\ + "0.301584, 0.240483, 0.135457, 0.156314, 0.409784",\ + "0.402135, 0.341040, 0.235908, 0.256868, 0.511598",\ + "0.580476, 0.519395, 0.414005, 0.435218, 0.693015",\ + "0.877762, 0.816594, 0.710628, 0.732149, 0.993683"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[4]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.105222, -0.070365, -0.005626, 0.026996, 0.423447",\ + "-0.183185, -0.148328, -0.083588, -0.050966, 0.345485",\ + "-0.257972, -0.223201, -0.158231, -0.125551, 0.271609",\ + "-0.390468, -0.355966, -0.290271, -0.257407, 0.141987",\ + "-0.603765, -0.569785, -0.502723, -0.469420, -0.064694"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.121294, -0.063271, 0.040519, 0.059158, 0.285669",\ + "-0.213390, -0.155380, -0.051441, -0.032801, 0.193729",\ + "-0.313842, -0.255881, -0.151371, -0.132725, 0.093876",\ + "-0.490960, -0.433113, -0.327285, -0.308625, -0.081856",\ + "-0.786249, -0.728564, -0.620239, -0.601510, -0.373902"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[4]_hldr*/ + +} /* end of pin alert_rsp_i[4] */ + +pin("alert_rsp_i[3]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000448 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[3]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.185938, 0.149895, 0.094200, 0.094419, 0.097084",\ + "0.272325, 0.236283, 0.180640, 0.180856, 0.183473",\ + "0.358907, 0.322867, 0.267423, 0.267624, 0.270063",\ + "0.517339, 0.481305, 0.426450, 0.426607, 0.428517",\ + "0.782742, 0.746824, 0.692719, 0.692812, 0.693947"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.247782, 0.186691, 0.081487, 0.102517, 0.358097",\ + "0.337069, 0.275978, 0.170775, 0.191805, 0.447385",\ + "0.437523, 0.376437, 0.271157, 0.292262, 0.548747",\ + "0.618326, 0.557252, 0.451732, 0.473072, 0.732422",\ + "0.922412, 0.861156, 0.755022, 0.776496, 1.037479"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[3]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.097073, -0.062070, 0.002277, 0.034799, 0.430045",\ + "-0.183156, -0.148183, -0.083758, -0.051216, 0.344267",\ + "-0.269694, -0.234839, -0.170093, -0.137470, 0.259003",\ + "-0.427321, -0.392813, -0.327135, -0.294275, 0.105065",\ + "-0.690363, -0.656367, -0.589370, -0.556034, -0.150898"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.143047, -0.085078, 0.019349, 0.037994, 0.264586",\ + "-0.232868, -0.174900, -0.070472, -0.051827, 0.174765",\ + "-0.335734, -0.277819, -0.172775, -0.154124, 0.072546",\ + "-0.517254, -0.459461, -0.352995, -0.334328, -0.107479",\ + "-0.818219, -0.760494, -0.651701, -0.632901, -0.404435"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[3]_hldr*/ + +} /* end of pin alert_rsp_i[3] */ + +pin("alert_rsp_i[2]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000500 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[2]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.220674, 0.184637, 0.129589, 0.129760, 0.131844",\ + "0.297060, 0.261023, 0.205975, 0.206146, 0.208230",\ + "0.368632, 0.332596, 0.277611, 0.277778, 0.279805",\ + "0.497931, 0.461898, 0.407219, 0.407363, 0.409115",\ + "0.712779, 0.676837, 0.622759, 0.622852, 0.623986"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.209550, 0.148448, 0.043450, 0.064279, 0.317417",\ + "0.301584, 0.240483, 0.135457, 0.156314, 0.409784",\ + "0.402135, 0.341040, 0.235908, 0.256868, 0.511598",\ + "0.580476, 0.519395, 0.414005, 0.435218, 0.693015",\ + "0.877762, 0.816594, 0.710628, 0.732149, 0.993683"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[2]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.105222, -0.070365, -0.005626, 0.026996, 0.423447",\ + "-0.183185, -0.148328, -0.083588, -0.050966, 0.345485",\ + "-0.257972, -0.223201, -0.158231, -0.125551, 0.271609",\ + "-0.390468, -0.355966, -0.290271, -0.257407, 0.141987",\ + "-0.603765, -0.569785, -0.502723, -0.469420, -0.064694"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.121294, -0.063271, 0.040519, 0.059158, 0.285669",\ + "-0.213390, -0.155380, -0.051441, -0.032801, 0.193729",\ + "-0.313842, -0.255881, -0.151371, -0.132725, 0.093876",\ + "-0.490960, -0.433113, -0.327285, -0.308625, -0.081856",\ + "-0.786249, -0.728564, -0.620239, -0.601510, -0.373902"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[2]_hldr*/ + +} /* end of pin alert_rsp_i[2] */ + +pin("alert_rsp_i[1]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000448 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[1]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.185938, 0.149895, 0.094200, 0.094419, 0.097084",\ + "0.272325, 0.236283, 0.180640, 0.180856, 0.183473",\ + "0.358907, 0.322867, 0.267423, 0.267624, 0.270063",\ + "0.517339, 0.481305, 0.426450, 0.426607, 0.428517",\ + "0.782742, 0.746824, 0.692719, 0.692812, 0.693947"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.247782, 0.186691, 0.081487, 0.102517, 0.358097",\ + "0.337069, 0.275978, 0.170775, 0.191805, 0.447385",\ + "0.437523, 0.376437, 0.271157, 0.292262, 0.548747",\ + "0.618326, 0.557252, 0.451732, 0.473072, 0.732422",\ + "0.922412, 0.861156, 0.755022, 0.776496, 1.037479"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[1]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.097073, -0.062070, 0.002277, 0.034799, 0.430045",\ + "-0.183156, -0.148183, -0.083758, -0.051216, 0.344267",\ + "-0.269694, -0.234839, -0.170093, -0.137470, 0.259003",\ + "-0.427321, -0.392813, -0.327135, -0.294275, 0.105065",\ + "-0.690363, -0.656367, -0.589370, -0.556034, -0.150898"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.143047, -0.085078, 0.019349, 0.037994, 0.264586",\ + "-0.232868, -0.174900, -0.070472, -0.051827, 0.174765",\ + "-0.335734, -0.277819, -0.172775, -0.154124, 0.072546",\ + "-0.517254, -0.459461, -0.352995, -0.334328, -0.107479",\ + "-0.818219, -0.760494, -0.651701, -0.632901, -0.404435"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[1]_hldr*/ + +} /* end of pin alert_rsp_i[1] */ + +pin("alert_rsp_i[0]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000500 ; + + /* Other user defined attributes. */ + original_pin : alert_rsp_i[0]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.220674, 0.184637, 0.129589, 0.129760, 0.131844",\ + "0.297060, 0.261023, 0.205975, 0.206146, 0.208230",\ + "0.368632, 0.332596, 0.277611, 0.277778, 0.279805",\ + "0.497931, 0.461898, 0.407219, 0.407363, 0.409115",\ + "0.712779, 0.676837, 0.622759, 0.622852, 0.623986"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.209550, 0.148448, 0.043450, 0.064279, 0.317417",\ + "0.301584, 0.240483, 0.135457, 0.156314, 0.409784",\ + "0.402135, 0.341040, 0.235908, 0.256868, 0.511598",\ + "0.580476, 0.519395, 0.414005, 0.435218, 0.693015",\ + "0.877762, 0.816594, 0.710628, 0.732149, 0.993683"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[0]_stupr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.105222, -0.070365, -0.005626, 0.026996, 0.423447",\ + "-0.183185, -0.148328, -0.083588, -0.050966, 0.345485",\ + "-0.257972, -0.223201, -0.158231, -0.125551, 0.271609",\ + "-0.390468, -0.355966, -0.290271, -0.257407, 0.141987",\ + "-0.603765, -0.569785, -0.502723, -0.469420, -0.064694"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.121294, -0.063271, 0.040519, 0.059158, 0.285669",\ + "-0.213390, -0.155380, -0.051441, -0.032801, 0.193729",\ + "-0.313842, -0.255881, -0.151371, -0.132725, 0.093876",\ + "-0.490960, -0.433113, -0.327285, -0.308625, -0.081856",\ + "-0.786249, -0.728564, -0.620239, -0.601510, -0.373902"); + } + + } /* end of arc clk_ast_alert_i_alert_rsp_i[0]_hldr*/ + +} /* end of pin alert_rsp_i[0] */ +} /* end of bus alert_rsp_i */ +bus ( alert_req_o ) { + + bus_type : BUS26_type12 ; + direction : output ; + +pin("alert_req_o[25]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.634048 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000982 ; + + /* Other user defined attributes. */ + original_pin : alert_req_o[25]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.054627, 0.128254, 0.213264, 0.349398, 1.341047",\ + "0.111446, 0.185285, 0.270053, 0.405814, 1.402083",\ + "0.250051, 0.333480, 0.418189, 0.553854, 1.548154",\ + "0.283766, 0.371624, 0.456253, 0.591793, 1.586834",\ + "0.584903, 0.727700, 0.813314, 0.950396, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.026420, 0.137079, 0.296659, 0.552264, 2.441059",\ + "0.027606, 0.137424, 0.296659, 0.552264, 2.442441",\ + "0.048973, 0.143889, 0.302016, 0.555346, 2.445574",\ + "0.056124, 0.147298, 0.303942, 0.555346, 2.445574",\ + "0.135119, 0.207795, 0.342920, 0.559922, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.074318, 0.127023, 0.181661, 0.269150, 0.901570",\ + "0.135238, 0.187941, 0.242461, 0.329766, 0.964295",\ + "0.278249, 0.331631, 0.386036, 0.473153, 1.104683",\ + "0.313722, 0.367652, 0.422063, 0.509190, 1.140690",\ + "0.637044, 0.700813, 0.755435, 0.842904, 1.478811"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.022299, 0.090049, 0.186120, 0.340034, 1.494292",\ + "0.022299, 0.090163, 0.186120, 0.340034, 1.494292",\ + "0.024376, 0.090410, 0.186120, 0.340034, 1.494292",\ + "0.025559, 0.090772, 0.186120, 0.340034, 1.494292",\ + "0.043338, 0.097514, 0.190357, 0.340034, 1.494292"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[25]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.054627, 0.128254, 0.213264, 0.349398, 1.341047",\ + "0.111446, 0.185285, 0.270053, 0.405814, 1.402083",\ + "0.250051, 0.333480, 0.418189, 0.553854, 1.548154",\ + "0.283766, 0.371624, 0.456253, 0.591793, 1.586834",\ + "0.584903, 0.727700, 0.813314, 0.950396, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.026420, 0.137079, 0.296653, 0.551706, 2.441059",\ + "0.027606, 0.137424, 0.296653, 0.551706, 2.442441",\ + "0.048973, 0.143889, 0.302016, 0.554928, 2.445574",\ + "0.056124, 0.147298, 0.303942, 0.554928, 2.445574",\ + "0.135119, 0.207795, 0.342920, 0.559922, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.074318, 0.127023, 0.181661, 0.269150, 0.901570",\ + "0.135238, 0.187941, 0.242461, 0.329766, 0.964295",\ + "0.278249, 0.331631, 0.386036, 0.473153, 1.104683",\ + "0.313722, 0.367652, 0.422063, 0.509190, 1.140690",\ + "0.637044, 0.700813, 0.755435, 0.842904, 1.478811"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.022299, 0.090049, 0.185649, 0.338251, 1.490219",\ + "0.022299, 0.090163, 0.185649, 0.338251, 1.490219",\ + "0.024376, 0.090410, 0.185649, 0.338251, 1.490219",\ + "0.025559, 0.090772, 0.185933, 0.338414, 1.490219",\ + "0.043338, 0.097514, 0.190357, 0.339166, 1.490219"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[25]_redg_min*/ + +} /* end of pin alert_req_o[25] */ + +pin("alert_req_o[24]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.634048 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001149 ; + + /* Other user defined attributes. */ + original_pin : alert_req_o[24]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.055384, 0.128593, 0.213603, 0.349733, 1.341047",\ + "0.112211, 0.185623, 0.270391, 0.406151, 1.402083",\ + "0.251189, 0.333817, 0.418527, 0.554191, 1.548154",\ + "0.285031, 0.371962, 0.456591, 0.592129, 1.586834",\ + "0.587490, 0.728041, 0.813655, 0.950730, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.027116, 0.137715, 0.297295, 0.552903, 2.441059",\ + "0.028270, 0.138058, 0.297295, 0.552903, 2.442441",\ + "0.049599, 0.144519, 0.302646, 0.555988, 2.445574",\ + "0.056771, 0.147922, 0.304566, 0.555988, 2.445574",\ + "0.136105, 0.208333, 0.343458, 0.560560, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.074922, 0.127232, 0.181871, 0.269356, 0.901561",\ + "0.135837, 0.188150, 0.242670, 0.329973, 0.964286",\ + "0.278886, 0.331840, 0.386244, 0.473358, 1.104675",\ + "0.314388, 0.367860, 0.422271, 0.509395, 1.140682",\ + "0.638051, 0.701022, 0.755644, 0.843111, 1.478802"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.022737, 0.090417, 0.186489, 0.340409, 1.494277",\ + "0.022756, 0.090531, 0.186489, 0.340409, 1.494277",\ + "0.024833, 0.090775, 0.186489, 0.340409, 1.494277",\ + "0.025999, 0.091137, 0.186489, 0.340409, 1.494277",\ + "0.043741, 0.097870, 0.190712, 0.340409, 1.494277"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[24]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.055384, 0.128593, 0.213603, 0.349733, 1.341047",\ + "0.112211, 0.185623, 0.270391, 0.406151, 1.402083",\ + "0.251189, 0.333817, 0.418527, 0.554191, 1.548154",\ + "0.285031, 0.371962, 0.456591, 0.592129, 1.586834",\ + "0.587490, 0.728041, 0.813655, 0.950730, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.027116, 0.137715, 0.297287, 0.552346, 2.441059",\ + "0.028270, 0.138058, 0.297287, 0.552346, 2.442441",\ + "0.049599, 0.144519, 0.302646, 0.555570, 2.445574",\ + "0.056771, 0.147922, 0.304566, 0.555570, 2.445574",\ + "0.136105, 0.208333, 0.343458, 0.560560, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.074922, 0.127232, 0.181871, 0.269356, 0.901561",\ + "0.135837, 0.188150, 0.242670, 0.329973, 0.964286",\ + "0.278886, 0.331840, 0.386244, 0.473358, 1.104675",\ + "0.314388, 0.367860, 0.422271, 0.509395, 1.140682",\ + "0.638051, 0.701022, 0.755644, 0.843111, 1.478802"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.022737, 0.090417, 0.186014, 0.338627, 1.490204",\ + "0.022756, 0.090531, 0.186014, 0.338627, 1.490204",\ + "0.024833, 0.090775, 0.186014, 0.338627, 1.490204",\ + "0.025999, 0.091137, 0.186298, 0.338790, 1.490204",\ + "0.043741, 0.097870, 0.190712, 0.339540, 1.490204"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[24]_redg_min*/ + +} /* end of pin alert_req_o[24] */ + +pin("alert_req_o[23]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.634048 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000982 ; + + /* Other user defined attributes. */ + original_pin : alert_req_o[23]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.054627, 0.128254, 0.213264, 0.349398, 1.341047",\ + "0.111446, 0.185285, 0.270053, 0.405814, 1.402083",\ + "0.250051, 0.333480, 0.418189, 0.553854, 1.548154",\ + "0.283766, 0.371624, 0.456253, 0.591793, 1.586834",\ + "0.584903, 0.727700, 0.813314, 0.950396, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.026420, 0.137079, 0.296659, 0.552264, 2.441059",\ + "0.027606, 0.137424, 0.296659, 0.552264, 2.442441",\ + "0.048973, 0.143889, 0.302016, 0.555346, 2.445574",\ + "0.056124, 0.147298, 0.303942, 0.555346, 2.445574",\ + "0.135119, 0.207795, 0.342920, 0.559922, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.074318, 0.127023, 0.181661, 0.269150, 0.901570",\ + "0.135238, 0.187941, 0.242461, 0.329766, 0.964295",\ + "0.278249, 0.331631, 0.386036, 0.473153, 1.104683",\ + "0.313722, 0.367652, 0.422063, 0.509190, 1.140690",\ + "0.637044, 0.700813, 0.755435, 0.842904, 1.478811"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.022299, 0.090049, 0.186120, 0.340034, 1.494292",\ + "0.022299, 0.090163, 0.186120, 0.340034, 1.494292",\ + "0.024376, 0.090410, 0.186120, 0.340034, 1.494292",\ + "0.025559, 0.090772, 0.186120, 0.340034, 1.494292",\ + "0.043338, 0.097514, 0.190357, 0.340034, 1.494292"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[23]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.054627, 0.128254, 0.213264, 0.349398, 1.341047",\ + "0.111446, 0.185285, 0.270053, 0.405814, 1.402083",\ + "0.250051, 0.333480, 0.418189, 0.553854, 1.548154",\ + "0.283766, 0.371624, 0.456253, 0.591793, 1.586834",\ + "0.584903, 0.727700, 0.813314, 0.950396, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.026420, 0.137079, 0.296653, 0.551706, 2.441059",\ + "0.027606, 0.137424, 0.296653, 0.551706, 2.442441",\ + "0.048973, 0.143889, 0.302016, 0.554928, 2.445574",\ + "0.056124, 0.147298, 0.303942, 0.554928, 2.445574",\ + "0.135119, 0.207795, 0.342920, 0.559922, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.074318, 0.127023, 0.181661, 0.269150, 0.901570",\ + "0.135238, 0.187941, 0.242461, 0.329766, 0.964295",\ + "0.278249, 0.331631, 0.386036, 0.473153, 1.104683",\ + "0.313722, 0.367652, 0.422063, 0.509190, 1.140690",\ + "0.637044, 0.700813, 0.755435, 0.842904, 1.478811"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.022299, 0.090049, 0.185649, 0.338251, 1.490219",\ + "0.022299, 0.090163, 0.185649, 0.338251, 1.490219",\ + "0.024376, 0.090410, 0.185649, 0.338251, 1.490219",\ + "0.025559, 0.090772, 0.185933, 0.338414, 1.490219",\ + "0.043338, 0.097514, 0.190357, 0.339166, 1.490219"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[23]_redg_min*/ + +} /* end of pin alert_req_o[23] */ + +pin("alert_req_o[22]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.634048 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001149 ; + + /* Other user defined attributes. */ + original_pin : alert_req_o[22]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.055384, 0.128593, 0.213603, 0.349733, 1.341047",\ + "0.112211, 0.185623, 0.270391, 0.406151, 1.402083",\ + "0.251189, 0.333817, 0.418527, 0.554191, 1.548154",\ + "0.285031, 0.371962, 0.456591, 0.592129, 1.586834",\ + "0.587490, 0.728041, 0.813655, 0.950730, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.027116, 0.137715, 0.297295, 0.552903, 2.441059",\ + "0.028270, 0.138058, 0.297295, 0.552903, 2.442441",\ + "0.049599, 0.144519, 0.302646, 0.555988, 2.445574",\ + "0.056771, 0.147922, 0.304566, 0.555988, 2.445574",\ + "0.136105, 0.208333, 0.343458, 0.560560, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.074922, 0.127232, 0.181871, 0.269356, 0.901561",\ + "0.135837, 0.188150, 0.242670, 0.329973, 0.964286",\ + "0.278886, 0.331840, 0.386244, 0.473358, 1.104675",\ + "0.314388, 0.367860, 0.422271, 0.509395, 1.140682",\ + "0.638051, 0.701022, 0.755644, 0.843111, 1.478802"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.022737, 0.090417, 0.186489, 0.340409, 1.494277",\ + "0.022756, 0.090531, 0.186489, 0.340409, 1.494277",\ + "0.024833, 0.090775, 0.186489, 0.340409, 1.494277",\ + "0.025999, 0.091137, 0.186489, 0.340409, 1.494277",\ + "0.043741, 0.097870, 0.190712, 0.340409, 1.494277"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[22]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.055384, 0.128593, 0.213603, 0.349733, 1.341047",\ + "0.112211, 0.185623, 0.270391, 0.406151, 1.402083",\ + "0.251189, 0.333817, 0.418527, 0.554191, 1.548154",\ + "0.285031, 0.371962, 0.456591, 0.592129, 1.586834",\ + "0.587490, 0.728041, 0.813655, 0.950730, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.027116, 0.137715, 0.297287, 0.552346, 2.441059",\ + "0.028270, 0.138058, 0.297287, 0.552346, 2.442441",\ + "0.049599, 0.144519, 0.302646, 0.555570, 2.445574",\ + "0.056771, 0.147922, 0.304566, 0.555570, 2.445574",\ + "0.136105, 0.208333, 0.343458, 0.560560, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.074922, 0.127232, 0.181871, 0.269356, 0.901561",\ + "0.135837, 0.188150, 0.242670, 0.329973, 0.964286",\ + "0.278886, 0.331840, 0.386244, 0.473358, 1.104675",\ + "0.314388, 0.367860, 0.422271, 0.509395, 1.140682",\ + "0.638051, 0.701022, 0.755644, 0.843111, 1.478802"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.022737, 0.090417, 0.186014, 0.338627, 1.490204",\ + "0.022756, 0.090531, 0.186014, 0.338627, 1.490204",\ + "0.024833, 0.090775, 0.186014, 0.338627, 1.490204",\ + "0.025999, 0.091137, 0.186298, 0.338790, 1.490204",\ + "0.043741, 0.097870, 0.190712, 0.339540, 1.490204"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[22]_redg_min*/ + +} /* end of pin alert_req_o[22] */ + +pin("alert_req_o[21]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.634048 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000982 ; + + /* Other user defined attributes. */ + original_pin : alert_req_o[21]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.054627, 0.128254, 0.213264, 0.349398, 1.341047",\ + "0.111446, 0.185285, 0.270053, 0.405814, 1.402083",\ + "0.250051, 0.333480, 0.418189, 0.553854, 1.548154",\ + "0.283766, 0.371624, 0.456253, 0.591793, 1.586834",\ + "0.584903, 0.727700, 0.813314, 0.950396, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.026420, 0.137079, 0.296659, 0.552264, 2.441059",\ + "0.027606, 0.137424, 0.296659, 0.552264, 2.442441",\ + "0.048973, 0.143889, 0.302016, 0.555346, 2.445574",\ + "0.056124, 0.147298, 0.303942, 0.555346, 2.445574",\ + "0.135119, 0.207795, 0.342920, 0.559922, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.074318, 0.127023, 0.181661, 0.269150, 0.901570",\ + "0.135238, 0.187941, 0.242461, 0.329766, 0.964295",\ + "0.278249, 0.331631, 0.386036, 0.473153, 1.104683",\ + "0.313722, 0.367652, 0.422063, 0.509190, 1.140690",\ + "0.637044, 0.700813, 0.755435, 0.842904, 1.478811"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.022299, 0.090049, 0.186120, 0.340034, 1.494292",\ + "0.022299, 0.090163, 0.186120, 0.340034, 1.494292",\ + "0.024376, 0.090410, 0.186120, 0.340034, 1.494292",\ + "0.025559, 0.090772, 0.186120, 0.340034, 1.494292",\ + "0.043338, 0.097514, 0.190357, 0.340034, 1.494292"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[21]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.054627, 0.128254, 0.213264, 0.349398, 1.341047",\ + "0.111446, 0.185285, 0.270053, 0.405814, 1.402083",\ + "0.250051, 0.333480, 0.418189, 0.553854, 1.548154",\ + "0.283766, 0.371624, 0.456253, 0.591793, 1.586834",\ + "0.584903, 0.727700, 0.813314, 0.950396, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.026420, 0.137079, 0.296653, 0.551706, 2.441059",\ + "0.027606, 0.137424, 0.296653, 0.551706, 2.442441",\ + "0.048973, 0.143889, 0.302016, 0.554928, 2.445574",\ + "0.056124, 0.147298, 0.303942, 0.554928, 2.445574",\ + "0.135119, 0.207795, 0.342920, 0.559922, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.074318, 0.127023, 0.181661, 0.269150, 0.901570",\ + "0.135238, 0.187941, 0.242461, 0.329766, 0.964295",\ + "0.278249, 0.331631, 0.386036, 0.473153, 1.104683",\ + "0.313722, 0.367652, 0.422063, 0.509190, 1.140690",\ + "0.637044, 0.700813, 0.755435, 0.842904, 1.478811"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.022299, 0.090049, 0.185649, 0.338251, 1.490219",\ + "0.022299, 0.090163, 0.185649, 0.338251, 1.490219",\ + "0.024376, 0.090410, 0.185649, 0.338251, 1.490219",\ + "0.025559, 0.090772, 0.185933, 0.338414, 1.490219",\ + "0.043338, 0.097514, 0.190357, 0.339166, 1.490219"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[21]_redg_min*/ + +} /* end of pin alert_req_o[21] */ + +pin("alert_req_o[20]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.634048 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001149 ; + + /* Other user defined attributes. */ + original_pin : alert_req_o[20]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.055384, 0.128593, 0.213603, 0.349733, 1.341047",\ + "0.112211, 0.185623, 0.270391, 0.406151, 1.402083",\ + "0.251189, 0.333817, 0.418527, 0.554191, 1.548154",\ + "0.285031, 0.371962, 0.456591, 0.592129, 1.586834",\ + "0.587490, 0.728041, 0.813655, 0.950730, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.027116, 0.137715, 0.297295, 0.552903, 2.441059",\ + "0.028270, 0.138058, 0.297295, 0.552903, 2.442441",\ + "0.049599, 0.144519, 0.302646, 0.555988, 2.445574",\ + "0.056771, 0.147922, 0.304566, 0.555988, 2.445574",\ + "0.136105, 0.208333, 0.343458, 0.560560, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.074922, 0.127232, 0.181871, 0.269356, 0.901561",\ + "0.135837, 0.188150, 0.242670, 0.329973, 0.964286",\ + "0.278886, 0.331840, 0.386244, 0.473358, 1.104675",\ + "0.314388, 0.367860, 0.422271, 0.509395, 1.140682",\ + "0.638051, 0.701022, 0.755644, 0.843111, 1.478802"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.022737, 0.090417, 0.186489, 0.340409, 1.494277",\ + "0.022756, 0.090531, 0.186489, 0.340409, 1.494277",\ + "0.024833, 0.090775, 0.186489, 0.340409, 1.494277",\ + "0.025999, 0.091137, 0.186489, 0.340409, 1.494277",\ + "0.043741, 0.097870, 0.190712, 0.340409, 1.494277"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[20]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.055384, 0.128593, 0.213603, 0.349733, 1.341047",\ + "0.112211, 0.185623, 0.270391, 0.406151, 1.402083",\ + "0.251189, 0.333817, 0.418527, 0.554191, 1.548154",\ + "0.285031, 0.371962, 0.456591, 0.592129, 1.586834",\ + "0.587490, 0.728041, 0.813655, 0.950730, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.027116, 0.137715, 0.297287, 0.552346, 2.441059",\ + "0.028270, 0.138058, 0.297287, 0.552346, 2.442441",\ + "0.049599, 0.144519, 0.302646, 0.555570, 2.445574",\ + "0.056771, 0.147922, 0.304566, 0.555570, 2.445574",\ + "0.136105, 0.208333, 0.343458, 0.560560, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.074922, 0.127232, 0.181871, 0.269356, 0.901561",\ + "0.135837, 0.188150, 0.242670, 0.329973, 0.964286",\ + "0.278886, 0.331840, 0.386244, 0.473358, 1.104675",\ + "0.314388, 0.367860, 0.422271, 0.509395, 1.140682",\ + "0.638051, 0.701022, 0.755644, 0.843111, 1.478802"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.022737, 0.090417, 0.186014, 0.338627, 1.490204",\ + "0.022756, 0.090531, 0.186014, 0.338627, 1.490204",\ + "0.024833, 0.090775, 0.186014, 0.338627, 1.490204",\ + "0.025999, 0.091137, 0.186298, 0.338790, 1.490204",\ + "0.043741, 0.097870, 0.190712, 0.339540, 1.490204"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[20]_redg_min*/ + +} /* end of pin alert_req_o[20] */ + +pin("alert_req_o[19]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.634048 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000982 ; + + /* Other user defined attributes. */ + original_pin : alert_req_o[19]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.054627, 0.128254, 0.213264, 0.349398, 1.341047",\ + "0.111446, 0.185285, 0.270053, 0.405814, 1.402083",\ + "0.250051, 0.333480, 0.418189, 0.553854, 1.548154",\ + "0.283766, 0.371624, 0.456253, 0.591793, 1.586834",\ + "0.584903, 0.727700, 0.813314, 0.950396, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.026420, 0.137079, 0.296659, 0.552264, 2.441059",\ + "0.027606, 0.137424, 0.296659, 0.552264, 2.442441",\ + "0.048973, 0.143889, 0.302016, 0.555346, 2.445574",\ + "0.056124, 0.147298, 0.303942, 0.555346, 2.445574",\ + "0.135119, 0.207795, 0.342920, 0.559922, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.074318, 0.127023, 0.181661, 0.269150, 0.901570",\ + "0.135238, 0.187941, 0.242461, 0.329766, 0.964295",\ + "0.278249, 0.331631, 0.386036, 0.473153, 1.104683",\ + "0.313722, 0.367652, 0.422063, 0.509190, 1.140690",\ + "0.637044, 0.700813, 0.755435, 0.842904, 1.478811"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.022299, 0.090049, 0.186120, 0.340034, 1.494292",\ + "0.022299, 0.090163, 0.186120, 0.340034, 1.494292",\ + "0.024376, 0.090410, 0.186120, 0.340034, 1.494292",\ + "0.025559, 0.090772, 0.186120, 0.340034, 1.494292",\ + "0.043338, 0.097514, 0.190357, 0.340034, 1.494292"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[19]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.054627, 0.128254, 0.213264, 0.349398, 1.341047",\ + "0.111446, 0.185285, 0.270053, 0.405814, 1.402083",\ + "0.250051, 0.333480, 0.418189, 0.553854, 1.548154",\ + "0.283766, 0.371624, 0.456253, 0.591793, 1.586834",\ + "0.584903, 0.727700, 0.813314, 0.950396, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.026420, 0.137079, 0.296653, 0.551706, 2.441059",\ + "0.027606, 0.137424, 0.296653, 0.551706, 2.442441",\ + "0.048973, 0.143889, 0.302016, 0.554928, 2.445574",\ + "0.056124, 0.147298, 0.303942, 0.554928, 2.445574",\ + "0.135119, 0.207795, 0.342920, 0.559922, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.074318, 0.127023, 0.181661, 0.269150, 0.901570",\ + "0.135238, 0.187941, 0.242461, 0.329766, 0.964295",\ + "0.278249, 0.331631, 0.386036, 0.473153, 1.104683",\ + "0.313722, 0.367652, 0.422063, 0.509190, 1.140690",\ + "0.637044, 0.700813, 0.755435, 0.842904, 1.478811"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.022299, 0.090049, 0.185649, 0.338251, 1.490219",\ + "0.022299, 0.090163, 0.185649, 0.338251, 1.490219",\ + "0.024376, 0.090410, 0.185649, 0.338251, 1.490219",\ + "0.025559, 0.090772, 0.185933, 0.338414, 1.490219",\ + "0.043338, 0.097514, 0.190357, 0.339166, 1.490219"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[19]_redg_min*/ + +} /* end of pin alert_req_o[19] */ + +pin("alert_req_o[18]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.634048 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001149 ; + + /* Other user defined attributes. */ + original_pin : alert_req_o[18]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.055384, 0.128593, 0.213603, 0.349733, 1.341047",\ + "0.112211, 0.185623, 0.270391, 0.406151, 1.402083",\ + "0.251189, 0.333817, 0.418527, 0.554191, 1.548154",\ + "0.285031, 0.371962, 0.456591, 0.592129, 1.586834",\ + "0.587490, 0.728041, 0.813655, 0.950730, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.027116, 0.137715, 0.297295, 0.552903, 2.441059",\ + "0.028270, 0.138058, 0.297295, 0.552903, 2.442441",\ + "0.049599, 0.144519, 0.302646, 0.555988, 2.445574",\ + "0.056771, 0.147922, 0.304566, 0.555988, 2.445574",\ + "0.136105, 0.208333, 0.343458, 0.560560, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.074922, 0.127232, 0.181871, 0.269356, 0.901561",\ + "0.135837, 0.188150, 0.242670, 0.329973, 0.964286",\ + "0.278886, 0.331840, 0.386244, 0.473358, 1.104675",\ + "0.314388, 0.367860, 0.422271, 0.509395, 1.140682",\ + "0.638051, 0.701022, 0.755644, 0.843111, 1.478802"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.022737, 0.090417, 0.186489, 0.340409, 1.494277",\ + "0.022756, 0.090531, 0.186489, 0.340409, 1.494277",\ + "0.024833, 0.090775, 0.186489, 0.340409, 1.494277",\ + "0.025999, 0.091137, 0.186489, 0.340409, 1.494277",\ + "0.043741, 0.097870, 0.190712, 0.340409, 1.494277"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[18]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.055384, 0.128593, 0.213603, 0.349733, 1.341047",\ + "0.112211, 0.185623, 0.270391, 0.406151, 1.402083",\ + "0.251189, 0.333817, 0.418527, 0.554191, 1.548154",\ + "0.285031, 0.371962, 0.456591, 0.592129, 1.586834",\ + "0.587490, 0.728041, 0.813655, 0.950730, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.027116, 0.137715, 0.297287, 0.552346, 2.441059",\ + "0.028270, 0.138058, 0.297287, 0.552346, 2.442441",\ + "0.049599, 0.144519, 0.302646, 0.555570, 2.445574",\ + "0.056771, 0.147922, 0.304566, 0.555570, 2.445574",\ + "0.136105, 0.208333, 0.343458, 0.560560, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.074922, 0.127232, 0.181871, 0.269356, 0.901561",\ + "0.135837, 0.188150, 0.242670, 0.329973, 0.964286",\ + "0.278886, 0.331840, 0.386244, 0.473358, 1.104675",\ + "0.314388, 0.367860, 0.422271, 0.509395, 1.140682",\ + "0.638051, 0.701022, 0.755644, 0.843111, 1.478802"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.022737, 0.090417, 0.186014, 0.338627, 1.490204",\ + "0.022756, 0.090531, 0.186014, 0.338627, 1.490204",\ + "0.024833, 0.090775, 0.186014, 0.338627, 1.490204",\ + "0.025999, 0.091137, 0.186298, 0.338790, 1.490204",\ + "0.043741, 0.097870, 0.190712, 0.339540, 1.490204"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[18]_redg_min*/ + +} /* end of pin alert_req_o[18] */ + +pin("alert_req_o[17]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.634048 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000982 ; + + /* Other user defined attributes. */ + original_pin : alert_req_o[17]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.054627, 0.128254, 0.213264, 0.349398, 1.341047",\ + "0.111446, 0.185285, 0.270053, 0.405814, 1.402083",\ + "0.250051, 0.333480, 0.418189, 0.553854, 1.548154",\ + "0.283766, 0.371624, 0.456253, 0.591793, 1.586834",\ + "0.584903, 0.727700, 0.813314, 0.950396, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.026420, 0.137079, 0.296659, 0.552264, 2.441059",\ + "0.027606, 0.137424, 0.296659, 0.552264, 2.442441",\ + "0.048973, 0.143889, 0.302016, 0.555346, 2.445574",\ + "0.056124, 0.147298, 0.303942, 0.555346, 2.445574",\ + "0.135119, 0.207795, 0.342920, 0.559922, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.074318, 0.127023, 0.181661, 0.269150, 0.901570",\ + "0.135238, 0.187941, 0.242461, 0.329766, 0.964295",\ + "0.278249, 0.331631, 0.386036, 0.473153, 1.104683",\ + "0.313722, 0.367652, 0.422063, 0.509190, 1.140690",\ + "0.637044, 0.700813, 0.755435, 0.842904, 1.478811"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.022299, 0.090049, 0.186120, 0.340034, 1.494292",\ + "0.022299, 0.090163, 0.186120, 0.340034, 1.494292",\ + "0.024376, 0.090410, 0.186120, 0.340034, 1.494292",\ + "0.025559, 0.090772, 0.186120, 0.340034, 1.494292",\ + "0.043338, 0.097514, 0.190357, 0.340034, 1.494292"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[17]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.054627, 0.128254, 0.213264, 0.349398, 1.341047",\ + "0.111446, 0.185285, 0.270053, 0.405814, 1.402083",\ + "0.250051, 0.333480, 0.418189, 0.553854, 1.548154",\ + "0.283766, 0.371624, 0.456253, 0.591793, 1.586834",\ + "0.584903, 0.727700, 0.813314, 0.950396, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.026420, 0.137079, 0.296653, 0.551706, 2.441059",\ + "0.027606, 0.137424, 0.296653, 0.551706, 2.442441",\ + "0.048973, 0.143889, 0.302016, 0.554928, 2.445574",\ + "0.056124, 0.147298, 0.303942, 0.554928, 2.445574",\ + "0.135119, 0.207795, 0.342920, 0.559922, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.074318, 0.127023, 0.181661, 0.269150, 0.901570",\ + "0.135238, 0.187941, 0.242461, 0.329766, 0.964295",\ + "0.278249, 0.331631, 0.386036, 0.473153, 1.104683",\ + "0.313722, 0.367652, 0.422063, 0.509190, 1.140690",\ + "0.637044, 0.700813, 0.755435, 0.842904, 1.478811"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.022299, 0.090049, 0.185649, 0.338251, 1.490219",\ + "0.022299, 0.090163, 0.185649, 0.338251, 1.490219",\ + "0.024376, 0.090410, 0.185649, 0.338251, 1.490219",\ + "0.025559, 0.090772, 0.185933, 0.338414, 1.490219",\ + "0.043338, 0.097514, 0.190357, 0.339166, 1.490219"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[17]_redg_min*/ + +} /* end of pin alert_req_o[17] */ + +pin("alert_req_o[16]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.634048 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001149 ; + + /* Other user defined attributes. */ + original_pin : alert_req_o[16]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.055384, 0.128593, 0.213603, 0.349733, 1.341047",\ + "0.112211, 0.185623, 0.270391, 0.406151, 1.402083",\ + "0.251189, 0.333817, 0.418527, 0.554191, 1.548154",\ + "0.285031, 0.371962, 0.456591, 0.592129, 1.586834",\ + "0.587490, 0.728041, 0.813655, 0.950730, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.027116, 0.137715, 0.297295, 0.552903, 2.441059",\ + "0.028270, 0.138058, 0.297295, 0.552903, 2.442441",\ + "0.049599, 0.144519, 0.302646, 0.555988, 2.445574",\ + "0.056771, 0.147922, 0.304566, 0.555988, 2.445574",\ + "0.136105, 0.208333, 0.343458, 0.560560, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.074922, 0.127232, 0.181871, 0.269356, 0.901561",\ + "0.135837, 0.188150, 0.242670, 0.329973, 0.964286",\ + "0.278886, 0.331840, 0.386244, 0.473358, 1.104675",\ + "0.314388, 0.367860, 0.422271, 0.509395, 1.140682",\ + "0.638051, 0.701022, 0.755644, 0.843111, 1.478802"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.022737, 0.090417, 0.186489, 0.340409, 1.494277",\ + "0.022756, 0.090531, 0.186489, 0.340409, 1.494277",\ + "0.024833, 0.090775, 0.186489, 0.340409, 1.494277",\ + "0.025999, 0.091137, 0.186489, 0.340409, 1.494277",\ + "0.043741, 0.097870, 0.190712, 0.340409, 1.494277"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[16]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.055384, 0.128593, 0.213603, 0.349733, 1.341047",\ + "0.112211, 0.185623, 0.270391, 0.406151, 1.402083",\ + "0.251189, 0.333817, 0.418527, 0.554191, 1.548154",\ + "0.285031, 0.371962, 0.456591, 0.592129, 1.586834",\ + "0.587490, 0.728041, 0.813655, 0.950730, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.027116, 0.137715, 0.297287, 0.552346, 2.441059",\ + "0.028270, 0.138058, 0.297287, 0.552346, 2.442441",\ + "0.049599, 0.144519, 0.302646, 0.555570, 2.445574",\ + "0.056771, 0.147922, 0.304566, 0.555570, 2.445574",\ + "0.136105, 0.208333, 0.343458, 0.560560, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.074922, 0.127232, 0.181871, 0.269356, 0.901561",\ + "0.135837, 0.188150, 0.242670, 0.329973, 0.964286",\ + "0.278886, 0.331840, 0.386244, 0.473358, 1.104675",\ + "0.314388, 0.367860, 0.422271, 0.509395, 1.140682",\ + "0.638051, 0.701022, 0.755644, 0.843111, 1.478802"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.022737, 0.090417, 0.186014, 0.338627, 1.490204",\ + "0.022756, 0.090531, 0.186014, 0.338627, 1.490204",\ + "0.024833, 0.090775, 0.186014, 0.338627, 1.490204",\ + "0.025999, 0.091137, 0.186298, 0.338790, 1.490204",\ + "0.043741, 0.097870, 0.190712, 0.339540, 1.490204"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[16]_redg_min*/ + +} /* end of pin alert_req_o[16] */ + +pin("alert_req_o[15]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.634048 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000982 ; + + /* Other user defined attributes. */ + original_pin : alert_req_o[15]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.054627, 0.128254, 0.213264, 0.349398, 1.341047",\ + "0.111446, 0.185285, 0.270053, 0.405814, 1.402083",\ + "0.250051, 0.333480, 0.418189, 0.553854, 1.548154",\ + "0.283766, 0.371624, 0.456253, 0.591793, 1.586834",\ + "0.584903, 0.727700, 0.813314, 0.950396, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.026420, 0.137079, 0.296659, 0.552264, 2.441059",\ + "0.027606, 0.137424, 0.296659, 0.552264, 2.442441",\ + "0.048973, 0.143889, 0.302016, 0.555346, 2.445574",\ + "0.056124, 0.147298, 0.303942, 0.555346, 2.445574",\ + "0.135119, 0.207795, 0.342920, 0.559922, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.074318, 0.127023, 0.181661, 0.269150, 0.901570",\ + "0.135238, 0.187941, 0.242461, 0.329766, 0.964295",\ + "0.278249, 0.331631, 0.386036, 0.473153, 1.104683",\ + "0.313722, 0.367652, 0.422063, 0.509190, 1.140690",\ + "0.637044, 0.700813, 0.755435, 0.842904, 1.478811"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.022299, 0.090049, 0.186120, 0.340034, 1.494292",\ + "0.022299, 0.090163, 0.186120, 0.340034, 1.494292",\ + "0.024376, 0.090410, 0.186120, 0.340034, 1.494292",\ + "0.025559, 0.090772, 0.186120, 0.340034, 1.494292",\ + "0.043338, 0.097514, 0.190357, 0.340034, 1.494292"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[15]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.054627, 0.128254, 0.213264, 0.349398, 1.341047",\ + "0.111446, 0.185285, 0.270053, 0.405814, 1.402083",\ + "0.250051, 0.333480, 0.418189, 0.553854, 1.548154",\ + "0.283766, 0.371624, 0.456253, 0.591793, 1.586834",\ + "0.584903, 0.727700, 0.813314, 0.950396, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.026420, 0.137079, 0.296653, 0.551706, 2.441059",\ + "0.027606, 0.137424, 0.296653, 0.551706, 2.442441",\ + "0.048973, 0.143889, 0.302016, 0.554928, 2.445574",\ + "0.056124, 0.147298, 0.303942, 0.554928, 2.445574",\ + "0.135119, 0.207795, 0.342920, 0.559922, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.074318, 0.127023, 0.181661, 0.269150, 0.901570",\ + "0.135238, 0.187941, 0.242461, 0.329766, 0.964295",\ + "0.278249, 0.331631, 0.386036, 0.473153, 1.104683",\ + "0.313722, 0.367652, 0.422063, 0.509190, 1.140690",\ + "0.637044, 0.700813, 0.755435, 0.842904, 1.478811"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.022299, 0.090049, 0.185649, 0.338251, 1.490219",\ + "0.022299, 0.090163, 0.185649, 0.338251, 1.490219",\ + "0.024376, 0.090410, 0.185649, 0.338251, 1.490219",\ + "0.025559, 0.090772, 0.185933, 0.338414, 1.490219",\ + "0.043338, 0.097514, 0.190357, 0.339166, 1.490219"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[15]_redg_min*/ + +} /* end of pin alert_req_o[15] */ + +pin("alert_req_o[14]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.634048 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001149 ; + + /* Other user defined attributes. */ + original_pin : alert_req_o[14]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.055384, 0.128593, 0.213603, 0.349733, 1.341047",\ + "0.112211, 0.185623, 0.270391, 0.406151, 1.402083",\ + "0.251189, 0.333817, 0.418527, 0.554191, 1.548154",\ + "0.285031, 0.371962, 0.456591, 0.592129, 1.586834",\ + "0.587490, 0.728041, 0.813655, 0.950730, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.027116, 0.137715, 0.297295, 0.552903, 2.441059",\ + "0.028270, 0.138058, 0.297295, 0.552903, 2.442441",\ + "0.049599, 0.144519, 0.302646, 0.555988, 2.445574",\ + "0.056771, 0.147922, 0.304566, 0.555988, 2.445574",\ + "0.136105, 0.208333, 0.343458, 0.560560, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.074922, 0.127232, 0.181871, 0.269356, 0.901561",\ + "0.135837, 0.188150, 0.242670, 0.329973, 0.964286",\ + "0.278886, 0.331840, 0.386244, 0.473358, 1.104675",\ + "0.314388, 0.367860, 0.422271, 0.509395, 1.140682",\ + "0.638051, 0.701022, 0.755644, 0.843111, 1.478802"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.022737, 0.090417, 0.186489, 0.340409, 1.494277",\ + "0.022756, 0.090531, 0.186489, 0.340409, 1.494277",\ + "0.024833, 0.090775, 0.186489, 0.340409, 1.494277",\ + "0.025999, 0.091137, 0.186489, 0.340409, 1.494277",\ + "0.043741, 0.097870, 0.190712, 0.340409, 1.494277"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[14]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.055384, 0.128593, 0.213603, 0.349733, 1.341047",\ + "0.112211, 0.185623, 0.270391, 0.406151, 1.402083",\ + "0.251189, 0.333817, 0.418527, 0.554191, 1.548154",\ + "0.285031, 0.371962, 0.456591, 0.592129, 1.586834",\ + "0.587490, 0.728041, 0.813655, 0.950730, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.027116, 0.137715, 0.297287, 0.552346, 2.441059",\ + "0.028270, 0.138058, 0.297287, 0.552346, 2.442441",\ + "0.049599, 0.144519, 0.302646, 0.555570, 2.445574",\ + "0.056771, 0.147922, 0.304566, 0.555570, 2.445574",\ + "0.136105, 0.208333, 0.343458, 0.560560, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.074922, 0.127232, 0.181871, 0.269356, 0.901561",\ + "0.135837, 0.188150, 0.242670, 0.329973, 0.964286",\ + "0.278886, 0.331840, 0.386244, 0.473358, 1.104675",\ + "0.314388, 0.367860, 0.422271, 0.509395, 1.140682",\ + "0.638051, 0.701022, 0.755644, 0.843111, 1.478802"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.022737, 0.090417, 0.186014, 0.338627, 1.490204",\ + "0.022756, 0.090531, 0.186014, 0.338627, 1.490204",\ + "0.024833, 0.090775, 0.186014, 0.338627, 1.490204",\ + "0.025999, 0.091137, 0.186298, 0.338790, 1.490204",\ + "0.043741, 0.097870, 0.190712, 0.339540, 1.490204"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[14]_redg_min*/ + +} /* end of pin alert_req_o[14] */ + +pin("alert_req_o[13]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.634048 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000982 ; + + /* Other user defined attributes. */ + original_pin : alert_req_o[13]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.054627, 0.128254, 0.213264, 0.349398, 1.341047",\ + "0.111446, 0.185285, 0.270053, 0.405814, 1.402083",\ + "0.250051, 0.333480, 0.418189, 0.553854, 1.548154",\ + "0.283766, 0.371624, 0.456253, 0.591793, 1.586834",\ + "0.584903, 0.727700, 0.813314, 0.950396, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.026420, 0.137079, 0.296659, 0.552264, 2.441059",\ + "0.027606, 0.137424, 0.296659, 0.552264, 2.442441",\ + "0.048973, 0.143889, 0.302016, 0.555346, 2.445574",\ + "0.056124, 0.147298, 0.303942, 0.555346, 2.445574",\ + "0.135119, 0.207795, 0.342920, 0.559922, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.074318, 0.127023, 0.181661, 0.269150, 0.901570",\ + "0.135238, 0.187941, 0.242461, 0.329766, 0.964295",\ + "0.278249, 0.331631, 0.386036, 0.473153, 1.104683",\ + "0.313722, 0.367652, 0.422063, 0.509190, 1.140690",\ + "0.637044, 0.700813, 0.755435, 0.842904, 1.478811"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.022299, 0.090049, 0.186120, 0.340034, 1.494292",\ + "0.022299, 0.090163, 0.186120, 0.340034, 1.494292",\ + "0.024376, 0.090410, 0.186120, 0.340034, 1.494292",\ + "0.025559, 0.090772, 0.186120, 0.340034, 1.494292",\ + "0.043338, 0.097514, 0.190357, 0.340034, 1.494292"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[13]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.054627, 0.128254, 0.213264, 0.349398, 1.341047",\ + "0.111446, 0.185285, 0.270053, 0.405814, 1.402083",\ + "0.250051, 0.333480, 0.418189, 0.553854, 1.548154",\ + "0.283766, 0.371624, 0.456253, 0.591793, 1.586834",\ + "0.584903, 0.727700, 0.813314, 0.950396, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.026420, 0.137079, 0.296653, 0.551706, 2.441059",\ + "0.027606, 0.137424, 0.296653, 0.551706, 2.442441",\ + "0.048973, 0.143889, 0.302016, 0.554928, 2.445574",\ + "0.056124, 0.147298, 0.303942, 0.554928, 2.445574",\ + "0.135119, 0.207795, 0.342920, 0.559922, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.074318, 0.127023, 0.181661, 0.269150, 0.901570",\ + "0.135238, 0.187941, 0.242461, 0.329766, 0.964295",\ + "0.278249, 0.331631, 0.386036, 0.473153, 1.104683",\ + "0.313722, 0.367652, 0.422063, 0.509190, 1.140690",\ + "0.637044, 0.700813, 0.755435, 0.842904, 1.478811"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.022299, 0.090049, 0.185649, 0.338251, 1.490219",\ + "0.022299, 0.090163, 0.185649, 0.338251, 1.490219",\ + "0.024376, 0.090410, 0.185649, 0.338251, 1.490219",\ + "0.025559, 0.090772, 0.185933, 0.338414, 1.490219",\ + "0.043338, 0.097514, 0.190357, 0.339166, 1.490219"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[13]_redg_min*/ + +} /* end of pin alert_req_o[13] */ + +pin("alert_req_o[12]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.634048 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001149 ; + + /* Other user defined attributes. */ + original_pin : alert_req_o[12]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.055384, 0.128593, 0.213603, 0.349733, 1.341047",\ + "0.112211, 0.185623, 0.270391, 0.406151, 1.402083",\ + "0.251189, 0.333817, 0.418527, 0.554191, 1.548154",\ + "0.285031, 0.371962, 0.456591, 0.592129, 1.586834",\ + "0.587490, 0.728041, 0.813655, 0.950730, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.027116, 0.137715, 0.297295, 0.552903, 2.441059",\ + "0.028270, 0.138058, 0.297295, 0.552903, 2.442441",\ + "0.049599, 0.144519, 0.302646, 0.555988, 2.445574",\ + "0.056771, 0.147922, 0.304566, 0.555988, 2.445574",\ + "0.136105, 0.208333, 0.343458, 0.560560, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.074922, 0.127232, 0.181871, 0.269356, 0.901561",\ + "0.135837, 0.188150, 0.242670, 0.329973, 0.964286",\ + "0.278886, 0.331840, 0.386244, 0.473358, 1.104675",\ + "0.314388, 0.367860, 0.422271, 0.509395, 1.140682",\ + "0.638051, 0.701022, 0.755644, 0.843111, 1.478802"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.022737, 0.090417, 0.186489, 0.340409, 1.494277",\ + "0.022756, 0.090531, 0.186489, 0.340409, 1.494277",\ + "0.024833, 0.090775, 0.186489, 0.340409, 1.494277",\ + "0.025999, 0.091137, 0.186489, 0.340409, 1.494277",\ + "0.043741, 0.097870, 0.190712, 0.340409, 1.494277"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[12]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.055384, 0.128593, 0.213603, 0.349733, 1.341047",\ + "0.112211, 0.185623, 0.270391, 0.406151, 1.402083",\ + "0.251189, 0.333817, 0.418527, 0.554191, 1.548154",\ + "0.285031, 0.371962, 0.456591, 0.592129, 1.586834",\ + "0.587490, 0.728041, 0.813655, 0.950730, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.027116, 0.137715, 0.297287, 0.552346, 2.441059",\ + "0.028270, 0.138058, 0.297287, 0.552346, 2.442441",\ + "0.049599, 0.144519, 0.302646, 0.555570, 2.445574",\ + "0.056771, 0.147922, 0.304566, 0.555570, 2.445574",\ + "0.136105, 0.208333, 0.343458, 0.560560, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.074922, 0.127232, 0.181871, 0.269356, 0.901561",\ + "0.135837, 0.188150, 0.242670, 0.329973, 0.964286",\ + "0.278886, 0.331840, 0.386244, 0.473358, 1.104675",\ + "0.314388, 0.367860, 0.422271, 0.509395, 1.140682",\ + "0.638051, 0.701022, 0.755644, 0.843111, 1.478802"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.022737, 0.090417, 0.186014, 0.338627, 1.490204",\ + "0.022756, 0.090531, 0.186014, 0.338627, 1.490204",\ + "0.024833, 0.090775, 0.186014, 0.338627, 1.490204",\ + "0.025999, 0.091137, 0.186298, 0.338790, 1.490204",\ + "0.043741, 0.097870, 0.190712, 0.339540, 1.490204"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[12]_redg_min*/ + +} /* end of pin alert_req_o[12] */ + +pin("alert_req_o[11]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.634048 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000982 ; + + /* Other user defined attributes. */ + original_pin : alert_req_o[11]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.054627, 0.128254, 0.213264, 0.349398, 1.341047",\ + "0.111446, 0.185285, 0.270053, 0.405814, 1.402083",\ + "0.250051, 0.333480, 0.418189, 0.553854, 1.548154",\ + "0.283766, 0.371624, 0.456253, 0.591793, 1.586834",\ + "0.584903, 0.727700, 0.813314, 0.950396, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.026420, 0.137079, 0.296659, 0.552264, 2.441059",\ + "0.027606, 0.137424, 0.296659, 0.552264, 2.442441",\ + "0.048973, 0.143889, 0.302016, 0.555346, 2.445574",\ + "0.056124, 0.147298, 0.303942, 0.555346, 2.445574",\ + "0.135119, 0.207795, 0.342920, 0.559922, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.074318, 0.127023, 0.181661, 0.269150, 0.901570",\ + "0.135238, 0.187941, 0.242461, 0.329766, 0.964295",\ + "0.278249, 0.331631, 0.386036, 0.473153, 1.104683",\ + "0.313722, 0.367652, 0.422063, 0.509190, 1.140690",\ + "0.637044, 0.700813, 0.755435, 0.842904, 1.478811"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.022299, 0.090049, 0.186120, 0.340034, 1.494292",\ + "0.022299, 0.090163, 0.186120, 0.340034, 1.494292",\ + "0.024376, 0.090410, 0.186120, 0.340034, 1.494292",\ + "0.025559, 0.090772, 0.186120, 0.340034, 1.494292",\ + "0.043338, 0.097514, 0.190357, 0.340034, 1.494292"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[11]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.054627, 0.128254, 0.213264, 0.349398, 1.341047",\ + "0.111446, 0.185285, 0.270053, 0.405814, 1.402083",\ + "0.250051, 0.333480, 0.418189, 0.553854, 1.548154",\ + "0.283766, 0.371624, 0.456253, 0.591793, 1.586834",\ + "0.584903, 0.727700, 0.813314, 0.950396, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.026420, 0.137079, 0.296653, 0.551706, 2.441059",\ + "0.027606, 0.137424, 0.296653, 0.551706, 2.442441",\ + "0.048973, 0.143889, 0.302016, 0.554928, 2.445574",\ + "0.056124, 0.147298, 0.303942, 0.554928, 2.445574",\ + "0.135119, 0.207795, 0.342920, 0.559922, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.074318, 0.127023, 0.181661, 0.269150, 0.901570",\ + "0.135238, 0.187941, 0.242461, 0.329766, 0.964295",\ + "0.278249, 0.331631, 0.386036, 0.473153, 1.104683",\ + "0.313722, 0.367652, 0.422063, 0.509190, 1.140690",\ + "0.637044, 0.700813, 0.755435, 0.842904, 1.478811"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.022299, 0.090049, 0.185649, 0.338251, 1.490219",\ + "0.022299, 0.090163, 0.185649, 0.338251, 1.490219",\ + "0.024376, 0.090410, 0.185649, 0.338251, 1.490219",\ + "0.025559, 0.090772, 0.185933, 0.338414, 1.490219",\ + "0.043338, 0.097514, 0.190357, 0.339166, 1.490219"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[11]_redg_min*/ + +} /* end of pin alert_req_o[11] */ + +pin("alert_req_o[10]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.634048 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001149 ; + + /* Other user defined attributes. */ + original_pin : alert_req_o[10]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.055384, 0.128593, 0.213603, 0.349733, 1.341047",\ + "0.112211, 0.185623, 0.270391, 0.406151, 1.402083",\ + "0.251189, 0.333817, 0.418527, 0.554191, 1.548154",\ + "0.285031, 0.371962, 0.456591, 0.592129, 1.586834",\ + "0.587490, 0.728041, 0.813655, 0.950730, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.027116, 0.137715, 0.297295, 0.552903, 2.441059",\ + "0.028270, 0.138058, 0.297295, 0.552903, 2.442441",\ + "0.049599, 0.144519, 0.302646, 0.555988, 2.445574",\ + "0.056771, 0.147922, 0.304566, 0.555988, 2.445574",\ + "0.136105, 0.208333, 0.343458, 0.560560, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.074922, 0.127232, 0.181871, 0.269356, 0.901561",\ + "0.135837, 0.188150, 0.242670, 0.329973, 0.964286",\ + "0.278886, 0.331840, 0.386244, 0.473358, 1.104675",\ + "0.314388, 0.367860, 0.422271, 0.509395, 1.140682",\ + "0.638051, 0.701022, 0.755644, 0.843111, 1.478802"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.022737, 0.090417, 0.186489, 0.340409, 1.494277",\ + "0.022756, 0.090531, 0.186489, 0.340409, 1.494277",\ + "0.024833, 0.090775, 0.186489, 0.340409, 1.494277",\ + "0.025999, 0.091137, 0.186489, 0.340409, 1.494277",\ + "0.043741, 0.097870, 0.190712, 0.340409, 1.494277"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[10]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.055384, 0.128593, 0.213603, 0.349733, 1.341047",\ + "0.112211, 0.185623, 0.270391, 0.406151, 1.402083",\ + "0.251189, 0.333817, 0.418527, 0.554191, 1.548154",\ + "0.285031, 0.371962, 0.456591, 0.592129, 1.586834",\ + "0.587490, 0.728041, 0.813655, 0.950730, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.027116, 0.137715, 0.297287, 0.552346, 2.441059",\ + "0.028270, 0.138058, 0.297287, 0.552346, 2.442441",\ + "0.049599, 0.144519, 0.302646, 0.555570, 2.445574",\ + "0.056771, 0.147922, 0.304566, 0.555570, 2.445574",\ + "0.136105, 0.208333, 0.343458, 0.560560, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.074922, 0.127232, 0.181871, 0.269356, 0.901561",\ + "0.135837, 0.188150, 0.242670, 0.329973, 0.964286",\ + "0.278886, 0.331840, 0.386244, 0.473358, 1.104675",\ + "0.314388, 0.367860, 0.422271, 0.509395, 1.140682",\ + "0.638051, 0.701022, 0.755644, 0.843111, 1.478802"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.022737, 0.090417, 0.186014, 0.338627, 1.490204",\ + "0.022756, 0.090531, 0.186014, 0.338627, 1.490204",\ + "0.024833, 0.090775, 0.186014, 0.338627, 1.490204",\ + "0.025999, 0.091137, 0.186298, 0.338790, 1.490204",\ + "0.043741, 0.097870, 0.190712, 0.339540, 1.490204"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[10]_redg_min*/ + +} /* end of pin alert_req_o[10] */ + +pin("alert_req_o[9]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.634048 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000982 ; + + /* Other user defined attributes. */ + original_pin : alert_req_o[9]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.054627, 0.128254, 0.213264, 0.349398, 1.341047",\ + "0.111446, 0.185285, 0.270053, 0.405814, 1.402083",\ + "0.250051, 0.333480, 0.418189, 0.553854, 1.548154",\ + "0.283766, 0.371624, 0.456253, 0.591793, 1.586834",\ + "0.584903, 0.727700, 0.813314, 0.950396, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.026420, 0.137079, 0.296659, 0.552264, 2.441059",\ + "0.027606, 0.137424, 0.296659, 0.552264, 2.442441",\ + "0.048973, 0.143889, 0.302016, 0.555346, 2.445574",\ + "0.056124, 0.147298, 0.303942, 0.555346, 2.445574",\ + "0.135119, 0.207795, 0.342920, 0.559922, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.074318, 0.127023, 0.181661, 0.269150, 0.901570",\ + "0.135238, 0.187941, 0.242461, 0.329766, 0.964295",\ + "0.278249, 0.331631, 0.386036, 0.473153, 1.104683",\ + "0.313722, 0.367652, 0.422063, 0.509190, 1.140690",\ + "0.637044, 0.700813, 0.755435, 0.842904, 1.478811"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.022299, 0.090049, 0.186120, 0.340034, 1.494292",\ + "0.022299, 0.090163, 0.186120, 0.340034, 1.494292",\ + "0.024376, 0.090410, 0.186120, 0.340034, 1.494292",\ + "0.025559, 0.090772, 0.186120, 0.340034, 1.494292",\ + "0.043338, 0.097514, 0.190357, 0.340034, 1.494292"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[9]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.054627, 0.128254, 0.213264, 0.349398, 1.341047",\ + "0.111446, 0.185285, 0.270053, 0.405814, 1.402083",\ + "0.250051, 0.333480, 0.418189, 0.553854, 1.548154",\ + "0.283766, 0.371624, 0.456253, 0.591793, 1.586834",\ + "0.584903, 0.727700, 0.813314, 0.950396, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.026420, 0.137079, 0.296653, 0.551706, 2.441059",\ + "0.027606, 0.137424, 0.296653, 0.551706, 2.442441",\ + "0.048973, 0.143889, 0.302016, 0.554928, 2.445574",\ + "0.056124, 0.147298, 0.303942, 0.554928, 2.445574",\ + "0.135119, 0.207795, 0.342920, 0.559922, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.074318, 0.127023, 0.181661, 0.269150, 0.901570",\ + "0.135238, 0.187941, 0.242461, 0.329766, 0.964295",\ + "0.278249, 0.331631, 0.386036, 0.473153, 1.104683",\ + "0.313722, 0.367652, 0.422063, 0.509190, 1.140690",\ + "0.637044, 0.700813, 0.755435, 0.842904, 1.478811"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.022299, 0.090049, 0.185649, 0.338251, 1.490219",\ + "0.022299, 0.090163, 0.185649, 0.338251, 1.490219",\ + "0.024376, 0.090410, 0.185649, 0.338251, 1.490219",\ + "0.025559, 0.090772, 0.185933, 0.338414, 1.490219",\ + "0.043338, 0.097514, 0.190357, 0.339166, 1.490219"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[9]_redg_min*/ + +} /* end of pin alert_req_o[9] */ + +pin("alert_req_o[8]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.634048 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001149 ; + + /* Other user defined attributes. */ + original_pin : alert_req_o[8]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.055384, 0.128593, 0.213603, 0.349733, 1.341047",\ + "0.112211, 0.185623, 0.270391, 0.406151, 1.402083",\ + "0.251189, 0.333817, 0.418527, 0.554191, 1.548154",\ + "0.285031, 0.371962, 0.456591, 0.592129, 1.586834",\ + "0.587490, 0.728041, 0.813655, 0.950730, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.027116, 0.137715, 0.297295, 0.552903, 2.441059",\ + "0.028270, 0.138058, 0.297295, 0.552903, 2.442441",\ + "0.049599, 0.144519, 0.302646, 0.555988, 2.445574",\ + "0.056771, 0.147922, 0.304566, 0.555988, 2.445574",\ + "0.136105, 0.208333, 0.343458, 0.560560, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.074922, 0.127232, 0.181871, 0.269356, 0.901561",\ + "0.135837, 0.188150, 0.242670, 0.329973, 0.964286",\ + "0.278886, 0.331840, 0.386244, 0.473358, 1.104675",\ + "0.314388, 0.367860, 0.422271, 0.509395, 1.140682",\ + "0.638051, 0.701022, 0.755644, 0.843111, 1.478802"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.022737, 0.090417, 0.186489, 0.340409, 1.494277",\ + "0.022756, 0.090531, 0.186489, 0.340409, 1.494277",\ + "0.024833, 0.090775, 0.186489, 0.340409, 1.494277",\ + "0.025999, 0.091137, 0.186489, 0.340409, 1.494277",\ + "0.043741, 0.097870, 0.190712, 0.340409, 1.494277"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[8]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.055384, 0.128593, 0.213603, 0.349733, 1.341047",\ + "0.112211, 0.185623, 0.270391, 0.406151, 1.402083",\ + "0.251189, 0.333817, 0.418527, 0.554191, 1.548154",\ + "0.285031, 0.371962, 0.456591, 0.592129, 1.586834",\ + "0.587490, 0.728041, 0.813655, 0.950730, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.027116, 0.137715, 0.297287, 0.552346, 2.441059",\ + "0.028270, 0.138058, 0.297287, 0.552346, 2.442441",\ + "0.049599, 0.144519, 0.302646, 0.555570, 2.445574",\ + "0.056771, 0.147922, 0.304566, 0.555570, 2.445574",\ + "0.136105, 0.208333, 0.343458, 0.560560, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.074922, 0.127232, 0.181871, 0.269356, 0.901561",\ + "0.135837, 0.188150, 0.242670, 0.329973, 0.964286",\ + "0.278886, 0.331840, 0.386244, 0.473358, 1.104675",\ + "0.314388, 0.367860, 0.422271, 0.509395, 1.140682",\ + "0.638051, 0.701022, 0.755644, 0.843111, 1.478802"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.022737, 0.090417, 0.186014, 0.338627, 1.490204",\ + "0.022756, 0.090531, 0.186014, 0.338627, 1.490204",\ + "0.024833, 0.090775, 0.186014, 0.338627, 1.490204",\ + "0.025999, 0.091137, 0.186298, 0.338790, 1.490204",\ + "0.043741, 0.097870, 0.190712, 0.339540, 1.490204"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[8]_redg_min*/ + +} /* end of pin alert_req_o[8] */ + +pin("alert_req_o[7]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.634048 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000982 ; + + /* Other user defined attributes. */ + original_pin : alert_req_o[7]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.054627, 0.128254, 0.213264, 0.349398, 1.341047",\ + "0.111446, 0.185285, 0.270053, 0.405814, 1.402083",\ + "0.250051, 0.333480, 0.418189, 0.553854, 1.548154",\ + "0.283766, 0.371624, 0.456253, 0.591793, 1.586834",\ + "0.584903, 0.727700, 0.813314, 0.950396, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.026420, 0.137079, 0.296659, 0.552264, 2.441059",\ + "0.027606, 0.137424, 0.296659, 0.552264, 2.442441",\ + "0.048973, 0.143889, 0.302016, 0.555346, 2.445574",\ + "0.056124, 0.147298, 0.303942, 0.555346, 2.445574",\ + "0.135119, 0.207795, 0.342920, 0.559922, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.074318, 0.127023, 0.181661, 0.269150, 0.901570",\ + "0.135238, 0.187941, 0.242461, 0.329766, 0.964295",\ + "0.278249, 0.331631, 0.386036, 0.473153, 1.104683",\ + "0.313722, 0.367652, 0.422063, 0.509190, 1.140690",\ + "0.637044, 0.700813, 0.755435, 0.842904, 1.478811"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.022299, 0.090049, 0.186120, 0.340034, 1.494292",\ + "0.022299, 0.090163, 0.186120, 0.340034, 1.494292",\ + "0.024376, 0.090410, 0.186120, 0.340034, 1.494292",\ + "0.025559, 0.090772, 0.186120, 0.340034, 1.494292",\ + "0.043338, 0.097514, 0.190357, 0.340034, 1.494292"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[7]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.054627, 0.128254, 0.213264, 0.349398, 1.341047",\ + "0.111446, 0.185285, 0.270053, 0.405814, 1.402083",\ + "0.250051, 0.333480, 0.418189, 0.553854, 1.548154",\ + "0.283766, 0.371624, 0.456253, 0.591793, 1.586834",\ + "0.584903, 0.727700, 0.813314, 0.950396, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.026420, 0.137079, 0.296653, 0.551706, 2.441059",\ + "0.027606, 0.137424, 0.296653, 0.551706, 2.442441",\ + "0.048973, 0.143889, 0.302016, 0.554928, 2.445574",\ + "0.056124, 0.147298, 0.303942, 0.554928, 2.445574",\ + "0.135119, 0.207795, 0.342920, 0.559922, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.074318, 0.127023, 0.181661, 0.269150, 0.901570",\ + "0.135238, 0.187941, 0.242461, 0.329766, 0.964295",\ + "0.278249, 0.331631, 0.386036, 0.473153, 1.104683",\ + "0.313722, 0.367652, 0.422063, 0.509190, 1.140690",\ + "0.637044, 0.700813, 0.755435, 0.842904, 1.478811"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.022299, 0.090049, 0.185649, 0.338251, 1.490219",\ + "0.022299, 0.090163, 0.185649, 0.338251, 1.490219",\ + "0.024376, 0.090410, 0.185649, 0.338251, 1.490219",\ + "0.025559, 0.090772, 0.185933, 0.338414, 1.490219",\ + "0.043338, 0.097514, 0.190357, 0.339166, 1.490219"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[7]_redg_min*/ + +} /* end of pin alert_req_o[7] */ + +pin("alert_req_o[6]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.634048 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001149 ; + + /* Other user defined attributes. */ + original_pin : alert_req_o[6]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.055384, 0.128593, 0.213603, 0.349733, 1.341047",\ + "0.112211, 0.185623, 0.270391, 0.406151, 1.402083",\ + "0.251189, 0.333817, 0.418527, 0.554191, 1.548154",\ + "0.285031, 0.371962, 0.456591, 0.592129, 1.586834",\ + "0.587490, 0.728041, 0.813655, 0.950730, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.027116, 0.137715, 0.297295, 0.552903, 2.441059",\ + "0.028270, 0.138058, 0.297295, 0.552903, 2.442441",\ + "0.049599, 0.144519, 0.302646, 0.555988, 2.445574",\ + "0.056771, 0.147922, 0.304566, 0.555988, 2.445574",\ + "0.136105, 0.208333, 0.343458, 0.560560, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.074922, 0.127232, 0.181871, 0.269356, 0.901561",\ + "0.135837, 0.188150, 0.242670, 0.329973, 0.964286",\ + "0.278886, 0.331840, 0.386244, 0.473358, 1.104675",\ + "0.314388, 0.367860, 0.422271, 0.509395, 1.140682",\ + "0.638051, 0.701022, 0.755644, 0.843111, 1.478802"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.022737, 0.090417, 0.186489, 0.340409, 1.494277",\ + "0.022756, 0.090531, 0.186489, 0.340409, 1.494277",\ + "0.024833, 0.090775, 0.186489, 0.340409, 1.494277",\ + "0.025999, 0.091137, 0.186489, 0.340409, 1.494277",\ + "0.043741, 0.097870, 0.190712, 0.340409, 1.494277"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[6]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.055384, 0.128593, 0.213603, 0.349733, 1.341047",\ + "0.112211, 0.185623, 0.270391, 0.406151, 1.402083",\ + "0.251189, 0.333817, 0.418527, 0.554191, 1.548154",\ + "0.285031, 0.371962, 0.456591, 0.592129, 1.586834",\ + "0.587490, 0.728041, 0.813655, 0.950730, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.027116, 0.137715, 0.297287, 0.552346, 2.441059",\ + "0.028270, 0.138058, 0.297287, 0.552346, 2.442441",\ + "0.049599, 0.144519, 0.302646, 0.555570, 2.445574",\ + "0.056771, 0.147922, 0.304566, 0.555570, 2.445574",\ + "0.136105, 0.208333, 0.343458, 0.560560, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.074922, 0.127232, 0.181871, 0.269356, 0.901561",\ + "0.135837, 0.188150, 0.242670, 0.329973, 0.964286",\ + "0.278886, 0.331840, 0.386244, 0.473358, 1.104675",\ + "0.314388, 0.367860, 0.422271, 0.509395, 1.140682",\ + "0.638051, 0.701022, 0.755644, 0.843111, 1.478802"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.022737, 0.090417, 0.186014, 0.338627, 1.490204",\ + "0.022756, 0.090531, 0.186014, 0.338627, 1.490204",\ + "0.024833, 0.090775, 0.186014, 0.338627, 1.490204",\ + "0.025999, 0.091137, 0.186298, 0.338790, 1.490204",\ + "0.043741, 0.097870, 0.190712, 0.339540, 1.490204"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[6]_redg_min*/ + +} /* end of pin alert_req_o[6] */ + +pin("alert_req_o[5]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.634048 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000982 ; + + /* Other user defined attributes. */ + original_pin : alert_req_o[5]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.054627, 0.128254, 0.213264, 0.349398, 1.341047",\ + "0.111446, 0.185285, 0.270053, 0.405814, 1.402083",\ + "0.250051, 0.333480, 0.418189, 0.553854, 1.548154",\ + "0.283766, 0.371624, 0.456253, 0.591793, 1.586834",\ + "0.584903, 0.727700, 0.813314, 0.950396, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.026420, 0.137079, 0.296659, 0.552264, 2.441059",\ + "0.027606, 0.137424, 0.296659, 0.552264, 2.442441",\ + "0.048973, 0.143889, 0.302016, 0.555346, 2.445574",\ + "0.056124, 0.147298, 0.303942, 0.555346, 2.445574",\ + "0.135119, 0.207795, 0.342920, 0.559922, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.074318, 0.127023, 0.181661, 0.269150, 0.901570",\ + "0.135238, 0.187941, 0.242461, 0.329766, 0.964295",\ + "0.278249, 0.331631, 0.386036, 0.473153, 1.104683",\ + "0.313722, 0.367652, 0.422063, 0.509190, 1.140690",\ + "0.637044, 0.700813, 0.755435, 0.842904, 1.478811"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.022299, 0.090049, 0.186120, 0.340034, 1.494292",\ + "0.022299, 0.090163, 0.186120, 0.340034, 1.494292",\ + "0.024376, 0.090410, 0.186120, 0.340034, 1.494292",\ + "0.025559, 0.090772, 0.186120, 0.340034, 1.494292",\ + "0.043338, 0.097514, 0.190357, 0.340034, 1.494292"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[5]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.054627, 0.128254, 0.213264, 0.349398, 1.341047",\ + "0.111446, 0.185285, 0.270053, 0.405814, 1.402083",\ + "0.250051, 0.333480, 0.418189, 0.553854, 1.548154",\ + "0.283766, 0.371624, 0.456253, 0.591793, 1.586834",\ + "0.584903, 0.727700, 0.813314, 0.950396, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.026420, 0.137079, 0.296653, 0.551706, 2.441059",\ + "0.027606, 0.137424, 0.296653, 0.551706, 2.442441",\ + "0.048973, 0.143889, 0.302016, 0.554928, 2.445574",\ + "0.056124, 0.147298, 0.303942, 0.554928, 2.445574",\ + "0.135119, 0.207795, 0.342920, 0.559922, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.074318, 0.127023, 0.181661, 0.269150, 0.901570",\ + "0.135238, 0.187941, 0.242461, 0.329766, 0.964295",\ + "0.278249, 0.331631, 0.386036, 0.473153, 1.104683",\ + "0.313722, 0.367652, 0.422063, 0.509190, 1.140690",\ + "0.637044, 0.700813, 0.755435, 0.842904, 1.478811"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.022299, 0.090049, 0.185649, 0.338251, 1.490219",\ + "0.022299, 0.090163, 0.185649, 0.338251, 1.490219",\ + "0.024376, 0.090410, 0.185649, 0.338251, 1.490219",\ + "0.025559, 0.090772, 0.185933, 0.338414, 1.490219",\ + "0.043338, 0.097514, 0.190357, 0.339166, 1.490219"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[5]_redg_min*/ + +} /* end of pin alert_req_o[5] */ + +pin("alert_req_o[4]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.634048 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001149 ; + + /* Other user defined attributes. */ + original_pin : alert_req_o[4]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.055384, 0.128593, 0.213603, 0.349733, 1.341047",\ + "0.112211, 0.185623, 0.270391, 0.406151, 1.402083",\ + "0.251189, 0.333817, 0.418527, 0.554191, 1.548154",\ + "0.285031, 0.371962, 0.456591, 0.592129, 1.586834",\ + "0.587490, 0.728041, 0.813655, 0.950730, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.027116, 0.137715, 0.297295, 0.552903, 2.441059",\ + "0.028270, 0.138058, 0.297295, 0.552903, 2.442441",\ + "0.049599, 0.144519, 0.302646, 0.555988, 2.445574",\ + "0.056771, 0.147922, 0.304566, 0.555988, 2.445574",\ + "0.136105, 0.208333, 0.343458, 0.560560, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.074922, 0.127232, 0.181871, 0.269356, 0.901561",\ + "0.135837, 0.188150, 0.242670, 0.329973, 0.964286",\ + "0.278886, 0.331840, 0.386244, 0.473358, 1.104675",\ + "0.314388, 0.367860, 0.422271, 0.509395, 1.140682",\ + "0.638051, 0.701022, 0.755644, 0.843111, 1.478802"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.022737, 0.090417, 0.186489, 0.340409, 1.494277",\ + "0.022756, 0.090531, 0.186489, 0.340409, 1.494277",\ + "0.024833, 0.090775, 0.186489, 0.340409, 1.494277",\ + "0.025999, 0.091137, 0.186489, 0.340409, 1.494277",\ + "0.043741, 0.097870, 0.190712, 0.340409, 1.494277"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[4]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.055384, 0.128593, 0.213603, 0.349733, 1.341047",\ + "0.112211, 0.185623, 0.270391, 0.406151, 1.402083",\ + "0.251189, 0.333817, 0.418527, 0.554191, 1.548154",\ + "0.285031, 0.371962, 0.456591, 0.592129, 1.586834",\ + "0.587490, 0.728041, 0.813655, 0.950730, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.027116, 0.137715, 0.297287, 0.552346, 2.441059",\ + "0.028270, 0.138058, 0.297287, 0.552346, 2.442441",\ + "0.049599, 0.144519, 0.302646, 0.555570, 2.445574",\ + "0.056771, 0.147922, 0.304566, 0.555570, 2.445574",\ + "0.136105, 0.208333, 0.343458, 0.560560, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.074922, 0.127232, 0.181871, 0.269356, 0.901561",\ + "0.135837, 0.188150, 0.242670, 0.329973, 0.964286",\ + "0.278886, 0.331840, 0.386244, 0.473358, 1.104675",\ + "0.314388, 0.367860, 0.422271, 0.509395, 1.140682",\ + "0.638051, 0.701022, 0.755644, 0.843111, 1.478802"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.022737, 0.090417, 0.186014, 0.338627, 1.490204",\ + "0.022756, 0.090531, 0.186014, 0.338627, 1.490204",\ + "0.024833, 0.090775, 0.186014, 0.338627, 1.490204",\ + "0.025999, 0.091137, 0.186298, 0.338790, 1.490204",\ + "0.043741, 0.097870, 0.190712, 0.339540, 1.490204"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[4]_redg_min*/ + +} /* end of pin alert_req_o[4] */ + +pin("alert_req_o[3]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.634048 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000982 ; + + /* Other user defined attributes. */ + original_pin : alert_req_o[3]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.054627, 0.128254, 0.213264, 0.349398, 1.341047",\ + "0.111446, 0.185285, 0.270053, 0.405814, 1.402083",\ + "0.250051, 0.333480, 0.418189, 0.553854, 1.548154",\ + "0.283766, 0.371624, 0.456253, 0.591793, 1.586834",\ + "0.584903, 0.727700, 0.813314, 0.950396, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.026420, 0.137079, 0.296659, 0.552264, 2.441059",\ + "0.027606, 0.137424, 0.296659, 0.552264, 2.442441",\ + "0.048973, 0.143889, 0.302016, 0.555346, 2.445574",\ + "0.056124, 0.147298, 0.303942, 0.555346, 2.445574",\ + "0.135119, 0.207795, 0.342920, 0.559922, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.074318, 0.127023, 0.181661, 0.269150, 0.901570",\ + "0.135238, 0.187941, 0.242461, 0.329766, 0.964295",\ + "0.278249, 0.331631, 0.386036, 0.473153, 1.104683",\ + "0.313722, 0.367652, 0.422063, 0.509190, 1.140690",\ + "0.637044, 0.700813, 0.755435, 0.842904, 1.478811"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.022299, 0.090049, 0.186120, 0.340034, 1.494292",\ + "0.022299, 0.090163, 0.186120, 0.340034, 1.494292",\ + "0.024376, 0.090410, 0.186120, 0.340034, 1.494292",\ + "0.025559, 0.090772, 0.186120, 0.340034, 1.494292",\ + "0.043338, 0.097514, 0.190357, 0.340034, 1.494292"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[3]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.054627, 0.128254, 0.213264, 0.349398, 1.341047",\ + "0.111446, 0.185285, 0.270053, 0.405814, 1.402083",\ + "0.250051, 0.333480, 0.418189, 0.553854, 1.548154",\ + "0.283766, 0.371624, 0.456253, 0.591793, 1.586834",\ + "0.584903, 0.727700, 0.813314, 0.950396, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.026420, 0.137079, 0.296653, 0.551706, 2.441059",\ + "0.027606, 0.137424, 0.296653, 0.551706, 2.442441",\ + "0.048973, 0.143889, 0.302016, 0.554928, 2.445574",\ + "0.056124, 0.147298, 0.303942, 0.554928, 2.445574",\ + "0.135119, 0.207795, 0.342920, 0.559922, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.074318, 0.127023, 0.181661, 0.269150, 0.901570",\ + "0.135238, 0.187941, 0.242461, 0.329766, 0.964295",\ + "0.278249, 0.331631, 0.386036, 0.473153, 1.104683",\ + "0.313722, 0.367652, 0.422063, 0.509190, 1.140690",\ + "0.637044, 0.700813, 0.755435, 0.842904, 1.478811"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.031162, 0.073075, 0.140203, 0.634048"); + values ( "0.022299, 0.090049, 0.185649, 0.338251, 1.490219",\ + "0.022299, 0.090163, 0.185649, 0.338251, 1.490219",\ + "0.024376, 0.090410, 0.185649, 0.338251, 1.490219",\ + "0.025559, 0.090772, 0.185933, 0.338414, 1.490219",\ + "0.043338, 0.097514, 0.190357, 0.339166, 1.490219"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[3]_redg_min*/ + +} /* end of pin alert_req_o[3] */ + +pin("alert_req_o[2]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.634048 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001149 ; + + /* Other user defined attributes. */ + original_pin : alert_req_o[2]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.055384, 0.128593, 0.213603, 0.349733, 1.341047",\ + "0.112211, 0.185623, 0.270391, 0.406151, 1.402083",\ + "0.251189, 0.333817, 0.418527, 0.554191, 1.548154",\ + "0.285031, 0.371962, 0.456591, 0.592129, 1.586834",\ + "0.587490, 0.728041, 0.813655, 0.950730, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.027116, 0.137715, 0.297295, 0.552903, 2.441059",\ + "0.028270, 0.138058, 0.297295, 0.552903, 2.442441",\ + "0.049599, 0.144519, 0.302646, 0.555988, 2.445574",\ + "0.056771, 0.147922, 0.304566, 0.555988, 2.445574",\ + "0.136105, 0.208333, 0.343458, 0.560560, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.074922, 0.127232, 0.181871, 0.269356, 0.901561",\ + "0.135837, 0.188150, 0.242670, 0.329973, 0.964286",\ + "0.278886, 0.331840, 0.386244, 0.473358, 1.104675",\ + "0.314388, 0.367860, 0.422271, 0.509395, 1.140682",\ + "0.638051, 0.701022, 0.755644, 0.843111, 1.478802"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.022737, 0.090417, 0.186489, 0.340409, 1.494277",\ + "0.022756, 0.090531, 0.186489, 0.340409, 1.494277",\ + "0.024833, 0.090775, 0.186489, 0.340409, 1.494277",\ + "0.025999, 0.091137, 0.186489, 0.340409, 1.494277",\ + "0.043741, 0.097870, 0.190712, 0.340409, 1.494277"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[2]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.055384, 0.128593, 0.213603, 0.349733, 1.341047",\ + "0.112211, 0.185623, 0.270391, 0.406151, 1.402083",\ + "0.251189, 0.333817, 0.418527, 0.554191, 1.548154",\ + "0.285031, 0.371962, 0.456591, 0.592129, 1.586834",\ + "0.587490, 0.728041, 0.813655, 0.950730, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.027116, 0.137715, 0.297287, 0.552346, 2.441059",\ + "0.028270, 0.138058, 0.297287, 0.552346, 2.442441",\ + "0.049599, 0.144519, 0.302646, 0.555570, 2.445574",\ + "0.056771, 0.147922, 0.304566, 0.555570, 2.445574",\ + "0.136105, 0.208333, 0.343458, 0.560560, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.074922, 0.127232, 0.181871, 0.269356, 0.901561",\ + "0.135837, 0.188150, 0.242670, 0.329973, 0.964286",\ + "0.278886, 0.331840, 0.386244, 0.473358, 1.104675",\ + "0.314388, 0.367860, 0.422271, 0.509395, 1.140682",\ + "0.638051, 0.701022, 0.755644, 0.843111, 1.478802"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001149, 0.031329, 0.073242, 0.140370, 0.634048"); + values ( "0.022737, 0.090417, 0.186014, 0.338627, 1.490204",\ + "0.022756, 0.090531, 0.186014, 0.338627, 1.490204",\ + "0.024833, 0.090775, 0.186014, 0.338627, 1.490204",\ + "0.025999, 0.091137, 0.186298, 0.338790, 1.490204",\ + "0.043741, 0.097870, 0.190712, 0.339540, 1.490204"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[2]_redg_min*/ + +} /* end of pin alert_req_o[2] */ + +pin("alert_req_o[1]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.634048 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001011 ; + + /* Other user defined attributes. */ + original_pin : alert_req_o[1]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001011, 0.031191, 0.073104, 0.140232, 0.634048"); + values ( "0.054759, 0.128313, 0.213323, 0.349457, 1.341047",\ + "0.111579, 0.185344, 0.270112, 0.405873, 1.402083",\ + "0.250250, 0.333539, 0.418248, 0.553913, 1.548154",\ + "0.283987, 0.371683, 0.456312, 0.591852, 1.586834",\ + "0.585354, 0.727759, 0.813374, 0.950454, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001011, 0.031191, 0.073104, 0.140232, 0.634048"); + values ( "0.026541, 0.137190, 0.296770, 0.552376, 2.441059",\ + "0.027722, 0.137535, 0.296770, 0.552376, 2.442441",\ + "0.049082, 0.143999, 0.302126, 0.555458, 2.445574",\ + "0.056237, 0.147407, 0.304051, 0.555458, 2.445574",\ + "0.135291, 0.207889, 0.343014, 0.560034, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001011, 0.031191, 0.073104, 0.140232, 0.634048"); + values ( "0.074438, 0.127065, 0.181703, 0.269191, 0.901573",\ + "0.135357, 0.187983, 0.242503, 0.329807, 0.964298",\ + "0.278376, 0.331673, 0.386077, 0.473193, 1.104686",\ + "0.313854, 0.367693, 0.422104, 0.509231, 1.140694",\ + "0.637244, 0.700854, 0.755477, 0.842945, 1.478814"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001011, 0.031191, 0.073104, 0.140232, 0.634048"); + values ( "0.022386, 0.090122, 0.186194, 0.340109, 1.494298",\ + "0.022386, 0.090236, 0.186194, 0.340109, 1.494298",\ + "0.024466, 0.090482, 0.186194, 0.340109, 1.494298",\ + "0.025646, 0.090844, 0.186194, 0.340109, 1.494298",\ + "0.043418, 0.097585, 0.190427, 0.340109, 1.494298"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[1]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001011, 0.031191, 0.073104, 0.140232, 0.634048"); + values ( "0.054759, 0.128313, 0.213323, 0.349457, 1.341047",\ + "0.111579, 0.185344, 0.270112, 0.405873, 1.402083",\ + "0.250250, 0.333539, 0.418248, 0.553913, 1.548154",\ + "0.283987, 0.371683, 0.456312, 0.591852, 1.586834",\ + "0.585354, 0.727759, 0.813374, 0.950454, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001011, 0.031191, 0.073104, 0.140232, 0.634048"); + values ( "0.026541, 0.137190, 0.296764, 0.551818, 2.441059",\ + "0.027722, 0.137535, 0.296764, 0.551818, 2.442441",\ + "0.049082, 0.143999, 0.302126, 0.555040, 2.445574",\ + "0.056237, 0.147407, 0.304051, 0.555040, 2.445574",\ + "0.135291, 0.207889, 0.343014, 0.560034, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001011, 0.031191, 0.073104, 0.140232, 0.634048"); + values ( "0.074438, 0.127065, 0.181703, 0.269191, 0.901573",\ + "0.135357, 0.187983, 0.242503, 0.329807, 0.964298",\ + "0.278376, 0.331673, 0.386077, 0.473193, 1.104686",\ + "0.313854, 0.367693, 0.422104, 0.509231, 1.140694",\ + "0.637244, 0.700854, 0.755477, 0.842945, 1.478814"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.001011, 0.031191, 0.073104, 0.140232, 0.634048"); + values ( "0.022386, 0.090122, 0.185722, 0.338326, 1.490226",\ + "0.022386, 0.090236, 0.185722, 0.338326, 1.490226",\ + "0.024466, 0.090482, 0.185722, 0.338326, 1.490226",\ + "0.025646, 0.090844, 0.186005, 0.338489, 1.490226",\ + "0.043418, 0.097585, 0.190427, 0.339240, 1.490226"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[1]_redg_min*/ + +} /* end of pin alert_req_o[1] */ + +pin("alert_req_o[0]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.634048 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000990 ; + + /* Other user defined attributes. */ + original_pin : alert_req_o[0]; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000990, 0.031170, 0.073083, 0.140211, 0.634048"); + values ( "0.054663, 0.128270, 0.213280, 0.349414, 1.341047",\ + "0.111482, 0.185301, 0.270069, 0.405830, 1.402083",\ + "0.250105, 0.333496, 0.418205, 0.553870, 1.548154",\ + "0.283826, 0.371640, 0.456269, 0.591809, 1.586834",\ + "0.585026, 0.727716, 0.813330, 0.950411, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000990, 0.031170, 0.073083, 0.140211, 0.634048"); + values ( "0.026453, 0.137109, 0.296689, 0.552294, 2.441059",\ + "0.027638, 0.137454, 0.296689, 0.552294, 2.442441",\ + "0.049002, 0.143919, 0.302046, 0.555377, 2.445574",\ + "0.056155, 0.147327, 0.303971, 0.555377, 2.445574",\ + "0.135166, 0.207821, 0.342945, 0.559953, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000990, 0.031170, 0.073083, 0.140211, 0.634048"); + values ( "0.074369, 0.127040, 0.181679, 0.269167, 0.901576",\ + "0.135288, 0.187959, 0.242479, 0.329784, 0.964302",\ + "0.278302, 0.331649, 0.386053, 0.473170, 1.104690",\ + "0.313777, 0.367669, 0.422080, 0.509207, 1.140697",\ + "0.637128, 0.700830, 0.755452, 0.842922, 1.478818"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000990, 0.031170, 0.073083, 0.140211, 0.634048"); + values ( "0.022335, 0.090079, 0.186151, 0.340065, 1.494304",\ + "0.022335, 0.090194, 0.186151, 0.340065, 1.494304",\ + "0.024413, 0.090440, 0.186151, 0.340065, 1.494304",\ + "0.025595, 0.090802, 0.186151, 0.340065, 1.494304",\ + "0.043371, 0.097543, 0.190386, 0.340065, 1.494304"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[0]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_alert_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000990, 0.031170, 0.073083, 0.140211, 0.634048"); + values ( "0.054663, 0.128270, 0.213280, 0.349414, 1.341047",\ + "0.111482, 0.185301, 0.270069, 0.405830, 1.402083",\ + "0.250105, 0.333496, 0.418205, 0.553870, 1.548154",\ + "0.283826, 0.371640, 0.456269, 0.591809, 1.586834",\ + "0.585026, 0.727716, 0.813330, 0.950411, 1.938873"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000990, 0.031170, 0.073083, 0.140211, 0.634048"); + values ( "0.026453, 0.137109, 0.296683, 0.551737, 2.441059",\ + "0.027638, 0.137454, 0.296683, 0.551737, 2.442441",\ + "0.049002, 0.143919, 0.302046, 0.554959, 2.445574",\ + "0.056155, 0.147327, 0.303971, 0.554959, 2.445574",\ + "0.135166, 0.207821, 0.342945, 0.559953, 2.445574"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000990, 0.031170, 0.073083, 0.140211, 0.634048"); + values ( "0.074369, 0.127040, 0.181679, 0.269167, 0.901576",\ + "0.135288, 0.187959, 0.242479, 0.329784, 0.964302",\ + "0.278302, 0.331649, 0.386053, 0.473170, 1.104690",\ + "0.313777, 0.367669, 0.422080, 0.509207, 1.140697",\ + "0.637128, 0.700830, 0.755452, 0.842922, 1.478818"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000990, 0.031170, 0.073083, 0.140211, 0.634048"); + values ( "0.022335, 0.090079, 0.185679, 0.338282, 1.490232",\ + "0.022335, 0.090194, 0.185679, 0.338282, 1.490232",\ + "0.024413, 0.090440, 0.185679, 0.338282, 1.490232",\ + "0.025595, 0.090802, 0.185963, 0.338445, 1.490232",\ + "0.043371, 0.097543, 0.190386, 0.339197, 1.490232"); + } + + } /* end of arc clk_ast_alert_i_alert_req_o[0]_redg_min*/ + +} /* end of pin alert_req_o[0] */ +} /* end of bus alert_req_o */ +bus ( dft_strap_test_i ) { + + bus_type : BUS3_type13 ; + direction : input ; + +pin("dft_strap_test_i[2]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001120 ; + + /* Other user defined attributes. */ + original_pin : dft_strap_test_i[2]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.478706, 0.503228, 0.581052, 0.648637, 1.079464",\ + "0.567148, 0.591670, 0.669494, 0.737079, 1.167906",\ + "0.650074, 0.674596, 0.752419, 0.820004, 1.250831",\ + "0.793078, 0.817600, 0.895423, 0.963008, 1.393835",\ + "1.032445, 1.056946, 1.134770, 1.202355, 1.633182"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.463301, 0.380673, 0.305530, 0.271812, 0.239120",\ + "0.556491, 0.473863, 0.398720, 0.365002, 0.332310",\ + "0.646873, 0.564245, 0.489102, 0.455384, 0.422692",\ + "0.811633, 0.729010, 0.653883, 0.620177, 0.587543",\ + "1.181053, 1.098457, 1.023414, 0.989768, 0.957438"); + } + + } /* end of arc clk_ast_tlul_i_dft_strap_test_i[2]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.265123, -0.222342, -0.186677, -0.161410, -0.033314",\ + "-0.347654, -0.304874, -0.269208, -0.243941, -0.115845",\ + "-0.437836, -0.395055, -0.359390, -0.334122, -0.206027",\ + "-0.606076, -0.563289, -0.527626, -0.502359, -0.374263",\ + "-0.890704, -0.847899, -0.812254, -0.786994, -0.658891"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.255864, -0.182785, -0.116647, -0.070567, 0.157553",\ + "-0.349537, -0.279942, -0.213805, -0.167724, 0.060396",\ + "-0.440910, -0.389678, -0.323541, -0.277461, -0.049341",\ + "-0.599026, -0.557614, -0.524142, -0.478056, -0.249871",\ + "-0.851183, -0.809770, -0.777053, -0.739869, -0.511712"); + } + + } /* end of arc clk_ast_tlul_i_dft_strap_test_i[2]_hldr*/ + +} /* end of pin dft_strap_test_i[2] */ + +pin("dft_strap_test_i[1]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001321 ; + + /* Other user defined attributes. */ + original_pin : dft_strap_test_i[1]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.428035, 0.345406, 0.276171, 0.259388, 0.254027",\ + "0.519710, 0.437082, 0.361939, 0.340063, 0.334702",\ + "0.618532, 0.535904, 0.460761, 0.427043, 0.420880",\ + "0.797361, 0.714733, 0.639590, 0.605872, 0.573180",\ + "1.098214, 1.015590, 0.940461, 0.906752, 0.874108"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.453520, 0.478042, 0.555866, 0.623451, 1.054278",\ + "0.538258, 0.562780, 0.640604, 0.708189, 1.139016",\ + "0.651889, 0.676378, 0.754202, 0.821787, 1.252614",\ + "0.864482, 0.889878, 0.967702, 1.035287, 1.466114",\ + "1.235476, 1.260812, 1.338683, 1.406288, 1.837127"); + } + + } /* end of arc clk_ast_tlul_i_dft_strap_test_i[1]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.221451, -0.180039, -0.147321, -0.110125, 0.118032",\ + "-0.314428, -0.273016, -0.240298, -0.203102, 0.025055",\ + "-0.409753, -0.368340, -0.335623, -0.298439, -0.070282",\ + "-0.551259, -0.508465, -0.472804, -0.447539, -0.236382",\ + "-0.757339, -0.714548, -0.679008, -0.653790, -0.510956"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.247877, -0.173125, -0.106987, -0.060907, 0.167213",\ + "-0.342789, -0.268037, -0.201899, -0.155819, 0.072301",\ + "-0.443799, -0.369047, -0.302909, -0.256829, -0.028709",\ + "-0.627085, -0.552322, -0.486182, -0.440095, -0.211908",\ + "-0.932472, -0.857684, -0.791539, -0.745437, -0.517093"); + } + + } /* end of arc clk_ast_tlul_i_dft_strap_test_i[1]_hldr*/ + +} /* end of pin dft_strap_test_i[1] */ + +pin("dft_strap_test_i[0]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000495 ; + + /* Other user defined attributes. */ + original_pin : dft_strap_test_i[0]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.476989, 0.501509, 0.579333, 0.646918, 1.077745",\ + "0.568510, 0.593031, 0.670855, 0.738440, 1.169267",\ + "0.663180, 0.687701, 0.765525, 0.833110, 1.263937",\ + "0.832054, 0.856556, 0.934380, 1.001965, 1.432792",\ + "1.118659, 1.143116, 1.220940, 1.288525, 1.719352"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.474663, 0.392034, 0.328853, 0.312070, 0.306709",\ + "0.571978, 0.489349, 0.424889, 0.408106, 0.402744",\ + "0.676749, 0.594121, 0.529069, 0.512287, 0.506925",\ + "0.856563, 0.773935, 0.708488, 0.691705, 0.686343",\ + "1.151508, 1.068880, 1.004139, 0.987361, 0.981971"); + } + + } /* end of arc clk_ast_tlul_i_dft_strap_test_i[0]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.289829, -0.215077, -0.148940, -0.102859, 0.125261",\ + "-0.385674, -0.310922, -0.244784, -0.198704, 0.029416",\ + "-0.484928, -0.410176, -0.344038, -0.297958, -0.069838",\ + "-0.657145, -0.582393, -0.516256, -0.470176, -0.242056",\ + "-0.943033, -0.868281, -0.802144, -0.756064, -0.527944"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.269424, -0.228012, -0.195294, -0.158099, 0.070058",\ + "-0.366945, -0.325532, -0.292815, -0.255619, -0.027462",\ + "-0.471935, -0.430523, -0.397805, -0.360610, -0.132453",\ + "-0.650169, -0.608757, -0.576039, -0.538849, -0.310692",\ + "-0.940386, -0.898973, -0.866256, -0.829075, -0.600918"); + } + + } /* end of arc clk_ast_tlul_i_dft_strap_test_i[0]_hldr*/ + +} /* end of pin dft_strap_test_i[0] */ +} /* end of bus dft_strap_test_i */ +bus ( lc_dft_en_i ) { + + bus_type : BUS4_type6 ; + direction : input ; + +pin("lc_dft_en_i[3]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000648 ; + + /* Other user defined attributes. */ + original_pin : lc_dft_en_i[3]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.116868, 0.046289, 0.009123, -0.011232, -0.072101",\ + "0.130035, 0.060315, 0.022495, 0.001866, -0.059037",\ + "0.171476, 0.101933, 0.064692, 0.043957, -0.021156",\ + "0.330098, 0.263569, 0.222296, 0.198239, 0.112987",\ + "0.772581, 0.713134, 0.646673, 0.609916, 0.496722"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.164832, 0.206226, 0.283518, 0.350873, 0.781571",\ + "0.176771, 0.218346, 0.296254, 0.363875, 0.794722",\ + "0.219963, 0.260510, 0.337961, 0.405191, 0.833567",\ + "0.396019, 0.435268, 0.507744, 0.571712, 0.985407",\ + "0.931350, 0.951153, 1.007354, 1.063861, 1.468564"); + } + + } /* end of arc clk_ast_tlul_i_lc_dft_en_i[3]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.015255, 0.029491, 0.060650, 0.081348, 0.176530",\ + "-0.028040, 0.015174, 0.046352, 0.067152, 0.163478",\ + "-0.067695, -0.029062, 0.006032, 0.028571, 0.126390",\ + "-0.170614, -0.143005, -0.113142, -0.091864, 0.016864",\ + "-0.388675, -0.412783, -0.403332, -0.388997, -0.262218"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.058687, -0.133819, -0.215174, -0.276149, -0.608913",\ + "-0.070579, -0.145649, -0.226804, -0.287545, -0.618487",\ + "-0.113780, -0.187774, -0.267897, -0.328130, -0.658063",\ + "-0.257059, -0.339271, -0.416614, -0.475103, -0.797794",\ + "-0.613549, -0.743897, -0.832843, -0.896262, -1.220625"); + } + + } /* end of arc clk_ast_tlul_i_lc_dft_en_i[3]_hldr*/ + +} /* end of pin lc_dft_en_i[3] */ + +pin("lc_dft_en_i[2]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001189 ; + + /* Other user defined attributes. */ + original_pin : lc_dft_en_i[2]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.200076, 0.146984, 0.107694, 0.091175, 0.087585",\ + "0.210849, 0.158775, 0.118789, 0.101895, 0.097230",\ + "0.247906, 0.195949, 0.156513, 0.139769, 0.134169",\ + "0.400793, 0.347442, 0.307665, 0.290788, 0.285288",\ + "0.811131, 0.757315, 0.714144, 0.695925, 0.691143"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.249331, 0.166333, 0.091045, 0.056957, 0.020498",\ + "0.258619, 0.175944, 0.100656, 0.066835, 0.033618",\ + "0.297457, 0.214925, 0.140086, 0.106583, 0.074986",\ + "0.472698, 0.388796, 0.312903, 0.278157, 0.236728",\ + "0.983325, 0.898854, 0.822917, 0.782684, 0.674795"); + } + + } /* end of arc clk_ast_tlul_i_lc_dft_en_i[2]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.096530, -0.053812, -0.018112, 0.007162, 0.135173",\ + "-0.107327, -0.064625, -0.028931, -0.003653, 0.124428",\ + "-0.144374, -0.101567, -0.065911, -0.040647, 0.087453",\ + "-0.286358, -0.243809, -0.210094, -0.185592, -0.057011",\ + "-0.620310, -0.578080, -0.553843, -0.534595, -0.422314"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.130907, -0.055165, 0.010770, 0.056779, 0.285045",\ + "-0.140562, -0.065848, 0.000282, 0.046339, 0.274227",\ + "-0.179341, -0.104491, -0.038333, 0.007805, 0.236523",\ + "-0.350407, -0.276449, -0.208169, -0.160590, 0.074989",\ + "-0.811364, -0.742478, -0.673228, -0.625268, -0.389923"); + } + + } /* end of arc clk_ast_tlul_i_lc_dft_en_i[2]_hldr*/ + +} /* end of pin lc_dft_en_i[2] */ + +pin("lc_dft_en_i[1]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000648 ; + + /* Other user defined attributes. */ + original_pin : lc_dft_en_i[1]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.116868, 0.046289, 0.009123, -0.011232, -0.072101",\ + "0.130035, 0.060315, 0.022495, 0.001866, -0.059037",\ + "0.171476, 0.101933, 0.064692, 0.043957, -0.021156",\ + "0.330098, 0.263569, 0.222296, 0.198239, 0.112987",\ + "0.772581, 0.713134, 0.646673, 0.609916, 0.496722"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.164832, 0.206226, 0.283518, 0.350873, 0.781571",\ + "0.176771, 0.218346, 0.296254, 0.363875, 0.794722",\ + "0.219963, 0.260510, 0.337961, 0.405191, 0.833567",\ + "0.396019, 0.435268, 0.507744, 0.571712, 0.985407",\ + "0.931350, 0.951153, 1.007354, 1.063861, 1.468564"); + } + + } /* end of arc clk_ast_tlul_i_lc_dft_en_i[1]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.015255, 0.029491, 0.060650, 0.081348, 0.176530",\ + "-0.028040, 0.015174, 0.046352, 0.067152, 0.163478",\ + "-0.067695, -0.029062, 0.006032, 0.028571, 0.126390",\ + "-0.170614, -0.143005, -0.113142, -0.091864, 0.016864",\ + "-0.388675, -0.412783, -0.403332, -0.388997, -0.262218"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.058687, -0.133819, -0.215174, -0.276149, -0.608913",\ + "-0.070579, -0.145649, -0.226804, -0.287545, -0.618487",\ + "-0.113780, -0.187774, -0.267897, -0.328130, -0.658063",\ + "-0.257059, -0.339271, -0.416614, -0.475103, -0.797794",\ + "-0.613549, -0.743897, -0.832843, -0.896262, -1.220625"); + } + + } /* end of arc clk_ast_tlul_i_lc_dft_en_i[1]_hldr*/ + +} /* end of pin lc_dft_en_i[1] */ + +pin("lc_dft_en_i[0]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001189 ; + + /* Other user defined attributes. */ + original_pin : lc_dft_en_i[0]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.200076, 0.146984, 0.107694, 0.091175, 0.087585",\ + "0.210849, 0.158775, 0.118789, 0.101895, 0.097230",\ + "0.247906, 0.195949, 0.156513, 0.139769, 0.134169",\ + "0.400793, 0.347442, 0.307665, 0.290788, 0.285288",\ + "0.811131, 0.757315, 0.714144, 0.695925, 0.691143"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.249331, 0.166333, 0.091045, 0.056957, 0.020498",\ + "0.258619, 0.175944, 0.100656, 0.066835, 0.033618",\ + "0.297457, 0.214925, 0.140086, 0.106583, 0.074986",\ + "0.472698, 0.388796, 0.312903, 0.278157, 0.236728",\ + "0.983325, 0.898854, 0.822917, 0.782684, 0.674795"); + } + + } /* end of arc clk_ast_tlul_i_lc_dft_en_i[0]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.096530, -0.053812, -0.018112, 0.007162, 0.135173",\ + "-0.107327, -0.064625, -0.028931, -0.003653, 0.124428",\ + "-0.144374, -0.101567, -0.065911, -0.040647, 0.087453",\ + "-0.286358, -0.243809, -0.210094, -0.185592, -0.057011",\ + "-0.620310, -0.578080, -0.553843, -0.534595, -0.422314"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.028986, 0.127724, 0.562810, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.130907, -0.055165, 0.010770, 0.056779, 0.285045",\ + "-0.140562, -0.065848, 0.000282, 0.046339, 0.274227",\ + "-0.179341, -0.104491, -0.038333, 0.007805, 0.236523",\ + "-0.350407, -0.276449, -0.208169, -0.160590, 0.074989",\ + "-0.811364, -0.742478, -0.673228, -0.625268, -0.389923"); + } + + } /* end of arc clk_ast_tlul_i_lc_dft_en_i[0]_hldr*/ + +} /* end of pin lc_dft_en_i[0] */ +} /* end of bus lc_dft_en_i */ +bus ( fla_obs_i ) { + + bus_type : BUS8_type14 ; + direction : input ; + +pin("fla_obs_i[7]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000492 ; + + /* Other user defined attributes. */ + original_pin : fla_obs_i[7]; +} /* end of pin fla_obs_i[7] */ + +pin("fla_obs_i[6]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000492 ; + + /* Other user defined attributes. */ + original_pin : fla_obs_i[6]; +} /* end of pin fla_obs_i[6] */ + +pin("fla_obs_i[5]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000492 ; + + /* Other user defined attributes. */ + original_pin : fla_obs_i[5]; +} /* end of pin fla_obs_i[5] */ + +pin("fla_obs_i[4]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000492 ; + + /* Other user defined attributes. */ + original_pin : fla_obs_i[4]; +} /* end of pin fla_obs_i[4] */ + +pin("fla_obs_i[3]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000492 ; + + /* Other user defined attributes. */ + original_pin : fla_obs_i[3]; +} /* end of pin fla_obs_i[3] */ + +pin("fla_obs_i[2]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000492 ; + + /* Other user defined attributes. */ + original_pin : fla_obs_i[2]; +} /* end of pin fla_obs_i[2] */ + +pin("fla_obs_i[1]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000492 ; + + /* Other user defined attributes. */ + original_pin : fla_obs_i[1]; +} /* end of pin fla_obs_i[1] */ + +pin("fla_obs_i[0]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000492 ; + + /* Other user defined attributes. */ + original_pin : fla_obs_i[0]; +} /* end of pin fla_obs_i[0] */ +} /* end of bus fla_obs_i */ +bus ( otp_obs_i ) { + + bus_type : BUS8_type14 ; + direction : input ; + +pin("otp_obs_i[7]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000506 ; + + /* Other user defined attributes. */ + original_pin : otp_obs_i[7]; +} /* end of pin otp_obs_i[7] */ + +pin("otp_obs_i[6]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000506 ; + + /* Other user defined attributes. */ + original_pin : otp_obs_i[6]; +} /* end of pin otp_obs_i[6] */ + +pin("otp_obs_i[5]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000506 ; + + /* Other user defined attributes. */ + original_pin : otp_obs_i[5]; +} /* end of pin otp_obs_i[5] */ + +pin("otp_obs_i[4]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000506 ; + + /* Other user defined attributes. */ + original_pin : otp_obs_i[4]; +} /* end of pin otp_obs_i[4] */ + +pin("otp_obs_i[3]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000506 ; + + /* Other user defined attributes. */ + original_pin : otp_obs_i[3]; +} /* end of pin otp_obs_i[3] */ + +pin("otp_obs_i[2]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000506 ; + + /* Other user defined attributes. */ + original_pin : otp_obs_i[2]; +} /* end of pin otp_obs_i[2] */ + +pin("otp_obs_i[1]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000506 ; + + /* Other user defined attributes. */ + original_pin : otp_obs_i[1]; +} /* end of pin otp_obs_i[1] */ + +pin("otp_obs_i[0]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000506 ; + + /* Other user defined attributes. */ + original_pin : otp_obs_i[0]; +} /* end of pin otp_obs_i[0] */ +} /* end of bus otp_obs_i */ +bus ( otm_obs_i ) { + + bus_type : BUS8_type14 ; + direction : input ; + +pin("otm_obs_i[7]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000506 ; + + /* Other user defined attributes. */ + original_pin : otm_obs_i[7]; +} /* end of pin otm_obs_i[7] */ + +pin("otm_obs_i[6]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000506 ; + + /* Other user defined attributes. */ + original_pin : otm_obs_i[6]; +} /* end of pin otm_obs_i[6] */ + +pin("otm_obs_i[5]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000506 ; + + /* Other user defined attributes. */ + original_pin : otm_obs_i[5]; +} /* end of pin otm_obs_i[5] */ + +pin("otm_obs_i[4]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000506 ; + + /* Other user defined attributes. */ + original_pin : otm_obs_i[4]; +} /* end of pin otm_obs_i[4] */ + +pin("otm_obs_i[3]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000506 ; + + /* Other user defined attributes. */ + original_pin : otm_obs_i[3]; +} /* end of pin otm_obs_i[3] */ + +pin("otm_obs_i[2]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000506 ; + + /* Other user defined attributes. */ + original_pin : otm_obs_i[2]; +} /* end of pin otm_obs_i[2] */ + +pin("otm_obs_i[1]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000506 ; + + /* Other user defined attributes. */ + original_pin : otm_obs_i[1]; +} /* end of pin otm_obs_i[1] */ + +pin("otm_obs_i[0]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000492 ; + + /* Other user defined attributes. */ + original_pin : otm_obs_i[0]; +} /* end of pin otm_obs_i[0] */ +} /* end of bus otm_obs_i */ + +pin("usb_obs_i") { + direction : input ; + max_transition : 5.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : usb_obs_i; +} /* end of pin usb_obs_i */ +bus ( obs_ctrl_o ) { + + bus_type : BUS12_type15 ; + direction : output ; + +pin("obs_ctrl_o[11]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.156168 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000605 ; + + /* Other user defined attributes. */ + original_pin : obs_ctrl_o[11]; + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[0]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.551399, 0.731602, 0.919092, 1.221084, 1.804596",\ + "0.583544, 0.763747, 0.951237, 1.253229, 1.836741",\ + "0.655451, 0.835654, 1.023144, 1.325136, 1.908648",\ + "0.911916, 1.092119, 1.279609, 1.581602, 2.165114",\ + "1.830892, 2.011095, 2.198585, 2.500578, 3.084090",\ + "0.636337, 0.816885, 1.005100, 1.307096, 1.890974",\ + "0.668482, 0.849030, 1.037246, 1.339242, 1.923120",\ + "0.740389, 0.920937, 1.109152, 1.411149, 1.995026",\ + "0.996855, 1.177402, 1.365618, 1.667614, 2.251492",\ + "1.915831, 2.096378, 2.284594, 2.586590, 3.170468",\ + "0.712249, 0.892328, 1.079909, 1.381693, 1.965147",\ + "0.744394, 0.924473, 1.112054, 1.413838, 1.997292",\ + "0.816301, 0.996380, 1.183961, 1.485745, 2.069199",\ + "1.072767, 1.252846, 1.440427, 1.742211, 2.325664",\ + "1.991743, 2.171822, 2.359403, 2.661187, 3.244640",\ + "0.766618, 0.946840, 1.134560, 1.436233, 2.019464",\ + "0.798764, 0.978985, 1.166705, 1.468378, 2.051609",\ + "0.870670, 1.050892, 1.238612, 1.540285, 2.123516",\ + "1.127136, 1.307358, 1.495078, 1.796751, 2.379982",\ + "2.046112, 2.226333, 2.414054, 2.715726, 3.298958",\ + "1.048213, 1.232108, 1.418511, 1.719959, 2.302742",\ + "1.080358, 1.264253, 1.450656, 1.752105, 2.334887",\ + "1.152265, 1.336160, 1.522563, 1.824011, 2.406794",\ + "1.408731, 1.592625, 1.779028, 2.080477, 2.663259",\ + "2.327707, 2.511601, 2.698004, 2.999453, 3.582235"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.034926, 0.034926, 0.034926, 0.034926, 0.034926",\ + "0.080177, 0.080177, 0.080177, 0.080177, 0.080177",\ + "0.211196, 0.211196, 0.211196, 0.211196, 0.211196",\ + "0.703322, 0.703322, 0.703322, 0.703322, 0.703322",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.034926, 0.034926, 0.034926, 0.034926, 0.034926",\ + "0.080177, 0.080177, 0.080177, 0.080177, 0.080177",\ + "0.211196, 0.211196, 0.211196, 0.211196, 0.211196",\ + "0.703322, 0.703322, 0.703322, 0.703322, 0.703322",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.034926, 0.034926, 0.034926, 0.034926, 0.034926",\ + "0.080177, 0.080177, 0.080177, 0.080177, 0.080177",\ + "0.211196, 0.211196, 0.211196, 0.211196, 0.211196",\ + "0.703322, 0.703322, 0.703322, 0.703322, 0.703322",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.034926, 0.034926, 0.034926, 0.034926, 0.034926",\ + "0.080177, 0.080177, 0.080177, 0.080177, 0.080177",\ + "0.211196, 0.211196, 0.211196, 0.211196, 0.211196",\ + "0.703322, 0.703322, 0.703322, 0.703322, 0.703322",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.034926, 0.034926, 0.034926, 0.034926, 0.034926",\ + "0.080177, 0.080177, 0.080177, 0.080177, 0.080177",\ + "0.211196, 0.211196, 0.211196, 0.211196, 0.211196",\ + "0.703322, 0.703322, 0.703322, 0.703322, 0.703322",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.410192, 0.677978, 0.939558, 1.379255, 2.258650",\ + "0.437946, 0.705732, 0.967312, 1.407009, 2.286404",\ + "0.489378, 0.757164, 1.018744, 1.458441, 2.337836",\ + "0.655862, 0.923647, 1.185227, 1.624924, 2.504319",\ + "1.246932, 1.514718, 1.776298, 2.215995, 3.095390",\ + "0.498896, 0.766053, 1.028199, 1.467484, 2.346055",\ + "0.526650, 0.793807, 1.055953, 1.495238, 2.373809",\ + "0.578082, 0.845239, 1.107385, 1.546670, 2.425241",\ + "0.744566, 1.011722, 1.273868, 1.713154, 2.591724",\ + "1.335636, 1.602793, 1.864939, 2.304224, 3.182795",\ + "0.591838, 0.859198, 1.119924, 1.559648, 2.439097",\ + "0.619592, 0.886952, 1.147678, 1.587402, 2.466851",\ + "0.671024, 0.938384, 1.199110, 1.638834, 2.518283",\ + "0.837508, 1.104867, 1.365594, 1.805318, 2.684766",\ + "1.428578, 1.695938, 1.956664, 2.396388, 3.275837",\ + "0.657682, 0.927762, 1.186944, 1.626498, 2.505608",\ + "0.685436, 0.955516, 1.214698, 1.654252, 2.533362",\ + "0.736868, 1.006948, 1.266130, 1.705685, 2.584794",\ + "0.903352, 1.173432, 1.432614, 1.872168, 2.751277",\ + "1.494422, 1.764502, 2.023684, 2.463239, 3.342348",\ + "1.004203, 1.308598, 1.557607, 1.995652, 2.871743",\ + "1.031957, 1.336352, 1.585361, 2.023406, 2.899497",\ + "1.083390, 1.387784, 1.636793, 2.074838, 2.950930",\ + "1.249873, 1.554267, 1.803276, 2.241322, 3.117413",\ + "1.840944, 2.145338, 2.394347, 2.832392, 3.708484"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.036752, 0.036752, 0.036752, 0.036752, 0.036752",\ + "0.066655, 0.066655, 0.066655, 0.066655, 0.066655",\ + "0.142207, 0.142207, 0.142207, 0.142207, 0.142207",\ + "0.440316, 0.440316, 0.440316, 0.440316, 0.440316",\ + "1.523676, 1.523676, 1.523676, 1.523676, 1.523677",\ + "0.036752, 0.036752, 0.036752, 0.036752, 0.036752",\ + "0.066655, 0.066655, 0.066655, 0.066655, 0.066655",\ + "0.142207, 0.142207, 0.142207, 0.142207, 0.142207",\ + "0.440316, 0.440316, 0.440316, 0.440316, 0.440316",\ + "1.523676, 1.523676, 1.523676, 1.523676, 1.523677",\ + "0.036752, 0.036752, 0.036752, 0.036752, 0.036752",\ + "0.066655, 0.066655, 0.066655, 0.066655, 0.066655",\ + "0.142207, 0.142207, 0.142207, 0.142207, 0.142207",\ + "0.440316, 0.440316, 0.440316, 0.440316, 0.440316",\ + "1.523676, 1.523676, 1.523676, 1.523676, 1.523677",\ + "0.036752, 0.036752, 0.036752, 0.036752, 0.036752",\ + "0.066655, 0.066655, 0.066655, 0.066655, 0.066655",\ + "0.142207, 0.142207, 0.142207, 0.142207, 0.142207",\ + "0.440316, 0.440316, 0.440316, 0.440316, 0.440316",\ + "1.523676, 1.523676, 1.523676, 1.523676, 1.523677",\ + "0.036752, 0.036752, 0.036752, 0.036752, 0.036752",\ + "0.066655, 0.066655, 0.066655, 0.066655, 0.066655",\ + "0.142207, 0.142207, 0.142207, 0.142207, 0.142207",\ + "0.440316, 0.440316, 0.440316, 0.440316, 0.440316",\ + "1.523676, 1.523676, 1.523676, 1.523676, 1.523677"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[11]_redg_2706*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[1]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.459504, 0.723077, 0.999350, 1.468080, 2.405539",\ + "0.491649, 0.755223, 1.031495, 1.500225, 2.437684",\ + "0.563556, 0.827130, 1.103402, 1.572132, 2.509591",\ + "0.820022, 1.083595, 1.359868, 1.828597, 2.766056",\ + "1.738997, 2.002571, 2.278844, 2.747575, 3.685036",\ + "0.547698, 0.810618, 1.086918, 1.554795, 2.491473",\ + "0.579843, 0.842764, 1.119063, 1.586940, 2.523618",\ + "0.651750, 0.914670, 1.190970, 1.658847, 2.595525",\ + "0.908216, 1.171136, 1.447435, 1.915312, 2.851990",\ + "1.827192, 2.090112, 2.366412, 2.834290, 3.770969",\ + "0.636014, 0.899599, 1.174883, 1.642418, 2.578428",\ + "0.668159, 0.931744, 1.207028, 1.674563, 2.610573",\ + "0.740066, 1.003651, 1.278935, 1.746470, 2.682480",\ + "0.996532, 1.260116, 1.535400, 2.002935, 2.938945",\ + "1.915508, 2.179092, 2.454377, 2.921913, 3.857924",\ + "0.698510, 0.965234, 1.239022, 1.706331, 2.641937",\ + "0.730655, 0.997379, 1.271168, 1.738477, 2.674082",\ + "0.802562, 1.069286, 1.343075, 1.810383, 2.745989",\ + "1.059028, 1.325751, 1.599540, 2.066849, 3.002454",\ + "1.978004, 2.244727, 2.518517, 2.985826, 3.921433",\ + "1.027636, 1.329564, 1.590890, 2.055681, 2.987393",\ + "1.059781, 1.361710, 1.623035, 2.087826, 3.019538",\ + "1.131688, 1.433616, 1.694942, 2.159733, 3.091445",\ + "1.388154, 1.690082, 1.951407, 2.416198, 3.347910",\ + "2.307129, 2.609058, 2.870384, 3.335176, 4.266890"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.034926, 0.034926, 0.034926, 0.034926, 0.034925",\ + "0.080177, 0.080177, 0.080177, 0.080177, 0.080177",\ + "0.211196, 0.211196, 0.211196, 0.211195, 0.211195",\ + "0.703322, 0.703322, 0.703321, 0.703320, 0.703316",\ + "2.463890, 2.463890, 2.463889, 2.463887, 2.463883",\ + "0.034926, 0.034926, 0.034926, 0.034926, 0.034925",\ + "0.080177, 0.080177, 0.080177, 0.080177, 0.080177",\ + "0.211196, 0.211196, 0.211196, 0.211195, 0.211195",\ + "0.703322, 0.703322, 0.703321, 0.703320, 0.703316",\ + "2.463890, 2.463890, 2.463889, 2.463887, 2.463883",\ + "0.034926, 0.034926, 0.034926, 0.034926, 0.034925",\ + "0.080177, 0.080177, 0.080177, 0.080177, 0.080177",\ + "0.211196, 0.211196, 0.211196, 0.211195, 0.211195",\ + "0.703322, 0.703322, 0.703321, 0.703320, 0.703316",\ + "2.463890, 2.463890, 2.463889, 2.463887, 2.463883",\ + "0.034926, 0.034926, 0.034926, 0.034926, 0.034925",\ + "0.080177, 0.080177, 0.080177, 0.080177, 0.080177",\ + "0.211196, 0.211196, 0.211196, 0.211195, 0.211195",\ + "0.703322, 0.703322, 0.703321, 0.703320, 0.703316",\ + "2.463890, 2.463890, 2.463889, 2.463887, 2.463883",\ + "0.034926, 0.034926, 0.034926, 0.034926, 0.034925",\ + "0.080177, 0.080177, 0.080177, 0.080177, 0.080177",\ + "0.211196, 0.211196, 0.211196, 0.211195, 0.211195",\ + "0.703322, 0.703322, 0.703321, 0.703320, 0.703316",\ + "2.463890, 2.463890, 2.463889, 2.463887, 2.463883"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.393145, 0.575577, 0.771969, 1.081022, 1.675830",\ + "0.420899, 0.603331, 0.799723, 1.108776, 1.703585",\ + "0.472331, 0.654763, 0.851155, 1.160208, 1.755017",\ + "0.638815, 0.821247, 1.017638, 1.326692, 1.921499",\ + "1.229885, 1.412317, 1.608709, 1.917762, 2.512568",\ + "0.480560, 0.662962, 0.859462, 1.168327, 1.763184",\ + "0.508314, 0.690716, 0.887216, 1.196081, 1.790938",\ + "0.559746, 0.742149, 0.938648, 1.247514, 1.842370",\ + "0.726229, 0.908632, 1.105132, 1.413997, 2.008852",\ + "1.317300, 1.499703, 1.696202, 2.005067, 2.599921",\ + "0.561436, 0.743299, 0.939489, 1.248356, 1.843215",\ + "0.589190, 0.771053, 0.967243, 1.276110, 1.870970",\ + "0.640622, 0.822485, 1.018675, 1.327542, 1.922402",\ + "0.807106, 0.988969, 1.185158, 1.494025, 2.088884",\ + "1.398176, 1.580039, 1.776229, 2.085095, 2.679953",\ + "0.619083, 0.800848, 0.997033, 1.305601, 1.899863",\ + "0.646837, 0.828601, 1.024787, 1.333355, 1.927617",\ + "0.698269, 0.880034, 1.076219, 1.384787, 1.979049",\ + "0.864752, 1.046517, 1.242702, 1.551270, 2.145531",\ + "1.455823, 1.637588, 1.833773, 2.142340, 2.736601",\ + "0.921290, 1.106072, 1.300666, 1.608616, 2.201710",\ + "0.949044, 1.133826, 1.328420, 1.636370, 2.229464",\ + "1.000476, 1.185258, 1.379853, 1.687802, 2.280896",\ + "1.166960, 1.351742, 1.546336, 1.854285, 2.447378",\ + "1.758030, 1.942812, 2.137407, 2.445355, 3.038447"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.036752, 0.036752, 0.036752, 0.036752, 0.036751",\ + "0.066655, 0.066655, 0.066655, 0.066654, 0.066652",\ + "0.142207, 0.142207, 0.142207, 0.142207, 0.142207",\ + "0.440316, 0.440316, 0.440316, 0.440316, 0.440315",\ + "1.523676, 1.523676, 1.523676, 1.523676, 1.523674",\ + "0.036752, 0.036752, 0.036752, 0.036752, 0.036751",\ + "0.066655, 0.066655, 0.066655, 0.066654, 0.066652",\ + "0.142207, 0.142207, 0.142207, 0.142207, 0.142207",\ + "0.440316, 0.440316, 0.440316, 0.440316, 0.440315",\ + "1.523676, 1.523676, 1.523676, 1.523676, 1.523674",\ + "0.036752, 0.036752, 0.036752, 0.036752, 0.036751",\ + "0.066655, 0.066655, 0.066655, 0.066654, 0.066652",\ + "0.142207, 0.142207, 0.142207, 0.142207, 0.142207",\ + "0.440316, 0.440316, 0.440316, 0.440316, 0.440315",\ + "1.523676, 1.523676, 1.523676, 1.523676, 1.523674",\ + "0.036752, 0.036752, 0.036752, 0.036752, 0.036751",\ + "0.066655, 0.066655, 0.066655, 0.066654, 0.066652",\ + "0.142207, 0.142207, 0.142207, 0.142207, 0.142207",\ + "0.440316, 0.440316, 0.440316, 0.440316, 0.440315",\ + "1.523676, 1.523676, 1.523676, 1.523676, 1.523674",\ + "0.036752, 0.036752, 0.036752, 0.036752, 0.036751",\ + "0.066655, 0.066655, 0.066655, 0.066654, 0.066652",\ + "0.142207, 0.142207, 0.142207, 0.142207, 0.142207",\ + "0.440316, 0.440316, 0.440316, 0.440316, 0.440315",\ + "1.523676, 1.523676, 1.523676, 1.523676, 1.523674"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[11]_redg_2637*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[2]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.455529, 0.715158, 0.987030, 1.443910, 2.357670",\ + "0.487674, 0.747303, 1.019175, 1.476055, 2.389815",\ + "0.559581, 0.819210, 1.091082, 1.547962, 2.461721",\ + "0.816046, 1.075675, 1.347547, 1.804427, 2.718186",\ + "1.735022, 1.994652, 2.266525, 2.723405, 3.637166",\ + "0.543634, 0.802691, 1.074561, 1.530625, 2.443603",\ + "0.575779, 0.834837, 1.106706, 1.562770, 2.475748",\ + "0.647686, 0.906743, 1.178613, 1.634677, 2.547655",\ + "0.904151, 1.163209, 1.435078, 1.891142, 2.804120",\ + "1.823127, 2.082185, 2.354055, 2.810120, 3.723099",\ + "0.631664, 0.891657, 1.162525, 1.618248, 2.530558",\ + "0.663809, 0.923802, 1.194670, 1.650393, 2.562703",\ + "0.735716, 0.995709, 1.266577, 1.722300, 2.634610",\ + "0.992181, 1.252175, 1.523042, 1.978765, 2.891075",\ + "1.911157, 2.171151, 2.442019, 2.897743, 3.810054",\ + "0.693885, 0.957271, 1.226663, 1.682162, 2.594067",\ + "0.726030, 0.989416, 1.258808, 1.714307, 2.626212",\ + "0.797937, 1.061323, 1.330715, 1.786214, 2.698119",\ + "1.054402, 1.317788, 1.587180, 2.042679, 2.954584",\ + "1.973378, 2.236765, 2.506157, 2.961657, 3.873563",\ + "1.021272, 1.321346, 1.578410, 2.031462, 2.939523",\ + "1.053417, 1.353491, 1.610555, 2.063607, 2.971668",\ + "1.125324, 1.425398, 1.682462, 2.135514, 3.043575",\ + "1.381790, 1.681863, 1.938927, 2.391979, 3.300040",\ + "2.300766, 2.600840, 2.857904, 3.310957, 4.219019"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.034926, 0.034926, 0.034926, 0.034926, 0.034925",\ + "0.080177, 0.080177, 0.080177, 0.080177, 0.080177",\ + "0.211196, 0.211196, 0.211196, 0.211195, 0.211195",\ + "0.703322, 0.703322, 0.703321, 0.703318, 0.703312",\ + "2.463890, 2.463890, 2.463888, 2.463885, 2.463879",\ + "0.034926, 0.034926, 0.034926, 0.034926, 0.034925",\ + "0.080177, 0.080177, 0.080177, 0.080177, 0.080177",\ + "0.211196, 0.211196, 0.211196, 0.211195, 0.211195",\ + "0.703322, 0.703322, 0.703321, 0.703318, 0.703312",\ + "2.463890, 2.463890, 2.463888, 2.463885, 2.463879",\ + "0.034926, 0.034926, 0.034926, 0.034926, 0.034925",\ + "0.080177, 0.080177, 0.080177, 0.080177, 0.080177",\ + "0.211196, 0.211196, 0.211196, 0.211195, 0.211195",\ + "0.703322, 0.703322, 0.703321, 0.703318, 0.703312",\ + "2.463890, 2.463890, 2.463888, 2.463885, 2.463879",\ + "0.034926, 0.034926, 0.034926, 0.034926, 0.034925",\ + "0.080177, 0.080177, 0.080177, 0.080177, 0.080177",\ + "0.211196, 0.211196, 0.211196, 0.211195, 0.211195",\ + "0.703322, 0.703322, 0.703321, 0.703318, 0.703312",\ + "2.463890, 2.463890, 2.463888, 2.463885, 2.463879",\ + "0.034926, 0.034926, 0.034926, 0.034926, 0.034925",\ + "0.080177, 0.080177, 0.080177, 0.080177, 0.080177",\ + "0.211196, 0.211196, 0.211196, 0.211195, 0.211195",\ + "0.703322, 0.703322, 0.703321, 0.703318, 0.703312",\ + "2.463890, 2.463889, 2.463888, 2.463885, 2.463879"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.391484, 0.574025, 0.770279, 1.079497, 1.674793",\ + "0.419237, 0.601779, 0.798033, 1.107251, 1.702548",\ + "0.470670, 0.653211, 0.849465, 1.158683, 1.753979",\ + "0.637153, 0.819694, 1.015949, 1.325166, 1.920461",\ + "1.228224, 1.410765, 1.607020, 1.916236, 2.511531",\ + "0.478904, 0.661410, 0.857772, 1.166802, 1.762147",\ + "0.506657, 0.689164, 0.885526, 1.194556, 1.789901",\ + "0.558090, 0.740596, 0.936958, 1.245988, 1.841333",\ + "0.724573, 0.907080, 1.103442, 1.412471, 2.007815",\ + "1.315644, 1.498150, 1.694512, 2.003541, 2.598884",\ + "0.559771, 0.741747, 0.937799, 1.246830, 1.842178",\ + "0.587525, 0.769501, 0.965553, 1.274584, 1.869933",\ + "0.638957, 0.820933, 1.016985, 1.326016, 1.921365",\ + "0.805441, 0.987416, 1.183469, 1.492499, 2.087847",\ + "1.396511, 1.578487, 1.774539, 2.083570, 2.678916",\ + "0.617410, 0.799295, 0.995343, 1.304075, 1.898826",\ + "0.645164, 0.827049, 1.023097, 1.331829, 1.926580",\ + "0.696596, 0.878481, 1.074529, 1.383261, 1.978012",\ + "0.863080, 1.044965, 1.241013, 1.549745, 2.144494",\ + "1.454150, 1.636036, 1.832083, 2.140815, 2.735564",\ + "0.919505, 1.104522, 1.298977, 1.607090, 2.200673",\ + "0.947259, 1.132276, 1.326731, 1.634844, 2.228427",\ + "0.998691, 1.183708, 1.378163, 1.686276, 2.279859",\ + "1.165175, 1.350191, 1.544647, 1.852759, 2.446341",\ + "1.756245, 1.941262, 2.135717, 2.443830, 3.037410"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.036752, 0.036752, 0.036752, 0.036752, 0.036751",\ + "0.066655, 0.066655, 0.066655, 0.066654, 0.066651",\ + "0.142207, 0.142207, 0.142207, 0.142207, 0.142207",\ + "0.440316, 0.440316, 0.440316, 0.440316, 0.440315",\ + "1.523676, 1.523676, 1.523676, 1.523676, 1.523674",\ + "0.036752, 0.036752, 0.036752, 0.036752, 0.036751",\ + "0.066655, 0.066655, 0.066655, 0.066654, 0.066651",\ + "0.142207, 0.142207, 0.142207, 0.142207, 0.142207",\ + "0.440316, 0.440316, 0.440316, 0.440316, 0.440315",\ + "1.523676, 1.523676, 1.523676, 1.523676, 1.523674",\ + "0.036752, 0.036752, 0.036752, 0.036752, 0.036751",\ + "0.066655, 0.066655, 0.066655, 0.066654, 0.066651",\ + "0.142207, 0.142207, 0.142207, 0.142207, 0.142207",\ + "0.440316, 0.440316, 0.440316, 0.440316, 0.440315",\ + "1.523676, 1.523676, 1.523676, 1.523676, 1.523674",\ + "0.036752, 0.036752, 0.036752, 0.036752, 0.036751",\ + "0.066655, 0.066655, 0.066655, 0.066654, 0.066651",\ + "0.142207, 0.142207, 0.142207, 0.142207, 0.142207",\ + "0.440316, 0.440316, 0.440316, 0.440316, 0.440315",\ + "1.523676, 1.523676, 1.523676, 1.523676, 1.523674",\ + "0.036752, 0.036752, 0.036752, 0.036752, 0.036751",\ + "0.066655, 0.066655, 0.066655, 0.066654, 0.066651",\ + "0.142207, 0.142207, 0.142207, 0.142207, 0.142207",\ + "0.440316, 0.440316, 0.440316, 0.440316, 0.440315",\ + "1.523676, 1.523676, 1.523676, 1.523676, 1.523674"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[11]_redg_2582*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[3]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.547812, 0.726239, 0.906500, 1.192706, 1.743823",\ + "0.579958, 0.758384, 0.938645, 1.224851, 1.775968",\ + "0.651865, 0.830291, 1.010552, 1.296758, 1.847875",\ + "0.908330, 1.086757, 1.267017, 1.553223, 2.104340",\ + "1.827306, 2.005733, 2.185993, 2.472199, 3.023317",\ + "0.632751, 0.811512, 0.992415, 1.278626, 1.830201",\ + "0.664896, 0.843657, 1.024560, 1.310771, 1.862346",\ + "0.736803, 0.915564, 1.096467, 1.382678, 1.934253",\ + "0.993268, 1.172029, 1.352932, 1.639144, 2.190719",\ + "1.912244, 2.091005, 2.271908, 2.558120, 3.109695",\ + "0.708657, 0.886955, 1.067224, 1.353223, 1.904374",\ + "0.740802, 0.919100, 1.099369, 1.385368, 1.936519",\ + "0.812709, 0.991007, 1.171276, 1.457275, 2.008426",\ + "1.069174, 1.247472, 1.427741, 1.713740, 2.264891",\ + "1.988150, 2.166448, 2.346717, 2.632716, 3.183867",\ + "0.763009, 0.941467, 1.121875, 1.407763, 1.958691",\ + "0.795154, 0.973612, 1.154020, 1.439908, 1.990836",\ + "0.867061, 1.045519, 1.225927, 1.511815, 2.062743",\ + "1.123527, 1.301984, 1.482392, 1.768280, 2.319208",\ + "2.042502, 2.220960, 2.401368, 2.687256, 3.238184",\ + "1.044431, 1.226694, 1.405825, 1.691489, 2.241968",\ + "1.076576, 1.258839, 1.437970, 1.723634, 2.274114",\ + "1.148483, 1.330746, 1.509877, 1.795541, 2.346020",\ + "1.404948, 1.587211, 1.766343, 2.052006, 2.602486",\ + "2.323924, 2.506187, 2.685318, 2.970983, 3.521462"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.034926, 0.034926, 0.034926, 0.034926, 0.034926",\ + "0.080177, 0.080177, 0.080177, 0.080177, 0.080177",\ + "0.211196, 0.211196, 0.211196, 0.211196, 0.211196",\ + "0.703322, 0.703322, 0.703322, 0.703322, 0.703322",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.034926, 0.034926, 0.034926, 0.034926, 0.034926",\ + "0.080177, 0.080177, 0.080177, 0.080177, 0.080177",\ + "0.211196, 0.211196, 0.211196, 0.211196, 0.211196",\ + "0.703322, 0.703322, 0.703322, 0.703322, 0.703322",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.034926, 0.034926, 0.034926, 0.034926, 0.034926",\ + "0.080177, 0.080177, 0.080177, 0.080177, 0.080177",\ + "0.211196, 0.211196, 0.211196, 0.211196, 0.211196",\ + "0.703322, 0.703322, 0.703322, 0.703322, 0.703322",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.034926, 0.034926, 0.034926, 0.034926, 0.034926",\ + "0.080177, 0.080177, 0.080177, 0.080177, 0.080177",\ + "0.211196, 0.211196, 0.211196, 0.211196, 0.211196",\ + "0.703322, 0.703322, 0.703322, 0.703322, 0.703322",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.034926, 0.034926, 0.034926, 0.034926, 0.034926",\ + "0.080177, 0.080177, 0.080177, 0.080177, 0.080177",\ + "0.211196, 0.211196, 0.211196, 0.211196, 0.211196",\ + "0.703322, 0.703322, 0.703322, 0.703322, 0.703322",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.408756, 0.673926, 0.933128, 1.369310, 2.241675",\ + "0.436510, 0.701680, 0.960881, 1.397064, 2.269429",\ + "0.487942, 0.753112, 1.012314, 1.448496, 2.320861",\ + "0.654426, 0.919595, 1.178797, 1.614980, 2.487345",\ + "1.245496, 1.510666, 1.769868, 2.206050, 3.078415",\ + "0.497422, 0.762001, 1.021768, 1.457539, 2.329080",\ + "0.525175, 0.789755, 1.049522, 1.485293, 2.356834",\ + "0.576608, 0.841187, 1.100955, 1.536725, 2.408266",\ + "0.743091, 1.007670, 1.267438, 1.703208, 2.574750",\ + "1.334162, 1.598741, 1.858509, 2.294279, 3.165820",\ + "0.590228, 0.855124, 1.113494, 1.549703, 2.422122",\ + "0.617982, 0.882878, 1.141248, 1.577457, 2.449876",\ + "0.669414, 0.934310, 1.192680, 1.628889, 2.501308",\ + "0.835898, 1.100793, 1.359163, 1.795373, 2.667792",\ + "1.426969, 1.691864, 1.950234, 2.386443, 3.258862",\ + "0.655951, 0.923658, 1.180514, 1.616553, 2.488633",\ + "0.683705, 0.951412, 1.208267, 1.644307, 2.516387",\ + "0.735137, 1.002844, 1.259700, 1.695739, 2.567819",\ + "0.901620, 1.169327, 1.426183, 1.862223, 2.734303",\ + "1.492691, 1.760398, 2.017254, 2.453294, 3.325373",\ + "1.001740, 1.304156, 1.551144, 1.985685, 2.854766",\ + "1.029494, 1.331910, 1.578898, 2.013438, 2.882520",\ + "1.080926, 1.383342, 1.630330, 2.064871, 2.933952",\ + "1.247410, 1.549826, 1.796813, 2.231354, 3.100436",\ + "1.838480, 2.140896, 2.387884, 2.822425, 3.691506"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.036752, 0.036752, 0.036752, 0.036752, 0.036752",\ + "0.066655, 0.066655, 0.066655, 0.066655, 0.066655",\ + "0.142207, 0.142207, 0.142207, 0.142207, 0.142207",\ + "0.440316, 0.440316, 0.440316, 0.440316, 0.440316",\ + "1.523676, 1.523676, 1.523676, 1.523676, 1.523677",\ + "0.036752, 0.036752, 0.036752, 0.036752, 0.036752",\ + "0.066655, 0.066655, 0.066655, 0.066655, 0.066655",\ + "0.142207, 0.142207, 0.142207, 0.142207, 0.142207",\ + "0.440316, 0.440316, 0.440316, 0.440316, 0.440316",\ + "1.523676, 1.523676, 1.523676, 1.523676, 1.523677",\ + "0.036752, 0.036752, 0.036752, 0.036752, 0.036752",\ + "0.066655, 0.066655, 0.066655, 0.066655, 0.066655",\ + "0.142207, 0.142207, 0.142207, 0.142207, 0.142207",\ + "0.440316, 0.440316, 0.440316, 0.440316, 0.440316",\ + "1.523676, 1.523676, 1.523676, 1.523676, 1.523677",\ + "0.036752, 0.036752, 0.036752, 0.036752, 0.036752",\ + "0.066655, 0.066655, 0.066655, 0.066655, 0.066655",\ + "0.142207, 0.142207, 0.142207, 0.142207, 0.142207",\ + "0.440316, 0.440316, 0.440316, 0.440316, 0.440316",\ + "1.523676, 1.523676, 1.523676, 1.523676, 1.523677",\ + "0.036752, 0.036752, 0.036752, 0.036752, 0.036752",\ + "0.066655, 0.066655, 0.066655, 0.066655, 0.066655",\ + "0.142207, 0.142207, 0.142207, 0.142207, 0.142207",\ + "0.440316, 0.440316, 0.440316, 0.440316, 0.440316",\ + "1.523676, 1.523676, 1.523676, 1.523676, 1.523677"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[11]_redg_2520*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + values ( "0.315086, 0.347231, 0.419138, 0.675604, 1.594576",\ + "0.402477, 0.434622, 0.506529, 0.762995, 1.681967",\ + "0.483396, 0.515541, 0.587448, 0.843914, 1.762885",\ + "0.541136, 0.573281, 0.645189, 0.901655, 1.820624",\ + "0.843842, 0.875987, 0.947895, 1.204361, 2.123326"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + values ( "0.034927, 0.080178, 0.211197, 0.703303, 2.463871",\ + "0.034927, 0.080178, 0.211262, 0.703303, 2.463871",\ + "0.034927, 0.080178, 0.211506, 0.703303, 2.463871",\ + "0.034928, 0.080178, 0.211506, 0.703303, 2.463871",\ + "0.035124, 0.080207, 0.211847, 0.703316, 2.463884"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + values ( "0.288640, 0.316394, 0.367826, 0.534309, 1.125380",\ + "0.376032, 0.403786, 0.455218, 0.621702, 1.212772",\ + "0.456902, 0.484656, 0.536088, 0.702571, 1.293642",\ + "0.514551, 0.542304, 0.593737, 0.760220, 1.351291",\ + "0.817630, 0.845638, 0.897452, 1.064344, 1.655102"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + values ( "0.036752, 0.066655, 0.142211, 0.440316, 1.524426",\ + "0.036752, 0.066655, 0.142211, 0.440316, 1.524426",\ + "0.036752, 0.066655, 0.142211, 0.440316, 1.524300",\ + "0.036752, 0.066655, 0.142211, 0.440316, 1.524064",\ + "0.036746, 0.066581, 0.142211, 0.440310, 1.523676"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[11]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[0]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.499182, 0.679295, 0.866874, 1.168853, 1.751950",\ + "0.529816, 0.709930, 0.897508, 1.199488, 1.782584",\ + "0.601083, 0.781197, 0.968775, 1.270755, 1.853851",\ + "0.856808, 1.036922, 1.224500, 1.526480, 2.109576",\ + "1.774034, 1.954148, 2.141726, 2.443706, 3.026802",\ + "0.584120, 0.764131, 0.951944, 1.254360, 1.838328",\ + "0.614754, 0.794765, 0.982578, 1.284994, 1.868962",\ + "0.686022, 0.866033, 1.053846, 1.356261, 1.940230",\ + "0.941746, 1.121757, 1.309570, 1.611986, 2.195954",\ + "1.858973, 2.038984, 2.226796, 2.529212, 3.113181",\ + "0.660032, 0.839574, 1.026753, 1.328956, 1.912500",\ + "0.690666, 0.870209, 1.057387, 1.359591, 1.943135",\ + "0.761934, 0.941476, 1.128654, 1.430858, 2.014402",\ + "1.017658, 1.197201, 1.384379, 1.686583, 2.270127",\ + "1.934885, 2.114427, 2.301605, 2.603809, 3.187353",\ + "0.714401, 0.894326, 1.081641, 1.383562, 1.966818",\ + "0.745036, 0.924960, 1.112276, 1.414196, 1.997452",\ + "0.816303, 0.996228, 1.183543, 1.485464, 2.068719",\ + "1.072027, 1.251952, 1.439268, 1.741188, 2.324444",\ + "1.989254, 2.169178, 2.356494, 2.658415, 3.241670",\ + "0.995996, 1.179891, 1.365817, 1.667288, 2.250095",\ + "1.026630, 1.210525, 1.396451, 1.697923, 2.280730",\ + "1.097898, 1.281793, 1.467719, 1.769190, 2.351997",\ + "1.353622, 1.537517, 1.723443, 2.024915, 2.607721",\ + "2.270849, 2.454743, 2.640669, 2.942141, 3.524948"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.031515, 0.031515, 0.031515, 0.031515, 0.031515",\ + "0.077660, 0.077660, 0.077660, 0.077660, 0.077660",\ + "0.209649, 0.209649, 0.209649, 0.209649, 0.209649",\ + "0.699350, 0.699350, 0.699350, 0.699350, 0.699350",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.031515, 0.031515, 0.031515, 0.031515, 0.031515",\ + "0.077660, 0.077660, 0.077660, 0.077660, 0.077660",\ + "0.209649, 0.209649, 0.209649, 0.209649, 0.209649",\ + "0.699350, 0.699350, 0.699350, 0.699350, 0.699350",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.031515, 0.031515, 0.031515, 0.031515, 0.031515",\ + "0.077660, 0.077660, 0.077660, 0.077660, 0.077660",\ + "0.209649, 0.209649, 0.209649, 0.209649, 0.209649",\ + "0.699350, 0.699350, 0.699350, 0.699350, 0.699350",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.031515, 0.031515, 0.031515, 0.031515, 0.031515",\ + "0.077660, 0.077660, 0.077660, 0.077660, 0.077660",\ + "0.209649, 0.209649, 0.209649, 0.209649, 0.209649",\ + "0.699350, 0.699350, 0.699350, 0.699350, 0.699350",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.031515, 0.031515, 0.031515, 0.031515, 0.031515",\ + "0.077660, 0.077660, 0.077660, 0.077660, 0.077660",\ + "0.209649, 0.209649, 0.209649, 0.209649, 0.209649",\ + "0.699350, 0.699350, 0.699350, 0.699350, 0.699350",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.382273, 0.649883, 0.911284, 1.351061, 2.230222",\ + "0.407140, 0.674750, 0.936142, 1.375888, 2.254987",\ + "0.455457, 0.723068, 0.984460, 1.424205, 2.303304",\ + "0.620747, 0.888357, 1.149749, 1.589495, 2.468594",\ + "1.214576, 1.482187, 1.743588, 2.183365, 3.062526",\ + "0.470977, 0.737958, 0.999925, 1.439290, 2.317627",\ + "0.495844, 0.762825, 1.024783, 1.464117, 2.342392",\ + "0.544161, 0.811142, 1.073101, 1.512434, 2.390709",\ + "0.709451, 0.976432, 1.238390, 1.677724, 2.555999",\ + "1.303280, 1.570262, 1.832229, 2.271594, 3.149931",\ + "0.563919, 0.831278, 1.091970, 1.531536, 2.410669",\ + "0.588786, 0.856145, 1.116828, 1.556363, 2.435434",\ + "0.637103, 0.904463, 1.165145, 1.604680, 2.483751",\ + "0.802393, 1.069752, 1.330435, 1.769970, 2.649041",\ + "1.396222, 1.663582, 1.924273, 2.363840, 3.242973",\ + "0.629763, 0.899843, 1.159026, 1.598547, 2.477591",\ + "0.654629, 0.924710, 1.183884, 1.623374, 2.502355",\ + "0.702947, 0.973027, 1.232201, 1.671691, 2.550673",\ + "0.868237, 1.138317, 1.397491, 1.836981, 2.715962",\ + "1.462066, 1.732146, 1.991329, 2.430851, 3.309894",\ + "0.976284, 1.280678, 1.529696, 1.967773, 2.843926",\ + "1.001151, 1.305545, 1.554554, 1.992599, 2.868690",\ + "1.049468, 1.353863, 1.602872, 2.040917, 2.917008",\ + "1.214758, 1.519152, 1.768161, 2.206207, 3.082298",\ + "1.808588, 2.112982, 2.362000, 2.800076, 3.676230"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.028581, 0.028581, 0.028581, 0.028581, 0.028581",\ + "0.057562, 0.057562, 0.057562, 0.057562, 0.057562",\ + "0.134857, 0.134857, 0.134857, 0.134857, 0.134857",\ + "0.435749, 0.435749, 0.435749, 0.435749, 0.435750",\ + "1.519015, 1.519015, 1.519015, 1.519015, 1.519015",\ + "0.028581, 0.028581, 0.028581, 0.028581, 0.028581",\ + "0.057562, 0.057562, 0.057562, 0.057562, 0.057562",\ + "0.134857, 0.134857, 0.134857, 0.134857, 0.134857",\ + "0.435749, 0.435749, 0.435749, 0.435749, 0.435750",\ + "1.519015, 1.519015, 1.519015, 1.519015, 1.519015",\ + "0.028581, 0.028581, 0.028581, 0.028581, 0.028581",\ + "0.057562, 0.057562, 0.057562, 0.057562, 0.057562",\ + "0.134857, 0.134857, 0.134857, 0.134857, 0.134857",\ + "0.435749, 0.435749, 0.435749, 0.435749, 0.435750",\ + "1.519015, 1.519015, 1.519015, 1.519015, 1.519015",\ + "0.028581, 0.028581, 0.028581, 0.028581, 0.028581",\ + "0.057562, 0.057562, 0.057562, 0.057562, 0.057562",\ + "0.134857, 0.134857, 0.134857, 0.134857, 0.134857",\ + "0.435749, 0.435749, 0.435749, 0.435749, 0.435750",\ + "1.519015, 1.519015, 1.519015, 1.519015, 1.519015",\ + "0.028581, 0.028581, 0.028581, 0.028581, 0.028581",\ + "0.057562, 0.057562, 0.057562, 0.057562, 0.057562",\ + "0.134857, 0.134857, 0.134857, 0.134857, 0.134857",\ + "0.435749, 0.435749, 0.435749, 0.435749, 0.435750",\ + "1.519015, 1.519015, 1.519015, 1.519015, 1.519015"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[11]_redg_min_2461*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[1]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.407290, 0.670821, 0.946941, 1.415072, 2.350076",\ + "0.437925, 0.701456, 0.977575, 1.445707, 2.380711",\ + "0.509192, 0.772723, 1.048843, 1.516974, 2.451978",\ + "0.764916, 1.028448, 1.304567, 1.772699, 2.707703",\ + "1.682143, 1.945674, 2.221793, 2.689925, 3.624929",\ + "0.495484, 0.758362, 1.034508, 1.501788, 2.436010",\ + "0.526119, 0.788996, 1.065142, 1.532422, 2.466645",\ + "0.597386, 0.860264, 1.136409, 1.603690, 2.537912",\ + "0.853111, 1.115988, 1.392134, 1.859414, 2.793636",\ + "1.770337, 2.033214, 2.309360, 2.776640, 3.710862",\ + "0.583800, 0.847341, 1.122472, 1.589428, 2.522965",\ + "0.614435, 0.877976, 1.153107, 1.620063, 2.553600",\ + "0.685702, 0.949243, 1.224374, 1.691330, 2.624867",\ + "0.941427, 1.204967, 1.480099, 1.947054, 2.880591",\ + "1.858653, 2.122194, 2.397325, 2.864281, 3.797817",\ + "0.646296, 0.912975, 1.186612, 1.653517, 2.586474",\ + "0.676931, 0.943609, 1.217247, 1.684151, 2.617109",\ + "0.748198, 1.014877, 1.288514, 1.755419, 2.688376",\ + "1.003923, 1.270601, 1.544238, 2.011143, 2.944100",\ + "1.921149, 2.187827, 2.461465, 2.928370, 3.861326",\ + "0.975422, 1.277290, 1.538476, 2.002961, 2.931930",\ + "1.006057, 1.307924, 1.569111, 2.033595, 2.962565",\ + "1.077324, 1.379191, 1.640378, 2.104863, 3.033832",\ + "1.333048, 1.634916, 1.896102, 2.360587, 3.289557",\ + "2.250275, 2.552142, 2.813329, 3.277813, 4.206782"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.031515, 0.031515, 0.031516, 0.031516, 0.031517",\ + "0.077660, 0.077660, 0.077660, 0.077660, 0.077660",\ + "0.209649, 0.209649, 0.209649, 0.209649, 0.209649",\ + "0.699350, 0.699350, 0.699350, 0.699349, 0.699348",\ + "2.448223, 2.448223, 2.448224, 2.448226, 2.448230",\ + "0.031515, 0.031515, 0.031516, 0.031516, 0.031517",\ + "0.077660, 0.077660, 0.077660, 0.077660, 0.077660",\ + "0.209649, 0.209649, 0.209649, 0.209649, 0.209649",\ + "0.699350, 0.699350, 0.699350, 0.699349, 0.699348",\ + "2.448223, 2.448223, 2.448224, 2.448226, 2.448230",\ + "0.031515, 0.031515, 0.031516, 0.031516, 0.031517",\ + "0.077660, 0.077660, 0.077660, 0.077660, 0.077660",\ + "0.209649, 0.209649, 0.209649, 0.209649, 0.209649",\ + "0.699350, 0.699350, 0.699350, 0.699349, 0.699348",\ + "2.448223, 2.448223, 2.448224, 2.448226, 2.448230",\ + "0.031515, 0.031515, 0.031516, 0.031516, 0.031517",\ + "0.077660, 0.077660, 0.077660, 0.077660, 0.077660",\ + "0.209649, 0.209649, 0.209649, 0.209649, 0.209649",\ + "0.699350, 0.699350, 0.699350, 0.699349, 0.699348",\ + "2.448223, 2.448223, 2.448224, 2.448226, 2.448230",\ + "0.031515, 0.031515, 0.031516, 0.031516, 0.031517",\ + "0.077660, 0.077660, 0.077660, 0.077660, 0.077660",\ + "0.209649, 0.209649, 0.209649, 0.209649, 0.209649",\ + "0.699350, 0.699350, 0.699350, 0.699349, 0.699348",\ + "2.448223, 2.448223, 2.448224, 2.448226, 2.448230"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.365228, 0.547285, 0.743519, 1.052700, 1.647184",\ + "0.390093, 0.572150, 0.768283, 1.077415, 1.671868",\ + "0.438410, 0.620468, 0.816601, 1.125732, 1.720186",\ + "0.603700, 0.785757, 0.981890, 1.291023, 1.885478",\ + "1.197531, 1.379589, 1.575822, 1.885003, 2.479486",\ + "0.452642, 0.634604, 0.830800, 1.140005, 1.734538",\ + "0.477507, 0.659469, 0.855564, 1.164720, 1.759222",\ + "0.525825, 0.707786, 0.903881, 1.213037, 1.807539",\ + "0.691115, 0.873076, 1.069171, 1.378328, 1.972831",\ + "1.284946, 1.466908, 1.663103, 1.972308, 2.566839",\ + "0.533519, 0.714940, 0.910827, 1.220034, 1.814569",\ + "0.558384, 0.739805, 0.935591, 1.244748, 1.839253",\ + "0.606701, 0.788123, 0.983908, 1.293066, 1.887571",\ + "0.771991, 0.953413, 1.149198, 1.458356, 2.052863",\ + "1.365822, 1.547244, 1.743130, 2.052336, 2.646871",\ + "0.591165, 0.772777, 0.968562, 1.277504, 1.871665",\ + "0.616030, 0.797642, 0.993326, 1.302219, 1.896349",\ + "0.664348, 0.845960, 1.041644, 1.350536, 1.944667",\ + "0.829637, 1.011249, 1.206933, 1.515826, 2.109958",\ + "1.423469, 1.605081, 1.800866, 2.109807, 2.703966",\ + "0.893373, 1.078154, 1.272226, 1.580711, 2.173983",\ + "0.918238, 1.103019, 1.296990, 1.605426, 2.198667",\ + "0.966555, 1.151337, 1.345307, 1.653743, 2.246984",\ + "1.131845, 1.316627, 1.510597, 1.819033, 2.412276",\ + "1.725676, 1.910458, 2.104529, 2.413014, 3.006285"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.028581, 0.028581, 0.028581, 0.028582, 0.028582",\ + "0.057562, 0.057562, 0.057562, 0.057563, 0.057564",\ + "0.134857, 0.134857, 0.134857, 0.134858, 0.134859",\ + "0.435749, 0.435749, 0.435750, 0.435755, 0.435768",\ + "1.519015, 1.519015, 1.519015, 1.519016, 1.519017",\ + "0.028581, 0.028581, 0.028581, 0.028582, 0.028582",\ + "0.057562, 0.057562, 0.057562, 0.057563, 0.057564",\ + "0.134857, 0.134857, 0.134857, 0.134858, 0.134859",\ + "0.435749, 0.435749, 0.435750, 0.435755, 0.435768",\ + "1.519015, 1.519015, 1.519015, 1.519016, 1.519017",\ + "0.028581, 0.028581, 0.028581, 0.028582, 0.028582",\ + "0.057562, 0.057562, 0.057562, 0.057563, 0.057564",\ + "0.134857, 0.134857, 0.134857, 0.134858, 0.134859",\ + "0.435749, 0.435749, 0.435750, 0.435755, 0.435768",\ + "1.519015, 1.519015, 1.519015, 1.519016, 1.519017",\ + "0.028581, 0.028581, 0.028581, 0.028582, 0.028582",\ + "0.057562, 0.057562, 0.057562, 0.057563, 0.057564",\ + "0.134857, 0.134857, 0.134857, 0.134858, 0.134859",\ + "0.435749, 0.435749, 0.435750, 0.435755, 0.435768",\ + "1.519015, 1.519015, 1.519015, 1.519016, 1.519017",\ + "0.028581, 0.028581, 0.028581, 0.028582, 0.028582",\ + "0.057562, 0.057562, 0.057562, 0.057563, 0.057564",\ + "0.134857, 0.134857, 0.134857, 0.134858, 0.134859",\ + "0.435749, 0.435749, 0.435750, 0.435755, 0.435768",\ + "1.519015, 1.519015, 1.519015, 1.519016, 1.519017"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[11]_redg_min_2383*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[2]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.403312, 0.662871, 0.934506, 1.390667, 2.301835",\ + "0.433946, 0.693506, 0.965141, 1.421302, 2.332470",\ + "0.505214, 0.764773, 1.036408, 1.492569, 2.403737",\ + "0.760938, 1.020497, 1.292132, 1.748294, 2.659461",\ + "1.678164, 1.937724, 2.209359, 2.665520, 3.576688",\ + "0.491417, 0.750404, 1.022035, 1.477383, 2.387769",\ + "0.522051, 0.781039, 1.052670, 1.508018, 2.418404",\ + "0.593319, 0.852306, 1.123937, 1.579285, 2.489671",\ + "0.849043, 1.108030, 1.379661, 1.835009, 2.745395",\ + "1.766269, 2.025257, 2.296888, 2.752235, 3.662621",\ + "0.579447, 0.839368, 1.109999, 1.565022, 2.474724",\ + "0.610081, 0.870003, 1.140634, 1.595656, 2.505359",\ + "0.681349, 0.941270, 1.211901, 1.666924, 2.576626",\ + "0.937073, 1.196995, 1.467626, 1.922648, 2.832350",\ + "1.854300, 2.114221, 2.384852, 2.839874, 3.749576",\ + "0.641668, 0.904980, 1.174137, 1.629096, 2.538233",\ + "0.672303, 0.935614, 1.204772, 1.659731, 2.568868",\ + "0.743570, 1.006881, 1.276039, 1.730998, 2.640135",\ + "0.999294, 1.262606, 1.531763, 1.986722, 2.895859",\ + "1.916521, 2.179832, 2.448990, 2.903949, 3.813085",\ + "0.969056, 1.269028, 1.525880, 1.978482, 2.883689",\ + "0.999690, 1.299663, 1.556514, 2.009117, 2.914324",\ + "1.070957, 1.370930, 1.627782, 2.080384, 2.985591",\ + "1.326682, 1.626654, 1.883506, 2.336109, 3.241315",\ + "2.243908, 2.543881, 2.800732, 3.253335, 4.158542"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.031515, 0.031515, 0.031516, 0.031517, 0.031519",\ + "0.077660, 0.077660, 0.077660, 0.077660, 0.077661",\ + "0.209649, 0.209649, 0.209649, 0.209649, 0.209649",\ + "0.699350, 0.699350, 0.699350, 0.699349, 0.699347",\ + "2.448223, 2.448223, 2.448225, 2.448228, 2.448234",\ + "0.031515, 0.031515, 0.031516, 0.031517, 0.031519",\ + "0.077660, 0.077660, 0.077660, 0.077660, 0.077661",\ + "0.209649, 0.209649, 0.209649, 0.209649, 0.209649",\ + "0.699350, 0.699350, 0.699350, 0.699349, 0.699347",\ + "2.448223, 2.448223, 2.448225, 2.448228, 2.448234",\ + "0.031515, 0.031515, 0.031516, 0.031517, 0.031519",\ + "0.077660, 0.077660, 0.077660, 0.077660, 0.077661",\ + "0.209649, 0.209649, 0.209649, 0.209649, 0.209649",\ + "0.699350, 0.699350, 0.699350, 0.699349, 0.699347",\ + "2.448223, 2.448223, 2.448225, 2.448228, 2.448234",\ + "0.031515, 0.031515, 0.031516, 0.031517, 0.031519",\ + "0.077660, 0.077660, 0.077660, 0.077660, 0.077661",\ + "0.209649, 0.209649, 0.209649, 0.209649, 0.209649",\ + "0.699350, 0.699350, 0.699350, 0.699349, 0.699347",\ + "2.448223, 2.448223, 2.448225, 2.448228, 2.448234",\ + "0.031515, 0.031515, 0.031516, 0.031517, 0.031519",\ + "0.077660, 0.077660, 0.077660, 0.077660, 0.077661",\ + "0.209649, 0.209649, 0.209649, 0.209649, 0.209649",\ + "0.699350, 0.699350, 0.699350, 0.699349, 0.699347",\ + "2.448223, 2.448223, 2.448225, 2.448228, 2.448234"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.363564, 0.545731, 0.741830, 1.051168, 1.646128",\ + "0.388431, 0.570598, 0.766595, 1.075888, 1.670830",\ + "0.436748, 0.618916, 0.814913, 1.124206, 1.719148",\ + "0.602038, 0.784206, 0.980202, 1.289496, 1.884440",\ + "1.195867, 1.378035, 1.574133, 1.883471, 2.478430",\ + "0.450984, 0.633050, 0.829111, 1.138473, 1.733482",\ + "0.475851, 0.657917, 0.853876, 1.163193, 1.758184",\ + "0.524168, 0.706235, 0.902193, 1.211511, 1.806502",\ + "0.689458, 0.871524, 1.067483, 1.376801, 1.971793",\ + "1.283288, 1.465354, 1.661414, 1.970776, 2.565784",\ + "0.531851, 0.713387, 0.909137, 1.218501, 1.813514",\ + "0.556719, 0.738254, 0.933903, 1.243222, 1.838215",\ + "0.605036, 0.786572, 0.982220, 1.291539, 1.886533",\ + "0.770326, 0.951861, 1.147510, 1.456830, 2.051825",\ + "1.364155, 1.545691, 1.741441, 2.050804, 2.645815",\ + "0.589490, 0.771224, 0.966873, 1.275972, 1.870610",\ + "0.614358, 0.796091, 0.991638, 1.300693, 1.895312",\ + "0.662675, 0.844408, 1.039955, 1.349010, 1.943630",\ + "0.827965, 1.009698, 1.205245, 1.514301, 2.108922",\ + "1.421794, 1.603527, 1.799176, 2.108275, 2.702911",\ + "0.891585, 1.076602, 1.270536, 1.579180, 2.172930",\ + "0.916453, 1.101469, 1.295302, 1.603900, 2.197631",\ + "0.964770, 1.149787, 1.343619, 1.652218, 2.245949",\ + "1.130060, 1.315076, 1.508909, 1.817508, 2.411241",\ + "1.723889, 1.908906, 2.102840, 2.411483, 3.005231"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.028581, 0.028581, 0.028581, 0.028582, 0.028582",\ + "0.057562, 0.057562, 0.057562, 0.057563, 0.057564",\ + "0.134857, 0.134857, 0.134857, 0.134858, 0.134859",\ + "0.435749, 0.435749, 0.435750, 0.435756, 0.435770",\ + "1.519015, 1.519015, 1.519015, 1.519016, 1.519017",\ + "0.028581, 0.028581, 0.028581, 0.028582, 0.028582",\ + "0.057562, 0.057562, 0.057562, 0.057563, 0.057564",\ + "0.134857, 0.134857, 0.134857, 0.134858, 0.134859",\ + "0.435749, 0.435749, 0.435750, 0.435756, 0.435770",\ + "1.519015, 1.519015, 1.519015, 1.519016, 1.519017",\ + "0.028581, 0.028581, 0.028581, 0.028582, 0.028582",\ + "0.057562, 0.057562, 0.057562, 0.057563, 0.057564",\ + "0.134857, 0.134857, 0.134857, 0.134858, 0.134859",\ + "0.435749, 0.435749, 0.435750, 0.435756, 0.435770",\ + "1.519015, 1.519015, 1.519015, 1.519016, 1.519017",\ + "0.028581, 0.028581, 0.028581, 0.028582, 0.028582",\ + "0.057562, 0.057562, 0.057562, 0.057563, 0.057564",\ + "0.134857, 0.134857, 0.134857, 0.134858, 0.134859",\ + "0.435749, 0.435749, 0.435750, 0.435756, 0.435770",\ + "1.519015, 1.519015, 1.519015, 1.519016, 1.519017",\ + "0.028581, 0.028581, 0.028581, 0.028582, 0.028582",\ + "0.057562, 0.057562, 0.057562, 0.057563, 0.057564",\ + "0.134857, 0.134857, 0.134857, 0.134858, 0.134859",\ + "0.435749, 0.435749, 0.435750, 0.435756, 0.435770",\ + "1.519015, 1.519015, 1.519015, 1.519016, 1.519017"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[11]_redg_min_2325*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[3]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.495595, 0.673935, 0.854281, 1.140468, 1.691221",\ + "0.526230, 0.704569, 0.884916, 1.171102, 1.721856",\ + "0.597497, 0.775836, 0.956183, 1.242370, 1.793123",\ + "0.853221, 1.031561, 1.211908, 1.498094, 2.048847",\ + "1.770448, 1.948787, 2.129134, 2.415321, 2.966074",\ + "0.580534, 0.758770, 0.939351, 1.225974, 1.777599",\ + "0.611168, 0.789405, 0.969986, 1.256609, 1.808234",\ + "0.682435, 0.860672, 1.041253, 1.327876, 1.879501",\ + "0.938160, 1.116397, 1.296978, 1.583601, 2.135226",\ + "1.855386, 2.033623, 2.214204, 2.500827, 3.052452",\ + "0.656440, 0.834214, 1.014160, 1.300571, 1.851772",\ + "0.687074, 0.864848, 1.044795, 1.331205, 1.882406",\ + "0.758341, 0.936116, 1.116062, 1.402473, 1.953674",\ + "1.014066, 1.191840, 1.371787, 1.658197, 2.209398",\ + "1.931292, 2.109066, 2.289013, 2.575424, 3.126625",\ + "0.710792, 0.888959, 1.069026, 1.355165, 1.906089",\ + "0.741426, 0.919594, 1.099660, 1.385799, 1.936724",\ + "0.812694, 0.990861, 1.170928, 1.457067, 2.007991",\ + "1.068418, 1.246586, 1.426652, 1.712791, 2.263715",\ + "1.985644, 2.163812, 2.343878, 2.630017, 3.180942",\ + "0.992214, 1.174477, 1.353179, 1.638891, 2.189367",\ + "1.022848, 1.205111, 1.383813, 1.669525, 2.220001",\ + "1.094115, 1.276379, 1.455081, 1.740793, 2.291269",\ + "1.349840, 1.532103, 1.710805, 1.996517, 2.546993",\ + "2.267066, 2.449329, 2.628031, 2.913743, 3.464219"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.031515, 0.031515, 0.031515, 0.031515, 0.031515",\ + "0.077660, 0.077660, 0.077660, 0.077660, 0.077660",\ + "0.209649, 0.209649, 0.209649, 0.209649, 0.209649",\ + "0.699350, 0.699350, 0.699350, 0.699350, 0.699350",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.031515, 0.031515, 0.031515, 0.031515, 0.031515",\ + "0.077660, 0.077660, 0.077660, 0.077660, 0.077660",\ + "0.209649, 0.209649, 0.209649, 0.209649, 0.209649",\ + "0.699350, 0.699350, 0.699350, 0.699350, 0.699350",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.031515, 0.031515, 0.031515, 0.031515, 0.031515",\ + "0.077660, 0.077660, 0.077660, 0.077660, 0.077660",\ + "0.209649, 0.209649, 0.209649, 0.209649, 0.209649",\ + "0.699350, 0.699350, 0.699350, 0.699350, 0.699350",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.031515, 0.031515, 0.031515, 0.031515, 0.031515",\ + "0.077660, 0.077660, 0.077660, 0.077660, 0.077660",\ + "0.209649, 0.209649, 0.209649, 0.209649, 0.209649",\ + "0.699350, 0.699350, 0.699350, 0.699350, 0.699350",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.031515, 0.031515, 0.031515, 0.031515, 0.031515",\ + "0.077660, 0.077660, 0.077660, 0.077660, 0.077660",\ + "0.209649, 0.209649, 0.209649, 0.209649, 0.209649",\ + "0.699350, 0.699350, 0.699350, 0.699350, 0.699350",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.380837, 0.645836, 0.904865, 1.341130, 2.213276",\ + "0.405704, 0.670703, 0.929723, 1.365952, 2.238030",\ + "0.454021, 0.719020, 0.978040, 1.414270, 2.286347",\ + "0.619311, 0.884310, 1.143330, 1.579559, 2.451637",\ + "1.213140, 1.478139, 1.737169, 2.173433, 3.045579",\ + "0.469502, 0.733911, 0.993506, 1.429358, 2.300681",\ + "0.494369, 0.758778, 1.018363, 1.454181, 2.325435",\ + "0.542686, 0.807095, 1.066681, 1.502498, 2.373752",\ + "0.707976, 0.972385, 1.231971, 1.667788, 2.539042",\ + "1.301806, 1.566214, 1.825810, 2.261662, 3.132985",\ + "0.562309, 0.827204, 1.085541, 1.521602, 2.393723",\ + "0.587176, 0.852071, 1.110399, 1.546425, 2.418477",\ + "0.635493, 0.900389, 1.158716, 1.594742, 2.466794",\ + "0.800783, 1.065678, 1.324006, 1.760032, 2.632084",\ + "1.394613, 1.659508, 1.917845, 2.353905, 3.226027",\ + "0.628031, 0.895738, 1.152596, 1.588608, 2.460633",\ + "0.652898, 0.920605, 1.177454, 1.613431, 2.485386",\ + "0.701216, 0.968923, 1.225771, 1.661748, 2.533704",\ + "0.866506, 1.134212, 1.391061, 1.827038, 2.698993",\ + "1.460335, 1.728042, 1.984900, 2.420912, 3.292936",\ + "0.973821, 1.276237, 1.523234, 1.957809, 2.826960",\ + "0.998688, 1.301104, 1.548091, 1.982632, 2.851713",\ + "1.047005, 1.349421, 1.596409, 2.030949, 2.900031",\ + "1.212295, 1.514711, 1.761698, 2.196239, 3.065320",\ + "1.806124, 2.108541, 2.355538, 2.790113, 3.659263"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.028581, 0.028581, 0.028581, 0.028581, 0.028581",\ + "0.057562, 0.057562, 0.057562, 0.057562, 0.057562",\ + "0.134857, 0.134857, 0.134857, 0.134857, 0.134857",\ + "0.435749, 0.435749, 0.435749, 0.435749, 0.435750",\ + "1.519015, 1.519015, 1.519015, 1.519015, 1.519015",\ + "0.028581, 0.028581, 0.028581, 0.028581, 0.028581",\ + "0.057562, 0.057562, 0.057562, 0.057562, 0.057562",\ + "0.134857, 0.134857, 0.134857, 0.134857, 0.134857",\ + "0.435749, 0.435749, 0.435749, 0.435749, 0.435750",\ + "1.519015, 1.519015, 1.519015, 1.519015, 1.519015",\ + "0.028581, 0.028581, 0.028581, 0.028581, 0.028581",\ + "0.057562, 0.057562, 0.057562, 0.057562, 0.057562",\ + "0.134857, 0.134857, 0.134857, 0.134857, 0.134857",\ + "0.435749, 0.435749, 0.435749, 0.435749, 0.435750",\ + "1.519015, 1.519015, 1.519015, 1.519015, 1.519015",\ + "0.028581, 0.028581, 0.028581, 0.028581, 0.028581",\ + "0.057562, 0.057562, 0.057562, 0.057562, 0.057562",\ + "0.134857, 0.134857, 0.134857, 0.134857, 0.134857",\ + "0.435749, 0.435749, 0.435749, 0.435749, 0.435750",\ + "1.519015, 1.519015, 1.519015, 1.519015, 1.519015",\ + "0.028581, 0.028581, 0.028581, 0.028581, 0.028581",\ + "0.057562, 0.057562, 0.057562, 0.057562, 0.057562",\ + "0.134857, 0.134857, 0.134857, 0.134857, 0.134857",\ + "0.435749, 0.435749, 0.435749, 0.435749, 0.435750",\ + "1.519015, 1.519015, 1.519015, 1.519015, 1.519015"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[11]_redg_min_2267*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + values ( "0.132999, 0.164048, 0.235821, 0.492102, 1.411098",\ + "0.221194, 0.252231, 0.324016, 0.580346, 1.499024",\ + "0.309537, 0.340556, 0.412339, 0.668869, 1.587106",\ + "0.372125, 0.403153, 0.474871, 0.731698, 1.650402",\ + "0.701985, 0.733051, 0.804557, 1.061823, 1.982165"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + values ( "0.031515, 0.077660, 0.209649, 0.699350, 2.448223",\ + "0.031515, 0.077660, 0.209649, 0.699350, 2.448223",\ + "0.031515, 0.077660, 0.209649, 0.699350, 2.448223",\ + "0.031515, 0.077660, 0.209649, 0.699350, 2.448223",\ + "0.031515, 0.077660, 0.209649, 0.699350, 2.448223"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + values ( "0.172647, 0.198025, 0.247447, 0.413179, 1.004020",\ + "0.260051, 0.285429, 0.334851, 0.500582, 1.091424",\ + "0.340949, 0.366324, 0.415751, 0.581486, 1.172337",\ + "0.398613, 0.423981, 0.473417, 0.639160, 1.230028",\ + "0.700957, 0.726326, 0.775791, 0.941604, 1.532645"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + values ( "0.028580, 0.057560, 0.134856, 0.434927, 1.516730",\ + "0.028580, 0.057560, 0.134856, 0.434927, 1.516730",\ + "0.028580, 0.057560, 0.134856, 0.434975, 1.516730",\ + "0.028580, 0.057560, 0.134856, 0.435062, 1.516730",\ + "0.028580, 0.057561, 0.134856, 0.435749, 1.516730"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[11]_redg_min*/ + + timing () { + related_pin : "padmux2ast_i[3]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + values ( "0.079929, 0.111758, 0.183223, 0.439138, 1.359203",\ + "0.167497, 0.199454, 0.270769, 0.526908, 1.444562",\ + "0.264286, 0.298668, 0.370756, 0.626584, 1.547694",\ + "0.439501, 0.480020, 0.554277, 0.809849, 1.732299",\ + "0.736451, 0.793429, 0.877676, 1.133252, 2.048527"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + values ( "0.033688, 0.079103, 0.210853, 0.705450, 2.481454",\ + "0.034938, 0.079398, 0.210853, 0.707160, 2.481454",\ + "0.042553, 0.084403, 0.210853, 0.707160, 2.481454",\ + "0.062025, 0.097740, 0.214926, 0.707160, 2.481454",\ + "0.107816, 0.136398, 0.233803, 0.707160, 2.481454"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + values ( "0.118927, 0.147104, 0.198913, 0.365810, 0.957538",\ + "0.198088, 0.226133, 0.277877, 0.444754, 1.035269",\ + "0.300437, 0.331131, 0.384010, 0.550764, 1.143163",\ + "0.474766, 0.514213, 0.573035, 0.741315, 1.332791",\ + "0.755439, 0.816369, 0.892028, 1.065959, 1.655414"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + values ( "0.037147, 0.066922, 0.142202, 0.440625, 1.525476",\ + "0.037147, 0.066922, 0.142202, 0.440625, 1.525476",\ + "0.046795, 0.072955, 0.144989, 0.440625, 1.525476",\ + "0.074873, 0.097054, 0.159133, 0.443319, 1.525476",\ + "0.131163, 0.155817, 0.206305, 0.453921, 1.527125"); + } + + } /* end of arc padmux2ast_i[3]_obs_ctrl_o[11]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[3]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + values ( "0.076002, 0.106508, 0.177677, 0.433841, 1.352120",\ + "0.163173, 0.193992, 0.265018, 0.521506, 1.439207",\ + "0.258934, 0.291253, 0.363111, 0.618813, 1.536303",\ + "0.430665, 0.469075, 0.541536, 0.798208, 1.718362",\ + "0.721771, 0.774421, 0.855976, 1.109381, 2.025527"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + values ( "0.030664, 0.077525, 0.209536, 0.696987, 2.440521",\ + "0.032038, 0.077878, 0.209536, 0.696987, 2.440521",\ + "0.038668, 0.082173, 0.210178, 0.699757, 2.449750",\ + "0.056119, 0.094147, 0.214335, 0.699757, 2.460771",\ + "0.095850, 0.132052, 0.230566, 0.703608, 2.462313"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + values ( "0.085902, 0.110542, 0.159236, 0.324759, 0.917124",\ + "0.171172, 0.195634, 0.244356, 0.409704, 1.001295",\ + "0.269100, 0.297524, 0.347992, 0.513168, 1.105193",\ + "0.434670, 0.473174, 0.529868, 0.695133, 1.285706",\ + "0.702119, 0.762927, 0.838318, 1.010679, 1.597765"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000605, 0.003844, 0.012425, 0.043741, 0.156168"); + values ( "0.029180, 0.058574, 0.135500, 0.435380, 1.519944",\ + "0.030330, 0.058789, 0.135664, 0.436655, 1.520555",\ + "0.042270, 0.067457, 0.139493, 0.437267, 1.520555",\ + "0.069987, 0.091747, 0.153270, 0.440379, 1.520568",\ + "0.124960, 0.149736, 0.200354, 0.450127, 1.523278"); + } + + } /* end of arc padmux2ast_i[3]_obs_ctrl_o[11]_una_min*/ + +} /* end of pin obs_ctrl_o[11] */ + +pin("obs_ctrl_o[10]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.156168 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002440 ; + + /* Other user defined attributes. */ + original_pin : obs_ctrl_o[10]; + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[0]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.570547, 0.750750, 0.938240, 1.240232, 1.823744",\ + "0.598946, 0.779149, 0.966639, 1.268632, 1.852144",\ + "0.670479, 0.850682, 1.038172, 1.340165, 1.923677",\ + "0.926915, 1.107118, 1.294608, 1.596601, 2.180113",\ + "1.830892, 2.011095, 2.198585, 2.500578, 3.084090",\ + "0.655485, 0.836033, 1.024249, 1.326245, 1.910123",\ + "0.683885, 0.864432, 1.052648, 1.354644, 1.938522",\ + "0.755418, 0.935965, 1.124181, 1.426177, 2.010055",\ + "1.011854, 1.192401, 1.380617, 1.682613, 2.266491",\ + "1.915831, 2.096378, 2.284594, 2.586590, 3.170468",\ + "0.731397, 0.911476, 1.099057, 1.400841, 1.984295",\ + "0.759797, 0.939876, 1.127457, 1.429241, 2.012694",\ + "0.831330, 1.011409, 1.198990, 1.500774, 2.084227",\ + "1.087766, 1.267845, 1.455426, 1.757210, 2.340663",\ + "1.991743, 2.171822, 2.359403, 2.661187, 3.244640",\ + "0.785767, 0.965988, 1.153708, 1.455381, 2.038612",\ + "0.814166, 0.994387, 1.182108, 1.483781, 2.067012",\ + "0.885699, 1.065920, 1.253641, 1.555314, 2.138545",\ + "1.142135, 1.322356, 1.510077, 1.811749, 2.394980",\ + "2.046112, 2.226333, 2.414054, 2.715726, 3.298958",\ + "1.067361, 1.251256, 1.437659, 1.739108, 2.321890",\ + "1.095761, 1.279655, 1.466058, 1.767507, 2.350289",\ + "1.167294, 1.351188, 1.537591, 1.839040, 2.421822",\ + "1.423730, 1.607624, 1.794027, 2.095476, 2.678258",\ + "2.327707, 2.511601, 2.698004, 2.999453, 3.582235"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.059998, 0.059998, 0.059998, 0.059998, 0.059998",\ + "0.108036, 0.108036, 0.108036, 0.108036, 0.108036",\ + "0.239906, 0.239906, 0.239906, 0.239906, 0.239906",\ + "0.732057, 0.732057, 0.732057, 0.732057, 0.732057",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.059998, 0.059998, 0.059998, 0.059998, 0.059998",\ + "0.108036, 0.108036, 0.108036, 0.108036, 0.108036",\ + "0.239906, 0.239906, 0.239906, 0.239906, 0.239906",\ + "0.732057, 0.732057, 0.732057, 0.732057, 0.732057",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.059998, 0.059998, 0.059998, 0.059998, 0.059998",\ + "0.108036, 0.108036, 0.108036, 0.108036, 0.108036",\ + "0.239906, 0.239906, 0.239906, 0.239906, 0.239906",\ + "0.732057, 0.732057, 0.732057, 0.732057, 0.732057",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.059998, 0.059998, 0.059998, 0.059998, 0.059998",\ + "0.108036, 0.108036, 0.108036, 0.108036, 0.108036",\ + "0.239906, 0.239906, 0.239906, 0.239906, 0.239906",\ + "0.732057, 0.732057, 0.732057, 0.732057, 0.732057",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.059998, 0.059998, 0.059998, 0.059998, 0.059998",\ + "0.108036, 0.108036, 0.108036, 0.108036, 0.108036",\ + "0.239906, 0.239906, 0.239906, 0.239906, 0.239906",\ + "0.732057, 0.732057, 0.732057, 0.732057, 0.732057",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.426873, 0.694659, 0.956239, 1.395936, 2.275331",\ + "0.448702, 0.716487, 0.978067, 1.417764, 2.297159",\ + "0.498842, 0.766628, 1.028208, 1.467905, 2.347300",\ + "0.665219, 0.933004, 1.194584, 1.634281, 2.513676",\ + "1.246642, 1.514428, 1.776008, 2.215705, 3.095100",\ + "0.515577, 0.782734, 1.044880, 1.484165, 2.362736",\ + "0.537406, 0.804562, 1.066708, 1.505994, 2.384564",\ + "0.587546, 0.854703, 1.116849, 1.556134, 2.434705",\ + "0.753923, 1.021079, 1.283225, 1.722511, 2.601081",\ + "1.335346, 1.602503, 1.864649, 2.303934, 3.182505",\ + "0.608520, 0.875879, 1.136606, 1.576329, 2.455778",\ + "0.630348, 0.897707, 1.158434, 1.598158, 2.477606",\ + "0.680488, 0.947848, 1.208574, 1.648298, 2.527747",\ + "0.846865, 1.114224, 1.374951, 1.814675, 2.694123",\ + "1.428288, 1.695648, 1.956374, 2.396098, 3.275547",\ + "0.674363, 0.944443, 1.203625, 1.643180, 2.522289",\ + "0.696192, 0.966272, 1.225454, 1.665008, 2.544117",\ + "0.746332, 1.016412, 1.275594, 1.715149, 2.594258",\ + "0.912709, 1.182789, 1.441971, 1.881525, 2.760634",\ + "1.494132, 1.764212, 2.023394, 2.462949, 3.342058",\ + "1.020885, 1.325279, 1.574288, 2.012334, 2.888425",\ + "1.042713, 1.347107, 1.596116, 2.034162, 2.910253",\ + "1.092854, 1.397248, 1.646257, 2.084302, 2.960393",\ + "1.259230, 1.563624, 1.812633, 2.250679, 3.126770",\ + "1.840654, 2.145048, 2.394057, 2.832103, 3.708194"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.053502, 0.053502, 0.053502, 0.053502, 0.053502",\ + "0.082236, 0.082236, 0.082236, 0.082236, 0.082235",\ + "0.159094, 0.159094, 0.159094, 0.159094, 0.159094",\ + "0.457392, 0.457392, 0.457392, 0.457392, 0.457392",\ + "1.523144, 1.523144, 1.523144, 1.523144, 1.523144",\ + "0.053502, 0.053502, 0.053502, 0.053502, 0.053502",\ + "0.082236, 0.082236, 0.082236, 0.082236, 0.082235",\ + "0.159094, 0.159094, 0.159094, 0.159094, 0.159094",\ + "0.457392, 0.457392, 0.457392, 0.457392, 0.457392",\ + "1.523144, 1.523144, 1.523144, 1.523144, 1.523144",\ + "0.053502, 0.053502, 0.053502, 0.053502, 0.053502",\ + "0.082236, 0.082236, 0.082236, 0.082236, 0.082235",\ + "0.159094, 0.159094, 0.159094, 0.159094, 0.159094",\ + "0.457392, 0.457392, 0.457392, 0.457392, 0.457392",\ + "1.523144, 1.523144, 1.523144, 1.523144, 1.523144",\ + "0.053502, 0.053502, 0.053502, 0.053502, 0.053502",\ + "0.082236, 0.082236, 0.082236, 0.082236, 0.082235",\ + "0.159094, 0.159094, 0.159094, 0.159094, 0.159094",\ + "0.457392, 0.457392, 0.457392, 0.457392, 0.457392",\ + "1.523144, 1.523144, 1.523144, 1.523144, 1.523144",\ + "0.053502, 0.053502, 0.053502, 0.053502, 0.053502",\ + "0.082236, 0.082236, 0.082236, 0.082236, 0.082235",\ + "0.159094, 0.159094, 0.159094, 0.159094, 0.159094",\ + "0.457392, 0.457392, 0.457392, 0.457392, 0.457392",\ + "1.523144, 1.523144, 1.523144, 1.523144, 1.523144"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[10]_redg_2689*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[1]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.478652, 0.742226, 1.018498, 1.487228, 2.424687",\ + "0.507052, 0.770625, 1.046898, 1.515627, 2.453087",\ + "0.578584, 0.842158, 1.118431, 1.587160, 2.524619",\ + "0.835020, 1.098594, 1.374866, 1.843596, 2.781055",\ + "1.738997, 2.002571, 2.278844, 2.747575, 3.685036",\ + "0.566846, 0.829767, 1.106066, 1.573943, 2.510621",\ + "0.595246, 0.858166, 1.134465, 1.602343, 2.539020",\ + "0.666779, 0.929699, 1.205998, 1.673875, 2.610553",\ + "0.923215, 1.186135, 1.462434, 1.930311, 2.866989",\ + "1.827192, 2.090112, 2.366412, 2.834290, 3.770969",\ + "0.655163, 0.918747, 1.194031, 1.661566, 2.597576",\ + "0.683562, 0.947146, 1.222430, 1.689965, 2.625975",\ + "0.755095, 1.018679, 1.293963, 1.761498, 2.697508",\ + "1.011531, 1.275115, 1.550399, 2.017934, 2.953944",\ + "1.915508, 2.179092, 2.454377, 2.921913, 3.857924",\ + "0.717659, 0.984382, 1.258171, 1.725480, 2.661085",\ + "0.746058, 1.012781, 1.286570, 1.753879, 2.689484",\ + "0.817591, 1.084314, 1.358103, 1.825412, 2.761017",\ + "1.074027, 1.340750, 1.614539, 2.081847, 3.017453",\ + "1.978004, 2.244727, 2.518517, 2.985826, 3.921433",\ + "1.046784, 1.348713, 1.610038, 2.074829, 3.006541",\ + "1.075184, 1.377112, 1.638437, 2.103229, 3.034940",\ + "1.146717, 1.448645, 1.709970, 2.174761, 3.106473",\ + "1.403152, 1.705081, 1.966406, 2.431197, 3.362909",\ + "2.307129, 2.609058, 2.870384, 3.335176, 4.266890"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.059998, 0.059998, 0.059998, 0.059998, 0.059998",\ + "0.108036, 0.108036, 0.108036, 0.108036, 0.108035",\ + "0.239906, 0.239906, 0.239905, 0.239905, 0.239905",\ + "0.732057, 0.732057, 0.732056, 0.732054, 0.732051",\ + "2.463890, 2.463890, 2.463889, 2.463887, 2.463883",\ + "0.059998, 0.059998, 0.059998, 0.059998, 0.059998",\ + "0.108036, 0.108036, 0.108036, 0.108036, 0.108035",\ + "0.239906, 0.239906, 0.239905, 0.239905, 0.239905",\ + "0.732057, 0.732057, 0.732056, 0.732054, 0.732051",\ + "2.463890, 2.463890, 2.463889, 2.463887, 2.463883",\ + "0.059998, 0.059998, 0.059998, 0.059998, 0.059998",\ + "0.108036, 0.108036, 0.108036, 0.108036, 0.108035",\ + "0.239906, 0.239906, 0.239905, 0.239905, 0.239905",\ + "0.732057, 0.732057, 0.732056, 0.732054, 0.732051",\ + "2.463890, 2.463890, 2.463889, 2.463887, 2.463883",\ + "0.059998, 0.059998, 0.059998, 0.059998, 0.059998",\ + "0.108036, 0.108036, 0.108036, 0.108036, 0.108035",\ + "0.239906, 0.239906, 0.239905, 0.239905, 0.239905",\ + "0.732057, 0.732057, 0.732056, 0.732054, 0.732051",\ + "2.463890, 2.463890, 2.463889, 2.463887, 2.463883",\ + "0.059998, 0.059998, 0.059998, 0.059998, 0.059998",\ + "0.108036, 0.108036, 0.108036, 0.108036, 0.108035",\ + "0.239906, 0.239906, 0.239905, 0.239905, 0.239905",\ + "0.732057, 0.732057, 0.732056, 0.732054, 0.732051",\ + "2.463890, 2.463890, 2.463889, 2.463887, 2.463883"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.409826, 0.592258, 0.788650, 1.097704, 1.692512",\ + "0.431655, 0.614087, 0.810479, 1.119532, 1.714340",\ + "0.481795, 0.664227, 0.860619, 1.169672, 1.764480",\ + "0.648172, 0.830604, 1.026996, 1.336049, 1.930856",\ + "1.229595, 1.412027, 1.608419, 1.917472, 2.512278",\ + "0.497241, 0.679644, 0.876143, 1.185009, 1.779865",\ + "0.519070, 0.701472, 0.897972, 1.206837, 1.801694",\ + "0.569210, 0.751613, 0.948112, 1.256977, 1.851834",\ + "0.735586, 0.917989, 1.114489, 1.423354, 2.018209",\ + "1.317010, 1.499413, 1.695912, 2.004777, 2.599632",\ + "0.578118, 0.759980, 0.956170, 1.265037, 1.859897",\ + "0.599946, 0.781809, 0.977999, 1.286866, 1.881726",\ + "0.650086, 0.831949, 1.028139, 1.337006, 1.931865",\ + "0.816463, 0.998326, 1.194516, 1.503382, 2.098241",\ + "1.397886, 1.579749, 1.775939, 2.084805, 2.679663",\ + "0.635764, 0.817529, 1.013714, 1.322282, 1.916544",\ + "0.657592, 0.839357, 1.035542, 1.344111, 1.938373",\ + "0.707733, 0.889498, 1.085683, 1.394251, 1.988513",\ + "0.874109, 1.055874, 1.252059, 1.560627, 2.154888",\ + "1.455533, 1.637298, 1.833483, 2.142051, 2.736311",\ + "0.937972, 1.122753, 1.317348, 1.625297, 2.218391",\ + "0.959800, 1.144582, 1.339176, 1.647125, 2.240220",\ + "1.009940, 1.194722, 1.389317, 1.697266, 2.290360",\ + "1.176317, 1.361099, 1.555693, 1.863642, 2.456735",\ + "1.757740, 1.942522, 2.137117, 2.445065, 3.038157"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.053502, 0.053502, 0.053502, 0.053501, 0.053499",\ + "0.082236, 0.082236, 0.082235, 0.082235, 0.082233",\ + "0.159095, 0.159095, 0.159095, 0.159095, 0.159095",\ + "0.457392, 0.457392, 0.457392, 0.457392, 0.457392",\ + "1.523144, 1.523144, 1.523144, 1.523144, 1.523142",\ + "0.053502, 0.053502, 0.053502, 0.053501, 0.053499",\ + "0.082236, 0.082236, 0.082235, 0.082235, 0.082233",\ + "0.159095, 0.159095, 0.159095, 0.159095, 0.159095",\ + "0.457392, 0.457392, 0.457392, 0.457392, 0.457392",\ + "1.523144, 1.523144, 1.523144, 1.523144, 1.523142",\ + "0.053502, 0.053502, 0.053502, 0.053501, 0.053499",\ + "0.082236, 0.082236, 0.082235, 0.082235, 0.082233",\ + "0.159095, 0.159095, 0.159095, 0.159095, 0.159095",\ + "0.457392, 0.457392, 0.457392, 0.457392, 0.457392",\ + "1.523144, 1.523144, 1.523144, 1.523144, 1.523142",\ + "0.053502, 0.053502, 0.053502, 0.053501, 0.053499",\ + "0.082236, 0.082236, 0.082235, 0.082235, 0.082233",\ + "0.159095, 0.159095, 0.159095, 0.159095, 0.159095",\ + "0.457392, 0.457392, 0.457392, 0.457392, 0.457392",\ + "1.523144, 1.523144, 1.523144, 1.523144, 1.523142",\ + "0.053502, 0.053502, 0.053502, 0.053501, 0.053499",\ + "0.082236, 0.082236, 0.082235, 0.082235, 0.082233",\ + "0.159095, 0.159095, 0.159095, 0.159095, 0.159095",\ + "0.457392, 0.457392, 0.457392, 0.457392, 0.457392",\ + "1.523144, 1.523144, 1.523144, 1.523144, 1.523142"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[10]_redg_2623*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[2]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.474677, 0.734306, 1.006178, 1.463058, 2.376818",\ + "0.503076, 0.762705, 1.034578, 1.491457, 2.405217",\ + "0.574609, 0.834238, 1.106111, 1.562990, 2.476750",\ + "0.831045, 1.090674, 1.362546, 1.819426, 2.733185",\ + "1.735022, 1.994652, 2.266525, 2.723405, 3.637166",\ + "0.562782, 0.821840, 1.093709, 1.549773, 2.462751",\ + "0.591181, 0.850239, 1.122108, 1.578173, 2.491151",\ + "0.662714, 0.921772, 1.193641, 1.649706, 2.562684",\ + "0.919150, 1.178208, 1.450077, 1.906141, 2.819119",\ + "1.823127, 2.082185, 2.354055, 2.810120, 3.723099",\ + "0.650812, 0.910805, 1.181673, 1.637396, 2.549706",\ + "0.679211, 0.939205, 1.210072, 1.665795, 2.578106",\ + "0.750744, 1.010738, 1.281605, 1.737328, 2.649639",\ + "1.007180, 1.267174, 1.538041, 1.993764, 2.906074",\ + "1.911157, 2.171151, 2.442019, 2.897743, 3.810054",\ + "0.713033, 0.976419, 1.245811, 1.701310, 2.613215",\ + "0.741432, 1.004818, 1.274210, 1.729709, 2.641615",\ + "0.812965, 1.076351, 1.345743, 1.801242, 2.713148",\ + "1.069401, 1.332787, 1.602179, 2.057678, 2.969583",\ + "1.973378, 2.236765, 2.506157, 2.961657, 3.873563",\ + "1.040421, 1.340494, 1.597558, 2.050611, 2.958672",\ + "1.068820, 1.368893, 1.625957, 2.079010, 2.987071",\ + "1.140353, 1.440426, 1.697490, 2.150543, 3.058604",\ + "1.396789, 1.696862, 1.953926, 2.406978, 3.315039",\ + "2.300766, 2.600840, 2.857904, 3.310957, 4.219019"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.059998, 0.059998, 0.059998, 0.059998, 0.059998",\ + "0.108036, 0.108036, 0.108036, 0.108036, 0.108035",\ + "0.239906, 0.239906, 0.239905, 0.239905, 0.239905",\ + "0.732057, 0.732057, 0.732056, 0.732053, 0.732046",\ + "2.463890, 2.463890, 2.463888, 2.463885, 2.463879",\ + "0.059998, 0.059998, 0.059998, 0.059998, 0.059998",\ + "0.108036, 0.108036, 0.108036, 0.108036, 0.108035",\ + "0.239906, 0.239906, 0.239905, 0.239905, 0.239905",\ + "0.732057, 0.732057, 0.732056, 0.732053, 0.732046",\ + "2.463890, 2.463890, 2.463888, 2.463885, 2.463879",\ + "0.059998, 0.059998, 0.059998, 0.059998, 0.059998",\ + "0.108036, 0.108036, 0.108036, 0.108036, 0.108035",\ + "0.239906, 0.239906, 0.239905, 0.239905, 0.239905",\ + "0.732057, 0.732057, 0.732056, 0.732053, 0.732046",\ + "2.463890, 2.463890, 2.463888, 2.463885, 2.463879",\ + "0.059998, 0.059998, 0.059998, 0.059998, 0.059998",\ + "0.108036, 0.108036, 0.108036, 0.108036, 0.108035",\ + "0.239906, 0.239906, 0.239905, 0.239905, 0.239905",\ + "0.732057, 0.732057, 0.732056, 0.732053, 0.732046",\ + "2.463890, 2.463890, 2.463888, 2.463885, 2.463879",\ + "0.059998, 0.059998, 0.059998, 0.059998, 0.059998",\ + "0.108036, 0.108036, 0.108036, 0.108036, 0.108035",\ + "0.239906, 0.239905, 0.239905, 0.239905, 0.239905",\ + "0.732057, 0.732057, 0.732056, 0.732053, 0.732046",\ + "2.463890, 2.463889, 2.463888, 2.463885, 2.463879"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.408165, 0.590706, 0.786961, 1.096178, 1.691475",\ + "0.429993, 0.612534, 0.808789, 1.118006, 1.713303",\ + "0.480134, 0.662675, 0.858930, 1.168147, 1.763443",\ + "0.646510, 0.829051, 1.025306, 1.334523, 1.929818",\ + "1.227934, 1.410475, 1.606730, 1.915946, 2.511241",\ + "0.495585, 0.678091, 0.874454, 1.183483, 1.778828",\ + "0.517413, 0.699920, 0.896282, 1.205312, 1.800657",\ + "0.567554, 0.750060, 0.946422, 1.255452, 1.850797",\ + "0.733930, 0.916437, 1.112799, 1.421828, 2.017172",\ + "1.315354, 1.497860, 1.694222, 2.003251, 2.598594",\ + "0.576453, 0.758428, 0.954480, 1.263512, 1.858860",\ + "0.598281, 0.780257, 0.976309, 1.285340, 1.880688",\ + "0.648421, 0.830397, 1.026449, 1.335480, 1.930828",\ + "0.814798, 0.996773, 1.192826, 1.501856, 2.097203",\ + "1.396221, 1.578197, 1.774249, 2.083280, 2.678626",\ + "0.634091, 0.815977, 1.012024, 1.320757, 1.915507",\ + "0.655920, 0.837805, 1.033853, 1.342585, 1.937336",\ + "0.706060, 0.887945, 1.083993, 1.392725, 1.987476",\ + "0.872437, 1.054322, 1.250370, 1.559102, 2.153851",\ + "1.453860, 1.635746, 1.831793, 2.140525, 2.735273",\ + "0.936187, 1.121203, 1.315658, 1.623772, 2.217354",\ + "0.958015, 1.143031, 1.337487, 1.645600, 2.239183",\ + "1.008155, 1.193172, 1.387627, 1.695740, 2.289323",\ + "1.174532, 1.359548, 1.554004, 1.862116, 2.455698",\ + "1.755955, 1.940972, 2.135427, 2.443540, 3.037120"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.053502, 0.053502, 0.053502, 0.053501, 0.053499",\ + "0.082236, 0.082236, 0.082235, 0.082234, 0.082232",\ + "0.159095, 0.159095, 0.159095, 0.159095, 0.159095",\ + "0.457392, 0.457392, 0.457392, 0.457392, 0.457392",\ + "1.523144, 1.523144, 1.523144, 1.523144, 1.523142",\ + "0.053502, 0.053502, 0.053502, 0.053501, 0.053499",\ + "0.082236, 0.082236, 0.082235, 0.082234, 0.082232",\ + "0.159095, 0.159095, 0.159095, 0.159095, 0.159095",\ + "0.457392, 0.457392, 0.457392, 0.457392, 0.457392",\ + "1.523144, 1.523144, 1.523144, 1.523144, 1.523142",\ + "0.053502, 0.053502, 0.053502, 0.053501, 0.053499",\ + "0.082236, 0.082236, 0.082235, 0.082234, 0.082232",\ + "0.159095, 0.159095, 0.159095, 0.159095, 0.159095",\ + "0.457392, 0.457392, 0.457392, 0.457392, 0.457392",\ + "1.523144, 1.523144, 1.523144, 1.523144, 1.523142",\ + "0.053502, 0.053502, 0.053502, 0.053501, 0.053499",\ + "0.082236, 0.082236, 0.082235, 0.082234, 0.082232",\ + "0.159095, 0.159095, 0.159095, 0.159095, 0.159095",\ + "0.457392, 0.457392, 0.457392, 0.457392, 0.457392",\ + "1.523144, 1.523144, 1.523144, 1.523144, 1.523142",\ + "0.053502, 0.053502, 0.053502, 0.053501, 0.053499",\ + "0.082236, 0.082236, 0.082235, 0.082234, 0.082232",\ + "0.159095, 0.159095, 0.159095, 0.159095, 0.159095",\ + "0.457392, 0.457392, 0.457392, 0.457392, 0.457392",\ + "1.523144, 1.523144, 1.523144, 1.523144, 1.523142"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[10]_redg_2570*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[3]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.566961, 0.745387, 0.925648, 1.211854, 1.762971",\ + "0.595360, 0.773787, 0.954047, 1.240253, 1.791370",\ + "0.666893, 0.845320, 1.025580, 1.311786, 1.862903",\ + "0.923329, 1.101756, 1.282016, 1.568222, 2.119339",\ + "1.827306, 2.005733, 2.185993, 2.472199, 3.023317",\ + "0.651899, 0.830660, 1.011563, 1.297774, 1.849349",\ + "0.680298, 0.859059, 1.039962, 1.326174, 1.877749",\ + "0.751831, 0.930592, 1.111495, 1.397707, 1.949282",\ + "1.008267, 1.187028, 1.367931, 1.654143, 2.205718",\ + "1.912244, 2.091005, 2.271908, 2.558120, 3.109695",\ + "0.727805, 0.906103, 1.086372, 1.372371, 1.923522",\ + "0.756204, 0.934502, 1.114771, 1.400770, 1.951921",\ + "0.827737, 1.006035, 1.186304, 1.472303, 2.023454",\ + "1.084173, 1.262471, 1.442740, 1.728739, 2.279890",\ + "1.988150, 2.166448, 2.346717, 2.632716, 3.183867",\ + "0.782157, 0.960615, 1.141023, 1.426911, 1.977839",\ + "0.810557, 0.989014, 1.169422, 1.455310, 2.006238",\ + "0.882089, 1.060547, 1.240955, 1.526843, 2.077771",\ + "1.138525, 1.316983, 1.497391, 1.783279, 2.334207",\ + "2.042502, 2.220960, 2.401368, 2.687256, 3.238184",\ + "1.063579, 1.245842, 1.424973, 1.710637, 2.261117",\ + "1.091979, 1.274241, 1.453373, 1.739037, 2.289516",\ + "1.163512, 1.345774, 1.524906, 1.810570, 2.361049",\ + "1.419947, 1.602210, 1.781342, 2.067005, 2.617485",\ + "2.323924, 2.506187, 2.685318, 2.970983, 3.521462"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.059998, 0.059998, 0.059998, 0.059998, 0.059998",\ + "0.108036, 0.108036, 0.108036, 0.108036, 0.108036",\ + "0.239906, 0.239906, 0.239906, 0.239906, 0.239906",\ + "0.732057, 0.732057, 0.732057, 0.732057, 0.732057",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.059998, 0.059998, 0.059998, 0.059998, 0.059998",\ + "0.108036, 0.108036, 0.108036, 0.108036, 0.108036",\ + "0.239906, 0.239906, 0.239906, 0.239906, 0.239906",\ + "0.732057, 0.732057, 0.732057, 0.732057, 0.732057",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.059998, 0.059998, 0.059998, 0.059998, 0.059998",\ + "0.108036, 0.108036, 0.108036, 0.108036, 0.108036",\ + "0.239906, 0.239906, 0.239906, 0.239906, 0.239906",\ + "0.732057, 0.732057, 0.732057, 0.732057, 0.732057",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.059998, 0.059998, 0.059998, 0.059998, 0.059998",\ + "0.108036, 0.108036, 0.108036, 0.108036, 0.108036",\ + "0.239906, 0.239906, 0.239906, 0.239906, 0.239906",\ + "0.732057, 0.732057, 0.732057, 0.732057, 0.732057",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.059998, 0.059998, 0.059998, 0.059998, 0.059998",\ + "0.108036, 0.108036, 0.108036, 0.108036, 0.108036",\ + "0.239906, 0.239906, 0.239906, 0.239906, 0.239906",\ + "0.732057, 0.732057, 0.732057, 0.732057, 0.732057",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.425437, 0.690607, 0.949809, 1.385991, 2.258357",\ + "0.447266, 0.712435, 0.971637, 1.407820, 2.280185",\ + "0.497406, 0.762576, 1.021778, 1.457960, 2.330325",\ + "0.663783, 0.928952, 1.188154, 1.624336, 2.496702",\ + "1.245206, 1.510376, 1.769578, 2.205760, 3.078125",\ + "0.514103, 0.778682, 1.038450, 1.474220, 2.345762",\ + "0.535931, 0.800510, 1.060278, 1.496048, 2.367590",\ + "0.586072, 0.850651, 1.110419, 1.546189, 2.417730",\ + "0.752448, 1.017027, 1.276795, 1.712565, 2.584107",\ + "1.333872, 1.598451, 1.858219, 2.293989, 3.165530",\ + "0.606910, 0.871805, 1.130175, 1.566384, 2.438803",\ + "0.628738, 0.893633, 1.152003, 1.588213, 2.460632",\ + "0.678878, 0.943774, 1.202144, 1.638353, 2.510772",\ + "0.845255, 1.110150, 1.368520, 1.804730, 2.677149",\ + "1.426679, 1.691574, 1.949944, 2.386153, 3.258572",\ + "0.672632, 0.940339, 1.197195, 1.633235, 2.505315",\ + "0.694461, 0.962168, 1.219023, 1.655063, 2.527143",\ + "0.744601, 1.012308, 1.269164, 1.705203, 2.577283",\ + "0.910977, 1.178684, 1.435540, 1.871580, 2.743660",\ + "1.492401, 1.760108, 2.016964, 2.453003, 3.325083",\ + "1.018422, 1.320838, 1.567825, 2.002366, 2.871448",\ + "1.040250, 1.342666, 1.589653, 2.024194, 2.893276",\ + "1.090390, 1.392806, 1.639794, 2.074335, 2.943416",\ + "1.256767, 1.559183, 1.806170, 2.240711, 3.109793",\ + "1.838190, 2.140606, 2.387594, 2.822135, 3.691216"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.053502, 0.053502, 0.053502, 0.053502, 0.053502",\ + "0.082236, 0.082236, 0.082236, 0.082236, 0.082235",\ + "0.159094, 0.159094, 0.159094, 0.159094, 0.159094",\ + "0.457392, 0.457392, 0.457392, 0.457392, 0.457392",\ + "1.523144, 1.523144, 1.523144, 1.523144, 1.523144",\ + "0.053502, 0.053502, 0.053502, 0.053502, 0.053502",\ + "0.082236, 0.082236, 0.082236, 0.082236, 0.082235",\ + "0.159094, 0.159094, 0.159094, 0.159094, 0.159094",\ + "0.457392, 0.457392, 0.457392, 0.457392, 0.457392",\ + "1.523144, 1.523144, 1.523144, 1.523144, 1.523144",\ + "0.053502, 0.053502, 0.053502, 0.053502, 0.053502",\ + "0.082236, 0.082236, 0.082236, 0.082236, 0.082235",\ + "0.159094, 0.159094, 0.159094, 0.159094, 0.159094",\ + "0.457392, 0.457392, 0.457392, 0.457392, 0.457392",\ + "1.523144, 1.523144, 1.523144, 1.523144, 1.523144",\ + "0.053502, 0.053502, 0.053502, 0.053502, 0.053502",\ + "0.082236, 0.082236, 0.082236, 0.082236, 0.082235",\ + "0.159094, 0.159094, 0.159094, 0.159094, 0.159094",\ + "0.457392, 0.457392, 0.457392, 0.457392, 0.457392",\ + "1.523144, 1.523144, 1.523144, 1.523144, 1.523144",\ + "0.053502, 0.053502, 0.053502, 0.053502, 0.053502",\ + "0.082236, 0.082236, 0.082236, 0.082236, 0.082235",\ + "0.159094, 0.159094, 0.159094, 0.159094, 0.159094",\ + "0.457392, 0.457392, 0.457392, 0.457392, 0.457392",\ + "1.523144, 1.523144, 1.523144, 1.523144, 1.523144"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[10]_redg_2508*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + values ( "0.334234, 0.362633, 0.434167, 0.690603, 1.594576",\ + "0.421625, 0.450024, 0.521558, 0.777994, 1.681967",\ + "0.502544, 0.530943, 0.602477, 0.858913, 1.762885",\ + "0.560284, 0.588684, 0.660217, 0.916654, 1.820624",\ + "0.862990, 0.891389, 0.962923, 1.219360, 2.123326"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + values ( "0.059999, 0.108036, 0.239907, 0.732038, 2.463871",\ + "0.059999, 0.108053, 0.240000, 0.732038, 2.463871",\ + "0.059999, 0.108094, 0.240218, 0.732038, 2.463871",\ + "0.059999, 0.108094, 0.240218, 0.732038, 2.463871",\ + "0.060087, 0.108094, 0.240545, 0.732051, 2.463884"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + values ( "0.305321, 0.327149, 0.377290, 0.543666, 1.125090",\ + "0.392714, 0.414542, 0.464682, 0.631059, 1.212482",\ + "0.473583, 0.495412, 0.545552, 0.711928, 1.293352",\ + "0.531232, 0.553060, 0.603201, 0.769577, 1.351001",\ + "0.834460, 0.856477, 0.906940, 1.073696, 1.654812"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + values ( "0.053502, 0.082236, 0.159102, 0.457392, 1.523894",\ + "0.053502, 0.082236, 0.159102, 0.457392, 1.523894",\ + "0.053502, 0.082236, 0.159102, 0.457392, 1.523767",\ + "0.053502, 0.082236, 0.159102, 0.457392, 1.523532",\ + "0.053458, 0.082179, 0.159102, 0.457388, 1.523144"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[10]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[0]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.517252, 0.697365, 0.884944, 1.186924, 1.770020",\ + "0.545074, 0.725188, 0.912766, 1.214746, 1.797842",\ + "0.616076, 0.796190, 0.983769, 1.285748, 1.868845",\ + "0.871803, 1.051917, 1.239495, 1.541475, 2.124571",\ + "1.774034, 1.954148, 2.141726, 2.443706, 3.026802",\ + "0.602190, 0.782201, 0.970014, 1.272430, 1.856398",\ + "0.630012, 0.810023, 0.997836, 1.300252, 1.884220",\ + "0.701015, 0.881026, 1.068839, 1.371255, 1.955223",\ + "0.956741, 1.136753, 1.324565, 1.626981, 2.210949",\ + "1.858973, 2.038984, 2.226796, 2.529212, 3.113181",\ + "0.678102, 0.857644, 1.044823, 1.347027, 1.930570",\ + "0.705924, 0.885467, 1.072645, 1.374849, 1.958393",\ + "0.776927, 0.956469, 1.143648, 1.445851, 2.029395",\ + "1.032653, 1.212196, 1.399374, 1.701578, 2.285122",\ + "1.934885, 2.114427, 2.301605, 2.603809, 3.187353",\ + "0.732471, 0.912396, 1.099712, 1.401632, 1.984888",\ + "0.760294, 0.940218, 1.127534, 1.429455, 2.012710",\ + "0.831296, 1.011221, 1.198536, 1.500457, 2.083713",\ + "1.087023, 1.266947, 1.454263, 1.756184, 2.339439",\ + "1.989254, 2.169178, 2.356494, 2.658415, 3.241670",\ + "1.014066, 1.197961, 1.383887, 1.685358, 2.268165",\ + "1.041888, 1.225783, 1.411709, 1.713181, 2.295988",\ + "1.112891, 1.296786, 1.482712, 1.784183, 2.366990",\ + "1.368618, 1.552512, 1.738438, 2.039910, 2.622717",\ + "2.270849, 2.454743, 2.640669, 2.942141, 3.524948"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.057228, 0.057228, 0.057228, 0.057228, 0.057228",\ + "0.105834, 0.105834, 0.105834, 0.105834, 0.105834",\ + "0.238478, 0.238478, 0.238478, 0.238478, 0.238478",\ + "0.727955, 0.727955, 0.727955, 0.727955, 0.727955",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.057228, 0.057228, 0.057228, 0.057228, 0.057228",\ + "0.105834, 0.105834, 0.105834, 0.105834, 0.105834",\ + "0.238478, 0.238478, 0.238478, 0.238478, 0.238478",\ + "0.727955, 0.727955, 0.727955, 0.727955, 0.727955",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.057228, 0.057228, 0.057228, 0.057228, 0.057228",\ + "0.105834, 0.105834, 0.105834, 0.105834, 0.105834",\ + "0.238478, 0.238478, 0.238478, 0.238478, 0.238478",\ + "0.727955, 0.727955, 0.727955, 0.727955, 0.727955",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.057228, 0.057228, 0.057228, 0.057228, 0.057228",\ + "0.105834, 0.105834, 0.105834, 0.105834, 0.105834",\ + "0.238478, 0.238478, 0.238478, 0.238478, 0.238478",\ + "0.727955, 0.727955, 0.727955, 0.727955, 0.727955",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.057228, 0.057228, 0.057228, 0.057228, 0.057228",\ + "0.105834, 0.105834, 0.105834, 0.105834, 0.105834",\ + "0.238478, 0.238478, 0.238478, 0.238478, 0.238478",\ + "0.727955, 0.727955, 0.727955, 0.727955, 0.727955",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.397272, 0.664882, 0.926275, 1.366020, 2.245119",\ + "0.417207, 0.684818, 0.946210, 1.385955, 2.265054",\ + "0.464850, 0.732461, 0.993853, 1.433599, 2.312697",\ + "0.630183, 0.897793, 1.159185, 1.598931, 2.478030",\ + "1.214286, 1.481897, 1.743298, 2.183075, 3.062236",\ + "0.485976, 0.752957, 1.014915, 1.454249, 2.332524",\ + "0.505911, 0.772893, 1.034851, 1.474185, 2.352459",\ + "0.553554, 0.820536, 1.082494, 1.521828, 2.400102",\ + "0.718887, 0.985868, 1.247826, 1.687160, 2.565435",\ + "1.302990, 1.569972, 1.831939, 2.271304, 3.149641",\ + "0.578918, 0.846278, 1.106960, 1.546495, 2.425566",\ + "0.598853, 0.866213, 1.126895, 1.566430, 2.445501",\ + "0.646497, 0.913856, 1.174538, 1.614074, 2.493144",\ + "0.811829, 1.079188, 1.339871, 1.779406, 2.658477",\ + "1.395933, 1.663292, 1.923983, 2.363550, 3.242683",\ + "0.644762, 0.914842, 1.174016, 1.613506, 2.492487",\ + "0.664697, 0.934777, 1.193951, 1.633442, 2.512423",\ + "0.712340, 0.982420, 1.241595, 1.681085, 2.560066",\ + "0.877673, 1.147753, 1.406927, 1.846417, 2.725398",\ + "1.461776, 1.731856, 1.991039, 2.430561, 3.309604",\ + "0.991283, 1.295677, 1.544687, 1.982732, 2.858823",\ + "1.011218, 1.315613, 1.564622, 2.002667, 2.878758",\ + "1.058862, 1.363256, 1.612265, 2.050310, 2.926401",\ + "1.224194, 1.528588, 1.777597, 2.215642, 3.091733",\ + "1.808298, 2.112692, 2.361710, 2.799787, 3.675940"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.044581, 0.044581, 0.044581, 0.044581, 0.044581",\ + "0.073511, 0.073511, 0.073511, 0.073511, 0.073511",\ + "0.152010, 0.152010, 0.152010, 0.152010, 0.152010",\ + "0.452924, 0.452924, 0.452924, 0.452925, 0.452925",\ + "1.518485, 1.518485, 1.518485, 1.518485, 1.518485",\ + "0.044581, 0.044581, 0.044581, 0.044581, 0.044581",\ + "0.073511, 0.073511, 0.073511, 0.073511, 0.073511",\ + "0.152010, 0.152010, 0.152010, 0.152010, 0.152010",\ + "0.452924, 0.452924, 0.452924, 0.452925, 0.452925",\ + "1.518485, 1.518485, 1.518485, 1.518485, 1.518485",\ + "0.044581, 0.044581, 0.044581, 0.044581, 0.044581",\ + "0.073511, 0.073511, 0.073511, 0.073511, 0.073511",\ + "0.152010, 0.152010, 0.152010, 0.152010, 0.152010",\ + "0.452924, 0.452924, 0.452924, 0.452925, 0.452925",\ + "1.518485, 1.518485, 1.518485, 1.518485, 1.518485",\ + "0.044581, 0.044581, 0.044581, 0.044581, 0.044581",\ + "0.073511, 0.073511, 0.073511, 0.073511, 0.073511",\ + "0.152010, 0.152010, 0.152010, 0.152010, 0.152010",\ + "0.452924, 0.452924, 0.452924, 0.452925, 0.452925",\ + "1.518485, 1.518485, 1.518485, 1.518485, 1.518485",\ + "0.044581, 0.044581, 0.044581, 0.044581, 0.044581",\ + "0.073511, 0.073511, 0.073511, 0.073511, 0.073511",\ + "0.152010, 0.152010, 0.152010, 0.152010, 0.152010",\ + "0.452924, 0.452924, 0.452924, 0.452925, 0.452925",\ + "1.518485, 1.518485, 1.518485, 1.518485, 1.518485"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[10]_redg_min_2444*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[1]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.425360, 0.688891, 0.965011, 1.433143, 2.368146",\ + "0.453182, 0.716714, 0.992833, 1.460965, 2.395969",\ + "0.524185, 0.787716, 1.063836, 1.531968, 2.466971",\ + "0.779912, 1.043443, 1.319562, 1.787694, 2.722698",\ + "1.682143, 1.945674, 2.221793, 2.689925, 3.624929",\ + "0.513554, 0.776432, 1.052578, 1.519858, 2.454080",\ + "0.541377, 0.804254, 1.080400, 1.547680, 2.481903",\ + "0.612379, 0.875257, 1.151402, 1.618683, 2.552905",\ + "0.868106, 1.130983, 1.407129, 1.874409, 2.808632",\ + "1.770337, 2.033214, 2.309360, 2.776640, 3.710862",\ + "0.601870, 0.865411, 1.140543, 1.607498, 2.541035",\ + "0.629693, 0.893234, 1.168365, 1.635320, 2.568858",\ + "0.700695, 0.964236, 1.239367, 1.706323, 2.639860",\ + "0.956422, 1.219963, 1.495094, 1.962050, 2.895587",\ + "1.858653, 2.122194, 2.397325, 2.864281, 3.797817",\ + "0.664366, 0.931045, 1.204682, 1.671587, 2.604544",\ + "0.692189, 0.958867, 1.232504, 1.699409, 2.632367",\ + "0.763191, 1.029870, 1.303507, 1.770412, 2.703369",\ + "1.018918, 1.285596, 1.559234, 2.026138, 2.959096",\ + "1.921149, 2.187827, 2.461465, 2.928370, 3.861326",\ + "0.993492, 1.295360, 1.556546, 2.021031, 2.950000",\ + "1.021315, 1.323182, 1.584368, 2.048853, 2.977823",\ + "1.092317, 1.394185, 1.655371, 2.119856, 3.048825",\ + "1.348044, 1.649911, 1.911098, 2.375582, 3.304552",\ + "2.250275, 2.552142, 2.813329, 3.277813, 4.206782"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.057228, 0.057228, 0.057228, 0.057228, 0.057229",\ + "0.105834, 0.105834, 0.105834, 0.105834, 0.105835",\ + "0.238478, 0.238478, 0.238478, 0.238478, 0.238479",\ + "0.727955, 0.727955, 0.727955, 0.727955, 0.727954",\ + "2.448223, 2.448223, 2.448224, 2.448226, 2.448230",\ + "0.057228, 0.057228, 0.057228, 0.057228, 0.057229",\ + "0.105834, 0.105834, 0.105834, 0.105834, 0.105835",\ + "0.238478, 0.238478, 0.238478, 0.238478, 0.238479",\ + "0.727955, 0.727955, 0.727955, 0.727955, 0.727954",\ + "2.448223, 2.448223, 2.448224, 2.448226, 2.448230",\ + "0.057228, 0.057228, 0.057228, 0.057228, 0.057229",\ + "0.105834, 0.105834, 0.105834, 0.105834, 0.105835",\ + "0.238478, 0.238478, 0.238478, 0.238478, 0.238479",\ + "0.727955, 0.727955, 0.727955, 0.727955, 0.727954",\ + "2.448223, 2.448223, 2.448224, 2.448226, 2.448230",\ + "0.057228, 0.057228, 0.057228, 0.057228, 0.057229",\ + "0.105834, 0.105834, 0.105834, 0.105834, 0.105835",\ + "0.238478, 0.238478, 0.238478, 0.238478, 0.238479",\ + "0.727955, 0.727955, 0.727955, 0.727955, 0.727954",\ + "2.448223, 2.448223, 2.448224, 2.448226, 2.448230",\ + "0.057228, 0.057228, 0.057228, 0.057228, 0.057229",\ + "0.105834, 0.105834, 0.105834, 0.105834, 0.105835",\ + "0.238478, 0.238478, 0.238478, 0.238478, 0.238479",\ + "0.727955, 0.727955, 0.727955, 0.727955, 0.727954",\ + "2.448223, 2.448223, 2.448224, 2.448226, 2.448230"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.380225, 0.562282, 0.758415, 1.067547, 1.662000",\ + "0.400160, 0.582218, 0.778351, 1.087482, 1.681936",\ + "0.447803, 0.629861, 0.825994, 1.135126, 1.729579",\ + "0.613136, 0.795193, 0.991326, 1.300459, 1.894914",\ + "1.197241, 1.379299, 1.575532, 1.884713, 2.479196",\ + "0.467640, 0.649601, 0.845696, 1.154852, 1.749354",\ + "0.487575, 0.669536, 0.865631, 1.174787, 1.769289",\ + "0.535218, 0.717180, 0.913275, 1.222431, 1.816933",\ + "0.700550, 0.882512, 1.078607, 1.387764, 1.982267",\ + "1.284656, 1.466618, 1.662813, 1.972018, 2.566549",\ + "0.548516, 0.729938, 0.925723, 1.234881, 1.829386",\ + "0.568451, 0.749873, 0.945658, 1.254816, 1.849321",\ + "0.616094, 0.797516, 0.993302, 1.302459, 1.896965",\ + "0.781427, 0.962848, 1.158634, 1.467792, 2.062299",\ + "1.365532, 1.546954, 1.742840, 2.052047, 2.646581",\ + "0.606162, 0.787775, 0.983459, 1.292351, 1.886481",\ + "0.626098, 0.807710, 1.003394, 1.312286, 1.906416",\ + "0.673741, 0.855353, 1.051037, 1.359930, 1.954060",\ + "0.839073, 1.020685, 1.216369, 1.525263, 2.119395",\ + "1.423179, 1.604791, 1.800576, 2.109517, 2.703676",\ + "0.908370, 1.093152, 1.287122, 1.595558, 2.188799",\ + "0.928305, 1.113087, 1.307057, 1.615493, 2.208735",\ + "0.975949, 1.160730, 1.354700, 1.663137, 2.256378",\ + "1.141281, 1.326062, 1.520033, 1.828470, 2.421713",\ + "1.725386, 1.910168, 2.104239, 2.412724, 3.005995"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.044581, 0.044581, 0.044581, 0.044581, 0.044582",\ + "0.073511, 0.073511, 0.073511, 0.073511, 0.073513",\ + "0.152010, 0.152010, 0.152010, 0.152011, 0.152012",\ + "0.452924, 0.452924, 0.452925, 0.452931, 0.452943",\ + "1.518485, 1.518485, 1.518485, 1.518486, 1.518488",\ + "0.044581, 0.044581, 0.044581, 0.044581, 0.044582",\ + "0.073511, 0.073511, 0.073511, 0.073511, 0.073513",\ + "0.152010, 0.152010, 0.152010, 0.152011, 0.152012",\ + "0.452924, 0.452924, 0.452925, 0.452931, 0.452943",\ + "1.518485, 1.518485, 1.518485, 1.518486, 1.518488",\ + "0.044581, 0.044581, 0.044581, 0.044581, 0.044582",\ + "0.073511, 0.073511, 0.073511, 0.073511, 0.073513",\ + "0.152010, 0.152010, 0.152010, 0.152011, 0.152012",\ + "0.452924, 0.452924, 0.452925, 0.452931, 0.452943",\ + "1.518485, 1.518485, 1.518485, 1.518486, 1.518488",\ + "0.044581, 0.044581, 0.044581, 0.044581, 0.044582",\ + "0.073511, 0.073511, 0.073511, 0.073511, 0.073513",\ + "0.152010, 0.152010, 0.152010, 0.152011, 0.152012",\ + "0.452924, 0.452924, 0.452925, 0.452931, 0.452943",\ + "1.518485, 1.518485, 1.518485, 1.518486, 1.518488",\ + "0.044581, 0.044581, 0.044581, 0.044581, 0.044582",\ + "0.073511, 0.073511, 0.073511, 0.073511, 0.073513",\ + "0.152010, 0.152010, 0.152010, 0.152011, 0.152012",\ + "0.452924, 0.452924, 0.452925, 0.452931, 0.452943",\ + "1.518485, 1.518485, 1.518485, 1.518486, 1.518488"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[10]_redg_min_2368*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[2]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.421382, 0.680941, 0.952576, 1.408738, 2.319905",\ + "0.449204, 0.708764, 0.980399, 1.436560, 2.347728",\ + "0.520207, 0.779766, 1.051401, 1.507563, 2.418730",\ + "0.775933, 1.035493, 1.307128, 1.763289, 2.674457",\ + "1.678164, 1.937724, 2.209359, 2.665520, 3.576688",\ + "0.509487, 0.768474, 1.040105, 1.495453, 2.405839",\ + "0.537309, 0.796296, 1.067928, 1.523275, 2.433661",\ + "0.608312, 0.867299, 1.138930, 1.594278, 2.504664",\ + "0.864038, 1.123026, 1.394657, 1.850005, 2.760391",\ + "1.766269, 2.025257, 2.296888, 2.752235, 3.662621",\ + "0.597517, 0.857438, 1.128069, 1.583092, 2.492794",\ + "0.625339, 0.885261, 1.155892, 1.610914, 2.520617",\ + "0.696342, 0.956263, 1.226894, 1.681917, 2.591619",\ + "0.952068, 1.211990, 1.482621, 1.937644, 2.847346",\ + "1.854300, 2.114221, 2.384852, 2.839874, 3.749576",\ + "0.659738, 0.923050, 1.192207, 1.647166, 2.556303",\ + "0.687560, 0.950872, 1.220030, 1.674989, 2.584126",\ + "0.758563, 1.021875, 1.291032, 1.745991, 2.655128",\ + "1.014290, 1.277601, 1.546759, 2.001718, 2.910855",\ + "1.916521, 2.179832, 2.448990, 2.903949, 3.813085",\ + "0.987126, 1.287098, 1.543950, 1.996553, 2.901759",\ + "1.014948, 1.314920, 1.571772, 2.024375, 2.929582",\ + "1.085950, 1.385923, 1.642775, 2.095378, 3.000584",\ + "1.341677, 1.641650, 1.898501, 2.351104, 3.256311",\ + "2.243908, 2.543881, 2.800732, 3.253335, 4.158542"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.057228, 0.057228, 0.057228, 0.057229, 0.057230",\ + "0.105834, 0.105834, 0.105834, 0.105835, 0.105835",\ + "0.238478, 0.238478, 0.238478, 0.238479, 0.238479",\ + "0.727955, 0.727955, 0.727955, 0.727954, 0.727953",\ + "2.448223, 2.448223, 2.448225, 2.448228, 2.448234",\ + "0.057228, 0.057228, 0.057228, 0.057229, 0.057230",\ + "0.105834, 0.105834, 0.105834, 0.105835, 0.105835",\ + "0.238478, 0.238478, 0.238478, 0.238479, 0.238479",\ + "0.727955, 0.727955, 0.727955, 0.727954, 0.727953",\ + "2.448223, 2.448223, 2.448225, 2.448228, 2.448234",\ + "0.057228, 0.057228, 0.057228, 0.057229, 0.057230",\ + "0.105834, 0.105834, 0.105834, 0.105835, 0.105835",\ + "0.238478, 0.238478, 0.238478, 0.238479, 0.238479",\ + "0.727955, 0.727955, 0.727955, 0.727954, 0.727953",\ + "2.448223, 2.448223, 2.448225, 2.448228, 2.448234",\ + "0.057228, 0.057228, 0.057228, 0.057229, 0.057230",\ + "0.105834, 0.105834, 0.105834, 0.105835, 0.105835",\ + "0.238478, 0.238478, 0.238478, 0.238479, 0.238479",\ + "0.727955, 0.727955, 0.727955, 0.727954, 0.727953",\ + "2.448223, 2.448223, 2.448225, 2.448228, 2.448234",\ + "0.057228, 0.057228, 0.057228, 0.057229, 0.057230",\ + "0.105834, 0.105834, 0.105834, 0.105835, 0.105835",\ + "0.238478, 0.238478, 0.238478, 0.238479, 0.238479",\ + "0.727955, 0.727955, 0.727955, 0.727954, 0.727953",\ + "2.448223, 2.448223, 2.448225, 2.448228, 2.448234"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.378563, 0.560731, 0.756728, 1.066021, 1.660963",\ + "0.398499, 0.580666, 0.776663, 1.085956, 1.680898",\ + "0.446142, 0.628309, 0.824306, 1.133599, 1.728542",\ + "0.611474, 0.793641, 0.989638, 1.298932, 1.893877",\ + "1.195578, 1.377745, 1.573843, 1.883181, 2.478140",\ + "0.465983, 0.648049, 0.844008, 1.153326, 1.748316",\ + "0.485919, 0.667985, 0.863944, 1.173261, 1.768251",\ + "0.533562, 0.715628, 0.911587, 1.220904, 1.815895",\ + "0.698894, 0.880960, 1.076919, 1.386237, 1.981230",\ + "1.282998, 1.465064, 1.661124, 1.970486, 2.565494",\ + "0.546851, 0.728386, 0.924035, 1.233354, 1.828348",\ + "0.566786, 0.748322, 0.943970, 1.253289, 1.848283",\ + "0.614429, 0.795965, 0.991614, 1.300933, 1.895927",\ + "0.779762, 0.961297, 1.156946, 1.466266, 2.061262",\ + "1.363865, 1.545401, 1.741151, 2.050514, 2.645525",\ + "0.604490, 0.786223, 0.981770, 1.290825, 1.885444",\ + "0.624425, 0.806158, 1.001706, 1.310760, 1.905379",\ + "0.672068, 0.853802, 1.049349, 1.358404, 1.953023",\ + "0.837401, 1.019134, 1.214681, 1.523737, 2.118358",\ + "1.421504, 1.603237, 1.798886, 2.107985, 2.702621",\ + "0.906585, 1.091602, 1.285434, 1.594033, 2.187764",\ + "0.926520, 1.111537, 1.305369, 1.613968, 2.207699",\ + "0.974163, 1.159180, 1.353012, 1.661611, 2.255342",\ + "1.139496, 1.324512, 1.518345, 1.826944, 2.420678",\ + "1.723599, 1.908616, 2.102550, 2.411193, 3.004941"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.044581, 0.044581, 0.044581, 0.044581, 0.044582",\ + "0.073511, 0.073511, 0.073511, 0.073512, 0.073513",\ + "0.152010, 0.152010, 0.152010, 0.152011, 0.152012",\ + "0.452924, 0.452924, 0.452925, 0.452931, 0.452944",\ + "1.518485, 1.518485, 1.518485, 1.518486, 1.518488",\ + "0.044581, 0.044581, 0.044581, 0.044581, 0.044582",\ + "0.073511, 0.073511, 0.073511, 0.073512, 0.073513",\ + "0.152010, 0.152010, 0.152010, 0.152011, 0.152012",\ + "0.452924, 0.452924, 0.452925, 0.452931, 0.452944",\ + "1.518485, 1.518485, 1.518485, 1.518486, 1.518488",\ + "0.044581, 0.044581, 0.044581, 0.044581, 0.044582",\ + "0.073511, 0.073511, 0.073511, 0.073512, 0.073513",\ + "0.152010, 0.152010, 0.152010, 0.152011, 0.152012",\ + "0.452924, 0.452924, 0.452925, 0.452931, 0.452944",\ + "1.518485, 1.518485, 1.518485, 1.518486, 1.518488",\ + "0.044581, 0.044581, 0.044581, 0.044581, 0.044582",\ + "0.073511, 0.073511, 0.073511, 0.073512, 0.073513",\ + "0.152010, 0.152010, 0.152010, 0.152011, 0.152012",\ + "0.452924, 0.452924, 0.452925, 0.452931, 0.452944",\ + "1.518485, 1.518485, 1.518485, 1.518486, 1.518488",\ + "0.044581, 0.044581, 0.044581, 0.044581, 0.044582",\ + "0.073511, 0.073511, 0.073511, 0.073512, 0.073513",\ + "0.152010, 0.152010, 0.152010, 0.152011, 0.152012",\ + "0.452924, 0.452924, 0.452925, 0.452931, 0.452944",\ + "1.518485, 1.518485, 1.518485, 1.518486, 1.518488"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[10]_redg_min_2312*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[3]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.513665, 0.692005, 0.872351, 1.158538, 1.709291",\ + "0.541488, 0.719827, 0.900174, 1.186360, 1.737113",\ + "0.612490, 0.790830, 0.971176, 1.257363, 1.808116",\ + "0.868217, 1.046556, 1.226903, 1.513090, 2.063843",\ + "1.770448, 1.948787, 2.129134, 2.415321, 2.966074",\ + "0.598604, 0.776840, 0.957422, 1.244044, 1.795670",\ + "0.626426, 0.804663, 0.985244, 1.271867, 1.823492",\ + "0.697429, 0.875665, 1.056247, 1.342869, 1.894494",\ + "0.953155, 1.131392, 1.311973, 1.598596, 2.150221",\ + "1.855386, 2.033623, 2.214204, 2.500827, 3.052452",\ + "0.674510, 0.852284, 1.032230, 1.318641, 1.869842",\ + "0.702332, 0.880106, 1.060053, 1.346463, 1.897664",\ + "0.773335, 0.951109, 1.131055, 1.417466, 1.968667",\ + "1.029061, 1.206835, 1.386782, 1.673193, 2.224393",\ + "1.931292, 2.109066, 2.289013, 2.575424, 3.126625",\ + "0.728862, 0.907029, 1.087096, 1.373235, 1.924159",\ + "0.756684, 0.934852, 1.114918, 1.401057, 1.951982",\ + "0.827687, 1.005854, 1.185921, 1.472059, 2.022984",\ + "1.083413, 1.261581, 1.441647, 1.727786, 2.278711",\ + "1.985644, 2.163812, 2.343878, 2.630017, 3.180942",\ + "1.010284, 1.192547, 1.371249, 1.656961, 2.207437",\ + "1.038106, 1.220369, 1.399071, 1.684783, 2.235259",\ + "1.109109, 1.291372, 1.470074, 1.755786, 2.306262",\ + "1.364835, 1.547098, 1.725800, 2.011513, 2.561988",\ + "2.267066, 2.449329, 2.628031, 2.913743, 3.464219"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.057228, 0.057228, 0.057228, 0.057228, 0.057228",\ + "0.105834, 0.105834, 0.105834, 0.105834, 0.105834",\ + "0.238478, 0.238478, 0.238478, 0.238478, 0.238478",\ + "0.727955, 0.727955, 0.727955, 0.727955, 0.727955",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.057228, 0.057228, 0.057228, 0.057228, 0.057228",\ + "0.105834, 0.105834, 0.105834, 0.105834, 0.105834",\ + "0.238478, 0.238478, 0.238478, 0.238478, 0.238478",\ + "0.727955, 0.727955, 0.727955, 0.727955, 0.727955",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.057228, 0.057228, 0.057228, 0.057228, 0.057228",\ + "0.105834, 0.105834, 0.105834, 0.105834, 0.105834",\ + "0.238478, 0.238478, 0.238478, 0.238478, 0.238478",\ + "0.727955, 0.727955, 0.727955, 0.727955, 0.727955",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.057228, 0.057228, 0.057228, 0.057228, 0.057228",\ + "0.105834, 0.105834, 0.105834, 0.105834, 0.105834",\ + "0.238478, 0.238478, 0.238478, 0.238478, 0.238478",\ + "0.727955, 0.727955, 0.727955, 0.727955, 0.727955",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.057228, 0.057228, 0.057228, 0.057228, 0.057228",\ + "0.105834, 0.105834, 0.105834, 0.105834, 0.105834",\ + "0.238478, 0.238478, 0.238478, 0.238478, 0.238478",\ + "0.727955, 0.727955, 0.727955, 0.727955, 0.727955",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.395836, 0.660835, 0.919855, 1.356084, 2.228162",\ + "0.415771, 0.680770, 0.939790, 1.376020, 2.248097",\ + "0.463414, 0.728413, 0.987433, 1.423663, 2.295740",\ + "0.628747, 0.893746, 1.152766, 1.588995, 2.461072",\ + "1.212850, 1.477849, 1.736879, 2.173143, 3.045290",\ + "0.484501, 0.748910, 1.008496, 1.444313, 2.315567",\ + "0.504437, 0.768845, 1.028431, 1.464249, 2.335502",\ + "0.552080, 0.816488, 1.076074, 1.511892, 2.383145",\ + "0.717412, 0.981821, 1.241406, 1.677224, 2.548478",\ + "1.301516, 1.565924, 1.825520, 2.261372, 3.132695",\ + "0.577308, 0.842203, 1.100531, 1.536557, 2.408609",\ + "0.597243, 0.862139, 1.120466, 1.556492, 2.428544",\ + "0.644887, 0.909782, 1.168109, 1.604135, 2.476187",\ + "0.810219, 1.075114, 1.333442, 1.769467, 2.641520",\ + "1.394323, 1.659218, 1.917555, 2.353615, 3.225737",\ + "0.643031, 0.910738, 1.167586, 1.603563, 2.475518",\ + "0.662966, 0.930673, 1.187521, 1.623498, 2.495454",\ + "0.710609, 0.978316, 1.235164, 1.671142, 2.543097",\ + "0.875941, 1.143648, 1.400497, 1.836474, 2.708429",\ + "1.460045, 1.727752, 1.984610, 2.420622, 3.292646",\ + "0.988820, 1.291236, 1.538224, 1.972764, 2.841846",\ + "1.008755, 1.311171, 1.558159, 1.992699, 2.861781",\ + "1.056399, 1.358814, 1.605802, 2.040343, 2.909424",\ + "1.221731, 1.524147, 1.771134, 2.205675, 3.074756",\ + "1.805834, 2.108251, 2.355248, 2.789823, 3.658973"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.044581, 0.044581, 0.044581, 0.044581, 0.044581",\ + "0.073511, 0.073511, 0.073511, 0.073511, 0.073511",\ + "0.152010, 0.152010, 0.152010, 0.152010, 0.152010",\ + "0.452924, 0.452924, 0.452924, 0.452925, 0.452925",\ + "1.518485, 1.518485, 1.518485, 1.518485, 1.518485",\ + "0.044581, 0.044581, 0.044581, 0.044581, 0.044581",\ + "0.073511, 0.073511, 0.073511, 0.073511, 0.073511",\ + "0.152010, 0.152010, 0.152010, 0.152010, 0.152010",\ + "0.452924, 0.452924, 0.452924, 0.452925, 0.452925",\ + "1.518485, 1.518485, 1.518485, 1.518485, 1.518485",\ + "0.044581, 0.044581, 0.044581, 0.044581, 0.044581",\ + "0.073511, 0.073511, 0.073511, 0.073511, 0.073511",\ + "0.152010, 0.152010, 0.152010, 0.152010, 0.152010",\ + "0.452924, 0.452924, 0.452924, 0.452925, 0.452925",\ + "1.518485, 1.518485, 1.518485, 1.518485, 1.518485",\ + "0.044581, 0.044581, 0.044581, 0.044581, 0.044581",\ + "0.073511, 0.073511, 0.073511, 0.073511, 0.073511",\ + "0.152010, 0.152010, 0.152010, 0.152010, 0.152010",\ + "0.452924, 0.452924, 0.452924, 0.452925, 0.452925",\ + "1.518485, 1.518485, 1.518485, 1.518485, 1.518485",\ + "0.044581, 0.044581, 0.044581, 0.044581, 0.044581",\ + "0.073511, 0.073511, 0.073511, 0.073511, 0.073511",\ + "0.152010, 0.152010, 0.152010, 0.152010, 0.152010",\ + "0.452924, 0.452924, 0.452924, 0.452925, 0.452925",\ + "1.518485, 1.518485, 1.518485, 1.518485, 1.518485"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[10]_redg_min_2754*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + values ( "0.151345, 0.179420, 0.250838, 0.507101, 1.411098",\ + "0.239529, 0.267606, 0.339037, 0.595340, 1.499024",\ + "0.327854, 0.355929, 0.427371, 0.683856, 1.587106",\ + "0.390452, 0.418510, 0.489921, 0.746692, 1.650402",\ + "0.720352, 0.748358, 0.819633, 1.076844, 1.982165"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + values ( "0.057228, 0.105834, 0.238478, 0.727955, 2.448223",\ + "0.057228, 0.105834, 0.238478, 0.727955, 2.448223",\ + "0.057228, 0.105834, 0.238478, 0.727955, 2.448223",\ + "0.057228, 0.105834, 0.238478, 0.727955, 2.448223",\ + "0.057228, 0.105834, 0.238478, 0.727955, 2.448223"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + values ( "0.187745, 0.208337, 0.256868, 0.422532, 1.003731",\ + "0.275148, 0.295740, 0.344271, 0.509935, 1.091134",\ + "0.356045, 0.376636, 0.425171, 0.590840, 1.172047",\ + "0.413704, 0.434296, 0.482838, 0.648514, 1.229738",\ + "0.716053, 0.736646, 0.785216, 0.950960, 1.532355"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + values ( "0.044579, 0.073509, 0.152008, 0.452080, 1.516200",\ + "0.044579, 0.073509, 0.152008, 0.452080, 1.516200",\ + "0.044579, 0.073509, 0.152008, 0.452124, 1.516200",\ + "0.044579, 0.073509, 0.152008, 0.452204, 1.516200",\ + "0.044579, 0.073509, 0.152008, 0.452924, 1.516200"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[10]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_falling ; + clock_gating_flag : true ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.059999, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.146298, 0.146298, 0.146298, 0.146298, 0.146298",\ + "0.171440, 0.171440, 0.171440, 0.171440, 0.171440",\ + "0.241225, 0.241225, 0.241225, 0.241225, 0.241225",\ + "0.364369, 0.364369, 0.364369, 0.364369, 0.364369",\ + "0.930611, 0.930611, 0.930611, 0.930611, 0.930611"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.053775, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.419370, 0.419370, 0.419370, 0.419370, 0.419370",\ + "0.439927, 0.439927, 0.439927, 0.439927, 0.439927",\ + "0.498432, 0.498432, 0.498432, 0.498432, 0.498432",\ + "0.607706, 0.607706, 0.607706, 0.607706, 0.607706",\ + "1.345296, 1.345296, 1.345296, 1.345296, 1.345296"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[10]_cgsf*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + clock_gating_flag : true ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.056753, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.138551, -0.138551, -0.138551, -0.138551, -0.138551",\ + "-0.162150, -0.162150, -0.162150, -0.162150, -0.162150",\ + "-0.233628, -0.233628, -0.233628, -0.233628, -0.233628",\ + "-0.357370, -0.357370, -0.357370, -0.357370, -0.357370",\ + "-0.923132, -0.923132, -0.923132, -0.923132, -0.923132"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.044579, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.415516, -0.415516, -0.415516, -0.415516, -0.415516",\ + "-0.432323, -0.432323, -0.432323, -0.432323, -0.432323",\ + "-0.494548, -0.494548, -0.494548, -0.494548, -0.494548",\ + "-0.603812, -0.603812, -0.603812, -0.603812, -0.603812",\ + "-1.339799, -1.339799, -1.339799, -1.339799, -1.339799"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[10]_cghr*/ + + timing () { + related_pin : "padmux2ast_i[2]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + values ( "0.098861, 0.127061, 0.198218, 0.454154, 1.359203",\ + "0.186535, 0.214722, 0.285779, 0.541885, 1.444562",\ + "0.285062, 0.314115, 0.385746, 0.641617, 1.547694",\ + "0.464742, 0.495967, 0.569252, 0.824864, 1.732299",\ + "0.773180, 0.811674, 0.892653, 1.148190, 2.048527"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + values ( "0.058877, 0.106972, 0.239632, 0.734291, 2.481454",\ + "0.059452, 0.107162, 0.239653, 0.735798, 2.481454",\ + "0.065492, 0.111214, 0.239653, 0.735798, 2.481454",\ + "0.080964, 0.122543, 0.243345, 0.735798, 2.481454",\ + "0.122739, 0.156713, 0.261409, 0.735798, 2.481454"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + values ( "0.135906, 0.157942, 0.208401, 0.375177, 0.957248",\ + "0.214952, 0.236957, 0.287364, 0.454102, 1.034980",\ + "0.319131, 0.342208, 0.393489, 0.560142, 1.142872",\ + "0.499405, 0.526607, 0.582603, 0.750679, 1.332501",\ + "0.794222, 0.832488, 0.901924, 1.075291, 1.655125"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + values ( "0.053775, 0.082436, 0.159158, 0.457799, 1.524944",\ + "0.053775, 0.082436, 0.159158, 0.457799, 1.524944",\ + "0.061142, 0.087763, 0.161724, 0.457799, 1.524944",\ + "0.087222, 0.109690, 0.175261, 0.460373, 1.524944",\ + "0.145864, 0.166027, 0.220323, 0.470910, 1.526598"); + } + + } /* end of arc padmux2ast_i[2]_obs_ctrl_o[10]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[2]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + values ( "0.094010, 0.121742, 0.192687, 0.448829, 1.352120",\ + "0.181367, 0.209191, 0.280055, 0.536519, 1.439207",\ + "0.278263, 0.306648, 0.378094, 0.633788, 1.536303",\ + "0.454444, 0.484657, 0.556595, 0.813226, 1.718362",\ + "0.755309, 0.792056, 0.870822, 1.124333, 2.025527"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + values ( "0.056753, 0.105860, 0.238203, 0.725444, 2.440521",\ + "0.057457, 0.106111, 0.238203, 0.725444, 2.440521",\ + "0.062809, 0.109450, 0.238891, 0.728499, 2.449750",\ + "0.076809, 0.119663, 0.242773, 0.728499, 2.460771",\ + "0.116537, 0.152614, 0.258265, 0.732313, 2.462313"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + values ( "0.100529, 0.120692, 0.168644, 0.334136, 0.916833",\ + "0.185614, 0.205791, 0.253754, 0.419069, 1.001005",\ + "0.286304, 0.308070, 0.357380, 0.522540, 1.104903",\ + "0.458699, 0.485107, 0.539262, 0.704482, 1.285416",\ + "0.740887, 0.778992, 0.848123, 1.019973, 1.597477"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.002440, 0.005679, 0.014260, 0.045576, 0.156168"); + values ( "0.045486, 0.074449, 0.152541, 0.452549, 1.519412",\ + "0.046012, 0.074648, 0.152769, 0.453825, 1.520024",\ + "0.056013, 0.082252, 0.156413, 0.454416, 1.520024",\ + "0.082035, 0.104246, 0.169572, 0.457496, 1.520040",\ + "0.139812, 0.159966, 0.214496, 0.467116, 1.522752"); + } + + } /* end of arc padmux2ast_i[2]_obs_ctrl_o[10]_una_min*/ + +} /* end of pin obs_ctrl_o[10] */ + +pin("obs_ctrl_o[9]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.156168 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001432 ; + + /* Other user defined attributes. */ + original_pin : obs_ctrl_o[9]; + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[0]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.560564, 0.740767, 0.928257, 1.230250, 1.813761",\ + "0.590490, 0.770693, 0.958183, 1.260175, 1.843687",\ + "0.662228, 0.842431, 1.029921, 1.331913, 1.915425",\ + "0.918680, 1.098883, 1.286373, 1.588366, 2.171877",\ + "1.830892, 2.011095, 2.198585, 2.500578, 3.084090",\ + "0.645502, 0.826050, 1.014266, 1.316262, 1.900140",\ + "0.675428, 0.855976, 1.044191, 1.346187, 1.930065",\ + "0.747166, 0.927714, 1.115929, 1.417926, 2.001803",\ + "1.003618, 1.184166, 1.372382, 1.674378, 2.258256",\ + "1.915831, 2.096378, 2.284594, 2.586590, 3.170468",\ + "0.721415, 0.901494, 1.089075, 1.390859, 1.974312",\ + "0.751340, 0.931419, 1.119000, 1.420784, 2.004238",\ + "0.823078, 1.003157, 1.190738, 1.492522, 2.075976",\ + "1.079530, 1.259610, 1.447191, 1.748975, 2.332428",\ + "1.991743, 2.171822, 2.359403, 2.661187, 3.244640",\ + "0.775784, 0.956005, 1.143726, 1.445398, 2.028629",\ + "0.805709, 0.985931, 1.173651, 1.475324, 2.058555",\ + "0.877448, 1.057669, 1.245389, 1.547062, 2.130293",\ + "1.133900, 1.314121, 1.501842, 1.803514, 2.386745",\ + "2.046112, 2.226333, 2.414054, 2.715726, 3.298958",\ + "1.057379, 1.241273, 1.427676, 1.729125, 2.311907",\ + "1.087304, 1.271199, 1.457602, 1.759050, 2.341833",\ + "1.159042, 1.342937, 1.529340, 1.830788, 2.413571",\ + "1.415495, 1.599389, 1.785792, 2.087241, 2.670023",\ + "2.327707, 2.511601, 2.698004, 2.999453, 3.582235"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.046137, 0.046137, 0.046137, 0.046137, 0.046137",\ + "0.092740, 0.092740, 0.092740, 0.092740, 0.092740",\ + "0.224143, 0.224143, 0.224143, 0.224143, 0.224143",\ + "0.716280, 0.716280, 0.716280, 0.716280, 0.716280",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.046137, 0.046137, 0.046137, 0.046137, 0.046137",\ + "0.092740, 0.092740, 0.092740, 0.092740, 0.092740",\ + "0.224143, 0.224143, 0.224143, 0.224143, 0.224143",\ + "0.716280, 0.716280, 0.716280, 0.716280, 0.716280",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.046137, 0.046137, 0.046137, 0.046137, 0.046137",\ + "0.092740, 0.092740, 0.092740, 0.092740, 0.092740",\ + "0.224143, 0.224143, 0.224143, 0.224143, 0.224143",\ + "0.716280, 0.716280, 0.716280, 0.716280, 0.716280",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.046137, 0.046137, 0.046137, 0.046137, 0.046137",\ + "0.092740, 0.092740, 0.092740, 0.092740, 0.092740",\ + "0.224143, 0.224143, 0.224143, 0.224143, 0.224143",\ + "0.716280, 0.716280, 0.716280, 0.716280, 0.716280",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.046137, 0.046137, 0.046137, 0.046137, 0.046137",\ + "0.092740, 0.092740, 0.092740, 0.092740, 0.092740",\ + "0.224143, 0.224143, 0.224143, 0.224143, 0.224143",\ + "0.716280, 0.716280, 0.716280, 0.716280, 0.716280",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.418380, 0.686166, 0.947746, 1.387443, 2.266838",\ + "0.442754, 0.710540, 0.972120, 1.411817, 2.291212",\ + "0.493609, 0.761395, 1.022975, 1.462672, 2.342067",\ + "0.660045, 0.927830, 1.189410, 1.629108, 2.508502",\ + "1.246765, 1.514551, 1.776131, 2.215828, 3.095223",\ + "0.507084, 0.774241, 1.036387, 1.475672, 2.354243",\ + "0.531458, 0.798615, 1.060761, 1.500046, 2.378617",\ + "0.582313, 0.849470, 1.111616, 1.550901, 2.429472",\ + "0.748749, 1.015905, 1.278051, 1.717337, 2.595908",\ + "1.335469, 1.602626, 1.864772, 2.304057, 3.182628",\ + "0.600027, 0.867386, 1.128112, 1.567836, 2.447285",\ + "0.624401, 0.891760, 1.152486, 1.592211, 2.471659",\ + "0.675255, 0.942615, 1.203341, 1.643065, 2.522514",\ + "0.841691, 1.109051, 1.369777, 1.809501, 2.688950",\ + "1.428411, 1.695771, 1.956497, 2.396221, 3.275670",\ + "0.665870, 0.935950, 1.195132, 1.634687, 2.513796",\ + "0.690244, 0.960324, 1.219506, 1.659061, 2.538170",\ + "0.741099, 1.011179, 1.270361, 1.709916, 2.589025",\ + "0.907535, 1.177615, 1.436797, 1.876351, 2.755461",\ + "1.494255, 1.764335, 2.023517, 2.463071, 3.342181",\ + "1.012392, 1.316786, 1.565795, 2.003840, 2.879932",\ + "1.036766, 1.341160, 1.590169, 2.028214, 2.904306",\ + "1.087620, 1.392015, 1.641024, 2.079069, 2.955161",\ + "1.254056, 1.558450, 1.807460, 2.245505, 3.121596",\ + "1.840776, 2.145171, 2.394180, 2.832225, 3.708317"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.044458, 0.044458, 0.044458, 0.044458, 0.044458",\ + "0.073621, 0.073621, 0.073621, 0.073621, 0.073620",\ + "0.149757, 0.149757, 0.149757, 0.149757, 0.149757",\ + "0.447950, 0.447950, 0.447950, 0.447950, 0.447950",\ + "1.523369, 1.523369, 1.523369, 1.523369, 1.523370",\ + "0.044458, 0.044458, 0.044458, 0.044458, 0.044458",\ + "0.073621, 0.073621, 0.073621, 0.073621, 0.073620",\ + "0.149757, 0.149757, 0.149757, 0.149757, 0.149757",\ + "0.447950, 0.447950, 0.447950, 0.447950, 0.447950",\ + "1.523369, 1.523369, 1.523369, 1.523369, 1.523370",\ + "0.044458, 0.044458, 0.044458, 0.044458, 0.044458",\ + "0.073621, 0.073621, 0.073621, 0.073621, 0.073620",\ + "0.149757, 0.149757, 0.149757, 0.149757, 0.149757",\ + "0.447950, 0.447950, 0.447950, 0.447950, 0.447950",\ + "1.523369, 1.523369, 1.523369, 1.523369, 1.523370",\ + "0.044458, 0.044458, 0.044458, 0.044458, 0.044458",\ + "0.073621, 0.073621, 0.073621, 0.073621, 0.073620",\ + "0.149757, 0.149757, 0.149757, 0.149757, 0.149757",\ + "0.447950, 0.447950, 0.447950, 0.447950, 0.447950",\ + "1.523369, 1.523369, 1.523369, 1.523369, 1.523370",\ + "0.044458, 0.044458, 0.044458, 0.044458, 0.044458",\ + "0.073621, 0.073621, 0.073621, 0.073621, 0.073620",\ + "0.149757, 0.149757, 0.149757, 0.149757, 0.149757",\ + "0.447950, 0.447950, 0.447950, 0.447950, 0.447950",\ + "1.523369, 1.523369, 1.523369, 1.523369, 1.523370"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[9]_redg_2714*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[1]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.468669, 0.732243, 1.008515, 1.477245, 2.414704",\ + "0.498595, 0.762168, 1.038441, 1.507171, 2.444630",\ + "0.570333, 0.833907, 1.110179, 1.578909, 2.516368",\ + "0.826785, 1.090359, 1.366631, 1.835361, 2.772820",\ + "1.738997, 2.002571, 2.278844, 2.747575, 3.685036",\ + "0.556864, 0.819784, 1.096083, 1.563960, 2.500638",\ + "0.586789, 0.849709, 1.126009, 1.593886, 2.530564",\ + "0.658527, 0.921448, 1.197747, 1.665624, 2.602302",\ + "0.914980, 1.177900, 1.454199, 1.922076, 2.858753",\ + "1.827192, 2.090112, 2.366412, 2.834290, 3.770969",\ + "0.645180, 0.908764, 1.184048, 1.651583, 2.587593",\ + "0.675105, 0.938690, 1.213974, 1.681509, 2.617519",\ + "0.746844, 1.010428, 1.285712, 1.753247, 2.689257",\ + "1.003296, 1.266880, 1.542164, 2.009699, 2.945708",\ + "1.915508, 2.179092, 2.454377, 2.921913, 3.857924",\ + "0.707676, 0.974399, 1.248188, 1.715497, 2.651102",\ + "0.737601, 1.004325, 1.278113, 1.745422, 2.681028",\ + "0.809340, 1.076063, 1.349852, 1.817160, 2.752766",\ + "1.065792, 1.332515, 1.606304, 2.073612, 3.009217",\ + "1.978004, 2.244727, 2.518517, 2.985826, 3.921433",\ + "1.036801, 1.338730, 1.600055, 2.064846, 2.996558",\ + "1.066727, 1.368655, 1.629981, 2.094772, 3.026484",\ + "1.138465, 1.440394, 1.701719, 2.166510, 3.098222",\ + "1.394917, 1.696846, 1.958171, 2.422962, 3.354673",\ + "2.307129, 2.609058, 2.870384, 3.335176, 4.266890"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.046137, 0.046137, 0.046137, 0.046137, 0.046136",\ + "0.092740, 0.092740, 0.092740, 0.092740, 0.092740",\ + "0.224143, 0.224143, 0.224142, 0.224142, 0.224142",\ + "0.716281, 0.716280, 0.716280, 0.716278, 0.716274",\ + "2.463890, 2.463890, 2.463889, 2.463887, 2.463883",\ + "0.046137, 0.046137, 0.046137, 0.046137, 0.046136",\ + "0.092740, 0.092740, 0.092740, 0.092740, 0.092740",\ + "0.224143, 0.224143, 0.224142, 0.224142, 0.224142",\ + "0.716281, 0.716280, 0.716280, 0.716278, 0.716274",\ + "2.463890, 2.463890, 2.463889, 2.463887, 2.463883",\ + "0.046137, 0.046137, 0.046137, 0.046137, 0.046136",\ + "0.092740, 0.092740, 0.092740, 0.092740, 0.092740",\ + "0.224143, 0.224143, 0.224142, 0.224142, 0.224142",\ + "0.716281, 0.716280, 0.716280, 0.716278, 0.716274",\ + "2.463890, 2.463890, 2.463889, 2.463887, 2.463883",\ + "0.046137, 0.046137, 0.046137, 0.046137, 0.046136",\ + "0.092740, 0.092740, 0.092740, 0.092740, 0.092740",\ + "0.224143, 0.224143, 0.224142, 0.224142, 0.224142",\ + "0.716281, 0.716280, 0.716280, 0.716278, 0.716274",\ + "2.463890, 2.463890, 2.463889, 2.463887, 2.463883",\ + "0.046137, 0.046137, 0.046137, 0.046137, 0.046136",\ + "0.092740, 0.092740, 0.092740, 0.092740, 0.092740",\ + "0.224143, 0.224143, 0.224142, 0.224142, 0.224142",\ + "0.716281, 0.716280, 0.716280, 0.716278, 0.716274",\ + "2.463890, 2.463890, 2.463889, 2.463887, 2.463883"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.401333, 0.583765, 0.780157, 1.089211, 1.684018",\ + "0.425707, 0.608139, 0.804531, 1.113585, 1.708393",\ + "0.476562, 0.658994, 0.855386, 1.164439, 1.759248",\ + "0.642998, 0.825430, 1.021822, 1.330875, 1.925682",\ + "1.229718, 1.412150, 1.608542, 1.917595, 2.512401",\ + "0.488748, 0.671151, 0.867650, 1.176516, 1.771372",\ + "0.513122, 0.695525, 0.892024, 1.200890, 1.795747",\ + "0.563977, 0.746379, 0.942879, 1.251745, 1.846601",\ + "0.730413, 0.912815, 1.109315, 1.418180, 2.013035",\ + "1.317133, 1.499535, 1.696035, 2.004900, 2.599754",\ + "0.569624, 0.751487, 0.947677, 1.256544, 1.851403",\ + "0.593999, 0.775861, 0.972051, 1.280918, 1.875778",\ + "0.644853, 0.826716, 1.022906, 1.331773, 1.926633",\ + "0.811289, 0.993152, 1.189342, 1.498208, 2.093067",\ + "1.398009, 1.579872, 1.776062, 2.084928, 2.679786",\ + "0.627271, 0.809036, 1.005221, 1.313789, 1.908051",\ + "0.651645, 0.833410, 1.029595, 1.338163, 1.932426",\ + "0.702500, 0.884265, 1.080450, 1.389018, 1.983280",\ + "0.868935, 1.050700, 1.246886, 1.555453, 2.149714",\ + "1.455656, 1.637420, 1.833606, 2.142173, 2.736434",\ + "0.929479, 1.114260, 1.308855, 1.616804, 2.209898",\ + "0.953853, 1.138634, 1.333229, 1.641178, 2.234272",\ + "1.004707, 1.189489, 1.384084, 1.692033, 2.285127",\ + "1.171143, 1.355925, 1.550519, 1.858468, 2.451561",\ + "1.757863, 1.942645, 2.137239, 2.445188, 3.038280"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.044458, 0.044458, 0.044458, 0.044458, 0.044458",\ + "0.073621, 0.073621, 0.073620, 0.073619, 0.073617",\ + "0.149757, 0.149757, 0.149757, 0.149757, 0.149757",\ + "0.447950, 0.447950, 0.447950, 0.447950, 0.447950",\ + "1.523369, 1.523369, 1.523369, 1.523369, 1.523368",\ + "0.044458, 0.044458, 0.044458, 0.044458, 0.044458",\ + "0.073621, 0.073621, 0.073620, 0.073619, 0.073617",\ + "0.149757, 0.149757, 0.149757, 0.149757, 0.149757",\ + "0.447950, 0.447950, 0.447950, 0.447950, 0.447950",\ + "1.523369, 1.523369, 1.523369, 1.523369, 1.523368",\ + "0.044458, 0.044458, 0.044458, 0.044458, 0.044458",\ + "0.073621, 0.073621, 0.073620, 0.073619, 0.073617",\ + "0.149757, 0.149757, 0.149757, 0.149757, 0.149757",\ + "0.447950, 0.447950, 0.447950, 0.447950, 0.447950",\ + "1.523369, 1.523369, 1.523369, 1.523369, 1.523368",\ + "0.044458, 0.044458, 0.044458, 0.044458, 0.044458",\ + "0.073621, 0.073621, 0.073620, 0.073619, 0.073617",\ + "0.149757, 0.149757, 0.149757, 0.149757, 0.149757",\ + "0.447950, 0.447950, 0.447950, 0.447950, 0.447950",\ + "1.523369, 1.523369, 1.523369, 1.523369, 1.523368",\ + "0.044458, 0.044458, 0.044458, 0.044458, 0.044458",\ + "0.073621, 0.073621, 0.073620, 0.073619, 0.073617",\ + "0.149757, 0.149757, 0.149757, 0.149757, 0.149757",\ + "0.447950, 0.447950, 0.447950, 0.447950, 0.447950",\ + "1.523369, 1.523369, 1.523369, 1.523369, 1.523368"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[9]_redg_2644*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[2]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.464694, 0.724323, 0.996195, 1.453075, 2.366835",\ + "0.494620, 0.754249, 1.026121, 1.483001, 2.396760",\ + "0.566358, 0.825987, 1.097859, 1.554739, 2.468498",\ + "0.822810, 1.082439, 1.354311, 1.811191, 2.724950",\ + "1.735022, 1.994652, 2.266525, 2.723405, 3.637166",\ + "0.552799, 0.811857, 1.083726, 1.539791, 2.452769",\ + "0.582724, 0.841782, 1.113652, 1.569716, 2.482694",\ + "0.654463, 0.913521, 1.185390, 1.641454, 2.554432",\ + "0.910915, 1.169973, 1.441842, 1.897906, 2.810884",\ + "1.823127, 2.082185, 2.354055, 2.810120, 3.723099",\ + "0.640829, 0.900823, 1.171690, 1.627413, 2.539724",\ + "0.670754, 0.930748, 1.201616, 1.657339, 2.569649",\ + "0.742493, 1.002486, 1.273354, 1.729077, 2.641387",\ + "0.998945, 1.258938, 1.529806, 1.985529, 2.897839",\ + "1.911157, 2.171151, 2.442019, 2.897743, 3.810054",\ + "0.703050, 0.966436, 1.235828, 1.691327, 2.603233",\ + "0.732976, 0.996362, 1.265754, 1.721252, 2.633158",\ + "0.804714, 1.068100, 1.337492, 1.792991, 2.704896",\ + "1.061166, 1.324552, 1.593944, 2.049443, 2.961348",\ + "1.973378, 2.236765, 2.506157, 2.961657, 3.873563",\ + "1.030438, 1.330511, 1.587575, 2.040628, 2.948689",\ + "1.060363, 1.360437, 1.617501, 2.070553, 2.978614",\ + "1.132102, 1.432175, 1.689239, 2.142292, 3.050352",\ + "1.388554, 1.688627, 1.945691, 2.398743, 3.306804",\ + "2.300766, 2.600840, 2.857904, 3.310957, 4.219019"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.046137, 0.046137, 0.046137, 0.046137, 0.046136",\ + "0.092740, 0.092740, 0.092740, 0.092740, 0.092740",\ + "0.224143, 0.224143, 0.224142, 0.224142, 0.224142",\ + "0.716281, 0.716280, 0.716279, 0.716276, 0.716270",\ + "2.463890, 2.463890, 2.463888, 2.463885, 2.463879",\ + "0.046137, 0.046137, 0.046137, 0.046137, 0.046136",\ + "0.092740, 0.092740, 0.092740, 0.092740, 0.092740",\ + "0.224143, 0.224143, 0.224142, 0.224142, 0.224142",\ + "0.716281, 0.716280, 0.716279, 0.716276, 0.716270",\ + "2.463890, 2.463890, 2.463888, 2.463885, 2.463879",\ + "0.046137, 0.046137, 0.046137, 0.046137, 0.046136",\ + "0.092740, 0.092740, 0.092740, 0.092740, 0.092740",\ + "0.224143, 0.224143, 0.224142, 0.224142, 0.224142",\ + "0.716281, 0.716280, 0.716279, 0.716276, 0.716270",\ + "2.463890, 2.463890, 2.463888, 2.463885, 2.463879",\ + "0.046137, 0.046137, 0.046137, 0.046137, 0.046136",\ + "0.092740, 0.092740, 0.092740, 0.092740, 0.092740",\ + "0.224143, 0.224143, 0.224142, 0.224142, 0.224142",\ + "0.716281, 0.716280, 0.716279, 0.716276, 0.716270",\ + "2.463890, 2.463890, 2.463888, 2.463885, 2.463879",\ + "0.046137, 0.046137, 0.046137, 0.046137, 0.046136",\ + "0.092740, 0.092740, 0.092740, 0.092740, 0.092740",\ + "0.224143, 0.224142, 0.224142, 0.224142, 0.224142",\ + "0.716281, 0.716280, 0.716279, 0.716276, 0.716270",\ + "2.463890, 2.463889, 2.463888, 2.463885, 2.463879"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.399672, 0.582213, 0.778468, 1.087685, 1.682981",\ + "0.424046, 0.606587, 0.802842, 1.112059, 1.707356",\ + "0.474901, 0.657442, 0.853696, 1.162914, 1.758210",\ + "0.641336, 0.823877, 1.020132, 1.329349, 1.924644",\ + "1.228057, 1.410598, 1.606853, 1.916069, 2.511364",\ + "0.487092, 0.669598, 0.865960, 1.174990, 1.770335",\ + "0.511466, 0.693972, 0.890334, 1.199364, 1.794710",\ + "0.562321, 0.744827, 0.941189, 1.250219, 1.845564",\ + "0.728756, 0.911263, 1.107625, 1.416654, 2.011998",\ + "1.315477, 1.497983, 1.694345, 2.003374, 2.598717",\ + "0.567959, 0.749935, 0.945987, 1.255018, 1.850366",\ + "0.592334, 0.774309, 0.970361, 1.279393, 1.874741",\ + "0.643188, 0.825164, 1.021216, 1.330247, 1.925596",\ + "0.809624, 0.991600, 1.187652, 1.496683, 2.092030",\ + "1.396344, 1.578320, 1.774372, 2.083403, 2.678749",\ + "0.625598, 0.807484, 1.003531, 1.312263, 1.907014",\ + "0.649972, 0.831858, 1.027905, 1.336638, 1.931389",\ + "0.700827, 0.882712, 1.078760, 1.387492, 1.982243",\ + "0.867263, 1.049148, 1.245196, 1.553928, 2.148677",\ + "1.453983, 1.635868, 1.831916, 2.140648, 2.735396",\ + "0.927693, 1.112710, 1.307165, 1.615278, 2.208861",\ + "0.952068, 1.137084, 1.331539, 1.639653, 2.233236",\ + "1.002922, 1.187939, 1.382394, 1.690507, 2.284090",\ + "1.169358, 1.354374, 1.548830, 1.856943, 2.450524",\ + "1.756078, 1.941095, 2.135550, 2.443663, 3.037243"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.044458, 0.044458, 0.044458, 0.044458, 0.044458",\ + "0.073621, 0.073621, 0.073620, 0.073619, 0.073617",\ + "0.149757, 0.149757, 0.149757, 0.149757, 0.149757",\ + "0.447950, 0.447950, 0.447950, 0.447950, 0.447950",\ + "1.523369, 1.523369, 1.523369, 1.523369, 1.523367",\ + "0.044458, 0.044458, 0.044458, 0.044458, 0.044458",\ + "0.073621, 0.073621, 0.073620, 0.073619, 0.073617",\ + "0.149757, 0.149757, 0.149757, 0.149757, 0.149757",\ + "0.447950, 0.447950, 0.447950, 0.447950, 0.447950",\ + "1.523369, 1.523369, 1.523369, 1.523369, 1.523367",\ + "0.044458, 0.044458, 0.044458, 0.044458, 0.044458",\ + "0.073621, 0.073621, 0.073620, 0.073619, 0.073617",\ + "0.149757, 0.149757, 0.149757, 0.149757, 0.149757",\ + "0.447950, 0.447950, 0.447950, 0.447950, 0.447950",\ + "1.523369, 1.523369, 1.523369, 1.523369, 1.523367",\ + "0.044458, 0.044458, 0.044458, 0.044458, 0.044458",\ + "0.073621, 0.073621, 0.073620, 0.073619, 0.073617",\ + "0.149757, 0.149757, 0.149757, 0.149757, 0.149757",\ + "0.447950, 0.447950, 0.447950, 0.447950, 0.447950",\ + "1.523369, 1.523369, 1.523369, 1.523369, 1.523367",\ + "0.044458, 0.044458, 0.044458, 0.044458, 0.044458",\ + "0.073621, 0.073621, 0.073620, 0.073619, 0.073617",\ + "0.149757, 0.149757, 0.149757, 0.149757, 0.149757",\ + "0.447950, 0.447950, 0.447950, 0.447950, 0.447950",\ + "1.523369, 1.523369, 1.523369, 1.523369, 1.523367"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[9]_redg_2587*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[3]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.556978, 0.735404, 0.915665, 1.201871, 1.752988",\ + "0.586903, 0.765330, 0.945590, 1.231797, 1.782914",\ + "0.658642, 0.837068, 1.017329, 1.303535, 1.854652",\ + "0.915094, 1.093521, 1.273781, 1.559987, 2.111104",\ + "1.827306, 2.005733, 2.185993, 2.472199, 3.023317",\ + "0.641916, 0.820677, 1.001580, 1.287791, 1.839366",\ + "0.671842, 0.850602, 1.031505, 1.317717, 1.869292",\ + "0.743580, 0.922341, 1.103244, 1.389455, 1.941030",\ + "1.000032, 1.178793, 1.359696, 1.645907, 2.197482",\ + "1.912244, 2.091005, 2.271908, 2.558120, 3.109695",\ + "0.717822, 0.896120, 1.076389, 1.362388, 1.913539",\ + "0.747748, 0.926046, 1.106314, 1.392314, 1.943465",\ + "0.819486, 0.997784, 1.178053, 1.464052, 2.015203",\ + "1.075938, 1.254236, 1.434505, 1.720504, 2.271655",\ + "1.988150, 2.166448, 2.346717, 2.632716, 3.183867",\ + "0.772174, 0.950632, 1.131040, 1.416928, 1.967856",\ + "0.802100, 0.980558, 1.160965, 1.446854, 1.997782",\ + "0.873838, 1.052296, 1.232704, 1.518592, 2.069520",\ + "1.130290, 1.308748, 1.489156, 1.775044, 2.325972",\ + "2.042502, 2.220960, 2.401368, 2.687256, 3.238184",\ + "1.053596, 1.235859, 1.414990, 1.700654, 2.251134",\ + "1.083522, 1.265785, 1.444916, 1.730580, 2.281059",\ + "1.155260, 1.337523, 1.516654, 1.802318, 2.352798",\ + "1.411712, 1.593975, 1.773107, 2.058770, 2.609250",\ + "2.323924, 2.506187, 2.685318, 2.970983, 3.521462"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.046137, 0.046137, 0.046137, 0.046137, 0.046137",\ + "0.092740, 0.092740, 0.092740, 0.092740, 0.092740",\ + "0.224143, 0.224143, 0.224143, 0.224143, 0.224143",\ + "0.716280, 0.716280, 0.716280, 0.716280, 0.716280",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.046137, 0.046137, 0.046137, 0.046137, 0.046137",\ + "0.092740, 0.092740, 0.092740, 0.092740, 0.092740",\ + "0.224143, 0.224143, 0.224143, 0.224143, 0.224143",\ + "0.716280, 0.716280, 0.716280, 0.716280, 0.716280",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.046137, 0.046137, 0.046137, 0.046137, 0.046137",\ + "0.092740, 0.092740, 0.092740, 0.092740, 0.092740",\ + "0.224143, 0.224143, 0.224143, 0.224143, 0.224143",\ + "0.716280, 0.716280, 0.716280, 0.716280, 0.716280",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.046137, 0.046137, 0.046137, 0.046137, 0.046137",\ + "0.092740, 0.092740, 0.092740, 0.092740, 0.092740",\ + "0.224143, 0.224143, 0.224143, 0.224143, 0.224143",\ + "0.716280, 0.716280, 0.716280, 0.716280, 0.716280",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.046137, 0.046137, 0.046137, 0.046137, 0.046137",\ + "0.092740, 0.092740, 0.092740, 0.092740, 0.092740",\ + "0.224143, 0.224143, 0.224143, 0.224143, 0.224143",\ + "0.716280, 0.716280, 0.716280, 0.716280, 0.716280",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.416944, 0.682114, 0.941316, 1.377498, 2.249863",\ + "0.441318, 0.706488, 0.965690, 1.401872, 2.274237",\ + "0.492173, 0.757343, 1.016545, 1.452727, 2.325092",\ + "0.658609, 0.923779, 1.182980, 1.619163, 2.491528",\ + "1.245329, 1.510499, 1.769700, 2.205883, 3.078248",\ + "0.505610, 0.770189, 1.029957, 1.465727, 2.337268",\ + "0.529984, 0.794563, 1.054331, 1.490101, 2.361642",\ + "0.580839, 0.845418, 1.105186, 1.540956, 2.412497",\ + "0.747274, 1.011853, 1.271621, 1.707392, 2.578933",\ + "1.333995, 1.598574, 1.858341, 2.294112, 3.165653",\ + "0.598417, 0.863312, 1.121682, 1.557891, 2.430310",\ + "0.622791, 0.887686, 1.146056, 1.582265, 2.454684",\ + "0.673645, 0.938541, 1.196911, 1.633120, 2.505539",\ + "0.840081, 1.104976, 1.363346, 1.799556, 2.671975",\ + "1.426801, 1.691697, 1.950067, 2.386276, 3.258695",\ + "0.664139, 0.931846, 1.188702, 1.624742, 2.496821",\ + "0.688513, 0.956220, 1.213076, 1.649116, 2.521195",\ + "0.739368, 1.007075, 1.263931, 1.699970, 2.572050",\ + "0.905804, 1.173511, 1.430366, 1.866406, 2.738486",\ + "1.492524, 1.760231, 2.017087, 2.453126, 3.325206",\ + "1.009929, 1.312345, 1.559332, 1.993873, 2.862955",\ + "1.034303, 1.336719, 1.583706, 2.018247, 2.887329",\ + "1.085157, 1.387573, 1.634561, 2.069102, 2.938183",\ + "1.251593, 1.554009, 1.800997, 2.235537, 3.104619",\ + "1.838313, 2.140729, 2.387717, 2.822258, 3.691339"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.044458, 0.044458, 0.044458, 0.044458, 0.044458",\ + "0.073621, 0.073621, 0.073621, 0.073621, 0.073620",\ + "0.149757, 0.149757, 0.149757, 0.149757, 0.149757",\ + "0.447950, 0.447950, 0.447950, 0.447950, 0.447950",\ + "1.523369, 1.523369, 1.523369, 1.523369, 1.523370",\ + "0.044458, 0.044458, 0.044458, 0.044458, 0.044458",\ + "0.073621, 0.073621, 0.073621, 0.073621, 0.073620",\ + "0.149757, 0.149757, 0.149757, 0.149757, 0.149757",\ + "0.447950, 0.447950, 0.447950, 0.447950, 0.447950",\ + "1.523369, 1.523369, 1.523369, 1.523369, 1.523370",\ + "0.044458, 0.044458, 0.044458, 0.044458, 0.044458",\ + "0.073621, 0.073621, 0.073621, 0.073621, 0.073620",\ + "0.149757, 0.149757, 0.149757, 0.149757, 0.149757",\ + "0.447950, 0.447950, 0.447950, 0.447950, 0.447950",\ + "1.523369, 1.523369, 1.523369, 1.523369, 1.523370",\ + "0.044458, 0.044458, 0.044458, 0.044458, 0.044458",\ + "0.073621, 0.073621, 0.073621, 0.073621, 0.073620",\ + "0.149757, 0.149757, 0.149757, 0.149757, 0.149757",\ + "0.447950, 0.447950, 0.447950, 0.447950, 0.447950",\ + "1.523369, 1.523369, 1.523369, 1.523369, 1.523370",\ + "0.044458, 0.044458, 0.044458, 0.044458, 0.044458",\ + "0.073621, 0.073621, 0.073621, 0.073621, 0.073620",\ + "0.149757, 0.149757, 0.149757, 0.149757, 0.149757",\ + "0.447950, 0.447950, 0.447950, 0.447950, 0.447950",\ + "1.523369, 1.523369, 1.523369, 1.523369, 1.523370"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[9]_redg_2527*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + values ( "0.324251, 0.354177, 0.425915, 0.682368, 1.594576",\ + "0.411642, 0.441568, 0.513306, 0.769759, 1.681967",\ + "0.492561, 0.522487, 0.594225, 0.850678, 1.762885",\ + "0.550301, 0.580227, 0.651966, 0.908419, 1.820624",\ + "0.853007, 0.882932, 0.954672, 1.211125, 2.123326"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + values ( "0.046138, 0.092741, 0.224144, 0.716261, 2.463871",\ + "0.046138, 0.092741, 0.224221, 0.716261, 2.463871",\ + "0.046138, 0.092741, 0.224454, 0.716261, 2.463871",\ + "0.046138, 0.092741, 0.224454, 0.716261, 2.463871",\ + "0.046298, 0.092766, 0.224788, 0.716274, 2.463884"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + values ( "0.296828, 0.321202, 0.372057, 0.538492, 1.125213",\ + "0.384221, 0.408595, 0.459449, 0.625885, 1.212605",\ + "0.465090, 0.489464, 0.540319, 0.706755, 1.293475",\ + "0.522739, 0.547113, 0.597968, 0.764403, 1.351124",\ + "0.825878, 0.850484, 0.901694, 1.068525, 1.654935"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + values ( "0.044458, 0.073621, 0.149762, 0.447950, 1.524119",\ + "0.044458, 0.073621, 0.149762, 0.447950, 1.524119",\ + "0.044458, 0.073621, 0.149762, 0.447950, 1.523993",\ + "0.044458, 0.073621, 0.149762, 0.447950, 1.523757",\ + "0.044456, 0.073554, 0.149762, 0.447945, 1.523369"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[9]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[0]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.507754, 0.687868, 0.875446, 1.177426, 1.760522",\ + "0.536697, 0.716810, 0.904389, 1.206369, 1.789465",\ + "0.607845, 0.787958, 0.975537, 1.277516, 1.860613",\ + "0.863570, 1.043684, 1.231262, 1.533242, 2.116338",\ + "1.774034, 1.954148, 2.141726, 2.443706, 3.026802",\ + "0.592692, 0.772703, 0.960516, 1.262932, 1.846900",\ + "0.621635, 0.801646, 0.989459, 1.291875, 1.875843",\ + "0.692783, 0.872794, 1.060607, 1.363023, 1.946991",\ + "0.948508, 1.128520, 1.316332, 1.618748, 2.202716",\ + "1.858973, 2.038984, 2.226796, 2.529212, 3.113181",\ + "0.668604, 0.848147, 1.035325, 1.337529, 1.921072",\ + "0.697547, 0.877090, 1.064268, 1.366472, 1.950015",\ + "0.768695, 0.948237, 1.135416, 1.437619, 2.021163",\ + "1.024420, 1.203963, 1.391141, 1.693345, 2.276889",\ + "1.934885, 2.114427, 2.301605, 2.603809, 3.187353",\ + "0.722973, 0.902898, 1.090214, 1.392134, 1.975390",\ + "0.751916, 0.931841, 1.119157, 1.421077, 2.004333",\ + "0.823064, 1.002989, 1.190305, 1.492225, 2.075481",\ + "1.078790, 1.258714, 1.446030, 1.747951, 2.331206",\ + "1.989254, 2.169178, 2.356494, 2.658415, 3.241670",\ + "1.004568, 1.188463, 1.374389, 1.675861, 2.258667",\ + "1.033511, 1.217406, 1.403332, 1.704803, 2.287610",\ + "1.104659, 1.288554, 1.474480, 1.775951, 2.358758",\ + "1.360384, 1.544279, 1.730205, 2.031677, 2.614483",\ + "2.270849, 2.454743, 2.640669, 2.942141, 3.524948"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.043180, 0.043180, 0.043180, 0.043180, 0.043180",\ + "0.090365, 0.090365, 0.090365, 0.090365, 0.090365",\ + "0.222668, 0.222668, 0.222668, 0.222668, 0.222668",\ + "0.712250, 0.712250, 0.712250, 0.712250, 0.712250",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.043180, 0.043180, 0.043180, 0.043180, 0.043180",\ + "0.090365, 0.090365, 0.090365, 0.090365, 0.090365",\ + "0.222668, 0.222668, 0.222668, 0.222668, 0.222668",\ + "0.712250, 0.712250, 0.712250, 0.712250, 0.712250",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.043180, 0.043180, 0.043180, 0.043180, 0.043180",\ + "0.090365, 0.090365, 0.090365, 0.090365, 0.090365",\ + "0.222668, 0.222668, 0.222668, 0.222668, 0.222668",\ + "0.712250, 0.712250, 0.712250, 0.712250, 0.712250",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.043180, 0.043180, 0.043180, 0.043180, 0.043180",\ + "0.090365, 0.090365, 0.090365, 0.090365, 0.090365",\ + "0.222668, 0.222668, 0.222668, 0.222668, 0.222668",\ + "0.712250, 0.712250, 0.712250, 0.712250, 0.712250",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.043180, 0.043180, 0.043180, 0.043180, 0.043180",\ + "0.090365, 0.090365, 0.090365, 0.090365, 0.090365",\ + "0.222668, 0.222668, 0.222668, 0.222668, 0.222668",\ + "0.712250, 0.712250, 0.712250, 0.712250, 0.712250",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.389691, 0.657302, 0.918703, 1.358480, 2.237641",\ + "0.411640, 0.679251, 0.940643, 1.380389, 2.259487",\ + "0.459656, 0.727267, 0.988659, 1.428405, 2.307503",\ + "0.624965, 0.892576, 1.153968, 1.593714, 2.472812",\ + "1.214409, 1.482020, 1.743420, 2.183197, 3.062358",\ + "0.478395, 0.745377, 1.007344, 1.446709, 2.325046",\ + "0.500344, 0.767326, 1.029284, 1.468618, 2.346892",\ + "0.548360, 0.815342, 1.077300, 1.516634, 2.394908",\ + "0.713669, 0.980651, 1.242609, 1.681943, 2.560217",\ + "1.303113, 1.570095, 1.832061, 2.271426, 3.149764",\ + "0.571337, 0.838697, 1.099388, 1.538955, 2.418088",\ + "0.593287, 0.860646, 1.121328, 1.560864, 2.439934",\ + "0.641303, 0.908662, 1.169344, 1.608880, 2.487950",\ + "0.806611, 1.073971, 1.334653, 1.774188, 2.653259",\ + "1.396055, 1.663415, 1.924106, 2.363672, 3.242805",\ + "0.637181, 0.907261, 1.166444, 1.605966, 2.485009",\ + "0.659130, 0.929210, 1.188385, 1.627875, 2.506856",\ + "0.707146, 0.977226, 1.236400, 1.675891, 2.554872",\ + "0.872455, 1.142535, 1.401709, 1.841200, 2.720181",\ + "1.461899, 1.731979, 1.991162, 2.430684, 3.309727",\ + "0.983703, 1.288097, 1.537115, 1.975192, 2.851345",\ + "1.005652, 1.310046, 1.559055, 1.997100, 2.873191",\ + "1.053668, 1.358062, 1.607071, 2.045116, 2.921207",\ + "1.218976, 1.523371, 1.772380, 2.210425, 3.086516",\ + "1.808420, 2.112815, 2.361833, 2.799909, 3.676063"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.035869, 0.035869, 0.035869, 0.035869, 0.035869",\ + "0.064692, 0.064692, 0.064692, 0.064692, 0.064692",\ + "0.142526, 0.142526, 0.142526, 0.142526, 0.142526",\ + "0.443427, 0.443427, 0.443427, 0.443428, 0.443428",\ + "1.518709, 1.518709, 1.518709, 1.518709, 1.518710",\ + "0.035869, 0.035869, 0.035869, 0.035869, 0.035869",\ + "0.064692, 0.064692, 0.064692, 0.064692, 0.064692",\ + "0.142526, 0.142526, 0.142526, 0.142526, 0.142526",\ + "0.443427, 0.443427, 0.443427, 0.443428, 0.443428",\ + "1.518709, 1.518709, 1.518709, 1.518709, 1.518710",\ + "0.035869, 0.035869, 0.035869, 0.035869, 0.035869",\ + "0.064692, 0.064692, 0.064692, 0.064692, 0.064692",\ + "0.142526, 0.142526, 0.142526, 0.142526, 0.142526",\ + "0.443427, 0.443427, 0.443427, 0.443428, 0.443428",\ + "1.518709, 1.518709, 1.518709, 1.518709, 1.518710",\ + "0.035869, 0.035869, 0.035869, 0.035869, 0.035869",\ + "0.064692, 0.064692, 0.064692, 0.064692, 0.064692",\ + "0.142526, 0.142526, 0.142526, 0.142526, 0.142526",\ + "0.443427, 0.443427, 0.443427, 0.443428, 0.443428",\ + "1.518709, 1.518709, 1.518709, 1.518709, 1.518710",\ + "0.035869, 0.035869, 0.035869, 0.035869, 0.035869",\ + "0.064692, 0.064692, 0.064692, 0.064692, 0.064692",\ + "0.142526, 0.142526, 0.142526, 0.142526, 0.142526",\ + "0.443427, 0.443427, 0.443427, 0.443428, 0.443428",\ + "1.518709, 1.518709, 1.518709, 1.518709, 1.518710"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[9]_redg_min_2469*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[1]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.415862, 0.679394, 0.955513, 1.423645, 2.358649",\ + "0.444805, 0.708336, 0.984456, 1.452588, 2.387592",\ + "0.515953, 0.779484, 1.055604, 1.523736, 2.458740",\ + "0.771678, 1.035210, 1.311329, 1.779461, 2.714465",\ + "1.682143, 1.945674, 2.221793, 2.689925, 3.624929",\ + "0.504057, 0.766934, 1.043080, 1.510360, 2.444582",\ + "0.532999, 0.795877, 1.072023, 1.539303, 2.473526",\ + "0.604147, 0.867025, 1.143171, 1.610451, 2.544673",\ + "0.859873, 1.122750, 1.398896, 1.866176, 2.800399",\ + "1.770337, 2.033214, 2.309360, 2.776640, 3.710862",\ + "0.592373, 0.855914, 1.131045, 1.598000, 2.531538",\ + "0.621315, 0.884856, 1.159988, 1.626943, 2.560481",\ + "0.692463, 0.956004, 1.231135, 1.698091, 2.631628",\ + "0.948189, 1.211730, 1.486861, 1.953817, 2.887354",\ + "1.858653, 2.122194, 2.397325, 2.864281, 3.797817",\ + "0.654869, 0.921547, 1.195184, 1.662089, 2.595047",\ + "0.683811, 0.950490, 1.224127, 1.691032, 2.623990",\ + "0.754959, 1.021638, 1.295275, 1.762180, 2.695137",\ + "1.010685, 1.277363, 1.551000, 2.017905, 2.950863",\ + "1.921149, 2.187827, 2.461465, 2.928370, 3.861326",\ + "0.983994, 1.285862, 1.547048, 2.011533, 2.940503",\ + "1.012937, 1.314805, 1.575991, 2.040476, 2.969446",\ + "1.084085, 1.385953, 1.647139, 2.111624, 3.040593",\ + "1.339811, 1.641678, 1.902864, 2.367349, 3.296319",\ + "2.250275, 2.552142, 2.813329, 3.277813, 4.206782"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.043180, 0.043180, 0.043181, 0.043181, 0.043182",\ + "0.090365, 0.090365, 0.090365, 0.090365, 0.090366",\ + "0.222668, 0.222668, 0.222668, 0.222668, 0.222668",\ + "0.712250, 0.712250, 0.712249, 0.712249, 0.712248",\ + "2.448223, 2.448223, 2.448224, 2.448226, 2.448230",\ + "0.043180, 0.043180, 0.043181, 0.043181, 0.043182",\ + "0.090365, 0.090365, 0.090365, 0.090365, 0.090366",\ + "0.222668, 0.222668, 0.222668, 0.222668, 0.222668",\ + "0.712250, 0.712250, 0.712249, 0.712249, 0.712248",\ + "2.448223, 2.448223, 2.448224, 2.448226, 2.448230",\ + "0.043180, 0.043180, 0.043181, 0.043181, 0.043182",\ + "0.090365, 0.090365, 0.090365, 0.090365, 0.090366",\ + "0.222668, 0.222668, 0.222668, 0.222668, 0.222668",\ + "0.712250, 0.712250, 0.712249, 0.712249, 0.712248",\ + "2.448223, 2.448223, 2.448224, 2.448226, 2.448230",\ + "0.043180, 0.043180, 0.043181, 0.043181, 0.043182",\ + "0.090365, 0.090365, 0.090365, 0.090365, 0.090366",\ + "0.222668, 0.222668, 0.222668, 0.222668, 0.222668",\ + "0.712250, 0.712250, 0.712249, 0.712249, 0.712248",\ + "2.448223, 2.448223, 2.448224, 2.448226, 2.448230",\ + "0.043180, 0.043181, 0.043181, 0.043181, 0.043182",\ + "0.090365, 0.090365, 0.090365, 0.090365, 0.090366",\ + "0.222668, 0.222668, 0.222668, 0.222668, 0.222668",\ + "0.712250, 0.712250, 0.712249, 0.712249, 0.712248",\ + "2.448223, 2.448223, 2.448224, 2.448226, 2.448230"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.372646, 0.554704, 0.750937, 1.060114, 1.654586",\ + "0.394593, 0.576651, 0.772784, 1.081916, 1.676369",\ + "0.442609, 0.624667, 0.820800, 1.129932, 1.724385",\ + "0.607918, 0.789976, 0.986109, 1.295241, 1.889696",\ + "1.197364, 1.379422, 1.575655, 1.884836, 2.479319",\ + "0.460061, 0.642022, 0.838218, 1.147419, 1.741940",\ + "0.482008, 0.663970, 0.860065, 1.169221, 1.763722",\ + "0.530024, 0.711986, 0.908081, 1.217237, 1.811739",\ + "0.695333, 0.877294, 1.073389, 1.382546, 1.977050",\ + "1.284779, 1.466740, 1.662936, 1.972141, 2.566672",\ + "0.540937, 0.722359, 0.918245, 1.227448, 1.821971",\ + "0.562884, 0.744306, 0.940092, 1.249249, 1.843754",\ + "0.610900, 0.792322, 0.988108, 1.297265, 1.891770",\ + "0.776209, 0.957631, 1.153416, 1.462574, 2.057081",\ + "1.365655, 1.547077, 1.742963, 2.052169, 2.646704",\ + "0.598584, 0.780196, 0.975981, 1.284918, 1.879067",\ + "0.620531, 0.802143, 0.997827, 1.306720, 1.900850",\ + "0.668547, 0.850159, 1.045843, 1.354736, 1.948866",\ + "0.833856, 1.015468, 1.211152, 1.520045, 2.114177",\ + "1.423301, 1.604914, 1.800699, 2.109640, 2.703799",\ + "0.900791, 1.085573, 1.279644, 1.588125, 2.181385",\ + "0.922739, 1.107520, 1.301491, 1.609926, 2.203168",\ + "0.970755, 1.155536, 1.349506, 1.657943, 2.251184",\ + "1.136063, 1.320845, 1.514815, 1.823252, 2.416495",\ + "1.725509, 1.910291, 2.104362, 2.412847, 3.006117"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.035869, 0.035869, 0.035869, 0.035869, 0.035870",\ + "0.064692, 0.064692, 0.064692, 0.064693, 0.064694",\ + "0.142526, 0.142526, 0.142526, 0.142526, 0.142527",\ + "0.443427, 0.443427, 0.443428, 0.443434, 0.443446",\ + "1.518709, 1.518709, 1.518710, 1.518710, 1.518712",\ + "0.035869, 0.035869, 0.035869, 0.035869, 0.035870",\ + "0.064692, 0.064692, 0.064692, 0.064693, 0.064694",\ + "0.142526, 0.142526, 0.142526, 0.142526, 0.142527",\ + "0.443427, 0.443427, 0.443428, 0.443434, 0.443446",\ + "1.518709, 1.518709, 1.518710, 1.518710, 1.518712",\ + "0.035869, 0.035869, 0.035869, 0.035869, 0.035870",\ + "0.064692, 0.064692, 0.064692, 0.064693, 0.064694",\ + "0.142526, 0.142526, 0.142526, 0.142526, 0.142527",\ + "0.443427, 0.443427, 0.443428, 0.443434, 0.443446",\ + "1.518709, 1.518709, 1.518710, 1.518710, 1.518712",\ + "0.035869, 0.035869, 0.035869, 0.035870, 0.035870",\ + "0.064692, 0.064692, 0.064692, 0.064693, 0.064694",\ + "0.142526, 0.142526, 0.142526, 0.142526, 0.142527",\ + "0.443427, 0.443427, 0.443428, 0.443434, 0.443446",\ + "1.518709, 1.518709, 1.518710, 1.518710, 1.518712",\ + "0.035869, 0.035869, 0.035869, 0.035870, 0.035870",\ + "0.064692, 0.064692, 0.064692, 0.064693, 0.064694",\ + "0.142526, 0.142526, 0.142526, 0.142526, 0.142527",\ + "0.443427, 0.443427, 0.443428, 0.443434, 0.443446",\ + "1.518709, 1.518709, 1.518710, 1.518710, 1.518712"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[9]_redg_min_2391*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[2]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.411884, 0.671443, 0.943078, 1.399240, 2.310408",\ + "0.440827, 0.700386, 0.972021, 1.428183, 2.339350",\ + "0.511975, 0.771534, 1.043169, 1.499331, 2.410498",\ + "0.767700, 1.027260, 1.298895, 1.755056, 2.666224",\ + "1.678164, 1.937724, 2.209359, 2.665520, 3.576688",\ + "0.499989, 0.758976, 1.030607, 1.485955, 2.396341",\ + "0.528932, 0.787919, 1.059550, 1.514898, 2.425284",\ + "0.600080, 0.859067, 1.130698, 1.586046, 2.496432",\ + "0.855805, 1.114792, 1.386424, 1.841771, 2.752157",\ + "1.766269, 2.025257, 2.296888, 2.752235, 3.662621",\ + "0.588019, 0.847941, 1.118572, 1.573594, 2.483296",\ + "0.616962, 0.876883, 1.147514, 1.602537, 2.512239",\ + "0.688110, 0.948031, 1.218662, 1.673685, 2.583387",\ + "0.943835, 1.203757, 1.474388, 1.929410, 2.839113",\ + "1.854300, 2.114221, 2.384852, 2.839874, 3.749576",\ + "0.650240, 0.913552, 1.182709, 1.637669, 2.546805",\ + "0.679183, 0.942495, 1.211652, 1.666611, 2.575748",\ + "0.750331, 1.013643, 1.282800, 1.737759, 2.646896",\ + "1.006057, 1.269368, 1.538526, 1.993485, 2.902622",\ + "1.916521, 2.179832, 2.448990, 2.903949, 3.813085",\ + "0.977628, 1.277600, 1.534452, 1.987055, 2.892262",\ + "1.006571, 1.306543, 1.563395, 2.015998, 2.921204",\ + "1.077719, 1.377691, 1.634543, 2.087146, 2.992352",\ + "1.333444, 1.633417, 1.890268, 2.342871, 3.248078",\ + "2.243908, 2.543881, 2.800732, 3.253335, 4.158542"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.043180, 0.043181, 0.043181, 0.043181, 0.043183",\ + "0.090365, 0.090365, 0.090365, 0.090365, 0.090366",\ + "0.222668, 0.222668, 0.222668, 0.222668, 0.222668",\ + "0.712250, 0.712250, 0.712249, 0.712249, 0.712247",\ + "2.448223, 2.448223, 2.448225, 2.448228, 2.448234",\ + "0.043180, 0.043181, 0.043181, 0.043181, 0.043183",\ + "0.090365, 0.090365, 0.090365, 0.090365, 0.090366",\ + "0.222668, 0.222668, 0.222668, 0.222668, 0.222668",\ + "0.712250, 0.712250, 0.712249, 0.712249, 0.712247",\ + "2.448223, 2.448223, 2.448225, 2.448228, 2.448234",\ + "0.043180, 0.043181, 0.043181, 0.043181, 0.043183",\ + "0.090365, 0.090365, 0.090365, 0.090365, 0.090366",\ + "0.222668, 0.222668, 0.222668, 0.222668, 0.222668",\ + "0.712250, 0.712250, 0.712249, 0.712249, 0.712247",\ + "2.448223, 2.448223, 2.448225, 2.448228, 2.448234",\ + "0.043180, 0.043181, 0.043181, 0.043181, 0.043183",\ + "0.090365, 0.090365, 0.090365, 0.090365, 0.090366",\ + "0.222668, 0.222668, 0.222668, 0.222668, 0.222668",\ + "0.712250, 0.712250, 0.712249, 0.712249, 0.712247",\ + "2.448223, 2.448223, 2.448225, 2.448228, 2.448234",\ + "0.043180, 0.043181, 0.043181, 0.043181, 0.043183",\ + "0.090365, 0.090365, 0.090365, 0.090365, 0.090366",\ + "0.222668, 0.222668, 0.222668, 0.222668, 0.222668",\ + "0.712250, 0.712250, 0.712249, 0.712249, 0.712247",\ + "2.448223, 2.448223, 2.448225, 2.448228, 2.448234"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.370982, 0.553150, 0.749248, 1.058587, 1.653547",\ + "0.392932, 0.575099, 0.771096, 1.080389, 1.675331",\ + "0.440948, 0.623115, 0.819112, 1.128405, 1.723348",\ + "0.606257, 0.788424, 0.984421, 1.293715, 1.888659",\ + "1.195700, 1.377868, 1.573966, 1.883303, 2.478263",\ + "0.458403, 0.640469, 0.836529, 1.145892, 1.740901",\ + "0.480352, 0.662418, 0.858377, 1.167694, 1.762685",\ + "0.528368, 0.710434, 0.906393, 1.215710, 1.810701",\ + "0.693677, 0.875743, 1.071702, 1.381020, 1.976012",\ + "1.283120, 1.465186, 1.661247, 1.970608, 2.565616",\ + "0.539270, 0.720805, 0.916556, 1.225920, 1.820932",\ + "0.561219, 0.742755, 0.938404, 1.247723, 1.842716",\ + "0.609235, 0.790771, 0.986420, 1.295739, 1.890733",\ + "0.774544, 0.956080, 1.151728, 1.461048, 2.056044",\ + "1.363988, 1.545523, 1.741274, 2.050637, 2.645648",\ + "0.596909, 0.778642, 0.974291, 1.283391, 1.878029",\ + "0.618858, 0.800592, 0.996139, 1.305194, 1.899813",\ + "0.666874, 0.848608, 1.044155, 1.353210, 1.947829",\ + "0.832183, 1.013916, 1.209464, 1.518519, 2.113140",\ + "1.421627, 1.603360, 1.799009, 2.108108, 2.702744",\ + "0.899004, 1.084021, 1.277955, 1.586599, 2.180348",\ + "0.920954, 1.105970, 1.299802, 1.608401, 2.202132",\ + "0.968969, 1.153986, 1.347818, 1.656417, 2.250149",\ + "1.134278, 1.319295, 1.513127, 1.821727, 2.415460",\ + "1.723722, 1.908738, 2.102673, 2.411315, 3.005064"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.035869, 0.035869, 0.035869, 0.035870, 0.035870",\ + "0.064692, 0.064692, 0.064692, 0.064693, 0.064694",\ + "0.142526, 0.142526, 0.142526, 0.142526, 0.142527",\ + "0.443427, 0.443427, 0.443428, 0.443434, 0.443448",\ + "1.518709, 1.518709, 1.518710, 1.518710, 1.518712",\ + "0.035869, 0.035869, 0.035869, 0.035870, 0.035870",\ + "0.064692, 0.064692, 0.064692, 0.064693, 0.064694",\ + "0.142526, 0.142526, 0.142526, 0.142526, 0.142527",\ + "0.443427, 0.443427, 0.443428, 0.443434, 0.443448",\ + "1.518709, 1.518709, 1.518710, 1.518710, 1.518712",\ + "0.035869, 0.035869, 0.035869, 0.035870, 0.035870",\ + "0.064692, 0.064692, 0.064692, 0.064693, 0.064694",\ + "0.142526, 0.142526, 0.142526, 0.142526, 0.142527",\ + "0.443427, 0.443427, 0.443428, 0.443434, 0.443448",\ + "1.518709, 1.518709, 1.518710, 1.518710, 1.518712",\ + "0.035869, 0.035869, 0.035869, 0.035870, 0.035870",\ + "0.064692, 0.064692, 0.064692, 0.064693, 0.064694",\ + "0.142526, 0.142526, 0.142526, 0.142526, 0.142527",\ + "0.443427, 0.443427, 0.443428, 0.443434, 0.443448",\ + "1.518709, 1.518709, 1.518710, 1.518710, 1.518712",\ + "0.035869, 0.035869, 0.035869, 0.035870, 0.035870",\ + "0.064692, 0.064692, 0.064692, 0.064693, 0.064694",\ + "0.142526, 0.142526, 0.142526, 0.142526, 0.142527",\ + "0.443427, 0.443427, 0.443428, 0.443434, 0.443448",\ + "1.518709, 1.518709, 1.518710, 1.518710, 1.518712"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[9]_redg_min_2332*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[3]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.504167, 0.682507, 0.862854, 1.149040, 1.699793",\ + "0.533110, 0.711450, 0.891797, 1.177983, 1.728736",\ + "0.604258, 0.782598, 0.962945, 1.249131, 1.799884",\ + "0.859984, 1.038323, 1.218670, 1.504856, 2.055609",\ + "1.770448, 1.948787, 2.129134, 2.415321, 2.966074",\ + "0.589106, 0.767343, 0.947924, 1.234547, 1.786172",\ + "0.618049, 0.796286, 0.976867, 1.263489, 1.815114",\ + "0.689197, 0.867433, 1.048015, 1.334637, 1.886262",\ + "0.944922, 1.123159, 1.303740, 1.590363, 2.141988",\ + "1.855386, 2.033623, 2.214204, 2.500827, 3.052452",\ + "0.665012, 0.842786, 1.022733, 1.309143, 1.860344",\ + "0.693955, 0.871729, 1.051676, 1.338086, 1.889287",\ + "0.765103, 0.942877, 1.122823, 1.409234, 1.960435",\ + "1.020828, 1.198602, 1.378549, 1.664959, 2.216160",\ + "1.931292, 2.109066, 2.289013, 2.575424, 3.126625",\ + "0.719364, 0.897532, 1.077598, 1.363737, 1.914661",\ + "0.748307, 0.926474, 1.106541, 1.392680, 1.943604",\ + "0.819455, 0.997622, 1.177689, 1.463828, 2.014752",\ + "1.075180, 1.253348, 1.433414, 1.719553, 2.270478",\ + "1.985644, 2.163812, 2.343878, 2.630017, 3.180942",\ + "1.000786, 1.183049, 1.361751, 1.647463, 2.197939",\ + "1.029729, 1.211992, 1.390694, 1.676406, 2.226882",\ + "1.100877, 1.283140, 1.461842, 1.747554, 2.298030",\ + "1.356602, 1.538865, 1.717567, 2.003279, 2.553755",\ + "2.267066, 2.449329, 2.628031, 2.913743, 3.464219"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.043180, 0.043180, 0.043180, 0.043180, 0.043181",\ + "0.090365, 0.090365, 0.090365, 0.090365, 0.090365",\ + "0.222668, 0.222668, 0.222668, 0.222668, 0.222668",\ + "0.712250, 0.712250, 0.712250, 0.712250, 0.712250",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.043180, 0.043180, 0.043180, 0.043180, 0.043181",\ + "0.090365, 0.090365, 0.090365, 0.090365, 0.090365",\ + "0.222668, 0.222668, 0.222668, 0.222668, 0.222668",\ + "0.712250, 0.712250, 0.712250, 0.712250, 0.712250",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.043180, 0.043180, 0.043180, 0.043180, 0.043181",\ + "0.090365, 0.090365, 0.090365, 0.090365, 0.090365",\ + "0.222668, 0.222668, 0.222668, 0.222668, 0.222668",\ + "0.712250, 0.712250, 0.712250, 0.712250, 0.712250",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.043180, 0.043180, 0.043180, 0.043180, 0.043181",\ + "0.090365, 0.090365, 0.090365, 0.090365, 0.090365",\ + "0.222668, 0.222668, 0.222668, 0.222668, 0.222668",\ + "0.712250, 0.712250, 0.712250, 0.712250, 0.712250",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.043180, 0.043180, 0.043180, 0.043180, 0.043181",\ + "0.090365, 0.090365, 0.090365, 0.090365, 0.090365",\ + "0.222668, 0.222668, 0.222668, 0.222668, 0.222668",\ + "0.712250, 0.712250, 0.712250, 0.712250, 0.712250",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.388255, 0.653254, 0.912284, 1.348548, 2.220695",\ + "0.410204, 0.675204, 0.934223, 1.370453, 2.242530",\ + "0.458220, 0.723220, 0.982239, 1.418469, 2.290546",\ + "0.623529, 0.888528, 1.147548, 1.583778, 2.455855",\ + "1.212973, 1.477972, 1.737002, 2.173266, 3.045412",\ + "0.476921, 0.741329, 1.000925, 1.436777, 2.308100",\ + "0.498870, 0.763278, 1.022864, 1.458682, 2.329936",\ + "0.546886, 0.811294, 1.070880, 1.506698, 2.377952",\ + "0.712195, 0.976603, 1.236189, 1.672007, 2.543260",\ + "1.301638, 1.566047, 1.825642, 2.261495, 3.132817",\ + "0.569727, 0.834623, 1.092960, 1.529020, 2.401142",\ + "0.591677, 0.856572, 1.114899, 1.550925, 2.422977",\ + "0.639693, 0.904588, 1.162915, 1.598941, 2.470994",\ + "0.805001, 1.069897, 1.328224, 1.764250, 2.636302",\ + "1.394445, 1.659341, 1.917678, 2.353738, 3.225859",\ + "0.635450, 0.903157, 1.160015, 1.596027, 2.468051",\ + "0.657399, 0.925106, 1.181954, 1.617932, 2.489887",\ + "0.705415, 0.973122, 1.229970, 1.665948, 2.537903",\ + "0.870724, 1.138431, 1.395279, 1.831257, 2.703212",\ + "1.460168, 1.727875, 1.984733, 2.420745, 3.292769",\ + "0.981239, 1.283655, 1.530653, 1.965228, 2.834378",\ + "1.003189, 1.305605, 1.552592, 1.987133, 2.856214",\ + "1.051205, 1.353621, 1.600608, 2.035149, 2.904230",\ + "1.216513, 1.518929, 1.765917, 2.200458, 3.069539",\ + "1.805957, 2.108373, 2.355371, 2.789946, 3.659096"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.035869, 0.035869, 0.035869, 0.035869, 0.035869",\ + "0.064692, 0.064692, 0.064692, 0.064692, 0.064692",\ + "0.142526, 0.142526, 0.142526, 0.142526, 0.142526",\ + "0.443427, 0.443427, 0.443427, 0.443428, 0.443428",\ + "1.518709, 1.518709, 1.518709, 1.518709, 1.518710",\ + "0.035869, 0.035869, 0.035869, 0.035869, 0.035869",\ + "0.064692, 0.064692, 0.064692, 0.064692, 0.064692",\ + "0.142526, 0.142526, 0.142526, 0.142526, 0.142526",\ + "0.443427, 0.443427, 0.443427, 0.443428, 0.443428",\ + "1.518709, 1.518709, 1.518709, 1.518709, 1.518710",\ + "0.035869, 0.035869, 0.035869, 0.035869, 0.035869",\ + "0.064692, 0.064692, 0.064692, 0.064692, 0.064692",\ + "0.142526, 0.142526, 0.142526, 0.142526, 0.142526",\ + "0.443427, 0.443427, 0.443427, 0.443428, 0.443428",\ + "1.518709, 1.518709, 1.518709, 1.518709, 1.518710",\ + "0.035869, 0.035869, 0.035869, 0.035869, 0.035869",\ + "0.064692, 0.064692, 0.064692, 0.064692, 0.064692",\ + "0.142526, 0.142526, 0.142526, 0.142526, 0.142526",\ + "0.443427, 0.443427, 0.443427, 0.443428, 0.443429",\ + "1.518709, 1.518709, 1.518709, 1.518709, 1.518710",\ + "0.035869, 0.035869, 0.035869, 0.035869, 0.035869",\ + "0.064692, 0.064692, 0.064692, 0.064692, 0.064692",\ + "0.142526, 0.142526, 0.142526, 0.142526, 0.142526",\ + "0.443427, 0.443427, 0.443427, 0.443428, 0.443429",\ + "1.518709, 1.518709, 1.518709, 1.518709, 1.518710"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[9]_redg_min_2273*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + values ( "0.141721, 0.170980, 0.242593, 0.498866, 1.411098",\ + "0.229906, 0.259165, 0.330790, 0.587108, 1.499024",\ + "0.318231, 0.347489, 0.419118, 0.675627, 1.587106",\ + "0.380823, 0.410078, 0.481658, 0.738460, 1.650402",\ + "0.710704, 0.739954, 0.811356, 1.068597, 1.982165"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + values ( "0.043180, 0.090365, 0.222668, 0.712250, 2.448223",\ + "0.043180, 0.090365, 0.222668, 0.712250, 2.448223",\ + "0.043180, 0.090365, 0.222668, 0.712250, 2.448223",\ + "0.043180, 0.090365, 0.222668, 0.712250, 2.448223",\ + "0.043180, 0.090365, 0.222668, 0.712250, 2.448223"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + values ( "0.179981, 0.202635, 0.251659, 0.417360, 1.003853",\ + "0.267384, 0.290039, 0.339062, 0.504764, 1.091257",\ + "0.348282, 0.370934, 0.419962, 0.585668, 1.172170",\ + "0.405945, 0.428592, 0.477629, 0.643342, 1.229861",\ + "0.708302, 0.730939, 0.780004, 0.945787, 1.532477"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + values ( "0.035869, 0.064690, 0.142524, 0.442595, 1.516425",\ + "0.035869, 0.064690, 0.142524, 0.442595, 1.516425",\ + "0.035869, 0.064690, 0.142524, 0.442641, 1.516425",\ + "0.035869, 0.064690, 0.142524, 0.442726, 1.516425",\ + "0.035869, 0.064691, 0.142524, 0.443427, 1.516425"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[9]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_falling ; + clock_gating_flag : true ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.046138, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.146678, 0.146678, 0.146678, 0.146678, 0.146678",\ + "0.165298, 0.165298, 0.165298, 0.165298, 0.165298",\ + "0.241802, 0.241802, 0.241802, 0.241802, 0.241802",\ + "0.367706, 0.367706, 0.367706, 0.367706, 0.367706",\ + "0.946794, 0.946794, 0.946794, 0.946794, 0.946794"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.044715, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.412191, 0.412191, 0.412191, 0.412191, 0.412191",\ + "0.424880, 0.424880, 0.424880, 0.424880, 0.424880",\ + "0.479563, 0.479563, 0.479563, 0.479563, 0.479563",\ + "0.581996, 0.581996, 0.581996, 0.581996, 0.581996",\ + "1.256928, 1.256928, 1.256928, 1.256928, 1.256928"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[9]_cgsf*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + clock_gating_flag : true ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.042344, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.138937, -0.138937, -0.138937, -0.138937, -0.138937",\ + "-0.155751, -0.155751, -0.155751, -0.155751, -0.155751",\ + "-0.234216, -0.234216, -0.234216, -0.234216, -0.234216",\ + "-0.360721, -0.360721, -0.360721, -0.360721, -0.360721",\ + "-0.939265, -0.939265, -0.939265, -0.939265, -0.939265"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.035869, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.408326, -0.408326, -0.408326, -0.408326, -0.408326",\ + "-0.417967, -0.417967, -0.417967, -0.417967, -0.417967",\ + "-0.475689, -0.475689, -0.475689, -0.475689, -0.475689",\ + "-0.578062, -0.578062, -0.578062, -0.578062, -0.578062",\ + "-1.250684, -1.250684, -1.250684, -1.250684, -1.250684"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[9]_cghr*/ + + timing () { + related_pin : "padmux2ast_i[1]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + values ( "0.088963, 0.118659, 0.189985, 0.445909, 1.359203",\ + "0.176595, 0.206339, 0.277538, 0.533662, 1.444562",\ + "0.274330, 0.305634, 0.377516, 0.633363, 1.547694",\ + "0.452110, 0.487212, 0.561030, 0.816620, 1.732299",\ + "0.755237, 0.801656, 0.884430, 1.139988, 2.048527"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + values ( "0.044962, 0.091670, 0.223831, 0.718456, 2.481454",\ + "0.045846, 0.091918, 0.223831, 0.720074, 2.481454",\ + "0.052795, 0.096494, 0.223831, 0.720074, 2.481454",\ + "0.070125, 0.108925, 0.227741, 0.720074, 2.481454",\ + "0.113963, 0.145559, 0.246252, 0.720074, 2.481454"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + values ( "0.127301, 0.151950, 0.203155, 0.369998, 0.957371",\ + "0.206362, 0.230972, 0.282119, 0.448933, 1.035102",\ + "0.309711, 0.336083, 0.388248, 0.554957, 1.142995",\ + "0.487304, 0.519754, 0.577312, 0.745501, 1.332624",\ + "0.775221, 0.823575, 0.896452, 1.070131, 1.655247"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + values ( "0.044715, 0.073858, 0.149782, 0.448303, 1.525169",\ + "0.044715, 0.073858, 0.149782, 0.448303, 1.525169",\ + "0.053324, 0.079575, 0.152471, 0.448303, 1.525169",\ + "0.080832, 0.102703, 0.166343, 0.450943, 1.525169",\ + "0.138432, 0.160382, 0.212572, 0.461516, 1.526821"); + } + + } /* end of arc padmux2ast_i[1]_obs_ctrl_o[9]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[1]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + values ( "0.084586, 0.113378, 0.184446, 0.440600, 1.352120",\ + "0.171768, 0.200846, 0.271799, 0.528276, 1.439207",\ + "0.268285, 0.298195, 0.369868, 0.625566, 1.536303",\ + "0.442396, 0.476138, 0.548327, 0.804981, 1.718362",\ + "0.738546, 0.782374, 0.862671, 1.116124, 2.025527"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + values ( "0.042344, 0.090303, 0.222464, 0.709820, 2.440521",\ + "0.043472, 0.090646, 0.222464, 0.709820, 2.440521",\ + "0.049500, 0.094474, 0.223126, 0.712718, 2.449750",\ + "0.065555, 0.105654, 0.227159, 0.712718, 2.460771",\ + "0.105524, 0.141324, 0.243057, 0.716552, 2.462313"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + values ( "0.093008, 0.115079, 0.163442, 0.328951, 0.916956",\ + "0.178087, 0.200175, 0.248558, 0.413891, 1.001128",\ + "0.277566, 0.302239, 0.352189, 0.517358, 1.105026",\ + "0.446802, 0.478509, 0.534068, 0.699312, 1.285539",\ + "0.721986, 0.770109, 0.842702, 1.014834, 1.597599"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001432, 0.004671, 0.013253, 0.044568, 0.156168"); + values ( "0.036627, 0.065671, 0.143118, 0.443055, 1.519637",\ + "0.037498, 0.065879, 0.143311, 0.444331, 1.520249",\ + "0.048608, 0.074072, 0.147057, 0.444933, 1.520249",\ + "0.075730, 0.097335, 0.160558, 0.448031, 1.520263",\ + "0.132420, 0.154310, 0.206677, 0.457722, 1.522974"); + } + + } /* end of arc padmux2ast_i[1]_obs_ctrl_o[9]_una_min*/ + +} /* end of pin obs_ctrl_o[9] */ + +pin("obs_ctrl_o[8]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.156168 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001401 ; + + /* Other user defined attributes. */ + original_pin : obs_ctrl_o[8]; + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[0]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.560256, 0.740460, 0.927949, 1.229942, 1.813454",\ + "0.590229, 0.770432, 0.957922, 1.259915, 1.843426",\ + "0.661974, 0.842177, 1.029667, 1.331659, 1.915171",\ + "0.918426, 1.098629, 1.286119, 1.588112, 2.171624",\ + "1.830892, 2.011095, 2.198585, 2.500578, 3.084090",\ + "0.645195, 0.825743, 1.013958, 1.315954, 1.899832",\ + "0.675168, 0.855715, 1.043931, 1.345927, 1.929805",\ + "0.746912, 0.927460, 1.115675, 1.417671, 2.001549",\ + "1.003365, 1.183912, 1.372128, 1.674124, 2.258002",\ + "1.915831, 2.096378, 2.284594, 2.586590, 3.170468",\ + "0.721107, 0.901186, 1.088767, 1.390551, 1.974005",\ + "0.751079, 0.931159, 1.118740, 1.420524, 2.003977",\ + "0.822824, 1.002903, 1.190484, 1.492268, 2.075722",\ + "1.079277, 1.259356, 1.446937, 1.748721, 2.332174",\ + "1.991743, 2.171822, 2.359403, 2.661187, 3.244640",\ + "0.775476, 0.955698, 1.143418, 1.445091, 2.028322",\ + "0.805449, 0.985670, 1.173391, 1.475063, 2.058295",\ + "0.877193, 1.057415, 1.245135, 1.546808, 2.130039",\ + "1.133646, 1.313868, 1.501588, 1.803261, 2.386492",\ + "2.046112, 2.226333, 2.414054, 2.715726, 3.298958",\ + "1.057071, 1.240966, 1.427369, 1.728817, 2.311599",\ + "1.087044, 1.270938, 1.457341, 1.758790, 2.341572",\ + "1.158788, 1.342683, 1.529086, 1.830534, 2.413317",\ + "1.415241, 1.599136, 1.785538, 2.086987, 2.669769",\ + "2.327707, 2.511601, 2.698004, 2.999453, 3.582235"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.045710, 0.045710, 0.045710, 0.045710, 0.045710",\ + "0.092269, 0.092269, 0.092269, 0.092269, 0.092269",\ + "0.223657, 0.223657, 0.223657, 0.223657, 0.223657",\ + "0.715794, 0.715794, 0.715794, 0.715794, 0.715794",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.045710, 0.045710, 0.045710, 0.045710, 0.045710",\ + "0.092269, 0.092269, 0.092269, 0.092269, 0.092269",\ + "0.223657, 0.223657, 0.223657, 0.223657, 0.223657",\ + "0.715794, 0.715794, 0.715794, 0.715794, 0.715794",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.045710, 0.045710, 0.045710, 0.045710, 0.045710",\ + "0.092269, 0.092269, 0.092269, 0.092269, 0.092269",\ + "0.223657, 0.223657, 0.223657, 0.223657, 0.223657",\ + "0.715794, 0.715794, 0.715794, 0.715794, 0.715794",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.045710, 0.045710, 0.045710, 0.045710, 0.045710",\ + "0.092269, 0.092269, 0.092269, 0.092269, 0.092269",\ + "0.223657, 0.223657, 0.223657, 0.223657, 0.223657",\ + "0.715794, 0.715794, 0.715794, 0.715794, 0.715794",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.045710, 0.045710, 0.045710, 0.045710, 0.045710",\ + "0.092269, 0.092269, 0.092269, 0.092269, 0.092269",\ + "0.223657, 0.223657, 0.223657, 0.223657, 0.223657",\ + "0.715794, 0.715794, 0.715794, 0.715794, 0.715794",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.418156, 0.685942, 0.947522, 1.387219, 2.266614",\ + "0.442597, 0.710383, 0.971963, 1.411660, 2.291055",\ + "0.493471, 0.761257, 1.022837, 1.462534, 2.341929",\ + "0.659908, 0.927694, 1.189274, 1.628971, 2.508366",\ + "1.246791, 1.514577, 1.776157, 2.215854, 3.095249",\ + "0.506860, 0.774017, 1.036163, 1.475448, 2.354019",\ + "0.531302, 0.798458, 1.060604, 1.499889, 2.378460",\ + "0.582175, 0.849332, 1.111478, 1.550763, 2.429334",\ + "0.748612, 1.015769, 1.277915, 1.717200, 2.595771",\ + "1.335496, 1.602652, 1.864798, 2.304084, 3.182654",\ + "0.599803, 0.867162, 1.127888, 1.567612, 2.447061",\ + "0.624244, 0.891603, 1.152330, 1.592054, 2.471502",\ + "0.675117, 0.942477, 1.203203, 1.642927, 2.522376",\ + "0.841555, 1.108914, 1.369640, 1.809364, 2.688813",\ + "1.428438, 1.695797, 1.956524, 2.396248, 3.275696",\ + "0.665646, 0.935726, 1.194908, 1.634463, 2.513572",\ + "0.690087, 0.960168, 1.219349, 1.658904, 2.538013",\ + "0.740961, 1.011041, 1.270223, 1.709777, 2.588887",\ + "0.907398, 1.177478, 1.436660, 1.876215, 2.755324",\ + "1.494281, 1.764362, 2.023544, 2.463098, 3.342207",\ + "1.012168, 1.316562, 1.565571, 2.003616, 2.879708",\ + "1.036609, 1.341003, 1.590012, 2.028058, 2.904149",\ + "1.087482, 1.391877, 1.640886, 2.078931, 2.955022",\ + "1.253920, 1.558314, 1.807323, 2.245368, 3.121460",\ + "1.840803, 2.145197, 2.394207, 2.832252, 3.708343"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.044220, 0.044220, 0.044220, 0.044220, 0.044220",\ + "0.073393, 0.073393, 0.073393, 0.073393, 0.073393",\ + "0.149510, 0.149510, 0.149510, 0.149510, 0.149510",\ + "0.447701, 0.447701, 0.447701, 0.447701, 0.447701",\ + "1.523418, 1.523418, 1.523418, 1.523418, 1.523419",\ + "0.044220, 0.044220, 0.044220, 0.044220, 0.044220",\ + "0.073393, 0.073393, 0.073393, 0.073393, 0.073393",\ + "0.149510, 0.149510, 0.149510, 0.149510, 0.149510",\ + "0.447701, 0.447701, 0.447701, 0.447701, 0.447701",\ + "1.523418, 1.523418, 1.523418, 1.523418, 1.523419",\ + "0.044220, 0.044220, 0.044220, 0.044220, 0.044220",\ + "0.073393, 0.073393, 0.073393, 0.073393, 0.073393",\ + "0.149510, 0.149510, 0.149510, 0.149510, 0.149510",\ + "0.447701, 0.447701, 0.447701, 0.447701, 0.447701",\ + "1.523418, 1.523418, 1.523418, 1.523418, 1.523419",\ + "0.044220, 0.044220, 0.044220, 0.044220, 0.044220",\ + "0.073393, 0.073393, 0.073393, 0.073393, 0.073393",\ + "0.149510, 0.149510, 0.149510, 0.149510, 0.149510",\ + "0.447701, 0.447701, 0.447701, 0.447701, 0.447701",\ + "1.523418, 1.523418, 1.523418, 1.523418, 1.523419",\ + "0.044220, 0.044220, 0.044220, 0.044220, 0.044220",\ + "0.073393, 0.073393, 0.073393, 0.073393, 0.073393",\ + "0.149510, 0.149510, 0.149510, 0.149510, 0.149510",\ + "0.447701, 0.447701, 0.447701, 0.447701, 0.447701",\ + "1.523418, 1.523418, 1.523418, 1.523418, 1.523419"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[8]_redg_2698*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[1]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.468362, 0.731935, 1.008208, 1.476938, 2.414397",\ + "0.498334, 0.761908, 1.038180, 1.506910, 2.444369",\ + "0.570079, 0.833652, 1.109925, 1.578655, 2.516114",\ + "0.826532, 1.090105, 1.366378, 1.835107, 2.772566",\ + "1.738997, 2.002571, 2.278844, 2.747575, 3.685036",\ + "0.556556, 0.819476, 1.095776, 1.563653, 2.500330",\ + "0.586529, 0.849449, 1.125748, 1.593625, 2.530303",\ + "0.658273, 0.921193, 1.197493, 1.665370, 2.602047",\ + "0.914726, 1.177646, 1.453945, 1.921822, 2.858500",\ + "1.827192, 2.090112, 2.366412, 2.834290, 3.770969",\ + "0.644872, 0.908457, 1.183741, 1.651275, 2.587286",\ + "0.674845, 0.938429, 1.213713, 1.681248, 2.617258",\ + "0.746589, 1.010174, 1.285458, 1.752992, 2.689003",\ + "1.003042, 1.266626, 1.541910, 2.009445, 2.945455",\ + "1.915508, 2.179092, 2.454377, 2.921913, 3.857924",\ + "0.707368, 0.974091, 1.247880, 1.715189, 2.650795",\ + "0.737341, 1.004064, 1.277853, 1.745162, 2.680767",\ + "0.809085, 1.075809, 1.349597, 1.816906, 2.752512",\ + "1.065538, 1.332261, 1.606050, 2.073359, 3.008964",\ + "1.978004, 2.244727, 2.518517, 2.985826, 3.921433",\ + "1.036494, 1.338422, 1.599747, 2.064539, 2.996251",\ + "1.066466, 1.368395, 1.629720, 2.094511, 3.026223",\ + "1.138211, 1.440139, 1.701465, 2.166256, 3.097968",\ + "1.394664, 1.696592, 1.957917, 2.422708, 3.354420",\ + "2.307129, 2.609058, 2.870384, 3.335176, 4.266890"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.045710, 0.045710, 0.045710, 0.045710, 0.045709",\ + "0.092269, 0.092269, 0.092269, 0.092269, 0.092269",\ + "0.223657, 0.223657, 0.223657, 0.223656, 0.223656",\ + "0.715794, 0.715794, 0.715793, 0.715792, 0.715788",\ + "2.463890, 2.463890, 2.463889, 2.463887, 2.463883",\ + "0.045710, 0.045710, 0.045710, 0.045710, 0.045709",\ + "0.092269, 0.092269, 0.092269, 0.092269, 0.092269",\ + "0.223657, 0.223657, 0.223657, 0.223656, 0.223656",\ + "0.715794, 0.715794, 0.715793, 0.715792, 0.715788",\ + "2.463890, 2.463890, 2.463889, 2.463887, 2.463883",\ + "0.045710, 0.045710, 0.045710, 0.045710, 0.045709",\ + "0.092269, 0.092269, 0.092269, 0.092269, 0.092269",\ + "0.223657, 0.223657, 0.223657, 0.223656, 0.223656",\ + "0.715794, 0.715794, 0.715793, 0.715792, 0.715788",\ + "2.463890, 2.463890, 2.463889, 2.463887, 2.463883",\ + "0.045710, 0.045710, 0.045710, 0.045710, 0.045709",\ + "0.092269, 0.092269, 0.092269, 0.092269, 0.092269",\ + "0.223657, 0.223657, 0.223657, 0.223656, 0.223656",\ + "0.715794, 0.715794, 0.715793, 0.715792, 0.715788",\ + "2.463890, 2.463890, 2.463889, 2.463887, 2.463883",\ + "0.045710, 0.045710, 0.045710, 0.045710, 0.045709",\ + "0.092269, 0.092269, 0.092269, 0.092269, 0.092269",\ + "0.223657, 0.223657, 0.223657, 0.223656, 0.223656",\ + "0.715794, 0.715794, 0.715793, 0.715792, 0.715788",\ + "2.463890, 2.463890, 2.463889, 2.463887, 2.463883"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.401109, 0.583541, 0.779933, 1.088987, 1.683794",\ + "0.425551, 0.607982, 0.804374, 1.113428, 1.708236",\ + "0.476424, 0.658856, 0.855248, 1.164301, 1.759109",\ + "0.642861, 0.825293, 1.021685, 1.330738, 1.925545",\ + "1.229745, 1.412177, 1.608569, 1.917621, 2.512428",\ + "0.488524, 0.670927, 0.867426, 1.176292, 1.771148",\ + "0.512965, 0.695368, 0.891868, 1.200733, 1.795590",\ + "0.563839, 0.746242, 0.942741, 1.251606, 1.846463",\ + "0.730276, 0.912679, 1.109178, 1.418043, 2.012899",\ + "1.317160, 1.499562, 1.696062, 2.004926, 2.599781",\ + "0.569400, 0.751263, 0.947453, 1.256320, 1.851179",\ + "0.593842, 0.775705, 0.971894, 1.280761, 1.875621",\ + "0.644715, 0.826578, 1.022768, 1.331635, 1.926494",\ + "0.811152, 0.993015, 1.189205, 1.498072, 2.092930",\ + "1.398036, 1.579899, 1.776089, 2.084955, 2.679813",\ + "0.627047, 0.808812, 1.004997, 1.313565, 1.907827",\ + "0.651488, 0.833253, 1.029438, 1.338006, 1.932269",\ + "0.702362, 0.884127, 1.080312, 1.388880, 1.983142",\ + "0.868799, 1.050564, 1.246749, 1.555317, 2.149578",\ + "1.455682, 1.637447, 1.833632, 2.142200, 2.736460",\ + "0.929255, 1.114036, 1.308631, 1.616580, 2.209674",\ + "0.953696, 1.138477, 1.333072, 1.641021, 2.234116",\ + "1.004569, 1.189351, 1.383945, 1.691895, 2.284989",\ + "1.171007, 1.355788, 1.550383, 1.858332, 2.451425",\ + "1.757890, 1.942672, 2.137266, 2.445215, 3.038307"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.044220, 0.044220, 0.044220, 0.044220, 0.044220",\ + "0.073393, 0.073393, 0.073393, 0.073392, 0.073390",\ + "0.149511, 0.149511, 0.149511, 0.149511, 0.149511",\ + "0.447701, 0.447701, 0.447701, 0.447701, 0.447701",\ + "1.523418, 1.523418, 1.523418, 1.523418, 1.523417",\ + "0.044220, 0.044220, 0.044220, 0.044220, 0.044220",\ + "0.073393, 0.073393, 0.073393, 0.073392, 0.073390",\ + "0.149511, 0.149511, 0.149511, 0.149511, 0.149511",\ + "0.447701, 0.447701, 0.447701, 0.447701, 0.447701",\ + "1.523418, 1.523418, 1.523418, 1.523418, 1.523417",\ + "0.044220, 0.044220, 0.044220, 0.044220, 0.044220",\ + "0.073393, 0.073393, 0.073393, 0.073392, 0.073390",\ + "0.149511, 0.149511, 0.149511, 0.149511, 0.149511",\ + "0.447701, 0.447701, 0.447701, 0.447701, 0.447701",\ + "1.523418, 1.523418, 1.523418, 1.523418, 1.523417",\ + "0.044220, 0.044220, 0.044220, 0.044220, 0.044220",\ + "0.073393, 0.073393, 0.073393, 0.073392, 0.073390",\ + "0.149511, 0.149511, 0.149511, 0.149511, 0.149511",\ + "0.447701, 0.447701, 0.447701, 0.447701, 0.447701",\ + "1.523418, 1.523418, 1.523418, 1.523418, 1.523417",\ + "0.044220, 0.044220, 0.044220, 0.044220, 0.044220",\ + "0.073393, 0.073393, 0.073393, 0.073392, 0.073390",\ + "0.149511, 0.149511, 0.149511, 0.149511, 0.149511",\ + "0.447701, 0.447701, 0.447701, 0.447701, 0.447701",\ + "1.523418, 1.523418, 1.523418, 1.523418, 1.523417"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[8]_redg_2629*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[2]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.464386, 0.724016, 0.995888, 1.452767, 2.366527",\ + "0.494359, 0.753988, 1.025861, 1.482740, 2.396500",\ + "0.566104, 0.825733, 1.097605, 1.554485, 2.468244",\ + "0.822556, 1.082185, 1.354057, 1.810937, 2.724696",\ + "1.735022, 1.994652, 2.266525, 2.723405, 3.637166",\ + "0.552491, 0.811549, 1.083418, 1.539483, 2.452461",\ + "0.582464, 0.841522, 1.113391, 1.569456, 2.482434",\ + "0.654208, 0.913266, 1.185135, 1.641200, 2.554178",\ + "0.910661, 1.169719, 1.441588, 1.897652, 2.810630",\ + "1.823127, 2.082185, 2.354055, 2.810120, 3.723099",\ + "0.640521, 0.900515, 1.171383, 1.627106, 2.539416",\ + "0.670494, 0.930488, 1.201355, 1.657078, 2.569389",\ + "0.742239, 1.002232, 1.273100, 1.728823, 2.641133",\ + "0.998691, 1.258685, 1.529552, 1.985275, 2.897585",\ + "1.911157, 2.171151, 2.442019, 2.897743, 3.810054",\ + "0.702743, 0.966129, 1.235520, 1.691019, 2.602925",\ + "0.732715, 0.996101, 1.265493, 1.720992, 2.632898",\ + "0.804460, 1.067846, 1.337237, 1.792736, 2.704642",\ + "1.060912, 1.324298, 1.593690, 2.049189, 2.961094",\ + "1.973378, 2.236765, 2.506157, 2.961657, 3.873563",\ + "1.030130, 1.330203, 1.587268, 2.040320, 2.948381",\ + "1.060103, 1.360176, 1.617240, 2.070293, 2.978354",\ + "1.131847, 1.431921, 1.688985, 2.142037, 3.050098",\ + "1.388300, 1.688373, 1.945437, 2.398489, 3.306550",\ + "2.300766, 2.600840, 2.857904, 3.310957, 4.219019"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.045710, 0.045710, 0.045710, 0.045710, 0.045709",\ + "0.092269, 0.092269, 0.092269, 0.092269, 0.092269",\ + "0.223657, 0.223657, 0.223657, 0.223656, 0.223656",\ + "0.715794, 0.715794, 0.715793, 0.715790, 0.715784",\ + "2.463890, 2.463890, 2.463888, 2.463885, 2.463879",\ + "0.045710, 0.045710, 0.045710, 0.045710, 0.045709",\ + "0.092269, 0.092269, 0.092269, 0.092269, 0.092269",\ + "0.223657, 0.223657, 0.223657, 0.223656, 0.223656",\ + "0.715794, 0.715794, 0.715793, 0.715790, 0.715784",\ + "2.463890, 2.463890, 2.463888, 2.463885, 2.463879",\ + "0.045710, 0.045710, 0.045710, 0.045710, 0.045709",\ + "0.092269, 0.092269, 0.092269, 0.092269, 0.092269",\ + "0.223657, 0.223657, 0.223657, 0.223656, 0.223656",\ + "0.715794, 0.715794, 0.715793, 0.715790, 0.715784",\ + "2.463890, 2.463890, 2.463888, 2.463885, 2.463879",\ + "0.045710, 0.045710, 0.045710, 0.045710, 0.045709",\ + "0.092269, 0.092269, 0.092269, 0.092269, 0.092269",\ + "0.223657, 0.223657, 0.223657, 0.223656, 0.223656",\ + "0.715794, 0.715794, 0.715793, 0.715790, 0.715784",\ + "2.463890, 2.463890, 2.463888, 2.463885, 2.463879",\ + "0.045710, 0.045710, 0.045710, 0.045710, 0.045709",\ + "0.092269, 0.092269, 0.092269, 0.092269, 0.092269",\ + "0.223657, 0.223657, 0.223657, 0.223656, 0.223656",\ + "0.715794, 0.715794, 0.715793, 0.715790, 0.715784",\ + "2.463890, 2.463889, 2.463888, 2.463885, 2.463879"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.399448, 0.581989, 0.778244, 1.087461, 1.682757",\ + "0.423889, 0.606430, 0.802685, 1.111902, 1.707199",\ + "0.474763, 0.657304, 0.853558, 1.162776, 1.758072",\ + "0.641200, 0.823741, 1.019996, 1.329213, 1.924508",\ + "1.228083, 1.410624, 1.606879, 1.916096, 2.511390",\ + "0.486868, 0.669374, 0.865736, 1.174766, 1.770111",\ + "0.511309, 0.693815, 0.890178, 1.199207, 1.794553",\ + "0.562183, 0.744689, 0.941051, 1.250081, 1.845426",\ + "0.728620, 0.911126, 1.107488, 1.416518, 2.011862",\ + "1.315503, 1.498010, 1.694372, 2.003401, 2.598744",\ + "0.567735, 0.749711, 0.945763, 1.254794, 1.850142",\ + "0.592177, 0.774152, 0.970205, 1.279236, 1.874584",\ + "0.643050, 0.825026, 1.021078, 1.330109, 1.925457",\ + "0.809487, 0.991463, 1.187515, 1.496546, 2.091893",\ + "1.396371, 1.578347, 1.774399, 2.083429, 2.678775",\ + "0.625374, 0.807260, 1.003307, 1.312040, 1.906790",\ + "0.649816, 0.831701, 1.027748, 1.336481, 1.931232",\ + "0.700689, 0.882574, 1.078622, 1.387354, 1.982105",\ + "0.867126, 1.049011, 1.245059, 1.553791, 2.148541",\ + "1.454010, 1.635895, 1.831943, 2.140674, 2.735423",\ + "0.927469, 1.112486, 1.306941, 1.615054, 2.208637",\ + "0.951911, 1.136927, 1.331383, 1.639496, 2.233079",\ + "1.002784, 1.187801, 1.382256, 1.690369, 2.283952",\ + "1.169221, 1.354238, 1.548693, 1.856806, 2.450387",\ + "1.756105, 1.941121, 2.135577, 2.443689, 3.037270"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.044220, 0.044220, 0.044220, 0.044220, 0.044220",\ + "0.073393, 0.073393, 0.073393, 0.073392, 0.073390",\ + "0.149511, 0.149511, 0.149511, 0.149511, 0.149511",\ + "0.447701, 0.447701, 0.447701, 0.447701, 0.447701",\ + "1.523418, 1.523418, 1.523418, 1.523418, 1.523416",\ + "0.044220, 0.044220, 0.044220, 0.044220, 0.044220",\ + "0.073393, 0.073393, 0.073393, 0.073392, 0.073390",\ + "0.149511, 0.149511, 0.149511, 0.149511, 0.149511",\ + "0.447701, 0.447701, 0.447701, 0.447701, 0.447701",\ + "1.523418, 1.523418, 1.523418, 1.523418, 1.523416",\ + "0.044220, 0.044220, 0.044220, 0.044220, 0.044220",\ + "0.073393, 0.073393, 0.073393, 0.073392, 0.073390",\ + "0.149511, 0.149511, 0.149511, 0.149511, 0.149511",\ + "0.447701, 0.447701, 0.447701, 0.447701, 0.447701",\ + "1.523418, 1.523418, 1.523418, 1.523418, 1.523416",\ + "0.044220, 0.044220, 0.044220, 0.044220, 0.044220",\ + "0.073393, 0.073393, 0.073393, 0.073392, 0.073390",\ + "0.149511, 0.149511, 0.149511, 0.149511, 0.149511",\ + "0.447701, 0.447701, 0.447701, 0.447701, 0.447701",\ + "1.523418, 1.523418, 1.523418, 1.523418, 1.523416",\ + "0.044220, 0.044220, 0.044220, 0.044220, 0.044220",\ + "0.073393, 0.073393, 0.073393, 0.073392, 0.073390",\ + "0.149511, 0.149511, 0.149511, 0.149511, 0.149511",\ + "0.447701, 0.447701, 0.447701, 0.447701, 0.447701",\ + "1.523418, 1.523418, 1.523418, 1.523418, 1.523416"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[8]_redg_2576*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[3]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.556670, 0.735097, 0.915357, 1.201564, 1.752681",\ + "0.586643, 0.765069, 0.945330, 1.231536, 1.782653",\ + "0.658387, 0.836814, 1.017074, 1.303281, 1.854398",\ + "0.914840, 1.093267, 1.273527, 1.559734, 2.110850",\ + "1.827306, 2.005733, 2.185993, 2.472199, 3.023317",\ + "0.641609, 0.820369, 1.001272, 1.287484, 1.839059",\ + "0.671581, 0.850342, 1.031245, 1.317456, 1.869031",\ + "0.743326, 0.922086, 1.102990, 1.389201, 1.940776",\ + "0.999778, 1.178539, 1.359442, 1.645654, 2.197229",\ + "1.912244, 2.091005, 2.271908, 2.558120, 3.109695",\ + "0.717515, 0.895813, 1.076081, 1.362081, 1.913231",\ + "0.747487, 0.925785, 1.106054, 1.392053, 1.943204",\ + "0.819232, 0.997530, 1.177799, 1.463798, 2.014948",\ + "1.075685, 1.253982, 1.434251, 1.720250, 2.271401",\ + "1.988150, 2.166448, 2.346717, 2.632716, 3.183867",\ + "0.771867, 0.950324, 1.130732, 1.416620, 1.967548",\ + "0.801839, 0.980297, 1.160705, 1.446593, 1.997521",\ + "0.873584, 1.052042, 1.232450, 1.518338, 2.069266",\ + "1.130037, 1.308494, 1.488902, 1.774790, 2.325718",\ + "2.042502, 2.220960, 2.401368, 2.687256, 3.238184",\ + "1.053289, 1.235552, 1.414683, 1.700347, 2.250826",\ + "1.083261, 1.265524, 1.444655, 1.730319, 2.280799",\ + "1.155006, 1.337269, 1.516400, 1.802064, 2.352543",\ + "1.411458, 1.593722, 1.772853, 2.058517, 2.608996",\ + "2.323924, 2.506187, 2.685318, 2.970983, 3.521462"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.045710, 0.045710, 0.045710, 0.045710, 0.045710",\ + "0.092269, 0.092269, 0.092269, 0.092269, 0.092269",\ + "0.223657, 0.223657, 0.223657, 0.223657, 0.223657",\ + "0.715794, 0.715794, 0.715794, 0.715794, 0.715794",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.045710, 0.045710, 0.045710, 0.045710, 0.045710",\ + "0.092269, 0.092269, 0.092269, 0.092269, 0.092269",\ + "0.223657, 0.223657, 0.223657, 0.223657, 0.223657",\ + "0.715794, 0.715794, 0.715794, 0.715794, 0.715794",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.045710, 0.045710, 0.045710, 0.045710, 0.045710",\ + "0.092269, 0.092269, 0.092269, 0.092269, 0.092269",\ + "0.223657, 0.223657, 0.223657, 0.223657, 0.223657",\ + "0.715794, 0.715794, 0.715794, 0.715794, 0.715794",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.045710, 0.045710, 0.045710, 0.045710, 0.045710",\ + "0.092269, 0.092269, 0.092269, 0.092269, 0.092269",\ + "0.223657, 0.223657, 0.223657, 0.223657, 0.223657",\ + "0.715794, 0.715794, 0.715794, 0.715794, 0.715794",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890",\ + "0.045710, 0.045710, 0.045710, 0.045710, 0.045710",\ + "0.092269, 0.092269, 0.092269, 0.092269, 0.092269",\ + "0.223657, 0.223657, 0.223657, 0.223657, 0.223657",\ + "0.715794, 0.715794, 0.715794, 0.715794, 0.715794",\ + "2.463890, 2.463890, 2.463890, 2.463890, 2.463890"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.416720, 0.681890, 0.941092, 1.377274, 2.249640",\ + "0.441162, 0.706331, 0.965533, 1.401715, 2.274081",\ + "0.492035, 0.757205, 1.016407, 1.452589, 2.324954",\ + "0.658472, 0.923642, 1.182844, 1.619026, 2.491391",\ + "1.245356, 1.510525, 1.769727, 2.205910, 3.078275",\ + "0.505386, 0.769965, 1.029733, 1.465503, 2.337044",\ + "0.529827, 0.794406, 1.054174, 1.489944, 2.361485",\ + "0.580701, 0.845280, 1.105047, 1.540818, 2.412359",\ + "0.747138, 1.011717, 1.271485, 1.707255, 2.578796",\ + "1.334021, 1.598600, 1.858368, 2.294138, 3.165680",\ + "0.598193, 0.863088, 1.121458, 1.557667, 2.430086",\ + "0.622634, 0.887529, 1.145899, 1.582108, 2.454527",\ + "0.673507, 0.938403, 1.196773, 1.632982, 2.505401",\ + "0.839945, 1.104840, 1.363210, 1.799419, 2.671838",\ + "1.426828, 1.691723, 1.950093, 2.386303, 3.258722",\ + "0.663915, 0.931622, 1.188478, 1.624518, 2.496598",\ + "0.688356, 0.956063, 1.212919, 1.648959, 2.521039",\ + "0.739230, 1.006937, 1.263793, 1.699832, 2.571912",\ + "0.905667, 1.173374, 1.430230, 1.866270, 2.738349",\ + "1.492550, 1.760257, 2.017113, 2.453153, 3.325233",\ + "1.009705, 1.312121, 1.559108, 1.993649, 2.862731",\ + "1.034146, 1.336562, 1.583549, 2.018090, 2.887172",\ + "1.085019, 1.387435, 1.634423, 2.068964, 2.938045",\ + "1.251456, 1.553873, 1.800860, 2.235401, 3.104483",\ + "1.838340, 2.140756, 2.387743, 2.822284, 3.691366"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.044220, 0.044220, 0.044220, 0.044220, 0.044220",\ + "0.073393, 0.073393, 0.073393, 0.073393, 0.073393",\ + "0.149510, 0.149510, 0.149510, 0.149510, 0.149510",\ + "0.447701, 0.447701, 0.447701, 0.447701, 0.447701",\ + "1.523418, 1.523418, 1.523418, 1.523418, 1.523419",\ + "0.044220, 0.044220, 0.044220, 0.044220, 0.044220",\ + "0.073393, 0.073393, 0.073393, 0.073393, 0.073393",\ + "0.149510, 0.149510, 0.149510, 0.149510, 0.149510",\ + "0.447701, 0.447701, 0.447701, 0.447701, 0.447701",\ + "1.523418, 1.523418, 1.523418, 1.523418, 1.523419",\ + "0.044220, 0.044220, 0.044220, 0.044220, 0.044220",\ + "0.073393, 0.073393, 0.073393, 0.073393, 0.073393",\ + "0.149510, 0.149510, 0.149510, 0.149510, 0.149510",\ + "0.447701, 0.447701, 0.447701, 0.447701, 0.447701",\ + "1.523418, 1.523418, 1.523418, 1.523418, 1.523419",\ + "0.044220, 0.044220, 0.044220, 0.044220, 0.044220",\ + "0.073393, 0.073393, 0.073393, 0.073393, 0.073393",\ + "0.149510, 0.149510, 0.149510, 0.149510, 0.149510",\ + "0.447701, 0.447701, 0.447701, 0.447701, 0.447701",\ + "1.523418, 1.523418, 1.523418, 1.523418, 1.523419",\ + "0.044220, 0.044220, 0.044220, 0.044220, 0.044220",\ + "0.073393, 0.073393, 0.073393, 0.073393, 0.073393",\ + "0.149510, 0.149510, 0.149510, 0.149510, 0.149510",\ + "0.447701, 0.447701, 0.447701, 0.447701, 0.447701",\ + "1.523418, 1.523418, 1.523418, 1.523418, 1.523419"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[8]_redg_2513*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + values ( "0.323944, 0.353916, 0.425661, 0.682114, 1.594576",\ + "0.411334, 0.441307, 0.513052, 0.769505, 1.681967",\ + "0.492253, 0.522226, 0.593971, 0.850424, 1.762885",\ + "0.549994, 0.579967, 0.651712, 0.908165, 1.820624",\ + "0.852699, 0.882672, 0.954417, 1.210871, 2.123326"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + values ( "0.045711, 0.092269, 0.223658, 0.715775, 2.463871",\ + "0.045711, 0.092269, 0.223735, 0.715775, 2.463871",\ + "0.045711, 0.092269, 0.223968, 0.715775, 2.463871",\ + "0.045711, 0.092270, 0.223968, 0.715775, 2.463871",\ + "0.045873, 0.092295, 0.224303, 0.715788, 2.463884"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + values ( "0.296604, 0.321045, 0.371919, 0.538356, 1.125239",\ + "0.383997, 0.408438, 0.459311, 0.625749, 1.212632",\ + "0.464866, 0.489307, 0.540181, 0.706618, 1.293501",\ + "0.522515, 0.546956, 0.597830, 0.764267, 1.351150",\ + "0.825652, 0.850326, 0.901556, 1.068388, 1.654962"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + values ( "0.044220, 0.073393, 0.149516, 0.447701, 1.524168",\ + "0.044220, 0.073393, 0.149516, 0.447701, 1.524168",\ + "0.044220, 0.073393, 0.149516, 0.447701, 1.524042",\ + "0.044220, 0.073393, 0.149516, 0.447701, 1.523806",\ + "0.044219, 0.073327, 0.149516, 0.447696, 1.523418"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[8]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[0]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.507461, 0.687575, 0.875153, 1.177133, 1.760229",\ + "0.536439, 0.716552, 0.904131, 1.206110, 1.789207",\ + "0.607591, 0.787705, 0.975283, 1.277263, 1.860359",\ + "0.863316, 1.043430, 1.231008, 1.532988, 2.116084",\ + "1.774034, 1.954148, 2.141726, 2.443706, 3.026802",\ + "0.592400, 0.772411, 0.960223, 1.262639, 1.846608",\ + "0.621377, 0.801388, 0.989201, 1.291617, 1.875585",\ + "0.692529, 0.872540, 1.060353, 1.362769, 1.946737",\ + "0.948255, 1.128266, 1.316078, 1.618494, 2.202463",\ + "1.858973, 2.038984, 2.226796, 2.529212, 3.113181",\ + "0.668312, 0.847854, 1.035032, 1.337236, 1.920780",\ + "0.697289, 0.876831, 1.064010, 1.366214, 1.949757",\ + "0.768441, 0.947984, 1.135162, 1.437366, 2.020910",\ + "1.024167, 1.203709, 1.390887, 1.693091, 2.276635",\ + "1.934885, 2.114427, 2.301605, 2.603809, 3.187353",\ + "0.722681, 0.902605, 1.089921, 1.391842, 1.975097",\ + "0.751658, 0.931583, 1.118899, 1.420819, 2.004075",\ + "0.822811, 1.002735, 1.190051, 1.491971, 2.075227",\ + "1.078536, 1.258460, 1.445776, 1.747697, 2.330952",\ + "1.989254, 2.169178, 2.356494, 2.658415, 3.241670",\ + "1.004276, 1.188170, 1.374097, 1.675568, 2.258375",\ + "1.033253, 1.217148, 1.403074, 1.704545, 2.287352",\ + "1.104405, 1.288300, 1.474226, 1.775698, 2.358505",\ + "1.360131, 1.544025, 1.729952, 2.031423, 2.614230",\ + "2.270849, 2.454743, 2.640669, 2.942141, 3.524948"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.042748, 0.042748, 0.042748, 0.042748, 0.042748",\ + "0.089888, 0.089888, 0.089888, 0.089888, 0.089888",\ + "0.222179, 0.222179, 0.222179, 0.222179, 0.222179",\ + "0.711766, 0.711766, 0.711766, 0.711766, 0.711766",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.042748, 0.042748, 0.042748, 0.042748, 0.042748",\ + "0.089888, 0.089888, 0.089888, 0.089888, 0.089888",\ + "0.222179, 0.222179, 0.222179, 0.222179, 0.222179",\ + "0.711766, 0.711766, 0.711766, 0.711766, 0.711766",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.042748, 0.042748, 0.042748, 0.042748, 0.042748",\ + "0.089888, 0.089888, 0.089888, 0.089888, 0.089888",\ + "0.222179, 0.222179, 0.222179, 0.222179, 0.222179",\ + "0.711766, 0.711766, 0.711766, 0.711766, 0.711766",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.042748, 0.042748, 0.042748, 0.042748, 0.042748",\ + "0.089888, 0.089888, 0.089888, 0.089888, 0.089888",\ + "0.222179, 0.222179, 0.222179, 0.222179, 0.222179",\ + "0.711766, 0.711766, 0.711766, 0.711766, 0.711766",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.042748, 0.042748, 0.042748, 0.042748, 0.042748",\ + "0.089888, 0.089888, 0.089888, 0.089888, 0.089888",\ + "0.222179, 0.222179, 0.222179, 0.222179, 0.222179",\ + "0.711766, 0.711766, 0.711766, 0.711766, 0.711766",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.389483, 0.657094, 0.918495, 1.358271, 2.237432",\ + "0.411493, 0.679104, 0.940496, 1.380242, 2.259341",\ + "0.459519, 0.727130, 0.988522, 1.428268, 2.307366",\ + "0.624827, 0.892438, 1.153830, 1.593576, 2.472674",\ + "1.214436, 1.482046, 1.743447, 2.183224, 3.062385",\ + "0.478187, 0.745169, 1.007135, 1.446501, 2.324838",\ + "0.500198, 0.767179, 1.029137, 1.468471, 2.346746",\ + "0.548223, 0.815205, 1.077163, 1.516497, 2.394772",\ + "0.713532, 0.980513, 1.242471, 1.681805, 2.560080",\ + "1.303140, 1.570121, 1.832088, 2.271453, 3.149790",\ + "0.571129, 0.838489, 1.099180, 1.538746, 2.417880",\ + "0.593140, 0.860499, 1.121182, 1.560717, 2.439788",\ + "0.641166, 0.908525, 1.169207, 1.608743, 2.487813",\ + "0.806474, 1.073833, 1.334516, 1.774051, 2.653121",\ + "1.396082, 1.663441, 1.924133, 2.363699, 3.242832",\ + "0.636973, 0.907053, 1.166236, 1.605758, 2.484801",\ + "0.658983, 0.929063, 1.188238, 1.627728, 2.506709",\ + "0.707009, 0.977089, 1.236264, 1.675754, 2.554735",\ + "0.872317, 1.142398, 1.401572, 1.841062, 2.720043",\ + "1.461926, 1.732006, 1.991189, 2.430710, 3.309754",\ + "0.983494, 1.287889, 1.536907, 1.974983, 2.851137",\ + "1.005505, 1.309899, 1.558908, 1.996953, 2.873044",\ + "1.053531, 1.357925, 1.606934, 2.044979, 2.921070",\ + "1.218839, 1.523233, 1.772242, 2.210288, 3.086378",\ + "1.808447, 2.112841, 2.361860, 2.799936, 3.676089"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.035640, 0.035640, 0.035640, 0.035640, 0.035640",\ + "0.064460, 0.064460, 0.064460, 0.064460, 0.064460",\ + "0.142275, 0.142275, 0.142275, 0.142275, 0.142275",\ + "0.443177, 0.443177, 0.443177, 0.443177, 0.443178",\ + "1.518758, 1.518758, 1.518758, 1.518758, 1.518758",\ + "0.035640, 0.035640, 0.035640, 0.035640, 0.035640",\ + "0.064460, 0.064460, 0.064460, 0.064460, 0.064460",\ + "0.142275, 0.142275, 0.142275, 0.142275, 0.142275",\ + "0.443177, 0.443177, 0.443177, 0.443177, 0.443178",\ + "1.518758, 1.518758, 1.518758, 1.518758, 1.518758",\ + "0.035640, 0.035640, 0.035640, 0.035640, 0.035640",\ + "0.064460, 0.064460, 0.064460, 0.064460, 0.064460",\ + "0.142275, 0.142275, 0.142275, 0.142275, 0.142275",\ + "0.443177, 0.443177, 0.443177, 0.443177, 0.443178",\ + "1.518758, 1.518758, 1.518758, 1.518758, 1.518758",\ + "0.035640, 0.035640, 0.035640, 0.035640, 0.035640",\ + "0.064460, 0.064460, 0.064460, 0.064460, 0.064460",\ + "0.142275, 0.142275, 0.142275, 0.142275, 0.142275",\ + "0.443177, 0.443177, 0.443177, 0.443177, 0.443178",\ + "1.518758, 1.518758, 1.518758, 1.518758, 1.518758",\ + "0.035640, 0.035640, 0.035640, 0.035640, 0.035640",\ + "0.064460, 0.064460, 0.064460, 0.064460, 0.064460",\ + "0.142275, 0.142275, 0.142275, 0.142275, 0.142275",\ + "0.443177, 0.443177, 0.443177, 0.443177, 0.443178",\ + "1.518758, 1.518758, 1.518758, 1.518758, 1.518758"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[8]_redg_min_2454*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[1]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.415570, 0.679101, 0.955220, 1.423352, 2.358356",\ + "0.444547, 0.708078, 0.984198, 1.452330, 2.387333",\ + "0.515699, 0.779231, 1.055350, 1.523482, 2.458486",\ + "0.771425, 1.034956, 1.311076, 1.779207, 2.714211",\ + "1.682143, 1.945674, 2.221793, 2.689925, 3.624929",\ + "0.503764, 0.766641, 1.042787, 1.510067, 2.444290",\ + "0.532741, 0.795619, 1.071764, 1.539045, 2.473267",\ + "0.603894, 0.866771, 1.142917, 1.610197, 2.544420",\ + "0.859619, 1.122496, 1.398642, 1.865922, 2.800145",\ + "1.770337, 2.033214, 2.309360, 2.776640, 3.710862",\ + "0.592080, 0.855621, 1.130752, 1.597708, 2.531245",\ + "0.621057, 0.884598, 1.159729, 1.626685, 2.560222",\ + "0.692210, 0.955751, 1.230882, 1.697837, 2.631375",\ + "0.947935, 1.211476, 1.486607, 1.953563, 2.887100",\ + "1.858653, 2.122194, 2.397325, 2.864281, 3.797817",\ + "0.654576, 0.921255, 1.194892, 1.661796, 2.594754",\ + "0.683553, 0.950232, 1.223869, 1.690774, 2.623731",\ + "0.754706, 1.021384, 1.295022, 1.761926, 2.694884",\ + "1.010431, 1.277110, 1.550747, 2.017652, 2.950609",\ + "1.921149, 2.187827, 2.461465, 2.928370, 3.861326",\ + "0.983702, 1.285569, 1.546756, 2.011240, 2.940210",\ + "1.012679, 1.314547, 1.575733, 2.040218, 2.969187",\ + "1.083832, 1.385699, 1.646886, 2.111370, 3.040340",\ + "1.339557, 1.641424, 1.902611, 2.367095, 3.296065",\ + "2.250275, 2.552142, 2.813329, 3.277813, 4.206782"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.042748, 0.042748, 0.042748, 0.042748, 0.042749",\ + "0.089888, 0.089888, 0.089888, 0.089889, 0.089889",\ + "0.222179, 0.222179, 0.222179, 0.222179, 0.222180",\ + "0.711766, 0.711766, 0.711766, 0.711765, 0.711764",\ + "2.448223, 2.448223, 2.448224, 2.448226, 2.448230",\ + "0.042748, 0.042748, 0.042748, 0.042748, 0.042749",\ + "0.089888, 0.089888, 0.089888, 0.089889, 0.089889",\ + "0.222179, 0.222179, 0.222179, 0.222179, 0.222180",\ + "0.711766, 0.711766, 0.711766, 0.711765, 0.711764",\ + "2.448223, 2.448223, 2.448224, 2.448226, 2.448230",\ + "0.042748, 0.042748, 0.042748, 0.042748, 0.042749",\ + "0.089888, 0.089888, 0.089888, 0.089889, 0.089889",\ + "0.222179, 0.222179, 0.222179, 0.222179, 0.222180",\ + "0.711766, 0.711766, 0.711766, 0.711765, 0.711764",\ + "2.448223, 2.448223, 2.448224, 2.448226, 2.448230",\ + "0.042748, 0.042748, 0.042748, 0.042748, 0.042749",\ + "0.089888, 0.089888, 0.089888, 0.089889, 0.089889",\ + "0.222179, 0.222179, 0.222179, 0.222179, 0.222180",\ + "0.711766, 0.711766, 0.711766, 0.711765, 0.711764",\ + "2.448223, 2.448223, 2.448224, 2.448226, 2.448230",\ + "0.042748, 0.042748, 0.042748, 0.042748, 0.042749",\ + "0.089888, 0.089888, 0.089888, 0.089889, 0.089889",\ + "0.222179, 0.222179, 0.222179, 0.222179, 0.222180",\ + "0.711766, 0.711766, 0.711766, 0.711765, 0.711764",\ + "2.448223, 2.448223, 2.448224, 2.448226, 2.448230"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.372438, 0.554496, 0.750729, 1.059908, 1.654385",\ + "0.394447, 0.576504, 0.772637, 1.081769, 1.676222",\ + "0.442472, 0.624530, 0.820663, 1.129795, 1.724248",\ + "0.607781, 0.789838, 0.985971, 1.295103, 1.889559",\ + "1.197391, 1.379448, 1.575682, 1.884862, 2.479345",\ + "0.459853, 0.641814, 0.838010, 1.147213, 1.741738",\ + "0.481861, 0.663823, 0.859918, 1.169074, 1.763576",\ + "0.529887, 0.711849, 0.907944, 1.217100, 1.811602",\ + "0.695195, 0.877157, 1.073252, 1.382408, 1.976912",\ + "1.284805, 1.466767, 1.662963, 1.972167, 2.566699",\ + "0.540729, 0.722151, 0.918037, 1.227241, 1.821770",\ + "0.562738, 0.744159, 0.939945, 1.249102, 1.843607",\ + "0.610763, 0.792185, 0.987971, 1.297128, 1.891634",\ + "0.776072, 0.957493, 1.153279, 1.462437, 2.056944",\ + "1.365682, 1.547103, 1.742990, 2.052196, 2.646730",\ + "0.598376, 0.779988, 0.975773, 1.284712, 1.878866",\ + "0.620384, 0.801996, 0.997680, 1.306573, 1.900703",\ + "0.668410, 0.850022, 1.045706, 1.354599, 1.948729",\ + "0.833718, 1.015330, 1.211014, 1.519907, 2.114039",\ + "1.423328, 1.604940, 1.800725, 2.109667, 2.703826",\ + "0.900583, 1.085365, 1.279436, 1.587919, 2.181184",\ + "0.922592, 1.107373, 1.301344, 1.609780, 2.203021",\ + "0.970618, 1.155399, 1.349370, 1.657806, 2.251047",\ + "1.135926, 1.320707, 1.514678, 1.823114, 2.416358",\ + "1.725536, 1.910317, 2.104389, 2.412873, 3.006144"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.035640, 0.035640, 0.035640, 0.035640, 0.035640",\ + "0.064460, 0.064460, 0.064460, 0.064460, 0.064461",\ + "0.142275, 0.142275, 0.142275, 0.142276, 0.142277",\ + "0.443177, 0.443177, 0.443178, 0.443183, 0.443195",\ + "1.518758, 1.518758, 1.518758, 1.518759, 1.518761",\ + "0.035640, 0.035640, 0.035640, 0.035640, 0.035640",\ + "0.064460, 0.064460, 0.064460, 0.064460, 0.064461",\ + "0.142275, 0.142275, 0.142275, 0.142276, 0.142277",\ + "0.443177, 0.443177, 0.443178, 0.443183, 0.443195",\ + "1.518758, 1.518758, 1.518758, 1.518759, 1.518761",\ + "0.035640, 0.035640, 0.035640, 0.035640, 0.035640",\ + "0.064460, 0.064460, 0.064460, 0.064460, 0.064461",\ + "0.142275, 0.142275, 0.142275, 0.142276, 0.142277",\ + "0.443177, 0.443177, 0.443178, 0.443183, 0.443195",\ + "1.518758, 1.518758, 1.518758, 1.518759, 1.518761",\ + "0.035640, 0.035640, 0.035640, 0.035640, 0.035640",\ + "0.064460, 0.064460, 0.064460, 0.064460, 0.064461",\ + "0.142275, 0.142275, 0.142275, 0.142276, 0.142277",\ + "0.443177, 0.443177, 0.443178, 0.443183, 0.443196",\ + "1.518758, 1.518758, 1.518758, 1.518759, 1.518761",\ + "0.035640, 0.035640, 0.035640, 0.035640, 0.035640",\ + "0.064460, 0.064460, 0.064460, 0.064460, 0.064461",\ + "0.142275, 0.142275, 0.142275, 0.142276, 0.142277",\ + "0.443177, 0.443177, 0.443178, 0.443183, 0.443196",\ + "1.518758, 1.518758, 1.518758, 1.518759, 1.518761"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[8]_redg_min_2376*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[2]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.411592, 0.671151, 0.942786, 1.398947, 2.310115",\ + "0.440569, 0.700128, 0.971763, 1.427925, 2.339092",\ + "0.511721, 0.771281, 1.042916, 1.499077, 2.410245",\ + "0.767447, 1.027006, 1.298641, 1.754802, 2.665970",\ + "1.678164, 1.937724, 2.209359, 2.665520, 3.576688",\ + "0.499696, 0.758684, 1.030315, 1.485663, 2.396049",\ + "0.528674, 0.787661, 1.059292, 1.514640, 2.425026",\ + "0.599826, 0.858813, 1.130445, 1.585792, 2.496178",\ + "0.855551, 1.114539, 1.386170, 1.841518, 2.751904",\ + "1.766269, 2.025257, 2.296888, 2.752235, 3.662621",\ + "0.587726, 0.847648, 1.118279, 1.573302, 2.483004",\ + "0.616704, 0.876625, 1.147256, 1.602279, 2.511981",\ + "0.687856, 0.947778, 1.218409, 1.673431, 2.583133",\ + "0.943582, 1.203503, 1.474134, 1.929157, 2.838859",\ + "1.854300, 2.114221, 2.384852, 2.839874, 3.749576",\ + "0.649948, 0.913259, 1.182417, 1.637376, 2.546513",\ + "0.678925, 0.942237, 1.211394, 1.666353, 2.575490",\ + "0.750077, 1.013389, 1.282547, 1.737506, 2.646642",\ + "1.005803, 1.269114, 1.538272, 1.993231, 2.902368",\ + "1.916521, 2.179832, 2.448990, 2.903949, 3.813085",\ + "0.977335, 1.277308, 1.534159, 1.986762, 2.891969",\ + "1.006312, 1.306285, 1.563137, 2.015740, 2.920946",\ + "1.077465, 1.377437, 1.634289, 2.086892, 2.992099",\ + "1.333190, 1.633163, 1.890014, 2.342618, 3.247824",\ + "2.243908, 2.543881, 2.800732, 3.253335, 4.158542"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.042748, 0.042748, 0.042748, 0.042749, 0.042750",\ + "0.089888, 0.089888, 0.089889, 0.089889, 0.089889",\ + "0.222179, 0.222179, 0.222179, 0.222180, 0.222180",\ + "0.711766, 0.711766, 0.711765, 0.711765, 0.711763",\ + "2.448223, 2.448223, 2.448225, 2.448228, 2.448234",\ + "0.042748, 0.042748, 0.042748, 0.042749, 0.042750",\ + "0.089888, 0.089888, 0.089889, 0.089889, 0.089889",\ + "0.222179, 0.222179, 0.222179, 0.222180, 0.222180",\ + "0.711766, 0.711766, 0.711765, 0.711765, 0.711763",\ + "2.448223, 2.448223, 2.448225, 2.448228, 2.448234",\ + "0.042748, 0.042748, 0.042748, 0.042749, 0.042750",\ + "0.089888, 0.089888, 0.089889, 0.089889, 0.089889",\ + "0.222179, 0.222179, 0.222179, 0.222180, 0.222180",\ + "0.711766, 0.711766, 0.711765, 0.711765, 0.711763",\ + "2.448223, 2.448223, 2.448225, 2.448228, 2.448234",\ + "0.042748, 0.042748, 0.042748, 0.042749, 0.042750",\ + "0.089888, 0.089888, 0.089889, 0.089889, 0.089889",\ + "0.222179, 0.222179, 0.222179, 0.222180, 0.222180",\ + "0.711766, 0.711766, 0.711765, 0.711765, 0.711763",\ + "2.448223, 2.448223, 2.448225, 2.448228, 2.448234",\ + "0.042748, 0.042748, 0.042748, 0.042749, 0.042750",\ + "0.089888, 0.089888, 0.089889, 0.089889, 0.089889",\ + "0.222179, 0.222179, 0.222179, 0.222180, 0.222180",\ + "0.711766, 0.711766, 0.711765, 0.711765, 0.711763",\ + "2.448223, 2.448223, 2.448225, 2.448228, 2.448234"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.370774, 0.552942, 0.749040, 1.058378, 1.653339",\ + "0.392785, 0.574952, 0.770949, 1.080242, 1.675184",\ + "0.440811, 0.622978, 0.818975, 1.128268, 1.723211",\ + "0.606119, 0.788286, 0.984283, 1.293577, 1.888521",\ + "1.195727, 1.377894, 1.573993, 1.883330, 2.478289",\ + "0.458194, 0.640260, 0.836321, 1.145683, 1.740692",\ + "0.480205, 0.662271, 0.858230, 1.167547, 1.762538",\ + "0.528231, 0.710297, 0.906256, 1.215573, 1.810564",\ + "0.693539, 0.875605, 1.071564, 1.380882, 1.975875",\ + "1.283147, 1.465213, 1.661273, 1.970635, 2.565643",\ + "0.539062, 0.720597, 0.916348, 1.225712, 1.820724",\ + "0.561073, 0.742608, 0.938257, 1.247576, 1.842569",\ + "0.609098, 0.790634, 0.986283, 1.295602, 1.890596",\ + "0.774407, 0.955942, 1.151591, 1.460911, 2.055906",\ + "1.364015, 1.545550, 1.741300, 2.050663, 2.645674",\ + "0.596701, 0.778434, 0.974083, 1.283183, 1.877821",\ + "0.618712, 0.800445, 0.995992, 1.305047, 1.899666",\ + "0.666737, 0.848471, 1.044018, 1.353073, 1.947692",\ + "0.832046, 1.013779, 1.209326, 1.518381, 2.113003",\ + "1.421654, 1.603387, 1.799036, 2.108135, 2.702771",\ + "0.898796, 1.083812, 1.277747, 1.586390, 2.180140",\ + "0.920807, 1.105823, 1.299656, 1.608254, 2.201985",\ + "0.968832, 1.153849, 1.347681, 1.656280, 2.250011",\ + "1.134141, 1.319157, 1.512989, 1.821589, 2.415322",\ + "1.723749, 1.908765, 2.102699, 2.411342, 3.005090"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.035640, 0.035640, 0.035640, 0.035640, 0.035640",\ + "0.064460, 0.064460, 0.064460, 0.064460, 0.064462",\ + "0.142275, 0.142275, 0.142275, 0.142276, 0.142277",\ + "0.443177, 0.443177, 0.443178, 0.443184, 0.443197",\ + "1.518758, 1.518758, 1.518758, 1.518759, 1.518761",\ + "0.035640, 0.035640, 0.035640, 0.035640, 0.035640",\ + "0.064460, 0.064460, 0.064460, 0.064460, 0.064462",\ + "0.142275, 0.142275, 0.142275, 0.142276, 0.142277",\ + "0.443177, 0.443177, 0.443178, 0.443184, 0.443197",\ + "1.518758, 1.518758, 1.518758, 1.518759, 1.518761",\ + "0.035640, 0.035640, 0.035640, 0.035640, 0.035640",\ + "0.064460, 0.064460, 0.064460, 0.064460, 0.064462",\ + "0.142275, 0.142275, 0.142275, 0.142276, 0.142277",\ + "0.443177, 0.443177, 0.443178, 0.443184, 0.443197",\ + "1.518758, 1.518758, 1.518758, 1.518759, 1.518761",\ + "0.035640, 0.035640, 0.035640, 0.035640, 0.035640",\ + "0.064460, 0.064460, 0.064460, 0.064460, 0.064462",\ + "0.142275, 0.142275, 0.142275, 0.142276, 0.142277",\ + "0.443177, 0.443177, 0.443178, 0.443184, 0.443197",\ + "1.518758, 1.518758, 1.518758, 1.518759, 1.518761",\ + "0.035640, 0.035640, 0.035640, 0.035640, 0.035640",\ + "0.064460, 0.064460, 0.064460, 0.064460, 0.064462",\ + "0.142275, 0.142275, 0.142275, 0.142276, 0.142277",\ + "0.443177, 0.443177, 0.443178, 0.443184, 0.443197",\ + "1.518758, 1.518758, 1.518758, 1.518759, 1.518761"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[8]_redg_min_2318*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[3]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.503875, 0.682214, 0.862561, 1.148748, 1.699501",\ + "0.532852, 0.711192, 0.891538, 1.177725, 1.728478",\ + "0.604005, 0.782344, 0.962691, 1.248877, 1.799630",\ + "0.859730, 1.038069, 1.218416, 1.504603, 2.055356",\ + "1.770448, 1.948787, 2.129134, 2.415321, 2.966074",\ + "0.588813, 0.767050, 0.947631, 1.234254, 1.785879",\ + "0.617791, 0.796027, 0.976608, 1.263231, 1.814857",\ + "0.688943, 0.867180, 1.047761, 1.334384, 1.886009",\ + "0.944668, 1.122905, 1.303486, 1.590109, 2.141734",\ + "1.855386, 2.033623, 2.214204, 2.500827, 3.052452",\ + "0.664719, 0.842493, 1.022440, 1.308851, 1.860052",\ + "0.693697, 0.871471, 1.051417, 1.337828, 1.889029",\ + "0.764849, 0.942623, 1.122570, 1.408980, 1.960181",\ + "1.020574, 1.198349, 1.378295, 1.664706, 2.215907",\ + "1.931292, 2.109066, 2.289013, 2.575424, 3.126625",\ + "0.719071, 0.897239, 1.077305, 1.363444, 1.914369",\ + "0.748049, 0.926216, 1.106283, 1.392421, 1.943346",\ + "0.819201, 0.997369, 1.177435, 1.463574, 2.014498",\ + "1.074926, 1.253094, 1.433160, 1.719299, 2.270224",\ + "1.985644, 2.163812, 2.343878, 2.630017, 3.180942",\ + "1.000493, 1.182756, 1.361458, 1.647171, 2.197646",\ + "1.029471, 1.211734, 1.390436, 1.676148, 2.226624",\ + "1.100623, 1.282886, 1.461588, 1.747300, 2.297776",\ + "1.356348, 1.538611, 1.717313, 2.003026, 2.553502",\ + "2.267066, 2.449329, 2.628031, 2.913743, 3.464219"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.042748, 0.042748, 0.042748, 0.042748, 0.042748",\ + "0.089888, 0.089888, 0.089888, 0.089888, 0.089888",\ + "0.222179, 0.222179, 0.222179, 0.222179, 0.222179",\ + "0.711766, 0.711766, 0.711766, 0.711766, 0.711766",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.042748, 0.042748, 0.042748, 0.042748, 0.042748",\ + "0.089888, 0.089888, 0.089888, 0.089888, 0.089888",\ + "0.222179, 0.222179, 0.222179, 0.222179, 0.222179",\ + "0.711766, 0.711766, 0.711766, 0.711766, 0.711766",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.042748, 0.042748, 0.042748, 0.042748, 0.042748",\ + "0.089888, 0.089888, 0.089888, 0.089888, 0.089888",\ + "0.222179, 0.222179, 0.222179, 0.222179, 0.222179",\ + "0.711766, 0.711766, 0.711766, 0.711766, 0.711766",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.042748, 0.042748, 0.042748, 0.042748, 0.042748",\ + "0.089888, 0.089888, 0.089888, 0.089888, 0.089888",\ + "0.222179, 0.222179, 0.222179, 0.222179, 0.222179",\ + "0.711766, 0.711766, 0.711766, 0.711766, 0.711766",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223",\ + "0.042748, 0.042748, 0.042748, 0.042748, 0.042748",\ + "0.089888, 0.089888, 0.089888, 0.089888, 0.089888",\ + "0.222179, 0.222179, 0.222179, 0.222179, 0.222179",\ + "0.711766, 0.711766, 0.711766, 0.711766, 0.711766",\ + "2.448223, 2.448223, 2.448223, 2.448223, 2.448223"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.388047, 0.653046, 0.912076, 1.348340, 2.220486",\ + "0.410058, 0.675057, 0.934076, 1.370306, 2.242383",\ + "0.458083, 0.723083, 0.982102, 1.418332, 2.290410",\ + "0.623392, 0.888391, 1.147410, 1.583640, 2.455718",\ + "1.213000, 1.477999, 1.737028, 2.173293, 3.045439",\ + "0.476712, 0.741121, 1.000716, 1.436569, 2.307892",\ + "0.498723, 0.763132, 1.022717, 1.458535, 2.329789",\ + "0.546749, 0.811157, 1.070743, 1.506561, 2.377815",\ + "0.712057, 0.976466, 1.236051, 1.671869, 2.543123",\ + "1.301665, 1.566074, 1.825669, 2.261521, 3.132844",\ + "0.569519, 0.834415, 1.092752, 1.528812, 2.400934",\ + "0.591530, 0.856425, 1.114753, 1.550778, 2.422831",\ + "0.639556, 0.904451, 1.162778, 1.598804, 2.470856",\ + "0.804864, 1.069759, 1.328087, 1.764112, 2.636164",\ + "1.394472, 1.659367, 1.917704, 2.353765, 3.225886",\ + "0.635242, 0.902949, 1.159807, 1.595819, 2.467843",\ + "0.657252, 0.924959, 1.181808, 1.617785, 2.489740",\ + "0.705278, 0.972985, 1.229833, 1.665811, 2.537766",\ + "0.870586, 1.138293, 1.395142, 1.831119, 2.703074",\ + "1.460194, 1.727901, 1.984760, 2.420771, 3.292796",\ + "0.981031, 1.283447, 1.530445, 1.965020, 2.834170",\ + "1.003042, 1.305458, 1.552445, 1.986986, 2.856067",\ + "1.051068, 1.353484, 1.600471, 2.035012, 2.904093",\ + "1.216376, 1.518792, 1.765779, 2.200320, 3.069401",\ + "1.805984, 2.108400, 2.355398, 2.789973, 3.659123"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.035640, 0.035640, 0.035640, 0.035640, 0.035640",\ + "0.064460, 0.064460, 0.064460, 0.064460, 0.064460",\ + "0.142275, 0.142275, 0.142275, 0.142275, 0.142275",\ + "0.443177, 0.443177, 0.443177, 0.443177, 0.443178",\ + "1.518758, 1.518758, 1.518758, 1.518758, 1.518758",\ + "0.035640, 0.035640, 0.035640, 0.035640, 0.035640",\ + "0.064460, 0.064460, 0.064460, 0.064460, 0.064460",\ + "0.142275, 0.142275, 0.142275, 0.142275, 0.142275",\ + "0.443177, 0.443177, 0.443177, 0.443177, 0.443178",\ + "1.518758, 1.518758, 1.518758, 1.518758, 1.518758",\ + "0.035640, 0.035640, 0.035640, 0.035640, 0.035640",\ + "0.064460, 0.064460, 0.064460, 0.064460, 0.064460",\ + "0.142275, 0.142275, 0.142275, 0.142275, 0.142275",\ + "0.443177, 0.443177, 0.443177, 0.443177, 0.443178",\ + "1.518758, 1.518758, 1.518758, 1.518758, 1.518758",\ + "0.035640, 0.035640, 0.035640, 0.035640, 0.035640",\ + "0.064460, 0.064460, 0.064460, 0.064460, 0.064460",\ + "0.142275, 0.142275, 0.142275, 0.142275, 0.142275",\ + "0.443177, 0.443177, 0.443177, 0.443177, 0.443178",\ + "1.518758, 1.518758, 1.518758, 1.518758, 1.518758",\ + "0.035640, 0.035640, 0.035640, 0.035640, 0.035640",\ + "0.064460, 0.064460, 0.064460, 0.064460, 0.064460",\ + "0.142275, 0.142275, 0.142275, 0.142275, 0.142275",\ + "0.443177, 0.443177, 0.443177, 0.443177, 0.443178",\ + "1.518758, 1.518758, 1.518758, 1.518758, 1.518758"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[8]_redg_min_2260*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + values ( "0.141425, 0.170720, 0.242339, 0.498612, 1.411098",\ + "0.229610, 0.258905, 0.330536, 0.586854, 1.499024",\ + "0.317934, 0.347229, 0.418864, 0.675374, 1.587106",\ + "0.380526, 0.409818, 0.481403, 0.738206, 1.650402",\ + "0.710407, 0.739695, 0.811101, 1.068343, 1.982165"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + values ( "0.042748, 0.089888, 0.222179, 0.711766, 2.448223",\ + "0.042748, 0.089888, 0.222179, 0.711766, 2.448223",\ + "0.042748, 0.089888, 0.222179, 0.711766, 2.448223",\ + "0.042748, 0.089888, 0.222179, 0.711766, 2.448223",\ + "0.042748, 0.089888, 0.222179, 0.711766, 2.448223"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + values ( "0.179776, 0.202485, 0.251521, 0.417224, 1.003880",\ + "0.267179, 0.289888, 0.338925, 0.504627, 1.091283",\ + "0.348077, 0.370784, 0.419825, 0.585531, 1.172197",\ + "0.405741, 0.428442, 0.477491, 0.643206, 1.229887",\ + "0.708098, 0.730789, 0.779867, 0.945650, 1.532504"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + values ( "0.035639, 0.064458, 0.142274, 0.442345, 1.516474",\ + "0.035639, 0.064458, 0.142274, 0.442345, 1.516474",\ + "0.035639, 0.064458, 0.142274, 0.442391, 1.516474",\ + "0.035639, 0.064458, 0.142274, 0.442476, 1.516474",\ + "0.035639, 0.064458, 0.142274, 0.443177, 1.516474"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[8]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_falling ; + clock_gating_flag : true ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.045711, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.454726, 0.454726, 0.454726, 0.454726, 0.454726",\ + "0.473076, 0.473076, 0.473076, 0.473076, 0.473076",\ + "0.545703, 0.545703, 0.545703, 0.545703, 0.545703",\ + "0.640171, 0.640171, 0.640171, 0.640171, 0.640171",\ + "1.087704, 1.087704, 1.087704, 1.087704, 1.087704"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.044476, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.201983, 0.201983, 0.201983, 0.201983, 0.201983",\ + "0.219410, 0.219410, 0.219410, 0.219410, 0.219410",\ + "0.296741, 0.296741, 0.296741, 0.296741, 0.296741",\ + "0.405665, 0.405665, 0.405665, 0.405665, 0.405665",\ + "0.925258, 0.925258, 0.925258, 0.925258, 0.925258"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[8]_cgsf*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + clock_gating_flag : true ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.041900, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.450859, -0.450859, -0.450859, -0.450859, -0.450859",\ + "-0.467474, -0.467474, -0.467474, -0.467474, -0.467474",\ + "-0.541835, -0.541835, -0.541835, -0.541835, -0.541835",\ + "-0.636302, -0.636302, -0.636302, -0.636302, -0.636302",\ + "-1.083807, -1.083807, -1.083807, -1.083807, -1.083807"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.035639, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.194280, -0.194280, -0.194280, -0.194280, -0.194280",\ + "-0.207626, -0.207626, -0.207626, -0.207626, -0.207626",\ + "-0.289038, -0.289038, -0.289038, -0.289038, -0.289038",\ + "-0.398036, -0.398036, -0.398036, -0.398036, -0.398036",\ + "-0.918416, -0.918416, -0.918416, -0.918416, -0.918416"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[8]_cghr*/ + + timing () { + related_pin : "padmux2ast_i[0]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + values ( "0.088658, 0.118400, 0.189731, 0.445655, 1.359203",\ + "0.176289, 0.206081, 0.277284, 0.533409, 1.444562",\ + "0.273999, 0.305373, 0.377262, 0.633109, 1.547694",\ + "0.451720, 0.486942, 0.560777, 0.816366, 1.732299",\ + "0.754684, 0.801348, 0.884176, 1.139736, 2.048527"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + values ( "0.044533, 0.091199, 0.223344, 0.717968, 2.481454",\ + "0.045427, 0.091448, 0.223344, 0.719590, 2.481454",\ + "0.052404, 0.096040, 0.223344, 0.719590, 2.481454",\ + "0.069791, 0.108505, 0.227261, 0.719590, 2.481454",\ + "0.113693, 0.145215, 0.245785, 0.719590, 2.481454"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + values ( "0.127074, 0.151791, 0.203016, 0.369861, 0.957397",\ + "0.206135, 0.230814, 0.281980, 0.448797, 1.035129",\ + "0.309463, 0.335921, 0.388109, 0.554820, 1.143022",\ + "0.486985, 0.519573, 0.577173, 0.745365, 1.332651",\ + "0.774720, 0.823340, 0.896308, 1.069995, 1.655274"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + values ( "0.044476, 0.073631, 0.149535, 0.448052, 1.525218",\ + "0.044476, 0.073631, 0.149535, 0.448052, 1.525218",\ + "0.053117, 0.079360, 0.152226, 0.448052, 1.525218",\ + "0.080664, 0.102519, 0.166108, 0.450694, 1.525218",\ + "0.138236, 0.160233, 0.212368, 0.461268, 1.526869"); + } + + } /* end of arc padmux2ast_i[0]_obs_ctrl_o[8]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[0]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + values ( "0.084296, 0.113120, 0.184192, 0.440347, 1.352120",\ + "0.171472, 0.200589, 0.271545, 0.528022, 1.439207",\ + "0.267978, 0.297935, 0.369614, 0.625313, 1.536303",\ + "0.442024, 0.475873, 0.548072, 0.804727, 1.718362",\ + "0.738029, 0.782075, 0.862420, 1.115871, 2.025527"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + values ( "0.041900, 0.089823, 0.221979, 0.709338, 2.440521",\ + "0.043039, 0.090167, 0.221979, 0.709338, 2.440521",\ + "0.049089, 0.094012, 0.222641, 0.712232, 2.449750",\ + "0.065208, 0.105222, 0.226678, 0.712232, 2.460771",\ + "0.105185, 0.140977, 0.242589, 0.716067, 2.462313"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + values ( "0.092809, 0.114931, 0.163305, 0.328814, 0.916983",\ + "0.177889, 0.200026, 0.248421, 0.413754, 1.001155",\ + "0.277335, 0.302085, 0.352052, 0.517221, 1.105053",\ + "0.446489, 0.478335, 0.533931, 0.699176, 1.285565",\ + "0.721488, 0.769874, 0.842559, 1.014698, 1.597625"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001401, 0.004640, 0.013222, 0.044537, 0.156168"); + values ( "0.036394, 0.065440, 0.142870, 0.442805, 1.519686",\ + "0.037274, 0.065647, 0.143061, 0.444080, 1.520298",\ + "0.048413, 0.073856, 0.146810, 0.444683, 1.520298",\ + "0.075564, 0.097153, 0.160320, 0.447782, 1.520312",\ + "0.132225, 0.154160, 0.206470, 0.457474, 1.523023"); + } + + } /* end of arc padmux2ast_i[0]_obs_ctrl_o[8]_una_min*/ + +} /* end of pin obs_ctrl_o[8] */ + +pin("obs_ctrl_o[7]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.094370 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001120 ; + + /* Other user defined attributes. */ + original_pin : obs_ctrl_o[7]; + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[0]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.560132, 0.740335, 0.927825, 1.229818, 1.813330",\ + "0.598058, 0.778261, 0.965751, 1.267744, 1.851256",\ + "0.679713, 0.859917, 1.047406, 1.349399, 1.932911",\ + "0.950162, 1.130366, 1.317855, 1.619848, 2.203360",\ + "1.836798, 2.017001, 2.204491, 2.506483, 3.089995",\ + "0.645071, 0.825618, 1.013834, 1.315830, 1.899708",\ + "0.682997, 0.863544, 1.051760, 1.353756, 1.937634",\ + "0.764652, 0.945200, 1.133415, 1.435411, 2.019289",\ + "1.035101, 1.215649, 1.403864, 1.705860, 2.289738",\ + "1.921736, 2.102284, 2.290499, 2.592495, 3.176373",\ + "0.720983, 0.901062, 1.088643, 1.390427, 1.973880",\ + "0.758909, 0.938988, 1.126569, 1.428353, 2.011806",\ + "0.840564, 1.020643, 1.208224, 1.510008, 2.093462",\ + "1.111013, 1.291092, 1.478673, 1.780457, 2.363911",\ + "1.997648, 2.177727, 2.365308, 2.667092, 3.250545",\ + "0.775352, 0.955573, 1.143294, 1.444967, 2.028198",\ + "0.813278, 0.993499, 1.181220, 1.482893, 2.066123",\ + "0.894933, 1.075155, 1.262875, 1.564548, 2.147779",\ + "1.165382, 1.345604, 1.533324, 1.834997, 2.418228",\ + "2.052018, 2.232239, 2.419959, 2.721632, 3.304862",\ + "1.056947, 1.240841, 1.427244, 1.728693, 2.311475",\ + "1.094873, 1.278767, 1.465170, 1.766619, 2.349401",\ + "1.176528, 1.360423, 1.546826, 1.848274, 2.431056",\ + "1.446977, 1.630872, 1.817275, 2.118723, 2.701505",\ + "2.333612, 2.517507, 2.703910, 3.005358, 3.588140"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.060311, 0.060311, 0.060311, 0.060311, 0.060311",\ + "0.120043, 0.120043, 0.120043, 0.120043, 0.120043",\ + "0.268820, 0.268820, 0.268820, 0.268820, 0.268820",\ + "0.790040, 0.790040, 0.790040, 0.790040, 0.790040",\ + "2.468303, 2.468303, 2.468303, 2.468303, 2.468303",\ + "0.060311, 0.060311, 0.060311, 0.060311, 0.060311",\ + "0.120043, 0.120043, 0.120043, 0.120043, 0.120043",\ + "0.268820, 0.268820, 0.268820, 0.268820, 0.268820",\ + "0.790040, 0.790040, 0.790040, 0.790040, 0.790040",\ + "2.468303, 2.468303, 2.468303, 2.468303, 2.468303",\ + "0.060311, 0.060311, 0.060311, 0.060311, 0.060311",\ + "0.120043, 0.120043, 0.120043, 0.120043, 0.120043",\ + "0.268820, 0.268820, 0.268820, 0.268820, 0.268820",\ + "0.790040, 0.790040, 0.790040, 0.790040, 0.790040",\ + "2.468303, 2.468303, 2.468303, 2.468303, 2.468303",\ + "0.060311, 0.060311, 0.060311, 0.060311, 0.060311",\ + "0.120043, 0.120043, 0.120043, 0.120043, 0.120043",\ + "0.268820, 0.268820, 0.268820, 0.268820, 0.268820",\ + "0.790040, 0.790040, 0.790040, 0.790040, 0.790040",\ + "2.468303, 2.468303, 2.468303, 2.468303, 2.468303",\ + "0.060311, 0.060311, 0.060311, 0.060311, 0.060311",\ + "0.120043, 0.120043, 0.120043, 0.120043, 0.120043",\ + "0.268820, 0.268820, 0.268820, 0.268820, 0.268820",\ + "0.790040, 0.790040, 0.790040, 0.790040, 0.790040",\ + "2.468303, 2.468303, 2.468303, 2.468303, 2.468303"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.442149, 0.709934, 0.971514, 1.411211, 2.290606",\ + "0.473003, 0.740789, 1.002369, 1.442066, 2.321460",\ + "0.534512, 0.802297, 1.063877, 1.503574, 2.382968",\ + "0.730402, 0.998188, 1.259768, 1.699465, 2.578859",\ + "1.368610, 1.636396, 1.897976, 2.337672, 3.217067",\ + "0.530853, 0.798009, 1.060155, 1.499440, 2.378011",\ + "0.561708, 0.828864, 1.091010, 1.530295, 2.408865",\ + "0.623216, 0.890372, 1.152518, 1.591803, 2.470374",\ + "0.819106, 1.086263, 1.348409, 1.787694, 2.666264",\ + "1.457314, 1.724471, 1.986617, 2.425902, 3.304472",\ + "0.623795, 0.891154, 1.151881, 1.591604, 2.471052",\ + "0.654650, 0.922009, 1.182735, 1.622459, 2.501907",\ + "0.716158, 0.983517, 1.244244, 1.683967, 2.563416",\ + "0.912048, 1.179408, 1.440134, 1.879858, 2.759306",\ + "1.550256, 1.817616, 2.078342, 2.518066, 3.397514",\ + "0.689639, 0.959719, 1.218900, 1.658455, 2.537564",\ + "0.720493, 0.990574, 1.249755, 1.689310, 2.568418",\ + "0.782001, 1.052082, 1.311263, 1.750818, 2.629927",\ + "0.977892, 1.247972, 1.507154, 1.946708, 2.825817",\ + "1.616100, 1.886180, 2.145362, 2.584916, 3.464025",\ + "1.036160, 1.340554, 1.589563, 2.027608, 2.903699",\ + "1.067015, 1.371409, 1.620418, 2.058463, 2.934554",\ + "1.128523, 1.432917, 1.681926, 2.119972, 2.996062",\ + "1.324414, 1.628808, 1.877817, 2.315862, 3.191953",\ + "1.962622, 2.267016, 2.516025, 2.954070, 3.830161"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.050922, 0.050922, 0.050922, 0.050922, 0.050922",\ + "0.092496, 0.092496, 0.092496, 0.092496, 0.092497",\ + "0.193181, 0.193181, 0.193181, 0.193181, 0.193181",\ + "0.549207, 0.549207, 0.549207, 0.549207, 0.549207",\ + "1.718736, 1.718736, 1.718736, 1.718736, 1.718736",\ + "0.050922, 0.050922, 0.050922, 0.050922, 0.050922",\ + "0.092496, 0.092496, 0.092496, 0.092496, 0.092497",\ + "0.193181, 0.193181, 0.193181, 0.193181, 0.193181",\ + "0.549207, 0.549207, 0.549207, 0.549207, 0.549207",\ + "1.718736, 1.718736, 1.718736, 1.718736, 1.718736",\ + "0.050922, 0.050922, 0.050922, 0.050922, 0.050922",\ + "0.092496, 0.092496, 0.092496, 0.092496, 0.092497",\ + "0.193181, 0.193181, 0.193181, 0.193181, 0.193181",\ + "0.549207, 0.549207, 0.549207, 0.549207, 0.549207",\ + "1.718736, 1.718736, 1.718736, 1.718736, 1.718736",\ + "0.050922, 0.050922, 0.050922, 0.050922, 0.050922",\ + "0.092496, 0.092496, 0.092496, 0.092496, 0.092497",\ + "0.193181, 0.193181, 0.193181, 0.193181, 0.193181",\ + "0.549207, 0.549207, 0.549207, 0.549207, 0.549207",\ + "1.718736, 1.718736, 1.718736, 1.718736, 1.718736",\ + "0.050922, 0.050922, 0.050922, 0.050922, 0.050922",\ + "0.092496, 0.092496, 0.092496, 0.092496, 0.092497",\ + "0.193181, 0.193181, 0.193181, 0.193181, 0.193181",\ + "0.549207, 0.549207, 0.549207, 0.549207, 0.549207",\ + "1.718736, 1.718736, 1.718736, 1.718736, 1.718736"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[7]_redg_2746*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[1]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.468238, 0.731811, 1.008084, 1.476814, 2.414274",\ + "0.506163, 0.769737, 1.046010, 1.514740, 2.452199",\ + "0.587819, 0.851392, 1.127665, 1.596395, 2.533855",\ + "0.858268, 1.121841, 1.398114, 1.866844, 2.804303",\ + "1.744903, 2.008476, 2.284747, 2.753474, 3.690928",\ + "0.556432, 0.819352, 1.095652, 1.563529, 2.500207",\ + "0.594358, 0.857278, 1.133578, 1.601455, 2.538133",\ + "0.676013, 0.938933, 1.215233, 1.683110, 2.619789",\ + "0.946462, 1.209382, 1.485682, 1.953559, 2.890237",\ + "1.833097, 2.096017, 2.372314, 2.840189, 3.776862",\ + "0.644748, 0.908332, 1.183617, 1.651152, 2.587162",\ + "0.682674, 0.946258, 1.221542, 1.689077, 2.625088",\ + "0.764329, 1.027914, 1.303198, 1.770733, 2.706744",\ + "1.034778, 1.298362, 1.573647, 2.041182, 2.977192",\ + "1.921414, 2.184997, 2.460279, 2.927812, 3.863817",\ + "0.707244, 0.973967, 1.247756, 1.715065, 2.650671",\ + "0.745170, 1.011893, 1.285682, 1.752991, 2.688597",\ + "0.826825, 1.093549, 1.367337, 1.834647, 2.770253",\ + "1.097274, 1.363997, 1.637786, 2.105095, 3.040701",\ + "1.983909, 2.250632, 2.524419, 2.991725, 3.927326",\ + "1.036370, 1.338298, 1.599624, 2.064415, 2.996128",\ + "1.074296, 1.376224, 1.637549, 2.102341, 3.034053",\ + "1.155951, 1.457879, 1.719205, 2.183996, 3.115709",\ + "1.426400, 1.728328, 1.989653, 2.454445, 3.386157",\ + "2.313035, 2.614962, 2.876286, 3.341075, 4.272782"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.060311, 0.060311, 0.060311, 0.060311, 0.060311",\ + "0.120043, 0.120043, 0.120043, 0.120043, 0.120043",\ + "0.268820, 0.268820, 0.268820, 0.268820, 0.268819",\ + "0.790040, 0.790040, 0.790040, 0.790039, 0.790038",\ + "2.468303, 2.468303, 2.468303, 2.468303, 2.468304",\ + "0.060311, 0.060311, 0.060311, 0.060311, 0.060311",\ + "0.120043, 0.120043, 0.120043, 0.120043, 0.120043",\ + "0.268820, 0.268820, 0.268820, 0.268820, 0.268819",\ + "0.790040, 0.790040, 0.790040, 0.790039, 0.790038",\ + "2.468303, 2.468303, 2.468303, 2.468303, 2.468304",\ + "0.060311, 0.060311, 0.060311, 0.060311, 0.060311",\ + "0.120043, 0.120043, 0.120043, 0.120043, 0.120043",\ + "0.268820, 0.268820, 0.268820, 0.268820, 0.268819",\ + "0.790040, 0.790040, 0.790040, 0.790039, 0.790038",\ + "2.468303, 2.468303, 2.468303, 2.468303, 2.468304",\ + "0.060311, 0.060311, 0.060311, 0.060311, 0.060311",\ + "0.120043, 0.120043, 0.120043, 0.120043, 0.120043",\ + "0.268820, 0.268820, 0.268820, 0.268820, 0.268819",\ + "0.790040, 0.790040, 0.790040, 0.790039, 0.790038",\ + "2.468303, 2.468303, 2.468303, 2.468303, 2.468304",\ + "0.060311, 0.060311, 0.060311, 0.060311, 0.060311",\ + "0.120043, 0.120043, 0.120043, 0.120043, 0.120043",\ + "0.268820, 0.268820, 0.268820, 0.268820, 0.268819",\ + "0.790040, 0.790040, 0.790040, 0.790039, 0.790038",\ + "2.468303, 2.468303, 2.468303, 2.468303, 2.468304"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.425102, 0.607534, 0.803925, 1.112984, 1.707807",\ + "0.455957, 0.638388, 0.834779, 1.143839, 1.738662",\ + "0.517465, 0.699897, 0.896288, 1.205346, 1.800168",\ + "0.713355, 0.895787, 1.092178, 1.401236, 1.996057",\ + "1.351563, 1.533995, 1.730386, 2.039446, 2.634272",\ + "0.512517, 0.694919, 0.891418, 1.200289, 1.795161",\ + "0.543371, 0.725774, 0.922273, 1.231144, 1.826015",\ + "0.604879, 0.787282, 0.983781, 1.292651, 1.887522",\ + "0.800770, 0.983173, 1.179671, 1.488541, 2.083410",\ + "1.438978, 1.621381, 1.817879, 2.126751, 2.721625",\ + "0.593393, 0.775256, 0.971445, 1.280318, 1.875192",\ + "0.624248, 0.806111, 1.002299, 1.311172, 1.906047",\ + "0.685756, 0.867619, 1.063808, 1.372680, 1.967553",\ + "0.881646, 1.063509, 1.259698, 1.568570, 2.163442",\ + "1.519854, 1.701717, 1.897906, 2.206779, 2.801657",\ + "0.651039, 0.832804, 1.028988, 1.337563, 1.931840",\ + "0.681894, 0.863659, 1.059843, 1.368417, 1.962695",\ + "0.743402, 0.925167, 1.121351, 1.429925, 2.024201",\ + "0.939293, 1.121058, 1.317242, 1.625815, 2.220089",\ + "1.577501, 1.759266, 1.955450, 2.264025, 2.858304",\ + "0.953247, 1.138029, 1.332622, 1.640577, 2.233686",\ + "0.984102, 1.168883, 1.363477, 1.671432, 2.264541",\ + "1.045610, 1.230392, 1.424985, 1.732940, 2.326047",\ + "1.241500, 1.426282, 1.620876, 1.928830, 2.521936",\ + "1.879708, 2.064490, 2.259084, 2.567039, 3.160151"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.050922, 0.050922, 0.050922, 0.050923, 0.050926",\ + "0.092496, 0.092496, 0.092497, 0.092499, 0.092504",\ + "0.193181, 0.193181, 0.193181, 0.193181, 0.193182",\ + "0.549207, 0.549207, 0.549207, 0.549208, 0.549211",\ + "1.718736, 1.718736, 1.718736, 1.718741, 1.718751",\ + "0.050922, 0.050922, 0.050922, 0.050923, 0.050926",\ + "0.092496, 0.092496, 0.092497, 0.092499, 0.092504",\ + "0.193181, 0.193181, 0.193181, 0.193181, 0.193182",\ + "0.549207, 0.549207, 0.549207, 0.549208, 0.549211",\ + "1.718736, 1.718736, 1.718736, 1.718741, 1.718751",\ + "0.050922, 0.050922, 0.050922, 0.050923, 0.050926",\ + "0.092496, 0.092496, 0.092497, 0.092499, 0.092504",\ + "0.193181, 0.193181, 0.193181, 0.193181, 0.193182",\ + "0.549207, 0.549207, 0.549207, 0.549208, 0.549211",\ + "1.718736, 1.718736, 1.718736, 1.718741, 1.718751",\ + "0.050922, 0.050922, 0.050922, 0.050923, 0.050926",\ + "0.092496, 0.092496, 0.092497, 0.092499, 0.092504",\ + "0.193181, 0.193181, 0.193181, 0.193181, 0.193182",\ + "0.549207, 0.549207, 0.549207, 0.549208, 0.549211",\ + "1.718736, 1.718736, 1.718736, 1.718741, 1.718751",\ + "0.050922, 0.050922, 0.050922, 0.050923, 0.050926",\ + "0.092496, 0.092496, 0.092497, 0.092499, 0.092504",\ + "0.193181, 0.193181, 0.193181, 0.193181, 0.193182",\ + "0.549207, 0.549207, 0.549207, 0.549208, 0.549211",\ + "1.718736, 1.718736, 1.718736, 1.718741, 1.718751"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[7]_redg_2673*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[2]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.464262, 0.723892, 0.995764, 1.452644, 2.366404",\ + "0.502188, 0.761817, 1.033690, 1.490570, 2.404330",\ + "0.583843, 0.843473, 1.115345, 1.572225, 2.485985",\ + "0.854292, 1.113922, 1.385794, 1.842674, 2.756433",\ + "1.740928, 2.000556, 2.272425, 2.729303, 3.643060",\ + "0.552367, 0.811425, 1.083295, 1.539359, 2.452338",\ + "0.590293, 0.849351, 1.121220, 1.577285, 2.490263",\ + "0.671948, 0.931006, 1.202876, 1.658941, 2.571919",\ + "0.942397, 1.201455, 1.473325, 1.929389, 2.842367",\ + "1.829032, 2.088089, 2.359956, 2.816019, 3.728994",\ + "0.640397, 0.900391, 1.171259, 1.626982, 2.539293",\ + "0.678323, 0.938317, 1.209185, 1.664908, 2.577219",\ + "0.759978, 1.019972, 1.290840, 1.746563, 2.658874",\ + "1.030427, 1.290421, 1.561289, 2.017012, 2.929322",\ + "1.917063, 2.177055, 2.447920, 2.903641, 3.815949",\ + "0.702618, 0.966004, 1.235397, 1.690896, 2.602802",\ + "0.740544, 1.003930, 1.273322, 1.728822, 2.640728",\ + "0.822200, 1.085586, 1.354978, 1.810477, 2.722383",\ + "1.092649, 1.356035, 1.625427, 2.080925, 2.992831",\ + "1.979284, 2.242668, 2.512058, 2.967555, 3.879458",\ + "1.030006, 1.330079, 1.587144, 2.040197, 2.948258",\ + "1.067932, 1.368005, 1.625070, 2.078122, 2.986184",\ + "1.149587, 1.449661, 1.706725, 2.159778, 3.067839",\ + "1.420036, 1.720109, 1.977174, 2.430226, 3.338287",\ + "2.306671, 2.606743, 2.863805, 3.316856, 4.224914"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.060311, 0.060311, 0.060311, 0.060311, 0.060311",\ + "0.120043, 0.120043, 0.120043, 0.120043, 0.120043",\ + "0.268820, 0.268820, 0.268820, 0.268819, 0.268818",\ + "0.790040, 0.790040, 0.790039, 0.790039, 0.790038",\ + "2.468303, 2.468303, 2.468303, 2.468303, 2.468304",\ + "0.060311, 0.060311, 0.060311, 0.060311, 0.060311",\ + "0.120043, 0.120043, 0.120043, 0.120043, 0.120043",\ + "0.268820, 0.268820, 0.268820, 0.268819, 0.268818",\ + "0.790040, 0.790040, 0.790039, 0.790039, 0.790038",\ + "2.468303, 2.468303, 2.468303, 2.468303, 2.468304",\ + "0.060311, 0.060311, 0.060311, 0.060311, 0.060311",\ + "0.120043, 0.120043, 0.120043, 0.120043, 0.120043",\ + "0.268820, 0.268820, 0.268820, 0.268819, 0.268818",\ + "0.790040, 0.790040, 0.790039, 0.790039, 0.790038",\ + "2.468303, 2.468303, 2.468303, 2.468303, 2.468304",\ + "0.060311, 0.060311, 0.060311, 0.060311, 0.060311",\ + "0.120043, 0.120043, 0.120043, 0.120043, 0.120043",\ + "0.268820, 0.268820, 0.268820, 0.268819, 0.268818",\ + "0.790040, 0.790040, 0.790039, 0.790039, 0.790038",\ + "2.468303, 2.468303, 2.468303, 2.468303, 2.468304",\ + "0.060311, 0.060311, 0.060311, 0.060311, 0.060311",\ + "0.120043, 0.120043, 0.120043, 0.120043, 0.120043",\ + "0.268820, 0.268820, 0.268820, 0.268819, 0.268818",\ + "0.790040, 0.790040, 0.790039, 0.790039, 0.790038",\ + "2.468303, 2.468303, 2.468303, 2.468303, 2.468304"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.423440, 0.605981, 0.802235, 1.111459, 1.706773",\ + "0.454295, 0.636836, 0.833090, 1.142314, 1.737628",\ + "0.515803, 0.698344, 0.894598, 1.203821, 1.799134",\ + "0.711694, 0.894235, 1.090489, 1.399711, 1.995022",\ + "1.349902, 1.532443, 1.728697, 2.037921, 2.633238",\ + "0.510860, 0.693367, 0.889728, 1.198764, 1.794126",\ + "0.541715, 0.724221, 0.920583, 1.229619, 1.824981",\ + "0.603223, 0.785730, 0.982091, 1.291126, 1.886487",\ + "0.799114, 0.981620, 1.177981, 1.487016, 2.082375",\ + "1.437322, 1.619828, 1.816189, 2.125226, 2.720591",\ + "0.591728, 0.773704, 0.969755, 1.278793, 1.874158",\ + "0.622583, 0.804558, 1.000610, 1.309647, 1.905013",\ + "0.684091, 0.866066, 1.062118, 1.371155, 1.966519",\ + "0.879981, 1.061957, 1.258008, 1.567045, 2.162407",\ + "1.518189, 1.700165, 1.896216, 2.205255, 2.800623",\ + "0.649367, 0.831252, 1.027299, 1.336038, 1.930805",\ + "0.680222, 0.862107, 1.058154, 1.366893, 1.961660",\ + "0.741730, 0.923615, 1.119662, 1.428400, 2.023166",\ + "0.937620, 1.119505, 1.315552, 1.624290, 2.219054",\ + "1.575828, 1.757713, 1.953760, 2.262500, 2.857270",\ + "0.951462, 1.136478, 1.330933, 1.639053, 2.232652",\ + "0.982317, 1.167333, 1.361788, 1.669907, 2.263507",\ + "1.043825, 1.228841, 1.423296, 1.731415, 2.325013",\ + "1.239715, 1.424732, 1.619186, 1.927305, 2.520901",\ + "1.877923, 2.062940, 2.257394, 2.565515, 3.159117"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.050922, 0.050922, 0.050922, 0.050923, 0.050926",\ + "0.092496, 0.092496, 0.092497, 0.092499, 0.092505",\ + "0.193181, 0.193181, 0.193181, 0.193181, 0.193182",\ + "0.549207, 0.549207, 0.549207, 0.549209, 0.549212",\ + "1.718736, 1.718736, 1.718736, 1.718741, 1.718753",\ + "0.050922, 0.050922, 0.050922, 0.050923, 0.050926",\ + "0.092496, 0.092496, 0.092497, 0.092499, 0.092505",\ + "0.193181, 0.193181, 0.193181, 0.193181, 0.193182",\ + "0.549207, 0.549207, 0.549207, 0.549209, 0.549212",\ + "1.718736, 1.718736, 1.718736, 1.718741, 1.718753",\ + "0.050922, 0.050922, 0.050922, 0.050923, 0.050926",\ + "0.092496, 0.092496, 0.092497, 0.092499, 0.092505",\ + "0.193181, 0.193181, 0.193181, 0.193181, 0.193182",\ + "0.549207, 0.549207, 0.549207, 0.549209, 0.549212",\ + "1.718736, 1.718736, 1.718736, 1.718741, 1.718753",\ + "0.050922, 0.050922, 0.050922, 0.050923, 0.050926",\ + "0.092496, 0.092496, 0.092497, 0.092499, 0.092505",\ + "0.193181, 0.193181, 0.193181, 0.193181, 0.193182",\ + "0.549207, 0.549207, 0.549207, 0.549209, 0.549212",\ + "1.718736, 1.718736, 1.718736, 1.718741, 1.718753",\ + "0.050922, 0.050922, 0.050922, 0.050923, 0.050926",\ + "0.092496, 0.092496, 0.092497, 0.092499, 0.092505",\ + "0.193181, 0.193181, 0.193181, 0.193181, 0.193182",\ + "0.549207, 0.549207, 0.549207, 0.549209, 0.549212",\ + "1.718736, 1.718736, 1.718736, 1.718741, 1.718753"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[7]_redg_2611*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[3]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.556546, 0.734973, 0.915233, 1.201439, 1.752556",\ + "0.594472, 0.772898, 0.953159, 1.239365, 1.790482",\ + "0.676127, 0.854554, 1.034814, 1.321021, 1.872138",\ + "0.946576, 1.125003, 1.305263, 1.591470, 2.142586",\ + "1.833212, 2.011638, 2.191898, 2.478105, 3.029221",\ + "0.641484, 0.820245, 1.001148, 1.287360, 1.838935",\ + "0.679410, 0.858171, 1.039074, 1.325286, 1.876861",\ + "0.761066, 0.939826, 1.120729, 1.406941, 1.958516",\ + "1.031515, 1.210275, 1.391178, 1.677390, 2.228965",\ + "1.918150, 2.096910, 2.277814, 2.564025, 3.115599",\ + "0.717390, 0.895688, 1.075957, 1.361957, 1.913107",\ + "0.755316, 0.933614, 1.113883, 1.399882, 1.951033",\ + "0.836972, 1.015270, 1.195538, 1.481538, 2.032688",\ + "1.107421, 1.285719, 1.465987, 1.751987, 2.303137",\ + "1.994056, 2.172354, 2.352623, 2.638622, 3.189771",\ + "0.771742, 0.950200, 1.130608, 1.416496, 1.967424",\ + "0.809668, 0.988126, 1.168534, 1.454422, 2.005350",\ + "0.891324, 1.069781, 1.250189, 1.536077, 2.087006",\ + "1.161773, 1.340230, 1.520638, 1.806526, 2.357455",\ + "2.048408, 2.226866, 2.407274, 2.693161, 3.244089",\ + "1.053164, 1.235427, 1.414559, 1.700223, 2.250702",\ + "1.091090, 1.273353, 1.452485, 1.738148, 2.288628",\ + "1.172746, 1.355009, 1.534140, 1.819804, 2.370283",\ + "1.443195, 1.625458, 1.804589, 2.090253, 2.640732",\ + "2.329830, 2.512093, 2.691224, 2.976888, 3.527366"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.060311, 0.060311, 0.060311, 0.060311, 0.060311",\ + "0.120043, 0.120043, 0.120043, 0.120043, 0.120043",\ + "0.268820, 0.268820, 0.268820, 0.268820, 0.268820",\ + "0.790040, 0.790040, 0.790040, 0.790040, 0.790040",\ + "2.468303, 2.468303, 2.468303, 2.468303, 2.468303",\ + "0.060311, 0.060311, 0.060311, 0.060311, 0.060311",\ + "0.120043, 0.120043, 0.120043, 0.120043, 0.120043",\ + "0.268820, 0.268820, 0.268820, 0.268820, 0.268820",\ + "0.790040, 0.790040, 0.790040, 0.790040, 0.790040",\ + "2.468303, 2.468303, 2.468303, 2.468303, 2.468303",\ + "0.060311, 0.060311, 0.060311, 0.060311, 0.060311",\ + "0.120043, 0.120043, 0.120043, 0.120043, 0.120043",\ + "0.268820, 0.268820, 0.268820, 0.268820, 0.268820",\ + "0.790040, 0.790040, 0.790040, 0.790040, 0.790040",\ + "2.468303, 2.468303, 2.468303, 2.468303, 2.468303",\ + "0.060311, 0.060311, 0.060311, 0.060311, 0.060311",\ + "0.120043, 0.120043, 0.120043, 0.120043, 0.120043",\ + "0.268820, 0.268820, 0.268820, 0.268820, 0.268820",\ + "0.790040, 0.790040, 0.790040, 0.790040, 0.790040",\ + "2.468303, 2.468303, 2.468303, 2.468303, 2.468303",\ + "0.060311, 0.060311, 0.060311, 0.060311, 0.060311",\ + "0.120043, 0.120043, 0.120043, 0.120043, 0.120043",\ + "0.268820, 0.268820, 0.268820, 0.268820, 0.268820",\ + "0.790040, 0.790040, 0.790040, 0.790040, 0.790040",\ + "2.468303, 2.468303, 2.468303, 2.468303, 2.468303"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.440713, 0.705883, 0.965084, 1.401266, 2.273631",\ + "0.471568, 0.736737, 0.995939, 1.432121, 2.304486",\ + "0.533076, 0.798245, 1.057447, 1.493629, 2.365994",\ + "0.728966, 0.994136, 1.253338, 1.689520, 2.561884",\ + "1.367174, 1.632344, 1.891546, 2.327728, 3.200092",\ + "0.529378, 0.793957, 1.053725, 1.489495, 2.361036",\ + "0.560233, 0.824812, 1.084580, 1.520350, 2.391891",\ + "0.621741, 0.886320, 1.146088, 1.581858, 2.453399",\ + "0.817632, 1.082211, 1.341978, 1.777749, 2.649290",\ + "1.455840, 1.720419, 1.980186, 2.415956, 3.287497",\ + "0.622185, 0.887080, 1.145450, 1.581659, 2.454078",\ + "0.653040, 0.917935, 1.176305, 1.612514, 2.484932",\ + "0.714548, 0.979443, 1.237813, 1.674022, 2.546441",\ + "0.910438, 1.175334, 1.433704, 1.869913, 2.742332",\ + "1.548646, 1.813542, 2.071912, 2.508121, 3.380539",\ + "0.687908, 0.955615, 1.212470, 1.648510, 2.520589",\ + "0.718762, 0.986469, 1.243325, 1.679364, 2.551444",\ + "0.780270, 1.047977, 1.304833, 1.740873, 2.612952",\ + "0.976161, 1.243868, 1.500724, 1.936763, 2.808843",\ + "1.614369, 1.882076, 2.138932, 2.574971, 3.447050",\ + "1.033697, 1.336113, 1.583101, 2.017641, 2.886722",\ + "1.064552, 1.366968, 1.613955, 2.048496, 2.917577",\ + "1.126060, 1.428476, 1.675463, 2.110004, 2.979085",\ + "1.321950, 1.624366, 1.871354, 2.305894, 3.174975",\ + "1.960158, 2.262574, 2.509562, 2.944102, 3.813183"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.050922, 0.050922, 0.050922, 0.050922, 0.050922",\ + "0.092496, 0.092496, 0.092496, 0.092496, 0.092497",\ + "0.193181, 0.193181, 0.193181, 0.193181, 0.193181",\ + "0.549207, 0.549207, 0.549207, 0.549207, 0.549207",\ + "1.718736, 1.718736, 1.718736, 1.718736, 1.718736",\ + "0.050922, 0.050922, 0.050922, 0.050922, 0.050922",\ + "0.092496, 0.092496, 0.092496, 0.092496, 0.092497",\ + "0.193181, 0.193181, 0.193181, 0.193181, 0.193181",\ + "0.549207, 0.549207, 0.549207, 0.549207, 0.549207",\ + "1.718736, 1.718736, 1.718736, 1.718736, 1.718736",\ + "0.050922, 0.050922, 0.050922, 0.050922, 0.050922",\ + "0.092496, 0.092496, 0.092496, 0.092496, 0.092497",\ + "0.193181, 0.193181, 0.193181, 0.193181, 0.193181",\ + "0.549207, 0.549207, 0.549207, 0.549207, 0.549207",\ + "1.718736, 1.718736, 1.718736, 1.718736, 1.718736",\ + "0.050922, 0.050922, 0.050922, 0.050922, 0.050922",\ + "0.092496, 0.092496, 0.092496, 0.092496, 0.092497",\ + "0.193181, 0.193181, 0.193181, 0.193181, 0.193181",\ + "0.549207, 0.549207, 0.549207, 0.549207, 0.549207",\ + "1.718736, 1.718736, 1.718736, 1.718736, 1.718736",\ + "0.050922, 0.050922, 0.050922, 0.050922, 0.050922",\ + "0.092496, 0.092496, 0.092496, 0.092496, 0.092497",\ + "0.193181, 0.193181, 0.193181, 0.193181, 0.193181",\ + "0.549207, 0.549207, 0.549207, 0.549207, 0.549207",\ + "1.718736, 1.718736, 1.718736, 1.718736, 1.718736"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[7]_redg_2557*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + values ( "380001.875000, 380001.906250, 380002.000000, 380002.250000, 380003.156250",\ + "380001.968750, 380002.000000, 380002.093750, 380002.343750, 380003.250000",\ + "380002.031250, 380002.062500, 380002.156250, 380002.406250, 380003.312500",\ + "380002.093750, 380002.125000, 380002.218750, 380002.468750, 380003.375000",\ + "380002.406250, 380002.437500, 380002.531250, 380002.781250, 380003.687500"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + values ( "0.060312, 0.120043, 0.268889, 0.790048, 2.471058",\ + "0.060312, 0.120043, 0.268889, 0.790048, 2.471058",\ + "0.060312, 0.120043, 0.268889, 0.790048, 2.471058",\ + "0.060311, 0.120043, 0.268889, 0.790048, 2.471058",\ + "0.060311, 0.120043, 0.268889, 0.790048, 2.468313"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + values ( "380003.906250, 380003.937500, 380004.000000, 380004.187500, 380004.843750",\ + "380004.000000, 380004.031250, 380004.093750, 380004.281250, 380004.937500",\ + "380004.093750, 380004.125000, 380004.187500, 380004.375000, 380005.031250",\ + "380004.156250, 380004.187500, 380004.250000, 380004.437500, 380005.093750",\ + "380004.500000, 380004.531250, 380004.593750, 380004.781250, 380005.437500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + values ( "0.050922, 0.092579, 0.193181, 0.549207, 1.721959",\ + "0.050922, 0.092579, 0.193181, 0.549207, 1.721959",\ + "0.050922, 0.092579, 0.193181, 0.549207, 1.721959",\ + "0.050922, 0.092579, 0.193181, 0.549207, 1.721959",\ + "0.050984, 0.092651, 0.193203, 0.549286, 1.721959"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[7]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[0]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.544292, 0.724406, 0.911984, 1.213964, 1.797060",\ + "0.582447, 0.762561, 0.950139, 1.252119, 1.835215",\ + "0.664874, 0.844988, 1.032566, 1.334546, 1.917642",\ + "0.936033, 1.116146, 1.303725, 1.605704, 2.188801",\ + "1.821919, 2.002032, 2.189611, 2.491591, 3.074687",\ + "0.629231, 0.809242, 0.997054, 1.299470, 1.883439",\ + "0.667386, 0.847397, 1.035209, 1.337625, 1.921593",\ + "0.749812, 0.929824, 1.117636, 1.420052, 2.004020",\ + "1.020971, 1.200982, 1.388795, 1.691211, 2.275179",\ + "1.906857, 2.086868, 2.274681, 2.577097, 3.161065",\ + "0.705143, 0.884685, 1.071863, 1.374067, 1.957611",\ + "0.743298, 0.922840, 1.110018, 1.412222, 1.995766",\ + "0.825724, 1.005267, 1.192445, 1.494649, 2.078193",\ + "1.096883, 1.276425, 1.463604, 1.765808, 2.349351",\ + "1.982769, 2.162312, 2.349490, 2.651694, 3.235237",\ + "0.759512, 0.939436, 1.126752, 1.428673, 2.011928",\ + "0.797667, 0.977591, 1.164907, 1.466828, 2.050083",\ + "0.880094, 1.060018, 1.247334, 1.549255, 2.132510",\ + "1.151252, 1.331177, 1.518492, 1.820413, 2.403668",\ + "2.037138, 2.217063, 2.404379, 2.706299, 3.289555",\ + "1.041107, 1.225001, 1.410928, 1.712399, 2.295206",\ + "1.079262, 1.263156, 1.449083, 1.750554, 2.333361",\ + "1.161688, 1.345583, 1.531509, 1.832981, 2.415788",\ + "1.432847, 1.616742, 1.802668, 2.104139, 2.686946",\ + "2.318733, 2.502628, 2.688554, 2.990026, 3.572832"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.050112, 0.050112, 0.050112, 0.050112, 0.050112",\ + "0.112175, 0.112175, 0.112175, 0.112175, 0.112175",\ + "0.264098, 0.264098, 0.264098, 0.264098, 0.264098",\ + "0.776079, 0.776079, 0.776079, 0.776079, 0.776079",\ + "2.446671, 2.446671, 2.446671, 2.446671, 2.446672",\ + "0.050112, 0.050112, 0.050112, 0.050112, 0.050112",\ + "0.112175, 0.112175, 0.112175, 0.112175, 0.112175",\ + "0.264098, 0.264098, 0.264098, 0.264098, 0.264098",\ + "0.776079, 0.776079, 0.776079, 0.776079, 0.776079",\ + "2.446671, 2.446671, 2.446671, 2.446671, 2.446672",\ + "0.050112, 0.050112, 0.050112, 0.050112, 0.050112",\ + "0.112175, 0.112175, 0.112175, 0.112175, 0.112175",\ + "0.264098, 0.264098, 0.264098, 0.264098, 0.264098",\ + "0.776079, 0.776079, 0.776079, 0.776079, 0.776079",\ + "2.446671, 2.446671, 2.446671, 2.446671, 2.446672",\ + "0.050112, 0.050112, 0.050112, 0.050112, 0.050112",\ + "0.112175, 0.112175, 0.112175, 0.112175, 0.112175",\ + "0.264098, 0.264098, 0.264098, 0.264098, 0.264098",\ + "0.776079, 0.776079, 0.776079, 0.776079, 0.776079",\ + "2.446671, 2.446671, 2.446671, 2.446671, 2.446672",\ + "0.050112, 0.050112, 0.050112, 0.050112, 0.050112",\ + "0.112175, 0.112175, 0.112175, 0.112175, 0.112175",\ + "0.264098, 0.264098, 0.264098, 0.264098, 0.264098",\ + "0.776079, 0.776079, 0.776079, 0.776079, 0.776079",\ + "2.446671, 2.446671, 2.446671, 2.446671, 2.446672"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.363069, 0.630679, 0.892080, 1.331857, 2.211017",\ + "0.391013, 0.658624, 0.920025, 1.359801, 2.238962",\ + "0.450465, 0.718075, 0.979476, 1.419253, 2.298413",\ + "0.646065, 0.913676, 1.175077, 1.614853, 2.494013",\ + "1.283402, 1.551012, 1.812413, 2.252190, 3.131351",\ + "0.451773, 0.718754, 0.980721, 1.420086, 2.298422",\ + "0.479717, 0.746699, 1.008666, 1.448030, 2.326367",\ + "0.539169, 0.806150, 1.068117, 1.507482, 2.385818",\ + "0.734769, 1.001751, 1.263718, 1.703082, 2.581419",\ + "1.372106, 1.639087, 1.901054, 2.340420, 3.218756",\ + "0.544715, 0.812075, 1.072766, 1.512332, 2.391464",\ + "0.572660, 0.840019, 1.100710, 1.540276, 2.419409",\ + "0.632111, 0.899470, 1.160161, 1.599728, 2.478860",\ + "0.827712, 1.095071, 1.355762, 1.795328, 2.674460",\ + "1.465048, 1.732408, 1.993099, 2.432665, 3.311798",\ + "0.610559, 0.880639, 1.139822, 1.579343, 2.458386",\ + "0.638503, 0.908583, 1.167766, 1.607288, 2.486331",\ + "0.697955, 0.968035, 1.227218, 1.666739, 2.545782",\ + "0.893555, 1.163635, 1.422818, 1.862339, 2.741382",\ + "1.530892, 1.800972, 2.060155, 2.499676, 3.378720",\ + "0.957080, 1.261474, 1.510493, 1.948569, 2.824721",\ + "0.985025, 1.289419, 1.538437, 1.976513, 2.852666",\ + "1.044476, 1.348870, 1.597888, 2.035964, 2.912117",\ + "1.240077, 1.544471, 1.793489, 2.231565, 3.107717",\ + "1.877413, 2.181808, 2.430826, 2.868902, 3.745055"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.040709, 0.040709, 0.040709, 0.040709, 0.040708",\ + "0.082941, 0.082941, 0.082941, 0.082941, 0.082941",\ + "0.186774, 0.186774, 0.186774, 0.186774, 0.186773",\ + "0.543828, 0.543828, 0.543828, 0.543829, 0.543829",\ + "1.713838, 1.713838, 1.713838, 1.713837, 1.713836",\ + "0.040709, 0.040709, 0.040709, 0.040709, 0.040708",\ + "0.082941, 0.082941, 0.082941, 0.082941, 0.082941",\ + "0.186774, 0.186774, 0.186774, 0.186774, 0.186773",\ + "0.543828, 0.543828, 0.543828, 0.543829, 0.543829",\ + "1.713838, 1.713838, 1.713838, 1.713837, 1.713836",\ + "0.040709, 0.040709, 0.040709, 0.040709, 0.040708",\ + "0.082941, 0.082941, 0.082941, 0.082941, 0.082941",\ + "0.186774, 0.186774, 0.186774, 0.186774, 0.186773",\ + "0.543828, 0.543828, 0.543828, 0.543829, 0.543829",\ + "1.713838, 1.713838, 1.713838, 1.713837, 1.713836",\ + "0.040709, 0.040709, 0.040709, 0.040709, 0.040708",\ + "0.082941, 0.082941, 0.082941, 0.082941, 0.082941",\ + "0.186774, 0.186774, 0.186774, 0.186774, 0.186773",\ + "0.543828, 0.543828, 0.543828, 0.543829, 0.543829",\ + "1.713838, 1.713838, 1.713838, 1.713837, 1.713836",\ + "0.040709, 0.040709, 0.040709, 0.040709, 0.040708",\ + "0.082941, 0.082941, 0.082941, 0.082941, 0.082941",\ + "0.186774, 0.186774, 0.186774, 0.186774, 0.186773",\ + "0.543828, 0.543828, 0.543828, 0.543829, 0.543829",\ + "1.713838, 1.713838, 1.713838, 1.713837, 1.713836"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[7]_redg_min_2500*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[1]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.452401, 0.715932, 0.992051, 1.460182, 2.395185",\ + "0.490556, 0.754087, 1.030206, 1.498337, 2.433340",\ + "0.572982, 0.836514, 1.112633, 1.580764, 2.515767",\ + "0.844141, 1.107672, 1.383791, 1.851923, 2.786925",\ + "1.730027, 1.993558, 2.269678, 2.737809, 3.672812",\ + "0.540595, 0.803472, 1.079618, 1.546898, 2.481119",\ + "0.578750, 0.841627, 1.117773, 1.585052, 2.519274",\ + "0.661177, 0.924054, 1.200200, 1.667479, 2.601700",\ + "0.932335, 1.195213, 1.471358, 1.938638, 2.872859",\ + "1.818222, 2.081099, 2.357244, 2.824524, 3.758746",\ + "0.628911, 0.892452, 1.167583, 1.634538, 2.568074",\ + "0.667066, 0.930607, 1.205738, 1.672693, 2.606229",\ + "0.749493, 1.013034, 1.288164, 1.755120, 2.688655",\ + "1.020651, 1.284192, 1.559323, 2.026278, 2.959814",\ + "1.906538, 2.170078, 2.445210, 2.912164, 3.845701",\ + "0.691407, 0.958086, 1.231722, 1.698627, 2.631583",\ + "0.729562, 0.996240, 1.269877, 1.736781, 2.669738",\ + "0.811989, 1.078667, 1.352304, 1.819208, 2.752164",\ + "1.083147, 1.349826, 1.623463, 2.090367, 3.023323",\ + "1.969034, 2.235712, 2.509349, 2.976254, 3.909210",\ + "1.020533, 1.322400, 1.583586, 2.048070, 2.977039",\ + "1.058688, 1.360555, 1.621741, 2.086226, 3.015194",\ + "1.141114, 1.442982, 1.704168, 2.168652, 3.097620",\ + "1.412273, 1.714141, 1.975327, 2.439811, 3.368779",\ + "2.298159, 2.600027, 2.861213, 3.325697, 4.254666"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.050112, 0.050112, 0.050112, 0.050111, 0.050111",\ + "0.112175, 0.112175, 0.112175, 0.112175, 0.112174",\ + "0.264098, 0.264098, 0.264098, 0.264098, 0.264098",\ + "0.776079, 0.776079, 0.776079, 0.776079, 0.776079",\ + "2.446670, 2.446672, 2.446677, 2.446682, 2.446693",\ + "0.050112, 0.050112, 0.050112, 0.050111, 0.050111",\ + "0.112175, 0.112175, 0.112175, 0.112175, 0.112174",\ + "0.264098, 0.264098, 0.264098, 0.264098, 0.264098",\ + "0.776079, 0.776079, 0.776079, 0.776079, 0.776079",\ + "2.446670, 2.446672, 2.446677, 2.446682, 2.446693",\ + "0.050112, 0.050112, 0.050112, 0.050111, 0.050111",\ + "0.112175, 0.112175, 0.112175, 0.112175, 0.112174",\ + "0.264098, 0.264098, 0.264098, 0.264098, 0.264098",\ + "0.776079, 0.776079, 0.776079, 0.776079, 0.776079",\ + "2.446670, 2.446672, 2.446677, 2.446682, 2.446693",\ + "0.050112, 0.050112, 0.050112, 0.050111, 0.050111",\ + "0.112175, 0.112175, 0.112175, 0.112175, 0.112174",\ + "0.264098, 0.264098, 0.264098, 0.264098, 0.264098",\ + "0.776079, 0.776079, 0.776079, 0.776079, 0.776079",\ + "2.446670, 2.446672, 2.446677, 2.446682, 2.446693",\ + "0.050112, 0.050112, 0.050112, 0.050111, 0.050111",\ + "0.112175, 0.112175, 0.112175, 0.112175, 0.112174",\ + "0.264098, 0.264098, 0.264098, 0.264098, 0.264098",\ + "0.776079, 0.776079, 0.776079, 0.776079, 0.776079",\ + "2.446670, 2.446673, 2.446677, 2.446682, 2.446693"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.346024, 0.528081, 0.724314, 1.033489, 1.627960",\ + "0.373968, 0.556026, 0.752258, 1.061434, 1.655906",\ + "0.433420, 0.615477, 0.811710, 1.120886, 1.715360",\ + "0.629020, 0.811078, 1.007310, 1.316483, 1.910951",\ + "1.266357, 1.448414, 1.644648, 1.953829, 2.548313",\ + "0.433439, 0.615400, 0.811595, 1.120794, 1.715314",\ + "0.461383, 0.643345, 0.839539, 1.148739, 1.743259",\ + "0.520834, 0.702796, 0.898991, 1.208191, 1.802713",\ + "0.716435, 0.898396, 1.094591, 1.403789, 1.998304",\ + "1.353772, 1.535733, 1.731929, 2.041134, 2.635666",\ + "0.514315, 0.695737, 0.891622, 1.200823, 1.795345",\ + "0.542259, 0.723681, 0.919566, 1.228768, 1.823291",\ + "0.601711, 0.783132, 0.979018, 1.288220, 1.882745",\ + "0.797311, 0.978733, 1.174618, 1.483817, 2.078336",\ + "1.434648, 1.616070, 1.811956, 2.121162, 2.715698",\ + "0.571961, 0.753573, 0.949357, 1.258293, 1.852441",\ + "0.599906, 0.781518, 0.977302, 1.286238, 1.880386",\ + "0.659357, 0.840969, 1.036753, 1.345690, 1.939840",\ + "0.854958, 1.036570, 1.232353, 1.541288, 2.135431",\ + "1.492294, 1.673906, 1.869692, 2.178633, 2.772793",\ + "0.874169, 1.058951, 1.253021, 1.561500, 2.154759",\ + "0.902114, 1.086895, 1.280965, 1.589445, 2.182705",\ + "0.961565, 1.146346, 1.340417, 1.648897, 2.242158",\ + "1.157166, 1.341947, 1.536017, 1.844495, 2.437749",\ + "1.794502, 1.979284, 2.173355, 2.481840, 3.075111"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.040709, 0.040709, 0.040708, 0.040708, 0.040708",\ + "0.082941, 0.082941, 0.082941, 0.082941, 0.082941",\ + "0.186774, 0.186774, 0.186773, 0.186772, 0.186770",\ + "0.543828, 0.543828, 0.543829, 0.543834, 0.543845",\ + "1.713838, 1.713838, 1.713836, 1.713827, 1.713805",\ + "0.040709, 0.040709, 0.040708, 0.040708, 0.040708",\ + "0.082941, 0.082941, 0.082941, 0.082941, 0.082941",\ + "0.186774, 0.186774, 0.186773, 0.186772, 0.186770",\ + "0.543828, 0.543828, 0.543829, 0.543834, 0.543845",\ + "1.713838, 1.713838, 1.713836, 1.713827, 1.713805",\ + "0.040709, 0.040709, 0.040708, 0.040708, 0.040708",\ + "0.082941, 0.082941, 0.082941, 0.082941, 0.082941",\ + "0.186774, 0.186774, 0.186773, 0.186772, 0.186770",\ + "0.543828, 0.543828, 0.543829, 0.543834, 0.543845",\ + "1.713838, 1.713838, 1.713836, 1.713827, 1.713805",\ + "0.040709, 0.040709, 0.040708, 0.040708, 0.040708",\ + "0.082941, 0.082941, 0.082941, 0.082941, 0.082941",\ + "0.186774, 0.186774, 0.186773, 0.186772, 0.186770",\ + "0.543828, 0.543828, 0.543829, 0.543834, 0.543845",\ + "1.713838, 1.713838, 1.713836, 1.713827, 1.713805",\ + "0.040709, 0.040709, 0.040708, 0.040708, 0.040708",\ + "0.082941, 0.082941, 0.082941, 0.082941, 0.082941",\ + "0.186774, 0.186774, 0.186773, 0.186772, 0.186770",\ + "0.543828, 0.543828, 0.543829, 0.543834, 0.543845",\ + "1.713838, 1.713838, 1.713836, 1.713827, 1.713805"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[7]_redg_min_2425*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[2]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.448423, 0.707982, 0.979616, 1.435777, 2.346942",\ + "0.486578, 0.746137, 1.017771, 1.473932, 2.385097",\ + "0.569004, 0.828563, 1.100198, 1.556358, 2.467524",\ + "0.840163, 1.099722, 1.371357, 1.827517, 2.738683",\ + "1.726049, 1.985608, 2.257243, 2.713404, 3.624570",\ + "0.536527, 0.795515, 1.067145, 1.522492, 2.432876",\ + "0.574682, 0.833670, 1.105300, 1.560647, 2.471031",\ + "0.657109, 0.916096, 1.187727, 1.643074, 2.553458",\ + "0.928268, 1.187255, 1.458886, 1.914232, 2.824616",\ + "1.814154, 2.073141, 2.344772, 2.800119, 3.710504",\ + "0.624558, 0.884479, 1.155110, 1.610131, 2.519831",\ + "0.662712, 0.922634, 1.193264, 1.648286, 2.557986",\ + "0.745139, 1.005061, 1.275691, 1.730713, 2.640413",\ + "1.016298, 1.276219, 1.546850, 2.001871, 2.911571",\ + "1.902184, 2.162105, 2.432736, 2.887758, 3.797459",\ + "0.686779, 0.950090, 1.219247, 1.674205, 2.583340",\ + "0.724934, 0.988245, 1.257402, 1.712360, 2.621495",\ + "0.807361, 1.070672, 1.339829, 1.794787, 2.703922",\ + "1.078519, 1.341830, 1.610988, 2.065946, 2.975080",\ + "1.964405, 2.227717, 2.496874, 2.951832, 3.860968",\ + "1.014166, 1.314139, 1.570990, 2.023592, 2.928796",\ + "1.052321, 1.352293, 1.609145, 2.061747, 2.966951",\ + "1.134748, 1.434720, 1.691572, 2.144174, 3.049378",\ + "1.405907, 1.705879, 1.962730, 2.415332, 3.320536",\ + "2.291793, 2.591765, 2.848617, 3.301219, 4.206424"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.050112, 0.050112, 0.050112, 0.050111, 0.050111",\ + "0.112175, 0.112175, 0.112175, 0.112175, 0.112174",\ + "0.264098, 0.264098, 0.264098, 0.264098, 0.264098",\ + "0.776079, 0.776079, 0.776079, 0.776079, 0.776079",\ + "2.446671, 2.446674, 2.446680, 2.446683, 2.446690",\ + "0.050112, 0.050112, 0.050112, 0.050111, 0.050111",\ + "0.112175, 0.112175, 0.112175, 0.112175, 0.112174",\ + "0.264098, 0.264098, 0.264098, 0.264098, 0.264098",\ + "0.776079, 0.776079, 0.776079, 0.776079, 0.776079",\ + "2.446671, 2.446674, 2.446680, 2.446683, 2.446690",\ + "0.050112, 0.050112, 0.050112, 0.050111, 0.050111",\ + "0.112175, 0.112175, 0.112175, 0.112175, 0.112174",\ + "0.264098, 0.264098, 0.264098, 0.264098, 0.264098",\ + "0.776079, 0.776079, 0.776079, 0.776079, 0.776079",\ + "2.446671, 2.446674, 2.446680, 2.446683, 2.446690",\ + "0.050112, 0.050112, 0.050112, 0.050111, 0.050111",\ + "0.112175, 0.112175, 0.112175, 0.112175, 0.112174",\ + "0.264098, 0.264098, 0.264098, 0.264098, 0.264098",\ + "0.776079, 0.776079, 0.776079, 0.776079, 0.776079",\ + "2.446671, 2.446674, 2.446680, 2.446683, 2.446690",\ + "0.050112, 0.050112, 0.050112, 0.050111, 0.050111",\ + "0.112175, 0.112175, 0.112175, 0.112175, 0.112174",\ + "0.264098, 0.264098, 0.264098, 0.264098, 0.264098",\ + "0.776079, 0.776079, 0.776079, 0.776079, 0.776079",\ + "2.446671, 2.446675, 2.446680, 2.446683, 2.446690"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.344360, 0.526527, 0.722625, 1.031957, 1.626903",\ + "0.372305, 0.554472, 0.750569, 1.059901, 1.654848",\ + "0.431756, 0.613923, 0.810021, 1.119354, 1.714302",\ + "0.627357, 0.809524, 1.005621, 1.314951, 1.909892",\ + "1.264693, 1.446861, 1.642959, 1.952297, 2.547257",\ + "0.431780, 0.613846, 0.809906, 1.119262, 1.714256",\ + "0.459725, 0.641791, 0.837850, 1.147207, 1.742202",\ + "0.519176, 0.701242, 0.897302, 1.206659, 1.801656",\ + "0.714777, 0.896843, 1.092902, 1.402256, 1.997246",\ + "1.352113, 1.534179, 1.730240, 2.039602, 2.634611",\ + "0.512648, 0.694183, 0.889933, 1.199290, 1.794288",\ + "0.540592, 0.722128, 0.917877, 1.227235, 1.822234",\ + "0.600044, 0.781579, 0.977328, 1.286687, 1.881687",\ + "0.795644, 0.977180, 1.172929, 1.482284, 2.077278",\ + "1.432981, 1.614516, 1.810267, 2.119630, 2.714642",\ + "0.570287, 0.752020, 0.947668, 1.256761, 1.851384",\ + "0.598231, 0.779964, 0.975612, 1.284706, 1.879330",\ + "0.657682, 0.839416, 1.035064, 1.344158, 1.938784",\ + "0.853283, 1.035016, 1.230664, 1.539755, 2.134374",\ + "1.490620, 1.672353, 1.868002, 2.177101, 2.771739",\ + "0.872382, 1.057398, 1.251331, 1.559969, 2.153704",\ + "0.900326, 1.085343, 1.279276, 1.587914, 2.181649",\ + "0.959778, 1.144794, 1.338727, 1.647366, 2.241103",\ + "1.155378, 1.340395, 1.534328, 1.842963, 2.436693",\ + "1.792715, 1.977731, 2.171666, 2.480309, 3.074058"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.040709, 0.040709, 0.040708, 0.040708, 0.040708",\ + "0.082941, 0.082941, 0.082941, 0.082941, 0.082941",\ + "0.186774, 0.186774, 0.186773, 0.186772, 0.186769",\ + "0.543828, 0.543828, 0.543829, 0.543834, 0.543846",\ + "1.713838, 1.713838, 1.713836, 1.713826, 1.713802",\ + "0.040709, 0.040709, 0.040708, 0.040708, 0.040708",\ + "0.082941, 0.082941, 0.082941, 0.082941, 0.082941",\ + "0.186774, 0.186774, 0.186773, 0.186772, 0.186769",\ + "0.543828, 0.543828, 0.543829, 0.543834, 0.543846",\ + "1.713838, 1.713838, 1.713836, 1.713826, 1.713802",\ + "0.040709, 0.040709, 0.040708, 0.040708, 0.040708",\ + "0.082941, 0.082941, 0.082941, 0.082941, 0.082941",\ + "0.186774, 0.186774, 0.186773, 0.186772, 0.186769",\ + "0.543828, 0.543828, 0.543829, 0.543834, 0.543846",\ + "1.713838, 1.713838, 1.713836, 1.713826, 1.713802",\ + "0.040709, 0.040709, 0.040708, 0.040708, 0.040708",\ + "0.082941, 0.082941, 0.082941, 0.082941, 0.082941",\ + "0.186774, 0.186774, 0.186773, 0.186772, 0.186769",\ + "0.543828, 0.543828, 0.543829, 0.543834, 0.543846",\ + "1.713838, 1.713838, 1.713836, 1.713826, 1.713802",\ + "0.040709, 0.040709, 0.040708, 0.040708, 0.040708",\ + "0.082941, 0.082941, 0.082941, 0.082941, 0.082941",\ + "0.186774, 0.186774, 0.186773, 0.186772, 0.186769",\ + "0.543828, 0.543828, 0.543829, 0.543834, 0.543846",\ + "1.713838, 1.713838, 1.713836, 1.713826, 1.713802"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[7]_redg_min_2354*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[3]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.540706, 0.719045, 0.899392, 1.185579, 1.736332",\ + "0.578861, 0.757200, 0.937547, 1.223734, 1.774487",\ + "0.661288, 0.839627, 1.019974, 1.306160, 1.856914",\ + "0.932446, 1.110786, 1.291132, 1.577319, 2.128072",\ + "1.818332, 1.996672, 2.177019, 2.463205, 3.013958",\ + "0.625644, 0.803881, 0.984462, 1.271085, 1.822710",\ + "0.663799, 0.842036, 1.022617, 1.309240, 1.860865",\ + "0.746226, 0.924463, 1.105044, 1.391667, 1.943292",\ + "1.017385, 1.195621, 1.376203, 1.662825, 2.214450",\ + "1.903271, 2.081508, 2.262089, 2.548712, 3.100337",\ + "0.701550, 0.879325, 1.059271, 1.345682, 1.896883",\ + "0.739705, 0.917479, 1.097426, 1.383837, 1.935037",\ + "0.822132, 0.999906, 1.179853, 1.466263, 2.017464",\ + "1.093291, 1.271065, 1.451011, 1.737422, 2.288623",\ + "1.979177, 2.156951, 2.336898, 2.623308, 3.174509",\ + "0.755902, 0.934070, 1.114136, 1.400275, 1.951200",\ + "0.794057, 0.972225, 1.152291, 1.438430, 1.989355",\ + "0.876484, 1.054652, 1.234718, 1.520857, 2.071782",\ + "1.147643, 1.325810, 1.505877, 1.792016, 2.342940",\ + "2.033529, 2.211697, 2.391763, 2.677902, 3.228827",\ + "1.037324, 1.219587, 1.398289, 1.684002, 2.234478",\ + "1.075479, 1.257742, 1.436444, 1.722157, 2.272632",\ + "1.157906, 1.340169, 1.518871, 1.804583, 2.355059",\ + "1.429065, 1.611328, 1.790030, 2.075742, 2.626218",\ + "2.314951, 2.497214, 2.675916, 2.961628, 3.512104"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.050112, 0.050112, 0.050112, 0.050112, 0.050112",\ + "0.112175, 0.112175, 0.112175, 0.112175, 0.112175",\ + "0.264098, 0.264098, 0.264098, 0.264098, 0.264098",\ + "0.776079, 0.776079, 0.776079, 0.776079, 0.776079",\ + "2.446671, 2.446671, 2.446671, 2.446671, 2.446673",\ + "0.050112, 0.050112, 0.050112, 0.050112, 0.050112",\ + "0.112175, 0.112175, 0.112175, 0.112175, 0.112175",\ + "0.264098, 0.264098, 0.264098, 0.264098, 0.264098",\ + "0.776079, 0.776079, 0.776079, 0.776079, 0.776079",\ + "2.446671, 2.446671, 2.446671, 2.446671, 2.446673",\ + "0.050112, 0.050112, 0.050112, 0.050112, 0.050112",\ + "0.112175, 0.112175, 0.112175, 0.112175, 0.112175",\ + "0.264098, 0.264098, 0.264098, 0.264098, 0.264098",\ + "0.776079, 0.776079, 0.776079, 0.776079, 0.776079",\ + "2.446671, 2.446671, 2.446671, 2.446671, 2.446673",\ + "0.050112, 0.050112, 0.050112, 0.050112, 0.050112",\ + "0.112175, 0.112175, 0.112175, 0.112175, 0.112175",\ + "0.264098, 0.264098, 0.264098, 0.264098, 0.264098",\ + "0.776079, 0.776079, 0.776079, 0.776079, 0.776079",\ + "2.446671, 2.446671, 2.446671, 2.446671, 2.446673",\ + "0.050112, 0.050112, 0.050112, 0.050112, 0.050112",\ + "0.112175, 0.112175, 0.112175, 0.112175, 0.112175",\ + "0.264098, 0.264098, 0.264098, 0.264098, 0.264098",\ + "0.776079, 0.776079, 0.776079, 0.776079, 0.776079",\ + "2.446671, 2.446671, 2.446671, 2.446671, 2.446673"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.361633, 0.626632, 0.885661, 1.321925, 2.194071",\ + "0.389577, 0.654577, 0.913606, 1.349870, 2.222015",\ + "0.449029, 0.714028, 0.973057, 1.409321, 2.281467",\ + "0.644629, 0.909628, 1.168658, 1.604922, 2.477067",\ + "1.281966, 1.546965, 1.805995, 2.242259, 3.114405",\ + "0.450298, 0.714707, 0.974302, 1.410154, 2.281476",\ + "0.478243, 0.742651, 1.002247, 1.438099, 2.309421",\ + "0.537694, 0.802103, 1.061698, 1.497550, 2.368872",\ + "0.733295, 0.997703, 1.257299, 1.693150, 2.564472",\ + "1.370631, 1.635040, 1.894635, 2.330488, 3.201810",\ + "0.543105, 0.808000, 1.066338, 1.502398, 2.374518",\ + "0.571050, 0.835945, 1.094282, 1.530342, 2.402462",\ + "0.630501, 0.895396, 1.153733, 1.589793, 2.461914",\ + "0.826102, 1.090997, 1.349334, 1.785394, 2.657514",\ + "1.463438, 1.728334, 1.986671, 2.422731, 3.294852",\ + "0.608828, 0.876535, 1.133393, 1.569404, 2.441428",\ + "0.636772, 0.904479, 1.161337, 1.597349, 2.469372",\ + "0.696223, 0.963930, 1.220788, 1.656800, 2.528824",\ + "0.891824, 1.159531, 1.416389, 1.852400, 2.724424",\ + "1.529161, 1.796868, 2.053726, 2.489738, 3.361762",\ + "0.954617, 1.257033, 1.504031, 1.938605, 2.807755",\ + "0.982561, 1.284978, 1.531975, 1.966550, 2.835699",\ + "1.042013, 1.344429, 1.591426, 2.026001, 2.895151",\ + "1.237613, 1.540030, 1.787027, 2.221601, 3.090751",\ + "1.874950, 2.177366, 2.424364, 2.858939, 3.728089"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.040709, 0.040709, 0.040709, 0.040709, 0.040708",\ + "0.082941, 0.082941, 0.082941, 0.082941, 0.082941",\ + "0.186774, 0.186774, 0.186774, 0.186774, 0.186773",\ + "0.543828, 0.543828, 0.543828, 0.543829, 0.543829",\ + "1.713838, 1.713838, 1.713838, 1.713837, 1.713836",\ + "0.040709, 0.040709, 0.040709, 0.040709, 0.040708",\ + "0.082941, 0.082941, 0.082941, 0.082941, 0.082941",\ + "0.186774, 0.186774, 0.186774, 0.186774, 0.186773",\ + "0.543828, 0.543828, 0.543828, 0.543829, 0.543829",\ + "1.713838, 1.713838, 1.713838, 1.713837, 1.713836",\ + "0.040709, 0.040709, 0.040709, 0.040709, 0.040708",\ + "0.082941, 0.082941, 0.082941, 0.082941, 0.082941",\ + "0.186774, 0.186774, 0.186774, 0.186774, 0.186773",\ + "0.543828, 0.543828, 0.543828, 0.543829, 0.543829",\ + "1.713838, 1.713838, 1.713838, 1.713837, 1.713836",\ + "0.040709, 0.040709, 0.040709, 0.040709, 0.040708",\ + "0.082941, 0.082941, 0.082941, 0.082941, 0.082941",\ + "0.186774, 0.186774, 0.186774, 0.186774, 0.186773",\ + "0.543828, 0.543828, 0.543828, 0.543829, 0.543829",\ + "1.713838, 1.713838, 1.713838, 1.713837, 1.713836",\ + "0.040709, 0.040709, 0.040709, 0.040709, 0.040708",\ + "0.082941, 0.082941, 0.082941, 0.082941, 0.082941",\ + "0.186774, 0.186774, 0.186774, 0.186774, 0.186773",\ + "0.543828, 0.543828, 0.543828, 0.543829, 0.543829",\ + "1.713838, 1.713838, 1.713838, 1.713837, 1.713836"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[7]_redg_min_2300*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + values ( "0.138985, 0.175019, 0.256111, 0.526543, 1.410212",\ + "0.227168, 0.263197, 0.344286, 0.614601, 1.498111",\ + "0.315465, 0.351510, 0.432605, 0.702794, 1.585954",\ + "0.378070, 0.414099, 0.495228, 0.765687, 1.648712",\ + "0.707467, 0.743520, 0.824710, 1.095700, 1.978611"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + values ( "0.049671, 0.111941, 0.264026, 0.776079, 2.446670",\ + "0.049671, 0.111941, 0.264026, 0.776079, 2.446670",\ + "0.049671, 0.111941, 0.264026, 0.776079, 2.446670",\ + "0.049683, 0.111941, 0.264026, 0.776079, 2.446670",\ + "0.050112, 0.112175, 0.264026, 0.776079, 2.446670"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + values ( "0.157324, 0.185053, 0.244293, 0.439369, 1.077476",\ + "0.244729, 0.272457, 0.331698, 0.526774, 1.164879",\ + "0.325583, 0.353311, 0.412545, 0.607616, 1.245783",\ + "0.383167, 0.410894, 0.470117, 0.665176, 1.303456",\ + "0.684927, 0.712665, 0.771862, 0.966921, 1.606322"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + values ( "0.040467, 0.082696, 0.186546, 0.543770, 1.713948",\ + "0.040467, 0.082696, 0.186546, 0.543770, 1.713948",\ + "0.040467, 0.082696, 0.186546, 0.543770, 1.713916",\ + "0.040467, 0.082696, 0.186546, 0.543770, 1.713853",\ + "0.040452, 0.082696, 0.186546, 0.543770, 1.713838"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[7]_redg_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + values ( "380001.750000, 380001.781250, 380001.875000, 380002.125000, 380003.031250",\ + "380001.843750, 380001.875000, 380001.968750, 380002.218750, 380003.125000",\ + "380001.937500, 380001.968750, 380002.062500, 380002.312500, 380003.218750",\ + "380002.093750, 380002.125000, 380002.218750, 380002.468750, 380003.375000",\ + "380002.343750, 380002.375000, 380002.468750, 380002.718750, 380003.625000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + values ( "0.060263, 0.120010, 0.268885, 0.784134, 2.468360",\ + "0.060263, 0.120010, 0.268885, 0.784134, 2.468360",\ + "0.060263, 0.120010, 0.268885, 0.784134, 2.468360",\ + "0.060263, 0.120010, 0.268885, 0.784134, 2.468360",\ + "0.060263, 0.120010, 0.268885, 0.784134, 2.468360"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + values ( "380003.812500, 380003.843750, 380003.906250, 380004.093750, 380004.750000",\ + "380003.906250, 380003.937500, 380004.000000, 380004.187500, 380004.843750",\ + "380004.031250, 380004.062500, 380004.125000, 380004.312500, 380004.968750",\ + "380004.218750, 380004.250000, 380004.312500, 380004.500000, 380005.156250",\ + "380004.531250, 380004.562500, 380004.625000, 380004.812500, 380005.468750"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + values ( "0.050461, 0.092299, 0.192599, 0.548730, 1.719198",\ + "0.050461, 0.092299, 0.192599, 0.548730, 1.719198",\ + "0.050461, 0.092299, 0.192599, 0.548730, 1.719198",\ + "0.050461, 0.092299, 0.192599, 0.548730, 1.719198",\ + "0.050461, 0.092299, 0.192599, 0.548730, 1.719198"); + } + + } /* end of arc padmux2ast_i[4]_obs_ctrl_o[7]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + values ( "380001.718750, 380001.781250, 380001.843750, 380002.125000, 380003.000000",\ + "380001.812500, 380001.875000, 380001.937500, 380002.218750, 380003.093750",\ + "380001.875000, 380001.937500, 380002.000000, 380002.281250, 380003.156250",\ + "380002.031250, 380002.093750, 380002.156250, 380002.437500, 380003.312500",\ + "380002.250000, 380002.312500, 380002.375000, 380002.656250, 380003.531250"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + values ( "0.057179, 0.117947, 0.268265, 0.782312, 2.467599",\ + "0.057179, 0.117947, 0.268265, 0.782312, 2.467599",\ + "0.057179, 0.117947, 0.268265, 0.782312, 2.467599",\ + "0.057179, 0.117947, 0.268265, 0.782312, 2.467599",\ + "0.057179, 0.117947, 0.268265, 0.782312, 2.467599"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + values ( "380003.781250, 380003.812500, 380003.875000, 380004.062500, 380004.718750",\ + "380003.875000, 380003.906250, 380003.968750, 380004.156250, 380004.812500",\ + "380003.968750, 380004.000000, 380004.062500, 380004.250000, 380004.906250",\ + "380004.156250, 380004.187500, 380004.250000, 380004.437500, 380005.093750",\ + "380004.406250, 380004.437500, 380004.500000, 380004.687500, 380005.343750"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + values ( "0.044680, 0.086652, 0.188447, 0.546028, 1.713947",\ + "0.044680, 0.086652, 0.188447, 0.546028, 1.713947",\ + "0.044680, 0.086652, 0.188447, 0.546028, 1.713947",\ + "0.044680, 0.086652, 0.188447, 0.546028, 1.713947",\ + "0.044680, 0.086652, 0.188447, 0.546028, 1.713947"); + } + + } /* end of arc padmux2ast_i[4]_obs_ctrl_o[7]_una_min*/ + + timing () { + related_pin : "padmux2ast_i[7]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + values ( "0.138119, 0.177193, 0.260095, 0.531430, 1.418639",\ + "0.215767, 0.254860, 0.337696, 0.608981, 1.495289",\ + "0.308294, 0.348212, 0.431364, 0.702849, 1.589224",\ + "0.484710, 0.527128, 0.611576, 0.883003, 1.767226",\ + "0.797982, 0.847958, 0.937201, 1.208546, 2.091260"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + values ( "0.060518, 0.120076, 0.268511, 0.784628, 2.471116",\ + "0.060518, 0.120081, 0.268991, 0.784628, 2.471116",\ + "0.064343, 0.122204, 0.269307, 0.784628, 2.471116",\ + "0.074832, 0.129870, 0.272085, 0.785309, 2.471116",\ + "0.105095, 0.152930, 0.282207, 0.790964, 2.471949"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + values ( "0.152585, 0.183883, 0.246071, 0.443151, 1.081549",\ + "0.241411, 0.272612, 0.334887, 0.531878, 1.170082",\ + "0.351515, 0.383367, 0.445997, 0.642143, 1.279910",\ + "0.559588, 0.595140, 0.660416, 0.857529, 1.494932",\ + "0.931509, 0.975339, 1.048816, 1.248062, 1.886353"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + values ( "0.051005, 0.093001, 0.193536, 0.550167, 1.721145",\ + "0.051005, 0.093079, 0.193536, 0.550167, 1.721145",\ + "0.053874, 0.094487, 0.193931, 0.550167, 1.721145",\ + "0.067061, 0.106340, 0.200874, 0.550167, 1.721145",\ + "0.100525, 0.137944, 0.221526, 0.555674, 1.721145"); + } + + } /* end of arc padmux2ast_i[7]_obs_ctrl_o[7]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[7]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + values ( "0.132088, 0.170250, 0.252738, 0.523558, 1.410267",\ + "0.209647, 0.247859, 0.330344, 0.601532, 1.487547",\ + "0.301602, 0.340448, 0.423118, 0.694391, 1.578063",\ + "0.475914, 0.516815, 0.600289, 0.871567, 1.757498",\ + "0.784086, 0.831711, 0.918475, 1.188577, 2.072675"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + values ( "0.057008, 0.117873, 0.266652, 0.780708, 2.463387",\ + "0.057108, 0.118176, 0.268442, 0.782366, 2.463387",\ + "0.060610, 0.120100, 0.268442, 0.782366, 2.463387",\ + "0.069995, 0.126826, 0.271258, 0.783468, 2.466000",\ + "0.096521, 0.148240, 0.280183, 0.788214, 2.471217"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + values ( "0.124161, 0.153974, 0.214961, 0.411830, 1.047717",\ + "0.215312, 0.245079, 0.306058, 0.501475, 1.140252",\ + "0.327970, 0.358765, 0.420242, 0.616480, 1.254494",\ + "0.533590, 0.569301, 0.634108, 0.830328, 1.467817",\ + "0.890972, 0.936721, 1.011690, 1.210135, 1.847934"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001120, 0.003635, 0.009556, 0.029416, 0.094370"); + values ( "0.045487, 0.087234, 0.188597, 0.544901, 1.712083",\ + "0.045487, 0.087327, 0.189348, 0.546097, 1.714089",\ + "0.050060, 0.090091, 0.189686, 0.546097, 1.714380",\ + "0.065339, 0.103967, 0.197580, 0.546097, 1.714380",\ + "0.095856, 0.132931, 0.220241, 0.552890, 1.714380"); + } + + } /* end of arc padmux2ast_i[7]_obs_ctrl_o[7]_una_min*/ + +} /* end of pin obs_ctrl_o[7] */ + +pin("obs_ctrl_o[6]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.156168 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000997 ; + + /* Other user defined attributes. */ + original_pin : obs_ctrl_o[6]; + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[0]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.556254, 0.736457, 0.923947, 1.225939, 1.809451",\ + "0.586838, 0.767041, 0.954531, 1.256524, 1.840036",\ + "0.658665, 0.838868, 1.026358, 1.328351, 1.911863",\ + "0.915124, 1.095327, 1.282817, 1.584810, 2.168322",\ + "1.830892, 2.011095, 2.198585, 2.500578, 3.084090",\ + "0.641192, 0.821740, 1.009955, 1.311951, 1.895829",\ + "0.671777, 0.852324, 1.040540, 1.342536, 1.926414",\ + "0.743604, 0.924151, 1.112367, 1.414363, 1.998241",\ + "1.000063, 1.180610, 1.368826, 1.670822, 2.254700",\ + "1.915831, 2.096378, 2.284594, 2.586590, 3.170468",\ + "0.717104, 0.897183, 1.084764, 1.386548, 1.970002",\ + "0.747689, 0.927768, 1.115349, 1.417133, 2.000586",\ + "0.819516, 0.999595, 1.187176, 1.488960, 2.072413",\ + "1.075975, 1.256054, 1.443635, 1.745419, 2.328872",\ + "1.991743, 2.171822, 2.359403, 2.661187, 3.244641",\ + "0.771473, 0.951695, 1.139415, 1.441088, 2.024319",\ + "0.802058, 0.982279, 1.170000, 1.471673, 2.054904",\ + "0.873885, 1.054106, 1.241827, 1.543499, 2.126730",\ + "1.130344, 1.310565, 1.498286, 1.799959, 2.383190",\ + "2.046112, 2.226333, 2.414054, 2.715727, 3.298958",\ + "1.053068, 1.236963, 1.423366, 1.724814, 2.307597",\ + "1.083653, 1.267547, 1.453950, 1.755399, 2.338181",\ + "1.155480, 1.339374, 1.525777, 1.827226, 2.410008",\ + "1.411939, 1.595834, 1.782236, 2.083685, 2.666467",\ + "2.327707, 2.511601, 2.698004, 2.999453, 3.582235"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.040152, 0.040152, 0.040152, 0.040152, 0.040152",\ + "0.086136, 0.086136, 0.086136, 0.086136, 0.086136",\ + "0.217337, 0.217337, 0.217337, 0.217337, 0.217336",\ + "0.715483, 0.715483, 0.715483, 0.715483, 0.715483",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040152, 0.040152, 0.040152, 0.040152, 0.040152",\ + "0.086136, 0.086136, 0.086136, 0.086136, 0.086136",\ + "0.217337, 0.217337, 0.217337, 0.217337, 0.217336",\ + "0.715483, 0.715483, 0.715483, 0.715483, 0.715483",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040152, 0.040152, 0.040152, 0.040152, 0.040152",\ + "0.086136, 0.086136, 0.086136, 0.086136, 0.086136",\ + "0.217337, 0.217337, 0.217337, 0.217337, 0.217336",\ + "0.715483, 0.715483, 0.715483, 0.715483, 0.715483",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040152, 0.040152, 0.040152, 0.040152, 0.040152",\ + "0.086136, 0.086136, 0.086136, 0.086136, 0.086136",\ + "0.217337, 0.217337, 0.217337, 0.217337, 0.217336",\ + "0.715483, 0.715483, 0.715483, 0.715483, 0.715483",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040152, 0.040152, 0.040152, 0.040152, 0.040152",\ + "0.086136, 0.086136, 0.086136, 0.086136, 0.086136",\ + "0.217337, 0.217337, 0.217337, 0.217337, 0.217336",\ + "0.715483, 0.715483, 0.715483, 0.715483, 0.715483",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.426883, 0.694669, 0.956249, 1.395946, 2.275341",\ + "0.452678, 0.720463, 0.982044, 1.421741, 2.301136",\ + "0.504089, 0.771875, 1.033455, 1.473152, 2.352547",\ + "0.670899, 0.938685, 1.200265, 1.639962, 2.519357",\ + "1.261153, 1.528939, 1.790519, 2.230216, 3.109611",\ + "0.515587, 0.782744, 1.044890, 1.484175, 2.362746",\ + "0.541382, 0.808538, 1.070684, 1.509970, 2.388541",\ + "0.592793, 0.859950, 1.122096, 1.561381, 2.439952",\ + "0.759603, 1.026760, 1.288906, 1.728191, 2.606762",\ + "1.349858, 1.617014, 1.879160, 2.318445, 3.197016",\ + "0.608530, 0.875889, 1.136616, 1.576339, 2.455788",\ + "0.634324, 0.901683, 1.162410, 1.602134, 2.481582",\ + "0.685735, 0.953095, 1.213821, 1.653545, 2.532994",\ + "0.852545, 1.119905, 1.380631, 1.820355, 2.699804",\ + "1.442800, 1.710159, 1.970885, 2.410609, 3.290058",\ + "0.674373, 0.944453, 1.203635, 1.643190, 2.522299",\ + "0.700168, 0.970248, 1.229430, 1.668984, 2.548094",\ + "0.751579, 1.021659, 1.280841, 1.720395, 2.599505",\ + "0.918389, 1.188469, 1.447651, 1.887205, 2.766315",\ + "1.508643, 1.778723, 2.037905, 2.477460, 3.356569",\ + "1.020895, 1.325289, 1.574298, 2.012344, 2.888435",\ + "1.046689, 1.351083, 1.600093, 2.038138, 2.914229",\ + "1.098100, 1.402495, 1.651504, 2.089549, 2.965641",\ + "1.264910, 1.569304, 1.818314, 2.256359, 3.132450",\ + "1.855165, 2.159559, 2.408568, 2.846614, 3.722705"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.040587, 0.040587, 0.040587, 0.040587, 0.040587",\ + "0.069933, 0.069933, 0.069933, 0.069933, 0.069933",\ + "0.145759, 0.145759, 0.145759, 0.145759, 0.145759",\ + "0.443908, 0.443908, 0.443908, 0.443908, 0.443908",\ + "1.523853, 1.523853, 1.523853, 1.523852, 1.523852",\ + "0.040587, 0.040587, 0.040587, 0.040587, 0.040587",\ + "0.069933, 0.069933, 0.069933, 0.069933, 0.069933",\ + "0.145759, 0.145759, 0.145759, 0.145759, 0.145759",\ + "0.443908, 0.443908, 0.443908, 0.443908, 0.443908",\ + "1.523853, 1.523853, 1.523853, 1.523852, 1.523852",\ + "0.040587, 0.040587, 0.040587, 0.040587, 0.040587",\ + "0.069933, 0.069933, 0.069933, 0.069933, 0.069933",\ + "0.145759, 0.145759, 0.145759, 0.145759, 0.145759",\ + "0.443908, 0.443908, 0.443908, 0.443908, 0.443908",\ + "1.523853, 1.523853, 1.523853, 1.523852, 1.523852",\ + "0.040587, 0.040587, 0.040587, 0.040587, 0.040587",\ + "0.069933, 0.069933, 0.069933, 0.069933, 0.069933",\ + "0.145759, 0.145759, 0.145759, 0.145759, 0.145759",\ + "0.443908, 0.443908, 0.443908, 0.443908, 0.443908",\ + "1.523853, 1.523853, 1.523853, 1.523852, 1.523852",\ + "0.040587, 0.040587, 0.040587, 0.040587, 0.040587",\ + "0.069933, 0.069933, 0.069933, 0.069933, 0.069933",\ + "0.145759, 0.145759, 0.145759, 0.145759, 0.145759",\ + "0.443908, 0.443908, 0.443908, 0.443908, 0.443908",\ + "1.523853, 1.523853, 1.523853, 1.523852, 1.523852"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[6]_redg_2739*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[1]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.464359, 0.727932, 1.004205, 1.472935, 2.410394",\ + "0.494943, 0.758517, 1.034790, 1.503519, 2.440979",\ + "0.566770, 0.830344, 1.106616, 1.575346, 2.512805",\ + "0.823229, 1.086803, 1.363075, 1.831805, 2.769264",\ + "1.738998, 2.002571, 2.278845, 2.747575, 3.685036",\ + "0.552553, 0.815473, 1.091773, 1.559650, 2.496328",\ + "0.583138, 0.846058, 1.122357, 1.590235, 2.526912",\ + "0.654965, 0.917885, 1.194184, 1.662061, 2.598739",\ + "0.911424, 1.174344, 1.450643, 1.918520, 2.855197",\ + "1.827192, 2.090112, 2.366412, 2.834290, 3.770969",\ + "0.640869, 0.904454, 1.179738, 1.647273, 2.583283",\ + "0.671454, 0.935038, 1.210322, 1.677857, 2.613867",\ + "0.743281, 1.006865, 1.282149, 1.749684, 2.685694",\ + "0.999740, 1.263324, 1.538608, 2.006143, 2.942153",\ + "1.915508, 2.179093, 2.454377, 2.921913, 3.857924",\ + "0.703365, 0.970089, 1.243877, 1.711186, 2.646792",\ + "0.733950, 1.000673, 1.274462, 1.741771, 2.677376",\ + "0.805777, 1.072500, 1.346289, 1.813598, 2.749203",\ + "1.062236, 1.328959, 1.602748, 2.070056, 3.005661",\ + "1.978004, 2.244728, 2.518517, 2.985826, 3.921433",\ + "1.032491, 1.334419, 1.595745, 2.060536, 2.992248",\ + "1.063076, 1.365004, 1.626329, 2.091120, 3.022832",\ + "1.134902, 1.436831, 1.698156, 2.162947, 3.094659",\ + "1.391361, 1.693290, 1.954615, 2.419406, 3.351118",\ + "2.307130, 2.609058, 2.870384, 3.335176, 4.266890"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.040152, 0.040152, 0.040152, 0.040152, 0.040151",\ + "0.086136, 0.086136, 0.086136, 0.086136, 0.086136",\ + "0.217337, 0.217336, 0.217336, 0.217336, 0.217335",\ + "0.715483, 0.715483, 0.715482, 0.715478, 0.715471",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040152, 0.040152, 0.040152, 0.040152, 0.040151",\ + "0.086136, 0.086136, 0.086136, 0.086136, 0.086136",\ + "0.217337, 0.217336, 0.217336, 0.217336, 0.217335",\ + "0.715483, 0.715483, 0.715481, 0.715478, 0.715471",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040152, 0.040152, 0.040152, 0.040152, 0.040151",\ + "0.086136, 0.086136, 0.086136, 0.086136, 0.086136",\ + "0.217337, 0.217336, 0.217336, 0.217336, 0.217335",\ + "0.715483, 0.715483, 0.715481, 0.715478, 0.715471",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040152, 0.040152, 0.040152, 0.040152, 0.040151",\ + "0.086136, 0.086136, 0.086136, 0.086136, 0.086136",\ + "0.217337, 0.217336, 0.217336, 0.217336, 0.217335",\ + "0.715483, 0.715483, 0.715481, 0.715478, 0.715471",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040152, 0.040152, 0.040152, 0.040152, 0.040151",\ + "0.086136, 0.086136, 0.086136, 0.086136, 0.086136",\ + "0.217337, 0.217336, 0.217336, 0.217336, 0.217335",\ + "0.715483, 0.715483, 0.715481, 0.715478, 0.715471",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.409837, 0.592268, 0.788660, 1.097713, 1.692519",\ + "0.435631, 0.618063, 0.814455, 1.123508, 1.718315",\ + "0.487042, 0.669474, 0.865866, 1.174919, 1.769726",\ + "0.653852, 0.836284, 1.032676, 1.341729, 1.936536",\ + "1.244107, 1.426538, 1.622930, 1.931983, 2.526791",\ + "0.497251, 0.679654, 0.876154, 1.185018, 1.779872",\ + "0.523046, 0.705448, 0.901948, 1.210813, 1.805669",\ + "0.574457, 0.756860, 0.953359, 1.262224, 1.857080",\ + "0.741267, 0.923669, 1.120169, 1.429034, 2.023889",\ + "1.331521, 1.513924, 1.710423, 2.019289, 2.614144",\ + "0.578128, 0.759990, 0.956180, 1.265047, 1.859904",\ + "0.603922, 0.785785, 0.981975, 1.290841, 1.885700",\ + "0.655333, 0.837196, 1.033386, 1.342253, 1.937111",\ + "0.822143, 1.004006, 1.200196, 1.509062, 2.103921",\ + "1.412398, 1.594260, 1.790450, 2.099317, 2.694176",\ + "0.635774, 0.817539, 1.013724, 1.322292, 1.916552",\ + "0.661568, 0.843333, 1.039518, 1.348086, 1.942348",\ + "0.712980, 0.894745, 1.090930, 1.399498, 1.993759",\ + "0.879789, 1.061554, 1.257740, 1.566308, 2.160568",\ + "1.470044, 1.651809, 1.847994, 2.156562, 2.750823",\ + "0.937982, 1.122763, 1.317358, 1.625306, 2.218398",\ + "0.963776, 1.148558, 1.343152, 1.651101, 2.244195",\ + "1.015187, 1.199969, 1.394563, 1.702512, 2.295605",\ + "1.181997, 1.366779, 1.561373, 1.869322, 2.462415",\ + "1.772252, 1.957033, 2.151628, 2.459577, 3.052670"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.040587, 0.040587, 0.040587, 0.040588, 0.040588",\ + "0.069933, 0.069933, 0.069933, 0.069933, 0.069933",\ + "0.145759, 0.145759, 0.145759, 0.145759, 0.145760",\ + "0.443908, 0.443908, 0.443908, 0.443908, 0.443908",\ + "1.523853, 1.523853, 1.523853, 1.523854, 1.523857",\ + "0.040587, 0.040587, 0.040587, 0.040588, 0.040588",\ + "0.069933, 0.069933, 0.069933, 0.069933, 0.069933",\ + "0.145759, 0.145759, 0.145759, 0.145759, 0.145760",\ + "0.443908, 0.443908, 0.443908, 0.443908, 0.443908",\ + "1.523853, 1.523853, 1.523853, 1.523854, 1.523857",\ + "0.040587, 0.040587, 0.040587, 0.040588, 0.040588",\ + "0.069933, 0.069933, 0.069933, 0.069933, 0.069933",\ + "0.145759, 0.145759, 0.145759, 0.145759, 0.145760",\ + "0.443908, 0.443908, 0.443908, 0.443908, 0.443908",\ + "1.523853, 1.523853, 1.523853, 1.523854, 1.523857",\ + "0.040587, 0.040587, 0.040587, 0.040588, 0.040588",\ + "0.069933, 0.069933, 0.069933, 0.069933, 0.069933",\ + "0.145759, 0.145759, 0.145759, 0.145759, 0.145760",\ + "0.443908, 0.443908, 0.443908, 0.443908, 0.443908",\ + "1.523853, 1.523853, 1.523853, 1.523854, 1.523857",\ + "0.040587, 0.040587, 0.040587, 0.040588, 0.040588",\ + "0.069933, 0.069933, 0.069933, 0.069933, 0.069933",\ + "0.145759, 0.145759, 0.145759, 0.145759, 0.145760",\ + "0.443908, 0.443908, 0.443908, 0.443908, 0.443908",\ + "1.523853, 1.523853, 1.523853, 1.523854, 1.523857"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[6]_redg_2665*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[2]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.460384, 0.720013, 0.991885, 1.448765, 2.362525",\ + "0.490968, 0.750597, 1.022470, 1.479349, 2.393109",\ + "0.562795, 0.822424, 1.094296, 1.551176, 2.464936",\ + "0.819254, 1.078883, 1.350755, 1.807635, 2.721394",\ + "1.735022, 1.994652, 2.266525, 2.723405, 3.637166",\ + "0.548488, 0.807546, 1.079415, 1.535480, 2.448458",\ + "0.579073, 0.838131, 1.110000, 1.566065, 2.479043",\ + "0.650900, 0.909958, 1.181827, 1.637892, 2.550869",\ + "0.907359, 1.166417, 1.438286, 1.894350, 2.807328",\ + "1.823127, 2.082186, 2.354055, 2.810120, 3.723099",\ + "0.636518, 0.896512, 1.167380, 1.623103, 2.535413",\ + "0.667103, 0.927097, 1.197964, 1.653687, 2.565998",\ + "0.738930, 0.998924, 1.269791, 1.725514, 2.637825",\ + "0.995389, 1.255383, 1.526250, 1.981973, 2.894283",\ + "1.911157, 2.171151, 2.442019, 2.897743, 3.810054",\ + "0.698740, 0.962126, 1.231518, 1.687016, 2.598922",\ + "0.729324, 0.992710, 1.262102, 1.717601, 2.629507",\ + "0.801151, 1.064537, 1.333929, 1.789428, 2.701334",\ + "1.057610, 1.320996, 1.590388, 2.045887, 2.957792",\ + "1.973378, 2.236765, 2.506157, 2.961657, 3.873563",\ + "1.026127, 1.326200, 1.583265, 2.036317, 2.944378",\ + "1.056712, 1.356785, 1.613849, 2.066902, 2.974963",\ + "1.128539, 1.428612, 1.685676, 2.138729, 3.046790",\ + "1.384998, 1.685071, 1.942135, 2.395187, 3.303248",\ + "2.300766, 2.600840, 2.857905, 3.310958, 4.219019"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.040152, 0.040152, 0.040152, 0.040152, 0.040151",\ + "0.086136, 0.086136, 0.086136, 0.086136, 0.086136",\ + "0.217337, 0.217336, 0.217336, 0.217336, 0.217336",\ + "0.715483, 0.715483, 0.715480, 0.715474, 0.715462",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040152, 0.040152, 0.040152, 0.040152, 0.040151",\ + "0.086136, 0.086136, 0.086136, 0.086136, 0.086136",\ + "0.217337, 0.217336, 0.217336, 0.217336, 0.217336",\ + "0.715483, 0.715483, 0.715480, 0.715474, 0.715462",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040152, 0.040152, 0.040152, 0.040152, 0.040151",\ + "0.086136, 0.086136, 0.086136, 0.086136, 0.086136",\ + "0.217337, 0.217336, 0.217336, 0.217336, 0.217336",\ + "0.715483, 0.715483, 0.715480, 0.715474, 0.715462",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040152, 0.040152, 0.040152, 0.040152, 0.040151",\ + "0.086136, 0.086136, 0.086136, 0.086136, 0.086136",\ + "0.217337, 0.217336, 0.217336, 0.217336, 0.217336",\ + "0.715483, 0.715483, 0.715480, 0.715474, 0.715462",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040152, 0.040152, 0.040152, 0.040152, 0.040151",\ + "0.086136, 0.086136, 0.086136, 0.086136, 0.086136",\ + "0.217337, 0.217336, 0.217336, 0.217336, 0.217336",\ + "0.715483, 0.715483, 0.715480, 0.715474, 0.715462",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.408175, 0.590716, 0.786971, 1.096187, 1.691482",\ + "0.433969, 0.616510, 0.812765, 1.121982, 1.717278",\ + "0.485381, 0.667922, 0.864176, 1.173393, 1.768689",\ + "0.652191, 0.834732, 1.030986, 1.340203, 1.935498",\ + "1.242445, 1.424986, 1.621241, 1.930458, 2.525753",\ + "0.495595, 0.678101, 0.874464, 1.183492, 1.778835",\ + "0.521389, 0.703896, 0.900258, 1.209287, 1.804631",\ + "0.572801, 0.755307, 0.951669, 1.260698, 1.856043",\ + "0.739611, 0.922117, 1.118479, 1.427508, 2.022852",\ + "1.329865, 1.512371, 1.708734, 2.017763, 2.613107",\ + "0.576463, 0.758438, 0.954491, 1.263521, 1.858867",\ + "0.602257, 0.784232, 0.980285, 1.289316, 1.884663",\ + "0.653668, 0.835644, 1.031696, 1.340727, 1.936074",\ + "0.820478, 1.002454, 1.198506, 1.507537, 2.102884",\ + "1.410733, 1.592708, 1.788760, 2.097791, 2.693139",\ + "0.634101, 0.815987, 1.012035, 1.320766, 1.915514",\ + "0.659896, 0.841781, 1.037829, 1.346561, 1.941311",\ + "0.711307, 0.893192, 1.089240, 1.397972, 1.992722",\ + "0.878117, 1.060002, 1.256050, 1.564782, 2.159531",\ + "1.468371, 1.650257, 1.846304, 2.155036, 2.749786",\ + "0.936197, 1.121213, 1.315669, 1.623781, 2.217361",\ + "0.961991, 1.147007, 1.341463, 1.649576, 2.243157",\ + "1.013402, 1.198419, 1.392874, 1.700987, 2.294569",\ + "1.180212, 1.365229, 1.559684, 1.867797, 2.461378",\ + "1.770467, 1.955483, 2.149939, 2.458051, 3.051633"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.040587, 0.040587, 0.040587, 0.040588, 0.040588",\ + "0.069933, 0.069933, 0.069933, 0.069933, 0.069933",\ + "0.145759, 0.145759, 0.145759, 0.145759, 0.145760",\ + "0.443908, 0.443908, 0.443908, 0.443908, 0.443908",\ + "1.523853, 1.523853, 1.523853, 1.523854, 1.523858",\ + "0.040587, 0.040587, 0.040587, 0.040588, 0.040588",\ + "0.069933, 0.069933, 0.069933, 0.069933, 0.069933",\ + "0.145759, 0.145759, 0.145759, 0.145759, 0.145760",\ + "0.443908, 0.443908, 0.443908, 0.443908, 0.443908",\ + "1.523853, 1.523853, 1.523853, 1.523854, 1.523858",\ + "0.040587, 0.040587, 0.040587, 0.040588, 0.040588",\ + "0.069933, 0.069933, 0.069933, 0.069933, 0.069933",\ + "0.145759, 0.145759, 0.145759, 0.145759, 0.145760",\ + "0.443908, 0.443908, 0.443908, 0.443908, 0.443908",\ + "1.523853, 1.523853, 1.523853, 1.523854, 1.523858",\ + "0.040587, 0.040587, 0.040587, 0.040588, 0.040588",\ + "0.069933, 0.069933, 0.069933, 0.069933, 0.069933",\ + "0.145759, 0.145759, 0.145759, 0.145759, 0.145760",\ + "0.443908, 0.443908, 0.443908, 0.443908, 0.443908",\ + "1.523853, 1.523853, 1.523853, 1.523854, 1.523858",\ + "0.040587, 0.040587, 0.040587, 0.040588, 0.040588",\ + "0.069933, 0.069933, 0.069933, 0.069933, 0.069933",\ + "0.145759, 0.145759, 0.145759, 0.145759, 0.145760",\ + "0.443908, 0.443908, 0.443908, 0.443908, 0.443908",\ + "1.523853, 1.523853, 1.523853, 1.523854, 1.523858"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[6]_redg_2605*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[3]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.552667, 0.731094, 0.911354, 1.197561, 1.748678",\ + "0.583252, 0.761679, 0.941939, 1.228145, 1.779262",\ + "0.655079, 0.833506, 1.013766, 1.299972, 1.851089",\ + "0.911538, 1.089965, 1.270225, 1.556431, 2.107548",\ + "1.827306, 2.005733, 2.185993, 2.472199, 3.023317",\ + "0.637606, 0.816366, 0.997269, 1.283481, 1.835056",\ + "0.668190, 0.846951, 1.027854, 1.314066, 1.865641",\ + "0.740017, 0.918778, 1.099681, 1.385893, 1.937468",\ + "0.996476, 1.175237, 1.356140, 1.642352, 2.193927",\ + "1.912244, 2.091005, 2.271908, 2.558120, 3.109695",\ + "0.713512, 0.891810, 1.072078, 1.358078, 1.909228",\ + "0.744096, 0.922394, 1.102663, 1.388662, 1.939813",\ + "0.815923, 0.994221, 1.174490, 1.460489, 2.011640",\ + "1.072382, 1.250680, 1.430949, 1.716949, 2.268099",\ + "1.988150, 2.166448, 2.346717, 2.632716, 3.183867",\ + "0.767864, 0.946321, 1.126729, 1.412617, 1.963546",\ + "0.798448, 0.976906, 1.157314, 1.443202, 1.994130",\ + "0.870275, 1.048733, 1.229141, 1.515029, 2.065957",\ + "1.126734, 1.305192, 1.485600, 1.771488, 2.322416",\ + "2.042502, 2.220960, 2.401368, 2.687256, 3.238184",\ + "1.049286, 1.231549, 1.410680, 1.696344, 2.246823",\ + "1.079870, 1.262133, 1.441265, 1.726928, 2.277408",\ + "1.151697, 1.333960, 1.513092, 1.798755, 2.349235",\ + "1.408157, 1.590420, 1.769551, 2.055214, 2.605694",\ + "2.323925, 2.506187, 2.685319, 2.970983, 3.521462"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.040152, 0.040152, 0.040152, 0.040152, 0.040152",\ + "0.086136, 0.086136, 0.086136, 0.086136, 0.086136",\ + "0.217337, 0.217337, 0.217337, 0.217336, 0.217336",\ + "0.715483, 0.715483, 0.715483, 0.715483, 0.715483",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040152, 0.040152, 0.040152, 0.040152, 0.040152",\ + "0.086136, 0.086136, 0.086136, 0.086136, 0.086136",\ + "0.217337, 0.217337, 0.217337, 0.217336, 0.217336",\ + "0.715483, 0.715483, 0.715483, 0.715483, 0.715483",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040152, 0.040152, 0.040152, 0.040152, 0.040152",\ + "0.086136, 0.086136, 0.086136, 0.086136, 0.086136",\ + "0.217337, 0.217337, 0.217337, 0.217336, 0.217336",\ + "0.715483, 0.715483, 0.715483, 0.715483, 0.715483",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040152, 0.040152, 0.040152, 0.040152, 0.040152",\ + "0.086136, 0.086136, 0.086136, 0.086136, 0.086136",\ + "0.217337, 0.217337, 0.217337, 0.217336, 0.217336",\ + "0.715483, 0.715483, 0.715483, 0.715483, 0.715483",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040152, 0.040152, 0.040152, 0.040152, 0.040152",\ + "0.086136, 0.086136, 0.086136, 0.086136, 0.086136",\ + "0.217337, 0.217337, 0.217337, 0.217336, 0.217336",\ + "0.715483, 0.715483, 0.715483, 0.715483, 0.715483",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.425447, 0.690617, 0.949819, 1.386001, 2.258367",\ + "0.451242, 0.716412, 0.975613, 1.411796, 2.284161",\ + "0.502653, 0.767823, 1.027025, 1.463207, 2.335572",\ + "0.669463, 0.934633, 1.193834, 1.630017, 2.502382",\ + "1.259717, 1.524887, 1.784089, 2.220271, 3.092637",\ + "0.514113, 0.778692, 1.038460, 1.474230, 2.345772",\ + "0.539907, 0.804487, 1.064254, 1.500025, 2.371566",\ + "0.591319, 0.855898, 1.115665, 1.551436, 2.422977",\ + "0.758128, 1.022708, 1.282475, 1.718246, 2.589787",\ + "1.348383, 1.612962, 1.872730, 2.308500, 3.180042",\ + "0.606920, 0.871815, 1.130185, 1.566394, 2.438814",\ + "0.632714, 0.897609, 1.155979, 1.592189, 2.464608",\ + "0.684125, 0.949021, 1.207391, 1.643600, 2.516019",\ + "0.850935, 1.115831, 1.374201, 1.810410, 2.682829",\ + "1.441190, 1.706085, 1.964455, 2.400664, 3.273083",\ + "0.672642, 0.940349, 1.197205, 1.633245, 2.505325",\ + "0.698436, 0.966144, 1.222999, 1.659039, 2.531119",\ + "0.749848, 1.017555, 1.274411, 1.710450, 2.582530",\ + "0.916658, 1.184365, 1.441221, 1.877260, 2.749340",\ + "1.506912, 1.774619, 2.031475, 2.467515, 3.339595",\ + "1.018432, 1.320848, 1.567835, 2.002376, 2.871458",\ + "1.044226, 1.346642, 1.593630, 2.028170, 2.897252",\ + "1.095637, 1.398053, 1.645041, 2.079582, 2.948663",\ + "1.262447, 1.564863, 1.811851, 2.246391, 3.115473",\ + "1.852702, 2.155118, 2.402105, 2.836646, 3.705728"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.040587, 0.040587, 0.040587, 0.040587, 0.040587",\ + "0.069933, 0.069933, 0.069933, 0.069933, 0.069933",\ + "0.145759, 0.145759, 0.145759, 0.145759, 0.145759",\ + "0.443908, 0.443908, 0.443908, 0.443908, 0.443908",\ + "1.523853, 1.523853, 1.523853, 1.523852, 1.523852",\ + "0.040587, 0.040587, 0.040587, 0.040587, 0.040587",\ + "0.069933, 0.069933, 0.069933, 0.069933, 0.069933",\ + "0.145759, 0.145759, 0.145759, 0.145759, 0.145759",\ + "0.443908, 0.443908, 0.443908, 0.443908, 0.443908",\ + "1.523853, 1.523853, 1.523853, 1.523852, 1.523852",\ + "0.040587, 0.040587, 0.040587, 0.040587, 0.040587",\ + "0.069933, 0.069933, 0.069933, 0.069933, 0.069933",\ + "0.145759, 0.145759, 0.145759, 0.145759, 0.145759",\ + "0.443908, 0.443908, 0.443908, 0.443908, 0.443908",\ + "1.523853, 1.523853, 1.523853, 1.523852, 1.523852",\ + "0.040587, 0.040587, 0.040587, 0.040587, 0.040587",\ + "0.069933, 0.069933, 0.069933, 0.069933, 0.069933",\ + "0.145759, 0.145759, 0.145759, 0.145759, 0.145759",\ + "0.443908, 0.443908, 0.443908, 0.443908, 0.443908",\ + "1.523853, 1.523853, 1.523853, 1.523852, 1.523852",\ + "0.040587, 0.040587, 0.040587, 0.040587, 0.040587",\ + "0.069933, 0.069933, 0.069933, 0.069933, 0.069933",\ + "0.145759, 0.145759, 0.145759, 0.145759, 0.145759",\ + "0.443908, 0.443908, 0.443908, 0.443908, 0.443908",\ + "1.523853, 1.523853, 1.523853, 1.523852, 1.523852"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[6]_redg_2550*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + values ( "0.319941, 0.350525, 0.422353, 0.678812, 1.594576",\ + "0.407332, 0.437916, 0.509743, 0.766203, 1.681967",\ + "0.488251, 0.518835, 0.590662, 0.847122, 1.762885",\ + "0.545991, 0.576576, 0.648403, 0.904863, 1.820624",\ + "0.849304, 0.879623, 0.951109, 1.207569, 2.123717"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + values ( "0.040153, 0.086136, 0.217338, 0.715446, 2.463218",\ + "0.040153, 0.086136, 0.217409, 0.715446, 2.463218",\ + "0.040153, 0.086136, 0.217647, 0.715446, 2.463317",\ + "0.040153, 0.086137, 0.217647, 0.715446, 2.463317",\ + "0.040344, 0.086164, 0.217985, 0.715471, 2.463779"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + values ( "0.305331, 0.331125, 0.382537, 0.549347, 1.139601",\ + "0.392724, 0.418518, 0.469929, 0.636739, 1.226994",\ + "0.473593, 0.499388, 0.550799, 0.717609, 1.307863",\ + "0.531242, 0.557036, 0.608448, 0.775257, 1.365512",\ + "0.833898, 0.859693, 0.911104, 1.077914, 1.668168"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + values ( "0.040587, 0.069933, 0.145759, 0.443908, 1.524252",\ + "0.040587, 0.069933, 0.145759, 0.443908, 1.524252",\ + "0.040587, 0.069933, 0.145759, 0.443908, 1.524252",\ + "0.040587, 0.069933, 0.145759, 0.443908, 1.524252",\ + "0.040602, 0.069933, 0.145764, 0.443908, 1.524252"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[6]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[0]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.513147, 0.693261, 0.880839, 1.182819, 1.765915",\ + "0.542599, 0.722713, 0.910291, 1.212271, 1.795367",\ + "0.613669, 0.793782, 0.981361, 1.283341, 1.866437",\ + "0.869896, 1.050010, 1.237589, 1.539568, 2.122664",\ + "1.786688, 1.966802, 2.154380, 2.456360, 3.039456",\ + "0.598086, 0.778097, 0.965909, 1.268325, 1.852293",\ + "0.627537, 0.807548, 0.995361, 1.297777, 1.881745",\ + "0.698607, 0.878618, 1.066431, 1.368847, 1.952815",\ + "0.954835, 1.134846, 1.322659, 1.625075, 2.209043",\ + "1.871626, 2.051637, 2.239450, 2.541866, 3.125834",\ + "0.673998, 0.853540, 1.040718, 1.342922, 1.926466",\ + "0.703449, 0.882992, 1.070170, 1.372374, 1.955918",\ + "0.774519, 0.954062, 1.141240, 1.443444, 2.026988",\ + "1.030747, 1.210289, 1.397468, 1.699671, 2.283215",\ + "1.947538, 2.127081, 2.314259, 2.616463, 3.200007",\ + "0.728367, 0.908291, 1.095607, 1.397528, 1.980783",\ + "0.757819, 0.937743, 1.125059, 1.426980, 2.010235",\ + "0.828888, 1.008813, 1.196129, 1.498049, 2.081305",\ + "1.085116, 1.265041, 1.452356, 1.754277, 2.337533",\ + "2.001908, 2.181832, 2.369148, 2.671069, 3.254324",\ + "1.009962, 1.193856, 1.379783, 1.681254, 2.264061",\ + "1.039413, 1.223308, 1.409234, 1.710706, 2.293513",\ + "1.110483, 1.294378, 1.480304, 1.781775, 2.364582",\ + "1.366711, 1.550606, 1.736532, 2.038003, 2.620810",\ + "2.283502, 2.467397, 2.653323, 2.954795, 3.537601"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.036606, 0.036606, 0.036606, 0.036606, 0.036606",\ + "0.083622, 0.083622, 0.083622, 0.083622, 0.083622",\ + "0.215854, 0.215854, 0.215854, 0.215854, 0.215855",\ + "0.705773, 0.705773, 0.705773, 0.705773, 0.705774",\ + "2.456797, 2.456797, 2.456797, 2.456797, 2.456796",\ + "0.036606, 0.036606, 0.036606, 0.036606, 0.036606",\ + "0.083622, 0.083622, 0.083622, 0.083622, 0.083622",\ + "0.215854, 0.215854, 0.215854, 0.215854, 0.215855",\ + "0.705773, 0.705773, 0.705773, 0.705773, 0.705774",\ + "2.456797, 2.456797, 2.456797, 2.456797, 2.456796",\ + "0.036606, 0.036606, 0.036606, 0.036606, 0.036606",\ + "0.083622, 0.083622, 0.083622, 0.083622, 0.083622",\ + "0.215854, 0.215854, 0.215854, 0.215854, 0.215855",\ + "0.705773, 0.705773, 0.705773, 0.705773, 0.705774",\ + "2.456797, 2.456797, 2.456797, 2.456797, 2.456796",\ + "0.036606, 0.036606, 0.036606, 0.036606, 0.036606",\ + "0.083622, 0.083622, 0.083622, 0.083622, 0.083622",\ + "0.215854, 0.215854, 0.215854, 0.215854, 0.215855",\ + "0.705773, 0.705773, 0.705773, 0.705773, 0.705774",\ + "2.456797, 2.456797, 2.456797, 2.456797, 2.456796",\ + "0.036606, 0.036606, 0.036606, 0.036606, 0.036606",\ + "0.083622, 0.083622, 0.083622, 0.083622, 0.083622",\ + "0.215854, 0.215854, 0.215854, 0.215854, 0.215855",\ + "0.705773, 0.705773, 0.705773, 0.705773, 0.705774",\ + "2.456797, 2.456797, 2.456797, 2.456797, 2.456796"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.386312, 0.653923, 0.915324, 1.355101, 2.234262",\ + "0.410188, 0.677799, 0.939200, 1.378977, 2.258138",\ + "0.459747, 0.727358, 0.988759, 1.428536, 2.307697",\ + "0.625673, 0.893283, 1.154685, 1.594462, 2.473623",\ + "1.214481, 1.482092, 1.743493, 2.183270, 3.062431",\ + "0.475016, 0.741998, 1.003965, 1.443330, 2.321667",\ + "0.498892, 0.765874, 1.027841, 1.467206, 2.345543",\ + "0.548452, 0.815433, 1.077400, 1.516765, 2.395102",\ + "0.714377, 0.981359, 1.243325, 1.682691, 2.561028",\ + "1.303185, 1.570167, 1.832134, 2.271499, 3.149836",\ + "0.567959, 0.835318, 1.096009, 1.535576, 2.414709",\ + "0.591835, 0.859194, 1.119885, 1.559452, 2.438585",\ + "0.641394, 0.908753, 1.169445, 1.609011, 2.488144",\ + "0.807319, 1.074679, 1.335370, 1.774936, 2.654070",\ + "1.396127, 1.663487, 1.924178, 2.363745, 3.242877",\ + "0.633802, 0.903882, 1.163065, 1.602587, 2.481630",\ + "0.657678, 0.927758, 1.186941, 1.626463, 2.505507",\ + "0.707237, 0.977318, 1.236501, 1.676022, 2.555066",\ + "0.873163, 1.143243, 1.402426, 1.841948, 2.720992",\ + "1.461971, 1.732051, 1.991234, 2.430756, 3.309799",\ + "0.980324, 1.284718, 1.533736, 1.971813, 2.847966",\ + "1.004200, 1.308594, 1.557612, 1.995689, 2.871842",\ + "1.053759, 1.358153, 1.607171, 2.045248, 2.921401",\ + "1.219684, 1.524079, 1.773097, 2.211174, 3.087327",\ + "1.808493, 2.112887, 2.361905, 2.799982, 3.676135"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.032798, 0.032798, 0.032798, 0.032798, 0.032798",\ + "0.061344, 0.061344, 0.061344, 0.061344, 0.061344",\ + "0.138998, 0.138998, 0.138998, 0.138998, 0.138998",\ + "0.439342, 0.439342, 0.439342, 0.439343, 0.439343",\ + "1.518841, 1.518841, 1.518841, 1.518841, 1.518841",\ + "0.032798, 0.032798, 0.032798, 0.032798, 0.032798",\ + "0.061344, 0.061344, 0.061344, 0.061344, 0.061344",\ + "0.138998, 0.138998, 0.138998, 0.138998, 0.138998",\ + "0.439342, 0.439342, 0.439342, 0.439343, 0.439343",\ + "1.518841, 1.518841, 1.518841, 1.518841, 1.518841",\ + "0.032798, 0.032798, 0.032798, 0.032798, 0.032798",\ + "0.061344, 0.061344, 0.061344, 0.061344, 0.061344",\ + "0.138998, 0.138998, 0.138998, 0.138998, 0.138998",\ + "0.439342, 0.439342, 0.439342, 0.439343, 0.439343",\ + "1.518841, 1.518841, 1.518841, 1.518841, 1.518841",\ + "0.032798, 0.032798, 0.032798, 0.032798, 0.032798",\ + "0.061344, 0.061344, 0.061344, 0.061344, 0.061344",\ + "0.138998, 0.138998, 0.138998, 0.138998, 0.138998",\ + "0.439342, 0.439342, 0.439342, 0.439343, 0.439343",\ + "1.518841, 1.518841, 1.518841, 1.518841, 1.518841",\ + "0.032798, 0.032798, 0.032798, 0.032798, 0.032798",\ + "0.061344, 0.061344, 0.061344, 0.061344, 0.061344",\ + "0.138998, 0.138998, 0.138998, 0.138998, 0.138998",\ + "0.439342, 0.439342, 0.439343, 0.439343, 0.439343",\ + "1.518841, 1.518841, 1.518841, 1.518841, 1.518841"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[6]_redg_min_2492*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[1]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.421256, 0.684787, 0.960907, 1.429039, 2.364044",\ + "0.450707, 0.714239, 0.990358, 1.458491, 2.393496",\ + "0.521777, 0.785309, 1.061428, 1.529561, 2.464566",\ + "0.778005, 1.041536, 1.317656, 1.785789, 2.720794",\ + "1.694797, 1.958328, 2.234447, 2.702580, 3.637585",\ + "0.509450, 0.772327, 1.048474, 1.515754, 2.449978",\ + "0.538902, 0.801779, 1.077925, 1.545206, 2.479430",\ + "0.609972, 0.872849, 1.148995, 1.616276, 2.550500",\ + "0.866199, 1.129077, 1.405223, 1.872504, 2.806728",\ + "1.782991, 2.045868, 2.322014, 2.789295, 3.723519",\ + "0.597766, 0.861307, 1.136438, 1.603395, 2.536933",\ + "0.627218, 0.890759, 1.165890, 1.632846, 2.566385",\ + "0.698288, 0.961829, 1.236960, 1.703916, 2.637455",\ + "0.954515, 1.218056, 1.493188, 1.960144, 2.893683",\ + "1.871307, 2.134848, 2.409979, 2.876935, 3.810474",\ + "0.660262, 0.926941, 1.200578, 1.667483, 2.600442",\ + "0.689714, 0.956392, 1.230030, 1.696935, 2.629894",\ + "0.760784, 1.027462, 1.301100, 1.768005, 2.700964",\ + "1.017011, 1.283690, 1.557327, 2.024233, 2.957192",\ + "1.933803, 2.200481, 2.474119, 2.941024, 3.873983",\ + "0.989388, 1.291255, 1.552442, 2.016927, 2.945898",\ + "1.018839, 1.320707, 1.581894, 2.046379, 2.975350",\ + "1.089909, 1.391777, 1.652964, 2.117449, 3.046420",\ + "1.346137, 1.648005, 1.909191, 2.373677, 3.302648",\ + "2.262928, 2.564796, 2.825983, 3.290468, 4.219439"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.036606, 0.036606, 0.036606, 0.036607, 0.036607",\ + "0.083622, 0.083622, 0.083622, 0.083623, 0.083623",\ + "0.215854, 0.215855, 0.215855, 0.215855, 0.215856",\ + "0.705773, 0.705774, 0.705775, 0.705777, 0.705782",\ + "2.456797, 2.456796, 2.456794, 2.456789, 2.456778",\ + "0.036606, 0.036606, 0.036606, 0.036607, 0.036607",\ + "0.083622, 0.083622, 0.083622, 0.083623, 0.083623",\ + "0.215854, 0.215855, 0.215855, 0.215855, 0.215856",\ + "0.705773, 0.705774, 0.705775, 0.705777, 0.705782",\ + "2.456797, 2.456796, 2.456794, 2.456789, 2.456778",\ + "0.036606, 0.036606, 0.036606, 0.036607, 0.036607",\ + "0.083622, 0.083622, 0.083622, 0.083623, 0.083623",\ + "0.215854, 0.215855, 0.215855, 0.215855, 0.215856",\ + "0.705773, 0.705774, 0.705775, 0.705777, 0.705782",\ + "2.456797, 2.456796, 2.456794, 2.456789, 2.456778",\ + "0.036606, 0.036606, 0.036606, 0.036607, 0.036607",\ + "0.083622, 0.083622, 0.083622, 0.083623, 0.083623",\ + "0.215854, 0.215855, 0.215855, 0.215855, 0.215856",\ + "0.705773, 0.705774, 0.705775, 0.705777, 0.705782",\ + "2.456797, 2.456796, 2.456794, 2.456789, 2.456778",\ + "0.036606, 0.036606, 0.036606, 0.036607, 0.036607",\ + "0.083622, 0.083622, 0.083622, 0.083623, 0.083623",\ + "0.215854, 0.215855, 0.215855, 0.215855, 0.215856",\ + "0.705773, 0.705774, 0.705775, 0.705777, 0.705782",\ + "2.456797, 2.456796, 2.456794, 2.456789, 2.456778"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.369267, 0.551325, 0.747559, 1.056740, 1.651224",\ + "0.393143, 0.575201, 0.771435, 1.080616, 1.675100",\ + "0.442703, 0.624760, 0.820994, 1.130175, 1.724659",\ + "0.608628, 0.790685, 0.986919, 1.296102, 1.890590",\ + "1.197436, 1.379494, 1.575727, 1.884908, 2.479391",\ + "0.456682, 0.638644, 0.834839, 1.144045, 1.738577",\ + "0.480558, 0.662519, 0.858715, 1.167921, 1.762453",\ + "0.530117, 0.712079, 0.908275, 1.217480, 1.812012",\ + "0.696043, 0.878004, 1.074200, 1.383407, 1.977943",\ + "1.284851, 1.466812, 1.663008, 1.972213, 2.566744",\ + "0.537558, 0.718980, 0.914866, 1.224073, 1.818609",\ + "0.561434, 0.742856, 0.938742, 1.247949, 1.842485",\ + "0.610994, 0.792415, 0.988301, 1.297508, 1.892044",\ + "0.776919, 0.958341, 1.154227, 1.463436, 2.057975",\ + "1.365727, 1.547149, 1.743035, 2.052242, 2.646776",\ + "0.595205, 0.776817, 0.972602, 1.281544, 1.875705",\ + "0.619081, 0.800693, 0.996478, 1.305420, 1.899580",\ + "0.668640, 0.850252, 1.046037, 1.354979, 1.949140",\ + "0.834565, 1.016178, 1.211963, 1.520906, 2.115070",\ + "1.423374, 1.604986, 1.800771, 2.109712, 2.703871",\ + "0.897412, 1.082194, 1.276265, 1.584751, 2.178023",\ + "0.921288, 1.106070, 1.300141, 1.608627, 2.201899",\ + "0.970848, 1.155629, 1.349701, 1.658186, 2.251458",\ + "1.136773, 1.321555, 1.515626, 1.824113, 2.417389",\ + "1.725581, 1.910363, 2.104434, 2.412919, 3.006190"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.032797, 0.032797, 0.032797, 0.032797, 0.032797",\ + "0.061344, 0.061344, 0.061344, 0.061345, 0.061345",\ + "0.138997, 0.138997, 0.138997, 0.138997, 0.138997",\ + "0.439321, 0.439321, 0.439321, 0.439321, 0.439321",\ + "1.518841, 1.518841, 1.518841, 1.518842, 1.518844",\ + "0.032797, 0.032797, 0.032797, 0.032797, 0.032797",\ + "0.061344, 0.061344, 0.061344, 0.061345, 0.061345",\ + "0.138997, 0.138997, 0.138997, 0.138997, 0.138997",\ + "0.439321, 0.439321, 0.439321, 0.439321, 0.439321",\ + "1.518841, 1.518841, 1.518841, 1.518842, 1.518844",\ + "0.032797, 0.032797, 0.032797, 0.032797, 0.032797",\ + "0.061344, 0.061344, 0.061344, 0.061345, 0.061345",\ + "0.138997, 0.138997, 0.138997, 0.138997, 0.138997",\ + "0.439321, 0.439321, 0.439321, 0.439321, 0.439321",\ + "1.518841, 1.518841, 1.518841, 1.518842, 1.518844",\ + "0.032797, 0.032797, 0.032797, 0.032797, 0.032797",\ + "0.061344, 0.061344, 0.061344, 0.061345, 0.061345",\ + "0.138997, 0.138997, 0.138997, 0.138997, 0.138997",\ + "0.439321, 0.439321, 0.439321, 0.439321, 0.439321",\ + "1.518841, 1.518841, 1.518841, 1.518842, 1.518844",\ + "0.032797, 0.032797, 0.032797, 0.032797, 0.032797",\ + "0.061344, 0.061344, 0.061344, 0.061345, 0.061345",\ + "0.138997, 0.138997, 0.138997, 0.138997, 0.138997",\ + "0.439321, 0.439321, 0.439321, 0.439321, 0.439321",\ + "1.518841, 1.518841, 1.518841, 1.518842, 1.518844"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[6]_redg_min_2414*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[2]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.417278, 0.676837, 0.948472, 1.404635, 2.315804",\ + "0.446729, 0.706289, 0.977924, 1.434087, 2.345256",\ + "0.517799, 0.777359, 1.048994, 1.505156, 2.416326",\ + "0.774027, 1.033586, 1.305222, 1.761384, 2.672554",\ + "1.690818, 1.950378, 2.222013, 2.678176, 3.589346",\ + "0.505382, 0.764370, 1.036001, 1.491350, 2.401738",\ + "0.534834, 0.793822, 1.065453, 1.520802, 2.431190",\ + "0.605904, 0.864891, 1.136523, 1.591872, 2.502260",\ + "0.862132, 1.121119, 1.392751, 1.848100, 2.758488",\ + "1.778923, 2.037910, 2.309542, 2.764891, 3.675279",\ + "0.593413, 0.853334, 1.123966, 1.578989, 2.488693",\ + "0.622864, 0.882786, 1.153417, 1.608441, 2.518145",\ + "0.693934, 0.953856, 1.224487, 1.679511, 2.589215",\ + "0.950162, 1.210083, 1.480715, 1.935739, 2.845443",\ + "1.866953, 2.126875, 2.397506, 2.852530, 3.762234",\ + "0.655634, 0.918945, 1.188103, 1.643063, 2.552202",\ + "0.685085, 0.948397, 1.217555, 1.672515, 2.581654",\ + "0.756155, 1.019467, 1.288625, 1.743585, 2.652724",\ + "1.012383, 1.275695, 1.544853, 1.999813, 2.908952",\ + "1.929174, 2.192486, 2.461644, 2.916605, 3.825743",\ + "0.983021, 1.282994, 1.539846, 1.992450, 2.897658",\ + "1.012473, 1.312446, 1.569298, 2.021902, 2.927110",\ + "1.083543, 1.383515, 1.640368, 2.092972, 2.998180",\ + "1.339770, 1.639743, 1.896595, 2.349199, 3.254408",\ + "2.256562, 2.556535, 2.813387, 3.265991, 4.171200"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.036606, 0.036606, 0.036606, 0.036607, 0.036608",\ + "0.083622, 0.083622, 0.083622, 0.083623, 0.083623",\ + "0.215854, 0.215855, 0.215855, 0.215855, 0.215856",\ + "0.705773, 0.705774, 0.705776, 0.705780, 0.705788",\ + "2.456797, 2.456796, 2.456792, 2.456784, 2.456766",\ + "0.036606, 0.036606, 0.036606, 0.036607, 0.036608",\ + "0.083622, 0.083622, 0.083622, 0.083623, 0.083623",\ + "0.215854, 0.215855, 0.215855, 0.215855, 0.215856",\ + "0.705773, 0.705774, 0.705776, 0.705780, 0.705788",\ + "2.456797, 2.456796, 2.456792, 2.456784, 2.456766",\ + "0.036606, 0.036606, 0.036606, 0.036607, 0.036608",\ + "0.083622, 0.083622, 0.083622, 0.083623, 0.083623",\ + "0.215854, 0.215855, 0.215855, 0.215855, 0.215856",\ + "0.705773, 0.705774, 0.705776, 0.705780, 0.705788",\ + "2.456797, 2.456796, 2.456792, 2.456784, 2.456766",\ + "0.036606, 0.036606, 0.036606, 0.036607, 0.036608",\ + "0.083622, 0.083622, 0.083622, 0.083623, 0.083623",\ + "0.215854, 0.215855, 0.215855, 0.215855, 0.215856",\ + "0.705773, 0.705774, 0.705776, 0.705780, 0.705788",\ + "2.456797, 2.456796, 2.456792, 2.456784, 2.456766",\ + "0.036606, 0.036606, 0.036606, 0.036607, 0.036608",\ + "0.083622, 0.083622, 0.083622, 0.083623, 0.083623",\ + "0.215854, 0.215855, 0.215855, 0.215855, 0.215856",\ + "0.705773, 0.705774, 0.705776, 0.705780, 0.705788",\ + "2.456797, 2.456796, 2.456792, 2.456784, 2.456766"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.367604, 0.549771, 0.745869, 1.055208, 1.650168",\ + "0.391480, 0.573647, 0.769745, 1.079083, 1.674044",\ + "0.441039, 0.623206, 0.819305, 1.128643, 1.723603",\ + "0.606964, 0.789132, 0.985230, 1.294570, 1.889535",\ + "1.195773, 1.377940, 1.574038, 1.883376, 2.478335",\ + "0.455024, 0.637090, 0.833150, 1.142513, 1.737522",\ + "0.478900, 0.660966, 0.857026, 1.166389, 1.761397",\ + "0.528459, 0.710525, 0.906585, 1.215948, 1.810957",\ + "0.694384, 0.876450, 1.072511, 1.381875, 1.976888",\ + "1.283193, 1.465259, 1.661319, 1.970681, 2.565688",\ + "0.535891, 0.717427, 0.913177, 1.222541, 1.817554",\ + "0.559767, 0.741302, 0.937053, 1.246417, 1.841429",\ + "0.609326, 0.790862, 0.986612, 1.295976, 1.890988",\ + "0.775252, 0.956787, 1.152538, 1.461904, 2.056920",\ + "1.364060, 1.545596, 1.741346, 2.050709, 2.645720",\ + "0.593530, 0.775263, 0.970912, 1.280012, 1.874650",\ + "0.617406, 0.799139, 0.994788, 1.303888, 1.898526",\ + "0.666965, 0.848699, 1.044348, 1.353447, 1.948085",\ + "0.832891, 1.014624, 1.210274, 1.519375, 2.114016",\ + "1.421699, 1.603432, 1.799081, 2.108180, 2.702816",\ + "0.895625, 1.080642, 1.274576, 1.583220, 2.176970",\ + "0.919501, 1.104518, 1.298452, 1.607095, 2.200845",\ + "0.969060, 1.154077, 1.348011, 1.656655, 2.250404",\ + "1.134986, 1.320002, 1.513937, 1.822582, 2.416336",\ + "1.723794, 1.908811, 2.102745, 2.411388, 3.005136"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.032796, 0.032796, 0.032796, 0.032796, 0.032796",\ + "0.061344, 0.061344, 0.061344, 0.061345, 0.061345",\ + "0.138997, 0.138997, 0.138997, 0.138997, 0.138997",\ + "0.439319, 0.439319, 0.439319, 0.439319, 0.439319",\ + "1.518841, 1.518841, 1.518841, 1.518842, 1.518844",\ + "0.032796, 0.032796, 0.032796, 0.032796, 0.032796",\ + "0.061344, 0.061344, 0.061344, 0.061345, 0.061345",\ + "0.138997, 0.138997, 0.138997, 0.138997, 0.138997",\ + "0.439319, 0.439319, 0.439319, 0.439319, 0.439319",\ + "1.518841, 1.518841, 1.518841, 1.518842, 1.518844",\ + "0.032796, 0.032796, 0.032796, 0.032796, 0.032796",\ + "0.061344, 0.061344, 0.061344, 0.061345, 0.061345",\ + "0.138997, 0.138997, 0.138997, 0.138997, 0.138997",\ + "0.439319, 0.439319, 0.439319, 0.439319, 0.439319",\ + "1.518841, 1.518841, 1.518841, 1.518842, 1.518844",\ + "0.032796, 0.032796, 0.032796, 0.032796, 0.032796",\ + "0.061344, 0.061344, 0.061344, 0.061345, 0.061345",\ + "0.138997, 0.138997, 0.138997, 0.138997, 0.138997",\ + "0.439319, 0.439319, 0.439319, 0.439319, 0.439319",\ + "1.518841, 1.518841, 1.518841, 1.518842, 1.518844",\ + "0.032796, 0.032796, 0.032796, 0.032796, 0.032796",\ + "0.061344, 0.061344, 0.061344, 0.061345, 0.061345",\ + "0.138997, 0.138997, 0.138997, 0.138997, 0.138997",\ + "0.439319, 0.439319, 0.439319, 0.439319, 0.439319",\ + "1.518841, 1.518841, 1.518841, 1.518842, 1.518844"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[6]_redg_min_2348*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[3]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.509561, 0.687900, 0.868247, 1.154434, 1.705187",\ + "0.539012, 0.717352, 0.897699, 1.183885, 1.734638",\ + "0.610082, 0.788422, 0.968769, 1.254955, 1.805708",\ + "0.866310, 1.044649, 1.224996, 1.511183, 2.061936",\ + "1.783102, 1.961441, 2.141788, 2.427974, 2.978728",\ + "0.594499, 0.772736, 0.953317, 1.239940, 1.791565",\ + "0.623951, 0.802188, 0.982769, 1.269392, 1.821017",\ + "0.695021, 0.873258, 1.053839, 1.340461, 1.892087",\ + "0.951248, 1.129485, 1.310066, 1.596689, 2.148314",\ + "1.868040, 2.046277, 2.226858, 2.513481, 3.065106",\ + "0.670405, 0.848179, 1.028126, 1.314537, 1.865738",\ + "0.699857, 0.877631, 1.057578, 1.343988, 1.895189",\ + "0.770927, 0.948701, 1.128648, 1.415058, 1.966259",\ + "1.027155, 1.204929, 1.384875, 1.671286, 2.222487",\ + "1.943946, 2.121720, 2.301667, 2.588078, 3.139278",\ + "0.724757, 0.902925, 1.082991, 1.369130, 1.920055",\ + "0.754209, 0.932377, 1.112443, 1.398582, 1.949507",\ + "0.825279, 1.003447, 1.183513, 1.469652, 2.020576",\ + "1.081507, 1.259674, 1.439741, 1.725880, 2.276804",\ + "1.998298, 2.176466, 2.356532, 2.642671, 3.193595",\ + "1.006179, 1.188442, 1.367144, 1.652857, 2.203332",\ + "1.035631, 1.217894, 1.396596, 1.682308, 2.232784",\ + "1.106701, 1.288964, 1.467666, 1.753378, 2.303854",\ + "1.362929, 1.545192, 1.723894, 2.009606, 2.560082",\ + "2.279720, 2.461983, 2.640685, 2.926397, 3.476873"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.036606, 0.036606, 0.036606, 0.036606, 0.036606",\ + "0.083622, 0.083622, 0.083622, 0.083622, 0.083622",\ + "0.215854, 0.215854, 0.215854, 0.215854, 0.215855",\ + "0.705773, 0.705773, 0.705773, 0.705774, 0.705774",\ + "2.456797, 2.456797, 2.456797, 2.456797, 2.456796",\ + "0.036606, 0.036606, 0.036606, 0.036606, 0.036606",\ + "0.083622, 0.083622, 0.083622, 0.083622, 0.083622",\ + "0.215854, 0.215854, 0.215854, 0.215854, 0.215855",\ + "0.705773, 0.705773, 0.705773, 0.705774, 0.705774",\ + "2.456797, 2.456797, 2.456797, 2.456797, 2.456796",\ + "0.036606, 0.036606, 0.036606, 0.036606, 0.036606",\ + "0.083622, 0.083622, 0.083622, 0.083622, 0.083622",\ + "0.215854, 0.215854, 0.215854, 0.215854, 0.215855",\ + "0.705773, 0.705773, 0.705773, 0.705774, 0.705774",\ + "2.456797, 2.456797, 2.456797, 2.456797, 2.456796",\ + "0.036606, 0.036606, 0.036606, 0.036606, 0.036606",\ + "0.083622, 0.083622, 0.083622, 0.083622, 0.083622",\ + "0.215854, 0.215854, 0.215854, 0.215854, 0.215855",\ + "0.705773, 0.705773, 0.705773, 0.705774, 0.705774",\ + "2.456797, 2.456797, 2.456797, 2.456797, 2.456796",\ + "0.036606, 0.036606, 0.036606, 0.036606, 0.036606",\ + "0.083622, 0.083622, 0.083622, 0.083622, 0.083622",\ + "0.215854, 0.215854, 0.215854, 0.215854, 0.215855",\ + "0.705773, 0.705773, 0.705773, 0.705774, 0.705774",\ + "2.456797, 2.456797, 2.456797, 2.456797, 2.456796"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.384876, 0.649875, 0.908905, 1.345169, 2.217316",\ + "0.408752, 0.673751, 0.932781, 1.369045, 2.241192",\ + "0.458311, 0.723311, 0.982340, 1.418604, 2.290751",\ + "0.624237, 0.889236, 1.148266, 1.584530, 2.456676",\ + "1.213045, 1.478044, 1.737074, 2.173338, 3.045485",\ + "0.473542, 0.737950, 0.997546, 1.433398, 2.304721",\ + "0.497418, 0.761826, 1.021422, 1.457274, 2.328597",\ + "0.546977, 0.811386, 1.070981, 1.506833, 2.378156",\ + "0.712902, 0.977311, 1.236907, 1.672759, 2.544082",\ + "1.301711, 1.566119, 1.825715, 2.261567, 3.132890",\ + "0.566349, 0.831244, 1.089581, 1.525641, 2.397763",\ + "0.590225, 0.855120, 1.113457, 1.549517, 2.421639",\ + "0.639784, 0.904679, 1.163016, 1.599077, 2.471198",\ + "0.805709, 1.070605, 1.328942, 1.765002, 2.637124",\ + "1.394518, 1.659413, 1.917750, 2.353810, 3.225932",\ + "0.632071, 0.899778, 1.156636, 1.592648, 2.464673",\ + "0.655947, 0.923654, 1.180512, 1.616524, 2.488548",\ + "0.705506, 0.973213, 1.230071, 1.666083, 2.538108",\ + "0.871432, 1.139139, 1.395997, 1.832009, 2.704033",\ + "1.460240, 1.727947, 1.984805, 2.420817, 3.292841",\ + "0.977860, 1.280277, 1.527274, 1.961849, 2.830999",\ + "1.001736, 1.304152, 1.551150, 1.985725, 2.854876",\ + "1.051296, 1.353712, 1.600709, 2.035285, 2.904435",\ + "1.217221, 1.519637, 1.766635, 2.201210, 3.070360",\ + "1.806029, 2.108445, 2.355443, 2.790018, 3.659168"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.032798, 0.032798, 0.032798, 0.032798, 0.032798",\ + "0.061344, 0.061344, 0.061344, 0.061344, 0.061344",\ + "0.138998, 0.138998, 0.138998, 0.138998, 0.138998",\ + "0.439342, 0.439342, 0.439343, 0.439343, 0.439343",\ + "1.518841, 1.518841, 1.518841, 1.518841, 1.518841",\ + "0.032798, 0.032798, 0.032798, 0.032798, 0.032798",\ + "0.061344, 0.061344, 0.061344, 0.061344, 0.061344",\ + "0.138998, 0.138998, 0.138998, 0.138998, 0.138998",\ + "0.439342, 0.439342, 0.439343, 0.439343, 0.439343",\ + "1.518841, 1.518841, 1.518841, 1.518841, 1.518841",\ + "0.032798, 0.032798, 0.032798, 0.032798, 0.032798",\ + "0.061344, 0.061344, 0.061344, 0.061344, 0.061344",\ + "0.138998, 0.138998, 0.138998, 0.138998, 0.138998",\ + "0.439342, 0.439342, 0.439343, 0.439343, 0.439343",\ + "1.518841, 1.518841, 1.518841, 1.518841, 1.518841",\ + "0.032798, 0.032798, 0.032798, 0.032798, 0.032798",\ + "0.061344, 0.061344, 0.061344, 0.061344, 0.061344",\ + "0.138998, 0.138998, 0.138998, 0.138998, 0.138998",\ + "0.439342, 0.439342, 0.439343, 0.439343, 0.439343",\ + "1.518841, 1.518841, 1.518841, 1.518841, 1.518841",\ + "0.032798, 0.032798, 0.032798, 0.032798, 0.032798",\ + "0.061344, 0.061344, 0.061344, 0.061344, 0.061344",\ + "0.138998, 0.138998, 0.138998, 0.138998, 0.138998",\ + "0.439342, 0.439342, 0.439343, 0.439343, 0.439343",\ + "1.518841, 1.518841, 1.518841, 1.518841, 1.518841"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[6]_redg_min_2294*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + values ( "0.137566, 0.167336, 0.239033, 0.495310, 1.411098",\ + "0.225751, 0.255520, 0.327229, 0.583553, 1.499024",\ + "0.314076, 0.343844, 0.415554, 0.672074, 1.587106",\ + "0.376665, 0.406437, 0.478090, 0.734905, 1.650403",\ + "0.706539, 0.736325, 0.807782, 1.065036, 1.982165"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + values ( "0.036606, 0.083622, 0.215854, 0.705773, 2.456797",\ + "0.036606, 0.083622, 0.215854, 0.705773, 2.456797",\ + "0.036606, 0.083622, 0.215854, 0.705773, 2.456797",\ + "0.036606, 0.083622, 0.215854, 0.705773, 2.456797",\ + "0.036606, 0.083622, 0.215854, 0.705773, 2.456797"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + values ( "0.176657, 0.200194, 0.249429, 0.415146, 1.003925",\ + "0.264061, 0.287598, 0.336833, 0.502550, 1.091329",\ + "0.344959, 0.368493, 0.417732, 0.583454, 1.172242",\ + "0.402624, 0.426151, 0.475399, 0.641128, 1.229933",\ + "0.704984, 0.728497, 0.777773, 0.943572, 1.532550"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + values ( "0.032799, 0.061344, 0.138999, 0.438536, 1.518306",\ + "0.032799, 0.061344, 0.138999, 0.438535, 1.518306",\ + "0.032799, 0.061344, 0.138999, 0.438535, 1.518105",\ + "0.032799, 0.061344, 0.138999, 0.438535, 1.517729",\ + "0.032799, 0.061344, 0.138998, 0.438535, 1.516557"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[6]_redg_min*/ + + timing () { + related_pin : "padmux2ast_i[6]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + values ( "0.078864, 0.108975, 0.180232, 0.436421, 1.354955",\ + "0.161216, 0.191623, 0.263062, 0.519150, 1.434794",\ + "0.248912, 0.281774, 0.353596, 0.609294, 1.527520",\ + "0.395567, 0.436700, 0.511657, 0.767118, 1.680857",\ + "0.628444, 0.688613, 0.779970, 1.032241, 1.943170"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + values ( "0.039377, 0.084977, 0.216447, 0.713042, 2.472405",\ + "0.040943, 0.085824, 0.216786, 0.713478, 2.472405",\ + "0.053222, 0.092507, 0.217591, 0.713478, 2.472405",\ + "0.083456, 0.114560, 0.223431, 0.713478, 2.472405",\ + "0.146897, 0.173026, 0.257773, 0.713478, 2.472405"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + values ( "0.111091, 0.136344, 0.187602, 0.354583, 0.943175",\ + "0.190778, 0.216967, 0.268153, 0.434275, 1.024748",\ + "0.290508, 0.318338, 0.371105, 0.537415, 1.127562",\ + "0.459624, 0.495257, 0.553492, 0.720404, 1.308180",\ + "0.729304, 0.783232, 0.859550, 1.032706, 1.617889"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + values ( "0.039826, 0.069221, 0.145259, 0.444902, 1.525117",\ + "0.040254, 0.069221, 0.145259, 0.444902, 1.525117",\ + "0.050781, 0.076552, 0.148038, 0.444902, 1.525117",\ + "0.080540, 0.101538, 0.163724, 0.445523, 1.525117",\ + "0.141255, 0.162992, 0.212369, 0.458214, 1.525117"); + } + + } /* end of arc padmux2ast_i[6]_obs_ctrl_o[6]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[6]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + values ( "0.074357, 0.103835, 0.175088, 0.430040, 1.346996",\ + "0.156284, 0.185798, 0.256925, 0.512689, 1.426492",\ + "0.240577, 0.272242, 0.343453, 0.599199, 1.515415",\ + "0.383466, 0.422274, 0.495817, 0.750018, 1.664121",\ + "0.607663, 0.663725, 0.751347, 1.002896, 1.912977"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + values ( "0.036939, 0.083563, 0.215464, 0.698603, 2.446539",\ + "0.038445, 0.084260, 0.215464, 0.704042, 2.446539",\ + "0.049297, 0.090259, 0.216941, 0.705803, 2.446539",\ + "0.076679, 0.110998, 0.222061, 0.706283, 2.457507",\ + "0.134063, 0.165740, 0.252770, 0.710864, 2.457507"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + values ( "0.080261, 0.102858, 0.151114, 0.316434, 0.906304",\ + "0.165732, 0.188510, 0.236836, 0.401880, 0.995903",\ + "0.261156, 0.287506, 0.337668, 0.502550, 1.091127",\ + "0.420973, 0.455458, 0.511965, 0.676394, 1.262831",\ + "0.677498, 0.731290, 0.807033, 0.979368, 1.563209"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000997, 0.004236, 0.012818, 0.044133, 0.156168"); + values ( "0.032396, 0.061186, 0.138642, 0.440176, 1.520011",\ + "0.033582, 0.061465, 0.138784, 0.440176, 1.520011",\ + "0.046234, 0.071020, 0.142472, 0.440176, 1.520011",\ + "0.075362, 0.096304, 0.158284, 0.443536, 1.520011",\ + "0.135524, 0.156881, 0.206007, 0.453845, 1.520011"); + } + + } /* end of arc padmux2ast_i[6]_obs_ctrl_o[6]_una_min*/ + +} /* end of pin obs_ctrl_o[6] */ + +pin("obs_ctrl_o[5]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.156168 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001502 ; + + /* Other user defined attributes. */ + original_pin : obs_ctrl_o[5]; + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[0]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.561257, 0.741460, 0.928950, 1.230943, 1.814455",\ + "0.591077, 0.771280, 0.958770, 1.260762, 1.844274",\ + "0.662801, 0.843004, 1.030494, 1.332487, 1.915998",\ + "0.919252, 1.099455, 1.286945, 1.588937, 2.172449",\ + "1.830892, 2.011095, 2.198585, 2.500578, 3.084090",\ + "0.646196, 0.826743, 1.014959, 1.316955, 1.900833",\ + "0.676015, 0.856563, 1.044779, 1.346775, 1.930653",\ + "0.747739, 0.928287, 1.116503, 1.418499, 2.002377",\ + "1.004190, 1.184738, 1.372953, 1.674950, 2.258828",\ + "1.915830, 2.096378, 2.284594, 2.586590, 3.170468",\ + "0.722108, 0.902187, 1.089768, 1.391552, 1.975005",\ + "0.751927, 0.932006, 1.119587, 1.421371, 2.004825",\ + "0.823651, 1.003731, 1.191312, 1.493096, 2.076549",\ + "1.080102, 1.260181, 1.447762, 1.749547, 2.333000",\ + "1.991742, 2.171822, 2.359402, 2.661187, 3.244640",\ + "0.776477, 0.956699, 1.144419, 1.446092, 2.029323",\ + "0.806297, 0.986518, 1.174238, 1.475911, 2.059142",\ + "0.878021, 1.058242, 1.245963, 1.547635, 2.130867",\ + "1.134472, 1.314693, 1.502414, 1.804086, 2.387317",\ + "2.046112, 2.226333, 2.414053, 2.715726, 3.298958",\ + "1.058072, 1.241966, 1.428370, 1.729818, 2.312600",\ + "1.087891, 1.271786, 1.458189, 1.759638, 2.342420",\ + "1.159616, 1.343510, 1.529913, 1.831362, 2.414144",\ + "1.416066, 1.599961, 1.786364, 2.087812, 2.670595",\ + "2.327706, 2.511601, 2.698004, 2.999453, 3.582235"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.047100, 0.047100, 0.047100, 0.047100, 0.047100",\ + "0.093802, 0.093802, 0.093802, 0.093802, 0.093802",\ + "0.225237, 0.225237, 0.225237, 0.225237, 0.225237",\ + "0.723332, 0.723332, 0.723332, 0.723332, 0.723332",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.047100, 0.047100, 0.047100, 0.047100, 0.047100",\ + "0.093802, 0.093802, 0.093802, 0.093802, 0.093802",\ + "0.225237, 0.225237, 0.225237, 0.225237, 0.225237",\ + "0.723332, 0.723332, 0.723332, 0.723332, 0.723332",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.047100, 0.047100, 0.047100, 0.047100, 0.047100",\ + "0.093802, 0.093802, 0.093802, 0.093802, 0.093802",\ + "0.225237, 0.225237, 0.225237, 0.225237, 0.225237",\ + "0.723332, 0.723332, 0.723332, 0.723332, 0.723332",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.047100, 0.047100, 0.047100, 0.047100, 0.047100",\ + "0.093802, 0.093802, 0.093802, 0.093802, 0.093802",\ + "0.225237, 0.225237, 0.225237, 0.225237, 0.225237",\ + "0.723332, 0.723332, 0.723332, 0.723332, 0.723332",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.047100, 0.047100, 0.047100, 0.047100, 0.047100",\ + "0.093802, 0.093802, 0.093802, 0.093802, 0.093802",\ + "0.225237, 0.225237, 0.225237, 0.225237, 0.225237",\ + "0.723332, 0.723332, 0.723332, 0.723332, 0.723332",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.431434, 0.699219, 0.960799, 1.400496, 2.279891",\ + "0.455832, 0.723618, 0.985198, 1.424895, 2.304290",\ + "0.506856, 0.774642, 1.036222, 1.475919, 2.355314",\ + "0.673635, 0.941421, 1.203001, 1.642698, 2.522093",\ + "1.261229, 1.529015, 1.790595, 2.230292, 3.109687",\ + "0.520138, 0.787294, 1.049440, 1.488726, 2.367296",\ + "0.544536, 0.811693, 1.073839, 1.513124, 2.391695",\ + "0.595560, 0.862717, 1.124863, 1.564148, 2.442719",\ + "0.762339, 1.029496, 1.291642, 1.730927, 2.609498",\ + "1.349933, 1.617090, 1.879236, 2.318521, 3.197092",\ + "0.613080, 0.880439, 1.141166, 1.580890, 2.460338",\ + "0.637479, 0.904838, 1.165565, 1.605289, 2.484737",\ + "0.688503, 0.955862, 1.216588, 1.656312, 2.535761",\ + "0.855281, 1.122641, 1.383367, 1.823091, 2.702539",\ + "1.442875, 1.710235, 1.970961, 2.410685, 3.290133",\ + "0.678924, 0.949004, 1.208186, 1.647740, 2.526850",\ + "0.703322, 0.973402, 1.232584, 1.672139, 2.551248",\ + "0.754346, 1.024426, 1.283608, 1.723163, 2.602272",\ + "0.921125, 1.191205, 1.450387, 1.889941, 2.769051",\ + "1.508719, 1.778799, 2.037981, 2.477535, 3.356645",\ + "1.025445, 1.329839, 1.578848, 2.016894, 2.892985",\ + "1.049844, 1.354238, 1.603247, 2.041293, 2.917384",\ + "1.100868, 1.405262, 1.654271, 2.092317, 2.968408",\ + "1.267646, 1.572041, 1.821050, 2.259095, 3.135186",\ + "1.855240, 2.159635, 2.408644, 2.846689, 3.722780"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.045359, 0.045359, 0.045359, 0.045359, 0.045359",\ + "0.074479, 0.074479, 0.074479, 0.074479, 0.074479",\ + "0.150687, 0.150687, 0.150687, 0.150687, 0.150687",\ + "0.448891, 0.448891, 0.448891, 0.448891, 0.448891",\ + "1.523991, 1.523991, 1.523991, 1.523991, 1.523991",\ + "0.045359, 0.045359, 0.045359, 0.045359, 0.045359",\ + "0.074479, 0.074479, 0.074479, 0.074479, 0.074479",\ + "0.150687, 0.150687, 0.150687, 0.150687, 0.150687",\ + "0.448891, 0.448891, 0.448891, 0.448891, 0.448891",\ + "1.523991, 1.523991, 1.523991, 1.523991, 1.523991",\ + "0.045359, 0.045359, 0.045359, 0.045359, 0.045359",\ + "0.074479, 0.074479, 0.074479, 0.074479, 0.074479",\ + "0.150687, 0.150687, 0.150687, 0.150687, 0.150687",\ + "0.448891, 0.448891, 0.448891, 0.448891, 0.448891",\ + "1.523991, 1.523991, 1.523991, 1.523991, 1.523991",\ + "0.045359, 0.045359, 0.045359, 0.045359, 0.045359",\ + "0.074479, 0.074479, 0.074479, 0.074479, 0.074479",\ + "0.150687, 0.150687, 0.150687, 0.150687, 0.150687",\ + "0.448891, 0.448891, 0.448891, 0.448891, 0.448891",\ + "1.523991, 1.523991, 1.523991, 1.523991, 1.523991",\ + "0.045359, 0.045359, 0.045359, 0.045359, 0.045359",\ + "0.074479, 0.074479, 0.074479, 0.074479, 0.074479",\ + "0.150687, 0.150687, 0.150687, 0.150687, 0.150687",\ + "0.448891, 0.448891, 0.448891, 0.448891, 0.448891",\ + "1.523991, 1.523991, 1.523991, 1.523991, 1.523991"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[5]_redg_2732*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[1]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.469363, 0.732936, 1.009209, 1.477938, 2.415398",\ + "0.499182, 0.762756, 1.039028, 1.507758, 2.445217",\ + "0.570906, 0.834480, 1.110752, 1.579482, 2.516941",\ + "0.827357, 1.090931, 1.367203, 1.835933, 2.773392",\ + "1.738997, 2.002571, 2.278844, 2.747575, 3.685036",\ + "0.557557, 0.820477, 1.096777, 1.564654, 2.501331",\ + "0.587376, 0.850296, 1.126596, 1.594473, 2.531151",\ + "0.659100, 0.922021, 1.198320, 1.666197, 2.602875",\ + "0.915551, 1.178471, 1.454771, 1.922648, 2.859325",\ + "1.827192, 2.090112, 2.366412, 2.834290, 3.770969",\ + "0.645873, 0.909457, 1.184741, 1.652276, 2.588286",\ + "0.675692, 0.939277, 1.214561, 1.682096, 2.618106",\ + "0.747417, 1.011001, 1.286285, 1.753820, 2.689830",\ + "1.003868, 1.267452, 1.542736, 2.010271, 2.946280",\ + "1.915508, 2.179092, 2.454377, 2.921913, 3.857924",\ + "0.708369, 0.975092, 1.248881, 1.716190, 2.651795",\ + "0.738189, 1.004912, 1.278701, 1.746009, 2.681615",\ + "0.809913, 1.076636, 1.350425, 1.817733, 2.753339",\ + "1.066364, 1.333087, 1.606875, 2.074184, 3.009789",\ + "1.978004, 2.244727, 2.518517, 2.985826, 3.921433",\ + "1.037495, 1.339423, 1.600748, 2.065540, 2.997252",\ + "1.067314, 1.369243, 1.630568, 2.095359, 3.027071",\ + "1.139038, 1.440967, 1.702292, 2.167083, 3.098795",\ + "1.395489, 1.697417, 1.958743, 2.423534, 3.355246",\ + "2.307129, 2.609058, 2.870384, 3.335176, 4.266890"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.047100, 0.047100, 0.047099, 0.047099, 0.047099",\ + "0.093802, 0.093802, 0.093802, 0.093802, 0.093802",\ + "0.225237, 0.225237, 0.225237, 0.225237, 0.225236",\ + "0.723332, 0.723332, 0.723330, 0.723327, 0.723319",\ + "2.463217, 2.463217, 2.463218, 2.463218, 2.463218",\ + "0.047100, 0.047100, 0.047099, 0.047099, 0.047099",\ + "0.093802, 0.093802, 0.093802, 0.093802, 0.093802",\ + "0.225237, 0.225237, 0.225237, 0.225237, 0.225236",\ + "0.723332, 0.723332, 0.723330, 0.723327, 0.723319",\ + "2.463217, 2.463217, 2.463218, 2.463218, 2.463218",\ + "0.047100, 0.047100, 0.047099, 0.047099, 0.047099",\ + "0.093802, 0.093802, 0.093802, 0.093802, 0.093802",\ + "0.225237, 0.225237, 0.225237, 0.225237, 0.225236",\ + "0.723332, 0.723332, 0.723330, 0.723327, 0.723319",\ + "2.463217, 2.463217, 2.463218, 2.463218, 2.463218",\ + "0.047100, 0.047100, 0.047099, 0.047099, 0.047099",\ + "0.093802, 0.093802, 0.093802, 0.093802, 0.093802",\ + "0.225237, 0.225237, 0.225237, 0.225237, 0.225236",\ + "0.723332, 0.723332, 0.723330, 0.723327, 0.723319",\ + "2.463217, 2.463217, 2.463218, 2.463218, 2.463218",\ + "0.047100, 0.047100, 0.047099, 0.047099, 0.047099",\ + "0.093802, 0.093802, 0.093802, 0.093802, 0.093802",\ + "0.225237, 0.225237, 0.225237, 0.225237, 0.225236",\ + "0.723332, 0.723332, 0.723330, 0.723327, 0.723319",\ + "2.463217, 2.463218, 2.463218, 2.463218, 2.463218"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.414387, 0.596819, 0.793211, 1.102263, 1.697070",\ + "0.438785, 0.621217, 0.817609, 1.126662, 1.721470",\ + "0.489809, 0.672241, 0.868633, 1.177686, 1.772493",\ + "0.656588, 0.839020, 1.035412, 1.344465, 1.939272",\ + "1.244182, 1.426614, 1.623006, 1.932059, 2.526866",\ + "0.501801, 0.684204, 0.880704, 1.189568, 1.784423",\ + "0.526200, 0.708603, 0.905102, 1.213968, 1.808823",\ + "0.577224, 0.759627, 0.956126, 1.264991, 1.859847",\ + "0.744003, 0.926405, 1.122905, 1.431770, 2.026625",\ + "1.331597, 1.513999, 1.710499, 2.019364, 2.614220",\ + "0.582678, 0.764541, 0.960731, 1.269597, 1.864455",\ + "0.607077, 0.788939, 0.985129, 1.293996, 1.888855",\ + "0.658100, 0.839963, 1.036153, 1.345020, 1.939878",\ + "0.824879, 1.006742, 1.202932, 1.511798, 2.106657",\ + "1.412473, 1.594336, 1.790526, 2.099392, 2.694252",\ + "0.640324, 0.822089, 1.018274, 1.326842, 1.921102",\ + "0.664723, 0.846488, 1.042673, 1.351241, 1.945503",\ + "0.715747, 0.897512, 1.093697, 1.402265, 1.996526",\ + "0.882525, 1.064290, 1.260476, 1.569043, 2.163304",\ + "1.470119, 1.651884, 1.848070, 2.156638, 2.750899",\ + "0.942532, 1.127314, 1.321908, 1.629857, 2.222949",\ + "0.966931, 1.151712, 1.346307, 1.654256, 2.247349",\ + "1.017955, 1.202736, 1.397331, 1.705280, 2.298373",\ + "1.184733, 1.369515, 1.564109, 1.872058, 2.465151",\ + "1.772327, 1.957109, 2.151703, 2.459652, 3.052746"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.045359, 0.045359, 0.045359, 0.045359, 0.045359",\ + "0.074479, 0.074479, 0.074479, 0.074479, 0.074479",\ + "0.150687, 0.150687, 0.150687, 0.150687, 0.150687",\ + "0.448891, 0.448891, 0.448891, 0.448891, 0.448891",\ + "1.523991, 1.523991, 1.523991, 1.523992, 1.523996",\ + "0.045359, 0.045359, 0.045359, 0.045359, 0.045359",\ + "0.074479, 0.074479, 0.074479, 0.074479, 0.074479",\ + "0.150687, 0.150687, 0.150687, 0.150687, 0.150687",\ + "0.448891, 0.448891, 0.448891, 0.448891, 0.448891",\ + "1.523991, 1.523991, 1.523991, 1.523992, 1.523996",\ + "0.045359, 0.045359, 0.045359, 0.045359, 0.045359",\ + "0.074479, 0.074479, 0.074479, 0.074479, 0.074479",\ + "0.150687, 0.150687, 0.150687, 0.150687, 0.150687",\ + "0.448891, 0.448891, 0.448891, 0.448891, 0.448891",\ + "1.523991, 1.523991, 1.523991, 1.523992, 1.523996",\ + "0.045359, 0.045359, 0.045359, 0.045359, 0.045359",\ + "0.074479, 0.074479, 0.074479, 0.074479, 0.074479",\ + "0.150687, 0.150687, 0.150687, 0.150687, 0.150687",\ + "0.448891, 0.448891, 0.448891, 0.448891, 0.448891",\ + "1.523991, 1.523991, 1.523991, 1.523992, 1.523996",\ + "0.045359, 0.045359, 0.045359, 0.045359, 0.045359",\ + "0.074479, 0.074479, 0.074479, 0.074479, 0.074479",\ + "0.150687, 0.150687, 0.150687, 0.150687, 0.150687",\ + "0.448891, 0.448891, 0.448891, 0.448891, 0.448891",\ + "1.523991, 1.523991, 1.523991, 1.523992, 1.523996"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[5]_redg_2657*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[2]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.465387, 0.725016, 0.996889, 1.453768, 2.367528",\ + "0.495207, 0.754836, 1.026708, 1.483588, 2.397348",\ + "0.566931, 0.826560, 1.098432, 1.555312, 2.469071",\ + "0.823382, 1.083011, 1.354883, 1.811763, 2.725522",\ + "1.735022, 1.994652, 2.266525, 2.723405, 3.637165",\ + "0.553492, 0.812550, 1.084419, 1.540484, 2.453462",\ + "0.583312, 0.842370, 1.114239, 1.570303, 2.483281",\ + "0.655036, 0.914094, 1.185963, 1.642027, 2.555005",\ + "0.911487, 1.170545, 1.442413, 1.898478, 2.811456",\ + "1.823127, 2.082185, 2.354055, 2.810120, 3.723099",\ + "0.641522, 0.901516, 1.172383, 1.628106, 2.540417",\ + "0.671342, 0.931335, 1.202203, 1.657926, 2.570236",\ + "0.743066, 1.003059, 1.273927, 1.729650, 2.641960",\ + "0.999517, 1.259510, 1.530378, 1.986101, 2.898411",\ + "1.911157, 2.171151, 2.442019, 2.897743, 3.810054",\ + "0.703743, 0.967129, 1.236521, 1.692020, 2.603926",\ + "0.733563, 0.996949, 1.266341, 1.721840, 2.633745",\ + "0.805287, 1.068673, 1.338065, 1.793564, 2.705469",\ + "1.061738, 1.325124, 1.594516, 2.050014, 2.961920",\ + "1.973378, 2.236765, 2.506157, 2.961657, 3.873563",\ + "1.031131, 1.331204, 1.588269, 2.041321, 2.949382",\ + "1.060951, 1.361024, 1.618088, 2.071141, 2.979202",\ + "1.132675, 1.432748, 1.689812, 2.142864, 3.050925",\ + "1.389125, 1.689199, 1.946263, 2.399315, 3.307376",\ + "2.300766, 2.600840, 2.857904, 3.310957, 4.219019"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.047100, 0.047100, 0.047099, 0.047099, 0.047099",\ + "0.093802, 0.093802, 0.093802, 0.093802, 0.093802",\ + "0.225237, 0.225237, 0.225237, 0.225237, 0.225236",\ + "0.723332, 0.723332, 0.723329, 0.723323, 0.723311",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.047100, 0.047100, 0.047099, 0.047099, 0.047099",\ + "0.093802, 0.093802, 0.093802, 0.093802, 0.093802",\ + "0.225237, 0.225237, 0.225237, 0.225237, 0.225236",\ + "0.723332, 0.723331, 0.723329, 0.723323, 0.723311",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.047100, 0.047100, 0.047099, 0.047099, 0.047099",\ + "0.093802, 0.093802, 0.093802, 0.093802, 0.093802",\ + "0.225237, 0.225237, 0.225237, 0.225237, 0.225236",\ + "0.723332, 0.723331, 0.723329, 0.723323, 0.723311",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.047100, 0.047100, 0.047099, 0.047099, 0.047099",\ + "0.093802, 0.093802, 0.093802, 0.093802, 0.093802",\ + "0.225237, 0.225237, 0.225237, 0.225237, 0.225236",\ + "0.723332, 0.723331, 0.723329, 0.723323, 0.723311",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.047100, 0.047099, 0.047099, 0.047099, 0.047099",\ + "0.093802, 0.093802, 0.093802, 0.093802, 0.093802",\ + "0.225237, 0.225237, 0.225237, 0.225237, 0.225236",\ + "0.723332, 0.723331, 0.723329, 0.723323, 0.723311",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.412725, 0.595266, 0.791521, 1.100738, 1.696032",\ + "0.437124, 0.619665, 0.815920, 1.125137, 1.720433",\ + "0.488148, 0.670689, 0.866944, 1.176161, 1.771456",\ + "0.654926, 0.837467, 1.033722, 1.342939, 1.938234",\ + "1.242520, 1.425061, 1.621316, 1.930533, 2.525829",\ + "0.500145, 0.682652, 0.879014, 1.188043, 1.783386",\ + "0.524544, 0.707050, 0.903413, 1.212442, 1.807786",\ + "0.575568, 0.758074, 0.954436, 1.263466, 1.858810",\ + "0.742347, 0.924853, 1.121215, 1.430244, 2.025588",\ + "1.329941, 1.512447, 1.708809, 2.017838, 2.613183",\ + "0.581013, 0.762988, 0.959041, 1.268071, 1.863418",\ + "0.605412, 0.787387, 0.983440, 1.292470, 1.887818",\ + "0.656435, 0.838411, 1.034463, 1.343494, 1.938841",\ + "0.823214, 1.005190, 1.201242, 1.510273, 2.105619",\ + "1.410808, 1.592784, 1.788836, 2.097867, 2.693214",\ + "0.638652, 0.820537, 1.016585, 1.325316, 1.920065",\ + "0.663050, 0.844936, 1.040983, 1.349715, 1.944465",\ + "0.714074, 0.895960, 1.092007, 1.400739, 1.995489",\ + "0.880853, 1.062738, 1.258786, 1.567518, 2.162267",\ + "1.468447, 1.650332, 1.846380, 2.155112, 2.749862",\ + "0.940747, 1.125763, 1.320219, 1.628331, 2.221912",\ + "0.965146, 1.150162, 1.344617, 1.652730, 2.246312",\ + "1.016169, 1.201186, 1.395641, 1.703754, 2.297336",\ + "1.182948, 1.367965, 1.562420, 1.870533, 2.464114",\ + "1.770542, 1.955559, 2.150014, 2.458127, 3.051709"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.045359, 0.045359, 0.045359, 0.045359, 0.045359",\ + "0.074479, 0.074479, 0.074479, 0.074479, 0.074479",\ + "0.150687, 0.150687, 0.150687, 0.150687, 0.150687",\ + "0.448891, 0.448891, 0.448891, 0.448891, 0.448891",\ + "1.523991, 1.523991, 1.523991, 1.523993, 1.523996",\ + "0.045359, 0.045359, 0.045359, 0.045359, 0.045359",\ + "0.074479, 0.074479, 0.074479, 0.074479, 0.074479",\ + "0.150687, 0.150687, 0.150687, 0.150687, 0.150687",\ + "0.448891, 0.448891, 0.448891, 0.448891, 0.448891",\ + "1.523991, 1.523991, 1.523991, 1.523993, 1.523996",\ + "0.045359, 0.045359, 0.045359, 0.045359, 0.045359",\ + "0.074479, 0.074479, 0.074479, 0.074479, 0.074479",\ + "0.150687, 0.150687, 0.150687, 0.150687, 0.150687",\ + "0.448891, 0.448891, 0.448891, 0.448891, 0.448891",\ + "1.523991, 1.523991, 1.523991, 1.523993, 1.523996",\ + "0.045359, 0.045359, 0.045359, 0.045359, 0.045359",\ + "0.074479, 0.074479, 0.074479, 0.074479, 0.074479",\ + "0.150687, 0.150687, 0.150687, 0.150687, 0.150687",\ + "0.448891, 0.448891, 0.448891, 0.448891, 0.448891",\ + "1.523991, 1.523991, 1.523991, 1.523993, 1.523996",\ + "0.045359, 0.045359, 0.045359, 0.045359, 0.045359",\ + "0.074479, 0.074479, 0.074479, 0.074479, 0.074479",\ + "0.150687, 0.150687, 0.150687, 0.150687, 0.150687",\ + "0.448891, 0.448891, 0.448891, 0.448891, 0.448891",\ + "1.523991, 1.523991, 1.523991, 1.523993, 1.523996"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[5]_redg_2600*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[3]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.557671, 0.736098, 0.916358, 1.202564, 1.753681",\ + "0.587491, 0.765917, 0.946178, 1.232384, 1.783501",\ + "0.659215, 0.837641, 1.017902, 1.304108, 1.855225",\ + "0.915666, 1.094092, 1.274353, 1.560559, 2.111676",\ + "1.827306, 2.005732, 2.185993, 2.472199, 3.023316",\ + "0.642609, 0.821370, 1.002273, 1.288485, 1.840060",\ + "0.672429, 0.851190, 1.032093, 1.318304, 1.869879",\ + "0.744153, 0.922914, 1.103817, 1.390028, 1.941603",\ + "1.000604, 1.179365, 1.360268, 1.646479, 2.198054",\ + "1.912244, 2.091005, 2.271908, 2.558120, 3.109695",\ + "0.718516, 0.896813, 1.077082, 1.363081, 1.914232",\ + "0.748335, 0.926633, 1.106902, 1.392901, 1.944052",\ + "0.820059, 0.998357, 1.178626, 1.464625, 2.015776",\ + "1.076510, 1.254808, 1.435077, 1.721076, 2.272227",\ + "1.988150, 2.166448, 2.346717, 2.632716, 3.183867",\ + "0.772868, 0.951325, 1.131733, 1.417621, 1.968549",\ + "0.802687, 0.981145, 1.161553, 1.447441, 1.998369",\ + "0.874411, 1.052869, 1.233277, 1.519165, 2.070093",\ + "1.130862, 1.309320, 1.489728, 1.775616, 2.326544",\ + "2.042502, 2.220960, 2.401368, 2.687256, 3.238184",\ + "1.054290, 1.236552, 1.415684, 1.701348, 2.251827",\ + "1.084109, 1.266372, 1.445503, 1.731167, 2.281647",\ + "1.155833, 1.338096, 1.517227, 1.802891, 2.353371",\ + "1.412284, 1.594547, 1.773678, 2.059342, 2.609822",\ + "2.323924, 2.506187, 2.685318, 2.970982, 3.521462"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.047100, 0.047100, 0.047100, 0.047100, 0.047100",\ + "0.093802, 0.093802, 0.093802, 0.093802, 0.093802",\ + "0.225237, 0.225237, 0.225237, 0.225237, 0.225237",\ + "0.723332, 0.723332, 0.723332, 0.723332, 0.723332",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.047100, 0.047100, 0.047100, 0.047100, 0.047100",\ + "0.093802, 0.093802, 0.093802, 0.093802, 0.093802",\ + "0.225237, 0.225237, 0.225237, 0.225237, 0.225237",\ + "0.723332, 0.723332, 0.723332, 0.723332, 0.723332",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.047100, 0.047100, 0.047100, 0.047100, 0.047100",\ + "0.093802, 0.093802, 0.093802, 0.093802, 0.093802",\ + "0.225237, 0.225237, 0.225237, 0.225237, 0.225237",\ + "0.723332, 0.723332, 0.723332, 0.723332, 0.723332",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.047100, 0.047100, 0.047100, 0.047100, 0.047100",\ + "0.093802, 0.093802, 0.093802, 0.093802, 0.093802",\ + "0.225237, 0.225237, 0.225237, 0.225237, 0.225237",\ + "0.723332, 0.723332, 0.723332, 0.723332, 0.723332",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.047100, 0.047100, 0.047100, 0.047100, 0.047100",\ + "0.093802, 0.093802, 0.093802, 0.093802, 0.093802",\ + "0.225237, 0.225237, 0.225237, 0.225237, 0.225237",\ + "0.723332, 0.723332, 0.723332, 0.723332, 0.723332",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.429998, 0.695167, 0.954369, 1.390552, 2.262917",\ + "0.454396, 0.719566, 0.978768, 1.414950, 2.287315",\ + "0.505420, 0.770590, 1.029792, 1.465974, 2.338339",\ + "0.672199, 0.937369, 1.196570, 1.632753, 2.505118",\ + "1.259793, 1.524963, 1.784164, 2.220347, 3.092712",\ + "0.518663, 0.783242, 1.043010, 1.478781, 2.350322",\ + "0.543062, 0.807641, 1.067409, 1.503179, 2.374721",\ + "0.594086, 0.858665, 1.118433, 1.554203, 2.425745",\ + "0.760864, 1.025444, 1.285211, 1.720982, 2.592523",\ + "1.348459, 1.613038, 1.872805, 2.308576, 3.180117",\ + "0.611470, 0.876365, 1.134735, 1.570945, 2.443364",\ + "0.635869, 0.900764, 1.159134, 1.595343, 2.467762",\ + "0.686893, 0.951788, 1.210158, 1.646367, 2.518786",\ + "0.853671, 1.118567, 1.376937, 1.813146, 2.685565",\ + "1.441265, 1.706161, 1.964531, 2.400740, 3.273159",\ + "0.677192, 0.944899, 1.201755, 1.637795, 2.509875",\ + "0.701591, 0.969298, 1.226154, 1.662194, 2.534274",\ + "0.752615, 1.020322, 1.277178, 1.713217, 2.585298",\ + "0.919394, 1.187101, 1.443956, 1.879996, 2.752076",\ + "1.506988, 1.774695, 2.031551, 2.467590, 3.339670",\ + "1.022982, 1.325398, 1.572386, 2.006926, 2.876008",\ + "1.047381, 1.349797, 1.596784, 2.031325, 2.900407",\ + "1.098405, 1.400820, 1.647808, 2.082349, 2.951431",\ + "1.265183, 1.567599, 1.814587, 2.249127, 3.118209",\ + "1.852777, 2.155193, 2.402181, 2.836721, 3.705803"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.045359, 0.045359, 0.045359, 0.045359, 0.045359",\ + "0.074479, 0.074479, 0.074479, 0.074479, 0.074479",\ + "0.150687, 0.150687, 0.150687, 0.150687, 0.150687",\ + "0.448891, 0.448891, 0.448891, 0.448891, 0.448891",\ + "1.523991, 1.523991, 1.523991, 1.523991, 1.523991",\ + "0.045359, 0.045359, 0.045359, 0.045359, 0.045359",\ + "0.074479, 0.074479, 0.074479, 0.074479, 0.074479",\ + "0.150687, 0.150687, 0.150687, 0.150687, 0.150687",\ + "0.448891, 0.448891, 0.448891, 0.448891, 0.448891",\ + "1.523991, 1.523991, 1.523991, 1.523991, 1.523991",\ + "0.045359, 0.045359, 0.045359, 0.045359, 0.045359",\ + "0.074479, 0.074479, 0.074479, 0.074479, 0.074479",\ + "0.150687, 0.150687, 0.150687, 0.150687, 0.150687",\ + "0.448891, 0.448891, 0.448891, 0.448891, 0.448891",\ + "1.523991, 1.523991, 1.523991, 1.523991, 1.523991",\ + "0.045359, 0.045359, 0.045359, 0.045359, 0.045359",\ + "0.074479, 0.074479, 0.074479, 0.074479, 0.074479",\ + "0.150687, 0.150687, 0.150687, 0.150687, 0.150687",\ + "0.448891, 0.448891, 0.448891, 0.448891, 0.448891",\ + "1.523991, 1.523991, 1.523991, 1.523991, 1.523991",\ + "0.045359, 0.045359, 0.045359, 0.045359, 0.045359",\ + "0.074479, 0.074479, 0.074479, 0.074479, 0.074479",\ + "0.150687, 0.150687, 0.150687, 0.150687, 0.150687",\ + "0.448891, 0.448891, 0.448891, 0.448891, 0.448891",\ + "1.523991, 1.523991, 1.523991, 1.523991, 1.523991"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[5]_redg_2542*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + values ( "0.324944, 0.354764, 0.426488, 0.682940, 1.594576",\ + "0.412335, 0.442155, 0.513879, 0.770331, 1.681967",\ + "0.493254, 0.523074, 0.594798, 0.851250, 1.762885",\ + "0.550995, 0.580814, 0.652539, 0.908991, 1.820623",\ + "0.854260, 0.883835, 0.955245, 1.211697, 2.123717"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + values ( "0.047100, 0.093803, 0.225238, 0.723294, 2.463217",\ + "0.047100, 0.093803, 0.225317, 0.723294, 2.463217",\ + "0.047100, 0.093803, 0.225549, 0.723294, 2.463317",\ + "0.047101, 0.093803, 0.225549, 0.723294, 2.463317",\ + "0.047256, 0.093828, 0.225883, 0.723320, 2.463779"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + values ( "0.309881, 0.334280, 0.385304, 0.552083, 1.139677",\ + "0.397274, 0.421673, 0.472696, 0.639475, 1.227069",\ + "0.478143, 0.502542, 0.553566, 0.720345, 1.307939",\ + "0.535792, 0.560191, 0.611215, 0.777993, 1.365587",\ + "0.838449, 0.862847, 0.913871, 1.080650, 1.668244"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + values ( "0.045359, 0.074479, 0.150693, 0.448891, 1.524390",\ + "0.045359, 0.074479, 0.150693, 0.448891, 1.524390",\ + "0.045359, 0.074479, 0.150693, 0.448891, 1.524264",\ + "0.045359, 0.074479, 0.150693, 0.448891, 1.524028",\ + "0.045353, 0.074413, 0.150693, 0.448886, 1.523991"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[5]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[0]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.517919, 0.698033, 0.885611, 1.187591, 1.770688",\ + "0.546784, 0.726898, 0.914476, 1.216456, 1.799552",\ + "0.617826, 0.797940, 0.985519, 1.287498, 1.870595",\ + "0.874029, 1.054142, 1.241721, 1.543701, 2.126797",\ + "1.786688, 1.966801, 2.154380, 2.456360, 3.039456",\ + "0.602858, 0.782869, 0.970682, 1.273098, 1.857066",\ + "0.631723, 0.811734, 0.999546, 1.301962, 1.885931",\ + "0.702765, 0.882776, 1.070589, 1.373005, 1.956973",\ + "0.958967, 1.138978, 1.326791, 1.629207, 2.213175",\ + "1.871626, 2.051637, 2.239450, 2.541866, 3.125834",\ + "0.678770, 0.858312, 1.045491, 1.347694, 1.931238",\ + "0.707635, 0.887177, 1.074355, 1.376559, 1.960103",\ + "0.778677, 0.958219, 1.145398, 1.447601, 2.031145",\ + "1.034879, 1.214422, 1.401600, 1.703804, 2.287347",\ + "1.947538, 2.127081, 2.314259, 2.616463, 3.200006",\ + "0.733139, 0.913064, 1.100379, 1.402300, 1.985556",\ + "0.762004, 0.941928, 1.129244, 1.431165, 2.014421",\ + "0.833046, 1.012970, 1.200286, 1.502207, 2.085463",\ + "1.089248, 1.269173, 1.456489, 1.758409, 2.341665",\ + "2.001907, 2.181832, 2.369148, 2.671068, 3.254324",\ + "1.014734, 1.198629, 1.384555, 1.686026, 2.268833",\ + "1.043599, 1.227494, 1.413420, 1.714891, 2.297698",\ + "1.114641, 1.298536, 1.484462, 1.785933, 2.368740",\ + "1.370843, 1.554738, 1.740664, 2.042135, 2.624942",\ + "2.283502, 2.467397, 2.653323, 2.954794, 3.537601"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.043742, 0.043742, 0.043742, 0.043742, 0.043742",\ + "0.091388, 0.091388, 0.091388, 0.091388, 0.091388",\ + "0.223754, 0.223754, 0.223754, 0.223754, 0.223754",\ + "0.713686, 0.713686, 0.713686, 0.713686, 0.713686",\ + "2.456796, 2.456796, 2.456796, 2.456796, 2.456796",\ + "0.043742, 0.043742, 0.043742, 0.043742, 0.043742",\ + "0.091388, 0.091388, 0.091388, 0.091388, 0.091388",\ + "0.223754, 0.223754, 0.223754, 0.223754, 0.223754",\ + "0.713686, 0.713686, 0.713686, 0.713686, 0.713686",\ + "2.456796, 2.456796, 2.456796, 2.456796, 2.456796",\ + "0.043742, 0.043742, 0.043742, 0.043742, 0.043742",\ + "0.091388, 0.091388, 0.091388, 0.091388, 0.091388",\ + "0.223754, 0.223754, 0.223754, 0.223754, 0.223754",\ + "0.713686, 0.713686, 0.713686, 0.713686, 0.713686",\ + "2.456796, 2.456796, 2.456796, 2.456796, 2.456796",\ + "0.043742, 0.043742, 0.043742, 0.043742, 0.043742",\ + "0.091388, 0.091388, 0.091388, 0.091388, 0.091388",\ + "0.223754, 0.223754, 0.223754, 0.223754, 0.223754",\ + "0.713686, 0.713686, 0.713686, 0.713686, 0.713686",\ + "2.456796, 2.456796, 2.456796, 2.456796, 2.456796",\ + "0.043742, 0.043742, 0.043742, 0.043742, 0.043742",\ + "0.091388, 0.091388, 0.091388, 0.091388, 0.091388",\ + "0.223754, 0.223754, 0.223754, 0.223754, 0.223754",\ + "0.713686, 0.713686, 0.713686, 0.713686, 0.713686",\ + "2.456796, 2.456796, 2.456796, 2.456796, 2.456796"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.390477, 0.658088, 0.919489, 1.359266, 2.238427",\ + "0.413219, 0.680829, 0.942230, 1.382007, 2.261168",\ + "0.462500, 0.730110, 0.991511, 1.431288, 2.310449",\ + "0.628402, 0.896013, 1.157414, 1.597191, 2.476352",\ + "1.214556, 1.482167, 1.743568, 2.183345, 3.062506",\ + "0.479181, 0.746163, 1.008130, 1.447495, 2.325832",\ + "0.501923, 0.768904, 1.030871, 1.470236, 2.348573",\ + "0.551204, 0.818185, 1.080152, 1.519517, 2.397854",\ + "0.717106, 0.984088, 1.246055, 1.685420, 2.563757",\ + "1.303261, 1.570242, 1.832209, 2.271574, 3.149911",\ + "0.572124, 0.839483, 1.100174, 1.539741, 2.418874",\ + "0.594865, 0.862224, 1.122916, 1.562482, 2.441615",\ + "0.644146, 0.911506, 1.172197, 1.611763, 2.490896",\ + "0.810049, 1.077408, 1.338099, 1.777666, 2.656799",\ + "1.396203, 1.663562, 1.924254, 2.363820, 3.242953",\ + "0.637967, 0.908047, 1.167230, 1.606752, 2.485795",\ + "0.660708, 0.930789, 1.189972, 1.629493, 2.508537",\ + "0.709990, 0.980070, 1.239253, 1.678774, 2.557818",\ + "0.875892, 1.145972, 1.405155, 1.844677, 2.723721",\ + "1.462046, 1.732126, 1.991310, 2.430831, 3.309875",\ + "0.984489, 1.288883, 1.537901, 1.975978, 2.852131",\ + "1.007230, 1.311624, 1.560642, 1.998719, 2.874872",\ + "1.056511, 1.360905, 1.609924, 2.048000, 2.924153",\ + "1.222414, 1.526808, 1.775826, 2.213903, 3.090056",\ + "1.808568, 2.112962, 2.361980, 2.800057, 3.676210"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.037338, 0.037338, 0.037338, 0.037338, 0.037338",\ + "0.066008, 0.066008, 0.066008, 0.066008, 0.066008",\ + "0.143978, 0.143978, 0.143978, 0.143978, 0.143978",\ + "0.444353, 0.444353, 0.444354, 0.444354, 0.444354",\ + "1.518979, 1.518979, 1.518979, 1.518979, 1.518979",\ + "0.037338, 0.037338, 0.037338, 0.037338, 0.037338",\ + "0.066008, 0.066008, 0.066008, 0.066008, 0.066008",\ + "0.143978, 0.143978, 0.143978, 0.143978, 0.143978",\ + "0.444353, 0.444353, 0.444354, 0.444354, 0.444354",\ + "1.518979, 1.518979, 1.518979, 1.518979, 1.518979",\ + "0.037338, 0.037338, 0.037338, 0.037338, 0.037338",\ + "0.066008, 0.066008, 0.066008, 0.066008, 0.066008",\ + "0.143978, 0.143978, 0.143978, 0.143978, 0.143978",\ + "0.444353, 0.444353, 0.444354, 0.444354, 0.444354",\ + "1.518979, 1.518979, 1.518979, 1.518979, 1.518979",\ + "0.037338, 0.037338, 0.037338, 0.037338, 0.037338",\ + "0.066008, 0.066008, 0.066008, 0.066008, 0.066008",\ + "0.143978, 0.143978, 0.143978, 0.143978, 0.143978",\ + "0.444353, 0.444353, 0.444354, 0.444354, 0.444354",\ + "1.518979, 1.518979, 1.518979, 1.518979, 1.518979",\ + "0.037338, 0.037338, 0.037338, 0.037338, 0.037338",\ + "0.066008, 0.066008, 0.066008, 0.066008, 0.066008",\ + "0.143978, 0.143978, 0.143978, 0.143978, 0.143978",\ + "0.444353, 0.444353, 0.444354, 0.444354, 0.444354",\ + "1.518979, 1.518979, 1.518979, 1.518979, 1.518979"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[5]_redg_min_2483*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[1]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.426028, 0.689559, 0.965679, 1.433811, 2.368817",\ + "0.454893, 0.718424, 0.994544, 1.462676, 2.397682",\ + "0.525935, 0.789466, 1.065586, 1.533718, 2.468724",\ + "0.782137, 1.045668, 1.321788, 1.789921, 2.724926",\ + "1.694796, 1.958328, 2.234447, 2.702580, 3.637585",\ + "0.514222, 0.777100, 1.053246, 1.520527, 2.454750",\ + "0.543087, 0.805965, 1.082111, 1.549392, 2.483615",\ + "0.614129, 0.877007, 1.153153, 1.620434, 2.554657",\ + "0.870331, 1.133209, 1.409355, 1.876636, 2.810860",\ + "1.782991, 2.045868, 2.322014, 2.789295, 3.723519",\ + "0.602538, 0.866079, 1.141211, 1.608167, 2.541705",\ + "0.631403, 0.894944, 1.170076, 1.637032, 2.570570",\ + "0.702445, 0.965986, 1.241118, 1.708074, 2.641613",\ + "0.958647, 1.222188, 1.497320, 1.964276, 2.897815",\ + "1.871307, 2.134848, 2.409979, 2.876935, 3.810474",\ + "0.665034, 0.931713, 1.205350, 1.672256, 2.605214",\ + "0.693899, 0.960578, 1.234215, 1.701121, 2.634079",\ + "0.764941, 1.031620, 1.305257, 1.772163, 2.705122",\ + "1.021144, 1.287822, 1.561460, 2.028365, 2.961324",\ + "1.933803, 2.200481, 2.474119, 2.941024, 3.873983",\ + "0.994160, 1.296028, 1.557214, 2.021699, 2.950670",\ + "1.023025, 1.324893, 1.586079, 2.050565, 2.979536",\ + "1.094067, 1.395935, 1.657121, 2.121607, 3.050578",\ + "1.350269, 1.652137, 1.913324, 2.377809, 3.306780",\ + "2.262928, 2.564796, 2.825983, 3.290468, 4.219439"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.043742, 0.043742, 0.043742, 0.043742, 0.043743",\ + "0.091388, 0.091388, 0.091388, 0.091388, 0.091389",\ + "0.223754, 0.223754, 0.223754, 0.223755, 0.223756",\ + "0.713686, 0.713686, 0.713687, 0.713690, 0.713695",\ + "2.456796, 2.456796, 2.456794, 2.456788, 2.456778",\ + "0.043742, 0.043742, 0.043742, 0.043742, 0.043743",\ + "0.091388, 0.091388, 0.091388, 0.091388, 0.091389",\ + "0.223754, 0.223754, 0.223754, 0.223755, 0.223756",\ + "0.713686, 0.713686, 0.713687, 0.713690, 0.713695",\ + "2.456796, 2.456796, 2.456794, 2.456788, 2.456778",\ + "0.043742, 0.043742, 0.043742, 0.043742, 0.043743",\ + "0.091388, 0.091388, 0.091388, 0.091388, 0.091389",\ + "0.223754, 0.223754, 0.223754, 0.223755, 0.223756",\ + "0.713686, 0.713686, 0.713687, 0.713690, 0.713695",\ + "2.456796, 2.456796, 2.456794, 2.456788, 2.456778",\ + "0.043742, 0.043742, 0.043742, 0.043742, 0.043743",\ + "0.091388, 0.091388, 0.091388, 0.091388, 0.091389",\ + "0.223754, 0.223754, 0.223754, 0.223755, 0.223756",\ + "0.713686, 0.713686, 0.713687, 0.713690, 0.713695",\ + "2.456796, 2.456796, 2.456794, 2.456788, 2.456778",\ + "0.043742, 0.043742, 0.043742, 0.043742, 0.043743",\ + "0.091388, 0.091388, 0.091388, 0.091388, 0.091389",\ + "0.223754, 0.223754, 0.223754, 0.223755, 0.223756",\ + "0.713686, 0.713686, 0.713687, 0.713690, 0.713695",\ + "2.456796, 2.456796, 2.456794, 2.456788, 2.456778"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.373432, 0.555490, 0.751724, 1.060905, 1.655389",\ + "0.396174, 0.578231, 0.774465, 1.083646, 1.678130",\ + "0.445455, 0.627512, 0.823746, 1.132927, 1.727411",\ + "0.611357, 0.793415, 0.989649, 1.298831, 1.893319",\ + "1.197512, 1.379569, 1.575803, 1.884983, 2.479466",\ + "0.460847, 0.642809, 0.839005, 1.148210, 1.742743",\ + "0.483588, 0.665550, 0.861746, 1.170951, 1.765483",\ + "0.532870, 0.714831, 0.911027, 1.220232, 1.814765",\ + "0.698772, 0.880733, 1.076930, 1.386137, 1.980672",\ + "1.284926, 1.466888, 1.663084, 1.972288, 2.566819",\ + "0.541724, 0.723145, 0.919032, 1.228239, 1.822774",\ + "0.564465, 0.745886, 0.941773, 1.250980, 1.845515",\ + "0.613746, 0.795168, 0.991054, 1.300261, 1.894796",\ + "0.779648, 0.961070, 1.156957, 1.466165, 2.060704",\ + "1.365803, 1.547224, 1.743111, 2.052317, 2.646851",\ + "0.599370, 0.780982, 0.976767, 1.285709, 1.879870",\ + "0.622111, 0.803723, 0.999508, 1.308450, 1.902611",\ + "0.671392, 0.853004, 1.048790, 1.357731, 1.951892",\ + "0.837295, 1.018907, 1.214692, 1.523636, 2.117800",\ + "1.423449, 1.605061, 1.800846, 2.109787, 2.703947",\ + "0.901578, 1.086359, 1.280431, 1.588916, 2.182188",\ + "0.924319, 1.109100, 1.303172, 1.611657, 2.204929",\ + "0.973600, 1.158382, 1.352453, 1.660938, 2.254210",\ + "1.139503, 1.324284, 1.518356, 1.826843, 2.420118",\ + "1.725657, 1.910438, 2.104510, 2.412994, 3.006265"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.037337, 0.037337, 0.037337, 0.037337, 0.037337",\ + "0.066008, 0.066008, 0.066008, 0.066008, 0.066009",\ + "0.143976, 0.143976, 0.143976, 0.143976, 0.143976",\ + "0.444332, 0.444332, 0.444332, 0.444332, 0.444332",\ + "1.518979, 1.518979, 1.518979, 1.518980, 1.518981",\ + "0.037337, 0.037337, 0.037337, 0.037337, 0.037337",\ + "0.066008, 0.066008, 0.066008, 0.066008, 0.066009",\ + "0.143976, 0.143976, 0.143976, 0.143976, 0.143976",\ + "0.444332, 0.444332, 0.444332, 0.444332, 0.444332",\ + "1.518979, 1.518979, 1.518979, 1.518980, 1.518981",\ + "0.037337, 0.037337, 0.037337, 0.037337, 0.037337",\ + "0.066008, 0.066008, 0.066008, 0.066008, 0.066009",\ + "0.143976, 0.143976, 0.143976, 0.143976, 0.143976",\ + "0.444332, 0.444332, 0.444332, 0.444332, 0.444332",\ + "1.518979, 1.518979, 1.518979, 1.518980, 1.518981",\ + "0.037337, 0.037337, 0.037337, 0.037337, 0.037337",\ + "0.066008, 0.066008, 0.066008, 0.066008, 0.066009",\ + "0.143976, 0.143976, 0.143976, 0.143976, 0.143976",\ + "0.444332, 0.444332, 0.444332, 0.444332, 0.444332",\ + "1.518979, 1.518979, 1.518979, 1.518980, 1.518981",\ + "0.037337, 0.037337, 0.037337, 0.037337, 0.037337",\ + "0.066008, 0.066008, 0.066008, 0.066008, 0.066009",\ + "0.143976, 0.143976, 0.143976, 0.143976, 0.143976",\ + "0.444332, 0.444332, 0.444332, 0.444332, 0.444332",\ + "1.518979, 1.518979, 1.518979, 1.518980, 1.518981"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[5]_redg_min_2405*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[2]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.422050, 0.681609, 0.953245, 1.409407, 2.320577",\ + "0.450915, 0.710474, 0.982110, 1.438272, 2.349442",\ + "0.521957, 0.781516, 1.053152, 1.509314, 2.420484",\ + "0.778159, 1.037718, 1.309354, 1.765517, 2.676687",\ + "1.690818, 1.950378, 2.222013, 2.678175, 3.589345",\ + "0.510155, 0.769142, 1.040774, 1.496122, 2.406510",\ + "0.539020, 0.798007, 1.069638, 1.524987, 2.435376",\ + "0.610062, 0.869049, 1.140681, 1.596030, 2.506418",\ + "0.866264, 1.125251, 1.396883, 1.852232, 2.762620",\ + "1.778923, 2.037910, 2.309542, 2.764891, 3.675279",\ + "0.598185, 0.858106, 1.128738, 1.583761, 2.493465",\ + "0.627050, 0.886971, 1.157603, 1.612626, 2.522331",\ + "0.698092, 0.958013, 1.228645, 1.683668, 2.593373",\ + "0.954294, 1.214216, 1.484847, 1.939871, 2.849576",\ + "1.866953, 2.126875, 2.397506, 2.852530, 3.762234",\ + "0.660406, 0.923718, 1.192876, 1.647836, 2.556974",\ + "0.689271, 0.952582, 1.221740, 1.676701, 2.585840",\ + "0.760313, 1.023625, 1.292783, 1.747743, 2.656882",\ + "1.016515, 1.279827, 1.548985, 2.003945, 2.913085",\ + "1.929174, 2.192486, 2.461644, 2.916604, 3.825743",\ + "0.987793, 1.287766, 1.544618, 1.997222, 2.902431",\ + "1.016658, 1.316631, 1.573483, 2.026087, 2.931296",\ + "1.087700, 1.387673, 1.644525, 2.097129, 3.002338",\ + "1.343903, 1.643875, 1.900728, 2.353332, 3.258541",\ + "2.256562, 2.556535, 2.813386, 3.265991, 4.171199"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.043742, 0.043742, 0.043742, 0.043743, 0.043743",\ + "0.091388, 0.091388, 0.091388, 0.091388, 0.091389",\ + "0.223754, 0.223754, 0.223755, 0.223755, 0.223756",\ + "0.713686, 0.713686, 0.713688, 0.713692, 0.713700",\ + "2.456796, 2.456795, 2.456792, 2.456783, 2.456766",\ + "0.043742, 0.043742, 0.043742, 0.043743, 0.043743",\ + "0.091388, 0.091388, 0.091388, 0.091388, 0.091389",\ + "0.223754, 0.223754, 0.223755, 0.223755, 0.223756",\ + "0.713686, 0.713686, 0.713688, 0.713692, 0.713700",\ + "2.456796, 2.456795, 2.456792, 2.456783, 2.456766",\ + "0.043742, 0.043742, 0.043742, 0.043743, 0.043743",\ + "0.091388, 0.091388, 0.091388, 0.091388, 0.091389",\ + "0.223754, 0.223754, 0.223755, 0.223755, 0.223756",\ + "0.713686, 0.713686, 0.713688, 0.713692, 0.713700",\ + "2.456796, 2.456795, 2.456792, 2.456783, 2.456766",\ + "0.043742, 0.043742, 0.043742, 0.043743, 0.043743",\ + "0.091388, 0.091388, 0.091388, 0.091388, 0.091389",\ + "0.223754, 0.223754, 0.223755, 0.223755, 0.223756",\ + "0.713686, 0.713686, 0.713688, 0.713692, 0.713700",\ + "2.456796, 2.456795, 2.456792, 2.456783, 2.456766",\ + "0.043742, 0.043742, 0.043742, 0.043743, 0.043743",\ + "0.091388, 0.091388, 0.091388, 0.091388, 0.091389",\ + "0.223754, 0.223754, 0.223755, 0.223755, 0.223756",\ + "0.713686, 0.713686, 0.713688, 0.713692, 0.713700",\ + "2.456796, 2.456795, 2.456792, 2.456783, 2.456766"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.371769, 0.553936, 0.750035, 1.059373, 1.654333",\ + "0.394510, 0.576677, 0.772776, 1.082114, 1.677074",\ + "0.443791, 0.625958, 0.822057, 1.131395, 1.726356",\ + "0.609694, 0.791861, 0.987960, 1.297299, 1.892264",\ + "1.195848, 1.378015, 1.574114, 1.883451, 2.478410",\ + "0.459189, 0.641255, 0.837315, 1.146678, 1.741687",\ + "0.481930, 0.663996, 0.860057, 1.169419, 1.764428",\ + "0.531211, 0.713277, 0.909338, 1.218700, 1.813709",\ + "0.697114, 0.879180, 1.075240, 1.384604, 1.979617",\ + "1.283268, 1.465334, 1.661394, 1.970756, 2.565764",\ + "0.540056, 0.721592, 0.917342, 1.226706, 1.821719",\ + "0.562797, 0.744333, 0.940084, 1.249447, 1.844460",\ + "0.612079, 0.793614, 0.989365, 1.298728, 1.893741",\ + "0.777981, 0.959517, 1.155267, 1.464633, 2.059649",\ + "1.364136, 1.545671, 1.741421, 2.050785, 2.645795",\ + "0.597695, 0.779428, 0.975078, 1.284177, 1.878815",\ + "0.620436, 0.802170, 0.997819, 1.306918, 1.901556",\ + "0.669718, 0.851451, 1.047100, 1.356200, 1.950837",\ + "0.835620, 1.017353, 1.213003, 1.522104, 2.116745",\ + "1.421774, 1.603508, 1.799157, 2.108255, 2.702892",\ + "0.899790, 1.084807, 1.278741, 1.587385, 2.181135",\ + "0.922531, 1.107548, 1.301482, 1.610126, 2.203876",\ + "0.971813, 1.156829, 1.350764, 1.659407, 2.253157",\ + "1.137715, 1.322732, 1.516666, 1.825311, 2.419065",\ + "1.723870, 1.908886, 2.102820, 2.411463, 3.005211"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.037337, 0.037337, 0.037337, 0.037337, 0.037337",\ + "0.066008, 0.066008, 0.066008, 0.066008, 0.066009",\ + "0.143976, 0.143976, 0.143976, 0.143976, 0.143976",\ + "0.444330, 0.444330, 0.444330, 0.444330, 0.444330",\ + "1.518979, 1.518979, 1.518979, 1.518980, 1.518982",\ + "0.037337, 0.037337, 0.037337, 0.037337, 0.037337",\ + "0.066008, 0.066008, 0.066008, 0.066008, 0.066009",\ + "0.143976, 0.143976, 0.143976, 0.143976, 0.143976",\ + "0.444330, 0.444330, 0.444330, 0.444330, 0.444330",\ + "1.518979, 1.518979, 1.518979, 1.518980, 1.518982",\ + "0.037337, 0.037337, 0.037337, 0.037337, 0.037337",\ + "0.066008, 0.066008, 0.066008, 0.066008, 0.066009",\ + "0.143976, 0.143976, 0.143976, 0.143976, 0.143976",\ + "0.444330, 0.444330, 0.444330, 0.444330, 0.444330",\ + "1.518979, 1.518979, 1.518979, 1.518980, 1.518982",\ + "0.037337, 0.037337, 0.037337, 0.037337, 0.037337",\ + "0.066008, 0.066008, 0.066008, 0.066008, 0.066009",\ + "0.143976, 0.143976, 0.143976, 0.143976, 0.143976",\ + "0.444330, 0.444330, 0.444330, 0.444330, 0.444330",\ + "1.518979, 1.518979, 1.518979, 1.518980, 1.518982",\ + "0.037337, 0.037337, 0.037337, 0.037337, 0.037337",\ + "0.066008, 0.066008, 0.066008, 0.066008, 0.066009",\ + "0.143976, 0.143976, 0.143976, 0.143976, 0.143976",\ + "0.444330, 0.444330, 0.444330, 0.444330, 0.444330",\ + "1.518979, 1.518979, 1.518979, 1.518980, 1.518982"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[5]_redg_min_2343*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[3]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.514333, 0.692672, 0.873019, 1.159206, 1.709959",\ + "0.543198, 0.721537, 0.901884, 1.188071, 1.738824",\ + "0.614240, 0.792579, 0.972926, 1.259113, 1.809866",\ + "0.870442, 1.048782, 1.229129, 1.515315, 2.066068",\ + "1.783101, 1.961441, 2.141788, 2.427974, 2.978728",\ + "0.599271, 0.777508, 0.958089, 1.244712, 1.796337",\ + "0.628136, 0.806373, 0.986954, 1.273577, 1.825202",\ + "0.699178, 0.877415, 1.057996, 1.344619, 1.896244",\ + "0.955381, 1.133618, 1.314199, 1.600821, 2.152447",\ + "1.868040, 2.046277, 2.226858, 2.513480, 3.065106",\ + "0.675178, 0.852952, 1.032898, 1.319309, 1.870510",\ + "0.704042, 0.881817, 1.061763, 1.348174, 1.899375",\ + "0.775084, 0.952859, 1.132805, 1.419216, 1.970417",\ + "1.031287, 1.209061, 1.389008, 1.675418, 2.226619",\ + "1.943946, 2.121720, 2.301667, 2.588077, 3.139278",\ + "0.729530, 0.907697, 1.087764, 1.373903, 1.924827",\ + "0.758394, 0.936562, 1.116628, 1.402767, 1.953692",\ + "0.829437, 1.007604, 1.187670, 1.473809, 2.024734",\ + "1.085639, 1.263806, 1.443873, 1.730012, 2.280936",\ + "1.998298, 2.176466, 2.356532, 2.642671, 3.193595",\ + "1.010952, 1.193215, 1.371917, 1.657629, 2.208105",\ + "1.039816, 1.222079, 1.400781, 1.686494, 2.236969",\ + "1.110858, 1.293122, 1.471824, 1.757536, 2.308012",\ + "1.367061, 1.549324, 1.728026, 2.013738, 2.564214",\ + "2.279720, 2.461983, 2.640685, 2.926397, 3.476873"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.043742, 0.043742, 0.043742, 0.043742, 0.043742",\ + "0.091388, 0.091388, 0.091388, 0.091388, 0.091388",\ + "0.223754, 0.223754, 0.223754, 0.223754, 0.223754",\ + "0.713686, 0.713686, 0.713686, 0.713686, 0.713686",\ + "2.456796, 2.456796, 2.456796, 2.456796, 2.456796",\ + "0.043742, 0.043742, 0.043742, 0.043742, 0.043742",\ + "0.091388, 0.091388, 0.091388, 0.091388, 0.091388",\ + "0.223754, 0.223754, 0.223754, 0.223754, 0.223754",\ + "0.713686, 0.713686, 0.713686, 0.713686, 0.713686",\ + "2.456796, 2.456796, 2.456796, 2.456796, 2.456796",\ + "0.043742, 0.043742, 0.043742, 0.043742, 0.043742",\ + "0.091388, 0.091388, 0.091388, 0.091388, 0.091388",\ + "0.223754, 0.223754, 0.223754, 0.223754, 0.223754",\ + "0.713686, 0.713686, 0.713686, 0.713686, 0.713686",\ + "2.456796, 2.456796, 2.456796, 2.456796, 2.456796",\ + "0.043742, 0.043742, 0.043742, 0.043742, 0.043742",\ + "0.091388, 0.091388, 0.091388, 0.091388, 0.091388",\ + "0.223754, 0.223754, 0.223754, 0.223754, 0.223754",\ + "0.713686, 0.713686, 0.713686, 0.713686, 0.713686",\ + "2.456796, 2.456796, 2.456796, 2.456796, 2.456796",\ + "0.043742, 0.043742, 0.043742, 0.043742, 0.043742",\ + "0.091388, 0.091388, 0.091388, 0.091388, 0.091388",\ + "0.223754, 0.223754, 0.223754, 0.223754, 0.223754",\ + "0.713686, 0.713686, 0.713686, 0.713686, 0.713686",\ + "2.456796, 2.456796, 2.456796, 2.456796, 2.456796"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.389041, 0.654041, 0.913070, 1.349334, 2.221481",\ + "0.411783, 0.676782, 0.935811, 1.372076, 2.244222",\ + "0.461064, 0.726063, 0.985092, 1.421357, 2.293503",\ + "0.626966, 0.891965, 1.150995, 1.587259, 2.459406",\ + "1.213121, 1.478120, 1.737149, 2.173413, 3.045560",\ + "0.477707, 0.742116, 1.001711, 1.437563, 2.308886",\ + "0.500448, 0.764857, 1.024452, 1.460304, 2.331627",\ + "0.549729, 0.814138, 1.073733, 1.509586, 2.380908",\ + "0.715632, 0.980040, 1.239636, 1.675488, 2.546811",\ + "1.301786, 1.566195, 1.825790, 2.261642, 3.132965",\ + "0.570514, 0.835409, 1.093746, 1.529807, 2.401928",\ + "0.593255, 0.858150, 1.116487, 1.552548, 2.424669",\ + "0.642536, 0.907431, 1.165769, 1.601829, 2.473950",\ + "0.808439, 1.073334, 1.331671, 1.767732, 2.639853",\ + "1.394593, 1.659488, 1.917825, 2.353886, 3.226007",\ + "0.636236, 0.903943, 1.160801, 1.596813, 2.468838",\ + "0.658977, 0.926684, 1.183542, 1.619554, 2.491579",\ + "0.708259, 0.975966, 1.232824, 1.668836, 2.540860",\ + "0.874161, 1.141868, 1.398726, 1.834738, 2.706763",\ + "1.460315, 1.728022, 1.984880, 2.420892, 3.292917",\ + "0.982026, 1.284442, 1.531439, 1.966014, 2.835165",\ + "1.004767, 1.307183, 1.554181, 1.988755, 2.857906",\ + "1.054048, 1.356464, 1.603462, 2.038037, 2.907187",\ + "1.219950, 1.522366, 1.769364, 2.203939, 3.073090",\ + "1.806105, 2.108521, 2.355518, 2.790093, 3.659244"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.037338, 0.037338, 0.037338, 0.037338, 0.037338",\ + "0.066008, 0.066008, 0.066008, 0.066008, 0.066008",\ + "0.143978, 0.143978, 0.143978, 0.143978, 0.143978",\ + "0.444353, 0.444353, 0.444354, 0.444354, 0.444354",\ + "1.518979, 1.518979, 1.518979, 1.518979, 1.518979",\ + "0.037338, 0.037338, 0.037338, 0.037338, 0.037338",\ + "0.066008, 0.066008, 0.066008, 0.066008, 0.066008",\ + "0.143978, 0.143978, 0.143978, 0.143978, 0.143978",\ + "0.444353, 0.444353, 0.444354, 0.444354, 0.444354",\ + "1.518979, 1.518979, 1.518979, 1.518979, 1.518979",\ + "0.037338, 0.037338, 0.037338, 0.037338, 0.037338",\ + "0.066008, 0.066008, 0.066008, 0.066008, 0.066008",\ + "0.143978, 0.143978, 0.143978, 0.143978, 0.143978",\ + "0.444353, 0.444353, 0.444354, 0.444354, 0.444354",\ + "1.518979, 1.518979, 1.518979, 1.518979, 1.518979",\ + "0.037338, 0.037338, 0.037338, 0.037338, 0.037338",\ + "0.066008, 0.066008, 0.066008, 0.066008, 0.066008",\ + "0.143978, 0.143978, 0.143978, 0.143978, 0.143978",\ + "0.444353, 0.444353, 0.444354, 0.444354, 0.444354",\ + "1.518979, 1.518979, 1.518979, 1.518979, 1.518979",\ + "0.037338, 0.037338, 0.037338, 0.037338, 0.037338",\ + "0.066008, 0.066008, 0.066008, 0.066008, 0.066008",\ + "0.143978, 0.143978, 0.143978, 0.143978, 0.143978",\ + "0.444353, 0.444353, 0.444354, 0.444354, 0.444354",\ + "1.518979, 1.518979, 1.518979, 1.518979, 1.518979"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[5]_redg_min_2288*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + values ( "0.142389, 0.171566, 0.243166, 0.499437, 1.411098",\ + "0.230574, 0.259751, 0.331362, 0.587680, 1.499024",\ + "0.318899, 0.348075, 0.419691, 0.676199, 1.587106",\ + "0.381491, 0.410664, 0.482232, 0.739031, 1.650402",\ + "0.711374, 0.740537, 0.811930, 1.069170, 1.982165"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + values ( "0.043742, 0.091388, 0.223754, 0.713686, 2.456796",\ + "0.043742, 0.091388, 0.223754, 0.713686, 2.456796",\ + "0.043742, 0.091388, 0.223754, 0.713686, 2.456796",\ + "0.043742, 0.091388, 0.223754, 0.713686, 2.456796",\ + "0.043742, 0.091388, 0.223754, 0.713686, 2.456796"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + values ( "0.180754, 0.203203, 0.252178, 0.417875, 1.004001",\ + "0.268158, 0.290607, 0.339581, 0.505279, 1.091404",\ + "0.349055, 0.371502, 0.420481, 0.586183, 1.172317",\ + "0.406718, 0.429160, 0.478148, 0.643857, 1.230008",\ + "0.709074, 0.731508, 0.780524, 0.946302, 1.532625"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + values ( "0.037339, 0.066008, 0.143979, 0.443541, 1.518445",\ + "0.037339, 0.066008, 0.143979, 0.443540, 1.518445",\ + "0.037339, 0.066008, 0.143979, 0.443540, 1.518243",\ + "0.037339, 0.066008, 0.143979, 0.443540, 1.517867",\ + "0.037339, 0.066008, 0.143978, 0.443540, 1.516694"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[5]_redg_min*/ + + timing () { + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + values ( "0.083777, 0.113177, 0.184363, 0.440561, 1.354954",\ + "0.166191, 0.195837, 0.267192, 0.523277, 1.434794",\ + "0.254428, 0.286014, 0.357719, 0.613433, 1.527519",\ + "0.402853, 0.441150, 0.515777, 0.771236, 1.680856",\ + "0.639529, 0.694162, 0.784036, 1.036347, 1.943170"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + values ( "0.046241, 0.092638, 0.224458, 0.720967, 2.472405",\ + "0.047673, 0.093421, 0.224642, 0.721323, 2.472405",\ + "0.058846, 0.099756, 0.225481, 0.721323, 2.472405",\ + "0.087693, 0.120786, 0.231211, 0.721323, 2.472405",\ + "0.150701, 0.177706, 0.265097, 0.721323, 2.472405"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + values ( "0.115523, 0.139488, 0.190373, 0.357311, 0.943250",\ + "0.195424, 0.220107, 0.270909, 0.437012, 1.024824",\ + "0.295483, 0.321586, 0.373863, 0.540151, 1.127638",\ + "0.466222, 0.498877, 0.556261, 0.723129, 1.308255",\ + "0.739560, 0.788071, 0.862427, 1.035419, 1.617964"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + values ( "0.044606, 0.073777, 0.150227, 0.449909, 1.525255",\ + "0.044880, 0.073777, 0.150227, 0.449909, 1.525255",\ + "0.054859, 0.080811, 0.152895, 0.449909, 1.525255",\ + "0.083786, 0.105188, 0.168383, 0.450518, 1.525255",\ + "0.145006, 0.165847, 0.216404, 0.463154, 1.525255"); + } + + } /* end of arc padmux2ast_i[5]_obs_ctrl_o[5]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + values ( "0.079158, 0.108043, 0.179215, 0.434173, 1.346996",\ + "0.161067, 0.189991, 0.261053, 0.516828, 1.426491",\ + "0.245841, 0.276441, 0.347577, 0.603328, 1.515415",\ + "0.390269, 0.426632, 0.499915, 0.754138, 1.664120",\ + "0.617992, 0.669105, 0.755401, 1.006998, 1.912977"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + values ( "0.043983, 0.091336, 0.223341, 0.706536, 2.446538",\ + "0.045333, 0.091976, 0.223341, 0.711950, 2.446538",\ + "0.055328, 0.097699, 0.224823, 0.713717, 2.446538",\ + "0.081572, 0.117377, 0.229870, 0.714277, 2.457507",\ + "0.139013, 0.170652, 0.260149, 0.718737, 2.457507"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + values ( "0.084172, 0.105801, 0.153856, 0.319168, 0.906380",\ + "0.169681, 0.191458, 0.239573, 0.404634, 0.995979",\ + "0.265868, 0.290580, 0.340403, 0.505279, 1.091202",\ + "0.427357, 0.458965, 0.514692, 0.679112, 1.262906",\ + "0.687739, 0.736091, 0.809895, 0.982075, 1.563284"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.001502, 0.004741, 0.013323, 0.044638, 0.156168"); + values ( "0.037000, 0.065831, 0.143664, 0.445190, 1.520147",\ + "0.037985, 0.066094, 0.143861, 0.445190, 1.520147",\ + "0.050092, 0.075267, 0.147407, 0.445190, 1.520147",\ + "0.078605, 0.099932, 0.163006, 0.448532, 1.520147",\ + "0.139198, 0.159714, 0.210091, 0.458787, 1.520147"); + } + + } /* end of arc padmux2ast_i[5]_obs_ctrl_o[5]_una_min*/ + +} /* end of pin obs_ctrl_o[5] */ + +pin("obs_ctrl_o[4]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.156168 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000989 ; + + /* Other user defined attributes. */ + original_pin : obs_ctrl_o[4]; + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[0]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.556168, 0.736371, 0.923861, 1.225854, 1.809366",\ + "0.586766, 0.766969, 0.954459, 1.256451, 1.839963",\ + "0.658595, 0.838798, 1.026288, 1.328280, 1.911792",\ + "0.915054, 1.095257, 1.282747, 1.584739, 2.168251",\ + "1.830892, 2.011095, 2.198585, 2.500578, 3.084090",\ + "0.641107, 0.821654, 1.009870, 1.311866, 1.895744",\ + "0.671704, 0.852252, 1.040468, 1.342464, 1.926342",\ + "0.743533, 0.924081, 1.112296, 1.414292, 1.998170",\ + "0.999992, 1.180540, 1.368755, 1.670752, 2.254630",\ + "1.915831, 2.096378, 2.284594, 2.586590, 3.170468",\ + "0.717019, 0.897098, 1.084679, 1.386463, 1.969916",\ + "0.747616, 0.927695, 1.115276, 1.417060, 2.000514",\ + "0.819445, 0.999524, 1.187105, 1.488889, 2.072343",\ + "1.075904, 1.255983, 1.443564, 1.745348, 2.328802",\ + "1.991743, 2.171822, 2.359403, 2.661187, 3.244640",\ + "0.771388, 0.951609, 1.139330, 1.441003, 2.024234",\ + "0.801986, 0.982207, 1.169927, 1.471600, 2.054831",\ + "0.873814, 1.054036, 1.241756, 1.543429, 2.126660",\ + "1.130274, 1.310495, 1.498215, 1.799888, 2.383119",\ + "2.046112, 2.226333, 2.414054, 2.715726, 3.298958",\ + "1.052983, 1.236877, 1.423280, 1.724729, 2.307511",\ + "1.083580, 1.267475, 1.453878, 1.755327, 2.338109",\ + "1.155409, 1.339304, 1.525707, 1.827155, 2.409937",\ + "1.411868, 1.595763, 1.782166, 2.083614, 2.666397",\ + "2.327707, 2.511601, 2.698004, 2.999453, 3.582235"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.040033, 0.040033, 0.040033, 0.040033, 0.040033",\ + "0.086005, 0.086005, 0.086005, 0.086005, 0.086005",\ + "0.217202, 0.217202, 0.217202, 0.217202, 0.217202",\ + "0.715349, 0.715349, 0.715349, 0.715349, 0.715349",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040033, 0.040033, 0.040033, 0.040033, 0.040033",\ + "0.086005, 0.086005, 0.086005, 0.086005, 0.086005",\ + "0.217202, 0.217202, 0.217202, 0.217202, 0.217202",\ + "0.715349, 0.715349, 0.715349, 0.715349, 0.715349",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040033, 0.040033, 0.040033, 0.040033, 0.040033",\ + "0.086005, 0.086005, 0.086005, 0.086005, 0.086005",\ + "0.217202, 0.217202, 0.217202, 0.217202, 0.217202",\ + "0.715349, 0.715349, 0.715349, 0.715349, 0.715349",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040033, 0.040033, 0.040033, 0.040033, 0.040033",\ + "0.086005, 0.086005, 0.086005, 0.086005, 0.086005",\ + "0.217202, 0.217202, 0.217202, 0.217202, 0.217202",\ + "0.715349, 0.715349, 0.715349, 0.715349, 0.715349",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040033, 0.040033, 0.040033, 0.040033, 0.040033",\ + "0.086005, 0.086005, 0.086005, 0.086005, 0.086005",\ + "0.217202, 0.217202, 0.217202, 0.217202, 0.217202",\ + "0.715349, 0.715349, 0.715349, 0.715349, 0.715349",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.426989, 0.694775, 0.956355, 1.396052, 2.275447",\ + "0.452751, 0.720537, 0.982117, 1.421814, 2.301209",\ + "0.504153, 0.771939, 1.033519, 1.473216, 2.352611",\ + "0.670963, 0.938748, 1.200328, 1.640025, 2.519420",\ + "1.261262, 1.529048, 1.790628, 2.230325, 3.109720",\ + "0.515693, 0.782850, 1.044996, 1.484281, 2.362852",\ + "0.541455, 0.808612, 1.070758, 1.510043, 2.388614",\ + "0.592858, 0.860014, 1.122160, 1.561445, 2.440016",\ + "0.759667, 1.026823, 1.288969, 1.728255, 2.606825",\ + "1.349967, 1.617123, 1.879269, 2.318554, 3.197125",\ + "0.608636, 0.875995, 1.136721, 1.576445, 2.455894",\ + "0.634398, 0.901757, 1.162483, 1.602207, 2.481656",\ + "0.685800, 0.953159, 1.213886, 1.653610, 2.533058",\ + "0.852609, 1.119968, 1.380695, 1.820419, 2.699867",\ + "1.442909, 1.710268, 1.970994, 2.410718, 3.290167",\ + "0.674479, 0.944559, 1.203741, 1.643296, 2.522405",\ + "0.700241, 0.970321, 1.229503, 1.669058, 2.548167",\ + "0.751643, 1.021724, 1.280905, 1.720460, 2.599569",\ + "0.918453, 1.188533, 1.447715, 1.887269, 2.766378",\ + "1.508752, 1.778832, 2.038014, 2.477569, 3.356678",\ + "1.021001, 1.325395, 1.574404, 2.012450, 2.888541",\ + "1.046763, 1.351157, 1.600166, 2.038211, 2.914303",\ + "1.098165, 1.402559, 1.651568, 2.089614, 2.965705",\ + "1.264974, 1.569368, 1.818377, 2.256423, 3.132514",\ + "1.855274, 2.159668, 2.408677, 2.846723, 3.722814"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.040698, 0.040698, 0.040698, 0.040698, 0.040698",\ + "0.070039, 0.070039, 0.070039, 0.070039, 0.070038",\ + "0.145874, 0.145874, 0.145874, 0.145874, 0.145874",\ + "0.444024, 0.444024, 0.444024, 0.444024, 0.444024",\ + "1.524052, 1.524052, 1.524052, 1.524052, 1.524052",\ + "0.040698, 0.040698, 0.040698, 0.040698, 0.040698",\ + "0.070039, 0.070039, 0.070039, 0.070039, 0.070038",\ + "0.145874, 0.145874, 0.145874, 0.145874, 0.145874",\ + "0.444024, 0.444024, 0.444024, 0.444024, 0.444024",\ + "1.524052, 1.524052, 1.524052, 1.524052, 1.524052",\ + "0.040698, 0.040698, 0.040698, 0.040698, 0.040698",\ + "0.070039, 0.070039, 0.070039, 0.070039, 0.070038",\ + "0.145874, 0.145874, 0.145874, 0.145874, 0.145874",\ + "0.444024, 0.444024, 0.444024, 0.444024, 0.444024",\ + "1.524052, 1.524052, 1.524052, 1.524052, 1.524052",\ + "0.040698, 0.040698, 0.040698, 0.040698, 0.040698",\ + "0.070039, 0.070039, 0.070039, 0.070039, 0.070038",\ + "0.145874, 0.145874, 0.145874, 0.145874, 0.145874",\ + "0.444024, 0.444024, 0.444024, 0.444024, 0.444024",\ + "1.524052, 1.524052, 1.524052, 1.524052, 1.524052",\ + "0.040698, 0.040698, 0.040698, 0.040698, 0.040698",\ + "0.070039, 0.070039, 0.070039, 0.070039, 0.070038",\ + "0.145874, 0.145874, 0.145874, 0.145874, 0.145874",\ + "0.444024, 0.444024, 0.444024, 0.444024, 0.444024",\ + "1.524052, 1.524052, 1.524052, 1.524052, 1.524052"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[4]_redg_2724*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[1]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.464273, 0.727847, 1.004120, 1.472849, 2.410309",\ + "0.494871, 0.758445, 1.034717, 1.503447, 2.440906",\ + "0.566700, 0.830273, 1.106546, 1.575275, 2.512735",\ + "0.823159, 1.086733, 1.363005, 1.831734, 2.769193",\ + "1.738997, 2.002571, 2.278844, 2.747575, 3.685036",\ + "0.552468, 0.815388, 1.091687, 1.559565, 2.496242",\ + "0.583065, 0.845985, 1.122285, 1.590162, 2.526840",\ + "0.654894, 0.917814, 1.194114, 1.661991, 2.598668",\ + "0.911353, 1.174273, 1.450573, 1.918450, 2.855127",\ + "1.827192, 2.090112, 2.366412, 2.834290, 3.770969",\ + "0.640784, 0.904368, 1.179652, 1.647187, 2.583197",\ + "0.671381, 0.934966, 1.210250, 1.677785, 2.613795",\ + "0.743210, 1.006795, 1.282079, 1.749613, 2.685623",\ + "0.999669, 1.263254, 1.538538, 2.006072, 2.942082",\ + "1.915508, 2.179092, 2.454377, 2.921913, 3.857924",\ + "0.703280, 0.970003, 1.243792, 1.711101, 2.646706",\ + "0.733877, 1.000601, 1.274390, 1.741699, 2.677304",\ + "0.805706, 1.072430, 1.346218, 1.813527, 2.749132",\ + "1.062165, 1.328889, 1.602677, 2.069986, 3.005591",\ + "1.978004, 2.244727, 2.518517, 2.985826, 3.921433",\ + "1.032405, 1.334334, 1.595659, 2.060451, 2.992162",\ + "1.063003, 1.364932, 1.626257, 2.091048, 3.022760",\ + "1.134832, 1.436760, 1.698085, 2.162877, 3.094589",\ + "1.391291, 1.693219, 1.954545, 2.419336, 3.351047",\ + "2.307129, 2.609058, 2.870384, 3.335176, 4.266890"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.040033, 0.040033, 0.040033, 0.040033, 0.040033",\ + "0.086005, 0.086005, 0.086005, 0.086005, 0.086005",\ + "0.217202, 0.217202, 0.217201, 0.217201, 0.217201",\ + "0.715349, 0.715349, 0.715347, 0.715344, 0.715337",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040033, 0.040033, 0.040033, 0.040033, 0.040033",\ + "0.086005, 0.086005, 0.086005, 0.086005, 0.086005",\ + "0.217202, 0.217202, 0.217201, 0.217201, 0.217201",\ + "0.715349, 0.715349, 0.715347, 0.715344, 0.715337",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040033, 0.040033, 0.040033, 0.040033, 0.040033",\ + "0.086005, 0.086005, 0.086005, 0.086005, 0.086005",\ + "0.217202, 0.217202, 0.217201, 0.217201, 0.217201",\ + "0.715349, 0.715349, 0.715347, 0.715344, 0.715337",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040033, 0.040033, 0.040033, 0.040033, 0.040033",\ + "0.086005, 0.086005, 0.086005, 0.086005, 0.086005",\ + "0.217202, 0.217202, 0.217201, 0.217201, 0.217201",\ + "0.715349, 0.715349, 0.715347, 0.715344, 0.715337",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040033, 0.040033, 0.040033, 0.040033, 0.040033",\ + "0.086005, 0.086005, 0.086005, 0.086005, 0.086005",\ + "0.217202, 0.217202, 0.217201, 0.217201, 0.217201",\ + "0.715349, 0.715349, 0.715347, 0.715344, 0.715337",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.409942, 0.592374, 0.788766, 1.097819, 1.692625",\ + "0.435704, 0.618136, 0.814528, 1.123581, 1.718389",\ + "0.487107, 0.669538, 0.865930, 1.174984, 1.769791",\ + "0.653916, 0.836348, 1.032740, 1.341792, 1.936599",\ + "1.244215, 1.426647, 1.623039, 1.932092, 2.526900",\ + "0.497357, 0.679760, 0.876259, 1.185124, 1.779979",\ + "0.523119, 0.705522, 0.902021, 1.210886, 1.805742",\ + "0.574521, 0.756924, 0.953424, 1.262289, 1.857144",\ + "0.741330, 0.923733, 1.120233, 1.429098, 2.023953",\ + "1.331630, 1.514033, 1.710532, 2.019397, 2.614253",\ + "0.578233, 0.760096, 0.956286, 1.265153, 1.860010",\ + "0.603995, 0.785858, 0.982048, 1.290915, 1.885774",\ + "0.655398, 0.837260, 1.033450, 1.342317, 1.937176",\ + "0.822207, 1.004070, 1.200260, 1.509126, 2.103984",\ + "1.412507, 1.594369, 1.790559, 2.099426, 2.694285",\ + "0.635880, 0.817645, 1.013830, 1.322398, 1.916658",\ + "0.661642, 0.843407, 1.039592, 1.348160, 1.942421",\ + "0.713044, 0.894809, 1.090994, 1.399562, 1.993823",\ + "0.879853, 1.061618, 1.257803, 1.566371, 2.160632",\ + "1.470153, 1.651918, 1.848103, 2.156671, 2.750932",\ + "0.938088, 1.122869, 1.317464, 1.625412, 2.218504",\ + "0.963849, 1.148631, 1.343226, 1.651175, 2.244268",\ + "1.015252, 1.200033, 1.394628, 1.702577, 2.295670",\ + "1.182061, 1.366843, 1.561437, 1.869386, 2.462479",\ + "1.772361, 1.957142, 2.151737, 2.459686, 3.052779"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.040698, 0.040698, 0.040698, 0.040699, 0.040699",\ + "0.070039, 0.070039, 0.070039, 0.070039, 0.070039",\ + "0.145874, 0.145874, 0.145874, 0.145874, 0.145874",\ + "0.444024, 0.444024, 0.444024, 0.444024, 0.444024",\ + "1.524052, 1.524052, 1.524052, 1.524054, 1.524057",\ + "0.040698, 0.040698, 0.040698, 0.040699, 0.040699",\ + "0.070039, 0.070039, 0.070039, 0.070039, 0.070039",\ + "0.145874, 0.145874, 0.145874, 0.145874, 0.145874",\ + "0.444024, 0.444024, 0.444024, 0.444024, 0.444024",\ + "1.524052, 1.524052, 1.524052, 1.524054, 1.524057",\ + "0.040698, 0.040698, 0.040698, 0.040699, 0.040699",\ + "0.070039, 0.070039, 0.070039, 0.070039, 0.070039",\ + "0.145874, 0.145874, 0.145874, 0.145874, 0.145874",\ + "0.444024, 0.444024, 0.444024, 0.444024, 0.444024",\ + "1.524052, 1.524052, 1.524052, 1.524054, 1.524057",\ + "0.040698, 0.040698, 0.040698, 0.040699, 0.040699",\ + "0.070039, 0.070039, 0.070039, 0.070039, 0.070039",\ + "0.145874, 0.145874, 0.145874, 0.145874, 0.145874",\ + "0.444024, 0.444024, 0.444024, 0.444024, 0.444024",\ + "1.524052, 1.524052, 1.524052, 1.524054, 1.524057",\ + "0.040698, 0.040698, 0.040698, 0.040699, 0.040699",\ + "0.070039, 0.070039, 0.070039, 0.070039, 0.070039",\ + "0.145874, 0.145874, 0.145874, 0.145874, 0.145874",\ + "0.444024, 0.444024, 0.444024, 0.444024, 0.444024",\ + "1.524052, 1.524052, 1.524052, 1.524054, 1.524057"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[4]_redg_2651*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[2]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.460298, 0.719927, 0.991800, 1.448679, 2.362439",\ + "0.490896, 0.750525, 1.022397, 1.479277, 2.393037",\ + "0.562724, 0.822354, 1.094226, 1.551105, 2.464865",\ + "0.819184, 1.078813, 1.350685, 1.807564, 2.721324",\ + "1.735022, 1.994652, 2.266525, 2.723405, 3.637166",\ + "0.548403, 0.807461, 1.079330, 1.535395, 2.448373",\ + "0.579001, 0.838059, 1.109928, 1.565992, 2.478970",\ + "0.650829, 0.909887, 1.181756, 1.637821, 2.550799",\ + "0.907289, 1.166346, 1.438215, 1.894280, 2.807258",\ + "1.823127, 2.082185, 2.354055, 2.810120, 3.723099",\ + "0.636433, 0.896427, 1.167294, 1.623017, 2.535328",\ + "0.667031, 0.927024, 1.197892, 1.653615, 2.565925",\ + "0.738859, 0.998853, 1.269721, 1.725444, 2.637754",\ + "0.995319, 1.255312, 1.526180, 1.981903, 2.894213",\ + "1.911157, 2.171151, 2.442019, 2.897743, 3.810054",\ + "0.698654, 0.962040, 1.231432, 1.686931, 2.598837",\ + "0.729252, 0.992638, 1.262030, 1.717529, 2.629434",\ + "0.801081, 1.064467, 1.333858, 1.789357, 2.701263",\ + "1.057540, 1.320926, 1.590317, 2.045816, 2.957722",\ + "1.973378, 2.236765, 2.506157, 2.961657, 3.873563",\ + "1.026042, 1.326115, 1.583179, 2.036232, 2.944293",\ + "1.056639, 1.356713, 1.613777, 2.066829, 2.974890",\ + "1.128468, 1.428541, 1.685606, 2.138658, 3.046719",\ + "1.384927, 1.685001, 1.942065, 2.395117, 3.303178",\ + "2.300766, 2.600840, 2.857904, 3.310957, 4.219019"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.040033, 0.040033, 0.040033, 0.040033, 0.040033",\ + "0.086005, 0.086005, 0.086005, 0.086005, 0.086005",\ + "0.217202, 0.217202, 0.217201, 0.217201, 0.217201",\ + "0.715349, 0.715349, 0.715346, 0.715340, 0.715328",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040033, 0.040033, 0.040033, 0.040033, 0.040033",\ + "0.086005, 0.086005, 0.086005, 0.086005, 0.086005",\ + "0.217202, 0.217201, 0.217201, 0.217201, 0.217201",\ + "0.715349, 0.715349, 0.715346, 0.715340, 0.715328",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040033, 0.040033, 0.040033, 0.040033, 0.040033",\ + "0.086005, 0.086005, 0.086005, 0.086005, 0.086005",\ + "0.217202, 0.217201, 0.217201, 0.217201, 0.217201",\ + "0.715349, 0.715349, 0.715346, 0.715340, 0.715328",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040033, 0.040033, 0.040033, 0.040033, 0.040033",\ + "0.086005, 0.086005, 0.086005, 0.086005, 0.086005",\ + "0.217202, 0.217201, 0.217201, 0.217201, 0.217201",\ + "0.715349, 0.715349, 0.715346, 0.715340, 0.715328",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040033, 0.040033, 0.040033, 0.040033, 0.040033",\ + "0.086005, 0.086005, 0.086005, 0.086005, 0.086005",\ + "0.217202, 0.217201, 0.217201, 0.217201, 0.217201",\ + "0.715349, 0.715349, 0.715346, 0.715340, 0.715328",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.408281, 0.590822, 0.787077, 1.096293, 1.691588",\ + "0.434043, 0.616584, 0.812839, 1.122056, 1.717351",\ + "0.485445, 0.667986, 0.864241, 1.173458, 1.768753",\ + "0.652254, 0.834795, 1.031050, 1.340267, 1.935562",\ + "1.242554, 1.425095, 1.621350, 1.930567, 2.525863",\ + "0.495701, 0.678207, 0.874570, 1.183598, 1.778941",\ + "0.521463, 0.703969, 0.900331, 1.209361, 1.804705",\ + "0.572865, 0.755371, 0.951734, 1.260763, 1.856107",\ + "0.739674, 0.922180, 1.118543, 1.427572, 2.022916",\ + "1.329974, 1.512480, 1.708843, 2.017872, 2.613216",\ + "0.576569, 0.758544, 0.954597, 1.263627, 1.858973",\ + "0.602330, 0.784306, 0.980358, 1.289389, 1.884737",\ + "0.653733, 0.835708, 1.031761, 1.340791, 1.936139",\ + "0.820542, 1.002517, 1.198570, 1.507600, 2.102947",\ + "1.410842, 1.592817, 1.788870, 2.097900, 2.693248",\ + "0.634207, 0.816093, 1.012141, 1.320872, 1.915620",\ + "0.659969, 0.841854, 1.037902, 1.346634, 1.941384",\ + "0.711372, 0.893257, 1.089304, 1.398036, 1.992786",\ + "0.878181, 1.060066, 1.256114, 1.564846, 2.159595",\ + "1.468480, 1.650366, 1.846413, 2.155146, 2.749895",\ + "0.936303, 1.121319, 1.315774, 1.623887, 2.217467",\ + "0.962064, 1.147081, 1.341536, 1.649649, 2.243231",\ + "1.013467, 1.198483, 1.392939, 1.701051, 2.294633",\ + "1.180276, 1.365292, 1.559748, 1.867860, 2.461442",\ + "1.770576, 1.955592, 2.150048, 2.458160, 3.051742"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.040698, 0.040698, 0.040698, 0.040699, 0.040699",\ + "0.070039, 0.070039, 0.070039, 0.070039, 0.070039",\ + "0.145874, 0.145874, 0.145874, 0.145874, 0.145874",\ + "0.444024, 0.444024, 0.444024, 0.444024, 0.444024",\ + "1.524052, 1.524052, 1.524052, 1.524054, 1.524058",\ + "0.040698, 0.040698, 0.040698, 0.040699, 0.040699",\ + "0.070039, 0.070039, 0.070039, 0.070039, 0.070039",\ + "0.145874, 0.145874, 0.145874, 0.145874, 0.145874",\ + "0.444024, 0.444024, 0.444024, 0.444024, 0.444024",\ + "1.524052, 1.524052, 1.524052, 1.524054, 1.524058",\ + "0.040698, 0.040698, 0.040698, 0.040699, 0.040699",\ + "0.070039, 0.070039, 0.070039, 0.070039, 0.070039",\ + "0.145874, 0.145874, 0.145874, 0.145874, 0.145874",\ + "0.444024, 0.444024, 0.444024, 0.444024, 0.444024",\ + "1.524052, 1.524052, 1.524052, 1.524054, 1.524058",\ + "0.040698, 0.040698, 0.040698, 0.040699, 0.040699",\ + "0.070039, 0.070039, 0.070039, 0.070039, 0.070039",\ + "0.145874, 0.145874, 0.145874, 0.145874, 0.145874",\ + "0.444024, 0.444024, 0.444024, 0.444024, 0.444024",\ + "1.524052, 1.524052, 1.524052, 1.524054, 1.524058",\ + "0.040698, 0.040698, 0.040698, 0.040699, 0.040699",\ + "0.070039, 0.070039, 0.070039, 0.070039, 0.070039",\ + "0.145874, 0.145874, 0.145874, 0.145874, 0.145874",\ + "0.444024, 0.444024, 0.444024, 0.444024, 0.444024",\ + "1.524052, 1.524052, 1.524052, 1.524054, 1.524058"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[4]_redg_2594*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[3]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.552582, 0.731009, 0.911269, 1.197475, 1.748592",\ + "0.583180, 0.761606, 0.941867, 1.228073, 1.779190",\ + "0.655008, 0.833435, 1.013695, 1.299902, 1.851019",\ + "0.911468, 1.089894, 1.270155, 1.556361, 2.107478",\ + "1.827306, 2.005733, 2.185993, 2.472199, 3.023317",\ + "0.637520, 0.816281, 0.997184, 1.283396, 1.834971",\ + "0.668118, 0.846879, 1.027782, 1.313993, 1.865568",\ + "0.739947, 0.918707, 1.099610, 1.385822, 1.937397",\ + "0.996406, 1.175167, 1.356070, 1.642281, 2.193856",\ + "1.912244, 2.091005, 2.271908, 2.558120, 3.109695",\ + "0.713426, 0.891724, 1.071993, 1.357992, 1.909143",\ + "0.744024, 0.922322, 1.102591, 1.388590, 1.939741",\ + "0.815853, 0.994151, 1.174419, 1.460419, 2.011569",\ + "1.072312, 1.250610, 1.430879, 1.716878, 2.268029",\ + "1.988150, 2.166448, 2.346717, 2.632716, 3.183867",\ + "0.767778, 0.946236, 1.126644, 1.412532, 1.963460",\ + "0.798376, 0.976834, 1.157242, 1.443130, 1.994058",\ + "0.870205, 1.048662, 1.229070, 1.514959, 2.065886",\ + "1.126664, 1.305122, 1.485530, 1.771418, 2.322346",\ + "2.042502, 2.220960, 2.401368, 2.687256, 3.238184",\ + "1.049200, 1.231463, 1.410595, 1.696259, 2.246738",\ + "1.079798, 1.262061, 1.441192, 1.726856, 2.277336",\ + "1.151627, 1.333890, 1.513021, 1.798685, 2.349164",\ + "1.408086, 1.590349, 1.769480, 2.055144, 2.605623",\ + "2.323924, 2.506187, 2.685318, 2.970983, 3.521462"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.040033, 0.040033, 0.040033, 0.040033, 0.040033",\ + "0.086005, 0.086005, 0.086005, 0.086005, 0.086005",\ + "0.217202, 0.217202, 0.217202, 0.217202, 0.217202",\ + "0.715349, 0.715349, 0.715349, 0.715349, 0.715349",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040033, 0.040033, 0.040033, 0.040033, 0.040033",\ + "0.086005, 0.086005, 0.086005, 0.086005, 0.086005",\ + "0.217202, 0.217202, 0.217202, 0.217202, 0.217202",\ + "0.715349, 0.715349, 0.715349, 0.715349, 0.715349",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040033, 0.040033, 0.040033, 0.040033, 0.040033",\ + "0.086005, 0.086005, 0.086005, 0.086005, 0.086005",\ + "0.217202, 0.217202, 0.217202, 0.217202, 0.217202",\ + "0.715349, 0.715349, 0.715349, 0.715349, 0.715349",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040033, 0.040033, 0.040033, 0.040033, 0.040033",\ + "0.086005, 0.086005, 0.086005, 0.086005, 0.086005",\ + "0.217202, 0.217202, 0.217202, 0.217202, 0.217202",\ + "0.715349, 0.715349, 0.715349, 0.715349, 0.715349",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218",\ + "0.040033, 0.040033, 0.040033, 0.040033, 0.040033",\ + "0.086005, 0.086005, 0.086005, 0.086005, 0.086005",\ + "0.217202, 0.217202, 0.217202, 0.217202, 0.217202",\ + "0.715349, 0.715349, 0.715349, 0.715349, 0.715349",\ + "2.463218, 2.463218, 2.463218, 2.463218, 2.463218"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.425553, 0.690723, 0.949925, 1.386107, 2.258472",\ + "0.451315, 0.716485, 0.975687, 1.411869, 2.284234",\ + "0.502717, 0.767887, 1.027089, 1.463271, 2.335637",\ + "0.669527, 0.934696, 1.193898, 1.630080, 2.502446",\ + "1.259826, 1.524996, 1.784198, 2.220380, 3.092745",\ + "0.514219, 0.778798, 1.038566, 1.474336, 2.345878",\ + "0.539981, 0.804560, 1.064327, 1.500098, 2.371639",\ + "0.591383, 0.855962, 1.115730, 1.551500, 2.423042",\ + "0.758192, 1.022771, 1.282539, 1.718309, 2.589851",\ + "1.348492, 1.613071, 1.872839, 2.308609, 3.180151",\ + "0.607026, 0.871921, 1.130291, 1.566500, 2.438920",\ + "0.632787, 0.897683, 1.156053, 1.592262, 2.464681",\ + "0.684190, 0.949085, 1.207455, 1.643664, 2.516083",\ + "0.850999, 1.115894, 1.374264, 1.810474, 2.682893",\ + "1.441299, 1.706194, 1.964564, 2.400774, 3.273192",\ + "0.672748, 0.940455, 1.197311, 1.633351, 2.505431",\ + "0.698510, 0.966217, 1.223073, 1.659112, 2.531192",\ + "0.749912, 1.017619, 1.274475, 1.710515, 2.582595",\ + "0.916721, 1.184428, 1.441284, 1.877324, 2.749404",\ + "1.507021, 1.774728, 2.031584, 2.467624, 3.339704",\ + "1.018538, 1.320954, 1.567941, 2.002482, 2.871564",\ + "1.044299, 1.346715, 1.593703, 2.028244, 2.897326",\ + "1.095702, 1.398118, 1.645105, 2.079646, 2.948728",\ + "1.262511, 1.564927, 1.811914, 2.246455, 3.115537",\ + "1.852811, 2.155227, 2.402214, 2.836755, 3.705837"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.040698, 0.040698, 0.040698, 0.040698, 0.040698",\ + "0.070039, 0.070039, 0.070039, 0.070039, 0.070038",\ + "0.145874, 0.145874, 0.145874, 0.145874, 0.145874",\ + "0.444024, 0.444024, 0.444024, 0.444024, 0.444024",\ + "1.524052, 1.524052, 1.524052, 1.524052, 1.524052",\ + "0.040698, 0.040698, 0.040698, 0.040698, 0.040698",\ + "0.070039, 0.070039, 0.070039, 0.070039, 0.070038",\ + "0.145874, 0.145874, 0.145874, 0.145874, 0.145874",\ + "0.444024, 0.444024, 0.444024, 0.444024, 0.444024",\ + "1.524052, 1.524052, 1.524052, 1.524052, 1.524052",\ + "0.040698, 0.040698, 0.040698, 0.040698, 0.040698",\ + "0.070039, 0.070039, 0.070039, 0.070039, 0.070038",\ + "0.145874, 0.145874, 0.145874, 0.145874, 0.145874",\ + "0.444024, 0.444024, 0.444024, 0.444024, 0.444024",\ + "1.524052, 1.524052, 1.524052, 1.524052, 1.524052",\ + "0.040698, 0.040698, 0.040698, 0.040698, 0.040698",\ + "0.070039, 0.070039, 0.070039, 0.070039, 0.070038",\ + "0.145874, 0.145874, 0.145874, 0.145874, 0.145874",\ + "0.444024, 0.444024, 0.444024, 0.444024, 0.444024",\ + "1.524052, 1.524052, 1.524052, 1.524052, 1.524052",\ + "0.040698, 0.040698, 0.040698, 0.040698, 0.040698",\ + "0.070039, 0.070039, 0.070039, 0.070039, 0.070038",\ + "0.145874, 0.145874, 0.145874, 0.145874, 0.145874",\ + "0.444024, 0.444024, 0.444024, 0.444024, 0.444024",\ + "1.524052, 1.524052, 1.524052, 1.524052, 1.524052"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[4]_redg_2534*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + values ( "0.319855, 0.350453, 0.422282, 0.678742, 1.594576",\ + "0.407246, 0.437844, 0.509673, 0.766133, 1.681967",\ + "0.488165, 0.518763, 0.590592, 0.847052, 1.762885",\ + "0.545906, 0.576503, 0.648333, 0.904793, 1.820624",\ + "0.849219, 0.879552, 0.951038, 1.207499, 2.123717"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + values ( "0.040034, 0.086005, 0.217203, 0.715311, 2.463217",\ + "0.040034, 0.086005, 0.217274, 0.715311, 2.463217",\ + "0.040034, 0.086006, 0.217512, 0.715311, 2.463317",\ + "0.040035, 0.086006, 0.217512, 0.715311, 2.463317",\ + "0.040226, 0.086033, 0.217850, 0.715337, 2.463779"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + values ( "0.305437, 0.331199, 0.382601, 0.549410, 1.139710",\ + "0.392830, 0.418591, 0.469994, 0.636803, 1.227103",\ + "0.473699, 0.499461, 0.550863, 0.717672, 1.307972",\ + "0.531348, 0.557110, 0.608512, 0.775321, 1.365621",\ + "0.834004, 0.859766, 0.911168, 1.077978, 1.668277"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + values ( "0.040698, 0.070039, 0.145874, 0.444024, 1.524451",\ + "0.040698, 0.070039, 0.145874, 0.444024, 1.524451",\ + "0.040698, 0.070039, 0.145874, 0.444024, 1.524451",\ + "0.040698, 0.070039, 0.145874, 0.444024, 1.524451",\ + "0.040713, 0.070039, 0.145879, 0.444024, 1.524451"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[4]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[0]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.513066, 0.693179, 0.880758, 1.182738, 1.765834",\ + "0.542527, 0.722641, 0.910219, 1.212199, 1.795295",\ + "0.613598, 0.793711, 0.981290, 1.283270, 1.866366",\ + "0.869826, 1.049940, 1.237518, 1.539498, 2.122594",\ + "1.786688, 1.966801, 2.154380, 2.456360, 3.039456",\ + "0.598004, 0.778015, 0.965828, 1.268244, 1.852212",\ + "0.627466, 0.807477, 0.995290, 1.297706, 1.881674",\ + "0.698536, 0.878547, 1.066360, 1.368776, 1.952744",\ + "0.954764, 1.134775, 1.322588, 1.625004, 2.208972",\ + "1.871626, 2.051637, 2.239450, 2.541866, 3.125834",\ + "0.673916, 0.853459, 1.040637, 1.342841, 1.926384",\ + "0.703378, 0.882920, 1.070099, 1.372302, 1.955846",\ + "0.774448, 0.953991, 1.141169, 1.443373, 2.026917",\ + "1.030676, 1.210219, 1.397397, 1.699601, 2.283145",\ + "1.947538, 2.127081, 2.314259, 2.616463, 3.200006",\ + "0.728285, 0.908210, 1.095526, 1.397446, 1.980702",\ + "0.757747, 0.937672, 1.124987, 1.426908, 2.010164",\ + "0.828817, 1.008742, 1.196058, 1.497978, 2.081234",\ + "1.085046, 1.264970, 1.452286, 1.754207, 2.337462",\ + "2.001907, 2.181832, 2.369148, 2.671068, 3.254324",\ + "1.009880, 1.193775, 1.379701, 1.681172, 2.263979",\ + "1.039342, 1.223237, 1.409163, 1.710634, 2.293441",\ + "1.110412, 1.294307, 1.480233, 1.781705, 2.364511",\ + "1.366640, 1.550535, 1.736461, 2.037933, 2.620739",\ + "2.283502, 2.467397, 2.653323, 2.954794, 3.537601"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.036484, 0.036484, 0.036484, 0.036484, 0.036484",\ + "0.083490, 0.083490, 0.083490, 0.083490, 0.083490",\ + "0.215720, 0.215720, 0.215720, 0.215720, 0.215720",\ + "0.705638, 0.705638, 0.705638, 0.705638, 0.705639",\ + "2.456797, 2.456797, 2.456797, 2.456797, 2.456796",\ + "0.036484, 0.036484, 0.036484, 0.036484, 0.036484",\ + "0.083490, 0.083490, 0.083490, 0.083490, 0.083490",\ + "0.215720, 0.215720, 0.215720, 0.215720, 0.215720",\ + "0.705638, 0.705638, 0.705638, 0.705638, 0.705639",\ + "2.456797, 2.456797, 2.456797, 2.456797, 2.456796",\ + "0.036484, 0.036484, 0.036484, 0.036484, 0.036484",\ + "0.083490, 0.083490, 0.083490, 0.083490, 0.083490",\ + "0.215720, 0.215720, 0.215720, 0.215720, 0.215720",\ + "0.705638, 0.705638, 0.705638, 0.705638, 0.705639",\ + "2.456797, 2.456797, 2.456797, 2.456797, 2.456796",\ + "0.036484, 0.036484, 0.036484, 0.036484, 0.036484",\ + "0.083490, 0.083490, 0.083490, 0.083490, 0.083490",\ + "0.215720, 0.215720, 0.215720, 0.215720, 0.215720",\ + "0.705638, 0.705638, 0.705638, 0.705638, 0.705639",\ + "2.456797, 2.456797, 2.456797, 2.456797, 2.456796",\ + "0.036484, 0.036484, 0.036484, 0.036484, 0.036484",\ + "0.083490, 0.083490, 0.083490, 0.083490, 0.083490",\ + "0.215720, 0.215720, 0.215720, 0.215720, 0.215720",\ + "0.705638, 0.705638, 0.705638, 0.705638, 0.705639",\ + "2.456797, 2.456797, 2.456797, 2.456797, 2.456796"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.386409, 0.654020, 0.915421, 1.355198, 2.234359",\ + "0.410259, 0.677869, 0.939270, 1.379047, 2.258208",\ + "0.459812, 0.727422, 0.988823, 1.428600, 2.307761",\ + "0.625736, 0.893347, 1.154748, 1.594525, 2.473686",\ + "1.214590, 1.482201, 1.743601, 2.183378, 3.062539",\ + "0.475113, 0.742095, 1.004062, 1.443427, 2.321764",\ + "0.498963, 0.765944, 1.027911, 1.467276, 2.345613",\ + "0.548516, 0.815497, 1.077464, 1.516829, 2.395166",\ + "0.714441, 0.981422, 1.243389, 1.682754, 2.561091",\ + "1.303294, 1.570276, 1.832242, 2.271607, 3.149944",\ + "0.568056, 0.835415, 1.096106, 1.535673, 2.414806",\ + "0.591905, 0.859264, 1.119956, 1.559522, 2.438655",\ + "0.641458, 0.908817, 1.169509, 1.609075, 2.488208",\ + "0.807383, 1.074742, 1.335433, 1.775000, 2.654133",\ + "1.396236, 1.663596, 1.924287, 2.363853, 3.242986",\ + "0.633899, 0.903979, 1.163162, 1.602684, 2.481728",\ + "0.657749, 0.927829, 1.187012, 1.626534, 2.505577",\ + "0.707301, 0.977382, 1.236565, 1.676086, 2.555130",\ + "0.873226, 1.143306, 1.402490, 1.842011, 2.721055",\ + "1.462080, 1.732160, 1.991343, 2.430865, 3.309908",\ + "0.980421, 1.284815, 1.533833, 1.971910, 2.848063",\ + "1.004270, 1.308664, 1.557683, 1.995759, 2.871912",\ + "1.053823, 1.358217, 1.607235, 2.045312, 2.921465",\ + "1.219748, 1.524142, 1.773160, 2.211237, 3.087390",\ + "1.808601, 2.112996, 2.362014, 2.800090, 3.676243"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.032904, 0.032904, 0.032904, 0.032904, 0.032904",\ + "0.061453, 0.061453, 0.061453, 0.061453, 0.061453",\ + "0.139114, 0.139114, 0.139114, 0.139114, 0.139114",\ + "0.439459, 0.439459, 0.439459, 0.439459, 0.439460",\ + "1.519040, 1.519040, 1.519040, 1.519040, 1.519040",\ + "0.032904, 0.032904, 0.032904, 0.032904, 0.032904",\ + "0.061453, 0.061453, 0.061453, 0.061453, 0.061453",\ + "0.139114, 0.139114, 0.139114, 0.139114, 0.139114",\ + "0.439459, 0.439459, 0.439459, 0.439459, 0.439460",\ + "1.519040, 1.519040, 1.519040, 1.519040, 1.519040",\ + "0.032904, 0.032904, 0.032904, 0.032904, 0.032904",\ + "0.061453, 0.061453, 0.061453, 0.061453, 0.061453",\ + "0.139114, 0.139114, 0.139114, 0.139114, 0.139114",\ + "0.439459, 0.439459, 0.439459, 0.439459, 0.439460",\ + "1.519040, 1.519040, 1.519040, 1.519040, 1.519040",\ + "0.032904, 0.032904, 0.032904, 0.032904, 0.032904",\ + "0.061453, 0.061453, 0.061453, 0.061453, 0.061453",\ + "0.139114, 0.139114, 0.139114, 0.139114, 0.139114",\ + "0.439459, 0.439459, 0.439459, 0.439459, 0.439460",\ + "1.519040, 1.519040, 1.519040, 1.519040, 1.519040",\ + "0.032904, 0.032904, 0.032904, 0.032904, 0.032904",\ + "0.061453, 0.061453, 0.061453, 0.061453, 0.061453",\ + "0.139114, 0.139114, 0.139114, 0.139114, 0.139114",\ + "0.439459, 0.439459, 0.439459, 0.439459, 0.439460",\ + "1.519040, 1.519040, 1.519040, 1.519040, 1.519040"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[4]_redg_min_2475*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[1]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.421174, 0.684705, 0.960825, 1.428958, 2.363963",\ + "0.450636, 0.714167, 0.990287, 1.458419, 2.393425",\ + "0.521706, 0.785238, 1.061357, 1.529490, 2.464495",\ + "0.777934, 1.041466, 1.317585, 1.785718, 2.720724",\ + "1.694796, 1.958328, 2.234447, 2.702580, 3.637585",\ + "0.509368, 0.772246, 1.048392, 1.515673, 2.449897",\ + "0.538830, 0.801708, 1.077854, 1.545135, 2.479358",\ + "0.609900, 0.872778, 1.148924, 1.616205, 2.550429",\ + "0.866129, 1.129006, 1.405152, 1.872433, 2.806657",\ + "1.782991, 2.045868, 2.322014, 2.789295, 3.723519",\ + "0.597685, 0.861225, 1.136357, 1.603313, 2.536852",\ + "0.627146, 0.890687, 1.165819, 1.632775, 2.566314",\ + "0.698217, 0.961758, 1.236889, 1.703845, 2.637384",\ + "0.954445, 1.217986, 1.493117, 1.960074, 2.893612",\ + "1.871307, 2.134848, 2.409979, 2.876935, 3.810474",\ + "0.660181, 0.926859, 1.200497, 1.667402, 2.600361",\ + "0.689642, 0.956321, 1.229958, 1.696864, 2.629822",\ + "0.760713, 1.027391, 1.301029, 1.767934, 2.700893",\ + "1.016941, 1.283619, 1.557257, 2.024162, 2.957121",\ + "1.933803, 2.200481, 2.474119, 2.941024, 3.873983",\ + "0.989306, 1.291174, 1.552361, 2.016846, 2.945817",\ + "1.018768, 1.320636, 1.581822, 2.046308, 2.975279",\ + "1.089838, 1.391706, 1.652893, 2.117378, 3.046349",\ + "1.346066, 1.647934, 1.909121, 2.373606, 3.302577",\ + "2.262928, 2.564796, 2.825983, 3.290468, 4.219439"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.036484, 0.036484, 0.036484, 0.036485, 0.036485",\ + "0.083490, 0.083490, 0.083490, 0.083490, 0.083490",\ + "0.215720, 0.215720, 0.215720, 0.215720, 0.215721",\ + "0.705638, 0.705639, 0.705640, 0.705642, 0.705647",\ + "2.456797, 2.456796, 2.456794, 2.456789, 2.456778",\ + "0.036484, 0.036484, 0.036484, 0.036485, 0.036485",\ + "0.083490, 0.083490, 0.083490, 0.083490, 0.083490",\ + "0.215720, 0.215720, 0.215720, 0.215720, 0.215721",\ + "0.705638, 0.705639, 0.705640, 0.705642, 0.705647",\ + "2.456797, 2.456796, 2.456794, 2.456789, 2.456778",\ + "0.036484, 0.036484, 0.036484, 0.036485, 0.036485",\ + "0.083490, 0.083490, 0.083490, 0.083490, 0.083490",\ + "0.215720, 0.215720, 0.215720, 0.215720, 0.215721",\ + "0.705638, 0.705639, 0.705640, 0.705642, 0.705647",\ + "2.456797, 2.456796, 2.456794, 2.456789, 2.456778",\ + "0.036484, 0.036484, 0.036484, 0.036485, 0.036485",\ + "0.083490, 0.083490, 0.083490, 0.083490, 0.083490",\ + "0.215720, 0.215720, 0.215720, 0.215720, 0.215721",\ + "0.705638, 0.705639, 0.705640, 0.705642, 0.705647",\ + "2.456797, 2.456796, 2.456794, 2.456789, 2.456778",\ + "0.036484, 0.036484, 0.036484, 0.036485, 0.036485",\ + "0.083490, 0.083490, 0.083490, 0.083490, 0.083490",\ + "0.215720, 0.215720, 0.215720, 0.215720, 0.215721",\ + "0.705638, 0.705639, 0.705640, 0.705642, 0.705647",\ + "2.456797, 2.456796, 2.456794, 2.456789, 2.456778"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.369364, 0.551422, 0.747656, 1.056837, 1.651321",\ + "0.393214, 0.575271, 0.771505, 1.080686, 1.675170",\ + "0.442767, 0.624824, 0.821058, 1.130239, 1.724723",\ + "0.608691, 0.790749, 0.986983, 1.296166, 1.890653",\ + "1.197545, 1.379603, 1.575836, 1.885017, 2.479500",\ + "0.456779, 0.638740, 0.834936, 1.144142, 1.738674",\ + "0.480629, 0.662590, 0.858786, 1.167991, 1.762524",\ + "0.530181, 0.712143, 0.908339, 1.217544, 1.812076",\ + "0.696106, 0.878068, 1.074264, 1.383471, 1.978007",\ + "1.284960, 1.466921, 1.663117, 1.972322, 2.566853",\ + "0.537655, 0.719077, 0.914963, 1.224170, 1.818706",\ + "0.561505, 0.742927, 0.938813, 1.248020, 1.842555",\ + "0.611058, 0.792479, 0.988366, 1.297573, 1.892108",\ + "0.776982, 0.958404, 1.154291, 1.463499, 2.058038",\ + "1.365836, 1.547258, 1.743144, 2.052350, 2.646885",\ + "0.595302, 0.776914, 0.972699, 1.281641, 1.875802",\ + "0.619151, 0.800763, 0.996549, 1.305490, 1.899651",\ + "0.668704, 0.850316, 1.046101, 1.355043, 1.949204",\ + "0.834629, 1.016241, 1.212026, 1.520970, 2.115134",\ + "1.423483, 1.605095, 1.800880, 2.109821, 2.703980",\ + "0.897509, 1.082291, 1.276362, 1.584848, 2.178120",\ + "0.921359, 1.106141, 1.300212, 1.608697, 2.201969",\ + "0.970912, 1.155693, 1.349765, 1.658250, 2.251522",\ + "1.136837, 1.321618, 1.515690, 1.824177, 2.417452",\ + "1.725690, 1.910472, 2.104543, 2.413028, 3.006299"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.032902, 0.032902, 0.032902, 0.032902, 0.032902",\ + "0.061453, 0.061453, 0.061453, 0.061453, 0.061453",\ + "0.139113, 0.139113, 0.139113, 0.139113, 0.139113",\ + "0.439438, 0.439438, 0.439438, 0.439438, 0.439438",\ + "1.519040, 1.519040, 1.519040, 1.519041, 1.519042",\ + "0.032902, 0.032902, 0.032902, 0.032902, 0.032902",\ + "0.061453, 0.061453, 0.061453, 0.061453, 0.061453",\ + "0.139113, 0.139113, 0.139113, 0.139113, 0.139113",\ + "0.439438, 0.439438, 0.439438, 0.439438, 0.439438",\ + "1.519040, 1.519040, 1.519040, 1.519041, 1.519042",\ + "0.032902, 0.032902, 0.032902, 0.032902, 0.032902",\ + "0.061453, 0.061453, 0.061453, 0.061453, 0.061453",\ + "0.139113, 0.139113, 0.139113, 0.139113, 0.139113",\ + "0.439438, 0.439438, 0.439438, 0.439438, 0.439438",\ + "1.519040, 1.519040, 1.519040, 1.519041, 1.519042",\ + "0.032902, 0.032902, 0.032902, 0.032902, 0.032902",\ + "0.061453, 0.061453, 0.061453, 0.061453, 0.061453",\ + "0.139113, 0.139113, 0.139113, 0.139113, 0.139113",\ + "0.439438, 0.439438, 0.439438, 0.439438, 0.439438",\ + "1.519040, 1.519040, 1.519040, 1.519041, 1.519042",\ + "0.032902, 0.032902, 0.032902, 0.032902, 0.032902",\ + "0.061453, 0.061453, 0.061453, 0.061453, 0.061453",\ + "0.139113, 0.139113, 0.139113, 0.139113, 0.139113",\ + "0.439438, 0.439438, 0.439438, 0.439438, 0.439438",\ + "1.519040, 1.519040, 1.519040, 1.519041, 1.519042"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[4]_redg_min_2397*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[2]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.417196, 0.676755, 0.948391, 1.404553, 2.315723",\ + "0.446658, 0.706217, 0.977853, 1.434015, 2.345185",\ + "0.517728, 0.777287, 1.048923, 1.505085, 2.416255",\ + "0.773956, 1.033516, 1.305151, 1.761314, 2.672484",\ + "1.690818, 1.950378, 2.222013, 2.678175, 3.589345",\ + "0.505301, 0.764288, 1.035920, 1.491269, 2.401657",\ + "0.534763, 0.793750, 1.065382, 1.520731, 2.431119",\ + "0.605833, 0.864820, 1.136452, 1.591801, 2.502189",\ + "0.862061, 1.121048, 1.392680, 1.848029, 2.758418",\ + "1.778923, 2.037910, 2.309542, 2.764891, 3.675279",\ + "0.593331, 0.853252, 1.123884, 1.578908, 2.488612",\ + "0.622793, 0.882714, 1.153346, 1.608370, 2.518074",\ + "0.693863, 0.953785, 1.224416, 1.679440, 2.589144",\ + "0.950091, 1.210013, 1.480644, 1.935668, 2.845373",\ + "1.866953, 2.126875, 2.397506, 2.852530, 3.762234",\ + "0.655552, 0.918864, 1.188022, 1.642982, 2.552121",\ + "0.685014, 0.948326, 1.217484, 1.672444, 2.581583",\ + "0.756084, 1.019396, 1.288554, 1.743514, 2.652653",\ + "1.012312, 1.275624, 1.544782, 1.999743, 2.908882",\ + "1.929174, 2.192486, 2.461644, 2.916604, 3.825743",\ + "0.982940, 1.282912, 1.539764, 1.992368, 2.897577",\ + "1.012401, 1.312374, 1.569226, 2.021830, 2.927039",\ + "1.083472, 1.383444, 1.640296, 2.092901, 2.998109",\ + "1.339700, 1.639673, 1.896525, 2.349129, 3.254338",\ + "2.256562, 2.556535, 2.813386, 3.265991, 4.171199"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.036484, 0.036484, 0.036485, 0.036485, 0.036486",\ + "0.083490, 0.083490, 0.083490, 0.083490, 0.083490",\ + "0.215720, 0.215720, 0.215720, 0.215720, 0.215721",\ + "0.705638, 0.705639, 0.705640, 0.705645, 0.705653",\ + "2.456797, 2.456796, 2.456792, 2.456783, 2.456766",\ + "0.036484, 0.036484, 0.036485, 0.036485, 0.036486",\ + "0.083490, 0.083490, 0.083490, 0.083490, 0.083490",\ + "0.215720, 0.215720, 0.215720, 0.215720, 0.215721",\ + "0.705638, 0.705639, 0.705640, 0.705645, 0.705653",\ + "2.456797, 2.456796, 2.456792, 2.456783, 2.456766",\ + "0.036484, 0.036484, 0.036485, 0.036485, 0.036486",\ + "0.083490, 0.083490, 0.083490, 0.083490, 0.083490",\ + "0.215720, 0.215720, 0.215720, 0.215720, 0.215721",\ + "0.705638, 0.705639, 0.705640, 0.705645, 0.705653",\ + "2.456797, 2.456796, 2.456792, 2.456783, 2.456766",\ + "0.036484, 0.036484, 0.036485, 0.036485, 0.036486",\ + "0.083490, 0.083490, 0.083490, 0.083490, 0.083490",\ + "0.215720, 0.215720, 0.215720, 0.215720, 0.215721",\ + "0.705638, 0.705639, 0.705640, 0.705645, 0.705653",\ + "2.456797, 2.456796, 2.456792, 2.456783, 2.456766",\ + "0.036484, 0.036484, 0.036485, 0.036485, 0.036486",\ + "0.083490, 0.083490, 0.083490, 0.083490, 0.083490",\ + "0.215720, 0.215720, 0.215720, 0.215720, 0.215721",\ + "0.705638, 0.705639, 0.705641, 0.705645, 0.705653",\ + "2.456797, 2.456795, 2.456792, 2.456783, 2.456766"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.367701, 0.549868, 0.745966, 1.055305, 1.650265",\ + "0.391550, 0.573717, 0.769816, 1.079154, 1.674115",\ + "0.441103, 0.623270, 0.819369, 1.128707, 1.723667",\ + "0.607028, 0.789195, 0.985294, 1.294634, 1.889598",\ + "1.195881, 1.378049, 1.574147, 1.883484, 2.478444",\ + "0.455121, 0.637187, 0.833247, 1.142610, 1.737619",\ + "0.478970, 0.661036, 0.857097, 1.166459, 1.761468",\ + "0.528523, 0.710589, 0.906649, 1.216012, 1.811021",\ + "0.694448, 0.876514, 1.072575, 1.381939, 1.976952",\ + "1.283301, 1.465367, 1.661428, 1.970789, 2.565797",\ + "0.535988, 0.717524, 0.913274, 1.222638, 1.817651",\ + "0.559838, 0.741373, 0.937124, 1.246487, 1.841500",\ + "0.609390, 0.790926, 0.986676, 1.296040, 1.891052",\ + "0.775315, 0.956851, 1.152602, 1.461967, 2.056983",\ + "1.364169, 1.545704, 1.741455, 2.050818, 2.645829",\ + "0.593627, 0.775360, 0.971009, 1.280109, 1.874747",\ + "0.617477, 0.799210, 0.994859, 1.303958, 1.898596",\ + "0.667029, 0.848763, 1.044412, 1.353511, 1.948149",\ + "0.832954, 1.014688, 1.210337, 1.519438, 2.114080",\ + "1.421808, 1.603541, 1.799190, 2.108289, 2.702925",\ + "0.895722, 1.080739, 1.274673, 1.583317, 2.177067",\ + "0.919572, 1.104588, 1.298523, 1.607166, 2.200916",\ + "0.969124, 1.154141, 1.348075, 1.656719, 2.250468",\ + "1.135049, 1.320066, 1.514001, 1.822646, 2.416399",\ + "1.723903, 1.908919, 2.102854, 2.411496, 3.005245"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.032902, 0.032902, 0.032902, 0.032902, 0.032902",\ + "0.061453, 0.061453, 0.061453, 0.061453, 0.061454",\ + "0.139113, 0.139113, 0.139113, 0.139113, 0.139113",\ + "0.439435, 0.439435, 0.439435, 0.439435, 0.439435",\ + "1.519040, 1.519040, 1.519040, 1.519041, 1.519043",\ + "0.032902, 0.032902, 0.032902, 0.032902, 0.032902",\ + "0.061453, 0.061453, 0.061453, 0.061453, 0.061454",\ + "0.139113, 0.139113, 0.139113, 0.139113, 0.139113",\ + "0.439435, 0.439435, 0.439435, 0.439435, 0.439435",\ + "1.519040, 1.519040, 1.519040, 1.519041, 1.519043",\ + "0.032902, 0.032902, 0.032902, 0.032902, 0.032902",\ + "0.061453, 0.061453, 0.061453, 0.061453, 0.061454",\ + "0.139113, 0.139113, 0.139113, 0.139113, 0.139113",\ + "0.439435, 0.439435, 0.439435, 0.439435, 0.439435",\ + "1.519040, 1.519040, 1.519040, 1.519041, 1.519043",\ + "0.032902, 0.032902, 0.032902, 0.032902, 0.032902",\ + "0.061453, 0.061453, 0.061453, 0.061453, 0.061454",\ + "0.139113, 0.139113, 0.139113, 0.139113, 0.139113",\ + "0.439435, 0.439435, 0.439435, 0.439435, 0.439435",\ + "1.519040, 1.519040, 1.519040, 1.519041, 1.519043",\ + "0.032902, 0.032902, 0.032902, 0.032902, 0.032902",\ + "0.061453, 0.061453, 0.061453, 0.061453, 0.061454",\ + "0.139113, 0.139113, 0.139113, 0.139113, 0.139113",\ + "0.439435, 0.439435, 0.439435, 0.439435, 0.439435",\ + "1.519040, 1.519040, 1.519040, 1.519041, 1.519043"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[4]_redg_min_2338*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + related_output_pin : "obs_ctrl_o[3]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.509479, 0.687819, 0.868166, 1.154352, 1.705105",\ + "0.538941, 0.717281, 0.897627, 1.183814, 1.734567",\ + "0.610011, 0.788351, 0.968698, 1.254884, 1.805637",\ + "0.866239, 1.044579, 1.224926, 1.511112, 2.061866",\ + "1.783101, 1.961441, 2.141788, 2.427974, 2.978728",\ + "0.594418, 0.772655, 0.953236, 1.239858, 1.791484",\ + "0.623879, 0.802116, 0.982697, 1.269320, 1.820946",\ + "0.694950, 0.873187, 1.053768, 1.340390, 1.892016",\ + "0.951178, 1.129415, 1.309996, 1.596619, 2.148244",\ + "1.868040, 2.046277, 2.226858, 2.513480, 3.065106",\ + "0.670324, 0.848098, 1.028045, 1.314455, 1.865656",\ + "0.699786, 0.877560, 1.057506, 1.343917, 1.895118",\ + "0.770856, 0.948630, 1.128577, 1.414987, 1.966188",\ + "1.027084, 1.204858, 1.384805, 1.671215, 2.222416",\ + "1.943946, 2.121720, 2.301667, 2.588077, 3.139278",\ + "0.724676, 0.902843, 1.082910, 1.369049, 1.919973",\ + "0.754138, 0.932305, 1.112372, 1.398511, 1.949435",\ + "0.825208, 1.003376, 1.183442, 1.469581, 2.020505",\ + "1.081436, 1.259604, 1.439670, 1.725809, 2.276733",\ + "1.998298, 2.176466, 2.356532, 2.642671, 3.193595",\ + "1.006098, 1.188361, 1.367063, 1.652775, 2.203251",\ + "1.035560, 1.217823, 1.396525, 1.682237, 2.232713",\ + "1.106630, 1.288893, 1.467595, 1.753307, 2.303783",\ + "1.362858, 1.545121, 1.723823, 2.009535, 2.560011",\ + "2.279720, 2.461983, 2.640685, 2.926397, 3.476873"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.036484, 0.036484, 0.036484, 0.036484, 0.036484",\ + "0.083490, 0.083490, 0.083490, 0.083490, 0.083490",\ + "0.215720, 0.215720, 0.215720, 0.215720, 0.215720",\ + "0.705638, 0.705638, 0.705638, 0.705638, 0.705639",\ + "2.456797, 2.456797, 2.456797, 2.456796, 2.456796",\ + "0.036484, 0.036484, 0.036484, 0.036484, 0.036484",\ + "0.083490, 0.083490, 0.083490, 0.083490, 0.083490",\ + "0.215720, 0.215720, 0.215720, 0.215720, 0.215720",\ + "0.705638, 0.705638, 0.705638, 0.705638, 0.705639",\ + "2.456797, 2.456797, 2.456797, 2.456796, 2.456796",\ + "0.036484, 0.036484, 0.036484, 0.036484, 0.036484",\ + "0.083490, 0.083490, 0.083490, 0.083490, 0.083490",\ + "0.215720, 0.215720, 0.215720, 0.215720, 0.215720",\ + "0.705638, 0.705638, 0.705638, 0.705638, 0.705639",\ + "2.456797, 2.456797, 2.456797, 2.456796, 2.456796",\ + "0.036484, 0.036484, 0.036484, 0.036484, 0.036484",\ + "0.083490, 0.083490, 0.083490, 0.083490, 0.083490",\ + "0.215720, 0.215720, 0.215720, 0.215720, 0.215720",\ + "0.705638, 0.705638, 0.705638, 0.705638, 0.705639",\ + "2.456797, 2.456797, 2.456797, 2.456796, 2.456796",\ + "0.036484, 0.036484, 0.036484, 0.036484, 0.036484",\ + "0.083490, 0.083490, 0.083490, 0.083490, 0.083490",\ + "0.215720, 0.215720, 0.215720, 0.215720, 0.215720",\ + "0.705638, 0.705638, 0.705638, 0.705638, 0.705639",\ + "2.456797, 2.456797, 2.456797, 2.456796, 2.456796"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.384973, 0.649972, 0.909002, 1.345266, 2.217413",\ + "0.408823, 0.673822, 0.932851, 1.369116, 2.241262",\ + "0.458376, 0.723375, 0.982404, 1.418669, 2.290815",\ + "0.624300, 0.889300, 1.148329, 1.584594, 2.456740",\ + "1.213154, 1.478153, 1.737183, 2.173447, 3.045593",\ + "0.473639, 0.738047, 0.997643, 1.433495, 2.304818",\ + "0.497488, 0.761897, 1.021492, 1.457345, 2.328667",\ + "0.547041, 0.811450, 1.071045, 1.506897, 2.378220",\ + "0.712966, 0.977375, 1.236970, 1.672822, 2.544145",\ + "1.301819, 1.566228, 1.825824, 2.261676, 3.132998",\ + "0.566446, 0.831341, 1.089678, 1.525738, 2.397860",\ + "0.590295, 0.855190, 1.113528, 1.549588, 2.421709",\ + "0.639848, 0.904743, 1.163080, 1.599141, 2.471262",\ + "0.805773, 1.070668, 1.329005, 1.765066, 2.637187",\ + "1.394626, 1.659522, 1.917859, 2.353919, 3.226040",\ + "0.632168, 0.899875, 1.156733, 1.592745, 2.464769",\ + "0.656018, 0.923725, 1.180583, 1.616595, 2.488619",\ + "0.705570, 0.973277, 1.230135, 1.666147, 2.538172",\ + "0.871495, 1.139202, 1.396060, 1.832072, 2.704097",\ + "1.460349, 1.728056, 1.984914, 2.420926, 3.292950",\ + "0.977957, 1.280373, 1.527371, 1.961946, 2.831096",\ + "1.001807, 1.304223, 1.551221, 1.985796, 2.854946",\ + "1.051360, 1.353776, 1.600773, 2.035348, 2.904499",\ + "1.217285, 1.519701, 1.766698, 2.201273, 3.070424",\ + "1.806138, 2.108554, 2.355552, 2.790127, 3.659277"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + index_3 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.032904, 0.032904, 0.032904, 0.032904, 0.032904",\ + "0.061453, 0.061453, 0.061453, 0.061453, 0.061453",\ + "0.139114, 0.139114, 0.139114, 0.139114, 0.139114",\ + "0.439459, 0.439459, 0.439459, 0.439459, 0.439460",\ + "1.519040, 1.519040, 1.519040, 1.519040, 1.519040",\ + "0.032904, 0.032904, 0.032904, 0.032904, 0.032904",\ + "0.061453, 0.061453, 0.061453, 0.061453, 0.061453",\ + "0.139114, 0.139114, 0.139114, 0.139114, 0.139114",\ + "0.439459, 0.439459, 0.439459, 0.439459, 0.439460",\ + "1.519040, 1.519040, 1.519040, 1.519040, 1.519040",\ + "0.032904, 0.032904, 0.032904, 0.032904, 0.032904",\ + "0.061453, 0.061453, 0.061453, 0.061453, 0.061453",\ + "0.139114, 0.139114, 0.139114, 0.139114, 0.139114",\ + "0.439459, 0.439459, 0.439459, 0.439459, 0.439460",\ + "1.519040, 1.519040, 1.519040, 1.519040, 1.519040",\ + "0.032904, 0.032904, 0.032904, 0.032904, 0.032904",\ + "0.061453, 0.061453, 0.061453, 0.061453, 0.061453",\ + "0.139114, 0.139114, 0.139114, 0.139114, 0.139114",\ + "0.439459, 0.439459, 0.439459, 0.439459, 0.439460",\ + "1.519040, 1.519040, 1.519040, 1.519040, 1.519040",\ + "0.032904, 0.032904, 0.032904, 0.032904, 0.032904",\ + "0.061453, 0.061453, 0.061453, 0.061453, 0.061453",\ + "0.139114, 0.139114, 0.139114, 0.139114, 0.139114",\ + "0.439459, 0.439459, 0.439459, 0.439459, 0.439460",\ + "1.519040, 1.519040, 1.519040, 1.519040, 1.519040"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[4]_redg_min_2281*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + values ( "0.137483, 0.167263, 0.238963, 0.495239, 1.411098",\ + "0.225669, 0.255448, 0.327158, 0.583483, 1.499024",\ + "0.313993, 0.343772, 0.415484, 0.672004, 1.587106",\ + "0.376583, 0.406365, 0.478019, 0.734834, 1.650402",\ + "0.706456, 0.736253, 0.807711, 1.064965, 1.982165"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + values ( "0.036484, 0.083490, 0.215720, 0.705638, 2.456797",\ + "0.036484, 0.083490, 0.215720, 0.705638, 2.456797",\ + "0.036484, 0.083490, 0.215720, 0.705638, 2.456797",\ + "0.036484, 0.083490, 0.215720, 0.705638, 2.456797",\ + "0.036484, 0.083490, 0.215720, 0.705638, 2.456797"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + values ( "0.176752, 0.200264, 0.249493, 0.415210, 1.004034",\ + "0.264156, 0.287668, 0.336897, 0.502613, 1.091438",\ + "0.345055, 0.368563, 0.417796, 0.583517, 1.172351",\ + "0.402719, 0.426221, 0.475463, 0.641191, 1.230042",\ + "0.705079, 0.728567, 0.777838, 0.943636, 1.532658"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + values ( "0.032905, 0.061452, 0.139114, 0.438652, 1.518506",\ + "0.032905, 0.061452, 0.139114, 0.438651, 1.518506",\ + "0.032905, 0.061452, 0.139114, 0.438651, 1.518304",\ + "0.032905, 0.061452, 0.139114, 0.438651, 1.517928",\ + "0.032905, 0.061452, 0.139114, 0.438651, 1.516755"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[4]_redg_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + values ( "0.078780, 0.108904, 0.180162, 0.436350, 1.354954",\ + "0.161131, 0.191551, 0.262992, 0.519079, 1.434794",\ + "0.248818, 0.281701, 0.353526, 0.609224, 1.527520",\ + "0.395442, 0.436624, 0.511587, 0.767048, 1.680857",\ + "0.628254, 0.688519, 0.779900, 1.032171, 1.943170"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + values ( "0.039260, 0.084846, 0.216310, 0.712907, 2.472405",\ + "0.040828, 0.085695, 0.216652, 0.713345, 2.472405",\ + "0.053126, 0.092383, 0.217457, 0.713345, 2.472405",\ + "0.083384, 0.114454, 0.223298, 0.713345, 2.472405",\ + "0.146832, 0.172946, 0.257648, 0.713345, 2.472405"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + values ( "0.111195, 0.136417, 0.187667, 0.354647, 0.943283",\ + "0.190886, 0.217040, 0.268217, 0.434338, 1.024857",\ + "0.290624, 0.318413, 0.371169, 0.537479, 1.127671",\ + "0.459778, 0.495342, 0.553556, 0.720468, 1.308289",\ + "0.729543, 0.783345, 0.859617, 1.032769, 1.617997"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + values ( "0.039937, 0.069327, 0.145375, 0.445019, 1.525316",\ + "0.040361, 0.069327, 0.145375, 0.445019, 1.525316",\ + "0.050876, 0.076651, 0.148151, 0.445019, 1.525316",\ + "0.080615, 0.101623, 0.163833, 0.445639, 1.525316",\ + "0.141343, 0.163058, 0.212463, 0.458329, 1.525316"); + } + + } /* end of arc padmux2ast_i[4]_obs_ctrl_o[4]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + values ( "0.074275, 0.103763, 0.175018, 0.429970, 1.346996",\ + "0.156202, 0.185726, 0.256855, 0.512618, 1.426492",\ + "0.240487, 0.272170, 0.343383, 0.599128, 1.515415",\ + "0.383350, 0.422200, 0.495747, 0.749948, 1.664120",\ + "0.607487, 0.663633, 0.751277, 1.002826, 1.912977"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + values ( "0.036818, 0.083430, 0.215329, 0.698468, 2.446538",\ + "0.038327, 0.084129, 0.215329, 0.703907, 2.446538",\ + "0.049194, 0.090132, 0.216807, 0.705668, 2.446538",\ + "0.076596, 0.110889, 0.221927, 0.706146, 2.457507",\ + "0.133978, 0.165656, 0.252644, 0.710730, 2.457507"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + values ( "0.080352, 0.102927, 0.151178, 0.316498, 0.906413",\ + "0.165823, 0.188579, 0.236900, 0.401944, 0.996012",\ + "0.261266, 0.287577, 0.337732, 0.502614, 1.091236",\ + "0.421122, 0.455539, 0.512029, 0.676457, 1.262940",\ + "0.677737, 0.731402, 0.807099, 0.979432, 1.563317"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000989, 0.004228, 0.012809, 0.044125, 0.156168"); + values ( "0.032503, 0.061295, 0.138759, 0.440292, 1.520208",\ + "0.033685, 0.061572, 0.138902, 0.440292, 1.520208",\ + "0.046324, 0.071119, 0.142587, 0.440292, 1.520208",\ + "0.075437, 0.096388, 0.158394, 0.443652, 1.520208",\ + "0.135609, 0.156947, 0.206102, 0.453960, 1.520208"); + } + + } /* end of arc padmux2ast_i[4]_obs_ctrl_o[4]_una_min*/ + +} /* end of pin obs_ctrl_o[4] */ + +pin("obs_ctrl_o[3]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.644672 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001495 ; + + /* Other user defined attributes. */ + original_pin : obs_ctrl_o[3]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.055709, 0.210088, 0.384212, 0.703085, 1.340832",\ + "0.142647, 0.298162, 0.472853, 0.791314, 1.428237",\ + "0.229323, 0.390455, 0.564578, 0.883479, 1.521279",\ + "0.289539, 0.457859, 0.631598, 0.950329, 1.587790",\ + "0.602001, 0.825705, 1.001142, 1.318707, 1.953837"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.024618, 0.296918, 0.628376, 1.238420, 2.458509",\ + "0.028418, 0.296918, 0.628376, 1.238420, 2.458509",\ + "0.041905, 0.299457, 0.628376, 1.238420, 2.458509",\ + "0.054019, 0.302915, 0.628376, 1.238420, 2.458509",\ + "0.127335, 0.341609, 0.634026, 1.242336, 2.458956"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.067216, 0.173388, 0.285052, 0.487701, 0.892999",\ + "0.152154, 0.258224, 0.370122, 0.573207, 0.979377",\ + "0.227820, 0.333667, 0.444931, 0.647804, 1.053549",\ + "0.281475, 0.388179, 0.499582, 0.702344, 1.107867",\ + "0.555896, 0.671760, 0.783533, 0.986070, 1.391144"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.022975, 0.185702, 0.382816, 0.754065, 1.496563",\ + "0.022975, 0.186685, 0.385279, 0.756173, 1.496563",\ + "0.023515, 0.186685, 0.385279, 0.756173, 1.496563",\ + "0.025086, 0.186685, 0.385279, 0.756173, 1.496563",\ + "0.040851, 0.190393, 0.385279, 0.756173, 1.496563"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[3]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.055709, 0.210088, 0.384212, 0.703085, 1.340832",\ + "0.142647, 0.298162, 0.472853, 0.791314, 1.428237",\ + "0.229323, 0.390455, 0.564578, 0.883479, 1.521279",\ + "0.289539, 0.457859, 0.631598, 0.950329, 1.587790",\ + "0.602001, 0.825705, 1.001142, 1.318707, 1.953837"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.024618, 0.296396, 0.626543, 1.236834, 2.455429",\ + "0.028418, 0.296396, 0.626543, 1.236834, 2.455429",\ + "0.041905, 0.299457, 0.628154, 1.237245, 2.455429",\ + "0.054019, 0.302915, 0.628337, 1.238058, 2.457501",\ + "0.127335, 0.341609, 0.634026, 1.242336, 2.458956"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.067216, 0.173388, 0.285052, 0.487701, 0.892999",\ + "0.152154, 0.258224, 0.370122, 0.573207, 0.979377",\ + "0.227820, 0.333667, 0.444931, 0.647804, 1.053549",\ + "0.281475, 0.388179, 0.499582, 0.702344, 1.107867",\ + "0.555896, 0.671760, 0.783533, 0.986070, 1.391144"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001495, 0.074796, 0.162290, 0.323084, 0.644672"); + values ( "0.022975, 0.185506, 0.382814, 0.754047, 1.494909",\ + "0.022975, 0.185506, 0.382814, 0.754047, 1.494909",\ + "0.023515, 0.185506, 0.382814, 0.754047, 1.494909",\ + "0.025086, 0.186032, 0.383438, 0.754322, 1.494909",\ + "0.040851, 0.190393, 0.384028, 0.754322, 1.494909"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[3]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024618, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.205304, 0.155898, 0.121844, 0.108632, 0.118959",\ + "0.213705, 0.164299, 0.130245, 0.117033, 0.127360",\ + "0.286247, 0.236842, 0.202788, 0.189576, 0.199902",\ + "0.377880, 0.328444, 0.294355, 0.281122, 0.291373",\ + "0.826990, 0.777305, 0.742923, 0.729519, 0.739150"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.022975, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.253248, 0.179609, 0.114078, 0.098860, 0.242765",\ + "0.260428, 0.186789, 0.121258, 0.106040, 0.249945",\ + "0.338311, 0.264672, 0.199141, 0.183923, 0.327828",\ + "0.439285, 0.365564, 0.300030, 0.284860, 0.429362",\ + "0.945572, 0.871138, 0.805582, 0.790828, 0.940493"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[3]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024618, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.131653, -0.089547, -0.055448, -0.032345, 0.077315",\ + "-0.140054, -0.097948, -0.063849, -0.040746, 0.068914",\ + "-0.212597, -0.170490, -0.136392, -0.113288, -0.003629",\ + "-0.304160, -0.262036, -0.227893, -0.204765, -0.095035",\ + "-0.752635, -0.710363, -0.675857, -0.652532, -0.542218"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.022975, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.160975, -0.096153, -0.041987, -0.003573, 0.191467",\ + "-0.168149, -0.103327, -0.049161, -0.010747, 0.184293",\ + "-0.246073, -0.181251, -0.127085, -0.088671, 0.106369",\ + "-0.346978, -0.282082, -0.227737, -0.189269, 0.005504",\ + "-0.852619, -0.787096, -0.731202, -0.692284, -0.499800"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[3]_hldr*/ + +} /* end of pin obs_ctrl_o[3] */ + +pin("obs_ctrl_o[2]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001426 ; + + /* Other user defined attributes. */ + original_pin : obs_ctrl_o[2]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.046598, 0.200037, 0.375695, 0.698745, 1.344843",\ + "0.132827, 0.287212, 0.462802, 0.785460, 1.430777",\ + "0.215641, 0.375341, 0.550758, 0.873083, 1.517732",\ + "0.273163, 0.439738, 0.614874, 0.936996, 1.581241",\ + "0.570794, 0.789601, 0.965263, 1.285741, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.021974, 0.297548, 0.631352, 1.248422, 2.482564",\ + "0.026714, 0.298523, 0.633308, 1.248422, 2.482564",\ + "0.039895, 0.300798, 0.633344, 1.248422, 2.482564",\ + "0.051772, 0.304107, 0.633444, 1.248422, 2.482564",\ + "0.126971, 0.342744, 0.639709, 1.250989, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.066407, 0.172211, 0.283842, 0.488142, 0.896743",\ + "0.153827, 0.259530, 0.371123, 0.575447, 0.984097",\ + "0.234160, 0.339867, 0.451150, 0.655476, 1.064128",\ + "0.290795, 0.397415, 0.508694, 0.712721, 1.120776",\ + "0.584007, 0.700750, 0.812328, 1.015736, 1.422553"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.023136, 0.186125, 0.386812, 0.759343, 1.504406",\ + "0.023136, 0.186266, 0.387317, 0.759343, 1.504406",\ + "0.024272, 0.186266, 0.387317, 0.759343, 1.504406",\ + "0.026405, 0.186266, 0.387317, 0.759343, 1.504406",\ + "0.045271, 0.190284, 0.387317, 0.759343, 1.504686"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[2]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.046598, 0.200037, 0.375695, 0.698745, 1.344843",\ + "0.132827, 0.287212, 0.462802, 0.785460, 1.430777",\ + "0.215641, 0.375341, 0.550758, 0.873083, 1.517732",\ + "0.273163, 0.439738, 0.614874, 0.936996, 1.581241",\ + "0.570794, 0.789601, 0.965263, 1.285741, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.021974, 0.297548, 0.631352, 1.247199, 2.473548",\ + "0.026714, 0.298523, 0.633308, 1.247199, 2.473548",\ + "0.039895, 0.300798, 0.633344, 1.247274, 2.473548",\ + "0.051772, 0.304107, 0.633444, 1.248017, 2.473548",\ + "0.126971, 0.342744, 0.639709, 1.250989, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.066407, 0.172211, 0.283842, 0.488142, 0.896743",\ + "0.153827, 0.259530, 0.371123, 0.575447, 0.984097",\ + "0.234160, 0.339867, 0.451150, 0.655476, 1.064128",\ + "0.290795, 0.397415, 0.508694, 0.712721, 1.120776",\ + "0.584007, 0.700750, 0.812328, 1.015736, 1.422553"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001426, 0.074424, 0.161572, 0.321718, 0.642011"); + values ( "0.023136, 0.185331, 0.385307, 0.757114, 1.500729",\ + "0.023136, 0.185331, 0.385307, 0.757114, 1.500729",\ + "0.024272, 0.185331, 0.385307, 0.757114, 1.500729",\ + "0.026405, 0.185943, 0.385763, 0.758015, 1.502520",\ + "0.045271, 0.190284, 0.385833, 0.758784, 1.504686"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[2]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.021974, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.215002, 0.169073, 0.138873, 0.127530, 0.141215",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.023136, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.249950, 0.174629, 0.106470, 0.083503, 0.146416",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[2]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.021974, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.146929, -0.104512, -0.070025, -0.030602, 0.275445",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.023136, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.163106, -0.097191, -0.039532, 0.002429, 0.223037",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[2]_hldr*/ + +} /* end of pin obs_ctrl_o[2] */ + +pin("obs_ctrl_o[1]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001497 ; + + /* Other user defined attributes. */ + original_pin : obs_ctrl_o[1]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.046791, 0.200181, 0.375803, 0.698817, 1.344843",\ + "0.133030, 0.287356, 0.462909, 0.785532, 1.430777",\ + "0.215892, 0.375484, 0.550866, 0.873154, 1.517732",\ + "0.273461, 0.439881, 0.614982, 0.937068, 1.581241",\ + "0.571381, 0.789745, 0.965369, 1.285812, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.022232, 0.297820, 0.631558, 1.248559, 2.482564",\ + "0.026946, 0.298797, 0.633513, 1.248559, 2.482564",\ + "0.040098, 0.301070, 0.633549, 1.248559, 2.482564",\ + "0.051979, 0.304374, 0.633649, 1.248559, 2.482564",\ + "0.127230, 0.342977, 0.639913, 1.251125, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.066637, 0.172312, 0.283920, 0.488198, 0.896753",\ + "0.154052, 0.259631, 0.371201, 0.575503, 0.984106",\ + "0.234393, 0.339967, 0.451228, 0.655531, 1.064138",\ + "0.291040, 0.397516, 0.508771, 0.712776, 1.120786",\ + "0.584372, 0.700851, 0.812405, 1.015791, 1.422562"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.023343, 0.186306, 0.386954, 0.759444, 1.504424",\ + "0.023343, 0.186447, 0.387459, 0.759444, 1.504424",\ + "0.024480, 0.186447, 0.387459, 0.759444, 1.504424",\ + "0.026601, 0.186447, 0.387459, 0.759444, 1.504424",\ + "0.045445, 0.190459, 0.387459, 0.759444, 1.504704"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[1]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.046791, 0.200181, 0.375803, 0.698817, 1.344843",\ + "0.133030, 0.287356, 0.462909, 0.785532, 1.430777",\ + "0.215892, 0.375484, 0.550866, 0.873154, 1.517732",\ + "0.273461, 0.439881, 0.614982, 0.937068, 1.581241",\ + "0.571381, 0.789745, 0.965369, 1.285812, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.022232, 0.297820, 0.631558, 1.247336, 2.473548",\ + "0.026946, 0.298797, 0.633513, 1.247336, 2.473548",\ + "0.040098, 0.301070, 0.633549, 1.247411, 2.473548",\ + "0.051979, 0.304374, 0.633649, 1.248154, 2.473548",\ + "0.127230, 0.342977, 0.639913, 1.251125, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.066637, 0.172312, 0.283920, 0.488198, 0.896753",\ + "0.154052, 0.259631, 0.371201, 0.575503, 0.984106",\ + "0.234393, 0.339967, 0.451228, 0.655531, 1.064138",\ + "0.291040, 0.397516, 0.508771, 0.712776, 1.120786",\ + "0.584372, 0.700851, 0.812405, 1.015791, 1.422562"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001497, 0.074496, 0.161626, 0.321754, 0.642011"); + values ( "0.023343, 0.185511, 0.385448, 0.757215, 1.500747",\ + "0.023343, 0.185511, 0.385448, 0.757215, 1.500747",\ + "0.024480, 0.185511, 0.385448, 0.757215, 1.500747",\ + "0.026601, 0.186123, 0.385904, 0.758116, 1.502538",\ + "0.045445, 0.190459, 0.385975, 0.758885, 1.504704"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[1]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.022232, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.215122, 0.169193, 0.138993, 0.127649, 0.141334",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.023343, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.250044, 0.174723, 0.106564, 0.083596, 0.146510",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[1]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.022232, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.147049, -0.104632, -0.070145, -0.030722, 0.275326",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.023343, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.163200, -0.097285, -0.039626, 0.002335, 0.222943",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[1]_hldr*/ + +} /* end of pin obs_ctrl_o[1] */ + +pin("obs_ctrl_o[0]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.644672 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.001493 ; + + /* Other user defined attributes. */ + original_pin : obs_ctrl_o[0]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.055703, 0.210083, 0.384209, 0.703083, 1.340832",\ + "0.142641, 0.298158, 0.472850, 0.791312, 1.428237",\ + "0.229315, 0.390451, 0.564575, 0.883476, 1.521279",\ + "0.289529, 0.457854, 0.631595, 0.950327, 1.587790",\ + "0.601982, 0.825701, 1.001139, 1.318705, 1.953837"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.024610, 0.296910, 0.628369, 1.238416, 2.458509",\ + "0.028411, 0.296910, 0.628369, 1.238416, 2.458509",\ + "0.041899, 0.299449, 0.628369, 1.238416, 2.458509",\ + "0.054012, 0.302907, 0.628369, 1.238416, 2.458509",\ + "0.127326, 0.341602, 0.634020, 1.242332, 2.458956"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.067218, 0.173389, 0.285054, 0.487703, 0.893002",\ + "0.152156, 0.258225, 0.370124, 0.573210, 0.979381",\ + "0.227822, 0.333668, 0.444933, 0.647806, 1.053553",\ + "0.281477, 0.388180, 0.499584, 0.702346, 1.107870",\ + "0.555899, 0.671761, 0.783535, 0.986072, 1.391148"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.022977, 0.185704, 0.382820, 0.754070, 1.496570",\ + "0.022977, 0.186687, 0.385282, 0.756178, 1.496570",\ + "0.023517, 0.186687, 0.385282, 0.756178, 1.496570",\ + "0.025088, 0.186687, 0.385282, 0.756178, 1.496570",\ + "0.040853, 0.190395, 0.385282, 0.756178, 1.496570"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[0]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.055703, 0.210083, 0.384209, 0.703083, 1.340832",\ + "0.142641, 0.298158, 0.472850, 0.791312, 1.428237",\ + "0.229315, 0.390451, 0.564575, 0.883476, 1.521279",\ + "0.289529, 0.457854, 0.631595, 0.950327, 1.587790",\ + "0.601982, 0.825701, 1.001139, 1.318705, 1.953837"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.024610, 0.296388, 0.626537, 1.236829, 2.455429",\ + "0.028411, 0.296388, 0.626537, 1.236829, 2.455429",\ + "0.041899, 0.299449, 0.628148, 1.237241, 2.455429",\ + "0.054012, 0.302907, 0.628330, 1.238054, 2.457501",\ + "0.127326, 0.341602, 0.634020, 1.242332, 2.458956"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.067218, 0.173389, 0.285054, 0.487703, 0.893002",\ + "0.152156, 0.258225, 0.370124, 0.573210, 0.979381",\ + "0.227822, 0.333668, 0.444933, 0.647806, 1.053553",\ + "0.281477, 0.388180, 0.499584, 0.702346, 1.107870",\ + "0.555899, 0.671761, 0.783535, 0.986072, 1.391148"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.001493, 0.074794, 0.162288, 0.323083, 0.644672"); + values ( "0.022977, 0.185508, 0.382818, 0.754052, 1.494916",\ + "0.022977, 0.185508, 0.382818, 0.754052, 1.494916",\ + "0.023517, 0.185508, 0.382818, 0.754052, 1.494916",\ + "0.025088, 0.186034, 0.383442, 0.754326, 1.494916",\ + "0.040853, 0.190395, 0.384031, 0.754326, 1.494916"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[0]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024610, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.205304, 0.155898, 0.121844, 0.108632, 0.118959",\ + "0.213701, 0.164296, 0.130242, 0.117030, 0.127356",\ + "0.286247, 0.236842, 0.202788, 0.189576, 0.199902",\ + "0.377880, 0.328444, 0.294355, 0.281122, 0.291373",\ + "0.826990, 0.777305, 0.742923, 0.729519, 0.739150"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.022977, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.253248, 0.179609, 0.114078, 0.098860, 0.242765",\ + "0.260429, 0.186790, 0.121259, 0.106041, 0.249946",\ + "0.338311, 0.264672, 0.199141, 0.183923, 0.327828",\ + "0.439285, 0.365564, 0.300030, 0.284860, 0.429362",\ + "0.945572, 0.871138, 0.805582, 0.790828, 0.940493"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[0]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024610, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.131653, -0.089547, -0.055448, -0.032345, 0.077315",\ + "-0.140051, -0.097944, -0.063846, -0.040742, 0.068917",\ + "-0.212597, -0.170490, -0.136392, -0.113288, -0.003629",\ + "-0.304160, -0.262036, -0.227893, -0.204765, -0.095035",\ + "-0.752635, -0.710363, -0.675857, -0.652532, -0.542218"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.022977, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.160975, -0.096153, -0.041987, -0.003573, 0.191467",\ + "-0.168150, -0.103328, -0.049162, -0.010747, 0.184292",\ + "-0.246073, -0.181251, -0.127085, -0.088671, 0.106369",\ + "-0.346978, -0.282082, -0.227737, -0.189269, 0.005504",\ + "-0.852619, -0.787096, -0.731202, -0.692284, -0.499800"); + } + + } /* end of arc clk_ast_tlul_i_obs_ctrl_o[0]_hldr*/ + +} /* end of pin obs_ctrl_o[0] */ +} /* end of bus obs_ctrl_o */ +bus ( padmux2ast_i ) { + + bus_type : BUS9_type16 ; + direction : input ; + +pin("padmux2ast_i[8]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001547 ; + + /* Other user defined attributes. */ + original_pin : padmux2ast_i[8]; +} /* end of pin padmux2ast_i[8] */ + +pin("padmux2ast_i[7]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001037 ; + + /* Other user defined attributes. */ + original_pin : padmux2ast_i[7]; + timing () { + related_pin : "clk_ast_usb_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.599931, 0.560765, 0.510135, 0.511231, 0.524547",\ + "0.684459, 0.645293, 0.594663, 0.595759, 0.609075",\ + "0.775549, 0.736383, 0.685753, 0.686849, 0.700165",\ + "0.937661, 0.898495, 0.847865, 0.848961, 0.862277",\ + "1.209352, 1.170186, 1.119556, 1.120651, 1.133968"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.507406, 0.449725, 0.394624, 0.395719, 0.409035",\ + "0.595359, 0.537678, 0.482576, 0.483672, 0.496988",\ + "0.695327, 0.637646, 0.582544, 0.583640, 0.596956",\ + "0.879705, 0.822024, 0.766922, 0.768018, 0.781334",\ + "1.197915, 1.140234, 1.085132, 1.086228, 1.099544"); + } + + } /* end of arc clk_ast_usb_i_padmux2ast_i[7]_stupr*/ + + timing () { + related_pin : "clk_ast_usb_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.288273, -0.255190, -0.196555, -0.182927, -0.017307",\ + "-0.372801, -0.339718, -0.281083, -0.267455, -0.101836",\ + "-0.463895, -0.430812, -0.372177, -0.358549, -0.192930",\ + "-0.625950, -0.592867, -0.534232, -0.520604, -0.354985",\ + "-0.897654, -0.864571, -0.805936, -0.792308, -0.626688"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-0.249551, -0.198552, -0.102091, -0.083944, 0.136600",\ + "-0.337500, -0.286501, -0.190040, -0.171892, 0.048652",\ + "-0.437474, -0.386475, -0.290014, -0.271866, -0.051323",\ + "-0.621823, -0.570824, -0.474363, -0.456216, -0.235672",\ + "-0.940049, -0.889050, -0.792589, -0.774441, -0.553897"); + } + + } /* end of arc clk_ast_usb_i_padmux2ast_i[7]_hldr*/ + +} /* end of pin padmux2ast_i[7] */ + +pin("padmux2ast_i[6]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001036 ; + + /* Other user defined attributes. */ + original_pin : padmux2ast_i[6]; +} /* end of pin padmux2ast_i[6] */ + +pin("padmux2ast_i[5]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001070 ; + + /* Other user defined attributes. */ + original_pin : padmux2ast_i[5]; + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "590008.937500, 590008.875000, 590008.812500, 590008.812500, 590008.812500",\ + "590009.062500, 590009.000000, 590008.937500, 590008.937500, 590008.937500",\ + "590009.062500, 590009.000000, 590008.937500, 590008.937500, 590008.937500",\ + "590009.187500, 590009.125000, 590009.062500, 590009.062500, 590009.062500",\ + "590009.437500, 590009.375000, 590009.312500, 590009.312500, 590009.312500"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "590007.187500, 590007.125000, 590007.062500, 590007.062500, 590007.062500",\ + "590007.312500, 590007.250000, 590007.187500, 590007.187500, 590007.187500",\ + "590007.437500, 590007.375000, 590007.312500, 590007.312500, 590007.312500",\ + "590007.562500, 590007.500000, 590007.437500, 590007.437500, 590007.437500",\ + "590007.937500, 590007.875000, 590007.812500, 590007.812500, 590007.812500"); + } + + } /* end of arc clk_ast_ext_i_padmux2ast_i[5]_stupr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-590008.312500, -590008.250000, -590008.250000, -590008.125000, -590007.875000",\ + "-590008.312500, -590008.250000, -590008.250000, -590008.125000, -590007.875000",\ + "-590008.437500, -590008.375000, -590008.375000, -590008.250000, -590008.000000",\ + "-590008.562500, -590008.500000, -590008.500000, -590008.375000, -590008.125000",\ + "-590008.812500, -590008.750000, -590008.750000, -590008.625000, -590008.375000"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-590006.625000, -590006.562500, -590006.500000, -590006.375000, -590006.250000",\ + "-590006.750000, -590006.687500, -590006.625000, -590006.500000, -590006.375000",\ + "-590006.875000, -590006.812500, -590006.750000, -590006.625000, -590006.500000",\ + "-590007.000000, -590006.937500, -590006.875000, -590006.750000, -590006.625000",\ + "-590007.250000, -590007.187500, -590007.125000, -590007.000000, -590006.875000"); + } + + } /* end of arc clk_ast_ext_i_padmux2ast_i[5]_hldr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : recovery_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "590008.812500, 590008.750000, 590008.750000, 590008.750000, 590008.750000",\ + "590008.937500, 590008.875000, 590008.875000, 590008.875000, 590008.875000",\ + "590008.937500, 590008.875000, 590008.875000, 590008.875000, 590008.875000",\ + "590009.062500, 590009.000000, 590009.000000, 590009.000000, 590009.000000",\ + "590009.312500, 590009.250000, 590009.250000, 590009.250000, 590009.250000"); + } + + } /* end of arc clk_ast_ext_i_padmux2ast_i[5]_recrr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : recovery_rising ; + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "590007.312500, 590007.312500, 590007.250000, 590007.250000, 590007.312500",\ + "590007.437500, 590007.437500, 590007.375000, 590007.375000, 590007.437500",\ + "590007.562500, 590007.562500, 590007.500000, 590007.500000, 590007.562500",\ + "590007.687500, 590007.687500, 590007.625000, 590007.625000, 590007.687500",\ + "590008.062500, 590008.062500, 590008.000000, 590008.000000, 590008.062500"); + } + + } /* end of arc clk_ast_ext_i_padmux2ast_i[5]_recfr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : removal_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-590007.250000, -590007.250000, -590007.187500, -590007.125000, -590007.000000",\ + "-590007.250000, -590007.250000, -590007.187500, -590007.125000, -590007.000000",\ + "-590007.375000, -590007.375000, -590007.312500, -590007.250000, -590007.125000",\ + "-590007.500000, -590007.500000, -590007.437500, -590007.375000, -590007.250000",\ + "-590007.750000, -590007.750000, -590007.687500, -590007.625000, -590007.500000"); + } + + } /* end of arc clk_ast_ext_i_padmux2ast_i[5]_remrr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : removal_rising ; + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-590007.125000, -590007.125000, -590007.062500, -590007.000000, -590006.875000",\ + "-590007.250000, -590007.250000, -590007.187500, -590007.125000, -590007.000000",\ + "-590007.375000, -590007.375000, -590007.312500, -590007.250000, -590007.125000",\ + "-590007.500000, -590007.500000, -590007.437500, -590007.375000, -590007.250000",\ + "-590007.750000, -590007.750000, -590007.687500, -590007.625000, -590007.500000"); + } + + } /* end of arc clk_ast_ext_i_padmux2ast_i[5]_remfr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : setup_rising ; + clock_gating_flag : true ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "590008.437500, 590008.437500, 590008.437500, 590008.500000, 590008.812500",\ + "590008.562500, 590008.562500, 590008.562500, 590008.625000, 590008.937500",\ + "590008.562500, 590008.562500, 590008.562500, 590008.625000, 590008.937500",\ + "590008.687500, 590008.687500, 590008.687500, 590008.750000, 590009.062500",\ + "590008.937500, 590008.937500, 590008.937500, 590009.000000, 590009.312500"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "590006.687500, 590006.687500, 590006.687500, 590006.687500, 590006.687500",\ + "590006.812500, 590006.812500, 590006.812500, 590006.812500, 590006.812500",\ + "590006.937500, 590006.937500, 590006.937500, 590006.937500, 590006.937500",\ + "590007.062500, 590007.062500, 590007.062500, 590007.062500, 590007.062500",\ + "590007.437500, 590007.437500, 590007.437500, 590007.437500, 590007.437500"); + } + + } /* end of arc clk_ast_ext_i_padmux2ast_i[5]_cgsr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : setup_falling ; + clock_gating_flag : true ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "590008.250000, 590008.250000, 590008.250000, 590008.250000, 590008.250000",\ + "590008.375000, 590008.375000, 590008.375000, 590008.375000, 590008.375000",\ + "590008.375000, 590008.375000, 590008.375000, 590008.375000, 590008.375000",\ + "590008.500000, 590008.500000, 590008.500000, 590008.500000, 590008.500000",\ + "590008.750000, 590008.750000, 590008.750000, 590008.750000, 590008.750000"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "590006.562500, 590006.562500, 590006.562500, 590006.562500, 590006.562500",\ + "590006.687500, 590006.687500, 590006.687500, 590006.687500, 590006.687500",\ + "590006.812500, 590006.812500, 590006.812500, 590006.812500, 590006.812500",\ + "590006.937500, 590006.937500, 590006.937500, 590006.937500, 590006.937500",\ + "590007.312500, 590007.312500, 590007.312500, 590007.312500, 590007.312500"); + } + + } /* end of arc clk_ast_ext_i_padmux2ast_i[5]_cgsf*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : hold_rising ; + clock_gating_flag : true ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-590008.250000, -590008.250000, -590008.250000, -590008.187500, -590008.062500",\ + "-590008.250000, -590008.250000, -590008.250000, -590008.187500, -590008.062500",\ + "-590008.375000, -590008.375000, -590008.375000, -590008.312500, -590008.187500",\ + "-590008.500000, -590008.500000, -590008.500000, -590008.437500, -590008.312500",\ + "-590008.750000, -590008.750000, -590008.750000, -590008.687500, -590008.562500"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-590006.562500, -590006.562500, -590006.437500, -590006.312500, -590006.062500",\ + "-590006.687500, -590006.687500, -590006.562500, -590006.437500, -590006.187500",\ + "-590006.812500, -590006.812500, -590006.687500, -590006.562500, -590006.312500",\ + "-590006.937500, -590006.937500, -590006.812500, -590006.687500, -590006.437500",\ + "-590007.187500, -590007.187500, -590007.062500, -590006.937500, -590006.687500"); + } + + } /* end of arc clk_ast_ext_i_padmux2ast_i[5]_cghr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : hold_falling ; + clock_gating_flag : true ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-590008.250000, -590008.250000, -590008.250000, -590008.250000, -590008.250000",\ + "-590008.250000, -590008.250000, -590008.250000, -590008.250000, -590008.250000",\ + "-590008.375000, -590008.375000, -590008.375000, -590008.375000, -590008.375000",\ + "-590008.500000, -590008.500000, -590008.500000, -590008.500000, -590008.500000",\ + "-590008.750000, -590008.750000, -590008.750000, -590008.750000, -590008.750000"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-590006.562500, -590006.562500, -590006.562500, -590006.562500, -590006.562500",\ + "-590006.687500, -590006.687500, -590006.687500, -590006.687500, -590006.687500",\ + "-590006.812500, -590006.812500, -590006.812500, -590006.812500, -590006.812500",\ + "-590006.937500, -590006.937500, -590006.937500, -590006.937500, -590006.937500",\ + "-590007.187500, -590007.187500, -590007.187500, -590007.187500, -590007.187500"); + } + + } /* end of arc clk_ast_ext_i_padmux2ast_i[5]_cghf*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : recovery_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "590011.500000, 590010.062500, 590009.187500, 590008.812500, 590008.750000",\ + "590011.625000, 590010.187500, 590009.312500, 590008.937500, 590008.875000",\ + "590011.625000, 590010.187500, 590009.312500, 590008.937500, 590008.875000",\ + "590011.750000, 590010.312500, 590009.437500, 590009.062500, 590009.000000",\ + "590012.000000, 590010.562500, 590009.687500, 590009.312500, 590009.250000"); + } + + } /* end of arc clk_ast_tlul_i_padmux2ast_i[5]_recrr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : removal_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-590006.562500, -590006.437500, -590006.375000, -590006.375000, -590006.312500",\ + "-590006.562500, -590006.437500, -590006.375000, -590006.375000, -590006.312500",\ + "-590006.687500, -590006.562500, -590006.500000, -590006.500000, -590006.437500",\ + "-590006.812500, -590006.687500, -590006.625000, -590006.625000, -590006.562500",\ + "-590007.062500, -590006.937500, -590006.875000, -590006.875000, -590006.812500"); + } + + } /* end of arc clk_ast_tlul_i_padmux2ast_i[5]_remrr*/ + +} /* end of pin padmux2ast_i[5] */ + +pin("padmux2ast_i[4]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001489 ; + + /* Other user defined attributes. */ + original_pin : padmux2ast_i[4]; + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "970007.437500, 970007.375000, 970007.312500, 970007.312500, 970007.312500",\ + "970007.562500, 970007.500000, 970007.437500, 970007.437500, 970007.437500",\ + "970007.562500, 970007.500000, 970007.437500, 970007.437500, 970007.437500",\ + "970007.812500, 970007.750000, 970007.687500, 970007.687500, 970007.687500",\ + "970008.062500, 970008.000000, 970007.937500, 970007.937500, 970007.937500"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "970010.562500, 970010.500000, 970010.437500, 970010.437500, 970010.437500",\ + "970010.687500, 970010.625000, 970010.562500, 970010.562500, 970010.562500",\ + "970010.812500, 970010.750000, 970010.687500, 970010.687500, 970010.687500",\ + "970011.062500, 970011.000000, 970010.937500, 970010.937500, 970010.937500",\ + "970011.312500, 970011.250000, 970011.187500, 970011.187500, 970011.187500"); + } + + } /* end of arc clk_ast_ext_i_padmux2ast_i[4]_stupr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : setup_falling ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "380000.312500, 380000.312500, 380000.312500, 380000.312500, 380000.312500",\ + "380000.406250, 380000.406250, 380000.406250, 380000.406250, 380000.406250",\ + "380000.500000, 380000.500000, 380000.500000, 380000.500000, 380000.500000",\ + "380000.656250, 380000.656250, 380000.656250, 380000.656250, 380000.656250",\ + "380000.906250, 380000.906250, 380000.906250, 380000.906250, 380000.906250"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "380001.843750, 380001.843750, 380001.843750, 380001.843750, 380001.843750",\ + "380001.937500, 380001.937500, 380001.937500, 380001.937500, 380001.937500",\ + "380002.062500, 380002.062500, 380002.062500, 380002.062500, 380002.062500",\ + "380002.250000, 380002.250000, 380002.250000, 380002.250000, 380002.250000",\ + "380002.562500, 380002.562500, 380002.562500, 380002.562500, 380002.562500"); + } + + } /* end of arc clk_ast_ext_i_padmux2ast_i[4]_stupf*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-380000.375000, -380000.312500, -380000.281250, -380000.187500, -379999.906250",\ + "-380000.468750, -380000.406250, -380000.375000, -380000.281250, -380000.000000",\ + "-380000.531250, -380000.468750, -380000.437500, -380000.343750, -380000.062500",\ + "-380000.687500, -380000.625000, -380000.593750, -380000.500000, -380000.218750",\ + "-380000.906250, -380000.843750, -380000.812500, -380000.718750, -380000.437500"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-380001.750000, -380001.687500, -380001.656250, -380001.562500, -380001.375000",\ + "-380001.843750, -380001.781250, -380001.750000, -380001.656250, -380001.468750",\ + "-380001.937500, -380001.875000, -380001.843750, -380001.750000, -380001.562500",\ + "-380002.125000, -380002.062500, -380002.031250, -380001.937500, -380001.750000",\ + "-380002.375000, -380002.312500, -380002.281250, -380002.187500, -380002.000000"); + } + + } /* end of arc clk_ast_ext_i_padmux2ast_i[4]_hldr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : hold_falling ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-380000.281250, -380000.281250, -380000.281250, -380000.281250, -380000.281250",\ + "-380000.375000, -380000.375000, -380000.375000, -380000.375000, -380000.375000",\ + "-380000.437500, -380000.437500, -380000.437500, -380000.437500, -380000.437500",\ + "-380000.593750, -380000.593750, -380000.593750, -380000.593750, -380000.593750",\ + "-380000.812500, -380000.812500, -380000.812500, -380000.812500, -380000.812500"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-380001.750000, -380001.750000, -380001.750000, -380001.750000, -380001.750000",\ + "-380001.843750, -380001.843750, -380001.843750, -380001.843750, -380001.843750",\ + "-380001.937500, -380001.937500, -380001.937500, -380001.937500, -380001.937500",\ + "-380002.125000, -380002.125000, -380002.125000, -380002.125000, -380002.125000",\ + "-380002.375000, -380002.375000, -380002.375000, -380002.375000, -380002.375000"); + } + + } /* end of arc clk_ast_ext_i_padmux2ast_i[4]_hldf*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : recovery_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "970007.625000, 970007.562500, 970007.500000, 970007.500000, 970007.562500",\ + "970007.750000, 970007.687500, 970007.625000, 970007.625000, 970007.687500",\ + "970007.750000, 970007.687500, 970007.625000, 970007.625000, 970007.687500",\ + "970008.000000, 970007.937500, 970007.875000, 970007.875000, 970007.937500",\ + "970008.250000, 970008.187500, 970008.125000, 970008.125000, 970008.187500"); + } + + } /* end of arc clk_ast_ext_i_padmux2ast_i[4]_recrr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : recovery_rising ; + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "970010.437500, 970010.375000, 970010.375000, 970010.375000, 970010.375000",\ + "970010.562500, 970010.500000, 970010.500000, 970010.500000, 970010.500000",\ + "970010.687500, 970010.625000, 970010.625000, 970010.625000, 970010.625000",\ + "970010.937500, 970010.875000, 970010.875000, 970010.875000, 970010.875000",\ + "970011.187500, 970011.125000, 970011.125000, 970011.125000, 970011.125000"); + } + + } /* end of arc clk_ast_ext_i_padmux2ast_i[4]_recfr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : recovery_falling ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "380000.500000, 380000.500000, 380000.500000, 380000.500000, 380000.500000",\ + "380000.593750, 380000.593750, 380000.593750, 380000.593750, 380000.593750",\ + "380000.687500, 380000.687500, 380000.687500, 380000.687500, 380000.687500",\ + "380000.843750, 380000.843750, 380000.843750, 380000.843750, 380000.843750",\ + "380001.093750, 380001.093750, 380001.093750, 380001.093750, 380001.093750"); + } + + } /* end of arc clk_ast_ext_i_padmux2ast_i[4]_recrf*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : recovery_falling ; + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "380001.937500, 380001.937500, 380001.937500, 380001.937500, 380001.937500",\ + "380002.031250, 380002.031250, 380002.031250, 380002.031250, 380002.031250",\ + "380002.156250, 380002.156250, 380002.156250, 380002.156250, 380002.156250",\ + "380002.343750, 380002.343750, 380002.343750, 380002.343750, 380002.343750",\ + "380002.656250, 380002.656250, 380002.656250, 380002.656250, 380002.656250"); + } + + } /* end of arc clk_ast_ext_i_padmux2ast_i[4]_recff*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : removal_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-380000.375000, -380000.343750, -380000.281250, -380000.250000, -380000.125000",\ + "-380000.468750, -380000.437500, -380000.375000, -380000.343750, -380000.218750",\ + "-380000.531250, -380000.500000, -380000.437500, -380000.406250, -380000.281250",\ + "-380000.687500, -380000.656250, -380000.593750, -380000.562500, -380000.437500",\ + "-380000.906250, -380000.875000, -380000.812500, -380000.781250, -380000.656250"); + } + + } /* end of arc clk_ast_ext_i_padmux2ast_i[4]_remrr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : removal_rising ; + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-380001.812500, -380001.781250, -380001.718750, -380001.687500, -380001.593750",\ + "-380001.906250, -380001.875000, -380001.812500, -380001.781250, -380001.687500",\ + "-380002.000000, -380001.968750, -380001.906250, -380001.875000, -380001.781250",\ + "-380002.187500, -380002.156250, -380002.093750, -380002.062500, -380001.968750",\ + "-380002.437500, -380002.406250, -380002.343750, -380002.312500, -380002.218750"); + } + + } /* end of arc clk_ast_ext_i_padmux2ast_i[4]_remfr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : removal_falling ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-380000.312500, -380000.312500, -380000.312500, -380000.312500, -380000.312500",\ + "-380000.406250, -380000.406250, -380000.406250, -380000.406250, -380000.406250",\ + "-380000.468750, -380000.468750, -380000.468750, -380000.468750, -380000.468750",\ + "-380000.625000, -380000.625000, -380000.625000, -380000.625000, -380000.625000",\ + "-380000.843750, -380000.843750, -380000.843750, -380000.843750, -380000.843750"); + } + + } /* end of arc clk_ast_ext_i_padmux2ast_i[4]_remrf*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : removal_falling ; + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-380001.750000, -380001.750000, -380001.750000, -380001.750000, -380001.750000",\ + "-380001.843750, -380001.843750, -380001.843750, -380001.843750, -380001.843750",\ + "-380001.937500, -380001.937500, -380001.937500, -380001.937500, -380001.937500",\ + "-380002.125000, -380002.125000, -380002.125000, -380002.125000, -380002.125000",\ + "-380002.375000, -380002.375000, -380002.375000, -380002.375000, -380002.375000"); + } + + } /* end of arc clk_ast_ext_i_padmux2ast_i[4]_remff*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : setup_rising ; + clock_gating_flag : true ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "970006.937500, 970006.937500, 970006.937500, 970006.937500, 970006.937500",\ + "970007.062500, 970007.062500, 970007.062500, 970007.062500, 970007.062500",\ + "970007.062500, 970007.062500, 970007.062500, 970007.062500, 970007.062500",\ + "970007.312500, 970007.312500, 970007.312500, 970007.312500, 970007.312500",\ + "970007.562500, 970007.562500, 970007.562500, 970007.562500, 970007.562500"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "970010.062500, 970010.062500, 970010.062500, 970010.125000, 970010.437500",\ + "970010.187500, 970010.187500, 970010.187500, 970010.250000, 970010.562500",\ + "970010.312500, 970010.312500, 970010.312500, 970010.375000, 970010.687500",\ + "970010.562500, 970010.562500, 970010.562500, 970010.625000, 970010.937500",\ + "970010.812500, 970010.812500, 970010.812500, 970010.875000, 970011.187500"); + } + + } /* end of arc clk_ast_ext_i_padmux2ast_i[4]_cgsr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : setup_falling ; + clock_gating_flag : true ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "970006.812500, 970006.812500, 970006.812500, 970006.812500, 970006.812500",\ + "970006.937500, 970006.937500, 970006.937500, 970006.937500, 970006.937500",\ + "970006.937500, 970006.937500, 970006.937500, 970006.937500, 970006.937500",\ + "970007.187500, 970007.187500, 970007.187500, 970007.187500, 970007.187500",\ + "970007.437500, 970007.437500, 970007.437500, 970007.437500, 970007.437500"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "970009.875000, 970009.875000, 970009.875000, 970009.875000, 970009.875000",\ + "970010.000000, 970010.000000, 970010.000000, 970010.000000, 970010.000000",\ + "970010.125000, 970010.125000, 970010.125000, 970010.125000, 970010.125000",\ + "970010.375000, 970010.375000, 970010.375000, 970010.375000, 970010.375000",\ + "970010.625000, 970010.625000, 970010.625000, 970010.625000, 970010.625000"); + } + + } /* end of arc clk_ast_ext_i_padmux2ast_i[4]_cgsf*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : hold_rising ; + clock_gating_flag : true ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-380000.281250, -380000.218750, -380000.187500, -380000.125000, -380000.000000",\ + "-380000.375000, -380000.312500, -380000.281250, -380000.218750, -380000.093750",\ + "-380000.437500, -380000.375000, -380000.343750, -380000.281250, -380000.156250",\ + "-380000.593750, -380000.531250, -380000.500000, -380000.437500, -380000.312500",\ + "-380000.812500, -380000.750000, -380000.718750, -380000.656250, -380000.531250"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-380001.718750, -380001.625000, -380001.531250, -380001.406250, -380001.125000",\ + "-380001.812500, -380001.718750, -380001.625000, -380001.500000, -380001.218750",\ + "-380001.906250, -380001.812500, -380001.718750, -380001.593750, -380001.312500",\ + "-380002.093750, -380002.000000, -380001.906250, -380001.781250, -380001.500000",\ + "-380002.343750, -380002.250000, -380002.156250, -380002.031250, -380001.750000"); + } + + } /* end of arc clk_ast_ext_i_padmux2ast_i[4]_cghr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : hold_falling ; + clock_gating_flag : true ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-380000.312500, -380000.312500, -380000.312500, -380000.312500, -380000.312500",\ + "-380000.406250, -380000.406250, -380000.406250, -380000.406250, -380000.406250",\ + "-380000.468750, -380000.468750, -380000.468750, -380000.468750, -380000.468750",\ + "-380000.625000, -380000.625000, -380000.625000, -380000.625000, -380000.625000",\ + "-380000.843750, -380000.843750, -380000.843750, -380000.843750, -380000.843750"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-380001.718750, -380001.718750, -380001.718750, -380001.718750, -380001.718750",\ + "-380001.812500, -380001.812500, -380001.812500, -380001.812500, -380001.812500",\ + "-380001.906250, -380001.906250, -380001.906250, -380001.906250, -380001.906250",\ + "-380002.093750, -380002.093750, -380002.093750, -380002.093750, -380002.093750",\ + "-380002.343750, -380002.343750, -380002.343750, -380002.343750, -380002.343750"); + } + + } /* end of arc clk_ast_ext_i_padmux2ast_i[4]_cghf*/ + + timing () { + related_pin : "clk_ast_rng_i" ; + timing_type : recovery_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "380000.500000, 380000.468750, 380000.406250, 380000.406250, 380000.468750",\ + "380000.593750, 380000.562500, 380000.500000, 380000.500000, 380000.562500",\ + "380000.687500, 380000.656250, 380000.593750, 380000.593750, 380000.656250",\ + "380000.843750, 380000.812500, 380000.750000, 380000.750000, 380000.812500",\ + "380001.093750, 380001.062500, 380001.000000, 380001.000000, 380001.062500"); + } + + } /* end of arc clk_ast_rng_i_padmux2ast_i[4]_recrr*/ + + timing () { + related_pin : "clk_ast_rng_i" ; + timing_type : recovery_rising ; + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "380001.968750, 380001.937500, 380001.875000, 380001.875000, 380001.937500",\ + "380002.062500, 380002.031250, 380001.968750, 380001.968750, 380002.031250",\ + "380002.187500, 380002.156250, 380002.093750, 380002.093750, 380002.156250",\ + "380002.375000, 380002.343750, 380002.281250, 380002.281250, 380002.343750",\ + "380002.687500, 380002.656250, 380002.593750, 380002.593750, 380002.656250"); + } + + } /* end of arc clk_ast_rng_i_padmux2ast_i[4]_recfr*/ + + timing () { + related_pin : "clk_ast_rng_i" ; + timing_type : removal_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-380000.343750, -380000.312500, -380000.250000, -380000.218750, -380000.093750",\ + "-380000.437500, -380000.406250, -380000.343750, -380000.312500, -380000.187500",\ + "-380000.500000, -380000.468750, -380000.406250, -380000.375000, -380000.250000",\ + "-380000.656250, -380000.625000, -380000.562500, -380000.531250, -380000.406250",\ + "-380000.875000, -380000.843750, -380000.781250, -380000.750000, -380000.625000"); + } + + } /* end of arc clk_ast_rng_i_padmux2ast_i[4]_remrr*/ + + timing () { + related_pin : "clk_ast_rng_i" ; + timing_type : removal_rising ; + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-380001.812500, -380001.781250, -380001.718750, -380001.687500, -380001.562500",\ + "-380001.906250, -380001.875000, -380001.812500, -380001.781250, -380001.656250",\ + "-380002.000000, -380001.968750, -380001.906250, -380001.875000, -380001.750000",\ + "-380002.187500, -380002.156250, -380002.093750, -380002.062500, -380001.937500",\ + "-380002.437500, -380002.406250, -380002.343750, -380002.312500, -380002.187500"); + } + + } /* end of arc clk_ast_rng_i_padmux2ast_i[4]_remfr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "380000.843750, 380000.750000, 380000.687500, 380000.687500, 380000.656250",\ + "380000.937500, 380000.843750, 380000.781250, 380000.781250, 380000.750000",\ + "380001.031250, 380000.937500, 380000.875000, 380000.875000, 380000.843750",\ + "380001.187500, 380001.093750, 380001.031250, 380001.031250, 380001.000000",\ + "380001.437500, 380001.343750, 380001.281250, 380001.281250, 380001.250000"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "380002.312500, 380002.218750, 380002.250000, 380002.343750, 380002.750000",\ + "380002.406250, 380002.312500, 380002.343750, 380002.437500, 380002.843750",\ + "380002.531250, 380002.437500, 380002.468750, 380002.562500, 380002.968750",\ + "380002.718750, 380002.625000, 380002.656250, 380002.750000, 380003.156250",\ + "380003.031250, 380002.937500, 380002.968750, 380003.062500, 380003.468750"); + } + + } /* end of arc clk_ast_tlul_i_padmux2ast_i[4]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-380000.312500, -380000.281250, -380000.250000, -380000.218750, -380000.093750",\ + "-380000.406250, -380000.375000, -380000.343750, -380000.312500, -380000.187500",\ + "-380000.468750, -380000.437500, -380000.406250, -380000.375000, -380000.250000",\ + "-380000.625000, -380000.593750, -380000.562500, -380000.531250, -380000.406250",\ + "-380000.843750, -380000.812500, -380000.781250, -380000.750000, -380000.625000"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-380001.781250, -380001.718750, -380001.656250, -380001.593750, -380001.375000",\ + "-380001.875000, -380001.812500, -380001.750000, -380001.687500, -380001.468750",\ + "-380001.968750, -380001.906250, -380001.843750, -380001.781250, -380001.562500",\ + "-380002.156250, -380002.093750, -380002.031250, -380001.968750, -380001.750000",\ + "-380002.406250, -380002.343750, -380002.281250, -380002.218750, -380002.000000"); + } + + } /* end of arc clk_ast_tlul_i_padmux2ast_i[4]_hldr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : recovery_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "380011.406250, 380010.000000, 380009.125000, 380008.718750, 380008.656250",\ + "380011.500000, 380010.093750, 380009.218750, 380008.812500, 380008.750000",\ + "380011.593750, 380010.187500, 380009.312500, 380008.906250, 380008.843750",\ + "380011.750000, 380010.343750, 380009.468750, 380009.062500, 380009.000000",\ + "380012.000000, 380010.593750, 380009.718750, 380009.312500, 380009.250000"); + } + + } /* end of arc clk_ast_tlul_i_padmux2ast_i[4]_recrr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : recovery_rising ; + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "970013.125000, 970011.687500, 970010.875000, 970010.437500, 970010.375000",\ + "970013.250000, 970011.812500, 970011.000000, 970010.562500, 970010.500000",\ + "970013.375000, 970011.937500, 970011.125000, 970010.687500, 970010.625000",\ + "970013.625000, 970012.187500, 970011.375000, 970010.937500, 970010.875000",\ + "970013.875000, 970012.437500, 970011.625000, 970011.187500, 970011.125000"); + } + + } /* end of arc clk_ast_tlul_i_padmux2ast_i[4]_recfr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : removal_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-380000.343750, -380000.312500, -380000.250000, -380000.187500, -379999.843750",\ + "-380000.437500, -380000.406250, -380000.343750, -380000.281250, -379999.937500",\ + "-380000.500000, -380000.468750, -380000.406250, -380000.343750, -380000.000000",\ + "-380000.656250, -380000.625000, -380000.562500, -380000.500000, -380000.156250",\ + "-380000.875000, -380000.843750, -380000.781250, -380000.718750, -380000.375000"); + } + + } /* end of arc clk_ast_tlul_i_padmux2ast_i[4]_remrr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : removal_rising ; + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-380001.812500, -380001.781250, -380001.687500, -380001.625000, -380001.281250",\ + "-380001.906250, -380001.875000, -380001.781250, -380001.718750, -380001.375000",\ + "-380002.000000, -380001.968750, -380001.875000, -380001.812500, -380001.468750",\ + "-380002.187500, -380002.156250, -380002.062500, -380002.000000, -380001.656250",\ + "-380002.437500, -380002.406250, -380002.312500, -380002.250000, -380001.906250"); + } + + } /* end of arc clk_ast_tlul_i_padmux2ast_i[4]_remfr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + clock_gating_flag : true ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "380001.343750, 380001.343750, 380001.343750, 380001.343750, 380001.343750",\ + "380001.437500, 380001.437500, 380001.437500, 380001.437500, 380001.437500",\ + "380001.531250, 380001.531250, 380001.531250, 380001.531250, 380001.531250",\ + "380001.687500, 380001.687500, 380001.687500, 380001.687500, 380001.687500",\ + "380001.937500, 380001.937500, 380001.937500, 380001.937500, 380001.937500"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "380003.062500, 380003.062500, 380003.062500, 380003.062500, 380003.062500",\ + "380003.156250, 380003.156250, 380003.156250, 380003.156250, 380003.156250",\ + "380003.281250, 380003.281250, 380003.281250, 380003.281250, 380003.281250",\ + "380003.468750, 380003.468750, 380003.468750, 380003.468750, 380003.468750",\ + "380003.781250, 380003.781250, 380003.781250, 380003.781250, 380003.781250"); + } + + } /* end of arc clk_ast_tlul_i_padmux2ast_i[4]_cgsr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_falling ; + clock_gating_flag : true ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-380001.343750, -380001.343750, -380001.343750, -380001.343750, -380001.343750",\ + "-380001.437500, -380001.437500, -380001.437500, -380001.437500, -380001.437500",\ + "-380001.500000, -380001.500000, -380001.500000, -380001.500000, -380001.500000",\ + "-380001.656250, -380001.656250, -380001.656250, -380001.656250, -380001.656250",\ + "-380001.875000, -380001.875000, -380001.875000, -380001.875000, -380001.875000"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-380003.062500, -380003.062500, -380003.062500, -380003.062500, -380003.062500",\ + "-380003.156250, -380003.156250, -380003.156250, -380003.156250, -380003.156250",\ + "-380003.250000, -380003.250000, -380003.250000, -380003.250000, -380003.250000",\ + "-380003.437500, -380003.437500, -380003.437500, -380003.437500, -380003.437500",\ + "-380003.687500, -380003.687500, -380003.687500, -380003.687500, -380003.687500"); + } + + } /* end of arc clk_ast_tlul_i_padmux2ast_i[4]_cghf*/ + + timing () { + related_pin : "clk_ast_usb_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "380002.218750, 380002.156250, 380002.125000, 380002.125000, 380002.125000",\ + "380002.312500, 380002.250000, 380002.218750, 380002.218750, 380002.218750",\ + "380002.406250, 380002.343750, 380002.312500, 380002.312500, 380002.312500",\ + "380002.562500, 380002.500000, 380002.468750, 380002.468750, 380002.468750",\ + "380002.812500, 380002.750000, 380002.718750, 380002.718750, 380002.718750"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "380004.218750, 380004.156250, 380004.125000, 380004.125000, 380004.125000",\ + "380004.312500, 380004.250000, 380004.218750, 380004.218750, 380004.218750",\ + "380004.437500, 380004.375000, 380004.343750, 380004.343750, 380004.343750",\ + "380004.625000, 380004.562500, 380004.531250, 380004.531250, 380004.531250",\ + "380004.937500, 380004.875000, 380004.843750, 380004.843750, 380004.843750"); + } + + } /* end of arc clk_ast_usb_i_padmux2ast_i[4]_stupr*/ + + timing () { + related_pin : "clk_ast_usb_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-380001.781250, -380001.718750, -380001.625000, -380001.593750, -380001.375000",\ + "-380001.875000, -380001.812500, -380001.718750, -380001.687500, -380001.468750",\ + "-380001.937500, -380001.875000, -380001.781250, -380001.750000, -380001.531250",\ + "-380002.093750, -380002.031250, -380001.937500, -380001.906250, -380001.687500",\ + "-380002.312500, -380002.250000, -380002.156250, -380002.125000, -380001.906250"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-380003.906250, -380003.843750, -380003.750000, -380003.718750, -380003.500000",\ + "-380004.000000, -380003.937500, -380003.843750, -380003.812500, -380003.593750",\ + "-380004.093750, -380004.031250, -380003.937500, -380003.906250, -380003.687500",\ + "-380004.281250, -380004.218750, -380004.125000, -380004.093750, -380003.875000",\ + "-380004.531250, -380004.468750, -380004.375000, -380004.343750, -380004.125000"); + } + + } /* end of arc clk_ast_usb_i_padmux2ast_i[4]_hldr*/ + + timing () { + related_pin : "clk_ast_usb_i" ; + timing_type : recovery_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "380000.593750, 380000.562500, 380000.500000, 380000.500000, 380000.562500",\ + "380000.687500, 380000.656250, 380000.593750, 380000.593750, 380000.656250",\ + "380000.781250, 380000.750000, 380000.687500, 380000.687500, 380000.750000",\ + "380000.937500, 380000.906250, 380000.843750, 380000.843750, 380000.906250",\ + "380001.187500, 380001.156250, 380001.093750, 380001.093750, 380001.156250"); + } + + } /* end of arc clk_ast_usb_i_padmux2ast_i[4]_recrr*/ + + timing () { + related_pin : "clk_ast_usb_i" ; + timing_type : recovery_rising ; + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "380002.031250, 380002.000000, 380001.937500, 380001.937500, 380002.000000",\ + "380002.125000, 380002.093750, 380002.031250, 380002.031250, 380002.093750",\ + "380002.250000, 380002.218750, 380002.156250, 380002.156250, 380002.218750",\ + "380002.437500, 380002.406250, 380002.343750, 380002.343750, 380002.406250",\ + "380002.750000, 380002.718750, 380002.656250, 380002.656250, 380002.718750"); + } + + } /* end of arc clk_ast_usb_i_padmux2ast_i[4]_recfr*/ + + timing () { + related_pin : "clk_ast_usb_i" ; + timing_type : removal_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-380000.437500, -380000.406250, -380000.343750, -380000.312500, -380000.187500",\ + "-380000.531250, -380000.500000, -380000.437500, -380000.406250, -380000.281250",\ + "-380000.593750, -380000.562500, -380000.500000, -380000.468750, -380000.343750",\ + "-380000.750000, -380000.718750, -380000.656250, -380000.625000, -380000.500000",\ + "-380000.968750, -380000.937500, -380000.875000, -380000.843750, -380000.718750"); + } + + } /* end of arc clk_ast_usb_i_padmux2ast_i[4]_remrr*/ + + timing () { + related_pin : "clk_ast_usb_i" ; + timing_type : removal_rising ; + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-380001.875000, -380001.843750, -380001.781250, -380001.750000, -380001.625000",\ + "-380001.968750, -380001.937500, -380001.875000, -380001.843750, -380001.718750",\ + "-380002.062500, -380002.031250, -380001.968750, -380001.937500, -380001.812500",\ + "-380002.250000, -380002.218750, -380002.156250, -380002.125000, -380002.000000",\ + "-380002.500000, -380002.468750, -380002.406250, -380002.375000, -380002.250000"); + } + + } /* end of arc clk_ast_usb_i_padmux2ast_i[4]_remfr*/ + +} /* end of pin padmux2ast_i[4] */ + +pin("padmux2ast_i[3]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001527 ; + + /* Other user defined attributes. */ + original_pin : padmux2ast_i[3]; +} /* end of pin padmux2ast_i[3] */ + +pin("padmux2ast_i[2]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001451 ; + + /* Other user defined attributes. */ + original_pin : padmux2ast_i[2]; +} /* end of pin padmux2ast_i[2] */ + +pin("padmux2ast_i[1]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.002579 ; + + /* Other user defined attributes. */ + original_pin : padmux2ast_i[1]; +} /* end of pin padmux2ast_i[1] */ + +pin("padmux2ast_i[0]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001032 ; + + /* Other user defined attributes. */ + original_pin : padmux2ast_i[0]; +} /* end of pin padmux2ast_i[0] */ +} /* end of bus padmux2ast_i */ +bus ( ast2padmux_o ) { + + bus_type : BUS9_type16 ; + direction : output ; + +pin("ast2padmux_o[8]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.159377 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : ast2padmux_o[8]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "380004.343750, 380004.375000, 380004.437500, 380004.718750, 380005.625000",\ + "380004.437500, 380004.468750, 380004.531250, 380004.812500, 380005.718750",\ + "380004.531250, 380004.562500, 380004.625000, 380004.906250, 380005.812500",\ + "380004.593750, 380004.625000, 380004.687500, 380004.968750, 380005.875000",\ + "380004.937500, 380004.968750, 380005.031250, 380005.312500, 380006.218750"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "0.021241, 0.066861, 0.199049, 0.687205, 2.464075",\ + "0.021241, 0.066861, 0.199049, 0.687205, 2.464075",\ + "0.021241, 0.066861, 0.199049, 0.687205, 2.464075",\ + "0.021241, 0.066861, 0.199049, 0.687205, 2.464075",\ + "0.021241, 0.066861, 0.199049, 0.687205, 2.464075"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "380002.437500, 380002.468750, 380002.531250, 380002.687500, 380003.281250",\ + "380002.531250, 380002.562500, 380002.625000, 380002.781250, 380003.375000",\ + "380002.593750, 380002.625000, 380002.687500, 380002.843750, 380003.437500",\ + "380002.656250, 380002.687500, 380002.750000, 380002.906250, 380003.500000",\ + "380003.000000, 380003.031250, 380003.093750, 380003.250000, 380003.843750"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "0.027368, 0.057498, 0.133582, 0.436964, 1.549163",\ + "0.027368, 0.057498, 0.133582, 0.436964, 1.549163",\ + "0.027368, 0.057498, 0.133582, 0.436964, 1.549163",\ + "0.027368, 0.057498, 0.133582, 0.436964, 1.549163",\ + "0.027375, 0.057503, 0.133586, 0.436974, 1.549209"); + } + + } /* end of arc clk_ast_tlul_i_ast2padmux_o[8]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "0.198420, 0.230953, 0.301455, 0.556384, 1.484645",\ + "0.286701, 0.319234, 0.389735, 0.644664, 1.572926",\ + "0.375268, 0.407801, 0.478303, 0.733232, 1.661493",\ + "0.437972, 0.470506, 0.541007, 0.795935, 1.724196",\ + "0.757115, 0.789659, 0.860255, 1.115081, 2.043332"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "0.020935, 0.066607, 0.198712, 0.685847, 2.460401",\ + "0.020935, 0.066607, 0.198712, 0.685847, 2.460401",\ + "0.020935, 0.066607, 0.198712, 0.685847, 2.460401",\ + "0.020935, 0.066607, 0.198712, 0.685847, 2.460401",\ + "0.020935, 0.066607, 0.198712, 0.685847, 2.460401"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "0.211851, 0.238498, 0.286799, 0.453464, 1.060488",\ + "0.299253, 0.325901, 0.374202, 0.540867, 1.147891",\ + "0.380126, 0.406773, 0.455075, 0.621740, 1.228763",\ + "0.437748, 0.464395, 0.512697, 0.679362, 1.286385",\ + "0.739921, 0.766569, 0.814870, 0.981535, 1.588558"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "0.020406, 0.050335, 0.128964, 0.434734, 1.543997",\ + "0.020406, 0.050335, 0.128964, 0.434734, 1.543997",\ + "0.020406, 0.050335, 0.128964, 0.434734, 1.543997",\ + "0.020406, 0.050335, 0.128964, 0.434734, 1.543997",\ + "0.020406, 0.050336, 0.128964, 0.434733, 1.544003"); + } + + } /* end of arc clk_ast_tlul_i_ast2padmux_o[8]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "0.408924, 0.441470, 0.512070, 0.766936, 1.695386",\ + "0.493120, 0.525666, 0.596266, 0.851132, 1.779583",\ + "0.583441, 0.615988, 0.686587, 0.941453, 1.869904",\ + "0.653401, 0.685947, 0.756547, 1.011413, 1.939865",\ + "1.044013, 1.076560, 1.147159, 1.402024, 2.330486"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "0.020948, 0.066625, 0.198722, 0.685958, 2.464075",\ + "0.020948, 0.066625, 0.198722, 0.685958, 2.464075",\ + "0.020948, 0.066625, 0.198722, 0.685958, 2.464075",\ + "0.020948, 0.066625, 0.198723, 0.685958, 2.464075",\ + "0.020946, 0.066625, 0.198725, 0.685957, 2.464076"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "0.438271, 0.469168, 0.519837, 0.687755, 1.292925",\ + "0.526383, 0.557280, 0.607949, 0.775866, 1.381036",\ + "0.628083, 0.658980, 0.709649, 0.877567, 1.482737",\ + "0.819336, 0.850238, 0.900907, 1.068829, 1.674009",\ + "1.156747, 1.187659, 1.238328, 1.406259, 2.011461"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "0.027368, 0.057498, 0.133582, 0.436963, 1.549160",\ + "0.027368, 0.057498, 0.133582, 0.436963, 1.549160",\ + "0.027368, 0.057498, 0.133582, 0.436963, 1.549160",\ + "0.027371, 0.057501, 0.133584, 0.436969, 1.549186",\ + "0.027379, 0.057507, 0.133588, 0.436980, 1.549240"); + } + + } /* end of arc clk_ast_tlul_i_ast2padmux_o[8]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "0.398110, 0.430656, 0.501253, 0.756075, 1.684372",\ + "0.482288, 0.514834, 0.585431, 0.840253, 1.768550",\ + "0.572606, 0.605152, 0.675749, 0.930571, 1.858868",\ + "0.642450, 0.674996, 0.745593, 1.000414, 1.928712",\ + "1.032124, 1.064670, 1.135267, 1.390089, 2.318387"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "0.020932, 0.066607, 0.198719, 0.685843, 2.463750",\ + "0.020932, 0.066607, 0.198719, 0.685843, 2.463750",\ + "0.020932, 0.066607, 0.198719, 0.685843, 2.463750",\ + "0.020932, 0.066607, 0.198719, 0.685843, 2.463750",\ + "0.020932, 0.066607, 0.198719, 0.685843, 2.463750"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "0.427883, 0.458770, 0.509441, 0.677352, 1.282498",\ + "0.516006, 0.546892, 0.597564, 0.765475, 1.370620",\ + "0.617659, 0.648546, 0.699217, 0.867128, 1.472274",\ + "0.808079, 0.838969, 0.889641, 1.057554, 1.662708",\ + "1.144522, 1.175420, 1.226092, 1.394011, 1.999181"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "0.027342, 0.057489, 0.133570, 0.436937, 1.549078",\ + "0.027342, 0.057489, 0.133570, 0.436937, 1.549078",\ + "0.027342, 0.057489, 0.133570, 0.436937, 1.549078",\ + "0.027344, 0.057490, 0.133572, 0.436941, 1.549096",\ + "0.027347, 0.057494, 0.133575, 0.436950, 1.549136"); + } + + } /* end of arc clk_ast_tlul_i_ast2padmux_o[8]_una_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "380000.718750, 380000.750000, 380000.812500, 380001.093750, 380002.000000",\ + "380000.812500, 380000.843750, 380000.906250, 380001.187500, 380002.093750",\ + "380000.906250, 380000.937500, 380001.000000, 380001.281250, 380002.187500",\ + "380001.062500, 380001.093750, 380001.156250, 380001.437500, 380002.343750",\ + "380001.312500, 380001.343750, 380001.406250, 380001.687500, 380002.593750"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "0.021241, 0.066861, 0.199049, 0.687205, 2.464075",\ + "0.021241, 0.066861, 0.199049, 0.687205, 2.464075",\ + "0.021241, 0.066861, 0.199049, 0.687205, 2.464075",\ + "0.021241, 0.066861, 0.199049, 0.687205, 2.464075",\ + "0.021241, 0.066861, 0.199049, 0.687205, 2.464075"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "380002.125000, 380002.156250, 380002.218750, 380002.375000, 380002.968750",\ + "380002.218750, 380002.250000, 380002.312500, 380002.468750, 380003.062500",\ + "380002.343750, 380002.375000, 380002.437500, 380002.593750, 380003.187500",\ + "380002.531250, 380002.562500, 380002.625000, 380002.781250, 380003.375000",\ + "380002.843750, 380002.875000, 380002.937500, 380003.093750, 380003.687500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "0.027368, 0.057498, 0.133582, 0.436964, 1.549163",\ + "0.027368, 0.057498, 0.133582, 0.436964, 1.549163",\ + "0.027368, 0.057498, 0.133582, 0.436964, 1.549163",\ + "0.027368, 0.057498, 0.133582, 0.436964, 1.549163",\ + "0.027368, 0.057498, 0.133582, 0.436964, 1.549163"); + } + + } /* end of arc padmux2ast_i[4]_ast2padmux_o[8]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "380000.687500, 380000.718750, 380000.781250, 380001.062500, 380001.968750",\ + "380000.781250, 380000.812500, 380000.875000, 380001.156250, 380002.062500",\ + "380000.843750, 380000.875000, 380000.937500, 380001.218750, 380002.125000",\ + "380001.000000, 380001.031250, 380001.093750, 380001.375000, 380002.281250",\ + "380001.218750, 380001.250000, 380001.312500, 380001.593750, 380002.500000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "0.020932, 0.066607, 0.198719, 0.685843, 2.460022",\ + "0.020932, 0.066607, 0.198719, 0.685843, 2.460022",\ + "0.020932, 0.066607, 0.198719, 0.685843, 2.460022",\ + "0.020932, 0.066607, 0.198719, 0.685843, 2.460022",\ + "0.020932, 0.066607, 0.198719, 0.685843, 2.460022"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "380002.125000, 380002.156250, 380002.187500, 380002.375000, 380002.968750",\ + "380002.218750, 380002.250000, 380002.281250, 380002.468750, 380003.062500",\ + "380002.312500, 380002.343750, 380002.375000, 380002.562500, 380003.156250",\ + "380002.500000, 380002.531250, 380002.562500, 380002.750000, 380003.343750",\ + "380002.750000, 380002.781250, 380002.812500, 380003.000000, 380003.593750"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "0.020492, 0.050440, 0.128935, 0.434235, 1.546080",\ + "0.020492, 0.050440, 0.128935, 0.434235, 1.546080",\ + "0.020492, 0.050440, 0.128935, 0.434235, 1.546080",\ + "0.020492, 0.050440, 0.128935, 0.434235, 1.546080",\ + "0.020492, 0.050440, 0.128935, 0.434235, 1.546080"); + } + + } /* end of arc padmux2ast_i[4]_ast2padmux_o[8]_una_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "380002.312500, 380002.343750, 380002.406250, 380002.562500, 380003.156250",\ + "380002.406250, 380002.437500, 380002.500000, 380002.656250, 380003.250000",\ + "380002.500000, 380002.531250, 380002.593750, 380002.750000, 380003.343750",\ + "380002.656250, 380002.687500, 380002.750000, 380002.906250, 380003.500000",\ + "380002.906250, 380002.937500, 380003.000000, 380003.156250, 380003.750000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "0.027368, 0.057498, 0.133582, 0.436964, 1.549163",\ + "0.027368, 0.057498, 0.133582, 0.436964, 1.549163",\ + "0.027368, 0.057498, 0.133582, 0.436964, 1.549163",\ + "0.027368, 0.057498, 0.133582, 0.436964, 1.549163",\ + "0.027368, 0.057498, 0.133582, 0.436964, 1.549163"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "380004.250000, 380004.281250, 380004.343750, 380004.625000, 380005.531250",\ + "380004.343750, 380004.375000, 380004.437500, 380004.718750, 380005.625000",\ + "380004.468750, 380004.500000, 380004.562500, 380004.843750, 380005.750000",\ + "380004.656250, 380004.687500, 380004.750000, 380005.031250, 380005.937500",\ + "380004.968750, 380005.000000, 380005.062500, 380005.343750, 380006.250000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "0.021241, 0.066861, 0.199049, 0.687205, 2.464075",\ + "0.021241, 0.066861, 0.199049, 0.687205, 2.464075",\ + "0.021241, 0.066861, 0.199049, 0.687205, 2.464075",\ + "0.021241, 0.066861, 0.199049, 0.687205, 2.464075",\ + "0.021241, 0.066861, 0.199049, 0.687205, 2.464075"); + } + + } /* end of arc padmux2ast_i[4]_ast2padmux_o[8]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "380000.687500, 380000.718750, 380000.750000, 380000.937500, 380001.531250",\ + "380000.781250, 380000.812500, 380000.843750, 380001.031250, 380001.625000",\ + "380000.843750, 380000.875000, 380000.906250, 380001.093750, 380001.687500",\ + "380001.000000, 380001.031250, 380001.062500, 380001.250000, 380001.843750",\ + "380001.218750, 380001.250000, 380001.281250, 380001.468750, 380002.062500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "0.020492, 0.050440, 0.128935, 0.434235, 1.546080",\ + "0.020492, 0.050440, 0.128935, 0.434235, 1.546080",\ + "0.020492, 0.050440, 0.128935, 0.434235, 1.546080",\ + "0.020492, 0.050440, 0.128935, 0.434235, 1.546080",\ + "0.020492, 0.050440, 0.128935, 0.434235, 1.546080"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "380002.062500, 380002.093750, 380002.156250, 380002.437500, 380003.343750",\ + "380002.156250, 380002.187500, 380002.250000, 380002.531250, 380003.437500",\ + "380002.250000, 380002.281250, 380002.343750, 380002.625000, 380003.531250",\ + "380002.437500, 380002.468750, 380002.531250, 380002.812500, 380003.718750",\ + "380002.687500, 380002.718750, 380002.781250, 380003.062500, 380003.968750"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.003266, 0.011949, 0.043724, 0.159377"); + values ( "0.020932, 0.066607, 0.198719, 0.685843, 2.460022",\ + "0.020932, 0.066607, 0.198719, 0.685843, 2.460022",\ + "0.020932, 0.066607, 0.198719, 0.685843, 2.460022",\ + "0.020932, 0.066607, 0.198719, 0.685843, 2.460022",\ + "0.020932, 0.066607, 0.198719, 0.685843, 2.460022"); + } + + } /* end of arc padmux2ast_i[4]_ast2padmux_o[8]_inv_min*/ + +} /* end of pin ast2padmux_o[8] */ + +pin("ast2padmux_o[7]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.028584 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : ast2padmux_o[7]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380001.875000, 380001.937500, 380002.062500, 380002.375000, 380003.250000",\ + "380001.968750, 380002.031250, 380002.156250, 380002.468750, 380003.343750",\ + "380002.062500, 380002.125000, 380002.250000, 380002.562500, 380003.437500",\ + "380002.125000, 380002.187500, 380002.312500, 380002.625000, 380003.500000",\ + "380002.468750, 380002.531250, 380002.656250, 380002.968750, 380003.843750"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189354, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189354, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189365, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189385, 0.392560, 0.950608, 2.441526",\ + "0.073824, 0.189425, 0.393252, 0.950608, 2.441526"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380000.437500, 380000.437500, 380000.468750, 380000.531250, 380000.718750",\ + "380000.531250, 380000.531250, 380000.562500, 380000.625000, 380000.812500",\ + "380000.593750, 380000.593750, 380000.625000, 380000.687500, 380000.875000",\ + "380000.656250, 380000.656250, 380000.687500, 380000.750000, 380000.937500",\ + "380000.968750, 380000.968750, 380001.000000, 380001.062500, 380001.250000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497"); + } + + } /* end of arc clk_ast_tlul_i_ast2padmux_o[7]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.118063, 0.173160, 0.267375, 0.527316, 1.216798",\ + "0.205470, 0.260567, 0.354781, 0.614720, 1.304204",\ + "0.286205, 0.341346, 0.435579, 0.695608, 1.384949",\ + "0.343571, 0.398793, 0.493060, 0.753254, 1.442331",\ + "0.643636, 0.699058, 0.793671, 1.054205, 1.742813"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.055140, 0.149920, 0.315966, 0.770671, 1.992169",\ + "0.055140, 0.149920, 0.315966, 0.770671, 1.992169",\ + "0.055064, 0.149920, 0.315966, 0.770616, 1.992169",\ + "0.054924, 0.149920, 0.315966, 0.770514, 1.992169",\ + "0.054820, 0.149920, 0.315966, 0.770514, 1.988361"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.068977, 0.083624, 0.108789, 0.177707, 0.362145",\ + "0.157440, 0.172093, 0.197279, 0.266195, 0.450612",\ + "0.246166, 0.261189, 0.286407, 0.355291, 0.539679",\ + "0.308361, 0.324424, 0.349591, 0.418444, 0.602842",\ + "0.630702, 0.654723, 0.683267, 0.752219, 0.936438"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.015416, 0.041075, 0.085652, 0.207740, 0.535967",\ + "0.015763, 0.041089, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967"); + } + + } /* end of arc clk_ast_tlul_i_ast2padmux_o[7]_redg_min*/ + + timing () { + related_pin : "fla_obs_i[7]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.111862, 0.178517, 0.294685, 0.611498, 1.461412",\ + "0.196887, 0.263820, 0.381200, 0.697836, 1.546758",\ + "0.280874, 0.348002, 0.465333, 0.783744, 1.631498",\ + "0.419192, 0.490016, 0.607541, 0.927454, 1.774732",\ + "0.629434, 0.713469, 0.835221, 1.155234, 2.004311"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067759, 0.184639, 0.382501, 0.937507, 2.417566",\ + "0.067759, 0.184639, 0.382501, 0.937507, 2.418347",\ + "0.069174, 0.184639, 0.382586, 0.937507, 2.418347",\ + "0.077831, 0.187460, 0.383300, 0.940319, 2.418347",\ + "0.099054, 0.205738, 0.390315, 0.940320, 2.425200"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.103322, 0.134506, 0.187130, 0.329612, 0.708263",\ + "0.188196, 0.219801, 0.272413, 0.414932, 0.793505",\ + "0.281500, 0.317246, 0.369943, 0.512302, 0.890520",\ + "0.433568, 0.478875, 0.537406, 0.680993, 1.058708",\ + "0.668936, 0.733428, 0.809479, 0.962224, 1.340585"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040521, 0.090274, 0.180244, 0.428614, 1.092440",\ + "0.042863, 0.090977, 0.180401, 0.428614, 1.092696",\ + "0.054661, 0.097371, 0.180899, 0.428690, 1.092793",\ + "0.077190, 0.120374, 0.194930, 0.430280, 1.092793",\ + "0.118581, 0.174509, 0.240947, 0.445113, 1.092793"); + } + + } /* end of arc fla_obs_i[7]_ast2padmux_o[7]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "fla_obs_i[7]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.110629, 0.177262, 0.293339, 0.610165, 1.460154",\ + "0.194795, 0.261696, 0.378936, 0.695592, 1.544629",\ + "0.275980, 0.343081, 0.460479, 0.778514, 1.626463",\ + "0.408884, 0.478137, 0.595421, 0.915532, 1.762573",\ + "0.610985, 0.691263, 0.810230, 1.128954, 1.977655"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067834, 0.183634, 0.382402, 0.934951, 2.414331",\ + "0.067834, 0.183634, 0.382402, 0.934951, 2.414331",\ + "0.068631, 0.183634, 0.382540, 0.936478, 2.414331",\ + "0.075251, 0.185541, 0.383090, 0.939701, 2.414331",\ + "0.093347, 0.198994, 0.384563, 0.939701, 2.425563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.077370, 0.108647, 0.161299, 0.303710, 0.682406",\ + "0.166391, 0.197521, 0.250129, 0.392651, 0.771277",\ + "0.253394, 0.288299, 0.340979, 0.483371, 0.861661",\ + "0.395347, 0.439383, 0.496795, 0.640121, 1.017884",\ + "0.615736, 0.679130, 0.754042, 0.905113, 1.283136"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039363, 0.090228, 0.180124, 0.428312, 1.092155",\ + "0.041196, 0.090228, 0.180315, 0.428312, 1.092511",\ + "0.052267, 0.096073, 0.180798, 0.428601, 1.092511",\ + "0.074482, 0.116813, 0.192279, 0.430033, 1.092511",\ + "0.116096, 0.171326, 0.236992, 0.441817, 1.092511"); + } + + } /* end of arc fla_obs_i[7]_ast2padmux_o[7]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[10]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.059999, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.495682, 0.527114, 0.579822, 0.722175, 1.100772",\ + "0.520857, 0.552289, 0.604997, 0.747350, 1.125947",\ + "0.590847, 0.622279, 0.674987, 0.817340, 1.195937",\ + "0.713975, 0.745406, 0.798114, 0.940467, 1.319064",\ + "1.300896, 1.332327, 1.385036, 1.527389, 1.905985"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.059999, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.053775, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.673247, 0.740150, 0.856588, 1.176256, 2.031462",\ + "0.693898, 0.760801, 0.877239, 1.196908, 2.052114",\ + "0.752520, 0.819423, 0.935861, 1.255530, 2.110735",\ + "0.862063, 0.928966, 1.045403, 1.365072, 2.220278",\ + "1.621675, 1.688580, 1.805019, 2.124689, 2.979892"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.053775, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073039, 0.188935, 0.391846, 0.949113, 2.441342"); + } + + } /* end of arc obs_ctrl_o[10]_ast2padmux_o[7]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[10]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.056753, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.342569, 0.373981, 0.426627, 0.569042, 0.947686",\ + "0.366027, 0.397440, 0.450085, 0.592500, 0.971144",\ + "0.437124, 0.468537, 0.521182, 0.663597, 1.042241",\ + "0.562321, 0.593734, 0.646379, 0.788794, 1.167438",\ + "1.165783, 1.197195, 1.249841, 1.392256, 1.770899"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.056753, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039011, 0.090734, 0.180376, 0.429203, 1.091692",\ + "0.039011, 0.090734, 0.180376, 0.429203, 1.091692",\ + "0.039011, 0.090734, 0.180376, 0.429203, 1.091692",\ + "0.039011, 0.090734, 0.180376, 0.429203, 1.091692",\ + "0.039011, 0.090734, 0.180376, 0.429203, 1.091692"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044579, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.657383, 0.724274, 0.840701, 1.160369, 2.015589",\ + "0.673535, 0.740426, 0.856853, 1.176521, 2.031741",\ + "0.736621, 0.803512, 0.919939, 1.239607, 2.094827",\ + "0.845856, 0.912747, 1.029174, 1.348842, 2.204062",\ + "1.602693, 1.669584, 1.786011, 2.105679, 2.960899"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044579, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073030, 0.188914, 0.391814, 0.949025, 2.441330",\ + "0.073030, 0.188914, 0.391814, 0.949025, 2.441330",\ + "0.073030, 0.188914, 0.391814, 0.949025, 2.441330",\ + "0.073030, 0.188914, 0.391814, 0.949025, 2.441330",\ + "0.073030, 0.188914, 0.391814, 0.949025, 2.441330"); + } + + } /* end of arc obs_ctrl_o[10]_ast2padmux_o[7]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[11]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.034927, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.180024, 0.211452, 0.264149, 0.406513, 0.785119",\ + "0.193406, 0.224834, 0.277531, 0.419896, 0.798501",\ + "0.275919, 0.307349, 0.360051, 0.502410, 0.881011",\ + "0.400910, 0.432352, 0.485095, 0.627414, 1.005985",\ + "0.975060, 1.010086, 1.063144, 1.205732, 1.584486"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.034927, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039119, 0.090633, 0.180636, 0.429262, 1.090996",\ + "0.039119, 0.090633, 0.180636, 0.429262, 1.090996",\ + "0.039132, 0.090633, 0.180667, 0.429269, 1.090996",\ + "0.039215, 0.090633, 0.180868, 0.429314, 1.090996",\ + "0.049347, 0.094034, 0.180868, 0.429355, 1.091896"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037147, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.465437, 0.532662, 0.649281, 0.969044, 1.824018",\ + "0.477695, 0.544920, 0.661539, 0.981302, 1.836276",\ + "0.541916, 0.609140, 0.725760, 1.045521, 1.900495",\ + "0.644626, 0.711856, 0.828474, 1.148242, 2.003221",\ + "1.319722, 1.387140, 1.503696, 1.823662, 2.678811"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037147, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073817, 0.189281, 0.392442, 0.950607, 2.441526",\ + "0.073817, 0.189281, 0.392442, 0.950607, 2.441526",\ + "0.073817, 0.189282, 0.392442, 0.950607, 2.441526",\ + "0.073862, 0.189282, 0.392442, 0.950619, 2.441526",\ + "0.075399, 0.189282, 0.392442, 0.951039, 2.441526"); + } + + } /* end of arc obs_ctrl_o[11]_ast2padmux_o[7]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[11]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.030664, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.159139, 0.190553, 0.243202, 0.385613, 0.764254",\ + "0.170514, 0.201928, 0.254577, 0.396989, 0.775629",\ + "0.255576, 0.286993, 0.339652, 0.482053, 0.860686",\ + "0.379908, 0.411340, 0.464049, 0.606401, 0.984998",\ + "0.945167, 0.979651, 1.032663, 1.175209, 1.553933"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.030664, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039020, 0.090609, 0.180397, 0.429208, 1.090831",\ + "0.039020, 0.090609, 0.180397, 0.429208, 1.090831",\ + "0.039042, 0.090609, 0.180449, 0.429220, 1.090831",\ + "0.039144, 0.090609, 0.180675, 0.429276, 1.090831",\ + "0.047820, 0.093501, 0.180675, 0.429352, 1.091629"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.028580, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.461683, 0.528880, 0.645509, 0.965243, 1.820192",\ + "0.470327, 0.537524, 0.654153, 0.973887, 1.828836",\ + "0.538174, 0.605371, 0.721999, 1.041733, 1.896681",\ + "0.640782, 0.707985, 0.824611, 1.144351, 1.999304",\ + "1.312551, 1.379913, 1.496487, 1.816396, 2.671496"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.028580, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073594, 0.189124, 0.392388, 0.950544, 2.441454",\ + "0.073594, 0.189124, 0.392388, 0.950544, 2.441454",\ + "0.073594, 0.189124, 0.392388, 0.950544, 2.441454",\ + "0.073633, 0.189124, 0.392388, 0.950557, 2.441454",\ + "0.074954, 0.189124, 0.392388, 0.950917, 2.441454"); + } + + } /* end of arc obs_ctrl_o[11]_ast2padmux_o[7]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.500858, 0.568082, 0.684702, 1.004464, 1.859437",\ + "0.516623, 0.583848, 0.700467, 1.020230, 1.875203",\ + "0.590734, 0.657958, 0.774578, 1.094340, 1.949314",\ + "0.681946, 0.749171, 0.865790, 1.185553, 2.040526",\ + "1.108576, 1.175805, 1.292423, 1.612190, 2.467167"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073816, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073848, 0.189277, 0.392440, 0.950615, 2.441524"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.275118, 0.306284, 0.358903, 0.501398, 0.880041",\ + "0.290749, 0.321915, 0.374533, 0.517029, 0.895671",\ + "0.363703, 0.394869, 0.447488, 0.589983, 0.968626",\ + "0.474794, 0.505959, 0.558577, 0.701073, 1.079716",\ + "1.013269, 1.044421, 1.097036, 1.239541, 1.618177"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040759, 0.090626, 0.180653, 0.429266, 1.092499",\ + "0.040922, 0.090525, 0.180916, 0.429325, 1.092539"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[7]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.337608, 0.404302, 0.520641, 0.837429, 1.687203",\ + "0.349939, 0.416633, 0.532972, 0.849760, 1.699534",\ + "0.408752, 0.475446, 0.591785, 0.908573, 1.758347",\ + "0.496083, 0.562777, 0.679117, 0.995905, 1.845678",\ + "0.949078, 1.015776, 1.132136, 1.448920, 2.298678"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184560, 0.382485, 0.937098, 2.417677",\ + "0.067604, 0.184551, 0.382483, 0.937052, 2.417689"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.209985, 0.241400, 0.294052, 0.436461, 0.815099",\ + "0.221857, 0.253271, 0.305923, 0.448332, 0.826970",\ + "0.304351, 0.335766, 0.388417, 0.530826, 0.909465",\ + "0.409226, 0.440642, 0.493298, 0.635702, 1.014338",\ + "0.909442, 0.940877, 0.993596, 1.135938, 1.514527"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039034, 0.090327, 0.180161, 0.428971, 1.091542",\ + "0.039166, 0.090324, 0.180166, 0.428948, 1.090692"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[7]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.287803, 0.318969, 0.371587, 0.514083, 0.892726",\ + "0.303569, 0.334734, 0.387353, 0.529848, 0.908491",\ + "0.378810, 0.409975, 0.462594, 0.605089, 0.983732",\ + "0.473884, 0.505049, 0.557668, 0.700163, 1.078806",\ + "0.918190, 0.949342, 1.001956, 1.144462, 1.523098"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040759, 0.090626, 0.180653, 0.429266, 1.092499",\ + "0.040922, 0.090525, 0.180916, 0.429325, 1.092539"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.376755, 0.443500, 0.560063, 0.876818, 1.726409",\ + "0.392417, 0.459162, 0.575725, 0.892480, 1.742071",\ + "0.467424, 0.534169, 0.650732, 0.967487, 1.817078",\ + "0.562603, 0.629351, 0.745928, 1.062681, 1.912261",\ + "1.006927, 1.073706, 1.190415, 1.507149, 2.356620"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073816, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073848, 0.189277, 0.392440, 0.950615, 2.441524"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[7]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.264318, 0.295567, 0.348210, 0.490643, 0.869326",\ + "0.278489, 0.309737, 0.362381, 0.504814, 0.883496",\ + "0.355325, 0.386573, 0.439217, 0.581649, 0.960332",\ + "0.450369, 0.481617, 0.534260, 0.676693, 1.055376",\ + "0.893831, 0.925076, 0.977718, 1.120154, 1.498834"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039034, 0.090327, 0.180161, 0.428971, 1.091542",\ + "0.039166, 0.090324, 0.180166, 0.428948, 1.090692"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.373701, 0.440395, 0.556734, 0.873522, 1.723296",\ + "0.385572, 0.452266, 0.568605, 0.885393, 1.735167",\ + "0.464371, 0.531065, 0.647404, 0.964192, 1.813966",\ + "0.559385, 0.626079, 0.742420, 1.059207, 1.908981",\ + "1.002245, 1.068944, 1.185303, 1.502088, 2.351846"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184560, 0.382485, 0.937098, 2.417677",\ + "0.067604, 0.184551, 0.382483, 0.937052, 2.417689"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[7]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.337998, 0.404744, 0.521308, 0.838063, 1.687653",\ + "0.353177, 0.419923, 0.536487, 0.853242, 1.702832",\ + "0.412195, 0.478941, 0.595505, 0.912260, 1.761850",\ + "0.508449, 0.575199, 0.691783, 1.008535, 1.858109",\ + "0.997007, 1.063817, 1.180658, 1.497372, 2.346736"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073812, 0.189282, 0.392442, 0.950605, 2.441527",\ + "0.073812, 0.189282, 0.392442, 0.950605, 2.441527",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073887, 0.189271, 0.392439, 0.950626, 2.441522",\ + "0.075818, 0.189005, 0.392348, 0.951153, 2.441399"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.272032, 0.303198, 0.355817, 0.498312, 0.876955",\ + "0.289891, 0.321056, 0.373675, 0.516170, 0.894813",\ + "0.360955, 0.392121, 0.444739, 0.587235, 0.965878",\ + "0.471378, 0.502542, 0.555160, 0.697656, 1.076298",\ + "1.004117, 1.035227, 1.087829, 1.230366, 1.608983"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090633, 0.180635, 0.429262, 1.092497",\ + "0.040752, 0.090633, 0.180635, 0.429262, 1.092497",\ + "0.040752, 0.090633, 0.180666, 0.429269, 1.092497",\ + "0.040771, 0.090633, 0.180871, 0.429315, 1.092502",\ + "0.049622, 0.094130, 0.180871, 0.429356, 1.092666"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[7]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.329221, 0.395915, 0.512254, 0.829041, 1.678816",\ + "0.344592, 0.411286, 0.527624, 0.844412, 1.694187",\ + "0.406780, 0.473474, 0.589813, 0.906601, 1.756375",\ + "0.502234, 0.568932, 0.685288, 1.002073, 1.851833",\ + "0.957622, 1.024367, 1.140929, 1.457685, 2.307276"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067607, 0.184553, 0.382483, 0.937060, 2.417687",\ + "0.067439, 0.184458, 0.382464, 0.936568, 2.417820"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.231492, 0.262740, 0.315383, 0.457816, 0.836499",\ + "0.245351, 0.276600, 0.329243, 0.471676, 0.850359",\ + "0.320124, 0.351372, 0.404016, 0.546449, 0.925131",\ + "0.430166, 0.461410, 0.514053, 0.656489, 1.035169",\ + "0.955028, 0.986237, 1.038869, 1.181331, 1.559995"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039018, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039018, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039041, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039146, 0.090294, 0.180167, 0.428752, 1.090822",\ + "0.040211, 0.090294, 0.180212, 0.428752, 1.091676"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[7]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.176901, 0.208329, 0.261026, 0.403390, 0.781996",\ + "0.196158, 0.227585, 0.280282, 0.422647, 0.801252",\ + "0.273304, 0.304734, 0.357436, 0.499795, 0.878396",\ + "0.397207, 0.428649, 0.481392, 0.623711, 1.002282",\ + "0.961790, 0.996912, 1.049978, 1.192575, 1.571334"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090633, 0.180635, 0.429262, 1.092497",\ + "0.040752, 0.090633, 0.180635, 0.429262, 1.092497",\ + "0.040752, 0.090633, 0.180666, 0.429269, 1.092497",\ + "0.040771, 0.090633, 0.180871, 0.429315, 1.092502",\ + "0.049622, 0.094130, 0.180871, 0.429356, 1.092666"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.455825, 0.523049, 0.639668, 0.959430, 1.814404",\ + "0.468963, 0.536187, 0.652807, 0.972569, 1.827542",\ + "0.531289, 0.598514, 0.715133, 1.034896, 1.889869",\ + "0.640154, 0.707387, 0.824004, 1.143775, 1.998757",\ + "1.332501, 1.399969, 1.516508, 1.836528, 2.691724"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073812, 0.189282, 0.392442, 0.950605, 2.441527",\ + "0.073812, 0.189282, 0.392442, 0.950605, 2.441527",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073887, 0.189271, 0.392439, 0.950626, 2.441522",\ + "0.075818, 0.189005, 0.392348, 0.951153, 2.441399"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[7]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.155833, 0.187247, 0.239896, 0.382308, 0.760949",\ + "0.173482, 0.204896, 0.257545, 0.399957, 0.778598",\ + "0.252964, 0.284381, 0.337040, 0.479441, 0.858074",\ + "0.376196, 0.407628, 0.460337, 0.602689, 0.981285",\ + "0.931678, 0.966257, 1.019278, 1.161831, 1.540560"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039018, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039018, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039041, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039146, 0.090294, 0.180167, 0.428752, 1.090822",\ + "0.040211, 0.090294, 0.180212, 0.428752, 1.091676"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.452081, 0.519278, 0.635907, 0.955640, 1.810589",\ + "0.461862, 0.529059, 0.645688, 0.965421, 1.820370",\ + "0.527542, 0.594739, 0.711368, 1.031102, 1.886050",\ + "0.636262, 0.703467, 0.820093, 1.139835, 1.994791",\ + "1.324350, 1.391756, 1.508316, 1.828270, 2.683409"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067607, 0.184553, 0.382483, 0.937060, 2.417687",\ + "0.067439, 0.184458, 0.382464, 0.936568, 2.417820"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[7]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.325984, 0.393209, 0.509828, 0.829592, 1.684567",\ + "0.341732, 0.408957, 0.525576, 0.845340, 1.700314",\ + "0.405621, 0.472847, 0.589466, 0.909229, 1.764204",\ + "0.483984, 0.551208, 0.667827, 0.987590, 1.842564",\ + "0.876566, 0.943791, 1.060410, 1.380173, 2.235147"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189281, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189281, 0.392442, 0.950608, 2.441526"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.207560, 0.238992, 0.291700, 0.434053, 0.812650",\ + "0.223441, 0.254873, 0.307582, 0.449934, 0.828531",\ + "0.292964, 0.324396, 0.377105, 0.519457, 0.898054",\ + "0.382304, 0.413736, 0.466444, 0.608797, 0.987394",\ + "0.808201, 0.839636, 0.892354, 1.034697, 1.413287"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180696, 0.429275, 1.092497",\ + "0.040785, 0.090610, 0.180744, 0.429286, 1.092505"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[7]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.298728, 0.365697, 0.482189, 0.801862, 1.656989",\ + "0.312838, 0.379807, 0.496299, 0.815972, 1.671100",\ + "0.378416, 0.445385, 0.561877, 0.881551, 1.736677",\ + "0.456978, 0.523948, 0.640441, 0.960115, 1.815240",\ + "0.852482, 0.919491, 1.036016, 1.355692, 2.210772"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067586, 0.184541, 0.382481, 0.936998, 2.417704"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.185526, 0.216941, 0.269593, 0.412001, 0.790640",\ + "0.197528, 0.228943, 0.281595, 0.424004, 0.802642",\ + "0.270950, 0.302365, 0.355017, 0.497425, 0.876064",\ + "0.360375, 0.391790, 0.444442, 0.586850, 0.965489",\ + "0.786063, 0.817479, 0.870138, 1.012540, 1.391174"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039039, 0.090322, 0.180169, 0.428938, 1.091513"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[7]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.314064, 0.345229, 0.397848, 0.540343, 0.918986",\ + "0.329859, 0.361025, 0.413644, 0.556139, 0.934782",\ + "0.407724, 0.438890, 0.491508, 0.634004, 1.012646",\ + "0.508778, 0.539944, 0.592562, 0.735058, 1.113701",\ + "0.984655, 1.015818, 1.068436, 1.210933, 1.589574"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180696, 0.429275, 1.092497",\ + "0.040785, 0.090610, 0.180744, 0.429286, 1.092505"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.596327, 0.663552, 0.780171, 1.099935, 1.954909",\ + "0.609131, 0.676356, 0.792975, 1.112739, 1.967713",\ + "0.677113, 0.744339, 0.860958, 1.180721, 2.035696",\ + "0.788810, 0.856034, 0.972654, 1.292416, 2.147390",\ + "1.273667, 1.340892, 1.457511, 1.777274, 2.632248"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189281, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189281, 0.392442, 0.950608, 2.441526"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[7]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.262848, 0.294262, 0.346915, 0.489323, 0.867962",\ + "0.276998, 0.308413, 0.361065, 0.503474, 0.882112",\ + "0.356726, 0.388141, 0.440793, 0.583202, 0.961840",\ + "0.457948, 0.489362, 0.542015, 0.684423, 1.063061",\ + "0.929777, 0.961193, 1.013852, 1.156254, 1.534888"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039039, 0.090322, 0.180169, 0.428938, 1.091513"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.437011, 0.503705, 0.620045, 0.936832, 1.786606",\ + "0.446608, 0.513302, 0.629642, 0.946429, 1.796203",\ + "0.517780, 0.584475, 0.700814, 1.017602, 1.867376",\ + "0.629396, 0.696091, 0.812430, 1.129218, 1.978992",\ + "1.131911, 1.198614, 1.314996, 1.631778, 2.481517"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067586, 0.184541, 0.382481, 0.936998, 2.417704"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[7]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[7]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.060518, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.315427, 0.346593, 0.399212, 0.541707, 0.920350",\ + "0.342146, 0.373312, 0.425930, 0.568426, 0.947068",\ + "0.410184, 0.441350, 0.493968, 0.636464, 1.015106",\ + "0.512927, 0.544093, 0.596711, 0.739207, 1.117850",\ + "0.999580, 1.030743, 1.083361, 1.225858, 1.604500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.060518, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180697, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180697, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180697, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180732, 0.429283, 1.092497",\ + "0.042004, 0.091469, 0.180867, 0.429340, 1.092504"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.051005, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.597332, 0.664558, 0.781177, 1.100940, 1.955915",\ + "0.618079, 0.685305, 0.801924, 1.121688, 1.976662",\ + "0.683404, 0.750630, 0.867249, 1.187012, 2.041987",\ + "0.797603, 0.864828, 0.981447, 1.301210, 2.156184",\ + "1.375793, 1.443018, 1.559637, 1.879400, 2.734374"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.051005, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950609, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073823, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073819, 0.189281, 0.392442, 0.950607, 2.441526",\ + "0.073817, 0.189281, 0.392442, 0.950607, 2.441526"); + } + + } /* end of arc obs_ctrl_o[7]_ast2padmux_o[7]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[7]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.049671, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.150722, 0.182137, 0.234789, 0.377197, 0.755836",\ + "0.171205, 0.202620, 0.255272, 0.397681, 0.776319",\ + "0.246518, 0.277932, 0.330585, 0.472993, 0.851631",\ + "0.352324, 0.383738, 0.436391, 0.578799, 0.957437",\ + "0.825559, 0.856975, 0.909634, 1.052036, 1.430670"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.049671, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039038, 0.090323, 0.180168, 0.428941, 1.091519"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040467, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.277343, 0.344312, 0.460804, 0.780477, 1.635605",\ + "0.293355, 0.360323, 0.476815, 0.796489, 1.651616",\ + "0.366113, 0.433085, 0.549579, 0.869253, 1.724376",\ + "0.487008, 0.554003, 0.670516, 0.990192, 1.845287",\ + "1.141953, 1.209132, 1.325766, 1.645481, 2.500414"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040467, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067601, 0.184550, 0.382483, 0.937044, 2.417691"); + } + + } /* end of arc obs_ctrl_o[7]_ast2padmux_o[7]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[8]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045711, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.690094, 0.756997, 0.873435, 1.193104, 2.048309",\ + "0.708444, 0.775347, 0.891784, 1.211453, 2.066659",\ + "0.778290, 0.845193, 0.961630, 1.281299, 2.136505",\ + "0.871001, 0.937904, 1.054342, 1.374010, 2.229216",\ + "1.316481, 1.383384, 1.499822, 1.819491, 2.674696"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045711, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044476, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.452197, 0.483629, 0.536337, 0.678690, 1.057287",\ + "0.469625, 0.501056, 0.553764, 0.696117, 1.074714",\ + "0.546991, 0.578423, 0.631131, 0.773484, 1.152081",\ + "0.655363, 0.686795, 0.739503, 0.881856, 1.260453",\ + "1.172095, 1.203526, 1.256235, 1.398588, 1.777184"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044476, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837"); + } + + } /* end of arc obs_ctrl_o[8]_ast2padmux_o[7]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[8]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.041900, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.682055, 0.748946, 0.865373, 1.185041, 2.040261",\ + "0.698671, 0.765561, 0.881989, 1.201657, 2.056877",\ + "0.770251, 0.837141, 0.953569, 1.273237, 2.128457",\ + "0.862962, 0.929853, 1.046280, 1.365948, 2.221168",\ + "1.308443, 1.375334, 1.491761, 1.811429, 2.666649"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.041900, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073030, 0.188914, 0.391814, 0.949025, 2.441330",\ + "0.073030, 0.188914, 0.391814, 0.949025, 2.441330",\ + "0.073030, 0.188914, 0.391814, 0.949025, 2.441330",\ + "0.073030, 0.188914, 0.391814, 0.949025, 2.441330",\ + "0.073030, 0.188914, 0.391814, 0.949025, 2.441330"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035639, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.393282, 0.424695, 0.477340, 0.619755, 0.998399",\ + "0.406628, 0.438041, 0.490686, 0.633102, 1.011745",\ + "0.488076, 0.519489, 0.572134, 0.714549, 1.093193",\ + "0.596558, 0.627970, 0.680616, 0.823031, 1.201674",\ + "1.114468, 1.145880, 1.198526, 1.340941, 1.719585"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035639, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039011, 0.090734, 0.180376, 0.429203, 1.091692",\ + "0.039011, 0.090734, 0.180376, 0.429203, 1.091692",\ + "0.039011, 0.090734, 0.180376, 0.429203, 1.091692",\ + "0.039011, 0.090734, 0.180376, 0.429203, 1.091692",\ + "0.039011, 0.090734, 0.180376, 0.429203, 1.091692"); + } + + } /* end of arc obs_ctrl_o[8]_ast2padmux_o[7]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[8]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045711, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.501059, 0.532491, 0.585199, 0.727552, 1.106149",\ + "0.519617, 0.551049, 0.603757, 0.746110, 1.124707",\ + "0.596986, 0.628417, 0.681126, 0.823478, 1.202075",\ + "0.726207, 0.757638, 0.810347, 0.952700, 1.331296",\ + "1.349983, 1.381414, 1.434123, 1.576475, 1.955072"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045711, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044476, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.672551, 0.739454, 0.855892, 1.175561, 2.030766",\ + "0.690451, 0.757354, 0.873791, 1.193460, 2.048666",\ + "0.751450, 0.818353, 0.934791, 1.254459, 2.109665",\ + "0.853899, 0.920802, 1.037239, 1.356908, 2.212114",\ + "1.570440, 1.637343, 1.753780, 2.073449, 2.928655"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044476, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340"); + } + + } /* end of arc obs_ctrl_o[8]_ast2padmux_o[7]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[8]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.041900, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.403368, 0.434780, 0.487426, 0.629841, 1.008485",\ + "0.420114, 0.451526, 0.504172, 0.646587, 1.025230",\ + "0.499560, 0.530972, 0.583618, 0.726033, 1.104676",\ + "0.629829, 0.661242, 0.713887, 0.856302, 1.234946",\ + "1.257639, 1.289051, 1.341697, 1.484112, 1.862756"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.041900, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039011, 0.090734, 0.180376, 0.429203, 1.091692",\ + "0.039011, 0.090734, 0.180376, 0.429203, 1.091692",\ + "0.039011, 0.090734, 0.180376, 0.429203, 1.091692",\ + "0.039011, 0.090734, 0.180376, 0.429203, 1.091692",\ + "0.039011, 0.090734, 0.180376, 0.429203, 1.091692"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035639, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.659894, 0.726785, 0.843212, 1.162880, 2.018100",\ + "0.674063, 0.740954, 0.857382, 1.177050, 2.032269",\ + "0.738792, 0.805683, 0.922111, 1.241779, 2.096998",\ + "0.841228, 0.908118, 1.024546, 1.344214, 2.199434",\ + "1.556835, 1.623726, 1.740153, 2.059821, 2.915041"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035639, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073030, 0.188914, 0.391814, 0.949025, 2.441330",\ + "0.073030, 0.188914, 0.391814, 0.949025, 2.441330",\ + "0.073030, 0.188914, 0.391814, 0.949025, 2.441330",\ + "0.073030, 0.188914, 0.391814, 0.949025, 2.441330",\ + "0.073030, 0.188914, 0.391814, 0.949025, 2.441330"); + } + + } /* end of arc obs_ctrl_o[8]_ast2padmux_o[7]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[9]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.046138, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.701899, 0.768802, 0.885240, 1.204909, 2.060114",\ + "0.720452, 0.787355, 0.903793, 1.223462, 2.078667",\ + "0.793150, 0.860053, 0.976490, 1.296159, 2.151365",\ + "0.888367, 0.955270, 1.071708, 1.391377, 2.246583",\ + "1.341174, 1.408077, 1.524515, 1.844184, 2.699389"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.046138, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044715, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.458590, 0.490021, 0.542729, 0.685082, 1.063679",\ + "0.476132, 0.507563, 0.560272, 0.702625, 1.081221",\ + "0.553461, 0.584892, 0.637601, 0.779954, 1.158551",\ + "0.662931, 0.694363, 0.747071, 0.889424, 1.268021",\ + "1.187512, 1.218943, 1.271652, 1.414004, 1.792601"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044715, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837"); + } + + } /* end of arc obs_ctrl_o[9]_ast2padmux_o[7]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[9]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.042344, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.693852, 0.760742, 0.877170, 1.196838, 2.052058",\ + "0.710673, 0.777564, 0.893991, 1.213659, 2.068879",\ + "0.785102, 0.851993, 0.968420, 1.288088, 2.143308",\ + "0.880320, 0.947210, 1.063638, 1.383306, 2.238526",\ + "1.333127, 1.400018, 1.516445, 1.836113, 2.691333"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.042344, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073030, 0.188914, 0.391814, 0.949025, 2.441330",\ + "0.073030, 0.188914, 0.391814, 0.949025, 2.441330",\ + "0.073030, 0.188914, 0.391814, 0.949025, 2.441330",\ + "0.073030, 0.188914, 0.391814, 0.949025, 2.441330",\ + "0.073030, 0.188914, 0.391814, 0.949025, 2.441330"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035869, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.399735, 0.431148, 0.483793, 0.626208, 1.004852",\ + "0.413192, 0.444604, 0.497250, 0.639665, 1.018308",\ + "0.494607, 0.526019, 0.578665, 0.721080, 1.099723",\ + "0.604175, 0.635587, 0.688233, 0.830648, 1.209292",\ + "1.129895, 1.161308, 1.213953, 1.356368, 1.735012"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035869, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039011, 0.090734, 0.180376, 0.429203, 1.091692",\ + "0.039011, 0.090734, 0.180376, 0.429203, 1.091692",\ + "0.039011, 0.090734, 0.180376, 0.429203, 1.091692",\ + "0.039011, 0.090734, 0.180376, 0.429203, 1.091692",\ + "0.039011, 0.090734, 0.180376, 0.429203, 1.091692"); + } + + } /* end of arc obs_ctrl_o[9]_ast2padmux_o[7]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[9]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.046138, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.496000, 0.527432, 0.580140, 0.722493, 1.101090",\ + "0.514620, 0.546052, 0.598760, 0.741113, 1.119710",\ + "0.591411, 0.622842, 0.675550, 0.817903, 1.196500",\ + "0.717296, 0.748727, 0.801436, 0.943789, 1.322386",\ + "1.315738, 1.347169, 1.399878, 1.542231, 1.920827"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.046138, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044715, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.666141, 0.733044, 0.849482, 1.169151, 2.024356",\ + "0.678814, 0.745717, 0.862155, 1.181824, 2.037030",\ + "0.733584, 0.800487, 0.916924, 1.236593, 2.091799",\ + "0.837061, 0.903964, 1.020401, 1.340070, 2.195276",\ + "1.538248, 1.605151, 1.721588, 2.041257, 2.896463"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044715, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340"); + } + + } /* end of arc obs_ctrl_o[9]_ast2padmux_o[7]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[9]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.042344, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.398263, 0.429676, 0.482321, 0.624736, 1.003380",\ + "0.415077, 0.446490, 0.499135, 0.641550, 1.020194",\ + "0.493940, 0.525353, 0.577998, 0.720414, 1.099057",\ + "0.620916, 0.652328, 0.704974, 0.847389, 1.226032",\ + "1.223414, 1.254826, 1.307472, 1.449887, 1.828531"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.042344, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039011, 0.090734, 0.180376, 0.429203, 1.091692",\ + "0.039011, 0.090734, 0.180376, 0.429203, 1.091692",\ + "0.039011, 0.090734, 0.180376, 0.429203, 1.091692",\ + "0.039011, 0.090734, 0.180376, 0.429203, 1.091692",\ + "0.039011, 0.090734, 0.180376, 0.429203, 1.091692"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035869, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.653476, 0.720367, 0.836794, 1.156462, 2.011682",\ + "0.663102, 0.729992, 0.846420, 1.166088, 2.021308",\ + "0.720914, 0.787805, 0.904232, 1.223900, 2.079120",\ + "0.824356, 0.891247, 1.007674, 1.327342, 2.182562",\ + "1.523659, 1.590550, 1.706977, 2.026645, 2.881865"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035869, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073030, 0.188914, 0.391814, 0.949025, 2.441330",\ + "0.073030, 0.188914, 0.391814, 0.949025, 2.441330",\ + "0.073030, 0.188914, 0.391814, 0.949025, 2.441330",\ + "0.073030, 0.188914, 0.391814, 0.949025, 2.441330",\ + "0.073030, 0.188914, 0.391814, 0.949025, 2.441330"); + } + + } /* end of arc obs_ctrl_o[9]_ast2padmux_o[7]_inv_min*/ + + timing () { + related_pin : "otm_obs_i[7]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.123879, 0.190820, 0.307288, 0.626960, 1.482121",\ + "0.210891, 0.277978, 0.394567, 0.714249, 1.569235",\ + "0.301781, 0.369068, 0.485667, 0.805496, 1.660526",\ + "0.453978, 0.523120, 0.640034, 0.960158, 1.815427",\ + "0.695902, 0.774527, 0.893732, 1.214148, 2.069560"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073065, 0.188997, 0.391936, 0.949305, 2.441374",\ + "0.073175, 0.189249, 0.392304, 0.950092, 2.441498",\ + "0.074330, 0.189249, 0.392418, 0.950747, 2.441498",\ + "0.079436, 0.191164, 0.392505, 0.951076, 2.441498",\ + "0.098084, 0.204137, 0.393542, 0.951076, 2.441498"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.114293, 0.145721, 0.198417, 0.340782, 0.719388",\ + "0.205394, 0.236828, 0.289545, 0.431889, 0.810480",\ + "0.309904, 0.342065, 0.394885, 0.537244, 0.915841",\ + "0.501618, 0.536979, 0.590065, 0.732680, 1.111452",\ + "0.825607, 0.870622, 0.930343, 1.075147, 1.454209"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039117, 0.090634, 0.180632, 0.429261, 1.091005",\ + "0.039161, 0.090634, 0.180739, 0.429285, 1.091005",\ + "0.041267, 0.091212, 0.180891, 0.429338, 1.091005",\ + "0.050293, 0.094364, 0.180891, 0.429357, 1.092061",\ + "0.068556, 0.114740, 0.192215, 0.429716, 1.093122"); + } + + } /* end of arc otm_obs_i[7]_ast2padmux_o[7]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "otm_obs_i[7]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.120559, 0.187489, 0.303948, 0.623619, 1.478793",\ + "0.205712, 0.272774, 0.389342, 0.709022, 1.564038",\ + "0.292652, 0.359907, 0.476516, 0.796311, 1.651312",\ + "0.437434, 0.505450, 0.622092, 0.942182, 1.797434",\ + "0.662107, 0.738115, 0.856688, 1.177023, 2.032395"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073057, 0.188977, 0.391908, 0.949245, 2.441364",\ + "0.073156, 0.189206, 0.392241, 0.949956, 2.441378",\ + "0.074065, 0.189247, 0.392382, 0.950255, 2.441378",\ + "0.077223, 0.189624, 0.392382, 0.950255, 2.441378",\ + "0.092938, 0.200557, 0.393255, 0.950255, 2.441468"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.094368, 0.125782, 0.178430, 0.320842, 0.699483",\ + "0.188259, 0.219683, 0.272369, 0.414744, 0.793358",\ + "0.291365, 0.323244, 0.376040, 0.518376, 0.896959",\ + "0.474009, 0.509208, 0.562280, 0.704883, 1.083646",\ + "0.777508, 0.822171, 0.881623, 1.026340, 1.405392"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039018, 0.090654, 0.180392, 0.429207, 1.090346",\ + "0.039096, 0.090654, 0.180581, 0.429249, 1.090346",\ + "0.040472, 0.090934, 0.180608, 0.429337, 1.090346",\ + "0.049836, 0.094205, 0.180608, 0.429356, 1.091981",\ + "0.067933, 0.113945, 0.191732, 0.429701, 1.093101"); + } + + } /* end of arc otm_obs_i[7]_ast2padmux_o[7]_una_min*/ + + timing () { + related_pin : "otp_obs_i[7]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.122660, 0.189370, 0.305783, 0.622560, 1.472274",\ + "0.209824, 0.276743, 0.394059, 0.710704, 1.559679",\ + "0.301920, 0.369023, 0.486415, 0.804486, 1.652417",\ + "0.455547, 0.524976, 0.642287, 0.962376, 1.809444",\ + "0.699992, 0.780922, 0.900058, 1.218756, 2.067549"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067561, 0.184527, 0.382478, 0.936925, 2.417724",\ + "0.067561, 0.184527, 0.382478, 0.936925, 2.418306",\ + "0.068683, 0.184527, 0.382544, 0.936925, 2.418306",\ + "0.075540, 0.185756, 0.383113, 0.940410, 2.418306",\ + "0.094401, 0.199857, 0.384817, 0.940410, 2.426093"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.114764, 0.145947, 0.198571, 0.341053, 0.719705",\ + "0.205629, 0.236785, 0.289401, 0.431904, 0.810542",\ + "0.310076, 0.342571, 0.395201, 0.537686, 0.916183",\ + "0.500896, 0.538360, 0.591093, 0.733386, 1.111456",\ + "0.820213, 0.870292, 0.933027, 1.077593, 1.455130"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040532, 0.090273, 0.180246, 0.428609, 1.092443",\ + "0.040870, 0.090273, 0.180281, 0.428609, 1.092443",\ + "0.045400, 0.092351, 0.180508, 0.428609, 1.092443",\ + "0.059558, 0.100025, 0.181106, 0.428872, 1.092443",\ + "0.087354, 0.133744, 0.204884, 0.431205, 1.092443"); + } + + } /* end of arc otp_obs_i[7]_ast2padmux_o[7]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "otp_obs_i[7]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.119334, 0.186028, 0.302368, 0.619155, 1.468929",\ + "0.204833, 0.271716, 0.388876, 0.705544, 1.554647",\ + "0.293319, 0.360401, 0.477846, 0.795625, 1.643707",\ + "0.440314, 0.508488, 0.625608, 0.945855, 1.792734",\ + "0.667813, 0.745674, 0.864272, 1.183300, 2.031636"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.183691, 0.382409, 0.935142, 2.413233",\ + "0.067620, 0.183691, 0.382409, 0.935142, 2.413233",\ + "0.068262, 0.183691, 0.382508, 0.936031, 2.413233",\ + "0.073482, 0.184226, 0.382946, 0.939859, 2.413233",\ + "0.089380, 0.196045, 0.384240, 0.939859, 2.423100"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.094521, 0.125776, 0.178422, 0.320849, 0.699535",\ + "0.188239, 0.219444, 0.272075, 0.414540, 0.793202",\ + "0.291550, 0.323577, 0.376197, 0.518700, 0.897237",\ + "0.473699, 0.510899, 0.563627, 0.705929, 1.084022",\ + "0.773733, 0.823401, 0.885774, 1.030256, 1.407808"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039633, 0.090291, 0.180152, 0.428296, 1.092222",\ + "0.040262, 0.090291, 0.180217, 0.428296, 1.092377",\ + "0.044064, 0.091627, 0.180452, 0.428296, 1.092425",\ + "0.058805, 0.099616, 0.181075, 0.428844, 1.092425",\ + "0.086478, 0.132591, 0.204027, 0.431125, 1.092425"); + } + + } /* end of arc otp_obs_i[7]_ast2padmux_o[7]_una_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380000.312500, 380000.312500, 380000.343750, 380000.406250, 380000.593750",\ + "380000.406250, 380000.406250, 380000.437500, 380000.500000, 380000.687500",\ + "380000.500000, 380000.500000, 380000.531250, 380000.593750, 380000.781250",\ + "380000.656250, 380000.656250, 380000.687500, 380000.750000, 380000.937500",\ + "380000.906250, 380000.906250, 380000.937500, 380001.000000, 380001.187500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380001.781250, 380001.843750, 380001.968750, 380002.281250, 380003.156250",\ + "380001.875000, 380001.937500, 380002.062500, 380002.375000, 380003.250000",\ + "380002.000000, 380002.062500, 380002.187500, 380002.500000, 380003.375000",\ + "380002.187500, 380002.250000, 380002.375000, 380002.687500, 380003.562500",\ + "380002.500000, 380002.562500, 380002.687500, 380003.000000, 380003.875000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526"); + } + + } /* end of arc padmux2ast_i[4]_ast2padmux_o[7]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380000.312500, 380000.312500, 380000.343750, 380000.406250, 380000.593750",\ + "380000.406250, 380000.406250, 380000.437500, 380000.500000, 380000.687500",\ + "380000.468750, 380000.468750, 380000.500000, 380000.562500, 380000.750000",\ + "380000.625000, 380000.625000, 380000.656250, 380000.718750, 380000.906250",\ + "380000.843750, 380000.843750, 380000.875000, 380000.937500, 380001.125000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380001.781250, 380001.812500, 380001.906250, 380002.187500, 380002.875000",\ + "380001.875000, 380001.906250, 380002.000000, 380002.281250, 380002.968750",\ + "380001.968750, 380002.000000, 380002.093750, 380002.375000, 380003.062500",\ + "380002.156250, 380002.187500, 380002.281250, 380002.562500, 380003.250000",\ + "380002.406250, 380002.437500, 380002.531250, 380002.812500, 380003.500000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169"); + } + + } /* end of arc padmux2ast_i[4]_ast2padmux_o[7]_inv_min*/ + +} /* end of pin ast2padmux_o[7] */ + +pin("ast2padmux_o[6]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.028584 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : ast2padmux_o[6]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380001.875000, 380001.937500, 380002.062500, 380002.375000, 380003.250000",\ + "380001.968750, 380002.031250, 380002.156250, 380002.468750, 380003.343750",\ + "380002.062500, 380002.125000, 380002.250000, 380002.562500, 380003.437500",\ + "380002.125000, 380002.187500, 380002.312500, 380002.625000, 380003.500000",\ + "380002.468750, 380002.531250, 380002.656250, 380002.968750, 380003.843750"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189354, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189354, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189365, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189385, 0.392560, 0.950608, 2.441526",\ + "0.073824, 0.189425, 0.393252, 0.950608, 2.441526"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380000.437500, 380000.437500, 380000.468750, 380000.531250, 380000.718750",\ + "380000.531250, 380000.531250, 380000.562500, 380000.625000, 380000.812500",\ + "380000.593750, 380000.593750, 380000.625000, 380000.687500, 380000.875000",\ + "380000.656250, 380000.656250, 380000.687500, 380000.750000, 380000.937500",\ + "380000.968750, 380000.968750, 380001.000000, 380001.062500, 380001.250000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497"); + } + + } /* end of arc clk_ast_tlul_i_ast2padmux_o[6]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.118063, 0.173160, 0.267375, 0.527316, 1.216798",\ + "0.205470, 0.260567, 0.354781, 0.614720, 1.304204",\ + "0.286205, 0.341346, 0.435579, 0.695608, 1.384949",\ + "0.343571, 0.398793, 0.493060, 0.753254, 1.442331",\ + "0.643636, 0.699058, 0.793671, 1.054205, 1.742813"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.055140, 0.149920, 0.315966, 0.770671, 1.992169",\ + "0.055140, 0.149920, 0.315966, 0.770671, 1.992169",\ + "0.055064, 0.149920, 0.315966, 0.770616, 1.992169",\ + "0.054924, 0.149920, 0.315966, 0.770514, 1.992169",\ + "0.054820, 0.149920, 0.315966, 0.770514, 1.988361"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.068977, 0.083624, 0.108789, 0.177707, 0.362145",\ + "0.157440, 0.172093, 0.197279, 0.266195, 0.450612",\ + "0.246166, 0.261189, 0.286407, 0.355291, 0.539679",\ + "0.308361, 0.324424, 0.349591, 0.418444, 0.602842",\ + "0.630702, 0.654723, 0.683267, 0.752219, 0.936438"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.015416, 0.041075, 0.085652, 0.207740, 0.535967",\ + "0.015763, 0.041089, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967"); + } + + } /* end of arc clk_ast_tlul_i_ast2padmux_o[6]_redg_min*/ + + timing () { + related_pin : "fla_obs_i[6]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.111862, 0.178517, 0.294685, 0.611498, 1.461412",\ + "0.196887, 0.263820, 0.381200, 0.697836, 1.546758",\ + "0.280874, 0.348002, 0.465333, 0.783744, 1.631498",\ + "0.419192, 0.490016, 0.607541, 0.927454, 1.774732",\ + "0.629434, 0.713469, 0.835221, 1.155234, 2.004311"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067759, 0.184639, 0.382501, 0.937507, 2.417566",\ + "0.067759, 0.184639, 0.382501, 0.937507, 2.418347",\ + "0.069174, 0.184639, 0.382586, 0.937507, 2.418347",\ + "0.077831, 0.187460, 0.383300, 0.940319, 2.418347",\ + "0.099054, 0.205738, 0.390315, 0.940320, 2.425200"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.103322, 0.134506, 0.187130, 0.329612, 0.708263",\ + "0.188196, 0.219801, 0.272413, 0.414932, 0.793505",\ + "0.281500, 0.317246, 0.369943, 0.512302, 0.890520",\ + "0.433568, 0.478875, 0.537406, 0.680993, 1.058708",\ + "0.668936, 0.733428, 0.809479, 0.962224, 1.340585"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040521, 0.090274, 0.180244, 0.428614, 1.092440",\ + "0.042863, 0.090977, 0.180401, 0.428614, 1.092696",\ + "0.054661, 0.097371, 0.180899, 0.428690, 1.092793",\ + "0.077190, 0.120374, 0.194930, 0.430280, 1.092793",\ + "0.118581, 0.174509, 0.240947, 0.445113, 1.092793"); + } + + } /* end of arc fla_obs_i[6]_ast2padmux_o[6]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "fla_obs_i[6]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.110629, 0.177262, 0.293339, 0.610165, 1.460154",\ + "0.194795, 0.261696, 0.378936, 0.695592, 1.544629",\ + "0.275980, 0.343081, 0.460479, 0.778514, 1.626463",\ + "0.408884, 0.478137, 0.595421, 0.915532, 1.762573",\ + "0.610985, 0.691263, 0.810230, 1.128954, 1.977655"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067834, 0.183634, 0.382402, 0.934951, 2.414331",\ + "0.067834, 0.183634, 0.382402, 0.934951, 2.414331",\ + "0.068631, 0.183634, 0.382540, 0.936478, 2.414331",\ + "0.075251, 0.185541, 0.383090, 0.939701, 2.414331",\ + "0.093347, 0.198994, 0.384563, 0.939701, 2.425563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.077370, 0.108647, 0.161299, 0.303710, 0.682406",\ + "0.166391, 0.197521, 0.250129, 0.392651, 0.771277",\ + "0.253394, 0.288299, 0.340979, 0.483371, 0.861661",\ + "0.395347, 0.439383, 0.496795, 0.640121, 1.017884",\ + "0.615736, 0.679130, 0.754042, 0.905113, 1.283136"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039363, 0.090228, 0.180124, 0.428312, 1.092155",\ + "0.041196, 0.090228, 0.180315, 0.428312, 1.092511",\ + "0.052267, 0.096073, 0.180798, 0.428601, 1.092511",\ + "0.074482, 0.116813, 0.192279, 0.430033, 1.092511",\ + "0.116096, 0.171326, 0.236992, 0.441817, 1.092511"); + } + + } /* end of arc fla_obs_i[6]_ast2padmux_o[6]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[10]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.059999, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.401444, 0.432876, 0.485584, 0.627937, 1.006534",\ + "0.426514, 0.457945, 0.510653, 0.653006, 1.031603",\ + "0.495788, 0.527220, 0.579928, 0.722281, 1.100878",\ + "0.620121, 0.651552, 0.704261, 0.846613, 1.225210",\ + "1.225494, 1.256926, 1.309634, 1.451987, 1.830584"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.059999, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.053775, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.665410, 0.732314, 0.848751, 1.168420, 2.023626",\ + "0.685984, 0.752887, 0.869324, 1.188993, 2.044199",\ + "0.744648, 0.811551, 0.927989, 1.247657, 2.102863",\ + "0.853883, 0.920786, 1.037224, 1.356892, 2.212098",\ + "1.621675, 1.688580, 1.805019, 2.124689, 2.979892"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.053775, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073039, 0.188935, 0.391846, 0.949113, 2.441342"); + } + + } /* end of arc obs_ctrl_o[10]_ast2padmux_o[6]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[10]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.056753, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.345553, 0.376966, 0.429613, 0.572027, 0.950669",\ + "0.369011, 0.400424, 0.453071, 0.595485, 0.974127",\ + "0.440108, 0.471521, 0.524168, 0.666582, 1.045224",\ + "0.565305, 0.596718, 0.649365, 0.791779, 1.170421",\ + "1.171631, 1.203044, 1.255693, 1.398105, 1.776746"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.056753, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039014, 0.090731, 0.180384, 0.429205, 1.091671",\ + "0.039014, 0.090731, 0.180384, 0.429205, 1.091671",\ + "0.039014, 0.090731, 0.180384, 0.429205, 1.091671",\ + "0.039014, 0.090731, 0.180384, 0.429205, 1.091671",\ + "0.039018, 0.090728, 0.180391, 0.429207, 1.091650"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044579, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.663782, 0.730673, 0.847101, 1.166770, 2.021989",\ + "0.679934, 0.746826, 0.863254, 1.182922, 2.038141",\ + "0.743020, 0.809911, 0.926339, 1.246007, 2.101227",\ + "0.852255, 0.919146, 1.035574, 1.355242, 2.210462",\ + "1.620317, 1.687211, 1.803640, 2.123309, 2.978526"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044579, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073029, 0.188911, 0.391812, 0.949040, 2.441330",\ + "0.073029, 0.188911, 0.391812, 0.949040, 2.441330",\ + "0.073029, 0.188911, 0.391812, 0.949040, 2.441330",\ + "0.073029, 0.188911, 0.391812, 0.949040, 2.441330",\ + "0.073030, 0.188915, 0.391817, 0.949051, 2.441332"); + } + + } /* end of arc obs_ctrl_o[10]_ast2padmux_o[6]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[11]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.034927, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.180024, 0.211452, 0.264149, 0.406513, 0.785119",\ + "0.193406, 0.224834, 0.277531, 0.419896, 0.798501",\ + "0.275919, 0.307349, 0.360051, 0.502410, 0.881011",\ + "0.400910, 0.432352, 0.485095, 0.627414, 1.005985",\ + "0.975060, 1.010086, 1.063144, 1.205732, 1.584486"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.034927, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039119, 0.090633, 0.180636, 0.429262, 1.090996",\ + "0.039119, 0.090633, 0.180636, 0.429262, 1.090996",\ + "0.039132, 0.090633, 0.180667, 0.429269, 1.090996",\ + "0.039215, 0.090633, 0.180868, 0.429314, 1.090996",\ + "0.049347, 0.094034, 0.180868, 0.429355, 1.091896"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037147, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.465437, 0.532662, 0.649281, 0.969044, 1.824018",\ + "0.477695, 0.544920, 0.661539, 0.981302, 1.836276",\ + "0.541916, 0.609140, 0.725760, 1.045521, 1.900495",\ + "0.644626, 0.711856, 0.828474, 1.148242, 2.003221",\ + "1.319722, 1.387140, 1.503696, 1.823662, 2.678811"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037147, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073817, 0.189281, 0.392442, 0.950607, 2.441526",\ + "0.073817, 0.189281, 0.392442, 0.950607, 2.441526",\ + "0.073817, 0.189282, 0.392442, 0.950607, 2.441526",\ + "0.073862, 0.189282, 0.392442, 0.950619, 2.441526",\ + "0.075399, 0.189282, 0.392442, 0.951039, 2.441526"); + } + + } /* end of arc obs_ctrl_o[11]_ast2padmux_o[6]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[11]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.030664, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.159139, 0.190553, 0.243202, 0.385613, 0.764254",\ + "0.170514, 0.201928, 0.254577, 0.396989, 0.775629",\ + "0.255576, 0.286993, 0.339652, 0.482053, 0.860686",\ + "0.379908, 0.411340, 0.464049, 0.606401, 0.984998",\ + "0.945167, 0.979651, 1.032663, 1.175209, 1.553933"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.030664, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039020, 0.090609, 0.180397, 0.429208, 1.090831",\ + "0.039020, 0.090609, 0.180397, 0.429208, 1.090831",\ + "0.039042, 0.090609, 0.180449, 0.429220, 1.090831",\ + "0.039144, 0.090609, 0.180675, 0.429276, 1.090831",\ + "0.047820, 0.093501, 0.180675, 0.429352, 1.091629"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.028580, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.461683, 0.528880, 0.645509, 0.965243, 1.820192",\ + "0.470327, 0.537524, 0.654153, 0.973887, 1.828836",\ + "0.538174, 0.605371, 0.721999, 1.041733, 1.896681",\ + "0.640782, 0.707985, 0.824611, 1.144351, 1.999304",\ + "1.312551, 1.379913, 1.496487, 1.816396, 2.671496"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.028580, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073594, 0.189124, 0.392388, 0.950544, 2.441454",\ + "0.073594, 0.189124, 0.392388, 0.950544, 2.441454",\ + "0.073594, 0.189124, 0.392388, 0.950544, 2.441454",\ + "0.073633, 0.189124, 0.392388, 0.950557, 2.441454",\ + "0.074954, 0.189124, 0.392388, 0.950917, 2.441454"); + } + + } /* end of arc obs_ctrl_o[11]_ast2padmux_o[6]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.500858, 0.568082, 0.684702, 1.004464, 1.859437",\ + "0.516623, 0.583848, 0.700467, 1.020230, 1.875203",\ + "0.590734, 0.657958, 0.774578, 1.094340, 1.949314",\ + "0.681946, 0.749171, 0.865790, 1.185553, 2.040526",\ + "1.108576, 1.175805, 1.292423, 1.612190, 2.467167"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073816, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073848, 0.189277, 0.392440, 0.950615, 2.441524"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.275118, 0.306284, 0.358903, 0.501398, 0.880041",\ + "0.290749, 0.321915, 0.374533, 0.517029, 0.895671",\ + "0.363703, 0.394869, 0.447488, 0.589983, 0.968626",\ + "0.474794, 0.505959, 0.558577, 0.701073, 1.079716",\ + "1.013269, 1.044421, 1.097036, 1.239541, 1.618177"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040759, 0.090626, 0.180653, 0.429266, 1.092499",\ + "0.040922, 0.090525, 0.180916, 0.429325, 1.092539"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[6]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.337608, 0.404302, 0.520641, 0.837429, 1.687203",\ + "0.349939, 0.416633, 0.532972, 0.849760, 1.699534",\ + "0.408752, 0.475446, 0.591785, 0.908573, 1.758347",\ + "0.496083, 0.562777, 0.679117, 0.995905, 1.845678",\ + "0.949078, 1.015776, 1.132136, 1.448920, 2.298678"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184560, 0.382485, 0.937098, 2.417677",\ + "0.067604, 0.184551, 0.382483, 0.937052, 2.417689"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.209985, 0.241400, 0.294052, 0.436461, 0.815099",\ + "0.221857, 0.253271, 0.305923, 0.448332, 0.826970",\ + "0.304351, 0.335766, 0.388417, 0.530826, 0.909465",\ + "0.409226, 0.440642, 0.493298, 0.635702, 1.014338",\ + "0.909442, 0.940877, 0.993596, 1.135938, 1.514527"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039034, 0.090327, 0.180161, 0.428971, 1.091542",\ + "0.039166, 0.090324, 0.180166, 0.428948, 1.090692"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[6]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.287803, 0.318969, 0.371587, 0.514083, 0.892726",\ + "0.303569, 0.334734, 0.387353, 0.529848, 0.908491",\ + "0.378810, 0.409975, 0.462594, 0.605089, 0.983732",\ + "0.473884, 0.505049, 0.557668, 0.700163, 1.078806",\ + "0.918190, 0.949342, 1.001956, 1.144462, 1.523098"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040759, 0.090626, 0.180653, 0.429266, 1.092499",\ + "0.040922, 0.090525, 0.180916, 0.429325, 1.092539"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.376755, 0.443500, 0.560063, 0.876818, 1.726409",\ + "0.392417, 0.459162, 0.575725, 0.892480, 1.742071",\ + "0.467424, 0.534169, 0.650732, 0.967487, 1.817078",\ + "0.562603, 0.629351, 0.745928, 1.062681, 1.912261",\ + "1.006927, 1.073706, 1.190415, 1.507149, 2.356620"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073816, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073848, 0.189277, 0.392440, 0.950615, 2.441524"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[6]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.264318, 0.295567, 0.348210, 0.490643, 0.869326",\ + "0.278489, 0.309737, 0.362381, 0.504814, 0.883496",\ + "0.355325, 0.386573, 0.439217, 0.581649, 0.960332",\ + "0.450369, 0.481617, 0.534260, 0.676693, 1.055376",\ + "0.893831, 0.925076, 0.977718, 1.120154, 1.498834"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039034, 0.090327, 0.180161, 0.428971, 1.091542",\ + "0.039166, 0.090324, 0.180166, 0.428948, 1.090692"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.373701, 0.440395, 0.556734, 0.873522, 1.723296",\ + "0.385572, 0.452266, 0.568605, 0.885393, 1.735167",\ + "0.464371, 0.531065, 0.647404, 0.964192, 1.813966",\ + "0.559385, 0.626079, 0.742420, 1.059207, 1.908981",\ + "1.002245, 1.068944, 1.185303, 1.502088, 2.351846"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184560, 0.382485, 0.937098, 2.417677",\ + "0.067604, 0.184551, 0.382483, 0.937052, 2.417689"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[6]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.337998, 0.404744, 0.521308, 0.838063, 1.687653",\ + "0.353177, 0.419923, 0.536487, 0.853242, 1.702832",\ + "0.412195, 0.478941, 0.595505, 0.912260, 1.761850",\ + "0.508449, 0.575199, 0.691783, 1.008535, 1.858109",\ + "0.997007, 1.063817, 1.180658, 1.497372, 2.346736"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073812, 0.189282, 0.392442, 0.950605, 2.441527",\ + "0.073812, 0.189282, 0.392442, 0.950605, 2.441527",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073887, 0.189271, 0.392439, 0.950626, 2.441522",\ + "0.075818, 0.189005, 0.392348, 0.951153, 2.441399"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.272032, 0.303198, 0.355817, 0.498312, 0.876955",\ + "0.289891, 0.321056, 0.373675, 0.516170, 0.894813",\ + "0.360955, 0.392121, 0.444739, 0.587235, 0.965878",\ + "0.471378, 0.502542, 0.555160, 0.697656, 1.076298",\ + "1.004117, 1.035227, 1.087829, 1.230366, 1.608983"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090633, 0.180635, 0.429262, 1.092497",\ + "0.040752, 0.090633, 0.180635, 0.429262, 1.092497",\ + "0.040752, 0.090633, 0.180666, 0.429269, 1.092497",\ + "0.040771, 0.090633, 0.180871, 0.429315, 1.092502",\ + "0.049622, 0.094130, 0.180871, 0.429356, 1.092666"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[6]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.329221, 0.395915, 0.512254, 0.829041, 1.678816",\ + "0.344592, 0.411286, 0.527624, 0.844412, 1.694187",\ + "0.406780, 0.473474, 0.589813, 0.906601, 1.756375",\ + "0.502234, 0.568932, 0.685288, 1.002073, 1.851833",\ + "0.957622, 1.024367, 1.140929, 1.457685, 2.307276"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067607, 0.184553, 0.382483, 0.937060, 2.417687",\ + "0.067439, 0.184458, 0.382464, 0.936568, 2.417820"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.231492, 0.262740, 0.315383, 0.457816, 0.836499",\ + "0.245351, 0.276600, 0.329243, 0.471676, 0.850359",\ + "0.320124, 0.351372, 0.404016, 0.546449, 0.925131",\ + "0.430166, 0.461410, 0.514053, 0.656489, 1.035169",\ + "0.955028, 0.986237, 1.038869, 1.181331, 1.559995"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039018, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039018, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039041, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039146, 0.090294, 0.180167, 0.428752, 1.090822",\ + "0.040211, 0.090294, 0.180212, 0.428752, 1.091676"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[6]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.176901, 0.208329, 0.261026, 0.403390, 0.781996",\ + "0.196158, 0.227585, 0.280282, 0.422647, 0.801252",\ + "0.273304, 0.304734, 0.357436, 0.499795, 0.878396",\ + "0.397207, 0.428649, 0.481392, 0.623711, 1.002282",\ + "0.961790, 0.996912, 1.049978, 1.192575, 1.571334"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090633, 0.180635, 0.429262, 1.092497",\ + "0.040752, 0.090633, 0.180635, 0.429262, 1.092497",\ + "0.040752, 0.090633, 0.180666, 0.429269, 1.092497",\ + "0.040771, 0.090633, 0.180871, 0.429315, 1.092502",\ + "0.049622, 0.094130, 0.180871, 0.429356, 1.092666"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.455825, 0.523049, 0.639668, 0.959430, 1.814404",\ + "0.468963, 0.536187, 0.652807, 0.972569, 1.827542",\ + "0.531289, 0.598514, 0.715133, 1.034896, 1.889869",\ + "0.640154, 0.707387, 0.824004, 1.143775, 1.998757",\ + "1.332501, 1.399969, 1.516508, 1.836528, 2.691724"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073812, 0.189282, 0.392442, 0.950605, 2.441527",\ + "0.073812, 0.189282, 0.392442, 0.950605, 2.441527",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073887, 0.189271, 0.392439, 0.950626, 2.441522",\ + "0.075818, 0.189005, 0.392348, 0.951153, 2.441399"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[6]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.155833, 0.187247, 0.239896, 0.382308, 0.760949",\ + "0.173482, 0.204896, 0.257545, 0.399957, 0.778598",\ + "0.252964, 0.284381, 0.337040, 0.479441, 0.858074",\ + "0.376196, 0.407628, 0.460337, 0.602689, 0.981285",\ + "0.931678, 0.966257, 1.019278, 1.161831, 1.540560"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039018, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039018, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039041, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039146, 0.090294, 0.180167, 0.428752, 1.090822",\ + "0.040211, 0.090294, 0.180212, 0.428752, 1.091676"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.452081, 0.519278, 0.635907, 0.955640, 1.810589",\ + "0.461862, 0.529059, 0.645688, 0.965421, 1.820370",\ + "0.527542, 0.594739, 0.711368, 1.031102, 1.886050",\ + "0.636262, 0.703467, 0.820093, 1.139835, 1.994791",\ + "1.324350, 1.391756, 1.508316, 1.828270, 2.683409"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067607, 0.184553, 0.382483, 0.937060, 2.417687",\ + "0.067439, 0.184458, 0.382464, 0.936568, 2.417820"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[6]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.325984, 0.393209, 0.509828, 0.829592, 1.684567",\ + "0.341732, 0.408957, 0.525576, 0.845340, 1.700314",\ + "0.405621, 0.472847, 0.589466, 0.909229, 1.764204",\ + "0.483984, 0.551208, 0.667827, 0.987590, 1.842564",\ + "0.876566, 0.943791, 1.060410, 1.380173, 2.235147"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189281, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189281, 0.392442, 0.950608, 2.441526"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.207560, 0.238992, 0.291700, 0.434053, 0.812650",\ + "0.223441, 0.254873, 0.307582, 0.449934, 0.828531",\ + "0.292964, 0.324396, 0.377105, 0.519457, 0.898054",\ + "0.382304, 0.413736, 0.466444, 0.608797, 0.987394",\ + "0.808201, 0.839636, 0.892354, 1.034697, 1.413287"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180696, 0.429275, 1.092497",\ + "0.040785, 0.090610, 0.180744, 0.429286, 1.092505"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[6]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.298728, 0.365697, 0.482189, 0.801862, 1.656989",\ + "0.312838, 0.379807, 0.496299, 0.815972, 1.671100",\ + "0.378416, 0.445385, 0.561877, 0.881551, 1.736677",\ + "0.456978, 0.523948, 0.640441, 0.960115, 1.815240",\ + "0.852482, 0.919491, 1.036016, 1.355692, 2.210772"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067586, 0.184541, 0.382481, 0.936998, 2.417704"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.185526, 0.216941, 0.269593, 0.412001, 0.790640",\ + "0.197528, 0.228943, 0.281595, 0.424004, 0.802642",\ + "0.270950, 0.302365, 0.355017, 0.497425, 0.876064",\ + "0.360375, 0.391790, 0.444442, 0.586850, 0.965489",\ + "0.786063, 0.817479, 0.870138, 1.012540, 1.391174"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039039, 0.090322, 0.180169, 0.428938, 1.091513"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[6]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.314064, 0.345229, 0.397848, 0.540343, 0.918986",\ + "0.329859, 0.361025, 0.413644, 0.556139, 0.934782",\ + "0.407724, 0.438890, 0.491508, 0.634004, 1.012646",\ + "0.508778, 0.539944, 0.592562, 0.735058, 1.113701",\ + "0.984655, 1.015818, 1.068436, 1.210933, 1.589574"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180696, 0.429275, 1.092497",\ + "0.040785, 0.090610, 0.180744, 0.429286, 1.092505"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.596327, 0.663552, 0.780171, 1.099935, 1.954909",\ + "0.609131, 0.676356, 0.792975, 1.112739, 1.967713",\ + "0.677113, 0.744339, 0.860958, 1.180721, 2.035696",\ + "0.788810, 0.856034, 0.972654, 1.292416, 2.147390",\ + "1.273667, 1.340892, 1.457511, 1.777274, 2.632248"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189281, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189281, 0.392442, 0.950608, 2.441526"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[6]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.262848, 0.294262, 0.346915, 0.489323, 0.867962",\ + "0.276998, 0.308413, 0.361065, 0.503474, 0.882112",\ + "0.356726, 0.388141, 0.440793, 0.583202, 0.961840",\ + "0.457948, 0.489362, 0.542015, 0.684423, 1.063061",\ + "0.929777, 0.961193, 1.013852, 1.156254, 1.534888"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039039, 0.090322, 0.180169, 0.428938, 1.091513"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.437011, 0.503705, 0.620045, 0.936832, 1.786606",\ + "0.446608, 0.513302, 0.629642, 0.946429, 1.796203",\ + "0.517780, 0.584475, 0.700814, 1.017602, 1.867376",\ + "0.629396, 0.696091, 0.812430, 1.129218, 1.978992",\ + "1.131911, 1.198614, 1.314996, 1.631778, 2.481517"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067586, 0.184541, 0.382481, 0.936998, 2.417704"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[6]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[7]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.060518, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.315427, 0.346593, 0.399212, 0.541707, 0.920350",\ + "0.342146, 0.373312, 0.425930, 0.568426, 0.947068",\ + "0.410184, 0.441350, 0.493968, 0.636464, 1.015106",\ + "0.512927, 0.544093, 0.596711, 0.739207, 1.117850",\ + "0.999580, 1.030743, 1.083361, 1.225858, 1.604500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.060518, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180697, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180697, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180697, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180732, 0.429283, 1.092497",\ + "0.042004, 0.091469, 0.180867, 0.429340, 1.092504"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.051005, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.597332, 0.664558, 0.781177, 1.100940, 1.955915",\ + "0.618079, 0.685305, 0.801924, 1.121688, 1.976662",\ + "0.683404, 0.750630, 0.867249, 1.187012, 2.041987",\ + "0.797603, 0.864828, 0.981447, 1.301210, 2.156184",\ + "1.375793, 1.443018, 1.559637, 1.879400, 2.734374"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.051005, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950609, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073823, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073819, 0.189281, 0.392442, 0.950607, 2.441526",\ + "0.073817, 0.189281, 0.392442, 0.950607, 2.441526"); + } + + } /* end of arc obs_ctrl_o[7]_ast2padmux_o[6]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[7]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.049671, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.150722, 0.182137, 0.234789, 0.377197, 0.755836",\ + "0.171205, 0.202620, 0.255272, 0.397681, 0.776319",\ + "0.246518, 0.277932, 0.330585, 0.472993, 0.851631",\ + "0.352324, 0.383738, 0.436391, 0.578799, 0.957437",\ + "0.825559, 0.856975, 0.909634, 1.052036, 1.430670"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.049671, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039038, 0.090323, 0.180168, 0.428941, 1.091519"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040467, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.277343, 0.344312, 0.460804, 0.780477, 1.635605",\ + "0.293355, 0.360323, 0.476815, 0.796489, 1.651616",\ + "0.366113, 0.433085, 0.549579, 0.869253, 1.724376",\ + "0.487008, 0.554003, 0.670516, 0.990192, 1.845287",\ + "1.141953, 1.209132, 1.325766, 1.645481, 2.500414"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040467, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067601, 0.184550, 0.382483, 0.937044, 2.417691"); + } + + } /* end of arc obs_ctrl_o[7]_ast2padmux_o[6]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[8]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045711, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.690094, 0.756997, 0.873435, 1.193104, 2.048309",\ + "0.708444, 0.775347, 0.891784, 1.211453, 2.066659",\ + "0.778290, 0.845193, 0.961630, 1.281299, 2.136505",\ + "0.871001, 0.937904, 1.054342, 1.374010, 2.229216",\ + "1.316481, 1.383384, 1.499822, 1.819491, 2.674696"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045711, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044476, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.452134, 0.483566, 0.536274, 0.678627, 1.057224",\ + "0.469561, 0.500993, 0.553701, 0.696054, 1.074651",\ + "0.546928, 0.578360, 0.631068, 0.773421, 1.152018",\ + "0.655300, 0.686732, 0.739440, 0.881793, 1.260390",\ + "1.172032, 1.203463, 1.256172, 1.398524, 1.777121"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044476, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837"); + } + + } /* end of arc obs_ctrl_o[8]_ast2padmux_o[6]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[8]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.041900, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.688464, 0.755356, 0.871784, 1.191452, 2.046671",\ + "0.705080, 0.771971, 0.888399, 1.208067, 2.063287",\ + "0.776660, 0.843551, 0.959979, 1.279647, 2.134867",\ + "0.869371, 0.936263, 1.052691, 1.372359, 2.227578",\ + "1.314852, 1.381744, 1.498172, 1.817840, 2.673059"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.041900, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073029, 0.188911, 0.391812, 0.949040, 2.441330",\ + "0.073029, 0.188911, 0.391812, 0.949040, 2.441330",\ + "0.073029, 0.188911, 0.391812, 0.949040, 2.441330",\ + "0.073029, 0.188911, 0.391812, 0.949040, 2.441330",\ + "0.073029, 0.188911, 0.391812, 0.949040, 2.441330"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035639, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.396265, 0.427678, 0.480325, 0.622739, 1.001381",\ + "0.409612, 0.441025, 0.493672, 0.636085, 1.014728",\ + "0.491059, 0.522472, 0.575119, 0.717533, 1.096175",\ + "0.599541, 0.630954, 0.683601, 0.826015, 1.204657",\ + "1.117451, 1.148864, 1.201511, 1.343925, 1.722567"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035639, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039014, 0.090731, 0.180384, 0.429205, 1.091671",\ + "0.039014, 0.090731, 0.180384, 0.429205, 1.091671",\ + "0.039014, 0.090731, 0.180384, 0.429205, 1.091671",\ + "0.039014, 0.090731, 0.180384, 0.429205, 1.091671",\ + "0.039014, 0.090731, 0.180384, 0.429205, 1.091671"); + } + + } /* end of arc obs_ctrl_o[8]_ast2padmux_o[6]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[9]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.046138, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.701899, 0.768802, 0.885240, 1.204909, 2.060114",\ + "0.720452, 0.787355, 0.903793, 1.223462, 2.078667",\ + "0.793150, 0.860053, 0.976490, 1.296159, 2.151365",\ + "0.888367, 0.955270, 1.071708, 1.391377, 2.246583",\ + "1.341174, 1.408077, 1.524515, 1.844184, 2.699389"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.046138, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044715, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.458526, 0.489958, 0.542666, 0.685019, 1.063616",\ + "0.476069, 0.507500, 0.560208, 0.702561, 1.081158",\ + "0.553398, 0.584829, 0.637537, 0.779890, 1.158487",\ + "0.662868, 0.694299, 0.747008, 0.889361, 1.267957",\ + "1.187448, 1.218880, 1.271588, 1.413941, 1.792538"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044715, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837"); + } + + } /* end of arc obs_ctrl_o[9]_ast2padmux_o[6]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[9]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.042344, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.700268, 0.767160, 0.883588, 1.203256, 2.058475",\ + "0.717089, 0.783981, 0.900409, 1.220077, 2.075296",\ + "0.791519, 0.858410, 0.974838, 1.294506, 2.149726",\ + "0.886736, 0.953628, 1.070056, 1.389724, 2.244943",\ + "1.339543, 1.406435, 1.522863, 1.842531, 2.697751"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.042344, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073029, 0.188911, 0.391812, 0.949040, 2.441330",\ + "0.073029, 0.188911, 0.391812, 0.949040, 2.441330",\ + "0.073029, 0.188911, 0.391812, 0.949040, 2.441330",\ + "0.073029, 0.188911, 0.391812, 0.949040, 2.441330",\ + "0.073029, 0.188911, 0.391812, 0.949040, 2.441330"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035869, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.402716, 0.434129, 0.486776, 0.629190, 1.007832",\ + "0.416173, 0.447586, 0.500233, 0.642646, 1.021289",\ + "0.497588, 0.529001, 0.581648, 0.724061, 1.102704",\ + "0.607156, 0.638569, 0.691216, 0.833630, 1.212272",\ + "1.132876, 1.164289, 1.216936, 1.359350, 1.737992"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035869, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039014, 0.090731, 0.180384, 0.429205, 1.091671",\ + "0.039014, 0.090731, 0.180384, 0.429205, 1.091671",\ + "0.039014, 0.090731, 0.180384, 0.429205, 1.091671",\ + "0.039014, 0.090731, 0.180384, 0.429205, 1.091671",\ + "0.039014, 0.090731, 0.180384, 0.429205, 1.091671"); + } + + } /* end of arc obs_ctrl_o[9]_ast2padmux_o[6]_una_min*/ + + timing () { + related_pin : "otm_obs_i[6]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.123879, 0.190820, 0.307288, 0.626960, 1.482121",\ + "0.210891, 0.277978, 0.394567, 0.714249, 1.569235",\ + "0.301781, 0.369068, 0.485667, 0.805496, 1.660526",\ + "0.453978, 0.523120, 0.640034, 0.960158, 1.815427",\ + "0.695902, 0.774527, 0.893732, 1.214148, 2.069560"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073065, 0.188997, 0.391936, 0.949305, 2.441374",\ + "0.073175, 0.189249, 0.392304, 0.950092, 2.441498",\ + "0.074330, 0.189249, 0.392418, 0.950747, 2.441498",\ + "0.079436, 0.191164, 0.392505, 0.951076, 2.441498",\ + "0.098084, 0.204137, 0.393542, 0.951076, 2.441498"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.114293, 0.145721, 0.198417, 0.340782, 0.719388",\ + "0.205394, 0.236828, 0.289545, 0.431889, 0.810480",\ + "0.309904, 0.342065, 0.394885, 0.537244, 0.915841",\ + "0.501618, 0.536979, 0.590065, 0.732680, 1.111452",\ + "0.825607, 0.870622, 0.930343, 1.075147, 1.454209"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039117, 0.090634, 0.180632, 0.429261, 1.091005",\ + "0.039161, 0.090634, 0.180739, 0.429285, 1.091005",\ + "0.041267, 0.091212, 0.180891, 0.429338, 1.091005",\ + "0.050293, 0.094364, 0.180891, 0.429357, 1.092061",\ + "0.068556, 0.114740, 0.192215, 0.429716, 1.093122"); + } + + } /* end of arc otm_obs_i[6]_ast2padmux_o[6]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "otm_obs_i[6]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.120559, 0.187489, 0.303948, 0.623619, 1.478793",\ + "0.205712, 0.272774, 0.389342, 0.709022, 1.564038",\ + "0.292652, 0.359907, 0.476516, 0.796311, 1.651312",\ + "0.437434, 0.505450, 0.622092, 0.942182, 1.797434",\ + "0.662107, 0.738115, 0.856688, 1.177023, 2.032395"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073057, 0.188977, 0.391908, 0.949245, 2.441364",\ + "0.073156, 0.189206, 0.392241, 0.949956, 2.441378",\ + "0.074065, 0.189247, 0.392382, 0.950255, 2.441378",\ + "0.077223, 0.189624, 0.392382, 0.950255, 2.441378",\ + "0.092938, 0.200557, 0.393255, 0.950255, 2.441468"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.094368, 0.125782, 0.178430, 0.320842, 0.699483",\ + "0.188259, 0.219683, 0.272369, 0.414744, 0.793358",\ + "0.291365, 0.323244, 0.376040, 0.518376, 0.896959",\ + "0.474009, 0.509208, 0.562280, 0.704883, 1.083646",\ + "0.777508, 0.822171, 0.881623, 1.026340, 1.405392"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039018, 0.090654, 0.180392, 0.429207, 1.090346",\ + "0.039096, 0.090654, 0.180581, 0.429249, 1.090346",\ + "0.040472, 0.090934, 0.180608, 0.429337, 1.090346",\ + "0.049836, 0.094205, 0.180608, 0.429356, 1.091981",\ + "0.067933, 0.113945, 0.191732, 0.429701, 1.093101"); + } + + } /* end of arc otm_obs_i[6]_ast2padmux_o[6]_una_min*/ + + timing () { + related_pin : "otp_obs_i[6]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.122660, 0.189370, 0.305783, 0.622560, 1.472274",\ + "0.209824, 0.276743, 0.394059, 0.710704, 1.559679",\ + "0.301920, 0.369023, 0.486415, 0.804486, 1.652417",\ + "0.455547, 0.524976, 0.642287, 0.962376, 1.809444",\ + "0.699992, 0.780922, 0.900058, 1.218756, 2.067549"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067561, 0.184527, 0.382478, 0.936925, 2.417724",\ + "0.067561, 0.184527, 0.382478, 0.936925, 2.418306",\ + "0.068683, 0.184527, 0.382544, 0.936925, 2.418306",\ + "0.075540, 0.185756, 0.383113, 0.940410, 2.418306",\ + "0.094401, 0.199857, 0.384817, 0.940410, 2.426093"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.114764, 0.145947, 0.198571, 0.341053, 0.719705",\ + "0.205629, 0.236785, 0.289401, 0.431904, 0.810542",\ + "0.310076, 0.342571, 0.395201, 0.537686, 0.916183",\ + "0.500896, 0.538360, 0.591093, 0.733386, 1.111456",\ + "0.820213, 0.870292, 0.933027, 1.077593, 1.455130"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040532, 0.090273, 0.180246, 0.428609, 1.092443",\ + "0.040870, 0.090273, 0.180281, 0.428609, 1.092443",\ + "0.045400, 0.092351, 0.180508, 0.428609, 1.092443",\ + "0.059558, 0.100025, 0.181106, 0.428872, 1.092443",\ + "0.087354, 0.133744, 0.204884, 0.431205, 1.092443"); + } + + } /* end of arc otp_obs_i[6]_ast2padmux_o[6]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "otp_obs_i[6]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.119334, 0.186028, 0.302368, 0.619155, 1.468929",\ + "0.204833, 0.271716, 0.388876, 0.705544, 1.554647",\ + "0.293319, 0.360401, 0.477846, 0.795625, 1.643707",\ + "0.440314, 0.508488, 0.625608, 0.945855, 1.792734",\ + "0.667813, 0.745674, 0.864272, 1.183300, 2.031636"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.183691, 0.382409, 0.935142, 2.413233",\ + "0.067620, 0.183691, 0.382409, 0.935142, 2.413233",\ + "0.068262, 0.183691, 0.382508, 0.936031, 2.413233",\ + "0.073482, 0.184226, 0.382946, 0.939859, 2.413233",\ + "0.089380, 0.196045, 0.384240, 0.939859, 2.423100"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.094521, 0.125776, 0.178422, 0.320849, 0.699535",\ + "0.188239, 0.219444, 0.272075, 0.414540, 0.793202",\ + "0.291550, 0.323577, 0.376197, 0.518700, 0.897237",\ + "0.473699, 0.510899, 0.563627, 0.705929, 1.084022",\ + "0.773733, 0.823401, 0.885774, 1.030256, 1.407808"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039633, 0.090291, 0.180152, 0.428296, 1.092222",\ + "0.040262, 0.090291, 0.180217, 0.428296, 1.092377",\ + "0.044064, 0.091627, 0.180452, 0.428296, 1.092425",\ + "0.058805, 0.099616, 0.181075, 0.428844, 1.092425",\ + "0.086478, 0.132591, 0.204027, 0.431125, 1.092425"); + } + + } /* end of arc otp_obs_i[6]_ast2padmux_o[6]_una_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380000.312500, 380000.312500, 380000.343750, 380000.406250, 380000.593750",\ + "380000.406250, 380000.406250, 380000.437500, 380000.500000, 380000.687500",\ + "380000.500000, 380000.500000, 380000.531250, 380000.593750, 380000.781250",\ + "380000.656250, 380000.656250, 380000.687500, 380000.750000, 380000.937500",\ + "380000.906250, 380000.906250, 380000.937500, 380001.000000, 380001.187500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380001.781250, 380001.843750, 380001.968750, 380002.281250, 380003.156250",\ + "380001.875000, 380001.937500, 380002.062500, 380002.375000, 380003.250000",\ + "380002.000000, 380002.062500, 380002.187500, 380002.500000, 380003.375000",\ + "380002.187500, 380002.250000, 380002.375000, 380002.687500, 380003.562500",\ + "380002.500000, 380002.562500, 380002.687500, 380003.000000, 380003.875000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526"); + } + + } /* end of arc padmux2ast_i[4]_ast2padmux_o[6]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380000.312500, 380000.312500, 380000.343750, 380000.406250, 380000.593750",\ + "380000.406250, 380000.406250, 380000.437500, 380000.500000, 380000.687500",\ + "380000.468750, 380000.468750, 380000.500000, 380000.562500, 380000.750000",\ + "380000.625000, 380000.625000, 380000.656250, 380000.718750, 380000.906250",\ + "380000.843750, 380000.843750, 380000.875000, 380000.937500, 380001.125000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380001.781250, 380001.812500, 380001.906250, 380002.187500, 380002.875000",\ + "380001.875000, 380001.906250, 380002.000000, 380002.281250, 380002.968750",\ + "380001.968750, 380002.000000, 380002.093750, 380002.375000, 380003.062500",\ + "380002.156250, 380002.187500, 380002.281250, 380002.562500, 380003.250000",\ + "380002.406250, 380002.437500, 380002.531250, 380002.812500, 380003.500000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169"); + } + + } /* end of arc padmux2ast_i[4]_ast2padmux_o[6]_inv_min*/ + +} /* end of pin ast2padmux_o[6] */ + +pin("ast2padmux_o[5]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.028584 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : ast2padmux_o[5]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380001.875000, 380001.937500, 380002.062500, 380002.375000, 380003.250000",\ + "380001.968750, 380002.031250, 380002.156250, 380002.468750, 380003.343750",\ + "380002.062500, 380002.125000, 380002.250000, 380002.562500, 380003.437500",\ + "380002.125000, 380002.187500, 380002.312500, 380002.625000, 380003.500000",\ + "380002.468750, 380002.531250, 380002.656250, 380002.968750, 380003.843750"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189354, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189354, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189365, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189385, 0.392560, 0.950608, 2.441526",\ + "0.073824, 0.189425, 0.393252, 0.950608, 2.441526"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380000.437500, 380000.437500, 380000.468750, 380000.531250, 380000.718750",\ + "380000.531250, 380000.531250, 380000.562500, 380000.625000, 380000.812500",\ + "380000.593750, 380000.593750, 380000.625000, 380000.687500, 380000.875000",\ + "380000.656250, 380000.656250, 380000.687500, 380000.750000, 380000.937500",\ + "380000.968750, 380000.968750, 380001.000000, 380001.062500, 380001.250000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497"); + } + + } /* end of arc clk_ast_tlul_i_ast2padmux_o[5]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.118063, 0.173160, 0.267375, 0.527316, 1.216798",\ + "0.205470, 0.260567, 0.354781, 0.614720, 1.304204",\ + "0.286205, 0.341346, 0.435579, 0.695608, 1.384949",\ + "0.343571, 0.398793, 0.493060, 0.753254, 1.442331",\ + "0.643636, 0.699058, 0.793671, 1.054205, 1.742813"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.055140, 0.149920, 0.315966, 0.770671, 1.992169",\ + "0.055140, 0.149920, 0.315966, 0.770671, 1.992169",\ + "0.055064, 0.149920, 0.315966, 0.770616, 1.992169",\ + "0.054924, 0.149920, 0.315966, 0.770514, 1.992169",\ + "0.054820, 0.149920, 0.315966, 0.770514, 1.988361"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.068977, 0.083624, 0.108789, 0.177707, 0.362145",\ + "0.157440, 0.172093, 0.197279, 0.266195, 0.450612",\ + "0.246166, 0.261189, 0.286407, 0.355291, 0.539679",\ + "0.308361, 0.324424, 0.349591, 0.418444, 0.602842",\ + "0.630702, 0.654723, 0.683267, 0.752219, 0.936438"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.015416, 0.041075, 0.085652, 0.207740, 0.535967",\ + "0.015763, 0.041089, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967"); + } + + } /* end of arc clk_ast_tlul_i_ast2padmux_o[5]_redg_min*/ + + timing () { + related_pin : "fla_obs_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.111862, 0.178517, 0.294685, 0.611498, 1.461412",\ + "0.196887, 0.263820, 0.381200, 0.697836, 1.546758",\ + "0.280874, 0.348002, 0.465333, 0.783744, 1.631498",\ + "0.419192, 0.490016, 0.607541, 0.927454, 1.774732",\ + "0.629434, 0.713469, 0.835221, 1.155234, 2.004311"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067759, 0.184639, 0.382501, 0.937507, 2.417566",\ + "0.067759, 0.184639, 0.382501, 0.937507, 2.418347",\ + "0.069174, 0.184639, 0.382586, 0.937507, 2.418347",\ + "0.077831, 0.187460, 0.383300, 0.940319, 2.418347",\ + "0.099054, 0.205738, 0.390315, 0.940320, 2.425200"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.103322, 0.134506, 0.187130, 0.329612, 0.708263",\ + "0.188196, 0.219801, 0.272413, 0.414932, 0.793505",\ + "0.281500, 0.317246, 0.369943, 0.512302, 0.890520",\ + "0.433568, 0.478875, 0.537406, 0.680993, 1.058708",\ + "0.668936, 0.733428, 0.809479, 0.962224, 1.340585"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040521, 0.090274, 0.180244, 0.428614, 1.092440",\ + "0.042863, 0.090977, 0.180401, 0.428614, 1.092696",\ + "0.054661, 0.097371, 0.180899, 0.428690, 1.092793",\ + "0.077190, 0.120374, 0.194930, 0.430280, 1.092793",\ + "0.118581, 0.174509, 0.240947, 0.445113, 1.092793"); + } + + } /* end of arc fla_obs_i[5]_ast2padmux_o[5]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "fla_obs_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.110629, 0.177262, 0.293339, 0.610165, 1.460154",\ + "0.194795, 0.261696, 0.378936, 0.695592, 1.544629",\ + "0.275980, 0.343081, 0.460479, 0.778514, 1.626463",\ + "0.408884, 0.478137, 0.595421, 0.915532, 1.762573",\ + "0.610985, 0.691263, 0.810230, 1.128954, 1.977655"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067834, 0.183634, 0.382402, 0.934951, 2.414331",\ + "0.067834, 0.183634, 0.382402, 0.934951, 2.414331",\ + "0.068631, 0.183634, 0.382540, 0.936478, 2.414331",\ + "0.075251, 0.185541, 0.383090, 0.939701, 2.414331",\ + "0.093347, 0.198994, 0.384563, 0.939701, 2.425563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.077370, 0.108647, 0.161299, 0.303710, 0.682406",\ + "0.166391, 0.197521, 0.250129, 0.392651, 0.771277",\ + "0.253394, 0.288299, 0.340979, 0.483371, 0.861661",\ + "0.395347, 0.439383, 0.496795, 0.640121, 1.017884",\ + "0.615736, 0.679130, 0.754042, 0.905113, 1.283136"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039363, 0.090228, 0.180124, 0.428312, 1.092155",\ + "0.041196, 0.090228, 0.180315, 0.428312, 1.092511",\ + "0.052267, 0.096073, 0.180798, 0.428601, 1.092511",\ + "0.074482, 0.116813, 0.192279, 0.430033, 1.092511",\ + "0.116096, 0.171326, 0.236992, 0.441817, 1.092511"); + } + + } /* end of arc fla_obs_i[5]_ast2padmux_o[5]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[10]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.059999, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.401444, 0.432876, 0.485584, 0.627937, 1.006534",\ + "0.426514, 0.457945, 0.510653, 0.653006, 1.031603",\ + "0.495788, 0.527220, 0.579928, 0.722281, 1.100878",\ + "0.620121, 0.651552, 0.704261, 0.846613, 1.225210",\ + "1.225494, 1.256926, 1.309634, 1.451987, 1.830584"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.059999, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.053775, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.665410, 0.732314, 0.848751, 1.168420, 2.023626",\ + "0.685984, 0.752887, 0.869324, 1.188993, 2.044199",\ + "0.744648, 0.811551, 0.927989, 1.247657, 2.102863",\ + "0.853883, 0.920786, 1.037224, 1.356892, 2.212098",\ + "1.621675, 1.688580, 1.805019, 2.124689, 2.979892"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.053775, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073039, 0.188935, 0.391846, 0.949113, 2.441342"); + } + + } /* end of arc obs_ctrl_o[10]_ast2padmux_o[5]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[10]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.056753, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.345553, 0.376966, 0.429613, 0.572027, 0.950669",\ + "0.369011, 0.400424, 0.453071, 0.595485, 0.974127",\ + "0.440108, 0.471521, 0.524168, 0.666582, 1.045224",\ + "0.565305, 0.596718, 0.649365, 0.791779, 1.170421",\ + "1.171631, 1.203044, 1.255693, 1.398105, 1.776746"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.056753, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039014, 0.090731, 0.180384, 0.429205, 1.091671",\ + "0.039014, 0.090731, 0.180384, 0.429205, 1.091671",\ + "0.039014, 0.090731, 0.180384, 0.429205, 1.091671",\ + "0.039014, 0.090731, 0.180384, 0.429205, 1.091671",\ + "0.039018, 0.090728, 0.180391, 0.429207, 1.091650"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044579, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.663782, 0.730673, 0.847101, 1.166770, 2.021989",\ + "0.679934, 0.746826, 0.863254, 1.182922, 2.038141",\ + "0.743020, 0.809911, 0.926339, 1.246007, 2.101227",\ + "0.852255, 0.919146, 1.035574, 1.355242, 2.210462",\ + "1.620317, 1.687211, 1.803640, 2.123309, 2.978526"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044579, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073029, 0.188911, 0.391812, 0.949040, 2.441330",\ + "0.073029, 0.188911, 0.391812, 0.949040, 2.441330",\ + "0.073029, 0.188911, 0.391812, 0.949040, 2.441330",\ + "0.073029, 0.188911, 0.391812, 0.949040, 2.441330",\ + "0.073030, 0.188915, 0.391817, 0.949051, 2.441332"); + } + + } /* end of arc obs_ctrl_o[10]_ast2padmux_o[5]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[11]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.034927, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.180024, 0.211452, 0.264149, 0.406513, 0.785119",\ + "0.193406, 0.224834, 0.277531, 0.419896, 0.798501",\ + "0.275919, 0.307349, 0.360051, 0.502410, 0.881011",\ + "0.400910, 0.432352, 0.485095, 0.627414, 1.005985",\ + "0.975060, 1.010086, 1.063144, 1.205732, 1.584486"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.034927, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039119, 0.090633, 0.180636, 0.429262, 1.090996",\ + "0.039119, 0.090633, 0.180636, 0.429262, 1.090996",\ + "0.039132, 0.090633, 0.180667, 0.429269, 1.090996",\ + "0.039215, 0.090633, 0.180868, 0.429314, 1.090996",\ + "0.049347, 0.094034, 0.180868, 0.429355, 1.091896"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037147, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.465437, 0.532662, 0.649281, 0.969044, 1.824018",\ + "0.477695, 0.544920, 0.661539, 0.981302, 1.836276",\ + "0.541916, 0.609140, 0.725760, 1.045521, 1.900495",\ + "0.644626, 0.711856, 0.828474, 1.148242, 2.003221",\ + "1.319722, 1.387140, 1.503696, 1.823662, 2.678811"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037147, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073817, 0.189281, 0.392442, 0.950607, 2.441526",\ + "0.073817, 0.189281, 0.392442, 0.950607, 2.441526",\ + "0.073817, 0.189282, 0.392442, 0.950607, 2.441526",\ + "0.073862, 0.189282, 0.392442, 0.950619, 2.441526",\ + "0.075399, 0.189282, 0.392442, 0.951039, 2.441526"); + } + + } /* end of arc obs_ctrl_o[11]_ast2padmux_o[5]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[11]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.030664, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.159139, 0.190553, 0.243202, 0.385613, 0.764254",\ + "0.170514, 0.201928, 0.254577, 0.396989, 0.775629",\ + "0.255576, 0.286993, 0.339652, 0.482053, 0.860686",\ + "0.379908, 0.411340, 0.464049, 0.606401, 0.984998",\ + "0.945167, 0.979651, 1.032663, 1.175209, 1.553933"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.030664, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039020, 0.090609, 0.180397, 0.429208, 1.090831",\ + "0.039020, 0.090609, 0.180397, 0.429208, 1.090831",\ + "0.039042, 0.090609, 0.180449, 0.429220, 1.090831",\ + "0.039144, 0.090609, 0.180675, 0.429276, 1.090831",\ + "0.047820, 0.093501, 0.180675, 0.429352, 1.091629"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.028580, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.461683, 0.528880, 0.645509, 0.965243, 1.820192",\ + "0.470327, 0.537524, 0.654153, 0.973887, 1.828836",\ + "0.538174, 0.605371, 0.721999, 1.041733, 1.896681",\ + "0.640782, 0.707985, 0.824611, 1.144351, 1.999304",\ + "1.312551, 1.379913, 1.496487, 1.816396, 2.671496"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.028580, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073594, 0.189124, 0.392388, 0.950544, 2.441454",\ + "0.073594, 0.189124, 0.392388, 0.950544, 2.441454",\ + "0.073594, 0.189124, 0.392388, 0.950544, 2.441454",\ + "0.073633, 0.189124, 0.392388, 0.950557, 2.441454",\ + "0.074954, 0.189124, 0.392388, 0.950917, 2.441454"); + } + + } /* end of arc obs_ctrl_o[11]_ast2padmux_o[5]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.500858, 0.568082, 0.684702, 1.004464, 1.859437",\ + "0.516623, 0.583848, 0.700467, 1.020230, 1.875203",\ + "0.590734, 0.657958, 0.774578, 1.094340, 1.949314",\ + "0.681946, 0.749171, 0.865790, 1.185553, 2.040526",\ + "1.108576, 1.175805, 1.292423, 1.612190, 2.467167"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073816, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073848, 0.189277, 0.392440, 0.950615, 2.441524"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.275118, 0.306284, 0.358903, 0.501398, 0.880041",\ + "0.290749, 0.321915, 0.374533, 0.517029, 0.895671",\ + "0.363703, 0.394869, 0.447488, 0.589983, 0.968626",\ + "0.474794, 0.505959, 0.558577, 0.701073, 1.079716",\ + "1.013269, 1.044421, 1.097036, 1.239541, 1.618177"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040759, 0.090626, 0.180653, 0.429266, 1.092499",\ + "0.040922, 0.090525, 0.180916, 0.429325, 1.092539"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[5]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.337608, 0.404302, 0.520641, 0.837429, 1.687203",\ + "0.349939, 0.416633, 0.532972, 0.849760, 1.699534",\ + "0.408752, 0.475446, 0.591785, 0.908573, 1.758347",\ + "0.496083, 0.562777, 0.679117, 0.995905, 1.845678",\ + "0.949078, 1.015776, 1.132136, 1.448920, 2.298678"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184560, 0.382485, 0.937098, 2.417677",\ + "0.067604, 0.184551, 0.382483, 0.937052, 2.417689"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.209985, 0.241400, 0.294052, 0.436461, 0.815099",\ + "0.221857, 0.253271, 0.305923, 0.448332, 0.826970",\ + "0.304351, 0.335766, 0.388417, 0.530826, 0.909465",\ + "0.409226, 0.440642, 0.493298, 0.635702, 1.014338",\ + "0.909442, 0.940877, 0.993596, 1.135938, 1.514527"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039034, 0.090327, 0.180161, 0.428971, 1.091542",\ + "0.039166, 0.090324, 0.180166, 0.428948, 1.090692"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[5]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.287803, 0.318969, 0.371587, 0.514083, 0.892726",\ + "0.303569, 0.334734, 0.387353, 0.529848, 0.908491",\ + "0.378810, 0.409975, 0.462594, 0.605089, 0.983732",\ + "0.473884, 0.505049, 0.557668, 0.700163, 1.078806",\ + "0.918190, 0.949342, 1.001956, 1.144462, 1.523098"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040759, 0.090626, 0.180653, 0.429266, 1.092499",\ + "0.040922, 0.090525, 0.180916, 0.429325, 1.092539"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.376755, 0.443500, 0.560063, 0.876818, 1.726409",\ + "0.392417, 0.459162, 0.575725, 0.892480, 1.742071",\ + "0.467424, 0.534169, 0.650732, 0.967487, 1.817078",\ + "0.562603, 0.629351, 0.745928, 1.062681, 1.912261",\ + "1.006927, 1.073706, 1.190415, 1.507149, 2.356620"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073816, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073848, 0.189277, 0.392440, 0.950615, 2.441524"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[5]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.264318, 0.295567, 0.348210, 0.490643, 0.869326",\ + "0.278489, 0.309737, 0.362381, 0.504814, 0.883496",\ + "0.355325, 0.386573, 0.439217, 0.581649, 0.960332",\ + "0.450369, 0.481617, 0.534260, 0.676693, 1.055376",\ + "0.893831, 0.925076, 0.977718, 1.120154, 1.498834"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039034, 0.090327, 0.180161, 0.428971, 1.091542",\ + "0.039166, 0.090324, 0.180166, 0.428948, 1.090692"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.373701, 0.440395, 0.556734, 0.873522, 1.723296",\ + "0.385572, 0.452266, 0.568605, 0.885393, 1.735167",\ + "0.464371, 0.531065, 0.647404, 0.964192, 1.813966",\ + "0.559385, 0.626079, 0.742420, 1.059207, 1.908981",\ + "1.002245, 1.068944, 1.185303, 1.502088, 2.351846"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184560, 0.382485, 0.937098, 2.417677",\ + "0.067604, 0.184551, 0.382483, 0.937052, 2.417689"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[5]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.337998, 0.404744, 0.521308, 0.838063, 1.687653",\ + "0.353177, 0.419923, 0.536487, 0.853242, 1.702832",\ + "0.412195, 0.478941, 0.595505, 0.912260, 1.761850",\ + "0.508449, 0.575199, 0.691783, 1.008535, 1.858109",\ + "0.997007, 1.063817, 1.180658, 1.497372, 2.346736"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073812, 0.189282, 0.392442, 0.950605, 2.441527",\ + "0.073812, 0.189282, 0.392442, 0.950605, 2.441527",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073887, 0.189271, 0.392439, 0.950626, 2.441522",\ + "0.075818, 0.189005, 0.392348, 0.951153, 2.441399"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.272032, 0.303198, 0.355817, 0.498312, 0.876955",\ + "0.289891, 0.321056, 0.373675, 0.516170, 0.894813",\ + "0.360955, 0.392121, 0.444739, 0.587235, 0.965878",\ + "0.471378, 0.502542, 0.555160, 0.697656, 1.076298",\ + "1.004117, 1.035227, 1.087829, 1.230366, 1.608983"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090633, 0.180635, 0.429262, 1.092497",\ + "0.040752, 0.090633, 0.180635, 0.429262, 1.092497",\ + "0.040752, 0.090633, 0.180666, 0.429269, 1.092497",\ + "0.040771, 0.090633, 0.180871, 0.429315, 1.092502",\ + "0.049622, 0.094130, 0.180871, 0.429356, 1.092666"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[5]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.329221, 0.395915, 0.512254, 0.829041, 1.678816",\ + "0.344592, 0.411286, 0.527624, 0.844412, 1.694187",\ + "0.406780, 0.473474, 0.589813, 0.906601, 1.756375",\ + "0.502234, 0.568932, 0.685288, 1.002073, 1.851833",\ + "0.957622, 1.024367, 1.140929, 1.457685, 2.307276"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067607, 0.184553, 0.382483, 0.937060, 2.417687",\ + "0.067439, 0.184458, 0.382464, 0.936568, 2.417820"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.231492, 0.262740, 0.315383, 0.457816, 0.836499",\ + "0.245351, 0.276600, 0.329243, 0.471676, 0.850359",\ + "0.320124, 0.351372, 0.404016, 0.546449, 0.925131",\ + "0.430166, 0.461410, 0.514053, 0.656489, 1.035169",\ + "0.955028, 0.986237, 1.038869, 1.181331, 1.559995"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039018, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039018, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039041, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039146, 0.090294, 0.180167, 0.428752, 1.090822",\ + "0.040211, 0.090294, 0.180212, 0.428752, 1.091676"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[5]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.176901, 0.208329, 0.261026, 0.403390, 0.781996",\ + "0.196158, 0.227585, 0.280282, 0.422647, 0.801252",\ + "0.273304, 0.304734, 0.357436, 0.499795, 0.878396",\ + "0.397207, 0.428649, 0.481392, 0.623711, 1.002282",\ + "0.961790, 0.996912, 1.049978, 1.192575, 1.571334"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090633, 0.180635, 0.429262, 1.092497",\ + "0.040752, 0.090633, 0.180635, 0.429262, 1.092497",\ + "0.040752, 0.090633, 0.180666, 0.429269, 1.092497",\ + "0.040771, 0.090633, 0.180871, 0.429315, 1.092502",\ + "0.049622, 0.094130, 0.180871, 0.429356, 1.092666"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.455825, 0.523049, 0.639668, 0.959430, 1.814404",\ + "0.468963, 0.536187, 0.652807, 0.972569, 1.827542",\ + "0.531289, 0.598514, 0.715133, 1.034896, 1.889869",\ + "0.640154, 0.707387, 0.824004, 1.143775, 1.998757",\ + "1.332501, 1.399969, 1.516508, 1.836528, 2.691724"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073812, 0.189282, 0.392442, 0.950605, 2.441527",\ + "0.073812, 0.189282, 0.392442, 0.950605, 2.441527",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073887, 0.189271, 0.392439, 0.950626, 2.441522",\ + "0.075818, 0.189005, 0.392348, 0.951153, 2.441399"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[5]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.155833, 0.187247, 0.239896, 0.382308, 0.760949",\ + "0.173482, 0.204896, 0.257545, 0.399957, 0.778598",\ + "0.252964, 0.284381, 0.337040, 0.479441, 0.858074",\ + "0.376196, 0.407628, 0.460337, 0.602689, 0.981285",\ + "0.931678, 0.966257, 1.019278, 1.161831, 1.540560"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039018, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039018, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039041, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039146, 0.090294, 0.180167, 0.428752, 1.090822",\ + "0.040211, 0.090294, 0.180212, 0.428752, 1.091676"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.452081, 0.519278, 0.635907, 0.955640, 1.810589",\ + "0.461862, 0.529059, 0.645688, 0.965421, 1.820370",\ + "0.527542, 0.594739, 0.711368, 1.031102, 1.886050",\ + "0.636262, 0.703467, 0.820093, 1.139835, 1.994791",\ + "1.324350, 1.391756, 1.508316, 1.828270, 2.683409"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067607, 0.184553, 0.382483, 0.937060, 2.417687",\ + "0.067439, 0.184458, 0.382464, 0.936568, 2.417820"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[5]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.325984, 0.393209, 0.509828, 0.829592, 1.684567",\ + "0.341732, 0.408957, 0.525576, 0.845340, 1.700314",\ + "0.405621, 0.472847, 0.589466, 0.909229, 1.764204",\ + "0.483984, 0.551208, 0.667827, 0.987590, 1.842564",\ + "0.876566, 0.943791, 1.060410, 1.380173, 2.235147"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189281, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189281, 0.392442, 0.950608, 2.441526"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.207560, 0.238992, 0.291700, 0.434053, 0.812650",\ + "0.223441, 0.254873, 0.307582, 0.449934, 0.828531",\ + "0.292964, 0.324396, 0.377105, 0.519457, 0.898054",\ + "0.382304, 0.413736, 0.466444, 0.608797, 0.987394",\ + "0.808201, 0.839636, 0.892354, 1.034697, 1.413287"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180696, 0.429275, 1.092497",\ + "0.040785, 0.090610, 0.180744, 0.429286, 1.092505"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[5]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.298728, 0.365697, 0.482189, 0.801862, 1.656989",\ + "0.312838, 0.379807, 0.496299, 0.815972, 1.671100",\ + "0.378416, 0.445385, 0.561877, 0.881551, 1.736677",\ + "0.456978, 0.523948, 0.640441, 0.960115, 1.815240",\ + "0.852482, 0.919491, 1.036016, 1.355692, 2.210772"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067586, 0.184541, 0.382481, 0.936998, 2.417704"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.185526, 0.216941, 0.269593, 0.412001, 0.790640",\ + "0.197528, 0.228943, 0.281595, 0.424004, 0.802642",\ + "0.270950, 0.302365, 0.355017, 0.497425, 0.876064",\ + "0.360375, 0.391790, 0.444442, 0.586850, 0.965489",\ + "0.786063, 0.817479, 0.870138, 1.012540, 1.391174"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039039, 0.090322, 0.180169, 0.428938, 1.091513"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[5]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.314064, 0.345229, 0.397848, 0.540343, 0.918986",\ + "0.329859, 0.361025, 0.413644, 0.556139, 0.934782",\ + "0.407724, 0.438890, 0.491508, 0.634004, 1.012646",\ + "0.508778, 0.539944, 0.592562, 0.735058, 1.113701",\ + "0.984655, 1.015818, 1.068436, 1.210933, 1.589574"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180696, 0.429275, 1.092497",\ + "0.040785, 0.090610, 0.180744, 0.429286, 1.092505"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.596327, 0.663552, 0.780171, 1.099935, 1.954909",\ + "0.609131, 0.676356, 0.792975, 1.112739, 1.967713",\ + "0.677113, 0.744339, 0.860958, 1.180721, 2.035696",\ + "0.788810, 0.856034, 0.972654, 1.292416, 2.147390",\ + "1.273667, 1.340892, 1.457511, 1.777274, 2.632248"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189281, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189281, 0.392442, 0.950608, 2.441526"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[5]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.262848, 0.294262, 0.346915, 0.489323, 0.867962",\ + "0.276998, 0.308413, 0.361065, 0.503474, 0.882112",\ + "0.356726, 0.388141, 0.440793, 0.583202, 0.961840",\ + "0.457948, 0.489362, 0.542015, 0.684423, 1.063061",\ + "0.929777, 0.961193, 1.013852, 1.156254, 1.534888"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039039, 0.090322, 0.180169, 0.428938, 1.091513"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.437011, 0.503705, 0.620045, 0.936832, 1.786606",\ + "0.446608, 0.513302, 0.629642, 0.946429, 1.796203",\ + "0.517780, 0.584475, 0.700814, 1.017602, 1.867376",\ + "0.629396, 0.696091, 0.812430, 1.129218, 1.978992",\ + "1.131911, 1.198614, 1.314996, 1.631778, 2.481517"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067586, 0.184541, 0.382481, 0.936998, 2.417704"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[5]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[7]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.060518, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.315427, 0.346593, 0.399212, 0.541707, 0.920350",\ + "0.342146, 0.373312, 0.425930, 0.568426, 0.947068",\ + "0.410184, 0.441350, 0.493968, 0.636464, 1.015106",\ + "0.512927, 0.544093, 0.596711, 0.739207, 1.117850",\ + "0.999580, 1.030743, 1.083361, 1.225858, 1.604500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.060518, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180697, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180697, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180697, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180732, 0.429283, 1.092497",\ + "0.042004, 0.091469, 0.180867, 0.429340, 1.092504"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.051005, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.597332, 0.664558, 0.781177, 1.100940, 1.955915",\ + "0.618079, 0.685305, 0.801924, 1.121688, 1.976662",\ + "0.683404, 0.750630, 0.867249, 1.187012, 2.041987",\ + "0.797603, 0.864828, 0.981447, 1.301210, 2.156184",\ + "1.375793, 1.443018, 1.559637, 1.879400, 2.734374"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.051005, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950609, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073823, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073819, 0.189281, 0.392442, 0.950607, 2.441526",\ + "0.073817, 0.189281, 0.392442, 0.950607, 2.441526"); + } + + } /* end of arc obs_ctrl_o[7]_ast2padmux_o[5]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[7]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.049671, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.150722, 0.182137, 0.234789, 0.377197, 0.755836",\ + "0.171205, 0.202620, 0.255272, 0.397681, 0.776319",\ + "0.246518, 0.277932, 0.330585, 0.472993, 0.851631",\ + "0.352324, 0.383738, 0.436391, 0.578799, 0.957437",\ + "0.825559, 0.856975, 0.909634, 1.052036, 1.430670"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.049671, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039038, 0.090323, 0.180168, 0.428941, 1.091519"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040467, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.277343, 0.344312, 0.460804, 0.780477, 1.635605",\ + "0.293355, 0.360323, 0.476815, 0.796489, 1.651616",\ + "0.366113, 0.433085, 0.549579, 0.869253, 1.724376",\ + "0.487008, 0.554003, 0.670516, 0.990192, 1.845287",\ + "1.141953, 1.209132, 1.325766, 1.645481, 2.500414"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040467, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067601, 0.184550, 0.382483, 0.937044, 2.417691"); + } + + } /* end of arc obs_ctrl_o[7]_ast2padmux_o[5]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[8]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045711, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.690094, 0.756997, 0.873435, 1.193104, 2.048309",\ + "0.708444, 0.775347, 0.891784, 1.211453, 2.066659",\ + "0.778290, 0.845193, 0.961630, 1.281299, 2.136505",\ + "0.871001, 0.937904, 1.054342, 1.374010, 2.229216",\ + "1.316481, 1.383384, 1.499822, 1.819491, 2.674696"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045711, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044476, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.452134, 0.483566, 0.536274, 0.678627, 1.057224",\ + "0.469561, 0.500993, 0.553701, 0.696054, 1.074651",\ + "0.546928, 0.578360, 0.631068, 0.773421, 1.152018",\ + "0.655300, 0.686732, 0.739440, 0.881793, 1.260390",\ + "1.172032, 1.203463, 1.256172, 1.398524, 1.777121"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044476, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837"); + } + + } /* end of arc obs_ctrl_o[8]_ast2padmux_o[5]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[8]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.041900, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.688464, 0.755356, 0.871784, 1.191452, 2.046671",\ + "0.705080, 0.771971, 0.888399, 1.208067, 2.063287",\ + "0.776660, 0.843551, 0.959979, 1.279647, 2.134867",\ + "0.869371, 0.936263, 1.052691, 1.372359, 2.227578",\ + "1.314852, 1.381744, 1.498172, 1.817840, 2.673059"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.041900, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073029, 0.188911, 0.391812, 0.949040, 2.441330",\ + "0.073029, 0.188911, 0.391812, 0.949040, 2.441330",\ + "0.073029, 0.188911, 0.391812, 0.949040, 2.441330",\ + "0.073029, 0.188911, 0.391812, 0.949040, 2.441330",\ + "0.073029, 0.188911, 0.391812, 0.949040, 2.441330"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035639, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.396265, 0.427678, 0.480325, 0.622739, 1.001381",\ + "0.409612, 0.441025, 0.493672, 0.636085, 1.014728",\ + "0.491059, 0.522472, 0.575119, 0.717533, 1.096175",\ + "0.599541, 0.630954, 0.683601, 0.826015, 1.204657",\ + "1.117451, 1.148864, 1.201511, 1.343925, 1.722567"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035639, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039014, 0.090731, 0.180384, 0.429205, 1.091671",\ + "0.039014, 0.090731, 0.180384, 0.429205, 1.091671",\ + "0.039014, 0.090731, 0.180384, 0.429205, 1.091671",\ + "0.039014, 0.090731, 0.180384, 0.429205, 1.091671",\ + "0.039014, 0.090731, 0.180384, 0.429205, 1.091671"); + } + + } /* end of arc obs_ctrl_o[8]_ast2padmux_o[5]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[9]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.046138, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.701899, 0.768802, 0.885240, 1.204909, 2.060114",\ + "0.720452, 0.787355, 0.903793, 1.223462, 2.078667",\ + "0.793150, 0.860053, 0.976490, 1.296159, 2.151365",\ + "0.888367, 0.955270, 1.071708, 1.391377, 2.246583",\ + "1.341174, 1.408077, 1.524515, 1.844184, 2.699389"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.046138, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340",\ + "0.073037, 0.188931, 0.391841, 0.949101, 2.441340"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044715, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.458526, 0.489958, 0.542666, 0.685019, 1.063616",\ + "0.476069, 0.507500, 0.560208, 0.702561, 1.081158",\ + "0.553398, 0.584829, 0.637537, 0.779890, 1.158487",\ + "0.662868, 0.694299, 0.747008, 0.889361, 1.267957",\ + "1.187448, 1.218880, 1.271588, 1.413941, 1.792538"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044715, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837"); + } + + } /* end of arc obs_ctrl_o[9]_ast2padmux_o[5]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[9]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.042344, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.700268, 0.767160, 0.883588, 1.203256, 2.058475",\ + "0.717089, 0.783981, 0.900409, 1.220077, 2.075296",\ + "0.791519, 0.858410, 0.974838, 1.294506, 2.149726",\ + "0.886736, 0.953628, 1.070056, 1.389724, 2.244943",\ + "1.339543, 1.406435, 1.522863, 1.842531, 2.697751"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.042344, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073029, 0.188911, 0.391812, 0.949040, 2.441330",\ + "0.073029, 0.188911, 0.391812, 0.949040, 2.441330",\ + "0.073029, 0.188911, 0.391812, 0.949040, 2.441330",\ + "0.073029, 0.188911, 0.391812, 0.949040, 2.441330",\ + "0.073029, 0.188911, 0.391812, 0.949040, 2.441330"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035869, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.402716, 0.434129, 0.486776, 0.629190, 1.007832",\ + "0.416173, 0.447586, 0.500233, 0.642646, 1.021289",\ + "0.497588, 0.529001, 0.581648, 0.724061, 1.102704",\ + "0.607156, 0.638569, 0.691216, 0.833630, 1.212272",\ + "1.132876, 1.164289, 1.216936, 1.359350, 1.737992"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035869, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039014, 0.090731, 0.180384, 0.429205, 1.091671",\ + "0.039014, 0.090731, 0.180384, 0.429205, 1.091671",\ + "0.039014, 0.090731, 0.180384, 0.429205, 1.091671",\ + "0.039014, 0.090731, 0.180384, 0.429205, 1.091671",\ + "0.039014, 0.090731, 0.180384, 0.429205, 1.091671"); + } + + } /* end of arc obs_ctrl_o[9]_ast2padmux_o[5]_una_min*/ + + timing () { + related_pin : "otm_obs_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.123879, 0.190820, 0.307288, 0.626960, 1.482121",\ + "0.210891, 0.277978, 0.394567, 0.714249, 1.569235",\ + "0.301781, 0.369068, 0.485667, 0.805496, 1.660526",\ + "0.453978, 0.523120, 0.640034, 0.960158, 1.815427",\ + "0.695902, 0.774527, 0.893732, 1.214148, 2.069560"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073065, 0.188997, 0.391936, 0.949305, 2.441374",\ + "0.073175, 0.189249, 0.392304, 0.950092, 2.441498",\ + "0.074330, 0.189249, 0.392418, 0.950747, 2.441498",\ + "0.079436, 0.191164, 0.392505, 0.951076, 2.441498",\ + "0.098084, 0.204137, 0.393542, 0.951076, 2.441498"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.114293, 0.145721, 0.198417, 0.340782, 0.719388",\ + "0.205394, 0.236828, 0.289545, 0.431889, 0.810480",\ + "0.309904, 0.342065, 0.394885, 0.537244, 0.915841",\ + "0.501618, 0.536979, 0.590065, 0.732680, 1.111452",\ + "0.825607, 0.870622, 0.930343, 1.075147, 1.454209"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039117, 0.090634, 0.180632, 0.429261, 1.091005",\ + "0.039161, 0.090634, 0.180739, 0.429285, 1.091005",\ + "0.041267, 0.091212, 0.180891, 0.429338, 1.091005",\ + "0.050293, 0.094364, 0.180891, 0.429357, 1.092061",\ + "0.068556, 0.114740, 0.192215, 0.429716, 1.093122"); + } + + } /* end of arc otm_obs_i[5]_ast2padmux_o[5]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "otm_obs_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.120559, 0.187489, 0.303948, 0.623619, 1.478793",\ + "0.205712, 0.272774, 0.389342, 0.709022, 1.564038",\ + "0.292652, 0.359907, 0.476516, 0.796311, 1.651312",\ + "0.437434, 0.505450, 0.622092, 0.942182, 1.797434",\ + "0.662107, 0.738115, 0.856688, 1.177023, 2.032395"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073057, 0.188977, 0.391908, 0.949245, 2.441364",\ + "0.073156, 0.189206, 0.392241, 0.949956, 2.441378",\ + "0.074065, 0.189247, 0.392382, 0.950255, 2.441378",\ + "0.077223, 0.189624, 0.392382, 0.950255, 2.441378",\ + "0.092938, 0.200557, 0.393255, 0.950255, 2.441468"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.094368, 0.125782, 0.178430, 0.320842, 0.699483",\ + "0.188259, 0.219683, 0.272369, 0.414744, 0.793358",\ + "0.291365, 0.323244, 0.376040, 0.518376, 0.896959",\ + "0.474009, 0.509208, 0.562280, 0.704883, 1.083646",\ + "0.777508, 0.822171, 0.881623, 1.026340, 1.405392"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039018, 0.090654, 0.180392, 0.429207, 1.090346",\ + "0.039096, 0.090654, 0.180581, 0.429249, 1.090346",\ + "0.040472, 0.090934, 0.180608, 0.429337, 1.090346",\ + "0.049836, 0.094205, 0.180608, 0.429356, 1.091981",\ + "0.067933, 0.113945, 0.191732, 0.429701, 1.093101"); + } + + } /* end of arc otm_obs_i[5]_ast2padmux_o[5]_una_min*/ + + timing () { + related_pin : "otp_obs_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.122660, 0.189370, 0.305783, 0.622560, 1.472274",\ + "0.209824, 0.276743, 0.394059, 0.710704, 1.559679",\ + "0.301920, 0.369023, 0.486415, 0.804486, 1.652417",\ + "0.455547, 0.524976, 0.642287, 0.962376, 1.809444",\ + "0.699992, 0.780922, 0.900058, 1.218756, 2.067549"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067561, 0.184527, 0.382478, 0.936925, 2.417724",\ + "0.067561, 0.184527, 0.382478, 0.936925, 2.418306",\ + "0.068683, 0.184527, 0.382544, 0.936925, 2.418306",\ + "0.075540, 0.185756, 0.383113, 0.940410, 2.418306",\ + "0.094401, 0.199857, 0.384817, 0.940410, 2.426093"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.114764, 0.145947, 0.198571, 0.341053, 0.719705",\ + "0.205629, 0.236785, 0.289401, 0.431904, 0.810542",\ + "0.310076, 0.342571, 0.395201, 0.537686, 0.916183",\ + "0.500896, 0.538360, 0.591093, 0.733386, 1.111456",\ + "0.820213, 0.870292, 0.933027, 1.077593, 1.455130"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040532, 0.090273, 0.180246, 0.428609, 1.092443",\ + "0.040870, 0.090273, 0.180281, 0.428609, 1.092443",\ + "0.045400, 0.092351, 0.180508, 0.428609, 1.092443",\ + "0.059558, 0.100025, 0.181106, 0.428872, 1.092443",\ + "0.087354, 0.133744, 0.204884, 0.431205, 1.092443"); + } + + } /* end of arc otp_obs_i[5]_ast2padmux_o[5]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "otp_obs_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.119334, 0.186028, 0.302368, 0.619155, 1.468929",\ + "0.204833, 0.271716, 0.388876, 0.705544, 1.554647",\ + "0.293319, 0.360401, 0.477846, 0.795625, 1.643707",\ + "0.440314, 0.508488, 0.625608, 0.945855, 1.792734",\ + "0.667813, 0.745674, 0.864272, 1.183300, 2.031636"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.183691, 0.382409, 0.935142, 2.413233",\ + "0.067620, 0.183691, 0.382409, 0.935142, 2.413233",\ + "0.068262, 0.183691, 0.382508, 0.936031, 2.413233",\ + "0.073482, 0.184226, 0.382946, 0.939859, 2.413233",\ + "0.089380, 0.196045, 0.384240, 0.939859, 2.423100"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.094521, 0.125776, 0.178422, 0.320849, 0.699535",\ + "0.188239, 0.219444, 0.272075, 0.414540, 0.793202",\ + "0.291550, 0.323577, 0.376197, 0.518700, 0.897237",\ + "0.473699, 0.510899, 0.563627, 0.705929, 1.084022",\ + "0.773733, 0.823401, 0.885774, 1.030256, 1.407808"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039633, 0.090291, 0.180152, 0.428296, 1.092222",\ + "0.040262, 0.090291, 0.180217, 0.428296, 1.092377",\ + "0.044064, 0.091627, 0.180452, 0.428296, 1.092425",\ + "0.058805, 0.099616, 0.181075, 0.428844, 1.092425",\ + "0.086478, 0.132591, 0.204027, 0.431125, 1.092425"); + } + + } /* end of arc otp_obs_i[5]_ast2padmux_o[5]_una_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380000.312500, 380000.312500, 380000.343750, 380000.406250, 380000.593750",\ + "380000.406250, 380000.406250, 380000.437500, 380000.500000, 380000.687500",\ + "380000.500000, 380000.500000, 380000.531250, 380000.593750, 380000.781250",\ + "380000.656250, 380000.656250, 380000.687500, 380000.750000, 380000.937500",\ + "380000.906250, 380000.906250, 380000.937500, 380001.000000, 380001.187500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380001.781250, 380001.843750, 380001.968750, 380002.281250, 380003.156250",\ + "380001.875000, 380001.937500, 380002.062500, 380002.375000, 380003.250000",\ + "380002.000000, 380002.062500, 380002.187500, 380002.500000, 380003.375000",\ + "380002.187500, 380002.250000, 380002.375000, 380002.687500, 380003.562500",\ + "380002.500000, 380002.562500, 380002.687500, 380003.000000, 380003.875000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526"); + } + + } /* end of arc padmux2ast_i[4]_ast2padmux_o[5]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380000.312500, 380000.312500, 380000.343750, 380000.406250, 380000.593750",\ + "380000.406250, 380000.406250, 380000.437500, 380000.500000, 380000.687500",\ + "380000.468750, 380000.468750, 380000.500000, 380000.562500, 380000.750000",\ + "380000.625000, 380000.625000, 380000.656250, 380000.718750, 380000.906250",\ + "380000.843750, 380000.843750, 380000.875000, 380000.937500, 380001.125000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380001.781250, 380001.812500, 380001.906250, 380002.187500, 380002.875000",\ + "380001.875000, 380001.906250, 380002.000000, 380002.281250, 380002.968750",\ + "380001.968750, 380002.000000, 380002.093750, 380002.375000, 380003.062500",\ + "380002.156250, 380002.187500, 380002.281250, 380002.562500, 380003.250000",\ + "380002.406250, 380002.437500, 380002.531250, 380002.812500, 380003.500000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169"); + } + + } /* end of arc padmux2ast_i[4]_ast2padmux_o[5]_inv_min*/ + +} /* end of pin ast2padmux_o[5] */ + +pin("ast2padmux_o[4]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.028584 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : ast2padmux_o[4]; + timing () { + related_pin : "clk_ast_rng_i" ; + related_output_pin : "rng_b_o[3]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.256137, 0.526101, 0.791807, 1.233240, 2.116106",\ + "0.323038, 0.593004, 0.858715, 1.300159, 2.183047",\ + "0.439474, 0.709441, 0.975156, 1.416609, 2.299516",\ + "0.759143, 1.029110, 1.294825, 1.736279, 2.619187",\ + "1.614351, 1.884316, 2.150025, 2.591466, 3.474348",\ + "0.314712, 0.584612, 0.850579, 1.290946, 2.172213",\ + "0.381613, 0.651515, 0.917487, 1.357865, 2.239154",\ + "0.498049, 0.767952, 1.033928, 1.474316, 2.355623",\ + "0.817718, 1.087621, 1.353598, 1.793986, 2.675294",\ + "1.672926, 1.942827, 2.208797, 2.649173, 3.530455",\ + "0.459188, 0.730385, 0.994470, 1.434701, 2.315946",\ + "0.526089, 0.797288, 1.061378, 1.501621, 2.382887",\ + "0.642525, 0.913725, 1.177819, 1.618071, 2.499355",\ + "0.962194, 1.233394, 1.497489, 1.937741, 2.819027",\ + "1.817402, 2.088600, 2.352689, 2.792928, 3.674187",\ + "0.495112, 0.768133, 1.031389, 1.471493, 2.352504",\ + "0.562013, 0.835036, 1.098297, 1.538412, 2.419445",\ + "0.678449, 0.951473, 1.214738, 1.654862, 2.535913",\ + "0.998118, 1.271142, 1.534407, 1.974532, 2.855585",\ + "1.853326, 2.126348, 2.389607, 2.829719, 3.710746",\ + "0.823805, 1.131731, 1.382980, 1.820732, 2.697960",\ + "0.890706, 1.198635, 1.449888, 1.887651, 2.764901",\ + "1.007142, 1.315072, 1.566330, 2.004102, 2.881370",\ + "1.326811, 1.634741, 1.885999, 2.323771, 3.201041",\ + "2.182019, 2.489947, 2.741199, 3.178958, 4.056201"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.073036, 0.073037, 0.073041, 0.073049, 0.073065",\ + "0.188928, 0.188931, 0.188940, 0.188959, 0.188997",\ + "0.391836, 0.391840, 0.391853, 0.391881, 0.391936",\ + "0.949092, 0.949099, 0.949128, 0.949187, 0.949305",\ + "2.441339, 2.441340, 2.441345, 2.441355, 2.441374",\ + "0.073036, 0.073037, 0.073041, 0.073049, 0.073065",\ + "0.188928, 0.188931, 0.188940, 0.188959, 0.188997",\ + "0.391836, 0.391840, 0.391853, 0.391881, 0.391936",\ + "0.949092, 0.949099, 0.949128, 0.949187, 0.949305",\ + "2.441339, 2.441340, 2.441345, 2.441355, 2.441374",\ + "0.073036, 0.073037, 0.073041, 0.073049, 0.073065",\ + "0.188928, 0.188931, 0.188940, 0.188959, 0.188997",\ + "0.391836, 0.391840, 0.391853, 0.391881, 0.391936",\ + "0.949092, 0.949100, 0.949128, 0.949187, 0.949305",\ + "2.441339, 2.441340, 2.441345, 2.441355, 2.441374",\ + "0.073036, 0.073037, 0.073041, 0.073049, 0.073065",\ + "0.188928, 0.188931, 0.188940, 0.188959, 0.188997",\ + "0.391836, 0.391840, 0.391853, 0.391881, 0.391936",\ + "0.949092, 0.949100, 0.949128, 0.949187, 0.949305",\ + "2.441339, 2.441340, 2.441345, 2.441355, 2.441374",\ + "0.073036, 0.073037, 0.073041, 0.073049, 0.073065",\ + "0.188928, 0.188932, 0.188940, 0.188959, 0.188997",\ + "0.391836, 0.391842, 0.391854, 0.391881, 0.391936",\ + "0.949092, 0.949103, 0.949129, 0.949187, 0.949305",\ + "2.441339, 2.441340, 2.441345, 2.441355, 2.441374"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.300809, 0.483950, 0.676379, 0.983182, 1.575800",\ + "0.332240, 0.515381, 0.707810, 1.014614, 1.607232",\ + "0.384949, 0.568090, 0.760519, 1.067323, 1.659944",\ + "0.527301, 0.710443, 0.902872, 1.209675, 1.802294",\ + "0.905898, 1.089039, 1.281469, 1.588271, 2.180888",\ + "0.360720, 0.543848, 0.736331, 1.042962, 1.635417",\ + "0.392152, 0.575280, 0.767762, 1.074394, 1.666849",\ + "0.444860, 0.627988, 0.820471, 1.127103, 1.719561",\ + "0.587213, 0.770341, 0.962824, 1.269455, 1.861911",\ + "0.965810, 1.148938, 1.341421, 1.648051, 2.240505",\ + "0.493463, 0.676099, 0.868214, 1.174820, 1.767224",\ + "0.524895, 0.707531, 0.899645, 1.206252, 1.798657",\ + "0.577603, 0.760239, 0.952354, 1.258961, 1.851368",\ + "0.719956, 0.902592, 1.094707, 1.401313, 1.993718",\ + "1.098553, 1.281189, 1.473303, 1.779909, 2.372313",\ + "0.526601, 0.709226, 0.901339, 1.207772, 1.799833",\ + "0.558032, 0.740658, 0.932770, 1.239204, 1.831265",\ + "0.610741, 0.793366, 0.985478, 1.291914, 1.883977",\ + "0.753093, 0.935719, 1.127831, 1.434265, 2.026326",\ + "1.131690, 1.314316, 1.506428, 1.812862, 2.404921",\ + "0.827685, 1.014449, 1.204974, 1.510788, 2.101678",\ + "0.859116, 1.045881, 1.236405, 1.542220, 2.133111",\ + "0.911824, 1.098589, 1.289114, 1.594929, 2.185822",\ + "1.054177, 1.240942, 1.431466, 1.737281, 2.328172",\ + "1.432774, 1.619539, 1.810063, 2.115877, 2.706767"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.039143, 0.039143, 0.039143, 0.039145, 0.039150",\ + "0.090610, 0.090610, 0.090610, 0.090608, 0.090604",\ + "0.180695, 0.180695, 0.180695, 0.180700, 0.180710",\ + "0.429275, 0.429275, 0.429275, 0.429276, 0.429279",\ + "1.090837, 1.090837, 1.090837, 1.090825, 1.090796",\ + "0.039143, 0.039143, 0.039143, 0.039145, 0.039150",\ + "0.090610, 0.090610, 0.090610, 0.090608, 0.090604",\ + "0.180695, 0.180695, 0.180695, 0.180700, 0.180710",\ + "0.429275, 0.429275, 0.429275, 0.429276, 0.429279",\ + "1.090837, 1.090837, 1.090837, 1.090825, 1.090796",\ + "0.039143, 0.039143, 0.039143, 0.039145, 0.039150",\ + "0.090610, 0.090610, 0.090610, 0.090608, 0.090604",\ + "0.180695, 0.180695, 0.180695, 0.180700, 0.180710",\ + "0.429275, 0.429275, 0.429275, 0.429276, 0.429279",\ + "1.090837, 1.090837, 1.090837, 1.090825, 1.090796",\ + "0.039143, 0.039143, 0.039143, 0.039145, 0.039150",\ + "0.090610, 0.090610, 0.090610, 0.090608, 0.090604",\ + "0.180695, 0.180695, 0.180695, 0.180700, 0.180710",\ + "0.429275, 0.429275, 0.429275, 0.429276, 0.429279",\ + "1.090837, 1.090837, 1.090837, 1.090825, 1.090796",\ + "0.039143, 0.039143, 0.039143, 0.039145, 0.039150",\ + "0.090610, 0.090610, 0.090610, 0.090608, 0.090604",\ + "0.180695, 0.180695, 0.180695, 0.180700, 0.180710",\ + "0.429275, 0.429275, 0.429275, 0.429276, 0.429279",\ + "1.090837, 1.090837, 1.090837, 1.090825, 1.090796"); + } + + } /* end of arc clk_ast_rng_i_ast2padmux_o[4]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_rng_i" ; + related_output_pin : "rng_b_o[3]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.252605, 0.520760, 0.784538, 1.222585, 2.097608",\ + "0.319496, 0.587651, 0.851435, 1.289491, 2.164534",\ + "0.435923, 0.704079, 0.967867, 1.405931, 2.280990",\ + "0.755591, 1.023747, 1.287535, 1.725600, 2.600661",\ + "1.610811, 1.878966, 2.142749, 2.580802, 3.455839",\ + "0.311166, 0.579267, 0.843303, 1.280291, 2.153714",\ + "0.378057, 0.646158, 0.910200, 1.347198, 2.220641",\ + "0.494484, 0.762586, 1.026632, 1.463638, 2.337097",\ + "0.814152, 1.082254, 1.346300, 1.783307, 2.656768",\ + "1.669372, 1.937473, 2.201514, 2.638509, 3.511946",\ + "0.455502, 0.725014, 0.987191, 1.424095, 2.297447",\ + "0.522393, 0.791906, 1.054087, 1.491001, 2.364373",\ + "0.638820, 0.908334, 1.170519, 1.607441, 2.480830",\ + "0.958488, 1.228002, 1.490188, 1.927111, 2.800500",\ + "1.813708, 2.083220, 2.345402, 2.782313, 3.655679",\ + "0.491381, 0.762750, 1.024109, 1.460966, 2.334005",\ + "0.558271, 0.829641, 1.091006, 1.527872, 2.400932",\ + "0.674699, 0.946069, 1.207438, 1.644312, 2.517388",\ + "0.994367, 1.265738, 1.527106, 1.963982, 2.837059",\ + "1.849586, 2.120956, 2.382320, 2.819183, 3.692237",\ + "0.819578, 1.126098, 1.375669, 1.810266, 2.679461",\ + "0.886469, 1.192990, 1.442565, 1.877173, 2.746387",\ + "1.002896, 1.309418, 1.558997, 1.993613, 2.862844",\ + "1.322564, 1.629086, 1.878666, 2.313282, 3.182515",\ + "2.177784, 2.484305, 2.733880, 3.168484, 4.037693"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.073031, 0.073031, 0.073033, 0.073040, 0.073054",\ + "0.188915, 0.188915, 0.188919, 0.188937, 0.188971",\ + "0.391815, 0.391816, 0.391824, 0.391849, 0.391899",\ + "0.949014, 0.949028, 0.949065, 0.949118, 0.949226",\ + "2.441330, 2.441330, 2.441334, 2.441343, 2.441361",\ + "0.073031, 0.073031, 0.073033, 0.073040, 0.073054",\ + "0.188915, 0.188915, 0.188919, 0.188937, 0.188971",\ + "0.391815, 0.391816, 0.391824, 0.391849, 0.391899",\ + "0.949014, 0.949028, 0.949065, 0.949118, 0.949226",\ + "2.441330, 2.441330, 2.441334, 2.441343, 2.441361",\ + "0.073031, 0.073031, 0.073033, 0.073040, 0.073054",\ + "0.188915, 0.188915, 0.188920, 0.188937, 0.188971",\ + "0.391815, 0.391816, 0.391824, 0.391849, 0.391899",\ + "0.949014, 0.949029, 0.949065, 0.949118, 0.949226",\ + "2.441330, 2.441330, 2.441334, 2.441343, 2.441361",\ + "0.073031, 0.073031, 0.073033, 0.073040, 0.073054",\ + "0.188915, 0.188915, 0.188920, 0.188937, 0.188971",\ + "0.391815, 0.391816, 0.391824, 0.391849, 0.391899",\ + "0.949014, 0.949029, 0.949065, 0.949119, 0.949226",\ + "2.441330, 2.441330, 2.441334, 2.441343, 2.441361",\ + "0.073031, 0.073031, 0.073033, 0.073040, 0.073054",\ + "0.188915, 0.188915, 0.188920, 0.188937, 0.188971",\ + "0.391816, 0.391816, 0.391824, 0.391849, 0.391899",\ + "0.949014, 0.949034, 0.949065, 0.949119, 0.949226",\ + "2.441330, 2.441331, 2.441334, 2.441343, 2.441361"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.262934, 0.448489, 0.641595, 0.948297, 1.539521",\ + "0.294346, 0.479902, 0.673008, 0.979711, 1.570936",\ + "0.346992, 0.532548, 0.725656, 1.032361, 1.623593",\ + "0.489407, 0.674962, 0.868069, 1.174772, 1.765997",\ + "0.868050, 1.053605, 1.246711, 1.553412, 2.144632",\ + "0.322845, 0.508317, 0.701440, 1.008066, 1.599138",\ + "0.354258, 0.539729, 0.732853, 1.039480, 1.630553",\ + "0.406904, 0.592376, 0.785500, 1.092130, 1.683210",\ + "0.549319, 0.734790, 0.927914, 1.234540, 1.825614",\ + "0.927962, 1.113433, 1.306556, 1.613180, 2.204249",\ + "0.455621, 0.640568, 0.833323, 1.139923, 1.730945",\ + "0.487034, 0.671981, 0.864736, 1.171337, 1.762361",\ + "0.539679, 0.724627, 0.917383, 1.223988, 1.815017",\ + "0.682094, 0.867041, 1.059797, 1.366398, 1.957422",\ + "1.060737, 1.245684, 1.438439, 1.745038, 2.336057",\ + "0.488779, 0.673866, 0.866553, 1.173003, 1.763806",\ + "0.520192, 0.705279, 0.897966, 1.204417, 1.795222",\ + "0.572837, 0.757925, 0.950613, 1.257067, 1.847878",\ + "0.715252, 0.900339, 1.093027, 1.399478, 1.990283",\ + "1.093896, 1.278982, 1.471669, 1.778118, 2.368918",\ + "0.790171, 0.979313, 1.170216, 1.476207, 2.066113",\ + "0.821584, 1.010726, 1.201629, 1.507621, 2.097529",\ + "0.874230, 1.063372, 1.254276, 1.560271, 2.150186",\ + "1.016645, 1.205787, 1.396689, 1.702681, 2.292590",\ + "1.395288, 1.584430, 1.775331, 2.081321, 2.671225"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.039012, 0.039013, 0.039015, 0.039021, 0.039035",\ + "0.090733, 0.090732, 0.090730, 0.090724, 0.090712",\ + "0.180377, 0.180379, 0.180385, 0.180400, 0.180432",\ + "0.429204, 0.429204, 0.429205, 0.429209, 0.429216",\ + "1.091688, 1.091683, 1.091668, 1.091627, 1.091540",\ + "0.039012, 0.039013, 0.039015, 0.039021, 0.039035",\ + "0.090733, 0.090732, 0.090730, 0.090724, 0.090712",\ + "0.180377, 0.180379, 0.180385, 0.180400, 0.180432",\ + "0.429204, 0.429204, 0.429205, 0.429209, 0.429216",\ + "1.091688, 1.091683, 1.091668, 1.091627, 1.091540",\ + "0.039012, 0.039013, 0.039015, 0.039021, 0.039035",\ + "0.090733, 0.090732, 0.090730, 0.090724, 0.090712",\ + "0.180377, 0.180379, 0.180385, 0.180400, 0.180432",\ + "0.429204, 0.429204, 0.429205, 0.429209, 0.429216",\ + "1.091688, 1.091683, 1.091668, 1.091627, 1.091540",\ + "0.039012, 0.039013, 0.039015, 0.039021, 0.039035",\ + "0.090733, 0.090732, 0.090730, 0.090724, 0.090712",\ + "0.180377, 0.180379, 0.180385, 0.180400, 0.180433",\ + "0.429204, 0.429204, 0.429205, 0.429209, 0.429216",\ + "1.091688, 1.091683, 1.091668, 1.091627, 1.091540",\ + "0.039012, 0.039013, 0.039015, 0.039021, 0.039035",\ + "0.090733, 0.090732, 0.090730, 0.090724, 0.090712",\ + "0.180378, 0.180379, 0.180385, 0.180400, 0.180433",\ + "0.429204, 0.429204, 0.429205, 0.429209, 0.429216",\ + "1.091687, 1.091683, 1.091668, 1.091627, 1.091540"); + } + + } /* end of arc clk_ast_rng_i_ast2padmux_o[4]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "970002.000000, 970002.062500, 970002.187500, 970002.500000, 970003.375000",\ + "970002.125000, 970002.187500, 970002.312500, 970002.625000, 970003.500000",\ + "970002.250000, 970002.312500, 970002.437500, 970002.750000, 970003.625000",\ + "970002.250000, 970002.312500, 970002.437500, 970002.750000, 970003.625000",\ + "970002.625000, 970002.687500, 970002.812500, 970003.125000, 970004.000000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189354, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189354, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189365, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189385, 0.392560, 0.950608, 2.441526",\ + "0.073824, 0.189425, 0.393252, 0.950608, 2.441526"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "970001.187500, 970001.187500, 970001.250000, 970001.437500, 970001.812500",\ + "970001.312500, 970001.312500, 970001.375000, 970001.562500, 970001.937500",\ + "970001.312500, 970001.312500, 970001.375000, 970001.562500, 970001.937500",\ + "970001.437500, 970001.437500, 970001.500000, 970001.687500, 970002.062500",\ + "970001.687500, 970001.687500, 970001.750000, 970001.937500, 970002.312500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497"); + } + + } /* end of arc clk_ast_tlul_i_ast2padmux_o[4]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.118063, 0.173160, 0.267375, 0.527316, 1.216798",\ + "0.205470, 0.260567, 0.354781, 0.614720, 1.304204",\ + "0.286205, 0.341346, 0.435579, 0.695608, 1.384949",\ + "0.343571, 0.398793, 0.493060, 0.753254, 1.442331",\ + "0.643636, 0.699058, 0.793671, 1.054205, 1.742813"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.055140, 0.149920, 0.315966, 0.770671, 1.992169",\ + "0.055140, 0.149920, 0.315966, 0.770671, 1.992169",\ + "0.055064, 0.149920, 0.315966, 0.770616, 1.992169",\ + "0.054924, 0.149920, 0.315966, 0.770514, 1.992169",\ + "0.054820, 0.149920, 0.315966, 0.770514, 1.988361"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.068977, 0.083624, 0.108789, 0.177707, 0.362145",\ + "0.157440, 0.172093, 0.197279, 0.266195, 0.450612",\ + "0.246166, 0.261189, 0.286407, 0.355291, 0.539679",\ + "0.308361, 0.324424, 0.349591, 0.418444, 0.602842",\ + "0.630702, 0.654723, 0.683267, 0.752219, 0.936438"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.015416, 0.041075, 0.085652, 0.207740, 0.535967",\ + "0.015763, 0.041089, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967"); + } + + } /* end of arc clk_ast_tlul_i_ast2padmux_o[4]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.231764, 0.298665, 0.415101, 0.734770, 1.589978",\ + "0.323073, 0.389976, 0.506413, 0.826082, 1.681288",\ + "0.433906, 0.500813, 0.617254, 0.936923, 1.792124",\ + "0.514021, 0.580932, 0.697376, 1.017045, 1.872241",\ + "0.917338, 0.984292, 1.100771, 1.420444, 2.275589"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073036, 0.188928, 0.391836, 0.949092, 2.441339",\ + "0.073037, 0.188930, 0.391839, 0.949098, 2.441340",\ + "0.073040, 0.188938, 0.391851, 0.949124, 2.441344",\ + "0.073043, 0.188945, 0.391861, 0.949145, 2.441347",\ + "0.073075, 0.189019, 0.391969, 0.949375, 2.441386"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.336061, 0.367493, 0.420201, 0.562554, 0.941151",\ + "0.422827, 0.454258, 0.506967, 0.649320, 1.027916",\ + "0.529568, 0.561000, 0.613708, 0.756061, 1.134658",\ + "0.742022, 0.773454, 0.826162, 0.968515, 1.347112",\ + "1.127927, 1.159358, 1.212067, 1.354419, 1.733016"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039144, 0.090610, 0.180696, 0.429275, 1.090836"); + } + + } /* end of arc clk_ast_tlul_i_ast2padmux_o[4]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.221966, 0.288856, 0.405284, 0.724952, 1.580171",\ + "0.311631, 0.378522, 0.494949, 0.814617, 1.669837",\ + "0.414337, 0.481231, 0.597661, 0.917329, 1.772546",\ + "0.488653, 0.555550, 0.671983, 0.991651, 1.846864",\ + "0.868804, 0.935731, 1.052188, 1.371858, 2.227036"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073032, 0.188915, 0.391815, 0.949015, 2.441330",\ + "0.073032, 0.188915, 0.391815, 0.949022, 2.441330",\ + "0.073032, 0.188916, 0.391818, 0.949053, 2.441332",\ + "0.073033, 0.188921, 0.391826, 0.949069, 2.441335",\ + "0.073055, 0.188972, 0.391900, 0.949227, 2.441361"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.247879, 0.279292, 0.331938, 0.474353, 0.852996",\ + "0.337796, 0.369209, 0.421855, 0.564270, 0.942913",\ + "0.451084, 0.482497, 0.535144, 0.677558, 1.056200",\ + "0.662499, 0.693912, 0.746561, 0.888973, 1.267614",\ + "1.032523, 1.063938, 1.116591, 1.258999, 1.637636"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039012, 0.090733, 0.180379, 0.429204, 1.091684",\ + "0.039012, 0.090733, 0.180379, 0.429204, 1.091684",\ + "0.039014, 0.090731, 0.180383, 0.429205, 1.091673",\ + "0.039019, 0.090727, 0.180394, 0.429207, 1.091643",\ + "0.039029, 0.090717, 0.180418, 0.429213, 1.091579"); + } + + } /* end of arc clk_ast_tlul_i_ast2padmux_o[4]_una_min*/ + + timing () { + related_pin : "fla_obs_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.111862, 0.178517, 0.294685, 0.611498, 1.461412",\ + "0.196887, 0.263820, 0.381200, 0.697836, 1.546758",\ + "0.280874, 0.348002, 0.465333, 0.783744, 1.631498",\ + "0.419192, 0.490016, 0.607541, 0.927454, 1.774732",\ + "0.629434, 0.713469, 0.835221, 1.155234, 2.004311"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067759, 0.184639, 0.382501, 0.937507, 2.417566",\ + "0.067759, 0.184639, 0.382501, 0.937507, 2.418347",\ + "0.069174, 0.184639, 0.382586, 0.937507, 2.418347",\ + "0.077831, 0.187460, 0.383300, 0.940319, 2.418347",\ + "0.099054, 0.205738, 0.390315, 0.940320, 2.425200"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.103322, 0.134506, 0.187130, 0.329612, 0.708263",\ + "0.188196, 0.219801, 0.272413, 0.414932, 0.793505",\ + "0.281500, 0.317246, 0.369943, 0.512302, 0.890520",\ + "0.433568, 0.478875, 0.537406, 0.680993, 1.058708",\ + "0.668936, 0.733428, 0.809479, 0.962224, 1.340585"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040521, 0.090274, 0.180244, 0.428614, 1.092440",\ + "0.042863, 0.090977, 0.180401, 0.428614, 1.092696",\ + "0.054661, 0.097371, 0.180899, 0.428690, 1.092793",\ + "0.077190, 0.120374, 0.194930, 0.430280, 1.092793",\ + "0.118581, 0.174509, 0.240947, 0.445113, 1.092793"); + } + + } /* end of arc fla_obs_i[4]_ast2padmux_o[4]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "fla_obs_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.110629, 0.177262, 0.293339, 0.610165, 1.460154",\ + "0.194795, 0.261696, 0.378936, 0.695592, 1.544629",\ + "0.275980, 0.343081, 0.460479, 0.778514, 1.626463",\ + "0.408884, 0.478137, 0.595421, 0.915532, 1.762573",\ + "0.610985, 0.691263, 0.810230, 1.128954, 1.977655"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067834, 0.183634, 0.382402, 0.934951, 2.414331",\ + "0.067834, 0.183634, 0.382402, 0.934951, 2.414331",\ + "0.068631, 0.183634, 0.382540, 0.936478, 2.414331",\ + "0.075251, 0.185541, 0.383090, 0.939701, 2.414331",\ + "0.093347, 0.198994, 0.384563, 0.939701, 2.425563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.077370, 0.108647, 0.161299, 0.303710, 0.682406",\ + "0.166391, 0.197521, 0.250129, 0.392651, 0.771277",\ + "0.253394, 0.288299, 0.340979, 0.483371, 0.861661",\ + "0.395347, 0.439383, 0.496795, 0.640121, 1.017884",\ + "0.615736, 0.679130, 0.754042, 0.905113, 1.283136"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039363, 0.090228, 0.180124, 0.428312, 1.092155",\ + "0.041196, 0.090228, 0.180315, 0.428312, 1.092511",\ + "0.052267, 0.096073, 0.180798, 0.428601, 1.092511",\ + "0.074482, 0.116813, 0.192279, 0.430033, 1.092511",\ + "0.116096, 0.171326, 0.236992, 0.441817, 1.092511"); + } + + } /* end of arc fla_obs_i[4]_ast2padmux_o[4]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[10]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.059999, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.443642, 0.510546, 0.626985, 0.946654, 1.801858",\ + "0.465905, 0.532810, 0.649248, 0.968917, 1.824121",\ + "0.521995, 0.588899, 0.705338, 1.025007, 1.880211",\ + "0.620162, 0.687066, 0.803505, 1.123173, 1.978378",\ + "1.134534, 1.201443, 1.317885, 1.637554, 2.492753"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.059999, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073042, 0.188941, 0.391856, 0.949133, 2.441345"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.053775, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.490585, 0.522017, 0.574725, 0.717078, 1.095675",\ + "0.512119, 0.543551, 0.596259, 0.738612, 1.117209",\ + "0.579334, 0.610765, 0.663474, 0.805826, 1.184423",\ + "0.689604, 0.721035, 0.773743, 0.916096, 1.294693",\ + "1.246693, 1.278125, 1.330833, 1.473186, 1.851783"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.053775, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837"); + } + + } /* end of arc obs_ctrl_o[10]_ast2padmux_o[4]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[10]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.056753, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.412827, 0.479717, 0.596144, 0.915812, 1.771032",\ + "0.433604, 0.500495, 0.616922, 0.936590, 1.791810",\ + "0.491196, 0.558086, 0.674513, 0.994181, 1.849401",\ + "0.589141, 0.656031, 0.772458, 1.092126, 1.947346",\ + "1.077990, 1.144880, 1.261307, 1.580975, 2.436195"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.056753, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044579, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.392866, 0.424278, 0.476924, 0.619339, 0.997982",\ + "0.410271, 0.441684, 0.494330, 0.636744, 1.015388",\ + "0.482841, 0.514253, 0.566899, 0.709314, 1.087957",\ + "0.595475, 0.626888, 0.679534, 0.821949, 1.200592",\ + "1.122503, 1.153916, 1.206562, 1.348976, 1.727620"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044579, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039012, 0.090733, 0.180378, 0.429204, 1.091686",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091686",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091686",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091686",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091686"); + } + + } /* end of arc obs_ctrl_o[10]_ast2padmux_o[4]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[10]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.059999, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.437382, 0.468814, 0.521522, 0.663875, 1.042472",\ + "0.462451, 0.493883, 0.546591, 0.688944, 1.067541",\ + "0.531700, 0.563132, 0.615840, 0.758193, 1.136790",\ + "0.655903, 0.687335, 0.740043, 0.882396, 1.260993",\ + "1.286840, 1.318272, 1.370980, 1.513333, 1.891930"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.059999, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.053775, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.675759, 0.742664, 0.859102, 1.178771, 2.033976",\ + "0.696234, 0.763138, 0.879577, 1.199246, 2.054450",\ + "0.754790, 0.821694, 0.938133, 1.257802, 2.113006",\ + "0.864334, 0.931238, 1.047677, 1.367346, 2.222550",\ + "1.641748, 1.708657, 1.825099, 2.144769, 2.999968"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.053775, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073042, 0.188941, 0.391856, 0.949133, 2.441345"); + } + + } /* end of arc obs_ctrl_o[10]_ast2padmux_o[4]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[10]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.056753, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.284420, 0.315833, 0.368479, 0.510893, 0.889537",\ + "0.308019, 0.339432, 0.392078, 0.534493, 0.913136",\ + "0.380089, 0.411502, 0.464148, 0.606562, 0.985206",\ + "0.506286, 0.537698, 0.590344, 0.732759, 1.111402",\ + "1.081944, 1.113356, 1.166002, 1.308417, 1.687060"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.056753, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039012, 0.090733, 0.180378, 0.429204, 1.091686",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091686",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091686",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091686",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091686"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044579, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.601029, 0.667919, 0.784346, 1.104014, 1.959234",\ + "0.617835, 0.684726, 0.801153, 1.120821, 1.976041",\ + "0.680343, 0.747234, 0.863661, 1.183329, 2.038548",\ + "0.789694, 0.856584, 0.973011, 1.292679, 2.147899",\ + "1.539211, 1.606101, 1.722528, 2.042196, 2.897416"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044579, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330"); + } + + } /* end of arc obs_ctrl_o[10]_ast2padmux_o[4]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[11]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.034927, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.180024, 0.211452, 0.264149, 0.406513, 0.785119",\ + "0.193406, 0.224834, 0.277531, 0.419896, 0.798501",\ + "0.275919, 0.307349, 0.360051, 0.502410, 0.881011",\ + "0.400910, 0.432352, 0.485095, 0.627414, 1.005985",\ + "0.975060, 1.010086, 1.063144, 1.205732, 1.584486"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.034927, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039119, 0.090633, 0.180636, 0.429262, 1.090996",\ + "0.039119, 0.090633, 0.180636, 0.429262, 1.090996",\ + "0.039132, 0.090633, 0.180667, 0.429269, 1.090996",\ + "0.039215, 0.090633, 0.180868, 0.429314, 1.090996",\ + "0.049347, 0.094034, 0.180868, 0.429355, 1.091896"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037147, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.465437, 0.532662, 0.649281, 0.969044, 1.824018",\ + "0.477695, 0.544920, 0.661539, 0.981302, 1.836276",\ + "0.541916, 0.609140, 0.725760, 1.045521, 1.900495",\ + "0.644626, 0.711856, 0.828474, 1.148242, 2.003221",\ + "1.319722, 1.387140, 1.503696, 1.823662, 2.678811"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037147, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073817, 0.189281, 0.392442, 0.950607, 2.441526",\ + "0.073817, 0.189281, 0.392442, 0.950607, 2.441526",\ + "0.073817, 0.189282, 0.392442, 0.950607, 2.441526",\ + "0.073862, 0.189282, 0.392442, 0.950619, 2.441526",\ + "0.075399, 0.189282, 0.392442, 0.951039, 2.441526"); + } + + } /* end of arc obs_ctrl_o[11]_ast2padmux_o[4]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[11]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.030664, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.159139, 0.190553, 0.243202, 0.385613, 0.764254",\ + "0.170514, 0.201928, 0.254577, 0.396989, 0.775629",\ + "0.255576, 0.286993, 0.339652, 0.482053, 0.860686",\ + "0.379908, 0.411340, 0.464049, 0.606401, 0.984998",\ + "0.945167, 0.979651, 1.032663, 1.175209, 1.553933"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.030664, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039020, 0.090609, 0.180397, 0.429208, 1.090831",\ + "0.039020, 0.090609, 0.180397, 0.429208, 1.090831",\ + "0.039042, 0.090609, 0.180449, 0.429220, 1.090831",\ + "0.039144, 0.090609, 0.180675, 0.429276, 1.090831",\ + "0.047820, 0.093501, 0.180675, 0.429352, 1.091629"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.028580, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.461683, 0.528880, 0.645509, 0.965243, 1.820192",\ + "0.470327, 0.537524, 0.654153, 0.973887, 1.828836",\ + "0.538174, 0.605371, 0.721999, 1.041733, 1.896681",\ + "0.640782, 0.707985, 0.824611, 1.144351, 1.999304",\ + "1.312551, 1.379913, 1.496487, 1.816396, 2.671496"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.028580, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073594, 0.189124, 0.392388, 0.950544, 2.441454",\ + "0.073594, 0.189124, 0.392388, 0.950544, 2.441454",\ + "0.073594, 0.189124, 0.392388, 0.950544, 2.441454",\ + "0.073633, 0.189124, 0.392388, 0.950557, 2.441454",\ + "0.074954, 0.189124, 0.392388, 0.950917, 2.441454"); + } + + } /* end of arc obs_ctrl_o[11]_ast2padmux_o[4]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.500858, 0.568082, 0.684702, 1.004464, 1.859437",\ + "0.516623, 0.583848, 0.700467, 1.020230, 1.875203",\ + "0.590734, 0.657958, 0.774578, 1.094340, 1.949314",\ + "0.681946, 0.749171, 0.865790, 1.185553, 2.040526",\ + "1.108576, 1.175805, 1.292423, 1.612190, 2.467167"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073816, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073848, 0.189277, 0.392440, 0.950615, 2.441524"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.275118, 0.306284, 0.358903, 0.501398, 0.880041",\ + "0.290749, 0.321915, 0.374533, 0.517029, 0.895671",\ + "0.363703, 0.394869, 0.447488, 0.589983, 0.968626",\ + "0.474794, 0.505959, 0.558577, 0.701073, 1.079716",\ + "1.013269, 1.044421, 1.097036, 1.239541, 1.618177"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040759, 0.090626, 0.180653, 0.429266, 1.092499",\ + "0.040922, 0.090525, 0.180916, 0.429325, 1.092539"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[4]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.337608, 0.404302, 0.520641, 0.837429, 1.687203",\ + "0.349939, 0.416633, 0.532972, 0.849760, 1.699534",\ + "0.408752, 0.475446, 0.591785, 0.908573, 1.758347",\ + "0.496083, 0.562777, 0.679117, 0.995905, 1.845678",\ + "0.949078, 1.015776, 1.132136, 1.448920, 2.298678"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184560, 0.382485, 0.937098, 2.417677",\ + "0.067604, 0.184551, 0.382483, 0.937052, 2.417689"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.209985, 0.241400, 0.294052, 0.436461, 0.815099",\ + "0.221857, 0.253271, 0.305923, 0.448332, 0.826970",\ + "0.304351, 0.335766, 0.388417, 0.530826, 0.909465",\ + "0.409226, 0.440642, 0.493298, 0.635702, 1.014338",\ + "0.909442, 0.940877, 0.993596, 1.135938, 1.514527"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039034, 0.090327, 0.180161, 0.428971, 1.091542",\ + "0.039166, 0.090324, 0.180166, 0.428948, 1.090692"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[4]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.287803, 0.318969, 0.371587, 0.514083, 0.892726",\ + "0.303569, 0.334734, 0.387353, 0.529848, 0.908491",\ + "0.378810, 0.409975, 0.462594, 0.605089, 0.983732",\ + "0.473884, 0.505049, 0.557668, 0.700163, 1.078806",\ + "0.918190, 0.949342, 1.001956, 1.144462, 1.523098"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040759, 0.090626, 0.180653, 0.429266, 1.092499",\ + "0.040922, 0.090525, 0.180916, 0.429325, 1.092539"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.376755, 0.443500, 0.560063, 0.876818, 1.726409",\ + "0.392417, 0.459162, 0.575725, 0.892480, 1.742071",\ + "0.467424, 0.534169, 0.650732, 0.967487, 1.817078",\ + "0.562603, 0.629351, 0.745928, 1.062681, 1.912261",\ + "1.006927, 1.073706, 1.190415, 1.507149, 2.356620"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073816, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073848, 0.189277, 0.392440, 0.950615, 2.441524"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[4]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.264318, 0.295567, 0.348210, 0.490643, 0.869326",\ + "0.278489, 0.309737, 0.362381, 0.504814, 0.883496",\ + "0.355325, 0.386573, 0.439217, 0.581649, 0.960332",\ + "0.450369, 0.481617, 0.534260, 0.676693, 1.055376",\ + "0.893831, 0.925076, 0.977718, 1.120154, 1.498834"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039034, 0.090327, 0.180161, 0.428971, 1.091542",\ + "0.039166, 0.090324, 0.180166, 0.428948, 1.090692"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.373701, 0.440395, 0.556734, 0.873522, 1.723296",\ + "0.385572, 0.452266, 0.568605, 0.885393, 1.735167",\ + "0.464371, 0.531065, 0.647404, 0.964192, 1.813966",\ + "0.559385, 0.626079, 0.742420, 1.059207, 1.908981",\ + "1.002245, 1.068944, 1.185303, 1.502088, 2.351846"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184560, 0.382485, 0.937098, 2.417677",\ + "0.067604, 0.184551, 0.382483, 0.937052, 2.417689"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[4]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.337998, 0.404744, 0.521308, 0.838063, 1.687653",\ + "0.353177, 0.419923, 0.536487, 0.853242, 1.702832",\ + "0.412195, 0.478941, 0.595505, 0.912260, 1.761850",\ + "0.508449, 0.575199, 0.691783, 1.008535, 1.858109",\ + "0.997007, 1.063817, 1.180658, 1.497372, 2.346736"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073812, 0.189282, 0.392442, 0.950605, 2.441527",\ + "0.073812, 0.189282, 0.392442, 0.950605, 2.441527",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073887, 0.189271, 0.392439, 0.950626, 2.441522",\ + "0.075818, 0.189005, 0.392348, 0.951153, 2.441399"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.272032, 0.303198, 0.355817, 0.498312, 0.876955",\ + "0.289891, 0.321056, 0.373675, 0.516170, 0.894813",\ + "0.360955, 0.392121, 0.444739, 0.587235, 0.965878",\ + "0.471378, 0.502542, 0.555160, 0.697656, 1.076298",\ + "1.004117, 1.035227, 1.087829, 1.230366, 1.608983"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090633, 0.180635, 0.429262, 1.092497",\ + "0.040752, 0.090633, 0.180635, 0.429262, 1.092497",\ + "0.040752, 0.090633, 0.180666, 0.429269, 1.092497",\ + "0.040771, 0.090633, 0.180871, 0.429315, 1.092502",\ + "0.049622, 0.094130, 0.180871, 0.429356, 1.092666"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[4]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.329221, 0.395915, 0.512254, 0.829041, 1.678816",\ + "0.344592, 0.411286, 0.527624, 0.844412, 1.694187",\ + "0.406780, 0.473474, 0.589813, 0.906601, 1.756375",\ + "0.502234, 0.568932, 0.685288, 1.002073, 1.851833",\ + "0.957622, 1.024367, 1.140929, 1.457685, 2.307276"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067607, 0.184553, 0.382483, 0.937060, 2.417687",\ + "0.067439, 0.184458, 0.382464, 0.936568, 2.417820"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.231492, 0.262740, 0.315383, 0.457816, 0.836499",\ + "0.245351, 0.276600, 0.329243, 0.471676, 0.850359",\ + "0.320124, 0.351372, 0.404016, 0.546449, 0.925131",\ + "0.430166, 0.461410, 0.514053, 0.656489, 1.035169",\ + "0.955028, 0.986237, 1.038869, 1.181331, 1.559995"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039018, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039018, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039041, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039146, 0.090294, 0.180167, 0.428752, 1.090822",\ + "0.040211, 0.090294, 0.180212, 0.428752, 1.091676"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[4]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.176901, 0.208329, 0.261026, 0.403390, 0.781996",\ + "0.196158, 0.227585, 0.280282, 0.422647, 0.801252",\ + "0.273304, 0.304734, 0.357436, 0.499795, 0.878396",\ + "0.397207, 0.428649, 0.481392, 0.623711, 1.002282",\ + "0.961790, 0.996912, 1.049978, 1.192575, 1.571334"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090633, 0.180635, 0.429262, 1.092497",\ + "0.040752, 0.090633, 0.180635, 0.429262, 1.092497",\ + "0.040752, 0.090633, 0.180666, 0.429269, 1.092497",\ + "0.040771, 0.090633, 0.180871, 0.429315, 1.092502",\ + "0.049622, 0.094130, 0.180871, 0.429356, 1.092666"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.455825, 0.523049, 0.639668, 0.959430, 1.814404",\ + "0.468963, 0.536187, 0.652807, 0.972569, 1.827542",\ + "0.531289, 0.598514, 0.715133, 1.034896, 1.889869",\ + "0.640154, 0.707387, 0.824004, 1.143775, 1.998757",\ + "1.332501, 1.399969, 1.516508, 1.836528, 2.691724"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073812, 0.189282, 0.392442, 0.950605, 2.441527",\ + "0.073812, 0.189282, 0.392442, 0.950605, 2.441527",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073887, 0.189271, 0.392439, 0.950626, 2.441522",\ + "0.075818, 0.189005, 0.392348, 0.951153, 2.441399"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[4]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.155833, 0.187247, 0.239896, 0.382308, 0.760949",\ + "0.173482, 0.204896, 0.257545, 0.399957, 0.778598",\ + "0.252964, 0.284381, 0.337040, 0.479441, 0.858074",\ + "0.376196, 0.407628, 0.460337, 0.602689, 0.981285",\ + "0.931678, 0.966257, 1.019278, 1.161831, 1.540560"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039018, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039018, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039041, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039146, 0.090294, 0.180167, 0.428752, 1.090822",\ + "0.040211, 0.090294, 0.180212, 0.428752, 1.091676"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.452081, 0.519278, 0.635907, 0.955640, 1.810589",\ + "0.461862, 0.529059, 0.645688, 0.965421, 1.820370",\ + "0.527542, 0.594739, 0.711368, 1.031102, 1.886050",\ + "0.636262, 0.703467, 0.820093, 1.139835, 1.994791",\ + "1.324350, 1.391756, 1.508316, 1.828270, 2.683409"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067607, 0.184553, 0.382483, 0.937060, 2.417687",\ + "0.067439, 0.184458, 0.382464, 0.936568, 2.417820"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[4]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.325984, 0.393209, 0.509828, 0.829592, 1.684567",\ + "0.341732, 0.408957, 0.525576, 0.845340, 1.700314",\ + "0.405621, 0.472847, 0.589466, 0.909229, 1.764204",\ + "0.483984, 0.551208, 0.667827, 0.987590, 1.842564",\ + "0.876566, 0.943791, 1.060410, 1.380173, 2.235147"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189281, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189281, 0.392442, 0.950608, 2.441526"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.207560, 0.238992, 0.291700, 0.434053, 0.812650",\ + "0.223441, 0.254873, 0.307582, 0.449934, 0.828531",\ + "0.292964, 0.324396, 0.377105, 0.519457, 0.898054",\ + "0.382304, 0.413736, 0.466444, 0.608797, 0.987394",\ + "0.808201, 0.839636, 0.892354, 1.034697, 1.413287"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180696, 0.429275, 1.092497",\ + "0.040785, 0.090610, 0.180744, 0.429286, 1.092505"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[4]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.298728, 0.365697, 0.482189, 0.801862, 1.656989",\ + "0.312838, 0.379807, 0.496299, 0.815972, 1.671100",\ + "0.378416, 0.445385, 0.561877, 0.881551, 1.736677",\ + "0.456978, 0.523948, 0.640441, 0.960115, 1.815240",\ + "0.852482, 0.919491, 1.036016, 1.355692, 2.210772"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067586, 0.184541, 0.382481, 0.936998, 2.417704"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.185526, 0.216941, 0.269593, 0.412001, 0.790640",\ + "0.197528, 0.228943, 0.281595, 0.424004, 0.802642",\ + "0.270950, 0.302365, 0.355017, 0.497425, 0.876064",\ + "0.360375, 0.391790, 0.444442, 0.586850, 0.965489",\ + "0.786063, 0.817479, 0.870138, 1.012540, 1.391174"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039039, 0.090322, 0.180169, 0.428938, 1.091513"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[4]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.314064, 0.345229, 0.397848, 0.540343, 0.918986",\ + "0.329859, 0.361025, 0.413644, 0.556139, 0.934782",\ + "0.407724, 0.438890, 0.491508, 0.634004, 1.012646",\ + "0.508778, 0.539944, 0.592562, 0.735058, 1.113701",\ + "0.984655, 1.015818, 1.068436, 1.210933, 1.589574"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180696, 0.429275, 1.092497",\ + "0.040785, 0.090610, 0.180744, 0.429286, 1.092505"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.596327, 0.663552, 0.780171, 1.099935, 1.954909",\ + "0.609131, 0.676356, 0.792975, 1.112739, 1.967713",\ + "0.677113, 0.744339, 0.860958, 1.180721, 2.035696",\ + "0.788810, 0.856034, 0.972654, 1.292416, 2.147390",\ + "1.273667, 1.340892, 1.457511, 1.777274, 2.632248"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189281, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189281, 0.392442, 0.950608, 2.441526"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[4]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.262848, 0.294262, 0.346915, 0.489323, 0.867962",\ + "0.276998, 0.308413, 0.361065, 0.503474, 0.882112",\ + "0.356726, 0.388141, 0.440793, 0.583202, 0.961840",\ + "0.457948, 0.489362, 0.542015, 0.684423, 1.063061",\ + "0.929777, 0.961193, 1.013852, 1.156254, 1.534888"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039039, 0.090322, 0.180169, 0.428938, 1.091513"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.437011, 0.503705, 0.620045, 0.936832, 1.786606",\ + "0.446608, 0.513302, 0.629642, 0.946429, 1.796203",\ + "0.517780, 0.584475, 0.700814, 1.017602, 1.867376",\ + "0.629396, 0.696091, 0.812430, 1.129218, 1.978992",\ + "1.131911, 1.198614, 1.314996, 1.631778, 2.481517"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067586, 0.184541, 0.382481, 0.936998, 2.417704"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[4]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[7]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.060518, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.315427, 0.346593, 0.399212, 0.541707, 0.920350",\ + "0.342146, 0.373312, 0.425930, 0.568426, 0.947068",\ + "0.410184, 0.441350, 0.493968, 0.636464, 1.015106",\ + "0.512927, 0.544093, 0.596711, 0.739207, 1.117850",\ + "0.999580, 1.030743, 1.083361, 1.225858, 1.604500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.060518, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180697, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180697, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180697, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180732, 0.429283, 1.092497",\ + "0.042004, 0.091469, 0.180867, 0.429340, 1.092504"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.051005, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.597332, 0.664558, 0.781177, 1.100940, 1.955915",\ + "0.618079, 0.685305, 0.801924, 1.121688, 1.976662",\ + "0.683404, 0.750630, 0.867249, 1.187012, 2.041987",\ + "0.797603, 0.864828, 0.981447, 1.301210, 2.156184",\ + "1.375793, 1.443018, 1.559637, 1.879400, 2.734374"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.051005, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950609, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073823, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073819, 0.189281, 0.392442, 0.950607, 2.441526",\ + "0.073817, 0.189281, 0.392442, 0.950607, 2.441526"); + } + + } /* end of arc obs_ctrl_o[7]_ast2padmux_o[4]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[7]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.049671, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.150722, 0.182137, 0.234789, 0.377197, 0.755836",\ + "0.171205, 0.202620, 0.255272, 0.397681, 0.776319",\ + "0.246518, 0.277932, 0.330585, 0.472993, 0.851631",\ + "0.352324, 0.383738, 0.436391, 0.578799, 0.957437",\ + "0.825559, 0.856975, 0.909634, 1.052036, 1.430670"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.049671, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039038, 0.090323, 0.180168, 0.428941, 1.091519"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040467, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.277343, 0.344312, 0.460804, 0.780477, 1.635605",\ + "0.293355, 0.360323, 0.476815, 0.796489, 1.651616",\ + "0.366113, 0.433085, 0.549579, 0.869253, 1.724376",\ + "0.487008, 0.554003, 0.670516, 0.990192, 1.845287",\ + "1.141953, 1.209132, 1.325766, 1.645481, 2.500414"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040467, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067601, 0.184550, 0.382483, 0.937044, 2.417691"); + } + + } /* end of arc obs_ctrl_o[7]_ast2padmux_o[4]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[8]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045711, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.700503, 0.767407, 0.883846, 1.203515, 2.058719",\ + "0.718853, 0.785757, 0.902195, 1.221864, 2.077069",\ + "0.789289, 0.856194, 0.972632, 1.292301, 2.147506",\ + "0.881295, 0.948199, 1.064638, 1.384307, 2.239511",\ + "1.366874, 1.433786, 1.550230, 1.869900, 2.725095"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045711, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073043, 0.188945, 0.391861, 0.949146, 2.441348"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044476, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.488066, 0.519497, 0.572205, 0.714558, 1.093155",\ + "0.505493, 0.536925, 0.589633, 0.731986, 1.110583",\ + "0.582890, 0.614322, 0.667030, 0.809383, 1.187980",\ + "0.691218, 0.722650, 0.775358, 0.917711, 1.296308",\ + "1.240839, 1.272271, 1.324979, 1.467332, 1.845928"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044476, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837"); + } + + } /* end of arc obs_ctrl_o[8]_ast2padmux_o[4]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[8]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.041900, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.636502, 0.703393, 0.819820, 1.139488, 1.994708",\ + "0.653118, 0.720008, 0.836435, 1.156103, 2.011323",\ + "0.727479, 0.794369, 0.910796, 1.230464, 2.085684",\ + "0.821960, 0.888850, 1.005277, 1.324945, 2.180165",\ + "1.269718, 1.336608, 1.453035, 1.772703, 2.627923"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.041900, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035639, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.340324, 0.371736, 0.424382, 0.566797, 0.945440",\ + "0.353670, 0.385083, 0.437728, 0.580143, 0.958786",\ + "0.435082, 0.466495, 0.519140, 0.661555, 1.040198",\ + "0.544387, 0.575800, 0.628446, 0.770861, 1.149504",\ + "1.068007, 1.099420, 1.152066, 1.294481, 1.673124"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035639, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039012, 0.090733, 0.180378, 0.429204, 1.091686",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091686",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091686",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091686",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091686"); + } + + } /* end of arc obs_ctrl_o[8]_ast2padmux_o[4]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[8]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045711, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.524400, 0.555831, 0.608540, 0.750893, 1.129489",\ + "0.542749, 0.574181, 0.626889, 0.769242, 1.147839",\ + "0.616605, 0.648037, 0.700745, 0.843098, 1.221695",\ + "0.714879, 0.746311, 0.799019, 0.941372, 1.319969",\ + "1.235698, 1.267130, 1.319839, 1.462191, 1.840788"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045711, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044476, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.651244, 0.718149, 0.834587, 1.154256, 2.009460",\ + "0.663867, 0.730771, 0.847209, 1.166878, 2.022083",\ + "0.718674, 0.785579, 0.902017, 1.221686, 2.076890",\ + "0.820628, 0.887532, 1.003971, 1.323640, 2.178844",\ + "1.548479, 1.615391, 1.731835, 2.051504, 2.906700"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044476, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073043, 0.188945, 0.391861, 0.949146, 2.441348"); + } + + } /* end of arc obs_ctrl_o[8]_ast2padmux_o[4]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[8]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.041900, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.305082, 0.336495, 0.389141, 0.531556, 0.910199",\ + "0.321682, 0.353095, 0.405741, 0.548156, 0.926799",\ + "0.400692, 0.432104, 0.484750, 0.627165, 1.005808",\ + "0.527571, 0.558983, 0.611629, 0.754044, 1.132687",\ + "1.082115, 1.113528, 1.166173, 1.308588, 1.687232"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.041900, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039012, 0.090733, 0.180378, 0.429204, 1.091686",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091686",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091686",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091686",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091686"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035639, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.456335, 0.523226, 0.639653, 0.959321, 1.814541",\ + "0.469682, 0.536572, 0.652999, 0.972667, 1.827887",\ + "0.547821, 0.614711, 0.731138, 1.050806, 1.906026",\ + "0.649000, 0.715890, 0.832317, 1.151985, 2.007205",\ + "1.120855, 1.187745, 1.304172, 1.623840, 2.479060"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035639, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330"); + } + + } /* end of arc obs_ctrl_o[8]_ast2padmux_o[4]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[9]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.046138, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.712314, 0.779218, 0.895657, 1.215326, 2.070530",\ + "0.730867, 0.797771, 0.914210, 1.233879, 2.089083",\ + "0.803565, 0.870469, 0.986908, 1.306577, 2.161781",\ + "0.898790, 0.965694, 1.082133, 1.401802, 2.257006",\ + "1.355292, 1.422199, 1.538640, 1.858309, 2.713511"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.046138, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073040, 0.188938, 0.391851, 0.949122, 2.441344"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044715, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.494441, 0.525873, 0.578581, 0.720934, 1.099531",\ + "0.511983, 0.543415, 0.596123, 0.738476, 1.117073",\ + "0.589312, 0.620744, 0.673452, 0.815805, 1.194402",\ + "0.698758, 0.730189, 0.782897, 0.925250, 1.303847",\ + "1.224584, 1.256016, 1.308724, 1.451077, 1.829674"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044715, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837"); + } + + } /* end of arc obs_ctrl_o[9]_ast2padmux_o[4]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[9]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.042344, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.668630, 0.735520, 0.851947, 1.171615, 2.026835",\ + "0.685451, 0.752341, 0.868768, 1.188436, 2.043656",\ + "0.759882, 0.826773, 0.943200, 1.262868, 2.118088",\ + "0.855138, 0.922028, 1.038455, 1.358123, 2.213343",\ + "1.307789, 1.374679, 1.491106, 1.810774, 2.665994"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.042344, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035869, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.361796, 0.393209, 0.445854, 0.588269, 0.966913",\ + "0.375252, 0.406665, 0.459311, 0.601726, 0.980369",\ + "0.456673, 0.488086, 0.540731, 0.683146, 1.061790",\ + "0.566647, 0.598060, 0.650706, 0.793121, 1.171764",\ + "1.092083, 1.123496, 1.176142, 1.318556, 1.697200"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035869, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039012, 0.090733, 0.180378, 0.429204, 1.091686",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091686",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091686",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091686",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091686"); + } + + } /* end of arc obs_ctrl_o[9]_ast2padmux_o[4]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[9]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.046138, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.528266, 0.559698, 0.612406, 0.754759, 1.133356",\ + "0.546819, 0.578250, 0.630959, 0.773312, 1.151908",\ + "0.620877, 0.652309, 0.705017, 0.847370, 1.225967",\ + "0.719978, 0.751410, 0.804118, 0.946471, 1.325068",\ + "1.187533, 1.218965, 1.271673, 1.414026, 1.792623"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.046138, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044715, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.604133, 0.671037, 0.787476, 1.107145, 1.962349",\ + "0.616822, 0.683727, 0.800165, 1.119834, 1.975038",\ + "0.671505, 0.738410, 0.854848, 1.174517, 2.029721",\ + "0.774589, 0.841493, 0.957932, 1.277601, 2.132805",\ + "1.473004, 1.539911, 1.656352, 1.976021, 2.831222"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044715, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073040, 0.188938, 0.391851, 0.949122, 2.441344"); + } + + } /* end of arc obs_ctrl_o[9]_ast2padmux_o[4]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[9]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.042344, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.284809, 0.316222, 0.368868, 0.511283, 0.889926",\ + "0.301623, 0.333036, 0.385681, 0.528096, 0.906739",\ + "0.380088, 0.411501, 0.464146, 0.606561, 0.985205",\ + "0.509697, 0.541110, 0.593756, 0.736170, 1.114814",\ + "1.092277, 1.123690, 1.176336, 1.318751, 1.697394"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.042344, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039012, 0.090733, 0.180378, 0.429204, 1.091686",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091686",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091686",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091686",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091686"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035869, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.463612, 0.530502, 0.646929, 0.966597, 1.821817",\ + "0.477068, 0.543958, 0.660386, 0.980054, 1.835274",\ + "0.555357, 0.622247, 0.738674, 1.058342, 1.913562",\ + "0.655033, 0.721923, 0.838350, 1.158018, 2.013238",\ + "1.119877, 1.186768, 1.303195, 1.622863, 2.478083"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035869, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330"); + } + + } /* end of arc obs_ctrl_o[9]_ast2padmux_o[4]_inv_min*/ + + timing () { + related_pin : "otm_obs_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.123879, 0.190820, 0.307288, 0.626960, 1.482121",\ + "0.210891, 0.277978, 0.394567, 0.714249, 1.569235",\ + "0.301781, 0.369068, 0.485667, 0.805496, 1.660526",\ + "0.453978, 0.523120, 0.640034, 0.960158, 1.815427",\ + "0.695902, 0.774527, 0.893732, 1.214148, 2.069560"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073065, 0.188997, 0.391936, 0.949305, 2.441374",\ + "0.073175, 0.189249, 0.392304, 0.950092, 2.441498",\ + "0.074330, 0.189249, 0.392418, 0.950747, 2.441498",\ + "0.079436, 0.191164, 0.392505, 0.951076, 2.441498",\ + "0.098084, 0.204137, 0.393542, 0.951076, 2.441498"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.114293, 0.145721, 0.198417, 0.340782, 0.719388",\ + "0.205394, 0.236828, 0.289545, 0.431889, 0.810480",\ + "0.309904, 0.342065, 0.394885, 0.537244, 0.915841",\ + "0.501618, 0.536979, 0.590065, 0.732680, 1.111452",\ + "0.825607, 0.870622, 0.930343, 1.075147, 1.454209"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039117, 0.090634, 0.180632, 0.429261, 1.091005",\ + "0.039161, 0.090634, 0.180739, 0.429285, 1.091005",\ + "0.041267, 0.091212, 0.180891, 0.429338, 1.091005",\ + "0.050293, 0.094364, 0.180891, 0.429357, 1.092061",\ + "0.068556, 0.114740, 0.192215, 0.429716, 1.093122"); + } + + } /* end of arc otm_obs_i[4]_ast2padmux_o[4]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "otm_obs_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.120559, 0.187489, 0.303948, 0.623619, 1.478793",\ + "0.205712, 0.272774, 0.389342, 0.709022, 1.564038",\ + "0.292652, 0.359907, 0.476516, 0.796311, 1.651312",\ + "0.437434, 0.505450, 0.622092, 0.942182, 1.797434",\ + "0.662107, 0.738115, 0.856688, 1.177023, 2.032395"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073057, 0.188977, 0.391908, 0.949245, 2.441364",\ + "0.073156, 0.189206, 0.392241, 0.949956, 2.441378",\ + "0.074065, 0.189247, 0.392382, 0.950255, 2.441378",\ + "0.077223, 0.189624, 0.392382, 0.950255, 2.441378",\ + "0.092938, 0.200557, 0.393255, 0.950255, 2.441468"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.094368, 0.125782, 0.178430, 0.320842, 0.699483",\ + "0.188259, 0.219683, 0.272369, 0.414744, 0.793358",\ + "0.291365, 0.323244, 0.376040, 0.518376, 0.896959",\ + "0.474009, 0.509208, 0.562280, 0.704883, 1.083646",\ + "0.777508, 0.822171, 0.881623, 1.026340, 1.405392"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039018, 0.090654, 0.180392, 0.429207, 1.090346",\ + "0.039096, 0.090654, 0.180581, 0.429249, 1.090346",\ + "0.040472, 0.090934, 0.180608, 0.429337, 1.090346",\ + "0.049836, 0.094205, 0.180608, 0.429356, 1.091981",\ + "0.067933, 0.113945, 0.191732, 0.429701, 1.093101"); + } + + } /* end of arc otm_obs_i[4]_ast2padmux_o[4]_una_min*/ + + timing () { + related_pin : "otp_obs_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.122660, 0.189370, 0.305783, 0.622560, 1.472274",\ + "0.209824, 0.276743, 0.394059, 0.710704, 1.559679",\ + "0.301920, 0.369023, 0.486415, 0.804486, 1.652417",\ + "0.455547, 0.524976, 0.642287, 0.962376, 1.809444",\ + "0.699992, 0.780922, 0.900058, 1.218756, 2.067549"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067561, 0.184527, 0.382478, 0.936925, 2.417724",\ + "0.067561, 0.184527, 0.382478, 0.936925, 2.418306",\ + "0.068683, 0.184527, 0.382544, 0.936925, 2.418306",\ + "0.075540, 0.185756, 0.383113, 0.940410, 2.418306",\ + "0.094401, 0.199857, 0.384817, 0.940410, 2.426093"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.114764, 0.145947, 0.198571, 0.341053, 0.719705",\ + "0.205629, 0.236785, 0.289401, 0.431904, 0.810542",\ + "0.310076, 0.342571, 0.395201, 0.537686, 0.916183",\ + "0.500896, 0.538360, 0.591093, 0.733386, 1.111456",\ + "0.820213, 0.870292, 0.933027, 1.077593, 1.455130"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040532, 0.090273, 0.180246, 0.428609, 1.092443",\ + "0.040870, 0.090273, 0.180281, 0.428609, 1.092443",\ + "0.045400, 0.092351, 0.180508, 0.428609, 1.092443",\ + "0.059558, 0.100025, 0.181106, 0.428872, 1.092443",\ + "0.087354, 0.133744, 0.204884, 0.431205, 1.092443"); + } + + } /* end of arc otp_obs_i[4]_ast2padmux_o[4]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "otp_obs_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.119334, 0.186028, 0.302368, 0.619155, 1.468929",\ + "0.204833, 0.271716, 0.388876, 0.705544, 1.554647",\ + "0.293319, 0.360401, 0.477846, 0.795625, 1.643707",\ + "0.440314, 0.508488, 0.625608, 0.945855, 1.792734",\ + "0.667813, 0.745674, 0.864272, 1.183300, 2.031636"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.183691, 0.382409, 0.935142, 2.413233",\ + "0.067620, 0.183691, 0.382409, 0.935142, 2.413233",\ + "0.068262, 0.183691, 0.382508, 0.936031, 2.413233",\ + "0.073482, 0.184226, 0.382946, 0.939859, 2.413233",\ + "0.089380, 0.196045, 0.384240, 0.939859, 2.423100"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.094521, 0.125776, 0.178422, 0.320849, 0.699535",\ + "0.188239, 0.219444, 0.272075, 0.414540, 0.793202",\ + "0.291550, 0.323577, 0.376197, 0.518700, 0.897237",\ + "0.473699, 0.510899, 0.563627, 0.705929, 1.084022",\ + "0.773733, 0.823401, 0.885774, 1.030256, 1.407808"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039633, 0.090291, 0.180152, 0.428296, 1.092222",\ + "0.040262, 0.090291, 0.180217, 0.428296, 1.092377",\ + "0.044064, 0.091627, 0.180452, 0.428296, 1.092425",\ + "0.058805, 0.099616, 0.181075, 0.428844, 1.092425",\ + "0.086478, 0.132591, 0.204027, 0.431125, 1.092425"); + } + + } /* end of arc otp_obs_i[4]_ast2padmux_o[4]_una_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "970001.062500, 970001.062500, 970001.125000, 970001.312500, 970001.687500",\ + "970001.187500, 970001.187500, 970001.250000, 970001.437500, 970001.812500",\ + "970001.187500, 970001.187500, 970001.250000, 970001.437500, 970001.812500",\ + "970001.437500, 970001.437500, 970001.500000, 970001.687500, 970002.062500",\ + "970001.687500, 970001.687500, 970001.750000, 970001.937500, 970002.312500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "970001.875000, 970001.937500, 970002.062500, 970002.375000, 970003.250000",\ + "970002.000000, 970002.062500, 970002.187500, 970002.500000, 970003.375000",\ + "970002.125000, 970002.187500, 970002.312500, 970002.625000, 970003.500000",\ + "970002.375000, 970002.437500, 970002.562500, 970002.875000, 970003.750000",\ + "970002.625000, 970002.687500, 970002.812500, 970003.125000, 970004.000000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526"); + } + + } /* end of arc padmux2ast_i[4]_ast2padmux_o[4]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380000.312500, 380000.312500, 380000.343750, 380000.406250, 380000.593750",\ + "380000.406250, 380000.406250, 380000.437500, 380000.500000, 380000.687500",\ + "380000.468750, 380000.468750, 380000.500000, 380000.562500, 380000.750000",\ + "380000.625000, 380000.625000, 380000.656250, 380000.718750, 380000.906250",\ + "380000.843750, 380000.843750, 380000.875000, 380000.937500, 380001.125000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380001.781250, 380001.812500, 380001.906250, 380002.187500, 380002.875000",\ + "380001.875000, 380001.906250, 380002.000000, 380002.281250, 380002.968750",\ + "380001.968750, 380002.000000, 380002.093750, 380002.375000, 380003.062500",\ + "380002.156250, 380002.187500, 380002.281250, 380002.562500, 380003.250000",\ + "380002.406250, 380002.437500, 380002.531250, 380002.812500, 380003.500000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169"); + } + + } /* end of arc padmux2ast_i[4]_ast2padmux_o[4]_inv_min*/ + + timing () { + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "590000.250000, 590000.312500, 590000.437500, 590000.750000, 590001.625000",\ + "590000.375000, 590000.437500, 590000.562500, 590000.875000, 590001.750000",\ + "590000.375000, 590000.437500, 590000.562500, 590000.875000, 590001.750000",\ + "590000.500000, 590000.562500, 590000.687500, 590001.000000, 590001.875000",\ + "590000.750000, 590000.812500, 590000.937500, 590001.250000, 590002.125000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "590000.812500, 590000.812500, 590000.875000, 590001.062500, 590001.437500",\ + "590000.937500, 590000.937500, 590001.000000, 590001.187500, 590001.562500",\ + "590001.062500, 590001.062500, 590001.125000, 590001.312500, 590001.687500",\ + "590001.187500, 590001.187500, 590001.250000, 590001.437500, 590001.812500",\ + "590001.562500, 590001.562500, 590001.625000, 590001.812500, 590002.187500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090610, 0.180695, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180695, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180695, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180695, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180695, 0.429275, 1.092497"); + } + + } /* end of arc padmux2ast_i[5]_ast2padmux_o[4]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "590000.187500, 590000.250000, 590000.375000, 590000.687500, 590001.562500",\ + "590000.187500, 590000.250000, 590000.375000, 590000.687500, 590001.562500",\ + "590000.312500, 590000.375000, 590000.500000, 590000.812500, 590001.687500",\ + "590000.437500, 590000.500000, 590000.625000, 590000.937500, 590001.812500",\ + "590000.687500, 590000.750000, 590000.875000, 590001.187500, 590002.062500"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067834, 0.184682, 0.382509, 0.937727, 2.417507",\ + "0.067834, 0.184682, 0.382509, 0.937727, 2.417507",\ + "0.067834, 0.184682, 0.382509, 0.937727, 2.417507",\ + "0.067834, 0.184682, 0.382509, 0.937727, 2.417507",\ + "0.067834, 0.184682, 0.382509, 0.937727, 2.417507"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "590000.812500, 590000.812500, 590000.875000, 590001.000000, 590001.437500",\ + "590000.937500, 590000.937500, 590001.000000, 590001.125000, 590001.562500",\ + "590001.062500, 590001.062500, 590001.125000, 590001.250000, 590001.687500",\ + "590001.187500, 590001.187500, 590001.250000, 590001.375000, 590001.812500",\ + "590001.437500, 590001.437500, 590001.500000, 590001.625000, 590002.062500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039013, 0.090351, 0.180124, 0.429131, 1.091682",\ + "0.039013, 0.090351, 0.180124, 0.429131, 1.091682",\ + "0.039013, 0.090351, 0.180124, 0.429131, 1.091682",\ + "0.039013, 0.090351, 0.180124, 0.429131, 1.091682",\ + "0.039013, 0.090351, 0.180124, 0.429131, 1.091682"); + } + + } /* end of arc padmux2ast_i[5]_ast2padmux_o[4]_una_min*/ + +} /* end of pin ast2padmux_o[4] */ + +pin("ast2padmux_o[3]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.028584 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : ast2padmux_o[3]; + timing () { + related_pin : "clk_ast_rng_i" ; + related_output_pin : "rng_b_o[2]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.257031, 0.528778, 0.797030, 1.242767, 2.134242",\ + "0.323932, 0.595681, 0.863940, 1.309691, 2.201193",\ + "0.440368, 0.712118, 0.980382, 1.426145, 2.317669",\ + "0.760037, 1.031787, 1.300052, 1.745815, 2.637342",\ + "1.615245, 1.886993, 2.155250, 2.600997, 3.492491",\ + "0.315617, 0.587294, 0.855812, 1.300474, 2.190349",\ + "0.382518, 0.654197, 0.922722, 1.367397, 2.257300",\ + "0.498954, 0.770634, 1.039164, 1.483851, 2.373776",\ + "0.818623, 1.090303, 1.358834, 1.803522, 2.693449",\ + "1.673831, 1.945509, 2.214032, 2.658703, 3.548597",\ + "0.460207, 0.733101, 0.999707, 1.444229, 2.334082",\ + "0.527108, 0.800004, 1.066617, 1.511152, 2.401032",\ + "0.643544, 0.916442, 1.183060, 1.627606, 2.517509",\ + "0.963213, 1.236110, 1.502729, 1.947277, 2.837182",\ + "1.818421, 2.091316, 2.357927, 2.802459, 3.692330",\ + "0.496168, 0.770865, 1.036627, 1.481020, 2.370640",\ + "0.563069, 0.837768, 1.103536, 1.547944, 2.437591",\ + "0.679505, 0.954206, 1.219979, 1.664398, 2.554067",\ + "0.999174, 1.273875, 1.539648, 1.984068, 2.873740",\ + "1.854382, 2.129080, 2.394846, 2.839250, 3.728889",\ + "0.825262, 1.134787, 1.388262, 1.830277, 2.716096",\ + "0.892164, 1.201690, 1.455172, 1.897201, 2.783047",\ + "1.008600, 1.318128, 1.571615, 2.013655, 2.899523",\ + "1.328269, 1.637797, 1.891284, 2.333325, 3.219196",\ + "2.183476, 2.493002, 2.746482, 3.188507, 4.074345"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.073036, 0.073037, 0.073042, 0.073052, 0.073073",\ + "0.188928, 0.188931, 0.188942, 0.188966, 0.189013",\ + "0.391836, 0.391841, 0.391857, 0.391892, 0.391961",\ + "0.949092, 0.949101, 0.949136, 0.949210, 0.949357",\ + "2.441339, 2.441340, 2.441346, 2.441358, 2.441383",\ + "0.073036, 0.073037, 0.073042, 0.073052, 0.073073",\ + "0.188928, 0.188931, 0.188942, 0.188966, 0.189013",\ + "0.391836, 0.391841, 0.391857, 0.391892, 0.391961",\ + "0.949092, 0.949101, 0.949136, 0.949210, 0.949357",\ + "2.441339, 2.441340, 2.441346, 2.441358, 2.441383",\ + "0.073036, 0.073037, 0.073042, 0.073052, 0.073073",\ + "0.188928, 0.188931, 0.188942, 0.188966, 0.189013",\ + "0.391836, 0.391841, 0.391857, 0.391892, 0.391961",\ + "0.949092, 0.949102, 0.949136, 0.949210, 0.949357",\ + "2.441339, 2.441340, 2.441346, 2.441358, 2.441383",\ + "0.073036, 0.073037, 0.073042, 0.073052, 0.073073",\ + "0.188928, 0.188931, 0.188942, 0.188966, 0.189013",\ + "0.391836, 0.391841, 0.391857, 0.391892, 0.391961",\ + "0.949092, 0.949102, 0.949136, 0.949210, 0.949357",\ + "2.441339, 2.441340, 2.441346, 2.441358, 2.441383",\ + "0.073036, 0.073038, 0.073042, 0.073052, 0.073073",\ + "0.188928, 0.188932, 0.188943, 0.188966, 0.189013",\ + "0.391836, 0.391843, 0.391858, 0.391892, 0.391961",\ + "0.949092, 0.949105, 0.949137, 0.949210, 0.949357",\ + "2.441339, 2.441341, 2.441346, 2.441358, 2.441383"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.308725, 0.491796, 0.685627, 0.996163, 1.596700",\ + "0.340157, 0.523228, 0.717058, 1.027595, 1.628132",\ + "0.392865, 0.575936, 0.769767, 1.080304, 1.680844",\ + "0.535218, 0.718289, 0.912119, 1.222656, 1.823194",\ + "0.913815, 1.096886, 1.290716, 1.601252, 2.201788",\ + "0.368637, 0.551695, 0.745581, 1.055944, 1.656317",\ + "0.400068, 0.583126, 0.777012, 1.087376, 1.687749",\ + "0.452777, 0.635835, 0.829721, 1.140085, 1.740461",\ + "0.595130, 0.778187, 0.972073, 1.282437, 1.882811",\ + "0.973727, 1.156784, 1.350670, 1.661033, 2.261405",\ + "0.501379, 0.683946, 0.877464, 1.187801, 1.788124",\ + "0.532811, 0.715378, 0.908895, 1.219233, 1.819557",\ + "0.585519, 0.768086, 0.961603, 1.271942, 1.872268",\ + "0.727872, 0.910439, 1.103956, 1.414294, 2.014618",\ + "1.106469, 1.289036, 1.482553, 1.792891, 2.393212",\ + "0.534516, 0.717073, 0.910588, 1.220754, 1.820733",\ + "0.565947, 0.748505, 0.942020, 1.252186, 1.852165",\ + "0.618656, 0.801213, 0.994728, 1.304895, 1.904876",\ + "0.761009, 0.943566, 1.137081, 1.447247, 2.047226",\ + "1.139605, 1.322163, 1.515678, 1.825843, 2.425821",\ + "0.835592, 1.022294, 1.214223, 1.523770, 2.122581",\ + "0.867023, 1.053726, 1.245655, 1.555202, 2.154014",\ + "0.919731, 1.106434, 1.298363, 1.607911, 2.206725",\ + "1.062084, 1.248787, 1.440716, 1.750263, 2.349075",\ + "1.440681, 1.627384, 1.819313, 2.128859, 2.727669"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.039143, 0.039143, 0.039143, 0.039145, 0.039150",\ + "0.090610, 0.090610, 0.090610, 0.090608, 0.090604",\ + "0.180695, 0.180695, 0.180695, 0.180700, 0.180710",\ + "0.429275, 0.429275, 0.429275, 0.429276, 0.429279",\ + "1.090837, 1.090837, 1.090837, 1.090825, 1.090796",\ + "0.039143, 0.039143, 0.039143, 0.039145, 0.039150",\ + "0.090610, 0.090610, 0.090610, 0.090608, 0.090604",\ + "0.180695, 0.180695, 0.180695, 0.180700, 0.180710",\ + "0.429275, 0.429275, 0.429275, 0.429276, 0.429279",\ + "1.090837, 1.090837, 1.090837, 1.090825, 1.090796",\ + "0.039143, 0.039143, 0.039143, 0.039145, 0.039150",\ + "0.090610, 0.090610, 0.090610, 0.090608, 0.090604",\ + "0.180695, 0.180695, 0.180695, 0.180700, 0.180710",\ + "0.429275, 0.429275, 0.429275, 0.429276, 0.429279",\ + "1.090837, 1.090837, 1.090837, 1.090825, 1.090796",\ + "0.039143, 0.039143, 0.039143, 0.039145, 0.039150",\ + "0.090610, 0.090610, 0.090610, 0.090608, 0.090604",\ + "0.180695, 0.180695, 0.180695, 0.180700, 0.180710",\ + "0.429275, 0.429275, 0.429275, 0.429276, 0.429279",\ + "1.090837, 1.090837, 1.090837, 1.090825, 1.090796",\ + "0.039143, 0.039143, 0.039143, 0.039145, 0.039150",\ + "0.090610, 0.090610, 0.090610, 0.090608, 0.090604",\ + "0.180695, 0.180695, 0.180695, 0.180700, 0.180710",\ + "0.429275, 0.429275, 0.429275, 0.429276, 0.429279",\ + "1.090837, 1.090837, 1.090837, 1.090825, 1.090796"); + } + + } /* end of arc clk_ast_rng_i_ast2padmux_o[3]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_rng_i" ; + related_output_pin : "rng_b_o[2]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.252558, 0.520745, 0.784515, 1.222569, 2.097608",\ + "0.319449, 0.587637, 0.851411, 1.289475, 2.164534",\ + "0.435876, 0.704065, 0.967843, 1.405915, 2.280990",\ + "0.755544, 1.023733, 1.287511, 1.725584, 2.600661",\ + "1.610764, 1.878952, 2.142725, 2.580786, 3.455839",\ + "0.311120, 0.579252, 0.843280, 1.280275, 2.153714",\ + "0.378011, 0.646143, 0.910176, 1.347182, 2.220640",\ + "0.494438, 0.762572, 1.026608, 1.463622, 2.337097",\ + "0.814106, 1.082240, 1.346276, 1.783291, 2.656767",\ + "1.669326, 1.937458, 2.201490, 2.638493, 3.511946",\ + "0.455460, 0.724999, 0.987167, 1.424079, 2.297447",\ + "0.522351, 0.791891, 1.054064, 1.490985, 2.364373",\ + "0.638778, 0.908319, 1.170496, 1.607426, 2.480830",\ + "0.958446, 1.227987, 1.490164, 1.927095, 2.800500",\ + "1.813666, 2.083206, 2.345378, 2.782297, 3.655679",\ + "0.491341, 0.762735, 1.024086, 1.460950, 2.334005",\ + "0.558231, 0.829626, 1.090982, 1.527856, 2.400931",\ + "0.674659, 0.946054, 1.207414, 1.644296, 2.517388",\ + "0.994327, 1.265722, 1.527082, 1.963966, 2.837059",\ + "1.849546, 2.120941, 2.382296, 2.819168, 3.692237",\ + "0.819555, 1.126080, 1.375645, 1.810251, 2.679461",\ + "0.886446, 1.192972, 1.442542, 1.877157, 2.746387",\ + "1.002873, 1.309400, 1.558974, 1.993597, 2.862844",\ + "1.322541, 1.629068, 1.878642, 2.313266, 3.182515",\ + "2.177761, 2.484287, 2.733856, 3.168468, 4.037693"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.073031, 0.073031, 0.073033, 0.073040, 0.073054",\ + "0.188915, 0.188915, 0.188919, 0.188937, 0.188971",\ + "0.391815, 0.391816, 0.391824, 0.391849, 0.391899",\ + "0.949014, 0.949028, 0.949065, 0.949118, 0.949226",\ + "2.441330, 2.441330, 2.441334, 2.441343, 2.441361",\ + "0.073031, 0.073031, 0.073033, 0.073040, 0.073054",\ + "0.188915, 0.188915, 0.188919, 0.188937, 0.188971",\ + "0.391815, 0.391816, 0.391824, 0.391849, 0.391899",\ + "0.949014, 0.949028, 0.949065, 0.949118, 0.949226",\ + "2.441330, 2.441330, 2.441334, 2.441343, 2.441361",\ + "0.073031, 0.073031, 0.073033, 0.073040, 0.073054",\ + "0.188915, 0.188915, 0.188920, 0.188937, 0.188971",\ + "0.391815, 0.391816, 0.391824, 0.391849, 0.391899",\ + "0.949014, 0.949029, 0.949065, 0.949118, 0.949226",\ + "2.441330, 2.441330, 2.441334, 2.441343, 2.441361",\ + "0.073031, 0.073031, 0.073033, 0.073040, 0.073054",\ + "0.188915, 0.188915, 0.188920, 0.188937, 0.188971",\ + "0.391815, 0.391816, 0.391824, 0.391849, 0.391899",\ + "0.949014, 0.949029, 0.949065, 0.949119, 0.949226",\ + "2.441330, 2.441330, 2.441334, 2.441343, 2.441361",\ + "0.073031, 0.073031, 0.073033, 0.073040, 0.073054",\ + "0.188915, 0.188915, 0.188920, 0.188937, 0.188971",\ + "0.391816, 0.391816, 0.391824, 0.391849, 0.391899",\ + "0.949014, 0.949034, 0.949065, 0.949119, 0.949226",\ + "2.441330, 2.441331, 2.441334, 2.441343, 2.441361"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.262934, 0.448489, 0.641595, 0.948064, 1.538713",\ + "0.294346, 0.479902, 0.673008, 0.979478, 1.570129",\ + "0.346992, 0.532548, 0.725656, 1.032128, 1.622785",\ + "0.489407, 0.674962, 0.868069, 1.174539, 1.765190",\ + "0.868050, 1.053605, 1.246711, 1.553179, 2.143825",\ + "0.322845, 0.508317, 0.701440, 1.007833, 1.598330",\ + "0.354258, 0.539729, 0.732853, 1.039247, 1.629746",\ + "0.406904, 0.592376, 0.785500, 1.091897, 1.682402",\ + "0.549319, 0.734790, 0.927914, 1.234307, 1.824806",\ + "0.927962, 1.113433, 1.306556, 1.612947, 2.203442",\ + "0.455621, 0.640568, 0.833323, 1.139690, 1.730137",\ + "0.487034, 0.671981, 0.864736, 1.171104, 1.761553",\ + "0.539679, 0.724627, 0.917383, 1.223754, 1.814209",\ + "0.682094, 0.867041, 1.059797, 1.366165, 1.956614",\ + "1.060737, 1.245684, 1.438439, 1.744805, 2.335249",\ + "0.488779, 0.673866, 0.866553, 1.172770, 1.762998",\ + "0.520192, 0.705279, 0.897966, 1.204184, 1.794413",\ + "0.572837, 0.757925, 0.950613, 1.256834, 1.847070",\ + "0.715252, 0.900339, 1.093027, 1.399244, 1.989474",\ + "1.093896, 1.278982, 1.471669, 1.777884, 2.368110",\ + "0.790171, 0.979313, 1.170216, 1.475973, 2.065303",\ + "0.821584, 1.010726, 1.201629, 1.507387, 2.096719",\ + "0.874230, 1.063372, 1.254276, 1.560037, 2.149375",\ + "1.016645, 1.205787, 1.396689, 1.702447, 2.291780",\ + "1.395288, 1.584430, 1.775331, 2.081088, 2.670415"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.039012, 0.039013, 0.039015, 0.039021, 0.039034",\ + "0.090733, 0.090732, 0.090730, 0.090725, 0.090713",\ + "0.180377, 0.180379, 0.180385, 0.180400, 0.180431",\ + "0.429204, 0.429204, 0.429205, 0.429209, 0.429216",\ + "1.091688, 1.091683, 1.091668, 1.091629, 1.091545",\ + "0.039012, 0.039013, 0.039015, 0.039021, 0.039034",\ + "0.090733, 0.090732, 0.090730, 0.090725, 0.090713",\ + "0.180377, 0.180379, 0.180385, 0.180400, 0.180431",\ + "0.429204, 0.429204, 0.429205, 0.429209, 0.429216",\ + "1.091688, 1.091683, 1.091668, 1.091629, 1.091545",\ + "0.039012, 0.039013, 0.039015, 0.039021, 0.039034",\ + "0.090733, 0.090732, 0.090730, 0.090725, 0.090713",\ + "0.180377, 0.180379, 0.180385, 0.180400, 0.180431",\ + "0.429204, 0.429204, 0.429205, 0.429209, 0.429216",\ + "1.091688, 1.091683, 1.091668, 1.091629, 1.091545",\ + "0.039012, 0.039013, 0.039015, 0.039021, 0.039034",\ + "0.090733, 0.090732, 0.090730, 0.090725, 0.090712",\ + "0.180377, 0.180379, 0.180385, 0.180400, 0.180431",\ + "0.429204, 0.429204, 0.429205, 0.429209, 0.429216",\ + "1.091688, 1.091683, 1.091668, 1.091629, 1.091545",\ + "0.039012, 0.039013, 0.039015, 0.039021, 0.039034",\ + "0.090733, 0.090732, 0.090730, 0.090725, 0.090712",\ + "0.180378, 0.180379, 0.180385, 0.180400, 0.180431",\ + "0.429204, 0.429204, 0.429205, 0.429209, 0.429216",\ + "1.091687, 1.091683, 1.091668, 1.091628, 1.091545"); + } + + } /* end of arc clk_ast_rng_i_ast2padmux_o[3]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380001.875000, 380001.937500, 380002.062500, 380002.375000, 380003.250000",\ + "380001.968750, 380002.031250, 380002.156250, 380002.468750, 380003.343750",\ + "380002.062500, 380002.125000, 380002.250000, 380002.562500, 380003.437500",\ + "380002.125000, 380002.187500, 380002.312500, 380002.625000, 380003.500000",\ + "380002.468750, 380002.531250, 380002.656250, 380002.968750, 380003.843750"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189354, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189354, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189365, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189385, 0.392560, 0.950608, 2.441526",\ + "0.073824, 0.189425, 0.393252, 0.950608, 2.441526"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380001.562500, 380001.593750, 380001.656250, 380001.781250, 380002.156250",\ + "380001.656250, 380001.687500, 380001.750000, 380001.875000, 380002.250000",\ + "380001.750000, 380001.781250, 380001.843750, 380001.968750, 380002.343750",\ + "380001.812500, 380001.843750, 380001.906250, 380002.031250, 380002.406250",\ + "380002.156250, 380002.187500, 380002.250000, 380002.375000, 380002.750000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497"); + } + + } /* end of arc clk_ast_tlul_i_ast2padmux_o[3]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.118063, 0.173160, 0.267375, 0.527316, 1.216798",\ + "0.205470, 0.260567, 0.354781, 0.614720, 1.304204",\ + "0.286205, 0.341346, 0.435579, 0.695608, 1.384949",\ + "0.343571, 0.398793, 0.493060, 0.753254, 1.442331",\ + "0.643636, 0.699058, 0.793671, 1.054205, 1.742813"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.055140, 0.149920, 0.315966, 0.770671, 1.992169",\ + "0.055140, 0.149920, 0.315966, 0.770671, 1.992169",\ + "0.055064, 0.149920, 0.315966, 0.770616, 1.992169",\ + "0.054924, 0.149920, 0.315966, 0.770514, 1.992169",\ + "0.054820, 0.149920, 0.315966, 0.770514, 1.988361"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.068977, 0.083624, 0.108789, 0.177707, 0.362145",\ + "0.157440, 0.172093, 0.197279, 0.266195, 0.450612",\ + "0.246166, 0.261189, 0.286407, 0.355291, 0.539679",\ + "0.308361, 0.324424, 0.349591, 0.418444, 0.602842",\ + "0.630702, 0.654723, 0.683267, 0.752219, 0.936438"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.015416, 0.041075, 0.085652, 0.207740, 0.535967",\ + "0.015763, 0.041089, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967"); + } + + } /* end of arc clk_ast_tlul_i_ast2padmux_o[3]_redg_min*/ + + timing () { + related_pin : "fla_obs_i[3]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.111862, 0.178517, 0.294685, 0.611498, 1.461412",\ + "0.196887, 0.263820, 0.381200, 0.697836, 1.546758",\ + "0.280874, 0.348002, 0.465333, 0.783744, 1.631498",\ + "0.419192, 0.490016, 0.607541, 0.927454, 1.774732",\ + "0.629434, 0.713469, 0.835221, 1.155234, 2.004311"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067759, 0.184639, 0.382501, 0.937507, 2.417566",\ + "0.067759, 0.184639, 0.382501, 0.937507, 2.418347",\ + "0.069174, 0.184639, 0.382586, 0.937507, 2.418347",\ + "0.077831, 0.187460, 0.383300, 0.940319, 2.418347",\ + "0.099054, 0.205738, 0.390315, 0.940320, 2.425200"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.103322, 0.134506, 0.187130, 0.329612, 0.708263",\ + "0.188196, 0.219801, 0.272413, 0.414932, 0.793505",\ + "0.281500, 0.317246, 0.369943, 0.512302, 0.890520",\ + "0.433568, 0.478875, 0.537406, 0.680993, 1.058708",\ + "0.668936, 0.733428, 0.809479, 0.962224, 1.340585"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040521, 0.090274, 0.180244, 0.428614, 1.092440",\ + "0.042863, 0.090977, 0.180401, 0.428614, 1.092696",\ + "0.054661, 0.097371, 0.180899, 0.428690, 1.092793",\ + "0.077190, 0.120374, 0.194930, 0.430280, 1.092793",\ + "0.118581, 0.174509, 0.240947, 0.445113, 1.092793"); + } + + } /* end of arc fla_obs_i[3]_ast2padmux_o[3]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "fla_obs_i[3]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.110629, 0.177262, 0.293339, 0.610165, 1.460154",\ + "0.194795, 0.261696, 0.378936, 0.695592, 1.544629",\ + "0.275980, 0.343081, 0.460479, 0.778514, 1.626463",\ + "0.408884, 0.478137, 0.595421, 0.915532, 1.762573",\ + "0.610985, 0.691263, 0.810230, 1.128954, 1.977655"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067834, 0.183634, 0.382402, 0.934951, 2.414331",\ + "0.067834, 0.183634, 0.382402, 0.934951, 2.414331",\ + "0.068631, 0.183634, 0.382540, 0.936478, 2.414331",\ + "0.075251, 0.185541, 0.383090, 0.939701, 2.414331",\ + "0.093347, 0.198994, 0.384563, 0.939701, 2.425563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.077370, 0.108647, 0.161299, 0.303710, 0.682406",\ + "0.166391, 0.197521, 0.250129, 0.392651, 0.771277",\ + "0.253394, 0.288299, 0.340979, 0.483371, 0.861661",\ + "0.395347, 0.439383, 0.496795, 0.640121, 1.017884",\ + "0.615736, 0.679130, 0.754042, 0.905113, 1.283136"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039363, 0.090228, 0.180124, 0.428312, 1.092155",\ + "0.041196, 0.090228, 0.180315, 0.428312, 1.092511",\ + "0.052267, 0.096073, 0.180798, 0.428601, 1.092511",\ + "0.074482, 0.116813, 0.192279, 0.430033, 1.092511",\ + "0.116096, 0.171326, 0.236992, 0.441817, 1.092511"); + } + + } /* end of arc fla_obs_i[3]_ast2padmux_o[3]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[10]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.059999, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.443642, 0.510546, 0.626985, 0.946654, 1.801858",\ + "0.465905, 0.532810, 0.649248, 0.968917, 1.824121",\ + "0.522299, 0.589203, 0.705642, 1.025311, 1.880515",\ + "0.620162, 0.687066, 0.803505, 1.123173, 1.978378",\ + "1.134534, 1.201443, 1.317885, 1.637554, 2.492753"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.059999, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073042, 0.188941, 0.391856, 0.949133, 2.441345"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.053775, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.490585, 0.522017, 0.574725, 0.717078, 1.095675",\ + "0.512119, 0.543551, 0.596259, 0.738612, 1.117209",\ + "0.579305, 0.610737, 0.663445, 0.805798, 1.184395",\ + "0.689604, 0.721035, 0.773743, 0.916096, 1.294693",\ + "1.248357, 1.279789, 1.332497, 1.474850, 1.853447"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.053775, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090836"); + } + + } /* end of arc obs_ctrl_o[10]_ast2padmux_o[3]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[10]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.056753, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.412827, 0.479717, 0.596144, 0.915812, 1.771032",\ + "0.433604, 0.500495, 0.616922, 0.936590, 1.791810",\ + "0.491196, 0.558086, 0.674513, 0.994181, 1.849401",\ + "0.589141, 0.656031, 0.772458, 1.092126, 1.947346",\ + "1.077990, 1.144880, 1.261307, 1.580975, 2.436195"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.056753, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044579, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.392762, 0.424174, 0.476820, 0.619235, 0.997878",\ + "0.410167, 0.441580, 0.494226, 0.636641, 1.015284",\ + "0.482737, 0.514149, 0.566795, 0.709210, 1.087853",\ + "0.595371, 0.626784, 0.679430, 0.821845, 1.200488",\ + "1.122399, 1.153812, 1.206458, 1.348872, 1.727516"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044579, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687"); + } + + } /* end of arc obs_ctrl_o[10]_ast2padmux_o[3]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[10]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.059999, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.437382, 0.468814, 0.521522, 0.663875, 1.042472",\ + "0.462451, 0.493883, 0.546591, 0.688944, 1.067541",\ + "0.531672, 0.563103, 0.615812, 0.758164, 1.136761",\ + "0.655903, 0.687335, 0.740043, 0.882396, 1.260993",\ + "1.288504, 1.319936, 1.372644, 1.514997, 1.893594"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.059999, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090836"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.053775, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.675759, 0.742664, 0.859102, 1.178771, 2.033976",\ + "0.696234, 0.763138, 0.879577, 1.199246, 2.054450",\ + "0.755094, 0.821998, 0.938437, 1.258106, 2.113310",\ + "0.864334, 0.931238, 1.047677, 1.367346, 2.222550",\ + "1.641748, 1.708657, 1.825099, 2.144769, 2.999968"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.053775, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073042, 0.188941, 0.391856, 0.949133, 2.441345"); + } + + } /* end of arc obs_ctrl_o[10]_ast2padmux_o[3]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[10]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.056753, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.262392, 0.293804, 0.346450, 0.488865, 0.867508",\ + "0.286002, 0.317414, 0.370060, 0.512475, 0.891118",\ + "0.357340, 0.388753, 0.441399, 0.583814, 0.962457",\ + "0.477148, 0.508560, 0.561206, 0.703621, 1.082264",\ + "1.022245, 1.053658, 1.106303, 1.248718, 1.627362"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.056753, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044579, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.582342, 0.649232, 0.765660, 1.085328, 1.940547",\ + "0.599034, 0.665924, 0.782351, 1.102020, 1.957239",\ + "0.661428, 0.728319, 0.844746, 1.164414, 2.019634",\ + "0.770818, 0.837708, 0.954135, 1.273803, 2.129023",\ + "1.507966, 1.574856, 1.691283, 2.010951, 2.866171"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044579, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330"); + } + + } /* end of arc obs_ctrl_o[10]_ast2padmux_o[3]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[11]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.034927, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.180024, 0.211452, 0.264149, 0.406513, 0.785119",\ + "0.193406, 0.224834, 0.277531, 0.419896, 0.798501",\ + "0.275919, 0.307349, 0.360051, 0.502410, 0.881011",\ + "0.400910, 0.432352, 0.485095, 0.627414, 1.005985",\ + "0.975060, 1.010086, 1.063144, 1.205732, 1.584486"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.034927, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039119, 0.090633, 0.180636, 0.429262, 1.090996",\ + "0.039119, 0.090633, 0.180636, 0.429262, 1.090996",\ + "0.039132, 0.090633, 0.180667, 0.429269, 1.090996",\ + "0.039215, 0.090633, 0.180868, 0.429314, 1.090996",\ + "0.049347, 0.094034, 0.180868, 0.429355, 1.091896"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037147, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.465437, 0.532662, 0.649281, 0.969044, 1.824018",\ + "0.477695, 0.544920, 0.661539, 0.981302, 1.836276",\ + "0.541916, 0.609140, 0.725760, 1.045521, 1.900495",\ + "0.644626, 0.711856, 0.828474, 1.148242, 2.003221",\ + "1.319722, 1.387140, 1.503696, 1.823662, 2.678811"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037147, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073817, 0.189281, 0.392442, 0.950607, 2.441526",\ + "0.073817, 0.189281, 0.392442, 0.950607, 2.441526",\ + "0.073817, 0.189282, 0.392442, 0.950607, 2.441526",\ + "0.073862, 0.189282, 0.392442, 0.950619, 2.441526",\ + "0.075399, 0.189282, 0.392442, 0.951039, 2.441526"); + } + + } /* end of arc obs_ctrl_o[11]_ast2padmux_o[3]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[11]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.030664, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.159139, 0.190553, 0.243202, 0.385613, 0.764254",\ + "0.170514, 0.201928, 0.254577, 0.396989, 0.775629",\ + "0.255576, 0.286993, 0.339652, 0.482053, 0.860686",\ + "0.379908, 0.411340, 0.464049, 0.606401, 0.984998",\ + "0.945167, 0.979651, 1.032663, 1.175209, 1.553933"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.030664, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039020, 0.090609, 0.180397, 0.429208, 1.090831",\ + "0.039020, 0.090609, 0.180397, 0.429208, 1.090831",\ + "0.039042, 0.090609, 0.180449, 0.429220, 1.090831",\ + "0.039144, 0.090609, 0.180675, 0.429276, 1.090831",\ + "0.047820, 0.093501, 0.180675, 0.429352, 1.091629"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.028580, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.461683, 0.528880, 0.645509, 0.965243, 1.820192",\ + "0.470327, 0.537524, 0.654153, 0.973887, 1.828836",\ + "0.538174, 0.605371, 0.721999, 1.041733, 1.896681",\ + "0.640782, 0.707985, 0.824611, 1.144351, 1.999304",\ + "1.312551, 1.379913, 1.496487, 1.816396, 2.671496"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.028580, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073594, 0.189124, 0.392388, 0.950544, 2.441454",\ + "0.073594, 0.189124, 0.392388, 0.950544, 2.441454",\ + "0.073594, 0.189124, 0.392388, 0.950544, 2.441454",\ + "0.073633, 0.189124, 0.392388, 0.950557, 2.441454",\ + "0.074954, 0.189124, 0.392388, 0.950917, 2.441454"); + } + + } /* end of arc obs_ctrl_o[11]_ast2padmux_o[3]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.500858, 0.568082, 0.684702, 1.004464, 1.859437",\ + "0.516623, 0.583848, 0.700467, 1.020230, 1.875203",\ + "0.590734, 0.657958, 0.774578, 1.094340, 1.949314",\ + "0.681946, 0.749171, 0.865790, 1.185553, 2.040526",\ + "1.108576, 1.175805, 1.292423, 1.612190, 2.467167"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073816, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073848, 0.189277, 0.392440, 0.950615, 2.441524"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.275118, 0.306284, 0.358903, 0.501398, 0.880041",\ + "0.290749, 0.321915, 0.374533, 0.517029, 0.895671",\ + "0.363703, 0.394869, 0.447488, 0.589983, 0.968626",\ + "0.474794, 0.505959, 0.558577, 0.701073, 1.079716",\ + "1.013269, 1.044421, 1.097036, 1.239541, 1.618177"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040759, 0.090626, 0.180653, 0.429266, 1.092499",\ + "0.040922, 0.090525, 0.180916, 0.429325, 1.092539"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[3]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.337608, 0.404302, 0.520641, 0.837429, 1.687203",\ + "0.349939, 0.416633, 0.532972, 0.849760, 1.699534",\ + "0.408752, 0.475446, 0.591785, 0.908573, 1.758347",\ + "0.496083, 0.562777, 0.679117, 0.995905, 1.845678",\ + "0.949078, 1.015776, 1.132136, 1.448920, 2.298678"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184560, 0.382485, 0.937098, 2.417677",\ + "0.067604, 0.184551, 0.382483, 0.937052, 2.417689"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.209985, 0.241400, 0.294052, 0.436461, 0.815099",\ + "0.221857, 0.253271, 0.305923, 0.448332, 0.826970",\ + "0.304351, 0.335766, 0.388417, 0.530826, 0.909465",\ + "0.409226, 0.440642, 0.493298, 0.635702, 1.014338",\ + "0.909442, 0.940877, 0.993596, 1.135938, 1.514527"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039034, 0.090327, 0.180161, 0.428971, 1.091542",\ + "0.039166, 0.090324, 0.180166, 0.428948, 1.090692"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[3]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.287803, 0.318969, 0.371587, 0.514083, 0.892726",\ + "0.303569, 0.334734, 0.387353, 0.529848, 0.908491",\ + "0.378810, 0.409975, 0.462594, 0.605089, 0.983732",\ + "0.473884, 0.505049, 0.557668, 0.700163, 1.078806",\ + "0.918190, 0.949342, 1.001956, 1.144462, 1.523098"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040759, 0.090626, 0.180653, 0.429266, 1.092499",\ + "0.040922, 0.090525, 0.180916, 0.429325, 1.092539"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.376755, 0.443500, 0.560063, 0.876818, 1.726409",\ + "0.392417, 0.459162, 0.575725, 0.892480, 1.742071",\ + "0.467424, 0.534169, 0.650732, 0.967487, 1.817078",\ + "0.562603, 0.629351, 0.745928, 1.062681, 1.912261",\ + "1.006927, 1.073706, 1.190415, 1.507149, 2.356620"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073816, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073848, 0.189277, 0.392440, 0.950615, 2.441524"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[3]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.264318, 0.295567, 0.348210, 0.490643, 0.869326",\ + "0.278489, 0.309737, 0.362381, 0.504814, 0.883496",\ + "0.355325, 0.386573, 0.439217, 0.581649, 0.960332",\ + "0.450369, 0.481617, 0.534260, 0.676693, 1.055376",\ + "0.893831, 0.925076, 0.977718, 1.120154, 1.498834"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039034, 0.090327, 0.180161, 0.428971, 1.091542",\ + "0.039166, 0.090324, 0.180166, 0.428948, 1.090692"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.373701, 0.440395, 0.556734, 0.873522, 1.723296",\ + "0.385572, 0.452266, 0.568605, 0.885393, 1.735167",\ + "0.464371, 0.531065, 0.647404, 0.964192, 1.813966",\ + "0.559385, 0.626079, 0.742420, 1.059207, 1.908981",\ + "1.002245, 1.068944, 1.185303, 1.502088, 2.351846"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184560, 0.382485, 0.937098, 2.417677",\ + "0.067604, 0.184551, 0.382483, 0.937052, 2.417689"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[3]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.337998, 0.404744, 0.521308, 0.838063, 1.687653",\ + "0.353177, 0.419923, 0.536487, 0.853242, 1.702832",\ + "0.412195, 0.478941, 0.595505, 0.912260, 1.761850",\ + "0.508449, 0.575199, 0.691783, 1.008535, 1.858109",\ + "0.997007, 1.063817, 1.180658, 1.497372, 2.346736"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073812, 0.189282, 0.392442, 0.950605, 2.441527",\ + "0.073812, 0.189282, 0.392442, 0.950605, 2.441527",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073887, 0.189271, 0.392439, 0.950626, 2.441522",\ + "0.075818, 0.189005, 0.392348, 0.951153, 2.441399"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.272032, 0.303198, 0.355817, 0.498312, 0.876955",\ + "0.289891, 0.321056, 0.373675, 0.516170, 0.894813",\ + "0.360955, 0.392121, 0.444739, 0.587235, 0.965878",\ + "0.471378, 0.502542, 0.555160, 0.697656, 1.076298",\ + "1.004117, 1.035227, 1.087829, 1.230366, 1.608983"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090633, 0.180635, 0.429262, 1.092497",\ + "0.040752, 0.090633, 0.180635, 0.429262, 1.092497",\ + "0.040752, 0.090633, 0.180666, 0.429269, 1.092497",\ + "0.040771, 0.090633, 0.180871, 0.429315, 1.092502",\ + "0.049622, 0.094130, 0.180871, 0.429356, 1.092666"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[3]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.329221, 0.395915, 0.512254, 0.829041, 1.678816",\ + "0.344592, 0.411286, 0.527624, 0.844412, 1.694187",\ + "0.406780, 0.473474, 0.589813, 0.906601, 1.756375",\ + "0.502234, 0.568932, 0.685288, 1.002073, 1.851833",\ + "0.957622, 1.024367, 1.140929, 1.457685, 2.307276"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067607, 0.184553, 0.382483, 0.937060, 2.417687",\ + "0.067439, 0.184458, 0.382464, 0.936568, 2.417820"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.231492, 0.262740, 0.315383, 0.457816, 0.836499",\ + "0.245351, 0.276600, 0.329243, 0.471676, 0.850359",\ + "0.320124, 0.351372, 0.404016, 0.546449, 0.925131",\ + "0.430166, 0.461410, 0.514053, 0.656489, 1.035169",\ + "0.955028, 0.986237, 1.038869, 1.181331, 1.559995"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039018, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039018, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039041, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039146, 0.090294, 0.180167, 0.428752, 1.090822",\ + "0.040211, 0.090294, 0.180212, 0.428752, 1.091676"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[3]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.176901, 0.208329, 0.261026, 0.403390, 0.781996",\ + "0.196158, 0.227585, 0.280282, 0.422647, 0.801252",\ + "0.273304, 0.304734, 0.357436, 0.499795, 0.878396",\ + "0.397207, 0.428649, 0.481392, 0.623711, 1.002282",\ + "0.961790, 0.996912, 1.049978, 1.192575, 1.571334"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090633, 0.180635, 0.429262, 1.092497",\ + "0.040752, 0.090633, 0.180635, 0.429262, 1.092497",\ + "0.040752, 0.090633, 0.180666, 0.429269, 1.092497",\ + "0.040771, 0.090633, 0.180871, 0.429315, 1.092502",\ + "0.049622, 0.094130, 0.180871, 0.429356, 1.092666"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.455825, 0.523049, 0.639668, 0.959430, 1.814404",\ + "0.468963, 0.536187, 0.652807, 0.972569, 1.827542",\ + "0.531289, 0.598514, 0.715133, 1.034896, 1.889869",\ + "0.640154, 0.707387, 0.824004, 1.143775, 1.998757",\ + "1.332501, 1.399969, 1.516508, 1.836528, 2.691724"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073812, 0.189282, 0.392442, 0.950605, 2.441527",\ + "0.073812, 0.189282, 0.392442, 0.950605, 2.441527",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073887, 0.189271, 0.392439, 0.950626, 2.441522",\ + "0.075818, 0.189005, 0.392348, 0.951153, 2.441399"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[3]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.155833, 0.187247, 0.239896, 0.382308, 0.760949",\ + "0.173482, 0.204896, 0.257545, 0.399957, 0.778598",\ + "0.252964, 0.284381, 0.337040, 0.479441, 0.858074",\ + "0.376196, 0.407628, 0.460337, 0.602689, 0.981285",\ + "0.931678, 0.966257, 1.019278, 1.161831, 1.540560"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039018, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039018, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039041, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039146, 0.090294, 0.180167, 0.428752, 1.090822",\ + "0.040211, 0.090294, 0.180212, 0.428752, 1.091676"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.452081, 0.519278, 0.635907, 0.955640, 1.810589",\ + "0.461862, 0.529059, 0.645688, 0.965421, 1.820370",\ + "0.527542, 0.594739, 0.711368, 1.031102, 1.886050",\ + "0.636262, 0.703467, 0.820093, 1.139835, 1.994791",\ + "1.324350, 1.391756, 1.508316, 1.828270, 2.683409"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067607, 0.184553, 0.382483, 0.937060, 2.417687",\ + "0.067439, 0.184458, 0.382464, 0.936568, 2.417820"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[3]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.325984, 0.393209, 0.509828, 0.829592, 1.684567",\ + "0.341732, 0.408957, 0.525576, 0.845340, 1.700314",\ + "0.405621, 0.472847, 0.589466, 0.909229, 1.764204",\ + "0.483984, 0.551208, 0.667827, 0.987590, 1.842564",\ + "0.876566, 0.943791, 1.060410, 1.380173, 2.235147"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189281, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189281, 0.392442, 0.950608, 2.441526"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.207560, 0.238992, 0.291700, 0.434053, 0.812650",\ + "0.223441, 0.254873, 0.307582, 0.449934, 0.828531",\ + "0.292964, 0.324396, 0.377105, 0.519457, 0.898054",\ + "0.382304, 0.413736, 0.466444, 0.608797, 0.987394",\ + "0.808201, 0.839636, 0.892354, 1.034697, 1.413287"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180696, 0.429275, 1.092497",\ + "0.040785, 0.090610, 0.180744, 0.429286, 1.092505"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[3]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.298728, 0.365697, 0.482189, 0.801862, 1.656989",\ + "0.312838, 0.379807, 0.496299, 0.815972, 1.671100",\ + "0.378416, 0.445385, 0.561877, 0.881551, 1.736677",\ + "0.456978, 0.523948, 0.640441, 0.960115, 1.815240",\ + "0.852482, 0.919491, 1.036016, 1.355692, 2.210772"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067586, 0.184541, 0.382481, 0.936998, 2.417704"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.185526, 0.216941, 0.269593, 0.412001, 0.790640",\ + "0.197528, 0.228943, 0.281595, 0.424004, 0.802642",\ + "0.270950, 0.302365, 0.355017, 0.497425, 0.876064",\ + "0.360375, 0.391790, 0.444442, 0.586850, 0.965489",\ + "0.786063, 0.817479, 0.870138, 1.012540, 1.391174"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039039, 0.090322, 0.180169, 0.428938, 1.091513"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[3]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.314064, 0.345229, 0.397848, 0.540343, 0.918986",\ + "0.329859, 0.361025, 0.413644, 0.556139, 0.934782",\ + "0.407724, 0.438890, 0.491508, 0.634004, 1.012646",\ + "0.508778, 0.539944, 0.592562, 0.735058, 1.113701",\ + "0.984655, 1.015818, 1.068436, 1.210933, 1.589574"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180696, 0.429275, 1.092497",\ + "0.040785, 0.090610, 0.180744, 0.429286, 1.092505"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.596327, 0.663552, 0.780171, 1.099935, 1.954909",\ + "0.609131, 0.676356, 0.792975, 1.112739, 1.967713",\ + "0.677113, 0.744339, 0.860958, 1.180721, 2.035696",\ + "0.788810, 0.856034, 0.972654, 1.292416, 2.147390",\ + "1.273667, 1.340892, 1.457511, 1.777274, 2.632248"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189281, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189281, 0.392442, 0.950608, 2.441526"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[3]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.262848, 0.294262, 0.346915, 0.489323, 0.867962",\ + "0.276998, 0.308413, 0.361065, 0.503474, 0.882112",\ + "0.356726, 0.388141, 0.440793, 0.583202, 0.961840",\ + "0.457948, 0.489362, 0.542015, 0.684423, 1.063061",\ + "0.929777, 0.961193, 1.013852, 1.156254, 1.534888"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039039, 0.090322, 0.180169, 0.428938, 1.091513"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.437011, 0.503705, 0.620045, 0.936832, 1.786606",\ + "0.446608, 0.513302, 0.629642, 0.946429, 1.796203",\ + "0.517780, 0.584475, 0.700814, 1.017602, 1.867376",\ + "0.629396, 0.696091, 0.812430, 1.129218, 1.978992",\ + "1.131911, 1.198614, 1.314996, 1.631778, 2.481517"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067586, 0.184541, 0.382481, 0.936998, 2.417704"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[3]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[7]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.060518, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.315427, 0.346593, 0.399212, 0.541707, 0.920350",\ + "0.342146, 0.373312, 0.425930, 0.568426, 0.947068",\ + "0.410184, 0.441350, 0.493968, 0.636464, 1.015106",\ + "0.512927, 0.544093, 0.596711, 0.739207, 1.117850",\ + "0.999580, 1.030743, 1.083361, 1.225858, 1.604500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.060518, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180697, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180697, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180697, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180732, 0.429283, 1.092497",\ + "0.042004, 0.091469, 0.180867, 0.429340, 1.092504"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.051005, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.597332, 0.664558, 0.781177, 1.100940, 1.955915",\ + "0.618079, 0.685305, 0.801924, 1.121688, 1.976662",\ + "0.683404, 0.750630, 0.867249, 1.187012, 2.041987",\ + "0.797603, 0.864828, 0.981447, 1.301210, 2.156184",\ + "1.375793, 1.443018, 1.559637, 1.879400, 2.734374"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.051005, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950609, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073823, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073819, 0.189281, 0.392442, 0.950607, 2.441526",\ + "0.073817, 0.189281, 0.392442, 0.950607, 2.441526"); + } + + } /* end of arc obs_ctrl_o[7]_ast2padmux_o[3]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[7]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.049671, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.150722, 0.182137, 0.234789, 0.377197, 0.755836",\ + "0.171205, 0.202620, 0.255272, 0.397681, 0.776319",\ + "0.246518, 0.277932, 0.330585, 0.472993, 0.851631",\ + "0.352324, 0.383738, 0.436391, 0.578799, 0.957437",\ + "0.825559, 0.856975, 0.909634, 1.052036, 1.430670"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.049671, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039038, 0.090323, 0.180168, 0.428941, 1.091519"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040467, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.277343, 0.344312, 0.460804, 0.780477, 1.635605",\ + "0.293355, 0.360323, 0.476815, 0.796489, 1.651616",\ + "0.366113, 0.433085, 0.549579, 0.869253, 1.724376",\ + "0.487008, 0.554003, 0.670516, 0.990192, 1.845287",\ + "1.141953, 1.209132, 1.325766, 1.645481, 2.500414"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040467, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067601, 0.184550, 0.382483, 0.937044, 2.417691"); + } + + } /* end of arc obs_ctrl_o[7]_ast2padmux_o[3]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[8]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045711, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.700503, 0.767407, 0.883846, 1.203515, 2.058719",\ + "0.718853, 0.785757, 0.902195, 1.221864, 2.077069",\ + "0.789396, 0.856300, 0.972739, 1.292408, 2.147612",\ + "0.881867, 0.948772, 1.065210, 1.384879, 2.240083",\ + "1.366874, 1.433786, 1.550230, 1.869900, 2.725095"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045711, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073043, 0.188945, 0.391861, 0.949146, 2.441348"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044476, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.488066, 0.519497, 0.572205, 0.714558, 1.093155",\ + "0.505493, 0.536925, 0.589633, 0.731986, 1.110583",\ + "0.582890, 0.614322, 0.667030, 0.809383, 1.187980",\ + "0.691204, 0.722635, 0.775344, 0.917696, 1.296293",\ + "1.242374, 1.273805, 1.326514, 1.468867, 1.847463"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044476, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090836"); + } + + } /* end of arc obs_ctrl_o[8]_ast2padmux_o[3]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[8]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.041900, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.636502, 0.703393, 0.819820, 1.139488, 1.994708",\ + "0.653118, 0.720008, 0.836435, 1.156103, 2.011323",\ + "0.727539, 0.794429, 0.910857, 1.230525, 2.085744",\ + "0.821960, 0.888850, 1.005277, 1.324945, 2.180165",\ + "1.269718, 1.336608, 1.453035, 1.772703, 2.627923"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.041900, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035639, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.339768, 0.371181, 0.423827, 0.566242, 0.944885",\ + "0.353114, 0.384527, 0.437173, 0.579588, 0.958231",\ + "0.435092, 0.466504, 0.519150, 0.661565, 1.040208",\ + "0.544311, 0.575724, 0.628370, 0.770784, 1.149428",\ + "1.067931, 1.099343, 1.151989, 1.294404, 1.673047"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035639, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687"); + } + + } /* end of arc obs_ctrl_o[8]_ast2padmux_o[3]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[8]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045711, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.524400, 0.555831, 0.608540, 0.750893, 1.129489",\ + "0.542749, 0.574181, 0.626889, 0.769242, 1.147839",\ + "0.616605, 0.648037, 0.700745, 0.843098, 1.221695",\ + "0.714865, 0.746296, 0.799004, 0.941357, 1.319954",\ + "1.237234, 1.268665, 1.321373, 1.463726, 1.842323"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045711, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090836"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044476, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.651244, 0.718149, 0.834587, 1.154256, 2.009460",\ + "0.663867, 0.730771, 0.847209, 1.166878, 2.022083",\ + "0.718781, 0.785685, 0.902124, 1.221793, 2.076997",\ + "0.821201, 0.888105, 1.004544, 1.324213, 2.179417",\ + "1.548479, 1.615391, 1.731835, 2.051504, 2.906700"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044476, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073043, 0.188945, 0.391861, 0.949146, 2.441348"); + } + + } /* end of arc obs_ctrl_o[8]_ast2padmux_o[3]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[8]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.041900, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.267796, 0.299208, 0.351854, 0.494269, 0.872912",\ + "0.284541, 0.315954, 0.368600, 0.511015, 0.889658",\ + "0.362798, 0.394211, 0.446856, 0.589271, 0.967914",\ + "0.486677, 0.518090, 0.570736, 0.713151, 1.091794",\ + "1.055266, 1.086678, 1.139324, 1.281739, 1.660382"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.041900, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035639, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.456335, 0.523226, 0.639653, 0.959321, 1.814541",\ + "0.469682, 0.536572, 0.652999, 0.972667, 1.827887",\ + "0.547821, 0.614711, 0.731138, 1.050806, 1.906026",\ + "0.649000, 0.715890, 0.832317, 1.151985, 2.007205",\ + "1.120855, 1.187745, 1.304172, 1.623840, 2.479060"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035639, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330"); + } + + } /* end of arc obs_ctrl_o[8]_ast2padmux_o[3]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[9]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.046138, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.712314, 0.779218, 0.895657, 1.215326, 2.070530",\ + "0.730867, 0.797771, 0.914210, 1.233879, 2.089083",\ + "0.803565, 0.870469, 0.986908, 1.306577, 2.161781",\ + "0.898790, 0.965694, 1.082133, 1.401802, 2.257006",\ + "1.358120, 1.425029, 1.541471, 1.861141, 2.716340"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.046138, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073041, 0.188941, 0.391855, 0.949133, 2.441345"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044715, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.494441, 0.525873, 0.578581, 0.720934, 1.099531",\ + "0.511983, 0.543415, 0.596123, 0.738476, 1.117073",\ + "0.589312, 0.620744, 0.673452, 0.815805, 1.194402",\ + "0.698758, 0.730189, 0.782897, 0.925250, 1.303847",\ + "1.229663, 1.261095, 1.313803, 1.456156, 1.834753"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044715, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090836"); + } + + } /* end of arc obs_ctrl_o[9]_ast2padmux_o[3]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[9]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.042344, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.668630, 0.735520, 0.851947, 1.171615, 2.026835",\ + "0.685451, 0.752341, 0.868768, 1.188436, 2.043656",\ + "0.759882, 0.826773, 0.943200, 1.262868, 2.118088",\ + "0.855138, 0.922028, 1.038455, 1.358123, 2.213343",\ + "1.307789, 1.374679, 1.491106, 1.810774, 2.665994"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.042344, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035869, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.361699, 0.393111, 0.445757, 0.588172, 0.966815",\ + "0.375155, 0.406568, 0.459214, 0.601628, 0.980272",\ + "0.456576, 0.487988, 0.540634, 0.683049, 1.061692",\ + "0.566550, 0.597963, 0.650609, 0.793024, 1.171667",\ + "1.091986, 1.123399, 1.176044, 1.318459, 1.697102"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035869, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687"); + } + + } /* end of arc obs_ctrl_o[9]_ast2padmux_o[3]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[9]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.046138, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.528266, 0.559698, 0.612406, 0.754759, 1.133356",\ + "0.546819, 0.578250, 0.630959, 0.773312, 1.151908",\ + "0.620877, 0.652309, 0.705017, 0.847370, 1.225967",\ + "0.719978, 0.751410, 0.804118, 0.946471, 1.325068",\ + "1.192613, 1.224045, 1.276753, 1.419106, 1.797703"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.046138, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090836"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044715, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.606303, 0.673207, 0.789646, 1.109315, 1.964519",\ + "0.618992, 0.685897, 0.802335, 1.122004, 1.977208",\ + "0.673763, 0.740668, 0.857106, 1.176775, 2.031980",\ + "0.776802, 0.843707, 0.960145, 1.279814, 2.135018",\ + "1.483718, 1.550627, 1.667069, 1.986738, 2.841937"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044715, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073041, 0.188941, 0.391855, 0.949133, 2.441345"); + } + + } /* end of arc obs_ctrl_o[9]_ast2padmux_o[3]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[9]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.042344, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.262699, 0.294112, 0.346758, 0.489173, 0.867816",\ + "0.279513, 0.310926, 0.363572, 0.505987, 0.884630",\ + "0.357852, 0.389264, 0.441910, 0.584325, 0.962968",\ + "0.480383, 0.511796, 0.564441, 0.706856, 1.085500",\ + "1.037548, 1.068961, 1.121607, 1.264022, 1.642665"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.042344, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035869, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.463612, 0.530502, 0.646929, 0.966597, 1.821817",\ + "0.477068, 0.543958, 0.660386, 0.980054, 1.835274",\ + "0.555357, 0.622247, 0.738674, 1.058342, 1.913562",\ + "0.655033, 0.721923, 0.838350, 1.158018, 2.013238",\ + "1.119877, 1.186768, 1.303195, 1.622863, 2.478083"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035869, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330"); + } + + } /* end of arc obs_ctrl_o[9]_ast2padmux_o[3]_inv_min*/ + + timing () { + related_pin : "otm_obs_i[3]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.123879, 0.190820, 0.307288, 0.626960, 1.482121",\ + "0.210891, 0.277978, 0.394567, 0.714249, 1.569235",\ + "0.301781, 0.369068, 0.485667, 0.805496, 1.660526",\ + "0.453978, 0.523120, 0.640034, 0.960158, 1.815427",\ + "0.695902, 0.774527, 0.893732, 1.214148, 2.069560"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073065, 0.188997, 0.391936, 0.949305, 2.441374",\ + "0.073175, 0.189249, 0.392304, 0.950092, 2.441498",\ + "0.074330, 0.189249, 0.392418, 0.950747, 2.441498",\ + "0.079436, 0.191164, 0.392505, 0.951076, 2.441498",\ + "0.098084, 0.204137, 0.393542, 0.951076, 2.441498"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.114293, 0.145721, 0.198417, 0.340782, 0.719388",\ + "0.205394, 0.236828, 0.289545, 0.431889, 0.810480",\ + "0.309904, 0.342065, 0.394885, 0.537244, 0.915841",\ + "0.501618, 0.536979, 0.590065, 0.732680, 1.111452",\ + "0.825607, 0.870622, 0.930343, 1.075147, 1.454209"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039117, 0.090634, 0.180632, 0.429261, 1.091005",\ + "0.039161, 0.090634, 0.180739, 0.429285, 1.091005",\ + "0.041267, 0.091212, 0.180891, 0.429338, 1.091005",\ + "0.050293, 0.094364, 0.180891, 0.429357, 1.092061",\ + "0.068556, 0.114740, 0.192215, 0.429716, 1.093122"); + } + + } /* end of arc otm_obs_i[3]_ast2padmux_o[3]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "otm_obs_i[3]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.120559, 0.187489, 0.303948, 0.623619, 1.478793",\ + "0.205712, 0.272774, 0.389342, 0.709022, 1.564038",\ + "0.292652, 0.359907, 0.476516, 0.796311, 1.651312",\ + "0.437434, 0.505450, 0.622092, 0.942182, 1.797434",\ + "0.662107, 0.738115, 0.856688, 1.177023, 2.032395"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073057, 0.188977, 0.391908, 0.949245, 2.441364",\ + "0.073156, 0.189206, 0.392241, 0.949956, 2.441378",\ + "0.074065, 0.189247, 0.392382, 0.950255, 2.441378",\ + "0.077223, 0.189624, 0.392382, 0.950255, 2.441378",\ + "0.092938, 0.200557, 0.393255, 0.950255, 2.441468"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.094368, 0.125782, 0.178430, 0.320842, 0.699483",\ + "0.188259, 0.219683, 0.272369, 0.414744, 0.793358",\ + "0.291365, 0.323244, 0.376040, 0.518376, 0.896959",\ + "0.474009, 0.509208, 0.562280, 0.704883, 1.083646",\ + "0.777508, 0.822171, 0.881623, 1.026340, 1.405392"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039018, 0.090654, 0.180392, 0.429207, 1.090346",\ + "0.039096, 0.090654, 0.180581, 0.429249, 1.090346",\ + "0.040472, 0.090934, 0.180608, 0.429337, 1.090346",\ + "0.049836, 0.094205, 0.180608, 0.429356, 1.091981",\ + "0.067933, 0.113945, 0.191732, 0.429701, 1.093101"); + } + + } /* end of arc otm_obs_i[3]_ast2padmux_o[3]_una_min*/ + + timing () { + related_pin : "otp_obs_i[3]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.122660, 0.189370, 0.305783, 0.622560, 1.472274",\ + "0.209824, 0.276743, 0.394059, 0.710704, 1.559679",\ + "0.301920, 0.369023, 0.486415, 0.804486, 1.652417",\ + "0.455547, 0.524976, 0.642287, 0.962376, 1.809444",\ + "0.699992, 0.780922, 0.900058, 1.218756, 2.067549"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067561, 0.184527, 0.382478, 0.936925, 2.417724",\ + "0.067561, 0.184527, 0.382478, 0.936925, 2.418306",\ + "0.068683, 0.184527, 0.382544, 0.936925, 2.418306",\ + "0.075540, 0.185756, 0.383113, 0.940410, 2.418306",\ + "0.094401, 0.199857, 0.384817, 0.940410, 2.426093"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.114764, 0.145947, 0.198571, 0.341053, 0.719705",\ + "0.205629, 0.236785, 0.289401, 0.431904, 0.810542",\ + "0.310076, 0.342571, 0.395201, 0.537686, 0.916183",\ + "0.500896, 0.538360, 0.591093, 0.733386, 1.111456",\ + "0.820213, 0.870292, 0.933027, 1.077593, 1.455130"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040532, 0.090273, 0.180246, 0.428609, 1.092443",\ + "0.040870, 0.090273, 0.180281, 0.428609, 1.092443",\ + "0.045400, 0.092351, 0.180508, 0.428609, 1.092443",\ + "0.059558, 0.100025, 0.181106, 0.428872, 1.092443",\ + "0.087354, 0.133744, 0.204884, 0.431205, 1.092443"); + } + + } /* end of arc otp_obs_i[3]_ast2padmux_o[3]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "otp_obs_i[3]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.119334, 0.186028, 0.302368, 0.619155, 1.468929",\ + "0.204833, 0.271716, 0.388876, 0.705544, 1.554647",\ + "0.293319, 0.360401, 0.477846, 0.795625, 1.643707",\ + "0.440314, 0.508488, 0.625608, 0.945855, 1.792734",\ + "0.667813, 0.745674, 0.864272, 1.183300, 2.031636"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.183691, 0.382409, 0.935142, 2.413233",\ + "0.067620, 0.183691, 0.382409, 0.935142, 2.413233",\ + "0.068262, 0.183691, 0.382508, 0.936031, 2.413233",\ + "0.073482, 0.184226, 0.382946, 0.939859, 2.413233",\ + "0.089380, 0.196045, 0.384240, 0.939859, 2.423100"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.094521, 0.125776, 0.178422, 0.320849, 0.699535",\ + "0.188239, 0.219444, 0.272075, 0.414540, 0.793202",\ + "0.291550, 0.323577, 0.376197, 0.518700, 0.897237",\ + "0.473699, 0.510899, 0.563627, 0.705929, 1.084022",\ + "0.773733, 0.823401, 0.885774, 1.030256, 1.407808"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039633, 0.090291, 0.180152, 0.428296, 1.092222",\ + "0.040262, 0.090291, 0.180217, 0.428296, 1.092377",\ + "0.044064, 0.091627, 0.180452, 0.428296, 1.092425",\ + "0.058805, 0.099616, 0.181075, 0.428844, 1.092425",\ + "0.086478, 0.132591, 0.204027, 0.431125, 1.092425"); + } + + } /* end of arc otp_obs_i[3]_ast2padmux_o[3]_una_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "379999.875000, 379999.937500, 380000.062500, 380000.375000, 380001.218750",\ + "379999.968750, 380000.031250, 380000.156250, 380000.468750, 380001.312500",\ + "380000.062500, 380000.125000, 380000.250000, 380000.562500, 380001.406250",\ + "380000.218750, 380000.281250, 380000.406250, 380000.718750, 380001.562500",\ + "380000.468750, 380000.531250, 380000.656250, 380000.968750, 380001.812500"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380001.468750, 380001.500000, 380001.562500, 380001.687500, 380002.062500",\ + "380001.562500, 380001.593750, 380001.656250, 380001.781250, 380002.156250",\ + "380001.687500, 380001.718750, 380001.781250, 380001.906250, 380002.281250",\ + "380001.875000, 380001.906250, 380001.968750, 380002.093750, 380002.468750",\ + "380002.187500, 380002.218750, 380002.281250, 380002.406250, 380002.781250"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497"); + } + + } /* end of arc padmux2ast_i[4]_ast2padmux_o[3]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "379999.843750, 379999.906250, 380000.031250, 380000.343750, 380001.187500",\ + "379999.937500, 380000.000000, 380000.125000, 380000.437500, 380001.281250",\ + "380000.000000, 380000.062500, 380000.187500, 380000.500000, 380001.343750",\ + "380000.156250, 380000.218750, 380000.343750, 380000.656250, 380001.500000",\ + "380000.375000, 380000.437500, 380000.562500, 380000.875000, 380001.718750"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380001.375000, 380001.406250, 380001.437500, 380001.593750, 380001.968750",\ + "380001.468750, 380001.500000, 380001.531250, 380001.687500, 380002.062500",\ + "380001.562500, 380001.593750, 380001.625000, 380001.781250, 380002.156250",\ + "380001.750000, 380001.781250, 380001.812500, 380001.968750, 380002.343750",\ + "380002.000000, 380002.031250, 380002.062500, 380002.218750, 380002.593750"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967"); + } + + } /* end of arc padmux2ast_i[4]_ast2padmux_o[3]_una_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380000.312500, 380000.312500, 380000.343750, 380000.406250, 380000.593750",\ + "380000.406250, 380000.406250, 380000.437500, 380000.500000, 380000.687500",\ + "380000.500000, 380000.500000, 380000.531250, 380000.593750, 380000.781250",\ + "380000.656250, 380000.656250, 380000.687500, 380000.750000, 380000.937500",\ + "380000.906250, 380000.906250, 380000.937500, 380001.000000, 380001.187500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380001.781250, 380001.843750, 380001.968750, 380002.281250, 380003.156250",\ + "380001.875000, 380001.937500, 380002.062500, 380002.375000, 380003.250000",\ + "380002.000000, 380002.062500, 380002.187500, 380002.500000, 380003.375000",\ + "380002.187500, 380002.250000, 380002.375000, 380002.687500, 380003.562500",\ + "380002.500000, 380002.562500, 380002.687500, 380003.000000, 380003.875000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526"); + } + + } /* end of arc padmux2ast_i[4]_ast2padmux_o[3]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380000.312500, 380000.312500, 380000.343750, 380000.406250, 380000.593750",\ + "380000.406250, 380000.406250, 380000.437500, 380000.500000, 380000.687500",\ + "380000.468750, 380000.468750, 380000.500000, 380000.562500, 380000.750000",\ + "380000.625000, 380000.625000, 380000.656250, 380000.718750, 380000.906250",\ + "380000.843750, 380000.843750, 380000.875000, 380000.937500, 380001.125000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380001.781250, 380001.812500, 380001.906250, 380002.187500, 380002.875000",\ + "380001.875000, 380001.906250, 380002.000000, 380002.281250, 380002.968750",\ + "380001.968750, 380002.000000, 380002.093750, 380002.375000, 380003.062500",\ + "380002.156250, 380002.187500, 380002.281250, 380002.562500, 380003.250000",\ + "380002.406250, 380002.437500, 380002.531250, 380002.812500, 380003.500000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169"); + } + + } /* end of arc padmux2ast_i[4]_ast2padmux_o[3]_inv_min*/ + +} /* end of pin ast2padmux_o[3] */ + +pin("ast2padmux_o[2]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.028584 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : ast2padmux_o[2]; + timing () { + related_pin : "clk_ast_rng_i" ; + related_output_pin : "rng_b_o[1]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.257031, 0.528778, 0.797030, 1.242767, 2.134242",\ + "0.323932, 0.595681, 0.863940, 1.309691, 2.201193",\ + "0.440368, 0.712118, 0.980382, 1.426145, 2.317669",\ + "0.760037, 1.031787, 1.300052, 1.745815, 2.637342",\ + "1.615245, 1.886993, 2.155250, 2.600997, 3.492491",\ + "0.315617, 0.587294, 0.855812, 1.300474, 2.190349",\ + "0.382518, 0.654197, 0.922722, 1.367397, 2.257300",\ + "0.498954, 0.770634, 1.039164, 1.483851, 2.373776",\ + "0.818623, 1.090303, 1.358834, 1.803522, 2.693449",\ + "1.673831, 1.945509, 2.214032, 2.658703, 3.548597",\ + "0.460207, 0.733101, 0.999707, 1.444229, 2.334082",\ + "0.527108, 0.800004, 1.066617, 1.511152, 2.401032",\ + "0.643544, 0.916442, 1.183060, 1.627606, 2.517509",\ + "0.963213, 1.236110, 1.502729, 1.947277, 2.837182",\ + "1.818421, 2.091316, 2.357927, 2.802459, 3.692330",\ + "0.496168, 0.770865, 1.036627, 1.481020, 2.370640",\ + "0.563069, 0.837768, 1.103536, 1.547944, 2.437591",\ + "0.679505, 0.954206, 1.219979, 1.664398, 2.554067",\ + "0.999174, 1.273875, 1.539648, 1.984068, 2.873740",\ + "1.854382, 2.129080, 2.394846, 2.839250, 3.728889",\ + "0.825262, 1.134787, 1.388262, 1.830277, 2.716096",\ + "0.892164, 1.201690, 1.455172, 1.897201, 2.783047",\ + "1.008600, 1.318128, 1.571615, 2.013655, 2.899523",\ + "1.328269, 1.637797, 1.891284, 2.333325, 3.219196",\ + "2.183476, 2.493002, 2.746482, 3.188507, 4.074345"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.073036, 0.073037, 0.073042, 0.073052, 0.073073",\ + "0.188928, 0.188931, 0.188942, 0.188966, 0.189013",\ + "0.391836, 0.391841, 0.391857, 0.391892, 0.391961",\ + "0.949092, 0.949101, 0.949136, 0.949210, 0.949357",\ + "2.441339, 2.441340, 2.441346, 2.441358, 2.441383",\ + "0.073036, 0.073037, 0.073042, 0.073052, 0.073073",\ + "0.188928, 0.188931, 0.188942, 0.188966, 0.189013",\ + "0.391836, 0.391841, 0.391857, 0.391892, 0.391961",\ + "0.949092, 0.949101, 0.949136, 0.949210, 0.949357",\ + "2.441339, 2.441340, 2.441346, 2.441358, 2.441383",\ + "0.073036, 0.073037, 0.073042, 0.073052, 0.073073",\ + "0.188928, 0.188931, 0.188942, 0.188966, 0.189013",\ + "0.391836, 0.391841, 0.391857, 0.391892, 0.391961",\ + "0.949092, 0.949102, 0.949136, 0.949210, 0.949357",\ + "2.441339, 2.441340, 2.441346, 2.441358, 2.441383",\ + "0.073036, 0.073037, 0.073042, 0.073052, 0.073073",\ + "0.188928, 0.188931, 0.188942, 0.188966, 0.189013",\ + "0.391836, 0.391841, 0.391857, 0.391892, 0.391961",\ + "0.949092, 0.949102, 0.949136, 0.949210, 0.949357",\ + "2.441339, 2.441340, 2.441346, 2.441358, 2.441383",\ + "0.073036, 0.073038, 0.073042, 0.073052, 0.073073",\ + "0.188928, 0.188932, 0.188943, 0.188966, 0.189013",\ + "0.391836, 0.391843, 0.391858, 0.391892, 0.391961",\ + "0.949092, 0.949105, 0.949137, 0.949210, 0.949357",\ + "2.441339, 2.441341, 2.441346, 2.441358, 2.441383"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.308725, 0.491796, 0.685627, 0.996163, 1.596700",\ + "0.340157, 0.523228, 0.717058, 1.027595, 1.628132",\ + "0.392865, 0.575936, 0.769767, 1.080304, 1.680844",\ + "0.535218, 0.718289, 0.912119, 1.222656, 1.823194",\ + "0.913815, 1.096886, 1.290716, 1.601252, 2.201788",\ + "0.368637, 0.551695, 0.745581, 1.055944, 1.656317",\ + "0.400068, 0.583126, 0.777012, 1.087376, 1.687749",\ + "0.452777, 0.635835, 0.829721, 1.140085, 1.740461",\ + "0.595130, 0.778187, 0.972073, 1.282437, 1.882811",\ + "0.973727, 1.156784, 1.350670, 1.661033, 2.261405",\ + "0.501379, 0.683946, 0.877464, 1.187801, 1.788124",\ + "0.532811, 0.715378, 0.908895, 1.219233, 1.819557",\ + "0.585519, 0.768086, 0.961603, 1.271942, 1.872268",\ + "0.727872, 0.910439, 1.103956, 1.414294, 2.014618",\ + "1.106469, 1.289036, 1.482553, 1.792891, 2.393212",\ + "0.534516, 0.717073, 0.910588, 1.220754, 1.820733",\ + "0.565947, 0.748505, 0.942020, 1.252186, 1.852165",\ + "0.618656, 0.801213, 0.994728, 1.304895, 1.904876",\ + "0.761009, 0.943566, 1.137081, 1.447247, 2.047226",\ + "1.139605, 1.322163, 1.515678, 1.825843, 2.425821",\ + "0.835592, 1.022294, 1.214223, 1.523770, 2.122581",\ + "0.867023, 1.053726, 1.245655, 1.555202, 2.154014",\ + "0.919731, 1.106434, 1.298363, 1.607911, 2.206725",\ + "1.062084, 1.248787, 1.440716, 1.750263, 2.349075",\ + "1.440681, 1.627384, 1.819313, 2.128859, 2.727669"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.039143, 0.039143, 0.039143, 0.039145, 0.039150",\ + "0.090610, 0.090610, 0.090610, 0.090608, 0.090604",\ + "0.180695, 0.180695, 0.180695, 0.180700, 0.180710",\ + "0.429275, 0.429275, 0.429275, 0.429276, 0.429279",\ + "1.090837, 1.090837, 1.090837, 1.090825, 1.090796",\ + "0.039143, 0.039143, 0.039143, 0.039145, 0.039150",\ + "0.090610, 0.090610, 0.090610, 0.090608, 0.090604",\ + "0.180695, 0.180695, 0.180695, 0.180700, 0.180710",\ + "0.429275, 0.429275, 0.429275, 0.429276, 0.429279",\ + "1.090837, 1.090837, 1.090837, 1.090825, 1.090796",\ + "0.039143, 0.039143, 0.039143, 0.039145, 0.039150",\ + "0.090610, 0.090610, 0.090610, 0.090608, 0.090604",\ + "0.180695, 0.180695, 0.180695, 0.180700, 0.180710",\ + "0.429275, 0.429275, 0.429275, 0.429276, 0.429279",\ + "1.090837, 1.090837, 1.090837, 1.090825, 1.090796",\ + "0.039143, 0.039143, 0.039143, 0.039145, 0.039150",\ + "0.090610, 0.090610, 0.090610, 0.090608, 0.090604",\ + "0.180695, 0.180695, 0.180695, 0.180700, 0.180710",\ + "0.429275, 0.429275, 0.429275, 0.429276, 0.429279",\ + "1.090837, 1.090837, 1.090837, 1.090825, 1.090796",\ + "0.039143, 0.039143, 0.039143, 0.039145, 0.039150",\ + "0.090610, 0.090610, 0.090610, 0.090608, 0.090604",\ + "0.180695, 0.180695, 0.180695, 0.180700, 0.180710",\ + "0.429275, 0.429275, 0.429275, 0.429276, 0.429279",\ + "1.090837, 1.090837, 1.090837, 1.090825, 1.090796"); + } + + } /* end of arc clk_ast_rng_i_ast2padmux_o[2]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_rng_i" ; + related_output_pin : "rng_b_o[1]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.252558, 0.520745, 0.784515, 1.222569, 2.097608",\ + "0.319449, 0.587637, 0.851411, 1.289475, 2.164534",\ + "0.435876, 0.704065, 0.967843, 1.405915, 2.280990",\ + "0.755544, 1.023733, 1.287511, 1.725584, 2.600661",\ + "1.610764, 1.878952, 2.142725, 2.580786, 3.455839",\ + "0.311120, 0.579252, 0.843280, 1.280275, 2.153714",\ + "0.378011, 0.646143, 0.910176, 1.347182, 2.220640",\ + "0.494438, 0.762572, 1.026608, 1.463622, 2.337097",\ + "0.814106, 1.082240, 1.346276, 1.783291, 2.656767",\ + "1.669326, 1.937458, 2.201490, 2.638493, 3.511946",\ + "0.455460, 0.724999, 0.987167, 1.424079, 2.297447",\ + "0.522351, 0.791891, 1.054064, 1.490985, 2.364373",\ + "0.638778, 0.908319, 1.170496, 1.607426, 2.480830",\ + "0.958446, 1.227987, 1.490164, 1.927095, 2.800500",\ + "1.813666, 2.083206, 2.345378, 2.782297, 3.655679",\ + "0.491341, 0.762735, 1.024086, 1.460950, 2.334005",\ + "0.558231, 0.829626, 1.090982, 1.527856, 2.400931",\ + "0.674659, 0.946054, 1.207414, 1.644296, 2.517388",\ + "0.994327, 1.265722, 1.527082, 1.963966, 2.837059",\ + "1.849546, 2.120941, 2.382296, 2.819168, 3.692237",\ + "0.819555, 1.126080, 1.375645, 1.810251, 2.679461",\ + "0.886446, 1.192972, 1.442542, 1.877157, 2.746387",\ + "1.002873, 1.309400, 1.558974, 1.993597, 2.862844",\ + "1.322541, 1.629068, 1.878642, 2.313266, 3.182515",\ + "2.177761, 2.484287, 2.733856, 3.168468, 4.037693"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.073031, 0.073031, 0.073033, 0.073040, 0.073054",\ + "0.188915, 0.188915, 0.188919, 0.188937, 0.188971",\ + "0.391815, 0.391816, 0.391824, 0.391849, 0.391899",\ + "0.949014, 0.949028, 0.949065, 0.949118, 0.949226",\ + "2.441330, 2.441330, 2.441334, 2.441343, 2.441361",\ + "0.073031, 0.073031, 0.073033, 0.073040, 0.073054",\ + "0.188915, 0.188915, 0.188919, 0.188937, 0.188971",\ + "0.391815, 0.391816, 0.391824, 0.391849, 0.391899",\ + "0.949014, 0.949028, 0.949065, 0.949118, 0.949226",\ + "2.441330, 2.441330, 2.441334, 2.441343, 2.441361",\ + "0.073031, 0.073031, 0.073033, 0.073040, 0.073054",\ + "0.188915, 0.188915, 0.188920, 0.188937, 0.188971",\ + "0.391815, 0.391816, 0.391824, 0.391849, 0.391899",\ + "0.949014, 0.949029, 0.949065, 0.949118, 0.949226",\ + "2.441330, 2.441330, 2.441334, 2.441343, 2.441361",\ + "0.073031, 0.073031, 0.073033, 0.073040, 0.073054",\ + "0.188915, 0.188915, 0.188920, 0.188937, 0.188971",\ + "0.391815, 0.391816, 0.391824, 0.391849, 0.391899",\ + "0.949014, 0.949029, 0.949065, 0.949119, 0.949226",\ + "2.441330, 2.441330, 2.441334, 2.441343, 2.441361",\ + "0.073031, 0.073031, 0.073033, 0.073040, 0.073054",\ + "0.188915, 0.188915, 0.188920, 0.188937, 0.188971",\ + "0.391816, 0.391816, 0.391824, 0.391849, 0.391899",\ + "0.949014, 0.949034, 0.949065, 0.949119, 0.949226",\ + "2.441330, 2.441331, 2.441334, 2.441343, 2.441361"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.262934, 0.448489, 0.641595, 0.948064, 1.538713",\ + "0.294346, 0.479902, 0.673008, 0.979478, 1.570129",\ + "0.346992, 0.532548, 0.725656, 1.032128, 1.622785",\ + "0.489407, 0.674962, 0.868069, 1.174539, 1.765190",\ + "0.868050, 1.053605, 1.246711, 1.553179, 2.143825",\ + "0.322845, 0.508317, 0.701440, 1.007833, 1.598330",\ + "0.354258, 0.539729, 0.732853, 1.039247, 1.629746",\ + "0.406904, 0.592376, 0.785500, 1.091897, 1.682402",\ + "0.549319, 0.734790, 0.927914, 1.234307, 1.824806",\ + "0.927962, 1.113433, 1.306556, 1.612947, 2.203442",\ + "0.455621, 0.640568, 0.833323, 1.139690, 1.730137",\ + "0.487034, 0.671981, 0.864736, 1.171104, 1.761553",\ + "0.539679, 0.724627, 0.917383, 1.223754, 1.814209",\ + "0.682094, 0.867041, 1.059797, 1.366165, 1.956614",\ + "1.060737, 1.245684, 1.438439, 1.744805, 2.335249",\ + "0.488779, 0.673866, 0.866553, 1.172770, 1.762998",\ + "0.520192, 0.705279, 0.897966, 1.204184, 1.794413",\ + "0.572837, 0.757925, 0.950613, 1.256834, 1.847070",\ + "0.715252, 0.900339, 1.093027, 1.399244, 1.989474",\ + "1.093896, 1.278982, 1.471669, 1.777884, 2.368110",\ + "0.790171, 0.979313, 1.170216, 1.475973, 2.065303",\ + "0.821584, 1.010726, 1.201629, 1.507387, 2.096719",\ + "0.874230, 1.063372, 1.254276, 1.560037, 2.149375",\ + "1.016645, 1.205787, 1.396689, 1.702447, 2.291780",\ + "1.395288, 1.584430, 1.775331, 2.081088, 2.670415"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.039012, 0.039013, 0.039015, 0.039021, 0.039034",\ + "0.090733, 0.090732, 0.090730, 0.090725, 0.090713",\ + "0.180377, 0.180379, 0.180385, 0.180400, 0.180431",\ + "0.429204, 0.429204, 0.429205, 0.429209, 0.429216",\ + "1.091688, 1.091683, 1.091668, 1.091629, 1.091545",\ + "0.039012, 0.039013, 0.039015, 0.039021, 0.039034",\ + "0.090733, 0.090732, 0.090730, 0.090725, 0.090713",\ + "0.180377, 0.180379, 0.180385, 0.180400, 0.180431",\ + "0.429204, 0.429204, 0.429205, 0.429209, 0.429216",\ + "1.091688, 1.091683, 1.091668, 1.091629, 1.091545",\ + "0.039012, 0.039013, 0.039015, 0.039021, 0.039034",\ + "0.090733, 0.090732, 0.090730, 0.090725, 0.090713",\ + "0.180377, 0.180379, 0.180385, 0.180400, 0.180431",\ + "0.429204, 0.429204, 0.429205, 0.429209, 0.429216",\ + "1.091688, 1.091683, 1.091668, 1.091629, 1.091545",\ + "0.039012, 0.039013, 0.039015, 0.039021, 0.039034",\ + "0.090733, 0.090732, 0.090730, 0.090725, 0.090712",\ + "0.180377, 0.180379, 0.180385, 0.180400, 0.180431",\ + "0.429204, 0.429204, 0.429205, 0.429209, 0.429216",\ + "1.091688, 1.091683, 1.091668, 1.091629, 1.091545",\ + "0.039012, 0.039013, 0.039015, 0.039021, 0.039034",\ + "0.090733, 0.090732, 0.090730, 0.090725, 0.090712",\ + "0.180378, 0.180379, 0.180385, 0.180400, 0.180431",\ + "0.429204, 0.429204, 0.429205, 0.429209, 0.429216",\ + "1.091687, 1.091683, 1.091668, 1.091628, 1.091545"); + } + + } /* end of arc clk_ast_rng_i_ast2padmux_o[2]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380001.875000, 380001.937500, 380002.062500, 380002.375000, 380003.250000",\ + "380001.968750, 380002.031250, 380002.156250, 380002.468750, 380003.343750",\ + "380002.062500, 380002.125000, 380002.250000, 380002.562500, 380003.437500",\ + "380002.125000, 380002.187500, 380002.312500, 380002.625000, 380003.500000",\ + "380002.468750, 380002.531250, 380002.656250, 380002.968750, 380003.843750"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189354, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189354, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189365, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189385, 0.392560, 0.950608, 2.441526",\ + "0.073824, 0.189425, 0.393252, 0.950608, 2.441526"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380000.437500, 380000.437500, 380000.468750, 380000.531250, 380000.718750",\ + "380000.531250, 380000.531250, 380000.562500, 380000.625000, 380000.812500",\ + "380000.593750, 380000.593750, 380000.625000, 380000.687500, 380000.875000",\ + "380000.656250, 380000.656250, 380000.687500, 380000.750000, 380000.937500",\ + "380000.968750, 380000.968750, 380001.000000, 380001.062500, 380001.250000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497"); + } + + } /* end of arc clk_ast_tlul_i_ast2padmux_o[2]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.118063, 0.173160, 0.267375, 0.527316, 1.216798",\ + "0.205470, 0.260567, 0.354781, 0.614720, 1.304204",\ + "0.286205, 0.341346, 0.435579, 0.695608, 1.384949",\ + "0.343571, 0.398793, 0.493060, 0.753254, 1.442331",\ + "0.643636, 0.699058, 0.793671, 1.054205, 1.742813"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.055140, 0.149920, 0.315966, 0.770671, 1.992169",\ + "0.055140, 0.149920, 0.315966, 0.770671, 1.992169",\ + "0.055064, 0.149920, 0.315966, 0.770616, 1.992169",\ + "0.054924, 0.149920, 0.315966, 0.770514, 1.992169",\ + "0.054820, 0.149920, 0.315966, 0.770514, 1.988361"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.068977, 0.083624, 0.108789, 0.177707, 0.362145",\ + "0.157440, 0.172093, 0.197279, 0.266195, 0.450612",\ + "0.246166, 0.261189, 0.286407, 0.355291, 0.539679",\ + "0.308361, 0.324424, 0.349591, 0.418444, 0.602842",\ + "0.630702, 0.654723, 0.683267, 0.752219, 0.936438"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.015416, 0.041075, 0.085652, 0.207740, 0.535967",\ + "0.015763, 0.041089, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967"); + } + + } /* end of arc clk_ast_tlul_i_ast2padmux_o[2]_redg_min*/ + + timing () { + related_pin : "fla_obs_i[2]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.111862, 0.178517, 0.294685, 0.611498, 1.461412",\ + "0.196887, 0.263820, 0.381200, 0.697836, 1.546758",\ + "0.280874, 0.348002, 0.465333, 0.783744, 1.631498",\ + "0.419192, 0.490016, 0.607541, 0.927454, 1.774732",\ + "0.629434, 0.713469, 0.835221, 1.155234, 2.004311"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067759, 0.184639, 0.382501, 0.937507, 2.417566",\ + "0.067759, 0.184639, 0.382501, 0.937507, 2.418347",\ + "0.069174, 0.184639, 0.382586, 0.937507, 2.418347",\ + "0.077831, 0.187460, 0.383300, 0.940319, 2.418347",\ + "0.099054, 0.205738, 0.390315, 0.940320, 2.425200"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.103322, 0.134506, 0.187130, 0.329612, 0.708263",\ + "0.188196, 0.219801, 0.272413, 0.414932, 0.793505",\ + "0.281500, 0.317246, 0.369943, 0.512302, 0.890520",\ + "0.433568, 0.478875, 0.537406, 0.680993, 1.058708",\ + "0.668936, 0.733428, 0.809479, 0.962224, 1.340585"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040521, 0.090274, 0.180244, 0.428614, 1.092440",\ + "0.042863, 0.090977, 0.180401, 0.428614, 1.092696",\ + "0.054661, 0.097371, 0.180899, 0.428690, 1.092793",\ + "0.077190, 0.120374, 0.194930, 0.430280, 1.092793",\ + "0.118581, 0.174509, 0.240947, 0.445113, 1.092793"); + } + + } /* end of arc fla_obs_i[2]_ast2padmux_o[2]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "fla_obs_i[2]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.110629, 0.177262, 0.293339, 0.610165, 1.460154",\ + "0.194795, 0.261696, 0.378936, 0.695592, 1.544629",\ + "0.275980, 0.343081, 0.460479, 0.778514, 1.626463",\ + "0.408884, 0.478137, 0.595421, 0.915532, 1.762573",\ + "0.610985, 0.691263, 0.810230, 1.128954, 1.977655"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067834, 0.183634, 0.382402, 0.934951, 2.414331",\ + "0.067834, 0.183634, 0.382402, 0.934951, 2.414331",\ + "0.068631, 0.183634, 0.382540, 0.936478, 2.414331",\ + "0.075251, 0.185541, 0.383090, 0.939701, 2.414331",\ + "0.093347, 0.198994, 0.384563, 0.939701, 2.425563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.077370, 0.108647, 0.161299, 0.303710, 0.682406",\ + "0.166391, 0.197521, 0.250129, 0.392651, 0.771277",\ + "0.253394, 0.288299, 0.340979, 0.483371, 0.861661",\ + "0.395347, 0.439383, 0.496795, 0.640121, 1.017884",\ + "0.615736, 0.679130, 0.754042, 0.905113, 1.283136"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039363, 0.090228, 0.180124, 0.428312, 1.092155",\ + "0.041196, 0.090228, 0.180315, 0.428312, 1.092511",\ + "0.052267, 0.096073, 0.180798, 0.428601, 1.092511",\ + "0.074482, 0.116813, 0.192279, 0.430033, 1.092511",\ + "0.116096, 0.171326, 0.236992, 0.441817, 1.092511"); + } + + } /* end of arc fla_obs_i[2]_ast2padmux_o[2]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[10]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.059999, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.443642, 0.510546, 0.626985, 0.946654, 1.801858",\ + "0.465905, 0.532810, 0.649248, 0.968917, 1.824121",\ + "0.522299, 0.589203, 0.705642, 1.025311, 1.880515",\ + "0.620162, 0.687066, 0.803505, 1.123173, 1.978378",\ + "1.134534, 1.201443, 1.317885, 1.637554, 2.492753"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.059999, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073042, 0.188941, 0.391856, 0.949133, 2.441345"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.053775, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.490585, 0.522017, 0.574725, 0.717078, 1.095675",\ + "0.512119, 0.543551, 0.596259, 0.738612, 1.117209",\ + "0.579305, 0.610737, 0.663445, 0.805798, 1.184395",\ + "0.689604, 0.721035, 0.773743, 0.916096, 1.294693",\ + "1.248357, 1.279789, 1.332497, 1.474850, 1.853447"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.053775, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090836"); + } + + } /* end of arc obs_ctrl_o[10]_ast2padmux_o[2]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[10]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.056753, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.412827, 0.479717, 0.596144, 0.915812, 1.771032",\ + "0.433604, 0.500495, 0.616922, 0.936590, 1.791810",\ + "0.491196, 0.558086, 0.674513, 0.994181, 1.849401",\ + "0.589141, 0.656031, 0.772458, 1.092126, 1.947346",\ + "1.077990, 1.144880, 1.261307, 1.580975, 2.436195"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.056753, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044579, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.392762, 0.424174, 0.476820, 0.619235, 0.997878",\ + "0.410167, 0.441580, 0.494226, 0.636641, 1.015284",\ + "0.482737, 0.514149, 0.566795, 0.709210, 1.087853",\ + "0.595371, 0.626784, 0.679430, 0.821845, 1.200488",\ + "1.122399, 1.153812, 1.206458, 1.348872, 1.727516"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044579, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687"); + } + + } /* end of arc obs_ctrl_o[10]_ast2padmux_o[2]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[10]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.059999, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.437382, 0.468814, 0.521522, 0.663875, 1.042472",\ + "0.462451, 0.493883, 0.546591, 0.688944, 1.067541",\ + "0.531672, 0.563103, 0.615812, 0.758164, 1.136761",\ + "0.655903, 0.687335, 0.740043, 0.882396, 1.260993",\ + "1.288504, 1.319936, 1.372644, 1.514997, 1.893594"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.059999, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090836"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.053775, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.675759, 0.742664, 0.859102, 1.178771, 2.033976",\ + "0.696234, 0.763138, 0.879577, 1.199246, 2.054450",\ + "0.755094, 0.821998, 0.938437, 1.258106, 2.113310",\ + "0.864334, 0.931238, 1.047677, 1.367346, 2.222550",\ + "1.641748, 1.708657, 1.825099, 2.144769, 2.999968"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.053775, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073042, 0.188941, 0.391856, 0.949133, 2.441345"); + } + + } /* end of arc obs_ctrl_o[10]_ast2padmux_o[2]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[10]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.056753, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.262392, 0.293804, 0.346450, 0.488865, 0.867508",\ + "0.286002, 0.317414, 0.370060, 0.512475, 0.891118",\ + "0.357340, 0.388753, 0.441399, 0.583814, 0.962457",\ + "0.477148, 0.508560, 0.561206, 0.703621, 1.082264",\ + "1.022245, 1.053658, 1.106303, 1.248718, 1.627362"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.056753, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044579, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.582342, 0.649232, 0.765660, 1.085328, 1.940547",\ + "0.599034, 0.665924, 0.782351, 1.102020, 1.957239",\ + "0.661428, 0.728319, 0.844746, 1.164414, 2.019634",\ + "0.770818, 0.837708, 0.954135, 1.273803, 2.129023",\ + "1.507966, 1.574856, 1.691283, 2.010951, 2.866171"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044579, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330"); + } + + } /* end of arc obs_ctrl_o[10]_ast2padmux_o[2]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[11]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.034927, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.180024, 0.211452, 0.264149, 0.406513, 0.785119",\ + "0.193406, 0.224834, 0.277531, 0.419896, 0.798501",\ + "0.275919, 0.307349, 0.360051, 0.502410, 0.881011",\ + "0.400910, 0.432352, 0.485095, 0.627414, 1.005985",\ + "0.975060, 1.010086, 1.063144, 1.205732, 1.584486"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.034927, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039119, 0.090633, 0.180636, 0.429262, 1.090996",\ + "0.039119, 0.090633, 0.180636, 0.429262, 1.090996",\ + "0.039132, 0.090633, 0.180667, 0.429269, 1.090996",\ + "0.039215, 0.090633, 0.180868, 0.429314, 1.090996",\ + "0.049347, 0.094034, 0.180868, 0.429355, 1.091896"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037147, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.465437, 0.532662, 0.649281, 0.969044, 1.824018",\ + "0.477695, 0.544920, 0.661539, 0.981302, 1.836276",\ + "0.541916, 0.609140, 0.725760, 1.045521, 1.900495",\ + "0.644626, 0.711856, 0.828474, 1.148242, 2.003221",\ + "1.319722, 1.387140, 1.503696, 1.823662, 2.678811"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037147, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073817, 0.189281, 0.392442, 0.950607, 2.441526",\ + "0.073817, 0.189281, 0.392442, 0.950607, 2.441526",\ + "0.073817, 0.189282, 0.392442, 0.950607, 2.441526",\ + "0.073862, 0.189282, 0.392442, 0.950619, 2.441526",\ + "0.075399, 0.189282, 0.392442, 0.951039, 2.441526"); + } + + } /* end of arc obs_ctrl_o[11]_ast2padmux_o[2]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[11]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.030664, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.159139, 0.190553, 0.243202, 0.385613, 0.764254",\ + "0.170514, 0.201928, 0.254577, 0.396989, 0.775629",\ + "0.255576, 0.286993, 0.339652, 0.482053, 0.860686",\ + "0.379908, 0.411340, 0.464049, 0.606401, 0.984998",\ + "0.945167, 0.979651, 1.032663, 1.175209, 1.553933"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.030664, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039020, 0.090609, 0.180397, 0.429208, 1.090831",\ + "0.039020, 0.090609, 0.180397, 0.429208, 1.090831",\ + "0.039042, 0.090609, 0.180449, 0.429220, 1.090831",\ + "0.039144, 0.090609, 0.180675, 0.429276, 1.090831",\ + "0.047820, 0.093501, 0.180675, 0.429352, 1.091629"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.028580, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.461683, 0.528880, 0.645509, 0.965243, 1.820192",\ + "0.470327, 0.537524, 0.654153, 0.973887, 1.828836",\ + "0.538174, 0.605371, 0.721999, 1.041733, 1.896681",\ + "0.640782, 0.707985, 0.824611, 1.144351, 1.999304",\ + "1.312551, 1.379913, 1.496487, 1.816396, 2.671496"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.028580, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073594, 0.189124, 0.392388, 0.950544, 2.441454",\ + "0.073594, 0.189124, 0.392388, 0.950544, 2.441454",\ + "0.073594, 0.189124, 0.392388, 0.950544, 2.441454",\ + "0.073633, 0.189124, 0.392388, 0.950557, 2.441454",\ + "0.074954, 0.189124, 0.392388, 0.950917, 2.441454"); + } + + } /* end of arc obs_ctrl_o[11]_ast2padmux_o[2]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.500858, 0.568082, 0.684702, 1.004464, 1.859437",\ + "0.516623, 0.583848, 0.700467, 1.020230, 1.875203",\ + "0.590734, 0.657958, 0.774578, 1.094340, 1.949314",\ + "0.681946, 0.749171, 0.865790, 1.185553, 2.040526",\ + "1.108576, 1.175805, 1.292423, 1.612190, 2.467167"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073816, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073848, 0.189277, 0.392440, 0.950615, 2.441524"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.275118, 0.306284, 0.358903, 0.501398, 0.880041",\ + "0.290749, 0.321915, 0.374533, 0.517029, 0.895671",\ + "0.363703, 0.394869, 0.447488, 0.589983, 0.968626",\ + "0.474794, 0.505959, 0.558577, 0.701073, 1.079716",\ + "1.013269, 1.044421, 1.097036, 1.239541, 1.618177"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040759, 0.090626, 0.180653, 0.429266, 1.092499",\ + "0.040922, 0.090525, 0.180916, 0.429325, 1.092539"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[2]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.337608, 0.404302, 0.520641, 0.837429, 1.687203",\ + "0.349939, 0.416633, 0.532972, 0.849760, 1.699534",\ + "0.408752, 0.475446, 0.591785, 0.908573, 1.758347",\ + "0.496083, 0.562777, 0.679117, 0.995905, 1.845678",\ + "0.949078, 1.015776, 1.132136, 1.448920, 2.298678"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184560, 0.382485, 0.937098, 2.417677",\ + "0.067604, 0.184551, 0.382483, 0.937052, 2.417689"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.209985, 0.241400, 0.294052, 0.436461, 0.815099",\ + "0.221857, 0.253271, 0.305923, 0.448332, 0.826970",\ + "0.304351, 0.335766, 0.388417, 0.530826, 0.909465",\ + "0.409226, 0.440642, 0.493298, 0.635702, 1.014338",\ + "0.909442, 0.940877, 0.993596, 1.135938, 1.514527"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039034, 0.090327, 0.180161, 0.428971, 1.091542",\ + "0.039166, 0.090324, 0.180166, 0.428948, 1.090692"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[2]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.287803, 0.318969, 0.371587, 0.514083, 0.892726",\ + "0.303569, 0.334734, 0.387353, 0.529848, 0.908491",\ + "0.378810, 0.409975, 0.462594, 0.605089, 0.983732",\ + "0.473884, 0.505049, 0.557668, 0.700163, 1.078806",\ + "0.918190, 0.949342, 1.001956, 1.144462, 1.523098"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040759, 0.090626, 0.180653, 0.429266, 1.092499",\ + "0.040922, 0.090525, 0.180916, 0.429325, 1.092539"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.376755, 0.443500, 0.560063, 0.876818, 1.726409",\ + "0.392417, 0.459162, 0.575725, 0.892480, 1.742071",\ + "0.467424, 0.534169, 0.650732, 0.967487, 1.817078",\ + "0.562603, 0.629351, 0.745928, 1.062681, 1.912261",\ + "1.006927, 1.073706, 1.190415, 1.507149, 2.356620"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073816, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073848, 0.189277, 0.392440, 0.950615, 2.441524"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[2]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.264318, 0.295567, 0.348210, 0.490643, 0.869326",\ + "0.278489, 0.309737, 0.362381, 0.504814, 0.883496",\ + "0.355325, 0.386573, 0.439217, 0.581649, 0.960332",\ + "0.450369, 0.481617, 0.534260, 0.676693, 1.055376",\ + "0.893831, 0.925076, 0.977718, 1.120154, 1.498834"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039034, 0.090327, 0.180161, 0.428971, 1.091542",\ + "0.039166, 0.090324, 0.180166, 0.428948, 1.090692"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.373701, 0.440395, 0.556734, 0.873522, 1.723296",\ + "0.385572, 0.452266, 0.568605, 0.885393, 1.735167",\ + "0.464371, 0.531065, 0.647404, 0.964192, 1.813966",\ + "0.559385, 0.626079, 0.742420, 1.059207, 1.908981",\ + "1.002245, 1.068944, 1.185303, 1.502088, 2.351846"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184560, 0.382485, 0.937098, 2.417677",\ + "0.067604, 0.184551, 0.382483, 0.937052, 2.417689"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[2]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.337998, 0.404744, 0.521308, 0.838063, 1.687653",\ + "0.353177, 0.419923, 0.536487, 0.853242, 1.702832",\ + "0.412195, 0.478941, 0.595505, 0.912260, 1.761850",\ + "0.508449, 0.575199, 0.691783, 1.008535, 1.858109",\ + "0.997007, 1.063817, 1.180658, 1.497372, 2.346736"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073812, 0.189282, 0.392442, 0.950605, 2.441527",\ + "0.073812, 0.189282, 0.392442, 0.950605, 2.441527",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073887, 0.189271, 0.392439, 0.950626, 2.441522",\ + "0.075818, 0.189005, 0.392348, 0.951153, 2.441399"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.272032, 0.303198, 0.355817, 0.498312, 0.876955",\ + "0.289891, 0.321056, 0.373675, 0.516170, 0.894813",\ + "0.360955, 0.392121, 0.444739, 0.587235, 0.965878",\ + "0.471378, 0.502542, 0.555160, 0.697656, 1.076298",\ + "1.004117, 1.035227, 1.087829, 1.230366, 1.608983"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090633, 0.180635, 0.429262, 1.092497",\ + "0.040752, 0.090633, 0.180635, 0.429262, 1.092497",\ + "0.040752, 0.090633, 0.180666, 0.429269, 1.092497",\ + "0.040771, 0.090633, 0.180871, 0.429315, 1.092502",\ + "0.049622, 0.094130, 0.180871, 0.429356, 1.092666"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[2]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.329221, 0.395915, 0.512254, 0.829041, 1.678816",\ + "0.344592, 0.411286, 0.527624, 0.844412, 1.694187",\ + "0.406780, 0.473474, 0.589813, 0.906601, 1.756375",\ + "0.502234, 0.568932, 0.685288, 1.002073, 1.851833",\ + "0.957622, 1.024367, 1.140929, 1.457685, 2.307276"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067607, 0.184553, 0.382483, 0.937060, 2.417687",\ + "0.067439, 0.184458, 0.382464, 0.936568, 2.417820"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.231492, 0.262740, 0.315383, 0.457816, 0.836499",\ + "0.245351, 0.276600, 0.329243, 0.471676, 0.850359",\ + "0.320124, 0.351372, 0.404016, 0.546449, 0.925131",\ + "0.430166, 0.461410, 0.514053, 0.656489, 1.035169",\ + "0.955028, 0.986237, 1.038869, 1.181331, 1.559995"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039018, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039018, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039041, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039146, 0.090294, 0.180167, 0.428752, 1.090822",\ + "0.040211, 0.090294, 0.180212, 0.428752, 1.091676"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[2]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.176901, 0.208329, 0.261026, 0.403390, 0.781996",\ + "0.196158, 0.227585, 0.280282, 0.422647, 0.801252",\ + "0.273304, 0.304734, 0.357436, 0.499795, 0.878396",\ + "0.397207, 0.428649, 0.481392, 0.623711, 1.002282",\ + "0.961790, 0.996912, 1.049978, 1.192575, 1.571334"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090633, 0.180635, 0.429262, 1.092497",\ + "0.040752, 0.090633, 0.180635, 0.429262, 1.092497",\ + "0.040752, 0.090633, 0.180666, 0.429269, 1.092497",\ + "0.040771, 0.090633, 0.180871, 0.429315, 1.092502",\ + "0.049622, 0.094130, 0.180871, 0.429356, 1.092666"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.455825, 0.523049, 0.639668, 0.959430, 1.814404",\ + "0.468963, 0.536187, 0.652807, 0.972569, 1.827542",\ + "0.531289, 0.598514, 0.715133, 1.034896, 1.889869",\ + "0.640154, 0.707387, 0.824004, 1.143775, 1.998757",\ + "1.332501, 1.399969, 1.516508, 1.836528, 2.691724"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073812, 0.189282, 0.392442, 0.950605, 2.441527",\ + "0.073812, 0.189282, 0.392442, 0.950605, 2.441527",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073887, 0.189271, 0.392439, 0.950626, 2.441522",\ + "0.075818, 0.189005, 0.392348, 0.951153, 2.441399"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[2]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.155833, 0.187247, 0.239896, 0.382308, 0.760949",\ + "0.173482, 0.204896, 0.257545, 0.399957, 0.778598",\ + "0.252964, 0.284381, 0.337040, 0.479441, 0.858074",\ + "0.376196, 0.407628, 0.460337, 0.602689, 0.981285",\ + "0.931678, 0.966257, 1.019278, 1.161831, 1.540560"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039018, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039018, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039041, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039146, 0.090294, 0.180167, 0.428752, 1.090822",\ + "0.040211, 0.090294, 0.180212, 0.428752, 1.091676"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.452081, 0.519278, 0.635907, 0.955640, 1.810589",\ + "0.461862, 0.529059, 0.645688, 0.965421, 1.820370",\ + "0.527542, 0.594739, 0.711368, 1.031102, 1.886050",\ + "0.636262, 0.703467, 0.820093, 1.139835, 1.994791",\ + "1.324350, 1.391756, 1.508316, 1.828270, 2.683409"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067607, 0.184553, 0.382483, 0.937060, 2.417687",\ + "0.067439, 0.184458, 0.382464, 0.936568, 2.417820"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[2]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.325984, 0.393209, 0.509828, 0.829592, 1.684567",\ + "0.341732, 0.408957, 0.525576, 0.845340, 1.700314",\ + "0.405621, 0.472847, 0.589466, 0.909229, 1.764204",\ + "0.483984, 0.551208, 0.667827, 0.987590, 1.842564",\ + "0.876566, 0.943791, 1.060410, 1.380173, 2.235147"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189281, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189281, 0.392442, 0.950608, 2.441526"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.207560, 0.238992, 0.291700, 0.434053, 0.812650",\ + "0.223441, 0.254873, 0.307582, 0.449934, 0.828531",\ + "0.292964, 0.324396, 0.377105, 0.519457, 0.898054",\ + "0.382304, 0.413736, 0.466444, 0.608797, 0.987394",\ + "0.808201, 0.839636, 0.892354, 1.034697, 1.413287"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180696, 0.429275, 1.092497",\ + "0.040785, 0.090610, 0.180744, 0.429286, 1.092505"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[2]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.298728, 0.365697, 0.482189, 0.801862, 1.656989",\ + "0.312838, 0.379807, 0.496299, 0.815972, 1.671100",\ + "0.378416, 0.445385, 0.561877, 0.881551, 1.736677",\ + "0.456978, 0.523948, 0.640441, 0.960115, 1.815240",\ + "0.852482, 0.919491, 1.036016, 1.355692, 2.210772"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067586, 0.184541, 0.382481, 0.936998, 2.417704"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.185526, 0.216941, 0.269593, 0.412001, 0.790640",\ + "0.197528, 0.228943, 0.281595, 0.424004, 0.802642",\ + "0.270950, 0.302365, 0.355017, 0.497425, 0.876064",\ + "0.360375, 0.391790, 0.444442, 0.586850, 0.965489",\ + "0.786063, 0.817479, 0.870138, 1.012540, 1.391174"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039039, 0.090322, 0.180169, 0.428938, 1.091513"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[2]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.314064, 0.345229, 0.397848, 0.540343, 0.918986",\ + "0.329859, 0.361025, 0.413644, 0.556139, 0.934782",\ + "0.407724, 0.438890, 0.491508, 0.634004, 1.012646",\ + "0.508778, 0.539944, 0.592562, 0.735058, 1.113701",\ + "0.984655, 1.015818, 1.068436, 1.210933, 1.589574"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180696, 0.429275, 1.092497",\ + "0.040785, 0.090610, 0.180744, 0.429286, 1.092505"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.596327, 0.663552, 0.780171, 1.099935, 1.954909",\ + "0.609131, 0.676356, 0.792975, 1.112739, 1.967713",\ + "0.677113, 0.744339, 0.860958, 1.180721, 2.035696",\ + "0.788810, 0.856034, 0.972654, 1.292416, 2.147390",\ + "1.273667, 1.340892, 1.457511, 1.777274, 2.632248"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189281, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189281, 0.392442, 0.950608, 2.441526"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[2]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.262848, 0.294262, 0.346915, 0.489323, 0.867962",\ + "0.276998, 0.308413, 0.361065, 0.503474, 0.882112",\ + "0.356726, 0.388141, 0.440793, 0.583202, 0.961840",\ + "0.457948, 0.489362, 0.542015, 0.684423, 1.063061",\ + "0.929777, 0.961193, 1.013852, 1.156254, 1.534888"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039039, 0.090322, 0.180169, 0.428938, 1.091513"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.437011, 0.503705, 0.620045, 0.936832, 1.786606",\ + "0.446608, 0.513302, 0.629642, 0.946429, 1.796203",\ + "0.517780, 0.584475, 0.700814, 1.017602, 1.867376",\ + "0.629396, 0.696091, 0.812430, 1.129218, 1.978992",\ + "1.131911, 1.198614, 1.314996, 1.631778, 2.481517"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067586, 0.184541, 0.382481, 0.936998, 2.417704"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[2]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[7]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.060518, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.315427, 0.346593, 0.399212, 0.541707, 0.920350",\ + "0.342146, 0.373312, 0.425930, 0.568426, 0.947068",\ + "0.410184, 0.441350, 0.493968, 0.636464, 1.015106",\ + "0.512927, 0.544093, 0.596711, 0.739207, 1.117850",\ + "0.999580, 1.030743, 1.083361, 1.225858, 1.604500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.060518, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180697, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180697, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180697, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180732, 0.429283, 1.092497",\ + "0.042004, 0.091469, 0.180867, 0.429340, 1.092504"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.051005, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.597332, 0.664558, 0.781177, 1.100940, 1.955915",\ + "0.618079, 0.685305, 0.801924, 1.121688, 1.976662",\ + "0.683404, 0.750630, 0.867249, 1.187012, 2.041987",\ + "0.797603, 0.864828, 0.981447, 1.301210, 2.156184",\ + "1.375793, 1.443018, 1.559637, 1.879400, 2.734374"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.051005, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950609, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073823, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073819, 0.189281, 0.392442, 0.950607, 2.441526",\ + "0.073817, 0.189281, 0.392442, 0.950607, 2.441526"); + } + + } /* end of arc obs_ctrl_o[7]_ast2padmux_o[2]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[7]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.049671, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.150722, 0.182137, 0.234789, 0.377197, 0.755836",\ + "0.171205, 0.202620, 0.255272, 0.397681, 0.776319",\ + "0.246518, 0.277932, 0.330585, 0.472993, 0.851631",\ + "0.352324, 0.383738, 0.436391, 0.578799, 0.957437",\ + "0.825559, 0.856975, 0.909634, 1.052036, 1.430670"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.049671, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039038, 0.090323, 0.180168, 0.428941, 1.091519"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040467, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.277343, 0.344312, 0.460804, 0.780477, 1.635605",\ + "0.293355, 0.360323, 0.476815, 0.796489, 1.651616",\ + "0.366113, 0.433085, 0.549579, 0.869253, 1.724376",\ + "0.487008, 0.554003, 0.670516, 0.990192, 1.845287",\ + "1.141953, 1.209132, 1.325766, 1.645481, 2.500414"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040467, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067601, 0.184550, 0.382483, 0.937044, 2.417691"); + } + + } /* end of arc obs_ctrl_o[7]_ast2padmux_o[2]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[8]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045711, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.700503, 0.767407, 0.883846, 1.203515, 2.058719",\ + "0.718853, 0.785757, 0.902195, 1.221864, 2.077069",\ + "0.789396, 0.856300, 0.972739, 1.292408, 2.147612",\ + "0.881867, 0.948772, 1.065210, 1.384879, 2.240083",\ + "1.366874, 1.433786, 1.550230, 1.869900, 2.725095"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045711, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073043, 0.188945, 0.391861, 0.949146, 2.441348"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044476, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.488066, 0.519497, 0.572205, 0.714558, 1.093155",\ + "0.505493, 0.536925, 0.589633, 0.731986, 1.110583",\ + "0.582890, 0.614322, 0.667030, 0.809383, 1.187980",\ + "0.691204, 0.722635, 0.775344, 0.917696, 1.296293",\ + "1.242374, 1.273805, 1.326514, 1.468867, 1.847463"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044476, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090836"); + } + + } /* end of arc obs_ctrl_o[8]_ast2padmux_o[2]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[8]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.041900, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.636502, 0.703393, 0.819820, 1.139488, 1.994708",\ + "0.653118, 0.720008, 0.836435, 1.156103, 2.011323",\ + "0.727539, 0.794429, 0.910857, 1.230525, 2.085744",\ + "0.821960, 0.888850, 1.005277, 1.324945, 2.180165",\ + "1.269718, 1.336608, 1.453035, 1.772703, 2.627923"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.041900, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035639, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.339768, 0.371181, 0.423827, 0.566242, 0.944885",\ + "0.353114, 0.384527, 0.437173, 0.579588, 0.958231",\ + "0.435092, 0.466504, 0.519150, 0.661565, 1.040208",\ + "0.544311, 0.575724, 0.628370, 0.770784, 1.149428",\ + "1.067931, 1.099343, 1.151989, 1.294404, 1.673047"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035639, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687"); + } + + } /* end of arc obs_ctrl_o[8]_ast2padmux_o[2]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[8]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045711, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.524400, 0.555831, 0.608540, 0.750893, 1.129489",\ + "0.542749, 0.574181, 0.626889, 0.769242, 1.147839",\ + "0.616605, 0.648037, 0.700745, 0.843098, 1.221695",\ + "0.714865, 0.746296, 0.799004, 0.941357, 1.319954",\ + "1.237234, 1.268665, 1.321373, 1.463726, 1.842323"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045711, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090836"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044476, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.651244, 0.718149, 0.834587, 1.154256, 2.009460",\ + "0.663867, 0.730771, 0.847209, 1.166878, 2.022083",\ + "0.718781, 0.785685, 0.902124, 1.221793, 2.076997",\ + "0.821201, 0.888105, 1.004544, 1.324213, 2.179417",\ + "1.548479, 1.615391, 1.731835, 2.051504, 2.906700"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044476, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073043, 0.188945, 0.391861, 0.949146, 2.441348"); + } + + } /* end of arc obs_ctrl_o[8]_ast2padmux_o[2]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[8]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.041900, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.267796, 0.299208, 0.351854, 0.494269, 0.872912",\ + "0.284541, 0.315954, 0.368600, 0.511015, 0.889658",\ + "0.362798, 0.394211, 0.446856, 0.589271, 0.967914",\ + "0.486677, 0.518090, 0.570736, 0.713151, 1.091794",\ + "1.055266, 1.086678, 1.139324, 1.281739, 1.660382"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.041900, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035639, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.456335, 0.523226, 0.639653, 0.959321, 1.814541",\ + "0.469682, 0.536572, 0.652999, 0.972667, 1.827887",\ + "0.547821, 0.614711, 0.731138, 1.050806, 1.906026",\ + "0.649000, 0.715890, 0.832317, 1.151985, 2.007205",\ + "1.120855, 1.187745, 1.304172, 1.623840, 2.479060"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035639, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330"); + } + + } /* end of arc obs_ctrl_o[8]_ast2padmux_o[2]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[9]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.046138, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.712314, 0.779218, 0.895657, 1.215326, 2.070530",\ + "0.730867, 0.797771, 0.914210, 1.233879, 2.089083",\ + "0.803565, 0.870469, 0.986908, 1.306577, 2.161781",\ + "0.898790, 0.965694, 1.082133, 1.401802, 2.257006",\ + "1.358120, 1.425029, 1.541471, 1.861141, 2.716340"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.046138, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073041, 0.188941, 0.391855, 0.949133, 2.441345"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044715, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.494441, 0.525873, 0.578581, 0.720934, 1.099531",\ + "0.511983, 0.543415, 0.596123, 0.738476, 1.117073",\ + "0.589312, 0.620744, 0.673452, 0.815805, 1.194402",\ + "0.698758, 0.730189, 0.782897, 0.925250, 1.303847",\ + "1.229663, 1.261095, 1.313803, 1.456156, 1.834753"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044715, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090836"); + } + + } /* end of arc obs_ctrl_o[9]_ast2padmux_o[2]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[9]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.042344, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.668630, 0.735520, 0.851947, 1.171615, 2.026835",\ + "0.685451, 0.752341, 0.868768, 1.188436, 2.043656",\ + "0.759882, 0.826773, 0.943200, 1.262868, 2.118088",\ + "0.855138, 0.922028, 1.038455, 1.358123, 2.213343",\ + "1.307789, 1.374679, 1.491106, 1.810774, 2.665994"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.042344, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035869, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.361699, 0.393111, 0.445757, 0.588172, 0.966815",\ + "0.375155, 0.406568, 0.459214, 0.601628, 0.980272",\ + "0.456576, 0.487988, 0.540634, 0.683049, 1.061692",\ + "0.566550, 0.597963, 0.650609, 0.793024, 1.171667",\ + "1.091986, 1.123399, 1.176044, 1.318459, 1.697102"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035869, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687"); + } + + } /* end of arc obs_ctrl_o[9]_ast2padmux_o[2]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[9]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.046138, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.528266, 0.559698, 0.612406, 0.754759, 1.133356",\ + "0.546819, 0.578250, 0.630959, 0.773312, 1.151908",\ + "0.620877, 0.652309, 0.705017, 0.847370, 1.225967",\ + "0.719978, 0.751410, 0.804118, 0.946471, 1.325068",\ + "1.192613, 1.224045, 1.276753, 1.419106, 1.797703"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.046138, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090836"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044715, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.606303, 0.673207, 0.789646, 1.109315, 1.964519",\ + "0.618992, 0.685897, 0.802335, 1.122004, 1.977208",\ + "0.673763, 0.740668, 0.857106, 1.176775, 2.031980",\ + "0.776802, 0.843707, 0.960145, 1.279814, 2.135018",\ + "1.483718, 1.550627, 1.667069, 1.986738, 2.841937"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044715, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073041, 0.188941, 0.391855, 0.949133, 2.441345"); + } + + } /* end of arc obs_ctrl_o[9]_ast2padmux_o[2]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[9]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.042344, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.262699, 0.294112, 0.346758, 0.489173, 0.867816",\ + "0.279513, 0.310926, 0.363572, 0.505987, 0.884630",\ + "0.357852, 0.389264, 0.441910, 0.584325, 0.962968",\ + "0.480383, 0.511796, 0.564441, 0.706856, 1.085500",\ + "1.037548, 1.068961, 1.121607, 1.264022, 1.642665"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.042344, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035869, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.463612, 0.530502, 0.646929, 0.966597, 1.821817",\ + "0.477068, 0.543958, 0.660386, 0.980054, 1.835274",\ + "0.555357, 0.622247, 0.738674, 1.058342, 1.913562",\ + "0.655033, 0.721923, 0.838350, 1.158018, 2.013238",\ + "1.119877, 1.186768, 1.303195, 1.622863, 2.478083"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035869, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330"); + } + + } /* end of arc obs_ctrl_o[9]_ast2padmux_o[2]_inv_min*/ + + timing () { + related_pin : "otm_obs_i[2]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.123879, 0.190820, 0.307288, 0.626960, 1.482121",\ + "0.210891, 0.277978, 0.394567, 0.714249, 1.569235",\ + "0.301781, 0.369068, 0.485667, 0.805496, 1.660526",\ + "0.453978, 0.523120, 0.640034, 0.960158, 1.815427",\ + "0.695902, 0.774527, 0.893732, 1.214148, 2.069560"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073065, 0.188997, 0.391936, 0.949305, 2.441374",\ + "0.073175, 0.189249, 0.392304, 0.950092, 2.441498",\ + "0.074330, 0.189249, 0.392418, 0.950747, 2.441498",\ + "0.079436, 0.191164, 0.392505, 0.951076, 2.441498",\ + "0.098084, 0.204137, 0.393542, 0.951076, 2.441498"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.114293, 0.145721, 0.198417, 0.340782, 0.719388",\ + "0.205394, 0.236828, 0.289545, 0.431889, 0.810480",\ + "0.309904, 0.342065, 0.394885, 0.537244, 0.915841",\ + "0.501618, 0.536979, 0.590065, 0.732680, 1.111452",\ + "0.825607, 0.870622, 0.930343, 1.075147, 1.454209"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039117, 0.090634, 0.180632, 0.429261, 1.091005",\ + "0.039161, 0.090634, 0.180739, 0.429285, 1.091005",\ + "0.041267, 0.091212, 0.180891, 0.429338, 1.091005",\ + "0.050293, 0.094364, 0.180891, 0.429357, 1.092061",\ + "0.068556, 0.114740, 0.192215, 0.429716, 1.093122"); + } + + } /* end of arc otm_obs_i[2]_ast2padmux_o[2]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "otm_obs_i[2]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.120559, 0.187489, 0.303948, 0.623619, 1.478793",\ + "0.205712, 0.272774, 0.389342, 0.709022, 1.564038",\ + "0.292652, 0.359907, 0.476516, 0.796311, 1.651312",\ + "0.437434, 0.505450, 0.622092, 0.942182, 1.797434",\ + "0.662107, 0.738115, 0.856688, 1.177023, 2.032395"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073057, 0.188977, 0.391908, 0.949245, 2.441364",\ + "0.073156, 0.189206, 0.392241, 0.949956, 2.441378",\ + "0.074065, 0.189247, 0.392382, 0.950255, 2.441378",\ + "0.077223, 0.189624, 0.392382, 0.950255, 2.441378",\ + "0.092938, 0.200557, 0.393255, 0.950255, 2.441468"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.094368, 0.125782, 0.178430, 0.320842, 0.699483",\ + "0.188259, 0.219683, 0.272369, 0.414744, 0.793358",\ + "0.291365, 0.323244, 0.376040, 0.518376, 0.896959",\ + "0.474009, 0.509208, 0.562280, 0.704883, 1.083646",\ + "0.777508, 0.822171, 0.881623, 1.026340, 1.405392"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039018, 0.090654, 0.180392, 0.429207, 1.090346",\ + "0.039096, 0.090654, 0.180581, 0.429249, 1.090346",\ + "0.040472, 0.090934, 0.180608, 0.429337, 1.090346",\ + "0.049836, 0.094205, 0.180608, 0.429356, 1.091981",\ + "0.067933, 0.113945, 0.191732, 0.429701, 1.093101"); + } + + } /* end of arc otm_obs_i[2]_ast2padmux_o[2]_una_min*/ + + timing () { + related_pin : "otp_obs_i[2]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.122660, 0.189370, 0.305783, 0.622560, 1.472274",\ + "0.209824, 0.276743, 0.394059, 0.710704, 1.559679",\ + "0.301920, 0.369023, 0.486415, 0.804486, 1.652417",\ + "0.455547, 0.524976, 0.642287, 0.962376, 1.809444",\ + "0.699992, 0.780922, 0.900058, 1.218756, 2.067549"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067561, 0.184527, 0.382478, 0.936925, 2.417724",\ + "0.067561, 0.184527, 0.382478, 0.936925, 2.418306",\ + "0.068683, 0.184527, 0.382544, 0.936925, 2.418306",\ + "0.075540, 0.185756, 0.383113, 0.940410, 2.418306",\ + "0.094401, 0.199857, 0.384817, 0.940410, 2.426093"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.114764, 0.145947, 0.198571, 0.341053, 0.719705",\ + "0.205629, 0.236785, 0.289401, 0.431904, 0.810542",\ + "0.310076, 0.342571, 0.395201, 0.537686, 0.916183",\ + "0.500896, 0.538360, 0.591093, 0.733386, 1.111456",\ + "0.820213, 0.870292, 0.933027, 1.077593, 1.455130"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040532, 0.090273, 0.180246, 0.428609, 1.092443",\ + "0.040870, 0.090273, 0.180281, 0.428609, 1.092443",\ + "0.045400, 0.092351, 0.180508, 0.428609, 1.092443",\ + "0.059558, 0.100025, 0.181106, 0.428872, 1.092443",\ + "0.087354, 0.133744, 0.204884, 0.431205, 1.092443"); + } + + } /* end of arc otp_obs_i[2]_ast2padmux_o[2]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "otp_obs_i[2]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.119334, 0.186028, 0.302368, 0.619155, 1.468929",\ + "0.204833, 0.271716, 0.388876, 0.705544, 1.554647",\ + "0.293319, 0.360401, 0.477846, 0.795625, 1.643707",\ + "0.440314, 0.508488, 0.625608, 0.945855, 1.792734",\ + "0.667813, 0.745674, 0.864272, 1.183300, 2.031636"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.183691, 0.382409, 0.935142, 2.413233",\ + "0.067620, 0.183691, 0.382409, 0.935142, 2.413233",\ + "0.068262, 0.183691, 0.382508, 0.936031, 2.413233",\ + "0.073482, 0.184226, 0.382946, 0.939859, 2.413233",\ + "0.089380, 0.196045, 0.384240, 0.939859, 2.423100"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.094521, 0.125776, 0.178422, 0.320849, 0.699535",\ + "0.188239, 0.219444, 0.272075, 0.414540, 0.793202",\ + "0.291550, 0.323577, 0.376197, 0.518700, 0.897237",\ + "0.473699, 0.510899, 0.563627, 0.705929, 1.084022",\ + "0.773733, 0.823401, 0.885774, 1.030256, 1.407808"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039633, 0.090291, 0.180152, 0.428296, 1.092222",\ + "0.040262, 0.090291, 0.180217, 0.428296, 1.092377",\ + "0.044064, 0.091627, 0.180452, 0.428296, 1.092425",\ + "0.058805, 0.099616, 0.181075, 0.428844, 1.092425",\ + "0.086478, 0.132591, 0.204027, 0.431125, 1.092425"); + } + + } /* end of arc otp_obs_i[2]_ast2padmux_o[2]_una_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380000.312500, 380000.312500, 380000.343750, 380000.406250, 380000.593750",\ + "380000.406250, 380000.406250, 380000.437500, 380000.500000, 380000.687500",\ + "380000.500000, 380000.500000, 380000.531250, 380000.593750, 380000.781250",\ + "380000.656250, 380000.656250, 380000.687500, 380000.750000, 380000.937500",\ + "380000.906250, 380000.906250, 380000.937500, 380001.000000, 380001.187500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380001.781250, 380001.843750, 380001.968750, 380002.281250, 380003.156250",\ + "380001.875000, 380001.937500, 380002.062500, 380002.375000, 380003.250000",\ + "380002.000000, 380002.062500, 380002.187500, 380002.500000, 380003.375000",\ + "380002.187500, 380002.250000, 380002.375000, 380002.687500, 380003.562500",\ + "380002.500000, 380002.562500, 380002.687500, 380003.000000, 380003.875000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526"); + } + + } /* end of arc padmux2ast_i[4]_ast2padmux_o[2]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380000.312500, 380000.312500, 380000.343750, 380000.406250, 380000.593750",\ + "380000.406250, 380000.406250, 380000.437500, 380000.500000, 380000.687500",\ + "380000.468750, 380000.468750, 380000.500000, 380000.562500, 380000.750000",\ + "380000.625000, 380000.625000, 380000.656250, 380000.718750, 380000.906250",\ + "380000.843750, 380000.843750, 380000.875000, 380000.937500, 380001.125000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380001.781250, 380001.812500, 380001.906250, 380002.187500, 380002.875000",\ + "380001.875000, 380001.906250, 380002.000000, 380002.281250, 380002.968750",\ + "380001.968750, 380002.000000, 380002.093750, 380002.375000, 380003.062500",\ + "380002.156250, 380002.187500, 380002.281250, 380002.562500, 380003.250000",\ + "380002.406250, 380002.437500, 380002.531250, 380002.812500, 380003.500000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169"); + } + + } /* end of arc padmux2ast_i[4]_ast2padmux_o[2]_inv_min*/ + +} /* end of pin ast2padmux_o[2] */ + +pin("ast2padmux_o[1]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.028584 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : ast2padmux_o[1]; + timing () { + related_pin : "clk_ast_rng_i" ; + related_output_pin : "rng_b_o[0]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.257031, 0.528778, 0.797030, 1.242767, 2.134242",\ + "0.323932, 0.595681, 0.863940, 1.309691, 2.201193",\ + "0.440368, 0.712118, 0.980382, 1.426145, 2.317669",\ + "0.760037, 1.031787, 1.300052, 1.745815, 2.637342",\ + "1.615245, 1.886993, 2.155250, 2.600997, 3.492491",\ + "0.315617, 0.587294, 0.855812, 1.300474, 2.190349",\ + "0.382518, 0.654197, 0.922722, 1.367397, 2.257300",\ + "0.498954, 0.770634, 1.039164, 1.483851, 2.373776",\ + "0.818623, 1.090303, 1.358834, 1.803522, 2.693449",\ + "1.673831, 1.945509, 2.214032, 2.658703, 3.548597",\ + "0.460207, 0.733101, 0.999707, 1.444229, 2.334082",\ + "0.527108, 0.800004, 1.066617, 1.511152, 2.401032",\ + "0.643544, 0.916442, 1.183060, 1.627606, 2.517509",\ + "0.963213, 1.236110, 1.502729, 1.947277, 2.837182",\ + "1.818421, 2.091316, 2.357927, 2.802459, 3.692330",\ + "0.496168, 0.770865, 1.036627, 1.481020, 2.370640",\ + "0.563069, 0.837768, 1.103536, 1.547944, 2.437591",\ + "0.679505, 0.954206, 1.219979, 1.664398, 2.554067",\ + "0.999174, 1.273875, 1.539648, 1.984068, 2.873740",\ + "1.854382, 2.129080, 2.394846, 2.839250, 3.728889",\ + "0.825262, 1.134787, 1.388262, 1.830277, 2.716096",\ + "0.892164, 1.201690, 1.455172, 1.897201, 2.783047",\ + "1.008600, 1.318128, 1.571615, 2.013655, 2.899523",\ + "1.328269, 1.637797, 1.891284, 2.333325, 3.219196",\ + "2.183476, 2.493002, 2.746482, 3.188507, 4.074345"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.073036, 0.073037, 0.073042, 0.073052, 0.073073",\ + "0.188928, 0.188931, 0.188942, 0.188966, 0.189013",\ + "0.391836, 0.391841, 0.391857, 0.391892, 0.391961",\ + "0.949092, 0.949101, 0.949136, 0.949210, 0.949357",\ + "2.441339, 2.441340, 2.441346, 2.441358, 2.441383",\ + "0.073036, 0.073037, 0.073042, 0.073052, 0.073073",\ + "0.188928, 0.188931, 0.188942, 0.188966, 0.189013",\ + "0.391836, 0.391841, 0.391857, 0.391892, 0.391961",\ + "0.949092, 0.949101, 0.949136, 0.949210, 0.949357",\ + "2.441339, 2.441340, 2.441346, 2.441358, 2.441383",\ + "0.073036, 0.073037, 0.073042, 0.073052, 0.073073",\ + "0.188928, 0.188931, 0.188942, 0.188966, 0.189013",\ + "0.391836, 0.391841, 0.391857, 0.391892, 0.391961",\ + "0.949092, 0.949102, 0.949136, 0.949210, 0.949357",\ + "2.441339, 2.441340, 2.441346, 2.441358, 2.441383",\ + "0.073036, 0.073037, 0.073042, 0.073052, 0.073073",\ + "0.188928, 0.188931, 0.188942, 0.188966, 0.189013",\ + "0.391836, 0.391841, 0.391857, 0.391892, 0.391961",\ + "0.949092, 0.949102, 0.949136, 0.949210, 0.949357",\ + "2.441339, 2.441340, 2.441346, 2.441358, 2.441383",\ + "0.073036, 0.073038, 0.073042, 0.073052, 0.073073",\ + "0.188928, 0.188932, 0.188943, 0.188966, 0.189013",\ + "0.391836, 0.391843, 0.391858, 0.391892, 0.391961",\ + "0.949092, 0.949105, 0.949137, 0.949210, 0.949357",\ + "2.441339, 2.441341, 2.441346, 2.441358, 2.441383"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.308725, 0.491796, 0.685627, 0.996163, 1.596700",\ + "0.340157, 0.523228, 0.717058, 1.027595, 1.628132",\ + "0.392865, 0.575936, 0.769767, 1.080304, 1.680844",\ + "0.535218, 0.718289, 0.912119, 1.222656, 1.823194",\ + "0.913815, 1.096886, 1.290716, 1.601252, 2.201788",\ + "0.368637, 0.551695, 0.745581, 1.055944, 1.656317",\ + "0.400068, 0.583126, 0.777012, 1.087376, 1.687749",\ + "0.452777, 0.635835, 0.829721, 1.140085, 1.740461",\ + "0.595130, 0.778187, 0.972073, 1.282437, 1.882811",\ + "0.973727, 1.156784, 1.350670, 1.661033, 2.261405",\ + "0.501379, 0.683946, 0.877464, 1.187801, 1.788124",\ + "0.532811, 0.715378, 0.908895, 1.219233, 1.819557",\ + "0.585519, 0.768086, 0.961603, 1.271942, 1.872268",\ + "0.727872, 0.910439, 1.103956, 1.414294, 2.014618",\ + "1.106469, 1.289036, 1.482553, 1.792891, 2.393212",\ + "0.534516, 0.717073, 0.910588, 1.220754, 1.820733",\ + "0.565947, 0.748505, 0.942020, 1.252186, 1.852165",\ + "0.618656, 0.801213, 0.994728, 1.304895, 1.904876",\ + "0.761009, 0.943566, 1.137081, 1.447247, 2.047226",\ + "1.139605, 1.322163, 1.515678, 1.825843, 2.425821",\ + "0.835592, 1.022294, 1.214223, 1.523770, 2.122581",\ + "0.867023, 1.053726, 1.245655, 1.555202, 2.154014",\ + "0.919731, 1.106434, 1.298363, 1.607911, 2.206725",\ + "1.062084, 1.248787, 1.440716, 1.750263, 2.349075",\ + "1.440681, 1.627384, 1.819313, 2.128859, 2.727669"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.039143, 0.039143, 0.039143, 0.039145, 0.039150",\ + "0.090610, 0.090610, 0.090610, 0.090608, 0.090604",\ + "0.180695, 0.180695, 0.180695, 0.180700, 0.180710",\ + "0.429275, 0.429275, 0.429275, 0.429276, 0.429279",\ + "1.090837, 1.090837, 1.090837, 1.090825, 1.090796",\ + "0.039143, 0.039143, 0.039143, 0.039145, 0.039150",\ + "0.090610, 0.090610, 0.090610, 0.090608, 0.090604",\ + "0.180695, 0.180695, 0.180695, 0.180700, 0.180710",\ + "0.429275, 0.429275, 0.429275, 0.429276, 0.429279",\ + "1.090837, 1.090837, 1.090837, 1.090825, 1.090796",\ + "0.039143, 0.039143, 0.039143, 0.039145, 0.039150",\ + "0.090610, 0.090610, 0.090610, 0.090608, 0.090604",\ + "0.180695, 0.180695, 0.180695, 0.180700, 0.180710",\ + "0.429275, 0.429275, 0.429275, 0.429276, 0.429279",\ + "1.090837, 1.090837, 1.090837, 1.090825, 1.090796",\ + "0.039143, 0.039143, 0.039143, 0.039145, 0.039150",\ + "0.090610, 0.090610, 0.090610, 0.090608, 0.090604",\ + "0.180695, 0.180695, 0.180695, 0.180700, 0.180710",\ + "0.429275, 0.429275, 0.429275, 0.429276, 0.429279",\ + "1.090837, 1.090837, 1.090837, 1.090825, 1.090796",\ + "0.039143, 0.039143, 0.039143, 0.039145, 0.039150",\ + "0.090610, 0.090610, 0.090610, 0.090608, 0.090604",\ + "0.180695, 0.180695, 0.180695, 0.180700, 0.180710",\ + "0.429275, 0.429275, 0.429275, 0.429276, 0.429279",\ + "1.090837, 1.090837, 1.090837, 1.090825, 1.090796"); + } + + } /* end of arc clk_ast_rng_i_ast2padmux_o[1]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_rng_i" ; + related_output_pin : "rng_b_o[0]" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.252558, 0.520745, 0.784515, 1.222569, 2.097608",\ + "0.319449, 0.587637, 0.851411, 1.289475, 2.164534",\ + "0.435876, 0.704065, 0.967843, 1.405915, 2.280990",\ + "0.755544, 1.023733, 1.287511, 1.725584, 2.600661",\ + "1.610764, 1.878952, 2.142725, 2.580786, 3.455839",\ + "0.311120, 0.579252, 0.843280, 1.280275, 2.153714",\ + "0.378011, 0.646143, 0.910176, 1.347182, 2.220640",\ + "0.494438, 0.762572, 1.026608, 1.463622, 2.337097",\ + "0.814106, 1.082240, 1.346276, 1.783291, 2.656767",\ + "1.669326, 1.937458, 2.201490, 2.638493, 3.511946",\ + "0.455460, 0.724999, 0.987167, 1.424079, 2.297447",\ + "0.522351, 0.791891, 1.054064, 1.490985, 2.364373",\ + "0.638778, 0.908319, 1.170496, 1.607426, 2.480830",\ + "0.958446, 1.227987, 1.490164, 1.927095, 2.800500",\ + "1.813666, 2.083206, 2.345378, 2.782297, 3.655679",\ + "0.491341, 0.762735, 1.024086, 1.460950, 2.334005",\ + "0.558231, 0.829626, 1.090982, 1.527856, 2.400931",\ + "0.674659, 0.946054, 1.207414, 1.644296, 2.517388",\ + "0.994327, 1.265722, 1.527082, 1.963966, 2.837059",\ + "1.849546, 2.120941, 2.382296, 2.819168, 3.692237",\ + "0.819555, 1.126080, 1.375645, 1.810251, 2.679461",\ + "0.886446, 1.192972, 1.442542, 1.877157, 2.746387",\ + "1.002873, 1.309400, 1.558974, 1.993597, 2.862844",\ + "1.322541, 1.629068, 1.878642, 2.313266, 3.182515",\ + "2.177761, 2.484287, 2.733856, 3.168468, 4.037693"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.073031, 0.073031, 0.073033, 0.073040, 0.073054",\ + "0.188915, 0.188915, 0.188919, 0.188937, 0.188971",\ + "0.391815, 0.391816, 0.391824, 0.391849, 0.391899",\ + "0.949014, 0.949028, 0.949065, 0.949118, 0.949226",\ + "2.441330, 2.441330, 2.441334, 2.441343, 2.441361",\ + "0.073031, 0.073031, 0.073033, 0.073040, 0.073054",\ + "0.188915, 0.188915, 0.188919, 0.188937, 0.188971",\ + "0.391815, 0.391816, 0.391824, 0.391849, 0.391899",\ + "0.949014, 0.949028, 0.949065, 0.949118, 0.949226",\ + "2.441330, 2.441330, 2.441334, 2.441343, 2.441361",\ + "0.073031, 0.073031, 0.073033, 0.073040, 0.073054",\ + "0.188915, 0.188915, 0.188920, 0.188937, 0.188971",\ + "0.391815, 0.391816, 0.391824, 0.391849, 0.391899",\ + "0.949014, 0.949029, 0.949065, 0.949118, 0.949226",\ + "2.441330, 2.441330, 2.441334, 2.441343, 2.441361",\ + "0.073031, 0.073031, 0.073033, 0.073040, 0.073054",\ + "0.188915, 0.188915, 0.188920, 0.188937, 0.188971",\ + "0.391815, 0.391816, 0.391824, 0.391849, 0.391899",\ + "0.949014, 0.949029, 0.949065, 0.949119, 0.949226",\ + "2.441330, 2.441330, 2.441334, 2.441343, 2.441361",\ + "0.073031, 0.073031, 0.073033, 0.073040, 0.073054",\ + "0.188915, 0.188915, 0.188920, 0.188937, 0.188971",\ + "0.391816, 0.391816, 0.391824, 0.391849, 0.391899",\ + "0.949014, 0.949034, 0.949065, 0.949119, 0.949226",\ + "2.441330, 2.441331, 2.441334, 2.441343, 2.441361"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.262934, 0.448489, 0.641595, 0.948064, 1.538713",\ + "0.294346, 0.479902, 0.673008, 0.979478, 1.570129",\ + "0.346992, 0.532548, 0.725656, 1.032128, 1.622785",\ + "0.489407, 0.674962, 0.868069, 1.174539, 1.765190",\ + "0.868050, 1.053605, 1.246711, 1.553179, 2.143825",\ + "0.322845, 0.508317, 0.701440, 1.007833, 1.598330",\ + "0.354258, 0.539729, 0.732853, 1.039247, 1.629746",\ + "0.406904, 0.592376, 0.785500, 1.091897, 1.682402",\ + "0.549319, 0.734790, 0.927914, 1.234307, 1.824806",\ + "0.927962, 1.113433, 1.306556, 1.612947, 2.203442",\ + "0.455621, 0.640568, 0.833323, 1.139690, 1.730137",\ + "0.487034, 0.671981, 0.864736, 1.171104, 1.761553",\ + "0.539679, 0.724627, 0.917383, 1.223754, 1.814209",\ + "0.682094, 0.867041, 1.059797, 1.366165, 1.956614",\ + "1.060737, 1.245684, 1.438439, 1.744805, 2.335249",\ + "0.488779, 0.673866, 0.866553, 1.172770, 1.762998",\ + "0.520192, 0.705279, 0.897966, 1.204184, 1.794413",\ + "0.572837, 0.757925, 0.950613, 1.256834, 1.847070",\ + "0.715252, 0.900339, 1.093027, 1.399244, 1.989474",\ + "1.093896, 1.278982, 1.471669, 1.777884, 2.368110",\ + "0.790171, 0.979313, 1.170216, 1.475973, 2.065303",\ + "0.821584, 1.010726, 1.201629, 1.507387, 2.096719",\ + "0.874230, 1.063372, 1.254276, 1.560037, 2.149375",\ + "1.016645, 1.205787, 1.396689, 1.702447, 2.291780",\ + "1.395288, 1.584430, 1.775331, 2.081088, 2.670415"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.001003, 0.074002, 0.161255, 0.321507, 0.642011"); + values ( "0.039012, 0.039013, 0.039015, 0.039021, 0.039034",\ + "0.090733, 0.090732, 0.090730, 0.090725, 0.090713",\ + "0.180377, 0.180379, 0.180385, 0.180400, 0.180431",\ + "0.429204, 0.429204, 0.429205, 0.429209, 0.429216",\ + "1.091688, 1.091683, 1.091668, 1.091629, 1.091545",\ + "0.039012, 0.039013, 0.039015, 0.039021, 0.039034",\ + "0.090733, 0.090732, 0.090730, 0.090725, 0.090713",\ + "0.180377, 0.180379, 0.180385, 0.180400, 0.180431",\ + "0.429204, 0.429204, 0.429205, 0.429209, 0.429216",\ + "1.091688, 1.091683, 1.091668, 1.091629, 1.091545",\ + "0.039012, 0.039013, 0.039015, 0.039021, 0.039034",\ + "0.090733, 0.090732, 0.090730, 0.090725, 0.090713",\ + "0.180377, 0.180379, 0.180385, 0.180400, 0.180431",\ + "0.429204, 0.429204, 0.429205, 0.429209, 0.429216",\ + "1.091688, 1.091683, 1.091668, 1.091629, 1.091545",\ + "0.039012, 0.039013, 0.039015, 0.039021, 0.039034",\ + "0.090733, 0.090732, 0.090730, 0.090725, 0.090712",\ + "0.180377, 0.180379, 0.180385, 0.180400, 0.180431",\ + "0.429204, 0.429204, 0.429205, 0.429209, 0.429216",\ + "1.091688, 1.091683, 1.091668, 1.091629, 1.091545",\ + "0.039012, 0.039013, 0.039015, 0.039021, 0.039034",\ + "0.090733, 0.090732, 0.090730, 0.090725, 0.090712",\ + "0.180378, 0.180379, 0.180385, 0.180400, 0.180431",\ + "0.429204, 0.429204, 0.429205, 0.429209, 0.429216",\ + "1.091687, 1.091683, 1.091668, 1.091628, 1.091545"); + } + + } /* end of arc clk_ast_rng_i_ast2padmux_o[1]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "970008.750000, 970008.812500, 970008.937500, 970009.250000, 970010.125000",\ + "970008.875000, 970008.937500, 970009.062500, 970009.375000, 970010.250000",\ + "970009.000000, 970009.062500, 970009.187500, 970009.500000, 970010.375000",\ + "970009.000000, 970009.062500, 970009.187500, 970009.500000, 970010.375000",\ + "970009.375000, 970009.437500, 970009.562500, 970009.875000, 970010.750000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189354, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189354, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189365, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189385, 0.392560, 0.950608, 2.441526",\ + "0.073824, 0.189425, 0.393252, 0.950608, 2.441526"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "970006.125000, 970006.187500, 970006.250000, 970006.375000, 970006.750000",\ + "970006.250000, 970006.312500, 970006.375000, 970006.500000, 970006.875000",\ + "970006.250000, 970006.312500, 970006.375000, 970006.500000, 970006.875000",\ + "970006.375000, 970006.437500, 970006.500000, 970006.625000, 970007.000000",\ + "970006.625000, 970006.687500, 970006.750000, 970006.875000, 970007.250000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.041204, 0.091190, 0.180893, 0.429338, 1.092497",\ + "0.041204, 0.091190, 0.180893, 0.429338, 1.092497",\ + "0.041204, 0.091190, 0.180893, 0.429338, 1.092497",\ + "0.041204, 0.091190, 0.180893, 0.429338, 1.092497",\ + "0.041204, 0.091190, 0.180893, 0.429338, 1.092497"); + } + + } /* end of arc clk_ast_tlul_i_ast2padmux_o[1]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.118063, 0.173160, 0.267375, 0.527316, 1.216798",\ + "0.205470, 0.260567, 0.354781, 0.614720, 1.304204",\ + "0.286205, 0.341346, 0.435579, 0.695608, 1.384949",\ + "0.343571, 0.398793, 0.493060, 0.753254, 1.442331",\ + "0.643636, 0.699058, 0.793671, 1.054205, 1.742813"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.055140, 0.149920, 0.315966, 0.770671, 1.992169",\ + "0.055140, 0.149920, 0.315966, 0.770671, 1.992169",\ + "0.055064, 0.149920, 0.315966, 0.770616, 1.992169",\ + "0.054924, 0.149920, 0.315966, 0.770514, 1.992169",\ + "0.054820, 0.149920, 0.315966, 0.770514, 1.988361"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.068977, 0.083624, 0.108789, 0.177707, 0.362145",\ + "0.157440, 0.172093, 0.197279, 0.266195, 0.450612",\ + "0.246166, 0.261189, 0.286407, 0.355291, 0.539679",\ + "0.308361, 0.324424, 0.349591, 0.418444, 0.602842",\ + "0.630702, 0.654723, 0.683267, 0.752219, 0.936438"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.015416, 0.041075, 0.085652, 0.207740, 0.535967",\ + "0.015763, 0.041089, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967"); + } + + } /* end of arc clk_ast_tlul_i_ast2padmux_o[1]_redg_min*/ + + timing () { + related_pin : "fla_obs_i[1]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.111862, 0.178517, 0.294685, 0.611498, 1.461412",\ + "0.196887, 0.263820, 0.381200, 0.697836, 1.546758",\ + "0.280874, 0.348002, 0.465333, 0.783744, 1.631498",\ + "0.419192, 0.490016, 0.607541, 0.927454, 1.774732",\ + "0.629434, 0.713469, 0.835221, 1.155234, 2.004311"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067759, 0.184639, 0.382501, 0.937507, 2.417566",\ + "0.067759, 0.184639, 0.382501, 0.937507, 2.418347",\ + "0.069174, 0.184639, 0.382586, 0.937507, 2.418347",\ + "0.077831, 0.187460, 0.383300, 0.940319, 2.418347",\ + "0.099054, 0.205738, 0.390315, 0.940320, 2.425200"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.103322, 0.134506, 0.187130, 0.329612, 0.708263",\ + "0.188196, 0.219801, 0.272413, 0.414932, 0.793505",\ + "0.281500, 0.317246, 0.369943, 0.512302, 0.890520",\ + "0.433568, 0.478875, 0.537406, 0.680993, 1.058708",\ + "0.668936, 0.733428, 0.809479, 0.962224, 1.340585"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040521, 0.090274, 0.180244, 0.428614, 1.092440",\ + "0.042863, 0.090977, 0.180401, 0.428614, 1.092696",\ + "0.054661, 0.097371, 0.180899, 0.428690, 1.092793",\ + "0.077190, 0.120374, 0.194930, 0.430280, 1.092793",\ + "0.118581, 0.174509, 0.240947, 0.445113, 1.092793"); + } + + } /* end of arc fla_obs_i[1]_ast2padmux_o[1]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "fla_obs_i[1]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.110629, 0.177262, 0.293339, 0.610165, 1.460154",\ + "0.194795, 0.261696, 0.378936, 0.695592, 1.544629",\ + "0.275980, 0.343081, 0.460479, 0.778514, 1.626463",\ + "0.408884, 0.478137, 0.595421, 0.915532, 1.762573",\ + "0.610985, 0.691263, 0.810230, 1.128954, 1.977655"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067834, 0.183634, 0.382402, 0.934951, 2.414331",\ + "0.067834, 0.183634, 0.382402, 0.934951, 2.414331",\ + "0.068631, 0.183634, 0.382540, 0.936478, 2.414331",\ + "0.075251, 0.185541, 0.383090, 0.939701, 2.414331",\ + "0.093347, 0.198994, 0.384563, 0.939701, 2.425563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.077370, 0.108647, 0.161299, 0.303710, 0.682406",\ + "0.166391, 0.197521, 0.250129, 0.392651, 0.771277",\ + "0.253394, 0.288299, 0.340979, 0.483371, 0.861661",\ + "0.395347, 0.439383, 0.496795, 0.640121, 1.017884",\ + "0.615736, 0.679130, 0.754042, 0.905113, 1.283136"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039363, 0.090228, 0.180124, 0.428312, 1.092155",\ + "0.041196, 0.090228, 0.180315, 0.428312, 1.092511",\ + "0.052267, 0.096073, 0.180798, 0.428601, 1.092511",\ + "0.074482, 0.116813, 0.192279, 0.430033, 1.092511",\ + "0.116096, 0.171326, 0.236992, 0.441817, 1.092511"); + } + + } /* end of arc fla_obs_i[1]_ast2padmux_o[1]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[10]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.059999, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.443642, 0.510546, 0.626985, 0.946654, 1.801858",\ + "0.465905, 0.532810, 0.649248, 0.968917, 1.824121",\ + "0.522299, 0.589203, 0.705642, 1.025311, 1.880515",\ + "0.620162, 0.687066, 0.803505, 1.123173, 1.978378",\ + "1.134534, 1.201443, 1.317885, 1.637554, 2.492753"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.059999, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073042, 0.188941, 0.391856, 0.949133, 2.441345"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.053775, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.490585, 0.522017, 0.574725, 0.717078, 1.095675",\ + "0.512119, 0.543551, 0.596259, 0.738612, 1.117209",\ + "0.579305, 0.610737, 0.663445, 0.805798, 1.184395",\ + "0.689604, 0.721035, 0.773743, 0.916096, 1.294693",\ + "1.248357, 1.279789, 1.332497, 1.474850, 1.853447"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.053775, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090836"); + } + + } /* end of arc obs_ctrl_o[10]_ast2padmux_o[1]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[10]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.056753, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.412827, 0.479717, 0.596144, 0.915812, 1.771032",\ + "0.433604, 0.500495, 0.616922, 0.936590, 1.791810",\ + "0.491196, 0.558086, 0.674513, 0.994181, 1.849401",\ + "0.589141, 0.656031, 0.772458, 1.092126, 1.947346",\ + "1.077990, 1.144880, 1.261307, 1.580975, 2.436195"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.056753, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044579, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.392762, 0.424174, 0.476820, 0.619235, 0.997878",\ + "0.410167, 0.441580, 0.494226, 0.636641, 1.015284",\ + "0.482737, 0.514149, 0.566795, 0.709210, 1.087853",\ + "0.595371, 0.626784, 0.679430, 0.821845, 1.200488",\ + "1.122399, 1.153812, 1.206458, 1.348872, 1.727516"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044579, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687"); + } + + } /* end of arc obs_ctrl_o[10]_ast2padmux_o[1]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[10]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.059999, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.437382, 0.468814, 0.521522, 0.663875, 1.042472",\ + "0.462451, 0.493883, 0.546591, 0.688944, 1.067541",\ + "0.531672, 0.563103, 0.615812, 0.758164, 1.136761",\ + "0.655903, 0.687335, 0.740043, 0.882396, 1.260993",\ + "1.288504, 1.319936, 1.372644, 1.514997, 1.893594"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.059999, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090836"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.053775, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.675759, 0.742664, 0.859102, 1.178771, 2.033976",\ + "0.696234, 0.763138, 0.879577, 1.199246, 2.054450",\ + "0.755094, 0.821998, 0.938437, 1.258106, 2.113310",\ + "0.864334, 0.931238, 1.047677, 1.367346, 2.222550",\ + "1.641748, 1.708657, 1.825099, 2.144769, 2.999968"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.053775, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949108, 2.441341",\ + "0.073042, 0.188941, 0.391856, 0.949133, 2.441345"); + } + + } /* end of arc obs_ctrl_o[10]_ast2padmux_o[1]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[10]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.056753, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.262392, 0.293804, 0.346450, 0.488865, 0.867508",\ + "0.286002, 0.317414, 0.370060, 0.512475, 0.891118",\ + "0.357340, 0.388753, 0.441399, 0.583814, 0.962457",\ + "0.477148, 0.508560, 0.561206, 0.703621, 1.082264",\ + "1.022245, 1.053658, 1.106303, 1.248718, 1.627362"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.056753, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044579, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.582342, 0.649232, 0.765660, 1.085328, 1.940547",\ + "0.599034, 0.665924, 0.782351, 1.102020, 1.957239",\ + "0.661428, 0.728319, 0.844746, 1.164414, 2.019634",\ + "0.770818, 0.837708, 0.954135, 1.273803, 2.129023",\ + "1.507966, 1.574856, 1.691283, 2.010951, 2.866171"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044579, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330"); + } + + } /* end of arc obs_ctrl_o[10]_ast2padmux_o[1]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[11]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.034927, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.180024, 0.211452, 0.264149, 0.406513, 0.785119",\ + "0.193406, 0.224834, 0.277531, 0.419896, 0.798501",\ + "0.275919, 0.307349, 0.360051, 0.502410, 0.881011",\ + "0.400910, 0.432352, 0.485095, 0.627414, 1.005985",\ + "0.975060, 1.010086, 1.063144, 1.205732, 1.584486"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.034927, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039119, 0.090633, 0.180636, 0.429262, 1.090996",\ + "0.039119, 0.090633, 0.180636, 0.429262, 1.090996",\ + "0.039132, 0.090633, 0.180667, 0.429269, 1.090996",\ + "0.039215, 0.090633, 0.180868, 0.429314, 1.090996",\ + "0.049347, 0.094034, 0.180868, 0.429355, 1.091896"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037147, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.465437, 0.532662, 0.649281, 0.969044, 1.824018",\ + "0.477695, 0.544920, 0.661539, 0.981302, 1.836276",\ + "0.541916, 0.609140, 0.725760, 1.045521, 1.900495",\ + "0.644626, 0.711856, 0.828474, 1.148242, 2.003221",\ + "1.319722, 1.387140, 1.503696, 1.823662, 2.678811"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037147, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073817, 0.189281, 0.392442, 0.950607, 2.441526",\ + "0.073817, 0.189281, 0.392442, 0.950607, 2.441526",\ + "0.073817, 0.189282, 0.392442, 0.950607, 2.441526",\ + "0.073862, 0.189282, 0.392442, 0.950619, 2.441526",\ + "0.075399, 0.189282, 0.392442, 0.951039, 2.441526"); + } + + } /* end of arc obs_ctrl_o[11]_ast2padmux_o[1]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[11]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.030664, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.159139, 0.190553, 0.243202, 0.385613, 0.764254",\ + "0.170514, 0.201928, 0.254577, 0.396989, 0.775629",\ + "0.255576, 0.286993, 0.339652, 0.482053, 0.860686",\ + "0.379908, 0.411340, 0.464049, 0.606401, 0.984998",\ + "0.945167, 0.979651, 1.032663, 1.175209, 1.553933"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.030664, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039020, 0.090609, 0.180397, 0.429208, 1.090831",\ + "0.039020, 0.090609, 0.180397, 0.429208, 1.090831",\ + "0.039042, 0.090609, 0.180449, 0.429220, 1.090831",\ + "0.039144, 0.090609, 0.180675, 0.429276, 1.090831",\ + "0.047820, 0.093501, 0.180675, 0.429352, 1.091629"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.028580, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.461683, 0.528880, 0.645509, 0.965243, 1.820192",\ + "0.470327, 0.537524, 0.654153, 0.973887, 1.828836",\ + "0.538174, 0.605371, 0.721999, 1.041733, 1.896681",\ + "0.640782, 0.707985, 0.824611, 1.144351, 1.999304",\ + "1.312551, 1.379913, 1.496487, 1.816396, 2.671496"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.028580, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073594, 0.189124, 0.392388, 0.950544, 2.441454",\ + "0.073594, 0.189124, 0.392388, 0.950544, 2.441454",\ + "0.073594, 0.189124, 0.392388, 0.950544, 2.441454",\ + "0.073633, 0.189124, 0.392388, 0.950557, 2.441454",\ + "0.074954, 0.189124, 0.392388, 0.950917, 2.441454"); + } + + } /* end of arc obs_ctrl_o[11]_ast2padmux_o[1]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.500858, 0.568082, 0.684702, 1.004464, 1.859437",\ + "0.516623, 0.583848, 0.700467, 1.020230, 1.875203",\ + "0.590734, 0.657958, 0.774578, 1.094340, 1.949314",\ + "0.681946, 0.749171, 0.865790, 1.185553, 2.040526",\ + "1.108576, 1.175805, 1.292423, 1.612190, 2.467167"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073816, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073848, 0.189277, 0.392440, 0.950615, 2.441524"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.275118, 0.306284, 0.358903, 0.501398, 0.880041",\ + "0.290749, 0.321915, 0.374533, 0.517029, 0.895671",\ + "0.363703, 0.394869, 0.447488, 0.589983, 0.968626",\ + "0.474794, 0.505959, 0.558577, 0.701073, 1.079716",\ + "1.013269, 1.044421, 1.097036, 1.239541, 1.618177"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040759, 0.090626, 0.180653, 0.429266, 1.092499",\ + "0.040922, 0.090525, 0.180916, 0.429325, 1.092539"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[1]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.337608, 0.404302, 0.520641, 0.837429, 1.687203",\ + "0.349939, 0.416633, 0.532972, 0.849760, 1.699534",\ + "0.408752, 0.475446, 0.591785, 0.908573, 1.758347",\ + "0.496083, 0.562777, 0.679117, 0.995905, 1.845678",\ + "0.949078, 1.015776, 1.132136, 1.448920, 2.298678"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184560, 0.382485, 0.937098, 2.417677",\ + "0.067604, 0.184551, 0.382483, 0.937052, 2.417689"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.209985, 0.241400, 0.294052, 0.436461, 0.815099",\ + "0.221857, 0.253271, 0.305923, 0.448332, 0.826970",\ + "0.304351, 0.335766, 0.388417, 0.530826, 0.909465",\ + "0.409226, 0.440642, 0.493298, 0.635702, 1.014338",\ + "0.909442, 0.940877, 0.993596, 1.135938, 1.514527"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039034, 0.090327, 0.180161, 0.428971, 1.091542",\ + "0.039166, 0.090324, 0.180166, 0.428948, 1.090692"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[1]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.287803, 0.318969, 0.371587, 0.514083, 0.892726",\ + "0.303569, 0.334734, 0.387353, 0.529848, 0.908491",\ + "0.378810, 0.409975, 0.462594, 0.605089, 0.983732",\ + "0.473884, 0.505049, 0.557668, 0.700163, 1.078806",\ + "0.918190, 0.949342, 1.001956, 1.144462, 1.523098"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040752, 0.090632, 0.180638, 0.429262, 1.092497",\ + "0.040759, 0.090626, 0.180653, 0.429266, 1.092499",\ + "0.040922, 0.090525, 0.180916, 0.429325, 1.092539"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.376755, 0.443500, 0.560063, 0.876818, 1.726409",\ + "0.392417, 0.459162, 0.575725, 0.892480, 1.742071",\ + "0.467424, 0.534169, 0.650732, 0.967487, 1.817078",\ + "0.562603, 0.629351, 0.745928, 1.062681, 1.912261",\ + "1.006927, 1.073706, 1.190415, 1.507149, 2.356620"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073816, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073848, 0.189277, 0.392440, 0.950615, 2.441524"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[1]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.264318, 0.295567, 0.348210, 0.490643, 0.869326",\ + "0.278489, 0.309737, 0.362381, 0.504814, 0.883496",\ + "0.355325, 0.386573, 0.439217, 0.581649, 0.960332",\ + "0.450369, 0.481617, 0.534260, 0.676693, 1.055376",\ + "0.893831, 0.925076, 0.977718, 1.120154, 1.498834"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039025, 0.090327, 0.180161, 0.428971, 1.091605",\ + "0.039034, 0.090327, 0.180161, 0.428971, 1.091542",\ + "0.039166, 0.090324, 0.180166, 0.428948, 1.090692"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.373701, 0.440395, 0.556734, 0.873522, 1.723296",\ + "0.385572, 0.452266, 0.568605, 0.885393, 1.735167",\ + "0.464371, 0.531065, 0.647404, 0.964192, 1.813966",\ + "0.559385, 0.626079, 0.742420, 1.059207, 1.908981",\ + "1.002245, 1.068944, 1.185303, 1.502088, 2.351846"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184560, 0.382485, 0.937098, 2.417677",\ + "0.067604, 0.184551, 0.382483, 0.937052, 2.417689"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[1]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.337998, 0.404744, 0.521308, 0.838063, 1.687653",\ + "0.353177, 0.419923, 0.536487, 0.853242, 1.702832",\ + "0.412195, 0.478941, 0.595505, 0.912260, 1.761850",\ + "0.508449, 0.575199, 0.691783, 1.008535, 1.858109",\ + "0.997007, 1.063817, 1.180658, 1.497372, 2.346736"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073812, 0.189282, 0.392442, 0.950605, 2.441527",\ + "0.073812, 0.189282, 0.392442, 0.950605, 2.441527",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073887, 0.189271, 0.392439, 0.950626, 2.441522",\ + "0.075818, 0.189005, 0.392348, 0.951153, 2.441399"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.272032, 0.303198, 0.355817, 0.498312, 0.876955",\ + "0.289891, 0.321056, 0.373675, 0.516170, 0.894813",\ + "0.360955, 0.392121, 0.444739, 0.587235, 0.965878",\ + "0.471378, 0.502542, 0.555160, 0.697656, 1.076298",\ + "1.004117, 1.035227, 1.087829, 1.230366, 1.608983"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090633, 0.180635, 0.429262, 1.092497",\ + "0.040752, 0.090633, 0.180635, 0.429262, 1.092497",\ + "0.040752, 0.090633, 0.180666, 0.429269, 1.092497",\ + "0.040771, 0.090633, 0.180871, 0.429315, 1.092502",\ + "0.049622, 0.094130, 0.180871, 0.429356, 1.092666"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[1]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.329221, 0.395915, 0.512254, 0.829041, 1.678816",\ + "0.344592, 0.411286, 0.527624, 0.844412, 1.694187",\ + "0.406780, 0.473474, 0.589813, 0.906601, 1.756375",\ + "0.502234, 0.568932, 0.685288, 1.002073, 1.851833",\ + "0.957622, 1.024367, 1.140929, 1.457685, 2.307276"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067607, 0.184553, 0.382483, 0.937060, 2.417687",\ + "0.067439, 0.184458, 0.382464, 0.936568, 2.417820"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.231492, 0.262740, 0.315383, 0.457816, 0.836499",\ + "0.245351, 0.276600, 0.329243, 0.471676, 0.850359",\ + "0.320124, 0.351372, 0.404016, 0.546449, 0.925131",\ + "0.430166, 0.461410, 0.514053, 0.656489, 1.035169",\ + "0.955028, 0.986237, 1.038869, 1.181331, 1.559995"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039018, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039018, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039041, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039146, 0.090294, 0.180167, 0.428752, 1.090822",\ + "0.040211, 0.090294, 0.180212, 0.428752, 1.091676"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[1]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.176901, 0.208329, 0.261026, 0.403390, 0.781996",\ + "0.196158, 0.227585, 0.280282, 0.422647, 0.801252",\ + "0.273304, 0.304734, 0.357436, 0.499795, 0.878396",\ + "0.397207, 0.428649, 0.481392, 0.623711, 1.002282",\ + "0.961790, 0.996912, 1.049978, 1.192575, 1.571334"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090633, 0.180635, 0.429262, 1.092497",\ + "0.040752, 0.090633, 0.180635, 0.429262, 1.092497",\ + "0.040752, 0.090633, 0.180666, 0.429269, 1.092497",\ + "0.040771, 0.090633, 0.180871, 0.429315, 1.092502",\ + "0.049622, 0.094130, 0.180871, 0.429356, 1.092666"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.455825, 0.523049, 0.639668, 0.959430, 1.814404",\ + "0.468963, 0.536187, 0.652807, 0.972569, 1.827542",\ + "0.531289, 0.598514, 0.715133, 1.034896, 1.889869",\ + "0.640154, 0.707387, 0.824004, 1.143775, 1.998757",\ + "1.332501, 1.399969, 1.516508, 1.836528, 2.691724"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073812, 0.189282, 0.392442, 0.950605, 2.441527",\ + "0.073812, 0.189282, 0.392442, 0.950605, 2.441527",\ + "0.073814, 0.189281, 0.392442, 0.950606, 2.441526",\ + "0.073887, 0.189271, 0.392439, 0.950626, 2.441522",\ + "0.075818, 0.189005, 0.392348, 0.951153, 2.441399"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[1]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.155833, 0.187247, 0.239896, 0.382308, 0.760949",\ + "0.173482, 0.204896, 0.257545, 0.399957, 0.778598",\ + "0.252964, 0.284381, 0.337040, 0.479441, 0.858074",\ + "0.376196, 0.407628, 0.460337, 0.602689, 0.981285",\ + "0.931678, 0.966257, 1.019278, 1.161831, 1.540560"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039018, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039018, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039041, 0.090294, 0.180161, 0.428752, 1.090822",\ + "0.039146, 0.090294, 0.180167, 0.428752, 1.090822",\ + "0.040211, 0.090294, 0.180212, 0.428752, 1.091676"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.452081, 0.519278, 0.635907, 0.955640, 1.810589",\ + "0.461862, 0.529059, 0.645688, 0.965421, 1.820370",\ + "0.527542, 0.594739, 0.711368, 1.031102, 1.886050",\ + "0.636262, 0.703467, 0.820093, 1.139835, 1.994791",\ + "1.324350, 1.391756, 1.508316, 1.828270, 2.683409"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067607, 0.184553, 0.382483, 0.937060, 2.417687",\ + "0.067439, 0.184458, 0.382464, 0.936568, 2.417820"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[1]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.325984, 0.393209, 0.509828, 0.829592, 1.684567",\ + "0.341732, 0.408957, 0.525576, 0.845340, 1.700314",\ + "0.405621, 0.472847, 0.589466, 0.909229, 1.764204",\ + "0.483984, 0.551208, 0.667827, 0.987590, 1.842564",\ + "0.876566, 0.943791, 1.060410, 1.380173, 2.235147"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189281, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189281, 0.392442, 0.950608, 2.441526"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.207560, 0.238992, 0.291700, 0.434053, 0.812650",\ + "0.223441, 0.254873, 0.307582, 0.449934, 0.828531",\ + "0.292964, 0.324396, 0.377105, 0.519457, 0.898054",\ + "0.382304, 0.413736, 0.466444, 0.608797, 0.987394",\ + "0.808201, 0.839636, 0.892354, 1.034697, 1.413287"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180696, 0.429275, 1.092497",\ + "0.040785, 0.090610, 0.180744, 0.429286, 1.092505"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[1]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.298728, 0.365697, 0.482189, 0.801862, 1.656989",\ + "0.312838, 0.379807, 0.496299, 0.815972, 1.671100",\ + "0.378416, 0.445385, 0.561877, 0.881551, 1.736677",\ + "0.456978, 0.523948, 0.640441, 0.960115, 1.815240",\ + "0.852482, 0.919491, 1.036016, 1.355692, 2.210772"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067586, 0.184541, 0.382481, 0.936998, 2.417704"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.185526, 0.216941, 0.269593, 0.412001, 0.790640",\ + "0.197528, 0.228943, 0.281595, 0.424004, 0.802642",\ + "0.270950, 0.302365, 0.355017, 0.497425, 0.876064",\ + "0.360375, 0.391790, 0.444442, 0.586850, 0.965489",\ + "0.786063, 0.817479, 0.870138, 1.012540, 1.391174"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039039, 0.090322, 0.180169, 0.428938, 1.091513"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[1]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.314064, 0.345229, 0.397848, 0.540343, 0.918986",\ + "0.329859, 0.361025, 0.413644, 0.556139, 0.934782",\ + "0.407724, 0.438890, 0.491508, 0.634004, 1.012646",\ + "0.508778, 0.539944, 0.592562, 0.735058, 1.113701",\ + "0.984655, 1.015818, 1.068436, 1.210933, 1.589574"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180696, 0.429275, 1.092497",\ + "0.040785, 0.090610, 0.180744, 0.429286, 1.092505"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.596327, 0.663552, 0.780171, 1.099935, 1.954909",\ + "0.609131, 0.676356, 0.792975, 1.112739, 1.967713",\ + "0.677113, 0.744339, 0.860958, 1.180721, 2.035696",\ + "0.788810, 0.856034, 0.972654, 1.292416, 2.147390",\ + "1.273667, 1.340892, 1.457511, 1.777274, 2.632248"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189281, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189281, 0.392442, 0.950608, 2.441526"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[1]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.262848, 0.294262, 0.346915, 0.489323, 0.867962",\ + "0.276998, 0.308413, 0.361065, 0.503474, 0.882112",\ + "0.356726, 0.388141, 0.440793, 0.583202, 0.961840",\ + "0.457948, 0.489362, 0.542015, 0.684423, 1.063061",\ + "0.929777, 0.961193, 1.013852, 1.156254, 1.534888"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039039, 0.090322, 0.180169, 0.428938, 1.091513"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.437011, 0.503705, 0.620045, 0.936832, 1.786606",\ + "0.446608, 0.513302, 0.629642, 0.946429, 1.796203",\ + "0.517780, 0.584475, 0.700814, 1.017602, 1.867376",\ + "0.629396, 0.696091, 0.812430, 1.129218, 1.978992",\ + "1.131911, 1.198614, 1.314996, 1.631778, 2.481517"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067586, 0.184541, 0.382481, 0.936998, 2.417704"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[1]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[7]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.060518, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.315427, 0.346593, 0.399212, 0.541707, 0.920350",\ + "0.342146, 0.373312, 0.425930, 0.568426, 0.947068",\ + "0.410184, 0.441350, 0.493968, 0.636464, 1.015106",\ + "0.512927, 0.544093, 0.596711, 0.739207, 1.117850",\ + "0.999580, 1.030743, 1.083361, 1.225858, 1.604500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.060518, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180697, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180697, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180697, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180732, 0.429283, 1.092497",\ + "0.042004, 0.091469, 0.180867, 0.429340, 1.092504"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.051005, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.597332, 0.664558, 0.781177, 1.100940, 1.955915",\ + "0.618079, 0.685305, 0.801924, 1.121688, 1.976662",\ + "0.683404, 0.750630, 0.867249, 1.187012, 2.041987",\ + "0.797603, 0.864828, 0.981447, 1.301210, 2.156184",\ + "1.375793, 1.443018, 1.559637, 1.879400, 2.734374"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.051005, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950609, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073823, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073819, 0.189281, 0.392442, 0.950607, 2.441526",\ + "0.073817, 0.189281, 0.392442, 0.950607, 2.441526"); + } + + } /* end of arc obs_ctrl_o[7]_ast2padmux_o[1]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[7]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.049671, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.150722, 0.182137, 0.234789, 0.377197, 0.755836",\ + "0.171205, 0.202620, 0.255272, 0.397681, 0.776319",\ + "0.246518, 0.277932, 0.330585, 0.472993, 0.851631",\ + "0.352324, 0.383738, 0.436391, 0.578799, 0.957437",\ + "0.825559, 0.856975, 0.909634, 1.052036, 1.430670"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.049671, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091598",\ + "0.039038, 0.090323, 0.180168, 0.428941, 1.091519"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040467, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.277343, 0.344312, 0.460804, 0.780477, 1.635605",\ + "0.293355, 0.360323, 0.476815, 0.796489, 1.651616",\ + "0.366113, 0.433085, 0.549579, 0.869253, 1.724376",\ + "0.487008, 0.554003, 0.670516, 0.990192, 1.845287",\ + "1.141953, 1.209132, 1.325766, 1.645481, 2.500414"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040467, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067601, 0.184550, 0.382483, 0.937044, 2.417691"); + } + + } /* end of arc obs_ctrl_o[7]_ast2padmux_o[1]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[8]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045711, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.700503, 0.767407, 0.883846, 1.203515, 2.058719",\ + "0.718853, 0.785757, 0.902195, 1.221864, 2.077069",\ + "0.789396, 0.856300, 0.972739, 1.292408, 2.147612",\ + "0.881867, 0.948772, 1.065210, 1.384879, 2.240083",\ + "1.366874, 1.433786, 1.550230, 1.869900, 2.725095"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045711, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073043, 0.188945, 0.391861, 0.949146, 2.441348"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044476, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.488066, 0.519497, 0.572205, 0.714558, 1.093155",\ + "0.505493, 0.536925, 0.589633, 0.731986, 1.110583",\ + "0.582890, 0.614322, 0.667030, 0.809383, 1.187980",\ + "0.691204, 0.722635, 0.775344, 0.917696, 1.296293",\ + "1.242374, 1.273805, 1.326514, 1.468867, 1.847463"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044476, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090836"); + } + + } /* end of arc obs_ctrl_o[8]_ast2padmux_o[1]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[8]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.041900, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.636502, 0.703393, 0.819820, 1.139488, 1.994708",\ + "0.653118, 0.720008, 0.836435, 1.156103, 2.011323",\ + "0.727539, 0.794429, 0.910857, 1.230525, 2.085744",\ + "0.821960, 0.888850, 1.005277, 1.324945, 2.180165",\ + "1.269718, 1.336608, 1.453035, 1.772703, 2.627923"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.041900, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035639, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.339768, 0.371181, 0.423827, 0.566242, 0.944885",\ + "0.353114, 0.384527, 0.437173, 0.579588, 0.958231",\ + "0.435092, 0.466504, 0.519150, 0.661565, 1.040208",\ + "0.544311, 0.575724, 0.628370, 0.770784, 1.149428",\ + "1.067931, 1.099343, 1.151989, 1.294404, 1.673047"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035639, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687"); + } + + } /* end of arc obs_ctrl_o[8]_ast2padmux_o[1]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[8]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045711, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.524400, 0.555831, 0.608540, 0.750893, 1.129489",\ + "0.542749, 0.574181, 0.626889, 0.769242, 1.147839",\ + "0.616605, 0.648037, 0.700745, 0.843098, 1.221695",\ + "0.714865, 0.746296, 0.799004, 0.941357, 1.319954",\ + "1.237234, 1.268665, 1.321373, 1.463726, 1.842323"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045711, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090836"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044476, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.651244, 0.718149, 0.834587, 1.154256, 2.009460",\ + "0.663867, 0.730771, 0.847209, 1.166878, 2.022083",\ + "0.718781, 0.785685, 0.902124, 1.221793, 2.076997",\ + "0.821201, 0.888105, 1.004544, 1.324213, 2.179417",\ + "1.548479, 1.615391, 1.731835, 2.051504, 2.906700"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044476, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073043, 0.188945, 0.391861, 0.949146, 2.441348"); + } + + } /* end of arc obs_ctrl_o[8]_ast2padmux_o[1]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[8]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.041900, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.267796, 0.299208, 0.351854, 0.494269, 0.872912",\ + "0.284541, 0.315954, 0.368600, 0.511015, 0.889658",\ + "0.362798, 0.394211, 0.446856, 0.589271, 0.967914",\ + "0.486677, 0.518090, 0.570736, 0.713151, 1.091794",\ + "1.055266, 1.086678, 1.139324, 1.281739, 1.660382"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.041900, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035639, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.456335, 0.523226, 0.639653, 0.959321, 1.814541",\ + "0.469682, 0.536572, 0.652999, 0.972667, 1.827887",\ + "0.547821, 0.614711, 0.731138, 1.050806, 1.906026",\ + "0.649000, 0.715890, 0.832317, 1.151985, 2.007205",\ + "1.120855, 1.187745, 1.304172, 1.623840, 2.479060"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035639, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330"); + } + + } /* end of arc obs_ctrl_o[8]_ast2padmux_o[1]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[9]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.046138, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.712314, 0.779218, 0.895657, 1.215326, 2.070530",\ + "0.730867, 0.797771, 0.914210, 1.233879, 2.089083",\ + "0.803565, 0.870469, 0.986908, 1.306577, 2.161781",\ + "0.898790, 0.965694, 1.082133, 1.401802, 2.257006",\ + "1.358120, 1.425029, 1.541471, 1.861141, 2.716340"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.046138, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073041, 0.188941, 0.391855, 0.949133, 2.441345"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044715, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.494441, 0.525873, 0.578581, 0.720934, 1.099531",\ + "0.511983, 0.543415, 0.596123, 0.738476, 1.117073",\ + "0.589312, 0.620744, 0.673452, 0.815805, 1.194402",\ + "0.698758, 0.730189, 0.782897, 0.925250, 1.303847",\ + "1.229663, 1.261095, 1.313803, 1.456156, 1.834753"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044715, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090836"); + } + + } /* end of arc obs_ctrl_o[9]_ast2padmux_o[1]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[9]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.042344, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.668630, 0.735520, 0.851947, 1.171615, 2.026835",\ + "0.685451, 0.752341, 0.868768, 1.188436, 2.043656",\ + "0.759882, 0.826773, 0.943200, 1.262868, 2.118088",\ + "0.855138, 0.922028, 1.038455, 1.358123, 2.213343",\ + "1.307789, 1.374679, 1.491106, 1.810774, 2.665994"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.042344, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035869, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.361699, 0.393111, 0.445757, 0.588172, 0.966815",\ + "0.375155, 0.406568, 0.459214, 0.601628, 0.980272",\ + "0.456576, 0.487988, 0.540634, 0.683049, 1.061692",\ + "0.566550, 0.597963, 0.650609, 0.793024, 1.171667",\ + "1.091986, 1.123399, 1.176044, 1.318459, 1.697102"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035869, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687"); + } + + } /* end of arc obs_ctrl_o[9]_ast2padmux_o[1]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[9]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.046138, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.528266, 0.559698, 0.612406, 0.754759, 1.133356",\ + "0.546819, 0.578250, 0.630959, 0.773312, 1.151908",\ + "0.620877, 0.652309, 0.705017, 0.847370, 1.225967",\ + "0.719978, 0.751410, 0.804118, 0.946471, 1.325068",\ + "1.192613, 1.224045, 1.276753, 1.419106, 1.797703"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.046138, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090837",\ + "0.039143, 0.090610, 0.180695, 0.429275, 1.090836"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044715, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.606303, 0.673207, 0.789646, 1.109315, 1.964519",\ + "0.618992, 0.685897, 0.802335, 1.122004, 1.977208",\ + "0.673763, 0.740668, 0.857106, 1.176775, 2.031980",\ + "0.776802, 0.843707, 0.960145, 1.279814, 2.135018",\ + "1.483718, 1.550627, 1.667069, 1.986738, 2.841937"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044715, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073038, 0.188934, 0.391844, 0.949109, 2.441341",\ + "0.073041, 0.188941, 0.391855, 0.949133, 2.441345"); + } + + } /* end of arc obs_ctrl_o[9]_ast2padmux_o[1]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[9]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.042344, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.262699, 0.294112, 0.346758, 0.489173, 0.867816",\ + "0.279513, 0.310926, 0.363572, 0.505987, 0.884630",\ + "0.357852, 0.389264, 0.441910, 0.584325, 0.962968",\ + "0.480383, 0.511796, 0.564441, 0.706856, 1.085500",\ + "1.037548, 1.068961, 1.121607, 1.264022, 1.642665"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.042344, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687",\ + "0.039012, 0.090733, 0.180378, 0.429204, 1.091687"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035869, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.463612, 0.530502, 0.646929, 0.966597, 1.821817",\ + "0.477068, 0.543958, 0.660386, 0.980054, 1.835274",\ + "0.555357, 0.622247, 0.738674, 1.058342, 1.913562",\ + "0.655033, 0.721923, 0.838350, 1.158018, 2.013238",\ + "1.119877, 1.186768, 1.303195, 1.622863, 2.478083"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035869, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330",\ + "0.073032, 0.188916, 0.391816, 0.949015, 2.441330"); + } + + } /* end of arc obs_ctrl_o[9]_ast2padmux_o[1]_inv_min*/ + + timing () { + related_pin : "otm_obs_i[1]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.123879, 0.190820, 0.307288, 0.626960, 1.482121",\ + "0.210891, 0.277978, 0.394567, 0.714249, 1.569235",\ + "0.301781, 0.369068, 0.485667, 0.805496, 1.660526",\ + "0.453978, 0.523120, 0.640034, 0.960158, 1.815427",\ + "0.695902, 0.774527, 0.893732, 1.214148, 2.069560"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073065, 0.188997, 0.391936, 0.949305, 2.441374",\ + "0.073175, 0.189249, 0.392304, 0.950092, 2.441498",\ + "0.074330, 0.189249, 0.392418, 0.950747, 2.441498",\ + "0.079436, 0.191164, 0.392505, 0.951076, 2.441498",\ + "0.098084, 0.204137, 0.393542, 0.951076, 2.441498"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.114293, 0.145721, 0.198417, 0.340782, 0.719388",\ + "0.205394, 0.236828, 0.289545, 0.431889, 0.810480",\ + "0.309904, 0.342065, 0.394885, 0.537244, 0.915841",\ + "0.501618, 0.536979, 0.590065, 0.732680, 1.111452",\ + "0.825607, 0.870622, 0.930343, 1.075147, 1.454209"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039117, 0.090634, 0.180632, 0.429261, 1.091005",\ + "0.039161, 0.090634, 0.180739, 0.429285, 1.091005",\ + "0.041267, 0.091212, 0.180891, 0.429338, 1.091005",\ + "0.050293, 0.094364, 0.180891, 0.429357, 1.092061",\ + "0.068556, 0.114740, 0.192215, 0.429716, 1.093122"); + } + + } /* end of arc otm_obs_i[1]_ast2padmux_o[1]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "otm_obs_i[1]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.120559, 0.187489, 0.303948, 0.623619, 1.478793",\ + "0.205712, 0.272774, 0.389342, 0.709022, 1.564038",\ + "0.292652, 0.359907, 0.476516, 0.796311, 1.651312",\ + "0.437434, 0.505450, 0.622092, 0.942182, 1.797434",\ + "0.662107, 0.738115, 0.856688, 1.177023, 2.032395"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073057, 0.188977, 0.391908, 0.949245, 2.441364",\ + "0.073156, 0.189206, 0.392241, 0.949956, 2.441378",\ + "0.074065, 0.189247, 0.392382, 0.950255, 2.441378",\ + "0.077223, 0.189624, 0.392382, 0.950255, 2.441378",\ + "0.092938, 0.200557, 0.393255, 0.950255, 2.441468"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.094368, 0.125782, 0.178430, 0.320842, 0.699483",\ + "0.188259, 0.219683, 0.272369, 0.414744, 0.793358",\ + "0.291365, 0.323244, 0.376040, 0.518376, 0.896959",\ + "0.474009, 0.509208, 0.562280, 0.704883, 1.083646",\ + "0.777508, 0.822171, 0.881623, 1.026340, 1.405392"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039018, 0.090654, 0.180392, 0.429207, 1.090346",\ + "0.039096, 0.090654, 0.180581, 0.429249, 1.090346",\ + "0.040472, 0.090934, 0.180608, 0.429337, 1.090346",\ + "0.049836, 0.094205, 0.180608, 0.429356, 1.091981",\ + "0.067933, 0.113945, 0.191732, 0.429701, 1.093101"); + } + + } /* end of arc otm_obs_i[1]_ast2padmux_o[1]_una_min*/ + + timing () { + related_pin : "otp_obs_i[1]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.122660, 0.189370, 0.305783, 0.622560, 1.472274",\ + "0.209824, 0.276743, 0.394059, 0.710704, 1.559679",\ + "0.301920, 0.369023, 0.486415, 0.804486, 1.652417",\ + "0.455547, 0.524976, 0.642287, 0.962376, 1.809444",\ + "0.699992, 0.780922, 0.900058, 1.218756, 2.067549"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067561, 0.184527, 0.382478, 0.936925, 2.417724",\ + "0.067561, 0.184527, 0.382478, 0.936925, 2.418306",\ + "0.068683, 0.184527, 0.382544, 0.936925, 2.418306",\ + "0.075540, 0.185756, 0.383113, 0.940410, 2.418306",\ + "0.094401, 0.199857, 0.384817, 0.940410, 2.426093"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.114764, 0.145947, 0.198571, 0.341053, 0.719705",\ + "0.205629, 0.236785, 0.289401, 0.431904, 0.810542",\ + "0.310076, 0.342571, 0.395201, 0.537686, 0.916183",\ + "0.500896, 0.538360, 0.591093, 0.733386, 1.111456",\ + "0.820213, 0.870292, 0.933027, 1.077593, 1.455130"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040532, 0.090273, 0.180246, 0.428609, 1.092443",\ + "0.040870, 0.090273, 0.180281, 0.428609, 1.092443",\ + "0.045400, 0.092351, 0.180508, 0.428609, 1.092443",\ + "0.059558, 0.100025, 0.181106, 0.428872, 1.092443",\ + "0.087354, 0.133744, 0.204884, 0.431205, 1.092443"); + } + + } /* end of arc otp_obs_i[1]_ast2padmux_o[1]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "otp_obs_i[1]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.119334, 0.186028, 0.302368, 0.619155, 1.468929",\ + "0.204833, 0.271716, 0.388876, 0.705544, 1.554647",\ + "0.293319, 0.360401, 0.477846, 0.795625, 1.643707",\ + "0.440314, 0.508488, 0.625608, 0.945855, 1.792734",\ + "0.667813, 0.745674, 0.864272, 1.183300, 2.031636"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.183691, 0.382409, 0.935142, 2.413233",\ + "0.067620, 0.183691, 0.382409, 0.935142, 2.413233",\ + "0.068262, 0.183691, 0.382508, 0.936031, 2.413233",\ + "0.073482, 0.184226, 0.382946, 0.939859, 2.413233",\ + "0.089380, 0.196045, 0.384240, 0.939859, 2.423100"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.094521, 0.125776, 0.178422, 0.320849, 0.699535",\ + "0.188239, 0.219444, 0.272075, 0.414540, 0.793202",\ + "0.291550, 0.323577, 0.376197, 0.518700, 0.897237",\ + "0.473699, 0.510899, 0.563627, 0.705929, 1.084022",\ + "0.773733, 0.823401, 0.885774, 1.030256, 1.407808"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039633, 0.090291, 0.180152, 0.428296, 1.092222",\ + "0.040262, 0.090291, 0.180217, 0.428296, 1.092377",\ + "0.044064, 0.091627, 0.180452, 0.428296, 1.092425",\ + "0.058805, 0.099616, 0.181075, 0.428844, 1.092425",\ + "0.086478, 0.132591, 0.204027, 0.431125, 1.092425"); + } + + } /* end of arc otp_obs_i[1]_ast2padmux_o[1]_una_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380006.843750, 380006.906250, 380007.031250, 380007.343750, 380008.187500",\ + "380006.937500, 380007.000000, 380007.125000, 380007.437500, 380008.281250",\ + "380007.031250, 380007.093750, 380007.218750, 380007.531250, 380008.375000",\ + "380007.187500, 380007.250000, 380007.375000, 380007.687500, 380008.531250",\ + "380007.437500, 380007.500000, 380007.625000, 380007.937500, 380008.781250"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380006.562500, 380006.593750, 380006.656250, 380006.812500, 380007.187500",\ + "380006.656250, 380006.687500, 380006.750000, 380006.906250, 380007.281250",\ + "380006.781250, 380006.812500, 380006.875000, 380007.031250, 380007.406250",\ + "380006.968750, 380007.000000, 380007.062500, 380007.218750, 380007.593750",\ + "380007.281250, 380007.312500, 380007.375000, 380007.531250, 380007.906250"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.041204, 0.091190, 0.180893, 0.429338, 1.092497",\ + "0.041204, 0.091190, 0.180893, 0.429338, 1.092497",\ + "0.041204, 0.091190, 0.180893, 0.429338, 1.092497",\ + "0.041204, 0.091190, 0.180893, 0.429338, 1.092497",\ + "0.041204, 0.091190, 0.180893, 0.429338, 1.092497"); + } + + } /* end of arc padmux2ast_i[4]_ast2padmux_o[1]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380006.781250, 380006.843750, 380006.968750, 380007.281250, 380008.125000",\ + "380006.875000, 380006.937500, 380007.062500, 380007.375000, 380008.218750",\ + "380006.937500, 380007.000000, 380007.125000, 380007.437500, 380008.281250",\ + "380007.093750, 380007.156250, 380007.281250, 380007.593750, 380008.437500",\ + "380007.312500, 380007.375000, 380007.500000, 380007.812500, 380008.656250"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380006.437500, 380006.468750, 380006.500000, 380006.656250, 380007.031250",\ + "380006.531250, 380006.562500, 380006.593750, 380006.750000, 380007.125000",\ + "380006.625000, 380006.656250, 380006.687500, 380006.843750, 380007.218750",\ + "380006.812500, 380006.843750, 380006.875000, 380007.031250, 380007.406250",\ + "380007.062500, 380007.093750, 380007.125000, 380007.281250, 380007.656250"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967"); + } + + } /* end of arc padmux2ast_i[4]_ast2padmux_o[1]_una_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "970006.000000, 970006.062500, 970006.125000, 970006.250000, 970006.625000",\ + "970006.125000, 970006.187500, 970006.250000, 970006.375000, 970006.750000",\ + "970006.125000, 970006.187500, 970006.250000, 970006.375000, 970006.750000",\ + "970006.375000, 970006.437500, 970006.500000, 970006.625000, 970007.000000",\ + "970006.625000, 970006.687500, 970006.750000, 970006.875000, 970007.250000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.041204, 0.091190, 0.180893, 0.429338, 1.092497",\ + "0.041204, 0.091190, 0.180893, 0.429338, 1.092497",\ + "0.041204, 0.091190, 0.180893, 0.429338, 1.092497",\ + "0.041204, 0.091190, 0.180893, 0.429338, 1.092497",\ + "0.041204, 0.091190, 0.180893, 0.429338, 1.092497"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "970008.625000, 970008.687500, 970008.812500, 970009.125000, 970010.000000",\ + "970008.750000, 970008.812500, 970008.937500, 970009.250000, 970010.125000",\ + "970008.875000, 970008.937500, 970009.062500, 970009.375000, 970010.250000",\ + "970009.125000, 970009.187500, 970009.312500, 970009.625000, 970010.500000",\ + "970009.375000, 970009.437500, 970009.562500, 970009.875000, 970010.750000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526"); + } + + } /* end of arc padmux2ast_i[4]_ast2padmux_o[1]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380000.312500, 380000.312500, 380000.343750, 380000.406250, 380000.593750",\ + "380000.406250, 380000.406250, 380000.437500, 380000.500000, 380000.687500",\ + "380000.468750, 380000.468750, 380000.500000, 380000.562500, 380000.750000",\ + "380000.625000, 380000.625000, 380000.656250, 380000.718750, 380000.906250",\ + "380000.843750, 380000.843750, 380000.875000, 380000.937500, 380001.125000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380001.781250, 380001.812500, 380001.906250, 380002.187500, 380002.875000",\ + "380001.875000, 380001.906250, 380002.000000, 380002.281250, 380002.968750",\ + "380001.968750, 380002.000000, 380002.093750, 380002.375000, 380003.062500",\ + "380002.156250, 380002.187500, 380002.281250, 380002.562500, 380003.250000",\ + "380002.406250, 380002.437500, 380002.531250, 380002.812500, 380003.500000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169"); + } + + } /* end of arc padmux2ast_i[4]_ast2padmux_o[1]_inv_min*/ + + timing () { + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "590007.000000, 590007.062500, 590007.187500, 590007.500000, 590008.375000",\ + "590007.125000, 590007.187500, 590007.312500, 590007.625000, 590008.500000",\ + "590007.125000, 590007.187500, 590007.312500, 590007.625000, 590008.500000",\ + "590007.250000, 590007.312500, 590007.437500, 590007.750000, 590008.625000",\ + "590007.500000, 590007.562500, 590007.687500, 590008.000000, 590008.875000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526",\ + "0.073824, 0.189280, 0.392442, 0.950608, 2.441526"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "590005.750000, 590005.812500, 590005.875000, 590006.000000, 590006.375000",\ + "590005.875000, 590005.937500, 590006.000000, 590006.125000, 590006.500000",\ + "590006.000000, 590006.062500, 590006.125000, 590006.250000, 590006.625000",\ + "590006.125000, 590006.187500, 590006.250000, 590006.375000, 590006.750000",\ + "590006.500000, 590006.562500, 590006.625000, 590006.750000, 590007.125000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.041204, 0.091190, 0.180893, 0.429338, 1.092497",\ + "0.041204, 0.091190, 0.180893, 0.429338, 1.092497",\ + "0.041204, 0.091190, 0.180893, 0.429338, 1.092497",\ + "0.041204, 0.091190, 0.180893, 0.429338, 1.092497",\ + "0.041204, 0.091190, 0.180893, 0.429338, 1.092497"); + } + + } /* end of arc padmux2ast_i[5]_ast2padmux_o[1]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "590006.875000, 590006.937500, 590007.062500, 590007.375000, 590008.187500",\ + "590006.875000, 590006.937500, 590007.062500, 590007.375000, 590008.187500",\ + "590007.000000, 590007.062500, 590007.187500, 590007.500000, 590008.312500",\ + "590007.125000, 590007.187500, 590007.312500, 590007.625000, 590008.437500",\ + "590007.375000, 590007.437500, 590007.562500, 590007.875000, 590008.687500"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067834, 0.184682, 0.382509, 0.937727, 2.417507",\ + "0.067834, 0.184682, 0.382509, 0.937727, 2.417507",\ + "0.067834, 0.184682, 0.382509, 0.937727, 2.417507",\ + "0.067834, 0.184682, 0.382509, 0.937727, 2.417507",\ + "0.067834, 0.184682, 0.382509, 0.937727, 2.417507"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "590005.687500, 590005.687500, 590005.750000, 590005.875000, 590006.312500",\ + "590005.812500, 590005.812500, 590005.875000, 590006.000000, 590006.437500",\ + "590005.937500, 590005.937500, 590006.000000, 590006.125000, 590006.562500",\ + "590006.062500, 590006.062500, 590006.125000, 590006.250000, 590006.687500",\ + "590006.312500, 590006.312500, 590006.375000, 590006.500000, 590006.937500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039018, 0.090351, 0.180124, 0.429131, 1.091647",\ + "0.039018, 0.090351, 0.180124, 0.429131, 1.091647",\ + "0.039018, 0.090351, 0.180124, 0.429131, 1.091647",\ + "0.039018, 0.090351, 0.180124, 0.429131, 1.091647",\ + "0.039018, 0.090351, 0.180124, 0.429131, 1.091647"); + } + + } /* end of arc padmux2ast_i[5]_ast2padmux_o[1]_una_min*/ + +} /* end of pin ast2padmux_o[1] */ + +pin("ast2padmux_o[0]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.028584 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : ast2padmux_o[0]; + timing () { + related_pin : "clk_ast_rng_i" ; + related_output_pin : "rng_val_o" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.000506, 0.073504, 0.160882, 0.321258, 0.642011"); + values ( "0.265266, 0.537827, 0.806617, 1.252725, 2.144939",\ + "0.332206, 0.604767, 0.873561, 1.319677, 2.211910",\ + "0.448674, 0.721235, 0.990031, 1.436155, 2.328403",\ + "0.768345, 1.040907, 1.309703, 1.755827, 2.648076",\ + "1.623507, 1.896068, 2.164861, 2.610974, 3.503201",\ + "0.323816, 0.596337, 0.865402, 1.310432, 2.201046",\ + "0.390756, 0.663277, 0.932346, 1.377385, 2.268016",\ + "0.507224, 0.779745, 1.048816, 1.493863, 2.384509",\ + "0.826895, 1.099417, 1.368488, 1.813535, 2.704183",\ + "1.682057, 1.954579, 2.223646, 2.668682, 3.559309",\ + "0.467311, 0.742155, 1.009298, 1.454188, 2.344779",\ + "0.534251, 0.809095, 1.076241, 1.521140, 2.411749",\ + "0.650718, 0.925563, 1.192712, 1.637618, 2.528242",\ + "0.970390, 1.245234, 1.512384, 1.957291, 2.847916",\ + "1.825552, 2.100396, 2.367542, 2.812438, 3.703041",\ + "0.502881, 0.779924, 1.046217, 1.490979, 2.381337",\ + "0.569821, 0.846864, 1.113161, 1.557931, 2.448308",\ + "0.686289, 0.963332, 1.229631, 1.674409, 2.564800",\ + "1.005960, 1.283003, 1.549303, 1.994082, 2.884474",\ + "1.861122, 2.138165, 2.404461, 2.849229, 3.739599",\ + "0.827836, 1.143899, 1.397858, 1.840240, 2.726793",\ + "0.894775, 1.210839, 1.464802, 1.907193, 2.793763",\ + "1.011243, 1.327307, 1.581273, 2.023671, 2.910256",\ + "1.330914, 1.646978, 1.900944, 2.343343, 3.229930",\ + "2.186077, 2.502140, 2.756102, 3.198490, 4.085055"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.000506, 0.073504, 0.160882, 0.321258, 0.642011"); + values ( "0.073065, 0.073065, 0.073067, 0.073074, 0.073087",\ + "0.188995, 0.188995, 0.189001, 0.189016, 0.189048",\ + "0.391933, 0.391934, 0.391942, 0.391965, 0.392010",\ + "0.949299, 0.949301, 0.949318, 0.949367, 0.949463",\ + "2.441373, 2.441374, 2.441376, 2.441384, 2.441401",\ + "0.073065, 0.073065, 0.073067, 0.073074, 0.073087",\ + "0.188995, 0.188995, 0.189001, 0.189016, 0.189048",\ + "0.391933, 0.391934, 0.391942, 0.391965, 0.392010",\ + "0.949299, 0.949301, 0.949318, 0.949367, 0.949463",\ + "2.441373, 2.441374, 2.441376, 2.441384, 2.441401",\ + "0.073065, 0.073065, 0.073067, 0.073074, 0.073087",\ + "0.188995, 0.188995, 0.189001, 0.189016, 0.189048",\ + "0.391933, 0.391934, 0.391942, 0.391965, 0.392010",\ + "0.949299, 0.949301, 0.949318, 0.949367, 0.949463",\ + "2.441373, 2.441374, 2.441376, 2.441384, 2.441401",\ + "0.073065, 0.073065, 0.073067, 0.073074, 0.073087",\ + "0.188995, 0.188995, 0.189001, 0.189016, 0.189048",\ + "0.391933, 0.391934, 0.391942, 0.391965, 0.392010",\ + "0.949299, 0.949301, 0.949318, 0.949367, 0.949463",\ + "2.441373, 2.441374, 2.441376, 2.441384, 2.441401",\ + "0.073065, 0.073065, 0.073067, 0.073074, 0.073087",\ + "0.188995, 0.188996, 0.189001, 0.189017, 0.189048",\ + "0.391933, 0.391935, 0.391943, 0.391965, 0.392010",\ + "0.949299, 0.949302, 0.949319, 0.949367, 0.949463",\ + "2.441373, 2.441374, 2.441376, 2.441385, 2.441401"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.000506, 0.073504, 0.160882, 0.321258, 0.642011"); + values ( "0.321682, 0.506101, 0.700572, 1.011955, 1.613898",\ + "0.353113, 0.537532, 0.732004, 1.043387, 1.645330",\ + "0.405822, 0.590241, 0.784712, 1.096096, 1.698039",\ + "0.548175, 0.732594, 0.927065, 1.238448, 1.840391",\ + "0.926771, 1.111190, 1.305661, 1.617045, 2.218987",\ + "0.381626, 0.565998, 0.760527, 1.071737, 1.673515",\ + "0.413058, 0.597430, 0.791958, 1.103168, 1.704947",\ + "0.465766, 0.650139, 0.844667, 1.155877, 1.757656",\ + "0.608119, 0.792491, 0.987020, 1.298229, 1.900008",\ + "0.986715, 1.171088, 1.365616, 1.676826, 2.278605",\ + "0.514234, 0.698252, 0.892410, 1.203594, 1.805323",\ + "0.545665, 0.729684, 0.923841, 1.235026, 1.836754",\ + "0.598374, 0.782393, 0.976550, 1.287735, 1.889464",\ + "0.740726, 0.924745, 1.118903, 1.430087, 2.031816",\ + "1.119323, 1.303342, 1.497499, 1.808684, 2.410412",\ + "0.547325, 0.731379, 0.925535, 1.236547, 1.837931",\ + "0.578757, 0.762811, 0.956967, 1.267979, 1.869363",\ + "0.631466, 0.815519, 1.009675, 1.320688, 1.922072",\ + "0.773818, 0.957872, 1.152028, 1.463040, 2.064424",\ + "1.152415, 1.336468, 1.530624, 1.841637, 2.443020",\ + "0.847275, 1.036618, 1.229172, 1.539564, 2.139780",\ + "0.878707, 1.068050, 1.260603, 1.570995, 2.171212",\ + "0.931415, 1.120758, 1.313312, 1.623704, 2.223921",\ + "1.073768, 1.263111, 1.455664, 1.766057, 2.366273",\ + "1.452364, 1.641707, 1.834261, 2.144653, 2.744869"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.000506, 0.073504, 0.160882, 0.321258, 0.642011"); + values ( "0.039144, 0.039144, 0.039144, 0.039144, 0.039145",\ + "0.090609, 0.090609, 0.090609, 0.090609, 0.090609",\ + "0.180697, 0.180697, 0.180697, 0.180698, 0.180700",\ + "0.429275, 0.429275, 0.429275, 0.429276, 0.429276",\ + "1.090832, 1.090832, 1.090832, 1.090832, 1.090832",\ + "0.039144, 0.039144, 0.039144, 0.039144, 0.039145",\ + "0.090609, 0.090609, 0.090609, 0.090609, 0.090609",\ + "0.180697, 0.180697, 0.180697, 0.180698, 0.180700",\ + "0.429275, 0.429275, 0.429275, 0.429276, 0.429276",\ + "1.090832, 1.090832, 1.090832, 1.090832, 1.090832",\ + "0.039144, 0.039144, 0.039144, 0.039144, 0.039145",\ + "0.090609, 0.090609, 0.090609, 0.090609, 0.090609",\ + "0.180697, 0.180697, 0.180697, 0.180698, 0.180700",\ + "0.429275, 0.429275, 0.429275, 0.429276, 0.429276",\ + "1.090832, 1.090832, 1.090832, 1.090832, 1.090832",\ + "0.039144, 0.039144, 0.039144, 0.039144, 0.039145",\ + "0.090609, 0.090609, 0.090609, 0.090609, 0.090609",\ + "0.180697, 0.180697, 0.180697, 0.180698, 0.180700",\ + "0.429275, 0.429275, 0.429275, 0.429276, 0.429276",\ + "1.090832, 1.090832, 1.090832, 1.090832, 1.090832",\ + "0.039144, 0.039144, 0.039144, 0.039144, 0.039145",\ + "0.090609, 0.090609, 0.090609, 0.090609, 0.090609",\ + "0.180697, 0.180697, 0.180697, 0.180698, 0.180700",\ + "0.429275, 0.429275, 0.429275, 0.429276, 0.429276",\ + "1.090832, 1.090832, 1.090832, 1.090832, 1.090832"); + } + + } /* end of arc clk_ast_rng_i_ast2padmux_o[0]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_rng_i" ; + related_output_pin : "rng_val_o" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.000506, 0.073504, 0.160882, 0.321258, 0.642011"); + values ( "0.258488, 0.527564, 0.791863, 1.230215, 2.105847",\ + "0.325417, 0.594493, 0.858794, 1.297152, 2.172797",\ + "0.441875, 0.710952, 0.975255, 1.413618, 2.289272",\ + "0.761546, 1.030622, 1.294926, 1.733289, 2.608944",\ + "1.616721, 1.885797, 2.150098, 2.588454, 3.464095",\ + "0.317013, 0.586065, 0.850631, 1.287923, 2.161954",\ + "0.383942, 0.652994, 0.917562, 1.354860, 2.228903",\ + "0.500401, 0.769453, 1.034023, 1.471326, 2.345379",\ + "0.820072, 1.089123, 1.353694, 1.790997, 2.665051",\ + "1.675247, 1.944298, 2.208866, 2.646162, 3.520202",\ + "0.460262, 0.731823, 0.994519, 1.431727, 2.305687",\ + "0.527191, 0.798752, 1.061450, 1.498664, 2.372636",\ + "0.643650, 0.915210, 1.177911, 1.615129, 2.489112",\ + "0.963321, 1.234881, 1.497581, 1.934801, 2.808784",\ + "1.818496, 2.090056, 2.352754, 2.789966, 3.663935",\ + "0.495756, 0.769563, 1.031437, 1.468598, 2.342245",\ + "0.562684, 0.836492, 1.098369, 1.535535, 2.409194",\ + "0.679143, 0.952951, 1.214829, 1.652000, 2.525670",\ + "0.998814, 1.272622, 1.534500, 1.971672, 2.845342",\ + "1.853989, 2.127797, 2.389672, 2.826837, 3.700493",\ + "0.819862, 1.132963, 1.383002, 1.817902, 2.687701",\ + "0.886791, 1.199892, 1.449933, 1.884839, 2.754651",\ + "1.003250, 1.316351, 1.566393, 2.001304, 2.871126",\ + "1.322921, 1.636022, 1.886065, 2.320976, 3.190798",\ + "2.178096, 2.491197, 2.741237, 3.176141, 4.045949"); + } + rise_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.000506, 0.073504, 0.160882, 0.321258, 0.642011"); + values ( "0.073056, 0.073057, 0.073058, 0.073063, 0.073072",\ + "0.188976, 0.188976, 0.188980, 0.188990, 0.189011",\ + "0.391905, 0.391906, 0.391911, 0.391927, 0.391957",\ + "0.949239, 0.949241, 0.949252, 0.949284, 0.949349",\ + "2.441363, 2.441363, 2.441365, 2.441371, 2.441381",\ + "0.073056, 0.073057, 0.073058, 0.073063, 0.073072",\ + "0.188976, 0.188976, 0.188980, 0.188990, 0.189011",\ + "0.391905, 0.391906, 0.391911, 0.391927, 0.391957",\ + "0.949239, 0.949241, 0.949252, 0.949284, 0.949349",\ + "2.441363, 2.441363, 2.441365, 2.441371, 2.441381",\ + "0.073056, 0.073057, 0.073058, 0.073063, 0.073072",\ + "0.188976, 0.188976, 0.188980, 0.188990, 0.189011",\ + "0.391905, 0.391906, 0.391911, 0.391927, 0.391957",\ + "0.949239, 0.949241, 0.949252, 0.949284, 0.949349",\ + "2.441363, 2.441363, 2.441365, 2.441371, 2.441381",\ + "0.073056, 0.073057, 0.073058, 0.073063, 0.073072",\ + "0.188976, 0.188976, 0.188980, 0.188990, 0.189011",\ + "0.391905, 0.391906, 0.391911, 0.391927, 0.391957",\ + "0.949239, 0.949241, 0.949252, 0.949285, 0.949349",\ + "2.441363, 2.441363, 2.441365, 2.441371, 2.441381",\ + "0.073056, 0.073057, 0.073058, 0.073063, 0.073072",\ + "0.188976, 0.188976, 0.188980, 0.188990, 0.189011",\ + "0.391905, 0.391906, 0.391912, 0.391927, 0.391957",\ + "0.949239, 0.949241, 0.949252, 0.949285, 0.949349",\ + "2.441363, 2.441364, 2.441365, 2.441371, 2.441381"); + } + cell_fall( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.000506, 0.073504, 0.160882, 0.321258, 0.642011"); + values ( "0.280172, 0.467016, 0.660531, 0.967486, 1.558860",\ + "0.311589, 0.498432, 0.691948, 0.998903, 1.590277",\ + "0.364248, 0.551092, 0.744607, 1.051563, 1.642938",\ + "0.506650, 0.693493, 0.887008, 1.193964, 1.785338",\ + "0.885283, 1.072126, 1.265642, 1.572596, 2.163970",\ + "0.340116, 0.526843, 0.720376, 1.027255, 1.618477",\ + "0.371533, 0.558260, 0.751792, 1.058672, 1.649894",\ + "0.424192, 0.610919, 0.804452, 1.111332, 1.702555",\ + "0.566594, 0.753321, 0.946853, 1.253732, 1.844955",\ + "0.945227, 1.131954, 1.325486, 1.632365, 2.223587",\ + "0.472755, 0.659097, 0.852258, 1.159112, 1.750284",\ + "0.504172, 0.690514, 0.883675, 1.190529, 1.781701",\ + "0.556831, 0.743173, 0.936334, 1.243189, 1.834362",\ + "0.699233, 0.885575, 1.078736, 1.385590, 1.976762",\ + "1.077866, 1.264208, 1.457369, 1.764223, 2.355394",\ + "0.505869, 0.692396, 0.885489, 1.192192, 1.783144",\ + "0.537286, 0.723812, 0.916906, 1.223609, 1.814562",\ + "0.589945, 0.776472, 0.969565, 1.276269, 1.867223",\ + "0.732346, 0.918873, 1.111966, 1.418670, 2.009622",\ + "1.110980, 1.297506, 1.490599, 1.797303, 2.388254",\ + "0.806127, 0.997856, 1.189152, 1.495396, 2.085451",\ + "0.837544, 1.029273, 1.220569, 1.526813, 2.116868",\ + "0.890203, 1.081932, 1.273229, 1.579473, 2.169529",\ + "1.032604, 1.224334, 1.415630, 1.721874, 2.311929",\ + "1.411238, 1.602967, 1.794263, 2.100507, 2.690561"); + } + fall_transition( f_itrans_ocap_rcap ){ + index_1 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + index_3 ( "0.000506, 0.073504, 0.160882, 0.321258, 0.642011"); + values ( "0.039040, 0.039040, 0.039040, 0.039042, 0.039044",\ + "0.090707, 0.090706, 0.090706, 0.090705, 0.090703",\ + "0.180446, 0.180446, 0.180447, 0.180449, 0.180455",\ + "0.429219, 0.429219, 0.429219, 0.429220, 0.429221",\ + "1.091504, 1.091503, 1.091503, 1.091496, 1.091479",\ + "0.039040, 0.039040, 0.039040, 0.039042, 0.039044",\ + "0.090707, 0.090706, 0.090706, 0.090705, 0.090703",\ + "0.180446, 0.180446, 0.180447, 0.180449, 0.180455",\ + "0.429219, 0.429219, 0.429219, 0.429220, 0.429221",\ + "1.091504, 1.091503, 1.091503, 1.091496, 1.091479",\ + "0.039040, 0.039040, 0.039040, 0.039042, 0.039044",\ + "0.090707, 0.090706, 0.090706, 0.090705, 0.090703",\ + "0.180446, 0.180446, 0.180447, 0.180449, 0.180455",\ + "0.429219, 0.429219, 0.429219, 0.429220, 0.429221",\ + "1.091504, 1.091503, 1.091503, 1.091496, 1.091479",\ + "0.039040, 0.039040, 0.039040, 0.039042, 0.039044",\ + "0.090707, 0.090706, 0.090706, 0.090705, 0.090703",\ + "0.180446, 0.180446, 0.180447, 0.180449, 0.180455",\ + "0.429219, 0.429219, 0.429219, 0.429220, 0.429221",\ + "1.091504, 1.091503, 1.091503, 1.091496, 1.091479",\ + "0.039040, 0.039040, 0.039040, 0.039042, 0.039044",\ + "0.090706, 0.090706, 0.090706, 0.090705, 0.090703",\ + "0.180446, 0.180446, 0.180447, 0.180449, 0.180455",\ + "0.429219, 0.429219, 0.429219, 0.429220, 0.429221",\ + "1.091504, 1.091503, 1.091503, 1.091496, 1.091479"); + } + + } /* end of arc clk_ast_rng_i_ast2padmux_o[0]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380001.875000, 380001.937500, 380002.062500, 380002.375000, 380003.250000",\ + "380001.968750, 380002.031250, 380002.156250, 380002.468750, 380003.343750",\ + "380002.062500, 380002.125000, 380002.250000, 380002.562500, 380003.437500",\ + "380002.125000, 380002.187500, 380002.312500, 380002.625000, 380003.500000",\ + "380002.468750, 380002.531250, 380002.656250, 380002.968750, 380003.843750"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073650, 0.189354, 0.392450, 0.950561, 2.441537",\ + "0.073650, 0.189354, 0.392450, 0.950561, 2.441537",\ + "0.073650, 0.189365, 0.392450, 0.950561, 2.441537",\ + "0.073650, 0.189385, 0.392560, 0.950561, 2.441537",\ + "0.073650, 0.189425, 0.393252, 0.950561, 2.441537"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380000.437500, 380000.437500, 380000.468750, 380000.531250, 380000.718750",\ + "380000.531250, 380000.531250, 380000.562500, 380000.625000, 380000.812500",\ + "380000.593750, 380000.593750, 380000.625000, 380000.687500, 380000.875000",\ + "380000.656250, 380000.656250, 380000.687500, 380000.750000, 380000.937500",\ + "380000.968750, 380000.968750, 380001.000000, 380001.062500, 380001.250000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180697, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180697, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180697, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180697, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180697, 0.429275, 1.092497"); + } + + } /* end of arc clk_ast_tlul_i_ast2padmux_o[0]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.118063, 0.173160, 0.267375, 0.527316, 1.216798",\ + "0.205470, 0.260567, 0.354781, 0.614720, 1.304204",\ + "0.286205, 0.341346, 0.435579, 0.695608, 1.384949",\ + "0.343571, 0.398793, 0.493060, 0.753254, 1.442331",\ + "0.643636, 0.699058, 0.793671, 1.054205, 1.742813"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.055140, 0.149920, 0.315966, 0.770671, 1.992169",\ + "0.055140, 0.149920, 0.315966, 0.770671, 1.992169",\ + "0.055064, 0.149920, 0.315966, 0.770616, 1.992169",\ + "0.054924, 0.149920, 0.315966, 0.770514, 1.992169",\ + "0.054820, 0.149920, 0.315966, 0.770514, 1.988361"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.068977, 0.083624, 0.108789, 0.177707, 0.362145",\ + "0.157440, 0.172093, 0.197279, 0.266195, 0.450612",\ + "0.246166, 0.261189, 0.286407, 0.355291, 0.539679",\ + "0.308361, 0.324424, 0.349591, 0.418444, 0.602842",\ + "0.630702, 0.654723, 0.683267, 0.752219, 0.936438"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.015416, 0.041075, 0.085652, 0.207740, 0.535967",\ + "0.015763, 0.041089, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967"); + } + + } /* end of arc clk_ast_tlul_i_ast2padmux_o[0]_redg_min*/ + + timing () { + related_pin : "fla_obs_i[0]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.111862, 0.178517, 0.294685, 0.611498, 1.461412",\ + "0.196887, 0.263820, 0.381200, 0.697836, 1.546758",\ + "0.280874, 0.348002, 0.465333, 0.783744, 1.631498",\ + "0.419192, 0.490016, 0.607541, 0.927454, 1.774732",\ + "0.629434, 0.713469, 0.835221, 1.155234, 2.004311"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067759, 0.184639, 0.382501, 0.937507, 2.417566",\ + "0.067759, 0.184639, 0.382501, 0.937507, 2.418347",\ + "0.069174, 0.184639, 0.382586, 0.937507, 2.418347",\ + "0.077831, 0.187460, 0.383300, 0.940319, 2.418347",\ + "0.099054, 0.205738, 0.390315, 0.940320, 2.425200"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.103322, 0.134506, 0.187130, 0.329612, 0.708263",\ + "0.188196, 0.219801, 0.272413, 0.414932, 0.793505",\ + "0.281500, 0.317246, 0.369943, 0.512302, 0.890520",\ + "0.433568, 0.478875, 0.537406, 0.680993, 1.058708",\ + "0.668936, 0.733428, 0.809479, 0.962224, 1.340585"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040521, 0.090274, 0.180244, 0.428614, 1.092440",\ + "0.042863, 0.090977, 0.180401, 0.428614, 1.092696",\ + "0.054661, 0.097371, 0.180899, 0.428690, 1.092793",\ + "0.077190, 0.120374, 0.194930, 0.430280, 1.092793",\ + "0.118581, 0.174509, 0.240947, 0.445113, 1.092793"); + } + + } /* end of arc fla_obs_i[0]_ast2padmux_o[0]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "fla_obs_i[0]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.110629, 0.177262, 0.293339, 0.610165, 1.460154",\ + "0.194795, 0.261696, 0.378936, 0.695592, 1.544629",\ + "0.275980, 0.343081, 0.460479, 0.778514, 1.626463",\ + "0.408884, 0.478137, 0.595421, 0.915532, 1.762573",\ + "0.610985, 0.691263, 0.810230, 1.128954, 1.977655"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067834, 0.183634, 0.382402, 0.934951, 2.414331",\ + "0.067834, 0.183634, 0.382402, 0.934951, 2.414331",\ + "0.068631, 0.183634, 0.382540, 0.936478, 2.414331",\ + "0.075251, 0.185541, 0.383090, 0.939701, 2.414331",\ + "0.093347, 0.198994, 0.384563, 0.939701, 2.425563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.077370, 0.108647, 0.161299, 0.303710, 0.682406",\ + "0.166391, 0.197521, 0.250129, 0.392651, 0.771277",\ + "0.253394, 0.288299, 0.340979, 0.483371, 0.861661",\ + "0.395347, 0.439383, 0.496795, 0.640121, 1.017884",\ + "0.615736, 0.679130, 0.754042, 0.905113, 1.283136"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039363, 0.090228, 0.180124, 0.428312, 1.092155",\ + "0.041196, 0.090228, 0.180315, 0.428312, 1.092511",\ + "0.052267, 0.096073, 0.180798, 0.428601, 1.092511",\ + "0.074482, 0.116813, 0.192279, 0.430033, 1.092511",\ + "0.116096, 0.171326, 0.236992, 0.441817, 1.092511"); + } + + } /* end of arc fla_obs_i[0]_ast2padmux_o[0]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[10]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.059999, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.454321, 0.521261, 0.637729, 0.957401, 1.812562",\ + "0.476584, 0.543525, 0.659993, 0.979665, 1.834826",\ + "0.532978, 0.599918, 0.716386, 1.036058, 1.891219",\ + "0.630840, 0.697781, 0.814249, 1.133921, 1.989082",\ + "1.144998, 1.211940, 1.328409, 1.648081, 2.503240"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.059999, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073065, 0.188996, 0.391935, 0.949303, 2.441374",\ + "0.073065, 0.188996, 0.391935, 0.949303, 2.441374",\ + "0.073065, 0.188996, 0.391935, 0.949303, 2.441374",\ + "0.073065, 0.188996, 0.391935, 0.949303, 2.441374",\ + "0.073066, 0.188998, 0.391939, 0.949310, 2.441375"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.053775, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.506462, 0.537893, 0.590602, 0.732954, 1.111551",\ + "0.527996, 0.559427, 0.612136, 0.754488, 1.133085",\ + "0.595181, 0.626613, 0.679322, 0.821674, 1.200271",\ + "0.705480, 0.736911, 0.789620, 0.931973, 1.310569",\ + "1.265269, 1.296700, 1.349409, 1.491761, 1.870358"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.053775, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039144, 0.090609, 0.180697, 0.429275, 1.090833",\ + "0.039144, 0.090609, 0.180697, 0.429275, 1.090833",\ + "0.039144, 0.090609, 0.180697, 0.429275, 1.090833",\ + "0.039144, 0.090609, 0.180697, 0.429275, 1.090833",\ + "0.039144, 0.090610, 0.180696, 0.429275, 1.090836"); + } + + } /* end of arc obs_ctrl_o[10]_ast2padmux_o[0]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[10]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.056753, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.421371, 0.488300, 0.604758, 0.924429, 1.779604",\ + "0.442149, 0.509077, 0.625536, 0.945207, 1.800382",\ + "0.499740, 0.566669, 0.683127, 1.002798, 1.857973",\ + "0.597685, 0.664614, 0.781072, 1.100743, 1.955918",\ + "1.086534, 1.153463, 1.269921, 1.589592, 2.444767"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.056753, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073056, 0.188976, 0.391905, 0.949239, 2.441363",\ + "0.073056, 0.188976, 0.391905, 0.949239, 2.441363",\ + "0.073056, 0.188976, 0.391905, 0.949239, 2.441363",\ + "0.073056, 0.188976, 0.391905, 0.949239, 2.441363",\ + "0.073056, 0.188976, 0.391905, 0.949239, 2.441363"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044579, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.412434, 0.443851, 0.496510, 0.638912, 1.017545",\ + "0.429840, 0.461257, 0.513916, 0.656317, 1.034951",\ + "0.502410, 0.533827, 0.586486, 0.728887, 1.107521",\ + "0.615047, 0.646463, 0.699123, 0.841524, 1.220157",\ + "1.142076, 1.173492, 1.226152, 1.368553, 1.747186"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044579, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039040, 0.090706, 0.180446, 0.429219, 1.091504",\ + "0.039040, 0.090706, 0.180446, 0.429219, 1.091504",\ + "0.039040, 0.090706, 0.180446, 0.429219, 1.091504",\ + "0.039040, 0.090706, 0.180446, 0.429219, 1.091504",\ + "0.039040, 0.090706, 0.180446, 0.429219, 1.091504"); + } + + } /* end of arc obs_ctrl_o[10]_ast2padmux_o[0]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[10]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.059999, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.453258, 0.484690, 0.537398, 0.679751, 1.058348",\ + "0.478327, 0.509759, 0.562468, 0.704820, 1.083417",\ + "0.547548, 0.578980, 0.631688, 0.774041, 1.152637",\ + "0.671779, 0.703211, 0.755919, 0.898272, 1.276869",\ + "1.305416, 1.336847, 1.389556, 1.531909, 1.910505"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.059999, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039144, 0.090609, 0.180697, 0.429275, 1.090833",\ + "0.039144, 0.090609, 0.180697, 0.429275, 1.090833",\ + "0.039144, 0.090609, 0.180697, 0.429275, 1.090833",\ + "0.039144, 0.090609, 0.180697, 0.429275, 1.090833",\ + "0.039144, 0.090610, 0.180696, 0.429275, 1.090836"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.053775, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.686438, 0.753379, 0.869847, 1.189519, 2.044680",\ + "0.706913, 0.773853, 0.890321, 1.209993, 2.065154",\ + "0.765773, 0.832713, 0.949182, 1.268853, 2.124014",\ + "0.875012, 0.941953, 1.058421, 1.378093, 2.233254",\ + "1.652212, 1.719154, 1.835623, 2.155295, 3.010454"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.053775, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073065, 0.188996, 0.391935, 0.949303, 2.441374",\ + "0.073065, 0.188996, 0.391935, 0.949303, 2.441374",\ + "0.073065, 0.188996, 0.391935, 0.949303, 2.441374",\ + "0.073065, 0.188996, 0.391935, 0.949303, 2.441374",\ + "0.073066, 0.188998, 0.391939, 0.949310, 2.441375"); + } + + } /* end of arc obs_ctrl_o[10]_ast2padmux_o[0]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[10]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.056753, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.282064, 0.313481, 0.366140, 0.508541, 0.887175",\ + "0.305674, 0.337091, 0.389750, 0.532151, 0.910785",\ + "0.377014, 0.408430, 0.461090, 0.603491, 0.982124",\ + "0.496822, 0.528239, 0.580898, 0.723300, 1.101933",\ + "1.041943, 1.073360, 1.126019, 1.268421, 1.647054"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.056753, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039040, 0.090706, 0.180446, 0.429219, 1.091504",\ + "0.039040, 0.090706, 0.180446, 0.429219, 1.091504",\ + "0.039040, 0.090706, 0.180446, 0.429219, 1.091504",\ + "0.039040, 0.090706, 0.180446, 0.429219, 1.091504",\ + "0.039040, 0.090706, 0.180446, 0.429219, 1.091504"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044579, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.590884, 0.657812, 0.774271, 1.093942, 1.949117",\ + "0.607576, 0.674504, 0.790963, 1.110634, 1.965809",\ + "0.669970, 0.736899, 0.853357, 1.173028, 2.028203",\ + "0.779360, 0.846288, 0.962747, 1.282418, 2.137593",\ + "1.516501, 1.583430, 1.699888, 2.019559, 2.874734"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044579, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073056, 0.188976, 0.391905, 0.949239, 2.441363",\ + "0.073056, 0.188976, 0.391905, 0.949239, 2.441363",\ + "0.073056, 0.188976, 0.391905, 0.949239, 2.441363",\ + "0.073056, 0.188976, 0.391905, 0.949239, 2.441363",\ + "0.073056, 0.188976, 0.391905, 0.949239, 2.441363"); + } + + } /* end of arc obs_ctrl_o[10]_ast2padmux_o[0]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[11]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.034927, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.197401, 0.228828, 0.281523, 0.423889, 0.802496",\ + "0.210783, 0.242210, 0.294905, 0.437272, 0.815878",\ + "0.293723, 0.325151, 0.377848, 0.520213, 0.898818",\ + "0.418374, 0.449806, 0.502515, 0.644867, 1.023463",\ + "1.005445, 1.038016, 1.090870, 1.233261, 1.611881"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.034927, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039115, 0.090636, 0.180627, 0.429260, 1.091020",\ + "0.039115, 0.090636, 0.180627, 0.429260, 1.091020",\ + "0.039119, 0.090636, 0.180636, 0.429262, 1.091020",\ + "0.039145, 0.090636, 0.180699, 0.429276, 1.091020",\ + "0.042423, 0.091616, 0.180853, 0.429341, 1.091020"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037147, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.483196, 0.550400, 0.667026, 0.986767, 1.841721",\ + "0.495454, 0.562658, 0.679284, 0.999025, 1.853979",\ + "0.559644, 0.626847, 0.743473, 1.063213, 1.918167",\ + "0.662607, 0.729816, 0.846440, 1.166186, 2.021145",\ + "1.344671, 1.412041, 1.528612, 1.848528, 2.703634"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037147, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073644, 0.189305, 0.392450, 0.950559, 2.441537",\ + "0.073644, 0.189305, 0.392450, 0.950559, 2.441537",\ + "0.073644, 0.189305, 0.392450, 0.950559, 2.441537",\ + "0.073683, 0.189305, 0.392450, 0.950570, 2.441537",\ + "0.075005, 0.189305, 0.392450, 0.950931, 2.441537"); + } + + } /* end of arc obs_ctrl_o[11]_ast2padmux_o[0]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[11]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.030664, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.178015, 0.209429, 0.262079, 0.404490, 0.783130",\ + "0.189390, 0.220804, 0.273454, 0.415865, 0.794505",\ + "0.274579, 0.305993, 0.358646, 0.501054, 0.879692",\ + "0.400471, 0.431892, 0.484565, 0.626953, 1.005576",\ + "0.985792, 1.018105, 1.070937, 1.213308, 1.591914"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.030664, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039020, 0.090679, 0.180398, 0.429208, 1.090559",\ + "0.039020, 0.090679, 0.180398, 0.429208, 1.090559",\ + "0.039027, 0.090679, 0.180413, 0.429212, 1.090559",\ + "0.039069, 0.090679, 0.180517, 0.429235, 1.090559",\ + "0.041694, 0.091361, 0.180877, 0.429339, 1.090559"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.028580, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.476048, 0.543228, 0.659862, 0.979577, 1.834510",\ + "0.484692, 0.551872, 0.668506, 0.988221, 1.843154",\ + "0.552511, 0.619690, 0.736325, 1.056039, 1.910971",\ + "0.655347, 0.722531, 0.839164, 1.158884, 2.013820",\ + "1.333397, 1.400722, 1.517308, 1.837177, 2.692242"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.028580, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073446, 0.189167, 0.392403, 0.950504, 2.441474",\ + "0.073446, 0.189167, 0.392403, 0.950504, 2.441474",\ + "0.073446, 0.189167, 0.392403, 0.950504, 2.441474",\ + "0.073481, 0.189167, 0.392403, 0.950515, 2.441474",\ + "0.074640, 0.189167, 0.392403, 0.950831, 2.441474"); + } + + } /* end of arc obs_ctrl_o[11]_ast2padmux_o[0]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.518600, 0.585804, 0.702430, 1.022170, 1.877124",\ + "0.534366, 0.601569, 0.718195, 1.037936, 1.892890",\ + "0.608476, 0.675680, 0.792306, 1.112046, 1.967001",\ + "0.699697, 0.766901, 0.883527, 1.203267, 2.058222",\ + "1.126490, 1.193697, 1.310322, 1.630066, 2.485023"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073641, 0.189305, 0.392450, 0.950559, 2.441537",\ + "0.073641, 0.189305, 0.392450, 0.950559, 2.441537",\ + "0.073641, 0.189305, 0.392450, 0.950559, 2.441537",\ + "0.073643, 0.189305, 0.392450, 0.950559, 2.441537",\ + "0.073671, 0.189301, 0.392449, 0.950567, 2.441536"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.275118, 0.306284, 0.358903, 0.501398, 0.880041",\ + "0.290749, 0.321915, 0.374533, 0.517029, 0.895671",\ + "0.363703, 0.394869, 0.447488, 0.589983, 0.968626",\ + "0.474794, 0.505959, 0.558577, 0.701073, 1.079716",\ + "1.013269, 1.044421, 1.097036, 1.239541, 1.618177"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090637, 0.180627, 0.429260, 1.092497",\ + "0.040752, 0.090637, 0.180627, 0.429260, 1.092497",\ + "0.040752, 0.090637, 0.180627, 0.429260, 1.092497",\ + "0.040759, 0.090635, 0.180631, 0.429261, 1.092499",\ + "0.040922, 0.090603, 0.180713, 0.429279, 1.092539"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[0]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.337608, 0.404302, 0.520641, 0.837429, 1.687203",\ + "0.349939, 0.416633, 0.532972, 0.849760, 1.699534",\ + "0.408752, 0.475446, 0.591785, 0.908573, 1.758347",\ + "0.496083, 0.562777, 0.679117, 0.995905, 1.845678",\ + "0.949078, 1.015776, 1.132136, 1.448920, 2.298678"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184560, 0.382485, 0.937098, 2.417677",\ + "0.067604, 0.184551, 0.382483, 0.937052, 2.417689"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.228794, 0.260208, 0.312858, 0.455269, 0.833909",\ + "0.240665, 0.272079, 0.324729, 0.467140, 0.845780",\ + "0.323160, 0.354574, 0.407224, 0.549635, 0.928275",\ + "0.428120, 0.459534, 0.512186, 0.654595, 1.033234",\ + "0.930331, 0.961753, 1.014431, 1.156814, 1.535434"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039020, 0.090327, 0.180161, 0.428971, 1.091633",\ + "0.039020, 0.090327, 0.180161, 0.428971, 1.091633",\ + "0.039020, 0.090327, 0.180161, 0.428971, 1.091633",\ + "0.039024, 0.090327, 0.180161, 0.428971, 1.091612",\ + "0.039078, 0.090324, 0.180166, 0.428948, 1.091257"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[0]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.287803, 0.318969, 0.371587, 0.514083, 0.892726",\ + "0.303569, 0.334734, 0.387353, 0.529848, 0.908491",\ + "0.378810, 0.409975, 0.462594, 0.605089, 0.983732",\ + "0.473884, 0.505049, 0.557668, 0.700163, 1.078806",\ + "0.918190, 0.949342, 1.001956, 1.144462, 1.523098"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040034, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090637, 0.180627, 0.429260, 1.092497",\ + "0.040752, 0.090637, 0.180627, 0.429260, 1.092497",\ + "0.040752, 0.090637, 0.180627, 0.429260, 1.092497",\ + "0.040759, 0.090635, 0.180631, 0.429261, 1.092499",\ + "0.040922, 0.090603, 0.180713, 0.429279, 1.092539"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.376755, 0.443500, 0.560063, 0.876818, 1.726409",\ + "0.392417, 0.459162, 0.575725, 0.892480, 1.742071",\ + "0.467424, 0.534169, 0.650732, 0.967487, 1.817078",\ + "0.562603, 0.629351, 0.745928, 1.062681, 1.912261",\ + "1.006927, 1.073706, 1.190415, 1.507149, 2.356620"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040698, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073641, 0.189305, 0.392450, 0.950559, 2.441537",\ + "0.073641, 0.189305, 0.392450, 0.950559, 2.441537",\ + "0.073641, 0.189305, 0.392450, 0.950559, 2.441537",\ + "0.073643, 0.189305, 0.392450, 0.950559, 2.441537",\ + "0.073671, 0.189301, 0.392449, 0.950567, 2.441536"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[0]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.264318, 0.295567, 0.348210, 0.490643, 0.869326",\ + "0.278489, 0.309737, 0.362381, 0.504814, 0.883496",\ + "0.355325, 0.386573, 0.439217, 0.581649, 0.960332",\ + "0.450369, 0.481617, 0.534260, 0.676693, 1.055376",\ + "0.893831, 0.925076, 0.977718, 1.120154, 1.498834"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036484, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039020, 0.090327, 0.180161, 0.428971, 1.091633",\ + "0.039020, 0.090327, 0.180161, 0.428971, 1.091633",\ + "0.039020, 0.090327, 0.180161, 0.428971, 1.091633",\ + "0.039024, 0.090327, 0.180161, 0.428971, 1.091612",\ + "0.039078, 0.090324, 0.180166, 0.428948, 1.091257"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.373701, 0.440395, 0.556734, 0.873522, 1.723296",\ + "0.385572, 0.452266, 0.568605, 0.885393, 1.735167",\ + "0.464371, 0.531065, 0.647404, 0.964192, 1.813966",\ + "0.559385, 0.626079, 0.742420, 1.059207, 1.908981",\ + "1.002245, 1.068944, 1.185303, 1.502088, 2.351846"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032503, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184561, 0.382485, 0.937100, 2.417676",\ + "0.067620, 0.184560, 0.382485, 0.937098, 2.417677",\ + "0.067604, 0.184551, 0.382483, 0.937052, 2.417689"); + } + + } /* end of arc obs_ctrl_o[4]_ast2padmux_o[0]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.337998, 0.404744, 0.521308, 0.838063, 1.687653",\ + "0.353177, 0.419923, 0.536487, 0.853242, 1.702832",\ + "0.412195, 0.478941, 0.595505, 0.912260, 1.761850",\ + "0.508449, 0.575199, 0.691783, 1.008535, 1.858109",\ + "0.997007, 1.063817, 1.180658, 1.497372, 2.346736"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073639, 0.189305, 0.392450, 0.950558, 2.441538",\ + "0.073639, 0.189305, 0.392450, 0.950558, 2.441538",\ + "0.073641, 0.189305, 0.392450, 0.950559, 2.441538",\ + "0.073704, 0.189296, 0.392447, 0.950576, 2.441534",\ + "0.075364, 0.189067, 0.392369, 0.951029, 2.441428"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.272032, 0.303198, 0.355817, 0.498312, 0.876955",\ + "0.289891, 0.321056, 0.373675, 0.516170, 0.894813",\ + "0.360955, 0.392121, 0.444739, 0.587235, 0.965878",\ + "0.471378, 0.502542, 0.555160, 0.697656, 1.076298",\ + "1.004117, 1.035227, 1.087829, 1.230366, 1.608983"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090636, 0.180627, 0.429260, 1.092497",\ + "0.040752, 0.090636, 0.180627, 0.429260, 1.092497",\ + "0.040752, 0.090636, 0.180636, 0.429262, 1.092497",\ + "0.040771, 0.090636, 0.180700, 0.429276, 1.092502",\ + "0.042582, 0.091671, 0.180848, 0.429341, 1.092666"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[0]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.329221, 0.395915, 0.512254, 0.829041, 1.678816",\ + "0.344592, 0.411286, 0.527624, 0.844412, 1.694187",\ + "0.406780, 0.473474, 0.589813, 0.906601, 1.756375",\ + "0.502234, 0.568932, 0.685288, 1.002073, 1.851833",\ + "0.957622, 1.024367, 1.140929, 1.457685, 2.307276"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067607, 0.184553, 0.382483, 0.937060, 2.417687",\ + "0.067439, 0.184458, 0.382464, 0.936568, 2.417820"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.231492, 0.262740, 0.315383, 0.457816, 0.836499",\ + "0.245351, 0.276600, 0.329243, 0.471676, 0.850359",\ + "0.320124, 0.351372, 0.404016, 0.546449, 0.925131",\ + "0.430166, 0.461410, 0.514053, 0.656489, 1.035169",\ + "0.955028, 0.986237, 1.038869, 1.181331, 1.559995"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039020, 0.090327, 0.180161, 0.428971, 1.091633",\ + "0.039020, 0.090327, 0.180161, 0.428971, 1.091633",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091594",\ + "0.039070, 0.090324, 0.180167, 0.428947, 1.091311",\ + "0.040211, 0.090294, 0.180212, 0.428752, 1.090589"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[0]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.194141, 0.225569, 0.278263, 0.420630, 0.799236",\ + "0.213398, 0.244825, 0.297520, 0.439886, 0.818493",\ + "0.291110, 0.322538, 0.375235, 0.517599, 0.896205",\ + "0.414666, 0.446098, 0.498807, 0.641159, 1.019755",\ + "0.992685, 1.025312, 1.078170, 1.220567, 1.599190"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.047100, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090636, 0.180627, 0.429260, 1.092497",\ + "0.040752, 0.090636, 0.180627, 0.429260, 1.092497",\ + "0.040752, 0.090636, 0.180636, 0.429262, 1.092497",\ + "0.040771, 0.090636, 0.180700, 0.429276, 1.092502",\ + "0.042582, 0.091671, 0.180848, 0.429341, 1.092666"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.473555, 0.540758, 0.657385, 0.977125, 1.832079",\ + "0.486694, 0.553897, 0.670524, 0.990264, 1.845218",\ + "0.549031, 0.616234, 0.732861, 1.052601, 1.907555",\ + "0.658256, 0.725467, 0.842091, 1.161839, 2.016800",\ + "1.359176, 1.426589, 1.543146, 1.863108, 2.718254"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045359, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073639, 0.189305, 0.392450, 0.950558, 2.441538",\ + "0.073639, 0.189305, 0.392450, 0.950558, 2.441538",\ + "0.073641, 0.189305, 0.392450, 0.950559, 2.441538",\ + "0.073704, 0.189296, 0.392447, 0.950576, 2.441534",\ + "0.075364, 0.189067, 0.392369, 0.951029, 2.441428"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[0]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[5]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.174738, 0.206152, 0.258801, 0.401212, 0.779853",\ + "0.192387, 0.223801, 0.276451, 0.418861, 0.797502",\ + "0.271960, 0.303374, 0.356027, 0.498435, 0.877073",\ + "0.396781, 0.428202, 0.480875, 0.623262, 1.001885",\ + "0.972879, 1.005251, 1.058088, 1.200464, 1.579073"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.043742, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039020, 0.090327, 0.180161, 0.428971, 1.091633",\ + "0.039020, 0.090327, 0.180161, 0.428971, 1.091633",\ + "0.039026, 0.090327, 0.180161, 0.428971, 1.091594",\ + "0.039070, 0.090324, 0.180167, 0.428947, 1.091311",\ + "0.040211, 0.090294, 0.180212, 0.428752, 1.090589"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.466421, 0.533601, 0.650235, 0.969950, 1.824882",\ + "0.476202, 0.543381, 0.660016, 0.979730, 1.834662",\ + "0.541892, 0.609071, 0.725705, 1.045420, 1.900352",\ + "0.650936, 0.718122, 0.834754, 1.154476, 2.009415",\ + "1.346760, 1.414122, 1.530696, 1.850604, 2.705703"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.037000, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067621, 0.184561, 0.382485, 0.937101, 2.417676",\ + "0.067607, 0.184553, 0.382483, 0.937060, 2.417687",\ + "0.067439, 0.184458, 0.382464, 0.936568, 2.417820"); + } + + } /* end of arc obs_ctrl_o[5]_ast2padmux_o[0]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.313610, 0.380815, 0.497441, 0.817182, 1.672137",\ + "0.329358, 0.396562, 0.513188, 0.832930, 1.687885",\ + "0.393235, 0.460439, 0.577065, 0.896806, 1.751761",\ + "0.471556, 0.538760, 0.655386, 0.975126, 1.830081",\ + "0.862244, 0.929448, 1.046074, 1.365815, 2.220770"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073650, 0.189304, 0.392450, 0.950561, 2.441537",\ + "0.073650, 0.189304, 0.392450, 0.950561, 2.441537",\ + "0.073650, 0.189304, 0.392450, 0.950561, 2.441537",\ + "0.073650, 0.189305, 0.392450, 0.950561, 2.441537",\ + "0.073650, 0.189305, 0.392450, 0.950561, 2.441537"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.191794, 0.223225, 0.275933, 0.418286, 0.796883",\ + "0.207675, 0.239106, 0.291815, 0.434167, 0.812764",\ + "0.277023, 0.308454, 0.361162, 0.503515, 0.882112",\ + "0.365690, 0.397121, 0.449830, 0.592182, 0.970779",\ + "0.790485, 0.821927, 0.874671, 1.016989, 1.395559"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090610, 0.180695, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180695, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180695, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180695, 0.429275, 1.092497",\ + "0.040785, 0.090539, 0.180878, 0.429316, 1.092505"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[0]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.289937, 0.356887, 0.473363, 0.793036, 1.648185",\ + "0.304047, 0.370997, 0.487474, 0.807146, 1.662295",\ + "0.369617, 0.436567, 0.553044, 0.872716, 1.727865",\ + "0.448151, 0.515103, 0.631581, 0.951254, 1.806401",\ + "0.842717, 0.909715, 1.026232, 1.345907, 2.200999"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067586, 0.184541, 0.382481, 0.936998, 2.417704"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.167066, 0.198479, 0.251128, 0.393540, 0.772181",\ + "0.179068, 0.210482, 0.263130, 0.405543, 0.784184",\ + "0.252467, 0.283881, 0.336530, 0.478942, 0.857582",\ + "0.341502, 0.372916, 0.425566, 0.567976, 0.946617",\ + "0.759790, 0.791205, 0.843857, 0.986265, 1.364904"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039018, 0.090327, 0.180161, 0.428971, 1.091651",\ + "0.039018, 0.090327, 0.180161, 0.428971, 1.091651",\ + "0.039019, 0.090327, 0.180161, 0.428971, 1.091642",\ + "0.039020, 0.090327, 0.180161, 0.428971, 1.091633",\ + "0.039025, 0.090322, 0.180169, 0.428938, 1.091600"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[0]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.314064, 0.345229, 0.397848, 0.540343, 0.918986",\ + "0.329859, 0.361025, 0.413644, 0.556139, 0.934782",\ + "0.407724, 0.438890, 0.491508, 0.634004, 1.012646",\ + "0.508778, 0.539944, 0.592562, 0.735058, 1.113701",\ + "0.984655, 1.015818, 1.068436, 1.210933, 1.589574"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090610, 0.180695, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180695, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180695, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180695, 0.429275, 1.092497",\ + "0.040785, 0.090539, 0.180878, 0.429316, 1.092505"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.614118, 0.681322, 0.797948, 1.117689, 1.972644",\ + "0.626922, 0.694126, 0.810752, 1.130493, 1.985448",\ + "0.694897, 0.762101, 0.878727, 1.198468, 2.053423",\ + "0.806557, 0.873761, 0.990387, 1.310127, 2.165082",\ + "1.291436, 1.358640, 1.475266, 1.795007, 2.649961"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040587, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073650, 0.189304, 0.392450, 0.950561, 2.441537",\ + "0.073650, 0.189304, 0.392450, 0.950561, 2.441537",\ + "0.073650, 0.189304, 0.392450, 0.950561, 2.441537",\ + "0.073650, 0.189305, 0.392450, 0.950561, 2.441537",\ + "0.073650, 0.189305, 0.392450, 0.950561, 2.441537"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[0]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[6]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.270718, 0.301966, 0.354610, 0.497042, 0.875725",\ + "0.284868, 0.316117, 0.368760, 0.511193, 0.889875",\ + "0.364362, 0.395610, 0.448254, 0.590687, 0.969369",\ + "0.465503, 0.496751, 0.549395, 0.691827, 1.070510",\ + "0.941451, 0.972693, 1.025335, 1.167772, 1.546452"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.036606, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039018, 0.090327, 0.180161, 0.428971, 1.091651",\ + "0.039018, 0.090327, 0.180161, 0.428971, 1.091651",\ + "0.039019, 0.090327, 0.180161, 0.428971, 1.091642",\ + "0.039020, 0.090327, 0.180161, 0.428971, 1.091633",\ + "0.039025, 0.090322, 0.180169, 0.428938, 1.091600"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.437011, 0.503705, 0.620045, 0.936832, 1.786606",\ + "0.446608, 0.513302, 0.629642, 0.946429, 1.796203",\ + "0.517780, 0.584475, 0.700814, 1.017602, 1.867376",\ + "0.629396, 0.696091, 0.812430, 1.129218, 1.978992",\ + "1.131911, 1.198614, 1.314996, 1.631778, 2.481517"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.032396, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067586, 0.184541, 0.382481, 0.936998, 2.417704"); + } + + } /* end of arc obs_ctrl_o[6]_ast2padmux_o[0]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[7]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.060518, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.315427, 0.346593, 0.399212, 0.541707, 0.920350",\ + "0.342146, 0.373312, 0.425930, 0.568426, 0.947068",\ + "0.410184, 0.441350, 0.493968, 0.636464, 1.015106",\ + "0.512927, 0.544093, 0.596711, 0.739207, 1.117850",\ + "1.020553, 1.055041, 1.108054, 1.250599, 1.629324"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.060518, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090610, 0.180695, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180695, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180696, 0.429275, 1.092497",\ + "0.040752, 0.090610, 0.180832, 0.429306, 1.092497",\ + "0.047830, 0.093504, 0.180832, 0.429352, 1.092504"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.051005, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.615123, 0.682328, 0.798954, 1.118695, 1.973650",\ + "0.635870, 0.703074, 0.819700, 1.139442, 1.994397",\ + "0.701192, 0.768396, 0.885022, 1.204764, 2.059719",\ + "0.815370, 0.882574, 0.999200, 1.318941, 2.173895",\ + "1.395166, 1.462382, 1.579004, 1.898758, 2.753724"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.051005, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073650, 0.189304, 0.392450, 0.950561, 2.441537",\ + "0.073650, 0.189304, 0.392450, 0.950561, 2.441537",\ + "0.073650, 0.189304, 0.392450, 0.950561, 2.441537",\ + "0.073650, 0.189305, 0.392450, 0.950561, 2.441537",\ + "0.073748, 0.189305, 0.392450, 0.950588, 2.441537"); + } + + } /* end of arc obs_ctrl_o[7]_ast2padmux_o[0]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[7]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.049671, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.132284, 0.163698, 0.216345, 0.358758, 0.737400",\ + "0.152768, 0.184181, 0.236829, 0.379242, 0.757883",\ + "0.226947, 0.258361, 0.311010, 0.453421, 0.832062",\ + "0.328095, 0.359509, 0.412158, 0.554569, 0.933209",\ + "0.769672, 0.801087, 0.853739, 0.996148, 1.374786"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.049671, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039016, 0.090327, 0.180161, 0.428971, 1.091660",\ + "0.039016, 0.090327, 0.180161, 0.428971, 1.091660",\ + "0.039020, 0.090327, 0.180161, 0.428971, 1.091633",\ + "0.039020, 0.090327, 0.180161, 0.428971, 1.091633",\ + "0.039025, 0.090323, 0.180168, 0.428941, 1.091602"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040467, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.268552, 0.335503, 0.451979, 0.771651, 1.626801",\ + "0.284564, 0.351514, 0.467990, 0.787663, 1.642812",\ + "0.357242, 0.424196, 0.540676, 0.860348, 1.715493",\ + "0.477594, 0.544576, 0.661079, 0.980754, 1.835865",\ + "1.125477, 1.192657, 1.309291, 1.629006, 2.483939"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.040467, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067620, 0.184560, 0.382485, 0.937099, 2.417677",\ + "0.067601, 0.184550, 0.382483, 0.937044, 2.417691"); + } + + } /* end of arc obs_ctrl_o[7]_ast2padmux_o[0]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[8]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045711, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.711181, 0.778121, 0.894590, 1.214261, 2.069422",\ + "0.729530, 0.796471, 0.912939, 1.232611, 2.087772",\ + "0.800074, 0.867014, 0.983483, 1.303154, 2.158315",\ + "0.892545, 0.959485, 1.075954, 1.395625, 2.250786",\ + "1.377232, 1.444175, 1.560645, 1.880316, 2.735475"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045711, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073065, 0.188996, 0.391935, 0.949303, 2.441374",\ + "0.073065, 0.188996, 0.391935, 0.949303, 2.441374",\ + "0.073065, 0.188996, 0.391935, 0.949303, 2.441374",\ + "0.073065, 0.188996, 0.391935, 0.949303, 2.441374",\ + "0.073067, 0.188999, 0.391940, 0.949314, 2.441375"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044476, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.503942, 0.535373, 0.588082, 0.730435, 1.109031",\ + "0.521369, 0.552801, 0.605509, 0.747862, 1.126459",\ + "0.598766, 0.630198, 0.682907, 0.825259, 1.203856",\ + "0.707080, 0.738512, 0.791220, 0.933573, 1.312169",\ + "1.259288, 1.290720, 1.343428, 1.485781, 1.864378"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044476, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039144, 0.090609, 0.180697, 0.429275, 1.090833",\ + "0.039144, 0.090609, 0.180697, 0.429275, 1.090833",\ + "0.039144, 0.090609, 0.180697, 0.429275, 1.090833",\ + "0.039144, 0.090609, 0.180697, 0.429275, 1.090833",\ + "0.039144, 0.090610, 0.180696, 0.429275, 1.090836"); + } + + } /* end of arc obs_ctrl_o[8]_ast2padmux_o[0]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[8]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.041900, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.645044, 0.711973, 0.828431, 1.148102, 2.003277",\ + "0.661659, 0.728588, 0.845047, 1.164717, 2.019893",\ + "0.736081, 0.803009, 0.919468, 1.239139, 2.094314",\ + "0.830502, 0.897430, 1.013889, 1.333560, 2.188735",\ + "1.278260, 1.345188, 1.461647, 1.781317, 2.636493"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.041900, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073056, 0.188976, 0.391905, 0.949239, 2.441363",\ + "0.073056, 0.188976, 0.391905, 0.949239, 2.441363",\ + "0.073056, 0.188976, 0.391905, 0.949239, 2.441363",\ + "0.073056, 0.188976, 0.391905, 0.949239, 2.441363",\ + "0.073056, 0.188976, 0.391905, 0.949239, 2.441363"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035639, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.359441, 0.390858, 0.443517, 0.585919, 0.964552",\ + "0.372788, 0.404204, 0.456864, 0.599265, 0.977898",\ + "0.454765, 0.486182, 0.538841, 0.681242, 1.059876",\ + "0.563985, 0.595401, 0.648061, 0.790462, 1.169096",\ + "1.087607, 1.119023, 1.171683, 1.314084, 1.692717"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035639, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039040, 0.090706, 0.180446, 0.429219, 1.091504",\ + "0.039040, 0.090706, 0.180446, 0.429219, 1.091504",\ + "0.039040, 0.090706, 0.180446, 0.429219, 1.091504",\ + "0.039040, 0.090706, 0.180446, 0.429219, 1.091504",\ + "0.039040, 0.090706, 0.180446, 0.429219, 1.091504"); + } + + } /* end of arc obs_ctrl_o[8]_ast2padmux_o[0]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[8]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045711, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.540276, 0.571708, 0.624416, 0.766769, 1.145365",\ + "0.558625, 0.590057, 0.642766, 0.785118, 1.163715",\ + "0.632481, 0.663913, 0.716621, 0.858974, 1.237571",\ + "0.730741, 0.762172, 0.814881, 0.957234, 1.335830",\ + "1.254148, 1.285579, 1.338288, 1.480641, 1.859237"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.045711, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039144, 0.090609, 0.180697, 0.429275, 1.090833",\ + "0.039144, 0.090609, 0.180697, 0.429275, 1.090833",\ + "0.039144, 0.090609, 0.180697, 0.429275, 1.090833",\ + "0.039144, 0.090609, 0.180697, 0.429275, 1.090833",\ + "0.039144, 0.090610, 0.180696, 0.429275, 1.090836"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044476, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.661922, 0.728863, 0.845331, 1.165002, 2.020164",\ + "0.674544, 0.741485, 0.857953, 1.177625, 2.032786",\ + "0.729459, 0.796399, 0.912867, 1.232539, 2.087700",\ + "0.831878, 0.898819, 1.015287, 1.334959, 2.190120",\ + "1.558837, 1.625780, 1.742250, 2.061921, 2.917080"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044476, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073065, 0.188996, 0.391935, 0.949303, 2.441374",\ + "0.073065, 0.188996, 0.391935, 0.949303, 2.441374",\ + "0.073065, 0.188996, 0.391935, 0.949303, 2.441374",\ + "0.073065, 0.188996, 0.391935, 0.949303, 2.441374",\ + "0.073067, 0.188999, 0.391940, 0.949314, 2.441375"); + } + + } /* end of arc obs_ctrl_o[8]_ast2padmux_o[0]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[8]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.041900, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.287469, 0.318885, 0.371545, 0.513946, 0.892579",\ + "0.304214, 0.335631, 0.388290, 0.530692, 0.909325",\ + "0.382471, 0.413888, 0.466547, 0.608949, 0.987582",\ + "0.506351, 0.537768, 0.590427, 0.732828, 1.111462",\ + "1.074942, 1.106358, 1.159018, 1.301419, 1.680052"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.041900, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039040, 0.090706, 0.180446, 0.429219, 1.091504",\ + "0.039040, 0.090706, 0.180446, 0.429219, 1.091504",\ + "0.039040, 0.090706, 0.180446, 0.429219, 1.091504",\ + "0.039040, 0.090706, 0.180446, 0.429219, 1.091504",\ + "0.039040, 0.090706, 0.180446, 0.429219, 1.091504"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035639, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.464880, 0.531808, 0.648267, 0.967938, 1.823113",\ + "0.478226, 0.545155, 0.661613, 0.981284, 1.836459",\ + "0.556365, 0.623294, 0.739753, 1.059423, 1.914599",\ + "0.657544, 0.724473, 0.840931, 1.160602, 2.015777",\ + "1.129399, 1.196328, 1.312786, 1.632457, 2.487632"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035639, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073056, 0.188976, 0.391905, 0.949239, 2.441363",\ + "0.073056, 0.188976, 0.391905, 0.949239, 2.441363",\ + "0.073056, 0.188976, 0.391905, 0.949239, 2.441363",\ + "0.073056, 0.188976, 0.391905, 0.949239, 2.441363",\ + "0.073056, 0.188976, 0.391905, 0.949239, 2.441363"); + } + + } /* end of arc obs_ctrl_o[8]_ast2padmux_o[0]_inv_min*/ + + timing () { + related_pin : "obs_ctrl_o[9]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.046138, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.722991, 0.789932, 0.906400, 1.226072, 2.081233",\ + "0.741544, 0.808485, 0.924953, 1.244625, 2.099786",\ + "0.814242, 0.881183, 0.997651, 1.317322, 2.172483",\ + "0.909467, 0.976408, 1.092876, 1.412548, 2.267709",\ + "1.368597, 1.435539, 1.552008, 1.871680, 2.726840"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.046138, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073065, 0.188996, 0.391935, 0.949303, 2.441374",\ + "0.073065, 0.188996, 0.391935, 0.949303, 2.441374",\ + "0.073065, 0.188996, 0.391935, 0.949303, 2.441374",\ + "0.073065, 0.188996, 0.391935, 0.949303, 2.441374",\ + "0.073066, 0.188998, 0.391938, 0.949310, 2.441375"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044715, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.510317, 0.541749, 0.594457, 0.736810, 1.115407",\ + "0.527859, 0.559291, 0.612000, 0.754352, 1.132949",\ + "0.605188, 0.636620, 0.689329, 0.831681, 1.210278",\ + "0.714634, 0.746065, 0.798774, 0.941126, 1.319723",\ + "1.246573, 1.278005, 1.330713, 1.473066, 1.851663"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044715, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039144, 0.090609, 0.180697, 0.429275, 1.090833",\ + "0.039144, 0.090609, 0.180697, 0.429275, 1.090833",\ + "0.039144, 0.090609, 0.180697, 0.429275, 1.090833",\ + "0.039144, 0.090609, 0.180697, 0.429275, 1.090833",\ + "0.039144, 0.090610, 0.180696, 0.429275, 1.090836"); + } + + } /* end of arc obs_ctrl_o[9]_ast2padmux_o[0]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[9]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.042344, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.677174, 0.744103, 0.860561, 1.180232, 2.035407",\ + "0.693995, 0.760924, 0.877382, 1.197053, 2.052228",\ + "0.768427, 0.835355, 0.951814, 1.271485, 2.126660",\ + "0.863682, 0.930611, 1.047069, 1.366740, 2.221915",\ + "1.316333, 1.383262, 1.499720, 1.819391, 2.674566"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.042344, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073056, 0.188976, 0.391905, 0.949239, 2.441363",\ + "0.073056, 0.188976, 0.391905, 0.949239, 2.441363",\ + "0.073056, 0.188976, 0.391905, 0.949239, 2.441363",\ + "0.073056, 0.188976, 0.391905, 0.949239, 2.441363",\ + "0.073056, 0.188976, 0.391905, 0.949239, 2.441363"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035869, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.381372, 0.412788, 0.465448, 0.607849, 0.986482",\ + "0.394828, 0.426245, 0.478904, 0.621306, 0.999939",\ + "0.476249, 0.507665, 0.560325, 0.702726, 1.081359",\ + "0.586223, 0.617640, 0.670299, 0.812701, 1.191334",\ + "1.111662, 1.143078, 1.195738, 1.338139, 1.716772"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035869, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039040, 0.090706, 0.180446, 0.429219, 1.091504",\ + "0.039040, 0.090706, 0.180446, 0.429219, 1.091504",\ + "0.039040, 0.090706, 0.180446, 0.429219, 1.091504",\ + "0.039040, 0.090706, 0.180446, 0.429219, 1.091504",\ + "0.039040, 0.090706, 0.180446, 0.429219, 1.091504"); + } + + } /* end of arc obs_ctrl_o[9]_ast2padmux_o[0]_una_min*/ + + timing () { + related_pin : "obs_ctrl_o[9]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.046138, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.544142, 0.575574, 0.628282, 0.770635, 1.149231",\ + "0.562695, 0.594126, 0.646835, 0.789188, 1.167784",\ + "0.636753, 0.668185, 0.720893, 0.863246, 1.241843",\ + "0.735854, 0.767286, 0.819994, 0.962347, 1.340943",\ + "1.209522, 1.240954, 1.293662, 1.436015, 1.814612"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.046138, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039144, 0.090609, 0.180697, 0.429275, 1.090833",\ + "0.039144, 0.090609, 0.180697, 0.429275, 1.090833",\ + "0.039144, 0.090609, 0.180697, 0.429275, 1.090833",\ + "0.039144, 0.090609, 0.180697, 0.429275, 1.090833",\ + "0.039144, 0.090610, 0.180696, 0.429275, 1.090836"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044715, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.616983, 0.683923, 0.800391, 1.120063, 1.975224",\ + "0.629672, 0.696613, 0.813081, 1.132753, 1.987914",\ + "0.684443, 0.751384, 0.867852, 1.187524, 2.042685",\ + "0.787482, 0.854422, 0.970891, 1.290562, 2.145723",\ + "1.494185, 1.561127, 1.677597, 1.997268, 2.852428"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.044715, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073065, 0.188996, 0.391935, 0.949303, 2.441374",\ + "0.073065, 0.188996, 0.391935, 0.949303, 2.441374",\ + "0.073065, 0.188996, 0.391935, 0.949303, 2.441374",\ + "0.073065, 0.188996, 0.391935, 0.949303, 2.441374",\ + "0.073066, 0.188998, 0.391938, 0.949310, 2.441375"); + } + + } /* end of arc obs_ctrl_o[9]_ast2padmux_o[0]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "obs_ctrl_o[9]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.042344, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.282372, 0.313788, 0.366448, 0.508849, 0.887482",\ + "0.299186, 0.330603, 0.383262, 0.525663, 0.904297",\ + "0.377525, 0.408942, 0.461601, 0.604002, 0.982636",\ + "0.500058, 0.531475, 0.584134, 0.726535, 1.105169",\ + "1.057248, 1.088664, 1.141323, 1.283725, 1.662358"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.042344, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039040, 0.090706, 0.180446, 0.429219, 1.091504",\ + "0.039040, 0.090706, 0.180446, 0.429219, 1.091504",\ + "0.039040, 0.090706, 0.180446, 0.429219, 1.091504",\ + "0.039040, 0.090706, 0.180446, 0.429219, 1.091504",\ + "0.039040, 0.090706, 0.180446, 0.429219, 1.091504"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035869, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.472156, 0.539085, 0.655543, 0.975214, 1.830389",\ + "0.485612, 0.552541, 0.669000, 0.988670, 1.843846",\ + "0.563901, 0.630829, 0.747288, 1.066959, 1.922134",\ + "0.663577, 0.730506, 0.846965, 1.166635, 2.021811",\ + "1.128422, 1.195350, 1.311809, 1.631480, 2.486655"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.035869, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073056, 0.188976, 0.391905, 0.949239, 2.441363",\ + "0.073056, 0.188976, 0.391905, 0.949239, 2.441363",\ + "0.073056, 0.188976, 0.391905, 0.949239, 2.441363",\ + "0.073056, 0.188976, 0.391905, 0.949239, 2.441363",\ + "0.073056, 0.188976, 0.391905, 0.949239, 2.441363"); + } + + } /* end of arc obs_ctrl_o[9]_ast2padmux_o[0]_inv_min*/ + + timing () { + related_pin : "otm_obs_i[0]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.113025, 0.179927, 0.296363, 0.616032, 1.471239",\ + "0.197499, 0.264597, 0.381195, 0.700878, 1.555851",\ + "0.280076, 0.347397, 0.463985, 0.783849, 1.638912",\ + "0.416433, 0.486812, 0.604025, 0.924187, 1.779474",\ + "0.624246, 0.705773, 0.827408, 1.148979, 2.004448"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073036, 0.188929, 0.391837, 0.949094, 2.441339",\ + "0.073183, 0.189268, 0.392332, 0.950151, 2.441515",\ + "0.074613, 0.189268, 0.392404, 0.950824, 2.441515",\ + "0.081868, 0.192856, 0.392640, 0.950928, 2.441515",\ + "0.102993, 0.209850, 0.398253, 0.950928, 2.441550"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.102851, 0.134278, 0.186974, 0.329339, 0.707946",\ + "0.188654, 0.220274, 0.273049, 0.415364, 0.793932",\ + "0.283232, 0.317549, 0.370548, 0.513080, 0.891796",\ + "0.439854, 0.481254, 0.538206, 0.682122, 1.061087",\ + "0.686111, 0.743348, 0.813206, 0.964006, 1.344314"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039116, 0.090635, 0.180630, 0.429260, 1.091011",\ + "0.039742, 0.090679, 0.180942, 0.429335, 1.091011",\ + "0.047350, 0.093337, 0.180942, 0.429351, 1.091547",\ + "0.062153, 0.106580, 0.187253, 0.429567, 1.092904",\ + "0.090069, 0.142497, 0.212830, 0.435355, 1.093832"); + } + + } /* end of arc otm_obs_i[0]_ast2padmux_o[0]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "otm_obs_i[0]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.111805, 0.178694, 0.295120, 0.614788, 1.470008",\ + "0.195286, 0.262361, 0.378939, 0.698621, 1.553622",\ + "0.274742, 0.342025, 0.458625, 0.778449, 1.633475",\ + "0.405125, 0.474114, 0.590991, 0.911111, 1.766377",\ + "0.603219, 0.681326, 0.800406, 1.120805, 1.976209"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073037, 0.188925, 0.391823, 0.948978, 2.441330",\ + "0.073166, 0.189215, 0.392273, 0.950004, 2.441389",\ + "0.074291, 0.189215, 0.392420, 0.950004, 2.441389",\ + "0.079135, 0.190954, 0.392488, 0.950004, 2.441389",\ + "0.097064, 0.203428, 0.393485, 0.950004, 2.441492"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.077369, 0.108778, 0.161412, 0.303838, 0.682490",\ + "0.166731, 0.198172, 0.250911, 0.393234, 0.771808",\ + "0.254923, 0.288717, 0.341672, 0.484162, 0.862849",\ + "0.400634, 0.441041, 0.497234, 0.640906, 1.019844",\ + "0.631133, 0.687293, 0.756057, 0.905549, 1.285508"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.038988, 0.090550, 0.180320, 0.429191, 1.090420",\ + "0.039208, 0.090550, 0.180739, 0.429310, 1.090420",\ + "0.045872, 0.092820, 0.180739, 0.429348, 1.091289",\ + "0.060397, 0.104342, 0.185891, 0.429526, 1.092845",\ + "0.088207, 0.140006, 0.210014, 0.433521, 1.093776"); + } + + } /* end of arc otm_obs_i[0]_ast2padmux_o[0]_una_min*/ + + timing () { + related_pin : "otp_obs_i[0]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.122660, 0.189370, 0.305783, 0.622560, 1.472274",\ + "0.209824, 0.276743, 0.394059, 0.710704, 1.559679",\ + "0.301920, 0.369023, 0.486415, 0.804486, 1.652417",\ + "0.455547, 0.524976, 0.642287, 0.962376, 1.809444",\ + "0.699992, 0.780922, 0.900058, 1.218756, 2.067549"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067561, 0.184527, 0.382478, 0.936925, 2.417724",\ + "0.067561, 0.184527, 0.382478, 0.936925, 2.418306",\ + "0.068683, 0.184527, 0.382544, 0.936925, 2.418306",\ + "0.075540, 0.185756, 0.383113, 0.940410, 2.418306",\ + "0.094401, 0.199857, 0.384817, 0.940410, 2.426093"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.114764, 0.145947, 0.198571, 0.341053, 0.719705",\ + "0.205629, 0.236785, 0.289401, 0.431904, 0.810542",\ + "0.310076, 0.342571, 0.395201, 0.537686, 0.916183",\ + "0.500896, 0.538360, 0.591093, 0.733386, 1.111456",\ + "0.820213, 0.870292, 0.933027, 1.077593, 1.455130"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040532, 0.090273, 0.180246, 0.428609, 1.092443",\ + "0.040870, 0.090273, 0.180281, 0.428609, 1.092443",\ + "0.045400, 0.092351, 0.180508, 0.428609, 1.092443",\ + "0.059558, 0.100025, 0.181106, 0.428872, 1.092443",\ + "0.087354, 0.133744, 0.204884, 0.431205, 1.092443"); + } + + } /* end of arc otp_obs_i[0]_ast2padmux_o[0]_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "otp_obs_i[0]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.119334, 0.186028, 0.302368, 0.619155, 1.468929",\ + "0.204833, 0.271716, 0.388876, 0.705544, 1.554647",\ + "0.293319, 0.360401, 0.477846, 0.795625, 1.643707",\ + "0.440314, 0.508488, 0.625608, 0.945855, 1.792734",\ + "0.667813, 0.745674, 0.864272, 1.183300, 2.031636"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.067620, 0.183691, 0.382409, 0.935142, 2.413233",\ + "0.067620, 0.183691, 0.382409, 0.935142, 2.413233",\ + "0.068262, 0.183691, 0.382508, 0.936031, 2.413233",\ + "0.073482, 0.184226, 0.382946, 0.939859, 2.413233",\ + "0.089380, 0.196045, 0.384240, 0.939859, 2.423100"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.094521, 0.125776, 0.178422, 0.320849, 0.699535",\ + "0.188239, 0.219444, 0.272075, 0.414540, 0.793202",\ + "0.291550, 0.323577, 0.376197, 0.518700, 0.897237",\ + "0.473699, 0.510899, 0.563627, 0.705929, 1.084022",\ + "0.773733, 0.823401, 0.885774, 1.030256, 1.407808"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.039633, 0.090291, 0.180152, 0.428296, 1.092222",\ + "0.040262, 0.090291, 0.180217, 0.428296, 1.092377",\ + "0.044064, 0.091627, 0.180452, 0.428296, 1.092425",\ + "0.058805, 0.099616, 0.181075, 0.428844, 1.092425",\ + "0.086478, 0.132591, 0.204027, 0.431125, 1.092425"); + } + + } /* end of arc otp_obs_i[0]_ast2padmux_o[0]_una_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380000.312500, 380000.312500, 380000.343750, 380000.406250, 380000.593750",\ + "380000.406250, 380000.406250, 380000.437500, 380000.500000, 380000.687500",\ + "380000.500000, 380000.500000, 380000.531250, 380000.593750, 380000.781250",\ + "380000.656250, 380000.656250, 380000.687500, 380000.750000, 380000.937500",\ + "380000.906250, 380000.906250, 380000.937500, 380001.000000, 380001.187500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.040752, 0.090609, 0.180697, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180697, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180697, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180697, 0.429275, 1.092497",\ + "0.040752, 0.090609, 0.180697, 0.429275, 1.092497"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380001.781250, 380001.843750, 380001.968750, 380002.281250, 380003.156250",\ + "380001.875000, 380001.937500, 380002.062500, 380002.375000, 380003.250000",\ + "380002.000000, 380002.062500, 380002.187500, 380002.500000, 380003.375000",\ + "380002.187500, 380002.250000, 380002.375000, 380002.687500, 380003.562500",\ + "380002.500000, 380002.562500, 380002.687500, 380003.000000, 380003.875000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.073650, 0.189304, 0.392450, 0.950561, 2.441537",\ + "0.073650, 0.189304, 0.392450, 0.950561, 2.441537",\ + "0.073650, 0.189304, 0.392450, 0.950561, 2.441537",\ + "0.073650, 0.189304, 0.392450, 0.950561, 2.441537",\ + "0.073650, 0.189304, 0.392450, 0.950561, 2.441537"); + } + + } /* end of arc padmux2ast_i[4]_ast2padmux_o[0]_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380000.312500, 380000.312500, 380000.343750, 380000.406250, 380000.593750",\ + "380000.406250, 380000.406250, 380000.437500, 380000.500000, 380000.687500",\ + "380000.468750, 380000.468750, 380000.500000, 380000.562500, 380000.750000",\ + "380000.625000, 380000.625000, 380000.656250, 380000.718750, 380000.906250",\ + "380000.843750, 380000.843750, 380000.875000, 380000.937500, 380001.125000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967",\ + "0.015905, 0.041179, 0.085652, 0.207740, 0.535967"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "380001.781250, 380001.812500, 380001.906250, 380002.187500, 380002.875000",\ + "380001.875000, 380001.906250, 380002.000000, 380002.281250, 380002.968750",\ + "380001.968750, 380002.000000, 380002.093750, 380002.375000, 380003.062500",\ + "380002.156250, 380002.187500, 380002.281250, 380002.562500, 380003.250000",\ + "380002.406250, 380002.437500, 380002.531250, 380002.812500, 380003.500000"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.001393, 0.003837, 0.010569, 0.028584"); + values ( "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169",\ + "0.055484, 0.149920, 0.315966, 0.772511, 1.992169"); + } + + } /* end of arc padmux2ast_i[4]_ast2padmux_o[0]_inv_min*/ + +} /* end of pin ast2padmux_o[0] */ +} /* end of bus ast2padmux_o */ + +pin("ast2pad_t0_ao") { + direction : output ; + max_transition : 5.000000 ; + min_transition : 0.000000 ; + max_capacitance : 0.340000 ; + min_capacitance : 0.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : ast2pad_t0_ao; +} /* end of pin ast2pad_t0_ao */ + +pin("ast2pad_t1_ao") { + direction : output ; + max_transition : 5.000000 ; + min_transition : 0.000000 ; + max_capacitance : 64.000000 ; + min_capacitance : 0.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : ast2pad_t1_ao; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 8.000000, 16.000000, 32.000000, 64.000000"); + values ( "380005.937500, 380010.968750, 380015.437500, 380024.343750, 380042.031250",\ + "380006.031250, 380011.062500, 380015.531250, 380024.437500, 380042.125000",\ + "380006.125000, 380011.156250, 380015.625000, 380024.531250, 380042.218750",\ + "380006.187500, 380011.218750, 380015.687500, 380024.593750, 380042.281250",\ + "380006.531250, 380011.562500, 380016.031250, 380024.937500, 380042.625000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 8.000000, 16.000000, 32.000000, 64.000000"); + values ( "0.131672, 1.724206, 3.350886, 6.646091, 13.236232",\ + "0.131672, 1.724206, 3.350886, 6.646091, 13.236232",\ + "0.131672, 1.724206, 3.350886, 6.646091, 13.236232",\ + "0.131672, 1.724206, 3.350886, 6.646091, 13.236232",\ + "0.131672, 1.724206, 3.350886, 6.646091, 13.236232"); + } + + } /* end of arc clk_ast_tlul_i_ast2pad_t1_ao_redgf*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 8.000000, 16.000000, 32.000000, 64.000000"); + values ( "3.958968, 8.968638, 13.431835, 22.333540, 40.062149",\ + "4.046352, 9.056024, 13.519220, 22.420925, 40.149536",\ + "4.127131, 9.136803, 13.599998, 22.501705, 40.230312",\ + "4.184652, 9.194324, 13.657520, 22.559225, 40.287834",\ + "4.486489, 9.496161, 13.959356, 22.861061, 40.589668"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000000, 8.000000, 16.000000, 32.000000, 64.000000"); + values ( "0.000000, 0.000000, 0.000000, 0.000000, 0.000000",\ + "0.000000, 0.000000, 0.000000, 0.000000, 0.000000",\ + "0.000000, 0.000000, 0.000000, 0.000000, 0.000000",\ + "0.000000, 0.000000, 0.000000, 0.000000, 0.000000",\ + "0.000000, 0.000000, 0.000000, 0.000000, 0.000000"); + } + + } /* end of arc clk_ast_tlul_i_ast2pad_t1_ao_redgf_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : three_state_enable_fall ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 8.000000, 16.000000, 32.000000, 64.000000"); + values ( "380005.843750, 380010.875000, 380015.343750, 380024.250000, 380041.937500",\ + "380005.937500, 380010.968750, 380015.437500, 380024.343750, 380042.031250",\ + "380006.062500, 380011.093750, 380015.562500, 380024.468750, 380042.156250",\ + "380006.250000, 380011.281250, 380015.750000, 380024.656250, 380042.343750",\ + "380006.562500, 380011.593750, 380016.062500, 380024.968750, 380042.656250"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 8.000000, 16.000000, 32.000000, 64.000000"); + values ( "0.131672, 1.724206, 3.350886, 6.646091, 13.236232",\ + "0.131672, 1.724206, 3.350886, 6.646091, 13.236232",\ + "0.131672, 1.724206, 3.350886, 6.646091, 13.236232",\ + "0.131672, 1.724206, 3.350886, 6.646091, 13.236232",\ + "0.131672, 1.724206, 3.350886, 6.646091, 13.236232"); + } + + } /* end of arc padmux2ast_i[4]_ast2pad_t1_ao_enlf*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : three_state_enable_fall ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 8.000000, 16.000000, 32.000000, 64.000000"); + values ( "380005.843750, 380010.875000, 380015.343750, 380024.250000, 380041.937500",\ + "380005.937500, 380010.968750, 380015.437500, 380024.343750, 380042.031250",\ + "380006.031250, 380011.062500, 380015.531250, 380024.437500, 380042.125000",\ + "380006.218750, 380011.250000, 380015.718750, 380024.625000, 380042.312500",\ + "380006.468750, 380011.500000, 380015.968750, 380024.875000, 380042.562500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 8.000000, 16.000000, 32.000000, 64.000000"); + values ( "0.000000, 0.000000, 0.000000, 0.000000, 0.000000",\ + "0.000000, 0.000000, 0.000000, 0.000000, 0.000000",\ + "0.000000, 0.000000, 0.000000, 0.000000, 0.000000",\ + "0.000000, 0.000000, 0.000000, 0.000000, 0.000000",\ + "0.000000, 0.000000, 0.000000, 0.000000, 0.000000"); + } + + } /* end of arc padmux2ast_i[4]_ast2pad_t1_ao_enlf_min*/ + +} /* end of pin ast2pad_t1_ao */ +bus ( ext_freq_is_96m_i ) { + + bus_type : BUS4_type6 ; + direction : input ; + +pin("ext_freq_is_96m_i[3]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000648 ; + + /* Other user defined attributes. */ + original_pin : ext_freq_is_96m_i[3]; +} /* end of pin ext_freq_is_96m_i[3] */ + +pin("ext_freq_is_96m_i[2]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001189 ; + + /* Other user defined attributes. */ + original_pin : ext_freq_is_96m_i[2]; +} /* end of pin ext_freq_is_96m_i[2] */ + +pin("ext_freq_is_96m_i[1]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001189 ; + + /* Other user defined attributes. */ + original_pin : ext_freq_is_96m_i[1]; +} /* end of pin ext_freq_is_96m_i[1] */ + +pin("ext_freq_is_96m_i[0]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000648 ; + + /* Other user defined attributes. */ + original_pin : ext_freq_is_96m_i[0]; +} /* end of pin ext_freq_is_96m_i[0] */ +} /* end of bus ext_freq_is_96m_i */ +bus ( all_clk_byp_req_i ) { + + bus_type : BUS4_type6 ; + direction : input ; + +pin("all_clk_byp_req_i[3]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000648 ; + + /* Other user defined attributes. */ + original_pin : all_clk_byp_req_i[3]; +} /* end of pin all_clk_byp_req_i[3] */ + +pin("all_clk_byp_req_i[2]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001189 ; + + /* Other user defined attributes. */ + original_pin : all_clk_byp_req_i[2]; +} /* end of pin all_clk_byp_req_i[2] */ + +pin("all_clk_byp_req_i[1]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001189 ; + + /* Other user defined attributes. */ + original_pin : all_clk_byp_req_i[1]; +} /* end of pin all_clk_byp_req_i[1] */ + +pin("all_clk_byp_req_i[0]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000648 ; + + /* Other user defined attributes. */ + original_pin : all_clk_byp_req_i[0]; +} /* end of pin all_clk_byp_req_i[0] */ +} /* end of bus all_clk_byp_req_i */ +bus ( all_clk_byp_ack_o ) { + + bus_type : BUS4_type6 ; + direction : output ; + +pin("all_clk_byp_ack_o[3]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.161713 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : all_clk_byp_ack_o[3]; + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.100843, 0.266735, 0.427088, 0.747616, 1.388635",\ + "0.184687, 0.350464, 0.510809, 0.831717, 1.473578",\ + "0.260267, 0.426010, 0.586434, 0.907636, 1.550114",\ + "0.386507, 0.552662, 0.713534, 1.034573, 1.676504",\ + "0.580400, 0.747044, 0.907773, 1.228098, 1.868510"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015579, 0.316961, 0.624670, 1.238691, 2.466601",\ + "0.015665, 0.316961, 0.624670, 1.238691, 2.466601",\ + "0.015665, 0.317088, 0.625771, 1.239746, 2.466601",\ + "0.015838, 0.317088, 0.625771, 1.239746, 2.466601",\ + "0.016716, 0.317340, 0.625771, 1.239746, 2.466601"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.088041, 0.202376, 0.303813, 0.506089, 0.910516",\ + "0.168483, 0.282824, 0.383745, 0.585711, 0.989669",\ + "0.247358, 0.362640, 0.463376, 0.664815, 1.067688",\ + "0.380658, 0.500049, 0.601022, 0.802517, 1.205414",\ + "0.586485, 0.719001, 0.819955, 1.021830, 1.425575"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015700, 0.193950, 0.379890, 0.747742, 1.482887",\ + "0.016044, 0.193950, 0.379890, 0.747742, 1.485202",\ + "0.017520, 0.193950, 0.379890, 0.747742, 1.485202",\ + "0.022344, 0.194037, 0.379890, 0.747742, 1.485202",\ + "0.034639, 0.196727, 0.379890, 0.748439, 1.491839"); + } + + } /* end of arc clk_ast_ext_i_all_clk_byp_ack_o[3]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.100718, 0.266618, 0.426903, 0.747412, 1.388420",\ + "0.184686, 0.350463, 0.510806, 0.831715, 1.473578",\ + "0.260208, 0.425985, 0.586426, 0.907607, 1.550030",\ + "0.386259, 0.552119, 0.712336, 1.032993, 1.674352",\ + "0.580173, 0.746795, 0.907585, 1.227594, 1.867283"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015496, 0.316821, 0.622606, 1.236473, 2.462725",\ + "0.015496, 0.316821, 0.622606, 1.236473, 2.462725",\ + "0.015496, 0.316929, 0.622606, 1.236473, 2.462725",\ + "0.015814, 0.316929, 0.622606, 1.236473, 2.462725",\ + "0.016700, 0.316929, 0.623370, 1.236473, 2.462725"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.087868, 0.202376, 0.303809, 0.506029, 0.910334",\ + "0.168483, 0.282824, 0.383745, 0.585711, 0.989669",\ + "0.247358, 0.362640, 0.463376, 0.664779, 1.067573",\ + "0.380658, 0.500049, 0.601022, 0.802517, 1.205414",\ + "0.586485, 0.718955, 0.819794, 1.021516, 1.424967"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015619, 0.192979, 0.376641, 0.744531, 1.480142",\ + "0.016032, 0.192979, 0.376641, 0.744531, 1.480142",\ + "0.017339, 0.192979, 0.376641, 0.744531, 1.480142",\ + "0.022190, 0.193551, 0.376842, 0.744531, 1.480142",\ + "0.033893, 0.196557, 0.377640, 0.746288, 1.484937"); + } + + } /* end of arc clk_ast_ext_i_all_clk_byp_ack_o[3]_redg_min*/ + + timing () { + related_pin : "clk_src_io_o" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.103995, 0.269872, 0.430200, 0.750758, 1.391853",\ + "0.158337, 0.324154, 0.484388, 0.804979, 1.446186",\ + "0.282603, 0.448419, 0.608923, 0.930096, 1.572477",\ + "0.334665, 0.500651, 0.661339, 0.982445, 1.624600",\ + "0.580400, 0.747044, 0.907773, 1.228098, 1.868510"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015542, 0.317035, 0.624600, 1.238588, 2.466325",\ + "0.015645, 0.317035, 0.624600, 1.238588, 2.466325",\ + "0.015645, 0.317066, 0.625211, 1.239292, 2.466325",\ + "0.015655, 0.317066, 0.625211, 1.239292, 2.466325",\ + "0.016716, 0.317340, 0.625211, 1.239292, 2.466325"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.090477, 0.204718, 0.305888, 0.507773, 0.911447",\ + "0.141442, 0.255688, 0.356617, 0.558511, 0.962305",\ + "0.270943, 0.386953, 0.487730, 0.689180, 1.092056",\ + "0.325917, 0.443620, 0.544496, 0.745968, 1.148855",\ + "0.586485, 0.719001, 0.819955, 1.021830, 1.425575"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015734, 0.193610, 0.378735, 0.747021, 1.483183",\ + "0.015916, 0.193610, 0.378735, 0.747293, 1.484513",\ + "0.018374, 0.193610, 0.378735, 0.747293, 1.484513",\ + "0.020363, 0.193614, 0.378735, 0.747293, 1.484513",\ + "0.034639, 0.196727, 0.378735, 0.748439, 1.491839"); + } + + } /* end of arc clk_src_io_o_all_clk_byp_ack_o[3]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_src_io_o" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.103875, 0.269735, 0.430056, 0.750620, 1.391729",\ + "0.158336, 0.324133, 0.484382, 0.804893, 1.445917",\ + "0.282510, 0.448302, 0.608704, 0.929792, 1.572026",\ + "0.333572, 0.499397, 0.659708, 0.980584, 1.622387",\ + "0.580173, 0.746795, 0.907585, 1.227594, 1.867283"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015480, 0.316838, 0.623370, 1.236473, 2.462725",\ + "0.015480, 0.316838, 0.623370, 1.236473, 2.462725",\ + "0.015480, 0.316929, 0.623370, 1.236473, 2.462725",\ + "0.015652, 0.316929, 0.623370, 1.236473, 2.462725",\ + "0.016700, 0.316929, 0.623370, 1.236473, 2.462725"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.090378, 0.204717, 0.305882, 0.507735, 0.911343",\ + "0.141442, 0.255688, 0.356617, 0.558510, 0.962304",\ + "0.270943, 0.386953, 0.487730, 0.689150, 1.091961",\ + "0.324941, 0.442615, 0.543488, 0.744945, 1.147798",\ + "0.586485, 0.718955, 0.819794, 1.021516, 1.424967"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015687, 0.193080, 0.376676, 0.744928, 1.481536",\ + "0.015912, 0.193080, 0.376676, 0.744928, 1.481536",\ + "0.018197, 0.193080, 0.376676, 0.744928, 1.481536",\ + "0.020162, 0.193312, 0.376758, 0.744928, 1.481536",\ + "0.033893, 0.196557, 0.377640, 0.746288, 1.484937"); + } + + } /* end of arc clk_src_io_o_all_clk_byp_ack_o[3]_redg_min*/ + +} /* end of pin all_clk_byp_ack_o[3] */ + +pin("all_clk_byp_ack_o[2]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.158177 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : all_clk_byp_ack_o[2]; + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.055481, 0.185725, 0.392886, 0.714270, 1.356390",\ + "0.142013, 0.273097, 0.480288, 0.802449, 1.446276",\ + "0.227644, 0.367997, 0.574907, 0.896875, 1.540369",\ + "0.372058, 0.538899, 0.745297, 1.066605, 1.708810",\ + "0.601931, 0.834236, 1.042645, 1.363437, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.021797, 0.238359, 0.631876, 1.247087, 2.477274",\ + "0.025516, 0.238359, 0.631876, 1.247087, 2.477274",\ + "0.039138, 0.240277, 0.631876, 1.247087, 2.477473",\ + "0.067159, 0.248694, 0.631876, 1.247087, 2.479640",\ + "0.123088, 0.289704, 0.642858, 1.251241, 2.479640"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.082179, 0.183018, 0.316461, 0.522191, 0.932963",\ + "0.170164, 0.270956, 0.404436, 0.610175, 1.020954",\ + "0.251445, 0.351944, 0.485256, 0.690977, 1.101771",\ + "0.388999, 0.491163, 0.624361, 0.829801, 1.240010",\ + "0.607343, 0.718683, 0.852150, 1.057410, 1.467133"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.025565, 0.151628, 0.387851, 0.763293, 1.515348",\ + "0.025565, 0.151804, 0.389259, 0.763293, 1.515348",\ + "0.025976, 0.151804, 0.389479, 0.764390, 1.515348",\ + "0.029120, 0.151804, 0.389479, 0.764390, 1.515348",\ + "0.041734, 0.154598, 0.389479, 0.764390, 1.515348"); + } + + } /* end of arc clk_ast_ext_i_all_clk_byp_ack_o[2]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.055478, 0.185724, 0.392885, 0.714263, 1.356368",\ + "0.141644, 0.273073, 0.480017, 0.801359, 1.443459",\ + "0.227644, 0.367995, 0.574890, 0.896861, 1.540369",\ + "0.372055, 0.538895, 0.745296, 1.066605, 1.708810",\ + "0.601899, 0.834203, 1.042596, 1.363402, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.021795, 0.238265, 0.630524, 1.245754, 2.477107",\ + "0.025501, 0.238265, 0.630524, 1.245754, 2.477170",\ + "0.039138, 0.240263, 0.630524, 1.245754, 2.477473",\ + "0.067158, 0.248694, 0.630752, 1.245754, 2.478674",\ + "0.122913, 0.289395, 0.639350, 1.248196, 2.478674"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.082179, 0.183018, 0.316461, 0.522190, 0.932959",\ + "0.170151, 0.270913, 0.404355, 0.610080, 1.020840",\ + "0.251186, 0.351686, 0.484981, 0.690703, 1.101507",\ + "0.388979, 0.491150, 0.624343, 0.829707, 1.239752",\ + "0.607308, 0.718634, 0.852099, 1.057372, 1.467127"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.025557, 0.151128, 0.387354, 0.761934, 1.510661",\ + "0.025557, 0.151128, 0.387354, 0.761934, 1.510661",\ + "0.025965, 0.151128, 0.387354, 0.761934, 1.511090",\ + "0.029101, 0.151585, 0.387354, 0.761934, 1.511090",\ + "0.041668, 0.154530, 0.388178, 0.761934, 1.511090"); + } + + } /* end of arc clk_ast_ext_i_all_clk_byp_ack_o[2]_redg_min*/ + + timing () { + related_pin : "clk_src_io_o" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.058414, 0.188667, 0.395813, 0.717110, 1.359045",\ + "0.112550, 0.243041, 0.450135, 0.772138, 1.415649",\ + "0.253196, 0.398235, 0.605055, 0.926906, 1.570171",\ + "0.312752, 0.468715, 0.675324, 0.996903, 1.639637",\ + "0.601931, 0.834236, 1.042645, 1.363437, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.021790, 0.238360, 0.631894, 1.247121, 2.477336",\ + "0.023317, 0.238360, 0.631894, 1.247121, 2.477336",\ + "0.044096, 0.241766, 0.631894, 1.247121, 2.477920",\ + "0.055652, 0.245238, 0.631894, 1.247121, 2.478962",\ + "0.123088, 0.289704, 0.642858, 1.251241, 2.479640"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.085404, 0.186224, 0.319679, 0.525413, 0.936188",\ + "0.141978, 0.242754, 0.376239, 0.581985, 0.992777",\ + "0.275783, 0.376576, 0.509868, 0.715539, 1.126231",\ + "0.332511, 0.433991, 0.567236, 0.772791, 1.183241",\ + "0.607343, 0.718683, 0.852150, 1.057410, 1.467133"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.025646, 0.151693, 0.388430, 0.763132, 1.513362",\ + "0.025646, 0.151849, 0.389568, 0.763815, 1.513362",\ + "0.026529, 0.151849, 0.389568, 0.764056, 1.513362",\ + "0.027825, 0.151849, 0.389568, 0.764056, 1.513362",\ + "0.041734, 0.154598, 0.389568, 0.764056, 1.513362"); + } + + } /* end of arc clk_src_io_o_all_clk_byp_ack_o[2]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_src_io_o" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.058410, 0.188665, 0.395812, 0.717100, 1.359014",\ + "0.112399, 0.243028, 0.450025, 0.771635, 1.414310",\ + "0.253195, 0.398233, 0.605040, 0.926895, 1.570171",\ + "0.311693, 0.467461, 0.674069, 0.995655, 1.638404",\ + "0.601899, 0.834203, 1.042596, 1.363402, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.021782, 0.238225, 0.630549, 1.245808, 2.476689",\ + "0.023311, 0.238225, 0.630549, 1.245808, 2.476689",\ + "0.044096, 0.241755, 0.630564, 1.245808, 2.477789",\ + "0.055446, 0.245170, 0.630656, 1.245808, 2.478512",\ + "0.122913, 0.289395, 0.639350, 1.248196, 2.478674"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.085404, 0.186224, 0.319679, 0.525413, 0.936188",\ + "0.141970, 0.242733, 0.376196, 0.581868, 0.992503",\ + "0.275567, 0.376362, 0.509639, 0.715298, 1.125968",\ + "0.331384, 0.432856, 0.566092, 0.771606, 1.181968",\ + "0.607308, 0.718634, 0.852099, 1.057372, 1.467127"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.025646, 0.151208, 0.387784, 0.761934, 1.511090",\ + "0.025646, 0.151208, 0.387784, 0.761934, 1.511090",\ + "0.026523, 0.151208, 0.387784, 0.761934, 1.511090",\ + "0.027795, 0.151394, 0.387784, 0.761934, 1.511090",\ + "0.041668, 0.154530, 0.388178, 0.761934, 1.511090"); + } + + } /* end of arc clk_src_io_o_all_clk_byp_ack_o[2]_redg_min*/ + +} /* end of pin all_clk_byp_ack_o[2] */ + +pin("all_clk_byp_ack_o[1]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.158177 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : all_clk_byp_ack_o[1]; + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.055481, 0.185725, 0.392886, 0.714270, 1.356390",\ + "0.142013, 0.273097, 0.480288, 0.802449, 1.446276",\ + "0.227644, 0.367997, 0.574907, 0.896875, 1.540369",\ + "0.372058, 0.538899, 0.745297, 1.066605, 1.708810",\ + "0.601931, 0.834236, 1.042645, 1.363437, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.021797, 0.238359, 0.631876, 1.247087, 2.477274",\ + "0.025516, 0.238359, 0.631876, 1.247087, 2.477274",\ + "0.039138, 0.240277, 0.631876, 1.247087, 2.477473",\ + "0.067159, 0.248694, 0.631876, 1.247087, 2.479640",\ + "0.123088, 0.289704, 0.642858, 1.251241, 2.479640"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.082179, 0.183018, 0.316461, 0.522191, 0.932963",\ + "0.170164, 0.270956, 0.404436, 0.610175, 1.020954",\ + "0.251445, 0.351944, 0.485256, 0.690977, 1.101771",\ + "0.388999, 0.491163, 0.624361, 0.829801, 1.240010",\ + "0.607343, 0.718683, 0.852150, 1.057410, 1.467133"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.025565, 0.151628, 0.387851, 0.763293, 1.515348",\ + "0.025565, 0.151804, 0.389259, 0.763293, 1.515348",\ + "0.025976, 0.151804, 0.389479, 0.764390, 1.515348",\ + "0.029120, 0.151804, 0.389479, 0.764390, 1.515348",\ + "0.041734, 0.154598, 0.389479, 0.764390, 1.515348"); + } + + } /* end of arc clk_ast_ext_i_all_clk_byp_ack_o[1]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.055478, 0.185724, 0.392885, 0.714263, 1.356368",\ + "0.141644, 0.273073, 0.480017, 0.801359, 1.443459",\ + "0.227644, 0.367995, 0.574890, 0.896861, 1.540369",\ + "0.372055, 0.538895, 0.745296, 1.066605, 1.708810",\ + "0.601899, 0.834203, 1.042596, 1.363402, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.021795, 0.238265, 0.630524, 1.245754, 2.477107",\ + "0.025501, 0.238265, 0.630524, 1.245754, 2.477170",\ + "0.039138, 0.240263, 0.630524, 1.245754, 2.477473",\ + "0.067158, 0.248694, 0.630752, 1.245754, 2.478674",\ + "0.122913, 0.289395, 0.639350, 1.248196, 2.478674"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.082179, 0.183018, 0.316461, 0.522190, 0.932959",\ + "0.170151, 0.270913, 0.404355, 0.610080, 1.020840",\ + "0.251186, 0.351686, 0.484981, 0.690703, 1.101507",\ + "0.388979, 0.491150, 0.624343, 0.829707, 1.239752",\ + "0.607308, 0.718634, 0.852099, 1.057372, 1.467127"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.025557, 0.151128, 0.387354, 0.761934, 1.510661",\ + "0.025557, 0.151128, 0.387354, 0.761934, 1.510661",\ + "0.025965, 0.151128, 0.387354, 0.761934, 1.511090",\ + "0.029101, 0.151585, 0.387354, 0.761934, 1.511090",\ + "0.041668, 0.154530, 0.388178, 0.761934, 1.511090"); + } + + } /* end of arc clk_ast_ext_i_all_clk_byp_ack_o[1]_redg_min*/ + + timing () { + related_pin : "clk_src_io_o" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.058414, 0.188667, 0.395813, 0.717110, 1.359045",\ + "0.112550, 0.243041, 0.450135, 0.772138, 1.415649",\ + "0.253196, 0.398235, 0.605055, 0.926906, 1.570171",\ + "0.312752, 0.468715, 0.675324, 0.996903, 1.639637",\ + "0.601931, 0.834236, 1.042645, 1.363437, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.021790, 0.238360, 0.631894, 1.247121, 2.477336",\ + "0.023317, 0.238360, 0.631894, 1.247121, 2.477336",\ + "0.044096, 0.241766, 0.631894, 1.247121, 2.477920",\ + "0.055652, 0.245238, 0.631894, 1.247121, 2.478962",\ + "0.123088, 0.289704, 0.642858, 1.251241, 2.479640"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.085404, 0.186224, 0.319679, 0.525413, 0.936188",\ + "0.141978, 0.242754, 0.376239, 0.581985, 0.992777",\ + "0.275783, 0.376576, 0.509868, 0.715539, 1.126231",\ + "0.332511, 0.433991, 0.567236, 0.772791, 1.183241",\ + "0.607343, 0.718683, 0.852150, 1.057410, 1.467133"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.025646, 0.151693, 0.388430, 0.763132, 1.513362",\ + "0.025646, 0.151849, 0.389568, 0.763815, 1.513362",\ + "0.026529, 0.151849, 0.389568, 0.764056, 1.513362",\ + "0.027825, 0.151849, 0.389568, 0.764056, 1.513362",\ + "0.041734, 0.154598, 0.389568, 0.764056, 1.513362"); + } + + } /* end of arc clk_src_io_o_all_clk_byp_ack_o[1]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_src_io_o" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.058410, 0.188665, 0.395812, 0.717100, 1.359014",\ + "0.112399, 0.243028, 0.450025, 0.771635, 1.414310",\ + "0.253195, 0.398233, 0.605040, 0.926895, 1.570171",\ + "0.311693, 0.467461, 0.674069, 0.995655, 1.638404",\ + "0.601899, 0.834203, 1.042596, 1.363402, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.021782, 0.238225, 0.630549, 1.245808, 2.476689",\ + "0.023311, 0.238225, 0.630549, 1.245808, 2.476689",\ + "0.044096, 0.241755, 0.630564, 1.245808, 2.477789",\ + "0.055446, 0.245170, 0.630656, 1.245808, 2.478512",\ + "0.122913, 0.289395, 0.639350, 1.248196, 2.478674"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.085404, 0.186224, 0.319679, 0.525413, 0.936188",\ + "0.141970, 0.242733, 0.376196, 0.581868, 0.992503",\ + "0.275567, 0.376362, 0.509639, 0.715298, 1.125968",\ + "0.331384, 0.432856, 0.566092, 0.771606, 1.181968",\ + "0.607308, 0.718634, 0.852099, 1.057372, 1.467127"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.025646, 0.151208, 0.387784, 0.761934, 1.511090",\ + "0.025646, 0.151208, 0.387784, 0.761934, 1.511090",\ + "0.026523, 0.151208, 0.387784, 0.761934, 1.511090",\ + "0.027795, 0.151394, 0.387784, 0.761934, 1.511090",\ + "0.041668, 0.154530, 0.388178, 0.761934, 1.511090"); + } + + } /* end of arc clk_src_io_o_all_clk_byp_ack_o[1]_redg_min*/ + +} /* end of pin all_clk_byp_ack_o[1] */ + +pin("all_clk_byp_ack_o[0]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.161713 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : all_clk_byp_ack_o[0]; + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.100843, 0.266735, 0.427088, 0.747616, 1.388635",\ + "0.184687, 0.350464, 0.510809, 0.831717, 1.473578",\ + "0.260267, 0.426010, 0.586434, 0.907636, 1.550114",\ + "0.386507, 0.552662, 0.713534, 1.034573, 1.676504",\ + "0.580400, 0.747044, 0.907773, 1.228098, 1.868510"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015579, 0.316961, 0.624670, 1.238691, 2.466601",\ + "0.015665, 0.316961, 0.624670, 1.238691, 2.466601",\ + "0.015665, 0.317088, 0.625771, 1.239746, 2.466601",\ + "0.015838, 0.317088, 0.625771, 1.239746, 2.466601",\ + "0.016716, 0.317340, 0.625771, 1.239746, 2.466601"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.088041, 0.202376, 0.303813, 0.506089, 0.910516",\ + "0.168483, 0.282824, 0.383745, 0.585711, 0.989669",\ + "0.247358, 0.362640, 0.463376, 0.664815, 1.067688",\ + "0.380658, 0.500049, 0.601022, 0.802517, 1.205414",\ + "0.586485, 0.719001, 0.819955, 1.021830, 1.425575"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015700, 0.193950, 0.379890, 0.747742, 1.482887",\ + "0.016044, 0.193950, 0.379890, 0.747742, 1.485202",\ + "0.017520, 0.193950, 0.379890, 0.747742, 1.485202",\ + "0.022344, 0.194037, 0.379890, 0.747742, 1.485202",\ + "0.034639, 0.196727, 0.379890, 0.748439, 1.491839"); + } + + } /* end of arc clk_ast_ext_i_all_clk_byp_ack_o[0]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.100718, 0.266618, 0.426903, 0.747412, 1.388420",\ + "0.184686, 0.350463, 0.510806, 0.831715, 1.473578",\ + "0.260208, 0.425985, 0.586426, 0.907607, 1.550030",\ + "0.386259, 0.552119, 0.712336, 1.032993, 1.674352",\ + "0.580173, 0.746795, 0.907585, 1.227594, 1.867283"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015496, 0.316821, 0.622606, 1.236473, 2.462725",\ + "0.015496, 0.316821, 0.622606, 1.236473, 2.462725",\ + "0.015496, 0.316929, 0.622606, 1.236473, 2.462725",\ + "0.015814, 0.316929, 0.622606, 1.236473, 2.462725",\ + "0.016700, 0.316929, 0.623370, 1.236473, 2.462725"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.087868, 0.202376, 0.303809, 0.506029, 0.910334",\ + "0.168483, 0.282824, 0.383745, 0.585711, 0.989669",\ + "0.247358, 0.362640, 0.463376, 0.664779, 1.067573",\ + "0.380658, 0.500049, 0.601022, 0.802517, 1.205414",\ + "0.586485, 0.718955, 0.819794, 1.021516, 1.424967"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015619, 0.192979, 0.376641, 0.744531, 1.480142",\ + "0.016032, 0.192979, 0.376641, 0.744531, 1.480142",\ + "0.017339, 0.192979, 0.376641, 0.744531, 1.480142",\ + "0.022190, 0.193551, 0.376842, 0.744531, 1.480142",\ + "0.033893, 0.196557, 0.377640, 0.746288, 1.484937"); + } + + } /* end of arc clk_ast_ext_i_all_clk_byp_ack_o[0]_redg_min*/ + + timing () { + related_pin : "clk_src_io_o" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.103995, 0.269872, 0.430200, 0.750758, 1.391853",\ + "0.158337, 0.324154, 0.484388, 0.804979, 1.446186",\ + "0.282603, 0.448419, 0.608923, 0.930096, 1.572477",\ + "0.334665, 0.500651, 0.661339, 0.982445, 1.624600",\ + "0.580400, 0.747044, 0.907773, 1.228098, 1.868510"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015542, 0.317035, 0.624600, 1.238588, 2.466325",\ + "0.015645, 0.317035, 0.624600, 1.238588, 2.466325",\ + "0.015645, 0.317066, 0.625211, 1.239292, 2.466325",\ + "0.015655, 0.317066, 0.625211, 1.239292, 2.466325",\ + "0.016716, 0.317340, 0.625211, 1.239292, 2.466325"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.090477, 0.204718, 0.305888, 0.507773, 0.911447",\ + "0.141442, 0.255688, 0.356617, 0.558511, 0.962305",\ + "0.270943, 0.386953, 0.487730, 0.689180, 1.092056",\ + "0.325917, 0.443620, 0.544496, 0.745968, 1.148855",\ + "0.586485, 0.719001, 0.819955, 1.021830, 1.425575"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015734, 0.193610, 0.378735, 0.747021, 1.483183",\ + "0.015916, 0.193610, 0.378735, 0.747293, 1.484513",\ + "0.018374, 0.193610, 0.378735, 0.747293, 1.484513",\ + "0.020363, 0.193614, 0.378735, 0.747293, 1.484513",\ + "0.034639, 0.196727, 0.378735, 0.748439, 1.491839"); + } + + } /* end of arc clk_src_io_o_all_clk_byp_ack_o[0]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_src_io_o" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.103875, 0.269735, 0.430056, 0.750620, 1.391729",\ + "0.158336, 0.324133, 0.484382, 0.804893, 1.445917",\ + "0.282510, 0.448302, 0.608704, 0.929792, 1.572026",\ + "0.333572, 0.499397, 0.659708, 0.980584, 1.622387",\ + "0.580173, 0.746795, 0.907585, 1.227594, 1.867283"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015480, 0.316838, 0.623370, 1.236473, 2.462725",\ + "0.015480, 0.316838, 0.623370, 1.236473, 2.462725",\ + "0.015480, 0.316929, 0.623370, 1.236473, 2.462725",\ + "0.015652, 0.316929, 0.623370, 1.236473, 2.462725",\ + "0.016700, 0.316929, 0.623370, 1.236473, 2.462725"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.090378, 0.204717, 0.305882, 0.507735, 0.911343",\ + "0.141442, 0.255688, 0.356617, 0.558510, 0.962304",\ + "0.270943, 0.386953, 0.487730, 0.689150, 1.091961",\ + "0.324941, 0.442615, 0.543488, 0.744945, 1.147798",\ + "0.586485, 0.718955, 0.819794, 1.021516, 1.424967"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015687, 0.193080, 0.376676, 0.744928, 1.481536",\ + "0.015912, 0.193080, 0.376676, 0.744928, 1.481536",\ + "0.018197, 0.193080, 0.376676, 0.744928, 1.481536",\ + "0.020162, 0.193312, 0.376758, 0.744928, 1.481536",\ + "0.033893, 0.196557, 0.377640, 0.746288, 1.484937"); + } + + } /* end of arc clk_src_io_o_all_clk_byp_ack_o[0]_redg_min*/ + +} /* end of pin all_clk_byp_ack_o[0] */ +} /* end of bus all_clk_byp_ack_o */ +bus ( io_clk_byp_req_i ) { + + bus_type : BUS4_type6 ; + direction : input ; + +pin("io_clk_byp_req_i[3]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000648 ; + + /* Other user defined attributes. */ + original_pin : io_clk_byp_req_i[3]; +} /* end of pin io_clk_byp_req_i[3] */ + +pin("io_clk_byp_req_i[2]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001189 ; + + /* Other user defined attributes. */ + original_pin : io_clk_byp_req_i[2]; +} /* end of pin io_clk_byp_req_i[2] */ + +pin("io_clk_byp_req_i[1]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.001189 ; + + /* Other user defined attributes. */ + original_pin : io_clk_byp_req_i[1]; +} /* end of pin io_clk_byp_req_i[1] */ + +pin("io_clk_byp_req_i[0]") { + direction : input ; + max_transition : 2.480000 ; + capacitance : 0.000648 ; + + /* Other user defined attributes. */ + original_pin : io_clk_byp_req_i[0]; +} /* end of pin io_clk_byp_req_i[0] */ +} /* end of bus io_clk_byp_req_i */ +bus ( io_clk_byp_ack_o ) { + + bus_type : BUS4_type6 ; + direction : output ; + +pin("io_clk_byp_ack_o[3]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.161713 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : io_clk_byp_ack_o[3]; + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.100843, 0.266735, 0.427088, 0.747616, 1.388635",\ + "0.184687, 0.350464, 0.510809, 0.831717, 1.473578",\ + "0.260267, 0.426010, 0.586434, 0.907636, 1.550114",\ + "0.386507, 0.552662, 0.713534, 1.034573, 1.676504",\ + "0.580400, 0.747044, 0.907773, 1.228098, 1.868510"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015579, 0.316961, 0.624670, 1.238691, 2.466601",\ + "0.015665, 0.316961, 0.624670, 1.238691, 2.466601",\ + "0.015665, 0.317088, 0.625771, 1.239746, 2.466601",\ + "0.015838, 0.317088, 0.625771, 1.239746, 2.466601",\ + "0.016716, 0.317340, 0.625771, 1.239746, 2.466601"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.088041, 0.202376, 0.303813, 0.506089, 0.910516",\ + "0.168483, 0.282824, 0.383745, 0.585711, 0.989669",\ + "0.247358, 0.362640, 0.463376, 0.664815, 1.067688",\ + "0.380658, 0.500049, 0.601022, 0.802517, 1.205414",\ + "0.586485, 0.719001, 0.819955, 1.021830, 1.425575"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015700, 0.193950, 0.379890, 0.747742, 1.482887",\ + "0.016044, 0.193950, 0.379890, 0.747742, 1.485202",\ + "0.017520, 0.193950, 0.379890, 0.747742, 1.485202",\ + "0.022344, 0.194037, 0.379890, 0.747742, 1.485202",\ + "0.034639, 0.196727, 0.379890, 0.748439, 1.491839"); + } + + } /* end of arc clk_ast_ext_i_io_clk_byp_ack_o[3]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.100718, 0.266618, 0.426903, 0.747412, 1.388420",\ + "0.184686, 0.350463, 0.510806, 0.831715, 1.473578",\ + "0.260208, 0.425985, 0.586426, 0.907607, 1.550030",\ + "0.386259, 0.552119, 0.712336, 1.032993, 1.674352",\ + "0.580173, 0.746795, 0.907585, 1.227594, 1.867283"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015496, 0.316821, 0.622606, 1.236473, 2.462725",\ + "0.015496, 0.316821, 0.622606, 1.236473, 2.462725",\ + "0.015496, 0.316929, 0.622606, 1.236473, 2.462725",\ + "0.015814, 0.316929, 0.622606, 1.236473, 2.462725",\ + "0.016700, 0.316929, 0.623370, 1.236473, 2.462725"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.087868, 0.202376, 0.303809, 0.506029, 0.910334",\ + "0.168483, 0.282824, 0.383745, 0.585711, 0.989669",\ + "0.247358, 0.362640, 0.463376, 0.664779, 1.067573",\ + "0.380658, 0.500049, 0.601022, 0.802517, 1.205414",\ + "0.586485, 0.718955, 0.819794, 1.021516, 1.424967"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015619, 0.192979, 0.376641, 0.744531, 1.480142",\ + "0.016032, 0.192979, 0.376641, 0.744531, 1.480142",\ + "0.017339, 0.192979, 0.376641, 0.744531, 1.480142",\ + "0.022190, 0.193551, 0.376842, 0.744531, 1.480142",\ + "0.033893, 0.196557, 0.377640, 0.746288, 1.484937"); + } + + } /* end of arc clk_ast_ext_i_io_clk_byp_ack_o[3]_redg_min*/ + + timing () { + related_pin : "clk_src_io_o" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.103995, 0.269872, 0.430200, 0.750758, 1.391853",\ + "0.158337, 0.324154, 0.484388, 0.804979, 1.446186",\ + "0.282603, 0.448419, 0.608923, 0.930096, 1.572477",\ + "0.334665, 0.500651, 0.661339, 0.982445, 1.624600",\ + "0.580400, 0.747044, 0.907773, 1.228098, 1.868510"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015542, 0.317035, 0.624600, 1.238588, 2.466325",\ + "0.015645, 0.317035, 0.624600, 1.238588, 2.466325",\ + "0.015645, 0.317066, 0.625211, 1.239292, 2.466325",\ + "0.015655, 0.317066, 0.625211, 1.239292, 2.466325",\ + "0.016716, 0.317340, 0.625211, 1.239292, 2.466325"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.090477, 0.204718, 0.305888, 0.507773, 0.911447",\ + "0.141442, 0.255688, 0.356617, 0.558511, 0.962305",\ + "0.270943, 0.386953, 0.487730, 0.689180, 1.092056",\ + "0.325917, 0.443620, 0.544496, 0.745968, 1.148855",\ + "0.586485, 0.719001, 0.819955, 1.021830, 1.425575"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015734, 0.193610, 0.378735, 0.747021, 1.483183",\ + "0.015916, 0.193610, 0.378735, 0.747293, 1.484513",\ + "0.018374, 0.193610, 0.378735, 0.747293, 1.484513",\ + "0.020363, 0.193614, 0.378735, 0.747293, 1.484513",\ + "0.034639, 0.196727, 0.378735, 0.748439, 1.491839"); + } + + } /* end of arc clk_src_io_o_io_clk_byp_ack_o[3]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_src_io_o" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.103875, 0.269735, 0.430056, 0.750620, 1.391729",\ + "0.158336, 0.324133, 0.484382, 0.804893, 1.445917",\ + "0.282510, 0.448302, 0.608704, 0.929792, 1.572026",\ + "0.333572, 0.499397, 0.659708, 0.980584, 1.622387",\ + "0.580173, 0.746795, 0.907585, 1.227594, 1.867283"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015480, 0.316838, 0.623370, 1.236473, 2.462725",\ + "0.015480, 0.316838, 0.623370, 1.236473, 2.462725",\ + "0.015480, 0.316929, 0.623370, 1.236473, 2.462725",\ + "0.015652, 0.316929, 0.623370, 1.236473, 2.462725",\ + "0.016700, 0.316929, 0.623370, 1.236473, 2.462725"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.090378, 0.204717, 0.305882, 0.507735, 0.911343",\ + "0.141442, 0.255688, 0.356617, 0.558510, 0.962304",\ + "0.270943, 0.386953, 0.487730, 0.689150, 1.091961",\ + "0.324941, 0.442615, 0.543488, 0.744945, 1.147798",\ + "0.586485, 0.718955, 0.819794, 1.021516, 1.424967"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015687, 0.193080, 0.376676, 0.744928, 1.481536",\ + "0.015912, 0.193080, 0.376676, 0.744928, 1.481536",\ + "0.018197, 0.193080, 0.376676, 0.744928, 1.481536",\ + "0.020162, 0.193312, 0.376758, 0.744928, 1.481536",\ + "0.033893, 0.196557, 0.377640, 0.746288, 1.484937"); + } + + } /* end of arc clk_src_io_o_io_clk_byp_ack_o[3]_redg_min*/ + +} /* end of pin io_clk_byp_ack_o[3] */ + +pin("io_clk_byp_ack_o[2]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.158177 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : io_clk_byp_ack_o[2]; + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.055481, 0.185725, 0.392886, 0.714270, 1.356390",\ + "0.142013, 0.273097, 0.480288, 0.802449, 1.446276",\ + "0.227644, 0.367997, 0.574907, 0.896875, 1.540369",\ + "0.372058, 0.538899, 0.745297, 1.066605, 1.708810",\ + "0.601931, 0.834236, 1.042645, 1.363437, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.021797, 0.238359, 0.631876, 1.247087, 2.477274",\ + "0.025516, 0.238359, 0.631876, 1.247087, 2.477274",\ + "0.039138, 0.240277, 0.631876, 1.247087, 2.477473",\ + "0.067159, 0.248694, 0.631876, 1.247087, 2.479640",\ + "0.123088, 0.289704, 0.642858, 1.251241, 2.479640"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.082179, 0.183018, 0.316461, 0.522191, 0.932963",\ + "0.170164, 0.270956, 0.404436, 0.610175, 1.020954",\ + "0.251445, 0.351944, 0.485256, 0.690977, 1.101771",\ + "0.388999, 0.491163, 0.624361, 0.829801, 1.240010",\ + "0.607343, 0.718683, 0.852150, 1.057410, 1.467133"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.025565, 0.151628, 0.387851, 0.763293, 1.515348",\ + "0.025565, 0.151804, 0.389259, 0.763293, 1.515348",\ + "0.025976, 0.151804, 0.389479, 0.764390, 1.515348",\ + "0.029120, 0.151804, 0.389479, 0.764390, 1.515348",\ + "0.041734, 0.154598, 0.389479, 0.764390, 1.515348"); + } + + } /* end of arc clk_ast_ext_i_io_clk_byp_ack_o[2]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.055478, 0.185724, 0.392885, 0.714263, 1.356368",\ + "0.141644, 0.273073, 0.480017, 0.801359, 1.443459",\ + "0.227644, 0.367995, 0.574890, 0.896861, 1.540369",\ + "0.372055, 0.538895, 0.745296, 1.066605, 1.708810",\ + "0.601899, 0.834203, 1.042596, 1.363402, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.021795, 0.238265, 0.630524, 1.245754, 2.477107",\ + "0.025501, 0.238265, 0.630524, 1.245754, 2.477170",\ + "0.039138, 0.240263, 0.630524, 1.245754, 2.477473",\ + "0.067158, 0.248694, 0.630752, 1.245754, 2.478674",\ + "0.122913, 0.289395, 0.639350, 1.248196, 2.478674"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.082179, 0.183018, 0.316461, 0.522190, 0.932959",\ + "0.170151, 0.270913, 0.404355, 0.610080, 1.020840",\ + "0.251186, 0.351686, 0.484981, 0.690703, 1.101507",\ + "0.388979, 0.491150, 0.624343, 0.829707, 1.239752",\ + "0.607308, 0.718634, 0.852099, 1.057372, 1.467127"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.025557, 0.151128, 0.387354, 0.761934, 1.510661",\ + "0.025557, 0.151128, 0.387354, 0.761934, 1.510661",\ + "0.025965, 0.151128, 0.387354, 0.761934, 1.511090",\ + "0.029101, 0.151585, 0.387354, 0.761934, 1.511090",\ + "0.041668, 0.154530, 0.388178, 0.761934, 1.511090"); + } + + } /* end of arc clk_ast_ext_i_io_clk_byp_ack_o[2]_redg_min*/ + + timing () { + related_pin : "clk_src_io_o" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.058414, 0.188667, 0.395813, 0.717110, 1.359045",\ + "0.112550, 0.243041, 0.450135, 0.772138, 1.415649",\ + "0.253196, 0.398235, 0.605055, 0.926906, 1.570171",\ + "0.312752, 0.468715, 0.675324, 0.996903, 1.639637",\ + "0.601931, 0.834236, 1.042645, 1.363437, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.021790, 0.238360, 0.631894, 1.247121, 2.477336",\ + "0.023317, 0.238360, 0.631894, 1.247121, 2.477336",\ + "0.044096, 0.241766, 0.631894, 1.247121, 2.477920",\ + "0.055652, 0.245238, 0.631894, 1.247121, 2.478962",\ + "0.123088, 0.289704, 0.642858, 1.251241, 2.479640"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.085404, 0.186224, 0.319679, 0.525413, 0.936188",\ + "0.141978, 0.242754, 0.376239, 0.581985, 0.992777",\ + "0.275783, 0.376576, 0.509868, 0.715539, 1.126231",\ + "0.332511, 0.433991, 0.567236, 0.772791, 1.183241",\ + "0.607343, 0.718683, 0.852150, 1.057410, 1.467133"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.025646, 0.151693, 0.388430, 0.763132, 1.513362",\ + "0.025646, 0.151849, 0.389568, 0.763815, 1.513362",\ + "0.026529, 0.151849, 0.389568, 0.764056, 1.513362",\ + "0.027825, 0.151849, 0.389568, 0.764056, 1.513362",\ + "0.041734, 0.154598, 0.389568, 0.764056, 1.513362"); + } + + } /* end of arc clk_src_io_o_io_clk_byp_ack_o[2]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_src_io_o" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.058410, 0.188665, 0.395812, 0.717100, 1.359014",\ + "0.112399, 0.243028, 0.450025, 0.771635, 1.414310",\ + "0.253195, 0.398233, 0.605040, 0.926895, 1.570171",\ + "0.311693, 0.467461, 0.674069, 0.995655, 1.638404",\ + "0.601899, 0.834203, 1.042596, 1.363402, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.021782, 0.238225, 0.630549, 1.245808, 2.476689",\ + "0.023311, 0.238225, 0.630549, 1.245808, 2.476689",\ + "0.044096, 0.241755, 0.630564, 1.245808, 2.477789",\ + "0.055446, 0.245170, 0.630656, 1.245808, 2.478512",\ + "0.122913, 0.289395, 0.639350, 1.248196, 2.478674"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.085404, 0.186224, 0.319679, 0.525413, 0.936188",\ + "0.141970, 0.242733, 0.376196, 0.581868, 0.992503",\ + "0.275567, 0.376362, 0.509639, 0.715298, 1.125968",\ + "0.331384, 0.432856, 0.566092, 0.771606, 1.181968",\ + "0.607308, 0.718634, 0.852099, 1.057372, 1.467127"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.025646, 0.151208, 0.387784, 0.761934, 1.511090",\ + "0.025646, 0.151208, 0.387784, 0.761934, 1.511090",\ + "0.026523, 0.151208, 0.387784, 0.761934, 1.511090",\ + "0.027795, 0.151394, 0.387784, 0.761934, 1.511090",\ + "0.041668, 0.154530, 0.388178, 0.761934, 1.511090"); + } + + } /* end of arc clk_src_io_o_io_clk_byp_ack_o[2]_redg_min*/ + +} /* end of pin io_clk_byp_ack_o[2] */ + +pin("io_clk_byp_ack_o[1]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.158177 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : io_clk_byp_ack_o[1]; + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.055481, 0.185725, 0.392886, 0.714270, 1.356390",\ + "0.142013, 0.273097, 0.480288, 0.802449, 1.446276",\ + "0.227644, 0.367997, 0.574907, 0.896875, 1.540369",\ + "0.372058, 0.538899, 0.745297, 1.066605, 1.708810",\ + "0.601931, 0.834236, 1.042645, 1.363437, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.021797, 0.238359, 0.631876, 1.247087, 2.477274",\ + "0.025516, 0.238359, 0.631876, 1.247087, 2.477274",\ + "0.039138, 0.240277, 0.631876, 1.247087, 2.477473",\ + "0.067159, 0.248694, 0.631876, 1.247087, 2.479640",\ + "0.123088, 0.289704, 0.642858, 1.251241, 2.479640"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.082179, 0.183018, 0.316461, 0.522191, 0.932963",\ + "0.170164, 0.270956, 0.404436, 0.610175, 1.020954",\ + "0.251445, 0.351944, 0.485256, 0.690977, 1.101771",\ + "0.388999, 0.491163, 0.624361, 0.829801, 1.240010",\ + "0.607343, 0.718683, 0.852150, 1.057410, 1.467133"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.025565, 0.151628, 0.387851, 0.763293, 1.515348",\ + "0.025565, 0.151804, 0.389259, 0.763293, 1.515348",\ + "0.025976, 0.151804, 0.389479, 0.764390, 1.515348",\ + "0.029120, 0.151804, 0.389479, 0.764390, 1.515348",\ + "0.041734, 0.154598, 0.389479, 0.764390, 1.515348"); + } + + } /* end of arc clk_ast_ext_i_io_clk_byp_ack_o[1]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.055478, 0.185724, 0.392885, 0.714263, 1.356368",\ + "0.141644, 0.273073, 0.480017, 0.801359, 1.443459",\ + "0.227644, 0.367995, 0.574890, 0.896861, 1.540369",\ + "0.372055, 0.538895, 0.745296, 1.066605, 1.708810",\ + "0.601899, 0.834203, 1.042596, 1.363402, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.021795, 0.238265, 0.630524, 1.245754, 2.477107",\ + "0.025501, 0.238265, 0.630524, 1.245754, 2.477170",\ + "0.039138, 0.240263, 0.630524, 1.245754, 2.477473",\ + "0.067158, 0.248694, 0.630752, 1.245754, 2.478674",\ + "0.122913, 0.289395, 0.639350, 1.248196, 2.478674"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.082179, 0.183018, 0.316461, 0.522190, 0.932959",\ + "0.170151, 0.270913, 0.404355, 0.610080, 1.020840",\ + "0.251186, 0.351686, 0.484981, 0.690703, 1.101507",\ + "0.388979, 0.491150, 0.624343, 0.829707, 1.239752",\ + "0.607308, 0.718634, 0.852099, 1.057372, 1.467127"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.025557, 0.151128, 0.387354, 0.761934, 1.510661",\ + "0.025557, 0.151128, 0.387354, 0.761934, 1.510661",\ + "0.025965, 0.151128, 0.387354, 0.761934, 1.511090",\ + "0.029101, 0.151585, 0.387354, 0.761934, 1.511090",\ + "0.041668, 0.154530, 0.388178, 0.761934, 1.511090"); + } + + } /* end of arc clk_ast_ext_i_io_clk_byp_ack_o[1]_redg_min*/ + + timing () { + related_pin : "clk_src_io_o" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.058414, 0.188667, 0.395813, 0.717110, 1.359045",\ + "0.112550, 0.243041, 0.450135, 0.772138, 1.415649",\ + "0.253196, 0.398235, 0.605055, 0.926906, 1.570171",\ + "0.312752, 0.468715, 0.675324, 0.996903, 1.639637",\ + "0.601931, 0.834236, 1.042645, 1.363437, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.021790, 0.238360, 0.631894, 1.247121, 2.477336",\ + "0.023317, 0.238360, 0.631894, 1.247121, 2.477336",\ + "0.044096, 0.241766, 0.631894, 1.247121, 2.477920",\ + "0.055652, 0.245238, 0.631894, 1.247121, 2.478962",\ + "0.123088, 0.289704, 0.642858, 1.251241, 2.479640"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.085404, 0.186224, 0.319679, 0.525413, 0.936188",\ + "0.141978, 0.242754, 0.376239, 0.581985, 0.992777",\ + "0.275783, 0.376576, 0.509868, 0.715539, 1.126231",\ + "0.332511, 0.433991, 0.567236, 0.772791, 1.183241",\ + "0.607343, 0.718683, 0.852150, 1.057410, 1.467133"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.025646, 0.151693, 0.388430, 0.763132, 1.513362",\ + "0.025646, 0.151849, 0.389568, 0.763815, 1.513362",\ + "0.026529, 0.151849, 0.389568, 0.764056, 1.513362",\ + "0.027825, 0.151849, 0.389568, 0.764056, 1.513362",\ + "0.041734, 0.154598, 0.389568, 0.764056, 1.513362"); + } + + } /* end of arc clk_src_io_o_io_clk_byp_ack_o[1]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_src_io_o" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.058410, 0.188665, 0.395812, 0.717100, 1.359014",\ + "0.112399, 0.243028, 0.450025, 0.771635, 1.414310",\ + "0.253195, 0.398233, 0.605040, 0.926895, 1.570171",\ + "0.311693, 0.467461, 0.674069, 0.995655, 1.638404",\ + "0.601899, 0.834203, 1.042596, 1.363402, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.021782, 0.238225, 0.630549, 1.245808, 2.476689",\ + "0.023311, 0.238225, 0.630549, 1.245808, 2.476689",\ + "0.044096, 0.241755, 0.630564, 1.245808, 2.477789",\ + "0.055446, 0.245170, 0.630656, 1.245808, 2.478512",\ + "0.122913, 0.289395, 0.639350, 1.248196, 2.478674"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.085404, 0.186224, 0.319679, 0.525413, 0.936188",\ + "0.141970, 0.242733, 0.376196, 0.581868, 0.992503",\ + "0.275567, 0.376362, 0.509639, 0.715298, 1.125968",\ + "0.331384, 0.432856, 0.566092, 0.771606, 1.181968",\ + "0.607308, 0.718634, 0.852099, 1.057372, 1.467127"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.014296, 0.039544, 0.079088, 0.158177"); + values ( "0.025646, 0.151208, 0.387784, 0.761934, 1.511090",\ + "0.025646, 0.151208, 0.387784, 0.761934, 1.511090",\ + "0.026523, 0.151208, 0.387784, 0.761934, 1.511090",\ + "0.027795, 0.151394, 0.387784, 0.761934, 1.511090",\ + "0.041668, 0.154530, 0.388178, 0.761934, 1.511090"); + } + + } /* end of arc clk_src_io_o_io_clk_byp_ack_o[1]_redg_min*/ + +} /* end of pin io_clk_byp_ack_o[1] */ + +pin("io_clk_byp_ack_o[0]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.161713 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000000 ; + + /* Other user defined attributes. */ + original_pin : io_clk_byp_ack_o[0]; + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.100843, 0.266735, 0.427088, 0.747616, 1.388635",\ + "0.184687, 0.350464, 0.510809, 0.831717, 1.473578",\ + "0.260267, 0.426010, 0.586434, 0.907636, 1.550114",\ + "0.386507, 0.552662, 0.713534, 1.034573, 1.676504",\ + "0.580400, 0.747044, 0.907773, 1.228098, 1.868510"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015579, 0.316961, 0.624670, 1.238691, 2.466601",\ + "0.015665, 0.316961, 0.624670, 1.238691, 2.466601",\ + "0.015665, 0.317088, 0.625771, 1.239746, 2.466601",\ + "0.015838, 0.317088, 0.625771, 1.239746, 2.466601",\ + "0.016716, 0.317340, 0.625771, 1.239746, 2.466601"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.088041, 0.202376, 0.303813, 0.506089, 0.910516",\ + "0.168483, 0.282824, 0.383745, 0.585711, 0.989669",\ + "0.247358, 0.362640, 0.463376, 0.664815, 1.067688",\ + "0.380658, 0.500049, 0.601022, 0.802517, 1.205414",\ + "0.586485, 0.719001, 0.819955, 1.021830, 1.425575"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015700, 0.193950, 0.379890, 0.747742, 1.482887",\ + "0.016044, 0.193950, 0.379890, 0.747742, 1.485202",\ + "0.017520, 0.193950, 0.379890, 0.747742, 1.485202",\ + "0.022344, 0.194037, 0.379890, 0.747742, 1.485202",\ + "0.034639, 0.196727, 0.379890, 0.748439, 1.491839"); + } + + } /* end of arc clk_ast_ext_i_io_clk_byp_ack_o[0]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.100718, 0.266618, 0.426903, 0.747412, 1.388420",\ + "0.184686, 0.350463, 0.510806, 0.831715, 1.473578",\ + "0.260208, 0.425985, 0.586426, 0.907607, 1.550030",\ + "0.386259, 0.552119, 0.712336, 1.032993, 1.674352",\ + "0.580173, 0.746795, 0.907585, 1.227594, 1.867283"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015496, 0.316821, 0.622606, 1.236473, 2.462725",\ + "0.015496, 0.316821, 0.622606, 1.236473, 2.462725",\ + "0.015496, 0.316929, 0.622606, 1.236473, 2.462725",\ + "0.015814, 0.316929, 0.622606, 1.236473, 2.462725",\ + "0.016700, 0.316929, 0.623370, 1.236473, 2.462725"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.087868, 0.202376, 0.303809, 0.506029, 0.910334",\ + "0.168483, 0.282824, 0.383745, 0.585711, 0.989669",\ + "0.247358, 0.362640, 0.463376, 0.664779, 1.067573",\ + "0.380658, 0.500049, 0.601022, 0.802517, 1.205414",\ + "0.586485, 0.718955, 0.819794, 1.021516, 1.424967"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015619, 0.192979, 0.376641, 0.744531, 1.480142",\ + "0.016032, 0.192979, 0.376641, 0.744531, 1.480142",\ + "0.017339, 0.192979, 0.376641, 0.744531, 1.480142",\ + "0.022190, 0.193551, 0.376842, 0.744531, 1.480142",\ + "0.033893, 0.196557, 0.377640, 0.746288, 1.484937"); + } + + } /* end of arc clk_ast_ext_i_io_clk_byp_ack_o[0]_redg_min*/ + + timing () { + related_pin : "clk_src_io_o" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.103995, 0.269872, 0.430200, 0.750758, 1.391853",\ + "0.158337, 0.324154, 0.484388, 0.804979, 1.446186",\ + "0.282603, 0.448419, 0.608923, 0.930096, 1.572477",\ + "0.334665, 0.500651, 0.661339, 0.982445, 1.624600",\ + "0.580400, 0.747044, 0.907773, 1.228098, 1.868510"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015542, 0.317035, 0.624600, 1.238588, 2.466325",\ + "0.015645, 0.317035, 0.624600, 1.238588, 2.466325",\ + "0.015645, 0.317066, 0.625211, 1.239292, 2.466325",\ + "0.015655, 0.317066, 0.625211, 1.239292, 2.466325",\ + "0.016716, 0.317340, 0.625211, 1.239292, 2.466325"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.090477, 0.204718, 0.305888, 0.507773, 0.911447",\ + "0.141442, 0.255688, 0.356617, 0.558511, 0.962305",\ + "0.270943, 0.386953, 0.487730, 0.689180, 1.092056",\ + "0.325917, 0.443620, 0.544496, 0.745968, 1.148855",\ + "0.586485, 0.719001, 0.819955, 1.021830, 1.425575"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.813271, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015734, 0.193610, 0.378735, 0.747021, 1.483183",\ + "0.015916, 0.193610, 0.378735, 0.747293, 1.484513",\ + "0.018374, 0.193610, 0.378735, 0.747293, 1.484513",\ + "0.020363, 0.193614, 0.378735, 0.747293, 1.484513",\ + "0.034639, 0.196727, 0.378735, 0.748439, 1.491839"); + } + + } /* end of arc clk_src_io_o_io_clk_byp_ack_o[0]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_src_io_o" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.103875, 0.269735, 0.430056, 0.750620, 1.391729",\ + "0.158336, 0.324133, 0.484382, 0.804893, 1.445917",\ + "0.282510, 0.448302, 0.608704, 0.929792, 1.572026",\ + "0.333572, 0.499397, 0.659708, 0.980584, 1.622387",\ + "0.580173, 0.746795, 0.907585, 1.227594, 1.867283"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015480, 0.316838, 0.623370, 1.236473, 2.462725",\ + "0.015480, 0.316838, 0.623370, 1.236473, 2.462725",\ + "0.015480, 0.316929, 0.623370, 1.236473, 2.462725",\ + "0.015652, 0.316929, 0.623370, 1.236473, 2.462725",\ + "0.016700, 0.316929, 0.623370, 1.236473, 2.462725"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.090378, 0.204717, 0.305882, 0.507735, 0.911343",\ + "0.141442, 0.255688, 0.356617, 0.558510, 0.962304",\ + "0.270943, 0.386953, 0.487730, 0.689150, 1.091961",\ + "0.324941, 0.442615, 0.543488, 0.744945, 1.147798",\ + "0.586485, 0.718955, 0.819794, 1.021516, 1.424967"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.006578, 0.127724, 0.562810, 0.808825, 2.480000"); + index_2 ( "0.000000, 0.020214, 0.040428, 0.080856, 0.161713"); + values ( "0.015687, 0.193080, 0.376676, 0.744928, 1.481536",\ + "0.015912, 0.193080, 0.376676, 0.744928, 1.481536",\ + "0.018197, 0.193080, 0.376676, 0.744928, 1.481536",\ + "0.020162, 0.193312, 0.376758, 0.744928, 1.481536",\ + "0.033893, 0.196557, 0.377640, 0.746288, 1.484937"); + } + + } /* end of arc clk_src_io_o_io_clk_byp_ack_o[0]_redg_min*/ + +} /* end of pin io_clk_byp_ack_o[0] */ +} /* end of bus io_clk_byp_ack_o */ +bus ( flash_bist_en_o ) { + + bus_type : BUS4_type6 ; + direction : output ; + +pin("flash_bist_en_o[3]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.161713 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000495 ; + + /* Other user defined attributes. */ + original_pin : flash_bist_en_o[3]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000495, 0.020647, 0.040799, 0.081104, 0.161713"); + values ( "0.106472, 0.270169, 0.430032, 0.749578, 1.388635",\ + "0.190222, 0.353899, 0.513753, 0.833681, 1.473578",\ + "0.265754, 0.429446, 0.589380, 0.909602, 1.550114",\ + "0.318401, 0.482257, 0.642376, 0.962527, 1.602811",\ + "0.586143, 0.750487, 0.910724, 1.230057, 1.868510"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000495, 0.020647, 0.040799, 0.081104, 0.161713"); + values ( "0.022534, 0.323552, 0.630320, 1.242449, 2.466601",\ + "0.022534, 0.323552, 0.630320, 1.242449, 2.466601",\ + "0.022534, 0.323700, 0.631438, 1.243501, 2.466601",\ + "0.022534, 0.323700, 0.631438, 1.243501, 2.466601",\ + "0.023510, 0.323927, 0.631438, 1.243501, 2.466601"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000495, 0.020647, 0.040799, 0.081104, 0.161713"); + values ( "0.093077, 0.204486, 0.305612, 0.507263, 0.910452",\ + "0.173702, 0.284922, 0.385535, 0.586884, 0.989605",\ + "0.252842, 0.364735, 0.465162, 0.665985, 1.067625",\ + "0.308854, 0.422028, 0.522554, 0.723398, 1.125048",\ + "0.595772, 0.721100, 0.821745, 1.023002, 1.425511"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000495, 0.020647, 0.040799, 0.081104, 0.161713"); + values ( "0.020965, 0.197814, 0.383189, 0.749876, 1.482771",\ + "0.021088, 0.197814, 0.383189, 0.749876, 1.485086",\ + "0.022399, 0.197814, 0.383189, 0.749876, 1.485086",\ + "0.024352, 0.197814, 0.383189, 0.749876, 1.485086",\ + "0.039819, 0.200489, 0.383189, 0.750597, 1.491722"); + } + + } /* end of arc clk_ast_tlul_i_flash_bist_en_o[3]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000495, 0.020647, 0.040799, 0.081104, 0.161713"); + values ( "0.106274, 0.270052, 0.429845, 0.749374, 1.388420",\ + "0.190221, 0.353898, 0.513750, 0.833679, 1.473578",\ + "0.265727, 0.429421, 0.589372, 0.909573, 1.550030",\ + "0.318289, 0.482010, 0.641868, 0.961850, 1.601865",\ + "0.585943, 0.750239, 0.910537, 1.229551, 1.867283"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000495, 0.020647, 0.040799, 0.081104, 0.161713"); + values ( "0.022505, 0.323384, 0.628823, 1.240225, 2.462725",\ + "0.022505, 0.323384, 0.628823, 1.240225, 2.462725",\ + "0.022505, 0.323493, 0.628996, 1.240225, 2.462725",\ + "0.022505, 0.323493, 0.628996, 1.240225, 2.462725",\ + "0.023422, 0.323493, 0.628996, 1.240225, 2.462725"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000495, 0.020647, 0.040799, 0.081104, 0.161713"); + values ( "0.093062, 0.204485, 0.305607, 0.507203, 0.910270",\ + "0.173702, 0.284922, 0.385535, 0.586884, 0.989605",\ + "0.252842, 0.364735, 0.465162, 0.665949, 1.067509",\ + "0.308854, 0.422028, 0.522554, 0.723377, 1.124981",\ + "0.595772, 0.721051, 0.821582, 1.022687, 1.424903"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000495, 0.020647, 0.040799, 0.081104, 0.161713"); + values ( "0.020958, 0.196798, 0.379897, 0.747224, 1.481125",\ + "0.021082, 0.196798, 0.379897, 0.747224, 1.481487",\ + "0.022349, 0.196798, 0.379897, 0.747224, 1.481970",\ + "0.024295, 0.197033, 0.379979, 0.747224, 1.481970",\ + "0.039434, 0.200322, 0.380851, 0.748432, 1.484821"); + } + + } /* end of arc clk_ast_tlul_i_flash_bist_en_o[3]_redg_min*/ + +} /* end of pin flash_bist_en_o[3] */ + +pin("flash_bist_en_o[2]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.158177 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000933 ; + + /* Other user defined attributes. */ + original_pin : flash_bist_en_o[2]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000933, 0.015228, 0.040244, 0.079555, 0.158177"); + values ( "0.068360, 0.193376, 0.398624, 0.718055, 1.356390",\ + "0.155472, 0.280749, 0.486028, 0.806244, 1.446276",\ + "0.245378, 0.375639, 0.580639, 0.900669, 1.540369",\ + "0.309418, 0.446887, 0.651675, 0.971433, 1.610599",\ + "0.645820, 0.841934, 1.048418, 1.367213, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000933, 0.015228, 0.040244, 0.079555, 0.158177"); + values ( "0.036908, 0.252893, 0.642777, 1.254340, 2.477274",\ + "0.039249, 0.252893, 0.642777, 1.254340, 2.477274",\ + "0.052853, 0.254696, 0.642777, 1.254340, 2.477473",\ + "0.066089, 0.258077, 0.642777, 1.254340, 2.478527",\ + "0.148778, 0.302748, 0.652641, 1.258483, 2.479640"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000933, 0.015228, 0.040244, 0.079555, 0.158177"); + values ( "0.095441, 0.187812, 0.320023, 0.524480, 0.932830",\ + "0.183363, 0.275751, 0.407999, 0.612464, 1.020822",\ + "0.264739, 0.356733, 0.488814, 0.693266, 1.101639",\ + "0.322419, 0.414777, 0.546811, 0.751146, 1.159276",\ + "0.625473, 0.723477, 0.855712, 1.059693, 1.467001"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000933, 0.015228, 0.040244, 0.079555, 0.158177"); + values ( "0.038391, 0.160114, 0.394156, 0.767483, 1.515105",\ + "0.038391, 0.160334, 0.395597, 0.767483, 1.515105",\ + "0.038391, 0.160334, 0.395837, 0.768571, 1.515105",\ + "0.039404, 0.160334, 0.395837, 0.768571, 1.515105",\ + "0.052962, 0.163010, 0.395837, 0.768571, 1.515105"); + } + + } /* end of arc clk_ast_tlul_i_flash_bist_en_o[2]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000933, 0.015228, 0.040244, 0.079555, 0.158177"); + values ( "0.068360, 0.193375, 0.398624, 0.718048, 1.356368",\ + "0.155472, 0.280716, 0.485750, 0.805145, 1.443459",\ + "0.245377, 0.375636, 0.580621, 0.900655, 1.540369",\ + "0.309416, 0.446884, 0.651665, 0.971425, 1.610599",\ + "0.645736, 0.841900, 1.048369, 1.367178, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000933, 0.015228, 0.040244, 0.079555, 0.158177"); + values ( "0.036903, 0.252768, 0.641334, 1.253096, 2.477107",\ + "0.039197, 0.252768, 0.641334, 1.253096, 2.477170",\ + "0.052850, 0.254678, 0.641334, 1.253096, 2.477473",\ + "0.066086, 0.258066, 0.641335, 1.253096, 2.478218",\ + "0.148778, 0.302321, 0.649044, 1.255451, 2.478674"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000933, 0.015228, 0.040244, 0.079555, 0.158177"); + values ( "0.095441, 0.187812, 0.320023, 0.524479, 0.932827",\ + "0.183333, 0.275707, 0.407917, 0.612369, 1.020708",\ + "0.264498, 0.356474, 0.488538, 0.692993, 1.101375",\ + "0.322270, 0.414621, 0.546643, 0.750947, 1.159015",\ + "0.625416, 0.723429, 0.855662, 1.059656, 1.466994"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000933, 0.015228, 0.040244, 0.079555, 0.158177"); + values ( "0.038382, 0.159650, 0.394147, 0.766109, 1.510420",\ + "0.038382, 0.159650, 0.394269, 0.766109, 1.510420",\ + "0.038382, 0.159650, 0.394269, 0.766109, 1.510848",\ + "0.039368, 0.159819, 0.394269, 0.766109, 1.510848",\ + "0.052940, 0.162923, 0.394414, 0.766109, 1.510848"); + } + + } /* end of arc clk_ast_tlul_i_flash_bist_en_o[2]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.036908, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.389662, 0.307033, 0.231889, 0.198170, 0.165471",\ + "0.404008, 0.321379, 0.246234, 0.212515, 0.179817",\ + "0.484046, 0.401418, 0.326273, 0.292554, 0.259856",\ + "0.581919, 0.499290, 0.424146, 0.390427, 0.357729",\ + "1.023710, 0.941089, 0.865969, 0.832267, 0.799656"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.038391, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.456800, 0.480507, 0.558316, 0.625895, 1.056719",\ + "0.470804, 0.494511, 0.572320, 0.639899, 1.070723",\ + "0.534795, 0.558499, 0.636308, 0.703887, 1.134711",\ + "0.638862, 0.662815, 0.740625, 0.808204, 1.239027",\ + "1.201475, 1.225922, 1.303731, 1.371310, 1.802133"); + } + + } /* end of arc clk_ast_tlul_i_flash_bist_en_o[2]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.036903, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.194420, -0.153007, -0.120290, -0.084607, 0.143547",\ + "-0.208763, -0.167350, -0.134633, -0.098950, 0.129204",\ + "-0.288800, -0.247387, -0.214670, -0.178991, 0.049163",\ + "-0.387771, -0.346358, -0.313641, -0.276864, -0.048710",\ + "-0.830571, -0.789157, -0.756441, -0.718639, -0.490440"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.038382, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.332777, -0.310549, -0.274864, -0.249589, -0.121504",\ + "-0.346777, -0.324549, -0.288864, -0.263590, -0.135504",\ + "-0.410769, -0.388544, -0.352859, -0.327585, -0.199499",\ + "-0.515085, -0.492611, -0.456925, -0.431651, -0.303566",\ + "-1.078191, -1.055218, -1.019535, -0.994261, -0.866175"); + } + + } /* end of arc clk_ast_tlul_i_flash_bist_en_o[2]_hldr*/ + +} /* end of pin flash_bist_en_o[2] */ + +pin("flash_bist_en_o[1]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.158177 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000982 ; + + /* Other user defined attributes. */ + original_pin : flash_bist_en_o[1]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.015278, 0.040281, 0.079579, 0.158177"); + values ( "0.068874, 0.193784, 0.398930, 0.718257, 1.356391",\ + "0.155991, 0.281157, 0.486334, 0.806447, 1.446276",\ + "0.245977, 0.376046, 0.580944, 0.900871, 1.540369",\ + "0.310114, 0.447294, 0.651980, 0.971635, 1.610599",\ + "0.647142, 0.842344, 1.048726, 1.367414, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.015278, 0.040281, 0.079579, 0.158177"); + values ( "0.037694, 0.253668, 0.643358, 1.254727, 2.477274",\ + "0.040003, 0.253668, 0.643358, 1.254727, 2.477274",\ + "0.053519, 0.255465, 0.643358, 1.254727, 2.477474",\ + "0.066746, 0.258839, 0.643358, 1.254727, 2.478527",\ + "0.149647, 0.303443, 0.653162, 1.258869, 2.479640"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.015278, 0.040281, 0.079579, 0.158177"); + values ( "0.095870, 0.188047, 0.320193, 0.524583, 0.932804",\ + "0.183791, 0.275986, 0.408168, 0.612567, 1.020795",\ + "0.265166, 0.356968, 0.488983, 0.693368, 1.101612",\ + "0.322850, 0.415012, 0.546981, 0.751248, 1.159250",\ + "0.625969, 0.723713, 0.855882, 1.059795, 1.466974"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.015278, 0.040281, 0.079579, 0.158177"); + values ( "0.038860, 0.160530, 0.394456, 0.767671, 1.515056",\ + "0.038860, 0.160753, 0.395899, 0.767671, 1.515056",\ + "0.038860, 0.160753, 0.396141, 0.768758, 1.515056",\ + "0.039865, 0.160753, 0.396141, 0.768758, 1.515056",\ + "0.053336, 0.163423, 0.396141, 0.768758, 1.515056"); + } + + } /* end of arc clk_ast_tlul_i_flash_bist_en_o[1]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.015278, 0.040281, 0.079579, 0.158177"); + values ( "0.068873, 0.193783, 0.398930, 0.718250, 1.356368",\ + "0.155991, 0.281124, 0.486056, 0.805347, 1.443459",\ + "0.245976, 0.376044, 0.580926, 0.900857, 1.540369",\ + "0.310112, 0.447291, 0.651970, 0.971627, 1.610599",\ + "0.647058, 0.842310, 1.048677, 1.367379, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.015278, 0.040281, 0.079579, 0.158177"); + values ( "0.037688, 0.253541, 0.641906, 1.253483, 2.477107",\ + "0.039952, 0.253541, 0.641906, 1.253483, 2.477170",\ + "0.053515, 0.255446, 0.641906, 1.253483, 2.477474",\ + "0.066744, 0.258828, 0.641906, 1.253483, 2.478218",\ + "0.149647, 0.303009, 0.649561, 1.255837, 2.478674"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.015278, 0.040281, 0.079579, 0.158177"); + values ( "0.095870, 0.188047, 0.320193, 0.524582, 0.932800",\ + "0.183761, 0.275942, 0.408087, 0.612471, 1.020681",\ + "0.264924, 0.356709, 0.488708, 0.693095, 1.101348",\ + "0.322701, 0.414856, 0.546813, 0.751050, 1.158988",\ + "0.625912, 0.723664, 0.855831, 1.059758, 1.466968"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000982, 0.015278, 0.040281, 0.079579, 0.158177"); + values ( "0.038851, 0.160069, 0.394447, 0.766295, 1.510371",\ + "0.038851, 0.160069, 0.394570, 0.766295, 1.510371",\ + "0.038851, 0.160069, 0.394570, 0.766295, 1.510800",\ + "0.039829, 0.160236, 0.394570, 0.766295, 1.510800",\ + "0.053313, 0.163335, 0.394711, 0.766295, 1.510800"); + } + + } /* end of arc clk_ast_tlul_i_flash_bist_en_o[1]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.037694, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.387207, 0.304578, 0.229434, 0.195714, 0.163016",\ + "0.401633, 0.319004, 0.243859, 0.210140, 0.177442",\ + "0.477915, 0.395287, 0.320142, 0.286423, 0.253725",\ + "0.569150, 0.486521, 0.411377, 0.377658, 0.344959",\ + "0.968197, 0.885576, 0.810456, 0.776755, 0.744146"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.038860, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.458514, 0.482233, 0.560042, 0.627621, 1.058444",\ + "0.470955, 0.494673, 0.572482, 0.640062, 1.070885",\ + "0.535510, 0.559226, 0.637035, 0.704614, 1.135437",\ + "0.647291, 0.671342, 0.749152, 0.816731, 1.247554",\ + "1.199795, 1.224990, 1.302845, 1.370443, 1.801277"); + } + + } /* end of arc clk_ast_tlul_i_flash_bist_en_o[1]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.037688, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.191963, -0.150550, -0.117833, -0.082151, 0.146002",\ + "-0.206387, -0.164973, -0.132257, -0.096575, 0.131579",\ + "-0.282671, -0.241257, -0.208540, -0.172860, 0.055294",\ + "-0.374978, -0.333564, -0.300848, -0.264095, -0.035941",\ + "-0.775028, -0.733615, -0.700898, -0.663125, -0.434925"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.038851, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.334502, -0.312263, -0.276578, -0.251304, -0.123218",\ + "-0.346939, -0.324701, -0.289015, -0.263741, -0.135656",\ + "-0.411495, -0.389259, -0.353574, -0.328299, -0.200214",\ + "-0.523612, -0.501040, -0.465355, -0.440080, -0.311995",\ + "-1.077244, -1.053536, -1.017853, -0.992580, -0.864493"); + } + + } /* end of arc clk_ast_tlul_i_flash_bist_en_o[1]_hldr*/ + +} /* end of pin flash_bist_en_o[1] */ + +pin("flash_bist_en_o[0]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.161713 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.000495 ; + + /* Other user defined attributes. */ + original_pin : flash_bist_en_o[0]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000495, 0.020647, 0.040799, 0.081104, 0.161713"); + values ( "0.106472, 0.270169, 0.430032, 0.749578, 1.388635",\ + "0.190222, 0.353899, 0.513753, 0.833681, 1.473578",\ + "0.265754, 0.429446, 0.589380, 0.909602, 1.550114",\ + "0.318401, 0.482257, 0.642376, 0.962527, 1.602811",\ + "0.586143, 0.750487, 0.910724, 1.230057, 1.868510"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000495, 0.020647, 0.040799, 0.081104, 0.161713"); + values ( "0.022534, 0.323552, 0.630320, 1.242449, 2.466601",\ + "0.022534, 0.323552, 0.630320, 1.242449, 2.466601",\ + "0.022534, 0.323700, 0.631438, 1.243501, 2.466601",\ + "0.022534, 0.323700, 0.631438, 1.243501, 2.466601",\ + "0.023510, 0.323927, 0.631438, 1.243501, 2.466601"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000495, 0.020647, 0.040799, 0.081104, 0.161713"); + values ( "0.093077, 0.204486, 0.305612, 0.507263, 0.910452",\ + "0.173702, 0.284922, 0.385535, 0.586884, 0.989605",\ + "0.252842, 0.364735, 0.465162, 0.665985, 1.067625",\ + "0.308854, 0.422028, 0.522554, 0.723398, 1.125048",\ + "0.595772, 0.721100, 0.821745, 1.023002, 1.425511"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000495, 0.020647, 0.040799, 0.081104, 0.161713"); + values ( "0.020965, 0.197814, 0.383189, 0.749876, 1.482771",\ + "0.021088, 0.197814, 0.383189, 0.749876, 1.485086",\ + "0.022399, 0.197814, 0.383189, 0.749876, 1.485086",\ + "0.024352, 0.197814, 0.383189, 0.749876, 1.485086",\ + "0.039819, 0.200489, 0.383189, 0.750597, 1.491722"); + } + + } /* end of arc clk_ast_tlul_i_flash_bist_en_o[0]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000495, 0.020647, 0.040799, 0.081104, 0.161713"); + values ( "0.106274, 0.270052, 0.429845, 0.749374, 1.388420",\ + "0.190221, 0.353898, 0.513750, 0.833679, 1.473578",\ + "0.265727, 0.429421, 0.589372, 0.909573, 1.550030",\ + "0.318289, 0.482010, 0.641868, 0.961850, 1.601865",\ + "0.585943, 0.750239, 0.910537, 1.229551, 1.867283"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000495, 0.020647, 0.040799, 0.081104, 0.161713"); + values ( "0.022505, 0.323384, 0.628823, 1.240225, 2.462725",\ + "0.022505, 0.323384, 0.628823, 1.240225, 2.462725",\ + "0.022505, 0.323493, 0.628996, 1.240225, 2.462725",\ + "0.022505, 0.323493, 0.628996, 1.240225, 2.462725",\ + "0.023422, 0.323493, 0.628996, 1.240225, 2.462725"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000495, 0.020647, 0.040799, 0.081104, 0.161713"); + values ( "0.093062, 0.204485, 0.305607, 0.507203, 0.910270",\ + "0.173702, 0.284922, 0.385535, 0.586884, 0.989605",\ + "0.252842, 0.364735, 0.465162, 0.665949, 1.067509",\ + "0.308854, 0.422028, 0.522554, 0.723377, 1.124981",\ + "0.595772, 0.721051, 0.821582, 1.022687, 1.424903"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.000495, 0.020647, 0.040799, 0.081104, 0.161713"); + values ( "0.020958, 0.196798, 0.379897, 0.747224, 1.481125",\ + "0.021082, 0.196798, 0.379897, 0.747224, 1.481487",\ + "0.022349, 0.196798, 0.379897, 0.747224, 1.481970",\ + "0.024295, 0.197033, 0.379979, 0.747224, 1.481970",\ + "0.039434, 0.200322, 0.380851, 0.748432, 1.484821"); + } + + } /* end of arc clk_ast_tlul_i_flash_bist_en_o[0]_redg_min*/ + +} /* end of pin flash_bist_en_o[0] */ +} /* end of bus flash_bist_en_o */ +bus ( dpram_rmf_o ) { + + bus_type : BUS10_type8 ; + direction : output ; + +pin("dpram_rmf_o[9]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002475 ; + + /* Other user defined attributes. */ + original_pin : dpram_rmf_o[9]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002475, 0.075473, 0.162359, 0.322243, 0.642011"); + values ( "0.049435, 0.202151, 0.377283, 0.699803, 1.344843",\ + "0.135820, 0.289326, 0.464387, 0.786517, 1.430777",\ + "0.219334, 0.377453, 0.552342, 0.874138, 1.517732",\ + "0.277559, 0.441846, 0.616457, 0.938052, 1.581241",\ + "0.579442, 0.791721, 0.966837, 1.286790, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002475, 0.075473, 0.162359, 0.322243, 0.642011"); + values ( "0.025782, 0.301558, 0.634384, 1.250443, 2.482564",\ + "0.030125, 0.302556, 0.636324, 1.250443, 2.482564",\ + "0.042888, 0.304795, 0.636360, 1.250443, 2.482564",\ + "0.054816, 0.308050, 0.636463, 1.250443, 2.482564",\ + "0.130787, 0.346172, 0.642713, 1.252991, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002475, 0.075473, 0.162359, 0.322243, 0.642011"); + values ( "0.068909, 0.173502, 0.284792, 0.488757, 0.896689",\ + "0.156317, 0.260820, 0.372072, 0.576063, 0.984042",\ + "0.236694, 0.341152, 0.452099, 0.656091, 1.064074",\ + "0.293432, 0.398701, 0.509642, 0.713335, 1.120722",\ + "0.587713, 0.702042, 0.813273, 1.016348, 1.422499"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002475, 0.075473, 0.162359, 0.322243, 0.642011"); + values ( "0.025687, 0.188435, 0.388543, 0.760465, 1.504307",\ + "0.025687, 0.188583, 0.389046, 0.760465, 1.504307",\ + "0.026721, 0.188583, 0.389046, 0.760465, 1.504307",\ + "0.028743, 0.188583, 0.389046, 0.760465, 1.504307",\ + "0.047139, 0.192514, 0.389046, 0.760465, 1.504587"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[9]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002475, 0.075473, 0.162359, 0.322243, 0.642011"); + values ( "0.049435, 0.202151, 0.377283, 0.699803, 1.344843",\ + "0.135820, 0.289326, 0.464387, 0.786517, 1.430777",\ + "0.219334, 0.377453, 0.552342, 0.874138, 1.517732",\ + "0.277559, 0.441846, 0.616457, 0.938052, 1.581241",\ + "0.579442, 0.791721, 0.966837, 1.286790, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002475, 0.075473, 0.162359, 0.322243, 0.642011"); + values ( "0.025782, 0.301558, 0.634384, 1.249210, 2.473548",\ + "0.030125, 0.302556, 0.636324, 1.249210, 2.473548",\ + "0.042888, 0.304795, 0.636360, 1.249285, 2.473548",\ + "0.054816, 0.308050, 0.636463, 1.250030, 2.473548",\ + "0.130787, 0.346172, 0.642713, 1.252991, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002475, 0.075473, 0.162359, 0.322243, 0.642011"); + values ( "0.068909, 0.173502, 0.284792, 0.488757, 0.896689",\ + "0.156317, 0.260820, 0.372072, 0.576063, 0.984042",\ + "0.236694, 0.341152, 0.452099, 0.656091, 1.064074",\ + "0.293432, 0.398701, 0.509642, 0.713335, 1.120722",\ + "0.587713, 0.702042, 0.813273, 1.016348, 1.422499"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002475, 0.075473, 0.162359, 0.322243, 0.642011"); + values ( "0.025687, 0.187631, 0.387035, 0.758233, 1.500630",\ + "0.025687, 0.187631, 0.387035, 0.758233, 1.500630",\ + "0.026721, 0.187631, 0.387035, 0.758233, 1.500630",\ + "0.028743, 0.188240, 0.387493, 0.759136, 1.502422",\ + "0.047139, 0.192514, 0.387566, 0.759907, 1.504587"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[9]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025782, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.216765, 0.170836, 0.140637, 0.129293, 0.142978",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025687, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.251111, 0.175790, 0.107631, 0.084664, 0.147578",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[9]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025782, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.148693, -0.106276, -0.071789, -0.032365, 0.273682",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025687, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.164267, -0.098352, -0.040693, 0.001268, 0.221876",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[9]_hldr*/ + +} /* end of pin dpram_rmf_o[9] */ + +pin("dpram_rmf_o[8]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002026 ; + + /* Other user defined attributes. */ + original_pin : dpram_rmf_o[8]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.048221, 0.201247, 0.376603, 0.699350, 1.344843",\ + "0.134540, 0.288422, 0.463709, 0.786065, 1.430777",\ + "0.217754, 0.376549, 0.551664, 0.873687, 1.517732",\ + "0.275678, 0.440944, 0.615780, 0.937600, 1.581241",\ + "0.575742, 0.790814, 0.966163, 1.286341, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.024153, 0.299842, 0.633087, 1.249579, 2.482563",\ + "0.028666, 0.300830, 0.635034, 1.249579, 2.482563",\ + "0.041608, 0.303085, 0.635070, 1.249579, 2.482563",\ + "0.053514, 0.306363, 0.635172, 1.249579, 2.482563",\ + "0.129154, 0.344706, 0.641428, 1.252134, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.067848, 0.172946, 0.284382, 0.488491, 0.896709",\ + "0.155259, 0.260265, 0.371663, 0.575796, 0.984062",\ + "0.235619, 0.340599, 0.451690, 0.655824, 1.064094",\ + "0.292315, 0.398147, 0.509233, 0.713069, 1.120741",\ + "0.586152, 0.701486, 0.812865, 1.016083, 1.422518"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.024592, 0.187440, 0.387796, 0.759979, 1.504343",\ + "0.024592, 0.187585, 0.388300, 0.759979, 1.504343",\ + "0.025674, 0.187585, 0.388300, 0.759979, 1.504343",\ + "0.027742, 0.187585, 0.388300, 0.759979, 1.504343",\ + "0.046348, 0.191554, 0.388300, 0.759979, 1.504623"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[8]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.048221, 0.201247, 0.376603, 0.699350, 1.344843",\ + "0.134540, 0.288422, 0.463709, 0.786065, 1.430777",\ + "0.217754, 0.376549, 0.551664, 0.873687, 1.517732",\ + "0.275678, 0.440944, 0.615780, 0.937600, 1.581241",\ + "0.575742, 0.790814, 0.966163, 1.286341, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.024153, 0.299842, 0.633087, 1.248350, 2.473548",\ + "0.028666, 0.300830, 0.635034, 1.248350, 2.473548",\ + "0.041608, 0.303085, 0.635070, 1.248425, 2.473548",\ + "0.053514, 0.306363, 0.635172, 1.249169, 2.473548",\ + "0.129154, 0.344706, 0.641428, 1.252134, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.067848, 0.172946, 0.284382, 0.488491, 0.896709",\ + "0.155259, 0.260265, 0.371663, 0.575796, 0.984062",\ + "0.235619, 0.340599, 0.451690, 0.655824, 1.064094",\ + "0.292315, 0.398147, 0.509233, 0.713069, 1.120741",\ + "0.586152, 0.701486, 0.812865, 1.016083, 1.422518"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.024592, 0.186641, 0.386289, 0.757748, 1.500666",\ + "0.024592, 0.186641, 0.386289, 0.757748, 1.500666",\ + "0.025674, 0.186641, 0.386289, 0.757748, 1.500666",\ + "0.027742, 0.187251, 0.386746, 0.758650, 1.502457",\ + "0.046348, 0.191554, 0.386818, 0.759420, 1.504623"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[8]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.216011, 0.170082, 0.139882, 0.128539, 0.142224",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024592, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.250613, 0.175291, 0.107132, 0.084165, 0.147079",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[8]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.147938, -0.105521, -0.071034, -0.031611, 0.274436",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024592, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.163769, -0.097854, -0.040195, 0.001766, 0.222374",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[8]_hldr*/ + +} /* end of pin dpram_rmf_o[8] */ + +pin("dpram_rmf_o[7]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002475 ; + + /* Other user defined attributes. */ + original_pin : dpram_rmf_o[7]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002475, 0.075473, 0.162359, 0.322243, 0.642011"); + values ( "0.049435, 0.202151, 0.377283, 0.699803, 1.344843",\ + "0.135820, 0.289326, 0.464387, 0.786517, 1.430777",\ + "0.219334, 0.377453, 0.552342, 0.874138, 1.517732",\ + "0.277559, 0.441846, 0.616457, 0.938052, 1.581241",\ + "0.579442, 0.791721, 0.966837, 1.286790, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002475, 0.075473, 0.162359, 0.322243, 0.642011"); + values ( "0.025782, 0.301558, 0.634384, 1.250443, 2.482564",\ + "0.030125, 0.302556, 0.636324, 1.250443, 2.482564",\ + "0.042888, 0.304795, 0.636360, 1.250443, 2.482564",\ + "0.054816, 0.308050, 0.636463, 1.250443, 2.482564",\ + "0.130787, 0.346172, 0.642713, 1.252991, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002475, 0.075473, 0.162359, 0.322243, 0.642011"); + values ( "0.068909, 0.173502, 0.284792, 0.488757, 0.896689",\ + "0.156317, 0.260820, 0.372072, 0.576063, 0.984042",\ + "0.236694, 0.341152, 0.452099, 0.656091, 1.064074",\ + "0.293432, 0.398701, 0.509642, 0.713335, 1.120722",\ + "0.587713, 0.702042, 0.813273, 1.016348, 1.422499"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002475, 0.075473, 0.162359, 0.322243, 0.642011"); + values ( "0.025687, 0.188435, 0.388543, 0.760465, 1.504307",\ + "0.025687, 0.188583, 0.389046, 0.760465, 1.504307",\ + "0.026721, 0.188583, 0.389046, 0.760465, 1.504307",\ + "0.028743, 0.188583, 0.389046, 0.760465, 1.504307",\ + "0.047139, 0.192514, 0.389046, 0.760465, 1.504587"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[7]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002475, 0.075473, 0.162359, 0.322243, 0.642011"); + values ( "0.049435, 0.202151, 0.377283, 0.699803, 1.344843",\ + "0.135820, 0.289326, 0.464387, 0.786517, 1.430777",\ + "0.219334, 0.377453, 0.552342, 0.874138, 1.517732",\ + "0.277559, 0.441846, 0.616457, 0.938052, 1.581241",\ + "0.579442, 0.791721, 0.966837, 1.286790, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002475, 0.075473, 0.162359, 0.322243, 0.642011"); + values ( "0.025782, 0.301558, 0.634384, 1.249210, 2.473548",\ + "0.030125, 0.302556, 0.636324, 1.249210, 2.473548",\ + "0.042888, 0.304795, 0.636360, 1.249285, 2.473548",\ + "0.054816, 0.308050, 0.636463, 1.250030, 2.473548",\ + "0.130787, 0.346172, 0.642713, 1.252991, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002475, 0.075473, 0.162359, 0.322243, 0.642011"); + values ( "0.068909, 0.173502, 0.284792, 0.488757, 0.896689",\ + "0.156317, 0.260820, 0.372072, 0.576063, 0.984042",\ + "0.236694, 0.341152, 0.452099, 0.656091, 1.064074",\ + "0.293432, 0.398701, 0.509642, 0.713335, 1.120722",\ + "0.587713, 0.702042, 0.813273, 1.016348, 1.422499"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002475, 0.075473, 0.162359, 0.322243, 0.642011"); + values ( "0.025687, 0.187631, 0.387035, 0.758233, 1.500630",\ + "0.025687, 0.187631, 0.387035, 0.758233, 1.500630",\ + "0.026721, 0.187631, 0.387035, 0.758233, 1.500630",\ + "0.028743, 0.188240, 0.387493, 0.759136, 1.502422",\ + "0.047139, 0.192514, 0.387566, 0.759907, 1.504587"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[7]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025782, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.216765, 0.170836, 0.140637, 0.129293, 0.142978",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025687, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.251111, 0.175790, 0.107631, 0.084664, 0.147578",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[7]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025782, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.148693, -0.106276, -0.071789, -0.032365, 0.273682",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025687, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.164267, -0.098352, -0.040693, 0.001268, 0.221876",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[7]_hldr*/ + +} /* end of pin dpram_rmf_o[7] */ + +pin("dpram_rmf_o[6]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002493 ; + + /* Other user defined attributes. */ + original_pin : dpram_rmf_o[6]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002493, 0.075491, 0.162372, 0.322252, 0.642011"); + values ( "0.049484, 0.202188, 0.377310, 0.699821, 1.344843",\ + "0.135872, 0.289362, 0.464414, 0.786535, 1.430777",\ + "0.219397, 0.377489, 0.552369, 0.874157, 1.517732",\ + "0.277634, 0.441882, 0.616484, 0.938070, 1.581241",\ + "0.579590, 0.791757, 0.966864, 1.286808, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002493, 0.075491, 0.162372, 0.322252, 0.642011"); + values ( "0.025847, 0.301627, 0.634436, 1.250478, 2.482563",\ + "0.030184, 0.302625, 0.636376, 1.250478, 2.482563",\ + "0.042939, 0.304864, 0.636412, 1.250478, 2.482563",\ + "0.054868, 0.308118, 0.636515, 1.250478, 2.482563",\ + "0.130853, 0.346231, 0.642764, 1.253025, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002493, 0.075491, 0.162372, 0.322252, 0.642011"); + values ( "0.068955, 0.173526, 0.284810, 0.488770, 0.896690",\ + "0.156363, 0.260844, 0.372091, 0.576075, 0.984043",\ + "0.236740, 0.341176, 0.452118, 0.656103, 1.064075",\ + "0.293480, 0.398725, 0.509660, 0.713348, 1.120723",\ + "0.587780, 0.702066, 0.813291, 1.016361, 1.422500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002493, 0.075491, 0.162372, 0.322252, 0.642011"); + values ( "0.025734, 0.188477, 0.388576, 0.760487, 1.504309",\ + "0.025734, 0.188626, 0.389079, 0.760487, 1.504309",\ + "0.026766, 0.188626, 0.389079, 0.760487, 1.504309",\ + "0.028786, 0.188626, 0.389079, 0.760487, 1.504309",\ + "0.047173, 0.192555, 0.389079, 0.760487, 1.504589"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[6]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002493, 0.075491, 0.162372, 0.322252, 0.642011"); + values ( "0.049484, 0.202188, 0.377310, 0.699821, 1.344843",\ + "0.135872, 0.289362, 0.464414, 0.786535, 1.430777",\ + "0.219397, 0.377489, 0.552369, 0.874157, 1.517732",\ + "0.277634, 0.441882, 0.616484, 0.938070, 1.581241",\ + "0.579590, 0.791757, 0.966864, 1.286808, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002493, 0.075491, 0.162372, 0.322252, 0.642011"); + values ( "0.025847, 0.301627, 0.634436, 1.249244, 2.473548",\ + "0.030184, 0.302625, 0.636376, 1.249244, 2.473548",\ + "0.042939, 0.304864, 0.636412, 1.249320, 2.473548",\ + "0.054868, 0.308118, 0.636515, 1.250065, 2.473548",\ + "0.130853, 0.346231, 0.642764, 1.253025, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002493, 0.075491, 0.162372, 0.322252, 0.642011"); + values ( "0.068955, 0.173526, 0.284810, 0.488770, 0.896690",\ + "0.156363, 0.260844, 0.372091, 0.576075, 0.984043",\ + "0.236740, 0.341176, 0.452118, 0.656103, 1.064075",\ + "0.293480, 0.398725, 0.509660, 0.713348, 1.120723",\ + "0.587780, 0.702066, 0.813291, 1.016361, 1.422500"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002493, 0.075491, 0.162372, 0.322252, 0.642011"); + values ( "0.025734, 0.187674, 0.387068, 0.758256, 1.500632",\ + "0.025734, 0.187674, 0.387068, 0.758256, 1.500632",\ + "0.026766, 0.187674, 0.387068, 0.758256, 1.500632",\ + "0.028786, 0.188283, 0.387526, 0.759158, 1.502423",\ + "0.047173, 0.192555, 0.387599, 0.759929, 1.504589"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[6]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025847, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.216796, 0.170867, 0.140667, 0.129323, 0.143008",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025734, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.251133, 0.175811, 0.107652, 0.084685, 0.147599",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[6]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025847, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.148723, -0.106306, -0.071819, -0.032395, 0.273652",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025734, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.164288, -0.098373, -0.040714, 0.001247, 0.221854",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[6]_hldr*/ + +} /* end of pin dpram_rmf_o[6] */ + +pin("dpram_rmf_o[5]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002464 ; + + /* Other user defined attributes. */ + original_pin : dpram_rmf_o[5]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002464, 0.075463, 0.162351, 0.322237, 0.642011"); + values ( "0.049406, 0.202130, 0.377266, 0.699792, 1.344843",\ + "0.135790, 0.289304, 0.464371, 0.786506, 1.430777",\ + "0.219296, 0.377431, 0.552325, 0.874128, 1.517732",\ + "0.277514, 0.441824, 0.616441, 0.938041, 1.581241",\ + "0.579353, 0.791699, 0.966821, 1.286780, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002464, 0.075463, 0.162351, 0.322237, 0.642011"); + values ( "0.025743, 0.301517, 0.634353, 1.250423, 2.482564",\ + "0.030090, 0.302515, 0.636293, 1.250423, 2.482564",\ + "0.042857, 0.304754, 0.636329, 1.250423, 2.482564",\ + "0.054785, 0.308010, 0.636433, 1.250423, 2.482564",\ + "0.130748, 0.346137, 0.642682, 1.252970, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002464, 0.075463, 0.162351, 0.322237, 0.642011"); + values ( "0.068893, 0.173494, 0.284787, 0.488756, 0.896694",\ + "0.156301, 0.260812, 0.372068, 0.576061, 0.984048",\ + "0.236678, 0.341144, 0.452094, 0.656090, 1.064079",\ + "0.293415, 0.398693, 0.509637, 0.713334, 1.120727",\ + "0.587689, 0.702034, 0.813268, 1.016347, 1.422504"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002464, 0.075463, 0.162351, 0.322237, 0.642011"); + values ( "0.025670, 0.188420, 0.388534, 0.760462, 1.504317",\ + "0.025670, 0.188568, 0.389037, 0.760462, 1.504317",\ + "0.026706, 0.188568, 0.389037, 0.760462, 1.504317",\ + "0.028728, 0.188568, 0.389037, 0.760462, 1.504317",\ + "0.047127, 0.192499, 0.389037, 0.760462, 1.504597"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[5]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002464, 0.075463, 0.162351, 0.322237, 0.642011"); + values ( "0.049406, 0.202130, 0.377266, 0.699792, 1.344843",\ + "0.135790, 0.289304, 0.464371, 0.786506, 1.430777",\ + "0.219296, 0.377431, 0.552325, 0.874128, 1.517732",\ + "0.277514, 0.441824, 0.616441, 0.938041, 1.581241",\ + "0.579353, 0.791699, 0.966821, 1.286780, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002464, 0.075463, 0.162351, 0.322237, 0.642011"); + values ( "0.025743, 0.301517, 0.634353, 1.249189, 2.473548",\ + "0.030090, 0.302515, 0.636293, 1.249189, 2.473548",\ + "0.042857, 0.304754, 0.636329, 1.249264, 2.473548",\ + "0.054785, 0.308010, 0.636433, 1.250010, 2.473548",\ + "0.130748, 0.346137, 0.642682, 1.252970, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002464, 0.075463, 0.162351, 0.322237, 0.642011"); + values ( "0.068893, 0.173494, 0.284787, 0.488756, 0.896694",\ + "0.156301, 0.260812, 0.372068, 0.576061, 0.984048",\ + "0.236678, 0.341144, 0.452094, 0.656090, 1.064079",\ + "0.293415, 0.398693, 0.509637, 0.713334, 1.120727",\ + "0.587689, 0.702034, 0.813268, 1.016347, 1.422504"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002464, 0.075463, 0.162351, 0.322237, 0.642011"); + values ( "0.025670, 0.187616, 0.387026, 0.758231, 1.500640",\ + "0.025670, 0.187616, 0.387026, 0.758231, 1.500640",\ + "0.026706, 0.187616, 0.387026, 0.758231, 1.500640",\ + "0.028728, 0.188225, 0.387484, 0.759133, 1.502431",\ + "0.047127, 0.192499, 0.387557, 0.759904, 1.504597"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[5]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025743, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.216747, 0.170818, 0.140619, 0.129275, 0.142960",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025670, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.251104, 0.175782, 0.107623, 0.084656, 0.147570",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[5]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025743, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.148675, -0.106258, -0.071771, -0.032347, 0.273700",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025670, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.164259, -0.098344, -0.040686, 0.001276, 0.221883",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[5]_hldr*/ + +} /* end of pin dpram_rmf_o[5] */ + +pin("dpram_rmf_o[4]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002015 ; + + /* Other user defined attributes. */ + original_pin : dpram_rmf_o[4]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.048192, 0.201225, 0.376587, 0.699339, 1.344843",\ + "0.134509, 0.288400, 0.463692, 0.786054, 1.430777",\ + "0.217716, 0.376528, 0.551648, 0.873676, 1.517732",\ + "0.275633, 0.440922, 0.615763, 0.937589, 1.581241",\ + "0.575653, 0.790792, 0.966147, 1.286330, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.024114, 0.299801, 0.633056, 1.249558, 2.482564",\ + "0.028631, 0.300789, 0.635003, 1.249558, 2.482564",\ + "0.041577, 0.303044, 0.635039, 1.249558, 2.482564",\ + "0.053483, 0.306322, 0.635141, 1.249558, 2.482564",\ + "0.129115, 0.344671, 0.641397, 1.252114, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.067832, 0.172938, 0.284377, 0.488489, 0.896714",\ + "0.155243, 0.260256, 0.371658, 0.575794, 0.984068",\ + "0.235603, 0.340590, 0.451685, 0.655823, 1.064099",\ + "0.292298, 0.398139, 0.509228, 0.713068, 1.120747",\ + "0.586128, 0.701477, 0.812860, 1.016081, 1.422524"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.024575, 0.187425, 0.387787, 0.759976, 1.504353",\ + "0.024575, 0.187570, 0.388291, 0.759976, 1.504353",\ + "0.025658, 0.187570, 0.388291, 0.759976, 1.504353",\ + "0.027727, 0.187570, 0.388291, 0.759976, 1.504353",\ + "0.046336, 0.191539, 0.388291, 0.759976, 1.504633"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[4]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.048192, 0.201225, 0.376587, 0.699339, 1.344843",\ + "0.134509, 0.288400, 0.463692, 0.786054, 1.430777",\ + "0.217716, 0.376528, 0.551648, 0.873676, 1.517732",\ + "0.275633, 0.440922, 0.615763, 0.937589, 1.581241",\ + "0.575653, 0.790792, 0.966147, 1.286330, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.024114, 0.299801, 0.633056, 1.248329, 2.473548",\ + "0.028631, 0.300789, 0.635003, 1.248329, 2.473548",\ + "0.041577, 0.303044, 0.635039, 1.248404, 2.473548",\ + "0.053483, 0.306322, 0.635141, 1.249148, 2.473548",\ + "0.129115, 0.344671, 0.641397, 1.252114, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.067832, 0.172938, 0.284377, 0.488489, 0.896714",\ + "0.155243, 0.260256, 0.371658, 0.575794, 0.984068",\ + "0.235603, 0.340590, 0.451685, 0.655823, 1.064099",\ + "0.292298, 0.398139, 0.509228, 0.713068, 1.120747",\ + "0.586128, 0.701477, 0.812860, 1.016081, 1.422524"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.024575, 0.186626, 0.386280, 0.757745, 1.500676",\ + "0.024575, 0.186626, 0.386280, 0.757745, 1.500676",\ + "0.025658, 0.186626, 0.386280, 0.757745, 1.500676",\ + "0.027727, 0.187236, 0.386737, 0.758647, 1.502467",\ + "0.046336, 0.191539, 0.386809, 0.759417, 1.504633"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[4]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024114, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.215993, 0.170064, 0.139864, 0.128520, 0.142206",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024575, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.250605, 0.175284, 0.107125, 0.084158, 0.147071",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[4]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024114, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.147920, -0.105503, -0.071016, -0.031593, 0.274454",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024575, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.163761, -0.097846, -0.040187, 0.001774, 0.222382",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[4]_hldr*/ + +} /* end of pin dpram_rmf_o[4] */ + +pin("dpram_rmf_o[3]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002005 ; + + /* Other user defined attributes. */ + original_pin : dpram_rmf_o[3]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.048165, 0.201205, 0.376572, 0.699329, 1.344843",\ + "0.134480, 0.288380, 0.463677, 0.786044, 1.430777",\ + "0.217680, 0.376507, 0.551633, 0.873666, 1.517732",\ + "0.275590, 0.440902, 0.615748, 0.937579, 1.581241",\ + "0.575569, 0.790772, 0.966132, 1.286320, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.024077, 0.299762, 0.633026, 1.249539, 2.482564",\ + "0.028598, 0.300750, 0.634974, 1.249539, 2.482564",\ + "0.041548, 0.303005, 0.635010, 1.249539, 2.482564",\ + "0.053453, 0.306284, 0.635112, 1.249539, 2.482564",\ + "0.129078, 0.344637, 0.641368, 1.252094, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.067810, 0.172926, 0.284369, 0.488484, 0.896715",\ + "0.155221, 0.260244, 0.371649, 0.575789, 0.984069",\ + "0.235580, 0.340579, 0.451676, 0.655818, 1.064101",\ + "0.292274, 0.398127, 0.509219, 0.713062, 1.120748",\ + "0.586096, 0.701465, 0.812852, 1.016076, 1.422525"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.024552, 0.187404, 0.387772, 0.759966, 1.504356",\ + "0.024552, 0.187549, 0.388276, 0.759966, 1.504356",\ + "0.025636, 0.187549, 0.388276, 0.759966, 1.504356",\ + "0.027706, 0.187549, 0.388276, 0.759966, 1.504356",\ + "0.046319, 0.191519, 0.388276, 0.759966, 1.504636"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[3]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.048165, 0.201205, 0.376572, 0.699329, 1.344843",\ + "0.134480, 0.288380, 0.463677, 0.786044, 1.430777",\ + "0.217680, 0.376507, 0.551633, 0.873666, 1.517732",\ + "0.275590, 0.440902, 0.615748, 0.937579, 1.581241",\ + "0.575569, 0.790772, 0.966132, 1.286320, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.024077, 0.299762, 0.633026, 1.248310, 2.473548",\ + "0.028598, 0.300750, 0.634974, 1.248310, 2.473548",\ + "0.041548, 0.303005, 0.635010, 1.248385, 2.473548",\ + "0.053453, 0.306284, 0.635112, 1.249129, 2.473548",\ + "0.129078, 0.344637, 0.641368, 1.252094, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.067810, 0.172926, 0.284369, 0.488484, 0.896715",\ + "0.155221, 0.260244, 0.371649, 0.575789, 0.984069",\ + "0.235580, 0.340579, 0.451676, 0.655818, 1.064101",\ + "0.292274, 0.398127, 0.509219, 0.713062, 1.120748",\ + "0.586096, 0.701465, 0.812852, 1.016076, 1.422525"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.024552, 0.186605, 0.386265, 0.757736, 1.500678",\ + "0.024552, 0.186605, 0.386265, 0.757736, 1.500678",\ + "0.025636, 0.186605, 0.386265, 0.757736, 1.500678",\ + "0.027706, 0.187215, 0.386722, 0.758638, 1.502470",\ + "0.046319, 0.191519, 0.386794, 0.759408, 1.504636"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[3]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024077, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.215976, 0.170047, 0.139847, 0.128503, 0.142188",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024552, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.250595, 0.175273, 0.107114, 0.084147, 0.147061",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[3]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024077, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.147903, -0.105486, -0.070999, -0.031576, 0.274471",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024552, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.163751, -0.097835, -0.040177, 0.001784, 0.222392",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[3]_hldr*/ + +} /* end of pin dpram_rmf_o[3] */ + +pin("dpram_rmf_o[2]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002015 ; + + /* Other user defined attributes. */ + original_pin : dpram_rmf_o[2]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.048192, 0.201225, 0.376587, 0.699339, 1.344843",\ + "0.134509, 0.288400, 0.463692, 0.786054, 1.430777",\ + "0.217716, 0.376528, 0.551648, 0.873676, 1.517732",\ + "0.275633, 0.440922, 0.615763, 0.937589, 1.581241",\ + "0.575653, 0.790792, 0.966147, 1.286330, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.024114, 0.299801, 0.633056, 1.249558, 2.482564",\ + "0.028631, 0.300789, 0.635003, 1.249558, 2.482564",\ + "0.041577, 0.303044, 0.635039, 1.249558, 2.482564",\ + "0.053483, 0.306322, 0.635141, 1.249558, 2.482564",\ + "0.129115, 0.344671, 0.641397, 1.252114, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.067832, 0.172938, 0.284377, 0.488489, 0.896714",\ + "0.155243, 0.260256, 0.371658, 0.575794, 0.984068",\ + "0.235603, 0.340590, 0.451685, 0.655823, 1.064099",\ + "0.292298, 0.398139, 0.509228, 0.713068, 1.120747",\ + "0.586128, 0.701477, 0.812860, 1.016081, 1.422524"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.024575, 0.187425, 0.387787, 0.759976, 1.504353",\ + "0.024575, 0.187570, 0.388291, 0.759976, 1.504353",\ + "0.025658, 0.187570, 0.388291, 0.759976, 1.504353",\ + "0.027727, 0.187570, 0.388291, 0.759976, 1.504353",\ + "0.046336, 0.191539, 0.388291, 0.759976, 1.504633"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[2]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.048192, 0.201225, 0.376587, 0.699339, 1.344843",\ + "0.134509, 0.288400, 0.463692, 0.786054, 1.430777",\ + "0.217716, 0.376528, 0.551648, 0.873676, 1.517732",\ + "0.275633, 0.440922, 0.615763, 0.937589, 1.581241",\ + "0.575653, 0.790792, 0.966147, 1.286330, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.024114, 0.299801, 0.633056, 1.248329, 2.473548",\ + "0.028631, 0.300789, 0.635003, 1.248329, 2.473548",\ + "0.041577, 0.303044, 0.635039, 1.248404, 2.473548",\ + "0.053483, 0.306322, 0.635141, 1.249148, 2.473548",\ + "0.129115, 0.344671, 0.641397, 1.252114, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.067832, 0.172938, 0.284377, 0.488489, 0.896714",\ + "0.155243, 0.260256, 0.371658, 0.575794, 0.984068",\ + "0.235603, 0.340590, 0.451685, 0.655823, 1.064099",\ + "0.292298, 0.398139, 0.509228, 0.713068, 1.120747",\ + "0.586128, 0.701477, 0.812860, 1.016081, 1.422524"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.024575, 0.186626, 0.386280, 0.757745, 1.500676",\ + "0.024575, 0.186626, 0.386280, 0.757745, 1.500676",\ + "0.025658, 0.186626, 0.386280, 0.757745, 1.500676",\ + "0.027727, 0.187236, 0.386737, 0.758647, 1.502467",\ + "0.046336, 0.191539, 0.386809, 0.759417, 1.504633"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[2]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024114, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.215993, 0.170064, 0.139864, 0.128520, 0.142206",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024575, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.250605, 0.175284, 0.107125, 0.084158, 0.147071",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[2]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024114, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.147920, -0.105503, -0.071016, -0.031593, 0.274454",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024575, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.163761, -0.097846, -0.040187, 0.001774, 0.222382",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[2]_hldr*/ + +} /* end of pin dpram_rmf_o[2] */ + +pin("dpram_rmf_o[1]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.003002 ; + + /* Other user defined attributes. */ + original_pin : dpram_rmf_o[1]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003002, 0.076001, 0.162754, 0.322506, 0.642011"); + values ( "0.050861, 0.203214, 0.378080, 0.700335, 1.344843",\ + "0.137325, 0.290388, 0.465183, 0.787048, 1.430777",\ + "0.221189, 0.378514, 0.553137, 0.874669, 1.517732",\ + "0.279768, 0.442905, 0.617252, 0.938582, 1.581241",\ + "0.583788, 0.792786, 0.967628, 1.287318, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003002, 0.076001, 0.162754, 0.322506, 0.642011"); + values ( "0.027696, 0.303573, 0.635907, 1.251459, 2.482564",\ + "0.031840, 0.304583, 0.637840, 1.251459, 2.482564",\ + "0.044392, 0.306804, 0.637876, 1.251459, 2.482564",\ + "0.056346, 0.310032, 0.637981, 1.251459, 2.482564",\ + "0.132705, 0.347895, 0.644222, 1.253997, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003002, 0.076001, 0.162754, 0.322506, 0.642011"); + values ( "0.070172, 0.174163, 0.285281, 0.489079, 0.896674",\ + "0.157576, 0.261481, 0.372562, 0.576384, 0.984028",\ + "0.237972, 0.341811, 0.452589, 0.656412, 1.064059",\ + "0.294761, 0.399360, 0.510131, 0.713656, 1.120707",\ + "0.589569, 0.702704, 0.813760, 1.016668, 1.422484"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003002, 0.076001, 0.162754, 0.322506, 0.642011"); + values ( "0.026989, 0.189618, 0.389436, 0.761051, 1.504280",\ + "0.026989, 0.189769, 0.389937, 0.761051, 1.504280",\ + "0.027967, 0.189769, 0.389937, 0.761051, 1.504280",\ + "0.029933, 0.189769, 0.389937, 0.761051, 1.504280",\ + "0.048080, 0.193656, 0.389937, 0.761051, 1.504560"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[1]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003002, 0.076001, 0.162754, 0.322506, 0.642011"); + values ( "0.050861, 0.203214, 0.378080, 0.700335, 1.344843",\ + "0.137325, 0.290388, 0.465183, 0.787048, 1.430777",\ + "0.221189, 0.378514, 0.553137, 0.874669, 1.517732",\ + "0.279768, 0.442905, 0.617252, 0.938582, 1.581241",\ + "0.583788, 0.792786, 0.967628, 1.287318, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003002, 0.076001, 0.162754, 0.322506, 0.642011"); + values ( "0.027696, 0.303573, 0.635907, 1.250220, 2.473548",\ + "0.031840, 0.304583, 0.637840, 1.250220, 2.473548",\ + "0.044392, 0.306804, 0.637876, 1.250296, 2.473548",\ + "0.056346, 0.310032, 0.637981, 1.251042, 2.473548",\ + "0.132705, 0.347895, 0.644222, 1.253997, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003002, 0.076001, 0.162754, 0.322506, 0.642011"); + values ( "0.070172, 0.174163, 0.285281, 0.489079, 0.896674",\ + "0.157576, 0.261481, 0.372562, 0.576384, 0.984028",\ + "0.237972, 0.341811, 0.452589, 0.656412, 1.064059",\ + "0.294761, 0.399360, 0.510131, 0.713656, 1.120707",\ + "0.589569, 0.702704, 0.813760, 1.016668, 1.422484"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003002, 0.076001, 0.162754, 0.322506, 0.642011"); + values ( "0.026989, 0.188809, 0.387926, 0.758818, 1.500603",\ + "0.026989, 0.188809, 0.387926, 0.758818, 1.500603",\ + "0.027967, 0.188809, 0.387926, 0.758818, 1.500603",\ + "0.029933, 0.189417, 0.388385, 0.759721, 1.502395",\ + "0.048080, 0.193656, 0.388460, 0.760493, 1.504560"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[1]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.027696, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.217652, 0.171723, 0.141523, 0.130179, 0.143864",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026989, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.251704, 0.176383, 0.108224, 0.085257, 0.148171",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[1]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.027696, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.149579, -0.107162, -0.072675, -0.033251, 0.272796",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026989, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.164860, -0.098945, -0.041286, 0.000675, 0.221283",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[1]_hldr*/ + +} /* end of pin dpram_rmf_o[1] */ + +pin("dpram_rmf_o[0]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002026 ; + + /* Other user defined attributes. */ + original_pin : dpram_rmf_o[0]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.048221, 0.201247, 0.376603, 0.699350, 1.344843",\ + "0.134540, 0.288422, 0.463709, 0.786065, 1.430777",\ + "0.217754, 0.376549, 0.551664, 0.873687, 1.517732",\ + "0.275678, 0.440944, 0.615780, 0.937600, 1.581241",\ + "0.575742, 0.790814, 0.966163, 1.286341, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.024153, 0.299842, 0.633087, 1.249579, 2.482563",\ + "0.028666, 0.300830, 0.635034, 1.249579, 2.482563",\ + "0.041608, 0.303085, 0.635070, 1.249579, 2.482563",\ + "0.053514, 0.306363, 0.635172, 1.249579, 2.482563",\ + "0.129154, 0.344706, 0.641428, 1.252134, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.067848, 0.172946, 0.284382, 0.488491, 0.896709",\ + "0.155259, 0.260265, 0.371663, 0.575796, 0.984062",\ + "0.235619, 0.340599, 0.451690, 0.655824, 1.064094",\ + "0.292315, 0.398147, 0.509233, 0.713069, 1.120741",\ + "0.586152, 0.701486, 0.812865, 1.016083, 1.422518"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.024592, 0.187440, 0.387796, 0.759979, 1.504343",\ + "0.024592, 0.187585, 0.388300, 0.759979, 1.504343",\ + "0.025674, 0.187585, 0.388300, 0.759979, 1.504343",\ + "0.027742, 0.187585, 0.388300, 0.759979, 1.504343",\ + "0.046348, 0.191554, 0.388300, 0.759979, 1.504623"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[0]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.048221, 0.201247, 0.376603, 0.699350, 1.344843",\ + "0.134540, 0.288422, 0.463709, 0.786065, 1.430777",\ + "0.217754, 0.376549, 0.551664, 0.873687, 1.517732",\ + "0.275678, 0.440944, 0.615780, 0.937600, 1.581241",\ + "0.575742, 0.790814, 0.966163, 1.286341, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.024153, 0.299842, 0.633087, 1.248350, 2.473548",\ + "0.028666, 0.300830, 0.635034, 1.248350, 2.473548",\ + "0.041608, 0.303085, 0.635070, 1.248425, 2.473548",\ + "0.053514, 0.306363, 0.635172, 1.249169, 2.473548",\ + "0.129154, 0.344706, 0.641428, 1.252134, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.067848, 0.172946, 0.284382, 0.488491, 0.896709",\ + "0.155259, 0.260265, 0.371663, 0.575796, 0.984062",\ + "0.235619, 0.340599, 0.451690, 0.655824, 1.064094",\ + "0.292315, 0.398147, 0.509233, 0.713069, 1.120741",\ + "0.586152, 0.701486, 0.812865, 1.016083, 1.422518"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.024592, 0.186641, 0.386289, 0.757748, 1.500666",\ + "0.024592, 0.186641, 0.386289, 0.757748, 1.500666",\ + "0.025674, 0.186641, 0.386289, 0.757748, 1.500666",\ + "0.027742, 0.187251, 0.386746, 0.758650, 1.502457",\ + "0.046348, 0.191554, 0.386818, 0.759420, 1.504623"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[0]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.216011, 0.170082, 0.139882, 0.128539, 0.142224",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024592, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.250613, 0.175291, 0.107132, 0.084165, 0.147079",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[0]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.147938, -0.105521, -0.071034, -0.031611, 0.274436",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024592, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.163769, -0.097854, -0.040195, 0.001766, 0.222374",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rmf_o[0]_hldr*/ + +} /* end of pin dpram_rmf_o[0] */ +} /* end of bus dpram_rmf_o */ +bus ( dpram_rml_o ) { + + bus_type : BUS10_type8 ; + direction : output ; + +pin("dpram_rml_o[9]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.003142 ; + + /* Other user defined attributes. */ + original_pin : dpram_rml_o[9]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003142, 0.076141, 0.162859, 0.322576, 0.642011"); + values ( "0.051240, 0.203496, 0.378292, 0.700476, 1.344843",\ + "0.137724, 0.290671, 0.465395, 0.787189, 1.430777",\ + "0.221682, 0.378796, 0.553349, 0.874810, 1.517732",\ + "0.280355, 0.443186, 0.617463, 0.938722, 1.581241",\ + "0.584942, 0.793069, 0.967839, 1.287458, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003142, 0.076141, 0.162859, 0.322576, 0.642011"); + values ( "0.028205, 0.304109, 0.636312, 1.251729, 2.482563",\ + "0.032295, 0.305121, 0.638243, 1.251729, 2.482563",\ + "0.044791, 0.307337, 0.638279, 1.251729, 2.482563",\ + "0.056753, 0.310558, 0.638384, 1.251729, 2.482563",\ + "0.133215, 0.348353, 0.644623, 1.254264, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003142, 0.076141, 0.162859, 0.322576, 0.642011"); + values ( "0.070508, 0.174340, 0.285412, 0.489165, 0.896671",\ + "0.157911, 0.261657, 0.372693, 0.576470, 0.984024",\ + "0.238313, 0.341986, 0.452720, 0.656498, 1.064056",\ + "0.295115, 0.399536, 0.510261, 0.713742, 1.120703",\ + "0.590063, 0.702880, 0.813890, 1.016754, 1.422480"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003142, 0.076141, 0.162859, 0.322576, 0.642011"); + values ( "0.027336, 0.189933, 0.389674, 0.761207, 1.504274",\ + "0.027336, 0.190085, 0.390175, 0.761207, 1.504274",\ + "0.028299, 0.190085, 0.390175, 0.761207, 1.504274",\ + "0.030250, 0.190085, 0.390175, 0.761207, 1.504274",\ + "0.048330, 0.193960, 0.390175, 0.761207, 1.504554"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[9]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003142, 0.076141, 0.162859, 0.322576, 0.642011"); + values ( "0.051240, 0.203496, 0.378292, 0.700476, 1.344843",\ + "0.137724, 0.290671, 0.465395, 0.787189, 1.430777",\ + "0.221682, 0.378796, 0.553349, 0.874810, 1.517732",\ + "0.280355, 0.443186, 0.617463, 0.938722, 1.581241",\ + "0.584942, 0.793069, 0.967839, 1.287458, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003142, 0.076141, 0.162859, 0.322576, 0.642011"); + values ( "0.028205, 0.304109, 0.636312, 1.250489, 2.473548",\ + "0.032295, 0.305121, 0.638243, 1.250489, 2.473548",\ + "0.044791, 0.307337, 0.638279, 1.250564, 2.473548",\ + "0.056753, 0.310558, 0.638384, 1.251310, 2.473548",\ + "0.133215, 0.348353, 0.644623, 1.254264, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003142, 0.076141, 0.162859, 0.322576, 0.642011"); + values ( "0.070508, 0.174340, 0.285412, 0.489165, 0.896671",\ + "0.157911, 0.261657, 0.372693, 0.576470, 0.984024",\ + "0.238313, 0.341986, 0.452720, 0.656498, 1.064056",\ + "0.295115, 0.399536, 0.510261, 0.713742, 1.120703",\ + "0.590063, 0.702880, 0.813890, 1.016754, 1.422480"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003142, 0.076141, 0.162859, 0.322576, 0.642011"); + values ( "0.027336, 0.189123, 0.388163, 0.758974, 1.500597",\ + "0.027336, 0.189123, 0.388163, 0.758974, 1.500597",\ + "0.028299, 0.189123, 0.388163, 0.758974, 1.500597",\ + "0.030250, 0.189730, 0.388622, 0.759878, 1.502388",\ + "0.048330, 0.193960, 0.388698, 0.760650, 1.504554"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[9]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.028205, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.217887, 0.171958, 0.141759, 0.130415, 0.144100",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.027336, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.251862, 0.176541, 0.108382, 0.085415, 0.148328",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[9]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.028205, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.149814, -0.107397, -0.072910, -0.033487, 0.272560",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.027336, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.165018, -0.099103, -0.041444, 0.000517, 0.221125",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[9]_hldr*/ + +} /* end of pin dpram_rml_o[9] */ + +pin("dpram_rml_o[8]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002583 ; + + /* Other user defined attributes. */ + original_pin : dpram_rml_o[8]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002583, 0.075582, 0.162440, 0.322297, 0.642011"); + values ( "0.049728, 0.202370, 0.377446, 0.699912, 1.344843",\ + "0.136129, 0.289544, 0.464550, 0.786626, 1.430777",\ + "0.219715, 0.377671, 0.552505, 0.874247, 1.517732",\ + "0.278013, 0.442063, 0.616620, 0.938160, 1.581241",\ + "0.580334, 0.791940, 0.967000, 1.286899, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002583, 0.075582, 0.162440, 0.322297, 0.642011"); + values ( "0.026175, 0.301972, 0.634697, 1.250652, 2.482564",\ + "0.030477, 0.302972, 0.636635, 1.250652, 2.482564",\ + "0.043197, 0.305208, 0.636672, 1.250652, 2.482564",\ + "0.055131, 0.308457, 0.636775, 1.250652, 2.482564",\ + "0.131181, 0.346526, 0.643023, 1.253198, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002583, 0.075582, 0.162440, 0.322297, 0.642011"); + values ( "0.069162, 0.173635, 0.284889, 0.488820, 0.896683",\ + "0.156569, 0.260953, 0.372170, 0.576125, 0.984036",\ + "0.236950, 0.341284, 0.452197, 0.656154, 1.064068",\ + "0.293698, 0.398833, 0.509739, 0.713398, 1.120715",\ + "0.588084, 0.702174, 0.813370, 1.016411, 1.422492"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002583, 0.075582, 0.162440, 0.322297, 0.642011"); + values ( "0.025948, 0.188671, 0.388720, 0.760579, 1.504295",\ + "0.025948, 0.188820, 0.389223, 0.760579, 1.504295",\ + "0.026971, 0.188820, 0.389223, 0.760579, 1.504295",\ + "0.028981, 0.188820, 0.389223, 0.760579, 1.504295",\ + "0.047327, 0.192742, 0.389223, 0.760579, 1.504576"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[8]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002583, 0.075582, 0.162440, 0.322297, 0.642011"); + values ( "0.049728, 0.202370, 0.377446, 0.699912, 1.344843",\ + "0.136129, 0.289544, 0.464550, 0.786626, 1.430777",\ + "0.219715, 0.377671, 0.552505, 0.874247, 1.517732",\ + "0.278013, 0.442063, 0.616620, 0.938160, 1.581241",\ + "0.580334, 0.791940, 0.967000, 1.286899, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002583, 0.075582, 0.162440, 0.322297, 0.642011"); + values ( "0.026175, 0.301972, 0.634697, 1.249417, 2.473548",\ + "0.030477, 0.302972, 0.636635, 1.249417, 2.473548",\ + "0.043197, 0.305208, 0.636672, 1.249493, 2.473548",\ + "0.055131, 0.308457, 0.636775, 1.250238, 2.473548",\ + "0.131181, 0.346526, 0.643023, 1.253198, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002583, 0.075582, 0.162440, 0.322297, 0.642011"); + values ( "0.069162, 0.173635, 0.284889, 0.488820, 0.896683",\ + "0.156569, 0.260953, 0.372170, 0.576125, 0.984036",\ + "0.236950, 0.341284, 0.452197, 0.656154, 1.064068",\ + "0.293698, 0.398833, 0.509739, 0.713398, 1.120715",\ + "0.588084, 0.702174, 0.813370, 1.016411, 1.422492"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002583, 0.075582, 0.162440, 0.322297, 0.642011"); + values ( "0.025948, 0.187867, 0.387212, 0.758347, 1.500618",\ + "0.025948, 0.187867, 0.387212, 0.758347, 1.500618",\ + "0.026971, 0.187867, 0.387212, 0.758347, 1.500618",\ + "0.028981, 0.188476, 0.387670, 0.759250, 1.502410",\ + "0.047327, 0.192742, 0.387744, 0.760021, 1.504576"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[8]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026175, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.216947, 0.171018, 0.140819, 0.129475, 0.143160",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025948, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.251230, 0.175909, 0.107750, 0.084782, 0.147696",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[8]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026175, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.148875, -0.106458, -0.071971, -0.032547, 0.273500",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025948, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.164386, -0.098471, -0.040812, 0.001149, 0.221757",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[8]_hldr*/ + +} /* end of pin dpram_rml_o[8] */ + +pin("dpram_rml_o[7]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002594 ; + + /* Other user defined attributes. */ + original_pin : dpram_rml_o[7]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002594, 0.075593, 0.162448, 0.322302, 0.642011"); + values ( "0.049757, 0.202391, 0.377463, 0.699923, 1.344843",\ + "0.136160, 0.289566, 0.464567, 0.786637, 1.430777",\ + "0.219753, 0.377693, 0.552521, 0.874258, 1.517732",\ + "0.278058, 0.442085, 0.616637, 0.938171, 1.581241",\ + "0.580424, 0.791962, 0.967016, 1.286910, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002594, 0.075593, 0.162448, 0.322302, 0.642011"); + values ( "0.026215, 0.302013, 0.634728, 1.250673, 2.482563",\ + "0.030513, 0.303014, 0.636667, 1.250673, 2.482563",\ + "0.043228, 0.305249, 0.636703, 1.250673, 2.482563",\ + "0.055162, 0.308498, 0.636806, 1.250673, 2.482563",\ + "0.131221, 0.346562, 0.643054, 1.253218, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002594, 0.075593, 0.162448, 0.322302, 0.642011"); + values ( "0.069192, 0.173650, 0.284901, 0.488829, 0.896685",\ + "0.156600, 0.260968, 0.372182, 0.576134, 0.984038",\ + "0.236980, 0.341300, 0.452209, 0.656163, 1.064070",\ + "0.293730, 0.398849, 0.509751, 0.713407, 1.120717",\ + "0.588129, 0.702190, 0.813382, 1.016419, 1.422494"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002594, 0.075593, 0.162448, 0.322302, 0.642011"); + values ( "0.025979, 0.188700, 0.388743, 0.760595, 1.504299",\ + "0.025979, 0.188849, 0.389245, 0.760595, 1.504299",\ + "0.027001, 0.188849, 0.389245, 0.760595, 1.504299",\ + "0.029010, 0.188849, 0.389245, 0.760595, 1.504299",\ + "0.047350, 0.192770, 0.389245, 0.760595, 1.504579"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[7]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002594, 0.075593, 0.162448, 0.322302, 0.642011"); + values ( "0.049757, 0.202391, 0.377463, 0.699923, 1.344843",\ + "0.136160, 0.289566, 0.464567, 0.786637, 1.430777",\ + "0.219753, 0.377693, 0.552521, 0.874258, 1.517732",\ + "0.278058, 0.442085, 0.616637, 0.938171, 1.581241",\ + "0.580424, 0.791962, 0.967016, 1.286910, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002594, 0.075593, 0.162448, 0.322302, 0.642011"); + values ( "0.026215, 0.302013, 0.634728, 1.249438, 2.473548",\ + "0.030513, 0.303014, 0.636667, 1.249438, 2.473548",\ + "0.043228, 0.305249, 0.636703, 1.249514, 2.473548",\ + "0.055162, 0.308498, 0.636806, 1.250259, 2.473548",\ + "0.131221, 0.346562, 0.643054, 1.253218, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002594, 0.075593, 0.162448, 0.322302, 0.642011"); + values ( "0.069192, 0.173650, 0.284901, 0.488829, 0.896685",\ + "0.156600, 0.260968, 0.372182, 0.576134, 0.984038",\ + "0.236980, 0.341300, 0.452209, 0.656163, 1.064070",\ + "0.293730, 0.398849, 0.509751, 0.713407, 1.120717",\ + "0.588129, 0.702190, 0.813382, 1.016419, 1.422494"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002594, 0.075593, 0.162448, 0.322302, 0.642011"); + values ( "0.025979, 0.187895, 0.387234, 0.758363, 1.500622",\ + "0.025979, 0.187895, 0.387234, 0.758363, 1.500622",\ + "0.027001, 0.187895, 0.387234, 0.758363, 1.500622",\ + "0.029010, 0.188504, 0.387692, 0.759266, 1.502414",\ + "0.047350, 0.192770, 0.387766, 0.760037, 1.504579"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[7]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026215, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.216966, 0.171037, 0.140837, 0.129493, 0.143178",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025979, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.251244, 0.175923, 0.107764, 0.084797, 0.147711",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[7]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026215, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.148893, -0.106476, -0.071989, -0.032565, 0.273482",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025979, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.164400, -0.098485, -0.040826, 0.001135, 0.221743",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[7]_hldr*/ + +} /* end of pin dpram_rml_o[7] */ + +pin("dpram_rml_o[6]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002460 ; + + /* Other user defined attributes. */ + original_pin : dpram_rml_o[6]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002460, 0.075458, 0.162347, 0.322235, 0.642011"); + values ( "0.049394, 0.202121, 0.377259, 0.699787, 1.344843",\ + "0.135777, 0.289295, 0.464364, 0.786501, 1.430777",\ + "0.219280, 0.377422, 0.552318, 0.874123, 1.517732",\ + "0.277495, 0.441815, 0.616434, 0.938036, 1.581241",\ + "0.579315, 0.791690, 0.966814, 1.286775, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002460, 0.075458, 0.162347, 0.322235, 0.642011"); + values ( "0.025727, 0.301499, 0.634339, 1.250414, 2.482564",\ + "0.030075, 0.302497, 0.636280, 1.250414, 2.482564",\ + "0.042844, 0.304737, 0.636316, 1.250414, 2.482564",\ + "0.054772, 0.307992, 0.636419, 1.250414, 2.482564",\ + "0.130732, 0.346122, 0.642669, 1.252962, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002460, 0.075458, 0.162347, 0.322235, 0.642011"); + values ( "0.068872, 0.173483, 0.284777, 0.488748, 0.896689",\ + "0.156281, 0.260801, 0.372058, 0.576053, 0.984043",\ + "0.236656, 0.341133, 0.452085, 0.656082, 1.064075",\ + "0.293393, 0.398682, 0.509628, 0.713326, 1.120722",\ + "0.587658, 0.702023, 0.813259, 1.016339, 1.422499"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002460, 0.075458, 0.162347, 0.322235, 0.642011"); + values ( "0.025649, 0.188400, 0.388517, 0.760448, 1.504308",\ + "0.025649, 0.188548, 0.389020, 0.760448, 1.504308",\ + "0.026685, 0.188548, 0.389020, 0.760448, 1.504308",\ + "0.028708, 0.188548, 0.389020, 0.760448, 1.504308",\ + "0.047111, 0.192480, 0.389020, 0.760448, 1.504588"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[6]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002460, 0.075458, 0.162347, 0.322235, 0.642011"); + values ( "0.049394, 0.202121, 0.377259, 0.699787, 1.344843",\ + "0.135777, 0.289295, 0.464364, 0.786501, 1.430777",\ + "0.219280, 0.377422, 0.552318, 0.874123, 1.517732",\ + "0.277495, 0.441815, 0.616434, 0.938036, 1.581241",\ + "0.579315, 0.791690, 0.966814, 1.286775, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002460, 0.075458, 0.162347, 0.322235, 0.642011"); + values ( "0.025727, 0.301499, 0.634339, 1.249181, 2.473548",\ + "0.030075, 0.302497, 0.636280, 1.249181, 2.473548",\ + "0.042844, 0.304737, 0.636316, 1.249256, 2.473548",\ + "0.054772, 0.307992, 0.636419, 1.250001, 2.473548",\ + "0.130732, 0.346122, 0.642669, 1.252962, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002460, 0.075458, 0.162347, 0.322235, 0.642011"); + values ( "0.068872, 0.173483, 0.284777, 0.488748, 0.896689",\ + "0.156281, 0.260801, 0.372058, 0.576053, 0.984043",\ + "0.236656, 0.341133, 0.452085, 0.656082, 1.064075",\ + "0.293393, 0.398682, 0.509628, 0.713326, 1.120722",\ + "0.587658, 0.702023, 0.813259, 1.016339, 1.422499"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002460, 0.075458, 0.162347, 0.322235, 0.642011"); + values ( "0.025649, 0.187597, 0.387009, 0.758216, 1.500631",\ + "0.025649, 0.187597, 0.387009, 0.758216, 1.500631",\ + "0.026685, 0.187597, 0.387009, 0.758216, 1.500631",\ + "0.028708, 0.188206, 0.387467, 0.759119, 1.502422",\ + "0.047111, 0.192480, 0.387540, 0.759889, 1.504588"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[6]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025727, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.216740, 0.170811, 0.140611, 0.129267, 0.142952",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025649, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.251094, 0.175772, 0.107614, 0.084646, 0.147560",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[6]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025727, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.148667, -0.106250, -0.071763, -0.032339, 0.273708",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025649, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.164250, -0.098335, -0.040676, 0.001285, 0.221893",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[6]_hldr*/ + +} /* end of pin dpram_rml_o[6] */ + +pin("dpram_rml_o[5]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002976 ; + + /* Other user defined attributes. */ + original_pin : dpram_rml_o[5]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002976, 0.075975, 0.162735, 0.322493, 0.642011"); + values ( "0.050791, 0.203162, 0.378041, 0.700308, 1.344843",\ + "0.137251, 0.290336, 0.465144, 0.787022, 1.430777",\ + "0.221098, 0.378462, 0.553098, 0.874643, 1.517732",\ + "0.279660, 0.442853, 0.617213, 0.938556, 1.581241",\ + "0.583574, 0.792734, 0.967589, 1.287292, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002976, 0.075975, 0.162735, 0.322493, 0.642011"); + values ( "0.027602, 0.303474, 0.635832, 1.251409, 2.482564",\ + "0.031755, 0.304483, 0.637765, 1.251409, 2.482564",\ + "0.044318, 0.306705, 0.637801, 1.251409, 2.482564",\ + "0.056271, 0.309934, 0.637906, 1.251409, 2.482564",\ + "0.132611, 0.347810, 0.644148, 1.253948, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002976, 0.075975, 0.162735, 0.322493, 0.642011"); + values ( "0.070108, 0.174130, 0.285256, 0.489062, 0.896674",\ + "0.157512, 0.261448, 0.372537, 0.576367, 0.984027",\ + "0.237907, 0.341777, 0.452564, 0.656396, 1.064059",\ + "0.294694, 0.399327, 0.510106, 0.713639, 1.120707",\ + "0.589475, 0.702670, 0.813735, 1.016652, 1.422484"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002976, 0.075975, 0.162735, 0.322493, 0.642011"); + values ( "0.026923, 0.189558, 0.389390, 0.761020, 1.504280",\ + "0.026923, 0.189709, 0.389892, 0.761020, 1.504280",\ + "0.027904, 0.189709, 0.389892, 0.761020, 1.504280",\ + "0.029873, 0.189709, 0.389892, 0.761020, 1.504280",\ + "0.048032, 0.193598, 0.389892, 0.761020, 1.504560"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[5]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002976, 0.075975, 0.162735, 0.322493, 0.642011"); + values ( "0.050791, 0.203162, 0.378041, 0.700308, 1.344843",\ + "0.137251, 0.290336, 0.465144, 0.787022, 1.430777",\ + "0.221098, 0.378462, 0.553098, 0.874643, 1.517732",\ + "0.279660, 0.442853, 0.617213, 0.938556, 1.581241",\ + "0.583574, 0.792734, 0.967589, 1.287292, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002976, 0.075975, 0.162735, 0.322493, 0.642011"); + values ( "0.027602, 0.303474, 0.635832, 1.250171, 2.473548",\ + "0.031755, 0.304483, 0.637765, 1.250171, 2.473548",\ + "0.044318, 0.306705, 0.637801, 1.250246, 2.473548",\ + "0.056271, 0.309934, 0.637906, 1.250992, 2.473548",\ + "0.132611, 0.347810, 0.644148, 1.253948, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002976, 0.075975, 0.162735, 0.322493, 0.642011"); + values ( "0.070108, 0.174130, 0.285256, 0.489062, 0.896674",\ + "0.157512, 0.261448, 0.372537, 0.576367, 0.984027",\ + "0.237907, 0.341777, 0.452564, 0.656396, 1.064059",\ + "0.294694, 0.399327, 0.510106, 0.713639, 1.120707",\ + "0.589475, 0.702670, 0.813735, 1.016652, 1.422484"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002976, 0.075975, 0.162735, 0.322493, 0.642011"); + values ( "0.026923, 0.188750, 0.387880, 0.758788, 1.500602",\ + "0.026923, 0.188750, 0.387880, 0.758788, 1.500602",\ + "0.027904, 0.188750, 0.387880, 0.758788, 1.500602",\ + "0.029873, 0.189357, 0.388339, 0.759691, 1.502394",\ + "0.048032, 0.193598, 0.388414, 0.760463, 1.504560"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[5]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.027602, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.217608, 0.171679, 0.141479, 0.130136, 0.143821",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026923, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.251674, 0.176353, 0.108194, 0.085227, 0.148140",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[5]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.027602, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.149535, -0.107118, -0.072631, -0.033208, 0.272839",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026923, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.164830, -0.098915, -0.041256, 0.000705, 0.221313",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[5]_hldr*/ + +} /* end of pin dpram_rml_o[5] */ + +pin("dpram_rml_o[4]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.004037 ; + + /* Other user defined attributes. */ + original_pin : dpram_rml_o[4]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004037, 0.077035, 0.163530, 0.323024, 0.642011"); + values ( "0.053659, 0.205298, 0.379645, 0.701378, 1.344843",\ + "0.140277, 0.292473, 0.466747, 0.788090, 1.430777",\ + "0.224830, 0.380596, 0.554699, 0.875710, 1.517732",\ + "0.284103, 0.444983, 0.618813, 0.939622, 1.581241",\ + "0.592316, 0.794877, 0.969181, 1.288353, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004037, 0.077035, 0.163530, 0.323024, 0.642011"); + values ( "0.031452, 0.307528, 0.638897, 1.253452, 2.482564",\ + "0.035203, 0.308560, 0.640814, 1.253452, 2.482564",\ + "0.047343, 0.310745, 0.640850, 1.253452, 2.482564",\ + "0.059348, 0.313921, 0.640958, 1.253452, 2.482564",\ + "0.136469, 0.351276, 0.647183, 1.255971, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004037, 0.077035, 0.163530, 0.323024, 0.642011"); + values ( "0.072631, 0.175452, 0.286232, 0.489700, 0.896636",\ + "0.160028, 0.262769, 0.373513, 0.577005, 0.983989",\ + "0.240463, 0.343094, 0.453540, 0.657034, 1.064021",\ + "0.297350, 0.400643, 0.511081, 0.714277, 1.120669",\ + "0.593185, 0.703993, 0.814708, 1.017287, 1.422446"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004037, 0.077035, 0.163530, 0.323024, 0.642011"); + values ( "0.029527, 0.191922, 0.391170, 0.762184, 1.504210",\ + "0.029527, 0.192081, 0.391669, 0.762184, 1.504210",\ + "0.030394, 0.192081, 0.391669, 0.762184, 1.504210",\ + "0.032251, 0.192081, 0.391669, 0.762184, 1.504210",\ + "0.049913, 0.195880, 0.391669, 0.762184, 1.504490"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[4]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004037, 0.077035, 0.163530, 0.323024, 0.642011"); + values ( "0.053659, 0.205298, 0.379645, 0.701378, 1.344843",\ + "0.140277, 0.292473, 0.466747, 0.788090, 1.430777",\ + "0.224830, 0.380596, 0.554699, 0.875710, 1.517732",\ + "0.284103, 0.444983, 0.618813, 0.939622, 1.581241",\ + "0.592316, 0.794877, 0.969181, 1.288353, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004037, 0.077035, 0.163530, 0.323024, 0.642011"); + values ( "0.031452, 0.307528, 0.638897, 1.252203, 2.473548",\ + "0.035203, 0.308560, 0.640814, 1.252203, 2.473548",\ + "0.047343, 0.310745, 0.640850, 1.252279, 2.473548",\ + "0.059348, 0.313921, 0.640958, 1.253027, 2.473548",\ + "0.136469, 0.351276, 0.647183, 1.255971, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004037, 0.077035, 0.163530, 0.323024, 0.642011"); + values ( "0.072631, 0.175452, 0.286232, 0.489700, 0.896636",\ + "0.160028, 0.262769, 0.373513, 0.577005, 0.983989",\ + "0.240463, 0.343094, 0.453540, 0.657034, 1.064021",\ + "0.297350, 0.400643, 0.511081, 0.714277, 1.120669",\ + "0.593185, 0.703993, 0.814708, 1.017287, 1.422446"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004037, 0.077035, 0.163530, 0.323024, 0.642011"); + values ( "0.029527, 0.191105, 0.389657, 0.759949, 1.500533",\ + "0.029527, 0.191105, 0.389657, 0.759949, 1.500533",\ + "0.030394, 0.191105, 0.389657, 0.759949, 1.500533",\ + "0.032251, 0.191709, 0.390118, 0.760853, 1.502324",\ + "0.049913, 0.195880, 0.390196, 0.761627, 1.504490"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[4]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.031452, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.219390, 0.173461, 0.143262, 0.131918, 0.145603",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.029527, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.252859, 0.177538, 0.109379, 0.086412, 0.149326",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[4]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.031452, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.151318, -0.108901, -0.074414, -0.034990, 0.271057",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.029527, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.166015, -0.100100, -0.042441, -0.000480, 0.220128",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[4]_hldr*/ + +} /* end of pin dpram_rml_o[4] */ + +pin("dpram_rml_o[3]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002031 ; + + /* Other user defined attributes. */ + original_pin : dpram_rml_o[3]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002031, 0.075029, 0.162026, 0.322021, 0.642011"); + values ( "0.048234, 0.201257, 0.376611, 0.699355, 1.344843",\ + "0.134553, 0.288431, 0.463716, 0.786070, 1.430777",\ + "0.217771, 0.376559, 0.551671, 0.873691, 1.517732",\ + "0.275698, 0.440953, 0.615787, 0.937605, 1.581241",\ + "0.575781, 0.790824, 0.966170, 1.286346, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002031, 0.075029, 0.162026, 0.322021, 0.642011"); + values ( "0.024170, 0.299860, 0.633100, 1.249588, 2.482563",\ + "0.028681, 0.300849, 0.635047, 1.249588, 2.482563",\ + "0.041621, 0.303103, 0.635083, 1.249588, 2.482563",\ + "0.053528, 0.306381, 0.635185, 1.249588, 2.482563",\ + "0.129172, 0.344721, 0.641441, 1.252143, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002031, 0.075029, 0.162026, 0.322021, 0.642011"); + values ( "0.067866, 0.172955, 0.284390, 0.488497, 0.896712",\ + "0.155277, 0.260274, 0.371670, 0.575802, 0.984065",\ + "0.235637, 0.340608, 0.451697, 0.655831, 1.064097",\ + "0.292333, 0.398157, 0.509240, 0.713075, 1.120745",\ + "0.586178, 0.701495, 0.812873, 1.016089, 1.422521"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002031, 0.075029, 0.162026, 0.322021, 0.642011"); + values ( "0.024610, 0.187457, 0.387810, 0.759990, 1.504349",\ + "0.024610, 0.187602, 0.388314, 0.759990, 1.504349",\ + "0.025692, 0.187602, 0.388314, 0.759990, 1.504349",\ + "0.027759, 0.187602, 0.388314, 0.759990, 1.504349",\ + "0.046361, 0.191570, 0.388314, 0.759990, 1.504629"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[3]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002031, 0.075029, 0.162026, 0.322021, 0.642011"); + values ( "0.048234, 0.201257, 0.376611, 0.699355, 1.344843",\ + "0.134553, 0.288431, 0.463716, 0.786070, 1.430777",\ + "0.217771, 0.376559, 0.551671, 0.873691, 1.517732",\ + "0.275698, 0.440953, 0.615787, 0.937605, 1.581241",\ + "0.575781, 0.790824, 0.966170, 1.286346, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002031, 0.075029, 0.162026, 0.322021, 0.642011"); + values ( "0.024170, 0.299860, 0.633100, 1.248359, 2.473548",\ + "0.028681, 0.300849, 0.635047, 1.248359, 2.473548",\ + "0.041621, 0.303103, 0.635083, 1.248434, 2.473548",\ + "0.053528, 0.306381, 0.635185, 1.249178, 2.473548",\ + "0.129172, 0.344721, 0.641441, 1.252143, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002031, 0.075029, 0.162026, 0.322021, 0.642011"); + values ( "0.067866, 0.172955, 0.284390, 0.488497, 0.896712",\ + "0.155277, 0.260274, 0.371670, 0.575802, 0.984065",\ + "0.235637, 0.340608, 0.451697, 0.655831, 1.064097",\ + "0.292333, 0.398157, 0.509240, 0.713075, 1.120745",\ + "0.586178, 0.701495, 0.812873, 1.016089, 1.422521"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002031, 0.075029, 0.162026, 0.322021, 0.642011"); + values ( "0.024610, 0.186657, 0.386303, 0.757760, 1.500672",\ + "0.024610, 0.186657, 0.386303, 0.757760, 1.500672",\ + "0.025692, 0.186657, 0.386303, 0.757760, 1.500672",\ + "0.027759, 0.187268, 0.386760, 0.758661, 1.502463",\ + "0.046361, 0.191570, 0.386832, 0.759431, 1.504629"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[3]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024170, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.216019, 0.170090, 0.139890, 0.128547, 0.142232",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024610, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.250621, 0.175300, 0.107141, 0.084173, 0.147087",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[3]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024170, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.147946, -0.105529, -0.071042, -0.031619, 0.274428",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024610, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.163777, -0.097862, -0.040203, 0.001758, 0.222366",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[3]_hldr*/ + +} /* end of pin dpram_rml_o[3] */ + +pin("dpram_rml_o[2]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.003654 ; + + /* Other user defined attributes. */ + original_pin : dpram_rml_o[2]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003654, 0.076652, 0.163243, 0.322832, 0.642011"); + values ( "0.052623, 0.204527, 0.379066, 0.700992, 1.344843",\ + "0.139184, 0.291701, 0.466168, 0.787704, 1.430777",\ + "0.223482, 0.379826, 0.554121, 0.875325, 1.517732",\ + "0.282499, 0.444214, 0.618235, 0.939237, 1.581241",\ + "0.589159, 0.794103, 0.968606, 1.287970, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003654, 0.076652, 0.163243, 0.322832, 0.642011"); + values ( "0.030062, 0.306064, 0.637790, 1.252714, 2.482564",\ + "0.033958, 0.307087, 0.639713, 1.252714, 2.482564",\ + "0.046250, 0.309286, 0.639749, 1.252714, 2.482564",\ + "0.058237, 0.312481, 0.639856, 1.252714, 2.482564",\ + "0.135075, 0.350024, 0.646087, 1.255240, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003654, 0.076652, 0.163243, 0.322832, 0.642011"); + values ( "0.071715, 0.174972, 0.285877, 0.489467, 0.896647",\ + "0.159114, 0.262289, 0.373158, 0.576772, 0.984000",\ + "0.239535, 0.342616, 0.453185, 0.656801, 1.064032",\ + "0.296386, 0.400165, 0.510726, 0.714044, 1.120680",\ + "0.591837, 0.703513, 0.814354, 1.017055, 1.422457"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003654, 0.076652, 0.163243, 0.322832, 0.642011"); + values ( "0.028581, 0.191064, 0.390523, 0.761759, 1.504230",\ + "0.028581, 0.191220, 0.391022, 0.761759, 1.504230",\ + "0.029490, 0.191220, 0.391022, 0.761759, 1.504230",\ + "0.031388, 0.191220, 0.391022, 0.761759, 1.504230",\ + "0.049229, 0.195051, 0.391022, 0.761759, 1.504510"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[2]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003654, 0.076652, 0.163243, 0.322832, 0.642011"); + values ( "0.052623, 0.204527, 0.379066, 0.700992, 1.344843",\ + "0.139184, 0.291701, 0.466168, 0.787704, 1.430777",\ + "0.223482, 0.379826, 0.554121, 0.875325, 1.517732",\ + "0.282499, 0.444214, 0.618235, 0.939237, 1.581241",\ + "0.589159, 0.794103, 0.968606, 1.287970, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003654, 0.076652, 0.163243, 0.322832, 0.642011"); + values ( "0.030062, 0.306064, 0.637790, 1.251469, 2.473548",\ + "0.033958, 0.307087, 0.639713, 1.251469, 2.473548",\ + "0.046250, 0.309286, 0.639749, 1.251544, 2.473548",\ + "0.058237, 0.312481, 0.639856, 1.252292, 2.473548",\ + "0.135075, 0.350024, 0.646087, 1.255240, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003654, 0.076652, 0.163243, 0.322832, 0.642011"); + values ( "0.071715, 0.174972, 0.285877, 0.489467, 0.896647",\ + "0.159114, 0.262289, 0.373158, 0.576772, 0.984000",\ + "0.239535, 0.342616, 0.453185, 0.656801, 1.064032",\ + "0.296386, 0.400165, 0.510726, 0.714044, 1.120680",\ + "0.591837, 0.703513, 0.814354, 1.017055, 1.422457"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003654, 0.076652, 0.163243, 0.322832, 0.642011"); + values ( "0.028581, 0.190249, 0.389010, 0.759525, 1.500553",\ + "0.028581, 0.190249, 0.389010, 0.759525, 1.500553",\ + "0.029490, 0.190249, 0.389010, 0.759525, 1.500553",\ + "0.031388, 0.190855, 0.389471, 0.760429, 1.502345",\ + "0.049229, 0.195051, 0.389548, 0.761202, 1.504510"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[2]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.030062, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.218747, 0.172818, 0.142618, 0.131274, 0.144959",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.028581, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.252429, 0.177108, 0.108949, 0.085981, 0.148895",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[2]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.030062, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.150674, -0.108257, -0.073770, -0.034347, 0.271701",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.028581, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.165584, -0.099669, -0.042010, -0.000049, 0.220558",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[2]_hldr*/ + +} /* end of pin dpram_rml_o[2] */ + +pin("dpram_rml_o[1]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002005 ; + + /* Other user defined attributes. */ + original_pin : dpram_rml_o[1]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.048165, 0.201205, 0.376572, 0.699329, 1.344843",\ + "0.134480, 0.288380, 0.463677, 0.786044, 1.430777",\ + "0.217680, 0.376507, 0.551633, 0.873666, 1.517732",\ + "0.275590, 0.440902, 0.615748, 0.937579, 1.581241",\ + "0.575569, 0.790772, 0.966132, 1.286320, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.024077, 0.299762, 0.633026, 1.249539, 2.482564",\ + "0.028598, 0.300750, 0.634974, 1.249539, 2.482564",\ + "0.041548, 0.303005, 0.635010, 1.249539, 2.482564",\ + "0.053453, 0.306284, 0.635112, 1.249539, 2.482564",\ + "0.129078, 0.344637, 0.641368, 1.252094, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.067810, 0.172926, 0.284369, 0.488484, 0.896715",\ + "0.155221, 0.260244, 0.371649, 0.575789, 0.984069",\ + "0.235580, 0.340579, 0.451676, 0.655818, 1.064101",\ + "0.292274, 0.398127, 0.509219, 0.713062, 1.120748",\ + "0.586096, 0.701465, 0.812852, 1.016076, 1.422525"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.024552, 0.187404, 0.387772, 0.759966, 1.504356",\ + "0.024552, 0.187549, 0.388276, 0.759966, 1.504356",\ + "0.025636, 0.187549, 0.388276, 0.759966, 1.504356",\ + "0.027706, 0.187549, 0.388276, 0.759966, 1.504356",\ + "0.046319, 0.191519, 0.388276, 0.759966, 1.504636"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[1]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.048165, 0.201205, 0.376572, 0.699329, 1.344843",\ + "0.134480, 0.288380, 0.463677, 0.786044, 1.430777",\ + "0.217680, 0.376507, 0.551633, 0.873666, 1.517732",\ + "0.275590, 0.440902, 0.615748, 0.937579, 1.581241",\ + "0.575569, 0.790772, 0.966132, 1.286320, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.024077, 0.299762, 0.633026, 1.248310, 2.473548",\ + "0.028598, 0.300750, 0.634974, 1.248310, 2.473548",\ + "0.041548, 0.303005, 0.635010, 1.248385, 2.473548",\ + "0.053453, 0.306284, 0.635112, 1.249129, 2.473548",\ + "0.129078, 0.344637, 0.641368, 1.252094, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.067810, 0.172926, 0.284369, 0.488484, 0.896715",\ + "0.155221, 0.260244, 0.371649, 0.575789, 0.984069",\ + "0.235580, 0.340579, 0.451676, 0.655818, 1.064101",\ + "0.292274, 0.398127, 0.509219, 0.713062, 1.120748",\ + "0.586096, 0.701465, 0.812852, 1.016076, 1.422525"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.024552, 0.186605, 0.386265, 0.757736, 1.500678",\ + "0.024552, 0.186605, 0.386265, 0.757736, 1.500678",\ + "0.025636, 0.186605, 0.386265, 0.757736, 1.500678",\ + "0.027706, 0.187215, 0.386722, 0.758638, 1.502470",\ + "0.046319, 0.191519, 0.386794, 0.759408, 1.504636"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[1]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024077, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.215976, 0.170047, 0.139847, 0.128503, 0.142188",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024552, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.250595, 0.175273, 0.107114, 0.084147, 0.147061",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[1]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024077, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.147903, -0.105486, -0.070999, -0.031576, 0.274471",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024552, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.163751, -0.097835, -0.040177, 0.001784, 0.222392",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[1]_hldr*/ + +} /* end of pin dpram_rml_o[1] */ + +pin("dpram_rml_o[0]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002547 ; + + /* Other user defined attributes. */ + original_pin : dpram_rml_o[0]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002547, 0.075545, 0.162413, 0.322279, 0.642011"); + values ( "0.049629, 0.202296, 0.377391, 0.699875, 1.344843",\ + "0.136025, 0.289471, 0.464495, 0.786589, 1.430777",\ + "0.219586, 0.377597, 0.552450, 0.874211, 1.517732",\ + "0.277859, 0.441990, 0.616565, 0.938124, 1.581241",\ + "0.580033, 0.791866, 0.966945, 1.286862, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002547, 0.075545, 0.162413, 0.322279, 0.642011"); + values ( "0.026043, 0.301832, 0.634591, 1.250582, 2.482563",\ + "0.030358, 0.302831, 0.636530, 1.250582, 2.482563",\ + "0.043092, 0.305068, 0.636566, 1.250582, 2.482563",\ + "0.055024, 0.308320, 0.636670, 1.250582, 2.482563",\ + "0.131048, 0.346407, 0.642918, 1.253128, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002547, 0.075545, 0.162413, 0.322279, 0.642011"); + values ( "0.069083, 0.173593, 0.284859, 0.488802, 0.896688",\ + "0.156491, 0.260911, 0.372140, 0.576107, 0.984042",\ + "0.236870, 0.341243, 0.452167, 0.656136, 1.064073",\ + "0.293615, 0.398792, 0.509709, 0.713380, 1.120721",\ + "0.587968, 0.702133, 0.813340, 1.016393, 1.422498"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002547, 0.075545, 0.162413, 0.322279, 0.642011"); + values ( "0.025866, 0.188597, 0.388667, 0.760546, 1.504306",\ + "0.025866, 0.188746, 0.389169, 0.760546, 1.504306",\ + "0.026893, 0.188746, 0.389169, 0.760546, 1.504306",\ + "0.028907, 0.188746, 0.389169, 0.760546, 1.504306",\ + "0.047268, 0.192671, 0.389169, 0.760546, 1.504586"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[0]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002547, 0.075545, 0.162413, 0.322279, 0.642011"); + values ( "0.049629, 0.202296, 0.377391, 0.699875, 1.344843",\ + "0.136025, 0.289471, 0.464495, 0.786589, 1.430777",\ + "0.219586, 0.377597, 0.552450, 0.874211, 1.517732",\ + "0.277859, 0.441990, 0.616565, 0.938124, 1.581241",\ + "0.580033, 0.791866, 0.966945, 1.286862, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002547, 0.075545, 0.162413, 0.322279, 0.642011"); + values ( "0.026043, 0.301832, 0.634591, 1.249347, 2.473548",\ + "0.030358, 0.302831, 0.636530, 1.249347, 2.473548",\ + "0.043092, 0.305068, 0.636566, 1.249423, 2.473548",\ + "0.055024, 0.308320, 0.636670, 1.250168, 2.473548",\ + "0.131048, 0.346407, 0.642918, 1.253128, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002547, 0.075545, 0.162413, 0.322279, 0.642011"); + values ( "0.069083, 0.173593, 0.284859, 0.488802, 0.896688",\ + "0.156491, 0.260911, 0.372140, 0.576107, 0.984042",\ + "0.236870, 0.341243, 0.452167, 0.656136, 1.064073",\ + "0.293615, 0.398792, 0.509709, 0.713380, 1.120721",\ + "0.587968, 0.702133, 0.813340, 1.016393, 1.422498"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002547, 0.075545, 0.162413, 0.322279, 0.642011"); + values ( "0.025866, 0.187793, 0.387158, 0.758315, 1.500628",\ + "0.025866, 0.187793, 0.387158, 0.758315, 1.500628",\ + "0.026893, 0.187793, 0.387158, 0.758315, 1.500628",\ + "0.028907, 0.188402, 0.387616, 0.759217, 1.502420",\ + "0.047268, 0.192671, 0.387690, 0.759988, 1.504586"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[0]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026043, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.216886, 0.170957, 0.140757, 0.129414, 0.143099",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025866, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.251193, 0.175871, 0.107712, 0.084745, 0.147659",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[0]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026043, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.148813, -0.106396, -0.071909, -0.032486, 0.273561",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025866, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.164349, -0.098434, -0.040775, 0.001186, 0.221794",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_dpram_rml_o[0]_hldr*/ + +} /* end of pin dpram_rml_o[0] */ +} /* end of bus dpram_rml_o */ +bus ( spram_rm_o ) { + + bus_type : BUS5_type4 ; + direction : output ; + +pin("spram_rm_o[4]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002015 ; + + /* Other user defined attributes. */ + original_pin : spram_rm_o[4]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.048192, 0.201225, 0.376587, 0.699339, 1.344843",\ + "0.134509, 0.288400, 0.463692, 0.786054, 1.430777",\ + "0.217716, 0.376528, 0.551648, 0.873676, 1.517732",\ + "0.275633, 0.440922, 0.615763, 0.937589, 1.581241",\ + "0.575653, 0.790792, 0.966147, 1.286330, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.024114, 0.299801, 0.633056, 1.249558, 2.482564",\ + "0.028631, 0.300789, 0.635003, 1.249558, 2.482564",\ + "0.041577, 0.303044, 0.635039, 1.249558, 2.482564",\ + "0.053483, 0.306322, 0.635141, 1.249558, 2.482564",\ + "0.129115, 0.344671, 0.641397, 1.252114, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.067832, 0.172938, 0.284377, 0.488489, 0.896714",\ + "0.155243, 0.260256, 0.371658, 0.575794, 0.984068",\ + "0.235603, 0.340590, 0.451685, 0.655823, 1.064099",\ + "0.292298, 0.398139, 0.509228, 0.713068, 1.120747",\ + "0.586128, 0.701477, 0.812860, 1.016081, 1.422524"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.024575, 0.187425, 0.387787, 0.759976, 1.504353",\ + "0.024575, 0.187570, 0.388291, 0.759976, 1.504353",\ + "0.025658, 0.187570, 0.388291, 0.759976, 1.504353",\ + "0.027727, 0.187570, 0.388291, 0.759976, 1.504353",\ + "0.046336, 0.191539, 0.388291, 0.759976, 1.504633"); + } + + } /* end of arc clk_ast_tlul_i_spram_rm_o[4]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.048192, 0.201225, 0.376587, 0.699339, 1.344843",\ + "0.134509, 0.288400, 0.463692, 0.786054, 1.430777",\ + "0.217716, 0.376528, 0.551648, 0.873676, 1.517732",\ + "0.275633, 0.440922, 0.615763, 0.937589, 1.581241",\ + "0.575653, 0.790792, 0.966147, 1.286330, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.024114, 0.299801, 0.633056, 1.248329, 2.473548",\ + "0.028631, 0.300789, 0.635003, 1.248329, 2.473548",\ + "0.041577, 0.303044, 0.635039, 1.248404, 2.473548",\ + "0.053483, 0.306322, 0.635141, 1.249148, 2.473548",\ + "0.129115, 0.344671, 0.641397, 1.252114, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.067832, 0.172938, 0.284377, 0.488489, 0.896714",\ + "0.155243, 0.260256, 0.371658, 0.575794, 0.984068",\ + "0.235603, 0.340590, 0.451685, 0.655823, 1.064099",\ + "0.292298, 0.398139, 0.509228, 0.713068, 1.120747",\ + "0.586128, 0.701477, 0.812860, 1.016081, 1.422524"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.024575, 0.186626, 0.386280, 0.757745, 1.500676",\ + "0.024575, 0.186626, 0.386280, 0.757745, 1.500676",\ + "0.025658, 0.186626, 0.386280, 0.757745, 1.500676",\ + "0.027727, 0.187236, 0.386737, 0.758647, 1.502467",\ + "0.046336, 0.191539, 0.386809, 0.759417, 1.504633"); + } + + } /* end of arc clk_ast_tlul_i_spram_rm_o[4]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024114, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.215993, 0.170064, 0.139864, 0.128520, 0.142206",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024575, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.250605, 0.175284, 0.107125, 0.084158, 0.147071",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_spram_rm_o[4]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024114, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.147920, -0.105503, -0.071016, -0.031593, 0.274454",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024575, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.163761, -0.097846, -0.040187, 0.001774, 0.222382",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_spram_rm_o[4]_hldr*/ + +} /* end of pin spram_rm_o[4] */ + +pin("spram_rm_o[3]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002005 ; + + /* Other user defined attributes. */ + original_pin : spram_rm_o[3]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.048165, 0.201205, 0.376572, 0.699329, 1.344843",\ + "0.134480, 0.288380, 0.463677, 0.786044, 1.430777",\ + "0.217680, 0.376507, 0.551633, 0.873666, 1.517732",\ + "0.275590, 0.440902, 0.615748, 0.937579, 1.581241",\ + "0.575569, 0.790772, 0.966132, 1.286320, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.024077, 0.299762, 0.633026, 1.249539, 2.482564",\ + "0.028598, 0.300750, 0.634974, 1.249539, 2.482564",\ + "0.041548, 0.303005, 0.635010, 1.249539, 2.482564",\ + "0.053453, 0.306284, 0.635112, 1.249539, 2.482564",\ + "0.129078, 0.344637, 0.641368, 1.252094, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.067810, 0.172926, 0.284369, 0.488484, 0.896715",\ + "0.155221, 0.260244, 0.371649, 0.575789, 0.984069",\ + "0.235580, 0.340579, 0.451676, 0.655818, 1.064101",\ + "0.292274, 0.398127, 0.509219, 0.713062, 1.120748",\ + "0.586096, 0.701465, 0.812852, 1.016076, 1.422525"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.024552, 0.187404, 0.387772, 0.759966, 1.504356",\ + "0.024552, 0.187549, 0.388276, 0.759966, 1.504356",\ + "0.025636, 0.187549, 0.388276, 0.759966, 1.504356",\ + "0.027706, 0.187549, 0.388276, 0.759966, 1.504356",\ + "0.046319, 0.191519, 0.388276, 0.759966, 1.504636"); + } + + } /* end of arc clk_ast_tlul_i_spram_rm_o[3]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.048165, 0.201205, 0.376572, 0.699329, 1.344843",\ + "0.134480, 0.288380, 0.463677, 0.786044, 1.430777",\ + "0.217680, 0.376507, 0.551633, 0.873666, 1.517732",\ + "0.275590, 0.440902, 0.615748, 0.937579, 1.581241",\ + "0.575569, 0.790772, 0.966132, 1.286320, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.024077, 0.299762, 0.633026, 1.248310, 2.473548",\ + "0.028598, 0.300750, 0.634974, 1.248310, 2.473548",\ + "0.041548, 0.303005, 0.635010, 1.248385, 2.473548",\ + "0.053453, 0.306284, 0.635112, 1.249129, 2.473548",\ + "0.129078, 0.344637, 0.641368, 1.252094, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.067810, 0.172926, 0.284369, 0.488484, 0.896715",\ + "0.155221, 0.260244, 0.371649, 0.575789, 0.984069",\ + "0.235580, 0.340579, 0.451676, 0.655818, 1.064101",\ + "0.292274, 0.398127, 0.509219, 0.713062, 1.120748",\ + "0.586096, 0.701465, 0.812852, 1.016076, 1.422525"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.024552, 0.186605, 0.386265, 0.757736, 1.500678",\ + "0.024552, 0.186605, 0.386265, 0.757736, 1.500678",\ + "0.025636, 0.186605, 0.386265, 0.757736, 1.500678",\ + "0.027706, 0.187215, 0.386722, 0.758638, 1.502470",\ + "0.046319, 0.191519, 0.386794, 0.759408, 1.504636"); + } + + } /* end of arc clk_ast_tlul_i_spram_rm_o[3]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024077, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.215976, 0.170047, 0.139847, 0.128503, 0.142188",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024552, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.250595, 0.175273, 0.107114, 0.084147, 0.147061",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_spram_rm_o[3]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024077, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.147903, -0.105486, -0.070999, -0.031576, 0.274471",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024552, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.163751, -0.097835, -0.040177, 0.001784, 0.222392",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_spram_rm_o[3]_hldr*/ + +} /* end of pin spram_rm_o[3] */ + +pin("spram_rm_o[2]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002015 ; + + /* Other user defined attributes. */ + original_pin : spram_rm_o[2]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.048192, 0.201225, 0.376587, 0.699339, 1.344843",\ + "0.134509, 0.288400, 0.463692, 0.786054, 1.430777",\ + "0.217716, 0.376528, 0.551648, 0.873676, 1.517732",\ + "0.275633, 0.440922, 0.615763, 0.937589, 1.581241",\ + "0.575653, 0.790792, 0.966147, 1.286330, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.024114, 0.299801, 0.633056, 1.249558, 2.482564",\ + "0.028631, 0.300789, 0.635003, 1.249558, 2.482564",\ + "0.041577, 0.303044, 0.635039, 1.249558, 2.482564",\ + "0.053483, 0.306322, 0.635141, 1.249558, 2.482564",\ + "0.129115, 0.344671, 0.641397, 1.252114, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.067832, 0.172938, 0.284377, 0.488489, 0.896714",\ + "0.155243, 0.260256, 0.371658, 0.575794, 0.984068",\ + "0.235603, 0.340590, 0.451685, 0.655823, 1.064099",\ + "0.292298, 0.398139, 0.509228, 0.713068, 1.120747",\ + "0.586128, 0.701477, 0.812860, 1.016081, 1.422524"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.024575, 0.187425, 0.387787, 0.759976, 1.504353",\ + "0.024575, 0.187570, 0.388291, 0.759976, 1.504353",\ + "0.025658, 0.187570, 0.388291, 0.759976, 1.504353",\ + "0.027727, 0.187570, 0.388291, 0.759976, 1.504353",\ + "0.046336, 0.191539, 0.388291, 0.759976, 1.504633"); + } + + } /* end of arc clk_ast_tlul_i_spram_rm_o[2]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.048192, 0.201225, 0.376587, 0.699339, 1.344843",\ + "0.134509, 0.288400, 0.463692, 0.786054, 1.430777",\ + "0.217716, 0.376528, 0.551648, 0.873676, 1.517732",\ + "0.275633, 0.440922, 0.615763, 0.937589, 1.581241",\ + "0.575653, 0.790792, 0.966147, 1.286330, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.024114, 0.299801, 0.633056, 1.248329, 2.473548",\ + "0.028631, 0.300789, 0.635003, 1.248329, 2.473548",\ + "0.041577, 0.303044, 0.635039, 1.248404, 2.473548",\ + "0.053483, 0.306322, 0.635141, 1.249148, 2.473548",\ + "0.129115, 0.344671, 0.641397, 1.252114, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.067832, 0.172938, 0.284377, 0.488489, 0.896714",\ + "0.155243, 0.260256, 0.371658, 0.575794, 0.984068",\ + "0.235603, 0.340590, 0.451685, 0.655823, 1.064099",\ + "0.292298, 0.398139, 0.509228, 0.713068, 1.120747",\ + "0.586128, 0.701477, 0.812860, 1.016081, 1.422524"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002015, 0.075014, 0.162014, 0.322013, 0.642011"); + values ( "0.024575, 0.186626, 0.386280, 0.757745, 1.500676",\ + "0.024575, 0.186626, 0.386280, 0.757745, 1.500676",\ + "0.025658, 0.186626, 0.386280, 0.757745, 1.500676",\ + "0.027727, 0.187236, 0.386737, 0.758647, 1.502467",\ + "0.046336, 0.191539, 0.386809, 0.759417, 1.504633"); + } + + } /* end of arc clk_ast_tlul_i_spram_rm_o[2]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024114, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.215993, 0.170064, 0.139864, 0.128520, 0.142206",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024575, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.250605, 0.175284, 0.107125, 0.084158, 0.147071",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_spram_rm_o[2]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024114, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.147920, -0.105503, -0.071016, -0.031593, 0.274454",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024575, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.163761, -0.097846, -0.040187, 0.001774, 0.222382",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_spram_rm_o[2]_hldr*/ + +} /* end of pin spram_rm_o[2] */ + +pin("spram_rm_o[1]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.003002 ; + + /* Other user defined attributes. */ + original_pin : spram_rm_o[1]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003002, 0.076001, 0.162754, 0.322506, 0.642011"); + values ( "0.050861, 0.203214, 0.378080, 0.700335, 1.344843",\ + "0.137325, 0.290388, 0.465183, 0.787048, 1.430777",\ + "0.221189, 0.378514, 0.553137, 0.874669, 1.517732",\ + "0.279768, 0.442905, 0.617252, 0.938582, 1.581241",\ + "0.583788, 0.792786, 0.967628, 1.287318, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003002, 0.076001, 0.162754, 0.322506, 0.642011"); + values ( "0.027696, 0.303573, 0.635907, 1.251459, 2.482564",\ + "0.031840, 0.304583, 0.637840, 1.251459, 2.482564",\ + "0.044392, 0.306804, 0.637876, 1.251459, 2.482564",\ + "0.056346, 0.310032, 0.637981, 1.251459, 2.482564",\ + "0.132705, 0.347895, 0.644222, 1.253997, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003002, 0.076001, 0.162754, 0.322506, 0.642011"); + values ( "0.070172, 0.174163, 0.285281, 0.489079, 0.896674",\ + "0.157576, 0.261481, 0.372562, 0.576384, 0.984028",\ + "0.237972, 0.341811, 0.452589, 0.656412, 1.064059",\ + "0.294761, 0.399360, 0.510131, 0.713656, 1.120707",\ + "0.589569, 0.702704, 0.813760, 1.016668, 1.422484"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003002, 0.076001, 0.162754, 0.322506, 0.642011"); + values ( "0.026989, 0.189618, 0.389436, 0.761051, 1.504280",\ + "0.026989, 0.189769, 0.389937, 0.761051, 1.504280",\ + "0.027967, 0.189769, 0.389937, 0.761051, 1.504280",\ + "0.029933, 0.189769, 0.389937, 0.761051, 1.504280",\ + "0.048080, 0.193656, 0.389937, 0.761051, 1.504560"); + } + + } /* end of arc clk_ast_tlul_i_spram_rm_o[1]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003002, 0.076001, 0.162754, 0.322506, 0.642011"); + values ( "0.050861, 0.203214, 0.378080, 0.700335, 1.344843",\ + "0.137325, 0.290388, 0.465183, 0.787048, 1.430777",\ + "0.221189, 0.378514, 0.553137, 0.874669, 1.517732",\ + "0.279768, 0.442905, 0.617252, 0.938582, 1.581241",\ + "0.583788, 0.792786, 0.967628, 1.287318, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003002, 0.076001, 0.162754, 0.322506, 0.642011"); + values ( "0.027696, 0.303573, 0.635907, 1.250220, 2.473548",\ + "0.031840, 0.304583, 0.637840, 1.250220, 2.473548",\ + "0.044392, 0.306804, 0.637876, 1.250296, 2.473548",\ + "0.056346, 0.310032, 0.637981, 1.251042, 2.473548",\ + "0.132705, 0.347895, 0.644222, 1.253997, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003002, 0.076001, 0.162754, 0.322506, 0.642011"); + values ( "0.070172, 0.174163, 0.285281, 0.489079, 0.896674",\ + "0.157576, 0.261481, 0.372562, 0.576384, 0.984028",\ + "0.237972, 0.341811, 0.452589, 0.656412, 1.064059",\ + "0.294761, 0.399360, 0.510131, 0.713656, 1.120707",\ + "0.589569, 0.702704, 0.813760, 1.016668, 1.422484"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003002, 0.076001, 0.162754, 0.322506, 0.642011"); + values ( "0.026989, 0.188809, 0.387926, 0.758818, 1.500603",\ + "0.026989, 0.188809, 0.387926, 0.758818, 1.500603",\ + "0.027967, 0.188809, 0.387926, 0.758818, 1.500603",\ + "0.029933, 0.189417, 0.388385, 0.759721, 1.502395",\ + "0.048080, 0.193656, 0.388460, 0.760493, 1.504560"); + } + + } /* end of arc clk_ast_tlul_i_spram_rm_o[1]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.027696, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.217652, 0.171723, 0.141523, 0.130179, 0.143864",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026989, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.251704, 0.176383, 0.108224, 0.085257, 0.148171",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_spram_rm_o[1]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.027696, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.149579, -0.107162, -0.072675, -0.033251, 0.272796",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026989, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.164860, -0.098945, -0.041286, 0.000675, 0.221283",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_spram_rm_o[1]_hldr*/ + +} /* end of pin spram_rm_o[1] */ + +pin("spram_rm_o[0]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002026 ; + + /* Other user defined attributes. */ + original_pin : spram_rm_o[0]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.048221, 0.201247, 0.376603, 0.699350, 1.344843",\ + "0.134540, 0.288422, 0.463709, 0.786065, 1.430777",\ + "0.217754, 0.376549, 0.551664, 0.873687, 1.517732",\ + "0.275678, 0.440944, 0.615780, 0.937600, 1.581241",\ + "0.575742, 0.790814, 0.966163, 1.286341, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.024153, 0.299842, 0.633087, 1.249579, 2.482563",\ + "0.028666, 0.300830, 0.635034, 1.249579, 2.482563",\ + "0.041608, 0.303085, 0.635070, 1.249579, 2.482563",\ + "0.053514, 0.306363, 0.635172, 1.249579, 2.482563",\ + "0.129154, 0.344706, 0.641428, 1.252134, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.067848, 0.172946, 0.284382, 0.488491, 0.896709",\ + "0.155259, 0.260265, 0.371663, 0.575796, 0.984062",\ + "0.235619, 0.340599, 0.451690, 0.655824, 1.064094",\ + "0.292315, 0.398147, 0.509233, 0.713069, 1.120741",\ + "0.586152, 0.701486, 0.812865, 1.016083, 1.422518"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.024592, 0.187440, 0.387796, 0.759979, 1.504343",\ + "0.024592, 0.187585, 0.388300, 0.759979, 1.504343",\ + "0.025674, 0.187585, 0.388300, 0.759979, 1.504343",\ + "0.027742, 0.187585, 0.388300, 0.759979, 1.504343",\ + "0.046348, 0.191554, 0.388300, 0.759979, 1.504623"); + } + + } /* end of arc clk_ast_tlul_i_spram_rm_o[0]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.048221, 0.201247, 0.376603, 0.699350, 1.344843",\ + "0.134540, 0.288422, 0.463709, 0.786065, 1.430777",\ + "0.217754, 0.376549, 0.551664, 0.873687, 1.517732",\ + "0.275678, 0.440944, 0.615780, 0.937600, 1.581241",\ + "0.575742, 0.790814, 0.966163, 1.286341, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.024153, 0.299842, 0.633087, 1.248350, 2.473548",\ + "0.028666, 0.300830, 0.635034, 1.248350, 2.473548",\ + "0.041608, 0.303085, 0.635070, 1.248425, 2.473548",\ + "0.053514, 0.306363, 0.635172, 1.249169, 2.473548",\ + "0.129154, 0.344706, 0.641428, 1.252134, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.067848, 0.172946, 0.284382, 0.488491, 0.896709",\ + "0.155259, 0.260265, 0.371663, 0.575796, 0.984062",\ + "0.235619, 0.340599, 0.451690, 0.655824, 1.064094",\ + "0.292315, 0.398147, 0.509233, 0.713069, 1.120741",\ + "0.586152, 0.701486, 0.812865, 1.016083, 1.422518"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.024592, 0.186641, 0.386289, 0.757748, 1.500666",\ + "0.024592, 0.186641, 0.386289, 0.757748, 1.500666",\ + "0.025674, 0.186641, 0.386289, 0.757748, 1.500666",\ + "0.027742, 0.187251, 0.386746, 0.758650, 1.502457",\ + "0.046348, 0.191554, 0.386818, 0.759420, 1.504623"); + } + + } /* end of arc clk_ast_tlul_i_spram_rm_o[0]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.216011, 0.170082, 0.139882, 0.128539, 0.142224",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024592, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.250613, 0.175291, 0.107132, 0.084165, 0.147079",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_spram_rm_o[0]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.147938, -0.105521, -0.071034, -0.031611, 0.274436",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024592, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.163769, -0.097854, -0.040195, 0.001766, 0.222374",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_spram_rm_o[0]_hldr*/ + +} /* end of pin spram_rm_o[0] */ +} /* end of bus spram_rm_o */ +bus ( sprgf_rm_o ) { + + bus_type : BUS5_type4 ; + direction : output ; + +pin("sprgf_rm_o[4]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.004037 ; + + /* Other user defined attributes. */ + original_pin : sprgf_rm_o[4]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004037, 0.077035, 0.163530, 0.323024, 0.642011"); + values ( "0.053659, 0.205298, 0.379645, 0.701378, 1.344843",\ + "0.140277, 0.292473, 0.466747, 0.788090, 1.430777",\ + "0.224830, 0.380596, 0.554699, 0.875710, 1.517732",\ + "0.284103, 0.444983, 0.618813, 0.939622, 1.581241",\ + "0.592316, 0.794877, 0.969181, 1.288353, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004037, 0.077035, 0.163530, 0.323024, 0.642011"); + values ( "0.031452, 0.307528, 0.638897, 1.253452, 2.482564",\ + "0.035203, 0.308560, 0.640814, 1.253452, 2.482564",\ + "0.047343, 0.310745, 0.640850, 1.253452, 2.482564",\ + "0.059348, 0.313921, 0.640958, 1.253452, 2.482564",\ + "0.136469, 0.351276, 0.647183, 1.255971, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004037, 0.077035, 0.163530, 0.323024, 0.642011"); + values ( "0.072631, 0.175452, 0.286232, 0.489700, 0.896636",\ + "0.160028, 0.262769, 0.373513, 0.577005, 0.983989",\ + "0.240463, 0.343094, 0.453540, 0.657034, 1.064021",\ + "0.297350, 0.400643, 0.511081, 0.714277, 1.120669",\ + "0.593185, 0.703993, 0.814708, 1.017287, 1.422446"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004037, 0.077035, 0.163530, 0.323024, 0.642011"); + values ( "0.029527, 0.191922, 0.391170, 0.762184, 1.504210",\ + "0.029527, 0.192081, 0.391669, 0.762184, 1.504210",\ + "0.030394, 0.192081, 0.391669, 0.762184, 1.504210",\ + "0.032251, 0.192081, 0.391669, 0.762184, 1.504210",\ + "0.049913, 0.195880, 0.391669, 0.762184, 1.504490"); + } + + } /* end of arc clk_ast_tlul_i_sprgf_rm_o[4]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004037, 0.077035, 0.163530, 0.323024, 0.642011"); + values ( "0.053659, 0.205298, 0.379645, 0.701378, 1.344843",\ + "0.140277, 0.292473, 0.466747, 0.788090, 1.430777",\ + "0.224830, 0.380596, 0.554699, 0.875710, 1.517732",\ + "0.284103, 0.444983, 0.618813, 0.939622, 1.581241",\ + "0.592316, 0.794877, 0.969181, 1.288353, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004037, 0.077035, 0.163530, 0.323024, 0.642011"); + values ( "0.031452, 0.307528, 0.638897, 1.252203, 2.473548",\ + "0.035203, 0.308560, 0.640814, 1.252203, 2.473548",\ + "0.047343, 0.310745, 0.640850, 1.252279, 2.473548",\ + "0.059348, 0.313921, 0.640958, 1.253027, 2.473548",\ + "0.136469, 0.351276, 0.647183, 1.255971, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004037, 0.077035, 0.163530, 0.323024, 0.642011"); + values ( "0.072631, 0.175452, 0.286232, 0.489700, 0.896636",\ + "0.160028, 0.262769, 0.373513, 0.577005, 0.983989",\ + "0.240463, 0.343094, 0.453540, 0.657034, 1.064021",\ + "0.297350, 0.400643, 0.511081, 0.714277, 1.120669",\ + "0.593185, 0.703993, 0.814708, 1.017287, 1.422446"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004037, 0.077035, 0.163530, 0.323024, 0.642011"); + values ( "0.029527, 0.191105, 0.389657, 0.759949, 1.500533",\ + "0.029527, 0.191105, 0.389657, 0.759949, 1.500533",\ + "0.030394, 0.191105, 0.389657, 0.759949, 1.500533",\ + "0.032251, 0.191709, 0.390118, 0.760853, 1.502324",\ + "0.049913, 0.195880, 0.390196, 0.761627, 1.504490"); + } + + } /* end of arc clk_ast_tlul_i_sprgf_rm_o[4]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.031452, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.219390, 0.173461, 0.143262, 0.131918, 0.145603",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.029527, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.252859, 0.177538, 0.109379, 0.086412, 0.149326",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_sprgf_rm_o[4]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.031452, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.151318, -0.108901, -0.074414, -0.034990, 0.271057",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.029527, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.166015, -0.100100, -0.042441, -0.000480, 0.220128",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_sprgf_rm_o[4]_hldr*/ + +} /* end of pin sprgf_rm_o[4] */ + +pin("sprgf_rm_o[3]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002031 ; + + /* Other user defined attributes. */ + original_pin : sprgf_rm_o[3]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002031, 0.075029, 0.162026, 0.322021, 0.642011"); + values ( "0.048234, 0.201257, 0.376611, 0.699355, 1.344843",\ + "0.134553, 0.288431, 0.463716, 0.786070, 1.430777",\ + "0.217771, 0.376559, 0.551671, 0.873691, 1.517732",\ + "0.275698, 0.440953, 0.615787, 0.937605, 1.581241",\ + "0.575781, 0.790824, 0.966170, 1.286346, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002031, 0.075029, 0.162026, 0.322021, 0.642011"); + values ( "0.024170, 0.299860, 0.633100, 1.249588, 2.482563",\ + "0.028681, 0.300849, 0.635047, 1.249588, 2.482563",\ + "0.041621, 0.303103, 0.635083, 1.249588, 2.482563",\ + "0.053528, 0.306381, 0.635185, 1.249588, 2.482563",\ + "0.129172, 0.344721, 0.641441, 1.252143, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002031, 0.075029, 0.162026, 0.322021, 0.642011"); + values ( "0.067866, 0.172955, 0.284390, 0.488497, 0.896712",\ + "0.155277, 0.260274, 0.371670, 0.575802, 0.984065",\ + "0.235637, 0.340608, 0.451697, 0.655831, 1.064097",\ + "0.292333, 0.398157, 0.509240, 0.713075, 1.120745",\ + "0.586178, 0.701495, 0.812873, 1.016089, 1.422521"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002031, 0.075029, 0.162026, 0.322021, 0.642011"); + values ( "0.024610, 0.187457, 0.387810, 0.759990, 1.504349",\ + "0.024610, 0.187602, 0.388314, 0.759990, 1.504349",\ + "0.025692, 0.187602, 0.388314, 0.759990, 1.504349",\ + "0.027759, 0.187602, 0.388314, 0.759990, 1.504349",\ + "0.046361, 0.191570, 0.388314, 0.759990, 1.504629"); + } + + } /* end of arc clk_ast_tlul_i_sprgf_rm_o[3]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002031, 0.075029, 0.162026, 0.322021, 0.642011"); + values ( "0.048234, 0.201257, 0.376611, 0.699355, 1.344843",\ + "0.134553, 0.288431, 0.463716, 0.786070, 1.430777",\ + "0.217771, 0.376559, 0.551671, 0.873691, 1.517732",\ + "0.275698, 0.440953, 0.615787, 0.937605, 1.581241",\ + "0.575781, 0.790824, 0.966170, 1.286346, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002031, 0.075029, 0.162026, 0.322021, 0.642011"); + values ( "0.024170, 0.299860, 0.633100, 1.248359, 2.473548",\ + "0.028681, 0.300849, 0.635047, 1.248359, 2.473548",\ + "0.041621, 0.303103, 0.635083, 1.248434, 2.473548",\ + "0.053528, 0.306381, 0.635185, 1.249178, 2.473548",\ + "0.129172, 0.344721, 0.641441, 1.252143, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002031, 0.075029, 0.162026, 0.322021, 0.642011"); + values ( "0.067866, 0.172955, 0.284390, 0.488497, 0.896712",\ + "0.155277, 0.260274, 0.371670, 0.575802, 0.984065",\ + "0.235637, 0.340608, 0.451697, 0.655831, 1.064097",\ + "0.292333, 0.398157, 0.509240, 0.713075, 1.120745",\ + "0.586178, 0.701495, 0.812873, 1.016089, 1.422521"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002031, 0.075029, 0.162026, 0.322021, 0.642011"); + values ( "0.024610, 0.186657, 0.386303, 0.757760, 1.500672",\ + "0.024610, 0.186657, 0.386303, 0.757760, 1.500672",\ + "0.025692, 0.186657, 0.386303, 0.757760, 1.500672",\ + "0.027759, 0.187268, 0.386760, 0.758661, 1.502463",\ + "0.046361, 0.191570, 0.386832, 0.759431, 1.504629"); + } + + } /* end of arc clk_ast_tlul_i_sprgf_rm_o[3]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024170, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.216019, 0.170090, 0.139890, 0.128547, 0.142232",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024610, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.250621, 0.175300, 0.107141, 0.084173, 0.147087",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_sprgf_rm_o[3]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024170, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.147946, -0.105529, -0.071042, -0.031619, 0.274428",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024610, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.163777, -0.097862, -0.040203, 0.001758, 0.222366",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_sprgf_rm_o[3]_hldr*/ + +} /* end of pin sprgf_rm_o[3] */ + +pin("sprgf_rm_o[2]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.003654 ; + + /* Other user defined attributes. */ + original_pin : sprgf_rm_o[2]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003654, 0.076652, 0.163243, 0.322832, 0.642011"); + values ( "0.052623, 0.204527, 0.379066, 0.700992, 1.344843",\ + "0.139184, 0.291701, 0.466168, 0.787704, 1.430777",\ + "0.223482, 0.379826, 0.554121, 0.875325, 1.517732",\ + "0.282499, 0.444214, 0.618235, 0.939237, 1.581241",\ + "0.589159, 0.794103, 0.968606, 1.287970, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003654, 0.076652, 0.163243, 0.322832, 0.642011"); + values ( "0.030062, 0.306064, 0.637790, 1.252714, 2.482564",\ + "0.033958, 0.307087, 0.639713, 1.252714, 2.482564",\ + "0.046250, 0.309286, 0.639749, 1.252714, 2.482564",\ + "0.058237, 0.312481, 0.639856, 1.252714, 2.482564",\ + "0.135075, 0.350024, 0.646087, 1.255240, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003654, 0.076652, 0.163243, 0.322832, 0.642011"); + values ( "0.071715, 0.174972, 0.285877, 0.489467, 0.896647",\ + "0.159114, 0.262289, 0.373158, 0.576772, 0.984000",\ + "0.239535, 0.342616, 0.453185, 0.656801, 1.064032",\ + "0.296386, 0.400165, 0.510726, 0.714044, 1.120680",\ + "0.591837, 0.703513, 0.814354, 1.017055, 1.422457"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003654, 0.076652, 0.163243, 0.322832, 0.642011"); + values ( "0.028581, 0.191064, 0.390523, 0.761759, 1.504230",\ + "0.028581, 0.191220, 0.391022, 0.761759, 1.504230",\ + "0.029490, 0.191220, 0.391022, 0.761759, 1.504230",\ + "0.031388, 0.191220, 0.391022, 0.761759, 1.504230",\ + "0.049229, 0.195051, 0.391022, 0.761759, 1.504510"); + } + + } /* end of arc clk_ast_tlul_i_sprgf_rm_o[2]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003654, 0.076652, 0.163243, 0.322832, 0.642011"); + values ( "0.052623, 0.204527, 0.379066, 0.700992, 1.344843",\ + "0.139184, 0.291701, 0.466168, 0.787704, 1.430777",\ + "0.223482, 0.379826, 0.554121, 0.875325, 1.517732",\ + "0.282499, 0.444214, 0.618235, 0.939237, 1.581241",\ + "0.589159, 0.794103, 0.968606, 1.287970, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003654, 0.076652, 0.163243, 0.322832, 0.642011"); + values ( "0.030062, 0.306064, 0.637790, 1.251469, 2.473548",\ + "0.033958, 0.307087, 0.639713, 1.251469, 2.473548",\ + "0.046250, 0.309286, 0.639749, 1.251544, 2.473548",\ + "0.058237, 0.312481, 0.639856, 1.252292, 2.473548",\ + "0.135075, 0.350024, 0.646087, 1.255240, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003654, 0.076652, 0.163243, 0.322832, 0.642011"); + values ( "0.071715, 0.174972, 0.285877, 0.489467, 0.896647",\ + "0.159114, 0.262289, 0.373158, 0.576772, 0.984000",\ + "0.239535, 0.342616, 0.453185, 0.656801, 1.064032",\ + "0.296386, 0.400165, 0.510726, 0.714044, 1.120680",\ + "0.591837, 0.703513, 0.814354, 1.017055, 1.422457"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003654, 0.076652, 0.163243, 0.322832, 0.642011"); + values ( "0.028581, 0.190249, 0.389010, 0.759525, 1.500553",\ + "0.028581, 0.190249, 0.389010, 0.759525, 1.500553",\ + "0.029490, 0.190249, 0.389010, 0.759525, 1.500553",\ + "0.031388, 0.190855, 0.389471, 0.760429, 1.502345",\ + "0.049229, 0.195051, 0.389548, 0.761202, 1.504510"); + } + + } /* end of arc clk_ast_tlul_i_sprgf_rm_o[2]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.030062, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.218747, 0.172818, 0.142618, 0.131274, 0.144959",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.028581, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.252429, 0.177108, 0.108949, 0.085981, 0.148895",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_sprgf_rm_o[2]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.030062, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.150674, -0.108257, -0.073770, -0.034347, 0.271701",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.028581, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.165584, -0.099669, -0.042010, -0.000049, 0.220558",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_sprgf_rm_o[2]_hldr*/ + +} /* end of pin sprgf_rm_o[2] */ + +pin("sprgf_rm_o[1]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002005 ; + + /* Other user defined attributes. */ + original_pin : sprgf_rm_o[1]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.048165, 0.201205, 0.376572, 0.699329, 1.344843",\ + "0.134480, 0.288380, 0.463677, 0.786044, 1.430777",\ + "0.217680, 0.376507, 0.551633, 0.873666, 1.517732",\ + "0.275590, 0.440902, 0.615748, 0.937579, 1.581241",\ + "0.575569, 0.790772, 0.966132, 1.286320, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.024077, 0.299762, 0.633026, 1.249539, 2.482564",\ + "0.028598, 0.300750, 0.634974, 1.249539, 2.482564",\ + "0.041548, 0.303005, 0.635010, 1.249539, 2.482564",\ + "0.053453, 0.306284, 0.635112, 1.249539, 2.482564",\ + "0.129078, 0.344637, 0.641368, 1.252094, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.067810, 0.172926, 0.284369, 0.488484, 0.896715",\ + "0.155221, 0.260244, 0.371649, 0.575789, 0.984069",\ + "0.235580, 0.340579, 0.451676, 0.655818, 1.064101",\ + "0.292274, 0.398127, 0.509219, 0.713062, 1.120748",\ + "0.586096, 0.701465, 0.812852, 1.016076, 1.422525"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.024552, 0.187404, 0.387772, 0.759966, 1.504356",\ + "0.024552, 0.187549, 0.388276, 0.759966, 1.504356",\ + "0.025636, 0.187549, 0.388276, 0.759966, 1.504356",\ + "0.027706, 0.187549, 0.388276, 0.759966, 1.504356",\ + "0.046319, 0.191519, 0.388276, 0.759966, 1.504636"); + } + + } /* end of arc clk_ast_tlul_i_sprgf_rm_o[1]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.048165, 0.201205, 0.376572, 0.699329, 1.344843",\ + "0.134480, 0.288380, 0.463677, 0.786044, 1.430777",\ + "0.217680, 0.376507, 0.551633, 0.873666, 1.517732",\ + "0.275590, 0.440902, 0.615748, 0.937579, 1.581241",\ + "0.575569, 0.790772, 0.966132, 1.286320, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.024077, 0.299762, 0.633026, 1.248310, 2.473548",\ + "0.028598, 0.300750, 0.634974, 1.248310, 2.473548",\ + "0.041548, 0.303005, 0.635010, 1.248385, 2.473548",\ + "0.053453, 0.306284, 0.635112, 1.249129, 2.473548",\ + "0.129078, 0.344637, 0.641368, 1.252094, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.067810, 0.172926, 0.284369, 0.488484, 0.896715",\ + "0.155221, 0.260244, 0.371649, 0.575789, 0.984069",\ + "0.235580, 0.340579, 0.451676, 0.655818, 1.064101",\ + "0.292274, 0.398127, 0.509219, 0.713062, 1.120748",\ + "0.586096, 0.701465, 0.812852, 1.016076, 1.422525"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002005, 0.075004, 0.162007, 0.322008, 0.642011"); + values ( "0.024552, 0.186605, 0.386265, 0.757736, 1.500678",\ + "0.024552, 0.186605, 0.386265, 0.757736, 1.500678",\ + "0.025636, 0.186605, 0.386265, 0.757736, 1.500678",\ + "0.027706, 0.187215, 0.386722, 0.758638, 1.502470",\ + "0.046319, 0.191519, 0.386794, 0.759408, 1.504636"); + } + + } /* end of arc clk_ast_tlul_i_sprgf_rm_o[1]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024077, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.215976, 0.170047, 0.139847, 0.128503, 0.142188",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024552, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.250595, 0.175273, 0.107114, 0.084147, 0.147061",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_sprgf_rm_o[1]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024077, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.147903, -0.105486, -0.070999, -0.031576, 0.274471",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024552, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.163751, -0.097835, -0.040177, 0.001784, 0.222392",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_sprgf_rm_o[1]_hldr*/ + +} /* end of pin sprgf_rm_o[1] */ + +pin("sprgf_rm_o[0]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002547 ; + + /* Other user defined attributes. */ + original_pin : sprgf_rm_o[0]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002547, 0.075545, 0.162413, 0.322279, 0.642011"); + values ( "0.049629, 0.202296, 0.377391, 0.699875, 1.344843",\ + "0.136025, 0.289471, 0.464495, 0.786589, 1.430777",\ + "0.219586, 0.377597, 0.552450, 0.874211, 1.517732",\ + "0.277859, 0.441990, 0.616565, 0.938124, 1.581241",\ + "0.580033, 0.791866, 0.966945, 1.286862, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002547, 0.075545, 0.162413, 0.322279, 0.642011"); + values ( "0.026043, 0.301832, 0.634591, 1.250582, 2.482563",\ + "0.030358, 0.302831, 0.636530, 1.250582, 2.482563",\ + "0.043092, 0.305068, 0.636566, 1.250582, 2.482563",\ + "0.055024, 0.308320, 0.636670, 1.250582, 2.482563",\ + "0.131048, 0.346407, 0.642918, 1.253128, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002547, 0.075545, 0.162413, 0.322279, 0.642011"); + values ( "0.069083, 0.173593, 0.284859, 0.488802, 0.896688",\ + "0.156491, 0.260911, 0.372140, 0.576107, 0.984042",\ + "0.236870, 0.341243, 0.452167, 0.656136, 1.064073",\ + "0.293615, 0.398792, 0.509709, 0.713380, 1.120721",\ + "0.587968, 0.702133, 0.813340, 1.016393, 1.422498"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002547, 0.075545, 0.162413, 0.322279, 0.642011"); + values ( "0.025866, 0.188597, 0.388667, 0.760546, 1.504306",\ + "0.025866, 0.188746, 0.389169, 0.760546, 1.504306",\ + "0.026893, 0.188746, 0.389169, 0.760546, 1.504306",\ + "0.028907, 0.188746, 0.389169, 0.760546, 1.504306",\ + "0.047268, 0.192671, 0.389169, 0.760546, 1.504586"); + } + + } /* end of arc clk_ast_tlul_i_sprgf_rm_o[0]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002547, 0.075545, 0.162413, 0.322279, 0.642011"); + values ( "0.049629, 0.202296, 0.377391, 0.699875, 1.344843",\ + "0.136025, 0.289471, 0.464495, 0.786589, 1.430777",\ + "0.219586, 0.377597, 0.552450, 0.874211, 1.517732",\ + "0.277859, 0.441990, 0.616565, 0.938124, 1.581241",\ + "0.580033, 0.791866, 0.966945, 1.286862, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002547, 0.075545, 0.162413, 0.322279, 0.642011"); + values ( "0.026043, 0.301832, 0.634591, 1.249347, 2.473548",\ + "0.030358, 0.302831, 0.636530, 1.249347, 2.473548",\ + "0.043092, 0.305068, 0.636566, 1.249423, 2.473548",\ + "0.055024, 0.308320, 0.636670, 1.250168, 2.473548",\ + "0.131048, 0.346407, 0.642918, 1.253128, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002547, 0.075545, 0.162413, 0.322279, 0.642011"); + values ( "0.069083, 0.173593, 0.284859, 0.488802, 0.896688",\ + "0.156491, 0.260911, 0.372140, 0.576107, 0.984042",\ + "0.236870, 0.341243, 0.452167, 0.656136, 1.064073",\ + "0.293615, 0.398792, 0.509709, 0.713380, 1.120721",\ + "0.587968, 0.702133, 0.813340, 1.016393, 1.422498"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002547, 0.075545, 0.162413, 0.322279, 0.642011"); + values ( "0.025866, 0.187793, 0.387158, 0.758315, 1.500628",\ + "0.025866, 0.187793, 0.387158, 0.758315, 1.500628",\ + "0.026893, 0.187793, 0.387158, 0.758315, 1.500628",\ + "0.028907, 0.188402, 0.387616, 0.759217, 1.502420",\ + "0.047268, 0.192671, 0.387690, 0.759988, 1.504586"); + } + + } /* end of arc clk_ast_tlul_i_sprgf_rm_o[0]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026043, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.216886, 0.170957, 0.140757, 0.129414, 0.143099",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025866, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.251193, 0.175871, 0.107712, 0.084745, 0.147659",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_sprgf_rm_o[0]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026043, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.148813, -0.106396, -0.071909, -0.032486, 0.273561",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025866, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.164349, -0.098434, -0.040775, 0.001186, 0.221794",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_sprgf_rm_o[0]_hldr*/ + +} /* end of pin sprgf_rm_o[0] */ +} /* end of bus sprgf_rm_o */ +bus ( sprom_rm_o ) { + + bus_type : BUS5_type4 ; + direction : output ; + +pin("sprom_rm_o[4]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.003002 ; + + /* Other user defined attributes. */ + original_pin : sprom_rm_o[4]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003002, 0.076001, 0.162754, 0.322506, 0.642011"); + values ( "0.050861, 0.203214, 0.378080, 0.700335, 1.344843",\ + "0.137325, 0.290388, 0.465183, 0.787048, 1.430777",\ + "0.221189, 0.378514, 0.553137, 0.874669, 1.517732",\ + "0.279768, 0.442905, 0.617252, 0.938582, 1.581241",\ + "0.583788, 0.792786, 0.967628, 1.287318, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003002, 0.076001, 0.162754, 0.322506, 0.642011"); + values ( "0.027696, 0.303573, 0.635907, 1.251459, 2.482564",\ + "0.031840, 0.304583, 0.637840, 1.251459, 2.482564",\ + "0.044392, 0.306804, 0.637876, 1.251459, 2.482564",\ + "0.056346, 0.310032, 0.637981, 1.251459, 2.482564",\ + "0.132705, 0.347895, 0.644222, 1.253997, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003002, 0.076001, 0.162754, 0.322506, 0.642011"); + values ( "0.070172, 0.174163, 0.285281, 0.489079, 0.896674",\ + "0.157576, 0.261481, 0.372562, 0.576384, 0.984028",\ + "0.237972, 0.341811, 0.452589, 0.656412, 1.064059",\ + "0.294761, 0.399360, 0.510131, 0.713656, 1.120707",\ + "0.589569, 0.702704, 0.813760, 1.016668, 1.422484"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003002, 0.076001, 0.162754, 0.322506, 0.642011"); + values ( "0.026989, 0.189618, 0.389436, 0.761051, 1.504280",\ + "0.026989, 0.189769, 0.389937, 0.761051, 1.504280",\ + "0.027967, 0.189769, 0.389937, 0.761051, 1.504280",\ + "0.029933, 0.189769, 0.389937, 0.761051, 1.504280",\ + "0.048080, 0.193656, 0.389937, 0.761051, 1.504560"); + } + + } /* end of arc clk_ast_tlul_i_sprom_rm_o[4]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003002, 0.076001, 0.162754, 0.322506, 0.642011"); + values ( "0.050861, 0.203214, 0.378080, 0.700335, 1.344843",\ + "0.137325, 0.290388, 0.465183, 0.787048, 1.430777",\ + "0.221189, 0.378514, 0.553137, 0.874669, 1.517732",\ + "0.279768, 0.442905, 0.617252, 0.938582, 1.581241",\ + "0.583788, 0.792786, 0.967628, 1.287318, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003002, 0.076001, 0.162754, 0.322506, 0.642011"); + values ( "0.027696, 0.303573, 0.635907, 1.250220, 2.473548",\ + "0.031840, 0.304583, 0.637840, 1.250220, 2.473548",\ + "0.044392, 0.306804, 0.637876, 1.250296, 2.473548",\ + "0.056346, 0.310032, 0.637981, 1.251042, 2.473548",\ + "0.132705, 0.347895, 0.644222, 1.253997, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003002, 0.076001, 0.162754, 0.322506, 0.642011"); + values ( "0.070172, 0.174163, 0.285281, 0.489079, 0.896674",\ + "0.157576, 0.261481, 0.372562, 0.576384, 0.984028",\ + "0.237972, 0.341811, 0.452589, 0.656412, 1.064059",\ + "0.294761, 0.399360, 0.510131, 0.713656, 1.120707",\ + "0.589569, 0.702704, 0.813760, 1.016668, 1.422484"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003002, 0.076001, 0.162754, 0.322506, 0.642011"); + values ( "0.026989, 0.188809, 0.387926, 0.758818, 1.500603",\ + "0.026989, 0.188809, 0.387926, 0.758818, 1.500603",\ + "0.027967, 0.188809, 0.387926, 0.758818, 1.500603",\ + "0.029933, 0.189417, 0.388385, 0.759721, 1.502395",\ + "0.048080, 0.193656, 0.388460, 0.760493, 1.504560"); + } + + } /* end of arc clk_ast_tlul_i_sprom_rm_o[4]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.027696, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.217652, 0.171723, 0.141523, 0.130179, 0.143864",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026989, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.251704, 0.176383, 0.108224, 0.085257, 0.148171",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_sprom_rm_o[4]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.027696, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.149579, -0.107162, -0.072675, -0.033251, 0.272796",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026989, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.164860, -0.098945, -0.041286, 0.000675, 0.221283",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_sprom_rm_o[4]_hldr*/ + +} /* end of pin sprom_rm_o[4] */ + +pin("sprom_rm_o[3]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002553 ; + + /* Other user defined attributes. */ + original_pin : sprom_rm_o[3]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002553, 0.075552, 0.162418, 0.322282, 0.642011"); + values ( "0.049647, 0.202309, 0.377401, 0.699882, 1.344843",\ + "0.136044, 0.289484, 0.464505, 0.786596, 1.430777",\ + "0.219609, 0.377611, 0.552460, 0.874217, 1.517732",\ + "0.277887, 0.442003, 0.616575, 0.938130, 1.581241",\ + "0.580088, 0.791879, 0.966955, 1.286869, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002553, 0.075552, 0.162418, 0.322282, 0.642011"); + values ( "0.026067, 0.301857, 0.634610, 1.250594, 2.482563",\ + "0.030380, 0.302857, 0.636549, 1.250594, 2.482563",\ + "0.043111, 0.305094, 0.636586, 1.250594, 2.482563",\ + "0.055044, 0.308345, 0.636689, 1.250594, 2.482563",\ + "0.131072, 0.346429, 0.642937, 1.253140, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002553, 0.075552, 0.162418, 0.322282, 0.642011"); + values ( "0.069111, 0.173607, 0.284871, 0.488812, 0.896694",\ + "0.156518, 0.260926, 0.372152, 0.576117, 0.984047",\ + "0.236897, 0.341257, 0.452179, 0.656146, 1.064079",\ + "0.293644, 0.398806, 0.509722, 0.713390, 1.120727",\ + "0.588008, 0.702147, 0.813352, 1.016403, 1.422503"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002553, 0.075552, 0.162418, 0.322282, 0.642011"); + values ( "0.025894, 0.188623, 0.388689, 0.760565, 1.504316",\ + "0.025894, 0.188772, 0.389191, 0.760565, 1.504316",\ + "0.026920, 0.188772, 0.389191, 0.760565, 1.504316",\ + "0.028933, 0.188772, 0.389191, 0.760565, 1.504316",\ + "0.047288, 0.192696, 0.389191, 0.760565, 1.504596"); + } + + } /* end of arc clk_ast_tlul_i_sprom_rm_o[3]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002553, 0.075552, 0.162418, 0.322282, 0.642011"); + values ( "0.049647, 0.202309, 0.377401, 0.699882, 1.344843",\ + "0.136044, 0.289484, 0.464505, 0.786596, 1.430777",\ + "0.219609, 0.377611, 0.552460, 0.874217, 1.517732",\ + "0.277887, 0.442003, 0.616575, 0.938130, 1.581241",\ + "0.580088, 0.791879, 0.966955, 1.286869, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002553, 0.075552, 0.162418, 0.322282, 0.642011"); + values ( "0.026067, 0.301857, 0.634610, 1.249360, 2.473548",\ + "0.030380, 0.302857, 0.636549, 1.249360, 2.473548",\ + "0.043111, 0.305094, 0.636586, 1.249435, 2.473548",\ + "0.055044, 0.308345, 0.636689, 1.250180, 2.473548",\ + "0.131072, 0.346429, 0.642937, 1.253140, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002553, 0.075552, 0.162418, 0.322282, 0.642011"); + values ( "0.069111, 0.173607, 0.284871, 0.488812, 0.896694",\ + "0.156518, 0.260926, 0.372152, 0.576117, 0.984047",\ + "0.236897, 0.341257, 0.452179, 0.656146, 1.064079",\ + "0.293644, 0.398806, 0.509722, 0.713390, 1.120727",\ + "0.588008, 0.702147, 0.813352, 1.016403, 1.422503"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002553, 0.075552, 0.162418, 0.322282, 0.642011"); + values ( "0.025894, 0.187819, 0.387180, 0.758333, 1.500639",\ + "0.025894, 0.187819, 0.387180, 0.758333, 1.500639",\ + "0.026920, 0.187819, 0.387180, 0.758333, 1.500639",\ + "0.028933, 0.188428, 0.387638, 0.759236, 1.502430",\ + "0.047288, 0.192696, 0.387712, 0.760007, 1.504596"); + } + + } /* end of arc clk_ast_tlul_i_sprom_rm_o[3]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026067, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.216897, 0.170968, 0.140769, 0.129425, 0.143110",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025894, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.251206, 0.175884, 0.107725, 0.084758, 0.147672",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_sprom_rm_o[3]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.026067, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.148824, -0.106407, -0.071920, -0.032497, 0.273550",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025894, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.164361, -0.098446, -0.040787, 0.001174, 0.221781",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_sprom_rm_o[3]_hldr*/ + +} /* end of pin sprom_rm_o[3] */ + +pin("sprom_rm_o[2]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.004615 ; + + /* Other user defined attributes. */ + original_pin : sprom_rm_o[2]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004615, 0.077613, 0.163964, 0.323313, 0.642011"); + values ( "0.055222, 0.206463, 0.380520, 0.701961, 1.344843",\ + "0.141926, 0.293637, 0.467620, 0.788672, 1.430777",\ + "0.226864, 0.381760, 0.555571, 0.876292, 1.517732",\ + "0.286525, 0.446144, 0.619684, 0.940203, 1.581241",\ + "0.597080, 0.796044, 0.970048, 1.288931, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004615, 0.077613, 0.163964, 0.323313, 0.642011"); + values ( "0.033550, 0.309737, 0.640567, 1.254566, 2.482564",\ + "0.037083, 0.310781, 0.642475, 1.254566, 2.482564",\ + "0.048991, 0.312947, 0.642512, 1.254566, 2.482564",\ + "0.061025, 0.316093, 0.642622, 1.254566, 2.482564",\ + "0.138571, 0.353164, 0.648838, 1.257074, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004615, 0.077613, 0.163964, 0.323313, 0.642011"); + values ( "0.073991, 0.176164, 0.286756, 0.490040, 0.896607",\ + "0.161383, 0.263480, 0.374037, 0.577345, 0.983960",\ + "0.241839, 0.343803, 0.454064, 0.657373, 1.063992",\ + "0.298782, 0.401353, 0.511604, 0.714616, 1.120639",\ + "0.595184, 0.704706, 0.815229, 1.017625, 1.422416"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004615, 0.077613, 0.163964, 0.323313, 0.642011"); + values ( "0.030929, 0.193196, 0.392126, 0.762803, 1.504157",\ + "0.030929, 0.193359, 0.392623, 0.762803, 1.504157",\ + "0.031735, 0.193359, 0.392623, 0.762803, 1.504157",\ + "0.033533, 0.193359, 0.392623, 0.762803, 1.504157",\ + "0.050926, 0.197109, 0.392623, 0.762803, 1.504437"); + } + + } /* end of arc clk_ast_tlul_i_sprom_rm_o[2]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004615, 0.077613, 0.163964, 0.323313, 0.642011"); + values ( "0.055222, 0.206463, 0.380520, 0.701961, 1.344843",\ + "0.141926, 0.293637, 0.467620, 0.788672, 1.430777",\ + "0.226864, 0.381760, 0.555571, 0.876292, 1.517732",\ + "0.286525, 0.446144, 0.619684, 0.940203, 1.581241",\ + "0.597080, 0.796044, 0.970048, 1.288931, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004615, 0.077613, 0.163964, 0.323313, 0.642011"); + values ( "0.033550, 0.309737, 0.640567, 1.253311, 2.473548",\ + "0.037083, 0.310781, 0.642475, 1.253311, 2.473548",\ + "0.048991, 0.312947, 0.642512, 1.253386, 2.473548",\ + "0.061025, 0.316093, 0.642622, 1.254135, 2.473548",\ + "0.138571, 0.353164, 0.648838, 1.257074, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004615, 0.077613, 0.163964, 0.323313, 0.642011"); + values ( "0.073991, 0.176164, 0.286756, 0.490040, 0.896607",\ + "0.161383, 0.263480, 0.374037, 0.577345, 0.983960",\ + "0.241839, 0.343803, 0.454064, 0.657373, 1.063992",\ + "0.298782, 0.401353, 0.511604, 0.714616, 1.120639",\ + "0.595184, 0.704706, 0.815229, 1.017625, 1.422416"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.004615, 0.077613, 0.163964, 0.323313, 0.642011"); + values ( "0.030929, 0.192373, 0.390610, 0.760567, 1.500480",\ + "0.030929, 0.192373, 0.390610, 0.760567, 1.500480",\ + "0.031735, 0.192373, 0.390610, 0.760567, 1.500480",\ + "0.033533, 0.192976, 0.391072, 0.761472, 1.502271",\ + "0.050926, 0.197109, 0.391153, 0.762247, 1.504437"); + } + + } /* end of arc clk_ast_tlul_i_sprom_rm_o[2]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.033550, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.220362, 0.174433, 0.144233, 0.132890, 0.146575",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.030929, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.253498, 0.178177, 0.110018, 0.087050, 0.149964",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_sprom_rm_o[2]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.033550, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.152289, -0.109872, -0.075385, -0.035962, 0.270085",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.030929, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.166653, -0.100738, -0.043079, -0.001118, 0.219490",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_sprom_rm_o[2]_hldr*/ + +} /* end of pin sprom_rm_o[2] */ + +pin("sprom_rm_o[1]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002475 ; + + /* Other user defined attributes. */ + original_pin : sprom_rm_o[1]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002475, 0.075473, 0.162359, 0.322243, 0.642011"); + values ( "0.049435, 0.202151, 0.377283, 0.699803, 1.344843",\ + "0.135820, 0.289326, 0.464387, 0.786517, 1.430777",\ + "0.219334, 0.377453, 0.552342, 0.874138, 1.517732",\ + "0.277559, 0.441846, 0.616457, 0.938052, 1.581241",\ + "0.579442, 0.791721, 0.966837, 1.286790, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002475, 0.075473, 0.162359, 0.322243, 0.642011"); + values ( "0.025782, 0.301558, 0.634384, 1.250443, 2.482564",\ + "0.030125, 0.302556, 0.636324, 1.250443, 2.482564",\ + "0.042888, 0.304795, 0.636360, 1.250443, 2.482564",\ + "0.054816, 0.308050, 0.636463, 1.250443, 2.482564",\ + "0.130787, 0.346172, 0.642713, 1.252991, 2.482564"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002475, 0.075473, 0.162359, 0.322243, 0.642011"); + values ( "0.068909, 0.173502, 0.284792, 0.488757, 0.896689",\ + "0.156317, 0.260820, 0.372072, 0.576063, 0.984042",\ + "0.236694, 0.341152, 0.452099, 0.656091, 1.064074",\ + "0.293432, 0.398701, 0.509642, 0.713335, 1.120722",\ + "0.587713, 0.702042, 0.813273, 1.016348, 1.422499"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002475, 0.075473, 0.162359, 0.322243, 0.642011"); + values ( "0.025687, 0.188435, 0.388543, 0.760465, 1.504307",\ + "0.025687, 0.188583, 0.389046, 0.760465, 1.504307",\ + "0.026721, 0.188583, 0.389046, 0.760465, 1.504307",\ + "0.028743, 0.188583, 0.389046, 0.760465, 1.504307",\ + "0.047139, 0.192514, 0.389046, 0.760465, 1.504587"); + } + + } /* end of arc clk_ast_tlul_i_sprom_rm_o[1]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002475, 0.075473, 0.162359, 0.322243, 0.642011"); + values ( "0.049435, 0.202151, 0.377283, 0.699803, 1.344843",\ + "0.135820, 0.289326, 0.464387, 0.786517, 1.430777",\ + "0.219334, 0.377453, 0.552342, 0.874138, 1.517732",\ + "0.277559, 0.441846, 0.616457, 0.938052, 1.581241",\ + "0.579442, 0.791721, 0.966837, 1.286790, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002475, 0.075473, 0.162359, 0.322243, 0.642011"); + values ( "0.025782, 0.301558, 0.634384, 1.249210, 2.473548",\ + "0.030125, 0.302556, 0.636324, 1.249210, 2.473548",\ + "0.042888, 0.304795, 0.636360, 1.249285, 2.473548",\ + "0.054816, 0.308050, 0.636463, 1.250030, 2.473548",\ + "0.130787, 0.346172, 0.642713, 1.252991, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002475, 0.075473, 0.162359, 0.322243, 0.642011"); + values ( "0.068909, 0.173502, 0.284792, 0.488757, 0.896689",\ + "0.156317, 0.260820, 0.372072, 0.576063, 0.984042",\ + "0.236694, 0.341152, 0.452099, 0.656091, 1.064074",\ + "0.293432, 0.398701, 0.509642, 0.713335, 1.120722",\ + "0.587713, 0.702042, 0.813273, 1.016348, 1.422499"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002475, 0.075473, 0.162359, 0.322243, 0.642011"); + values ( "0.025687, 0.187631, 0.387035, 0.758233, 1.500630",\ + "0.025687, 0.187631, 0.387035, 0.758233, 1.500630",\ + "0.026721, 0.187631, 0.387035, 0.758233, 1.500630",\ + "0.028743, 0.188240, 0.387493, 0.759136, 1.502422",\ + "0.047139, 0.192514, 0.387566, 0.759907, 1.504587"); + } + + } /* end of arc clk_ast_tlul_i_sprom_rm_o[1]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025782, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.216765, 0.170836, 0.140637, 0.129293, 0.142978",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025687, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.251111, 0.175790, 0.107631, 0.084664, 0.147578",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_sprom_rm_o[1]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025782, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.148693, -0.106276, -0.071789, -0.032365, 0.273682",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.025687, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.164267, -0.098352, -0.040693, 0.001268, 0.221876",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_sprom_rm_o[1]_hldr*/ + +} /* end of pin sprom_rm_o[1] */ + +pin("sprom_rm_o[0]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.642011 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002026 ; + + /* Other user defined attributes. */ + original_pin : sprom_rm_o[0]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.048221, 0.201247, 0.376603, 0.699350, 1.344843",\ + "0.134540, 0.288422, 0.463709, 0.786065, 1.430777",\ + "0.217754, 0.376549, 0.551664, 0.873687, 1.517732",\ + "0.275678, 0.440944, 0.615780, 0.937600, 1.581241",\ + "0.575742, 0.790814, 0.966163, 1.286341, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.024153, 0.299842, 0.633087, 1.249579, 2.482563",\ + "0.028666, 0.300830, 0.635034, 1.249579, 2.482563",\ + "0.041608, 0.303085, 0.635070, 1.249579, 2.482563",\ + "0.053514, 0.306363, 0.635172, 1.249579, 2.482563",\ + "0.129154, 0.344706, 0.641428, 1.252134, 2.482563"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.067848, 0.172946, 0.284382, 0.488491, 0.896709",\ + "0.155259, 0.260265, 0.371663, 0.575796, 0.984062",\ + "0.235619, 0.340599, 0.451690, 0.655824, 1.064094",\ + "0.292315, 0.398147, 0.509233, 0.713069, 1.120741",\ + "0.586152, 0.701486, 0.812865, 1.016083, 1.422518"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.024592, 0.187440, 0.387796, 0.759979, 1.504343",\ + "0.024592, 0.187585, 0.388300, 0.759979, 1.504343",\ + "0.025674, 0.187585, 0.388300, 0.759979, 1.504343",\ + "0.027742, 0.187585, 0.388300, 0.759979, 1.504343",\ + "0.046348, 0.191554, 0.388300, 0.759979, 1.504623"); + } + + } /* end of arc clk_ast_tlul_i_sprom_rm_o[0]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.048221, 0.201247, 0.376603, 0.699350, 1.344843",\ + "0.134540, 0.288422, 0.463709, 0.786065, 1.430777",\ + "0.217754, 0.376549, 0.551664, 0.873687, 1.517732",\ + "0.275678, 0.440944, 0.615780, 0.937600, 1.581241",\ + "0.575742, 0.790814, 0.966163, 1.286341, 1.926697"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.024153, 0.299842, 0.633087, 1.248350, 2.473548",\ + "0.028666, 0.300830, 0.635034, 1.248350, 2.473548",\ + "0.041608, 0.303085, 0.635070, 1.248425, 2.473548",\ + "0.053514, 0.306363, 0.635172, 1.249169, 2.473548",\ + "0.129154, 0.344706, 0.641428, 1.252134, 2.473548"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.067848, 0.172946, 0.284382, 0.488491, 0.896709",\ + "0.155259, 0.260265, 0.371663, 0.575796, 0.984062",\ + "0.235619, 0.340599, 0.451690, 0.655824, 1.064094",\ + "0.292315, 0.398147, 0.509233, 0.713069, 1.120741",\ + "0.586152, 0.701486, 0.812865, 1.016083, 1.422518"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002026, 0.075025, 0.162022, 0.322018, 0.642011"); + values ( "0.024592, 0.186641, 0.386289, 0.757748, 1.500666",\ + "0.024592, 0.186641, 0.386289, 0.757748, 1.500666",\ + "0.025674, 0.186641, 0.386289, 0.757748, 1.500666",\ + "0.027742, 0.187251, 0.386746, 0.758650, 1.502457",\ + "0.046348, 0.191554, 0.386818, 0.759420, 1.504623"); + } + + } /* end of arc clk_ast_tlul_i_sprom_rm_o[0]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.207828, 0.161899, 0.131700, 0.120356, 0.134041",\ + "0.216011, 0.170082, 0.139882, 0.128539, 0.142224",\ + "0.288779, 0.242850, 0.212651, 0.201307, 0.214992",\ + "0.380040, 0.333963, 0.303752, 0.292400, 0.306034",\ + "0.827149, 0.779820, 0.749512, 0.738085, 0.751291"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024592, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.242722, 0.167401, 0.099242, 0.076275, 0.139189",\ + "0.250613, 0.175291, 0.107132, 0.084165, 0.147079",\ + "0.327767, 0.252445, 0.184286, 0.161319, 0.224233",\ + "0.428766, 0.353454, 0.285343, 0.262454, 0.326079",\ + "0.935354, 0.860120, 0.792428, 0.770222, 0.840039"); + } + + } /* end of arc clk_ast_tlul_i_sprom_rm_o[0]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024153, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.139756, -0.097339, -0.062852, -0.023429, 0.282618",\ + "-0.147938, -0.105521, -0.071034, -0.031611, 0.274436",\ + "-0.220707, -0.178290, -0.143803, -0.104379, 0.201668",\ + "-0.311850, -0.269460, -0.234911, -0.196695, 0.094357",\ + "-0.757887, -0.715724, -0.680647, -0.652650, -0.488425"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.024592, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.155880, -0.089965, -0.032306, 0.009655, 0.230263",\ + "-0.163769, -0.097854, -0.040195, 0.001766, 0.222374",\ + "-0.240964, -0.175049, -0.117390, -0.075429, 0.145179",\ + "-0.341987, -0.275921, -0.218047, -0.176027, 0.044207",\ + "-0.848724, -0.781360, -0.721623, -0.679100, -0.462092"); + } + + } /* end of arc clk_ast_tlul_i_sprom_rm_o[0]_hldr*/ + +} /* end of pin sprom_rm_o[0] */ +} /* end of bus sprom_rm_o */ +bus ( dft_scan_md_o ) { + + bus_type : BUS4_type6 ; + direction : output ; + +pin("dft_scan_md_o[3]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.161713 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.003517 ; + + /* Other user defined attributes. */ + original_pin : dft_scan_md_o[3]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003517, 0.023292, 0.043066, 0.082615, 0.161713"); + values ( "0.133436, 0.291149, 0.448015, 0.761558, 1.388635",\ + "0.217239, 0.374877, 0.531734, 0.845677, 1.473578",\ + "0.292722, 0.450435, 0.607370, 0.921610, 1.550114",\ + "0.345414, 0.503270, 0.660387, 0.974530, 1.602811",\ + "0.613422, 0.771515, 0.928749, 1.242027, 1.868510"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003517, 0.023292, 0.043066, 0.082615, 0.161713"); + values ( "0.066308, 0.363809, 0.664826, 1.265395, 2.466601",\ + "0.066379, 0.363809, 0.664826, 1.265395, 2.466601",\ + "0.066379, 0.364085, 0.666054, 1.266438, 2.466601",\ + "0.066379, 0.364085, 0.666054, 1.266438, 2.466601",\ + "0.066665, 0.364152, 0.666054, 1.266438, 2.466601"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003517, 0.023292, 0.043066, 0.082615, 0.161713"); + values ( "0.114669, 0.217180, 0.316410, 0.514247, 0.909878",\ + "0.195349, 0.297552, 0.396278, 0.593860, 0.989031",\ + "0.275060, 0.377342, 0.475886, 0.672942, 1.067052",\ + "0.331983, 0.434648, 0.533289, 0.730356, 1.124476",\ + "0.627120, 0.733734, 0.832492, 1.029975, 1.424937"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003517, 0.023292, 0.043066, 0.082615, 0.161713"); + values ( "0.047862, 0.221071, 0.402991, 0.762572, 1.481727",\ + "0.048050, 0.221071, 0.402991, 0.762572, 1.484038",\ + "0.048841, 0.221071, 0.402991, 0.762572, 1.484038",\ + "0.050174, 0.221071, 0.402991, 0.762572, 1.484038",\ + "0.063454, 0.223134, 0.402991, 0.763435, 1.490666"); + } + + } /* end of arc clk_ast_tlul_i_dft_scan_md_o[3]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003517, 0.023292, 0.043066, 0.082615, 0.161713"); + values ( "0.133312, 0.291022, 0.447820, 0.761354, 1.388420",\ + "0.217237, 0.374875, 0.531731, 0.845675, 1.473578",\ + "0.292688, 0.450412, 0.607364, 0.921580, 1.550030",\ + "0.345261, 0.502988, 0.659849, 0.973849, 1.601865",\ + "0.613232, 0.771275, 0.928568, 1.241507, 1.867283"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003517, 0.023292, 0.043066, 0.082615, 0.161713"); + values ( "0.066239, 0.363467, 0.663180, 1.263144, 2.462725",\ + "0.066251, 0.363467, 0.663180, 1.263144, 2.462725",\ + "0.066251, 0.363585, 0.663361, 1.263144, 2.462725",\ + "0.066330, 0.363585, 0.663361, 1.263144, 2.462725",\ + "0.066585, 0.363585, 0.663361, 1.263144, 2.462725"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003517, 0.023292, 0.043066, 0.082615, 0.161713"); + values ( "0.114669, 0.217179, 0.316406, 0.514185, 0.909696",\ + "0.195349, 0.297552, 0.396278, 0.593860, 0.989031",\ + "0.275060, 0.377342, 0.475886, 0.672905, 1.066937",\ + "0.331983, 0.434648, 0.533289, 0.730334, 1.124409",\ + "0.627120, 0.733671, 0.832318, 1.029654, 1.424330"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003517, 0.023292, 0.043066, 0.082615, 0.161713"); + values ( "0.047860, 0.219783, 0.399450, 0.759952, 1.480082",\ + "0.047983, 0.219783, 0.399450, 0.759952, 1.480442",\ + "0.048841, 0.219783, 0.399450, 0.759952, 1.480924",\ + "0.050169, 0.219999, 0.399514, 0.759952, 1.480924",\ + "0.063451, 0.222984, 0.400129, 0.761188, 1.483772"); + } + + } /* end of arc clk_ast_tlul_i_dft_scan_md_o[3]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.066308, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.460686, 0.485165, 0.562988, 0.630573, 1.061400",\ + "0.481673, 0.506153, 0.583976, 0.651561, 1.082387",\ + "0.534849, 0.559328, 0.637151, 0.704736, 1.135562",\ + "0.617824, 0.642303, 0.720126, 0.787711, 1.218538",\ + "0.947556, 0.972173, 1.049996, 1.117581, 1.548407"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.047862, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.457000, 0.374371, 0.299229, 0.265511, 0.232819",\ + "0.477245, 0.394617, 0.319474, 0.285756, 0.253064",\ + "0.547749, 0.465121, 0.389978, 0.356260, 0.323568",\ + "0.640993, 0.558364, 0.483222, 0.449504, 0.416811",\ + "1.063337, 0.980709, 0.905566, 0.871848, 0.839156"); + } + + } /* end of arc clk_ast_tlul_i_dft_scan_md_o[3]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.066239, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.335865, -0.312869, -0.277184, -0.251910, -0.123825",\ + "-0.356827, -0.333831, -0.298147, -0.272873, -0.144787",\ + "-0.410399, -0.387403, -0.351719, -0.326444, -0.198359",\ + "-0.492968, -0.469972, -0.434287, -0.409013, -0.280927",\ + "-0.820618, -0.797635, -0.761950, -0.736676, -0.608590"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.047860, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.242066, -0.200653, -0.167936, -0.130741, 0.097416",\ + "-0.262424, -0.221011, -0.188294, -0.151099, 0.077058",\ + "-0.336018, -0.294606, -0.261888, -0.224693, 0.003464",\ + "-0.427308, -0.385895, -0.353178, -0.315983, -0.087826",\ + "-0.831346, -0.789933, -0.757216, -0.720060, -0.491903"); + } + + } /* end of arc clk_ast_tlul_i_dft_scan_md_o[3]_hldr*/ + +} /* end of pin dft_scan_md_o[3] */ + +pin("dft_scan_md_o[2]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.158177 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002946 ; + + /* Other user defined attributes. */ + original_pin : dft_scan_md_o[2]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002946, 0.017242, 0.041754, 0.080562, 0.158177"); + values ( "0.089185, 0.209900, 0.411017, 0.726230, 1.356390",\ + "0.176530, 0.297275, 0.498423, 0.814441, 1.446276",\ + "0.269642, 0.392143, 0.593017, 0.908861, 1.540369",\ + "0.337617, 0.463374, 0.664040, 0.979619, 1.610599",\ + "0.699386, 0.858557, 1.060886, 1.375366, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002946, 0.017242, 0.041754, 0.080562, 0.158177"); + values ( "0.068736, 0.284281, 0.666318, 1.270003, 2.477274",\ + "0.069806, 0.284281, 0.666318, 1.270003, 2.477274",\ + "0.079825, 0.285836, 0.666318, 1.270003, 2.477473",\ + "0.092727, 0.288939, 0.666318, 1.270003, 2.478527",\ + "0.183999, 0.330916, 0.673768, 1.274123, 2.479640"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002946, 0.017242, 0.041754, 0.080562, 0.158177"); + values ( "0.114548, 0.198291, 0.327841, 0.529548, 0.932669",\ + "0.202420, 0.286233, 0.415819, 0.617532, 1.020660",\ + "0.283719, 0.367201, 0.496624, 0.698334, 1.101477",\ + "0.341605, 0.425242, 0.554619, 0.756211, 1.159115",\ + "0.647553, 0.733958, 0.863532, 1.064748, 1.466840"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002946, 0.017242, 0.041754, 0.080562, 0.158177"); + values ( "0.059272, 0.178664, 0.407996, 0.776762, 1.514808",\ + "0.059349, 0.178981, 0.409509, 0.776762, 1.514808",\ + "0.059349, 0.178981, 0.409796, 0.777827, 1.514808",\ + "0.059903, 0.178981, 0.409796, 0.777827, 1.514808",\ + "0.069603, 0.181400, 0.409796, 0.777827, 1.514808"); + } + + } /* end of arc clk_ast_tlul_i_dft_scan_md_o[2]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002946, 0.017242, 0.041754, 0.080562, 0.158177"); + values ( "0.089178, 0.209899, 0.411017, 0.726223, 1.356368",\ + "0.176530, 0.297223, 0.498130, 0.813320, 1.443459",\ + "0.269641, 0.392139, 0.592998, 0.908848, 1.540369",\ + "0.337615, 0.463370, 0.664029, 0.979611, 1.610599",\ + "0.699305, 0.858522, 1.060836, 1.375332, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002946, 0.017242, 0.041754, 0.080562, 0.158177"); + values ( "0.068736, 0.284090, 0.664476, 1.268786, 2.477107",\ + "0.069799, 0.284090, 0.664476, 1.268786, 2.477170",\ + "0.079823, 0.285806, 0.664476, 1.268786, 2.477473",\ + "0.092726, 0.288922, 0.664476, 1.268786, 2.478218",\ + "0.183999, 0.330234, 0.669979, 1.271116, 2.478674"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002946, 0.017242, 0.041754, 0.080562, 0.158177"); + values ( "0.114547, 0.198291, 0.327841, 0.529547, 0.932665",\ + "0.202385, 0.286186, 0.415735, 0.617437, 1.020546",\ + "0.283468, 0.366941, 0.496348, 0.698061, 1.101213",\ + "0.341452, 0.425085, 0.554450, 0.756012, 1.158853",\ + "0.647498, 0.733909, 0.863481, 1.064711, 1.466833"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002946, 0.017242, 0.041754, 0.080562, 0.158177"); + values ( "0.059268, 0.178282, 0.407986, 0.775351, 1.510125",\ + "0.059268, 0.178282, 0.408103, 0.775351, 1.510125",\ + "0.059268, 0.178282, 0.408103, 0.775351, 1.510553",\ + "0.059897, 0.178402, 0.408103, 0.775351, 1.510553",\ + "0.069562, 0.181271, 0.408103, 0.775351, 1.510553"); + } + + } /* end of arc clk_ast_tlul_i_dft_scan_md_o[2]_redg_min*/ + +} /* end of pin dft_scan_md_o[2] */ + +pin("dft_scan_md_o[1]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.158177 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.002940 ; + + /* Other user defined attributes. */ + original_pin : dft_scan_md_o[1]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002940, 0.017235, 0.041749, 0.080558, 0.158177"); + values ( "0.089114, 0.209844, 0.410975, 0.726203, 1.356391",\ + "0.176459, 0.297219, 0.498381, 0.814414, 1.446276",\ + "0.269560, 0.392087, 0.592975, 0.908833, 1.540369",\ + "0.337521, 0.463318, 0.663998, 0.979591, 1.610599",\ + "0.699205, 0.858501, 1.060843, 1.375339, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002940, 0.017235, 0.041749, 0.080558, 0.158177"); + values ( "0.068629, 0.284175, 0.666239, 1.269949, 2.477274",\ + "0.069702, 0.284175, 0.666239, 1.269949, 2.477274",\ + "0.079734, 0.285730, 0.666239, 1.269949, 2.477474",\ + "0.092637, 0.288835, 0.666239, 1.269949, 2.478527",\ + "0.183880, 0.330821, 0.673696, 1.274070, 2.479641"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002940, 0.017235, 0.041749, 0.080558, 0.158177"); + values ( "0.114532, 0.198282, 0.327841, 0.529557, 0.932695",\ + "0.202404, 0.286224, 0.415819, 0.617541, 1.020687",\ + "0.283703, 0.367192, 0.496624, 0.698343, 1.101503",\ + "0.341588, 0.425233, 0.554619, 0.756220, 1.159141",\ + "0.647534, 0.733949, 0.863532, 1.064757, 1.466866"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002940, 0.017235, 0.041749, 0.080558, 0.158177"); + values ( "0.059254, 0.178648, 0.407996, 0.776778, 1.514857",\ + "0.059330, 0.178965, 0.409508, 0.776778, 1.514857",\ + "0.059330, 0.178965, 0.409796, 0.777843, 1.514857",\ + "0.059885, 0.178965, 0.409796, 0.777843, 1.514857",\ + "0.069589, 0.181384, 0.409796, 0.777843, 1.514857"); + } + + } /* end of arc clk_ast_tlul_i_dft_scan_md_o[1]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002940, 0.017235, 0.041749, 0.080558, 0.158177"); + values ( "0.089108, 0.209843, 0.410975, 0.726196, 1.356369",\ + "0.176459, 0.297167, 0.498088, 0.813292, 1.443459",\ + "0.269559, 0.392083, 0.592956, 0.908820, 1.540369",\ + "0.337519, 0.463314, 0.663987, 0.979583, 1.610599",\ + "0.699124, 0.858466, 1.060793, 1.375304, 2.003839"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002940, 0.017235, 0.041749, 0.080558, 0.158177"); + values ( "0.068628, 0.283984, 0.664398, 1.268733, 2.477107",\ + "0.069695, 0.283984, 0.664398, 1.268733, 2.477171",\ + "0.079731, 0.285701, 0.664398, 1.268733, 2.477474",\ + "0.092635, 0.288817, 0.664398, 1.268733, 2.478218",\ + "0.183880, 0.330139, 0.669908, 1.271063, 2.478675"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002940, 0.017235, 0.041749, 0.080558, 0.158177"); + values ( "0.114530, 0.198282, 0.327841, 0.529556, 0.932692",\ + "0.202368, 0.286177, 0.415735, 0.617446, 1.020573",\ + "0.283452, 0.366932, 0.496348, 0.698070, 1.101240",\ + "0.341435, 0.425076, 0.554450, 0.756020, 1.158880",\ + "0.647479, 0.733900, 0.863481, 1.064720, 1.466859"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.002940, 0.017235, 0.041749, 0.080558, 0.158177"); + values ( "0.059249, 0.178266, 0.407986, 0.775367, 1.510173",\ + "0.059249, 0.178266, 0.408103, 0.775367, 1.510173",\ + "0.059249, 0.178266, 0.408103, 0.775367, 1.510602",\ + "0.059879, 0.178385, 0.408103, 0.775367, 1.510602",\ + "0.069548, 0.181255, 0.408103, 0.775367, 1.510602"); + } + + } /* end of arc clk_ast_tlul_i_dft_scan_md_o[1]_redg_min*/ + +} /* end of pin dft_scan_md_o[1] */ + +pin("dft_scan_md_o[0]") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.161713 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.003291 ; + + /* Other user defined attributes. */ + original_pin : dft_scan_md_o[0]; + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003291, 0.023093, 0.042896, 0.082502, 0.161713"); + values ( "0.131615, 0.289575, 0.446666, 0.760660, 1.388635",\ + "0.215420, 0.373304, 0.530386, 0.844778, 1.473578",\ + "0.290903, 0.448861, 0.606021, 0.920710, 1.550114",\ + "0.343593, 0.501694, 0.659036, 0.973630, 1.602811",\ + "0.611596, 0.769938, 0.927397, 1.241129, 1.868510"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003291, 0.023093, 0.042896, 0.082502, 0.161713"); + values ( "0.062950, 0.360790, 0.662238, 1.263674, 2.466600",\ + "0.063013, 0.360790, 0.662238, 1.263674, 2.466600",\ + "0.063013, 0.361056, 0.663457, 1.264718, 2.466600",\ + "0.063013, 0.361056, 0.663457, 1.264718, 2.466600",\ + "0.063304, 0.361135, 0.663457, 1.264718, 2.466600"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003291, 0.023093, 0.042896, 0.082502, 0.161713"); + values ( "0.113407, 0.216311, 0.315683, 0.513806, 0.910003",\ + "0.194085, 0.296687, 0.395555, 0.593419, 0.989157",\ + "0.273778, 0.376478, 0.475164, 0.672502, 1.067177",\ + "0.330670, 0.433783, 0.532566, 0.729916, 1.124601",\ + "0.625514, 0.732868, 0.831768, 1.029534, 1.425062"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003291, 0.023093, 0.042896, 0.082502, 0.161713"); + values ( "0.046113, 0.219478, 0.401657, 0.761769, 1.481954",\ + "0.046300, 0.219478, 0.401657, 0.761769, 1.484267",\ + "0.047120, 0.219478, 0.401657, 0.761769, 1.484267",\ + "0.048485, 0.219478, 0.401657, 0.761769, 1.484267",\ + "0.061963, 0.221582, 0.401657, 0.762623, 1.490896"); + } + + } /* end of arc clk_ast_tlul_i_dft_scan_md_o[0]_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003291, 0.023093, 0.042896, 0.082502, 0.161713"); + values ( "0.131490, 0.289449, 0.446472, 0.760456, 1.388420",\ + "0.215418, 0.373302, 0.530383, 0.844776, 1.473578",\ + "0.290869, 0.448838, 0.606015, 0.920679, 1.550029",\ + "0.343439, 0.501415, 0.658500, 0.972949, 1.601865",\ + "0.611409, 0.769697, 0.927216, 1.240610, 1.867283"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003291, 0.023093, 0.042896, 0.082502, 0.161713"); + values ( "0.062879, 0.360460, 0.660603, 1.261425, 2.462725",\ + "0.062899, 0.360460, 0.660603, 1.261425, 2.462725",\ + "0.062899, 0.360578, 0.660783, 1.261425, 2.462725",\ + "0.062968, 0.360578, 0.660783, 1.261425, 2.462725",\ + "0.063222, 0.360578, 0.660783, 1.261425, 2.462725"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003291, 0.023093, 0.042896, 0.082502, 0.161713"); + values ( "0.113407, 0.216309, 0.315678, 0.513743, 0.909821",\ + "0.194085, 0.296687, 0.395555, 0.593419, 0.989157",\ + "0.273778, 0.376478, 0.475164, 0.672465, 1.067062",\ + "0.330670, 0.433783, 0.532566, 0.729894, 1.124533",\ + "0.625514, 0.732807, 0.831595, 1.029214, 1.424455"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.003291, 0.023093, 0.042896, 0.082502, 0.161713"); + values ( "0.046112, 0.218208, 0.398133, 0.759147, 1.480310",\ + "0.046235, 0.218208, 0.398133, 0.759147, 1.480670",\ + "0.047116, 0.218208, 0.398133, 0.759147, 1.481152",\ + "0.048480, 0.218425, 0.398198, 0.759147, 1.481152",\ + "0.061948, 0.221432, 0.398830, 0.760382, 1.484000"); + } + + } /* end of arc clk_ast_tlul_i_dft_scan_md_o[0]_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.062950, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.468253, 0.492732, 0.570555, 0.638140, 1.068967",\ + "0.490044, 0.514523, 0.592346, 0.659931, 1.090757",\ + "0.545368, 0.569847, 0.647670, 0.715255, 1.146082",\ + "0.634688, 0.659168, 0.736991, 0.804576, 1.235402",\ + "1.017271, 1.041743, 1.119566, 1.187151, 1.617977"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.046113, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.459602, 0.376973, 0.301830, 0.268113, 0.235420",\ + "0.477883, 0.395254, 0.320112, 0.286394, 0.253701",\ + "0.549719, 0.467091, 0.391948, 0.358230, 0.325538",\ + "0.644311, 0.561683, 0.486540, 0.452822, 0.420130",\ + "1.067339, 0.984711, 0.909568, 0.875850, 0.843158"); + } + + } /* end of arc clk_ast_tlul_i_dft_scan_md_o[0]_stupr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.062879, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.343432, -0.320436, -0.284752, -0.259478, -0.131392",\ + "-0.365195, -0.342199, -0.306515, -0.281240, -0.153155",\ + "-0.420715, -0.397719, -0.362035, -0.336760, -0.208675",\ + "-0.509827, -0.486831, -0.451147, -0.425873, -0.297787",\ + "-0.891088, -0.868095, -0.832410, -0.807136, -0.679050"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.046112, 0.195118, 0.455354, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.244757, -0.203344, -0.170627, -0.133432, 0.094725",\ + "-0.263038, -0.221625, -0.188908, -0.151713, 0.076444",\ + "-0.337776, -0.296363, -0.263646, -0.226451, 0.001706",\ + "-0.430900, -0.389488, -0.356770, -0.319575, -0.091418",\ + "-0.836348, -0.794936, -0.762218, -0.725057, -0.496900"); + } + + } /* end of arc clk_ast_tlul_i_dft_scan_md_o[0]_hldr*/ + +} /* end of pin dft_scan_md_o[0] */ +} /* end of bus dft_scan_md_o */ + +pin("scan_shift_en_o") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.095084 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.028179 ; + + /* Other user defined attributes. */ + original_pin : scan_shift_en_o; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : recovery_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.195118, 0.455354, 0.766211, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.532219, 0.489613, 0.431727, 0.435127, 0.476450",\ + "0.639994, 0.597388, 0.539502, 0.542902, 0.584225",\ + "0.783455, 0.740849, 0.682963, 0.686363, 0.727686",\ + "0.930263, 0.887658, 0.829771, 0.833171, 0.874494",\ + "1.623874, 1.581268, 1.523381, 1.526781, 1.568104"); + } + + } /* end of arc clk_ast_alert_i_scan_shift_en_o_recrr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : removal_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.195118, 0.455354, 0.746802, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "0.043626, 0.100485, 0.237779, 0.265545, 0.602978",\ + "-0.038691, 0.018168, 0.155463, 0.183228, 0.520661",\ + "-0.121016, -0.064151, 0.072977, 0.100718, 0.437847",\ + "-0.190085, -0.133213, 0.003667, 0.031370, 0.368047",\ + "-0.499886, -0.442913, -0.307440, -0.279961, 0.053979"); + } + + } /* end of arc clk_ast_alert_i_scan_shift_en_o_remrr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : setup_rising ; + clock_gating_flag : true ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.195118, 0.455354, 0.766211, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.063826, 0.062652, 0.129143, 0.282266, 0.638582",\ + "0.144516, 0.122873, 0.153635, 0.250761, 0.490135",\ + "0.243845, 0.203218, 0.197002, 0.225868, 0.314993",\ + "0.333420, 0.283466, 0.260028, 0.260578, 0.289579",\ + "0.742571, 0.680072, 0.640181, 0.639634, 0.684785"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.195118, 0.484230, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.069804, -0.018648, -0.111764, -0.244874, -0.513274",\ + "0.147065, 0.058673, -0.032069, -0.165383, -0.437145",\ + "0.257633, 0.169188, 0.076752, -0.058192, -0.332590",\ + "0.419789, 0.332087, 0.238963, 0.102061, -0.177084",\ + "0.794358, 0.708802, 0.615035, 0.473837, 0.183265"); + } + + } /* end of arc clk_ast_ext_i_scan_shift_en_o_cgsr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : hold_rising ; + clock_gating_flag : true ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.195118, 0.455354, 0.746802, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.041482, 0.004889, 0.044867, 0.102673, 0.219769",\ + "-0.121636, -0.074743, -0.032444, 0.026924, 0.145736",\ + "-0.213199, -0.163583, -0.120926, -0.060090, 0.062464",\ + "-0.289736, -0.238766, -0.195667, -0.134080, -0.009915",\ + "-0.654569, -0.601430, -0.555559, -0.492609, -0.367822"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.195118, 0.476372, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.044121, 0.037282, 0.129537, 0.261976, 0.529485",\ + "-0.122275, -0.038844, 0.049184, 0.181641, 0.454147",\ + "-0.228703, -0.144549, -0.055160, 0.079110, 0.355165",\ + "-0.387423, -0.304473, -0.214026, -0.077712, 0.202895",\ + "-0.744719, -0.665813, -0.573547, -0.433021, -0.142598"); + } + + } /* end of arc clk_ast_ext_i_scan_shift_en_o_cghr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.028179, 0.030705, 0.036662, 0.056671, 0.095084"); + values ( "380000.437500, 380000.468750, 380000.531250, 380000.812500, 380001.312500",\ + "380000.531250, 380000.562500, 380000.625000, 380000.906250, 380001.406250",\ + "380000.593750, 380000.625000, 380000.687500, 380000.968750, 380001.468750",\ + "380000.656250, 380000.687500, 380000.750000, 380001.031250, 380001.531250",\ + "380000.968750, 380001.000000, 380001.062500, 380001.343750, 380001.843750"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.028179, 0.030705, 0.036662, 0.056671, 0.095084"); + values ( "0.750971, 0.815816, 0.968419, 1.480978, 2.464965",\ + "0.750971, 0.815816, 0.968419, 1.480978, 2.464965",\ + "0.750971, 0.815816, 0.968419, 1.480978, 2.464965",\ + "0.750971, 0.815816, 0.968419, 1.480978, 2.464965",\ + "0.750971, 0.815816, 0.968419, 1.480978, 2.464965"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.028179, 0.030705, 0.036662, 0.056671, 0.095084"); + values ( "380001.750000, 380001.781250, 380001.843750, 380002.031250, 380002.375000",\ + "380001.843750, 380001.875000, 380001.937500, 380002.125000, 380002.468750",\ + "380001.937500, 380001.968750, 380002.031250, 380002.218750, 380002.562500",\ + "380002.000000, 380002.031250, 380002.093750, 380002.281250, 380002.625000",\ + "380002.343750, 380002.375000, 380002.437500, 380002.625000, 380002.968750"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.028179, 0.030705, 0.036662, 0.056671, 0.095084"); + values ( "0.476972, 0.520642, 0.623430, 0.968675, 1.632439",\ + "0.476972, 0.520642, 0.623430, 0.968675, 1.632439",\ + "0.476984, 0.520655, 0.623442, 0.968683, 1.632439",\ + "0.477092, 0.520773, 0.623551, 0.968760, 1.632439",\ + "0.477240, 0.520936, 0.623729, 0.968990, 1.632439"); + } + + } /* end of arc clk_ast_tlul_i_scan_shift_en_o_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.028179, 0.030705, 0.036662, 0.056671, 0.095084"); + values ( "0.567867, 0.601968, 0.682377, 0.952454, 1.470934",\ + "0.656009, 0.690105, 0.770491, 1.040492, 1.558825",\ + "0.750333, 0.784422, 0.864790, 1.134732, 1.652952",\ + "0.817746, 0.851834, 0.932210, 1.202178, 1.720448",\ + "1.177034, 1.211190, 1.291747, 1.562319, 2.081752"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.028179, 0.030705, 0.036662, 0.056671, 0.095084"); + values ( "0.742023, 0.806942, 0.960129, 1.473159, 2.454133",\ + "0.742023, 0.806942, 0.960129, 1.473159, 2.454133",\ + "0.742023, 0.806942, 0.960129, 1.473554, 2.458020",\ + "0.742023, 0.806942, 0.960129, 1.474655, 2.462414",\ + "0.742023, 0.806942, 0.960129, 1.474655, 2.462414"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.028179, 0.030705, 0.036662, 0.056671, 0.095084"); + values ( "0.436555, 0.460383, 0.516602, 0.705431, 1.067936",\ + "0.524364, 0.548192, 0.604409, 0.793229, 1.155716",\ + "0.605651, 0.629479, 0.685698, 0.874530, 1.237040",\ + "0.663776, 0.687602, 0.743831, 0.932696, 1.295270",\ + "0.971918, 0.995743, 1.051944, 1.240713, 1.603103"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.028179, 0.030705, 0.036662, 0.056671, 0.095084"); + values ( "0.476372, 0.519944, 0.622887, 0.968653, 1.631455",\ + "0.476372, 0.519944, 0.622887, 0.968653, 1.631455",\ + "0.476372, 0.519944, 0.622887, 0.968653, 1.631461",\ + "0.476372, 0.519944, 0.622887, 0.968653, 1.631478",\ + "0.476373, 0.519944, 0.622887, 0.968653, 1.631806"); + } + + } /* end of arc clk_ast_tlul_i_scan_shift_en_o_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : recovery_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.195118, 0.455354, 0.766211, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "1.025280, 0.973708, 0.938980, 0.927998, 0.968803",\ + "1.133724, 1.082152, 1.047424, 1.036442, 1.077247",\ + "1.276742, 1.225171, 1.190443, 1.179460, 1.220266",\ + "1.421700, 1.370129, 1.335400, 1.324418, 1.365223",\ + "2.112985, 2.061414, 2.026685, 2.015703, 2.056509"); + } + + } /* end of arc clk_ast_tlul_i_scan_shift_en_o_recrr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : removal_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.195118, 0.455354, 0.746802, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.484807, -0.401976, -0.317025, -0.255738, 0.062771",\ + "-0.593251, -0.510420, -0.425469, -0.364182, -0.045673",\ + "-0.735922, -0.653091, -0.568140, -0.506853, -0.188344",\ + "-0.871661, -0.788831, -0.703879, -0.642593, -0.324084",\ + "-1.567978, -1.485147, -1.400195, -1.338909, -1.020400"); + } + + } /* end of arc clk_ast_tlul_i_scan_shift_en_o_remrr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : setup_rising ; + clock_gating_flag : true ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.195118, 0.455354, 0.766211, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.500052, 0.464257, 0.467454, 0.481872, 0.641062",\ + "0.608496, 0.572702, 0.575898, 0.590317, 0.749506",\ + "0.751349, 0.715408, 0.718319, 0.732500, 0.890238",\ + "0.895828, 0.859887, 0.862797, 0.876979, 1.034717",\ + "1.584854, 1.547746, 1.548384, 1.560677, 1.706875"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.195118, 0.484230, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "0.472376, 0.383961, 0.292457, 0.226602, -0.114540",\ + "0.571622, 0.483207, 0.391702, 0.325848, -0.015294",\ + "0.718823, 0.630408, 0.538891, 0.473029, 0.131864",\ + "0.967954, 0.879538, 0.787986, 0.722105, 0.380872",\ + "1.461814, 1.373393, 1.281717, 1.215763, 0.874287"); + } + + } /* end of arc clk_ast_tlul_i_scan_shift_en_o_cgsr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : hold_rising ; + clock_gating_flag : true ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.195118, 0.455354, 0.746802, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.471383, -0.422460, -0.379894, -0.349813, -0.197830",\ + "-0.579827, -0.530904, -0.488339, -0.458257, -0.306274",\ + "-0.722620, -0.673676, -0.631108, -0.601022, -0.449003",\ + "-0.858078, -0.809134, -0.766565, -0.736479, -0.584461",\ + "-1.555647, -1.506536, -1.463946, -1.433827, -1.281521"); + } + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.195118, 0.476372, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.447062, -0.363296, -0.274639, -0.209836, 0.132805",\ + "-0.546307, -0.462542, -0.373884, -0.309082, 0.033560",\ + "-0.689363, -0.605598, -0.516940, -0.452138, -0.109496",\ + "-0.942607, -0.858821, -0.770125, -0.705296, -0.362529",\ + "-1.436381, -1.352539, -1.263740, -1.198841, -0.855737"); + } + + } /* end of arc clk_ast_tlul_i_scan_shift_en_o_cghr*/ + + timing () { + related_pin : "padmux2ast_i[2]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028179, 0.030705, 0.036662, 0.056671, 0.095084"); + values ( "0.489833, 0.523915, 0.604311, 0.874343, 1.392737",\ + "0.566174, 0.600431, 0.681298, 0.952915, 1.474352",\ + "0.660833, 0.694982, 0.775530, 1.046072, 1.565447",\ + "0.820966, 0.855139, 0.935773, 1.206609, 1.726547",\ + "1.095138, 1.129115, 1.209400, 1.479059, 1.996736"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028179, 0.030705, 0.036662, 0.056671, 0.095084"); + values ( "0.766211, 0.830301, 0.980244, 1.483872, 2.450712",\ + "0.766211, 0.830301, 0.980244, 1.483872, 2.456399",\ + "0.766211, 0.830301, 0.980244, 1.483872, 2.457642",\ + "0.766211, 0.830301, 0.980244, 1.483872, 2.465531",\ + "0.766211, 0.830301, 0.980244, 1.483872, 2.465531"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028179, 0.030705, 0.036662, 0.056671, 0.095084"); + values ( "0.331095, 0.354971, 0.411113, 0.599682, 0.961689",\ + "0.422338, 0.446186, 0.502618, 0.692160, 1.056035",\ + "0.529474, 0.553262, 0.609349, 0.797734, 1.159388",\ + "0.719234, 0.743081, 0.799295, 0.988106, 1.350577",\ + "1.047647, 1.071864, 1.127881, 1.316028, 1.677225"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028179, 0.030705, 0.036662, 0.056671, 0.095084"); + values ( "0.484230, 0.528601, 0.631276, 0.976140, 1.638195",\ + "0.484230, 0.528601, 0.631276, 0.976140, 1.638195",\ + "0.484230, 0.528601, 0.631276, 0.976140, 1.638195",\ + "0.484230, 0.528601, 0.631276, 0.976140, 1.638195",\ + "0.491280, 0.530601, 0.632503, 0.976140, 1.638195"); + } + + } /* end of arc padmux2ast_i[2]_scan_shift_en_o_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[2]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028179, 0.030705, 0.036662, 0.056671, 0.095084"); + values ( "0.489833, 0.523915, 0.604311, 0.874343, 1.392737",\ + "0.566174, 0.600431, 0.681298, 0.952915, 1.474352",\ + "0.660833, 0.694982, 0.775530, 1.046072, 1.565447",\ + "0.820966, 0.855139, 0.935773, 1.206609, 1.726547",\ + "1.095138, 1.129115, 1.209400, 1.479059, 1.996736"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028179, 0.030705, 0.036662, 0.056671, 0.095084"); + values ( "0.748897, 0.805011, 0.957821, 1.471076, 2.450712",\ + "0.748897, 0.805011, 0.957821, 1.471076, 2.456399",\ + "0.748897, 0.811237, 0.965448, 1.477816, 2.457642",\ + "0.748897, 0.811237, 0.965448, 1.479720, 2.465531",\ + "0.748897, 0.813325, 0.966210, 1.479720, 2.465531"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028179, 0.030705, 0.036662, 0.056671, 0.095084"); + values ( "0.331095, 0.354971, 0.411113, 0.599682, 0.961689",\ + "0.422338, 0.446186, 0.502618, 0.692160, 1.056035",\ + "0.529474, 0.553262, 0.609349, 0.797734, 1.159388",\ + "0.719234, 0.743081, 0.799295, 0.988106, 1.350577",\ + "1.047647, 1.071864, 1.127881, 1.316028, 1.677225"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028179, 0.030705, 0.036662, 0.056671, 0.095084"); + values ( "0.484230, 0.518873, 0.622079, 0.966408, 1.621243",\ + "0.484230, 0.518873, 0.622079, 0.966408, 1.621243",\ + "0.484230, 0.518873, 0.622079, 0.968730, 1.631847",\ + "0.484230, 0.522164, 0.625240, 0.971450, 1.631847",\ + "0.491280, 0.530601, 0.632503, 0.974773, 1.631847"); + } + + } /* end of arc padmux2ast_i[2]_scan_shift_en_o_una_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028179, 0.030705, 0.036662, 0.056671, 0.095084"); + values ( "380000.312500, 380000.343750, 380000.406250, 380000.687500, 380001.187500",\ + "380000.406250, 380000.437500, 380000.500000, 380000.781250, 380001.281250",\ + "380000.500000, 380000.531250, 380000.593750, 380000.875000, 380001.375000",\ + "380000.656250, 380000.687500, 380000.750000, 380001.031250, 380001.531250",\ + "380000.906250, 380000.937500, 380001.000000, 380001.281250, 380001.781250"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028179, 0.030705, 0.036662, 0.056671, 0.095084"); + values ( "0.750971, 0.815816, 0.968419, 1.480978, 2.464965",\ + "0.750971, 0.815816, 0.968419, 1.480978, 2.464965",\ + "0.750971, 0.815816, 0.968419, 1.480978, 2.464965",\ + "0.750971, 0.815816, 0.968419, 1.480978, 2.464965",\ + "0.750971, 0.815816, 0.968419, 1.480978, 2.464965"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028179, 0.030705, 0.036662, 0.056671, 0.095084"); + values ( "380001.656250, 380001.687500, 380001.750000, 380001.937500, 380002.281250",\ + "380001.750000, 380001.781250, 380001.843750, 380002.031250, 380002.375000",\ + "380001.875000, 380001.906250, 380001.968750, 380002.156250, 380002.500000",\ + "380002.062500, 380002.093750, 380002.156250, 380002.343750, 380002.687500",\ + "380002.375000, 380002.406250, 380002.468750, 380002.656250, 380003.000000"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028179, 0.030705, 0.036662, 0.056671, 0.095084"); + values ( "0.476385, 0.519957, 0.622899, 0.968661, 1.632439",\ + "0.476385, 0.519957, 0.622899, 0.968661, 1.632439",\ + "0.476385, 0.519957, 0.622899, 0.968661, 1.632439",\ + "0.476385, 0.519957, 0.622899, 0.968661, 1.632439",\ + "0.476385, 0.519957, 0.622899, 0.968661, 1.632439"); + } + + } /* end of arc padmux2ast_i[4]_scan_shift_en_o_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028179, 0.030705, 0.036662, 0.056671, 0.095084"); + values ( "380000.312500, 380000.343750, 380000.406250, 380000.687500, 380001.187500",\ + "380000.406250, 380000.437500, 380000.500000, 380000.781250, 380001.281250",\ + "380000.468750, 380000.500000, 380000.562500, 380000.843750, 380001.343750",\ + "380000.625000, 380000.656250, 380000.718750, 380001.000000, 380001.500000",\ + "380000.843750, 380000.875000, 380000.937500, 380001.218750, 380001.718750"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028179, 0.030705, 0.036662, 0.056671, 0.095084"); + values ( "0.750971, 0.815816, 0.968419, 1.480978, 2.464965",\ + "0.750971, 0.815816, 0.968419, 1.480978, 2.464965",\ + "0.750971, 0.815816, 0.968419, 1.480978, 2.464965",\ + "0.750971, 0.815816, 0.968419, 1.480978, 2.464965",\ + "0.750971, 0.815816, 0.968419, 1.480978, 2.464965"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028179, 0.030705, 0.036662, 0.056671, 0.095084"); + values ( "380001.656250, 380001.687500, 380001.750000, 380001.937500, 380002.281250",\ + "380001.750000, 380001.781250, 380001.843750, 380002.031250, 380002.375000",\ + "380001.843750, 380001.875000, 380001.937500, 380002.125000, 380002.468750",\ + "380002.031250, 380002.062500, 380002.125000, 380002.312500, 380002.656250",\ + "380002.281250, 380002.312500, 380002.375000, 380002.562500, 380002.906250"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.028179, 0.030705, 0.036662, 0.056671, 0.095084"); + values ( "0.476385, 0.519957, 0.622899, 0.968661, 1.632439",\ + "0.476385, 0.519957, 0.622899, 0.968661, 1.632439",\ + "0.476385, 0.519957, 0.622899, 0.968661, 1.632439",\ + "0.476385, 0.519957, 0.622899, 0.968661, 1.632439",\ + "0.476385, 0.519957, 0.622899, 0.968661, 1.632439"); + } + + } /* end of arc padmux2ast_i[4]_scan_shift_en_o_una_min*/ + +} /* end of pin scan_shift_en_o */ + +pin("scan_reset_no") { + direction : output ; + max_transition : 2.480000 ; + min_transition : 0.000000 ; + max_capacitance : 0.044252 ; + min_capacitance : 0.000067 ; + max_fanout : 50.000000 ; + capacitance : 0.021601 ; + + /* Other user defined attributes. */ + original_pin : scan_reset_no; + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : recovery_rising ; + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.195118, 0.455354, 1.099537, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "1.964051, 1.921426, 1.863863, 1.867343, 1.909642",\ + "2.060242, 2.017617, 1.960053, 1.963533, 2.005833",\ + "2.173090, 2.130465, 2.072901, 2.076381, 2.118681",\ + "2.375021, 2.332396, 2.274832, 2.278312, 2.320612",\ + "2.686105, 2.643480, 2.585916, 2.589396, 2.631696"); + } + + } /* end of arc clk_ast_alert_i_scan_reset_no_recfr*/ + + timing () { + related_pin : "clk_ast_alert_i" ; + timing_type : removal_rising ; + fall_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.195118, 0.455354, 0.898734, 2.480000"); + index_2 ( "0.000000, 0.127724, 0.562810, 0.708571, 2.480000"); + values ( "-1.851924, -1.814471, -1.754913, -1.744727, -1.620931",\ + "-1.948175, -1.910723, -1.851165, -1.840978, -1.717183",\ + "-2.061304, -2.023851, -1.964293, -1.954107, -1.830311",\ + "-2.203395, -2.165943, -2.106384, -2.096198, -1.972402",\ + "-2.574453, -2.537001, -2.477442, -2.467256, -2.343460"); + } + + } /* end of arc clk_ast_alert_i_scan_reset_no_remfr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "0.802143, 0.819742, 0.854125, 0.955681, 1.487746",\ + "0.890534, 0.908134, 0.942517, 1.044073, 1.576140",\ + "0.986100, 1.003701, 1.038085, 1.139644, 1.671728",\ + "1.152159, 1.169761, 1.204148, 1.305714, 1.837840",\ + "1.418048, 1.435651, 1.470039, 1.571612, 2.103765"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "1.229517, 1.260918, 1.322264, 1.503458, 2.452761",\ + "1.229525, 1.260928, 1.322278, 1.503483, 2.452843",\ + "1.229623, 1.261050, 1.322445, 1.503785, 2.453854",\ + "1.229849, 1.261330, 1.322831, 1.504483, 2.456189",\ + "1.230249, 1.261792, 1.323416, 1.505431, 2.459036"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "0.798583, 0.815273, 0.847880, 0.944189, 1.448769",\ + "0.886419, 0.903109, 0.935716, 1.032025, 1.536605",\ + "0.967929, 0.984620, 1.017227, 1.113536, 1.618116",\ + "1.107256, 1.123946, 1.156553, 1.252862, 1.757442",\ + "1.334271, 1.350961, 1.383568, 1.479877, 1.984456"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "1.070623, 1.099479, 1.155855, 1.322366, 2.194748",\ + "1.070624, 1.099480, 1.155855, 1.322366, 2.194748",\ + "1.070624, 1.099480, 1.155855, 1.322366, 2.194748",\ + "1.070624, 1.099480, 1.155855, 1.322366, 2.194752",\ + "1.070624, 1.099480, 1.155855, 1.322366, 2.194762"); + } + + } /* end of arc clk_ast_ext_i_scan_reset_no_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_ext_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "0.802125, 0.819724, 0.854108, 0.955663, 1.487728",\ + "0.890342, 0.907941, 0.942325, 1.043880, 1.575947",\ + "0.986099, 1.003699, 1.038084, 1.139642, 1.671727",\ + "1.152155, 1.169757, 1.204144, 1.305710, 1.837835",\ + "1.417944, 1.435547, 1.469935, 1.571508, 2.103662"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "1.229517, 1.260918, 1.322264, 1.503458, 2.452760",\ + "1.229525, 1.260928, 1.322278, 1.503482, 2.452842",\ + "1.229623, 1.261050, 1.322445, 1.503785, 2.453854",\ + "1.229849, 1.261330, 1.322831, 1.504483, 2.456189",\ + "1.230248, 1.261792, 1.323416, 1.505430, 2.459036"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "0.798579, 0.815269, 0.847876, 0.944185, 1.448765",\ + "0.886379, 0.903069, 0.935677, 1.031986, 1.536566",\ + "0.967658, 0.984348, 1.016956, 1.113265, 1.617844",\ + "1.107229, 1.123919, 1.156526, 1.252835, 1.757415",\ + "1.334205, 1.350896, 1.383503, 1.479811, 1.984390"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "1.070600, 1.099457, 1.155835, 1.322351, 2.194748",\ + "1.070600, 1.099457, 1.155835, 1.322351, 2.194748",\ + "1.070600, 1.099457, 1.155835, 1.322351, 2.194748",\ + "1.070600, 1.099457, 1.155835, 1.322351, 2.194752",\ + "1.070600, 1.099457, 1.155835, 1.322351, 2.194762"); + } + + } /* end of arc clk_ast_ext_i_scan_reset_no_redg_min*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : recovery_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.195118, 0.455354, 1.230133, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "3.588611, 3.540715, 3.506416, 3.500099, 3.522348",\ + "3.671103, 3.623207, 3.588908, 3.582592, 3.604841",\ + "3.766086, 3.718189, 3.683890, 3.677574, 3.699822",\ + "3.975284, 3.927388, 3.893089, 3.886772, 3.909021",\ + "4.236159, 4.188263, 4.153964, 4.147648, 4.169896"); + } + + } /* end of arc clk_ast_ext_i_scan_reset_no_recrr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : recovery_falling ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.195118, 0.455354, 1.230133, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "0.254411, 0.254411, 0.254411, 0.254411, 0.254411",\ + "0.332233, 0.332233, 0.332233, 0.332233, 0.332233",\ + "0.412826, 0.412826, 0.412826, 0.412826, 0.412826",\ + "0.584722, 0.584722, 0.584722, 0.584722, 0.584722",\ + "0.796290, 0.796290, 0.796290, 0.796290, 0.796290"); + } + + } /* end of arc clk_ast_ext_i_scan_reset_no_recrf*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : removal_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.195118, 0.591561, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.156602, -0.106021, -0.062437, -0.009182, 0.090788",\ + "-0.234424, -0.183844, -0.140259, -0.087005, 0.012965",\ + "-0.347653, -0.297234, -0.253546, -0.200284, -0.100415",\ + "-0.457700, -0.407414, -0.363694, -0.310440, -0.210630",\ + "-0.693682, -0.643595, -0.600273, -0.547145, -0.447229"); + } + + } /* end of arc clk_ast_ext_i_scan_reset_no_remrr*/ + + timing () { + related_pin : "clk_ast_ext_i" ; + timing_type : removal_falling ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.195118, 0.591561, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + values ( "-0.072639, -0.072639, -0.072639, -0.072639, -0.072639",\ + "-0.150732, -0.150732, -0.150732, -0.150732, -0.150732",\ + "-0.261960, -0.261960, -0.261960, -0.261960, -0.261960",\ + "-0.368573, -0.368573, -0.368573, -0.368573, -0.368573",\ + "-0.585347, -0.585347, -0.585347, -0.585347, -0.585347"); + } + + } /* end of arc clk_ast_ext_i_scan_reset_no_remrf*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "380001.750000, 380001.750000, 380001.750000, 380001.812500, 380002.062500",\ + "380001.843750, 380001.843750, 380001.843750, 380001.906250, 380002.156250",\ + "380001.937500, 380001.937500, 380001.937500, 380002.000000, 380002.250000",\ + "380002.000000, 380002.000000, 380002.000000, 380002.062500, 380002.312500",\ + "380002.343750, 380002.343750, 380002.343750, 380002.406250, 380002.656250"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "1.229646, 1.261078, 1.322484, 1.503854, 2.454086",\ + "1.229646, 1.261078, 1.322484, 1.503854, 2.454086",\ + "1.229646, 1.261078, 1.322484, 1.503854, 2.454086",\ + "1.229646, 1.261078, 1.322484, 1.503855, 2.454087",\ + "1.229648, 1.261080, 1.322487, 1.503860, 2.454105"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "380000.593750, 380000.593750, 380000.625000, 380000.718750, 380001.250000",\ + "380000.687500, 380000.687500, 380000.718750, 380000.812500, 380001.343750",\ + "380000.750000, 380000.750000, 380000.781250, 380000.875000, 380001.406250",\ + "380000.812500, 380000.812500, 380000.843750, 380000.937500, 380001.468750",\ + "380001.125000, 380001.125000, 380001.156250, 380001.250000, 380001.781250"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "1.098794, 1.128370, 1.186150, 1.356812, 2.250939",\ + "1.098794, 1.128370, 1.186150, 1.356812, 2.250939",\ + "1.098794, 1.128370, 1.186150, 1.356812, 2.250939",\ + "1.098794, 1.128370, 1.186150, 1.356812, 2.250939",\ + "1.099064, 1.128619, 1.186359, 1.356900, 2.250939"); + } + + } /* end of arc clk_ast_tlul_i_scan_reset_no_redg*/ + + timing () { + min_delay_flag : true ; + related_pin : "clk_ast_tlul_i" ; + timing_type : rising_edge ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "0.422873, 0.430902, 0.446588, 0.492920, 0.735645",\ + "0.510672, 0.518701, 0.534387, 0.580719, 0.823446",\ + "0.591965, 0.599994, 0.615680, 0.662012, 0.904736",\ + "0.650145, 0.658174, 0.673861, 0.720193, 0.962908",\ + "0.958388, 0.966413, 0.982090, 1.028394, 1.270988"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "0.591561, 0.606759, 0.636466, 0.724197, 1.183709",\ + "0.591561, 0.606759, 0.636466, 0.724197, 1.183709",\ + "0.591563, 0.606768, 0.636472, 0.724197, 1.183709",\ + "0.591595, 0.606795, 0.636489, 0.724197, 1.183709",\ + "0.591849, 0.607055, 0.636761, 0.724504, 1.184204"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "0.601971, 0.615882, 0.643058, 0.723326, 1.143863",\ + "0.689980, 0.703892, 0.731069, 0.811342, 1.231904",\ + "0.785109, 0.799012, 0.826172, 0.906394, 1.326690",\ + "0.853674, 0.867567, 0.894707, 0.974869, 1.394853",\ + "1.216942, 1.230863, 1.258059, 1.338388, 1.759243"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "0.898014, 0.922343, 0.969635, 1.108981, 1.838479",\ + "0.898014, 0.922343, 0.969635, 1.108981, 1.838479",\ + "0.898014, 0.922343, 0.969635, 1.108981, 1.839038",\ + "0.898014, 0.922343, 0.969800, 1.109378, 1.840651",\ + "0.898014, 0.922343, 0.969873, 1.110259, 1.842156"); + } + + } /* end of arc clk_ast_tlul_i_scan_reset_no_redg_min*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : recovery_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.195118, 0.455354, 1.230133, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "1.415613, 1.363816, 1.325401, 1.311644, 1.337231",\ + "1.501586, 1.449789, 1.411374, 1.397617, 1.423205",\ + "1.612727, 1.560930, 1.522515, 1.508758, 1.534346",\ + "1.834322, 1.782526, 1.744110, 1.730354, 1.755941",\ + "2.101753, 2.049956, 2.011540, 1.997784, 2.023371"); + } + + } /* end of arc clk_ast_tlul_i_scan_reset_no_recrr*/ + + timing () { + related_pin : "clk_ast_tlul_i" ; + timing_type : removal_rising ; + rise_constraint( f_dtrans_ctrans ){ + index_1 ( "0.006578, 0.195118, 0.591561, 1.062676, 2.480000"); + index_2 ( "0.000000, 0.195118, 0.455354, 0.708571, 2.480000"); + values ( "-0.697532, -0.650599, -0.616529, -0.592387, -0.469972",\ + "-0.783374, -0.736441, -0.702370, -0.678229, -0.555814",\ + "-0.939179, -0.892246, -0.858175, -0.834034, -0.711619",\ + "-1.080269, -1.033336, -0.999265, -0.975124, -0.852709",\ + "-1.378594, -1.331661, -1.297591, -1.273450, -1.151034"); + } + + } /* end of arc clk_ast_tlul_i_scan_reset_no_remrr*/ + + timing () { + related_pin : "padmux2ast_i[3]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "0.726887, 0.744473, 0.778830, 0.880309, 1.411971",\ + "0.813994, 0.831587, 0.865957, 0.967473, 1.499333",\ + "0.895839, 0.913433, 0.947805, 1.049329, 1.581226",\ + "1.037802, 1.055400, 1.089781, 1.191329, 1.723358",\ + "1.277047, 1.294652, 1.329045, 1.430630, 1.962853"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "1.230133, 1.261577, 1.323007, 1.504448, 2.455048",\ + "1.230133, 1.261577, 1.323007, 1.504448, 2.455048",\ + "1.230191, 1.261616, 1.323008, 1.504448, 2.455048",\ + "1.230748, 1.262222, 1.323711, 1.505326, 2.455673",\ + "1.230748, 1.262222, 1.323711, 1.505326, 2.455673"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "0.683808, 0.700926, 0.734366, 0.833138, 1.350622",\ + "0.774648, 0.791774, 0.825231, 0.924052, 1.441793",\ + "0.860296, 0.877424, 0.910885, 1.009716, 1.527510",\ + "1.010613, 1.027735, 1.061184, 1.159981, 1.677597",\ + "1.262256, 1.279377, 1.312826, 1.411619, 1.929216"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "1.099537, 1.129083, 1.186806, 1.357299, 2.250541",\ + "1.099537, 1.129083, 1.186806, 1.357299, 2.250541",\ + "1.099537, 1.129083, 1.186806, 1.357299, 2.250541",\ + "1.099537, 1.129083, 1.186806, 1.357299, 2.250541",\ + "1.099652, 1.129190, 1.186897, 1.357342, 2.250541"); + } + + } /* end of arc padmux2ast_i[3]_scan_reset_no_una*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[3]" ; + timing_type : combinational ; + timing_sense : positive_unate ; + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "0.726887, 0.744473, 0.778830, 0.880309, 1.411971",\ + "0.813994, 0.831587, 0.865957, 0.967473, 1.499333",\ + "0.895839, 0.913433, 0.947805, 1.049329, 1.581226",\ + "1.037802, 1.055400, 1.089781, 1.191329, 1.723358",\ + "1.277047, 1.294652, 1.329045, 1.430630, 1.962853"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "1.230133, 1.260882, 1.322288, 1.503659, 2.453893",\ + "1.230133, 1.260882, 1.322288, 1.503659, 2.453893",\ + "1.230191, 1.261616, 1.323008, 1.504337, 2.454350",\ + "1.230581, 1.262030, 1.323468, 1.504936, 2.455673",\ + "1.230581, 1.262030, 1.323468, 1.504936, 2.455673"); + } + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "0.683808, 0.700926, 0.734366, 0.833138, 1.350622",\ + "0.774648, 0.791774, 0.825231, 0.924052, 1.441793",\ + "0.860296, 0.877424, 0.910885, 1.009716, 1.527510",\ + "1.010613, 1.027735, 1.061184, 1.159981, 1.677597",\ + "1.262256, 1.279377, 1.312826, 1.411619, 1.929216"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "1.099537, 1.128236, 1.185986, 1.356560, 2.250221",\ + "1.099537, 1.128236, 1.185986, 1.356560, 2.250221",\ + "1.099537, 1.128268, 1.186038, 1.356667, 2.250334",\ + "1.099537, 1.128795, 1.186566, 1.357201, 2.250334",\ + "1.099652, 1.129190, 1.186897, 1.357342, 2.250334"); + } + + } /* end of arc padmux2ast_i[3]_scan_reset_no_una_min*/ + + timing () { + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "380000.468750, 380000.468750, 380000.500000, 380000.593750, 380001.125000",\ + "380000.562500, 380000.562500, 380000.593750, 380000.687500, 380001.218750",\ + "380000.656250, 380000.656250, 380000.687500, 380000.781250, 380001.312500",\ + "380000.812500, 380000.812500, 380000.843750, 380000.937500, 380001.468750",\ + "380001.062500, 380001.062500, 380001.093750, 380001.187500, 380001.718750"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "1.098794, 1.128370, 1.186150, 1.356812, 2.250939",\ + "1.098794, 1.128370, 1.186150, 1.356812, 2.250939",\ + "1.098794, 1.128370, 1.186150, 1.356812, 2.250939",\ + "1.098794, 1.128370, 1.186150, 1.356812, 2.250939",\ + "1.098794, 1.128370, 1.186150, 1.356812, 2.250939"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "380001.656250, 380001.656250, 380001.656250, 380001.718750, 380001.968750",\ + "380001.750000, 380001.750000, 380001.750000, 380001.812500, 380002.062500",\ + "380001.875000, 380001.875000, 380001.875000, 380001.937500, 380002.187500",\ + "380002.062500, 380002.062500, 380002.062500, 380002.125000, 380002.375000",\ + "380002.375000, 380002.375000, 380002.375000, 380002.437500, 380002.687500"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "0.602094, 0.617527, 0.647677, 0.736728, 1.205538",\ + "0.602094, 0.617527, 0.647677, 0.736728, 1.205538",\ + "0.602094, 0.617527, 0.647677, 0.736728, 1.205538",\ + "0.602094, 0.617527, 0.647677, 0.736728, 1.205538",\ + "0.602094, 0.617527, 0.647677, 0.736728, 1.205538"); + } + + } /* end of arc padmux2ast_i[4]_scan_reset_no_inv*/ + + timing () { + min_delay_flag : true ; + related_pin : "padmux2ast_i[4]" ; + timing_type : combinational ; + timing_sense : negative_unate ; + cell_fall( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "380000.343750, 380000.343750, 380000.375000, 380000.468750, 380000.875000",\ + "380000.437500, 380000.437500, 380000.468750, 380000.562500, 380000.968750",\ + "380000.500000, 380000.500000, 380000.531250, 380000.625000, 380001.031250",\ + "380000.656250, 380000.656250, 380000.687500, 380000.781250, 380001.187500",\ + "380000.875000, 380000.875000, 380000.906250, 380001.000000, 380001.406250"); + } + fall_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "0.899963, 0.924149, 0.971400, 1.110963, 1.842156",\ + "0.899963, 0.924149, 0.971400, 1.110963, 1.842156",\ + "0.899963, 0.924149, 0.971400, 1.110963, 1.842156",\ + "0.899963, 0.924149, 0.971400, 1.110963, 1.842156",\ + "0.899963, 0.924149, 0.971400, 1.110963, 1.842156"); + } + cell_rise( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "380001.656250, 380001.656250, 380001.656250, 380001.718750, 380001.968750",\ + "380001.750000, 380001.750000, 380001.750000, 380001.812500, 380002.062500",\ + "380001.843750, 380001.843750, 380001.843750, 380001.906250, 380002.156250",\ + "380002.031250, 380002.031250, 380002.031250, 380002.093750, 380002.343750",\ + "380002.281250, 380002.281250, 380002.281250, 380002.343750, 380002.593750"); + } + rise_transition( f_itrans_ocap ){ + index_1 ( "0.000000, 0.195118, 0.455354, 1.062676, 2.480000"); + index_2 ( "0.021601, 0.022183, 0.023319, 0.026674, 0.044252"); + values ( "0.599658, 0.615162, 0.645450, 0.734911, 1.203284",\ + "0.599658, 0.615162, 0.645450, 0.734911, 1.203284",\ + "0.599658, 0.615162, 0.645450, 0.734911, 1.203284",\ + "0.599658, 0.615162, 0.645450, 0.734911, 1.203284",\ + "0.599658, 0.615162, 0.645450, 0.734911, 1.203284"); + } + + } /* end of arc padmux2ast_i[4]_scan_reset_no_inv_min*/ + +} /* end of pin scan_reset_no */ + + + + + + +} /* end of cell */ + +} /* end of library */ diff --git a/src/ast/lint/ast.vbl b/src/ast/lint/ast.vbl new file mode 100644 index 000000000..0df7c4bae --- /dev/null +++ b/src/ast/lint/ast.vbl @@ -0,0 +1,16 @@ +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +# +# Verible waiver file for AST + +# Waive the always-comb rule in the various "pgd" modules. The rule is checking +# that we don't use always @*, and suggests we use always_comb instead. +# Unfortunately, the code in question doesn't really translate to always_comb. +# And we don't really care about the linting rule: the code is just supposed to +# be a behavioural model of some analog code that isn't really part of the OT +# opensource repo. Waive the warning. +waive --rule=always-comb --location="vcc_pgd.sv" +waive --rule=always-comb --location="vio_pgd.sv" +waive --rule=always-comb --location="vcaon_pgd.sv" +waive --rule=always-comb --location="vcmain_pgd.sv" diff --git a/src/ast/lint/ast.vlt b/src/ast/lint/ast.vlt new file mode 100644 index 000000000..b4c6b30d7 --- /dev/null +++ b/src/ast/lint/ast.vlt @@ -0,0 +1,17 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// waiver file for ast + +`verilator_config + +// ast_clks_byp.sv has an always_latch block which doesn't actually do anything +// because the enable signal (!scan_mode_i) is always true. Verilator notices +// and complains, but we're doing this on purpose. +lint_off -rule NOLATCH -file "*/rtl/ast_clks_byp.sv" + +// Manually mark a clock enable: if we don't tell Verilator we're doing it on +// purpose, it will warn us that there's a path from "normal" logic through to +// a clock signal. +clock_enable -module "ast_clks_byp" -var "clk_ext_en" diff --git a/src/ast/lint/ast.waiver b/src/ast/lint/ast.waiver new file mode 100644 index 000000000..05fb27383 --- /dev/null +++ b/src/ast/lint/ast.waiver @@ -0,0 +1,377 @@ +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +# +# waiver file for ast + +waive -rules CONST_FF -location {ast_clks_byp.sv} \ + -msg {Flip-flop 'sw_clk_byp_en' is driven by constant one} \ + -comment {This flip flop is supposed to change to 1 on the first clock cycle and remain there afterwards.} + +waive -rules IFDEF_CODE -location {ast.sv} \ + -msg {Assignment to 'ast2pad_t0_ao' contained within `else block at ast.sv} \ + -comment {This ifdef statement is used for analog simulations and is OK.} + +waive -rules IFDEF_CODE -location {ast.sv} \ + -msg {Assignment to 'unused_analog_sigs' contained within `ifndef 'ANALOGSIM' block at} \ + -comment {This ifdef statement is used for assigning "unused" signals and is OK.} + +waive -rules IFDEF_CODE -location {ast.sv} \ + -regexp {Assignment to 'clk_(sys|usb|aon|io)_ext' contained within `ifdef 'AST_BYPASS_CLK' block at} \ + -comment {This ifdef statement is fine as it is part of the FPGA/Verilator clock bypass mechanism.} + +waive -rules IFDEF_CODE -location {aon_osc.sv io_osc.sv sys_osc.sv usb_osc.sv} \ + -regexp {Assignment to '(sys|usb|aon|io)_clk_dly' contained within `else block at} \ + -comment {This ifdef statement is fine as it is part of the FPGA/Verilator clock bypass mechanism.} + +waive -rules IFDEF_CODE -location {aon_osc.sv io_osc.sv sys_osc.sv usb_osc.sv} \ + -regexp {Assignment to 'en_osc_re' contained within} \ + -comment {This ifdef statement is fine as it is part of the FPGA/Verilator clock bypass mechanism.} + +waive -rules IFDEF_CODE -location {aon_osc.sv} \ + -regexp {Assignment to 'clk' contained within} \ + -comment {This ifdef statement is fine as it is part of the FPGA/Verilator clock bypass mechanism.} + +waive -rules DUAL_EDGE_CLOCK -location {ast_clks_byp.sv} \ + -msg {Clock 'clk_ast_ext_scn' uses falling edge here and rising edge 'clk_i' at} \ + -comment {Posedge sync aon_clk reset to clk_ast_ext_scn while negedge drives the sw_clk_byp_en.} + +waive -rules CLOCK_EDGE -location {aon_osc.sv io_osc.sv sys_osc.sv usb_osc.sv} \ + -msg {Falling edge of clock 'clk' used here, should use rising edge} \ + -comment {This negedge trigger is done on purpose.} + +waive -rules CLOCK_EDGE -location {ast_clks_byp.sv} \ + -msg {Falling edge of clock 'clk_ast_ext_scn' used here, should use rising edge} \ + -comment {This negedge trigger is done on purpose.} + +waive -rules CLOCK_EDGE -location {ast_clks_byp.sv} \ + -msg {'prim_flop_2sync' instance 'u_no_scan_ext_freq_is_96m_sync' contained within `ifndef 'AST_BYPASS_CLK' block at} \ + -comment {This ifdef statement is fine as it is part of the FPGA/Verilator clock bypass mechanism.} + +waive -rules CLOCK_DRIVER -location {ast.sv} \ + -regexp {'clk_src_(aon|io|sys)' is driven by instance 'u_ast_clks_byp' of module 'ast_clks_byp', and used as a clock 'clk_i' at} \ + -comment {This is clock generation logic, hence it needs to drive this clock signal.} + +waive -rules CLOCK_DRIVER -location {ast.sv} \ + -regexp {'clk_src_(aon|io|sys)' in module 'ast_clks_byp' by port} \ + -comment {This is clock generation logic, hence it needs to drive this clock signal.} + +waive -rules CLOCK_DRIVER -location {ast.sv} \ + -msg {'clk_o' driven in module 'gfr_clk_mux2' at} \ + -comment {This is clock generation logic, hence it needs to drive this clock signal.} + +waive -rules CLOCK_DRIVER -location {ast_clks_byp.sv} \ + -msg {'clk_o' driven in module 'gfr_clk_mux2' at} \ + -comment {This is clock generation logic, hence it needs to drive this clock signal.} + +waive -rules CLOCK_DRIVER -location {ast_clks_byp.sv} \ + -regexp {'clk_src_(aon|io)_o' is driven by instance 'u_clk_src_(aon|io)_sel' of module 'gfr_clk_mux2', and used as a clock 'clk_i' at} \ + -comment {This is clock generation logic, hence it needs to drive this clock signal.} + +waive -rules CLOCK_DRIVER -location {ast_clks_byp.sv} \ + -regexp {'clk_src_io' is driven by instance 'u_clk_src_io_sel' of module 'gfr_clk_mux2', and used as a clock 'clk_i' at} \ + -comment {This is clock generation logic, hence it needs to drive this clock signal.} + +waive -rules CLOCK_DRIVER -location {ast_clks_byp.sv} \ + -regexp {'clk_ext_scn' is driven here, and used as a clock 'clk_i' at} \ + -comment {This is clock generation logic, hence it needs to drive this clock signal.} + +waive -rules CLOCK_MUX -location {ast_clks_byp.sv} \ + -regexp {Clock '(clk_ast_ext_scn|clk_ext_scn|clk_src_ext_usb|clk_ext_aon)' is driven by a multiplexer here, used as a clock} \ + -comment {This is clock generation logic, hence it needs to drive this clock signal.} + +waive -rules CLOCK_MUX -location {ast_clks_byp.sv} \ + -regexp {Clock 'clk_ast_ext' reaches a multiplexer here, used as a clock} \ + -comment {This is clock generation logic, hence it needs to drive this clock signal.} + +waive -rules IFDEF_CODE -location {ast_clks_byp.sv} \ + -regexp {Assignment to 'clk_ast_ext_scn' contained within `ifndef 'AST_BYPASS_CLK' block at} \ + -comment {This ifndef statement is fine as it is part of the FPGA/Verilator clock bypass mechanism.} + +waive -rules IFDEF_CODE -location {ast_clks_byp.sv} \ + -regexp {Assignment to 'clk_ext_scn' contained within `else block at} \ + -comment {This ifndef statement is fine as it is part of the FPGA/Verilator clock bypass mechanism.} + +waive -rules IFDEF_CODE -location {ast_clks_byp.sv} \ + -regexp {Assignment to 'clk_src_io_val_o' contained within `ifndef 'AST_BYPASS_CLK' block at} \ + -comment {This ifndef statement is fine as it is part of the FPGA/Verilator clock bypass mechanism.} + +waive -rules IFDEF_CODE -location {ast_clks_byp.sv} \ + -regexp {'prim_clock_div' instance 'u_no_scan_clk_(ext_d1ord2|usb_div240_div)' contained within `ifndef 'AST_BYPASS_CLK' block at} \ + -comment {This ifndef statement is fine as it is part of the FPGA/Verilator clock bypass mechanism.} + +waive -rules IFDEF_CODE -location {ast_clks_byp.sv} \ + -regexp {'prim_flop_2sync' instance 'u_no_scan_ext_freq_is_96m_sync' contained within `ifndef 'AST_BYPASS_CLK' block at} \ + -comment {This ifndef statement is fine as it is part of the FPGA/Verilator clock bypass mechanism.} + +waive -rules IFDEF_CODE -location {ast_clks_byp.sv} \ + -regexp {always_latch block contained within `ifndef 'AST_BYPASS_CLK' block at} \ + -comment {This ifndef statement is fine as it is part of the FPGA/Verilator clock bypass mechanism.} + +waive -rules CLOCK_MUX -location {ast.sv} \ + -regexp {Clock 'clk_aon_n' is driven by a multiplexer here, used as a clock} \ + -comment {This clock inverter has a DFT mux.} + +waive -rules CLOCK_MUX -location {rglts_pdm_3p3v.sv} \ + -regexp {Clock 'clk_src_aon_h_n' is driven by a multiplexer here, used as a clock at } \ + -comment {This signal has a DFT mux.} + +waive -rules CLOCK_USE -location {gfr_clk_mux2.sv} \ + -regexp {('clk_ext'|'clk_osc') is used for some other purpose, and as clock ('clk_ext_i'|'clk_osc_i') at gfr_clk_mux2.sv} \ + -comment {This message pops up due to a clock OR operation.} + +waive -rules CLOCK_USE -location {ast.sv} \ + -regexp {'clk_ast_tlul_i' is connected to 'ast_dft' port 'clk_i', and used as a clock 'clk_i' at prim_lfsr} \ + -comment {This is a valid clock signal and the LFSR runs on the bus clock here.} + +waive -rules CLOCK_USE -location {ast.sv} \ + -regexp {'clk_aon' is connected to 'rglts_pdm_3p3v' port 'clk_src_aon_h_i', and used as a clock} \ + -comment {This is a valid clock signal and the connection is ok here.} + +waive -rules CLOCK_USE -location {ast.sv} \ + -regexp {'clk_ast_usb_i' is used for some other purpose, and as clock 'clk_i' at prim_generic_flop.sv} \ + -comment {This is a valid clock signal and the connection is ok here.} + +waive -rules INV_CLOCK -location {ast.sv rglts_pdm_3p3v.sv} \ + -regexp {'(clk_aon|clk_src_aon_h_i)' is inverted, used as clock} \ + -comment {These clocks are inverted.} + +waive -rules INV_CLOCK -location {ast_clks_byp.sv} \ + -regexp {'clk_src_ext_usb' is inverted, used as clock 'clk_i'} \ + -comment {Needed to sample clk_src_ext_usb enable signal with the clock negedge.} + +waive -rules RESET_DRIVER -location {aon_clk.sv io_clk.sv sys_clk.sv usb_clk.sv} \ + -msg {'rst_val_n' is driven here, and used as an asynchronous reset} \ + -comment {This is reset generation logic, hence it needs to drive this reset signal.} + +waive -rules RESET_DRIVER -location {aon_clk.sv io_clk.sv sys_clk.sv usb_clk.sv} \ + -regexp {'(aon|io|sys|usb)_clk_en' is driven here, and used as an asynchronous reset} \ + -comment {This is reset generation logic, hence it needs to drive this reset signal.} + +waive -rules RESET_DRIVER -location {rng.sv} \ + -msg {'rst_n' is driven here, and used as an asynchronous reset at rng.sv} \ + -comment {This is reset generation logic, hence it needs to drive this reset signal.} + +waive -rules RESET_DRIVER -location {ast.sv} \ + -regexp {'(vcaon_pok_h|por_rst_n|vcmain_pok_por|vcmain_pok_por_src)' is driven here, and used as an asynchronous reset} \ + -comment {This is reset generation logic, hence it needs to drive this reset signal.} + +waive -rules RESET_DRIVER -location {ast.sv} \ + -msg {'clk_io_osc_val' is driven by instance 'u_io_clk' of module 'io_clk', and used as an asynchronous reset 'rst_clk_osc_n' at ast_dft.sv} \ + -comment {This is reset generation logic, hence it needs to drive this reset signal.} + +waive -rules RESET_DRIVER -location {ast.sv} \ + -msg {'clk_src_io_val_o' driven in module 'io_clk' by port 'u_val_sync.q_o[0]' at io_clk.sv} \ + -comment {This is reset generation logic, hence it needs to drive this reset signal.} + +waive -rules RESET_DRIVER -location {ast.sv dev_entropy.sv ast_clks_byp.sv} \ + -regexp {'q_o[0]' driven in module 'prim_flop_2sync' by port .* at prim_flop_2sync.sv} \ + -comment {This is reset generation logic, hence it needs to drive this reset signal.} + +waive -rules RESET_DRIVER -location {ast.sv} \ + -msg {'vcmain_pok_por_sys' is driven by instance 'u_rst_sys_dasrt' of module 'prim_flop_2sync', and used as an asynchronous reset 'rst_dev_ni' at dev_entropy.sv} \ + -comment {This is reset generation logic, hence it needs to drive this reset signal.} + +waive -rules RESET_DRIVER -location {dev_entropy.sv} \ + -msg {'rst_es_dev_nd' is driven by instance 'u_rst_es_n_da' of module 'prim_flop_2sync', and used as an asynchronous reset 'rst_es_dev_n'} \ + -comment {This is reset generation logic, hence it needs to drive this reset signal.} + +waive -rules RESET_DRIVER -location {dev_entropy.sv} \ + -msg {'rst_es_dev_nd' is driven by instance 'u_rst_es_n_da' of module 'prim_flop_2sync', and used as an asynchronous reset 'rst_es_dev_n'} \ + -comment {This is reset generation logic, hence it needs to drive this reset signal.} + +waive -rules RESET_DRIVER -location {dev_entropy.sv} \ + -msg {'rst_es_dev_da_n' is driven by instance 'u_rst_es_n_da' of module 'prim_flop_2sync', and used as an asynchronous reset 'rst_es_dev_n' at} \ + -comment {This is reset generation logic, hence it needs to drive this reset signal.} + +waive -rules RESET_DRIVER -location {dev_entropy.sv} \ + -msg {'rst_es_dev_in_n' is driven here, and used as an asynchronous reset 'rst_ni' at} \ + -comment {This is reset generation logic, hence it needs to drive this reset signal.} + +waive -rules RESET_DRIVER -location {ast_pulse_sync.sv} \ + -regexp {'(rst_src_n|rst_dst_n)' is driven here, and used as an asynchronous reset at} \ + -comment {This is reset generation logic, hence it needs to drive this reset signal.} + +waive -rules RESET_DRIVER -location {ast_clks_byp.sv} \ + -regexp {'rst_aon_n_(ioda|exda)' is driven by instance 'u_rst_aon_n_(ioda|exda)_sync' of module} \ + -comment {This is reset generation logic, hence it needs to drive this reset signal.} + +waive -rules RESET_DRIVER -location {ast_clks_byp.sv} \ + -regexp {'rst_sw_clk_byp_en' is driven here, and used as an asynchronous reset 'rst_ni'} \ + -comment {This is reset generation logic, hence it needs to drive this reset signal.} + +waive -rules RESET_DRIVER -location {ast_clks_byp.sv} \ + -regexp {'da_rst_sw_ckbpe_n' is driven by instance 'u_no_scan_rst_sw_ckbpe_dasrt' of module 'prim_flop_2sync'} \ + -comment {Used as synced reset signal for clk_ast_ext_scn reset.} + +waive -rules RESET_DRIVER -location {ast.sv} \ + -regexp {'(vcc_pok|rst_poks_n|rst_poks_por_n|vcaon_pok_por_lat)' is driven here, and used as an asynchronous reset} \ + -comment {This is reset generation logic, hence it needs to drive this reset signal.} + +waive -rules RESET_DRIVER -location {ast.sv} \ + -msg {'vcmain_pok_por_sys' is driven by instance 'u_rst_sys_dasrt' of module} \ + -comment {This is reset generation logic, hence it needs to drive this reset signal.} + +waive -rules RESET_DRIVER -location {ast.sv} \ + -msg {'rst_aon_clk_n' is driven here, and used as an asynchronous reset 'rst_ni' at} \ + -comment {This is reset generation logic, hence it needs to drive this reset signal.} + +waive -rules RESET_DRIVER -location {rglts_pdm_3p3v.sv} \ + -regexp {'(vcc_pok_rst_h_n|vcc_pok_set_h|vcc_pok_str_.*|)' is driven here, and used as an asynchronous reset} \ + -comment {This is reset generation logic, hence reset muxes are allowed.} + +waive -rules RESET_DRIVER -location {ast.sv} \ + -regexp {'(vcaon_pok|vcaon_pok_h)' is driven by instance 'u_rglts_pdm_3p3v'} \ + -comment {This is reset generation logic, hence reset muxes are allowed.} + +waive -rules RESET_DRIVER -location {ast.sv} \ + -regexp {'(vcaon_pok_1p1_h_o|vcaon_pok_h_o)' driven in module 'rglts_pdm_3p3v'} \ + -comment {This is reset generation logic, hence reset muxes are allowed.} + +waive -rules RESET_DRIVER -location {ast.sv} \ + -regexp {'rst_sys_clk_n' is driven here, and used as an asynchronous reset 'rst_ni' at prim_generic_flop.sv} \ + -comment {This is reset generation logic, hence reset muxes are allowed.} + +waive -rules RESET_DRIVER -location {ast.sv} \ + -regexp {'rst_usb_clk_n' is driven here, and used as an asynchronous reset 'rst_ni' at prim_generic_flop.sv} \ + -comment {This is reset generation logic, hence reset muxes are allowed.} + +waive -rules RESET_DRIVER -location {ast.sv} \ + -regexp {'rst_io_clk_n' is driven here, and used as an asynchronous reset 'rst_ni' at prim_generic_flop.sv} \ + -comment {This is reset generation logic, hence reset muxes are allowed.} + +waive -rules RESET_DRIVER -location {usb_clk.sv} \ + -regexp {'rst_da_n' is driven by instance 'u_rst_da' of module 'prim_flop_2sync', and used as an asynchronous reset 'rst_ni' at prim_generic_flop.sv} \ + -comment {This is reset generation logic, hence reset muxes are allowed.} + +waive -rules RESET_DRIVER -location {usb_clk.sv} \ + -regexp {'q_o[0]' driven in module 'prim_flop_2sync' by port 'u_sync_2.q_o[0]' at prim_flop_2sync.sv} \ + -comment {This is reset generation logic, hence reset muxes are allowed.} + +waive -rules RESET_DRIVER -location {usb_clk.sv} \ + -regexp {'q_o[0]' driven in module 'prim_flop' by port 'gen_generic.u_impl_generic.q_o[0]' at prim_flop.sv} \ + -comment {This is reset generation logic, hence reset muxes are allowed.} + +waive -rules RESET_DRIVER -location {usb_clk.sv} \ + -regexp {'q_o[0]' driven in module 'prim_generic_flop' at prim_generic_flop.sv} \ + -comment {This is reset generation logic, hence reset muxes are allowed.} + +waive -rules RESET_DRIVER -location {usb_clk.sv} \ + -regexp {'rst_n' is driven here, and used as an asynchronous reset 'rst_ni' at prim_generic_flop.sv} \ + -comment {This is reset generation logic, hence reset muxes are allowed.} + +waive -rules RESET_DRIVER -location {usb_clk.sv} \ + -regexp {'rst_n' driven in module 'usb_clk' by 'rst_da_n' at usb_clk.sv} \ + -comment {This is reset generation logic, hence reset muxes are allowed.} + +waive -rules RESET_DRIVER -location {usb_clk.sv} \ + -regexp {'rst_usb_n' is driven by instance 'u_rst_ast_usb_da' of module 'prim_flop_2sync', and used as an asynchronous reset 'rst_ni' at prim_generic_flop.sv} \ + -comment {This is reset generation logic, hence reset muxes are allowed.} + +waive -rules RESET_DRIVER -location {ast_clks_byp.sv} \ + -regexp {'q_o[0]' driven in module 'prim_flop_2sync' by port 'u_sync_2.q_o[0]' at prim_flop_2sync.sv} \ + -comment {This is reset generation logic, hence reset muxes are allowed.} + +waive -rules RESET_DRIVER -location {ast_clks_byp.sv} \ + -regexp {'q_o[0]' driven in module 'prim_flop' by port 'gen_generic.u_impl_generic.q_o[0]' at prim_flop.sv} \ + -comment {This is reset generation logic, hence reset muxes are allowed.} + +waive -rules RESET_DRIVER -location {ast_clks_byp.sv} \ + -regexp {'q_o[0]' driven in module 'prim_generic_flop' at prim_generic_flop.sv} \ + -comment {This is reset generation logic, hence reset muxes are allowed.} + +waive -rules RESET_MUX -location {aon_clk.sv io_clk.sv sys_clk.sv usb_clk.sv} \ + -msg {Asynchronous reset 'rst_val_n' is driven by a multiplexer here, used as a reset} \ + -comment {This is reset generation logic, hence reset muxes are allowed.} + +waive -rules RESET_MUX -location {ast.sv} \ + -regexp {Asynchronous reset '(rst_poks_n|rst_poks_por_n|vcmain_pok_por|rst_src_sys_n|vcaon_pok_por)' is driven by a multiplexer here, used as a reset} \ + -comment {This is reset generation logic, hence reset muxes are allowed.} + +waive -rules RESET_MUX -location {rng.sv} \ + -msg {Asynchronous reset 'rst_n' is driven by a multiplexer here, used as a reset at rng.sv} \ + -comment {This is reset generation logic, hence reset muxes are allowed.} + +waive -rules RESET_MUX -location {ast_clks_byp.sv} \ + -regexp {Asynchronous reset '(rst_aon_n|rst_aon_exda_n|rst_aon_ioda_n|rst_sw_ckbpe_n)' is driven by a multiplexer here, used as a reset} \ + -comment {This is reset generation logic, hence reset muxes are allowed.} + +waive -rules RESET_MUX -location {ast_pulse_sync.sv} \ + -regexp {Asynchronous reset '(rst_src_n|rst_dst_n)' is driven by a multiplexer here, used as a reset} \ + -comment {This is reset generation logic, hence reset muxes are allowed.} + +waive -rules RESET_MUX -location {rglts_pdm_3p3v.sv} \ + -msg {Asynchronous reset 'vcc_pok_rst_h_n' is driven by a multiplexer here, used as a reset} \ + -comment {This is reset generation logic, hence reset muxes are allowed.} + +waive -rules RESET_MUX -location {usb_clk.sv} \ + -regexp {Asynchronous reset 'rst_n' is driven by a multiplexer here, used as a reset 'rst_ni' at prim_generic_flop.sv} \ + -comment {This is reset generation logic, hence reset muxes are allowed.} + +waive -rules RESET_USE -location {ast.sv} \ + -regexp {('vcore_pok_h_i'|'vcaon_pok') is used for some other purpose, and as asynchronous reset} \ + -comment {This is reset / clock generation logic, hence special reset usage is allowed.} + +waive -rules RESET_USE -location {ast.sv} \ + -regexp {'(vcmain_pok_por|vcmain_pok_por_src)' is connected to 'rglts_pdm_3p3v' port 'vcmain_pok_por_h_i', and used as an asynchronous reset or set} \ + -comment {This is reset / clock generation logic, hence special reset usage is allowed.} + +waive -rules RESET_USE -location {ast.sv} \ + -msg {'vcaon_pok_por' is connected to 'rglts_pdm_3p3v' port 'vcaon_pok_por_h_i', and used as an asynchronous reset or set} \ + -comment {This is reset / clock generation logic, hence special reset usage is allowed.} + +waive -rules RESET_USE -location {ast.sv} \ + -regexp {'(vcc_pok|vcmain_pok_por)' is used for some other purpose, and as asynchronous reset} \ + -comment {This is reset / clock generation logic, hence special reset usage is allowed.} + +waive -rules RESET_USE -location {ast.sv} \ + -regexp {'rst_(usb|aon|io|sys)_clk_n' is connected to '(usb|aon|io|sys)_clk' port 'rst_(usb|aon|io|sys)_clk_ni', and used as an asynchronous reset or set ('rst_ni'|'vcore_pok_h_i'|'rst_clk_byp_n')} \ + -comment {This is reset / clock generation logic, hence special reset usage is allowed.} + +waive -rules RESET_USE -location {io_osc.sv sys_osc.sv usb_osc.sv aon_osc.sv} \ + -msg {'vcore_pok_h_i' is used for some other purpose, and as asynchronous reset at} \ + -comment {This is reset / clock generation logic, hence special reset usage is allowed.} + +waive -rules RESET_USE -location {ast_dft.sv} \ + -msg {'clk_io_osc_val_i' is used for some other purpose, and as asynchronous reset 'rst_clk_osc_n' at ast_dft.sv} \ + -comment {This is reset / clock generation logic, hence special reset usage is allowed.} + +waive -rules RESET_USE -location {ast.sv} \ + -msg {'rst_ast_tlul_ni' is connected to 'ast_dft' port 'rst_ni', and used as an asynchronous reset or set 'rst_n' at rng} \ + -comment {This is a valid reset connection.} + +waive -rules RESET_USE -location {ast.sv} \ + -regexp {('rst_sys_clk_n'|'rst_usb_clk_n') is connected to ('sys_clk'|'usb_clk') port ('rst_sys_clk_ni'|'rst_usb_clk_ni'), and used as an asynchronous reset or set} \ + -comment {This is a valid reset connection.} + +waive -rules RESET_USE -location {aon_clk.sv io_clk.sv sys_clk.sv usb_clk.sv} \ + -regexp {'(aon|io|sys|usb)_clk_en' is connected to '(aon|io|sys|usb)_osc' port '(aon|io|sys|usb)_en_i', and used as an asynchronous reset or set} \ + -comment {This is reset / clock generation logic, hence special reset usage is allowed.} + +waive -rules RESET_USE -location {ast.sv} \ + -regexp {'rst_ast_usb_ni' is used for some other purpose, and as asynchronous reset 'rst_ni' at prim_generic_flop.sv} \ + -comment {This is reset generation logic, hence reset muxes are allowed.} + +waive -rules RESET_USE -location {usb_clk.sv} \ + -regexp {'rst_usb_clk_ni' is used for some other purpose, and as asynchronous reset 'rst_ni' at prim_generic_flop.sv} \ + -comment {This is reset generation logic, hence reset muxes are allowed.} + +waive -rules TRI_DRIVER -location {ast.sv} \ + -regexp {'ast2pad_(t0|t1)_ao' is driven by a tristate driver} \ + -comment {This part models a tristate driver.} + +waive -rules TERMINAL_STATE -location {rglts_pdm_3p3v.sv} \ + -msg {Terminal state 'RGLS_BROUT' is detected. State register 'rgls_sm' is not assigned to another state.} \ + -comment {The brownout state is terminal.} + +waive -rules Z_USE -location {ast.sv} \ + -msg {Constant with 'Z literal value '1'bz' encountered} \ + -comment {This part models a tristate driver.} + +waive -rules MULTI_RESET -location {rglts_pdm_3p3v.sv} \ + -msg {Found 2 asynchronous resets for this block: 'vcc_pok_rst_h_n', 'vcc_pok_set_h'} \ + -comment {This code is only a model and hence this is allowed.} + +waive -rules NOT_READ -location {aon_osc.sv io_osc.sv sys_osc.sv usb_osc.sv} \ + -msg {Signal 'en_osc' is not read from in module} \ + -comment {Signal 'en_osc' is not read when SYNTHESIS is defined, and AST_BYPASS_CLK is not defined.} diff --git a/src/ast/rtl/adc.sv b/src/ast/rtl/adc.sv new file mode 100644 index 000000000..2b2425bc7 --- /dev/null +++ b/src/ast/rtl/adc.sv @@ -0,0 +1,141 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// -------- W A R N I N G: A U T O - G E N E R A T E D C O D E !! -------- // +// PLEASE DO NOT HAND-EDIT THIS FILE. IT HAS BEEN AUTO-GENERATED. +// +//############################################################################ +// *Name: adc +// *Module Description: Analog/Digital Converter +//############################################################################ + +module adc #( + parameter int unsigned AdcCnvtClks = 19,// 21cc from adc_chnsel_i change to adc_d_val_o assertion + parameter int AdcChannels = 2, // ADC number of Channels + parameter int AdcDataWidth = 10 +) ( + input ast_pkg::awire_t adc_a0_ai, // ADC A0 Analog Input + input ast_pkg::awire_t adc_a1_ai, // ADC A1 Analog Input + input [AdcChannels-1:0] adc_chnsel_i, // Onehot value only for selrction + input adc_pd_i, // ADC Power Down + input clk_adc_i, // ADC Clock (aon_clk - 200KHz) + input rst_adc_ni, // ADC Reset active low + output logic [AdcDataWidth-1:0] adc_d_o, // ADC 10-bit Data Output + output logic adc_d_val_o // ADC Data Valid Output +); + +/////////////////////////////////////// +// ADC Enable +/////////////////////////////////////// +logic adc_en; + +always_ff @( posedge clk_adc_i, negedge rst_adc_ni ) begin + if ( !rst_adc_ni ) begin + adc_en <= 1'b0; + end else begin + adc_en <= !adc_pd_i; + end +end + + +/////////////////////////////////////// +// ADC Channel Select +/////////////////////////////////////// +logic chn_selected, chn_selected_d, new_convert, adc_busy; + +assign chn_selected = |(adc_chnsel_i); + +always_ff @( posedge clk_adc_i, negedge rst_adc_ni ) begin + if ( !rst_adc_ni ) begin + chn_selected_d <= 1'b0; + end else begin + chn_selected_d <= chn_selected; + end +end + +// New Convertion +assign new_convert = chn_selected && !chn_selected_d && !adc_busy; + +//////////////////////////////////////// +// ADC Analog Model +//////////////////////////////////////// +logic [10-1:0] adc_d_ch0, adc_d_ch1; + +adc_ana u_adc_ana ( + .adc_a0_ai ( adc_a0_ai ), + .adc_a1_ai ( adc_a1_ai ), + .adc_d_ch0_o ( adc_d_ch0[10-1:0] ), + .adc_d_ch1_o ( adc_d_ch1[10-1:0] ) +); + + +//////////////////////////////////////// +// ADC Digital Model +//////////////////////////////////////// +logic [8-1:0] cnv_cyc; +logic [8-1:0] ConvertCount; + +assign ConvertCount = AdcCnvtClks[8-1:0]; + +always_ff @( posedge clk_adc_i, negedge rst_adc_ni ) begin + if (!rst_adc_ni ) begin + cnv_cyc <= 8'h00; + adc_busy <= 1'b0; + adc_d_val_o <= 1'b0; + adc_d_o <= {AdcDataWidth{1'b0}}; + end else if ( !(adc_en && chn_selected) ) begin + cnv_cyc <= 8'h00; + adc_busy <= 1'b0; + adc_d_val_o <= 1'b0; + end else if ( new_convert ) begin + cnv_cyc <= ConvertCount; + adc_busy <= 1'b1; + adc_d_val_o <= 1'b0; + end else if ( adc_busy && (cnv_cyc > 8'h00) ) begin + cnv_cyc <= cnv_cyc - 1'b1; + adc_busy <= 1'b1; + adc_d_val_o <= 1'b0; + end else if ( adc_busy ) begin + adc_busy <= 1'b0; + adc_d_val_o <= 1'b1; + adc_d_o <= (adc_chnsel_i[1:0] == 2'b00) ? adc_d_o : + (adc_chnsel_i[1:0] == 2'b01) ? adc_d_ch0[10-1:0] : + (adc_chnsel_i[1:0] == 2'b10) ? adc_d_ch1[10-1:0] : + {AdcDataWidth{1'b1}}; + end +end + +///////////////////////// +// ASSERTIONS +///////////////////////// +// Add Assertion mux selector is onehot - zero is allowed +`ASSERT(AdcChnselOneHot_A, $onehot0(adc_chnsel_i), clk_adc_i, !rst_adc_ni) + +// Add Assertion adc_en=0 chnsel is 0. +`ASSERT(NoChannelWhileDisabled_A, (adc_en == 0) |-> (adc_chnsel_i == 4'h0), clk_adc_i, !rst_adc_ni) + +// The power up time period is 30us throughout which the adc_chnsel_i needs to be stable at 0. +// Since we are dealing with a time period here, and not clock cycles, we need to make sure +// that we sample and check enough clock ticks in order to guarantee the timing is met. +// Assuming that the clk_adc_i period is 200kHz, this SVA makes sure that: +// +// a) the signal adc_chnsel_i was 0 before adc_pd_i fell. this is achieved by sampling +// and checking on clock edges (-1) ... 0 in the illustration below. +// b) the signal adc_chnsel_i remained at 0 for at least 30us after adc_pd_i fell. +// this is achieved by sampling and checking on clock edges 0 ... 6 which cover a +// time period of 6 x 5us as shown in the illustration below. +// ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ +// clk_ast_adc_i : | |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__ +// ___________ +// adc_pd_i : | |_______________________________________________________ +// +// adc_chnsel_i : xxxxxx___________________________________________________xxxxxxxxx +// +// ChannelStableOnAdcEn_A: | | | | | | | | +// -1 0 1 2 3 4 5 6 +// <------------ 6 x 5us = 30us -----------> +`ASSERT(ChannelStableOnAdcEn_A, + $fell(adc_pd_i) |-> ($past(adc_chnsel_i) == 4'h0)[*8], clk_adc_i, !rst_adc_ni) + +endmodule : adc diff --git a/src/ast/rtl/adc_ana.sv b/src/ast/rtl/adc_ana.sv new file mode 100644 index 000000000..6f4b6409b --- /dev/null +++ b/src/ast/rtl/adc_ana.sv @@ -0,0 +1,45 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +//############################################################################ +// *Name: sdc_ana +// *Module Description: ADC Analog +//############################################################################ + +module adc_ana ( + input ast_pkg::awire_t adc_a0_ai, // ADC A0 Analog Input + input ast_pkg::awire_t adc_a1_ai, // ADC A1 Analog Input + output logic [10-1:0] adc_d_ch0_o, // ADC A0 Digital Output + output logic [10-1:0] adc_d_ch1_o // ADC A1 Digital Output +); + +`ifndef SYNTHESIS +// Behavioral Model +//////////////////////////////////////// +real vref = 2.3; +real adc_vi0_hook = 1.0; +real adc_vi1_hook = 1.0; +real adc_vi0, adc_vi1; + +`ifdef ANALOGSIM +assign adc_vi0 = adc_a0_ai; +assign adc_vi1 = adc_a1_ai; +`else +assign adc_vi0 = adc_a0_ai ? adc_vi0_hook : 0.0; +assign adc_vi1 = adc_a1_ai ? adc_vi1_hook : 0.0; +`endif +assign adc_d_ch0_o = $rtoi((adc_vi0/vref) * $itor(10'h3ff)); +assign adc_d_ch1_o = $rtoi((adc_vi1/vref) * $itor(10'h3ff)); +`else // of SYNTHESIS +// FPGA/VERILATOR +//////////////////////////////////////// +logic [10-1:0] adc_d_vi0_hook, adc_d_vi1_hook; + +assign adc_d_vi0_hook = 10'h155; +assign adc_d_vi1_hook = 10'h2AA; + +assign adc_d_ch0_o = adc_a0_ai ? adc_d_vi0_hook : 10'h000; +assign adc_d_ch1_o = adc_a1_ai ? adc_d_vi1_hook : 10'h000; +`endif + +endmodule : adc_ana diff --git a/src/ast/rtl/aon_clk.sv b/src/ast/rtl/aon_clk.sv new file mode 100644 index 000000000..568cba417 --- /dev/null +++ b/src/ast/rtl/aon_clk.sv @@ -0,0 +1,67 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// -------- W A R N I N G: A U T O - G E N E R A T E D C O D E !! -------- // +// PLEASE DO NOT HAND-EDIT THIS FILE. IT HAS BEEN AUTO-GENERATED. +// +//############################################################################ +// *Name: aon_clk +// *Module Description: Always ON Clock +//############################################################################ + +module aon_clk ( + input vcore_pok_h_i, // VCORE POK @3.3V (for OSC) + input clk_aon_pd_ni, // AON Clock Power-down + input rst_aon_clk_ni, // AON Clock Logic reset + input clk_src_aon_en_i, // AON Source Clock Enable + input scan_mode_i, // Scan Mode + input aon_osc_cal_i, // AON Oscillator Calibrated +`ifdef AST_BYPASS_CLK + input clk_aon_ext_i, // FPGA/VERILATOR Clock input +`endif + output logic clk_src_aon_o, // AON Source Clock + output logic clk_src_aon_val_o // AON Source Clock Valid +); + +logic clk, osc_en, aon_clk_en; + +assign osc_en = (clk_src_aon_en_i && clk_aon_pd_ni && rst_aon_clk_ni); +assign aon_clk_en = scan_mode_i || osc_en; + +// Clock Oscillator +/////////////////////////////////////// +aon_osc u_aon_osc ( + .vcore_pok_h_i ( vcore_pok_h_i ), + .aon_en_i ( aon_clk_en ), + .aon_osc_cal_i ( aon_osc_cal_i ), +`ifdef AST_BYPASS_CLK + .clk_aon_ext_i ( clk_aon_ext_i ), +`endif + .aon_clk_o ( clk ) +); // of u_aon_osc + +// Clock & Valid +/////////////////////////////////////// +prim_clock_buf #( + .NoFpgaBuf ( 1'b1 ) +) u_clk_aon_buf( + .clk_i ( clk ), + .clk_o ( clk_src_aon_o ) +); + +// 2-stage de-assertion +logic rst_val_n; +assign rst_val_n = aon_clk_en; + +prim_flop_2sync #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_no_scan_val_sync ( + .clk_i ( clk_src_aon_o ), + .rst_ni ( rst_val_n ), + .d_i ( 1'b1 ), + .q_o ( clk_src_aon_val_o ) +); + +endmodule : aon_clk diff --git a/src/ast/rtl/aon_osc.sv b/src/ast/rtl/aon_osc.sv new file mode 100644 index 000000000..c18e51c4c --- /dev/null +++ b/src/ast/rtl/aon_osc.sv @@ -0,0 +1,132 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +//############################################################################ +// *Name: aon_osc +// *Module Description: AON Clock Oscilator +//############################################################################ + +module aon_osc ( + input vcore_pok_h_i, // VCORE POK @3.3V + input aon_en_i, // AON Source Clock Enable + input aon_osc_cal_i, // AON Oscillator Calibrated +`ifdef AST_BYPASS_CLK + input clk_aon_ext_i, // FPGA/VERILATOR Clock input\ +`endif + output logic aon_clk_o // AON Clock Output +); + +`ifndef AST_BYPASS_CLK +`ifndef SYNTHESIS +// Behavioral Model +//////////////////////////////////////// +timeunit 1ns / 10ps; + +real CLK_PERIOD, ckmul; + +reg init_start; +initial init_start = 1'b0; + +initial begin + if ( !$value$plusargs("osc200k_freq_multiplier=%f", ckmul) ) ckmul = 1.0; + #1; + init_start = 1'b1; + #1; + $display("\n%m: AON Base Clock Power-up Frequency: %0d Hz", $rtoi(10**9/(CLK_PERIOD*ckmul))); + $display("%m: AON %0.1fxBase Clock Power-up Frequency: %0d Hz", ckmul, $rtoi(10**9/CLK_PERIOD)); +end + +// Enable 5us RC Delay on rise +wire en_osc_re_buf, en_osc_re; +buf #(ast_bhv_pkg::AON_EN_RDLY, 0) b0 (en_osc_re_buf, (vcore_pok_h_i && aon_en_i)); +assign en_osc_re = en_osc_re_buf && init_start; + +// Clock Oscillator +//////////////////////////////////////// +real CalAonClkPeriod, UncAonClkPeriod, AonClkPeriod; + +initial CalAonClkPeriod = $itor( 5000 ); // 5000ns (200KHz) +initial UncAonClkPeriod = $itor( $urandom_range(10000, 5555) ); // 10000-5555ps (100-180KHz) + +assign AonClkPeriod = (aon_osc_cal_i && init_start) ? CalAonClkPeriod : UncAonClkPeriod; +assign CLK_PERIOD = AonClkPeriod/ckmul; + +// Free running oscillator +reg clk_osc; +initial clk_osc = 1'b1; + +always begin + #(CLK_PERIOD/2) clk_osc = ~clk_osc; +end + +logic en_osc; + +// HDL Clock Gate +logic en_clk, clk; + +always_latch begin + if ( !clk_osc ) en_clk = en_osc; +end + +assign clk = clk_osc && en_clk; +`else // of SYNTHESIS +// SYNTHESIS/LINTER +/////////////////////////////////////// +logic clk, en_osc; +assign clk = 1'b0; + +logic en_osc_re; +assign en_osc_re = vcore_pok_h_i && aon_en_i; +`endif // of SYNTHESIS +`else // of AST_BYPASS_CLK +// VERILATOR/FPGA +/////////////////////////////////////// +logic en_osc_re; +assign en_osc_re = vcore_pok_h_i && aon_en_i; + +// Clock Oscillator +//////////////////////////////////////// +logic clk, en_osc; + +prim_clock_gating #( + .NoFpgaGate ( 1'b1 ) +) u_clk_ckgt ( + .clk_i ( clk_aon_ext_i ), + .en_i ( en_osc ), + .test_en_i ( 1'b0 ), + .clk_o ( clk ) +); +`endif + +logic en_osc_fe; + +// Syncronize en_osc to clk FE for glitch free disable +always_ff @( negedge clk, negedge vcore_pok_h_i ) begin + if ( !vcore_pok_h_i ) begin + en_osc_fe <= 1'b0; + end else begin + en_osc_fe <= en_osc_re; + end +end + +assign en_osc = en_osc_re || en_osc_fe; // EN -> 1 || EN -> 0 + +// Clock Output Buffer +//////////////////////////////////////// +prim_clock_buf #( + .NoFpgaBuf ( 1'b1 ) +) u_buf ( + .clk_i ( clk ), + .clk_o ( aon_clk_o ) +); + + +`ifdef SYNTHESIS +/////////////////////// +// Unused Signals +/////////////////////// +logic unused_sigs; +assign unused_sigs = ^{ aon_osc_cal_i }; +`endif + +endmodule : aon_osc diff --git a/src/ast/rtl/ast.sv b/src/ast/rtl/ast.sv new file mode 100644 index 000000000..c57cf5ebf --- /dev/null +++ b/src/ast/rtl/ast.sv @@ -0,0 +1,1062 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// -------- W A R N I N G: A U T O - G E N E R A T E D C O D E !! -------- // +// PLEASE DO NOT HAND-EDIT THIS FILE. IT HAS BEEN AUTO-GENERATED. +// +//############################################################################ +// *Name: ast +// *Module Description: Analog Sensors Top +//############################################################################ + +`include "prim_assert.sv" + +module ast #( + parameter int unsigned AdcChannels = 2, + parameter int unsigned AdcDataWidth = 10, + parameter int unsigned EntropyStreams = 4, + parameter int unsigned UsbCalibWidth = 20, + parameter int unsigned Ast2PadOutWidth = 9, + parameter int unsigned Pad2AstInWidth = 9 +) ( + // tlul if + input tlul_pkg::tl_h2d_t tl_i, // TLUL H2D + output tlul_pkg::tl_d2h_t tl_o, // TLUL D2H + output prim_mubi_pkg::mubi4_t ast_init_done_o, // AST (registers) Init Done + + // clocks / resets + input clk_ast_adc_i, // Buffered AST ADC Clock + input rst_ast_adc_ni, // Buffered AST ADC Reset + input clk_ast_alert_i, // Buffered AST Alert Clock + input rst_ast_alert_ni, // Buffered AST Alert Reset + input clk_ast_es_i, // Buffered AST Entropy Source Clock + input rst_ast_es_ni, // Buffered AST Entropy Source Reset + input clk_ast_rng_i, // Buffered AST RNG Clock + input rst_ast_rng_ni, // Buffered AST RNG Reset + input clk_ast_tlul_i, // Buffered AST TLUL Clock + input rst_ast_tlul_ni, // Buffered AST TLUL Reset + input clk_ast_usb_i, // Buffered AST USB Clock + input rst_ast_usb_ni, // Buffered AST USB Reset + input clk_ast_ext_i, // Buffered AST External Clock + input por_ni, // Power ON Reset + + // sensed clocks / resets + input clkmgr_pkg::clkmgr_out_t sns_clks_i, // Sensed Clocks + input rstmgr_pkg::rstmgr_out_t sns_rsts_i, // Sensed Resets + input sns_spi_ext_clk_i, // Sensed SPI External Clock + +`ifdef AST_BYPASS_CLK + // Clocks' Oschillator bypass for OS FPGA + input ast_pkg::clks_osc_byp_t clk_osc_byp_i, // Clocks' Oschillator bypass for OS FPGA/VERILATOR +`endif + + // power OK control + // In non-power aware DV environment, the <>_supp_i is for debug only! + // POK signal follow this input. + // In a power aware environment this signal should be connected to constant '1' + input vcc_supp_i, // VCC Supply Test for OS FPGA + input vcaon_supp_i, // VCAON Supply Test for OS FPGA + input vcmain_supp_i, // VCMAIN Supply Test for OS FPGA + input vioa_supp_i, // VIOA Rail Supply Test for OS FPGA + input viob_supp_i, // VIOB Rail Supply Test for OS FPGA + output ast_pkg::ast_pwst_t ast_pwst_o, // AON, MAIN, IO-0 Rail, IO-1 Rail Power OK @1.1V + output ast_pkg::ast_pwst_t ast_pwst_h_o, // AON, MAIN, IO-9 Rail, IO-1 Rail Power OK @3.3V + + // Power and IO pin connections + input main_pd_ni, // MAIN Regulator Power Down + input main_env_iso_en_i, // Enveloped ISOlation ENable for MAIN + + // power down monitor logic - flash/otp related + output logic flash_power_down_h_o, // Flash Power Down + output logic flash_power_ready_h_o, // Flash Power Ready + input [1:0] otp_power_seq_i, // MMR0,24 in (VDD) + output logic [1:0] otp_power_seq_h_o, // MMR0,24 masked by PDM, out (VCC) + + // system source clock + input clk_src_sys_en_i, // SYS Source Clock Enable + input prim_mubi_pkg::mubi4_t clk_src_sys_jen_i, // SYS Source Clock Jitter Enable + output logic clk_src_sys_o, // SYS Source Clock + output logic clk_src_sys_val_o, // SYS Source Clock Valid + + // aon source clock + output logic clk_src_aon_o, // AON Source Clock + output logic clk_src_aon_val_o, // AON Source Clock Valid + + // io source clock + input clk_src_io_en_i, // IO Source Clock Enable + output logic clk_src_io_o, // IO Source Clock + output logic clk_src_io_val_o, // IO Source Clock Valid + output prim_mubi_pkg::mubi4_t clk_src_io_48m_o, // IO Source Clock is 48MHz + + // usb source clock + input usb_ref_pulse_i, // USB Reference Pulse + input usb_ref_val_i, // USB Reference Valid + input clk_src_usb_en_i, // USB Source Clock Enable + output logic clk_src_usb_o, // USB Source Clock + output logic clk_src_usb_val_o, // USB Source Clock Valid + output logic [UsbCalibWidth-1:0] usb_io_pu_cal_o, // USB IO Pull-up Calibration Setting + + // adc interface + input adc_pd_i, // ADC Power Down + input ast_pkg::awire_t adc_a0_ai, // ADC A0 Analog Input + input ast_pkg::awire_t adc_a1_ai, // ADC A1 Analog Input + input [AdcChannels-1:0] adc_chnsel_i, // ADC Channel Select + output [AdcDataWidth-1:0] adc_d_o, // ADC Digital (per channel) + output adc_d_val_o, // ADC Digital Valid + + // rng (entropy source) interface + input rng_en_i, // RNG Enable + input rng_fips_i, // RNG FIPS + output logic rng_val_o, // RNG Valid + output logic [EntropyStreams-1:0] rng_b_o, // RNG Bit(s) + + // entropy distribution interface + input edn_pkg::edn_rsp_t entropy_rsp_i, // Entropy Response + output edn_pkg::edn_req_t entropy_req_o, // Entropy Request + + // alerts + input ast_pkg::ast_alert_rsp_t alert_rsp_i, // Alerts Trigger & Acknowledge Inputs + output ast_pkg::ast_alert_req_t alert_req_o, // Alerts Output + + // dft interface + input pinmux_pkg::dft_strap_test_req_t dft_strap_test_i, // DFT Straps + input lc_ctrl_pkg::lc_tx_t lc_dft_en_i, // DFT enable (secure bus) + input [8-1:0] fla_obs_i, // FLASH Observe Bus + input [8-1:0] otp_obs_i, // OTP Observe Bus + input [8-1:0] otm_obs_i, // OT Modules Observe Bus + input usb_obs_i, // USB DIFF RX Observe + output ast_pkg::ast_obs_ctrl_t obs_ctrl_o, // Observe Control + + // pad mux/pad related + input [Pad2AstInWidth-1:0] padmux2ast_i, // IO_2_DFT Input Signals + output logic [Ast2PadOutWidth-1:0] ast2padmux_o, // DFT_2_IO Output Signals + +`ifdef ANALOGSIM + output real ast2pad_t0_ao, // AST_2_PAD Analog T0 Output Signal + output real ast2pad_t1_ao, // AST_2_PAD Analog T1 Output Signal +`else + output wire ast2pad_t0_ao, // AST_2_PAD Analog T0 Output Signal + output wire ast2pad_t1_ao, // AST_2_PAD Analog T1 Output Signal +`endif + + // flash and external clocks + input prim_mubi_pkg::mubi4_t ext_freq_is_96m_i, // External clock frequecy is 96MHz + input prim_mubi_pkg::mubi4_t all_clk_byp_req_i, // All clocks bypass request + output prim_mubi_pkg::mubi4_t all_clk_byp_ack_o, // Switch all clocks to External clocks + input prim_mubi_pkg::mubi4_t io_clk_byp_req_i, // IO clock bypass request (for OTP bootstrap) + output prim_mubi_pkg::mubi4_t io_clk_byp_ack_o, // Switch IO clock to External clockn + output prim_mubi_pkg::mubi4_t flash_bist_en_o, // Flush BIST (TAP) Enable + + // memories read-write margins + output ast_pkg::dpm_rm_t dpram_rmf_o, // Dual Port RAM Read-write Margin Fast + output ast_pkg::dpm_rm_t dpram_rml_o, // Dual Port RAM Read-write Margin sLow + output ast_pkg::spm_rm_t spram_rm_o, // Single Port RAM Read-write Margin + output ast_pkg::spm_rm_t sprgf_rm_o, // Single Port Reg-File Read-write Margin + output ast_pkg::spm_rm_t sprom_rm_o, // Single Port ROM Read-write Margin + + // Scan interface + output prim_mubi_pkg::mubi4_t dft_scan_md_o, // Scan Mode output + output scan_shift_en_o, // Scan Shift Enable output + output scan_reset_no // Scan Reset output +); + +import ast_pkg::* ; +import ast_reg_pkg::* ; +import ast_bhv_pkg::* ; + +logic scan_mode, shift_en, scan_reset_n; +logic vcc_pok, vcc_pok_h, vcc_pok_str; +logic vcaon_pok, vcaon_pok_h, vcmain_pok; +logic vcaon_pok_por, vcmain_pok_por; + +// Local (AST) System clock buffer +//////////////////////////////////////// +logic clk_sys; + +prim_clock_buf #( + .NoFpgaBuf ( 1'b1 ) +) u_clk_sys_buf ( + .clk_i ( clk_src_sys_o ), + .clk_o ( clk_sys ) +); + +// Local (AST) AON clock buffer +//////////////////////////////////////// +logic clk_aon; + +prim_clock_buf #( + .NoFpgaBuf ( 1'b1 ) +) u_clk_aon_buf ( + .clk_i ( clk_src_aon_o ), + .clk_o ( clk_aon ) +); + + +assign flash_bist_en_o = prim_mubi_pkg::MuBi4False; +// +assign dft_scan_md_o = prim_mubi_pkg::MuBi4False; +assign scan_shift_en_o = 1'b0; +assign scan_reset_no = 1'b1; +assign scan_mode = 1'b0; +assign shift_en = 1'b0; +assign scan_reset_n = 1'b1; + + +/////////////////////////////////////// +// VCC POK (Always ON) +/////////////////////////////////////// +logic vcc_pok_int; + +vcc_pgd u_vcc_pok ( + .vcc_pok_o ( vcc_pok_int ) +); + +assign vcc_pok = vcc_pok_int && vcc_supp_i; +assign vcc_pok_h = vcc_pok; // "Level Shifter" + + +//////////////////////////////////////// +// VCAON POK POR (Always ON) +/////////////////////////////////////// +logic rst_poks_n, rst_poks_por_n, por_sync_n; +logic vcaon_pok_por_src, vcaon_pok_por_lat, poks_por_ack, rglssm_vcmon, rglssm_brout; + +assign rst_poks_n = vcc_pok_str && vcaon_pok; +assign rst_poks_por_n = vcc_pok_str && vcaon_pok && por_ni; +assign poks_por_ack = vcaon_pok_por_src || rglssm_vcmon; + +// Reset De-Assert Sync +prim_flop_2sync #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_no_scan_poks_por_dasrt ( + .clk_i ( clk_aon ), + .rst_ni ( rst_poks_por_n ), + .d_i ( poks_por_ack ), + .q_o ( vcaon_pok_por_src ) +); + +logic clk_aon_n; + +prim_clock_inv #( + .HasScanMode ( 1 ) +) u_clk_aon_inv ( + .clk_i ( clk_aon ), + .scanmode_i ( scan_mode ), + .clk_no ( clk_aon_n ) +); + +prim_flop #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_no_scan_por_sync_n ( + .clk_i ( clk_aon_n ), + .rst_ni ( rst_poks_n ), + .d_i ( vcaon_pok_por_src ), + .q_o ( por_sync_n ) +); + +// Replace Latch for the OS code +assign vcaon_pok_por_lat = rglssm_brout || por_sync_n; +assign ast_pwst_o.aon_pok = vcaon_pok_por_lat; +assign vcaon_pok_por = scan_mode ? scan_reset_n : vcaon_pok_por_lat; + + +//////////////////////////////////////// +// VCMAIN POK POR (Always ON) +/////////////////////////////////////// +logic rglssm_vmppr, vcmain_pok_por_src; + +assign vcmain_pok_por_src = vcaon_pok_por_lat && vcmain_pok && !rglssm_vmppr; +assign ast_pwst_o.main_pok = vcmain_pok_por_src; +assign vcmain_pok_por = scan_mode ? scan_reset_n : vcmain_pok_por_src; + + +/////////////////////////////////////// +// VIOA POK (Always ON) +/////////////////////////////////////// +logic vioa_pok; +logic vioa_pok_int; + +vio_pgd u_vioa_pok ( + .vio_pok_o ( vioa_pok_int ) +); + +assign vioa_pok = vioa_pok_int && vioa_supp_i; +assign ast_pwst_o.io_pok[0] = vcaon_pok && vioa_pok; + + +/////////////////////////////////////// +// VIOB POK (Always ON) +/////////////////////////////////////// +logic viob_pok; +logic viob_pok_int; + +vio_pgd u_viob_pok ( + .vio_pok_o ( viob_pok_int ) +); + +assign viob_pok = viob_pok_int && viob_supp_i; +assign ast_pwst_o.io_pok[1] = vcaon_pok && viob_pok; + + +/////////////////////////////////////// +// Regulators & PDM Logic (VCC) +/////////////////////////////////////// +logic deep_sleep; +logic main_pd, por_sync; + +assign main_pd = !main_pd_ni; +assign por_sync = !por_sync_n; + +rglts_pdm_3p3v u_rglts_pdm_3p3v ( + .vcc_pok_h_i ( vcc_pok_h ), + .vcaon_pok_por_h_i ( vcaon_pok_por_src ), + .vcmain_pok_por_h_i ( vcmain_pok_por_src ), + .vio_pok_h_i ( ast_pwst_o.io_pok[1:0] ), + .clk_src_aon_h_i ( clk_aon ), + .main_pd_h_i ( main_pd ), + .por_sync_h_i ( por_sync ), + .scan_mode_h_i ( scan_mode ), + .otp_power_seq_h_i ( otp_power_seq_i[2-1:0] ), + .vcaon_supp_i ( vcaon_supp_i ), + .vcmain_supp_i ( vcmain_supp_i ), + .rglssm_vmppr_h_o ( rglssm_vmppr ), + .rglssm_vcmon_h_o ( rglssm_vcmon ), + .rglssm_brout_h_o ( rglssm_brout ), + .vcmain_pok_h_o ( vcmain_pok ), + .vcmain_pok_por_h_o ( ast_pwst_h_o.main_pok ), + .vcaon_pok_h_o ( vcaon_pok_h ), + .vcaon_pok_1p1_h_o ( vcaon_pok ), + .vcaon_pok_por_h_o ( ast_pwst_h_o.aon_pok ), + .vio_pok_h_o ( ast_pwst_h_o.io_pok[2-1:0] ), + .vcc_pok_str_h_o ( ast_pwst_h_o.vcc_pok ), + .vcc_pok_str_1p1_h_o ( vcc_pok_str ), + .deep_sleep_h_o ( deep_sleep ), + .flash_power_down_h_o ( flash_power_down_h_o ), + .flash_power_ready_h_o ( flash_power_ready_h_o ), + .otp_power_seq_h_o ( otp_power_seq_h_o[2-1:0] ) +); + +assign ast_pwst_o.vcc_pok = vcc_pok_str; + + +/////////////////////////////////////// +/////////////////////////////////////// +// Clocks Oscillattors +/////////////////////////////////////// +/////////////////////////////////////// + + +/////////////////////////////////////// +// System Clock (Always ON) +/////////////////////////////////////// +logic rst_sys_clk_n, clk_sys_pd_n; +logic clk_sys_en, clk_osc_sys, clk_osc_sys_val; +prim_mubi_pkg::mubi4_t clk_src_sys_jen; + +assign rst_sys_clk_n = vcmain_pok_por && vcc_pok; +assign clk_sys_pd_n = scan_mode || !deep_sleep; + +logic sys_io_osc_cal; + +assign clk_sys_en = clk_src_sys_en_i; + +`ifdef AST_BYPASS_CLK +logic clk_sys_ext; +assign clk_sys_ext = clk_osc_byp_i.sys; +`endif + +sys_clk u_sys_clk ( + .clk_src_sys_jen_i ( prim_mubi_pkg::mubi4_test_true_loose(clk_src_sys_jen) ), + .clk_src_sys_en_i ( clk_sys_en ), + .clk_sys_pd_ni ( clk_sys_pd_n ), + .rst_sys_clk_ni ( rst_sys_clk_n ), + .vcore_pok_h_i ( vcaon_pok_h ), + .scan_mode_i ( scan_mode ), + .sys_osc_cal_i ( sys_io_osc_cal ), +`ifdef AST_BYPASS_CLK + .clk_sys_ext_i ( clk_sys_ext ), +`endif + .clk_src_sys_o ( clk_osc_sys ), + .clk_src_sys_val_o ( clk_osc_sys_val ) +); + + +/////////////////////////////////////// +// USB Clock (Always ON) +/////////////////////////////////////// +logic rst_usb_clk_n, clk_usb_pd_n; +logic clk_usb_en, clk_osc_usb, clk_osc_usb_val; +logic usb_ref_val, usb_ref_pulse; + +assign rst_usb_clk_n = vcmain_pok_por && vcc_pok; +assign clk_usb_pd_n = scan_mode || !deep_sleep; + +logic usb_osc_cal; + +`ifdef AST_BYPASS_CLK +logic clk_usb_ext; +assign clk_usb_ext = clk_osc_byp_i.usb; +`endif + +assign clk_usb_en = clk_src_usb_en_i; +assign usb_ref_val = usb_ref_val_i; +assign usb_ref_pulse = usb_ref_pulse_i; + +usb_clk u_usb_clk ( + .vcore_pok_h_i ( vcaon_pok_h ), + .clk_usb_pd_ni ( clk_usb_pd_n ), + .rst_usb_clk_ni ( rst_usb_clk_n ), + .clk_src_usb_en_i ( clk_usb_en ), + .usb_ref_val_i ( usb_ref_val ), + .usb_ref_pulse_i ( usb_ref_pulse ), + .clk_ast_usb_i ( clk_ast_usb_i ), + .rst_ast_usb_ni ( rst_ast_usb_ni ), + .scan_mode_i ( scan_mode ), + .usb_osc_cal_i ( usb_osc_cal ), +`ifdef AST_BYPASS_CLK + .clk_usb_ext_i ( clk_usb_ext ), +`endif + .clk_src_usb_o ( clk_osc_usb ), + .clk_src_usb_val_o ( clk_osc_usb_val ) +); + + +/////////////////////////////////////// +// AON Clock (Always ON) +/////////////////////////////////////// +logic rst_aon_clk_n; +logic clk_src_aon_en, clk_osc_aon, clk_osc_aon_val; +logic aon_osc_cal; + +`ifdef AST_BYPASS_CLK +logic clk_aon_ext; +assign clk_aon_ext = clk_osc_byp_i.aon; +`endif + +assign rst_aon_clk_n = vcc_pok_str && vcaon_pok; +assign clk_src_aon_en = 1'b1; // Always Enabled + +aon_clk u_aon_clk ( + .vcore_pok_h_i ( vcaon_pok_h ), + .clk_aon_pd_ni ( 1'b1 ), // Always Enabled + .rst_aon_clk_ni ( rst_aon_clk_n ), + .clk_src_aon_en_i ( clk_src_aon_en ), + .scan_mode_i ( scan_mode ), + .aon_osc_cal_i ( aon_osc_cal ), +`ifdef AST_BYPASS_CLK + .clk_aon_ext_i ( clk_aon_ext ), +`endif + .clk_src_aon_o ( clk_osc_aon ), + .clk_src_aon_val_o ( clk_osc_aon_val ) +); + +logic vcmpp_aon_sync_n, rst_vcmpp_aon_n; + +// Reset De-Assert Sync +prim_flop_2sync #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_rst_vcmpp_aon_dasrt ( + .clk_i ( clk_aon ), + .rst_ni ( vcmain_pok_por ), + .d_i ( 1'b1 ), + .q_o ( vcmpp_aon_sync_n ) +); + +assign rst_vcmpp_aon_n = scan_mode ? scan_reset_n : vcmpp_aon_sync_n; + + +/////////////////////////////////////// +// IO Clock (Always ON) +/////////////////////////////////////// +logic rst_io_clk_n, clk_io_pd_n; +logic clk_src_io_en, clk_osc_io, clk_osc_io_val; + +assign rst_io_clk_n = vcmain_pok_por && vcc_pok; +assign clk_io_pd_n = scan_mode || !deep_sleep; + +`ifdef AST_BYPASS_CLK +logic clk_io_ext; +assign clk_io_ext = clk_osc_byp_i.io; +`endif + +assign clk_src_io_en = clk_src_io_en_i; + +io_clk u_io_clk ( + .vcore_pok_h_i ( vcaon_pok_h ), + .clk_io_pd_ni ( clk_io_pd_n ), + .rst_io_clk_ni ( rst_io_clk_n ), + .clk_src_io_en_i ( clk_src_io_en ), + .scan_mode_i ( scan_mode ), + .io_osc_cal_i ( sys_io_osc_cal ), +`ifdef AST_BYPASS_CLK + .clk_io_ext_i ( clk_io_ext ), +`endif + .clk_src_io_o ( clk_osc_io ), + .clk_src_io_val_o ( clk_osc_io_val ) +); + + +/////////////////////////////////////// +// AST Clocks Bypass +/////////////////////////////////////// +logic clk_src_sys, clk_src_io, clk_src_usb, clk_src_aon; + +ast_clks_byp u_ast_clks_byp ( + .vcaon_pok_i ( vcaon_pok ), + .vcaon_pok_por_i ( vcaon_pok_por ), + .deep_sleep_i ( deep_sleep ), + .clk_src_sys_en_i ( clk_src_sys_en_i ), + .clk_osc_sys_i ( clk_osc_sys ), + .clk_osc_sys_val_i ( clk_osc_sys_val ), + .clk_src_io_en_i ( clk_src_io_en_i ), + .clk_osc_io_i ( clk_osc_io ), + .clk_osc_io_val_i ( clk_osc_io_val ), + .clk_src_usb_en_i ( clk_src_usb_en_i ), + .clk_osc_usb_i ( clk_osc_usb ), + .clk_osc_usb_val_i ( clk_osc_usb_val ), + .clk_osc_aon_i ( clk_osc_aon ), + .clk_osc_aon_val_i ( clk_osc_aon_val ), + .clk_ast_ext_i ( clk_ast_ext_i ), +`ifdef AST_BYPASS_CLK + .clk_ext_sys_i( clk_sys_ext ), + .clk_ext_io_i( clk_io_ext ), + .clk_ext_usb_i( clk_usb_ext ), + .clk_ext_aon_i( clk_aon_ext ), +`endif + .io_clk_byp_req_i ( io_clk_byp_req_i ), + .all_clk_byp_req_i ( all_clk_byp_req_i ), + .ext_freq_is_96m_i ( ext_freq_is_96m_i ), + .io_clk_byp_ack_o ( io_clk_byp_ack_o ), + .all_clk_byp_ack_o ( all_clk_byp_ack_o ), + .clk_src_sys_o ( clk_src_sys ), + .clk_src_sys_val_o ( clk_src_sys_val_o ), + .clk_src_io_o ( clk_src_io ), + .clk_src_io_val_o ( clk_src_io_val_o ), + .clk_src_io_48m_o ( clk_src_io_48m_o ), + .clk_src_usb_o ( clk_src_usb ), + .clk_src_usb_val_o ( clk_src_usb_val_o ), + .clk_src_aon_o ( clk_src_aon ), + .clk_src_aon_val_o ( clk_src_aon_val_o ) +); + +// System source clock buffer +//////////////////////////////////////// +prim_clock_buf #( + .NoFpgaBuf ( 1'b1 ) +) u_clk_src_sys_buf ( + .clk_i ( clk_src_sys ), + .clk_o ( clk_src_sys_o ) +); + +// IO source clock buffer +//////////////////////////////////////// +prim_clock_buf #( + .NoFpgaBuf ( 1'b1 ) +) u_clk_src_io_buf ( + .clk_i ( clk_src_io ), + .clk_o ( clk_src_io_o ) +); + +// USB source clock buffer +//////////////////////////////////////// +prim_clock_buf #( + .NoFpgaBuf ( 1'b1 ) +) u_clk_src_usb_buf ( + .clk_i ( clk_src_usb ), + .clk_o ( clk_src_usb_o ) +); + +// AON source clock buffer +//////////////////////////////////////// +prim_clock_buf #( + .NoFpgaBuf ( 1'b1 ) +) u_clk_src_aon_buf ( + .clk_i ( clk_src_aon ), + .clk_o ( clk_src_aon_o ) +); + + +/////////////////////////////////////// +// ADC (Always ON) +/////////////////////////////////////// +adc #( + .AdcCnvtClks ( AdcCnvtClks ), + .AdcChannels ( AdcChannels ), + .AdcDataWidth ( AdcDataWidth ) +) u_adc ( + .adc_a0_ai ( adc_a0_ai ), + .adc_a1_ai ( adc_a1_ai ), + .adc_chnsel_i ( adc_chnsel_i[AdcChannels-1:0] ), + .adc_pd_i ( adc_pd_i ), + .clk_adc_i ( clk_ast_adc_i ), + .rst_adc_ni ( rst_ast_adc_ni ), + .adc_d_o ( adc_d_o[AdcDataWidth-1:0] ), + .adc_d_val_o ( adc_d_val_o ) +); + + +/////////////////////////////////////// +// Entropy (Always ON) +/////////////////////////////////////// +localparam int EntropyRateWidth = 4; +logic [EntropyRateWidth-1:0] entropy_rate; +logic vcmain_pok_por_sys, rst_src_sys_n; + +// Sync clk_src_sys_jen_i to clk_sys +prim_mubi4_sync #( + .NumCopies ( 1 ), + .AsyncOn ( 1 ), + .StabilityCheck ( 1 ), + .ResetValue (prim_mubi_pkg::MuBi4False ) +) u_jitter_en_sync ( + .clk_i ( clk_sys ), + .rst_ni ( rst_src_sys_n ), + .mubi_i ( clk_src_sys_jen_i ), + .mubi_o ( {clk_src_sys_jen} ) +); + +// Reset De-Assert Sync +prim_flop_2sync #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_rst_sys_dasrt ( + .clk_i ( clk_sys ), + .rst_ni ( vcmain_pok_por ), + .d_i ( 1'b1 ), + .q_o ( vcmain_pok_por_sys ) +); + +assign rst_src_sys_n = scan_mode ? scan_reset_n : vcmain_pok_por_sys; + +`ifndef SYNTHESIS +logic [EntropyRateWidth-1:0] dv_entropy_rate_value; + +initial begin : erate_plusargs + dv_entropy_rate_value = EntropyRateWidth'($urandom_range(0, (2**EntropyRateWidth -1))); + void'($value$plusargs("entropy_rate_value=%0d", dv_entropy_rate_value)); + `ASSERT_I(DvErateValueCheck, dv_entropy_rate_value inside {[0:(2**EntropyRateWidth -1)]}) +end + +assign entropy_rate = dv_entropy_rate_value; +`else +assign entropy_rate = EntropyRateWidth'(5); +`endif + +ast_entropy #( + .EntropyRateWidth ( EntropyRateWidth ) +) u_entropy ( + .entropy_rsp_i ( entropy_rsp_i ), + .entropy_rate_i ( entropy_rate[EntropyRateWidth-1:0] ), + .clk_ast_es_i ( clk_ast_es_i ), + .rst_ast_es_ni ( rst_ast_es_ni ), + .clk_src_sys_i ( clk_sys ), + .rst_src_sys_ni ( rst_src_sys_n ), + .clk_src_sys_val_i ( clk_src_sys_val_o ), + .clk_src_sys_jen_i ( prim_mubi_pkg::mubi4_test_true_loose(clk_src_sys_jen) ), + .entropy_req_o ( entropy_req_o ) +); + + +/////////////////////////////////////// +// RNG (Always ON) +/////////////////////////////////////// +ast_pkg::ast_dif_t ot1_alert_src; + +rng #( + .EntropyStreams ( EntropyStreams ) +) u_rng ( + .clk_i ( clk_ast_tlul_i ), + .rst_ni ( rst_ast_tlul_ni ), + .clk_ast_rng_i ( clk_ast_rng_i ), + .rst_ast_rng_ni ( rst_ast_rng_ni ), + .rng_en_i ( rng_en_i ), + .rng_fips_i ( rng_fips_i ), + .scan_mode_i ( scan_mode ), + .rng_b_o ( rng_b_o[EntropyStreams-1:0] ), + .rng_val_o ( rng_val_o ) +); + + +/////////////////////////////////////// +// Alerts (Always ON) +/////////////////////////////////////// +ast_pkg::ast_dif_t as_alert_src; +ast_pkg::ast_dif_t cgc_alert_src; +ast_pkg::ast_dif_t gd_alert_src; +ast_pkg::ast_dif_t ts_alert_hi_src; +ast_pkg::ast_dif_t ts_alert_lo_src; +ast_pkg::ast_dif_t ot0_alert_src; +ast_pkg::ast_dif_t ot2_alert_src; +ast_pkg::ast_dif_t ot3_alert_src; +ast_pkg::ast_dif_t ot4_alert_src; +ast_pkg::ast_dif_t ot5_alert_src; + + +// Active Shield (AS) +/////////////////////////////////////// +ast_alert u_alert_as ( + .clk_i ( clk_ast_alert_i ), + .rst_ni ( rst_ast_alert_ni ), + .alert_src_i ( as_alert_src ), + .alert_trig_i ( alert_rsp_i.alerts_trig[ast_pkg::AsSel] ), + .alert_ack_i ( alert_rsp_i.alerts_ack[ast_pkg::AsSel] ), + .alert_req_o ( alert_req_o.alerts[ast_pkg::AsSel] ) +); + +// Clock Glitch (CG) +/////////////////////////////////////// +ast_alert u_alert_cg ( + .clk_i ( clk_ast_alert_i ), + .rst_ni ( rst_ast_alert_ni ), + .alert_src_i ( cgc_alert_src ), + .alert_trig_i ( alert_rsp_i.alerts_trig[ast_pkg::CgSel] ), + .alert_ack_i ( alert_rsp_i.alerts_ack[ast_pkg::CgSel] ), + .alert_req_o ( alert_req_o.alerts[ast_pkg::CgSel] ) +); + +// Glitch Detector (GD) +/////////////////////////////////////// +ast_alert u_alert_gd ( + .clk_i ( clk_ast_alert_i ), + .rst_ni ( rst_ast_alert_ni ), + .alert_src_i ( gd_alert_src ), + .alert_trig_i ( alert_rsp_i.alerts_trig[ast_pkg::GdSel] ), + .alert_ack_i ( alert_rsp_i.alerts_ack[ast_pkg::GdSel] ), + .alert_req_o ( alert_req_o.alerts[ast_pkg::GdSel] ) +); + +// Temprature Sensor High (TS Hi) +/////////////////////////////////////// +ast_alert u_alert_ts_hi ( + .clk_i ( clk_ast_alert_i ), + .rst_ni ( rst_ast_alert_ni ), + .alert_src_i ( ts_alert_hi_src ), + .alert_trig_i ( alert_rsp_i.alerts_trig[ast_pkg::TsHiSel] ), + .alert_ack_i ( alert_rsp_i.alerts_ack[ast_pkg::TsHiSel] ), + .alert_req_o ( alert_req_o.alerts[ast_pkg::TsHiSel] ) +); + +// Temprature Sensor Low (TS Lo) +/////////////////////////////////////// +ast_alert u_alert_ts_lo ( + .clk_i ( clk_ast_alert_i ), + .rst_ni ( rst_ast_alert_ni ), + .alert_src_i ( ts_alert_lo_src ), + .alert_trig_i ( alert_rsp_i.alerts_trig[ast_pkg::TsLoSel] ), + .alert_ack_i ( alert_rsp_i.alerts_ack[ast_pkg::TsLoSel] ), + .alert_req_o ( alert_req_o.alerts[ast_pkg::TsLoSel] ) +); + +// Other-0 Alert (OT0) +/////////////////////////////////////// +ast_alert u_alert_ot0 ( + .clk_i ( clk_ast_alert_i ), + .rst_ni ( rst_ast_alert_ni ), + .alert_src_i ( ot0_alert_src ), + .alert_trig_i ( alert_rsp_i.alerts_trig[ast_pkg::Ot0Sel] ), + .alert_ack_i ( alert_rsp_i.alerts_ack[ast_pkg::Ot0Sel] ), + .alert_req_o ( alert_req_o.alerts[ast_pkg::Ot0Sel] ) +); // of u_alert_ot0 + +// Other-1 Alert (OT1) +/////////////////////////////////////// +ast_alert u_alert_ot1 ( + .clk_i ( clk_ast_alert_i ), + .rst_ni ( rst_ast_alert_ni ), + .alert_src_i ( ot1_alert_src ), + .alert_trig_i ( alert_rsp_i.alerts_trig[ast_pkg::Ot1Sel] ), + .alert_ack_i ( alert_rsp_i.alerts_ack[ast_pkg::Ot1Sel] ), + .alert_req_o ( alert_req_o.alerts[ast_pkg::Ot1Sel] ) +); // of u_alert_ot1 + +// Other-2 Alert (OT2) +/////////////////////////////////////// +ast_alert u_alert_ot2 ( + .clk_i ( clk_ast_alert_i ), + .rst_ni ( rst_ast_alert_ni ), + .alert_src_i ( ot2_alert_src ), + .alert_trig_i ( alert_rsp_i.alerts_trig[Ot2Sel] ), + .alert_ack_i ( alert_rsp_i.alerts_ack[Ot2Sel] ), + .alert_req_o ( alert_req_o.alerts[Ot2Sel] ) +); // of u_alert_ot2 + +// Other-3 Alert (OT3) +/////////////////////////////////////// +ast_alert u_alert_ot3 ( + .clk_i ( clk_ast_alert_i ), + .rst_ni ( rst_ast_alert_ni ), + .alert_src_i ( ot3_alert_src ), + .alert_trig_i ( alert_rsp_i.alerts_trig[Ot3Sel] ), + .alert_ack_i ( alert_rsp_i.alerts_ack[Ot3Sel] ), + .alert_req_o ( alert_req_o.alerts[Ot3Sel] ) +); // of u_alert_ot3 + +// Other-4 Alert (OT4) +/////////////////////////////////////// +ast_alert u_alert_ot4 ( + .clk_i ( clk_ast_alert_i ), + .rst_ni ( rst_ast_alert_ni ), + .alert_src_i ( ot4_alert_src ), + .alert_trig_i ( alert_rsp_i.alerts_trig[ast_pkg::Ot4Sel] ), + .alert_ack_i ( alert_rsp_i.alerts_ack[ast_pkg::Ot4Sel] ), + .alert_req_o ( alert_req_o.alerts[ast_pkg::Ot4Sel] ) +); // of u_alert_ot4 + +// Other-5 Alert (OT5) +/////////////////////////////////////// +ast_alert u_alert_ot5 ( + .clk_i ( clk_ast_alert_i ), + .rst_ni ( rst_ast_alert_ni ), + .alert_src_i ( ot5_alert_src ), + .alert_trig_i ( alert_rsp_i.alerts_trig[ast_pkg::Ot5Sel] ), + .alert_ack_i ( alert_rsp_i.alerts_ack[ast_pkg::Ot5Sel] ), + .alert_req_o ( alert_req_o.alerts[ast_pkg::Ot5Sel] ) +); // of u_alert_ot5 + +// Alerts Open-Source Selection +//////////////////////////////////////// +assign as_alert_src = '{p: 1'b0, n: 1'b1}; +assign cgc_alert_src = '{p: 1'b0, n: 1'b1}; +assign gd_alert_src = '{p: 1'b0, n: 1'b1}; +assign ts_alert_hi_src = '{p: 1'b0, n: 1'b1}; +assign ts_alert_lo_src = '{p: 1'b0, n: 1'b1}; +assign ot1_alert_src = '{p: 1'b0, n: 1'b1}; +assign ot2_alert_src = '{p: 1'b0, n: 1'b1}; +assign ot3_alert_src = '{p: 1'b0, n: 1'b1}; +assign ot4_alert_src = '{p: 1'b0, n: 1'b1}; +assign ot5_alert_src = '{p: 1'b0, n: 1'b1}; + + +/////////////////////////////////////// +// AST Registers (Always ON) +/////////////////////////////////////// +ast_reg_pkg::ast_reg2hw_t reg2hw; // Write (To HW) +ast_reg_pkg::ast_hw2reg_t hw2reg; // Read (From HW) +logic intg_err; + +ast_reg_top u_reg ( + .clk_i ( clk_ast_tlul_i ), + .rst_ni ( rst_ast_tlul_ni ), + .tl_i ( tl_i ), + .tl_o ( tl_o ), + .reg2hw ( reg2hw ), + .hw2reg ( hw2reg ), + .intg_err_o ( intg_err ) +); + + +/////////////////////////////////////// +// REGAL Register +/////////////////////////////////////// +logic regal_rst_n; +assign regal_rst_n = rst_ast_tlul_ni; + +logic regal_we; +logic [32-1:0] regal, regal_di; + +assign regal_we = reg2hw.regal.qe; +assign regal_di = reg2hw.regal.q; +assign hw2reg.regal.d = regal; + +// REGAL & AST init done indication +always_ff @( posedge clk_ast_tlul_i, negedge regal_rst_n ) begin + if ( !regal_rst_n ) begin + regal <= ast_reg_pkg::AST_REGAL_RESVAL; + ast_init_done_o <= prim_mubi_pkg::MuBi4False; + end else if ( regal_we ) begin + regal <= regal_di; + ast_init_done_o <= prim_mubi_pkg::MuBi4True; + end +end + +always_ff @( posedge clk_ast_tlul_i, negedge rst_ast_tlul_ni ) begin + if ( !rst_ast_tlul_ni ) begin + sys_io_osc_cal <= 1'b0; + end else if ( regal_we ) begin + sys_io_osc_cal <= 1'b1; + end +end + +always_ff @( posedge clk_ast_tlul_i, negedge vcaon_pok_por ) begin + if ( !vcaon_pok_por ) begin + usb_osc_cal <= 1'b0; + end else if ( regal_we ) begin + usb_osc_cal <= 1'b1; + end +end + +always_ff @( posedge clk_ast_tlul_i, negedge vcaon_pok ) begin + if ( !vcaon_pok ) begin + aon_osc_cal <= 1'b0; + end else if ( regal_we ) begin + aon_osc_cal <= 1'b1; + end +end + +// TLUL Integrity Error +assign ot0_alert_src = '{p: intg_err, n: !intg_err}; + +// USB PU-P and PU-N value selection +assign usb_io_pu_cal_o = UsbCalibWidth'(1 << (UsbCalibWidth[5-1:0]/2)); + + +/////////////////////////////////////// +// DFT (Main | Always ON) +/////////////////////////////////////// +ast_dft u_ast_dft ( + .obs_ctrl_o ( obs_ctrl_o ), + .ast2padmux_o ( ast2padmux_o[Ast2PadOutWidth-1:0] ), + .dpram_rmf_o ( dpram_rmf_o ), + .dpram_rml_o ( dpram_rml_o ), + .spram_rm_o ( spram_rm_o ), + .sprgf_rm_o ( sprgf_rm_o ), + .sprom_rm_o ( sprom_rm_o ) +); + + +//////////////////////////////////////// +// DFT Misc Logic +//////////////////////////////////////// +`ifdef ANALOGSIM +assign ast2pad_t0_ao = 0.0; +assign ast2pad_t1_ao = 0.1; +`else +assign ast2pad_t0_ao = 1'bz; +assign ast2pad_t1_ao = 1'bz; +`endif + + +//////////////// +// Assertions // +//////////////// + +// Clocks +`ASSERT_KNOWN(ClkSrcAonKnownO_A, clk_src_aon_o, 1, ast_pwst_o.aon_pok) +`ASSERT_KNOWN(ClkSrcAonValKnownO_A, clk_src_aon_val_o, clk_src_aon_o, rst_aon_clk_n) +`ASSERT_KNOWN(ClkSrcIoKnownO_A, clk_src_io_o, 1, ast_pwst_o.main_pok) +`ASSERT_KNOWN(ClkSrcIoValKnownO_A, clk_src_io_val_o, clk_src_io_o, rst_io_clk_n) +`ASSERT_KNOWN(ClkSrcIo48mKnownO_A, clk_src_io_48m_o, clk_src_io_o, rst_io_clk_n) +`ASSERT_KNOWN(ClkSrcSysKnownO_A, clk_src_sys_o, 1, ast_pwst_o.main_pok) +`ASSERT_KNOWN(ClkSrcSysValKnownO_A, clk_src_sys_val_o, clk_src_sys_o, rst_sys_clk_n) +`ASSERT_KNOWN(ClkSrcUsbKnownO_A, clk_src_usb_o, 1, ast_pwst_o.main_pok) +`ASSERT_KNOWN(ClkSrcUsbValKnownO_A, clk_src_usb_val_o, clk_src_usb_o, rst_usb_clk_n) +// +`ASSERT_KNOWN(UsbIoPuCalKnownO_A, usb_io_pu_cal_o, clk_ast_tlul_i, ast_pwst_o.aon_pok) +`ASSERT_KNOWN(LcClkBypAckEnKnownO_A, io_clk_byp_ack_o, clk_ast_tlul_i, rst_ast_tlul_ni) +`ASSERT_KNOWN(AllClkBypAckEnKnownO_A, all_clk_byp_ack_o, clk_ast_tlul_i, rst_ast_tlul_ni) +// ADC +`ASSERT_KNOWN(AdcDKnownO_A, adc_d_o, clk_ast_adc_i, rst_ast_adc_ni) +`ASSERT_KNOWN(AdcDValKnownO_A, adc_d_val_o, clk_ast_adc_i, rst_ast_adc_ni) +// RNG +`ASSERT_KNOWN(RngBKnownO_A, rng_b_o, clk_ast_rng_i, rst_ast_rng_ni) +`ASSERT_KNOWN(RngValKnownO_A, rng_val_o, clk_ast_rng_i, rst_ast_rng_ni) +// TLUL +`ASSERT_KNOWN(TlDValidKnownO_A, tl_o.d_valid, clk_ast_tlul_i, rst_ast_tlul_ni) +`ASSERT_KNOWN(TlAReadyKnownO_A, tl_o.a_ready, clk_ast_tlul_i, rst_ast_tlul_ni) +// +`ASSERT_KNOWN(InitDoneKnownO_A, ast_init_done_o, clk_ast_tlul_i, rst_ast_tlul_ni) +// POs +`ASSERT_KNOWN(VcaonPokKnownO_A, ast_pwst_o.aon_pok, clk_src_aon_o, por_ni) +`ASSERT_KNOWN(VcmainPokKnownO_A, ast_pwst_o.main_pok, clk_src_aon_o, por_ni) +`ASSERT_KNOWN(VioaPokKnownO_A, ast_pwst_o.io_pok[0], clk_src_aon_o, por_ni) +`ASSERT_KNOWN(ViobPokKnownO_A, ast_pwst_o.io_pok[1], clk_src_aon_o, por_ni) +`ASSERT_KNOWN(VcaonPokHKnownO_A, ast_pwst_h_o.aon_pok, clk_src_aon_o, por_ni) +`ASSERT_KNOWN(VcmainPokHKnownO_A, ast_pwst_h_o.main_pok, clk_src_aon_o, por_ni) +`ASSERT_KNOWN(VioaPokHKnownO_A, ast_pwst_h_o.io_pok[0], clk_src_aon_o, por_ni) +`ASSERT_KNOWN(ViobPokHKnownO_A, ast_pwst_h_o.io_pok[1], clk_src_aon_o, por_ni) +// FLASH/OTP +`ASSERT_KNOWN(FlashPowerDownKnownO_A, flash_power_down_h_o, 1, ast_pwst_o.main_pok) +`ASSERT_KNOWN(FlashPowerReadyKnownO_A, flash_power_ready_h_o, 1, ast_pwst_o.main_pok) +`ASSERT_KNOWN(OtpPowerSeqKnownO_A, otp_power_seq_h_o, 1, ast_pwst_o.main_pok) +// +// ES +`ASSERT_KNOWN(EntropyReeqKnownO_A, entropy_req_o, clk_ast_es_i,rst_ast_es_ni) +// Alerts +`ASSERT_KNOWN(AlertReqKnownO_A, alert_req_o, clk_ast_alert_i, rst_ast_alert_ni) +// DPRAM/SPRAM +`ASSERT_KNOWN(DpramRmfKnownO_A, dpram_rmf_o, clk_ast_tlul_i, ast_pwst_o.aon_pok) +`ASSERT_KNOWN(DpramRmlKnownO_A, dpram_rml_o, clk_ast_tlul_i, ast_pwst_o.aon_pok) +`ASSERT_KNOWN(SpramRmKnownO_A, spram_rm_o, clk_ast_tlul_i, ast_pwst_o.aon_pok) +`ASSERT_KNOWN(SprgfRmKnownO_A, sprgf_rm_o, clk_ast_tlul_i, ast_pwst_o.aon_pok) +`ASSERT_KNOWN(SpromRmKnownO_A, sprom_rm_o, clk_ast_tlul_i, ast_pwst_o.aon_pok) +// DFT +`ASSERT_KNOWN(Ast2PadmuxKnownO_A, ast2padmux_o, clk_ast_tlul_i, ast_pwst_o.aon_pok) +// SCAN +`ASSERT_KNOWN(DftScanMdKnownO_A, dft_scan_md_o, clk_ast_tlul_i, ast_pwst_o.aon_pok) +`ASSERT_KNOWN(ScanShiftEnKnownO_A, scan_shift_en_o, clk_ast_tlul_i, ast_pwst_o.aon_pok) +`ASSERT_KNOWN(ScanResetKnownO_A, scan_reset_no, clk_ast_tlul_i, ast_pwst_o.aon_pok) +`ASSERT_KNOWN(FlashBistEnKnownO_A, flash_bist_en_o, clk_ast_tlul_i, ast_pwst_o.aon_pok) + +// Alert assertions for reg_we onehot check +`ASSERT_PRIM_REG_WE_ONEHOT_ERROR_TRIGGER_ERR(RegWeOnehot_A, + u_reg, alert_req_o.alerts[ast_pkg::Ot0Sel].p, , , clk_ast_alert_i, rst_ast_alert_ni) + + +///////////////////// +// Unused Signals // +///////////////////// +logic unused_sigs; + +assign unused_sigs = ^{ clk_ast_usb_i, + rst_ast_usb_ni, + sns_spi_ext_clk_i, + sns_clks_i, + sns_rsts_i, + intg_err, + shift_en, + main_env_iso_en_i, + rst_vcmpp_aon_n, + padmux2ast_i[Pad2AstInWidth-1:0], + dft_strap_test_i.valid, + dft_strap_test_i.straps[1:0], + lc_dft_en_i[3:0], + fla_obs_i[8-1:0], + otp_obs_i[8-1:0], + otm_obs_i[8-1:0], + usb_obs_i, + reg2hw.rega0, + reg2hw.rega1, + reg2hw.rega2, + reg2hw.rega3, + reg2hw.rega4, + reg2hw.rega5, + reg2hw.rega6, + reg2hw.rega7, + reg2hw.rega8, + reg2hw.rega9, + reg2hw.rega10, + reg2hw.rega11, + reg2hw.rega12, + reg2hw.rega13, + reg2hw.rega14, + reg2hw.rega15, + reg2hw.rega16, + reg2hw.rega17, + reg2hw.rega18, + reg2hw.rega19, + reg2hw.rega20, + reg2hw.rega21, + reg2hw.rega22, + reg2hw.rega23, + reg2hw.rega24, + reg2hw.rega25, + reg2hw.rega26, + reg2hw.rega27, + reg2hw.rega28, + reg2hw.rega29, + reg2hw.rega30, + reg2hw.rega31, + reg2hw.rega32, + reg2hw.rega33, + reg2hw.rega34, + reg2hw.rega35, + reg2hw.rega36, + reg2hw.rega37, + reg2hw.regb // [0:3] + }; + +endmodule : ast diff --git a/src/ast/rtl/ast_alert.sv b/src/ast/rtl/ast_alert.sv new file mode 100644 index 000000000..d394139d3 --- /dev/null +++ b/src/ast/rtl/ast_alert.sv @@ -0,0 +1,77 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// -------- W A R N I N G: A U T O - G E N E R A T E D C O D E !! -------- // +// PLEASE DO NOT HAND-EDIT THIS FILE. IT HAS BEEN AUTO-GENERATED. +// +//############################################################################ +// *Name: ast_alert +// *Module Description: AST Alert +//############################################################################ + +module ast_alert ( + input clk_i, + input rst_ni, + input ast_pkg::ast_dif_t alert_src_i, + input ast_pkg::ast_dif_t alert_ack_i, + input ast_pkg::ast_dif_t alert_trig_i, + output ast_pkg::ast_dif_t alert_req_o +); + +// Unpack inputs +logic p_alert_src, n_alert_src; +assign p_alert_src = alert_src_i.p; +assign n_alert_src = alert_src_i.n; + +logic p_alert_ack, n_alert_ack; +assign p_alert_ack = alert_ack_i.p; +assign n_alert_ack = alert_ack_i.n; + +logic p_alert_trig, n_alert_trig; +assign p_alert_trig = alert_trig_i.p; +assign n_alert_trig = alert_trig_i.n; + +// Pack outputs +logic p_alert_req, n_alert_req; + +assign alert_req_o.p = p_alert_req; +assign alert_req_o.n = n_alert_req; + +// P Alert +logic p_alert, set_p_alert, clr_p_alert; + +assign set_p_alert = p_alert_src || p_alert_trig; +assign clr_p_alert = !set_p_alert && p_alert_ack; + +always_ff @( posedge clk_i, negedge rst_ni ) begin + if ( !rst_ni ) begin + p_alert <= 1'b0; + end else if ( set_p_alert ) begin + p_alert <= 1'b1; + end else if ( clr_p_alert ) begin + p_alert <= 1'b0; + end +end + +assign p_alert_req = p_alert; + +// N Alert +logic n_alert, set_n_alert, clr_n_alert; + +assign set_n_alert = !(n_alert_src && n_alert_trig); +assign clr_n_alert = !(set_n_alert || n_alert_ack); + +always_ff @( posedge clk_i, negedge rst_ni ) begin + if ( !rst_ni ) begin + n_alert <= 1'b1; + end else if ( set_n_alert ) begin + n_alert <= 1'b0; + end else if ( clr_n_alert ) begin + n_alert <= 1'b1; + end +end + +assign n_alert_req = n_alert; + +endmodule : ast_alert diff --git a/src/ast/rtl/ast_bhv_pkg.sv b/src/ast/rtl/ast_bhv_pkg.sv new file mode 100644 index 000000000..d87f9f89a --- /dev/null +++ b/src/ast/rtl/ast_bhv_pkg.sv @@ -0,0 +1,50 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// -------- W A R N I N G: A U T O - G E N E R A T E D C O D E !! -------- // +// PLEASE DO NOT HAND-EDIT THIS FILE. IT HAS BEEN AUTO-GENERATED. +// +//############################################################################ +// *Name: ast_bhv_pkg +// *Module Description: AST Behavioral Package +//############################################################################ +`ifdef __AST_BHV_PKG_SV +`else +`define __AST_BHV_PKG_SV + +package ast_bhv_pkg; + + ///////////////////////////////// + // Delay Parameters from Spec + ///////////////////////////////// +`ifndef SYNTHESIS + // POKs + parameter time VCC_POK_RDLY = 3us; + parameter time VCC_POK_FDLY = 500ns; + parameter time VCAON_POK_RDLY = 3us; + parameter time VCAON_POK_FDLY = 500ns; + parameter time VCMAIN_POK_RDLY = 3us; + parameter time VCMAIN_POK_FDLY = 500ns; + parameter time VIO_POK_RDLY = 3us; + parameter time VIO_POK_FDLY = 500ns; + // Main Regulator + parameter time MPVCC_RDLY = 5us; + parameter time MPVCC_FDLY = 100ns; + parameter time MPPD_RDLY = 50us; + parameter time MPPD_FDLY = 1us; + // Clocks + parameter time SYS_EN_RDLY = 5us; + parameter time USB_EN_RDLY = 5us; + // Reduced for simulation from 50ms + parameter time USB_VAL_RDLY = 80ns; // 50ms + parameter time USB_VAL_FDLY = 80ns; + parameter time IO_EN_RDLY = 5us; + parameter time AON_EN_RDLY = 5us; + parameter time RNG_EN_RDLY = 5us; +`endif // of SYNTHESIS + // ADC + parameter int unsigned AdcCnvtClks = 19; + +endpackage // of ast_bhv_pkg +`endif // of __AST_BHV_PKG_SV diff --git a/src/ast/rtl/ast_clks_byp.sv b/src/ast/rtl/ast_clks_byp.sv new file mode 100644 index 000000000..f3f8ec201 --- /dev/null +++ b/src/ast/rtl/ast_clks_byp.sv @@ -0,0 +1,811 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// -------- W A R N I N G: A U T O - G E N E R A T E D C O D E !! -------- // +// PLEASE DO NOT HAND-EDIT THIS FILE. IT HAS BEEN AUTO-GENERATED. +// +//############################################################################ +// *Name: ast_clks_byp +// *Module Description: AST Clocks Bypass +//############################################################################ + +`include "prim_assert.sv" + +module ast_clks_byp ( + input vcaon_pok_i, // VCAON POK + input vcaon_pok_por_i, // VCAON POK POR + input deep_sleep_i, // Deep Sleep (main regulator & switch are off) + input clk_src_sys_en_i, // SYS Source Clock Enable + input clk_osc_sys_i, // SYS Oscillator Clock + input clk_osc_sys_val_i, // SYS Oscillator Clock Valid + input clk_src_io_en_i, // IO Source Clock Enable + input clk_osc_io_i, // IO Oscillator Clock + input clk_osc_io_val_i, // IO Oscillator Clock Valid + input clk_src_usb_en_i, // USB Source Clock Enable + input clk_osc_usb_i, // USB Oscillator Clock + input clk_osc_usb_val_i, // USB Oscillator Clock Valid + input clk_osc_aon_i, // AON Oscillator Clock + input clk_osc_aon_val_i, // AON Oscillator Clock Valid + input clk_ast_ext_i, // External Clock +`ifdef AST_BYPASS_CLK + input clk_ext_sys_i, + input clk_ext_io_i, + input clk_ext_usb_i, + input clk_ext_aon_i, +`endif // of AST_BYPASS_CLK + input prim_mubi_pkg::mubi4_t io_clk_byp_req_i, // External IO clock mux for OTP bootstrap + input prim_mubi_pkg::mubi4_t all_clk_byp_req_i, // External all clock mux override + input prim_mubi_pkg::mubi4_t ext_freq_is_96m_i, // External Clock Frequecy is 96MHz (else 48MHz) + output prim_mubi_pkg::mubi4_t io_clk_byp_ack_o, // Switch IO clock to External clock + output prim_mubi_pkg::mubi4_t all_clk_byp_ack_o, // Switch all clocks to External clock + output logic clk_src_sys_o, // SYS Source Clock + output logic clk_src_sys_val_o, // SYS Source Clock Valid + output logic clk_src_io_o, // IO Source Clock + output logic clk_src_io_val_o, // IO Source Clock Valid + output prim_mubi_pkg::mubi4_t clk_src_io_48m_o, // IO Source Clock is 48Mhz + output logic clk_src_usb_o, // USB Source Clock + output logic clk_src_usb_val_o, // USB Source Clock Valid + output logic clk_src_aon_o, // AON Source Clock + output logic clk_src_aon_val_o // AON Source Clock Valid +); + +logic scan_mode_i, scan_reset_ni; + +assign scan_mode_i = 1'b0; +assign scan_reset_ni = 1'b1; + +//////////////////////////////////////// +// Local AON clock buffer +//////////////////////////////////////// +logic clk_aon, rst_aon_n; + +prim_clock_buf #( + .NoFpgaBuf ( 1'b1 ) +) u_clk_aon_buf ( + .clk_i ( clk_src_aon_o ), + .clk_o ( clk_aon ) +); + +logic vcaon_pok; // For Spyglass waiver!!! + +assign vcaon_pok = vcaon_pok_i; +assign rst_aon_n = scan_mode_i ? scan_reset_ni : vcaon_pok; + + +//////////////////////////////////////// +// External Clocks Generation +//////////////////////////////////////// +// Enable External Clock for SW Bypass +logic rst_sw_clk_byp_en, sw_all_clk_byp, sw_io_clk_byp; + +always_ff @( posedge clk_aon, negedge rst_aon_n ) begin + if ( !rst_aon_n ) begin + rst_sw_clk_byp_en <= 1'b0; + end else if ( sw_all_clk_byp || sw_io_clk_byp ) begin + rst_sw_clk_byp_en <= 1'b1; + end +end + +logic rst_sw_ckbpe_n, clk_ast_ext_scn, da_rst_sw_ckbpe_n, sw_clk_byp_en; + +assign rst_sw_ckbpe_n = scan_mode_i ? scan_reset_ni : rst_sw_clk_byp_en; +`ifndef AST_BYPASS_CLK +assign clk_ast_ext_scn = scan_mode_i ? clk_osc_sys_i : clk_ast_ext_i; +`else // of AST_BYPASS_CLK +assign clk_ast_ext_scn = scan_mode_i ? clk_osc_sys_i : clk_ext_sys_i; +`endif // of AST_BYPASS_CLK + +// De-Assert Sync +prim_flop_2sync #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_no_scan_rst_sw_ckbpe_dasrt ( + .clk_i ( clk_ast_ext_scn ), + .rst_ni ( rst_sw_ckbpe_n ), + .d_i ( 1'b1 ), + .q_o ( da_rst_sw_ckbpe_n ) +); + +// De-assert with external clock input +always_ff @( negedge clk_ast_ext_scn, negedge da_rst_sw_ckbpe_n ) begin + if ( !da_rst_sw_ckbpe_n ) begin + sw_clk_byp_en <= 1'b0; + end else begin + sw_clk_byp_en <= 1'b1; + end +end + +logic clk_ext_en, clk_ext_scn; + +assign clk_ext_en = sw_clk_byp_en; +`ifdef AST_BYPASS_CLK +logic clk_ast_ext; + +prim_clock_gating #( + .NoFpgaGate(1'b1) +) u_clk_ast_ext_gating ( + .clk_i( clk_ext_sys_i ), + .en_i( clk_ext_en ), + .test_en_i( 1'b0 ), + .clk_o( clk_ast_ext ) +); + +assign clk_ext_scn = scan_mode_i ? clk_osc_sys_i : clk_ast_ext; +`else +//we can't use prim_clock_gating here for the following reason: +//prim_clock_gating default behavior at wakeup: clk_i=1'bx, en_i=don't care --> clk_o=1'bx +//we want to mask that 1'bx as some tests doesn't use clk_ast_ext_i +assign clk_ext_scn = scan_mode_i ? clk_osc_sys_i : (clk_ast_ext_i && clk_ext_en); +`endif + +// Local EXT clock buffer +//////////////////////////////////////// +logic clk_ext; + +prim_clock_buf #( + .NoFpgaBuf ( 1'b1 ) +) u_clk_ext_buf ( + .clk_i ( clk_ext_scn ), + .clk_o ( clk_ext ) +); + +logic rst_aon_n_exda, rst_aon_exda_n; + +prim_flop_2sync #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_rst_aon_n_exda_sync ( + .clk_i ( clk_ext ), + .rst_ni ( rst_aon_n ), + .d_i ( 1'b1 ), + .q_o ( rst_aon_n_exda ) +); + +assign rst_aon_exda_n = scan_mode_i ? scan_reset_ni : rst_aon_n_exda; + +// External USB & AON clocks genaration +//////////////////////////////////////// +`ifndef AST_BYPASS_CLK +logic clk_src_ext_usb, ext_freq_is_96m, ext_freq_is_96m_sync; + +prim_flop_2sync #( + .Width ( 1 ), + // Assume external clock is 96Hhz on reset + .ResetValue ( 1'b1 ) +) u_no_scan_ext_freq_is_96m_sync ( + .clk_i ( clk_ext ), + .rst_ni ( rst_aon_exda_n ), + .d_i ( ext_freq_is_96m ), + .q_o ( ext_freq_is_96m_sync ) +); + +prim_clock_div #( + .Divisor( 2 ) +) u_no_scan_clk_ext_d1ord2 ( + .clk_i ( clk_ext ), + .rst_ni ( rst_aon_exda_n ), + .step_down_req_i( !ext_freq_is_96m_sync ), + .step_down_ack_o ( ), + .test_en_i ( scan_mode_i ), + .clk_o ( clk_src_ext_usb ) +); +`else // of AST_BYPASS_CLK +logic clk_src_ext_usb, ext_freq_is_96m; +assign clk_src_ext_usb = clk_ext_usb_i; +`endif // of AST_BYPASS_CLK + +logic clk_ext_aon, clk_ext_aon_val; + +assign clk_ext_aon_val = 1'b1; // Always ON clock + +`ifndef AST_BYPASS_CLK +prim_clock_div #( + .Divisor( 240 ) +) u_no_scan_clk_usb_div240_div ( + .clk_i ( clk_src_ext_usb ), + .rst_ni ( rst_aon_exda_n ), + .step_down_req_i( 1'b0 ), + .step_down_ack_o ( ), + .test_en_i ( scan_mode_i ), + .clk_o ( clk_ext_aon ) +); +`else // of AST_BYPASS_CLK +assign clk_ext_aon = clk_ext_aon_i; +`endif // of AST_BYPASS_CLK + + +//////////////////////////////////////// +// Deep-Sleep/Enables Gators +//////////////////////////////////////// + +// Deep-Sleep Sync to External clcok +//////////////////////////////////////// +logic deep_sleep, deep_sleep_n; + +prim_flop_2sync #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_deep_sleep_sync ( + .clk_i ( clk_ext ), + .rst_ni ( rst_aon_exda_n ), + .d_i ( deep_sleep_i ), + .q_o ( deep_sleep ) +); + +assign deep_sleep_n = !deep_sleep; + +// SYS External Clock Enable +//////////////////////////////////////// +logic clk_ext_sys, clk_ext_sys_en, clk_ext_sys_val; +logic clk_src_sys_en; + +prim_flop_2sync #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_no_scan_clk_src_sys_en_sync ( + .clk_i ( clk_ext ), + .rst_ni ( rst_aon_exda_n ), + .d_i ( clk_src_sys_en_i ), + .q_o ( clk_src_sys_en ) +); + +assign clk_ext_sys_en = deep_sleep_n && clk_src_sys_en; +assign clk_ext_sys_val = clk_ext_sys_en; + +prim_clock_gating #( + .NoFpgaGate ( 1'b1) +) u_clk_ext_sys_ckgt ( + .clk_i ( clk_ext ), + .en_i ( clk_ext_sys_en ), + .test_en_i ( scan_mode_i ), + .clk_o ( clk_ext_sys ) +); + +// IO External Clock Enable +//////////////////////////////////////// +logic clk_ext_io, clk_ext_io_en, clk_ext_io_val; +logic clk_src_io_en; + +prim_flop_2sync #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_no_scan_clk_src_io_en_sync ( + .clk_i ( clk_ext ), + .rst_ni ( rst_aon_exda_n ), + .d_i ( clk_src_io_en_i ), + .q_o ( clk_src_io_en ) +); + +assign clk_ext_io_en = deep_sleep_n && clk_src_io_en; +assign clk_ext_io_val = clk_ext_io_en; + +prim_clock_gating #( + .NoFpgaGate ( 1'b1) +) u_clk_ext_io_ckgt ( +`ifndef AST_BYPASS_CLK + .clk_i ( clk_ext ), +`else // of AST_BYPASS_CLK + .clk_i ( clk_ext_io_i ), +`endif // of AST_BYPASS_CLK + .en_i ( clk_ext_io_en ), + .test_en_i ( scan_mode_i ), + .clk_o ( clk_ext_io ) +); + +// USB External Clock Enable +//////////////////////////////////////// +logic clk_ext_usb, clk_ext_usb_en, clk_ext_usb_val; +logic clk_src_usb_en; +logic clk_src_ext_usb_n; + +assign clk_src_ext_usb_n = ~clk_src_ext_usb; + +prim_flop_2sync #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_no_scan_clk_src_usb_en_sync ( + .clk_i ( clk_src_ext_usb_n ), + .rst_ni ( rst_aon_exda_n ), + .d_i ( clk_src_usb_en_i ), + .q_o ( clk_src_usb_en ) +); + +assign clk_ext_usb_en = deep_sleep_n && clk_src_usb_en; +assign clk_ext_usb_val = clk_ext_usb_en; + +prim_clock_gating #( + .NoFpgaGate ( 1'b1) +) u_clk_ext_usb_ckgt ( + .clk_i ( clk_src_ext_usb ), + .en_i ( clk_ext_usb_en ), + .test_en_i ( scan_mode_i ), + .clk_o ( clk_ext_usb ) +); + + +//////////////////////////////////////// +// SW Bypass select logic +//////////////////////////////////////// +// Sync to local AON clock +prim_mubi_pkg::mubi4_t ot_io_clk_byp_req, ot_all_clk_byp_req, ot_ext_freq_is_96m; + +prim_mubi4_sync #( + .StabilityCheck ( 1 ), + .ResetValue ( prim_mubi_pkg::MuBi4False ) +) u_io_clk_byp_req ( + .clk_i ( clk_aon ), + .rst_ni ( rst_aon_n ), + .mubi_i ( io_clk_byp_req_i ), + .mubi_o ( {ot_io_clk_byp_req} ) +); + +prim_mubi4_sync #( + .StabilityCheck ( 1 ), + .ResetValue ( prim_mubi_pkg::MuBi4False ) +) u_all_clk_byp_req ( + .clk_i ( clk_aon ), + .rst_ni ( rst_aon_n ), + .mubi_i ( all_clk_byp_req_i ), + .mubi_o ( {ot_all_clk_byp_req} ) +); + +prim_mubi4_sync #( + .StabilityCheck ( 1 ), + .ResetValue ( prim_mubi_pkg::MuBi4False ) +) u_ext_freq_is_96m ( + .clk_i ( clk_aon ), + .rst_ni ( rst_aon_n ), + .mubi_i ( ext_freq_is_96m_i ), + .mubi_o ( {ot_ext_freq_is_96m} ) +); + +// Decode logic +logic ot_all_clk_byp, ot_sys_clk_byp, ot_io_clk_byp, ot_usb_clk_byp, ot_aon_clk_byp; + +prim_mubi4_dec u_all_byp_sel ( .mubi_i ( ot_all_clk_byp_req ), .mubi_dec_o ( ot_all_clk_byp ) ); +prim_mubi4_dec u_sys_byp_sel ( .mubi_i ( ot_all_clk_byp_req ), .mubi_dec_o ( ot_sys_clk_byp ) ); +prim_mubi4_dec u_io_byp_sel ( .mubi_i ( ot_io_clk_byp_req ), .mubi_dec_o ( ot_io_clk_byp ) ); +prim_mubi4_dec u_usb_byp_sel ( .mubi_i ( ot_all_clk_byp_req ), .mubi_dec_o ( ot_usb_clk_byp ) ); +prim_mubi4_dec u_aon_byp_sel ( .mubi_i ( ot_all_clk_byp_req ), .mubi_dec_o ( ot_aon_clk_byp ) ); + +// De-Glitch selects (decode "noise") +logic sw_sys_clk_byp, sw_usb_clk_byp, sw_aon_clk_byp, sw_exfr_is_96m; + +prim_flop #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_sw_all_clk_byp_dgl ( + .clk_i ( clk_aon ), + .rst_ni ( rst_aon_n ), + .d_i ( ot_all_clk_byp ), + .q_o ( sw_all_clk_byp ) +); + +prim_flop #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_sw_sys_clk_byp_dgl ( + .clk_i ( clk_aon ), + .rst_ni ( rst_aon_n ), + .d_i ( ot_sys_clk_byp ), + .q_o ( sw_sys_clk_byp ) +); + +prim_flop #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_sw_io_clk_byp_dgl ( + .clk_i ( clk_aon ), + .rst_ni ( rst_aon_n ), + .d_i ( ot_io_clk_byp ), + .q_o ( sw_io_clk_byp ) +); + +prim_flop #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_sw_usb_clk_byp_dgl ( + .clk_i ( clk_aon ), + .rst_ni ( rst_aon_n ), + .d_i ( ot_usb_clk_byp ), + .q_o ( sw_usb_clk_byp ) +); + +prim_flop #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_sw_aon_clk_byp_dgl ( + .clk_i ( clk_aon ), + .rst_ni ( rst_aon_n ), + .d_i ( ot_aon_clk_byp ), + .q_o ( sw_aon_clk_byp ) +); + +prim_flop #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_sw_exfr_is_96m_dgl ( + .clk_i ( clk_aon ), + .rst_ni ( rst_aon_n ), + .d_i ( prim_mubi_pkg::mubi4_test_true_strict(ot_ext_freq_is_96m) ), + .q_o ( sw_exfr_is_96m ) +); + +logic sys_clk_byp; + +assign sys_clk_byp = sw_sys_clk_byp; + +logic sel_io_clk_byp, io_clk_byp; + +assign sel_io_clk_byp = sw_io_clk_byp || sw_all_clk_byp; + +// De-Glitch IO Clock Bypass Select +//////////////////////////////////////// +prim_flop #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_io_clk_byp_dgl ( + .clk_i ( clk_aon ), + .rst_ni ( rst_aon_n ), + .d_i ( sel_io_clk_byp ), + .q_o ( io_clk_byp ) +); + +logic usb_clk_byp; + +assign usb_clk_byp = sw_usb_clk_byp; + +logic aon_clk_byp; + +assign aon_clk_byp = sw_aon_clk_byp; + +logic extfreq_is_96m; + +assign extfreq_is_96m = sw_exfr_is_96m; + +// Block changes during scan mode +//////////////////////////////////////// +logic sys_clk_byp_sel, io_clk_byp_sel, usb_clk_byp_sel, aon_clk_byp_sel; + +`ifndef AST_BYPASS_CLK +always_latch begin + if ( !scan_mode_i ) begin + sys_clk_byp_sel = sys_clk_byp; + io_clk_byp_sel = io_clk_byp; + usb_clk_byp_sel = usb_clk_byp; + aon_clk_byp_sel = aon_clk_byp; + ext_freq_is_96m = extfreq_is_96m; + end +end +`else // of AST_BYPASS_CLK +assign sys_clk_byp_sel = sys_clk_byp; +assign io_clk_byp_sel = io_clk_byp; +assign usb_clk_byp_sel = usb_clk_byp; +assign aon_clk_byp_sel = aon_clk_byp; +assign ext_freq_is_96m = extfreq_is_96m; +`endif // of AST_BYPASS_CLK + + +//////////////////////////////////////// +// Clocks Bypass Muxes +//////////////////////////////////////// +logic sys_clk_osc_en, io_clk_osc_en, usb_clk_osc_en, aon_clk_osc_en; +logic sys_clk_byp_en, io_clk_byp_en, usb_clk_byp_en, aon_clk_byp_en; +logic rst_clk_osc_n, rst_clk_ext_n, aon_rst_clk_ext_n; + +assign rst_clk_osc_n = vcaon_pok; +assign rst_clk_ext_n = vcaon_pok_por_i; +assign aon_rst_clk_ext_n = vcaon_pok; + +// DV Hooks for IO clocks +logic io_clk_byp_select, io_clk_byp_sel_buf, io_clk_osc_en_buf, io_clk_byp_en_buf; + +assign io_clk_byp_select = io_clk_byp_sel; + +prim_buf u_io_clk_byp_sel ( + .in_i ( io_clk_byp_select ), + .out_o ( io_clk_byp_sel_buf ) +); + +prim_buf u_io_clk_osc_en ( + .in_i ( io_clk_osc_en ), + .out_o ( io_clk_osc_en_buf ) +); + +prim_buf u_io_clk_byp_en ( + .in_i ( io_clk_byp_en ), + .out_o ( io_clk_byp_en_buf ) +); + +logic rst_clk_osc_sys_n, rst_clk_ext_sys_n, rst_clk_osc_io_n, rst_clk_ext_io_n; +logic rst_clk_osc_usb_n, rst_clk_ext_usb_n, rst_clk_osc_aon_n, rst_clk_ext_aon_n; + +prim_buf u_rst_clk_osc_sys ( + .in_i ( rst_clk_osc_n ), + .out_o ( rst_clk_osc_sys_n ) +); + +prim_buf u_rst_clk_ext_sys ( + .in_i ( rst_clk_ext_n ), + .out_o ( rst_clk_ext_sys_n ) +); + +prim_buf u_rst_clk_osc_io ( + .in_i ( rst_clk_osc_n ), + .out_o ( rst_clk_osc_io_n ) +); + +prim_buf u_rst_clk_ext_io ( + .in_i ( rst_clk_ext_n ), + .out_o ( rst_clk_ext_io_n ) +); + +prim_buf u_rst_clk_osc_usb ( + .in_i ( rst_clk_osc_n ), + .out_o ( rst_clk_osc_usb_n ) +); + +prim_buf u_rst_clk_ext_usb ( + .in_i ( rst_clk_ext_n ), + .out_o ( rst_clk_ext_usb_n ) +); + +prim_buf u_rst_clk_osc_aon ( + .in_i ( rst_clk_osc_n ), + .out_o ( rst_clk_osc_aon_n ) +); + +prim_buf u_rst_clk_ext_aon ( + .in_i ( aon_rst_clk_ext_n ), + .out_o ( rst_clk_ext_aon_n ) +); + +// rst_aon_n deasset to io clock +//////////////////////////////////////// +logic rst_aon_n_ioda, rst_aon_ioda_n; + +prim_flop_2sync #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_rst_aon_n_ioda_sync ( + .clk_i ( clk_src_io_o ), + .rst_ni ( rst_aon_n ), + .d_i ( 1'b1 ), + .q_o ( rst_aon_n_ioda ) +); + +assign rst_aon_ioda_n = scan_mode_i ? scan_reset_ni : rst_aon_n_ioda; + +// SYS Clock Bypass Mux +//////////////////////////////////////// +gfr_clk_mux2 u_clk_src_sys_sel ( + .clk_osc_i ( clk_osc_sys_i ), + .clk_osc_val_i ( clk_osc_sys_val_i ), + .rst_clk_osc_ni ( rst_clk_osc_sys_n ), + .clk_ext_i ( clk_ext_sys ), + .clk_ext_val_i ( clk_ext_sys_val ), + .rst_clk_ext_ni ( rst_clk_ext_sys_n ), + .ext_sel_i ( sys_clk_byp_sel ), + .clk_osc_en_o ( sys_clk_osc_en ), + .clk_ext_en_o ( sys_clk_byp_en ), + .clk_val_o ( clk_src_sys_val_o ), + .clk_o ( clk_src_sys_o ) +); + +// IO Clock Bypass Mux +//////////////////////////////////////// +logic clk_src_io, clk_src_io_val; + +gfr_clk_mux2 u_clk_src_io_sel ( + .clk_osc_i ( clk_osc_io_i ), + .clk_osc_val_i ( clk_osc_io_val_i ), + .rst_clk_osc_ni ( rst_clk_osc_io_n ), + .clk_ext_i ( clk_ext_io ), + .clk_ext_val_i ( clk_ext_io_val ), + .rst_clk_ext_ni ( rst_clk_ext_io_n ), + .ext_sel_i ( io_clk_byp_sel ), + .clk_osc_en_o ( io_clk_osc_en ), + .clk_ext_en_o ( io_clk_byp_en ), + .clk_val_o ( clk_src_io_val ), + .clk_o ( clk_src_io ) +); + +`ifndef AST_BYPASS_CLK +assign clk_src_io_val_o = clk_src_io_val; +assign clk_src_io_o = clk_src_io; +`else // of AST_BYPASS_CLK +// For FPGA, clk_ext is always the one frequency, so divide by 2 if downstream +// thinks it should be "48 MHz" instead of "96 MHz". +logic ext_freq_is_96m_io_sync; +logic rst_src_io_n; + +prim_flop_2sync #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_no_scan_rst_src_io_n_sync ( + .clk_i ( clk_src_io ), + .rst_ni ( rst_aon_n ), + .d_i ( 1'b1 ), + .q_o ( rst_src_io_n ) +); + +prim_flop_2sync #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_no_scan_ext_freq_is_96m_io_sync ( + .clk_i ( clk_src_io ), + .rst_ni ( rst_src_io_n ), + .d_i ( ext_freq_is_96m ), + .q_o ( ext_freq_is_96m_io_sync ) +); + +logic clk_src_io_div2_sel; +assign clk_src_io_div2_sel = !ext_freq_is_96m_io_sync & io_clk_byp_sel; + +prim_clock_div #( + .Divisor( 2 ) +) u_no_scan_clk_src_io_d1ord2 ( + .clk_i ( clk_src_io ), + .rst_ni ( rst_src_io_n ), + .step_down_req_i( !clk_src_io_div2_sel ), + .step_down_ack_o ( ), + .test_en_i ( scan_mode_i ), + .clk_o ( clk_src_io_o ) +); + +prim_flop_2sync #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_no_scan_clk_src_io_val_sync ( + .clk_i ( clk_src_io_o ), + .rst_ni ( rst_aon_ioda_n ), + .d_i ( clk_src_io_val ), + .q_o ( clk_src_io_val_o ) +); +`endif // of AST_BYPASS_CLK + +// USB Clock Bypass Mux +//////////////////////////////////////// +gfr_clk_mux2 u_clk_src_usb_sel ( + .clk_osc_i ( clk_osc_usb_i ), + .clk_osc_val_i ( clk_osc_usb_val_i ), + .rst_clk_osc_ni ( rst_clk_osc_usb_n ), + .clk_ext_i ( clk_ext_usb ), + .clk_ext_val_i ( clk_ext_usb_val ), + .rst_clk_ext_ni ( rst_clk_ext_usb_n ), + .ext_sel_i ( usb_clk_byp_sel ), + .clk_osc_en_o ( usb_clk_osc_en ), + .clk_ext_en_o ( usb_clk_byp_en ), + .clk_val_o ( clk_src_usb_val_o ), + .clk_o ( clk_src_usb_o ) +); + +// AON Clock Bypass Mux +//////////////////////////////////////// +gfr_clk_mux2 u_clk_src_aon_sel ( + .clk_osc_i ( clk_osc_aon_i ), + .clk_osc_val_i ( clk_osc_aon_val_i ), + .rst_clk_osc_ni ( rst_clk_osc_aon_n ), + .clk_ext_i ( clk_ext_aon ), + .clk_ext_val_i ( clk_ext_aon_val ), + .rst_clk_ext_ni ( rst_clk_ext_aon_n ), + .ext_sel_i ( aon_clk_byp_sel ), + .clk_osc_en_o ( aon_clk_osc_en ), + .clk_ext_en_o ( aon_clk_byp_en ), + .clk_val_o ( clk_src_aon_val_o ), + .clk_o ( clk_src_aon_o ) +); + +// All Clocks Bypass Acknowledge +//////////////////////////////////////// +logic all_clks_byp_en_src, all_clks_byp_en; + +always_ff @( posedge clk_aon, negedge rst_aon_n ) begin + if ( !rst_aon_n ) begin + all_clks_byp_en_src <= 1'b0; + end else begin + all_clks_byp_en_src <= sw_all_clk_byp && sys_clk_byp_en && io_clk_byp_en && + usb_clk_byp_en && aon_clk_byp_en; + end +end + +prim_flop_2sync #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_all_clks_byp_en_sync ( + .clk_i ( clk_src_io_o ), + .rst_ni ( rst_aon_ioda_n ), + .d_i ( all_clks_byp_en_src ), + .q_o ( all_clks_byp_en ) +); + +prim_mubi4_sender #( + .ResetValue ( prim_mubi_pkg::MuBi4False ) +) u_all_clk_byp_ack ( + .clk_i ( clk_src_io_o ), + .rst_ni ( rst_aon_ioda_n ), + .mubi_i ( prim_mubi_pkg::mubi4_bool_to_mubi(all_clks_byp_en) ), + .mubi_o ( {all_clk_byp_ack_o} ) +); + +// IO Clock Bypass Acknowledge +//////////////////////////////////////// +logic only_io_clk_byp_en_src, only_io_clk_byp_en; + +always_ff @( posedge clk_aon, negedge rst_aon_n ) begin + if ( !rst_aon_n ) begin + only_io_clk_byp_en_src <= 1'b0; + end else begin + only_io_clk_byp_en_src <= sw_io_clk_byp && io_clk_byp_en; + end +end + +prim_flop_2sync #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_only_io_clk_byp_en_sync ( + .clk_i ( clk_src_io_o ), + .rst_ni ( rst_aon_ioda_n ), + .d_i ( only_io_clk_byp_en_src ), + .q_o ( only_io_clk_byp_en ) +); + +prim_mubi4_sender #( + .ResetValue ( prim_mubi_pkg::MuBi4False ) +) u_io_clk_byp_ack ( + .clk_i ( clk_src_io_o ), + .rst_ni ( rst_aon_ioda_n ), + .mubi_i ( prim_mubi_pkg::mubi4_bool_to_mubi(only_io_clk_byp_en) ), + .mubi_o ( {io_clk_byp_ack_o} ) +); + +// IO Clock Source is 48MHz +//////////////////////////////////////// +logic io_clk_byp_is_48m_src, io_clk_byp_is_48m; + +// Oscillator source is always 96MHz. +// External Bypass source is assume to be 96MHz until it is ebabled as 48MHz +always_ff @( posedge clk_aon, negedge rst_aon_n ) begin + if ( !rst_aon_n ) begin + io_clk_byp_is_48m_src <= 1'b0; + end else begin + io_clk_byp_is_48m_src <= io_clk_byp_en && !ext_freq_is_96m; + end +end + +prim_flop_2sync #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_io_clk_byp_is_48m_sync ( + .clk_i ( clk_src_io_o ), + .rst_ni ( rst_aon_ioda_n ), + .d_i ( io_clk_byp_is_48m_src ), + .q_o ( io_clk_byp_is_48m ) +); + +prim_mubi4_sender #( + .ResetValue ( prim_mubi_pkg::MuBi4False ) +) u_clk_src_io_48m_sync ( + .clk_i ( clk_src_io_o ), + .rst_ni ( rst_aon_ioda_n ), + .mubi_i ( prim_mubi_pkg::mubi4_bool_to_mubi(io_clk_byp_is_48m) ), + .mubi_o ( {clk_src_io_48m_o} ) +); + + +///////////////////// +// Unused Signals // +///////////////////// +logic unused_sigs; + +assign unused_sigs = ^{ io_clk_byp_sel_buf, + io_clk_byp_en_buf, + io_clk_osc_en_buf, + sys_clk_osc_en, + io_clk_osc_en, + usb_clk_osc_en, + aon_clk_osc_en + }; + +endmodule : ast_clks_byp diff --git a/src/ast/rtl/ast_dft.sv b/src/ast/rtl/ast_dft.sv new file mode 100644 index 000000000..7d27c38d0 --- /dev/null +++ b/src/ast/rtl/ast_dft.sv @@ -0,0 +1,45 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// -------- W A R N I N G: A U T O - G E N E R A T E D C O D E !! -------- // +// PLEASE DO NOT HAND-EDIT THIS FILE. IT HAS BEEN AUTO-GENERATED. +// +//############################################################################ +// *Name: ast_dft +// *Module Description: AST DFT +//############################################################################ + +`include "prim_assert.sv" + +module ast_dft ( + output ast_pkg::ast_obs_ctrl_t obs_ctrl_o, // Observe Control + output logic [ast_pkg::Ast2PadOutWidth-1:0] ast2padmux_o, // DFT observed outputs + // memories read-write margins + output ast_pkg::dpm_rm_t dpram_rmf_o, // Dual Port RAM Read-write Margin Fast + output ast_pkg::dpm_rm_t dpram_rml_o, // Dual Port RAM Read-write Margin sLow + output ast_pkg::spm_rm_t spram_rm_o, // Single Port RAM Read-write Margin + output ast_pkg::spm_rm_t sprgf_rm_o, // Single Port Reg-File Read-write Margin + output ast_pkg::spm_rm_t sprom_rm_o // Single Port ROM Read-write Margin +); + +// DFT to AST Digital PADs +assign ast2padmux_o = {ast_pkg::Ast2PadOutWidth{1'b0}}; + +assign obs_ctrl_o = '{ + obgsl: 4'h0, + obmsl: ast_pkg::ObsNon, + obmen: prim_mubi_pkg::MuBi4False + }; + + +//////////////////////////////////////// +// Memories Read-write Margins +//////////////////////////////////////// +assign dpram_rmf_o = 10'h000; +assign dpram_rml_o = 10'h000; +assign spram_rm_o = 5'h00; +assign sprgf_rm_o = 5'h00; +assign sprom_rm_o = 5'h00; + +endmodule : ast_dft diff --git a/src/ast/rtl/ast_entropy.sv b/src/ast/rtl/ast_entropy.sv new file mode 100644 index 000000000..0efb828e7 --- /dev/null +++ b/src/ast/rtl/ast_entropy.sv @@ -0,0 +1,125 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// -------- W A R N I N G: A U T O - G E N E R A T E D C O D E !! -------- // +// PLEASE DO NOT HAND-EDIT THIS FILE. IT HAS BEEN AUTO-GENERATED. +// +//############################################################################ +// *Name: ast_entropy +// *Module Description: AST Entropy +//############################################################################ + +module ast_entropy #( + parameter int EntropyRateWidth = 4 +) ( + input edn_pkg::edn_rsp_t entropy_rsp_i, // Entropy Response + input [EntropyRateWidth-1:0] entropy_rate_i, // Entropy Rate + input clk_ast_es_i, // Entropy Clock + input rst_ast_es_ni, // Entropy Reset + input clk_src_sys_i, // System Source Clock + input rst_src_sys_ni, // System Source Reset + input clk_src_sys_val_i, // System Source Clock Valid + input clk_src_sys_jen_i, // System Source Clock Jitter Enable + output edn_pkg::edn_req_t entropy_req_o // Entropy Request +); + +//////////////////////////////////////// +// Entropy Request FSM +//////////////////////////////////////// +typedef enum logic [2-1:0] { + ERQ_REQ0 = 2'd1, // Device-0 Request (source) + ERQ_ACK0 = 2'd3, // Device-0 Acknowledge + ERQ_IDLE = 2'd0 // IDLE/RESET +} erq_sm_e; + +erq_sm_e erq_sm; +logic dev0_wready, dev0_ack; +logic edn_ack, edn_req; +logic [32-1:0] edn_bus; + +// Pack/Un-pack +assign entropy_req_o.edn_req = edn_req; +assign edn_ack = entropy_rsp_i.edn_ack; +assign edn_bus = entropy_rsp_i.edn_bus; + +always_ff @( posedge clk_ast_es_i, negedge rst_ast_es_ni ) begin + if ( !rst_ast_es_ni ) begin + edn_req <= 1'b0; + erq_sm <= ERQ_IDLE; + end else begin + unique case ( erq_sm ) + ERQ_IDLE: begin + if ( dev0_wready ) begin + edn_req <= 1'b1; + erq_sm <= ERQ_REQ0; + end else begin + edn_req <= 1'b0; + erq_sm <= ERQ_IDLE; + end + end + + ERQ_REQ0: begin + if ( edn_ack ) begin + edn_req <= 1'b0; + erq_sm <= ERQ_ACK0; + end else begin + edn_req <= 1'b1; + erq_sm <= ERQ_REQ0; + end + end + + ERQ_ACK0: begin + if ( dev0_wready ) begin + edn_req <= 1'b1; + erq_sm <= ERQ_REQ0; + end else begin + edn_req <= 1'b0; + erq_sm <= ERQ_ACK0; + end + end + + default: begin + edn_req <= 1'b0; + erq_sm <= ERQ_IDLE; + end + endcase + end +end + +assign dev0_ack = edn_ack && ((erq_sm == ERQ_REQ0) || (erq_sm == ERQ_ACK0)); + + +//////////////////////////////////////// +// Device 0 +//////////////////////////////////////// +logic dev0_en, dev0_entropy; + +assign dev0_en = clk_src_sys_val_i && clk_src_sys_jen_i; + +dev_entropy #( + .EntropyRateWidth ( EntropyRateWidth ) +) u_dev0_entropy ( + .clk_i ( clk_ast_es_i ), + .rst_ni ( rst_ast_es_ni ), + .clk_dev_i ( clk_src_sys_i ), + .rst_dev_ni ( rst_src_sys_ni ), + .dev_en_i ( dev0_en ), + .dev_rate_i ( entropy_rate_i[EntropyRateWidth-1:0] ), + .dev_ack_i ( dev0_ack ), + .dev_data_i ( edn_bus[32-1:0] ), + .dev_wready_o ( dev0_wready ), + .dev_data_o ( dev0_entropy ) +); + + + +///////////////////// +// Unused Signals +///////////////////// +logic unused_sigs; +assign unused_sigs = ^{ entropy_rsp_i.edn_fips, + dev0_entropy // Used in ASIC implementation + }; + +endmodule : ast_entropy diff --git a/src/ast/rtl/ast_pkg.sv b/src/ast/rtl/ast_pkg.sv new file mode 100644 index 000000000..178172d83 --- /dev/null +++ b/src/ast/rtl/ast_pkg.sv @@ -0,0 +1,169 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +//############################################################################ +// *Name: ast_pkg +// *Module Description: AST Package +//############################################################################ +`ifdef __AST_PKG_SV +`else +`define __AST_PKG_SV + +`define PAD2AST_WIRES \ +{ manual_in_ast_misc, \ + mio_in_raw[MioPadIoc3], \ + mio_in_raw[MioPadIoc2], \ + mio_in_raw[MioPadIoc1], \ + mio_in_raw[MioPadIob2], \ + mio_in_raw[MioPadIob1], \ + mio_in_raw[MioPadIob0], \ + mio_in_raw[MioPadIoa5], \ + mio_in_raw[MioPadIoa4] } + +package ast_pkg; + +parameter int unsigned NumIoRails = 2; +// Alerts +parameter int unsigned NumAlerts = 11; +parameter int unsigned AsSel = 0; +parameter int unsigned CgSel = 1; +parameter int unsigned GdSel = 2; +parameter int unsigned TsHiSel = 3; +parameter int unsigned TsLoSel = 4; +parameter int unsigned Ot0Sel = 5; +parameter int unsigned Ot1Sel = 6; +parameter int unsigned Ot2Sel = 7; +parameter int unsigned Ot3Sel = 8; +parameter int unsigned Ot4Sel = 9; +parameter int unsigned Ot5Sel = 10; +// +parameter int unsigned Lc2HcTrCyc = 102; // ((99+1)+(3+1))x5 = 520 us +parameter int unsigned Hc2LcTrCyc = 38; // ((35+1)+(3+1))x5 = 200 us +// +parameter int unsigned EntropyStreams = 4; +parameter int unsigned AdcChannels = 2; +parameter int unsigned AdcDataWidth = 10; +parameter int unsigned UsbCalibWidth = 20; +parameter int unsigned Ast2PadOutWidth = 9; +parameter int unsigned Pad2AstInWidth = 9; +// +// AstRegsNum is the number of AST registers programmed during initialization. It includes +// the register that marks the finalization of init, which asserts the ast_init_done_o. +// The offset of this register is represented with the AstLastRegOffset parameter. +parameter int unsigned AstRegsNum = 39; +parameter int unsigned AstLastRegOffset = (AstRegsNum-1)*4; + +// Memories Read-Write Margin Interface +typedef struct packed { + logic marg_en_a; + logic [4-1:0] marg_a; + logic marg_en_b; + logic [4-1:0] marg_b; +} dpm_rm_t; + +typedef struct packed { + logic marg_en; + logic [4-1:0] marg; +} spm_rm_t; + +// ADC Interface +typedef struct packed { + logic [AdcChannels-1:0] channel_sel; + logic pd; +} adc_ast_req_t; + +typedef struct packed { + logic [AdcDataWidth-1:0] data; + logic data_valid; +} adc_ast_rsp_t; + +// Analog Signal + `ifdef ANALOGSIM +typedef real awire_t; + `else +typedef logic awire_t; + `endif + +// Clock & Resets Interface +typedef struct packed { + logic clk_sys; + logic clk_io; + logic clk_usb; + logic clk_aon; +} ast_clks_t; + +typedef struct packed { + logic aon_pok; +} ast_rst_t; + +parameter ast_rst_t AST_RST_DEFAULT = '{ + aon_pok: 1'b1 +}; + +typedef struct packed { + logic [NumIoRails-1:0] io_pok; +} ast_status_t; + +typedef struct packed { + logic aon_pok; + logic vcc_pok; + logic main_pok; + logic [NumIoRails-1:0] io_pok; +} ast_pwst_t; + +// Alerts Interface +typedef struct packed { + logic p; + logic n; +} ast_dif_t; + +typedef struct packed { + ast_dif_t [NumAlerts-1:0] alerts; +} ast_alert_req_t; + +typedef struct packed { + ast_dif_t [NumAlerts-1:0] alerts_ack; + ast_dif_t [NumAlerts-1:0] alerts_trig; +} ast_alert_rsp_t; + +// Ack mode enumerations +typedef enum logic { + ImmAck = 0, + SwAck = 1 +} ast_ack_mode_e; + +// Clocks Oschillator Bypass +typedef struct packed { + logic usb; + logic sys; + logic io; + logic aon; +} clks_osc_byp_t; + +typedef enum logic [4-1:0] { + ObsNon = 4'h0, // No module observed (disable) + ObsAst = 4'h1, // Observe AST + ObsFla = 4'h2, // Observe FLASH + ObsOtp = 4'h3, // Observe OTP + ObsOt0 = 4'h4, // Observe OT0 + ObsOt1 = 4'h5, // Observe OT1 + ObsOt2 = 4'h6, // Observe OT2 + ObsOt3 = 4'h7, // Observe OT3 + ObsRs0 = 4'h8, // RESERVED + ObsRs1 = 4'h9, // RESERVED + ObsRs2 = 4'hA, // RESERVED + ObsRs3 = 4'hB, // RESERVED + ObsRs4 = 4'hC, // RESERVED + ObsRs5 = 4'hD, // RESERVED + ObsRs6 = 4'hE, // RESERVED + ObsRs7 = 4'hF // RESERVED +} ast_omdl_e; + +typedef struct packed { + logic [4-1:0] obgsl; + ast_omdl_e obmsl; + caliptra_prim_mubi_pkg::mubi4_t obmen; +} ast_obs_ctrl_t; + +endpackage // of ast_pkg +`endif // of __AST_PKG_SV diff --git a/src/ast/rtl/ast_pulse_sync.sv b/src/ast/rtl/ast_pulse_sync.sv new file mode 100644 index 000000000..632e1032f --- /dev/null +++ b/src/ast/rtl/ast_pulse_sync.sv @@ -0,0 +1,147 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +//############################################################################ +// *Name: ast_pulse_symc +// *Module Description: AST Pulse Synchronizer +// +// Synchronizes a pulse from source clock domain (clk_src) to destination +// clock domain (clk_dst). The source pulse can have any length of the +// source clock cycle. +// The destination pulse has the length of one destination clock cycle. +// Consecutive pulses need to be spaced appropriately apart from each other +// depending on the clock frequency ratio of the two clock domains. +//############################################################################ + +`include "prim_assert.sv" + +module ast_pulse_sync ( + input scan_mode_i, + // source clock domain + input clk_src_i, + input rst_src_ni, + input src_pulse_i, + output logic src_pulse_en_o, + output logic src_busy_o, + // destination clock domain + input clk_dst_i, + input rst_dst_ni, + output logic dst_pulse_o +); + +// Reset all flops by both resets +//////////////////////////////////////// +logic rst_src_n, rst_dst_da_n; +logic rst_dst_n, rst_src_da_n; + +prim_flop_2sync #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_rst_dst_da ( + .clk_i ( clk_src_i), + .rst_ni ( rst_dst_ni ), + .d_i ( 1'b1 ), + .q_o ( rst_dst_da_n ) +); + +prim_flop_2sync #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_rst_src_da ( + .clk_i ( clk_dst_i), + .rst_ni ( rst_src_ni ), + .d_i ( 1'b1 ), + .q_o ( rst_src_da_n ) +); + +assign rst_src_n = scan_mode_i ? rst_src_ni : rst_src_ni && rst_dst_da_n; +assign rst_dst_n = scan_mode_i ? rst_dst_ni : rst_dst_ni && rst_src_da_n; + + +// Pulse Rising Edge Detect & Block +/////////////////////////////////////// +logic src_pulse_d; + +always_ff @( posedge clk_src_i, negedge rst_src_n ) begin + if ( !rst_src_n ) begin + src_pulse_d <= 1'b0; + end else begin + src_pulse_d <= src_pulse_i; + end +end + +assign src_pulse_en_o = src_pulse_i & !src_pulse_d & !src_busy_o; + + +// Pulse Transformation +/////////////////////////////////////// +logic src_req; + +// Convert src_pulse_en to a level signal +always_ff @( posedge clk_src_i, negedge rst_src_n ) begin + if ( !rst_src_n ) begin + src_req <= 1'b0; + end else begin + src_req <= (src_pulse_en_o ^ src_req); + end +end + + +// SRC_REQ Synchronizer to DST +/////////////////////////////////////// +logic dst_req; + +prim_flop_2sync #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_dst_req ( + .clk_i ( clk_dst_i ), + .rst_ni ( rst_dst_n ), + .d_i ( src_req ), + .q_o ( dst_req ) +); + + +// DST_REQ Synchronizer to SRC for ACK +/////////////////////////////////////// +logic src_ack; + +prim_flop_2sync #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_sync2_ack ( + .clk_i ( clk_src_i ), + .rst_ni ( rst_src_n ), + .d_i ( dst_req ), + .q_o ( src_ack ) +); + +// Source is BUSY when REQ not equel to ACK +assign src_busy_o = (src_req ^ src_ack); + + +// Pulse Reconstruction +/////////////////////////////////////// +logic dst_req_d; + +always_ff @( posedge clk_dst_i, negedge rst_dst_n ) begin + if ( !rst_dst_n ) begin + dst_req_d <= 1'b0; + end else begin + dst_req_d <= dst_req; + end +end + +assign dst_pulse_o = (dst_req ^ dst_req_d); + + +//////////////////// +// Assertions +//////////////////// + +// A new PULSE can only be introduced when source is not BUSY. +`ASSERT(NewPulseWhenSrcBusy, $rose(src_pulse_i) |-> !src_busy_o, clk_src_i, !rst_src_n) + +`ASSERT(DstPulseCheck_A, dst_pulse_o |=> !dst_pulse_o, clk_dst_i, !rst_dst_n) + +endmodule : ast_pulse_sync diff --git a/src/ast/rtl/ast_reg_pkg.sv b/src/ast/rtl/ast_reg_pkg.sv new file mode 100644 index 000000000..e81894e3b --- /dev/null +++ b/src/ast/rtl/ast_reg_pkg.sv @@ -0,0 +1,380 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Register Package auto-generated by `reggen` containing data structure + +package ast_reg_pkg; + + // Param list + parameter int NumRegsB = 5; + parameter int NumUsbBeaconPulses = 8; + + // Address widths within the block + parameter int BlockAw = 10; + + //////////////////////////// + // Typedefs for registers // + //////////////////////////// + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega0_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega1_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega2_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega3_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega4_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega5_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega6_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega7_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega8_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega9_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega10_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega11_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega12_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega13_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega14_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega15_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega16_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega17_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega18_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega19_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega20_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega21_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega22_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega23_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega24_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega25_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega26_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega27_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega28_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega29_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega30_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega31_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega32_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega33_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega34_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega35_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega36_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_rega37_reg_t; + + typedef struct packed { + logic [31:0] q; + logic qe; + } ast_reg2hw_regal_reg_t; + + typedef struct packed { + logic [31:0] q; + } ast_reg2hw_regb_mreg_t; + + typedef struct packed { + logic [31:0] d; + } ast_hw2reg_regal_reg_t; + + // Register -> HW type + typedef struct packed { + ast_reg2hw_rega0_reg_t rega0; // [1408:1377] + ast_reg2hw_rega1_reg_t rega1; // [1376:1345] + ast_reg2hw_rega2_reg_t rega2; // [1344:1313] + ast_reg2hw_rega3_reg_t rega3; // [1312:1281] + ast_reg2hw_rega4_reg_t rega4; // [1280:1249] + ast_reg2hw_rega5_reg_t rega5; // [1248:1217] + ast_reg2hw_rega6_reg_t rega6; // [1216:1185] + ast_reg2hw_rega7_reg_t rega7; // [1184:1153] + ast_reg2hw_rega8_reg_t rega8; // [1152:1121] + ast_reg2hw_rega9_reg_t rega9; // [1120:1089] + ast_reg2hw_rega10_reg_t rega10; // [1088:1057] + ast_reg2hw_rega11_reg_t rega11; // [1056:1025] + ast_reg2hw_rega12_reg_t rega12; // [1024:993] + ast_reg2hw_rega13_reg_t rega13; // [992:961] + ast_reg2hw_rega14_reg_t rega14; // [960:929] + ast_reg2hw_rega15_reg_t rega15; // [928:897] + ast_reg2hw_rega16_reg_t rega16; // [896:865] + ast_reg2hw_rega17_reg_t rega17; // [864:833] + ast_reg2hw_rega18_reg_t rega18; // [832:801] + ast_reg2hw_rega19_reg_t rega19; // [800:769] + ast_reg2hw_rega20_reg_t rega20; // [768:737] + ast_reg2hw_rega21_reg_t rega21; // [736:705] + ast_reg2hw_rega22_reg_t rega22; // [704:673] + ast_reg2hw_rega23_reg_t rega23; // [672:641] + ast_reg2hw_rega24_reg_t rega24; // [640:609] + ast_reg2hw_rega25_reg_t rega25; // [608:577] + ast_reg2hw_rega26_reg_t rega26; // [576:545] + ast_reg2hw_rega27_reg_t rega27; // [544:513] + ast_reg2hw_rega28_reg_t rega28; // [512:481] + ast_reg2hw_rega29_reg_t rega29; // [480:449] + ast_reg2hw_rega30_reg_t rega30; // [448:417] + ast_reg2hw_rega31_reg_t rega31; // [416:385] + ast_reg2hw_rega32_reg_t rega32; // [384:353] + ast_reg2hw_rega33_reg_t rega33; // [352:321] + ast_reg2hw_rega34_reg_t rega34; // [320:289] + ast_reg2hw_rega35_reg_t rega35; // [288:257] + ast_reg2hw_rega36_reg_t rega36; // [256:225] + ast_reg2hw_rega37_reg_t rega37; // [224:193] + ast_reg2hw_regal_reg_t regal; // [192:160] + ast_reg2hw_regb_mreg_t [4:0] regb; // [159:0] + } ast_reg2hw_t; + + // HW -> register type + typedef struct packed { + ast_hw2reg_regal_reg_t regal; // [31:0] + } ast_hw2reg_t; + + // Register offsets + parameter logic [BlockAw-1:0] AST_REGA0_OFFSET = 10'h 0; + parameter logic [BlockAw-1:0] AST_REGA1_OFFSET = 10'h 4; + parameter logic [BlockAw-1:0] AST_REGA2_OFFSET = 10'h 8; + parameter logic [BlockAw-1:0] AST_REGA3_OFFSET = 10'h c; + parameter logic [BlockAw-1:0] AST_REGA4_OFFSET = 10'h 10; + parameter logic [BlockAw-1:0] AST_REGA5_OFFSET = 10'h 14; + parameter logic [BlockAw-1:0] AST_REGA6_OFFSET = 10'h 18; + parameter logic [BlockAw-1:0] AST_REGA7_OFFSET = 10'h 1c; + parameter logic [BlockAw-1:0] AST_REGA8_OFFSET = 10'h 20; + parameter logic [BlockAw-1:0] AST_REGA9_OFFSET = 10'h 24; + parameter logic [BlockAw-1:0] AST_REGA10_OFFSET = 10'h 28; + parameter logic [BlockAw-1:0] AST_REGA11_OFFSET = 10'h 2c; + parameter logic [BlockAw-1:0] AST_REGA12_OFFSET = 10'h 30; + parameter logic [BlockAw-1:0] AST_REGA13_OFFSET = 10'h 34; + parameter logic [BlockAw-1:0] AST_REGA14_OFFSET = 10'h 38; + parameter logic [BlockAw-1:0] AST_REGA15_OFFSET = 10'h 3c; + parameter logic [BlockAw-1:0] AST_REGA16_OFFSET = 10'h 40; + parameter logic [BlockAw-1:0] AST_REGA17_OFFSET = 10'h 44; + parameter logic [BlockAw-1:0] AST_REGA18_OFFSET = 10'h 48; + parameter logic [BlockAw-1:0] AST_REGA19_OFFSET = 10'h 4c; + parameter logic [BlockAw-1:0] AST_REGA20_OFFSET = 10'h 50; + parameter logic [BlockAw-1:0] AST_REGA21_OFFSET = 10'h 54; + parameter logic [BlockAw-1:0] AST_REGA22_OFFSET = 10'h 58; + parameter logic [BlockAw-1:0] AST_REGA23_OFFSET = 10'h 5c; + parameter logic [BlockAw-1:0] AST_REGA24_OFFSET = 10'h 60; + parameter logic [BlockAw-1:0] AST_REGA25_OFFSET = 10'h 64; + parameter logic [BlockAw-1:0] AST_REGA26_OFFSET = 10'h 68; + parameter logic [BlockAw-1:0] AST_REGA27_OFFSET = 10'h 6c; + parameter logic [BlockAw-1:0] AST_REGA28_OFFSET = 10'h 70; + parameter logic [BlockAw-1:0] AST_REGA29_OFFSET = 10'h 74; + parameter logic [BlockAw-1:0] AST_REGA30_OFFSET = 10'h 78; + parameter logic [BlockAw-1:0] AST_REGA31_OFFSET = 10'h 7c; + parameter logic [BlockAw-1:0] AST_REGA32_OFFSET = 10'h 80; + parameter logic [BlockAw-1:0] AST_REGA33_OFFSET = 10'h 84; + parameter logic [BlockAw-1:0] AST_REGA34_OFFSET = 10'h 88; + parameter logic [BlockAw-1:0] AST_REGA35_OFFSET = 10'h 8c; + parameter logic [BlockAw-1:0] AST_REGA36_OFFSET = 10'h 90; + parameter logic [BlockAw-1:0] AST_REGA37_OFFSET = 10'h 94; + parameter logic [BlockAw-1:0] AST_REGAL_OFFSET = 10'h 98; + parameter logic [BlockAw-1:0] AST_REGB_0_OFFSET = 10'h 200; + parameter logic [BlockAw-1:0] AST_REGB_1_OFFSET = 10'h 204; + parameter logic [BlockAw-1:0] AST_REGB_2_OFFSET = 10'h 208; + parameter logic [BlockAw-1:0] AST_REGB_3_OFFSET = 10'h 20c; + parameter logic [BlockAw-1:0] AST_REGB_4_OFFSET = 10'h 210; + + // Reset values for hwext registers and their fields + parameter logic [31:0] AST_REGAL_RESVAL = 32'h 26; + parameter logic [31:0] AST_REGAL_REG32_RESVAL = 32'h 26; + + // Register index + typedef enum int { + AST_REGA0, + AST_REGA1, + AST_REGA2, + AST_REGA3, + AST_REGA4, + AST_REGA5, + AST_REGA6, + AST_REGA7, + AST_REGA8, + AST_REGA9, + AST_REGA10, + AST_REGA11, + AST_REGA12, + AST_REGA13, + AST_REGA14, + AST_REGA15, + AST_REGA16, + AST_REGA17, + AST_REGA18, + AST_REGA19, + AST_REGA20, + AST_REGA21, + AST_REGA22, + AST_REGA23, + AST_REGA24, + AST_REGA25, + AST_REGA26, + AST_REGA27, + AST_REGA28, + AST_REGA29, + AST_REGA30, + AST_REGA31, + AST_REGA32, + AST_REGA33, + AST_REGA34, + AST_REGA35, + AST_REGA36, + AST_REGA37, + AST_REGAL, + AST_REGB_0, + AST_REGB_1, + AST_REGB_2, + AST_REGB_3, + AST_REGB_4 + } ast_id_e; + + // Register width information to check illegal writes + parameter logic [3:0] AST_PERMIT [44] = '{ + 4'b 1111, // index[ 0] AST_REGA0 + 4'b 1111, // index[ 1] AST_REGA1 + 4'b 1111, // index[ 2] AST_REGA2 + 4'b 1111, // index[ 3] AST_REGA3 + 4'b 1111, // index[ 4] AST_REGA4 + 4'b 1111, // index[ 5] AST_REGA5 + 4'b 1111, // index[ 6] AST_REGA6 + 4'b 1111, // index[ 7] AST_REGA7 + 4'b 1111, // index[ 8] AST_REGA8 + 4'b 1111, // index[ 9] AST_REGA9 + 4'b 1111, // index[10] AST_REGA10 + 4'b 1111, // index[11] AST_REGA11 + 4'b 1111, // index[12] AST_REGA12 + 4'b 1111, // index[13] AST_REGA13 + 4'b 1111, // index[14] AST_REGA14 + 4'b 1111, // index[15] AST_REGA15 + 4'b 1111, // index[16] AST_REGA16 + 4'b 1111, // index[17] AST_REGA17 + 4'b 1111, // index[18] AST_REGA18 + 4'b 1111, // index[19] AST_REGA19 + 4'b 1111, // index[20] AST_REGA20 + 4'b 1111, // index[21] AST_REGA21 + 4'b 1111, // index[22] AST_REGA22 + 4'b 1111, // index[23] AST_REGA23 + 4'b 1111, // index[24] AST_REGA24 + 4'b 1111, // index[25] AST_REGA25 + 4'b 1111, // index[26] AST_REGA26 + 4'b 1111, // index[27] AST_REGA27 + 4'b 1111, // index[28] AST_REGA28 + 4'b 1111, // index[29] AST_REGA29 + 4'b 1111, // index[30] AST_REGA30 + 4'b 1111, // index[31] AST_REGA31 + 4'b 1111, // index[32] AST_REGA32 + 4'b 1111, // index[33] AST_REGA33 + 4'b 1111, // index[34] AST_REGA34 + 4'b 1111, // index[35] AST_REGA35 + 4'b 1111, // index[36] AST_REGA36 + 4'b 1111, // index[37] AST_REGA37 + 4'b 1111, // index[38] AST_REGAL + 4'b 1111, // index[39] AST_REGB_0 + 4'b 1111, // index[40] AST_REGB_1 + 4'b 1111, // index[41] AST_REGB_2 + 4'b 1111, // index[42] AST_REGB_3 + 4'b 1111 // index[43] AST_REGB_4 + }; + +endpackage diff --git a/src/ast/rtl/ast_reg_top.sv b/src/ast/rtl/ast_reg_top.sv new file mode 100644 index 000000000..921beb385 --- /dev/null +++ b/src/ast/rtl/ast_reg_top.sv @@ -0,0 +1,1969 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Register Top module auto-generated by `reggen` + +`include "prim_assert.sv" + +module ast_reg_top ( + input clk_i, + input rst_ni, + input tlul_pkg::tl_h2d_t tl_i, + output tlul_pkg::tl_d2h_t tl_o, + // To HW + output ast_reg_pkg::ast_reg2hw_t reg2hw, // Write + input ast_reg_pkg::ast_hw2reg_t hw2reg, // Read + + // Integrity check errors + output logic intg_err_o +); + + import ast_reg_pkg::* ; + + localparam int AW = 10; + localparam int DW = 32; + localparam int DBW = DW/8; // Byte Width + + // register signals + logic reg_we; + logic reg_re; + logic [AW-1:0] reg_addr; + logic [DW-1:0] reg_wdata; + logic [DBW-1:0] reg_be; + logic [DW-1:0] reg_rdata; + logic reg_error; + + logic addrmiss, wr_err; + + logic [DW-1:0] reg_rdata_next; + logic reg_busy; + + tlul_pkg::tl_h2d_t tl_reg_h2d; + tlul_pkg::tl_d2h_t tl_reg_d2h; + + + // incoming payload check + logic intg_err; + tlul_cmd_intg_chk u_chk ( + .tl_i(tl_i), + .err_o(intg_err) + ); + + // also check for spurious write enables + logic reg_we_err; + logic [43:0] reg_we_check; + prim_reg_we_check #( + .OneHotWidth(44) + ) u_prim_reg_we_check ( + .clk_i(clk_i), + .rst_ni(rst_ni), + .oh_i (reg_we_check), + .en_i (reg_we && !addrmiss), + .err_o (reg_we_err) + ); + + logic err_q; + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + err_q <= '0; + end else if (intg_err || reg_we_err) begin + err_q <= 1'b1; + end + end + + // integrity error output is permanent and should be used for alert generation + // register errors are transactional + assign intg_err_o = err_q | intg_err | reg_we_err; + + // outgoing integrity generation + tlul_pkg::tl_d2h_t tl_o_pre; + tlul_rsp_intg_gen #( + .EnableRspIntgGen(1), + .EnableDataIntgGen(1) + ) u_rsp_intg_gen ( + .tl_i(tl_o_pre), + .tl_o(tl_o) + ); + + assign tl_reg_h2d = tl_i; + assign tl_o_pre = tl_reg_d2h; + + tlul_adapter_reg #( + .RegAw(AW), + .RegDw(DW), + .EnableDataIntgGen(0) + ) u_reg_if ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + .tl_i (tl_reg_h2d), + .tl_o (tl_reg_d2h), + + .en_ifetch_i(prim_mubi_pkg::MuBi4False), + .intg_error_o(), + + .we_o (reg_we), + .re_o (reg_re), + .addr_o (reg_addr), + .wdata_o (reg_wdata), + .be_o (reg_be), + .busy_i (reg_busy), + .rdata_i (reg_rdata), + .error_i (reg_error) + ); + + // cdc oversampling signals + + assign reg_rdata = reg_rdata_next ; + assign reg_error = addrmiss | wr_err | intg_err; + + // Define SW related signals + // Format: __{wd|we|qs} + // or _{wd|we|qs} if field == 1 or 0 + logic [31:0] rega0_qs; + logic [31:0] rega1_qs; + logic rega2_we; + logic [31:0] rega2_qs; + logic [31:0] rega2_wd; + logic rega3_we; + logic [31:0] rega3_qs; + logic [31:0] rega3_wd; + logic rega4_we; + logic [31:0] rega4_qs; + logic [31:0] rega4_wd; + logic rega5_we; + logic [31:0] rega5_qs; + logic [31:0] rega5_wd; + logic rega6_we; + logic [31:0] rega6_qs; + logic [31:0] rega6_wd; + logic rega7_we; + logic [31:0] rega7_qs; + logic [31:0] rega7_wd; + logic rega8_we; + logic [31:0] rega8_qs; + logic [31:0] rega8_wd; + logic rega9_we; + logic [31:0] rega9_qs; + logic [31:0] rega9_wd; + logic rega10_we; + logic [31:0] rega10_qs; + logic [31:0] rega10_wd; + logic rega11_we; + logic [31:0] rega11_qs; + logic [31:0] rega11_wd; + logic rega12_we; + logic [31:0] rega12_qs; + logic [31:0] rega12_wd; + logic rega13_we; + logic [31:0] rega13_qs; + logic [31:0] rega13_wd; + logic rega14_we; + logic [31:0] rega14_qs; + logic [31:0] rega14_wd; + logic rega15_we; + logic [31:0] rega15_qs; + logic [31:0] rega15_wd; + logic rega16_we; + logic [31:0] rega16_qs; + logic [31:0] rega16_wd; + logic rega17_we; + logic [31:0] rega17_qs; + logic [31:0] rega17_wd; + logic rega18_we; + logic [31:0] rega18_qs; + logic [31:0] rega18_wd; + logic rega19_we; + logic [31:0] rega19_qs; + logic [31:0] rega19_wd; + logic rega20_we; + logic [31:0] rega20_qs; + logic [31:0] rega20_wd; + logic rega21_we; + logic [31:0] rega21_qs; + logic [31:0] rega21_wd; + logic rega22_we; + logic [31:0] rega22_qs; + logic [31:0] rega22_wd; + logic rega23_we; + logic [31:0] rega23_qs; + logic [31:0] rega23_wd; + logic rega24_we; + logic [31:0] rega24_qs; + logic [31:0] rega24_wd; + logic rega25_we; + logic [31:0] rega25_qs; + logic [31:0] rega25_wd; + logic rega26_we; + logic [31:0] rega26_qs; + logic [31:0] rega26_wd; + logic rega27_we; + logic [31:0] rega27_qs; + logic [31:0] rega27_wd; + logic [31:0] rega28_qs; + logic rega29_we; + logic [31:0] rega29_qs; + logic [31:0] rega29_wd; + logic rega30_we; + logic [31:0] rega30_qs; + logic [31:0] rega30_wd; + logic rega31_we; + logic [31:0] rega31_qs; + logic [31:0] rega31_wd; + logic rega32_we; + logic [31:0] rega32_qs; + logic [31:0] rega32_wd; + logic rega33_we; + logic [31:0] rega33_qs; + logic [31:0] rega33_wd; + logic rega34_we; + logic [31:0] rega34_qs; + logic [31:0] rega34_wd; + logic rega35_we; + logic [31:0] rega35_qs; + logic [31:0] rega35_wd; + logic rega36_we; + logic [31:0] rega36_qs; + logic [31:0] rega36_wd; + logic rega37_we; + logic [31:0] rega37_qs; + logic [31:0] rega37_wd; + logic regal_we; + logic [31:0] regal_wd; + logic regb_0_we; + logic [31:0] regb_0_qs; + logic [31:0] regb_0_wd; + logic regb_1_we; + logic [31:0] regb_1_qs; + logic [31:0] regb_1_wd; + logic regb_2_we; + logic [31:0] regb_2_qs; + logic [31:0] regb_2_wd; + logic regb_3_we; + logic [31:0] regb_3_qs; + logic [31:0] regb_3_wd; + logic regb_4_we; + logic [31:0] regb_4_qs; + logic [31:0] regb_4_wd; + + // Register instances + // R[rega0]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRO), + .RESVAL (32'h0), + .Mubi (1'b0) + ) u_rega0 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (1'b0), + .wd ('0), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega0.q), + .ds (), + + // to register interface (read) + .qs (rega0_qs) + ); + + + // R[rega1]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRO), + .RESVAL (32'h1), + .Mubi (1'b0) + ) u_rega1 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (1'b0), + .wd ('0), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega1.q), + .ds (), + + // to register interface (read) + .qs (rega1_qs) + ); + + + // R[rega2]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h2), + .Mubi (1'b0) + ) u_rega2 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega2_we), + .wd (rega2_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega2.q), + .ds (), + + // to register interface (read) + .qs (rega2_qs) + ); + + + // R[rega3]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h3), + .Mubi (1'b0) + ) u_rega3 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega3_we), + .wd (rega3_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega3.q), + .ds (), + + // to register interface (read) + .qs (rega3_qs) + ); + + + // R[rega4]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h4), + .Mubi (1'b0) + ) u_rega4 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega4_we), + .wd (rega4_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega4.q), + .ds (), + + // to register interface (read) + .qs (rega4_qs) + ); + + + // R[rega5]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h5), + .Mubi (1'b0) + ) u_rega5 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega5_we), + .wd (rega5_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega5.q), + .ds (), + + // to register interface (read) + .qs (rega5_qs) + ); + + + // R[rega6]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h6), + .Mubi (1'b0) + ) u_rega6 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega6_we), + .wd (rega6_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega6.q), + .ds (), + + // to register interface (read) + .qs (rega6_qs) + ); + + + // R[rega7]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h7), + .Mubi (1'b0) + ) u_rega7 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega7_we), + .wd (rega7_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega7.q), + .ds (), + + // to register interface (read) + .qs (rega7_qs) + ); + + + // R[rega8]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h8), + .Mubi (1'b0) + ) u_rega8 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega8_we), + .wd (rega8_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega8.q), + .ds (), + + // to register interface (read) + .qs (rega8_qs) + ); + + + // R[rega9]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h9), + .Mubi (1'b0) + ) u_rega9 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega9_we), + .wd (rega9_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega9.q), + .ds (), + + // to register interface (read) + .qs (rega9_qs) + ); + + + // R[rega10]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'ha), + .Mubi (1'b0) + ) u_rega10 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega10_we), + .wd (rega10_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega10.q), + .ds (), + + // to register interface (read) + .qs (rega10_qs) + ); + + + // R[rega11]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'hb), + .Mubi (1'b0) + ) u_rega11 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega11_we), + .wd (rega11_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega11.q), + .ds (), + + // to register interface (read) + .qs (rega11_qs) + ); + + + // R[rega12]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'hc), + .Mubi (1'b0) + ) u_rega12 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega12_we), + .wd (rega12_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega12.q), + .ds (), + + // to register interface (read) + .qs (rega12_qs) + ); + + + // R[rega13]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'hd), + .Mubi (1'b0) + ) u_rega13 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega13_we), + .wd (rega13_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega13.q), + .ds (), + + // to register interface (read) + .qs (rega13_qs) + ); + + + // R[rega14]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'he), + .Mubi (1'b0) + ) u_rega14 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega14_we), + .wd (rega14_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega14.q), + .ds (), + + // to register interface (read) + .qs (rega14_qs) + ); + + + // R[rega15]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'hf), + .Mubi (1'b0) + ) u_rega15 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega15_we), + .wd (rega15_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega15.q), + .ds (), + + // to register interface (read) + .qs (rega15_qs) + ); + + + // R[rega16]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h10), + .Mubi (1'b0) + ) u_rega16 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega16_we), + .wd (rega16_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega16.q), + .ds (), + + // to register interface (read) + .qs (rega16_qs) + ); + + + // R[rega17]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h11), + .Mubi (1'b0) + ) u_rega17 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega17_we), + .wd (rega17_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega17.q), + .ds (), + + // to register interface (read) + .qs (rega17_qs) + ); + + + // R[rega18]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h12), + .Mubi (1'b0) + ) u_rega18 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega18_we), + .wd (rega18_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega18.q), + .ds (), + + // to register interface (read) + .qs (rega18_qs) + ); + + + // R[rega19]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h13), + .Mubi (1'b0) + ) u_rega19 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega19_we), + .wd (rega19_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega19.q), + .ds (), + + // to register interface (read) + .qs (rega19_qs) + ); + + + // R[rega20]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h14), + .Mubi (1'b0) + ) u_rega20 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega20_we), + .wd (rega20_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega20.q), + .ds (), + + // to register interface (read) + .qs (rega20_qs) + ); + + + // R[rega21]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h15), + .Mubi (1'b0) + ) u_rega21 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega21_we), + .wd (rega21_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega21.q), + .ds (), + + // to register interface (read) + .qs (rega21_qs) + ); + + + // R[rega22]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h16), + .Mubi (1'b0) + ) u_rega22 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega22_we), + .wd (rega22_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega22.q), + .ds (), + + // to register interface (read) + .qs (rega22_qs) + ); + + + // R[rega23]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h17), + .Mubi (1'b0) + ) u_rega23 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega23_we), + .wd (rega23_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega23.q), + .ds (), + + // to register interface (read) + .qs (rega23_qs) + ); + + + // R[rega24]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h18), + .Mubi (1'b0) + ) u_rega24 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega24_we), + .wd (rega24_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega24.q), + .ds (), + + // to register interface (read) + .qs (rega24_qs) + ); + + + // R[rega25]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h19), + .Mubi (1'b0) + ) u_rega25 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega25_we), + .wd (rega25_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega25.q), + .ds (), + + // to register interface (read) + .qs (rega25_qs) + ); + + + // R[rega26]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h1a), + .Mubi (1'b0) + ) u_rega26 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega26_we), + .wd (rega26_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega26.q), + .ds (), + + // to register interface (read) + .qs (rega26_qs) + ); + + + // R[rega27]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h1b), + .Mubi (1'b0) + ) u_rega27 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega27_we), + .wd (rega27_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega27.q), + .ds (), + + // to register interface (read) + .qs (rega27_qs) + ); + + + // R[rega28]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRO), + .RESVAL (32'h1c), + .Mubi (1'b0) + ) u_rega28 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (1'b0), + .wd ('0), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega28.q), + .ds (), + + // to register interface (read) + .qs (rega28_qs) + ); + + + // R[rega29]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h1d), + .Mubi (1'b0) + ) u_rega29 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega29_we), + .wd (rega29_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega29.q), + .ds (), + + // to register interface (read) + .qs (rega29_qs) + ); + + + // R[rega30]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h1e), + .Mubi (1'b0) + ) u_rega30 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega30_we), + .wd (rega30_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega30.q), + .ds (), + + // to register interface (read) + .qs (rega30_qs) + ); + + + // R[rega31]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h1f), + .Mubi (1'b0) + ) u_rega31 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega31_we), + .wd (rega31_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega31.q), + .ds (), + + // to register interface (read) + .qs (rega31_qs) + ); + + + // R[rega32]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h20), + .Mubi (1'b0) + ) u_rega32 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega32_we), + .wd (rega32_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega32.q), + .ds (), + + // to register interface (read) + .qs (rega32_qs) + ); + + + // R[rega33]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h21), + .Mubi (1'b0) + ) u_rega33 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega33_we), + .wd (rega33_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega33.q), + .ds (), + + // to register interface (read) + .qs (rega33_qs) + ); + + + // R[rega34]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h22), + .Mubi (1'b0) + ) u_rega34 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega34_we), + .wd (rega34_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega34.q), + .ds (), + + // to register interface (read) + .qs (rega34_qs) + ); + + + // R[rega35]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h23), + .Mubi (1'b0) + ) u_rega35 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega35_we), + .wd (rega35_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega35.q), + .ds (), + + // to register interface (read) + .qs (rega35_qs) + ); + + + // R[rega36]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h24), + .Mubi (1'b0) + ) u_rega36 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega36_we), + .wd (rega36_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega36.q), + .ds (), + + // to register interface (read) + .qs (rega36_qs) + ); + + + // R[rega37]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h25), + .Mubi (1'b0) + ) u_rega37 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (rega37_we), + .wd (rega37_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.rega37.q), + .ds (), + + // to register interface (read) + .qs (rega37_qs) + ); + + + // R[regal]: V(True) + logic regal_qe; + logic [0:0] regal_flds_we; + assign regal_qe = ®al_flds_we; + prim_subreg_ext #( + .DW (32) + ) u_regal ( + .re (1'b0), + .we (regal_we), + .wd (regal_wd), + .d (hw2reg.regal.d), + .qre (), + .qe (regal_flds_we[0]), + .q (reg2hw.regal.q), + .ds (), + .qs () + ); + assign reg2hw.regal.qe = regal_qe; + + + // Subregister 0 of Multireg regb + // R[regb_0]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h0), + .Mubi (1'b0) + ) u_regb_0 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (regb_0_we), + .wd (regb_0_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.regb[0].q), + .ds (), + + // to register interface (read) + .qs (regb_0_qs) + ); + + + // Subregister 1 of Multireg regb + // R[regb_1]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h0), + .Mubi (1'b0) + ) u_regb_1 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (regb_1_we), + .wd (regb_1_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.regb[1].q), + .ds (), + + // to register interface (read) + .qs (regb_1_qs) + ); + + + // Subregister 2 of Multireg regb + // R[regb_2]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h0), + .Mubi (1'b0) + ) u_regb_2 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (regb_2_we), + .wd (regb_2_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.regb[2].q), + .ds (), + + // to register interface (read) + .qs (regb_2_qs) + ); + + + // Subregister 3 of Multireg regb + // R[regb_3]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h0), + .Mubi (1'b0) + ) u_regb_3 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (regb_3_we), + .wd (regb_3_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.regb[3].q), + .ds (), + + // to register interface (read) + .qs (regb_3_qs) + ); + + + // Subregister 4 of Multireg regb + // R[regb_4]: V(False) + prim_subreg #( + .DW (32), + .SwAccess(prim_subreg_pkg::SwAccessRW), + .RESVAL (32'h0), + .Mubi (1'b0) + ) u_regb_4 ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (regb_4_we), + .wd (regb_4_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (reg2hw.regb[4].q), + .ds (), + + // to register interface (read) + .qs (regb_4_qs) + ); + + + + logic [43:0] addr_hit; + always_comb begin + addr_hit = '0; + addr_hit[ 0] = (reg_addr == AST_REGA0_OFFSET); + addr_hit[ 1] = (reg_addr == AST_REGA1_OFFSET); + addr_hit[ 2] = (reg_addr == AST_REGA2_OFFSET); + addr_hit[ 3] = (reg_addr == AST_REGA3_OFFSET); + addr_hit[ 4] = (reg_addr == AST_REGA4_OFFSET); + addr_hit[ 5] = (reg_addr == AST_REGA5_OFFSET); + addr_hit[ 6] = (reg_addr == AST_REGA6_OFFSET); + addr_hit[ 7] = (reg_addr == AST_REGA7_OFFSET); + addr_hit[ 8] = (reg_addr == AST_REGA8_OFFSET); + addr_hit[ 9] = (reg_addr == AST_REGA9_OFFSET); + addr_hit[10] = (reg_addr == AST_REGA10_OFFSET); + addr_hit[11] = (reg_addr == AST_REGA11_OFFSET); + addr_hit[12] = (reg_addr == AST_REGA12_OFFSET); + addr_hit[13] = (reg_addr == AST_REGA13_OFFSET); + addr_hit[14] = (reg_addr == AST_REGA14_OFFSET); + addr_hit[15] = (reg_addr == AST_REGA15_OFFSET); + addr_hit[16] = (reg_addr == AST_REGA16_OFFSET); + addr_hit[17] = (reg_addr == AST_REGA17_OFFSET); + addr_hit[18] = (reg_addr == AST_REGA18_OFFSET); + addr_hit[19] = (reg_addr == AST_REGA19_OFFSET); + addr_hit[20] = (reg_addr == AST_REGA20_OFFSET); + addr_hit[21] = (reg_addr == AST_REGA21_OFFSET); + addr_hit[22] = (reg_addr == AST_REGA22_OFFSET); + addr_hit[23] = (reg_addr == AST_REGA23_OFFSET); + addr_hit[24] = (reg_addr == AST_REGA24_OFFSET); + addr_hit[25] = (reg_addr == AST_REGA25_OFFSET); + addr_hit[26] = (reg_addr == AST_REGA26_OFFSET); + addr_hit[27] = (reg_addr == AST_REGA27_OFFSET); + addr_hit[28] = (reg_addr == AST_REGA28_OFFSET); + addr_hit[29] = (reg_addr == AST_REGA29_OFFSET); + addr_hit[30] = (reg_addr == AST_REGA30_OFFSET); + addr_hit[31] = (reg_addr == AST_REGA31_OFFSET); + addr_hit[32] = (reg_addr == AST_REGA32_OFFSET); + addr_hit[33] = (reg_addr == AST_REGA33_OFFSET); + addr_hit[34] = (reg_addr == AST_REGA34_OFFSET); + addr_hit[35] = (reg_addr == AST_REGA35_OFFSET); + addr_hit[36] = (reg_addr == AST_REGA36_OFFSET); + addr_hit[37] = (reg_addr == AST_REGA37_OFFSET); + addr_hit[38] = (reg_addr == AST_REGAL_OFFSET); + addr_hit[39] = (reg_addr == AST_REGB_0_OFFSET); + addr_hit[40] = (reg_addr == AST_REGB_1_OFFSET); + addr_hit[41] = (reg_addr == AST_REGB_2_OFFSET); + addr_hit[42] = (reg_addr == AST_REGB_3_OFFSET); + addr_hit[43] = (reg_addr == AST_REGB_4_OFFSET); + end + + assign addrmiss = (reg_re || reg_we) ? ~|addr_hit : 1'b0 ; + + // Check sub-word write is permitted + always_comb begin + wr_err = (reg_we & + ((addr_hit[ 0] & (|(AST_PERMIT[ 0] & ~reg_be))) | + (addr_hit[ 1] & (|(AST_PERMIT[ 1] & ~reg_be))) | + (addr_hit[ 2] & (|(AST_PERMIT[ 2] & ~reg_be))) | + (addr_hit[ 3] & (|(AST_PERMIT[ 3] & ~reg_be))) | + (addr_hit[ 4] & (|(AST_PERMIT[ 4] & ~reg_be))) | + (addr_hit[ 5] & (|(AST_PERMIT[ 5] & ~reg_be))) | + (addr_hit[ 6] & (|(AST_PERMIT[ 6] & ~reg_be))) | + (addr_hit[ 7] & (|(AST_PERMIT[ 7] & ~reg_be))) | + (addr_hit[ 8] & (|(AST_PERMIT[ 8] & ~reg_be))) | + (addr_hit[ 9] & (|(AST_PERMIT[ 9] & ~reg_be))) | + (addr_hit[10] & (|(AST_PERMIT[10] & ~reg_be))) | + (addr_hit[11] & (|(AST_PERMIT[11] & ~reg_be))) | + (addr_hit[12] & (|(AST_PERMIT[12] & ~reg_be))) | + (addr_hit[13] & (|(AST_PERMIT[13] & ~reg_be))) | + (addr_hit[14] & (|(AST_PERMIT[14] & ~reg_be))) | + (addr_hit[15] & (|(AST_PERMIT[15] & ~reg_be))) | + (addr_hit[16] & (|(AST_PERMIT[16] & ~reg_be))) | + (addr_hit[17] & (|(AST_PERMIT[17] & ~reg_be))) | + (addr_hit[18] & (|(AST_PERMIT[18] & ~reg_be))) | + (addr_hit[19] & (|(AST_PERMIT[19] & ~reg_be))) | + (addr_hit[20] & (|(AST_PERMIT[20] & ~reg_be))) | + (addr_hit[21] & (|(AST_PERMIT[21] & ~reg_be))) | + (addr_hit[22] & (|(AST_PERMIT[22] & ~reg_be))) | + (addr_hit[23] & (|(AST_PERMIT[23] & ~reg_be))) | + (addr_hit[24] & (|(AST_PERMIT[24] & ~reg_be))) | + (addr_hit[25] & (|(AST_PERMIT[25] & ~reg_be))) | + (addr_hit[26] & (|(AST_PERMIT[26] & ~reg_be))) | + (addr_hit[27] & (|(AST_PERMIT[27] & ~reg_be))) | + (addr_hit[28] & (|(AST_PERMIT[28] & ~reg_be))) | + (addr_hit[29] & (|(AST_PERMIT[29] & ~reg_be))) | + (addr_hit[30] & (|(AST_PERMIT[30] & ~reg_be))) | + (addr_hit[31] & (|(AST_PERMIT[31] & ~reg_be))) | + (addr_hit[32] & (|(AST_PERMIT[32] & ~reg_be))) | + (addr_hit[33] & (|(AST_PERMIT[33] & ~reg_be))) | + (addr_hit[34] & (|(AST_PERMIT[34] & ~reg_be))) | + (addr_hit[35] & (|(AST_PERMIT[35] & ~reg_be))) | + (addr_hit[36] & (|(AST_PERMIT[36] & ~reg_be))) | + (addr_hit[37] & (|(AST_PERMIT[37] & ~reg_be))) | + (addr_hit[38] & (|(AST_PERMIT[38] & ~reg_be))) | + (addr_hit[39] & (|(AST_PERMIT[39] & ~reg_be))) | + (addr_hit[40] & (|(AST_PERMIT[40] & ~reg_be))) | + (addr_hit[41] & (|(AST_PERMIT[41] & ~reg_be))) | + (addr_hit[42] & (|(AST_PERMIT[42] & ~reg_be))) | + (addr_hit[43] & (|(AST_PERMIT[43] & ~reg_be))))); + end + + // Generate write-enables + assign rega2_we = addr_hit[2] & reg_we & !reg_error; + + assign rega2_wd = reg_wdata[31:0]; + assign rega3_we = addr_hit[3] & reg_we & !reg_error; + + assign rega3_wd = reg_wdata[31:0]; + assign rega4_we = addr_hit[4] & reg_we & !reg_error; + + assign rega4_wd = reg_wdata[31:0]; + assign rega5_we = addr_hit[5] & reg_we & !reg_error; + + assign rega5_wd = reg_wdata[31:0]; + assign rega6_we = addr_hit[6] & reg_we & !reg_error; + + assign rega6_wd = reg_wdata[31:0]; + assign rega7_we = addr_hit[7] & reg_we & !reg_error; + + assign rega7_wd = reg_wdata[31:0]; + assign rega8_we = addr_hit[8] & reg_we & !reg_error; + + assign rega8_wd = reg_wdata[31:0]; + assign rega9_we = addr_hit[9] & reg_we & !reg_error; + + assign rega9_wd = reg_wdata[31:0]; + assign rega10_we = addr_hit[10] & reg_we & !reg_error; + + assign rega10_wd = reg_wdata[31:0]; + assign rega11_we = addr_hit[11] & reg_we & !reg_error; + + assign rega11_wd = reg_wdata[31:0]; + assign rega12_we = addr_hit[12] & reg_we & !reg_error; + + assign rega12_wd = reg_wdata[31:0]; + assign rega13_we = addr_hit[13] & reg_we & !reg_error; + + assign rega13_wd = reg_wdata[31:0]; + assign rega14_we = addr_hit[14] & reg_we & !reg_error; + + assign rega14_wd = reg_wdata[31:0]; + assign rega15_we = addr_hit[15] & reg_we & !reg_error; + + assign rega15_wd = reg_wdata[31:0]; + assign rega16_we = addr_hit[16] & reg_we & !reg_error; + + assign rega16_wd = reg_wdata[31:0]; + assign rega17_we = addr_hit[17] & reg_we & !reg_error; + + assign rega17_wd = reg_wdata[31:0]; + assign rega18_we = addr_hit[18] & reg_we & !reg_error; + + assign rega18_wd = reg_wdata[31:0]; + assign rega19_we = addr_hit[19] & reg_we & !reg_error; + + assign rega19_wd = reg_wdata[31:0]; + assign rega20_we = addr_hit[20] & reg_we & !reg_error; + + assign rega20_wd = reg_wdata[31:0]; + assign rega21_we = addr_hit[21] & reg_we & !reg_error; + + assign rega21_wd = reg_wdata[31:0]; + assign rega22_we = addr_hit[22] & reg_we & !reg_error; + + assign rega22_wd = reg_wdata[31:0]; + assign rega23_we = addr_hit[23] & reg_we & !reg_error; + + assign rega23_wd = reg_wdata[31:0]; + assign rega24_we = addr_hit[24] & reg_we & !reg_error; + + assign rega24_wd = reg_wdata[31:0]; + assign rega25_we = addr_hit[25] & reg_we & !reg_error; + + assign rega25_wd = reg_wdata[31:0]; + assign rega26_we = addr_hit[26] & reg_we & !reg_error; + + assign rega26_wd = reg_wdata[31:0]; + assign rega27_we = addr_hit[27] & reg_we & !reg_error; + + assign rega27_wd = reg_wdata[31:0]; + assign rega29_we = addr_hit[29] & reg_we & !reg_error; + + assign rega29_wd = reg_wdata[31:0]; + assign rega30_we = addr_hit[30] & reg_we & !reg_error; + + assign rega30_wd = reg_wdata[31:0]; + assign rega31_we = addr_hit[31] & reg_we & !reg_error; + + assign rega31_wd = reg_wdata[31:0]; + assign rega32_we = addr_hit[32] & reg_we & !reg_error; + + assign rega32_wd = reg_wdata[31:0]; + assign rega33_we = addr_hit[33] & reg_we & !reg_error; + + assign rega33_wd = reg_wdata[31:0]; + assign rega34_we = addr_hit[34] & reg_we & !reg_error; + + assign rega34_wd = reg_wdata[31:0]; + assign rega35_we = addr_hit[35] & reg_we & !reg_error; + + assign rega35_wd = reg_wdata[31:0]; + assign rega36_we = addr_hit[36] & reg_we & !reg_error; + + assign rega36_wd = reg_wdata[31:0]; + assign rega37_we = addr_hit[37] & reg_we & !reg_error; + + assign rega37_wd = reg_wdata[31:0]; + assign regal_we = addr_hit[38] & reg_we & !reg_error; + + assign regal_wd = reg_wdata[31:0]; + assign regb_0_we = addr_hit[39] & reg_we & !reg_error; + + assign regb_0_wd = reg_wdata[31:0]; + assign regb_1_we = addr_hit[40] & reg_we & !reg_error; + + assign regb_1_wd = reg_wdata[31:0]; + assign regb_2_we = addr_hit[41] & reg_we & !reg_error; + + assign regb_2_wd = reg_wdata[31:0]; + assign regb_3_we = addr_hit[42] & reg_we & !reg_error; + + assign regb_3_wd = reg_wdata[31:0]; + assign regb_4_we = addr_hit[43] & reg_we & !reg_error; + + assign regb_4_wd = reg_wdata[31:0]; + + // Assign write-enables to checker logic vector. + always_comb begin + reg_we_check = '0; + reg_we_check[0] = 1'b0; + reg_we_check[1] = 1'b0; + reg_we_check[2] = rega2_we; + reg_we_check[3] = rega3_we; + reg_we_check[4] = rega4_we; + reg_we_check[5] = rega5_we; + reg_we_check[6] = rega6_we; + reg_we_check[7] = rega7_we; + reg_we_check[8] = rega8_we; + reg_we_check[9] = rega9_we; + reg_we_check[10] = rega10_we; + reg_we_check[11] = rega11_we; + reg_we_check[12] = rega12_we; + reg_we_check[13] = rega13_we; + reg_we_check[14] = rega14_we; + reg_we_check[15] = rega15_we; + reg_we_check[16] = rega16_we; + reg_we_check[17] = rega17_we; + reg_we_check[18] = rega18_we; + reg_we_check[19] = rega19_we; + reg_we_check[20] = rega20_we; + reg_we_check[21] = rega21_we; + reg_we_check[22] = rega22_we; + reg_we_check[23] = rega23_we; + reg_we_check[24] = rega24_we; + reg_we_check[25] = rega25_we; + reg_we_check[26] = rega26_we; + reg_we_check[27] = rega27_we; + reg_we_check[28] = 1'b0; + reg_we_check[29] = rega29_we; + reg_we_check[30] = rega30_we; + reg_we_check[31] = rega31_we; + reg_we_check[32] = rega32_we; + reg_we_check[33] = rega33_we; + reg_we_check[34] = rega34_we; + reg_we_check[35] = rega35_we; + reg_we_check[36] = rega36_we; + reg_we_check[37] = rega37_we; + reg_we_check[38] = regal_we; + reg_we_check[39] = regb_0_we; + reg_we_check[40] = regb_1_we; + reg_we_check[41] = regb_2_we; + reg_we_check[42] = regb_3_we; + reg_we_check[43] = regb_4_we; + end + + // Read data return + always_comb begin + reg_rdata_next = '0; + unique case (1'b1) + addr_hit[0]: begin + reg_rdata_next[31:0] = rega0_qs; + end + + addr_hit[1]: begin + reg_rdata_next[31:0] = rega1_qs; + end + + addr_hit[2]: begin + reg_rdata_next[31:0] = rega2_qs; + end + + addr_hit[3]: begin + reg_rdata_next[31:0] = rega3_qs; + end + + addr_hit[4]: begin + reg_rdata_next[31:0] = rega4_qs; + end + + addr_hit[5]: begin + reg_rdata_next[31:0] = rega5_qs; + end + + addr_hit[6]: begin + reg_rdata_next[31:0] = rega6_qs; + end + + addr_hit[7]: begin + reg_rdata_next[31:0] = rega7_qs; + end + + addr_hit[8]: begin + reg_rdata_next[31:0] = rega8_qs; + end + + addr_hit[9]: begin + reg_rdata_next[31:0] = rega9_qs; + end + + addr_hit[10]: begin + reg_rdata_next[31:0] = rega10_qs; + end + + addr_hit[11]: begin + reg_rdata_next[31:0] = rega11_qs; + end + + addr_hit[12]: begin + reg_rdata_next[31:0] = rega12_qs; + end + + addr_hit[13]: begin + reg_rdata_next[31:0] = rega13_qs; + end + + addr_hit[14]: begin + reg_rdata_next[31:0] = rega14_qs; + end + + addr_hit[15]: begin + reg_rdata_next[31:0] = rega15_qs; + end + + addr_hit[16]: begin + reg_rdata_next[31:0] = rega16_qs; + end + + addr_hit[17]: begin + reg_rdata_next[31:0] = rega17_qs; + end + + addr_hit[18]: begin + reg_rdata_next[31:0] = rega18_qs; + end + + addr_hit[19]: begin + reg_rdata_next[31:0] = rega19_qs; + end + + addr_hit[20]: begin + reg_rdata_next[31:0] = rega20_qs; + end + + addr_hit[21]: begin + reg_rdata_next[31:0] = rega21_qs; + end + + addr_hit[22]: begin + reg_rdata_next[31:0] = rega22_qs; + end + + addr_hit[23]: begin + reg_rdata_next[31:0] = rega23_qs; + end + + addr_hit[24]: begin + reg_rdata_next[31:0] = rega24_qs; + end + + addr_hit[25]: begin + reg_rdata_next[31:0] = rega25_qs; + end + + addr_hit[26]: begin + reg_rdata_next[31:0] = rega26_qs; + end + + addr_hit[27]: begin + reg_rdata_next[31:0] = rega27_qs; + end + + addr_hit[28]: begin + reg_rdata_next[31:0] = rega28_qs; + end + + addr_hit[29]: begin + reg_rdata_next[31:0] = rega29_qs; + end + + addr_hit[30]: begin + reg_rdata_next[31:0] = rega30_qs; + end + + addr_hit[31]: begin + reg_rdata_next[31:0] = rega31_qs; + end + + addr_hit[32]: begin + reg_rdata_next[31:0] = rega32_qs; + end + + addr_hit[33]: begin + reg_rdata_next[31:0] = rega33_qs; + end + + addr_hit[34]: begin + reg_rdata_next[31:0] = rega34_qs; + end + + addr_hit[35]: begin + reg_rdata_next[31:0] = rega35_qs; + end + + addr_hit[36]: begin + reg_rdata_next[31:0] = rega36_qs; + end + + addr_hit[37]: begin + reg_rdata_next[31:0] = rega37_qs; + end + + addr_hit[38]: begin + reg_rdata_next[31:0] = '0; + end + + addr_hit[39]: begin + reg_rdata_next[31:0] = regb_0_qs; + end + + addr_hit[40]: begin + reg_rdata_next[31:0] = regb_1_qs; + end + + addr_hit[41]: begin + reg_rdata_next[31:0] = regb_2_qs; + end + + addr_hit[42]: begin + reg_rdata_next[31:0] = regb_3_qs; + end + + addr_hit[43]: begin + reg_rdata_next[31:0] = regb_4_qs; + end + + default: begin + reg_rdata_next = '1; + end + endcase + end + + // shadow busy + logic shadow_busy; + assign shadow_busy = 1'b0; + + // register busy + assign reg_busy = shadow_busy; + + // Unused signal tieoff + + // wdata / byte enable are not always fully used + // add a blanket unused statement to handle lint waivers + logic unused_wdata; + logic unused_be; + assign unused_wdata = ^reg_wdata; + assign unused_be = ^reg_be; + + // Assertions for Register Interface + `ASSERT_PULSE(wePulse, reg_we, clk_i, !rst_ni) + `ASSERT_PULSE(rePulse, reg_re, clk_i, !rst_ni) + + `ASSERT(reAfterRv, $rose(reg_re || reg_we) |=> tl_o_pre.d_valid, clk_i, !rst_ni) + + `ASSERT(en2addrHit, (reg_we || reg_re) |-> $onehot0(addr_hit), clk_i, !rst_ni) + + // this is formulated as an assumption such that the FPV testbenches do disprove this + // property by mistake + //`ASSUME(reqParity, tl_reg_h2d.a_valid |-> tl_reg_h2d.a_user.chk_en == tlul_pkg::CheckDis) + +endmodule diff --git a/src/ast/rtl/dev_entropy.sv b/src/ast/rtl/dev_entropy.sv new file mode 100644 index 000000000..301221a31 --- /dev/null +++ b/src/ast/rtl/dev_entropy.sv @@ -0,0 +1,260 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// -------- W A R N I N G: A U T O - G E N E R A T E D C O D E !! -------- // +// PLEASE DO NOT HAND-EDIT THIS FILE. IT HAS BEEN AUTO-GENERATED. +// +//############################################################################ +// *Name: dev_entropy +// *Module Description: Device Entropy +//############################################################################ + +module dev_entropy #( + parameter int EntropyRateWidth = 4 +) ( + input clk_i, // Entropy Clock + input rst_ni, // Entropy Reset + input clk_dev_i, // Device Clock + input rst_dev_ni, // Device Reset + input dev_en_i, // Device Enable + input [EntropyRateWidth-1:0] dev_rate_i, // Entropy Rate + input dev_ack_i, // Write Valid (EDN_ACK) + input [32-1:0] dev_data_i, // Write Data (EDN_BUS) + output logic dev_wready_o, // Write Ready (EDN_REQ) + output logic dev_data_o // Entropy Data +); + + +//////////////////////////////////// +// Device Enable Sync +//////////////////////////////////// +logic dev_en_dev; + +// Sync dev_en to Dev clock +prim_flop_2sync #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_dev_en_dev_sync ( + .clk_i ( clk_dev_i ), + .rst_ni ( rst_dev_ni ), + .d_i ( dev_en_i ), + .q_o ( dev_en_dev ) +); + + +//////////////////////////////////// +// Entropy Rate +/////////////////////////////////////// +logic fast_start, rate_pulse, rready; +logic [7-1:0] fast_cnt; +logic [(1< 1 || EN -> 0 + +// Clock Output Buffer +//////////////////////////////////////// +prim_clock_buf #( + .NoFpgaBuf ( 1'b1 ) +) u_buf ( + .clk_i ( clk ), + .clk_o ( io_clk_o ) +); + + +`ifdef SYNTHESIS +///////////////////////// +// Unused Signals +///////////////////////// +logic unused_sigs; +assign unused_sigs = ^{ io_osc_cal_i }; +`endif + +endmodule : io_osc diff --git a/src/ast/rtl/rglts_pdm_3p3v.sv b/src/ast/rtl/rglts_pdm_3p3v.sv new file mode 100644 index 000000000..f079ed58d --- /dev/null +++ b/src/ast/rtl/rglts_pdm_3p3v.sv @@ -0,0 +1,416 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// -------- W A R N I N G: A U T O - G E N E R A T E D C O D E !! -------- // +// PLEASE DO NOT HAND-EDIT THIS FILE. IT HAS BEEN AUTO-GENERATED. +// +//############################################################################ +// *Name: rglts_pdm_3p3v +// *Module Description: Regulators (MAIN & AON) & PDM Logic @3.3V +//############################################################################ + +`include "prim_assert.sv" + +module rglts_pdm_3p3v ( + input vcc_pok_h_i, // VCC Exist @3.3v + input vcaon_pok_por_h_i, // VCAON_POK_POR @1.1v + input vcmain_pok_por_h_i, // VCMAIN_POK_POR @1.1v + input [2-1:0] vio_pok_h_i, // vioa/b_pok signals @1.1v + input clk_src_aon_h_i, // AON Clock @1.1v + input main_pd_h_i, // MAIN Regulator Power Down @1.1v + input por_sync_h_i, // POR (Sync to AON clock) @1.1v + input scan_mode_h_i, // Scan Mode @1.1v + input [2-1:0] otp_power_seq_h_i, // MMR0,24 in @1.1v + input vcaon_supp_i, // + input vcmain_supp_i, // + output logic rglssm_vmppr_h_o, // Regulators SM at VMPPR (vcmaim_pok_por_reset) @3.3v + output logic rglssm_vcmon_h_o, // Regulators state machine at VCMON @3.3v + output logic rglssm_brout_h_o, // Regulators state machine at BROUT @3.3v + output logic vcmain_pok_h_o, // VCMAIN POK @3.3v + output logic vcmain_pok_por_h_o, // VCMAIN_POK_POR @3.3v + output logic vcaon_pok_h_o, // VCAON Exist @3.3v + output logic vcaon_pok_1p1_h_o, // VCAON Exist @3.3v for BE 1.1v (UPF issue) + output logic vcaon_pok_por_h_o, // VCAON_POK_POR @3.3v + output logic [2-1:0] vio_pok_h_o, // vioa/b_pok_h signals @3.3v + output logic vcc_pok_str_h_o, // VCC Exist Stretched @3.3V + output logic vcc_pok_str_1p1_h_o, // VCC Exist Stretched @3.3V for BE 1.1v (UPF issue) + output logic deep_sleep_h_o, // Deep Sleep (main regulator & switch are off) @3.3v + output logic flash_power_down_h_o, // + output logic flash_power_ready_h_o, // + output logic [2-1:0] otp_power_seq_h_o // MMR0,24 masked by PDM, out (VCC) +); + +// Turn 1.1v into 3.3v signals +//////////////////////////////////////// +assign vcaon_pok_por_h_o = vcaon_pok_por_h_i; // Level Up Shifter +assign vcmain_pok_por_h_o = vcmain_pok_por_h_i; // Level Up Shifter +assign vio_pok_h_o[1:0] = vio_pok_h_i[1:0]; // Level Up Shifter + + +/////////////////////////////////////// +// Regulators Enable State Machine +/////////////////////////////////////// +logic fla_pdm_h, otp_pdm_h; +logic [9-1:0] dly_cnt, hc2lc_val, lc2hc_val; // upto 255 aon clock (1275us) + +// DV Hook +logic [1:0] dv_hook, dft_sel; + +`ifndef SYNTHESIS +initial begin + // Regulator Power-up time (non cold power-up) selected according to 'dv_hook' value: + // + // 0: hc2lc_val=HC2LCOC; lc2hc_val=LC2HCOC; + // 1: hc2lc_val=HC2LCOC*2; lc2hc_val=LC2HCOC*2; + // 2: hc2lc_val=9'd2; lc2hc_val=9'd6; + // 3: hc2lc_val=9'd4; lc2hc_val=9'd12; + // + if ( !$value$plusargs("accelerate_regulators_power_up_time=%d", dv_hook) ) begin + dv_hook = 2'd0; + end + `ASSERT_I(accelerate_regulators_power_up_time, dv_hook inside {[0:3]}) +end +`else +assign dv_hook = 2'd0; +`endif + +localparam int unsigned HC2LCOC = ast_pkg::Hc2LcTrCyc; +localparam int unsigned LC2HCOC = ast_pkg::Lc2HcTrCyc; +logic [9-1:0] cld_pu_val; + +`ifndef SYNTHESIS +initial begin + // Cold Power-up time can be selected between 2 and LC2HCOC (default: ast_pkg::Lc2HcTrCyc) + if ( !$value$plusargs("accelerate_cold_power_up_time=%d", cld_pu_val) ) begin + cld_pu_val = LC2HCOC[9-1:0]; + end + `ASSERT_I(accelerate_cold_power_up_time, cld_pu_val inside {[2:LC2HCOC[9-1:0]]}) +end +`else +assign cld_pu_val = LC2HCOC[9-1:0]; +`endif + +// Force 2'b11 to reduce LDOs time & double LDOs start-up time +assign dft_sel = dv_hook; + +assign hc2lc_val = (dft_sel == 2'b10) ? 9'd2 : + (dft_sel == 2'b11) ? 9'd4 : + (dft_sel == 2'b00) ? HC2LCOC[9-1:0] : + HC2LCOC[8-1:0]*2; + +assign lc2hc_val = (dft_sel == 2'b10) ? 9'd6 : + (dft_sel == 2'b11) ? 9'd12 : + (dft_sel == 2'b00) ? LC2HCOC[9-1:0] : + LC2HCOC[8-1:0]*2; + + + +/////////////////////////////////////// +// Regulators State Machine +/////////////////////////////////////// +typedef enum logic [3-1:0] { + RGLS_CLDPU = 3'd0, // Cold power-up (MAIN Regulator ON, AON Regulator OFF, Power Switch Enabled) + RGLS_VCMON = 3'd1, // MAIN Regulator ON (AON Regulator OFF, Power Switch Enabled) + RGLS_VCM2A = 3'd3, // MAIN Regulator ON (AON Regulator rN, Power Switch Enabled->Disabled) + RGLS_VCAON = 3'd7, // AON Regulator ON (MAIN Regulator OFF, Power Switch Diabled) + RGLS_VCA2M = 3'd5, // AON Regulator ON (MAIN Regulator ON, Power Switch Diabled->Enabled) + RGLS_BROUT = 3'd6 // Brownout (MAIN Regulator ON, AON Regulator OFF, Power Switch Enabled) +} rgls_sm_e; + +rgls_sm_e rgls_sm; +logic vcmain_pok_h, vcaon_pok_h, main_pd_str_h; + +// Hold state machin reset on brownout for minimum 13us. +logic rgls_rst_h_n; +assign rgls_rst_h_n = vcc_pok_str_h_o; + +// Syncronizers +// First stage clk FE & second clk RE +/////////////////////////////////////// +logic vcc_pok_fe_h, vcc_pok_s_h; + + +logic clk_src_aon_h_n; +assign clk_src_aon_h_n = scan_mode_h_i ? clk_src_aon_h_i : + !clk_src_aon_h_i; + +always_ff @( posedge clk_src_aon_h_n, negedge rgls_rst_h_n ) begin + if ( !rgls_rst_h_n ) begin + vcc_pok_fe_h <= 1'b0; + end else begin + vcc_pok_fe_h <= vcc_pok_h_i; + end +end + +always_ff @( posedge clk_src_aon_h_i, negedge rgls_rst_h_n ) begin + if ( !rgls_rst_h_n ) begin + vcc_pok_s_h <= 1'b0; + end else begin + vcc_pok_s_h <= vcc_pok_fe_h; + end +end + +// Regulators State Mashine +//////////////////////////////////////// +always_ff @( posedge clk_src_aon_h_i, negedge rgls_rst_h_n ) begin + if ( !rgls_rst_h_n ) begin + vcmain_pok_h <= 1'b0; // VCMAIN Rail Disabled + vcaon_pok_h <= 1'b0; // VCAON Rail Disabled + main_pd_str_h <= 1'b0; // Power Down Stratch off + // + rglssm_vcmon_h_o <= 1'b0; // + rglssm_vmppr_h_o <= 1'b1; // (rgls_sm == RRGLS_[CLDPU | VCAON | VCA2M]) + rglssm_brout_h_o <= 1'b0; // + fla_pdm_h <= 1'b1; // !((rgls_sm == RGLS_VCMON) || (rgls_sm == RGLS_BROUT)) + // + dly_cnt <= cld_pu_val; // VCMAIN Regulator power-up time + // + rgls_sm <= RGLS_CLDPU; // Power VCMAIN (Cold) + end else begin + unique case ( rgls_sm ) + RGLS_CLDPU: begin + vcmain_pok_h <= 1'b0; // VCMAIN Rail Disabled + vcaon_pok_h <= 1'b0; // VCAON Rail Disabled + main_pd_str_h <= 1'b0; // Power Down Stratch off + // + rglssm_vcmon_h_o <= 1'b0; // + rglssm_vmppr_h_o <= 1'b1; // (rgls_sm == RRGLS_[CLDPU | VCAON | VCA2M]) + rglssm_brout_h_o <= 1'b0; // + fla_pdm_h <= 1'b1; // !((rgls_sm == RGLS_VCMON)||(rgls_sm == RGLS_BROUT)) + // + dly_cnt <= dly_cnt - 1'b1; + // + if (dly_cnt == '0) begin + vcmain_pok_h <= 1'b1; // VCMAIN Rail Enable + vcaon_pok_h <= 1'b1; // VCAON Rail Enabled + rglssm_vcmon_h_o <= 1'b1; // (rgls_sm == RGLS_VCMON) + rglssm_vmppr_h_o <= 1'b0; // (rgls_sm == RRGLS_[CLDPU | VCAON | VCA2M]) + fla_pdm_h <= 1'b0; // + rgls_sm <= RGLS_VCMON; // VCMAIN Regultor is ON! + end else begin + rgls_sm <= RGLS_CLDPU; // Power VCMAIN! + end + end + + RGLS_VCMON: begin + vcmain_pok_h <= 1'b1; // VCMAIN Rail Enabled + vcaon_pok_h <= 1'b1; // VCAON Rail Enabled + main_pd_str_h <= 1'b0; // Power Down Stratch + // + rglssm_vcmon_h_o <= 1'b1; // (rgls_sm == RGLS_VCMON) + rglssm_vmppr_h_o <= 1'b0; // (rgls_sm == RRGLS_[CLDPU | VCAON | VCA2M]) + rglssm_brout_h_o <= 1'b0; // + fla_pdm_h <= 1'b0; // + // + dly_cnt <= hc2lc_val; // VCAON Regulator power-up time + // + if ( !vcc_pok_s_h ) begin + rglssm_vcmon_h_o <= 1'b0; // + rglssm_vmppr_h_o <= 1'b0; // (rgls_sm == RRGLS_[CLDPU | VCAON | VCA2M]) + rglssm_brout_h_o <= 1'b1; // (rgls_sm == RGLS_BROUT) + fla_pdm_h <= 1'b0; // + rgls_sm <= RGLS_BROUT; // Brownout + end else if ( main_pd_h_i && !por_sync_h_i ) begin + main_pd_str_h <= 1'b1; // Power Down Stratch on + rglssm_vcmon_h_o <= 1'b0; // + rglssm_vmppr_h_o <= 1'b0; // (rgls_sm == RRGLS_[CLDPU | VCAON | VCA2M]) + fla_pdm_h <= 1'b1; // !((rgls_sm == RGLS_VCMON) || (rgls_sm == RGLS_BROUT)) + rgls_sm <= RGLS_VCM2A; // VCMAIN to VCAON Transition + end else begin + rgls_sm <= RGLS_VCMON; // VCMAIN Regulator is ON! + end + end + + RGLS_VCM2A: begin + vcmain_pok_h <= 1'b1; // VCMAIN Rail Enabled + vcaon_pok_h <= 1'b1; // VCAON Rail Enabled + main_pd_str_h <= 1'b1; // Power Down Stratch + // + rglssm_vcmon_h_o <= 1'b0; // + rglssm_vmppr_h_o <= 1'b0; // (rgls_sm == RRGLS_[CLDPU | VCAON | VCA2M]) + rglssm_brout_h_o <= 1'b0; // + fla_pdm_h <= 1'b1; // !((rgls_sm == RGLS_VCMON) || (rgls_sm == RGLS_BROUT)) + // + dly_cnt <= dly_cnt - 1'b1; + // + if ( por_sync_h_i ) begin + vcmain_pok_h <= 1'b1; // VCMAIN Rail Enable + vcaon_pok_h <= 1'b1; // VCAON Rail Enabled + rglssm_vcmon_h_o <= 1'b1; // (rgls_sm == RGLS_VCMON) + rglssm_vmppr_h_o <= 1'b0; // (rgls_sm == RRGLS_[CLDPU | VCAON | VCA2M]) + fla_pdm_h <= 1'b0; // + rgls_sm <= RGLS_VCMON; // VCMAIN Regultor is ON! + end else if ( dly_cnt == '0 ) begin + rglssm_vmppr_h_o <= 1'b1; // (rgls_sm == RRGLS_[CLDPU | VCAON | VCA2M]) + rgls_sm <= RGLS_VCAON; // VCAON Regulator is ON! + end else begin + rgls_sm <= RGLS_VCM2A; // VCMAIN to VCAON Transition + end + end + + RGLS_VCAON: begin + vcmain_pok_h <= 1'b0; // VCMAIN Rail Disabled + vcaon_pok_h <= 1'b1; // VCAON Rail Enabled + main_pd_str_h <= 1'b1; // Power Down Stratch + // + rglssm_vcmon_h_o <= 1'b0; // + rglssm_vmppr_h_o <= 1'b1; // (rgls_sm == RRGLS_[CLDPU | VCAON | VCA2M]) + rglssm_brout_h_o <= 1'b0; // + fla_pdm_h <= 1'b1; // !((rgls_sm == RGLS_VCMON) || (rgls_sm == RGLS_BROUT)) + // + dly_cnt <= lc2hc_val; // VCMAIN Regulator power-up time + // + if ( !main_pd_h_i || por_sync_h_i ) begin + rglssm_vmppr_h_o <= 1'b1; // (rgls_sm == RRGLS_[CLDPU | VCAON | VCA2M]) + rgls_sm <= RGLS_VCA2M; // VCAON->VCMAIN Transition + end else begin + rgls_sm <= RGLS_VCAON; // VCAON Regulator is ON! + end + end + + RGLS_VCA2M: begin + vcmain_pok_h <= 1'b0; // VCMAIN Rail Disable + vcaon_pok_h <= 1'b1; // VCAON Rail Enabled + main_pd_str_h <= 1'b0; // Power Down Stratch off + // + rglssm_vcmon_h_o <= 1'b0; // + rglssm_vmppr_h_o <= 1'b1; // (rgls_sm == RRGLS_[CLDPU | VCAON | VCA2M]) + rglssm_brout_h_o <= 1'b0; // + fla_pdm_h <= 1'b1; // !((rgls_sm == RGLS_VCMON) || (rgls_sm == RGLS_BROUT)) + // + dly_cnt <= dly_cnt - 1'b1; + // + if ( dly_cnt == '0 ) begin + vcmain_pok_h <= 1'b1; // VCMAIN Rail Enable + vcaon_pok_h <= 1'b1; // VCAON Rail Enabled + rglssm_vcmon_h_o <= 1'b1; // (rgls_sm == RGLS_VCMON) + rglssm_vmppr_h_o <= 1'b0; // (rgls_sm == RRGLS_[CLDPU | VCAON | VCA2M]) + fla_pdm_h <= 1'b0; // + rgls_sm <= RGLS_VCMON; // VCMAIN Regulator is ON! + end else begin + rgls_sm <= RGLS_VCA2M; // VCAON->VCMAIN Transition + end + end + + RGLS_BROUT: begin + vcmain_pok_h <= 1'b1; // VCMAIN Rail Enabled + vcaon_pok_h <= 1'b1; // VCAON Rail Enabled + main_pd_str_h <= 1'b0; // Powe Down Stratch off + // + rglssm_vcmon_h_o <= 1'b0; // + rglssm_vmppr_h_o <= 1'b0; // (rgls_sm == RRGLS_[CLDPU | VCAON | VCA2M]) + rglssm_brout_h_o <= 1'b1; // (rgls_sm == RGLS_BROUT) + fla_pdm_h <= 1'b0; // + // + dly_cnt <= lc2hc_val; // VCMAIN Regulator power-up time + // + rgls_sm <= RGLS_BROUT; // Brownout + end + + default: begin + vcmain_pok_h <= 1'b0; // VCMAIN Rail Disabled + vcaon_pok_h <= 1'b0; // VCAON Rail Disabled + main_pd_str_h <= 1'b0; // Powe Down Stratch off + // + rglssm_vcmon_h_o <= 1'b0; // + rglssm_vmppr_h_o <= 1'b1; // (rgls_sm == RRGLS_[CLDPU | VCAON | VCA2M]) + rglssm_brout_h_o <= 1'b0; // + fla_pdm_h <= 1'b1; // !((rgls_sm == RGLS_VCMON) || (rgls_sm == RGLS_BROUT)) + // + dly_cnt <= lc2hc_val; // VCMAIN Regulator power-up time + // + rgls_sm <= RGLS_CLDPU; // Power VCMAIN (Cold) + end + endcase + end +end + + +/////////////////////////////////////// +// VCMAIN_POK & VCAON POK +/////////////////////////////////////// +assign vcmain_pok_h_o = vcmain_pok_h && vcmain_supp_i; +// VCAON POK is needed for cold power-up to enable the AON clock +// Therefore, it is connected directly to VCC POK. +assign vcaon_pok_h_o = vcc_pok_h_i && vcaon_supp_i; +assign vcaon_pok_1p1_h_o = vcaon_pok_h_o; // For layout separation + + +/////////////////////////////////////// +// Streched VCC_POK During Brownout +/////////////////////////////////////// +localparam int VccPokStrNum = 4; // (Min-Max) (3-4)x5us=(15-20)us + +logic vcc_pok_set_h, vcc_pok_rst_h_n; +logic [VccPokStrNum-1:0] vcc_pok_str_no_scan_h; + +assign vcc_pok_rst_h_n = vcc_pok_h_i || vcaon_pok_h_o; // Non-Scan + +// Enable proper order of reset/set execution +always_comb begin + vcc_pok_set_h = vcc_pok_rst_h_n && vcc_pok_h_i; +end + +always_ff @( posedge clk_src_aon_h_i, negedge vcc_pok_rst_h_n, posedge vcc_pok_set_h ) begin + if ( !vcc_pok_rst_h_n ) begin + vcc_pok_str_no_scan_h[0] <= 1'b0; + end else if ( vcc_pok_set_h ) begin + vcc_pok_str_no_scan_h[0] <= 1'b1; + end else begin + vcc_pok_str_no_scan_h[0] <= 1'b0; + end +end + +for (genvar i = 1; i < VccPokStrNum; i++ ) begin : gen_vcc_pok_str + always_ff @( posedge clk_src_aon_h_i, negedge vcc_pok_rst_h_n, posedge vcc_pok_set_h ) begin + if ( !vcc_pok_rst_h_n ) begin + vcc_pok_str_no_scan_h[i] <= 1'b0; + end else if ( vcc_pok_set_h ) begin + vcc_pok_str_no_scan_h[i] <= 1'b1; + end else begin + vcc_pok_str_no_scan_h[i] <= vcc_pok_str_no_scan_h[i-1]; + end + end +end + +assign vcc_pok_str_h_o = vcc_pok_str_no_scan_h[VccPokStrNum-1]; +assign vcc_pok_str_1p1_h_o = vcc_pok_str_no_scan_h[VccPokStrNum-1]; + + +/////////////////////////////////////// +// Deep Sleep Indication +/////////////////////////////////////// +always_ff @( posedge clk_src_aon_h_i, negedge rgls_rst_h_n ) begin + if ( !rgls_rst_h_n ) begin + deep_sleep_h_o <= 1'b0; + end else begin + deep_sleep_h_o <= main_pd_h_i || main_pd_str_h; + end +end + + +/////////////////////////////////////// +// Flash +/////////////////////////////////////// +// fla_pdm_h = !(rglssm_vcmon || rglssm_brout); +assign flash_power_down_h_o = scan_mode_h_i || fla_pdm_h; +assign flash_power_ready_h_o = vcc_pok_h_i; + + +/////////////////////////////////////// +// OTP +/////////////////////////////////////// +assign otp_pdm_h = !rglssm_vcmon_h_o; +assign otp_power_seq_h_o[0] = !scan_mode_h_i && !otp_pdm_h && otp_power_seq_h_i[0]; +assign otp_power_seq_h_o[1] = scan_mode_h_i || otp_pdm_h || otp_power_seq_h_i[1]; + + +///////////////////// +// Unused Signals // +///////////////////// +logic unused_sigs; + +assign unused_sigs = ^{ vcaon_pok_h }; + +endmodule : rglts_pdm_3p3v diff --git a/src/ast/rtl/rng.sv b/src/ast/rtl/rng.sv new file mode 100644 index 000000000..fab38d73a --- /dev/null +++ b/src/ast/rtl/rng.sv @@ -0,0 +1,161 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// -------- W A R N I N G: A U T O - G E N E R A T E D C O D E !! -------- // +// PLEASE DO NOT HAND-EDIT THIS FILE. IT HAS BEEN AUTO-GENERATED. +// +//############################################################################ +// *Name: rng +// *Module Description: Random (bit/s) Generator (Pseudo Model) +//############################################################################ + +`include "prim_assert.sv" + +module rng #( + parameter int EntropyStreams = 4 +) ( + input clk_i, // Non-Jittery Clock (TLUL) + input rst_ni, // Non-Jittery Reset (TLUL) + input clk_ast_rng_i, // Jittery Clock (RNG) + input rst_ast_rng_ni, // Jittery Reset (RNG) + input rng_en_i, // RNG Enable + input rng_fips_i, // RNG FIPS Enable + input scan_mode_i, // Scan Mode + output logic [EntropyStreams-1:0] rng_b_o, // RNG Bus/Bits Output + output logic rng_val_o // RNG Bus/Bits Valid +); + +/////////////////////////////////////// +// RNG Bus using LFSR +/////////////////////////////////////// +logic rst_n; +logic[EntropyStreams-1:0] lfsr_val; + +assign rst_n = scan_mode_i ? rst_ni : rst_ni && rng_en_i; + +// These LFSR parameters have been generated with +// $ ./util/design/gen-lfsr-seed.py --width 64 --seed 15513 --prefix "Rng" +localparam int RngLfsrWidth = 64; +typedef logic [RngLfsrWidth-1:0] rng_lfsr_seed_t; +typedef logic [RngLfsrWidth-1:0][$clog2(RngLfsrWidth)-1:0] rng_lfsr_perm_t; +localparam rng_lfsr_seed_t RndCnstRngLfsrSeedDefault = 64'h1d033d20eed3b14; +localparam rng_lfsr_perm_t RndCnstRngLfsrPermDefault = { + 128'h98c2c94ab5e40420ed73f6c7396cd9e1, + 256'h58c6d7435ddb2ed1f22400c53a5aaa796ef7785e120628fbabc87f0b3928550f +}; + +prim_lfsr #( + .LfsrDw ( RngLfsrWidth ), + .EntropyDw ( 1 ), + .StateOutDw ( EntropyStreams ), + .DefaultSeed ( RndCnstRngLfsrSeedDefault ), + .StatePermEn ( 1'b1 ), + .StatePerm ( RndCnstRngLfsrPermDefault ), + .ExtSeedSVA ( 1'b0 ) // ext seed is unused +) u_rng_lfsr ( + .clk_i ( clk_i ), + .rst_ni ( rst_n ), + .lfsr_en_i ( rng_en_i ), + .seed_en_i ( 1'b0 ), + .seed_i ( '0 ), + .entropy_i ( 1'b0 ), + .state_o ( lfsr_val ) +); + +logic srate_rng_val; +logic [12-1:0] srate_cnt, srate_value; +logic [EntropyStreams-1:0] rng_b; + +`ifndef SYNTHESIS +logic [12-1:0] dv_srate_value; +// 4-bit rng_b needs at least 5 clocks. While the limit for these min and max values is 5:500, the +// default is set to a shorter window of 32:128 to avoid large runtimes. +logic [12-1:0] rng_srate_value_min = 12'd32; +logic [12-1:0] rng_srate_value_max = 12'd128; + +initial begin : rng_plusargs + void'($value$plusargs("rng_srate_value_min=%0d", rng_srate_value_min)); + void'($value$plusargs("rng_srate_value_max=%0d", rng_srate_value_max)); + `ASSERT_I(DvRngSrateMinCheck, rng_srate_value_min inside {[5:500]}) + `ASSERT_I(DvRngSrateMaxCheck, rng_srate_value_max inside {[5:500]}) + `ASSERT_I(DvRngSrateBoundsCheck, rng_srate_value_max >= rng_srate_value_min) + dv_srate_value = 12'($urandom_range(int'(rng_srate_value_min), int'(rng_srate_value_max))); + void'($value$plusargs("rng_srate_value=%0d", dv_srate_value)); + `ASSERT_I(DvSrateValueCheck, dv_srate_value inside {[5:500]}) +end + +assign srate_value = dv_srate_value; +`else +assign srate_value = 12'd120; +`endif + +logic src_busy; + +always_ff @( posedge clk_i, negedge rst_n ) begin + if ( !rst_n ) begin + srate_cnt <= 12'h000; + srate_rng_val <= 1'b0; + end else if ( (srate_cnt == srate_value) && src_busy ) begin + srate_rng_val <= 1'b0; + end else if ( srate_cnt == srate_value ) begin + srate_cnt <= 12'h000; + srate_rng_val <= 1'b1; + end else begin + srate_cnt <= srate_cnt + 1'b1; + srate_rng_val <= 1'b0; + end +end + + +//////////////////////////////////////// +// Sychronize Bus & Valid to RNG Clock +//////////////////////////////////////// +logic sync_rng_val, srate_rng_val_en; + +ast_pulse_sync u_rng_val_pulse_sync ( + .scan_mode_i ( scan_mode_i ), + // source clock domain + .clk_src_i ( clk_i ), + .rst_src_ni ( rst_n ), + .src_pulse_i ( srate_rng_val ), + .src_pulse_en_o ( srate_rng_val_en ), + .src_busy_o ( src_busy ), + // destination clock domain + .clk_dst_i ( clk_ast_rng_i ), + .rst_dst_ni ( rst_ast_rng_ni ), + .dst_pulse_o ( sync_rng_val ) +); + +// Sanple & Hold the rng_b value until the sync completes +always_ff @( posedge clk_i, negedge rst_n ) begin + if ( !rst_n ) begin + rng_b <= {EntropyStreams{1'b0}}; + end else if ( srate_rng_val_en ) begin + rng_b <= lfsr_val[EntropyStreams-1:0]; + end +end + +//Sync to RNG clock domain +always_ff @( posedge clk_ast_rng_i, negedge rst_ast_rng_ni ) begin + if (!rst_ast_rng_ni ) begin + rng_b_o <= {EntropyStreams{1'b0}}; + rng_val_o <= 1'b0; + end else if ( sync_rng_val ) begin + rng_b_o <= rng_b[EntropyStreams-1:0]; + rng_val_o <= 1'b1; + end else begin + rng_val_o <= 1'b0; + end +end + + +/////////////////////// +// Unused Signals +/////////////////////// +logic unused_sigs; +assign unused_sigs = ^{ + rng_fips_i // Used in ASIC implementation + }; + +endmodule : rng diff --git a/src/ast/rtl/sys_clk.sv b/src/ast/rtl/sys_clk.sv new file mode 100644 index 000000000..504dd77c5 --- /dev/null +++ b/src/ast/rtl/sys_clk.sv @@ -0,0 +1,69 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// -------- W A R N I N G: A U T O - G E N E R A T E D C O D E !! -------- // +// PLEASE DO NOT HAND-EDIT THIS FILE. IT HAS BEEN AUTO-GENERATED. +// +//############################################################################ +// *Name: sys_clk +// *Module Description: System Clock +//############################################################################ + +module sys_clk ( + input clk_src_sys_jen_i, // System Source Clock Jitter Enable + input clk_src_sys_en_i, // System Source Clock Enable + input clk_sys_pd_ni, // System Clock Power-down + input rst_sys_clk_ni, // System Clock Logic reset + input vcore_pok_h_i, // VCORE POK @3.3V (for OSC) + input scan_mode_i, // Scan Mode + input sys_osc_cal_i, // System Oscillator Calibrated +`ifdef AST_BYPASS_CLK + input clk_sys_ext_i, // FPGA/VERILATOR Clock input +`endif + output logic clk_src_sys_o, // System Source Clock + output logic clk_src_sys_val_o // System Source Clock Valid +); + +logic clk, osc_en, sys_clk_en; + +assign osc_en = (clk_src_sys_en_i && clk_sys_pd_ni && rst_sys_clk_ni); +assign sys_clk_en = scan_mode_i || osc_en; + +// Clock Oscilator +/////////////////////////////////////// +sys_osc u_sys_osc ( + .vcore_pok_h_i ( vcore_pok_h_i ), + .sys_en_i ( sys_clk_en ), + .sys_jen_i ( clk_src_sys_jen_i ), + .sys_osc_cal_i ( sys_osc_cal_i ), +`ifdef AST_BYPASS_CLK + .clk_sys_ext_i ( clk_sys_ext_i ), +`endif + .sys_clk_o ( clk ) +); // of u_sys_osc + +// Clock & Valid +/////////////////////////////////////// +prim_clock_buf #( + .NoFpgaBuf ( 1'b1 ) +) u_clk_sys_buf( + .clk_i ( clk ), + .clk_o ( clk_src_sys_o ) +); + +// 2-stage de-assertion +logic rst_val_n; +assign rst_val_n = sys_clk_en; + +prim_flop_2sync #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_no_scan_val_sync ( + .clk_i ( clk_src_sys_o ), + .rst_ni ( rst_val_n ), + .d_i ( 1'b1 ), + .q_o ( clk_src_sys_val_o ) +); + +endmodule : sys_clk diff --git a/src/ast/rtl/sys_osc.sv b/src/ast/rtl/sys_osc.sv new file mode 100644 index 000000000..3a3db36c7 --- /dev/null +++ b/src/ast/rtl/sys_osc.sv @@ -0,0 +1,158 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +//############################################################################ +// *Name: sys_osc +// *Module Description: System Clock Oscilator +//############################################################################ + +module sys_osc ( + input vcore_pok_h_i, // VCORE POK @3.3V + input sys_en_i, // System Source Clock Enable + input sys_jen_i, // System Source Clock Jitter Enable + input sys_osc_cal_i, // System Oscillator Calibrated +`ifdef AST_BYPASS_CLK + input clk_sys_ext_i, // FPGA/VERILATOR Clock input +`endif + output logic sys_clk_o // System Clock Output +); + +`ifndef AST_BYPASS_CLK +`ifndef SYNTHESIS +// Behavioral Model +//////////////////////////////////////// +timeunit 1ns / 1ps; + +real CLK_PERIOD; + +reg init_start; +initial init_start = 1'b0; +logic cal_sys_clk_70mhz = 1'b0; +logic [16-1:0] jrate, jrate_cnt; + +initial begin + jrate = 16'(1 << $urandom_range(7, 0)) - 1'b1; + void'($value$plusargs("cal_sys_clk_70mhz=%0b", cal_sys_clk_70mhz)); + #1; + init_start = 1'b1; + #1; + $display("\n%m: System Clock Power-up Frequency: %0d Hz", $rtoi(10**9/CLK_PERIOD)); +end + +// Enable 5us RC Delay on rise +wire en_osc_re_buf, en_osc_re, sys_jen; +buf #(ast_bhv_pkg::SYS_EN_RDLY, 0) b0 (en_osc_re_buf, (vcore_pok_h_i && sys_en_i)); +assign en_osc_re = en_osc_re_buf && init_start; +assign sys_jen = sys_jen_i && en_osc_re_buf && init_start; + +// Clock Oscillator +//////////////////////////////////////// +real CalSysClkPeriod, UncSysClkPeriod, SysClkPeriod, jitter; + +initial CalSysClkPeriod = cal_sys_clk_70mhz ? $itor( 14286 ) : // 14286ps (70MHz) + $itor( 10000 ); // 10000ps (100MHz) + +initial UncSysClkPeriod = $itor( $urandom_range(40000, 16667) ); // 40000-16667ps (25-60MHz) + +assign SysClkPeriod = (sys_osc_cal_i && init_start) ? CalSysClkPeriod : UncSysClkPeriod; + +logic clk; + +// -20% Jitter on calibrated frequency +always_ff (* xprop_off *) @( posedge clk, negedge vcore_pok_h_i ) begin + if ( !vcore_pok_h_i ) begin + jitter <= 0.0; + jrate_cnt <= '0; + end else if ( !sys_jen ) begin + jrate_cnt <= '0; + jitter <= 0.0; + end else if ( jrate_cnt == '0 ) begin + jrate_cnt <= jrate; + jitter <= cal_sys_clk_70mhz ? $itor($urandom_range(3571, 0)) : // 56MHz - 70MHz + $itor($urandom_range(2500, 0)); // 80MHz - 100MHz + end else if ( jrate_cnt > '0 ) begin + jrate_cnt <= jrate_cnt - 1'b1; + end +end + +assign CLK_PERIOD = (SysClkPeriod + jitter)/1000; + +// Free running oscillator +reg clk_osc; +initial clk_osc = 1'b1; + +always begin + #(CLK_PERIOD/2) clk_osc = ~clk_osc; +end + +logic en_osc; + +// HDL Clock Gate +logic en_clk; + +always_latch begin + if ( !clk_osc ) en_clk = en_osc; +end + +assign clk = clk_osc && en_clk; +`else // of SYNTHESIS +// SYNTHESIS/LINTER +/////////////////////////////////////// +logic en_osc_re; +assign en_osc_re = vcore_pok_h_i && sys_en_i; + +logic clk, en_osc; +assign clk = 1'b0; +`endif // of SYNTHESIS +`else // of AST_BYPASS_CLK +// VERILATOR/FPGA +/////////////////////////////////////// +logic en_osc_re; +assign en_osc_re = vcore_pok_h_i && sys_en_i; + +// Clock Oscillator +//////////////////////////////////////// +logic clk, en_osc; + +prim_clock_gating #( + .NoFpgaGate ( 1'b1 ) +) u_clk_ckgt ( + .clk_i ( clk_sys_ext_i ), + .en_i ( en_osc ), + .test_en_i ( 1'b0 ), + .clk_o ( clk ) +); +`endif + +logic en_osc_fe; + +// Syncronize en_osc to clk FE for glitch free disable +always_ff @( negedge clk, negedge vcore_pok_h_i ) begin + if ( !vcore_pok_h_i ) begin + en_osc_fe <= 1'b0; + end else begin + en_osc_fe <= en_osc_re; + end +end + +assign en_osc = en_osc_re || en_osc_fe; // EN -> 1 || EN -> 0 + +// Clock Output Buffer +//////////////////////////////////////// +prim_clock_buf #( + .NoFpgaBuf ( 1'b1 ) +) u_buf ( + .clk_i ( clk ), + .clk_o ( sys_clk_o ) +); + + +`ifdef SYNTHESIS +///////////////////////// +// Unused Signals +///////////////////////// +logic unused_sigs; +assign unused_sigs = ^{ sys_osc_cal_i, sys_jen_i }; +`endif + +endmodule : sys_osc diff --git a/src/ast/rtl/usb_clk.sv b/src/ast/rtl/usb_clk.sv new file mode 100644 index 000000000..e20222e41 --- /dev/null +++ b/src/ast/rtl/usb_clk.sv @@ -0,0 +1,147 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// -------- W A R N I N G: A U T O - G E N E R A T E D C O D E !! -------- // +// PLEASE DO NOT HAND-EDIT THIS FILE. IT HAS BEEN AUTO-GENERATED. +// +//############################################################################ +// *Name: usb_clk +// *Module Description: USB Clock +//############################################################################ + +module usb_clk ( + input vcore_pok_h_i, // VCORE POK @3.3V (for OSC) + input clk_usb_pd_ni, // USB Clock Power-down + input rst_usb_clk_ni, // USB Clock Logic reset + input clk_src_usb_en_i, // USB Source Clock Enable + input usb_ref_val_i, // USB Reference (Pulse) Valid + input usb_ref_pulse_i, // USB Reference Pulse + input clk_ast_usb_i, // USB Bufferd Clock + input rst_ast_usb_ni, // USB Bufferd Reset + input scan_mode_i, // Scan Mode + input usb_osc_cal_i, // USB Oscillator Calibrated +`ifdef AST_BYPASS_CLK + input clk_usb_ext_i, // FPGA/VERILATOR Clock input +`endif + // + output logic clk_src_usb_o, // USB Source Clock + output logic clk_src_usb_val_o // USB Source Clock Valid +); + +logic clk, osc_en, usb_clk_en; + +assign osc_en = (clk_src_usb_en_i && clk_usb_pd_ni && rst_usb_clk_ni); +assign usb_clk_en = scan_mode_i || osc_en; + +logic rst_da_n, rst_n; + +// 2-stage de-assertion +prim_flop_2sync #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_rst_da ( + .clk_i ( clk_src_usb_o ), + .rst_ni ( rst_usb_clk_ni ), + .d_i ( 1'b1 ), + .q_o ( rst_da_n ) +); + +assign rst_n = scan_mode_i ? rst_ast_usb_ni : rst_da_n; + + +/////////////////////////////////////// +// Clock Calibrate & Drift Adjusment +/////////////////////////////////////// + +// Reference Pulse Detect +/////////////////////////////////////// +logic ref_pulse_in, ref_pulse_re, src_pulse_en, src_busy; + +assign ref_pulse_in = usb_ref_pulse_i && usb_ref_val_i; + +ast_pulse_sync u_ref_pulse_sync ( + .scan_mode_i ( scan_mode_i ), + // source clock domain + .clk_src_i ( clk_ast_usb_i ), + .rst_src_ni ( rst_ast_usb_ni ), + .src_pulse_i ( ref_pulse_in ), + .src_pulse_en_o ( src_pulse_en ), + .src_busy_o ( src_busy ), + // destination clock domain + .clk_dst_i ( clk ), + .rst_dst_ni ( rst_n ), + .dst_pulse_o ( ref_pulse_re ) +); + +// Clock Oscilator +/////////////////////////////////////// +// 2-stage de-assertion +logic rst_usb_n; + +prim_flop_2sync #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_rst_ast_usb_da ( + .clk_i ( clk ), + .rst_ni ( rst_ast_usb_ni ), + .d_i ( 1'b1 ), + .q_o ( rst_usb_n ) +); + +// Sync usb_ref_val_i to clk +logic usb_ref_val; + +prim_flop_2sync #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_ref_val_sync ( + .clk_i ( clk ), + .rst_ni ( rst_usb_n ), + .d_i ( usb_ref_val_i ), + .q_o ( usb_ref_val ) +); + +usb_osc u_usb_osc ( + .vcore_pok_h_i ( vcore_pok_h_i ), + .usb_en_i (usb_clk_en ), + .usb_ref_pulse_i ( ref_pulse_re ), + .usb_ref_val_i ( usb_ref_val ), + .usb_osc_cal_i ( usb_osc_cal_i ), +`ifdef AST_BYPASS_CLK + .clk_usb_ext_i ( clk_usb_ext_i ), +`endif + .usb_clk_o ( clk ) +); // u_usb_osc + +// Clock & Valid +/////////////////////////////////////// +prim_clock_buf #( + .NoFpgaBuf ( 1'b1 ) +) u_clk_usb_buf( + .clk_i ( clk ), + .clk_o ( clk_src_usb_o ) +); + +// 2-stage de-assertion +logic rst_val_n; +assign rst_val_n = usb_clk_en; + +prim_flop_2sync #( + .Width ( 1 ), + .ResetValue ( 1'b0 ) +) u_no_scan_val_sync ( + .clk_i ( clk_src_usb_o ), + .rst_ni ( rst_val_n ), + .d_i ( 1'b1 ), + .q_o ( clk_src_usb_val_o ) +); + + +///////////////////////// +// Unused Signals +///////////////////////// +logic unused_sigs; +assign unused_sigs = ^{ src_pulse_en, src_busy }; + +endmodule : usb_clk diff --git a/src/ast/rtl/usb_osc.sv b/src/ast/rtl/usb_osc.sv new file mode 100644 index 000000000..707bba5d2 --- /dev/null +++ b/src/ast/rtl/usb_osc.sv @@ -0,0 +1,183 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +//############################################################################ +// *Name: usb_osc +// *Module Description: USB Clock Oscilator +//############################################################################ + +module usb_osc ( + input vcore_pok_h_i, // VCORE POK @3.3V + input usb_en_i, // USB Source Clock Enable + input usb_ref_pulse_i, // USB Reference Pulse + input usb_ref_val_i, // USB Reference Valid + input usb_osc_cal_i, // USB Oscillator Calibrated +`ifdef AST_BYPASS_CLK + input clk_usb_ext_i, // FPGA/VERILATOR Clock input +`endif + output logic usb_clk_o // USB Clock Output +); + +`ifndef AST_BYPASS_CLK +`ifndef SYNTHESIS +// Behavioral Model +//////////////////////////////////////// +timeunit 1ns / 1ps; + +real CLK_PERIOD; +integer beacon_rdly; +bit calibrate_usb_clk, max_drift; +localparam int MAXUSBDRIFT = 416; // 416 is +/-2% of 48MHz; 694 is +/-3% of 48MHz +integer usb_clk_drift; + +reg init_start; +initial init_start = 1'b0; + +initial begin + // With this flag activated, +calibrate_usb_clk=0. the USB clock will be calibrated + // as-soon-as the 'ast_init_done_o' gets active (using '=1' will delay by 1 ns). + // + // | <- BEACON_RDLY in ns -> | + // < un-calibrated clock >< calibrated+drift >< calibrated > + // _______________________/``````````````````````````````````````````````````` ast_init_done_o + // + if ( !$value$plusargs("calibrate_usb_clk=%0d", beacon_rdly) ) begin + beacon_rdly = 0; + calibrate_usb_clk = 1'b0; + end else begin + calibrate_usb_clk = 1'b1; + end + // Max USB drift is: +/-2% + if ( !$value$plusargs("usb_max_drift=%0b", max_drift) ) begin + max_drift = 1'b0; + end + // + #1; + init_start = 1'b1; + #1; + $display("\n%m: USB Clock Power-up Frequency: %0d Hz", $rtoi(10**9/CLK_PERIOD)); + usb_clk_drift = max_drift ? ($urandom_range(0, 1) ? MAXUSBDRIFT : -MAXUSBDRIFT) : // +2% or -2% + ($urandom_range(0, 2*MAXUSBDRIFT) - MAXUSBDRIFT); // Up to +/-2% + $display("%m: USB Clock Drift: %0d ps", usb_clk_drift); +end + +// Enable 5us RC Delay on rise +wire en_osc_re_buf, en_osc_re; +buf #(ast_bhv_pkg::USB_EN_RDLY, 0) b0 (en_osc_re_buf, (vcore_pok_h_i && usb_en_i)); +assign en_osc_re = en_osc_re_buf && init_start; + +logic usb_ref_val_buf, zero_drift; + +buf #(ast_bhv_pkg::USB_VAL_RDLY, ast_bhv_pkg::USB_VAL_FDLY) b1 + (usb_ref_val_buf, (vcore_pok_h_i && usb_ref_val_i)); + +buf #(beacon_rdly, 0) b2 (usb_beacon_on_buf, (usb_osc_cal_i && calibrate_usb_clk)); + +assign zero_drift = (usb_ref_val_buf && calibrate_usb_clk || usb_beacon_on_buf) && init_start; + +logic [4-1:0] ref_pulse_cnt_down; + +always_ff @( posedge usb_clk_o, negedge usb_ref_val_i ) begin + if ( !usb_ref_val_i ) begin + ref_pulse_cnt_down <= ast_reg_pkg::NumUsbBeaconPulses[4-1:0]; + end else if ( (ref_pulse_cnt_down > 4'h0) && usb_ref_pulse_i ) begin + ref_pulse_cnt_down <= ref_pulse_cnt_down - 1'b1; + end +end + +// Clock Oscillator +//////////////////////////////////////// +real CalUsbClkPeriod, UncUsbClkPeriod, UsbClkPeriod, drift; + +initial CalUsbClkPeriod = $itor( 1000000/48 ); // ~20833.33333ps (48MHz) +initial UncUsbClkPeriod = $itor( $urandom_range(55555, 25000) ); // 55555-25000ps (18-40MHz) + +real adj_drift; +assign adj_drift = $itor(usb_clk_drift) * $itor(ref_pulse_cnt_down) / + $itor(ast_reg_pkg::NumUsbBeaconPulses[4-1:0]); + +assign drift = zero_drift ? 0.0 : adj_drift; + +assign UsbClkPeriod = (usb_osc_cal_i && init_start) ? CalUsbClkPeriod : + UncUsbClkPeriod; +assign CLK_PERIOD = (UsbClkPeriod + drift)/1000; + +// Free running oscillator +reg clk_osc; +initial clk_osc = 1'b1; + +always begin + #(CLK_PERIOD/2) clk_osc = ~clk_osc; +end + +logic en_osc; + +// HDL Clock Gate +logic en_clk, clk; + +always_latch begin + if ( !clk_osc ) en_clk = en_osc; +end + +assign clk = clk_osc && en_clk; +`else // of SYNTHESIS +// SYNTHESIS/LINTER +/////////////////////////////////////// +logic en_osc_re; +assign en_osc_re = vcore_pok_h_i && usb_en_i; + +logic clk, en_osc; +assign clk = 1'b0; +`endif // of SYNTHESIS +`else // of AST_BYPASS_CLK +// VERILATOR/FPGA +/////////////////////////////////////// +logic en_osc_re; +assign en_osc_re = vcore_pok_h_i && usb_en_i; + +// Clock Oscillator +//////////////////////////////////////// +logic clk, en_osc; + +prim_clock_gating #( + .NoFpgaGate ( 1'b1 ) +) u_clk_ckgt ( + .clk_i ( clk_usb_ext_i ), + .en_i ( en_osc ), + .test_en_i ( 1'b0 ), + .clk_o ( clk ) +); +`endif + +logic en_osc_fe; + +// Syncronize en_osc to clk FE for glitch free disable +always_ff @( negedge clk, negedge vcore_pok_h_i ) begin + if ( !vcore_pok_h_i ) begin + en_osc_fe <= 1'b0; + end else begin + en_osc_fe <= en_osc_re; + end +end + +assign en_osc = en_osc_re || en_osc_fe; // EN -> 1 || EN -> 0 + +// Clock Output Buffer +//////////////////////////////////////// +prim_clock_buf #( + .NoFpgaBuf ( 1'b1 ) +) u_buf ( + .clk_i ( clk ), + .clk_o ( usb_clk_o ) +); + + +`ifdef SYNTHESIS +/////////////////////// +// Unused Signals +/////////////////////// +logic unused_sigs; +assign unused_sigs = ^{ usb_osc_cal_i, usb_ref_pulse_i, usb_ref_val_i }; +`endif + +endmodule : usb_osc diff --git a/src/ast/rtl/vcaon_pgd.sv b/src/ast/rtl/vcaon_pgd.sv new file mode 100644 index 000000000..e325fb446 --- /dev/null +++ b/src/ast/rtl/vcaon_pgd.sv @@ -0,0 +1,57 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +//############################################################################ +// *Name: vcaon_pgd +// *Module Description: VCAON Power Good +//############################################################################ +`ifdef SYNTHESIS +`ifndef PRIM_DEFAULT_IMPL +`define PRIM_DEFAULT_IMPL prim_pkg::ImplGeneric +`endif +`endif + +module vcaon_pgd ( + output logic vcaon_pok_o +); + +// Local signal for testing hook +logic gen_supp_a; +assign gen_supp_a = 1'b1; + +`ifndef SYNTHESIS +// Behavioral Model +//////////////////////////////////////// +// The initial is needed to clear the X of the delays at the start +// Also to force a power-up effect at the bgining. +logic init_start; + +initial begin + init_start = 1'b1; #1; + init_start = 1'b0; +end + +always @( * ) begin + if ( init_start ) begin + vcaon_pok_o <= 1'b0; + end else if ( !init_start && gen_supp_a ) begin + vcaon_pok_o <= #(ast_bhv_pkg::VCAON_POK_RDLY) gen_supp_a; + end else if ( !init_start && !gen_supp_a ) begin + vcaon_pok_o <= #(ast_bhv_pkg::VCAON_POK_FDLY) gen_supp_a; + end +end +`else +// SYNTHESIS/VERILATOR/LINTER/FPGA +/////////////////////////////////////// +localparam prim_pkg::impl_e Impl = `PRIM_DEFAULT_IMPL; + +if (Impl == prim_pkg::ImplXilinx) begin : gen_xilinx + // FPGA Specific (place holder) + /////////////////////////////////////// + assign vcaon_pok_o = gen_supp_a; +end else begin : gen_generic + assign vcaon_pok_o = gen_supp_a; +end +`endif + +endmodule : vcaon_pgd diff --git a/src/ast/rtl/vcc_pgd.sv b/src/ast/rtl/vcc_pgd.sv new file mode 100644 index 000000000..f66c4b413 --- /dev/null +++ b/src/ast/rtl/vcc_pgd.sv @@ -0,0 +1,59 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +//############################################################################ +// *Name: vcc_pgd +// *Module Description: VCC Power Good +//############################################################################ +`ifdef SYNTHESIS +`ifndef PRIM_DEFAULT_IMPL +`define PRIM_DEFAULT_IMPL prim_pkg::ImplGeneric +`endif +`endif + +module vcc_pgd ( + output logic vcc_pok_o +); + +// Local signal for testing hook +logic gen_supp_a; +assign gen_supp_a = 1'b1; + +`ifndef SYNTHESIS +// Behavioral Model +//////////////////////////////////////// +// The initial is needed to clear the X of the delays at the start +// Also to force a power-up effect at the bgining. +logic init_start; + +initial begin + init_start = 1'b1; #1; + init_start = 1'b0; +end + +always (* xprop_off *) @( * ) begin + if ( init_start ) begin + vcc_pok_o <= 1'b0; + end + if ( !init_start && gen_supp_a ) begin + vcc_pok_o <= #(ast_bhv_pkg::VCC_POK_RDLY) gen_supp_a; + end + if ( !init_start && !gen_supp_a ) begin + vcc_pok_o <= #(ast_bhv_pkg::VCC_POK_FDLY) gen_supp_a; + end +end +`else +// SYNTHESIS/VERILATOR/LINTER/FPGA +/////////////////////////////////////// +localparam prim_pkg::impl_e Impl = `PRIM_DEFAULT_IMPL; + +if (Impl == prim_pkg::ImplXilinx) begin : gen_xilinx + // FPGA Specific (place holder) + /////////////////////////////////////// + assign vcc_pok_o = gen_supp_a; +end else begin : gen_generic + assign vcc_pok_o = gen_supp_a; +end +`endif + +endmodule : vcc_pgd diff --git a/src/ast/rtl/vcmain_pgd.sv b/src/ast/rtl/vcmain_pgd.sv new file mode 100644 index 000000000..cf73b5fc6 --- /dev/null +++ b/src/ast/rtl/vcmain_pgd.sv @@ -0,0 +1,57 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +//############################################################################ +// *Name: vcmain_pgd +// *Module Description: VCMAIN Power Good +//############################################################################ +`ifdef SYNTHESIS +`ifndef PRIM_DEFAULT_IMPL +`define PRIM_DEFAULT_IMPL prim_pkg::ImplGeneric +`endif +`endif + +module vcmain_pgd ( + output logic vcmain_pok_o +); + +// Local signal for testing hook +logic gen_supp_a; +assign gen_supp_a = 1'b1; + +`ifndef SYNTHESIS +// Behavioral Model +//////////////////////////////////////// +// The initial is needed to clear the X of the delays at the start +// Also to force a power-up effect at the bgining. +logic init_start; + +initial begin + init_start = 1'b1; #1; + init_start = 1'b0; +end + +always @( * ) begin + if ( init_start ) begin + vcmain_pok_o <= 1'b0; + end else if ( !init_start && gen_supp_a ) begin + vcmain_pok_o <= #(ast_bhv_pkg::VCMAIN_POK_RDLY) gen_supp_a; + end else if ( !init_start && !gen_supp_a ) begin + vcmain_pok_o <= #(ast_bhv_pkg::VCMAIN_POK_FDLY) gen_supp_a; + end +end +`else +// SYNTHESIS/VERILATOR/LINTER/FPGA +/////////////////////////////////////// +localparam prim_pkg::impl_e Impl = `PRIM_DEFAULT_IMPL; + +if (Impl == prim_pkg::ImplXilinx) begin : gen_xilinx + // FPGA Specific (place holder) + /////////////////////////////////////// + assign vcmain_pok_o = gen_supp_a; +end else begin : gen_generic + assign vcmain_pok_o = gen_supp_a; +end +`endif + +endmodule : vcmain_pgd diff --git a/src/ast/rtl/vio_pgd.sv b/src/ast/rtl/vio_pgd.sv new file mode 100644 index 000000000..96c353f3e --- /dev/null +++ b/src/ast/rtl/vio_pgd.sv @@ -0,0 +1,59 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +//############################################################################ +// *Name: vio_pgd +// *Module Description: VIO Power Good +//############################################################################ +`ifdef SYNTHESIS +`ifndef PRIM_DEFAULT_IMPL +`define PRIM_DEFAULT_IMPL prim_pkg::ImplGeneric +`endif +`endif + +module vio_pgd ( + output logic vio_pok_o +); + +// Local signal for testing hook +logic gen_supp_a; +assign gen_supp_a = 1'b1; + +`ifndef SYNTHESIS +// Behavioral Model +//////////////////////////////////////// +// The initial is needed to clear the X of the delays at the start +// Also to force a power-up effect at the bgining. +logic init_start; + +initial begin + init_start = 1'b1; #1; + init_start = 1'b0; +end + +always (* xprop_off *) @( * ) begin + if ( init_start ) begin + vio_pok_o <= 1'b0; + end + if ( !init_start && gen_supp_a ) begin + vio_pok_o <= #(ast_bhv_pkg::VIO_POK_RDLY) gen_supp_a; + end + if ( !init_start && !gen_supp_a ) begin + vio_pok_o <= #(ast_bhv_pkg::VIO_POK_FDLY) gen_supp_a; + end +end +`else +// SYNTHESIS/VERILATOR/LINTER/FPGA +////////////////////////////////////// +localparam prim_pkg::impl_e Impl = `PRIM_DEFAULT_IMPL; + +if (Impl == prim_pkg::ImplXilinx) begin : gen_xilinx + // FPGA Specific (place holder) + /////////////////////////////////////// + assign vio_pok_o = gen_supp_a; +end else begin : gen_generic + assign vio_pok_o = gen_supp_a; +end +`endif + +endmodule : vio_pgd diff --git a/src/axi/rtl/axi_if.sv b/src/axi/rtl/axi_if.sv index daa6d45c6..89971d991 100644 --- a/src/axi/rtl/axi_if.sv +++ b/src/axi/rtl/axi_if.sv @@ -197,8 +197,9 @@ interface axi_if #(parameter integer AW = 32, parameter integer DW = 32, paramet output axi_resp_e resp); `TIME_ALGN rready `EQ__ 1; - do + do begin @(posedge clk); + end while (!rvalid); data `EQ__ rdata; resp `EQ__ axi_resp_e'(rresp); diff --git a/src/axi/rtl/axi_pkg.sv b/src/axi/rtl/axi_pkg.sv index df0f3f094..a6a4e889a 100644 --- a/src/axi/rtl/axi_pkg.sv +++ b/src/axi/rtl/axi_pkg.sv @@ -17,16 +17,17 @@ package axi_pkg; localparam int AXI_DW = 32; localparam int AXI_AW = 32; + localparam int AXI_UW = 32; localparam int AXI_IW = 1; localparam int AXI_BC = AXI_DW/8; - localparam int BW = $clog2(BC); + localparam int AXI_BW = $clog2(AXI_BC); // Data that is returned upon an a TL-UL error belonging to an instruction fetch. // Note that this data will be returned with the correct bus integrity value. - parameter logic [top_pkg::TL_DW-1:0] DataWhenInstrError = '0; + //parameter logic [top_pkg::TL_DW-1:0] DataWhenInstrError = '0; // Data that is returned upon an a TL-UL error not belonging to an instruction fetch. // Note that this data will be returned with the correct bus integrity value. - parameter logic [top_pkg::TL_DW-1:0] DataWhenError = {top_pkg::TL_DW{1'b1}}; + //parameter logic [top_pkg::TL_DW-1:0] DataWhenError = {top_pkg::TL_DW{1'b1}}; localparam AXI_LEN_MAX_VALUE = 256; // 8-bit LEN signal = 256 beats max @@ -52,25 +53,25 @@ package axi_pkg; // Transaction context typedef struct packed { - logic [AW-1:0] addr; + logic [AXI_AW-1:0] addr; logic [1:0] burst; logic [2:0] size; logic [7:0] len; - logic [UW-1:0] user; - logic [IW-1:0] id; + logic [AXI_UW-1:0] user; + logic [AXI_IW-1:0] id; logic lock; } axi_ctx_t; typedef struct packed { - logic [IW-1:0] id; - logic [UW-1:0] user; + logic [AXI_IW-1:0] id; + logic [AXI_UW-1:0] user; axi_resp_e resp; logic last; } xfer_ctx_t; typedef struct packed { - logic [AW-1:0] addr; - logic [AW-1:0] addr_mask; + logic [AXI_AW-1:0] addr; + logic [AXI_AW-1:0] addr_mask; } axi_ex_ctx_t; endpackage diff --git a/src/axi/rtl/axi_sub.sv b/src/axi/rtl/axi_sub.sv index 433c3a00c..ec19a3fe2 100644 --- a/src/axi/rtl/axi_sub.sv +++ b/src/axi/rtl/axi_sub.sv @@ -57,6 +57,7 @@ module axi_sub import axi_pkg::*; #( output logic [IW-1:0] id, output logic [DW-1:0] wdata, // Requires: Component dwidth == AXI dwidth output logic [BC-1:0] wstrb, // Requires: Component dwidth == AXI dwidth + output logic [2:0] size, input logic [DW-1:0] rdata, // Requires: Component dwidth == AXI dwidth output logic last, // Asserted with final 'dv' of a burst input logic hld, @@ -78,6 +79,7 @@ module axi_sub import axi_pkg::*; #( logic [AW-1:0] r_addr; // Byte address logic [UW-1:0] r_user; logic [IW-1:0] r_id; + logic [2:0] r_size; logic r_last; // Asserted with final 'dv' of a burst logic r_hld; logic r_err; @@ -91,6 +93,7 @@ module axi_sub import axi_pkg::*; #( logic [IW-1:0] w_id; logic [DW-1:0] w_wdata; // Requires: Component dwidth == AXI dwidth logic [BC-1:0] w_wstrb; // Requires: Component dwidth == AXI dwidth + logic [2:0] w_size; logic w_last; // Asserted with final 'dv' of a burst logic w_hld; logic w_err; @@ -122,6 +125,7 @@ module axi_sub import axi_pkg::*; #( .id (w_id ), .wdata(w_wdata), .wstrb(w_wstrb), + .wsize(w_size ), .last (w_last ), .hld (w_hld ), .err (w_err ) @@ -153,6 +157,7 @@ module axi_sub import axi_pkg::*; #( .addr (r_addr ), .user (r_user ), .id (r_id ), + .size (r_size ), .last (r_last ), .hld (r_hld ), .err (r_err ), @@ -178,6 +183,7 @@ module axi_sub import axi_pkg::*; #( .r_user (r_user ), .r_id (r_id ), .r_last (r_last ), + .r_size (r_size ), .r_hld (r_hld ), .r_err (r_err ), .r_rdata(r_rdata), @@ -189,6 +195,7 @@ module axi_sub import axi_pkg::*; #( .w_id (w_id ), .w_wdata(w_wdata), .w_wstrb(w_wstrb), + .w_size (w_size ), .w_last (w_last ), .w_hld (w_hld ), .w_err (w_err ), @@ -201,6 +208,7 @@ module axi_sub import axi_pkg::*; #( .id (id ), .wdata (wdata ), .wstrb (wstrb ), + .size (size ), .last (last ), .hld (hld ), .rd_err (rd_err ), diff --git a/src/axi/rtl/axi_sub_arb.sv b/src/axi/rtl/axi_sub_arb.sv index 646dc6c47..698756f1c 100644 --- a/src/axi/rtl/axi_sub_arb.sv +++ b/src/axi/rtl/axi_sub_arb.sv @@ -45,6 +45,7 @@ module axi_sub_arb import axi_pkg::*; #( input logic [AW-1:0] r_addr, // Byte address input logic [UW-1:0] r_user, input logic [IW-1:0] r_id, + input logic [2:0] r_size, input logic r_last, // Asserted with final 'dv' of a burst output logic r_hld, output logic r_err, @@ -58,6 +59,7 @@ module axi_sub_arb import axi_pkg::*; #( input logic [IW-1:0] w_id, input logic [DW-1:0] w_wdata, // Requires: Component dwidth == AXI dwidth input logic [BC-1:0] w_wstrb, // Requires: Component dwidth == AXI dwidth + input logic [2:0] w_size, input logic w_last, // Asserted with final 'dv' of a burst output logic w_hld, output logic w_err, @@ -70,6 +72,7 @@ module axi_sub_arb import axi_pkg::*; #( output logic [IW-1:0] id, output logic [DW-1:0] wdata, // Requires: Component dwidth == AXI dwidth output logic [BC-1:0] wstrb, // Requires: Component dwidth == AXI dwidth + output logic [2:0] size, output logic last, // Asserted with final 'dv' of a burst input logic hld, input logic rd_err, // Asserts with rdata for reads (when C_LAT > 0) @@ -124,6 +127,7 @@ module axi_sub_arb import axi_pkg::*; #( user = r_win ? r_user : w_user; id = r_win ? r_id : w_id ; last = r_win ? r_last : w_last; + size = r_win ? r_size : w_size; r_hld = hld || !r_win; w_hld = hld || r_win; r_err = rd_err; diff --git a/src/axi/rtl/axi_sub_rd.sv b/src/axi/rtl/axi_sub_rd.sv index 3538984bc..3b728f397 100644 --- a/src/axi/rtl/axi_sub_rd.sv +++ b/src/axi/rtl/axi_sub_rd.sv @@ -59,11 +59,13 @@ module axi_sub_rd import axi_pkg::*; #( output logic [AW-1:0] addr, // Byte address output logic [UW-1:0] user, output logic [IW-1:0] id, + output logic [2:0] size, output logic last, // Asserted with final 'dv' of a burst input logic hld, input logic err, - input logic [DW-1:0] rdata // Requires: Component dwidth == AXI dwidth + input logic [DW-1:0] rdata // Requires: Component dwidth == AXI dwidth, + ); // --------------------------------------- // @@ -185,6 +187,7 @@ module axi_sub_rd import axi_pkg::*; #( always_comb addr = {txn_ctx.addr[AW-1:BW],BW'(0)}; always_comb user = txn_ctx.user; always_comb id = txn_ctx.id; + always_comb size = txn_ctx.size; // Use full address to calculate next address (in case of arsize < data width) axi_addr #( diff --git a/src/axi/rtl/axi_sub_wr.sv b/src/axi/rtl/axi_sub_wr.sv index f468dc66a..c50961582 100644 --- a/src/axi/rtl/axi_sub_wr.sv +++ b/src/axi/rtl/axi_sub_wr.sv @@ -57,6 +57,7 @@ module axi_sub_wr import axi_pkg::*; #( output logic [IW-1:0] id, output logic [DW-1:0] wdata, // Requires: Component dwidth == AXI dwidth output logic [BC-1:0] wstrb, // Requires: Component dwidth == AXI dwidth + output logic [2:0] wsize, output logic last, // Asserted with final 'dv' of a burst input logic hld, input logic err @@ -271,7 +272,7 @@ module axi_sub_wr import axi_pkg::*; #( .OPT_OUTREG (0 ), // .OPT_PASSTHROUGH(0 ), - .DW (DW + BC + 1), + .DW (DW + BC + 3 + 1), .OPT_INITIAL (1'b1) ) i_dp_skd ( .i_clk (clk ), @@ -280,11 +281,13 @@ module axi_sub_wr import axi_pkg::*; #( .o_ready(txn_wready ), .i_data ({s_axi_if.wdata, s_axi_if.wstrb, + txn_ctx.size, s_axi_if.wlast}), .o_valid(dv_pre ), .i_ready(!hld ), .o_data ({wdata, wstrb, + wsize, last } ) ); diff --git a/src/axi2tlul/config/compile.yml b/src/axi2tlul/config/compile.yml new file mode 100644 index 000000000..37e5868d0 --- /dev/null +++ b/src/axi2tlul/config/compile.yml @@ -0,0 +1,29 @@ +--- +provides: [axi2tlul] +schema_version: 2.4.0 +requires: + - axi_pkg + - axi_sub + - tlul_pkg + - caliptra_prim_secded +targets: + rtl: + directories: [$COMPILE_ROOT/rtl] + files: + - $COMPILE_ROOT/rtl/axi2tlul_cmd_intg_gen.sv + - $COMPILE_ROOT/rtl/sub2tlul.sv + - $COMPILE_ROOT/rtl/axi2tlul.sv + tops: [axi2tlul] +--- +provides: [axi2tlul_tb] +schema_version: 2.4.0 +requires: + - axi2tlul +targets: + tb: + directories: [$COMPILE_ROOT/tb] + files: + - $COMPILE_ROOT/tb/memory_model.sv + - $COMPILE_ROOT/tb/axi2tlul_tb.sv + tops: [axi2tlul_tb] + diff --git a/src/axi2tlul/rtl/axi2tlul.sv b/src/axi2tlul/rtl/axi2tlul.sv new file mode 100644 index 000000000..583fe39af --- /dev/null +++ b/src/axi2tlul/rtl/axi2tlul.sv @@ -0,0 +1,133 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND; either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// ------------------------------------------------------------- +// AXI TLUL Gasket +// ------------------------------------------------------------- +// Description: +// Shim to convert AXI protocol writes into TLUL +// +// Limitations: +// - When multiple ID tracking is enabled; write responses are returned in the +// same order they are received; regardless of ID. +// +// ------------------------------------------------------------- + +module axi2tlul + import axi_pkg::*; + #( + parameter AW = 32, // Address Width + parameter DW = 32, // Data Width + BC = DW/8, // Byte Count + BW = $clog2(BC), // Byte count Width + parameter UW = 32, // User Width + parameter IW = 1, // ID Width + ID_NUM = 1 << IW, // Don't override + + parameter EX_EN = 0, // Enable exclusive access tracking w/ AxLOCK + parameter C_LAT = 0 // Component latency in clock cycles from (dv&&!hld) -> rdata + // Must be const per component + // For registers; typically 0 + // For SRAM; 1 or more + ) ( + input clk, + input rst_n, + + // AXI INF + axi_if.w_sub s_axi_w_if, + axi_if.r_sub s_axi_r_if, + + // TLUL INF + output tlul_pkg::tl_h2d_t tl_o, + input tlul_pkg::tl_d2h_t tl_i + ); + + // Subordinate INF + logic dv; + logic [AW-1:0] addr; + logic write; + logic [UW-1:0] user; + logic [IW-1:0] id; + logic [DW-1:0] wdata; // Requires: Component dwidth == AXI dwidth + logic [BC-1:0] wstrb; // Requires: Component dwidth == AXI dwidth + logic [2:0] size; + logic [DW-1:0] rdata; // Requires: Component dwidth == AXI dwidth + logic last; // Asserted with final 'dv' of a burst + logic hld; + logic rd_err; + logic wr_err; + + axi_sub #( + .AW (AW), + .DW (DW), + .UW (UW), + .IW (IW), + .EX_EN (EX_EN) + + ) i_axi_sub ( + .clk (clk ), + .rst_n (rst_n ), + + // AXI INF + .s_axi_w_if (s_axi_w_if ), + .s_axi_r_if (s_axi_r_if ), + + // Subordinate INF + .dv (dv ), + .addr (addr ), + .write (write ), + .user (user ), + .id (id ), + .wdata (wdata ), + .wstrb (wstrb ), + .size (size ), + .rdata (rdata ), + .last (last ), + .hld (hld ), + .rd_err (rd_err ), + .wr_err (wr_err ) + ); + + sub2tlul #( + .AW (AW), + .DW (DW), + .UW (UW), + .IW (IW), + .EX_EN (EX_EN) + ) i_sub2tlul ( + .clk (clk ), + .rst_n (rst_n ), + + // Subordinate INF + .dv (dv ), + .addr (addr ), + .write (write ), + .user (user ), + .id (id ), + .wdata (wdata ), + .wstrb (wstrb ), + .size (size ), + .rdata (rdata ), + .last (last ), + .hld (hld ), + .rd_err (rd_err ), + .wr_err (wr_err ), + + // TLUL INF + .tl_o (tl_o ), + .tl_i (tl_i ) + ); + +endmodule \ No newline at end of file diff --git a/src/axi2tlul/rtl/axi2tlul_cmd_intg_gen.sv b/src/axi2tlul/rtl/axi2tlul_cmd_intg_gen.sv new file mode 100644 index 000000000..3f4406479 --- /dev/null +++ b/src/axi2tlul/rtl/axi2tlul_cmd_intg_gen.sv @@ -0,0 +1,65 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +module axi2tlul_cmd_intg_gen + import axi_pkg::*; + import caliptra_prim_pkg::*; + import tlul_pkg::*; + #( + parameter bit EnableDataIntgGen = 1'b1 + ) ( + input caliptra_prim_mubi_pkg::mubi4_t instr_type_i, + input [AXI_AW-1:0] addr_i, + input tl_a_op_e opcode_i, + input [TL_DBW-1:0] mask_i, + input [TL_DW-1:0] data_i, + + output [H2DCmdIntgWidth-1:0] cmd_intg, + output [DataIntgWidth-1:0] data_intg + ); + + + + logic [H2DCmdMaxWidth-1:0] unused_cmd_payload; + tl_h2d_cmd_intg_t cmd; + + assign cmd = { instr_type_i, + addr_i, + opcode_i, + mask_i }; + + caliptra_prim_secded_inv_64_57_enc u_cmd_gen ( + .data_i(H2DCmdMaxWidth'(cmd)), + .data_o({cmd_intg, unused_cmd_payload}) + ); + + logic [TL_DW-1:0] data_final; + + if (EnableDataIntgGen) begin : gen_data_intg + assign data_final = data_i; + + logic [DataMaxWidth-1:0] unused_data; + caliptra_prim_secded_inv_39_32_enc u_data_gen ( + .data_i(DataMaxWidth'(data_final)), + .data_o({data_intg, unused_data}) + ); + end else begin : gen_passthrough_data_intg + assign data_final = data_i; + assign data_intg = '0; + end + + `CALIPTRA_ASSERT_INIT(PayMaxWidthCheck_A, $bits(tl_h2d_cmd_intg_t) <= H2DCmdMaxWidth) + +endmodule : axi2tlul_cmd_intg_gen \ No newline at end of file diff --git a/src/axi2tlul/rtl/sub2tlul.sv b/src/axi2tlul/rtl/sub2tlul.sv new file mode 100644 index 000000000..b688be120 --- /dev/null +++ b/src/axi2tlul/rtl/sub2tlul.sv @@ -0,0 +1,131 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// ------------------------------------------------------------- +// AXI TLUL Write Shim +// ------------------------------------------------------------- +// Description: +// Shim to convert AXI protocol writes into TLUL +// +// Limitations: +// - When multiple ID tracking is enabled, write responses are returned in the +// same order they are received, regardless of ID. +// +// ------------------------------------------------------------- + +module sub2tlul + import axi_pkg::*; + import tlul_pkg::*; + #( + parameter AW = 32, // Address Width + parameter DW = 32, // Data Width + BC = DW/8, // Byte Count + BW = $clog2(BC), // Byte count Width + parameter UW = 32, // User Width + parameter IW = 1, // ID Width + ID_NUM = 1 << IW, // Don't override + + parameter EX_EN = 0, // Enable exclusive access tracking w/ AxLOCK + parameter C_LAT = 0 // Component latency in clock cycles from (dv&&!hld) -> rdata + // Must be const per component + // For registers, typically 0 + // For SRAM, 1 or more + ) ( + input clk, + input rst_n, + + //COMPONENT INF + input logic dv, + input logic [AW-1:0] addr, // Byte address + input logic write, + input logic [UW-1:0] user, + input logic [IW-1:0] id, + input logic [DW-1:0] wdata, // Requires: Component dwidth == AXI dwidth + input logic [BC-1:0] wstrb, // Requires: Component dwidth == AXI dwidth + input logic [2:0] size, + output logic [DW-1:0] rdata, // Requires: Component dwidth == AXI dwidth + input logic last, // Asserted with final 'dv' of a burst + output logic hld, + output logic rd_err, + output logic wr_err, + + //TLUL INF + output tlul_pkg::tl_h2d_t tl_o, + input tlul_pkg::tl_d2h_t tl_i + ); + + // Setting instruction type to False as all accesses to OTP are data accesses + localparam caliptra_prim_mubi_pkg::mubi4_t instr_type = caliptra_prim_mubi_pkg::MuBi4False; + + // AXI SUB TO TL-UL REQUEST + logic rdy_for_next_txn; + logic pending_txn; + tl_a_op_e opcode; + always @(posedge clk or negedge rst_n) begin + if (!rst_n) begin + rdy_for_next_txn <= 1; + pending_txn <= 0; + end + else if (dv && tl_i.a_ready && ~tl_i.d_valid) begin + rdy_for_next_txn <= 0; + pending_txn <= 1; + end + else if (dv && tl_i.d_valid) begin + rdy_for_next_txn <= 1; + pending_txn <= 0; + end + end + + assign opcode = !write ? Get : ((wstrb == '1) ? PutFullData : PutPartialData); + + assign tl_o.a_address = addr; + assign tl_o.a_valid = dv & rdy_for_next_txn & ~pending_txn; + assign tl_o.a_opcode = opcode; + assign tl_o.a_source = id; + assign tl_o.a_mask = wstrb; + assign tl_o.a_data = wdata; + assign tl_o.a_size = size; + + // TL-UL TO AXI SUB RESPONSE + assign rdata = (dv && tl_i.d_valid && (tl_i.d_source == id)) ? tl_i.d_data : 0; + assign hld = dv & tl_o.a_valid & (~tl_i.a_ready | ~tl_i.d_valid); + //assign tl_o.d_ready = dv; //alternately tie to 1’b1. Any harm in passing through dv? + assign tl_o.d_ready = 1'b1; //alternately tie to 1’b1. Any harm in passing through dv? + assign rd_err = ~write & tl_i.d_error & tl_i.d_valid; + assign wr_err = write & tl_i.d_error & tl_i.d_valid; + + //TLUL unused signals: a_param, d_param, d_sink, d_size (dropped) + assign tl_o.a_param = 3'h0; + + logic [H2DCmdIntgWidth-1:0] cmd_intg; + logic [DataIntgWidth-1:0] data_intg; + + axi2tlul_cmd_intg_gen #( + .EnableDataIntgGen (1) + ) u_axi2tlul_cmd_intg_gen ( + .instr_type_i (instr_type), + .addr_i (addr), + .opcode_i (opcode), + .mask_i (wstrb), + .data_i (wdata), + .cmd_intg (cmd_intg), + .data_intg (data_intg) + ); + + assign tl_o.a_user = { instr_type, + cmd_intg, + data_intg }; + +endmodule \ No newline at end of file diff --git a/src/axi2tlul/stimulus/tests/directed/axi2tlul_basic_test.yml b/src/axi2tlul/stimulus/tests/directed/axi2tlul_basic_test.yml new file mode 100644 index 000000000..bf50bfc01 --- /dev/null +++ b/src/axi2tlul/stimulus/tests/directed/axi2tlul_basic_test.yml @@ -0,0 +1,17 @@ +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +--- +testname: axi2tlul_basic_test +seed: 1 \ No newline at end of file diff --git a/src/axi2tlul/tb/axi2tlul_scoreboard.sv b/src/axi2tlul/tb/axi2tlul_scoreboard.sv new file mode 100644 index 000000000..e69de29bb diff --git a/src/axi2tlul/tb/axi2tlul_tb.sv b/src/axi2tlul/tb/axi2tlul_tb.sv new file mode 100644 index 000000000..3747a2ba5 --- /dev/null +++ b/src/axi2tlul/tb/axi2tlul_tb.sv @@ -0,0 +1,212 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// ------------------------------------------------------------- +// AXI TLUL Write Shim +// ------------------------------------------------------------- +// Description: +// Shim to convert AXI protocol writes into TLUL +// +// Limitations: +// - When multiple ID tracking is enabled, write responses are returned in the +// same order they are received, regardless of ID. +// +// ------------------------------------------------------------- + +module axi2tlul_tb (); + import axi_pkg::*; + + + //axi_if.w_sub axi_w_sub_if; + //axi_if.r_sub axi_r_sub_if; + + // TLUL signals that connect AXI2TL gasket with TLUL device + tlul_pkg::tl_h2d_t tl_i; + tlul_pkg::tl_d2h_t tl_o; + + // Clock and reset + logic clk; + logic rst_n; + + localparam ADDR_WIDTH = 32; + localparam DATA_WIDTH = 32; + localparam USER_WIDTH = 32; + localparam ID_WIDTH = 1; + + // AXI IF connects AXI mgr to AXI2TL + axi_if #( + .AW (ADDR_WIDTH), + .DW (DATA_WIDTH), + .IW (ID_WIDTH), + .UW (USER_WIDTH) + ) axi_sub_if ( + .clk (clk), + .rst_n (rst_n) + ); + + // Memory model interface signals + logic [ADDR_WIDTH-1:0] mem_address; + logic [DATA_WIDTH-1:0] mem_rdata; + logic [DATA_WIDTH-1:0] mem_wdata; + logic mem_write; + + // 100 MHz clock + initial begin + clk = 1'b0; + forever #5 clk = ~clk; + end + + // Reset + initial begin + rst_n = 1'b0; + #10; + rst_n = 1'b1; + end + + // Instantiate DUT + axi2tlul #( + .AW (ADDR_WIDTH), + .DW (DATA_WIDTH), + .UW (DATA_WIDTH), + .IW (ID_WIDTH ), + .EX_EN (0 ), + .C_LAT (0 ) + ) DUT ( + .clk (clk), + .rst_n (rst_n), + + // AXI INF + .s_axi_r_if (axi_sub_if.r_sub), + .s_axi_w_if (axi_sub_if.w_sub), + + //TLUL INF + .tl_i (tl_o), + .tl_o (tl_i) + ); + + // Instantiate memory model + // Memory modele instance + memory_model #( + .TL_AW (ADDR_WIDTH), + .TL_DW (DATA_WIDTH), + .TL_AIW (ID_WIDTH), + .TL_DIW (ID_WIDTH), + .TL_AUW (USER_WIDTH), + .TL_DUW (USER_WIDTH), + .NUM_WORDS (256) + ) i_mem_model ( + .clk (clk), + .rst_n (rst_n), + //TLUL INF + .tl_i (tl_i ), + .tl_o (tl_o ) + /* + .addr (mem_address), + .wr_en (mem_write), + .wdata (mem_wdata), + .rdata (mem_rdata) + */ + ); + + logic [ADDR_WIDTH-1:0] addr; + logic [DATA_WIDTH-1:0] read_data; + axi_pkg::axi_resp_e read_rsp; + logic [DATA_WIDTH-1:0] write_data; + logic [3:0] wstrb; + logic [USER_WIDTH-1:0] user; + logic [ID_WIDTH-1:0] id; + + initial begin + axi_sub_if.araddr = '0; + axi_sub_if.arburst = '0; + axi_sub_if.arsize = '0; + axi_sub_if.arlen = '0; + axi_sub_if.aruser = '0; + axi_sub_if.arid = '0; + axi_sub_if.arlock = 0; + axi_sub_if.arvalid = 0; + axi_sub_if.rready = 0; + + axi_sub_if.awaddr = '0; + axi_sub_if.awid = '0; + axi_sub_if.awburst = '0; + axi_sub_if.awlen = '0; + axi_sub_if.awlock = 0; + axi_sub_if.awsize = '0; + axi_sub_if.awuser = '0; + axi_sub_if.awvalid = 0; + axi_sub_if.wdata = '0; + axi_sub_if.wvalid = 0; + axi_sub_if.wlast = 0; + axi_sub_if.wstrb = '0; + axi_sub_if.bready = 0; + end + + + // Issue AXI transactions via AXI IF + initial begin + + repeat (5) @(posedge clk); + addr = 32'h000000FF; + user = 32'h00000001; + id = 1'b1; + + $display("Reading location 0x%x", addr); + axi_sub_if.axi_read_single(addr, user, id, clk, read_data, read_rsp); + @(posedge clk); + readVerify(read_data, 32'h000000FC); + + repeat (5) @(posedge clk); + addr = 32'h000000C0; + $display("Reading location 0x%x", addr); + axi_sub_if.axi_read_single(addr, user, id, clk, read_data, read_rsp); + @(posedge clk); + readVerify(read_data, 32'h000000C0); + + repeat (5) @(posedge clk); + addr = 32'h000000cc; + write_data = 32'h00C0FFEE; + $display("Writing location 0x%x. Data = 0x%x", addr, write_data); + axi_sub_if.axi_write_single(addr, user, id, clk, write_data, read_rsp); + @(posedge clk); + axi_sub_if.axi_read_single(addr, user, id, clk, read_data, read_rsp); + @(posedge clk); + readVerify(read_data, write_data); + + repeat (5) @(posedge clk); + addr = 32'h000000A0; + write_data = 32'h0C001DAD; + $display("Writing location 0x%x. Data = 0x%x", addr, write_data); + axi_sub_if.axi_write_single(addr, user, id, clk, write_data, read_rsp); + @(posedge clk); + axi_sub_if.axi_read_single(addr, user, id, clk, read_data, read_rsp); + @(posedge clk); + readVerify(read_data, write_data); + #100; + + $finish; + end + + task readVerify (input logic[DATA_WIDTH-1:0] read_data, + input logic[DATA_WIDTH-1:0] expected_data); + if ((read_rsp == AXI_RESP_OKAY) && (read_data == expected_data)) begin + $display($time, " TEST PASS - Read Data = 0x%x, Expected Data = 0x%x", read_data, expected_data); + end + else begin + $display($time, " TEST FAIL - Read data does not match expected data. Read Data = 0x%x, Expected Data = 0x%x", read_data, expected_data); + end + endtask + +endmodule diff --git a/src/fuse_ctrl/rtl/axi_sram_byte.sv b/src/axi2tlul/tb/axi2tlul_tester.sv similarity index 52% rename from src/fuse_ctrl/rtl/axi_sram_byte.sv rename to src/axi2tlul/tb/axi2tlul_tester.sv index 908c69c46..60e621f44 100644 --- a/src/fuse_ctrl/rtl/axi_sram_byte.sv +++ b/src/axi2tlul/tb/axi2tlul_tester.sv @@ -13,4 +13,19 @@ // limitations under the License. // -module axi_sram_byte \ No newline at end of file +// ------------------------------------------------------------- +// AXI TLUL Write Shim +// ------------------------------------------------------------- +// Description: +// Shim to convert AXI protocol writes into TLUL +// +// Limitations: +// - When multiple ID tracking is enabled, write responses are returned in the +// same order they are received, regardless of ID. +// +// ------------------------------------------------------------- + +module axi2tlul_tester(axi_mgr_bfm axi_mgr_bfm, tlul_dev_bfm tlul_dev_bfm); + + +endmodule diff --git a/src/axi2tlul/tb/axi_mgr.sv b/src/axi2tlul/tb/axi_mgr.sv new file mode 100644 index 000000000..d09d4f3be --- /dev/null +++ b/src/axi2tlul/tb/axi_mgr.sv @@ -0,0 +1,99 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// ------------------------------------------------------------- +// AXI TLUL Write Shim +// ------------------------------------------------------------- +// Description: +// Shim to convert AXI protocol writes into TLUL +// +// Limitations: +// - When multiple ID tracking is enabled, write responses are returned in the +// same order they are received, regardless of ID. +// +// ------------------------------------------------------------- + +import axi_pkg::*; + +module axi_mgr + #( + parameter AW = 32, // Address Width + parameter DW = 32, // Data Width + BC = DW/8, // Byte Count + BW = $clog2(BC), // Byte count Width + parameter UW = 32, // User Width + parameter IW = 1, // ID Width + ID_NUM = 1 << IW, // Don't override + + parameter EX_EN = 0, // Enable exclusive access tracking w/ AxLOCK + parameter C_LAT = 0 // Component latency in clock cycles from (dv&&!hld) -> rdata + // Must be const per component + // For registers, typically 0 + // For SRAM, 1 or more + ) ( + input logic clk, + input logic rst_n, + + // AXI Manager INF + axi_if.w_mgr m_axi_w_if, + axi_if.r_mgr m_axi_r_if + ); + + logic [DW-1:0] rdata; + + task readSingle(input logic[AW-1:0] addr, input [2:0] size); + m_axi_r_if.araddr = addr; + m_axi_r_if.arburst = AXI_BURST_FIXED; + m_axi_r_if.arlen = 1; // number of beats (transfer) in the burst + m_axi_r_if.arsize = size; //number of bytes per beat (transter) + m_axi_r_if.arvalid = 1; + + // Wait for AXI device to assert ARREADY + while (!m_axi_r_if.arrready) begin + @(posedge clk); + end + + //Deaasert ARVALID after ARREADY is asserted + rdata = m_axi_r_if.rdata; + m_axi_r_if.arvalid = 0; + endtask: readSingle + + task writeSingle(input logic[AW-1:0] addr, input [DW-1:0] data, input [2:0] size); + m_axi_w_if.awaddr = addr; + m_axi_w_if.awburst = AXI_BURST_FIXED; + m_axi_w_if.awlen = 1; // number of beats (transfers) in the burst + m_axi_w_if.awsize = size; + m_axi_w_if.awvalid = 1; + + // Wait for AXI device to assert AWREADY + while (!m_axi_w_if.awready) begin + @(posedge clk); + end + + // Data Phase + m_axi_w_if.wdata = data; + m_axi_w_if.wstrb = '1; + m_axi_w_if.wvalid = 1; + + // Wait for AXI device to assert WREADY + while (!m_axi_w_if.wready) begin + @(posedge clk); + end + + // Deassert AWVALID after WREADY has been asserted + m_axi_w_if.awvalid = 0; + endtask: writeSingle + +endmodule: axi_mgr \ No newline at end of file diff --git a/src/axi2tlul/tb/memory_model.sv b/src/axi2tlul/tb/memory_model.sv new file mode 100644 index 000000000..15210b6b6 --- /dev/null +++ b/src/axi2tlul/tb/memory_model.sv @@ -0,0 +1,91 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// ------------------------------------------------------------- +// AXI TLUL Write Shim +// ------------------------------------------------------------- +// Description: +// Shim to convert AXI protocol writes into TLUL +// +// Limitations: +// - When multiple ID tracking is enabled, write responses are returned in the +// same order they are received, regardless of ID. +// +// ------------------------------------------------------------- +module memory_model + import tlul_pkg::*; +#( + parameter TL_AW = 32, + parameter TL_DW = 32, // = TL_DBW * 8, TL_DBW must be a power-of-two + parameter TL_AIW = 8, // a_source, d_source + parameter TL_DIW = 1, // d_sink + parameter TL_AUW = 21, // a_user + parameter TL_DUW = 14, // d_user + TL_DBW = (TL_DW>>3), + TL_SZW = $clog2($clog2(TL_DBW)+1), + parameter NUM_WORDS = 64 +) ( + input logic clk, + input logic rst_n, + + // TLUL INF + input tlul_pkg::tl_h2d_t tl_i, + output tlul_pkg::tl_d2h_t tl_o + /* + input logic [ADDR_WIDTH-1:0] addr, + input logic wr_en, + input logic [DATA_WIDTH-1:0] wdata, + output logic [DATA_WIDTH-1:0] rdata + */ +); + + // Parameterized memory array + logic [TL_DW-1:0] mem [0:NUM_WORDS-1]; // Parameterized memory array + + always_ff @(posedge clk or negedge rst_n) begin + if (!rst_n) begin + // Initialize memory to 0 + foreach (mem[i]) mem[i] <= i; + tl_o.d_opcode <= AccessAck; + tl_o.d_valid <= 0; + tl_o.d_data <= '0; + tl_o.d_error <= 0; + tl_o.d_source <= '0; + tl_o.a_ready <= 1; + end + + else if (tl_i.a_valid) begin + // Write Transaction + if (tl_i.a_opcode == PutFullData) begin + tl_o.a_ready <= 1; + tl_o.d_opcode <= AccessAck; + tl_o.d_valid <= 1; + mem[tl_i.a_address] <= tl_i.a_data; + end + // Read Transaction + else if (tl_i.a_opcode == Get) begin + tl_o.a_ready <= 1; + tl_o.d_opcode <= AccessAckData; + tl_o.d_valid <= 1; + tl_o.d_data <= mem[tl_i.a_address]; + tl_o.d_source <= tl_i.a_source; + end + end + else if (tl_i.d_ready) begin + tl_o.d_valid <= 0; + end + end + +endmodule \ No newline at end of file diff --git a/src/axi2tlul/tb/tlul_dev.sv b/src/axi2tlul/tb/tlul_dev.sv new file mode 100644 index 000000000..a4da12101 --- /dev/null +++ b/src/axi2tlul/tb/tlul_dev.sv @@ -0,0 +1,132 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// ------------------------------------------------------------- +// AXI TLUL Write Shim +// ------------------------------------------------------------- +// Description: +// Shim to convert AXI protocol writes into TLUL +// +// Limitations: +// - When multiple ID tracking is enabled, write responses are returned in the +// same order they are received, regardless of ID. +// +// ------------------------------------------------------------- + + +module tlul_dev + import tlul_pkg::*; + #( + parameter TL_AW = 32, + parameter TL_DW = 32, // = TL_DBW * 8, TL_DBW must be a power-of-two + parameter TL_AIW = 8, // a_source, d_source + parameter TL_DIW = 1, // d_sink + parameter TL_AUW = 21, // a_user + parameter TL_DUW = 14, // d_user + TL_DBW = (TL_DW>>3), + TL_SZW = $clog2($clog2(TL_DBW)+1) + ) ( + input logic clk, + input logic rst_n, + + // TLUL INF + input tlul_pkg::tl_h2d_t tl_i, + output tlul_pkg::tl_d2h_t tl_o, + + // Memory model interface + output logic [TL_AW-1:0] address, + output logic [TL_DW-1:0] wdata, + input logic [TL_DW-1:0] rdata, + output logic write + ); + + // Address Phase + always_comb begin + if (tl_i.a_valid) begin + address = tl_i.a_address; + tl_o.a_ready = 1; + tl_o.d_opcode = AccessAck; + if (tl_i.a_opcode == Get) begin + write = 0; + end + else if (tl_i.a_opcode == PutFullData) begin // TODO: Need to support PulPartialData + write = 1; + wdata = tl_i.a_data; + tl_o.d_valid = 1; + end + end + end + + // Read Data Phase + always_comb begin + if (tl_i.a_valid && (tl_i.a_opcode == Get)) begin + tl_o.d_data = rdata; + tl_o.d_valid = 1; + tl_o.d_opcode = AccessAckData; + if (tl_i.d_ready) tl_o.d_valid = 0; + end + end + +/* + task readSingle(); + if (tl_i.a_valid && (tl_i.a_opcode == Get)) begin + // Address Phase + write = 0; + address = tl_i.a_address; + tl_o.a_ready = 1; + tl_o.d_opcode = AccessAck; + @(posedge clk); + + // Data Phase + tl_o.d_data = rdata; + tl_o.d_valid = 1; + tl_o.d_opcode = AccessAckData; + + // Wait for host to assert D_READY + while (!tl_i.d_ready) begin + @(posedge clk); + end + + // Deassert D_VALID once D_READY has been asserted + tl_o.d_valid = 0; + end + endtask + + task writeSingle(); + if (tl_i.a_valid && (tl_i.a_opcode == PutFullData)) begin + // Address Phase + write = 1; + address = tl_i.a_address; + wdata = tl_i.a_data; + tl_o.a_ready = 1; + tl_o.d_opcode = AccessAck; + @(posedge clk); + + // Data Phase + tl_o.d_valid = 1; + + // Wait for host to assert D_READY + while (!tl_i.d_ready) begin + @(posedge clk); + end + + // Deassert D_VALID once D_READY has been asserted + tl_o.d_valid = 0; + end + endtask: writeSingle + + */ + +endmodule: tlul_dev diff --git a/src/caliptra_prim/config/compile.yml b/src/caliptra_prim/config/compile.yml index 504be8c71..f89a74deb 100644 --- a/src/caliptra_prim/config/compile.yml +++ b/src/caliptra_prim/config/compile.yml @@ -1,6 +1,8 @@ --- provides: [caliptra_prim_pkg] schema_version: 2.4.0 +requires: + - libs targets: rtl: directories: [$COMPILE_ROOT/rtl] @@ -12,6 +14,9 @@ targets: - $COMPILE_ROOT/rtl/caliptra_prim_cipher_pkg.sv - $COMPILE_ROOT/rtl/caliptra_prim_pkg.sv - $COMPILE_ROOT/rtl/caliptra_prim_sparse_fsm_pkg.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_pkg.sv + - $COMPILE_ROOT/rtl/caliptra_prim_otp_pkg.sv + - $COMPILE_ROOT/rtl/caliptra_prim_ram_1p_pkg.sv tb: directories: [$COMPILE_ROOT/rtl] files: @@ -22,6 +27,9 @@ targets: - $COMPILE_ROOT/rtl/caliptra_prim_cipher_pkg.sv - $COMPILE_ROOT/rtl/caliptra_prim_pkg.sv - $COMPILE_ROOT/rtl/caliptra_prim_sparse_fsm_pkg.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_pkg.sv + - $COMPILE_ROOT/rtl/caliptra_prim_otp_pkg.sv + - $COMPILE_ROOT/rtl/caliptra_prim_ram_1p_pkg.sv --- provides: [caliptra_prim] schema_version: 2.4.0 @@ -39,6 +47,14 @@ targets: - $COMPILE_ROOT/rtl/caliptra_prim_cdc_rand_delay.sv - $COMPILE_ROOT/rtl/caliptra_prim_flop_2sync.sv - $COMPILE_ROOT/rtl/caliptra_prim_lfsr.sv + - $COMPILE_ROOT/rtl/caliptra_prim_double_lfsr.sv + - $COMPILE_ROOT/rtl/caliptra_prim_arbiter_fixed.sv + - $COMPILE_ROOT/rtl/caliptra_prim_arbiter_tree.sv + - $COMPILE_ROOT/rtl/caliptra_prim_edn_req.sv + - $COMPILE_ROOT/rtl/caliptra_prim_present.sv + - $COMPILE_ROOT/rtl/caliptra_prim_lc_sender.sv + - $COMPILE_ROOT/rtl/caliptra_prim_sync_reqack.sv + - $COMPILE_ROOT/rtl/caliptra_prim_sync_reqack_data.sv - $COMPILE_ROOT/rtl/caliptra_prim_mubi4_sync.sv - $COMPILE_ROOT/rtl/caliptra_prim_diff_decode.sv - $COMPILE_ROOT/rtl/caliptra_prim_sec_anchor_buf.sv @@ -57,6 +73,7 @@ targets: - $COMPILE_ROOT/rtl/caliptra_prim_intr_hw.sv - $COMPILE_ROOT/rtl/caliptra_prim_onehot_check.sv - $COMPILE_ROOT/rtl/caliptra_prim_mubi8_sync.sv + - $COMPILE_ROOT/rtl/caliptra_prim_mubi8_sender.sv - $COMPILE_ROOT/rtl/caliptra_prim_fifo_sync_cnt.sv - $COMPILE_ROOT/rtl/caliptra_prim_buf.sv - $COMPILE_ROOT/rtl/caliptra_prim_lc_sync.sv @@ -72,4 +89,52 @@ targets: - $COMPILE_ROOT/rtl/caliptra_prim_subreg_ext.sv - $COMPILE_ROOT/rtl/caliptra_prim_edge_detector.sv - $COMPILE_ROOT/rtl/caliptra_prim_blanker.sv - tops: [caliptra_prim] + - $COMPILE_ROOT/rtl/caliptra_prim_ram_1p_adv.sv + tops: [calitpra_prim] +--- +provides: [caliptra_prim_secded] +schema_version: 2.4.0 +requires: + - caliptra_prim_pkg +targets: + rtl: + directories: [$COMPILE_ROOT/rtl] + files: + - $COMPILE_ROOT/rtl/caliptra_prim_secded_22_16_dec.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_22_16_enc.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_28_22_dec.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_28_22_enc.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_39_32_dec.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_39_32_enc.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_64_57_dec.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_64_57_enc.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_72_64_dec.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_72_64_enc.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_hamming_22_16_dec.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_hamming_22_16_enc.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_hamming_39_32_dec.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_hamming_39_32_enc.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_hamming_72_64_dec.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_hamming_72_64_enc.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_hamming_76_68_dec.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_hamming_76_68_enc.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_inv_22_16_dec.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_inv_22_16_enc.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_inv_28_22_dec.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_inv_28_22_enc.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_inv_39_32_dec.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_inv_39_32_enc.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_inv_64_57_dec.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_inv_64_57_enc.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_inv_72_64_dec.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_inv_72_64_enc.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_inv_hamming_22_16_dec.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_inv_hamming_22_16_enc.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_inv_hamming_39_32_dec.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_inv_hamming_39_32_enc.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_inv_hamming_72_64_dec.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_inv_hamming_72_64_enc.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_inv_hamming_76_68_dec.sv + - $COMPILE_ROOT/rtl/caliptra_prim_secded_inv_hamming_76_68_enc.sv + # - $COMPILE_ROOT/rtl/caliptra_prim_secded_pkg.sv + tops: [caliptra_prim_secded] diff --git a/src/caliptra_prim/rtl/caliptra_prim_arbiter_fixed.sv b/src/caliptra_prim/rtl/caliptra_prim_arbiter_fixed.sv new file mode 100644 index 000000000..5b41cdf87 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_arbiter_fixed.sv @@ -0,0 +1,170 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// N:1 fixed priority arbiter module (index 0 has highest prio) +// +// Verilog parameter +// N: Number of request ports +// DW: Data width +// DataPort: Set to 1 to enable the data port. Otherwise that port will be ignored. +// +// See also: prim_arbiter_ppc, prim_arbiter_tree + +`include "caliptra_prim_assert.sv" + +module caliptra_prim_arbiter_fixed #( + parameter int N = 8, + parameter int DW = 32, + + // Configurations + // EnDataPort: {0, 1}, if 0, input data will be ignored + parameter bit EnDataPort = 1, + + // Derived parameters + localparam int IdxW = $clog2(N) +) ( + // used for assertions only + input clk_i, + input rst_ni, + + input [ N-1:0] req_i, + input [DW-1:0] data_i [N], + output logic [ N-1:0] gnt_o, + output logic [IdxW-1:0] idx_o, + + output logic valid_o, + output logic [DW-1:0] data_o, + input ready_i +); + + `CALIPTRA_ASSERT_INIT(CheckNGreaterZero_A, N > 0) + + // this case is basically just a bypass + if (N == 1) begin : gen_degenerate_case + + assign valid_o = req_i[0]; + assign data_o = data_i[0]; + assign gnt_o[0] = valid_o & ready_i; + assign idx_o = '0; + + end else begin : gen_normal_case + + // align to powers of 2 for simplicity + // a full binary tree with N levels has 2**N + 2**N-1 nodes + logic [2**(IdxW+1)-2:0] req_tree; + logic [2**(IdxW+1)-2:0] gnt_tree; + logic [2**(IdxW+1)-2:0][IdxW-1:0] idx_tree; + logic [2**(IdxW+1)-2:0][DW-1:0] data_tree; + + for (genvar level = 0; level < IdxW+1; level++) begin : gen_tree + // + // level+1 C0 C1 <- "Base1" points to the first node on "level+1", + // \ / these nodes are the children of the nodes one level below + // level Pa <- "Base0", points to the first node on "level", + // these nodes are the parents of the nodes one level above + // + // hence we have the following indices for the Pa, C0, C1 nodes: + // Pa = 2**level - 1 + offset = Base0 + offset + // C0 = 2**(level+1) - 1 + 2*offset = Base1 + 2*offset + // C1 = 2**(level+1) - 1 + 2*offset + 1 = Base1 + 2*offset + 1 + // + localparam int Base0 = (2**level)-1; + localparam int Base1 = (2**(level+1))-1; + + for (genvar offset = 0; offset < 2**level; offset++) begin : gen_level + localparam int Pa = Base0 + offset; + localparam int C0 = Base1 + 2*offset; + localparam int C1 = Base1 + 2*offset + 1; + + // this assigns the gated interrupt source signals, their + // corresponding IDs and priorities to the tree leafs + if (level == IdxW) begin : gen_leafs + if (offset < N) begin : gen_assign + // forward path + assign req_tree[Pa] = req_i[offset]; + assign idx_tree[Pa] = offset; + assign data_tree[Pa] = data_i[offset]; + // backward (grant) path + assign gnt_o[offset] = gnt_tree[Pa]; + + end else begin : gen_tie_off + // forward path + assign req_tree[Pa] = '0; + assign idx_tree[Pa] = '0; + assign data_tree[Pa] = '0; + logic unused_sigs; + assign unused_sigs = gnt_tree[Pa]; + end + // this creates the node assignments + end else begin : gen_nodes + // forward path + logic sel; // local helper variable + always_comb begin : p_node + // this always gives priority to the left child + sel = ~req_tree[C0]; + // propagate requests + req_tree[Pa] = req_tree[C0] | req_tree[C1]; + // data and index muxes + idx_tree[Pa] = (sel) ? idx_tree[C1] : idx_tree[C0]; + data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0]; + // propagate the grants back to the input + gnt_tree[C0] = gnt_tree[Pa] & ~sel; + gnt_tree[C1] = gnt_tree[Pa] & sel; + end + end + end : gen_level + end : gen_tree + + // the results can be found at the tree root + if (EnDataPort) begin : gen_data_port + assign data_o = data_tree[0]; + end else begin : gen_no_dataport + logic [DW-1:0] unused_data; + assign unused_data = data_tree[0]; + assign data_o = '1; + end + + assign idx_o = idx_tree[0]; + assign valid_o = req_tree[0]; + + // this propagates a grant back to the input + assign gnt_tree[0] = valid_o & ready_i; + end + + //////////////// + // assertions // + //////////////// + + // KNOWN assertions on outputs, except for data as that may be partially X in simulation + // e.g. when used on a BUS + `CALIPTRA_ASSERT_KNOWN(ValidKnown_A, valid_o) + `CALIPTRA_ASSERT_KNOWN(GrantKnown_A, gnt_o) + `CALIPTRA_ASSERT_KNOWN(IdxKnown_A, idx_o) + + // Make sure no higher prio req is asserted + `CALIPTRA_ASSERT(Priority_A, |req_i |-> req_i[idx_o] && (((N'(1'b1) << idx_o) - 1'b1) & req_i) == '0) + + // we can only grant one requestor at a time + `CALIPTRA_ASSERT(CheckHotOne_A, $onehot0(gnt_o)) + // A grant implies that the sink is ready + `CALIPTRA_ASSERT(GntImpliesReady_A, |gnt_o |-> ready_i) + // A grant implies that the arbiter asserts valid as well + `CALIPTRA_ASSERT(GntImpliesValid_A, |gnt_o |-> valid_o) + // A request and a sink that is ready imply a grant + `CALIPTRA_ASSERT(ReqAndReadyImplyGrant_A, |req_i && ready_i |-> |gnt_o) + // A request and a sink that is ready imply a grant + `CALIPTRA_ASSERT(ReqImpliesValid_A, |req_i |-> valid_o) + // Both conditions above combined and reversed + `CALIPTRA_ASSERT(ReadyAndValidImplyGrant_A, ready_i && valid_o |-> |gnt_o) + // Both conditions above combined and reversed + `CALIPTRA_ASSERT(NoReadyValidNoGrant_A, !(ready_i || valid_o) |-> gnt_o == 0) + // check index / grant correspond + `CALIPTRA_ASSERT(IndexIsCorrect_A, ready_i && valid_o |-> gnt_o[idx_o] && req_i[idx_o]) + +if (EnDataPort) begin: gen_data_port_assertion + // data flow + `CALIPTRA_ASSERT(DataFlow_A, ready_i && valid_o |-> data_o == data_i[idx_o]) +end + +endmodule : caliptra_prim_arbiter_fixed diff --git a/src/caliptra_prim/rtl/caliptra_prim_arbiter_tree.sv b/src/caliptra_prim/rtl/caliptra_prim_arbiter_tree.sv new file mode 100644 index 000000000..012f19c67 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_arbiter_tree.sv @@ -0,0 +1,291 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// N:1 arbiter module +// +// Verilog parameter +// N: Number of request ports +// DW: Data width +// DataPort: Set to 1 to enable the data port. Otherwise that port will be ignored. +// +// This is a tree implementation of a round robin arbiter. It has the same behavior as the PPC +// implementation in prim_arbiter_ppc, and also uses a prefix summing approach to determine the next +// request to be granted. The main difference with respect to the PPC arbiter is that the leading 1 +// detection and the prefix summation are performed with a binary tree instead of a sequential loop. +// Also, if the data port is enabled, the data is muxed based on the local arbitration decisions at +// each node of the arbiter tree. This means that the data can propagate through the tree +// simultaneously with the requests, instead of waiting for the arbitration to determine the winner +// index first. As a result, this design has a shorter critical path than other implementations, +// leading to better ovberall timing. +// +// Note that the currently winning request is held if the data sink is not ready. This behavior is +// required by some interconnect protocols (AXI, TL). The module contains an assertion that checks +// this behavior. +// +// Also, this module contains a request stability assertion that checks that requests stay asserted +// until they have been served. This assertion can be gated by driving the req_chk_i low. This is +// a non-functional input and does not affect the designs behavior. +// +// See also: prim_arbiter_ppc + +`include "caliptra_prim_assert.sv" + +module caliptra_prim_arbiter_tree #( + parameter int N = 8, + parameter int DW = 32, + + // Configurations + // EnDataPort: {0, 1}, if 0, input data will be ignored + parameter bit EnDataPort = 1, + + // Derived parameters + localparam int IdxW = $clog2(N) +) ( + input clk_i, + input rst_ni, + + input req_chk_i, // Used for gating assertions. Drive to 1 during normal + // operation. + input [ N-1:0] req_i, + input [DW-1:0] data_i [N], + output logic [ N-1:0] gnt_o, + output logic [IdxW-1:0] idx_o, + + output logic valid_o, + output logic [DW-1:0] data_o, + input ready_i +); + + // req_chk_i is used for gating assertions only. + logic unused_req_chk; + assign unused_req_chk = req_chk_i; + + `CALIPTRA_ASSERT_INIT(CheckNGreaterZero_A, N > 0) + + // this case is basically just a bypass + if (N == 1) begin : gen_degenerate_case + + assign valid_o = req_i[0]; + assign data_o = data_i[0]; + assign gnt_o[0] = valid_o & ready_i; + assign idx_o = '0; + + end else begin : gen_normal_case + + // align to powers of 2 for simplicity + // a full binary tree with N levels has 2**N + 2**N-1 nodes + logic [2**(IdxW+1)-2:0] req_tree; + logic [2**(IdxW+1)-2:0] prio_tree; + logic [2**(IdxW+1)-2:0] sel_tree; + logic [2**(IdxW+1)-2:0] mask_tree; + logic [2**(IdxW+1)-2:0][IdxW-1:0] idx_tree; + logic [2**(IdxW+1)-2:0][DW-1:0] data_tree; + logic [N-1:0] prio_mask_d, prio_mask_q; + + for (genvar level = 0; level < IdxW+1; level++) begin : gen_tree + // + // level+1 C0 C1 <- "Base1" points to the first node on "level+1", + // \ / these nodes are the children of the nodes one level below + // level Pa <- "Base0", points to the first node on "level", + // these nodes are the parents of the nodes one level above + // + // hence we have the following indices for the Pa, C0, C1 nodes: + // Pa = 2**level - 1 + offset = Base0 + offset + // C0 = 2**(level+1) - 1 + 2*offset = Base1 + 2*offset + // C1 = 2**(level+1) - 1 + 2*offset + 1 = Base1 + 2*offset + 1 + // + localparam int Base0 = (2**level)-1; + localparam int Base1 = (2**(level+1))-1; + + for (genvar offset = 0; offset < 2**level; offset++) begin : gen_level + localparam int Pa = Base0 + offset; + localparam int C0 = Base1 + 2*offset; + localparam int C1 = Base1 + 2*offset + 1; + + // this assigns the gated interrupt source signals, their + // corresponding IDs and priorities to the tree leafs + if (level == IdxW) begin : gen_leafs + if (offset < N) begin : gen_assign + // forward path (requests and data) + // all requests inputs are assigned to the request tree + assign req_tree[Pa] = req_i[offset]; + // we basically split the incoming request vector into two halves with the following + // priority assignment. the prio_mask_q register contains a prefix sum that has been + // computed using the last winning index, and hence masks out all requests at offsets + // lower or equal the previously granted index. hence, all higher indices are considered + // first in the arbitration tree nodes below, before considering the lower indices. + assign prio_tree[Pa] = req_i[offset] & prio_mask_q[offset]; + // input for the index muxes (used to compute the winner index) + assign idx_tree[Pa] = offset; + // input for the data muxes + assign data_tree[Pa] = data_i[offset]; + + // backward path (grants and prefix sum) + // grant if selected, ready and request asserted + assign gnt_o[offset] = req_i[offset] & sel_tree[Pa] & ready_i; + // only update mask if there is a valid request + assign prio_mask_d[offset] = (|req_i) ? + mask_tree[Pa] | sel_tree[Pa] & ~ready_i : + prio_mask_q[offset]; + end else begin : gen_tie_off + // forward path + assign req_tree[Pa] = '0; + assign prio_tree[Pa] = '0; + assign idx_tree[Pa] = '0; + assign data_tree[Pa] = '0; + logic unused_sigs; + assign unused_sigs = ^{mask_tree[Pa], + sel_tree[Pa]}; + end + // this creates the node assignments + end else begin : gen_nodes + // local helper variable + logic sel; + + // forward path (requests and data) + // each node looks at its two children, and selects the one with higher priority + assign sel = ~req_tree[C0] | ~prio_tree[C0] & prio_tree[C1]; + // propagate requests + assign req_tree[Pa] = req_tree[C0] | req_tree[C1]; + assign prio_tree[Pa] = prio_tree[C1] | prio_tree[C0]; + // data and index muxes + // Note: these ternaries have triggered a synthesis bug in Vivado versions older + // than 2020.2. If the problem resurfaces again, have a look at issue #1408. + assign idx_tree[Pa] = (sel) ? idx_tree[C1] : idx_tree[C0]; + assign data_tree[Pa] = (sel) ? data_tree[C1] : data_tree[C0]; + + // backward path (grants and prefix sum) + // this propagates the selction index back and computes a hot one mask + assign sel_tree[C0] = sel_tree[Pa] & ~sel; + assign sel_tree[C1] = sel_tree[Pa] & sel; + // this performs a prefix sum for masking the input requests in the next cycle + assign mask_tree[C0] = mask_tree[Pa]; + assign mask_tree[C1] = mask_tree[Pa] | sel_tree[C0]; + end + end : gen_level + end : gen_tree + + // the results can be found at the tree root + if (EnDataPort) begin : gen_data_port + assign data_o = data_tree[0]; + end else begin : gen_no_dataport + logic [DW-1:0] unused_data; + assign unused_data = data_tree[0]; + assign data_o = '1; + end + + // This index is unused. + logic unused_prio_tree; + assign unused_prio_tree = prio_tree[0]; + + assign idx_o = idx_tree[0]; + assign valid_o = req_tree[0]; + + // the select tree computes a hot one signal that indicates which request is currently selected + assign sel_tree[0] = 1'b1; + // the mask tree is basically a prefix sum of the hot one select signal computed above + assign mask_tree[0] = 1'b0; + + always_ff @(posedge clk_i or negedge rst_ni) begin : p_mask_reg + if (!rst_ni) begin + prio_mask_q <= '0; + end else begin + prio_mask_q <= prio_mask_d; + end + end + end + + //////////////// + // assertions // + //////////////// + + // KNOWN assertions on outputs, except for data as that may be partially X in simulation + // e.g. when used on a BUS + `CALIPTRA_ASSERT_KNOWN(ValidKnown_A, valid_o) + `CALIPTRA_ASSERT_KNOWN(GrantKnown_A, gnt_o) + `CALIPTRA_ASSERT_KNOWN(IdxKnown_A, idx_o) + + // grant index shall be higher index than previous index, unless no higher requests exist. + `CALIPTRA_ASSERT(RoundRobin_A, + ##1 valid_o && ready_i && $past(ready_i) && $past(valid_o) && + |(req_i & ~((N'(1) << $past(idx_o)+1) - 1)) |-> + idx_o > $past(idx_o)) + // we can only grant one requestor at a time + `CALIPTRA_ASSERT(CheckHotOne_A, $onehot0(gnt_o)) + // A grant implies that the sink is ready + `CALIPTRA_ASSERT(GntImpliesReady_A, |gnt_o |-> ready_i) + // A grant implies that the arbiter asserts valid as well + `CALIPTRA_ASSERT(GntImpliesValid_A, |gnt_o |-> valid_o) + // A request and a sink that is ready imply a grant + `CALIPTRA_ASSERT(ReqAndReadyImplyGrant_A, |req_i && ready_i |-> |gnt_o) + // A request and a sink that is ready imply a grant + `CALIPTRA_ASSERT(ReqImpliesValid_A, |req_i |-> valid_o) + // Both conditions above combined and reversed + `CALIPTRA_ASSERT(ReadyAndValidImplyGrant_A, ready_i && valid_o |-> |gnt_o) + // Both conditions above combined and reversed + `CALIPTRA_ASSERT(NoReadyValidNoGrant_A, !(ready_i || valid_o) |-> gnt_o == 0) + // check index / grant correspond + `CALIPTRA_ASSERT(IndexIsCorrect_A, ready_i && valid_o |-> gnt_o[idx_o] && req_i[idx_o]) + +if (EnDataPort) begin: gen_data_port_assertion + // data flow + `CALIPTRA_ASSERT(DataFlow_A, ready_i && valid_o |-> data_o == data_i[idx_o]) +end + + // requests must stay asserted until they have been granted + `CALIPTRA_ASSUME(ReqStaysHighUntilGranted0_M, |req_i && !ready_i |=> + (req_i & $past(req_i)) == $past(req_i), clk_i, !rst_ni || !req_chk_i) + // check that the arbitration decision is held if the sink is not ready + `CALIPTRA_ASSERT(LockArbDecision_A, |req_i && !ready_i |=> idx_o == $past(idx_o), + clk_i, !rst_ni || !req_chk_i) + +// FPV-only assertions with symbolic variables +`ifdef FPV_ON + // symbolic variables + int unsigned k; + bit ReadyIsStable; + bit ReqsAreStable; + + // constraints for symbolic variables + `CALIPTRA_ASSUME(KStable_M, ##1 $stable(k)) + `CALIPTRA_ASSUME(KRange_M, k < N) + // this is used enable checking for stable and unstable ready_i and req_i signals in the same run. + // the symbolic variables act like a switch that the solver can trun on and off. + `CALIPTRA_ASSUME(ReadyIsStable_M, ##1 $stable(ReadyIsStable)) + `CALIPTRA_ASSUME(ReqsAreStable_M, ##1 $stable(ReqsAreStable)) + `CALIPTRA_ASSUME(ReadyStable_M, ##1 !ReadyIsStable || $stable(ready_i)) + `CALIPTRA_ASSUME(ReqsStable_M, ##1 !ReqsAreStable || $stable(req_i)) + + // A grant implies a request + `CALIPTRA_ASSERT(GntImpliesReq_A, gnt_o[k] |-> req_i[k]) + + // if request and ready are constantly held at 1, we should eventually get a grant + `CALIPTRA_ASSERT(NoStarvation_A, + ReqsAreStable && ReadyIsStable && ready_i && req_i[k] |-> + strong(##[0:$] gnt_o[k])) + + // if N requests are constantly asserted and ready is constant 1, each request must + // be granted exactly once over a time window of N cycles for the arbiter to be fair. + for (genvar n = 1; n <= N; n++) begin : gen_fairness + integer gnt_cnt; + `CALIPTRA_ASSERT(Fairness_A, + ReqsAreStable && ReadyIsStable && ready_i && req_i[k] && + $countones(req_i) == n |-> + ##n gnt_cnt == $past(gnt_cnt, n) + 1) + + always_ff @(posedge clk_i or negedge rst_ni) begin : p_cnt + if (!rst_ni) begin + gnt_cnt <= 0; + end else begin + gnt_cnt <= gnt_cnt + gnt_o[k]; + end + end + end + + // requests must stay asserted until they have been granted + `CALIPTRA_ASSUME(ReqStaysHighUntilGranted1_M, req_i[k] && !gnt_o[k] |=> + req_i[k], clk_i, !rst_ni || !req_chk_i) +`endif + +endmodule : caliptra_prim_arbiter_tree diff --git a/src/caliptra_prim/rtl/caliptra_prim_assert.sv b/src/caliptra_prim/rtl/caliptra_prim_assert.sv index 7ab0e3bc7..c8d609704 100644 --- a/src/caliptra_prim/rtl/caliptra_prim_assert.sv +++ b/src/caliptra_prim/rtl/caliptra_prim_assert.sv @@ -6,7 +6,7 @@ // - Provides default clk and rst options to simplify code // - Provides boiler plate template for common assertions -`ifndef PRIM_ASSERT_SV +`ifndef CALIPTRA_PRIM_ASSERT_SV `define CALIPTRA_PRIM_ASSERT_SV /////////////////// diff --git a/src/caliptra_prim/rtl/caliptra_prim_assert_sec_cm.svh b/src/caliptra_prim/rtl/caliptra_prim_assert_sec_cm.svh index 096b7b61f..9e6317b8e 100644 --- a/src/caliptra_prim/rtl/caliptra_prim_assert_sec_cm.svh +++ b/src/caliptra_prim/rtl/caliptra_prim_assert_sec_cm.svh @@ -4,7 +4,7 @@ // // Macros and helper code for security countermeasures. -`ifndef PRIM_ASSERT_SEC_CM_SVH +`ifndef CALIPTRA_PRIM_ASSERT_SEC_CM_SVH `define CALIPTRA_PRIM_ASSERT_SEC_CM_SVH `define _CALIPTRA_SEC_CM_ALERT_MAX_CYC 30 diff --git a/src/caliptra_prim/rtl/caliptra_prim_blanker.sv b/src/caliptra_prim/rtl/caliptra_prim_blanker.sv index 4e7a7f563..92756d27c 100644 --- a/src/caliptra_prim/rtl/caliptra_prim_blanker.sv +++ b/src/caliptra_prim/rtl/caliptra_prim_blanker.sv @@ -5,14 +5,15 @@ // Convenience module for wrapping prim_and2 for use in blanking. // When en_i == 1 the input is fed through to the output. // When en_i == 0 the output is 0. -module calipra_prim_blanker #( +module caliptra_prim_blanker #( parameter int Width = 1 ) ( input logic [Width-1:0] in_i, input logic en_i, output logic [Width-1:0] out_o ); - caliptra_prim_and2 #(.Width(Width)) u_blank_and ( + //caliptra_prim_and2 #(.Width(Width)) u_blank_and ( + caliptra_prim_generic_and2 #(.Width(Width)) u_blank_and ( .in0_i(in_i), .in1_i({Width{en_i}}), .out_o diff --git a/src/caliptra_prim/rtl/caliptra_prim_count.sv b/src/caliptra_prim/rtl/caliptra_prim_count.sv index 1e8dc7465..006cfa1d1 100644 --- a/src/caliptra_prim/rtl/caliptra_prim_count.sv +++ b/src/caliptra_prim/rtl/caliptra_prim_count.sv @@ -1,4 +1,4 @@ -// Copyright lowRISC contributors. +// Copyright lowRISC contributors (OpenTitan project). // Licensed under the Apache License, Version 2.0, see LICENSE for details. // SPDX-License-Identifier: Apache-2.0 // @@ -16,6 +16,9 @@ // (i.e. 2**Width-1-set_cnt_i). Set has priority over increment and decrement. // incr_en_i: Increments the primary counter by step_i, and decrements the secondary by step_i. // decr_en_i: Decrements the primary counter by step_i, and increments the secondary by step_i. +// commit_i: Counter changes only take effect when `commit_i` is set. This does not effect the +// `cnt_after_commit_o` output which gives the next counter state if the change is +// committed. // // Note that if both incr_en_i and decr_en_i are asserted at the same time, the counter remains // unchanged. The counter is also protected against under- and overflows. @@ -35,12 +38,13 @@ module caliptra_prim_count #( input rst_ni, input clr_i, input set_i, - input [Width-1:0] set_cnt_i, // Set value for the counter. + input [Width-1:0] set_cnt_i, // Set value for the counter. input incr_en_i, input decr_en_i, - input [Width-1:0] step_i, // Increment/decrement step when enabled. - output logic [Width-1:0] cnt_o, // Current counter state - output logic [Width-1:0] cnt_next_o, // Next counter state + input [Width-1:0] step_i, // Increment/decrement step when enabled. + input commit_i, + output logic [Width-1:0] cnt_o, // Current counter state + output logic [Width-1:0] cnt_after_commit_o, // Next counter state if committed output logic err_o ); @@ -53,10 +57,14 @@ module caliptra_prim_count #( localparam logic [NumCnt-1:0][Width-1:0] ResetValues = {{Width{1'b1}} - ResetValue, // secondary ResetValue}; // primary - logic [NumCnt-1:0][Width-1:0] cnt_d, cnt_q, fpv_force; + logic [NumCnt-1:0][Width-1:0] cnt_d, cnt_d_committed, cnt_q; -`ifndef FPV_SEC_CM_ON - // This becomes a free variable in FPV. + // The fpv_force signal can be used in FPV runs to make the internal counters (cnt_q) jump + // unexpectedly. We only want to use this mechanism when we're doing FPV on prim_count itself. In + // that situation, we will have the PrimCountFpv define and wish to leave fpv_force undriven so + // that it becomes a free variable in FPV. In any other situation, we drive the signal with zero. + logic [NumCnt-1:0][Width-1:0] fpv_force; +`ifndef PrimCountFpv assign fpv_force = '0; `endif @@ -100,6 +108,8 @@ module caliptra_prim_count #( (set_i) ? set_val : (cnt_en) ? cnt_sat : cnt_q[k]; + assign cnt_d_committed[k] = commit_i ? cnt_d[k] : cnt_q[k]; + logic [Width-1:0] cnt_unforced_q; caliptra_prim_flop #( .Width(Width), @@ -107,7 +117,7 @@ module caliptra_prim_count #( ) u_cnt_flop ( .clk_i, .rst_ni, - .d_i(cnt_d[k]), + .d_i(cnt_d_committed[k]), .q_o(cnt_unforced_q) ); @@ -121,8 +131,8 @@ module caliptra_prim_count #( assign err_o = (sum != {1'b0, {Width{1'b1}}}); // Output count values - assign cnt_o = cnt_q[0]; - assign cnt_next_o = cnt_d[0]; + assign cnt_o = cnt_q[0]; + assign cnt_after_commit_o = cnt_d[0]; //////////////// // Assertions // @@ -154,7 +164,7 @@ module caliptra_prim_count #( `CALIPTRA_ASSERT(CntNext_A, rst_ni |=> - cnt_o == $past(cnt_next_o), + $past(!commit_i) || (cnt_o == $past(cnt_after_commit_o)), clk_i, err_o || fpv_err_present || !rst_ni) // Clear @@ -194,12 +204,12 @@ module caliptra_prim_count #( // Up counter `CALIPTRA_ASSERT(IncrUpCnt_A, - rst_ni && incr_en_i && !(clr_i || set_i || decr_en_i) + rst_ni && incr_en_i && !(clr_i || set_i || decr_en_i) && commit_i |=> cnt_o == min($past(cnt_o) + $past({2'b0, step_i}), {2'b0, {Width{1'b1}}}), clk_i, err_o || fpv_err_present || !rst_ni) `CALIPTRA_ASSERT(IncrDnCnt_A, - rst_ni && incr_en_i && !(clr_i || set_i || decr_en_i) + rst_ni && incr_en_i && !(clr_i || set_i || decr_en_i) && commit_i |=> cnt_q[1] == max($past(signed'({2'b0, cnt_q[1]})) - $past({2'b0, step_i}), '0), clk_i, err_o || fpv_err_present || !rst_ni) @@ -218,12 +228,12 @@ module caliptra_prim_count #( // Down counter `CALIPTRA_ASSERT(DecrUpCnt_A, - rst_ni && decr_en_i && !(clr_i || set_i || incr_en_i) + rst_ni && decr_en_i && !(clr_i || set_i || incr_en_i) && commit_i |=> cnt_o == max($past(signed'({2'b0, cnt_o})) - $past({2'b0, step_i}), '0), clk_i, err_o || fpv_err_present || !rst_ni) `CALIPTRA_ASSERT(DecrDnCnt_A, - rst_ni && decr_en_i && !(clr_i || set_i || incr_en_i) + rst_ni && decr_en_i && !(clr_i || set_i || incr_en_i) && commit_i |=> cnt_q[1] == min($past(cnt_q[1]) + $past({2'b0, step_i}), {2'b0, {Width{1'b1}}}), clk_i, err_o || fpv_err_present || !rst_ni) @@ -251,11 +261,11 @@ module caliptra_prim_count #( (cnt_q[1] + cnt_q[0]) != {Width{1'b1}}) // This logic that will be assign to one, when user adds macro - // CALIPTRA_ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT to check the error with alert, in case that caliptra_prim_count + // ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT to check the error with alert, in case that prim_count // is used in design without adding this assertion check. logic unused_assert_connected; `CALIPTRA_ASSERT_INIT_NET(AssertConnected_A, unused_assert_connected === 1'b1 || !EnableAlertTriggerSVA) `endif -endmodule // caliptra_prim_count +endmodule // prim_count diff --git a/src/caliptra_prim/rtl/caliptra_prim_double_lfsr.sv b/src/caliptra_prim/rtl/caliptra_prim_double_lfsr.sv new file mode 100644 index 000000000..e9b8303bf --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_double_lfsr.sv @@ -0,0 +1,113 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Hardened LFSR module that instantiates two LFSRs of the same type. +// The state vector of both LFSRs is constantly checked and an error is asserted if the +// two states are inconsistent. + +module caliptra_prim_double_lfsr #( + // prim_lfsr parameters - refer to prim_lfsr for their meaning/ + parameter LfsrType = "GAL_XOR", + parameter int unsigned LfsrDw = 32, + localparam int unsigned LfsrIdxDw = $clog2(LfsrDw), + parameter int unsigned EntropyDw = 8, + parameter int unsigned StateOutDw = 8, + parameter logic [LfsrDw-1:0] DefaultSeed = LfsrDw'(1), + parameter logic [LfsrDw-1:0] CustomCoeffs = '0, + parameter bit StatePermEn = 1'b0, + parameter logic [LfsrDw-1:0][LfsrIdxDw-1:0] StatePerm = '0, + parameter bit MaxLenSVA = 1'b1, + parameter bit LockupSVA = 1'b1, + parameter bit ExtSeedSVA = 1'b1, + parameter bit NonLinearOut = 1'b0, + // This should only be disabled in special circumstances, for example + // in non-comportable IPs where an error does not trigger an alert. + parameter bit EnableAlertTriggerSVA = 1 +) ( + input clk_i, + input rst_ni, + input seed_en_i, + input [LfsrDw-1:0] seed_i, + input lfsr_en_i, + input [EntropyDw-1:0] entropy_i, + output logic [StateOutDw-1:0] state_o, + // Asserted if the parallel LFSR states are inconsistent. + output logic err_o +); + + + logic [1:0][LfsrDw-1:0] lfsr_state; + // We employ redundant LFSRs to guard against FI attacks. + for (genvar k = 0; k < 2; k++) begin : gen_double_lfsr + // Instantiate size_only buffers to prevent + // optimization / merging of redundant logic. + logic lfsr_en_buf, seed_en_buf; + logic [EntropyDw-1:0] entropy_buf; + logic [LfsrDw-1:0] seed_buf, lfsr_state_unbuf; + caliptra_prim_buf #( + .Width(EntropyDw + LfsrDw + 2) + ) u_prim_buf_input ( + .in_i({seed_en_i, seed_i, lfsr_en_i, entropy_i}), + .out_o({seed_en_buf, seed_buf, lfsr_en_buf, entropy_buf}) + ); + + caliptra_prim_lfsr #( + .LfsrType(LfsrType), + .LfsrDw(LfsrDw), + .EntropyDw(EntropyDw), + // output the full width so that the states can be cross checked. + .StateOutDw(LfsrDw), + .DefaultSeed(DefaultSeed), + .CustomCoeffs(CustomCoeffs), + .StatePermEn(StatePermEn), + .StatePerm(StatePerm), + .MaxLenSVA(MaxLenSVA), + .LockupSVA(LockupSVA), + .ExtSeedSVA(ExtSeedSVA), + .NonLinearOut(NonLinearOut) + ) u_prim_lfsr ( + .clk_i, + .rst_ni, + .seed_en_i ( seed_en_buf ), + .seed_i ( seed_buf ), + .lfsr_en_i ( lfsr_en_buf ), + .entropy_i ( entropy_buf ), + .state_o ( lfsr_state_unbuf ) + ); + + caliptra_prim_buf #( + .Width(LfsrDw) + ) u_prim_buf_output ( + .in_i(lfsr_state_unbuf), + .out_o(lfsr_state[k]) + ); + end + +`ifdef SIMULATION +`ifndef VERILATOR + // Ensure both LFSRs start off with the same default seed. if randomized in simulations. + initial begin : p_sync_lfsr_default_seed + wait (!$isunknown(gen_double_lfsr[0].u_prim_lfsr.DefaultSeedLocal)); + wait (!$isunknown(gen_double_lfsr[1].u_prim_lfsr.DefaultSeedLocal)); + gen_double_lfsr[1].u_prim_lfsr.DefaultSeedLocal = + gen_double_lfsr[0].u_prim_lfsr.DefaultSeedLocal; + $display("%m: Updated gen_double_lfsr[1].u_prim_lfsr.DefaultSeedLocal = 0x%0h", + gen_double_lfsr[1].u_prim_lfsr.DefaultSeedLocal); + end +`endif +`endif + + // Output the state from the first LFSR + assign state_o = lfsr_state[0][StateOutDw-1:0]; + assign err_o = lfsr_state[0] != lfsr_state[1]; + + // This logic that will be assign to one, when user adds macro + // ASSERT_PRIM_DOUBLE_LFSR_ERROR_TRIGGER_ALERT to check the error with alert, in case that + // prim_double_lfsr is used in design without adding this assertion check. + `ifdef CALIPTRA_INC_ASSERT + logic unused_assert_connected; + + `CALIPTRA_ASSERT_INIT_NET(AssertConnected_A, unused_assert_connected === 1'b1 || !EnableAlertTriggerSVA) + `endif +endmodule : caliptra_prim_double_lfsr diff --git a/src/caliptra_prim/rtl/caliptra_prim_edn_req.sv b/src/caliptra_prim/rtl/caliptra_prim_edn_req.sv new file mode 100644 index 000000000..e5528d732 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_edn_req.sv @@ -0,0 +1,215 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// This module can be used as a "gadget" to adapt the native 32bit width of the EDN network +// locally to the width needed by the consuming logic. For example, if the local consumer +// needs 128bit, this module would request four 32 bit words from EDN and stack them accordingly. +// +// The module also uses a req/ack synchronizer to synchronize the EDN data over to the local +// clock domain. Note that this assumes that the EDN data bus remains stable between subsequent +// requests. +// + +`include "caliptra_prim_assert.sv" + +module caliptra_prim_edn_req + import caliptra_prim_alert_pkg::*; +#( + parameter int OutWidth = 32, + // Repetition check for incoming edn data + parameter bit RepCheck = 0, + // Disable reset-related assertion checks inside prim_sync_reqack primitives. + parameter bit EnRstChks = 0, + + // EDN Request latency checker + // + // Each consumer IP may have the maximum expected latency. MaxLatency + // parameter describes the expected latency in terms of the consumer clock + // cycles. If the edn request comes later than that, the assertion will be + // fired. + // + // The default value is 0, which disables the assertion. + parameter int unsigned MaxLatency = 0 +) ( + // Design side + input clk_i, + input rst_ni, + input req_chk_i, // Used for gating assertions. Drive to 1 during normal + // operation. + input req_i, + output logic ack_o, + output logic [OutWidth-1:0] data_o, + output logic fips_o, + output logic err_o, // current data_o failed repetition check + // EDN side + input clk_edn_i, + input rst_edn_ni, + output edn_pkg::edn_req_t edn_o, + input edn_pkg::edn_rsp_t edn_i +); + + // Stop requesting words from EDN once desired amount of data is available. + logic word_req, word_ack; + assign word_req = req_i & ~ack_o; + + logic [edn_pkg::ENDPOINT_BUS_WIDTH-1:0] word_data; + logic word_fips; + localparam int SyncWidth = $bits({edn_i.edn_fips, edn_i.edn_bus}); + caliptra_prim_sync_reqack_data #( + .Width(SyncWidth), + .EnRstChks(EnRstChks), + .DataSrc2Dst(1'b0), + .DataReg(1'b0) + ) u_prim_sync_reqack_data ( + .clk_src_i ( clk_i ), + .rst_src_ni ( rst_ni ), + .clk_dst_i ( clk_edn_i ), + .rst_dst_ni ( rst_edn_ni ), + .req_chk_i ( req_chk_i ), + .src_req_i ( word_req ), + .src_ack_o ( word_ack ), + .dst_req_o ( edn_o.edn_req ), + .dst_ack_i ( edn_i.edn_ack ), + .data_i ( {edn_i.edn_fips, edn_i.edn_bus} ), + .data_o ( {word_fips, word_data} ) + ); + + if (RepCheck) begin : gen_rep_chk + logic [edn_pkg::ENDPOINT_BUS_WIDTH-1:0] word_data_q; + always_ff @(posedge clk_i) begin + if (word_ack) begin + word_data_q <= word_data; + end + end + + // do not check until we have received at least the first entry + logic chk_rep; + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + chk_rep <= '0; + end else if (word_ack) begin + chk_rep <= 1'b1; + end + end + + // Need to track if any of the packed words has failed the repetition check, i.e., is identical + // to the last packed word. + logic err_d, err_q; + assign err_d = (req_i && ack_o) ? 1'b0 : // clear + (chk_rep && word_ack && word_data == word_data_q) ? 1'b1 : // set + err_q; // keep + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + err_q <= 1'b0; + end else begin + err_q <= err_d; + end + end + assign err_o = err_q; + + end else begin : gen_no_rep_chk // block: gen_rep_chk + assign err_o = '0; + end + + caliptra_prim_packer_fifo #( + .InW(edn_pkg::ENDPOINT_BUS_WIDTH), + .OutW(OutWidth), + .ClearOnRead(1'b0) + ) u_prim_packer_fifo ( + .clk_i, + .rst_ni, + .clr_i ( 1'b0 ), // not needed + .wvalid_i ( word_ack ), + .wdata_i ( word_data ), + // no need for backpressure since we're always ready to + // sink data at this point. + .wready_o ( ), + .rvalid_o ( ack_o ), + .rdata_o ( data_o ), + // we're always ready to receive the packed output word + // at this point. + .rready_i ( 1'b1 ), + .depth_o ( ) + ); + + // Need to track if any of the packed words has been generated with a pre-FIPS seed, i.e., has + // fips == 1'b0. + logic fips_d, fips_q; + assign fips_d = (req_i && ack_o) ? 1'b1 : // clear + (word_ack) ? fips_q & word_fips : // accumulate + fips_q; // keep + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + fips_q <= 1'b1; + end else begin + fips_q <= fips_d; + end + end + assign fips_o = fips_q; + + //////////////// + // Assertions // + //////////////// + + // Check EDN data is valid: Not all zeros, all ones, or not the same as previous data. +`ifdef CALIPTRA_INC_ASSERT + //VCS coverage off + // pragma coverage off + + logic [OutWidth-1:0] data_prev, data_curr; + + always_ff @(posedge ack_o or negedge rst_ni) begin + if (!rst_ni) begin + data_prev <= '0; + data_curr <= '0; + end else if (ack_o) begin + data_curr <= data_o; + data_prev <= data_curr; + end + end + //VCS coverage on + // pragma coverage on + + `CALIPTRA_ASSERT(DataOutputValid_A, ack_o |-> (data_o != 0) && (data_o != '1)) + `CALIPTRA_ASSERT(DataOutputDiffFromPrev_A, data_prev != 0 |-> data_prev != data_o) +`endif + + // EDN Max Latency Checker +`ifndef SYNTHESIS + if (MaxLatency != 0) begin: g_maxlatency_assertion + //VCS coverage off + // pragma coverage off + localparam int unsigned LatencyW = $clog2(MaxLatency+1); + logic [LatencyW-1:0] latency_counter; + logic reset_counter; + logic enable_counter; + + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) latency_counter <= '0; + else if (reset_counter) latency_counter <= '0; + else if (enable_counter) latency_counter <= latency_counter + 1'b1; + end + + assign reset_counter = ack_o; + assign enable_counter = req_i; + //VCS coverage on + // pragma coverage on + + `CALIPTRA_ASSERT(MaxLatency_A, latency_counter <= MaxLatency) + + // TODO: Is it worth to check req & ack pair? + // _________________________________ + // req __/ \______ + // ____ + // ack ____________________________________/ \_ + // + // | error + + end // g_maxlatency_assertion +`else // SYNTHESIS + logic unused_param_maxlatency; + assign unused_param_maxlatency = ^MaxLatency; +`endif // SYNTHESIS + +endmodule : caliptra_prim_edn_req diff --git a/src/caliptra_prim/rtl/caliptra_prim_lc_sender.sv b/src/caliptra_prim/rtl/caliptra_prim_lc_sender.sv new file mode 100644 index 000000000..c7552afd1 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_lc_sender.sv @@ -0,0 +1,68 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Multibit life cycle signal sender module. +// +// This module is instantiates a hand-picked flop cell +// for each bit in the life cycle control signal such that tools do not +// optimize the multibit encoding. + +`include "caliptra_prim_assert.sv" + +module caliptra_prim_lc_sender #( + // This flops the output if set to 1. + // In special cases where the sender is in the same clock domain as the receiver, + // this can be set to 0. However, it is recommended to leave this at 1. + parameter bit AsyncOn = 1, + // 0: reset value is lc_ctrl_pkg::Off + // 1: reset value is lc_ctrl_pkg::On + parameter bit ResetValueIsOn = 0 +) ( + input clk_i, + input rst_ni, + input lc_ctrl_pkg::lc_tx_t lc_en_i, + output lc_ctrl_pkg::lc_tx_t lc_en_o +); + + localparam lc_ctrl_pkg::lc_tx_t ResetValue = (ResetValueIsOn) ? lc_ctrl_pkg::On : + lc_ctrl_pkg::Off; + + logic [lc_ctrl_pkg::TxWidth-1:0] lc_en, lc_en_out; + assign lc_en = lc_ctrl_pkg::TxWidth'(lc_en_i); + + if (AsyncOn) begin : gen_flops + caliptra_prim_sec_anchor_flop #( + .Width(lc_ctrl_pkg::TxWidth), + .ResetValue(lc_ctrl_pkg::TxWidth'(ResetValue)) + ) u_prim_flop ( + .clk_i, + .rst_ni, + .d_i ( lc_en ), + .q_o ( lc_en_out ) + ); + end else begin : gen_no_flops + for (genvar k = 0; k < lc_ctrl_pkg::TxWidth; k++) begin : gen_bits + caliptra_prim_sec_anchor_buf u_prim_buf ( + .in_i(lc_en[k]), + .out_o(lc_en_out[k]) + ); + end + + // This unused companion logic helps remove lint errors + // for modules where clock and reset are used for assertions only + // or nothing at all. + // This logic will be removed for sythesis since it is unloaded. + lc_ctrl_pkg::lc_tx_t unused_logic; + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + unused_logic <= lc_ctrl_pkg::Off; + end else begin + unused_logic <= lc_en_i; + end + end + end + + assign lc_en_o = lc_ctrl_pkg::lc_tx_t'(lc_en_out); + +endmodule : caliptra_prim_lc_sender diff --git a/src/caliptra_prim/rtl/caliptra_prim_mubi8_sender.sv b/src/caliptra_prim/rtl/caliptra_prim_mubi8_sender.sv new file mode 100644 index 000000000..28e94453f --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_mubi8_sender.sv @@ -0,0 +1,94 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// ------------------- W A R N I N G: A U T O - G E N E R A T E D C O D E !! -------------------// +// PLEASE DO NOT HAND-EDIT THIS FILE. IT HAS BEEN AUTO-GENERATED WITH THE FOLLOWING COMMAND: +// +// util/design/gen-mubi.py +// +// Multibit sender module. This module is instantiates a hand-picked flop cell for each bit in the +// multibit signal such that tools do not optimize the multibit encoding. + +`include "caliptra_prim_assert.sv" + +module caliptra_prim_mubi8_sender + import caliptra_prim_mubi_pkg::*; +#( + // This flops the output if set to 1. + // In special cases where the sender is in the same clock domain as the receiver, + // this can be set to 0. However, it is recommended to leave this at 1. + parameter bit AsyncOn = 1, + // Enable anchor buffer + parameter bit EnSecBuf = 0, + // Reset value for the sender flops + parameter mubi8_t ResetValue = MuBi8False +) ( + input clk_i, + input rst_ni, + input mubi8_t mubi_i, + output mubi8_t mubi_o +); + + logic [MuBi8Width-1:0] mubi, mubi_int, mubi_out; + assign mubi = MuBi8Width'(mubi_i); + + // first generation block decides whether a flop should be present + if (AsyncOn) begin : gen_flops + caliptra_prim_flop #( + .Width(MuBi8Width), + .ResetValue(MuBi8Width'(ResetValue)) + ) u_prim_flop ( + .clk_i, + .rst_ni, + .d_i ( mubi ), + .q_o ( mubi_int ) + ); + end else begin : gen_no_flops + assign mubi_int = mubi; + + // This unused companion logic helps remove lint errors + // for modules where clock and reset are used for assertions only + // This logic will be removed for sythesis since it is unloaded. + mubi8_t unused_logic; + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + unused_logic <= MuBi8False; + end else begin + unused_logic <= mubi_i; + end + end + end + + // second generation block determines output buffer type + // 1. If EnSecBuf -> always leads to a sec buffer regardless of first block + // 2. If not EnSecBuf and not AsyncOn -> use normal buffer + // 3. If not EnSecBuf and AsyncOn -> feed through + if (EnSecBuf) begin : gen_sec_buf + caliptra_prim_sec_anchor_buf #( + .Width(8) + ) u_prim_sec_buf ( + .in_i(mubi_int), + .out_o(mubi_out) + ); + end else if (!AsyncOn) begin : gen_prim_buf + caliptra_prim_buf #( + .Width(8) + ) u_prim_buf ( + .in_i(mubi_int), + .out_o(mubi_out) + ); + end else begin : gen_feedthru + assign mubi_out = mubi_int; + end + + assign mubi_o = mubi8_t'(mubi_out); + + //////////////// + // Assertions // + //////////////// + + // The outputs should be known at all times. + `CALIPTRA_ASSERT_KNOWN(OutputsKnown_A, mubi_o) + +endmodule : caliptra_prim_mubi8_sender diff --git a/src/caliptra_prim/rtl/caliptra_prim_mubi_pkg.sv b/src/caliptra_prim/rtl/caliptra_prim_mubi_pkg.sv index cc474c97d..acaa3554b 100644 --- a/src/caliptra_prim/rtl/caliptra_prim_mubi_pkg.sv +++ b/src/caliptra_prim/rtl/caliptra_prim_mubi_pkg.sv @@ -19,10 +19,15 @@ package caliptra_prim_mubi_pkg; ////////////////////////////////////////////// parameter int MuBi4Width = 4; + localparam MuBi4True = 4'h6, + MuBi4False = 4'h9; + typedef logic [MuBi4Width-1:0] mubi4_t; + /* typedef enum logic [MuBi4Width-1:0] { MuBi4True = 4'h6, // enabled MuBi4False = 4'h9 // disabled } mubi4_t; + */ // This is a prerequisite for the multibit functions below to work. `CALIPTRA_ASSERT_STATIC_IN_PACKAGE(CheckMuBi4ValsComplementary_A, MuBi4True == ~MuBi4False) diff --git a/src/caliptra_prim/rtl/caliptra_prim_onehot_check.sv b/src/caliptra_prim/rtl/caliptra_prim_onehot_check.sv index e5bfcb450..8131b93b2 100644 --- a/src/caliptra_prim/rtl/caliptra_prim_onehot_check.sv +++ b/src/caliptra_prim/rtl/caliptra_prim_onehot_check.sv @@ -141,13 +141,13 @@ module caliptra_prim_onehot_check #( // CALIPTRA_ASSERT_PRIM_ONEHOT_ERROR_TRIGGER_ALERT to check the error with alert, in case that // caliptra_prim_onehot_check is used in design without adding this assertion check. `ifdef CALIPTRA_INC_ASSERT - `ifndef PRIM_DEFAULT_IMPL + `ifndef CALIPTRA_PRIM_DEFAULT_IMPL `define CALIPTRA_PRIM_DEFAULT_IMPL caliptra_prim_pkg::ImplGeneric `endif parameter caliptra_prim_pkg::impl_e Impl = `CALIPTRA_PRIM_DEFAULT_IMPL; logic unused_assert_connected; - // TODO(#13337): only check generic for now. The path of this prim in other Impl may differ + // TODO(#13337): only check generic for now. The path of this prim in other Impl may differ. if (Impl == caliptra_prim_pkg::ImplGeneric) begin : gen_generic `CALIPTRA_ASSERT_INIT_NET(AssertConnected_A, unused_assert_connected === 1'b1 || !EnableAlertTriggerSVA) end diff --git a/src/caliptra_prim/rtl/caliptra_prim_otp_pkg.sv b/src/caliptra_prim/rtl/caliptra_prim_otp_pkg.sv new file mode 100644 index 000000000..ca056b93c --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_otp_pkg.sv @@ -0,0 +1,50 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Common interface definitions for OTP primitives. + +package caliptra_prim_otp_pkg; + + // The command is sparsely encoded to make it more difficult to tamper with. + parameter int CmdWidth = 7; + parameter int ErrWidth = 3; + + // Encoding generated with: + // $ ./util/design/sparse-fsm-encode.py -d 4 -m 5 -n 7 \ + // -s 696743973 --language=sv + // + // Hamming distance histogram: + // + // 0: -- + // 1: -- + // 2: -- + // 3: -- + // 4: |||||||||||||||||||| (100.00%) + // 5: -- + // 6: -- + // 7: -- + // + // Minimum Hamming distance: 4 + // Maximum Hamming distance: 4 + // Minimum Hamming weight: 3 + // Maximum Hamming weight: 5 + // + typedef enum logic [CmdWidth-1:0] { + Read = 7'b1000101, + Write = 7'b0110111, + // Raw commands ignore integrity + ReadRaw = 7'b1111001, + WriteRaw = 7'b1100010, + Init = 7'b0101100 + } cmd_e; + + typedef enum logic [ErrWidth-1:0] { + NoError = 3'h0, + MacroError = 3'h1, + MacroEccCorrError = 3'h2, + MacroEccUncorrError = 3'h3, + MacroWriteBlankError = 3'h4 + } err_e; + +endpackage : caliptra_prim_otp_pkg diff --git a/src/caliptra_prim/rtl/caliptra_prim_present.sv b/src/caliptra_prim/rtl/caliptra_prim_present.sv new file mode 100644 index 000000000..884bd9510 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_present.sv @@ -0,0 +1,158 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// This module is an implementation of the encryption pass of the 64bit PRESENT +// block cipher. It is a fully unrolled combinational implementation that +// supports both key sizes specified in the paper (80bit and 128bit). Further, +// the number of rounds is fully configurable, and the primitive supports a +// 32bit block cipher flavor which is not specified in the original paper. It +// should be noted, however, that the 32bit version is **not** secure and must +// not be used in a setting where cryptographic cipher strength is required. The +// 32bit variant is only intended to be used as a lightweight data scrambling +// device. +// +// See also: prim_prince, prim_cipher_pkg +// +// References: - https://en.wikipedia.org/wiki/PRESENT +// - https://en.wikipedia.org/wiki/Prince_(cipher) +// - http://www.lightweightcrypto.org/present/present_ches2007.pdf +// - https://eprint.iacr.org/2012/529.pdf +// - https://csrc.nist.gov/csrc/media/events/lightweight-cryptography-workshop-2015/ +// documents/papers/session7-maene-paper.pdf + +`include "caliptra_prim_assert.sv" +module caliptra_prim_present #( + parameter int DataWidth = 64, // {32, 64} + parameter int KeyWidth = 128, // {64, 80, 128} + // Number of rounds to perform in total (>0) + parameter int NumRounds = 31, + // Number of physically instantiated PRESENT rounds. + // This can be used to construct e.g. an iterative + // full-round implementation that only has one physical + // round instance by setting NumRounds = 31 and NumPhysRounds = 1. + // Note that NumPhysRounds needs to divide NumRounds. + parameter int NumPhysRounds = NumRounds, + // Note that the decryption pass needs a modified key, + // to be calculated by performing NumRounds key updates + parameter bit Decrypt = 0 // 0: encrypt, 1: decrypt +) ( + input [DataWidth-1:0] data_i, + input [KeyWidth-1:0] key_i, + // Starting round index for keyschedule [1 ... 31]. + // Set this to 5'd1 for a fully unrolled encryption, and 5'd31 for a fully unrolled decryption. + input [4:0] idx_i, + output logic [DataWidth-1:0] data_o, + output logic [KeyWidth-1:0] key_o, + // Next round index for keyschedule + // (Enc: idx_i + NumPhysRounds, Dec: idx_i - NumPhysRounds) + // Can be ignored for a fully unrolled implementation. + output logic [4:0] idx_o +); + + ////////////// + // datapath // + ////////////// + + logic [NumPhysRounds:0][DataWidth-1:0] data_state; + logic [NumPhysRounds:0][KeyWidth-1:0] round_key; + logic [NumPhysRounds:0][4:0] round_idx; + + // initialize + assign data_state[0] = data_i; + assign round_key[0] = key_i; + assign round_idx[0] = idx_i; + + for (genvar k = 0; k < NumPhysRounds; k++) begin : gen_round + logic [DataWidth-1:0] data_state_xor, data_state_sbox; + // cipher layers + assign data_state_xor = data_state[k] ^ round_key[k][KeyWidth-1 : KeyWidth-DataWidth]; + //////////////////////////////// + // decryption pass, performs inverse permutation, sbox and keyschedule + if (Decrypt) begin : gen_dec + // Decrement round count. + assign round_idx[k+1] = round_idx[k] - 1'b1; + // original 64bit variant + if (DataWidth == 64) begin : gen_d64 + assign data_state_sbox = caliptra_prim_cipher_pkg::perm_64bit(data_state_xor, + caliptra_prim_cipher_pkg::PRESENT_PERM64_INV); + assign data_state[k+1] = caliptra_prim_cipher_pkg::sbox4_64bit(data_state_sbox, + caliptra_prim_cipher_pkg::PRESENT_SBOX4_INV); + // reduced 32bit variant + end else begin : gen_d32 + assign data_state_sbox = caliptra_prim_cipher_pkg::perm_32bit(data_state_xor, + caliptra_prim_cipher_pkg::PRESENT_PERM32_INV); + assign data_state[k+1] = caliptra_prim_cipher_pkg::sbox4_32bit(data_state_sbox, + caliptra_prim_cipher_pkg::PRESENT_SBOX4_INV); + end + // update round key, count goes from 1 to 31 (max) + // original 128bit key variant + if (KeyWidth == 128) begin : gen_k128 + assign round_key[k+1] = caliptra_prim_cipher_pkg::present_inv_update_key128(round_key[k], + round_idx[k]); + // original 80bit key variant + end else if (KeyWidth == 80) begin : gen_k80 + assign round_key[k+1] = caliptra_prim_cipher_pkg::present_inv_update_key80(round_key[k], + round_idx[k]); + // reduced 64bit key variant + end else begin : gen_k64 + assign round_key[k+1] = caliptra_prim_cipher_pkg::present_inv_update_key64(round_key[k], + round_idx[k]); + end + //////////////////////////////// + // encryption pass + end else begin : gen_enc + // Increment round count. + assign round_idx[k+1] = round_idx[k] + 1'b1; + // original 64bit variant + if (DataWidth == 64) begin : gen_d64 + assign data_state_sbox = caliptra_prim_cipher_pkg::sbox4_64bit(data_state_xor, + caliptra_prim_cipher_pkg::PRESENT_SBOX4); + assign data_state[k+1] = caliptra_prim_cipher_pkg::perm_64bit(data_state_sbox, + caliptra_prim_cipher_pkg::PRESENT_PERM64); + // reduced 32bit variant + end else begin : gen_d32 + assign data_state_sbox = caliptra_prim_cipher_pkg::sbox4_32bit(data_state_xor, + caliptra_prim_cipher_pkg::PRESENT_SBOX4); + assign data_state[k+1] = caliptra_prim_cipher_pkg::perm_32bit(data_state_sbox, + caliptra_prim_cipher_pkg::PRESENT_PERM32); + end + // update round key, count goes from 1 to 31 (max) + // original 128bit key variant + if (KeyWidth == 128) begin : gen_k128 + assign round_key[k+1] = caliptra_prim_cipher_pkg::present_update_key128(round_key[k], round_idx[k]); + // original 80bit key variant + end else if (KeyWidth == 80) begin : gen_k80 + assign round_key[k+1] = caliptra_prim_cipher_pkg::present_update_key80(round_key[k], round_idx[k]); + // reduced 64bit key variant + end else begin : gen_k64 + assign round_key[k+1] = caliptra_prim_cipher_pkg::present_update_key64(round_key[k], round_idx[k]); + end + end // gen_enc + //////////////////////////////// + end // gen_round + + // This only needs to be applied after the last round. + // Note that for a full-round implementation the output index + // will be 0 for enc/dec for the last round (either due to wraparound or subtraction). + localparam int LastRoundIdx = (Decrypt != 0 || NumRounds == 31) ? 0 : NumRounds+1; + assign data_o = (int'(idx_o) == LastRoundIdx) ? + data_state[NumPhysRounds] ^ + round_key[NumPhysRounds][KeyWidth-1 : KeyWidth-DataWidth] : + data_state[NumPhysRounds]; + + assign key_o = round_key[NumPhysRounds]; + assign idx_o = round_idx[NumPhysRounds]; + + //////////////// + // assertions // + //////////////// + + `CALIPTRA_ASSERT_INIT(SupportedWidths_A, (DataWidth == 64 && KeyWidth inside {80, 128}) || + (DataWidth == 32 && KeyWidth == 64)) + `CALIPTRA_ASSERT_INIT(SupportedNumRounds_A, NumRounds > 0 && NumRounds <= 31) + `CALIPTRA_ASSERT_INIT(SupportedNumPhysRounds0_A, NumPhysRounds > 0 && NumPhysRounds <= NumRounds) + // Currently we do not support other arrangements + `CALIPTRA_ASSERT_INIT(SupportedNumPhysRounds1_A, (NumRounds % NumPhysRounds) == 0) + +endmodule : caliptra_prim_present diff --git a/src/caliptra_prim/rtl/caliptra_prim_ram_1p_adv.sv b/src/caliptra_prim/rtl/caliptra_prim_ram_1p_adv.sv new file mode 100644 index 000000000..0949a0e7c --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_ram_1p_adv.sv @@ -0,0 +1,269 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Single-Port SRAM Wrapper +// +// Supported configurations: +// - ECC for 32b and 64b wide memories with no write mask +// (Width == 32 or Width == 64, DataBitsPerMask is ignored). +// - Byte parity if Width is a multiple of 8 bit and write masks have Byte +// granularity (DataBitsPerMask == 8). +// +// Note that the write mask needs to be per Byte if parity is enabled. If ECC is enabled, the write +// mask cannot be used and has to be tied to {Width{1'b1}}. + +`include "caliptra_prim_assert.sv" + +module caliptra_prim_ram_1p_adv import caliptra_prim_ram_1p_pkg::*; #( + parameter int Depth = 512, + parameter int Width = 32, + parameter int DataBitsPerMask = 1, // Number of data bits per bit of write mask + parameter MemInitFile = "", // VMEM file to initialize the memory with + + // Configurations + parameter bit EnableECC = 0, // Enables per-word ECC + parameter bit EnableParity = 0, // Enables per-Byte Parity + parameter bit EnableInputPipeline = 0, // Adds an input register (read latency +1) + parameter bit EnableOutputPipeline = 0, // Adds an output register (read latency +1) + + // This switch allows to switch to standard Hamming ECC instead of the HSIAO ECC. + // It is recommended to leave this parameter at its default setting (HSIAO), + // since this results in a more compact and faster implementation. + parameter bit HammingECC = 0, + + localparam int Aw = caliptra_prim_util_pkg::vbits(Depth) +) ( + input clk_i, + input rst_ni, + + input req_i, + input write_i, + input [Aw-1:0] addr_i, + input [Width-1:0] wdata_i, + input [Width-1:0] wmask_i, + output logic [Width-1:0] rdata_o, + output logic rvalid_o, // read response (rdata_o) is valid + output logic [1:0] rerror_o, // Bit1: Uncorrectable, Bit0: Correctable + + // config + input ram_1p_cfg_t cfg_i +); + + + `CALIPTRA_ASSERT_INIT(CannotHaveEccAndParity_A, !(EnableParity && EnableECC)) + + // Calculate ECC width + localparam int ParWidth = (EnableParity) ? Width/8 : + (!EnableECC) ? 0 : + (Width <= 4) ? 4 : + (Width <= 11) ? 5 : + (Width <= 26) ? 6 : + (Width <= 57) ? 7 : + (Width <= 120) ? 8 : 8 ; + localparam int TotalWidth = Width + ParWidth; + + // If byte parity is enabled, the write enable bits are used to write memory colums + // with 8 + 1 = 9 bit width (data plus corresponding parity bit). + // If ECC is enabled, the DataBitsPerMask is ignored. + localparam int LocalDataBitsPerMask = (EnableParity) ? 9 : + (EnableECC) ? TotalWidth : + DataBitsPerMask; + + //////////////////////////// + // RAM Primitive Instance // + //////////////////////////// + + logic req_q, req_d ; + logic write_q, write_d ; + logic [Aw-1:0] addr_q, addr_d ; + logic [TotalWidth-1:0] wdata_q, wdata_d ; + logic [TotalWidth-1:0] wmask_q, wmask_d ; + logic rvalid_q, rvalid_d, rvalid_sram_q ; + logic [Width-1:0] rdata_q, rdata_d ; + logic [TotalWidth-1:0] rdata_sram ; + logic [1:0] rerror_q, rerror_d ; + + caliptra_prim_generic_ram_1p #( + .MemInitFile (MemInitFile), + + .Width (TotalWidth), + .Depth (Depth), + .DataBitsPerMask (LocalDataBitsPerMask) + ) u_mem ( + .clk_i, + + .req_i (req_q), + .write_i (write_q), + .addr_i (addr_q), + .wdata_i (wdata_q), + .wmask_i (wmask_q), + .rdata_o (rdata_sram), + .cfg_i + ); + + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + rvalid_sram_q <= 1'b0; + end else begin + rvalid_sram_q <= req_q & ~write_q; + end + end + + assign req_d = req_i; + assign write_d = write_i; + assign addr_d = addr_i; + assign rvalid_o = rvalid_q; + assign rdata_o = rdata_q; + assign rerror_o = rerror_q; + + ///////////////////////////// + // ECC / Parity Generation // + ///////////////////////////// + + if (EnableParity == 0 && EnableECC) begin : gen_secded + logic unused_wmask; + assign unused_wmask = ^wmask_i; + + // check supported widths + `CALIPTRA_ASSERT_INIT(SecDecWidth_A, Width inside {16, 32}) + + // the wmask is constantly set to 1 in this case + `CALIPTRA_ASSERT(OnlyWordWritePossibleWithEccPortA_A, req_i |-> + wmask_i == {Width{1'b1}}) + + assign wmask_d = {TotalWidth{1'b1}}; + + if (Width == 16) begin : gen_secded_22_16 + if (HammingECC) begin : gen_hamming + caliptra_prim_secded_inv_hamming_22_16_enc u_enc ( + .data_i(wdata_i), + .data_o(wdata_d) + ); + caliptra_prim_secded_inv_hamming_22_16_dec u_dec ( + .data_i (rdata_sram), + .data_o (rdata_d[0+:Width]), + .syndrome_o ( ), + .err_o (rerror_d) + ); + end else begin : gen_hsiao + caliptra_prim_secded_inv_22_16_enc u_enc ( + .data_i(wdata_i), + .data_o(wdata_d) + ); + caliptra_prim_secded_inv_22_16_dec u_dec ( + .data_i (rdata_sram), + .data_o (rdata_d[0+:Width]), + .syndrome_o ( ), + .err_o (rerror_d) + ); + end + end else if (Width == 32) begin : gen_secded_39_32 + if (HammingECC) begin : gen_hamming + caliptra_prim_secded_inv_hamming_39_32_enc u_enc ( + .data_i(wdata_i), + .data_o(wdata_d) + ); + caliptra_prim_secded_inv_hamming_39_32_dec u_dec ( + .data_i (rdata_sram), + .data_o (rdata_d[0+:Width]), + .syndrome_o ( ), + .err_o (rerror_d) + ); + end else begin : gen_hsiao + caliptra_prim_secded_inv_39_32_enc u_enc ( + .data_i(wdata_i), + .data_o(wdata_d) + ); + caliptra_prim_secded_inv_39_32_dec u_dec ( + .data_i (rdata_sram), + .data_o (rdata_d[0+:Width]), + .syndrome_o ( ), + .err_o (rerror_d) + ); + end + end + + end else if (EnableParity) begin : gen_byte_parity + + `CALIPTRA_ASSERT_INIT(WidthNeedsToBeByteAligned_A, Width % 8 == 0) + `CALIPTRA_ASSERT_INIT(ParityNeedsByteWriteMask_A, DataBitsPerMask == 8) + + always_comb begin : p_parity + rerror_d = '0; + for (int i = 0; i < Width/8; i ++) begin + // Data mapping. We have to make 8+1 = 9 bit groups + // that have the same write enable such that FPGA tools + // can map this correctly to BRAM resources. + wmask_d[i*9 +: 8] = wmask_i[i*8 +: 8]; + wdata_d[i*9 +: 8] = wdata_i[i*8 +: 8]; + rdata_d[i*8 +: 8] = rdata_sram[i*9 +: 8]; + + // parity generation (odd parity) + wdata_d[i*9 + 8] = ~(^wdata_i[i*8 +: 8]); + wmask_d[i*9 + 8] = &wmask_i[i*8 +: 8]; + // parity decoding (errors are always uncorrectable) + rerror_d[1] |= ~(^{rdata_sram[i*9 +: 8], rdata_sram[i*9 + 8]}); + end + end + end else begin : gen_nosecded_noparity + assign wmask_d = wmask_i; + assign wdata_d = wdata_i; + + assign rdata_d = rdata_sram[0+:Width]; + assign rerror_d = '0; + end + + assign rvalid_d = rvalid_sram_q; + + ///////////////////////////////////// + // Input/Output Pipeline Registers // + ///////////////////////////////////// + + if (EnableInputPipeline) begin : gen_regslice_input + // Put the register slices between ECC encoding to SRAM port + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + req_q <= '0; + write_q <= '0; + addr_q <= '0; + wdata_q <= '0; + wmask_q <= '0; + end else begin + req_q <= req_d; + write_q <= write_d; + addr_q <= addr_d; + wdata_q <= wdata_d; + wmask_q <= wmask_d; + end + end + end else begin : gen_dirconnect_input + assign req_q = req_d; + assign write_q = write_d; + assign addr_q = addr_d; + assign wdata_q = wdata_d; + assign wmask_q = wmask_d; + end + + if (EnableOutputPipeline) begin : gen_regslice_output + // Put the register slices between ECC decoding to output + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + rvalid_q <= '0; + rdata_q <= '0; + rerror_q <= '0; + end else begin + rvalid_q <= rvalid_d; + rdata_q <= rdata_d; + // tie to zero if the read data is not valid + rerror_q <= rerror_d & {2{rvalid_d}}; + end + end + end else begin : gen_dirconnect_output + assign rvalid_q = rvalid_d; + assign rdata_q = rdata_d; + // tie to zero if the read data is not valid + assign rerror_q = rerror_d & {2{rvalid_d}}; + end + +endmodule : caliptra_prim_ram_1p_adv diff --git a/src/caliptra_prim/rtl/caliptra_prim_ram_1p_pkg.sv b/src/caliptra_prim/rtl/caliptra_prim_ram_1p_pkg.sv new file mode 100644 index 000000000..12c19b77b --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_ram_1p_pkg.sv @@ -0,0 +1,20 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// + +package caliptra_prim_ram_1p_pkg; + + typedef struct packed { + logic cfg_en; + logic [3:0] cfg; + } cfg_t; + + typedef struct packed { + cfg_t ram_cfg; // configuration for ram + cfg_t rf_cfg; // configuration for regfile + } ram_1p_cfg_t; + + parameter ram_1p_cfg_t RAM_1P_CFG_DEFAULT = '0; + +endpackage // caliptra_prim_ram_1p_pkg diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_22_16_dec.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_22_16_dec.sv new file mode 100644 index 000000000..3b01c692a --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_22_16_dec.sv @@ -0,0 +1,45 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED decoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_22_16_dec ( + input [21:0] data_i, + output logic [15:0] data_o, + output logic [5:0] syndrome_o, + output logic [1:0] err_o +); + + always_comb begin : p_encode + // Syndrome calculation + syndrome_o[0] = ^(data_i & 22'h01496E); + syndrome_o[1] = ^(data_i & 22'h02F20B); + syndrome_o[2] = ^(data_i & 22'h048ED8); + syndrome_o[3] = ^(data_i & 22'h087714); + syndrome_o[4] = ^(data_i & 22'h10ACA5); + syndrome_o[5] = ^(data_i & 22'h2011F3); + + // Corrected output calculation + data_o[0] = (syndrome_o == 6'h32) ^ data_i[0]; + data_o[1] = (syndrome_o == 6'h23) ^ data_i[1]; + data_o[2] = (syndrome_o == 6'h19) ^ data_i[2]; + data_o[3] = (syndrome_o == 6'h7) ^ data_i[3]; + data_o[4] = (syndrome_o == 6'h2c) ^ data_i[4]; + data_o[5] = (syndrome_o == 6'h31) ^ data_i[5]; + data_o[6] = (syndrome_o == 6'h25) ^ data_i[6]; + data_o[7] = (syndrome_o == 6'h34) ^ data_i[7]; + data_o[8] = (syndrome_o == 6'h29) ^ data_i[8]; + data_o[9] = (syndrome_o == 6'he) ^ data_i[9]; + data_o[10] = (syndrome_o == 6'h1c) ^ data_i[10]; + data_o[11] = (syndrome_o == 6'h15) ^ data_i[11]; + data_o[12] = (syndrome_o == 6'h2a) ^ data_i[12]; + data_o[13] = (syndrome_o == 6'h1a) ^ data_i[13]; + data_o[14] = (syndrome_o == 6'hb) ^ data_i[14]; + data_o[15] = (syndrome_o == 6'h16) ^ data_i[15]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = ^syndrome_o; + err_o[1] = ~err_o[0] & (|syndrome_o); + end +endmodule : caliptra_prim_secded_22_16_dec diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_22_16_enc.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_22_16_enc.sv new file mode 100644 index 000000000..cd4dc1b4b --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_22_16_enc.sv @@ -0,0 +1,22 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED encoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_22_16_enc ( + input [15:0] data_i, + output logic [21:0] data_o +); + + always_comb begin : p_encode + data_o = 22'(data_i); + data_o[16] = ^(data_o & 22'h00496E); + data_o[17] = ^(data_o & 22'h00F20B); + data_o[18] = ^(data_o & 22'h008ED8); + data_o[19] = ^(data_o & 22'h007714); + data_o[20] = ^(data_o & 22'h00ACA5); + data_o[21] = ^(data_o & 22'h0011F3); + end + +endmodule : caliptra_prim_secded_22_16_enc diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_28_22_dec.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_28_22_dec.sv new file mode 100644 index 000000000..e0a5b3e3d --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_28_22_dec.sv @@ -0,0 +1,51 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED decoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_28_22_dec ( + input [27:0] data_i, + output logic [21:0] data_o, + output logic [5:0] syndrome_o, + output logic [1:0] err_o +); + + always_comb begin : p_encode + // Syndrome calculation + syndrome_o[0] = ^(data_i & 28'h07003FF); + syndrome_o[1] = ^(data_i & 28'h090FC0F); + syndrome_o[2] = ^(data_i & 28'h1271C71); + syndrome_o[3] = ^(data_i & 28'h23B6592); + syndrome_o[4] = ^(data_i & 28'h43DAAA4); + syndrome_o[5] = ^(data_i & 28'h83ED348); + + // Corrected output calculation + data_o[0] = (syndrome_o == 6'h7) ^ data_i[0]; + data_o[1] = (syndrome_o == 6'hb) ^ data_i[1]; + data_o[2] = (syndrome_o == 6'h13) ^ data_i[2]; + data_o[3] = (syndrome_o == 6'h23) ^ data_i[3]; + data_o[4] = (syndrome_o == 6'hd) ^ data_i[4]; + data_o[5] = (syndrome_o == 6'h15) ^ data_i[5]; + data_o[6] = (syndrome_o == 6'h25) ^ data_i[6]; + data_o[7] = (syndrome_o == 6'h19) ^ data_i[7]; + data_o[8] = (syndrome_o == 6'h29) ^ data_i[8]; + data_o[9] = (syndrome_o == 6'h31) ^ data_i[9]; + data_o[10] = (syndrome_o == 6'he) ^ data_i[10]; + data_o[11] = (syndrome_o == 6'h16) ^ data_i[11]; + data_o[12] = (syndrome_o == 6'h26) ^ data_i[12]; + data_o[13] = (syndrome_o == 6'h1a) ^ data_i[13]; + data_o[14] = (syndrome_o == 6'h2a) ^ data_i[14]; + data_o[15] = (syndrome_o == 6'h32) ^ data_i[15]; + data_o[16] = (syndrome_o == 6'h1c) ^ data_i[16]; + data_o[17] = (syndrome_o == 6'h2c) ^ data_i[17]; + data_o[18] = (syndrome_o == 6'h34) ^ data_i[18]; + data_o[19] = (syndrome_o == 6'h38) ^ data_i[19]; + data_o[20] = (syndrome_o == 6'h3b) ^ data_i[20]; + data_o[21] = (syndrome_o == 6'h3d) ^ data_i[21]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = ^syndrome_o; + err_o[1] = ~err_o[0] & (|syndrome_o); + end +endmodule : caliptra_prim_secded_28_22_dec diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_28_22_enc.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_28_22_enc.sv new file mode 100644 index 000000000..c440a0300 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_28_22_enc.sv @@ -0,0 +1,22 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED encoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_28_22_enc ( + input [21:0] data_i, + output logic [27:0] data_o +); + + always_comb begin : p_encode + data_o = 28'(data_i); + data_o[22] = ^(data_o & 28'h03003FF); + data_o[23] = ^(data_o & 28'h010FC0F); + data_o[24] = ^(data_o & 28'h0271C71); + data_o[25] = ^(data_o & 28'h03B6592); + data_o[26] = ^(data_o & 28'h03DAAA4); + data_o[27] = ^(data_o & 28'h03ED348); + end + +endmodule : caliptra_prim_secded_28_22_enc diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_39_32_dec.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_39_32_dec.sv new file mode 100644 index 000000000..5fbf53e8c --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_39_32_dec.sv @@ -0,0 +1,62 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED decoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_39_32_dec ( + input [38:0] data_i, + output logic [31:0] data_o, + output logic [6:0] syndrome_o, + output logic [1:0] err_o +); + + always_comb begin : p_encode + // Syndrome calculation + syndrome_o[0] = ^(data_i & 39'h012606BD25); + syndrome_o[1] = ^(data_i & 39'h02DEBA8050); + syndrome_o[2] = ^(data_i & 39'h04413D89AA); + syndrome_o[3] = ^(data_i & 39'h0831234ED1); + syndrome_o[4] = ^(data_i & 39'h10C2C1323B); + syndrome_o[5] = ^(data_i & 39'h202DCC624C); + syndrome_o[6] = ^(data_i & 39'h4098505586); + + // Corrected output calculation + data_o[0] = (syndrome_o == 7'h19) ^ data_i[0]; + data_o[1] = (syndrome_o == 7'h54) ^ data_i[1]; + data_o[2] = (syndrome_o == 7'h61) ^ data_i[2]; + data_o[3] = (syndrome_o == 7'h34) ^ data_i[3]; + data_o[4] = (syndrome_o == 7'h1a) ^ data_i[4]; + data_o[5] = (syndrome_o == 7'h15) ^ data_i[5]; + data_o[6] = (syndrome_o == 7'h2a) ^ data_i[6]; + data_o[7] = (syndrome_o == 7'h4c) ^ data_i[7]; + data_o[8] = (syndrome_o == 7'h45) ^ data_i[8]; + data_o[9] = (syndrome_o == 7'h38) ^ data_i[9]; + data_o[10] = (syndrome_o == 7'h49) ^ data_i[10]; + data_o[11] = (syndrome_o == 7'hd) ^ data_i[11]; + data_o[12] = (syndrome_o == 7'h51) ^ data_i[12]; + data_o[13] = (syndrome_o == 7'h31) ^ data_i[13]; + data_o[14] = (syndrome_o == 7'h68) ^ data_i[14]; + data_o[15] = (syndrome_o == 7'h7) ^ data_i[15]; + data_o[16] = (syndrome_o == 7'h1c) ^ data_i[16]; + data_o[17] = (syndrome_o == 7'hb) ^ data_i[17]; + data_o[18] = (syndrome_o == 7'h25) ^ data_i[18]; + data_o[19] = (syndrome_o == 7'h26) ^ data_i[19]; + data_o[20] = (syndrome_o == 7'h46) ^ data_i[20]; + data_o[21] = (syndrome_o == 7'he) ^ data_i[21]; + data_o[22] = (syndrome_o == 7'h70) ^ data_i[22]; + data_o[23] = (syndrome_o == 7'h32) ^ data_i[23]; + data_o[24] = (syndrome_o == 7'h2c) ^ data_i[24]; + data_o[25] = (syndrome_o == 7'h13) ^ data_i[25]; + data_o[26] = (syndrome_o == 7'h23) ^ data_i[26]; + data_o[27] = (syndrome_o == 7'h62) ^ data_i[27]; + data_o[28] = (syndrome_o == 7'h4a) ^ data_i[28]; + data_o[29] = (syndrome_o == 7'h29) ^ data_i[29]; + data_o[30] = (syndrome_o == 7'h16) ^ data_i[30]; + data_o[31] = (syndrome_o == 7'h52) ^ data_i[31]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = ^syndrome_o; + err_o[1] = ~err_o[0] & (|syndrome_o); + end +endmodule : caliptra_prim_secded_39_32_dec diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_39_32_enc.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_39_32_enc.sv new file mode 100644 index 000000000..522183423 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_39_32_enc.sv @@ -0,0 +1,23 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED encoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_39_32_enc ( + input [31:0] data_i, + output logic [38:0] data_o +); + + always_comb begin : p_encode + data_o = 39'(data_i); + data_o[32] = ^(data_o & 39'h002606BD25); + data_o[33] = ^(data_o & 39'h00DEBA8050); + data_o[34] = ^(data_o & 39'h00413D89AA); + data_o[35] = ^(data_o & 39'h0031234ED1); + data_o[36] = ^(data_o & 39'h00C2C1323B); + data_o[37] = ^(data_o & 39'h002DCC624C); + data_o[38] = ^(data_o & 39'h0098505586); + end + +endmodule : caliptra_prim_secded_39_32_enc diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_64_57_dec.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_64_57_dec.sv new file mode 100644 index 000000000..34f17d7b2 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_64_57_dec.sv @@ -0,0 +1,87 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED decoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_64_57_dec ( + input [63:0] data_i, + output logic [56:0] data_o, + output logic [6:0] syndrome_o, + output logic [1:0] err_o +); + + always_comb begin : p_encode + // Syndrome calculation + syndrome_o[0] = ^(data_i & 64'h0303FFF800007FFF); + syndrome_o[1] = ^(data_i & 64'h057C1FF801FF801F); + syndrome_o[2] = ^(data_i & 64'h09BDE1F87E0781E1); + syndrome_o[3] = ^(data_i & 64'h11DEEE3B8E388E22); + syndrome_o[4] = ^(data_i & 64'h21EF76CDB2C93244); + syndrome_o[5] = ^(data_i & 64'h41F7BB56D5525488); + syndrome_o[6] = ^(data_i & 64'h81FBDDA769A46910); + + // Corrected output calculation + data_o[0] = (syndrome_o == 7'h7) ^ data_i[0]; + data_o[1] = (syndrome_o == 7'hb) ^ data_i[1]; + data_o[2] = (syndrome_o == 7'h13) ^ data_i[2]; + data_o[3] = (syndrome_o == 7'h23) ^ data_i[3]; + data_o[4] = (syndrome_o == 7'h43) ^ data_i[4]; + data_o[5] = (syndrome_o == 7'hd) ^ data_i[5]; + data_o[6] = (syndrome_o == 7'h15) ^ data_i[6]; + data_o[7] = (syndrome_o == 7'h25) ^ data_i[7]; + data_o[8] = (syndrome_o == 7'h45) ^ data_i[8]; + data_o[9] = (syndrome_o == 7'h19) ^ data_i[9]; + data_o[10] = (syndrome_o == 7'h29) ^ data_i[10]; + data_o[11] = (syndrome_o == 7'h49) ^ data_i[11]; + data_o[12] = (syndrome_o == 7'h31) ^ data_i[12]; + data_o[13] = (syndrome_o == 7'h51) ^ data_i[13]; + data_o[14] = (syndrome_o == 7'h61) ^ data_i[14]; + data_o[15] = (syndrome_o == 7'he) ^ data_i[15]; + data_o[16] = (syndrome_o == 7'h16) ^ data_i[16]; + data_o[17] = (syndrome_o == 7'h26) ^ data_i[17]; + data_o[18] = (syndrome_o == 7'h46) ^ data_i[18]; + data_o[19] = (syndrome_o == 7'h1a) ^ data_i[19]; + data_o[20] = (syndrome_o == 7'h2a) ^ data_i[20]; + data_o[21] = (syndrome_o == 7'h4a) ^ data_i[21]; + data_o[22] = (syndrome_o == 7'h32) ^ data_i[22]; + data_o[23] = (syndrome_o == 7'h52) ^ data_i[23]; + data_o[24] = (syndrome_o == 7'h62) ^ data_i[24]; + data_o[25] = (syndrome_o == 7'h1c) ^ data_i[25]; + data_o[26] = (syndrome_o == 7'h2c) ^ data_i[26]; + data_o[27] = (syndrome_o == 7'h4c) ^ data_i[27]; + data_o[28] = (syndrome_o == 7'h34) ^ data_i[28]; + data_o[29] = (syndrome_o == 7'h54) ^ data_i[29]; + data_o[30] = (syndrome_o == 7'h64) ^ data_i[30]; + data_o[31] = (syndrome_o == 7'h38) ^ data_i[31]; + data_o[32] = (syndrome_o == 7'h58) ^ data_i[32]; + data_o[33] = (syndrome_o == 7'h68) ^ data_i[33]; + data_o[34] = (syndrome_o == 7'h70) ^ data_i[34]; + data_o[35] = (syndrome_o == 7'h1f) ^ data_i[35]; + data_o[36] = (syndrome_o == 7'h2f) ^ data_i[36]; + data_o[37] = (syndrome_o == 7'h4f) ^ data_i[37]; + data_o[38] = (syndrome_o == 7'h37) ^ data_i[38]; + data_o[39] = (syndrome_o == 7'h57) ^ data_i[39]; + data_o[40] = (syndrome_o == 7'h67) ^ data_i[40]; + data_o[41] = (syndrome_o == 7'h3b) ^ data_i[41]; + data_o[42] = (syndrome_o == 7'h5b) ^ data_i[42]; + data_o[43] = (syndrome_o == 7'h6b) ^ data_i[43]; + data_o[44] = (syndrome_o == 7'h73) ^ data_i[44]; + data_o[45] = (syndrome_o == 7'h3d) ^ data_i[45]; + data_o[46] = (syndrome_o == 7'h5d) ^ data_i[46]; + data_o[47] = (syndrome_o == 7'h6d) ^ data_i[47]; + data_o[48] = (syndrome_o == 7'h75) ^ data_i[48]; + data_o[49] = (syndrome_o == 7'h79) ^ data_i[49]; + data_o[50] = (syndrome_o == 7'h3e) ^ data_i[50]; + data_o[51] = (syndrome_o == 7'h5e) ^ data_i[51]; + data_o[52] = (syndrome_o == 7'h6e) ^ data_i[52]; + data_o[53] = (syndrome_o == 7'h76) ^ data_i[53]; + data_o[54] = (syndrome_o == 7'h7a) ^ data_i[54]; + data_o[55] = (syndrome_o == 7'h7c) ^ data_i[55]; + data_o[56] = (syndrome_o == 7'h7f) ^ data_i[56]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = ^syndrome_o; + err_o[1] = ~err_o[0] & (|syndrome_o); + end +endmodule : caliptra_prim_secded_64_57_dec diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_64_57_enc.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_64_57_enc.sv new file mode 100644 index 000000000..4d068b32c --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_64_57_enc.sv @@ -0,0 +1,23 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED encoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_64_57_enc ( + input [56:0] data_i, + output logic [63:0] data_o +); + + always_comb begin : p_encode + data_o = 64'(data_i); + data_o[57] = ^(data_o & 64'h0103FFF800007FFF); + data_o[58] = ^(data_o & 64'h017C1FF801FF801F); + data_o[59] = ^(data_o & 64'h01BDE1F87E0781E1); + data_o[60] = ^(data_o & 64'h01DEEE3B8E388E22); + data_o[61] = ^(data_o & 64'h01EF76CDB2C93244); + data_o[62] = ^(data_o & 64'h01F7BB56D5525488); + data_o[63] = ^(data_o & 64'h01FBDDA769A46910); + end + +endmodule : caliptra_prim_secded_64_57_enc diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_72_64_dec.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_72_64_dec.sv new file mode 100644 index 000000000..736a4139f --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_72_64_dec.sv @@ -0,0 +1,95 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED decoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_72_64_dec ( + input [71:0] data_i, + output logic [63:0] data_o, + output logic [7:0] syndrome_o, + output logic [1:0] err_o +); + + always_comb begin : p_encode + // Syndrome calculation + syndrome_o[0] = ^(data_i & 72'h01B9000000001FFFFF); + syndrome_o[1] = ^(data_i & 72'h025E00000FFFE0003F); + syndrome_o[2] = ^(data_i & 72'h0467003FF003E007C1); + syndrome_o[3] = ^(data_i & 72'h08CD0FC0F03C207842); + syndrome_o[4] = ^(data_i & 72'h10B671C711C4438884); + syndrome_o[5] = ^(data_i & 72'h20B5B65926488C9108); + syndrome_o[6] = ^(data_i & 72'h40CBDAAA4A91152210); + syndrome_o[7] = ^(data_i & 72'h807AED348D221A4420); + + // Corrected output calculation + data_o[0] = (syndrome_o == 8'h7) ^ data_i[0]; + data_o[1] = (syndrome_o == 8'hb) ^ data_i[1]; + data_o[2] = (syndrome_o == 8'h13) ^ data_i[2]; + data_o[3] = (syndrome_o == 8'h23) ^ data_i[3]; + data_o[4] = (syndrome_o == 8'h43) ^ data_i[4]; + data_o[5] = (syndrome_o == 8'h83) ^ data_i[5]; + data_o[6] = (syndrome_o == 8'hd) ^ data_i[6]; + data_o[7] = (syndrome_o == 8'h15) ^ data_i[7]; + data_o[8] = (syndrome_o == 8'h25) ^ data_i[8]; + data_o[9] = (syndrome_o == 8'h45) ^ data_i[9]; + data_o[10] = (syndrome_o == 8'h85) ^ data_i[10]; + data_o[11] = (syndrome_o == 8'h19) ^ data_i[11]; + data_o[12] = (syndrome_o == 8'h29) ^ data_i[12]; + data_o[13] = (syndrome_o == 8'h49) ^ data_i[13]; + data_o[14] = (syndrome_o == 8'h89) ^ data_i[14]; + data_o[15] = (syndrome_o == 8'h31) ^ data_i[15]; + data_o[16] = (syndrome_o == 8'h51) ^ data_i[16]; + data_o[17] = (syndrome_o == 8'h91) ^ data_i[17]; + data_o[18] = (syndrome_o == 8'h61) ^ data_i[18]; + data_o[19] = (syndrome_o == 8'ha1) ^ data_i[19]; + data_o[20] = (syndrome_o == 8'hc1) ^ data_i[20]; + data_o[21] = (syndrome_o == 8'he) ^ data_i[21]; + data_o[22] = (syndrome_o == 8'h16) ^ data_i[22]; + data_o[23] = (syndrome_o == 8'h26) ^ data_i[23]; + data_o[24] = (syndrome_o == 8'h46) ^ data_i[24]; + data_o[25] = (syndrome_o == 8'h86) ^ data_i[25]; + data_o[26] = (syndrome_o == 8'h1a) ^ data_i[26]; + data_o[27] = (syndrome_o == 8'h2a) ^ data_i[27]; + data_o[28] = (syndrome_o == 8'h4a) ^ data_i[28]; + data_o[29] = (syndrome_o == 8'h8a) ^ data_i[29]; + data_o[30] = (syndrome_o == 8'h32) ^ data_i[30]; + data_o[31] = (syndrome_o == 8'h52) ^ data_i[31]; + data_o[32] = (syndrome_o == 8'h92) ^ data_i[32]; + data_o[33] = (syndrome_o == 8'h62) ^ data_i[33]; + data_o[34] = (syndrome_o == 8'ha2) ^ data_i[34]; + data_o[35] = (syndrome_o == 8'hc2) ^ data_i[35]; + data_o[36] = (syndrome_o == 8'h1c) ^ data_i[36]; + data_o[37] = (syndrome_o == 8'h2c) ^ data_i[37]; + data_o[38] = (syndrome_o == 8'h4c) ^ data_i[38]; + data_o[39] = (syndrome_o == 8'h8c) ^ data_i[39]; + data_o[40] = (syndrome_o == 8'h34) ^ data_i[40]; + data_o[41] = (syndrome_o == 8'h54) ^ data_i[41]; + data_o[42] = (syndrome_o == 8'h94) ^ data_i[42]; + data_o[43] = (syndrome_o == 8'h64) ^ data_i[43]; + data_o[44] = (syndrome_o == 8'ha4) ^ data_i[44]; + data_o[45] = (syndrome_o == 8'hc4) ^ data_i[45]; + data_o[46] = (syndrome_o == 8'h38) ^ data_i[46]; + data_o[47] = (syndrome_o == 8'h58) ^ data_i[47]; + data_o[48] = (syndrome_o == 8'h98) ^ data_i[48]; + data_o[49] = (syndrome_o == 8'h68) ^ data_i[49]; + data_o[50] = (syndrome_o == 8'ha8) ^ data_i[50]; + data_o[51] = (syndrome_o == 8'hc8) ^ data_i[51]; + data_o[52] = (syndrome_o == 8'h70) ^ data_i[52]; + data_o[53] = (syndrome_o == 8'hb0) ^ data_i[53]; + data_o[54] = (syndrome_o == 8'hd0) ^ data_i[54]; + data_o[55] = (syndrome_o == 8'he0) ^ data_i[55]; + data_o[56] = (syndrome_o == 8'h6d) ^ data_i[56]; + data_o[57] = (syndrome_o == 8'hd6) ^ data_i[57]; + data_o[58] = (syndrome_o == 8'h3e) ^ data_i[58]; + data_o[59] = (syndrome_o == 8'hcb) ^ data_i[59]; + data_o[60] = (syndrome_o == 8'hb3) ^ data_i[60]; + data_o[61] = (syndrome_o == 8'hb5) ^ data_i[61]; + data_o[62] = (syndrome_o == 8'hce) ^ data_i[62]; + data_o[63] = (syndrome_o == 8'h79) ^ data_i[63]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = ^syndrome_o; + err_o[1] = ~err_o[0] & (|syndrome_o); + end +endmodule : caliptra_prim_secded_72_64_dec diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_72_64_enc.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_72_64_enc.sv new file mode 100644 index 000000000..8f0252edd --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_72_64_enc.sv @@ -0,0 +1,24 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED encoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_72_64_enc ( + input [63:0] data_i, + output logic [71:0] data_o +); + + always_comb begin : p_encode + data_o = 72'(data_i); + data_o[64] = ^(data_o & 72'h00B9000000001FFFFF); + data_o[65] = ^(data_o & 72'h005E00000FFFE0003F); + data_o[66] = ^(data_o & 72'h0067003FF003E007C1); + data_o[67] = ^(data_o & 72'h00CD0FC0F03C207842); + data_o[68] = ^(data_o & 72'h00B671C711C4438884); + data_o[69] = ^(data_o & 72'h00B5B65926488C9108); + data_o[70] = ^(data_o & 72'h00CBDAAA4A91152210); + data_o[71] = ^(data_o & 72'h007AED348D221A4420); + end + +endmodule : caliptra_prim_secded_72_64_enc diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_hamming_22_16_dec.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_hamming_22_16_dec.sv new file mode 100644 index 000000000..020346319 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_hamming_22_16_dec.sv @@ -0,0 +1,45 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED decoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_hamming_22_16_dec ( + input [21:0] data_i, + output logic [15:0] data_o, + output logic [5:0] syndrome_o, + output logic [1:0] err_o +); + + always_comb begin : p_encode + // Syndrome calculation + syndrome_o[0] = ^(data_i & 22'h01AD5B); + syndrome_o[1] = ^(data_i & 22'h02366D); + syndrome_o[2] = ^(data_i & 22'h04C78E); + syndrome_o[3] = ^(data_i & 22'h0807F0); + syndrome_o[4] = ^(data_i & 22'h10F800); + syndrome_o[5] = ^(data_i & 22'h3FFFFF); + + // Corrected output calculation + data_o[0] = (syndrome_o == 6'h23) ^ data_i[0]; + data_o[1] = (syndrome_o == 6'h25) ^ data_i[1]; + data_o[2] = (syndrome_o == 6'h26) ^ data_i[2]; + data_o[3] = (syndrome_o == 6'h27) ^ data_i[3]; + data_o[4] = (syndrome_o == 6'h29) ^ data_i[4]; + data_o[5] = (syndrome_o == 6'h2a) ^ data_i[5]; + data_o[6] = (syndrome_o == 6'h2b) ^ data_i[6]; + data_o[7] = (syndrome_o == 6'h2c) ^ data_i[7]; + data_o[8] = (syndrome_o == 6'h2d) ^ data_i[8]; + data_o[9] = (syndrome_o == 6'h2e) ^ data_i[9]; + data_o[10] = (syndrome_o == 6'h2f) ^ data_i[10]; + data_o[11] = (syndrome_o == 6'h31) ^ data_i[11]; + data_o[12] = (syndrome_o == 6'h32) ^ data_i[12]; + data_o[13] = (syndrome_o == 6'h33) ^ data_i[13]; + data_o[14] = (syndrome_o == 6'h34) ^ data_i[14]; + data_o[15] = (syndrome_o == 6'h35) ^ data_i[15]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = syndrome_o[5]; + err_o[1] = |syndrome_o[4:0] & ~syndrome_o[5]; + end +endmodule : caliptra_prim_secded_hamming_22_16_dec diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_hamming_22_16_enc.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_hamming_22_16_enc.sv new file mode 100644 index 000000000..cdb2e3242 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_hamming_22_16_enc.sv @@ -0,0 +1,22 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED encoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_hamming_22_16_enc ( + input [15:0] data_i, + output logic [21:0] data_o +); + + always_comb begin : p_encode + data_o = 22'(data_i); + data_o[16] = ^(data_o & 22'h00AD5B); + data_o[17] = ^(data_o & 22'h00366D); + data_o[18] = ^(data_o & 22'h00C78E); + data_o[19] = ^(data_o & 22'h0007F0); + data_o[20] = ^(data_o & 22'h00F800); + data_o[21] = ^(data_o & 22'h1FFFFF); + end + +endmodule : caliptra_prim_secded_hamming_22_16_enc diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_hamming_39_32_dec.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_hamming_39_32_dec.sv new file mode 100644 index 000000000..770ccd2dc --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_hamming_39_32_dec.sv @@ -0,0 +1,62 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED decoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_hamming_39_32_dec ( + input [38:0] data_i, + output logic [31:0] data_o, + output logic [6:0] syndrome_o, + output logic [1:0] err_o +); + + always_comb begin : p_encode + // Syndrome calculation + syndrome_o[0] = ^(data_i & 39'h0156AAAD5B); + syndrome_o[1] = ^(data_i & 39'h029B33366D); + syndrome_o[2] = ^(data_i & 39'h04E3C3C78E); + syndrome_o[3] = ^(data_i & 39'h0803FC07F0); + syndrome_o[4] = ^(data_i & 39'h1003FFF800); + syndrome_o[5] = ^(data_i & 39'h20FC000000); + syndrome_o[6] = ^(data_i & 39'h7FFFFFFFFF); + + // Corrected output calculation + data_o[0] = (syndrome_o == 7'h43) ^ data_i[0]; + data_o[1] = (syndrome_o == 7'h45) ^ data_i[1]; + data_o[2] = (syndrome_o == 7'h46) ^ data_i[2]; + data_o[3] = (syndrome_o == 7'h47) ^ data_i[3]; + data_o[4] = (syndrome_o == 7'h49) ^ data_i[4]; + data_o[5] = (syndrome_o == 7'h4a) ^ data_i[5]; + data_o[6] = (syndrome_o == 7'h4b) ^ data_i[6]; + data_o[7] = (syndrome_o == 7'h4c) ^ data_i[7]; + data_o[8] = (syndrome_o == 7'h4d) ^ data_i[8]; + data_o[9] = (syndrome_o == 7'h4e) ^ data_i[9]; + data_o[10] = (syndrome_o == 7'h4f) ^ data_i[10]; + data_o[11] = (syndrome_o == 7'h51) ^ data_i[11]; + data_o[12] = (syndrome_o == 7'h52) ^ data_i[12]; + data_o[13] = (syndrome_o == 7'h53) ^ data_i[13]; + data_o[14] = (syndrome_o == 7'h54) ^ data_i[14]; + data_o[15] = (syndrome_o == 7'h55) ^ data_i[15]; + data_o[16] = (syndrome_o == 7'h56) ^ data_i[16]; + data_o[17] = (syndrome_o == 7'h57) ^ data_i[17]; + data_o[18] = (syndrome_o == 7'h58) ^ data_i[18]; + data_o[19] = (syndrome_o == 7'h59) ^ data_i[19]; + data_o[20] = (syndrome_o == 7'h5a) ^ data_i[20]; + data_o[21] = (syndrome_o == 7'h5b) ^ data_i[21]; + data_o[22] = (syndrome_o == 7'h5c) ^ data_i[22]; + data_o[23] = (syndrome_o == 7'h5d) ^ data_i[23]; + data_o[24] = (syndrome_o == 7'h5e) ^ data_i[24]; + data_o[25] = (syndrome_o == 7'h5f) ^ data_i[25]; + data_o[26] = (syndrome_o == 7'h61) ^ data_i[26]; + data_o[27] = (syndrome_o == 7'h62) ^ data_i[27]; + data_o[28] = (syndrome_o == 7'h63) ^ data_i[28]; + data_o[29] = (syndrome_o == 7'h64) ^ data_i[29]; + data_o[30] = (syndrome_o == 7'h65) ^ data_i[30]; + data_o[31] = (syndrome_o == 7'h66) ^ data_i[31]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = syndrome_o[6]; + err_o[1] = |syndrome_o[5:0] & ~syndrome_o[6]; + end +endmodule : caliptra_prim_secded_hamming_39_32_dec diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_hamming_39_32_enc.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_hamming_39_32_enc.sv new file mode 100644 index 000000000..e80ccfbf7 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_hamming_39_32_enc.sv @@ -0,0 +1,23 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED encoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_hamming_39_32_enc ( + input [31:0] data_i, + output logic [38:0] data_o +); + + always_comb begin : p_encode + data_o = 39'(data_i); + data_o[32] = ^(data_o & 39'h0056AAAD5B); + data_o[33] = ^(data_o & 39'h009B33366D); + data_o[34] = ^(data_o & 39'h00E3C3C78E); + data_o[35] = ^(data_o & 39'h0003FC07F0); + data_o[36] = ^(data_o & 39'h0003FFF800); + data_o[37] = ^(data_o & 39'h00FC000000); + data_o[38] = ^(data_o & 39'h3FFFFFFFFF); + end + +endmodule : caliptra_prim_secded_hamming_39_32_enc diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_hamming_72_64_dec.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_hamming_72_64_dec.sv new file mode 100644 index 000000000..5809cfc34 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_hamming_72_64_dec.sv @@ -0,0 +1,95 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED decoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_hamming_72_64_dec ( + input [71:0] data_i, + output logic [63:0] data_o, + output logic [7:0] syndrome_o, + output logic [1:0] err_o +); + + always_comb begin : p_encode + // Syndrome calculation + syndrome_o[0] = ^(data_i & 72'h01AB55555556AAAD5B); + syndrome_o[1] = ^(data_i & 72'h02CD9999999B33366D); + syndrome_o[2] = ^(data_i & 72'h04F1E1E1E1E3C3C78E); + syndrome_o[3] = ^(data_i & 72'h0801FE01FE03FC07F0); + syndrome_o[4] = ^(data_i & 72'h1001FFFE0003FFF800); + syndrome_o[5] = ^(data_i & 72'h2001FFFFFFFC000000); + syndrome_o[6] = ^(data_i & 72'h40FE00000000000000); + syndrome_o[7] = ^(data_i & 72'hFFFFFFFFFFFFFFFFFF); + + // Corrected output calculation + data_o[0] = (syndrome_o == 8'h83) ^ data_i[0]; + data_o[1] = (syndrome_o == 8'h85) ^ data_i[1]; + data_o[2] = (syndrome_o == 8'h86) ^ data_i[2]; + data_o[3] = (syndrome_o == 8'h87) ^ data_i[3]; + data_o[4] = (syndrome_o == 8'h89) ^ data_i[4]; + data_o[5] = (syndrome_o == 8'h8a) ^ data_i[5]; + data_o[6] = (syndrome_o == 8'h8b) ^ data_i[6]; + data_o[7] = (syndrome_o == 8'h8c) ^ data_i[7]; + data_o[8] = (syndrome_o == 8'h8d) ^ data_i[8]; + data_o[9] = (syndrome_o == 8'h8e) ^ data_i[9]; + data_o[10] = (syndrome_o == 8'h8f) ^ data_i[10]; + data_o[11] = (syndrome_o == 8'h91) ^ data_i[11]; + data_o[12] = (syndrome_o == 8'h92) ^ data_i[12]; + data_o[13] = (syndrome_o == 8'h93) ^ data_i[13]; + data_o[14] = (syndrome_o == 8'h94) ^ data_i[14]; + data_o[15] = (syndrome_o == 8'h95) ^ data_i[15]; + data_o[16] = (syndrome_o == 8'h96) ^ data_i[16]; + data_o[17] = (syndrome_o == 8'h97) ^ data_i[17]; + data_o[18] = (syndrome_o == 8'h98) ^ data_i[18]; + data_o[19] = (syndrome_o == 8'h99) ^ data_i[19]; + data_o[20] = (syndrome_o == 8'h9a) ^ data_i[20]; + data_o[21] = (syndrome_o == 8'h9b) ^ data_i[21]; + data_o[22] = (syndrome_o == 8'h9c) ^ data_i[22]; + data_o[23] = (syndrome_o == 8'h9d) ^ data_i[23]; + data_o[24] = (syndrome_o == 8'h9e) ^ data_i[24]; + data_o[25] = (syndrome_o == 8'h9f) ^ data_i[25]; + data_o[26] = (syndrome_o == 8'ha1) ^ data_i[26]; + data_o[27] = (syndrome_o == 8'ha2) ^ data_i[27]; + data_o[28] = (syndrome_o == 8'ha3) ^ data_i[28]; + data_o[29] = (syndrome_o == 8'ha4) ^ data_i[29]; + data_o[30] = (syndrome_o == 8'ha5) ^ data_i[30]; + data_o[31] = (syndrome_o == 8'ha6) ^ data_i[31]; + data_o[32] = (syndrome_o == 8'ha7) ^ data_i[32]; + data_o[33] = (syndrome_o == 8'ha8) ^ data_i[33]; + data_o[34] = (syndrome_o == 8'ha9) ^ data_i[34]; + data_o[35] = (syndrome_o == 8'haa) ^ data_i[35]; + data_o[36] = (syndrome_o == 8'hab) ^ data_i[36]; + data_o[37] = (syndrome_o == 8'hac) ^ data_i[37]; + data_o[38] = (syndrome_o == 8'had) ^ data_i[38]; + data_o[39] = (syndrome_o == 8'hae) ^ data_i[39]; + data_o[40] = (syndrome_o == 8'haf) ^ data_i[40]; + data_o[41] = (syndrome_o == 8'hb0) ^ data_i[41]; + data_o[42] = (syndrome_o == 8'hb1) ^ data_i[42]; + data_o[43] = (syndrome_o == 8'hb2) ^ data_i[43]; + data_o[44] = (syndrome_o == 8'hb3) ^ data_i[44]; + data_o[45] = (syndrome_o == 8'hb4) ^ data_i[45]; + data_o[46] = (syndrome_o == 8'hb5) ^ data_i[46]; + data_o[47] = (syndrome_o == 8'hb6) ^ data_i[47]; + data_o[48] = (syndrome_o == 8'hb7) ^ data_i[48]; + data_o[49] = (syndrome_o == 8'hb8) ^ data_i[49]; + data_o[50] = (syndrome_o == 8'hb9) ^ data_i[50]; + data_o[51] = (syndrome_o == 8'hba) ^ data_i[51]; + data_o[52] = (syndrome_o == 8'hbb) ^ data_i[52]; + data_o[53] = (syndrome_o == 8'hbc) ^ data_i[53]; + data_o[54] = (syndrome_o == 8'hbd) ^ data_i[54]; + data_o[55] = (syndrome_o == 8'hbe) ^ data_i[55]; + data_o[56] = (syndrome_o == 8'hbf) ^ data_i[56]; + data_o[57] = (syndrome_o == 8'hc1) ^ data_i[57]; + data_o[58] = (syndrome_o == 8'hc2) ^ data_i[58]; + data_o[59] = (syndrome_o == 8'hc3) ^ data_i[59]; + data_o[60] = (syndrome_o == 8'hc4) ^ data_i[60]; + data_o[61] = (syndrome_o == 8'hc5) ^ data_i[61]; + data_o[62] = (syndrome_o == 8'hc6) ^ data_i[62]; + data_o[63] = (syndrome_o == 8'hc7) ^ data_i[63]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = syndrome_o[7]; + err_o[1] = |syndrome_o[6:0] & ~syndrome_o[7]; + end +endmodule : caliptra_prim_secded_hamming_72_64_dec diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_hamming_72_64_enc.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_hamming_72_64_enc.sv new file mode 100644 index 000000000..6289dd369 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_hamming_72_64_enc.sv @@ -0,0 +1,24 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED encoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_hamming_72_64_enc ( + input [63:0] data_i, + output logic [71:0] data_o +); + + always_comb begin : p_encode + data_o = 72'(data_i); + data_o[64] = ^(data_o & 72'h00AB55555556AAAD5B); + data_o[65] = ^(data_o & 72'h00CD9999999B33366D); + data_o[66] = ^(data_o & 72'h00F1E1E1E1E3C3C78E); + data_o[67] = ^(data_o & 72'h0001FE01FE03FC07F0); + data_o[68] = ^(data_o & 72'h0001FFFE0003FFF800); + data_o[69] = ^(data_o & 72'h0001FFFFFFFC000000); + data_o[70] = ^(data_o & 72'h00FE00000000000000); + data_o[71] = ^(data_o & 72'h7FFFFFFFFFFFFFFFFF); + end + +endmodule : caliptra_prim_secded_hamming_72_64_enc diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_hamming_76_68_dec.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_hamming_76_68_dec.sv new file mode 100644 index 000000000..3178eedc2 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_hamming_76_68_dec.sv @@ -0,0 +1,99 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED decoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_hamming_76_68_dec ( + input [75:0] data_i, + output logic [67:0] data_o, + output logic [7:0] syndrome_o, + output logic [1:0] err_o +); + + always_comb begin : p_encode + // Syndrome calculation + syndrome_o[0] = ^(data_i & 76'h01AAB55555556AAAD5B); + syndrome_o[1] = ^(data_i & 76'h02CCD9999999B33366D); + syndrome_o[2] = ^(data_i & 76'h040F1E1E1E1E3C3C78E); + syndrome_o[3] = ^(data_i & 76'h08F01FE01FE03FC07F0); + syndrome_o[4] = ^(data_i & 76'h10001FFFE0003FFF800); + syndrome_o[5] = ^(data_i & 76'h20001FFFFFFFC000000); + syndrome_o[6] = ^(data_i & 76'h40FFE00000000000000); + syndrome_o[7] = ^(data_i & 76'hFFFFFFFFFFFFFFFFFFF); + + // Corrected output calculation + data_o[0] = (syndrome_o == 8'h83) ^ data_i[0]; + data_o[1] = (syndrome_o == 8'h85) ^ data_i[1]; + data_o[2] = (syndrome_o == 8'h86) ^ data_i[2]; + data_o[3] = (syndrome_o == 8'h87) ^ data_i[3]; + data_o[4] = (syndrome_o == 8'h89) ^ data_i[4]; + data_o[5] = (syndrome_o == 8'h8a) ^ data_i[5]; + data_o[6] = (syndrome_o == 8'h8b) ^ data_i[6]; + data_o[7] = (syndrome_o == 8'h8c) ^ data_i[7]; + data_o[8] = (syndrome_o == 8'h8d) ^ data_i[8]; + data_o[9] = (syndrome_o == 8'h8e) ^ data_i[9]; + data_o[10] = (syndrome_o == 8'h8f) ^ data_i[10]; + data_o[11] = (syndrome_o == 8'h91) ^ data_i[11]; + data_o[12] = (syndrome_o == 8'h92) ^ data_i[12]; + data_o[13] = (syndrome_o == 8'h93) ^ data_i[13]; + data_o[14] = (syndrome_o == 8'h94) ^ data_i[14]; + data_o[15] = (syndrome_o == 8'h95) ^ data_i[15]; + data_o[16] = (syndrome_o == 8'h96) ^ data_i[16]; + data_o[17] = (syndrome_o == 8'h97) ^ data_i[17]; + data_o[18] = (syndrome_o == 8'h98) ^ data_i[18]; + data_o[19] = (syndrome_o == 8'h99) ^ data_i[19]; + data_o[20] = (syndrome_o == 8'h9a) ^ data_i[20]; + data_o[21] = (syndrome_o == 8'h9b) ^ data_i[21]; + data_o[22] = (syndrome_o == 8'h9c) ^ data_i[22]; + data_o[23] = (syndrome_o == 8'h9d) ^ data_i[23]; + data_o[24] = (syndrome_o == 8'h9e) ^ data_i[24]; + data_o[25] = (syndrome_o == 8'h9f) ^ data_i[25]; + data_o[26] = (syndrome_o == 8'ha1) ^ data_i[26]; + data_o[27] = (syndrome_o == 8'ha2) ^ data_i[27]; + data_o[28] = (syndrome_o == 8'ha3) ^ data_i[28]; + data_o[29] = (syndrome_o == 8'ha4) ^ data_i[29]; + data_o[30] = (syndrome_o == 8'ha5) ^ data_i[30]; + data_o[31] = (syndrome_o == 8'ha6) ^ data_i[31]; + data_o[32] = (syndrome_o == 8'ha7) ^ data_i[32]; + data_o[33] = (syndrome_o == 8'ha8) ^ data_i[33]; + data_o[34] = (syndrome_o == 8'ha9) ^ data_i[34]; + data_o[35] = (syndrome_o == 8'haa) ^ data_i[35]; + data_o[36] = (syndrome_o == 8'hab) ^ data_i[36]; + data_o[37] = (syndrome_o == 8'hac) ^ data_i[37]; + data_o[38] = (syndrome_o == 8'had) ^ data_i[38]; + data_o[39] = (syndrome_o == 8'hae) ^ data_i[39]; + data_o[40] = (syndrome_o == 8'haf) ^ data_i[40]; + data_o[41] = (syndrome_o == 8'hb0) ^ data_i[41]; + data_o[42] = (syndrome_o == 8'hb1) ^ data_i[42]; + data_o[43] = (syndrome_o == 8'hb2) ^ data_i[43]; + data_o[44] = (syndrome_o == 8'hb3) ^ data_i[44]; + data_o[45] = (syndrome_o == 8'hb4) ^ data_i[45]; + data_o[46] = (syndrome_o == 8'hb5) ^ data_i[46]; + data_o[47] = (syndrome_o == 8'hb6) ^ data_i[47]; + data_o[48] = (syndrome_o == 8'hb7) ^ data_i[48]; + data_o[49] = (syndrome_o == 8'hb8) ^ data_i[49]; + data_o[50] = (syndrome_o == 8'hb9) ^ data_i[50]; + data_o[51] = (syndrome_o == 8'hba) ^ data_i[51]; + data_o[52] = (syndrome_o == 8'hbb) ^ data_i[52]; + data_o[53] = (syndrome_o == 8'hbc) ^ data_i[53]; + data_o[54] = (syndrome_o == 8'hbd) ^ data_i[54]; + data_o[55] = (syndrome_o == 8'hbe) ^ data_i[55]; + data_o[56] = (syndrome_o == 8'hbf) ^ data_i[56]; + data_o[57] = (syndrome_o == 8'hc1) ^ data_i[57]; + data_o[58] = (syndrome_o == 8'hc2) ^ data_i[58]; + data_o[59] = (syndrome_o == 8'hc3) ^ data_i[59]; + data_o[60] = (syndrome_o == 8'hc4) ^ data_i[60]; + data_o[61] = (syndrome_o == 8'hc5) ^ data_i[61]; + data_o[62] = (syndrome_o == 8'hc6) ^ data_i[62]; + data_o[63] = (syndrome_o == 8'hc7) ^ data_i[63]; + data_o[64] = (syndrome_o == 8'hc8) ^ data_i[64]; + data_o[65] = (syndrome_o == 8'hc9) ^ data_i[65]; + data_o[66] = (syndrome_o == 8'hca) ^ data_i[66]; + data_o[67] = (syndrome_o == 8'hcb) ^ data_i[67]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = syndrome_o[7]; + err_o[1] = |syndrome_o[6:0] & ~syndrome_o[7]; + end +endmodule : caliptra_prim_secded_hamming_76_68_dec diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_hamming_76_68_enc.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_hamming_76_68_enc.sv new file mode 100644 index 000000000..13643a457 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_hamming_76_68_enc.sv @@ -0,0 +1,24 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED encoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_hamming_76_68_enc ( + input [67:0] data_i, + output logic [75:0] data_o +); + + always_comb begin : p_encode + data_o = 76'(data_i); + data_o[68] = ^(data_o & 76'h00AAB55555556AAAD5B); + data_o[69] = ^(data_o & 76'h00CCD9999999B33366D); + data_o[70] = ^(data_o & 76'h000F1E1E1E1E3C3C78E); + data_o[71] = ^(data_o & 76'h00F01FE01FE03FC07F0); + data_o[72] = ^(data_o & 76'h00001FFFE0003FFF800); + data_o[73] = ^(data_o & 76'h00001FFFFFFFC000000); + data_o[74] = ^(data_o & 76'h00FFE00000000000000); + data_o[75] = ^(data_o & 76'h7FFFFFFFFFFFFFFFFFF); + end + +endmodule : caliptra_prim_secded_hamming_76_68_enc diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_inv_22_16_dec.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_22_16_dec.sv new file mode 100644 index 000000000..f89aa8109 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_22_16_dec.sv @@ -0,0 +1,45 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED decoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_inv_22_16_dec ( + input [21:0] data_i, + output logic [15:0] data_o, + output logic [5:0] syndrome_o, + output logic [1:0] err_o +); + + always_comb begin : p_encode + // Syndrome calculation + syndrome_o[0] = ^((data_i ^ 22'h2A0000) & 22'h01496E); + syndrome_o[1] = ^((data_i ^ 22'h2A0000) & 22'h02F20B); + syndrome_o[2] = ^((data_i ^ 22'h2A0000) & 22'h048ED8); + syndrome_o[3] = ^((data_i ^ 22'h2A0000) & 22'h087714); + syndrome_o[4] = ^((data_i ^ 22'h2A0000) & 22'h10ACA5); + syndrome_o[5] = ^((data_i ^ 22'h2A0000) & 22'h2011F3); + + // Corrected output calculation + data_o[0] = (syndrome_o == 6'h32) ^ data_i[0]; + data_o[1] = (syndrome_o == 6'h23) ^ data_i[1]; + data_o[2] = (syndrome_o == 6'h19) ^ data_i[2]; + data_o[3] = (syndrome_o == 6'h7) ^ data_i[3]; + data_o[4] = (syndrome_o == 6'h2c) ^ data_i[4]; + data_o[5] = (syndrome_o == 6'h31) ^ data_i[5]; + data_o[6] = (syndrome_o == 6'h25) ^ data_i[6]; + data_o[7] = (syndrome_o == 6'h34) ^ data_i[7]; + data_o[8] = (syndrome_o == 6'h29) ^ data_i[8]; + data_o[9] = (syndrome_o == 6'he) ^ data_i[9]; + data_o[10] = (syndrome_o == 6'h1c) ^ data_i[10]; + data_o[11] = (syndrome_o == 6'h15) ^ data_i[11]; + data_o[12] = (syndrome_o == 6'h2a) ^ data_i[12]; + data_o[13] = (syndrome_o == 6'h1a) ^ data_i[13]; + data_o[14] = (syndrome_o == 6'hb) ^ data_i[14]; + data_o[15] = (syndrome_o == 6'h16) ^ data_i[15]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = ^syndrome_o; + err_o[1] = ~err_o[0] & (|syndrome_o); + end +endmodule : caliptra_prim_secded_inv_22_16_dec diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_inv_22_16_enc.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_22_16_enc.sv new file mode 100644 index 000000000..c8726f793 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_22_16_enc.sv @@ -0,0 +1,23 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED encoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_inv_22_16_enc ( + input [15:0] data_i, + output logic [21:0] data_o +); + + always_comb begin : p_encode + data_o = 22'(data_i); + data_o[16] = ^(data_o & 22'h00496E); + data_o[17] = ^(data_o & 22'h00F20B); + data_o[18] = ^(data_o & 22'h008ED8); + data_o[19] = ^(data_o & 22'h007714); + data_o[20] = ^(data_o & 22'h00ACA5); + data_o[21] = ^(data_o & 22'h0011F3); + data_o ^= 22'h2A0000; + end + +endmodule : caliptra_prim_secded_inv_22_16_enc diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_inv_28_22_dec.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_28_22_dec.sv new file mode 100644 index 000000000..57b2c1742 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_28_22_dec.sv @@ -0,0 +1,51 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED decoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_inv_28_22_dec ( + input [27:0] data_i, + output logic [21:0] data_o, + output logic [5:0] syndrome_o, + output logic [1:0] err_o +); + + always_comb begin : p_encode + // Syndrome calculation + syndrome_o[0] = ^((data_i ^ 28'hA800000) & 28'h07003FF); + syndrome_o[1] = ^((data_i ^ 28'hA800000) & 28'h090FC0F); + syndrome_o[2] = ^((data_i ^ 28'hA800000) & 28'h1271C71); + syndrome_o[3] = ^((data_i ^ 28'hA800000) & 28'h23B6592); + syndrome_o[4] = ^((data_i ^ 28'hA800000) & 28'h43DAAA4); + syndrome_o[5] = ^((data_i ^ 28'hA800000) & 28'h83ED348); + + // Corrected output calculation + data_o[0] = (syndrome_o == 6'h7) ^ data_i[0]; + data_o[1] = (syndrome_o == 6'hb) ^ data_i[1]; + data_o[2] = (syndrome_o == 6'h13) ^ data_i[2]; + data_o[3] = (syndrome_o == 6'h23) ^ data_i[3]; + data_o[4] = (syndrome_o == 6'hd) ^ data_i[4]; + data_o[5] = (syndrome_o == 6'h15) ^ data_i[5]; + data_o[6] = (syndrome_o == 6'h25) ^ data_i[6]; + data_o[7] = (syndrome_o == 6'h19) ^ data_i[7]; + data_o[8] = (syndrome_o == 6'h29) ^ data_i[8]; + data_o[9] = (syndrome_o == 6'h31) ^ data_i[9]; + data_o[10] = (syndrome_o == 6'he) ^ data_i[10]; + data_o[11] = (syndrome_o == 6'h16) ^ data_i[11]; + data_o[12] = (syndrome_o == 6'h26) ^ data_i[12]; + data_o[13] = (syndrome_o == 6'h1a) ^ data_i[13]; + data_o[14] = (syndrome_o == 6'h2a) ^ data_i[14]; + data_o[15] = (syndrome_o == 6'h32) ^ data_i[15]; + data_o[16] = (syndrome_o == 6'h1c) ^ data_i[16]; + data_o[17] = (syndrome_o == 6'h2c) ^ data_i[17]; + data_o[18] = (syndrome_o == 6'h34) ^ data_i[18]; + data_o[19] = (syndrome_o == 6'h38) ^ data_i[19]; + data_o[20] = (syndrome_o == 6'h3b) ^ data_i[20]; + data_o[21] = (syndrome_o == 6'h3d) ^ data_i[21]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = ^syndrome_o; + err_o[1] = ~err_o[0] & (|syndrome_o); + end +endmodule : caliptra_prim_secded_inv_28_22_dec diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_inv_28_22_enc.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_28_22_enc.sv new file mode 100644 index 000000000..a847398b4 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_28_22_enc.sv @@ -0,0 +1,23 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED encoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_inv_28_22_enc ( + input [21:0] data_i, + output logic [27:0] data_o +); + + always_comb begin : p_encode + data_o = 28'(data_i); + data_o[22] = ^(data_o & 28'h03003FF); + data_o[23] = ^(data_o & 28'h010FC0F); + data_o[24] = ^(data_o & 28'h0271C71); + data_o[25] = ^(data_o & 28'h03B6592); + data_o[26] = ^(data_o & 28'h03DAAA4); + data_o[27] = ^(data_o & 28'h03ED348); + data_o ^= 28'hA800000; + end + +endmodule : caliptra_prim_secded_inv_28_22_enc diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_inv_39_32_dec.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_39_32_dec.sv new file mode 100644 index 000000000..677c17452 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_39_32_dec.sv @@ -0,0 +1,62 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED decoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_inv_39_32_dec ( + input [38:0] data_i, + output logic [31:0] data_o, + output logic [6:0] syndrome_o, + output logic [1:0] err_o +); + + always_comb begin : p_encode + // Syndrome calculation + syndrome_o[0] = ^((data_i ^ 39'h2A00000000) & 39'h012606BD25); + syndrome_o[1] = ^((data_i ^ 39'h2A00000000) & 39'h02DEBA8050); + syndrome_o[2] = ^((data_i ^ 39'h2A00000000) & 39'h04413D89AA); + syndrome_o[3] = ^((data_i ^ 39'h2A00000000) & 39'h0831234ED1); + syndrome_o[4] = ^((data_i ^ 39'h2A00000000) & 39'h10C2C1323B); + syndrome_o[5] = ^((data_i ^ 39'h2A00000000) & 39'h202DCC624C); + syndrome_o[6] = ^((data_i ^ 39'h2A00000000) & 39'h4098505586); + + // Corrected output calculation + data_o[0] = (syndrome_o == 7'h19) ^ data_i[0]; + data_o[1] = (syndrome_o == 7'h54) ^ data_i[1]; + data_o[2] = (syndrome_o == 7'h61) ^ data_i[2]; + data_o[3] = (syndrome_o == 7'h34) ^ data_i[3]; + data_o[4] = (syndrome_o == 7'h1a) ^ data_i[4]; + data_o[5] = (syndrome_o == 7'h15) ^ data_i[5]; + data_o[6] = (syndrome_o == 7'h2a) ^ data_i[6]; + data_o[7] = (syndrome_o == 7'h4c) ^ data_i[7]; + data_o[8] = (syndrome_o == 7'h45) ^ data_i[8]; + data_o[9] = (syndrome_o == 7'h38) ^ data_i[9]; + data_o[10] = (syndrome_o == 7'h49) ^ data_i[10]; + data_o[11] = (syndrome_o == 7'hd) ^ data_i[11]; + data_o[12] = (syndrome_o == 7'h51) ^ data_i[12]; + data_o[13] = (syndrome_o == 7'h31) ^ data_i[13]; + data_o[14] = (syndrome_o == 7'h68) ^ data_i[14]; + data_o[15] = (syndrome_o == 7'h7) ^ data_i[15]; + data_o[16] = (syndrome_o == 7'h1c) ^ data_i[16]; + data_o[17] = (syndrome_o == 7'hb) ^ data_i[17]; + data_o[18] = (syndrome_o == 7'h25) ^ data_i[18]; + data_o[19] = (syndrome_o == 7'h26) ^ data_i[19]; + data_o[20] = (syndrome_o == 7'h46) ^ data_i[20]; + data_o[21] = (syndrome_o == 7'he) ^ data_i[21]; + data_o[22] = (syndrome_o == 7'h70) ^ data_i[22]; + data_o[23] = (syndrome_o == 7'h32) ^ data_i[23]; + data_o[24] = (syndrome_o == 7'h2c) ^ data_i[24]; + data_o[25] = (syndrome_o == 7'h13) ^ data_i[25]; + data_o[26] = (syndrome_o == 7'h23) ^ data_i[26]; + data_o[27] = (syndrome_o == 7'h62) ^ data_i[27]; + data_o[28] = (syndrome_o == 7'h4a) ^ data_i[28]; + data_o[29] = (syndrome_o == 7'h29) ^ data_i[29]; + data_o[30] = (syndrome_o == 7'h16) ^ data_i[30]; + data_o[31] = (syndrome_o == 7'h52) ^ data_i[31]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = ^syndrome_o; + err_o[1] = ~err_o[0] & (|syndrome_o); + end +endmodule : caliptra_prim_secded_inv_39_32_dec diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_inv_39_32_enc.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_39_32_enc.sv new file mode 100644 index 000000000..1cbd66a7e --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_39_32_enc.sv @@ -0,0 +1,24 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED encoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_inv_39_32_enc ( + input [31:0] data_i, + output logic [38:0] data_o +); + + always_comb begin : p_encode + data_o = 39'(data_i); + data_o[32] = ^(data_o & 39'h002606BD25); + data_o[33] = ^(data_o & 39'h00DEBA8050); + data_o[34] = ^(data_o & 39'h00413D89AA); + data_o[35] = ^(data_o & 39'h0031234ED1); + data_o[36] = ^(data_o & 39'h00C2C1323B); + data_o[37] = ^(data_o & 39'h002DCC624C); + data_o[38] = ^(data_o & 39'h0098505586); + data_o ^= 39'h2A00000000; + end + +endmodule : caliptra_prim_secded_inv_39_32_enc diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_inv_64_57_dec.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_64_57_dec.sv new file mode 100644 index 000000000..28fad1dc4 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_64_57_dec.sv @@ -0,0 +1,87 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED decoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_inv_64_57_dec ( + input [63:0] data_i, + output logic [56:0] data_o, + output logic [6:0] syndrome_o, + output logic [1:0] err_o +); + + always_comb begin : p_encode + // Syndrome calculation + syndrome_o[0] = ^((data_i ^ 64'h5400000000000000) & 64'h0303FFF800007FFF); + syndrome_o[1] = ^((data_i ^ 64'h5400000000000000) & 64'h057C1FF801FF801F); + syndrome_o[2] = ^((data_i ^ 64'h5400000000000000) & 64'h09BDE1F87E0781E1); + syndrome_o[3] = ^((data_i ^ 64'h5400000000000000) & 64'h11DEEE3B8E388E22); + syndrome_o[4] = ^((data_i ^ 64'h5400000000000000) & 64'h21EF76CDB2C93244); + syndrome_o[5] = ^((data_i ^ 64'h5400000000000000) & 64'h41F7BB56D5525488); + syndrome_o[6] = ^((data_i ^ 64'h5400000000000000) & 64'h81FBDDA769A46910); + + // Corrected output calculation + data_o[0] = (syndrome_o == 7'h7) ^ data_i[0]; + data_o[1] = (syndrome_o == 7'hb) ^ data_i[1]; + data_o[2] = (syndrome_o == 7'h13) ^ data_i[2]; + data_o[3] = (syndrome_o == 7'h23) ^ data_i[3]; + data_o[4] = (syndrome_o == 7'h43) ^ data_i[4]; + data_o[5] = (syndrome_o == 7'hd) ^ data_i[5]; + data_o[6] = (syndrome_o == 7'h15) ^ data_i[6]; + data_o[7] = (syndrome_o == 7'h25) ^ data_i[7]; + data_o[8] = (syndrome_o == 7'h45) ^ data_i[8]; + data_o[9] = (syndrome_o == 7'h19) ^ data_i[9]; + data_o[10] = (syndrome_o == 7'h29) ^ data_i[10]; + data_o[11] = (syndrome_o == 7'h49) ^ data_i[11]; + data_o[12] = (syndrome_o == 7'h31) ^ data_i[12]; + data_o[13] = (syndrome_o == 7'h51) ^ data_i[13]; + data_o[14] = (syndrome_o == 7'h61) ^ data_i[14]; + data_o[15] = (syndrome_o == 7'he) ^ data_i[15]; + data_o[16] = (syndrome_o == 7'h16) ^ data_i[16]; + data_o[17] = (syndrome_o == 7'h26) ^ data_i[17]; + data_o[18] = (syndrome_o == 7'h46) ^ data_i[18]; + data_o[19] = (syndrome_o == 7'h1a) ^ data_i[19]; + data_o[20] = (syndrome_o == 7'h2a) ^ data_i[20]; + data_o[21] = (syndrome_o == 7'h4a) ^ data_i[21]; + data_o[22] = (syndrome_o == 7'h32) ^ data_i[22]; + data_o[23] = (syndrome_o == 7'h52) ^ data_i[23]; + data_o[24] = (syndrome_o == 7'h62) ^ data_i[24]; + data_o[25] = (syndrome_o == 7'h1c) ^ data_i[25]; + data_o[26] = (syndrome_o == 7'h2c) ^ data_i[26]; + data_o[27] = (syndrome_o == 7'h4c) ^ data_i[27]; + data_o[28] = (syndrome_o == 7'h34) ^ data_i[28]; + data_o[29] = (syndrome_o == 7'h54) ^ data_i[29]; + data_o[30] = (syndrome_o == 7'h64) ^ data_i[30]; + data_o[31] = (syndrome_o == 7'h38) ^ data_i[31]; + data_o[32] = (syndrome_o == 7'h58) ^ data_i[32]; + data_o[33] = (syndrome_o == 7'h68) ^ data_i[33]; + data_o[34] = (syndrome_o == 7'h70) ^ data_i[34]; + data_o[35] = (syndrome_o == 7'h1f) ^ data_i[35]; + data_o[36] = (syndrome_o == 7'h2f) ^ data_i[36]; + data_o[37] = (syndrome_o == 7'h4f) ^ data_i[37]; + data_o[38] = (syndrome_o == 7'h37) ^ data_i[38]; + data_o[39] = (syndrome_o == 7'h57) ^ data_i[39]; + data_o[40] = (syndrome_o == 7'h67) ^ data_i[40]; + data_o[41] = (syndrome_o == 7'h3b) ^ data_i[41]; + data_o[42] = (syndrome_o == 7'h5b) ^ data_i[42]; + data_o[43] = (syndrome_o == 7'h6b) ^ data_i[43]; + data_o[44] = (syndrome_o == 7'h73) ^ data_i[44]; + data_o[45] = (syndrome_o == 7'h3d) ^ data_i[45]; + data_o[46] = (syndrome_o == 7'h5d) ^ data_i[46]; + data_o[47] = (syndrome_o == 7'h6d) ^ data_i[47]; + data_o[48] = (syndrome_o == 7'h75) ^ data_i[48]; + data_o[49] = (syndrome_o == 7'h79) ^ data_i[49]; + data_o[50] = (syndrome_o == 7'h3e) ^ data_i[50]; + data_o[51] = (syndrome_o == 7'h5e) ^ data_i[51]; + data_o[52] = (syndrome_o == 7'h6e) ^ data_i[52]; + data_o[53] = (syndrome_o == 7'h76) ^ data_i[53]; + data_o[54] = (syndrome_o == 7'h7a) ^ data_i[54]; + data_o[55] = (syndrome_o == 7'h7c) ^ data_i[55]; + data_o[56] = (syndrome_o == 7'h7f) ^ data_i[56]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = ^syndrome_o; + err_o[1] = ~err_o[0] & (|syndrome_o); + end +endmodule : caliptra_prim_secded_inv_64_57_dec diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_inv_64_57_enc.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_64_57_enc.sv new file mode 100644 index 000000000..b491a4204 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_64_57_enc.sv @@ -0,0 +1,24 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED encoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_inv_64_57_enc ( + input [56:0] data_i, + output logic [63:0] data_o +); + + always_comb begin : p_encode + data_o = 64'(data_i); + data_o[57] = ^(data_o & 64'h0103FFF800007FFF); + data_o[58] = ^(data_o & 64'h017C1FF801FF801F); + data_o[59] = ^(data_o & 64'h01BDE1F87E0781E1); + data_o[60] = ^(data_o & 64'h01DEEE3B8E388E22); + data_o[61] = ^(data_o & 64'h01EF76CDB2C93244); + data_o[62] = ^(data_o & 64'h01F7BB56D5525488); + data_o[63] = ^(data_o & 64'h01FBDDA769A46910); + data_o ^= 64'h5400000000000000; + end + +endmodule : caliptra_prim_secded_inv_64_57_enc diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_inv_72_64_dec.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_72_64_dec.sv new file mode 100644 index 000000000..13fa06a40 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_72_64_dec.sv @@ -0,0 +1,95 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED decoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_inv_72_64_dec ( + input [71:0] data_i, + output logic [63:0] data_o, + output logic [7:0] syndrome_o, + output logic [1:0] err_o +); + + always_comb begin : p_encode + // Syndrome calculation + syndrome_o[0] = ^((data_i ^ 72'hAA0000000000000000) & 72'h01B9000000001FFFFF); + syndrome_o[1] = ^((data_i ^ 72'hAA0000000000000000) & 72'h025E00000FFFE0003F); + syndrome_o[2] = ^((data_i ^ 72'hAA0000000000000000) & 72'h0467003FF003E007C1); + syndrome_o[3] = ^((data_i ^ 72'hAA0000000000000000) & 72'h08CD0FC0F03C207842); + syndrome_o[4] = ^((data_i ^ 72'hAA0000000000000000) & 72'h10B671C711C4438884); + syndrome_o[5] = ^((data_i ^ 72'hAA0000000000000000) & 72'h20B5B65926488C9108); + syndrome_o[6] = ^((data_i ^ 72'hAA0000000000000000) & 72'h40CBDAAA4A91152210); + syndrome_o[7] = ^((data_i ^ 72'hAA0000000000000000) & 72'h807AED348D221A4420); + + // Corrected output calculation + data_o[0] = (syndrome_o == 8'h7) ^ data_i[0]; + data_o[1] = (syndrome_o == 8'hb) ^ data_i[1]; + data_o[2] = (syndrome_o == 8'h13) ^ data_i[2]; + data_o[3] = (syndrome_o == 8'h23) ^ data_i[3]; + data_o[4] = (syndrome_o == 8'h43) ^ data_i[4]; + data_o[5] = (syndrome_o == 8'h83) ^ data_i[5]; + data_o[6] = (syndrome_o == 8'hd) ^ data_i[6]; + data_o[7] = (syndrome_o == 8'h15) ^ data_i[7]; + data_o[8] = (syndrome_o == 8'h25) ^ data_i[8]; + data_o[9] = (syndrome_o == 8'h45) ^ data_i[9]; + data_o[10] = (syndrome_o == 8'h85) ^ data_i[10]; + data_o[11] = (syndrome_o == 8'h19) ^ data_i[11]; + data_o[12] = (syndrome_o == 8'h29) ^ data_i[12]; + data_o[13] = (syndrome_o == 8'h49) ^ data_i[13]; + data_o[14] = (syndrome_o == 8'h89) ^ data_i[14]; + data_o[15] = (syndrome_o == 8'h31) ^ data_i[15]; + data_o[16] = (syndrome_o == 8'h51) ^ data_i[16]; + data_o[17] = (syndrome_o == 8'h91) ^ data_i[17]; + data_o[18] = (syndrome_o == 8'h61) ^ data_i[18]; + data_o[19] = (syndrome_o == 8'ha1) ^ data_i[19]; + data_o[20] = (syndrome_o == 8'hc1) ^ data_i[20]; + data_o[21] = (syndrome_o == 8'he) ^ data_i[21]; + data_o[22] = (syndrome_o == 8'h16) ^ data_i[22]; + data_o[23] = (syndrome_o == 8'h26) ^ data_i[23]; + data_o[24] = (syndrome_o == 8'h46) ^ data_i[24]; + data_o[25] = (syndrome_o == 8'h86) ^ data_i[25]; + data_o[26] = (syndrome_o == 8'h1a) ^ data_i[26]; + data_o[27] = (syndrome_o == 8'h2a) ^ data_i[27]; + data_o[28] = (syndrome_o == 8'h4a) ^ data_i[28]; + data_o[29] = (syndrome_o == 8'h8a) ^ data_i[29]; + data_o[30] = (syndrome_o == 8'h32) ^ data_i[30]; + data_o[31] = (syndrome_o == 8'h52) ^ data_i[31]; + data_o[32] = (syndrome_o == 8'h92) ^ data_i[32]; + data_o[33] = (syndrome_o == 8'h62) ^ data_i[33]; + data_o[34] = (syndrome_o == 8'ha2) ^ data_i[34]; + data_o[35] = (syndrome_o == 8'hc2) ^ data_i[35]; + data_o[36] = (syndrome_o == 8'h1c) ^ data_i[36]; + data_o[37] = (syndrome_o == 8'h2c) ^ data_i[37]; + data_o[38] = (syndrome_o == 8'h4c) ^ data_i[38]; + data_o[39] = (syndrome_o == 8'h8c) ^ data_i[39]; + data_o[40] = (syndrome_o == 8'h34) ^ data_i[40]; + data_o[41] = (syndrome_o == 8'h54) ^ data_i[41]; + data_o[42] = (syndrome_o == 8'h94) ^ data_i[42]; + data_o[43] = (syndrome_o == 8'h64) ^ data_i[43]; + data_o[44] = (syndrome_o == 8'ha4) ^ data_i[44]; + data_o[45] = (syndrome_o == 8'hc4) ^ data_i[45]; + data_o[46] = (syndrome_o == 8'h38) ^ data_i[46]; + data_o[47] = (syndrome_o == 8'h58) ^ data_i[47]; + data_o[48] = (syndrome_o == 8'h98) ^ data_i[48]; + data_o[49] = (syndrome_o == 8'h68) ^ data_i[49]; + data_o[50] = (syndrome_o == 8'ha8) ^ data_i[50]; + data_o[51] = (syndrome_o == 8'hc8) ^ data_i[51]; + data_o[52] = (syndrome_o == 8'h70) ^ data_i[52]; + data_o[53] = (syndrome_o == 8'hb0) ^ data_i[53]; + data_o[54] = (syndrome_o == 8'hd0) ^ data_i[54]; + data_o[55] = (syndrome_o == 8'he0) ^ data_i[55]; + data_o[56] = (syndrome_o == 8'h6d) ^ data_i[56]; + data_o[57] = (syndrome_o == 8'hd6) ^ data_i[57]; + data_o[58] = (syndrome_o == 8'h3e) ^ data_i[58]; + data_o[59] = (syndrome_o == 8'hcb) ^ data_i[59]; + data_o[60] = (syndrome_o == 8'hb3) ^ data_i[60]; + data_o[61] = (syndrome_o == 8'hb5) ^ data_i[61]; + data_o[62] = (syndrome_o == 8'hce) ^ data_i[62]; + data_o[63] = (syndrome_o == 8'h79) ^ data_i[63]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = ^syndrome_o; + err_o[1] = ~err_o[0] & (|syndrome_o); + end +endmodule : caliptra_prim_secded_inv_72_64_dec diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_inv_72_64_enc.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_72_64_enc.sv new file mode 100644 index 000000000..ba2d458cb --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_72_64_enc.sv @@ -0,0 +1,25 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED encoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_inv_72_64_enc ( + input [63:0] data_i, + output logic [71:0] data_o +); + + always_comb begin : p_encode + data_o = 72'(data_i); + data_o[64] = ^(data_o & 72'h00B9000000001FFFFF); + data_o[65] = ^(data_o & 72'h005E00000FFFE0003F); + data_o[66] = ^(data_o & 72'h0067003FF003E007C1); + data_o[67] = ^(data_o & 72'h00CD0FC0F03C207842); + data_o[68] = ^(data_o & 72'h00B671C711C4438884); + data_o[69] = ^(data_o & 72'h00B5B65926488C9108); + data_o[70] = ^(data_o & 72'h00CBDAAA4A91152210); + data_o[71] = ^(data_o & 72'h007AED348D221A4420); + data_o ^= 72'hAA0000000000000000; + end + +endmodule : caliptra_prim_secded_inv_72_64_enc diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_22_16_dec.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_22_16_dec.sv new file mode 100644 index 000000000..7a76ccc2a --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_22_16_dec.sv @@ -0,0 +1,45 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED decoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_inv_hamming_22_16_dec ( + input [21:0] data_i, + output logic [15:0] data_o, + output logic [5:0] syndrome_o, + output logic [1:0] err_o +); + + always_comb begin : p_encode + // Syndrome calculation + syndrome_o[0] = ^((data_i ^ 22'h2A0000) & 22'h01AD5B); + syndrome_o[1] = ^((data_i ^ 22'h2A0000) & 22'h02366D); + syndrome_o[2] = ^((data_i ^ 22'h2A0000) & 22'h04C78E); + syndrome_o[3] = ^((data_i ^ 22'h2A0000) & 22'h0807F0); + syndrome_o[4] = ^((data_i ^ 22'h2A0000) & 22'h10F800); + syndrome_o[5] = ^((data_i ^ 22'h2A0000) & 22'h3FFFFF); + + // Corrected output calculation + data_o[0] = (syndrome_o == 6'h23) ^ data_i[0]; + data_o[1] = (syndrome_o == 6'h25) ^ data_i[1]; + data_o[2] = (syndrome_o == 6'h26) ^ data_i[2]; + data_o[3] = (syndrome_o == 6'h27) ^ data_i[3]; + data_o[4] = (syndrome_o == 6'h29) ^ data_i[4]; + data_o[5] = (syndrome_o == 6'h2a) ^ data_i[5]; + data_o[6] = (syndrome_o == 6'h2b) ^ data_i[6]; + data_o[7] = (syndrome_o == 6'h2c) ^ data_i[7]; + data_o[8] = (syndrome_o == 6'h2d) ^ data_i[8]; + data_o[9] = (syndrome_o == 6'h2e) ^ data_i[9]; + data_o[10] = (syndrome_o == 6'h2f) ^ data_i[10]; + data_o[11] = (syndrome_o == 6'h31) ^ data_i[11]; + data_o[12] = (syndrome_o == 6'h32) ^ data_i[12]; + data_o[13] = (syndrome_o == 6'h33) ^ data_i[13]; + data_o[14] = (syndrome_o == 6'h34) ^ data_i[14]; + data_o[15] = (syndrome_o == 6'h35) ^ data_i[15]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = syndrome_o[5]; + err_o[1] = |syndrome_o[4:0] & ~syndrome_o[5]; + end +endmodule : caliptra_prim_secded_inv_hamming_22_16_dec diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_22_16_enc.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_22_16_enc.sv new file mode 100644 index 000000000..2190d1aa4 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_22_16_enc.sv @@ -0,0 +1,23 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED encoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_inv_hamming_22_16_enc ( + input [15:0] data_i, + output logic [21:0] data_o +); + + always_comb begin : p_encode + data_o = 22'(data_i); + data_o[16] = ^(data_o & 22'h00AD5B); + data_o[17] = ^(data_o & 22'h00366D); + data_o[18] = ^(data_o & 22'h00C78E); + data_o[19] = ^(data_o & 22'h0007F0); + data_o[20] = ^(data_o & 22'h00F800); + data_o[21] = ^(data_o & 22'h1FFFFF); + data_o ^= 22'h2A0000; + end + +endmodule : caliptra_prim_secded_inv_hamming_22_16_enc diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_39_32_dec.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_39_32_dec.sv new file mode 100644 index 000000000..e63f57725 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_39_32_dec.sv @@ -0,0 +1,62 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED decoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_inv_hamming_39_32_dec ( + input [38:0] data_i, + output logic [31:0] data_o, + output logic [6:0] syndrome_o, + output logic [1:0] err_o +); + + always_comb begin : p_encode + // Syndrome calculation + syndrome_o[0] = ^((data_i ^ 39'h2A00000000) & 39'h0156AAAD5B); + syndrome_o[1] = ^((data_i ^ 39'h2A00000000) & 39'h029B33366D); + syndrome_o[2] = ^((data_i ^ 39'h2A00000000) & 39'h04E3C3C78E); + syndrome_o[3] = ^((data_i ^ 39'h2A00000000) & 39'h0803FC07F0); + syndrome_o[4] = ^((data_i ^ 39'h2A00000000) & 39'h1003FFF800); + syndrome_o[5] = ^((data_i ^ 39'h2A00000000) & 39'h20FC000000); + syndrome_o[6] = ^((data_i ^ 39'h2A00000000) & 39'h7FFFFFFFFF); + + // Corrected output calculation + data_o[0] = (syndrome_o == 7'h43) ^ data_i[0]; + data_o[1] = (syndrome_o == 7'h45) ^ data_i[1]; + data_o[2] = (syndrome_o == 7'h46) ^ data_i[2]; + data_o[3] = (syndrome_o == 7'h47) ^ data_i[3]; + data_o[4] = (syndrome_o == 7'h49) ^ data_i[4]; + data_o[5] = (syndrome_o == 7'h4a) ^ data_i[5]; + data_o[6] = (syndrome_o == 7'h4b) ^ data_i[6]; + data_o[7] = (syndrome_o == 7'h4c) ^ data_i[7]; + data_o[8] = (syndrome_o == 7'h4d) ^ data_i[8]; + data_o[9] = (syndrome_o == 7'h4e) ^ data_i[9]; + data_o[10] = (syndrome_o == 7'h4f) ^ data_i[10]; + data_o[11] = (syndrome_o == 7'h51) ^ data_i[11]; + data_o[12] = (syndrome_o == 7'h52) ^ data_i[12]; + data_o[13] = (syndrome_o == 7'h53) ^ data_i[13]; + data_o[14] = (syndrome_o == 7'h54) ^ data_i[14]; + data_o[15] = (syndrome_o == 7'h55) ^ data_i[15]; + data_o[16] = (syndrome_o == 7'h56) ^ data_i[16]; + data_o[17] = (syndrome_o == 7'h57) ^ data_i[17]; + data_o[18] = (syndrome_o == 7'h58) ^ data_i[18]; + data_o[19] = (syndrome_o == 7'h59) ^ data_i[19]; + data_o[20] = (syndrome_o == 7'h5a) ^ data_i[20]; + data_o[21] = (syndrome_o == 7'h5b) ^ data_i[21]; + data_o[22] = (syndrome_o == 7'h5c) ^ data_i[22]; + data_o[23] = (syndrome_o == 7'h5d) ^ data_i[23]; + data_o[24] = (syndrome_o == 7'h5e) ^ data_i[24]; + data_o[25] = (syndrome_o == 7'h5f) ^ data_i[25]; + data_o[26] = (syndrome_o == 7'h61) ^ data_i[26]; + data_o[27] = (syndrome_o == 7'h62) ^ data_i[27]; + data_o[28] = (syndrome_o == 7'h63) ^ data_i[28]; + data_o[29] = (syndrome_o == 7'h64) ^ data_i[29]; + data_o[30] = (syndrome_o == 7'h65) ^ data_i[30]; + data_o[31] = (syndrome_o == 7'h66) ^ data_i[31]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = syndrome_o[6]; + err_o[1] = |syndrome_o[5:0] & ~syndrome_o[6]; + end +endmodule : caliptra_prim_secded_inv_hamming_39_32_dec diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_39_32_enc.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_39_32_enc.sv new file mode 100644 index 000000000..5ca158096 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_39_32_enc.sv @@ -0,0 +1,24 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED encoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_inv_hamming_39_32_enc ( + input [31:0] data_i, + output logic [38:0] data_o +); + + always_comb begin : p_encode + data_o = 39'(data_i); + data_o[32] = ^(data_o & 39'h0056AAAD5B); + data_o[33] = ^(data_o & 39'h009B33366D); + data_o[34] = ^(data_o & 39'h00E3C3C78E); + data_o[35] = ^(data_o & 39'h0003FC07F0); + data_o[36] = ^(data_o & 39'h0003FFF800); + data_o[37] = ^(data_o & 39'h00FC000000); + data_o[38] = ^(data_o & 39'h3FFFFFFFFF); + data_o ^= 39'h2A00000000; + end + +endmodule : caliptra_prim_secded_inv_hamming_39_32_enc diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_72_64_dec.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_72_64_dec.sv new file mode 100644 index 000000000..d53e17cad --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_72_64_dec.sv @@ -0,0 +1,95 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED decoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_inv_hamming_72_64_dec ( + input [71:0] data_i, + output logic [63:0] data_o, + output logic [7:0] syndrome_o, + output logic [1:0] err_o +); + + always_comb begin : p_encode + // Syndrome calculation + syndrome_o[0] = ^((data_i ^ 72'hAA0000000000000000) & 72'h01AB55555556AAAD5B); + syndrome_o[1] = ^((data_i ^ 72'hAA0000000000000000) & 72'h02CD9999999B33366D); + syndrome_o[2] = ^((data_i ^ 72'hAA0000000000000000) & 72'h04F1E1E1E1E3C3C78E); + syndrome_o[3] = ^((data_i ^ 72'hAA0000000000000000) & 72'h0801FE01FE03FC07F0); + syndrome_o[4] = ^((data_i ^ 72'hAA0000000000000000) & 72'h1001FFFE0003FFF800); + syndrome_o[5] = ^((data_i ^ 72'hAA0000000000000000) & 72'h2001FFFFFFFC000000); + syndrome_o[6] = ^((data_i ^ 72'hAA0000000000000000) & 72'h40FE00000000000000); + syndrome_o[7] = ^((data_i ^ 72'hAA0000000000000000) & 72'hFFFFFFFFFFFFFFFFFF); + + // Corrected output calculation + data_o[0] = (syndrome_o == 8'h83) ^ data_i[0]; + data_o[1] = (syndrome_o == 8'h85) ^ data_i[1]; + data_o[2] = (syndrome_o == 8'h86) ^ data_i[2]; + data_o[3] = (syndrome_o == 8'h87) ^ data_i[3]; + data_o[4] = (syndrome_o == 8'h89) ^ data_i[4]; + data_o[5] = (syndrome_o == 8'h8a) ^ data_i[5]; + data_o[6] = (syndrome_o == 8'h8b) ^ data_i[6]; + data_o[7] = (syndrome_o == 8'h8c) ^ data_i[7]; + data_o[8] = (syndrome_o == 8'h8d) ^ data_i[8]; + data_o[9] = (syndrome_o == 8'h8e) ^ data_i[9]; + data_o[10] = (syndrome_o == 8'h8f) ^ data_i[10]; + data_o[11] = (syndrome_o == 8'h91) ^ data_i[11]; + data_o[12] = (syndrome_o == 8'h92) ^ data_i[12]; + data_o[13] = (syndrome_o == 8'h93) ^ data_i[13]; + data_o[14] = (syndrome_o == 8'h94) ^ data_i[14]; + data_o[15] = (syndrome_o == 8'h95) ^ data_i[15]; + data_o[16] = (syndrome_o == 8'h96) ^ data_i[16]; + data_o[17] = (syndrome_o == 8'h97) ^ data_i[17]; + data_o[18] = (syndrome_o == 8'h98) ^ data_i[18]; + data_o[19] = (syndrome_o == 8'h99) ^ data_i[19]; + data_o[20] = (syndrome_o == 8'h9a) ^ data_i[20]; + data_o[21] = (syndrome_o == 8'h9b) ^ data_i[21]; + data_o[22] = (syndrome_o == 8'h9c) ^ data_i[22]; + data_o[23] = (syndrome_o == 8'h9d) ^ data_i[23]; + data_o[24] = (syndrome_o == 8'h9e) ^ data_i[24]; + data_o[25] = (syndrome_o == 8'h9f) ^ data_i[25]; + data_o[26] = (syndrome_o == 8'ha1) ^ data_i[26]; + data_o[27] = (syndrome_o == 8'ha2) ^ data_i[27]; + data_o[28] = (syndrome_o == 8'ha3) ^ data_i[28]; + data_o[29] = (syndrome_o == 8'ha4) ^ data_i[29]; + data_o[30] = (syndrome_o == 8'ha5) ^ data_i[30]; + data_o[31] = (syndrome_o == 8'ha6) ^ data_i[31]; + data_o[32] = (syndrome_o == 8'ha7) ^ data_i[32]; + data_o[33] = (syndrome_o == 8'ha8) ^ data_i[33]; + data_o[34] = (syndrome_o == 8'ha9) ^ data_i[34]; + data_o[35] = (syndrome_o == 8'haa) ^ data_i[35]; + data_o[36] = (syndrome_o == 8'hab) ^ data_i[36]; + data_o[37] = (syndrome_o == 8'hac) ^ data_i[37]; + data_o[38] = (syndrome_o == 8'had) ^ data_i[38]; + data_o[39] = (syndrome_o == 8'hae) ^ data_i[39]; + data_o[40] = (syndrome_o == 8'haf) ^ data_i[40]; + data_o[41] = (syndrome_o == 8'hb0) ^ data_i[41]; + data_o[42] = (syndrome_o == 8'hb1) ^ data_i[42]; + data_o[43] = (syndrome_o == 8'hb2) ^ data_i[43]; + data_o[44] = (syndrome_o == 8'hb3) ^ data_i[44]; + data_o[45] = (syndrome_o == 8'hb4) ^ data_i[45]; + data_o[46] = (syndrome_o == 8'hb5) ^ data_i[46]; + data_o[47] = (syndrome_o == 8'hb6) ^ data_i[47]; + data_o[48] = (syndrome_o == 8'hb7) ^ data_i[48]; + data_o[49] = (syndrome_o == 8'hb8) ^ data_i[49]; + data_o[50] = (syndrome_o == 8'hb9) ^ data_i[50]; + data_o[51] = (syndrome_o == 8'hba) ^ data_i[51]; + data_o[52] = (syndrome_o == 8'hbb) ^ data_i[52]; + data_o[53] = (syndrome_o == 8'hbc) ^ data_i[53]; + data_o[54] = (syndrome_o == 8'hbd) ^ data_i[54]; + data_o[55] = (syndrome_o == 8'hbe) ^ data_i[55]; + data_o[56] = (syndrome_o == 8'hbf) ^ data_i[56]; + data_o[57] = (syndrome_o == 8'hc1) ^ data_i[57]; + data_o[58] = (syndrome_o == 8'hc2) ^ data_i[58]; + data_o[59] = (syndrome_o == 8'hc3) ^ data_i[59]; + data_o[60] = (syndrome_o == 8'hc4) ^ data_i[60]; + data_o[61] = (syndrome_o == 8'hc5) ^ data_i[61]; + data_o[62] = (syndrome_o == 8'hc6) ^ data_i[62]; + data_o[63] = (syndrome_o == 8'hc7) ^ data_i[63]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = syndrome_o[7]; + err_o[1] = |syndrome_o[6:0] & ~syndrome_o[7]; + end +endmodule : caliptra_prim_secded_inv_hamming_72_64_dec diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_72_64_enc.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_72_64_enc.sv new file mode 100644 index 000000000..933078ef6 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_72_64_enc.sv @@ -0,0 +1,25 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED encoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_inv_hamming_72_64_enc ( + input [63:0] data_i, + output logic [71:0] data_o +); + + always_comb begin : p_encode + data_o = 72'(data_i); + data_o[64] = ^(data_o & 72'h00AB55555556AAAD5B); + data_o[65] = ^(data_o & 72'h00CD9999999B33366D); + data_o[66] = ^(data_o & 72'h00F1E1E1E1E3C3C78E); + data_o[67] = ^(data_o & 72'h0001FE01FE03FC07F0); + data_o[68] = ^(data_o & 72'h0001FFFE0003FFF800); + data_o[69] = ^(data_o & 72'h0001FFFFFFFC000000); + data_o[70] = ^(data_o & 72'h00FE00000000000000); + data_o[71] = ^(data_o & 72'h7FFFFFFFFFFFFFFFFF); + data_o ^= 72'hAA0000000000000000; + end + +endmodule : caliptra_prim_secded_inv_hamming_72_64_enc diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_76_68_dec.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_76_68_dec.sv new file mode 100644 index 000000000..583848ad8 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_76_68_dec.sv @@ -0,0 +1,99 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED decoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_inv_hamming_76_68_dec ( + input [75:0] data_i, + output logic [67:0] data_o, + output logic [7:0] syndrome_o, + output logic [1:0] err_o +); + + always_comb begin : p_encode + // Syndrome calculation + syndrome_o[0] = ^((data_i ^ 76'hAA00000000000000000) & 76'h01AAB55555556AAAD5B); + syndrome_o[1] = ^((data_i ^ 76'hAA00000000000000000) & 76'h02CCD9999999B33366D); + syndrome_o[2] = ^((data_i ^ 76'hAA00000000000000000) & 76'h040F1E1E1E1E3C3C78E); + syndrome_o[3] = ^((data_i ^ 76'hAA00000000000000000) & 76'h08F01FE01FE03FC07F0); + syndrome_o[4] = ^((data_i ^ 76'hAA00000000000000000) & 76'h10001FFFE0003FFF800); + syndrome_o[5] = ^((data_i ^ 76'hAA00000000000000000) & 76'h20001FFFFFFFC000000); + syndrome_o[6] = ^((data_i ^ 76'hAA00000000000000000) & 76'h40FFE00000000000000); + syndrome_o[7] = ^((data_i ^ 76'hAA00000000000000000) & 76'hFFFFFFFFFFFFFFFFFFF); + + // Corrected output calculation + data_o[0] = (syndrome_o == 8'h83) ^ data_i[0]; + data_o[1] = (syndrome_o == 8'h85) ^ data_i[1]; + data_o[2] = (syndrome_o == 8'h86) ^ data_i[2]; + data_o[3] = (syndrome_o == 8'h87) ^ data_i[3]; + data_o[4] = (syndrome_o == 8'h89) ^ data_i[4]; + data_o[5] = (syndrome_o == 8'h8a) ^ data_i[5]; + data_o[6] = (syndrome_o == 8'h8b) ^ data_i[6]; + data_o[7] = (syndrome_o == 8'h8c) ^ data_i[7]; + data_o[8] = (syndrome_o == 8'h8d) ^ data_i[8]; + data_o[9] = (syndrome_o == 8'h8e) ^ data_i[9]; + data_o[10] = (syndrome_o == 8'h8f) ^ data_i[10]; + data_o[11] = (syndrome_o == 8'h91) ^ data_i[11]; + data_o[12] = (syndrome_o == 8'h92) ^ data_i[12]; + data_o[13] = (syndrome_o == 8'h93) ^ data_i[13]; + data_o[14] = (syndrome_o == 8'h94) ^ data_i[14]; + data_o[15] = (syndrome_o == 8'h95) ^ data_i[15]; + data_o[16] = (syndrome_o == 8'h96) ^ data_i[16]; + data_o[17] = (syndrome_o == 8'h97) ^ data_i[17]; + data_o[18] = (syndrome_o == 8'h98) ^ data_i[18]; + data_o[19] = (syndrome_o == 8'h99) ^ data_i[19]; + data_o[20] = (syndrome_o == 8'h9a) ^ data_i[20]; + data_o[21] = (syndrome_o == 8'h9b) ^ data_i[21]; + data_o[22] = (syndrome_o == 8'h9c) ^ data_i[22]; + data_o[23] = (syndrome_o == 8'h9d) ^ data_i[23]; + data_o[24] = (syndrome_o == 8'h9e) ^ data_i[24]; + data_o[25] = (syndrome_o == 8'h9f) ^ data_i[25]; + data_o[26] = (syndrome_o == 8'ha1) ^ data_i[26]; + data_o[27] = (syndrome_o == 8'ha2) ^ data_i[27]; + data_o[28] = (syndrome_o == 8'ha3) ^ data_i[28]; + data_o[29] = (syndrome_o == 8'ha4) ^ data_i[29]; + data_o[30] = (syndrome_o == 8'ha5) ^ data_i[30]; + data_o[31] = (syndrome_o == 8'ha6) ^ data_i[31]; + data_o[32] = (syndrome_o == 8'ha7) ^ data_i[32]; + data_o[33] = (syndrome_o == 8'ha8) ^ data_i[33]; + data_o[34] = (syndrome_o == 8'ha9) ^ data_i[34]; + data_o[35] = (syndrome_o == 8'haa) ^ data_i[35]; + data_o[36] = (syndrome_o == 8'hab) ^ data_i[36]; + data_o[37] = (syndrome_o == 8'hac) ^ data_i[37]; + data_o[38] = (syndrome_o == 8'had) ^ data_i[38]; + data_o[39] = (syndrome_o == 8'hae) ^ data_i[39]; + data_o[40] = (syndrome_o == 8'haf) ^ data_i[40]; + data_o[41] = (syndrome_o == 8'hb0) ^ data_i[41]; + data_o[42] = (syndrome_o == 8'hb1) ^ data_i[42]; + data_o[43] = (syndrome_o == 8'hb2) ^ data_i[43]; + data_o[44] = (syndrome_o == 8'hb3) ^ data_i[44]; + data_o[45] = (syndrome_o == 8'hb4) ^ data_i[45]; + data_o[46] = (syndrome_o == 8'hb5) ^ data_i[46]; + data_o[47] = (syndrome_o == 8'hb6) ^ data_i[47]; + data_o[48] = (syndrome_o == 8'hb7) ^ data_i[48]; + data_o[49] = (syndrome_o == 8'hb8) ^ data_i[49]; + data_o[50] = (syndrome_o == 8'hb9) ^ data_i[50]; + data_o[51] = (syndrome_o == 8'hba) ^ data_i[51]; + data_o[52] = (syndrome_o == 8'hbb) ^ data_i[52]; + data_o[53] = (syndrome_o == 8'hbc) ^ data_i[53]; + data_o[54] = (syndrome_o == 8'hbd) ^ data_i[54]; + data_o[55] = (syndrome_o == 8'hbe) ^ data_i[55]; + data_o[56] = (syndrome_o == 8'hbf) ^ data_i[56]; + data_o[57] = (syndrome_o == 8'hc1) ^ data_i[57]; + data_o[58] = (syndrome_o == 8'hc2) ^ data_i[58]; + data_o[59] = (syndrome_o == 8'hc3) ^ data_i[59]; + data_o[60] = (syndrome_o == 8'hc4) ^ data_i[60]; + data_o[61] = (syndrome_o == 8'hc5) ^ data_i[61]; + data_o[62] = (syndrome_o == 8'hc6) ^ data_i[62]; + data_o[63] = (syndrome_o == 8'hc7) ^ data_i[63]; + data_o[64] = (syndrome_o == 8'hc8) ^ data_i[64]; + data_o[65] = (syndrome_o == 8'hc9) ^ data_i[65]; + data_o[66] = (syndrome_o == 8'hca) ^ data_i[66]; + data_o[67] = (syndrome_o == 8'hcb) ^ data_i[67]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = syndrome_o[7]; + err_o[1] = |syndrome_o[6:0] & ~syndrome_o[7]; + end +endmodule : caliptra_prim_secded_inv_hamming_76_68_dec diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_76_68_enc.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_76_68_enc.sv new file mode 100644 index 000000000..ebb89bed4 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_76_68_enc.sv @@ -0,0 +1,25 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED encoder generated by util/design/secded_gen.py + +module caliptra_prim_secded_inv_hamming_76_68_enc ( + input [67:0] data_i, + output logic [75:0] data_o +); + + always_comb begin : p_encode + data_o = 76'(data_i); + data_o[68] = ^(data_o & 76'h00AAB55555556AAAD5B); + data_o[69] = ^(data_o & 76'h00CCD9999999B33366D); + data_o[70] = ^(data_o & 76'h000F1E1E1E1E3C3C78E); + data_o[71] = ^(data_o & 76'h00F01FE01FE03FC07F0); + data_o[72] = ^(data_o & 76'h00001FFFE0003FFF800); + data_o[73] = ^(data_o & 76'h00001FFFFFFFC000000); + data_o[74] = ^(data_o & 76'h00FFE00000000000000); + data_o[75] = ^(data_o & 76'h7FFFFFFFFFFFFFFFFFF); + data_o ^= 76'hAA00000000000000000; + end + +endmodule : caliptra_prim_secded_inv_hamming_76_68_enc diff --git a/src/caliptra_prim/rtl/caliptra_prim_secded_pkg.sv b/src/caliptra_prim/rtl/caliptra_prim_secded_pkg.sv new file mode 100644 index 000000000..7088e5804 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_secded_pkg.sv @@ -0,0 +1,1787 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SECDED package generated by +// util/design/secded_gen.py from util/design/data/secded_cfg.hjson + +package caliptra_prim_secded_pkg; + + typedef enum int { + SecdedNone, + Secded_22_16, + Secded_28_22, + Secded_39_32, + Secded_64_57, + Secded_72_64, + SecdedHamming_22_16, + SecdedHamming_39_32, + SecdedHamming_72_64, + SecdedHamming_76_68, + SecdedInv_22_16, + SecdedInv_28_22, + SecdedInv_39_32, + SecdedInv_64_57, + SecdedInv_72_64, + SecdedInvHamming_22_16, + SecdedInvHamming_39_32, + SecdedInvHamming_72_64, + SecdedInvHamming_76_68 + } prim_secded_e; + + function automatic int get_ecc_data_width(prim_secded_e ecc_type); + case (ecc_type) + Secded_22_16: return 16; + Secded_28_22: return 22; + Secded_39_32: return 32; + Secded_64_57: return 57; + Secded_72_64: return 64; + SecdedHamming_22_16: return 16; + SecdedHamming_39_32: return 32; + SecdedHamming_72_64: return 64; + SecdedHamming_76_68: return 68; + SecdedInv_22_16: return 16; + SecdedInv_28_22: return 22; + SecdedInv_39_32: return 32; + SecdedInv_64_57: return 57; + SecdedInv_72_64: return 64; + SecdedInvHamming_22_16: return 16; + SecdedInvHamming_39_32: return 32; + SecdedInvHamming_72_64: return 64; + SecdedInvHamming_76_68: return 68; + // Return a non-zero width to avoid VCS compile issues + default: return 32; + endcase + endfunction + + function automatic int get_ecc_parity_width(prim_secded_e ecc_type); + case (ecc_type) + Secded_22_16: return 6; + Secded_28_22: return 6; + Secded_39_32: return 7; + Secded_64_57: return 7; + Secded_72_64: return 8; + SecdedHamming_22_16: return 6; + SecdedHamming_39_32: return 7; + SecdedHamming_72_64: return 8; + SecdedHamming_76_68: return 8; + SecdedInv_22_16: return 6; + SecdedInv_28_22: return 6; + SecdedInv_39_32: return 7; + SecdedInv_64_57: return 7; + SecdedInv_72_64: return 8; + SecdedInvHamming_22_16: return 6; + SecdedInvHamming_39_32: return 7; + SecdedInvHamming_72_64: return 8; + SecdedInvHamming_76_68: return 8; + default: return 0; + endcase + endfunction + + parameter logic [5:0] Secded2216ZeroEcc = 6'h0; + parameter logic [21:0] Secded2216ZeroWord = 22'h0; + + typedef struct packed { + logic [15:0] data; + logic [5:0] syndrome; + logic [1:0] err; + } secded_22_16_t; + + parameter logic [5:0] Secded2822ZeroEcc = 6'h0; + parameter logic [27:0] Secded2822ZeroWord = 28'h0; + + typedef struct packed { + logic [21:0] data; + logic [5:0] syndrome; + logic [1:0] err; + } secded_28_22_t; + + parameter logic [6:0] Secded3932ZeroEcc = 7'h0; + parameter logic [38:0] Secded3932ZeroWord = 39'h0; + + typedef struct packed { + logic [31:0] data; + logic [6:0] syndrome; + logic [1:0] err; + } secded_39_32_t; + + parameter logic [6:0] Secded6457ZeroEcc = 7'h0; + parameter logic [63:0] Secded6457ZeroWord = 64'h0; + + typedef struct packed { + logic [56:0] data; + logic [6:0] syndrome; + logic [1:0] err; + } secded_64_57_t; + + parameter logic [7:0] Secded7264ZeroEcc = 8'h0; + parameter logic [71:0] Secded7264ZeroWord = 72'h0; + + typedef struct packed { + logic [63:0] data; + logic [7:0] syndrome; + logic [1:0] err; + } secded_72_64_t; + + parameter logic [5:0] SecdedHamming2216ZeroEcc = 6'h0; + parameter logic [21:0] SecdedHamming2216ZeroWord = 22'h0; + + typedef struct packed { + logic [15:0] data; + logic [5:0] syndrome; + logic [1:0] err; + } secded_hamming_22_16_t; + + parameter logic [6:0] SecdedHamming3932ZeroEcc = 7'h0; + parameter logic [38:0] SecdedHamming3932ZeroWord = 39'h0; + + typedef struct packed { + logic [31:0] data; + logic [6:0] syndrome; + logic [1:0] err; + } secded_hamming_39_32_t; + + parameter logic [7:0] SecdedHamming7264ZeroEcc = 8'h0; + parameter logic [71:0] SecdedHamming7264ZeroWord = 72'h0; + + typedef struct packed { + logic [63:0] data; + logic [7:0] syndrome; + logic [1:0] err; + } secded_hamming_72_64_t; + + parameter logic [7:0] SecdedHamming7668ZeroEcc = 8'h0; + parameter logic [75:0] SecdedHamming7668ZeroWord = 76'h0; + + typedef struct packed { + logic [67:0] data; + logic [7:0] syndrome; + logic [1:0] err; + } secded_hamming_76_68_t; + + parameter logic [5:0] SecdedInv2216ZeroEcc = 6'h2A; + parameter logic [21:0] SecdedInv2216ZeroWord = 22'h2A0000; + + typedef struct packed { + logic [15:0] data; + logic [5:0] syndrome; + logic [1:0] err; + } secded_inv_22_16_t; + + parameter logic [5:0] SecdedInv2822ZeroEcc = 6'h2A; + parameter logic [27:0] SecdedInv2822ZeroWord = 28'hA800000; + + typedef struct packed { + logic [21:0] data; + logic [5:0] syndrome; + logic [1:0] err; + } secded_inv_28_22_t; + + parameter logic [6:0] SecdedInv3932ZeroEcc = 7'h2A; + parameter logic [38:0] SecdedInv3932ZeroWord = 39'h2A00000000; + + typedef struct packed { + logic [31:0] data; + logic [6:0] syndrome; + logic [1:0] err; + } secded_inv_39_32_t; + + parameter logic [6:0] SecdedInv6457ZeroEcc = 7'h2A; + parameter logic [63:0] SecdedInv6457ZeroWord = 64'h5400000000000000; + + typedef struct packed { + logic [56:0] data; + logic [6:0] syndrome; + logic [1:0] err; + } secded_inv_64_57_t; + + parameter logic [7:0] SecdedInv7264ZeroEcc = 8'hAA; + parameter logic [71:0] SecdedInv7264ZeroWord = 72'hAA0000000000000000; + + typedef struct packed { + logic [63:0] data; + logic [7:0] syndrome; + logic [1:0] err; + } secded_inv_72_64_t; + + parameter logic [5:0] SecdedInvHamming2216ZeroEcc = 6'h2A; + parameter logic [21:0] SecdedInvHamming2216ZeroWord = 22'h2A0000; + + typedef struct packed { + logic [15:0] data; + logic [5:0] syndrome; + logic [1:0] err; + } secded_inv_hamming_22_16_t; + + parameter logic [6:0] SecdedInvHamming3932ZeroEcc = 7'h2A; + parameter logic [38:0] SecdedInvHamming3932ZeroWord = 39'h2A00000000; + + typedef struct packed { + logic [31:0] data; + logic [6:0] syndrome; + logic [1:0] err; + } secded_inv_hamming_39_32_t; + + parameter logic [7:0] SecdedInvHamming7264ZeroEcc = 8'hAA; + parameter logic [71:0] SecdedInvHamming7264ZeroWord = 72'hAA0000000000000000; + + typedef struct packed { + logic [63:0] data; + logic [7:0] syndrome; + logic [1:0] err; + } secded_inv_hamming_72_64_t; + + parameter logic [7:0] SecdedInvHamming7668ZeroEcc = 8'hAA; + parameter logic [75:0] SecdedInvHamming7668ZeroWord = 76'hAA00000000000000000; + + typedef struct packed { + logic [67:0] data; + logic [7:0] syndrome; + logic [1:0] err; + } secded_inv_hamming_76_68_t; + + function automatic logic [21:0] + prim_secded_22_16_enc (logic [15:0] data_i); + logic [21:0] data_o; + data_o = 22'(data_i); + data_o[16] = ^(data_o & 22'h00496E); + data_o[17] = ^(data_o & 22'h00F20B); + data_o[18] = ^(data_o & 22'h008ED8); + data_o[19] = ^(data_o & 22'h007714); + data_o[20] = ^(data_o & 22'h00ACA5); + data_o[21] = ^(data_o & 22'h0011F3); + return data_o; + endfunction + + function automatic secded_22_16_t + prim_secded_22_16_dec (logic [21:0] data_i); + logic [15:0] data_o; + logic [5:0] syndrome_o; + logic [1:0] err_o; + + secded_22_16_t dec; + + // Syndrome calculation + syndrome_o[0] = ^(data_i & 22'h01496E); + syndrome_o[1] = ^(data_i & 22'h02F20B); + syndrome_o[2] = ^(data_i & 22'h048ED8); + syndrome_o[3] = ^(data_i & 22'h087714); + syndrome_o[4] = ^(data_i & 22'h10ACA5); + syndrome_o[5] = ^(data_i & 22'h2011F3); + + // Corrected output calculation + data_o[0] = (syndrome_o == 6'h32) ^ data_i[0]; + data_o[1] = (syndrome_o == 6'h23) ^ data_i[1]; + data_o[2] = (syndrome_o == 6'h19) ^ data_i[2]; + data_o[3] = (syndrome_o == 6'h7) ^ data_i[3]; + data_o[4] = (syndrome_o == 6'h2c) ^ data_i[4]; + data_o[5] = (syndrome_o == 6'h31) ^ data_i[5]; + data_o[6] = (syndrome_o == 6'h25) ^ data_i[6]; + data_o[7] = (syndrome_o == 6'h34) ^ data_i[7]; + data_o[8] = (syndrome_o == 6'h29) ^ data_i[8]; + data_o[9] = (syndrome_o == 6'he) ^ data_i[9]; + data_o[10] = (syndrome_o == 6'h1c) ^ data_i[10]; + data_o[11] = (syndrome_o == 6'h15) ^ data_i[11]; + data_o[12] = (syndrome_o == 6'h2a) ^ data_i[12]; + data_o[13] = (syndrome_o == 6'h1a) ^ data_i[13]; + data_o[14] = (syndrome_o == 6'hb) ^ data_i[14]; + data_o[15] = (syndrome_o == 6'h16) ^ data_i[15]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = ^syndrome_o; + err_o[1] = ~err_o[0] & (|syndrome_o); + + dec.data = data_o; + dec.syndrome = syndrome_o; + dec.err = err_o; + return dec; + + endfunction + + function automatic logic [27:0] + prim_secded_28_22_enc (logic [21:0] data_i); + logic [27:0] data_o; + data_o = 28'(data_i); + data_o[22] = ^(data_o & 28'h03003FF); + data_o[23] = ^(data_o & 28'h010FC0F); + data_o[24] = ^(data_o & 28'h0271C71); + data_o[25] = ^(data_o & 28'h03B6592); + data_o[26] = ^(data_o & 28'h03DAAA4); + data_o[27] = ^(data_o & 28'h03ED348); + return data_o; + endfunction + + function automatic secded_28_22_t + prim_secded_28_22_dec (logic [27:0] data_i); + logic [21:0] data_o; + logic [5:0] syndrome_o; + logic [1:0] err_o; + + secded_28_22_t dec; + + // Syndrome calculation + syndrome_o[0] = ^(data_i & 28'h07003FF); + syndrome_o[1] = ^(data_i & 28'h090FC0F); + syndrome_o[2] = ^(data_i & 28'h1271C71); + syndrome_o[3] = ^(data_i & 28'h23B6592); + syndrome_o[4] = ^(data_i & 28'h43DAAA4); + syndrome_o[5] = ^(data_i & 28'h83ED348); + + // Corrected output calculation + data_o[0] = (syndrome_o == 6'h7) ^ data_i[0]; + data_o[1] = (syndrome_o == 6'hb) ^ data_i[1]; + data_o[2] = (syndrome_o == 6'h13) ^ data_i[2]; + data_o[3] = (syndrome_o == 6'h23) ^ data_i[3]; + data_o[4] = (syndrome_o == 6'hd) ^ data_i[4]; + data_o[5] = (syndrome_o == 6'h15) ^ data_i[5]; + data_o[6] = (syndrome_o == 6'h25) ^ data_i[6]; + data_o[7] = (syndrome_o == 6'h19) ^ data_i[7]; + data_o[8] = (syndrome_o == 6'h29) ^ data_i[8]; + data_o[9] = (syndrome_o == 6'h31) ^ data_i[9]; + data_o[10] = (syndrome_o == 6'he) ^ data_i[10]; + data_o[11] = (syndrome_o == 6'h16) ^ data_i[11]; + data_o[12] = (syndrome_o == 6'h26) ^ data_i[12]; + data_o[13] = (syndrome_o == 6'h1a) ^ data_i[13]; + data_o[14] = (syndrome_o == 6'h2a) ^ data_i[14]; + data_o[15] = (syndrome_o == 6'h32) ^ data_i[15]; + data_o[16] = (syndrome_o == 6'h1c) ^ data_i[16]; + data_o[17] = (syndrome_o == 6'h2c) ^ data_i[17]; + data_o[18] = (syndrome_o == 6'h34) ^ data_i[18]; + data_o[19] = (syndrome_o == 6'h38) ^ data_i[19]; + data_o[20] = (syndrome_o == 6'h3b) ^ data_i[20]; + data_o[21] = (syndrome_o == 6'h3d) ^ data_i[21]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = ^syndrome_o; + err_o[1] = ~err_o[0] & (|syndrome_o); + + dec.data = data_o; + dec.syndrome = syndrome_o; + dec.err = err_o; + return dec; + + endfunction + + function automatic logic [38:0] + prim_secded_39_32_enc (logic [31:0] data_i); + logic [38:0] data_o; + data_o = 39'(data_i); + data_o[32] = ^(data_o & 39'h002606BD25); + data_o[33] = ^(data_o & 39'h00DEBA8050); + data_o[34] = ^(data_o & 39'h00413D89AA); + data_o[35] = ^(data_o & 39'h0031234ED1); + data_o[36] = ^(data_o & 39'h00C2C1323B); + data_o[37] = ^(data_o & 39'h002DCC624C); + data_o[38] = ^(data_o & 39'h0098505586); + return data_o; + endfunction + + function automatic secded_39_32_t + prim_secded_39_32_dec (logic [38:0] data_i); + logic [31:0] data_o; + logic [6:0] syndrome_o; + logic [1:0] err_o; + + secded_39_32_t dec; + + // Syndrome calculation + syndrome_o[0] = ^(data_i & 39'h012606BD25); + syndrome_o[1] = ^(data_i & 39'h02DEBA8050); + syndrome_o[2] = ^(data_i & 39'h04413D89AA); + syndrome_o[3] = ^(data_i & 39'h0831234ED1); + syndrome_o[4] = ^(data_i & 39'h10C2C1323B); + syndrome_o[5] = ^(data_i & 39'h202DCC624C); + syndrome_o[6] = ^(data_i & 39'h4098505586); + + // Corrected output calculation + data_o[0] = (syndrome_o == 7'h19) ^ data_i[0]; + data_o[1] = (syndrome_o == 7'h54) ^ data_i[1]; + data_o[2] = (syndrome_o == 7'h61) ^ data_i[2]; + data_o[3] = (syndrome_o == 7'h34) ^ data_i[3]; + data_o[4] = (syndrome_o == 7'h1a) ^ data_i[4]; + data_o[5] = (syndrome_o == 7'h15) ^ data_i[5]; + data_o[6] = (syndrome_o == 7'h2a) ^ data_i[6]; + data_o[7] = (syndrome_o == 7'h4c) ^ data_i[7]; + data_o[8] = (syndrome_o == 7'h45) ^ data_i[8]; + data_o[9] = (syndrome_o == 7'h38) ^ data_i[9]; + data_o[10] = (syndrome_o == 7'h49) ^ data_i[10]; + data_o[11] = (syndrome_o == 7'hd) ^ data_i[11]; + data_o[12] = (syndrome_o == 7'h51) ^ data_i[12]; + data_o[13] = (syndrome_o == 7'h31) ^ data_i[13]; + data_o[14] = (syndrome_o == 7'h68) ^ data_i[14]; + data_o[15] = (syndrome_o == 7'h7) ^ data_i[15]; + data_o[16] = (syndrome_o == 7'h1c) ^ data_i[16]; + data_o[17] = (syndrome_o == 7'hb) ^ data_i[17]; + data_o[18] = (syndrome_o == 7'h25) ^ data_i[18]; + data_o[19] = (syndrome_o == 7'h26) ^ data_i[19]; + data_o[20] = (syndrome_o == 7'h46) ^ data_i[20]; + data_o[21] = (syndrome_o == 7'he) ^ data_i[21]; + data_o[22] = (syndrome_o == 7'h70) ^ data_i[22]; + data_o[23] = (syndrome_o == 7'h32) ^ data_i[23]; + data_o[24] = (syndrome_o == 7'h2c) ^ data_i[24]; + data_o[25] = (syndrome_o == 7'h13) ^ data_i[25]; + data_o[26] = (syndrome_o == 7'h23) ^ data_i[26]; + data_o[27] = (syndrome_o == 7'h62) ^ data_i[27]; + data_o[28] = (syndrome_o == 7'h4a) ^ data_i[28]; + data_o[29] = (syndrome_o == 7'h29) ^ data_i[29]; + data_o[30] = (syndrome_o == 7'h16) ^ data_i[30]; + data_o[31] = (syndrome_o == 7'h52) ^ data_i[31]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = ^syndrome_o; + err_o[1] = ~err_o[0] & (|syndrome_o); + + dec.data = data_o; + dec.syndrome = syndrome_o; + dec.err = err_o; + return dec; + + endfunction + + function automatic logic [63:0] + prim_secded_64_57_enc (logic [56:0] data_i); + logic [63:0] data_o; + data_o = 64'(data_i); + data_o[57] = ^(data_o & 64'h0103FFF800007FFF); + data_o[58] = ^(data_o & 64'h017C1FF801FF801F); + data_o[59] = ^(data_o & 64'h01BDE1F87E0781E1); + data_o[60] = ^(data_o & 64'h01DEEE3B8E388E22); + data_o[61] = ^(data_o & 64'h01EF76CDB2C93244); + data_o[62] = ^(data_o & 64'h01F7BB56D5525488); + data_o[63] = ^(data_o & 64'h01FBDDA769A46910); + return data_o; + endfunction + + function automatic secded_64_57_t + prim_secded_64_57_dec (logic [63:0] data_i); + logic [56:0] data_o; + logic [6:0] syndrome_o; + logic [1:0] err_o; + + secded_64_57_t dec; + + // Syndrome calculation + syndrome_o[0] = ^(data_i & 64'h0303FFF800007FFF); + syndrome_o[1] = ^(data_i & 64'h057C1FF801FF801F); + syndrome_o[2] = ^(data_i & 64'h09BDE1F87E0781E1); + syndrome_o[3] = ^(data_i & 64'h11DEEE3B8E388E22); + syndrome_o[4] = ^(data_i & 64'h21EF76CDB2C93244); + syndrome_o[5] = ^(data_i & 64'h41F7BB56D5525488); + syndrome_o[6] = ^(data_i & 64'h81FBDDA769A46910); + + // Corrected output calculation + data_o[0] = (syndrome_o == 7'h7) ^ data_i[0]; + data_o[1] = (syndrome_o == 7'hb) ^ data_i[1]; + data_o[2] = (syndrome_o == 7'h13) ^ data_i[2]; + data_o[3] = (syndrome_o == 7'h23) ^ data_i[3]; + data_o[4] = (syndrome_o == 7'h43) ^ data_i[4]; + data_o[5] = (syndrome_o == 7'hd) ^ data_i[5]; + data_o[6] = (syndrome_o == 7'h15) ^ data_i[6]; + data_o[7] = (syndrome_o == 7'h25) ^ data_i[7]; + data_o[8] = (syndrome_o == 7'h45) ^ data_i[8]; + data_o[9] = (syndrome_o == 7'h19) ^ data_i[9]; + data_o[10] = (syndrome_o == 7'h29) ^ data_i[10]; + data_o[11] = (syndrome_o == 7'h49) ^ data_i[11]; + data_o[12] = (syndrome_o == 7'h31) ^ data_i[12]; + data_o[13] = (syndrome_o == 7'h51) ^ data_i[13]; + data_o[14] = (syndrome_o == 7'h61) ^ data_i[14]; + data_o[15] = (syndrome_o == 7'he) ^ data_i[15]; + data_o[16] = (syndrome_o == 7'h16) ^ data_i[16]; + data_o[17] = (syndrome_o == 7'h26) ^ data_i[17]; + data_o[18] = (syndrome_o == 7'h46) ^ data_i[18]; + data_o[19] = (syndrome_o == 7'h1a) ^ data_i[19]; + data_o[20] = (syndrome_o == 7'h2a) ^ data_i[20]; + data_o[21] = (syndrome_o == 7'h4a) ^ data_i[21]; + data_o[22] = (syndrome_o == 7'h32) ^ data_i[22]; + data_o[23] = (syndrome_o == 7'h52) ^ data_i[23]; + data_o[24] = (syndrome_o == 7'h62) ^ data_i[24]; + data_o[25] = (syndrome_o == 7'h1c) ^ data_i[25]; + data_o[26] = (syndrome_o == 7'h2c) ^ data_i[26]; + data_o[27] = (syndrome_o == 7'h4c) ^ data_i[27]; + data_o[28] = (syndrome_o == 7'h34) ^ data_i[28]; + data_o[29] = (syndrome_o == 7'h54) ^ data_i[29]; + data_o[30] = (syndrome_o == 7'h64) ^ data_i[30]; + data_o[31] = (syndrome_o == 7'h38) ^ data_i[31]; + data_o[32] = (syndrome_o == 7'h58) ^ data_i[32]; + data_o[33] = (syndrome_o == 7'h68) ^ data_i[33]; + data_o[34] = (syndrome_o == 7'h70) ^ data_i[34]; + data_o[35] = (syndrome_o == 7'h1f) ^ data_i[35]; + data_o[36] = (syndrome_o == 7'h2f) ^ data_i[36]; + data_o[37] = (syndrome_o == 7'h4f) ^ data_i[37]; + data_o[38] = (syndrome_o == 7'h37) ^ data_i[38]; + data_o[39] = (syndrome_o == 7'h57) ^ data_i[39]; + data_o[40] = (syndrome_o == 7'h67) ^ data_i[40]; + data_o[41] = (syndrome_o == 7'h3b) ^ data_i[41]; + data_o[42] = (syndrome_o == 7'h5b) ^ data_i[42]; + data_o[43] = (syndrome_o == 7'h6b) ^ data_i[43]; + data_o[44] = (syndrome_o == 7'h73) ^ data_i[44]; + data_o[45] = (syndrome_o == 7'h3d) ^ data_i[45]; + data_o[46] = (syndrome_o == 7'h5d) ^ data_i[46]; + data_o[47] = (syndrome_o == 7'h6d) ^ data_i[47]; + data_o[48] = (syndrome_o == 7'h75) ^ data_i[48]; + data_o[49] = (syndrome_o == 7'h79) ^ data_i[49]; + data_o[50] = (syndrome_o == 7'h3e) ^ data_i[50]; + data_o[51] = (syndrome_o == 7'h5e) ^ data_i[51]; + data_o[52] = (syndrome_o == 7'h6e) ^ data_i[52]; + data_o[53] = (syndrome_o == 7'h76) ^ data_i[53]; + data_o[54] = (syndrome_o == 7'h7a) ^ data_i[54]; + data_o[55] = (syndrome_o == 7'h7c) ^ data_i[55]; + data_o[56] = (syndrome_o == 7'h7f) ^ data_i[56]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = ^syndrome_o; + err_o[1] = ~err_o[0] & (|syndrome_o); + + dec.data = data_o; + dec.syndrome = syndrome_o; + dec.err = err_o; + return dec; + + endfunction + + function automatic logic [71:0] + prim_secded_72_64_enc (logic [63:0] data_i); + logic [71:0] data_o; + data_o = 72'(data_i); + data_o[64] = ^(data_o & 72'h00B9000000001FFFFF); + data_o[65] = ^(data_o & 72'h005E00000FFFE0003F); + data_o[66] = ^(data_o & 72'h0067003FF003E007C1); + data_o[67] = ^(data_o & 72'h00CD0FC0F03C207842); + data_o[68] = ^(data_o & 72'h00B671C711C4438884); + data_o[69] = ^(data_o & 72'h00B5B65926488C9108); + data_o[70] = ^(data_o & 72'h00CBDAAA4A91152210); + data_o[71] = ^(data_o & 72'h007AED348D221A4420); + return data_o; + endfunction + + function automatic secded_72_64_t + prim_secded_72_64_dec (logic [71:0] data_i); + logic [63:0] data_o; + logic [7:0] syndrome_o; + logic [1:0] err_o; + + secded_72_64_t dec; + + // Syndrome calculation + syndrome_o[0] = ^(data_i & 72'h01B9000000001FFFFF); + syndrome_o[1] = ^(data_i & 72'h025E00000FFFE0003F); + syndrome_o[2] = ^(data_i & 72'h0467003FF003E007C1); + syndrome_o[3] = ^(data_i & 72'h08CD0FC0F03C207842); + syndrome_o[4] = ^(data_i & 72'h10B671C711C4438884); + syndrome_o[5] = ^(data_i & 72'h20B5B65926488C9108); + syndrome_o[6] = ^(data_i & 72'h40CBDAAA4A91152210); + syndrome_o[7] = ^(data_i & 72'h807AED348D221A4420); + + // Corrected output calculation + data_o[0] = (syndrome_o == 8'h7) ^ data_i[0]; + data_o[1] = (syndrome_o == 8'hb) ^ data_i[1]; + data_o[2] = (syndrome_o == 8'h13) ^ data_i[2]; + data_o[3] = (syndrome_o == 8'h23) ^ data_i[3]; + data_o[4] = (syndrome_o == 8'h43) ^ data_i[4]; + data_o[5] = (syndrome_o == 8'h83) ^ data_i[5]; + data_o[6] = (syndrome_o == 8'hd) ^ data_i[6]; + data_o[7] = (syndrome_o == 8'h15) ^ data_i[7]; + data_o[8] = (syndrome_o == 8'h25) ^ data_i[8]; + data_o[9] = (syndrome_o == 8'h45) ^ data_i[9]; + data_o[10] = (syndrome_o == 8'h85) ^ data_i[10]; + data_o[11] = (syndrome_o == 8'h19) ^ data_i[11]; + data_o[12] = (syndrome_o == 8'h29) ^ data_i[12]; + data_o[13] = (syndrome_o == 8'h49) ^ data_i[13]; + data_o[14] = (syndrome_o == 8'h89) ^ data_i[14]; + data_o[15] = (syndrome_o == 8'h31) ^ data_i[15]; + data_o[16] = (syndrome_o == 8'h51) ^ data_i[16]; + data_o[17] = (syndrome_o == 8'h91) ^ data_i[17]; + data_o[18] = (syndrome_o == 8'h61) ^ data_i[18]; + data_o[19] = (syndrome_o == 8'ha1) ^ data_i[19]; + data_o[20] = (syndrome_o == 8'hc1) ^ data_i[20]; + data_o[21] = (syndrome_o == 8'he) ^ data_i[21]; + data_o[22] = (syndrome_o == 8'h16) ^ data_i[22]; + data_o[23] = (syndrome_o == 8'h26) ^ data_i[23]; + data_o[24] = (syndrome_o == 8'h46) ^ data_i[24]; + data_o[25] = (syndrome_o == 8'h86) ^ data_i[25]; + data_o[26] = (syndrome_o == 8'h1a) ^ data_i[26]; + data_o[27] = (syndrome_o == 8'h2a) ^ data_i[27]; + data_o[28] = (syndrome_o == 8'h4a) ^ data_i[28]; + data_o[29] = (syndrome_o == 8'h8a) ^ data_i[29]; + data_o[30] = (syndrome_o == 8'h32) ^ data_i[30]; + data_o[31] = (syndrome_o == 8'h52) ^ data_i[31]; + data_o[32] = (syndrome_o == 8'h92) ^ data_i[32]; + data_o[33] = (syndrome_o == 8'h62) ^ data_i[33]; + data_o[34] = (syndrome_o == 8'ha2) ^ data_i[34]; + data_o[35] = (syndrome_o == 8'hc2) ^ data_i[35]; + data_o[36] = (syndrome_o == 8'h1c) ^ data_i[36]; + data_o[37] = (syndrome_o == 8'h2c) ^ data_i[37]; + data_o[38] = (syndrome_o == 8'h4c) ^ data_i[38]; + data_o[39] = (syndrome_o == 8'h8c) ^ data_i[39]; + data_o[40] = (syndrome_o == 8'h34) ^ data_i[40]; + data_o[41] = (syndrome_o == 8'h54) ^ data_i[41]; + data_o[42] = (syndrome_o == 8'h94) ^ data_i[42]; + data_o[43] = (syndrome_o == 8'h64) ^ data_i[43]; + data_o[44] = (syndrome_o == 8'ha4) ^ data_i[44]; + data_o[45] = (syndrome_o == 8'hc4) ^ data_i[45]; + data_o[46] = (syndrome_o == 8'h38) ^ data_i[46]; + data_o[47] = (syndrome_o == 8'h58) ^ data_i[47]; + data_o[48] = (syndrome_o == 8'h98) ^ data_i[48]; + data_o[49] = (syndrome_o == 8'h68) ^ data_i[49]; + data_o[50] = (syndrome_o == 8'ha8) ^ data_i[50]; + data_o[51] = (syndrome_o == 8'hc8) ^ data_i[51]; + data_o[52] = (syndrome_o == 8'h70) ^ data_i[52]; + data_o[53] = (syndrome_o == 8'hb0) ^ data_i[53]; + data_o[54] = (syndrome_o == 8'hd0) ^ data_i[54]; + data_o[55] = (syndrome_o == 8'he0) ^ data_i[55]; + data_o[56] = (syndrome_o == 8'h6d) ^ data_i[56]; + data_o[57] = (syndrome_o == 8'hd6) ^ data_i[57]; + data_o[58] = (syndrome_o == 8'h3e) ^ data_i[58]; + data_o[59] = (syndrome_o == 8'hcb) ^ data_i[59]; + data_o[60] = (syndrome_o == 8'hb3) ^ data_i[60]; + data_o[61] = (syndrome_o == 8'hb5) ^ data_i[61]; + data_o[62] = (syndrome_o == 8'hce) ^ data_i[62]; + data_o[63] = (syndrome_o == 8'h79) ^ data_i[63]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = ^syndrome_o; + err_o[1] = ~err_o[0] & (|syndrome_o); + + dec.data = data_o; + dec.syndrome = syndrome_o; + dec.err = err_o; + return dec; + + endfunction + + function automatic logic [21:0] + prim_secded_hamming_22_16_enc (logic [15:0] data_i); + logic [21:0] data_o; + data_o = 22'(data_i); + data_o[16] = ^(data_o & 22'h00AD5B); + data_o[17] = ^(data_o & 22'h00366D); + data_o[18] = ^(data_o & 22'h00C78E); + data_o[19] = ^(data_o & 22'h0007F0); + data_o[20] = ^(data_o & 22'h00F800); + data_o[21] = ^(data_o & 22'h1FFFFF); + return data_o; + endfunction + + function automatic secded_hamming_22_16_t + prim_secded_hamming_22_16_dec (logic [21:0] data_i); + logic [15:0] data_o; + logic [5:0] syndrome_o; + logic [1:0] err_o; + + secded_hamming_22_16_t dec; + + // Syndrome calculation + syndrome_o[0] = ^(data_i & 22'h01AD5B); + syndrome_o[1] = ^(data_i & 22'h02366D); + syndrome_o[2] = ^(data_i & 22'h04C78E); + syndrome_o[3] = ^(data_i & 22'h0807F0); + syndrome_o[4] = ^(data_i & 22'h10F800); + syndrome_o[5] = ^(data_i & 22'h3FFFFF); + + // Corrected output calculation + data_o[0] = (syndrome_o == 6'h23) ^ data_i[0]; + data_o[1] = (syndrome_o == 6'h25) ^ data_i[1]; + data_o[2] = (syndrome_o == 6'h26) ^ data_i[2]; + data_o[3] = (syndrome_o == 6'h27) ^ data_i[3]; + data_o[4] = (syndrome_o == 6'h29) ^ data_i[4]; + data_o[5] = (syndrome_o == 6'h2a) ^ data_i[5]; + data_o[6] = (syndrome_o == 6'h2b) ^ data_i[6]; + data_o[7] = (syndrome_o == 6'h2c) ^ data_i[7]; + data_o[8] = (syndrome_o == 6'h2d) ^ data_i[8]; + data_o[9] = (syndrome_o == 6'h2e) ^ data_i[9]; + data_o[10] = (syndrome_o == 6'h2f) ^ data_i[10]; + data_o[11] = (syndrome_o == 6'h31) ^ data_i[11]; + data_o[12] = (syndrome_o == 6'h32) ^ data_i[12]; + data_o[13] = (syndrome_o == 6'h33) ^ data_i[13]; + data_o[14] = (syndrome_o == 6'h34) ^ data_i[14]; + data_o[15] = (syndrome_o == 6'h35) ^ data_i[15]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = syndrome_o[5]; + err_o[1] = |syndrome_o[4:0] & ~syndrome_o[5]; + + dec.data = data_o; + dec.syndrome = syndrome_o; + dec.err = err_o; + return dec; + + endfunction + + function automatic logic [38:0] + prim_secded_hamming_39_32_enc (logic [31:0] data_i); + logic [38:0] data_o; + data_o = 39'(data_i); + data_o[32] = ^(data_o & 39'h0056AAAD5B); + data_o[33] = ^(data_o & 39'h009B33366D); + data_o[34] = ^(data_o & 39'h00E3C3C78E); + data_o[35] = ^(data_o & 39'h0003FC07F0); + data_o[36] = ^(data_o & 39'h0003FFF800); + data_o[37] = ^(data_o & 39'h00FC000000); + data_o[38] = ^(data_o & 39'h3FFFFFFFFF); + return data_o; + endfunction + + function automatic secded_hamming_39_32_t + prim_secded_hamming_39_32_dec (logic [38:0] data_i); + logic [31:0] data_o; + logic [6:0] syndrome_o; + logic [1:0] err_o; + + secded_hamming_39_32_t dec; + + // Syndrome calculation + syndrome_o[0] = ^(data_i & 39'h0156AAAD5B); + syndrome_o[1] = ^(data_i & 39'h029B33366D); + syndrome_o[2] = ^(data_i & 39'h04E3C3C78E); + syndrome_o[3] = ^(data_i & 39'h0803FC07F0); + syndrome_o[4] = ^(data_i & 39'h1003FFF800); + syndrome_o[5] = ^(data_i & 39'h20FC000000); + syndrome_o[6] = ^(data_i & 39'h7FFFFFFFFF); + + // Corrected output calculation + data_o[0] = (syndrome_o == 7'h43) ^ data_i[0]; + data_o[1] = (syndrome_o == 7'h45) ^ data_i[1]; + data_o[2] = (syndrome_o == 7'h46) ^ data_i[2]; + data_o[3] = (syndrome_o == 7'h47) ^ data_i[3]; + data_o[4] = (syndrome_o == 7'h49) ^ data_i[4]; + data_o[5] = (syndrome_o == 7'h4a) ^ data_i[5]; + data_o[6] = (syndrome_o == 7'h4b) ^ data_i[6]; + data_o[7] = (syndrome_o == 7'h4c) ^ data_i[7]; + data_o[8] = (syndrome_o == 7'h4d) ^ data_i[8]; + data_o[9] = (syndrome_o == 7'h4e) ^ data_i[9]; + data_o[10] = (syndrome_o == 7'h4f) ^ data_i[10]; + data_o[11] = (syndrome_o == 7'h51) ^ data_i[11]; + data_o[12] = (syndrome_o == 7'h52) ^ data_i[12]; + data_o[13] = (syndrome_o == 7'h53) ^ data_i[13]; + data_o[14] = (syndrome_o == 7'h54) ^ data_i[14]; + data_o[15] = (syndrome_o == 7'h55) ^ data_i[15]; + data_o[16] = (syndrome_o == 7'h56) ^ data_i[16]; + data_o[17] = (syndrome_o == 7'h57) ^ data_i[17]; + data_o[18] = (syndrome_o == 7'h58) ^ data_i[18]; + data_o[19] = (syndrome_o == 7'h59) ^ data_i[19]; + data_o[20] = (syndrome_o == 7'h5a) ^ data_i[20]; + data_o[21] = (syndrome_o == 7'h5b) ^ data_i[21]; + data_o[22] = (syndrome_o == 7'h5c) ^ data_i[22]; + data_o[23] = (syndrome_o == 7'h5d) ^ data_i[23]; + data_o[24] = (syndrome_o == 7'h5e) ^ data_i[24]; + data_o[25] = (syndrome_o == 7'h5f) ^ data_i[25]; + data_o[26] = (syndrome_o == 7'h61) ^ data_i[26]; + data_o[27] = (syndrome_o == 7'h62) ^ data_i[27]; + data_o[28] = (syndrome_o == 7'h63) ^ data_i[28]; + data_o[29] = (syndrome_o == 7'h64) ^ data_i[29]; + data_o[30] = (syndrome_o == 7'h65) ^ data_i[30]; + data_o[31] = (syndrome_o == 7'h66) ^ data_i[31]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = syndrome_o[6]; + err_o[1] = |syndrome_o[5:0] & ~syndrome_o[6]; + + dec.data = data_o; + dec.syndrome = syndrome_o; + dec.err = err_o; + return dec; + + endfunction + + function automatic logic [71:0] + prim_secded_hamming_72_64_enc (logic [63:0] data_i); + logic [71:0] data_o; + data_o = 72'(data_i); + data_o[64] = ^(data_o & 72'h00AB55555556AAAD5B); + data_o[65] = ^(data_o & 72'h00CD9999999B33366D); + data_o[66] = ^(data_o & 72'h00F1E1E1E1E3C3C78E); + data_o[67] = ^(data_o & 72'h0001FE01FE03FC07F0); + data_o[68] = ^(data_o & 72'h0001FFFE0003FFF800); + data_o[69] = ^(data_o & 72'h0001FFFFFFFC000000); + data_o[70] = ^(data_o & 72'h00FE00000000000000); + data_o[71] = ^(data_o & 72'h7FFFFFFFFFFFFFFFFF); + return data_o; + endfunction + + function automatic secded_hamming_72_64_t + prim_secded_hamming_72_64_dec (logic [71:0] data_i); + logic [63:0] data_o; + logic [7:0] syndrome_o; + logic [1:0] err_o; + + secded_hamming_72_64_t dec; + + // Syndrome calculation + syndrome_o[0] = ^(data_i & 72'h01AB55555556AAAD5B); + syndrome_o[1] = ^(data_i & 72'h02CD9999999B33366D); + syndrome_o[2] = ^(data_i & 72'h04F1E1E1E1E3C3C78E); + syndrome_o[3] = ^(data_i & 72'h0801FE01FE03FC07F0); + syndrome_o[4] = ^(data_i & 72'h1001FFFE0003FFF800); + syndrome_o[5] = ^(data_i & 72'h2001FFFFFFFC000000); + syndrome_o[6] = ^(data_i & 72'h40FE00000000000000); + syndrome_o[7] = ^(data_i & 72'hFFFFFFFFFFFFFFFFFF); + + // Corrected output calculation + data_o[0] = (syndrome_o == 8'h83) ^ data_i[0]; + data_o[1] = (syndrome_o == 8'h85) ^ data_i[1]; + data_o[2] = (syndrome_o == 8'h86) ^ data_i[2]; + data_o[3] = (syndrome_o == 8'h87) ^ data_i[3]; + data_o[4] = (syndrome_o == 8'h89) ^ data_i[4]; + data_o[5] = (syndrome_o == 8'h8a) ^ data_i[5]; + data_o[6] = (syndrome_o == 8'h8b) ^ data_i[6]; + data_o[7] = (syndrome_o == 8'h8c) ^ data_i[7]; + data_o[8] = (syndrome_o == 8'h8d) ^ data_i[8]; + data_o[9] = (syndrome_o == 8'h8e) ^ data_i[9]; + data_o[10] = (syndrome_o == 8'h8f) ^ data_i[10]; + data_o[11] = (syndrome_o == 8'h91) ^ data_i[11]; + data_o[12] = (syndrome_o == 8'h92) ^ data_i[12]; + data_o[13] = (syndrome_o == 8'h93) ^ data_i[13]; + data_o[14] = (syndrome_o == 8'h94) ^ data_i[14]; + data_o[15] = (syndrome_o == 8'h95) ^ data_i[15]; + data_o[16] = (syndrome_o == 8'h96) ^ data_i[16]; + data_o[17] = (syndrome_o == 8'h97) ^ data_i[17]; + data_o[18] = (syndrome_o == 8'h98) ^ data_i[18]; + data_o[19] = (syndrome_o == 8'h99) ^ data_i[19]; + data_o[20] = (syndrome_o == 8'h9a) ^ data_i[20]; + data_o[21] = (syndrome_o == 8'h9b) ^ data_i[21]; + data_o[22] = (syndrome_o == 8'h9c) ^ data_i[22]; + data_o[23] = (syndrome_o == 8'h9d) ^ data_i[23]; + data_o[24] = (syndrome_o == 8'h9e) ^ data_i[24]; + data_o[25] = (syndrome_o == 8'h9f) ^ data_i[25]; + data_o[26] = (syndrome_o == 8'ha1) ^ data_i[26]; + data_o[27] = (syndrome_o == 8'ha2) ^ data_i[27]; + data_o[28] = (syndrome_o == 8'ha3) ^ data_i[28]; + data_o[29] = (syndrome_o == 8'ha4) ^ data_i[29]; + data_o[30] = (syndrome_o == 8'ha5) ^ data_i[30]; + data_o[31] = (syndrome_o == 8'ha6) ^ data_i[31]; + data_o[32] = (syndrome_o == 8'ha7) ^ data_i[32]; + data_o[33] = (syndrome_o == 8'ha8) ^ data_i[33]; + data_o[34] = (syndrome_o == 8'ha9) ^ data_i[34]; + data_o[35] = (syndrome_o == 8'haa) ^ data_i[35]; + data_o[36] = (syndrome_o == 8'hab) ^ data_i[36]; + data_o[37] = (syndrome_o == 8'hac) ^ data_i[37]; + data_o[38] = (syndrome_o == 8'had) ^ data_i[38]; + data_o[39] = (syndrome_o == 8'hae) ^ data_i[39]; + data_o[40] = (syndrome_o == 8'haf) ^ data_i[40]; + data_o[41] = (syndrome_o == 8'hb0) ^ data_i[41]; + data_o[42] = (syndrome_o == 8'hb1) ^ data_i[42]; + data_o[43] = (syndrome_o == 8'hb2) ^ data_i[43]; + data_o[44] = (syndrome_o == 8'hb3) ^ data_i[44]; + data_o[45] = (syndrome_o == 8'hb4) ^ data_i[45]; + data_o[46] = (syndrome_o == 8'hb5) ^ data_i[46]; + data_o[47] = (syndrome_o == 8'hb6) ^ data_i[47]; + data_o[48] = (syndrome_o == 8'hb7) ^ data_i[48]; + data_o[49] = (syndrome_o == 8'hb8) ^ data_i[49]; + data_o[50] = (syndrome_o == 8'hb9) ^ data_i[50]; + data_o[51] = (syndrome_o == 8'hba) ^ data_i[51]; + data_o[52] = (syndrome_o == 8'hbb) ^ data_i[52]; + data_o[53] = (syndrome_o == 8'hbc) ^ data_i[53]; + data_o[54] = (syndrome_o == 8'hbd) ^ data_i[54]; + data_o[55] = (syndrome_o == 8'hbe) ^ data_i[55]; + data_o[56] = (syndrome_o == 8'hbf) ^ data_i[56]; + data_o[57] = (syndrome_o == 8'hc1) ^ data_i[57]; + data_o[58] = (syndrome_o == 8'hc2) ^ data_i[58]; + data_o[59] = (syndrome_o == 8'hc3) ^ data_i[59]; + data_o[60] = (syndrome_o == 8'hc4) ^ data_i[60]; + data_o[61] = (syndrome_o == 8'hc5) ^ data_i[61]; + data_o[62] = (syndrome_o == 8'hc6) ^ data_i[62]; + data_o[63] = (syndrome_o == 8'hc7) ^ data_i[63]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = syndrome_o[7]; + err_o[1] = |syndrome_o[6:0] & ~syndrome_o[7]; + + dec.data = data_o; + dec.syndrome = syndrome_o; + dec.err = err_o; + return dec; + + endfunction + + function automatic logic [75:0] + prim_secded_hamming_76_68_enc (logic [67:0] data_i); + logic [75:0] data_o; + data_o = 76'(data_i); + data_o[68] = ^(data_o & 76'h00AAB55555556AAAD5B); + data_o[69] = ^(data_o & 76'h00CCD9999999B33366D); + data_o[70] = ^(data_o & 76'h000F1E1E1E1E3C3C78E); + data_o[71] = ^(data_o & 76'h00F01FE01FE03FC07F0); + data_o[72] = ^(data_o & 76'h00001FFFE0003FFF800); + data_o[73] = ^(data_o & 76'h00001FFFFFFFC000000); + data_o[74] = ^(data_o & 76'h00FFE00000000000000); + data_o[75] = ^(data_o & 76'h7FFFFFFFFFFFFFFFFFF); + return data_o; + endfunction + + function automatic secded_hamming_76_68_t + prim_secded_hamming_76_68_dec (logic [75:0] data_i); + logic [67:0] data_o; + logic [7:0] syndrome_o; + logic [1:0] err_o; + + secded_hamming_76_68_t dec; + + // Syndrome calculation + syndrome_o[0] = ^(data_i & 76'h01AAB55555556AAAD5B); + syndrome_o[1] = ^(data_i & 76'h02CCD9999999B33366D); + syndrome_o[2] = ^(data_i & 76'h040F1E1E1E1E3C3C78E); + syndrome_o[3] = ^(data_i & 76'h08F01FE01FE03FC07F0); + syndrome_o[4] = ^(data_i & 76'h10001FFFE0003FFF800); + syndrome_o[5] = ^(data_i & 76'h20001FFFFFFFC000000); + syndrome_o[6] = ^(data_i & 76'h40FFE00000000000000); + syndrome_o[7] = ^(data_i & 76'hFFFFFFFFFFFFFFFFFFF); + + // Corrected output calculation + data_o[0] = (syndrome_o == 8'h83) ^ data_i[0]; + data_o[1] = (syndrome_o == 8'h85) ^ data_i[1]; + data_o[2] = (syndrome_o == 8'h86) ^ data_i[2]; + data_o[3] = (syndrome_o == 8'h87) ^ data_i[3]; + data_o[4] = (syndrome_o == 8'h89) ^ data_i[4]; + data_o[5] = (syndrome_o == 8'h8a) ^ data_i[5]; + data_o[6] = (syndrome_o == 8'h8b) ^ data_i[6]; + data_o[7] = (syndrome_o == 8'h8c) ^ data_i[7]; + data_o[8] = (syndrome_o == 8'h8d) ^ data_i[8]; + data_o[9] = (syndrome_o == 8'h8e) ^ data_i[9]; + data_o[10] = (syndrome_o == 8'h8f) ^ data_i[10]; + data_o[11] = (syndrome_o == 8'h91) ^ data_i[11]; + data_o[12] = (syndrome_o == 8'h92) ^ data_i[12]; + data_o[13] = (syndrome_o == 8'h93) ^ data_i[13]; + data_o[14] = (syndrome_o == 8'h94) ^ data_i[14]; + data_o[15] = (syndrome_o == 8'h95) ^ data_i[15]; + data_o[16] = (syndrome_o == 8'h96) ^ data_i[16]; + data_o[17] = (syndrome_o == 8'h97) ^ data_i[17]; + data_o[18] = (syndrome_o == 8'h98) ^ data_i[18]; + data_o[19] = (syndrome_o == 8'h99) ^ data_i[19]; + data_o[20] = (syndrome_o == 8'h9a) ^ data_i[20]; + data_o[21] = (syndrome_o == 8'h9b) ^ data_i[21]; + data_o[22] = (syndrome_o == 8'h9c) ^ data_i[22]; + data_o[23] = (syndrome_o == 8'h9d) ^ data_i[23]; + data_o[24] = (syndrome_o == 8'h9e) ^ data_i[24]; + data_o[25] = (syndrome_o == 8'h9f) ^ data_i[25]; + data_o[26] = (syndrome_o == 8'ha1) ^ data_i[26]; + data_o[27] = (syndrome_o == 8'ha2) ^ data_i[27]; + data_o[28] = (syndrome_o == 8'ha3) ^ data_i[28]; + data_o[29] = (syndrome_o == 8'ha4) ^ data_i[29]; + data_o[30] = (syndrome_o == 8'ha5) ^ data_i[30]; + data_o[31] = (syndrome_o == 8'ha6) ^ data_i[31]; + data_o[32] = (syndrome_o == 8'ha7) ^ data_i[32]; + data_o[33] = (syndrome_o == 8'ha8) ^ data_i[33]; + data_o[34] = (syndrome_o == 8'ha9) ^ data_i[34]; + data_o[35] = (syndrome_o == 8'haa) ^ data_i[35]; + data_o[36] = (syndrome_o == 8'hab) ^ data_i[36]; + data_o[37] = (syndrome_o == 8'hac) ^ data_i[37]; + data_o[38] = (syndrome_o == 8'had) ^ data_i[38]; + data_o[39] = (syndrome_o == 8'hae) ^ data_i[39]; + data_o[40] = (syndrome_o == 8'haf) ^ data_i[40]; + data_o[41] = (syndrome_o == 8'hb0) ^ data_i[41]; + data_o[42] = (syndrome_o == 8'hb1) ^ data_i[42]; + data_o[43] = (syndrome_o == 8'hb2) ^ data_i[43]; + data_o[44] = (syndrome_o == 8'hb3) ^ data_i[44]; + data_o[45] = (syndrome_o == 8'hb4) ^ data_i[45]; + data_o[46] = (syndrome_o == 8'hb5) ^ data_i[46]; + data_o[47] = (syndrome_o == 8'hb6) ^ data_i[47]; + data_o[48] = (syndrome_o == 8'hb7) ^ data_i[48]; + data_o[49] = (syndrome_o == 8'hb8) ^ data_i[49]; + data_o[50] = (syndrome_o == 8'hb9) ^ data_i[50]; + data_o[51] = (syndrome_o == 8'hba) ^ data_i[51]; + data_o[52] = (syndrome_o == 8'hbb) ^ data_i[52]; + data_o[53] = (syndrome_o == 8'hbc) ^ data_i[53]; + data_o[54] = (syndrome_o == 8'hbd) ^ data_i[54]; + data_o[55] = (syndrome_o == 8'hbe) ^ data_i[55]; + data_o[56] = (syndrome_o == 8'hbf) ^ data_i[56]; + data_o[57] = (syndrome_o == 8'hc1) ^ data_i[57]; + data_o[58] = (syndrome_o == 8'hc2) ^ data_i[58]; + data_o[59] = (syndrome_o == 8'hc3) ^ data_i[59]; + data_o[60] = (syndrome_o == 8'hc4) ^ data_i[60]; + data_o[61] = (syndrome_o == 8'hc5) ^ data_i[61]; + data_o[62] = (syndrome_o == 8'hc6) ^ data_i[62]; + data_o[63] = (syndrome_o == 8'hc7) ^ data_i[63]; + data_o[64] = (syndrome_o == 8'hc8) ^ data_i[64]; + data_o[65] = (syndrome_o == 8'hc9) ^ data_i[65]; + data_o[66] = (syndrome_o == 8'hca) ^ data_i[66]; + data_o[67] = (syndrome_o == 8'hcb) ^ data_i[67]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = syndrome_o[7]; + err_o[1] = |syndrome_o[6:0] & ~syndrome_o[7]; + + dec.data = data_o; + dec.syndrome = syndrome_o; + dec.err = err_o; + return dec; + + endfunction + + function automatic logic [21:0] + prim_secded_inv_22_16_enc (logic [15:0] data_i); + logic [21:0] data_o; + data_o = 22'(data_i); + data_o[16] = ^(data_o & 22'h00496E); + data_o[17] = ^(data_o & 22'h00F20B); + data_o[18] = ^(data_o & 22'h008ED8); + data_o[19] = ^(data_o & 22'h007714); + data_o[20] = ^(data_o & 22'h00ACA5); + data_o[21] = ^(data_o & 22'h0011F3); + data_o ^= 22'h2A0000; + return data_o; + endfunction + + function automatic secded_inv_22_16_t + prim_secded_inv_22_16_dec (logic [21:0] data_i); + logic [15:0] data_o; + logic [5:0] syndrome_o; + logic [1:0] err_o; + + secded_inv_22_16_t dec; + + // Syndrome calculation + syndrome_o[0] = ^((data_i ^ 22'h2A0000) & 22'h01496E); + syndrome_o[1] = ^((data_i ^ 22'h2A0000) & 22'h02F20B); + syndrome_o[2] = ^((data_i ^ 22'h2A0000) & 22'h048ED8); + syndrome_o[3] = ^((data_i ^ 22'h2A0000) & 22'h087714); + syndrome_o[4] = ^((data_i ^ 22'h2A0000) & 22'h10ACA5); + syndrome_o[5] = ^((data_i ^ 22'h2A0000) & 22'h2011F3); + + // Corrected output calculation + data_o[0] = (syndrome_o == 6'h32) ^ data_i[0]; + data_o[1] = (syndrome_o == 6'h23) ^ data_i[1]; + data_o[2] = (syndrome_o == 6'h19) ^ data_i[2]; + data_o[3] = (syndrome_o == 6'h7) ^ data_i[3]; + data_o[4] = (syndrome_o == 6'h2c) ^ data_i[4]; + data_o[5] = (syndrome_o == 6'h31) ^ data_i[5]; + data_o[6] = (syndrome_o == 6'h25) ^ data_i[6]; + data_o[7] = (syndrome_o == 6'h34) ^ data_i[7]; + data_o[8] = (syndrome_o == 6'h29) ^ data_i[8]; + data_o[9] = (syndrome_o == 6'he) ^ data_i[9]; + data_o[10] = (syndrome_o == 6'h1c) ^ data_i[10]; + data_o[11] = (syndrome_o == 6'h15) ^ data_i[11]; + data_o[12] = (syndrome_o == 6'h2a) ^ data_i[12]; + data_o[13] = (syndrome_o == 6'h1a) ^ data_i[13]; + data_o[14] = (syndrome_o == 6'hb) ^ data_i[14]; + data_o[15] = (syndrome_o == 6'h16) ^ data_i[15]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = ^syndrome_o; + err_o[1] = ~err_o[0] & (|syndrome_o); + + dec.data = data_o; + dec.syndrome = syndrome_o; + dec.err = err_o; + return dec; + + endfunction + + function automatic logic [27:0] + prim_secded_inv_28_22_enc (logic [21:0] data_i); + logic [27:0] data_o; + data_o = 28'(data_i); + data_o[22] = ^(data_o & 28'h03003FF); + data_o[23] = ^(data_o & 28'h010FC0F); + data_o[24] = ^(data_o & 28'h0271C71); + data_o[25] = ^(data_o & 28'h03B6592); + data_o[26] = ^(data_o & 28'h03DAAA4); + data_o[27] = ^(data_o & 28'h03ED348); + data_o ^= 28'hA800000; + return data_o; + endfunction + + function automatic secded_inv_28_22_t + prim_secded_inv_28_22_dec (logic [27:0] data_i); + logic [21:0] data_o; + logic [5:0] syndrome_o; + logic [1:0] err_o; + + secded_inv_28_22_t dec; + + // Syndrome calculation + syndrome_o[0] = ^((data_i ^ 28'hA800000) & 28'h07003FF); + syndrome_o[1] = ^((data_i ^ 28'hA800000) & 28'h090FC0F); + syndrome_o[2] = ^((data_i ^ 28'hA800000) & 28'h1271C71); + syndrome_o[3] = ^((data_i ^ 28'hA800000) & 28'h23B6592); + syndrome_o[4] = ^((data_i ^ 28'hA800000) & 28'h43DAAA4); + syndrome_o[5] = ^((data_i ^ 28'hA800000) & 28'h83ED348); + + // Corrected output calculation + data_o[0] = (syndrome_o == 6'h7) ^ data_i[0]; + data_o[1] = (syndrome_o == 6'hb) ^ data_i[1]; + data_o[2] = (syndrome_o == 6'h13) ^ data_i[2]; + data_o[3] = (syndrome_o == 6'h23) ^ data_i[3]; + data_o[4] = (syndrome_o == 6'hd) ^ data_i[4]; + data_o[5] = (syndrome_o == 6'h15) ^ data_i[5]; + data_o[6] = (syndrome_o == 6'h25) ^ data_i[6]; + data_o[7] = (syndrome_o == 6'h19) ^ data_i[7]; + data_o[8] = (syndrome_o == 6'h29) ^ data_i[8]; + data_o[9] = (syndrome_o == 6'h31) ^ data_i[9]; + data_o[10] = (syndrome_o == 6'he) ^ data_i[10]; + data_o[11] = (syndrome_o == 6'h16) ^ data_i[11]; + data_o[12] = (syndrome_o == 6'h26) ^ data_i[12]; + data_o[13] = (syndrome_o == 6'h1a) ^ data_i[13]; + data_o[14] = (syndrome_o == 6'h2a) ^ data_i[14]; + data_o[15] = (syndrome_o == 6'h32) ^ data_i[15]; + data_o[16] = (syndrome_o == 6'h1c) ^ data_i[16]; + data_o[17] = (syndrome_o == 6'h2c) ^ data_i[17]; + data_o[18] = (syndrome_o == 6'h34) ^ data_i[18]; + data_o[19] = (syndrome_o == 6'h38) ^ data_i[19]; + data_o[20] = (syndrome_o == 6'h3b) ^ data_i[20]; + data_o[21] = (syndrome_o == 6'h3d) ^ data_i[21]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = ^syndrome_o; + err_o[1] = ~err_o[0] & (|syndrome_o); + + dec.data = data_o; + dec.syndrome = syndrome_o; + dec.err = err_o; + return dec; + + endfunction + + function automatic logic [38:0] + prim_secded_inv_39_32_enc (logic [31:0] data_i); + logic [38:0] data_o; + data_o = 39'(data_i); + data_o[32] = ^(data_o & 39'h002606BD25); + data_o[33] = ^(data_o & 39'h00DEBA8050); + data_o[34] = ^(data_o & 39'h00413D89AA); + data_o[35] = ^(data_o & 39'h0031234ED1); + data_o[36] = ^(data_o & 39'h00C2C1323B); + data_o[37] = ^(data_o & 39'h002DCC624C); + data_o[38] = ^(data_o & 39'h0098505586); + data_o ^= 39'h2A00000000; + return data_o; + endfunction + + function automatic secded_inv_39_32_t + prim_secded_inv_39_32_dec (logic [38:0] data_i); + logic [31:0] data_o; + logic [6:0] syndrome_o; + logic [1:0] err_o; + + secded_inv_39_32_t dec; + + // Syndrome calculation + syndrome_o[0] = ^((data_i ^ 39'h2A00000000) & 39'h012606BD25); + syndrome_o[1] = ^((data_i ^ 39'h2A00000000) & 39'h02DEBA8050); + syndrome_o[2] = ^((data_i ^ 39'h2A00000000) & 39'h04413D89AA); + syndrome_o[3] = ^((data_i ^ 39'h2A00000000) & 39'h0831234ED1); + syndrome_o[4] = ^((data_i ^ 39'h2A00000000) & 39'h10C2C1323B); + syndrome_o[5] = ^((data_i ^ 39'h2A00000000) & 39'h202DCC624C); + syndrome_o[6] = ^((data_i ^ 39'h2A00000000) & 39'h4098505586); + + // Corrected output calculation + data_o[0] = (syndrome_o == 7'h19) ^ data_i[0]; + data_o[1] = (syndrome_o == 7'h54) ^ data_i[1]; + data_o[2] = (syndrome_o == 7'h61) ^ data_i[2]; + data_o[3] = (syndrome_o == 7'h34) ^ data_i[3]; + data_o[4] = (syndrome_o == 7'h1a) ^ data_i[4]; + data_o[5] = (syndrome_o == 7'h15) ^ data_i[5]; + data_o[6] = (syndrome_o == 7'h2a) ^ data_i[6]; + data_o[7] = (syndrome_o == 7'h4c) ^ data_i[7]; + data_o[8] = (syndrome_o == 7'h45) ^ data_i[8]; + data_o[9] = (syndrome_o == 7'h38) ^ data_i[9]; + data_o[10] = (syndrome_o == 7'h49) ^ data_i[10]; + data_o[11] = (syndrome_o == 7'hd) ^ data_i[11]; + data_o[12] = (syndrome_o == 7'h51) ^ data_i[12]; + data_o[13] = (syndrome_o == 7'h31) ^ data_i[13]; + data_o[14] = (syndrome_o == 7'h68) ^ data_i[14]; + data_o[15] = (syndrome_o == 7'h7) ^ data_i[15]; + data_o[16] = (syndrome_o == 7'h1c) ^ data_i[16]; + data_o[17] = (syndrome_o == 7'hb) ^ data_i[17]; + data_o[18] = (syndrome_o == 7'h25) ^ data_i[18]; + data_o[19] = (syndrome_o == 7'h26) ^ data_i[19]; + data_o[20] = (syndrome_o == 7'h46) ^ data_i[20]; + data_o[21] = (syndrome_o == 7'he) ^ data_i[21]; + data_o[22] = (syndrome_o == 7'h70) ^ data_i[22]; + data_o[23] = (syndrome_o == 7'h32) ^ data_i[23]; + data_o[24] = (syndrome_o == 7'h2c) ^ data_i[24]; + data_o[25] = (syndrome_o == 7'h13) ^ data_i[25]; + data_o[26] = (syndrome_o == 7'h23) ^ data_i[26]; + data_o[27] = (syndrome_o == 7'h62) ^ data_i[27]; + data_o[28] = (syndrome_o == 7'h4a) ^ data_i[28]; + data_o[29] = (syndrome_o == 7'h29) ^ data_i[29]; + data_o[30] = (syndrome_o == 7'h16) ^ data_i[30]; + data_o[31] = (syndrome_o == 7'h52) ^ data_i[31]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = ^syndrome_o; + err_o[1] = ~err_o[0] & (|syndrome_o); + + dec.data = data_o; + dec.syndrome = syndrome_o; + dec.err = err_o; + return dec; + + endfunction + + function automatic logic [63:0] + prim_secded_inv_64_57_enc (logic [56:0] data_i); + logic [63:0] data_o; + data_o = 64'(data_i); + data_o[57] = ^(data_o & 64'h0103FFF800007FFF); + data_o[58] = ^(data_o & 64'h017C1FF801FF801F); + data_o[59] = ^(data_o & 64'h01BDE1F87E0781E1); + data_o[60] = ^(data_o & 64'h01DEEE3B8E388E22); + data_o[61] = ^(data_o & 64'h01EF76CDB2C93244); + data_o[62] = ^(data_o & 64'h01F7BB56D5525488); + data_o[63] = ^(data_o & 64'h01FBDDA769A46910); + data_o ^= 64'h5400000000000000; + return data_o; + endfunction + + function automatic secded_inv_64_57_t + prim_secded_inv_64_57_dec (logic [63:0] data_i); + logic [56:0] data_o; + logic [6:0] syndrome_o; + logic [1:0] err_o; + + secded_inv_64_57_t dec; + + // Syndrome calculation + syndrome_o[0] = ^((data_i ^ 64'h5400000000000000) & 64'h0303FFF800007FFF); + syndrome_o[1] = ^((data_i ^ 64'h5400000000000000) & 64'h057C1FF801FF801F); + syndrome_o[2] = ^((data_i ^ 64'h5400000000000000) & 64'h09BDE1F87E0781E1); + syndrome_o[3] = ^((data_i ^ 64'h5400000000000000) & 64'h11DEEE3B8E388E22); + syndrome_o[4] = ^((data_i ^ 64'h5400000000000000) & 64'h21EF76CDB2C93244); + syndrome_o[5] = ^((data_i ^ 64'h5400000000000000) & 64'h41F7BB56D5525488); + syndrome_o[6] = ^((data_i ^ 64'h5400000000000000) & 64'h81FBDDA769A46910); + + // Corrected output calculation + data_o[0] = (syndrome_o == 7'h7) ^ data_i[0]; + data_o[1] = (syndrome_o == 7'hb) ^ data_i[1]; + data_o[2] = (syndrome_o == 7'h13) ^ data_i[2]; + data_o[3] = (syndrome_o == 7'h23) ^ data_i[3]; + data_o[4] = (syndrome_o == 7'h43) ^ data_i[4]; + data_o[5] = (syndrome_o == 7'hd) ^ data_i[5]; + data_o[6] = (syndrome_o == 7'h15) ^ data_i[6]; + data_o[7] = (syndrome_o == 7'h25) ^ data_i[7]; + data_o[8] = (syndrome_o == 7'h45) ^ data_i[8]; + data_o[9] = (syndrome_o == 7'h19) ^ data_i[9]; + data_o[10] = (syndrome_o == 7'h29) ^ data_i[10]; + data_o[11] = (syndrome_o == 7'h49) ^ data_i[11]; + data_o[12] = (syndrome_o == 7'h31) ^ data_i[12]; + data_o[13] = (syndrome_o == 7'h51) ^ data_i[13]; + data_o[14] = (syndrome_o == 7'h61) ^ data_i[14]; + data_o[15] = (syndrome_o == 7'he) ^ data_i[15]; + data_o[16] = (syndrome_o == 7'h16) ^ data_i[16]; + data_o[17] = (syndrome_o == 7'h26) ^ data_i[17]; + data_o[18] = (syndrome_o == 7'h46) ^ data_i[18]; + data_o[19] = (syndrome_o == 7'h1a) ^ data_i[19]; + data_o[20] = (syndrome_o == 7'h2a) ^ data_i[20]; + data_o[21] = (syndrome_o == 7'h4a) ^ data_i[21]; + data_o[22] = (syndrome_o == 7'h32) ^ data_i[22]; + data_o[23] = (syndrome_o == 7'h52) ^ data_i[23]; + data_o[24] = (syndrome_o == 7'h62) ^ data_i[24]; + data_o[25] = (syndrome_o == 7'h1c) ^ data_i[25]; + data_o[26] = (syndrome_o == 7'h2c) ^ data_i[26]; + data_o[27] = (syndrome_o == 7'h4c) ^ data_i[27]; + data_o[28] = (syndrome_o == 7'h34) ^ data_i[28]; + data_o[29] = (syndrome_o == 7'h54) ^ data_i[29]; + data_o[30] = (syndrome_o == 7'h64) ^ data_i[30]; + data_o[31] = (syndrome_o == 7'h38) ^ data_i[31]; + data_o[32] = (syndrome_o == 7'h58) ^ data_i[32]; + data_o[33] = (syndrome_o == 7'h68) ^ data_i[33]; + data_o[34] = (syndrome_o == 7'h70) ^ data_i[34]; + data_o[35] = (syndrome_o == 7'h1f) ^ data_i[35]; + data_o[36] = (syndrome_o == 7'h2f) ^ data_i[36]; + data_o[37] = (syndrome_o == 7'h4f) ^ data_i[37]; + data_o[38] = (syndrome_o == 7'h37) ^ data_i[38]; + data_o[39] = (syndrome_o == 7'h57) ^ data_i[39]; + data_o[40] = (syndrome_o == 7'h67) ^ data_i[40]; + data_o[41] = (syndrome_o == 7'h3b) ^ data_i[41]; + data_o[42] = (syndrome_o == 7'h5b) ^ data_i[42]; + data_o[43] = (syndrome_o == 7'h6b) ^ data_i[43]; + data_o[44] = (syndrome_o == 7'h73) ^ data_i[44]; + data_o[45] = (syndrome_o == 7'h3d) ^ data_i[45]; + data_o[46] = (syndrome_o == 7'h5d) ^ data_i[46]; + data_o[47] = (syndrome_o == 7'h6d) ^ data_i[47]; + data_o[48] = (syndrome_o == 7'h75) ^ data_i[48]; + data_o[49] = (syndrome_o == 7'h79) ^ data_i[49]; + data_o[50] = (syndrome_o == 7'h3e) ^ data_i[50]; + data_o[51] = (syndrome_o == 7'h5e) ^ data_i[51]; + data_o[52] = (syndrome_o == 7'h6e) ^ data_i[52]; + data_o[53] = (syndrome_o == 7'h76) ^ data_i[53]; + data_o[54] = (syndrome_o == 7'h7a) ^ data_i[54]; + data_o[55] = (syndrome_o == 7'h7c) ^ data_i[55]; + data_o[56] = (syndrome_o == 7'h7f) ^ data_i[56]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = ^syndrome_o; + err_o[1] = ~err_o[0] & (|syndrome_o); + + dec.data = data_o; + dec.syndrome = syndrome_o; + dec.err = err_o; + return dec; + + endfunction + + function automatic logic [71:0] + prim_secded_inv_72_64_enc (logic [63:0] data_i); + logic [71:0] data_o; + data_o = 72'(data_i); + data_o[64] = ^(data_o & 72'h00B9000000001FFFFF); + data_o[65] = ^(data_o & 72'h005E00000FFFE0003F); + data_o[66] = ^(data_o & 72'h0067003FF003E007C1); + data_o[67] = ^(data_o & 72'h00CD0FC0F03C207842); + data_o[68] = ^(data_o & 72'h00B671C711C4438884); + data_o[69] = ^(data_o & 72'h00B5B65926488C9108); + data_o[70] = ^(data_o & 72'h00CBDAAA4A91152210); + data_o[71] = ^(data_o & 72'h007AED348D221A4420); + data_o ^= 72'hAA0000000000000000; + return data_o; + endfunction + + function automatic secded_inv_72_64_t + prim_secded_inv_72_64_dec (logic [71:0] data_i); + logic [63:0] data_o; + logic [7:0] syndrome_o; + logic [1:0] err_o; + + secded_inv_72_64_t dec; + + // Syndrome calculation + syndrome_o[0] = ^((data_i ^ 72'hAA0000000000000000) & 72'h01B9000000001FFFFF); + syndrome_o[1] = ^((data_i ^ 72'hAA0000000000000000) & 72'h025E00000FFFE0003F); + syndrome_o[2] = ^((data_i ^ 72'hAA0000000000000000) & 72'h0467003FF003E007C1); + syndrome_o[3] = ^((data_i ^ 72'hAA0000000000000000) & 72'h08CD0FC0F03C207842); + syndrome_o[4] = ^((data_i ^ 72'hAA0000000000000000) & 72'h10B671C711C4438884); + syndrome_o[5] = ^((data_i ^ 72'hAA0000000000000000) & 72'h20B5B65926488C9108); + syndrome_o[6] = ^((data_i ^ 72'hAA0000000000000000) & 72'h40CBDAAA4A91152210); + syndrome_o[7] = ^((data_i ^ 72'hAA0000000000000000) & 72'h807AED348D221A4420); + + // Corrected output calculation + data_o[0] = (syndrome_o == 8'h7) ^ data_i[0]; + data_o[1] = (syndrome_o == 8'hb) ^ data_i[1]; + data_o[2] = (syndrome_o == 8'h13) ^ data_i[2]; + data_o[3] = (syndrome_o == 8'h23) ^ data_i[3]; + data_o[4] = (syndrome_o == 8'h43) ^ data_i[4]; + data_o[5] = (syndrome_o == 8'h83) ^ data_i[5]; + data_o[6] = (syndrome_o == 8'hd) ^ data_i[6]; + data_o[7] = (syndrome_o == 8'h15) ^ data_i[7]; + data_o[8] = (syndrome_o == 8'h25) ^ data_i[8]; + data_o[9] = (syndrome_o == 8'h45) ^ data_i[9]; + data_o[10] = (syndrome_o == 8'h85) ^ data_i[10]; + data_o[11] = (syndrome_o == 8'h19) ^ data_i[11]; + data_o[12] = (syndrome_o == 8'h29) ^ data_i[12]; + data_o[13] = (syndrome_o == 8'h49) ^ data_i[13]; + data_o[14] = (syndrome_o == 8'h89) ^ data_i[14]; + data_o[15] = (syndrome_o == 8'h31) ^ data_i[15]; + data_o[16] = (syndrome_o == 8'h51) ^ data_i[16]; + data_o[17] = (syndrome_o == 8'h91) ^ data_i[17]; + data_o[18] = (syndrome_o == 8'h61) ^ data_i[18]; + data_o[19] = (syndrome_o == 8'ha1) ^ data_i[19]; + data_o[20] = (syndrome_o == 8'hc1) ^ data_i[20]; + data_o[21] = (syndrome_o == 8'he) ^ data_i[21]; + data_o[22] = (syndrome_o == 8'h16) ^ data_i[22]; + data_o[23] = (syndrome_o == 8'h26) ^ data_i[23]; + data_o[24] = (syndrome_o == 8'h46) ^ data_i[24]; + data_o[25] = (syndrome_o == 8'h86) ^ data_i[25]; + data_o[26] = (syndrome_o == 8'h1a) ^ data_i[26]; + data_o[27] = (syndrome_o == 8'h2a) ^ data_i[27]; + data_o[28] = (syndrome_o == 8'h4a) ^ data_i[28]; + data_o[29] = (syndrome_o == 8'h8a) ^ data_i[29]; + data_o[30] = (syndrome_o == 8'h32) ^ data_i[30]; + data_o[31] = (syndrome_o == 8'h52) ^ data_i[31]; + data_o[32] = (syndrome_o == 8'h92) ^ data_i[32]; + data_o[33] = (syndrome_o == 8'h62) ^ data_i[33]; + data_o[34] = (syndrome_o == 8'ha2) ^ data_i[34]; + data_o[35] = (syndrome_o == 8'hc2) ^ data_i[35]; + data_o[36] = (syndrome_o == 8'h1c) ^ data_i[36]; + data_o[37] = (syndrome_o == 8'h2c) ^ data_i[37]; + data_o[38] = (syndrome_o == 8'h4c) ^ data_i[38]; + data_o[39] = (syndrome_o == 8'h8c) ^ data_i[39]; + data_o[40] = (syndrome_o == 8'h34) ^ data_i[40]; + data_o[41] = (syndrome_o == 8'h54) ^ data_i[41]; + data_o[42] = (syndrome_o == 8'h94) ^ data_i[42]; + data_o[43] = (syndrome_o == 8'h64) ^ data_i[43]; + data_o[44] = (syndrome_o == 8'ha4) ^ data_i[44]; + data_o[45] = (syndrome_o == 8'hc4) ^ data_i[45]; + data_o[46] = (syndrome_o == 8'h38) ^ data_i[46]; + data_o[47] = (syndrome_o == 8'h58) ^ data_i[47]; + data_o[48] = (syndrome_o == 8'h98) ^ data_i[48]; + data_o[49] = (syndrome_o == 8'h68) ^ data_i[49]; + data_o[50] = (syndrome_o == 8'ha8) ^ data_i[50]; + data_o[51] = (syndrome_o == 8'hc8) ^ data_i[51]; + data_o[52] = (syndrome_o == 8'h70) ^ data_i[52]; + data_o[53] = (syndrome_o == 8'hb0) ^ data_i[53]; + data_o[54] = (syndrome_o == 8'hd0) ^ data_i[54]; + data_o[55] = (syndrome_o == 8'he0) ^ data_i[55]; + data_o[56] = (syndrome_o == 8'h6d) ^ data_i[56]; + data_o[57] = (syndrome_o == 8'hd6) ^ data_i[57]; + data_o[58] = (syndrome_o == 8'h3e) ^ data_i[58]; + data_o[59] = (syndrome_o == 8'hcb) ^ data_i[59]; + data_o[60] = (syndrome_o == 8'hb3) ^ data_i[60]; + data_o[61] = (syndrome_o == 8'hb5) ^ data_i[61]; + data_o[62] = (syndrome_o == 8'hce) ^ data_i[62]; + data_o[63] = (syndrome_o == 8'h79) ^ data_i[63]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = ^syndrome_o; + err_o[1] = ~err_o[0] & (|syndrome_o); + + dec.data = data_o; + dec.syndrome = syndrome_o; + dec.err = err_o; + return dec; + + endfunction + + function automatic logic [21:0] + prim_secded_inv_hamming_22_16_enc (logic [15:0] data_i); + logic [21:0] data_o; + data_o = 22'(data_i); + data_o[16] = ^(data_o & 22'h00AD5B); + data_o[17] = ^(data_o & 22'h00366D); + data_o[18] = ^(data_o & 22'h00C78E); + data_o[19] = ^(data_o & 22'h0007F0); + data_o[20] = ^(data_o & 22'h00F800); + data_o[21] = ^(data_o & 22'h1FFFFF); + data_o ^= 22'h2A0000; + return data_o; + endfunction + + function automatic secded_inv_hamming_22_16_t + prim_secded_inv_hamming_22_16_dec (logic [21:0] data_i); + logic [15:0] data_o; + logic [5:0] syndrome_o; + logic [1:0] err_o; + + secded_inv_hamming_22_16_t dec; + + // Syndrome calculation + syndrome_o[0] = ^((data_i ^ 22'h2A0000) & 22'h01AD5B); + syndrome_o[1] = ^((data_i ^ 22'h2A0000) & 22'h02366D); + syndrome_o[2] = ^((data_i ^ 22'h2A0000) & 22'h04C78E); + syndrome_o[3] = ^((data_i ^ 22'h2A0000) & 22'h0807F0); + syndrome_o[4] = ^((data_i ^ 22'h2A0000) & 22'h10F800); + syndrome_o[5] = ^((data_i ^ 22'h2A0000) & 22'h3FFFFF); + + // Corrected output calculation + data_o[0] = (syndrome_o == 6'h23) ^ data_i[0]; + data_o[1] = (syndrome_o == 6'h25) ^ data_i[1]; + data_o[2] = (syndrome_o == 6'h26) ^ data_i[2]; + data_o[3] = (syndrome_o == 6'h27) ^ data_i[3]; + data_o[4] = (syndrome_o == 6'h29) ^ data_i[4]; + data_o[5] = (syndrome_o == 6'h2a) ^ data_i[5]; + data_o[6] = (syndrome_o == 6'h2b) ^ data_i[6]; + data_o[7] = (syndrome_o == 6'h2c) ^ data_i[7]; + data_o[8] = (syndrome_o == 6'h2d) ^ data_i[8]; + data_o[9] = (syndrome_o == 6'h2e) ^ data_i[9]; + data_o[10] = (syndrome_o == 6'h2f) ^ data_i[10]; + data_o[11] = (syndrome_o == 6'h31) ^ data_i[11]; + data_o[12] = (syndrome_o == 6'h32) ^ data_i[12]; + data_o[13] = (syndrome_o == 6'h33) ^ data_i[13]; + data_o[14] = (syndrome_o == 6'h34) ^ data_i[14]; + data_o[15] = (syndrome_o == 6'h35) ^ data_i[15]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = syndrome_o[5]; + err_o[1] = |syndrome_o[4:0] & ~syndrome_o[5]; + + dec.data = data_o; + dec.syndrome = syndrome_o; + dec.err = err_o; + return dec; + + endfunction + + function automatic logic [38:0] + prim_secded_inv_hamming_39_32_enc (logic [31:0] data_i); + logic [38:0] data_o; + data_o = 39'(data_i); + data_o[32] = ^(data_o & 39'h0056AAAD5B); + data_o[33] = ^(data_o & 39'h009B33366D); + data_o[34] = ^(data_o & 39'h00E3C3C78E); + data_o[35] = ^(data_o & 39'h0003FC07F0); + data_o[36] = ^(data_o & 39'h0003FFF800); + data_o[37] = ^(data_o & 39'h00FC000000); + data_o[38] = ^(data_o & 39'h3FFFFFFFFF); + data_o ^= 39'h2A00000000; + return data_o; + endfunction + + function automatic secded_inv_hamming_39_32_t + prim_secded_inv_hamming_39_32_dec (logic [38:0] data_i); + logic [31:0] data_o; + logic [6:0] syndrome_o; + logic [1:0] err_o; + + secded_inv_hamming_39_32_t dec; + + // Syndrome calculation + syndrome_o[0] = ^((data_i ^ 39'h2A00000000) & 39'h0156AAAD5B); + syndrome_o[1] = ^((data_i ^ 39'h2A00000000) & 39'h029B33366D); + syndrome_o[2] = ^((data_i ^ 39'h2A00000000) & 39'h04E3C3C78E); + syndrome_o[3] = ^((data_i ^ 39'h2A00000000) & 39'h0803FC07F0); + syndrome_o[4] = ^((data_i ^ 39'h2A00000000) & 39'h1003FFF800); + syndrome_o[5] = ^((data_i ^ 39'h2A00000000) & 39'h20FC000000); + syndrome_o[6] = ^((data_i ^ 39'h2A00000000) & 39'h7FFFFFFFFF); + + // Corrected output calculation + data_o[0] = (syndrome_o == 7'h43) ^ data_i[0]; + data_o[1] = (syndrome_o == 7'h45) ^ data_i[1]; + data_o[2] = (syndrome_o == 7'h46) ^ data_i[2]; + data_o[3] = (syndrome_o == 7'h47) ^ data_i[3]; + data_o[4] = (syndrome_o == 7'h49) ^ data_i[4]; + data_o[5] = (syndrome_o == 7'h4a) ^ data_i[5]; + data_o[6] = (syndrome_o == 7'h4b) ^ data_i[6]; + data_o[7] = (syndrome_o == 7'h4c) ^ data_i[7]; + data_o[8] = (syndrome_o == 7'h4d) ^ data_i[8]; + data_o[9] = (syndrome_o == 7'h4e) ^ data_i[9]; + data_o[10] = (syndrome_o == 7'h4f) ^ data_i[10]; + data_o[11] = (syndrome_o == 7'h51) ^ data_i[11]; + data_o[12] = (syndrome_o == 7'h52) ^ data_i[12]; + data_o[13] = (syndrome_o == 7'h53) ^ data_i[13]; + data_o[14] = (syndrome_o == 7'h54) ^ data_i[14]; + data_o[15] = (syndrome_o == 7'h55) ^ data_i[15]; + data_o[16] = (syndrome_o == 7'h56) ^ data_i[16]; + data_o[17] = (syndrome_o == 7'h57) ^ data_i[17]; + data_o[18] = (syndrome_o == 7'h58) ^ data_i[18]; + data_o[19] = (syndrome_o == 7'h59) ^ data_i[19]; + data_o[20] = (syndrome_o == 7'h5a) ^ data_i[20]; + data_o[21] = (syndrome_o == 7'h5b) ^ data_i[21]; + data_o[22] = (syndrome_o == 7'h5c) ^ data_i[22]; + data_o[23] = (syndrome_o == 7'h5d) ^ data_i[23]; + data_o[24] = (syndrome_o == 7'h5e) ^ data_i[24]; + data_o[25] = (syndrome_o == 7'h5f) ^ data_i[25]; + data_o[26] = (syndrome_o == 7'h61) ^ data_i[26]; + data_o[27] = (syndrome_o == 7'h62) ^ data_i[27]; + data_o[28] = (syndrome_o == 7'h63) ^ data_i[28]; + data_o[29] = (syndrome_o == 7'h64) ^ data_i[29]; + data_o[30] = (syndrome_o == 7'h65) ^ data_i[30]; + data_o[31] = (syndrome_o == 7'h66) ^ data_i[31]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = syndrome_o[6]; + err_o[1] = |syndrome_o[5:0] & ~syndrome_o[6]; + + dec.data = data_o; + dec.syndrome = syndrome_o; + dec.err = err_o; + return dec; + + endfunction + + function automatic logic [71:0] + prim_secded_inv_hamming_72_64_enc (logic [63:0] data_i); + logic [71:0] data_o; + data_o = 72'(data_i); + data_o[64] = ^(data_o & 72'h00AB55555556AAAD5B); + data_o[65] = ^(data_o & 72'h00CD9999999B33366D); + data_o[66] = ^(data_o & 72'h00F1E1E1E1E3C3C78E); + data_o[67] = ^(data_o & 72'h0001FE01FE03FC07F0); + data_o[68] = ^(data_o & 72'h0001FFFE0003FFF800); + data_o[69] = ^(data_o & 72'h0001FFFFFFFC000000); + data_o[70] = ^(data_o & 72'h00FE00000000000000); + data_o[71] = ^(data_o & 72'h7FFFFFFFFFFFFFFFFF); + data_o ^= 72'hAA0000000000000000; + return data_o; + endfunction + + function automatic secded_inv_hamming_72_64_t + prim_secded_inv_hamming_72_64_dec (logic [71:0] data_i); + logic [63:0] data_o; + logic [7:0] syndrome_o; + logic [1:0] err_o; + + secded_inv_hamming_72_64_t dec; + + // Syndrome calculation + syndrome_o[0] = ^((data_i ^ 72'hAA0000000000000000) & 72'h01AB55555556AAAD5B); + syndrome_o[1] = ^((data_i ^ 72'hAA0000000000000000) & 72'h02CD9999999B33366D); + syndrome_o[2] = ^((data_i ^ 72'hAA0000000000000000) & 72'h04F1E1E1E1E3C3C78E); + syndrome_o[3] = ^((data_i ^ 72'hAA0000000000000000) & 72'h0801FE01FE03FC07F0); + syndrome_o[4] = ^((data_i ^ 72'hAA0000000000000000) & 72'h1001FFFE0003FFF800); + syndrome_o[5] = ^((data_i ^ 72'hAA0000000000000000) & 72'h2001FFFFFFFC000000); + syndrome_o[6] = ^((data_i ^ 72'hAA0000000000000000) & 72'h40FE00000000000000); + syndrome_o[7] = ^((data_i ^ 72'hAA0000000000000000) & 72'hFFFFFFFFFFFFFFFFFF); + + // Corrected output calculation + data_o[0] = (syndrome_o == 8'h83) ^ data_i[0]; + data_o[1] = (syndrome_o == 8'h85) ^ data_i[1]; + data_o[2] = (syndrome_o == 8'h86) ^ data_i[2]; + data_o[3] = (syndrome_o == 8'h87) ^ data_i[3]; + data_o[4] = (syndrome_o == 8'h89) ^ data_i[4]; + data_o[5] = (syndrome_o == 8'h8a) ^ data_i[5]; + data_o[6] = (syndrome_o == 8'h8b) ^ data_i[6]; + data_o[7] = (syndrome_o == 8'h8c) ^ data_i[7]; + data_o[8] = (syndrome_o == 8'h8d) ^ data_i[8]; + data_o[9] = (syndrome_o == 8'h8e) ^ data_i[9]; + data_o[10] = (syndrome_o == 8'h8f) ^ data_i[10]; + data_o[11] = (syndrome_o == 8'h91) ^ data_i[11]; + data_o[12] = (syndrome_o == 8'h92) ^ data_i[12]; + data_o[13] = (syndrome_o == 8'h93) ^ data_i[13]; + data_o[14] = (syndrome_o == 8'h94) ^ data_i[14]; + data_o[15] = (syndrome_o == 8'h95) ^ data_i[15]; + data_o[16] = (syndrome_o == 8'h96) ^ data_i[16]; + data_o[17] = (syndrome_o == 8'h97) ^ data_i[17]; + data_o[18] = (syndrome_o == 8'h98) ^ data_i[18]; + data_o[19] = (syndrome_o == 8'h99) ^ data_i[19]; + data_o[20] = (syndrome_o == 8'h9a) ^ data_i[20]; + data_o[21] = (syndrome_o == 8'h9b) ^ data_i[21]; + data_o[22] = (syndrome_o == 8'h9c) ^ data_i[22]; + data_o[23] = (syndrome_o == 8'h9d) ^ data_i[23]; + data_o[24] = (syndrome_o == 8'h9e) ^ data_i[24]; + data_o[25] = (syndrome_o == 8'h9f) ^ data_i[25]; + data_o[26] = (syndrome_o == 8'ha1) ^ data_i[26]; + data_o[27] = (syndrome_o == 8'ha2) ^ data_i[27]; + data_o[28] = (syndrome_o == 8'ha3) ^ data_i[28]; + data_o[29] = (syndrome_o == 8'ha4) ^ data_i[29]; + data_o[30] = (syndrome_o == 8'ha5) ^ data_i[30]; + data_o[31] = (syndrome_o == 8'ha6) ^ data_i[31]; + data_o[32] = (syndrome_o == 8'ha7) ^ data_i[32]; + data_o[33] = (syndrome_o == 8'ha8) ^ data_i[33]; + data_o[34] = (syndrome_o == 8'ha9) ^ data_i[34]; + data_o[35] = (syndrome_o == 8'haa) ^ data_i[35]; + data_o[36] = (syndrome_o == 8'hab) ^ data_i[36]; + data_o[37] = (syndrome_o == 8'hac) ^ data_i[37]; + data_o[38] = (syndrome_o == 8'had) ^ data_i[38]; + data_o[39] = (syndrome_o == 8'hae) ^ data_i[39]; + data_o[40] = (syndrome_o == 8'haf) ^ data_i[40]; + data_o[41] = (syndrome_o == 8'hb0) ^ data_i[41]; + data_o[42] = (syndrome_o == 8'hb1) ^ data_i[42]; + data_o[43] = (syndrome_o == 8'hb2) ^ data_i[43]; + data_o[44] = (syndrome_o == 8'hb3) ^ data_i[44]; + data_o[45] = (syndrome_o == 8'hb4) ^ data_i[45]; + data_o[46] = (syndrome_o == 8'hb5) ^ data_i[46]; + data_o[47] = (syndrome_o == 8'hb6) ^ data_i[47]; + data_o[48] = (syndrome_o == 8'hb7) ^ data_i[48]; + data_o[49] = (syndrome_o == 8'hb8) ^ data_i[49]; + data_o[50] = (syndrome_o == 8'hb9) ^ data_i[50]; + data_o[51] = (syndrome_o == 8'hba) ^ data_i[51]; + data_o[52] = (syndrome_o == 8'hbb) ^ data_i[52]; + data_o[53] = (syndrome_o == 8'hbc) ^ data_i[53]; + data_o[54] = (syndrome_o == 8'hbd) ^ data_i[54]; + data_o[55] = (syndrome_o == 8'hbe) ^ data_i[55]; + data_o[56] = (syndrome_o == 8'hbf) ^ data_i[56]; + data_o[57] = (syndrome_o == 8'hc1) ^ data_i[57]; + data_o[58] = (syndrome_o == 8'hc2) ^ data_i[58]; + data_o[59] = (syndrome_o == 8'hc3) ^ data_i[59]; + data_o[60] = (syndrome_o == 8'hc4) ^ data_i[60]; + data_o[61] = (syndrome_o == 8'hc5) ^ data_i[61]; + data_o[62] = (syndrome_o == 8'hc6) ^ data_i[62]; + data_o[63] = (syndrome_o == 8'hc7) ^ data_i[63]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = syndrome_o[7]; + err_o[1] = |syndrome_o[6:0] & ~syndrome_o[7]; + + dec.data = data_o; + dec.syndrome = syndrome_o; + dec.err = err_o; + return dec; + + endfunction + + function automatic logic [75:0] + prim_secded_inv_hamming_76_68_enc (logic [67:0] data_i); + logic [75:0] data_o; + data_o = 76'(data_i); + data_o[68] = ^(data_o & 76'h00AAB55555556AAAD5B); + data_o[69] = ^(data_o & 76'h00CCD9999999B33366D); + data_o[70] = ^(data_o & 76'h000F1E1E1E1E3C3C78E); + data_o[71] = ^(data_o & 76'h00F01FE01FE03FC07F0); + data_o[72] = ^(data_o & 76'h00001FFFE0003FFF800); + data_o[73] = ^(data_o & 76'h00001FFFFFFFC000000); + data_o[74] = ^(data_o & 76'h00FFE00000000000000); + data_o[75] = ^(data_o & 76'h7FFFFFFFFFFFFFFFFFF); + data_o ^= 76'hAA00000000000000000; + return data_o; + endfunction + + function automatic secded_inv_hamming_76_68_t + prim_secded_inv_hamming_76_68_dec (logic [75:0] data_i); + logic [67:0] data_o; + logic [7:0] syndrome_o; + logic [1:0] err_o; + + secded_inv_hamming_76_68_t dec; + + // Syndrome calculation + syndrome_o[0] = ^((data_i ^ 76'hAA00000000000000000) & 76'h01AAB55555556AAAD5B); + syndrome_o[1] = ^((data_i ^ 76'hAA00000000000000000) & 76'h02CCD9999999B33366D); + syndrome_o[2] = ^((data_i ^ 76'hAA00000000000000000) & 76'h040F1E1E1E1E3C3C78E); + syndrome_o[3] = ^((data_i ^ 76'hAA00000000000000000) & 76'h08F01FE01FE03FC07F0); + syndrome_o[4] = ^((data_i ^ 76'hAA00000000000000000) & 76'h10001FFFE0003FFF800); + syndrome_o[5] = ^((data_i ^ 76'hAA00000000000000000) & 76'h20001FFFFFFFC000000); + syndrome_o[6] = ^((data_i ^ 76'hAA00000000000000000) & 76'h40FFE00000000000000); + syndrome_o[7] = ^((data_i ^ 76'hAA00000000000000000) & 76'hFFFFFFFFFFFFFFFFFFF); + + // Corrected output calculation + data_o[0] = (syndrome_o == 8'h83) ^ data_i[0]; + data_o[1] = (syndrome_o == 8'h85) ^ data_i[1]; + data_o[2] = (syndrome_o == 8'h86) ^ data_i[2]; + data_o[3] = (syndrome_o == 8'h87) ^ data_i[3]; + data_o[4] = (syndrome_o == 8'h89) ^ data_i[4]; + data_o[5] = (syndrome_o == 8'h8a) ^ data_i[5]; + data_o[6] = (syndrome_o == 8'h8b) ^ data_i[6]; + data_o[7] = (syndrome_o == 8'h8c) ^ data_i[7]; + data_o[8] = (syndrome_o == 8'h8d) ^ data_i[8]; + data_o[9] = (syndrome_o == 8'h8e) ^ data_i[9]; + data_o[10] = (syndrome_o == 8'h8f) ^ data_i[10]; + data_o[11] = (syndrome_o == 8'h91) ^ data_i[11]; + data_o[12] = (syndrome_o == 8'h92) ^ data_i[12]; + data_o[13] = (syndrome_o == 8'h93) ^ data_i[13]; + data_o[14] = (syndrome_o == 8'h94) ^ data_i[14]; + data_o[15] = (syndrome_o == 8'h95) ^ data_i[15]; + data_o[16] = (syndrome_o == 8'h96) ^ data_i[16]; + data_o[17] = (syndrome_o == 8'h97) ^ data_i[17]; + data_o[18] = (syndrome_o == 8'h98) ^ data_i[18]; + data_o[19] = (syndrome_o == 8'h99) ^ data_i[19]; + data_o[20] = (syndrome_o == 8'h9a) ^ data_i[20]; + data_o[21] = (syndrome_o == 8'h9b) ^ data_i[21]; + data_o[22] = (syndrome_o == 8'h9c) ^ data_i[22]; + data_o[23] = (syndrome_o == 8'h9d) ^ data_i[23]; + data_o[24] = (syndrome_o == 8'h9e) ^ data_i[24]; + data_o[25] = (syndrome_o == 8'h9f) ^ data_i[25]; + data_o[26] = (syndrome_o == 8'ha1) ^ data_i[26]; + data_o[27] = (syndrome_o == 8'ha2) ^ data_i[27]; + data_o[28] = (syndrome_o == 8'ha3) ^ data_i[28]; + data_o[29] = (syndrome_o == 8'ha4) ^ data_i[29]; + data_o[30] = (syndrome_o == 8'ha5) ^ data_i[30]; + data_o[31] = (syndrome_o == 8'ha6) ^ data_i[31]; + data_o[32] = (syndrome_o == 8'ha7) ^ data_i[32]; + data_o[33] = (syndrome_o == 8'ha8) ^ data_i[33]; + data_o[34] = (syndrome_o == 8'ha9) ^ data_i[34]; + data_o[35] = (syndrome_o == 8'haa) ^ data_i[35]; + data_o[36] = (syndrome_o == 8'hab) ^ data_i[36]; + data_o[37] = (syndrome_o == 8'hac) ^ data_i[37]; + data_o[38] = (syndrome_o == 8'had) ^ data_i[38]; + data_o[39] = (syndrome_o == 8'hae) ^ data_i[39]; + data_o[40] = (syndrome_o == 8'haf) ^ data_i[40]; + data_o[41] = (syndrome_o == 8'hb0) ^ data_i[41]; + data_o[42] = (syndrome_o == 8'hb1) ^ data_i[42]; + data_o[43] = (syndrome_o == 8'hb2) ^ data_i[43]; + data_o[44] = (syndrome_o == 8'hb3) ^ data_i[44]; + data_o[45] = (syndrome_o == 8'hb4) ^ data_i[45]; + data_o[46] = (syndrome_o == 8'hb5) ^ data_i[46]; + data_o[47] = (syndrome_o == 8'hb6) ^ data_i[47]; + data_o[48] = (syndrome_o == 8'hb7) ^ data_i[48]; + data_o[49] = (syndrome_o == 8'hb8) ^ data_i[49]; + data_o[50] = (syndrome_o == 8'hb9) ^ data_i[50]; + data_o[51] = (syndrome_o == 8'hba) ^ data_i[51]; + data_o[52] = (syndrome_o == 8'hbb) ^ data_i[52]; + data_o[53] = (syndrome_o == 8'hbc) ^ data_i[53]; + data_o[54] = (syndrome_o == 8'hbd) ^ data_i[54]; + data_o[55] = (syndrome_o == 8'hbe) ^ data_i[55]; + data_o[56] = (syndrome_o == 8'hbf) ^ data_i[56]; + data_o[57] = (syndrome_o == 8'hc1) ^ data_i[57]; + data_o[58] = (syndrome_o == 8'hc2) ^ data_i[58]; + data_o[59] = (syndrome_o == 8'hc3) ^ data_i[59]; + data_o[60] = (syndrome_o == 8'hc4) ^ data_i[60]; + data_o[61] = (syndrome_o == 8'hc5) ^ data_i[61]; + data_o[62] = (syndrome_o == 8'hc6) ^ data_i[62]; + data_o[63] = (syndrome_o == 8'hc7) ^ data_i[63]; + data_o[64] = (syndrome_o == 8'hc8) ^ data_i[64]; + data_o[65] = (syndrome_o == 8'hc9) ^ data_i[65]; + data_o[66] = (syndrome_o == 8'hca) ^ data_i[66]; + data_o[67] = (syndrome_o == 8'hcb) ^ data_i[67]; + + // err_o calc. bit0: single error, bit1: double error + err_o[0] = syndrome_o[7]; + err_o[1] = |syndrome_o[6:0] & ~syndrome_o[7]; + + dec.data = data_o; + dec.syndrome = syndrome_o; + dec.err = err_o; + return dec; + + endfunction + + +endpackage diff --git a/src/caliptra_prim/rtl/caliptra_prim_subreg.sv b/src/caliptra_prim/rtl/caliptra_prim_subreg.sv index 8bb91d955..383908db8 100644 --- a/src/caliptra_prim/rtl/caliptra_prim_subreg.sv +++ b/src/caliptra_prim/rtl/caliptra_prim_subreg.sv @@ -1,4 +1,4 @@ -// Copyright lowRISC contributors. +// Copyright lowRISC contributors (OpenTitan project). // Licensed under the Apache License, Version 2.0, see LICENSE for details. // SPDX-License-Identifier: Apache-2.0 // @@ -9,7 +9,8 @@ module caliptra_prim_subreg #( parameter int DW = 32, parameter sw_access_e SwAccess = SwAccessRW, - parameter logic [DW-1:0] RESVAL = '0 // reset value + parameter logic [DW-1:0] RESVAL = '0 , // reset value + parameter bit Mubi = 1'b0 ) ( input clk_i, input rst_ni, @@ -39,7 +40,8 @@ module caliptra_prim_subreg caliptra_prim_subreg_arb #( .DW ( DW ), - .SwAccess ( SwAccess ) + .SwAccess ( SwAccess ), + .Mubi ( Mubi ) ) wr_en_data_arb ( .we, .wd, @@ -61,6 +63,13 @@ module caliptra_prim_subreg // feed back out for consolidation assign ds = wr_en ? wr_data : qs; assign qe = wr_en; - assign qs = q; + + if (SwAccess == SwAccessRC) begin : gen_rc + // In case of a SW RC colliding with a HW write, SW gets the value written by HW + // but the register is cleared to 0. See #5416 for a discussion. + assign qs = de && we ? d : q; + end else begin : gen_no_rc + assign qs = q; + end endmodule diff --git a/src/caliptra_prim/rtl/caliptra_prim_subreg_arb.sv b/src/caliptra_prim/rtl/caliptra_prim_subreg_arb.sv index d660a5465..457a0a276 100644 --- a/src/caliptra_prim/rtl/caliptra_prim_subreg_arb.sv +++ b/src/caliptra_prim/rtl/caliptra_prim_subreg_arb.sv @@ -1,4 +1,4 @@ -// Copyright lowRISC contributors. +// Copyright lowRISC contributors (OpenTitan project). // Licensed under the Apache License, Version 2.0, see LICENSE for details. // SPDX-License-Identifier: Apache-2.0 // @@ -8,7 +8,8 @@ module caliptra_prim_subreg_arb import caliptra_prim_subreg_pkg::*; #( parameter int DW = 32, - parameter sw_access_e SwAccess = SwAccessRW + parameter sw_access_e SwAccess = SwAccessRW, + parameter bit Mubi = 1'b0 ) ( // From SW: valid for RW, WO, W1C, W1S, W0C, RC. // In case of RC, top connects read pulse to we. @@ -26,13 +27,18 @@ module caliptra_prim_subreg_arb output logic wr_en, output logic [DW-1:0] wr_data ); + import caliptra_prim_mubi_pkg::*; if (SwAccess inside {SwAccessRW, SwAccessWO}) begin : gen_w assign wr_en = we | de; assign wr_data = (we == 1'b1) ? wd : d; // SW higher priority // Unused q - Prevent lint errors. logic [DW-1:0] unused_q; + //VCS coverage off + // pragma coverage off assign unused_q = q; + //VCS coverage on + // pragma coverage on end else if (SwAccess == SwAccessRO) begin : gen_ro assign wr_en = de; assign wr_data = d; @@ -40,32 +46,128 @@ module caliptra_prim_subreg_arb logic unused_we; logic [DW-1:0] unused_wd; logic [DW-1:0] unused_q; + //VCS coverage off + // pragma coverage off assign unused_we = we; assign unused_wd = wd; assign unused_q = q; + //VCS coverage on + // pragma coverage on end else if (SwAccess == SwAccessW1S) begin : gen_w1s // If SwAccess is W1S, then assume hw tries to clear. // So, give a chance HW to clear when SW tries to set. // If both try to set/clr at the same bit pos, SW wins. assign wr_en = we | de; - assign wr_data = (de ? d : q) | (we ? wd : '0); + if (Mubi) begin : gen_mubi + if (DW == 4) begin : gen_mubi4 + assign wr_data = caliptra_prim_mubi_pkg::mubi4_or_hi(caliptra_prim_mubi_pkg::mubi4_t'(de ? d : q), + (we ? caliptra_prim_mubi_pkg::mubi4_t'(wd) : + caliptra_prim_mubi_pkg::MuBi4False)); + end else if (DW == 8) begin : gen_mubi8 + assign wr_data = caliptra_prim_mubi_pkg::mubi8_or_hi(caliptra_prim_mubi_pkg::mubi8_t'(de ? d : q), + (we ? caliptra_prim_mubi_pkg::mubi8_t'(wd) : + caliptra_prim_mubi_pkg::MuBi8False)); + end else if (DW == 12) begin : gen_mubi12 + assign wr_data = caliptra_prim_mubi_pkg::mubi12_or_hi(caliptra_prim_mubi_pkg::mubi12_t'(de ? d : q), + (we ? caliptra_prim_mubi_pkg::mubi12_t'(wd) : + caliptra_prim_mubi_pkg::MuBi12False)); + end else if (DW == 16) begin : gen_mubi16 + assign wr_data = caliptra_prim_mubi_pkg::mubi16_or_hi(caliptra_prim_mubi_pkg::mubi16_t'(de ? d : q), + (we ? caliptra_prim_mubi_pkg::mubi16_t'(wd) : + caliptra_prim_mubi_pkg::MuBi16False)); + end else begin : gen_invalid_mubi + $error("%m: Invalid width for MuBi"); + end + end else begin : gen_non_mubi + assign wr_data = (de ? d : q) | (we ? wd : '0); + end end else if (SwAccess == SwAccessW1C) begin : gen_w1c // If SwAccess is W1C, then assume hw tries to set. // So, give a chance HW to set when SW tries to clear. // If both try to set/clr at the same bit pos, SW wins. assign wr_en = we | de; - assign wr_data = (de ? d : q) & (we ? ~wd : '1); + if (Mubi) begin : gen_mubi + if (DW == 4) begin : gen_mubi4 + assign wr_data = caliptra_prim_mubi_pkg::mubi4_and_hi(caliptra_prim_mubi_pkg::mubi4_t'(de ? d : q), + (we ? caliptra_prim_mubi_pkg::mubi4_t'(~wd) : + caliptra_prim_mubi_pkg::MuBi4True)); + end else if (DW == 8) begin : gen_mubi8 + assign wr_data = caliptra_prim_mubi_pkg::mubi8_and_hi(caliptra_prim_mubi_pkg::mubi8_t'(de ? d : q), + (we ? caliptra_prim_mubi_pkg::mubi8_t'(~wd) : + caliptra_prim_mubi_pkg::MuBi8True)); + end else if (DW == 12) begin : gen_mubi12 + assign wr_data = caliptra_prim_mubi_pkg::mubi12_and_hi(caliptra_prim_mubi_pkg::mubi12_t'(de ? d : q), + (we ? caliptra_prim_mubi_pkg::mubi12_t'(~wd) : + caliptra_prim_mubi_pkg::MuBi12True)); + end else if (DW == 16) begin : gen_mubi16 + assign wr_data = caliptra_prim_mubi_pkg::mubi16_and_hi(caliptra_prim_mubi_pkg::mubi16_t'(de ? d : q), + (we ? caliptra_prim_mubi_pkg::mubi16_t'(~wd) : + caliptra_prim_mubi_pkg::MuBi16True)); + end else begin : gen_invalid_mubi + $error("%m: Invalid width for MuBi"); + end + end else begin : gen_non_mubi + assign wr_data = (de ? d : q) & (we ? ~wd : '1); + end end else if (SwAccess == SwAccessW0C) begin : gen_w0c assign wr_en = we | de; - assign wr_data = (de ? d : q) & (we ? wd : '1); + if (Mubi) begin : gen_mubi + if (DW == 4) begin : gen_mubi4 + assign wr_data = caliptra_prim_mubi_pkg::mubi4_and_hi(caliptra_prim_mubi_pkg::mubi4_t'(de ? d : q), + (we ? caliptra_prim_mubi_pkg::mubi4_t'(wd) : + caliptra_prim_mubi_pkg::MuBi4True)); + end else if (DW == 8) begin : gen_mubi8 + assign wr_data = caliptra_prim_mubi_pkg::mubi8_and_hi(caliptra_prim_mubi_pkg::mubi8_t'(de ? d : q), + (we ? caliptra_prim_mubi_pkg::mubi8_t'(wd) : + caliptra_prim_mubi_pkg::MuBi8True)); + end else if (DW == 12) begin : gen_mubi12 + assign wr_data = caliptra_prim_mubi_pkg::mubi12_and_hi(caliptra_prim_mubi_pkg::mubi12_t'(de ? d : q), + (we ? caliptra_prim_mubi_pkg::mubi12_t'(wd) : + caliptra_prim_mubi_pkg::MuBi12True)); + end else if (DW == 16) begin : gen_mubi16 + assign wr_data = caliptra_prim_mubi_pkg::mubi16_and_hi(caliptra_prim_mubi_pkg::mubi16_t'(de ? d : q), + (we ? caliptra_prim_mubi_pkg::mubi16_t'(wd) : + caliptra_prim_mubi_pkg::MuBi16True)); + end else begin : gen_invalid_mubi + $error("%m: Invalid width for MuBi"); + end + end else begin : gen_non_mubi + assign wr_data = (de ? d : q) & (we ? wd : '1); + end end else if (SwAccess == SwAccessRC) begin : gen_rc // This swtype is not recommended but exists for compatibility. // WARN: we signal is actually read signal not write enable. assign wr_en = we | de; - assign wr_data = (de ? d : q) & (we ? '0 : '1); + if (Mubi) begin : gen_mubi + if (DW == 4) begin : gen_mubi4 + assign wr_data = caliptra_prim_mubi_pkg::mubi4_and_hi(caliptra_prim_mubi_pkg::mubi4_t'(de ? d : q), + (we ? caliptra_prim_mubi_pkg::MuBi4False : + caliptra_prim_mubi_pkg::MuBi4True)); + end else if (DW == 8) begin : gen_mubi8 + assign wr_data = caliptra_prim_mubi_pkg::mubi8_and_hi(caliptra_prim_mubi_pkg::mubi8_t'(de ? d : q), + (we ? caliptra_prim_mubi_pkg::MuBi8False : + caliptra_prim_mubi_pkg::MuBi8True)); + end else if (DW == 12) begin : gen_mubi12 + assign wr_data = caliptra_prim_mubi_pkg::mubi12_and_hi(caliptra_prim_mubi_pkg::mubi12_t'(de ? d : q), + (we ? caliptra_prim_mubi_pkg::MuBi12False : + caliptra_prim_mubi_pkg::MuBi12True)); + end else if (DW == 16) begin : gen_mubi16 + assign wr_data = caliptra_prim_mubi_pkg::mubi16_and_hi(caliptra_prim_mubi_pkg::mubi16_t'(de ? d : q), + (we ? caliptra_prim_mubi_pkg::mubi16_t'(wd) : + caliptra_prim_mubi_pkg::MuBi16True)); + end else begin : gen_invalid_mubi + $error("%m: Invalid width for MuBi"); + end + end else begin : gen_non_mubi + assign wr_data = (de ? d : q) & (we ? '0 : '1); + end // Unused wd - Prevent lint errors. logic [DW-1:0] unused_wd; + //VCS coverage off + // pragma coverage off assign unused_wd = wd; + //VCS coverage on + // pragma coverage on end else begin : gen_hw assign wr_en = de; assign wr_data = d; @@ -73,9 +175,13 @@ module caliptra_prim_subreg_arb logic unused_we; logic [DW-1:0] unused_wd; logic [DW-1:0] unused_q; + //VCS coverage off + // pragma coverage off assign unused_we = we; assign unused_wd = wd; assign unused_q = q; + //VCS coverage on + // pragma coverage on end endmodule diff --git a/src/caliptra_prim/rtl/caliptra_prim_sync_reqack.sv b/src/caliptra_prim/rtl/caliptra_prim_sync_reqack.sv new file mode 100644 index 000000000..d5958d68d --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_sync_reqack.sv @@ -0,0 +1,404 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// REQ/ACK synchronizer +// +// This module synchronizes a REQ/ACK handshake across a clock domain crossing. +// Both domains will see a handshake with the duration of one clock cycle. +// +// Notes: +// - Once asserted, the source (SRC) domain is not allowed to de-assert REQ without ACK. +// - The destination (DST) domain is not allowed to send an ACK without a REQ. +// - When resetting one domain, also the other domain needs to be reset with both resets being +// active at the same time. +// - This module works both when syncing from a faster to a slower clock domain and vice versa. +// - Internally, this module uses a non-return-to-zero (NRZ), two-phase handshake protocol by +// default. Assuming the DST domain responds with an ACK immediately, the latency from asserting +// the REQ in the SRC domain is: +// - 1 source + 2 destination clock cycles until the handshake is performed in the DST domain, +// - 1 source + 2 destination + 1 destination + 2 source clock cycles until the handshake is +// performed in the SRC domain. +// - Optionally, the module can also use a return-to-zero (RZ), four-phase handshake protocol. +// That one has lower throughput, but it is safe to reset either domain in isolation, since the +// two FSMs cannot get out of sync due to persistent EVEN/ODD states. The handshake latencies +// are the same as for the NRZ protocol, but the throughput is half that of the NRZ protocol +// since the signals neet to return to zero first, causing two round-trips through the +// synchronizers instead of just one. +// +// For further information, see Section 8.2.4 in H. Kaeslin, "Top-Down Digital VLSI Design: From +// Architecture to Gate-Level Circuits and FPGAs", 2015. + +`include "caliptra_prim_assert.sv" + +module caliptra_prim_sync_reqack #( + parameter bit EnRstChks = 1'b0, // Enable reset-related assertion checks, disabled by default. + parameter bit EnRzHs = 1'b0 // By Default, the faster NRZ handshake protocol + // (EnRzHs = 0) is used. Enable the RZ handshake protocol + // if the FSMs need to be partial-reset-safe. +) ( + input clk_src_i, // REQ side, SRC domain + input rst_src_ni, // REQ side, SRC domain + input clk_dst_i, // ACK side, DST domain + input rst_dst_ni, // ACK side, DST domain + + input logic req_chk_i, // Used for gating assertions. Drive to 1 during normal operation. + + input logic src_req_i, // REQ side, SRC domain + output logic src_ack_o, // REQ side, SRC domain + output logic dst_req_o, // ACK side, DST domain + input logic dst_ack_i // ACK side, DST domain +); + + // req_chk_i is used for gating assertions only. + logic unused_req_chk; + assign unused_req_chk = req_chk_i; + + if (EnRzHs) begin : gen_rz_hs_protocol + ////////////////// + // RZ protocol // + ////////////////// + + // Types + typedef enum logic { + LoSt, HiSt + } rz_fsm_e; + + // Signals + rz_fsm_e src_fsm_d, src_fsm_q; + rz_fsm_e dst_fsm_d, dst_fsm_q; + logic src_ack, dst_ack; + logic src_req, dst_req; + + // REQ-side FSM (SRC domain) + always_comb begin : src_fsm + src_fsm_d = src_fsm_q; + src_ack_o = 1'b0; + src_req = 1'b0; + + unique case (src_fsm_q) + LoSt: begin + // Wait for the ack to go back to zero before starting + // a new transaction. + if (!src_ack && src_req_i) begin + src_fsm_d = HiSt; + end + end + HiSt: begin + src_req = 1'b1; + // Forward the acknowledgement. + src_ack_o = src_ack; + // If request drops out, we go back to LoSt. + // If DST side asserts ack, we also go back to LoSt. + if (!src_req_i || src_ack) begin + src_fsm_d = LoSt; + end + end + //VCS coverage off + // pragma coverage off + default: ; + //VCS coverage on + // pragma coverage on + endcase + end + + // Move ACK over to SRC domain. + caliptra_prim_flop_2sync #( + .Width(1) + ) ack_sync ( + .clk_i (clk_src_i), + .rst_ni (rst_src_ni), + .d_i (dst_ack), + .q_o (src_ack) + ); + + // Registers + always_ff @(posedge clk_src_i or negedge rst_src_ni) begin + if (!rst_src_ni) begin + src_fsm_q <= LoSt; + end else begin + src_fsm_q <= src_fsm_d; + end + end + + // ACK-side FSM (DST domain) + always_comb begin : dst_fsm + dst_fsm_d = dst_fsm_q; + dst_req_o = 1'b0; + dst_ack = 1'b0; + + unique case (dst_fsm_q) + LoSt: begin + if (dst_req) begin + // Forward the request. + dst_req_o = 1'b1; + // Wait for the request and acknowledge to be asserted + // before responding to the SRC side. + if (dst_ack_i) begin + dst_fsm_d = HiSt; + end + end + end + HiSt: begin + dst_ack = 1'b1; + // Wait for the request to drop back to zero. + if (!dst_req) begin + dst_fsm_d = LoSt; + end + end + //VCS coverage off + // pragma coverage off + default: ; + //VCS coverage on + // pragma coverage on + endcase + end + + // Move REQ over to DST domain. + caliptra_prim_flop_2sync #( + .Width(1) + ) req_sync ( + .clk_i (clk_dst_i), + .rst_ni (rst_dst_ni), + .d_i (src_req), + .q_o (dst_req) + ); + + // Registers + always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin + if (!rst_dst_ni) begin + dst_fsm_q <= LoSt; + end else begin + dst_fsm_q <= dst_fsm_d; + end + end + + end else begin : gen_nrz_hs_protocol + ////////////////// + // NRZ protocol // + ////////////////// + + // Types + typedef enum logic { + EVEN, ODD + } sync_reqack_fsm_e; + + // Signals + sync_reqack_fsm_e src_fsm_ns, src_fsm_cs; + sync_reqack_fsm_e dst_fsm_ns, dst_fsm_cs; + + logic src_req_d, src_req_q, src_ack; + logic dst_ack_d, dst_ack_q, dst_req; + logic src_handshake, dst_handshake; + + assign src_handshake = src_req_i & src_ack_o; + assign dst_handshake = dst_req_o & dst_ack_i; + + // Move REQ over to DST domain. + caliptra_prim_flop_2sync #( + .Width(1) + ) req_sync ( + .clk_i (clk_dst_i), + .rst_ni (rst_dst_ni), + .d_i (src_req_q), + .q_o (dst_req) + ); + + // Move ACK over to SRC domain. + caliptra_prim_flop_2sync #( + .Width(1) + ) ack_sync ( + .clk_i (clk_src_i), + .rst_ni (rst_src_ni), + .d_i (dst_ack_q), + .q_o (src_ack) + ); + + // REQ-side FSM (SRC domain) + always_comb begin : src_fsm + src_fsm_ns = src_fsm_cs; + + // By default, we keep the internal REQ value and don't ACK. + src_req_d = src_req_q; + src_ack_o = 1'b0; + + unique case (src_fsm_cs) + + EVEN: begin + // Simply forward REQ and ACK. + src_req_d = src_req_i; + src_ack_o = src_ack; + + // The handshake is done for exactly 1 clock cycle. + if (src_handshake) begin + src_fsm_ns = ODD; + end + end + + ODD: begin + // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this + // signals a new transaction. + src_req_d = ~src_req_i; + src_ack_o = ~src_ack; + + // The handshake is done for exactly 1 clock cycle. + if (src_handshake) begin + src_fsm_ns = EVEN; + end + end + + //VCS coverage off + // pragma coverage off + + default: ; + + //VCS coverage on + // pragma coverage on + + endcase + end + + // ACK-side FSM (DST domain) + always_comb begin : dst_fsm + dst_fsm_ns = dst_fsm_cs; + + // By default, we don't REQ and keep the internal ACK. + dst_req_o = 1'b0; + dst_ack_d = dst_ack_q; + + unique case (dst_fsm_cs) + + EVEN: begin + // Simply forward REQ and ACK. + dst_req_o = dst_req; + dst_ack_d = dst_ack_i; + + // The handshake is done for exactly 1 clock cycle. + if (dst_handshake) begin + dst_fsm_ns = ODD; + end + end + + ODD: begin + // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new + // transaction. + dst_req_o = ~dst_req; + dst_ack_d = ~dst_ack_i; + + // The handshake is done for exactly 1 clock cycle. + if (dst_handshake) begin + dst_fsm_ns = EVEN; + end + end + + //VCS coverage off + // pragma coverage off + + default: ; + + //VCS coverage on + // pragma coverage on + + endcase + end + + // Registers + always_ff @(posedge clk_src_i or negedge rst_src_ni) begin + if (!rst_src_ni) begin + src_fsm_cs <= EVEN; + src_req_q <= 1'b0; + end else begin + src_fsm_cs <= src_fsm_ns; + src_req_q <= src_req_d; + end + end + always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin + if (!rst_dst_ni) begin + dst_fsm_cs <= EVEN; + dst_ack_q <= 1'b0; + end else begin + dst_fsm_cs <= dst_fsm_ns; + dst_ack_q <= dst_ack_d; + end + end + end + + //////////////// + // Assertions // + //////////////// + + `ifdef CALIPTRA_INC_ASSERT + //VCS coverage off + // pragma coverage off + + logic effective_rst_n; + assign effective_rst_n = rst_src_ni && rst_dst_ni; + + logic chk_flag; + always_ff @(posedge clk_src_i or negedge effective_rst_n) begin + if (!effective_rst_n) begin + chk_flag <= '0; + end else if (src_req_i && !chk_flag) begin + chk_flag <= 1'b1; + end + end + //VCS coverage on + // pragma coverage on + + // SRC domain can only de-assert REQ after receiving ACK. + `CALIPTRA_ASSERT(SyncReqAckHoldReq, $fell(src_req_i) && req_chk_i && chk_flag |-> + $fell(src_ack_o), clk_src_i, !rst_src_ni || !rst_dst_ni || !req_chk_i || !chk_flag) + `endif + + // DST domain cannot assert ACK without REQ. + `CALIPTRA_ASSERT(SyncReqAckAckNeedsReq, dst_ack_i |-> + dst_req_o, clk_dst_i, !rst_src_ni || !rst_dst_ni) + + if (EnRstChks) begin : gen_assert_en_rst_chks + `ifdef CALIPTRA_INC_ASSERT + + //VCS coverage off + // pragma coverage off + // This assertion is written very oddly because it is difficult to reliably catch + // when rst drops. + // The problem is that reset assertion in the design is often associated with clocks + // stopping, this means things like rise / fell don't work correctly since there are + // no clocks. + // As a result of this, we end up detecting way past the interest point (whenever + // clocks are restored) and falsely assert an error. + // The code below instead tries to use asynchronous flags to determine when and if + // the two domains are properly reset. + logic src_reset_flag; + always_ff @(posedge clk_src_i or negedge rst_src_ni) begin + if (!rst_src_ni) begin + src_reset_flag <= '0; + end else if(src_req_i) begin + src_reset_flag <= 1'b1; + end + end + + logic dst_reset_flag; + always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin + if (!rst_dst_ni) begin + dst_reset_flag <= '0; + end else if (dst_req_o) begin + dst_reset_flag <= 1'b1; + end + end + //VCS coverage on + // pragma coverage on + + // Always reset both domains. Both resets need to be active at the same time. + `CALIPTRA_ASSERT(SyncReqAckRstSrc, $fell(rst_src_ni) |-> + (!src_reset_flag throughout !dst_reset_flag[->1]), + clk_src_i, 0) + `CALIPTRA_ASSERT(SyncReqAckRstDst, $fell(rst_dst_ni) |-> + (!dst_reset_flag throughout !src_reset_flag[->1]), + clk_dst_i, 0) + + `endif + + + end + +endmodule diff --git a/src/caliptra_prim/rtl/caliptra_prim_sync_reqack_data.sv b/src/caliptra_prim/rtl/caliptra_prim_sync_reqack_data.sv new file mode 100644 index 000000000..dc0a3f0b9 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_sync_reqack_data.sv @@ -0,0 +1,178 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// REQ/ACK synchronizer with associated data. +// +// This module synchronizes a REQ/ACK handshake with associated data across a clock domain +// crossing (CDC). Both domains will see a handshake with the duration of one clock cycle. By +// default, the data itself is not registered. The main purpose of feeding the data through this +// module to have an anchor point for waiving CDC violations. If the data is configured to flow +// from the destination (DST) to the source (SRC) domain, an additional register stage can be +// inserted for data buffering. +// +// Under the hood, this module uses a prim_sync_reqack primitive for synchronizing the +// REQ/ACK handshake. See prim_sync_reqack.sv for more details. + +`include "caliptra_prim_assert.sv" + +module caliptra_prim_sync_reqack_data #( + parameter int unsigned Width = 1, + parameter bit EnRstChks = 1'b0, // Enable reset-related assertion checks, disabled by + // default. + parameter bit DataSrc2Dst = 1'b1, // Direction of data flow: 1'b1 = SRC to DST, + // 1'b0 = DST to SRC + parameter bit DataReg = 1'b0, // Enable optional register stage for data, + // only usable with DataSrc2Dst == 1'b0. + parameter bit EnRzHs = 1'b0 // By Default, we the faster NRZ handshake protocol + // (EnRzHs = 0) is used. Enable the RZ handshake + // protocol if the FSMs need to be partial-reset-safe. +) ( + input clk_src_i, // REQ side, SRC domain + input rst_src_ni, // REQ side, SRC domain + input clk_dst_i, // ACK side, DST domain + input rst_dst_ni, // ACK side, DST domain + + input logic req_chk_i, // Used for gating assertions. Drive to 1 during normal operation. + + input logic src_req_i, // REQ side, SRC domain + output logic src_ack_o, // REQ side, SRC domain + output logic dst_req_o, // ACK side, DST domain + input logic dst_ack_i, // ACK side, DST domain + + input logic [Width-1:0] data_i, + output logic [Width-1:0] data_o +); + + //////////////////////////////////// + // REQ/ACK synchronizer primitive // + //////////////////////////////////// + caliptra_prim_sync_reqack #( + .EnRstChks(EnRstChks), + .EnRzHs(EnRzHs) + ) u_prim_sync_reqack ( + .clk_src_i, + .rst_src_ni, + .clk_dst_i, + .rst_dst_ni, + + .req_chk_i, + + .src_req_i, + .src_ack_o, + .dst_req_o, + .dst_ack_i + ); + + ///////////////////////// + // Data register stage // + ///////////////////////// + // Optional - Only relevant if the data flows from DST to SRC. In this case, it must be ensured + // that the data remains stable until the ACK becomes visible in the SRC domain. + // + // Note that for larger data widths, it is recommended to adjust the data sender to hold the data + // stable until the next REQ in order to save the cost of this register stage. + if (DataSrc2Dst == 1'b0 && DataReg == 1'b1) begin : gen_data_reg + logic data_we; + logic [Width-1:0] data_d, data_q; + + // Sample the data when seing the REQ/ACK handshake in the DST domain. + assign data_we = dst_req_o & dst_ack_i; + assign data_d = data_i; + always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin + if (!rst_dst_ni) begin + data_q <= '0; + end else if (data_we) begin + data_q <= data_d; + end + end + assign data_o = data_q; + + end else begin : gen_no_data_reg + // Just feed through the data. + assign data_o = data_i; + end + + //////////////// + // Assertions // + //////////////// + if (DataSrc2Dst == 1'b1) begin : gen_assert_data_src2dst +`ifdef CALIPTRA_INC_ASSERT + //VCS coverage off + // pragma coverage off + logic effective_rst_n; + assign effective_rst_n = rst_src_ni && rst_dst_ni; + + logic chk_flag_d, chk_flag_q; + assign chk_flag_d = src_req_i && !chk_flag_q ? 1'b1 : chk_flag_q; + + always_ff @(posedge clk_src_i or negedge effective_rst_n) begin + if (!effective_rst_n) begin + chk_flag_q <= '0; + end else begin + chk_flag_q <= chk_flag_d; + end + end + //VCS coverage on + // pragma coverage on + + // SRC domain cannot change data while waiting for ACK. + `CALIPTRA_ASSERT(SyncReqAckDataHoldSrc2Dst, !$stable(data_i) && chk_flag_q |-> + (!src_req_i || (src_req_i && src_ack_o)), + clk_src_i, !rst_src_ni || !rst_dst_ni || !chk_flag_q) + + // Register stage cannot be used. + `CALIPTRA_ASSERT_INIT(SyncReqAckDataReg, DataSrc2Dst && !DataReg) +`endif + end else if (DataSrc2Dst == 1'b0 && DataReg == 1'b0) begin : gen_assert_data_dst2src + // DST domain shall not change data while waiting for SRC domain to latch it (together with + // receiving ACK). It takes 2 SRC cycles for ACK to cross over from DST to SRC, and 1 SRC cycle + // for the next REQ to cross over from SRC to DST. + // + // Denote the src clock where REQ & ACK as time zero. The data flowing through the CDC could be + // corrupted if data_o was not stable over the previous 2 clock cycles (so we want to check time + // points -2, -1 and 0). Moreover, the DST domain cannot know that it is allowed to change value + // until at least one more SRC cycle (the time taken for REQ to cross back from SRC to DST). + // + // To make this assertion, we will sample at each of 4 time points (-2, -1, 0 and +1), asserting + // that data_o is equal at each of these times. Note this won't detect glitches at intermediate + // timepoints. + // + // The SVAs below are designed not to consume time, which means that they can be disabled with + // an $assertoff(..) and won't linger to fail later. This wouldn't work properly if we used + // something like |=> instead of the $past(...) function. That means that we have to trigger at + // the "end" of the window. To make sure we don't miss a situation where the value changed at + // time -1 (causing corruption), but reset was asserted between time 0 and 1, we split the + // assertion into two pieces. The first (SyncReqAckDataHoldDst2SrcA) checks that data doesn't + // change in a way that could cause data corruption. The second (SyncReqAckDataHoldDst2SrcB) + // checks that the DST side doesn't do anything that it shouldn't know is safe. +`ifdef CALIPTRA_INC_ASSERT + //VCS coverage off + // pragma coverage off + logic effective_rst_n; + assign effective_rst_n = rst_src_ni && rst_dst_ni; + + logic chk_flag_d, chk_flag_q; + assign chk_flag_d = src_req_i && !chk_flag_q ? 1'b1 : chk_flag_q; + + always_ff @(posedge clk_src_i or negedge effective_rst_n) begin + if (!effective_rst_n) begin + chk_flag_q <= '0; + end else begin + chk_flag_q <= chk_flag_d; + end + end + //VCS coverage on + // pragma coverage on + + `CALIPTRA_ASSERT(SyncReqAckDataHoldDst2SrcA, + chk_flag_q && src_req_i && src_ack_o |-> + $past(data_o, 2) == data_o && $past(data_o) == data_o, + clk_src_i, !rst_src_ni || !rst_dst_ni || !chk_flag_q) + `CALIPTRA_ASSERT(SyncReqAckDataHoldDst2SrcB, + chk_flag_q && $past(src_req_i && src_ack_o) |-> $past(data_o) == data_o, + clk_src_i, !rst_src_ni || !rst_dst_ni || !chk_flag_q) +`endif + end + +endmodule diff --git a/src/caliptra_prim/rtl/caliptra_prim_util_memload.svh b/src/caliptra_prim/rtl/caliptra_prim_util_memload.svh new file mode 100644 index 000000000..81600a8de --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_util_memload.svh @@ -0,0 +1,68 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +/** + * Memory loader for simulation + * + * Include this file in a memory primitive to load a memory array from + * simulation. + * + * Requirements: + * - A memory array named `mem`. + * - A parameter `Width` giving the memory width (word size) in bit. + * - A parameter `Depth` giving the memory depth in words. + * - A parameter `MemInitFile` with a file path of a VMEM file to be loaded into + * the memory if not empty. + * + * Note this works with memories up to a maximum width of 312 bits. Should this maximum width be + * increased all of the `simutil_set_mem` and `simutil_get_mem` call sites must be found (e.g. using + * git grep) and adjusted appropriately. + */ + +`ifndef SYNTHESIS + // Task for loading 'mem' with SystemVerilog system task $readmemh() + export "DPI-C" task simutil_memload; + + task simutil_memload; + input string file; + $readmemh(file, mem); + endtask + + // Function for setting a specific element in |mem| + // Returns 1 (true) for success, 0 (false) for errors. + export "DPI-C" function simutil_set_mem; + + function int simutil_set_mem(input int index, input bit [311:0] val); + int valid; + valid = Width > 312 || index >= Depth ? 0 : 1; + if (valid == 1) mem[index] = val[Width-1:0]; + return valid; + endfunction + + // Function for getting a specific element in |mem| + export "DPI-C" function simutil_get_mem; + + function int simutil_get_mem(input int index, output bit [311:0] val); + int valid; + valid = Width > 312 || index >= Depth ? 0 : 1; + if (valid == 1) begin + val = 0; + val[Width-1:0] = mem[index]; + end + return valid; + endfunction +`endif + +initial begin + logic show_mem_paths; + + // Print the hierarchical path to the memory to help make formal connectivity checks easy. + void'($value$plusargs("show_mem_paths=%0b", show_mem_paths)); + if (show_mem_paths) $display("%m"); + + if (MemInitFile != "") begin : gen_meminit + $display("Initializing memory %m from file '%s'.", MemInitFile); + $readmemh(MemInitFile, mem); + end +end diff --git a/src/caliptra_prim_generic/config/compile.yml b/src/caliptra_prim_generic/config/compile.yml index f18389093..159a21d22 100644 --- a/src/caliptra_prim_generic/config/compile.yml +++ b/src/caliptra_prim_generic/config/compile.yml @@ -1,6 +1,8 @@ --- provides: [caliptra_prim_generic] schema_version: 2.4.0 +requires: + - caliptra_prim_pkg targets: rtl: directories: [$COMPILE_ROOT/rtl] @@ -8,3 +10,6 @@ targets: - $COMPILE_ROOT/rtl/caliptra_prim_generic_flop_en.sv - $COMPILE_ROOT/rtl/caliptra_prim_generic_flop.sv - $COMPILE_ROOT/rtl/caliptra_prim_generic_buf.sv + - $COMPILE_ROOT/rtl/caliptra_prim_generic_otp.sv + - $COMPILE_ROOT/rtl/caliptra_prim_generic_ram_1p.sv + - $COMPILE_ROOT/rtl/caliptra_prim_generic_and2.sv diff --git a/src/caliptra_prim_generic/rtl/caliptra_prim_generic_and2.sv b/src/caliptra_prim_generic/rtl/caliptra_prim_generic_and2.sv new file mode 100644 index 000000000..a692e7d1a --- /dev/null +++ b/src/caliptra_prim_generic/rtl/caliptra_prim_generic_and2.sv @@ -0,0 +1,17 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +`include "caliptra_prim_assert.sv" + +module caliptra_prim_generic_and2 #( + parameter int Width = 1 +) ( + input [Width-1:0] in0_i, + input [Width-1:0] in1_i, + output logic [Width-1:0] out_o +); + + assign out_o = in0_i & in1_i; + +endmodule diff --git a/src/caliptra_prim_generic/rtl/caliptra_prim_generic_otp.sv b/src/caliptra_prim_generic/rtl/caliptra_prim_generic_otp.sv new file mode 100644 index 000000000..6001ca1a9 --- /dev/null +++ b/src/caliptra_prim_generic/rtl/caliptra_prim_generic_otp.sv @@ -0,0 +1,435 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +module caliptra_prim_generic_otp + import caliptra_prim_otp_pkg::*; +#( + // Native OTP word size. This determines the size_i granule. + parameter int Width = 16, + parameter int Depth = 1024, + // This determines the maximum number of native words that + // can be transferred accross the interface in one cycle. + parameter int SizeWidth = 2, + // Width of the power sequencing signal. + parameter int PwrSeqWidth = 2, + // Width of vendor-specific test control signal + parameter int TestCtrlWidth = 32, + parameter int TestStatusWidth = 32, + parameter int TestVectWidth = 8, + // Derived parameters + localparam int AddrWidth = caliptra_prim_util_pkg::vbits(Depth), + localparam int IfWidth = 2**SizeWidth*Width, + // VMEM file to initialize the memory with + parameter MemInitFile = "", + // Vendor test partition offset and size (both in bytes) + parameter int VendorTestOffset = 0, + parameter int VendorTestSize = 0 +) ( + input clk_i, + input rst_ni, + // Observability + input ast_pkg::ast_obs_ctrl_t obs_ctrl_i, + output logic [7:0] otp_obs_o, + // Macro-specific power sequencing signals to/from AST + output logic [PwrSeqWidth-1:0] pwr_seq_o, + input [PwrSeqWidth-1:0] pwr_seq_h_i, + // External programming voltage + inout wire ext_voltage_io, + // Test interfaces + input [TestCtrlWidth-1:0] test_ctrl_i, + output logic [TestStatusWidth-1:0] test_status_o, + output logic [TestVectWidth-1:0] test_vect_o, + input tlul_pkg::tl_h2d_t test_tl_i, + output tlul_pkg::tl_d2h_t test_tl_o, + // Other DFT signals + input caliptra_prim_mubi_pkg::mubi4_t scanmode_i, // Scan Mode input + input scan_en_i, // Scan Shift + input scan_rst_ni, // Scan Reset + // Alert indication (to be connected to alert sender in the instantiating IP) + output logic fatal_alert_o, + output logic recov_alert_o, + // Ready valid handshake for read/write command + output logic ready_o, + input valid_i, + // #(Native words)-1, e.g. size == 0 for 1 native word. + input [SizeWidth-1:0] size_i, + // See prim_otp_pkg for the command encoding. + input cmd_e cmd_i, + input [AddrWidth-1:0] addr_i, + input [IfWidth-1:0] wdata_i, + // Response channel + output logic valid_o, + output logic [IfWidth-1:0] rdata_o, + output err_e err_o +); + + import caliptra_prim_mubi_pkg::MuBi4False; + + // This is only restricted by the supported ECC poly further + // below, and is straightforward to extend, if needed. + localparam int EccWidth = 6; + `CALIPTRA_ASSERT_INIT(SecDecWidth_A, Width == 16) + + // Not supported in open-source emulation model. + logic [PwrSeqWidth-1:0] unused_pwr_seq_h; + assign unused_pwr_seq_h = pwr_seq_h_i; + assign pwr_seq_o = '0; + + logic unused_obs; + assign unused_obs = |obs_ctrl_i; + assign otp_obs_o = '0; + + wire unused_ext_voltage; + assign unused_ext_voltage = ext_voltage_io; + logic unused_test_ctrl_i; + assign unused_test_ctrl_i = ^test_ctrl_i; + + logic unused_scan; + assign unused_scan = ^{scanmode_i, scan_en_i, scan_rst_ni}; + + logic intg_err, fsm_err; + assign fatal_alert_o = intg_err || fsm_err; + assign recov_alert_o = 1'b0; + + assign test_vect_o = '0; + assign test_status_o = '0; + + //////////////////////////////////// + // TL-UL Test Interface Emulation // + //////////////////////////////////// + + caliptra_otp_ctrl_reg_pkg::caliptra_otp_ctrl_prim_reg2hw_t reg2hw; + caliptra_otp_ctrl_reg_pkg::caliptra_otp_ctrl_prim_hw2reg_t hw2reg; + caliptra_otp_ctrl_prim_reg_top u_reg_top ( + .clk_i, + .rst_ni, + .tl_i (test_tl_i ), + .tl_o (test_tl_o ), + .reg2hw (reg2hw ), + .hw2reg (hw2reg ), + .intg_err_o(intg_err ) + ); + + logic unused_reg_sig; + assign unused_reg_sig = ^reg2hw; + assign hw2reg = '0; + + /////////////////// + // Control logic // + /////////////////// + + // Encoding generated with: + // $ ./util/design/sparse-fsm-encode.py -d 5 -m 9 -n 10 \ + // -s 2599950981 --language=sv + // + // Hamming distance histogram: + // + // 0: -- + // 1: -- + // 2: -- + // 3: -- + // 4: -- + // 5: |||||||||||||||||||| (52.78%) + // 6: ||||||||||||||| (41.67%) + // 7: | (2.78%) + // 8: | (2.78%) + // 9: -- + // 10: -- + // + // Minimum Hamming distance: 5 + // Maximum Hamming distance: 8 + // Minimum Hamming weight: 3 + // Maximum Hamming weight: 8 + // + localparam int StateWidth = 10; + typedef enum logic [StateWidth-1:0] { + ResetSt = 10'b1100000110, + InitSt = 10'b1000110011, + IdleSt = 10'b0101110000, + ReadSt = 10'b0010011111, + ReadWaitSt = 10'b1001001101, + WriteCheckSt = 10'b1111101011, + WriteWaitSt = 10'b0011000010, + WriteSt = 10'b0110100101, + ErrorSt = 10'b1110011000 + } state_e; + + state_e state_d, state_q; + err_e err_d, err_q; + logic valid_d, valid_q; + logic integrity_en_d, integrity_en_q; + logic req, wren, rvalid; + logic [1:0] rerror; + logic [AddrWidth-1:0] addr_q; + logic [SizeWidth-1:0] size_q; + logic [SizeWidth-1:0] cnt_d, cnt_q; + logic cnt_clr, cnt_en; + logic read_ecc_on, write_ecc_on; + logic wdata_inconsistent; + + + assign cnt_d = (cnt_clr) ? '0 : + (cnt_en) ? cnt_q + 1'b1 : cnt_q; + + assign valid_o = valid_q; + assign err_o = err_q; + + always_comb begin : p_fsm + // Default + state_d = state_q; + ready_o = 1'b0; + valid_d = 1'b0; + err_d = err_q; + req = 1'b0; + wren = 1'b0; + cnt_clr = 1'b0; + cnt_en = 1'b0; + read_ecc_on = 1'b1; + write_ecc_on = 1'b1; + fsm_err = 1'b0; + integrity_en_d = integrity_en_q; + + unique case (state_q) + // Wait here until we receive an initialization command. + ResetSt: begin + err_d = NoError; + ready_o = 1'b1; + if (valid_i) begin + if (cmd_i == Init) begin + state_d = InitSt; + end + end + end + // Wait for some time until the OTP macro is ready. + InitSt: begin + state_d = IdleSt; + valid_d = 1'b1; + err_d = NoError; + end + // In the idle state, we basically wait for read or write commands. + IdleSt: begin + ready_o = 1'b1; + err_d = NoError; + if (valid_i) begin + cnt_clr = 1'b1; + err_d = NoError; + unique case (cmd_i) + Read: begin + state_d = ReadSt; + integrity_en_d = 1'b1; + end + Write: begin + state_d = WriteCheckSt; + integrity_en_d = 1'b1; + end + ReadRaw: begin + state_d = ReadSt; + integrity_en_d = 1'b0; + end + WriteRaw: begin + state_d = WriteCheckSt; + integrity_en_d = 1'b0; + end + default: ; + endcase // cmd_i + end + end + // Issue a read command to the macro. + ReadSt: begin + state_d = ReadWaitSt; + req = 1'b1; + // Suppress ECC correction if needed. + read_ecc_on = integrity_en_q; + end + // Wait for response from macro. + ReadWaitSt: begin + // Suppress ECC correction if needed. + read_ecc_on = integrity_en_q; + if (rvalid) begin + cnt_en = 1'b1; + // Uncorrectable error, bail out. + if (rerror[1] && integrity_en_q) begin + state_d = IdleSt; + valid_d = 1'b1; + err_d = MacroEccUncorrError; + end else begin + if (cnt_q == size_q) begin + state_d = IdleSt; + valid_d = 1'b1; + end else begin + state_d = ReadSt; + end + // Correctable error, carry on but signal back. + if (rerror[0] && integrity_en_q) begin + err_d = MacroEccCorrError; + end + end + end + end + // First, read out to perform the write blank check and + // read-modify-write operation. + WriteCheckSt: begin + state_d = WriteWaitSt; + req = 1'b1; + // Register raw memory contents without correction so that we can + // perform the read-modify-write correctly. + read_ecc_on = 1'b0; + end + // Wait for readout to complete first. + WriteWaitSt: begin + // Register raw memory contents without correction so that we can + // perform the read-modify-write correctly. + read_ecc_on = 1'b0; + if (rvalid) begin + cnt_en = 1'b1; + + if (cnt_q == size_q) begin + cnt_clr = 1'b1; + state_d = WriteSt; + end else begin + state_d = WriteCheckSt; + end + end + end + // If the write data attempts to clear an already programmed bit, + // the MacroWriteBlankError needs to be asserted. + WriteSt: begin + req = 1'b1; + wren = 1'b1; + cnt_en = 1'b1; + // Suppress ECC calculation if needed. + write_ecc_on = integrity_en_q; + + if (wdata_inconsistent) begin + err_d = MacroWriteBlankError; + end + + if (cnt_q == size_q) begin + valid_d = 1'b1; + state_d = IdleSt; + end + end + // If the FSM is glitched into an invalid state. + ErrorSt: begin + fsm_err = 1'b1; + end + default: begin + state_d = ErrorSt; + fsm_err = 1'b1; + end + endcase // state_q + end + + /////////////////////////////////////////// + // Emulate using ECC protected Block RAM // + /////////////////////////////////////////// + + logic [AddrWidth-1:0] addr; + assign addr = addr_q + AddrWidth'(cnt_q); + + logic [Width-1:0] rdata_corr; + logic [Width+EccWidth-1:0] rdata_d, wdata_ecc, rdata_ecc, wdata_rmw; + logic [2**SizeWidth-1:0][Width-1:0] wdata_q, rdata_reshaped; + logic [2**SizeWidth-1:0][Width+EccWidth-1:0] rdata_q; + + // Use a standard Hamming ECC for OTP. + caliptra_prim_secded_hamming_22_16_enc u_enc ( + .data_i(wdata_q[cnt_q]), + .data_o(wdata_ecc) + ); + + caliptra_prim_secded_hamming_22_16_dec u_dec ( + .data_i (rdata_ecc), + .data_o (rdata_corr), + .syndrome_o ( ), + .err_o (rerror) + ); + + assign rdata_d = (read_ecc_on) ? {{EccWidth{1'b0}}, rdata_corr} + : rdata_ecc; + + // Read-modify-write (OTP can only set bits to 1, but not clear to 0). + assign wdata_rmw = (write_ecc_on) ? wdata_ecc | rdata_q[cnt_q] + : {{EccWidth{1'b0}}, wdata_q[cnt_q]} | rdata_q[cnt_q]; + + // This indicates if the write data is inconsistent (i.e., if the operation attempts to + // clear an already programmed bit to zero). + assign wdata_inconsistent = (rdata_q[cnt_q] & wdata_ecc) != rdata_q[cnt_q]; + + // Output data without ECC bits. + always_comb begin : p_output_map + for (int k = 0; k < 2**SizeWidth; k++) begin + rdata_reshaped[k] = rdata_q[k][Width-1:0]; + end + rdata_o = rdata_reshaped; + end + + caliptra_prim_ram_1p_adv #( + .Depth (Depth), + .Width (Width + EccWidth), + .MemInitFile (MemInitFile), + .EnableInputPipeline (1), + .EnableOutputPipeline (1) + ) u_prim_ram_1p_adv ( + .clk_i, + .rst_ni, + .req_i ( req ), + .write_i ( wren ), + .addr_i ( addr ), + .wdata_i ( wdata_rmw ), + .wmask_i ( {Width+EccWidth{1'b1}} ), + .rdata_o ( rdata_ecc ), + .rvalid_o ( rvalid ), + .rerror_o ( ), + .cfg_i ( '0 ) + ); + + + + // Currently it is assumed that no wrap arounds can occur. + `CALIPTRA_ASSERT(NoWrapArounds_A, req |-> (addr >= addr_q)) + + ////////// + // Regs // + ////////// + + `CALIPTRA_PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, ResetSt) + + always_ff @(posedge clk_i or negedge rst_ni) begin : p_regs + if (!rst_ni) begin + valid_q <= '0; + err_q <= NoError; + addr_q <= '0; + wdata_q <= '0; + rdata_q <= '0; + cnt_q <= '0; + size_q <= '0; + integrity_en_q <= 1'b0; + end else begin + valid_q <= valid_d; + err_q <= err_d; + cnt_q <= cnt_d; + integrity_en_q <= integrity_en_d; + if (ready_o && valid_i) begin + addr_q <= addr_i; + wdata_q <= wdata_i; + size_q <= size_i; + end + if (rvalid) begin + rdata_q[cnt_q] <= rdata_d; + end + end + end + + //////////////// + // Assertions // + //////////////// + + // Check that the otp_ctrl FSMs only issue legal commands to the wrapper. + `CALIPTRA_ASSERT(CheckCommands0_A, state_q == ResetSt && valid_i && ready_o |-> cmd_i == Init) + `CALIPTRA_ASSERT(CheckCommands1_A, state_q != ResetSt && valid_i && ready_o + |-> cmd_i inside {Read, ReadRaw, Write, WriteRaw}) + + +endmodule : caliptra_prim_generic_otp diff --git a/src/caliptra_prim_generic/rtl/caliptra_prim_generic_ram_1p.sv b/src/caliptra_prim_generic/rtl/caliptra_prim_generic_ram_1p.sv new file mode 100644 index 000000000..1c9698f92 --- /dev/null +++ b/src/caliptra_prim_generic/rtl/caliptra_prim_generic_ram_1p.sv @@ -0,0 +1,79 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Synchronous single-port SRAM model + +`include "caliptra_prim_assert.sv" + +module caliptra_prim_generic_ram_1p import caliptra_prim_ram_1p_pkg::*; #( + parameter int Width = 32, // bit + parameter int Depth = 128, + parameter int DataBitsPerMask = 1, // Number of data bits per bit of write mask + parameter MemInitFile = "", // VMEM file to initialize the memory with + + localparam int Aw = $clog2(Depth) // derived parameter +) ( + input logic clk_i, + + input logic req_i, + input logic write_i, + input logic [Aw-1:0] addr_i, + input logic [Width-1:0] wdata_i, + input logic [Width-1:0] wmask_i, + output logic [Width-1:0] rdata_o, // Read data. Data is returned one cycle after req_i is high. + input ram_1p_cfg_t cfg_i +); + +// For certain synthesis experiments we compile the design with generic models to get an unmapped +// netlist (GTECH). In these synthesis experiments, we typically black-box the memory models since +// these are going to be simulated using plain RTL models in netlist simulations. This can be done +// by analyzing and elaborating the design, and then removing the memory submodules before writing +// out the verilog netlist. However, memory arrays can take a long time to elaborate, and in case +// of dual port rams they can even trigger elab errors due to multiple processes writing to the +// same memory variable concurrently. To this end, we exclude the entire logic in this module in +// these runs with the following macro. +`ifndef SYNTHESIS_MEMORY_BLACK_BOXING + + // Width must be fully divisible by DataBitsPerMask + `CALIPTRA_ASSERT_INIT(DataBitsPerMaskCheck_A, (Width % DataBitsPerMask) == 0) + + logic unused_cfg; + assign unused_cfg = ^cfg_i; + + // Width of internal write mask. Note wmask_i input into the module is always assumed + // to be the full bit mask + localparam int MaskWidth = Width / DataBitsPerMask; + + logic [Width-1:0] mem [Depth]; + logic [MaskWidth-1:0] wmask; + + for (genvar k = 0; k < MaskWidth; k++) begin : gen_wmask + assign wmask[k] = &wmask_i[k*DataBitsPerMask +: DataBitsPerMask]; + + // Ensure that all mask bits within a group have the same value for a write + `CALIPTRA_ASSERT(MaskCheck_A, req_i && write_i |-> + wmask_i[k*DataBitsPerMask +: DataBitsPerMask] inside {{DataBitsPerMask{1'b1}}, '0}, + clk_i, '0) + end + + // using always instead of always_ff to avoid 'ICPD - illegal combination of drivers' error + // thrown when using $readmemh system task to backdoor load an image + always @(posedge clk_i) begin + if (req_i) begin + if (write_i) begin + for (int i=0; i < MaskWidth; i = i + 1) begin + if (wmask[i]) begin + mem[addr_i][i*DataBitsPerMask +: DataBitsPerMask] <= + wdata_i[i*DataBitsPerMask +: DataBitsPerMask]; + end + end + end else begin + rdata_o <= mem[addr_i]; + end + end + end + + `include "caliptra_prim_util_memload.svh" +`endif +endmodule diff --git a/src/edn/config/compile.yml b/src/edn/config/compile.yml index 569411ae1..f4ba1a8c6 100644 --- a/src/edn/config/compile.yml +++ b/src/edn/config/compile.yml @@ -8,3 +8,7 @@ targets: directories: [$COMPILE_ROOT/rtl] files: - $COMPILE_ROOT/rtl/edn_pkg.sv + tb: + directories: [$COMPILE_ROOT/rtl] + files: + - $COMPILE_ROOT/rtl/edn_pkg.sv diff --git a/src/fuse_ctrl/config/compile.yml b/src/fuse_ctrl/config/compile.yml index 6c362e2ab..11e7526a8 100644 --- a/src/fuse_ctrl/config/compile.yml +++ b/src/fuse_ctrl/config/compile.yml @@ -1,33 +1,78 @@ --- -provides: [fc_ctrl] +provides: [fuse_ctrl_pkg] schema_version: 2.4.0 requires: - caliptra_prim targets: + rtl: + directories: [$COMPILE_ROOT/rtl] + files: + - $COMPILE_ROOT/rtl/caliptra_otp_ctrl_reg_pkg.sv + - $COMPILE_ROOT/rtl/caliptra_otp_ctrl_pkg.sv + - $COMPILE_ROOT/rtl/caliptra_otp_ctrl_part_pkg.sv tb: - directories: - files: + directories: [$COMPILE_ROOT/rtl] + files: + - $COMPILE_ROOT/rtl/caliptra_otp_ctrl_reg_pkg.sv + - $COMPILE_ROOT/rtl/caliptra_otp_ctrl_pkg.sv + - $COMPILE_ROOT/rtl/caliptra_otp_ctrl_part_pkg.sv +--- +provides: [fuse_ctrl] +schema_version: 2.4.0 +requires: + - caliptra_prim + - caliptra_prim_generic + - tlul + - axi2tlul + - edn_pkg + - ast_pkg + - pwrmgr_pkg + - lc_ctrl_pkg + - fuse_ctrl_pkg +targets: rtl: directories: [$COMPILE_ROOT/rtl] files: - - $COMPILE_ROOT/rtl/axi_adapter_sram.sv - - $COMPILE_ROOT/rtl/axi_lc_gate.sv - - $COMPILE_ROOT/rtl/axi_sram_byte.sv - $COMPILE_ROOT/rtl/caliptra_otp_ctrl_core_reg_top.sv - $COMPILE_ROOT/rtl/caliptra_otp_ctrl_prim_reg_top.sv - - $COMPILE_ROOT/rtl/caliptra_otp_ctrl_reg_pkg.sv - - $COMPILE_ROOT/rtl/otp_ctrl_axi_pkg.sv - $COMPILE_ROOT/rtl/otp_ctrl_dai.sv - $COMPILE_ROOT/rtl/otp_ctrl_ecc_reg.sv - - $COMPILE_ROOT/rtl/otp_ctrl_kdi.sv + #- $COMPILE_ROOT/rtl/otp_ctrl_kdi.sv - $COMPILE_ROOT/rtl/otp_ctrl_lci.sv - $COMPILE_ROOT/rtl/otp_ctrl_lfsr_timer.sv - $COMPILE_ROOT/rtl/otp_ctrl_part_buf.sv - - $COMPILE_ROOT/rtl/otp_ctrl_part_pkg.sv - $COMPILE_ROOT/rtl/otp_ctrl_part_unbuf.sv - - $COMPILE_ROOT/rtl/otp_ctrl_pkg.sv - $COMPILE_ROOT/rtl/otp_ctrl_scrmbl.sv - $COMPILE_ROOT/rtl/otp_ctrl.sv - - $COMPILE_ROOT/rtl/otp_ctrl.sv_orig - - $COMPILE_ROOT/rtl/otp_ctrl_token_const.sv + #- $COMPILE_ROOT/rtl/otp_ctrl_token_const.sv - $COMPILE_ROOT/rtl/otp_ctrl_top.sv + tops: [otp_ctrl_top] +--- +provides: [fuse_ctrl_tb_pkg] +schema_version: 2.4.0 +requires: +targets: + tb: + directories: [$COMPILE_ROOT/tb] + files: + - $COMPILE_ROOT/tb/otp_ctrl_top_tb_pkg.sv + tops: [otp_ctrl_top_tb_pkg] +--- +provides: [fuse_ctrl_tb] +schema_version: 2.4.0 +requires: + - fuse_ctrl + - fuse_ctrl_tb_pkg +targets: + tb: + directories: [$COMPILE_ROOT/tb] + files: + - $COMPILE_ROOT/tb/otp_ctrl_top_tb.sv + tops: [otp_ctrl_top_tb] +global: + tool: + vcs: + default: + - '-assert svaext' + - +define+CLP_ASSERT_ON + - '-noinherit_timescale=1ns/1ps' diff --git a/src/fuse_ctrl/data/otp-img.2048.vmem b/src/fuse_ctrl/data/otp-img.2048.vmem new file mode 100644 index 000000000..2e1167fed --- /dev/null +++ b/src/fuse_ctrl/data/otp-img.2048.vmem @@ -0,0 +1,2057 @@ +// Generated on Thu, 19 Sep 2024 17:26:44 UTC with +// $ gen-otp-img.py \ +// --add-cfg /home/ws/caliptra/anjpar/opentitan/hw/ip/otp_ctrl/data/otp_ctrl_img_non_secret_fuses.hjson \ +// --img-cfg /home/ws/caliptra/anjpar/opentitan/hw/ip/otp_ctrl/data/otp_ctrl_img_dev.hjson \ +// --lc-state-def /home/ws/caliptra/anjpar/opentitan/hw/ip/lc_ctrl/data/lc_ctrl_state.hjson \ +// --mmap-def /home/ws/caliptra/anjpar/opentitan/hw/ip/otp_ctrl/data/otp_ctrl_mmap.hjson \ +// --out hw/ip/otp_ctrl/data/otp-img.2048.vmem +// +// OTP MEM file with 2048 x 24bit layout +@000000 000000 // VENDOR_TEST: SCRATCH +@000001 000000 // VENDOR_TEST: SCRATCH +@000002 000000 // VENDOR_TEST: SCRATCH +@000003 000000 // VENDOR_TEST: SCRATCH +@000004 000000 // VENDOR_TEST: SCRATCH +@000005 000000 // VENDOR_TEST: SCRATCH +@000006 000000 // VENDOR_TEST: SCRATCH +@000007 000000 // VENDOR_TEST: SCRATCH +@000008 000000 // VENDOR_TEST: SCRATCH +@000009 000000 // VENDOR_TEST: SCRATCH +@00000a 000000 // VENDOR_TEST: SCRATCH +@00000b 000000 // VENDOR_TEST: SCRATCH +@00000c 000000 // VENDOR_TEST: SCRATCH +@00000d 000000 // VENDOR_TEST: SCRATCH +@00000e 000000 // VENDOR_TEST: SCRATCH +@00000f 000000 // VENDOR_TEST: SCRATCH +@000010 000000 // VENDOR_TEST: SCRATCH +@000011 000000 // VENDOR_TEST: SCRATCH +@000012 000000 // VENDOR_TEST: SCRATCH +@000013 000000 // VENDOR_TEST: SCRATCH +@000014 000000 // VENDOR_TEST: SCRATCH +@000015 000000 // VENDOR_TEST: SCRATCH +@000016 000000 // VENDOR_TEST: SCRATCH +@000017 000000 // VENDOR_TEST: SCRATCH +@000018 000000 // VENDOR_TEST: SCRATCH +@000019 000000 // VENDOR_TEST: SCRATCH +@00001a 000000 // VENDOR_TEST: SCRATCH +@00001b 000000 // VENDOR_TEST: SCRATCH +@00001c 000000 // VENDOR_TEST: VENDOR_TEST_DIGEST +@00001d 000000 // VENDOR_TEST: VENDOR_TEST_DIGEST +@00001e 000000 // VENDOR_TEST: VENDOR_TEST_DIGEST +@00001f 000000 // VENDOR_TEST: VENDOR_TEST_DIGEST +@000020 01a41b // NON_SECRET_FUSES: FMC_KEY_MANIFEST_SVN +@000021 251ab8 // NON_SECRET_FUSES: FMC_KEY_MANIFEST_SVN +@000022 17b657 // NON_SECRET_FUSES: RUNTIME_SVN +@000023 35b357 // NON_SECRET_FUSES: RUNTIME_SVN +@000024 31e2e0 // NON_SECRET_FUSES: RUNTIME_SVN +@000025 2c932a // NON_SECRET_FUSES: RUNTIME_SVN +@000026 0c2deb // NON_SECRET_FUSES: RUNTIME_SVN +@000027 19ae81 // NON_SECRET_FUSES: RUNTIME_SVN +@000028 2791e0 // NON_SECRET_FUSES: RUNTIME_SVN +@000029 31b50f // NON_SECRET_FUSES: RUNTIME_SVN +@00002a 079394 // NON_SECRET_FUSES: LMS_VERIFY +@00002b 1276a7 // NON_SECRET_FUSES: LMS_VERIFY +@00002c 013144 // NON_SECRET_FUSES: LMS_REVOCATION +@00002d 149ab1 // NON_SECRET_FUSES: LMS_REVOCATION +@00002e 2b96e7 // NON_SECRET_FUSES: KEY_MANIFEST_PK_HASH_MASK +@00002f 0e531a // NON_SECRET_FUSES: KEY_MANIFEST_PK_HASH_MASK +@000030 08a579 // NON_SECRET_FUSES: OWNER_PK_HASH +@000031 2f51f0 // NON_SECRET_FUSES: OWNER_PK_HASH +@000032 0b8ccf // NON_SECRET_FUSES: OWNER_PK_HASH +@000033 2b88b7 // NON_SECRET_FUSES: OWNER_PK_HASH +@000034 2a7af9 // NON_SECRET_FUSES: OWNER_PK_HASH +@000035 1fca51 // NON_SECRET_FUSES: OWNER_PK_HASH +@000036 2ec407 // NON_SECRET_FUSES: OWNER_PK_HASH +@000037 221b66 // NON_SECRET_FUSES: OWNER_PK_HASH +@000038 3026c2 // NON_SECRET_FUSES: OWNER_PK_HASH +@000039 0b9325 // NON_SECRET_FUSES: OWNER_PK_HASH +@00003a 3cf9f9 // NON_SECRET_FUSES: OWNER_PK_HASH +@00003b 238ad8 // NON_SECRET_FUSES: OWNER_PK_HASH +@00003c 3f1756 // NON_SECRET_FUSES: OWNER_PK_HASH +@00003d 2ac16f // NON_SECRET_FUSES: OWNER_PK_HASH +@00003e 15ae6a // NON_SECRET_FUSES: OWNER_PK_HASH +@00003f 1722de // NON_SECRET_FUSES: OWNER_PK_HASH +@000040 088cff // NON_SECRET_FUSES: OWNER_PK_HASH +@000041 37d535 // NON_SECRET_FUSES: OWNER_PK_HASH +@000042 30747d // NON_SECRET_FUSES: OWNER_PK_HASH +@000043 28e847 // NON_SECRET_FUSES: OWNER_PK_HASH +@000044 25bfeb // NON_SECRET_FUSES: OWNER_PK_HASH +@000045 2557ed // NON_SECRET_FUSES: OWNER_PK_HASH +@000046 255142 // NON_SECRET_FUSES: OWNER_PK_HASH +@000047 08ec09 // NON_SECRET_FUSES: OWNER_PK_HASH +@000048 29d9fa // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@000049 39408c // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@00004a 0b2e70 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@00004b 1db0b3 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@00004c 107276 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@00004d 33a838 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@00004e 282b4d // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@00004f 292e83 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@000050 26522e // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@000051 360d02 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@000052 0b31c0 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@000053 13cd0c // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@000054 009659 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@000055 168423 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@000056 1b9aa5 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@000057 08c37a // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@000058 205562 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@000059 2fed73 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@00005a 149cd1 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@00005b 0e7c69 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@00005c 3ef9ae // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@00005d 2f4d2a // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@00005e 02c781 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@00005f 06c3aa // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@000060 367698 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@000061 18c8d3 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@000062 0a36b2 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@000063 229240 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@000064 171654 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@000065 2d4c9d // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@000066 23ea8d // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@000067 340c20 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@000068 0b3676 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@000069 0edeba // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@00006a 0af262 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@00006b 2d2af2 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@00006c 13ab55 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@00006d 05330f // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@00006e 15269a // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@00006f 0fddb7 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@000070 0e334f // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@000071 1ab761 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@000072 3245aa // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@000073 0ea463 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@000074 1808b3 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@000075 27c21c // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@000076 3339e1 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@000077 07b9b7 // NON_SECRET_FUSES: IDEVID_CERT_ATTR +@000078 2f1cc9 // NON_SECRET_FUSES: IDEVID_MANUF_HSM_ID +@000079 1ca8be // NON_SECRET_FUSES: IDEVID_MANUF_HSM_ID +@00007a 2fa239 // NON_SECRET_FUSES: IDEVID_MANUF_HSM_ID +@00007b 0b92f3 // NON_SECRET_FUSES: IDEVID_MANUF_HSM_ID +@00007c 2e63e8 // NON_SECRET_FUSES: IDEVID_MANUF_HSM_ID +@00007d 0cd9a2 // NON_SECRET_FUSES: IDEVID_MANUF_HSM_ID +@00007e 3e1518 // NON_SECRET_FUSES: IDEVID_MANUF_HSM_ID +@00007f 1af871 // NON_SECRET_FUSES: IDEVID_MANUF_HSM_ID +@000080 0e5376 // NON_SECRET_FUSES: SOC_STEPPING_ID +@000081 14fef7 // NON_SECRET_FUSES: SOC_STEPPING_ID +@000082 000000 // unallocated +@000083 000000 // unallocated +@000084 000000 // unallocated +@000085 000000 // unallocated +@000086 000000 // unallocated +@000087 000000 // unallocated +@000088 000000 // unallocated +@000089 000000 // unallocated +@00008a 000000 // unallocated +@00008b 000000 // unallocated +@00008c 000000 // unallocated +@00008d 000000 // unallocated +@00008e 000000 // unallocated +@00008f 000000 // unallocated +@000090 000000 // unallocated +@000091 000000 // unallocated +@000092 000000 // unallocated +@000093 000000 // unallocated +@000094 000000 // unallocated +@000095 000000 // unallocated +@000096 000000 // unallocated +@000097 000000 // unallocated +@000098 000000 // unallocated +@000099 000000 // unallocated +@00009a 000000 // unallocated +@00009b 000000 // unallocated +@00009c 000000 // unallocated +@00009d 000000 // unallocated +@00009e 000000 // unallocated +@00009f 000000 // unallocated +@0000a0 000000 // unallocated +@0000a1 000000 // unallocated +@0000a2 000000 // unallocated +@0000a3 000000 // unallocated +@0000a4 000000 // unallocated +@0000a5 000000 // unallocated +@0000a6 000000 // unallocated +@0000a7 000000 // unallocated +@0000a8 000000 // unallocated +@0000a9 000000 // unallocated +@0000aa 000000 // unallocated +@0000ab 000000 // unallocated +@0000ac 000000 // unallocated +@0000ad 000000 // unallocated +@0000ae 000000 // unallocated +@0000af 000000 // unallocated +@0000b0 000000 // unallocated +@0000b1 000000 // unallocated +@0000b2 000000 // unallocated +@0000b3 000000 // unallocated +@0000b4 000000 // unallocated +@0000b5 000000 // unallocated +@0000b6 000000 // unallocated +@0000b7 000000 // unallocated +@0000b8 000000 // unallocated +@0000b9 000000 // unallocated +@0000ba 000000 // unallocated +@0000bb 000000 // unallocated +@0000bc 000000 // unallocated +@0000bd 000000 // unallocated +@0000be 000000 // unallocated +@0000bf 000000 // unallocated +@0000c0 000000 // unallocated +@0000c1 000000 // unallocated +@0000c2 000000 // unallocated +@0000c3 000000 // unallocated +@0000c4 000000 // unallocated +@0000c5 000000 // unallocated +@0000c6 000000 // unallocated +@0000c7 000000 // unallocated +@0000c8 000000 // unallocated +@0000c9 000000 // unallocated +@0000ca 000000 // unallocated +@0000cb 000000 // unallocated +@0000cc 000000 // unallocated +@0000cd 000000 // unallocated +@0000ce 000000 // unallocated +@0000cf 000000 // unallocated +@0000d0 000000 // unallocated +@0000d1 000000 // unallocated +@0000d2 000000 // unallocated +@0000d3 000000 // unallocated +@0000d4 000000 // unallocated +@0000d5 000000 // unallocated +@0000d6 000000 // unallocated +@0000d7 000000 // unallocated +@0000d8 000000 // unallocated +@0000d9 000000 // unallocated +@0000da 000000 // unallocated +@0000db 000000 // unallocated +@0000dc 000000 // unallocated +@0000dd 000000 // unallocated +@0000de 000000 // unallocated +@0000df 000000 // unallocated +@0000e0 000000 // unallocated +@0000e1 000000 // unallocated +@0000e2 000000 // unallocated +@0000e3 000000 // unallocated +@0000e4 000000 // unallocated +@0000e5 000000 // unallocated +@0000e6 000000 // unallocated +@0000e7 000000 // unallocated +@0000e8 000000 // unallocated +@0000e9 000000 // unallocated +@0000ea 000000 // unallocated +@0000eb 000000 // unallocated +@0000ec 000000 // unallocated +@0000ed 000000 // unallocated +@0000ee 000000 // unallocated +@0000ef 000000 // unallocated +@0000f0 000000 // unallocated +@0000f1 000000 // unallocated +@0000f2 000000 // unallocated +@0000f3 000000 // unallocated +@0000f4 000000 // unallocated +@0000f5 000000 // unallocated +@0000f6 000000 // unallocated +@0000f7 000000 // unallocated +@0000f8 000000 // unallocated +@0000f9 000000 // unallocated +@0000fa 000000 // unallocated +@0000fb 000000 // unallocated +@0000fc 000000 // unallocated +@0000fd 000000 // unallocated +@0000fe 000000 // unallocated +@0000ff 000000 // unallocated +@000100 000000 // unallocated +@000101 000000 // unallocated +@000102 000000 // unallocated +@000103 000000 // unallocated +@000104 000000 // unallocated +@000105 000000 // unallocated +@000106 000000 // unallocated +@000107 000000 // unallocated +@000108 000000 // unallocated +@000109 000000 // unallocated +@00010a 000000 // unallocated +@00010b 000000 // unallocated +@00010c 000000 // unallocated +@00010d 000000 // unallocated +@00010e 000000 // unallocated +@00010f 000000 // unallocated +@000110 000000 // unallocated +@000111 000000 // unallocated +@000112 000000 // unallocated +@000113 000000 // unallocated +@000114 000000 // unallocated +@000115 000000 // unallocated +@000116 000000 // unallocated +@000117 000000 // unallocated +@000118 000000 // unallocated +@000119 000000 // unallocated +@00011a 000000 // unallocated +@00011b 000000 // unallocated +@00011c 000000 // unallocated +@00011d 000000 // unallocated +@00011e 000000 // unallocated +@00011f 000000 // unallocated +@000120 000000 // unallocated +@000121 000000 // unallocated +@000122 000000 // unallocated +@000123 000000 // unallocated +@000124 000000 // unallocated +@000125 000000 // unallocated +@000126 000000 // unallocated +@000127 000000 // unallocated +@000128 000000 // unallocated +@000129 000000 // unallocated +@00012a 000000 // unallocated +@00012b 000000 // unallocated +@00012c 000000 // unallocated +@00012d 000000 // unallocated +@00012e 000000 // unallocated +@00012f 000000 // unallocated +@000130 000000 // unallocated +@000131 000000 // unallocated +@000132 000000 // unallocated +@000133 000000 // unallocated +@000134 000000 // unallocated +@000135 000000 // unallocated +@000136 000000 // unallocated +@000137 000000 // unallocated +@000138 000000 // unallocated +@000139 000000 // unallocated +@00013a 000000 // unallocated +@00013b 000000 // unallocated +@00013c 000000 // unallocated +@00013d 000000 // unallocated +@00013e 000000 // unallocated +@00013f 000000 // unallocated +@000140 000000 // unallocated +@000141 000000 // unallocated +@000142 000000 // unallocated +@000143 000000 // unallocated +@000144 000000 // unallocated +@000145 000000 // unallocated +@000146 000000 // unallocated +@000147 000000 // unallocated +@000148 000000 // unallocated +@000149 000000 // unallocated +@00014a 000000 // unallocated +@00014b 000000 // unallocated +@00014c 000000 // unallocated +@00014d 000000 // unallocated +@00014e 000000 // unallocated +@00014f 000000 // unallocated +@000150 000000 // unallocated +@000151 000000 // unallocated +@000152 000000 // unallocated +@000153 000000 // unallocated +@000154 000000 // unallocated +@000155 000000 // unallocated +@000156 000000 // unallocated +@000157 000000 // unallocated +@000158 000000 // unallocated +@000159 000000 // unallocated +@00015a 000000 // unallocated +@00015b 000000 // unallocated +@00015c 000000 // unallocated +@00015d 000000 // unallocated +@00015e 000000 // unallocated +@00015f 000000 // unallocated +@000160 000000 // unallocated +@000161 000000 // unallocated +@000162 000000 // unallocated +@000163 000000 // unallocated +@000164 000000 // unallocated +@000165 000000 // unallocated +@000166 000000 // unallocated +@000167 000000 // unallocated +@000168 000000 // unallocated +@000169 000000 // unallocated +@00016a 000000 // unallocated +@00016b 000000 // unallocated +@00016c 000000 // unallocated +@00016d 000000 // unallocated +@00016e 000000 // unallocated +@00016f 000000 // unallocated +@000170 000000 // unallocated +@000171 000000 // unallocated +@000172 000000 // unallocated +@000173 000000 // unallocated +@000174 000000 // unallocated +@000175 000000 // unallocated +@000176 000000 // unallocated +@000177 000000 // unallocated +@000178 000000 // unallocated +@000179 000000 // unallocated +@00017a 000000 // unallocated +@00017b 000000 // unallocated +@00017c 000000 // unallocated +@00017d 000000 // unallocated +@00017e 000000 // unallocated +@00017f 000000 // unallocated +@000180 000000 // unallocated +@000181 000000 // unallocated +@000182 000000 // unallocated +@000183 000000 // unallocated +@000184 000000 // unallocated +@000185 000000 // unallocated +@000186 000000 // unallocated +@000187 000000 // unallocated +@000188 000000 // unallocated +@000189 000000 // unallocated +@00018a 000000 // unallocated +@00018b 000000 // unallocated +@00018c 000000 // unallocated +@00018d 000000 // unallocated +@00018e 000000 // unallocated +@00018f 000000 // unallocated +@000190 000000 // unallocated +@000191 000000 // unallocated +@000192 000000 // unallocated +@000193 000000 // unallocated +@000194 000000 // unallocated +@000195 000000 // unallocated +@000196 000000 // unallocated +@000197 000000 // unallocated +@000198 000000 // unallocated +@000199 000000 // unallocated +@00019a 000000 // unallocated +@00019b 000000 // unallocated +@00019c 000000 // unallocated +@00019d 000000 // unallocated +@00019e 000000 // unallocated +@00019f 000000 // unallocated +@0001a0 000000 // unallocated +@0001a1 000000 // unallocated +@0001a2 000000 // unallocated +@0001a3 000000 // unallocated +@0001a4 000000 // unallocated +@0001a5 000000 // unallocated +@0001a6 000000 // unallocated +@0001a7 000000 // unallocated +@0001a8 000000 // unallocated +@0001a9 000000 // unallocated +@0001aa 000000 // unallocated +@0001ab 000000 // unallocated +@0001ac 000000 // unallocated +@0001ad 000000 // unallocated +@0001ae 000000 // unallocated +@0001af 000000 // unallocated +@0001b0 000000 // unallocated +@0001b1 000000 // unallocated +@0001b2 000000 // unallocated +@0001b3 000000 // unallocated +@0001b4 000000 // unallocated +@0001b5 000000 // unallocated +@0001b6 000000 // unallocated +@0001b7 000000 // unallocated +@0001b8 000000 // unallocated +@0001b9 000000 // unallocated +@0001ba 000000 // unallocated +@0001bb 000000 // unallocated +@0001bc 000000 // unallocated +@0001bd 000000 // unallocated +@0001be 000000 // unallocated +@0001bf 000000 // unallocated +@0001c0 000000 // unallocated +@0001c1 000000 // unallocated +@0001c2 000000 // unallocated +@0001c3 000000 // unallocated +@0001c4 000000 // unallocated +@0001c5 000000 // unallocated +@0001c6 000000 // unallocated +@0001c7 000000 // unallocated +@0001c8 000000 // unallocated +@0001c9 000000 // unallocated +@0001ca 000000 // unallocated +@0001cb 000000 // unallocated +@0001cc 000000 // unallocated +@0001cd 000000 // unallocated +@0001ce 000000 // unallocated +@0001cf 000000 // unallocated +@0001d0 000000 // unallocated +@0001d1 000000 // unallocated +@0001d2 000000 // unallocated +@0001d3 000000 // unallocated +@0001d4 000000 // unallocated +@0001d5 000000 // unallocated +@0001d6 000000 // unallocated +@0001d7 000000 // unallocated +@0001d8 000000 // unallocated +@0001d9 000000 // unallocated +@0001da 000000 // unallocated +@0001db 000000 // unallocated +@0001dc 000000 // unallocated +@0001dd 000000 // unallocated +@0001de 000000 // unallocated +@0001df 000000 // unallocated +@0001e0 000000 // unallocated +@0001e1 000000 // unallocated +@0001e2 000000 // unallocated +@0001e3 000000 // unallocated +@0001e4 000000 // unallocated +@0001e5 000000 // unallocated +@0001e6 000000 // unallocated +@0001e7 000000 // unallocated +@0001e8 000000 // unallocated +@0001e9 000000 // unallocated +@0001ea 000000 // unallocated +@0001eb 000000 // unallocated +@0001ec 000000 // unallocated +@0001ed 000000 // unallocated +@0001ee 000000 // unallocated +@0001ef 000000 // unallocated +@0001f0 000000 // unallocated +@0001f1 000000 // unallocated +@0001f2 000000 // unallocated +@0001f3 000000 // unallocated +@0001f4 000000 // unallocated +@0001f5 000000 // unallocated +@0001f6 000000 // unallocated +@0001f7 000000 // unallocated +@0001f8 000000 // unallocated +@0001f9 000000 // unallocated +@0001fa 000000 // unallocated +@0001fb 000000 // unallocated +@0001fc 000000 // unallocated +@0001fd 000000 // unallocated +@0001fe 000000 // unallocated +@0001ff 000000 // unallocated +@000200 000000 // unallocated +@000201 000000 // unallocated +@000202 000000 // unallocated +@000203 000000 // unallocated +@000204 000000 // unallocated +@000205 000000 // unallocated +@000206 000000 // unallocated +@000207 000000 // unallocated +@000208 000000 // unallocated +@000209 000000 // unallocated +@00020a 000000 // unallocated +@00020b 000000 // unallocated +@00020c 000000 // unallocated +@00020d 000000 // unallocated +@00020e 000000 // unallocated +@00020f 000000 // unallocated +@000210 000000 // unallocated +@000211 000000 // unallocated +@000212 000000 // unallocated +@000213 000000 // unallocated +@000214 000000 // unallocated +@000215 000000 // unallocated +@000216 000000 // unallocated +@000217 000000 // unallocated +@000218 000000 // unallocated +@000219 000000 // unallocated +@00021a 000000 // unallocated +@00021b 000000 // unallocated +@00021c 000000 // unallocated +@00021d 000000 // unallocated +@00021e 000000 // unallocated +@00021f 000000 // unallocated +@000220 000000 // unallocated +@000221 000000 // unallocated +@000222 000000 // unallocated +@000223 000000 // unallocated +@000224 000000 // unallocated +@000225 000000 // unallocated +@000226 000000 // unallocated +@000227 000000 // unallocated +@000228 000000 // unallocated +@000229 000000 // unallocated +@00022a 000000 // unallocated +@00022b 000000 // unallocated +@00022c 000000 // unallocated +@00022d 000000 // unallocated +@00022e 000000 // unallocated +@00022f 000000 // unallocated +@000230 000000 // unallocated +@000231 000000 // unallocated +@000232 000000 // unallocated +@000233 000000 // unallocated +@000234 000000 // unallocated +@000235 000000 // unallocated +@000236 000000 // unallocated +@000237 000000 // unallocated +@000238 000000 // unallocated +@000239 000000 // unallocated +@00023a 000000 // unallocated +@00023b 000000 // unallocated +@00023c 000000 // unallocated +@00023d 000000 // unallocated +@00023e 000000 // unallocated +@00023f 000000 // unallocated +@000240 000000 // unallocated +@000241 000000 // unallocated +@000242 000000 // unallocated +@000243 000000 // unallocated +@000244 000000 // unallocated +@000245 000000 // unallocated +@000246 000000 // unallocated +@000247 000000 // unallocated +@000248 000000 // unallocated +@000249 000000 // unallocated +@00024a 000000 // unallocated +@00024b 000000 // unallocated +@00024c 000000 // unallocated +@00024d 000000 // unallocated +@00024e 000000 // unallocated +@00024f 000000 // unallocated +@000250 000000 // unallocated +@000251 000000 // unallocated +@000252 000000 // unallocated +@000253 000000 // unallocated +@000254 000000 // unallocated +@000255 000000 // unallocated +@000256 000000 // unallocated +@000257 000000 // unallocated +@000258 000000 // unallocated +@000259 000000 // unallocated +@00025a 000000 // unallocated +@00025b 000000 // unallocated +@00025c 000000 // unallocated +@00025d 000000 // unallocated +@00025e 000000 // unallocated +@00025f 000000 // unallocated +@000260 000000 // unallocated +@000261 000000 // unallocated +@000262 000000 // unallocated +@000263 000000 // unallocated +@000264 000000 // unallocated +@000265 000000 // unallocated +@000266 000000 // unallocated +@000267 000000 // unallocated +@000268 000000 // unallocated +@000269 000000 // unallocated +@00026a 000000 // unallocated +@00026b 000000 // unallocated +@00026c 000000 // unallocated +@00026d 000000 // unallocated +@00026e 000000 // unallocated +@00026f 000000 // unallocated +@000270 000000 // unallocated +@000271 000000 // unallocated +@000272 000000 // unallocated +@000273 000000 // unallocated +@000274 000000 // unallocated +@000275 000000 // unallocated +@000276 000000 // unallocated +@000277 000000 // unallocated +@000278 000000 // unallocated +@000279 000000 // unallocated +@00027a 000000 // unallocated +@00027b 000000 // unallocated +@00027c 000000 // unallocated +@00027d 000000 // unallocated +@00027e 000000 // unallocated +@00027f 000000 // unallocated +@000280 000000 // unallocated +@000281 000000 // unallocated +@000282 000000 // unallocated +@000283 000000 // unallocated +@000284 000000 // unallocated +@000285 000000 // unallocated +@000286 000000 // unallocated +@000287 000000 // unallocated +@000288 000000 // unallocated +@000289 000000 // unallocated +@00028a 000000 // unallocated +@00028b 000000 // unallocated +@00028c 000000 // unallocated +@00028d 000000 // unallocated +@00028e 000000 // unallocated +@00028f 000000 // unallocated +@000290 000000 // unallocated +@000291 000000 // unallocated +@000292 000000 // unallocated +@000293 000000 // unallocated +@000294 000000 // unallocated +@000295 000000 // unallocated +@000296 000000 // unallocated +@000297 000000 // unallocated +@000298 000000 // unallocated +@000299 000000 // unallocated +@00029a 000000 // unallocated +@00029b 000000 // unallocated +@00029c 000000 // unallocated +@00029d 000000 // unallocated +@00029e 000000 // unallocated +@00029f 000000 // unallocated +@0002a0 000000 // unallocated +@0002a1 000000 // unallocated +@0002a2 000000 // unallocated +@0002a3 000000 // unallocated +@0002a4 000000 // unallocated +@0002a5 000000 // unallocated +@0002a6 000000 // unallocated +@0002a7 000000 // unallocated +@0002a8 000000 // unallocated +@0002a9 000000 // unallocated +@0002aa 000000 // unallocated +@0002ab 000000 // unallocated +@0002ac 000000 // unallocated +@0002ad 000000 // unallocated +@0002ae 000000 // unallocated +@0002af 000000 // unallocated +@0002b0 000000 // unallocated +@0002b1 000000 // unallocated +@0002b2 000000 // unallocated +@0002b3 000000 // unallocated +@0002b4 000000 // unallocated +@0002b5 000000 // unallocated +@0002b6 000000 // unallocated +@0002b7 000000 // unallocated +@0002b8 000000 // unallocated +@0002b9 000000 // unallocated +@0002ba 000000 // unallocated +@0002bb 000000 // unallocated +@0002bc 000000 // unallocated +@0002bd 000000 // unallocated +@0002be 000000 // unallocated +@0002bf 000000 // unallocated +@0002c0 000000 // unallocated +@0002c1 000000 // unallocated +@0002c2 000000 // unallocated +@0002c3 000000 // unallocated +@0002c4 000000 // unallocated +@0002c5 000000 // unallocated +@0002c6 000000 // unallocated +@0002c7 000000 // unallocated +@0002c8 000000 // unallocated +@0002c9 000000 // unallocated +@0002ca 000000 // unallocated +@0002cb 000000 // unallocated +@0002cc 000000 // unallocated +@0002cd 000000 // unallocated +@0002ce 000000 // unallocated +@0002cf 000000 // unallocated +@0002d0 000000 // unallocated +@0002d1 000000 // unallocated +@0002d2 000000 // unallocated +@0002d3 000000 // unallocated +@0002d4 000000 // unallocated +@0002d5 000000 // unallocated +@0002d6 000000 // unallocated +@0002d7 000000 // unallocated +@0002d8 000000 // unallocated +@0002d9 000000 // unallocated +@0002da 000000 // unallocated +@0002db 000000 // unallocated +@0002dc 000000 // unallocated +@0002dd 000000 // unallocated +@0002de 000000 // unallocated +@0002df 000000 // unallocated +@0002e0 000000 // unallocated +@0002e1 000000 // unallocated +@0002e2 000000 // unallocated +@0002e3 000000 // unallocated +@0002e4 000000 // unallocated +@0002e5 000000 // unallocated +@0002e6 000000 // unallocated +@0002e7 000000 // unallocated +@0002e8 000000 // unallocated +@0002e9 000000 // unallocated +@0002ea 000000 // unallocated +@0002eb 000000 // unallocated +@0002ec 000000 // unallocated +@0002ed 000000 // unallocated +@0002ee 000000 // unallocated +@0002ef 000000 // unallocated +@0002f0 000000 // unallocated +@0002f1 000000 // unallocated +@0002f2 000000 // unallocated +@0002f3 000000 // unallocated +@0002f4 000000 // unallocated +@0002f5 000000 // unallocated +@0002f6 000000 // unallocated +@0002f7 000000 // unallocated +@0002f8 000000 // unallocated +@0002f9 000000 // unallocated +@0002fa 000000 // unallocated +@0002fb 000000 // unallocated +@0002fc 000000 // unallocated +@0002fd 000000 // unallocated +@0002fe 000000 // unallocated +@0002ff 000000 // unallocated +@000300 000000 // unallocated +@000301 000000 // unallocated +@000302 000000 // unallocated +@000303 000000 // unallocated +@000304 000000 // unallocated +@000305 000000 // unallocated +@000306 000000 // unallocated +@000307 000000 // unallocated +@000308 000000 // unallocated +@000309 000000 // unallocated +@00030a 000000 // unallocated +@00030b 000000 // unallocated +@00030c 000000 // unallocated +@00030d 000000 // unallocated +@00030e 000000 // unallocated +@00030f 000000 // unallocated +@000310 000000 // unallocated +@000311 000000 // unallocated +@000312 000000 // unallocated +@000313 000000 // unallocated +@000314 000000 // unallocated +@000315 000000 // unallocated +@000316 000000 // unallocated +@000317 000000 // unallocated +@000318 000000 // unallocated +@000319 000000 // unallocated +@00031a 000000 // unallocated +@00031b 000000 // unallocated +@00031c 000000 // unallocated +@00031d 000000 // unallocated +@00031e 000000 // unallocated +@00031f 000000 // unallocated +@000320 000000 // unallocated +@000321 000000 // unallocated +@000322 000000 // unallocated +@000323 000000 // unallocated +@000324 000000 // unallocated +@000325 000000 // unallocated +@000326 000000 // unallocated +@000327 000000 // unallocated +@000328 000000 // unallocated +@000329 000000 // unallocated +@00032a 000000 // unallocated +@00032b 000000 // unallocated +@00032c 000000 // unallocated +@00032d 000000 // unallocated +@00032e 000000 // unallocated +@00032f 000000 // unallocated +@000330 000000 // unallocated +@000331 000000 // unallocated +@000332 000000 // unallocated +@000333 000000 // unallocated +@000334 000000 // unallocated +@000335 000000 // unallocated +@000336 000000 // unallocated +@000337 000000 // unallocated +@000338 000000 // unallocated +@000339 000000 // unallocated +@00033a 000000 // unallocated +@00033b 000000 // unallocated +@00033c 000000 // unallocated +@00033d 000000 // unallocated +@00033e 000000 // unallocated +@00033f 000000 // unallocated +@000340 000000 // unallocated +@000341 000000 // unallocated +@000342 000000 // unallocated +@000343 000000 // unallocated +@000344 000000 // unallocated +@000345 000000 // unallocated +@000346 000000 // unallocated +@000347 000000 // unallocated +@000348 000000 // unallocated +@000349 000000 // unallocated +@00034a 000000 // unallocated +@00034b 000000 // unallocated +@00034c 000000 // unallocated +@00034d 000000 // unallocated +@00034e 000000 // unallocated +@00034f 000000 // unallocated +@000350 000000 // unallocated +@000351 000000 // unallocated +@000352 000000 // unallocated +@000353 000000 // unallocated +@000354 000000 // unallocated +@000355 000000 // unallocated +@000356 000000 // unallocated +@000357 000000 // unallocated +@000358 000000 // unallocated +@000359 000000 // unallocated +@00035a 000000 // unallocated +@00035b 000000 // unallocated +@00035c 000000 // unallocated +@00035d 000000 // unallocated +@00035e 000000 // unallocated +@00035f 000000 // unallocated +@000360 000000 // unallocated +@000361 000000 // unallocated +@000362 000000 // unallocated +@000363 000000 // unallocated +@000364 000000 // unallocated +@000365 000000 // unallocated +@000366 000000 // unallocated +@000367 000000 // unallocated +@000368 000000 // unallocated +@000369 000000 // unallocated +@00036a 000000 // unallocated +@00036b 000000 // unallocated +@00036c 000000 // unallocated +@00036d 000000 // unallocated +@00036e 000000 // unallocated +@00036f 000000 // unallocated +@000370 000000 // unallocated +@000371 000000 // unallocated +@000372 000000 // unallocated +@000373 000000 // unallocated +@000374 000000 // unallocated +@000375 000000 // unallocated +@000376 000000 // unallocated +@000377 000000 // unallocated +@000378 000000 // unallocated +@000379 000000 // unallocated +@00037a 000000 // unallocated +@00037b 000000 // unallocated +@00037c 000000 // unallocated +@00037d 000000 // unallocated +@00037e 000000 // unallocated +@00037f 000000 // unallocated +@000380 000000 // unallocated +@000381 000000 // unallocated +@000382 000000 // unallocated +@000383 000000 // unallocated +@000384 000000 // unallocated +@000385 000000 // unallocated +@000386 000000 // unallocated +@000387 000000 // unallocated +@000388 000000 // unallocated +@000389 000000 // unallocated +@00038a 000000 // unallocated +@00038b 000000 // unallocated +@00038c 000000 // unallocated +@00038d 000000 // unallocated +@00038e 000000 // unallocated +@00038f 000000 // unallocated +@000390 000000 // unallocated +@000391 000000 // unallocated +@000392 000000 // unallocated +@000393 000000 // unallocated +@000394 000000 // unallocated +@000395 000000 // unallocated +@000396 000000 // unallocated +@000397 000000 // unallocated +@000398 000000 // unallocated +@000399 000000 // unallocated +@00039a 000000 // unallocated +@00039b 000000 // unallocated +@00039c 000000 // unallocated +@00039d 000000 // unallocated +@00039e 000000 // unallocated +@00039f 000000 // unallocated +@0003a0 000000 // unallocated +@0003a1 000000 // unallocated +@0003a2 000000 // unallocated +@0003a3 000000 // unallocated +@0003a4 000000 // unallocated +@0003a5 000000 // unallocated +@0003a6 000000 // unallocated +@0003a7 000000 // unallocated +@0003a8 000000 // unallocated +@0003a9 000000 // unallocated +@0003aa 000000 // unallocated +@0003ab 000000 // unallocated +@0003ac 000000 // unallocated +@0003ad 000000 // unallocated +@0003ae 000000 // unallocated +@0003af 000000 // unallocated +@0003b0 000000 // unallocated +@0003b1 000000 // unallocated +@0003b2 000000 // unallocated +@0003b3 000000 // unallocated +@0003b4 000000 // unallocated +@0003b5 000000 // unallocated +@0003b6 000000 // unallocated +@0003b7 000000 // unallocated +@0003b8 000000 // unallocated +@0003b9 000000 // unallocated +@0003ba 000000 // unallocated +@0003bb 000000 // unallocated +@0003bc 000000 // unallocated +@0003bd 000000 // unallocated +@0003be 000000 // unallocated +@0003bf 000000 // unallocated +@0003c0 000000 // unallocated +@0003c1 000000 // unallocated +@0003c2 000000 // unallocated +@0003c3 000000 // unallocated +@0003c4 000000 // unallocated +@0003c5 000000 // unallocated +@0003c6 000000 // unallocated +@0003c7 000000 // unallocated +@0003c8 000000 // unallocated +@0003c9 000000 // unallocated +@0003ca 000000 // unallocated +@0003cb 000000 // unallocated +@0003cc 000000 // unallocated +@0003cd 000000 // unallocated +@0003ce 000000 // unallocated +@0003cf 000000 // unallocated +@0003d0 000000 // unallocated +@0003d1 000000 // unallocated +@0003d2 000000 // unallocated +@0003d3 000000 // unallocated +@0003d4 000000 // unallocated +@0003d5 000000 // unallocated +@0003d6 000000 // unallocated +@0003d7 000000 // unallocated +@0003d8 000000 // unallocated +@0003d9 000000 // unallocated +@0003da 000000 // unallocated +@0003db 000000 // unallocated +@0003dc 000000 // unallocated +@0003dd 000000 // unallocated +@0003de 000000 // unallocated +@0003df 000000 // unallocated +@0003e0 000000 // unallocated +@0003e1 000000 // unallocated +@0003e2 000000 // unallocated +@0003e3 000000 // unallocated +@0003e4 000000 // unallocated +@0003e5 000000 // unallocated +@0003e6 000000 // unallocated +@0003e7 000000 // unallocated +@0003e8 000000 // unallocated +@0003e9 000000 // unallocated +@0003ea 000000 // unallocated +@0003eb 000000 // unallocated +@0003ec 000000 // unallocated +@0003ed 000000 // unallocated +@0003ee 000000 // unallocated +@0003ef 000000 // unallocated +@0003f0 000000 // unallocated +@0003f1 000000 // unallocated +@0003f2 000000 // unallocated +@0003f3 000000 // unallocated +@0003f4 000000 // unallocated +@0003f5 000000 // unallocated +@0003f6 000000 // unallocated +@0003f7 000000 // unallocated +@0003f8 000000 // unallocated +@0003f9 000000 // unallocated +@0003fa 000000 // unallocated +@0003fb 000000 // unallocated +@0003fc 000000 // unallocated +@0003fd 000000 // unallocated +@0003fe 000000 // unallocated +@0003ff 000000 // unallocated +@000400 000000 // unallocated +@000401 000000 // unallocated +@000402 000000 // unallocated +@000403 000000 // unallocated +@000404 000000 // unallocated +@000405 000000 // unallocated +@000406 000000 // unallocated +@000407 000000 // unallocated +@000408 000000 // unallocated +@000409 000000 // unallocated +@00040a 000000 // unallocated +@00040b 000000 // unallocated +@00040c 000000 // unallocated +@00040d 000000 // unallocated +@00040e 000000 // unallocated +@00040f 000000 // unallocated +@000410 000000 // unallocated +@000411 000000 // unallocated +@000412 000000 // unallocated +@000413 000000 // unallocated +@000414 000000 // unallocated +@000415 000000 // unallocated +@000416 000000 // unallocated +@000417 000000 // unallocated +@000418 000000 // unallocated +@000419 000000 // unallocated +@00041a 000000 // unallocated +@00041b 000000 // unallocated +@00041c 000000 // unallocated +@00041d 000000 // unallocated +@00041e 000000 // unallocated +@00041f 000000 // unallocated +@000420 000000 // unallocated +@000421 000000 // unallocated +@000422 000000 // unallocated +@000423 000000 // unallocated +@000424 000000 // unallocated +@000425 000000 // unallocated +@000426 000000 // unallocated +@000427 000000 // unallocated +@000428 000000 // unallocated +@000429 000000 // unallocated +@00042a 000000 // unallocated +@00042b 000000 // unallocated +@00042c 000000 // unallocated +@00042d 000000 // unallocated +@00042e 000000 // unallocated +@00042f 000000 // unallocated +@000430 000000 // unallocated +@000431 000000 // unallocated +@000432 000000 // unallocated +@000433 000000 // unallocated +@000434 000000 // unallocated +@000435 000000 // unallocated +@000436 000000 // unallocated +@000437 000000 // unallocated +@000438 000000 // unallocated +@000439 000000 // unallocated +@00043a 000000 // unallocated +@00043b 000000 // unallocated +@00043c 000000 // unallocated +@00043d 000000 // unallocated +@00043e 000000 // unallocated +@00043f 000000 // unallocated +@000440 000000 // unallocated +@000441 000000 // unallocated +@000442 000000 // unallocated +@000443 000000 // unallocated +@000444 000000 // unallocated +@000445 000000 // unallocated +@000446 000000 // unallocated +@000447 000000 // unallocated +@000448 000000 // unallocated +@000449 000000 // unallocated +@00044a 000000 // unallocated +@00044b 000000 // unallocated +@00044c 000000 // unallocated +@00044d 000000 // unallocated +@00044e 000000 // unallocated +@00044f 000000 // unallocated +@000450 000000 // unallocated +@000451 000000 // unallocated +@000452 000000 // unallocated +@000453 000000 // unallocated +@000454 000000 // unallocated +@000455 000000 // unallocated +@000456 000000 // unallocated +@000457 000000 // unallocated +@000458 000000 // unallocated +@000459 000000 // unallocated +@00045a 000000 // unallocated +@00045b 000000 // unallocated +@00045c 000000 // unallocated +@00045d 000000 // unallocated +@00045e 000000 // unallocated +@00045f 000000 // unallocated +@000460 000000 // unallocated +@000461 000000 // unallocated +@000462 000000 // unallocated +@000463 000000 // unallocated +@000464 000000 // unallocated +@000465 000000 // unallocated +@000466 000000 // unallocated +@000467 000000 // unallocated +@000468 000000 // unallocated +@000469 000000 // unallocated +@00046a 000000 // unallocated +@00046b 000000 // unallocated +@00046c 000000 // unallocated +@00046d 000000 // unallocated +@00046e 000000 // unallocated +@00046f 000000 // unallocated +@000470 000000 // unallocated +@000471 000000 // unallocated +@000472 000000 // unallocated +@000473 000000 // unallocated +@000474 000000 // unallocated +@000475 000000 // unallocated +@000476 000000 // unallocated +@000477 000000 // unallocated +@000478 000000 // unallocated +@000479 000000 // unallocated +@00047a 000000 // unallocated +@00047b 000000 // unallocated +@00047c 000000 // unallocated +@00047d 000000 // unallocated +@00047e 000000 // unallocated +@00047f 000000 // unallocated +@000480 000000 // unallocated +@000481 000000 // unallocated +@000482 000000 // unallocated +@000483 000000 // unallocated +@000484 000000 // unallocated +@000485 000000 // unallocated +@000486 000000 // unallocated +@000487 000000 // unallocated +@000488 000000 // unallocated +@000489 000000 // unallocated +@00048a 000000 // unallocated +@00048b 000000 // unallocated +@00048c 000000 // unallocated +@00048d 000000 // unallocated +@00048e 000000 // unallocated +@00048f 000000 // unallocated +@000490 000000 // unallocated +@000491 000000 // unallocated +@000492 000000 // unallocated +@000493 000000 // unallocated +@000494 000000 // unallocated +@000495 000000 // unallocated +@000496 000000 // unallocated +@000497 000000 // unallocated +@000498 000000 // unallocated +@000499 000000 // unallocated +@00049a 000000 // unallocated +@00049b 000000 // unallocated +@00049c 000000 // unallocated +@00049d 000000 // unallocated +@00049e 000000 // unallocated +@00049f 000000 // unallocated +@0004a0 000000 // unallocated +@0004a1 000000 // unallocated +@0004a2 000000 // unallocated +@0004a3 000000 // unallocated +@0004a4 000000 // unallocated +@0004a5 000000 // unallocated +@0004a6 000000 // unallocated +@0004a7 000000 // unallocated +@0004a8 000000 // unallocated +@0004a9 000000 // unallocated +@0004aa 000000 // unallocated +@0004ab 000000 // unallocated +@0004ac 000000 // unallocated +@0004ad 000000 // unallocated +@0004ae 000000 // unallocated +@0004af 000000 // unallocated +@0004b0 000000 // unallocated +@0004b1 000000 // unallocated +@0004b2 000000 // unallocated +@0004b3 000000 // unallocated +@0004b4 000000 // unallocated +@0004b5 000000 // unallocated +@0004b6 000000 // unallocated +@0004b7 000000 // unallocated +@0004b8 000000 // unallocated +@0004b9 000000 // unallocated +@0004ba 000000 // unallocated +@0004bb 000000 // unallocated +@0004bc 000000 // unallocated +@0004bd 000000 // unallocated +@0004be 000000 // unallocated +@0004bf 000000 // unallocated +@0004c0 000000 // unallocated +@0004c1 000000 // unallocated +@0004c2 000000 // unallocated +@0004c3 000000 // unallocated +@0004c4 000000 // unallocated +@0004c5 000000 // unallocated +@0004c6 000000 // unallocated +@0004c7 000000 // unallocated +@0004c8 000000 // unallocated +@0004c9 000000 // unallocated +@0004ca 000000 // unallocated +@0004cb 000000 // unallocated +@0004cc 000000 // unallocated +@0004cd 000000 // unallocated +@0004ce 000000 // unallocated +@0004cf 000000 // unallocated +@0004d0 000000 // unallocated +@0004d1 000000 // unallocated +@0004d2 000000 // unallocated +@0004d3 000000 // unallocated +@0004d4 000000 // unallocated +@0004d5 000000 // unallocated +@0004d6 000000 // unallocated +@0004d7 000000 // unallocated +@0004d8 000000 // unallocated +@0004d9 000000 // unallocated +@0004da 000000 // unallocated +@0004db 000000 // unallocated +@0004dc 000000 // unallocated +@0004dd 000000 // unallocated +@0004de 000000 // unallocated +@0004df 000000 // unallocated +@0004e0 000000 // unallocated +@0004e1 000000 // unallocated +@0004e2 000000 // unallocated +@0004e3 000000 // unallocated +@0004e4 000000 // unallocated +@0004e5 000000 // unallocated +@0004e6 000000 // unallocated +@0004e7 000000 // unallocated +@0004e8 000000 // unallocated +@0004e9 000000 // unallocated +@0004ea 000000 // unallocated +@0004eb 000000 // unallocated +@0004ec 000000 // unallocated +@0004ed 000000 // unallocated +@0004ee 000000 // unallocated +@0004ef 000000 // unallocated +@0004f0 000000 // unallocated +@0004f1 000000 // unallocated +@0004f2 000000 // unallocated +@0004f3 000000 // unallocated +@0004f4 000000 // unallocated +@0004f5 000000 // unallocated +@0004f6 000000 // unallocated +@0004f7 000000 // unallocated +@0004f8 000000 // unallocated +@0004f9 000000 // unallocated +@0004fa 000000 // unallocated +@0004fb 000000 // unallocated +@0004fc 000000 // unallocated +@0004fd 000000 // unallocated +@0004fe 000000 // unallocated +@0004ff 000000 // unallocated +@000500 000000 // unallocated +@000501 000000 // unallocated +@000502 000000 // unallocated +@000503 000000 // unallocated +@000504 000000 // unallocated +@000505 000000 // unallocated +@000506 000000 // unallocated +@000507 000000 // unallocated +@000508 000000 // unallocated +@000509 000000 // unallocated +@00050a 000000 // unallocated +@00050b 000000 // unallocated +@00050c 000000 // unallocated +@00050d 000000 // unallocated +@00050e 000000 // unallocated +@00050f 000000 // unallocated +@000510 000000 // unallocated +@000511 000000 // unallocated +@000512 000000 // unallocated +@000513 000000 // unallocated +@000514 000000 // unallocated +@000515 000000 // unallocated +@000516 000000 // unallocated +@000517 000000 // unallocated +@000518 000000 // unallocated +@000519 000000 // unallocated +@00051a 000000 // unallocated +@00051b 000000 // unallocated +@00051c 000000 // unallocated +@00051d 000000 // unallocated +@00051e 000000 // unallocated +@00051f 000000 // unallocated +@000520 000000 // unallocated +@000521 000000 // unallocated +@000522 000000 // unallocated +@000523 000000 // unallocated +@000524 000000 // unallocated +@000525 000000 // unallocated +@000526 000000 // unallocated +@000527 000000 // unallocated +@000528 000000 // unallocated +@000529 000000 // unallocated +@00052a 000000 // unallocated +@00052b 000000 // unallocated +@00052c 000000 // unallocated +@00052d 000000 // unallocated +@00052e 000000 // unallocated +@00052f 000000 // unallocated +@000530 000000 // unallocated +@000531 000000 // unallocated +@000532 000000 // unallocated +@000533 000000 // unallocated +@000534 000000 // unallocated +@000535 000000 // unallocated +@000536 000000 // unallocated +@000537 000000 // unallocated +@000538 000000 // unallocated +@000539 000000 // unallocated +@00053a 000000 // unallocated +@00053b 000000 // unallocated +@00053c 000000 // unallocated +@00053d 000000 // unallocated +@00053e 000000 // unallocated +@00053f 000000 // unallocated +@000540 000000 // unallocated +@000541 000000 // unallocated +@000542 000000 // unallocated +@000543 000000 // unallocated +@000544 000000 // unallocated +@000545 000000 // unallocated +@000546 000000 // unallocated +@000547 000000 // unallocated +@000548 000000 // unallocated +@000549 000000 // unallocated +@00054a 000000 // unallocated +@00054b 000000 // unallocated +@00054c 000000 // unallocated +@00054d 000000 // unallocated +@00054e 000000 // unallocated +@00054f 000000 // unallocated +@000550 000000 // unallocated +@000551 000000 // unallocated +@000552 000000 // unallocated +@000553 000000 // unallocated +@000554 000000 // unallocated +@000555 000000 // unallocated +@000556 000000 // unallocated +@000557 000000 // unallocated +@000558 000000 // unallocated +@000559 000000 // unallocated +@00055a 000000 // unallocated +@00055b 000000 // unallocated +@00055c 000000 // unallocated +@00055d 000000 // unallocated +@00055e 000000 // unallocated +@00055f 000000 // unallocated +@000560 000000 // unallocated +@000561 000000 // unallocated +@000562 000000 // unallocated +@000563 000000 // unallocated +@000564 000000 // unallocated +@000565 000000 // unallocated +@000566 000000 // unallocated +@000567 000000 // unallocated +@000568 000000 // unallocated +@000569 000000 // unallocated +@00056a 000000 // unallocated +@00056b 000000 // unallocated +@00056c 000000 // unallocated +@00056d 000000 // unallocated +@00056e 000000 // unallocated +@00056f 000000 // unallocated +@000570 000000 // unallocated +@000571 000000 // unallocated +@000572 000000 // unallocated +@000573 000000 // unallocated +@000574 000000 // unallocated +@000575 000000 // unallocated +@000576 000000 // unallocated +@000577 000000 // unallocated +@000578 000000 // unallocated +@000579 000000 // unallocated +@00057a 000000 // unallocated +@00057b 000000 // unallocated +@00057c 000000 // unallocated +@00057d 000000 // unallocated +@00057e 000000 // unallocated +@00057f 000000 // unallocated +@000580 000000 // unallocated +@000581 000000 // unallocated +@000582 000000 // unallocated +@000583 000000 // unallocated +@000584 000000 // unallocated +@000585 000000 // unallocated +@000586 000000 // unallocated +@000587 000000 // unallocated +@000588 000000 // unallocated +@000589 000000 // unallocated +@00058a 000000 // unallocated +@00058b 000000 // unallocated +@00058c 000000 // unallocated +@00058d 000000 // unallocated +@00058e 000000 // unallocated +@00058f 000000 // unallocated +@000590 000000 // unallocated +@000591 000000 // unallocated +@000592 000000 // unallocated +@000593 000000 // unallocated +@000594 000000 // unallocated +@000595 000000 // unallocated +@000596 000000 // unallocated +@000597 000000 // unallocated +@000598 000000 // unallocated +@000599 000000 // unallocated +@00059a 000000 // unallocated +@00059b 000000 // unallocated +@00059c 000000 // unallocated +@00059d 000000 // unallocated +@00059e 000000 // unallocated +@00059f 000000 // unallocated +@0005a0 000000 // unallocated +@0005a1 000000 // unallocated +@0005a2 000000 // unallocated +@0005a3 000000 // unallocated +@0005a4 000000 // unallocated +@0005a5 000000 // unallocated +@0005a6 000000 // unallocated +@0005a7 000000 // unallocated +@0005a8 000000 // unallocated +@0005a9 000000 // unallocated +@0005aa 000000 // unallocated +@0005ab 000000 // unallocated +@0005ac 000000 // unallocated +@0005ad 000000 // unallocated +@0005ae 000000 // unallocated +@0005af 000000 // unallocated +@0005b0 000000 // unallocated +@0005b1 000000 // unallocated +@0005b2 000000 // unallocated +@0005b3 000000 // unallocated +@0005b4 000000 // unallocated +@0005b5 000000 // unallocated +@0005b6 000000 // unallocated +@0005b7 000000 // unallocated +@0005b8 000000 // unallocated +@0005b9 000000 // unallocated +@0005ba 000000 // unallocated +@0005bb 000000 // unallocated +@0005bc 000000 // unallocated +@0005bd 000000 // unallocated +@0005be 000000 // unallocated +@0005bf 000000 // unallocated +@0005c0 000000 // unallocated +@0005c1 000000 // unallocated +@0005c2 000000 // unallocated +@0005c3 000000 // unallocated +@0005c4 000000 // unallocated +@0005c5 000000 // unallocated +@0005c6 000000 // unallocated +@0005c7 000000 // unallocated +@0005c8 000000 // unallocated +@0005c9 000000 // unallocated +@0005ca 000000 // unallocated +@0005cb 000000 // unallocated +@0005cc 000000 // unallocated +@0005cd 000000 // unallocated +@0005ce 000000 // unallocated +@0005cf 000000 // unallocated +@0005d0 000000 // unallocated +@0005d1 000000 // unallocated +@0005d2 000000 // unallocated +@0005d3 000000 // unallocated +@0005d4 000000 // unallocated +@0005d5 000000 // unallocated +@0005d6 000000 // unallocated +@0005d7 000000 // unallocated +@0005d8 000000 // unallocated +@0005d9 000000 // unallocated +@0005da 000000 // unallocated +@0005db 000000 // unallocated +@0005dc 000000 // unallocated +@0005dd 000000 // unallocated +@0005de 000000 // unallocated +@0005df 000000 // unallocated +@0005e0 000000 // unallocated +@0005e1 000000 // unallocated +@0005e2 000000 // unallocated +@0005e3 000000 // unallocated +@0005e4 000000 // unallocated +@0005e5 000000 // unallocated +@0005e6 000000 // unallocated +@0005e7 000000 // unallocated +@0005e8 000000 // unallocated +@0005e9 000000 // unallocated +@0005ea 000000 // unallocated +@0005eb 000000 // unallocated +@0005ec 000000 // unallocated +@0005ed 000000 // unallocated +@0005ee 000000 // unallocated +@0005ef 000000 // unallocated +@0005f0 000000 // unallocated +@0005f1 000000 // unallocated +@0005f2 000000 // unallocated +@0005f3 000000 // unallocated +@0005f4 000000 // unallocated +@0005f5 000000 // unallocated +@0005f6 000000 // unallocated +@0005f7 000000 // unallocated +@0005f8 000000 // unallocated +@0005f9 000000 // unallocated +@0005fa 000000 // unallocated +@0005fb 000000 // unallocated +@0005fc 000000 // unallocated +@0005fd 000000 // unallocated +@0005fe 000000 // unallocated +@0005ff 000000 // unallocated +@000600 000000 // unallocated +@000601 000000 // unallocated +@000602 000000 // unallocated +@000603 000000 // unallocated +@000604 000000 // unallocated +@000605 000000 // unallocated +@000606 000000 // unallocated +@000607 000000 // unallocated +@000608 000000 // unallocated +@000609 000000 // unallocated +@00060a 000000 // unallocated +@00060b 000000 // unallocated +@00060c 000000 // unallocated +@00060d 000000 // unallocated +@00060e 000000 // unallocated +@00060f 000000 // unallocated +@000610 000000 // unallocated +@000611 000000 // unallocated +@000612 000000 // unallocated +@000613 000000 // unallocated +@000614 000000 // unallocated +@000615 000000 // unallocated +@000616 000000 // unallocated +@000617 000000 // unallocated +@000618 000000 // unallocated +@000619 000000 // unallocated +@00061a 000000 // unallocated +@00061b 000000 // unallocated +@00061c 000000 // unallocated +@00061d 000000 // unallocated +@00061e 000000 // unallocated +@00061f 000000 // unallocated +@000620 000000 // unallocated +@000621 000000 // unallocated +@000622 000000 // unallocated +@000623 000000 // unallocated +@000624 000000 // unallocated +@000625 000000 // unallocated +@000626 000000 // unallocated +@000627 000000 // unallocated +@000628 000000 // unallocated +@000629 000000 // unallocated +@00062a 000000 // unallocated +@00062b 000000 // unallocated +@00062c 000000 // unallocated +@00062d 000000 // unallocated +@00062e 000000 // unallocated +@00062f 000000 // unallocated +@000630 000000 // unallocated +@000631 000000 // unallocated +@000632 000000 // unallocated +@000633 000000 // unallocated +@000634 000000 // unallocated +@000635 000000 // unallocated +@000636 000000 // unallocated +@000637 000000 // unallocated +@000638 000000 // unallocated +@000639 000000 // unallocated +@00063a 000000 // unallocated +@00063b 000000 // unallocated +@00063c 000000 // unallocated +@00063d 000000 // unallocated +@00063e 000000 // unallocated +@00063f 000000 // unallocated +@000640 000000 // unallocated +@000641 000000 // unallocated +@000642 000000 // unallocated +@000643 000000 // unallocated +@000644 000000 // unallocated +@000645 000000 // unallocated +@000646 000000 // unallocated +@000647 000000 // unallocated +@000648 000000 // unallocated +@000649 000000 // unallocated +@00064a 000000 // unallocated +@00064b 000000 // unallocated +@00064c 000000 // unallocated +@00064d 000000 // unallocated +@00064e 000000 // unallocated +@00064f 000000 // unallocated +@000650 000000 // unallocated +@000651 000000 // unallocated +@000652 000000 // unallocated +@000653 000000 // unallocated +@000654 000000 // unallocated +@000655 000000 // unallocated +@000656 000000 // unallocated +@000657 000000 // unallocated +@000658 000000 // unallocated +@000659 000000 // unallocated +@00065a 000000 // unallocated +@00065b 000000 // unallocated +@00065c 000000 // unallocated +@00065d 000000 // unallocated +@00065e 000000 // unallocated +@00065f 000000 // unallocated +@000660 000000 // unallocated +@000661 000000 // unallocated +@000662 000000 // unallocated +@000663 000000 // unallocated +@000664 000000 // unallocated +@000665 000000 // unallocated +@000666 000000 // unallocated +@000667 000000 // unallocated +@000668 000000 // unallocated +@000669 000000 // unallocated +@00066a 000000 // unallocated +@00066b 000000 // unallocated +@00066c 000000 // unallocated +@00066d 000000 // unallocated +@00066e 000000 // unallocated +@00066f 000000 // unallocated +@000670 000000 // unallocated +@000671 000000 // unallocated +@000672 000000 // unallocated +@000673 000000 // unallocated +@000674 000000 // unallocated +@000675 000000 // unallocated +@000676 000000 // unallocated +@000677 000000 // unallocated +@000678 000000 // unallocated +@000679 000000 // unallocated +@00067a 000000 // unallocated +@00067b 000000 // unallocated +@00067c 000000 // unallocated +@00067d 000000 // unallocated +@00067e 000000 // unallocated +@00067f 000000 // unallocated +@000680 000000 // unallocated +@000681 000000 // unallocated +@000682 000000 // unallocated +@000683 000000 // unallocated +@000684 000000 // unallocated +@000685 000000 // unallocated +@000686 000000 // unallocated +@000687 000000 // unallocated +@000688 000000 // unallocated +@000689 000000 // unallocated +@00068a 000000 // unallocated +@00068b 000000 // unallocated +@00068c 000000 // unallocated +@00068d 000000 // unallocated +@00068e 000000 // unallocated +@00068f 000000 // unallocated +@000690 000000 // unallocated +@000691 000000 // unallocated +@000692 000000 // unallocated +@000693 000000 // unallocated +@000694 000000 // unallocated +@000695 000000 // unallocated +@000696 000000 // unallocated +@000697 000000 // unallocated +@000698 000000 // unallocated +@000699 000000 // unallocated +@00069a 000000 // unallocated +@00069b 000000 // unallocated +@00069c 000000 // unallocated +@00069d 000000 // unallocated +@00069e 000000 // unallocated +@00069f 000000 // unallocated +@0006a0 000000 // unallocated +@0006a1 000000 // unallocated +@0006a2 000000 // unallocated +@0006a3 000000 // unallocated +@0006a4 000000 // unallocated +@0006a5 000000 // unallocated +@0006a6 000000 // unallocated +@0006a7 000000 // unallocated +@0006a8 000000 // unallocated +@0006a9 000000 // unallocated +@0006aa 000000 // unallocated +@0006ab 000000 // unallocated +@0006ac 000000 // unallocated +@0006ad 000000 // unallocated +@0006ae 000000 // unallocated +@0006af 000000 // unallocated +@0006b0 000000 // unallocated +@0006b1 000000 // unallocated +@0006b2 000000 // unallocated +@0006b3 000000 // unallocated +@0006b4 000000 // unallocated +@0006b5 000000 // unallocated +@0006b6 000000 // unallocated +@0006b7 000000 // unallocated +@0006b8 000000 // unallocated +@0006b9 000000 // unallocated +@0006ba 000000 // unallocated +@0006bb 000000 // unallocated +@0006bc 000000 // unallocated +@0006bd 000000 // unallocated +@0006be 000000 // unallocated +@0006bf 000000 // unallocated +@0006c0 000000 // unallocated +@0006c1 000000 // unallocated +@0006c2 000000 // unallocated +@0006c3 000000 // unallocated +@0006c4 000000 // unallocated +@0006c5 000000 // unallocated +@0006c6 000000 // unallocated +@0006c7 000000 // unallocated +@0006c8 000000 // unallocated +@0006c9 000000 // unallocated +@0006ca 000000 // unallocated +@0006cb 000000 // unallocated +@0006cc 000000 // unallocated +@0006cd 000000 // unallocated +@0006ce 000000 // unallocated +@0006cf 000000 // unallocated +@0006d0 000000 // unallocated +@0006d1 000000 // unallocated +@0006d2 000000 // unallocated +@0006d3 000000 // unallocated +@0006d4 000000 // unallocated +@0006d5 000000 // unallocated +@0006d6 000000 // unallocated +@0006d7 000000 // unallocated +@0006d8 000000 // unallocated +@0006d9 000000 // unallocated +@0006da 000000 // unallocated +@0006db 000000 // unallocated +@0006dc 000000 // unallocated +@0006dd 000000 // unallocated +@0006de 000000 // unallocated +@0006df 000000 // unallocated +@0006e0 000000 // unallocated +@0006e1 000000 // unallocated +@0006e2 000000 // unallocated +@0006e3 000000 // unallocated +@0006e4 000000 // unallocated +@0006e5 000000 // unallocated +@0006e6 000000 // unallocated +@0006e7 000000 // unallocated +@0006e8 000000 // unallocated +@0006e9 000000 // unallocated +@0006ea 000000 // unallocated +@0006eb 000000 // unallocated +@0006ec 000000 // unallocated +@0006ed 000000 // unallocated +@0006ee 000000 // unallocated +@0006ef 000000 // unallocated +@0006f0 000000 // unallocated +@0006f1 000000 // unallocated +@0006f2 000000 // unallocated +@0006f3 000000 // unallocated +@0006f4 000000 // unallocated +@0006f5 000000 // unallocated +@0006f6 000000 // unallocated +@0006f7 000000 // unallocated +@0006f8 000000 // unallocated +@0006f9 000000 // unallocated +@0006fa 000000 // unallocated +@0006fb 000000 // unallocated +@0006fc 000000 // unallocated +@0006fd 000000 // unallocated +@0006fe 000000 // unallocated +@0006ff 000000 // unallocated +@000700 000000 // unallocated +@000701 000000 // unallocated +@000702 000000 // unallocated +@000703 000000 // unallocated +@000704 000000 // unallocated +@000705 000000 // unallocated +@000706 000000 // unallocated +@000707 000000 // unallocated +@000708 000000 // unallocated +@000709 000000 // unallocated +@00070a 000000 // unallocated +@00070b 000000 // unallocated +@00070c 000000 // unallocated +@00070d 000000 // unallocated +@00070e 000000 // unallocated +@00070f 000000 // unallocated +@000710 000000 // unallocated +@000711 000000 // unallocated +@000712 000000 // unallocated +@000713 000000 // unallocated +@000714 000000 // unallocated +@000715 000000 // unallocated +@000716 000000 // unallocated +@000717 000000 // unallocated +@000718 000000 // unallocated +@000719 000000 // unallocated +@00071a 000000 // unallocated +@00071b 000000 // unallocated +@00071c 000000 // unallocated +@00071d 000000 // unallocated +@00071e 000000 // unallocated +@00071f 000000 // unallocated +@000720 000000 // unallocated +@000721 000000 // unallocated +@000722 000000 // unallocated +@000723 000000 // unallocated +@000724 000000 // unallocated +@000725 000000 // unallocated +@000726 000000 // unallocated +@000727 000000 // unallocated +@000728 000000 // unallocated +@000729 000000 // unallocated +@00072a 000000 // unallocated +@00072b 000000 // unallocated +@00072c 000000 // unallocated +@00072d 000000 // unallocated +@00072e 000000 // unallocated +@00072f 000000 // unallocated +@000730 000000 // unallocated +@000731 000000 // unallocated +@000732 000000 // unallocated +@000733 000000 // unallocated +@000734 000000 // unallocated +@000735 000000 // unallocated +@000736 000000 // unallocated +@000737 000000 // unallocated +@000738 000000 // unallocated +@000739 000000 // unallocated +@00073a 000000 // unallocated +@00073b 000000 // unallocated +@00073c 000000 // unallocated +@00073d 000000 // unallocated +@00073e 000000 // unallocated +@00073f 000000 // unallocated +@000740 000000 // unallocated +@000741 000000 // unallocated +@000742 000000 // unallocated +@000743 000000 // unallocated +@000744 000000 // unallocated +@000745 000000 // unallocated +@000746 000000 // unallocated +@000747 000000 // unallocated +@000748 000000 // unallocated +@000749 000000 // unallocated +@00074a 000000 // unallocated +@00074b 000000 // unallocated +@00074c 000000 // unallocated +@00074d 000000 // unallocated +@00074e 000000 // unallocated +@00074f 000000 // unallocated +@000750 000000 // unallocated +@000751 000000 // unallocated +@000752 000000 // unallocated +@000753 000000 // unallocated +@000754 000000 // unallocated +@000755 000000 // unallocated +@000756 000000 // unallocated +@000757 000000 // unallocated +@000758 000000 // unallocated +@000759 000000 // unallocated +@00075a 000000 // unallocated +@00075b 000000 // unallocated +@00075c 000000 // unallocated +@00075d 000000 // unallocated +@00075e 000000 // unallocated +@00075f 000000 // unallocated +@000760 000000 // unallocated +@000761 000000 // unallocated +@000762 000000 // unallocated +@000763 000000 // unallocated +@000764 000000 // unallocated +@000765 000000 // unallocated +@000766 000000 // unallocated +@000767 000000 // unallocated +@000768 000000 // NON_SECRET_FUSES: NON_SECRET_FUSES_DIGEST +@000769 000000 // NON_SECRET_FUSES: NON_SECRET_FUSES_DIGEST +@00076a 000000 // NON_SECRET_FUSES: NON_SECRET_FUSES_DIGEST +@00076b 000000 // NON_SECRET_FUSES: NON_SECRET_FUSES_DIGEST +@00076c 0abe74 // SECRET0: TEST_UNLOCK_TOKEN +@00076d 18d585 // SECRET0: TEST_UNLOCK_TOKEN +@00076e 0ef236 // SECRET0: TEST_UNLOCK_TOKEN +@00076f 0fbdd4 // SECRET0: TEST_UNLOCK_TOKEN +@000770 0da763 // SECRET0: TEST_UNLOCK_TOKEN +@000771 078f14 // SECRET0: TEST_UNLOCK_TOKEN +@000772 2c66b5 // SECRET0: TEST_UNLOCK_TOKEN +@000773 1782eb // SECRET0: TEST_UNLOCK_TOKEN +@000774 36ce3e // SECRET0: TEST_EXIT_TOKEN +@000775 3fff0a // SECRET0: TEST_EXIT_TOKEN +@000776 0dbafa // SECRET0: TEST_EXIT_TOKEN +@000777 06efe9 // SECRET0: TEST_EXIT_TOKEN +@000778 28d884 // SECRET0: TEST_EXIT_TOKEN +@000779 103b6a // SECRET0: TEST_EXIT_TOKEN +@00077a 373839 // SECRET0: TEST_EXIT_TOKEN +@00077b 185ee6 // SECRET0: TEST_EXIT_TOKEN +@00077c 01db6b // SECRET0: SECRET0_DIGEST +@00077d 14e277 // SECRET0: SECRET0_DIGEST +@00077e 39d7fa // SECRET0: SECRET0_DIGEST +@00077f 0c7958 // SECRET0: SECRET0_DIGEST +@000780 11983e // SECRET1: UDS_SEED +@000781 194522 // SECRET1: UDS_SEED +@000782 34d039 // SECRET1: UDS_SEED +@000783 39b513 // SECRET1: UDS_SEED +@000784 3d72fd // SECRET1: UDS_SEED +@000785 16806a // SECRET1: UDS_SEED +@000786 04ef88 // SECRET1: UDS_SEED +@000787 2cede0 // SECRET1: UDS_SEED +@000788 349b99 // SECRET1: UDS_SEED +@000789 2495c3 // SECRET1: UDS_SEED +@00078a 29eb4a // SECRET1: UDS_SEED +@00078b 0d8810 // SECRET1: UDS_SEED +@00078c 2579dd // SECRET1: UDS_SEED +@00078d 08a515 // SECRET1: UDS_SEED +@00078e 350dcb // SECRET1: UDS_SEED +@00078f 3f8310 // SECRET1: UDS_SEED +@000790 09deb2 // SECRET1: UDS_SEED +@000791 28dbd8 // SECRET1: UDS_SEED +@000792 1cb08e // SECRET1: UDS_SEED +@000793 1ce3d1 // SECRET1: UDS_SEED +@000794 0ee95a // SECRET1: UDS_SEED +@000795 330b0b // SECRET1: UDS_SEED +@000796 1fd151 // SECRET1: UDS_SEED +@000797 36aab7 // SECRET1: UDS_SEED +@000798 2d7ccb // SECRET1: SECRET1_DIGEST +@000799 2b337b // SECRET1: SECRET1_DIGEST +@00079a 0dc5d0 // SECRET1: SECRET1_DIGEST +@00079b 2fbde5 // SECRET1: SECRET1_DIGEST +@00079c 0d9676 // SECRET2: FIELD_ENTROPY +@00079d 3a0e83 // SECRET2: FIELD_ENTROPY +@00079e 2b4b44 // SECRET2: FIELD_ENTROPY +@00079f 230424 // SECRET2: FIELD_ENTROPY +@0007a0 0c1f5b // SECRET2: FIELD_ENTROPY +@0007a1 0c010b // SECRET2: FIELD_ENTROPY +@0007a2 01c3ce // SECRET2: FIELD_ENTROPY +@0007a3 16e770 // SECRET2: FIELD_ENTROPY +@0007a4 0a50dd // SECRET2: FIELD_ENTROPY +@0007a5 089323 // SECRET2: FIELD_ENTROPY +@0007a6 29a256 // SECRET2: FIELD_ENTROPY +@0007a7 3e113d // SECRET2: FIELD_ENTROPY +@0007a8 34f9bf // SECRET2: FIELD_ENTROPY +@0007a9 168415 // SECRET2: FIELD_ENTROPY +@0007aa 1e6db5 // SECRET2: FIELD_ENTROPY +@0007ab 3872f8 // SECRET2: FIELD_ENTROPY +@0007ac 21bbf6 // SECRET2: SECRET2_DIGEST +@0007ad 3c987a // SECRET2: SECRET2_DIGEST +@0007ae 3c126c // SECRET2: SECRET2_DIGEST +@0007af 1f3fce // SECRET2: SECRET2_DIGEST +@0007b0 07e854 // SECRET3: KEY_MANIFEST_PK_HASH +@0007b1 16b066 // SECRET3: KEY_MANIFEST_PK_HASH +@0007b2 06c183 // SECRET3: KEY_MANIFEST_PK_HASH +@0007b3 3b5e44 // SECRET3: KEY_MANIFEST_PK_HASH +@0007b4 20ee61 // SECRET3: KEY_MANIFEST_PK_HASH +@0007b5 126e02 // SECRET3: KEY_MANIFEST_PK_HASH +@0007b6 3d4404 // SECRET3: KEY_MANIFEST_PK_HASH +@0007b7 1f4132 // SECRET3: KEY_MANIFEST_PK_HASH +@0007b8 39179a // SECRET3: KEY_MANIFEST_PK_HASH +@0007b9 28dd1b // SECRET3: KEY_MANIFEST_PK_HASH +@0007ba 0f03b1 // SECRET3: KEY_MANIFEST_PK_HASH +@0007bb 3f9fca // SECRET3: KEY_MANIFEST_PK_HASH +@0007bc 2df0d1 // SECRET3: KEY_MANIFEST_PK_HASH +@0007bd 3b3c9b // SECRET3: KEY_MANIFEST_PK_HASH +@0007be 110ced // SECRET3: KEY_MANIFEST_PK_HASH +@0007bf 2e31ae // SECRET3: KEY_MANIFEST_PK_HASH +@0007c0 1175cb // SECRET3: KEY_MANIFEST_PK_HASH +@0007c1 185966 // SECRET3: KEY_MANIFEST_PK_HASH +@0007c2 0af4fb // SECRET3: KEY_MANIFEST_PK_HASH +@0007c3 3940e0 // SECRET3: KEY_MANIFEST_PK_HASH +@0007c4 05191a // SECRET3: KEY_MANIFEST_PK_HASH +@0007c5 05bbff // SECRET3: KEY_MANIFEST_PK_HASH +@0007c6 09bac2 // SECRET3: KEY_MANIFEST_PK_HASH +@0007c7 2bde1b // SECRET3: KEY_MANIFEST_PK_HASH +@0007c8 33fd6b // SECRET3: RMA_TOKEN +@0007c9 39fd83 // SECRET3: RMA_TOKEN +@0007ca 2905b9 // SECRET3: RMA_TOKEN +@0007cb 24ddc6 // SECRET3: RMA_TOKEN +@0007cc 3b773b // SECRET3: RMA_TOKEN +@0007cd 13774c // SECRET3: RMA_TOKEN +@0007ce 003530 // SECRET3: RMA_TOKEN +@0007cf 339b5e // SECRET3: RMA_TOKEN +@0007d0 000000 // SECRET3: SECRET3_DIGEST +@0007d1 000000 // SECRET3: SECRET3_DIGEST +@0007d2 000000 // SECRET3: SECRET3_DIGEST +@0007d3 000000 // SECRET3: SECRET3_DIGEST +@0007d4 3cb6df // LIFE_CYCLE: LC_TRANSITION_CNT +@0007d5 3dfaf4 // LIFE_CYCLE: LC_TRANSITION_CNT +@0007d6 271fbf // LIFE_CYCLE: LC_TRANSITION_CNT +@0007d7 1bceef // LIFE_CYCLE: LC_TRANSITION_CNT +@0007d8 3c5bbf // LIFE_CYCLE: LC_TRANSITION_CNT +@0007d9 389e22 // LIFE_CYCLE: LC_TRANSITION_CNT +@0007da 102786 // LIFE_CYCLE: LC_TRANSITION_CNT +@0007db 062f46 // LIFE_CYCLE: LC_TRANSITION_CNT +@0007dc 0102db // LIFE_CYCLE: LC_TRANSITION_CNT +@0007dd 3170c6 // LIFE_CYCLE: LC_TRANSITION_CNT +@0007de 364212 // LIFE_CYCLE: LC_TRANSITION_CNT +@0007df 014bf1 // LIFE_CYCLE: LC_TRANSITION_CNT +@0007e0 018941 // LIFE_CYCLE: LC_TRANSITION_CNT +@0007e1 1f8011 // LIFE_CYCLE: LC_TRANSITION_CNT +@0007e2 3e5c04 // LIFE_CYCLE: LC_TRANSITION_CNT +@0007e3 0bc209 // LIFE_CYCLE: LC_TRANSITION_CNT +@0007e4 08526c // LIFE_CYCLE: LC_TRANSITION_CNT +@0007e5 144274 // LIFE_CYCLE: LC_TRANSITION_CNT +@0007e6 20c067 // LIFE_CYCLE: LC_TRANSITION_CNT +@0007e7 2fa04a // LIFE_CYCLE: LC_TRANSITION_CNT +@0007e8 0e9255 // LIFE_CYCLE: LC_TRANSITION_CNT +@0007e9 20941b // LIFE_CYCLE: LC_TRANSITION_CNT +@0007ea 04bb61 // LIFE_CYCLE: LC_TRANSITION_CNT +@0007eb 0cda07 // LIFE_CYCLE: LC_TRANSITION_CNT +@0007ec 3e75ee // LIFE_CYCLE: LC_STATE +@0007ed 3d0ffe // LIFE_CYCLE: LC_STATE +@0007ee 077bfe // LIFE_CYCLE: LC_STATE +@0007ef 3a3f6f // LIFE_CYCLE: LC_STATE +@0007f0 1e5ffc // LIFE_CYCLE: LC_STATE +@0007f1 31fd9f // LIFE_CYCLE: LC_STATE +@0007f2 1ef99f // LIFE_CYCLE: LC_STATE +@0007f3 27db6f // LIFE_CYCLE: LC_STATE +@0007f4 39737f // LIFE_CYCLE: LC_STATE +@0007f5 3f6c6f // LIFE_CYCLE: LC_STATE +@0007f6 3b6f9e // LIFE_CYCLE: LC_STATE +@0007f7 3fd3dc // LIFE_CYCLE: LC_STATE +@0007f8 3e7752 // LIFE_CYCLE: LC_STATE +@0007f9 2ef2fe // LIFE_CYCLE: LC_STATE +@0007fa 2fbdd3 // LIFE_CYCLE: LC_STATE +@0007fb 1f6fcd // LIFE_CYCLE: LC_STATE +@0007fc 17b228 // LIFE_CYCLE: LC_STATE +@0007fd 091e71 // LIFE_CYCLE: LC_STATE +@0007fe 042d9b // LIFE_CYCLE: LC_STATE +@0007ff 2a4d8c // LIFE_CYCLE: LC_STATE \ No newline at end of file diff --git a/src/fuse_ctrl/data/otp_ctrl.hjson b/src/fuse_ctrl/data/otp_ctrl.hjson index 1ceaade0a..6bc2ae4e5 100755 --- a/src/fuse_ctrl/data/otp_ctrl.hjson +++ b/src/fuse_ctrl/data/otp_ctrl.hjson @@ -146,7 +146,7 @@ { name: "NumErrorEntries", desc: "Number of error register entries.", type: "int", - default: "8", // partitions + DAI/LCI + default: "9", // partitions + DAI/LCI local: "true" }, { name: "NumDaiWords", @@ -172,7 +172,7 @@ { name: "NumPart", desc: "Number of partitions", type: "int", - default: "6", + default: "7", local: "true" }, { name: "NumPartUnbuf", @@ -184,7 +184,7 @@ { name: "NumPartBuf", desc: "Number of buffered partitions (including 1 lifecycle partition)", type: "int", - default: "4", + default: "5", local: "true" }, { name: "VendorTestOffset", @@ -232,7 +232,7 @@ { name: "NonSecretFusesSize", desc: "Size of the NON_SECRET_FUSES partition", type: "int", - default: "3792", + default: "3736", local: "true" }, { name: "FmcKeyManifestSvnOffset", @@ -346,7 +346,7 @@ { name: "NonSecretFusesDigestOffset", desc: "Offset of NON_SECRET_FUSES_DIGEST", type: "int", - default: "3848", + default: "3792", local: "true" }, { name: "NonSecretFusesDigestSize", @@ -358,31 +358,43 @@ { name: "Secret0Offset", desc: "Offset of the SECRET0 partition", type: "int", - default: "3856", + default: "3800", local: "true" }, { name: "Secret0Size", desc: "Size of the SECRET0 partition", type: "int", - default: "56", + default: "40", local: "true" }, - { name: "UdsSeedOffset", - desc: "Offset of UDS_SEED", + { name: "TestUnlockTokenOffset", + desc: "Offset of TEST_UNLOCK_TOKEN", type: "int", - default: "3856", + default: "3800", local: "true" }, - { name: "UdsSeedSize", - desc: "Size of UDS_SEED", + { name: "TestUnlockTokenSize", + desc: "Size of TEST_UNLOCK_TOKEN", type: "int", - default: "48", + default: "16", + local: "true" + }, + { name: "TestExitTokenOffset", + desc: "Offset of TEST_EXIT_TOKEN", + type: "int", + default: "3816", + local: "true" + }, + { name: "TestExitTokenSize", + desc: "Size of TEST_EXIT_TOKEN", + type: "int", + default: "16", local: "true" }, { name: "Secret0DigestOffset", desc: "Offset of SECRET0_DIGEST", type: "int", - default: "3904", + default: "3832", local: "true" }, { name: "Secret0DigestSize", @@ -394,31 +406,31 @@ { name: "Secret1Offset", desc: "Offset of the SECRET1 partition", type: "int", - default: "3912", + default: "3840", local: "true" }, { name: "Secret1Size", desc: "Size of the SECRET1 partition", type: "int", - default: "40", + default: "56", local: "true" }, - { name: "FieldEntropyOffset", - desc: "Offset of FIELD_ENTROPY", + { name: "UdsSeedOffset", + desc: "Offset of UDS_SEED", type: "int", - default: "3912", + default: "3840", local: "true" }, - { name: "FieldEntropySize", - desc: "Size of FIELD_ENTROPY", + { name: "UdsSeedSize", + desc: "Size of UDS_SEED", type: "int", - default: "32", + default: "48", local: "true" }, { name: "Secret1DigestOffset", desc: "Offset of SECRET1_DIGEST", type: "int", - default: "3944", + default: "3888", local: "true" }, { name: "Secret1DigestSize", @@ -430,19 +442,55 @@ { name: "Secret2Offset", desc: "Offset of the SECRET2 partition", type: "int", - default: "3952", + default: "3896", local: "true" }, { name: "Secret2Size", desc: "Size of the SECRET2 partition", type: "int", - default: "56", + default: "40", + local: "true" + }, + { name: "FieldEntropyOffset", + desc: "Offset of FIELD_ENTROPY", + type: "int", + default: "3896", + local: "true" + }, + { name: "FieldEntropySize", + desc: "Size of FIELD_ENTROPY", + type: "int", + default: "32", + local: "true" + }, + { name: "Secret2DigestOffset", + desc: "Offset of SECRET2_DIGEST", + type: "int", + default: "3928", + local: "true" + }, + { name: "Secret2DigestSize", + desc: "Size of SECRET2_DIGEST", + type: "int", + default: "8", + local: "true" + }, + { name: "Secret3Offset", + desc: "Offset of the SECRET3 partition", + type: "int", + default: "3936", + local: "true" + }, + { name: "Secret3Size", + desc: "Size of the SECRET3 partition", + type: "int", + default: "72", local: "true" }, { name: "KeyManifestPkHashOffset", desc: "Offset of KEY_MANIFEST_PK_HASH", type: "int", - default: "3952", + default: "3936", local: "true" }, { name: "KeyManifestPkHashSize", @@ -451,14 +499,26 @@ default: "48", local: "true" }, - { name: "Secret2DigestOffset", - desc: "Offset of SECRET2_DIGEST", + { name: "RmaTokenOffset", + desc: "Offset of RMA_TOKEN", + type: "int", + default: "3984", + local: "true" + }, + { name: "RmaTokenSize", + desc: "Size of RMA_TOKEN", + type: "int", + default: "16", + local: "true" + }, + { name: "Secret3DigestOffset", + desc: "Offset of SECRET3_DIGEST", type: "int", default: "4000", local: "true" }, - { name: "Secret2DigestSize", - desc: "Size of SECRET2_DIGEST", + { name: "Secret3DigestSize", + desc: "Size of SECRET3_DIGEST", type: "int", default: "8", local: "true" @@ -995,66 +1055,73 @@ ''' } { bits: "5" + name: "SECRET3_ERROR" + desc: ''' + Set to 1 if an error occurred in this partition. + If set to 1, SW should check the !!ERR_CODE register at the corresponding index. + ''' + } + { bits: "6" name: "LIFE_CYCLE_ERROR" desc: ''' Set to 1 if an error occurred in this partition. If set to 1, SW should check the !!ERR_CODE register at the corresponding index. ''' } - { bits: "6" + { bits: "7" name: "DAI_ERROR" desc: ''' Set to 1 if an error occurred in the DAI. If set to 1, SW should check the !!ERR_CODE register at the corresponding index. ''' } - { bits: "7" + { bits: "8" name: "LCI_ERROR" desc: ''' Set to 1 if an error occurred in the LCI. If set to 1, SW should check the !!ERR_CODE register at the corresponding index. ''' } - { bits: "8" + { bits: "9" name: "TIMEOUT_ERROR" desc: ''' Set to 1 if an integrity or consistency check times out. This raises an fatal_check_error alert and is an unrecoverable error condition. ''' } - { bits: "9" + { bits: "10" name: "LFSR_FSM_ERROR" desc: ''' Set to 1 if the LFSR timer FSM has reached an invalid state. This raises an fatal_check_error alert and is an unrecoverable error condition. ''' } - { bits: "10" + { bits: "11" name: "SCRAMBLING_FSM_ERROR" desc: ''' Set to 1 if the scrambling datapath FSM has reached an invalid state. This raises an fatal_check_error alert and is an unrecoverable error condition. ''' } - { bits: "11" + { bits: "12" name: "KEY_DERIV_FSM_ERROR" desc: ''' Set to 1 if the key derivation FSM has reached an invalid state. This raises an fatal_check_error alert and is an unrecoverable error condition. ''' } - { bits: "12" + { bits: "13" name: "BUS_INTEG_ERROR" desc: ''' This bit is set to 1 if a fatal bus integrity fault is detected. This error triggers a fatal_bus_integ_error alert. ''' } - { bits: "13" + { bits: "14" name: "DAI_IDLE" desc: "Set to 1 if the DAI is idle and ready to accept commands." } - { bits: "14" + { bits: "15" name: "CHECK_PENDING" desc: "Set to 1 if an integrity or consistency check triggered by the LFSR timer or via !!CHECK_TRIGGER is pending." } @@ -1574,6 +1641,27 @@ ] } }, + { multireg: { + name: "SECRET3_DIGEST", + desc: ''' + Integrity digest for the SECRET3 partition. + The integrity digest is 0 by default. The digest calculation can be triggered via the !!DIRECT_ACCESS_CMD. + After a reset, the digest then becomes visible in this CSR, and the corresponding partition becomes write-locked. + ''', + count: "NumDigestWords", + swaccess: "ro", + hwaccess: "hwo", + hwext: "true", + cname: "WORD", + resval: 0, + tags: [ // OTP internal HW will update status so can not auto-predict its value. + "excl:CsrAllTests:CsrExclCheck"], + fields: [ + { bits: "31:0" + } + ] + } + }, //////////////////////////////// // Software Config Partitions // diff --git a/src/fuse_ctrl/data/otp_ctrl_img_dev.hjson b/src/fuse_ctrl/data/otp_ctrl_img_dev.hjson new file mode 100644 index 000000000..f33511677 --- /dev/null +++ b/src/fuse_ctrl/data/otp_ctrl_img_dev.hjson @@ -0,0 +1,75 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Use the gen-otp-img.py script to convert this configuration into +// a MEM file for preloading the OTP in FPGA synthesis or simulation. +// + +{ + // 256 bit seed to be used for generation of partition randomized values. + // Can be overridden on the command line with the --seed switch. + // The default seed was generated using secrets.py module. + seed: 85452983286950371191603618368782861611109037138182535346147818831008789508651 + + // The partition and item names must correspond with the OTP memory map. + partitions: [ + { + name: "SECRET0", + lock: "True", + items: [ + { + name: "TEST_UNLOCK_TOKEN", + value: "", + } + { + name: "TEST_EXIT_TOKEN", + value: "", + } + ], + } + { + name: "SECRET1", + lock: "True", + items: [ + { + name: "UDS_SEED", + value: "", + } + ], + } + { + name: "SECRET2", + lock: "True", + items: [ + { + name: "FIELD_ENTROPY", + value: "", + } + ], + } + { + name: "SECRET3", + lock: "False", + items: [ + { + name: "KEY_MANIFEST_PK_HASH", + value: "", + } + { + name: "RMA_TOKEN", + value: "", + } + ], + } + { + name: "LIFE_CYCLE", + // Can be one of the following strings: + // RAW, TEST_UNLOCKED0-3, TEST_LOCKED0-2, DEV, PROD, PROD_END, RMA, SCRAP + state: "DEV", + // Can range from 0 to 16. + // Note that a value of 0 is only permissible in RAW state. + count: "5" + } + ] +} diff --git a/src/fuse_ctrl/data/otp_ctrl_img_non_secret_fuses.hjson b/src/fuse_ctrl/data/otp_ctrl_img_non_secret_fuses.hjson new file mode 100644 index 000000000..cdc5e4cfb --- /dev/null +++ b/src/fuse_ctrl/data/otp_ctrl_img_non_secret_fuses.hjson @@ -0,0 +1,55 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Use the gen-otp-img.py script to convert this configuration into +// a MEM file for preloading the OTP in FPGA synthesis or simulation. +// + +{ + // The partition and item names must correspond with the OTP memory map. + partitions: [ + { + name: "NON_SECRET_FUSES", + items: [ + { + name: "FMC_KEY_MANIFEST_SVN", + value: "", + }, + { + name: "RUNTIME_SVN", + value: "", + }, + { + name: "LMS_VERIFY", + value: "", + }, + { + name: "LMS_REVOCATION", + value: "", + }, + { + name: "KEY_MANIFEST_PK_HASH_MASK", + value: "", + }, + { + name: "OWNER_PK_HASH", + value: "", + }, + { + name: "IDEVID_CERT_ATTR", + value: "", + }, + { + name: "IDEVID_MANUF_HSM_ID", + value: "", + }, + { + name: "SOC_STEPPING_ID", + value: "", + }, + + ], + } + ] +} diff --git a/src/fuse_ctrl/data/otp_ctrl_img_rma.hjson b/src/fuse_ctrl/data/otp_ctrl_img_rma.hjson new file mode 100644 index 000000000..f28e69cb6 --- /dev/null +++ b/src/fuse_ctrl/data/otp_ctrl_img_rma.hjson @@ -0,0 +1,77 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Use the gen-otp-img.py script to convert this configuration into +// a MEM file for preloading the OTP in FPGA synthesis or simulation. +// + +{ + // Seed to be used for generation of partition randomized values. + // Can be overridden on the command line with the --seed switch. + // The default seed was generated using secrets.py module. + seed: 52408960416235844780753299194502148156786072650816676092165912261205302331741 + + // The partition and item names must correspond with the OTP memory map. + partitions: [ + { + name: "SECRET0", + lock: "True", + items: [ + { + name: "TEST_UNLOCK_TOKEN", + value: "", + } + { + name: "TEST_EXIT_TOKEN", + value: "", + } + ], + } + { + name: "SECRET1", + lock: "True", + items: [ + { + name: "FLASH_ADDR_KEY_SEED", + value: "", + } + { + name: "FLASH_DATA_KEY_SEED", + value: "", + } + { + name: "SRAM_DATA_KEY_SEED", + value: "", + } + ], + } + { + name: "SECRET2", + lock: "False", + items: [ + { + name: "RMA_TOKEN", + value: "", + } + { + name: "CREATOR_ROOT_KEY_SHARE0", + value: "", + } + { + name: "CREATOR_ROOT_KEY_SHARE1", + value: "", + } + ], + } + { + name: "LIFE_CYCLE", + // Can be one of the following strings: + // RAW, TEST_UNLOCKED0-3, TEST_LOCKED0-2, DEV, PROD, PROD_END, RMA, SCRAP + state: "RMA", + // Can range from 0 to 16. + // Note that a value of 0 is only permissible in RAW state. + count: "8" + } + ] +} diff --git a/src/fuse_ctrl/data/otp_ctrl_mmap.hjson b/src/fuse_ctrl/data/otp_ctrl_mmap.hjson index 67c5176df..16642ec7b 100755 --- a/src/fuse_ctrl/data/otp_ctrl_mmap.hjson +++ b/src/fuse_ctrl/data/otp_ctrl_mmap.hjson @@ -40,6 +40,10 @@ name: "Secret2Key", value: "", } + { + name: "Secret3Key", + value: "", + } ] digests: [ // This is the consistency digest used by all partitions. @@ -48,6 +52,7 @@ iv_value: "", cnst_value: "", } + /* // The other digest configurations below are used for // key derivation and token hashing. { @@ -65,6 +70,7 @@ iv_value: "", cnst_value: "", } + */ ] } @@ -168,25 +174,55 @@ key_sel: "Secret0Key", integrity: true, bkout_type: false, + items: [ + { + name: "TEST_UNLOCK_TOKEN", + // This will generate a random default to be output in + // case partition has not initialized or is in error state. + // If not specified, a value of '0 will be used. + inv_default: "", + size: "16" + } + { + name: "TEST_EXIT_TOKEN", + inv_default: "", + size: "16" + } + ], + desc: '''Secret partition 0. + This contains TEST lifecycle unlock tokens. + ''' + } + { + name: "SECRET1", + variant: "Buffered", + secret: true, + sw_digest: false, + hw_digest: true, + write_lock: "Digest", + read_lock: "Digest", + key_sel: "Secret1Key", + integrity: true, + bkout_type: false, items: [ { name: "UDS_SEED", size: "48" } ], - desc: '''Secret partition 0. + desc: '''Secret partition 1. This contains Obfuscated UDS seed. ''' } { - name: "SECRET1", + name: "SECRET2", variant: "Buffered", secret: true, sw_digest: false, hw_digest: true, write_lock: "Digest", read_lock: "Digest", - key_sel: "Secret1Key", + key_sel: "Secret2Key", integrity: true, bkout_type: false, items: [ @@ -195,19 +231,19 @@ size: "32" } ], - desc: '''Secret partition 1. + desc: '''Secret partition 2. This contains obfuscated field entropy. ''' } { - name: "SECRET2", + name: "SECRET3", variant: "Buffered", secret: true, sw_digest: false, hw_digest: true, write_lock: "Digest", read_lock: "Digest", - key_sel: "Secret2Key", + key_sel: "Secret3Key", integrity: true, bkout_type: false, items: [ @@ -215,9 +251,14 @@ name: "KEY_MANIFEST_PK_HASH", size: "48" } + { + name: "RMA_TOKEN", + inv_default: "", + size: "16" + } ], - desc: '''Secret partition 2. - This contains public key hash. + desc: '''Secret partition 3. + This contains public key hash and RMA unlock token. ''' } { diff --git a/src/fuse_ctrl/rtl/axi_adapter_sram.sv b/src/fuse_ctrl/rtl/axi_adapter_sram.sv deleted file mode 100644 index 1a85b0a8a..000000000 --- a/src/fuse_ctrl/rtl/axi_adapter_sram.sv +++ /dev/null @@ -1,402 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -`include "caliptra_prim_assert.sv"; - -module axi_adapter_sram - import axi_pkg::*; - import caliptra_prim_mubi_pkg::mubi4_t; -#( - parameter int SramAw = 12, - parameter int SramDw = 32, // Must be multiple of the TL width - parameter int Outstanding = 1, // Only one request is accepted - parameter bit ByteAccess = 1, // 1: Enables sub-word write transactions. Note that this - // results in read-modify-write operations for integrity - // re-generation if EnableDataIntgPt is set to 1. - parameter bit ErrOnWrite = 0, // 1: Writelogic win_dv, - logic [AW-1:0] win_addr, - logic win_write, - //logic [UW-1:0] win_user, - logic [IW-1:0] win_id, - logic [DW-1:0] win_wdata, - logic [BC-1:0] win_wstrb, - logic [DW-1:0] win_rdata, - logic win_last, - logic win_hld, - logic win_err,s not allowed, automatically error - parameter bit ErrOnRead = 0, // 1: Reads not allowed, automatically error - //parameter bit CmdIntgCheck = 0, // 1: Enable command integrity check - //parameter bit EnableRspIntgGen = 0, // 1: Generate response integrity - //parameter bit EnableDataIntgGen = 0, // 1: Generate response data integrity - //parameter bit EnableDataIntgPt = 0, // 1: Passthrough command/response data integrity - //parameter bit SecFifoPtr = 0, // 1: Duplicated fifo pointers - localparam int WidthMult = SramDw / axi_pkg::AXI_DW, - //localparam int IntgWidth = tlul_pkg::DataIntgWidth * WidthMult, - //localparam int DataOutW = EnableDataIntgPt ? SramDw + IntgWidth : SramDw - localparam int DataOutW = SramDw; -) ( - input clk_i, - input rst_ni, - - // AXI interface - input logic axi_dv, - input logic [axi_pkg::AXI_AW-1:0] axi_addr, - input logic axi_write, - input logic [axi_pkg::AXI_IW-1:0] axi_id, - input logic [axi_pkg::AXI_DW-1:0] axi_wdata, - input logic [axi_pkg::AXI_BC-1:0] axi_wstrb, - output logic [axi_pkg::AXI_DW-1:0] axi_rdata, - input logic axi_last, - output logic axi_hld, - output logic axi_err, - - // Control interface - input mubi4_t en_ifetch_i, - - // SRAM interface - output logic req_o, - output mubi4_t req_type_o, - input gnt_i, - output logic we_o, - output logic [SramAw-1:0] addr_o, - output logic [DataOutW-1:0] wdata_o, - output logic [DataOutW-1:0] wmask_o, - //output logic intg_error_o, - input [DataOutW-1:0] rdata_i, - input rvalid_i, - input [1:0] rerror_i, // 2 bit error [1]: Uncorrectable, [0]: Correctable - output logic rmw_in_progress_o -); - - localparam int SramByte = SramDw/8; - localparam int DataBitWidth = caliptra_prim_util_pkg::vbits(SramByte); - localparam int WoffsetWidth = (SramByte == axi_pkg::AXI_BC) ? 1 : - DataBitWidth - caliptra_prim_util_pkg::vbits(axi_pkg::AXI_BC); - - logic error_det; // Internal protocol error checker - logic error_internal; // Internal protocol error checker - logic wr_attr_error; - //logic instr_error; //TODO - logic wr_vld_error; - logic rd_vld_error; - logic rsp_fifo_error; - //logic intg_error; - logic axi_error; - - // wr_attr_error: Check if the request size, strb are permitted. - // Basic check of size, mask, addr align is done in tlul_err module. - // Here it checks any partial write if ByteAccess isn't allowed. - assign wr_attr_error = (axi_write) ? ((ByteAccess == 0) ? (axi_wstrb != '1) : 1'b0) : 1'b0; - - // TODO: how does this apply to AXI -- instruction type? - /* - // An instruction type transaction is only valid if en_ifetch is enabled - // If the instruction type is completely invalid, also considered an instruction error - assign instr_error = prim_mubi_pkg::mubi4_test_invalid(tl_i.a_user.instr_type) | - (prim_mubi_pkg::mubi4_test_true_strict(tl_i.a_user.instr_type) & - prim_mubi_pkg::mubi4_test_false_loose(en_ifetch_i)); - */ - - if (ErrOnWrite == 1) begin : gen_no_writes - assign wr_vld_error = axi_write != 1'b0; - end else begin : gen_writes_allowed - assign wr_vld_error = 1'b0; - end - - if (ErrOnRead == 1) begin: gen_no_reads - assign rd_vld_error = core_write == 1'b0; - end else begin : gen_reads_allowed - assign rd_vld_error = 1'b0; - end - - //TODO: equiv of tlul_protocol check - // COpyinge existing tlul code for now - // tlul protocol check - tlul_err u_err ( - .clk_i, - .rst_ni, - .tl_i(tl_i), - .err_o (tlul_error) - ); - - // error return is transactional and thus does not used the "latched" intg_err signal - assign error_det = wr_attr_error | wr_vld_error | rd_vld_error | //instr_error | - tlul_error;// | intg_error; - - typedef struct packed { - logic [axi_pkg::AXI_BC-1:0] wstrb ; // Byte mask within the AXI word - logic [WoffsetWidth-1:0] woffset ; // Offset of the TL-UL word within the SRAM word - } sram_req_t ; - - typedef struct packed { - logic write; - logic [axi_pkg::AXI_BC-1:0] wstrb; - logic [axi_pkg::AXI_IW-1:0] id; - logic error; - } req_t; - - typedef struct packed { - logic [axi_pkg::AXI_DW-1:0] data; - logic error; - } rsp_t; - - localparam int SramReqFifoWidth = $bits(sram_req_t) ; - localparam int ReqFifoWidth = $bits(req_t) ; - localparam int RspFifoWidth = $bits(rsp_t) ; - - // FIFO signal in case OutStand is greater than 1 - // If request is latched, {write, source} is pushed to req fifo. - // Req fifo is popped when axi_dv is asserted and axi_hld is 0. - // axi_vld is asserted if it is write request or rsp fifo not empty if read. - logic reqfifo_wvalid, reqfifo_wready; - logic reqfifo_rvalid, reqfifo_rready; - req_t reqfifo_wdata, reqfifo_rdata; - - logic sramreqfifo_wvalid, sramreqfifo_wready; - logic sramreqfifo_rready; - sram_req_t sramreqfifo_wdata, sramreqfifo_rdata; - - logic rspfifo_wvalid, rspfifo_wready; - logic rspfifo_rvalid, rspfifo_rready; - rsp_t rspfifo_wdata, rspfifo_rdata; - - logic a_ack, d_ack, sram_ack; - assign a_ack = axi_dv & ~axi_hld; - assign d_ack = axi_dv & ~ axi_hld; - assign sram_ack = req_o & gnt_i; - - // Valid handling - logic d_valid, d_error; - always_comb begin - d_valid = 1'b0; - if (reqfifo_rvalid) begin - if (reqfifo_rdata.error) begin - // Return error response. Assume no request went out to SRAM - d_valid = 1'b1; - end else if (!reqfifo_rdata.write) begin // Read - d_valid = rspfifo_rvalid; - end else begin - // Write without error - d_valid = 1'b1; - end - end else begin - d_valid = 1'b0; - end - end - - always_comb begin - d_error = 1'b0; - if (reqfifo_rvalid) begin - if (!reqfifo_rdata.write) begin // Read - d_error = rspfifo_rdata.error | req_fifo_rdata.error; - end else begin - d_error = rspfifo_rdata.error; - end - end else begin - d_error = 1'b0; - end - end - - logic vld_rd_rsp; - assign vld_rd_rsp = d_valid & reqfifo_rvalid & rspfifo_rvalid & (~reqfifo_rdata.write); - assign axi_rdata = (vld_rd_rsp & ~d_error) ? rspfifo_rdata.rdata : '0; - - // Output to SRAM: - // Generate request only when no internal error occurs. If error occurs, the request should be - // dropped and returned error response to the host. So, error to be pushed to reqfifo. - // In this case, it is assumed the request is granted (may cause ordering issue later?) - - assign req_o = axi_dv & ~axi_hld & reqfifo_wready & ~error_internal; - //TODO: request type. - //assign req_type_o = - assign we_o = axi_dv & axi_write; - assign addr_o = axi_vld ? axi_addr[DataBitWidtdh+:SramAw] : '0; - - // Support SRAMS wider than AXI word width by mapping the parts of the - // AXI address which are more fine-grained than theSRAM width to the SRAM - // write mask. - logic [WoffsetWidth-1:0] woodset; - if (axi_pkg::AXI_DW != SramDw) begin: gen_wordwidthadapt - assign woffset = axi_addr[DataBitWidth-1:caliptra-prim_util_pkg::vbits(axi_pkg::AXI_DBW)]; - end else begin: gen_no_wordwidthadapt - assign woffset = '0; - end - - localparam DataWidth = axi_pkg:: AXI_DW; - - //wmask/wdata - always_comb begin - wmask_o = '0; - wdata_o = '0; - - if (axi_dv) begin - for (int -i = 0; i < axi_pkg::AXI_DW/8; i++) begin - wmask_o[woffset][8*i +: 8] = {8{axi.wstrb[i]}}; - wdata_o[woffset][8*i +: 8] = (axi_wstrb[i] && we_o) ? axi_wdata[8*i +: 8] : '0; - end - end - end - - assign reqfifo_wvalid = a_ack ; // Push to FIFO only when granted - assign reqfifo_wdata = '{ - write: axi_write, - wstrb: axi_wstrb, - id: axi_id, - error: axi_error - }; // Store the request only. Doesn't have to store data - assign reqfifo_rready = d_ack ; - - // push together with ReqFIFO, pop upon returning read - assign sramreqfifo_wdata = '{ - wstrb : axi_wstrb, - woffset : woffset - }; - assign sramreqfifo_wvalid = sram_ack & ~we_o; - assign sramreqfifo_rready = rspfifo_wvalid; - - assign rspfifo_wvalid = rvalid_i & reqfifo_rvalid; - - // Make sure only requested bytes are forwarded - logic [WidthMult-1:0][DataWidth-1:0] rdata_reshaped; - logic [DataWidth-1:0] rdata_axiword; - - // This just changes the array format so that the correct word can be selected by indexing. - assign rdata_reshaped = rdata_i; - logic [DataWidth-1:0] rmask; - always_comb begin - rmask = '0; - for (int i = 0 ; i < axi_pkg::AXI_DW/8 ; i++) begin - rmask[8*i +: 8] = {8{sramreqfifo_rdata.mask[i]}}; - end - end - // Select correct word and mask it. - assign rdata_axiword = rdata_reshaped[sramreqfifo_rdata.woffset] & rmask; - - assign rspfifo_wdata = '{ - data : rdata_axiword[top_pkg::TL_DW-1:0], - error : rerror_i[1] // Only care for Uncorrectable error - }; - assign rspfifo_rready = (reqfifo_rdata.op == OpRead & ~reqfifo_rdata.error) - ? reqfifo_rready : 1'b0 ; - - // This module only cares about uncorrectable errors. - logic unused_rerror; - assign unused_rerror = rerror_i[0]; - - // FIFO instance: REQ, RSP - - // ReqFIFO is to store the Access type to match to the Response data. - // For instance, SRAM accepts the write request but doesn't return the - // acknowledge. In this case, it may be hard to determine when the D - // response for the write data should send out if reads/writes are - // interleaved. So, to make it in-order (even TL-UL allows out-of-order - // responses), storing the request is necessary. And if the read entry - // is write op, it is safe to return the response right away. If it is - // read reqeust, then D response is waiting until read data arrives. - prim_fifo_sync #( - .Width (ReqFifoWidth), - .Pass (1'b0), - .Depth (Outstanding) - ) u_reqfifo ( - .clk_i, - .rst_ni, - .clr_i (1'b0), - .wvalid_i(reqfifo_wvalid), - .wready_o(reqfifo_wready), - .wdata_i (reqfifo_wdata), - .rvalid_o(reqfifo_rvalid), - .rready_i(reqfifo_rready), - .rdata_o (reqfifo_rdata), - .full_o (), - .depth_o (), - .err_o () - ); - - // sramreqfifo: - // While the ReqFIFO holds the request until it is sent back via TL-UL, the - // sramreqfifo only needs to hold the mask and word offset until the read - // data returns from memory. - caliptra_prim_fifo_sync #( - .Width (SramReqFifoWidth), - .Pass (1'b0), - .Depth (Outstanding) - ) u_sramreqfifo ( - .clk_i, - .rst_ni, - .clr_i (1'b0), - .wvalid_i(sramreqfifo_wvalid), - .wready_o(sramreqfifo_wready), - .wdata_i (sramreqfifo_wdata), - .rvalid_o(), - .rready_i(sramreqfifo_rready), - .rdata_o (sramreqfifo_rdata), - .full_o (), - .depth_o (), - .err_o () - ); - - // Rationale having #Outstanding depth in response FIFO. - // In normal case, if the host or the crossbar accepts the response data, - // response FIFO isn't needed. But if in any case it has a chance to be - // back pressured, the response FIFO should store the returned data not to - // lose the data from the SRAM interface. Remember, SRAM interface doesn't - // have back-pressure signal such as read_ready. - caliptra_prim_fifo_sync #( - .Width (RspFifoWidth), - .Pass (1'b1), - .Depth (Outstanding), - .Secure (SecFifoPtr) - ) u_rspfifo ( - .clk_i, - .rst_ni, - .clr_i (1'b0), - .wvalid_i(rspfifo_wvalid), - .wready_o(rspfifo_wready), - .wdata_i (rspfifo_wdata), - .rvalid_o(rspfifo_rvalid), - .rready_i(rspfifo_rready), - .rdata_o (rspfifo_rdata), - .full_o (), - .depth_o (), - .err_o (rsp_fifo_error) - ); - - // below assertion fails when SRAM rvalid is asserted even though ReqFifo is empty - `ASSERT(rvalidHighReqFifoEmpty, rvalid_i |-> reqfifo_rvalid) - - // below assertion fails when outstanding value is too small (SRAM rvalid is asserted - // even though the RspFifo is full) - `ASSERT(rvalidHighWhenRspFifoFull, rvalid_i |-> rspfifo_wready) - - // If both ErrOnWrite and ErrOnRead are set, this block is useless - `ASSERT_INIT(adapterNoReadOrWrite, (ErrOnWrite & ErrOnRead) == 0) - - `ASSERT_INIT(SramDwHasByteGranularity_A, SramDw % 8 == 0) - `ASSERT_INIT(SramDwIsMultipleOfTlulWidth_A, SramDw % top_pkg::TL_DW == 0) - - // These parameter options cannot both be true at the same time - `ASSERT_INIT(DataIntgOptions_A, ~(EnableDataIntgGen & EnableDataIntgPt)) - - // make sure outputs are defined - `ASSERT_KNOWN(TlOutKnown_A, tl_o.d_valid) - `ASSERT_KNOWN_IF(TlOutPayloadKnown_A, tl_o, tl_o.d_valid) - `ASSERT_KNOWN(ReqOutKnown_A, req_o ) - `ASSERT_KNOWN(WeOutKnown_A, we_o ) - `ASSERT_KNOWN(AddrOutKnown_A, addr_o ) - `ASSERT_KNOWN(WdataOutKnown_A, wdata_o) - `ASSERT_KNOWN(WmaskOutKnown_A, wmask_o) - - endmodule - diff --git a/src/fuse_ctrl/rtl/caliptra_otp_ctrl_core_reg_top.sv b/src/fuse_ctrl/rtl/caliptra_otp_ctrl_core_reg_top.sv index e5e40a29f..9e8e7f0f1 100644 --- a/src/fuse_ctrl/rtl/caliptra_otp_ctrl_core_reg_top.sv +++ b/src/fuse_ctrl/rtl/caliptra_otp_ctrl_core_reg_top.sv @@ -4,44 +4,17 @@ // // Register Top module auto-generated by `reggen` -`include "prim_assert.sv" +`include "caliptra_prim_assert.sv" module caliptra_otp_ctrl_core_reg_top ( input clk_i, input rst_ni, - /* input tlul_pkg::tl_h2d_t tl_i, output tlul_pkg::tl_d2h_t tl_o, - */ - input logic core_dv, - input logic [AW-1:0] core_addr, - input logic core_write, - //input logic [UW-1:0] core_user, - input logic [IW-1:0] core_id, - input logic [DW-1:0] core_wdata, - input logic [BC-1:0] core_wstrb, - output logic [DW-1:0] core_rdata, - input logic core_last, - output logic core_hld, - output logic core_err, // Output port for window - /* output tlul_pkg::tl_h2d_t tl_win_o, input tlul_pkg::tl_d2h_t tl_win_i, - */ - input logic win_dv, - input logic [AW-1:0] win_addr, - input logic win_write, - //input logic [UW-1:0] win_user, - input logic [IW-1:0] win_id, - input logic [DW-1:0] win_wdata, - input logic [BC-1:0] win_wstrb, - output logic [DW-1:0] win_rdata, - input logic win_last, - output logic win_hld, - output logic win_err, - // To HW output caliptra_otp_ctrl_reg_pkg::caliptra_otp_ctrl_core_reg2hw_t reg2hw, // Write @@ -71,22 +44,8 @@ module caliptra_otp_ctrl_core_reg_top ( logic [DW-1:0] reg_rdata_next; logic reg_busy; - /* tlul_pkg::tl_h2d_t tl_reg_h2d; tlul_pkg::tl_d2h_t tl_reg_d2h; - */ - - logic axi_dv, - logic [AW-1:0] axi_addr, - logic axi_write, - //logic [UW-1:0] axi_user, - logic [IW-1:0] axi_id, - logic [DW-1:0] axi_wdata, - logic [BC-1:0] axi_wstrb, - logic [DW-1:0] axi_rdata, - logic axi_last, - logic axi_hld, - logic axi_err, // incoming payload check @@ -98,10 +57,10 @@ module caliptra_otp_ctrl_core_reg_top ( // also check for spurious write enables logic reg_we_err; - logic [37:0] reg_we_check; - prim_reg_we_check #( - .OneHotWidth(38) - ) u_prim_reg_we_check ( + logic [40:0] reg_we_check; + caliptra_prim_reg_we_check #( + .OneHotWidth(41) + ) u_caliptra_prim_reg_we_check ( .clk_i(clk_i), .rst_ni(rst_ni), .oh_i (reg_we_check), @@ -125,8 +84,8 @@ module caliptra_otp_ctrl_core_reg_top ( // outgoing integrity generation tlul_pkg::tl_d2h_t tl_o_pre; tlul_rsp_intg_gen #( - .EnableRspIntgGen(1), - .EnableDataIntgGen(1) + .EnableRspIntgGen(1), // [anjpar]: 09/19/2024 Disable response integrity generation + .EnableDataIntgGen(1) // [anjpar]: 09/19/2024 Disable data integrity generation ) u_rsp_intg_gen ( .tl_i(tl_o_pre), .tl_o(tl_o) @@ -190,7 +149,7 @@ module caliptra_otp_ctrl_core_reg_top ( .tl_i (tl_reg_h2d), .tl_o (tl_reg_d2h), - .en_ifetch_i(prim_mubi_pkg::MuBi4False), + .en_ifetch_i(caliptra_prim_mubi_pkg::MuBi4False), .intg_error_o(), .we_o (reg_we), @@ -236,6 +195,7 @@ module caliptra_otp_ctrl_core_reg_top ( logic status_secret0_error_qs; logic status_secret1_error_qs; logic status_secret2_error_qs; + logic status_secret3_error_qs; logic status_life_cycle_error_qs; logic status_dai_error_qs; logic status_lci_error_qs; @@ -262,6 +222,8 @@ module caliptra_otp_ctrl_core_reg_top ( logic [2:0] err_code_6_qs; logic err_code_7_re; logic [2:0] err_code_7_qs; + logic err_code_8_re; + logic [2:0] err_code_8_qs; logic direct_access_regwen_re; logic direct_access_regwen_we; logic direct_access_regwen_qs; @@ -327,13 +289,17 @@ module caliptra_otp_ctrl_core_reg_top ( logic [31:0] secret2_digest_0_qs; logic secret2_digest_1_re; logic [31:0] secret2_digest_1_qs; + logic secret3_digest_0_re; + logic [31:0] secret3_digest_0_qs; + logic secret3_digest_1_re; + logic [31:0] secret3_digest_1_qs; // Register instances // R[intr_state]: V(False) // F[otp_operation_done]: 0:0 - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessW1C), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessW1C), .RESVAL (1'h0), .Mubi (1'b0) ) u_intr_state_otp_operation_done ( @@ -358,9 +324,9 @@ module caliptra_otp_ctrl_core_reg_top ( ); // F[otp_error]: 1:1 - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessW1C), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessW1C), .RESVAL (1'h0), .Mubi (1'b0) ) u_intr_state_otp_error ( @@ -387,9 +353,9 @@ module caliptra_otp_ctrl_core_reg_top ( // R[intr_enable]: V(False) // F[otp_operation_done]: 0:0 - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessRW), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRW), .RESVAL (1'h0), .Mubi (1'b0) ) u_intr_enable_otp_operation_done ( @@ -414,9 +380,9 @@ module caliptra_otp_ctrl_core_reg_top ( ); // F[otp_error]: 1:1 - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessRW), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRW), .RESVAL (1'h0), .Mubi (1'b0) ) u_intr_enable_otp_error ( @@ -446,7 +412,7 @@ module caliptra_otp_ctrl_core_reg_top ( logic [1:0] intr_test_flds_we; assign intr_test_qe = &intr_test_flds_we; // F[otp_operation_done]: 0:0 - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (1) ) u_intr_test_otp_operation_done ( .re (1'b0), @@ -462,7 +428,7 @@ module caliptra_otp_ctrl_core_reg_top ( assign reg2hw.intr_test.otp_operation_done.qe = intr_test_qe; // F[otp_error]: 1:1 - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (1) ) u_intr_test_otp_error ( .re (1'b0), @@ -483,7 +449,7 @@ module caliptra_otp_ctrl_core_reg_top ( logic [4:0] alert_test_flds_we; assign alert_test_qe = &alert_test_flds_we; // F[fatal_macro_error]: 0:0 - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (1) ) u_alert_test_fatal_macro_error ( .re (1'b0), @@ -499,7 +465,7 @@ module caliptra_otp_ctrl_core_reg_top ( assign reg2hw.alert_test.fatal_macro_error.qe = alert_test_qe; // F[fatal_check_error]: 1:1 - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (1) ) u_alert_test_fatal_check_error ( .re (1'b0), @@ -515,7 +481,7 @@ module caliptra_otp_ctrl_core_reg_top ( assign reg2hw.alert_test.fatal_check_error.qe = alert_test_qe; // F[fatal_bus_integ_error]: 2:2 - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (1) ) u_alert_test_fatal_bus_integ_error ( .re (1'b0), @@ -531,7 +497,7 @@ module caliptra_otp_ctrl_core_reg_top ( assign reg2hw.alert_test.fatal_bus_integ_error.qe = alert_test_qe; // F[fatal_prim_otp_alert]: 3:3 - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (1) ) u_alert_test_fatal_prim_otp_alert ( .re (1'b0), @@ -547,7 +513,7 @@ module caliptra_otp_ctrl_core_reg_top ( assign reg2hw.alert_test.fatal_prim_otp_alert.qe = alert_test_qe; // F[recov_prim_otp_alert]: 4:4 - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (1) ) u_alert_test_recov_prim_otp_alert ( .re (1'b0), @@ -565,7 +531,7 @@ module caliptra_otp_ctrl_core_reg_top ( // R[status]: V(True) // F[vendor_test_error]: 0:0 - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (1) ) u_status_vendor_test_error ( .re (status_re), @@ -580,7 +546,7 @@ module caliptra_otp_ctrl_core_reg_top ( ); // F[non_secret_fuses_error]: 1:1 - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (1) ) u_status_non_secret_fuses_error ( .re (status_re), @@ -595,7 +561,7 @@ module caliptra_otp_ctrl_core_reg_top ( ); // F[secret0_error]: 2:2 - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (1) ) u_status_secret0_error ( .re (status_re), @@ -610,7 +576,7 @@ module caliptra_otp_ctrl_core_reg_top ( ); // F[secret1_error]: 3:3 - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (1) ) u_status_secret1_error ( .re (status_re), @@ -625,7 +591,7 @@ module caliptra_otp_ctrl_core_reg_top ( ); // F[secret2_error]: 4:4 - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (1) ) u_status_secret2_error ( .re (status_re), @@ -639,8 +605,23 @@ module caliptra_otp_ctrl_core_reg_top ( .qs (status_secret2_error_qs) ); - // F[life_cycle_error]: 5:5 - prim_subreg_ext #( + // F[secret3_error]: 5:5 + caliptra_prim_subreg_ext #( + .DW (1) + ) u_status_secret3_error ( + .re (status_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.status.secret3_error.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (status_secret3_error_qs) + ); + + // F[life_cycle_error]: 6:6 + caliptra_prim_subreg_ext #( .DW (1) ) u_status_life_cycle_error ( .re (status_re), @@ -654,8 +635,8 @@ module caliptra_otp_ctrl_core_reg_top ( .qs (status_life_cycle_error_qs) ); - // F[dai_error]: 6:6 - prim_subreg_ext #( + // F[dai_error]: 7:7 + caliptra_prim_subreg_ext #( .DW (1) ) u_status_dai_error ( .re (status_re), @@ -669,8 +650,8 @@ module caliptra_otp_ctrl_core_reg_top ( .qs (status_dai_error_qs) ); - // F[lci_error]: 7:7 - prim_subreg_ext #( + // F[lci_error]: 8:8 + caliptra_prim_subreg_ext #( .DW (1) ) u_status_lci_error ( .re (status_re), @@ -684,8 +665,8 @@ module caliptra_otp_ctrl_core_reg_top ( .qs (status_lci_error_qs) ); - // F[timeout_error]: 8:8 - prim_subreg_ext #( + // F[timeout_error]: 9:9 + caliptra_prim_subreg_ext #( .DW (1) ) u_status_timeout_error ( .re (status_re), @@ -699,8 +680,8 @@ module caliptra_otp_ctrl_core_reg_top ( .qs (status_timeout_error_qs) ); - // F[lfsr_fsm_error]: 9:9 - prim_subreg_ext #( + // F[lfsr_fsm_error]: 10:10 + caliptra_prim_subreg_ext #( .DW (1) ) u_status_lfsr_fsm_error ( .re (status_re), @@ -714,8 +695,8 @@ module caliptra_otp_ctrl_core_reg_top ( .qs (status_lfsr_fsm_error_qs) ); - // F[scrambling_fsm_error]: 10:10 - prim_subreg_ext #( + // F[scrambling_fsm_error]: 11:11 + caliptra_prim_subreg_ext #( .DW (1) ) u_status_scrambling_fsm_error ( .re (status_re), @@ -729,8 +710,9 @@ module caliptra_otp_ctrl_core_reg_top ( .qs (status_scrambling_fsm_error_qs) ); - // F[key_deriv_fsm_error]: 11:11 - prim_subreg_ext #( + /* + // F[key_deriv_fsm_error]: 12:12 + caliptra_prim_subreg_ext #( .DW (1) ) u_status_key_deriv_fsm_error ( .re (status_re), @@ -743,9 +725,10 @@ module caliptra_otp_ctrl_core_reg_top ( .ds (), .qs (status_key_deriv_fsm_error_qs) ); + */ - // F[bus_integ_error]: 12:12 - prim_subreg_ext #( + // F[bus_integ_error]: 13:13 + caliptra_prim_subreg_ext #( .DW (1) ) u_status_bus_integ_error ( .re (status_re), @@ -759,8 +742,8 @@ module caliptra_otp_ctrl_core_reg_top ( .qs (status_bus_integ_error_qs) ); - // F[dai_idle]: 13:13 - prim_subreg_ext #( + // F[dai_idle]: 14:14 + caliptra_prim_subreg_ext #( .DW (1) ) u_status_dai_idle ( .re (status_re), @@ -774,8 +757,8 @@ module caliptra_otp_ctrl_core_reg_top ( .qs (status_dai_idle_qs) ); - // F[check_pending]: 14:14 - prim_subreg_ext #( + // F[check_pending]: 15:15 + caliptra_prim_subreg_ext #( .DW (1) ) u_status_check_pending ( .re (status_re), @@ -792,7 +775,7 @@ module caliptra_otp_ctrl_core_reg_top ( // Subregister 0 of Multireg err_code // R[err_code_0]: V(True) - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (3) ) u_err_code_0 ( .re (err_code_0_re), @@ -809,7 +792,7 @@ module caliptra_otp_ctrl_core_reg_top ( // Subregister 1 of Multireg err_code // R[err_code_1]: V(True) - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (3) ) u_err_code_1 ( .re (err_code_1_re), @@ -826,7 +809,7 @@ module caliptra_otp_ctrl_core_reg_top ( // Subregister 2 of Multireg err_code // R[err_code_2]: V(True) - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (3) ) u_err_code_2 ( .re (err_code_2_re), @@ -843,7 +826,7 @@ module caliptra_otp_ctrl_core_reg_top ( // Subregister 3 of Multireg err_code // R[err_code_3]: V(True) - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (3) ) u_err_code_3 ( .re (err_code_3_re), @@ -860,7 +843,7 @@ module caliptra_otp_ctrl_core_reg_top ( // Subregister 4 of Multireg err_code // R[err_code_4]: V(True) - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (3) ) u_err_code_4 ( .re (err_code_4_re), @@ -877,7 +860,7 @@ module caliptra_otp_ctrl_core_reg_top ( // Subregister 5 of Multireg err_code // R[err_code_5]: V(True) - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (3) ) u_err_code_5 ( .re (err_code_5_re), @@ -894,7 +877,7 @@ module caliptra_otp_ctrl_core_reg_top ( // Subregister 6 of Multireg err_code // R[err_code_6]: V(True) - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (3) ) u_err_code_6 ( .re (err_code_6_re), @@ -911,7 +894,7 @@ module caliptra_otp_ctrl_core_reg_top ( // Subregister 7 of Multireg err_code // R[err_code_7]: V(True) - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (3) ) u_err_code_7 ( .re (err_code_7_re), @@ -926,11 +909,28 @@ module caliptra_otp_ctrl_core_reg_top ( ); + // Subregister 8 of Multireg err_code + // R[err_code_8]: V(True) + caliptra_prim_subreg_ext #( + .DW (3) + ) u_err_code_8 ( + .re (err_code_8_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.err_code[8].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (err_code_8_qs) + ); + + // R[direct_access_regwen]: V(True) logic direct_access_regwen_qe; logic [0:0] direct_access_regwen_flds_we; assign direct_access_regwen_qe = &direct_access_regwen_flds_we; - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (1) ) u_direct_access_regwen ( .re (direct_access_regwen_re), @@ -954,7 +954,7 @@ module caliptra_otp_ctrl_core_reg_top ( logic direct_access_cmd_gated_we; assign direct_access_cmd_gated_we = direct_access_cmd_we & direct_access_regwen_qs; // F[rd]: 0:0 - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (1) ) u_direct_access_cmd_rd ( .re (1'b0), @@ -970,7 +970,7 @@ module caliptra_otp_ctrl_core_reg_top ( assign reg2hw.direct_access_cmd.rd.qe = direct_access_cmd_qe; // F[wr]: 1:1 - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (1) ) u_direct_access_cmd_wr ( .re (1'b0), @@ -986,7 +986,7 @@ module caliptra_otp_ctrl_core_reg_top ( assign reg2hw.direct_access_cmd.wr.qe = direct_access_cmd_qe; // F[digest]: 2:2 - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (1) ) u_direct_access_cmd_digest ( .re (1'b0), @@ -1006,9 +1006,9 @@ module caliptra_otp_ctrl_core_reg_top ( // Create REGWEN-gated WE signal logic direct_access_address_gated_we; assign direct_access_address_gated_we = direct_access_address_we & direct_access_regwen_qs; - prim_subreg #( + caliptra_prim_subreg #( .DW (12), - .SwAccess(prim_subreg_pkg::SwAccessRW), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRW), .RESVAL (12'h0), .Mubi (1'b0) ) u_direct_access_address ( @@ -1038,9 +1038,9 @@ module caliptra_otp_ctrl_core_reg_top ( // Create REGWEN-gated WE signal logic direct_access_wdata_0_gated_we; assign direct_access_wdata_0_gated_we = direct_access_wdata_0_we & direct_access_regwen_qs; - prim_subreg #( + caliptra_prim_subreg #( .DW (32), - .SwAccess(prim_subreg_pkg::SwAccessRW), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRW), .RESVAL (32'h0), .Mubi (1'b0) ) u_direct_access_wdata_0 ( @@ -1070,9 +1070,9 @@ module caliptra_otp_ctrl_core_reg_top ( // Create REGWEN-gated WE signal logic direct_access_wdata_1_gated_we; assign direct_access_wdata_1_gated_we = direct_access_wdata_1_we & direct_access_regwen_qs; - prim_subreg #( + caliptra_prim_subreg #( .DW (32), - .SwAccess(prim_subreg_pkg::SwAccessRW), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRW), .RESVAL (32'h0), .Mubi (1'b0) ) u_direct_access_wdata_1 ( @@ -1099,7 +1099,7 @@ module caliptra_otp_ctrl_core_reg_top ( // Subregister 0 of Multireg direct_access_rdata // R[direct_access_rdata_0]: V(True) - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (32) ) u_direct_access_rdata_0 ( .re (direct_access_rdata_0_re), @@ -1116,7 +1116,7 @@ module caliptra_otp_ctrl_core_reg_top ( // Subregister 1 of Multireg direct_access_rdata // R[direct_access_rdata_1]: V(True) - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (32) ) u_direct_access_rdata_1 ( .re (direct_access_rdata_1_re), @@ -1132,9 +1132,9 @@ module caliptra_otp_ctrl_core_reg_top ( // R[check_trigger_regwen]: V(False) - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessW0C), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessW0C), .RESVAL (1'h1), .Mubi (1'b0) ) u_check_trigger_regwen ( @@ -1167,7 +1167,7 @@ module caliptra_otp_ctrl_core_reg_top ( logic check_trigger_gated_we; assign check_trigger_gated_we = check_trigger_we & check_trigger_regwen_qs; // F[integrity]: 0:0 - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (1) ) u_check_trigger_integrity ( .re (1'b0), @@ -1183,7 +1183,7 @@ module caliptra_otp_ctrl_core_reg_top ( assign reg2hw.check_trigger.integrity.qe = check_trigger_qe; // F[consistency]: 1:1 - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (1) ) u_check_trigger_consistency ( .re (1'b0), @@ -1200,9 +1200,9 @@ module caliptra_otp_ctrl_core_reg_top ( // R[check_regwen]: V(False) - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessW0C), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessW0C), .RESVAL (1'h1), .Mubi (1'b0) ) u_check_regwen ( @@ -1231,9 +1231,9 @@ module caliptra_otp_ctrl_core_reg_top ( // Create REGWEN-gated WE signal logic check_timeout_gated_we; assign check_timeout_gated_we = check_timeout_we & check_regwen_qs; - prim_subreg #( + caliptra_prim_subreg #( .DW (32), - .SwAccess(prim_subreg_pkg::SwAccessRW), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRW), .RESVAL (32'h0), .Mubi (1'b0) ) u_check_timeout ( @@ -1262,9 +1262,9 @@ module caliptra_otp_ctrl_core_reg_top ( // Create REGWEN-gated WE signal logic integrity_check_period_gated_we; assign integrity_check_period_gated_we = integrity_check_period_we & check_regwen_qs; - prim_subreg #( + caliptra_prim_subreg #( .DW (32), - .SwAccess(prim_subreg_pkg::SwAccessRW), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRW), .RESVAL (32'h0), .Mubi (1'b0) ) u_integrity_check_period ( @@ -1293,9 +1293,9 @@ module caliptra_otp_ctrl_core_reg_top ( // Create REGWEN-gated WE signal logic consistency_check_period_gated_we; assign consistency_check_period_gated_we = consistency_check_period_we & check_regwen_qs; - prim_subreg #( + caliptra_prim_subreg #( .DW (32), - .SwAccess(prim_subreg_pkg::SwAccessRW), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRW), .RESVAL (32'h0), .Mubi (1'b0) ) u_consistency_check_period ( @@ -1324,9 +1324,9 @@ module caliptra_otp_ctrl_core_reg_top ( // Create REGWEN-gated WE signal logic vendor_test_read_lock_gated_we; assign vendor_test_read_lock_gated_we = vendor_test_read_lock_we & direct_access_regwen_qs; - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessW0C), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessW0C), .RESVAL (1'h1), .Mubi (1'b0) ) u_vendor_test_read_lock ( @@ -1356,9 +1356,9 @@ module caliptra_otp_ctrl_core_reg_top ( logic non_secret_fuses_read_lock_gated_we; assign non_secret_fuses_read_lock_gated_we = non_secret_fuses_read_lock_we & direct_access_regwen_qs; - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessW0C), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessW0C), .RESVAL (1'h1), .Mubi (1'b0) ) u_non_secret_fuses_read_lock ( @@ -1385,7 +1385,7 @@ module caliptra_otp_ctrl_core_reg_top ( // Subregister 0 of Multireg vendor_test_digest // R[vendor_test_digest_0]: V(True) - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (32) ) u_vendor_test_digest_0 ( .re (vendor_test_digest_0_re), @@ -1402,7 +1402,7 @@ module caliptra_otp_ctrl_core_reg_top ( // Subregister 1 of Multireg vendor_test_digest // R[vendor_test_digest_1]: V(True) - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (32) ) u_vendor_test_digest_1 ( .re (vendor_test_digest_1_re), @@ -1419,7 +1419,7 @@ module caliptra_otp_ctrl_core_reg_top ( // Subregister 0 of Multireg non_secret_fuses_digest // R[non_secret_fuses_digest_0]: V(True) - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (32) ) u_non_secret_fuses_digest_0 ( .re (non_secret_fuses_digest_0_re), @@ -1436,7 +1436,7 @@ module caliptra_otp_ctrl_core_reg_top ( // Subregister 1 of Multireg non_secret_fuses_digest // R[non_secret_fuses_digest_1]: V(True) - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (32) ) u_non_secret_fuses_digest_1 ( .re (non_secret_fuses_digest_1_re), @@ -1453,7 +1453,7 @@ module caliptra_otp_ctrl_core_reg_top ( // Subregister 0 of Multireg secret0_digest // R[secret0_digest_0]: V(True) - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (32) ) u_secret0_digest_0 ( .re (secret0_digest_0_re), @@ -1470,7 +1470,7 @@ module caliptra_otp_ctrl_core_reg_top ( // Subregister 1 of Multireg secret0_digest // R[secret0_digest_1]: V(True) - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (32) ) u_secret0_digest_1 ( .re (secret0_digest_1_re), @@ -1487,7 +1487,7 @@ module caliptra_otp_ctrl_core_reg_top ( // Subregister 0 of Multireg secret1_digest // R[secret1_digest_0]: V(True) - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (32) ) u_secret1_digest_0 ( .re (secret1_digest_0_re), @@ -1504,7 +1504,7 @@ module caliptra_otp_ctrl_core_reg_top ( // Subregister 1 of Multireg secret1_digest // R[secret1_digest_1]: V(True) - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (32) ) u_secret1_digest_1 ( .re (secret1_digest_1_re), @@ -1521,7 +1521,7 @@ module caliptra_otp_ctrl_core_reg_top ( // Subregister 0 of Multireg secret2_digest // R[secret2_digest_0]: V(True) - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (32) ) u_secret2_digest_0 ( .re (secret2_digest_0_re), @@ -1538,7 +1538,7 @@ module caliptra_otp_ctrl_core_reg_top ( // Subregister 1 of Multireg secret2_digest // R[secret2_digest_1]: V(True) - prim_subreg_ext #( + caliptra_prim_subreg_ext #( .DW (32) ) u_secret2_digest_1 ( .re (secret2_digest_1_re), @@ -1553,8 +1553,42 @@ module caliptra_otp_ctrl_core_reg_top ( ); + // Subregister 0 of Multireg secret3_digest + // R[secret3_digest_0]: V(True) + caliptra_prim_subreg_ext #( + .DW (32) + ) u_secret3_digest_0 ( + .re (secret3_digest_0_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.secret3_digest[0].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (secret3_digest_0_qs) + ); + + + // Subregister 1 of Multireg secret3_digest + // R[secret3_digest_1]: V(True) + caliptra_prim_subreg_ext #( + .DW (32) + ) u_secret3_digest_1 ( + .re (secret3_digest_1_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.secret3_digest[1].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (secret3_digest_1_qs) + ); + - logic [37:0] addr_hit; + + logic [40:0] addr_hit; always_comb begin addr_hit = '0; addr_hit[ 0] = (reg_addr == CALIPTRA_OTP_CTRL_INTR_STATE_OFFSET); @@ -1570,31 +1604,34 @@ module caliptra_otp_ctrl_core_reg_top ( addr_hit[10] = (reg_addr == CALIPTRA_OTP_CTRL_ERR_CODE_5_OFFSET); addr_hit[11] = (reg_addr == CALIPTRA_OTP_CTRL_ERR_CODE_6_OFFSET); addr_hit[12] = (reg_addr == CALIPTRA_OTP_CTRL_ERR_CODE_7_OFFSET); - addr_hit[13] = (reg_addr == CALIPTRA_OTP_CTRL_DIRECT_ACCESS_REGWEN_OFFSET); - addr_hit[14] = (reg_addr == CALIPTRA_OTP_CTRL_DIRECT_ACCESS_CMD_OFFSET); - addr_hit[15] = (reg_addr == CALIPTRA_OTP_CTRL_DIRECT_ACCESS_ADDRESS_OFFSET); - addr_hit[16] = (reg_addr == CALIPTRA_OTP_CTRL_DIRECT_ACCESS_WDATA_0_OFFSET); - addr_hit[17] = (reg_addr == CALIPTRA_OTP_CTRL_DIRECT_ACCESS_WDATA_1_OFFSET); - addr_hit[18] = (reg_addr == CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_0_OFFSET); - addr_hit[19] = (reg_addr == CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_1_OFFSET); - addr_hit[20] = (reg_addr == CALIPTRA_OTP_CTRL_CHECK_TRIGGER_REGWEN_OFFSET); - addr_hit[21] = (reg_addr == CALIPTRA_OTP_CTRL_CHECK_TRIGGER_OFFSET); - addr_hit[22] = (reg_addr == CALIPTRA_OTP_CTRL_CHECK_REGWEN_OFFSET); - addr_hit[23] = (reg_addr == CALIPTRA_OTP_CTRL_CHECK_TIMEOUT_OFFSET); - addr_hit[24] = (reg_addr == CALIPTRA_OTP_CTRL_INTEGRITY_CHECK_PERIOD_OFFSET); - addr_hit[25] = (reg_addr == CALIPTRA_OTP_CTRL_CONSISTENCY_CHECK_PERIOD_OFFSET); - addr_hit[26] = (reg_addr == CALIPTRA_OTP_CTRL_VENDOR_TEST_READ_LOCK_OFFSET); - addr_hit[27] = (reg_addr == CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_READ_LOCK_OFFSET); - addr_hit[28] = (reg_addr == CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_0_OFFSET); - addr_hit[29] = (reg_addr == CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_1_OFFSET); - addr_hit[30] = (reg_addr == CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_0_OFFSET); - addr_hit[31] = (reg_addr == CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_1_OFFSET); - addr_hit[32] = (reg_addr == CALIPTRA_OTP_CTRL_SECRET0_DIGEST_0_OFFSET); - addr_hit[33] = (reg_addr == CALIPTRA_OTP_CTRL_SECRET0_DIGEST_1_OFFSET); - addr_hit[34] = (reg_addr == CALIPTRA_OTP_CTRL_SECRET1_DIGEST_0_OFFSET); - addr_hit[35] = (reg_addr == CALIPTRA_OTP_CTRL_SECRET1_DIGEST_1_OFFSET); - addr_hit[36] = (reg_addr == CALIPTRA_OTP_CTRL_SECRET2_DIGEST_0_OFFSET); - addr_hit[37] = (reg_addr == CALIPTRA_OTP_CTRL_SECRET2_DIGEST_1_OFFSET); + addr_hit[13] = (reg_addr == CALIPTRA_OTP_CTRL_ERR_CODE_8_OFFSET); + addr_hit[14] = (reg_addr == CALIPTRA_OTP_CTRL_DIRECT_ACCESS_REGWEN_OFFSET); + addr_hit[15] = (reg_addr == CALIPTRA_OTP_CTRL_DIRECT_ACCESS_CMD_OFFSET); + addr_hit[16] = (reg_addr == CALIPTRA_OTP_CTRL_DIRECT_ACCESS_ADDRESS_OFFSET); + addr_hit[17] = (reg_addr == CALIPTRA_OTP_CTRL_DIRECT_ACCESS_WDATA_0_OFFSET); + addr_hit[18] = (reg_addr == CALIPTRA_OTP_CTRL_DIRECT_ACCESS_WDATA_1_OFFSET); + addr_hit[19] = (reg_addr == CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_0_OFFSET); + addr_hit[20] = (reg_addr == CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_1_OFFSET); + addr_hit[21] = (reg_addr == CALIPTRA_OTP_CTRL_CHECK_TRIGGER_REGWEN_OFFSET); + addr_hit[22] = (reg_addr == CALIPTRA_OTP_CTRL_CHECK_TRIGGER_OFFSET); + addr_hit[23] = (reg_addr == CALIPTRA_OTP_CTRL_CHECK_REGWEN_OFFSET); + addr_hit[24] = (reg_addr == CALIPTRA_OTP_CTRL_CHECK_TIMEOUT_OFFSET); + addr_hit[25] = (reg_addr == CALIPTRA_OTP_CTRL_INTEGRITY_CHECK_PERIOD_OFFSET); + addr_hit[26] = (reg_addr == CALIPTRA_OTP_CTRL_CONSISTENCY_CHECK_PERIOD_OFFSET); + addr_hit[27] = (reg_addr == CALIPTRA_OTP_CTRL_VENDOR_TEST_READ_LOCK_OFFSET); + addr_hit[28] = (reg_addr == CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_READ_LOCK_OFFSET); + addr_hit[29] = (reg_addr == CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_0_OFFSET); + addr_hit[30] = (reg_addr == CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_1_OFFSET); + addr_hit[31] = (reg_addr == CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_0_OFFSET); + addr_hit[32] = (reg_addr == CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_1_OFFSET); + addr_hit[33] = (reg_addr == CALIPTRA_OTP_CTRL_SECRET0_DIGEST_0_OFFSET); + addr_hit[34] = (reg_addr == CALIPTRA_OTP_CTRL_SECRET0_DIGEST_1_OFFSET); + addr_hit[35] = (reg_addr == CALIPTRA_OTP_CTRL_SECRET1_DIGEST_0_OFFSET); + addr_hit[36] = (reg_addr == CALIPTRA_OTP_CTRL_SECRET1_DIGEST_1_OFFSET); + addr_hit[37] = (reg_addr == CALIPTRA_OTP_CTRL_SECRET2_DIGEST_0_OFFSET); + addr_hit[38] = (reg_addr == CALIPTRA_OTP_CTRL_SECRET2_DIGEST_1_OFFSET); + addr_hit[39] = (reg_addr == CALIPTRA_OTP_CTRL_SECRET3_DIGEST_0_OFFSET); + addr_hit[40] = (reg_addr == CALIPTRA_OTP_CTRL_SECRET3_DIGEST_1_OFFSET); end assign addrmiss = (reg_re || reg_we) ? ~|addr_hit : 1'b0 ; @@ -1639,7 +1676,10 @@ module caliptra_otp_ctrl_core_reg_top ( (addr_hit[34] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[34] & ~reg_be))) | (addr_hit[35] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[35] & ~reg_be))) | (addr_hit[36] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[36] & ~reg_be))) | - (addr_hit[37] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[37] & ~reg_be))))); + (addr_hit[37] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[37] & ~reg_be))) | + (addr_hit[38] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[38] & ~reg_be))) | + (addr_hit[39] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[39] & ~reg_be))) | + (addr_hit[40] & (|(CALIPTRA_OTP_CTRL_CORE_PERMIT[40] & ~reg_be))))); end // Generate write-enables @@ -1678,64 +1718,67 @@ module caliptra_otp_ctrl_core_reg_top ( assign err_code_5_re = addr_hit[10] & reg_re & !reg_error; assign err_code_6_re = addr_hit[11] & reg_re & !reg_error; assign err_code_7_re = addr_hit[12] & reg_re & !reg_error; - assign direct_access_regwen_re = addr_hit[13] & reg_re & !reg_error; - assign direct_access_regwen_we = addr_hit[13] & reg_we & !reg_error; + assign err_code_8_re = addr_hit[13] & reg_re & !reg_error; + assign direct_access_regwen_re = addr_hit[14] & reg_re & !reg_error; + assign direct_access_regwen_we = addr_hit[14] & reg_we & !reg_error; assign direct_access_regwen_wd = reg_wdata[0]; - assign direct_access_cmd_we = addr_hit[14] & reg_we & !reg_error; + assign direct_access_cmd_we = addr_hit[15] & reg_we & !reg_error; assign direct_access_cmd_rd_wd = reg_wdata[0]; assign direct_access_cmd_wr_wd = reg_wdata[1]; assign direct_access_cmd_digest_wd = reg_wdata[2]; - assign direct_access_address_we = addr_hit[15] & reg_we & !reg_error; + assign direct_access_address_we = addr_hit[16] & reg_we & !reg_error; assign direct_access_address_wd = reg_wdata[11:0]; - assign direct_access_wdata_0_we = addr_hit[16] & reg_we & !reg_error; + assign direct_access_wdata_0_we = addr_hit[17] & reg_we & !reg_error; assign direct_access_wdata_0_wd = reg_wdata[31:0]; - assign direct_access_wdata_1_we = addr_hit[17] & reg_we & !reg_error; + assign direct_access_wdata_1_we = addr_hit[18] & reg_we & !reg_error; assign direct_access_wdata_1_wd = reg_wdata[31:0]; - assign direct_access_rdata_0_re = addr_hit[18] & reg_re & !reg_error; - assign direct_access_rdata_1_re = addr_hit[19] & reg_re & !reg_error; - assign check_trigger_regwen_we = addr_hit[20] & reg_we & !reg_error; + assign direct_access_rdata_0_re = addr_hit[19] & reg_re & !reg_error; + assign direct_access_rdata_1_re = addr_hit[20] & reg_re & !reg_error; + assign check_trigger_regwen_we = addr_hit[21] & reg_we & !reg_error; assign check_trigger_regwen_wd = reg_wdata[0]; - assign check_trigger_we = addr_hit[21] & reg_we & !reg_error; + assign check_trigger_we = addr_hit[22] & reg_we & !reg_error; assign check_trigger_integrity_wd = reg_wdata[0]; assign check_trigger_consistency_wd = reg_wdata[1]; - assign check_regwen_we = addr_hit[22] & reg_we & !reg_error; + assign check_regwen_we = addr_hit[23] & reg_we & !reg_error; assign check_regwen_wd = reg_wdata[0]; - assign check_timeout_we = addr_hit[23] & reg_we & !reg_error; + assign check_timeout_we = addr_hit[24] & reg_we & !reg_error; assign check_timeout_wd = reg_wdata[31:0]; - assign integrity_check_period_we = addr_hit[24] & reg_we & !reg_error; + assign integrity_check_period_we = addr_hit[25] & reg_we & !reg_error; assign integrity_check_period_wd = reg_wdata[31:0]; - assign consistency_check_period_we = addr_hit[25] & reg_we & !reg_error; + assign consistency_check_period_we = addr_hit[26] & reg_we & !reg_error; assign consistency_check_period_wd = reg_wdata[31:0]; - assign vendor_test_read_lock_we = addr_hit[26] & reg_we & !reg_error; + assign vendor_test_read_lock_we = addr_hit[27] & reg_we & !reg_error; assign vendor_test_read_lock_wd = reg_wdata[0]; - assign non_secret_fuses_read_lock_we = addr_hit[27] & reg_we & !reg_error; + assign non_secret_fuses_read_lock_we = addr_hit[28] & reg_we & !reg_error; assign non_secret_fuses_read_lock_wd = reg_wdata[0]; - assign vendor_test_digest_0_re = addr_hit[28] & reg_re & !reg_error; - assign vendor_test_digest_1_re = addr_hit[29] & reg_re & !reg_error; - assign non_secret_fuses_digest_0_re = addr_hit[30] & reg_re & !reg_error; - assign non_secret_fuses_digest_1_re = addr_hit[31] & reg_re & !reg_error; - assign secret0_digest_0_re = addr_hit[32] & reg_re & !reg_error; - assign secret0_digest_1_re = addr_hit[33] & reg_re & !reg_error; - assign secret1_digest_0_re = addr_hit[34] & reg_re & !reg_error; - assign secret1_digest_1_re = addr_hit[35] & reg_re & !reg_error; - assign secret2_digest_0_re = addr_hit[36] & reg_re & !reg_error; - assign secret2_digest_1_re = addr_hit[37] & reg_re & !reg_error; + assign vendor_test_digest_0_re = addr_hit[29] & reg_re & !reg_error; + assign vendor_test_digest_1_re = addr_hit[30] & reg_re & !reg_error; + assign non_secret_fuses_digest_0_re = addr_hit[31] & reg_re & !reg_error; + assign non_secret_fuses_digest_1_re = addr_hit[32] & reg_re & !reg_error; + assign secret0_digest_0_re = addr_hit[33] & reg_re & !reg_error; + assign secret0_digest_1_re = addr_hit[34] & reg_re & !reg_error; + assign secret1_digest_0_re = addr_hit[35] & reg_re & !reg_error; + assign secret1_digest_1_re = addr_hit[36] & reg_re & !reg_error; + assign secret2_digest_0_re = addr_hit[37] & reg_re & !reg_error; + assign secret2_digest_1_re = addr_hit[38] & reg_re & !reg_error; + assign secret3_digest_0_re = addr_hit[39] & reg_re & !reg_error; + assign secret3_digest_1_re = addr_hit[40] & reg_re & !reg_error; // Assign write-enables to checker logic vector. always_comb begin @@ -1753,22 +1796,22 @@ module caliptra_otp_ctrl_core_reg_top ( reg_we_check[10] = 1'b0; reg_we_check[11] = 1'b0; reg_we_check[12] = 1'b0; - reg_we_check[13] = direct_access_regwen_we; - reg_we_check[14] = direct_access_cmd_gated_we; - reg_we_check[15] = direct_access_address_gated_we; - reg_we_check[16] = direct_access_wdata_0_gated_we; - reg_we_check[17] = direct_access_wdata_1_gated_we; - reg_we_check[18] = 1'b0; + reg_we_check[13] = 1'b0; + reg_we_check[14] = direct_access_regwen_we; + reg_we_check[15] = direct_access_cmd_gated_we; + reg_we_check[16] = direct_access_address_gated_we; + reg_we_check[17] = direct_access_wdata_0_gated_we; + reg_we_check[18] = direct_access_wdata_1_gated_we; reg_we_check[19] = 1'b0; - reg_we_check[20] = check_trigger_regwen_we; - reg_we_check[21] = check_trigger_gated_we; - reg_we_check[22] = check_regwen_we; - reg_we_check[23] = check_timeout_gated_we; - reg_we_check[24] = integrity_check_period_gated_we; - reg_we_check[25] = consistency_check_period_gated_we; - reg_we_check[26] = vendor_test_read_lock_gated_we; - reg_we_check[27] = non_secret_fuses_read_lock_gated_we; - reg_we_check[28] = 1'b0; + reg_we_check[20] = 1'b0; + reg_we_check[21] = check_trigger_regwen_we; + reg_we_check[22] = check_trigger_gated_we; + reg_we_check[23] = check_regwen_we; + reg_we_check[24] = check_timeout_gated_we; + reg_we_check[25] = integrity_check_period_gated_we; + reg_we_check[26] = consistency_check_period_gated_we; + reg_we_check[27] = vendor_test_read_lock_gated_we; + reg_we_check[28] = non_secret_fuses_read_lock_gated_we; reg_we_check[29] = 1'b0; reg_we_check[30] = 1'b0; reg_we_check[31] = 1'b0; @@ -1778,6 +1821,9 @@ module caliptra_otp_ctrl_core_reg_top ( reg_we_check[35] = 1'b0; reg_we_check[36] = 1'b0; reg_we_check[37] = 1'b0; + reg_we_check[38] = 1'b0; + reg_we_check[39] = 1'b0; + reg_we_check[40] = 1'b0; end // Read data return @@ -1813,16 +1859,18 @@ module caliptra_otp_ctrl_core_reg_top ( reg_rdata_next[2] = status_secret0_error_qs; reg_rdata_next[3] = status_secret1_error_qs; reg_rdata_next[4] = status_secret2_error_qs; - reg_rdata_next[5] = status_life_cycle_error_qs; - reg_rdata_next[6] = status_dai_error_qs; - reg_rdata_next[7] = status_lci_error_qs; - reg_rdata_next[8] = status_timeout_error_qs; - reg_rdata_next[9] = status_lfsr_fsm_error_qs; - reg_rdata_next[10] = status_scrambling_fsm_error_qs; - reg_rdata_next[11] = status_key_deriv_fsm_error_qs; + reg_rdata_next[5] = status_secret3_error_qs; + reg_rdata_next[6] = status_life_cycle_error_qs; + reg_rdata_next[7] = status_dai_error_qs; + reg_rdata_next[8] = status_lci_error_qs; + reg_rdata_next[9] = status_timeout_error_qs; + reg_rdata_next[10] = status_lfsr_fsm_error_qs; + reg_rdata_next[11] = status_scrambling_fsm_error_qs; + //reg_rdata_next[12] = status_key_deriv_fsm_error_qs; reg_rdata_next[12] = status_bus_integ_error_qs; reg_rdata_next[13] = status_dai_idle_qs; reg_rdata_next[14] = status_check_pending_qs; + reg_rdata_next[15] = '0; end addr_hit[5]: begin @@ -1858,108 +1906,120 @@ module caliptra_otp_ctrl_core_reg_top ( end addr_hit[13]: begin - reg_rdata_next[0] = direct_access_regwen_qs; + reg_rdata_next[2:0] = err_code_8_qs; end addr_hit[14]: begin + reg_rdata_next[0] = direct_access_regwen_qs; + end + + addr_hit[15]: begin reg_rdata_next[0] = '0; reg_rdata_next[1] = '0; reg_rdata_next[2] = '0; end - addr_hit[15]: begin + addr_hit[16]: begin reg_rdata_next[11:0] = direct_access_address_qs; end - addr_hit[16]: begin + addr_hit[17]: begin reg_rdata_next[31:0] = direct_access_wdata_0_qs; end - addr_hit[17]: begin + addr_hit[18]: begin reg_rdata_next[31:0] = direct_access_wdata_1_qs; end - addr_hit[18]: begin + addr_hit[19]: begin reg_rdata_next[31:0] = direct_access_rdata_0_qs; end - addr_hit[19]: begin + addr_hit[20]: begin reg_rdata_next[31:0] = direct_access_rdata_1_qs; end - addr_hit[20]: begin + addr_hit[21]: begin reg_rdata_next[0] = check_trigger_regwen_qs; end - addr_hit[21]: begin + addr_hit[22]: begin reg_rdata_next[0] = '0; reg_rdata_next[1] = '0; end - addr_hit[22]: begin + addr_hit[23]: begin reg_rdata_next[0] = check_regwen_qs; end - addr_hit[23]: begin + addr_hit[24]: begin reg_rdata_next[31:0] = check_timeout_qs; end - addr_hit[24]: begin + addr_hit[25]: begin reg_rdata_next[31:0] = integrity_check_period_qs; end - addr_hit[25]: begin + addr_hit[26]: begin reg_rdata_next[31:0] = consistency_check_period_qs; end - addr_hit[26]: begin + addr_hit[27]: begin reg_rdata_next[0] = vendor_test_read_lock_qs; end - addr_hit[27]: begin + addr_hit[28]: begin reg_rdata_next[0] = non_secret_fuses_read_lock_qs; end - addr_hit[28]: begin + addr_hit[29]: begin reg_rdata_next[31:0] = vendor_test_digest_0_qs; end - addr_hit[29]: begin + addr_hit[30]: begin reg_rdata_next[31:0] = vendor_test_digest_1_qs; end - addr_hit[30]: begin + addr_hit[31]: begin reg_rdata_next[31:0] = non_secret_fuses_digest_0_qs; end - addr_hit[31]: begin + addr_hit[32]: begin reg_rdata_next[31:0] = non_secret_fuses_digest_1_qs; end - addr_hit[32]: begin + addr_hit[33]: begin reg_rdata_next[31:0] = secret0_digest_0_qs; end - addr_hit[33]: begin + addr_hit[34]: begin reg_rdata_next[31:0] = secret0_digest_1_qs; end - addr_hit[34]: begin + addr_hit[35]: begin reg_rdata_next[31:0] = secret1_digest_0_qs; end - addr_hit[35]: begin + addr_hit[36]: begin reg_rdata_next[31:0] = secret1_digest_1_qs; end - addr_hit[36]: begin + addr_hit[37]: begin reg_rdata_next[31:0] = secret2_digest_0_qs; end - addr_hit[37]: begin + addr_hit[38]: begin reg_rdata_next[31:0] = secret2_digest_1_qs; end + addr_hit[39]: begin + reg_rdata_next[31:0] = secret3_digest_0_qs; + end + + addr_hit[40]: begin + reg_rdata_next[31:0] = secret3_digest_1_qs; + end + default: begin reg_rdata_next = '1; end @@ -1983,12 +2043,12 @@ module caliptra_otp_ctrl_core_reg_top ( assign unused_be = ^reg_be; // Assertions for Register Interface - `ASSERT_PULSE(wePulse, reg_we, clk_i, !rst_ni) - `ASSERT_PULSE(rePulse, reg_re, clk_i, !rst_ni) + `CALIPTRA_ASSERT_PULSE(wePulse, reg_we, clk_i, !rst_ni) + `CALIPTRA_ASSERT_PULSE(rePulse, reg_re, clk_i, !rst_ni) - `ASSERT(reAfterRv, $rose(reg_re || reg_we) |=> tl_o_pre.d_valid, clk_i, !rst_ni) + `CALIPTRA_ASSERT(reAfterRv, $rose(reg_re || reg_we) |=> tl_o_pre.d_valid, clk_i, !rst_ni) - `ASSERT(en2addrHit, (reg_we || reg_re) |-> $onehot0(addr_hit), clk_i, !rst_ni) + `CALIPTRA_ASSERT(en2addrHit, (reg_we || reg_re) |-> $onehot0(addr_hit), clk_i, !rst_ni) // this is formulated as an assumption such that the FPV testbenches do disprove this // property by mistake diff --git a/src/fuse_ctrl/rtl/otp_ctrl_part_pkg.sv b/src/fuse_ctrl/rtl/caliptra_otp_ctrl_part_pkg.sv similarity index 81% rename from src/fuse_ctrl/rtl/otp_ctrl_part_pkg.sv rename to src/fuse_ctrl/rtl/caliptra_otp_ctrl_part_pkg.sv index ebc376735..49739e4b9 100755 --- a/src/fuse_ctrl/rtl/otp_ctrl_part_pkg.sv +++ b/src/fuse_ctrl/rtl/caliptra_otp_ctrl_part_pkg.sv @@ -7,18 +7,18 @@ // DO NOT EDIT THIS FILE DIRECTLY. // It has been generated with ./util/design/gen-otp-mmap.py -package otp_ctrl_part_pkg; +package caliptra_otp_ctrl_part_pkg; - import prim_util_pkg::vbits; - import otp_ctrl_reg_pkg::*; - import otp_ctrl_pkg::*; + import caliptra_prim_util_pkg::vbits; + import caliptra_otp_ctrl_reg_pkg::*; + import caliptra_otp_ctrl_pkg::*; //////////////////////////////////// // Scrambling Constants and Types // //////////////////////////////////// - parameter int NumScrmblKeys = 3; - parameter int NumDigestSets = 4; + parameter int NumScrmblKeys = 4; + parameter int NumDigestSets = 1; parameter int ScrmblKeySelWidth = vbits(NumScrmblKeys); parameter int DigestSetSelWidth = vbits(NumDigestSets); @@ -38,18 +38,17 @@ package otp_ctrl_part_pkg; typedef enum logic [ConstSelWidth-1:0] { Secret0Key, Secret1Key, - Secret2Key + Secret2Key, + Secret3Key } key_sel_e; typedef enum logic [ConstSelWidth-1:0] { - CnstyDigest, - FlashDataKey, - FlashAddrKey, - SramDataKey + CnstyDigest } digest_sel_e; // SEC_CM: SECRET.MEM.SCRAMBLE parameter key_array_t RndCnstKey = { + 128'hBEAD91D5FA4E09150E95F517CB98955B, 128'h85A9E830BC059BA9286D6E2856A05CC3, 128'hEFFA6D736C5EFF49AE7B70F9C46E5A62, 128'h3BA121C5E097DDEB7768B4C666E9C3DA @@ -58,18 +57,14 @@ package otp_ctrl_part_pkg; // SEC_CM: PART.MEM.DIGEST // Note: digest set 0 is used for computing the partition digests. Constants at // higher indices are used to compute the scrambling keys. + // [anjpar]:: changing below 2 parameters to 'default'. + // TODO verify with Google parameter digest_const_array_t RndCnstDigestConst = { - 128'h4A22D4B78FE0266FBEE3958332F2939B, - 128'hD60822E1FAEC5C7290C7F21F6224F027, - 128'h277195FC471E4B26B6641214B61D1B43, - 128'hE95F517CB98955B4D5A89AA9109294A + 128'hE048B657396B4B83277195FC471E4B26 }; parameter digest_iv_array_t RndCnstDigestIV = { - 64'hF98C48B1F9377284, - 64'hB7474D640F8A7F5, - 64'hE048B657396B4B83, - 64'hBEAD91D5FA4E0915 + 64'h4D5A89AA9109294A }; @@ -140,7 +135,7 @@ package otp_ctrl_part_pkg; '{ variant: Unbuffered, offset: 12'd64, - size: 3792, + size: 3736, key_sel: key_sel_e'('0), secret: 1'b0, sw_digest: 1'b1, @@ -154,8 +149,8 @@ package otp_ctrl_part_pkg; // SECRET0 '{ variant: Buffered, - offset: 12'd3856, - size: 56, + offset: 12'd3800, + size: 40, key_sel: Secret0Key, secret: 1'b1, sw_digest: 1'b0, @@ -169,8 +164,8 @@ package otp_ctrl_part_pkg; // SECRET1 '{ variant: Buffered, - offset: 12'd3912, - size: 40, + offset: 12'd3840, + size: 56, key_sel: Secret1Key, secret: 1'b1, sw_digest: 1'b0, @@ -184,8 +179,8 @@ package otp_ctrl_part_pkg; // SECRET2 '{ variant: Buffered, - offset: 12'd3952, - size: 56, + offset: 12'd3896, + size: 40, key_sel: Secret2Key, secret: 1'b1, sw_digest: 1'b0, @@ -196,6 +191,21 @@ package otp_ctrl_part_pkg; iskeymgr_creator: 1'b0, iskeymgr_owner: 1'b0 }, + // SECRET3 + '{ + variant: Buffered, + offset: 12'd3936, + size: 72, + key_sel: Secret3Key, + secret: 1'b1, + sw_digest: 1'b0, + hw_digest: 1'b1, + write_lock: 1'b1, + read_lock: 1'b1, + integrity: 1'b1, + iskeymgr_creator: 1'b0, + iskeymgr_owner: 1'b0 + }, // LIFE_CYCLE '{ variant: LifeCycle, @@ -219,12 +229,13 @@ package otp_ctrl_part_pkg; Secret0Idx, Secret1Idx, Secret2Idx, + Secret3Idx, LifeCycleIdx, // These are not "real partitions", but in terms of implementation it is convenient to // add these at the end of certain arrays. DaiIdx, LciIdx, - KdiIdx, + //KdiIdx, // Number of agents is the last idx+1. NumAgentsIdx } part_idx_e; @@ -239,18 +250,19 @@ package otp_ctrl_part_pkg; // default value for intermodule parameter otp_broadcast_t OTP_BROADCAST_DEFAULT = '{ - valid: lc_ctrl_pkg::Off, + valid: lc_ctrl_pkg::Off }; // OTP invalid partition default for buffered partitions. parameter logic [32767:0] PartInvDefault = 32768'({ 704'({ - 320'h55D0320379A0D260426D99D374E699CAE00E9680BD9B70291C752824C7DDC89694CD3DED94B57819, - 384'hDBC827839FE2DCC27E17D06B5D4E0DDDDBB9844327F20FB5D396D1CE085BDC31105733EAA3880C5A234729143F97B62A + 320'h234729143F97B62A55D0320379A0D260426D99D374E699CAE00E9680BD9B70291C752824C7DDC896, + 384'hB6711DB6F5D40A37DBC827839FE2DCC27E17D06B5D4E0DDDDBB9844327F20FB5D396D1CE085BDC31105733EAA3880C5A }), - 448'({ + 576'({ 64'hD3D58610F4851667, + 128'hB28B5C0FEE5F4C02711D135F59A50322, 384'h0 }), 320'({ @@ -261,12 +273,17 @@ package otp_ctrl_part_pkg; 64'h2C0DBDDEDF7A854D, 384'h0 }), - 30336'({ + 320'({ 64'hD0BAC511D08ECE0E, - 28704'h0, // unallocated space + 128'h58840E458E4029A6B5AC1F53D00A08C3, + 128'h7ABB319BDA0529AE40119A3C6E63CDF3 + }), + 29888'({ + 64'h2A4D8B51F5D41C8A, + 28256'h0, // unallocated space 32'h0, 128'h0, - 768'h63B9485A3856C417CF7A50A9A91EF7F7B3A5B4421F462370FFF698183664DC7EDF3888886BD10DC67ABB319BDA0529AE40119A3C6E63CDF358840E458E4029A6B5AC1F53D00A08C3B28B5C0FEE5F4C02711D135F59A50322B6711DB6F5D40A37, + 768'hB6641214B61D1B430B7474D640F8A7F5D60822E1FAEC5C7290C7F21F6224F027F98C48B1F93772844A22D4B78FE0266FBEE3958332F2939B63B9485A3856C417CF7A50A9A91EF7F7B3A5B4421F462370FFF698183664DC7EDF3888886BD10DC6, 384'h0, 32'h0, 32'h0, @@ -275,7 +292,7 @@ package otp_ctrl_part_pkg; 32'h0 }), 512'({ - 64'h2A4D8B51F5D41C8A, + 64'h94CD3DED94B57819, 448'h0 })}); @@ -283,9 +300,9 @@ package otp_ctrl_part_pkg; // Parameterized Assignment Helper Functions // /////////////////////////////////////////////// - function automatic otp_ctrl_core_hw2reg_t named_reg_assign( + function automatic caliptra_otp_ctrl_core_hw2reg_t named_reg_assign( logic [NumPart-1:0][ScrmblBlockWidth-1:0] part_digest); - otp_ctrl_core_hw2reg_t hw2reg; + caliptra_otp_ctrl_core_hw2reg_t hw2reg; logic unused_sigs; unused_sigs = ^part_digest; hw2reg = '0; @@ -294,25 +311,26 @@ package otp_ctrl_part_pkg; hw2reg.secret0_digest = part_digest[Secret0Idx]; hw2reg.secret1_digest = part_digest[Secret1Idx]; hw2reg.secret2_digest = part_digest[Secret2Idx]; + hw2reg.secret3_digest = part_digest[Secret3Idx]; return hw2reg; endfunction : named_reg_assign function automatic part_access_t [NumPart-1:0] named_part_access_pre( - otp_ctrl_core_reg2hw_t reg2hw); + caliptra_otp_ctrl_core_reg2hw_t reg2hw); part_access_t [NumPart-1:0] part_access_pre; logic unused_sigs; unused_sigs = ^reg2hw; // Default (this will be overridden by partition-internal settings). - part_access_pre = {{32'(2*NumPart)}{prim_mubi_pkg::MuBi8False}}; + part_access_pre = {{32'(2*NumPart)}{caliptra_prim_mubi_pkg::MuBi8False}}; // Note: these could be made a MuBi CSRs in the future. // The main thing that is missing right now is proper support for W0C. // VENDOR_TEST if (!reg2hw.vendor_test_read_lock) begin - part_access_pre[VendorTestIdx].read_lock = prim_mubi_pkg::MuBi8True; + part_access_pre[VendorTestIdx].read_lock = caliptra_prim_mubi_pkg::MuBi8True; end // NON_SECRET_FUSES if (!reg2hw.non_secret_fuses_read_lock) begin - part_access_pre[NonSecretFusesIdx].read_lock = prim_mubi_pkg::MuBi8True; + part_access_pre[NonSecretFusesIdx].read_lock = caliptra_prim_mubi_pkg::MuBi8True; end return part_access_pre; endfunction : named_part_access_pre @@ -339,6 +357,9 @@ package otp_ctrl_part_pkg; // SECRET2 unused ^= ^{part_init_done[Secret2Idx], part_buf_data[Secret2Offset +: Secret2Size]}; + // SECRET3 + unused ^= ^{part_init_done[Secret3Idx], + part_buf_data[Secret3Offset +: Secret3Size]}; // LIFE_CYCLE unused ^= ^{part_init_done[LifeCycleIdx], part_buf_data[LifeCycleOffset +: LifeCycleSize]}; @@ -346,6 +367,7 @@ package otp_ctrl_part_pkg; return otp_broadcast; endfunction : named_broadcast_assign + /* function automatic otp_keymgr_key_t named_keymgr_key_assign( logic [NumPart-1:0][ScrmblBlockWidth-1:0] part_digest, logic [$bits(PartInvDefault)/8-1:0][7:0] part_buf_data, @@ -372,11 +394,14 @@ package otp_ctrl_part_pkg; // SECRET2 unused ^= ^{part_digest[Secret2Idx], part_buf_data[Secret2Offset +: Secret2Size]}; + // SECRET3 + unused ^= ^{part_digest[Secret3Idx], + part_buf_data[Secret3Offset +: Secret3Size]}; // LIFE_CYCLE unused ^= ^{part_digest[LifeCycleIdx], part_buf_data[LifeCycleOffset +: LifeCycleSize]}; unused ^= valid; return otp_keymgr_key; endfunction : named_keymgr_key_assign - -endpackage : otp_ctrl_part_pkg + */ +endpackage : caliptra_otp_ctrl_part_pkg diff --git a/src/fuse_ctrl/rtl/otp_ctrl_pkg.sv b/src/fuse_ctrl/rtl/caliptra_otp_ctrl_pkg.sv similarity index 89% rename from src/fuse_ctrl/rtl/otp_ctrl_pkg.sv rename to src/fuse_ctrl/rtl/caliptra_otp_ctrl_pkg.sv index 7a460fdd5..71d751812 100644 --- a/src/fuse_ctrl/rtl/otp_ctrl_pkg.sv +++ b/src/fuse_ctrl/rtl/caliptra_otp_ctrl_pkg.sv @@ -3,10 +3,10 @@ // SPDX-License-Identifier: Apache-2.0 // -package otp_ctrl_pkg; +package caliptra_otp_ctrl_pkg; - import prim_util_pkg::vbits; - import otp_ctrl_reg_pkg::*; + import caliptra_prim_util_pkg::vbits; + import caliptra_otp_ctrl_reg_pkg::*; //////////////////////// // General Parameters // @@ -35,8 +35,8 @@ package otp_ctrl_pkg; // controller FSMs and the DAI whether a partition is locked or not. Any other value than // "Mubi8Lo" is interpreted as "Locked" in those FSMs. typedef struct packed { - prim_mubi_pkg::mubi8_t read_lock; - prim_mubi_pkg::mubi8_t write_lock; + caliptra_prim_mubi_pkg::mubi8_t read_lock; + caliptra_prim_mubi_pkg::mubi8_t write_lock; } part_access_t; parameter int DaiCmdWidth = 3; @@ -112,15 +112,19 @@ package otp_ctrl_pkg; lc_ctrl_state_pkg::lc_state_t state; lc_ctrl_state_pkg::lc_cnt_t count; // This is set to "On" if the partition containing the - // root secrets have been locked. In that case, the device - // is considered "personalized". - lc_ctrl_pkg::lc_tx_t secrets_valid; + // obfuscated UDS seed been locked. + lc_ctrl_pkg::lc_tx_t obfs_uds_seed_valid; // This is set to "On" if the partition containing the // test tokens has been locked. lc_ctrl_pkg::lc_tx_t test_tokens_valid; lc_ctrl_state_pkg::lc_token_t test_unlock_token; lc_ctrl_state_pkg::lc_token_t test_exit_token; // This is set to "On" if the partition containing the + // field entropy has been locked + lc_ctrl_pkg::lc_tx_t field_entropy_valid; + // NOTE that a similar one is not needed for PK Hash + // even though it is defined as a secret partition + // This is set to "On" if the partition containing the // rma token has been locked. lc_ctrl_pkg::lc_tx_t rma_token_valid; lc_ctrl_state_pkg::lc_token_t rma_token; @@ -135,10 +139,11 @@ package otp_ctrl_pkg; error: 1'b0, state: lc_ctrl_state_pkg::LcStTestUnlocked0, count: lc_ctrl_state_pkg::LcCnt1, - secrets_valid: lc_ctrl_pkg::Off, + obfs_uds_seed_valid: lc_ctrl_pkg::Off, test_tokens_valid: lc_ctrl_pkg::Off, test_unlock_token: '0, test_exit_token: '0, + field_entropy_valid: lc_ctrl_pkg::Off, rma_token_valid: lc_ctrl_pkg::Off, rma_token: '0 }; @@ -177,6 +182,19 @@ package otp_ctrl_pkg; // Typedefs for Key Broadcast // //////////////////////////////// + parameter int ObfuscatedUDSSeedWidth = 384; + parameter int FieldEntropyWidth = 256; + parameter int PKHashKeyManifestWidth = 384; + + typedef logic [ObfuscatedUDSSeedWidth-1:0] obfuscated_uds_seed_t; + typedef logic [FieldEntropyWidth-1:0] field_entropy_t; + typedef logic [PKHashKeyManifestWidth] pk_hash_t; + + parameter obfuscated_uds_seed_t OBFUSCATED_UDS_SEED_DEFAULT = 384'h0; + parameter field_entropy_t FIELD_ENTROPY_DEFAULT = 256'h0; + parameter pk_hash_t PK_HASH_DEFAULT = 384'h0; + + /* parameter int FlashKeySeedWidth = 256; parameter int SramKeySeedWidth = 128; parameter int KeyMgrKeyWidth = 256; @@ -185,6 +203,7 @@ package otp_ctrl_pkg; parameter int SramNonceWidth = 128; parameter int OtbnKeyWidth = 128; parameter int OtbnNonceWidth = 64; + typedef logic [SramKeyWidth-1:0] sram_key_t; typedef logic [SramNonceWidth-1:0] sram_nonce_t; @@ -275,7 +294,7 @@ package otp_ctrl_pkg; otbn_nonce_t nonce; // 256bit nonce. logic seed_valid; // Set to 1 if the key seed has been provisioned and is valid. } otbn_otp_key_rsp_t; - + */ //////////////////////////////// // Power/Reset Ctrl Interface // //////////////////////////////// @@ -317,11 +336,13 @@ package otp_ctrl_pkg; localparam lfsr_perm_t RndCnstLfsrPermDefault = 240'h4235171482c225f79289b32181a0163a760355d3447063d16661e44c12a5; + /* typedef struct packed { sram_key_t key; sram_nonce_t nonce; } scrmbl_key_init_t; localparam scrmbl_key_init_t RndCnstScrmblKeyInitDefault = 256'hcebeb96ffe0eced795f8b2cfe23c1e519e4fa08047a6bcfb811b04f0a479006e; + */ -endpackage : otp_ctrl_pkg +endpackage : caliptra_otp_ctrl_pkg diff --git a/src/fuse_ctrl/rtl/caliptra_otp_ctrl_prim_reg_top.sv b/src/fuse_ctrl/rtl/caliptra_otp_ctrl_prim_reg_top.sv index 684a80bde..de624ba07 100644 --- a/src/fuse_ctrl/rtl/caliptra_otp_ctrl_prim_reg_top.sv +++ b/src/fuse_ctrl/rtl/caliptra_otp_ctrl_prim_reg_top.sv @@ -4,7 +4,7 @@ // // Register Top module auto-generated by `reggen` -`include "prim_assert.sv" +`include "caliptra_prim_assert.sv" module caliptra_otp_ctrl_prim_reg_top ( input clk_i, @@ -53,9 +53,9 @@ module caliptra_otp_ctrl_prim_reg_top ( // also check for spurious write enables logic reg_we_err; logic [7:0] reg_we_check; - prim_reg_we_check #( + caliptra_prim_reg_we_check #( .OneHotWidth(8) - ) u_prim_reg_we_check ( + ) u_caliptra_prim_reg_we_check ( .clk_i(clk_i), .rst_ni(rst_ni), .oh_i (reg_we_check), @@ -79,8 +79,8 @@ module caliptra_otp_ctrl_prim_reg_top ( // outgoing integrity generation tlul_pkg::tl_d2h_t tl_o_pre; tlul_rsp_intg_gen #( - .EnableRspIntgGen(1), - .EnableDataIntgGen(1) + .EnableRspIntgGen(1), // [anjpar]: 09/19/2024: Disable response integrity generation + .EnableDataIntgGen(1) // [anjpar]: 09/19/2024: Disable response integrity generation ) u_rsp_intg_gen ( .tl_i(tl_o_pre), .tl_o(tl_o) @@ -100,7 +100,7 @@ module caliptra_otp_ctrl_prim_reg_top ( .tl_i (tl_reg_h2d), .tl_o (tl_reg_d2h), - .en_ifetch_i(prim_mubi_pkg::MuBi4False), + .en_ifetch_i(caliptra_prim_mubi_pkg::MuBi4False), .intg_error_o(), .we_o (reg_we), @@ -196,9 +196,9 @@ module caliptra_otp_ctrl_prim_reg_top ( // Register instances // R[csr0]: V(False) // F[field0]: 0:0 - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessRW), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRW), .RESVAL (1'h0), .Mubi (1'b0) ) u_csr0_field0 ( @@ -223,9 +223,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field1]: 1:1 - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessRW), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRW), .RESVAL (1'h0), .Mubi (1'b0) ) u_csr0_field1 ( @@ -250,9 +250,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field2]: 2:2 - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessRW), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRW), .RESVAL (1'h0), .Mubi (1'b0) ) u_csr0_field2 ( @@ -277,9 +277,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field3]: 13:4 - prim_subreg #( + caliptra_prim_subreg #( .DW (10), - .SwAccess(prim_subreg_pkg::SwAccessRW), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRW), .RESVAL (10'h0), .Mubi (1'b0) ) u_csr0_field3 ( @@ -304,9 +304,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field4]: 26:16 - prim_subreg #( + caliptra_prim_subreg #( .DW (11), - .SwAccess(prim_subreg_pkg::SwAccessRW), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRW), .RESVAL (11'h0), .Mubi (1'b0) ) u_csr0_field4 ( @@ -333,9 +333,9 @@ module caliptra_otp_ctrl_prim_reg_top ( // R[csr1]: V(False) // F[field0]: 6:0 - prim_subreg #( + caliptra_prim_subreg #( .DW (7), - .SwAccess(prim_subreg_pkg::SwAccessRW), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRW), .RESVAL (7'h0), .Mubi (1'b0) ) u_csr1_field0 ( @@ -360,9 +360,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field1]: 7:7 - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessRW), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRW), .RESVAL (1'h0), .Mubi (1'b0) ) u_csr1_field1 ( @@ -387,9 +387,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field2]: 14:8 - prim_subreg #( + caliptra_prim_subreg #( .DW (7), - .SwAccess(prim_subreg_pkg::SwAccessRW), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRW), .RESVAL (7'h0), .Mubi (1'b0) ) u_csr1_field2 ( @@ -414,9 +414,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field3]: 15:15 - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessRW), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRW), .RESVAL (1'h0), .Mubi (1'b0) ) u_csr1_field3 ( @@ -441,9 +441,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field4]: 31:16 - prim_subreg #( + caliptra_prim_subreg #( .DW (16), - .SwAccess(prim_subreg_pkg::SwAccessRW), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRW), .RESVAL (16'h0), .Mubi (1'b0) ) u_csr1_field4 ( @@ -469,9 +469,9 @@ module caliptra_otp_ctrl_prim_reg_top ( // R[csr2]: V(False) - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessRW), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRW), .RESVAL (1'h0), .Mubi (1'b0) ) u_csr2 ( @@ -498,9 +498,9 @@ module caliptra_otp_ctrl_prim_reg_top ( // R[csr3]: V(False) // F[field0]: 2:0 - prim_subreg #( + caliptra_prim_subreg #( .DW (3), - .SwAccess(prim_subreg_pkg::SwAccessW1C), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessW1C), .RESVAL (3'h0), .Mubi (1'b0) ) u_csr3_field0 ( @@ -525,9 +525,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field1]: 13:4 - prim_subreg #( + caliptra_prim_subreg #( .DW (10), - .SwAccess(prim_subreg_pkg::SwAccessW1C), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessW1C), .RESVAL (10'h0), .Mubi (1'b0) ) u_csr3_field1 ( @@ -552,9 +552,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field2]: 16:16 - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessW1C), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessW1C), .RESVAL (1'h0), .Mubi (1'b0) ) u_csr3_field2 ( @@ -579,9 +579,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field3]: 17:17 - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessRO), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRO), .RESVAL (1'h0), .Mubi (1'b0) ) u_csr3_field3 ( @@ -606,9 +606,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field4]: 18:18 - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessRO), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRO), .RESVAL (1'h0), .Mubi (1'b0) ) u_csr3_field4 ( @@ -633,9 +633,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field5]: 19:19 - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessRO), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRO), .RESVAL (1'h0), .Mubi (1'b0) ) u_csr3_field5 ( @@ -660,9 +660,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field6]: 20:20 - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessRO), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRO), .RESVAL (1'h0), .Mubi (1'b0) ) u_csr3_field6 ( @@ -687,9 +687,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field7]: 21:21 - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessRO), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRO), .RESVAL (1'h0), .Mubi (1'b0) ) u_csr3_field7 ( @@ -714,9 +714,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field8]: 22:22 - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessRO), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRO), .RESVAL (1'h0), .Mubi (1'b0) ) u_csr3_field8 ( @@ -743,9 +743,9 @@ module caliptra_otp_ctrl_prim_reg_top ( // R[csr4]: V(False) // F[field0]: 9:0 - prim_subreg #( + caliptra_prim_subreg #( .DW (10), - .SwAccess(prim_subreg_pkg::SwAccessRW), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRW), .RESVAL (10'h0), .Mubi (1'b0) ) u_csr4_field0 ( @@ -770,9 +770,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field1]: 12:12 - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessRW), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRW), .RESVAL (1'h0), .Mubi (1'b0) ) u_csr4_field1 ( @@ -797,9 +797,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field2]: 13:13 - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessRW), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRW), .RESVAL (1'h0), .Mubi (1'b0) ) u_csr4_field2 ( @@ -824,9 +824,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field3]: 14:14 - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessRW), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRW), .RESVAL (1'h0), .Mubi (1'b0) ) u_csr4_field3 ( @@ -853,9 +853,9 @@ module caliptra_otp_ctrl_prim_reg_top ( // R[csr5]: V(False) // F[field0]: 5:0 - prim_subreg #( + caliptra_prim_subreg #( .DW (6), - .SwAccess(prim_subreg_pkg::SwAccessRW), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRW), .RESVAL (6'h0), .Mubi (1'b0) ) u_csr5_field0 ( @@ -880,9 +880,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field1]: 7:6 - prim_subreg #( + caliptra_prim_subreg #( .DW (2), - .SwAccess(prim_subreg_pkg::SwAccessRW), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRW), .RESVAL (2'h0), .Mubi (1'b0) ) u_csr5_field1 ( @@ -907,9 +907,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field2]: 8:8 - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessRO), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRO), .RESVAL (1'h0), .Mubi (1'b0) ) u_csr5_field2 ( @@ -934,9 +934,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field3]: 11:9 - prim_subreg #( + caliptra_prim_subreg #( .DW (3), - .SwAccess(prim_subreg_pkg::SwAccessRO), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRO), .RESVAL (3'h0), .Mubi (1'b0) ) u_csr5_field3 ( @@ -961,9 +961,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field4]: 12:12 - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessRO), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRO), .RESVAL (1'h0), .Mubi (1'b0) ) u_csr5_field4 ( @@ -988,9 +988,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field5]: 13:13 - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessRO), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRO), .RESVAL (1'h0), .Mubi (1'b0) ) u_csr5_field5 ( @@ -1015,9 +1015,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field6]: 31:16 - prim_subreg #( + caliptra_prim_subreg #( .DW (16), - .SwAccess(prim_subreg_pkg::SwAccessRW), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRW), .RESVAL (16'h0), .Mubi (1'b0) ) u_csr5_field6 ( @@ -1044,9 +1044,9 @@ module caliptra_otp_ctrl_prim_reg_top ( // R[csr6]: V(False) // F[field0]: 9:0 - prim_subreg #( + caliptra_prim_subreg #( .DW (10), - .SwAccess(prim_subreg_pkg::SwAccessRW), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRW), .RESVAL (10'h0), .Mubi (1'b0) ) u_csr6_field0 ( @@ -1071,9 +1071,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field1]: 11:11 - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessRW), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRW), .RESVAL (1'h0), .Mubi (1'b0) ) u_csr6_field1 ( @@ -1098,9 +1098,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field2]: 12:12 - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessRW), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRW), .RESVAL (1'h0), .Mubi (1'b0) ) u_csr6_field2 ( @@ -1125,9 +1125,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field3]: 31:16 - prim_subreg #( + caliptra_prim_subreg #( .DW (16), - .SwAccess(prim_subreg_pkg::SwAccessRW), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRW), .RESVAL (16'h0), .Mubi (1'b0) ) u_csr6_field3 ( @@ -1154,9 +1154,9 @@ module caliptra_otp_ctrl_prim_reg_top ( // R[csr7]: V(False) // F[field0]: 5:0 - prim_subreg #( + caliptra_prim_subreg #( .DW (6), - .SwAccess(prim_subreg_pkg::SwAccessRO), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRO), .RESVAL (6'h0), .Mubi (1'b0) ) u_csr7_field0 ( @@ -1181,9 +1181,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field1]: 10:8 - prim_subreg #( + caliptra_prim_subreg #( .DW (3), - .SwAccess(prim_subreg_pkg::SwAccessRO), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRO), .RESVAL (3'h0), .Mubi (1'b0) ) u_csr7_field1 ( @@ -1208,9 +1208,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field2]: 14:14 - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessRO), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRO), .RESVAL (1'h0), .Mubi (1'b0) ) u_csr7_field2 ( @@ -1235,9 +1235,9 @@ module caliptra_otp_ctrl_prim_reg_top ( ); // F[field3]: 15:15 - prim_subreg #( + caliptra_prim_subreg #( .DW (1), - .SwAccess(prim_subreg_pkg::SwAccessRO), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessRO), .RESVAL (1'h0), .Mubi (1'b0) ) u_csr7_field3 ( @@ -1453,12 +1453,12 @@ module caliptra_otp_ctrl_prim_reg_top ( assign unused_be = ^reg_be; // Assertions for Register Interface - `ASSERT_PULSE(wePulse, reg_we, clk_i, !rst_ni) - `ASSERT_PULSE(rePulse, reg_re, clk_i, !rst_ni) + `CALIPTRA_ASSERT_PULSE(wePulse, reg_we, clk_i, !rst_ni) + `CALIPTRA_ASSERT_PULSE(rePulse, reg_re, clk_i, !rst_ni) - `ASSERT(reAfterRv, $rose(reg_re || reg_we) |=> tl_o_pre.d_valid, clk_i, !rst_ni) + `CALIPTRA_ASSERT(reAfterRv, $rose(reg_re || reg_we) |=> tl_o_pre.d_valid, clk_i, !rst_ni) - `ASSERT(en2addrHit, (reg_we || reg_re) |-> $onehot0(addr_hit), clk_i, !rst_ni) + `CALIPTRA_ASSERT(en2addrHit, (reg_we || reg_re) |-> $onehot0(addr_hit), clk_i, !rst_ni) // this is formulated as an assumption such that the FPV testbenches do disprove this // property by mistake diff --git a/src/fuse_ctrl/rtl/caliptra_otp_ctrl_reg_pkg.sv b/src/fuse_ctrl/rtl/caliptra_otp_ctrl_reg_pkg.sv index 0803cd62d..f982f9e7c 100644 --- a/src/fuse_ctrl/rtl/caliptra_otp_ctrl_reg_pkg.sv +++ b/src/fuse_ctrl/rtl/caliptra_otp_ctrl_reg_pkg.sv @@ -9,13 +9,13 @@ package caliptra_otp_ctrl_reg_pkg; // Param list parameter int NumSramKeyReqSlots = 4; parameter int OtpByteAddrWidth = 12; - parameter int NumErrorEntries = 8; + parameter int NumErrorEntries = 9; parameter int NumDaiWords = 2; parameter int NumDigestWords = 2; parameter int NumSwCfgWindowWords = 1024; - parameter int NumPart = 6; + parameter int NumPart = 7; parameter int NumPartUnbuf = 2; - parameter int NumPartBuf = 4; + parameter int NumPartBuf = 5; parameter int VendorTestOffset = 0; parameter int VendorTestSize = 64; parameter int ScratchOffset = 0; @@ -23,7 +23,7 @@ package caliptra_otp_ctrl_reg_pkg; parameter int VendorTestDigestOffset = 56; parameter int VendorTestDigestSize = 8; parameter int NonSecretFusesOffset = 64; - parameter int NonSecretFusesSize = 3792; + parameter int NonSecretFusesSize = 3736; parameter int FmcKeyManifestSvnOffset = 64; parameter int FmcKeyManifestSvnSize = 4; parameter int RuntimeSvnOffset = 68; @@ -42,26 +42,36 @@ package caliptra_otp_ctrl_reg_pkg; parameter int IdevidManufHsmIdSize = 16; parameter int SocSteppingIdOffset = 256; parameter int SocSteppingIdSize = 4; - parameter int NonSecretFusesDigestOffset = 3848; + parameter int NonSecretFusesDigestOffset = 3792; parameter int NonSecretFusesDigestSize = 8; - parameter int Secret0Offset = 3856; - parameter int Secret0Size = 56; - parameter int UdsSeedOffset = 3856; - parameter int UdsSeedSize = 48; - parameter int Secret0DigestOffset = 3904; + parameter int Secret0Offset = 3800; + parameter int Secret0Size = 40; + parameter int TestUnlockTokenOffset = 3800; + parameter int TestUnlockTokenSize = 16; + parameter int TestExitTokenOffset = 3816; + parameter int TestExitTokenSize = 16; + parameter int Secret0DigestOffset = 3832; parameter int Secret0DigestSize = 8; - parameter int Secret1Offset = 3912; - parameter int Secret1Size = 40; - parameter int FieldEntropyOffset = 3912; - parameter int FieldEntropySize = 32; - parameter int Secret1DigestOffset = 3944; + parameter int Secret1Offset = 3840; + parameter int Secret1Size = 56; + parameter int UdsSeedOffset = 3840; + parameter int UdsSeedSize = 48; + parameter int Secret1DigestOffset = 3888; parameter int Secret1DigestSize = 8; - parameter int Secret2Offset = 3952; - parameter int Secret2Size = 56; - parameter int KeyManifestPkHashOffset = 3952; - parameter int KeyManifestPkHashSize = 48; - parameter int Secret2DigestOffset = 4000; + parameter int Secret2Offset = 3896; + parameter int Secret2Size = 40; + parameter int FieldEntropyOffset = 3896; + parameter int FieldEntropySize = 32; + parameter int Secret2DigestOffset = 3928; parameter int Secret2DigestSize = 8; + parameter int Secret3Offset = 3936; + parameter int Secret3Size = 72; + parameter int KeyManifestPkHashOffset = 3936; + parameter int KeyManifestPkHashSize = 48; + parameter int RmaTokenOffset = 3984; + parameter int RmaTokenSize = 16; + parameter int Secret3DigestOffset = 4000; + parameter int Secret3DigestSize = 8; parameter int LifeCycleOffset = 4008; parameter int LifeCycleSize = 88; parameter int LcTransitionCntOffset = 4008; @@ -216,6 +226,9 @@ package caliptra_otp_ctrl_reg_pkg; struct packed { logic d; } secret2_error; + struct packed { + logic d; + } secret3_error; struct packed { logic d; } life_cycle_error; @@ -234,9 +247,9 @@ package caliptra_otp_ctrl_reg_pkg; struct packed { logic d; } scrambling_fsm_error; - struct packed { - logic d; - } key_deriv_fsm_error; + //struct packed { + // logic d; + //} key_deriv_fsm_error; struct packed { logic d; } bus_integ_error; @@ -280,6 +293,10 @@ package caliptra_otp_ctrl_reg_pkg; logic [31:0] d; } caliptra_otp_ctrl_hw2reg_secret2_digest_mreg_t; + typedef struct packed { + logic [31:0] d; + } caliptra_otp_ctrl_hw2reg_secret3_digest_mreg_t; + // Register -> HW type for core interface typedef struct packed { caliptra_otp_ctrl_reg2hw_intr_state_reg_t intr_state; // [203:202] @@ -300,17 +317,18 @@ package caliptra_otp_ctrl_reg_pkg; // HW -> register type for core interface typedef struct packed { - caliptra_otp_ctrl_hw2reg_intr_state_reg_t intr_state; // [427:424] - caliptra_otp_ctrl_hw2reg_status_reg_t status; // [423:409] - caliptra_otp_ctrl_hw2reg_err_code_mreg_t [7:0] err_code; // [408:385] - caliptra_otp_ctrl_hw2reg_direct_access_regwen_reg_t direct_access_regwen; // [384:384] - caliptra_otp_ctrl_hw2reg_direct_access_rdata_mreg_t [1:0] direct_access_rdata; // [383:320] - caliptra_otp_ctrl_hw2reg_vendor_test_digest_mreg_t [1:0] vendor_test_digest; // [319:256] + caliptra_otp_ctrl_hw2reg_intr_state_reg_t intr_state; // [495:492] + caliptra_otp_ctrl_hw2reg_status_reg_t status; // [491:476] + caliptra_otp_ctrl_hw2reg_err_code_mreg_t [8:0] err_code; // [475:449] + caliptra_otp_ctrl_hw2reg_direct_access_regwen_reg_t direct_access_regwen; // [448:448] + caliptra_otp_ctrl_hw2reg_direct_access_rdata_mreg_t [1:0] direct_access_rdata; // [447:384] + caliptra_otp_ctrl_hw2reg_vendor_test_digest_mreg_t [1:0] vendor_test_digest; // [383:320] caliptra_otp_ctrl_hw2reg_non_secret_fuses_digest_mreg_t [1:0] - non_secret_fuses_digest; // [255:192] - caliptra_otp_ctrl_hw2reg_secret0_digest_mreg_t [1:0] secret0_digest; // [191:128] - caliptra_otp_ctrl_hw2reg_secret1_digest_mreg_t [1:0] secret1_digest; // [127:64] - caliptra_otp_ctrl_hw2reg_secret2_digest_mreg_t [1:0] secret2_digest; // [63:0] + non_secret_fuses_digest; // [319:256] + caliptra_otp_ctrl_hw2reg_secret0_digest_mreg_t [1:0] secret0_digest; // [255:192] + caliptra_otp_ctrl_hw2reg_secret1_digest_mreg_t [1:0] secret1_digest; // [191:128] + caliptra_otp_ctrl_hw2reg_secret2_digest_mreg_t [1:0] secret2_digest; // [127:64] + caliptra_otp_ctrl_hw2reg_secret3_digest_mreg_t [1:0] secret3_digest; // [63:0] } caliptra_otp_ctrl_core_hw2reg_t; // Register offsets for core interface @@ -327,31 +345,34 @@ package caliptra_otp_ctrl_reg_pkg; parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ERR_CODE_5_OFFSET = 13'h 28; parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ERR_CODE_6_OFFSET = 13'h 2c; parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ERR_CODE_7_OFFSET = 13'h 30; - parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_REGWEN_OFFSET = 13'h 34; - parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_CMD_OFFSET = 13'h 38; - parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_ADDRESS_OFFSET = 13'h 3c; - parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_WDATA_0_OFFSET = 13'h 40; - parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_WDATA_1_OFFSET = 13'h 44; - parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_0_OFFSET = 13'h 48; - parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_1_OFFSET = 13'h 4c; - parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_CHECK_TRIGGER_REGWEN_OFFSET = 13'h 50; - parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_CHECK_TRIGGER_OFFSET = 13'h 54; - parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_CHECK_REGWEN_OFFSET = 13'h 58; - parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_CHECK_TIMEOUT_OFFSET = 13'h 5c; - parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_INTEGRITY_CHECK_PERIOD_OFFSET = 13'h 60; - parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_CONSISTENCY_CHECK_PERIOD_OFFSET = 13'h 64; - parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_VENDOR_TEST_READ_LOCK_OFFSET = 13'h 68; - parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_READ_LOCK_OFFSET = 13'h 6c; - parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_0_OFFSET = 13'h 70; - parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_1_OFFSET = 13'h 74; - parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_0_OFFSET = 13'h 78; - parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_1_OFFSET = 13'h 7c; - parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET0_DIGEST_0_OFFSET = 13'h 80; - parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET0_DIGEST_1_OFFSET = 13'h 84; - parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET1_DIGEST_0_OFFSET = 13'h 88; - parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET1_DIGEST_1_OFFSET = 13'h 8c; - parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET2_DIGEST_0_OFFSET = 13'h 90; - parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET2_DIGEST_1_OFFSET = 13'h 94; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ERR_CODE_8_OFFSET = 13'h 34; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_REGWEN_OFFSET = 13'h 38; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_CMD_OFFSET = 13'h 3c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_ADDRESS_OFFSET = 13'h 40; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_WDATA_0_OFFSET = 13'h 44; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_WDATA_1_OFFSET = 13'h 48; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_0_OFFSET = 13'h 4c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_1_OFFSET = 13'h 50; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_CHECK_TRIGGER_REGWEN_OFFSET = 13'h 54; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_CHECK_TRIGGER_OFFSET = 13'h 58; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_CHECK_REGWEN_OFFSET = 13'h 5c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_CHECK_TIMEOUT_OFFSET = 13'h 60; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_INTEGRITY_CHECK_PERIOD_OFFSET = 13'h 64; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_CONSISTENCY_CHECK_PERIOD_OFFSET = 13'h 68; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_VENDOR_TEST_READ_LOCK_OFFSET = 13'h 6c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_READ_LOCK_OFFSET = 13'h 70; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_0_OFFSET = 13'h 74; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_1_OFFSET = 13'h 78; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_0_OFFSET = 13'h 7c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_1_OFFSET = 13'h 80; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET0_DIGEST_0_OFFSET = 13'h 84; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET0_DIGEST_1_OFFSET = 13'h 88; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET1_DIGEST_0_OFFSET = 13'h 8c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET1_DIGEST_1_OFFSET = 13'h 90; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET2_DIGEST_0_OFFSET = 13'h 94; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET2_DIGEST_1_OFFSET = 13'h 98; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET3_DIGEST_0_OFFSET = 13'h 9c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET3_DIGEST_1_OFFSET = 13'h a0; // Reset values for hwext registers and their fields for core interface parameter logic [1:0] CALIPTRA_OTP_CTRL_INTR_TEST_RESVAL = 2'h 0; @@ -363,12 +384,13 @@ package caliptra_otp_ctrl_reg_pkg; parameter logic [0:0] CALIPTRA_OTP_CTRL_ALERT_TEST_FATAL_BUS_INTEG_ERROR_RESVAL = 1'h 0; parameter logic [0:0] CALIPTRA_OTP_CTRL_ALERT_TEST_FATAL_PRIM_OTP_ALERT_RESVAL = 1'h 0; parameter logic [0:0] CALIPTRA_OTP_CTRL_ALERT_TEST_RECOV_PRIM_OTP_ALERT_RESVAL = 1'h 0; - parameter logic [14:0] CALIPTRA_OTP_CTRL_STATUS_RESVAL = 15'h 0; + parameter logic [15:0] CALIPTRA_OTP_CTRL_STATUS_RESVAL = 16'h 0; parameter logic [0:0] CALIPTRA_OTP_CTRL_STATUS_VENDOR_TEST_ERROR_RESVAL = 1'h 0; parameter logic [0:0] CALIPTRA_OTP_CTRL_STATUS_NON_SECRET_FUSES_ERROR_RESVAL = 1'h 0; parameter logic [0:0] CALIPTRA_OTP_CTRL_STATUS_SECRET0_ERROR_RESVAL = 1'h 0; parameter logic [0:0] CALIPTRA_OTP_CTRL_STATUS_SECRET1_ERROR_RESVAL = 1'h 0; parameter logic [0:0] CALIPTRA_OTP_CTRL_STATUS_SECRET2_ERROR_RESVAL = 1'h 0; + parameter logic [0:0] CALIPTRA_OTP_CTRL_STATUS_SECRET3_ERROR_RESVAL = 1'h 0; parameter logic [0:0] CALIPTRA_OTP_CTRL_STATUS_LIFE_CYCLE_ERROR_RESVAL = 1'h 0; parameter logic [0:0] CALIPTRA_OTP_CTRL_STATUS_DAI_ERROR_RESVAL = 1'h 0; parameter logic [0:0] CALIPTRA_OTP_CTRL_STATUS_LCI_ERROR_RESVAL = 1'h 0; @@ -395,6 +417,8 @@ package caliptra_otp_ctrl_reg_pkg; parameter logic [2:0] CALIPTRA_OTP_CTRL_ERR_CODE_6_ERR_CODE_6_RESVAL = 3'h 0; parameter logic [2:0] CALIPTRA_OTP_CTRL_ERR_CODE_7_RESVAL = 3'h 0; parameter logic [2:0] CALIPTRA_OTP_CTRL_ERR_CODE_7_ERR_CODE_7_RESVAL = 3'h 0; + parameter logic [2:0] CALIPTRA_OTP_CTRL_ERR_CODE_8_RESVAL = 3'h 0; + parameter logic [2:0] CALIPTRA_OTP_CTRL_ERR_CODE_8_ERR_CODE_8_RESVAL = 3'h 0; parameter logic [0:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_REGWEN_RESVAL = 1'h 1; parameter logic [0:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_REGWEN_DIRECT_ACCESS_REGWEN_RESVAL = 1'h 1; parameter logic [2:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_CMD_RESVAL = 3'h 0; @@ -440,6 +464,10 @@ package caliptra_otp_ctrl_reg_pkg; parameter logic [31:0] CALIPTRA_OTP_CTRL_SECRET2_DIGEST_0_SECRET2_DIGEST_0_RESVAL = 32'h 0; parameter logic [31:0] CALIPTRA_OTP_CTRL_SECRET2_DIGEST_1_RESVAL = 32'h 0; parameter logic [31:0] CALIPTRA_OTP_CTRL_SECRET2_DIGEST_1_SECRET2_DIGEST_1_RESVAL = 32'h 0; + parameter logic [31:0] CALIPTRA_OTP_CTRL_SECRET3_DIGEST_0_RESVAL = 32'h 0; + parameter logic [31:0] CALIPTRA_OTP_CTRL_SECRET3_DIGEST_0_SECRET3_DIGEST_0_RESVAL = 32'h 0; + parameter logic [31:0] CALIPTRA_OTP_CTRL_SECRET3_DIGEST_1_RESVAL = 32'h 0; + parameter logic [31:0] CALIPTRA_OTP_CTRL_SECRET3_DIGEST_1_SECRET3_DIGEST_1_RESVAL = 32'h 0; // Window parameters for core interface parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SW_CFG_WINDOW_OFFSET = 13'h 1000; @@ -461,6 +489,7 @@ package caliptra_otp_ctrl_reg_pkg; CALIPTRA_OTP_CTRL_ERR_CODE_5, CALIPTRA_OTP_CTRL_ERR_CODE_6, CALIPTRA_OTP_CTRL_ERR_CODE_7, + CALIPTRA_OTP_CTRL_ERR_CODE_8, CALIPTRA_OTP_CTRL_DIRECT_ACCESS_REGWEN, CALIPTRA_OTP_CTRL_DIRECT_ACCESS_CMD, CALIPTRA_OTP_CTRL_DIRECT_ACCESS_ADDRESS, @@ -485,11 +514,13 @@ package caliptra_otp_ctrl_reg_pkg; CALIPTRA_OTP_CTRL_SECRET1_DIGEST_0, CALIPTRA_OTP_CTRL_SECRET1_DIGEST_1, CALIPTRA_OTP_CTRL_SECRET2_DIGEST_0, - CALIPTRA_OTP_CTRL_SECRET2_DIGEST_1 + CALIPTRA_OTP_CTRL_SECRET2_DIGEST_1, + CALIPTRA_OTP_CTRL_SECRET3_DIGEST_0, + CALIPTRA_OTP_CTRL_SECRET3_DIGEST_1 } caliptra_otp_ctrl_core_id_e; // Register width information to check illegal writes for core interface - parameter logic [3:0] CALIPTRA_OTP_CTRL_CORE_PERMIT [38] = '{ + parameter logic [3:0] CALIPTRA_OTP_CTRL_CORE_PERMIT [41] = '{ 4'b 0001, // index[ 0] CALIPTRA_OTP_CTRL_INTR_STATE 4'b 0001, // index[ 1] CALIPTRA_OTP_CTRL_INTR_ENABLE 4'b 0001, // index[ 2] CALIPTRA_OTP_CTRL_INTR_TEST @@ -503,31 +534,34 @@ package caliptra_otp_ctrl_reg_pkg; 4'b 0001, // index[10] CALIPTRA_OTP_CTRL_ERR_CODE_5 4'b 0001, // index[11] CALIPTRA_OTP_CTRL_ERR_CODE_6 4'b 0001, // index[12] CALIPTRA_OTP_CTRL_ERR_CODE_7 - 4'b 0001, // index[13] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_REGWEN - 4'b 0001, // index[14] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_CMD - 4'b 0011, // index[15] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_ADDRESS - 4'b 1111, // index[16] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_WDATA_0 - 4'b 1111, // index[17] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_WDATA_1 - 4'b 1111, // index[18] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_0 - 4'b 1111, // index[19] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_1 - 4'b 0001, // index[20] CALIPTRA_OTP_CTRL_CHECK_TRIGGER_REGWEN - 4'b 0001, // index[21] CALIPTRA_OTP_CTRL_CHECK_TRIGGER - 4'b 0001, // index[22] CALIPTRA_OTP_CTRL_CHECK_REGWEN - 4'b 1111, // index[23] CALIPTRA_OTP_CTRL_CHECK_TIMEOUT - 4'b 1111, // index[24] CALIPTRA_OTP_CTRL_INTEGRITY_CHECK_PERIOD - 4'b 1111, // index[25] CALIPTRA_OTP_CTRL_CONSISTENCY_CHECK_PERIOD - 4'b 0001, // index[26] CALIPTRA_OTP_CTRL_VENDOR_TEST_READ_LOCK - 4'b 0001, // index[27] CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_READ_LOCK - 4'b 1111, // index[28] CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_0 - 4'b 1111, // index[29] CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_1 - 4'b 1111, // index[30] CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_0 - 4'b 1111, // index[31] CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_1 - 4'b 1111, // index[32] CALIPTRA_OTP_CTRL_SECRET0_DIGEST_0 - 4'b 1111, // index[33] CALIPTRA_OTP_CTRL_SECRET0_DIGEST_1 - 4'b 1111, // index[34] CALIPTRA_OTP_CTRL_SECRET1_DIGEST_0 - 4'b 1111, // index[35] CALIPTRA_OTP_CTRL_SECRET1_DIGEST_1 - 4'b 1111, // index[36] CALIPTRA_OTP_CTRL_SECRET2_DIGEST_0 - 4'b 1111 // index[37] CALIPTRA_OTP_CTRL_SECRET2_DIGEST_1 + 4'b 0001, // index[13] CALIPTRA_OTP_CTRL_ERR_CODE_8 + 4'b 0001, // index[14] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_REGWEN + 4'b 0001, // index[15] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_CMD + 4'b 0011, // index[16] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_ADDRESS + 4'b 1111, // index[17] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_WDATA_0 + 4'b 1111, // index[18] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_WDATA_1 + 4'b 1111, // index[19] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_0 + 4'b 1111, // index[20] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_1 + 4'b 0001, // index[21] CALIPTRA_OTP_CTRL_CHECK_TRIGGER_REGWEN + 4'b 0001, // index[22] CALIPTRA_OTP_CTRL_CHECK_TRIGGER + 4'b 0001, // index[23] CALIPTRA_OTP_CTRL_CHECK_REGWEN + 4'b 1111, // index[24] CALIPTRA_OTP_CTRL_CHECK_TIMEOUT + 4'b 1111, // index[25] CALIPTRA_OTP_CTRL_INTEGRITY_CHECK_PERIOD + 4'b 1111, // index[26] CALIPTRA_OTP_CTRL_CONSISTENCY_CHECK_PERIOD + 4'b 0001, // index[27] CALIPTRA_OTP_CTRL_VENDOR_TEST_READ_LOCK + 4'b 0001, // index[28] CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_READ_LOCK + 4'b 1111, // index[29] CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_0 + 4'b 1111, // index[30] CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_1 + 4'b 1111, // index[31] CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_0 + 4'b 1111, // index[32] CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_1 + 4'b 1111, // index[33] CALIPTRA_OTP_CTRL_SECRET0_DIGEST_0 + 4'b 1111, // index[34] CALIPTRA_OTP_CTRL_SECRET0_DIGEST_1 + 4'b 1111, // index[35] CALIPTRA_OTP_CTRL_SECRET1_DIGEST_0 + 4'b 1111, // index[36] CALIPTRA_OTP_CTRL_SECRET1_DIGEST_1 + 4'b 1111, // index[37] CALIPTRA_OTP_CTRL_SECRET2_DIGEST_0 + 4'b 1111, // index[38] CALIPTRA_OTP_CTRL_SECRET2_DIGEST_1 + 4'b 1111, // index[39] CALIPTRA_OTP_CTRL_SECRET3_DIGEST_0 + 4'b 1111 // index[40] CALIPTRA_OTP_CTRL_SECRET3_DIGEST_1 }; /////////////////////////////////////////////// diff --git a/src/fuse_ctrl/rtl/otp_ctrl.sv b/src/fuse_ctrl/rtl/otp_ctrl.sv index 2b1e4fef6..db3db8f47 100644 --- a/src/fuse_ctrl/rtl/otp_ctrl.sv +++ b/src/fuse_ctrl/rtl/otp_ctrl.sv @@ -5,21 +5,19 @@ // OTP Controller top. // -`include "prim_assert.sv" +`include "caliptra_prim_assert.sv" module otp_ctrl - import otp_ctrl_pkg::*; - import otp_ctrl_reg_pkg::*; - import otp_ctrl_part_pkg::*; - import axi_pkg::*; - import otp_ctrl_axi_pkg::*; + import caliptra_otp_ctrl_pkg::*; + import caliptra_otp_ctrl_reg_pkg::*; + import caliptra_otp_ctrl_part_pkg::*; #( // Enable asynchronous transitions on alerts. parameter logic [NumAlerts-1:0] AlertAsyncOn = {NumAlerts{1'b1}}, // Compile time random constants, to be overriden by topgen. parameter lfsr_seed_t RndCnstLfsrSeed = RndCnstLfsrSeedDefault, parameter lfsr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, - parameter scrmbl_key_init_t RndCnstScrmblKeyInit = RndCnstScrmblKeyInitDefault, + //parameter scrmbl_key_init_t RndCnstScrmblKeyInit = RndCnstScrmblKeyInitDefault, // Hexfile file to initialize the OTP macro. // Note that the hexdump needs to account for ECC. parameter MemInitFile = "" @@ -33,47 +31,16 @@ module otp_ctrl output edn_pkg::edn_req_t edn_o, input edn_pkg::edn_rsp_t edn_i, // Bus Interface - - /* input tlul_pkg::tl_h2d_t core_tl_i, output tlul_pkg::tl_d2h_t core_tl_o, - */ - input logic core_dv, - input logic [AW-1:0] core_addr, - input logic core_write, - //input otp_ctrl_axi_pkg::axi_a_user_t core_a_user, - input logic [IW-1:0] core_id, - input logic [DW-1:0] core_wdata, - input logic [BC-1:0] core_wstrb, - output logic [DW-1:0] core_rdata, - input logic core_last, - output logic core_hld, - output logic core_err, - //output otp_ctrl_axi_pkg::axi_d_user_t ore_d_user, - - /* input tlul_pkg::tl_h2d_t prim_tl_i, output tlul_pkg::tl_d2h_t prim_tl_o, - */ - input logic prim_dv, - input logic [AW-1:0] prim_addr, - input logic prim_write, - //input otp_ctrl_axi_pkg::axi_a_user_t prim_a_user, - input logic [IW-1:0] prim_id, - input logic [DW-1:0] prim_wdata, - input logic [BC-1:0] prim_wstrb, - output logic [DW-1:0] prim_rdata, - input logic prim_last, - output logic prim_hld, - output logic prim_err, - //output otp_ctrl_axi_pkg::axi_d_user_t prim_d_user, - // Interrupt Requests output logic intr_otp_operation_done_o, output logic intr_otp_error_o, // Alerts - input prim_alert_pkg::alert_rx_t [NumAlerts-1:0] alert_rx_i, - output prim_alert_pkg::alert_tx_t [NumAlerts-1:0] alert_tx_o, + input caliptra_prim_alert_pkg::alert_rx_t [NumAlerts-1:0] alert_rx_i, + output caliptra_prim_alert_pkg::alert_tx_t [NumAlerts-1:0] alert_tx_o, // Observability to AST input ast_pkg::ast_obs_ctrl_t obs_ctrl_i, output logic [7:0] otp_obs_o, @@ -100,7 +67,8 @@ module otp_ctrl // OTP broadcast outputs // SEC_CM: TOKEN_VALID.CTRL.MUBI output otp_lc_data_t otp_lc_data_o, - output otp_keymgr_key_t otp_keymgr_key_o, + //output otp_keymgr_key_t otp_keymgr_key_o, + /* // Scrambling key requests input flash_otp_key_req_t flash_otp_key_i, output flash_otp_key_rsp_t flash_otp_key_o, @@ -108,6 +76,11 @@ module otp_ctrl output sram_otp_key_rsp_t [NumSramKeyReqSlots-1:0] sram_otp_key_o, input otbn_otp_key_req_t otbn_otp_key_i, output otbn_otp_key_rsp_t otbn_otp_key_o, + */ + // Secret wire outputs + output obfuscated_uds_seed_t obfuscated_uds_seed_o, + output field_entropy_t field_entropy_o, + output pk_hash_t pk_hash_o, // Hardware config bits output otp_broadcast_t otp_broadcast_o, // External voltage for OTP @@ -115,31 +88,31 @@ module otp_ctrl // Scan input scan_en_i, input scan_rst_ni, - input prim_mubi_pkg::mubi4_t scanmode_i, + input caliptra_prim_mubi_pkg::mubi4_t scanmode_i, // Test-related GPIO output output logic [OtpTestVectWidth-1:0] cio_test_o, output logic [OtpTestVectWidth-1:0] cio_test_en_o ); - import prim_mubi_pkg::*; - import prim_util_pkg::vbits; + import caliptra_prim_mubi_pkg::*; + import caliptra_prim_util_pkg::vbits; //////////////////////// // Integration Checks // //////////////////////// // This ensures that we can transfer scrambler data blocks in and out of OTP atomically. - `ASSERT_INIT(OtpIfWidth_A, OtpIfWidth == ScrmblBlockWidth) + `CALIPTRA_ASSERT_INIT(OtpIfWidth_A, OtpIfWidth == ScrmblBlockWidth) // These error codes need to be identical. - `ASSERT_INIT(ErrorCodeWidth_A, OtpErrWidth == prim_otp_pkg::ErrWidth) - `ASSERT_INIT(OtpErrorCode0_A, int'(NoError) == int'(prim_otp_pkg::NoError)) - `ASSERT_INIT(OtpErrorCode1_A, int'(MacroError) == int'(prim_otp_pkg::MacroError)) - `ASSERT_INIT(OtpErrorCode2_A, int'(MacroEccCorrError) == int'(prim_otp_pkg::MacroEccCorrError)) - `ASSERT_INIT(OtpErrorCode3_A, - int'(MacroEccUncorrError) == int'(prim_otp_pkg::MacroEccUncorrError)) - `ASSERT_INIT(OtpErrorCode4_A, - int'(MacroWriteBlankError) == int'(prim_otp_pkg::MacroWriteBlankError)) + `CALIPTRA_ASSERT_INIT(ErrorCodeWidth_A, OtpErrWidth == caliptra_prim_otp_pkg::ErrWidth) + `CALIPTRA_ASSERT_INIT(OtpErrorCode0_A, int'(NoError) == int'(caliptra_prim_otp_pkg::NoError)) + `CALIPTRA_ASSERT_INIT(OtpErrorCode1_A, int'(MacroError) == int'(caliptra_prim_otp_pkg::MacroError)) + `CALIPTRA_ASSERT_INIT(OtpErrorCode2_A, int'(MacroEccCorrError) == int'(caliptra_prim_otp_pkg::MacroEccCorrError)) + `CALIPTRA_ASSERT_INIT(OtpErrorCode3_A, + int'(MacroEccUncorrError) == int'(caliptra_prim_otp_pkg::MacroEccUncorrError)) + `CALIPTRA_ASSERT_INIT(OtpErrorCode4_A, + int'(MacroWriteBlankError) == int'(caliptra_prim_otp_pkg::MacroWriteBlankError)) ///////////// // Regfile // @@ -148,61 +121,20 @@ module otp_ctrl // We have one CSR node, one functional TL-UL window and a gate module for that window logic [2:0] intg_error; - /* tlul_pkg::tl_h2d_t tl_win_h2d; tlul_pkg::tl_d2h_t tl_win_d2h; - */ - - logic win_dv, - logic [AW-1:0] win_addr, - logic win_write, - //logic [UW-1:0] win_user, - logic [IW-1:0] win_id, - logic [DW-1:0] win_wdata, - logic [BC-1:0] win_wstrb, - logic [DW-1:0] win_rdata, - logic win_last, - logic win_hld, - logic win_err, - - - - otp_ctrl_reg_pkg::otp_ctrl_core_reg2hw_t reg2hw; - otp_ctrl_reg_pkg::otp_ctrl_core_hw2reg_t hw2reg; + caliptra_otp_ctrl_reg_pkg::caliptra_otp_ctrl_core_reg2hw_t reg2hw; + caliptra_otp_ctrl_reg_pkg::caliptra_otp_ctrl_core_hw2reg_t hw2reg; // SEC_CM: DIRECT_ACCESS.CONFIG.REGWEN, CHECK_TRIGGER.CONFIG.REGWEN, CHECK.CONFIG.REGWEN - otp_ctrl_core_reg_top u_reg_core ( + caliptra_otp_ctrl_core_reg_top u_reg_core ( .clk_i, .rst_ni, - /* .tl_i ( core_tl_i ), .tl_o ( core_tl_o ), .tl_win_o ( tl_win_h2d ), .tl_win_i ( tl_win_d2h ), - */ - .core_dv ( core_dv ), - .core_addr ( core_addr ), - .core_write( core_write ), - //.core_user ( core_user ), - .core_id ( core_id ), - .core_wdata( core_wdata ), - .core_wstrb( core_wstrb ), - .core_rdata( core_rdata ), - .core_last ( core_last ), - .core_hld ( core_hld ), - .core_err ( core_err ), - .win_dv ( win_dv ), - .win_addr ( win_addr ), - .win_write ( win_write ), - //.win_user ( win_user ), - .win_id ( win_id ), - .win_wdata ( win_wdata ), - .win_wstrb ( win_wstrb ), - .win_rdata ( win_rdata ), - .win_last ( win_last ), - .win_hld ( win_hld ), - .win_err ( win_err ), .reg2hw ( reg2hw ), .hw2reg ( hw2reg ), // SEC_CM: BUS.INTEGRITY @@ -221,7 +153,7 @@ module otp_ctrl // Single wire for gating assertions in arbitration and CDC primitives. logic lc_escalate_en_any; - prim_lc_sync #( + caliptra_prim_lc_sync #( .NumCopies(NumAgentsIdx+2) ) u_prim_lc_sync_escalate_en ( .clk_i, @@ -230,7 +162,7 @@ module otp_ctrl .lc_en_o(lc_escalate_en_synced) ); - prim_lc_sync #( + caliptra_prim_lc_sync #( .NumCopies(1) ) u_prim_lc_sync_creator_seed_sw_rw_en ( .clk_i, @@ -239,7 +171,7 @@ module otp_ctrl .lc_en_o({lc_creator_seed_sw_rw_en}) ); - prim_lc_sync #( + caliptra_prim_lc_sync #( .NumCopies(1) ) u_prim_lc_sync_owner_seed_sw_rw_en ( .clk_i, @@ -248,7 +180,7 @@ module otp_ctrl .lc_en_o({lc_owner_seed_sw_rw_en}) ); - prim_lc_sync #( + caliptra_prim_lc_sync #( .NumCopies(1) ) u_prim_lc_sync_seed_hw_rd_en ( .clk_i, @@ -257,7 +189,7 @@ module otp_ctrl .lc_en_o({lc_seed_hw_rd_en}) ); - prim_lc_sync #( + caliptra_prim_lc_sync #( .NumCopies(3) ) u_prim_lc_sync_dft_en ( .clk_i, @@ -266,7 +198,7 @@ module otp_ctrl .lc_en_o(lc_dft_en) ); - prim_lc_sync #( + caliptra_prim_lc_sync #( .NumCopies(1) ) u_prim_lc_sync_check_byp_en ( .clk_i, @@ -285,8 +217,8 @@ module otp_ctrl logic [1:0] tlul_rerror; logic [31:0] tlul_rdata; - import prim_mubi_pkg::MuBi4False; - axi_adapter_sram #( + import caliptra_prim_mubi_pkg::MuBi4False; + tlul_adapter_sram #( .SramAw ( SwWindowAddrWidth ), .SramDw ( 32 ), .Outstanding ( 1 ), @@ -296,16 +228,8 @@ module otp_ctrl .clk_i, .rst_ni, .en_ifetch_i ( MuBi4False ), - .axi_dv ( tl_win_h2d ), - .axi_addr ( tl_win_d2h ), - .axi_write (), - .axi_id (), - .axi_wdata (), - .axi_wstrb (), - .axi_rdata (), - .axi_last (), - .axi_hld (), - .axi_err (), + .tl_i ( tl_win_h2d ), + .tl_o ( tl_win_d2h ), .req_o ( tlul_req ), .gnt_i ( tlul_gnt ), .we_o ( ), // unused @@ -321,50 +245,50 @@ module otp_ctrl .rmw_in_progress_o( ) ); - logic [NumPart-1:0] axi_part_sel_oh; + logic [NumPart-1:0] tlul_part_sel_oh; for (genvar k = 0; k < NumPart; k++) begin : gen_part_sel localparam logic [OtpByteAddrWidth:0] PartEnd = (OtpByteAddrWidth+1)'(PartInfo[k].offset) + (OtpByteAddrWidth+1)'(PartInfo[k].size); if (PartInfo[k].offset == 0) begin : gen_zero_offset - assign axi_part_sel_oh[k] = ({1'b0, {tlul_addr, 2'b00}} < PartEnd); + assign tlul_part_sel_oh[k] = ({1'b0, {tlul_addr, 2'b00}} < PartEnd); end else begin : gen_nonzero_offset - assign axi_part_sel_oh[k] = ({tlul_addr, 2'b00} >= PartInfo[k].offset) & + assign tlul_part_sel_oh[k] = ({tlul_addr, 2'b00} >= PartInfo[k].offset) & ({1'b0, {tlul_addr, 2'b00}} < PartEnd); end end - `ASSERT(PartSelMustBeOnehot_A, $onehot0(axi_part_sel_oh)) + `CALIPTRA_ASSERT(PartSelMustBeOnehot_A, $onehot0(tlul_part_sel_oh)) - logic [NumPartWidth-1:0] axi_part_idx; + logic [NumPartWidth-1:0] tlul_part_idx; caliptra_prim_arbiter_fixed #( .N(NumPart), .EnDataPort(0) ) u_part_sel_idx ( .clk_i, .rst_ni, - .req_i ( axi_part_sel_oh ), + .req_i ( tlul_part_sel_oh ), .data_i ( '{default: '0} ), .gnt_o ( ), // unused - .idx_o ( axi_part_idx ), + .idx_o ( tlul_part_idx ), .valid_o ( ), // unused .data_o ( ), // unused .ready_i ( 1'b0 ) ); logic tlul_oob_err_d, tlul_oob_err_q; - logic [NumPart-1:0] part_axi_req, part_axi_gnt, part_axi_rvalid; - logic [SwWindowAddrWidth-1:0] part_axi_addr; - logic [NumPart-1:0][1:0] part_axi_rerror; - logic [NumPart-1:0][31:0] part_axi_rdata; + logic [NumPart-1:0] part_tlul_req, part_tlul_gnt, part_tlul_rvalid; + logic [SwWindowAddrWidth-1:0] part_tlul_addr; + logic [NumPart-1:0][1:0] part_tlul_rerror; + logic [NumPart-1:0][31:0] part_tlul_rdata; always_comb begin : p_tlul_assign // Send request to the correct partition. - part_axi_addr = tlul_addr; - part_axi_req = '0; + part_tlul_addr = tlul_addr; + part_tlul_req = '0; tlul_oob_err_d = 1'b0; if (tlul_req) begin - if (axi_part_sel_oh != '0) begin - part_axi_req[axi_part_idx] = 1'b1; + if (tlul_part_sel_oh != '0) begin + part_tlul_req[tlul_part_idx] = 1'b1; end else begin // Error out in the next cycle if address was out of bounds. tlul_oob_err_d = 1'b1; @@ -372,13 +296,13 @@ module otp_ctrl end // aggregate TL-UL responses - tlul_gnt = |part_axi_gnt | tlul_oob_err_q; - tlul_rvalid = |part_axi_rvalid | tlul_oob_err_q; + tlul_gnt = |part_tlul_gnt | tlul_oob_err_q; + tlul_rvalid = |part_tlul_rvalid | tlul_oob_err_q; tlul_rerror = '0; tlul_rdata = '0; for (int k = 0; k < NumPart; k++) begin - tlul_rerror |= part_axi_rerror[k]; - tlul_rdata |= part_axi_rdata[k]; + tlul_rerror |= part_tlul_rerror[k]; + tlul_rdata |= part_tlul_rdata[k]; end end @@ -412,14 +336,14 @@ module otp_ctrl if (lc_ctrl_pkg::lc_tx_test_false_loose(lc_creator_seed_sw_rw_en)) begin for (int k = 0; k < NumPart; k++) begin if (PartInfo[k].iskeymgr_creator) begin - part_access_pre[k] = {2{prim_mubi_pkg::MuBi8True}}; + part_access_pre[k] = {2{caliptra_prim_mubi_pkg::MuBi8True}}; end end end if (lc_ctrl_pkg::lc_tx_test_false_loose(lc_owner_seed_sw_rw_en)) begin for (int k = 0; k < NumPart; k++) begin if (PartInfo[k].iskeymgr_owner) begin - part_access_pre[k] = {2{prim_mubi_pkg::MuBi8True}}; + part_access_pre[k] = {2{caliptra_prim_mubi_pkg::MuBi8True}}; end end end @@ -608,7 +532,7 @@ module otp_ctrl chk_timeout, lfsr_fsm_err, scrmbl_fsm_err, - part_fsm_err[KdiIdx], + //part_fsm_err[KdiIdx], fatal_bus_integ_error_q, dai_idle, chk_pending}; @@ -641,7 +565,7 @@ end .intr_o ( intr_otp_operation_done_o ) ); - caliptra_a_prim_intr_hw #( + caliptra_prim_intr_hw #( .Width(1) ) u_intr_error ( .clk_i, @@ -766,17 +690,17 @@ end // Both the key derivation and LFSR reseeding are low bandwidth, // hence they can share the same EDN interface. logic edn_req, edn_ack; - logic key_edn_req, key_edn_ack; + //logic key_edn_req, key_edn_ack; caliptra_prim_arbiter_tree #( - .N(2), + .N(1), .EnDataPort(0) ) u_edn_arb ( .clk_i, .rst_ni, .req_chk_i ( ~lc_escalate_en_any ), - .req_i ( {lfsr_edn_req, key_edn_req} ), + .req_i ( lfsr_edn_req ), // {lfsr_edn_req, key_edn_req} .data_i ( '{default: '0} ), - .gnt_o ( {lfsr_edn_ack, key_edn_ack} ), + .gnt_o ( lfsr_edn_ack ), // {lfsr_edn_ack, key_edn_ack} .idx_o ( ), // unused .valid_o ( edn_req ), .data_o ( ), // unused @@ -807,7 +731,7 @@ end /////////////////////////////// typedef struct packed { - prim_otp_pkg::cmd_e cmd; + caliptra_prim_otp_pkg::cmd_e cmd; logic [OtpSizeWidth-1:0] size; // Number of native words to write. logic [OtpIfWidth-1:0] wdata; logic [OtpAddrWidth-1:0] addr; // Halfword address. @@ -844,51 +768,24 @@ end assign otp_prim_valid = otp_arb_valid & otp_rsp_fifo_ready; assign otp_rsp_fifo_valid = otp_prim_ready & otp_prim_valid; - prim_otp_pkg::err_e part_otp_err; + caliptra_prim_otp_pkg::err_e part_otp_err; logic [OtpIfWidth-1:0] part_otp_rdata; logic otp_rvalid; - //tlul_pkg::tl_h2d_t prim_tl_h2d_gated; - //tlul_pkg::tl_d2h_t prim_tl_d2h_gated; - logic prim_dv_gated; - logic [AW-1:0] prim_addr_gated; - logic prim_write_gate;d - logic [IW-1:0] prim_id_gated; - logic [DW-1:0] prim_wdata_gated; - logic [BC-1:0] prim_wstrb_gated; - logic [DW-1:0] prim_rdata_gated; - logic prim_last_gated; - logic prim_hld_gated; - logic prim_err_gated; - + tlul_pkg::tl_h2d_t prim_tl_h2d_gated; + tlul_pkg::tl_d2h_t prim_tl_d2h_gated; // Life cycle qualification of TL-UL test interface. // SEC_CM: TEST.BUS.LC_GATED // SEC_CM: TEST_TL_LC_GATE.FSM.SPARSE - axi_lc_gate #( + tlul_lc_gate #( .NumGatesPerDirection(2) ) u_tlul_lc_gate ( .clk_i, .rst_ni, - .prim_dv, - .prim_addr, - .prim_write, - .prim_id, - .prim_wdata, - .prim_wstrb, - .prim_rdata, - .prim_last, - .prim_hld, - .prim_err, - .prim_dv_gated, - .prim_addr_gated, - .prim_write_gated, - .prim_id_gated, - .prim_wdata_gated, - .prim_wstrb_gated, - .prim_rdata_gated, - .prim_last_gated, - .prim_hld_gated, - .prim_err_gated, + .tl_h2d_i(prim_tl_i), + .tl_d2h_o(prim_tl_o), + .tl_h2d_o(prim_tl_h2d_gated), + .tl_d2h_i(prim_tl_d2h_gated), .lc_en_i (lc_dft_en[0]), .flush_req_i('0), .flush_ack_o(), @@ -905,7 +802,7 @@ end {OtpTestVectWidth{1'b1}} : '0; // SEC_CM: MACRO.MEM.CM, MACRO.MEM.INTEGRITY - caliptra_prim_otp #( + caliptra_prim_generic_otp #( .Width ( OtpWidth ), .Depth ( OtpDepth ), .SizeWidth ( OtpSizeWidth ), @@ -983,7 +880,7 @@ end end // Note that this must be true by construction. - `ASSERT(OtpRespFifoUnderflow_A, otp_rvalid |-> otp_fifo_valid) + `CALIPTRA_ASSERT(OtpRespFifoUnderflow_A, otp_rvalid |-> otp_fifo_valid) ///////////////////////////////////////// // Scrambling Datapath and Arbitration // @@ -1079,7 +976,7 @@ end // The init request comes from the power manager, which lives in the AON clock domain. logic pwr_otp_req_synced; - calipra_prim_flop_2sync #( + caliptra_prim_flop_2sync #( .Width(1) ) u_otp_init_sync ( .clk_i, @@ -1185,6 +1082,9 @@ end part_scrmbl_req_ready[LciIdx], part_scrmbl_rsp_valid[LciIdx]}; + + /* NOT USED BY CALIPTRA + * //////////////////////////////////// // Key Derivation Interface (KDI) // //////////////////////////////////// @@ -1235,6 +1135,9 @@ end assign unused_kdi_otp_sigs = ^{part_otp_arb_gnt[KdiIdx], part_otp_rvalid[KdiIdx]}; + + */ + ///////////////////////// // Partition Instances // ///////////////////////// @@ -1257,12 +1160,12 @@ end .access_i ( part_access[k] ), .access_o ( part_access_dai[k] ), .digest_o ( part_digest[k] ), - .tlul_req_i ( part_axi_req[k] ), - .tlul_gnt_o ( part_axi_gnt[k] ), - .tlul_addr_i ( part_axi_addr ), - .tlul_rerror_o ( part_axi_rerror[k] ), - .tlul_rvalid_o ( part_axi_rvalid[k] ), - .tlul_rdata_o ( part_axi_rdata[k] ), + .tlul_req_i ( part_tlul_req[k] ), + .tlul_gnt_o ( part_tlul_gnt[k] ), + .tlul_addr_i ( part_tlul_addr ), + .tlul_rerror_o ( part_tlul_rerror[k] ), + .tlul_rvalid_o ( part_tlul_rvalid[k] ), + .tlul_rdata_o ( part_tlul_rdata[k] ), .otp_req_o ( part_otp_arb_req[k] ), .otp_cmd_o ( part_otp_arb_bundle[k].cmd ), .otp_size_o ( part_otp_arb_bundle[k].size ), @@ -1294,7 +1197,7 @@ end cnsty_chk_req[k]}; // Alert assertion for sparse FSM. - `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlPartUnbufFsmCheck_A, + `CALIPTRA_ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlPartUnbufFsmCheck_A, u_part_unbuf.u_state_regs, alert_tx_o[1]) //////////////////////////////////////////////////////////////////////////////////////////////// end else if (PartInfo[k].variant == Buffered) begin : gen_buffered @@ -1341,17 +1244,17 @@ end ); // Buffered partitions are not accessible via the TL-UL window. - logic unused_part_axi_sigs; - assign unused_part_axi_sigs = ^part_axi_req[k]; - assign part_axi_gnt[k] = 1'b0; - assign part_axi_rerror[k] = '0; - assign part_axi_rvalid[k] = 1'b0; - assign part_axi_rdata[k] = '0; + logic unused_part_tlul_sigs; + assign unused_part_tlul_sigs = ^part_tlul_req[k]; + assign part_tlul_gnt[k] = 1'b0; + assign part_tlul_rerror[k] = '0; + assign part_tlul_rvalid[k] = 1'b0; + assign part_tlul_rdata[k] = '0; // Alert assertion for sparse FSM. - `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlPartBufFsmCheck_A, + `CALIPTRA_ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlPartBufFsmCheck_A, u_part_buf.u_state_regs, alert_tx_o[1]) - `ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntPartBufCheck_A, + `CALIPTRA_ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntPartBufCheck_A, u_part_buf.u_prim_count, alert_tx_o[1]) //////////////////////////////////////////////////////////////////////////////////////////////// end else if (PartInfo[k].variant == LifeCycle) begin : gen_lifecycle @@ -1401,12 +1304,12 @@ end ); // Buffered partitions are not accessible via the TL-UL window. - logic unused_part_axi_sigs; - assign unused_part_axi_sigs = ^part_axi_req[k]; - assign part_axi_gnt[k] = 1'b0; - assign part_axi_rerror[k] = '0; - assign part_axi_rvalid[k] = 1'b0; - assign part_axi_rdata[k] = '0; + logic unused_part_tlul_sigs; + assign unused_part_tlul_sigs = ^part_tlul_req[k]; + assign part_tlul_gnt[k] = 1'b0; + assign part_tlul_rerror[k] = '0; + assign part_tlul_rvalid[k] = 1'b0; + assign part_tlul_rdata[k] = '0; // Tie off unused connections. assign part_scrmbl_mtx_req[k] = '0; @@ -1418,9 +1321,9 @@ end part_scrmbl_req_ready[k], part_scrmbl_rsp_valid[k]}; // Alert assertion for sparse FSM. - `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlPartLcFsmCheck_A, + `CALIPTRA_ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlPartLcFsmCheck_A, u_part_buf.u_state_regs, alert_tx_o[1]) - `ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntPartLcCheck_A, + `CALIPTRA_ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntPartLcCheck_A, u_part_buf.u_prim_count, alert_tx_o[1]) //////////////////////////////////////////////////////////////////////////////////////////////// end else begin : gen_invalid @@ -1442,7 +1345,7 @@ end // Make sure the broadcast valid is flopped before sending it out. lc_ctrl_pkg::lc_tx_t otp_broadcast_valid_q; - prim_lc_sender u_prim_lc_sender_otp_broadcast_valid ( + caliptra_prim_lc_sender u_prim_lc_sender_otp_broadcast_valid ( .clk_i, .rst_ni, .lc_en_i(otp_broadcast.valid), @@ -1453,8 +1356,8 @@ end otp_broadcast_o = otp_broadcast; otp_broadcast_o.valid = otp_broadcast_valid_q; end - - // Root keys and seeds. + /* + * // Root keys and seeds. // This uses a generated function to assign all collateral that is marked with "iskeymgr" in // the memory map. Note that in this case the type is static and represents a superset of all // options so that we can maintain a stable interface with keymgr (otherwise keymgr will have @@ -1489,7 +1392,6 @@ end creator_seed_valid_q, owner_seed_valid_q}) ); - always_comb begin : p_otp_keymgr_key_valid // Valid reg inputs creator_root_key_share0_valid_d = otp_keymgr_key.creator_root_key_share0_valid; @@ -1503,25 +1405,33 @@ end otp_keymgr_key_o.creator_seed_valid = creator_seed_valid_q; otp_keymgr_key_o.owner_seed_valid = owner_seed_valid_q; end + // Check that the lc_seed_hw_rd_en remains stable, once the key material is valid. - `ASSERT(LcSeedHwRdEnStable0_A, + `CALIPTRA_ASSERT(LcSeedHwRdEnStable0_A, $rose(creator_root_key_share0_valid_q) |=> $stable(lc_seed_hw_rd_en) [*1:$], clk_i, !rst_ni || lc_ctrl_pkg::lc_tx_test_true_loose(lc_escalate_en_i) // Disable if escalating ) - `ASSERT(LcSeedHwRdEnStable1_A, + `CALIPTRA_ASSERT(LcSeedHwRdEnStable1_A, $rose(creator_root_key_share1_valid_q) |=> $stable(lc_seed_hw_rd_en) [*1:$], clk_i, !rst_ni || lc_ctrl_pkg::lc_tx_test_true_loose(lc_escalate_en_i) // Disable if escalating ) - `ASSERT(LcSeedHwRdEnStable2_A, + `CALIPTRA_ASSERT(LcSeedHwRdEnStable2_A, $rose(creator_seed_valid_q) |=> $stable(lc_seed_hw_rd_en) [*1:$], clk_i, !rst_ni || lc_ctrl_pkg::lc_tx_test_true_loose(lc_escalate_en_i) // Disable if escalating ) - `ASSERT(LcSeedHwRdEnStable3_A, + `CALIPTRA_ASSERT(LcSeedHwRdEnStable3_A, $rose(owner_seed_valid_q) |=> $stable(lc_seed_hw_rd_en) [*1:$], clk_i, !rst_ni || lc_ctrl_pkg::lc_tx_test_true_loose(lc_escalate_en_i) // Disable if escalating ) + */ + // Secrets + assign obfuscated_uds_seed_o = part_buf_data[UdsSeedOffset +: UdsSeedSize]; + assign field_entropy_o = part_buf_data[FieldEntropyOffset +: FieldEntropySize]; + assign pk_hash_o = part_buf_data[KeyManifestPkHashOffset +: KeyManifestPkHashSize]; + + /* // Scrambling Keys assign scrmbl_key_seed_valid = part_digest[Secret1Idx] != '0; assign sram_data_key_seed = part_buf_data[SramDataKeySeedOffset +: @@ -1530,6 +1440,7 @@ end FlashDataKeySeedSize]; assign flash_addr_key_seed = part_buf_data[FlashAddrKeySeedOffset +: FlashAddrKeySeedSize]; + */ // Test unlock and exit tokens and RMA token assign otp_lc_data_o.test_exit_token = part_buf_data[TestExitTokenOffset +: @@ -1539,13 +1450,15 @@ end assign otp_lc_data_o.rma_token = part_buf_data[RmaTokenOffset +: RmaTokenSize]; - lc_ctrl_pkg::lc_tx_t test_tokens_valid, rma_token_valid, secrets_valid; + lc_ctrl_pkg::lc_tx_t test_tokens_valid, rma_token_valid, obfs_uds_seed_valid, field_entropy_valid; // The test tokens have been provisioned. assign test_tokens_valid = (part_digest[Secret0Idx] != '0) ? lc_ctrl_pkg::On : lc_ctrl_pkg::Off; // The rma token has been provisioned. - assign rma_token_valid = (part_digest[Secret2Idx] != '0) ? lc_ctrl_pkg::On : lc_ctrl_pkg::Off; - // The device is personalized if the root key has been provisioned and locked. - assign secrets_valid = (part_digest[Secret2Idx] != '0) ? lc_ctrl_pkg::On : lc_ctrl_pkg::Off; + assign rma_token_valid = (part_digest[Secret3Idx] != '0) ? lc_ctrl_pkg::On : lc_ctrl_pkg::Off; + // The obfuscated UDS seed has been provisioned and locked. + assign obfs_uds_seed_valid = (part_digest[Secret1Idx] != '0) ? lc_ctrl_pkg::On : lc_ctrl_pkg::Off; + // The field entropy has been provisioned and locked. + assign field_entropy_valid = (part_digest[Secret2Idx] != '0) ? lc_ctrl_pkg::On : lc_ctrl_pkg::Off; // Buffer these constants in order to ensure that synthesis does not try to optimize the encoding. // SEC_CM: TOKEN_VALID.CTRL.MUBI @@ -1569,13 +1482,23 @@ end caliptra_prim_lc_sender #( .AsyncOn(0) - ) u_prim_lc_sender_secrets_valid ( + ) _prim_lc_sender_uds_seed_valid ( + .clk_i, + .rst_ni, + .lc_en_i(obfs_uds_seed_valid), + .lc_en_o(otp_lc_data_o.obfs_uds_seed_valid) + ); + + caliptra_prim_lc_sender #( + .AsyncOn(0) + ) _prim_lc_sender_field_entropy_valid ( .clk_i, .rst_ni, - .lc_en_i(secrets_valid), - .lc_en_o(otp_lc_data_o.secrets_valid) + .lc_en_i(field_entropy_valid), + .lc_en_o(otp_lc_data_o.field_entropy_valid) ); + // Lifecycle state assign otp_lc_data_o.state = lc_ctrl_state_pkg::lc_state_e'(part_buf_data[LcStateOffset +: LcStateSize]); @@ -1597,78 +1520,89 @@ end // Assertions // //////////////// - `ASSERT_INIT(CreatorRootKeyShare0Size_A, KeyMgrKeyWidth == CreatorRootKeyShare0Size * 8) - `ASSERT_INIT(CreatorRootKeyShare1Size_A, KeyMgrKeyWidth == CreatorRootKeyShare1Size * 8) - `ASSERT_INIT(FlashDataKeySeedSize_A, FlashKeySeedWidth == FlashDataKeySeedSize * 8) - `ASSERT_INIT(FlashAddrKeySeedSize_A, FlashKeySeedWidth == FlashAddrKeySeedSize * 8) - `ASSERT_INIT(SramDataKeySeedSize_A, SramKeySeedWidth == SramDataKeySeedSize * 8) - - `ASSERT_INIT(RmaTokenSize_A, lc_ctrl_state_pkg::LcTokenWidth == RmaTokenSize * 8) - `ASSERT_INIT(TestUnlockTokenSize_A, lc_ctrl_state_pkg::LcTokenWidth == TestUnlockTokenSize * 8) - `ASSERT_INIT(TestExitTokenSize_A, lc_ctrl_state_pkg::LcTokenWidth == TestExitTokenSize * 8) - `ASSERT_INIT(LcStateSize_A, lc_ctrl_state_pkg::LcStateWidth == LcStateSize * 8) - `ASSERT_INIT(LcTransitionCntSize_A, lc_ctrl_state_pkg::LcCountWidth == LcTransitionCntSize * 8) - - `ASSERT_KNOWN(OtpAstPwrSeqKnown_A, otp_ast_pwr_seq_o) - `ASSERT_KNOWN(CoreTlOutKnown_A, core_tl_o) - `ASSERT_KNOWN(PrimTlOutKnown_A, prim_tl_o) - `ASSERT_KNOWN(IntrOtpOperationDoneKnown_A, intr_otp_operation_done_o) - `ASSERT_KNOWN(IntrOtpErrorKnown_A, intr_otp_error_o) - `ASSERT_KNOWN(AlertTxKnown_A, alert_tx_o) - `ASSERT_KNOWN(PwrOtpInitRspKnown_A, pwr_otp_o) - `ASSERT_KNOWN(LcOtpProgramRspKnown_A, lc_otp_program_o) - `ASSERT_KNOWN(OtpLcDataKnown_A, otp_lc_data_o) - `ASSERT_KNOWN(OtpKeymgrKeyKnown_A, otp_keymgr_key_o) - `ASSERT_KNOWN(FlashOtpKeyRspKnown_A, flash_otp_key_o) - `ASSERT_KNOWN(OtpSramKeyKnown_A, sram_otp_key_o) - `ASSERT_KNOWN(OtpOtgnKeyKnown_A, otbn_otp_key_o) - `ASSERT_KNOWN(OtpBroadcastKnown_A, otp_broadcast_o) + /* + `CALIPTRA_ASSERT_INIT(CreatorRootKeyShare0Size_A, KeyMgrKeyWidth == CreatorRootKeyShare0Size * 8) + `CALIPTRA_ASSERT_INIT(CreatorRootKeyShare1Size_A, KeyMgrKeyWidth == CreatorRootKeyShare1Size * 8) + `CALIPTRA_ASSERT_INIT(FlashDataKeySeedSize_A, FlashKeySeedWidth == FlashDataKeySeedSize * 8) + `CALIPTRA_ASSERT_INIT(FlashAddrKeySeedSize_A, FlashKeySeedWidth == FlashAddrKeySeedSize * 8) + `CALIPTRA_ASSERT_INIT(SramDataKeySeedSize_A, SramKeySeedWidth == SramDataKeySeedSize * 8) + */ + `CALIPTRA_ASSERT_INIT(RmaTokenSize_A, lc_ctrl_state_pkg::LcTokenWidth == RmaTokenSize * 8) + `CALIPTRA_ASSERT_INIT(TestUnlockTokenSize_A, lc_ctrl_state_pkg::LcTokenWidth == TestUnlockTokenSize * 8) + `CALIPTRA_ASSERT_INIT(TestExitTokenSize_A, lc_ctrl_state_pkg::LcTokenWidth == TestExitTokenSize * 8) + `CALIPTRA_ASSERT_INIT(LcStateSize_A, lc_ctrl_state_pkg::LcStateWidth == LcStateSize * 8) + `CALIPTRA_ASSERT_INIT(LcTransitionCntSize_A, lc_ctrl_state_pkg::LcCountWidth == LcTransitionCntSize * 8) + + `CALIPTRA_ASSERT_KNOWN(OtpAstPwrSeqKnown_A, otp_ast_pwr_seq_o) + `CALIPTRA_ASSERT_KNOWN(CoreTlOutKnown_A, core_tl_o) + `CALIPTRA_ASSERT_KNOWN(PrimTlOutKnown_A, prim_tl_o) + `CALIPTRA_ASSERT_KNOWN(IntrOtpOperationDoneKnown_A, intr_otp_operation_done_o) + `CALIPTRA_ASSERT_KNOWN(IntrOtpErrorKnown_A, intr_otp_error_o) + `CALIPTRA_ASSERT_KNOWN(AlertTxKnown_A, alert_tx_o) + `CALIPTRA_ASSERT_KNOWN(PwrOtpInitRspKnown_A, pwr_otp_o) + `CALIPTRA_ASSERT_KNOWN(LcOtpProgramRspKnown_A, lc_otp_program_o) + `CALIPTRA_ASSERT_KNOWN(OtpLcDataKnown_A, otp_lc_data_o) + `CALIPTRA_ASSERT_KNOWN(ObfuscatedUdsSeed_A, obfuscated_uds_seed_o) + `CALIPTRA_ASSERT_KNOWN(FieldEntropy_A, field_entropy_o) + `CALIPTRA_ASSERT_KNOWN(PK_Hash_A, pk_hash_o) + //`CALIPTRA_ASSERT_KNOWN(OtpKeymgrKeyKnown_A, otp_keymgr_key_o) + //`CALIPTRA_ASSERT_KNOWN(FlashOtpKeyRspKnown_A, flash_otp_key_o) + //`CALIPTRA_ASSERT_KNOWN(OtpSramKeyKnown_A, sram_otp_key_o) + //`CALIPTRA_ASSERT_KNOWN(OtpOtgnKeyKnown_A, otbn_otp_key_o) + `CALIPTRA_ASSERT_KNOWN(OtpBroadcastKnown_A, otp_broadcast_o) // Alert assertions for sparse FSMs. - `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlDaiFsmCheck_A, + `CALIPTRA_ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlDaiFsmCheck_A, u_otp_ctrl_dai.u_state_regs, alert_tx_o[1]) - `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlKdiFsmCheck_A, - u_otp_ctrl_kdi.u_state_regs, alert_tx_o[1]) - `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlLciFsmCheck_A, + //`CALIPTRA_ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlKdiFsmCheck_A, + // u_otp_ctrl_kdi.u_state_regs, alert_tx_o[1]) + `CALIPTRA_ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlLciFsmCheck_A, u_otp_ctrl_lci.u_state_regs, alert_tx_o[1]) - `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlLfsrTimerFsmCheck_A, + `CALIPTRA_ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlLfsrTimerFsmCheck_A, u_otp_ctrl_lfsr_timer.u_state_regs, alert_tx_o[1]) - `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlScrambleFsmCheck_A, + `CALIPTRA_ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlScrambleFsmCheck_A, u_otp_ctrl_scrmbl.u_state_regs, alert_tx_o[1]) + // Alert assertions for redundant counters. - `ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntIntegCheck_A, + `CALIPTRA_ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntIntegCheck_A, u_otp_ctrl_lfsr_timer.u_prim_count_integ, alert_tx_o[1]) - `ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntCnstyCheck_A, + `CALIPTRA_ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntCnstyCheck_A, u_otp_ctrl_lfsr_timer.u_prim_count_cnsty, alert_tx_o[1]) - `ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntDaiCheck_A, + `CALIPTRA_ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntDaiCheck_A, u_otp_ctrl_dai.u_prim_count, alert_tx_o[1]) - `ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntKdiSeedCheck_A, - u_otp_ctrl_kdi.u_prim_count_seed, alert_tx_o[1]) - `ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntKdiEntropyCheck_A, - u_otp_ctrl_kdi.u_prim_count_entropy, alert_tx_o[1]) - `ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntLciCheck_A, + //`CALIPTRA_ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntKdiSeedCheck_A, + // u_otp_ctrl_kdi.u_prim_count_seed, alert_tx_o[1]) + //`CALIPTRA_ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntKdiEntropyCheck_A, + // u_otp_ctrl_kdi.u_prim_count_entropy, alert_tx_o[1]) + `CALIPTRA_ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntLciCheck_A, u_otp_ctrl_lci.u_prim_count, alert_tx_o[1]) - `ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntScrmblCheck_A, + `CALIPTRA_ASSERT_PRIM_COUNT_ERROR_TRIGGER_ALERT(CntScrmblCheck_A, u_otp_ctrl_scrmbl.u_prim_count, alert_tx_o[1]) - `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(TlLcGateFsm_A, + `CALIPTRA_ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(TlLcGateFsm_A, u_tlul_lc_gate.u_state_regs, alert_tx_o[2]) // Alert assertions for double LFSR. - `ASSERT_PRIM_DOUBLE_LFSR_ERROR_TRIGGER_ALERT(DoubleLfsrCheck_A, + `CALIPTRA_ASSERT_PRIM_DOUBLE_LFSR_ERROR_TRIGGER_ALERT(DoubleLfsrCheck_A, u_otp_ctrl_lfsr_timer.u_prim_double_lfsr, alert_tx_o[1]) // Alert assertions for reg_we onehot check - `ASSERT_PRIM_REG_WE_ONEHOT_ERROR_TRIGGER_ALERT(RegWeOnehotCheck_A, u_reg_core, alert_tx_o[2]) + `CALIPTRA_ASSERT_PRIM_REG_WE_ONEHOT_ERROR_TRIGGER_ALERT(RegWeOnehotCheck_A, u_reg_core, alert_tx_o[2]) + // Assertions for countermeasures inside prim_otp - `ifndef PRIM_DEFAULT_IMPL - `define PRIM_DEFAULT_IMPL prim_pkg::ImplGeneric + `ifndef CALIPTRA_PRIM_DEFAULT_IMPL + `define CALIPTRA_PRIM_DEFAULT_IMPL caliptra_prim_pkg::ImplGeneric `endif - if (`PRIM_DEFAULT_IMPL == prim_pkg::ImplGeneric) begin : gen_reg_we_assert_generic - `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(PrimFsmCheck_A, - u_otp.gen_generic.u_impl_generic.u_state_regs, alert_tx_o[3]) - `ASSERT_PRIM_REG_WE_ONEHOT_ERROR_TRIGGER_ALERT(PrimRegWeOnehotCheck_A, - u_otp.gen_generic.u_impl_generic.u_reg_top, alert_tx_o[3]) + if (`CALIPTRA_PRIM_DEFAULT_IMPL == caliptra_prim_pkg::ImplGeneric) begin : gen_reg_we_assert_generic + `CALIPTRA_ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(PrimFsmCheck_A, + u_otp.u_state_regs, alert_tx_o[3]) + //u_otp.gen_generic.u_impl_generic.u_state_regs, alert_tx_o[3]) + `CALIPTRA_ASSERT_PRIM_REG_WE_ONEHOT_ERROR_TRIGGER_ALERT(PrimRegWeOnehotCheck_A, + u_otp.u_reg_top, alert_tx_o[3]) + // //u_otp.gen_generic.u_impl_generic.u_reg_top, alert_tx_o[3]) end + + + endmodule : otp_ctrl diff --git a/src/fuse_ctrl/rtl/otp_ctrl_axi_pkg.sv b/src/fuse_ctrl/rtl/otp_ctrl_axi_pkg.sv deleted file mode 100644 index 21d1e2bf3..000000000 --- a/src/fuse_ctrl/rtl/otp_ctrl_axi_pkg.sv +++ /dev/null @@ -1,122 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -// NOTE: Side channel integrity check is not usedby Caliptra. Instead AXI_ID will be used to -// ensure that responses are sent by OTP to appropriate devices only. -// This package contains logic used by side channel integrity checks. - -package otp_ctrl_axi_pkg; - - parameter int H2DCmdIntgWidth = 7; - parameter int D2HRspIntgWidth = 7; - parameter int DataIntgWidth = 7; - parameter int DataWidth = 32; - - typedef enum logic [2:0] { - PutFullData = 3'h 0, - PutPartialData = 3'h 1, - Get = 3'h 4 - } tl_a_op_e; - - typedef enum logic [2:0] { - AccessAck = 3'h 0, - AccessAckData = 3'h 1 - } tl_d_op_e; - - // AXI Sub a_user - typedef struct packed { - logic [13:0] rsvd; - caliptra_prim_mubi_pkg::mubi4_t instr_type; - logic [H2DCmdIntgWidth-1:0] cmd_intg; - logic [DataIntgWidth-1:0] data_intg; - } axi_a_user_t; - - parameter axi_a_user_t ACI_A_USER_DEFAULT = '{ - rsvd: '0, - instr_type: caliptra_prim_mubi_pkg::Mubi4False, - cmd_intg: {H2DCmdIntgWidth{1'b1}}, - data_intg: {DataIntgWidth{1'b1}} - }; - - typedef struct packed { - caliptra_prim_mubi_pkg::mubi4_t instr_type; - logic [axi_pkg::AW-1:0] addr; - - } - - typedef struct packed { - caliptra_prim_mubi_pkg::nubi4_t instr_type; - logic [axi_pks::AW-1:0] addr; - tl_a_op_e opcode; - logic [axi_pkg::DW/8-1:0] strb, - } axi_h2d_cmd_intg_t; - - //AXI Sub d_user - typedef struct packed { - logic [17:0] rsvd; - logic [D2HRspIntgWidth-1:0] rsp_intg; - logic [DataIntgWidth-1:0] data_intg; - } axi_d_user_t; - - parameter axi_d_user_t AXI_D_USER_DEFAULT = '{ - rsvd: '0, - instr_type: {D2HRspIntgWidth{1'b1}}, - data_intg: {DataIntgWidth{1'b1}} - }; - - typedef struct packed { - tl_d_op_e opcode; - logic [xi_pkg::DW-1:0] size; //TODO - this need to be fixed based on AXI protocol. Placeholder for now - logic error; - } axi_d2h_rsp_intg_t; - - // extract cmd opcode based on AXI write and strb signal values - function automatic translate_axi_cmd_to_opcode(logic axi_write, logic [DataWidth/8-1:0] axi_wstrb); - tl_a_op_e tl_equiv_opcode; - if (!axi_write) begin //AXI Read Cmd - tl_equiv_opcode = Get; - end - else begin // AXI Write Cmd - if (axi_wstrb == 'F) begin // AXI Full Write - tl_equiv_opcode = PutFullData; - end - else begin // AXI Partial Write - tl_equiv_opcode = PutPartialData; - end - end - return tl_equiv_opcode; - endfunction - - // extract rsp/data opcode based on r/W response channels - - // Check for user unsuported values - - // extract variables used for command checking - - // extract variables used for response checking - - // calculate ecc for command checking - - // calculate ecc for data checking - - // return inverted integrity for command payload - - // reutn inverted integrity for data paylod - - - - -endpackage - \ No newline at end of file diff --git a/src/fuse_ctrl/rtl/otp_ctrl_dai.sv b/src/fuse_ctrl/rtl/otp_ctrl_dai.sv index 820eaafed..0bd3741d1 100644 --- a/src/fuse_ctrl/rtl/otp_ctrl_dai.sv +++ b/src/fuse_ctrl/rtl/otp_ctrl_dai.sv @@ -5,12 +5,12 @@ // Direct access interface for OTP controller. // -`include "prim_flop_macros.sv" +`include "caliptra_prim_flop_macros.sv" module otp_ctrl_dai - import otp_ctrl_pkg::*; - import otp_ctrl_reg_pkg::*; - import otp_ctrl_part_pkg::*; + import caliptra_otp_ctrl_pkg::*; + import caliptra_otp_ctrl_reg_pkg::*; + import caliptra_otp_ctrl_part_pkg::*; ( input clk_i, input rst_ni, @@ -48,14 +48,14 @@ module otp_ctrl_dai output logic [NumDaiWords-1:0][31:0] dai_rdata_o, // OTP interface output logic otp_req_o, - output prim_otp_pkg::cmd_e otp_cmd_o, + output caliptra_prim_otp_pkg::cmd_e otp_cmd_o, output logic [OtpSizeWidth-1:0] otp_size_o, output logic [OtpIfWidth-1:0] otp_wdata_o, output logic [OtpAddrWidth-1:0] otp_addr_o, input otp_gnt_i, input otp_rvalid_i, input [ScrmblBlockWidth-1:0] otp_rdata_i, - input prim_otp_pkg::err_e otp_err_i, + input caliptra_prim_otp_pkg::err_e otp_err_i, // Scrambling mutex request output logic scrmbl_mtx_req_o, input scrmbl_mtx_gnt_i, @@ -74,14 +74,14 @@ module otp_ctrl_dai // Integration Checks // //////////////////////// - import prim_mubi_pkg::*; - import prim_util_pkg::vbits; + import caliptra_prim_mubi_pkg::*; + import caliptra_prim_util_pkg::vbits; localparam int CntWidth = OtpByteAddrWidth - $clog2(ScrmblBlockWidth/8); // Integration checks for parameters. - `ASSERT_INIT(CheckNativeOtpWidth0_A, (ScrmblBlockWidth % OtpWidth) == 0) - `ASSERT_INIT(CheckNativeOtpWidth1_A, (32 % OtpWidth) == 0) + `CALIPTRA_ASSERT_INIT(CheckNativeOtpWidth0_A, (ScrmblBlockWidth % OtpWidth) == 0) + `CALIPTRA_ASSERT_INIT(CheckNativeOtpWidth1_A, (32 % OtpWidth) == 0) ///////////////////// // DAI Control FSM // @@ -197,7 +197,7 @@ module otp_ctrl_dai // OTP signals otp_req_o = 1'b0; - otp_cmd_o = prim_otp_pkg::Init; + otp_cmd_o = caliptra_prim_otp_pkg::Init; // Scrambling mutex scrmbl_mtx_req_o = 1'b0; @@ -318,9 +318,9 @@ module otp_ctrl_dai // Depending on the partition configuration, // the wrapper is instructed to ignore integrity errors. if (PartInfo[part_idx].integrity) begin - otp_cmd_o = prim_otp_pkg::Read; + otp_cmd_o = caliptra_prim_otp_pkg::Read; end else begin - otp_cmd_o = prim_otp_pkg::ReadRaw; + otp_cmd_o = caliptra_prim_otp_pkg::ReadRaw; end if (otp_gnt_i) begin state_d = ReadWaitSt; @@ -421,9 +421,9 @@ module otp_ctrl_dai // Depending on the partition configuration, // the wrapper is instructed to ignore integrity errors. if (PartInfo[part_idx].integrity) begin - otp_cmd_o = prim_otp_pkg::Write; + otp_cmd_o = caliptra_prim_otp_pkg::Write; end else begin - otp_cmd_o = prim_otp_pkg::WriteRaw; + otp_cmd_o = caliptra_prim_otp_pkg::WriteRaw; end if (otp_gnt_i) begin state_d = WriteWaitSt; @@ -554,9 +554,9 @@ module otp_ctrl_dai // Depending on the partition configuration, // the wrapper is instructed to ignore integrity errors. if (PartInfo[part_idx].integrity) begin - otp_cmd_o = prim_otp_pkg::Read; + otp_cmd_o = caliptra_prim_otp_pkg::Read; end else begin - otp_cmd_o = prim_otp_pkg::ReadRaw; + otp_cmd_o = caliptra_prim_otp_pkg::ReadRaw; end if (otp_gnt_i) begin state_d = DigReadWaitSt; @@ -708,7 +708,7 @@ module otp_ctrl_dai // PartEnd has an extra bit to cope with the case where offset + size overflows. However, we // arrange the address map to make sure that PartEndInt is at most 1 << OtpByteAddrWidth. Check // that here. - `ASSERT_INIT(PartEndMax_A, PartEndInt <= (1 << OtpByteAddrWidth)) + `CALIPTRA_ASSERT_INIT(PartEndMax_A, PartEndInt <= (1 << OtpByteAddrWidth)) // The shift right by OtpAddrShift drops exactly the bottom bits that are needed to convert // between OtpAddrWidth and OtpByteAddrWidth, so we know that we can slice safely here. @@ -724,10 +724,10 @@ module otp_ctrl_dai assign digest_addr_lut[k] = DigestAddrLut; end - `ASSERT(ScrmblBlockWidthGe8_A, ScrmblBlockWidth >= 8) - `ASSERT(PartSelMustBeOnehot_A, $onehot0(part_sel_oh)) + `CALIPTRA_ASSERT(ScrmblBlockWidthGe8_A, ScrmblBlockWidth >= 8) + `CALIPTRA_ASSERT(PartSelMustBeOnehot_A, $onehot0(part_sel_oh)) - prim_arbiter_fixed #( + caliptra_prim_arbiter_fixed #( .N(NumPart), .EnDataPort(0) ) u_part_sel_idx ( @@ -773,7 +773,7 @@ module otp_ctrl_dai // Address counter - this is only used for computing a digest, hence the increment is // fixed to 8 byte. // SEC_CM: DAI.CTR.REDUN - prim_count #( + caliptra_prim_count #( .Width(CntWidth) ) u_prim_count ( .clk_i, @@ -800,7 +800,7 @@ module otp_ctrl_dai // Registers // /////////////// - `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, ResetSt) + `CALIPTRA_PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, ResetSt) always_ff @(posedge clk_i or negedge rst_ni) begin : p_regs if (!rst_ni) begin @@ -831,25 +831,25 @@ module otp_ctrl_dai //////////////// // Known assertions - `ASSERT_KNOWN(InitDoneKnown_A, init_done_o) - `ASSERT_KNOWN(PartInitReqKnown_A, part_init_req_o) - `ASSERT_KNOWN(ErrorKnown_A, error_o) - `ASSERT_KNOWN(DaiIdleKnown_A, dai_idle_o) - `ASSERT_KNOWN(DaiRdataKnown_A, dai_rdata_o) - `ASSERT_KNOWN(OtpReqKnown_A, otp_req_o) - `ASSERT_KNOWN(OtpCmdKnown_A, otp_cmd_o) - `ASSERT_KNOWN(OtpSizeKnown_A, otp_size_o) - `ASSERT_KNOWN(OtpWdataKnown_A, otp_wdata_o) - `ASSERT_KNOWN(OtpAddrKnown_A, otp_addr_o) - `ASSERT_KNOWN(ScrmblMtxReqKnown_A, scrmbl_mtx_req_o) - `ASSERT_KNOWN(ScrmblCmdKnown_A, scrmbl_cmd_o) - `ASSERT_KNOWN(ScrmblModeKnown_A, scrmbl_mode_o) - `ASSERT_KNOWN(ScrmblSelKnown_A, scrmbl_sel_o) - `ASSERT_KNOWN(ScrmblDataKnown_A, scrmbl_data_o) - `ASSERT_KNOWN(ScrmblValidKnown_A, scrmbl_valid_o) + `CALIPTRA_ASSERT_KNOWN(InitDoneKnown_A, init_done_o) + `CALIPTRA_ASSERT_KNOWN(PartInitReqKnown_A, part_init_req_o) + `CALIPTRA_ASSERT_KNOWN(ErrorKnown_A, error_o) + `CALIPTRA_ASSERT_KNOWN(DaiIdleKnown_A, dai_idle_o) + `CALIPTRA_ASSERT_KNOWN(DaiRdataKnown_A, dai_rdata_o) + `CALIPTRA_ASSERT_KNOWN(OtpReqKnown_A, otp_req_o) + `CALIPTRA_ASSERT_KNOWN(OtpCmdKnown_A, otp_cmd_o) + `CALIPTRA_ASSERT_KNOWN(OtpSizeKnown_A, otp_size_o) + `CALIPTRA_ASSERT_KNOWN(OtpWdataKnown_A, otp_wdata_o) + `CALIPTRA_ASSERT_KNOWN(OtpAddrKnown_A, otp_addr_o) + `CALIPTRA_ASSERT_KNOWN(ScrmblMtxReqKnown_A, scrmbl_mtx_req_o) + `CALIPTRA_ASSERT_KNOWN(ScrmblCmdKnown_A, scrmbl_cmd_o) + `CALIPTRA_ASSERT_KNOWN(ScrmblModeKnown_A, scrmbl_mode_o) + `CALIPTRA_ASSERT_KNOWN(ScrmblSelKnown_A, scrmbl_sel_o) + `CALIPTRA_ASSERT_KNOWN(ScrmblDataKnown_A, scrmbl_data_o) + `CALIPTRA_ASSERT_KNOWN(ScrmblValidKnown_A, scrmbl_valid_o) // OTP error response - `ASSERT(OtpErrorState_A, + `CALIPTRA_ASSERT(OtpErrorState_A, state_q inside {InitOtpSt, ReadWaitSt, WriteWaitSt, DigReadWaitSt} && otp_rvalid_i && !(otp_err inside {NoError, MacroEccCorrError, MacroWriteBlankError}) |=> diff --git a/src/fuse_ctrl/rtl/otp_ctrl_ecc_reg.sv b/src/fuse_ctrl/rtl/otp_ctrl_ecc_reg.sv index 2199a7cc6..7514aea30 100644 --- a/src/fuse_ctrl/rtl/otp_ctrl_ecc_reg.sv +++ b/src/fuse_ctrl/rtl/otp_ctrl_ecc_reg.sv @@ -5,12 +5,12 @@ // Register file for buffered OTP partitions. ECC is used to detect up // to two simultaneous errors within each 64bit word. -`include "prim_assert.sv" +`include "caliptra_prim_assert.sv" module otp_ctrl_ecc_reg #( parameter int Width = 64, // bit parameter int Depth = 128, - localparam int Aw = prim_util_pkg::vbits(Depth) // derived parameter + localparam int Aw = caliptra_prim_util_pkg::vbits(Depth) // derived parameter ) ( input logic clk_i, input logic rst_ni, @@ -27,7 +27,7 @@ module otp_ctrl_ecc_reg #( ); // Integration checks for parameters. - `ASSERT_INIT(WidthMustBe64bit_A, Width == 64) + `CALIPTRA_ASSERT_INIT(WidthMustBe64bit_A, Width == 64) localparam int EccWidth = 8; @@ -36,7 +36,7 @@ module otp_ctrl_ecc_reg #( logic [Width+EccWidth-1:0] ecc_enc; // Only one encoder is needed. - prim_secded_inv_72_64_enc u_prim_secded_inv_72_64_enc ( + caliptra_prim_secded_inv_72_64_enc u_prim_secded_inv_72_64_enc ( .data_i(wdata_i), .data_o(ecc_enc) ); @@ -74,7 +74,7 @@ module otp_ctrl_ecc_reg #( // Concurrent ECC checks. logic [Depth-1:0][1:0] err; for (genvar k = 0; k < Depth; k++) begin : gen_ecc_dec - prim_secded_inv_72_64_dec u_prim_secded_inv_72_64_dec ( + caliptra_prim_secded_inv_72_64_dec u_prim_secded_inv_72_64_dec ( .data_i({ecc_q[k], data_q[k]}), // We only rely on the error detection mechanism, // and not on error correction. @@ -88,7 +88,7 @@ module otp_ctrl_ecc_reg #( always_ff @(posedge clk_i or negedge rst_ni) begin : p_regs if (!rst_ni) begin - ecc_q <= {Depth{prim_secded_pkg::SecdedInv7264ZeroEcc}}; + ecc_q <= {Depth{caliptra_prim_secded_pkg::SecdedInv7264ZeroEcc}}; data_q <= '0; end else begin ecc_q <= ecc_d; @@ -96,10 +96,10 @@ module otp_ctrl_ecc_reg #( end end - `ASSERT_KNOWN(EccKnown_A, ecc_q) - `ASSERT_KNOWN(DataKnown_A, data_q) - `ASSERT_KNOWN(RDataOutKnown_A, rdata_o) - `ASSERT_KNOWN(DataOutKnown_A, data_o) - `ASSERT_KNOWN(EccErrKnown_A, ecc_err_o) + `CALIPTRA_ASSERT_KNOWN(EccKnown_A, ecc_q) + `CALIPTRA_ASSERT_KNOWN(DataKnown_A, data_q) + `CALIPTRA_ASSERT_KNOWN(RDataOutKnown_A, rdata_o) + `CALIPTRA_ASSERT_KNOWN(DataOutKnown_A, data_o) + `CALIPTRA_ASSERT_KNOWN(EccErrKnown_A, ecc_err_o) endmodule : otp_ctrl_ecc_reg diff --git a/src/fuse_ctrl/rtl/otp_ctrl_lci.sv b/src/fuse_ctrl/rtl/otp_ctrl_lci.sv index 122675069..07bc4ec9a 100644 --- a/src/fuse_ctrl/rtl/otp_ctrl_lci.sv +++ b/src/fuse_ctrl/rtl/otp_ctrl_lci.sv @@ -5,12 +5,12 @@ // Life cycle interface for performing life cycle transitions in OTP. // -`include "prim_flop_macros.sv" +`include "caliptra_prim_flop_macros.sv" module otp_ctrl_lci - import otp_ctrl_pkg::*; - import otp_ctrl_reg_pkg::*; - import otp_ctrl_part_pkg::*; + import caliptra_otp_ctrl_pkg::*; + import caliptra_otp_ctrl_reg_pkg::*; + import caliptra_otp_ctrl_part_pkg::*; #( // Lifecycle partition information parameter part_info_t Info = PartInfoDefault @@ -44,21 +44,21 @@ module otp_ctrl_lci output logic lci_prog_idle_o, // OTP interface output logic otp_req_o, - output prim_otp_pkg::cmd_e otp_cmd_o, + output caliptra_prim_otp_pkg::cmd_e otp_cmd_o, output logic [OtpSizeWidth-1:0] otp_size_o, output logic [OtpIfWidth-1:0] otp_wdata_o, output logic [OtpAddrWidth-1:0] otp_addr_o, input otp_gnt_i, input otp_rvalid_i, input [ScrmblBlockWidth-1:0] otp_rdata_i, - input prim_otp_pkg::err_e otp_err_i + input caliptra_prim_otp_pkg::err_e otp_err_i ); //////////////////////// // Integration Checks // //////////////////////// - import prim_util_pkg::vbits; + import caliptra_prim_util_pkg::vbits; localparam int NumLcOtpWords = int'(Info.size) >> OtpAddrShift; localparam int CntWidth = vbits(NumLcOtpWords); @@ -67,7 +67,7 @@ module otp_ctrl_lci localparam bit [CntWidth-1:0] LastLcOtpWord = LastLcOtpWordInt[CntWidth-1:0]; // This is required, since each native OTP word can only be programmed once. - `ASSERT_INIT(LcValueMustBeWiderThanNativeOtpWidth_A, lc_ctrl_state_pkg::LcValueWidth >= OtpWidth) + `CALIPTRA_ASSERT_INIT(LcValueMustBeWiderThanNativeOtpWidth_A, lc_ctrl_state_pkg::LcValueWidth >= OtpWidth) //////////////////// // Controller FSM // @@ -125,7 +125,7 @@ module otp_ctrl_lci // OTP signals otp_req_o = 1'b0; - otp_cmd_o = prim_otp_pkg::Read; + otp_cmd_o = caliptra_prim_otp_pkg::Read; // Response to LC controller lc_err_o = 1'b0; @@ -158,7 +158,7 @@ module otp_ctrl_lci // programmed to 1 before, the OTP errors out. WriteSt: begin otp_req_o = 1'b1; - otp_cmd_o = prim_otp_pkg::Write; + otp_cmd_o = caliptra_prim_otp_pkg::Write; lci_prog_idle_o = 1'b0; if (otp_gnt_i) begin state_d = WriteWaitSt; @@ -235,7 +235,7 @@ module otp_ctrl_lci // Native OTP word counter // SEC_CM: LCI.CTR.REDUN - prim_count #( + caliptra_prim_count #( .Width(CntWidth) ) u_prim_count ( .clk_i, @@ -271,7 +271,7 @@ module otp_ctrl_lci // Registers // /////////////// - `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, ResetSt) + `CALIPTRA_PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, ResetSt) always_ff @(posedge clk_i or negedge rst_ni) begin : p_regs if (!rst_ni) begin @@ -285,14 +285,14 @@ module otp_ctrl_lci // Assertions // //////////////// - `ASSERT_KNOWN(LcAckKnown_A, lc_ack_o) - `ASSERT_KNOWN(LcErrKnown_A, lc_err_o) - `ASSERT_KNOWN(ErrorKnown_A, error_o) - `ASSERT_KNOWN(LciIdleKnown_A, lci_prog_idle_o) - `ASSERT_KNOWN(OtpReqKnown_A, otp_req_o) - `ASSERT_KNOWN(OtpCmdKnown_A, otp_cmd_o) - `ASSERT_KNOWN(OtpSizeKnown_A, otp_size_o) - `ASSERT_KNOWN(OtpWdataKnown_A, otp_wdata_o) - `ASSERT_KNOWN(OtpAddrKnown_A, otp_addr_o) + `CALIPTRA_ASSERT_KNOWN(LcAckKnown_A, lc_ack_o) + `CALIPTRA_ASSERT_KNOWN(LcErrKnown_A, lc_err_o) + `CALIPTRA_ASSERT_KNOWN(ErrorKnown_A, error_o) + `CALIPTRA_ASSERT_KNOWN(LciIdleKnown_A, lci_prog_idle_o) + `CALIPTRA_ASSERT_KNOWN(OtpReqKnown_A, otp_req_o) + `CALIPTRA_ASSERT_KNOWN(OtpCmdKnown_A, otp_cmd_o) + `CALIPTRA_ASSERT_KNOWN(OtpSizeKnown_A, otp_size_o) + `CALIPTRA_ASSERT_KNOWN(OtpWdataKnown_A, otp_wdata_o) + `CALIPTRA_ASSERT_KNOWN(OtpAddrKnown_A, otp_addr_o) endmodule : otp_ctrl_lci diff --git a/src/fuse_ctrl/rtl/otp_ctrl_lfsr_timer.sv b/src/fuse_ctrl/rtl/otp_ctrl_lfsr_timer.sv index 22b3ec383..18b55fc7f 100644 --- a/src/fuse_ctrl/rtl/otp_ctrl_lfsr_timer.sv +++ b/src/fuse_ctrl/rtl/otp_ctrl_lfsr_timer.sv @@ -26,11 +26,11 @@ // This can be useful if SW chooses to leave the periodic checks disabled. // -`include "prim_flop_macros.sv" +`include "caliptra_prim_flop_macros.sv" module otp_ctrl_lfsr_timer - import otp_ctrl_pkg::*; - import otp_ctrl_reg_pkg::*; + import caliptra_otp_ctrl_pkg::*; + import caliptra_otp_ctrl_reg_pkg::*; #( // Compile time random constants, to be overriden by topgen. parameter lfsr_seed_t RndCnstLfsrSeed = RndCnstLfsrSeedDefault, @@ -90,7 +90,7 @@ module otp_ctrl_lfsr_timer // If any of the two is glitched and the two LFSR states do not agree, // the FSM below is moved into a terminal error state. // SEC_CM: TIMER.LFSR.REDUN - prim_double_lfsr #( + caliptra_prim_double_lfsr #( .LfsrDw ( LfsrWidth ), .EntropyDw ( LfsrWidth ), .StateOutDw ( LfsrWidth ), @@ -113,7 +113,7 @@ module otp_ctrl_lfsr_timer logic unused_seed; assign unused_seed = ^edn_data_i; - `ASSERT_INIT(EdnIsWideEnough_A, EdnDataWidth >= LfsrWidth) + `CALIPTRA_ASSERT_INIT(EdnIsWideEnough_A, EdnDataWidth >= LfsrWidth) ////////////////////////////// // Tandem Counter Instances // @@ -144,7 +144,7 @@ module otp_ctrl_lfsr_timer assign cnsty_cnt_set_val = (cnsty_set_period) ? (lfsr_state & cnsty_mask) : LfsrWidth'(timeout_i); // SEC_CM: TIMER_INTEG.CTR.REDUN - prim_count #( + caliptra_prim_count #( .Width(LfsrWidth) ) u_prim_count_integ ( .clk_i, @@ -162,7 +162,7 @@ module otp_ctrl_lfsr_timer ); // SEC_CM: TIMER_CNSTY.CTR.REDUN - prim_count #( + caliptra_prim_count #( .Width(LfsrWidth) ) u_prim_count_cnsty ( .clk_i, @@ -364,7 +364,7 @@ module otp_ctrl_lfsr_timer // Registers // /////////////// - `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, ResetSt) + `CALIPTRA_PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, ResetSt) always_ff @(posedge clk_i or negedge rst_ni) begin : p_regs if (!rst_ni) begin @@ -388,10 +388,10 @@ module otp_ctrl_lfsr_timer // Assertions // //////////////// - `ASSERT_KNOWN(EdnReqKnown_A, edn_req_o) - `ASSERT_KNOWN(ChkPendingKnown_A, chk_pending_o) - `ASSERT_KNOWN(IntegChkReqKnown_A, integ_chk_req_o) - `ASSERT_KNOWN(CnstyChkReqKnown_A, cnsty_chk_req_o) - `ASSERT_KNOWN(ChkTimeoutKnown_A, chk_timeout_o) + `CALIPTRA_ASSERT_KNOWN(EdnReqKnown_A, edn_req_o) + `CALIPTRA_ASSERT_KNOWN(ChkPendingKnown_A, chk_pending_o) + `CALIPTRA_ASSERT_KNOWN(IntegChkReqKnown_A, integ_chk_req_o) + `CALIPTRA_ASSERT_KNOWN(CnstyChkReqKnown_A, cnsty_chk_req_o) + `CALIPTRA_ASSERT_KNOWN(ChkTimeoutKnown_A, chk_timeout_o) endmodule : otp_ctrl_lfsr_timer diff --git a/src/fuse_ctrl/rtl/otp_ctrl_part_buf.sv b/src/fuse_ctrl/rtl/otp_ctrl_part_buf.sv index bcd348b71..c464ec0b5 100644 --- a/src/fuse_ctrl/rtl/otp_ctrl_part_buf.sv +++ b/src/fuse_ctrl/rtl/otp_ctrl_part_buf.sv @@ -5,12 +5,12 @@ // Buffered partition for OTP controller. // -`include "prim_flop_macros.sv" +`include "caliptra_prim_flop_macros.sv" module otp_ctrl_part_buf - import otp_ctrl_pkg::*; - import otp_ctrl_reg_pkg::*; - import otp_ctrl_part_pkg::*; + import caliptra_otp_ctrl_pkg::*; + import caliptra_otp_ctrl_reg_pkg::*; + import caliptra_otp_ctrl_part_pkg::*; #( // Partition information. parameter part_info_t Info = PartInfoDefault, @@ -53,14 +53,14 @@ module otp_ctrl_part_buf output logic [Info.size*8-1:0] data_o, // OTP interface output logic otp_req_o, - output prim_otp_pkg::cmd_e otp_cmd_o, + output caliptra_prim_otp_pkg::cmd_e otp_cmd_o, output logic [OtpSizeWidth-1:0] otp_size_o, output logic [OtpIfWidth-1:0] otp_wdata_o, output logic [OtpAddrWidth-1:0] otp_addr_o, input otp_gnt_i, input otp_rvalid_i, input [ScrmblBlockWidth-1:0] otp_rdata_i, - input prim_otp_pkg::err_e otp_err_i, + input caliptra_prim_otp_pkg::err_e otp_err_i, // Scrambling mutex request output logic scrmbl_mtx_req_o, input scrmbl_mtx_gnt_i, @@ -79,8 +79,8 @@ module otp_ctrl_part_buf // Integration Checks // //////////////////////// - import prim_mubi_pkg::*; - import prim_util_pkg::vbits; + import caliptra_prim_mubi_pkg::*; + import caliptra_prim_util_pkg::vbits; localparam int unsigned DigestOffsetInt = (int'(Info.offset) + int'(Info.size) - ScrmblBlockWidth/8); @@ -95,17 +95,17 @@ module otp_ctrl_part_buf localparam bit [CntWidth-1:0] PenultimateScrmblBlock = PenultimateScrmblBlockInt[CntWidth-1:0]; // Integration checks for parameters. - `ASSERT_INIT(OffsetMustBeBlockAligned_A, (Info.offset % (ScrmblBlockWidth/8)) == 0) - `ASSERT_INIT(SizeMustBeBlockAligned_A, (Info.size % (ScrmblBlockWidth/8)) == 0) - `ASSERT_INIT(DigestOffsetMustBeRepresentable_A, DigestOffsetInt == int'(DigestOffset)) - `ASSERT(ScrambledImpliesDigest_A, Info.secret |-> Info.hw_digest) - `ASSERT(WriteLockImpliesDigest_A, Info.read_lock |-> Info.hw_digest) - `ASSERT(ReadLockImpliesDigest_A, Info.write_lock |-> Info.hw_digest) + `CALIPTRA_ASSERT_INIT(OffsetMustBeBlockAligned_A, (Info.offset % (ScrmblBlockWidth/8)) == 0) + `CALIPTRA_ASSERT_INIT(SizeMustBeBlockAligned_A, (Info.size % (ScrmblBlockWidth/8)) == 0) + `CALIPTRA_ASSERT_INIT(DigestOffsetMustBeRepresentable_A, DigestOffsetInt == int'(DigestOffset)) + `CALIPTRA_ASSERT(ScrambledImpliesDigest_A, Info.secret |-> Info.hw_digest) + `CALIPTRA_ASSERT(WriteLockImpliesDigest_A, Info.read_lock |-> Info.hw_digest) + `CALIPTRA_ASSERT(ReadLockImpliesDigest_A, Info.write_lock |-> Info.hw_digest) // This feature is only supposed to be used with partitions that are not scrambled // and that do not have a digest. - `ASSERT(BypassEnable0_A, Info.secret |-> lc_ctrl_pkg::lc_tx_test_false_strict(check_byp_en_i)) - `ASSERT(BypassEnable1_A, Info.hw_digest |-> lc_ctrl_pkg::lc_tx_test_false_strict(check_byp_en_i)) + `CALIPTRA_ASSERT(BypassEnable0_A, Info.secret |-> lc_ctrl_pkg::lc_tx_test_false_strict(check_byp_en_i)) + `CALIPTRA_ASSERT(BypassEnable1_A, Info.hw_digest |-> lc_ctrl_pkg::lc_tx_test_false_strict(check_byp_en_i)) /////////////////////// // OTP Partition FSM // @@ -189,10 +189,10 @@ module otp_ctrl_part_buf // point and does not report any integrity errors if integrity is disabled. otp_err_e otp_err; if (Info.integrity) begin : gen_integrity - assign otp_cmd_o = prim_otp_pkg::Read; + assign otp_cmd_o = caliptra_prim_otp_pkg::Read; assign otp_err = otp_err_e'(otp_err_i); end else begin : gen_no_integrity - assign otp_cmd_o = prim_otp_pkg::ReadRaw; + assign otp_cmd_o = caliptra_prim_otp_pkg::ReadRaw; always_comb begin if (otp_err_e'(otp_err_i) inside {MacroEccCorrError, MacroEccUncorrError}) begin otp_err = NoError; @@ -615,7 +615,7 @@ module otp_ctrl_part_buf // Address counter - this is only used for computing a digest, hence the increment is // fixed to 8 byte. // SEC_CM: PART.CTR.REDUN - prim_count #( + caliptra_prim_count #( .Width(CntWidth) ) u_prim_count ( .clk_i, @@ -686,7 +686,7 @@ module otp_ctrl_part_buf // Aggregate all possible DAI write /readlocks. The partition is also locked when uninitialized. // Note that the locks are redundantly encoded values. part_access_t access_pre; - prim_mubi8_sender #( + caliptra_prim_mubi8_sender #( .AsyncOn(0) ) u_prim_mubi8_sender_write_lock_pre ( .clk_i, @@ -694,7 +694,7 @@ module otp_ctrl_part_buf .mubi_i(mubi8_and_lo(dout_locked_q, access_i.write_lock)), .mubi_o(access_pre.write_lock) ); - prim_mubi8_sender #( + caliptra_prim_mubi8_sender #( .AsyncOn(0) ) u_prim_mubi8_sender_read_lock_pre ( .clk_i, @@ -709,7 +709,7 @@ module otp_ctrl_part_buf assign digest_locked = (digest_o != '0) ? MuBi8True : MuBi8False; // This prevents the synthesis tool from optimizing the multibit signal. - prim_mubi8_sender #( + caliptra_prim_mubi8_sender #( .AsyncOn(0) ) u_prim_mubi8_sender_write_lock ( .clk_i, @@ -718,7 +718,7 @@ module otp_ctrl_part_buf .mubi_o(access_o.write_lock) ); - `ASSERT(DigestWriteLocksPartition_A, digest_o |-> mubi8_test_true_loose(access_o.write_lock)) + `CALIPTRA_ASSERT(DigestWriteLocksPartition_A, digest_o |-> mubi8_test_true_loose(access_o.write_lock)) end else begin : gen_no_digest_write_lock assign access_o.write_lock = access_pre.write_lock; end @@ -729,7 +729,7 @@ module otp_ctrl_part_buf assign digest_locked = (digest_o != '0) ? MuBi8True : MuBi8False; // This prevents the synthesis tool from optimizing the multibit signal. - prim_mubi8_sender #( + caliptra_prim_mubi8_sender #( .AsyncOn(0) ) u_prim_mubi8_sender_read_lock ( .clk_i, @@ -738,7 +738,7 @@ module otp_ctrl_part_buf .mubi_o(access_o.read_lock) ); - `ASSERT(DigestReadLocksPartition_A, digest_o |-> mubi8_test_true_loose(access_o.read_lock)) + `CALIPTRA_ASSERT(DigestReadLocksPartition_A, digest_o |-> mubi8_test_true_loose(access_o.read_lock)) end else begin : gen_no_digest_read_lock assign access_o.read_lock = access_pre.read_lock; end @@ -747,7 +747,7 @@ module otp_ctrl_part_buf // Registers // /////////////// - `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, ResetSt) + `CALIPTRA_PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, ResetSt) always_ff @(posedge clk_i or negedge rst_ni) begin : p_regs if (!rst_ni) begin @@ -765,50 +765,50 @@ module otp_ctrl_part_buf //////////////// // Known assertions - `ASSERT_KNOWN(InitDoneKnown_A, init_done_o) - `ASSERT_KNOWN(IntegChkAckKnown_A, integ_chk_ack_o) - `ASSERT_KNOWN(CnstyChkAckKnown_A, cnsty_chk_ack_o) - `ASSERT_KNOWN(ErrorKnown_A, error_o) - `ASSERT_KNOWN(AccessKnown_A, access_o) - `ASSERT_KNOWN(DigestKnown_A, digest_o) - `ASSERT_KNOWN(DataKnown_A, data_o) - `ASSERT_KNOWN(OtpReqKnown_A, otp_req_o) - `ASSERT_KNOWN(OtpCmdKnown_A, otp_cmd_o) - `ASSERT_KNOWN(OtpSizeKnown_A, otp_size_o) - `ASSERT_KNOWN(OtpWdataKnown_A, otp_wdata_o) - `ASSERT_KNOWN(OtpAddrKnown_A, otp_addr_o) - `ASSERT_KNOWN(ScrmblMtxReqKnown_A, scrmbl_mtx_req_o) - `ASSERT_KNOWN(ScrmblCmdKnown_A, scrmbl_cmd_o) - `ASSERT_KNOWN(ScrmblModeKnown_A, scrmbl_mode_o) - `ASSERT_KNOWN(ScrmblSelKnown_A, scrmbl_sel_o) - `ASSERT_KNOWN(ScrmblDataKnown_A, scrmbl_data_o) - `ASSERT_KNOWN(ScrmblValidKnown_A, scrmbl_valid_o) + `CALIPTRA_ASSERT_KNOWN(InitDoneKnown_A, init_done_o) + `CALIPTRA_ASSERT_KNOWN(IntegChkAckKnown_A, integ_chk_ack_o) + `CALIPTRA_ASSERT_KNOWN(CnstyChkAckKnown_A, cnsty_chk_ack_o) + `CALIPTRA_ASSERT_KNOWN(ErrorKnown_A, error_o) + `CALIPTRA_ASSERT_KNOWN(AccessKnown_A, access_o) + `CALIPTRA_ASSERT_KNOWN(DigestKnown_A, digest_o) + `CALIPTRA_ASSERT_KNOWN(DataKnown_A, data_o) + `CALIPTRA_ASSERT_KNOWN(OtpReqKnown_A, otp_req_o) + `CALIPTRA_ASSERT_KNOWN(OtpCmdKnown_A, otp_cmd_o) + `CALIPTRA_ASSERT_KNOWN(OtpSizeKnown_A, otp_size_o) + `CALIPTRA_ASSERT_KNOWN(OtpWdataKnown_A, otp_wdata_o) + `CALIPTRA_ASSERT_KNOWN(OtpAddrKnown_A, otp_addr_o) + `CALIPTRA_ASSERT_KNOWN(ScrmblMtxReqKnown_A, scrmbl_mtx_req_o) + `CALIPTRA_ASSERT_KNOWN(ScrmblCmdKnown_A, scrmbl_cmd_o) + `CALIPTRA_ASSERT_KNOWN(ScrmblModeKnown_A, scrmbl_mode_o) + `CALIPTRA_ASSERT_KNOWN(ScrmblSelKnown_A, scrmbl_sel_o) + `CALIPTRA_ASSERT_KNOWN(ScrmblDataKnown_A, scrmbl_data_o) + `CALIPTRA_ASSERT_KNOWN(ScrmblValidKnown_A, scrmbl_valid_o) // Uninitialized partitions should always be locked, no matter what. - `ASSERT(InitWriteLocksPartition_A, + `CALIPTRA_ASSERT(InitWriteLocksPartition_A, mubi8_test_true_loose(dout_locked_q) |-> mubi8_test_true_loose(access_o.write_lock)) - `ASSERT(InitReadLocksPartition_A, + `CALIPTRA_ASSERT(InitReadLocksPartition_A, mubi8_test_true_loose(dout_locked_q) |-> mubi8_test_true_loose(access_o.read_lock)) // Incoming Lock propagation - `ASSERT(WriteLockPropagation_A, + `CALIPTRA_ASSERT(WriteLockPropagation_A, mubi8_test_true_loose(access_i.write_lock) |-> mubi8_test_true_loose(access_o.write_lock)) - `ASSERT(ReadLockPropagation_A, + `CALIPTRA_ASSERT(ReadLockPropagation_A, mubi8_test_true_loose(access_i.read_lock) |-> mubi8_test_true_loose(access_o.read_lock)) // ECC error in buffer regs - `ASSERT(EccErrorState_A, + `CALIPTRA_ASSERT(EccErrorState_A, ecc_err |=> state_q == ErrorSt) // OTP error response - `ASSERT(OtpErrorState_A, + `CALIPTRA_ASSERT(OtpErrorState_A, state_q inside {InitWaitSt, CnstyReadWaitSt} && otp_rvalid_i && !(otp_err inside {NoError, MacroEccCorrError}) && !ecc_err |=> diff --git a/src/fuse_ctrl/rtl/otp_ctrl_part_unbuf.sv b/src/fuse_ctrl/rtl/otp_ctrl_part_unbuf.sv index 23cf3171b..f6e4f24f0 100644 --- a/src/fuse_ctrl/rtl/otp_ctrl_part_unbuf.sv +++ b/src/fuse_ctrl/rtl/otp_ctrl_part_unbuf.sv @@ -5,12 +5,12 @@ // Unbuffered partition for OTP controller. // -`include "prim_flop_macros.sv" +`include "caliptra_prim_flop_macros.sv" module otp_ctrl_part_unbuf - import otp_ctrl_pkg::*; - import otp_ctrl_reg_pkg::*; - import otp_ctrl_part_pkg::*; + import caliptra_otp_ctrl_pkg::*; + import caliptra_otp_ctrl_reg_pkg::*; + import caliptra_otp_ctrl_part_pkg::*; #( // Partition information. parameter part_info_t Info = PartInfoDefault @@ -49,22 +49,22 @@ module otp_ctrl_part_unbuf output logic [31:0] tlul_rdata_o, // OTP interface output logic otp_req_o, - output prim_otp_pkg::cmd_e otp_cmd_o, + output caliptra_prim_otp_pkg::cmd_e otp_cmd_o, output logic [OtpSizeWidth-1:0] otp_size_o, output logic [OtpIfWidth-1:0] otp_wdata_o, output logic [OtpAddrWidth-1:0] otp_addr_o, input otp_gnt_i, input otp_rvalid_i, input [ScrmblBlockWidth-1:0] otp_rdata_i, - input prim_otp_pkg::err_e otp_err_i + input caliptra_prim_otp_pkg::err_e otp_err_i ); //////////////////////// // Integration Checks // //////////////////////// - import prim_mubi_pkg::*; - import prim_util_pkg::vbits; + import caliptra_prim_mubi_pkg::*; + import caliptra_prim_util_pkg::vbits; localparam logic [OtpByteAddrWidth:0] PartEnd = (OtpByteAddrWidth+1)'(Info.offset) + (OtpByteAddrWidth+1)'(Info.size); @@ -73,9 +73,9 @@ module otp_ctrl_part_unbuf localparam bit [OtpByteAddrWidth-1:0] DigestOffset = DigestOffsetInt[OtpByteAddrWidth-1:0]; // Integration checks for parameters. - `ASSERT_INIT(OffsetMustBeBlockAligned_A, (Info.offset % (ScrmblBlockWidth/8)) == 0) - `ASSERT_INIT(SizeMustBeBlockAligned_A, (Info.size % (ScrmblBlockWidth/8)) == 0) - `ASSERT_INIT(DigestOffsetMustBeRepresentable_A, DigestOffsetInt == int'(DigestOffset)) + `CALIPTRA_ASSERT_INIT(OffsetMustBeBlockAligned_A, (Info.offset % (ScrmblBlockWidth/8)) == 0) + `CALIPTRA_ASSERT_INIT(SizeMustBeBlockAligned_A, (Info.size % (ScrmblBlockWidth/8)) == 0) + `CALIPTRA_ASSERT_INIT(DigestOffsetMustBeRepresentable_A, DigestOffsetInt == int'(DigestOffset)) /////////////////////// // OTP Partition FSM // @@ -145,10 +145,10 @@ module otp_ctrl_part_unbuf // point and does not report any integrity errors if integrity is disabled. otp_err_e otp_err; if (Info.integrity) begin : gen_integrity - assign otp_cmd_o = prim_otp_pkg::Read; + assign otp_cmd_o = caliptra_prim_otp_pkg::Read; assign otp_err = otp_err_e'(otp_err_i); end else begin : gen_no_integrity - assign otp_cmd_o = prim_otp_pkg::ReadRaw; + assign otp_cmd_o = caliptra_prim_otp_pkg::ReadRaw; always_comb begin if (otp_err_e'(otp_err_i) inside {MacroEccCorrError, MacroEccUncorrError}) begin otp_err = NoError; @@ -158,7 +158,7 @@ module otp_ctrl_part_unbuf end end - `ASSERT_KNOWN(FsmStateKnown_A, state_q) + `CALIPTRA_ASSERT_KNOWN(FsmStateKnown_A, state_q) always_comb begin : p_fsm // Default assignments state_d = state_q; @@ -397,7 +397,7 @@ module otp_ctrl_part_unbuf // Aggregate all possible DAI write locks. The partition is also locked when uninitialized. // Note that the locks are redundantly encoded values. part_access_t access_pre; - prim_mubi8_sender #( + caliptra_prim_mubi8_sender #( .AsyncOn(0) ) u_prim_mubi8_sender_write_lock_pre ( .clk_i, @@ -405,7 +405,7 @@ module otp_ctrl_part_unbuf .mubi_i(mubi8_and_lo(init_locked, access_i.write_lock)), .mubi_o(access_pre.write_lock) ); - prim_mubi8_sender #( + caliptra_prim_mubi8_sender #( .AsyncOn(0) ) u_prim_mubi8_sender_read_lock_pre ( .clk_i, @@ -420,7 +420,7 @@ module otp_ctrl_part_unbuf assign digest_locked = (digest_o != '0) ? MuBi8True : MuBi8False; // This prevents the synthesis tool from optimizing the multibit signal. - prim_mubi8_sender #( + caliptra_prim_mubi8_sender #( .AsyncOn(0) ) u_prim_mubi8_sender_write_lock ( .clk_i, @@ -429,7 +429,7 @@ module otp_ctrl_part_unbuf .mubi_o(access_o.write_lock) ); - `ASSERT(DigestWriteLocksPartition_A, digest_o |-> mubi8_test_true_loose(access_o.write_lock)) + `CALIPTRA_ASSERT(DigestWriteLocksPartition_A, digest_o |-> mubi8_test_true_loose(access_o.write_lock)) end else begin : gen_no_digest_write_lock assign access_o.write_lock = access_pre.write_lock; end @@ -440,7 +440,7 @@ module otp_ctrl_part_unbuf assign digest_locked = (digest_o != '0) ? MuBi8True : MuBi8False; // This prevents the synthesis tool from optimizing the multibit signal. - prim_mubi8_sender #( + caliptra_prim_mubi8_sender #( .AsyncOn(0) ) u_prim_mubi8_sender_read_lock ( .clk_i, @@ -449,7 +449,7 @@ module otp_ctrl_part_unbuf .mubi_o(access_o.read_lock) ); - `ASSERT(DigestReadLocksPartition_A, digest_o |-> mubi8_test_true_loose(access_o.read_lock)) + `CALIPTRA_ASSERT(DigestReadLocksPartition_A, digest_o |-> mubi8_test_true_loose(access_o.read_lock)) end else begin : gen_no_digest_read_lock assign access_o.read_lock = access_pre.read_lock; end @@ -458,7 +458,7 @@ module otp_ctrl_part_unbuf // Registers // /////////////// - `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, ResetSt) + `CALIPTRA_PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, ResetSt) always_ff @(posedge clk_i or negedge rst_ni) begin : p_regs if (!rst_ni) begin @@ -479,50 +479,50 @@ module otp_ctrl_part_unbuf //////////////// // Known assertions - `ASSERT_KNOWN(InitDoneKnown_A, init_done_o) - `ASSERT_KNOWN(ErrorKnown_A, error_o) - `ASSERT_KNOWN(AccessKnown_A, access_o) - `ASSERT_KNOWN(DigestKnown_A, digest_o) - `ASSERT_KNOWN(TlulGntKnown_A, tlul_gnt_o) - `ASSERT_KNOWN(TlulRerrorKnown_A, tlul_rerror_o) - `ASSERT_KNOWN(TlulRvalidKnown_A, tlul_rvalid_o) - `ASSERT_KNOWN(TlulRdataKnown_A, tlul_rdata_o) - `ASSERT_KNOWN(OtpReqKnown_A, otp_req_o) - `ASSERT_KNOWN(OtpCmdKnown_A, otp_cmd_o) - `ASSERT_KNOWN(OtpSizeKnown_A, otp_size_o) - `ASSERT_KNOWN(OtpWdataKnown_A, otp_wdata_o) - `ASSERT_KNOWN(OtpAddrKnown_A, otp_addr_o) + `CALIPTRA_ASSERT_KNOWN(InitDoneKnown_A, init_done_o) + `CALIPTRA_ASSERT_KNOWN(ErrorKnown_A, error_o) + `CALIPTRA_ASSERT_KNOWN(AccessKnown_A, access_o) + `CALIPTRA_ASSERT_KNOWN(DigestKnown_A, digest_o) + `CALIPTRA_ASSERT_KNOWN(TlulGntKnown_A, tlul_gnt_o) + `CALIPTRA_ASSERT_KNOWN(TlulRerrorKnown_A, tlul_rerror_o) + `CALIPTRA_ASSERT_KNOWN(TlulRvalidKnown_A, tlul_rvalid_o) + `CALIPTRA_ASSERT_KNOWN(TlulRdataKnown_A, tlul_rdata_o) + `CALIPTRA_ASSERT_KNOWN(OtpReqKnown_A, otp_req_o) + `CALIPTRA_ASSERT_KNOWN(OtpCmdKnown_A, otp_cmd_o) + `CALIPTRA_ASSERT_KNOWN(OtpSizeKnown_A, otp_size_o) + `CALIPTRA_ASSERT_KNOWN(OtpWdataKnown_A, otp_wdata_o) + `CALIPTRA_ASSERT_KNOWN(OtpAddrKnown_A, otp_addr_o) // Uninitialized partitions should always be locked, no matter what. - `ASSERT(InitWriteLocksPartition_A, + `CALIPTRA_ASSERT(InitWriteLocksPartition_A, ~init_done_o |-> mubi8_test_true_loose(access_o.write_lock)) - `ASSERT(InitReadLocksPartition_A, + `CALIPTRA_ASSERT(InitReadLocksPartition_A, ~init_done_o |-> mubi8_test_true_loose(access_o.read_lock)) // Incoming Lock propagation - `ASSERT(WriteLockPropagation_A, + `CALIPTRA_ASSERT(WriteLockPropagation_A, mubi8_test_true_loose(access_i.write_lock) |-> mubi8_test_true_loose(access_o.write_lock)) - `ASSERT(ReadLockPropagation_A, + `CALIPTRA_ASSERT(ReadLockPropagation_A, mubi8_test_true_loose(access_i.read_lock) |-> mubi8_test_true_loose(access_o.read_lock)) // If the partition is read locked, the TL-UL access must error out - `ASSERT(TlulReadOnReadLock_A, + `CALIPTRA_ASSERT(TlulReadOnReadLock_A, tlul_req_i && tlul_gnt_o ##1 mubi8_test_true_loose(access_o.read_lock) |-> tlul_rerror_o > '0 && tlul_rvalid_o) // ECC error in buffer regs. - `ASSERT(EccErrorState_A, + `CALIPTRA_ASSERT(EccErrorState_A, ecc_err |=> state_q == ErrorSt) // OTP error response - `ASSERT(OtpErrorState_A, + `CALIPTRA_ASSERT(OtpErrorState_A, state_q inside {InitWaitSt, ReadWaitSt} && otp_rvalid_i && !(otp_err inside {NoError, MacroEccCorrError}) && !ecc_err |=> diff --git a/src/fuse_ctrl/rtl/otp_ctrl_scrmbl.sv b/src/fuse_ctrl/rtl/otp_ctrl_scrmbl.sv index 9470ff8eb..33cecaff5 100644 --- a/src/fuse_ctrl/rtl/otp_ctrl_scrmbl.sv +++ b/src/fuse_ctrl/rtl/otp_ctrl_scrmbl.sv @@ -68,11 +68,11 @@ // - http://www.lightweightcrypto.org/present/present_ches2007.pdf // -`include "prim_flop_macros.sv" +`include "caliptra_prim_flop_macros.sv" module otp_ctrl_scrmbl - import otp_ctrl_pkg::*; - import otp_ctrl_part_pkg::*; + import caliptra_otp_ctrl_pkg::*; + import caliptra_otp_ctrl_part_pkg::*; ( input clk_i, input rst_ni, @@ -91,7 +91,7 @@ module otp_ctrl_scrmbl output logic fsm_err_o ); - import prim_util_pkg::vbits; + import caliptra_prim_util_pkg::vbits; //////////////////////// // Decryption Key LUT // @@ -103,7 +103,7 @@ module otp_ctrl_scrmbl digest_iv_array_t rnd_cnst_digest_iv_anchor; for (genvar i = 0; i < NumScrmblKeys; i++) begin : gen_anchor_keys - prim_sec_anchor_buf #( + caliptra_prim_sec_anchor_buf #( .Width(ScrmblKeyWidth) ) u_key_anchor_buf ( .in_i(RndCnstKey[i]), @@ -112,14 +112,14 @@ module otp_ctrl_scrmbl end for (genvar i = 0; i < NumDigestSets; i++) begin : gen_anchor_digests - prim_sec_anchor_buf #( + caliptra_prim_sec_anchor_buf #( .Width(ScrmblKeyWidth) ) u_const_anchor_buf ( .in_i(RndCnstDigestConst[i]), .out_o(rnd_cnst_digest_anchor[i]) ); - prim_sec_anchor_buf #( + caliptra_prim_sec_anchor_buf #( .Width(ScrmblBlockWidth) ) u_iv_anchor_buf ( .in_i(RndCnstDigestIV[i]), @@ -135,7 +135,7 @@ module otp_ctrl_scrmbl logic [2**$clog2(NumDigestSets)-1:0][ScrmblBlockWidth-1:0] digest_iv_lut; // This pre-calculates the inverse scrambling keys at elab time. - `ASSERT_INIT(NumMaxPresentRounds_A, NumPresentRounds <= 31) + `CALIPTRA_ASSERT_INIT(NumMaxPresentRounds_A, NumPresentRounds <= 31) always_comb begin : p_luts otp_enc_key_lut = '0; @@ -149,7 +149,7 @@ module otp_ctrl_scrmbl // Due to the PRESENT key schedule, we have to step the key schedule function by // NumPresentRounds forwards to get the decryption key. otp_dec_key_lut[k] = - prim_cipher_pkg::present_get_dec_key128(rnd_cnst_key_anchor[k], NumRounds); + caliptra_prim_cipher_pkg::present_get_dec_key128(rnd_cnst_key_anchor[k], NumRounds); end for (int k = 0; k < NumDigestSets; k++) begin @@ -157,10 +157,10 @@ module otp_ctrl_scrmbl digest_iv_lut[k] = rnd_cnst_digest_iv_anchor[k]; end end - `ASSERT_KNOWN(EncKeyLutKnown_A, otp_enc_key_lut) - `ASSERT_KNOWN(DecKeyLutKnown_A, otp_dec_key_lut) - `ASSERT_KNOWN(DigestConstLutKnown_A, digest_const_lut) - `ASSERT_KNOWN(DigestIvLutKnown_A, digest_iv_lut) + `CALIPTRA_ASSERT_KNOWN(EncKeyLutKnown_A, otp_enc_key_lut) + `CALIPTRA_ASSERT_KNOWN(DecKeyLutKnown_A, otp_dec_key_lut) + `CALIPTRA_ASSERT_KNOWN(DigestConstLutKnown_A, digest_const_lut) + `CALIPTRA_ASSERT_KNOWN(DigestIvLutKnown_A, digest_iv_lut) ////////////// // Datapath // @@ -202,9 +202,9 @@ module otp_ctrl_scrmbl assign otp_digest_iv_mux = digest_iv_lut[DigestSetSelWidth'(sel_i)]; // Make sure we always select a valid key / digest constant. - `ASSERT(CheckNumEncKeys_A, key_state_sel == SelEncKeyInit |-> sel_i < NumScrmblKeys) - `ASSERT(CheckNumDecKeys_A, key_state_sel == SelDecKeyInit |-> sel_i < NumScrmblKeys) - `ASSERT(CheckNumDigest1_A, key_state_sel == SelDigestConst |-> sel_i < NumDigestSets) + `CALIPTRA_ASSERT(CheckNumEncKeys_A, key_state_sel == SelEncKeyInit |-> sel_i < NumScrmblKeys) + `CALIPTRA_ASSERT(CheckNumDecKeys_A, key_state_sel == SelDecKeyInit |-> sel_i < NumScrmblKeys) + `CALIPTRA_ASSERT(CheckNumDigest1_A, key_state_sel == SelDigestConst |-> sel_i < NumDigestSets) assign data_state_d = (data_state_sel == SelEncDataOut) ? enc_data_out : (data_state_sel == SelDecDataOut) ? dec_data_out : @@ -281,7 +281,7 @@ module otp_ctrl_scrmbl assign valid_o = valid_q; // SEC_CM: SCRMBL.CTR.REDUN - prim_count #( + caliptra_prim_count #( .Width(CntWidth) ) u_prim_count ( .clk_i, @@ -441,7 +441,7 @@ module otp_ctrl_scrmbl // PRESENT DEC/ENC Modules // ///////////////////////////// - prim_present #( + caliptra_prim_present #( .KeyWidth(128), .NumRounds(NumPresentRounds), .NumPhysRounds(1) @@ -454,7 +454,7 @@ module otp_ctrl_scrmbl .idx_o ( enc_idx_out ) ); - prim_present #( + caliptra_prim_present #( .KeyWidth(128), // We are using an iterative full-round implementation here. .NumRounds(NumPresentRounds), @@ -473,7 +473,7 @@ module otp_ctrl_scrmbl // Registers // /////////////// - `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, IdleSt) + `CALIPTRA_PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, IdleSt) always_ff @(posedge clk_i or negedge rst_ni) begin : p_regs if (!rst_ni) begin diff --git a/src/fuse_ctrl/rtl/otp_ctrl_token_const.sv b/src/fuse_ctrl/rtl/otp_ctrl_token_const.sv index 35cdc23dd..1221ad26c 100644 --- a/src/fuse_ctrl/rtl/otp_ctrl_token_const.sv +++ b/src/fuse_ctrl/rtl/otp_ctrl_token_const.sv @@ -6,14 +6,18 @@ // This implementation relies on constant propagation to precompute these constants from the // random netlist constants at compile time, and hence does not contain any "real" logic. -module otp_ctrl_token_const import otp_ctrl_pkg::*; #( - // Compile time random constants, to be overriden by topgen. - parameter digest_const_array_t RndCnstDigestConst = RndCnstDigestConstDefault, - parameter digest_iv_array_t RndCnstDigestIV = RndCnstDigestIVDefault, - parameter lc_ctrl_pkg::lc_token_t RndCnstRawUnlockToken = RndCnstRawUnlockTokenDefault +module otp_ctrl_token_const + import caliptra_otp_ctrl_pkg::*; + import caliptra_otp_ctrl_part_pkg::*; + import lc_ctrl_pkg::*; + #( + // Compile time random constants, to be overriden by topgen. + parameter digest_const_array_t RndCnstDigestConst = RndCnstDigestConstDefault, + parameter digest_iv_array_t RndCnstDigestIV = RndCnstDigestIVDefault, + parameter lc_ctrl_state_pkg::lc_token_t RndCnstRawUnlockToken = RndCnstRawUnlockTokenDefault ) ( - output lc_ctrl_pkg::lc_token_t all_zero_token_hashed_o, - output lc_ctrl_pkg::lc_token_t raw_unlock_token_hashed_o + output lc_ctrl_state_pkg::lc_token_t all_zero_token_hashed_o, + output lc_ctrl_state_pkg::lc_token_t raw_unlock_token_hashed_o ); localparam int NumHashes = 2; @@ -41,7 +45,7 @@ module otp_ctrl_token_const import otp_ctrl_pkg::*; #( // This relies on constant propagation to // statically precompute the hashed token values. - prim_present #( + caliptra_prim_present #( .KeyWidth(128), .NumRounds(NumPresentRounds) ) u_prim_present_enc_0 ( diff --git a/src/fuse_ctrl/rtl/otp_ctrl_top.sv b/src/fuse_ctrl/rtl/otp_ctrl_top.sv index c12b9d529..b81f97352 100644 --- a/src/fuse_ctrl/rtl/otp_ctrl_top.sv +++ b/src/fuse_ctrl/rtl/otp_ctrl_top.sv @@ -13,10 +13,24 @@ // limitations under the License. // +`include "caliptra_prim_assert.sv" module otp_ctrl_top import axi_pkg::*; - ( + import caliptra_otp_ctrl_pkg::*; + import caliptra_otp_ctrl_reg_pkg::*; + import caliptra_otp_ctrl_part_pkg::*; + #( + // Enable asynchronous transitions on alerts. + parameter logic [NumAlerts-1:0] AlertAsyncOn = {NumAlerts{1'b1}}, + // Compile time random constants, to be overriden by topgen. + parameter lfsr_seed_t RndCnstLfsrSeed = RndCnstLfsrSeedDefault, + parameter lfsr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + //parameter scrmbl_key_init_t RndCnstScrmblKeyInit = RndCnstScrmblKeyInitDefault, + // Hexfile file to initialize the OTP macro. + // Note that the hexdump needs to account for ECC. + parameter MemInitFile = "" + )( input clk_i, input rst_ni, @@ -28,6 +42,15 @@ module otp_ctrl_top axi_if.w_sub s_prim_axi_w_if, axi_if.r_sub s_prim_axi_r_if, + //AXI Secret Registers Interface + axi_if.r_sub s_secreg_axi_r_if, + + // EDN clock and interface + logic clk_edn_i, + logic rst_edn_ni, + output edn_pkg::edn_req_t edn_o, + input edn_pkg::edn_rsp_t edn_i, + // Interrupt Requests output logic intr_otp_operation_done_o, output logic intr_otp_error_o, @@ -60,14 +83,14 @@ module otp_ctrl_top // OTP broadcast outputs // SEC_CM: TOKEN_VALID.CTRL.MUBI output otp_lc_data_t otp_lc_data_o, - output otp_keymgr_key_t otp_keymgr_key_o, + //output otp_keymgr_key_t otp_keymgr_key_o, // Scrambling key requests - input flash_otp_key_req_t flash_otp_key_i, - output flash_otp_key_rsp_t flash_otp_key_o, - input sram_otp_key_req_t [NumSramKeyReqSlots-1:0] sram_otp_key_i, - output sram_otp_key_rsp_t [NumSramKeyReqSlots-1:0] sram_otp_key_o, - input otbn_otp_key_req_t otbn_otp_key_i, - output otbn_otp_key_rsp_t otbn_otp_key_o, + //input flash_otp_key_req_t flash_otp_key_i, + //output flash_otp_key_rsp_t flash_otp_key_o, + //input sram_otp_key_req_t [NumSramKeyReqSlots-1:0] sram_otp_key_i, + //output sram_otp_key_rsp_t [NumSramKeyReqSlots-1:0] sram_otp_key_o, + //input otbn_otp_key_req_t otbn_otp_key_i, + //output otbn_otp_key_rsp_t otbn_otp_key_o, // Hardware config bits output otp_broadcast_t otp_broadcast_o, // External voltage for OTP @@ -75,110 +98,78 @@ module otp_ctrl_top // Scan input scan_en_i, input scan_rst_ni, - input prim_mubi_pkg::mubi4_t scanmode_i, + input caliptra_prim_mubi_pkg::mubi4_t scanmode_i, // Test-related GPIO output output logic [OtpTestVectWidth-1:0] cio_test_o, output logic [OtpTestVectWidth-1:0] cio_test_en_o ); - logic core_dv; - logic [AW-1:0] core_addr; - logic core_write; - logic [UW-1:0] core_user; - logic [IW-1:0] core_id; - logic [DW-1:0] core_wdata; - logic [BC-1:0] core_wstrb; - logic [DW-1:0] core_rdata; - logic core_last; - logic core_hld; - logic core_err; - - logic prim_dv; - logic [AW-1:0] prim_addr; - logic prim_write; - logic [UW-1:0] prim_user; - logic [IW-1:0] prim_id; - logic [DW-1:0] prim_wdata; - logic [BC-1:0] prim_wstrb; - logic [DW-1:0] prim_rdata; - logic prim_last; - logic prim_hld; - logic prim_err; - - - // Core AXI sub instance - axi_sub core_axi_sub #( - - ) ( + // AXI2TL/FC core interface signals + tlul_pkg::tl_h2d_t core_tl_i; + tlul_pkg::tl_d2h_t core_tl_o; + + // AXI2TL/FC prim interface signals + tlul_pkg::tl_h2d_t prim_tl_i; + tlul_pkg::tl_d2h_t prim_tl_o; + + // secret wires to secret registers + obfuscated_uds_seed_t obfuscated_uds_seed; + field_entropy_t field_entropy; + pk_hash_t pk_hash; + + // Core AXI2TLUL instance + axi2tlul #( + .AW (32), + .DW (32), + .UW (32), + .IW (1 ) + ) u_core_axi2tlul ( .clk (clk_i), - .rst_n (rst_ni), + .rst_n (rst_ni), .s_axi_w_if (s_core_axi_w_if), .s_axi_r_if (s_core_axi_r_if), - .dv (core_dv), - .addr (core_addr), - .write (core_user), - .id (core_id), - .wdata (core_wdata), - .rdata (core_rdata), - .last (core_last), - .hld (core_hld), - .err (core_err) + .tl_o (core_tl_i), + .tl_i (core_tl_o) ); - // Prim AXI sub instance - axi_sub prim_axi_sub #( - - ) ( + // Prim AXI2TLUL instance + axi2tlul #( + .AW (32), + .DW (32), + .UW (32), + .IW (1 ) + ) u_prim_axi2tlul ( .clk (clk_i), .rst_n (rst_ni), .s_axi_w_if (s_prim_axi_w_if), .s_axi_r_if (s_prim_axi_r_if), - .dv (prim_dv), - .addr (prim_addr), - .write (prim_user), - .id (prim_id), - .wdata (prim_wdata), - .rdata (prim_rdata), - .last (prim_last), - .hld (prim_hld), - .err (prim_err) + .tl_o (prim_tl_i), + .tl_i (prim_tl_o) ); // OTP Ctrl instance - otp_ctrl otp_ctrl #( - - ) ( + otp_ctrl #( + .AlertAsyncOn (AlertAsyncOn), + .RndCnstLfsrSeed (RndCnstLfsrSeed), + .RndCnstLfsrPerm (RndCnstLfsrPerm), + .MemInitFile (MemInitFile) + ) u_otp_ctrl + ( .clk_i, .rst_ni, .clk_edn_i, .rst_edn_ni, .edn_o, .edn_i, - .core_dv (core_dv), - .core_addr (core_addr), - .core_write (core_write), - .core_wstrb (core_wstrb), - .core_id (core_id), - .core_wdata (core_wdata), - .core_rdata (core_rdata), - .core_last (core_last), - .core_hld (core_hld), - .core_err (core_err), - .prim_dv (prim_dv), - .prim_addr (prim_addr), - .prim_write (prim_write), - .prim_wstrb (prim_wstrb), - .prim_id (prim_id), - .prim_wdata (prim_wdata), - .prim_rdata (prim_rdata), - .prim_last (prim_last), - .prim_hld (prim_hld), - .prim_err (prim_err), + .core_tl_i, + .core_tl_o, + .prim_tl_i, + .prim_tl_o, .intr_otp_operation_done_o, .intr_otp_error_o, .alert_rx_i, - .alert_rx_o, + .alert_tx_o, .obs_ctrl_i, .otp_obs_o, .otp_ast_pwr_seq_o, @@ -196,13 +187,9 @@ module otp_ctrl_top .lc_escalate_en_i, .lc_check_byp_en_i, .otp_lc_data_o, - .otp_keymgr_key_o, - .flash_otp_key_i (), - .flash_otp_key_o (), - .sram_otp_key_i (), - .sram_otp_key_o (), - .otbn_otp_key_i (), - .otbn_otp_key_o (), + .obfuscated_uds_seed_o (obfuscated_uds_seed), + .field_entropy_o (field_entropy), + .pk_hash_o (pk_hash), .otp_broadcast_o, .otp_ext_voltage_h_io, .scan_en_i, @@ -212,4 +199,7 @@ module otp_ctrl_top .cio_test_en_o ); + //TODO: Secret registers instantiation + + endmodule diff --git a/src/fuse_ctrl/stimulus/tests/directed/fuse_ctrl_sign_of_life_test.yml b/src/fuse_ctrl/stimulus/tests/directed/fuse_ctrl_sign_of_life_test.yml new file mode 100644 index 000000000..1f1ca995d --- /dev/null +++ b/src/fuse_ctrl/stimulus/tests/directed/fuse_ctrl_sign_of_life_test.yml @@ -0,0 +1,17 @@ +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +--- +testname: fuse_ctrl_sign_of_life_test +seed: 1 \ No newline at end of file diff --git a/src/fuse_ctrl/tb/otp_ctrl_if.sv b/src/fuse_ctrl/tb/otp_ctrl_if.sv new file mode 100755 index 000000000..febedfebe --- /dev/null +++ b/src/fuse_ctrl/tb/otp_ctrl_if.sv @@ -0,0 +1,327 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// DO NOT EDIT THIS FILE DIRECTLY. +// It has been generated with ./util/design/gen-otp-mmap.py + +// This interface collect the broadcast output data from OTP, +// and drive input requests coming into OTP. +`define ECC_REG_PATH gen_ecc_reg.u_otp_ctrl_ecc_reg.gen_ecc_dec[0].u_prim_secded_inv_72_64_dec + +// This only supports buffered partitions. +`define BUF_PART_OTP_CMD_PATH(i) \ + tb.dut.gen_partitions[``i``].gen_buffered.u_part_buf.otp_cmd_o + +`define LC_PART_OTP_CMD_PATH \ + tb.dut.gen_partitions[LifeCycleIdx].gen_lifecycle.u_part_buf.otp_cmd_o + +`define FORCE_OTP_PART_LOCK_WITH_RAND_NON_MUBI_VAL(i) \ + if (forced_part_access_sel[``i``].read_lock) begin \ + force tb.dut.part_access[``i``].read_lock = get_rand_mubi8_val(.t_weight(0), .f_weight(0)); \ + force tb.dut.part_access_dai[``i``].read_lock = get_rand_mubi8_val(.t_weight(0), .f_weight(0)); \ + end \ + if (forced_part_access_sel[``i``].write_lock) begin \ + force tb.dut.part_access[``i``].write_lock = get_rand_mubi8_val(.t_weight(0), .f_weight(0)); \ + force tb.dut.part_access_dai[``i``].write_lock = get_rand_mubi8_val(.t_weight(0), .f_weight(0)); \ + end + +`ifndef PRIM_GENERIC_OTP_PATH + `define PRIM_GENERIC_OTP_PATH\ + tb.dut.u_otp +`endif + +`ifndef PRIM_GENERIC_OTP_CMD_I_PATH + `define PRIM_GENERIC_OTP_CMD_I_PATH \ + `PRIM_GENERIC_OTP_PATH.gen_generic.u_impl_generic.cmd_i +`endif + +interface otp_ctrl_if(input clk_i, input rst_ni); + import uvm_pkg::*; + import otp_ctrl_env_pkg::*; + import otp_ctrl_pkg::*; + import otp_ctrl_reg_pkg::*; + import otp_ctrl_part_pkg::*; + import cip_base_pkg::*; + + // Output from DUT + otp_broadcast_t otp_broadcast_o; + otp_keymgr_key_t keymgr_key_o; + otp_lc_data_t lc_data_o; + logic pwr_otp_done_o, pwr_otp_idle_o; + + // Inputs to DUT + logic pwr_otp_init_i, scan_en_i, scan_rst_ni, ext_voltage_h_io; + lc_ctrl_pkg::lc_tx_t lc_dft_en_i, lc_escalate_en_i, lc_check_byp_en_i, + lc_creator_seed_sw_rw_en_i, lc_owner_seed_sw_rw_en_i, + lc_seed_hw_rd_en_i; + prim_mubi_pkg::mubi4_t scanmode_i; + otp_ast_rsp_t otp_ast_pwr_seq_h_i; + ast_pkg::ast_obs_ctrl_t obs_ctrl_i; + + // Unused in prim_generic_otp memory. + logic [OtpTestCtrlWidth-1:0] otp_vendor_test_ctrl_i; + logic [OtpTestStatusWidth-1:0] otp_vendor_test_status_o; + logic [OtpTestVectWidth-1:0] cio_test_o; + logic [OtpTestVectWidth-1:0] cio_test_en_o; + + // Connect with lc_prog push_pull interface. + logic lc_prog_req, lc_prog_err; + logic lc_prog_err_dly1, lc_prog_no_sta_check; + + // Connect push_pull interfaces ack signals for assertion checks. + logic otbn_ack, lc_prog_ack; + logic [1:0] flash_acks; + logic [NumSramKeyReqSlots-1:0] sram_acks; + + // Variables for internal interface logic. + // `lc_escalate_en` is async, take two clock cycles to synchronize. + lc_ctrl_pkg::lc_tx_t lc_esc_dly1, lc_esc_dly2; + + // Variable for scoreboard. + // For `lc_escalate_en`, any value that is not `Off` is a `On`. + bit lc_esc_on; + + // Probe design signal for alert request. + logic alert_reqs; + + // Usually the `lc_check_byp_en` will be automatically set to `On` when LC program request is + // issued, and stays `On` until reset is issued. + // Set this variable to 0 after a LC program request might cause otp checks to fail. + bit lc_check_byp_en = 1; + + // Internal veriable to track which sw partitions have ECC reg error. + bit [NumPartUnbuf-1:0] force_sw_parts_ecc_reg; + + // DUT configuration object + otp_ctrl_ast_inputs_cfg dut_cfg; + + // for DV macros ID + string msg_id = "otp_ctrl_if"; + + // Lc_err could trigger during LC program, so check intr and status after lc_req is finished. + // Lc_err takes one clock cycle to propogate to intr signal. So avoid intr check if it happens + // during the transition. + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + lc_prog_err_dly1 <= 0; + lc_esc_dly1 <= lc_ctrl_pkg::Off; + lc_esc_dly2 <= lc_ctrl_pkg::Off; + lc_check_byp_en_i <= get_rand_lc_tx_val(); + lc_esc_on <= 0; + end else begin + lc_prog_err_dly1 <= lc_prog_err; + lc_esc_dly1 <= lc_escalate_en_i; + lc_esc_dly2 <= lc_esc_dly1; + if (lc_prog_req) begin + lc_check_byp_en_i <= lc_check_byp_en ? lc_ctrl_pkg::On : lc_ctrl_pkg::Off; + end + if (lc_esc_dly2 != lc_ctrl_pkg::Off && !lc_esc_on) begin + lc_esc_on <= 1; + end + end + end + + assign lc_prog_no_sta_check = lc_prog_err | lc_prog_err_dly1 | lc_prog_req | lc_esc_on; + + function automatic void drive_pwr_otp_init(logic val); + pwr_otp_init_i = val; + endfunction + + function automatic void drive_ext_voltage_h_io(logic val); + ext_voltage_h_io = val; + endfunction + + function automatic void drive_lc_creator_seed_sw_rw_en(lc_ctrl_pkg::lc_tx_t val); + lc_creator_seed_sw_rw_en_i = val; + endfunction + + function automatic void drive_lc_owner_seed_sw_rw_en(lc_ctrl_pkg::lc_tx_t val); + lc_owner_seed_sw_rw_en_i = val; + endfunction + + function automatic void drive_lc_dft_en(lc_ctrl_pkg::lc_tx_t val); + lc_dft_en_i = val; + endfunction + + function automatic void drive_lc_escalate_en(lc_ctrl_pkg::lc_tx_t val); + lc_escalate_en_i = val; + endfunction + + function automatic void drive_lc_seed_hw_rd_en(lc_ctrl_pkg::lc_tx_t val); + lc_seed_hw_rd_en_i = val; + endfunction + + function automatic bit under_error_states(); + return lc_esc_on | alert_reqs; + endfunction + + // SW partitions do not have any internal checks. + // Here we force internal ECC check to fail. + task automatic force_sw_check_fail( + bit[NumPartUnbuf-1:0] fail_idx = $urandom_range(1, (1'b1 << NumPartUnbuf) - 1)); + @(posedge clk_i); + if (fail_idx[VendorTestIdx]) begin + force tb.dut.gen_partitions[VendorTestIdx].gen_unbuffered. + u_part_unbuf.`ECC_REG_PATH.data_i[0] = 1; + force_sw_parts_ecc_reg[VendorTestIdx] = 1; + end + if (fail_idx[NonSecretFusesIdx]) begin + force tb.dut.gen_partitions[NonSecretFusesIdx].gen_unbuffered. + u_part_unbuf.`ECC_REG_PATH.data_i[0] = 1; + force_sw_parts_ecc_reg[NonSecretFusesIdx] = 1; + end + endtask + + task automatic release_sw_check_fail(); + @(posedge clk_i); + if (force_sw_parts_ecc_reg[VendorTestIdx]) begin + release tb.dut.gen_partitions[VendorTestIdx].gen_unbuffered. + u_part_unbuf.`ECC_REG_PATH.data_i[0]; + force_sw_parts_ecc_reg[VendorTestIdx] = 0; + end + if (force_sw_parts_ecc_reg[NonSecretFusesIdx]) begin + release tb.dut.gen_partitions[NonSecretFusesIdx].gen_unbuffered. + u_part_unbuf.`ECC_REG_PATH.data_i[0]; + force_sw_parts_ecc_reg[NonSecretFusesIdx] = 0; + end + endtask + + // Force prim_generic_otp input cmd_i to a invalid value. + task automatic force_invalid_otp_cmd_i(); + @(posedge clk_i); + force `PRIM_GENERIC_OTP_CMD_I_PATH = prim_otp_pkg::cmd_e'(2'b10); + endtask + + task automatic release_invalid_otp_cmd_i(); + @(posedge clk_i); + release `PRIM_GENERIC_OTP_CMD_I_PATH; + endtask + + // Force part_buf partitions output otp_cmd_o to a invalid value. + task automatic force_invalid_part_cmd_o(int part_idx); + @(posedge clk_i); + case (part_idx) + Secret0Idx: force `BUF_PART_OTP_CMD_PATH(Secret0Idx) = prim_otp_pkg::cmd_e'(2'b10); + Secret1Idx: force `BUF_PART_OTP_CMD_PATH(Secret1Idx) = prim_otp_pkg::cmd_e'(2'b10); + LifeCycleIdx: force `LC_PART_OTP_CMD_PATH = prim_otp_pkg::cmd_e'(2'b10); + default: begin + `uvm_fatal("otp_ctrl_if", + $sformatf("force invalid otp_cmd_o only supports buffered partitions: %0d", part_idx)) + end + endcase + endtask + + task automatic release_invalid_part_cmd_o(int part_idx); + @(posedge clk_i); + case (part_idx) + Secret0Idx: release `BUF_PART_OTP_CMD_PATH(Secret0Idx); + Secret1Idx: release `BUF_PART_OTP_CMD_PATH(Secret1Idx); + LifeCycleIdx: release `LC_PART_OTP_CMD_PATH; + default: begin + `uvm_fatal("otp_ctrl_if", + $sformatf("release invalid otp_cmd_o only supports buffered partitions: %0d", + part_idx)) + end + endcase + endtask + + // This task forces otp_ctrl's internal mubi signals to values that are not mubi::true or mubi:: + // false. Then scb will check if design treats these values as locking the partition access. + task automatic force_part_access_mubi(otp_part_access_lock_t forced_part_access_sel[NumPart-1]); + @(posedge clk_i); + `FORCE_OTP_PART_LOCK_WITH_RAND_NON_MUBI_VAL(VendorTestIdx) + `FORCE_OTP_PART_LOCK_WITH_RAND_NON_MUBI_VAL(NonSecretFusesIdx) + `FORCE_OTP_PART_LOCK_WITH_RAND_NON_MUBI_VAL(Secret0Idx) + `FORCE_OTP_PART_LOCK_WITH_RAND_NON_MUBI_VAL(Secret1Idx) + endtask + + task automatic release_part_access_mubi(); + @(posedge clk_i); + release tb.dut.part_access; + release tb.dut.part_access_dai; + endtask + + // Connectivity assertions for test related I/Os. + `ASSERT(LcOtpTestStatusO_A, otp_vendor_test_status_o == `PRIM_GENERIC_OTP_PATH.test_status_o) + `ASSERT(LcOtpTestCtrlI_A, otp_vendor_test_ctrl_i == `PRIM_GENERIC_OTP_PATH.test_ctrl_i) + + `ASSERT(CioTestOWithDftOn_A, lc_dft_en_i == lc_ctrl_pkg::On |-> + ##[2:3] cio_test_o == `PRIM_GENERIC_OTP_PATH.test_vect_o) + `ASSERT(CioTestOWithDftOff_A, lc_dft_en_i != lc_ctrl_pkg::On |-> ##[2:3] cio_test_o == 0) + `ASSERT(CioTestEnOWithDftOn_A, lc_dft_en_i == lc_ctrl_pkg::On |-> ##[2:3] cio_test_en_o == '1) + `ASSERT(CioTestEnOWithDftOff_A, lc_dft_en_i != lc_ctrl_pkg::On |-> ##[2:3] cio_test_en_o == 0) + + + `define OTP_ASSERT_WO_LC_ESC(NAME, SEQ) \ + `ASSERT(NAME, SEQ, clk_i, !rst_ni || lc_esc_on || alert_reqs) + + // If pwr_otp_idle is set only if pwr_otp init is done + `OTP_ASSERT_WO_LC_ESC(OtpPwrDoneWhenIdle_A, pwr_otp_idle_o |-> pwr_otp_done_o) + + // otp_broadcast_o is valid only when otp init is done + `OTP_ASSERT_WO_LC_ESC(OtpHwCfgValidOn_A, pwr_otp_done_o |-> + otp_broadcast_o.valid == lc_ctrl_pkg::On) + // If otp_broadcast is Off, then hw partition is not finished calculation, + // then otp init is not done + `OTP_ASSERT_WO_LC_ESC(OtpHwCfgValidOff_A, otp_broadcast_o.valid == lc_ctrl_pkg::Off |-> + pwr_otp_done_o == 0) + // Once OTP init is done, otp_broadcast_o output value stays stable until next power cycle + `OTP_ASSERT_WO_LC_ESC(OtpHwCfgStable_A, otp_broadcast_o.valid == lc_ctrl_pkg::On |=> + $stable(otp_broadcast_o)) + + // Otp_keymgr valid is related to part_digest, should not be changed after otp_pwr_init + `OTP_ASSERT_WO_LC_ESC(OtpKeymgrValidStable0_A, pwr_otp_done_o |-> + $stable(keymgr_key_o.creator_root_key_share0_valid)) + `OTP_ASSERT_WO_LC_ESC(OtpKeymgrValidStable1_A, pwr_otp_done_o |-> + $stable(keymgr_key_o.creator_root_key_share1_valid)) + `OTP_ASSERT_WO_LC_ESC(OtpKeymgrValidStable2_A, pwr_otp_done_o |-> + $stable(keymgr_key_o.creator_seed_valid)) + `OTP_ASSERT_WO_LC_ESC(OtpKeymgrValidStable3_A, pwr_otp_done_o |-> + $stable(keymgr_key_o.owner_seed_valid)) + + // During lc_prog_req, either otp_idle will be reset or lc_error is set + `OTP_ASSERT_WO_LC_ESC(LcProgReq_A, $rose(lc_prog_req) |=> + (pwr_otp_idle_o == 0 || $rose(lc_prog_err)) within lc_prog_req[*1:$]) + + // During fatal alert, check if otp outputs revert back to default value. + // Wait three clock cycles until error propogates to each FSM states and regs. + `define OTP_FATAL_ERR_ASSERT(NAME, SEQ) \ + `ASSERT(FatalErr``NAME``, alert_reqs |-> ##3 SEQ) + + `OTP_FATAL_ERR_ASSERT(LcDataValid_A, lc_data_o.valid == 0 && lc_data_o.error == 1) + `OTP_FATAL_ERR_ASSERT(LcDataState_A, lc_data_o.state == + PartInvDefault[LcStateOffset*8+:LcStateSize*8]) + `OTP_FATAL_ERR_ASSERT(LcDataCount_A, lc_data_o.count == + PartInvDefault[LcTransitionCntOffset*8+:LcTransitionCntSize*8]) + `OTP_FATAL_ERR_ASSERT(LcDataTestUnlockToken_A, lc_data_o.test_unlock_token == + PartInvDefault[TestUnlockTokenOffset*8+:TestUnlockTokenSize*8]) + `OTP_FATAL_ERR_ASSERT(LcDataTestExitToken_A, lc_data_o.test_exit_token == + PartInvDefault[TestExitTokenOffset*8+:TestExitTokenSize*8]) + `OTP_FATAL_ERR_ASSERT(LcDataRmaToken_A, lc_data_o.rma_token == + PartInvDefault[RmaTokenOffset*8+:RmaTokenSize*8]) + + `OTP_FATAL_ERR_ASSERT(KeymgrKeyData_A, keymgr_key_o.creator_root_key_share0 == + PartInvDefault[CreatorRootKeyShare0Offset*8+:CreatorRootKeyShare0Size*8] && + keymgr_key_o.creator_root_key_share1 == + PartInvDefault[CreatorRootKeyShare1Offset*8+:CreatorRootKeyShare1Size*8]) + + `OTP_FATAL_ERR_ASSERT(HwCfgOValid_A, otp_broadcast_o.valid == lc_ctrl_pkg::Off) + `OTP_FATAL_ERR_ASSERT(HwCfg0OData_A, otp_broadcast_o.hw_cfg0_data == + PartInvDefault[HwCfg0Offset*8+:HwCfg0Size*8]) + `OTP_FATAL_ERR_ASSERT(HwCfg1OData_A, otp_broadcast_o.hw_cfg1_data == + PartInvDefault[HwCfg1Offset*8+:HwCfg1Size*8]) + + `OTP_FATAL_ERR_ASSERT(LcProgAck_A, lc_prog_ack == 0) + `OTP_FATAL_ERR_ASSERT(FlashAcks_A, flash_acks == 0) + `OTP_FATAL_ERR_ASSERT(SramAcks_A, sram_acks == 0) + `OTP_FATAL_ERR_ASSERT(OtbnAck_A, otbn_ack == 0) + + `undef OTP_ASSERT_WO_LC_ESC + `undef OTP_FATAL_ERR_ASSERT + `undef ECC_REG_PATH + `undef BUF_PART_OTP_CMD_PATH + `undef LC_PART_OTP_CMD_PATH + `undef PRIM_GENERIC_OTP_PATH + `undef PRIM_GENERIC_OTP_CMD_I_PATH + `undef FORCE_OTP_PART_LOCK_WITH_RAND_NON_MUBI_VAL +endinterface diff --git a/src/fuse_ctrl/tb/otp_ctrl_top_tb.sv b/src/fuse_ctrl/tb/otp_ctrl_top_tb.sv new file mode 100644 index 000000000..bf7c11ac7 --- /dev/null +++ b/src/fuse_ctrl/tb/otp_ctrl_top_tb.sv @@ -0,0 +1,589 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + + +// ------------------------------------------------------------------------- +// FUSE CTRL Testbench for basic/initial testing +// ------------------------------------------------------------------------- + +module otp_ctrl_top_tb + import axi_pkg::*; + import caliptra_otp_ctrl_pkg::*; + import caliptra_otp_ctrl_reg_pkg::*; + import caliptra_otp_ctrl_part_pkg::*; + import otp_ctrl_top_tb_pkg::*; + ( + `ifdef VERILATOR + input bit clk_tb + `endif + ); + + //---------------------------------------------------------------- + // Internal constant and parameter definitions. + //---------------------------------------------------------------- + parameter DEBUG = 0; + + parameter CLK_HALF_PERIOD = 2; + + parameter MemInitFile = "/home/ws/caliptra/anjpar/ws1/chipsalliance/caliptra-rtl/src/fuse_ctrl/data/otp-img.2048.vmem"; + + //---------------------------------------------------------------- + // Register and Wire declarations. + //---------------------------------------------------------------- + reg [31 : 0] cycle_ctr; + reg [31 : 0] error_ctr; + reg [31 : 0] tc_ctr; + + `ifndef VERILATOR + reg clk_tb; + `endif + reg reset_n_tb; + + logic edn_clk; + logic edn_rst_n; + + edn_pkg::edn_req_t edn_o; + edn_pkg::edn_rsp_t edn_i; + + logic intr_otp_operation_done; + logic intr_otp_error; + + caliptra_prim_alert_pkg::alert_rx_t [NumAlerts-1:0] alert_rx_i; + caliptra_prim_alert_pkg::alert_tx_t [NumAlerts-1:0] alert_tx_o; + // Observability to AST + ast_pkg::ast_obs_ctrl_t obs_ctrl_i; + logic [7:0] otp_obs_o; + // Macro-specific power sequencing signals to/from AST. + otp_ast_req_t otp_ast_pwr_seq_o; + otp_ast_rsp_t otp_ast_pwr_seq_h_i; + // Power manager interface (inputs are synced to OTP clock domain) + //pwrmgr_pkg::pwr_otp_req_t pwr_otp_i; + logic pwr_otp_init_i; + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o; + // Macro-specific test registers going to lifecycle TAP + lc_otp_vendor_test_req_t lc_otp_vendor_test_i; + lc_otp_vendor_test_rsp_t lc_otp_vendor_test_o; + // Lifecycle transition command interface + lc_otp_program_req_t lc_otp_program_i; + lc_otp_program_rsp_t lc_otp_program_o; + // Lifecycle broadcast inputs + // SEC_CM: LC_CTRL.INTERSIG.MUBI + + lc_ctrl_pkg::lc_tx_t lc_creator_seed_sw_rw_en_i; + lc_ctrl_pkg::lc_tx_t lc_owner_seed_sw_rw_en_i; + lc_ctrl_pkg::lc_tx_t lc_seed_hw_rd_en_i; + lc_ctrl_pkg::lc_tx_t lc_dft_en_i; + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i; + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i; + + otp_lc_data_t otp_lc_data_o; + otp_broadcast_t otp_broadcast_o; + wire otp_ext_voltage_h_io; + logic scan_en_i; + logic scan_rst_ni; + caliptra_prim_mubi_pkg::mubi4_t scanmode_i; + logic [OtpTestVectWidth-1:0] cio_test_o; + logic [OtpTestVectWidth-1:0] cio_test_en_o; + + localparam ADDR_WIDTH = 32; + localparam DATA_WIDTH = 32; + localparam USER_WIDTH = 32; + localparam ID_WIDTH = 1; + + // Register offsets for core interface + parameter int CoreAw = 13; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_INTR_STATE_OFFSET = 13'h 0; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_INTR_ENABLE_OFFSET = 13'h 4; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_INTR_TEST_OFFSET = 13'h 8; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ALERT_TEST_OFFSET = 13'h c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_STATUS_OFFSET = 13'h 10; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ERR_CODE_0_OFFSET = 13'h 14; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ERR_CODE_1_OFFSET = 13'h 18; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ERR_CODE_2_OFFSET = 13'h 1c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ERR_CODE_3_OFFSET = 13'h 20; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ERR_CODE_4_OFFSET = 13'h 24; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ERR_CODE_5_OFFSET = 13'h 28; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ERR_CODE_6_OFFSET = 13'h 2c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ERR_CODE_7_OFFSET = 13'h 30; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ERR_CODE_8_OFFSET = 13'h 34; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_REGWEN_OFFSET = 13'h 38; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_CMD_OFFSET = 13'h 3c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_ADDRESS_OFFSET = 13'h 40; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_WDATA_0_OFFSET = 13'h 44; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_WDATA_1_OFFSET = 13'h 48; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_0_OFFSET = 13'h 4c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_1_OFFSET = 13'h 50; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_CHECK_TRIGGER_REGWEN_OFFSET = 13'h 54; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_CHECK_TRIGGER_OFFSET = 13'h 58; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_CHECK_REGWEN_OFFSET = 13'h 5c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_CHECK_TIMEOUT_OFFSET = 13'h 60; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_INTEGRITY_CHECK_PERIOD_OFFSET = 13'h 64; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_CONSISTENCY_CHECK_PERIOD_OFFSET = 13'h 68; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_VENDOR_TEST_READ_LOCK_OFFSET = 13'h 6c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_READ_LOCK_OFFSET = 13'h 70; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_0_OFFSET = 13'h 74; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_1_OFFSET = 13'h 78; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_0_OFFSET = 13'h 7c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_1_OFFSET = 13'h 80; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET0_DIGEST_0_OFFSET = 13'h 84; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET0_DIGEST_1_OFFSET = 13'h 88; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET1_DIGEST_0_OFFSET = 13'h 8c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET1_DIGEST_1_OFFSET = 13'h 90; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET2_DIGEST_0_OFFSET = 13'h 94; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET2_DIGEST_1_OFFSET = 13'h 98; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET3_DIGEST_0_OFFSET = 13'h 9c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET3_DIGEST_1_OFFSET = 13'h a0; + + // AXI Core Interface + axi_if #( + .AW (ADDR_WIDTH), + .DW (DATA_WIDTH), + .IW (ID_WIDTH), + .UW (USER_WIDTH) + ) axi_core_if ( + .clk (clk_tb), + .rst_n (reset_n_tb) + ); + + // AXI Prim Interface + axi_if #( + .AW (ADDR_WIDTH), + .DW (DATA_WIDTH), + .IW (ID_WIDTH), + .UW (USER_WIDTH) + ) axi_prim_if ( + .clk (clk_tb), + .rst_n (reset_n_tb) + ); + + // AXI Secret Reg Interface + axi_if #( + .AW (ADDR_WIDTH), + .DW (DATA_WIDTH), + .IW (ID_WIDTH), + .UW (USER_WIDTH) + ) axi_secreg_if ( + .clk (clk_tb), + .rst_n (reset_n_tb) + ); + + // dut + otp_ctrl_top #( + .MemInitFile (MemInitFile) + ) dut ( + .clk_i (clk_tb ), + .rst_ni (reset_n_tb ), + // edn + .clk_edn_i (edn_clk ), + .rst_edn_ni (edn_rst_n ), + .edn_o (edn_o), //(edn_if[0].req ), + .edn_i (edn_i), //({edn_if[0].ack, edn_if[0].d_data}), + // AXI interface + .s_core_axi_r_if (axi_core_if.r_sub), + .s_core_axi_w_if (axi_core_if.w_sub), + .s_prim_axi_r_if (axi_prim_if.r_sub), + .s_prim_axi_w_if (axi_prim_if.w_sub), + .s_secreg_axi_r_if (axi_secreg_if.r_sub), + // interrupt + .intr_otp_operation_done_o (intr_otp_operation_done), + .intr_otp_error_o (intr_otp_error), + // alert + .alert_rx_i (alert_rx_i ), //(alert_rx parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ALERT_TEST_OFFSET = 13'h c; + .alert_tx_o (alert_tx_o ), //(alert_tx ), + // ast + .obs_ctrl_i (obs_ctrl_i), //(otp_ctrl_if.obs_ctrl_i), + .otp_obs_o (otp_obs_o), + .otp_ast_pwr_seq_o (otp_ast_pwr_seq_o), //(ast_req), + .otp_ast_pwr_seq_h_i (otp_ast_pwr_seq_h_i), //(otp_ctrl_if.otp_ast_pwr_seq_h_i), + // pwrmgr + .pwr_otp_i (pwr_otp_init_i), //(otp_ctrl_if.pwr_otp_init_i), + .pwr_otp_o (pwr_otp_o), //({otp_ctrl_if.pwr_otp_done_o, otp_ctrl_if.pwr_otp_idle_o}), + // lc + .lc_otp_vendor_test_i (lc_otp_vendor_test_i), //(otp_ctrl_if.otp_vendor_test_ctrl_i), + .lc_otp_vendor_test_o (lc_otp_vendor_test_o), //(otp_ctrl_if.otp_vendor_test_status_o), + .lc_otp_program_i (lc_otp_program_i), //({lc_prog_if.req, lc_prog_if.h_data}), + .lc_otp_program_o (lc_otp_program_o), //({lc_prog_if.d_data, lc_prog_if.ack}), + .lc_creator_seed_sw_rw_en_i (lc_creator_seed_sw_rw_en_i), //(otp_ctrl_if.lc_creator_seed_sw_rw_en_i), + .lc_owner_seed_sw_rw_en_i (lc_owner_seed_sw_rw_en_i), //(otp_ctrl_if.lc_owner_seed_sw_rw_en_i), + .lc_seed_hw_rd_en_i (lc_seed_hw_rd_en_i), //(otp_ctrl_if.lc_seed_hw_rd_en_i), + .lc_dft_en_i (lc_dft_en_i), //(otp_ctrl_if.lc_dft_en_i), + .lc_escalate_en_i (lc_escalate_en_i), //(otp_ctrl_if.lc_escalate_en_i), + .lc_check_byp_en_i (lc_check_byp_en_i), //(otp_ctrl_if.lc_check_byp_en_i), + .otp_lc_data_o (otp_lc_data_o), //(otp_ctrl_if.lc_data_o), + + + .otp_broadcast_o (otp_broadcast_o), //(otp_ctrl_if.otp_broadcast_o), + .otp_ext_voltage_h_io (otp_ext_voltage_h_io), + + //scan + .scan_en_i (scan_en_i), //(otp_ctrl_if.scan_en_i), + .scan_rst_ni (scan_rst_ni), //(otp_ctrl_if.scan_rst_ni), + .scanmode_i (scanmode_i), //(otp_ctrl_if.scanmode_i), + + // Test-related GPIO output + .cio_test_o (cio_test_o), //(otp_ctrl_if.cio_test_o), + .cio_test_en_o (cio_test_en_o) //(otp_ctrl_if.cio_test_en_o) + ); + + //---------------------------------------------------------------- + // clk_gen + // + // Clock generator process. + //---------------------------------------------------------------- + `ifndef VERILATOR + always + begin : clk_gen + #CLK_HALF_PERIOD + clk_tb = !clk_tb; + end // clk_gen + `endif + + //---------------------------------------------------------------- + // sys_monitor + // + // Generates a cycle counter and displays information about + // the dut as needed. + //---------------------------------------------------------------- + always @(posedge clk_tb) begin : sys_monitor + cycle_ctr = (!reset_n_tb) ? 32'h0 : cycle_ctr + 1; + end + + //---------------------------------------------------------------- + // reset_dut() + // + // Toggles reset to force the DUT into a well defined state. + //---------------------------------------------------------------- + task reset_dut; + begin + $display("*** Toggle reset."); + reset_n_tb = 0; + + repeat (2) @(posedge clk_tb); + reset_n_tb = 1; + + repeat (2) @(posedge clk_tb); + + $display(""); + end + endtask // reset_dut + + //---------------------------------------------------------------- + // init_sim() + // + // Initialize all counters and testbed functionality as well + // as setting the DUT inputs to defined values. + //---------------------------------------------------------------- + task init_sim; + begin + `ifndef VERILATOR + clk_tb = 0; + `endif + reset_n_tb = 1; + + axi_core_if.araddr = '0; + axi_core_if.arburst = '0; + axi_core_if.arlen = '0; + axi_core_if.arlock = 0; + axi_core_if.arsize = '0; + axi_core_if.arid = 0; + axi_core_if.aruser = '0; + axi_core_if.arvalid = 0; + axi_core_if.rready = 0; + + axi_core_if.awaddr = '0; + axi_core_if.awid = '0; + axi_core_if.awburst = '0; + axi_core_if.awlen = '0; + axi_core_if.awlock = 0; + axi_core_if.awsize = '0; + axi_core_if.awuser = '0; + axi_core_if.awvalid = 0; + axi_core_if.wdata = '0; + axi_core_if.wvalid = 0; + axi_core_if.wlast = 0; + axi_core_if.wstrb = '0; + axi_core_if.bready = 0; + + axi_prim_if.araddr = '0; + axi_prim_if.arburst = '0; + axi_prim_if.arlen = '0; + axi_prim_if.arlock = 0; + axi_prim_if.arsize = '0; + axi_prim_if.arid = 0; + axi_prim_if.aruser = '0; + axi_prim_if.arvalid = 0; + axi_prim_if.rready = 0; + + axi_prim_if.awaddr = '0; + axi_prim_if.awid = '0; + axi_prim_if.awburst = '0; + axi_prim_if.awlen = '0; + axi_prim_if.awlock = 0; + axi_prim_if.awsize = '0; + axi_prim_if.awuser = '0; + axi_prim_if.awvalid = 0; + axi_prim_if.wdata = '0; + axi_prim_if.wvalid = 0; + axi_prim_if.wlast = 0; + axi_prim_if.wstrb = '0; + axi_prim_if.bready = 0; + + axi_secreg_if.araddr = '0; + axi_secreg_if.arburst = '0; + axi_secreg_if.arlen = '0; + axi_secreg_if.arlock = 0; + axi_secreg_if.arsize = '0; + axi_secreg_if.aruser = '0; + axi_secreg_if.arvalid = 0; + axi_secreg_if.rready = 0; + + lc_creator_seed_sw_rw_en_i = lc_ctrl_pkg::Off;; + lc_owner_seed_sw_rw_en_i = lc_ctrl_pkg::Off;; + lc_seed_hw_rd_en_i = lc_ctrl_pkg::Off;; + lc_dft_en_i = lc_ctrl_pkg::Off;; + lc_escalate_en_i = lc_ctrl_pkg::Off;; + lc_check_byp_en_i = lc_ctrl_pkg::Off;; + + pwr_otp_init_i = 0; + end + endtask + + //---------------------------------------------------------------- + // display_test_result() + // + // Display the accumulated test results. + //---------------------------------------------------------------- + task display_test_result; + begin + if (error_ctr == 0) begin + $display("*** All %02d test cases completed successfully.", tc_ctr); + $display("* TESTCASE PASSED"); + end + else begin + $display("*** %02d test cases completed.", tc_ctr); + $display("*** %02d errors detected during testing.", error_ctr); + $display("* TESTCASE FAILED"); + end + end + endtask // display_test_result + + //----------------------------------------------------------------- + // init_parition() + // + // Initialize partitions and wait for initialization complete. + //----------------------------------------------------------------- + task init_partition; + begin + $display("*** TEST: Initialize OTP partitions."); + pwr_otp_init_i = 1; + repeat (5) @(posedge clk_tb); + pwr_otp_init_i = 0; + + while (!otp_lc_data_o.valid) begin + @(posedge clk_tb); + end + + $display("*** TEST PASS - OTP partition initialization complete"); + end + endtask + + //----------------------------------------------------------------- + // read_csr() + // + // Read a CSR over AXI interface (via AXI2TLUL gasket). + //----------------------------------------------------------------- + task read_csr ( + input string csr_name, + input logic [12:0] csr_addr, + input logic [31:0] user, + input logic id + ); + begin + logic [31:0] read_addr; + logic [31:0] read_data; + axi_pkg::axi_resp_e read_rsp; + + $display("*** Read CSR %s", csr_name); + + read_addr = {{19{1'b0}}, csr_addr}; + //user = 32'h00000001; + //id = 1'b1; + $display(" DEBUG: read_addr = 0x%x", read_addr); + axi_core_if.axi_read_single(read_addr, user, id, clk_tb, read_data, read_rsp); + $display("DEBUG: Issued axi read command"); + @(posedge clk_tb); + if (read_rsp == axi_pkg::AXI_RESP_OKAY) begin + $display(" *** TEST PASS: CSR %s = 0x%x\n", csr_name, read_data); + end + else begin + $display(" TEST FAIL: Failed to read CSR %s. Read Response = %s", csr_name, read_rsp); + end + end + endtask + + //----------------------------------------------------------------- + // read_all_csrs() + // + // Read all CSRs back to back CSRs over AXI interface (via AXI2TLUL gasket). + //----------------------------------------------------------------- + task read_all_csrs; + begin + logic [CoreAw-1:0] csr_addr; + string csr_reg_name; + logic [31:0] user; + logic id; + + user = 32'h00000001; + id = 1'b1; + + $display("*** \n\nTEST: Read all CSRs"); + + foreach (csr_registers[i]) begin + csr_reg_name = csr_registers[i]; + csr_addr = get_addr(csr_reg_name); + read_csr(csr_reg_name, csr_addr, user, id); + end + + $display("*** TEST Read all CSRs compelete!!"); + end + endtask + + //---------------------------------------------------------------- + // write_csr() + // + // Write a CSR over AXI itnerface (via AXI2TLUL gasket) + //---------------------------------------------------------------- + task write_csr( + input string csr_name, + input logic [12:0] csr_addr, + input logic [31:0] csr_write_data, + input logic [31:0] user, + input logic id + ); + begin + logic [31:0] write_addr; + logic [31:0] read_data; + axi_pkg::axi_resp_e write_rsp; + axi_pkg::axi_resp_e read_rsp; + write_addr = {{19{1'b0}}, csr_addr}; + $display(" DEBUG: write_addr = 0x%x", write_addr); + axi_core_if.axi_write_single(write_addr, user, id, clk_tb, csr_write_data, write_rsp); + @(posedge clk_tb); + if (write_rsp != AXI_RESP_OKAY) begin + $display("*** FAIL: Write to CSR %s (addr 0x%x) unsuccessful. Response = %s", csr_name, write_addr, write_rsp); + end + read_csr(csr_name, write_addr, user, id); + end + endtask + + //---------------------------------------------------------------- + // write_all_csrs() + // + // Write all CSRs back to back over AXI interface (via AXI2TLUL gasket) + //---------------------------------------------------------------- + task write_all_csrs; + begin + logic [CoreAw-1:0] csr_addr; + string csr_reg_name; + logic [31:0] csr_write_data; + logic [31:0] user; + logic id; + + user = 32'h00000001; + id = 1'b1; + + $display("*** \n\nTEST: Write all CSRs"); + + foreach (csr_registers[i]) begin + csr_reg_name = csr_registers[i]; + csr_addr = get_addr(csr_reg_name); + csr_write_data = $random; + write_csr(csr_reg_name, csr_addr, csr_write_data, user, id); + end + + $display("*** TEST Write all CSRs compelete!!"); + end + endtask + + //---------------------------------------------------------------- + // write_dai_regs() + // + // Write DAI registers over AXI interface (via AXI2TLUL gasket) + //---------------------------------------------------------------- + task write_dai_regs; + begin + logic [CoreAw-1:0] csr_addr; + string cur_dai_reg; + logic [31:0] user; + logic id; + logic [31:0] write_data; + strq_t dai_regs; + axi_resp_e write_rsp; + $display("*** TEST: Write to DAI registers"); + + dai_regs = get_dai_regnames(); + + // Write to DAI WDATA_0 register + foreach (dai_regs[i]) begin + cur_dai_reg = dai_regs[i]; + if (str_find(cur_dai_reg, "WDATA_0")) + break; + end + csr_addr = get_addr(cur_dai_reg); + write_data = 32'h11223344; // reset value is 0x1; Write 0 to clear + user = 32'h1; + id = 1'b1; + write_csr(cur_dai_reg, csr_addr, write_data, user, id); + + end + endtask + + + //---------------------------------------------------------------- + // The main test functionality. + //---------------------------------------------------------------- + initial begin : main + fork + begin + $display(" -- Testbench for fuse_ctrl started. --"); + + init_sim(); + reset_dut(); + + init_partition(); + read_all_csrs(); + write_all_csrs(); + //write_dai_regs(); + + $display(" -- Testbench for fuse_ctrl done. --"); + $finish; + end + + begin + repeat (100000) @(posedge clk_tb); + $display("*** Test timed out!!!"); + $finish; + end + join_any + disable fork; + end + +endmodule // otp_ctrl_top_tb + +//====================================================================== +// EOF otp_ctrl_top_tb.sv +//====================================================================== + + diff --git a/src/fuse_ctrl/tb/otp_ctrl_top_tb_pkg.sv b/src/fuse_ctrl/tb/otp_ctrl_top_tb_pkg.sv new file mode 100644 index 000000000..43490bd18 --- /dev/null +++ b/src/fuse_ctrl/tb/otp_ctrl_top_tb_pkg.sv @@ -0,0 +1,206 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//====================================================================== + +`ifndef OTP_CTRL_TOP_TB_PKG +`define OTP_CTRL_TOP_TB_PKG + +package otp_ctrl_top_tb_pkg; + + localparam int CoreAw = 13; + + localparam CSR_BASE = 0; + + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_INTR_STATE_OFFSET = 13'h 0; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_INTR_ENABLE_OFFSET = 13'h 4; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_INTR_TEST_OFFSET = 13'h 8; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ALERT_TEST_OFFSET = 13'h c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_STATUS_OFFSET = 13'h 10; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ERR_CODE_0_OFFSET = 13'h 14; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ERR_CODE_1_OFFSET = 13'h 18; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ERR_CODE_2_OFFSET = 13'h 1c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ERR_CODE_3_OFFSET = 13'h 20; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ERR_CODE_4_OFFSET = 13'h 24; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ERR_CODE_5_OFFSET = 13'h 28; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ERR_CODE_6_OFFSET = 13'h 2c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ERR_CODE_7_OFFSET = 13'h 30; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ERR_CODE_8_OFFSET = 13'h 34; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_REGWEN_OFFSET = 13'h 38; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_CMD_OFFSET = 13'h 3c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_ADDRESS_OFFSET = 13'h 40; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_WDATA_0_OFFSET = 13'h 44; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_WDATA_1_OFFSET = 13'h 48; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_0_OFFSET = 13'h 4c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_1_OFFSET = 13'h 50; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_CHECK_TRIGGER_REGWEN_OFFSET = 13'h 54; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_CHECK_TRIGGER_OFFSET = 13'h 58; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_CHECK_REGWEN_OFFSET = 13'h 5c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_CHECK_TIMEOUT_OFFSET = 13'h 60; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_INTEGRITY_CHECK_PERIOD_OFFSET = 13'h 64; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_CONSISTENCY_CHECK_PERIOD_OFFSET = 13'h 68; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_VENDOR_TEST_READ_LOCK_OFFSET = 13'h 6c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_READ_LOCK_OFFSET = 13'h 70; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_0_OFFSET = 13'h 74; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_1_OFFSET = 13'h 78; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_0_OFFSET = 13'h 7c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_1_OFFSET = 13'h 80; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET0_DIGEST_0_OFFSET = 13'h 84; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET0_DIGEST_1_OFFSET = 13'h 88; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET1_DIGEST_0_OFFSET = 13'h 8c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET1_DIGEST_1_OFFSET = 13'h 90; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET2_DIGEST_0_OFFSET = 13'h 94; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET2_DIGEST_1_OFFSET = 13'h 98; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET3_DIGEST_0_OFFSET = 13'h 9c; + parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_SECRET3_DIGEST_1_OFFSET = 13'h a0; + + typedef logic [CoreAw-1:0] word_addr_t; + + typedef string strq_t [$]; + + strq_t csr_registers = '{ + "CALIPTRA_OTP_CTRL_INTR_STATE_OFFSET", + "CALIPTRA_OTP_CTRL_INTR_ENABLE_OFFSET", + "CALIPTRA_OTP_CTRL_INTR_TEST_OFFSET", + "CALIPTRA_OTP_CTRL_ALERT_TEST_OFFSET", + "CALIPTRA_OTP_CTRL_STATUS_OFFSET", + "CALIPTRA_OTP_CTRL_ERR_CODE_0_OFFSET", + "CALIPTRA_OTP_CTRL_ERR_CODE_1_OFFSET", + "CALIPTRA_OTP_CTRL_ERR_CODE_2_OFFSET", + "CALIPTRA_OTP_CTRL_ERR_CODE_3_OFFSET", + "CALIPTRA_OTP_CTRL_ERR_CODE_4_OFFSET", + "CALIPTRA_OTP_CTRL_ERR_CODE_5_OFFSET", + "CALIPTRA_OTP_CTRL_ERR_CODE_6_OFFSET", + "CALIPTRA_OTP_CTRL_ERR_CODE_7_OFFSET", + "CALIPTRA_OTP_CTRL_ERR_CODE_8_OFFSET", + "CALIPTRA_OTP_CTRL_DIRECT_ACCESS_REGWEN_OFFSET", + "CALIPTRA_OTP_CTRL_DIRECT_ACCESS_CMD_OFFSET", + "CALIPTRA_OTP_CTRL_DIRECT_ACCESS_ADDRESS_OFFSET", + "CALIPTRA_OTP_CTRL_DIRECT_ACCESS_WDATA_0_OFFSET", + "CALIPTRA_OTP_CTRL_DIRECT_ACCESS_WDATA_1_OFFSET", + "CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_0_OFFSET", + "CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_1_OFFSET", + "CALIPTRA_OTP_CTRL_CHECK_TRIGGER_REGWEN_OFFSET", + "CALIPTRA_OTP_CTRL_CHECK_TRIGGER_OFFSET", + "CALIPTRA_OTP_CTRL_CHECK_REGWEN_OFFSET", + "CALIPTRA_OTP_CTRL_CHECK_TIMEOUT_OFFSET", + "CALIPTRA_OTP_CTRL_INTEGRITY_CHECK_PERIOD_OFFSET", + "CALIPTRA_OTP_CTRL_CONSISTENCY_CHECK_PERIOD_OFFSET", + "CALIPTRA_OTP_CTRL_VENDOR_TEST_READ_LOCK_OFFSET", + "CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_READ_LOCK_OFFSET", + "CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_0_OFFSET", + "CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_1_OFFSET", + "CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_0_OFFSET", + "CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_1_OFFSET", + "CALIPTRA_OTP_CTRL_SECRET0_DIGEST_0_OFFSET", + "CALIPTRA_OTP_CTRL_SECRET0_DIGEST_1_OFFSET", + "CALIPTRA_OTP_CTRL_SECRET1_DIGEST_0_OFFSET", + "CALIPTRA_OTP_CTRL_SECRET1_DIGEST_1_OFFSET", + "CALIPTRA_OTP_CTRL_SECRET2_DIGEST_0_OFFSET", + "CALIPTRA_OTP_CTRL_SECRET2_DIGEST_1_OFFSET", + "CALIPTRA_OTP_CTRL_SECRET3_DIGEST_0_OFFSET", + "CALIPTRA_OTP_CTRL_SECRET3_DIGEST_1_OFFSET" + }; + + word_addr_t _csr_register_dict [string] = { + "CALIPTRA_OTP_CTRL_INTR_STATE_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_INTR_STATE_OFFSET, // 0x00 Interrupt State + "CALIPTRA_OTP_CTRL_INTR_ENABLE_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_INTR_ENABLE_OFFSET, // 0x04 Interrupt Enable + "CALIPTRA_OTP_CTRL_INTR_TEST_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_INTR_TEST_OFFSET, // 0x08 Interrupt Test + "CALIPTRA_OTP_CTRL_ALERT_TEST_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_ALERT_TEST_OFFSET, // 0x0C Alert Test + "CALIPTRA_OTP_CTRL_STATUS_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_STATUS_OFFSET, // 0x10 Status + "CALIPTRA_OTP_CTRL_ERR_CODE_0_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_ERR_CODE_0_OFFSET, // 0x14 Error Code 0 + "CALIPTRA_OTP_CTRL_ERR_CODE_1_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_ERR_CODE_1_OFFSET, // 0x18 Error Code 1 + "CALIPTRA_OTP_CTRL_ERR_CODE_2_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_ERR_CODE_2_OFFSET, // 0x1C Error Code 2 + "CALIPTRA_OTP_CTRL_ERR_CODE_3_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_ERR_CODE_3_OFFSET, // 0x20 Error Code 3 + "CALIPTRA_OTP_CTRL_ERR_CODE_4_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_ERR_CODE_4_OFFSET, // 0x24 Error Code 4 + "CALIPTRA_OTP_CTRL_ERR_CODE_5_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_ERR_CODE_5_OFFSET, // 0x28 Error Code 5 + "CALIPTRA_OTP_CTRL_ERR_CODE_6_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_ERR_CODE_6_OFFSET, // 0x2C Error Code 6 + "CALIPTRA_OTP_CTRL_ERR_CODE_7_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_ERR_CODE_7_OFFSET, // 0x30 Error Code 7 + "CALIPTRA_OTP_CTRL_ERR_CODE_8_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_ERR_CODE_8_OFFSET, // 0x34 Error Code 8 + "CALIPTRA_OTP_CTRL_DIRECT_ACCESS_REGWEN_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_DIRECT_ACCESS_REGWEN_OFFSET, // 0x38 Direct Access Register Write Enable + "CALIPTRA_OTP_CTRL_DIRECT_ACCESS_CMD_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_DIRECT_ACCESS_CMD_OFFSET, // 0x3C Direct Access Command + "CALIPTRA_OTP_CTRL_DIRECT_ACCESS_ADDRESS_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_DIRECT_ACCESS_ADDRESS_OFFSET, // 040x Direct Access Address + "CALIPTRA_OTP_CTRL_DIRECT_ACCESS_WDATA_0_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_DIRECT_ACCESS_WDATA_0_OFFSET, // 0x44 Direct Access Write Data 0 + "CALIPTRA_OTP_CTRL_DIRECT_ACCESS_WDATA_1_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_DIRECT_ACCESS_WDATA_1_OFFSET, // 0x48 Direct Access Write Data 1 + "CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_0_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_0_OFFSET, // 0x4C Direct Access Read Data 0 + "CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_1_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_DIRECT_ACCESS_RDATA_1_OFFSET, // 0x50 Direct Access Read Data 1 + "CALIPTRA_OTP_CTRL_CHECK_TRIGGER_REGWEN_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_CHECK_TRIGGER_REGWEN_OFFSET, // 0x54 Check Trigger Register Write Enable + "CALIPTRA_OTP_CTRL_CHECK_TRIGGER_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_CHECK_TRIGGER_OFFSET, // 0x58 Check Trigger + "CALIPTRA_OTP_CTRL_CHECK_REGWEN_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_CHECK_REGWEN_OFFSET, // 0x5C Check Register Write Enable + "CALIPTRA_OTP_CTRL_CHECK_TIMEOUT_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_CHECK_TIMEOUT_OFFSET, // 0x60 Check Timeout + "CALIPTRA_OTP_CTRL_INTEGRITY_CHECK_PERIOD_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_INTEGRITY_CHECK_PERIOD_OFFSET, // 0x64 Integrity Check Period + "CALIPTRA_OTP_CTRL_CONSISTENCY_CHECK_PERIOD_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_CONSISTENCY_CHECK_PERIOD_OFFSET, // 0x68 Consistency Check Period + "CALIPTRA_OTP_CTRL_VENDOR_TEST_READ_LOCK_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_VENDOR_TEST_READ_LOCK_OFFSET, // 0x6C Vendor Test Read Lock + "CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_READ_LOCK_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_READ_LOCK_OFFSET, // 0x70 Non Secret Fuses Read Lock + "CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_0_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_0_OFFSET, // 0x74 Vendor Test Digest 0 + "CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_1_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_VENDOR_TEST_DIGEST_1_OFFSET, // 0x78 Vendor Test Digest 1 + "CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_0_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_0_OFFSET, // 0x7C Non Secret Fuses Digest 0 + "CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_1_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_NON_SECRET_FUSES_DIGEST_1_OFFSET, // 0x80 Non Secret Fuses Digest 1 + "CALIPTRA_OTP_CTRL_SECRET0_DIGEST_0_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_SECRET0_DIGEST_0_OFFSET, // 0x84 Secret 0 Digest 0 + "CALIPTRA_OTP_CTRL_SECRET0_DIGEST_1_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_SECRET0_DIGEST_1_OFFSET, // 0x88 Secret 0 Digest 1 + "CALIPTRA_OTP_CTRL_SECRET1_DIGEST_0_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_SECRET1_DIGEST_0_OFFSET, // 0x8C Secret 1 Digest 0 + "CALIPTRA_OTP_CTRL_SECRET1_DIGEST_1_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_SECRET1_DIGEST_1_OFFSET, // 0x90 Secret 1 Digest 1 + "CALIPTRA_OTP_CTRL_SECRET2_DIGEST_0_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_SECRET2_DIGEST_0_OFFSET, // 0x94 Secret 2 Digest 0 + "CALIPTRA_OTP_CTRL_SECRET2_DIGEST_1_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_SECRET2_DIGEST_1_OFFSET, // 0x98 Secret 2 Digest 1 + "CALIPTRA_OTP_CTRL_SECRET3_DIGEST_0_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_SECRET3_DIGEST_0_OFFSET, // 0x9C Secret 3 Digest 0 + "CALIPTRA_OTP_CTRL_SECRET3_DIGEST_1_OFFSET" : CSR_BASE + CALIPTRA_OTP_CTRL_SECRET3_DIGEST_1_OFFSET // 0xA0 Secret 3 Digest 1 + }; + + function word_addr_t get_addr(string name); + if (_csr_register_dict.exists(name)) + return _csr_register_dict[name]; + else begin + $display("TB WARNING. Address %s is not found in csr reg name -> address map. Returning 0", name); + return 0; + end + endfunction // get_addr + + function strq_t get_dai_regnames(); + strq_t dai_regs; + string csr_reg_name; + + foreach (csr_registers[i]) begin + csr_reg_name = csr_registers[i]; + if (csr_reg_name.substr(18, 23) == "DIRECT") + dai_regs.push_back(csr_reg_name); + end + + return dai_regs; + endfunction + + function bit str_find (string reg_name, string substr); + int i; + bit found; + for (i = 0; i <= reg_name.len() - substr.len(); i++) begin + $display(reg_name, i); + //$display(reg_name[i], reg_name[i+1], reg_name[i+2], reg_name[i+3], reg_name[i+4], reg_name[i+5]); + $display(reg_name.substr(i, substr.len()-1)); + if (reg_name.substr(i, (i + substr.len()-1)) == substr) begin + //$display("Substring '%s' found at index %0d", substr, i); + found = 1; + break; + end + end + if (!found) begin + $display("Substring '%s' not found", substr); + end + return found; + endfunction + + + + +endpackage + +`endif \ No newline at end of file diff --git a/src/lc_ctrl/rtl/lc_ctrl_pkg.sv b/src/lc_ctrl/rtl/lc_ctrl_pkg.sv index 8793c5dbe..c735d3b70 100644 --- a/src/lc_ctrl/rtl/lc_ctrl_pkg.sv +++ b/src/lc_ctrl/rtl/lc_ctrl_pkg.sv @@ -40,10 +40,14 @@ package lc_ctrl_pkg; // Note that changing this encoding has implications on isolation cell // values in RTL. Do not change this unless absolutely needed. - typedef enum logic [TxWidth-1:0] { + /*typedef enum logic [TxWidth-1:0] { On = 4'b0101, Off = 4'b1010 - } lc_tx_t; + } lc_tx_t;*/ + localparam On = 4'b0101, + Off = 4'b1010; + typedef logic [3:0] lc_tx_t; + parameter lc_tx_t LC_TX_DEFAULT = lc_tx_t'(Off); parameter int RmaSeedWidth = 32; diff --git a/src/pwrmgr/BUILD b/src/pwrmgr/BUILD new file mode 100644 index 000000000..129296bdc --- /dev/null +++ b/src/pwrmgr/BUILD @@ -0,0 +1,12 @@ +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 + +package(default_visibility = ["//visibility:public"]) + +filegroup( + name = "all_files", + srcs = glob(["**"]) + [ + "//hw/ip_templates/pwrmgr/data:all_files", + ], +) diff --git a/src/pwrmgr/README.md.tpl b/src/pwrmgr/README.md.tpl new file mode 100644 index 000000000..e3882098c --- /dev/null +++ b/src/pwrmgr/README.md.tpl @@ -0,0 +1,36 @@ +# Power Manager HWIP Technical Specification +[`pwrmgr`](https://reports.opentitan.org/hw/top_${topname}/ip_autogen/pwrmgr/dv/latest/report.html): +![](https://dashboards.lowrisc.org/badges/dv/pwrmgr/test.svg) +![](https://dashboards.lowrisc.org/badges/dv/pwrmgr/passing.svg) +![](https://dashboards.lowrisc.org/badges/dv/pwrmgr/functional.svg) +![](https://dashboards.lowrisc.org/badges/dv/pwrmgr/code.svg) + +# Overview + +This document specifies the functionality of the OpenTitan power manager. + +${"##"} Features + +- Cold boot, low power entry / exit and reset support. +- 2 different low power modes. +- Software initiated low power entry and hardware requested low power exit. +- Peripheral reset requests +- Low power abort and low power fall-through support. +- ROM integrity check at power-up. +- Local checks for escalator and power stability. + +${"##"} Description + +The power manager sequences power, clocks, and reset resources of the design through cold boot, low power entry/exit and reset scenarios. + +Cold boot, also known as POR (power on reset) is the first reset state of the design. +The power manager sequences the design from a freshly reset state to an active state where software can be initialized. + +- Low power entry is the process in which the device enters one of two low power modes (sleep or deep sleep). +- Low power exit is the process in which the device exits low power mode and returns to active state. +- Low power entry is always initiated by software, while low power exit is always initiated by a previously setup hardware event such as pins or internal timers. +- The power manager processes the software and hardware requests to perform the appropriate actions. + +Reset scenarios refer to non-POR events that cause the device to reboot. +There are various stimuli that can cause such a reset, ranging from external user input to watchdog timeout. +The power manager processes the reset request and brings the device to an appropriate state. diff --git a/src/pwrmgr/config/compile.yml b/src/pwrmgr/config/compile.yml new file mode 100644 index 000000000..890163edc --- /dev/null +++ b/src/pwrmgr/config/compile.yml @@ -0,0 +1,15 @@ +--- +provides: [pwrmgr_pkg] +schema_version: 2.4.0 +requires: +targets: + rtl: + directories: [$COMPILE_ROOT/rtl] + files: + - $COMPILE_ROOT/rtl/pwrmgr_reg_pkg.sv + - $COMPILE_ROOT/rtl/pwrmgr_pkg.sv + tb: + directories: [$COMPILE_ROOT/rtl] + files: + - $COMPILE_ROOT/rtl/pwrmgr_reg_pkg.sv + - $COMPILE_ROOT/rtl/pwrmgr_pkg.sv diff --git a/src/pwrmgr/data/BUILD b/src/pwrmgr/data/BUILD new file mode 100644 index 000000000..65cf527bb --- /dev/null +++ b/src/pwrmgr/data/BUILD @@ -0,0 +1,30 @@ +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 + +package(default_visibility = ["//visibility:public"]) + +load( + "//rules:autogen.bzl", + "autogen_hjson_c_header", + "autogen_hjson_rust_header", +) + +autogen_hjson_c_header( + name = "pwrmgr_c_regs", + srcs = [ + "pwrmgr.hjson", + ], +) + +autogen_hjson_rust_header( + name = "pwrmgr_rust_regs", + srcs = [ + "pwrmgr.hjson", + ], +) + +filegroup( + name = "all_files", + srcs = glob(["**"]), +) diff --git a/src/pwrmgr/data/pwrmgr.hjson b/src/pwrmgr/data/pwrmgr.hjson new file mode 100644 index 000000000..977e618ef --- /dev/null +++ b/src/pwrmgr/data/pwrmgr.hjson @@ -0,0 +1,577 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// ------------------- W A R N I N G: A U T O - G E N E R A T E D C O D E !! -------------------// +// PLEASE DO NOT HAND-EDIT THIS FILE. IT HAS BEEN AUTO-GENERATED WITH THE FOLLOWING COMMAND: +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +{ + name: "pwrmgr", + human_name: "Power Manager", + one_line_desc: "Sequences on-chip power, clocks, and resets through different reset and power states", + one_paragraph_desc: ''' + Power Manager sequences on-chip power, clocks, and reset signals on power-on reset (aka cold boot), low power entry and exit, and non-power-on resets. + To this end, it can turn power domains on and off, control root resets with Reset Manager, and control root clock enables with AST and Clock Manager. + During power up, Power Manager is responsible for triggering OTP sensing, initiating Life Cycle Controller, coordinating with ROM Controller for the startup ROM check, and eventually releasing software to execute. + It features several countermeasures to deter fault injection (FI) attacks. + ''' + // Unique comportable IP identifier defined under KNOWN_CIP_IDS in the regtool. + cip_id: "20", + design_spec: "../doc", + dv_doc: "../doc/dv", + hw_checklist: "../doc/checklist", + sw_checklist: "/sw/device/lib/dif/dif_pwrmgr", + revisions: [ + { + version: "0.1.0", + life_stage: "L1", + design_stage: "D1", + verification_stage: "V0", // this module is not verified at the block level + dif_stage: "S0", + commit_id: "b2abc989498f072d9a5530f8aab9b58c1f92c9fb" + } + { + version: "1.0.0", + life_stage: "L1", + design_stage: "D2S", + verification_stage: "V2S", + dif_stage: "S2", + } + ] + clocking: [ + {clock: "clk_i", reset: "rst_ni", primary: true}, + {reset: "rst_main_ni"}, + {clock: "clk_slow_i", reset: "rst_slow_ni"}, + {clock: "clk_lc_i", reset: "rst_lc_ni"}, + {clock: "clk_esc_i", reset: "rst_esc_ni"} + ] + bus_interfaces: [ + { protocol: "tlul", direction: "device" } + ], + interrupt_list: [ + { name: "wakeup", desc: "Wake from low power state. See wake info for more details" }, + ], + + inter_signal_list: [ + { struct: "pwr_ast", + type: "req_rsp", + name: "pwr_ast", + act: "req", + package: "pwrmgr_pkg", + }, + + { struct: "pwr_rst", + type: "req_rsp", + name: "pwr_rst", + act: "req", + package: "pwrmgr_pkg", + }, + + { struct: "pwr_clk", + type: "req_rsp", + name: "pwr_clk", + act: "req", + package: "pwrmgr_pkg", + }, + + { struct: "pwr_otp", + type: "req_rsp", + name: "pwr_otp", + act: "req", + package: "pwrmgr_pkg", + }, + + { struct: "pwr_lc", + type: "req_rsp", + name: "pwr_lc", + act: "req", + package: "pwrmgr_pkg", + }, + + { struct: "pwr_flash", + type: "req_rsp", + name: "pwr_flash", + act: "req", + package: "pwrmgr_pkg", + }, + + { struct: "esc_tx", + type: "uni", + name: "esc_rst_tx", + act: "rcv", + package: "prim_esc_pkg", + }, + + { struct: "esc_rx", + type: "uni", + name: "esc_rst_rx", + act: "req", + package: "prim_esc_pkg", + }, + + { struct: "pwr_cpu", + type: "uni", + name: "pwr_cpu", + act: "rcv", + package: "pwrmgr_pkg", + }, + + { struct: "logic", + width: 1, + type: "uni", + name: "wakeups", + act: "rcv", + package: "", + }, + + { struct: "logic", + width: 1, + type: "uni", + name: "rstreqs", + act: "rcv", + package: "", + }, + + ], + + param_list: [ + { name: "NumWkups", + desc: "Number of wakeups", + type: "int", + default: "1", + local: "true" + }, + { name: "NumRstReqs", + desc: "Number of reset requets", + type: "int", + default: "1", + local: "true" + }, + ], + + countermeasures: [ + { name: "BUS.INTEGRITY", + desc: "End-to-end bus integrity scheme." + } + { name: "LC_CTRL.INTERSIG.MUBI", + desc: "life cycle control / debug signals are multibit." + } + { name: "ROM_CTRL.INTERSIG.MUBI", + desc: "rom control done/good signals are multibit." + } + { name: "RSTMGR.INTERSIG.MUBI", + desc: "reset manager software request is multibit." + } + { name: "ESC_RX.CLK.BKGN_CHK", + desc: "Escalation receiver has a background timeout check" + } + { name: "ESC_RX.CLK.LOCAL_ESC", + desc: "Escalation receiver clock timeout has a local reset escalation" + } + { name: "FSM.SPARSE", + desc: "Sparse encoding for slow and fast state machines." + } + { name: "FSM.TERMINAL", + desc: "When FSMs reach a bad state, escalate directly and force user reset." + } + { name: "CTRL_FLOW.GLOBAL_ESC", + desc: "When global escalation is received, proceed directly to reset." + } + { name: "MAIN_PD.RST.LOCAL_ESC", + desc: "When main power domain reset glitches, proceed directly to reset." + } + { name: "CTRL.CONFIG.REGWEN", + desc: "Main control protected by regwen." + } + { name: "WAKEUP.CONFIG.REGWEN", + desc: "Wakeup configuration protected by regwen." + } + { name: "RESET.CONFIG.REGWEN", + desc: "Reset configuration protected by regwen." + } + + ] + + regwidth: "32", + registers: [ + + { name: "CTRL_CFG_REGWEN", + swaccess: "ro", + hwaccess: "hwo", + hwext: "true", + desc: ''' + Controls the configurability of the !!CONTROL register. + + This register ensures the contents do not change once a low power hint and + WFI has occurred. + + It unlocks whenever a low power transition has completed (transition back to the + ACTIVE state) for any reason. + ''', + + fields: [ + { bits: "0", + name: "EN", + desc: ''' + Configuration enable. + + This bit defaults to 1 and is set to 0 by hardware when low power entry is initiated. + When the device transitions back from low power state to active state, this bit is set + back to 1 to allow software configuration of !!CONTROL + ''', + resval: "1", + }, + ] + tags: [// This regwen is completely under HW management and thus cannot be manipulated + // by software. + "excl:CsrNonInitTests:CsrExclCheck"] + }, + + + { name: "CONTROL", + desc: "Control register", + swaccess: "rw", + hwaccess: "hro", + regwen: "CTRL_CFG_REGWEN", + fields: [ + { bits: "0", + hwaccess: "hrw", + name: "LOW_POWER_HINT", + desc: ''' + The low power hint to power manager. + The hint is an indication for how the manager should treat the next WFI. + Once the power manager begins a low power transition, or if a valid reset request is registered, + this bit is automatically cleared by HW. + ''' + resval: "0" + enum: [ + { value: "0", + name: "None", + desc: ''' + No low power intent + ''' + }, + { value: "1", + name: "Low Power", + desc: ''' + Next WFI should trigger low power entry + ''' + }, + ] + tags: [// The regwen for this reg is RO. CSR seq can't support to check this reg + "excl:CsrAllTests:CsrExclAll"] + }, + + { bits: "4", + name: "CORE_CLK_EN", + desc: "core clock enable during low power state", + resval: "0" + enum: [ + { value: "0", + name: "Disabled", + desc: ''' + Core clock disabled during low power state + ''' + }, + { value: "1", + name: "Enabled", + desc: ''' + Core clock enabled during low power state + ''' + }, + ] + }, + + { bits: "5", + name: "IO_CLK_EN", + desc: "IO clock enable during low power state", + resval: "0" + enum: [ + { value: "0", + name: "Disabled", + desc: ''' + IO clock disabled during low power state + ''' + }, + { value: "1", + name: "Enabled", + desc: ''' + IO clock enabled during low power state + ''' + }, + ] + }, + + { bits: "6", + name: "USB_CLK_EN_LP", + desc: "USB clock enable during low power state", + resval: "0", + enum: [ + { value: "0", + name: "Disabled", + desc: ''' + USB clock disabled during low power state + ''' + }, + { value: "1", + name: "Enabled", + desc: ''' + USB clock enabled during low power state + ''' + }, + ] + }, + + { bits: "7", + name: "USB_CLK_EN_ACTIVE", + desc: "USB clock enable during active power state", + resval: "1" + enum: [ + { value: "0", + name: "Disabled", + desc: ''' + USB clock disabled during active power state + ''' + }, + { value: "1", + name: "Enabled", + desc: ''' + USB clock enabled during active power state + ''' + }, + ] + tags: [// Turning off USB clock in active state impacts other CSRs + // at the chip level (in other blocks, such as clkmgr). + "excl:CsrNonInitTests:CsrExclWrite"] + }, + + { bits: "8", + name: "MAIN_PD_N", + desc: "Active low, main power domain power down", + resval: "1" + enum: [ + { value: "0", + name: "Power down", + desc: ''' + Main power domain is powered down during low power state + ''' + }, + { value: "1", + name: "Power up", + desc: ''' + Main power domain is kept powered during low power state + ''' + }, + ] + }, + + + ], + }, + + { name: "CFG_CDC_SYNC", + swaccess: "rw", + hwaccess: "hrw", + hwqe: "true", + desc: ''' + The configuration registers CONTROL, WAKEUP_EN, RESET_EN are all written in the + fast clock domain but used in the slow clock domain. + + The configuration are not propogated across the clock boundary until this + register is triggered and read. See fields below for more details + ''', + + fields: [ + { bits: "0", + name: "SYNC", + desc: ''' + Configuration sync. When this bit is written to 1, a sync pulse is generated. When + the sync completes, this bit then self clears. + + Software should write this bit to 1, wait for it to clear, before assuming the slow clock + domain has assumed the programmed values. + ''', + resval: "0", + }, + ] + tags: [// This bit triggers a payload synchronization and self clears when complete. + // Do not write this bit as there will be side effects and the value will not persist + "excl:CsrNonInitTests:CsrExclCheck"] + }, + + { name: "WAKEUP_EN_REGWEN", + desc: "Configuration enable for wakeup_en register", + swaccess: "rw0c", + hwaccess: "none", + fields: [ + { bits: "0", + resval: "1" + name: "EN", + desc: ''' + When 1, WAKEUP_EN register can be configured. + When 0, WAKEUP_EN register cannot be configured. + ''', + }, + ] + }, + + { multireg: + { name: "WAKEUP_EN", + desc: "Bit mask for enabled wakeups", + swaccess: "rw", + hwaccess: "hro", + regwen: "WAKEUP_EN_REGWEN", + resval: "0" + cname: "wakeup_en", + count: "NumWkups" + fields: [ + { bits: "0", + name: "EN", + desc: ''' + Whenever a particular bit is set to 1, that wakeup is also enabled. + Whenever a particular bit is set to 0, that wakeup cannot wake the device from low power. + ''', + }, + ] + }, + }, + + { multireg: + { name: "WAKE_STATUS", + desc: "A read only register of all current wake requests post enable mask", + swaccess: "ro", + hwaccess: "hwo", + resval: "0" + cname: "wake_status", + count: "NumWkups", + tags: [// Cannot auto-predict current wake request status + "excl:CsrNonInitTests:CsrExclWriteCheck"], + fields: [ + { bits: "0", + name: "VAL", + desc: ''' + Current value of wake requests + ''', + }, + ] + }, + }, + + { name: "RESET_EN_REGWEN", + desc: "Configuration enable for reset_en register", + swaccess: "rw0c", + hwaccess: "none", + fields: [ + { bits: "0", + resval: "1" + name: "EN", + desc: ''' + When 1, RESET_EN register can be configured. + When 0, RESET_EN register cannot be configured. + ''', + }, + ] + }, + + { multireg: + { name: "RESET_EN", + desc: "Bit mask for enabled reset requests", + swaccess: "rw", + hwaccess: "hro", + regwen: "RESET_EN_REGWEN", + resval: "0" + cname: "rstreq_en", + count: "NumRstReqs" + fields: [ + { bits: "0", + name: "EN", + desc: ''' + Whenever a particular bit is set to 1, that reset request is enabled. + Whenever a particular bit is set to 0, that reset request cannot reset the device. + ''', + }, + ] + }, + }, + + { multireg: + { name: "RESET_STATUS", + desc: "A read only register of all current reset requests post enable mask", + swaccess: "ro", + hwaccess: "hwo", + resval: "0" + cname: "reset_status", + count: "NumRstReqs", + fields: [ + { bits: "0", + name: "VAL", + desc: ''' + Current value of reset request + ''', + }, + ] + }, + }, + + { name: "WAKE_INFO_CAPTURE_DIS", + desc: "Disables capture by WAKE_INFO", + swaccess: "rw", + hwaccess: "hro", + resval: "0" + fields: [ + { bits: "0", + name: "VAL", + desc: ''' + When written to 1, WAKE INFO capture is suppressed. + When written to 0, WAKE_INFO capture is controlled by HW. + ''', + }, + ] + }, + + { name: "WAKE_INFO", + desc: ''' + Indicates which functions caused the chip to wakeup. + + This register starts recording upon a valid low power entry with WAKE_INFO_CAPTURE_DIS off. + Capture continues until it is explicitly disabled by setting WAKE_INFO_CAPTURE_DIS. + This means it is possible to capture multiple wakeup reasons. + ''', + swaccess: "rw1c", + hwaccess: "hrw", + hwext: "true", + hwqe: "true", + resval: "0" + fields: [ + { bits: "0:0", + name: "REASONS", + desc: "Various peripheral wake reasons" + }, + { bits: "1", + name: "FALL_THROUGH", + desc: ''' + The fall through wakeup reason indicates that despite setting a WFI and providing a low power + hint, an interrupt arrived at just the right time to break the executing core out of WFI. + + The power manager detects this condition, halts low power entry and reports as a wakeup reason + ''', + }, + { bits: "2", + name: "ABORT", + desc: ''' + The abort wakeup reason indicates that despite setting a WFI and providing a low power + hint, an active flash / lifecycle / otp transaction was ongoing when the power controller + attempted to initiate low power entry. + + The power manager detects this condition, halts low power entry and reports as a wakeup reason + ''', + }, + ] + tags: [// This regwen is completely under HW management and thus cannot be manipulated + // by software. + "excl:CsrNonInitTests:CsrExclCheck"] + }, + ] +} diff --git a/src/pwrmgr/data/pwrmgr.hjson.tpl b/src/pwrmgr/data/pwrmgr.hjson.tpl new file mode 100644 index 000000000..1c75a72a8 --- /dev/null +++ b/src/pwrmgr/data/pwrmgr.hjson.tpl @@ -0,0 +1,807 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +<% + # Additional reset + int_reset_reqs = rst_reqs["int"] + debug_reset_reqs = rst_reqs["debug"] +%>\ +{ + name: "pwrmgr", + human_name: "Power Manager", + one_line_desc: "Sequences on-chip power, clocks, and resets through different reset and power states", + one_paragraph_desc: ''' + Power Manager sequences on-chip power, clocks, and reset signals on power-on reset (aka cold boot), low power entry and exit, and non-power-on resets. + To this end, it can turn power domains on and off, control root resets with Reset Manager, and control root clock enables with AST and Clock Manager. + During power up, Power Manager is responsible for triggering OTP sensing, initiating Life Cycle Controller, coordinating with ROM Controller for the startup ROM check, and eventually releasing software to execute. + It features several countermeasures to deter fault injection (FI) attacks. + ''' + // Unique comportable IP identifier defined under KNOWN_CIP_IDS in the regtool. + cip_id: "20", + design_spec: "../doc", + dv_doc: "../doc/dv", + hw_checklist: "../doc/checklist", + sw_checklist: "/sw/device/lib/dif/dif_pwrmgr", + revisions: [ + { + version: "0.1.0", + life_stage: "L1", + design_stage: "D1", + verification_stage: "V0", // this module is not verified at the block level + dif_stage: "S0", + commit_id: "b2abc989498f072d9a5530f8aab9b58c1f92c9fb" + } + { + version: "1.0.0", + life_stage: "L1", + design_stage: "D2S", + verification_stage: "V2S", + dif_stage: "S2", + } + ] + clocking: [ + {clock: "clk_i", reset: "rst_ni", primary: true}, + {reset: "rst_main_ni"}, + {clock: "clk_slow_i", reset: "rst_slow_ni"}, + {clock: "clk_lc_i", reset: "rst_lc_ni"}, + {clock: "clk_esc_i", reset: "rst_esc_ni"} + ] + bus_interfaces: [ + { protocol: "tlul", direction: "device" } + ], + interrupt_list: [ + { name: "wakeup", desc: "Wake from low power state. See wake info for more details" }, + ], + alert_list: [ + { name: "fatal_fault", + desc: ''' + This fatal alert is triggered when a fatal TL-UL bus integrity fault is detected. + ''' + } + ], + features: [ + { name: "PWRMGR.STARTUP.LIFE_CYCLE_INITIALIZATION", + desc: "Wait completion of Life Cycle initialization." + } + { name: "PWRMGR.CLOCK_CONTROL.IO_IN_LOW_POWER", + desc: '''Controls whether the IO clock remains active in + low power mode. + ''' + } + { name: "PWRMGR.CLOCK_CONTROL.MAIN_IN_LOW_POWER", + desc: '''Controls whether the MAIN clock remains active in + low power mode. + ''' + } + { name: "PWRMGR.CLOCK_CONTROL.USB_IN_LOW_POWER", + desc: '''Controls whether the USB clock remains active in + low power mode. + ''' + } + { name: "PWRMGR.CLOCK_CONTROL.USB_WHEN_ACTIVE", + desc: "Controls whether the USB clock is enabled in active state." + } + { name: "PWRMGR.LOW_POWER.ENTRY", + desc: '''Controls of low power entry, and cases when low power is + not entered due to interrupts or specific units getting busy. + ''' + } + { name: "PWRMGR.LOW_POWER.DISABLE_POWER" + desc: '''Controls whether power is turned off for non-AON domains when + in low power. + ''' + } +% for wkup in Wkups: +<% + wakeup_name = wkup["module"].upper() + "_" + wkup["name"].upper() +%>\ + { name: "PWRMGR.LOW_POWER.${wakeup_name}_WAKEUP_ENABLE" + desc: "Enable wakeup request ${wkup["name"]} from ${wkup["module"]}." + } + { name: "PWRMGR.LOW_POWER.${wakeup_name}_WAKEUP_REQUEST" + desc: "Wakeup request ${wkup["name"]} from ${wkup["module"]}." + } +% endfor + { name: "PWRMGR.LOW_POWER.WAKE_INFO" + desc: "Record what caused the chip to wakeup from low power." + } + { name: "PWRMGR.RESET.CHECK_ROM_INTEGRITY", + desc: "Wait for successful completion of ROM integrity checks." + } +% for reset in rst_reqs["peripheral"]: +<% + description = reset["desc"] + reset_name = reset["module"].upper() + "_" + reset["name"].upper() + description = description[:1].upper() + description[1:].rstrip(".") +%>\ + { name: "PWRMGR.RESET.${reset_name}_ENABLE", + desc: "Enable reset request from ${reset["module"]}." + } + { name: "PWRMGR.RESET.${reset_name}_REQUEST", + desc: "Reset request from ${reset["module"]}." + } +% endfor + { name: "PWRMGR.RESET.ESCALATION_REQUEST", + desc: "Trigger reset in response to incoming escalation requests." + } + { name: "PWRMGR.RESET.ESCALATION_TIMEOUT", + desc: "Trigger reset in response to non-responsive escalation network." + } + { name: "PWRMGR.RESET.SW_RST_REQUEST", + desc: "Trigger reset in response to rstmgr's sw reset request." + } + { name: "PWRMGR.RESET.MAIN_POWER_GLITCH_RESET", + desc: "Trigger reset in response to glitch in main power." + } + { name: "PWRMGR.RESET.NDM_RESET_REQUEST", + desc: "Trigger reset in response to RV_DM ndm reset." + } + { name: "PWRMGR.RESET.POR_REQUEST", + desc: "Trigger reset in response to POR_N pin." + } + ] + + inter_signal_list: [ + { struct: "pwr_ast", + type: "req_rsp", + name: "pwr_ast", + act: "req", + package: "pwrmgr_pkg", + }, + + { struct: "pwr_rst", + type: "req_rsp", + name: "pwr_rst", + act: "req", + package: "pwrmgr_pkg", + }, + + { struct: "pwr_clk", + type: "req_rsp", + name: "pwr_clk", + act: "req", + package: "pwrmgr_pkg", + }, + + { struct: "pwr_otp", + type: "req_rsp", + name: "pwr_otp", + act: "req", + package: "pwrmgr_pkg", + }, + + { struct: "pwr_lc", + type: "req_rsp", + name: "pwr_lc", + act: "req", + package: "pwrmgr_pkg", + }, + + { struct: "pwr_flash", + type: "uni", + name: "pwr_flash", + act: "rcv", + package: "pwrmgr_pkg", + }, + + { struct: "esc_tx", + type: "uni", + name: "esc_rst_tx", + act: "rcv", + package: "prim_esc_pkg", + }, + + { struct: "esc_rx", + type: "uni", + name: "esc_rst_rx", + act: "req", + package: "prim_esc_pkg", + }, + + { struct: "pwr_cpu", + type: "uni", + name: "pwr_cpu", + act: "rcv", + package: "pwrmgr_pkg", + }, + + { struct: "logic", + width: ${NumWkups}, + type: "uni", + name: "wakeups", + act: "rcv", + package: "", + }, + + { struct: "logic", + width: ${NumRstReqs}, + type: "uni", + name: "rstreqs", + act: "rcv", + package: "", + }, + + { struct: "logic", + type: "uni", + name: "ndmreset_req", + act: "rcv", + }, + + { struct: "logic", + type: "uni", + name: "strap", + act: "req", + package: "", + }, + + { struct: "logic", + type: "uni", + name: "low_power", + act: "req", + package: "", + }, + + { struct: "pwrmgr_data", + type: "uni", + name: "rom_ctrl", + act: "rcv", + package: "rom_ctrl_pkg", + }, + + { struct: "lc_tx", + type: "uni", + name: "fetch_en", + act: "req", + package: "lc_ctrl_pkg", + }, + + { struct: "lc_tx", + type: "uni", + name: "lc_dft_en", + act: "rcv", + package: "lc_ctrl_pkg", + }, + + { struct: "lc_tx", + type: "uni", + name: "lc_hw_debug_en", + act: "rcv", + package: "lc_ctrl_pkg", + }, + + { struct: "mubi4", + type: "uni", + name: "sw_rst_req", + act: "rcv", + package: "prim_mubi_pkg", + }, + ], + + param_list: [ + { name: "NumWkups", + desc: "Number of wakeups", + type: "int", + default: "${NumWkups}", + local: "true" + }, + + % for wkup in Wkups: + { name: "${wkup['module'].upper()}_${wkup['name'].upper()}_IDX", + desc: "Vector index for ${wkup['module']} ${wkup['name']}, applies for WAKEUP_EN, WAKE_STATUS and WAKE_INFO", + type: "int", + default: "${loop.index}", + local: "true" + }, + + % endfor + + { name: "NumRstReqs", + desc: "Number of peripheral reset requets", + type: "int", + default: "${NumRstReqs}", + local: "true" + }, + + { name: "NumIntRstReqs", + desc: "Number of pwrmgr internal reset requets", + type: "int", + default: "${len(int_reset_reqs)}", + local: "true" + }, + + { name: "NumDebugRstReqs", + desc: "Number of debug reset requets", + type: "int", + default: "${len(debug_reset_reqs)}", + local: "true" + }, + + % for req in int_reset_reqs + debug_reset_reqs: + { name: "${f"Reset{req['name']}Idx"}", + desc: "Reset req idx for ${req['name']}", + type: "int", + default: "${loop.index + NumRstReqs}", + local: "true" + }, + % endfor + + ], + countermeasures: [ + { name: "BUS.INTEGRITY", + desc: "End-to-end bus integrity scheme." + } + { name: "LC_CTRL.INTERSIG.MUBI", + desc: "life cycle control / debug signals are multibit." + } + { name: "ROM_CTRL.INTERSIG.MUBI", + desc: "rom control done/good signals are multibit." + } + { name: "RSTMGR.INTERSIG.MUBI", + desc: "reset manager software request is multibit." + } + { name: "ESC_RX.CLK.BKGN_CHK", + desc: "Escalation receiver has a background timeout check" + } + { name: "ESC_RX.CLK.LOCAL_ESC", + desc: "Escalation receiver clock timeout has a local reset escalation" + } + { name: "FSM.SPARSE", + desc: "Sparse encoding for slow and fast state machines." + } + { name: "FSM.TERMINAL", + desc: ''' + When FSMs reach a bad state, go into a terminate state that does not + recover without user or external host intervention. + ''' + } + { name: "CTRL_FLOW.GLOBAL_ESC", + desc: "When global escalation is received, proceed directly to reset." + } + { name: "MAIN_PD.RST.LOCAL_ESC", + desc: "When main power domain reset glitches, proceed directly to reset." + } + { name: "CTRL.CONFIG.REGWEN", + desc: "Main control protected by regwen." + } + { name: "WAKEUP.CONFIG.REGWEN", + desc: "Wakeup configuration protected by regwen." + } + { name: "RESET.CONFIG.REGWEN", + desc: "Reset configuration protected by regwen." + } + + ] + + regwidth: "32", + registers: [ + + { name: "CTRL_CFG_REGWEN", + swaccess: "ro", + hwaccess: "hwo", + hwext: "true", + desc: ''' + Controls the configurability of the !!CONTROL register. + + This register ensures the contents do not change once a low power hint and + WFI has occurred. + + It unlocks whenever a low power transition has completed (transition back to the + ACTIVE state) for any reason. + ''', + + fields: [ + { bits: "0", + name: "EN", + desc: ''' + Configuration enable. + + This bit defaults to 1 and is set to 0 by hardware when low power entry is initiated. + When the device transitions back from low power state to active state, this bit is set + back to 1 to allow software configuration of !!CONTROL + ''', + resval: "1", + }, + ] + tags: [// This regwen is completely under HW management and thus cannot be manipulated + // by software. + "excl:CsrNonInitTests:CsrExclCheck"] + }, + + + { name: "CONTROL", + desc: "Control register", + swaccess: "rw", + hwaccess: "hro", + regwen: "CTRL_CFG_REGWEN", + tags: [// Turning off USB clock in active state impacts other CSRs + // at the chip level (in other blocks, such as clkmgr), + // so we exclude writing from this register. + "excl:CsrAllTests:CsrExclWrite"] + fields: [ + { bits: "0", + hwaccess: "hrw", + name: "LOW_POWER_HINT", + desc: ''' + The low power hint to power manager. + The hint is an indication for how the manager should treat the next WFI. + Once the power manager begins a low power transition, or if a valid reset request is registered, + this bit is automatically cleared by HW. + ''' + resval: "0" + enum: [ + { value: "0", + name: "None", + desc: ''' + No low power intent + ''' + }, + { value: "1", + name: "Low Power", + desc: ''' + Next WFI should trigger low power entry + ''' + }, + ] + tags: [// The regwen for this reg is RO. CSR seq can't support to check this reg + "excl:CsrAllTests:CsrExclAll"] + }, + + { bits: "4", + name: "CORE_CLK_EN", + desc: "core clock enable during low power state", + resval: "0" + enum: [ + { value: "0", + name: "Disabled", + desc: ''' + Core clock disabled during low power state + ''' + }, + { value: "1", + name: "Enabled", + desc: ''' + Core clock enabled during low power state + ''' + }, + ] + }, + + { bits: "5", + name: "IO_CLK_EN", + desc: "IO clock enable during low power state", + resval: "0" + enum: [ + { value: "0", + name: "Disabled", + desc: ''' + IO clock disabled during low power state + ''' + }, + { value: "1", + name: "Enabled", + desc: ''' + IO clock enabled during low power state + ''' + }, + ] + }, + + { bits: "6", + name: "USB_CLK_EN_LP", + desc: "USB clock enable during low power state", + resval: "0", + enum: [ + { value: "0", + name: "Disabled", + desc: ''' + USB clock disabled during low power state + ''' + }, + { value: "1", + name: "Enabled", + desc: ''' + USB clock enabled during low power state. + + However, if !!CONTROL.MAIN_PD_N is 0, USB clock is disabled + during low power state. + ''' + }, + ] + }, + + { bits: "7", + name: "USB_CLK_EN_ACTIVE", + desc: "USB clock enable during active power state", + resval: "1" + enum: [ + { value: "0", + name: "Disabled", + desc: ''' + USB clock disabled during active power state + ''' + }, + { value: "1", + name: "Enabled", + desc: ''' + USB clock enabled during active power state + ''' + }, + ] + }, + + { bits: "8", + name: "MAIN_PD_N", + desc: "Active low, main power domain power down", + resval: "1" + enum: [ + { value: "0", + name: "Power down", + desc: ''' + Main power domain is powered down during low power state. + ''' + }, + { value: "1", + name: "Power up", + desc: ''' + Main power domain is kept powered during low power state + ''' + }, + ] + }, + + + ], + }, + + { name: "CFG_CDC_SYNC", + swaccess: "rw", + hwaccess: "hrw", + hwqe: "true", + desc: ''' + The configuration registers CONTROL, WAKEUP_EN, RESET_EN are all written in the + fast clock domain but used in the slow clock domain. + + The configuration are not propagated across the clock boundary until this + register is triggered and read. See fields below for more details + ''', + + fields: [ + { bits: "0", + name: "SYNC", + desc: ''' + Configuration sync. When this bit is written to 1, a sync pulse is generated. When + the sync completes, this bit then self clears. + + Software should write this bit to 1, wait for it to clear, before assuming the slow clock + domain has accepted the programmed values. + ''', + resval: "0", + }, + ] + tags: [// This bit triggers a payload synchronization and self clears when complete. + // Do not write this bit as there will be side effects and the value will not persist + "excl:CsrNonInitTests:CsrExclWrite"] + }, + + { name: "WAKEUP_EN_REGWEN", + desc: "Configuration enable for wakeup_en register", + swaccess: "rw0c", + hwaccess: "none", + fields: [ + { bits: "0", + resval: "1" + name: "EN", + desc: ''' + When 1, WAKEUP_EN register can be configured. + When 0, WAKEUP_EN register cannot be configured. + ''', + }, + ] + }, + + { multireg: + { name: "WAKEUP_EN", + desc: "Bit mask for enabled wakeups", + swaccess: "rw", + hwaccess: "hro", + regwen: "WAKEUP_EN_REGWEN", + resval: "0" + cname: "wakeup_en", + count: "NumWkups" + fields: [ + { bits: "0", + name: "EN", + desc: ''' + Whenever a particular bit is set to 1, that wakeup is also enabled. + Whenever a particular bit is set to 0, that wakeup cannot wake the device from low power. + ''', + }, + ] + }, + }, + + { multireg: + { name: "WAKE_STATUS", + desc: "A read only register of all current wake requests post enable mask", + swaccess: "ro", + hwaccess: "hwo", + resval: "0" + cname: "wake_status", + count: "NumWkups", + tags: [// Cannot auto-predict current wake request status + "excl:CsrNonInitTests:CsrExclWriteCheck"], + fields: [ + { bits: "0", + name: "VAL", + desc: ''' + Current value of wake requests + ''', + }, + ] + }, + }, + + { name: "RESET_EN_REGWEN", + desc: "Configuration enable for reset_en register", + swaccess: "rw0c", + hwaccess: "none", + fields: [ + { bits: "0", + resval: "1" + name: "EN", + desc: ''' + When 1, RESET_EN register can be configured. + When 0, RESET_EN register cannot be configured. + ''', + }, + ] + }, + + { multireg: + { name: "RESET_EN", + desc: "Bit mask for enabled reset requests", + swaccess: "rw", + hwaccess: "hro", + regwen: "RESET_EN_REGWEN", + resval: "0" + cname: "rstreq_en", + count: "NumRstReqs" + fields: [ + { bits: "0", + name: "EN", + desc: ''' + Whenever a particular bit is set to 1, that reset request is enabled. + Whenever a particular bit is set to 0, that reset request cannot reset the device. + ''', + }, + ] + tags: [// Self resets should never be triggered by automated tests + "excl:CsrAllTests:CsrExclWrite"] + }, + }, + + { multireg: + { name: "RESET_STATUS", + desc: "A read only register of all current reset requests post enable mask", + swaccess: "ro", + hwaccess: "hwo", + resval: "0" + cname: "reset_status", + count: "NumRstReqs", + fields: [ + { bits: "0", + name: "VAL", + desc: ''' + Current value of reset request + ''', + }, + ] + }, + }, + + { name: "ESCALATE_RESET_STATUS", + desc: "A read only register of escalation reset request", + swaccess: "ro", + hwaccess: "hwo", + resval: "0" + fields: [ + { bits: "0", + name: "VAL", + desc: ''' + When 1, an escalation reset has been seen. + When 0, there is no escalation reset. + ''', + }, + ] + }, + + { name: "WAKE_INFO_CAPTURE_DIS", + desc: "Indicates which functions caused the chip to wakeup", + swaccess: "rw", + hwaccess: "hro", + resval: "0" + fields: [ + { bits: "0", + name: "VAL", + desc: ''' + When written to 1, this actively suppresses the wakeup info capture. + When written to 0, wakeup info capture timing is controlled by HW. + ''', + }, + ] + }, + + { name: "WAKE_INFO", + desc: ''' + Indicates which functions caused the chip to wakeup. + The wake info recording begins whenever the device begins a valid low power entry. + + This capture is continued until it is explicitly disabled through WAKE_INFO_CAPTURE_DIS. + This means it is possible to capture multiple wakeup reasons. + ''', + swaccess: "rw1c", + hwaccess: "hrw", + hwext: "true", + hwqe: "true", + resval: "0" + fields: [ + { bits: "${NumWkups-1}:0", + name: "REASONS", + desc: "Various peripheral wake reasons" + }, + { bits: "${NumWkups}", + name: "FALL_THROUGH", + desc: ''' + The fall through wakeup reason indicates that despite setting a WFI and providing a low power + hint, an interrupt arrived at just the right time to break the executing core out of WFI. + + The power manager detects this condition, halts low power entry and reports as a wakeup reason + ''', + }, + { bits: "${NumWkups+1}", + name: "ABORT", + desc: ''' + The abort wakeup reason indicates that despite setting a WFI and providing a low power + hint, an active flash / lifecycle / otp transaction was ongoing when the power controller + attempted to initiate low power entry. + + The power manager detects this condition, halts low power entry and reports as a wakeup reason + ''', + }, + ] + tags: [// This regwen is completely under HW management and thus cannot be manipulated + // by software. + "excl:CsrNonInitTests:CsrExclCheck"] + }, + + { name: "FAULT_STATUS", + desc: "A read only register that shows the existing faults", + swaccess: "ro", + hwaccess: "hrw", + sync: "clk_lc_i", + resval: "0" + fields: [ + { bits: "0", + name: "REG_INTG_ERR", + desc: ''' + When 1, an integrity error has occurred. + ''', + }, + + { bits: "1", + name: "ESC_TIMEOUT", + desc: ''' + When 1, an escalation clock / reset timeout has occurred. + ''', + }, + + { bits: "2", + name: "MAIN_PD_GLITCH", + desc: ''' + When 1, unexpected power glitch was observed on main PD. + ''', + }, + ] + }, + ] +} diff --git a/src/pwrmgr/data/pwrmgr.tpldesc.hjson b/src/pwrmgr/data/pwrmgr.tpldesc.hjson new file mode 100644 index 000000000..77ee4416a --- /dev/null +++ b/src/pwrmgr/data/pwrmgr.tpldesc.hjson @@ -0,0 +1,56 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +{ + template_param_list: [ + { + name: "topname" + desc: "Name of top-level design, e.g., 'darjeeling' or 'earlgrey'" + type: "string" + default: "" + } + { + name: "NumWkups" + desc: "Number of wakeup requests" + type: "int" + default: "6" + } + { + name: "Wkups" + desc: "A list of dictionaries describing each wakeup" + type: "object" + default: [ + { + name: "wkup_req" + width: "1" + module: "sysrst_ctrl_aon" + } + ] + } + { + name: "rst_reqs" + desc: '''A dictionary of reset requests indexed by type, as in 'peripheral', 'int', + 'debug'. + ''' + type: "object" + default: { + peripheral: [ + { + name: "rst_req" + width: "1" + module: "sysrst_ctrl_aon" + desc: "reset request running on AON clock" + } + ] + int: [] + debug: [] + } + } + { + name: "NumRstReqs" + desc: "The number of peripheral requests" + type: "int" + default: "2" + } + ] +} diff --git a/src/pwrmgr/data/pwrmgr_sec_cm_testplan.hjson b/src/pwrmgr/data/pwrmgr_sec_cm_testplan.hjson new file mode 100644 index 000000000..d867437b7 --- /dev/null +++ b/src/pwrmgr/data/pwrmgr_sec_cm_testplan.hjson @@ -0,0 +1,219 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Security countermeasures testplan extracted from the IP Hjson using reggen. +// +// This testplan is auto-generated only the first time it is created. This is +// because this testplan needs to be hand-editable. It is possible that these +// testpoints can go out of date if the spec is updated with new +// countermeasures. When `reggen` is invoked when this testplan already exists, +// It checks if the list of testpoints is up-to-date and enforces the user to +// make further manual updates. +// +// These countermeasures and their descriptions can be found here: +// .../pwrmgr/data/pwrmgr.hjson +// +// It is possible that the testing of some of these countermeasures may already +// be covered as a testpoint in a different testplan. This duplication is ok - +// the test would have likely already been developed. We simply map those tests +// to the testpoints below using the `tests` key. +// +// Please ensure that this testplan is imported in: +// .../pwrmgr/data/pwrmgr_testplan.hjson +{ + testpoints: [ + { + name: sec_cm_bus_integrity + desc: '''Verify the countermeasure(s) BUS.INTEGRITY. + This entry is covered by tl_access_test + (hw/dv/tools/dvsim/tests/tl_access_tests.hjson) + ''' + stage: V2S + tests: ["pwrmgr_tl_intg_err"] + } + { + name: sec_cm_lc_ctrl_intersig_mubi + desc: '''Verify the countermeasure(s) LC_CTRL.INTERSIG.MUBI. + + **Stimulus**: + - Use comprehensive stimulus - reset and wakeup - + as background traffic to ensure this counter measure + is valid for various states of fast and slow state. + - Drive lc_hw_debug_en_i and lc_dft_en_i with + mixed valid and invalid values. + + **Check**: + - Collect coverage by binding cip_mubi_cov_if to + tb.dut.lc_hw_debug_en_i and tb.dut.lc_dft_en_i + - Add assertion to check whether rom_intg_chk_dis + is set to '1' only when lc_dft_en_i or lc_hw_debug_en_i + is high. + ''' + stage: V2S + tests: ["pwrmgr_sec_cm_lc_ctrl_intersig_mubi"] + } + { + name: sec_cm_rom_ctrl_intersig_mubi + desc: '''Verify the countermeasure(s) ROM_CTRL.INTERSIG.MUBI. + + **Stimulus**: + - Use comprehensive stimulus - reset and wakeup - + as background traffic to ensure this counter measure + is valid for various states of fast and slow fsm. + - Drive rom_ctrl_i with mixed valid and invalid values. + + **Check**: + - Collect coverage by binding cip_mubi_cov_if to + tb.dut.rom_ctrl_i + ''' + stage: V2S + tests: ["pwrmgr_sec_cm_rom_ctrl_intersig_mubi"] + } + { + name: sec_cm_rstmgr_intersig_mubi + desc: '''Verify the countermeasure(s) RSTMGR.INTERSIG.MUBI. + + **Stimulus**: + - Drive tb.dut.sw_rst_req_i with mixed valid and invalid values + + **Check**: + - See sw rst only happens when dut gets valid value by + probing fast fsm state. The state has to move low power state. + - Collect coverage by binding cip_mubi_cov_if to + tb.dut.sw_rst_req_i + ''' + stage: V2S + tests: ["pwrmgr_sec_cm_rstmgr_intersig_mubi"] + } + { + name: sec_cm_esc_rx_clk_bkgn_chk + desc: '''Verify the countermeasure(s) ESC_RX.CLK.BKGN_CHK. + + **Stimulus**: + - At FastPwrStateActive state, create escalation clock + or reset failure by stopping clock or asserting reset. + + **Check**: + - Expecting fatal alert event and rstreqs[ResetEscIdx]. + - Add assertion to see if u_esc_timeout happens, then + rstreqs[ResetEscIdx] should be asserted. + - After the alert agent processese the alert + by asserting escalation reset, + see if dut is back to normal operation state. + ''' + stage: V2S + tests: ["pwrmgr_esc_clk_rst_malfunc"] + } + { + name: sec_cm_esc_rx_clk_local_esc + desc: '''Verify the countermeasure(s) ESC_RX.CLK.LOCAL_ESC. + + This is triggered by common cm primitives (SecCmPrimCount). + (https://github.com/lowRISC/opentitan/blob/master + /hw/dv/sv/cip_lib/doc/index.md#security-verification + -for-common-countermeasure-primitives) + + **Check**: + - Detect fast state transition to FastPwrStateResetPrep. + - Add assertion to check if u_sec_timeout happens, then + rstreqs[ResetEscIdx] should be asserted. + ''' + stage: V2S + tests: ["pwrmgr_sec_cm"] + } + { + name: sec_cm_fsm_sparse + desc: '''Verify the countermeasure(s) FSM.SPARSE. + This is triggered by common cm primitives (SecCmPrimSparseFsmFlop). + (https://github.com/lowRISC/opentitan/blob/master + /hw/dv/sv/cip_lib/doc/index.md#security-verification + -for-common-countermeasure-primitives) + ''' + stage: V2S + tests: ["pwrmgr_sec_cm"] + } + { + name: sec_cm_fsm_terminal + desc: '''Verify the countermeasure(s) FSM.TERMINAL. + + This is caused by any invalid (slow|fast) state. + + **Check**: + - If slow state is invalid, fast state becomes FastPwrStateInvalid, + pwr_ast_o.pwr_clamp =1 and pwr_ast_o.main_pd_n = 0. + - If fast state is invalid, pwr_rst_o.rst_lc_req is all one, + pwr_rst_o.rst_sys_req is all one and pwr_clk_o = 0. + Dut should be recovered by asserting rst_n = 0. + ''' + stage: V2S + tests: ["pwrmgr_sec_cm"] + } + { + name: sec_cm_ctrl_flow_global_esc + desc: '''Verify the countermeasure(s) CTRL_FLOW.GLOBAL_ESC. + + **Stimulus**: + - Send escalation request to esc_rst_tx_i + + **Check**: + - Check fast state transition to FastPwrStateResetPrep + - Add assertion to see if we get pwr_rst_o.rstreqs[ResetEscIdx] + set when dut receives esc_rst_tx_i + ''' + stage: V2S + tests: ["pwrmgr_global_esc"] + } + { + name: sec_cm_main_pd_rst_local_esc + desc: '''Verify the countermeasure(s) MAIN_PD.RST.LOCAL_ESC. + + **Stimulus**: + - Create power reset glitch by setting tb.dut.rst_main_ni + and tb.dut.pwr_ast_i.main_pok to 0 + + **Check**: + - Check fast state transition to FastPwrStateResetPrep + - Add assertion to see if we get pwr_rst_o.rstreqs[ResetMainPwrIdx] + ''' + stage: V2S + tests: ["pwrmgr_glitch"] + } + { + name: sec_cm_ctrl_config_regwen + desc: '''Verify the countermeasure(s) CTRL.CONFIG.REGWEN. + + **Stimulus**: + - Initiate low power transition by setting + PWRMGR.CONTROL.LOW_POWER_HINT to 1. Wait for a few cycle + to ensure the csr value propagates to slow clock domain. + Then issue csr write to PWRMGR.CONTROL + + **Check**: + - After the csr update under PWRMGR.CTRL_CFG_REGWEN = 0, + read back and check the value is not updated by + the csr update attempt. + ''' + stage: V2S + tests: ["pwrmgr_sec_cm_ctrl_config_regwen"] + } + { + name: sec_cm_wakeup_config_regwen + desc: '''Verify the countermeasure(s) WAKEUP.CONFIG.REGWEN. + + This is covered by auto csr test. + ''' + stage: V2S + tests: ["pwrmgr_csr_rw"] + } + { + name: sec_cm_reset_config_regwen + desc: '''Verify the countermeasure(s) RESET.CONFIG.REGWEN. + + This is covered by auto csr test. + ''' + stage: V2S + tests: ["pwrmgr_csr_rw"] + } + ] +} diff --git a/src/pwrmgr/data/pwrmgr_testplan.hjson b/src/pwrmgr/data/pwrmgr_testplan.hjson new file mode 100644 index 000000000..b545255a3 --- /dev/null +++ b/src/pwrmgr/data/pwrmgr_testplan.hjson @@ -0,0 +1,372 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +{ + name: "pwrmgr" + // TODO: remove the common testplans if not applicable + import_testplans: ["hw/dv/tools/dvsim/testplans/csr_testplan.hjson", + "hw/dv/tools/dvsim/testplans/intr_test_testplan.hjson", + "hw/dv/tools/dvsim/testplans/tl_device_access_types_testplan.hjson", + "hw/dv/tools/dvsim/testplans/stress_all_with_reset_testplan.hjson", + "hw/dv/tools/dvsim/testplans/sec_cm_count_testplan.hjson", + "hw/dv/tools/dvsim/testplans/sec_cm_fsm_testplan.hjson", + // TODO: Top-level specific Hjson imported here. This will likely be resolved + // once we move to IPgen flow. + "pwrmgr_sec_cm_testplan.hjson"] + testpoints: [ + { + name: smoke + desc: ''' + Smoke test exercising the pwrmgr state transitions. + + - Brings pwrmgr out of POR. + - Enables wakeup. + - Triggers SW initiated low power transition with reset settings + in `control` CSR. + - Triggers wakeup. + - Enables and triggers a reset. + - Waits for pwrmgr to be out of reset. + + **Stimulus**: + - CSR writes to `wakeup_en`, `reset_en`, and `low_power_hint`. + - Needs many input pins to line up correctly in order to prevent the + pwrmgr from waiting forever. Most of these are set in response + to outputs, and are checked by SVA. + + **Checks**: + - The fast fsm becomes active when `fetch_en_o` output rises. + - The wakeup and reset causes are as expected reading CSRs + `wake_status` and `reset_status`. + - The output `pwr_rst_req.reset_cause` matches a low power or + reset cause. + - The output `pwr_rst_req.rstreqs` matches the enabled resets. + ''' + stage: V1 + tests: ["pwrmgr_smoke"] + } + { + name: wakeup + desc: ''' + Test random wakeup, wakeup_en, wake_info_capture_dis, and + interrupt. + + The different wakeup inputs can be disabled via bits in the + `wakeup_en` CSR. Update of `wakeup_info` can be disabled + via the `wake_info_capture_dis` CSR. Any wakeup causes an + interrupt unless interrupts are disabled. + + **Stimulus**: + - Sets `wakeup_en` randomly but don't set it to zero, or the + test will timeout. + - Set `wake_info_capture_dis` randomly on and off. + - Bring pwrmgr to low power. + - Set `wakeups_i` inputs randomly. + - Set `intr_enable` randomly. + + **Checks**: + - The fast fsm becomes active when `fetch_en_o` output rises. + - Depending on `wakeups_i`: + - If all wakeups are disabled, wait some time checking the + state remains inactive. + - Set `wakeups_i` so at least one is enabled. + - Checks `wakeup_status` CSR during transition to active state + since the reset involved will clear the wakeups_i input. + - Checks the `wake_info` CSR. + - Checks the output `pwr_rst_req.reset_cause` is `LowPwrEntry`. + - Check that `intr_wakeup_o` is set according to `intr_enable` CSR. + - Coverage collected by `wakeup_cg` and `wakeup_intr_cg`. + ''' + stage: V2 + tests: ["pwrmgr_wakeup"] + } + { + name: control_clks + desc: ''' + Test CSR control of peripheral clocks during low power. + + The peripheral clocks can be configured to remain on or be turned + off during low power with bits in the `control` CSR register. The + usb clock can also be configured off in active mode. + + **Stimulus**: + - Sets these control bits at random. + - Cause a low power transition and wakeup. + + **Checks**: + - The clock enable outputs to the AST clocks during a low + power transition match the control bits. + - The usb clock enable is also checked during active mode against + the control register. + ''' + stage: V2 + tests: ["pwrmgr_wakeup"] + } + { + name: aborted_low_power + desc: ''' + Test aborted low power transitions. + + Low power transitions can be aborted in two cases: + - The processor gets an interrupt soon after a low power entry is + triggered. + - OTP, LC, or FLASH are not idle. + This test aborts low power transitions, and disables any wakeups, + so the test would timeout if low power was entered. + + **Stimulus**: + - Bring pwrmgr to low power. + - Either disable `pwr_cpu.core_sleeping` or keep some of `lc_idle`, + `otp_idle`, or `flash_idle` inputs off. + - Disable all wakeup enables. + - Randomly set `wakeup_info_capture_dis` CSR. + + **Checks**: + - The `ctrl_cfg_regwen` CSR reads as 1 on the first attempt. + - Checks the output `pwr_rst_req.reset_cause` doesn't change for + a bounded amount of time. + - Check that the `wakeup_info` CSR flags either `fall_through` or + `abort` events when capture is enabled. + ''' + stage: V2 + tests: ["pwrmgr_aborted_low_power", "pwrmgr_lowpower_invalid"] + } + { + name: reset + desc: ''' + Test random reset and reset_en. + + Conditional reset inputs can be disabled via bits in the `reset_en` + CSR, while escalation and main power are unconditional. Resets can + be triggered either in active or low power state. + + **Stimulus**: + - Sets `reset_en` randomly. + - Randomly choose whether to put the unit in low power mode. + - Generate resets randomly in value and time: + - Conditionals via rstreqs_i, + - Main power glitch via rst_main_ni. + - Escalation via `esc_rst_tx_i`. + - Sw reset from rstmgr via `sw_rst_req_i`. + + **Checks**: + - The fast fsm becomes active when `fetch_en_o` output rises. + - Checks the `reset_status` CSRs. + - Checks `ip_clk_en` output has a low transition. + - SVA that when `pwr_rst_req.reset_cause` is HwReq, and the output + `pwr_rst_req.rstreqs` matches the unconditional and enabled + conditional resets inputs. + ''' + stage: V2 + tests: ["pwrmgr_reset", "pwrmgr_reset_invalid"] + } + { + name: main_power_glitch_reset + desc: ''' + Test reset due to a glitch in main power. + + A power glitch causes an unconditional reset. + + **Stimulus**: + - Set the rst_main_ni input low indicating a main power glitch. + + **Checks**: + - The fast fsm becomes active when `fetch_en_o` output rises. + - Checks the `reset_status` CSRs. + - Checks `ip_clk_en` output has a low transition. + - Checks the output `pwr_rst_req.reset_cause` matches HwReq. + - Checks the output `pwr_rst_req.rstreqs` matches power glitch. + ''' + stage: V2 + tests: ["pwrmgr_reset"] + } + { + name: reset_wakeup_race + desc: ''' + Test wakeup from low power and reset request almost coinciding. + + If a wakeup from low power and a reset occur at nearly the same time + the system handles them one at a time. + + **Stimulus**: + - Trigger reset and wakeup from low power as described for other + testpoints. + - Issue reset and wakeup a random number of cycles after the slow + state machine is in LowPower state. + - This also checks them coinciding. + + **Check**: + - Similar tests as for the wakeup and reset testpoints, except + making sure they happen per the triggering order. + ''' + stage: V2 + tests: ["pwrmgr_wakeup_reset"] + } + { + name: lowpower_wakeup_race + desc: ''' + Test wakeups coming close to lowpower entry. + + If low power entry and a wakeup are closely aligned the hardware + could get confused. Notice this is very unlikely, since wakeup is + only sensed when the slow fsm is in LowPower state. + + **Stimulus**: + - Trigger low power entry as described for other testpoints. + - Have all wakeups enabled. + - Assert wakeups_i in the temporal neighborhood of low power + entry. + + **Check**: + - No timeout occurs. + - Either pwrmgr remains active or a full low power cycle occurs. + ''' + stage: V2 + tests: ["pwrmgr_lowpower_wakeup_race"] + } + { + name: disable_rom_integrity_check + desc: ''' + Test rom integrity check is disabled under life cycle test states. + + While running a series of reset event, at FastPwrStateRomCheck + state, + - Drive lc_hw_debug_en_i and lc_dft_en_i to random value + excluding {lc_ctrl_pkg::On, lc_ctrl_pkg::On} for both ports. + - Set rom_ctrl_i.good = Mubi4False. + - Wait for a while to make sure fsm state check is not FastPwrStateActive. + + Then, + - Drive lc_hw_debug_en_i and lc_dft_en_i to {lc_ctrl_pkg::On, lc_ctrl_pkg::On} + - Check test finish gracefully. + + Try these steps with different lc_ctrl inputs. + ''' + stage: V2 + tests: ["pwrmgr_disable_rom_integrity_check"] + } + { + name: escalation_timeout + desc: '''This tests the escalation timeout feature. + + If the escalation network doesn't respond to an outgoing "health" + requests within 128 cycles pwrmgr should issue an escalation reset + request. + + **Stimulus**: + - Cause the external escalation network to stop responding, either + disabling the clock or jamming the differential pairs. + + **Check**: + - After 128 cycles of inactivity an escalation reset should be + triggered. + ''' + stage: V3 + tests: ["pwrmgr_escalation_timeout"] + } + { + name: stress_all + desc: '''This runs random sequences in succession. + + Randomly chooses from the following sequences: + - pwrmgr_aborted_low_power_vseq + - pwrmgr_lowpower_wakeup_race_vseq + - pwrmgr_reset_vseq + - pwrmgr_smoke_vseq + - pwrmgr_wakeup_reset_vseq + - pwrmgr_wakeup_vseq + ''' + stage: V2 + tests: ["pwrmgr_stress_all"] + } + ] + + covergroups: [ + { + name: wakeup_ctrl_cg + desc: ''' + Collects coverage on wakeup enable and capture functionality. + + This is collected per individual wakeup bit. Covergroup contains + coverpoints for the `wakeup_en` CSR bit, `wakeup_info_capture_dis` + CSR, `wakeups_i` input bit, and `wakeup_status` CSR bit, and their + cross. + ''' + } + { + name: wakeup_intr_cg + desc: ''' + Collects coverage on interrupts for wakeup functionality. + + This is collected per individual wakeup bit. Covergroup contains + coverpoints for the `intr_en` CSR, the `wakeup_status` CSR bit, + the `intr_status` CSR, the output `intr_wakeup` port, and their + cross. + ''' + } + { + name: control_cg + desc: ''' + Collects coverage on clock and power bits from `control` CSR during + a lowpower transition and active state. + ''' + } + { + name: hw_reset_0_cg + desc: ''' + Collects coverage related to external reset `0`. + + Covergroup contains coverpoints for the `rstreqs_i[0]` external + reset input, its corresponding bit in `reset_en` CSR, and whether + this reset is asserted during low power state, and suitable crosses. + ''' + } + { + name: hw_reset_1_cg + desc: ''' + Collects coverage related to external reset `1`. + + Covergroup contains coverpoints for the `rstreqs_i[1]` external + reset input, its corresponding bit in `reset_en` CSR, and whether + this reset is asserted during low power state, and suitable crosses. + ''' + } + { + name: rstmgr_sw_reset_cg + desc: ''' + Collects coverage on the software reset from rstmgr. + + Covergroup contains a coverpoint for the input `sw_rst_req_i` from + rstmgr. + ''' + } + { + name: main_power_reset_cg + desc: ''' + Collects coverage on resets due to a main power glitch. + + Covergroup contains a coverpoint for the input `rst_main_i` that + triggers a power glitch reset, and whether this reset is asserted + during low power state. + ''' + } + { + name: esc_reset_cg + desc: ''' + Collects coverage on resets due to escalation. + + Covergroup contains a coverpoint for the input `esc_rst_tx_i` that + triggers an escalation reset, and whether this reset is asserted + during low power state. + ''' + } + { + name: reset_wakeup_distance_cg + desc: ''' + Covergroup contains a coverpoint for the difference between the + cycles when the reset and the wakeup were received in the inputs. + The difference is positive when reset happened after wakeup, and + zero when the two happened at the same clock cycle. + ''' + } + ] +} diff --git a/src/pwrmgr/doc/checklist.md b/src/pwrmgr/doc/checklist.md new file mode 100644 index 000000000..1fe8d2a7a --- /dev/null +++ b/src/pwrmgr/doc/checklist.md @@ -0,0 +1,266 @@ +# PWRMGR Checklist + +This checklist is for [Hardware Stage](../../../../../doc/project_governance/development_stages.md) transitions for the [PWRMGR peripheral.](../README.md) +All checklist items refer to the content in the [Checklist.](../../../../../doc/project_governance/checklist/README.md) + +## Design Checklist + +### D1 + +Type | Item | Resolution | Note/Collaterals +--------------|--------------------------------|-------------|------------------ +Documentation | [SPEC_COMPLETE][] | Done |[PWRMGR Design Spec](../README.md) +Documentation | [CSR_DEFINED][] | Done | +RTL | [CLKRST_CONNECTED][] | Done | +RTL | [IP_TOP][] | Done | +RTL | [IP_INSTANTIABLE][] | Done | +RTL | [PHYSICAL_MACROS_DEFINED_80][] | N/A | +RTL | [FUNC_IMPLEMENTED][] | Done | +RTL | [ASSERT_KNOWN_ADDED][] | Done | +Code Quality | [LINT_SETUP][] | Done | + +[SPEC_COMPLETE]: ../../../../../doc/project_governance/checklist/README.md#spec_complete +[CSR_DEFINED]: ../../../../../doc/project_governance/checklist/README.md#csr_defined +[CLKRST_CONNECTED]: ../../../../../doc/project_governance/checklist/README.md#clkrst_connected +[IP_TOP]: ../../../../../doc/project_governance/checklist/README.md#ip_top +[IP_INSTANTIABLE]: ../../../../../doc/project_governance/checklist/README.md#ip_instantiable +[PHYSICAL_MACROS_DEFINED_80]: ../../../../../doc/project_governance/checklist/README.md#physical_macros_defined_80 +[FUNC_IMPLEMENTED]: ../../../../../doc/project_governance/checklist/README.md#func_implemented +[ASSERT_KNOWN_ADDED]: ../../../../../doc/project_governance/checklist/README.md#assert_known_added +[LINT_SETUP]: ../../../../../doc/project_governance/checklist/README.md#lint_setup + +### D2 + +Type | Item | Resolution | Note/Collaterals +--------------|---------------------------|-------------|------------------ +Documentation | [NEW_FEATURES][] | Done | +Documentation | [BLOCK_DIAGRAM][] | Done | +Documentation | [DOC_INTERFACE][] | Done | +Documentation | [DOC_INTEGRATION_GUIDE][] | Waived | This checklist item has been added retrospectively. +Documentation | [MISSING_FUNC][] | Done | +Documentation | [FEATURE_FROZEN][] | Done | +RTL | [FEATURE_COMPLETE][] | Done | +RTL | [PORT_FROZEN][] | Done | +RTL | [ARCHITECTURE_FROZEN][] | Done | +RTL | [REVIEW_TODO][] | Done | +RTL | [STYLE_X][] | Done | +RTL | [CDC_SYNCMACRO][] | N/A | +Code Quality | [LINT_PASS][] | Done | +Code Quality | [CDC_SETUP][] | Waived | No block-level flow available - waived to top-level signoff. +Code Quality | [RDC_SETUP][] | Waived | No block-level flow available - waived to top-level signoff. +Code Quality | [AREA_CHECK][] | Done | +Code Quality | [TIMING_CHECK][] | Done | +Security | [SEC_CM_DOCUMENTED][] | Done | + +[NEW_FEATURES]: ../../../../../doc/project_governance/checklist/README.md#new_features +[BLOCK_DIAGRAM]: ../../../../../doc/project_governance/checklist/README.md#block_diagram +[DOC_INTERFACE]: ../../../../../doc/project_governance/checklist/README.md#doc_interface +[DOC_INTEGRATION_GUIDE]: ../../../../../doc/project_governance/checklist/README.md#doc_integration_guide +[MISSING_FUNC]: ../../../../../doc/project_governance/checklist/README.md#missing_func +[FEATURE_FROZEN]: ../../../../../doc/project_governance/checklist/README.md#feature_frozen +[FEATURE_COMPLETE]: ../../../../../doc/project_governance/checklist/README.md#feature_complete +[PORT_FROZEN]: ../../../../../doc/project_governance/checklist/README.md#port_frozen +[ARCHITECTURE_FROZEN]: ../../../../../doc/project_governance/checklist/README.md#architecture_frozen +[REVIEW_TODO]: ../../../../../doc/project_governance/checklist/README.md#review_todo +[STYLE_X]: ../../../../../doc/project_governance/checklist/README.md#style_x +[CDC_SYNCMACRO]: ../../../../../doc/project_governance/checklist/README.md#cdc_syncmacro +[LINT_PASS]: ../../../../../doc/project_governance/checklist/README.md#lint_pass +[CDC_SETUP]: ../../../../../doc/project_governance/checklist/README.md#cdc_setup +[RDC_SETUP]: ../../../../../doc/project_governance/checklist/README.md#rdc_setup +[AREA_CHECK]: ../../../../../doc/project_governance/checklist/README.md#area_check +[TIMING_CHECK]: ../../../../../doc/project_governance/checklist/README.md#timing_check +[SEC_CM_DOCUMENTED]: ../../../../../doc/project_governance/checklist/README.md#sec_cm_documented + +### D2S + + Type | Item | Resolution | Note/Collaterals +--------------|------------------------------|-------------|------------------ +Security | [SEC_CM_ASSETS_LISTED][] | Done | +Security | [SEC_CM_IMPLEMENTED][] | Done | +Security | [SEC_CM_RND_CNST][] | N/A | +Security | [SEC_CM_NON_RESET_FLOPS][] | Done | +Security | [SEC_CM_SHADOW_REGS][] | Done | +Security | [SEC_CM_RTL_REVIEWED][] | Done | +Security | [SEC_CM_COUNCIL_REVIEWED][] | Done | + +[SEC_CM_ASSETS_LISTED]: ../../../../../doc/project_governance/checklist/README.md#sec_cm_assets_listed +[SEC_CM_IMPLEMENTED]: ../../../../../doc/project_governance/checklist/README.md#sec_cm_implemented +[SEC_CM_RND_CNST]: ../../../../../doc/project_governance/checklist/README.md#sec_cm_rnd_cnst +[SEC_CM_NON_RESET_FLOPS]: ../../../../../doc/project_governance/checklist/README.md#sec_cm_non_reset_flops +[SEC_CM_SHADOW_REGS]: ../../../../../doc/project_governance/checklist/README.md#sec_cm_shadow_regs +[SEC_CM_RTL_REVIEWED]: ../../../../../doc/project_governance/checklist/README.md#sec_cm_rtl_reviewed +[SEC_CM_COUNCIL_REVIEWED]: ../../../../../doc/project_governance/checklist/README.md#sec_cm_council_reviewed + +### D3 + + Type | Item | Resolution | Note/Collaterals +--------------|-------------------------|-------------|------------------ +Documentation | [NEW_FEATURES_D3][] | Not Started | +RTL | [TODO_COMPLETE][] | Not Started | +Code Quality | [LINT_COMPLETE][] | Not Started | +Code Quality | [CDC_COMPLETE][] | Not Started | +Code Quality | [RDC_COMPLETE][] | Not Started | +Review | [REVIEW_RTL][] | Not Started | +Review | [REVIEW_DELETED_FF][] | Not Started | +Review | [REVIEW_SW_CHANGE][] | Not Started | +Review | [REVIEW_SW_ERRATA][] | Not Started | +Review | Reviewer(s) | Not Started | +Review | Signoff date | Not Started | + +[NEW_FEATURES_D3]: ../../../../../doc/project_governance/checklist/README.md#new_features_d3 +[TODO_COMPLETE]: ../../../../../doc/project_governance/checklist/README.md#todo_complete +[LINT_COMPLETE]: ../../../../../doc/project_governance/checklist/README.md#lint_complete +[CDC_COMPLETE]: ../../../../../doc/project_governance/checklist/README.md#cdc_complete +[RDC_COMPLETE]: ../../../../../doc/project_governance/checklist/README.md#rdc_complete +[REVIEW_RTL]: ../../../../../doc/project_governance/checklist/README.md#review_rtl +[REVIEW_DELETED_FF]: ../../../../../doc/project_governance/checklist/README.md#review_deleted_ff +[REVIEW_SW_CHANGE]: ../../../../../doc/project_governance/checklist/README.md#review_sw_change +[REVIEW_SW_ERRATA]: ../../../../../doc/project_governance/checklist/README.md#review_sw_errata + +## Verification Checklist + +### V1 + + Type | Item | Resolution | Note/Collaterals +--------------|---------------------------------------|-------------|------------------ +Documentation | [DV_DOC_DRAFT_COMPLETED][] | Done | [PWRMGR DV document](../dv/README.md) +Documentation | [TESTPLAN_COMPLETED][] | Done | [PWRMGR testplan](../dv/README.md#testplan) +Testbench | [TB_TOP_CREATED][] | Done | +Testbench | [PRELIMINARY_ASSERTION_CHECKS_ADDED][]| Done | +Testbench | [SIM_TB_ENV_CREATED][] | Done | +Testbench | [SIM_RAL_MODEL_GEN_AUTOMATED][] | Done | +Testbench | [CSR_CHECK_GEN_AUTOMATED][] | Done | +Testbench | [TB_GEN_AUTOMATED][] | Done | +Tests | [SIM_SMOKE_TEST_PASSING][] | Done | +Tests | [SIM_CSR_MEM_TEST_SUITE_PASSING][] | Done | Block has no mem +Tests | [FPV_MAIN_ASSERTIONS_PROVEN][] | N/A | +Tool Setup | [SIM_ALT_TOOL_SETUP][] | Done | Xcelium +Regression | [SIM_SMOKE_REGRESSION_SETUP][] | Done | +Regression | [SIM_NIGHTLY_REGRESSION_SETUP][] | Done | +Regression | [FPV_REGRESSION_SETUP][] | N/A | +Coverage | [SIM_COVERAGE_MODEL_ADDED][] | Done | +Code Quality | [TB_LINT_SETUP][] | Done | +Integration | [PRE_VERIFIED_SUB_MODULES_V1][] | Done | +Review | [DESIGN_SPEC_REVIEWED][] | Done | +Review | [TESTPLAN_REVIEWED][] | Done | +Review | [STD_TEST_CATEGORIES_PLANNED][] | Done | Exceptions: debug, power, performance +Review | [V2_CHECKLIST_SCOPED][] | Done | + +[DV_DOC_DRAFT_COMPLETED]: ../../../../../doc/project_governance/checklist/README.md#dv_doc_draft_completed +[TESTPLAN_COMPLETED]: ../../../../../doc/project_governance/checklist/README.md#testplan_completed +[TB_TOP_CREATED]: ../../../../../doc/project_governance/checklist/README.md#tb_top_created +[PRELIMINARY_ASSERTION_CHECKS_ADDED]: ../../../../../doc/project_governance/checklist/README.md#preliminary_assertion_checks_added +[SIM_TB_ENV_CREATED]: ../../../../../doc/project_governance/checklist/README.md#sim_tb_env_created +[SIM_RAL_MODEL_GEN_AUTOMATED]: ../../../../../doc/project_governance/checklist/README.md#sim_ral_model_gen_automated +[CSR_CHECK_GEN_AUTOMATED]: ../../../../../doc/project_governance/checklist/README.md#csr_check_gen_automated +[TB_GEN_AUTOMATED]: ../../../../../doc/project_governance/checklist/README.md#tb_gen_automated +[SIM_SMOKE_TEST_PASSING]: ../../../../../doc/project_governance/checklist/README.md#sim_smoke_test_passing +[SIM_CSR_MEM_TEST_SUITE_PASSING]: ../../../../../doc/project_governance/checklist/README.md#sim_csr_mem_test_suite_passing +[FPV_MAIN_ASSERTIONS_PROVEN]: ../../../../../doc/project_governance/checklist/README.md#fpv_main_assertions_proven +[SIM_ALT_TOOL_SETUP]: ../../../../../doc/project_governance/checklist/README.md#sim_alt_tool_setup +[SIM_SMOKE_REGRESSION_SETUP]: ../../../../../doc/project_governance/checklist/README.md#sim_smoke_regression_setup +[SIM_NIGHTLY_REGRESSION_SETUP]: ../../../../../doc/project_governance/checklist/README.md#sim_nightly_regression_setup +[FPV_REGRESSION_SETUP]: ../../../../../doc/project_governance/checklist/README.md#fpv_regression_setup +[SIM_COVERAGE_MODEL_ADDED]: ../../../../../doc/project_governance/checklist/README.md#sim_coverage_model_added +[TB_LINT_SETUP]: ../../../../../doc/project_governance/checklist/README.md#tb_lint_setup +[PRE_VERIFIED_SUB_MODULES_V1]: ../../../../../doc/project_governance/checklist/README.md#pre_verified_sub_modules_v1 +[DESIGN_SPEC_REVIEWED]: ../../../../../doc/project_governance/checklist/README.md#design_spec_reviewed +[TESTPLAN_REVIEWED]: ../../../../../doc/project_governance/checklist/README.md#testplan_reviewed +[STD_TEST_CATEGORIES_PLANNED]: ../../../../../doc/project_governance/checklist/README.md#std_test_categories_planned +[V2_CHECKLIST_SCOPED]: ../../../../../doc/project_governance/checklist/README.md#v2_checklist_scoped + +### V2 + + Type | Item | Resolution | Note/Collaterals +--------------|-----------------------------------------|-------------|------------------ +Documentation | [DESIGN_DELTAS_CAPTURED_V2][] | Done | +Documentation | [DV_DOC_COMPLETED][] | Done | +Testbench | [FUNCTIONAL_COVERAGE_IMPLEMENTED][] | Done | +Testbench | [ALL_INTERFACES_EXERCISED][] | Done | +Testbench | [ALL_ASSERTION_CHECKS_ADDED][] | Done | +Testbench | [SIM_TB_ENV_COMPLETED][] | Done | +Tests | [SIM_ALL_TESTS_PASSING][] | Done | +Tests | [FPV_ALL_ASSERTIONS_WRITTEN][] | NA | +Tests | [FPV_ALL_ASSUMPTIONS_REVIEWED][] | NA | +Tests | [SIM_FW_SIMULATED][] | Done | +Regression | [SIM_NIGHTLY_REGRESSION_V2][] | Done | +Coverage | [SIM_CODE_COVERAGE_V2][] | Done | +Coverage | [SIM_FUNCTIONAL_COVERAGE_V2][] | Done | +Coverage | [FPV_CODE_COVERAGE_V2][] | NA | +Coverage | [FPV_COI_COVERAGE_V2][] | NA | +Integration | [PRE_VERIFIED_SUB_MODULES_V2][] | Done | +Issues | [NO_HIGH_PRIORITY_ISSUES_PENDING][] | Done | +Issues | [ALL_LOW_PRIORITY_ISSUES_ROOT_CAUSED][] | Done | +Review | [DV_DOC_TESTPLAN_REVIEWED][] | Done | +Review | [V3_CHECKLIST_SCOPED][] | Done | + +[DESIGN_DELTAS_CAPTURED_V2]: ../../../../../doc/project_governance/checklist/README.md#design_deltas_captured_v2 +[DV_DOC_COMPLETED]: ../../../../../doc/project_governance/checklist/README.md#dv_doc_completed +[FUNCTIONAL_COVERAGE_IMPLEMENTED]: ../../../../../doc/project_governance/checklist/README.md#functional_coverage_implemented +[ALL_INTERFACES_EXERCISED]: ../../../../../doc/project_governance/checklist/README.md#all_interfaces_exercised +[ALL_ASSERTION_CHECKS_ADDED]: ../../../../../doc/project_governance/checklist/README.md#all_assertion_checks_added +[SIM_TB_ENV_COMPLETED]: ../../../../../doc/project_governance/checklist/README.md#sim_tb_env_completed +[SIM_ALL_TESTS_PASSING]: ../../../../../doc/project_governance/checklist/README.md#sim_all_tests_passing +[FPV_ALL_ASSERTIONS_WRITTEN]: ../../../../../doc/project_governance/checklist/README.md#fpv_all_assertions_written +[FPV_ALL_ASSUMPTIONS_REVIEWED]: ../../../../../doc/project_governance/checklist/README.md#fpv_all_assumptions_reviewed +[SIM_FW_SIMULATED]: ../../../../../doc/project_governance/checklist/README.md#sim_fw_simulated +[SIM_NIGHTLY_REGRESSION_V2]: ../../../../../doc/project_governance/checklist/README.md#sim_nightly_regression_v2 +[SIM_CODE_COVERAGE_V2]: ../../../../../doc/project_governance/checklist/README.md#sim_code_coverage_v2 +[SIM_FUNCTIONAL_COVERAGE_V2]: ../../../../../doc/project_governance/checklist/README.md#sim_functional_coverage_v2 +[FPV_CODE_COVERAGE_V2]: ../../../../../doc/project_governance/checklist/README.md#fpv_code_coverage_v2 +[FPV_COI_COVERAGE_V2]: ../../../../../doc/project_governance/checklist/README.md#fpv_coi_coverage_v2 +[PRE_VERIFIED_SUB_MODULES_V2]: ../../../../../doc/project_governance/checklist/README.md#pre_verified_sub_modules_v2 +[NO_HIGH_PRIORITY_ISSUES_PENDING]: ../../../../../doc/project_governance/checklist/README.md#no_high_priority_issues_pending +[ALL_LOW_PRIORITY_ISSUES_ROOT_CAUSED]:../../../../../doc/project_governance/checklist/README.md#all_low_priority_issues_root_caused +[DV_DOC_TESTPLAN_REVIEWED]: ../../../../../doc/project_governance/checklist/README.md#dv_doc_testplan_reviewed +[V3_CHECKLIST_SCOPED]: ../../../../../doc/project_governance/checklist/README.md#v3_checklist_scoped + +### V2S + + Type | Item | Resolution | Note/Collaterals +--------------|-----------------------------------------|-------------|------------------ +Documentation | [SEC_CM_TESTPLAN_COMPLETED][] | Done | +Tests | [FPV_SEC_CM_VERIFIED][] | Done | +Tests | [SIM_SEC_CM_VERIFIED][] | Done | +Coverage | [SIM_COVERAGE_REVIEWED][] | Done | UNR will be added after intra structure issue is resolved. +Review | [SEC_CM_DV_REVIEWED][] | Done | + +[SEC_CM_TESTPLAN_COMPLETED]: ../../../../../doc/project_governance/checklist/README.md#sec_cm_testplan_completed +[FPV_SEC_CM_VERIFIED]: ../../../../../doc/project_governance/checklist/README.md#fpv_sec_cm_verified +[SIM_SEC_CM_VERIFIED]: ../../../../../doc/project_governance/checklist/README.md#sim_sec_cm_verified +[SIM_COVERAGE_REVIEWED]: ../../../../../doc/project_governance/checklist/README.md#sim_coverage_reviewed +[SEC_CM_DV_REVIEWED]: ../../../../../doc/project_governance/checklist/README.md#sec_cm_dv_reviewed + +### V3 + + Type | Item | Resolution | Note/Collaterals +--------------|-----------------------------------|-------------|------------------ +Documentation | [DESIGN_DELTAS_CAPTURED_V3][] | Not Started | +Tests | [X_PROP_ANALYSIS_COMPLETED][] | Not Started | +Tests | [FPV_ASSERTIONS_PROVEN_AT_V3][] | Not Started | +Regression | [SIM_NIGHTLY_REGRESSION_AT_V3][] | Not Started | +Coverage | [SIM_CODE_COVERAGE_AT_100][] | Not Started | +Coverage | [SIM_FUNCTIONAL_COVERAGE_AT_100][]| Not Started | +Coverage | [FPV_CODE_COVERAGE_AT_100][] | Not Started | +Coverage | [FPV_COI_COVERAGE_AT_100][] | Not Started | +Code Quality | [ALL_TODOS_RESOLVED][] | Not Started | +Code Quality | [NO_TOOL_WARNINGS_THROWN][] | Not Started | +Code Quality | [TB_LINT_COMPLETE][] | Not Started | +Integration | [PRE_VERIFIED_SUB_MODULES_V3][] | Not Started | +Issues | [NO_ISSUES_PENDING][] | Not Started | +Review | Reviewer(s) | Not Started | +Review | Signoff date | Not Started | + +[DESIGN_DELTAS_CAPTURED_V3]: ../../../../../doc/project_governance/checklist/README.md#design_deltas_captured_v3 +[X_PROP_ANALYSIS_COMPLETED]: ../../../../../doc/project_governance/checklist/README.md#x_prop_analysis_completed +[FPV_ASSERTIONS_PROVEN_AT_V3]: ../../../../../doc/project_governance/checklist/README.md#fpv_assertions_proven_at_v3 +[SIM_NIGHTLY_REGRESSION_AT_V3]: ../../../../../doc/project_governance/checklist/README.md#sim_nightly_regression_at_v3 +[SIM_CODE_COVERAGE_AT_100]: ../../../../../doc/project_governance/checklist/README.md#sim_code_coverage_at_100 +[SIM_FUNCTIONAL_COVERAGE_AT_100]:../../../../../doc/project_governance/checklist/README.md#sim_functional_coverage_at_100 +[FPV_CODE_COVERAGE_AT_100]: ../../../../../doc/project_governance/checklist/README.md#fpv_code_coverage_at_100 +[FPV_COI_COVERAGE_AT_100]: ../../../../../doc/project_governance/checklist/README.md#fpv_coi_coverage_at_100 +[ALL_TODOS_RESOLVED]: ../../../../../doc/project_governance/checklist/README.md#all_todos_resolved +[NO_TOOL_WARNINGS_THROWN]: ../../../../../doc/project_governance/checklist/README.md#no_tool_warnings_thrown +[TB_LINT_COMPLETE]: ../../../../../doc/project_governance/checklist/README.md#tb_lint_complete +[PRE_VERIFIED_SUB_MODULES_V3]: ../../../../../doc/project_governance/checklist/README.md#pre_verified_sub_modules_v3 +[NO_ISSUES_PENDING]: ../../../../../doc/project_governance/checklist/README.md#no_issues_pending diff --git a/src/pwrmgr/doc/interfaces.md.tpl b/src/pwrmgr/doc/interfaces.md.tpl new file mode 100644 index 000000000..34a228c54 --- /dev/null +++ b/src/pwrmgr/doc/interfaces.md.tpl @@ -0,0 +1,67 @@ +# Hardware Interfaces + + +Referring to the [Comportable guideline for peripheral device functionality](https://opentitan.org/book/doc/contributing/hw/comportability), the module **`pwrmgr`** has the following hardware interfaces defined +- Primary Clock: **`clk_i`** +- Other Clocks: **`clk_slow_i`**, **`clk_lc_i`**, **`clk_esc_i`** +- Bus Device Interfaces (TL-UL): **`tl`** +- Bus Host Interfaces (TL-UL): *none* +- Peripheral Pins for Chip IO: *none* + +${"##"} [Inter-Module Signals](https://opentitan.org/book/doc/contributing/hw/comportability/index.html#inter-signal-handling) + +| Port Name | Package::Struct | Type | Act | Width | Description | +|:---------------|:--------------------------|:--------|:------|--------:|:--------------| +| pwr_ast | pwrmgr_pkg::pwr_ast | req_rsp | req | 1 | | +| pwr_rst | pwrmgr_pkg::pwr_rst | req_rsp | req | 1 | | +| pwr_clk | pwrmgr_pkg::pwr_clk | req_rsp | req | 1 | | +| pwr_otp | pwrmgr_pkg::pwr_otp | req_rsp | req | 1 | | +| pwr_lc | pwrmgr_pkg::pwr_lc | req_rsp | req | 1 | | +| pwr_flash | pwrmgr_pkg::pwr_flash | uni | rcv | 1 | | +| esc_rst_tx | prim_esc_pkg::esc_tx | uni | rcv | 1 | | +| esc_rst_rx | prim_esc_pkg::esc_rx | uni | req | 1 | | +| pwr_cpu | pwrmgr_pkg::pwr_cpu | uni | rcv | 1 | | +| wakeups | logic | uni | rcv | 6 | | +| rstreqs | logic | uni | rcv | 2 | | +| ndmreset_req | logic | uni | rcv | 1 | | +| strap | logic | uni | req | 1 | | +| low_power | logic | uni | req | 1 | | +| rom_ctrl | rom_ctrl_pkg::pwrmgr_data | uni | rcv | 1 | | +| fetch_en | lc_ctrl_pkg::lc_tx | uni | req | 1 | | +| lc_dft_en | lc_ctrl_pkg::lc_tx | uni | rcv | 1 | | +| lc_hw_debug_en | lc_ctrl_pkg::lc_tx | uni | rcv | 1 | | +| sw_rst_req | prim_mubi_pkg::mubi4 | uni | rcv | 1 | | +| tl | tlul_pkg::tl | req_rsp | rsp | 1 | | + +${"##"} Interrupts + +| Interrupt Name | Type | Description | +|:-----------------|:-------|:----------------------------------------------------------| +| wakeup | Event | Wake from low power state. See wake info for more details | + +${"##"} Security Alerts + +| Alert Name | Description | +|:-------------|:----------------------------------------------------------------------------------| +| fatal_fault | This fatal alert is triggered when a fatal TL-UL bus integrity fault is detected. | + +${"##"} Security Countermeasures + +| Countermeasure ID | Description | +|:------------------------------|:-------------------------------------------------------------------------------------------------------------------------| +| PWRMGR.BUS.INTEGRITY | End-to-end bus integrity scheme. | +| PWRMGR.LC_CTRL.INTERSIG.MUBI | life cycle control / debug signals are multibit. | +| PWRMGR.ROM_CTRL.INTERSIG.MUBI | rom control done/good signals are multibit. | +| PWRMGR.RSTMGR.INTERSIG.MUBI | reset manager software request is multibit. | +| PWRMGR.ESC_RX.CLK.BKGN_CHK | Escalation receiver has a background timeout check | +| PWRMGR.ESC_RX.CLK.LOCAL_ESC | Escalation receiver clock timeout has a local reset escalation | +| PWRMGR.FSM.SPARSE | Sparse encoding for slow and fast state machines. | +| PWRMGR.FSM.TERMINAL | When FSMs reach a bad state, go into a terminate state that does not recover without user or external host intervention. | +| PWRMGR.CTRL_FLOW.GLOBAL_ESC | When global escalation is received, proceed directly to reset. | +| PWRMGR.MAIN_PD.RST.LOCAL_ESC | When main power domain reset glitches, proceed directly to reset. | +| PWRMGR.CTRL.CONFIG.REGWEN | Main control protected by regwen. | +| PWRMGR.WAKEUP.CONFIG.REGWEN | Wakeup configuration protected by regwen. | +| PWRMGR.RESET.CONFIG.REGWEN | Reset configuration protected by regwen. | + + + diff --git a/src/pwrmgr/doc/programmers_guide.md b/src/pwrmgr/doc/programmers_guide.md new file mode 100644 index 000000000..45bdf1d38 --- /dev/null +++ b/src/pwrmgr/doc/programmers_guide.md @@ -0,0 +1,63 @@ +# Programmer's Guide + +The process in which the power manager is used is highly dependent on the system's topology. +The following proposes one method for how this can be done. + +Assume first the system has the power states described [above](theory_of_operation.md#supported-low-power-modes). + +## Programmer Sequence for Entering Low Power + +1. Disable interrupts +2. Enable desired wakeup and reset sources in [`WAKEUP_EN`](registers.md#wakeup_en) and [`RESET_EN`](registers.md#reset_en). +3. Perform any system-specific low power entry steps, e.g. + - Interrupt checks (if something became pending prior to disable) +4. Configure low power mode in [`CONTROL`](registers.md#control). +5. Set low power hint in [`LOW_POWER_HINT`](registers.md#control--low_power_hint). +6. Set and poll [`CFG_CDC_SYNC`](registers.md#cfg_cdc_sync) to ensure above settings propagate across clock domains. +7. Execute wait-for-interrupt instruction on the processing host. + +### Possible Exits + +Once low power is initiated, the system may exit due to several reasons. +1. Graceful low power exit - This exit occurs when some source in the system gracefully wakes up the power manager. +2. System reset request - This exit occurs when either software or a peripheral requests the pwrmgr to reset the system. +3. [Fall through exit](theory_of_operation.md#fall-through-handling) - This exit occurs when an interrupt manages to break the wait-for-interrupt loop. +4. [Aborted entry](theory_of_operation.md#abort-handling) - This exit occurs when low power entry is attempted with an ongoing non-volatile transaction. + +In both fall through exit and aborted entry, the power manager does not actually enter low power. +Instead the low power entry is interrupted and the system restored to active state. + +## Programmer Sequence for Exiting Low Power + +There are two separate cases for low power exit. +One is exiting from deep sleep, and the other is exiting from normal sleep. + +### Exiting from Deep Sleep + +When exiting from deep sleep, the system begins execution in ROM. + +1. Complete normal preparation steps. +2. Check reset cause in [rstmgr](../../rstmgr/README.md) +3. Re-enable modules that have powered down. +4. Disable wakeup recording through [`WAKE_INFO_CAPTURE_DIS`](registers.md#wake_info_capture_dis). +5. Check which source woke up the system through [`WAKE_INFO`](registers.md#wake_info). +6. Take appropriate steps to handle the wake and resume normal operation. +7. Once wake is handled, clear the wake indication in [`WAKE_INFO`](registers.md#wake_info). + +### Exiting from Normal Sleep + +The handling for fall-through and abort are similar to normal sleep exit. +Since in these scenarios the system was not reset, software continues executing the instruction after the wait-for-interrupt invocation. + +1. Check exit condition to determine appropriate steps. +2. Clear low power hints and configuration in [`CONTROL`](registers.md#control). +3. Set and poll [`CFG_CDC_SYNC`](registers.md#cfg_cdc_sync) to ensure setting changes have propagated across clock boundaries. +4. Disable wakeup sources and stop recording. +5. Re-enable interrupts for normal operation and wakeup handling. +6. Once wake is handled, clear the wake indication in [`WAKE_INFO`](registers.md#wake_info). + +For an in-depth discussion, please see [power management programmers model](https://docs.google.com/document/d/1w86rmvylJgZVmmQ6Q1YBcCp2VFctkQT3zJ408SJMLPE/edit?usp=sharing) for additional details. + +## Device Interface Functions (DIFs) + +- [Device Interface Functions](../../../../../sw/device/lib/dif/dif_pwrmgr.h) diff --git a/src/pwrmgr/doc/pwrmgr_connectivity.svg b/src/pwrmgr/doc/pwrmgr_connectivity.svg new file mode 100644 index 000000000..b525330ca --- /dev/null +++ b/src/pwrmgr/doc/pwrmgr_connectivity.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/pwrmgr/doc/pwrmgr_fsms.svg b/src/pwrmgr/doc/pwrmgr_fsms.svg new file mode 100644 index 000000000..962794cd0 --- /dev/null +++ b/src/pwrmgr/doc/pwrmgr_fsms.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/pwrmgr/doc/registers.md.tpl b/src/pwrmgr/doc/registers.md.tpl new file mode 100644 index 000000000..3b252c7df --- /dev/null +++ b/src/pwrmgr/doc/registers.md.tpl @@ -0,0 +1,435 @@ +# Registers + + +${"##"} Summary + +| Name | Offset | Length | Description | +|:---------------------------------------------------------|:---------|---------:|:--------------------------------------------------------------------------------| +| pwrmgr.[`INTR_STATE`](#intr_state) | 0x0 | 4 | Interrupt State Register | +| pwrmgr.[`INTR_ENABLE`](#intr_enable) | 0x4 | 4 | Interrupt Enable Register | +| pwrmgr.[`INTR_TEST`](#intr_test) | 0x8 | 4 | Interrupt Test Register | +| pwrmgr.[`ALERT_TEST`](#alert_test) | 0xc | 4 | Alert Test Register | +| pwrmgr.[`CTRL_CFG_REGWEN`](#ctrl_cfg_regwen) | 0x10 | 4 | Controls the configurability of the !!CONTROL register. | +| pwrmgr.[`CONTROL`](#control) | 0x14 | 4 | Control register | +| pwrmgr.[`CFG_CDC_SYNC`](#cfg_cdc_sync) | 0x18 | 4 | The configuration registers CONTROL, WAKEUP_EN, RESET_EN are all written in the | +| pwrmgr.[`WAKEUP_EN_REGWEN`](#wakeup_en_regwen) | 0x1c | 4 | Configuration enable for wakeup_en register | +| pwrmgr.[`WAKEUP_EN`](#WAKEUP_EN) | 0x20 | 4 | Bit mask for enabled wakeups | +| pwrmgr.[`WAKE_STATUS`](#WAKE_STATUS) | 0x24 | 4 | A read only register of all current wake requests post enable mask | +| pwrmgr.[`RESET_EN_REGWEN`](#reset_en_regwen) | 0x28 | 4 | Configuration enable for reset_en register | +| pwrmgr.[`RESET_EN`](#RESET_EN) | 0x2c | 4 | Bit mask for enabled reset requests | +| pwrmgr.[`RESET_STATUS`](#RESET_STATUS) | 0x30 | 4 | A read only register of all current reset requests post enable mask | +| pwrmgr.[`ESCALATE_RESET_STATUS`](#escalate_reset_status) | 0x34 | 4 | A read only register of escalation reset request | +| pwrmgr.[`WAKE_INFO_CAPTURE_DIS`](#wake_info_capture_dis) | 0x38 | 4 | Indicates which functions caused the chip to wakeup | +| pwrmgr.[`WAKE_INFO`](#wake_info) | 0x3c | 4 | Indicates which functions caused the chip to wakeup. | +| pwrmgr.[`FAULT_STATUS`](#fault_status) | 0x40 | 4 | A read only register that shows the existing faults | + +${"##"} INTR_STATE +Interrupt State Register +- Offset: `0x0` +- Reset default: `0x0` +- Reset mask: `0x1` + +${"###"} Fields + +```wavejson +{"reg": [{"name": "wakeup", "bits": 1, "attr": ["rw1c"], "rotate": -90}, {"bits": 31}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}} +``` + +| Bits | Type | Reset | Name | Description | +|:------:|:------:|:-------:|:-------|:----------------------------------------------------------| +| 31:1 | | | | Reserved | +| 0 | rw1c | 0x0 | wakeup | Wake from low power state. See wake info for more details | + +${"##"} INTR_ENABLE +Interrupt Enable Register +- Offset: `0x4` +- Reset default: `0x0` +- Reset mask: `0x1` + +${"###"} Fields + +```wavejson +{"reg": [{"name": "wakeup", "bits": 1, "attr": ["rw"], "rotate": -90}, {"bits": 31}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}} +``` + +| Bits | Type | Reset | Name | Description | +|:------:|:------:|:-------:|:-------|:-----------------------------------------------------------------| +| 31:1 | | | | Reserved | +| 0 | rw | 0x0 | wakeup | Enable interrupt when [`INTR_STATE.wakeup`](#intr_state) is set. | + +${"##"} INTR_TEST +Interrupt Test Register +- Offset: `0x8` +- Reset default: `0x0` +- Reset mask: `0x1` + +${"###"} Fields + +```wavejson +{"reg": [{"name": "wakeup", "bits": 1, "attr": ["wo"], "rotate": -90}, {"bits": 31}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}} +``` + +| Bits | Type | Reset | Name | Description | +|:------:|:------:|:-------:|:-------|:----------------------------------------------------------| +| 31:1 | | | | Reserved | +| 0 | wo | 0x0 | wakeup | Write 1 to force [`INTR_STATE.wakeup`](#intr_state) to 1. | + +${"##"} ALERT_TEST +Alert Test Register +- Offset: `0xc` +- Reset default: `0x0` +- Reset mask: `0x1` + +${"###"} Fields + +```wavejson +{"reg": [{"name": "fatal_fault", "bits": 1, "attr": ["wo"], "rotate": -90}, {"bits": 31}], "config": {"lanes": 1, "fontsize": 10, "vspace": 130}} +``` + +| Bits | Type | Reset | Name | Description | +|:------:|:------:|:-------:|:------------|:-------------------------------------------------| +| 31:1 | | | | Reserved | +| 0 | wo | 0x0 | fatal_fault | Write 1 to trigger one alert event of this kind. | + +${"##"} CTRL_CFG_REGWEN +Controls the configurability of the [`CONTROL`](#control) register. + +This register ensures the contents do not change once a low power hint and +WFI has occurred. + +It unlocks whenever a low power transition has completed (transition back to the +ACTIVE state) for any reason. +- Offset: `0x10` +- Reset default: `0x1` +- Reset mask: `0x1` + +${"###"} Fields + +```wavejson +{"reg": [{"name": "EN", "bits": 1, "attr": ["ro"], "rotate": -90}, {"bits": 31}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}} +``` + +| Bits | Type | Reset | Name | Description | +|:------:|:------:|:-------:|:-------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 31:1 | | | | Reserved | +| 0 | ro | 0x1 | EN | Configuration enable. This bit defaults to 1 and is set to 0 by hardware when low power entry is initiated. When the device transitions back from low power state to active state, this bit is set back to 1 to allow software configuration of [`CONTROL`](#control) | + +${"##"} CONTROL +Control register +- Offset: `0x14` +- Reset default: `0x180` +- Reset mask: `0x1f1` +- Register enable: [`CTRL_CFG_REGWEN`](#ctrl_cfg_regwen) + +${"###"} Fields + +```wavejson +{"reg": [{"name": "LOW_POWER_HINT", "bits": 1, "attr": ["rw"], "rotate": -90}, {"bits": 3}, {"name": "CORE_CLK_EN", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "IO_CLK_EN", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "USB_CLK_EN_LP", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "USB_CLK_EN_ACTIVE", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "MAIN_PD_N", "bits": 1, "attr": ["rw"], "rotate": -90}, {"bits": 23}], "config": {"lanes": 1, "fontsize": 10, "vspace": 190}} +``` + +| Bits | Type | Reset | Name | +|:------:|:------:|:-------:|:-------------------------------------------------| +| 31:9 | | | Reserved | +| 8 | rw | 0x1 | [MAIN_PD_N](#control--main_pd_n) | +| 7 | rw | 0x1 | [USB_CLK_EN_ACTIVE](#control--usb_clk_en_active) | +| 6 | rw | 0x0 | [USB_CLK_EN_LP](#control--usb_clk_en_lp) | +| 5 | rw | 0x0 | [IO_CLK_EN](#control--io_clk_en) | +| 4 | rw | 0x0 | [CORE_CLK_EN](#control--core_clk_en) | +| 3:1 | | | Reserved | +| 0 | rw | 0x0 | [LOW_POWER_HINT](#control--low_power_hint) | + +${"###"} CONTROL . MAIN_PD_N +Active low, main power domain power down + +| Value | Name | Description | +|:--------|:-----------|:----------------------------------------------------------| +| 0x0 | Power down | Main power domain is powered down during low power state. | +| 0x1 | Power up | Main power domain is kept powered during low power state | + + +${"###"} CONTROL . USB_CLK_EN_ACTIVE +USB clock enable during active power state + +| Value | Name | Description | +|:--------|:---------|:---------------------------------------------| +| 0x0 | Disabled | USB clock disabled during active power state | +| 0x1 | Enabled | USB clock enabled during active power state | + + +${"###"} CONTROL . USB_CLK_EN_LP +USB clock enable during low power state + +| Value | Name | Description | +|:--------|:---------|:------------------------------------------------------------------------------------------------------------------------------| +| 0x0 | Disabled | USB clock disabled during low power state | +| 0x1 | Enabled | USB clock enabled during low power state. However, if !!CONTROL.MAIN_PD_N is 0, USB clock is disabled during low power state. | + + +${"###"} CONTROL . IO_CLK_EN +IO clock enable during low power state + +| Value | Name | Description | +|:--------|:---------|:-----------------------------------------| +| 0x0 | Disabled | IO clock disabled during low power state | +| 0x1 | Enabled | IO clock enabled during low power state | + + +${"###"} CONTROL . CORE_CLK_EN +core clock enable during low power state + +| Value | Name | Description | +|:--------|:---------|:-------------------------------------------| +| 0x0 | Disabled | Core clock disabled during low power state | +| 0x1 | Enabled | Core clock enabled during low power state | + + +${"###"} CONTROL . LOW_POWER_HINT +The low power hint to power manager. +The hint is an indication for how the manager should treat the next WFI. +Once the power manager begins a low power transition, or if a valid reset request is registered, +this bit is automatically cleared by HW. + +| Value | Name | Description | +|:--------|:----------|:----------------------------------------| +| 0x0 | None | No low power intent | +| 0x1 | Low Power | Next WFI should trigger low power entry | + + +${"##"} CFG_CDC_SYNC +The configuration registers CONTROL, WAKEUP_EN, RESET_EN are all written in the +fast clock domain but used in the slow clock domain. + +The configuration are not propagated across the clock boundary until this +register is triggered and read. See fields below for more details +- Offset: `0x18` +- Reset default: `0x0` +- Reset mask: `0x1` + +${"###"} Fields + +```wavejson +{"reg": [{"name": "SYNC", "bits": 1, "attr": ["rw"], "rotate": -90}, {"bits": 31}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}} +``` + +| Bits | Type | Reset | Name | +|:------:|:------:|:-------:|:----------------------------| +| 31:1 | | | Reserved | +| 0 | rw | 0x0 | [SYNC](#cfg_cdc_sync--sync) | + +${"###"} CFG_CDC_SYNC . SYNC +Configuration sync. When this bit is written to 1, a sync pulse is generated. When +the sync completes, this bit then self clears. + +Software should write this bit to 1, wait for it to clear, before assuming the slow clock +domain has accepted the programmed values. + +${"##"} WAKEUP_EN_REGWEN +Configuration enable for wakeup_en register +- Offset: `0x1c` +- Reset default: `0x1` +- Reset mask: `0x1` + +${"###"} Fields + +```wavejson +{"reg": [{"name": "EN", "bits": 1, "attr": ["rw0c"], "rotate": -90}, {"bits": 31}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}} +``` + +| Bits | Type | Reset | Name | Description | +|:------:|:------:|:-------:|:-------|:-----------------------------------------------------------------------------------------------| +| 31:1 | | | | Reserved | +| 0 | rw0c | 0x1 | EN | When 1, WAKEUP_EN register can be configured. When 0, WAKEUP_EN register cannot be configured. | + +${"##"} WAKEUP_EN +Bit mask for enabled wakeups +- Offset: `0x20` +- Reset default: `0x0` +- Reset mask: `0x3f` +- Register enable: [`WAKEUP_EN_REGWEN`](#wakeup_en_regwen) + +${"###"} Fields + +```wavejson +{"reg": [{"name": "EN_0", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "EN_1", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "EN_2", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "EN_3", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "EN_4", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "EN_5", "bits": 1, "attr": ["rw"], "rotate": -90}, {"bits": 26}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}} +``` + +| Bits | Type | Reset | Name | Description | +|:------:|:------:|:-------:|:-------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 31:6 | | | | Reserved | +| 5 | rw | 0x0 | EN_5 | Whenever a particular bit is set to 1, that wakeup is also enabled. Whenever a particular bit is set to 0, that wakeup cannot wake the device from low power. | +| 4 | rw | 0x0 | EN_4 | Whenever a particular bit is set to 1, that wakeup is also enabled. Whenever a particular bit is set to 0, that wakeup cannot wake the device from low power. | +| 3 | rw | 0x0 | EN_3 | Whenever a particular bit is set to 1, that wakeup is also enabled. Whenever a particular bit is set to 0, that wakeup cannot wake the device from low power. | +| 2 | rw | 0x0 | EN_2 | Whenever a particular bit is set to 1, that wakeup is also enabled. Whenever a particular bit is set to 0, that wakeup cannot wake the device from low power. | +| 1 | rw | 0x0 | EN_1 | Whenever a particular bit is set to 1, that wakeup is also enabled. Whenever a particular bit is set to 0, that wakeup cannot wake the device from low power. | +| 0 | rw | 0x0 | EN_0 | Whenever a particular bit is set to 1, that wakeup is also enabled. Whenever a particular bit is set to 0, that wakeup cannot wake the device from low power. | + +${"##"} WAKE_STATUS +A read only register of all current wake requests post enable mask +- Offset: `0x24` +- Reset default: `0x0` +- Reset mask: `0x3f` + +${"###"} Fields + +```wavejson +{"reg": [{"name": "VAL_0", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "VAL_1", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "VAL_2", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "VAL_3", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "VAL_4", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "VAL_5", "bits": 1, "attr": ["ro"], "rotate": -90}, {"bits": 26}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}} +``` + +| Bits | Type | Reset | Name | Description | +|:------:|:------:|:-------:|:-------|:-------------------------------| +| 31:6 | | | | Reserved | +| 5 | ro | 0x0 | VAL_5 | Current value of wake requests | +| 4 | ro | 0x0 | VAL_4 | Current value of wake requests | +| 3 | ro | 0x0 | VAL_3 | Current value of wake requests | +| 2 | ro | 0x0 | VAL_2 | Current value of wake requests | +| 1 | ro | 0x0 | VAL_1 | Current value of wake requests | +| 0 | ro | 0x0 | VAL_0 | Current value of wake requests | + +${"##"} RESET_EN_REGWEN +Configuration enable for reset_en register +- Offset: `0x28` +- Reset default: `0x1` +- Reset mask: `0x1` + +${"###"} Fields + +```wavejson +{"reg": [{"name": "EN", "bits": 1, "attr": ["rw0c"], "rotate": -90}, {"bits": 31}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}} +``` + +| Bits | Type | Reset | Name | Description | +|:------:|:------:|:-------:|:-------|:---------------------------------------------------------------------------------------------| +| 31:1 | | | | Reserved | +| 0 | rw0c | 0x1 | EN | When 1, RESET_EN register can be configured. When 0, RESET_EN register cannot be configured. | + +${"##"} RESET_EN +Bit mask for enabled reset requests +- Offset: `0x2c` +- Reset default: `0x0` +- Reset mask: `0x3` +- Register enable: [`RESET_EN_REGWEN`](#reset_en_regwen) + +${"###"} Fields + +```wavejson +{"reg": [{"name": "EN_0", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "EN_1", "bits": 1, "attr": ["rw"], "rotate": -90}, {"bits": 30}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}} +``` + +| Bits | Type | Reset | Name | Description | +|:------:|:------:|:-------:|:-------|:---------------------------------------------------------------------------------------------------------------------------------------------------------| +| 31:2 | | | | Reserved | +| 1 | rw | 0x0 | EN_1 | Whenever a particular bit is set to 1, that reset request is enabled. Whenever a particular bit is set to 0, that reset request cannot reset the device. | +| 0 | rw | 0x0 | EN_0 | Whenever a particular bit is set to 1, that reset request is enabled. Whenever a particular bit is set to 0, that reset request cannot reset the device. | + +${"##"} RESET_STATUS +A read only register of all current reset requests post enable mask +- Offset: `0x30` +- Reset default: `0x0` +- Reset mask: `0x3` + +${"###"} Fields + +```wavejson +{"reg": [{"name": "VAL_0", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "VAL_1", "bits": 1, "attr": ["ro"], "rotate": -90}, {"bits": 30}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}} +``` + +| Bits | Type | Reset | Name | Description | +|:------:|:------:|:-------:|:-------|:-------------------------------| +| 31:2 | | | | Reserved | +| 1 | ro | 0x0 | VAL_1 | Current value of reset request | +| 0 | ro | 0x0 | VAL_0 | Current value of reset request | + +${"##"} ESCALATE_RESET_STATUS +A read only register of escalation reset request +- Offset: `0x34` +- Reset default: `0x0` +- Reset mask: `0x1` + +${"###"} Fields + +```wavejson +{"reg": [{"name": "VAL", "bits": 1, "attr": ["ro"], "rotate": -90}, {"bits": 31}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}} +``` + +| Bits | Type | Reset | Name | Description | +|:------:|:------:|:-------:|:-------|:---------------------------------------------------------------------------------| +| 31:1 | | | | Reserved | +| 0 | ro | 0x0 | VAL | When 1, an escalation reset has been seen. When 0, there is no escalation reset. | + +${"##"} WAKE_INFO_CAPTURE_DIS +Indicates which functions caused the chip to wakeup +- Offset: `0x38` +- Reset default: `0x0` +- Reset mask: `0x1` + +${"###"} Fields + +```wavejson +{"reg": [{"name": "VAL", "bits": 1, "attr": ["rw"], "rotate": -90}, {"bits": 31}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}} +``` + +| Bits | Type | Reset | Name | Description | +|:------:|:------:|:-------:|:-------|:----------------------------------------------------------------------------------------------------------------------------------------| +| 31:1 | | | | Reserved | +| 0 | rw | 0x0 | VAL | When written to 1, this actively suppresses the wakeup info capture. When written to 0, wakeup info capture timing is controlled by HW. | + +${"##"} WAKE_INFO +Indicates which functions caused the chip to wakeup. +The wake info recording begins whenever the device begins a valid low power entry. + +This capture is continued until it is explicitly disabled through WAKE_INFO_CAPTURE_DIS. +This means it is possible to capture multiple wakeup reasons. +- Offset: `0x3c` +- Reset default: `0x0` +- Reset mask: `0xff` + +${"###"} Fields + +```wavejson +{"reg": [{"name": "REASONS", "bits": 6, "attr": ["rw1c"], "rotate": 0}, {"name": "FALL_THROUGH", "bits": 1, "attr": ["rw1c"], "rotate": -90}, {"name": "ABORT", "bits": 1, "attr": ["rw1c"], "rotate": -90}, {"bits": 24}], "config": {"lanes": 1, "fontsize": 10, "vspace": 140}} +``` + +| Bits | Type | Reset | Name | +|:------:|:------:|:-------:|:-----------------------------------------| +| 31:8 | | | Reserved | +| 7 | rw1c | 0x0 | [ABORT](#wake_info--abort) | +| 6 | rw1c | 0x0 | [FALL_THROUGH](#wake_info--fall_through) | +| 5:0 | rw1c | 0x0 | [REASONS](#wake_info--reasons) | + +${"###"} WAKE_INFO . ABORT +The abort wakeup reason indicates that despite setting a WFI and providing a low power +hint, an active flash / lifecycle / otp transaction was ongoing when the power controller +attempted to initiate low power entry. + +The power manager detects this condition, halts low power entry and reports as a wakeup reason + +${"###"} WAKE_INFO . FALL_THROUGH +The fall through wakeup reason indicates that despite setting a WFI and providing a low power +hint, an interrupt arrived at just the right time to break the executing core out of WFI. + +The power manager detects this condition, halts low power entry and reports as a wakeup reason + +${"###"} WAKE_INFO . REASONS +Various peripheral wake reasons + +${"##"} FAULT_STATUS +A read only register that shows the existing faults +- Offset: `0x40` +- Reset default: `0x0` +- Reset mask: `0x7` + +${"###"} Fields + +```wavejson +{"reg": [{"name": "REG_INTG_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "ESC_TIMEOUT", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "MAIN_PD_GLITCH", "bits": 1, "attr": ["ro"], "rotate": -90}, {"bits": 29}], "config": {"lanes": 1, "fontsize": 10, "vspace": 160}} +``` + +| Bits | Type | Reset | Name | Description | +|:------:|:------:|:-------:|:---------------|:----------------------------------------------------------| +| 31:3 | | | | Reserved | +| 2 | ro | 0x0 | MAIN_PD_GLITCH | When 1, unexpected power glitch was observed on main PD. | +| 1 | ro | 0x0 | ESC_TIMEOUT | When 1, an escalation clock / reset timeout has occurred. | +| 0 | ro | 0x0 | REG_INTG_ERR | When 1, an integrity error has occurred. | + + + diff --git a/src/pwrmgr/doc/theory_of_operation.md b/src/pwrmgr/doc/theory_of_operation.md new file mode 100644 index 000000000..5f197a894 --- /dev/null +++ b/src/pwrmgr/doc/theory_of_operation.md @@ -0,0 +1,304 @@ +# Theory of Operation + +The power manager performs the following functions: +- Turn on/off power domain(s). +- Control root resets with the reset manager. +- Control root clock enables with AST and clock manager. +- Sequence various power up activities such as OTP sensing, life cycle initiation and releasing software to execute. + + +## Block Diagram + +See the below high level block diagram that illustrates the connections between the power manager and various system components. +Blocks outlined with a solid magenta line are always on; while blocks outlined with a dashed magenta line are a mix of components that are and those that are not. + +![Power Manager Connectivity Diagram](../doc/pwrmgr_connectivity.svg) + +## Overall Sequencing + +The power manager contains two state machines. +One operates on the always-on slow clock (this clock is always running and usually measured in KHz) and is responsible for turning faster clocks on and off and managing the power domains. +The other operates on a normal fixed clock (usually measured in MHz) and is responsible for everything else in the power sequence. + +The following diagram breaks down the general functionality of both. +The state machines are colored based on their clock domains. +The green state machine is clocked by the normal fixed domain, while the orange state machine is clocked by the slow domain. +Specific request / acknowledge signals are also highlighted in this color scheme to show where the two state machines communicate. + +![Power Manager FSMs](../doc/pwrmgr_fsms.svg) + + +Note, most of the states are transitional states, and only the following state combinations are resting states. + + +* Slow FSM `Idle` and fast FSM `Active` +* Slow FSM `Low Power` and fast FSM `Low Power` + +The slow FSM `Low Power` and fast FSM `Active` states specifically are concepts useful when examining [reset handling](#reset-request-handling). + + +## Slow Clock Domain FSM + +The slow clock domain FSM (referred to as the slow FSM from here on) resets to the Reset state. +This state is released by `por_rst_n`, which is supplied from the reset controller. +The `por_rst_n` signal is released when the reset controller detects the root power domains (`vcaon_pok` from AST) of the system are ready. +Please see the [ast](../../../ip/ast/README.md) for more details. + +The slow FSM requests the AST to power up the main domain and high speed clocks. +Once those steps are done, it requests the [fast FSM](#fast-clock-domain-fsm) to begin operation. +The slow FSM also handles power isolation controls as part of this process. + +Once the fast FSM acknowledges the power-up completion, the slow FSM transitions to `Idle` and waits for a power down request. +When a power down request is received, the slow FSM turns off AST clocks and power as directed by software configuration. +This means the clocks and power are not always turned off, but are rather controlled by software configurations in [`CONTROL`](registers.md#control) prior to low power entry . +Once these steps are complete, the slow FSM transitions to a low power state and awaits a wake request, which can come either as an actual wakeup, or a reset event (for example always on watchdog expiration). + +#### Sparse FSM + +Since the slow FSM is sparsely encoded, it is possible for the FSM to end up in an undefined state if attacked. +When this occurs, the slow FSM sends an `invalid` indication to the fast FSM and forcibly powers off and clamps everything. + +The clocks are kept on however to allow the fast FSM to operate if it is able to receive the `invalid` indication. +The slow FSM does not recover from this state until the system is reset by POR. + +Unlike [escalation resets](#escalation-reset-request), the system does not self reset. +Instead the system goes into a terminal non-responsive state where a user or host must directly intervene by toggling the power or asserting an external reset input. + +## Fast Clock Domain FSM + +The fast clock domain FSM (referred to as fast FSM from here on) resets to `Low Power` state and waits for a power-up request from the slow FSM. + +Once received, the fast FSM releases the life cycle reset stage (see [reset controller](../../rstmgr/README.md) for more details). +This allows the [OTP](../../../../ip/otp_ctrl/README.md) to begin sensing. +Once OTP sensing completes, the life cycle controller is initialized. +The initialization of the life cycle controller puts the device into its allowed operating state (see [life cycle controller](../../../../ip/lc_ctrl/README.md) for more details). + +Once life cycle initialization is done, the fast FSM enables all second level clock gating (see [clock controller](../../clkmgr/README.md) for more details) and initiates strap sampling. +For more details on what exactly the strap samples, please see [here](https://docs.google.com/spreadsheets/d/1pH8T1MhQ7TXtP_bFNT85T9jSVIHlxHAfbMnPbsMdjc0/edit?usp=sharing). + +Once strap sampling is complete, the system is ready to begin normal operations (note `flash_ctrl` initialization is explicitly not done here, please see [sections below](#flash-handling) for more details). +The fast FSM acknowledges the slow FSM (which made the original power up request) and releases the system reset stage - this enables the processor to begin operation. +Afterwards, the fast FSM transitions to `Active` state and waits for a software low power entry request. + +A low power request is initiated by software through a combination of WFI and software low power hint in [`CONTROL`](registers.md#control). +Specifically, this means if software issues only WFI, the power manager does not treat it as a power down request. +The notion of WFI is exported from the processor. +For Ibex, this is currently in the form of `core_sleeping_o`. + +In response to the low power entry request, the fast FSM disables all second level clock gating. +Before proceeding, the fast FSM explicitly separates the handling between a normal low power entry and a [reset request](#reset-request-handling). + +For low power entry, there are two cases, [fall through handling](#fall-through-handling) and [abort handling](#abort-handling). +If none of these exception cases are matched for low power entry, the fast FSM then asserts appropriate resets as necessary and requests the slow FSM to take over. + +For reset requests, fall through and aborts are not checked and the system simply resets directly. +Note in this scenario the slow FSM is not requested to take over. + +#### Sparse FSM + +Since the fast FSM is sparsely encoded, it is possible for the FSM to end up in an undefined state if attacked. +When this occurs, the fast FSM forcibly disables all clocks and holds the system in reset. + +The fast FSM does not recover from this state until the system is reset by POR. + + +### ROM Integrity Checks + +The power manager coordinates the [start up ROM check](../../../../ip/rom_ctrl/README.md#the-startup-rom-check) with `rom_ctrl`. + +After every reset, the power manager sends an indication to the `rom_ctrl` to begin performing integrity checks. +When the `rom_ctrl` checks are finished, a `done` and `good` indication are sent back to the power manager. + +If the device is in life cycle test states (`TEST_UNLOCKED` or `RMA`), the `good` signal is ignored and the ROM contents are always allowed to execute. + +If the device is not in one of the test states, the `good` signal is used to determine ROM execution. +If `good` is true, ROM execution is allowed. +If `good` is false, ROM execution is disallowed. + +### Fall Through Handling + +A low power entry fall through occurs when some condition occurs that immediately de-assert the entry conditions right after the software requests it. + +This can happen if right after software asserts WFI, an interrupt is shown to the processor, thus breaking it out of its currently stopped state. +Whether this type of fall through happens is highly dependent on how the system handles interrupts during low power entry - some systems may choose to completely silence any interrupt not related to wakeup, others may choose to leave them all enabled. +The fall through handle is specifically catered to the latter category. + +For a normal low power entry, the fast FSM first checks that the low power entry conditions are still true. +If the entry conditions are no longer true, the fast FSM "falls through" the entry handling and returns the system to active state, thus terminating the entry process. + +### Abort Handling + +If the entry conditions are still true, the fast FSM then checks there are no ongoing non-volatile activities from `otp_ctrl`, `lc_ctrl` and `flash_ctrl`. +If any module is active, the fast FSM "aborts" entry handling and returns the system to active state, thus terminating the entry process. + +## Reset Request Handling + +There are 4 reset requests in the system +- peripheral requested reset such as watchdog. +- reset manager's software requested reset, which is functionally very similar to a peripheral requested reset. +- power manager's internal reset request. +- Non-debug module reset. + +Flash brownout is handled separately and described in [flash handling section](#flash-handling) below. + +Note that the non-debug module reset is handled similarly to a peripheral requested reset, except that the non-debug module reset won't affect the debug module state and associated TAP muxing logic inside the pinmux. + +The power controller only observes reset requests in two states - the slow FSM `Low Power` state and the fast FSM `Active` state. +When a reset request is received during slow FSM `Low Power` state, the system begins its usual power up sequence even if a wakeup has not been received. + +When a reset request is received during fast FSM `Active` state, the fast FSM asserts resets and transitions back to its `Low Power` state. +The normal power-up process described [above](#fast-clock-domain-fsm) is then followed to release the resets. +Note in this case, the slow FSM is "not activated" and remains in its `Idle` state. + +### Power Manager Internal Reset Requests + +In additional to external requests, the power manager maintains 2 internal reset requests: +* Escalation reset request +* Main power domain unstable reset request + +#### Escalation Reset Request + +Alert escalation resets in general behave similarly to peripheral requested resets. +However, peripheral resets are always handled gracefully and follow the normal FSM transition. + +Alert escalations can happen at any time and do not always obey normal rules. +As a result, upon alert escalation, the power manager makes a best case effort to transition directly into reset handling. + +This may not always be possible if the escalation happens while the FSM is in an invalid state. +In this scenario, the pwrmgr keeps everything powered off and silenced and requests escalation handling if the system ever wakes up. + +#### Escalation Clock Timeout + +Under normal behavior, the power manager can receive escalation requests from the system and handle them [appropriately](#escalation-reset-request). +However, if the escalation clock or reset are non-functional for any reason, the escalation request would not be serviced. + +To mitigate this, the power manager actively checks for escalation interface clock/reset timeout. +This is done by a continuous request / acknowledge interface between the power manager's local clock/reset and the escalate network's clock/reset. + +If the request / acknowledge interface does not respond within 128 power manager clock cycles, the escalate domain is assumed to be off. +When this happens, the power manager creates a local escalation request that behaves identically to the global escalation request. + + +#### Main Power Unstable Reset Requests +If the main power ever becomes unstable (the power okay indication is low even though it is powered on), the power manager requests an internal reset. +This reset behaves similarly to the escalation reset and transitions directly into reset handling. + +Note that under normal low power conditions, the main power may be turned off. +As a result of this, the main power unstable checks are valid only during states that power should be on and stable. +This includes any state where power manager has requested the power to be turned on. + + +### Reset Requests Received During Other States + +All other states in the slow / fast FSM are considered transitional states. +Resets are not observed in other states because the system will always be transitioning towards one of the steady states (the system is in the process of powering down or powering up). +Once a steady state is reached, reset requests are then observed and processed. + +### Reset Recording + +There are two ways in which the device is reset: +- The reset requests mentioned in [reset handling](#reset-request-handling) +- Low power entry (`sleep_req` in the state diagram) + +The power manager handles only one of these at a time (see state diagrams). +This means if reset request and low power entry collide, the power manager will handle them on a first come first served basis. +When the handling of the first is completed, the power manager handles the second pending request if it is still present. + +This is done because low power resets and peripheral requested resets lead to different behaviors. +When the power manager commits to handling a specific request, it informs the reset manager why it has reset the processor. + +For example, assume a low power entry request arrives slightly ahead of reset requests. +The power manager will: +- Transition the system into low power state. +- Inform the reset manager to record "low power exit" as the reset reason. +- Once in low state, transition the system to `Active` state by using the reset request as a wakeup indicator. +- Inform the reset manager to also record the peripheral that requested reset. +- Once in `Active` state, reset the system and begin normal power-up routines again. + +If reset requests arrive slightly ahead of a low power entry request, then power manager will: +- Reset the system and begin normal power-up routines. +- Inform the reset manager to record the peripheral that requested reset. +- Once in `Active` state, if the low power entry request is still present, transition to low power state. + - Inform the reset manager to also record "low power exit" as the reset reason. +- If the low power entry request was wiped out by reset, the system then stays in `Active` state and awaits software instructions. + +Ultimately when control is returned to software, it may see two reset reasons and must handle them accordingly. + + +## Wakeup Recording + +Similar to [reset handling](#reset-request-handling), wakeup signals are only observed during slow FSM `Low Power`; however their recording is continuous until explicitly disabled by software. + +Wakeup recording begins when the fast FSM transitions out of `Active` state and continues until explicitly disabled by software. +This ensures wakeup events are not missed until software has set up the appropriate peripherals. +Recording needs clocks to be active, and during low power they are usually not. +For this reason, it is important for wakeups to be level and remain active until software clears them. + +The software is also able to enable recording during `Active` state if it chooses to do so. The recording enables are OR’d together for hardware purposes. + + +## Flash Handling +For the section below, flash macro refers to the proprietary flash storage supplied by a vendor. +`flash_ctrl`, on the other hand, refers to the open source controller that manages access to the flash macro. + +### Power-Up Handling + +The [AST](../../../ip/ast/README.md) automatically takes the flash macro out of power down state as part of the power manager's power up request. + +Once flash macro is powered up and ready, an indication is sent to the `flash_ctrl`. + +Once the boot ROM is allowed to execute, it is expected to further initialize the `flash_ctrl` and flash macro prior to using it. +This involves the following steps: + +* Poll `flash_ctrl` register to ensure flash macro has powered up and completed internal initialization. +* Initialize `flash_ctrl` seed reading and scrambling. + +### Power-Down Handling + +Before the device enters low power, the pwrmgr first checks to ensure there are no ongoing transactions to the flash macro. +When the device enters deep sleep, the flash macro is automatically put into power down mode by the AST. +The AST places the flash macro into power down through direct signaling between AST and flash macro, the pwrmgr is not directly involved. + +When the device exits low power state, it is the responsibility of the boot ROM to poll for flash macro and `flash_ctrl` power-up complete similar to the above section. + +### Flash Brownout Handling + +When the external supply of the device dips below a certain threshold during a non-volatile flash macro operation (program or erase), the flash macro requires the operation to terminate in a pre-defined manner. +This sequence will be exclusively handled by the AST. + +The power manager is unaware of the difference between POR and flash brownout. +Because of this, the software also cannot distinguish between these two reset causes. + + +## Supported Low Power Modes + +This section details the various low power modes supported by OpenTitan. + + +### Deep Sleep or Standby + +This is the lowest power mode of the device (outside of full power down or device held in reset). +During this state: + +* All clocks other than the always-on slow clock are turned off at the source. +* All non-always-on digital domains are powered off. +* I/O power domains may or may not be off. + * The state of the IO power domain has no impact on the digital core’s power budget, e.g. the IO power being off does not cause the accompanying digital logic in pads or elsewhere to leak more. + + +### Normal Sleep + +This is a fast low power mode of the device that trades-off power consumption for resume latency. +During this state: + +* All clocks other than the KHz slow clock are turned off at the source. +* All power domains are kept on for fast resume. +* Sensor countermeasures can be opportunistically on. +* I/O power domains may or may not be off. + * The state of the IO power domain has no impact on the digital core’s power budget, e.g. the IO power being off does not cause the accompanying digital logic in pads or elsewhere to leak more. + +## Debug + +When performing TAP debug, it is important for the debugging software to prevent the system from going to low power. +If the system enters low power during live debug, the debug session will be broken. +There is currently no standardized way to do this, so it is up to the debugging agent to perform the correct steps. diff --git a/src/pwrmgr/dv/README.md.tpl b/src/pwrmgr/dv/README.md.tpl new file mode 100644 index 000000000..3c5c2b6e7 --- /dev/null +++ b/src/pwrmgr/dv/README.md.tpl @@ -0,0 +1,255 @@ +# PWRMGR DV document +<% top_name = f"top_{topname}" %> +${"##"} Goals +* **DV** + * Verify all PWRMGR IP features by running dynamic simulations with a SV/UVM based testbench. + * Develop and run all tests based on the [testplan](#testplan) below towards closing code and functional coverage on the IP and all of its sub-modules. +* **FPV** + * Verify TileLink device protocol compliance with an SVA based testbench. + +${"##"} Current status +* [Design & verification stage](../doc/checklist.md) + * [HW development stages](../../../../../doc/project_governance/development_stages.md) +* [Simulation results](https://reports.opentitan.org/hw/${top_name}/ip_autogen/pwrmgr/dv/latest/report.html) + +${"##"} Design features +For detailed information on PWRMGR design features, please see the [PWRMGR HWIP technical specification](../README.md). + +${"##"} Testbench architecture +PWRMGR testbench has been constructed based on the [CIP testbench architecture](../../../../dv/sv/cip_lib/README.md). + +${"###"} Block diagram +![Block diagram](./doc/tb.svg) + +${"###"} Top level testbench +Top level testbench is located at [`hw/${top_name}/ip_autogen/pwrmgr/dv/tb.sv`](https://github.com/lowRISC/opentitan/blob/master/hw/${top_name}/ip_autogen/pwrmgr/dv/tb.sv). +It instantiates the PWRMGR DUT module [`hw/${top_name}/ip_autogen/pwrmgr/rtl/pwrmgr.sv`](https://github.com/lowRISC/opentitan/blob/master/hw/${top_name}/ip_autogen/pwrmgr/rtl/pwrmgr.sv). +In addition, it instantiates the following interfaces, connects them to the DUT and sets their handle into `uvm_config_db`: +* [Clock and reset interface](../../../../dv/sv/common_ifs/README.md) +* [TileLink host interface](../../../../dv/sv/tl_agent/README.md) +* PWRMGR interface [`hw/${top_name}/ip_autogen/pwrmgr/dv/env/pwrmgr_if.sv`](https://github.com/lowRISC/opentitan/blob/master/hw/${top_name}/ip_autogen/pwrmgr/dv/env/pwrmgr_if.sv). +* Interrupts ([`pins_if`](../../../../dv/sv/common_ifs/README.md)) +* Alerts ([`alert_esc_if`](../../../../dv/sv/alert_esc_agent/README.md)) + +${"###"} Common DV utility components +The following utilities provide generic helper tasks and functions to perform activities that are common across the project: +* [dv_utils_pkg](../../../../dv/sv/dv_utils/README.md) +* [csr_utils_pkg](../../../../dv/sv/csr_utils/README.md) + +${"###"} Global types & methods +All common types and methods defined at the package level can be found in +[`pwrmgr_env_pkg`](https://github.com/lowRISC/opentitan/blob/master/hw/${top_name}/ip_autogen/pwrmgr/dv/env/pwrmgr_env_pkg.sv). +Some of them in use are: +```systemverilog + typedef enum int { + WakeupSysrst, + WakeupDbgCable, + WakeupPin, + WakeupUsb, + WakeupAonTimer, + WakeupSensorCtrl + } wakeup_e; + + typedef struct packed { + logic main_pd_n; + logic usb_clk_en_active; + logic usb_clk_en_lp; + logic io_clk_en; + logic core_clk_en; + } control_enables_t; + + typedef bit [pwrmgr_reg_pkg::NumWkups-1:0] wakeups_t; + typedef bit [pwrmgr_reg_pkg::NumRstReqs-1:0] resets_t; + + // This is used to send all resets to rstmgr. + typedef bit [pwrmgr_pkg::HwResetWidth-1:0] resets_out_t; +``` +${"###"} TL_agent +PWRMGR testbench instantiates (already handled in CIP base env) [tl_agent](../../../../dv/sv/tl_agent/README.md) which provides the ability to drive and independently monitor random traffic via TL host interface into PWRMGR device. + +${"###"} UVM RAL Model +The PWRMGR RAL model is created with the [`ralgen`](../../../../dv/tools/ralgen/README.md) FuseSoC generator script automatically when the simulation is at the build stage. + +It can be created manually by invoking [`regtool`](../../../../../util/reggen/doc/setup_and_use.md). + +${"###"} Stimulus strategy +The sequences are closely related to the testplan's testpoints. +Testpoints and coverage are described in more detail in the [testplan](#testplan). +All test sequences reside in [`hw/${top_name}/ip_autogen/pwrmgr/dv/env/seq_lib`](https://github.com/lowRISC/opentitan/blob/master/hw/${top_name}/ip_autogen/pwrmgr/dv/env/seq_lib), and extend `pwrmgr_base_vseq`. +The `pwrmgr_base_vseq` virtual sequence is extended from `cip_base_vseq` and serves as a starting point. +It provides commonly used handles, variables, functions and tasks used by the test sequences. +Some of the most commonly used tasks and functions are as follows: +* task `wait_for_fast_fsm`: + Waits for the fast fsm to be active or inactive, indicated by whether the `fetch_en_o` output become On or Off respectively. + We mostly call this expecting it to be active before the tests can start, since any CSR accesses require the CPU to be running. + Due to complexities in the UVM sequences this task is called in the virtual post_apply_reset task of dv_base_vseq. +* task `wait_for_csr_to_propagate_to_slow_domain`: + Waits for `cfg_cdc_sync` CSR to be clear, indicating the CDC to the slow clock has completed. +* task `wait_for_reset_cause`: + Waits for the `pwr_rst_req.reset_cause` output to match an expected cause. +* task `check_wait_info`: + Checks the wake_info CSR matches expectations. +* task `check_reset_status`: + Checks the reset_status CSR matches expectations. +* task `check_and_clear_interrupt`: + Checks the interrupt enable, status, and output pin. + +In addition, the base sequence provides two tasks that provide expected inputs based on the pwrmgr outputs. +In the absence of these inputs the pwrmgr will be stuck waiting forever. +Being based on outputs means the inputs are in accordance to the implicit protocol. +The tasks in question are: +* task `slow_responder`: + Handles required input changes from AST for the slow state machine. + For the various `_en` outputs it changes the `_val` as required, for `core`, `io`, `main`, and `usb` clocks. +* task `fast_responder`: + Handles input changes for the fast state machine. + * Completes the handshake with rstmgr for lc and sys resets: some random cycles after an output reset is requested the corresponding reset src input must go low. + * Completes the handshake with clkmgr: the various `_status` inputs need to match the corresponding `_ip_clk_en` output after some cycles, for `io`, `main`, and `usb` clocks. + * Completes the handshake with lc and otp: both *_done inputs must match the corresponding *_init outputs after some cycles. + +These tasks are started by the parent sequence's `pre_start` task, and terminated gracefully in the parent sequence's `post_start` task. +${"###"} Test sequences +The test sequences besides the base are as follows: +* `pwrmgr_smoke_vseq` tests the pwrmgr through POR, entry and exit from software initiated low power and reset. +* `pwrmgr_wakeup_vseq` checks the transitions to low power and the wakeup settings. + It randomizes wakeup inputs, wakeup enables, the wakeup info capture enable, and the interrupt enable. +* `pwrmgr_aborted_low_power_vseq` creates scenarios that lead to aborting a low power transition. + The abort can be due to the processor waking up very soon, or otp, lc, or flash being busy. +* `pwrmgr_reset_vseq` checks the pwrmgr response to conditional resets and reset enables, and unconditional escalation and main power glitch resets. +* `pwrmgr_wakeup_reset_vseq` aligns reset and wakeup from low power. +* `pwrmgr_lowpower_wakeup_race_vseq` aligns a wakeup event coming in proximity to low power entry. + Notice the wakeup is not expected to impact low power entry, since it is not sampled at this time. + +${"###"} Functional coverage +To ensure high quality constrained random stimulus, it is necessary to develop a functional coverage model. +The following covergroups have been developed to prove that the test intent has been adequately met: +* `wakeup_ctrl_cg` covers wakeup and capture control. +* `wakeup_intr_cg` covers control of the interrupt due to a wakeup. +* `control_cg` covers clock controls. +* `hw_reset_0_cg` covers external reset via `rstreqs_i[0]`. +* `hw_reset_1_cg` covers external reset via `rstreqs_i[1]`. +* `rstmgr_sw_reset_cg` covers software initiated resets via rstmgr CSR. +* `main_power_reset_cg` covers resets due to a main power glitch. +* `esc_reset_cg` covers resets due to an incoming escalation. +* `reset_wakeup_distance_cg` covers the distance in clock cycles between a wakeup and a reset request. + +More details about these sequences and covergroups can be found at [testplan](#testplan). + +${"###"} Self-checking strategy +Many of the checks are performed via SVA, and are enabled for all test sequences. +Refer to the [assertions](#assertions) section below for details. + +${"####"} Scoreboard +The `pwrmgr_scoreboard` is primarily used for end to end checking. + +Many inputs must have specific transitions to prevent the pwrmgr fsms from wait forever. +When possible the transitions are triggered by pwrmgr output changes. +These are described according to the unit that originates or is the recipient of the ports. +See also the test plan for specific ways these are driven to trigger different testpoints. + +${"#####"} AST +- Output `slow_clk_en` is always on. +- Input `slow_clk_val` is unused. +- Outputs `core_clk_en`, `io_clk_en`, and `usb_clk_en` reset low, and go high prior to the slow fsm requesting the fast fsm to wakeup. + Notice the usb clock can be programmed to stay low on wakeup via the `control` CSR. + These clock enables are cleared on reset, and should match their corresponding enables in the `control` CSR on low power transitions. + These clock enables are checked via SVAs in [`hw/${top_name}/ip_autogen/pwrmgr/dv/sva/pwrmgr_clock_enables_sva_if.sv`](https://github.com/lowRISC/opentitan/blob/master/hw/${top_name}/ip_autogen/pwrmgr/dv/sva/pwrmgr_clock_enables_sva_if.sv). + When slow fsm transitions to `SlowPwrStateReqPwrUp` the clock enables should be on (except usb should match `control.usb_clk_en_active`). + When slow fsm transitions to `SlowPwrStatePwrClampOn` the clock enables should match their bits in the `control` CSR. +- Inputs `core_clk_val`, `io_clk_val`, and `usb_clk_val` track the corresponding enables. + They are driven by `slow_responder`, which turn them off when their enables go off, and turn them back on a few random slow clock cycles after their enables go on. + Slow fsm waits for them to go high prior to requesting fast fsm wakeup. + Lack of a high transition when needed is detected via timeout. + Such timeout would be due to the corresponding enables being set incorrectly. + These inputs are checked via SVAs in [`hw/${top_name}/ip_autogen/pwrmgr/dv/sva/pwrmgr_ast_sva_if.sv`](https://github.com/lowRISC/opentitan/blob/master/hw/${top_name}/ip_autogen/pwrmgr/dv/sva/pwrmgr_ast_sva_if.sv). +- Output `main_pd_n` should go high when slow fsm transitions to `SlowPwrStateMainPowerOn`, and should match `control.main_pd_n` CSR when slow fsm transitions to `SlowPwrStateMainPowerOff`. +- Input `main_pok` should turn on for the slow fsm to start power up sequence. + This is also driven by `slow_responder`, which turn this off in response to `main_pd_n` going low, and turn it back on after a few random slow clock cycles from `main_pd_n` going high. + Lack of a high transition causes a timeout, and would point to `main_pd_n` being set incorrectly. +- Output transitions of `pwr_clamp_env` must always precede transitions of + `pwr_clamp` output. + Output transitions of `pwr_clamp` to active must always precede transitions + of `main_pd_n` output to active. + Output transitions of `pwr_clamp` to inactive must always follow transitions + of `main_pd_n` output to inactive. + +${"#####"} RSTMGR +- Output `rst_lc_req` resets to 1, also set on reset transition, and on low power transitions that turn off main clock. + Cleared early on during the steps to fast fsm active. +- Input `rst_lc_src_n` go low in response to `rst_lc_req` high, go high when `rst_lc_req` clears (and lc is reset). + Driven by `fast_responder` in response to `rst_lc_req`, waiting a few random cycles prior to transitions. + Fast fsm waits for it to go low before deactivating, and for it to go high before activating. + Checked implicitly by lack of timeout: a timeout would be due to `rst_lc_req` being set incorrectly, and by SVA as described below. +- Output `rst_sys_req` resets to 1, also set to on reset, and on low power transitions that turn off main clock. + Cleared right before the fast fsm goes active. +- Input `rst_sys_src_n` go low in response to `rst_sys_req` high. + Transitions go high when `rst_sysd_req` clears (and lc is reset). + Fast fsm waits for it to go low before deactivating. + Also driver by `fast_responder`. + Checked implicitly by lack of timeout, and by SVA. +- Output `rstreqs` correspond to the enabled pwrmgr rstreqs inputs plus main power glitch, escalation reset, and software reset request from RSTMGR. + Checked in scoreboard and SVA. +- Output `reset_cause` indicates a reset is due to low power entry or a reset request. + Checked in scoreboard. + +${"#####"} CLKMGR +- Outputs `pwr_clk_o._ip_clk_en` reset low, are driven high by fast fsm when going active, and driven low when going inactive. + The `` correspond to `io`, `main`, and `usb`. +- Inputs `pwr_clk_i._status` are expected to track `pwr_clk_o._ip_clk_en`. + Fast fsm waits for them going high prior to going active, and going low prior to deactivating. + These are controlled by the `control` CSR. + Driven by `fast_responder`, which turns them off when `_ip_clk_en` goes low, and turns them back on a few random cycles after `_ip_clk_en` goes high. + Checked by lack of a timeout: such timeout would be due to `ip_clk_en` being set incorrectly. + Also checked by SVA. + +${"#####"} OTP +- Output `otp_init` resets low, goes high when the fast fsm is going active, and low after the `otp_done` input goes high. +- Input `otp_done` is driven by `fast_responder`. + It is initialized low, and goes high some random cycles after `otp_init` goes high. + The sequencer will timeout if `otp_init` is not driven high. +- Input `otp_idle` normally set high, but is set low by the `pwrmgr_aborted_low_power_vseq` sequence. + +${"#####"} LC +The pins connecting to LC behave pretty much the same way as those to OTP. + +${"#####"} FLASH +- Input `flash_idle` is handled much like `lc_idle` and `otp_idle`. + +${"#####"} CPU +- Input `core_sleeping` is driven by sequences. + It is driven low to enable a transition to low power. + After the transition is under way it is a don't care. + The `pwrmgr_aborted_low_power_vseq` sequence sets it carefully to abort a low power entry soon after the attempt because the processor wakes up. + +${"#####"} Wakeups and Resets +There are a number of wakeup and reset requests. +They are driven by sequences as they need to. + +${"####"} Assertions +The [`hw/${top_name}/ip_autogen/pwrmgr/dv/sva/pwrmgr_bind.sv`](https://github.com/lowRISC/opentitan/blob/master/hw/${top_name}/ip_autogen/pwrmgr/dv/sva/pwrmgr_bind.sv) module binds a few modules containing assertions to the IP as follows: +* TLUL assertions: the `tlul_assert` [assertions](../../../../ip/tlul/doc/TlulProtocolChecker.md) ensures TileLink interface protocol compliance. +* Clock enables assertions: + The `pwrmgr_clock_enables_sva_if` module contains assertions checking that the various clk_en outputs correspond to the settings in the `control` CSR. +* CLKMGR clk_en to status handshake assertions: + The `clkmgr_pwrmgr_sva_if` contains assertions checking the various `_status` inputs track the corresponding `_ip_clk_en` outputs. +* AST input/output handshake assertions: + The `pwrmgr_ast_sva_if` module contains assertions checking that the inputs from the AST respond to the pwrmgr outputs. +* RSTMGR input/output handshake assertions: + The `pwrmgr_rstmgr_sva_if` module contains assertions checking the following: + * The `rst_lc_src_n` input from RSTMGR respond to the `rst_lc_req` pwrmgr output. + * The `rst_sys_src_n` input from RSTMGR respond to the `rst_sys_req` pwrmgr output. + * The different `pwr_rst_o.rstreqs` output bits track the corresponding reset causes. + These include hardware, power glitch, escalation, and software resets. + +In addition, the RTL has assertions to ensure all outputs are initialized to known values after coming out of reset. + +${"##"} Building and running tests +We are using our in-house developed [regression tool](../../../../../util/dvsim/README.md) for building and running our tests and regressions. +Please take a look at the link for detailed information on the usage, capabilities, features and known issues. +Here's how to run a smoke test: +```console +$ $REPO_TOP/util/dvsim/dvsim.py $REPO_TOP/hw/${top_name}/ip_autogen/pwrmgr/dv/pwrmgr_sim_cfg.hjson -i pwrmgr_smoke +``` + +${"##"} Testplan +[Testplan](../data/pwrmgr_testplan.hjson) diff --git a/src/pwrmgr/dv/cov/pwrmgr_cov_bind.sv b/src/pwrmgr/dv/cov/pwrmgr_cov_bind.sv new file mode 100644 index 000000000..d3a4d08cf --- /dev/null +++ b/src/pwrmgr/dv/cov/pwrmgr_cov_bind.sv @@ -0,0 +1,33 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Description: +// Power manager coverage bindings for multi bus input +module pwrmgr_cov_bind; + + bind pwrmgr cip_lc_tx_cov_if u_lc_dft_en_mubi_cov_if ( + .rst_ni (rst_ni), + .val (lc_dft_en_i) + ); + + bind pwrmgr cip_lc_tx_cov_if u_lc_hw_debug_en_mubi_cov_if ( + .rst_ni (rst_ni), + .val (lc_hw_debug_en_i) + ); + + bind pwrmgr cip_mubi_cov_if #(.Width(prim_mubi_pkg::MuBi4Width)) u_rom_ctrl_good_mubi_cov_if ( + .rst_ni (rst_ni), + .mubi (rom_ctrl_i.done) + ); + + bind pwrmgr cip_mubi_cov_if #(.Width(prim_mubi_pkg::MuBi4Width)) u_rom_ctrl_done_mubi_cov_if ( + .rst_ni (rst_ni), + .mubi (rom_ctrl_i.good) + ); + + bind pwrmgr cip_mubi_cov_if #(.Width(prim_mubi_pkg::MuBi4Width)) u_sw_rst_req_mubi_cov_if ( + .rst_ni (rst_ni), + .mubi (sw_rst_req_i) + ); +endmodule // pwrmgr_cov_bind diff --git a/src/pwrmgr/dv/cov/pwrmgr_cov_manual_excl.el b/src/pwrmgr/dv/cov/pwrmgr_cov_manual_excl.el new file mode 100644 index 000000000..6e3e97401 --- /dev/null +++ b/src/pwrmgr/dv/cov/pwrmgr_cov_manual_excl.el @@ -0,0 +1,34 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +//================================================== +// This file contains the Excluded objects +// Generated By User: jdonjdon +// Format Version: 2 +// Date: Sun Sep 25 22:09:48 2022 +// ExclMode: default +//================================================== +CHECKSUM: "2301929872 963630968" +INSTANCE: tb.dut.u_esc_rx.u_prim_count +ANNOTATION: "[UNSUPPORTED] Ports are assigned constant by RTL." +Toggle step_i "net step_i[21:0]" +Toggle set_cnt_i "net set_cnt_i[21:0]" +CHECKSUM: "3681358461" +INSTANCE: tb.dut.u_esc_timeout.u_ref_timeout +ANNOTATION: "[UNR] Input req_chk_i is tied to constant 0 and src_req_i to constant 1" +Assert SyncReqAckHoldReq "assertion" +CHECKSUM: "2699797328" +INSTANCE: tb.dut.pwrmgr_ast_sva_if +ANNOTATION: "[UNR] por_d0_ni input is tied to constant 1" +Assert CoreClkGlitchToEnOff_A "assertion" +ANNOTATION: "[UNR] por_d0_ni input is tied to constant 1" +Assert UsbClkGlitchToValOff_A "assertion" +ANNOTATION: "[UNR] por_d0_ni input is tied to constant 1" +Assert UsbClkGlitchToEnOff_A "assertion" +ANNOTATION: "[UNR] por_d0_ni input is tied to constant 1" +Assert IoClkGlitchToValOff_A "assertion" +ANNOTATION: "[UNR] por_d0_ni input is tied to constant 1" +Assert IoClkGlitchToEnOff_A "assertion" +ANNOTATION: "[UNR] por_d0_ni input is tied to constant 1" +Assert CoreClkGlitchToValOff_A "assertion" diff --git a/src/pwrmgr/dv/doc/tb.svg b/src/pwrmgr/dv/doc/tb.svg new file mode 100644 index 000000000..285ef6948 --- /dev/null +++ b/src/pwrmgr/dv/doc/tb.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/pwrmgr/dv/env/pwrmgr_env.core b/src/pwrmgr/dv/env/pwrmgr_env.core new file mode 100644 index 000000000..731e28063 --- /dev/null +++ b/src/pwrmgr/dv/env/pwrmgr_env.core @@ -0,0 +1,55 @@ +CAPI=2: +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +name: "lowrisc:dv:pwrmgr_env:0.1" +description: "PWRMGR DV UVM environment" +filesets: + files_dv: + depend: + - lowrisc:dv:ralgen + - lowrisc:dv:cip_lib + - lowrisc:ip_interfaces:pwrmgr_pkg + files: + - pwrmgr_env_pkg.sv + - pwrmgr_env_cfg.sv: {is_include_file: true} + - pwrmgr_env_cov.sv: {is_include_file: true} + - pwrmgr_if.sv + - pwrmgr_virtual_sequencer.sv: {is_include_file: true} + - pwrmgr_scoreboard.sv: {is_include_file: true} + - pwrmgr_env.sv: {is_include_file: true} + - seq_lib/pwrmgr_vseq_list.sv: {is_include_file: true} + - seq_lib/pwrmgr_base_vseq.sv: {is_include_file: true} + - seq_lib/pwrmgr_aborted_low_power_vseq.sv: {is_include_file: true} + - seq_lib/pwrmgr_common_vseq.sv: {is_include_file: true} + - seq_lib/pwrmgr_lowpower_wakeup_race_vseq.sv: {is_include_file: true} + - seq_lib/pwrmgr_reset_vseq.sv: {is_include_file: true} + - seq_lib/pwrmgr_smoke_vseq.sv: {is_include_file: true} + - seq_lib/pwrmgr_stress_all_vseq.sv: {is_include_file: true} + - seq_lib/pwrmgr_wakeup_reset_vseq.sv: {is_include_file: true} + - seq_lib/pwrmgr_wakeup_vseq.sv: {is_include_file: true} + - seq_lib/pwrmgr_repeat_wakeup_reset_vseq.sv: {is_include_file: true} + - seq_lib/pwrmgr_sw_reset_vseq.sv: {is_include_file: true} + - seq_lib/pwrmgr_esc_clk_rst_malfunc_vseq.sv: {is_include_file: true} + - seq_lib/pwrmgr_sec_cm_ctrl_config_regwen_vseq.sv: {is_include_file: true} + - seq_lib/pwrmgr_global_esc_vseq.sv: {is_include_file: true} + - seq_lib/pwrmgr_escalation_timeout_vseq.sv: {is_include_file: true} + - seq_lib/pwrmgr_glitch_vseq.sv: {is_include_file: true} + - seq_lib/pwrmgr_disable_rom_integrity_check_vseq.sv: {is_include_file: true} + - seq_lib/pwrmgr_reset_invalid_vseq.sv: {is_include_file: true} + - seq_lib/pwrmgr_lowpower_invalid_vseq.sv: {is_include_file: true} + file_type: systemVerilogSource + +generate: + ral: + generator: ralgen + parameters: + name: pwrmgr + ip_hjson: ../../data/pwrmgr.hjson + +targets: + default: + filesets: + - files_dv + generate: + - ral diff --git a/src/pwrmgr/dv/env/pwrmgr_env.sv b/src/pwrmgr/dv/env/pwrmgr_env.sv new file mode 100644 index 000000000..96646b5f2 --- /dev/null +++ b/src/pwrmgr/dv/env/pwrmgr_env.sv @@ -0,0 +1,57 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +class pwrmgr_env extends cip_base_env #( + .CFG_T (pwrmgr_env_cfg), + .COV_T (pwrmgr_env_cov), + .VIRTUAL_SEQUENCER_T(pwrmgr_virtual_sequencer), + .SCOREBOARD_T (pwrmgr_scoreboard) +); + `uvm_component_utils(pwrmgr_env) + + alert_esc_agent m_esc_agent; + `uvm_component_new + + function void build_phase(uvm_phase phase); + super.build_phase(phase); + if (!uvm_config_db#(virtual clk_rst_if)::get( + this, "", "slow_clk_rst_vif", cfg.slow_clk_rst_vif + )) begin + `uvm_fatal(`gfn, "failed to get slow_clk_rst_vif from uvm_config_db") + end + if (!uvm_config_db#(virtual clk_rst_if)::get( + this, "", "esc_clk_rst_vif", cfg.esc_clk_rst_vif + )) begin + `uvm_fatal(`gfn, "failed to get esc_clk_rst_vif from uvm_config_db") + end + if (!uvm_config_db#(virtual clk_rst_if)::get( + this, "", "lc_clk_rst_vif", cfg.lc_clk_rst_vif + )) begin + `uvm_fatal(`gfn, "failed to get lc_clk_rst_vif from uvm_config_db") + end + if (!uvm_config_db#(virtual pwrmgr_if)::get(this, "", "pwrmgr_vif", cfg.pwrmgr_vif)) begin + `uvm_fatal(`gfn, "failed to get pwrmgr_vif from uvm_config_db") + end + if (!uvm_config_db#(virtual pwrmgr_clock_enables_sva_if)::get( + this, "", "pwrmgr_clock_enables_sva_vif", cfg.pwrmgr_clock_enables_sva_vif + )) begin + `uvm_fatal(`gfn, "failed to get pwrmgr_clock_enables_sva_vif from uvm_config_db") + end + if (!uvm_config_db#(virtual pwrmgr_rstmgr_sva_if)::get( + this, "", "pwrmgr_rstmgr_sva_vif", cfg.pwrmgr_rstmgr_sva_vif + )) begin + `uvm_fatal(`gfn, "failed to get pwrmgr_rstmgr_sva_vif from uvm_config_db") + end + + m_esc_agent = alert_esc_agent::type_id::create("m_esc_agent", this); + uvm_config_db#(alert_esc_agent_cfg)::set(this, "m_esc_agent", "cfg", cfg.m_esc_agent_cfg); + cfg.m_esc_agent_cfg.en_cov = cfg.en_cov; + + endfunction + + function void connect_phase(uvm_phase phase); + super.connect_phase(phase); + endfunction + +endclass diff --git a/src/pwrmgr/dv/env/pwrmgr_env_cfg.sv b/src/pwrmgr/dv/env/pwrmgr_env_cfg.sv new file mode 100644 index 000000000..b94e743ad --- /dev/null +++ b/src/pwrmgr/dv/env/pwrmgr_env_cfg.sv @@ -0,0 +1,52 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +class pwrmgr_env_cfg extends cip_base_env_cfg #( + .RAL_T(pwrmgr_reg_block) +); + + // disable fault csr read check from scoreboard + bit disable_csr_rd_chk = 0; + + // Invalid state test. Used to disable interrupt check. + bit invalid_st_test = 0; + + // ext component cfgs + alert_esc_agent_cfg m_esc_agent_cfg; + + `uvm_object_utils_begin(pwrmgr_env_cfg) + `uvm_object_utils_end + + `uvm_object_new + + // ext interfaces + virtual clk_rst_if esc_clk_rst_vif; + virtual clk_rst_if lc_clk_rst_vif; + virtual clk_rst_if slow_clk_rst_vif; + virtual pwrmgr_if pwrmgr_vif; + virtual pwrmgr_clock_enables_sva_if pwrmgr_clock_enables_sva_vif; + virtual pwrmgr_rstmgr_sva_if pwrmgr_rstmgr_sva_vif; + + // The run_phase object, to deal with objections. + uvm_phase run_phase; + + virtual function void initialize(bit [31:0] csr_base_addr = '1); + list_of_alerts = pwrmgr_env_pkg::LIST_OF_ALERTS; + super.initialize(csr_base_addr); + num_interrupts = ral.intr_state.get_n_used_bits(); + `ASSERT_I(NumInstrMatch_A, num_interrupts == NUM_INTERRUPTS) + `uvm_info(`gfn, $sformatf("num_interrupts = %0d", num_interrupts), UVM_MEDIUM) + + // pwrmgr_tl_intg_err test uses default alert name "fata_fault" + // and it requires following field to be '1' + tl_intg_alert_fields[ral.fault_status.reg_intg_err] = 1; + m_tl_agent_cfg.max_outstanding_req = 1; + m_esc_agent_cfg = alert_esc_agent_cfg::type_id::create("m_esc_agent_cfg"); + `DV_CHECK_RANDOMIZE_FATAL(m_esc_agent_cfg) + m_esc_agent_cfg.is_alert = 0; + // Disable escalation ping coverage. + m_esc_agent_cfg.en_ping_cov = 0; + endfunction + +endclass diff --git a/src/pwrmgr/dv/env/pwrmgr_env_cov.sv b/src/pwrmgr/dv/env/pwrmgr_env_cov.sv new file mode 100644 index 000000000..b348b99ea --- /dev/null +++ b/src/pwrmgr/dv/env/pwrmgr_env_cov.sv @@ -0,0 +1,193 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +/** + * Covergoups that are dependent on run-time parameters that may be available + * only in build_phase can be defined here. + * Covergroups may also be wrapped inside helper classes if needed. + */ + +`include "cip_macros.svh" + +// Wrapper class for wakeup control covergroup. +class pwrmgr_wakeup_ctrl_cg_wrap; + // This covers enable, capture, and status of wakeups. + covergroup wakeup_ctrl_cg(string name) with function sample (bit enable, bit capture, bit wakeup); + option.name = name; + option.per_instance = 1; + + enable_cp: coverpoint enable; + capture_cp: coverpoint capture; + wakeup_cp: coverpoint wakeup; + + wakeup_cross: cross enable_cp, capture_cp, wakeup_cp; + endgroup + + function new(string name); + wakeup_ctrl_cg = new(name); + endfunction + + function void sample (bit enable, bit capture, bit wakeup); + wakeup_ctrl_cg.sample(enable, capture, wakeup); + endfunction +endclass + +// Wrapper class for wakeup interrupt covergroup. +class pwrmgr_wakeup_intr_cg_wrap; + // This covers interrupts generated by wakeups. + covergroup wakeup_intr_cg( + string name + ) with function sample ( + bit wakeup, bit enable, bit status, bit interrupt + ); + option.name = name; + option.per_instance = 1; + + enable_cp: coverpoint enable; + status_cp: coverpoint status; + wakeup_cp: coverpoint wakeup; + interrupt_cp: coverpoint interrupt; + + interrupt_cross: cross enable_cp, status_cp, wakeup_cp, interrupt_cp{ + // An interrupt cannot happen unless wake_status is on. + ignore_bins no_wakeup = interrupt_cross with (!wakeup_cp && interrupt_cp); + // An interrupt cannot happen unless it is enabled. + ignore_bins disable_pin = interrupt_cross with (!enable_cp && interrupt_cp); + // An interrupt cannot happen if intr_status is off. + ignore_bins no_status_pin = interrupt_cross with (!status_cp && interrupt_cp); + // If all preconditions are satisfied there must be an interrupt. + ignore_bins missing_int = interrupt_cross with (enable_cp && status_cp && wakeup_cp && + !interrupt_cp); + } + endgroup + + function new(string name); + wakeup_intr_cg = new(name); + endfunction + + function void sample (bit enable, bit status, bit wakeup, bit interrupt); + wakeup_intr_cg.sample(wakeup, enable, status, interrupt); + endfunction +endclass + +class pwrmgr_env_cov extends cip_base_env_cov #( + .CFG_T(pwrmgr_env_cfg) +); + `uvm_component_utils(pwrmgr_env_cov) + + // the base class provides the following handles for use: + // pwrmgr_env_cfg: cfg + + // covergroups + pwrmgr_wakeup_ctrl_cg_wrap wakeup_ctrl_cg_wrap[pwrmgr_reg_pkg::NumWkups]; + pwrmgr_wakeup_intr_cg_wrap wakeup_intr_cg_wrap[pwrmgr_reg_pkg::NumWkups]; + + // This collects coverage on the clock and power control functionality. + covergroup control_cg with function sample (control_enables_t control_enables, bit sleep); + core_cp: coverpoint control_enables.core_clk_en; + io_cp: coverpoint control_enables.io_clk_en; + usb_lp_cp: coverpoint control_enables.usb_clk_en_lp; + usb_active_cp: coverpoint control_enables.usb_clk_en_active; + main_pd_n_cp: coverpoint control_enables.main_pd_n; + sleep_cp: coverpoint sleep; + + control_cross: cross core_cp, io_cp, usb_lp_cp, usb_active_cp, main_pd_n_cp, sleep_cp; + endgroup + + covergroup hw_reset_0_cg with function sample (logic reset, logic enable, bit sleep); + reset_cp: coverpoint reset; + enable_cp: coverpoint enable; + sleep_cp: coverpoint sleep; + reset_cross: cross reset_cp, enable_cp, sleep_cp { + // Reset and sleep are mutually exclusive. + illegal_bins illegal = reset_cross with (reset_cp && sleep_cp); + } + endgroup + + covergroup hw_reset_1_cg with function sample (logic reset, logic enable, bit sleep); + reset_cp: coverpoint reset; + enable_cp: coverpoint enable; + sleep_cp: coverpoint sleep; + reset_cross: cross reset_cp, enable_cp, sleep_cp { + // Reset and sleep are mutually exclusive. + illegal_bins illegal = reset_cross with (reset_cp && sleep_cp); + } + endgroup + + // This reset cannot be generated in low power state since it is triggered by software. + covergroup rstmgr_sw_reset_cg with function sample (logic sw_reset); + sw_reset_cp: coverpoint sw_reset; + endgroup + + covergroup main_power_reset_cg with function sample (logic main_power_reset, bit sleep); + main_power_reset_cp: coverpoint main_power_reset; + sleep_cp: coverpoint sleep; + reset_cross: cross main_power_reset_cp, sleep_cp { + // Any reset and sleep are mutually exclusive. + illegal_bins illegal = reset_cross with (main_power_reset_cp && sleep_cp); + } + endgroup + + covergroup esc_reset_cg with function sample (logic esc_reset, bit sleep); + esc_reset_cp: coverpoint esc_reset; + sleep_cp: coverpoint sleep; + reset_cross: cross esc_reset_cp, sleep_cp { + // Any reset and sleep are mutually exclusive. + illegal_bins illegal = reset_cross with (esc_reset_cp && sleep_cp); + } + endgroup + + // This measures the number of cycles between the reset and wakeup. + // It is positive when reset happened after wakeup, and zero when they coincided in time. + covergroup reset_wakeup_distance_cg with function sample (int cycles); + cycles_cp: coverpoint cycles { + bins close[] = {[-4 : 4]}; + bins far = default; + } + endgroup + + // This covers the rom inputs that should prevent entering the active state. + covergroup rom_active_blockers_cg with function sample ( + logic [3:0] done, logic [3:0] good, logic [3:0] dft, logic [3:0] debug + ); + done_cp: coverpoint done { + `DV_MUBI4_CP_BINS + } + good_cp: coverpoint good { + `DV_MUBI4_CP_BINS + } + dft_cp: coverpoint dft { + `DV_LC_TX_T_CP_BINS + } + debug_cp: coverpoint debug { + `DV_LC_TX_T_CP_BINS + } + blockers_cross: cross done_cp, good_cp, dft_cp, debug_cp; + endgroup + + function new(string name, uvm_component parent); + super.new(name, parent); + foreach (wakeup_ctrl_cg_wrap[i]) begin + pwrmgr_env_pkg::wakeup_e wakeup = pwrmgr_env_pkg::wakeup_e'(i); + wakeup_ctrl_cg_wrap[i] = new({wakeup.name, "_ctrl_cg"}); + wakeup_intr_cg_wrap[i] = new({wakeup.name, "_intr_cg"}); + end + control_cg = new(); + hw_reset_0_cg = new(); + hw_reset_1_cg = new(); + rstmgr_sw_reset_cg = new(); + main_power_reset_cg = new(); + esc_reset_cg = new(); + reset_wakeup_distance_cg = new(); + rom_active_blockers_cg = new(); + endfunction : new + + virtual function void build_phase(uvm_phase phase); + super.build_phase(phase); + // [or instantiate covergroups here] + // Please instantiate sticky_intr_cov array of objects for all interrupts that are sticky + // See cip_base_env_cov for details + endfunction + +endclass diff --git a/src/pwrmgr/dv/env/pwrmgr_env_pkg.sv b/src/pwrmgr/dv/env/pwrmgr_env_pkg.sv new file mode 100644 index 000000000..abfb1c051 --- /dev/null +++ b/src/pwrmgr/dv/env/pwrmgr_env_pkg.sv @@ -0,0 +1,89 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +package pwrmgr_env_pkg; + // dep packages + import uvm_pkg::*; + import top_pkg::*; + import dv_utils_pkg::*; + import dv_lib_pkg::*; + import tl_agent_pkg::*; + import cip_base_pkg::*; + import dv_base_reg_pkg::*; + import csr_utils_pkg::*; + import pwrmgr_ral_pkg::*; + import alert_esc_agent_pkg::*; + import pwrmgr_pkg::PowerDomains; + import prim_mubi_pkg::mubi4_t; + import prim_mubi_pkg::MuBi4False; + import prim_mubi_pkg::MuBi4True; + import prim_mubi_pkg::MuBi4Width; + import sec_cm_pkg::*; + // macro includes + `include "uvm_macros.svh" + `include "dv_macros.svh" + + // parameters + parameter int NUM_INTERRUPTS = 1; + + // clk enable disable delay + parameter uint MAIN_CLK_DELAY_MIN = 15; + parameter uint MAIN_CLK_DELAY_MAX = 258; + parameter uint ESC_CLK_DELAY_MIN = 1; + parameter uint ESC_CLK_DELAY_MAX = 10; + + // alerts + parameter uint NUM_ALERTS = 1; + parameter string LIST_OF_ALERTS[] = {"fatal_fault"}; + + // types + typedef enum int { + WakeupSysrst, + WakeupDbgCable, + WakeupPin, + WakeupUsb, + WakeupAonTimer, + WakeupSensorCtrl + } wakeup_e; + + typedef enum int { + PwrmgrMubiNone = 0, + PwrmgrMubiLcCtrl = 1, + PwrmgrMubiRomCtrl = 2 + } pwrmgr_mubi_e; + + typedef struct packed { + logic main_pd_n; + logic usb_clk_en_active; + logic usb_clk_en_lp; + logic io_clk_en; + logic core_clk_en; + } control_enables_t; + + typedef bit [pwrmgr_reg_pkg::NumWkups-1:0] wakeups_t; + typedef bit [pwrmgr_reg_pkg::NumRstReqs-1:0] resets_t; + + // This is used to send all resets to rstmgr. + typedef bit [pwrmgr_pkg::HwResetWidth-1:0] resets_out_t; + + // need a short name to avoid 100 line cut off + parameter int MUBI4W = prim_mubi_pkg::MuBi4Width; + + // functions + + // variables + bit [NUM_INTERRUPTS-1:0] exp_intr; + wakeups_t exp_wakeup_reasons; + control_enables_t control_enables; + logic low_power_hint; + + // package sources + `include "pwrmgr_env_cfg.sv" + `include "pwrmgr_env_cov.sv" + `include "pwrmgr_virtual_sequencer.sv" + `include "pwrmgr_scoreboard.sv" + `include "pwrmgr_env.sv" + `include "pwrmgr_vseq_list.sv" + +endpackage diff --git a/src/pwrmgr/dv/env/pwrmgr_if.sv b/src/pwrmgr/dv/env/pwrmgr_if.sv new file mode 100644 index 000000000..2a6e7202d --- /dev/null +++ b/src/pwrmgr/dv/env/pwrmgr_if.sv @@ -0,0 +1,219 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// pwrmgr interface. +// +// Samples some internal signals to help coverage collection: +interface pwrmgr_if ( + input logic clk, + input logic rst_n, + input logic clk_slow, + input logic rst_slow_n +); + import uvm_pkg::*; + import pwrmgr_env_pkg::*; + + // Ports to the dut side. + + logic rst_main_n; + + pwrmgr_pkg::pwr_ast_req_t pwr_ast_req; + pwrmgr_pkg::pwr_ast_rsp_t pwr_ast_rsp; + + pwrmgr_pkg::pwr_rst_req_t pwr_rst_req; + pwrmgr_pkg::pwr_rst_rsp_t pwr_rst_rsp; + + pwrmgr_pkg::pwr_clk_req_t pwr_clk_req; + pwrmgr_pkg::pwr_clk_rsp_t pwr_clk_rsp; + + pwrmgr_pkg::pwr_otp_req_t pwr_otp_req; + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_rsp; + + pwrmgr_pkg::pwr_lc_req_t pwr_lc_req; + pwrmgr_pkg::pwr_lc_rsp_t pwr_lc_rsp; + + pwrmgr_pkg::pwr_flash_t pwr_flash; + + pwrmgr_pkg::pwrmgr_cpu_t cpu_i; + pwrmgr_pkg::pwr_cpu_t pwr_cpu; + + lc_ctrl_pkg::lc_tx_t fetch_en; + lc_ctrl_pkg::lc_tx_t lc_hw_debug_en; + lc_ctrl_pkg::lc_tx_t lc_dft_en; + + logic [ pwrmgr_reg_pkg::NumWkups-1:0] wakeups_i; + logic [pwrmgr_reg_pkg::NumRstReqs-1:0] rstreqs_i; + + logic strap; + logic low_power; + rom_ctrl_pkg::pwrmgr_data_t rom_ctrl; + + prim_mubi_pkg::mubi4_t sw_rst_req_i; + + logic intr_wakeup; + + // Relevant CSR values. + logic wakeup_en_regwen; + logic [ pwrmgr_reg_pkg::NumWkups-1:0] wakeup_en; + logic [ pwrmgr_reg_pkg::NumWkups-1:0] wakeup_status; + logic wakeup_capture_en; + + logic [pwrmgr_reg_pkg::NumRstReqs-1:0] reset_en; + logic [pwrmgr_reg_pkg::NumRstReqs-1:0] reset_en_q; + logic [pwrmgr_reg_pkg::NumRstReqs-1:0] reset_status; + + logic lowpwr_cfg_wen; + pwrmgr_reg_pkg::pwrmgr_hw2reg_wake_info_reg_t wake_info; + + // Internal DUT signals. +`ifndef PATH_TO_DUT + `define PATH_TO_DUT tb.dut +`endif + + // Slow fsm state. + pwrmgr_pkg::slow_pwr_state_e slow_state; + always_comb slow_state = `PATH_TO_DUT.u_slow_fsm.state_q; + + // Fast fsm state. + pwrmgr_pkg::fast_pwr_state_e fast_state; + always_comb fast_state = `PATH_TO_DUT.u_fsm.state_q; + + // cfg regwen + always_comb lowpwr_cfg_wen = `PATH_TO_DUT.lowpwr_cfg_wen; + + // reset status + always_comb reset_status = {`PATH_TO_DUT.u_reg.reset_status_val_1_qs, + `PATH_TO_DUT.u_reg.reset_status_val_0_qs}; + always_comb reset_en_q = {`PATH_TO_DUT.u_reg.reset_en_en_1_qs, + `PATH_TO_DUT.u_reg.reset_en_en_0_qs}; + always_comb + wakeup_en = { + `PATH_TO_DUT.reg2hw.wakeup_en[5].q, + `PATH_TO_DUT.reg2hw.wakeup_en[4].q, + `PATH_TO_DUT.reg2hw.wakeup_en[3].q, + `PATH_TO_DUT.reg2hw.wakeup_en[2].q, + `PATH_TO_DUT.reg2hw.wakeup_en[1].q, + `PATH_TO_DUT.reg2hw.wakeup_en[0].q + }; + + // Wakeup_status ro CSR. + always_comb + wakeup_status = { + `PATH_TO_DUT.hw2reg.wake_status[5].d, + `PATH_TO_DUT.hw2reg.wake_status[4].d, + `PATH_TO_DUT.hw2reg.wake_status[3].d, + `PATH_TO_DUT.hw2reg.wake_status[2].d, + `PATH_TO_DUT.hw2reg.wake_status[1].d, + `PATH_TO_DUT.hw2reg.wake_status[0].d + }; + + always_comb wakeup_capture_en = !`PATH_TO_DUT.u_reg.wake_info_capture_dis_qs; + always_comb wake_info = `PATH_TO_DUT.i_wake_info.info_o; + + logic intr_enable; + always_comb intr_enable = `PATH_TO_DUT.reg2hw.intr_enable.q; + + logic intr_status; + always_comb intr_status = `PATH_TO_DUT.reg2hw.intr_state.q; + + // This is only used to determine if an interrupt will be set in case of a reset while in + // low power. tryIt is very hard to perdict if the reset or a wakeup happen first, so this + // signal is used to help instead. + pwrmgr_pkg::pwrup_cause_e pwrup_cause; + always_comb pwrup_cause = `PATH_TO_DUT.slow_pwrup_cause; + + // Used to disable assertions once with the first power glitch. + bit internal_assertion_disabled; + + function automatic void update_ast_main_pok(logic value); + pwr_ast_rsp.main_pok = value; + endfunction + + function automatic void update_otp_done(logic value); + pwr_otp_rsp.otp_done = value; + endfunction + + function automatic void update_otp_idle(logic value); + pwr_otp_rsp.otp_idle = value; + endfunction + + function automatic void update_lc_done(logic value); + pwr_lc_rsp.lc_done = value; + endfunction + + function automatic void update_lc_idle(logic value); + pwr_lc_rsp.lc_idle = value; + endfunction + + function automatic void update_flash_idle(logic value); + pwr_flash.flash_idle = value; + endfunction + + function automatic void update_cpu_sleeping(logic value); + pwr_cpu.core_sleeping = value; + endfunction + + function automatic void update_wakeups(logic [pwrmgr_reg_pkg::NumWkups-1:0] wakeups); + wakeups_i = wakeups; + endfunction + + function automatic void update_resets(logic [pwrmgr_reg_pkg::NumRstReqs-1:0] resets); + rstreqs_i = resets; + endfunction + + function automatic void update_reset_en( + logic [pwrmgr_reg_pkg::NumRstReqs-1:0] reset_en_value); + reset_en = reset_en_value; + endfunction + + function automatic void update_sw_rst_req(prim_mubi_pkg::mubi4_t value); + sw_rst_req_i = value; + endfunction + + // Sends a main power glitch and disables a design assertion that trips for power glitches. + task automatic glitch_power_reset(); + rst_main_n = 1'b0; + if (!internal_assertion_disabled) begin + internal_assertion_disabled = 1'b1; + `uvm_info("pwrmgr_if", "disabling power glitch related SVA", UVM_MEDIUM) + $assertoff(1, tb.dut.u_slow_fsm.IntRstReq_A); + end + repeat (2) @(posedge clk_slow); + rst_main_n = 1'b1; + endtask + + // FIXME Move all these initializations to sequences. + initial begin + // From AST. + pwr_ast_rsp = '{default: '0}; + pwr_rst_rsp = '{default: '0}; + pwr_clk_rsp = '{default: '0}; + pwr_otp_rsp = '{default: '0}; + pwr_lc_rsp = '{default: '0}; + pwr_flash = '{default: '0}; + pwr_cpu = pwrmgr_pkg::PWR_CPU_DEFAULT; + wakeups_i = pwrmgr_pkg::WAKEUPS_DEFAULT; + rstreqs_i = pwrmgr_pkg::RSTREQS_DEFAULT; + sw_rst_req_i = prim_mubi_pkg::MuBi4False; + rom_ctrl = rom_ctrl_pkg::PWRMGR_DATA_DEFAULT; + end + + clocking slow_cb @(posedge clk_slow); + input slow_state; + input pwr_ast_req; + output pwr_ast_rsp; + endclocking + + clocking fast_cb @(posedge clk); + input fast_state; + input pwr_rst_req; + output pwr_rst_rsp; + input pwr_clk_req; + output pwr_clk_rsp; + input pwr_lc_req; + output pwr_lc_rsp; + input pwr_otp_req; + output pwr_otp_rsp; + endclocking +endinterface diff --git a/src/pwrmgr/dv/env/pwrmgr_scoreboard.sv b/src/pwrmgr/dv/env/pwrmgr_scoreboard.sv new file mode 100644 index 000000000..137989604 --- /dev/null +++ b/src/pwrmgr/dv/env/pwrmgr_scoreboard.sv @@ -0,0 +1,361 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +class pwrmgr_scoreboard extends cip_base_scoreboard #( + .CFG_T(pwrmgr_env_cfg), + .RAL_T(pwrmgr_reg_block), + .COV_T(pwrmgr_env_cov) +); + `uvm_component_utils(pwrmgr_scoreboard) + + // local variables + + // TLM agent fifos + + // local queues to hold incoming packets pending comparison + + `uvm_component_new + + function void build_phase(uvm_phase phase); + string common_seq_type; + super.build_phase(phase); + + void'($value$plusargs("run_%0s", common_seq_type)); + if (common_seq_type == "stress_all_with_rand_reset") do_alert_check = 0; + endfunction + + task run_phase(uvm_phase phase); + super.run_phase(phase); + cfg.run_phase = phase; + fork + monitor_power_glitch(); + monitor_escalation_timeout(); + reset_cip_helper(); + wakeup_ctrl_coverage_collector(); + wakeup_intr_coverage_collector(); + low_power_coverage_collector(); + reset_coverage_collector(); + rom_coverage_collector(); + join_none + endtask + + task monitor_power_glitch(); + fork + forever + @cfg.pwrmgr_vif.rst_main_n begin + if (cfg.pwrmgr_vif.rst_main_n == 1'b0 && `gmv(ral.control.main_pd_n)) begin + set_exp_alert("fatal_fault", 1, 500); + end + end + join + endtask + + // An escalation timeout is triggered in test sequences by stopping clk_esc_i or by driving + // rst_esc_ni active when the dut state is not expecting it. + task monitor_escalation_timeout(); + fork + forever + @(posedge cfg.esc_clk_rst_vif.clk_gate) begin + // A timeout could be triggered after more than 121 clk_i cycles, but this number + // is somewhat unpredictable for reasons explained in the pwrmgr_escalation_timeout + // sequence, so this relies on the sequence to avoid unpredictable stoppages. + `uvm_info(`gfn, "Detected unexpected clk_esc_i stop", UVM_MEDIUM) + fork + begin : isolation_fork + // This fork is so we can wait for a number of cycles with the clock inactive, + // and stop waiting if the escalation clock gate is re-opened. + fork + begin + cfg.clk_rst_vif.wait_clks(121); + if (cfg.esc_clk_rst_vif.clk_gate && cfg.pwrmgr_vif.pwr_ast_req.io_clk_en && + cfg.pwrmgr_vif.pwr_clk_req.io_ip_clk_en) begin + `uvm_info(`gfn, "clk_esc_i has been inactive enough to trigger an alert", + UVM_MEDIUM) + `uvm_info(`gfn, "set_exp_alert from monitor_escalation_timeout clock gated", + UVM_MEDIUM) + set_exp_alert("fatal_fault", 1, 500); + end + end + // This stops the wait if the gate is re-opened. + @(negedge cfg.esc_clk_rst_vif.clk_gate); + join_any + disable fork; + end + join + end + forever + @(negedge cfg.esc_clk_rst_vif.o_rst_n) begin + if (cfg.pwrmgr_vif.fetch_en == lc_ctrl_pkg::On) begin + `uvm_info(`gfn, "Detected unexpected rst_esc_ni active", UVM_MEDIUM) + set_exp_alert("fatal_fault", 1, 500); + end + end + join + endtask + + // We need to reset the cip scoreboard, since the alert handler responds + // to lc domain0 resets, yet the pwrmgr's clk_rst_vif is aon. So when a + // reset happens the cip scoreboard needs to be informed, both when reset + // starts and when it ends. + task reset_cip_helper(); + fork + forever + @cfg.pwrmgr_vif.pwr_rst_req.rst_lc_req begin + if (|cfg.pwrmgr_vif.pwr_rst_req.rst_lc_req) begin + // Start of d0 reset request. + `uvm_info(`gfn, "pwrmgr start reset in reset_cip_helper", UVM_MEDIUM) + cfg.reset_asserted(); + end + end + forever + @cfg.pwrmgr_vif.fetch_en begin + if (cfg.pwrmgr_vif.fetch_en == lc_ctrl_pkg::On) begin + // End of d0 reset request. + `uvm_info(`gfn, "pwrmgr end reset in reset_cip_helper", UVM_MEDIUM) + reset_alert_state(); + end + end + join + endtask + + task wakeup_ctrl_coverage_collector(); + forever + @(posedge (|cfg.pwrmgr_vif.wakeups_i)) begin + if (cfg.en_cov) begin + // Allow for synchronization delay. + cfg.slow_clk_rst_vif.wait_clks(2); + foreach (cov.wakeup_ctrl_cg_wrap[i]) begin + cov.wakeup_ctrl_cg_wrap[i].sample(cfg.pwrmgr_vif.wakeup_en[i], + cfg.pwrmgr_vif.wakeup_capture_en, + cfg.pwrmgr_vif.wakeups_i[i]); + end + end + end + endtask + + task wakeup_intr_coverage_collector(); + forever + @(posedge (cfg.pwrmgr_vif.fast_state == pwrmgr_pkg::FastPwrStateRomCheckDone)) begin + if (cfg.en_cov) begin + foreach (cov.wakeup_intr_cg_wrap[i]) begin + cov.wakeup_intr_cg_wrap[i].sample( + cfg.pwrmgr_vif.wakeup_status[i], cfg.pwrmgr_vif.intr_enable, + cfg.pwrmgr_vif.intr_status, cfg.pwrmgr_vif.intr_wakeup); + end + end + end + endtask + + task low_power_coverage_collector(); + forever + @(posedge cfg.pwrmgr_vif.pwr_rst_req.reset_cause == pwrmgr_pkg::LowPwrEntry) begin + if (cfg.en_cov) begin + // At this point pwrmgr is asleep. + cov.control_cg.sample(control_enables, 1'b1); + end + end + endtask + + local task sample_reset_coverage(bit sleep); + cov.hw_reset_0_cg.sample(cfg.pwrmgr_vif.rstreqs_i[0], cfg.pwrmgr_vif.reset_en[0], sleep); + cov.hw_reset_1_cg.sample(cfg.pwrmgr_vif.rstreqs_i[1], cfg.pwrmgr_vif.reset_en[1], sleep); + cov.rstmgr_sw_reset_cg.sample(cfg.pwrmgr_vif.sw_rst_req_i == prim_mubi_pkg::MuBi4True); + cov.main_power_reset_cg.sample( + cfg.pwrmgr_vif.pwr_rst_req.rstreqs[pwrmgr_reg_pkg::ResetMainPwrIdx], sleep); + cov.esc_reset_cg.sample(cfg.pwrmgr_vif.pwr_rst_req.rstreqs[pwrmgr_reg_pkg::ResetEscIdx], sleep); + `uvm_info(`gfn, $sformatf( + { + "reset_cg sample with hw_resets=%b, hw_resets_en=%b, ", + "esc_rst=%b, main_pwr_rst=%b, sw_rst=%b, sleep=%b" + }, + cfg.pwrmgr_vif.rstreqs_i, + cfg.pwrmgr_vif.reset_en, + cfg.pwrmgr_vif.pwr_rst_req.rstreqs[pwrmgr_reg_pkg::ResetEscIdx], + cfg.pwrmgr_vif.pwr_rst_req.rstreqs[pwrmgr_reg_pkg::ResetMainPwrIdx], + cfg.pwrmgr_vif.sw_rst_req_i == prim_mubi_pkg::MuBi4True, + sleep + ), UVM_MEDIUM) + endtask + + task reset_coverage_collector(); + fork + forever + @(posedge cfg.pwrmgr_vif.pwr_rst_req.reset_cause == pwrmgr_pkg::HwReq) begin + if (cfg.en_cov) begin + sample_reset_coverage(.sleep(1'b0)); + end + end + forever + @(posedge cfg.pwrmgr_vif.slow_state == pwrmgr_pkg::SlowPwrStateLowPower) begin + if (cfg.en_cov) begin + sample_reset_coverage(.sleep(1'b1)); + end + end + join_none + endtask + + task rom_coverage_collector(); + forever + @(cfg.pwrmgr_vif.rom_ctrl or cfg.pwrmgr_vif.lc_hw_debug_en or cfg.pwrmgr_vif.lc_dft_en) begin + if (cfg.en_cov) begin + cov.rom_active_blockers_cg.sample(cfg.pwrmgr_vif.rom_ctrl.done, + cfg.pwrmgr_vif.rom_ctrl.good, cfg.pwrmgr_vif.lc_dft_en, + cfg.pwrmgr_vif.lc_hw_debug_en); + end + end + endtask + + virtual task process_tl_access(tl_seq_item item, tl_channels_e channel, string ral_name); + uvm_reg csr; + bit do_read_check = ~(cfg.disable_csr_rd_chk); + bit skip_intr_chk = cfg.invalid_st_test; + bit write = item.is_write(); + uvm_reg_addr_t csr_addr = cfg.ral_models[ral_name].get_word_aligned_addr(item.a_addr); + + bit addr_phase_read = (!write && channel == AddrChannel); + bit addr_phase_write = (write && channel == AddrChannel); + bit data_phase_read = (!write && channel == DataChannel); + bit data_phase_write = (write && channel == DataChannel); + + // if access was to a valid csr, get the csr handle + if (csr_addr inside {cfg.ral_models[ral_name].csr_addrs}) begin + csr = cfg.ral_models[ral_name].default_map.get_reg_by_offset(csr_addr); + `DV_CHECK_NE_FATAL(csr, null) + end else begin + `uvm_fatal(`gfn, $sformatf("Access unexpected addr 0x%0h", csr_addr)) + end + + // if incoming access is a write to a valid csr, then make updates right away + if (addr_phase_write) begin + `uvm_info(`gfn, $sformatf("Writing 0x%x to %s", item.a_data, csr.get_full_name()), UVM_MEDIUM) + void'(csr.predict(.value(item.a_data), .kind(UVM_PREDICT_WRITE), .be(item.a_mask))); + end + + // process the csr req + // for write, update local variable and fifo at address phase + // for read, update predication at address phase and compare at data phase + case (csr.get_name()) + // add individual case item for each csr + "intr_state": begin + if (skip_intr_chk) return; + if (data_phase_write) begin + exp_intr &= ~item.a_data; + end else if (data_phase_read) begin + bit [TL_DW-1:0] intr_en = ral.intr_enable.get_mirrored_value(); + foreach (exp_intr[i]) begin + if (cfg.en_cov) begin + cov.intr_cg.sample(i, intr_en[i], exp_intr[i]); + cov.intr_pins_cg.sample(i, cfg.intr_vif.pins[i]); + end + `DV_CHECK_EQ(item.d_data[i], exp_intr[i], $sformatf("Interrupt bit %0d", i)); + `DV_CHECK_CASE_EQ(cfg.intr_vif.pins[i], (intr_en[i] & exp_intr[i]), $sformatf( + "Interrupt_pin bit %0d", i)); + end + end + // rw1c: write 1 clears, write 0 is no-op. + do_read_check = 1'b0; + end + "intr_enable", "alert_test": begin + // Do nothing + end + "intr_test": begin + if (data_phase_write) begin + bit [TL_DW-1:0] intr_en = ral.intr_enable.get_mirrored_value(); + exp_intr |= item.a_data; + if (cfg.en_cov) begin + foreach (exp_intr[i]) begin + cov.intr_test_cg.sample(i, item.a_data[i], intr_en[i], exp_intr[i]); + end + end + end + // Write-only, so it can't be read. + do_read_check = 1'b0; + end + "ctrl_cfg_regwen": begin + // Read-only. Hardware clears this bit when going to low power mode, + // and sets it in active mode. + do_read_check = 1'b0; + end + "control": begin + // Only some bits can be checked on reads. Bit 0 is cleared by hardware + // on low power transition or when registering a valid reset. + if (data_phase_write) begin + low_power_hint = get_field_val(ral.control.low_power_hint, item.a_data); + control_enables = '{ + core_clk_en: get_field_val(ral.control.core_clk_en, item.a_data), + io_clk_en: get_field_val(ral.control.io_clk_en, item.a_data), + usb_clk_en_lp: get_field_val(ral.control.usb_clk_en_lp, item.a_data), + usb_clk_en_active: get_field_val(ral.control.usb_clk_en_active, item.a_data), + main_pd_n: get_field_val(ral.control.main_pd_n, item.a_data) + }; + `uvm_info(`gfn, $sformatf("Writing low power hint=%b", low_power_hint), UVM_MEDIUM) + `uvm_info(`gfn, $sformatf("Writing control_enables=%p", control_enables), UVM_MEDIUM) + if (cfg.en_cov) begin + // At this point the processor is not asleep. + cov.control_cg.sample(control_enables, 1'b0); + end + end + end + "cfg_cdc_sync": begin + // rw1c: When written to 1 this bit self-clears when the slow clock domain + // syncs. + do_read_check = 1'b0; + end + "wakeup_en_regwen": begin + end + "wakeup_en": begin + end + "wake_status": begin + // Read-only. + do_read_check = 1'b0; + end + "reset_en_regwen": begin + // rw0c, so writing a 1 is a no-op. + end + "reset_en": begin + if (data_phase_write) begin + cfg.pwrmgr_vif.update_reset_en(item.a_data); + end + end + "reset_status": begin + // Read-only. + do_read_check = 1'b0; + end + "escalate_reset_status": begin + // Read-only. + do_read_check = 1'b0; + end + "wake_info_capture_dis": begin + end + "wake_info": begin + // rw1c: write 1 clears, write 0 is no-op. + do_read_check = 1'b0; + end + default: begin + `uvm_fatal(`gfn, $sformatf("invalid csr: %0s", csr.get_full_name())) + end + endcase + + // On reads, if do_read_check, is set, then check mirrored_value against item.d_data + if (data_phase_read) begin + `uvm_info(`gfn, $sformatf("Reading 0x%x from %s", item.d_data, csr.get_full_name()), UVM_LOW) + if (do_read_check) begin + `DV_CHECK_EQ(csr.get_mirrored_value(), item.d_data, $sformatf( + "reg name: %0s", csr.get_full_name())) + end + void'(csr.predict(.value(item.d_data), .kind(UVM_PREDICT_READ))); + end + endtask + + virtual function void reset(string kind = "HARD"); + super.reset(kind); + // reset local fifos queues and variables + endfunction + + function void check_phase(uvm_phase phase); + super.check_phase(phase); + // post test checks - ensure that all local fifos and queues are empty + endfunction + +endclass diff --git a/src/pwrmgr/dv/env/pwrmgr_virtual_sequencer.sv b/src/pwrmgr/dv/env/pwrmgr_virtual_sequencer.sv new file mode 100644 index 000000000..ec7f602fb --- /dev/null +++ b/src/pwrmgr/dv/env/pwrmgr_virtual_sequencer.sv @@ -0,0 +1,14 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +class pwrmgr_virtual_sequencer extends cip_base_virtual_sequencer #( + .CFG_T(pwrmgr_env_cfg), + .COV_T(pwrmgr_env_cov) +); + `uvm_component_utils(pwrmgr_virtual_sequencer) + + + `uvm_component_new + +endclass diff --git a/src/pwrmgr/dv/env/seq_lib/pwrmgr_aborted_low_power_vseq.sv b/src/pwrmgr/dv/env/seq_lib/pwrmgr_aborted_low_power_vseq.sv new file mode 100644 index 000000000..4c8bb6254 --- /dev/null +++ b/src/pwrmgr/dv/env/seq_lib/pwrmgr_aborted_low_power_vseq.sv @@ -0,0 +1,126 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// The aborted low power test causes low power transitions to abort for CPU interrupts and nvms not +// idle. It randomly enables wakeups, info capture, and interrupts, and sends wakeups at random +// times, and causes a test failure if they are not aborted. +class pwrmgr_aborted_low_power_vseq extends pwrmgr_base_vseq; + `uvm_object_utils(pwrmgr_aborted_low_power_vseq) + + `uvm_object_new + + // If set causes an abort because the CPU gets an interrupt, which shows up as + // pwr_cpu.core_sleeping being low when the fast FSM is in FastPwrStateFallThrough. + rand bit cpu_interrupt; + + constraint cpu_interrupt_c { + cpu_interrupt dist { + 1 := 2, + 0 := 6 + }; + } + + rand bit flash_idle; + rand bit lc_idle; + rand bit otp_idle; + + constraint idle_c { + solve cpu_interrupt before flash_idle, lc_idle, otp_idle; + if (!cpu_interrupt) {(flash_idle && lc_idle && otp_idle) == 1'b0;} + } + + constraint wakeups_c {wakeups != 0;} + + constraint wakeup_en_c { + solve wakeups before wakeups_en; + |(wakeups_en & wakeups) == 1'b1; + } + + // Make sure wakeup capture is enabled to check the abort happened. + constraint enable_wakeup_capture_c {disable_wakeup_capture == 1'b0;} + + task body(); + logic [TL_DW-1:0] value; + wakeups_t enabled_wakeups; + wait_for_fast_fsm(FastFsmActive); + + check_wake_status('0); + set_nvms_idle(); + for (int i = 0; i < num_trans; ++i) begin + `uvm_info(`gfn, "Starting new round", UVM_MEDIUM) + `DV_CHECK_RANDOMIZE_FATAL(this) + setup_interrupt(.enable(en_intr)); + // Enable wakeups. + enabled_wakeups = wakeups_en & wakeups; + `DV_CHECK(enabled_wakeups, $sformatf( + "Some wakeup must be enabled: wkups=%b, wkup_en=%b", wakeups, wakeups_en)) + `uvm_info(`gfn, $sformatf( + "Enabled wakeups=0x%x (wkups=%x wkup_en=%x)", enabled_wakeups, wakeups, wakeups_en + ), UVM_MEDIUM) + csr_wr(.ptr(ral.wakeup_en[0]), .value(wakeups_en)); + + `uvm_info(`gfn, $sformatf("%0sabling wakeup capture", disable_wakeup_capture ? "Dis" : "En"), + UVM_MEDIUM) + csr_wr(.ptr(ral.wake_info_capture_dis), .value(disable_wakeup_capture)); + low_power_hint = 1'b1; + + // Put CPU to sleep even before the control registers are fully written to avoid + // unexpected failures to abort due to delicate timing. + cfg.pwrmgr_vif.update_cpu_sleeping(1'b1); + + fork + begin + update_control_csr(); + `uvm_info(`gfn, $sformatf("After update_control_csr exp_intr=%b", exp_intr), UVM_MEDIUM) + end + begin + // Prepare for an abort ahead of time. + `DV_WAIT(cfg.pwrmgr_vif.fast_state != pwrmgr_pkg::FastPwrStateActive) + // Wait one more cycle for update_control_csr called above to predict the interrupt + // based on the value of cpu_sleeping right after the transition out of active state. + // There is enough time for this since it takes time to disable the clocks. + cfg.clk_rst_vif.wait_clks(1); + if (cpu_interrupt) begin + `uvm_info(`gfn, "Expecting a fall through (0x40)", UVM_MEDIUM) + cfg.pwrmgr_vif.update_cpu_sleeping(1'b0); + end else begin + `uvm_info(`gfn, $sformatf( + "Expecting an abort (0x80): fi=%b, li=%b, oi=%b", + flash_idle, + lc_idle, + otp_idle + ), UVM_MEDIUM) + set_nvms_idle(flash_idle, lc_idle, otp_idle); + end + end + join + wait_for_fast_fsm(FastFsmActive); + + `uvm_info(`gfn, "Back from sleep attempt", UVM_MEDIUM) + @cfg.clk_rst_vif.cb; + + // No wakeups, but check abort and fall_through. + fork + begin + fast_check_reset_status(0); + end + begin + fast_check_wake_info(.reasons('0), .fall_through(cpu_interrupt), .abort(~cpu_interrupt)); + end + join + + clear_wake_info(); + + // And check interrupt is set. + check_and_clear_interrupt(.expected(1'b1)); + + // Get ready for another round. + cfg.pwrmgr_vif.update_cpu_sleeping(1'b0); + set_nvms_idle(); + cfg.slow_clk_rst_vif.wait_clks(4); + end + `uvm_info(`gfn, "Test done", UVM_MEDIUM) + endtask + +endclass : pwrmgr_aborted_low_power_vseq diff --git a/src/pwrmgr/dv/env/seq_lib/pwrmgr_base_vseq.sv b/src/pwrmgr/dv/env/seq_lib/pwrmgr_base_vseq.sv new file mode 100644 index 000000000..ad99b594a --- /dev/null +++ b/src/pwrmgr/dv/env/seq_lib/pwrmgr_base_vseq.sv @@ -0,0 +1,835 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +class pwrmgr_base_vseq extends cip_base_vseq #( + .RAL_T (pwrmgr_reg_block), + .CFG_T (pwrmgr_env_cfg), + .COV_T (pwrmgr_env_cov), + .VIRTUAL_SEQUENCER_T(pwrmgr_virtual_sequencer) +); + `uvm_object_utils(pwrmgr_base_vseq) + + `uvm_object_new + + localparam int ActiveTimeoutInNanoSeconds = 10_000; + localparam int PropagationToSlowTimeoutInNanoSeconds = 15_000; + localparam int FetchEnTimeoutNs = 40_000; + + localparam int MaxCyclesBeforeEnable = 12; + + typedef enum int { + FastFsmActive, + FastFsmInactive + } fast_fsm_activity_e; + + // Random wakeups and resets. + rand wakeups_t wakeups; + rand wakeups_t wakeups_en; + rand resets_t resets; + rand resets_t resets_en; + rand bit power_glitch_reset; + rand bit escalation_reset; + rand bit ndm_reset; + + rand bit en_intr; + + constraint resets_en_c { + solve resets, power_glitch_reset, escalation_reset, ndm_reset before resets_en; + |{resets_en & resets, power_glitch_reset, escalation_reset, ndm_reset} == 1'b1; + } + + rand bit disable_wakeup_capture; + + // Random control enables. + rand control_enables_t control_enables; + + // Random delays. + rand int cycles_before_clks_ok; + rand int cycles_between_clks_ok; + rand int cycles_before_io_status; + rand int cycles_before_main_status; + rand int cycles_before_usb_status; + rand int cycles_before_rst_lc_src; + rand int cycles_before_rst_sys_src; + rand int cycles_before_otp_done; + rand int cycles_before_lc_done; + rand int cycles_before_wakeup; + rand int cycles_before_reset; + + // Slow responder delays. + rand int cycles_before_core_clk_en; + rand int cycles_before_io_clk_en; + rand int cycles_before_usb_clk_en; + rand int cycles_before_main_pok; + + // This tracks the local objection count from these responders. We do not use UVM + // objections because uvm_objection::wait_for(UVM_ALL_DROPPED, this) seems to wait + // for all objections to be dropped, not just those raised by this. + local int fast_objection_count = 0; + local int slow_objection_count = 0; + + constraint cycles_before_clks_ok_c {cycles_before_clks_ok inside {[3 : 10]};} + constraint cycles_between_clks_ok_c {cycles_between_clks_ok inside {[3 : 10]};} + constraint cycles_before_io_status_c {cycles_before_io_status inside {[0 : 4]};} + constraint cycles_before_main_status_c {cycles_before_main_status inside {[0 : 4]};} + constraint cycles_before_usb_status_c {cycles_before_usb_status inside {[0 : 4]};} + constraint cycles_before_rst_lc_src_base_c {cycles_before_rst_lc_src inside {[0 : 4]};} + constraint cycles_before_rst_sys_src_base_c {cycles_before_rst_sys_src inside {[0 : 4]};} + constraint cycles_before_otp_done_base_c {cycles_before_otp_done inside {[0 : 4]};} + constraint cycles_before_lc_done_base_c {cycles_before_lc_done inside {[0 : 4]};} + constraint cycles_before_wakeup_c {cycles_before_wakeup inside {[2 : 6]};} + constraint cycles_before_reset_c {cycles_before_reset inside {[2 : 6]};} + constraint cycles_before_core_clk_en_c { + cycles_before_core_clk_en inside {[1 : MaxCyclesBeforeEnable]}; + } + constraint cycles_before_io_clk_en_c { + cycles_before_io_clk_en inside {[1 : MaxCyclesBeforeEnable - 2]}; + } + constraint cycles_before_usb_clk_en_c { + cycles_before_usb_clk_en inside {[1 : MaxCyclesBeforeEnable]}; + } + constraint cycles_before_main_pok_c {cycles_before_main_pok inside {[2 : MaxCyclesBeforeEnable]};} + + // This is used to trigger a software reset, as per rstmgr's `reset_req` CSR. + prim_mubi_pkg::mubi4_t sw_rst_from_rstmgr = prim_mubi_pkg::MuBi4False; + + bit do_pwrmgr_init = 1'b1; + // This static variable is incremented in each pre_start and decremented in each post_start. + // It is used to start and stop the responders when the parent sequence starts and ends. + local static int sequence_depth = 0; + pwrmgr_mubi_e mubi_mode; + + // This stops randomizing cycles counts that select from a pipeline, since + // changes can lead to missing or unexpected transitions. + task stop_randomizing_cycles(); + cycles_before_core_clk_en.rand_mode(0); + cycles_before_io_clk_en.rand_mode(0); + cycles_before_usb_clk_en.rand_mode(0); + cycles_before_main_pok.rand_mode(0); + endtask + + // Disable exclusions for CONTROL.USB_CLK_EN_ACTIVE and RESET_EN: they are meant for full-chip only. + function void disable_unnecessary_exclusions(); + csr_excl_item csr_excl = ral.get_excl_item(); + `uvm_info(`gfn, "Dealing with exclusions", UVM_MEDIUM) + csr_excl.enable_excl(.obj("pwrmgr_reg_block.control"), .enable(1'b0)); + csr_excl.enable_excl(.obj("pwrmgr_reg_block.reset_en"), .enable(1'b0)); + csr_excl.print_exclusions(UVM_MEDIUM); + endfunction + + virtual task pre_start(); + cfg.pwrmgr_vif.lc_hw_debug_en = lc_ctrl_pkg::Off; + cfg.pwrmgr_vif.lc_dft_en = lc_ctrl_pkg::Off; + mubi_mode = PwrmgrMubiNone; + `DV_GET_ENUM_PLUSARG(pwrmgr_mubi_e, mubi_mode, pwrmgr_mubi_mode) + `uvm_info(`gfn, $sformatf("pwrmgr mubi mode : %s", mubi_mode.name()), UVM_MEDIUM) + + if (do_pwrmgr_init) pwrmgr_init(); + disable_unnecessary_exclusions(); + cfg.slow_clk_rst_vif.wait_for_reset(.wait_negedge(0)); + stop_randomizing_cycles(); + fork + // Deactivate rst_main_n to make sure the slow fsm won't be confused into thinking + // a power glitch occurred, and wait some cycles so testing doesn't start until any + // side-effects are cleared. This confusion can arise if a sequence with random resets + // gets reset while sending a power glitch. + begin + cfg.pwrmgr_vif.rst_main_n = 1'b1; + cfg.slow_clk_rst_vif.wait_clks(7); + end + begin + if (sequence_depth == 0) begin + `uvm_info(`gfn, "Starting responders", UVM_MEDIUM) + slow_responder(); + fast_responder(); + end + ++sequence_depth; + super.pre_start(); + end + join + endtask : pre_start + + task post_apply_reset(string reset_kind = "HARD"); + super.post_apply_reset(reset_kind); + if (reset_kind == "HARD") begin + // Undo any pending resets. + cfg.pwrmgr_vif.rst_main_n = 1'b1; + cfg.pwrmgr_vif.update_resets(0); + end + + `uvm_info(`gfn, "waiting for fast active after applying reset", UVM_MEDIUM) + + // There is tb lock up case + // when reset come while rom_ctrl = {false, false}. + // So we need rom_ctrl driver runs in parallel with + // wait_for_fast_fsm(FastFsmActive) + fork + wait_for_fast_fsm(FastFsmActive); + init_rom_response(); + join + // And drive the cpu not sleeping. + cfg.pwrmgr_vif.update_cpu_sleeping(1'b0); + endtask + + task post_start(); + super.post_start(); + --sequence_depth; + if (sequence_depth == 0) begin + `uvm_info(`gfn, $sformatf( + "Waiting for all objections done with fast=%0d, slow=%0d", + fast_objection_count, + slow_objection_count + ), UVM_MEDIUM) + `DV_WAIT(fast_objection_count == 0 && slow_objection_count == 0) + `uvm_info(`gfn, "all local objections are done", UVM_LOW) + control_assertions(0); + `uvm_info(`gfn, "Stopping responders", UVM_MEDIUM) + disable slow_responder; + disable fast_responder; + end + endtask + + virtual task dut_init(string reset_kind = "HARD"); + super.dut_init(); + endtask + + virtual task dut_shutdown(); + // There are no known checks to perform here. + endtask + + virtual task apply_reset(string kind = "HARD"); + `uvm_info(`gfn, $sformatf("At apply_reset kind='%0s'", kind), UVM_MEDIUM) + fork + super.apply_reset(kind); + if (kind == "HARD") begin + // A short slow clock reset should suffice. + cfg.slow_clk_rst_vif.apply_reset(.pre_reset_dly_clks(0), .reset_width_clks(5)); + end + cfg.esc_clk_rst_vif.apply_reset(); + cfg.lc_clk_rst_vif.apply_reset(); + // Escalation resets are cleared when reset goes active. + clear_escalation_reset(); + clear_ndm_reset(); + join + // And wait until the responders settle with all okay from the AST. + `DV_WAIT( + cfg.pwrmgr_vif.pwr_ast_rsp.main_pok && + cfg.pwrmgr_vif.pwr_ast_rsp.core_clk_val && + cfg.pwrmgr_vif.pwr_ast_rsp.io_clk_val) + `uvm_info(`gfn, $sformatf("Out of apply_reset kind='%0s'", kind), UVM_MEDIUM) + endtask + + virtual task apply_resets_concurrently(int reset_duration_ps = 0); + cfg.slow_clk_rst_vif.drive_rst_pin(0); + cfg.esc_clk_rst_vif.drive_rst_pin(0); + cfg.lc_clk_rst_vif.drive_rst_pin(0); + super.apply_resets_concurrently(cfg.slow_clk_rst_vif.clk_period_ps); + cfg.esc_clk_rst_vif.drive_rst_pin(1); + cfg.lc_clk_rst_vif.drive_rst_pin(1); + cfg.slow_clk_rst_vif.drive_rst_pin(1); + endtask + + // setup basic pwrmgr features + virtual task pwrmgr_init(); + // The fast clock frequency is set by ral. + // The real slow clock rate is 200kHz, but that slows testing down. + // Increasing its frequency improves DV efficiency without compromising quality. + cfg.slow_clk_rst_vif.set_freq_mhz(7); + `uvm_info(`gfn, $sformatf( + "slow clock freq=%fMHz, period=%0dns", + cfg.slow_clk_rst_vif.clk_freq_mhz, + cfg.slow_clk_rst_vif.clk_period_ps + ), UVM_MEDIUM) + cfg.esc_clk_rst_vif.set_freq_mhz(cfg.clk_rst_vif.clk_freq_mhz); + cfg.lc_clk_rst_vif.set_freq_mhz(cfg.clk_rst_vif.clk_freq_mhz); + set_ndmreset_req('0); + control_assertions(0); + endtask + + virtual task setup_interrupt(bit enable); + csr_wr(.ptr(ral.intr_enable.wakeup), .value(enable)); + `uvm_info(`gfn, $sformatf("Wakeup interrupt is %0sabled", enable ? "en" : "dis"), UVM_MEDIUM) + endtask + + // May check intr_state.wakeup CSR against expected, and regardless, it checks that the + // interrupt output matches intr_state && intr_enable. The first check is disabled if + // check_expected is off, which is used when a reset and an interrupt come in close + // temporal proximity. + virtual task check_and_clear_interrupt(bit expected, bit check_expected = 1'b1); + bit enable; + `uvm_info(`gfn, "Checking and clearing interrupt", UVM_MEDIUM) + if (check_expected) begin + csr_rd_check(.ptr(ral.intr_state.wakeup), .compare_value(expected), + .err_msg("interrupt mismatch")); + end else begin + csr_rd(.ptr(ral.intr_state.wakeup), .value(expected)); + end + csr_rd(.ptr(ral.intr_enable.wakeup), .value(enable)); + `DV_CHECK_EQ(cfg.pwrmgr_vif.intr_wakeup, expected && enable) + csr_wr(.ptr(ral.intr_state.wakeup), .value(1'b1)); + endtask + + local function void raise_fast_objection(string label); + ++fast_objection_count; + `uvm_info(`gfn, $sformatf("Raising fast objection to %0d for %0s", fast_objection_count, label), + UVM_HIGH) + endfunction + + local function void drop_fast_objection(string label); + --fast_objection_count; + `uvm_info(`gfn, $sformatf("Dropping fast objection to %0d for %0s", fast_objection_count, label + ), UVM_HIGH) + endfunction + + local function void raise_slow_objection(string label); + ++slow_objection_count; + `uvm_info(`gfn, $sformatf("Raising slow objection to %0d for %0s", slow_objection_count, label), + UVM_MEDIUM) + endfunction + + local function void drop_slow_objection(string label); + --slow_objection_count; + `uvm_info(`gfn, $sformatf("Dropping slow objection to %0d for %0s", slow_objection_count, label + ), UVM_MEDIUM) + endfunction + + virtual function void set_ndmreset_req(logic value); + cfg.pwrmgr_vif.cpu_i.ndmreset_req = value; + endfunction + + // Generates expected responses for the slow fsm. + // - Completes the clock handshake with the ast: when a clk_en output changes, after a few + // cycles the ast is expected to set the corresponding clk_val input to the same value. + // - It is possible changes occur in fast succession, so the side-effect is pipelined. + // Uses macros because VCS flags an error for assignments to automatic variables, + // even if the variable is a ref to an interface variable. + + `define SLOW_DETECT(rsp_name_, req_) \ + forever \ + @req_ begin \ + raise_slow_objection(rsp_name_); \ + `uvm_info(`gfn, $sformatf( \ + "slow_responder: Will drive %0s to %b", rsp_name_, req_), UVM_MEDIUM) \ + end + + `define SLOW_SHIFT_SR(req_, rsp_sr_) \ + forever \ + @cfg.slow_clk_rst_vif.cb begin \ + rsp_sr_ = {rsp_sr_[MaxCyclesBeforeEnable-1:0], req_}; \ + end + + `define SLOW_ASSIGN(rsp_name_, cycles_, rsp_sr_, rsp_) \ + forever \ + @(rsp_sr_[cycles_]) begin \ + `uvm_info(`gfn, $sformatf( \ + "slow_responder: Driving %0s to %b after %0d AON cycles.", \ + rsp_name_, \ + rsp_sr_[cycles_], \ + cycles_ \ + ), UVM_MEDIUM) \ + rsp_ <= rsp_sr_[cycles_]; \ + drop_slow_objection(rsp_name_); \ + end + + task slow_responder(); + logic [MaxCyclesBeforeEnable:0] core_clk_val_sr; + logic [MaxCyclesBeforeEnable:0] io_clk_val_sr; + logic [MaxCyclesBeforeEnable:0] usb_clk_val_sr; + logic [MaxCyclesBeforeEnable:0] main_pd_val_sr; + fork + `SLOW_DETECT("core_clk_val", cfg.pwrmgr_vif.slow_cb.pwr_ast_req.core_clk_en) + `SLOW_SHIFT_SR(cfg.pwrmgr_vif.slow_cb.pwr_ast_req.core_clk_en, core_clk_val_sr) + `SLOW_ASSIGN("core_clk_val", cycles_before_core_clk_en, core_clk_val_sr, + cfg.pwrmgr_vif.slow_cb.pwr_ast_rsp.core_clk_val) + + `SLOW_DETECT("io_clk_val", cfg.pwrmgr_vif.slow_cb.pwr_ast_req.io_clk_en) + `SLOW_SHIFT_SR(cfg.pwrmgr_vif.slow_cb.pwr_ast_req.io_clk_en, io_clk_val_sr) + // Notice this splits updates due to io_clk_en in two processes: with a single process + // and a wait inside a quick sequence of changes would cause skipping some update, per + // SV scheduling semantics. + forever + @(io_clk_val_sr[cycles_before_io_clk_en]) begin + logic new_value = io_clk_val_sr[cycles_before_io_clk_en]; + `uvm_info(`gfn, $sformatf( + "slow_responder: Driving %0s to %b after %0d AON cycles.", + "io_clk_val", + new_value, + cycles_before_io_clk_en + ), UVM_MEDIUM) + if (new_value == 1) begin + cfg.clk_rst_vif.start_clk(); + cfg.lc_clk_rst_vif.start_clk(); + cfg.esc_clk_rst_vif.start_clk(); + end else begin + cfg.clk_rst_vif.stop_clk(); + cfg.lc_clk_rst_vif.stop_clk(); + cfg.esc_clk_rst_vif.stop_clk(); + end + end + forever + @(io_clk_val_sr[cycles_before_io_clk_en+2]) begin + logic new_value = io_clk_val_sr[cycles_before_io_clk_en+2]; + cfg.pwrmgr_vif.slow_cb.pwr_ast_rsp.io_clk_val <= new_value; + drop_slow_objection("io_clk_val"); + end + + `SLOW_DETECT("usb_clk_val", cfg.pwrmgr_vif.slow_cb.pwr_ast_req.usb_clk_en) + `SLOW_SHIFT_SR(cfg.pwrmgr_vif.slow_cb.pwr_ast_req.usb_clk_en, usb_clk_val_sr) + `SLOW_ASSIGN("usb_clk_val", cycles_before_usb_clk_en, usb_clk_val_sr, + cfg.pwrmgr_vif.slow_cb.pwr_ast_rsp.usb_clk_val) + + `SLOW_DETECT("main_pok", cfg.pwrmgr_vif.slow_cb.pwr_ast_req.main_pd_n) + `SLOW_SHIFT_SR(cfg.pwrmgr_vif.slow_cb.pwr_ast_req.main_pd_n, main_pd_val_sr) + `SLOW_ASSIGN("main_pok", cycles_before_main_pok, main_pd_val_sr, + cfg.pwrmgr_vif.slow_cb.pwr_ast_rsp.main_pok) + join_none + endtask : slow_responder + `undef SLOW_DETECT + `undef SLOW_SHIFT_SR + `undef SLOW_ASSIGN + + // Generates expected responses for the fast fsm. + // - Completes the reset handshake with the rstmgr for lc and sys resets: soon after a + // reset is requested the corresponding active low reset src must go low. + // - Completes the handshake with the clkmgr for io, main, and usb clocks: + // each status input needs to track the corresponding ip_clk_en output. + // - Completes handshake with lc and otp: *_done needs to track *_init. + // Macros for the same reason as the slow responder. + + `define FAST_RESPONSE_ACTION(rsp_name, rsp, req, cycles) \ + `uvm_info(`gfn, $sformatf( \ + "fast_responder %s: Will drive %0s to %b in %0d fast clock cycles", \ + rsp_name, rsp_name, req, cycles), UVM_HIGH) \ + cfg.clk_rst_vif.wait_clks(cycles); \ + rsp <= req; \ + `uvm_info(`gfn, $sformatf("fast_responder %s: Driving %0s to %b", rsp_name, rsp_name, req), UVM_HIGH) \ + + + task fast_responder(); + fork + forever + @cfg.pwrmgr_vif.fast_cb.pwr_rst_req.rst_lc_req begin + `uvm_info(`gfn, $sformatf( + "fast responder got rst_lc_req change to 0x%x", + cfg.pwrmgr_vif.fast_cb.pwr_rst_req.rst_lc_req + ), UVM_HIGH) + raise_fast_objection("rst_lc_src_n"); + `FAST_RESPONSE_ACTION("rst_lc_src_n", cfg.pwrmgr_vif.fast_cb.pwr_rst_rsp.rst_lc_src_n, + ~cfg.pwrmgr_vif.fast_cb.pwr_rst_req.rst_lc_req, + cycles_before_rst_lc_src) + if (cfg.pwrmgr_vif.fast_cb.pwr_rst_req.rst_lc_req[1] == 1'b0) begin + // Wait for the rst_lc_src_n[1] input to go inactive. + if (cfg.pwrmgr_vif.pwr_rst_rsp.rst_lc_src_n[1] != 1'b1) + @(posedge cfg.pwrmgr_vif.pwr_rst_rsp.rst_lc_src_n[1]); + cfg.esc_clk_rst_vif.drive_rst_pin(1); + cfg.lc_clk_rst_vif.drive_rst_pin(1); + end else begin + // And clear all reset requests when rst_lc_src_n[1] goes active, because when + // peripherals are reset they should drop their reset requests. + if (cfg.pwrmgr_vif.pwr_rst_rsp.rst_lc_src_n[1] != 1'b0) + @(negedge cfg.pwrmgr_vif.pwr_rst_rsp.rst_lc_src_n[1]); + cfg.esc_clk_rst_vif.drive_rst_pin(0); + cfg.lc_clk_rst_vif.drive_rst_pin(0); + clear_escalation_reset(); + clear_ndm_reset(); + cfg.pwrmgr_vif.update_resets('0); + cfg.pwrmgr_vif.update_sw_rst_req(prim_mubi_pkg::MuBi4False); + `uvm_info(`gfn, "Clearing resets", UVM_MEDIUM) + end + drop_fast_objection("rst_lc_src_n"); + `uvm_info(`gfn, "fast responder done with rst_lc_req change", UVM_HIGH) + end + forever + @cfg.pwrmgr_vif.fast_cb.pwr_rst_req.rst_sys_req begin + raise_fast_objection("rst_sys_src_n"); + `FAST_RESPONSE_ACTION("rst_sys_src_n", cfg.pwrmgr_vif.fast_cb.pwr_rst_rsp.rst_sys_src_n, + ~cfg.pwrmgr_vif.fast_cb.pwr_rst_req.rst_sys_req, + cycles_before_rst_sys_src) + drop_fast_objection("rst_sys_src_n"); + end + + forever + @cfg.pwrmgr_vif.fast_cb.pwr_clk_req.io_ip_clk_en begin + logic new_value = cfg.pwrmgr_vif.fast_cb.pwr_clk_req.io_ip_clk_en; + raise_fast_objection("io_status"); + `uvm_info(`gfn, $sformatf( + "fast_responder: Will drive %0s to %b in %0d fast clock cycles", + "io_status", + new_value, + cycles_before_io_status + ), UVM_HIGH) + cfg.clk_rst_vif.wait_clks(cycles_before_io_status); + if (new_value) cfg.esc_clk_rst_vif.start_clk(); + else cfg.esc_clk_rst_vif.stop_clk(); + cfg.clk_rst_vif.wait_clks(2); + cfg.pwrmgr_vif.fast_cb.pwr_clk_rsp.io_status <= new_value; + `uvm_info(`gfn, $sformatf( + "fast_responder: Driving %0s to %b", + "io_status", + cfg.pwrmgr_vif.fast_cb.pwr_clk_req.io_ip_clk_en + ), UVM_HIGH) + drop_fast_objection("io_status"); + end + + forever + @cfg.pwrmgr_vif.fast_cb.pwr_clk_req.main_ip_clk_en begin + raise_fast_objection("main_status"); + `FAST_RESPONSE_ACTION("main_status", cfg.pwrmgr_vif.fast_cb.pwr_clk_rsp.main_status, + cfg.pwrmgr_vif.fast_cb.pwr_clk_req.main_ip_clk_en, + cycles_before_main_status) + drop_fast_objection("main_status"); + end + forever + @cfg.pwrmgr_vif.fast_cb.pwr_clk_req.usb_ip_clk_en begin + raise_fast_objection("usb_status"); + `FAST_RESPONSE_ACTION("usb_status", cfg.pwrmgr_vif.fast_cb.pwr_clk_rsp.usb_status, + cfg.pwrmgr_vif.fast_cb.pwr_clk_req.usb_ip_clk_en, + cycles_before_usb_status) + drop_fast_objection("usb_status"); + end + forever + @cfg.pwrmgr_vif.fast_cb.pwr_lc_req.lc_init begin + raise_fast_objection("lc_done"); + `FAST_RESPONSE_ACTION("lc_done", cfg.pwrmgr_vif.fast_cb.pwr_lc_rsp.lc_done, + cfg.pwrmgr_vif.fast_cb.pwr_lc_req.lc_init, cycles_before_lc_done) + drop_fast_objection("lc_done"); + end + forever + @cfg.pwrmgr_vif.fast_cb.pwr_otp_req.otp_init begin + raise_fast_objection("otp_done"); + `FAST_RESPONSE_ACTION("otp_done", cfg.pwrmgr_vif.fast_cb.pwr_otp_rsp.otp_done, + cfg.pwrmgr_vif.fast_cb.pwr_otp_req.otp_init, cycles_before_otp_done) + drop_fast_objection("otp_done"); + end + join_none + endtask : fast_responder + `undef FAST_RESPONSE_ACTION + + function void control_assertions(bit enable); + `uvm_info(`gfn, $sformatf("%0sabling assertions", enable ? "En" : "Dis"), UVM_MEDIUM) + cfg.pwrmgr_clock_enables_sva_vif.disable_sva = !enable; + cfg.pwrmgr_rstmgr_sva_vif.disable_sva = !enable; + endfunction + + local task wait_for_fall_through(); + `DV_WAIT(!cfg.pwrmgr_vif.pwr_cpu.core_sleeping) + exp_intr = 1'b1; + `uvm_info(`gfn, "wait_for_fall_through succeeds", UVM_MEDIUM) + endtask + + local task wait_for_abort(); + `DV_WAIT( + !cfg.pwrmgr_vif.pwr_flash.flash_idle || !cfg.pwrmgr_vif.pwr_otp_rsp.otp_idle || + !cfg.pwrmgr_vif.pwr_lc_rsp.lc_idle) + exp_intr = 1'b1; + `uvm_info(`gfn, "wait_for_abort succeeds", UVM_MEDIUM) + endtask + + local task wait_for_low_power_transition(); + wait_for_reset_cause(pwrmgr_pkg::LowPwrEntry); + exp_wakeup_reasons = wakeups & wakeups_en; + exp_intr = 1'b1; + `uvm_info(`gfn, "Setting expected interrupt", UVM_MEDIUM) + endtask + + task process_low_power_hint(); + `uvm_info(`gfn, "Entering process_low_power_hint", UVM_MEDIUM) + // Timeout if the low power transition waits too long for WFI. + `DV_WAIT(cfg.pwrmgr_vif.fast_state != pwrmgr_pkg::FastPwrStateActive) + `uvm_info(`gfn, "In process_low_power_hint pre forks", UVM_MEDIUM) + // Clear expectations. + exp_wakeup_reasons = 1'b0; + fork + begin : isolation_fork + fork + wait_for_fall_through(); + wait_for_abort(); + wait_for_low_power_transition(); + join_any + disable fork; + end + join + // At this point we know the low power transition went through or was aborted. + // If it went through, determine if the transition to active state is for a reset, and + // cancel the expected interrupt. + if (exp_wakeup_reasons) begin + `DV_WAIT(cfg.pwrmgr_vif.slow_state == pwrmgr_pkg::SlowPwrStateMainPowerOn) + if (cfg.pwrmgr_vif.pwrup_cause == pwrmgr_pkg::Reset) begin + `uvm_info(`gfn, "Cancelling expected interrupt", UVM_MEDIUM) + exp_intr = 1'b0; + end + end + endtask + + // Updates control CSR. + task update_control_csr(); + fork + begin + ral.control.core_clk_en.set(control_enables.core_clk_en); + ral.control.io_clk_en.set(control_enables.io_clk_en); + ral.control.usb_clk_en_lp.set(control_enables.usb_clk_en_lp); + ral.control.usb_clk_en_active.set(control_enables.usb_clk_en_active); + ral.control.main_pd_n.set(control_enables.main_pd_n); + ral.control.low_power_hint.set(low_power_hint); + // Disable assertions when main power is down. + control_assertions(control_enables.main_pd_n); + `uvm_info(`gfn, $sformatf( + "Setting control CSR to 0x%x, enables=%p, low_power_hint=%b", + ral.control.get(), + control_enables, + low_power_hint + ), UVM_MEDIUM) + csr_update(.csr(ral.control)); + wait_for_csr_to_propagate_to_slow_domain(); + end + // Predict the effect of the potential low power transition. + if (low_power_hint) process_low_power_hint(); + join_any + endtask : update_control_csr + + // This enables the fast fsm to transition to low power when all nvms are idle after the + // transition is enabled by software and cpu WFI. When not all are idle the transition is + // aborted. + virtual task set_nvms_idle(logic flash_idle = 1'b1, logic lc_idle = 1'b1, logic otp_idle = 1'b1); + `uvm_info(`gfn, $sformatf( + "Setting nvms idle: flash=%b, lc=%b, otp=%b", flash_idle, lc_idle, otp_idle), + UVM_MEDIUM) + cfg.pwrmgr_vif.update_flash_idle(flash_idle); + cfg.pwrmgr_vif.update_lc_idle(lc_idle); + cfg.pwrmgr_vif.update_otp_idle(otp_idle); + endtask + + // Waits for the fast fsm becoming active or inactive, indicated by the + // fetch_en output going On or Off respectively. + task wait_for_fast_fsm(fast_fsm_activity_e activity = FastFsmActive); + lc_ctrl_pkg::lc_tx_t fetch_en = activity == FastFsmActive ? lc_ctrl_pkg::On : lc_ctrl_pkg::Off; + `uvm_info(`gfn, $sformatf("starting wait for pwrmgr %s", activity.name), UVM_MEDIUM) + `DV_SPINWAIT(wait (cfg.pwrmgr_vif.fetch_en == fetch_en);, + "timeout waiting for pwrmgr fast fsm target activity", FetchEnTimeoutNs) + `uvm_info(`gfn, $sformatf("pwrmgr reached %s", activity.name), UVM_MEDIUM) + endtask + + // Waits for the lc_rst output going inactive, which would complete a device reset. + // This should not be called for shallow sleep, since there is no lc_rst request. + task wait_for_lc_rst_release(); + `uvm_info(`gfn, "starting wait for release of lc_rst for non-aon domain", UVM_MEDIUM) + `DV_WAIT(cfg.pwrmgr_vif.pwr_rst_req.rst_lc_req[1] == 1'b1, + "timeout waiting for lc_rst[1] to be active", FetchEnTimeoutNs) + `DV_WAIT(cfg.pwrmgr_vif.pwr_rst_req.rst_lc_req[1] == 1'b0, + "timeout waiting for lc_rst[1] to be inactive", FetchEnTimeoutNs) + `uvm_info(`gfn, "pwrmgr fast released lc_req[1]", UVM_MEDIUM) + endtask + + task wait_for_reset_cause(pwrmgr_pkg::reset_cause_e cause); + `DV_WAIT(cfg.pwrmgr_vif.pwr_rst_req.reset_cause == cause) + `uvm_info(`gfn, $sformatf("Observed reset cause_match %s (0x%x)", cause.name, cause), + UVM_MEDIUM) + endtask + + virtual task wait_for_csr_to_propagate_to_slow_domain(); + csr_wr(.ptr(ral.cfg_cdc_sync), .value(1'b1)); + csr_spinwait(.ptr(ral.cfg_cdc_sync), .exp_data(1'b0), + .timeout_ns(PropagationToSlowTimeoutInNanoSeconds)); + `uvm_info(`gfn, "CSR updates made it to the slow domain", UVM_MEDIUM) + endtask + + // Checks the reset_status CSR matches expectations. + task check_reset_status(resets_t expected_resets); + csr_rd_check(.ptr(ral.reset_status[0]), .compare_value(expected_resets), + .err_msg("reset_status")); + endtask + + task fast_check_reset_status(resets_t expected_resets); + logic [pwrmgr_reg_pkg::NumRstReqs-1:0] init_reset_status; + `uvm_info(`gfn, "init reset status", UVM_MEDIUM); + // Wait to get out of low power state, since all reset status should have settled. + if (cfg.pwrmgr_vif.fast_state == pwrmgr_pkg::FastPwrStateLowPower) begin + `DV_SPINWAIT(wait(cfg.pwrmgr_vif.fast_state != pwrmgr_pkg::FastPwrStateLowPower);, + "fast state out of low power for reset timeout", 15_000) + end + + init_reset_status = cfg.pwrmgr_vif.reset_status; + if (expected_resets == init_reset_status) begin + // This is a success, so nothing more to do. + return; + end else begin + `DV_SPINWAIT(wait(cfg.pwrmgr_vif.reset_status != init_reset_status);, $sformatf( + "reset_status wait timeout exp:%x init:%x", expected_resets, init_reset_status), + 15_000) + // The various bits of reset_status could have different sync delays, wait some more. + cfg.clk_rst_vif.wait_clks(2); + `DV_CHECK_EQ(cfg.pwrmgr_vif.reset_status, expected_resets) + end + endtask + + // Checks the wake_status CSR matches expectations. + task check_wake_status(wakeups_t expected_wakeups); + csr_rd_check(.ptr(ral.wake_status[0]), .compare_value(expected_wakeups), + .err_msg("wake_status")); + endtask + + task fast_check_wake_status(wakeups_t expected_wakeups); + logic [pwrmgr_reg_pkg::NumWkups-1:0] init_wakeup_status; + `uvm_info(`gfn, "init wakeup", UVM_MEDIUM); + init_wakeup_status = cfg.pwrmgr_vif.wakeup_status; + + // Wait to get out of low power state, since all wake status should have settled + if (cfg.pwrmgr_vif.fast_state == pwrmgr_pkg::FastPwrStateLowPower) begin + `DV_SPINWAIT(wait(cfg.pwrmgr_vif.fast_state != pwrmgr_pkg::FastPwrStateLowPower);, + "fast state out of low power for wakeup timeout", 15_000) + end + + if (expected_wakeups == init_wakeup_status) begin + // This is a success, so nothing more to do. + return; + end else begin + `DV_SPINWAIT(wait(cfg.pwrmgr_vif.wakeup_status != init_wakeup_status);, $sformatf( + "wakeup_status wait timeout exp:%x init:%x", expected_wakeups, init_wakeup_status + ), 15_000) + // The various bits of wakeup_status could have different sync delays, so wait some more. + cfg.clk_rst_vif.wait_clks(2); + `DV_CHECK_EQ(cfg.pwrmgr_vif.wakeup_status, expected_wakeups) + end + endtask + + task fast_check_wake_info(wakeups_t reasons, wakeups_t prior_reasons = '0, bit fall_through, + bit prior_fall_through = '0, bit abort, bit prior_abort = '0); + pwrmgr_reg_pkg::pwrmgr_hw2reg_wake_info_reg_t initial_value, exp_value; + initial_value = cfg.pwrmgr_vif.wake_info; + + if (disable_wakeup_capture) begin + exp_value.reasons = prior_reasons; + exp_value.fall_through = prior_fall_through; + exp_value.abort = prior_abort; + end else begin + exp_value.reasons = (reasons | prior_reasons); + exp_value.fall_through = (fall_through | prior_fall_through); + exp_value.abort = (abort | prior_abort); + end + if (exp_value != initial_value) begin + // The various bits of wake_info could have different sync delays, so wait some more. + cfg.clk_rst_vif.wait_clks(1); + `DV_SPINWAIT(wait(cfg.pwrmgr_vif.wake_info == exp_value);, + $sformatf("wake info wait timeout exp:%p actual:%p", exp_value, + cfg.pwrmgr_vif.wake_info), + 15_000) + end + endtask : fast_check_wake_info + + // Checks the wake_info CSR matches expectations depending on capture disable. + // The per-field "prior_" arguments support cases where the wake_info register was not + // cleared and may contain residual values. + task check_wake_info(wakeups_t reasons, wakeups_t prior_reasons = '0, bit fall_through, + bit prior_fall_through = '0, bit abort, bit prior_abort = '0); + if (disable_wakeup_capture) begin + csr_rd_check(.ptr(ral.wake_info.reasons), .compare_value(prior_reasons), + .err_msg("With capture disabled")); + csr_rd_check(.ptr(ral.wake_info.fall_through), .compare_value(prior_fall_through), + .err_msg("With capture disabled")); + csr_rd_check(.ptr(ral.wake_info.abort), .compare_value(prior_abort), + .err_msg("With capture disabled")); + end else begin + csr_rd_check(.ptr(ral.wake_info.reasons), .compare_value(reasons | prior_reasons), + .err_msg("With capture enabled")); + csr_rd_check(.ptr(ral.wake_info.fall_through), + .compare_value(fall_through | prior_fall_through), + .err_msg("With capture enabled")); + csr_rd_check(.ptr(ral.wake_info.abort), .compare_value(abort | prior_abort), + .err_msg("With capture enabled")); + end + endtask : check_wake_info + + task clear_wake_info(); + // To clear wake_info, capture must be disabled. + csr_wr(.ptr(ral.wake_info_capture_dis), .value(1'b1)); + csr_wr(.ptr(ral.wake_info), .value('1)); + endtask + + function void send_escalation_reset(); + `uvm_info(`gfn, "Sending escalation reset", UVM_MEDIUM) + cfg.m_esc_agent_cfg.vif.sender_cb.esc_tx_int <= 2'b10; + endfunction + + function void clear_escalation_reset(); + `uvm_info(`gfn, "Clearing escalation reset", UVM_MEDIUM) + cfg.m_esc_agent_cfg.vif.sender_cb.esc_tx_int <= 2'b01; + endfunction + + function void send_ndm_reset(); + `uvm_info(`gfn, "Sending ndm reset", UVM_MEDIUM) + cfg.pwrmgr_vif.cpu_i.ndmreset_req = 1'b1; + endfunction + + function void clear_ndm_reset(); + `uvm_info(`gfn, "Clearing ndm reset", UVM_MEDIUM) + cfg.pwrmgr_vif.cpu_i.ndmreset_req = 1'b0; + endfunction + + task send_power_glitch(); + // Create glitch by 'glitch_power_reset'. An outgoing alert is only possible + // when main power is up. + if (control_enables.main_pd_n) expect_fatal_alerts = 1; + else expect_fatal_alerts = 0; + `uvm_info(`gfn, $sformatf( + "Sending power glitch, expecting %0s alert", expect_fatal_alerts ? "an" : "no"), + UVM_MEDIUM) + cfg.pwrmgr_vif.glitch_power_reset(); + endtask + + // bad_bits = {done, good} + task add_rom_rsp_noise(); + bit [MUBI4W*2-1:0] bad_bits; + int delay; + + repeat (10) begin + delay = $urandom_range(5, 10); + `DV_CHECK_STD_RANDOMIZE_WITH_FATAL(bad_bits, + bad_bits[MUBI4W*2-1:MUBI4W] != prim_mubi_pkg::MuBi4True; + bad_bits[MUBI4W*2-1:MUBI4W] != prim_mubi_pkg::MuBi4False; + bad_bits[MUBI4W-1:0] != prim_mubi_pkg::MuBi4False; + bad_bits[MUBI4W-1:0] != prim_mubi_pkg::MuBi4True;) + `uvm_info(`gfn, $sformatf("add_rom_rsp_noise to 0x%x", bad_bits), UVM_HIGH) + cfg.pwrmgr_vif.rom_ctrl = bad_bits; + #(delay * 10ns); + end + endtask : add_rom_rsp_noise + + // Drive rom_ctrl at post reset stage + virtual task init_rom_response(); + if (cfg.pwrmgr_vif.rom_ctrl.done != prim_mubi_pkg::MuBi4True) begin + cfg.pwrmgr_vif.rom_ctrl.good = get_rand_mubi4_val( + .t_weight(1), .f_weight(1), .other_weight(1) + ); + cfg.pwrmgr_vif.rom_ctrl.done = get_rand_mubi4_val( + .t_weight(0), .f_weight(1), .other_weight(1) + ); + `DV_WAIT(cfg.pwrmgr_vif.fast_state == pwrmgr_pkg::FastPwrStateRomCheckDone) + cfg.pwrmgr_vif.rom_ctrl.good = get_rand_mubi4_val( + .t_weight(1), .f_weight(1), .other_weight(1) + ); + cfg.pwrmgr_vif.rom_ctrl.done = get_rand_mubi4_val( + .t_weight(0), .f_weight(1), .other_weight(1) + ); + cfg.slow_clk_rst_vif.wait_clks(10); + cfg.pwrmgr_vif.rom_ctrl.good = get_rand_mubi4_val( + .t_weight(1), .f_weight(1), .other_weight(1) + ); + cfg.pwrmgr_vif.rom_ctrl.done = get_rand_mubi4_val( + .t_weight(0), .f_weight(1), .other_weight(1) + ); + cfg.slow_clk_rst_vif.wait_clks(5); + cfg.pwrmgr_vif.rom_ctrl.good = get_rand_mubi4_val( + .t_weight(1), .f_weight(1), .other_weight(1) + ); + cfg.pwrmgr_vif.rom_ctrl.done = get_rand_mubi4_val( + .t_weight(0), .f_weight(1), .other_weight(1) + ); + cfg.slow_clk_rst_vif.wait_clks(5); + cfg.pwrmgr_vif.rom_ctrl.good = prim_mubi_pkg::MuBi4True; + cfg.pwrmgr_vif.rom_ctrl.done = prim_mubi_pkg::MuBi4True; + end + `uvm_info(`gfn, "Set rom response to MuBi4True", UVM_MEDIUM) + endtask + +endclass : pwrmgr_base_vseq diff --git a/src/pwrmgr/dv/env/seq_lib/pwrmgr_common_vseq.sv b/src/pwrmgr/dv/env/seq_lib/pwrmgr_common_vseq.sv new file mode 100644 index 000000000..e3e131efe --- /dev/null +++ b/src/pwrmgr/dv/env/seq_lib/pwrmgr_common_vseq.sv @@ -0,0 +1,113 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +class pwrmgr_common_vseq extends pwrmgr_base_vseq; + `uvm_object_utils(pwrmgr_common_vseq) + + constraint num_trans_c {num_trans inside {[1 : 2]};} + `uvm_object_new + + parameter int STATE_TRANSITION_NS = 50000; + + virtual task pre_start(); + csr_excl_item csr_excl = ral.get_excl_item(); + super.pre_start(); + // In pwrmgr, random reset event can be regarded as power glitch in tb. + // Since glitch is marked as fatal and creates alert after PR#12072, + // exclude pwrmgr_reg_block.fault_status from the random reset tests + // to avoid spurious test failure. + if (common_seq_type inside {"csr_mem_rw_with_rand_reset", "stress_all_with_rand_reset"}) begin + csr_excl.add_excl("pwrmgr_reg_block.fault_status", CsrExclCheck); + expect_fatal_alerts = 1; + end + endtask + + virtual task body(); + run_common_vseq_wrapper(num_trans); + `uvm_info(`gfn, "Done with body", UVM_HIGH) + endtask : body + + task rand_reset_eor_clean_up(); + // clear wakeup at the beginning + cfg.pwrmgr_vif.update_wakeups('0); + cfg.clk_rst_vif.wait_clks(2); + + // clear interrupt + csr_wr(.ptr(ral.intr_state), .value(1)); + endtask : rand_reset_eor_clean_up + + // pwrmgr has three alert events + // REG_INTG_ERR, ESC_TIMEOUT and MAIN_PD_GLITCH + // all others will trigger only reset. + // So disable wait_alert by skipping super.check_sec_cm_fi_resp() + virtual task check_sec_cm_fi_resp(sec_cm_base_if_proxy if_proxy); + string slow_st_to, fast_st_to, msg; + // to avoid 100 column cut off + slow_st_to = { + "slow state local esc chk timeout:", + "fast_state %s, pwr_ast_req.pwr_clamp %0d, pwr_ast_req.main_pd_n %0d" + }; + fast_st_to = { + "fast state local esc chk timeout:", + "pwr_rst_req.rst_lc_req %0d, pwr_rst_req.rst_sys_req %0d, pwr_clk_req %0d" + }; + + `uvm_info(`gfn, $sformatf("sec_cm_type %s", if_proxy.sec_cm_type.name), UVM_MEDIUM) + + case (if_proxy.sec_cm_type) + SecCmPrimSparseFsmFlop: begin + // if slow state is unknown, + // wait for + // fast_state == FastPwrStateInvalid + // tb.dut.pwr_ast_o.pwr_clamp == 1 + // tb.dut.pwr_ast_o.main_pd_n == 0 + // + // if fast state is unknown, + // wait for + // tb.dut.pwr_rst_o.rst_lc_req == 2'b11 + // tb.dut.pwr_rst_o.rst_sys_req == 2'b11 + // tb.dut.pwr_clk_o == 3'b0 + if (!uvm_re_match("*.u_slow_fsm.*", if_proxy.path)) begin + `uvm_info(`gfn, "detect unknown slow state", UVM_MEDIUM) + msg = $sformatf( + slow_st_to, + cfg.pwrmgr_vif.fast_state.name, + cfg.pwrmgr_vif.pwr_ast_req.pwr_clamp, + cfg.pwrmgr_vif.pwr_ast_req.main_pd_n + ); + + `DV_SPINWAIT(wait(cfg.pwrmgr_vif.fast_state == pwrmgr_pkg::FastPwrStateInvalid && + cfg.pwrmgr_vif.pwr_ast_req.pwr_clamp == 1 && + cfg.pwrmgr_vif.pwr_ast_rsp.main_pok == 0);, msg, STATE_TRANSITION_NS) + end + if (!uvm_re_match("*.u_fsm.*", if_proxy.path)) begin + `uvm_info(`gfn, "detect unknown fast state", UVM_MEDIUM) + msg = $sformatf( + fast_st_to, + cfg.pwrmgr_vif.pwr_rst_req.rst_lc_req, + cfg.pwrmgr_vif.pwr_rst_req.rst_sys_req, + cfg.pwrmgr_vif.pwr_clk_req + ); + + `DV_SPINWAIT(wait(cfg.pwrmgr_vif.pwr_rst_req.rst_lc_req == 2'b11 && + cfg.pwrmgr_vif.pwr_rst_req.rst_sys_req == 2'b11 && + cfg.pwrmgr_vif.pwr_clk_req == 3'h0);, msg, 5000) + end + end + SecCmPrimCount: begin + // wait for fast state to be FastPwrStateResetPrep + // before assert reset + `uvm_info(`gfn, "check rx_clk local esc", UVM_MEDIUM) + msg = $sformatf( + "rx clk loc esc chk timeout : fast_state %s", cfg.pwrmgr_vif.fast_state.name + ); + `DV_SPINWAIT(wait(cfg.pwrmgr_vif.fast_state == pwrmgr_pkg::FastPwrStateResetPrep);, msg, + STATE_TRANSITION_NS) + end + default: `uvm_fatal(`gfn, $sformatf("unexpected sec_cm_type %s", if_proxy.sec_cm_type.name)) + endcase // case (if_proxy.sec_cm_type) + // This makes sure errors are not injected too close together to avoid confusion. + cfg.slow_clk_rst_vif.wait_clks(10); + endtask : check_sec_cm_fi_resp +endclass diff --git a/src/pwrmgr/dv/env/seq_lib/pwrmgr_disable_rom_integrity_check_vseq.sv b/src/pwrmgr/dv/env/seq_lib/pwrmgr_disable_rom_integrity_check_vseq.sv new file mode 100644 index 000000000..0026eaf41 --- /dev/null +++ b/src/pwrmgr/dv/env/seq_lib/pwrmgr_disable_rom_integrity_check_vseq.sv @@ -0,0 +1,130 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Test multiple resets with setting lc_* inputs with random value. +class pwrmgr_disable_rom_integrity_check_vseq extends pwrmgr_base_vseq; + + `uvm_object_utils(pwrmgr_disable_rom_integrity_check_vseq) + `uvm_object_new + + rand bit release_by_good; + + constraint wakeups_c {wakeups == 0;} + constraint wakeups_en_c {wakeups_en == 0;} + + function void post_randomize(); + sw_rst_from_rstmgr = get_rand_mubi4_val(.t_weight(8), .f_weight(4), .other_weight(4)); + super.post_randomize(); + endfunction + + local task detect_block(output bit blocked); + blocked = 1; + repeat (20) begin + @cfg.slow_clk_rst_vif.cb; + if (cfg.pwrmgr_vif.fast_state == pwrmgr_pkg::FastPwrStateActive) begin + blocked = 0; + break; + end + end + endtask + + task body(); + resets_t enabled_resets; + wait_for_fast_fsm(FastFsmActive); + check_reset_status('0); + + for (int i = 0; i < 5; ++i) begin + `uvm_info(`gfn, $sformatf("Starting new round %0d", i), UVM_MEDIUM) + `DV_CHECK_RANDOMIZE_FATAL(this) + setup_interrupt(.enable(en_intr)); + + // set lc ctrl input to random value + cfg.pwrmgr_vif.lc_hw_debug_en = get_rand_lc_tx_val( + .t_weight(1), .f_weight(3), .other_weight(1) + ); + cfg.pwrmgr_vif.lc_dft_en = get_rand_lc_tx_val(.t_weight(1), .f_weight(3), .other_weight(1)); + cfg.pwrmgr_vif.rom_ctrl.done = get_rand_mubi4_val( + .t_weight(1), .f_weight(3), .other_weight(1)); + cfg.pwrmgr_vif.rom_ctrl.good = get_rand_mubi4_val( + .t_weight(1), .f_weight(3), .other_weight(1)); + + `uvm_info(`gfn, $sformatf( + "Set done 0x%x, good 0x%x", cfg.pwrmgr_vif.rom_ctrl.done, + cfg.pwrmgr_vif.rom_ctrl.good), UVM_MEDIUM) + + enabled_resets = resets_en & resets; + `uvm_info(`gfn, $sformatf( + "Enabled resets=0x%x, power_reset=%b, escalation=%b, sw_reset=%b, ndm_reset=%b", + enabled_resets, + power_glitch_reset, + escalation_reset, + sw_rst_from_rstmgr == prim_mubi_pkg::MuBi4True, + ndm_reset + ), UVM_MEDIUM) + + csr_wr(.ptr(ral.reset_en[0]), .value(resets_en)); + // This is necessary to propagate reset_en. + wait_for_csr_to_propagate_to_slow_domain(); + + // Trigger resets. The glitch is sent prior to the externals since if it is delayed + // it will cause a separate reset after the externals, which complicates the checks. + if (power_glitch_reset) send_power_glitch(); + cfg.clk_rst_vif.wait_clks(cycles_before_reset); + + `uvm_info(`gfn, $sformatf("Sending resets=0x%x", resets), UVM_MEDIUM) + cfg.pwrmgr_vif.update_resets(resets); + `uvm_info(`gfn, $sformatf("Sending sw reset from rstmgr=%b", sw_rst_from_rstmgr), UVM_MEDIUM) + if (escalation_reset) send_escalation_reset(); + cfg.pwrmgr_vif.update_sw_rst_req(sw_rst_from_rstmgr); + if (ndm_reset) send_ndm_reset(); + + `uvm_info(`gfn, "Wait for Fast State NE FastPwrStateActive", UVM_MEDIUM) + `DV_WAIT(cfg.pwrmgr_vif.fast_state != pwrmgr_pkg::FastPwrStateActive) + + if (cfg.pwrmgr_vif.rom_ctrl.done != prim_mubi_pkg::MuBi4True) begin + // Check fast state is not FastPwrStateActive for a while + repeat (20) begin + @cfg.slow_clk_rst_vif.cb; + `DV_CHECK_NE(cfg.pwrmgr_vif.fast_state, pwrmgr_pkg::FastPwrStateActive) + end + + // Set done to True. + `uvm_info(`gfn, "Set rom_ctrl.done input True", UVM_MEDIUM) + cfg.pwrmgr_vif.rom_ctrl.done = prim_mubi_pkg::MuBi4True; + cfg.slow_clk_rst_vif.wait_clks(2); + end + + if (cfg.pwrmgr_vif.rom_ctrl.good != prim_mubi_pkg::MuBi4True) begin + bit blocked = 0; + detect_block(blocked); + if (blocked) begin + if (release_by_good) begin + // Set to good. + cfg.pwrmgr_vif.rom_ctrl.good = prim_mubi_pkg::MuBi4True; + end else begin + // Disable rom checks. + `uvm_info(`gfn, "Set lc ctrl inputs On", UVM_MEDIUM) + cfg.pwrmgr_vif.lc_hw_debug_en = lc_ctrl_pkg::On; + cfg.pwrmgr_vif.lc_dft_en = lc_ctrl_pkg::On; + end + end // if (blocked) + cfg.slow_clk_rst_vif.wait_clks(2); + end + wait(cfg.pwrmgr_vif.pwr_clk_req.main_ip_clk_en == 1'b1); + + wait_for_fast_fsm(FastFsmActive); + `uvm_info(`gfn, "Back from reset", UVM_MEDIUM) + + check_wake_info(.reasons('0), .fall_through(1'b0), .abort(1'b0)); + + cfg.slow_clk_rst_vif.wait_clks(4); + check_reset_status('0); + + // And check interrupt is not set. + check_and_clear_interrupt(.expected(1'b0)); + end + clear_wake_info(); + endtask + +endclass : pwrmgr_disable_rom_integrity_check_vseq diff --git a/src/pwrmgr/dv/env/seq_lib/pwrmgr_esc_clk_rst_malfunc_vseq.sv b/src/pwrmgr/dv/env/seq_lib/pwrmgr_esc_clk_rst_malfunc_vseq.sv new file mode 100644 index 000000000..195adc3c8 --- /dev/null +++ b/src/pwrmgr/dv/env/seq_lib/pwrmgr_esc_clk_rst_malfunc_vseq.sv @@ -0,0 +1,42 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Description: +// This sequence creates escalation clock and reset malfunction at FastPwrStateActive state. +// This event will trigger timeout counter and assert timeout signal +// when timeout counter reaches EscTimeOutCnt value. +// Once the timeout occurs, it will create fatal alert and alert agent(tb) will set esc rst. +// The pass or failure status is determined in the cip scoreboard. +class pwrmgr_esc_clk_rst_malfunc_vseq extends pwrmgr_base_vseq; + `uvm_object_utils(pwrmgr_esc_clk_rst_malfunc_vseq) + + `uvm_object_new + constraint num_trans_c {num_trans inside {[1 : 3]};} + + virtual task body(); + wait_for_fast_fsm(FastFsmActive); + // Wait some time so the stimulus is sent after the fast fsm becoming active. + cfg.clk_rst_vif.wait_clks(4); + expect_fatal_alerts = 1; + trigger_escalation_timeout(); + wait_for_fast_fsm(FastFsmActive); + endtask : body + + // Trigers an escalation timeout fault, either stopping clk_esc_i or driving rst_esc_ni. + // + // Randomly set a bit to 0 or 1: if 0 stop clk_esc_i, if 1 make rst_esc_ni active. + task trigger_escalation_timeout(); + int which = $urandom_range(0, 1); + `uvm_info(`gfn, $sformatf("Triggering escalation via %0s", which ? "rst" : "clk"), UVM_MEDIUM) + if (which == 0) cfg.esc_clk_rst_vif.stop_clk(); + else cfg.esc_clk_rst_vif.drive_rst_pin(1'b0); + + // Wait for cpu fetch to be disabled, as an indication a reset is triggered. + `DV_SPINWAIT(wait (cfg.pwrmgr_vif.fetch_en != lc_ctrl_pkg::On);, + "timeout waiting for the CPU to be inactive", FetchEnTimeoutNs) + `uvm_info(`gfn, "Releasing trigger", UVM_MEDIUM) + if (which == 0) cfg.esc_clk_rst_vif.start_clk(); + else cfg.esc_clk_rst_vif.drive_rst_pin(1'b1); + endtask : trigger_escalation_timeout +endclass diff --git a/src/pwrmgr/dv/env/seq_lib/pwrmgr_escalation_timeout_vseq.sv b/src/pwrmgr/dv/env/seq_lib/pwrmgr_escalation_timeout_vseq.sv new file mode 100644 index 000000000..68aad09a6 --- /dev/null +++ b/src/pwrmgr/dv/env/seq_lib/pwrmgr_escalation_timeout_vseq.sv @@ -0,0 +1,68 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// Description: +// This test checks that an escalation reset is generated when the escalation clock stops for +// enough cycles. +class pwrmgr_escalation_timeout_vseq extends pwrmgr_base_vseq; + `uvm_object_utils(pwrmgr_escalation_timeout_vseq) + + `uvm_object_new + + localparam int TIMEOUT_THRESHOLD = 128; + + int trans_cnt = 0; + constraint num_trans_c {num_trans inside {[1 : 5]};} + + task check_stopped_esc_clk(int stop_cycles, bit expect_reset); + fork + begin + `uvm_info(`gfn, $sformatf("Stopping escalation clock for %0d cycles", stop_cycles), + UVM_MEDIUM) + cfg.esc_clk_rst_vif.stop_clk(); + cfg.clk_rst_vif.wait_clks(stop_cycles); + `uvm_info(`gfn, "Restarting escalation clock", UVM_MEDIUM) + cfg.esc_clk_rst_vif.start_clk(); + cfg.esc_clk_rst_vif.wait_clks(4000); + end + begin + cfg.clk_rst_vif.wait_clks(TIMEOUT_THRESHOLD); + if (expect_reset) begin + `DV_WAIT(cfg.pwrmgr_vif.fetch_en != lc_ctrl_pkg::On, + "Timeout waiting for cpu fetch disable", 4000) + `uvm_info(`gfn, "cpu fetch disabled, indicating a reset", UVM_MEDIUM) + `DV_WAIT(cfg.pwrmgr_vif.pwr_rst_req.rstreqs[pwrmgr_reg_pkg::ResetEscIdx] == 1'b1 && + cfg.pwrmgr_vif.pwr_rst_req.reset_cause == pwrmgr_pkg::HwReq, + "Timeout waiting for outgoing escalation reset", 40000) + `uvm_info(`gfn, "Outgoing escalation reset", UVM_MEDIUM) + end else begin + repeat (8000) begin + cfg.clk_rst_vif.wait_clks(1); + if (cfg.pwrmgr_vif.fetch_en != lc_ctrl_pkg::On) begin + `uvm_error(`gfn, "Unexpected cpu fetch disable, indicating a reset") + end + end + end + end + join + endtask + + virtual task body(); + wait_for_fast_fsm(FastFsmActive); + cfg.slow_clk_rst_vif.set_freq_mhz(1); + cfg.esc_clk_rst_vif.wait_clks(200); + // The timeout is not predictable for two reasons: + // - The initial count for the timeout can be from 0 to 7, which means the timeout could + // happen between 121 and 128 cycles after the clock. + // - The timeout has a req-ack synchronizer which has some randomness due to the phase. + // This adds a few more cycles of uncertainty. + // Keep the clock stopped for less than 118 cycles should be safe to avoid an alert. + check_stopped_esc_clk(118, 1'b0); + check_stopped_esc_clk(2000, 1'b1); + wait_for_fast_fsm(FastFsmActive); + // This should generate a reset but it doesn't so the test will fail. + // TODO(lowrisc/opentitan#20516): Enable this test when this is fixed. + // check_stopped_esc_clk(136, 1'b1); + endtask : body + +endclass diff --git a/src/pwrmgr/dv/env/seq_lib/pwrmgr_glitch_vseq.sv b/src/pwrmgr/dv/env/seq_lib/pwrmgr_glitch_vseq.sv new file mode 100644 index 000000000..0a27b8454 --- /dev/null +++ b/src/pwrmgr/dv/env/seq_lib/pwrmgr_glitch_vseq.sv @@ -0,0 +1,42 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// Description: +// This test asserts glitch to power_reset and see +// dut can recover gracefully. +class pwrmgr_glitch_vseq extends pwrmgr_base_vseq; + `uvm_object_utils(pwrmgr_glitch_vseq) + + `uvm_object_new + + int trans_cnt = 0; + constraint num_trans_c {num_trans inside {[1 : 5]};} + + virtual task body(); + expect_fatal_alerts = 1; + for (int i = 0; i < num_trans; ++i) begin + wait_for_fast_fsm(FastFsmActive); + cfg.clk_rst_vif.wait_clks(4); + + fork + send_power_glitch(); + begin + cfg.pwrmgr_vif.update_ast_main_pok(0); + cfg.slow_clk_rst_vif.wait_clks(2); + cfg.pwrmgr_vif.update_ast_main_pok(1); + end + join + + cfg.clk_rst_vif.wait_clks(cycles_before_reset); + + `DV_SPINWAIT(wait(cfg.pwrmgr_vif.fast_state == pwrmgr_pkg::FastPwrStateResetPrep && + cfg.pwrmgr_vif.pwr_rst_req.rstreqs[2] == 1);, $sformatf( + "checker timeout : fast_state %s, pwr_rst_req 0x%x", + cfg.pwrmgr_vif.fast_state.name, + cfg.pwrmgr_vif.pwr_rst_req.rstreqs + ), 10000) + + dut_init(); + end + endtask : body +endclass diff --git a/src/pwrmgr/dv/env/seq_lib/pwrmgr_global_esc_vseq.sv b/src/pwrmgr/dv/env/seq_lib/pwrmgr_global_esc_vseq.sv new file mode 100644 index 000000000..19cfba5ff --- /dev/null +++ b/src/pwrmgr/dv/env/seq_lib/pwrmgr_global_esc_vseq.sv @@ -0,0 +1,63 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// Description: +// This test asserts global escalation reset to dut +// and check glocal escalation request is handled by +// dut properly. +class pwrmgr_global_esc_vseq extends pwrmgr_base_vseq; + `uvm_object_utils(pwrmgr_global_esc_vseq) + + `uvm_object_new + + int trans_cnt = 0; + constraint num_trans_c {num_trans inside {[1 : 5]};} + + virtual task body(); + fork + send_esc(); + check_rst_req(); + join + endtask : body + + task send_esc(); + int cycle; + for (int i = 0; i < num_trans; ++i) begin + wait_for_fast_fsm(FastFsmActive); + cycle = $urandom_range(50, 300); + send_escalation_reset(); + repeat (cycle) @(cfg.clk_rst_vif.cb); + clear_escalation_reset(); + end + endtask : send_esc + + task check_rst_req(); + bit dut_init_done = -1; + + while (trans_cnt < num_trans) begin + @(cfg.clk_rst_vif.cb); + wait(cfg.pwrmgr_vif.fast_state != pwrmgr_pkg::FastPwrStateActive && + cfg.pwrmgr_vif.pwr_rst_req.rstreqs[3] == 1'b1); + trans_cnt++; + + // Make sure previous dut_init is done + if (dut_init_done > -1) begin + wait(dut_init_done == 1); + end + // Spawning dut_init thread then go to + // wait reset state + fork + begin + dut_init_done = 0; + dut_init(); + dut_init_done = 1; + end + begin + cfg.clk_rst_vif.wait_clks(10); + end + join_any + end + wait(dut_init_done == 1); + endtask : check_rst_req + +endclass diff --git a/src/pwrmgr/dv/env/seq_lib/pwrmgr_lowpower_invalid_vseq.sv b/src/pwrmgr/dv/env/seq_lib/pwrmgr_lowpower_invalid_vseq.sv new file mode 100644 index 000000000..c65bcbfa3 --- /dev/null +++ b/src/pwrmgr/dv/env/seq_lib/pwrmgr_lowpower_invalid_vseq.sv @@ -0,0 +1,140 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// The test to create transition to invalid state from any lowpower transitions. +class pwrmgr_lowpower_invalid_vseq extends pwrmgr_base_vseq; + + `uvm_object_utils(pwrmgr_lowpower_invalid_vseq) + `uvm_object_new + + // Create enum to map rtl local sparse state + // to continuous dv state. + typedef enum bit [3:0] { + DVWaitDisClks = 0, + DVWaitFallThrough = 1, + DVWaitNvmIdleChk = 2, + DVWaitLowPowerPrep = 3, + DVWaitReqPwrDn = 4, + DVWaitLowPower = 5, + DVWaitEnableClocks = 6, + DVWaitReleaseLcRst = 7, + DVWaitOtpInit = 8, + DVWaitLcInit = 9, + DVWaitAckPwrUp = 10, + DVWaitRomCheck = 11, + DVWaitStrap = 12, + DVWaitActive = 13, + DVWaitInvalid = 14 + } reset_index_e; + + constraint wakeups_c {wakeups != 0;} + constraint wakeup_en_c { + solve wakeups before wakeups_en; + |(wakeups_en & wakeups) == 1'b1; + } + + task body(); + reset_index_e reset_index; + resets_t enabled_resets; + string path = "tb.dut.u_fsm.fsm_invalid_i"; + int num_of_target_states = 4; + + // Spurious interrupt check can be executed by + // residue of lowpower task. Since we cannot kill csr op + // by disable fork, we have to disable spurious interrup check. + cfg.invalid_st_test = 1; + + wait_for_fast_fsm(FastFsmActive); + `uvm_info(`gfn, "At body start", UVM_MEDIUM) + check_wake_status('0); + reset_index = DVWaitFallThrough; + + for (int i = 0; i < num_of_target_states; ++i) begin + `uvm_info(`gfn, $sformatf("Starting new round%0d %s", i, reset_index.name), UVM_MEDIUM) + `DV_CHECK_RANDOMIZE_FATAL(this) + setup_interrupt(.enable(en_intr)); + fork + start_lowpower_transition(); + begin + int wait_time_ns = 10000; + `DV_SPINWAIT(wait(cfg.pwrmgr_vif.fast_state == dv2rtl_st(reset_index));, $sformatf( + "Timed out waiting for state %s", reset_index.name), wait_time_ns) + + @cfg.clk_rst_vif.cbn; + `DV_CHECK(uvm_hdl_force(path, 1)) + `uvm_info(`gfn, "Injected invalid slow state", UVM_MEDIUM) + @cfg.clk_rst_vif.cb; + end + join_any + @cfg.clk_rst_vif.cb; + `DV_CHECK(uvm_hdl_release(path)) + `DV_CHECK(cfg.pwrmgr_vif.fast_state, pwrmgr_pkg::FastPwrStateInvalid) + + repeat (10) @cfg.clk_rst_vif.cb; + + apply_reset(); + reset_index=reset_index.next(); + wait_for_fast_fsm(FastFsmActive); + end // for (int i = 0; i < 4; ++i) + endtask + + task start_lowpower_transition(); + wakeups_t enabled_wakeups = wakeups_en & wakeups; + `DV_CHECK(enabled_wakeups, $sformatf( + "Some wakeup must be enabled: wkups=%b, wkup_en=%b", wakeups, wakeups_en)) + `uvm_info(`gfn, $sformatf("Enabled wakeups=0x%x", enabled_wakeups), UVM_MEDIUM) + csr_wr(.ptr(ral.wakeup_en[0]), .value(wakeups_en)); + + low_power_hint = 1; + update_control_csr(); + + `uvm_info(`gfn, $sformatf("Enabled wakeups=0x%x", enabled_wakeups), UVM_MEDIUM) + + // Initiate low power transition. + cfg.pwrmgr_vif.update_cpu_sleeping(1'b1); + set_nvms_idle(); + + `DV_WAIT(cfg.pwrmgr_vif.fast_state != pwrmgr_pkg::FastPwrStateActive) + + if (ral.control.main_pd_n.get_mirrored_value() == 1'b0) begin + wait_for_reset_cause(pwrmgr_pkg::LowPwrEntry); + end + + // Now bring it back. + cfg.slow_clk_rst_vif.wait_clks(cycles_before_wakeup); + cfg.pwrmgr_vif.update_wakeups(wakeups); + + wait(cfg.pwrmgr_vif.pwr_clk_req.main_ip_clk_en == 1'b1); + + // wakeups should be registered. + cfg.pwrmgr_vif.update_wakeups('1); + + wait_for_fast_fsm(FastFsmActive); + `uvm_info(`gfn, "Back from wakeup", UVM_MEDIUM) + endtask : start_lowpower_transition + + function pwrmgr_pkg::fast_pwr_state_e dv2rtl_st(reset_index_e idx); + case (idx) + DVWaitDisClks: return pwrmgr_pkg::FastPwrStateDisClks; + DVWaitFallThrough: return pwrmgr_pkg::FastPwrStateFallThrough; + DVWaitNvmIdleChk: return pwrmgr_pkg::FastPwrStateNvmIdleChk; + DVWaitLowPowerPrep: return pwrmgr_pkg::FastPwrStateLowPowerPrep; + DVWaitReqPwrDn: return pwrmgr_pkg::FastPwrStateReqPwrDn; + DVWaitLowPower: return pwrmgr_pkg::FastPwrStateLowPower; + DVWaitEnableClocks: return pwrmgr_pkg::FastPwrStateEnableClocks; + DVWaitReleaseLcRst: return pwrmgr_pkg::FastPwrStateReleaseLcRst; + DVWaitOtpInit: return pwrmgr_pkg::FastPwrStateOtpInit; + DVWaitLcInit: return pwrmgr_pkg::FastPwrStateLcInit; + DVWaitAckPwrUp: return pwrmgr_pkg::FastPwrStateAckPwrUp; + DVWaitRomCheck: return pwrmgr_pkg::FastPwrStateRomCheckDone; + DVWaitStrap: return pwrmgr_pkg::FastPwrStateStrap; + DVWaitActive: return pwrmgr_pkg::FastPwrStateActive; + DVWaitInvalid: return pwrmgr_pkg::FastPwrStateInvalid; + default: begin + `uvm_error("dv2rma_st", $sformatf("unknown index:%0d", idx)) + end + endcase + endfunction : dv2rtl_st + +endclass : pwrmgr_lowpower_invalid_vseq diff --git a/src/pwrmgr/dv/env/seq_lib/pwrmgr_lowpower_wakeup_race_vseq.sv b/src/pwrmgr/dv/env/seq_lib/pwrmgr_lowpower_wakeup_race_vseq.sv new file mode 100644 index 000000000..75064051a --- /dev/null +++ b/src/pwrmgr/dv/env/seq_lib/pwrmgr_lowpower_wakeup_race_vseq.sv @@ -0,0 +1,138 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// The lowpower_wakeup race test randomly enables wakeups, info capture, and interrupts, +// and sends wakeups in the temporal vecinity of low power entry. It also sends wakeups +// after wakeup processing starts. +class pwrmgr_lowpower_wakeup_race_vseq extends pwrmgr_base_vseq; + `uvm_object_utils(pwrmgr_lowpower_wakeup_race_vseq) + + `uvm_object_new + + constraint wakeups_c {wakeups != 0;} + + rand bit keep_prior_wake_info; + + constraint wakeup_en_c { + solve wakeups before wakeups_en; + |(wakeups_en & wakeups) == 1'b1; + } + + rand int cycles_before_early_wakeup; + rand int cycles_before_transition; + constraint cycles_racing_c { + cycles_before_early_wakeup inside {[2 : 8]}; + cycles_before_transition inside {[2 : 8]}; + } + + task body(); + logic [TL_DW-1:0] value; + wakeups_t prior_reasons = '0; + bit prior_fall_through = '0; + bit prior_abort = '0; + wait_for_fast_fsm(FastFsmActive); + + check_wake_status('0); + for (int i = 0; i < num_trans; ++i) begin + `uvm_info(`gfn, "Starting new round", UVM_MEDIUM) + `DV_CHECK_RANDOMIZE_FATAL(this) + setup_interrupt(.enable(en_intr)); + + csr_wr(.ptr(ral.wakeup_en[0]), .value(wakeups_en)); + `uvm_info(`gfn, $sformatf("Enabled wakeups=0x%x", wakeups_en & wakeups), UVM_MEDIUM) + + if (keep_prior_wake_info) begin + csr_rd(.ptr(ral.wake_info.reasons), .value(prior_reasons)); + csr_rd(.ptr(ral.wake_info.fall_through), .value(prior_fall_through)); + csr_rd(.ptr(ral.wake_info.abort), .value(prior_abort)); + end else begin + clear_wake_info(); + prior_reasons = '0; + prior_fall_through = '0; + prior_abort = '0; + end + `uvm_info(`gfn, $sformatf( + "Prior wake_info: reasons=0x%x, fall_through=%b, abort=%b", + prior_reasons, + prior_fall_through, + prior_abort + ), UVM_MEDIUM) + + `uvm_info(`gfn, $sformatf("%0sabling wakeup capture", disable_wakeup_capture ? "Dis" : "En"), + UVM_MEDIUM) + csr_wr(.ptr(ral.wake_info_capture_dis), .value(disable_wakeup_capture)); + + low_power_hint = 1'b1; + update_control_csr(); + + set_nvms_idle(); + + // This will send the wakeup and trigger low power entry so they almost coincide. + fork + begin + cfg.slow_clk_rst_vif.wait_clks(cycles_before_transition); + // Initiate low power transition. + cfg.pwrmgr_vif.update_cpu_sleeping(1'b1); + end + begin + cfg.slow_clk_rst_vif.wait_clks(cycles_before_early_wakeup); + // Send the wakeups. + cfg.pwrmgr_vif.update_wakeups(wakeups); + end + join + + wait_for_fast_fsm(FastFsmInactive); + + // Check wake_status prior to wakeup, or the unit requesting wakeup will have been reset. + // This read will not work in the chip, since the processor will be asleep. + // We wait until the cycle following the fast fsm lc_rst release. + if (ral.control.main_pd_n.get_mirrored_value() == 1'b0) begin + wait_for_lc_rst_release(); + check_wake_status(wakeups & wakeups_en); + `uvm_info(`gfn, $sformatf("Got wake_status=0x%x", wakeups & wakeups_en), UVM_MEDIUM) + end + wait(cfg.pwrmgr_vif.pwr_clk_req.main_ip_clk_en == 1'b1); + + // Send more wakeups to make sure they are reported in CSRs. With this all enabled + // wakeups should be registered. + cfg.pwrmgr_vif.update_wakeups('1); + + wait_for_fast_fsm(FastFsmActive); + `uvm_info(`gfn, "Back from wakeup", UVM_MEDIUM) + + // make this check parallel. + // to avoid csr rd blocking later status read request and + // miss status update window. + @cfg.clk_rst_vif.cb; + fork + begin + fast_check_reset_status(0); + end + begin + fast_check_wake_info(.reasons(wakeups_en), .prior_reasons(prior_reasons), + .fall_through(1'b0), .abort(1'b0), + .prior_fall_through(prior_fall_through), .prior_abort(prior_abort)); + end + join + // This is the expected side-effect of the low power entry reset, since the source of the + // non-aon wakeup sources will deassert it as a consequence of their reset. + // Some aon wakeups may remain active until software clears them. If they didn't, such wakeups + // will remain active, preventing the device from going to sleep. + cfg.pwrmgr_vif.update_wakeups('0); + cfg.slow_clk_rst_vif.wait_clks(10); + cfg.pwrmgr_vif.update_cpu_sleeping(1'b0); + + // wait for clock is on + cfg.clk_rst_vif.wait_clks(10); + + check_wake_status('0); + + // Wait for interrupt to be generated whether or not it is enabled. + cfg.slow_clk_rst_vif.wait_clks(10); + check_and_clear_interrupt(.expected(1'b1)); + end + clear_wake_info(); + endtask + +endclass : pwrmgr_lowpower_wakeup_race_vseq diff --git a/src/pwrmgr/dv/env/seq_lib/pwrmgr_repeat_wakeup_reset_vseq.sv b/src/pwrmgr/dv/env/seq_lib/pwrmgr_repeat_wakeup_reset_vseq.sv new file mode 100644 index 000000000..a457fc55e --- /dev/null +++ b/src/pwrmgr/dv/env/seq_lib/pwrmgr_repeat_wakeup_reset_vseq.sv @@ -0,0 +1,79 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// Description: +// The wakeup_reset test randomly enables wakeups and resets, info capture, and interrupts, +// and sends wakeups and resets in close temporal proximity at random times. +class pwrmgr_repeat_wakeup_reset_vseq extends pwrmgr_wakeup_reset_vseq; + `uvm_object_utils(pwrmgr_repeat_wakeup_reset_vseq) + + `uvm_object_new + + bit [lc_ctrl_pkg::TxWidth-1:0] bad_lc_tx; + + int cycles_from_reset; + int micros_to_release; + + bit super_sequence_done; + + // add invalid value to rom_ctrl + virtual task twirl_rom_response(); + add_rom_rsp_noise(); + cfg.pwrmgr_vif.rom_ctrl.done = prim_mubi_pkg::MuBi4False; + cfg.pwrmgr_vif.rom_ctrl.good = prim_mubi_pkg::MuBi4False; + cfg.clk_rst_vif.wait_clks(5); + add_rom_rsp_noise(); + wait(cfg.pwrmgr_vif.fast_state == pwrmgr_pkg::FastPwrStateRomCheckDone); + add_rom_rsp_noise(); + cfg.pwrmgr_vif.rom_ctrl.good = prim_mubi_pkg::MuBi4True; + cfg.clk_rst_vif.wait_clks(5); + cfg.pwrmgr_vif.rom_ctrl.done = prim_mubi_pkg::MuBi4True; + endtask + + task body(); + num_trans_c.constraint_mode(0); + num_trans = 50; + super_sequence_done = 0; + + disable_assert(); + fork + begin + super.body(); + super_sequence_done = 1; + end + drv_stim(mubi_mode); + join + endtask : body + + function void disable_assert(); + $assertoff(0, "tb.dut.u_cdc.u_sync_rom_ctrl"); + endfunction : disable_assert + + task drv_stim(pwrmgr_mubi_e mubi_mode); + if (mubi_mode == PwrmgrMubiLcCtrl) drv_lc_ctrl(); + endtask : drv_stim + + task drv_lc_ctrl(); + int delay; + + `DV_CHECK_STD_RANDOMIZE_WITH_FATAL(cycles_from_reset, cycles_from_reset inside {[2 : 8]};) + `DV_CHECK_STD_RANDOMIZE_WITH_FATAL(micros_to_release, micros_to_release inside {[2 : 4]};) + + repeat (50) begin + wait(cfg.esc_clk_rst_vif.rst_n); + cfg.clk_rst_vif.wait_clks(cycles_from_reset); + if (super_sequence_done) break; + `uvm_info(`gfn, "Injection to lc_hw_debug_en", UVM_MEDIUM) + cfg.pwrmgr_vif.lc_hw_debug_en = get_rand_lc_tx_val( + .t_weight(1), .f_weight(1), .other_weight(2) + ); + #(micros_to_release * 1us); + `uvm_info(`gfn, "Injection to lc_dft_en", UVM_MEDIUM) + if (super_sequence_done) break; + cfg.pwrmgr_vif.lc_dft_en = get_rand_lc_tx_val(.t_weight(1), .f_weight(1), .other_weight(2)); + #(micros_to_release * 1us); + end // repeat (50) + `uvm_info(`gfn, "ended drv_lc_ctrl", UVM_MEDIUM) + endtask : drv_lc_ctrl + +endclass : pwrmgr_repeat_wakeup_reset_vseq diff --git a/src/pwrmgr/dv/env/seq_lib/pwrmgr_reset_invalid_vseq.sv b/src/pwrmgr/dv/env/seq_lib/pwrmgr_reset_invalid_vseq.sv new file mode 100644 index 000000000..7b0f55f83 --- /dev/null +++ b/src/pwrmgr/dv/env/seq_lib/pwrmgr_reset_invalid_vseq.sv @@ -0,0 +1,129 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// The test to create transition to invalid state from any reset transitions. +class pwrmgr_reset_invalid_vseq extends pwrmgr_base_vseq; + + `uvm_object_utils(pwrmgr_reset_invalid_vseq) + `uvm_object_new + + // Create enum to map rtl local sparse state + // to continuous dv state. + typedef enum bit [3:0] { + DVWaitDisClks = 0, + DVWaitNvmShutDown = 1, + DVWaitResetPrep = 2, + DVWaitLowPower = 3, + DVWaitEnableClocks = 4, + DVWaitReleaseLcRst = 5, + DVWaitOtpInit = 6, + DVWaitLcInit = 7, + DVWaitAckPwrUp = 8, + DVWaitRomCheck = 9, + DVWaitStrap = 10, + DVWaitActive = 11, + DVWaitInvalid = 12 + } reset_index_e; + + constraint wakeups_c {wakeups == 0;} + constraint wakeups_en_c {wakeups_en == 0;} + + function void post_randomize(); + sw_rst_from_rstmgr = get_rand_mubi4_val(.t_weight(8), .f_weight(4), .other_weight(4)); + super.post_randomize(); + endfunction + + task body(); + reset_index_e reset_index; + resets_t enabled_resets; + string path = "tb.dut.u_fsm.fsm_invalid_i"; + int num_of_target_states = 11; + + wait_for_fast_fsm(FastFsmActive); + check_reset_status('0); + $assertoff(0, "tb.dut.u_cdc.u_clr_reqack.SyncReqAckHoldReq"); + + for (int i = 0; i < num_of_target_states; ++i) begin + `uvm_info(`gfn, $sformatf("Starting new round %0d", i), UVM_MEDIUM) + `DV_CHECK_RANDOMIZE_FATAL(this) + setup_interrupt(.enable(en_intr)); + + fork + create_any_reset_event(); + begin + int wait_time_ns = 20000; + `DV_SPINWAIT(wait(cfg.pwrmgr_vif.fast_state == dv2rtl_st(reset_index));, $sformatf( + "Timed out waiting for state %s", reset_index.name), wait_time_ns) + + @cfg.clk_rst_vif.cbn; + `uvm_info(`gfn, $sformatf("Will cause invalid state forcing %s = 1", path), UVM_MEDIUM) + `DV_CHECK(uvm_hdl_force(path, 1)) + @cfg.clk_rst_vif.cb; + end + join + @cfg.clk_rst_vif.cb; + `DV_CHECK(uvm_hdl_release(path)) + `DV_CHECK(cfg.pwrmgr_vif.fast_state, pwrmgr_pkg::FastPwrStateInvalid) + `uvm_info(`gfn, "All good, resetting for next round", UVM_MEDIUM) + repeat (10) @cfg.clk_rst_vif.cb; + apply_reset(); + reset_index=reset_index.next(); + wait_for_fast_fsm(FastFsmActive); + end + endtask + + task create_any_reset_event(); + resets_t enabled_resets = resets_t'(resets_en & resets); + `uvm_info(`gfn, $sformatf( + "Enabled resets=0x%x, power_reset=%b, escalation=%b, sw_reset=%b, ndm_reset=%b", + enabled_resets, + power_glitch_reset, + escalation_reset, + sw_rst_from_rstmgr == prim_mubi_pkg::MuBi4True, + ndm_reset + ), UVM_MEDIUM) + + `uvm_info(`gfn, "Trying to write to reset_en CSR", UVM_MEDIUM) + csr_wr(.ptr(ral.reset_en[0]), .value(resets_en)); + // This is necessary to propagate reset_en. + wait_for_csr_to_propagate_to_slow_domain(); + + // Trigger resets. The glitch is sent prior to the externals since if it is delayed + // it will cause a separate reset after the externals, which complicates the checks. + if (power_glitch_reset) send_power_glitch(); + cfg.clk_rst_vif.wait_clks(cycles_before_reset); + + if (cycles_before_reset == 0) enabled_resets = 0; + + `uvm_info(`gfn, $sformatf("Sending resets=0x%x", resets), UVM_MEDIUM) + cfg.pwrmgr_vif.update_resets(resets); + `uvm_info(`gfn, $sformatf("Sending sw reset from rstmgr=%b", sw_rst_from_rstmgr), UVM_MEDIUM) + if (escalation_reset) send_escalation_reset(); + if (ndm_reset) send_ndm_reset(); + cfg.pwrmgr_vif.update_sw_rst_req(sw_rst_from_rstmgr); + + endtask : create_any_reset_event + + function pwrmgr_pkg::fast_pwr_state_e dv2rtl_st(reset_index_e idx); + case (idx) + DVWaitDisClks: return pwrmgr_pkg::FastPwrStateDisClks; + DVWaitNvmShutDown: return pwrmgr_pkg::FastPwrStateNvmShutDown; + DVWaitResetPrep: return pwrmgr_pkg::FastPwrStateResetPrep; + DVWaitLowPower: return pwrmgr_pkg::FastPwrStateLowPower; + DVWaitEnableClocks: return pwrmgr_pkg::FastPwrStateEnableClocks; + DVWaitReleaseLcRst: return pwrmgr_pkg::FastPwrStateReleaseLcRst; + DVWaitOtpInit: return pwrmgr_pkg::FastPwrStateOtpInit; + DVWaitLcInit: return pwrmgr_pkg::FastPwrStateLcInit; + DVWaitAckPwrUp: return pwrmgr_pkg::FastPwrStateAckPwrUp; + DVWaitRomCheck: return pwrmgr_pkg::FastPwrStateRomCheckDone; + DVWaitStrap: return pwrmgr_pkg::FastPwrStateStrap; + DVWaitActive: return pwrmgr_pkg::FastPwrStateActive; + DVWaitInvalid: return pwrmgr_pkg::FastPwrStateInvalid; + default: begin + `uvm_error("dv2rma_st", $sformatf("unknown index:%0d", idx)) + end + endcase + endfunction : dv2rtl_st + +endclass : pwrmgr_reset_invalid_vseq diff --git a/src/pwrmgr/dv/env/seq_lib/pwrmgr_reset_vseq.sv b/src/pwrmgr/dv/env/seq_lib/pwrmgr_reset_vseq.sv new file mode 100644 index 000000000..0b8d9d1b5 --- /dev/null +++ b/src/pwrmgr/dv/env/seq_lib/pwrmgr_reset_vseq.sv @@ -0,0 +1,77 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// The reset test randomly introduces external resets, ndm resets, power glitches, and escalation +// resets. +class pwrmgr_reset_vseq extends pwrmgr_base_vseq; + + `uvm_object_utils(pwrmgr_reset_vseq) + `uvm_object_new + + constraint wakeups_c {wakeups == 0;} + constraint wakeups_en_c {wakeups_en == 0;} + + function void post_randomize(); + sw_rst_from_rstmgr = get_rand_mubi4_val(.t_weight(8), .f_weight(4), .other_weight(4)); + super.post_randomize(); + endfunction + + task body(); + logic [TL_DW-1:0] value; + resets_t enabled_resets; + wait_for_fast_fsm(FastFsmActive); + + check_reset_status('0); + for (int i = 0; i < num_trans; ++i) begin + `uvm_info(`gfn, "Starting new round", UVM_MEDIUM) + `DV_CHECK_RANDOMIZE_FATAL(this) + setup_interrupt(.enable(en_intr)); + enabled_resets = resets_en & resets; + `uvm_info(`gfn, $sformatf( + "Enabled resets=0x%x, power_reset=%b, escalation=%b, sw_reset=%b, ndm_reset=%b", + enabled_resets, + power_glitch_reset, + escalation_reset, + sw_rst_from_rstmgr == prim_mubi_pkg::MuBi4True, + ndm_reset + ), UVM_MEDIUM) + + csr_wr(.ptr(ral.reset_en[0]), .value(resets_en)); + // This is necessary to propagate reset_en. + wait_for_csr_to_propagate_to_slow_domain(); + + // Trigger resets. The glitch is sent prior to the externals since if it is delayed + // it will cause a separate reset after the externals, which complicates the checks. + if (power_glitch_reset) send_power_glitch(); + cfg.clk_rst_vif.wait_clks(cycles_before_reset); + + `uvm_info(`gfn, $sformatf("Sending resets=0x%x", resets), UVM_MEDIUM) + cfg.pwrmgr_vif.update_resets(resets); + `uvm_info(`gfn, $sformatf("Sending sw reset from rstmgr=%b", sw_rst_from_rstmgr), UVM_MEDIUM) + if (escalation_reset) begin + send_escalation_reset(); + // Wait for the alert to propagate to fault_status? + end + cfg.pwrmgr_vif.update_sw_rst_req(sw_rst_from_rstmgr); + if (ndm_reset) send_ndm_reset(); + + // Expect to start reset. + `DV_WAIT(cfg.pwrmgr_vif.fast_state != pwrmgr_pkg::FastPwrStateActive) + `uvm_info(`gfn, "Started to process reset", UVM_MEDIUM) + + wait_for_fast_fsm(FastFsmActive); + `uvm_info(`gfn, "Back from reset", UVM_MEDIUM) + + check_wake_info(.reasons('0), .fall_through(1'b0), .abort(1'b0)); + + cfg.slow_clk_rst_vif.wait_clks(4); + check_reset_status('0); + + // And check interrupt is not set. + check_and_clear_interrupt(.expected(1'b0)); + end + clear_wake_info(); + endtask + +endclass : pwrmgr_reset_vseq diff --git a/src/pwrmgr/dv/env/seq_lib/pwrmgr_sec_cm_ctrl_config_regwen_vseq.sv b/src/pwrmgr/dv/env/seq_lib/pwrmgr_sec_cm_ctrl_config_regwen_vseq.sv new file mode 100644 index 000000000..b0fa04564 --- /dev/null +++ b/src/pwrmgr/dv/env/seq_lib/pwrmgr_sec_cm_ctrl_config_regwen_vseq.sv @@ -0,0 +1,38 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// Decription: +// Create low power transition and wakeup a few times. +// When PWRMGR.CONTROL.LOW_POWER_HINT is set, +// issue random write to PWRMGR.CONTROL and check +// PWRMGR.CONTROL value is not changed. +class pwrmgr_sec_cm_ctrl_config_regwen_vseq extends pwrmgr_wakeup_vseq; + `uvm_object_utils(pwrmgr_sec_cm_ctrl_config_regwen_vseq) + + `uvm_object_new + + virtual task pre_start(); + super.pre_start(); + cfg.disable_csr_rd_chk = 1; + endtask : pre_start + + task proc_illegal_ctrl_access(); + uvm_reg_data_t wdata, expdata; + cfg.clk_rst_vif.wait_clks(1); + wait(cfg.pwrmgr_vif.lowpwr_cfg_wen == 0); + + repeat ($urandom_range(1, 5)) begin + `DV_CHECK_STD_RANDOMIZE_FATAL(wdata) + expdata = ral.control.get(); + `uvm_info(`gfn, $sformatf("csr start %x", ral.control.get()), UVM_HIGH) + csr_wr(.ptr(ral.control), .value(wdata)); + csr_rd_check(.ptr(ral.control), .compare_value(expdata)); + `uvm_info(`gfn, "csr done", UVM_HIGH) + end + endtask : proc_illegal_ctrl_access + + virtual task wait_for_csr_to_propagate_to_slow_domain(); + proc_illegal_ctrl_access(); + super.wait_for_csr_to_propagate_to_slow_domain(); + endtask +endclass : pwrmgr_sec_cm_ctrl_config_regwen_vseq diff --git a/src/pwrmgr/dv/env/seq_lib/pwrmgr_smoke_vseq.sv b/src/pwrmgr/dv/env/seq_lib/pwrmgr_smoke_vseq.sv new file mode 100644 index 000000000..b54c5cc08 --- /dev/null +++ b/src/pwrmgr/dv/env/seq_lib/pwrmgr_smoke_vseq.sv @@ -0,0 +1,90 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// The smoke test brings the pwrmgr through a POR reset, followed by a low +// power sequence, followed by reset. + +// smoke test vseq +class pwrmgr_smoke_vseq extends pwrmgr_base_vseq; + `uvm_object_utils(pwrmgr_smoke_vseq) + + `uvm_object_new + constraint cycles_before_rst_lc_src_c {cycles_before_rst_lc_src inside {[1 : 2]};} + constraint cycles_before_otp_done_c {cycles_before_otp_done inside {[1 : 2]};} + constraint cycles_before_lc_done_c {cycles_before_lc_done inside {[1 : 2]};} + + constraint wakeups_c {wakeups != 0;} + constraint resets_c {resets != 0;} + + constraint control_enables_c { + control_enables.core_clk_en == ral.control.core_clk_en.get_reset(); + control_enables.io_clk_en == ral.control.io_clk_en.get_reset(); + control_enables.usb_clk_en_lp == ral.control.usb_clk_en_lp.get_reset(); + control_enables.usb_clk_en_active == ral.control.usb_clk_en_active.get_reset(); + control_enables.main_pd_n == ral.control.main_pd_n.get_reset(); + } + + task body(); + logic [TL_DW-1:0] value; + wakeups_t wakeup_en; + resets_t reset_en; + wait_for_fast_fsm(FastFsmActive); + set_nvms_idle(); + setup_interrupt(.enable(1'b1)); + + check_wake_status('0); + check_reset_status('0); + + // Enable all wakeups so any peripheral can cause a wakeup. + wakeup_en = '1; + csr_wr(.ptr(ral.wakeup_en[0]), .value(wakeup_en)); + + low_power_hint = 1'b1; + update_control_csr(); + + // Initiate low power transition. + cfg.pwrmgr_vif.update_cpu_sleeping(1'b1); + wait_for_reset_cause(pwrmgr_pkg::LowPwrEntry); + + // Now bring it back. + cfg.slow_clk_rst_vif.wait_clks(cycles_before_wakeup); + cfg.pwrmgr_vif.update_wakeups(wakeups); + + wait_for_fast_fsm(FastFsmActive); + `uvm_info(`gfn, "smoke back from wakeup", UVM_MEDIUM) + + check_wake_status(wakeups & wakeup_en); + check_reset_status('0); + // And make the cpu active. + cfg.pwrmgr_vif.update_cpu_sleeping(1'b0); + + cfg.pwrmgr_vif.update_wakeups('0); + check_and_clear_interrupt(.expected(1'b1)); + + // Enable resets. + reset_en = '1; + csr_wr(.ptr(ral.reset_en[0]), .value(reset_en)); + wait_for_csr_to_propagate_to_slow_domain(); + + // Trigger a reset. + cfg.pwrmgr_vif.update_resets(resets); + cfg.slow_clk_rst_vif.wait_clks(2); + wait_for_reset_cause(pwrmgr_pkg::HwReq); + + // Now bring it back: the slow fsm doesn't participate on this, so we cannot + // rely on the ctrl_cfg_regwen CSR. Wait for the reset status to clear. + wait_for_fast_fsm(FastFsmActive); + + // The reset_status CSR should be clear since the unit requesting reset + // should have been reset, so the incoming reset should have cleared. + check_reset_status('0); + check_wake_status('0); + clear_wake_info(); + + // Wait for interrupt to be generated whether or not it is enabled. + cfg.slow_clk_rst_vif.wait_clks(10); + check_and_clear_interrupt(.expected(1'b0)); + endtask + +endclass : pwrmgr_smoke_vseq diff --git a/src/pwrmgr/dv/env/seq_lib/pwrmgr_stress_all_vseq.sv b/src/pwrmgr/dv/env/seq_lib/pwrmgr_stress_all_vseq.sv new file mode 100644 index 000000000..a088b2975 --- /dev/null +++ b/src/pwrmgr/dv/env/seq_lib/pwrmgr_stress_all_vseq.sv @@ -0,0 +1,42 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// combine all pwrmgr seqs (except below seqs) in one seq to run sequentially +// 1. csr seq, which requires scb to be disabled +class pwrmgr_stress_all_vseq extends pwrmgr_base_vseq; + `uvm_object_utils(pwrmgr_stress_all_vseq) + + `uvm_object_new + + task body(); + string seq_names[] = { + "pwrmgr_aborted_low_power_vseq", + "pwrmgr_lowpower_wakeup_race_vseq", + "pwrmgr_reset_vseq", + "pwrmgr_smoke_vseq", + "pwrmgr_wakeup_reset_vseq", + "pwrmgr_wakeup_vseq" + }; + + for (int i = 1; i <= num_trans; i++) begin + uvm_sequence seq; + pwrmgr_base_vseq pwrmgr_vseq; + uint seq_idx = $urandom_range(0, seq_names.size - 1); + + seq = create_seq_by_name(seq_names[seq_idx]); + `downcast(pwrmgr_vseq, seq) + + pwrmgr_vseq.do_apply_reset = 1; + pwrmgr_vseq.set_sequencer(p_sequencer); + `DV_CHECK_RANDOMIZE_FATAL(pwrmgr_vseq) + `uvm_info(`gfn, $sformatf("seq_idx = %0d, sequence is %0s", seq_idx, pwrmgr_vseq.get_name()), + UVM_MEDIUM) + + pwrmgr_vseq.start(p_sequencer); + `uvm_info(`gfn, $sformatf( + "End of sequence %0s with seq_idx = %0d", pwrmgr_vseq.get_name(), seq_idx), + UVM_MEDIUM) + end + endtask : body +endclass diff --git a/src/pwrmgr/dv/env/seq_lib/pwrmgr_sw_reset_vseq.sv b/src/pwrmgr/dv/env/seq_lib/pwrmgr_sw_reset_vseq.sv new file mode 100644 index 000000000..5fdceafb7 --- /dev/null +++ b/src/pwrmgr/dv/env/seq_lib/pwrmgr_sw_reset_vseq.sv @@ -0,0 +1,54 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// Description: +// The reset test randomly introduces external resets. +class pwrmgr_sw_reset_vseq extends pwrmgr_base_vseq; + + `uvm_object_utils(pwrmgr_sw_reset_vseq) + `uvm_object_new + + constraint wakeups_c {wakeups == 0;} + constraint wakeups_en_c {wakeups_en == 0;} + + task body(); + int exp_rst; + wait_for_fast_fsm(FastFsmActive); + + check_reset_status('0); + num_trans_c.constraint_mode(0); + num_trans = 30; + for (int i = 0; i < num_trans; ++i) begin + `uvm_info(`gfn, "Starting new round", UVM_MEDIUM) + `DV_CHECK_RANDOMIZE_FATAL(this) + setup_interrupt(.enable(en_intr)); + + cfg.pwrmgr_vif.sw_rst_req_i = prim_mubi_pkg::mubi4_t'($urandom_range(0, 15)); + exp_rst = (cfg.pwrmgr_vif.sw_rst_req_i == prim_mubi_pkg::MuBi4True); + cfg.slow_clk_rst_vif.wait_clks(4); + + // sw reset causes fast state machine transition to lowpower state + if (exp_rst == 1) begin + `DV_SPINWAIT(wait(cfg.pwrmgr_vif.fast_state != pwrmgr_pkg::FastPwrStateActive);, + "timeout waiting for non fast-active state", 1000) + end + + // This read is not always possible since the CPU may be off. + + wait(cfg.pwrmgr_vif.pwr_clk_req.main_ip_clk_en == 1'b1); + + wait_for_fast_fsm(FastFsmActive); + `uvm_info(`gfn, "Back from reset", UVM_MEDIUM) + + check_wake_info(.reasons('0), .fall_through(1'b0), .abort(1'b0)); + + cfg.slow_clk_rst_vif.wait_clks(4); + check_reset_status('0); + + // And check interrupt is not set. + check_and_clear_interrupt(.expected(1'b0)); + end + clear_wake_info(); + endtask + +endclass : pwrmgr_sw_reset_vseq diff --git a/src/pwrmgr/dv/env/seq_lib/pwrmgr_vseq_list.sv b/src/pwrmgr/dv/env/seq_lib/pwrmgr_vseq_list.sv new file mode 100644 index 000000000..bc09a19a0 --- /dev/null +++ b/src/pwrmgr/dv/env/seq_lib/pwrmgr_vseq_list.sv @@ -0,0 +1,23 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +`include "pwrmgr_base_vseq.sv" +`include "pwrmgr_aborted_low_power_vseq.sv" +`include "pwrmgr_lowpower_wakeup_race_vseq.sv" +`include "pwrmgr_reset_vseq.sv" +`include "pwrmgr_smoke_vseq.sv" +`include "pwrmgr_stress_all_vseq.sv" +`include "pwrmgr_wakeup_reset_vseq.sv" +`include "pwrmgr_wakeup_vseq.sv" +`include "pwrmgr_common_vseq.sv" +`include "pwrmgr_repeat_wakeup_reset_vseq.sv" +`include "pwrmgr_sw_reset_vseq.sv" +`include "pwrmgr_esc_clk_rst_malfunc_vseq.sv" +`include "pwrmgr_sec_cm_ctrl_config_regwen_vseq.sv" +`include "pwrmgr_global_esc_vseq.sv" +`include "pwrmgr_escalation_timeout_vseq.sv" +`include "pwrmgr_glitch_vseq.sv" +`include "pwrmgr_disable_rom_integrity_check_vseq.sv" +`include "pwrmgr_reset_invalid_vseq.sv" +`include "pwrmgr_lowpower_invalid_vseq.sv" diff --git a/src/pwrmgr/dv/env/seq_lib/pwrmgr_wakeup_reset_vseq.sv.tpl b/src/pwrmgr/dv/env/seq_lib/pwrmgr_wakeup_reset_vseq.sv.tpl new file mode 100644 index 000000000..7918cb683 --- /dev/null +++ b/src/pwrmgr/dv/env/seq_lib/pwrmgr_wakeup_reset_vseq.sv.tpl @@ -0,0 +1,169 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// The wakeup_reset test randomly enables wakeups and resets, info capture, and interrupts, +// and sends wakeups and resets in close temporal proximity at random times. +// Notice it makes no sense to send escalation reset requests while in low +// power, when the clocks are stopped, or while the system is already in reset +// since escalation should not be triggered with reset active. +class pwrmgr_wakeup_reset_vseq extends pwrmgr_base_vseq; + `uvm_object_utils(pwrmgr_wakeup_reset_vseq) + + `uvm_object_new + + constraint wakeups_c {wakeups != 0;} + + constraint wakeup_en_c { + solve wakeups before wakeups_en; + (wakeups_en & wakeups) != 0; + } + constraint disable_wakeup_capture_c {disable_wakeup_capture == 1'b0;} + + // Disabling escalation resets per comment above. + constraint escalation_reset_c {escalation_reset == 0;} + + // Cause some delays for the rom_ctrl done and good inputs. Simple, enough to hold the + // transition to active state. + // ICEBOX(lowrisc/opentitan#18236) Consider adding checks to monitor fast state transitions are + // compliant with "ROM Integrity Checks" at + // https://opentitan.org/book/hw/top_${topname}/ip_autogen/pwrmgr/doc/theory_of_operation.html#rom-integrity-checks + virtual task twirl_rom_response(); + cfg.pwrmgr_vif.rom_ctrl.done = prim_mubi_pkg::MuBi4False; + cfg.pwrmgr_vif.rom_ctrl.good = prim_mubi_pkg::MuBi4False; + @(cfg.pwrmgr_vif.fast_state == pwrmgr_pkg::FastPwrStateAckPwrUp); + cfg.pwrmgr_vif.rom_ctrl.good = prim_mubi_pkg::MuBi4True; + @(cfg.pwrmgr_vif.fast_state == pwrmgr_pkg::FastPwrStateRomCheckDone); + cfg.clk_rst_vif.wait_clks(10); + cfg.pwrmgr_vif.rom_ctrl.good = prim_mubi_pkg::MuBi4False; + cfg.clk_rst_vif.wait_clks(5); + cfg.pwrmgr_vif.rom_ctrl.good = prim_mubi_pkg::MuBi4True; + cfg.clk_rst_vif.wait_clks(5); + cfg.pwrmgr_vif.rom_ctrl.done = prim_mubi_pkg::MuBi4True; + endtask + + task body(); + logic [TL_DW-1:0] value; + resets_t enabled_resets; + wakeups_t enabled_wakeups; + + wait_for_fast_fsm(FastFsmActive); + + check_reset_status('0); + check_wake_status('0); + for (int i = 0; i < num_trans; ++i) begin + `uvm_info(`gfn, "Starting new round", UVM_MEDIUM) + `DV_CHECK_RANDOMIZE_FATAL(this) + setup_interrupt(.enable(en_intr)); + + // Enable resets. + enabled_resets = resets_en & resets; + `uvm_info(`gfn, $sformatf( + "Enabled resets=0x%x, power_reset=%b, sw_reset=%b", + enabled_resets, + power_glitch_reset, + sw_rst_from_rstmgr + ), UVM_MEDIUM) + csr_wr(.ptr(ral.reset_en[0]), .value(resets_en)); + + // Enable wakeups. + enabled_wakeups = wakeups_en & wakeups; + `DV_CHECK(enabled_wakeups, $sformatf( + "Some wakeup must be enabled: wkups=%b, wkup_en=%b", wakeups, wakeups_en)) + `uvm_info(`gfn, $sformatf("Enabled wakeups=0x%x", enabled_wakeups), UVM_MEDIUM) + csr_wr(.ptr(ral.wakeup_en[0]), .value(wakeups_en)); + + clear_wake_info(); + + `uvm_info(`gfn, $sformatf("%0sabling wakeup capture", disable_wakeup_capture ? "Dis" : "En"), + UVM_MEDIUM) + csr_wr(.ptr(ral.wake_info_capture_dis), .value(disable_wakeup_capture)); + + low_power_hint = 1'b1; + update_control_csr(); + + // Initiate low power transition. + cfg.pwrmgr_vif.update_cpu_sleeping(1'b1); + set_nvms_idle(); + // Wait for the slow state machine to be in low power. + wait(cfg.pwrmgr_vif.slow_state == pwrmgr_pkg::SlowPwrStateLowPower); + // This will send the wakeup and reset so they almost coincide. + // at low power state, do not use clk_rst_vif, cause it is off. + fork + begin + cfg.slow_clk_rst_vif.wait_clks(cycles_before_reset); + cfg.pwrmgr_vif.update_resets(resets); + + if (power_glitch_reset) begin + send_power_glitch(); + enabled_resets = 0; + end + `uvm_info(`gfn, $sformatf("Sending reset=%b, power_glitch=%b", resets, power_glitch_reset + ), UVM_MEDIUM) + end + + begin + cfg.slow_clk_rst_vif.wait_clks(cycles_before_wakeup); + cfg.pwrmgr_vif.update_wakeups(wakeups); + `uvm_info(`gfn, $sformatf("Sending wakeup=%b", wakeups), UVM_MEDIUM) + end + join + + if (cfg.en_cov) begin + cov.reset_wakeup_distance_cg.sample(cycles_before_reset - cycles_before_wakeup); + end + // twirl_rom_response has some waits, and so does the code to check wake_status, + // so we fork them to avoid conflicts. + + fork + begin + // At lowpower state, wait for clock comes back before check any csr + @cfg.clk_rst_vif.cb; + // Check wake_status prior to wakeup, or the unit requesting wakeup will have been reset. + // This read will not work in the chip, since the processor will be asleep. + // Reset status cannot be reliably checked here since it is cleared when reset goes active. + fast_check_wake_status(enabled_wakeups); + `uvm_info(`gfn, $sformatf("Got wake_status=0x%x", enabled_wakeups), UVM_MEDIUM) + end + twirl_rom_response(); + join + + wait_for_fast_fsm(FastFsmActive); + + check_reset_status('0); + + check_wake_info(.reasons(enabled_wakeups), .prior_reasons(1'b0), .fall_through(1'b0), + .prior_fall_through(1'b0), .abort(1'b0), .prior_abort(1'b0)); + + if (mubi_mode == PwrmgrMubiRomCtrl) begin + add_rom_rsp_noise(); + cfg.pwrmgr_vif.rom_ctrl.good = prim_mubi_pkg::MuBi4True; + cfg.clk_rst_vif.wait_clks(5); + cfg.pwrmgr_vif.rom_ctrl.done = prim_mubi_pkg::MuBi4True; + end + + // This is the expected side-effect of the low power entry reset, since the source of the + // non-aon wakeup sources will deassert it as a consequence of their reset. + // Some aon wakeups may remain active until software clears them. If they didn't, such wakeups + // will remain active, preventing the device from going to sleep. + cfg.pwrmgr_vif.update_wakeups('0); + cfg.slow_clk_rst_vif.wait_clks(10); + check_reset_status('0); + check_wake_status('0); + + cfg.slow_clk_rst_vif.wait_clks(10); + // An interrupt will be generated depending on the exact timing of the slow fsm getting + // the reset and wakeup. We choose not to predict it here (it is checked on other tests). + // Instead, we just check if the interrupt status is asserted and it is enabled the + // output interrupt is active. + check_and_clear_interrupt(.expected(1'b1), .check_expected('0)); + // Clear hardware resets: if they are enabled they are cleared when rst_lc_req[1] goes active, + // but this makes sure they are cleared even if none is enabled for the next round. + cfg.pwrmgr_vif.update_resets('0); + // And make the cpu active. + cfg.pwrmgr_vif.update_cpu_sleeping(1'b0); + end + clear_wake_info(); + endtask + +endclass : pwrmgr_wakeup_reset_vseq diff --git a/src/pwrmgr/dv/env/seq_lib/pwrmgr_wakeup_vseq.sv b/src/pwrmgr/dv/env/seq_lib/pwrmgr_wakeup_vseq.sv new file mode 100644 index 000000000..0f331f46c --- /dev/null +++ b/src/pwrmgr/dv/env/seq_lib/pwrmgr_wakeup_vseq.sv @@ -0,0 +1,127 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// The wakeup test randomly enables wakeups, info capture, and interrupts, +// and sends wakeups at random times. +class pwrmgr_wakeup_vseq extends pwrmgr_base_vseq; + `uvm_object_utils(pwrmgr_wakeup_vseq) + + `uvm_object_new + + constraint wakeups_c {wakeups != 0;} + + rand bit keep_prior_wake_info; + + constraint wakeup_en_c { + solve wakeups before wakeups_en; + |(wakeups_en & wakeups) == 1'b1; + } + + task body(); + logic [TL_DW-1:0] value; + wakeups_t enabled_wakeups; + wakeups_t prior_reasons = '0; + bit prior_fall_through = '0; + bit prior_abort = '0; + + wait_for_fast_fsm(FastFsmActive); + check_wake_status('0); + for (int i = 0; i < num_trans; ++i) begin + `uvm_info(`gfn, "Starting new round", UVM_MEDIUM) + `DV_CHECK_RANDOMIZE_FATAL(this) + + // Instrument interrupts. + setup_interrupt(en_intr); + + // Enable wakeups. + enabled_wakeups = wakeups_en & wakeups; + `DV_CHECK(enabled_wakeups, $sformatf( + "Some wakeup must be enabled: wkups=%b, wkup_en=%b", wakeups, wakeups_en)) + `uvm_info(`gfn, $sformatf( + "Enabled wakeups=0x%x, wakeups=0x%x, enables=0x%x", + enabled_wakeups, wakeups, wakeups_en), + UVM_MEDIUM) + csr_wr(.ptr(ral.wakeup_en[0]), .value(wakeups_en)); + + if (keep_prior_wake_info) begin + csr_rd(.ptr(ral.wake_info.reasons), .value(prior_reasons)); + csr_rd(.ptr(ral.wake_info.fall_through), .value(prior_fall_through)); + csr_rd(.ptr(ral.wake_info.abort), .value(prior_abort)); + end else begin + clear_wake_info(); + prior_reasons = '0; + prior_fall_through = '0; + prior_abort = '0; + end + `uvm_info(`gfn, $sformatf( + "Prior wake_info: reasons=0x%x, fall_through=%b, abort=%b", + prior_reasons, + prior_fall_through, + prior_abort + ), UVM_MEDIUM) + + `uvm_info(`gfn, $sformatf("%0sabling wakeup capture", disable_wakeup_capture ? "Dis" : "En"), + UVM_MEDIUM) + csr_wr(.ptr(ral.wake_info_capture_dis), .value(disable_wakeup_capture)); + + low_power_hint = 1'b1; + update_control_csr(); + + // Initiate low power transition. + cfg.pwrmgr_vif.update_cpu_sleeping(1'b1); + set_nvms_idle(); + + if (ral.control.main_pd_n.get_mirrored_value() == 1'b0) begin + wait_for_reset_cause(pwrmgr_pkg::LowPwrEntry); + end + + // Now bring it back. + cfg.slow_clk_rst_vif.wait_clks(cycles_before_wakeup); + cfg.pwrmgr_vif.update_wakeups(wakeups); + // Check wake_status prior to wakeup, or the unit requesting wakeup will have been reset. + // This read will not work in the chip, since the processor will be asleep. + cfg.slow_clk_rst_vif.wait_clks(4); + // wait for clock is on + cfg.clk_rst_vif.wait_clks(10); + + check_wake_status(enabled_wakeups); + `uvm_info(`gfn, $sformatf("Got wake_status=0x%x", enabled_wakeups), UVM_MEDIUM) + wait(cfg.pwrmgr_vif.pwr_clk_req.main_ip_clk_en == 1'b1); + + wait_for_fast_fsm(FastFsmActive); + `uvm_info(`gfn, "Back from wakeup", UVM_MEDIUM) + + @cfg.clk_rst_vif.cb; + fork + begin + fast_check_reset_status(0); + end + begin + fast_check_wake_info(.reasons(enabled_wakeups), .prior_reasons(prior_reasons), + .fall_through(1'b0), .abort(1'b0), + .prior_fall_through(prior_fall_through), .prior_abort(prior_abort)); + end + join + // This is the expected side-effect of the low power entry reset, since the source of the + // non-aon wakeup sources will deassert it as a consequence of their reset. + // Some aon wakeups may remain active until software clears them. If they didn't, such wakeups + // will remain active, preventing the device from going to sleep. + cfg.pwrmgr_vif.update_wakeups('0); + cfg.slow_clk_rst_vif.wait_clks(10); + + // if clock is off, we need to wait until it is resumed. + cfg.clk_rst_vif.wait_clks(5); + check_wake_status('0); + + // And make the cpu active. + cfg.pwrmgr_vif.update_cpu_sleeping(1'b0); + + // Wait for interrupt to be generated whether or not it is enabled. + cfg.slow_clk_rst_vif.wait_clks(10); + check_and_clear_interrupt(.expected(1'b1)); + end + clear_wake_info(); + endtask + +endclass : pwrmgr_wakeup_vseq diff --git a/src/pwrmgr/dv/pwrmgr_sim.core b/src/pwrmgr/dv/pwrmgr_sim.core new file mode 100644 index 000000000..1bd1c54a4 --- /dev/null +++ b/src/pwrmgr/dv/pwrmgr_sim.core @@ -0,0 +1,29 @@ +CAPI=2: +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +name: "lowrisc:dv:pwrmgr_sim:0.1" +description: "PWRMGR DV sim target" +filesets: + files_rtl: + depend: + - lowrisc:ip_interfaces:pwrmgr + files_dv: + depend: + - lowrisc:dv:pwrmgr_test + - lowrisc:dv:pwrmgr_sva + files: + - tb.sv + - cov/pwrmgr_cov_bind.sv + file_type: systemVerilogSource + +targets: + sim: &sim_target + toplevel: tb + filesets: + - files_rtl + - files_dv + default_tool: vcs + + lint: + <<: *sim_target diff --git a/src/pwrmgr/dv/pwrmgr_sim_cfg.hjson b/src/pwrmgr/dv/pwrmgr_sim_cfg.hjson new file mode 100644 index 000000000..450cd0b59 --- /dev/null +++ b/src/pwrmgr/dv/pwrmgr_sim_cfg.hjson @@ -0,0 +1,155 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +{ + // Name of the sim cfg - typically same as the name of the DUT. + name: pwrmgr + + // Top level dut name (sv module). + dut: pwrmgr + + // Top level testbench name (sv module). + tb: tb + + // Simulator used to sign off this block + tool: vcs + + // Fusesoc core file used for building the file list. + fusesoc_core: lowrisc:dv:pwrmgr_sim:0.1 + + // Testplan hjson file. + testplan: "{self_dir}/../data/pwrmgr_testplan.hjson" + + // Import additional common sim cfg files. + import_cfgs: [// Project wide common sim cfg file + "{proj_root}/hw/dv/tools/dvsim/common_sim_cfg.hjson", + // Common CIP test lists + "{proj_root}/hw/dv/tools/dvsim/tests/csr_tests.hjson", + "{proj_root}/hw/dv/tools/dvsim/tests/intr_test.hjson", + "{proj_root}/hw/dv/tools/dvsim/tests/stress_tests.hjson", + "{proj_root}/hw/dv/tools/dvsim/tests/sec_cm_tests.hjson", + "{proj_root}/hw/dv/tools/dvsim/tests/tl_access_tests.hjson"] + + // Overrides + overrides: [ + { + name: design_level + value: "top" + } + ] + + // Exclusion files + vcs_cov_excl_files: ["{self_dir}/cov/pwrmgr_cov_manual_excl.el"] + + // Add additional tops for simulation. + sim_tops: ["pwrmgr_bind", + "pwrmgr_cov_bind", + "sec_cm_prim_count_bind", + "sec_cm_prim_sparse_fsm_flop_bind", + "sec_cm_prim_onehot_check_bind"] + + // Default iterations for all tests - each test entry can override this. + reseed: 50 + + // Default UVM test and seq class name. + uvm_test: pwrmgr_base_test + uvm_test_seq: pwrmgr_base_vseq + + // Enable cdc instrumentation. + run_opts: ["+cdc_instrumentation_enabled=1"] + + // List of test specifications. + tests: [ + { + name: pwrmgr_smoke + uvm_test_seq: pwrmgr_smoke_vseq + run_opts: ["+test_timeout_ns=1000000"] + } + { + name: pwrmgr_reset + uvm_test_seq: pwrmgr_reset_vseq + run_opts: ["+test_timeout_ns=1000000"] + } + { + name: pwrmgr_lowpower_wakeup_race + uvm_test_seq: pwrmgr_lowpower_wakeup_race_vseq + run_opts: ["+test_timeout_ns=1000000"] + } + { + name: pwrmgr_wakeup + uvm_test_seq: pwrmgr_wakeup_vseq + run_opts: ["+test_timeout_ns=1000000"] + } + { + name: pwrmgr_wakeup_reset + uvm_test_seq: pwrmgr_wakeup_reset_vseq + run_opts: ["+test_timeout_ns=1000000"] + } + { + name: pwrmgr_aborted_low_power + uvm_test_seq: pwrmgr_aborted_low_power_vseq + } + { + name: pwrmgr_sec_cm_lc_ctrl_intersig_mubi + uvm_test_seq: pwrmgr_repeat_wakeup_reset_vseq + run_opts: ["+test_timeout_ns=3000000", "+pwrmgr_mubi_mode=PwrmgrMubiLcCtrl"] + } + { + name: pwrmgr_sec_cm_rom_ctrl_intersig_mubi + uvm_test_seq: pwrmgr_repeat_wakeup_reset_vseq + run_opts: ["+test_timeout_ns=4000000", "+pwrmgr_mubi_mode=PwrmgrMubiRomCtrl"] + } + { + name: pwrmgr_sec_cm_rstmgr_intersig_mubi + uvm_test_seq: pwrmgr_sw_reset_vseq + run_opts: ["+test_timeout_ns=1000000"] + } + { + name: pwrmgr_esc_clk_rst_malfunc + uvm_test_seq: pwrmgr_esc_clk_rst_malfunc_vseq + run_opts: ["+test_timeout_ns=1000000"] + } + { + name: pwrmgr_sec_cm_ctrl_config_regwen + uvm_test_seq: pwrmgr_sec_cm_ctrl_config_regwen_vseq + run_opts: ["+test_timeout_ns=50000000"] + } + { + name: pwrmgr_global_esc + uvm_test_seq: pwrmgr_global_esc_vseq + run_opts: ["+test_timeout_ns=1000000000"] + } + { + name: pwrmgr_escalation_timeout + uvm_test_seq: pwrmgr_escalation_timeout_vseq + } + { + name: pwrmgr_glitch + uvm_test_seq: pwrmgr_glitch_vseq + run_opts: ["+test_timeout_ns=1000000"] + } + { + name: pwrmgr_disable_rom_integrity_check + uvm_test_seq: pwrmgr_disable_rom_integrity_check_vseq + run_opts: ["+test_timeout_ns=1000000"] + } + { + name: pwrmgr_reset_invalid + uvm_test_seq: pwrmgr_reset_invalid_vseq + run_opts: ["+test_timeout_ns=1000000"] + } + { + name: pwrmgr_lowpower_invalid + uvm_test_seq: pwrmgr_lowpower_invalid_vseq + run_opts: ["+test_timeout_ns=1000000"] + } + ] + + // List of regressions. + regressions: [ + { + name: smoke + tests: ["pwrmgr_smoke"] + } + ] +} diff --git a/src/pwrmgr/dv/sva/pwrmgr_ast_sva_if.sv b/src/pwrmgr/dv/sva/pwrmgr_ast_sva_if.sv new file mode 100644 index 000000000..99450f739 --- /dev/null +++ b/src/pwrmgr/dv/sva/pwrmgr_ast_sva_if.sv @@ -0,0 +1,145 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// This has some assertions that check the inputs from ast react according to +// the pwrmgr outputs. The ast inputs are generated by the base sequences, but +// these assertions will also be useful at full chip level. +interface pwrmgr_ast_sva_if #( + parameter bit CheckClocks = 1'b0 +) ( + input logic clk_slow_i, + input logic rst_slow_ni, + input logic clk_main_i, + input logic clk_io_i, + input logic clk_usb_i, + input logic por_d0_ni, + // The pwrmgr outputs. + input pwrmgr_pkg::pwr_ast_req_t pwr_ast_o, + // The pwrmgr inputs. + input pwrmgr_pkg::pwr_ast_rsp_t pwr_ast_i +); + + // These numbers of cycles are meant to match both the randomization in + // pwrmgr_base_vseq, and the actual cycle counts from full chip. + // Notice the expectation for full chip is that deassertion of *clk_val + // takes 0 cycles, and assertion takes a 2 cycle synchronizer delay on + // the slow clock; deassertion of main_pok takes one cycle, and assertion + // not more than 2 cycles. + localparam int MIN_CLK_WAIT_CYCLES = 0; + localparam int MIN_PDN_WAIT_CYCLES = 0; + localparam int MAX_CLK_WAIT_CYCLES = 60; + localparam int MAX_PDN_WAIT_CYCLES = 110; + + bit disable_sva; + bit reset_or_disable; + + always_comb reset_or_disable = !rst_slow_ni || disable_sva; + + `define CLK_WAIT_BOUNDS ##[MIN_CLK_WAIT_CYCLES:MAX_CLK_WAIT_CYCLES] + `define PDN_WAIT_BOUNDS ##[MIN_PDN_WAIT_CYCLES:MAX_PDN_WAIT_CYCLES] + + // Clock enable-valid. + + // Changes triggered by por_d0_ni only affect clk_val. + `ASSERT(CoreClkGlitchToValOff_A, $fell(por_d0_ni) |-> ##[0:1] !pwr_ast_i.core_clk_val, clk_slow_i, + reset_or_disable) + `ASSERT(CoreClkGlitchToValOn_A, + $rose(por_d0_ni) && pwr_ast_o.core_clk_en |-> ##[0:2] pwr_ast_i.core_clk_val, clk_slow_i, + reset_or_disable) + `ASSERT(IoClkGlitchToValOff_A, $fell(por_d0_ni) |-> ##[0:1] !pwr_ast_i.io_clk_val, clk_slow_i, + reset_or_disable) + `ASSERT(IoClkGlitchToValOn_A, + $rose(por_d0_ni) && pwr_ast_o.io_clk_en |-> ##[0:2] pwr_ast_i.io_clk_val, clk_slow_i, + reset_or_disable) + `ASSERT(UsbClkGlitchToValOff_A, $fell(por_d0_ni) |-> ##[0:5] !pwr_ast_i.usb_clk_val, clk_slow_i, + reset_or_disable) + `ASSERT(UsbClkGlitchToValOn_A, + $rose(por_d0_ni) && pwr_ast_o.usb_clk_en |-> ##[0:5] pwr_ast_i.usb_clk_val, clk_slow_i, + reset_or_disable) + + // Changes not triggered by por_d0_ni + `ASSERT(CoreClkHandshakeOn_A, + $rose(pwr_ast_o.core_clk_en) && por_d0_ni |-> `CLK_WAIT_BOUNDS + pwr_ast_i.core_clk_val || !por_d0_ni, clk_slow_i, reset_or_disable) + `ASSERT(CoreClkHandshakeOff_A, + $fell(pwr_ast_o.core_clk_en) |-> `CLK_WAIT_BOUNDS !pwr_ast_i.core_clk_val, clk_slow_i, + reset_or_disable) + + `ASSERT(IoClkHandshakeOn_A, + $rose(pwr_ast_o.io_clk_en) && por_d0_ni |-> `CLK_WAIT_BOUNDS + pwr_ast_i.io_clk_val || !por_d0_ni, clk_slow_i, reset_or_disable) + `ASSERT(IoClkHandshakeOff_A, + $fell(pwr_ast_o.io_clk_en) |-> `CLK_WAIT_BOUNDS !pwr_ast_i.io_clk_val, clk_slow_i, + reset_or_disable) + + // Usb is a bit different: apparently usb_clk_val can stay low after a power glitch, so it may + // already be low when usb_clk_en drops. + `ASSERT(UsbClkHandshakeOn_A, + $rose(pwr_ast_o.usb_clk_en) && por_d0_ni && $past(por_d0_ni, 1) |-> `CLK_WAIT_BOUNDS + pwr_ast_i.usb_clk_val || !por_d0_ni, clk_slow_i, reset_or_disable) + `ASSERT(UsbClkHandshakeOff_A, + $fell(pwr_ast_o.usb_clk_en) |-> `CLK_WAIT_BOUNDS !pwr_ast_i.usb_clk_val, clk_slow_i, + reset_or_disable) + + if (CheckClocks) begin : gen_check_clock + int main_clk_cycles, io_clk_cycles, usb_clk_cycles; + always_ff @(posedge clk_main_i) main_clk_cycles++; + always_ff @(posedge clk_io_i) io_clk_cycles++; + always_ff @(posedge clk_usb_i) usb_clk_cycles++; + + `ASSERT(MainClkStopped_A, + $fell( + pwr_ast_i.core_clk_val + ) |=> ($stable( + main_clk_cycles + ) || pwr_ast_i.core_clk_val) [* 1 : $], + clk_slow_i, reset_or_disable) + `ASSERT(MainClkRun_A, + $rose( + pwr_ast_i.core_clk_val + ) |=> (!$stable( + main_clk_cycles + ) || !pwr_ast_i.core_clk_val) [* 1 : $], + clk_slow_i, reset_or_disable) + + `ASSERT(IOClkStopped_A, + $fell( + pwr_ast_i.io_clk_val + ) |=> ($stable( + io_clk_cycles + ) || pwr_ast_i.io_clk_val) [* 1 : $], + clk_slow_i, reset_or_disable) + `ASSERT(IOClkRun_A, + $rose( + pwr_ast_i.io_clk_val + ) |=> (!$stable( + io_clk_cycles + ) || !pwr_ast_i.io_clk_val) [* 1 : $], + clk_slow_i, reset_or_disable) + + `ASSERT(USBClkStopped_A, + $fell( + pwr_ast_i.usb_clk_val + ) |=> ($stable( + usb_clk_cycles + ) || pwr_ast_i.usb_clk_val) [* 1 : $], + clk_slow_i, reset_or_disable) + `ASSERT(USBClkRun_A, + $rose( + pwr_ast_i.usb_clk_val + ) |=> (!$stable( + usb_clk_cycles + ) || !pwr_ast_i.usb_clk_val) [* 1 : $], + clk_slow_i, reset_or_disable) + end + + // Main pd-pok + `ASSERT(MainPdHandshakeOn_A, pwr_ast_o.main_pd_n |-> `PDN_WAIT_BOUNDS pwr_ast_i.main_pok, + clk_slow_i, reset_or_disable) + `ASSERT(MainPdHandshakeOff_A, !pwr_ast_o.main_pd_n |-> `PDN_WAIT_BOUNDS !pwr_ast_i.main_pok, + clk_slow_i, reset_or_disable) + + `undef CLK_WAIT_BOUNDS + `undef PDN_WAIT_BOUNDS +endinterface diff --git a/src/pwrmgr/dv/sva/pwrmgr_bind.sv b/src/pwrmgr/dv/sva/pwrmgr_bind.sv new file mode 100644 index 000000000..dd73f78ea --- /dev/null +++ b/src/pwrmgr/dv/sva/pwrmgr_bind.sv @@ -0,0 +1,87 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +module pwrmgr_bind; +`ifndef GATE_LEVEL + bind pwrmgr tlul_assert #( + .EndpointType("Device") + ) tlul_assert_device (.clk_i, .rst_ni, .h2d(tl_i), .d2h(tl_o)); + + // In top-level testbench, do not bind the csr_assert_fpv to reduce simulation time. +`ifndef TOP_LEVEL_DV + bind pwrmgr pwrmgr_csr_assert_fpv pwrmgr_csr_assert (.clk_i, .rst_ni, .h2d(tl_i), .d2h(tl_o)); +`endif + + // Clock control assertions. + bind pwrmgr pwrmgr_clock_enables_sva_if pwrmgr_clock_enables_sva_if ( + .clk_i(clk_slow_i), + .rst_ni(rst_slow_ni), + .fast_state(u_fsm.state_q), + .slow_state(u_slow_fsm.state_q), + // The synchronized control CSR bits. + .main_pd_ni(slow_main_pd_n), + .core_clk_en_i(slow_core_clk_en), + .io_clk_en_i(slow_io_clk_en), + .usb_clk_en_lp_i(slow_usb_clk_en_lp), + .usb_clk_en_active_i(slow_usb_clk_en_active), + .usb_ip_clk_status_i(usb_ip_clk_status), + // The main power control. + .main_pd_n(pwr_ast_o.main_pd_n), + // The output enables. + .core_clk_en(pwr_ast_o.core_clk_en), + .io_clk_en(pwr_ast_o.io_clk_en), + .usb_clk_en(pwr_ast_o.usb_clk_en) + ); + + bind pwrmgr pwrmgr_rstmgr_sva_if pwrmgr_rstmgr_sva_if ( + .clk_i, + .rst_ni, + .clk_slow_i, + .rst_slow_ni, + // The outputs from pwrmgr. + .rst_lc_req(pwr_rst_o.rst_lc_req), + .rst_sys_req(pwr_rst_o.rst_sys_req), + // The inputs from rstmgr. + .rst_lc_src_n(pwr_rst_i.rst_lc_src_n), + .rst_sys_src_n(pwr_rst_i.rst_sys_src_n) + ); + + bind pwrmgr clkmgr_pwrmgr_sva_if clkmgr_pwrmgr_sva_if ( + .clk_i, + .rst_ni, + .io_clk_en(pwr_clk_o.io_ip_clk_en), + .io_status(pwr_clk_i.io_status), + .main_clk_en(pwr_clk_o.main_ip_clk_en), + .main_status(pwr_clk_i.main_status), + .usb_clk_en(pwr_clk_o.usb_ip_clk_en), + .usb_status(pwr_clk_i.usb_status) + ); + + bind pwrmgr pwrmgr_sec_cm_checker_assert pwrmgr_sec_cm_checker_assert ( + .clk_i, + .rst_ni, + .clk_lc_i, + .rst_lc_ni, + .clk_esc_i, + .rst_esc_ni, + .clk_slow_i, + .rst_slow_ni, + .rst_main_ni, + .pwr_rst_o, + .slow_esc_rst_req(slow_peri_reqs.rstreqs[3]), + .slow_mp_rst_req(slow_peri_reqs.rstreqs[2]), + .slow_fsm_invalid, + .fast_fsm_invalid(u_fsm.u_state_regs.unused_err_o), + .rom_intg_chk_dis(u_fsm.rom_intg_chk_dis), + .rom_intg_chk_done(u_fsm.rom_intg_chk_done), + .rom_intg_chk_good(u_fsm.rom_intg_chk_good), + .fast_state(u_fsm.state_q), + .lc_dft_en_i(u_fsm.lc_dft_en_i), + .lc_hw_debug_en_i(u_fsm.lc_hw_debug_en_i), + .main_pd_ni(u_slow_fsm.main_pd_ni), + .rom_ctrl_done_i(u_fsm.rom_ctrl_done_i), + .rom_ctrl_good_i(u_fsm.rom_ctrl_good_i) + ); +`endif +endmodule diff --git a/src/pwrmgr/dv/sva/pwrmgr_clock_enables_sva_if.sv b/src/pwrmgr/dv/sva/pwrmgr_clock_enables_sva_if.sv new file mode 100644 index 000000000..355b52cef --- /dev/null +++ b/src/pwrmgr/dv/sva/pwrmgr_clock_enables_sva_if.sv @@ -0,0 +1,59 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// This has some assertions that check that the output clock enables correspond +// to the control CSR when transitioning into or out of the active state. In +// addition, the usb clock can change anytime when in the active state. +interface pwrmgr_clock_enables_sva_if ( + input logic clk_i, + input logic rst_ni, + input pwrmgr_pkg::fast_pwr_state_e fast_state, + input pwrmgr_pkg::slow_pwr_state_e slow_state, + // The synchronized control CSR bits. + input logic main_pd_ni, + input logic io_clk_en_i, + input logic core_clk_en_i, + input logic usb_clk_en_lp_i, + input logic usb_clk_en_active_i, + input logic usb_ip_clk_status_i, + // The output enables. + input logic main_pd_n, + input logic io_clk_en, + input logic core_clk_en, + input logic usb_clk_en +); + + bit disable_sva; + bit reset_or_disable; + + always_comb reset_or_disable = !rst_ni || disable_sva; + + sequence transitionUp_S; slow_state == pwrmgr_pkg::SlowPwrStateReqPwrUp; endsequence + + sequence transitionDown_S; slow_state == pwrmgr_pkg::SlowPwrStatePwrClampOn; endsequence + + bit fast_is_active; + always_comb fast_is_active = fast_state == pwrmgr_pkg::FastPwrStateActive; + + // This allows the usb enable to be slower since it also depends on usb clk_status. + sequence usbActiveTransition_S; + ##[0:7] !fast_is_active || usb_clk_en == (usb_clk_en_active_i | usb_ip_clk_status_i); + endsequence + + `ASSERT(CoreClkPwrUp_A, transitionUp_S |=> core_clk_en == 1'b1, clk_i, reset_or_disable) + `ASSERT(IoClkPwrUp_A, transitionUp_S |=> io_clk_en == 1'b1, clk_i, reset_or_disable) + `ASSERT(UsbClkPwrUp_A, transitionUp_S |=> usb_clk_en == usb_clk_en_active_i, clk_i, + reset_or_disable) + + // This deals with transitions while the fast fsm is active. + `ASSERT(UsbClkActive_A, fast_is_active && $changed(usb_clk_en_active_i) |=> usbActiveTransition_S, + clk_i, reset_or_disable) + + `ASSERT(CoreClkPwrDown_A, transitionDown_S |=> core_clk_en == (core_clk_en_i && main_pd_ni), + clk_i, reset_or_disable) + `ASSERT(IoClkPwrDown_A, transitionDown_S |=> io_clk_en == (io_clk_en_i && main_pd_ni), clk_i, + reset_or_disable) + `ASSERT(UsbClkPwrDown_A, transitionDown_S |=> usb_clk_en == (usb_clk_en_lp_i && main_pd_ni), + clk_i, reset_or_disable) +endinterface diff --git a/src/pwrmgr/dv/sva/pwrmgr_rstmgr_sva_if.core b/src/pwrmgr/dv/sva/pwrmgr_rstmgr_sva_if.core new file mode 100644 index 000000000..9083269e2 --- /dev/null +++ b/src/pwrmgr/dv/sva/pwrmgr_rstmgr_sva_if.core @@ -0,0 +1,19 @@ +CAPI=2: +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +name: "lowrisc:dv:pwrmgr_rstmgr_sva_if:0.1" +description: "PWRMGR to RSTMGR assertion interface." +filesets: + files_dv: + depend: + - lowrisc:ip_interfaces:pwrmgr_pkg + - lowrisc:prim:assert + files: + - pwrmgr_rstmgr_sva_if.sv + file_type: systemVerilogSource + +targets: + default: + filesets: + - files_dv diff --git a/src/pwrmgr/dv/sva/pwrmgr_rstmgr_sva_if.sv b/src/pwrmgr/dv/sva/pwrmgr_rstmgr_sva_if.sv new file mode 100644 index 000000000..1249991de --- /dev/null +++ b/src/pwrmgr/dv/sva/pwrmgr_rstmgr_sva_if.sv @@ -0,0 +1,49 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// This has some assertions that check the inputs from rstmgr react according to +// the pwrmgr outputs. The rstmgr inputs are generated by the base sequences, but +// these assertions will also be useful at full chip level. +interface pwrmgr_rstmgr_sva_if + import pwrmgr_pkg::*, pwrmgr_reg_pkg::*; +( + input logic clk_i, + input logic rst_ni, + input logic clk_slow_i, + input logic rst_slow_ni, + + // The inputs from pwrmgr. + input logic [PowerDomains-1:0] rst_lc_req, + input logic [PowerDomains-1:0] rst_sys_req, + + // The inputs from rstmgr. + input logic [PowerDomains-1:0] rst_lc_src_n, + input logic [PowerDomains-1:0] rst_sys_src_n +); + + // Number of cycles for the LC/SYS reset handshake. + localparam int MIN_LC_SYS_CYCLES = 0; + localparam int MAX_LC_SYS_CYCLES = 150; + `define LC_SYS_CYCLES ##[MIN_LC_SYS_CYCLES:MAX_LC_SYS_CYCLES] + + bit disable_sva; + bit reset_or_disable; + + always_comb reset_or_disable = !rst_slow_ni || disable_sva; + + // Lc and Sys handshake: pwrmgr rst_*_req causes rstmgr rst_*_src_n + for (genvar pd = 0; pd < PowerDomains; ++pd) begin : gen_assertions_per_power_domains + `ASSERT(LcHandshakeOn_A, rst_lc_req[pd] |-> `LC_SYS_CYCLES !rst_lc_req[pd] || !rst_lc_src_n[pd], + clk_i, reset_or_disable) + `ASSERT(LcHandshakeOff_A, $fell(rst_lc_req[pd]) + |-> `LC_SYS_CYCLES rst_lc_req[pd] || rst_lc_src_n[pd], clk_i, reset_or_disable) + `ASSERT(SysHandshakeOn_A, + rst_sys_req[pd] |-> `LC_SYS_CYCLES !rst_sys_req[pd] || !rst_sys_src_n[pd], clk_i, + reset_or_disable) + `ASSERT(SysHandshakeOff_A, + !rst_sys_req[pd] |-> `LC_SYS_CYCLES rst_sys_req[pd] || rst_sys_src_n[pd], clk_i, + reset_or_disable) + end : gen_assertions_per_power_domains + `undef LC_SYS_CYCLES +endinterface diff --git a/src/pwrmgr/dv/sva/pwrmgr_rstreqs_sva_if.sv b/src/pwrmgr/dv/sva/pwrmgr_rstreqs_sva_if.sv new file mode 100644 index 000000000..2da3043d2 --- /dev/null +++ b/src/pwrmgr/dv/sva/pwrmgr_rstreqs_sva_if.sv @@ -0,0 +1,102 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// This has some assertions that check the pwrmgr rstreqs and reset_cause output is set per the +// reset requests the pwrmgr receives or generates. +interface pwrmgr_rstreqs_sva_if + import pwrmgr_pkg::*, pwrmgr_reg_pkg::*; +( + input logic clk_i, + input logic rst_ni, + input logic clk_slow_i, + input logic rst_slow_ni, + + // Input causes resets. + input logic [ NumRstReqs-1:0] rstreqs_i, + input logic [ NumRstReqs-1:0] reset_en, + input logic sw_rst_req_i, + input logic main_rst_req_i, + input logic esc_rst_req_i, + input logic ndm_rst_req_i, + // outputs + input logic main_pd_n, + input reset_cause_e reset_cause, + input logic [HwResetWidth-1:0] rstreqs +); + + // output reset cycle with a clk enable disable + localparam int MIN_MAIN_RST_CYCLES = 0; + localparam int MAX_MAIN_RST_CYCLES = 400; + `define MAIN_RST_CYCLES ##[MIN_MAIN_RST_CYCLES:MAX_MAIN_RST_CYCLES] + + // The timing of the escalation reset is determined by the slow clock, but will not propagate if + // the non-slow clock is off. We use the regular clock and multiply the clock cycles times the + // clock ratio. + localparam int FAST_TO_SLOW_FREQ_RATIO = 120; + + localparam int MIN_ESC_RST_CYCLES = 0; + localparam int MAX_ESC_RST_CYCLES = 4 * FAST_TO_SLOW_FREQ_RATIO; + `define ESC_RST_CYCLES ##[MIN_ESC_RST_CYCLES:MAX_ESC_RST_CYCLES] + + bit disable_sva; + bit reset_or_disable; + + always_comb reset_or_disable = !rst_ni || !rst_slow_ni || disable_sva; + + // Reset ins to outs. + for (genvar rst = 0; rst < NumRstReqs; ++rst) begin : gen_hw_resets + `ASSERT(HwResetOn_A, + $rose( + rstreqs_i[rst] && reset_en[rst] + ) |-> `MAIN_RST_CYCLES rstreqs[rst] && reset_cause == HwReq, clk_slow_i, + reset_or_disable) + `ASSERT(HwResetOff_A, + $fell( + rstreqs_i[rst] && reset_en[rst] + ) |-> `MAIN_RST_CYCLES !rstreqs[rst] && reset_cause != HwReq, clk_slow_i, + reset_or_disable) + end + + // This is used to ignore main_rst_req_i (wired to rst_main_n) if it happens during low power, + // since as part of deep sleep rst_main_n will trigger and not because of a power glitch. + logic rst_main_n_ignored_for_main_pwr_rst; + always_ff @(posedge clk_slow_i or negedge rst_slow_ni) begin + if (!rst_slow_ni) begin + rst_main_n_ignored_for_main_pwr_rst <= 0; + end else if (!main_pd_n && reset_cause == LowPwrEntry) begin + rst_main_n_ignored_for_main_pwr_rst <= 1; + end else if (reset_cause != LowPwrEntry) begin + rst_main_n_ignored_for_main_pwr_rst <= 0; + end + end + + `ASSERT(MainPwrRstOn_A, + $rose( + main_rst_req_i && !rst_main_n_ignored_for_main_pwr_rst + ) |-> `MAIN_RST_CYCLES rstreqs[ResetMainPwrIdx], clk_slow_i, + reset_or_disable) + `ASSERT(MainPwrRstOff_A, + $fell( + main_rst_req_i + ) |-> `MAIN_RST_CYCLES !rstreqs[ResetMainPwrIdx], clk_slow_i, + reset_or_disable) + + // Signals in EscRstOn_A and EscRstOff_A are sampled with slow and fast clock. + // Since fast clock can be gated, use fast clock to evaluate cycle delay + // to avoid spurious failure. + `ASSERT(EscRstOn_A, + $rose( + esc_rst_req_i + ) |-> `ESC_RST_CYCLES rstreqs[ResetEscIdx], clk_i, reset_or_disable) + `ASSERT(EscRstOff_A, + $fell( + esc_rst_req_i + ) |-> `ESC_RST_CYCLES !rstreqs[ResetEscIdx], clk_i, reset_or_disable) + + // Software initiated resets do not affect rstreqs since rstmgr generates them. + `ASSERT(SwResetSetCause_A, + $rose(sw_rst_req_i) |-> MAIN_RST_CYCLES (reset_cause == HwReq), clk_i, + reset_or_disable) + +endinterface diff --git a/src/pwrmgr/dv/sva/pwrmgr_sec_cm_checker_assert.sv b/src/pwrmgr/dv/sva/pwrmgr_sec_cm_checker_assert.sv new file mode 100644 index 000000000..2ecefb64a --- /dev/null +++ b/src/pwrmgr/dv/sva/pwrmgr_sec_cm_checker_assert.sv @@ -0,0 +1,132 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// add description here TBD +module pwrmgr_sec_cm_checker_assert + import pwrmgr_reg_pkg::*; +( + input clk_i, + input rst_ni, + input clk_lc_i, + input rst_lc_ni, + input clk_esc_i, + input rst_esc_ni, + input rst_main_ni, + input clk_slow_i, + input rst_slow_ni, + input pwrmgr_pkg::pwr_rst_req_t pwr_rst_o, + input slow_fsm_invalid, + input fast_fsm_invalid, + input prim_mubi_pkg::mubi4_t rom_intg_chk_dis, + input prim_mubi_pkg::mubi4_t rom_intg_chk_done, + input prim_mubi_pkg::mubi4_t rom_intg_chk_good, + input pwrmgr_pkg::fast_pwr_state_e fast_state, + input lc_ctrl_pkg::lc_tx_t lc_dft_en_i, + input lc_ctrl_pkg::lc_tx_t lc_hw_debug_en_i, + input slow_esc_rst_req, + input slow_mp_rst_req, + input main_pd_ni, + input prim_mubi_pkg::mubi4_t rom_ctrl_done_i, + input prim_mubi_pkg::mubi4_t rom_ctrl_good_i +); + + bit disable_sva; + bit reset_or_disable; + bit esc_reset_or_disable; + bit slow_reset_or_disable; + + always_comb reset_or_disable = !rst_ni || disable_sva; + always_comb esc_reset_or_disable = !rst_esc_ni || disable_sva; + always_comb slow_reset_or_disable = !rst_slow_ni || disable_sva; + + // rom_intg_chk_dis only allows two states. + // Note that lc_dft_en_i and lc_hw_debug_en_i are already synchronized to clk_i at this + // hierarchy level. + `ASSERT(RomIntgChkDisTrue_A, + rom_intg_chk_dis == prim_mubi_pkg::MuBi4True |-> + (lc_dft_en_i == lc_ctrl_pkg::On && + lc_hw_debug_en_i == lc_ctrl_pkg::On), + clk_i, + reset_or_disable) + + `ASSERT(RomIntgChkDisFalse_A, + rom_intg_chk_dis == prim_mubi_pkg::MuBi4False |-> + (lc_dft_en_i !== lc_ctrl_pkg::On || + lc_hw_debug_en_i !== lc_ctrl_pkg::On), + clk_i, + reset_or_disable) + + // For any assertions involving state transitions, also allow cases where the fsm + // transitions to an invalid state, since we inject invalid encodings at random. + + // Check that unless rom_intg_chk_done is mubi true the fast state machine will + // stay in FastPwrStateRomCheckDone. + `ASSERT(RomBlockCheckGoodState_A, + rom_intg_chk_done != prim_mubi_pkg::MuBi4True && + fast_state == pwrmgr_pkg::FastPwrStateRomCheckDone |=> + fast_state == pwrmgr_pkg::FastPwrStateRomCheckDone || + fast_state == pwrmgr_pkg::FastPwrStateInvalid, + clk_i, + reset_or_disable) + + `ASSERT(RomAllowCheckGoodState_A, + rom_intg_chk_done == prim_mubi_pkg::MuBi4True && + fast_state == pwrmgr_pkg::FastPwrStateRomCheckDone |=> + fast_state == pwrmgr_pkg::FastPwrStateRomCheckGood || + fast_state == pwrmgr_pkg::FastPwrStateInvalid, + clk_i, + reset_or_disable) + + // Check that unless rom_intg_chk_good is mubi true or rom_intg_chk_dis is mubi true + // the fast state machine will stay in FastPwrStateRomCheckGood. + `ASSERT(RomBlockActiveState_A, + rom_intg_chk_good != prim_mubi_pkg::MuBi4True && + rom_intg_chk_dis != prim_mubi_pkg::MuBi4True && + fast_state == pwrmgr_pkg::FastPwrStateRomCheckGood |=> + fast_state == pwrmgr_pkg::FastPwrStateRomCheckGood || + fast_state == pwrmgr_pkg::FastPwrStateInvalid, + clk_i, + reset_or_disable) + + `ASSERT(RomAllowActiveState_A, + (rom_intg_chk_good == prim_mubi_pkg::MuBi4True || + rom_intg_chk_dis == prim_mubi_pkg::MuBi4True) && + fast_state == pwrmgr_pkg::FastPwrStateRomCheckGood |=> + fast_state == pwrmgr_pkg::FastPwrStateActive || + fast_state == pwrmgr_pkg::FastPwrStateInvalid, + clk_i, + reset_or_disable) + + // pwr_rst_o.rstreqs checker + // sec_cm_esc_rx_clk_bkgn_chk, sec_cm_esc_rx_clk_local_esc + // if esc_timeout, rstreqs[ResetEscIdx] should be asserted + `ASSERT(RstreqChkEsctimeout_A, + $rose( + slow_esc_rst_req + ) ##1 slow_esc_rst_req |-> ##[0:10] pwr_rst_o.rstreqs[ResetEscIdx], + clk_i, reset_or_disable) + +// sec_cm_fsm_terminal +// if slow_fsm or fast_fsm is invalid, +// both pwr_rst_o.rst_lc_req and pwr_rst_o.rst_sys_req should be set + + `ASSERT(RstreqChkFsmterm_A, + $rose(slow_fsm_invalid) || $rose(fast_fsm_invalid) + |-> ##[0:10] $rose(pwr_rst_o.rst_lc_req & pwr_rst_o.rst_sys_req), + clk_i, reset_or_disable) + +// sec_cm_ctrl_flow_global_esc +// if esc_rst_req is set, pwr_rst_o.rstreqs[ResetEscIdx] should be asserted. + `ASSERT(RstreqChkGlbesc_A, + $rose(slow_esc_rst_req) ##1 slow_esc_rst_req |-> + ##[0:10] (pwr_rst_o.rstreqs[ResetEscIdx] | !rst_esc_ni), + clk_i, reset_or_disable) + +// sec_cm_main_pd_rst_local_esc +// if power is up and rst_main_ni goes low, pwr_rst_o.rstreqs[ResetMainPwrIdx] should be asserted + `ASSERT(RstreqChkMainpd_A, + slow_mp_rst_req |-> ##[0:5] pwr_rst_o.rstreqs[ResetMainPwrIdx], clk_i, + reset_or_disable) + +endmodule // pwrmgr_sec_cm_checker_assert diff --git a/src/pwrmgr/dv/sva/pwrmgr_sva.core b/src/pwrmgr/dv/sva/pwrmgr_sva.core new file mode 100644 index 000000000..b5fbadc0c --- /dev/null +++ b/src/pwrmgr/dv/sva/pwrmgr_sva.core @@ -0,0 +1,43 @@ +CAPI=2: +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +name: "lowrisc:dv:pwrmgr_sva:0.1" +description: "PWRMGR assertion modules and bind file." +filesets: + files_dv: + depend: + - lowrisc:tlul:headers + - lowrisc:fpv:csr_assert_gen + - lowrisc:ip_interfaces:pwrmgr_pkg + - lowrisc:dv:clkmgr_pwrmgr_sva_if + - lowrisc:dv:pwrmgr_rstmgr_sva_if + files: + - pwrmgr_bind.sv + - pwrmgr_clock_enables_sva_if.sv + - pwrmgr_rstreqs_sva_if.sv + - pwrmgr_sec_cm_checker_assert.sv + file_type: systemVerilogSource + + files_formal: + depend: + - lowrisc:ip_interfaces:pwrmgr + +generate: + csr_assert_gen: + generator: csr_assert_gen + parameters: + spec: ../../data/pwrmgr.hjson + +targets: + default: &default_target + filesets: + - files_dv + generate: + - csr_assert_gen + formal: + <<: *default_target + filesets: + - files_formal + - files_dv + toplevel: pwrmgr diff --git a/src/pwrmgr/dv/tb.sv b/src/pwrmgr/dv/tb.sv new file mode 100644 index 000000000..ab83adf8c --- /dev/null +++ b/src/pwrmgr/dv/tb.sv @@ -0,0 +1,140 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +module tb; + // dep packages + import uvm_pkg::*; + import dv_utils_pkg::*; + import pwrmgr_env_pkg::*; + import pwrmgr_test_pkg::*; + + // macro includes + `include "uvm_macros.svh" + `include "dv_macros.svh" + + wire clk, rst_n; + wire clk_esc, rst_esc_n; + wire clk_lc, rst_lc_n; + wire clk_slow, rst_slow_n; + wire [NUM_MAX_INTERRUPTS-1:0] interrupts; + + // interfaces + clk_rst_if clk_rst_if ( + .clk (clk), + .rst_n(rst_n) + ); + clk_rst_if lc_clk_rst_if ( + .clk (clk_lc), + .rst_n(rst_lc_n) + ); + clk_rst_if esc_clk_rst_if ( + .clk (clk_esc), + .rst_n(rst_esc_n) + ); + clk_rst_if slow_clk_rst_if ( + .clk (clk_slow), + .rst_n(rst_slow_n) + ); + pins_if #(NUM_MAX_INTERRUPTS) intr_if (interrupts); + alert_esc_if esc_if ( + .clk (clk), + .rst_n(rst_n) + ); + tl_if tl_if ( + .clk (clk), + .rst_n(rst_n) + ); + + assign interrupts[0] = pwrmgr_if.intr_wakeup; + + pwrmgr_if pwrmgr_if ( + .clk, + .rst_n, + .clk_slow, + .rst_slow_n + ); + + `DV_ALERT_IF_CONNECT(clk_lc, rst_lc_n) + + // dut + pwrmgr dut ( + .clk_i (clk), + .rst_ni (rst_n), + .clk_slow_i (clk_slow), + .rst_slow_ni(rst_slow_n), + .rst_main_ni(pwrmgr_if.rst_main_n), + .clk_lc_i (clk_lc), + .rst_lc_ni (rst_lc_n), + .clk_esc_i (clk_esc), + .rst_esc_ni (rst_esc_n), + + .tl_i(tl_if.h2d), + .tl_o(tl_if.d2h), + + .alert_rx_i(alert_rx), + .alert_tx_o(alert_tx), + + .pwr_ast_i(pwrmgr_if.pwr_ast_rsp), + .pwr_ast_o(pwrmgr_if.pwr_ast_req), + + .pwr_rst_i(pwrmgr_if.pwr_rst_rsp), + .pwr_rst_o(pwrmgr_if.pwr_rst_req), + + .pwr_clk_i(pwrmgr_if.pwr_clk_rsp), + .pwr_clk_o(pwrmgr_if.pwr_clk_req), + + .pwr_otp_i(pwrmgr_if.pwr_otp_rsp), + .pwr_otp_o(pwrmgr_if.pwr_otp_req), + + .pwr_lc_i(pwrmgr_if.pwr_lc_rsp), + .pwr_lc_o(pwrmgr_if.pwr_lc_req), + + .pwr_flash_i(pwrmgr_if.pwr_flash), + .pwr_cpu_i (pwrmgr_if.pwr_cpu), + + .fetch_en_o(pwrmgr_if.fetch_en), + .wakeups_i (pwrmgr_if.wakeups_i), + .rstreqs_i (pwrmgr_if.rstreqs_i), + .ndmreset_req_i(pwrmgr_if.cpu_i.ndmreset_req), + + .lc_dft_en_i (pwrmgr_if.lc_dft_en), + .lc_hw_debug_en_i(pwrmgr_if.lc_hw_debug_en), + + .strap_o (pwrmgr_if.strap), + .low_power_o(pwrmgr_if.low_power), + + .rom_ctrl_i(pwrmgr_if.rom_ctrl), + + .sw_rst_req_i(pwrmgr_if.sw_rst_req_i), + + .esc_rst_tx_i(esc_if.esc_tx), + .esc_rst_rx_o(esc_if.esc_rx), + + .intr_wakeup_o(pwrmgr_if.intr_wakeup) + ); + + initial begin + // drive clk and rst_n from clk_if + clk_rst_if.set_active(); + esc_clk_rst_if.set_active(); + lc_clk_rst_if.set_active(); + slow_clk_rst_if.set_active(); + + uvm_config_db#(virtual clk_rst_if)::set(null, "*.env", "clk_rst_vif", clk_rst_if); + uvm_config_db#(virtual clk_rst_if)::set(null, "*.env", "esc_clk_rst_vif", esc_clk_rst_if); + uvm_config_db#(virtual clk_rst_if)::set(null, "*.env", "lc_clk_rst_vif", lc_clk_rst_if); + uvm_config_db#(virtual clk_rst_if)::set(null, "*.env", "slow_clk_rst_vif", slow_clk_rst_if); + uvm_config_db#(intr_vif)::set(null, "*.env", "intr_vif", intr_if); + uvm_config_db#(virtual alert_esc_if)::set(null, "*.env.m_esc_agent*", "vif", esc_if); + uvm_config_db#(virtual pwrmgr_if)::set(null, "*.env", "pwrmgr_vif", pwrmgr_if); + uvm_config_db#(virtual tl_if)::set(null, "*.env.m_tl_agent*", "vif", tl_if); + uvm_config_db#(virtual pwrmgr_clock_enables_sva_if)::set( + null, "*.env", "pwrmgr_clock_enables_sva_vif", dut.pwrmgr_clock_enables_sva_if); + uvm_config_db#(virtual pwrmgr_rstmgr_sva_if)::set(null, "*.env", "pwrmgr_rstmgr_sva_vif", + dut.pwrmgr_rstmgr_sva_if); + $timeformat(-12, 0, " ps", 12); + run_test(); + end // initial begin + +endmodule diff --git a/src/pwrmgr/dv/tests/pwrmgr_base_test.sv b/src/pwrmgr/dv/tests/pwrmgr_base_test.sv new file mode 100644 index 000000000..0432cfc12 --- /dev/null +++ b/src/pwrmgr/dv/tests/pwrmgr_base_test.sv @@ -0,0 +1,20 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +class pwrmgr_base_test extends cip_base_test #( + .CFG_T(pwrmgr_env_cfg), + .ENV_T(pwrmgr_env) +); + + `uvm_component_utils(pwrmgr_base_test) + `uvm_component_new + + // the base class dv_base_test creates the following instances: + // pwrmgr_env_cfg: cfg + // pwrmgr_env: env + + // the base class also looks up UVM_TEST_SEQ plusarg to create and run that seq in + // the run_phase; as such, nothing more needs to be done + +endclass : pwrmgr_base_test diff --git a/src/pwrmgr/dv/tests/pwrmgr_test.core b/src/pwrmgr/dv/tests/pwrmgr_test.core new file mode 100644 index 000000000..bf79e44e6 --- /dev/null +++ b/src/pwrmgr/dv/tests/pwrmgr_test.core @@ -0,0 +1,19 @@ +CAPI=2: +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +name: "lowrisc:dv:pwrmgr_test:0.1" +description: "PWRMGR DV UVM test" +filesets: + files_dv: + depend: + - lowrisc:dv:pwrmgr_env + files: + - pwrmgr_test_pkg.sv + - pwrmgr_base_test.sv: {is_include_file: true} + file_type: systemVerilogSource + +targets: + default: + filesets: + - files_dv diff --git a/src/pwrmgr/dv/tests/pwrmgr_test_pkg.sv b/src/pwrmgr/dv/tests/pwrmgr_test_pkg.sv new file mode 100644 index 000000000..afbd19415 --- /dev/null +++ b/src/pwrmgr/dv/tests/pwrmgr_test_pkg.sv @@ -0,0 +1,22 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +package pwrmgr_test_pkg; + // dep packages + import uvm_pkg::*; + import cip_base_pkg::*; + import pwrmgr_env_pkg::*; + + // macro includes + `include "uvm_macros.svh" + `include "dv_macros.svh" + + // local types + + // functions + + // package sources + `include "pwrmgr_base_test.sv" + +endpackage diff --git a/src/pwrmgr/lint/pwrmgr.vlt b/src/pwrmgr/lint/pwrmgr.vlt new file mode 100644 index 000000000..a38de163c --- /dev/null +++ b/src/pwrmgr/lint/pwrmgr.vlt @@ -0,0 +1,5 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// waiver file for Power Manager diff --git a/src/pwrmgr/lint/pwrmgr.waiver b/src/pwrmgr/lint/pwrmgr.waiver new file mode 100644 index 000000000..75aee6c3c --- /dev/null +++ b/src/pwrmgr/lint/pwrmgr.waiver @@ -0,0 +1,5 @@ +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +# +# waiver file for Power Manager diff --git a/src/pwrmgr/lint/pwrmgr_pkg.vlt b/src/pwrmgr/lint/pwrmgr_pkg.vlt new file mode 100644 index 000000000..a5949a211 --- /dev/null +++ b/src/pwrmgr/lint/pwrmgr_pkg.vlt @@ -0,0 +1,12 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// waiver file for the pwrmgr_pkg + +`verilator_config + +// Waive the SYMRSVDWORD warning in pwrmgr_reg_pkg: we have a field in +// the WAKE_INFO register called "abort", which means pwrmgr_reg_pkg +// defines a struct with that name, clashing with a C++ reserved word. +lint_off -rule SYMRSVDWORD -file "*/pwrmgr_reg_pkg.sv" -match "*common word: 'abort'" diff --git a/src/pwrmgr/pwrmgr.core.tpl b/src/pwrmgr/pwrmgr.core.tpl new file mode 100644 index 000000000..be5aa3740 --- /dev/null +++ b/src/pwrmgr/pwrmgr.core.tpl @@ -0,0 +1,66 @@ +CAPI=2: +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +name: ${instance_vlnv("lowrisc:ip:pwrmgr:0.1")} +description: "Power manager RTL" +virtual: + - lowrisc:ip_interfaces:pwrmgr + +filesets: + files_rtl: + depend: + - ${instance_vlnv("lowrisc:ip:pwrmgr_pkg:0.1")} + - ${instance_vlnv("lowrisc:ip:pwrmgr_reg:0.1")} + - lowrisc:ip:pwrmgr_component + file_type: systemVerilogSource + + files_verilator_waiver: + depend: + # common waivers + - lowrisc:lint:common + - lowrisc:lint:comportable + files: + - lint/pwrmgr.vlt + file_type: vlt + + files_ascentlint_waiver: + depend: + # common waivers + - lowrisc:lint:common + - lowrisc:lint:comportable + files: + - lint/pwrmgr.waiver + file_type: waiver + + files_veriblelint_waiver: + depend: + # common waivers + - lowrisc:lint:common + - lowrisc:lint:comportable + +parameters: + SYNTHESIS: + datatype: bool + paramtype: vlogdefine + + +targets: + default: &default_target + filesets: + - tool_verilator ? (files_verilator_waiver) + - tool_ascentlint ? (files_ascentlint_waiver) + - tool_veriblelint ? (files_veriblelint_waiver) + - files_rtl + toplevel: pwrmgr + + lint: + <<: *default_target + default_tool: verilator + parameters: + - SYNTHESIS=true + tools: + verilator: + mode: lint-only + verilator_options: + - "-Wall" diff --git a/src/pwrmgr/pwrmgr_components.core b/src/pwrmgr/pwrmgr_components.core new file mode 100644 index 000000000..bf144fe1c --- /dev/null +++ b/src/pwrmgr/pwrmgr_components.core @@ -0,0 +1,80 @@ +CAPI=2: +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +name: "lowrisc:ip:pwrmgr_component:0.1" +description: "Power manager RTL" + +filesets: + files_rtl: + depend: + - lowrisc:ip:tlul + - lowrisc:prim:esc + - lowrisc:prim:lc_sync + - lowrisc:prim:lc_sender + - lowrisc:prim:all + - lowrisc:ip:rom_ctrl_pkg + - lowrisc:ip:lc_ctrl_pkg + - lowrisc:prim:sparse_fsm + - lowrisc:prim:mubi + - lowrisc:prim:clock_buf + - lowrisc:prim:measure + - lowrisc:ip_interfaces:alert_handler_reg + - lowrisc:ip_interfaces:pwrmgr_pkg + files: + - rtl/pwrmgr_cdc.sv + - rtl/pwrmgr_slow_fsm.sv + - rtl/pwrmgr_fsm.sv + - rtl/pwrmgr_wake_info.sv + - rtl/pwrmgr.sv + file_type: systemVerilogSource + + files_verilator_waiver: + depend: + # common waivers + - lowrisc:lint:common + - lowrisc:lint:comportable + files: + - lint/pwrmgr.vlt + file_type: vlt + + files_ascentlint_waiver: + depend: + # common waivers + - lowrisc:lint:common + - lowrisc:lint:comportable + files: + - lint/pwrmgr.waiver + file_type: waiver + + files_veriblelint_waiver: + depend: + # common waivers + - lowrisc:lint:common + - lowrisc:lint:comportable + +parameters: + SYNTHESIS: + datatype: bool + paramtype: vlogdefine + + +targets: + default: &default_target + filesets: + - tool_verilator ? (files_verilator_waiver) + - tool_ascentlint ? (files_ascentlint_waiver) + - tool_veriblelint ? (files_veriblelint_waiver) + - files_rtl + toplevel: pwrmgr + + lint: + <<: *default_target + default_tool: verilator + parameters: + - SYNTHESIS=true + tools: + verilator: + mode: lint-only + verilator_options: + - "-Wall" diff --git a/src/pwrmgr/pwrmgr_pkg.core.tpl b/src/pwrmgr/pwrmgr_pkg.core.tpl new file mode 100644 index 000000000..42012fa81 --- /dev/null +++ b/src/pwrmgr/pwrmgr_pkg.core.tpl @@ -0,0 +1,31 @@ +CAPI=2: +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +name: ${instance_vlnv("lowrisc:ip:pwrmgr_pkg:0.1")} +description: "Power manager package" +virtual: + - lowrisc:ip_interfaces:pwrmgr_pkg + +filesets: + files_rtl: + depend: + - ${instance_vlnv("lowrisc:ip:pwrmgr_reg")} + files: + - rtl/pwrmgr_pkg.sv + file_type: systemVerilogSource + + files_verilator_waiver: + depend: + # common waivers + - lowrisc:lint:common + - lowrisc:lint:comportable + files: + - lint/pwrmgr_pkg.vlt + file_type: vlt + +targets: + default: + filesets: + - tool_verilator ? (files_verilator_waiver) + - files_rtl diff --git a/src/pwrmgr/pwrmgr_reg.core.tpl b/src/pwrmgr/pwrmgr_reg.core.tpl new file mode 100644 index 000000000..886a9c9fc --- /dev/null +++ b/src/pwrmgr/pwrmgr_reg.core.tpl @@ -0,0 +1,24 @@ +CAPI=2: +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +name: ${instance_vlnv("lowrisc:ip:pwrmgr_reg:0.1")} +description: "Power manager registers" +virtual: + - lowrisc:ip_interfaces:pwrmgr_reg + +filesets: + files_rtl: + depend: + - lowrisc:tlul:headers + - lowrisc:ip:tlul + - lowrisc:prim:subreg + files: + - rtl/pwrmgr_reg_pkg.sv + - rtl/pwrmgr_reg_top.sv + file_type: systemVerilogSource + +targets: + default: + filesets: + - files_rtl diff --git a/src/pwrmgr/rtl/pwrmgr.sv b/src/pwrmgr/rtl/pwrmgr.sv new file mode 100644 index 000000000..fb998d719 --- /dev/null +++ b/src/pwrmgr/rtl/pwrmgr.sv @@ -0,0 +1,737 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Power Manager +// + +`include "prim_assert.sv" + +module pwrmgr + import pwrmgr_pkg::*; + import pwrmgr_reg_pkg::*; +#( + parameter logic [NumAlerts-1:0] AlertAsyncOn = {NumAlerts{1'b1}} +) ( + // Clocks and resets + input clk_slow_i, + input clk_i, + input rst_slow_ni, + input rst_ni, + input rst_main_ni, + input clk_lc_i, + input rst_lc_ni, + input clk_esc_i, + input rst_esc_ni, + + // Bus Interface + input tlul_pkg::tl_h2d_t tl_i, + output tlul_pkg::tl_d2h_t tl_o, + + // Alerts + input prim_alert_pkg::alert_rx_t [NumAlerts-1:0] alert_rx_i, + output prim_alert_pkg::alert_tx_t [NumAlerts-1:0] alert_tx_o, + + // AST interface + input pwr_ast_rsp_t pwr_ast_i, + output pwr_ast_req_t pwr_ast_o, + + // rstmgr interface + input pwr_rst_rsp_t pwr_rst_i, + output pwr_rst_req_t pwr_rst_o, + + // clkmgr interface + output pwr_clk_req_t pwr_clk_o, + input pwr_clk_rsp_t pwr_clk_i, + + // otp interface + input pwr_otp_rsp_t pwr_otp_i, + output pwr_otp_req_t pwr_otp_o, + + // life cycle interface + input pwr_lc_rsp_t pwr_lc_i, + output pwr_lc_req_t pwr_lc_o, + + // flash interface + input pwr_flash_t pwr_flash_i, + + // processor interface + input pwr_cpu_t pwr_cpu_i, + // SEC_CM: LC_CTRL.INTERSIG.MUBI + output lc_ctrl_pkg::lc_tx_t fetch_en_o, + input lc_ctrl_pkg::lc_tx_t lc_hw_debug_en_i, + input lc_ctrl_pkg::lc_tx_t lc_dft_en_i, + + // peripherals wakeup and reset requests + input [NumWkups-1:0] wakeups_i, + input [NumRstReqs-1:0] rstreqs_i, + + // cpu related inputs + input ndmreset_req_i, + + // pinmux and other peripherals + output logic strap_o, + output logic low_power_o, + + // rom_ctrl interface + // SEC_CM: ROM_CTRL.INTERSIG.MUBI + input rom_ctrl_pkg::pwrmgr_data_t rom_ctrl_i, + + // software issued reset request + // SEC_CM: RSTMGR.INTERSIG.MUBI + input prim_mubi_pkg::mubi4_t sw_rst_req_i, + + // escalation interface + input prim_esc_pkg::esc_tx_t esc_rst_tx_i, + output prim_esc_pkg::esc_rx_t esc_rst_rx_o, + + output intr_wakeup_o + +); + //////////////////////////////////////////////////// + // Input handling // + //////////////////////////////////////////////////// + + logic ndmreset_req_q; + logic ndm_req_valid; + + prim_flop_2sync #( + .Width(1), + .ResetValue('0) + ) u_ndm_sync ( + .clk_i, + .rst_ni, + .d_i(ndmreset_req_i), + .q_o(ndmreset_req_q) + ); + + assign ndm_req_valid = ndmreset_req_q; + + //////////////////////////// + /// escalation detections + //////////////////////////// + + logic clk_lc; + logic rst_lc_n; + assign clk_lc = clk_lc_i; + assign rst_lc_n = rst_lc_ni; + + logic clk_esc; + logic rst_esc_n; + prim_clock_buf #( + .NoFpgaBuf(1'b1) + ) u_esc_clk_buf ( + .clk_i(clk_esc_i), + .clk_o(clk_esc) + ); + + prim_clock_buf #( + .NoFpgaBuf(1'b1) + ) u_esc_rst_buf ( + .clk_i(rst_esc_ni), + .clk_o(rst_esc_n) + ); + + logic esc_rst_req_d, esc_rst_req_q; + prim_esc_receiver #( + .N_ESC_SEV (alert_handler_reg_pkg::N_ESC_SEV), + .PING_CNT_DW (alert_handler_reg_pkg::PING_CNT_DW) + ) u_esc_rx ( + .clk_i(clk_esc), + .rst_ni(rst_esc_n), + .esc_req_o(esc_rst_req_d), + .esc_rx_o(esc_rst_rx_o), + .esc_tx_i(esc_rst_tx_i) + ); + + // These assertions use formal or simulation to prove that once esc_rst_req is latched, we expect + // to see the lc reset requests in pwr_rst_o. The one exception is when escalation requests are + // cancelled while the CPU fetch is disabled, meaning the fast fsm is inactive. +`ifdef SIMULATION + // In simulation mode, the prim_cdc_rand_delay module inserts a random one cycle delay to the + // two flop synchronizers. There are two CDCs in the path from escalation reset to the fast fsm + // receiving it, one to the slow clock, and one back to the fast one. And there are additional + // cycles in the fast fsm to generate outputs. However, esc_rst_req_q can be dropped due to + // rst_lc_n. + `ASSERT(PwrmgrSecCmEscToSlowResetReq_A, + esc_rst_req_q |-> ##[1:5] !esc_rst_req_q || slow_peri_reqs_masked.rstreqs[ResetEscIdx], + clk_slow_i, !rst_slow_ni) + `ASSERT(PwrmgrSecCmFsmEscToResetReq_A, + slow_peri_reqs_masked.rstreqs[ResetEscIdx] |-> ##[1:4] u_fsm.reset_reqs_i[ResetEscIdx], + clk_i, !rst_ni) +`else + `ASSERT(PwrmgrSecCmEscToSlowResetReq_A, + esc_rst_req_d |-> ##[2:3] ( + (!esc_rst_req_d && lc_ctrl_pkg::lc_tx_test_false_loose(fetch_en_o)) || + slow_peri_reqs_masked.rstreqs[ResetEscIdx] + ), clk_slow_i, !rst_slow_ni) + `ASSERT(PwrmgrSlowResetReqToFsmResetReq_A, + slow_peri_reqs_masked.rstreqs[ResetEscIdx] |-> ##1 u_fsm.reset_reqs_i[ResetEscIdx], + clk_i, !rst_ni) +`endif + + `ASSERT(PwrmgrSecCmEscToLCReset_A, u_fsm.reset_reqs_i[ResetEscIdx] && + u_fsm.state_q == FastPwrStateActive |-> ##4 pwr_rst_o.rst_lc_req == 2'b11, + clk_i, !rst_ni) + + always_ff @(posedge clk_lc or negedge rst_lc_n) begin + if (!rst_lc_n) begin + esc_rst_req_q <= '0; + end else if (esc_rst_req_d) begin + // once latched, do not clear until reset + esc_rst_req_q <= 1'b1; + end + end + + localparam int EscTimeOutCnt = 128; + logic esc_timeout, esc_timeout_lc_d, esc_timeout_lc_q; + // SEC_CM: ESC_RX.CLK.BKGN_CHK, ESC_RX.CLK.LOCAL_ESC + prim_clock_timeout #( + .TimeOutCnt(EscTimeOutCnt) + ) u_esc_timeout ( + .clk_chk_i(clk_esc), + .rst_chk_ni(rst_esc_n), + .clk_i, + .rst_ni, + // if any ip clock enable is turned on, then the escalation + // clocks are also enabled. + .en_i(|pwr_clk_o), + .timeout_o(esc_timeout) + ); + + prim_flop_2sync #( + .Width(1), + .ResetValue('0) + ) u_esc_timeout_sync ( + .clk_i(clk_lc), + .rst_ni(rst_lc_n), + .d_i(esc_timeout), + .q_o(esc_timeout_lc_d) + ); + + always_ff @(posedge clk_lc or negedge rst_lc_n) begin + if (!rst_lc_n) begin + esc_timeout_lc_q <= '0; + end else if (esc_timeout_lc_d) begin + // once latched, do not clear until reset + esc_timeout_lc_q <= 1'b1; + end + end + + + //////////////////////////// + /// async declarations + //////////////////////////// + pwr_peri_t peri_reqs_raw; + logic slow_rst_req; + + assign peri_reqs_raw.wakeups = wakeups_i; + assign peri_reqs_raw.rstreqs[NumRstReqs-1:0] = rstreqs_i; + assign peri_reqs_raw.rstreqs[ResetMainPwrIdx] = slow_rst_req; + // SEC_CM: ESC_RX.CLK.LOCAL_ESC, CTRL_FLOW.GLOBAL_ESC + assign peri_reqs_raw.rstreqs[ResetEscIdx] = esc_rst_req_q | esc_timeout_lc_q; + assign peri_reqs_raw.rstreqs[ResetNdmIdx] = ndm_req_valid; + + //////////////////////////// + /// Software reset request + //////////////////////////// + logic sw_rst_req; + prim_buf #( + .Width(1) + ) u_sw_req_buf ( + .in_i(prim_mubi_pkg::mubi4_test_true_strict(sw_rst_req_i)), + .out_o(sw_rst_req) + ); + + assign peri_reqs_raw.rstreqs[ResetSwReqIdx] = sw_rst_req; + + //////////////////////////// + /// clk_i domain declarations + //////////////////////////// + + pwrmgr_reg2hw_t reg2hw; + pwrmgr_hw2reg_t hw2reg; + pwr_peri_t peri_reqs_masked; + + logic req_pwrup; + logic ack_pwrup; + logic req_pwrdn; + logic ack_pwrdn; + logic fsm_invalid; + logic clr_slow_req; + logic usb_ip_clk_en; + logic usb_ip_clk_status; + pwrup_cause_e pwrup_cause; + + logic low_power_fall_through; + logic low_power_abort; + + pwr_flash_t flash_rsp; + pwr_otp_rsp_t otp_rsp; + + prim_mubi_pkg::mubi4_t rom_ctrl_done; + prim_mubi_pkg::mubi4_t rom_ctrl_good; + + logic core_sleeping; + + //////////////////////////// + /// clk_slow_i domain declarations + //////////////////////////// + + // Captured signals + // These signals, though on clk_i domain, are safe for clk_slow_i to use + logic [NumWkups-1:0] slow_wakeup_en; + logic [NumRstReqs-1:0] slow_reset_en; + + pwr_ast_rsp_t slow_ast; + pwr_peri_t slow_peri_reqs, slow_peri_reqs_masked; + + pwrup_cause_e slow_pwrup_cause; + logic slow_pwrup_cause_toggle; + logic slow_req_pwrup; + logic slow_ack_pwrup; + logic slow_req_pwrdn; + logic slow_ack_pwrdn; + logic slow_fsm_invalid; + logic slow_main_pd_n; + logic slow_io_clk_en; + logic slow_core_clk_en; + logic slow_usb_clk_en_lp; + logic slow_usb_clk_en_active; + logic slow_clr_req; + logic slow_usb_ip_clk_en; + logic slow_usb_ip_clk_status; + + + + //////////////////////////// + /// Register module + //////////////////////////// + logic [NumAlerts-1:0] alert_test, alerts; + logic low_power_hint; + logic lowpwr_cfg_wen; + logic clr_hint; + logic wkup; + logic clr_cfg_lock; + logic reg_intg_err; + + // SEC_CM: BUS.INTEGRITY + // SEC_CM: CTRL.CONFIG.REGWEN, WAKEUP.CONFIG.REGWEN, RESET.CONFIG.REGWEN + pwrmgr_reg_top u_reg ( + .clk_i, + .rst_ni, + .clk_lc_i (clk_lc ), + .rst_lc_ni (rst_lc_n), + .tl_i, + .tl_o, + .reg2hw, + .hw2reg, + .intg_err_o (reg_intg_err) + ); + + // whenever low power entry begins, wipe the hint + assign hw2reg.control.low_power_hint.d = 1'b0; + assign hw2reg.control.low_power_hint.de = clr_hint; + + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + lowpwr_cfg_wen <= 1'b1; + end else if (!lowpwr_cfg_wen && (clr_cfg_lock || wkup)) begin + lowpwr_cfg_wen <= 1'b1; + end else if (low_power_hint) begin + lowpwr_cfg_wen <= 1'b0; + end + end + + assign hw2reg.ctrl_cfg_regwen.d = lowpwr_cfg_wen; + + assign hw2reg.fault_status.reg_intg_err.de = reg_intg_err; + assign hw2reg.fault_status.reg_intg_err.d = 1'b1; + assign hw2reg.fault_status.esc_timeout.de = esc_timeout_lc_q; + assign hw2reg.fault_status.esc_timeout.d = 1'b1; + + // The main power domain glitch automatically causes a reset, so regsitering + // an alert is functionally pointless. However, if an attacker somehow manages/ + // to silence the reset, this gives us one potential back-up path through alert_handler. + // Allow capture of main_pd fault status whenever the system is live. + assign hw2reg.fault_status.main_pd_glitch.de = pwr_clk_o.main_ip_clk_en; + assign hw2reg.fault_status.main_pd_glitch.d = peri_reqs_masked.rstreqs[ResetMainPwrIdx] | + reg2hw.fault_status.main_pd_glitch.q; + + `ASSERT(GlitchStatusPersist_A, $rose(reg2hw.fault_status.main_pd_glitch.q) |-> + reg2hw.fault_status.main_pd_glitch.q until !rst_lc_ni) + + //////////////////////////// + /// alerts + //////////////////////////// + + // the logic below assumes there is only one alert, so make an + // explicit assertion check for it. + `ASSERT_INIT(AlertNumCheck_A, NumAlerts == 1) + + assign alert_test = { + reg2hw.alert_test.q & + reg2hw.alert_test.qe + }; + + assign alerts[0] = reg2hw.fault_status.reg_intg_err.q | + reg2hw.fault_status.esc_timeout.q | + reg2hw.fault_status.main_pd_glitch.q; + + for (genvar i = 0; i < NumAlerts; i++) begin : gen_alert_tx + prim_alert_sender #( + .AsyncOn(AlertAsyncOn[i]), + .IsFatal(1'b1) + ) u_prim_alert_sender ( + .clk_i ( clk_lc ), + .rst_ni ( rst_lc_n ), + .alert_test_i ( alert_test[i] ), + .alert_req_i ( alerts[i] ), + .alert_ack_o ( ), + .alert_state_o ( ), + .alert_rx_i ( alert_rx_i[i] ), + .alert_tx_o ( alert_tx_o[i] ) + ); + end + + //////////////////////////// + /// cdc handling + //////////////////////////// + + pwrmgr_cdc u_cdc ( + .clk_i, + .rst_ni, + .clk_slow_i, + .rst_slow_ni, + + // slow domain signals + .slow_req_pwrup_i(slow_req_pwrup), + .slow_ack_pwrdn_i(slow_ack_pwrdn), + .slow_fsm_invalid_i(slow_fsm_invalid), + .slow_pwrup_cause_toggle_i(slow_pwrup_cause_toggle), + .slow_pwrup_cause_i(slow_pwrup_cause), + .slow_wakeup_en_o(slow_wakeup_en), + .slow_reset_en_o(slow_reset_en), + .slow_main_pd_no(slow_main_pd_n), + .slow_io_clk_en_o(slow_io_clk_en), + .slow_core_clk_en_o(slow_core_clk_en), + .slow_usb_clk_en_lp_o(slow_usb_clk_en_lp), + .slow_usb_clk_en_active_o(slow_usb_clk_en_active), + .slow_req_pwrdn_o(slow_req_pwrdn), + .slow_ack_pwrup_o(slow_ack_pwrup), + .slow_ast_o(slow_ast), + .slow_peri_reqs_o(slow_peri_reqs), + .slow_peri_reqs_masked_i(slow_peri_reqs_masked), + .slow_clr_req_o(slow_clr_req), + .slow_usb_ip_clk_en_i(slow_usb_ip_clk_en), + .slow_usb_ip_clk_status_o(slow_usb_ip_clk_status), + + // fast domain signals + .req_pwrdn_i(req_pwrdn), + .ack_pwrup_i(ack_pwrup), + .cfg_cdc_sync_i(reg2hw.cfg_cdc_sync.qe & reg2hw.cfg_cdc_sync.q), + .cdc_sync_done_o(hw2reg.cfg_cdc_sync.de), + .wakeup_en_i(reg2hw.wakeup_en), + .reset_en_i(reg2hw.reset_en), + .main_pd_ni(reg2hw.control.main_pd_n.q), + .io_clk_en_i(reg2hw.control.io_clk_en.q), + .core_clk_en_i(reg2hw.control.core_clk_en.q), + .usb_clk_en_lp_i(reg2hw.control.usb_clk_en_lp.q), + .usb_clk_en_active_i(reg2hw.control.usb_clk_en_active.q), + .ack_pwrdn_o(ack_pwrdn), + .fsm_invalid_o(fsm_invalid), + .req_pwrup_o(req_pwrup), + .pwrup_cause_o(pwrup_cause), + .peri_reqs_o(peri_reqs_masked), + .clr_slow_req_i(clr_slow_req), + .usb_ip_clk_en_o(usb_ip_clk_en), + .usb_ip_clk_status_i(usb_ip_clk_status), + + // AST signals + .ast_i(pwr_ast_i), + + // peripheral signals + .peri_i(peri_reqs_raw), + + // flash handshake + .flash_i(pwr_flash_i), + .flash_o(flash_rsp), + + // OTP signals + .otp_i(pwr_otp_i), + .otp_o(otp_rsp), + + // rom_ctrl signals + .rom_ctrl_done_i(rom_ctrl_i.done), + .rom_ctrl_done_o(rom_ctrl_done), + + // core sleeping + .core_sleeping_i(pwr_cpu_i.core_sleeping), + .core_sleeping_o(core_sleeping) + + ); + // rom_ctrl_i.good is not synchronized as it acts as a "payload" signal + // to "done". Good is only observed if "done" is high. + assign rom_ctrl_good = rom_ctrl_i.good; + assign hw2reg.cfg_cdc_sync.d = 1'b0; + + //////////////////////////// + /// Wakup and reset capture + //////////////////////////// + + // reset and wakeup requests are captured into the slow clock domain and then + // fanned out to other domains as necessary. This ensures there is not a huge + // time gap between when the slow clk domain sees the signal vs when the fast + // clock domains see it. This creates redundant syncing but keeps the time + // scale approximately the same across all domains. + // + // This also implies that these signals must be at least 1 clk_slow pulse long + // + // Since resets are not latched inside pwrmgr, there exists a corner case where + // non-always-on reset requests may get wiped out by a graceful low power entry + // It's not clear if this is really an issue at the moment, but something to keep + // in mind if future changes are needed. + // + // Latching the reset requests is not difficult, but the bigger question is who + // should clear it and when that should happen. If the clearing does not work + // correctly, it is possible for the device to end up in a permanent reset loop, + // and that would be very undesirable. + + assign slow_peri_reqs_masked.wakeups = slow_peri_reqs.wakeups & slow_wakeup_en; + // msb is software request + // the internal requests include escalation and internal requests + // the lsbs are the software enabled peripheral requests. + assign slow_peri_reqs_masked.rstreqs = slow_peri_reqs.rstreqs & + {{NumSwRstReq{1'b1}}, + {NumDebugRstReqs{1'b1}}, + {NumIntRstReqs{1'b1}}, + slow_reset_en}; + + for (genvar i = 0; i < NumWkups; i++) begin : gen_wakeup_status + assign hw2reg.wake_status[i].de = 1'b1; + assign hw2reg.wake_status[i].d = peri_reqs_masked.wakeups[i]; + end + + for (genvar i = 0; i < NumRstReqs; i++) begin : gen_reset_status + assign hw2reg.reset_status[i].de = 1'b1; + assign hw2reg.reset_status[i].d = peri_reqs_masked.rstreqs[i]; + end + + assign hw2reg.escalate_reset_status.de = 1'b1; + assign hw2reg.escalate_reset_status.d = peri_reqs_masked.rstreqs[NumRstReqs]; + + + //////////////////////////// + /// clk_slow FSM + //////////////////////////// + + pwrmgr_slow_fsm u_slow_fsm ( + .clk_i (clk_slow_i), + .rst_ni (rst_slow_ni), + .rst_main_ni (rst_main_ni), + .wakeup_i (|slow_peri_reqs_masked.wakeups), + .reset_req_i (|slow_peri_reqs_masked.rstreqs), + .ast_i (slow_ast), + .req_pwrup_o (slow_req_pwrup), + .pwrup_cause_o (slow_pwrup_cause), + .pwrup_cause_toggle_o (slow_pwrup_cause_toggle), + .ack_pwrup_i (slow_ack_pwrup), + .req_pwrdn_i (slow_req_pwrdn), + .ack_pwrdn_o (slow_ack_pwrdn), + .rst_req_o (slow_rst_req), + .fsm_invalid_o (slow_fsm_invalid), + .clr_req_i (slow_clr_req), + .usb_ip_clk_en_o (slow_usb_ip_clk_en), + .usb_ip_clk_status_i (slow_usb_ip_clk_status), + + .main_pd_ni (slow_main_pd_n), + .io_clk_en_i (slow_io_clk_en), + .core_clk_en_i (slow_core_clk_en), + .usb_clk_en_lp_i (slow_usb_clk_en_lp), + .usb_clk_en_active_i (slow_usb_clk_en_active), + + // outputs to AST - These are on the slow clock domain + // TBD - need to check this with partners + .ast_o (pwr_ast_o) + ); + + lc_ctrl_pkg::lc_tx_t lc_dft_en; + prim_lc_sync u_prim_lc_sync_dft_en ( + .clk_i, + .rst_ni, + .lc_en_i(lc_dft_en_i), + .lc_en_o({lc_dft_en}) + ); + + lc_ctrl_pkg::lc_tx_t lc_hw_debug_en; + prim_lc_sync u_prim_lc_sync_hw_debug_en ( + .clk_i, + .rst_ni, + .lc_en_i(lc_hw_debug_en_i), + .lc_en_o({lc_hw_debug_en}) + ); + + //////////////////////////// + /// clk FSM + //////////////////////////// + + assign low_power_hint = reg2hw.control.low_power_hint.q == LowPower; + + pwrmgr_fsm u_fsm ( + .clk_i, + .rst_ni, + .clk_slow_i, + .rst_slow_ni, + + // interface with slow_fsm + .req_pwrup_i (req_pwrup), + .pwrup_cause_i (pwrup_cause), // por, wake or reset request + .ack_pwrup_o (ack_pwrup), + .req_pwrdn_o (req_pwrdn), + .ack_pwrdn_i (ack_pwrdn), + .low_power_entry_i (core_sleeping & low_power_hint), + .reset_reqs_i (peri_reqs_masked.rstreqs), + .fsm_invalid_i (fsm_invalid), + .clr_slow_req_o (clr_slow_req), + .usb_ip_clk_en_i (usb_ip_clk_en), + .usb_ip_clk_status_o (usb_ip_clk_status), + + // cfg + .main_pd_ni (reg2hw.control.main_pd_n.q), + + // consumed in pwrmgr + .wkup_o (wkup), + .clr_cfg_lock_o (clr_cfg_lock), + .fall_through_o (low_power_fall_through), + .abort_o (low_power_abort), + .clr_hint_o (clr_hint), + + // rstmgr + .pwr_rst_o (pwr_rst_o), + .pwr_rst_i (pwr_rst_i), + + // clkmgr + .ips_clk_en_o (pwr_clk_o), + .clk_en_status_i (pwr_clk_i), + + // otp + .otp_init_o (pwr_otp_o.otp_init), + .otp_done_i (otp_rsp.otp_done), + .otp_idle_i (otp_rsp.otp_idle), + + // lc + .lc_init_o (pwr_lc_o.lc_init), + .lc_done_i (pwr_lc_i.lc_done), + .lc_idle_i (pwr_lc_i.lc_idle), + .lc_dft_en_i (lc_dft_en), + .lc_hw_debug_en_i (lc_hw_debug_en), + + // flash + .flash_idle_i (flash_rsp.flash_idle), + + // rom_ctrl + .rom_ctrl_done_i (rom_ctrl_done), + .rom_ctrl_good_i (rom_ctrl_good), + + // processing element + .fetch_en_o, + + // pinmux and other peripherals + .strap_o, + .low_power_o + ); + + //////////////////////////// + /// Wakeup Info Capture + //////////////////////////// + + logic wake_info_wen; + logic [TotalWakeWidth-1:0] wake_info_data; + + assign wake_info_wen = reg2hw.wake_info.abort.qe | + reg2hw.wake_info.fall_through.qe | + reg2hw.wake_info.reasons.qe; + + assign wake_info_data = {reg2hw.wake_info.abort.q, + reg2hw.wake_info.fall_through.q, + reg2hw.wake_info.reasons.q}; + + pwrmgr_wake_info i_wake_info ( + .clk_i, + .rst_ni, + .wr_i (wake_info_wen), + .data_i (wake_info_data), + .start_capture_i (low_power_o), + .record_dis_i (reg2hw.wake_info_capture_dis.q), + .wakeups_i (peri_reqs_masked.wakeups), + .fall_through_i (low_power_fall_through), + .abort_i (low_power_abort), + .info_o (hw2reg.wake_info) + ); + + //////////////////////////// + /// Interrupts + //////////////////////////// + + // This interrupt is asserted whenever the fast FSM transitions + // into active state. However, it does not assert during POR + prim_intr_hw #(.Width(1)) intr_wakeup ( + .clk_i, + .rst_ni, + .event_intr_i (wkup), + .reg2hw_intr_enable_q_i (reg2hw.intr_enable.q), + .reg2hw_intr_test_q_i (reg2hw.intr_test.q), + .reg2hw_intr_test_qe_i (reg2hw.intr_test.qe), + .reg2hw_intr_state_q_i (reg2hw.intr_state.q), + .hw2reg_intr_state_de_o (hw2reg.intr_state.de), + .hw2reg_intr_state_d_o (hw2reg.intr_state.d), + .intr_o (intr_wakeup_o) + ); + + + //////////////////////////// + /// Assertions + //////////////////////////// + + `ASSERT_KNOWN(TlDValidKnownO_A, tl_o.d_valid ) + `ASSERT_KNOWN(TlAReadyKnownO_A, tl_o.a_ready ) + `ASSERT_KNOWN(AlertsKnownO_A, alert_tx_o ) + `ASSERT_KNOWN(AstKnownO_A, pwr_ast_o ) + `ASSERT_KNOWN(RstKnownO_A, pwr_rst_o ) + `ASSERT_KNOWN(ClkKnownO_A, pwr_clk_o ) + `ASSERT_KNOWN(OtpKnownO_A, pwr_otp_o ) + `ASSERT_KNOWN(LcKnownO_A, pwr_lc_o ) + `ASSERT_KNOWN(IntrKnownO_A, intr_wakeup_o ) + + // EscTimeOutCnt also sets the required clock ratios between escalator and local clock + // Ie, clk_lc cannot be so slow that the timeout count is reached + `ifdef INC_ASSERT + //VCS coverage off + // pragma coverage off + logic effective_rst_n; + assign effective_rst_n = clk_lc_i && rst_ni; + + logic [31:0] cnt; + always_ff @(posedge clk_i or negedge effective_rst_n) begin + if (!effective_rst_n) begin + cnt <= '0; + end else begin + cnt <= cnt + 1'b1; + end + end + //VCS coverage on + // pragma coverage on + + `ASSERT(ClkRatio_A, cnt < EscTimeOutCnt) + + `endif + + `ASSERT_PRIM_FSM_ERROR_TRIGGER_ERR(FsmCheck_A, u_fsm.u_state_regs, + pwr_rst_o.rst_lc_req && pwr_rst_o.rst_sys_req) + `ASSERT_PRIM_FSM_ERROR_TRIGGER_ERR(SlowFsmCheck_A, u_slow_fsm.u_state_regs, + pwr_ast_o.pwr_clamp && !pwr_ast_o.main_pd_n, 0, 2, + clk_slow_i, !rst_slow_ni) + + // Alert assertions for reg_we onehot check + `ASSERT_PRIM_REG_WE_ONEHOT_ERROR_TRIGGER_ALERT(RegWeOnehotCheck_A, u_reg, alert_tx_o[0]) +endmodule // pwrmgr diff --git a/src/pwrmgr/rtl/pwrmgr_cdc.sv b/src/pwrmgr/rtl/pwrmgr_cdc.sv new file mode 100644 index 000000000..90e7b6916 --- /dev/null +++ b/src/pwrmgr/rtl/pwrmgr_cdc.sv @@ -0,0 +1,333 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Power Manager CDC handling +// + +`include "prim_assert.sv" + +module pwrmgr_cdc import pwrmgr_pkg::*; import pwrmgr_reg_pkg::*; +( + // Clocks and resets + input clk_slow_i, + input clk_i, + input rst_slow_ni, + input rst_ni, + + // slow domain signals, + input slow_req_pwrup_i, + input slow_ack_pwrdn_i, + input slow_fsm_invalid_i, + input slow_pwrup_cause_toggle_i, + input pwrup_cause_e slow_pwrup_cause_i, + output logic [NumWkups-1:0] slow_wakeup_en_o, + output logic [NumRstReqs-1:0] slow_reset_en_o, + output logic slow_main_pd_no, + output logic slow_io_clk_en_o, + output logic slow_core_clk_en_o, + output logic slow_usb_clk_en_lp_o, + output logic slow_usb_clk_en_active_o, + output logic slow_req_pwrdn_o, + output logic slow_ack_pwrup_o, + output pwr_ast_rsp_t slow_ast_o, + output pwr_peri_t slow_peri_reqs_o, + input pwr_peri_t slow_peri_reqs_masked_i, + output logic slow_clr_req_o, + input slow_usb_ip_clk_en_i, + output slow_usb_ip_clk_status_o, + + // fast domain signals + input req_pwrdn_i, + input ack_pwrup_i, + input cfg_cdc_sync_i, + input [NumWkups-1:0] wakeup_en_i, + input logic [NumRstReqs-1:0] reset_en_i, + input main_pd_ni, + input io_clk_en_i, + input core_clk_en_i, + input usb_clk_en_lp_i, + input usb_clk_en_active_i, + output logic ack_pwrdn_o, + output logic fsm_invalid_o, + output logic req_pwrup_o, + output pwrup_cause_e pwrup_cause_o, + output pwr_peri_t peri_reqs_o, + output logic cdc_sync_done_o, + input clr_slow_req_i, + output logic usb_ip_clk_en_o, + input usb_ip_clk_status_i, + + // peripheral inputs, mixed domains + input pwr_peri_t peri_i, + input pwr_flash_t flash_i, + output pwr_flash_t flash_o, + + // otp interface + input pwr_otp_rsp_t otp_i, + output pwr_otp_rsp_t otp_o, + + // AST inputs, unknown domain + input pwr_ast_rsp_t ast_i, + + // rom_ctrl signals + input prim_mubi_pkg::mubi4_t rom_ctrl_done_i, + output prim_mubi_pkg::mubi4_t rom_ctrl_done_o, + + // core sleeping + input core_sleeping_i, + output logic core_sleeping_o + +); + + //////////////////////////////// + // Sync from clk_i to clk_slow_i + //////////////////////////////// + + logic slow_cdc_sync; + pwr_ast_rsp_t slow_ast_q, slow_ast_q2; + + prim_flop_2sync # ( + .Width(1) + ) u_req_pwrdn_sync ( + .clk_i(clk_slow_i), + .rst_ni(rst_slow_ni), + .d_i(req_pwrdn_i), + .q_o(slow_req_pwrdn_o) + ); + + prim_flop_2sync # ( + .Width(1) + ) u_ack_pwrup_sync ( + .clk_i(clk_slow_i), + .rst_ni(rst_slow_ni), + .d_i(ack_pwrup_i), + .q_o(slow_ack_pwrup_o) + ); + + prim_pulse_sync u_slow_cdc_sync ( + .clk_src_i(clk_i), + .rst_src_ni(rst_ni), + .src_pulse_i(cfg_cdc_sync_i), + .clk_dst_i(clk_slow_i), + .rst_dst_ni(rst_slow_ni), + .dst_pulse_o(slow_cdc_sync) + ); + + // Even though this is multi-bit, the bits are individual request lines. + // So there is no general concern about recombining as there is + // no intent to use them in a related manner. + prim_flop_2sync # ( + .Width($bits(pwr_peri_t)) + ) u_slow_ext_req_sync ( + .clk_i (clk_slow_i), + .rst_ni (rst_slow_ni), + .d_i (peri_i), + .q_o (slow_peri_reqs_o) + ); + + prim_flop_2sync # ( + .Width(1) + ) u_ip_clk_status_sync ( + .clk_i (clk_slow_i), + .rst_ni (rst_slow_ni), + .d_i (usb_ip_clk_status_i), + .q_o (slow_usb_ip_clk_status_o) + ); + + // Some of the AST signals are multi-bits themselves (such as clk_val) + // thus they need to be delayed one more stage to check for stability + prim_flop_2sync # ( + .Width($bits(pwr_ast_rsp_t)), + .ResetValue(PWR_AST_RSP_SYNC_DEFAULT) + ) u_ast_sync ( + .clk_i (clk_slow_i), + .rst_ni (rst_slow_ni), + .d_i (ast_i), + .q_o (slow_ast_q) + ); + + always_ff @(posedge clk_slow_i or negedge rst_slow_ni) begin + if (!rst_slow_ni) begin + slow_ast_q2 <= PWR_AST_RSP_SYNC_DEFAULT; + end else begin + slow_ast_q2 <= slow_ast_q; + end + end + + // if possible, we should simulate below with random delays through + // flop_2sync + always_ff @(posedge clk_slow_i or negedge rst_slow_ni) begin + if (!rst_slow_ni) begin + slow_ast_o <= PWR_AST_RSP_SYNC_DEFAULT; + end else if (slow_ast_q2 == slow_ast_q) begin + // Output only updates whenever sync and delayed outputs both agree. + // If there are delays in sync, this will result in a 1 cycle difference + // and the output will hold the previous value + slow_ast_o <= slow_ast_q2; + end + end + + // only register configurations can be sync'd using slow_cdc_sync + always_ff @(posedge clk_slow_i or negedge rst_slow_ni) begin + if (!rst_slow_ni) begin + slow_wakeup_en_o <= '0; + slow_reset_en_o <= '0; + slow_main_pd_no <= '1; + slow_io_clk_en_o <= '0; + slow_core_clk_en_o <= '0; + slow_usb_clk_en_lp_o <= '0; + slow_usb_clk_en_active_o <= 1'b1; + end else if (slow_cdc_sync) begin + slow_wakeup_en_o <= wakeup_en_i; + slow_reset_en_o <= reset_en_i; + slow_main_pd_no <= main_pd_ni; + slow_io_clk_en_o <= io_clk_en_i; + slow_core_clk_en_o <= core_clk_en_i; + slow_usb_clk_en_lp_o <= usb_clk_en_lp_i; + slow_usb_clk_en_active_o <= usb_clk_en_active_i; + end + end + + //////////////////////////////// + // Sync from clk_slow_i to clk_i + //////////////////////////////// + + logic pwrup_cause_toggle_q, pwrup_cause_toggle_q2; + logic pwrup_cause_chg; + + prim_flop_2sync # ( + .Width(1) + ) u_req_pwrup_sync ( + .clk_i, + .rst_ni, + .d_i(slow_req_pwrup_i), + .q_o(req_pwrup_o) + ); + + prim_flop_2sync # ( + .Width(1) + ) u_ack_pwrdn_sync ( + .clk_i, + .rst_ni, + .d_i(slow_ack_pwrdn_i), + .q_o(ack_pwrdn_o) + ); + + prim_flop_2sync # ( + .Width(1) + ) u_int_fsm_invalid_sync ( + .clk_i, + .rst_ni, + .d_i(slow_fsm_invalid_i), + .q_o(fsm_invalid_o) + ); + + prim_flop_2sync # ( + .Width(1) + ) u_pwrup_chg_sync ( + .clk_i, + .rst_ni, + .d_i(slow_pwrup_cause_toggle_i), + .q_o(pwrup_cause_toggle_q) + ); + + prim_flop_2sync # ( + .Width(1) + ) u_ip_clk_en_sync ( + .clk_i, + .rst_ni, + .d_i(slow_usb_ip_clk_en_i), + .q_o(usb_ip_clk_en_o) + ); + + prim_flop_2sync # ( + .Width(1) + ) u_sleeping_sync ( + .clk_i, + .rst_ni, + .d_i(core_sleeping_i), + .q_o(core_sleeping_o) + ); + + prim_pulse_sync u_scdc_sync ( + .clk_src_i(clk_slow_i), + .rst_src_ni(rst_slow_ni), + .src_pulse_i(slow_cdc_sync), + .clk_dst_i(clk_i), + .rst_dst_ni(rst_ni), + .dst_pulse_o(cdc_sync_done_o) + ); + + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + pwrup_cause_toggle_q2 <= 1'b0; + end else begin + pwrup_cause_toggle_q2 <= pwrup_cause_toggle_q; + end + end + + assign pwrup_cause_chg = pwrup_cause_toggle_q2 ^ pwrup_cause_toggle_q; + + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + pwrup_cause_o <= Por; + end else if (pwrup_cause_chg) begin + pwrup_cause_o <= slow_pwrup_cause_i; + end + end + + prim_flop_2sync #( + .Width($bits(pwr_peri_t)) + ) u_ext_req_sync ( + .clk_i, + .rst_ni, + .d_i(slow_peri_reqs_masked_i), + .q_o(peri_reqs_o) + ); + + prim_flop_2sync #( + .Width(1), + .ResetValue(1'b1) + ) u_sync_flash_idle ( + .clk_i, + .rst_ni, + .d_i(flash_i.flash_idle), + .q_o(flash_o.flash_idle) + ); + + prim_flop_2sync #( + .Width($bits(pwr_otp_rsp_t)), + .ResetValue('0) + ) u_sync_otp ( + .clk_i, + .rst_ni, + .d_i(otp_i), + .q_o(otp_o) + ); + + prim_mubi4_sync #( + .NumCopies(1), + .AsyncOn(1), + .StabilityCheck(1) + ) u_sync_rom_ctrl ( + .clk_i, + .rst_ni, + .mubi_i(rom_ctrl_done_i), + .mubi_o({rom_ctrl_done_o}) + ); + + //////////////////////////////// + // Handshake + //////////////////////////////// + prim_flop_2sync #( + .Width(1), + .ResetValue('0) + ) u_clr_req_sync ( + .clk_i(clk_slow_i), + .rst_ni(rst_slow_ni), + .d_i(clr_slow_req_i), + .q_o(slow_clr_req_o) + ); + +endmodule diff --git a/src/pwrmgr/rtl/pwrmgr_cdc_pulse.sv b/src/pwrmgr/rtl/pwrmgr_cdc_pulse.sv new file mode 100644 index 000000000..ad7c50143 --- /dev/null +++ b/src/pwrmgr/rtl/pwrmgr_cdc_pulse.sv @@ -0,0 +1,91 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Power Manager module to find slow clock edges +// The clock is not used directly to avoid STA issues, instead a toggle +// pulse is used. + +`include "prim_assert.sv" + +module pwrmgr_cdc_pulse ( + input clk_slow_i, + input clk_i, + input rst_ni, + input rst_slow_ni, + input start_i, + input stop_i, + output logic pulse_o +); + + logic slow_toggle_pq, slow_toggle_nq; + logic clk_slow_pq, clk_slow_nq; + logic clk_slow_pq2, clk_slow_nq2; + logic toggle; + logic valid; + + // toggle pulse generated on positive edge + always_ff @(posedge clk_slow_i or negedge rst_slow_ni) begin + if (!rst_slow_ni) begin + slow_toggle_pq <= 1'b0; + end else begin + slow_toggle_pq <= ~slow_toggle_pq; + end + end + + // toggle pulse generated on negative edge + always_ff @(negedge clk_slow_i or negedge rst_slow_ni) begin + if (!rst_slow_ni) begin + slow_toggle_nq <= 1'b0; + end else begin + slow_toggle_nq <= ~slow_toggle_nq; + end + end + + + prim_flop_2sync # ( + .Width(1) + ) i_pos_sync ( + .clk_i, + .rst_ni, + .d_i(slow_toggle_pq), + .q_o(clk_slow_pq) + ); + + prim_flop_2sync # ( + .Width(1) + ) i_neg_sync ( + .clk_i, + .rst_ni, + .d_i(slow_toggle_nq), + .q_o(clk_slow_nq) + ); + + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + clk_slow_pq2 <= 1'b0; + clk_slow_nq2 <= 1'b0; + end else begin + clk_slow_pq2 <= clk_slow_pq; + clk_slow_nq2 <= clk_slow_nq; + end + end + + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + valid <= 1'b0; + end else if (valid && stop_i) begin + valid <= 1'b0; + end else if (!valid && toggle && start_i) begin + valid <= 1'b1; + end + end + + // toggle is found on either positive and negative edges of clk_slow_i + assign toggle = clk_slow_pq2 ^ clk_slow_pq | clk_slow_nq2 ^ clk_slow_nq; + assign pulse_o = valid & toggle; + + + + +endmodule // pwrmgr diff --git a/src/pwrmgr/rtl/pwrmgr_fsm.sv b/src/pwrmgr/rtl/pwrmgr_fsm.sv new file mode 100644 index 000000000..1ac7f6b74 --- /dev/null +++ b/src/pwrmgr/rtl/pwrmgr_fsm.sv @@ -0,0 +1,542 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Power Manager Fast FSM +// + +`include "prim_assert.sv" + +module pwrmgr_fsm import pwrmgr_pkg::*; import pwrmgr_reg_pkg::*;( + input clk_i, + input rst_ni, + input clk_slow_i, + input rst_slow_ni, + + // interface with slow_fsm + input req_pwrup_i, + input pwrup_cause_e pwrup_cause_i, + output logic ack_pwrup_o, + output logic req_pwrdn_o, + input ack_pwrdn_i, + input low_power_entry_i, + input main_pd_ni, + input [TotalResetWidth-1:0] reset_reqs_i, + input fsm_invalid_i, + output logic clr_slow_req_o, + input usb_ip_clk_en_i, + output logic usb_ip_clk_status_o, + + // consumed in pwrmgr + output logic wkup_o, // generate wake interrupt + output logic fall_through_o, + output logic abort_o, + output logic clr_hint_o, + output logic clr_cfg_lock_o, + + // rstmgr + output pwr_rst_req_t pwr_rst_o, + input pwr_rst_rsp_t pwr_rst_i, + + // clkmgr + output pwr_clk_req_t ips_clk_en_o, + input pwr_clk_rsp_t clk_en_status_i, + + // otp + output logic otp_init_o, + input otp_done_i, + input otp_idle_i, + + // lc + output logic lc_init_o, + input lc_done_i, + input lc_idle_i, + input lc_ctrl_pkg::lc_tx_t lc_dft_en_i, + input lc_ctrl_pkg::lc_tx_t lc_hw_debug_en_i, + + // flash + input flash_idle_i, + + // rom_ctrl + input prim_mubi_pkg::mubi4_t rom_ctrl_done_i, + input prim_mubi_pkg::mubi4_t rom_ctrl_good_i, + + // pinmux + output logic strap_o, + output logic low_power_o, + + // processing elements + output lc_ctrl_pkg::lc_tx_t fetch_en_o +); + + import prim_mubi_pkg::mubi4_t; + import prim_mubi_pkg::mubi4_test_true_strict; + import prim_mubi_pkg::mubi4_or_hi; + import prim_mubi_pkg::mubi4_and_hi; + import lc_ctrl_pkg::lc_tx_and_hi; + import lc_ctrl_pkg::lc_tx_test_true_strict; + + // The code below always assumes the always on domain is index 0 + `ASSERT_INIT(AlwaysOnIndex_A, ALWAYS_ON_DOMAIN == 0) + + // when there are multiple on domains, the latter 1 should become another parameter + localparam int OffDomainSelStart = ALWAYS_ON_DOMAIN + 1; + + // all powered down domains have resets asserted + logic pd_n_rsts_asserted; + + // all domains have resets asserted + logic all_rsts_asserted; + + // resets are valid + logic reset_valid; + + // reset hint to rstmgr + reset_cause_e reset_cause_q, reset_cause_d; + + // reset request + logic reset_req; + logic direct_rst_req; + logic ndmreset_req; + logic hw_rst_req; + logic sw_rst_req; + + // strap sample should only happen on cold boot or when the + // the system goes through a reset cycle + logic strap_sampled; + + // disable processing element fetching + lc_ctrl_pkg::lc_tx_t fetch_en_q, fetch_en_d; + + fast_pwr_state_e state_d, state_q; + logic reset_ongoing_q, reset_ongoing_d; + logic req_pwrdn_q, req_pwrdn_d; + logic ack_pwrup_q, ack_pwrup_d; + logic ip_clk_en_q, ip_clk_en_d; + logic [PowerDomains-1:0] rst_lc_req_q, rst_sys_req_q; + logic [PowerDomains-1:0] rst_lc_req_d, rst_sys_req_d; + logic otp_init; + logic lc_init; + logic low_power_q, low_power_d; + + assign pd_n_rsts_asserted = pwr_rst_i.rst_lc_src_n[PowerDomains-1:OffDomainSelStart] == '0 & + pwr_rst_i.rst_sys_src_n[PowerDomains-1:OffDomainSelStart] == '0; + + logic lc_rsts_valid; + assign lc_rsts_valid = ((rst_lc_req_q & ~pwr_rst_i.rst_lc_src_n) | + (~rst_lc_req_q & pwr_rst_i.rst_lc_src_n)) == {PowerDomains{1'b1}}; + logic sys_rsts_valid; + assign sys_rsts_valid = ((rst_sys_req_q & ~pwr_rst_i.rst_sys_src_n) | + (~rst_sys_req_q & pwr_rst_i.rst_sys_src_n)) == {PowerDomains{1'b1}}; + + assign all_rsts_asserted = lc_rsts_valid & sys_rsts_valid; + + // Any reset request was asserted. + assign reset_req = |reset_reqs_i; + + // Any peripheral triggererd hardware reset request. + assign hw_rst_req = |reset_reqs_i[NumRstReqs-1:0]; + + // Direct reset request that bypass checks. + assign direct_rst_req = reset_reqs_i[ResetEscIdx] | + reset_reqs_i[ResetMainPwrIdx]; + + // Ndm reset request. + assign ndmreset_req = reset_reqs_i[ResetNdmIdx]; + + // Software triggered reset request. + assign sw_rst_req = reset_reqs_i[ResetSwReqIdx]; + + // when in low power path, resets are controlled by domain power down + // when in reset path, all resets must be asserted + // when the reset cause is something else, it is invalid + assign reset_valid = reset_cause_q == LowPwrEntry ? main_pd_ni | pd_n_rsts_asserted : + reset_cause_q == HwReq ? all_rsts_asserted : 1'b0; + + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + ack_pwrup_q <= 1'b0; + req_pwrdn_q <= 1'b0; + reset_ongoing_q <= 1'b0; + ip_clk_en_q <= 1'b0; + rst_lc_req_q <= {PowerDomains{1'b1}}; + rst_sys_req_q <= {PowerDomains{1'b1}}; + reset_cause_q <= ResetUndefined; + low_power_q <= 1'b1; + end else begin + ack_pwrup_q <= ack_pwrup_d; + req_pwrdn_q <= req_pwrdn_d; + reset_ongoing_q <= reset_ongoing_d; + ip_clk_en_q <= ip_clk_en_d; + rst_lc_req_q <= rst_lc_req_d; + rst_sys_req_q <= rst_sys_req_d; + reset_cause_q <= reset_cause_d; + low_power_q <= low_power_d; + end + end + + // SEC_CM: FSM.SPARSE + `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, fast_pwr_state_e, FastPwrStateLowPower) + + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + strap_sampled <= 1'b0; + end else if (&rst_sys_req_q) begin + strap_sampled <= 1'b0; + end else if (strap_o) begin + strap_sampled <= 1'b1; + end + end + + prim_lc_sender u_fetch_en ( + .clk_i, + .rst_ni, + .lc_en_i(fetch_en_d), + .lc_en_o(fetch_en_q) + ); + assign fetch_en_o = fetch_en_q; + + // Life cycle broadcast may take time to propagate through the system. + // The sync below simulates that behavior using the slowest clock in the + // system. + logic slow_lc_done; + logic lc_done; + + prim_flop_2sync #( + .Width(1) + ) u_slow_sync_lc_done ( + .clk_i(clk_slow_i), + .rst_ni(rst_slow_ni), + .d_i(lc_done_i), + .q_o(slow_lc_done) + ); + + prim_flop_2sync #( + .Width(1) + ) u_sync_lc_done ( + .clk_i, + .rst_ni, + .d_i(slow_lc_done), + .q_o(lc_done) + ); + + + logic clks_enabled; + logic clks_disabled; + + // clocks all enabled computed as follows: + // if enable is high, meaning clock is requested to turn on, the status must + // also be 1. + // if enable is low, meaning clock is not requested to turn on, the status is + // don't care. + // the bit-wise OR of both conditions must be all true. + assign clks_enabled = ip_clk_en_q && + &((ips_clk_en_o & clk_en_status_i) | ~ips_clk_en_o); + + // clocks all disabled is the opposite: + // if enable is low the status must also be low. + // if enable is high, the status is don't care. + // the bit-wise OR of both conditions must be all true. + assign clks_disabled = ~ip_clk_en_q && + &((~ips_clk_en_o & ~clk_en_status_i) | ips_clk_en_o); + + + // rom integrity checks are disabled during TEST / RMA states + // During TEST / RMA states, both dft_en and hw_debug_en are On. + // During DEV / PROD states, either both signals are Off, or only + // hw_debug_en is On + + mubi4_t rom_intg_chk_dis; + assign rom_intg_chk_dis = lc_tx_test_true_strict(lc_tx_and_hi(lc_dft_en_i, lc_hw_debug_en_i)) ? + prim_mubi_pkg::MuBi4True : + prim_mubi_pkg::MuBi4False; + + mubi4_t rom_intg_chk_done; + mubi4_t rom_intg_chk_good; + assign rom_intg_chk_done = mubi4_or_hi(mubi4_and_hi(rom_intg_chk_dis, rom_ctrl_done_i), + rom_ctrl_done_i); + assign rom_intg_chk_good = mubi4_or_hi(rom_intg_chk_dis, rom_ctrl_good_i); + + always_comb begin + otp_init = 1'b0; + lc_init = 1'b0; + wkup_o = 1'b0; + fall_through_o = 1'b0; + abort_o = 1'b0; + clr_hint_o = 1'b0; + clr_cfg_lock_o = 1'b0; + strap_o = 1'b0; + clr_slow_req_o = 1'b0; + + state_d = state_q; + ack_pwrup_d = ack_pwrup_q; + req_pwrdn_d = req_pwrdn_q; + reset_ongoing_d = reset_ongoing_q; + ip_clk_en_d = ip_clk_en_q; + rst_lc_req_d = rst_lc_req_q; + rst_sys_req_d = rst_sys_req_q; + reset_cause_d = reset_cause_q; + low_power_d = low_power_q; + fetch_en_d = fetch_en_q; + + unique case(state_q) + + FastPwrStateLowPower: begin + if (req_pwrup_i || reset_ongoing_q) begin + state_d = FastPwrStateEnableClocks; + end + end + + FastPwrStateEnableClocks: begin + ip_clk_en_d = 1'b1; + if (clks_enabled) begin + state_d = FastPwrStateReleaseLcRst; + end + end + + FastPwrStateReleaseLcRst: begin + rst_lc_req_d = '0; // release rst_lc_n for all power domains + rst_sys_req_d = '0; // release rst_sys_n for all power domains + // once all resets are released continue to otp initialization + if (&pwr_rst_i.rst_lc_src_n) begin + state_d = FastPwrStateOtpInit; + end + end + + FastPwrStateOtpInit: begin + otp_init = 1'b1; + + if (otp_done_i) begin + state_d = FastPwrStateLcInit; + end + end + + FastPwrStateLcInit: begin + lc_init = 1'b1; + + if (lc_done) begin + state_d = FastPwrStateAckPwrUp; + + end + end + + FastPwrStateAckPwrUp: begin + // only ack the slow_fsm if we actually transitioned through it + ack_pwrup_d = !reset_ongoing_q; + + // wait for request power up to drop relative to ack + if (!req_pwrup_i || reset_ongoing_q) begin + ack_pwrup_d = 1'b0; + clr_cfg_lock_o = 1'b1; + // generate a wakeup interrupt if we intended to go to low power + // and we were woken from low power with a wakeup and not reset + wkup_o = (pwrup_cause_i == Wake) & (reset_cause_q == LowPwrEntry); + // This constitutes the end of a reset cycle + reset_ongoing_d = 1'b0; + state_d = FastPwrStateStrap; + end + end + + FastPwrStateStrap: begin + strap_o = ~strap_sampled; + state_d = FastPwrStateRomCheckDone; + end + + FastPwrStateRomCheckDone: begin + // zero outgoing low power indication + low_power_d = '0; + reset_cause_d = ResetNone; + + // When done is observed, advance to good check + if (mubi4_test_true_strict(rom_intg_chk_done)) begin + state_d = FastPwrStateRomCheckGood; + end + end + + FastPwrStateRomCheckGood: begin + if (mubi4_test_true_strict(rom_intg_chk_good)) begin + state_d = FastPwrStateActive; + end + end + + FastPwrStateActive: begin + // only in active state, allow processor to execute + fetch_en_d = lc_ctrl_pkg::On; + + // when handling reset request or low power entry of any + // kind, stop processor from fetching + if (reset_req || low_power_entry_i) begin + fetch_en_d = lc_ctrl_pkg::Off; + reset_cause_d = ResetUndefined; + state_d = FastPwrStateDisClks; + end + end + + FastPwrStateDisClks: begin + ip_clk_en_d = 1'b0; + + if (clks_disabled) begin + state_d = reset_req ? FastPwrStateNvmShutDown : FastPwrStateFallThrough; + low_power_d = ~reset_req; + end else begin + // escalation was received, skip all handshaking and directly reset + state_d = direct_rst_req ? FastPwrStateNvmShutDown : state_q; + low_power_d = ~reset_req; + end + end + + // Low Power Path + FastPwrStateFallThrough: begin + clr_hint_o = 1'b1; + + // The processor was interrupted after it asserted WFI and is executing again + if (!low_power_entry_i) begin + ip_clk_en_d = 1'b1; + wkup_o = 1'b1; + fall_through_o = 1'b1; + state_d = FastPwrStateRomCheckDone; + end else begin + state_d = FastPwrStateNvmIdleChk; + end + end + + FastPwrStateNvmIdleChk: begin + + if (otp_idle_i && lc_idle_i && flash_idle_i) begin + state_d = FastPwrStateLowPowerPrep; + end else begin + ip_clk_en_d = 1'b1; + wkup_o = 1'b1; + abort_o = 1'b1; + state_d = FastPwrStateRomCheckDone; + end + end + + FastPwrStateLowPowerPrep: begin + // reset cause is set only if main power domain will be turned off + reset_cause_d = LowPwrEntry; + + // reset non-always-on domains if requested + // this includes the clock manager, which implies pwr/rst managers must + // be fed directly from the source + for (int i = OffDomainSelStart; i < PowerDomains; i++) begin + rst_lc_req_d[i] = ~main_pd_ni; + rst_sys_req_d[i] = ~main_pd_ni; + end + + if (reset_valid) begin + state_d = FastPwrStateReqPwrDn; + end + end + + FastPwrStateReqPwrDn: begin + req_pwrdn_d = 1'b1; + + if (ack_pwrdn_i) begin + req_pwrdn_d = 1'b0; + state_d = FastPwrStateLowPower; + end + end + + // Reset Path + FastPwrStateNvmShutDown: begin + clr_hint_o = 1'b1; + reset_ongoing_d = 1'b1; + state_d = FastPwrStateResetPrep; + end + + FastPwrStateResetPrep: begin + reset_cause_d = HwReq; + rst_lc_req_d = {PowerDomains{1'b1}}; + rst_sys_req_d = {PowerDomains{(hw_rst_req | + direct_rst_req | + sw_rst_req) | + (ndmreset_req & + lc_ctrl_pkg::lc_tx_test_false_loose(lc_hw_debug_en_i))}}; + + + state_d = FastPwrStateResetWait; + end + + FastPwrStateResetWait: begin + rst_lc_req_d = {PowerDomains{1'b1}}; + clr_slow_req_o = reset_reqs_i[ResetMainPwrIdx]; + // The main power reset request is checked here specifically because it is + // the only reset request in the system that operates on the POR domain. + // This has to be the case since it would otherwise not be able to monitor + // the non-always-on domains. + // + // As a result of this, the normal reset process does not automatically + // wipe out the reset request, so we specifically clear it and wait for it to be + // cleared before proceeding. This also implies if the system is under a persistent + // glitch, or if someone just turned off the power before pwrmgr turns it off itself, + // we will stay stuck here and perpetually hold the system in reset. + if (reset_valid && !reset_reqs_i[ResetMainPwrIdx]) begin + state_d = FastPwrStateLowPower; + end + end + + + // Terminal state, kill everything + // SEC_CM: FSM.TERMINAL + default: begin + rst_lc_req_d = {PowerDomains{1'b1}}; + rst_sys_req_d = {PowerDomains{1'b1}}; + ip_clk_en_d = 1'b0; + end + endcase // unique case (state_q) + + if (fsm_invalid_i) begin + // the slow fsm is completely out of sync, transition to terminal state + state_d = FastPwrStateInvalid; + end + + + end // always_comb + + assign ack_pwrup_o = ack_pwrup_q; + assign req_pwrdn_o = req_pwrdn_q; + assign low_power_o = low_power_q; + + assign pwr_rst_o.rst_lc_req = rst_lc_req_q; + assign pwr_rst_o.rst_sys_req = rst_sys_req_q; + assign pwr_rst_o.reset_cause = reset_cause_q; + assign pwr_rst_o.rstreqs = reset_reqs_i[HwResetWidth-1:0]; + + // main and io clocks are only turned on/off as part of normal + // power sequence + assign ips_clk_en_o.main_ip_clk_en = ip_clk_en_q; + assign ips_clk_en_o.io_ip_clk_en = ip_clk_en_q; + prim_flop #( + .Width(1), + .ResetValue(1'b0) + ) u_usb_ip_clk_en ( + .clk_i, + .rst_ni, + .d_i(ip_clk_en_d & usb_ip_clk_en_i), + .q_o(ips_clk_en_o.usb_ip_clk_en) + ); + assign usb_ip_clk_status_o = clk_en_status_i.usb_status; + + prim_flop #( + .Width(1), + .ResetValue(1'b0) + ) u_reg_otp_init ( + .clk_i, + .rst_ni, + .d_i(otp_init), + .q_o(otp_init_o) + ); + + prim_flop #( + .Width(1), + .ResetValue(1'b0) + ) u_reg_lc_init ( + .clk_i, + .rst_ni, + .d_i(lc_init), + .q_o(lc_init_o) + ); + + +endmodule diff --git a/src/pwrmgr/rtl/pwrmgr_pkg.sv b/src/pwrmgr/rtl/pwrmgr_pkg.sv new file mode 100644 index 000000000..e52f79aee --- /dev/null +++ b/src/pwrmgr/rtl/pwrmgr_pkg.sv @@ -0,0 +1,282 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Power Manager Package +// + +package pwrmgr_pkg; + + // global constant + parameter int ALWAYS_ON_DOMAIN = 0; + + // variables referenced by other modules / packages + parameter int PowerDomains = 2; // this needs to be a topgen populated number, or from topcfg? + + // variables referenced only by pwrmgr + localparam int TotalWakeWidth = pwrmgr_reg_pkg::NumWkups + 2; // Abort and fall through are added + + parameter int NumSwRstReq = 1; + + // position of escalation request + parameter int HwResetWidth = pwrmgr_reg_pkg::NumRstReqs + + pwrmgr_reg_pkg::NumIntRstReqs + + pwrmgr_reg_pkg::NumDebugRstReqs; + parameter int TotalResetWidth = HwResetWidth + NumSwRstReq; + parameter int ResetSwReqIdx = TotalResetWidth - 1; + + // pwrmgr to ast + typedef struct packed { + logic main_pd_n; + logic pwr_clamp_env; + logic pwr_clamp; + logic slow_clk_en; + logic core_clk_en; + logic io_clk_en; + logic usb_clk_en; + } pwr_ast_req_t; + + typedef struct packed { + logic slow_clk_val; + logic core_clk_val; + logic io_clk_val; + logic usb_clk_val; + logic main_pok; + } pwr_ast_rsp_t; + + // default value of pwr_ast_rsp (for dangling ports) + parameter pwr_ast_rsp_t PWR_AST_RSP_DEFAULT = '{ + slow_clk_val: 1'b1, + core_clk_val: 1'b1, + io_clk_val: 1'b1, + usb_clk_val: 1'b1, + main_pok: 1'b1 + }; + + parameter pwr_ast_rsp_t PWR_AST_RSP_SYNC_DEFAULT = '{ + slow_clk_val: 1'b0, + core_clk_val: 1'b0, + io_clk_val: 1'b0, + usb_clk_val: 1'b0, + main_pok: 1'b0 + }; + + // reasons for pwrmgr reset + typedef enum logic [1:0] { + ResetNone = 0, // there is no reset + LowPwrEntry = 1, // reset is caused by low power entry + HwReq = 2, // reset is caused by peripheral reset requests + ResetUndefined = 3 // this should never happen outside of POR + } reset_cause_e; + + // pwrmgr to rstmgr + typedef struct packed { + logic [PowerDomains-1:0] rst_lc_req; + logic [PowerDomains-1:0] rst_sys_req; + logic [HwResetWidth-1:0] rstreqs; + reset_cause_e reset_cause; + } pwr_rst_req_t; + + // rstmgr to pwrmgr + typedef struct packed { + logic [PowerDomains-1:0] rst_lc_src_n; + logic [PowerDomains-1:0] rst_sys_src_n; + } pwr_rst_rsp_t; + + // default value (for dangling ports) + parameter pwr_rst_rsp_t PWR_RST_RSP_DEFAULT = '{ + rst_lc_src_n: {PowerDomains{1'b1}}, + rst_sys_src_n: {PowerDomains{1'b1}} + }; + + // pwrmgr to clkmgr + typedef struct packed { + logic main_ip_clk_en; + logic io_ip_clk_en; + logic usb_ip_clk_en; + } pwr_clk_req_t; + + // clkmgr to pwrmgr + typedef struct packed { + logic main_status; + logic io_status; + logic usb_status; + } pwr_clk_rsp_t; + + // pwrmgr to otp + typedef struct packed { + logic otp_init; + } pwr_otp_req_t; + + // otp to pwrmgr + typedef struct packed { + logic otp_done; + logic otp_idle; + } pwr_otp_rsp_t; + + // default value (for dangling ports) + parameter pwr_otp_rsp_t PWR_OTP_RSP_DEFAULT = '{ + otp_done: 1'b1, + otp_idle: 1'b1 + }; + + // pwrmgr to lifecycle + typedef struct packed { + logic lc_init; + } pwr_lc_req_t; + + // lifecycle to pwrmgr + typedef struct packed { + logic lc_done; + logic lc_idle; + } pwr_lc_rsp_t; + + // default value (for dangling ports) + parameter pwr_lc_rsp_t PWR_LC_RSP_DEFAULT = '{ + lc_done: 1'b1, + lc_idle: 1'b1 + }; + + typedef struct packed { + logic flash_idle; + } pwr_flash_t; + + parameter pwr_flash_t PWR_FLASH_DEFAULT = '{ + flash_idle: 1'b1 + }; + + // processor to pwrmgr + typedef struct packed { + logic core_sleeping; + } pwr_cpu_t; + + // cpu reset requests and status + typedef struct packed { + logic ndmreset_req; + } pwrmgr_cpu_t; + + // exported resets + + // default value for pwrmgr_ast_rsp_t (for dangling ports) + parameter pwrmgr_cpu_t PWRMGR_CPU_DEFAULT = '{ + ndmreset_req: '0 + }; + + // default value (for dangling ports) + parameter pwr_cpu_t PWR_CPU_DEFAULT = '{ + core_sleeping: 1'b0 + }; + + // default value (for dangling ports) + parameter int WAKEUPS_DEFAULT = '0; + parameter int RSTREQS_DEFAULT = '0; + + // peripherals to pwrmgr + typedef struct packed { + logic [pwrmgr_reg_pkg::NumWkups-1:0] wakeups; + // reset requests include external requests + escalation reset + logic [TotalResetWidth-1:0] rstreqs; + } pwr_peri_t; + + // power-up causes + typedef enum logic [1:0] { + Por = 2'h0, + Wake = 2'h1, + Reset = 2'h2 + } pwrup_cause_e; + + // low power hints + typedef enum logic { + None = 1'b0, + LowPower = 1'b1 + } low_power_hint_e; + + // fast fsm state enum + // Encoding generated with: + // $ ./util/design/sparse-fsm-encode.py -d 5 -m 19 -n 12 \ + // -s 3096160381 --language=sv + // + // Hamming distance histogram: + // + // 0: -- + // 1: -- + // 2: -- + // 3: -- + // 4: -- + // 5: ||||||||||||||||| (30.99%) + // 6: |||||||||||||||||||| (35.09%) + // 7: ||||||||| (15.79%) + // 8: |||||| (10.53%) + // 9: ||| (5.85%) + // 10: | (1.75%) + // 11: -- + // 12: -- + // + // Minimum Hamming distance: 5 + // Maximum Hamming distance: 10 + // Minimum Hamming weight: 2 + // Maximum Hamming weight: 10 + // + localparam int FastPwrStateWidth = 12; + typedef enum logic [FastPwrStateWidth-1:0] { + FastPwrStateLowPower = 12'b000000110111, + FastPwrStateEnableClocks = 12'b101011001110, + FastPwrStateReleaseLcRst = 12'b100111000000, + FastPwrStateOtpInit = 12'b111110100010, + FastPwrStateLcInit = 12'b101001010011, + FastPwrStateStrap = 12'b110000111010, + FastPwrStateAckPwrUp = 12'b000010101000, + FastPwrStateRomCheckDone = 12'b010111110011, + FastPwrStateRomCheckGood = 12'b010000000100, + FastPwrStateActive = 12'b001101100100, + FastPwrStateDisClks = 12'b001110010101, + FastPwrStateFallThrough = 12'b011011010000, + FastPwrStateNvmIdleChk = 12'b100101111001, + FastPwrStateLowPowerPrep = 12'b010110001111, + FastPwrStateNvmShutDown = 12'b001100001010, + FastPwrStateResetPrep = 12'b011001101111, + FastPwrStateResetWait = 12'b111111111100, + FastPwrStateReqPwrDn = 12'b111010001001, + FastPwrStateInvalid = 12'b110101010110 + } fast_pwr_state_e; + + // Encoding generated with: + // $ ./util/design/sparse-fsm-encode.py -d 5 -m 12 -n 10 \ + // -s 1726685338 --language=sv + // + // Hamming distance histogram: + // + // 0: -- + // 1: -- + // 2: -- + // 3: -- + // 4: -- + // 5: |||||||||||||||||||| (54.55%) + // 6: |||||||||||||||| (45.45%) + // 7: -- + // 8: -- + // 9: -- + // 10: -- + // + // Minimum Hamming distance: 5 + // Maximum Hamming distance: 6 + // Minimum Hamming weight: 2 + // Maximum Hamming weight: 8 + // + localparam int SlowPwrStateWidth = 10; + typedef enum logic [SlowPwrStateWidth-1:0] { + SlowPwrStateReset = 10'b0000100010, + SlowPwrStateLowPower = 10'b1011000111, + SlowPwrStateMainPowerOn = 10'b0110101111, + SlowPwrStatePwrClampOff = 10'b0110010001, + SlowPwrStateClocksOn = 10'b1010111100, + SlowPwrStateReqPwrUp = 10'b0011011010, + SlowPwrStateIdle = 10'b1111100000, + SlowPwrStateAckPwrDn = 10'b0001110101, + SlowPwrStateClocksOff = 10'b1101111011, + SlowPwrStatePwrClampOn = 10'b0101001100, + SlowPwrStateMainPowerOff = 10'b1000001001, + SlowPwrStateInvalid = 10'b1100010110 + } slow_pwr_state_e; + +endpackage // pwrmgr_pkg diff --git a/src/pwrmgr/rtl/pwrmgr_reg_pkg.sv b/src/pwrmgr/rtl/pwrmgr_reg_pkg.sv new file mode 100644 index 000000000..3f9cae587 --- /dev/null +++ b/src/pwrmgr/rtl/pwrmgr_reg_pkg.sv @@ -0,0 +1,279 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Register Package auto-generated by `reggen` containing data structure + +package pwrmgr_reg_pkg; + + // Param list + parameter int NumWkups = 6; + parameter int SYSRST_CTRL_AON_WKUP_REQ_IDX = 0; + parameter int ADC_CTRL_AON_WKUP_REQ_IDX = 1; + parameter int PINMUX_AON_PIN_WKUP_REQ_IDX = 2; + parameter int PINMUX_AON_USB_WKUP_REQ_IDX = 3; + parameter int AON_TIMER_AON_WKUP_REQ_IDX = 4; + parameter int SENSOR_CTRL_AON_WKUP_REQ_IDX = 5; + parameter int NumRstReqs = 2; + parameter int NumIntRstReqs = 2; + parameter int NumDebugRstReqs = 1; + parameter int ResetMainPwrIdx = 2; + parameter int ResetEscIdx = 3; + parameter int ResetNdmIdx = 4; + parameter int NumAlerts = 1; + + // Address widths within the block + parameter int BlockAw = 7; + + //////////////////////////// + // Typedefs for registers // + //////////////////////////// + + typedef struct packed { + logic q; + } pwrmgr_reg2hw_intr_state_reg_t; + + typedef struct packed { + logic q; + } pwrmgr_reg2hw_intr_enable_reg_t; + + typedef struct packed { + logic q; + logic qe; + } pwrmgr_reg2hw_intr_test_reg_t; + + typedef struct packed { + logic q; + logic qe; + } pwrmgr_reg2hw_alert_test_reg_t; + + typedef struct packed { + struct packed { + logic q; + } main_pd_n; + struct packed { + logic q; + } usb_clk_en_active; + struct packed { + logic q; + } usb_clk_en_lp; + struct packed { + logic q; + } io_clk_en; + struct packed { + logic q; + } core_clk_en; + struct packed { + logic q; + } low_power_hint; + } pwrmgr_reg2hw_control_reg_t; + + typedef struct packed { + logic q; + logic qe; + } pwrmgr_reg2hw_cfg_cdc_sync_reg_t; + + typedef struct packed { + logic q; + } pwrmgr_reg2hw_wakeup_en_mreg_t; + + typedef struct packed { + logic q; + } pwrmgr_reg2hw_reset_en_mreg_t; + + typedef struct packed { + logic q; + } pwrmgr_reg2hw_wake_info_capture_dis_reg_t; + + typedef struct packed { + struct packed { + logic q; + logic qe; + } abort; + struct packed { + logic q; + logic qe; + } fall_through; + struct packed { + logic [5:0] q; + logic qe; + } reasons; + } pwrmgr_reg2hw_wake_info_reg_t; + + typedef struct packed { + struct packed { + logic q; + } main_pd_glitch; + struct packed { + logic q; + } esc_timeout; + struct packed { + logic q; + } reg_intg_err; + } pwrmgr_reg2hw_fault_status_reg_t; + + typedef struct packed { + logic d; + logic de; + } pwrmgr_hw2reg_intr_state_reg_t; + + typedef struct packed { + logic d; + } pwrmgr_hw2reg_ctrl_cfg_regwen_reg_t; + + typedef struct packed { + struct packed { + logic d; + logic de; + } low_power_hint; + } pwrmgr_hw2reg_control_reg_t; + + typedef struct packed { + logic d; + logic de; + } pwrmgr_hw2reg_cfg_cdc_sync_reg_t; + + typedef struct packed { + logic d; + logic de; + } pwrmgr_hw2reg_wake_status_mreg_t; + + typedef struct packed { + logic d; + logic de; + } pwrmgr_hw2reg_reset_status_mreg_t; + + typedef struct packed { + logic d; + logic de; + } pwrmgr_hw2reg_escalate_reset_status_reg_t; + + typedef struct packed { + struct packed { + logic [5:0] d; + } reasons; + struct packed { + logic d; + } fall_through; + struct packed { + logic d; + } abort; + } pwrmgr_hw2reg_wake_info_reg_t; + + typedef struct packed { + struct packed { + logic d; + logic de; + } reg_intg_err; + struct packed { + logic d; + logic de; + } esc_timeout; + struct packed { + logic d; + logic de; + } main_pd_glitch; + } pwrmgr_hw2reg_fault_status_reg_t; + + // Register -> HW type + typedef struct packed { + pwrmgr_reg2hw_intr_state_reg_t intr_state; // [36:36] + pwrmgr_reg2hw_intr_enable_reg_t intr_enable; // [35:35] + pwrmgr_reg2hw_intr_test_reg_t intr_test; // [34:33] + pwrmgr_reg2hw_alert_test_reg_t alert_test; // [32:31] + pwrmgr_reg2hw_control_reg_t control; // [30:25] + pwrmgr_reg2hw_cfg_cdc_sync_reg_t cfg_cdc_sync; // [24:23] + pwrmgr_reg2hw_wakeup_en_mreg_t [5:0] wakeup_en; // [22:17] + pwrmgr_reg2hw_reset_en_mreg_t [1:0] reset_en; // [16:15] + pwrmgr_reg2hw_wake_info_capture_dis_reg_t wake_info_capture_dis; // [14:14] + pwrmgr_reg2hw_wake_info_reg_t wake_info; // [13:3] + pwrmgr_reg2hw_fault_status_reg_t fault_status; // [2:0] + } pwrmgr_reg2hw_t; + + // HW -> register type + typedef struct packed { + pwrmgr_hw2reg_intr_state_reg_t intr_state; // [38:37] + pwrmgr_hw2reg_ctrl_cfg_regwen_reg_t ctrl_cfg_regwen; // [36:36] + pwrmgr_hw2reg_control_reg_t control; // [35:34] + pwrmgr_hw2reg_cfg_cdc_sync_reg_t cfg_cdc_sync; // [33:32] + pwrmgr_hw2reg_wake_status_mreg_t [5:0] wake_status; // [31:20] + pwrmgr_hw2reg_reset_status_mreg_t [1:0] reset_status; // [19:16] + pwrmgr_hw2reg_escalate_reset_status_reg_t escalate_reset_status; // [15:14] + pwrmgr_hw2reg_wake_info_reg_t wake_info; // [13:6] + pwrmgr_hw2reg_fault_status_reg_t fault_status; // [5:0] + } pwrmgr_hw2reg_t; + + // Register offsets + parameter logic [BlockAw-1:0] PWRMGR_INTR_STATE_OFFSET = 7'h 0; + parameter logic [BlockAw-1:0] PWRMGR_INTR_ENABLE_OFFSET = 7'h 4; + parameter logic [BlockAw-1:0] PWRMGR_INTR_TEST_OFFSET = 7'h 8; + parameter logic [BlockAw-1:0] PWRMGR_ALERT_TEST_OFFSET = 7'h c; + parameter logic [BlockAw-1:0] PWRMGR_CTRL_CFG_REGWEN_OFFSET = 7'h 10; + parameter logic [BlockAw-1:0] PWRMGR_CONTROL_OFFSET = 7'h 14; + parameter logic [BlockAw-1:0] PWRMGR_CFG_CDC_SYNC_OFFSET = 7'h 18; + parameter logic [BlockAw-1:0] PWRMGR_WAKEUP_EN_REGWEN_OFFSET = 7'h 1c; + parameter logic [BlockAw-1:0] PWRMGR_WAKEUP_EN_OFFSET = 7'h 20; + parameter logic [BlockAw-1:0] PWRMGR_WAKE_STATUS_OFFSET = 7'h 24; + parameter logic [BlockAw-1:0] PWRMGR_RESET_EN_REGWEN_OFFSET = 7'h 28; + parameter logic [BlockAw-1:0] PWRMGR_RESET_EN_OFFSET = 7'h 2c; + parameter logic [BlockAw-1:0] PWRMGR_RESET_STATUS_OFFSET = 7'h 30; + parameter logic [BlockAw-1:0] PWRMGR_ESCALATE_RESET_STATUS_OFFSET = 7'h 34; + parameter logic [BlockAw-1:0] PWRMGR_WAKE_INFO_CAPTURE_DIS_OFFSET = 7'h 38; + parameter logic [BlockAw-1:0] PWRMGR_WAKE_INFO_OFFSET = 7'h 3c; + parameter logic [BlockAw-1:0] PWRMGR_FAULT_STATUS_OFFSET = 7'h 40; + + // Reset values for hwext registers and their fields + parameter logic [0:0] PWRMGR_INTR_TEST_RESVAL = 1'h 0; + parameter logic [0:0] PWRMGR_INTR_TEST_WAKEUP_RESVAL = 1'h 0; + parameter logic [0:0] PWRMGR_ALERT_TEST_RESVAL = 1'h 0; + parameter logic [0:0] PWRMGR_ALERT_TEST_FATAL_FAULT_RESVAL = 1'h 0; + parameter logic [0:0] PWRMGR_CTRL_CFG_REGWEN_RESVAL = 1'h 1; + parameter logic [0:0] PWRMGR_CTRL_CFG_REGWEN_EN_RESVAL = 1'h 1; + parameter logic [7:0] PWRMGR_WAKE_INFO_RESVAL = 8'h 0; + parameter logic [5:0] PWRMGR_WAKE_INFO_REASONS_RESVAL = 6'h 0; + parameter logic [0:0] PWRMGR_WAKE_INFO_FALL_THROUGH_RESVAL = 1'h 0; + parameter logic [0:0] PWRMGR_WAKE_INFO_ABORT_RESVAL = 1'h 0; + + // Register index + typedef enum int { + PWRMGR_INTR_STATE, + PWRMGR_INTR_ENABLE, + PWRMGR_INTR_TEST, + PWRMGR_ALERT_TEST, + PWRMGR_CTRL_CFG_REGWEN, + PWRMGR_CONTROL, + PWRMGR_CFG_CDC_SYNC, + PWRMGR_WAKEUP_EN_REGWEN, + PWRMGR_WAKEUP_EN, + PWRMGR_WAKE_STATUS, + PWRMGR_RESET_EN_REGWEN, + PWRMGR_RESET_EN, + PWRMGR_RESET_STATUS, + PWRMGR_ESCALATE_RESET_STATUS, + PWRMGR_WAKE_INFO_CAPTURE_DIS, + PWRMGR_WAKE_INFO, + PWRMGR_FAULT_STATUS + } pwrmgr_id_e; + + // Register width information to check illegal writes + parameter logic [3:0] PWRMGR_PERMIT [17] = '{ + 4'b 0001, // index[ 0] PWRMGR_INTR_STATE + 4'b 0001, // index[ 1] PWRMGR_INTR_ENABLE + 4'b 0001, // index[ 2] PWRMGR_INTR_TEST + 4'b 0001, // index[ 3] PWRMGR_ALERT_TEST + 4'b 0001, // index[ 4] PWRMGR_CTRL_CFG_REGWEN + 4'b 0011, // index[ 5] PWRMGR_CONTROL + 4'b 0001, // index[ 6] PWRMGR_CFG_CDC_SYNC + 4'b 0001, // index[ 7] PWRMGR_WAKEUP_EN_REGWEN + 4'b 0001, // index[ 8] PWRMGR_WAKEUP_EN + 4'b 0001, // index[ 9] PWRMGR_WAKE_STATUS + 4'b 0001, // index[10] PWRMGR_RESET_EN_REGWEN + 4'b 0001, // index[11] PWRMGR_RESET_EN + 4'b 0001, // index[12] PWRMGR_RESET_STATUS + 4'b 0001, // index[13] PWRMGR_ESCALATE_RESET_STATUS + 4'b 0001, // index[14] PWRMGR_WAKE_INFO_CAPTURE_DIS + 4'b 0001, // index[15] PWRMGR_WAKE_INFO + 4'b 0001 // index[16] PWRMGR_FAULT_STATUS + }; + +endpackage diff --git a/src/pwrmgr/rtl/pwrmgr_slow_fsm.sv b/src/pwrmgr/rtl/pwrmgr_slow_fsm.sv new file mode 100644 index 000000000..f78105a85 --- /dev/null +++ b/src/pwrmgr/rtl/pwrmgr_slow_fsm.sv @@ -0,0 +1,358 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Power Manager Slow FSM +// + +`include "prim_assert.sv" + +module pwrmgr_slow_fsm import pwrmgr_pkg::*; ( + input clk_i, + input rst_ni, + input rst_main_ni, + + // sync'ed requests from peripherals + input wakeup_i, + input reset_req_i, + + // interface with fast fsm + output logic req_pwrup_o, + output logic pwrup_cause_toggle_o, + output pwrup_cause_e pwrup_cause_o, + input ack_pwrup_i, + input req_pwrdn_i, + output logic ack_pwrdn_o, + output logic rst_req_o, + output logic fsm_invalid_o, + input clr_req_i, + output logic usb_ip_clk_en_o, + input usb_ip_clk_status_i, + + // low power entry configuration + input main_pd_ni, + input io_clk_en_i, + input core_clk_en_i, + input usb_clk_en_lp_i, + input usb_clk_en_active_i, + + // AST interface + input pwr_ast_rsp_t ast_i, + output pwr_ast_req_t ast_o +); + + slow_pwr_state_e state_q, state_d; + + // All signals crossing over to other domain must be flopped + pwrup_cause_e cause_q, cause_d; + logic cause_toggle_q, cause_toggle_d; + logic req_pwrup_q, req_pwrup_d; + logic ack_pwrdn_q, ack_pwrdn_d; + + logic clk_active; + + // All power signals and signals going to analog logic are flopped to avoid transitional glitches + logic pd_nq, pd_nd; + logic pwr_clamp_q, pwr_clamp_d; + logic pwr_clamp_env_q, pwr_clamp_env_d; + logic core_clk_en_q, core_clk_en_d; + logic io_clk_en_q, io_clk_en_d; + logic usb_clk_en_q, usb_clk_en_d; + logic fsm_invalid_q, fsm_invalid_d; + + logic all_clks_valid; + logic all_clks_invalid; + + // when to monitor pok for instability + // These are monitored only in active and low power states + logic mon_main_pok; + logic set_main_pok; + logic async_main_pok_st; + logic main_pok_st; + + // all clocks sources are valid + // if clocks (usb) not configured to be active, then just bypass check + assign all_clks_valid = ast_i.core_clk_val & + ast_i.io_clk_val & + (~usb_clk_en_active_i | ast_i.usb_clk_val); + + // usb clock state during low power is not completely controlled by + // input. + // if main_pd_ni is 0, (ie power will be turned off), then the low power + // state of usb is also off. If main_pd_ni is 1 (power will be kept on), + // then the low power state of usb is directly controlled. + logic usb_clk_en_lp; + assign usb_clk_en_lp = main_pd_ni & usb_clk_en_lp_i; + + // all other clocks are also diasbled when power is turned off. + logic core_clk_en; + logic io_clk_en; + assign core_clk_en = main_pd_ni & core_clk_en_i; + assign io_clk_en = main_pd_ni & io_clk_en_i; + + // if clocks were configured to turn off, make sure val is invalid + // if clocks were not configured to turn off, just bypass the check + assign all_clks_invalid = (core_clk_en | ~ast_i.core_clk_val) & + (io_clk_en | ~ast_i.io_clk_val) & + (usb_clk_en_lp | ~ast_i.usb_clk_val); + + // ensure that clock controls are constantly re-evaluated and not just + // in one specific state + // When fsm is invalid, force the clocks to be on such that the fast fsm + // can forcibly reset the system. + // In the event the clocks cannot be turned on even when forced, the fsm + // invalid signal forces power to turn off. + assign core_clk_en_d = fsm_invalid_q | (clk_active | core_clk_en); + assign io_clk_en_d = fsm_invalid_q | (clk_active | io_clk_en); + assign usb_clk_en_d = fsm_invalid_q | (clk_active ? usb_clk_en_active_i : usb_clk_en_lp); + + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + cause_q <= Por; + cause_toggle_q <= 1'b0; + pd_nq <= 1'b1; + pwr_clamp_q <= 1'b1; + pwr_clamp_env_q <= 1'b1; + core_clk_en_q <= 1'b0; + io_clk_en_q <= 1'b0; + usb_clk_en_q <= 1'b0; + req_pwrup_q <= 1'b0; + ack_pwrdn_q <= 1'b0; + fsm_invalid_q <= 1'b0; + end else begin + cause_q <= cause_d; + cause_toggle_q <= cause_toggle_d; + pd_nq <= pd_nd; + pwr_clamp_q <= pwr_clamp_d; + pwr_clamp_env_q <= pwr_clamp_env_d; + core_clk_en_q <= core_clk_en_d; + io_clk_en_q <= io_clk_en_d; + usb_clk_en_q <= usb_clk_en_d; + req_pwrup_q <= req_pwrup_d; + ack_pwrdn_q <= ack_pwrdn_d; + fsm_invalid_q <= fsm_invalid_d; + end + end + + // SEC_CM: FSM.SPARSE + `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, slow_pwr_state_e, SlowPwrStateReset) + + always_comb begin + state_d = state_q; + cause_d = cause_q; + pd_nd = pd_nq; + cause_toggle_d = cause_toggle_q; + pwr_clamp_d = pwr_clamp_q; + pwr_clamp_env_d = pwr_clamp_env_q; + + req_pwrup_d = req_pwrup_q; + ack_pwrdn_d = ack_pwrdn_q; + fsm_invalid_d = fsm_invalid_q; + + set_main_pok = '0; + + clk_active = '0; + + unique case(state_q) + + SlowPwrStateReset: begin + state_d = SlowPwrStateMainPowerOn; + cause_d = Por; + end + + SlowPwrStateLowPower: begin + // reset request behaves identically to a wakeup, other than the power-up cause being + // different + if (wakeup_i || reset_req_i) begin + state_d = SlowPwrStateMainPowerOn; + cause_toggle_d = ~cause_toggle_q; + cause_d = reset_req_i ? Reset : Wake; + end + end + + SlowPwrStateMainPowerOn: begin + pd_nd = 1'b1; + + if (main_pok_st) begin + set_main_pok = 1'b1; + pwr_clamp_env_d = 1'b0; + state_d = SlowPwrStatePwrClampOff; + end + end + + SlowPwrStatePwrClampOff: begin + pwr_clamp_d = 1'b0; + state_d = SlowPwrStateClocksOn; + end + + SlowPwrStateClocksOn: begin + clk_active = 1'b1; + + if (all_clks_valid) begin + state_d = SlowPwrStateReqPwrUp; + end + end + + SlowPwrStateReqPwrUp: begin + clk_active = 1'b1; + req_pwrup_d = 1'b1; + + // req_pwrdn_i should be 0 here to indicate + // the request from the previous round has definitely completed + if (ack_pwrup_i && !req_pwrdn_i) begin + req_pwrup_d = 1'b0; + state_d = SlowPwrStateIdle; + end + end + + SlowPwrStateIdle: begin + // ack_pwrup_i should be 0 here to indicate + // the ack from the previous round has definitively completed + clk_active = 1'b1; + + if (req_pwrdn_i && !ack_pwrup_i) begin + state_d = SlowPwrStateAckPwrDn; + end + end + + SlowPwrStateAckPwrDn: begin + clk_active = 1'b1; + ack_pwrdn_d = 1'b1; + + if (!req_pwrdn_i) begin + ack_pwrdn_d = 1'b0; + state_d = SlowPwrStateClocksOff; + end + end + + SlowPwrStateClocksOff: begin + if (all_clks_invalid) begin + // if main power is turned off, assert early clamp ahead + pwr_clamp_env_d = ~main_pd_ni; + state_d = SlowPwrStatePwrClampOn; + end + end + + SlowPwrStatePwrClampOn: begin + // if main power is turned off, assert clamp ahead + pwr_clamp_d = pwr_clamp_env_q; + state_d = SlowPwrStateMainPowerOff; + end + + SlowPwrStateMainPowerOff: begin + pd_nd = main_pd_ni; + + // Proceed if power is already off, or if there was no intent to + // turn off the power. + if (!main_pok_st | main_pd_ni) begin + state_d = SlowPwrStateLowPower; + end + end + + // Very terminal state, kill everything + // Signal the fast FSM if it somehow is still running. + // Both FSMs are now permanently out of sync and the device + // must be rebooted. + // SEC_CM: FSM.TERMINAL + default: begin + fsm_invalid_d = 1'b1; + pd_nd = 1'b0; + pwr_clamp_d = 1'b1; + end + endcase // unique case (state_q) + end // always_comb + + // If the main_pok ever drops, capture that glitch + // and hold onto it for reset escalation + always_ff @(posedge clk_i or negedge rst_main_ni) begin + if (!rst_main_ni) begin + async_main_pok_st <= '0; + end else begin + async_main_pok_st <= ast_i.main_pok; + end + end + + // We need to synchronize the above because the reset + // may cause the signal to change at any time. + prim_flop_2sync # ( + .Width(1) + ) u_main_pok_sync ( + .clk_i, + .rst_ni, + .d_i(async_main_pok_st), + .q_o(main_pok_st) + ); + + // Determine when pok should be monitored + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + mon_main_pok <= '0; + end else if (!pd_nd && mon_main_pok) begin + mon_main_pok <= 1'b0; + end else if (set_main_pok) begin + mon_main_pok <= 1'b1; + end + end + + // power stability reset request + // If the main power becomes unstable for whatever reason, + // request reset + // SEC_CM: MAIN_PD.RST.LOCAL_ESC + logic pwr_rst_req; + assign pwr_rst_req = mon_main_pok & ~main_pok_st; + + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + rst_req_o <= '0; + end else if (clr_req_i) begin + rst_req_o <= '0; + end else begin + rst_req_o <= rst_req_o | pwr_rst_req; + end + end + + assign pwrup_cause_o = cause_q; + assign pwrup_cause_toggle_o = cause_toggle_q; + assign req_pwrup_o = req_pwrup_q; + assign ack_pwrdn_o = ack_pwrdn_q; + assign fsm_invalid_o = fsm_invalid_q; + + assign ast_o.core_clk_en = core_clk_en_q; + assign ast_o.io_clk_en = io_clk_en_q; + // usb's enable is handshake with pwr_fsm, as it can be turned on/off + // outside of the normal low power sequence + prim_flop #( + .Width(1), + .ResetValue('0) + ) u_usb_clk_en ( + .clk_i, + .rst_ni, + // immediate enable + // graceful disable when status is 0 + .d_i(usb_clk_en_q | usb_ip_clk_status_i), + .q_o(ast_o.usb_clk_en) + ); + assign usb_ip_clk_en_o = usb_clk_en_q; + + assign ast_o.main_pd_n = pd_nq; + assign ast_o.pwr_clamp_env = pwr_clamp_env_q; + assign ast_o.pwr_clamp = pwr_clamp_q; + // This is hardwired to 1 all the time + assign ast_o.slow_clk_en = 1'b1; + + + //////////////////////////// + /// Unused + //////////////////////////// + + logic unused_slow_clk_val; + assign unused_slow_clk_val = ast_i.slow_clk_val; + + //////////////////////////// + /// Assertion + //////////////////////////// + // Under normal circumstances, this should NEVER fire + // May need to add a signal to disable this check for simulation + `ASSERT(IntRstReq_A, pwr_rst_req == '0) + +endmodule diff --git a/src/pwrmgr/rtl/pwrmgr_wake_info.sv b/src/pwrmgr/rtl/pwrmgr_wake_info.sv new file mode 100644 index 000000000..ada62ea1d --- /dev/null +++ b/src/pwrmgr/rtl/pwrmgr_wake_info.sv @@ -0,0 +1,74 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Power Manager Wake Information +// + +`include "prim_assert.sv" + +module pwrmgr_wake_info import pwrmgr_pkg::*; import pwrmgr_reg_pkg::*; +( + input clk_i, + input rst_ni, + input wr_i, + input [TotalWakeWidth-1:0] data_i, + input start_capture_i, + input record_dis_i, + input [NumWkups-1:0] wakeups_i, + input fall_through_i, + input abort_i, + output pwrmgr_hw2reg_wake_info_reg_t info_o +); + + logic record_en; + + // detect rising edge of start_capture_i + logic start_capture_q1, start_capture; + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + start_capture_q1 <= 1'b1; + end else begin + start_capture_q1 <= start_capture_i; + end + end + + assign start_capture = start_capture_i & ~start_capture_q1; + + // generate the record enbale signal + // HW enables the recording + // Software can suppress the recording or disable it + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + record_en <= 1'b0; + end else if (start_capture && !record_dis_i) begin + // if not disabled by software + // a recording enable puls by HW starts recording + record_en <= 1'b1; + end else if (record_dis_i && record_en) begin + // if recording is already ongoing + // a disable command by software shuts things down + record_en <= 1'b0; + end + end + + logic [TotalWakeWidth-1:0] info; + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + info <= '0; + end else if (wr_i) begin + info <= info & ~data_i; // W1C + end else if (record_en) begin // If set once, hold until clear + info[0 +: NumWkups] <= info[0 +: NumWkups] | wakeups_i; + info[NumWkups +: 2] <= info[NumWkups +: 2] | {abort_i, fall_through_i}; + end + end + + // assign outputs + assign info_o.abort.d = info[NumWkups + 1]; + assign info_o.fall_through.d = info[NumWkups]; + assign info_o.reasons = info[NumWkups-1:0]; + + + +endmodule diff --git a/src/pwrmgr/util/reg_pwrmgr.py b/src/pwrmgr/util/reg_pwrmgr.py new file mode 100755 index 000000000..736fbb81f --- /dev/null +++ b/src/pwrmgr/util/reg_pwrmgr.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +r"""Convert mako template to Hjson register description +""" +import argparse +import sys +from io import StringIO + +from mako.template import Template + + +def main(): + parser = argparse.ArgumentParser(prog="reg_pwrmgr") + parser.add_argument('input', + nargs='?', + metavar='file', + type=argparse.FileType('r'), + default=sys.stdin, + help='input template file') + parser.add_argument('--n_wkups', + type=int, + default=16, + help='Number of Wakeup sources') + + args = parser.parse_args() + + # Determine output: if stdin then stdout if not then ?? + out = StringIO() + + reg_tpl = Template(args.input.read()) + out.write( + reg_tpl.render(NumWkups=args.n_wkups)) + + print(out.getvalue()) + + out.close() + + +if __name__ == "__main__": + main() diff --git a/src/tlul/BUILD b/src/tlul/BUILD new file mode 100644 index 000000000..ca0cd07d7 --- /dev/null +++ b/src/tlul/BUILD @@ -0,0 +1,12 @@ +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 + +package(default_visibility = ["//visibility:public"]) + +filegroup( + name = "all_files", + srcs = glob(["**"]) + [ + "//hw/ip/tlul/data:all_files", + ], +) diff --git a/src/tlul/README.md b/src/tlul/README.md new file mode 100644 index 000000000..98509a244 --- /dev/null +++ b/src/tlul/README.md @@ -0,0 +1,694 @@ +# Bus Specification + +# Overview + +This document specifies the bus functionality within a Comportable top level +system. This includes the bus protocol and all hardware IP that supports +creating the network on chip within that framework. + +## Features + +- Support for multiple bus hosts and bus devices1 +- Support for multiple clock domains +- Support for multiple outstanding requests +- Extendability for 32b or 64b data widths +- Extendability for flexible address widths +- Extendability for security features +- Low pin-count / area overhead +- Support for transaction sizes up to bus width (byte, 2B, 4B); no + support for bursts +- Suite of bus primitives to aid in fast fabric generation + +1lowRISC is avoiding the fraught terms master/slave and defaulting +to host/device where applicable. + +## Description + +For chip-level interconnect, Comportable devices will be using +[TileLink](https://static.dev.sifive.com/docs/tilelink/tilelink-spec-1.7-draft.pdf) +as its bus fabric protocol. For the purposes of our performance +requirement needs, the Uncached Lightweight (TL-UL) variant will +suffice. There is one minor modification to add the user extensions. This +is highlighted below, but otherwise all functionality follows the official +specification. The main signal names are kept the same as TL-UL and the +user extension signal groups follow the same timing and naming conventions +used in the TL-UL specification. Existing TL-UL IP blocks may be used +directly in devices that do not need the additional sideband signals, +or can be straightforwardly adapted to use the added features. + +TL-UL is a lightweight bus that combines the point-to-point +split-transaction features of the powerful TileLink (or AMBA AXI) +5-channel bus without the high pin-count overhead. It is intended to be +about on par of pincount with APB but with the transaction performance of +AXI-4, modulo the following assumptions. + +- Only one request (read or write) per cycle +- Only one response (read or write) per cycle +- No burst transactions + +Bus primitives are provided in the lowRISC IP library. These are +described later in this document. These primitives can be combined to form +a flexible crossbar of any M hosts to any N devices. As of this writing, +these crossbars are generated programmatically through usage of configuration files. +See the [tlgen reference manual](../../../util/tlgen/README.md) for more details. + +## Compatibility + +With the exception of the user extensions, the bus is +compliant with TileLink-UL. The bus primitives, hosts and peripherals +developed using the extended specification can be used with +blocks using the base specification. As a receiver baseline blocks +ignore the user signals and as a +source will generate a project-specific default value. Alternatively, +the blocks can be easily modified to make use of the user extensions. + +# Theory of Operations + +## Signals + +The table below lists all of the TL-UL signals. "Direction" is +w.r.t. a bus host, signals marked as output will be in the verilog +`typedef struct` tagged as host-to-device (`tl_h2d_t`) and those marked +as input will be in the device-to-host struct (`tl_d2h_t`). The literal +`typedef structs` follow. Size qualifiers are described below. The table +and structs include the additional (non-TL-UL standard) user extension +signals per direction to carry chip specific user bits. + +The function of the user bits are separately described in a separate table. + +| Signal Name | Direction | Description | +| --- | --- | --- | +| `a_valid` | output | Request from host is valid | +| `a_ready` | input | Request from host is accepted by device | +| `a_opcode[2:0]` | output | Request opcode (read, write, or partial write) | +| `a_param[2:0]` | output | unused | +| `a_address[AW-1:0]` | output | Request address of configurable width | +| `a_data[DW-1:0]` | output | Write request data of configurable width | +| `a_source[AIW-1:0]` | output | Request identifier of configurable width | +| `a_size[SZW-1:0]` | output | Request size (requested size is 2^`a_size`, thus 0 = byte, 1 = 16b, 2 = 32b, 3 = 64b, etc) | +| `a_mask[DBW-1:0]` | output | Write strobe, one bit per byte indicating which lanes of data are valid for this write request | +| `a_user` | output | Request attributes of configurable width, use TBD. **This is an augmentation to the TL-UL specification.** | +| `d_valid` | input | Response from device is valid | +| `d_ready` | output | Response from device is accepted by host | +| `d_opcode[2:0]` | input | Response opcode (Ack or Data) | +| `d_error` | input | Response is in error | +| `d_param[2:0]` | input | Response parameter (unused) | +| `d_size[SZW-1:0]` | input | Response data size | +| `d_data[DW-1:0]` | input | Response data of configurable width | +| `d_source[AIW-1:0]` | input | Bouncing of request ID of configurable width | +| `d_sink[DIW-1:0]` | input | Response ID of configurable width (possibly unused) | +| `d_user[DUW-1:0]` | input | Response attributes of configurable width; includes error responses plus other attributes TBD. **This is an augmentation to the TL-UL specification.** | + +The `a_user` bus contains several signals +- `instr_type` - controls whether the transaction is an instruction fetch type +- `cmd_intg` - carries the command integrity of the transaction +- `data_intg` - carries the write data integrity of the transaction + +The `d_user` bus contains several signals +- `rsp_intg` - carries the response integrity of the transaction +- `data_intg` - carries the read data integrity of the transaction + +The user bus is primarily used to distinguish data / instruction transactions while also supporting the bus integrity scheme. + +There are eight bus width parameters, defined here. Some are generated +widths based upon the other parameter sizes. + +- `AW`: width of address bus, default 32 +- `DW`: width of data bus, default 32 +- `DBW`: number of data bytes, generated == `DW/8` +- `SZW`: size width, covers 2^(x) <= `DBW`; (2 bit for 4B) +- `AIW`: width of address source (ID) bus, default 8 +- `DUW`: width of device user bits, default 4 +- `DIW`: width of sink bits, default 1 + +All widths are expected to be fixed for an entire project and referred +to in (what is currently called) `top_pkg`. The contents of `top_pkg` +(to define the widths) and `tlul_pkg` (to define the bus structs) are +given below. + +### Reset Timing + +Section 3.2.2 of the +[TileLink specification (1.7.1)](https://sifive.cdn.prismic.io/sifive%2F57f93ecf-2c42-46f7-9818-bcdd7d39400a_tilelink-spec-1.7.1.pdf) +has a requirement on TL-UL hosts ("masters" in TileLink terminology) that "`valid` signals must be driven LOW for at least 100 cycles while reset is asserted." +The TL-UL collateral within this library does **not** have this requirement on its TL-UL host drivers. +TL-UL devices within the library can tolerate shorter reset windows. +(See the reset section of the [Comportability Specification](../../../doc/contributing/hw/comportability/README.md) +for details on reset requirements.) + +### Signal and Struct Definitions + +The following shows Verilog structs to define the above parameters +and signals. + +```systemverilog +package top_pkg; + localparam TL_AW=32; + localparam TL_DW=32; + localparam TL_AIW=8; + localparam TL_DIW=1; + localparam TL_DUW=4; + localparam TL_DBW=(TL_DW>>3); + localparam TL_SZW=$clog2($clog2(TL_DBW)+1); +endpackage +``` + +```systemverilog +package tlul_pkg; + typedef enum logic [2:0] { + PutFullData = 3'h 0, + PutPartialData = 3'h 1, + Get = 3'h 4 + } tl_a_op_e; + typedef enum logic [2:0] { + AccessAck = 3'h 0, + AccessAckData = 3'h 1 + } tl_d_op_e; + + typedef struct packed { + logic [6:0] rsvd1; // Reserved for future use + logic parity_en; + logic [7:0] parity; // Use only lower TL_DBW bit + } tl_a_user_t; + + typedef struct packed { + logic a_valid; + tl_a_op_e a_opcode; + logic [2:0] a_param; + logic [top_pkg::TL_SZW-1:0] a_size; + logic [top_pkg::TL_AIW-1:0] a_source; + logic [top_pkg::TL_AW-1:0] a_address; + logic [top_pkg::TL_DBW-1:0] a_mask; + logic [top_pkg::TL_DW-1:0] a_data; + tl_a_user_t a_user; + + logic d_ready; + } tl_h2d_t; + + typedef struct packed { + logic d_valid; + tl_d_op_e d_opcode; + logic [2:0] d_param; + logic [top_pkg::TL_SZW-1:0] d_size; + logic [top_pkg::TL_AIW-1:0] d_source; + logic [top_pkg::TL_DIW-1:0] d_sink; + logic [top_pkg::TL_DW-1:0] d_data; + logic [top_pkg::TL_DUW-1:0] d_user; + logic d_error; + + logic a_ready; + } tl_d2h_t; + +endpackage +``` + +### Usage of Signals + +#### Usage of Address + +All signaling for host-request routing is encapsulated in the `a_addr` signal. +(See section 5.3 of the TileLink specification). +For a bus host to designate which device it is talking to, it only needs to indicate the correct device register/memory address. +The other host signals (namely `a_source` and `a_user`) do not enter into the address calculation. +All request steering must thus be made as a function of the address. + +#### Usage of Source and Sink ID Bits + +The `a_source` and `d_source` signals are used to steer the response from +a device back to a host through bus primitives. (See primitives section +that follows). It can also be used to ascribe request identifiers by a +host when response reordering is required (since TL-UL does not guarantee +in-order responses). For permission detection, static host identifiers +will be transmitted in the user field (see below). + +Some bus primitives, such as `M:1` sockets, need to add source bits +during request routing in order to be able to correctly route the +response. For instance, if one destination is addressed by N potential +hosts, log2N more source ID bits need to be added to the +outgoing request. The fabric architect needs to ensure that the attribute +`AIW` is big enough to cover the number of outstanding requests hosts +can make and the maximum source ID growth that could be added by bus +primitives. At this time, `AIW` is assumed to be 8 bits of ID growth, but +this is likely overkill. The fabric also needs to allow for how many host +ID bits are needed, for instance if converting from an AXI host that uses +`RID` or `WID`, enough bits must be provided to maintain those ID values. + +##### Source ID growth + +When a bus primitive needs to add source ID bits, it shifts left the +incoming `a_source` and post-pends its necessary sub-source bits. For +instance, if a 5:1 socket is needed, 3 sub-source bits are generated to +distinguish between hosts 0 through 4. So an 8-bit outgoing `a_source` +would be `{a_source_inbound[4:0],subsource[2:0]}`. When the response +returns, those 3 sub-source bits are shifted off, with `'0'` bits +shifted into the top, and returned to the originator's `d_source`. It +is recommended to have assertions in place to ensure no significant bits +of `a_source` are lost in `M:1` sockets. See the `M:1` socket primitive +for more details. + +##### Source ID requirements for host elements + +The potential for source ID growth (and contraction in the response) +implies that hosts may only use the low bits of the identifier and cannot +assume the entire `AIW` bits will be returned intact. If there are any hosts +that need more source bits returned than the host's maximum number of +outstanding transactions (for example the host uses some source bits as +internal sub-unit identifiers and some bits as transaction IDs from that +subunit) then the `AIW` value needs to be set accordingly. + +##### Source ID requirements for device elements + +All bus devices must simply return the associated `a_source` on the +response `d_source` bus. + +##### Source ID requirements for bus primitives + +Most bus primitives simply pass source ID bits opaquely from host end to +device end. The exception is for `M:1` sockets (see ID growth above). Other +elements (`1:N` sockets, domain crossing FIFOs, etc) should not modify +the `a_source` and `d_source` values, but pass them along. + +##### Sink ID Usage + +At this time there is no defined use for `d_sink`, but the TileLink-UL +protocol allows configurable bits to be passed back to the host to +indicate who responded. In theory this could be used as a security +guarantee, to ensure that the appropriate responder was targeted. At +this time the configurable width for sink is turned down to one bit. + +#### Usage of User Bits + +User bits are added to the TileLink-UL specification in order to prepare +for command and response modification in future IP. These are effectively +modifiers to the transactions that can qualify the request and the +response. The user bits follow the same timing as the source ID bits: +`a_user` matches `a_source` and `d_user` matches `d_source`. Usage of +user bits within a project must be assigned project-wide, but the bus +fabric does not rely on them for transport, and should pass the user +bits on blindly. Bus hosts and devices must understand their usage and +apply them appropriately. + +The following list gives examples of future usage for `a_user` and +`d_user` bits. + +- `a_user` modifications + - Instruction Type + - This indicates whether the transaction originates from a code fetch or data fetch. + - This attribute is used by downstream consumers to provide separate privilege control based on transaction type. + - Command Integrity + - This is the calculated integrity of the instruction type, transaction address, transaction op code and mask. + - The integrity is checked by downstream consumers to ensure the transaction has not been tampered. + + - Data Integrity + - This is calculated integrity of the write data. + - The integrity is checked by downstream consumers to ensure the transaction has not been tampered. + +- `d_user` modifications + - Response Integrity + - This is the calculated integrity of the response op code, response size and response error. + - This integrity is checked by the transaction originator to ensure the response has not been tampered. + + - Data Integrity + - This is the calculated integrity of the response read data. + - This integrity is checked by the transaction originator to ensure the response has not been tampered. + +#### Usage of Opcode, Size and Mask + +The request opcode (`a_opcode`) can designate between a write (`'Put'`) +and a read (`'Get'`) transaction. Writes can be designated as full +(`'PutFullData'`) or partial (`'PutPartialData'`) within the opcode +space. The request size (`a_size`) and mask (`a_mask`) is defined for +all read and write operations. Opcode (`a_opcode`) definitions are +shown below. Responses also have opcodes (`d_opcode`) to indicate read +response (`'AccessAckData'`) and write response (`'AccessAck'`). Error +indications are available on either with the `d_error` bit. Each bus +device has an option to support or not support the full variety of +bus transaction sizes. Their support will be documented in the device +specification. + +It should be noted that, even though non-contiguous `a_mask` values like +`0b1001` are permitted by the TL-UL spec, the TL-UL hosts within this project +**do not leverage non-contiguous masks**. I.e., the TL-UL hosts will only assert +`a_mask` values from the following restricted set for 32bit transfers: +``` +{'b0000, 'b0001, 'b0010, 'b0100, 'b1000, 'b0011, 'b0110, 'b1100, 'b0111, 'b1110, 'b1111}. +``` +The TL-UL devices within the project may or may not support certain subword +masks (both non-contiguous or contiguous ones), and they have the right to +assert `d_error` if they don't. + +| `a_opcode[2:0]` value | Name | Definition | +| :---: | :---: | --- | +| `3'b000` | `PutFullData` | Write of full bus width. `a_size` should be `'h2` to indicate 32b write (or `'h3` if/when 64b bus width is supported), though the bus specification allows these to be defined otherwise (see `PutPartialData` below) | +| `3'b001` | `PutPartialData` | Write of partial bus width. `a_size[SZW-1:0]` indicates how many bytes are transmitted. The encoding is `2^a_size` so `'h0` indicates 1 byte, `'h1` indicates 2 bytes, `'h2` indicates 4 bytes, etc. The lower bits of `a_address` are valid to indicate sub-word addressing, and the bits of `a_mask[DBW-1:0]` should indicate valid byte lanes. | +| `3'b100` | `Get` | Read of full bus width. The bus specification allows these to be defined otherwise (see PutPartialData above) for reads of sub-bus-width. | +| `3'b01x, 3'b101, 3'b11x` | `undefined` | All other opcodes are undefined. Bus devices should return an error. | + +| `d_opcode[2:0]` value | Name | Definition | +| :---: | :---: | --- | +| `3'b000` | `AccessAck` | Write command acknowledgement, no data | +| `3'b001` | `AccessAckData` | Read command acknowledgement, data valid on `d_data` | +| `3'b01x, 3'b1xx` | `undefined` | All other opcodes are undefined and should return an error. | + +#### Explicit Error Cases + +The TL-UL devices in this project contain a set of HW protocol checkers that raise a runtime error (`d_error`) if the request is in violation. +In particular, the following properties are checked: + +1. Wrong opcode, +2. Wrong combination of `a_addr[1:0]`, `a_size`, `a_mask`, for example: + - `a_size` must not be greater than `2`, + - Inactive lanes must be marked with `'b0` in `a_mask`, + - `PutFullData` must mark all active lanes with a `'b1` in `a_mask`, +3. Non-contiguous mask may lead to an error, depending on the device support (see previous section), +4. Register files always assume aligned 32bit accesses, see also [register tool manual](../../../util/reggen/README.md#error-responses), +5. Accesses to non-existent addresses. + +On the host side, orphaned responses (i.e. responses that do not have a valid request counterpart) and responses with the wrong opcode will be discarded. +It is planned to raise a critical hardware error that can be detected and reacted upon via other subsystems in those cases, but that feature has not been implemented yet. + +Note that the above checks also cover cases which are in principle allowed by the TL-UL spec, but are not supported by the hosts and devices within this project. +Further, devices and hosts may implement additional more restrictive checks, if needed. + +The remaining, basic properties as specified in the TL-UL spec are enforced at design time using assertions, and hence no additional hardware checkers are implemented to check for those properties (see also [TL-UL Protocol Checker Specification](./doc/TlulProtocolChecker.md)). + +The interconnect does not possess additional hardware mechanisms to detect and handle interconnect deadlocks due to malicious tampering attempts. +The reasons for this are that +1. the space of potential errors and resolutions would be very large, thus unnecessarily complicating the design, +2. any tampering attempt leading to an unresponsive system will eventually be detected by other subsystems within the top level system. + +### Bus Integrity Scheme +To be filled in. + + +## Timing Diagrams + +This section shows the timing relationship on the bus for writes with +response, and reads with response. This shows a few transactions, see +the TileLink specification for more examples. + +```wavejson +{ + signal: [ + { name: 'clk_i', wave: 'p...................' }, + { name: 'a_valid', wave: '0.1....0101...0.....' }, + { name: 'a_ready', wave: '0.1..01010...10.....' }, + { name: 'a_source', wave: '0.3333.0303...0.....', data: ['I0','I1','I2','I3','I4','I5'] }, + { name: 'a_opcode', wave: '0.3..3.0303...0.....', data: ['put-full','put-partial','pf', 'put-partial'] }, + { name: 'a_addr', wave: '703333.0303...7.....', data: ['A0', 'A1','A2','A3','A4','A5'] }, + { name: 'a_data', wave: '703333.0303...7.....', data: ['D0', 'D1','D2','D3','D4','D5'] }, + { name: 'a_size', wave: '703..3.0303...7.....', data: ['2', '0','2','1'] }, + { name: 'a_mask', wave: '7...03.7703...7.....', data: ['M3', 'M5'] }, + { name: 'a_user', wave: '0.3333.0303...0.....', data: ['AU0','AU1','AU2','AU3','AU4','AU5'] }, + {}, + { name: 'd_valid', wave: '0....1....0101....0.' }, + { name: 'd_ready', wave: '0......1..010...1.0.' }, + { name: 'd_source', wave: '7...03..330304...38.', data: ['I0','I1','I2','I3','I4','I5'] }, + { name: 'd_opcode', wave: '7...03....0304...38.', data: ['ACK','ACK','ACK'] }, + { name: 'd_user', wave: '7...03..330304...38.', data: ['DU0','DU1','DU2','DU3','DU4','DU5'] }, + { name: 'd_error', wave: '0............1...0..' }, + ], + head: { + text: 'TileLink-UL write transactions', + }, + foot: { + text: 'six write transactions (four full, two partial) with various req/ready delays, error on I4 response', + } +} +``` + +```wavejson +{ + signal: [ + { name: 'clk_i', wave: 'p...................' }, + { name: 'a_valid', wave: '0.1....0101...0.....' }, + { name: 'a_ready', wave: '0.1..01010...10.....' }, + { name: 'a_source', wave: '703333.0303...7.....', data: ['I0', 'I1','I2','I3','I4','I5'] }, + { name: 'a_opcode', wave: '0.3....0303...7.....', data: ['get', 'get', 'get'] }, + { name: 'a_addr', wave: '703333.0303...7.....', data: ['A0', 'A1','A2','A3','A4','A5'] }, + { name: 'a_user', wave: '703333.0303...7.....', data: ['AU0', 'AU1','AU2','AU3','AU4','AU5'] }, + {}, + { name: 'd_valid', wave: '0....1....0101....0.' }, + { name: 'd_ready', wave: '0......1..010...1.0.' }, + { name: 'd_source', wave: '7...03..330304...38.', data: ['I0', 'I1','I2','I3','I4','I5'] }, + { name: 'd_data', wave: '7...03..330304...38.', data: ['D0', 'D1','D2','D3','D4','D5'] }, + { name: 'd_opcode', wave: '7...03....0304...38.', data: ['DATA', 'DATA','DATA','DATA'] }, + { name: 'd_user', wave: '7...03..330304...38.', data: ['DU0', 'DU1','DU2','DU3','DU4','DU5'] }, + { name: 'd_error', wave: '0............1...0..', data: ['ACK', 'ACK','ACK','ACK','ERR','ACK'] }, + ], + head: { + text: 'TileLink-UL read transactions', + }, + foot: { + text: 'six read transactions with various req/ready delays, error on I4 response', + } +} +``` + +## Bus Primitives + +The bus primitives are defined in the following table and described in +detail below. + +| Element | Description | +| :---: | --- | +| `tlul_fifo_sync` | FIFO connecting one TL-UL host to one TL-UL device in a synchronous manner. Used to create elasticity in the bus, or as a sub-element within other elements. TL-UL protocol is maintained on both sides of the device. Parameters control many features of the FIFO (see detailed description that follows). | +| `tlul_fifo_async` | FIFO connecting one TL-UL host to one TL-UL device in an asynchronous manner. Used to create elasticity in the bus, or to cross clock domains, or as a sub-element within other elements. TL-UL protocol is maintained on both sides of the device. Parameters control many features of the FIFO (see detailed description that follows). | +| `tlul_socket_1n` | Demultiplexing element that connects 1 TL-UL host to N TL-UL devices. TL-UL protocol is maintained on the host side and with all devices. Parameter settings control many of the features of the socket (see detailed description that follows). | +| `tlul_socket_m1` | Multiplexing element that connects M TL-UL hosts to 1 TL-UL device. TL-UL protocol is maintained with all hosts and on the device side. Parameter settings control many of the features of the socket (see detailed description that follows). | +| `tlul_xbar` | Crossbar that connects M TL-UL hosts with N TL-UL devices. The connectivity matrix may be sparse, and not all nodes are required to be the same clock or reset domain. TL-UL protocol is maintained with all hosts and with all devices. Parameters and configuration settings control many of the features of the switch. This is not specified at this time, and will be done at a later date based upon project goals. | +| `tlul_adapter_sram` | Adapter that connects a TL-UL host to an sram type interface. | + +#### A Note on Directions + +In each of these devices, ports are named with respect to their usage, +not their direction. For instance, a `1:N` socket connects one host to +N devices. Thus the TL-UL port coming in is called the "host bus", +and the N device ports are called "device bus" 0 through N-1. Within +the Verilog module, the "host bus" is actually a device in the sense +that it receives requests and returns responses. This terminology can be +confusing within the bus element itself but should maintain consistency +in naming at the higher levels. + +### `tlul_fifo_sync` + +The TL-UL FIFO is a `1:1` bus element that provides elasticity (the +ability for transactions to stall on one side without affecting the other +side) on the bus. It is also used as a sub-element in other elements, like +sockets. Parameterization of the module is described in the table below. + +| name | description | +| :---: | --- | +| `ReqPass` | If 1, allow requests to pass through the FIFO with no clock delay if the request FIFO is empty (this may have timing implications). If false, at least one clock cycle of latency is created. Default is 1. | +| `RspPass` | If 1, allow responses to pass through the FIFO with no clock delay if the response FIFO is empty (this may have timing implications). If false, at least one clock cycle of latency is created. Default is 1. | +| `ReqDepth[4]` | Depth of request FIFO. Depth of zero is allowed only if `ReqPass` is 1. The maximum value for `ReqDepth` is 15. Default is 2. | +| `RspDepth[4]` | Depth of response FIFO. Depth of zero is allowed only if `RspPass` is 1. The maximum value for `RspDepth` is 15. Default is 2. | +| `SpareReqW` | The FIFO has spare bits in the request direction for auxiliary use by other bus elements. This parameter defines the size, default 1, must be >= 1 to avoid compilation errors. If the bit is not needed, the spare input should be tied to zero, and the spare output ignored. | +| `SpareRspW` | The FIFO has spare bits in the response direction for auxiliary use by other bus elements. This parameter defines the size, default 1, must be >= 1 to avoid compilation error. If the bit is not needed, the spare input should be tied to zero, and the spare output ignored. | + +When `Pass` is 1 and its corresponding `Depth` is 0, the FIFO feeds through the signals completely. +This allows more flexible control at compile-time on the FIFO overhead / latency trade-off without needing to re-code the design. + +The IO of the module are given in this table. See the struct above for +TL-UL typedef definitions. + +| direction | type / size | name | description | +| :---: | :---: | :---: | --- | +| `input` | | `clk_i` | clock | +| `input` | | `rst_ni` | active low reset | +| `input` | `tl_h2d_t` | `tl_h_i` | Incoming host request struct | +| `output` | `tl_d2h_t` | `tl_h_o` | Outgoing host response struct | +| `output` | `tl_h2d_t` | `tl_d_o` | Outgoing device request struct | +| `input` | `tl_d2h_t` | `tl_d_i` | Incoming device response struct | +| `input` | `[SpareReqW-1:0]` | `spare_req_i` | Spare request bits in| +| `output` | `[SpareReqW-1:0]` | `spare_req_o` | Spare request bits out | +| `input` | `[SpareRspW-1:0]` | `spare_rsp_i` | Spare response bits in | +| `output` | `[SpareRspW-1:0]` | `spare_rsp_o` | Spare response bits out | + +### `tlul_fifo_async` + +The TL-UL asynchronous FIFO is a `1:1` bus element that can be used to +cross clock domains. Parameterization of the module is described in the +table below. + +| name | description | +| :---: | --- | +| `ReqDepth[4]` | Depth of request FIFO. Depth of request FIFO. ReqDepth must be >= 2, and the maximum value is 15. | +| `RspDepth[4]` | Depth of response FIFO. RspDepth must be >= 2, and the maximum value is 15. | + +The IO of the module are given in this table. See the struct above for +TL-UL typedef definitions. + +| direction | type / size | name | description | +| :---: | :---: | :---: | --- | +| `input` | | `clk_h_i` | Host side clock | +| `input` | | `rst_h_ni` | Host side active low reset | +| `input` | | `clk_d_i` | Device side clock | +| `input` | | `rst_d_ni` | Device side active low reset | +| `input` | `tl_h2d_t` | `tl_h_i` | Incoming host request struct | +| `output` | `tl_d2h_t` | `tl_h_o` | Outgoing host response struct | +| `output` | `tl_h2d_t` | `tl_d_o` | Outgoing device request struct | +| `input` | `tl_d2h_t` | `tl_d_i` | Incoming device response struct | + +### `tlul_socket_1n` + +The TL-UL socket `1:N` is a bus element that connects 1 TL-UL host +to N TL-UL devices. It is a fundamental building block of the TL-UL +switch, and uses `tlul_fifo_sync` as its building block. It has a +several parameterization settings available, summarized here. Note +`tlul_socket_1n` is always synchronous. If asynchronous behavior is +desired, an `tlul_fifo_async` should be placed on the desired bus. + +| name | description | +| :---: | --- | +| `N` | Number of devices the socket communicates with, 2 <= N <= 15. | +| `HReqPass` | If 1, allow requests to pass through the host-side FIFO with no clock delay if the request FIFO is empty. If 0, at least one clock cycle of latency is created. Default is 1. | +| `HRspPass` | If 1, allow responses to pass through the host-side FIFO with no clock delay if the response FIFO is empty. If 0, at least one clock cycle of latency is created. Default is 1. | +| `HReqDepth[4]` | Depth of host-side request FIFO. Depth of zero is allowed if `ReqPass` is 1. A maximum value of 15 is allowed, default is 2. | +| `HRspDepth[4]` | Depth of host-side response FIFO. Depth of zero is allowed if `RspPass` is 1. A maximum value of 15 is allowed, default is 2. | +| `DReqPass[N]` | If 1, allow requests to pass through device i FIFO with no clock delay if the request FIFO is empty. If false, at least one clock cycle of latency is created. Default is 1. | +| `DRspPass[N]` | If 1, allow responses to pass through the device i FIFO with no clock delay if the response FIFO is empty. If 0, at least one clock cycle of latency is created. Default is 1. | +| `DReqDepth[N*4]` | Depth of device i request FIFO. Depth of zero is allowed if `ReqPass` is 1. A maximum value of 15 is allowed, default is 2. | +| `DRspDepth[N*4]` | Depth of device i response FIFO. Depth of zero is allowed if `RspPass` is 1. A maximum value of 15 is allowed, default is 2. | + +The diagram below shows the dataflow of the `tlul_socket_1n` and how +the `tlul_fifo_sync` modules are allocated. + +![tlul_socket_1n block diagram](./doc/tlul_socket_1n.svg) + +In this diagram, the full socket (`1:4` in this case) is shown, with +its single host port and four device ports. Also shown is the critical +device select input, which controls the transaction steering. To allow +flexibility the address decoding is done outside the socket. The TL-UL +specification requires that the decode only use the address bits, but no +other constraints are placed on how the external decode logic converts +the address to the output device selection signal (`dev_sel`). The +timing of `dev_sel` is such that it must be valid whenever `a_valid` +is true in order to steer the associated request. + +The address decoder can trigger an error response: if the value of +`dev_sel` is not between 0 and N-1, then `tlul_socket_1n` will provide +the error response to the request. This is implemented with a separate +piece of logic inside the socket which handles all requests to `dev_sel >= +N` and replies with an error. + +The IO of the socket are given in this table. See the struct above for +TL-UL `typedef` definitions. + +| direction | type / size | name | description | +| :---: | :---: | :---: | --- | +| `input` | | `clk_i` | clock | +| `input` | | `rst_ni` | active low reest | +| `input` | `tl_h2d_t` | `tl_h_i` | incoming host request struct | +| `output` | `tl_d2h_t` | `tl_h_o` | outgoing host response struct | +| `output` | `tl_h2d_t` | `tl_d_o[N]` | Outgoing device request struct for device port *i* (where *i* is from 0 to *N-1*) | +| `input` | `tl_d2h_t` | `tl_d_i[N]` | Incoming device response struct for device port *i* (where *i* is from 0 to *N-1*) | +| `input` | `[log2(N+1)-1:0]` | `dev_sel` | Device select for the current transaction provided in `tl_h_i` bus. Legal values from 0 to N-1 steer to the corresponding device port. Any other value returns an automatic error response. | + +In the current implementation, outstanding requests are tracked so that +no new requests can go to a device port if there already are outstanding +requests to a different device. This ensures that all transactions are +returned in order. This feature is still in discussion. + +### `tlul_socket_m1` + +The TL-UL socket `M:1` is a bus element that connects `M` TL-UL +hosts to 1 TL-UL device. Along with a `tlul_socket_1n`, this could +be used to build the TL-UL fabric, and uses `tlul_fifo` as its +building block. `tlul_socket_m1` has several parameterization settings +available. The `tlul_socket_m1` is synchronous, so a `tlul_fifo_async` +must be instantiated on any ports that run asynchronously. + +| name | description | +| :---: | --- | +| `M` | Number of hosts the socket communicates with, 2 <= M <= 15. | +| `HReqPass[M]` | `M` bit array to allow requests to pass through the host i FIFO with no clock delay if the request FIFO is empty. If `1'b0`, at least one clock cycle of latency is created. Default is `1'b1`. | +| `HRspPass[M]` | `M` bit array. If `bit[i]=1`, allow responses to pass through the host *i* FIFO with no clock delay if the response FIFO is empty. If false, at least one clock cycle of latency is created. Default is 1. | +| `HReqDepth[4*M]` | `Mx4` bit array. `bit[i*4+:4]` is depth of host *i* request FIFO. Depth of zero is allowed if `ReqPass` is true. A maximum value of 15 is allowed, default is 2. | +| `HRspDepth[4*M]` | `Mx4` bit array. `bit[i*4+:4]` is depth of host *i* response FIFO. Depth of zero is allowed if RspPass is true. A maximum value of 15 is allowed, default is 2. | +| `DReqPass` | If 1, allow requests to pass through device FIFO with no clock delay if the request FIFO is empty. If false, at least one clock cycle of latency is created. Default is 1. | +| `DRspPass` | If 1, allow responses to pass through the device FIFO with no clock delay if the response FIFO is empty. If false, at least one clock cycle of latency is created. Default is 1. | +| `DReqDepth[4]` | Depth of device i request FIFO. Depth of zero is allowed if `ReqPass` is true. A maximum value of 15 is allowed, default is 2. | +| `DRspDepth[4]` | Depth of device i response FIFO. Depth of zero is allowed if `RspPass` is true. A maximum value of 15 is allowed, default is 2. | + +The diagram below shows the dataflow of `tlul_socket_m1` for `4:1` +case and how the `tlul_fifo_sync` modules are allocated. + +![tlul_socket_m1 block diagram](./doc/tlul_socket_m1.svg) + +Requests coming from each host ports are arbitrated in the socket based +on round-robin scheme. `tlul_socket_m1`, unlike the `1:N` socket, doesn't +require the `dev_sel` input. As the request is forwarded, the request ID +(`a_source`) is modified as described in the ID Growth section. The ID +returned with a response (`d_source`) can thus be directly used to steer +the response to the appropriate host. + +The IO of `M:1` socket are given in this table. See the struct above for +TL `typedef` definitions. + +| direction | type / size | name | description | +| :---: | :---: | :---: | --- | +| `input` | | `clk_i` | clock | +| `input` | | `rst_ni` | active low reest | +| `input` | `tl_h2d_t` | `tl_h_i[M]` | unpacked array of incoming host request structs | +| `output` | `tl_d2h_t` | `tl_h_o[M]` | unpacked array of outgoing host response structs | +| `output` | `tl_h2d_t` | `tl_d_o` | outgoing device request struct | +| `input` | `tl_d2h_t` | `tl_d_i` | incoming device response struct | + +### `tlul_xbar` + +For details of the `tlul_xbar`, please refer to the [tlgen reference manual](../../../util/tlgen/README.md). +In general, tlgen stitches together various components described in the previous sections to create a full blown fabric switch. +Specifically, it implements the address to `dev_sel` steering logic and ensures the right connections are made from host to device. + + +### `tlul_adapter_sram` + +The TL-UL sram adapter is a bus element that connects a TL-UL interface to a memory like interface. +The memory interface is defined as follows: + +| name | direction | description | +| :---: | :---: | :---: | +| req | `output` | Memory interface transaction request | +| gnt | `input` | Memory interface transaction grant | +| we | `output` | Transaction write enable | +| addr | `output` | Transaction address | +| wdata | `output` | Transaction write data | +| wmask | `output` | Transaction write mask | +| rvalid | `input` | Transaction read valid from downstream | +| rdata | `input` | Transaction read data from downstream | +| rerror | `input` | Transaction read error from downstream | + +The diagram below is a block diagram that shows the construction of the adapter. +![tlul_adapter_sram_block diagram](./doc/tlul_adapter_sram.svg) + +All incoming transactions are checked for protocol errors and integrity. +The transactions are then forwarded to the `tlul_sram_byte` module, which determines whether the incoming transaction is a write, and whether the write transaction must be transformed to a read-modified-write. + +The transformation is done when integrity is enabled on the downstream storage and the incoming transaction is a legal partial write. +During this scenario, in order to correctly compute the storage integrity, the adapter must first read back whatever is present in memory so that the full integrity can be computed. +If an error is present during the protocol and integrity checks, or if the transaction is not a partial write (read or full write), then the transaction is passed through directly to the TL-UL-sram conversion. +If the transaction is a legal partial write, the `tlul_sram_byte` instead transforms the transaction into two: a full read followed by a full write for a read-modified-write of the intended address. + +Once past the `tlul_sram_byte`, a transaction accepted by downstream consumers has some of its attributes (type of operation, presence of error, size, source) stored in the `request fifo`. +This is needed to correctly construct the TL-UL d-channel response when the transaction is complete. + +The internally computed "read mask" is also stored in the `sramreqfifo` for read transactions. +This is needed to correctly mask off uninteresting bytes during a partial read. + +Any returning read data from downstream is stored inside the `rspfifo`. +This is needed in case the upstream TL-UL host back pressures the d-channel. + +#### Life of a Write Transaction +When a write transaction is received, the above steps are followed; however, nothing is stored in the `sramreqfifo`. +When downstream completes the write transaction, the stored `reqfifo` entry is used to construct the TL-UL response. +When the response is accepted by an upstream TL-UL host, the `reqfifo` entry popped. + +#### Life of a Read Transaction +When a read transaction is received, both the `reqfifo` and the `sramreqfifo` store a new entry. +The former stores transaction attributes, while the latter stores the read mask and read offset (in case the downstream read is larger than TL-UL bus width). +When downstream completes the read transaction through `rvalid_i`, the relevant data, as determined by the stored read mask and offset in `sramreqfifo`, is stored in the `rspfifo`. +The act of storing into the `rspfifo` also pops `sramreqfifo` entry. + +The `reqfifo` entry is used to construct the TL-UL response. +When the response is accepted by an upstream TL-UL host, the `reqfifo` and `rspfifo` entries are both popped. diff --git a/src/tlul/adapter_host.core b/src/tlul/adapter_host.core new file mode 100644 index 000000000..d08ee136e --- /dev/null +++ b/src/tlul/adapter_host.core @@ -0,0 +1,64 @@ +CAPI=2: +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +name: "lowrisc:tlul:adapter_host:0.1" +description: "Req/Grant/RValid to TL-UL adapter (host)" + +filesets: + files_rtl: + depend: + - lowrisc:prim:all + - lowrisc:tlul:common + - lowrisc:tlul:trans_intg + - lowrisc:constants:top_pkg + files: + - rtl/tlul_adapter_host.sv + file_type: systemVerilogSource + + files_verilator_waiver: + depend: + # common waivers + - lowrisc:lint:common + files: + - lint/tlul_adapter_host.vlt + file_type: vlt + + files_ascentlint_waiver: + depend: + # common waivers + - lowrisc:lint:common + files: + - lint/tlul_adapter_host.waiver + file_type: waiver + + files_veriblelint_waiver: + depend: + # common waivers + - lowrisc:lint:common + +parameters: + SYNTHESIS: + datatype: bool + paramtype: vlogdefine + + +targets: + default: &default_target + filesets: + - tool_verilator ? (files_verilator_waiver) + - tool_ascentlint ? (files_ascentlint_waiver) + - tool_veriblelint ? (files_veriblelint_waiver) + - files_rtl + toplevel: tlul_adapter_host + + lint: + <<: *default_target + default_tool: verilator + parameters: + - SYNTHESIS=true + tools: + verilator: + mode: lint-only + verilator_options: + - "-Wall" diff --git a/src/tlul/adapter_reg.core b/src/tlul/adapter_reg.core new file mode 100644 index 000000000..aab7657be --- /dev/null +++ b/src/tlul/adapter_reg.core @@ -0,0 +1,64 @@ +CAPI=2: +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +name: "lowrisc:tlul:adapter_reg:0.1" +description: "TL-UL to Register interface adapter" + +filesets: + files_rtl: + depend: + - lowrisc:prim:assert + - lowrisc:prim:secded + - lowrisc:tlul:common + - lowrisc:tlul:trans_intg + files: + - rtl/tlul_adapter_reg.sv + file_type: systemVerilogSource + + files_verilator_waiver: + depend: + # common waivers + - lowrisc:lint:common + files: + - lint/tlul_adapter_reg.vlt + file_type: vlt + + files_ascentlint_waiver: + depend: + # common waivers + - lowrisc:lint:common + files: + - lint/tlul_adapter_reg.waiver + file_type: waiver + + files_veriblelint_waiver: + depend: + # common waivers + - lowrisc:lint:common + +parameters: + SYNTHESIS: + datatype: bool + paramtype: vlogdefine + + +targets: + default: &default_target + filesets: + - tool_verilator ? (files_verilator_waiver) + - tool_ascentlint ? (files_ascentlint_waiver) + - tool_veriblelint ? (files_veriblelint_waiver) + - files_rtl + toplevel: tlul_adapter_reg + + lint: + <<: *default_target + default_tool: verilator + parameters: + - SYNTHESIS=true + tools: + verilator: + mode: lint-only + verilator_options: + - "-Wall" diff --git a/src/tlul/adapter_sram.core b/src/tlul/adapter_sram.core new file mode 100644 index 000000000..7107a0075 --- /dev/null +++ b/src/tlul/adapter_sram.core @@ -0,0 +1,64 @@ +CAPI=2: +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +name: "lowrisc:tlul:adapter_sram:0.1" +description: "TL-UL to SRAM adapter (device)" + +filesets: + files_rtl: + depend: + - lowrisc:prim:util + - lowrisc:prim:assert + - lowrisc:tlul:common + files: + - rtl/tlul_sram_byte.sv + - rtl/tlul_adapter_sram.sv + file_type: systemVerilogSource + + files_verilator_waiver: + depend: + # common waivers + - lowrisc:lint:common + files: + - lint/tlul_adapter_sram.vlt + file_type: vlt + + files_ascentlint_waiver: + depend: + # common waivers + - lowrisc:lint:common + files: + - lint/tlul_adapter_sram.waiver + file_type: waiver + + files_veriblelint_waiver: + depend: + # common waivers + - lowrisc:lint:common + +parameters: + SYNTHESIS: + datatype: bool + paramtype: vlogdefine + + +targets: + default: &default_target + filesets: + - tool_verilator ? (files_verilator_waiver) + - tool_ascentlint ? (files_ascentlint_waiver) + - tool_veriblelint ? (files_veriblelint_waiver) + - files_rtl + toplevel: tlul_adapter_sram + + lint: + <<: *default_target + default_tool: verilator + parameters: + - SYNTHESIS=true + tools: + verilator: + mode: lint-only + verilator_options: + - "-Wall" diff --git a/src/tlul/common.core b/src/tlul/common.core new file mode 100644 index 000000000..ebf18737f --- /dev/null +++ b/src/tlul/common.core @@ -0,0 +1,51 @@ +CAPI=2: +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +name: "lowrisc:tlul:common:0.1" +description: "TL-UL common building blocks" + +filesets: + files_rtl: + depend: + - lowrisc:dv:pins_if + - lowrisc:prim:assert + - lowrisc:prim:fifo + - lowrisc:tlul:headers + - lowrisc:tlul:trans_intg + files: + - rtl/tlul_fifo_sync.sv + - rtl/tlul_fifo_async.sv + - rtl/tlul_assert.sv + - rtl/tlul_err.sv + - rtl/tlul_assert_multiple.sv + file_type: systemVerilogSource + + files_verilator_waiver: + depend: + # common waivers + - lowrisc:lint:common + files: + - lint/tlul_common.vlt + file_type: vlt + + files_ascentlint_waiver: + depend: + # common waivers + - lowrisc:lint:common + files: + - lint/tlul_common.waiver + file_type: waiver + + files_veriblelint_waiver: + depend: + # common waivers + - lowrisc:lint:common + +targets: + default: + filesets: + - tool_verilator ? (files_verilator_waiver) + - tool_ascentlint ? (files_ascentlint_waiver) + - tool_veriblelint ? (files_veriblelint_waiver) + - files_rtl diff --git a/src/tlul/config/compile.yml b/src/tlul/config/compile.yml new file mode 100644 index 000000000..dec6e8e6a --- /dev/null +++ b/src/tlul/config/compile.yml @@ -0,0 +1,47 @@ +--- +provides: [tlul_pkg] +schema_version: 2.4.0 +requires: + - caliptra_prim_pkg +targets: + rtl: + directories: [$COMPILE_ROOT/rtl] + files: + - $COMPILE_ROOT/rtl/tlul_pkg.sv + - $COMPILE_ROOT/rtl/tlul_assert_multiple.sv + - $COMPILE_ROOT/rtl/tlul_assert.sv + tb: + directories: [$COMPILE_ROOT/rtl] + files: + - $COMPILE_ROOT/rtl/tlul_pkg.sv + - $COMPILE_ROOT/rtl/tlul_assert_multiple.sv + - $COMPILE_ROOT/rtl/tlul_assert.sv +--- +provides: [tlul] +schema_version: 2.4.0 +requires: + - caliptra_prim + - tlul_pkg +targets: + rtl: + directories: [$COMPILE_ROOT/rtl] + files: + - $COMPILE_ROOT/rtl/sram2tlul.sv + - $COMPILE_ROOT/rtl/tlul_adapter_host.sv + - $COMPILE_ROOT/rtl/tlul_adapter_reg.sv + - $COMPILE_ROOT/rtl/tlul_adapter_sram.sv + - $COMPILE_ROOT/rtl/tlul_cmd_intg_chk.sv + - $COMPILE_ROOT/rtl/tlul_cmd_intg_gen.sv + - $COMPILE_ROOT/rtl/tlul_data_integ_dec.sv + - $COMPILE_ROOT/rtl/tlul_data_integ_enc.sv + - $COMPILE_ROOT/rtl/tlul_err_resp.sv + - $COMPILE_ROOT/rtl/tlul_err.sv + - $COMPILE_ROOT/rtl/tlul_fifo_async.sv + - $COMPILE_ROOT/rtl/tlul_fifo_sync.sv + - $COMPILE_ROOT/rtl/tlul_lc_gate.sv + - $COMPILE_ROOT/rtl/tlul_rsp_intg_chk.sv + - $COMPILE_ROOT/rtl/tlul_rsp_intg_gen.sv + - $COMPILE_ROOT/rtl/tlul_socket_1n.sv + - $COMPILE_ROOT/rtl/tlul_socket_m1.sv + - $COMPILE_ROOT/rtl/tlul_sram_byte.sv + diff --git a/src/tlul/data/BUILD b/src/tlul/data/BUILD new file mode 100644 index 000000000..dda56de03 --- /dev/null +++ b/src/tlul/data/BUILD @@ -0,0 +1,10 @@ +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 + +package(default_visibility = ["//visibility:public"]) + +filegroup( + name = "all_files", + srcs = glob(["**"]), +) diff --git a/src/tlul/data/tlul.prj.hjson b/src/tlul/data/tlul.prj.hjson new file mode 100644 index 000000000..2d63adb7c --- /dev/null +++ b/src/tlul/data/tlul.prj.hjson @@ -0,0 +1,31 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +{ + name: "tlul", + design_spec: "../doc", + dv_doc: "../doc/dv", + hw_checklist: "/hw/top_earlgrey/ip/xbar/doc/checklist", + revisions: [ + { + version: "0.5.0", + life_stage: "L2", + design_stage: "D3", + verification_stage: "V3", + commit_id: "0078a3228c0d311cd40996a730ed8453640a6944", + notes: "The target for this entry is the autogenerated xbar_main within top_earlgrey." + } + { + version: "1.0.0", + life_stage: "L1", + design_stage: "D2", + verification_stage: "V2", + commit_id: "dae702d55b89a18621607b34f7ab8161be3706eb", + notes: '''Only the XBAR instances (xbar_main and xbar_peri) and TLUL components + that go into them are certified to V2. For exceptions see + [DV_DOC](https://docs.opentitan.org/hw/ip/tlul/doc/dv/index.html#design-features) + ''' + } + ] +} diff --git a/src/tlul/data/tlul_testplan.hjson b/src/tlul/data/tlul_testplan.hjson new file mode 100644 index 000000000..fd53a3039 --- /dev/null +++ b/src/tlul/data/tlul_testplan.hjson @@ -0,0 +1,81 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +{ + // Use the name 'main' for this generic testplan. The actual testplan that imports + // this file can override the name if needed. + name: main + testpoints: [ + { + name: xbar_smoke + desc: '''Sequentially test each host to access any device''' + stage: V1 + tests: ["xbar_smoke"] + } + { + name: xbar_base_random_sequence + desc: '''Enable all hosts to randomly send transactions to any device''' + stage: V2 + tests: ["xbar_random"] + } + { + name: xbar_random_delay + desc: '''Control delays through plusargs to create tests for below types of delay + - Zero delay for sending a/d_valid and a/d_ready + - Large delay from 0 ~ 1000 cycles + - Small delay (0-10 cycles) for a_channel, large delay (0-1000 cycles) for d_channel''' + stage: V2 + tests: ["xbar_smoke_zero_delays", "xbar_smoke_large_delays", "xbar_smoke_slow_rsp", + "xbar_random_zero_delays", "xbar_random_large_delays", "xbar_random_slow_rsp"] + } + { + name: xbar_unmapped_address + desc: ''' + - Host randomly drives transactions with mapped and unmapped address + - Ensure DUT returns d_error=1 if address is unmapped and transaction isn't passed down + to any device''' + stage: V2 + tests: ["xbar_unmapped_addr", "xbar_error_and_unmapped_addr"] + } + { + name: xbar_error_cases + desc: ''' + - Drive any random value on size, mask, opcode in both channels + - Ensure everything just pass through host to device or device to host''' + stage: V2 + tests: ["xbar_error_random", "xbar_error_and_unmapped_addr"] + } + { + name: xbar_all_access_same_device + desc: ''' + - Randomly pick a device, make all hosts to access this device + - If the device isn't accessible for the host, let the host randomly access the other + devices''' + stage: V2 + tests: ["xbar_access_same_device", "xbar_access_same_device_slow_rsp"] + } + { + name: xbar_all_hosts_use_same_source_id + desc: '''Test all hosts use same ID at the same same''' + stage: V2 + tests: ["xbar_same_source"] + } + { + name: xbar_stress_all + desc: ''' + - Combine all sequences and run in parallel + - Add random reset between each iteration''' + stage: V2 + tests: ["xbar_stress_all", "xbar_stress_all_with_error"] + } + { + name: xbar_stress_with_reset + desc: ''' + - Inject reset while stress_all is running, after reset is completed, kill the + stress seq and then start a new stress seq + - Run a few iteration to ensure reset doesn't break the design''' + stage: V2 + tests: ["xbar_stress_all_with_rand_reset", "xbar_stress_all_with_reset_error"] + } + ] +} diff --git a/src/tlul/doc/TlulProtocolChecker.md b/src/tlul/doc/TlulProtocolChecker.md new file mode 100644 index 000000000..684d11007 --- /dev/null +++ b/src/tlul/doc/TlulProtocolChecker.md @@ -0,0 +1,222 @@ +# TL-UL Protocol Checker + +# TileLink-UL Protocol Checker + + +## **Overview** + +This document details the protocol checker +[tlul_assert.sv](https://github.com/lowRISC/opentitan/blob/master/hw/ip/tlul/rtl/tlul_assert.sv) +for TL-UL (TileLink Uncached Lightweight), based on +[TileLink specification version 1.7.1](https://sifive.cdn.prismic.io/sifive%2F57f93ecf-2c42-46f7-9818-bcdd7d39400a_tilelink-spec-1.7.1.pdf). + +The next sections list the checks for each signal of TL-UL channels A and D. +More details: + +* The source fields (`a_source` and `d_source`) identify in-flight +transactions rather than physical agents. A single agent can use multiple +source IDs to track multiple outstanding transactions. See spec section 5.4 +"Source and Sink Identifiers" for more details. +* The source fields are `TL_AIW` bits wide (defined in +[tlul_pkg.sv](https://github.com/lowRISC/opentitan/blob/master/hw/ip/tlul/rtl/tlul_pkg.sv)). +Therefore, there can be up to 2TL_AIW outstanding +requests at the same time. To keep track of these outstanding requests, the +protocol checker stores pending requests in the array `pend_req` of depth +`TL_AIW`, and removes them once their corresponding response has been received. +* A request can be responded within the same cycle as the request message is +accepted. Therefore, in each clock cycle, the protocol checker first processes +requests and thereafter responses. +* The package +[tlul_pkg.sv](https://github.com/lowRISC/opentitan/blob/master/hw/ip/tlul/rtl/tlul_pkg.sv) +defines the structs for channels A and D. +* In below tables, "known" means that a signal should have a value other +than X. +* The protocol checker has a parameter `EndpointType` which can either be +`"Host"` or `"Device"`. The difference between the `"Host"` and `"Device"` +variant is that some of the properties are formulated as SV assumptions in the +former, whereas the same properties are formulated as SV assertions in the +latter (and vice versa). The behavior of these two checkers in DV simulations +is identical, but in formal verification, this distinction is needed (otherwise +some of the assertions would have to be disabled). + +## **Request Channel (Channel A)** + +Below table lists all channel A signals and their checks. +In `"Device"` mode some of these properties are assumptions (`_M` suffix) and in `"Host"` mode they are assertions (`_A` suffix). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Signal + Checks (assertion name: description) +
a_opcode + legalAOpcode_[M/A]: Only the following 3 opcodes are legal: +Get, PutFullData, PutPartialData. See spec section 6.2. +
a_param + legalAParam_[M/A]: This field is reserved, it must be 0. See +spec section 6.2. +
a_size + sizeMatchesMask_[M/A]: a_size can be calculated from a_mask +as follows: 2a_size must equal $countones(a_mask). See spec section +4.6. +

+aKnown_A: Make sure it's not X when a_valid is high. +

a_source + pendingReqPerSrc_[M/A]: There should be no more +than one pending request per each source ID. See spec section 5.4. +

+aKnown_A: Make sure it's not X when a_valid is high. +

a_address + addrSizeAligned_[M/A]: a_address must be aligned to +a_size: a_address & ((1 << a_size) - 1) == 0. See spec section 4.6. +

+aKnown_AMake sure it's not X when a_valid is high. +

a_mask + contigMask_[M/A]: a_mask must be contiguous for Get +and PutFullData (but not for PutPartialData). See spec sections 4.6 and 6.2. +

+sizeMatchesMask_[M/A]: See a_size above. +

+aKnown_AMake sure it's not X when a_valid is high. +

a_data + aDataKnown_[M/A]: a_data should not be X for opcodes +PutFullData and PutPartialData (it can be X for Get). Bytes of a_data, whose +corresponding a_mask bits are 0, can be X. See spec section 4.6. +
a_user + aKnown_AMake sure it's not X when a_valid is high. +
a_valid + aKnown_A: Make sure it's not X (except during reset). +
a_ready + aReadyKnown_A: Make sure it's not X (except during +reset). +
+ +## **Response Channel (Channel D)** + +Below table lists all channel D signals and their checks. +In `"Device"` mode some of these properties are assertions (`_A` suffix) and in `"Host"` mode they are assumptions (`_M` suffix). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Signal + Checks (assertion name: description) +
d_opcode + respOpcode_[A/M]: If the original request was Get, +then the corresponding response must be AccessAckData. Otherwise, the response +must be AccessAck. See spec section 6.2. +
d_param + legalDParam_[A/M]: This field is reserved, it must be 0. See +spec section 6.2. +
d_size + respSzEqReqSz_[A/M]: The response must have +the same size as the original request. See spec section 6.2. +
d_source + respMustHaveReq_[A/M]: For each response, there must have +been a corresponding request with the same source ID value. See spec section +5.4. +

+noOutstandingReqsAtEndOfSim_A: Make sure that there are no +outstanding requests at the end of the simulation. +

+dKnown_A: Make sure it's not X when d_valid is high. +

d_sink + dKnown_A: Make sure it's not X when d_valid is high. +
d_data + dDataKnown_[A/M]: d_data should not be X for AccessAckData. +Bytes of d_data, whose corresponding mask bits of the original request are 0, +can be X. See spec section 4.6. +
d_error + dKnown_AMake sure it's not X when d_valid is high. +
d_user + dKnown_AMake sure it's not X when d_valid is high. +
d_valid + dKnown_A: Make sure it's not X (except during reset). +
d_ready + dReadyKnown_AMake sure it's not X (except during +reset). +
diff --git a/src/tlul/doc/dv/README.md b/src/tlul/doc/dv/README.md new file mode 100644 index 000000000..610f1651e --- /dev/null +++ b/src/tlul/doc/dv/README.md @@ -0,0 +1,124 @@ +# TLUL XBAR DV document + + +## Goals +* **DV** + * Verify all TLUL XBAR IP features by running dynamic simulations with a SV/UVM based testbench + * Develop and run all tests based on the [testplan](#testplan) below towards closing code and functional coverage on the IP and all of its sub-modules +* **FPV** + * Verify TileLink device protocol compliance with an SVA based testbench + +## Current status +* [Design & verification stage](../../../../README.md) + * [HW development stages](../../../../../doc/project_governance/development_stages.md) +* [Simulation results](https://reports.opentitan.org/hw/ip/keymgr/dv/latest/report.html) + +## Design features +For detailed information on TLUL design features, please see the [TLUL design specification](../../README.md). + +Only following modules are verified in this testbench. +* tlul_socket_1n, tlul_socket_m1 +* tlul_fifo_async, tlul_fifo_sync + +The other TLUL modules as follows are verified in the blocks that instantiate them. +* tlul_adapter_* +* tlul_*intg* / tlul_*integ* +* tlul_err* +* tlul_sram_byte, sram2tlul + +## Testbench architecture +XBAR testbench has been constructed based on the `hw/dv/sv/dv_lib` + +### Block diagram +![Block diagram](tb.svg) + +### Top level testbench +Top level testbench is located at `hw/ip/tlul/dv/tb/tb.sv`. It instantiates the XBAR DUT module `hw/top_earlgrey/ip/xbar/rtl/autogen/xbar_main.sv`. +In addition, it instantiates the following interfaces, connects them to the DUT and sets their handle into `uvm_config_db`: +* [Clock and reset interface](../../../../dv/sv/common_ifs/README.md) +* [TileLink host interface](../../../../dv/sv/tl_agent/README.md) + +### Common DV utility components +The following utilities provide generic helper tasks and functions to perform activities that are common across the project: +* [common_ifs](../../../../dv/sv/common_ifs/README.md) +* [dv_utils_pkg](../../../../dv/sv/dv_utils/README.md) + +### Global types & methods +All common types and methods defined at the package level can be found in +`xbar_param`. Some of them in use are: +```systemverilog +// 3 hosts can access a same device, reserve upper 2 bits. If all hosts send +// maximum outstanding request in this device, the device needs extra 2 bits +// for source ID to accommodate all the requests +parameter int VALID_HOST_ID_WIDTH = 6 +``` + +### TL agent +XBAR env instantiates [tl_agent](../../../../dv/sv/tl_agent/README.md) for each xbar host and device, +which provides the ability to drive and independently monitor random traffic via +TL host/device interface. +* For host, source ID MSB 2 bits are tied to 0 and maximum number of outstanding request is 64 +* For device, max number of outstanding request = 64 * number of its accessible hosts. And device also supports out of order response + +### Stimulus strategy +#### Test sequences +All test sequences reside in `hw/ip/tlul/dv/env/seq_lib`. +The `xbar_base_vseq` virtual sequence is extended from `dv_base_vseq` and serves as a starting point. +All test sequences are extended from `xbar_base_vseq`. +It provides commonly used handles, variables, functions and tasks that the test sequences can simple use / call. +Some of the most commonly used tasks / functions are as follows: +* seq_init: Create and configure host and device sequences, extended class can override this function to control host/device sequence +* run_all_device_seq_nonblocking: Create passive response sequence for each device +* run_all_host_seq_in_parallel: Create host sequences to run in parallel + +#### Functional coverage +To ensure high quality constrained random stimulus, it is necessary to develop a functional coverage model. +The following covergroups have been developed to prove that the test intent has been adequately met: +* common covergroup from tl_agent: Cover each host/device reaches its maximum outstanding requests +* same_device_access_cg: Cover each device has been accessed by all its hosts at the same time +* same_source_access_cg: Cover all hosts use the same ID at the same time and all the IDs have been used at this sequence +* max_delay_cg: Cover zero delay, small delay and large delay have been used in every host and device +* outstanding_cg: Cover each host/device hit its maximum outstanding requests + +### Self-checking strategy +#### Scoreboard +The `xbar_scoreboard` is primarily used for end to end checking. +It extends from scoreboard_pkg::scoreboard, which supports multiple queues and in-order/out-of-order comparison. +Scoreboard checks one transaction twice: +* In a_channel, host initializes a transaction and scoreboard checks if this transaction is received by a right device +* In d_channel, device initializes a response and scoreboard checks this response is returned to the right host + +When device receives a transaction, we don't predict which host drives it. +XBAR DUT may not drive transaction received from host to device in order. +Due to this limitation, scoreboard is designed as following: +* For a_channel, each device has a transaction queue. Monitor transaction from host and store it in a device queue based on item address. + When device receives a transaction, check if there is a same item in its queue and the item is allowed to be appeared out of order. +* For d_channel, use same structure to check items from device to host. +* If the transaction is unmapped, it won't be sent to any device. Host will return an error response with `d_error = 1`. + Each host has a queue used only for unmapped items. It stores the unmapped item from a_channel, then compare it with the same source ID response received in d_channel. + +Following analysis fifos are created to retrieve the data monitored by corresponding interface agents: +* a_chan_host/device_name, d_chan_host/device_name: These fifos provide transaction items at the end of address channel and data channel respectively from host/device + +Following item queues are created to store items for check +* a_chan_device_name: store items from all hosts that are sent to this device +* d_chan_device_name: store items from this device that are returned to all hosts + +Another limitation of scoreboard is that we don't check the conversion of source ID from host to device. +We set the source of expected item to 0 before put it into scoreboard queue and hack the source of actual item to 0 before comparison + +#### Assertions +* TLUL assertions: The `tb/xbar_bind.sv` binds the `tlul_assert` [assertions](../TlulProtocolChecker.md) to the IP to ensure TileLink interface protocol compliance. +* Unknown checks on DUT outputs: The RTL has assertions to ensure all outputs are initialized to known values after coming out of reset. + +## Building and running tests +We are using our in-house developed [regression tool](../../../../../util/dvsim/README.md) for building and running our tests and regressions. +Please take a look at the link for detailed information on the usage, capabilities, features and known issues. +Here's how to run a smoke test: +```console +$ $REPO_TOP/util/dvsim/dvsim.py $REPO_TOP/hw/$CHIP/ip/$XBAR_IP/dv/autogen/${XBAR_IP}_sim_cfg.hjson -i xbar_smoke +``` +In this run command, $XBAR_IP can be xbar_main, xbar_peri, etc. $CHIP can be top_earlgrey, etc. + +## Testplan +[Testplan](../../data/tlul_testplan.hjson) diff --git a/src/tlul/doc/dv/tb.svg b/src/tlul/doc/dv/tb.svg new file mode 100644 index 000000000..373d4401e --- /dev/null +++ b/src/tlul/doc/dv/tb.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/tlul/doc/tlul_adapter_sram.svg b/src/tlul/doc/tlul_adapter_sram.svg new file mode 100644 index 000000000..da115d064 --- /dev/null +++ b/src/tlul/doc/tlul_adapter_sram.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/tlul/doc/tlul_socket_1n.svg b/src/tlul/doc/tlul_socket_1n.svg new file mode 100644 index 000000000..c27eae7f7 --- /dev/null +++ b/src/tlul/doc/tlul_socket_1n.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/tlul/doc/tlul_socket_m1.svg b/src/tlul/doc/tlul_socket_m1.svg new file mode 100644 index 000000000..679c10654 --- /dev/null +++ b/src/tlul/doc/tlul_socket_m1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/tlul/generic_dv/README b/src/tlul/generic_dv/README new file mode 100644 index 000000000..7f4f4f1a4 --- /dev/null +++ b/src/tlul/generic_dv/README @@ -0,0 +1,7 @@ +# The location of running XBAR simulation +Don't run xbar simulation in the current directory: `hw/ip/tlul/generic_dv`. +Currently directory only contains the generic portion of the xbar TB, which is +used by all flavors of xbar. The simulation directory is along with actual xbar +design, for example: +* hw/top_earlgrey/ip/xbar_main/dv/autogen +* hw/top_earlgrey/ip/xbar_peri/dv/autogen diff --git a/src/tlul/generic_dv/env/seq_lib/xbar_access_same_device_vseq.sv b/src/tlul/generic_dv/env/seq_lib/xbar_access_same_device_vseq.sv new file mode 100644 index 000000000..f8671f3a1 --- /dev/null +++ b/src/tlul/generic_dv/env/seq_lib/xbar_access_same_device_vseq.sv @@ -0,0 +1,39 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// test all hosts to access same device +// randomly pick one device, if host can acess this device, change it to only access this device +// repeat above for a few times +class xbar_access_same_device_vseq extends xbar_random_vseq; + + `uvm_object_utils(xbar_access_same_device_vseq) + `uvm_object_new + + // more req to hit max outstanding number + function void pre_randomize(); + min_req_cnt = 200; + max_req_cnt = 300; + super.pre_randomize(); + endfunction + + virtual function void update_host_seq(); + int device_id = $urandom_range(0, xbar_devices.size - 1); + + if (cfg.en_cov) cov.same_device_access_cg.sample(device_id); + `uvm_info(`gfn, $sformatf("Picked device (%0s) for all hosts to access", + xbar_devices[device_id].device_name), UVM_HIGH) + + // change host to only access the picked device + foreach (host_seq[i]) begin + // if the selected device_id is a valid ID for this host, only store this id to use + if (device_id inside {host_seq[i].valid_device_id}) begin + host_seq[i].valid_device_id.delete(); + host_seq[i].valid_device_id.push_back(device_id); + `uvm_info(`gfn, $sformatf("Host (%0s) only accesses device (%0s)", + host_seq[i].get_name(), xbar_devices[device_id].device_name), UVM_HIGH) + end + end + endfunction + +endclass diff --git a/src/tlul/generic_dv/env/seq_lib/xbar_base_vseq.sv b/src/tlul/generic_dv/env/seq_lib/xbar_base_vseq.sv new file mode 100644 index 000000000..4fbd9e20b --- /dev/null +++ b/src/tlul/generic_dv/env/seq_lib/xbar_base_vseq.sv @@ -0,0 +1,121 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// --------------------------------------------- +// Xbar environment virtual sequence +// --------------------------------------------- +class xbar_base_vseq extends dv_base_vseq #(.CFG_T (xbar_env_cfg), + .COV_T (xbar_env_cov), + .VIRTUAL_SEQUENCER_T (xbar_virtual_sequencer)); + + // TL host and device sub-sequences + rand xbar_tl_host_seq host_seq[]; + rand tl_device_seq device_seq[]; + rand bit en_req_abort; + rand bit en_rsp_abort; + + uint min_req_cnt = 100; + uint max_req_cnt = 200; + + // if seq crosses with the other seq, only need to enable device rsp thread + bit do_device_rsp = 1; + + constraint req_cnt_c { + foreach (host_seq[i]) { + host_seq[i].req_cnt inside {[min_req_cnt : max_req_cnt]}; + } + } + + constraint en_req_abort_c { + en_req_abort dist { + 1 :/ 25, + 0 :/ 75 + }; + } + + constraint en_rsp_abort_c { + en_rsp_abort dist { + 1 :/ 25, + 0 :/ 75 + }; + } + `uvm_object_utils(xbar_base_vseq) + `uvm_object_new + + // create and configure host/device seq before randomize as host_seq/device_seq are rand + function void pre_randomize(); + host_seq = new[xbar_hosts.size()]; + device_seq = new[xbar_devices.size()]; + foreach (host_seq[i]) begin + host_seq[i] = xbar_tl_host_seq::type_id::create( + $sformatf("%0s_seq", xbar_hosts[i].host_name)); + // Default only send request to valid devices that is accessible by the host + foreach (xbar_devices[j]) begin + if (is_valid_path(xbar_hosts[i].host_name, xbar_devices[j].device_name)) begin + `uvm_info(get_full_name, $sformatf("Add device %0s to seq %0s", + xbar_devices[i].device_name, host_seq[i].get_name()), UVM_HIGH) + host_seq[i].valid_device_id.push_back(j); + end + end + end + foreach (device_seq[i]) begin + device_seq[i] = tl_device_seq#()::type_id::create( + $sformatf("%0s_seq", xbar_devices[i].device_name)); + device_seq[i].d_error_pct = $urandom_range(0, 70); + end + endfunction : pre_randomize + + function void post_randomize(); + foreach (host_seq[i]) begin + if (en_req_abort) host_seq[i].req_abort_pct = $urandom_range(0, 100); + end + foreach (device_seq[i]) begin + if (en_rsp_abort) device_seq[i].rsp_abort_pct = $urandom_range(0, 100); + end + endfunction : post_randomize + + virtual task run_all_device_seq_nonblocking(bit out_of_order_rsp = 1); + if (do_device_rsp) begin + foreach (device_seq[i]) begin + fork + automatic int device_id = i; + device_seq[device_id].out_of_order_rsp = out_of_order_rsp; + device_seq[device_id].start(p_sequencer.device_seqr[device_id]); + join_none + end + end + endtask + + virtual task run_host_seq(uint host_id); + host_seq[host_id].start(p_sequencer.host_seqr[host_id]); + `uvm_info(get_full_name(), $sformatf("%0s finished sending %0d requests", + host_seq[host_id].get_full_name(), + host_seq[host_id].req_cnt), UVM_LOW) + endtask + + // run host seq in parallel and use num_enabled_hosts to decide how many hosts to run + virtual task run_all_host_seq_in_parallel(); + int completed_seq_cnt; + int host_cnt; + int host_id_q[$]; + + // make host_id_q store all host_id in random order + foreach (host_seq[i]) host_id_q.push_back(i); + host_id_q.shuffle(); + + foreach (host_id_q[i]) begin + fork + automatic int host_id = host_id_q[i]; + begin + run_host_seq(host_id); + completed_seq_cnt += 1; + end + join_none + host_cnt++; + if (host_cnt >= cfg.num_enabled_hosts) break; + end + wait(completed_seq_cnt == cfg.num_enabled_hosts); + endtask + +endclass diff --git a/src/tlul/generic_dv/env/seq_lib/xbar_random_vseq.sv b/src/tlul/generic_dv/env/seq_lib/xbar_random_vseq.sv new file mode 100644 index 000000000..a837e1b06 --- /dev/null +++ b/src/tlul/generic_dv/env/seq_lib/xbar_random_vseq.sv @@ -0,0 +1,34 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// base random seq, most of xbar vseq will extend from this +class xbar_random_vseq extends xbar_base_vseq; + + `uvm_object_utils(xbar_random_vseq) + `uvm_object_new + + // override it to control host seq in extended classes + virtual function void update_host_seq(); + endfunction + + virtual task pre_start(); + super.pre_start(); + if (cfg.short_xbar_test) begin + num_trans_c.constraint_mode(0); + num_trans = $urandom_range(1, 3); + end + endtask + + virtual task body(); + run_all_device_seq_nonblocking(); + for (int i = 1; i <= num_trans; i++) begin + update_host_seq(); + run_all_host_seq_in_parallel(); + `uvm_info(`gfn, $sformatf("finished run %0d/%0d", i, num_trans), UVM_LOW) + // re-randomize for next loop + if (i <= num_trans) `DV_CHECK_RANDOMIZE_FATAL(this) + end + endtask + +endclass diff --git a/src/tlul/generic_dv/env/seq_lib/xbar_same_source_vseq.sv b/src/tlul/generic_dv/env/seq_lib/xbar_same_source_vseq.sv new file mode 100644 index 000000000..b4917c72a --- /dev/null +++ b/src/tlul/generic_dv/env/seq_lib/xbar_same_source_vseq.sv @@ -0,0 +1,37 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// test all hosts use same source id for each iteration +// reduce to 5-20 trans per iteration and increase interation number by x10 +class xbar_same_source_vseq extends xbar_random_vseq; + + `uvm_object_utils(xbar_same_source_vseq) + `uvm_object_new + + constraint num_trans_c { + num_trans inside {[10:200]}; + } + + // reduce to 5-20 trans per iteration + function void pre_randomize(); + min_req_cnt = 5; + max_req_cnt = 20; + super.pre_randomize(); + endfunction + + virtual function void update_host_seq(); + int source = $urandom_range(0, (1 << cfg.valid_a_source_width) - 1); + + // TODO: figure out a way to sample the cov below in the scb instead of here. + if (cfg.en_cov) cov.same_source_access_cg.sample(source); + `uvm_info(`gfn, $sformatf("Picked source (%0d) for all hosts", source), UVM_HIGH) + + // change host to only access the picked device + foreach (host_seq[i]) begin + host_seq[i].override_a_source_val = 1; + host_seq[i].overridden_a_source_val = source; + end + endfunction + +endclass diff --git a/src/tlul/generic_dv/env/seq_lib/xbar_seq_err_item.sv b/src/tlul/generic_dv/env/seq_lib/xbar_seq_err_item.sv new file mode 100644 index 000000000..5ede81dfc --- /dev/null +++ b/src/tlul/generic_dv/env/seq_lib/xbar_seq_err_item.sv @@ -0,0 +1,21 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// --------------------------------------------- +// TileLink sequence item with all protocol related constraint disabled +// --------------------------------------------- +class xbar_seq_err_item extends cip_tl_seq_item; + + `uvm_object_utils(xbar_seq_err_item) + `uvm_object_new + + function void pre_randomize(); + disable_a_chan_protocol_constraint(); + no_d_error_c.constraint_mode(0); + endfunction + + // Remove modification on a_user, so it's freely randomized + function void post_randomize(); + endfunction +endclass diff --git a/src/tlul/generic_dv/env/seq_lib/xbar_smoke_vseq.sv b/src/tlul/generic_dv/env/seq_lib/xbar_smoke_vseq.sv new file mode 100644 index 000000000..00ff87db9 --- /dev/null +++ b/src/tlul/generic_dv/env/seq_lib/xbar_smoke_vseq.sv @@ -0,0 +1,19 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Sequentially test each host to access any device +// device will respond in order +class xbar_smoke_vseq extends xbar_base_vseq; + + `uvm_object_utils(xbar_smoke_vseq) + `uvm_object_new + + virtual task body(); + run_all_device_seq_nonblocking(.out_of_order_rsp(0)); + foreach (host_seq[i]) begin + run_host_seq(i); + end + endtask + +endclass diff --git a/src/tlul/generic_dv/env/seq_lib/xbar_stress_all_vseq.sv b/src/tlul/generic_dv/env/seq_lib/xbar_stress_all_vseq.sv new file mode 100644 index 000000000..a55e7d0ac --- /dev/null +++ b/src/tlul/generic_dv/env/seq_lib/xbar_stress_all_vseq.sv @@ -0,0 +1,64 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// combine all xbar seqs in one seq to run in parallel for mutiply times +class xbar_stress_all_vseq extends xbar_base_vseq; + `uvm_object_utils(xbar_stress_all_vseq) + + // reduce num_trans + constraint num_trans_c { + num_trans inside {[1:5]}; + } + + `uvm_object_new + + task body(); + string seq_names[] = {"xbar_smoke_vseq", + "xbar_random_vseq", + "xbar_access_same_device_vseq", + "xbar_same_source_vseq", + "xbar_unmapped_addr_vseq"}; + run_all_device_seq_nonblocking(); + for (int i = 1; i <= num_trans; i++) fork + begin // isolation thread + foreach (seq_names[i]) begin + automatic int seq_idx = i; + fork + if ($urandom_range(0, 1)) begin + uvm_sequence seq; + xbar_base_vseq xbar_vseq; + uint dly_to_start_seq; + + seq = create_seq_by_name(seq_names[seq_idx]); + `downcast(xbar_vseq, seq) + + // dut_init (reset) is done in xbar_stress_all_vseq + xbar_vseq.do_dut_init = 0; + // rsp thread is created in xbar_stress_all_vseq at line 22 + xbar_vseq.do_device_rsp = 0; + + xbar_vseq.set_sequencer(p_sequencer); + `DV_CHECK_RANDOMIZE_FATAL(xbar_vseq) + `DV_CHECK_STD_RANDOMIZE_WITH_FATAL(dly_to_start_seq, + dly_to_start_seq dist { + 0 :/ 1, + [1:100] :/ 1, + [101:1000] :/ 1 + };) + cfg.clk_rst_vif.wait_clks(dly_to_start_seq); + xbar_vseq.start(p_sequencer); + end + join_none + end + wait fork; + // if this seq is called as a sub-seq, and run with another seq that contains reset, + // when reset is issued in both seq at the same time, can't know where is the end of reset + // hence, if we want to kill unfinished seq after reset, we may not kill it at a right time + if (do_apply_reset && $urandom_range(0, 1)) dut_init(); + `uvm_info(`gfn, $sformatf("finished run %0d/%0d", i, num_trans), UVM_LOW) + end // isolation thread + join + endtask : body + +endclass diff --git a/src/tlul/generic_dv/env/seq_lib/xbar_stress_all_with_rand_reset_vseq.sv b/src/tlul/generic_dv/env/seq_lib/xbar_stress_all_with_rand_reset_vseq.sv new file mode 100644 index 000000000..054a14015 --- /dev/null +++ b/src/tlul/generic_dv/env/seq_lib/xbar_stress_all_with_rand_reset_vseq.sv @@ -0,0 +1,65 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// one thread running the hmac_stress_all sequence +// another thread randomly insert reset +class xbar_stress_all_with_rand_reset_vseq extends xbar_base_vseq; + `uvm_object_utils(xbar_stress_all_with_rand_reset_vseq) + + rand uint delay; + + `uvm_object_new + + constraint delay_c { + delay dist { + 0 :/ 1, + [1 :100] :/ 1, + [101 :10_000] :/ 8, + [10_001 :1_000_000] :/ 1 + }; + } + + task body(); + for (int i = 1; i <= num_trans; i++) begin + bit reset_ongoing; + xbar_stress_all_vseq xbar_vseq; + fork + begin : seq_wo_reset + xbar_vseq = xbar_stress_all_vseq::type_id::create("xbar_stress_all_vseq"); + + xbar_vseq.do_apply_reset = 0; + xbar_vseq.set_sequencer(p_sequencer); + `DV_CHECK_RANDOMIZE_FATAL(xbar_vseq) + xbar_vseq.start(p_sequencer); + // once reset starts, need to wait until reset is done + wait (reset_ongoing == 0); + `uvm_info(`gfn, $sformatf("Finished run %0d/%0d w/o reset", i, num_trans), UVM_LOW) + end + + begin : reset + `DV_CHECK_STD_RANDOMIZE_WITH_FATAL(delay, + delay dist { + 1 :/ 1, + [2 :100] :/ 1, + [101 :10_000] :/ 8, + [10_001 :1_000_000] :/ 1 + };) + cfg.clk_rst_vif.wait_clks(delay); + reset_ongoing = 1; + // reset needs to be longger than any clocks to allow TLUL driver flash out all items + cfg.clk_rst_vif.apply_reset(.reset_width_clks($urandom_range(100, 200))); + reset_ongoing = 0; + `uvm_info(`gfn, $sformatf("Reset is issued for run %0d/%0d", i, num_trans), UVM_LOW) + end + join_any + foreach (p_sequencer.host_seqr[i]) p_sequencer.host_seqr[i].stop_sequences(); + foreach (p_sequencer.device_seqr[i]) p_sequencer.device_seqr[i].stop_sequences(); + disable fork; + // delay to avoid race condition when sending item and checking no item after reset occur at + // the same time + #1ps; + end // end for loop + endtask : body + +endclass diff --git a/src/tlul/generic_dv/env/seq_lib/xbar_tl_host_seq.sv b/src/tlul/generic_dv/env/seq_lib/xbar_tl_host_seq.sv new file mode 100644 index 000000000..d98f40529 --- /dev/null +++ b/src/tlul/generic_dv/env/seq_lib/xbar_tl_host_seq.sv @@ -0,0 +1,69 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// --------------------------------------------- +// TileLink agent sequence library +// --------------------------------------------- + +// Basic xbar TL host sequence +class xbar_tl_host_seq extends tl_host_seq; + + // if enabled, will allow to access both mapped and unmapped addr + bit en_unmapped_addr = 0; + + int valid_device_id[$]; + + // control the chance to use last address for current item + int use_last_item_addr_pct = 5; + bit [AddrWidth - 1 : 0] last_item_addr; + + `uvm_object_utils(xbar_tl_host_seq) + `uvm_object_new + + virtual function void randomize_req(tl_seq_item req, int idx); + uint device_id; + bit is_mapped_addr; + bit use_last_item_addr; + uint addr_range_id; + + // randomize device_id, is_mapped_addr, addr_range_id first + if (valid_device_id.size() > 0) begin + device_id = $urandom_range(0, valid_device_id.size() - 1); + device_id = valid_device_id[device_id]; + end else begin + device_id = $urandom_range(0, xbar_devices.size() - 1); + end + if (use_last_item_addr_pct > $urandom_range(99, 0)) use_last_item_addr = 1; + if (en_unmapped_addr) begin + is_mapped_addr = $urandom_range(0, 1); + end else begin + is_mapped_addr = 1; + addr_range_id = $urandom_range(0, xbar_devices[device_id].addr_ranges.size() - 1); + end + if (!(req.randomize() with { + a_valid_delay inside {[min_req_delay:max_req_delay]}; + if (use_last_item_addr) { + a_addr == last_item_addr; + } else if (is_mapped_addr) { + a_addr inside {[xbar_devices[device_id].addr_ranges[addr_range_id].start_addr : + xbar_devices[device_id].addr_ranges[addr_range_id].end_addr]}; + } else { + foreach (xbar_devices[device_id].addr_ranges[i]) { + !(a_addr inside {[xbar_devices[device_id].addr_ranges[i].start_addr : + xbar_devices[device_id].addr_ranges[i].end_addr]}); + } + }})) begin + `uvm_fatal(get_full_name(), "Cannot randomize req") + end + + last_item_addr = req.a_addr; + endfunction + + // prevent seq runs out of source ID + virtual task pre_start_item(tl_seq_item req); + super.pre_start_item(req); + wait(pending_req.size() < cfg.max_outstanding_req); + endtask + +endclass diff --git a/src/tlul/generic_dv/env/seq_lib/xbar_unmapped_addr_vseq.sv b/src/tlul/generic_dv/env/seq_lib/xbar_unmapped_addr_vseq.sv new file mode 100644 index 000000000..df8dfa8a4 --- /dev/null +++ b/src/tlul/generic_dv/env/seq_lib/xbar_unmapped_addr_vseq.sv @@ -0,0 +1,19 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// allow host to drive unmapped addr +// expect xbar will return d_error=1 and won't pass it to any device +class xbar_unmapped_addr_vseq extends xbar_random_vseq; + + `uvm_object_utils(xbar_unmapped_addr_vseq) + `uvm_object_new + + // allow host to driver unmapped addr + virtual function void update_host_seq(); + foreach (host_seq[i]) begin + host_seq[i].en_unmapped_addr = 1; + end + endfunction + +endclass diff --git a/src/tlul/generic_dv/env/seq_lib/xbar_vseq_list.sv b/src/tlul/generic_dv/env/seq_lib/xbar_vseq_list.sv new file mode 100644 index 000000000..782b8ebcc --- /dev/null +++ b/src/tlul/generic_dv/env/seq_lib/xbar_vseq_list.sv @@ -0,0 +1,14 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +`include "xbar_seq_err_item.sv" +`include "xbar_tl_host_seq.sv" +`include "xbar_base_vseq.sv" +`include "xbar_smoke_vseq.sv" +`include "xbar_random_vseq.sv" +`include "xbar_access_same_device_vseq.sv" +`include "xbar_same_source_vseq.sv" +`include "xbar_unmapped_addr_vseq.sv" +`include "xbar_stress_all_vseq.sv" +`include "xbar_stress_all_with_rand_reset_vseq.sv" diff --git a/src/tlul/generic_dv/env/xbar_env.core b/src/tlul/generic_dv/env/xbar_env.core new file mode 100644 index 000000000..84a8ac586 --- /dev/null +++ b/src/tlul/generic_dv/env/xbar_env.core @@ -0,0 +1,37 @@ +CAPI=2: +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +name: "lowrisc:dv:xbar_env:0.1" +description: "xbar DV UVM environmnt" +filesets: + files_dv: + depend: + - lowrisc:dv:dv_lib + - lowrisc:dv:cip_lib + - lowrisc:dv:tl_agent + - lowrisc:dv:scoreboard + files: + - xbar_env_pkg.sv + - xbar_env_cfg.sv: {is_include_file: true} + - xbar_env_cov.sv: {is_include_file: true} + - xbar_virtual_sequencer.sv: {is_include_file: true} + - xbar_env.sv: {is_include_file: true} + - xbar_scoreboard.sv: {is_include_file: true} + - seq_lib/xbar_vseq_list.sv: {is_include_file: true} + - seq_lib/xbar_seq_err_item.sv: {is_include_file: true} + - seq_lib/xbar_tl_host_seq.sv: {is_include_file: true} + - seq_lib/xbar_base_vseq.sv: {is_include_file: true} + - seq_lib/xbar_smoke_vseq.sv: {is_include_file: true} + - seq_lib/xbar_random_vseq.sv: {is_include_file: true} + - seq_lib/xbar_access_same_device_vseq.sv: {is_include_file: true} + - seq_lib/xbar_same_source_vseq.sv: {is_include_file: true} + - seq_lib/xbar_unmapped_addr_vseq.sv: {is_include_file: true} + - seq_lib/xbar_stress_all_vseq.sv: {is_include_file: true} + - seq_lib/xbar_stress_all_with_rand_reset_vseq.sv: {is_include_file: true} + file_type: systemVerilogSource + +targets: + default: + filesets: + - files_dv diff --git a/src/tlul/generic_dv/env/xbar_env.sv b/src/tlul/generic_dv/env/xbar_env.sv new file mode 100644 index 000000000..68e7b9099 --- /dev/null +++ b/src/tlul/generic_dv/env/xbar_env.sv @@ -0,0 +1,100 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// --------------------------------------------- +// Xbar environment class +// --------------------------------------------- +class xbar_env extends dv_base_env#(.CFG_T (xbar_env_cfg), + .VIRTUAL_SEQUENCER_T(xbar_virtual_sequencer), + .SCOREBOARD_T (xbar_scoreboard), + .COV_T (xbar_env_cov)); + + tl_agent host_agent[]; + tl_agent device_agent[]; + + `uvm_component_utils(xbar_env) + + function new (string name, uvm_component parent); + super.new(name, parent); + endfunction : new + + function void build_phase(uvm_phase phase); + super.build_phase(phase); + + // use cip_tl_seq_item to create tl_seq_item with correct integrity values and obtain integrity + // related functions + tl_seq_item::type_id::set_type_override(cip_tl_seq_item::get_type()); + + // Connect TileLink host and device agents + host_agent = new[cfg.num_hosts]; + foreach (host_agent[i]) begin + host_agent[i] = tl_agent::type_id::create( + $sformatf("%0s_agent", xbar_hosts[i].host_name), this); + uvm_config_db#(tl_agent_cfg)::set(this, + $sformatf("%0s_agent", xbar_hosts[i].host_name),"cfg", cfg.host_agent_cfg[i]); + cfg.host_agent_cfg[i].en_cov = cfg.en_cov; + end + device_agent = new[cfg.num_devices]; + foreach (device_agent[i]) begin + device_agent[i] = tl_agent::type_id::create( + $sformatf("%0s_agent", xbar_devices[i].device_name), this); + uvm_config_db#(tl_agent_cfg)::set(this, + $sformatf("%0s_agent", xbar_devices[i].device_name), "cfg", cfg.device_agent_cfg[i]); + cfg.device_agent_cfg[i].en_cov = cfg.en_cov; + end + + // this clock isn't connected to design but only used for TB, like measure timeout, drive long + // enough reset (bigger than 1 cycle of any DUT clock). Use fixed frequency 100 Mhz + cfg.clk_rst_vif.set_freq_mhz(100); + + // increase timer as device may respond very slowly in test - xbar_main_random_slow_rsp + scoreboard.timeout_cycle_limit = 100_000; + // create analysis_fifos and scoreboard_queue + foreach (xbar_hosts[i]) begin + scoreboard.add_item_port({"a_chan_", xbar_hosts[i].host_name}, scoreboard_pkg::kSrcPort); + scoreboard.add_item_port({"d_chan_", xbar_hosts[i].host_name}, scoreboard_pkg::kDstPort); + // this queue is used to store expected rsp in d channel for unmapped address + scoreboard.add_item_queue({"host_unmapped_addr_", xbar_hosts[i].host_name}, + scoreboard_pkg::kInOrderCheck); + end + foreach (xbar_devices[i]) begin + scoreboard.add_item_port({"a_chan_", xbar_devices[i].device_name}, scoreboard_pkg::kDstPort); + scoreboard.add_item_port({"d_chan_", xbar_devices[i].device_name}, scoreboard_pkg::kSrcPort); + + scoreboard.add_item_queue({"a_chan_", xbar_devices[i].device_name}, + scoreboard_pkg::kOutOfOrderCheck); + scoreboard.add_item_queue({"d_chan_", xbar_devices[i].device_name}, + scoreboard_pkg::kOutOfOrderCheck); + end + endfunction : build_phase + + function void connect_phase(uvm_phase phase); + super.connect_phase(phase); + // Connect virtual sequencer + if (cfg.is_active) begin + virtual_sequencer.host_seqr = new[cfg.num_hosts]; + virtual_sequencer.device_seqr = new[cfg.num_devices]; + foreach (host_agent[i]) begin + virtual_sequencer.host_seqr[i] = host_agent[i].sequencer; + end + foreach (device_agent[i]) begin + virtual_sequencer.device_seqr[i] = device_agent[i].sequencer; + end + end + // Connect scoreboard + foreach (host_agent[i]) begin + host_agent[i].monitor.a_chan_port.connect( + scoreboard.item_fifos[{"a_chan_", xbar_hosts[i].host_name}].analysis_export); + host_agent[i].monitor.d_chan_port.connect( + scoreboard.item_fifos[{"d_chan_", xbar_hosts[i].host_name}].analysis_export); + end + foreach (device_agent[i]) begin + device_agent[i].monitor.a_chan_port.connect( + scoreboard.item_fifos[{"a_chan_", xbar_devices[i].device_name}].analysis_export); + device_agent[i].monitor.d_chan_port.connect( + scoreboard.item_fifos[{"d_chan_", xbar_devices[i].device_name}].analysis_export); + end + endfunction : connect_phase + +endclass diff --git a/src/tlul/generic_dv/env/xbar_env_cfg.sv b/src/tlul/generic_dv/env/xbar_env_cfg.sv new file mode 100644 index 000000000..e645243f4 --- /dev/null +++ b/src/tlul/generic_dv/env/xbar_env_cfg.sv @@ -0,0 +1,101 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// --------------------------------------------- +// Xbar environment configuration class +// --------------------------------------------- +class xbar_env_cfg extends dv_base_env_cfg; + + rand tl_agent_cfg host_agent_cfg[]; + rand tl_agent_cfg device_agent_cfg[]; + uint num_hosts; + uint num_devices; + uint num_enabled_hosts; + // Actual number of a_source bits used by the design. + uint valid_a_source_width; + // enable to drop valid without ready + rand bit allow_host_drop_valid_wo_ready; + rand bit allow_device_drop_valid_wo_ready; + uint min_host_valid_len = 1; + uint max_host_valid_len = 50; + uint min_device_valid_len = 1; + uint max_device_valid_len = 50; + // delays for TL transaction + uint min_host_req_delay = 0; + uint max_host_req_delay = 20; + uint min_host_rsp_delay = 0; + uint max_host_rsp_delay = 20; + uint min_device_req_delay = 0; + uint max_device_req_delay = 20; + uint min_device_rsp_delay = 0; + uint max_device_rsp_delay = 20; + + // option to run short iteration + bit short_xbar_test = 0; + `uvm_object_utils_begin(xbar_env_cfg) + `uvm_field_array_object(host_agent_cfg, UVM_DEFAULT) + `uvm_field_array_object(device_agent_cfg, UVM_DEFAULT) + `uvm_field_int(num_hosts, UVM_DEFAULT) + `uvm_field_int(num_devices, UVM_DEFAULT) + `uvm_object_utils_end + + `uvm_object_new + + virtual function void initialize(bit [TL_AW-1:0] csr_base_addr = '1); + is_initialized = 1'b1; + ral_model_names = {}; // no csr in xbar + // Host TL agent cfg + num_hosts = xbar_hosts.size(); + num_enabled_hosts = xbar_hosts.size(); + valid_a_source_width = top_pkg::TL_AIW - $clog2(num_hosts); + host_agent_cfg = new[num_hosts]; + foreach (host_agent_cfg[i]) begin + host_agent_cfg[i] = tl_agent_cfg::type_id:: + create($sformatf("%0s_agent_cfg", xbar_hosts[i].host_name)); + host_agent_cfg[i].if_mode = dv_utils_pkg::Host; + host_agent_cfg[i].valid_a_source_width = valid_a_source_width; + host_agent_cfg[i].max_outstanding_req = 1 << valid_a_source_width; + host_agent_cfg[i].host_can_stall_rsp_when_a_valid_high = $urandom_range(0, 1); + end + // Device TL agent cfg + num_devices = xbar_devices.size(); + device_agent_cfg = new[num_devices]; + foreach (device_agent_cfg[i]) begin + device_agent_cfg[i] = tl_agent_cfg::type_id:: + create($sformatf("%0s_agent_cfg", xbar_devices[i].device_name)); + device_agent_cfg[i].if_mode = dv_utils_pkg::Device; + device_agent_cfg[i].allow_d_valid_drop_wo_d_ready = allow_device_drop_valid_wo_ready; + // the max_outstanding_req depends on how many hosts can access the device + // device.max_outstanding_req = sum(all its hosts max_outstanding_req) + device_agent_cfg[i].max_outstanding_req = 0; // clear default value + foreach (xbar_hosts[j]) begin + if (xbar_devices[i].device_name inside {xbar_hosts[j].valid_devices}) begin + device_agent_cfg[i].max_outstanding_req += host_agent_cfg[j].max_outstanding_req; + end + end // foreach (xbar_hosts[j]) + end // foreach (device_agent_cfg[i]) + endfunction + + // update TLUL agent cfg according to this env cfg. These values may be updated in test + virtual function void update_agent_cfg(); + foreach (host_agent_cfg[i]) begin + host_agent_cfg[i].allow_a_valid_drop_wo_a_ready = allow_host_drop_valid_wo_ready; + host_agent_cfg[i].a_valid_len_min = min_host_valid_len; + host_agent_cfg[i].a_valid_len_max = max_host_valid_len; + host_agent_cfg[i].a_valid_delay_min = min_host_req_delay; + host_agent_cfg[i].a_valid_delay_max = max_host_req_delay; + host_agent_cfg[i].d_ready_delay_min = min_host_rsp_delay; + host_agent_cfg[i].d_ready_delay_max = max_host_rsp_delay; + end + foreach (device_agent_cfg[i]) begin + device_agent_cfg[i].allow_d_valid_drop_wo_d_ready = allow_device_drop_valid_wo_ready; + device_agent_cfg[i].d_valid_len_min = min_device_valid_len; + device_agent_cfg[i].d_valid_len_max = max_device_valid_len; + device_agent_cfg[i].d_valid_delay_min = min_device_req_delay; + device_agent_cfg[i].d_valid_delay_max = max_device_req_delay; + device_agent_cfg[i].a_ready_delay_min = min_device_rsp_delay; + device_agent_cfg[i].a_ready_delay_max = max_device_rsp_delay; + end + endfunction +endclass diff --git a/src/tlul/generic_dv/env/xbar_env_cov.sv b/src/tlul/generic_dv/env/xbar_env_cov.sv new file mode 100644 index 000000000..c1d8390e5 --- /dev/null +++ b/src/tlul/generic_dv/env/xbar_env_cov.sv @@ -0,0 +1,79 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// sample at xbar_access_same_device_vseq +covergroup same_device_access_cg (uint num_dev) with function sample(uint dev_id); + cp_dev: coverpoint dev_id { + bins all_values[] = {[0:num_dev-1]}; + illegal_bins bin_others = default; + } +endgroup + +// sample at xbar_same_source_vseq +covergroup same_source_access_cg (uint num_source) with function sample(uint source); + cp_dev: coverpoint source { + bins all_values[] = {[0:num_source-1]}; + illegal_bins bin_others = default; + } +endgroup + +// wrap covergroup as a class to use it as an associative array +// sample at xbar_env_cov::build_phase +class max_delay_cg_obj; + + covergroup max_delay_cg (string name) with function sample(uint req_dly, uint rsp_dly); + option.per_instance = 1; + option.name = name; + cp_req_dly: coverpoint req_dly { + bins zero = {0}; + bins small_delay = {[1:20]}; + bins big_delay = {[100:1000]}; + } + cp_rsp_dly: coverpoint rsp_dly { + bins zero = {0}; + bins small_delay = {[1:20]}; + bins big_delay = {[100:1000]}; + } + endgroup + + function new(string name = ""); + max_delay_cg = new(name); + endfunction : new + + function void sample(uint req_dly, uint rsp_dly); + max_delay_cg.sample(req_dly, rsp_dly); + endfunction : sample +endclass : max_delay_cg_obj + +class xbar_env_cov extends dv_base_env_cov #(.CFG_T(xbar_env_cfg)); + same_device_access_cg same_device_access_cg; + same_source_access_cg same_source_access_cg; + // cover mapped/unmapped addr per host + bit_toggle_cg_wrap host_access_mapped_addr_cg[string]; + // cover max_delay per host/device + max_delay_cg_obj max_delay_cg_obj[string]; + `uvm_component_utils(xbar_env_cov) + + function new(string name, uvm_component parent); + super.new(name, parent); + endfunction : new + + virtual function void build_phase(uvm_phase phase); + super.build_phase(phase); + same_device_access_cg = new(cfg.num_devices); + same_source_access_cg = new(1 << cfg.valid_a_source_width); + foreach (xbar_hosts[i]) begin + host_access_mapped_addr_cg[xbar_hosts[i].host_name] = new(xbar_hosts[i].host_name); + max_delay_cg_obj[xbar_hosts[i].host_name] = new(xbar_hosts[i].host_name); + max_delay_cg_obj[xbar_hosts[i].host_name].sample(cfg.max_host_req_delay, + cfg.max_host_rsp_delay); + end + foreach (xbar_devices[i]) begin + max_delay_cg_obj[xbar_devices[i].device_name] = new(xbar_devices[i].device_name); + max_delay_cg_obj[xbar_devices[i].device_name].sample(cfg.max_device_req_delay, + cfg.max_device_rsp_delay); + end + endfunction + +endclass diff --git a/src/tlul/generic_dv/env/xbar_env_pkg.sv b/src/tlul/generic_dv/env/xbar_env_pkg.sv new file mode 100644 index 000000000..332ad826e --- /dev/null +++ b/src/tlul/generic_dv/env/xbar_env_pkg.sv @@ -0,0 +1,71 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// --------------------------------------------- +// Xbar environment package +// --------------------------------------------- +package xbar_env_pkg; + + import uvm_pkg::*; + import top_pkg::*; + import dv_utils_pkg::*; + import tl_agent_pkg::*; + import dv_lib_pkg::*; + import cip_base_pkg::*; + + typedef struct { + string device_name; + addr_range_t addr_ranges[$]; + } tl_device_t; + + typedef struct { + string host_name; + int host_id; + string valid_devices[$]; + } tl_host_t; + + // this file is auto-generated and the path to this file should be provided in xbar_*_sim.core + `include "xbar_env_pkg__params.sv" + + function automatic int get_host_id(string name); + foreach (xbar_hosts[i]) begin + if (xbar_hosts[i].host_name == name) return i; + end + return -1; + endfunction + + function automatic bit is_valid_path(string host_name, string device_name); + foreach (xbar_hosts[i]) begin + if (xbar_hosts[i].host_name == host_name) begin + foreach (xbar_hosts[i].valid_devices[j]) begin + if (xbar_hosts[i].valid_devices[j] == device_name) + return 1; + end + end + end + return 0; + endfunction + + function automatic bit is_device_valid_addr(string device_name, bit [top_pkg::TL_AW-1 : 0] addr); + foreach (xbar_devices[i]) begin + if (xbar_devices[i].device_name == device_name) begin + foreach (xbar_devices[i].addr_ranges[j]) begin + if (addr inside {[xbar_devices[i].addr_ranges[j].start_addr : + xbar_devices[i].addr_ranges[j].end_addr]}) begin + return 1; + end + end + end + end + return 0; + endfunction + + `include "xbar_env_cfg.sv" + `include "xbar_env_cov.sv" + `include "xbar_virtual_sequencer.sv" + `include "xbar_scoreboard.sv" + `include "xbar_env.sv" + `include "xbar_vseq_list.sv" + +endpackage diff --git a/src/tlul/generic_dv/env/xbar_scoreboard.sv b/src/tlul/generic_dv/env/xbar_scoreboard.sv new file mode 100644 index 000000000..c72475680 --- /dev/null +++ b/src/tlul/generic_dv/env/xbar_scoreboard.sv @@ -0,0 +1,142 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// ------------------------------------------------------------------------ +// Xbar scoreboard class +// Extend from common multi-streams scoreboard +// Use the device address map to determine the queue ID +// ------------------------------------------------------------------------ +class xbar_scoreboard extends scoreboard_pkg::scoreboard #(.ITEM_T(tl_seq_item), + .CFG_T (xbar_env_cfg), + .COV_T (xbar_env_cov)); + int chan_prefix_len = 7; + + `uvm_component_utils(xbar_scoreboard) + `uvm_component_new + + // Customize the get_queue_name function + // port_name is {"a/d_chan_", host/devce name} + // tl_channel is "a/d_chan_" + // tl_port is host/devce name + virtual function string get_queue_name(tl_seq_item tr, string port_name); + string queue_name; + string tl_channel; + string tl_port; + tl_channel = port_name.substr(0, chan_prefix_len-1); + + tl_port = port_name.substr(chan_prefix_len, port_name.len() - 1); + if (!port_dir.exists(port_name)) begin + `uvm_fatal(`gfn, $sformatf("Unexpected port name %0s", tl_port)) + end begin + queue_name = get_queue_full_name(tr, tl_port, tl_channel); + end + `uvm_info(`gfn, $sformatf("Scoreboard queue name : %0s", queue_name), UVM_HIGH) + return queue_name; + endfunction + + // queue name is a_chan_``device_name`` or d_chan_``device_name``, device name is its suffix + // a_chan_/d_chan_ is prefix, which is from input queue_prefix + // if port is a device, return {queue_prefix, device_name} + // if port is a host, need to find the pair device_name, then return {queue_prefix, device_name} + // if unmapped addr, src is host a_chan, dst is host d_chan, so, + // use another prefix and return {"host_unmapped_addr_", host_name} + virtual function string get_queue_full_name(tl_seq_item tr, + string tl_port, + string queue_prefix); + foreach (xbar_devices[i]) begin + if (xbar_devices[i].device_name == tl_port) return {queue_prefix, tl_port}; + end + foreach (xbar_hosts[i]) begin + if (xbar_hosts[i].host_name == tl_port) begin + // Current port is a host port, get pair device port from the address + foreach (xbar_devices[j]) begin + if (xbar_devices[j].device_name inside {xbar_hosts[i].valid_devices} && + is_device_valid_addr(xbar_devices[j].device_name, tr.a_addr)) begin + return {queue_prefix, xbar_devices[j].device_name}; + end + end + // it's unmapped address + `uvm_info(`gfn, $sformatf("Unmapped addr: 0x%0h at %0s", tr.a_addr, tl_port), UVM_HIGH) + return {"host_unmapped_addr_", tl_port}; + end + end + `uvm_error(`gfn, $sformatf("Found unexpected item at[%0s]: %0s", + tl_port, tr.convert2string())) + endfunction + + // from host to device, source ID may be changed and set all source ID to 0 + function tl_seq_item modify_source_id(tl_seq_item tr); + tl_seq_item tr_modified; + `downcast(tr_modified, tr.clone()); + tr_modified.a_source = 0; + tr_modified.d_source = 0; + return tr_modified; + endfunction + + // check if the item is from host and it has mapped address + function bit is_access_to_mapped_addr(tl_seq_item tr, string port_name); + string tl_port; + tl_port = port_name.substr(chan_prefix_len, port_name.len() - 1); + foreach (xbar_hosts[i]) begin + if (xbar_hosts[i].host_name == tl_port) begin + foreach (xbar_devices[j]) begin + if (xbar_devices[j].device_name inside {xbar_hosts[i].valid_devices} && + is_device_valid_addr(xbar_devices[j].device_name, tr.a_addr)) begin + if (cfg.en_cov) cov.host_access_mapped_addr_cg[tl_port].sample(1); + return 1; // host port and mapped address + end + end + if (cfg.en_cov) cov.host_access_mapped_addr_cg[tl_port].sample(0); + return 0; // host port, but unmapped address + end + end + return 1; // not host port + endfunction + + virtual function void process_src_packet(input tl_seq_item tr, + input string port_name, + output tl_seq_item transformed_tr[$]); + tl_seq_item modified_tr; + if (is_access_to_mapped_addr(tr, port_name)) begin + modified_tr = modify_source_id(tr); + // d_data is 0, when it's a write + if (modified_tr.d_opcode == tlul_pkg::AccessAck) modified_tr.d_data = 0; + transformed_tr = {modified_tr}; + end else begin + cip_tl_seq_item rsp; + `downcast(rsp, tr.clone()); + rsp.d_source = tr.a_source; + rsp.d_size = tr.a_size; + rsp.d_error = 1; + if (rsp.a_opcode == tlul_pkg::Get) begin + tlul_pkg::tl_a_user_t a_user = tlul_pkg::tl_a_user_t'(rsp.a_user); + // if an error occurs, when it's an instrution, return all 0 + // since it's an illegal instruction, otherwise, return all 1s + rsp.d_data = a_user.instr_type == prim_mubi_pkg::MuBi4True ? 0 : '1; + end else begin + rsp.d_data = 0; + end + rsp.d_opcode = rsp.a_opcode == tlul_pkg::Get ? + tlul_pkg::AccessAckData : tlul_pkg::AccessAck; + rsp.d_user = rsp.compute_d_user; + + transformed_tr = {rsp}; + end + endfunction + + virtual function void process_dst_packet(input tl_seq_item tr, + input string port_name, + output tl_seq_item transformed_tr); + // if item is mapped, item will pass from h2d or d2h, source id may be changed and we don't + // predict it, modify all source_id to 0. + // if unmapped, item isn't passed down. source id shouldn't be changed. Check it + if (is_access_to_mapped_addr(tr, port_name)) transformed_tr = modify_source_id(tr); + else transformed_tr = tr; + endfunction + + function string get_tl_port(string port_name); + return port_name.substr(chan_prefix_len, port_name.len()-1); + endfunction + +endclass diff --git a/src/tlul/generic_dv/env/xbar_virtual_sequencer.sv b/src/tlul/generic_dv/env/xbar_virtual_sequencer.sv new file mode 100644 index 000000000..b9368bfe6 --- /dev/null +++ b/src/tlul/generic_dv/env/xbar_virtual_sequencer.sv @@ -0,0 +1,16 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// --------------------------------------------- +// Xbar environment virtual sequencer +// --------------------------------------------- +class xbar_virtual_sequencer extends dv_base_virtual_sequencer #(.CFG_T(xbar_env_cfg), + .COV_T(xbar_env_cov)); + + tl_sequencer host_seqr[]; + tl_sequencer device_seqr[]; + + `uvm_component_utils(xbar_virtual_sequencer) + `uvm_component_new +endclass diff --git a/src/tlul/generic_dv/tb/tb.sv b/src/tlul/generic_dv/tb/tb.sv new file mode 100644 index 000000000..d8b6c6f74 --- /dev/null +++ b/src/tlul/generic_dv/tb/tb.sv @@ -0,0 +1,27 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +module tb; + + import uvm_pkg::*; + import dv_utils_pkg::*; + import xbar_test_pkg::*; + + wire clk, rst_n; + // reference clock for scb/seq and this clock isn't connected to any design clock + // TODO, reset is the combined all the resets. Re-visit this if partial reset is needed + clk_rst_if clk_rst_if(.clk(clk), .rst_n(rst_n)); + + // this file is auto-generated and the path to this file should be provided in xbar_*_sim.core + `include "tb__xbar_connect.sv" + + initial begin + // drive clk and rst_n from clk_if + clk_rst_if.set_active(); + uvm_config_db#(virtual clk_rst_if)::set(null, "*.env*", "clk_rst_vif", clk_rst_if); + $timeformat(-12, 0, " ps", 12); + run_test(); + end + +endmodule diff --git a/src/tlul/generic_dv/tb/xbar_macros.core b/src/tlul/generic_dv/tb/xbar_macros.core new file mode 100644 index 000000000..929151868 --- /dev/null +++ b/src/tlul/generic_dv/tb/xbar_macros.core @@ -0,0 +1,17 @@ +CAPI=2: +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +# +name: "lowrisc:dv:xbar_macros:0.1" +description: "XBAR Macros" +filesets: + files_dv: + files: + - xbar_macros.svh + file_type: systemVerilogSource + +targets: + default: + filesets: + - files_dv diff --git a/src/tlul/generic_dv/tb/xbar_macros.svh b/src/tlul/generic_dv/tb/xbar_macros.svh new file mode 100644 index 000000000..99cf695f7 --- /dev/null +++ b/src/tlul/generic_dv/tb/xbar_macros.svh @@ -0,0 +1,49 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// --------------------------------------------- +// TileLink interface connection macros +// --------------------------------------------- + +// reset is from tb.clk_rst_if, disable driving reset in this clk_rst_if +`define DRIVE_CLK(name, freq = $urandom_range(10, 100)) \ + wire ``name``; \ + clk_rst_if clk_rst_if_``name``(.clk(``name``), .rst_n(rst_n)); \ + initial begin \ + clk_rst_if_``name``.set_active(.drive_rst_n_val(0)); \ + clk_rst_if_``name``.set_freq_mhz(freq); \ + end + +`define DRIVE_TL_DEVICE_IF(tl_name, path = dut, clk, rst_n, i_sfx = i, o_sfx = o) \ + force ``tl_name``_tl_if.h2d = ``path``.tl_``tl_name``_``o_sfx``; \ + force ``path``.tl_``tl_name``_``i_sfx`` = ``tl_name``_tl_if.d2h; \ + uvm_config_db#(virtual tl_if)::set(null, $sformatf("*env.%0s_agent", `"tl_name`"), "vif", \ + ``tl_name``_tl_if); + +`define DRIVE_TL_HOST_IF(tl_name, path = dut, clk, rst_n, i_sfx = i, o_sfx = o) \ + force ``tl_name``_tl_if.d2h = ``path``.tl_``tl_name``_``o_sfx``; \ + force ``path``.tl_``tl_name``_``i_sfx`` = ``tl_name``_tl_if.h2d; \ + uvm_config_db#(virtual tl_if)::set(null, $sformatf("*env.%0s_agent", `"tl_name`"), "vif", \ + ``tl_name``_tl_if); + +`define CONNECT_TL_DEVICE_IF(tl_name, path = dut, clk, rst_n, i_sfx = i, o_sfx = o) \ + tl_if ``tl_name``_tl_if(clk, rst_n); \ + initial begin \ + `DRIVE_TL_DEVICE_IF(tl_name, path, clk, rst_n, i_sfx, o_sfx) \ + end + +`define CONNECT_TL_HOST_IF(tl_name, path = dut, clk, rst_n, i_sfx = i, o_sfx = o) \ + tl_if ``tl_name``_tl_if(clk, rst_n); \ + initial begin \ + `DRIVE_TL_HOST_IF(tl_name, path, clk, rst_n, i_sfx, o_sfx) \ + end + +`define CONNECT_TL_MON_IF(dut_h2d, dut_d2h, tl_name, clk, rst_n) \ + tl_if ``tl_name``_tl_if(clk, rst_n); \ + initial begin \ + force ``tl_name``_tl_if.h2d = dut_h2d; \ + force ``tl_name``_tl_if.d2h = dut_d2h; \ + uvm_config_db#(virtual tl_if)::set(null, $sformatf("*%0s*", `"tl_name`"), "vif", \ + ``tl_name``_tl_if); \ + end diff --git a/src/tlul/generic_dv/tb/xbar_tb.core b/src/tlul/generic_dv/tb/xbar_tb.core new file mode 100644 index 000000000..163f3d78d --- /dev/null +++ b/src/tlul/generic_dv/tb/xbar_tb.core @@ -0,0 +1,21 @@ +CAPI=2: +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +# +name: "lowrisc:dv:xbar_tb:0.1" +description: "XBAR DV tb" +filesets: + files_dv: + depend: + - lowrisc:ip:tlul + - lowrisc:dv:xbar_test + - lowrisc:dv:xbar_macros + files: + - tb.sv + file_type: systemVerilogSource + +targets: + default: + filesets: + - files_dv diff --git a/src/tlul/generic_dv/tests/xbar_base_test.sv b/src/tlul/generic_dv/tests/xbar_base_test.sv new file mode 100644 index 000000000..7bd877d7c --- /dev/null +++ b/src/tlul/generic_dv/tests/xbar_base_test.sv @@ -0,0 +1,46 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +class xbar_base_test extends dv_base_test #(.ENV_T(xbar_env), .CFG_T(xbar_env_cfg)); + `uvm_component_utils(xbar_base_test) + `uvm_component_new + + virtual function void build_phase(uvm_phase phase); + max_quit_count = 50; + test_timeout_ns = 600_000_000; // 600ms + super.build_phase(phase); + + if (cfg.zero_delays) begin + cfg.allow_host_drop_valid_wo_ready = 0; + cfg.allow_device_drop_valid_wo_ready = 0; + cfg.min_host_req_delay = 0; + cfg.max_host_req_delay = 0; + cfg.min_host_rsp_delay = 0; + cfg.max_host_rsp_delay = 0; + cfg.min_device_req_delay = 0; + cfg.max_device_req_delay = 0; + cfg.min_device_rsp_delay = 0; + cfg.max_device_rsp_delay = 0; + end + void'($value$plusargs("allow_host_drop_valid_wo_ready=%d", + cfg.allow_host_drop_valid_wo_ready)); + void'($value$plusargs("allow_device_drop_valid_wo_ready=%d", + cfg.allow_device_drop_valid_wo_ready)); + void'($value$plusargs("min_host_valid_len=%d", cfg.min_host_valid_len)); + void'($value$plusargs("max_host_valid_len=%d", cfg.max_host_valid_len)); + void'($value$plusargs("min_device_valid_len=%d", cfg.min_device_valid_len)); + void'($value$plusargs("max_device_valid_len=%d", cfg.max_device_valid_len)); + void'($value$plusargs("max_host_req_delay=%d", cfg.max_host_req_delay)); + void'($value$plusargs("min_host_rsp_delay=%d", cfg.min_host_rsp_delay)); + void'($value$plusargs("max_host_rsp_delay=%d", cfg.max_host_rsp_delay)); + void'($value$plusargs("min_device_req_delay=%d", cfg.min_device_req_delay)); + void'($value$plusargs("max_device_req_delay=%d", cfg.max_device_req_delay)); + void'($value$plusargs("min_device_rsp_delay=%d", cfg.min_device_rsp_delay)); + void'($value$plusargs("max_device_rsp_delay=%d", cfg.max_device_rsp_delay)); + void'($value$plusargs("num_enabled_hosts=%d", cfg.num_enabled_hosts)); + void'($value$plusargs("short_xbar_test=%b", cfg.short_xbar_test)); + cfg.update_agent_cfg(); + endfunction : build_phase + +endclass : xbar_base_test diff --git a/src/tlul/generic_dv/tests/xbar_error_test.sv b/src/tlul/generic_dv/tests/xbar_error_test.sv new file mode 100644 index 000000000..46ee91102 --- /dev/null +++ b/src/tlul/generic_dv/tests/xbar_error_test.sv @@ -0,0 +1,21 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// override cip_tl_seq_item with xbar_seq_err_item to disable TL protocol related constraint +class xbar_error_test extends xbar_base_test; + `uvm_component_utils(xbar_error_test) + `uvm_component_new + + virtual function void build_phase(uvm_phase phase); + super.build_phase(phase); + cip_base_pkg::cip_tl_seq_item::type_id::set_type_override(xbar_seq_err_item::get_type()); + endfunction : build_phase + + virtual task run_phase(uvm_phase phase); + // disable assertions for TL errors + uvm_config_db#(bit)::set(null, "*", "tlul_assert_en", 0); + uvm_config_db#(bit)::set(null, "*", "tlul_d_error_assert_en", 0); + super.run_phase(phase); + endtask : run_phase +endclass : xbar_error_test diff --git a/src/tlul/generic_dv/tests/xbar_test.core b/src/tlul/generic_dv/tests/xbar_test.core new file mode 100644 index 000000000..d250455ae --- /dev/null +++ b/src/tlul/generic_dv/tests/xbar_test.core @@ -0,0 +1,20 @@ +CAPI=2: +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +name: "lowrisc:dv:xbar_test:0.1" +description: "xbar DV UVM test" +filesets: + files_dv: + depend: + - lowrisc:dv:xbar_env + files: + - xbar_test_pkg.sv + - xbar_base_test.sv: {is_include_file: true} + - xbar_error_test.sv: {is_include_file: true} + file_type: systemVerilogSource + +targets: + default: + filesets: + - files_dv diff --git a/src/tlul/generic_dv/tests/xbar_test_pkg.sv b/src/tlul/generic_dv/tests/xbar_test_pkg.sv new file mode 100644 index 000000000..1f1e0ca47 --- /dev/null +++ b/src/tlul/generic_dv/tests/xbar_test_pkg.sv @@ -0,0 +1,19 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// --------------------------------------------- +// xBar test package +// --------------------------------------------- +package xbar_test_pkg; + + import uvm_pkg::*; + import xbar_env_pkg::*; + import tl_agent_pkg::*; + import dv_utils_pkg::*; + import dv_lib_pkg::*; + + `include "xbar_base_test.sv" + `include "xbar_error_test.sv" + +endpackage diff --git a/src/tlul/generic_dv/xbar_sim_cfg.hjson b/src/tlul/generic_dv/xbar_sim_cfg.hjson new file mode 100644 index 000000000..c48d1060b --- /dev/null +++ b/src/tlul/generic_dv/xbar_sim_cfg.hjson @@ -0,0 +1,49 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +{ + // Name of the sim cfg: set in the sim_cfg that imports this file + // name: "{dut}" + + // Top level testbench name (sv module). + tb: tb + + // Top level dut name (sv module): set in the autogenerated sim cfg file that imports this. + dut: "" + + // Simulator used to sign off this block + tool: vcs + + // The top level (chip) into which this xbar is meant to go. This is set in the sim_cfg that + // imports this file. + top_chip: "" + + // Fusesoc core file used for building the file list. + fusesoc_core: "lowrisc:dv:{top_chip}_{dut}_sim:0.1" + + // Give the path to the testplan file since it's not in the default location. + testplan_doc_path: "{proj_root}/hw/ip/tlul/data/tlul_testplan.hjson" + + // Bypass VCS CHECK_SUM check as the exclusion file is generated without proper CHECK_SUM value + vcs_cov_analyze_opts: ["-excl_bypass_checks"] + vcs_cov_report_opts: ["-excl_bypass_checks"] + xcelium_cov_analyze_opts: [] + xcelium_cov_report_opts: [] + + cov_analyze_opts: ["{{tool}_cov_analyze_opts}"] + cov_report_opts: ["{{tool}_cov_report_opts}"] + + // Import additional common sim cfg files. + import_cfgs: [// Project wide common sim cfg file + "{proj_root}/hw/dv/tools/dvsim/common_sim_cfg.hjson", + "{proj_root}/hw/ip/tlul/generic_dv/xbar_tests.hjson"] + + // Add additional tops for simulation. + sim_tops: ["{dut}_bind"] + + // Default iterations for all tests - each test entry can override this. + reseed: 50 + + // Enable cdc instrumentation. + run_opts: ["+cdc_instrumentation_enabled=1"] +} diff --git a/src/tlul/generic_dv/xbar_tests.hjson b/src/tlul/generic_dv/xbar_tests.hjson new file mode 100644 index 000000000..6216b5d31 --- /dev/null +++ b/src/tlul/generic_dv/xbar_tests.hjson @@ -0,0 +1,210 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +{ + // Run with a named build mode, and enable a named run mode. This allows an external testbench to + // override this build / run mode to apply additional common settings for all of these tests. + build_modes: [ + { + name: xbar_build_mode + } + ] + run_modes: [ + { + name: xbar_run_mode + } + ] + + // We rename the "default" build mode to "xbar_build_mode" so that it can be use to apply + // additional settings externally. We hence, map other settings that assume the build mode to be + // called as "default" to "xbar_build_mode". + xbar_build_mode_vcs_cov_cfg_file: "{default_vcs_cov_cfg_file}" + xbar_build_mode_xcelium_cov_cfg_file: "{default_xcelium_cov_cfg_file}" + + // List of test specifications. + tests: [ + { + name: "xbar_smoke" + build_mode: "xbar_build_mode" + en_run_modes: ["xbar_run_mode"] + uvm_test: xbar_base_test + uvm_test_seq: xbar_smoke_vseq + } + + { + name: "xbar_smoke_zero_delays" + build_mode: "xbar_build_mode" + en_run_modes: ["xbar_run_mode"] + uvm_test: xbar_base_test + uvm_test_seq: xbar_smoke_vseq + run_opts: ["+zero_delays=1"] + } + + { + name: "xbar_smoke_large_delays" + build_mode: "xbar_build_mode" + en_run_modes: ["xbar_run_mode"] + uvm_test: xbar_base_test + uvm_test_seq: xbar_smoke_vseq + run_opts: ["+max_host_req_delay=1000", + "+max_host_rsp_delay=1000", + "+max_device_req_delay=1000", + "+max_device_rsp_delay=1000", + "+max_host_valid_len=2000", + "+max_device_valid_len=2000"] + } + + { + name: "xbar_smoke_slow_rsp" + build_mode: "xbar_build_mode" + en_run_modes: ["xbar_run_mode"] + uvm_test: xbar_base_test + uvm_test_seq: xbar_smoke_vseq + run_opts: ["+max_host_req_delay=10", + "+max_host_rsp_delay=1000", + "+max_device_req_delay=1000", + "+max_device_rsp_delay=10", + "+max_host_valid_len=2000", + "+max_device_valid_len=2000"] + } + + { + name: "xbar_random" + build_mode: "xbar_build_mode" + en_run_modes: ["xbar_run_mode"] + uvm_test: xbar_base_test + uvm_test_seq: xbar_random_vseq + } + + { + name: "xbar_random_zero_delays" + build_mode: "xbar_build_mode" + en_run_modes: ["xbar_run_mode"] + uvm_test: xbar_base_test + uvm_test_seq: xbar_random_vseq + run_opts: ["+zero_delays=1"] + } + + { + name: "xbar_random_large_delays" + build_mode: "xbar_build_mode" + en_run_modes: ["xbar_run_mode"] + uvm_test: xbar_base_test + uvm_test_seq: xbar_random_vseq + run_opts: ["+max_host_req_delay=1000", + "+max_host_rsp_delay=1000", + "+max_device_req_delay=1000", + "+max_device_rsp_delay=1000", + "+max_host_valid_len=2000", + "+max_device_valid_len=2000"] + } + + { + name: "xbar_random_slow_rsp" + build_mode: "xbar_build_mode" + en_run_modes: ["xbar_run_mode"] + uvm_test: xbar_base_test + uvm_test_seq: xbar_random_vseq + run_opts: ["+max_host_req_delay=10", + "+max_host_rsp_delay=1000", + "+max_device_req_delay=1000", + "+max_device_rsp_delay=10", + "+max_host_valid_len=2000", + "+max_device_valid_len=2000"] + } + + { + name: "xbar_access_same_device" + build_mode: "xbar_build_mode" + en_run_modes: ["xbar_run_mode"] + uvm_test: xbar_base_test + uvm_test_seq: xbar_access_same_device_vseq + } + + { + name: "xbar_access_same_device_slow_rsp" + build_mode: "xbar_build_mode" + en_run_modes: ["xbar_run_mode"] + uvm_test: xbar_base_test + uvm_test_seq: xbar_access_same_device_vseq + run_opts: ["+max_host_req_delay=10", + "+max_host_rsp_delay=1000", + "+max_device_req_delay=1000", + "+max_device_rsp_delay=10", + "+max_host_valid_len=2000", + "+max_device_valid_len=2000"] + } + + { + name: "xbar_same_source" + build_mode: "xbar_build_mode" + en_run_modes: ["xbar_run_mode"] + uvm_test: xbar_base_test + uvm_test_seq: xbar_same_source_vseq + } + + { + name: "xbar_error_random" + build_mode: "xbar_build_mode" + en_run_modes: ["xbar_run_mode"] + uvm_test: xbar_error_test + uvm_test_seq: xbar_random_vseq + } + + { + name: "xbar_unmapped_addr" + build_mode: "xbar_build_mode" + en_run_modes: ["xbar_run_mode"] + uvm_test: xbar_base_test + uvm_test_seq: xbar_unmapped_addr_vseq + } + + { + name: "xbar_error_and_unmapped_addr" + build_mode: "xbar_build_mode" + en_run_modes: ["xbar_run_mode"] + uvm_test: xbar_error_test + uvm_test_seq: xbar_unmapped_addr_vseq + } + + { + name: "xbar_stress_all" + build_mode: "xbar_build_mode" + en_run_modes: ["xbar_run_mode"] + uvm_test: xbar_base_test + uvm_test_seq: xbar_stress_all_vseq + } + + { + name: "xbar_stress_all_with_rand_reset" + build_mode: "xbar_build_mode" + en_run_modes: ["xbar_run_mode"] + uvm_test: xbar_base_test + uvm_test_seq: xbar_stress_all_with_rand_reset_vseq + } + + { + name: "xbar_stress_all_with_error" + build_mode: "xbar_build_mode" + en_run_modes: ["xbar_run_mode"] + uvm_test: xbar_error_test + uvm_test_seq: xbar_stress_all_vseq + } + + { + name: "xbar_stress_all_with_reset_error" + build_mode: "xbar_build_mode" + en_run_modes: ["xbar_run_mode"] + uvm_test: xbar_error_test + uvm_test_seq: xbar_stress_all_with_rand_reset_vseq + } + ] + + // List of regressions. + regressions: [ + { + name: smoke + tests: ["xbar_smoke"] + } + ] +} diff --git a/src/tlul/headers.core b/src/tlul/headers.core new file mode 100644 index 000000000..3da0e1c75 --- /dev/null +++ b/src/tlul/headers.core @@ -0,0 +1,21 @@ +CAPI=2: +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +name: "lowrisc:tlul:headers:0.1" +description: "TL-UL headers" + +filesets: + files_rtl: + depend: + - lowrisc:constants:top_pkg + - lowrisc:prim:secded + - lowrisc:prim:mubi + files: + - rtl/tlul_pkg.sv + file_type: systemVerilogSource + +targets: + default: + filesets: + - files_rtl diff --git a/src/tlul/lint/tlul_adapter_host.vlt b/src/tlul/lint/tlul_adapter_host.vlt new file mode 100644 index 000000000..b8340b208 --- /dev/null +++ b/src/tlul/lint/tlul_adapter_host.vlt @@ -0,0 +1,4 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// diff --git a/src/tlul/lint/tlul_adapter_host.waiver b/src/tlul/lint/tlul_adapter_host.waiver new file mode 100644 index 000000000..971cb60b0 --- /dev/null +++ b/src/tlul/lint/tlul_adapter_host.waiver @@ -0,0 +1,14 @@ +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +# +# waiver file for TLUL elements lint + +waive -rules {HIER_BRANCH_NOT_READ INPUT_NOT_READ} \ + -location {tlul_adapter_host.sv} \ + -regexp {'(clk_i|rst_ni)' is not read from} \ + -comment "These 2 signals are only used by assertions" +waive -rules {HIER_NET_NOT_READ INPUT_NOT_READ} \ + -location {tlul_adapter_host.sv} \ + -regexp {'tl_i.d_(error|opcode|param|sink|size|source|user)' is not read from} \ + -comment "Not all fields of response needed" diff --git a/src/tlul/lint/tlul_adapter_reg.vlt b/src/tlul/lint/tlul_adapter_reg.vlt new file mode 100644 index 000000000..b8340b208 --- /dev/null +++ b/src/tlul/lint/tlul_adapter_reg.vlt @@ -0,0 +1,4 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// diff --git a/src/tlul/lint/tlul_adapter_reg.waiver b/src/tlul/lint/tlul_adapter_reg.waiver new file mode 100644 index 000000000..0ef2a9b3c --- /dev/null +++ b/src/tlul/lint/tlul_adapter_reg.waiver @@ -0,0 +1,13 @@ +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +# +# waiver file for TLUL elements lint + +# Adapter (RegIF) +waive -rules PARTIAL_CONST_ASSIGN -location {tlul_adapter_reg.sv} -regexp {rspop.*conditionally assigned a constant} \ + -comment "makes the code more readable" +waive -rules CONST_FF -location {tlul_adapter_reg.sv} -regexp {rspop.*is driven by constant zeros} \ + -comment "makes the code more readable" +waive -rules INPUT_NOT_READ -location {tlul_adapter_reg.sv} -regexp {Input port.*a_(address|param|user).*not read from} \ + -comment "several TLUL signals are not used by register file" diff --git a/src/tlul/lint/tlul_adapter_sram.vlt b/src/tlul/lint/tlul_adapter_sram.vlt new file mode 100644 index 000000000..acd297fb2 --- /dev/null +++ b/src/tlul/lint/tlul_adapter_sram.vlt @@ -0,0 +1,17 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// + +`verilator_config + +// This signal is only used by an assertion. +lint_off -rule UNUSED -file "*/rtl/tlul_adapter_sram.sv" -match "Signal is not used: 'rspfifo_wready'" + +// Signal is not used: clk_i +// leaving clk and reset connected in-case we want to add assertions +lint_off -rule UNUSED -file "*/rtl/tlul_sram_byte.sv" -match "*clk_i*" + +// Signal is not used: rst_ni +// leaving clk and reset connected in-case we want to add assertions +lint_off -rule UNUSED -file "*/rtl/tlul_sram_byte.sv" -match "*rst_ni*" diff --git a/src/tlul/lint/tlul_adapter_sram.waiver b/src/tlul/lint/tlul_adapter_sram.waiver new file mode 100644 index 000000000..cfdadef98 --- /dev/null +++ b/src/tlul/lint/tlul_adapter_sram.waiver @@ -0,0 +1,31 @@ +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +# +# waiver file for TLUL elements lint + +# Adapter (SRAM) +# INPUT_NOT_READ +waive -rules INPUT_NOT_READ -location {tlul_adapter_sram.sv} -regexp {Input port 'tl_i.a_(mask|param|user)} \ + -comment "Not necessary for SRAM access" +waive -rules HIER_NET_NOT_READ -regexp {Connected net 'tl_i.a_(mask|param|user).* is not read from in module 'tlul_adapter_sram'} \ + -comment "Not necessary for SRAM access" +waive -rules HIER_NET_NOT_READ -regexp {'rspfifo_full' is not read from in module 'tlul_adapter_sram'} \ + -comment "This signal is only used by assertions" +waive -rules CONST_OUTPUT -location {tlul_adapter_sram.sv} -regexp {tl_o\.d_(param|sink|user)} \ + -comment "Tied to 0" +waive -rules INPUT_NOT_READ -regexp {Input port 'tl_i.a_address.*' is not read from} \ + -comment "Not all bits of a_address are used (depending on the address parameters)" +waive -rules HIER_NET_NOT_READ -regexp {Connected net 'tl_i.a_address.*' at tlul_adapter_sram.sv.* is not read from in module 'tlul_adapter_sram'} \ + -comment "Not all bits of a_address are used (depending on the address parameters)" +waive -rules HIER_NET_NOT_READ -msg {Net 'rspfifo_wready' is not read from in module 'tlul_adapter_sram'} \ + -comment "This signal is only used by an assertion" +waive -rules NOT_READ -msg {Signal 'rspfifo_wready' is not read from in module 'tlul_adapter_sram'} \ + -comment "This signal is only used by an assertion" +waive -rules VAR_INDEX_RANGE -regexp {.*woffset' of length 1 is larger than the 0 bits required to address.*} \ + -comment "The woffset signal is tied to constant 0 in this case. Fixing this warning in RTL would complicate \ + the design since multiple generate blocks would be needed with almost identical content." +waive -rules HIER_BRANCH_NOT_READ -location {tlul_sram_byte.sv} -regexp {Net '(clk_i|rst_ni)' is not read from in module 'tlul_sram_byte'} \ + -comment "If EnableIntg=0, the module is just passed through" +waive -rules INPUT_NOT_READ -location {tlul_sram_byte.sv} -regexp {Input port '(clk_i|rst_ni)' is not read from} \ + -comment "If EnableIntg=0, the module is just passed through" diff --git a/src/tlul/lint/tlul_common.vlt b/src/tlul/lint/tlul_common.vlt new file mode 100644 index 000000000..54c798eab --- /dev/null +++ b/src/tlul/lint/tlul_common.vlt @@ -0,0 +1,13 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +`verilator_config + +// TLUL Error +// All error checkings are comb logic and only portion of signals are used +lint_off -rule UNUSED -file "*/rtl/tlul_err.sv" + +// FIFOs +// The depth parameters are of type int unsigned, but the higher-level modules can extract the per-port FIFO depths from a M|N x 4 bit array and drive the LSBs only. +lint_off -rule WIDTH -file "*/rtl/tlul_fifo_sync.sv" -match "Operator VAR '*Depth' expects 32 bits on the Initial value, but Initial value's CONST '*' generates 4 bits." diff --git a/src/tlul/lint/tlul_common.waiver b/src/tlul/lint/tlul_common.waiver new file mode 100644 index 000000000..7e40f314f --- /dev/null +++ b/src/tlul/lint/tlul_common.waiver @@ -0,0 +1,17 @@ +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +# +# waiver file for common TLUL elements + +# TLUL Error +waive -rules {HIER_NET_NOT_READ HIER_BRANCH_NOT_READ INPUT_NOT_READ NOT_READ PARAM_NOT_USED} -location {tlul_err.sv} \ + -comment "All error checkings are comb logic and only portion of signals are used" +waive -rules {ASSIGN_SIGN} -location {tlul_err.sv} -regexp {Unsigned target 'mask'} \ + -comment "Waive for readability" +waive -rules {HIER_NET_NOT_READ} -regexp {Connected net 'tl_i.a_(address|param|user).*in module 'tlul_err'} \ + -comment "unused signal is back-propagated to the instance" + +# TL-UL fifo +waive -rules {HIER_BRANCH_NOT_READ} -location {tlul_fifo_sync.sv} -regexp {Connected net '(clk_i|rst_ni)' at prim_fifo_sync.sv:.* is not read from in module 'prim_fifo_sync'} \ + -comment "In passthrough mode, clk and reset are not read form within this module" diff --git a/src/tlul/lint/tlul_lc_gate.vlt b/src/tlul/lint/tlul_lc_gate.vlt new file mode 100644 index 000000000..0afe02d19 --- /dev/null +++ b/src/tlul/lint/tlul_lc_gate.vlt @@ -0,0 +1,24 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// + +`verilator_config + +// These two signals are arrays that (combinatorially) feed between the +// indices. Tell Verilator to schedule the entries separately to avoid an +// UNOPTFLAT warning. +split_var -module "tlul_lc_gate" -var "tl_h2d_int" +split_var -module "tlul_lc_gate" -var "tl_d2h_int" + +// In tlul_lc_gate.sv, there's an always_comb block that writes to +// tl_h2d_error. This h2d signal feeds into the d2h signal through +// u_tlul_err_resp, which means a write to tl_h2d_error causes a change in +// tl_d2h_error, which retriggers the alway_comb block. This causes Verilator's +// reasonably cautious tracking logic to infer a circular dependency, giving +// UNOPTFLAT. +// +// The isolate_assignments metacomment here tells Verilator to split up that +// block and track the writes to tl_h2d_error separately from all the rest. +// This undoes the false loop. +isolate_assignments -module "tlul_lc_gate" -var "tl_h2d_error" diff --git a/src/tlul/lint/tlul_socket_1n.vlt b/src/tlul/lint/tlul_socket_1n.vlt new file mode 100644 index 000000000..b5e3601d7 --- /dev/null +++ b/src/tlul/lint/tlul_socket_1n.vlt @@ -0,0 +1,8 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +`verilator_config + +// a_ready not needed, goes into FIFO +lint_off -rule UNUSED -file "*/rtl/tlul_socket_1n.sv" -match "Bits of signal are not used: 'tl_t_p'[0]" diff --git a/src/tlul/lint/tlul_socket_1n.waiver b/src/tlul/lint/tlul_socket_1n.waiver new file mode 100644 index 000000000..c89edc075 --- /dev/null +++ b/src/tlul/lint/tlul_socket_1n.waiver @@ -0,0 +1,23 @@ +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +# +# waiver file for TLUL elements lint + +# socket 1:N +waive -rules INVALID_COMPARE -location {tlul_socket_1n.sv} -regexp {Comparison '.*dev_select_t == NWD'.*can never be true} \ + -comment "lint appears to be confused about the width expansion of NWD'(2)'" +waive -rules MIXED_SIGN -location {tlul_socket_1n.sv} -regexp {Unsigned operand .* and signed .NWD} \ + -comment "is there a way to make NWD'(idx)' an unsigned operand?" +waive -rules HIER_NET_NOT_READ -location {tlul_socket_1n.sv} -regexp {a_(address|data|mask|param|size|user.*)' in module 'tlul_socket_1n'} \ + -comment "request collateral is not used in \[N\] case, just for error response" +waive -rules NOT_READ -location {tlul_socket_1n.sv} -regexp {'tl_t_p.a_ready' is not read from in module 'tlul_socket_1n'} \ + -comment "a_ready not needed, goes into FIFO" +waive -rules INTEGER -location {tlul_socket_1n.sv} -msg {'idx' of type int used as a non-constant value} \ + -comment "This compares int idx (signed) with a multibit logic variable (unsigned), which is fine" + +# err_rsp +waive -rules INPUT_NOT_READ -location {tlul_err_resp.sv} -regexp {Input port 'tl_h_i.a_.*' is not read from in module 'tlul_err_resp'} \ + -comment "error response does not require command/address information" +waive -rules CONST_OUTPUT -location {tlul_err_resp.sv} -regexp {Output 'tl_h_o.d_.*' is driven by constant} \ + -comment "error response hard codes reponse data collateral" diff --git a/src/tlul/lint/tlul_socket_m1.vlt b/src/tlul/lint/tlul_socket_m1.vlt new file mode 100644 index 000000000..824268458 --- /dev/null +++ b/src/tlul/lint/tlul_socket_m1.vlt @@ -0,0 +1,12 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// + +`verilator_config + +// tlul_socket_m1 uses an arbiter to route the h2d TL packets. We represent +// them by a tlul_pkg::tl_h2d_t object, but ignore the a_valid and d_ready +// fields. Rather than explicitly pull out the other bits of the structure, +// just waive the warning (and assume the synthesis tool will chuck them away). +lint_off -rule UNUSED -file "*/rtl/tlul_socket_m1.sv" -match "Bits of signal are not used: 'arb_data'[*,0]" diff --git a/src/tlul/lint/tlul_socket_m1.waiver b/src/tlul/lint/tlul_socket_m1.waiver new file mode 100644 index 000000000..81feed326 --- /dev/null +++ b/src/tlul/lint/tlul_socket_m1.waiver @@ -0,0 +1,17 @@ +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +# +# waiver file for TLUL elements lint + +# socket M:1 +waive -rules HIER_NET_NOT_READ -location {tlul_socket_m1.sv} -regexp {a_.* in module 'tlul_socket_1n'} \ + -comment "request collateral is not used in \[N\] case, just for error response" +waive -rules HIER_NET_NOT_READ -location {tlul_socket_m1.sv} -regexp {Net 'arb_data.a_valid' is not read from in module 'tlul_socket_m1'} \ + -comment "valid is not used, it is assumed valid if it got into the arbiter" +waive -rules HIER_NET_NOT_READ -location {tlul_socket_m1.sv} -regexp {Net 'arb_data.d_ready' is not read from in module 'tlul_socket_m1'} \ + -comment "ready is not used, it is assumed valid if it got into the arbiter" +waive -rules NOT_READ -location {tlul_socket_m1.sv} -regexp {Signal 'arb_data.a_valid' is not read from in module 'tlul_socket_m1'} \ + -comment "valid is not used, it is assumed valid if it got into the arbiter" +waive -rules NOT_READ -location {tlul_socket_m1.sv} -regexp {Signal 'arb_data.d_ready' is not read from in module 'tlul_socket_m1'} \ + -comment "ready is not used, it is assumed valid if it got into the arbiter" diff --git a/src/tlul/lint/tlul_sram2tlul.vlt b/src/tlul/lint/tlul_sram2tlul.vlt new file mode 100644 index 000000000..b8340b208 --- /dev/null +++ b/src/tlul/lint/tlul_sram2tlul.vlt @@ -0,0 +1,4 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// diff --git a/src/tlul/lint/tlul_sram2tlul.waiver b/src/tlul/lint/tlul_sram2tlul.waiver new file mode 100644 index 000000000..8887d6b8d --- /dev/null +++ b/src/tlul/lint/tlul_sram2tlul.waiver @@ -0,0 +1,15 @@ +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +# +# waiver file for TLUL elements lint + +# sram2tlul +waive -rules CONST_OUTPUT -location {sram2tlul.sv} -regexp {Output 'tl_o\.[ad]_.*' is driven by constant} \ + -comment "Outputs are fixed value for TL-UL converter" +waive -rules HIER_BRANCH_NOT_READ -location {sram2tlul.sv} -regexp {Net '(clk_i|rst_ni)' is not read from} \ + -comment "Leaving clock and reset port for next update, looking at TL-UL ready signal" +waive -rules INPUT_NOT_READ -location {sram2tlul.sv} -regexp {Input.*'(clk_i|rst_ni)' is not read} \ + -comment "leaving clock and reset in converter for future use, handling a_ready" +waive -rules INPUT_NOT_READ -location {sram2tlul.sv} -regexp {Input.*'tl_i\.[ad]_(ready|param|sink|size|source|user.*)' is not read} \ + -comment "Those values are not checked by SRAM TL-UL adapter" diff --git a/src/tlul/rtl/sram2tlul.sv b/src/tlul/rtl/sram2tlul.sv new file mode 100644 index 000000000..f967e2af0 --- /dev/null +++ b/src/tlul/rtl/sram2tlul.sv @@ -0,0 +1,62 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// SRAM interface to TL-UL converter +// Current version only supports if TL-UL width and SRAM width are same +// If SRAM interface requests more than MaxOutstanding cap, it generates +// error in simulation but not in Silicon. + +`include "caliptra_prim_assert.sv" + +module sram2tlul + import tlul_pkg::*; + #( + parameter int SramAw = 12, + parameter int SramDw = 32, + parameter logic [TL_AW-1:0] TlBaseAddr = 'h0 // Base address of SRAM request +) ( + input clk_i, + input rst_ni, + + output tl_h2d_t tl_o, + input tl_d2h_t tl_i, + + // SRAM + input mem_req_i, + input mem_write_i, + input [SramAw-1:0] mem_addr_i, + input [SramDw-1:0] mem_wdata_i, + output logic mem_rvalid_o, + output logic [SramDw-1:0] mem_rdata_o, + output logic [1:0] mem_error_o +); + + + + `CALIPTRA_ASSERT_INIT(wrongSramDw, SramDw == TL_DW) + + localparam int unsigned SRAM_DWB = $clog2(SramDw/8); + + assign tl_o.a_valid = mem_req_i; + assign tl_o.a_opcode = (mem_write_i) ? PutFullData : Get; + assign tl_o.a_param = '0; + assign tl_o.a_size = TL_SZW'(SRAM_DWB); // Max Size always + assign tl_o.a_source = '0; + assign tl_o.a_address = TlBaseAddr | + {{(TL_AW-SramAw-SRAM_DWB){1'b0}},mem_addr_i,{(SRAM_DWB){1'b0}}}; + assign tl_o.a_mask = '1; + assign tl_o.a_data = mem_wdata_i; + assign tl_o.a_user = '0; + + assign tl_o.d_ready = 1'b1; + + assign mem_rvalid_o = tl_i.d_valid && (tl_i.d_opcode == AccessAckData); + assign mem_rdata_o = tl_i.d_data; + assign mem_error_o = {2{tl_i.d_error}}; + + // below assertion fails when TL-UL doesn't accept request in a cycle, + // which is currently not supported by sram2tlul + `CALIPTRA_ASSERT(validNotReady, tl_o.a_valid |-> tl_i.a_ready) + +endmodule diff --git a/src/tlul/rtl/tlul_adapter_host.sv b/src/tlul/rtl/tlul_adapter_host.sv new file mode 100644 index 000000000..b27362901 --- /dev/null +++ b/src/tlul/rtl/tlul_adapter_host.sv @@ -0,0 +1,189 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// tlul_adapter (Host adapter) converts basic req/grant/rvalid into TL-UL interface. If +// MAX_REQS == 1 it is purely combinational logic. If MAX_REQS > 1 flops are required. +// +// The host driving the adapter is responsible for ensuring it doesn't have more requests in flight +// than the specified MAX_REQS. +// +// The outgoing address is always word aligned. The access size is always the word size (as +// specified by TL_DW). For write accesses that occupy all lanes the operation is PutFullData, +// otherwise it is PutPartialData, mask is generated from be_i. For reads all lanes are enabled as +// required by TL-UL (every bit in mask set). +// +// When MAX_REQS > 1 tlul_adapter_host does not do anything to order responses from the TL-UL +// interface which could return them out of order. It is the host's responsibility to either only +// have outstanding requests to an address space it knows will return responses in order or to not +// care about out of order responses (note that if read data is returned out of order there is no +// way to determine this). + +`include "caliptra_prim_assert.sv" + +module tlul_adapter_host + import tlul_pkg::*; + import caliptra_prim_mubi_pkg::mubi4_t; +#( + parameter int unsigned MAX_REQS = 2, + parameter bit EnableDataIntgGen = 0, + parameter bit EnableRspDataIntgCheck = 0 +) ( + input clk_i, + input rst_ni, + + input req_i, + output logic gnt_o, + input logic [TL_AW-1:0] addr_i, + input logic we_i, + input logic [TL_DW-1:0] wdata_i, + input logic [DataIntgWidth-1:0] wdata_intg_i, + input logic [TL_DBW-1:0] be_i, + input mubi4_t instr_type_i, + + output logic valid_o, + output logic [TL_DW-1:0] rdata_o, + output logic [DataIntgWidth-1:0] rdata_intg_o, + output logic err_o, + output logic intg_err_o, + + output tl_h2d_t tl_o, + input tl_d2h_t tl_i +); + localparam int WordSize = $clog2(TL_DBW); + + logic [TL_AIW-1:0] tl_source; + logic [TL_DBW-1:0] tl_be; + tl_h2d_t tl_out; + + if (MAX_REQS == 1) begin : g_single_req + assign tl_source = '0; + end else begin : g_multiple_reqs + localparam int ReqNumW = $clog2(MAX_REQS); + localparam int unsigned MaxSource = MAX_REQS - 1; + localparam logic [ReqNumW-1:0] ReqNumOne = ReqNumW'(1'b1); + + logic [ReqNumW-1:0] source_d; + logic [ReqNumW-1:0] source_q; + + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + source_q <= '0; + end else begin + source_q <= source_d; + end + end + + always_comb begin + source_d = source_q; + + if (req_i && gnt_o) begin + if (source_q == MaxSource[ReqNumW-1:0]) begin + source_d = '0; + end else begin + source_d = source_q + ReqNumOne; + end + end + end + + assign tl_source = TL_AIW'(source_q); + end + + // For TL-UL Get opcode all active bytes must have their mask bit set, so all reads get all tl_be + // bits set. For writes the supplied be_i is used as the mask. + assign tl_be = ~we_i ? {TL_DBW{1'b1}} : be_i; + + assign tl_out = '{ + a_valid: req_i, + a_opcode: (~we_i) ? Get : + (&be_i) ? PutFullData : + PutPartialData, + a_param: 3'h0, + a_size: TL_SZW'(WordSize), + a_mask: tl_be, + a_source: tl_source, + a_address: {addr_i[31:WordSize], {WordSize{1'b0}}}, + a_data: wdata_i, + a_user: '{default: '0, data_intg: wdata_intg_i, instr_type: instr_type_i}, + d_ready: 1'b1 + }; + + tlul_cmd_intg_gen #(.EnableDataIntgGen (EnableDataIntgGen)) u_cmd_intg_gen ( + .tl_i(tl_out), + .tl_o(tl_o) + ); + + assign gnt_o = tl_i.a_ready; + + assign valid_o = tl_i.d_valid; + assign rdata_o = tl_i.d_data; + assign rdata_intg_o = tl_i.d_user.data_intg; + + logic intg_err; + tlul_rsp_intg_chk #( + .EnableRspDataIntgCheck(EnableRspDataIntgCheck) + ) u_rsp_chk ( + .tl_i, + .err_o(intg_err) + ); + + logic intg_err_q; + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + intg_err_q <= '0; + end else if (intg_err) begin + intg_err_q <= 1'b1; + end + end + + // err_o is transactional. This allows the host to continue + // debug without receiving an endless stream of errors. + assign err_o = tl_i.d_error | intg_err; + + // intg_err_o is permanent once detected, and should be used + // to trigger alerts + assign intg_err_o = intg_err_q | intg_err; + + // Addresses are assumed to be word-aligned, and the bottom bits are ignored + logic unused_addr_bottom_bits; + assign unused_addr_bottom_bits = ^addr_i[WordSize-1:0]; + + // Explicitly ignore unused fields of tl_i + logic unused_tl_i_fields; + assign unused_tl_i_fields = ^{tl_i.d_opcode, tl_i.d_param, + tl_i.d_size, tl_i.d_source, tl_i.d_sink, + tl_i.d_user}; + +`ifdef INC_ASSERT + //VCS coverage off + // pragma coverage off + localparam int OutstandingReqCntW = + (MAX_REQS == 2 ** $clog2(MAX_REQS)) ? $clog2(MAX_REQS) + 1 : $clog2(MAX_REQS); + localparam logic [OutstandingReqCntW-1:0] OutstandingReqCntOne = OutstandingReqCntW'(1'b1); + + logic [OutstandingReqCntW-1:0] outstanding_reqs_q; + logic [OutstandingReqCntW-1:0] outstanding_reqs_d; + + always_comb begin + outstanding_reqs_d = outstanding_reqs_q; + + if ((req_i && gnt_o) && !valid_o) begin + outstanding_reqs_d = outstanding_reqs_q + OutstandingReqCntOne; + end else if (!(req_i && gnt_o) && valid_o) begin + outstanding_reqs_d = outstanding_reqs_q - OutstandingReqCntOne; + end + end + + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + outstanding_reqs_q <= '0; + end else begin + outstanding_reqs_q <= outstanding_reqs_d; + end + end + //VCS coverage on + // pragma coverage on + + `ASSERT(DontExceeedMaxReqs, req_i |-> outstanding_reqs_d <= MAX_REQS) +`endif +endmodule diff --git a/src/tlul/rtl/tlul_adapter_reg.sv b/src/tlul/rtl/tlul_adapter_reg.sv new file mode 100644 index 000000000..10521ca9e --- /dev/null +++ b/src/tlul/rtl/tlul_adapter_reg.sv @@ -0,0 +1,237 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +`include "caliptra_prim_assert.sv" + +/** + * Tile-Link UL adapter for Register interface + * + * ICEBOX(#15822): Note that due to some modules with special needs (like + * the vendored-in RV_DM), this module has been extended so that it + * supports use cases outside of the generated reg_top module. This makes + * this adapter and its parameterization options a bit heavy. + * + * We should in the future come back to this and refactor / align the + * module and its parameterization needs. + */ + +module tlul_adapter_reg + import tlul_pkg::*; + import caliptra_prim_mubi_pkg::mubi4_t; +#( + parameter bit CmdIntgCheck = 0, // 1: Enable command integrity check + parameter bit EnableRspIntgGen = 0, // 1: Generate response integrity + parameter bit EnableDataIntgGen = 0, // 1: Generate response data integrity + parameter int RegAw = 8, // Width of register address + parameter int RegDw = 32, // Shall be matched with TL_DW + parameter int AccessLatency = 0, // 0: same cycle, 1: next cycle + localparam int RegBw = RegDw/8 +) ( + input clk_i, + input rst_ni, + + // TL-UL interface + input tl_h2d_t tl_i, + output tl_d2h_t tl_o, + + // control interface + input mubi4_t en_ifetch_i, + output logic intg_error_o, + + // Register interface + output logic re_o, + output logic we_o, + output logic [RegAw-1:0] addr_o, + output logic [RegDw-1:0] wdata_o, + output logic [RegBw-1:0] be_o, + input busy_i, + // The following two signals are expected + // to be returned in AccessLatency cycles. + input [RegDw-1:0] rdata_i, + // This can be a write or read error. + input error_i +); + + `CALIPTRA_ASSERT_INIT(AllowedLatency_A, AccessLatency inside {0, 1}) + + localparam int IW = $bits(tl_i.a_source); + localparam int SZW = $bits(tl_i.a_size); + + logic outstanding_q; // Indicates current request is pending + logic a_ack, d_ack; + + logic [RegDw-1:0] rdata, rdata_q; + logic error_q, error, err_internal, instr_error, intg_error; + + logic addr_align_err; // Size and alignment + logic malformed_meta_err; // User signal format error or unsupported + logic tl_err; // Common TL-UL error checker + + logic [IW-1:0] reqid_q; + logic [SZW-1:0] reqsz_q; + tl_d_op_e rspop_q; + + logic rd_req, wr_req; + + assign a_ack = tl_i.a_valid & tl_o.a_ready; + assign d_ack = tl_o.d_valid & tl_i.d_ready; + // Request signal + assign wr_req = a_ack & ((tl_i.a_opcode == PutFullData) | (tl_i.a_opcode == PutPartialData)); + assign rd_req = a_ack & (tl_i.a_opcode == Get); + + assign we_o = wr_req & ~err_internal; + assign re_o = rd_req & ~err_internal; + assign wdata_o = tl_i.a_data; + assign be_o = tl_i.a_mask; + + if (RegAw <= 2) begin : gen_only_one_reg + assign addr_o = '0; + end else begin : gen_more_regs + assign addr_o = {tl_i.a_address[RegAw-1:2], 2'b00}; // generate always word-align + end + + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) outstanding_q <= 1'b0; + else if (a_ack) outstanding_q <= 1'b1; + else if (d_ack) outstanding_q <= 1'b0; + end + + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + reqid_q <= '0; + reqsz_q <= '0; + rspop_q <= AccessAck; + end else if (a_ack) begin + reqid_q <= tl_i.a_source; + reqsz_q <= tl_i.a_size; + // Return AccessAckData regardless of error + rspop_q <= (rd_req) ? AccessAckData : AccessAck ; + end + end + + if (AccessLatency == 1) begin : gen_access_latency1 + logic wr_req_q, rd_req_q; + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + rdata_q <= '0; + error_q <= 1'b0; + wr_req_q <= 1'b0; + rd_req_q <= 1'b0; + end else begin + rd_req_q <= rd_req; + wr_req_q <= wr_req; + // Addressing phase + if (a_ack) begin + error_q <= err_internal; + // Response phase + end else begin + error_q <= error; + rdata_q <= rdata; + end + end + end + assign rdata = (error_i || error_q || wr_req_q) ? '1 : + (rd_req_q) ? rdata_i : + rdata_q; // backpressure case + assign error = (rd_req_q || wr_req_q) ? (error_q || error_i) : + error_q; // backpressure case + end else begin : gen_access_latency0 + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + rdata_q <= '0; + error_q <= 1'b0; + end else if (a_ack) begin + rdata_q <= (error_i || err_internal || wr_req) ? '1 : rdata_i; + error_q <= error_i || err_internal; + end + end + assign rdata = rdata_q; + assign error = error_q; + end + + tlul_pkg::tl_d2h_t tl_o_pre; + assign tl_o_pre = '{ + // busy is selected based on address + // thus if there is no valid transaction, we should ignore busy + a_ready: ~(outstanding_q | tl_i.a_valid & busy_i), + d_valid: outstanding_q, + d_opcode: rspop_q, + d_param: '0, + d_size: reqsz_q, + d_source: reqid_q, + d_sink: '0, + d_data: rdata, + d_user: '0, + d_error: error + }; + + // outgoing integrity generation + tlul_rsp_intg_gen #( + .EnableRspIntgGen(EnableRspIntgGen), + .EnableDataIntgGen(EnableDataIntgGen) + ) u_rsp_intg_gen ( + .tl_i(tl_o_pre), + .tl_o(tl_o) + ); + + if (CmdIntgCheck) begin : gen_cmd_intg_check + logic intg_error_q; + tlul_cmd_intg_chk u_cmd_intg_chk ( + .tl_i(tl_i), + .err_o(intg_error) + ); + // permanently latch integrity error until reset + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + intg_error_q <= 1'b0; + end else if (intg_error) begin + intg_error_q <= 1'b1; + end + end + assign intg_error_o = intg_error_q; + end else begin : gen_no_cmd_intg_check + assign intg_error = 1'b0; + assign intg_error_o = 1'b0; + end + + //////////////////// + // Error Handling // + //////////////////// + + // An instruction type transaction is only valid if en_ifetch is enabled + // If the instruction type is completely invalid, also considered an instruction error + assign instr_error = caliptra_prim_mubi_pkg::mubi4_test_invalid(tl_i.a_user.instr_type) | + (caliptra_prim_mubi_pkg::mubi4_test_true_strict(tl_i.a_user.instr_type) & + caliptra_prim_mubi_pkg::mubi4_test_false_loose(en_ifetch_i)); + + assign err_internal = addr_align_err | malformed_meta_err | tl_err | instr_error | intg_error; + + // Don't allow unsupported values. + assign malformed_meta_err = tl_a_user_chk(tl_i.a_user); + + // addr_align_err + // Raised if addr isn't aligned with the size + // Read size error is checked in tlul_assert.sv + // Here is it added due to the limitation of register interface. + always_comb begin + if (wr_req) begin + // Only word-align is accepted based on comportability spec + addr_align_err = |tl_i.a_address[1:0]; + end else begin + // No request + addr_align_err = 1'b0; + end + end + + // tl_err : separate checker + tlul_err u_err ( + .clk_i, + .rst_ni, + .tl_i, + .err_o (tl_err) + ); + + `CALIPTRA_ASSERT_INIT(MatchedWidthAssert, RegDw == TL_DW) + +endmodule diff --git a/src/tlul/rtl/tlul_adapter_sram.sv b/src/tlul/rtl/tlul_adapter_sram.sv new file mode 100644 index 000000000..9e429bc4b --- /dev/null +++ b/src/tlul/rtl/tlul_adapter_sram.sv @@ -0,0 +1,559 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +`include "caliptra_prim_assert.sv" + +/** + * Tile-Link UL adapter for SRAM-like devices + * + * - Intentionally omitted BaseAddr in case of multiple memory maps are used in a SoC, + * it means that aliasing can happen if target device size in TL-UL crossbar is bigger + * than SRAM size + * - At most one of EnableDataIntgGen / EnableDataIntgPt can be enabled. However it + * possible for both to be disabled. + * A module can neither generate an integrity response nor pass through any pre-existing + * integrity. This might be the case for non-security critical memories where there is + * no stored integrity AND another entity upstream is already generating returning integrity. + * There is however no case where EnableDataIntgGen and EnableDataIntgPt are both true. + */ +module tlul_adapter_sram + import tlul_pkg::*; + import caliptra_prim_mubi_pkg::mubi4_t; +#( + parameter int SramAw = 12, + parameter int SramDw = 32, // Must be multiple of the TL width + parameter int Outstanding = 1, // Only one request is accepted + parameter bit ByteAccess = 1, // 1: Enables sub-word write transactions. Note that this + // results in read-modify-write operations for integrity + // re-generation if EnableDataIntgPt is set to 1. + parameter bit ErrOnWrite = 0, // 1: Writes not allowed, automatically error + parameter bit ErrOnRead = 0, // 1: Reads not allowed, automatically error + parameter bit CmdIntgCheck = 0, // 1: Enable command integrity check + parameter bit EnableRspIntgGen = 0, // 1: Generate response integrity + parameter bit EnableDataIntgGen = 0, // 1: Generate response data integrity + parameter bit EnableDataIntgPt = 0, // 1: Passthrough command/response data integrity + parameter bit SecFifoPtr = 0, // 1: Duplicated fifo pointers + localparam int WidthMult = SramDw / TL_DW, + localparam int IntgWidth = tlul_pkg::DataIntgWidth * WidthMult, + localparam int DataOutW = EnableDataIntgPt ? SramDw + IntgWidth : SramDw +) ( + input clk_i, + input rst_ni, + + // TL-UL interface + input tl_h2d_t tl_i, + output tl_d2h_t tl_o, + + // control interface + input mubi4_t en_ifetch_i, + + // SRAM interface + output logic req_o, + output mubi4_t req_type_o, + input gnt_i, + output logic we_o, + output logic [SramAw-1:0] addr_o, + output logic [DataOutW-1:0] wdata_o, + output logic [DataOutW-1:0] wmask_o, + output logic intg_error_o, + input [DataOutW-1:0] rdata_i, + input rvalid_i, + input [1:0] rerror_i, // 2 bit error [1]: Uncorrectable, [0]: Correctable + output logic rmw_in_progress_o +); + + localparam int SramByte = SramDw/8; + localparam int DataBitWidth = caliptra_prim_util_pkg::vbits(SramByte); + localparam int WoffsetWidth = (SramByte == TL_DBW) ? 1 : + DataBitWidth - caliptra_prim_util_pkg::vbits(TL_DBW); + + logic error_det; // Internal protocol error checker + logic error_internal; // Internal protocol error checker + logic wr_attr_error; + logic instr_error; + logic wr_vld_error; + logic rd_vld_error; + logic rsp_fifo_error; + logic intg_error; + logic tlul_error; + + // integrity check + if (CmdIntgCheck) begin : gen_cmd_intg_check + tlul_cmd_intg_chk u_cmd_intg_chk ( + .tl_i(tl_i), + .err_o (intg_error) + ); + end else begin : gen_no_cmd_intg_check + assign intg_error = '0; + end + + // permanently latch integrity error until reset + logic intg_error_q; + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + intg_error_q <= '0; + end else if (intg_error || rsp_fifo_error) begin + intg_error_q <= 1'b1; + end + end + + // integrity error output is permanent and should be used for alert generation + // or other downstream effects + assign intg_error_o = intg_error | rsp_fifo_error | intg_error_q; + + // wr_attr_error: Check if the request size, mask are permitted. + // Basic check of size, mask, addr align is done in tlul_err module. + // Here it checks any partial write if ByteAccess isn't allowed. + assign wr_attr_error = (tl_i.a_opcode == PutFullData || tl_i.a_opcode == PutPartialData) + ? ((ByteAccess == 0) ? + (tl_i.a_mask != '1 || tl_i.a_size != 2'h2) : 1'b0) + : 1'b0; + + // An instruction type transaction is only valid if en_ifetch is enabled + // If the instruction type is completely invalid, also considered an instruction error + assign instr_error = caliptra_prim_mubi_pkg::mubi4_test_invalid(tl_i.a_user.instr_type) | + (caliptra_prim_mubi_pkg::mubi4_test_true_strict(tl_i.a_user.instr_type) & + caliptra_prim_mubi_pkg::mubi4_test_false_loose(en_ifetch_i)); + + if (ErrOnWrite == 1) begin : gen_no_writes + assign wr_vld_error = tl_i.a_opcode != Get; + end else begin : gen_writes_allowed + assign wr_vld_error = 1'b0; + end + + if (ErrOnRead == 1) begin: gen_no_reads + assign rd_vld_error = tl_i.a_opcode == Get; + end else begin : gen_reads_allowed + assign rd_vld_error = 1'b0; + end + + // tlul protocol check + tlul_err u_err ( + .clk_i, + .rst_ni, + .tl_i(tl_i), + .err_o (tlul_error) + ); + + // error return is transactional and thus does not used the "latched" intg_err signal + assign error_det = wr_attr_error | wr_vld_error | rd_vld_error | instr_error | + tlul_error | intg_error; + + // from sram_byte to adapter logic + tl_h2d_t tl_i_int; + // from adapter logic to sram_byte + tl_d2h_t tl_o_int; + // from sram_byte to rsp_gen + tl_d2h_t tl_out; + + // not all parts of tl_i_int are used + logic unused_tl_i_int; + assign unused_tl_i_int = ^tl_i_int; + + tlul_rsp_intg_gen #( + .EnableRspIntgGen(EnableRspIntgGen), + .EnableDataIntgGen(EnableDataIntgGen) + ) u_rsp_gen ( + .tl_i(tl_out), + .tl_o + ); + + // byte handling for integrity + tlul_sram_byte #( + .EnableIntg(ByteAccess & EnableDataIntgPt & !ErrOnWrite), + .Outstanding(Outstanding) + ) u_sram_byte ( + .clk_i, + .rst_ni, + .tl_i, + .tl_o(tl_out), + .tl_sram_o(tl_i_int), + .tl_sram_i(tl_o_int), + .error_i(error_det), + .error_o(error_internal), + .rmw_in_progress_o + ); + + typedef struct packed { + logic [TL_DBW-1:0] mask ; // Byte mask within the TL-UL word + logic [WoffsetWidth-1:0] woffset ; // Offset of the TL-UL word within the SRAM word + } sram_req_t ; + + typedef enum logic [1:0] { + OpWrite, + OpRead, + OpUnknown + } req_op_e ; + + typedef struct packed { + req_op_e op ; + logic error ; + caliptra_prim_mubi_pkg::mubi4_t instr_type; + logic [TL_SZW-1:0] size ; + logic [TL_AIW-1:0] source ; + } req_t ; + + typedef struct packed { + logic [TL_DW-1:0] data ; + logic [DataIntgWidth-1:0] data_intg ; + logic error ; + } rsp_t ; + + localparam int SramReqFifoWidth = $bits(sram_req_t) ; + localparam int ReqFifoWidth = $bits(req_t) ; + localparam int RspFifoWidth = $bits(rsp_t) ; + + // FIFO signal in case OutStand is greater than 1 + // If request is latched, {write, source} is pushed to req fifo. + // Req fifo is popped when D channel is acknowledged (v & r) + // D channel valid is asserted if it is write request or rsp fifo not empty if read. + logic reqfifo_wvalid, reqfifo_wready; + logic reqfifo_rvalid, reqfifo_rready; + req_t reqfifo_wdata, reqfifo_rdata; + + logic sramreqfifo_wvalid, sramreqfifo_wready; + logic sramreqfifo_rready; + sram_req_t sramreqfifo_wdata, sramreqfifo_rdata; + + logic rspfifo_wvalid, rspfifo_wready; + logic rspfifo_rvalid, rspfifo_rready; + rsp_t rspfifo_wdata, rspfifo_rdata; + + logic a_ack, d_ack, sram_ack; + assign a_ack = tl_i_int.a_valid & tl_o_int.a_ready ; + assign d_ack = tl_o_int.d_valid & tl_i_int.d_ready ; + assign sram_ack = req_o & gnt_i ; + + // Valid handling + logic d_valid, d_error; + always_comb begin + d_valid = 1'b0; + + if (reqfifo_rvalid) begin + if (reqfifo_rdata.error) begin + // Return error response. Assume no request went out to SRAM + d_valid = 1'b1; + end else if (reqfifo_rdata.op == OpRead) begin + d_valid = rspfifo_rvalid; + end else begin + // Write without error + d_valid = 1'b1; + end + end else begin + d_valid = 1'b0; + end + end + + + + always_comb begin + d_error = 1'b0; + + if (reqfifo_rvalid) begin + if (reqfifo_rdata.op == OpRead) begin + d_error = rspfifo_rdata.error | reqfifo_rdata.error; + end else begin + d_error = reqfifo_rdata.error; + end + end else begin + d_error = 1'b0; + end + end + + logic vld_rd_rsp; + assign vld_rd_rsp = d_valid & reqfifo_rvalid & rspfifo_rvalid & (reqfifo_rdata.op == OpRead); + // If the response data is not valid, we set it to an illegal blanking value which is determined + // by whether the current transaction is an instruction fetch or a regular read operation. + logic [TL_DW-1:0] error_blanking_data; + assign error_blanking_data = (caliptra_prim_mubi_pkg::mubi4_test_true_strict(reqfifo_rdata.instr_type)) ? + DataWhenInstrError : + DataWhenError; + + // Since DataWhenInstrError and DataWhenError can be arbitrary parameters + // we statically calculate the correct integrity values for these parameters here so that + // they do not have to be supplied externally. + logic [TL_DW-1:0] unused_instr, unused_data; + logic [DataIntgWidth-1:0] error_instr_integ, error_data_integ; + tlul_data_integ_enc u_tlul_data_integ_enc_instr ( + .data_i(DataMaxWidth'(DataWhenInstrError)), + .data_intg_o({error_instr_integ, unused_instr}) + ); + tlul_data_integ_enc u_tlul_data_integ_enc_data ( + .data_i(DataMaxWidth'(DataWhenError)), + .data_intg_o({error_data_integ, unused_data}) + ); + + logic [DataIntgWidth-1:0] error_blanking_integ; + assign error_blanking_integ = (caliptra_prim_mubi_pkg::mubi4_test_true_strict(reqfifo_rdata.instr_type)) ? + error_instr_integ : + error_data_integ; + + logic [TL_DW-1:0] d_data; + assign d_data = (vld_rd_rsp & ~d_error) ? rspfifo_rdata.data // valid read + : error_blanking_data; // write or TL-UL error + + // If this a write response with data fields set to 0, we have to set all ECC bits correctly + // since we are using an inverted Hsiao code. + logic [DataIntgWidth-1:0] data_intg; + assign data_intg = (vld_rd_rsp && reqfifo_rdata.error) ? error_blanking_integ : // TL-UL error + (vld_rd_rsp) ? rspfifo_rdata.data_intg : // valid read + caliptra_prim_secded_pkg::SecdedInv3932ZeroEcc; // valid write + + assign tl_o_int = '{ + d_valid : d_valid , + d_opcode : (d_valid && reqfifo_rdata.op != OpRead) ? AccessAck : AccessAckData, + d_param : '0, + d_size : (d_valid) ? reqfifo_rdata.size : '0, + d_source : (d_valid) ? reqfifo_rdata.source : '0, + d_sink : 1'b0, + d_data : d_data, + d_user : '{default: '0, data_intg: data_intg}, + d_error : d_valid && d_error, + a_ready : (gnt_i | error_internal) & reqfifo_wready & sramreqfifo_wready + }; + + // a_ready depends on the FIFO full condition and grant from SRAM (or SRAM arbiter) + // assemble response, including read response, write response, and error for unsupported stuff + + // Output to SRAM: + // Generate request only when no internal error occurs. If error occurs, the request should be + // dropped and returned error response to the host. So, error to be pushed to reqfifo. + // In this case, it is assumed the request is granted (may cause ordering issue later?) + assign req_o = tl_i_int.a_valid & reqfifo_wready & ~error_internal; + assign req_type_o = tl_i_int.a_user.instr_type; + assign we_o = tl_i_int.a_valid & (tl_i_int.a_opcode inside {PutFullData, PutPartialData}); + assign addr_o = (tl_i_int.a_valid) ? tl_i_int.a_address[DataBitWidth+:SramAw] : '0; + + // Support SRAMs wider than the TL-UL word width by mapping the parts of the + // TL-UL address which are more fine-granular than the SRAM width to the + // SRAM write mask. + logic [WoffsetWidth-1:0] woffset; + if (TL_DW != SramDw) begin : gen_wordwidthadapt + assign woffset = tl_i_int.a_address[DataBitWidth-1:caliptra_prim_util_pkg::vbits(TL_DBW)]; + end else begin : gen_no_wordwidthadapt + assign woffset = '0; + end + + // The size of the data/wmask depends on whether passthrough integrity is enabled. + // If passthrough integrity is enabled, the data is concatenated with the integrity passed through + // the user bits. Otherwise, it is the data only. + localparam int DataWidth = EnableDataIntgPt ? TL_DW + DataIntgWidth : TL_DW; + + // Final combined wmask / wdata + logic [WidthMult-1:0][DataWidth-1:0] wmask_combined; + logic [WidthMult-1:0][DataWidth-1:0] wdata_combined; + + // Original tlul portion + logic [WidthMult-1:0][TL_DW-1:0] wmask_int; + logic [WidthMult-1:0][TL_DW-1:0] wdata_int; + + // Integrity portion + logic [WidthMult-1:0][DataIntgWidth-1:0] wmask_intg; + logic [WidthMult-1:0][DataIntgWidth-1:0] wdata_intg; + + always_comb begin + wmask_int = '0; + wdata_int = '0; + + if (tl_i_int.a_valid) begin + for (int i = 0 ; i < TL_DW/8 ; i++) begin + wmask_int[woffset][8*i +: 8] = {8{tl_i_int.a_mask[i]}}; + wdata_int[woffset][8*i +: 8] = (tl_i_int.a_mask[i] && we_o) ? tl_i_int.a_data[8*i+:8] : '0; + end + end + end + + always_comb begin + wmask_intg = '0; + wdata_intg = '0; + + if (tl_i_int.a_valid) begin + wmask_intg[woffset] = {DataIntgWidth{1'b1}}; + wdata_intg[woffset] = tl_i_int.a_user.data_intg; + end + end + + for (genvar i = 0; i < WidthMult; i++) begin : gen_write_output + if (EnableDataIntgPt) begin : gen_combined_output + assign wmask_combined[i] = {wmask_intg[i], wmask_int[i]}; + assign wdata_combined[i] = {wdata_intg[i], wdata_int[i]}; + end else begin : gen_ft_output + logic unused_w; + assign wmask_combined[i] = wmask_int[i]; + assign wdata_combined[i] = wdata_int[i]; + assign unused_w = |wmask_intg & |wdata_intg; + end + end + + assign wmask_o = wmask_combined; + assign wdata_o = wdata_combined; + + assign reqfifo_wvalid = a_ack ; // Push to FIFO only when granted + assign reqfifo_wdata = '{ + op: (tl_i_int.a_opcode != Get) ? OpWrite : OpRead, // To return AccessAck for opcode error + error: error_internal, + instr_type: tl_i_int.a_user.instr_type, + size: tl_i_int.a_size, + source: tl_i_int.a_source + }; // Store the request only. Doesn't have to store data + assign reqfifo_rready = d_ack ; + + // push together with ReqFIFO, pop upon returning read + assign sramreqfifo_wdata = '{ + mask : tl_i_int.a_mask, + woffset : woffset + }; + assign sramreqfifo_wvalid = sram_ack & ~we_o; + assign sramreqfifo_rready = rspfifo_wvalid; + + assign rspfifo_wvalid = rvalid_i & reqfifo_rvalid; + + // Make sure only requested bytes are forwarded + logic [WidthMult-1:0][DataWidth-1:0] rdata_reshaped; + logic [DataWidth-1:0] rdata_tlword; + + // This just changes the array format so that the correct word can be selected by indexing. + assign rdata_reshaped = rdata_i; + + if (EnableDataIntgPt) begin : gen_no_rmask + always_comb begin + // If the read mask is set to zero, all read data is zeroed out by the mask. + // We have to set the ECC bits accordingly since we are using an inverted Hsiao code. + rdata_tlword = caliptra_prim_secded_pkg::SecdedInv3932ZeroWord; + // Otherwise, if at least one mask bit is nonzero, we are passing through the integrity. + // In that case we need to feed back the entire word since otherwise the integrity + // will not calculate correctly. + if (|sramreqfifo_rdata.mask) begin + // Select correct word. + rdata_tlword = rdata_reshaped[sramreqfifo_rdata.woffset]; + end + end + end else begin : gen_rmask + logic [DataWidth-1:0] rmask; + always_comb begin + rmask = '0; + for (int i = 0 ; i < TL_DW/8 ; i++) begin + rmask[8*i +: 8] = {8{sramreqfifo_rdata.mask[i]}}; + end + end + // Select correct word and mask it. + assign rdata_tlword = rdata_reshaped[sramreqfifo_rdata.woffset] & rmask; + end + + assign rspfifo_wdata = '{ + data : rdata_tlword[TL_DW-1:0], + data_intg : EnableDataIntgPt ? rdata_tlword[DataWidth-1 -: DataIntgWidth] : '0, + error : rerror_i[1] // Only care for Uncorrectable error + }; + assign rspfifo_rready = (reqfifo_rdata.op == OpRead & ~reqfifo_rdata.error) + ? reqfifo_rready : 1'b0 ; + + // This module only cares about uncorrectable errors. + logic unused_rerror; + assign unused_rerror = rerror_i[0]; + + // FIFO instance: REQ, RSP + + // ReqFIFO is to store the Access type to match to the Response data. + // For instance, SRAM accepts the write request but doesn't return the + // acknowledge. In this case, it may be hard to determine when the D + // response for the write data should send out if reads/writes are + // interleaved. So, to make it in-order (even TL-UL allows out-of-order + // responses), storing the request is necessary. And if the read entry + // is write op, it is safe to return the response right away. If it is + // read reqeust, then D response is waiting until read data arrives. + caliptra_prim_fifo_sync #( + .Width (ReqFifoWidth), + .Pass (1'b0), + .Depth (Outstanding) + ) u_reqfifo ( + .clk_i, + .rst_ni, + .clr_i (1'b0), + .wvalid_i(reqfifo_wvalid), + .wready_o(reqfifo_wready), + .wdata_i (reqfifo_wdata), + .rvalid_o(reqfifo_rvalid), + .rready_i(reqfifo_rready), + .rdata_o (reqfifo_rdata), + .full_o (), + .depth_o (), + .err_o () + ); + + // sramreqfifo: + // While the ReqFIFO holds the request until it is sent back via TL-UL, the + // sramreqfifo only needs to hold the mask and word offset until the read + // data returns from memory. + caliptra_prim_fifo_sync #( + .Width (SramReqFifoWidth), + .Pass (1'b0), + .Depth (Outstanding) + ) u_sramreqfifo ( + .clk_i, + .rst_ni, + .clr_i (1'b0), + .wvalid_i(sramreqfifo_wvalid), + .wready_o(sramreqfifo_wready), + .wdata_i (sramreqfifo_wdata), + .rvalid_o(), + .rready_i(sramreqfifo_rready), + .rdata_o (sramreqfifo_rdata), + .full_o (), + .depth_o (), + .err_o () + ); + + // Rationale having #Outstanding depth in response FIFO. + // In normal case, if the host or the crossbar accepts the response data, + // response FIFO isn't needed. But if in any case it has a chance to be + // back pressured, the response FIFO should store the returned data not to + // lose the data from the SRAM interface. Remember, SRAM interface doesn't + // have back-pressure signal such as read_ready. + caliptra_prim_fifo_sync #( + .Width (RspFifoWidth), + .Pass (1'b1), + .Depth (Outstanding), + .Secure (SecFifoPtr) + ) u_rspfifo ( + .clk_i, + .rst_ni, + .clr_i (1'b0), + .wvalid_i(rspfifo_wvalid), + .wready_o(rspfifo_wready), + .wdata_i (rspfifo_wdata), + .rvalid_o(rspfifo_rvalid), + .rready_i(rspfifo_rready), + .rdata_o (rspfifo_rdata), + .full_o (), + .depth_o (), + .err_o (rsp_fifo_error) + ); + + // below assertion fails when SRAM rvalid is asserted even though ReqFifo is empty + `CALIPTRA_ASSERT(rvalidHighReqFifoEmpty, rvalid_i |-> reqfifo_rvalid) + + // below assertion fails when outstanding value is too small (SRAM rvalid is asserted + // even though the RspFifo is full) + `CALIPTRA_ASSERT(rvalidHighWhenRspFifoFull, rvalid_i |-> rspfifo_wready) + + // If both ErrOnWrite and ErrOnRead are set, this block is useless + `CALIPTRA_ASSERT_INIT(adapterNoReadOrWrite, (ErrOnWrite & ErrOnRead) == 0) + + `CALIPTRA_ASSERT_INIT(SramDwHasByteGranularity_A, SramDw % 8 == 0) + `CALIPTRA_ASSERT_INIT(SramDwIsMultipleOfTlulWidth_A, SramDw % TL_DW == 0) + + // These parameter options cannot both be true at the same time + `CALIPTRA_ASSERT_INIT(DataIntgOptions_A, ~(EnableDataIntgGen & EnableDataIntgPt)) + + // make sure outputs are defined + `CALIPTRA_ASSERT_KNOWN(TlOutKnown_A, tl_o.d_valid) + `CALIPTRA_ASSERT_KNOWN_IF(TlOutPayloadKnown_A, tl_o, tl_o.d_valid) + `CALIPTRA_ASSERT_KNOWN(ReqOutKnown_A, req_o ) + `CALIPTRA_ASSERT_KNOWN(WeOutKnown_A, we_o ) + `CALIPTRA_ASSERT_KNOWN(AddrOutKnown_A, addr_o ) + `CALIPTRA_ASSERT_KNOWN(WdataOutKnown_A, wdata_o) + `CALIPTRA_ASSERT_KNOWN(WmaskOutKnown_A, wmask_o) + +endmodule diff --git a/src/tlul/rtl/tlul_assert.sv b/src/tlul/rtl/tlul_assert.sv new file mode 100644 index 000000000..6fc79b2bf --- /dev/null +++ b/src/tlul/rtl/tlul_assert.sv @@ -0,0 +1,437 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Protocol checker for TL-UL ports using assertions. Supports interface-widths +// up to 64bit. + +`include "caliptra_prim_assert.sv" + +module tlul_assert #( + parameter EndpointType = "Device" // can be either "Host" or "Device" +) ( + input clk_i, + input rst_ni, + + // tile link ports + input tlul_pkg::tl_h2d_t h2d, + input tlul_pkg::tl_d2h_t d2h +); + +`ifndef VERILATOR +`ifndef SYNTHESIS + +`ifdef UVM + import uvm_pkg::*; +`endif + import tlul_pkg::*; + //import top_pkg::*; + + ////////////////////////////////// + // check requests and responses // + ////////////////////////////////// + + // There are up to 2**TL_AIW possible source-IDs. Below array "pend_req" has one entry + // for each source-ID. Each entry has the following fields: + // - pend : is set to 1 to indicate up to 1 pending request for the source ID + // - opcode : "Get" requires "AccessAckData" response, "Put*" require "AccessAck" + // - size : d_size of response must match a_size of request + // - mask : is used to allow X for bytes whose mask bit is 0 + typedef struct packed { + bit pend; // set to 1 to indicate a pending request + tl_a_op_e opcode; + logic [TL_SZW-1:0] size; + logic [TL_DBW-1:0] mask; + } pend_req_t; + + pend_req_t [2**TL_AIW-1:0] pend_req; + + // To test TLUL error cases in UVM tests, pass the tlul_assert_en argument in the UVM config db, + // which will cause disable_sva to be set to 1. This disables some assertions about the + // well-formedness of the TL input. + bit disable_sva; + + // We have some assertions below about the behaviour of d2h.d_error. These aren't actually true + // for the xbar, since it doesn't return d_error for protocol errors. Disable these checks by + // passing tlul_d_error_assert_en in the UVM config db, which causes disable_d_error_sva to be set + // to 1. + bit disable_d_error_sva; + + logic [7:0] a_mask, d_mask; + logic [63:0] a_data, d_data; + assign a_mask = 8'(h2d.a_mask); + assign a_data = 64'(h2d.a_data); + assign d_mask = 8'(pend_req[d2h.d_source].mask); + assign d_data = 64'(d2h.d_data); + + //////////////////////////////////// + // keep track of pending requests // + //////////////////////////////////// + + // use negedge clk to avoid possible race conditions + always_ff @(negedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + pend_req <= '0; + end else begin + if (h2d.a_valid) begin + // store each request in pend_req array (we use blocking statements below so + // that we can handle the case where request and response for the same + // source-ID happen in the same cycle) + if (d2h.a_ready) begin + pend_req[h2d.a_source].pend <= 1; + pend_req[h2d.a_source].opcode <= h2d.a_opcode; + pend_req[h2d.a_source].size <= h2d.a_size; + pend_req[h2d.a_source].mask <= h2d.a_mask; + end + end // h2d.a_valid + + if (d2h.d_valid) begin + // update pend_req array + if (h2d.d_ready) begin + pend_req[d2h.d_source].pend <= 0; + end + end //d2h.d_valid + end + end + + ///////////////////////////////////////// + // define sequences for request checks // + ///////////////////////////////////////// + + sequence h2d_pre_S; + h2d.a_valid; + endsequence + + // a_opcode: only 3 opcodes are legal for requests + sequence legalAOpcode_S; + (h2d.a_opcode === PutFullData) || + (h2d.a_opcode === Get) || + (h2d.a_opcode === PutPartialData); + endsequence + + // a_param is reserved + sequence legalAParam_S; + h2d.a_param === '0; + endsequence + + // a_size: Size shouldn't be greater than the bus width in TL-UL (not in TL-UH) + // This assertion can be covered by below + // (a_size must less than or equal to ones of a_mask) + + // a_size: 2**a_size must greater than or equal to $countones(a_mask) for PutPartial and Get + sequence sizeGTEMask_S; + (h2d.a_opcode == PutFullData) || ((1 << h2d.a_size) >= $countones(h2d.a_mask)); + endsequence + + // a_size: 2**a_size must equal to $countones(a_mask) for PutFull + sequence sizeMatchesMask_S; + (h2d.a_opcode inside {PutPartialData, Get}) || + ((1 << h2d.a_size) === $countones(h2d.a_mask)); + endsequence + + // a_source: there should be no more than one pending request per each source ID + sequence pendingReqPerSrc_S; + pend_req[h2d.a_source].pend == 0; + endsequence + + // a_address must be aligned to a_size: a_address & ((1 << a_size) - 1) == 0 + sequence addrSizeAligned_S; + (h2d.a_address & ((1 << h2d.a_size)-1)) == '0; + endsequence + + // a_mask must be contiguous for Get and PutFullData requests + // the spec talks about "naturally aligned". Does this mean that bit [0] of + // mask is always 1? If that's true, then below code could be much simpler. + // However, the spec shows a timing diagram where bit 0 of mask is 0. + sequence contigMask_pre_S; + h2d.a_opcode != PutPartialData; + endsequence + + sequence contigMask_S; + $countones(h2d.a_mask ^ {h2d.a_mask[$bits(h2d.a_mask)-2:0], 1'b0}) <= 2; + endsequence + + // a_data must be known for opcode == Put*(depending on mask bits) + sequence aDataKnown_pre_S; + (h2d.a_opcode != Get); + endsequence + + sequence aDataKnown_S; + // no check if this lane mask is inactive + ((!a_mask[0]) || (a_mask[0] && !$isunknown(a_data[8*0 +: 8]))) && + ((!a_mask[1]) || (a_mask[1] && !$isunknown(a_data[8*1 +: 8]))) && + ((!a_mask[2]) || (a_mask[2] && !$isunknown(a_data[8*2 +: 8]))) && + ((!a_mask[3]) || (a_mask[3] && !$isunknown(a_data[8*3 +: 8]))) && + ((!a_mask[4]) || (a_mask[4] && !$isunknown(a_data[8*4 +: 8]))) && + ((!a_mask[5]) || (a_mask[5] && !$isunknown(a_data[8*5 +: 8]))) && + ((!a_mask[6]) || (a_mask[6] && !$isunknown(a_data[8*6 +: 8]))) && + ((!a_mask[7]) || (a_mask[7] && !$isunknown(a_data[8*7 +: 8]))); + endsequence + + ///////////////////////////////////////// + // define sequences for request checks // + ///////////////////////////////////////// + + sequence d2h_pre_S; + d2h.d_valid; + endsequence + + // d_opcode: if request was Get, then response must be AccessAckData + sequence respOpcode_S; + d2h.d_opcode === ((pend_req[d2h.d_source].opcode == Get) ? AccessAckData : AccessAck); + endsequence + + // d_param is reserved + sequence legalDParam_S; + d2h.d_param === '0; + endsequence + + // d_size must equal the a_size of the corresponding request + sequence respSzEqReqSz_S; + d2h.d_size === pend_req[d2h.d_source].size; + endsequence + + // d_source: each response should have a pending request using same source ID + sequence respMustHaveReq_S; + pend_req[d2h.d_source].pend; + endsequence + +// d_data must be known for AccessAckData (depending on mask bits) + sequence dDataKnown_pre_S; + d2h.d_opcode == AccessAckData; + endsequence + + sequence dDataKnown_S; + // no check if this lane mask is inactive + ((!d_mask[0]) || (d_mask[0] && !$isunknown(d_data[8*0 +: 8]))) && + ((!d_mask[1]) || (d_mask[1] && !$isunknown(d_data[8*1 +: 8]))) && + ((!d_mask[2]) || (d_mask[2] && !$isunknown(d_data[8*2 +: 8]))) && + ((!d_mask[3]) || (d_mask[3] && !$isunknown(d_data[8*3 +: 8]))) && + ((!d_mask[4]) || (d_mask[4] && !$isunknown(d_data[8*4 +: 8]))) && + ((!d_mask[5]) || (d_mask[5] && !$isunknown(d_data[8*5 +: 8]))) && + ((!d_mask[6]) || (d_mask[6] && !$isunknown(d_data[8*6 +: 8]))) && + ((!d_mask[7]) || (d_mask[7] && !$isunknown(d_data[8*7 +: 8]))); + endsequence + + ///////////////////////////////////////// + // define sequences for d_error checks // + ///////////////////////////////////////// + + sequence d_error_pre_S; + h2d.a_valid && d2h.a_ready; + endsequence + + sequence legalAOpcodeErr_S; + !(h2d.a_opcode inside {PutFullData, Get, PutPartialData}); + endsequence + + sequence sizeGTEMaskErr_S; + (1 << h2d.a_size) < $countones(h2d.a_mask); + endsequence + + sequence sizeMatchesMaskErr_S; + (h2d.a_opcode == PutFullData) && ((1 << h2d.a_size) != $countones(h2d.a_mask)); + endsequence + + sequence addrSizeAlignedErr_S; + (h2d.a_address & ((1 << h2d.a_size)-1)) != '0; + endsequence + + /////////////////////////////////// + // assemble properties and check // + /////////////////////////////////// + + // note: use negedge clk to avoid possible race conditions + // in this case all signals coming from the device side have an assumed property + if (EndpointType == "Host") begin : gen_host + // h2d + `CALIPTRA_ASSERT(legalAOpcode_A, h2d_pre_S |-> legalAOpcode_S, !clk_i, !rst_ni || disable_sva) + `CALIPTRA_ASSERT(legalAParam_A, h2d_pre_S |-> legalAParam_S, !clk_i, !rst_ni) + `CALIPTRA_ASSERT(sizeGTEMask_A, h2d_pre_S |-> sizeGTEMask_S, !clk_i, !rst_ni || disable_sva) + `CALIPTRA_ASSERT(sizeMatchesMask_A, h2d_pre_S |-> sizeMatchesMask_S, !clk_i, !rst_ni || disable_sva) + `CALIPTRA_ASSERT(pendingReqPerSrc_A, h2d_pre_S |-> pendingReqPerSrc_S, !clk_i, !rst_ni) + `CALIPTRA_ASSERT(addrSizeAligned_A, h2d_pre_S |-> addrSizeAligned_S, !clk_i, !rst_ni || disable_sva) + `CALIPTRA_ASSERT(contigMask_A, h2d_pre_S and contigMask_pre_S |-> contigMask_S, + !clk_i, !rst_ni || disable_sva) + `CALIPTRA_ASSERT(aDataKnown_A, h2d_pre_S and aDataKnown_pre_S |-> aDataKnown_S, !clk_i, !rst_ni) + // d2h + `CALIPTRA_ASSUME(respOpcode_M, d2h_pre_S |-> respOpcode_S, !clk_i, !rst_ni) + `CALIPTRA_ASSUME(legalDParam_M, d2h_pre_S |-> legalDParam_S, !clk_i, !rst_ni) + `CALIPTRA_ASSUME(respSzEqReqSz_M, d2h_pre_S |-> respSzEqReqSz_S, !clk_i, !rst_ni) + `CALIPTRA_ASSUME(respMustHaveReq_M, d2h_pre_S |-> respMustHaveReq_S, !clk_i, !rst_ni) + `CALIPTRA_ASSUME(dDataKnown_M, d2h_pre_S and dDataKnown_pre_S |-> dDataKnown_S, + !clk_i, !rst_ni || disable_sva) + // in this case all signals coming from the host side have an assumed property + end else if (EndpointType == "Device") begin : gen_device + // h2d + `CALIPTRA_ASSUME(legalAParam_M, h2d_pre_S |-> legalAParam_S, !clk_i, !rst_ni) + `CALIPTRA_ASSUME(pendingReqPerSrc_M, h2d_pre_S |-> pendingReqPerSrc_S, !clk_i, !rst_ni) + `CALIPTRA_ASSUME(aDataKnown_M, h2d_pre_S and aDataKnown_pre_S |-> aDataKnown_S, !clk_i, !rst_ni) + `CALIPTRA_ASSUME(contigMask_M, h2d_pre_S and contigMask_pre_S |-> contigMask_S, + !clk_i, !rst_ni || disable_sva) + // d2h + `CALIPTRA_ASSERT(respOpcode_A, d2h_pre_S |-> respOpcode_S, !clk_i, !rst_ni) + `CALIPTRA_ASSERT(legalDParam_A, d2h_pre_S |-> legalDParam_S, !clk_i, !rst_ni) + `CALIPTRA_ASSERT(respSzEqReqSz_A, d2h_pre_S |-> respSzEqReqSz_S, !clk_i, !rst_ni) + `CALIPTRA_ASSERT(respMustHaveReq_A, d2h_pre_S |-> respMustHaveReq_S, !clk_i, !rst_ni) + `CALIPTRA_ASSERT(dDataKnown_A, d2h_pre_S and dDataKnown_pre_S |-> dDataKnown_S, + !clk_i, !rst_ni || disable_sva) + // d2h error cases + `CALIPTRA_ASSERT(legalAOpcodeErr_A, d_error_pre_S and legalAOpcodeErr_S |=> + s_eventually (d2h.d_valid && d2h.d_error), , !rst_ni || disable_d_error_sva) + `CALIPTRA_ASSERT(sizeGTEMaskErr_A, d_error_pre_S and sizeGTEMaskErr_S |=> + s_eventually (d2h.d_valid && d2h.d_error), , !rst_ni || disable_d_error_sva) + `CALIPTRA_ASSERT(sizeMatchesMaskErr_A, d_error_pre_S and sizeMatchesMaskErr_S |=> + s_eventually (d2h.d_valid && d2h.d_error), , !rst_ni || disable_d_error_sva) + `CALIPTRA_ASSERT(addrSizeAlignedErr_A, d_error_pre_S and addrSizeAlignedErr_S |=> + s_eventually (d2h.d_valid && d2h.d_error), , !rst_ni || disable_d_error_sva) + end else begin : gen_unknown + initial begin : p_unknonw + `CALIPTRA_ASSERT_I(unknownConfig_A, 0 == 1) + end + end + + initial begin : p_dbw + // widths up to 64bit / 8 Byte are supported + `CALIPTRA_ASSERT_I(TlDbw_A, TL_DBW <= 8) + end + + // make sure all "pending" bits are 0 at the end of the sim + for (genvar ii = 0; ii < 2**TL_AIW; ii++) begin : gen_assert_final + `CALIPTRA_ASSERT_FINAL(noOutstandingReqsAtEndOfSim_A, (pend_req[ii].pend == 0)) + end + + //////////////////////////////////// + // additional checks for X values // + //////////////////////////////////// + + // a_* should be known when a_valid == 1 (a_opcode and a_param are already covered above) + // This also covers ASSERT_KNOWN of a_valid + `CALIPTRA_ASSERT_KNOWN_IF(aKnown_A, {h2d.a_size, h2d.a_source, h2d.a_address, h2d.a_mask, h2d.a_user}, + h2d.a_valid) + + // d_* should be known when d_valid == 1 (d_opcode, d_param, d_size already covered above) + // This also covers ASSERT_KNOWN of d_valid + `CALIPTRA_ASSERT_KNOWN_IF(dKnown_A, {d2h.d_source, d2h.d_sink, d2h.d_error, d2h.d_user}, d2h.d_valid) + + // make sure ready is not X after reset + `CALIPTRA_ASSERT_KNOWN(aReadyKnown_A, d2h.a_ready) + `CALIPTRA_ASSERT_KNOWN(dReadyKnown_A, h2d.d_ready) + + //////////////////////////////////// + // SVA coverage // + //////////////////////////////////// + `define TLUL_COVER(SEQ) `CALIPTRA_COVER(``SEQ``_C, ``SEQ``_S, !clk_i, !rst_ni || disable_sva) + + // host sends back2back requests + sequence b2bReq_S; + h2d.a_valid && d2h.a_ready ##1 h2d.a_valid; + endsequence + + // device sends back2back responses + sequence b2bRsp_S; + d2h.d_valid && h2d.d_ready ##1 d2h.d_valid; + endsequence + + // host sends back2back requests with same address + // UVM RAL can't issue this scenario, add this cover to make sure it's tested in some other seq + sequence b2bReqWithSameAddr_S; + bit [TL_AW-1:0] pre_addr; + (h2d.a_valid && d2h.a_ready, pre_addr = h2d.a_address) + ##1 h2d.a_valid && pre_addr == h2d.a_address; + endsequence + + // a_valid is dropped without a_ready + sequence aValidNotAccepted_S; + h2d.a_valid && !d2h.a_ready ##1 !h2d.a_valid; + endsequence + + // d_valid is dropped without a_ready + sequence dValidNotAccepted_S; + d2h.d_valid && !h2d.d_ready ##1 !d2h.d_valid; + endsequence + + // host uses same source for back2back items + sequence b2bSameSource_S; + bit [TL_AIW-1:0] pre_source; + (h2d.a_valid && d2h.a_ready, pre_source = h2d.a_source) ##1 h2d.a_valid[->1] + ##0 pre_source == h2d.a_source; + endsequence + + // a channal content is changed without being accepted + `define TLUL_A_CHAN_CONTENT_CHANGED_WO_ACCEPTED(NAME) \ + sequence a_``NAME``ChangedNotAccepted_S; \ + int pre; \ + (h2d.a_valid && !d2h.a_ready, pre = h2d.a_``NAME``) ##1 h2d.a_valid[->1] \ + ##0 pre != h2d.a_``NAME``; \ + endsequence \ + `TLUL_COVER(a_``NAME``ChangedNotAccepted) + + // d channal content is changed without being accepted + `define TLUL_D_CHAN_CONTENT_CHANGED_WO_ACCEPTED(NAME) \ + sequence d_``NAME``ChangedNotAccepted_S; \ + int pre; \ + (d2h.d_valid && !h2d.d_ready, pre = d2h.d_``NAME``) ##1 d2h.d_valid[->1] \ + ##0 pre != d2h.d_``NAME``; \ + endsequence \ + `TLUL_COVER(d_``NAME``ChangedNotAccepted) + + if (EndpointType == "Host") begin : gen_host_cov // DUT is host + `TLUL_COVER(b2bRsp) + `TLUL_COVER(dValidNotAccepted) + `TLUL_D_CHAN_CONTENT_CHANGED_WO_ACCEPTED(data) + `TLUL_D_CHAN_CONTENT_CHANGED_WO_ACCEPTED(opcode) + `TLUL_D_CHAN_CONTENT_CHANGED_WO_ACCEPTED(size) + `TLUL_D_CHAN_CONTENT_CHANGED_WO_ACCEPTED(source) + `TLUL_D_CHAN_CONTENT_CHANGED_WO_ACCEPTED(sink) + `TLUL_D_CHAN_CONTENT_CHANGED_WO_ACCEPTED(error) + end else if (EndpointType == "Device") begin : gen_device_cov // DUT is device + `TLUL_COVER(b2bReq) + `TLUL_COVER(b2bReqWithSameAddr) + `TLUL_COVER(aValidNotAccepted) + `TLUL_COVER(b2bSameSource) + `TLUL_A_CHAN_CONTENT_CHANGED_WO_ACCEPTED(address) + `TLUL_A_CHAN_CONTENT_CHANGED_WO_ACCEPTED(data) + `TLUL_A_CHAN_CONTENT_CHANGED_WO_ACCEPTED(opcode) + `TLUL_A_CHAN_CONTENT_CHANGED_WO_ACCEPTED(size) + `TLUL_A_CHAN_CONTENT_CHANGED_WO_ACCEPTED(source) + `TLUL_A_CHAN_CONTENT_CHANGED_WO_ACCEPTED(mask) + end else begin : gen_unknown_cov + initial begin : p_unknonw_cov + `CALIPTRA_ASSERT_I(unknownConfig_A, 0 == 1) + end + end + + `ifdef UVM + initial forever begin + bit tlul_assert_en; + uvm_config_db#(bit)::wait_modified(null, "%m", "tlul_assert_en"); + if (!uvm_config_db#(bit)::get(null, "%m", "tlul_assert_en", tlul_assert_en)) begin + `uvm_fatal("tlul_assert", "Can't find tlul_assert_en") + end + disable_sva = !tlul_assert_en; + end + initial forever begin + bit tlul_assert_en; + uvm_config_db#(bit)::wait_modified(null, "%m", "tlul_d_error_assert_en"); + if (!uvm_config_db#(bit)::get(null, "%m", "tlul_d_error_assert_en", tlul_assert_en)) begin + `uvm_fatal("tlul_assert", "Can't find tlul_d_error_assert_en") + end + disable_d_error_sva = !tlul_assert_en; + end + `else + // Set default values for the disable_*_sva signals (not disabling the assertions) + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + disable_sva <= 0; + disable_d_error_sva <= 0; + end + end + `endif + + `undef TLUL_COVER + `undef TLUL_A_CHAN_CONTENT_CHANGED_WO_ACCEPTED + `undef TLUL_D_CHAN_CONTENT_CHANGED_WO_ACCEPTED +`endif +`endif +endmodule : tlul_assert diff --git a/src/tlul/rtl/tlul_assert_multiple.sv b/src/tlul/rtl/tlul_assert_multiple.sv new file mode 100644 index 000000000..61a8e53b9 --- /dev/null +++ b/src/tlul/rtl/tlul_assert_multiple.sv @@ -0,0 +1,31 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Protocol checker for multiple TL-UL ports + +module tlul_assert_multiple #( + parameter int unsigned N = 2, + parameter EndpointType = "Device" // can be "Device" or "Host" +) ( + input clk_i, + input rst_ni, + + // tile link ports + input tlul_pkg::tl_h2d_t h2d [N], + input tlul_pkg::tl_d2h_t d2h [N] +); + + // instantiate N tlul_assert modules + for (genvar ii = 0; ii < N; ii++) begin : gen_assert + tlul_assert #( + .EndpointType(EndpointType) + ) tlul_assert ( + .clk_i, + .rst_ni, + // TL-UL ports + .h2d (h2d[ii]), + .d2h (d2h[ii]) + ); + end +endmodule diff --git a/src/tlul/rtl/tlul_cmd_intg_chk.sv b/src/tlul/rtl/tlul_cmd_intg_chk.sv new file mode 100644 index 000000000..99e1e196b --- /dev/null +++ b/src/tlul/rtl/tlul_cmd_intg_chk.sv @@ -0,0 +1,53 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +`include "caliptra_prim_assert.sv" + +/** + * Tile-Link UL command integrity check + */ + +module tlul_cmd_intg_chk import tlul_pkg::*; ( + // TL-UL interface + input tl_h2d_t tl_i, + + // error output + output logic err_o +); + + logic [1:0] err; + logic data_err; + tl_h2d_cmd_intg_t cmd; + assign cmd = extract_h2d_cmd_intg(tl_i); + + caliptra_prim_secded_inv_64_57_dec u_chk ( + .data_i({tl_i.a_user.cmd_intg, H2DCmdMaxWidth'(cmd)}), + .data_o(), + .syndrome_o(), + .err_o(err) + ); + + tlul_data_integ_dec u_tlul_data_integ_dec ( + .data_intg_i({tl_i.a_user.data_intg, DataMaxWidth'(tl_i.a_data)}), + .data_err_o(data_err) + ); + + // error output is transactional, it is up to the instantiating module + // to determine if a permanent latch is feasible + // [LOWRISC] err and data_err is unknown when a_valid is low, so we can't cover + // the condition coverage - (|err | (|data_err)) == 0/1, when a_valid = 0, which is + // fine as driving unknown is better. `err_o` is used as a condition in other places, + // which needs to be covered with 0 and 1, so it's OK to disable the entire coverage. + //VCS coverage off + // pragma coverage off + assign err_o = tl_i.a_valid & (|err | (|data_err)); + //VCS coverage on + // pragma coverage on + + logic unused_tl; + assign unused_tl = |tl_i; + + `CALIPTRA_ASSERT_INIT(PayLoadWidthCheck, $bits(tl_h2d_cmd_intg_t) <= H2DCmdMaxWidth) + +endmodule // tlul_payload_chk diff --git a/src/tlul/rtl/tlul_cmd_intg_gen.sv b/src/tlul/rtl/tlul_cmd_intg_gen.sv new file mode 100644 index 000000000..b894d76fb --- /dev/null +++ b/src/tlul/rtl/tlul_cmd_intg_gen.sv @@ -0,0 +1,58 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +`include "caliptra_prim_assert.sv" + +/** + * Tile-Link UL command integrity generator + */ + +module tlul_cmd_intg_gen import tlul_pkg::*; #( + parameter bit EnableDataIntgGen = 1'b1 +) ( + // TL-UL interface + input tl_h2d_t tl_i, + output tl_h2d_t tl_o +); + + tl_h2d_cmd_intg_t cmd; + assign cmd = extract_h2d_cmd_intg(tl_i); + logic [H2DCmdMaxWidth-1:0] unused_cmd_payload; + + logic [H2DCmdIntgWidth-1:0] cmd_intg; + prim_secded_inv_64_57_enc u_cmd_gen ( + .data_i(H2DCmdMaxWidth'(cmd)), + .data_o({cmd_intg, unused_cmd_payload}) + ); + + logic [TL_DW-1:0] data_final; + logic [DataIntgWidth-1:0] data_intg; + + if (EnableDataIntgGen) begin : gen_data_intg + assign data_final = tl_i.a_data; + + logic [DataMaxWidth-1:0] unused_data; + prim_secded_inv_39_32_enc u_data_gen ( + .data_i(DataMaxWidth'(data_final)), + .data_o({data_intg, unused_data}) + ); + end else begin : gen_passthrough_data_intg + assign data_final = tl_i.a_data; + assign data_intg = tl_i.a_user.data_intg; + end + + always_comb begin + tl_o = tl_i; + tl_o.a_data = data_final; + tl_o.a_user.cmd_intg = cmd_intg; + tl_o.a_user.data_intg = data_intg; + end + + + logic unused_tl; + assign unused_tl = ^tl_i; + + `CALIPTRA_ASSERT_INIT(PayMaxWidthCheck_A, $bits(tl_h2d_cmd_intg_t) <= H2DCmdMaxWidth) + +endmodule : tlul_cmd_intg_gen diff --git a/src/tlul/rtl/tlul_data_integ_dec.sv b/src/tlul/rtl/tlul_data_integ_dec.sv new file mode 100644 index 000000000..bd2f13b20 --- /dev/null +++ b/src/tlul/rtl/tlul_data_integ_dec.sv @@ -0,0 +1,27 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +`include "caliptra_prim_assert.sv" + +/** + * Data integrity decoder for bus integrity scheme + */ + +module tlul_data_integ_dec import tlul_pkg::*; ( + // TL-UL interface + input [DataMaxWidth+DataIntgWidth-1:0] data_intg_i, + output logic data_err_o +); + + logic [1:0] data_err; + caliptra_prim_secded_inv_39_32_dec u_data_chk ( + .data_i(data_intg_i), + .data_o(), + .syndrome_o(), + .err_o(data_err) + ); + + assign data_err_o = |data_err; + +endmodule : tlul_data_integ_dec diff --git a/src/tlul/rtl/tlul_data_integ_enc.sv b/src/tlul/rtl/tlul_data_integ_enc.sv new file mode 100644 index 000000000..ac0aee15f --- /dev/null +++ b/src/tlul/rtl/tlul_data_integ_enc.sv @@ -0,0 +1,22 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +`include "caliptra_prim_assert.sv" + +/** + * Data integrity encoder for bus integrity scheme + */ + +module tlul_data_integ_enc import tlul_pkg::*; ( + // TL-UL interface + input [DataMaxWidth-1:0] data_i, + output logic [DataMaxWidth+DataIntgWidth-1:0] data_intg_o +); + + caliptra_prim_secded_inv_39_32_enc u_data_gen ( + .data_i, + .data_o(data_intg_o) + ); + +endmodule : tlul_data_integ_enc diff --git a/src/tlul/rtl/tlul_err.sv b/src/tlul/rtl/tlul_err.sv new file mode 100644 index 000000000..0705ac12d --- /dev/null +++ b/src/tlul/rtl/tlul_err.sv @@ -0,0 +1,103 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + + +`include "caliptra_prim_assert.sv" + +module tlul_err import tlul_pkg::*; ( + input clk_i, + input rst_ni, + + input tl_h2d_t tl_i, + + output logic err_o +); + + localparam int IW = $bits(tl_i.a_source); + localparam int SZW = $bits(tl_i.a_size); + localparam int DW = $bits(tl_i.a_data); + localparam int MW = $bits(tl_i.a_mask); + localparam int SubAW = $clog2(DW/8); + + logic opcode_allowed, a_config_allowed; + + logic op_full, op_partial, op_get; + assign op_full = (tl_i.a_opcode == PutFullData); + assign op_partial = (tl_i.a_opcode == PutPartialData); + assign op_get = (tl_i.a_opcode == Get); + + // An instruction type transaction cannot be write + logic instr_wr_err; + assign instr_wr_err = caliptra_prim_mubi_pkg::mubi4_test_true_strict(tl_i.a_user.instr_type) & + (op_full | op_partial); + + logic instr_type_err; + assign instr_type_err = caliptra_prim_mubi_pkg::mubi4_test_invalid(tl_i.a_user.instr_type); + + // Anything that doesn't fall into the permitted category, it raises an error + assign err_o = ~(opcode_allowed & a_config_allowed) | instr_wr_err | instr_type_err; + + // opcode check + assign opcode_allowed = (tl_i.a_opcode == PutFullData) + | (tl_i.a_opcode == PutPartialData) + | (tl_i.a_opcode == Get); + + // a channel configuration check + logic addr_sz_chk; // address and size alignment check + logic mask_chk; // inactive lane a_mask check + logic fulldata_chk; // PutFullData should have size match to mask + + localparam bit [MW-1:0] MaskOne = 1; + logic [MW-1:0] mask; + + assign mask = MaskOne << tl_i.a_address[SubAW-1:0]; + + always_comb begin + addr_sz_chk = 1'b0; + mask_chk = 1'b0; + fulldata_chk = 1'b0; // Only valid when opcode is PutFullData + + if (tl_i.a_valid) begin + unique case (tl_i.a_size) + 'h0: begin // 1 Byte + addr_sz_chk = 1'b1; + mask_chk = ~|(tl_i.a_mask & ~mask); + fulldata_chk = |(tl_i.a_mask & mask); + end + + 'h1: begin // 2 Byte + addr_sz_chk = ~tl_i.a_address[0]; + // check inactive lanes if lower 2B, check a_mask[3:2], if uppwer 2B, a_mask[1:0] + mask_chk = (tl_i.a_address[1]) ? ~|(tl_i.a_mask & 4'b0011) + : ~|(tl_i.a_mask & 4'b1100); + fulldata_chk = (tl_i.a_address[1]) ? &tl_i.a_mask[3:2] : &tl_i.a_mask[1:0] ; + end + + 'h2: begin // 4 Byte + addr_sz_chk = ~|tl_i.a_address[SubAW-1:0]; + mask_chk = 1'b1; + fulldata_chk = &tl_i.a_mask[3:0]; + end + + default: begin // else + addr_sz_chk = 1'b0; + mask_chk = 1'b0; + fulldata_chk = 1'b0; + end + endcase + end else begin + addr_sz_chk = 1'b0; + mask_chk = 1'b0; + fulldata_chk = 1'b0; + end + end + + assign a_config_allowed = addr_sz_chk + & mask_chk + & (op_get | op_partial | fulldata_chk) ; + + // Only 32 bit data width for current tlul_err + `CALIPTRA_ASSERT_INIT(dataWidthOnly32_A, DW == 32) + +endmodule diff --git a/src/tlul/rtl/tlul_err_resp.sv b/src/tlul/rtl/tlul_err_resp.sv new file mode 100644 index 000000000..2b5723761 --- /dev/null +++ b/src/tlul/rtl/tlul_err_resp.sv @@ -0,0 +1,77 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// TL-UL error responder module, used by tlul_socket_1n to help response +// to requests to no correct address space. Responses are always one cycle +// after request with no stalling unless response is stuck on the way out. + +module tlul_err_resp ( + input clk_i, + input rst_ni, + input tlul_pkg::tl_h2d_t tl_h_i, + output tlul_pkg::tl_d2h_t tl_h_o +); + import tlul_pkg::*; + import caliptra_prim_mubi_pkg::*; + + tl_a_op_e err_opcode; + logic [$bits(tl_h_i.a_source)-1:0] err_source; + logic [$bits(tl_h_i.a_size)-1:0] err_size; + logic err_req_pending, err_rsp_pending; + mubi4_t err_instr_type; + tlul_pkg::tl_d2h_t tl_h_o_int; + + tlul_rsp_intg_gen #( + .EnableRspIntgGen(1), + .EnableDataIntgGen(1) + ) u_intg_gen ( + .tl_i(tl_h_o_int), + .tl_o(tl_h_o) + ); + + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + err_req_pending <= 1'b0; + err_source <= {TL_AIW{1'b0}}; + err_opcode <= Get; + err_size <= '0; + err_instr_type <= MuBi4False; + end else if (tl_h_i.a_valid && tl_h_o_int.a_ready) begin + err_req_pending <= 1'b1; + err_source <= tl_h_i.a_source; + err_opcode <= tl_h_i.a_opcode; + err_size <= tl_h_i.a_size; + err_instr_type <= tl_h_i.a_user.instr_type; + end else if (!err_rsp_pending) begin + err_req_pending <= 1'b0; + end + end + + assign tl_h_o_int.a_ready = ~err_rsp_pending & ~(err_req_pending & ~tl_h_i.d_ready); + assign tl_h_o_int.d_valid = err_req_pending | err_rsp_pending; + assign tl_h_o_int.d_data = (mubi4_test_true_strict(err_instr_type)) ? DataWhenInstrError : + DataWhenError; + assign tl_h_o_int.d_source = err_source; + assign tl_h_o_int.d_sink = '0; + assign tl_h_o_int.d_param = '0; + assign tl_h_o_int.d_size = err_size; + assign tl_h_o_int.d_opcode = (err_opcode == Get) ? AccessAckData : AccessAck; + assign tl_h_o_int.d_user = '0; + assign tl_h_o_int.d_error = 1'b1; + + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + err_rsp_pending <= 1'b0; + end else if ((err_req_pending || err_rsp_pending) && !tl_h_i.d_ready) begin + err_rsp_pending <= 1'b1; + end else begin + err_rsp_pending <= 1'b0; + end + end + + // Waive unused bits of tl_h_i + logic unused_tl_h; + assign unused_tl_h = ^tl_h_i; + +endmodule diff --git a/src/tlul/rtl/tlul_fifo_async.sv b/src/tlul/rtl/tlul_fifo_async.sv new file mode 100644 index 000000000..c8dff0170 --- /dev/null +++ b/src/tlul/rtl/tlul_fifo_async.sv @@ -0,0 +1,98 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// TL-UL fifo, used to add elasticity or an asynchronous clock crossing +// to an TL-UL bus. This instantiates two FIFOs, one for the request side, +// and one for the response side. + +`include "caliptra_prim_assert.sv" + +module tlul_fifo_async #( + parameter int unsigned ReqDepth = 4, + parameter int unsigned RspDepth = 4 +) ( + input clk_h_i, + input rst_h_ni, + input clk_d_i, + input rst_d_ni, + input tlul_pkg::tl_h2d_t tl_h_i, + output tlul_pkg::tl_d2h_t tl_h_o, + output tlul_pkg::tl_h2d_t tl_d_o, + input tlul_pkg::tl_d2h_t tl_d_i +); + + // Put everything on the request side into one FIFO + localparam int unsigned REQFIFO_WIDTH = $bits(tlul_pkg::tl_h2d_t)-2; + + prim_fifo_async #( + .Width(REQFIFO_WIDTH), + .Depth(ReqDepth), + .OutputZeroIfInvalid(1) + ) reqfifo ( + .clk_wr_i (clk_h_i), + .rst_wr_ni (rst_h_ni), + .clk_rd_i (clk_d_i), + .rst_rd_ni (rst_d_ni), + .wvalid_i (tl_h_i.a_valid), + .wready_o (tl_h_o.a_ready), + .wdata_i ({tl_h_i.a_opcode , + tl_h_i.a_param , + tl_h_i.a_size , + tl_h_i.a_source , + tl_h_i.a_address, + tl_h_i.a_mask , + tl_h_i.a_data , + tl_h_i.a_user }), + .rvalid_o (tl_d_o.a_valid), + .rready_i (tl_d_i.a_ready), + .rdata_o ({tl_d_o.a_opcode , + tl_d_o.a_param , + tl_d_o.a_size , + tl_d_o.a_source , + tl_d_o.a_address, + tl_d_o.a_mask , + tl_d_o.a_data , + tl_d_o.a_user }), + .wdepth_o (), + .rdepth_o () + ); + + // Put everything on the response side into the other FIFO + + localparam int unsigned RSPFIFO_WIDTH = $bits(tlul_pkg::tl_d2h_t) -2; + + prim_fifo_async #( + .Width(RSPFIFO_WIDTH), + .Depth(RspDepth), + .OutputZeroIfInvalid(1) + ) rspfifo ( + .clk_wr_i (clk_d_i), + .rst_wr_ni (rst_d_ni), + .clk_rd_i (clk_h_i), + .rst_rd_ni (rst_h_ni), + .wvalid_i (tl_d_i.d_valid), + .wready_o (tl_d_o.d_ready), + .wdata_i ({tl_d_i.d_opcode, + tl_d_i.d_param , + tl_d_i.d_size , + tl_d_i.d_source, + tl_d_i.d_sink , + tl_d_i.d_data , + tl_d_i.d_user , + tl_d_i.d_error }), + .rvalid_o (tl_h_o.d_valid), + .rready_i (tl_h_i.d_ready), + .rdata_o ({tl_h_o.d_opcode, + tl_h_o.d_param , + tl_h_o.d_size , + tl_h_o.d_source, + tl_h_o.d_sink , + tl_h_o.d_data , + tl_h_o.d_user , + tl_h_o.d_error }), + .wdepth_o (), + .rdepth_o () + ); + +endmodule diff --git a/src/tlul/rtl/tlul_fifo_sync.sv b/src/tlul/rtl/tlul_fifo_sync.sv new file mode 100644 index 000000000..b9abecac4 --- /dev/null +++ b/src/tlul/rtl/tlul_fifo_sync.sv @@ -0,0 +1,99 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// TL-UL fifo, used to add elasticity or an asynchronous clock crossing +// to an TL-UL bus. This instantiates two FIFOs, one for the request side, +// and one for the response side. + +module tlul_fifo_sync + import tlul_pkg::*; + #( + parameter bit ReqPass = 1'b1, + parameter bit RspPass = 1'b1, + parameter int unsigned ReqDepth = 2, + parameter int unsigned RspDepth = 2, + parameter int unsigned SpareReqW = 1, + parameter int unsigned SpareRspW = 1 +) ( + input clk_i, + input rst_ni, + input tlul_pkg::tl_h2d_t tl_h_i, + output tlul_pkg::tl_d2h_t tl_h_o, + output tlul_pkg::tl_h2d_t tl_d_o, + input tlul_pkg::tl_d2h_t tl_d_i, + input [SpareReqW-1:0] spare_req_i, + output [SpareReqW-1:0] spare_req_o, + input [SpareRspW-1:0] spare_rsp_i, + output [SpareRspW-1:0] spare_rsp_o +); + + // Put everything on the request side into one FIFO + localparam int unsigned REQFIFO_WIDTH = $bits(tlul_pkg::tl_h2d_t) -2 + SpareReqW; + + caliptra_prim_fifo_sync #(.Width(REQFIFO_WIDTH), .Pass(ReqPass), .Depth(ReqDepth)) reqfifo ( + .clk_i, + .rst_ni, + .clr_i (1'b0 ), + .wvalid_i (tl_h_i.a_valid), + .wready_o (tl_h_o.a_ready), + .wdata_i ({tl_h_i.a_opcode , + tl_h_i.a_param , + tl_h_i.a_size , + tl_h_i.a_source , + tl_h_i.a_address, + tl_h_i.a_mask , + tl_h_i.a_data , + tl_h_i.a_user , + spare_req_i}), + .rvalid_o (tl_d_o.a_valid), + .rready_i (tl_d_i.a_ready), + .rdata_o ({tl_d_o.a_opcode , + tl_d_o.a_param , + tl_d_o.a_size , + tl_d_o.a_source , + tl_d_o.a_address, + tl_d_o.a_mask , + tl_d_o.a_data , + tl_d_o.a_user , + spare_req_o}), + .full_o (), + .depth_o (), + .err_o ()); + + // Put everything on the response side into the other FIFO + + localparam int unsigned RSPFIFO_WIDTH = $bits(tlul_pkg::tl_d2h_t) -2 + SpareRspW; + + caliptra_prim_fifo_sync #(.Width(RSPFIFO_WIDTH), .Pass(RspPass), .Depth(RspDepth)) rspfifo ( + .clk_i, + .rst_ni, + .clr_i (1'b0 ), + .wvalid_i (tl_d_i.d_valid), + .wready_o (tl_d_o.d_ready), + .wdata_i ({tl_d_i.d_opcode, + tl_d_i.d_param , + tl_d_i.d_size , + tl_d_i.d_source, + tl_d_i.d_sink , + (tl_d_i.d_opcode == tlul_pkg::AccessAckData) ? tl_d_i.d_data : + {TL_DW{1'b0}} , + tl_d_i.d_user , + tl_d_i.d_error , + spare_rsp_i}), + .rvalid_o (tl_h_o.d_valid), + .rready_i (tl_h_i.d_ready), + .rdata_o ({tl_h_o.d_opcode, + tl_h_o.d_param , + tl_h_o.d_size , + tl_h_o.d_source, + tl_h_o.d_sink , + tl_h_o.d_data , + tl_h_o.d_user , + tl_h_o.d_error , + spare_rsp_o}), + .full_o (), + .depth_o (), + .err_o ()); + +endmodule diff --git a/src/fuse_ctrl/rtl/axi_lc_gate.sv b/src/tlul/rtl/tlul_lc_gate.sv similarity index 51% rename from src/fuse_ctrl/rtl/axi_lc_gate.sv rename to src/tlul/rtl/tlul_lc_gate.sv index 2a8200b92..d64b50531 100644 --- a/src/fuse_ctrl/rtl/axi_lc_gate.sv +++ b/src/tlul/rtl/tlul_lc_gate.sv @@ -1,104 +1,90 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. // SPDX-License-Identifier: Apache-2.0 // -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +// Life cycle gating module for TL-UL protocol. +// Transactions are passed through when lc_en_i == ON. +// In all other cases (lc_en_i != ON) incoming transactions return a bus error. // +// Note that the lc_en_i should be synchronized and buffered outside of this module using +// an instance of prim_lc_sync. -module axi_lc_gate - import axi_pkg::*; - import lc_ctrl_pkg::*; +module tlul_lc_gate + import tlul_pkg::*; + import lc_ctrl_pkg::*; #( - // Number of LC gating muxes in each direction. - // It is recommended to set this parameter to 2, which results - // in a total of 4 gating muxes. - parameter int NumGatesPerDirection = 2 + // Number of LC gating muxes in each direction. + // It is recommended to set this parameter to 2, which results + // in a total of 4 gating muxes. + parameter int NumGatesPerDirection = 2 ) ( - input clk_i, - input rst_ni, - - // AXI interface between host and device - input logic prim_dv, - input logic [AW-1:0] prim_addr, - input logic prim_write, - input logic [IW-1:0] prim_id, - input logic [DW-1:0] prim_wdata, - input logic [BC-1:0] prim_wstrb, - output logic [DW-1:0] prim_rdata, - input logic prim_last, - output logic prim_hld, - output logic prim_err, - - output logic prim_dv_gated, - output logic [Aw-1:0] prim_addr_gated, - output logic prim_write_gated, - output logic [IW-1:0] prim_id_gated, - output logic [DW-1:0] prim_wdata_gated, - output logic [BC-1:0] prim_wstrb_gated, - input logic [DW-1:0] prim_rdata_gated, - output logic prim_last_gated, - input logic prim_hld_gated, - input logic prim_err_gated, - - // Flush control signaling - input flush_req_i, - output logic flush_ack_o, - - // Indicates whether there are pending responses - output logic resp_pending_o, - - // LC onctrol signal - input lc_tx_t lc_en_i, - output logic err_o + input clk_i, + input rst_ni, + + // To host + input tl_h2d_t tl_h2d_i, + output tl_d2h_t tl_d2h_o, + + // To device + output tl_h2d_t tl_h2d_o, + input tl_d2h_t tl_d2h_i, + + // Flush control signaling + input flush_req_i, + output logic flush_ack_o, + + // Indicates whether there are pending responses on the device side. + output logic resp_pending_o, + + // LC control signal + input lc_tx_t lc_en_i, + output logic err_o ); - ////////////////// - // Access Gates // - ////////////////// - - lc_tx_t err_en; - lc_tx_t [NumGatesPerDirection-1:0] err_en_buf; - - caliptra_prim_lc_sync #( - .NumCopies(NumGatesPerDirection), - .AsyncOn(0) - ) u_err_en_sync ( - .clk_i, - .rst_ni, - .lc_en_i(err_en), - .lc_en_o(err_en_buf) + ////////////////// + // Access Gates // + ////////////////// + + lc_tx_t err_en; + lc_tx_t [NumGatesPerDirection-1:0] err_en_buf; + + caliptra_prim_lc_sync #( + .NumCopies(NumGatesPerDirection), + .AsyncOn(0) + ) u_err_en_sync ( + .clk_i, + .rst_ni, + .lc_en_i(err_en), + .lc_en_o(err_en_buf) + ); + + tl_h2d_t tl_h2d_int [NumGatesPerDirection+1]; + tl_d2h_t tl_d2h_int [NumGatesPerDirection+1]; + for (genvar k = 0; k < NumGatesPerDirection; k++) begin : gen_lc_gating_muxes + // H -> D path. + caliptra_prim_blanker #( + .Width($bits(tl_h2d_t)) + ) u_prim_blanker_h2d ( + .in_i(tl_h2d_int[k]), + .en_i(lc_tx_test_false_strict(err_en_buf[k])), + .out_o(tl_h2d_int[k+1]) ); - logic prim_dv_int [NumGatesPerDirection+1]; - logic [AW-1:0] prim_addr_int [NumGatesPerDirection+1]; - logic [IW-1:0] prim_id_int [NumGatesPerDirection+1]; - logic prim_write_int [NumGatesPerDirection+1]; - logic [DW-1:0] prim_wdata_int [NumGatesPerDirection+1]; - logic [BC-1:0] prim_wstrb_int [NumGatesPerDirection+1]; - logic [DW-1:0] prim_rdata_int [NumGatesPerDirection+1]; - logic prim_last_int [NumGatesPerDirection+1]; - logic prim_err_int [NumGatesPerDirection+1]; - logic prim_hld_int [NumGatesPerDirection+1]; - - for (genvar k = 0; k < NumGatesPerDirection; k++) begin - caliptra_prim_blanker #( - .Width($bits()) - ) u_prim_blanker ( - .in_i (), - .en_i (), - .out_o () - ); - end + // D -> H path. + caliptra_prim_blanker #( + .Width($bits(tl_d2h_t)) + ) u_prim_blanker_d2h ( + .in_i(tl_d2h_int[k+1]), + .en_i(lc_tx_test_false_strict(err_en_buf[k])), + .out_o(tl_d2h_int[k]) + ); + end - /////////////////////////// + // Assign signals on the device side. + assign tl_h2d_o = tl_h2d_int[NumGatesPerDirection]; + assign tl_d2h_int[NumGatesPerDirection] = tl_d2h_i; + + /////////////////////////// // Host Side Interposing // /////////////////////////// @@ -155,7 +141,7 @@ module axi_lc_gate } state_e; state_e state_d, state_q; - `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, StError) + `CALIPTRA_PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, StError) logic [1:0] outstanding_txn; logic a_ack; @@ -265,6 +251,6 @@ module axi_lc_gate ); // Add assertion - `ASSERT(OutStandingOvfl_A, &outstanding_txn |-> ~a_ack) + `CALIPTRA_ASSERT(OutStandingOvfl_A, &outstanding_txn |-> ~a_ack) -endmodule : axi_lc_gate \ No newline at end of file +endmodule : tlul_lc_gate diff --git a/src/tlul/rtl/tlul_pkg.sv b/src/tlul/rtl/tlul_pkg.sv new file mode 100644 index 000000000..269401aef --- /dev/null +++ b/src/tlul/rtl/tlul_pkg.sv @@ -0,0 +1,221 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// + +import caliptra_prim_pkg::*; +`ifndef TLUL_PKG_DEFINE +`define TLUL_PKG_DEFINE + +package tlul_pkg; + + parameter TL_AW=32; + parameter TL_DW=32; // = TL_DBW * 8; TL_DBW must be a power-of-two + parameter TL_AIW=8; // a_source, d_source + parameter TL_DIW=1; // d_sink + parameter TL_AUW=21; // a_user + parameter TL_DUW=14; // d_user + parameter TL_DBW=(TL_DW>>3); + parameter TL_SZW=$clog2($clog2(TL_DBW)+1); + + // this can be either PPC or BINTREE + // there is no functional difference, but timing and area behavior is different + // between the two instances. PPC can result in smaller implementations when timing + // is not critical, whereas BINTREE is favorable when timing pressure is high (but this + // may also result in a larger implementation). on FPGA targets, BINTREE is favorable + // both in terms of area and timing. + parameter ArbiterImpl = "PPC"; + + typedef enum logic [2:0] { + PutFullData = 3'h 0, + PutPartialData = 3'h 1, + Get = 3'h 4 + } tl_a_op_e; + + typedef enum logic [2:0] { + AccessAck = 3'h 0, + AccessAckData = 3'h 1 + } tl_d_op_e; + + parameter int H2DCmdMaxWidth = 57; + parameter int H2DCmdIntgWidth = 7; + parameter int H2DCmdFullWidth = H2DCmdMaxWidth + H2DCmdIntgWidth; + parameter int D2HRspMaxWidth = 57; + parameter int D2HRspIntgWidth = 7; + parameter int D2HRspFullWidth = D2HRspMaxWidth + D2HRspIntgWidth; + parameter int DataMaxWidth = 32; + parameter int DataIntgWidth = 7; + parameter int DataFullWidth = DataMaxWidth + DataIntgWidth; + + // Data that is returned upon an a TL-UL error belonging to an instruction fetch. + // Note that this data will be returned with the correct bus integrity value. + parameter logic [TL_DW-1:0] DataWhenInstrError = '0; + // Data that is returned upon an a TL-UL error not belonging to an instruction fetch. + // Note that this data will be returned with the correct bus integrity value. + parameter logic [TL_DW-1:0] DataWhenError = {TL_DW{1'b1}}; + + typedef struct packed { + logic [4:0] rsvd; + caliptra_prim_mubi_pkg::mubi4_t instr_type; + logic [H2DCmdIntgWidth-1:0] cmd_intg; + logic [DataIntgWidth-1:0] data_intg; + } tl_a_user_t; + + parameter tl_a_user_t TL_A_USER_DEFAULT = '{ + rsvd: '0, + instr_type: caliptra_prim_mubi_pkg::MuBi4False, + cmd_intg: {H2DCmdIntgWidth{1'b1}}, + data_intg: {DataIntgWidth{1'b1}} + }; + + typedef struct packed { + caliptra_prim_mubi_pkg::mubi4_t instr_type; + logic [TL_AW-1:0] addr; + tl_a_op_e opcode; + logic [TL_DBW-1:0] mask; + } tl_h2d_cmd_intg_t; + + typedef struct packed { + logic a_valid; + tl_a_op_e a_opcode; + logic [2:0] a_param; + logic [TL_SZW-1:0] a_size; + logic [TL_AIW-1:0] a_source; + logic [TL_AW-1:0] a_address; + logic [TL_DBW-1:0] a_mask; + logic [TL_DW-1:0] a_data; + tl_a_user_t a_user; + + logic d_ready; + } tl_h2d_t; + + // The choice of all 1's as the blanked value is deliberate. + // It is assumed that most security features of the design are opt-in instead + // of opt-out. + // Given the opt-in nature, if a 0 were to propagate, the feature would be turned + // off. Whereas if a 1 were to propagate, it would either stay on or be turned on. + // There is however no perfect value for this purpose. + localparam logic [TL_DW-1:0] BlankedAData = {TL_DW{1'b1}}; + + localparam tl_h2d_t TL_H2D_DEFAULT = '{ + d_ready: 1'b1, + a_opcode: tl_a_op_e'('0), + a_user: TL_A_USER_DEFAULT, + a_data: BlankedAData, + default: '0 + }; + + typedef struct packed { + logic [D2HRspIntgWidth-1:0] rsp_intg; + logic [DataIntgWidth-1:0] data_intg; + } tl_d_user_t; + + parameter tl_d_user_t TL_D_USER_DEFAULT = '{ + rsp_intg: {D2HRspIntgWidth{1'b1}}, + data_intg: {DataIntgWidth{1'b1}} + }; + + typedef struct packed { + logic d_valid; + tl_d_op_e d_opcode; + logic [2:0] d_param; + logic [TL_SZW-1:0] d_size; // Bouncing back a_size + logic [TL_AIW-1:0] d_source; + logic [TL_DIW-1:0] d_sink; + logic [TL_DW-1:0] d_data; + tl_d_user_t d_user; + logic d_error; + + logic a_ready; + + } tl_d2h_t; + + typedef struct packed { + tl_d_op_e opcode; + logic [TL_SZW-1:0] size; + // Temporarily removed because source changes throughout the fabric + // and thus cannot be used for end-to-end checking. + // A different PR will propose a work-around (a hoaky one) to see if + // it gets the job done. + //logic [TL_AIW-1:0] source; + logic error; + } tl_d2h_rsp_intg_t; + + localparam tl_d2h_t TL_D2H_DEFAULT = '{ + a_ready: 1'b1, + d_opcode: tl_d_op_e'('0), + d_user: TL_D_USER_DEFAULT, + default: '0 + }; + + // Check user for unsupported values + function automatic logic tl_a_user_chk(tl_a_user_t user); + logic malformed_err; + logic unused_user; + unused_user = |user; + malformed_err = caliptra_prim_mubi_pkg::mubi4_test_invalid(user.instr_type); + return malformed_err; + endfunction // tl_a_user_chk + + // extract variables used for command checking + function automatic tl_h2d_cmd_intg_t extract_h2d_cmd_intg(tl_h2d_t tl); + tl_h2d_cmd_intg_t payload; + logic unused_tlul; + unused_tlul = ^tl; + payload.addr = tl.a_address; + payload.opcode = tl.a_opcode; + payload.mask = tl.a_mask; + payload.instr_type = tl.a_user.instr_type; + return payload; + endfunction // extract_h2d_payload + + // extract variables used for response checking + function automatic tl_d2h_rsp_intg_t extract_d2h_rsp_intg(tl_d2h_t tl); + tl_d2h_rsp_intg_t payload; + logic unused_tlul; + unused_tlul = ^tl; + payload.opcode = tl.d_opcode; + payload.size = tl.d_size; + //payload.source = tl.d_source; + payload.error = tl.d_error; + return payload; + endfunction // extract_d2h_rsp_intg + + // calculate ecc for command checking + function automatic logic [H2DCmdIntgWidth-1:0] get_cmd_intg(tl_h2d_t tl); + logic [H2DCmdIntgWidth-1:0] cmd_intg; + logic [H2DCmdMaxWidth-1:0] unused_cmd_payload; + tl_h2d_cmd_intg_t cmd; + cmd = extract_h2d_cmd_intg(tl); + {cmd_intg, unused_cmd_payload} = + caliptra_prim_secded_pkg::prim_secded_inv_64_57_enc(H2DCmdMaxWidth'(cmd)); + return cmd_intg; + endfunction // get_cmd_intg + + // calculate ecc for data checking + function automatic logic [DataIntgWidth-1:0] get_data_intg(logic [TL_DW-1:0] data); + logic [DataIntgWidth-1:0] data_intg; + logic [TL_DW-1:0] unused_data; + logic [DataIntgWidth + TL_DW - 1 : 0] enc_data; + enc_data = caliptra_prim_secded_pkg::prim_secded_inv_39_32_enc(data); + data_intg = enc_data[DataIntgWidth + TL_DW - 1 : TL_DW]; + unused_data = enc_data[TL_DW - 1 : 0]; + return data_intg; + endfunction // get_data_intg + + // return inverted integrity for command payload + function automatic logic [H2DCmdIntgWidth-1:0] get_bad_cmd_intg(tl_h2d_t tl); + logic [H2DCmdIntgWidth-1:0] cmd_intg; + cmd_intg = get_cmd_intg(tl); + return ~cmd_intg; + endfunction // get_bad_cmd_intg + + // return inverted integrity for data payload + function automatic logic [H2DCmdIntgWidth-1:0] get_bad_data_intg(logic [TL_DW-1:0] data); + logic [H2DCmdIntgWidth-1:0] data_intg; + data_intg = get_data_intg(data); + return ~data_intg; + endfunction // get_bad_data_intg + +endpackage +`endif diff --git a/src/tlul/rtl/tlul_rsp_intg_chk.sv b/src/tlul/rtl/tlul_rsp_intg_chk.sv new file mode 100644 index 000000000..09df8c9eb --- /dev/null +++ b/src/tlul/rtl/tlul_rsp_intg_chk.sv @@ -0,0 +1,54 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +`include "caliptra_prim_assert.sv" + +/** + * Tile-Link UL response integrity check + */ + +module tlul_rsp_intg_chk import tlul_pkg::*; #( + parameter bit EnableRspDataIntgCheck = 0 +) ( + // TL-UL interface + input tl_d2h_t tl_i, + + // error output + output logic err_o +); + + logic [1:0] rsp_err; + tl_d2h_rsp_intg_t rsp; + assign rsp = extract_d2h_rsp_intg(tl_i); + + prim_secded_inv_64_57_dec u_chk ( + .data_i({tl_i.d_user.rsp_intg, D2HRspMaxWidth'(rsp)}), + .data_o(), + .syndrome_o(), + .err_o(rsp_err) + ); + + logic rsp_data_err; + if (EnableRspDataIntgCheck) begin : gen_rsp_data_intg_check + tlul_data_integ_dec u_tlul_data_integ_dec ( + .data_intg_i({tl_i.d_user.data_intg, DataMaxWidth'(tl_i.d_data)}), + .data_err_o(rsp_data_err) + ); + end else begin : gen_no_rsp_data_intg_check + assign rsp_data_err = 1'b0; + end + + // error is not permanently latched as rsp_intg_chk is typically + // used near the host. + // if the error is permanent, it would imply the host could forever + // receive bus errors and lose all ability to debug. + // It should be up to the host to determine the permanence of this error. + assign err_o = tl_i.d_valid & (|rsp_err | rsp_data_err); + + logic unused_tl; + assign unused_tl = |tl_i; + + `CALIPTRA_ASSERT_INIT(PayLoadWidthCheck, $bits(tl_d2h_rsp_intg_t) <= D2HRspMaxWidth) + +endmodule // tlul_rsp_intg_chk diff --git a/src/tlul/rtl/tlul_rsp_intg_gen.sv b/src/tlul/rtl/tlul_rsp_intg_gen.sv new file mode 100644 index 000000000..741d4b696 --- /dev/null +++ b/src/tlul/rtl/tlul_rsp_intg_gen.sv @@ -0,0 +1,59 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +`include "caliptra_prim_assert.sv" + +/** + * Tile-Link UL response integrity generator + */ + +module tlul_rsp_intg_gen import tlul_pkg::*; #( + parameter bit EnableRspIntgGen = 1'b1, + parameter bit EnableDataIntgGen = 1'b1 +) ( + // TL-UL interface + input tl_d2h_t tl_i, + output tl_d2h_t tl_o +); + + logic [D2HRspIntgWidth-1:0] rsp_intg; + if (EnableRspIntgGen) begin : gen_rsp_intg + tl_d2h_rsp_intg_t rsp; + logic [D2HRspMaxWidth-1:0] unused_payload; + + assign rsp = extract_d2h_rsp_intg(tl_i); + + caliptra_prim_secded_inv_64_57_enc u_rsp_gen ( + .data_i(D2HRspMaxWidth'(rsp)), + .data_o({rsp_intg, unused_payload}) + ); + end else begin : gen_passthrough_rsp_intg + assign rsp_intg = tl_i.d_user.rsp_intg; + end + + logic [DataIntgWidth-1:0] data_intg; + if (EnableDataIntgGen) begin : gen_data_intg + logic [DataMaxWidth-1:0] unused_data; + tlul_data_integ_enc u_tlul_data_integ_enc ( + .data_i(DataMaxWidth'(tl_i.d_data)), + .data_intg_o({data_intg, unused_data}) + ); + end else begin : gen_passthrough_data_intg + assign data_intg = tl_i.d_user.data_intg; + end + + always_comb begin + tl_o = tl_i; + tl_o.d_user.rsp_intg = rsp_intg; + tl_o.d_user.data_intg = data_intg; + end + + logic unused_tl; + assign unused_tl = ^tl_i; + + + `CALIPTRA_ASSERT_INIT(PayLoadWidthCheck, $bits(tl_d2h_rsp_intg_t) <= D2HRspMaxWidth) + `CALIPTRA_ASSERT_INIT(DataWidthCheck_A, $bits(tl_i.d_data) <= DataMaxWidth) + +endmodule // tlul_rsp_intg_gen diff --git a/src/tlul/rtl/tlul_socket_1n.sv b/src/tlul/rtl/tlul_socket_1n.sv new file mode 100644 index 000000000..d4c718434 --- /dev/null +++ b/src/tlul/rtl/tlul_socket_1n.sv @@ -0,0 +1,255 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// TL-UL socket 1:N module +// +// configuration settings +// device_count: 4 +// +// Verilog parameters +// HReqPass: if 1 then host requests can pass through on empty fifo, +// default 1 +// HRspPass: if 1 then host responses can pass through on empty fifo, +// default 1 +// DReqPass: (one per device_count) if 1 then device i requests can +// pass through on empty fifo, default 1 +// DRspPass: (one per device_count) if 1 then device i responses can +// pass through on empty fifo, default 1 +// HReqDepth: Depth of host request FIFO, default 2 +// HRspDepth: Depth of host response FIFO, default 2 +// DReqDepth: (one per device_count) Depth of device i request FIFO, +// default 2 +// DRspDepth: (one per device_count) Depth of device i response FIFO, +// default 2 +// ExplicitErrs: This module always returns a request error if dev_select_i +// is greater than N-1. If ExplicitErrs is set then the width +// of the dev_select_i signal will be chosen to make sure that +// this is possible. This only makes a difference if N is a +// power of 2. +// +// Requests must stall to one device until all responses from other devices +// have returned. Need to keep a counter of all outstanding requests and +// wait until that counter is zero before switching devices. +// +// This module will return a request error if the input value of 'dev_select_i' +// is not within the range 0..N-1. Thus the instantiator of the socket +// can indicate error by any illegal value of dev_select_i. 4'b1111 is +// recommended for visibility +// +// The maximum value of N is 15 + +`include "caliptra_prim_assert.sv" + +module tlul_socket_1n #( + parameter int unsigned N = 4, + parameter bit HReqPass = 1'b1, + parameter bit HRspPass = 1'b1, + parameter bit [N-1:0] DReqPass = {N{1'b1}}, + parameter bit [N-1:0] DRspPass = {N{1'b1}}, + parameter bit [3:0] HReqDepth = 4'h1, + parameter bit [3:0] HRspDepth = 4'h1, + parameter bit [N*4-1:0] DReqDepth = {N{4'h1}}, + parameter bit [N*4-1:0] DRspDepth = {N{4'h1}}, + parameter bit ExplicitErrs = 1'b1, + + // The width of dev_select_i. We must be able to select any of the N devices + // (i.e. values 0..N-1). If ExplicitErrs is set, we also need to be able to + // represent N. + localparam int unsigned NWD = $clog2(ExplicitErrs ? N+1 : N) +) ( + input clk_i, + input rst_ni, + input tlul_pkg::tl_h2d_t tl_h_i, + output tlul_pkg::tl_d2h_t tl_h_o, + output tlul_pkg::tl_h2d_t tl_d_o [N], + input tlul_pkg::tl_d2h_t tl_d_i [N], + input [NWD-1:0] dev_select_i +); + + `CALIPTRA_ASSERT_INIT(maxN, N < 32) + + // Since our steering is done after potential FIFOing, we need to + // shove our device select bits into spare bits of reqfifo + + // instantiate the host fifo, create intermediate bus 't' + + // FIFO'd version of device select + logic [NWD-1:0] dev_select_t; + + tlul_pkg::tl_h2d_t tl_t_o; + tlul_pkg::tl_d2h_t tl_t_i; + + tlul_fifo_sync #( + .ReqPass(HReqPass), + .RspPass(HRspPass), + .ReqDepth(HReqDepth), + .RspDepth(HRspDepth), + .SpareReqW(NWD) + ) fifo_h ( + .clk_i, + .rst_ni, + .tl_h_i, + .tl_h_o, + .tl_d_o (tl_t_o), + .tl_d_i (tl_t_i), + .spare_req_i (dev_select_i), + .spare_req_o (dev_select_t), + .spare_rsp_i (1'b0), + .spare_rsp_o ()); + + + // We need to keep track of how many requests are outstanding, + // and to which device. New requests are compared to this and + // stall until that number is zero. + localparam int MaxOutstanding = 2**tlul_pkg::TL_AIW; // Up to 256 ounstanding + localparam int OutstandingW = $clog2(MaxOutstanding+1); + logic [OutstandingW-1:0] num_req_outstanding; + logic [NWD-1:0] dev_select_outstanding; + logic hold_all_requests; + logic accept_t_req, accept_t_rsp; + + assign accept_t_req = tl_t_o.a_valid & tl_t_i.a_ready; + assign accept_t_rsp = tl_t_i.d_valid & tl_t_o.d_ready; + + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + num_req_outstanding <= '0; + dev_select_outstanding <= '0; + end else if (accept_t_req) begin + if (!accept_t_rsp) begin + num_req_outstanding <= num_req_outstanding + 1'b1; + end + dev_select_outstanding <= dev_select_t; + end else if (accept_t_rsp) begin + num_req_outstanding <= num_req_outstanding - 1'b1; + end + end + + `CALIPTRA_ASSERT(NotOverflowed_A, + accept_t_req && !accept_t_rsp -> num_req_outstanding <= MaxOutstanding) + + assign hold_all_requests = + (num_req_outstanding != '0) & + (dev_select_t != dev_select_outstanding); + + // Make N copies of 't' request side with modified reqvalid, call + // them 'u[0]' .. 'u[n-1]'. + + tlul_pkg::tl_h2d_t tl_u_o [N+1]; + tlul_pkg::tl_d2h_t tl_u_i [N+1]; + + // ensure that when a device is not selected, both command + // data integrity can never match + tlul_pkg::tl_a_user_t blanked_auser; + assign blanked_auser = '{ + rsvd: tl_t_o.a_user.rsvd, + instr_type: tl_t_o.a_user.instr_type, + cmd_intg: tlul_pkg::get_bad_cmd_intg(tl_t_o), + data_intg: tlul_pkg::get_bad_data_intg(tlul_pkg::BlankedAData) + }; + + // if a host is not selected, or if requests are held off, blank the bus + for (genvar i = 0 ; i < N ; i++) begin : gen_u_o + logic dev_select; + assign dev_select = dev_select_t == NWD'(i) & ~hold_all_requests; + + assign tl_u_o[i].a_valid = tl_t_o.a_valid & dev_select; + assign tl_u_o[i].a_opcode = tl_t_o.a_opcode; + assign tl_u_o[i].a_param = tl_t_o.a_param; + assign tl_u_o[i].a_size = tl_t_o.a_size; + assign tl_u_o[i].a_source = tl_t_o.a_source; + assign tl_u_o[i].a_address = tl_t_o.a_address; + assign tl_u_o[i].a_mask = tl_t_o.a_mask; + assign tl_u_o[i].a_data = dev_select ? + tl_t_o.a_data : + tlul_pkg::BlankedAData; + assign tl_u_o[i].a_user = dev_select ? + tl_t_o.a_user : + blanked_auser; + + assign tl_u_o[i].d_ready = tl_t_o.d_ready; + end + + + tlul_pkg::tl_d2h_t tl_t_p ; + + // for the returning reqready, only look at the device we're addressing + logic hfifo_reqready; + always_comb begin + hfifo_reqready = tl_u_i[N].a_ready; // default to error + for (int idx = 0 ; idx < N ; idx++) begin + //if (dev_select_outstanding == NWD'(idx)) hfifo_reqready = tl_u_i[idx].a_ready; + if (dev_select_t == NWD'(idx)) hfifo_reqready = tl_u_i[idx].a_ready; + end + if (hold_all_requests) hfifo_reqready = 1'b0; + end + // Adding a_valid as a qualifier. This prevents the a_ready from having unknown value + // when the address is unknown and the Host TL-UL FIFO is bypass mode. + assign tl_t_i.a_ready = tl_t_o.a_valid & hfifo_reqready; + + always_comb begin + tl_t_p = tl_u_i[N]; + for (int idx = 0 ; idx < N ; idx++) begin + if (dev_select_outstanding == NWD'(idx)) tl_t_p = tl_u_i[idx]; + end + end + assign tl_t_i.d_valid = tl_t_p.d_valid ; + assign tl_t_i.d_opcode = tl_t_p.d_opcode; + assign tl_t_i.d_param = tl_t_p.d_param ; + assign tl_t_i.d_size = tl_t_p.d_size ; + assign tl_t_i.d_source = tl_t_p.d_source; + assign tl_t_i.d_sink = tl_t_p.d_sink ; + assign tl_t_i.d_data = tl_t_p.d_data ; + assign tl_t_i.d_user = tl_t_p.d_user ; + assign tl_t_i.d_error = tl_t_p.d_error ; + + // Instantiate all the device FIFOs + for (genvar i = 0 ; i < N ; i++) begin : gen_dfifo + tlul_fifo_sync #( + .ReqPass(DReqPass[i]), + .RspPass(DRspPass[i]), + .ReqDepth(DReqDepth[i*4+:4]), + .RspDepth(DRspDepth[i*4+:4]) + ) fifo_d ( + .clk_i, + .rst_ni, + .tl_h_i (tl_u_o[i]), + .tl_h_o (tl_u_i[i]), + .tl_d_o (tl_d_o[i]), + .tl_d_i (tl_d_i[i]), + .spare_req_i (1'b0), + .spare_req_o (), + .spare_rsp_i (1'b0), + .spare_rsp_o ()); + end + + // Instantiate the error responder. It's only needed if a value greater than + // N-1 is actually representable in NWD bits. + if ($clog2(N+1) <= NWD) begin : gen_err_resp + assign tl_u_o[N].d_ready = tl_t_o.d_ready; + assign tl_u_o[N].a_valid = tl_t_o.a_valid & + (dev_select_t >= NWD'(N)) & + ~hold_all_requests; + assign tl_u_o[N].a_opcode = tl_t_o.a_opcode; + assign tl_u_o[N].a_param = tl_t_o.a_param; + assign tl_u_o[N].a_size = tl_t_o.a_size; + assign tl_u_o[N].a_source = tl_t_o.a_source; + assign tl_u_o[N].a_address = tl_t_o.a_address; + assign tl_u_o[N].a_mask = tl_t_o.a_mask; + assign tl_u_o[N].a_data = tl_t_o.a_data; + assign tl_u_o[N].a_user = tl_t_o.a_user; + tlul_err_resp err_resp ( + .clk_i, + .rst_ni, + .tl_h_i (tl_u_o[N]), + .tl_h_o (tl_u_i[N]) + ); + end else begin : gen_no_err_resp // block: gen_err_resp + assign tl_u_o[N] = '0; + assign tl_u_i[N] = '0; + logic unused_sig; + assign unused_sig = ^tl_u_o[N]; + end + +endmodule diff --git a/src/tlul/rtl/tlul_socket_m1.sv b/src/tlul/rtl/tlul_socket_m1.sv new file mode 100644 index 000000000..3a8cf4336 --- /dev/null +++ b/src/tlul/rtl/tlul_socket_m1.sv @@ -0,0 +1,260 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// TL-UL socket M:1 module +// +// Verilog parameters +// M: Number of host ports. +// HReqPass: M bit array to allow requests to pass through the host i +// FIFO with no clock delay if the request FIFO is empty. If +// 1'b0, at least one clock cycle of latency is created. +// Default is 1'b1. +// HRspPass: Same as HReqPass but for host response FIFO. +// HReqDepth: Mx4 bit array. bit[i*4+:4] is depth of host i request FIFO. +// Depth of zero is allowed if ReqPass is true. A maximum value +// of 16 is allowed, default is 2. +// HRspDepth: Same as HReqDepth but for host response FIFO. +// DReqPass: Same as HReqPass but for device request FIFO. +// DRspPass: Same as HReqPass but for device response FIFO. +// DReqDepth: Same as HReqDepth but for device request FIFO. +// DRspDepth: Same as HReqDepth but for device response FIFO. + +`include "caliptra_prim_assert.sv" + +module tlul_socket_m1 #( + parameter int unsigned M = 4, + parameter bit [M-1:0] HReqPass = {M{1'b1}}, + parameter bit [M-1:0] HRspPass = {M{1'b1}}, + parameter bit [M*4-1:0] HReqDepth = {M{4'h1}}, + parameter bit [M*4-1:0] HRspDepth = {M{4'h1}}, + parameter bit DReqPass = 1'b1, + parameter bit DRspPass = 1'b1, + parameter bit [3:0] DReqDepth = 4'h1, + parameter bit [3:0] DRspDepth = 4'h1 +) ( + input clk_i, + input rst_ni, + + input tlul_pkg::tl_h2d_t tl_h_i [M], + output tlul_pkg::tl_d2h_t tl_h_o [M], + + output tlul_pkg::tl_h2d_t tl_d_o, + input tlul_pkg::tl_d2h_t tl_d_i +); + + `CALIPTRA_ASSERT_INIT(maxM, M < 16) + + + // Signals + // + // tl_h_i/o[0] | tl_h_i/o[1] | ... | tl_h_i/o[M-1] + // | | | + // u_hostfifo[0] u_hostfifo[1] u_hostfifo[M-1] + // | | | + // hreq_fifo_o(i) / hrsp_fifo_i(i) + // --------------------------------------- + // | request/grant/req_data | + // | | + // | PRIM_ARBITER | + // | | + // | arb_valid / arb_ready / arb_data | + // --------------------------------------- + // | + // dreq_fifo_i / drsp_fifo_o + // | + // u_devicefifo + // | + // tl_d_o/i + // + // Required ID width to distinguish between host ports + // Used in response steering + localparam int unsigned IDW = tlul_pkg::TL_AIW; + localparam int unsigned STIDW = $clog2(M); + + tlul_pkg::tl_h2d_t hreq_fifo_o [M]; + tlul_pkg::tl_d2h_t hrsp_fifo_i [M]; + + logic [M-1:0] hrequest; + logic [M-1:0] hgrant; + + tlul_pkg::tl_h2d_t dreq_fifo_i; + tlul_pkg::tl_d2h_t drsp_fifo_o; + + logic arb_valid; + logic arb_ready; + tlul_pkg::tl_h2d_t arb_data; + + // Host Req/Rsp FIFO + for (genvar i = 0 ; i < M ; i++) begin : gen_host_fifo + tlul_pkg::tl_h2d_t hreq_fifo_i; + + // ID Shifting + logic [STIDW-1:0] reqid_sub; + logic [IDW-1:0] shifted_id; + assign reqid_sub = i; // can cause conversion error? + assign shifted_id = { + tl_h_i[i].a_source[0+:(IDW-STIDW)], + reqid_sub + }; + + `CALIPTRA_ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0) + + // assign not connected bits to nc_* signal to make lint happy + logic [IDW-1 : IDW-STIDW] unused_tl_h_source; + assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW]; + + // Put shifted ID + assign hreq_fifo_i = '{ + a_valid: tl_h_i[i].a_valid, + a_opcode: tl_h_i[i].a_opcode, + a_param: tl_h_i[i].a_param, + a_size: tl_h_i[i].a_size, + a_source: shifted_id, + a_address: tl_h_i[i].a_address, + a_mask: tl_h_i[i].a_mask, + a_data: tl_h_i[i].a_data, + a_user: tl_h_i[i].a_user, + d_ready: tl_h_i[i].d_ready + }; + + tlul_fifo_sync #( + .ReqPass (HReqPass[i]), + .RspPass (HRspPass[i]), + .ReqDepth (HReqDepth[i*4+:4]), + .RspDepth (HRspDepth[i*4+:4]), + .SpareReqW (1) + ) u_hostfifo ( + .clk_i, + .rst_ni, + .tl_h_i (hreq_fifo_i), + .tl_h_o (tl_h_o[i]), + .tl_d_o (hreq_fifo_o[i]), + .tl_d_i (hrsp_fifo_i[i]), + .spare_req_i (1'b0), + .spare_req_o (), + .spare_rsp_i (1'b0), + .spare_rsp_o () + ); + end + + // Device Req/Rsp FIFO + tlul_fifo_sync #( + .ReqPass (DReqPass), + .RspPass (DRspPass), + .ReqDepth (DReqDepth), + .RspDepth (DRspDepth), + .SpareReqW (1) + ) u_devicefifo ( + .clk_i, + .rst_ni, + .tl_h_i (dreq_fifo_i), + .tl_h_o (drsp_fifo_o), + .tl_d_o (tl_d_o), + .tl_d_i (tl_d_i), + .spare_req_i (1'b0), + .spare_req_o (), + .spare_rsp_i (1'b0), + .spare_rsp_o () + ); + + // Request Arbiter + for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt + assign hrequest[i] = hreq_fifo_o[i].a_valid; + end + + assign arb_ready = drsp_fifo_o.a_ready; + + if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc + prim_arbiter_ppc #( + .N (M), + .DW ($bits(tlul_pkg::tl_h2d_t)) + ) u_reqarb ( + .clk_i, + .rst_ni, + .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354. + .req_i ( hrequest ), + .data_i ( hreq_fifo_o ), + .gnt_o ( hgrant ), + .idx_o ( ), + .valid_o ( arb_valid ), + .data_o ( arb_data ), + .ready_i ( arb_ready ) + ); + end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb + prim_arbiter_tree #( + .N (M), + .DW ($bits(tlul_pkg::tl_h2d_t)) + ) u_reqarb ( + .clk_i, + .rst_ni, + .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354. + .req_i ( hrequest ), + .data_i ( hreq_fifo_o ), + .gnt_o ( hgrant ), + .idx_o ( ), + .valid_o ( arb_valid ), + .data_o ( arb_data ), + .ready_i ( arb_ready ) + ); + end else begin : gen_unknown + `CALIPTRA_ASSERT_INIT(UnknownArbImpl_A, 0) + end + + logic [ M-1:0] hfifo_rspvalid; + logic [ M-1:0] dfifo_rspready; + logic [IDW-1:0] hfifo_rspid; + logic dfifo_rspready_merged; + + // arb_data --> dreq_fifo_i + // dreq_fifo_i.hd_rspready <= dfifo_rspready + + assign dfifo_rspready_merged = |dfifo_rspready; + assign dreq_fifo_i = '{ + a_valid: arb_valid, + a_opcode: arb_data.a_opcode, + a_param: arb_data.a_param, + a_size: arb_data.a_size, + a_source: arb_data.a_source, + a_address: arb_data.a_address, + a_mask: arb_data.a_mask, + a_data: arb_data.a_data, + a_user: arb_data.a_user, + + d_ready: dfifo_rspready_merged + }; + + // Response ID steering + // drsp_fifo_o --> hrsp_fifo_i[i] + + // Response ID shifting before put into host fifo + assign hfifo_rspid = { + {STIDW{1'b0}}, + drsp_fifo_o.d_source[IDW-1:STIDW] + }; + for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting + assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid & + (drsp_fifo_o.d_source[0+:STIDW] == i); + assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready & + (drsp_fifo_o.d_source[0+:STIDW] == i) & + drsp_fifo_o.d_valid; + + assign hrsp_fifo_i[i] = '{ + d_valid: hfifo_rspvalid[i], + d_opcode: drsp_fifo_o.d_opcode, + d_param: drsp_fifo_o.d_param, + d_size: drsp_fifo_o.d_size, + d_source: hfifo_rspid, + d_sink: drsp_fifo_o.d_sink, + d_data: drsp_fifo_o.d_data, + d_user: drsp_fifo_o.d_user, + d_error: drsp_fifo_o.d_error, + a_ready: hgrant[i] + }; + end + + // this assertion fails when rspid[0+:STIDW] not in [0..M-1] + `CALIPTRA_ASSERT(rspIdInRange, drsp_fifo_o.d_valid |-> + drsp_fifo_o.d_source[0+:STIDW] >= 0 && drsp_fifo_o.d_source[0+:STIDW] < M) + +endmodule diff --git a/src/tlul/rtl/tlul_sram_byte.sv b/src/tlul/rtl/tlul_sram_byte.sv new file mode 100644 index 000000000..0cc1dcfe6 --- /dev/null +++ b/src/tlul/rtl/tlul_sram_byte.sv @@ -0,0 +1,328 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +`include "caliptra_prim_assert.sv" + +/** + * Tile-Link UL adapter for SRAM-like devices + * + * This module handles byte writes for tlul integrity. + * When a byte write is received, the downstream data is read first + * to correctly create the integrity constant. + * + * A tlul transaction goes through this module. If required, a + * tlul read transaction is generated out first. If not required, the + * incoming tlul transaction is directly muxed out. + */ +module tlul_sram_byte import tlul_pkg::*; #( + parameter bit EnableIntg = 0, // Enable integrity handling at byte level + parameter int Outstanding = 1 +) ( + input clk_i, + input rst_ni, + + input tl_h2d_t tl_i, + output tl_d2h_t tl_o, + + output tl_h2d_t tl_sram_o, + input tl_d2h_t tl_sram_i, + + // if incoming transaction already has an error, do not + // attempt to handle the byte-write access. Instead treat as + // feedthrough and allow the system to directly error back. + // The error indication is also fed through + input error_i, + output logic error_o, + + output logic rmw_in_progress_o +); + + if (EnableIntg) begin : gen_integ_handling + + // state enumeration + typedef enum logic [1:0] { + StPassThru, + StWaitRd, + StWriteCmd + } state_e; + + // state and selection + logic stall_host; + logic rd_phase; + logic rd_wait; + logic wr_phase; + state_e state_d, state_q; + + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + state_q <= StPassThru; + end else begin + state_q <= state_d; + end + end + + // transaction qualifying signals + logic a_ack; // upstream a channel acknowledgement + logic d_ack; // upstream d channel acknowledgement + logic sram_a_ack; // downstream a channel acknowledgement + logic sram_d_ack; // downstream d channel acknowledgement + logic wr_txn; + logic byte_wr_txn; + logic byte_req_ack; + logic [caliptra_prim_util_pkg::vbits(Outstanding+1)-1:0] pending_txn_cnt; + + assign a_ack = tl_i.a_valid & tl_o.a_ready; + assign d_ack = tl_o.d_valid & tl_i.d_ready; + assign sram_a_ack = tl_sram_o.a_valid & tl_sram_i.a_ready; + assign sram_d_ack = tl_sram_i.d_valid & tl_sram_o.d_ready; + assign wr_txn = (tl_i.a_opcode == PutFullData) | (tl_i.a_opcode == PutPartialData); + + assign byte_req_ack = byte_wr_txn & a_ack & ~error_i; + assign byte_wr_txn = tl_i.a_valid & ~&tl_i.a_mask & wr_txn; + + // state machine handling + always_comb begin + rd_wait = 1'b0; + stall_host = 1'b0; + wr_phase = 1'b0; + rd_phase = 1'b0; + state_d = state_q; + + unique case (state_q) + StPassThru: begin + if (byte_wr_txn) begin + rd_phase = 1'b1; + if (byte_req_ack) begin + state_d = StWaitRd; + end + end + end + + // Due to the way things are serialized, there is no way for the logic to tell which read + // belongs to the partial read unless it flushes all prior transactions. Hence, we wait + // here until exactly one outstanding transaction remains (that one is the partial read). + StWaitRd: begin + rd_phase = 1'b1; + stall_host = 1'b1; + if (pending_txn_cnt == $bits(pending_txn_cnt)'(1)) begin + rd_wait = 1'b1; + if (sram_d_ack) begin + state_d = StWriteCmd; + end + end + end + + StWriteCmd: begin + stall_host = 1'b1; + wr_phase = 1'b1; + + if (sram_a_ack) begin + state_d = StPassThru; + end + end + + default:; + + endcase // unique case (state_q) + + end + + // prim fifo for capturing info + typedef struct packed { + logic [2:0] a_param; + logic [tlul_pkg::TL_SZW-1:0] a_size; + logic [tlul_pkg::TL_AIW-1:0] a_source; + logic [tlul_pkg::TL_AW-1:0] a_address; + logic [tlul_pkg::TL_DBW-1:0] a_mask; + logic [tlul_pkg::TL_DW-1:0] a_data; + tl_a_user_t a_user; + } tl_txn_data_t; + + tl_txn_data_t txn_data; + tl_txn_data_t held_data; + logic fifo_rdy; + localparam int TxnDataWidth = $bits(tl_txn_data_t); + + assign txn_data = '{ + a_param: tl_i.a_param, + a_size: tl_i.a_size, + a_source: tl_i.a_source, + a_address: tl_i.a_address, + a_mask: tl_i.a_mask, + a_data: tl_i.a_data, + a_user: tl_i.a_user + }; + + prim_fifo_sync #( + .Width(TxnDataWidth), + .Pass(1'b0), + .Depth(1), + .OutputZeroIfEmpty(1'b0) + ) u_sync_fifo ( + .clk_i, + .rst_ni, + .clr_i(1'b0), + .wvalid_i(byte_req_ack), + .wready_o(fifo_rdy), + .wdata_i(txn_data), + .rvalid_o(), + .rready_i(sram_a_ack), + .rdata_o(held_data), + .full_o(), + .depth_o(), + .err_o() + ); + + // captured read data + logic [tlul_pkg::TL_DW-1:0] rsp_data; + always_ff @(posedge clk_i) begin + if (sram_d_ack && rd_wait) begin + rsp_data <= tl_sram_i.d_data; + end + end + + // while we could simply not assert a_ready to ensure the host keeps + // the request lines stable, there is no guarantee the hosts (if there are multiple) + // do not re-arbitrate on every cycle if its transactions are not accepted. + // As a result, it is better to capture the transaction attributes. + logic [tlul_pkg::TL_DW-1:0] combined_data, unused_data; + always_comb begin + for (int i = 0; i < tlul_pkg::TL_DBW; i++) begin + combined_data[i*8 +: 8] = held_data.a_mask[i] ? + held_data.a_data[i*8 +: 8] : + rsp_data[i*8 +: 8]; + end + end + + // Compute updated integrity bits for the data. + // Note that the CMD integrity does not have to be correct, since it is not consumed nor + // checked further downstream. + logic [tlul_pkg::DataIntgWidth-1:0] data_intg; + + tlul_data_integ_enc u_tlul_data_integ_enc ( + .data_i(combined_data), + .data_intg_o({data_intg, unused_data}) + ); + + tl_a_user_t combined_user; + always_comb begin + combined_user = held_data.a_user; + combined_user.data_intg = data_intg; + end + + localparam int unsigned AccessSize = $clog2(tlul_pkg::TL_DBW); + always_comb begin + // Pass-through by default + tl_sram_o = tl_i; + // if we're waiting for an internal read for RMW, we force this to 1. + tl_sram_o.d_ready = tl_i.d_ready | rd_wait; + + // We take over the TL-UL bus if there is a pending read or write for the RMW transaction. + // TL-UL signals are selectively muxed below to reduce complexity and remove long timing + // paths through the error_i signal. In particular, we avoid creating paths from error_i + // to the address and data output since these may feed into RAM scrambling logic further + // downstream. + + // Write transactions for RMW. + if (wr_phase) begin + tl_sram_o.a_valid = 1'b1; + tl_sram_o.a_opcode = PutFullData; + // Since we are performing a read-modify-write operation, + // we always access the entire word. + tl_sram_o.a_size = tlul_pkg::TL_SZW'(AccessSize); + tl_sram_o.a_mask = '{default: '1}; + // override with held / combined data. + // need to use word aligned addresses here. + tl_sram_o.a_address = held_data.a_address; + tl_sram_o.a_address[AccessSize-1:0] = '0; + tl_sram_o.a_source = held_data.a_source; + tl_sram_o.a_param = held_data.a_param; + tl_sram_o.a_data = combined_data; + tl_sram_o.a_user = combined_user; + // Read transactions for RMW. + end else if (rd_phase) begin + // need to use word aligned addresses here. + tl_sram_o.a_address[AccessSize-1:0] = '0; + // Only override the control signals if there is no error at the input. + if (!error_i || stall_host) begin + // Since we are performing a read-modify-write operation, + // we always access the entire word. + tl_sram_o.a_size = tlul_pkg::TL_SZW'(AccessSize); + tl_sram_o.a_mask = '{default: '1}; + // use incoming valid as long as we are not stalling the host + tl_sram_o.a_valid = tl_i.a_valid & ~stall_host; + tl_sram_o.a_opcode = Get; + end + end + end + + // This assert is necessary for the casting of AccessSize. + `CALIPTRA_ASSERT(TlulSramByteTlSize_A, tlul_pkg::TL_SZW >= $clog2(AccessSize + 1)) + + logic unused_held_data; + assign unused_held_data = ^{held_data.a_address[AccessSize-1:0], + held_data.a_user.data_intg, + held_data.a_size}; + + assign error_o = error_i & ~stall_host; + + logic size_fifo_rdy; + logic [tlul_pkg::TL_SZW-1:0] a_size; + prim_fifo_sync #( + .Width(tlul_pkg::TL_SZW), + .Pass(1'b0), + .Depth(Outstanding), + .OutputZeroIfEmpty(1'b1) + ) u_sync_fifo_a_size ( + .clk_i, + .rst_ni, + .clr_i(1'b0), + .wvalid_i(a_ack), + .wready_o(size_fifo_rdy), + .wdata_i(tl_i.a_size), + .rvalid_o(), + .rready_i(d_ack), + .rdata_o(a_size), + .full_o(), + .depth_o(pending_txn_cnt), + .err_o() + ); + + always_comb begin + tl_o = tl_sram_i; + + // pass a_ready through directly if we are not stalling + tl_o.a_ready = tl_sram_i.a_ready & ~stall_host & fifo_rdy & size_fifo_rdy; + + // when internal logic has taken over, do not show response to host during + // read phase. During write phase, allow the host to see the completion. + tl_o.d_valid = tl_sram_i.d_valid & ~rd_wait; + + // the size returned by tl_sram_i does not always correspond to the actual + // transaction size in cases where a read modify write operation is + // performed. Hence, we always return the registered size here. + tl_o.d_size = a_size; + end // always_comb + + // unused info from tl_sram_i + // see explanation in above block + logic unused_tl; + assign unused_tl = |tl_sram_i.d_size; + + // when byte access detected, go to wait read + `CALIPTRA_ASSERT(ByteAccessStateChange_A, a_ack & wr_txn & ~&tl_i.a_mask & ~error_i |=> + state_q inside {StWaitRd}) + // when in wait for read, a successful response should move to write phase + `CALIPTRA_ASSERT(ReadCompleteStateChange_A, + (state_q == StWaitRd) && (pending_txn_cnt == 1) && sram_d_ack |=> state_q == StWriteCmd) + + assign rmw_in_progress_o = wr_phase; + end else begin : gen_no_integ_handling + // In this case we pass everything just through. + assign tl_sram_o = tl_i; + assign tl_o = tl_sram_i; + assign error_o = error_i; + assign rmw_in_progress_o = 1'b0; + end +endmodule // tlul_adapter_sram diff --git a/src/tlul/socket_1n.core b/src/tlul/socket_1n.core new file mode 100644 index 000000000..a4c2e3853 --- /dev/null +++ b/src/tlul/socket_1n.core @@ -0,0 +1,64 @@ +CAPI=2: +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +name: "lowrisc:tlul:socket_1n:0.1" +description: "TL-UL socket 1:n" + +filesets: + files_rtl: + depend: + - lowrisc:prim:assert + - lowrisc:tlul:headers + - lowrisc:tlul:common + files: + - rtl/tlul_err_resp.sv + - rtl/tlul_socket_1n.sv + file_type: systemVerilogSource + + files_verilator_waiver: + depend: + # common waivers + - lowrisc:lint:common + files: + - lint/tlul_socket_1n.vlt + file_type: vlt + + files_ascentlint_waiver: + depend: + # common waivers + - lowrisc:lint:common + files: + - lint/tlul_socket_1n.waiver + file_type: waiver + + files_veriblelint_waiver: + depend: + # common waivers + - lowrisc:lint:common + +parameters: + SYNTHESIS: + datatype: bool + paramtype: vlogdefine + + +targets: + default: &default_target + filesets: + - tool_verilator ? (files_verilator_waiver) + - tool_ascentlint ? (files_ascentlint_waiver) + - tool_veriblelint ? (files_veriblelint_waiver) + - files_rtl + toplevel: tlul_socket_1n + + lint: + <<: *default_target + default_tool: verilator + parameters: + - SYNTHESIS=true + tools: + verilator: + mode: lint-only + verilator_options: + - "-Wall" diff --git a/src/tlul/socket_m1.core b/src/tlul/socket_m1.core new file mode 100644 index 000000000..e8e3af59a --- /dev/null +++ b/src/tlul/socket_m1.core @@ -0,0 +1,64 @@ +CAPI=2: +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +name: "lowrisc:tlul:socket_m1:0.1" +description: "TL-UL socket m:1" + +filesets: + files_rtl: + depend: + - lowrisc:prim:assert + - lowrisc:prim:arbiter + - lowrisc:tlul:common + - lowrisc:tlul:headers + files: + - rtl/tlul_socket_m1.sv + file_type: systemVerilogSource + + files_verilator_waiver: + depend: + # common waivers + - lowrisc:lint:common + files: + - lint/tlul_socket_m1.vlt + file_type: vlt + + files_ascentlint_waiver: + depend: + # common waivers + - lowrisc:lint:common + files: + - lint/tlul_socket_m1.waiver + file_type: waiver + + files_veriblelint_waiver: + depend: + # common waivers + - lowrisc:lint:common + +parameters: + SYNTHESIS: + datatype: bool + paramtype: vlogdefine + + +targets: + default: &default_target + filesets: + - tool_verilator ? (files_verilator_waiver) + - tool_ascentlint ? (files_ascentlint_waiver) + - tool_veriblelint ? (files_veriblelint_waiver) + - files_rtl + toplevel: tlul_socket_m1 + + lint: + <<: *default_target + default_tool: verilator + parameters: + - SYNTHESIS=true + tools: + verilator: + mode: lint-only + verilator_options: + - "-Wall" diff --git a/src/tlul/sram2tlul.core b/src/tlul/sram2tlul.core new file mode 100644 index 000000000..f4489900b --- /dev/null +++ b/src/tlul/sram2tlul.core @@ -0,0 +1,62 @@ +CAPI=2: +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +name: "lowrisc:tlul:sram2tlul:0.1" +description: "SRAM to TL-UL adapter (host)" + +filesets: + files_rtl: + depend: + - lowrisc:prim:assert + - lowrisc:tlul:common + files: + - rtl/sram2tlul.sv + file_type: systemVerilogSource + + files_verilator_waiver: + depend: + # common waivers + - lowrisc:lint:common + files: + - lint/tlul_sram2tlul.vlt + file_type: vlt + + files_ascentlint_waiver: + depend: + # common waivers + - lowrisc:lint:common + files: + - lint/tlul_sram2tlul.waiver + file_type: waiver + + files_veriblelint_waiver: + depend: + # common waivers + - lowrisc:lint:common + +parameters: + SYNTHESIS: + datatype: bool + paramtype: vlogdefine + + +targets: + default: &default_target + filesets: + - tool_verilator ? (files_verilator_waiver) + - tool_ascentlint ? (files_ascentlint_waiver) + - tool_veriblelint ? (files_veriblelint_waiver) + - files_rtl + toplevel: sram2tlul + + lint: + <<: *default_target + default_tool: verilator + parameters: + - SYNTHESIS=true + tools: + verilator: + mode: lint-only + verilator_options: + - "-Wall" diff --git a/src/tlul/tlul.core b/src/tlul/tlul.core new file mode 100644 index 000000000..0509b77f5 --- /dev/null +++ b/src/tlul/tlul.core @@ -0,0 +1,21 @@ +CAPI=2: +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +name: "lowrisc:ip:tlul:0.1" +description: "Transition core for TL-UL (deprecated)" + +filesets: + files_rtl: + depend: + - lowrisc:tlul:socket_1n + - lowrisc:tlul:socket_m1 + - lowrisc:tlul:adapter_sram + - lowrisc:tlul:adapter_reg + - lowrisc:tlul:sram2tlul + - lowrisc:tlul:lc_gate + +targets: + default: + filesets: + - files_rtl diff --git a/src/tlul/tlul_lc_gate.core b/src/tlul/tlul_lc_gate.core new file mode 100644 index 000000000..a7a2aef92 --- /dev/null +++ b/src/tlul/tlul_lc_gate.core @@ -0,0 +1,63 @@ +CAPI=2: +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +name: "lowrisc:tlul:lc_gate:0.1" +description: "TL-UL Lifecycle Gate" + +filesets: + files_rtl: + depend: + - lowrisc:prim:assert + - lowrisc:tlul:common + - lowrisc:ip:lc_ctrl_pkg + - lowrisc:prim:blanker + - lowrisc:prim:sparse_fsm + files: + - rtl/tlul_lc_gate.sv + file_type: systemVerilogSource + + files_verilator_waiver: + depend: + # common waivers + - lowrisc:lint:common + files: + - lint/tlul_lc_gate.vlt + file_type: vlt + + files_ascentlint_waiver: + depend: + # common waivers + - lowrisc:lint:common + file_type: waiver + + files_veriblelint_waiver: + depend: + # common waivers + - lowrisc:lint:common + +parameters: + SYNTHESIS: + datatype: bool + paramtype: vlogdefine + + +targets: + default: &default_target + filesets: + - tool_verilator ? (files_verilator_waiver) + - tool_ascentlint ? (files_ascentlint_waiver) + - tool_veriblelint ? (files_veriblelint_waiver) + - files_rtl + toplevel: tlul_lc_gate + + lint: + <<: *default_target + default_tool: verilator + parameters: + - SYNTHESIS=true + tools: + verilator: + mode: lint-only + verilator_options: + - "-Wall" diff --git a/src/tlul/trans_intg.core b/src/tlul/trans_intg.core new file mode 100644 index 000000000..50b9dcd8b --- /dev/null +++ b/src/tlul/trans_intg.core @@ -0,0 +1,64 @@ +CAPI=2: +# Copyright lowRISC contributors (OpenTitan project). +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 +name: "lowrisc:tlul:trans_intg:0.1" +description: "Tlul transmission integrity" + +filesets: + files_rtl: + depend: + - lowrisc:prim:assert + - lowrisc:prim:secded + - lowrisc:tlul:headers + files: + - rtl/tlul_data_integ_enc.sv + - rtl/tlul_data_integ_dec.sv + - rtl/tlul_cmd_intg_gen.sv + - rtl/tlul_cmd_intg_chk.sv + - rtl/tlul_rsp_intg_gen.sv + - rtl/tlul_rsp_intg_chk.sv + file_type: systemVerilogSource + + files_verilator_waiver: + depend: + # common waivers + - lowrisc:lint:common + file_type: vlt + + files_ascentlint_waiver: + depend: + # common waivers + - lowrisc:lint:common + file_type: waiver + + files_veriblelint_waiver: + depend: + # common waivers + - lowrisc:lint:common + +parameters: + SYNTHESIS: + datatype: bool + paramtype: vlogdefine + + +targets: + default: &default_target + filesets: + - tool_verilator ? (files_verilator_waiver) + - tool_ascentlint ? (files_ascentlint_waiver) + - tool_veriblelint ? (files_veriblelint_waiver) + - files_rtl + toplevel: tlul_payload_chk + + lint: + <<: *default_target + default_tool: verilator + parameters: + - SYNTHESIS=true + tools: + verilator: + mode: lint-only + verilator_options: + - "-Wall" From 6487e0825599d3e827a48a1bb88a35d3788f342d Mon Sep 17 00:00:00 2001 From: Anjana Parthasarathy Date: Tue, 1 Oct 2024 14:45:29 -0700 Subject: [PATCH 55/58] Removed lc_creator_seed_sw_rw_en, lc_owner_seed_sw_rw_en as they are not used by Caliptra --- src/fuse_ctrl/rtl/otp_ctrl.sv | 15 ++++++++------- src/fuse_ctrl/rtl/otp_ctrl_top.sv | 12 ++++++------ src/fuse_ctrl/tb/otp_ctrl_top_tb.sv | 18 +++++++++--------- 3 files changed, 23 insertions(+), 22 deletions(-) diff --git a/src/fuse_ctrl/rtl/otp_ctrl.sv b/src/fuse_ctrl/rtl/otp_ctrl.sv index db3db8f47..a4dc679e6 100644 --- a/src/fuse_ctrl/rtl/otp_ctrl.sv +++ b/src/fuse_ctrl/rtl/otp_ctrl.sv @@ -58,9 +58,9 @@ module otp_ctrl output lc_otp_program_rsp_t lc_otp_program_o, // Lifecycle broadcast inputs // SEC_CM: LC_CTRL.INTERSIG.MUBI - input lc_ctrl_pkg::lc_tx_t lc_creator_seed_sw_rw_en_i, - input lc_ctrl_pkg::lc_tx_t lc_owner_seed_sw_rw_en_i, - input lc_ctrl_pkg::lc_tx_t lc_seed_hw_rd_en_i, + //input lc_ctrl_pkg::lc_tx_t lc_creator_seed_sw_rw_en_i, + //input lc_ctrl_pkg::lc_tx_t lc_owner_seed_sw_rw_en_i, + //input lc_ctrl_pkg::lc_tx_t lc_seed_hw_rd_en_i, input lc_ctrl_pkg::lc_tx_t lc_dft_en_i, input lc_ctrl_pkg::lc_tx_t lc_escalate_en_i, input lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i, @@ -145,8 +145,9 @@ module otp_ctrl // Life Cycle Signal Synchronization // /////////////////////////////////////// - lc_ctrl_pkg::lc_tx_t lc_creator_seed_sw_rw_en, lc_owner_seed_sw_rw_en, - lc_seed_hw_rd_en, lc_check_byp_en; + //lc_ctrl_pkg::lc_tx_t lc_creator_seed_sw_rw_en, lc_owner_seed_sw_rw_en, + // lc_seed_hw_rd_en, + lc_ctrl_pkg::lc_tx_t lc_check_byp_en; lc_ctrl_pkg::lc_tx_t [2:0] lc_dft_en; // NumAgents + lfsr timer and scrambling datapath. lc_ctrl_pkg::lc_tx_t [NumAgentsIdx+1:0] lc_escalate_en, lc_escalate_en_synced; @@ -161,7 +162,7 @@ module otp_ctrl .lc_en_i(lc_escalate_en_i), .lc_en_o(lc_escalate_en_synced) ); - +/* caliptra_prim_lc_sync #( .NumCopies(1) ) u_prim_lc_sync_creator_seed_sw_rw_en ( @@ -188,7 +189,7 @@ module otp_ctrl .lc_en_i(lc_seed_hw_rd_en_i), .lc_en_o({lc_seed_hw_rd_en}) ); - +*/ caliptra_prim_lc_sync #( .NumCopies(3) ) u_prim_lc_sync_dft_en ( diff --git a/src/fuse_ctrl/rtl/otp_ctrl_top.sv b/src/fuse_ctrl/rtl/otp_ctrl_top.sv index b81f97352..ce5cad022 100644 --- a/src/fuse_ctrl/rtl/otp_ctrl_top.sv +++ b/src/fuse_ctrl/rtl/otp_ctrl_top.sv @@ -74,9 +74,9 @@ module otp_ctrl_top output lc_otp_program_rsp_t lc_otp_program_o, // Lifecycle broadcast inputs // SEC_CM: LC_CTRL.INTERSIG.MUBI - input lc_ctrl_pkg::lc_tx_t lc_creator_seed_sw_rw_en_i, - input lc_ctrl_pkg::lc_tx_t lc_owner_seed_sw_rw_en_i, - input lc_ctrl_pkg::lc_tx_t lc_seed_hw_rd_en_i, + //input lc_ctrl_pkg::lc_tx_t lc_creator_seed_sw_rw_en_i, + //input lc_ctrl_pkg::lc_tx_t lc_owner_seed_sw_rw_en_i, + //input lc_ctrl_pkg::lc_tx_t lc_seed_hw_rd_en_i, input lc_ctrl_pkg::lc_tx_t lc_dft_en_i, input lc_ctrl_pkg::lc_tx_t lc_escalate_en_i, input lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i, @@ -180,9 +180,9 @@ module otp_ctrl_top .lc_otp_vendor_test_o, .lc_otp_program_i, .lc_otp_program_o, - .lc_creator_seed_sw_rw_en_i, - .lc_owner_seed_sw_rw_en_i, - .lc_seed_hw_rd_en_i, + //.lc_creator_seed_sw_rw_en_i, + //.lc_owner_seed_sw_rw_en_i, + //.lc_seed_hw_rd_en_i, .lc_dft_en_i, .lc_escalate_en_i, .lc_check_byp_en_i, diff --git a/src/fuse_ctrl/tb/otp_ctrl_top_tb.sv b/src/fuse_ctrl/tb/otp_ctrl_top_tb.sv index bf7c11ac7..1df653d82 100644 --- a/src/fuse_ctrl/tb/otp_ctrl_top_tb.sv +++ b/src/fuse_ctrl/tb/otp_ctrl_top_tb.sv @@ -81,9 +81,9 @@ module otp_ctrl_top_tb // Lifecycle broadcast inputs // SEC_CM: LC_CTRL.INTERSIG.MUBI - lc_ctrl_pkg::lc_tx_t lc_creator_seed_sw_rw_en_i; - lc_ctrl_pkg::lc_tx_t lc_owner_seed_sw_rw_en_i; - lc_ctrl_pkg::lc_tx_t lc_seed_hw_rd_en_i; + //lc_ctrl_pkg::lc_tx_t lc_creator_seed_sw_rw_en_i; + //lc_ctrl_pkg::lc_tx_t lc_owner_seed_sw_rw_en_i; + //lc_ctrl_pkg::lc_tx_t lc_seed_hw_rd_en_i; lc_ctrl_pkg::lc_tx_t lc_dft_en_i; lc_ctrl_pkg::lc_tx_t lc_escalate_en_i; lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i; @@ -215,9 +215,9 @@ module otp_ctrl_top_tb .lc_otp_vendor_test_o (lc_otp_vendor_test_o), //(otp_ctrl_if.otp_vendor_test_status_o), .lc_otp_program_i (lc_otp_program_i), //({lc_prog_if.req, lc_prog_if.h_data}), .lc_otp_program_o (lc_otp_program_o), //({lc_prog_if.d_data, lc_prog_if.ack}), - .lc_creator_seed_sw_rw_en_i (lc_creator_seed_sw_rw_en_i), //(otp_ctrl_if.lc_creator_seed_sw_rw_en_i), - .lc_owner_seed_sw_rw_en_i (lc_owner_seed_sw_rw_en_i), //(otp_ctrl_if.lc_owner_seed_sw_rw_en_i), - .lc_seed_hw_rd_en_i (lc_seed_hw_rd_en_i), //(otp_ctrl_if.lc_seed_hw_rd_en_i), + //.lc_creator_seed_sw_rw_en_i (lc_creator_seed_sw_rw_en_i), //(otp_ctrl_if.lc_creator_seed_sw_rw_en_i), + //.lc_owner_seed_sw_rw_en_i (lc_owner_seed_sw_rw_en_i), //(otp_ctrl_if.lc_owner_seed_sw_rw_en_i), + //.lc_seed_hw_rd_en_i (lc_seed_hw_rd_en_i), //(otp_ctrl_if.lc_seed_hw_rd_en_i), .lc_dft_en_i (lc_dft_en_i), //(otp_ctrl_if.lc_dft_en_i), .lc_escalate_en_i (lc_escalate_en_i), //(otp_ctrl_if.lc_escalate_en_i), .lc_check_byp_en_i (lc_check_byp_en_i), //(otp_ctrl_if.lc_check_byp_en_i), @@ -349,9 +349,9 @@ module otp_ctrl_top_tb axi_secreg_if.arvalid = 0; axi_secreg_if.rready = 0; - lc_creator_seed_sw_rw_en_i = lc_ctrl_pkg::Off;; - lc_owner_seed_sw_rw_en_i = lc_ctrl_pkg::Off;; - lc_seed_hw_rd_en_i = lc_ctrl_pkg::Off;; + //lc_creator_seed_sw_rw_en_i = lc_ctrl_pkg::Off;; + //lc_owner_seed_sw_rw_en_i = lc_ctrl_pkg::Off;; + //lc_seed_hw_rd_en_i = lc_ctrl_pkg::Off;; lc_dft_en_i = lc_ctrl_pkg::Off;; lc_escalate_en_i = lc_ctrl_pkg::Off;; lc_check_byp_en_i = lc_ctrl_pkg::Off;; From 7ebd3556d371779ff09d0ce9df9ee6093cde903f Mon Sep 17 00:00:00 2001 From: Anjana Parthasarathy Date: Thu, 3 Oct 2024 09:57:56 -0700 Subject: [PATCH 56/58] Added all dependencies for lc_ctrl, greated lc_ctrl_top with AXI2TLUL gasket --- src/alert_handler/config/compile.yml | 12 + .../rtl/alert_handler_reg_pkg.sv | 1781 +++++++++++++++++ src/caliptra_prim/config/compile.yml | 2 + .../rtl/caliptra_prim_esc_pkg.sv | 23 + src/dm/config/compile.yml | 11 + src/dm/rtl/dm_pkg.sv | 451 +++++ .../uvmf_fuse_ctrl/fuse_ctrl_bench.yaml | 51 + .../uvmf_fuse_ctrl/fuse_ctrl_environment.yaml | 106 + .../uvmf_fuse_ctrl/fuse_ctrl_global.yaml | 16 + .../fuse_ctrl_in_interfaces.yaml | 698 +++++++ .../fuse_ctrl_out_interfaces.yaml | 470 +++++ .../fuse_ctrl_util_comp_predictor.yaml | 28 + .../fuse_ctrl_util_comp_scoreboard.yaml | 37 + .../uvmf_fuse_ctrl/run_yaml_uvmf_scripts.sh | 12 + .../project_benches/fuse_ctrl/.project | 37 + .../project_benches/fuse_ctrl/.svproject | 16 + .../fuse_ctrl/docs/interfaces.csv | 42 + .../project_benches/fuse_ctrl/fuse_ctrl_sve.F | 42 + .../project_benches/fuse_ctrl/rtl/dut.compile | 6 + .../fuse_ctrl/rtl/verilog/verilog_dut.v | 21 + .../fuse_ctrl/rtl/verilog/verilog_dut.vinfo | 1 + .../fuse_ctrl/rtl/vhdl/vhdl_dut.vhd | 21 + .../project_benches/fuse_ctrl/sim/Makefile | 377 ++++ .../fuse_ctrl/sim/bcr_testlist | 19 + .../fuse_ctrl/sim/bcr_testlist.yaml | 44 + .../project_benches/fuse_ctrl/sim/compile.do | 85 + .../project_benches/fuse_ctrl/sim/hdl.compile | 5 + .../project_benches/fuse_ctrl/sim/hdl.vinfo | 1 + .../project_benches/fuse_ctrl/sim/hvl.compile | 2 + .../project_benches/fuse_ctrl/sim/hvl.vinfo | 1 + .../project_benches/fuse_ctrl/sim/run.do | 21 + .../project_benches/fuse_ctrl/sim/tbx.config | 10 + .../project_benches/fuse_ctrl/sim/testlist | 20 + .../fuse_ctrl/sim/testlist.yaml | 44 + .../project_benches/fuse_ctrl/sim/top.compile | 3 + .../fuse_ctrl/sim/veloce.config | 26 + .../project_benches/fuse_ctrl/sim/viswave.do | 106 + .../project_benches/fuse_ctrl/sim/wave.do | 72 + .../project_benches/fuse_ctrl/sim/xwaves.sigs | 17 + .../fuse_ctrl_parameters_pkg.compile | 4 + .../tb/parameters/fuse_ctrl_parameters_pkg.sv | 66 + .../parameters/fuse_ctrl_parameters_pkg.vinfo | 2 + .../sequences/fuse_ctrl_sequences_pkg.compile | 22 + .../tb/sequences/fuse_ctrl_sequences_pkg.sv | 93 + .../sequences/fuse_ctrl_sequences_pkg.vinfo | 21 + .../src/example_derived_test_sequence.svh | 44 + .../src/fuse_ctrl_bench_sequence_base.svh | 232 +++ .../sequences/src/register_test_sequence.svh | 76 + .../fuse_ctrl/tb/testbench/hdl_top.compile | 24 + .../fuse_ctrl/tb/testbench/hdl_top.sv | 339 ++++ .../fuse_ctrl/tb/testbench/hdl_top.vinfo | 20 + .../fuse_ctrl/tb/testbench/hvl_top.compile | 7 + .../fuse_ctrl/tb/testbench/hvl_top.sv | 47 + .../fuse_ctrl/tb/testbench/hvl_top.vinfo | 2 + .../fuse_ctrl/tb/testbench/top_filelist_hdl.f | 3 + .../fuse_ctrl/tb/testbench/top_filelist_hvl.f | 3 + .../tb/tests/fuse_ctrl_tests_pkg.compile | 23 + .../fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.sv | 96 + .../tb/tests/fuse_ctrl_tests_pkg.vinfo | 22 + .../tb/tests/src/example_derived_test.svh | 57 + .../fuse_ctrl/tb/tests/src/register_test.svh | 54 + .../fuse_ctrl/tb/tests/src/test_top.svh | 120 ++ .../fuse_ctrl/yaml/fuse_ctrl_bench.yaml | 45 + .../fuse_ctrl_env_pkg/.project | 32 + .../fuse_ctrl_env_pkg/.svproject | 16 + .../fuse_ctrl_env_pkg/Makefile | 56 + .../fuse_ctrl_env_pkg/compile.do | 12 + .../fuse_ctrl_env_pkg.compile | 22 + .../fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv | 107 + .../fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo | 19 + .../fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F | 12 + .../src/fuse_ctrl_env_configuration.svh | 261 +++ .../src/fuse_ctrl_env_sequence_base.svh | 146 ++ .../src/fuse_ctrl_env_typedefs.svh | 34 + .../src/fuse_ctrl_environment.svh | 221 ++ .../src/fuse_ctrl_predictor.svh | 323 +++ .../src/fuse_ctrl_scoreboard.svh | 149 ++ .../yaml/fuse_ctrl_environment.yaml | 122 ++ ...se_ctrl_util_comp_fuse_ctrl_predictor.yaml | 23 + ...e_ctrl_util_comp_fuse_ctrl_scoreboard.yaml | 10 + .../core_axi_read_if_pkg/.project | 30 + .../core_axi_read_if_pkg/.svproject | 16 + .../core_axi_read_if_pkg/Makefile | 66 + .../core_axi_read_if_pkg/compile.do | 14 + .../core_axi_read_if.compile | 3 + .../core_axi_read_if_bfm.vinfo | 6 + .../core_axi_read_if_common.compile | 7 + .../core_axi_read_if_filelist_hdl.f | 1 + .../core_axi_read_if_filelist_hvl.f | 1 + .../core_axi_read_if_filelist_xrtl.f | 3 + .../core_axi_read_if_hdl.compile | 9 + .../core_axi_read_if_hvl.compile | 7 + .../core_axi_read_if_pkg.sv | 91 + .../core_axi_read_if_pkg.vinfo | 4 + .../core_axi_read_if_pkg_hdl.sv | 52 + .../core_axi_read_if_pkg_hdl.vinfo | 2 + .../core_axi_read_if_pkg_sve.F | 10 + .../src/core_axi_read_if2reg_adapter.svh | 142 ++ .../src/core_axi_read_if_agent.svh | 109 + .../src/core_axi_read_if_configuration.svh | 241 +++ .../src/core_axi_read_if_driver.svh | 141 ++ .../src/core_axi_read_if_driver_bfm.sv | 352 ++++ .../src/core_axi_read_if_if.sv | 109 + ...e_axi_read_if_infact_coverage_strategy.csv | 6 + .../src/core_axi_read_if_macros.svh | 180 ++ .../src/core_axi_read_if_monitor.svh | 131 ++ .../src/core_axi_read_if_monitor_bfm.sv | 220 ++ .../src/core_axi_read_if_random_sequence.svh | 91 + .../core_axi_read_if_responder_sequence.svh | 87 + .../src/core_axi_read_if_sequence_base.svh | 146 ++ .../src/core_axi_read_if_transaction.svh | 240 +++ .../core_axi_read_if_transaction_coverage.svh | 107 + .../src/core_axi_read_if_typedefs.svh | 34 + .../src/core_axi_read_if_typedefs_hdl.svh | 35 + .../yaml/core_axi_read_if_interface.yaml | 91 + .../core_axi_read_out_if_pkg/.project | 30 + .../core_axi_read_out_if_pkg/.svproject | 16 + .../core_axi_read_out_if_pkg/Makefile | 66 + .../core_axi_read_out_if_pkg/compile.do | 14 + .../core_axi_read_out_if.compile | 3 + .../core_axi_read_out_if_bfm.vinfo | 6 + .../core_axi_read_out_if_common.compile | 7 + .../core_axi_read_out_if_filelist_hdl.f | 1 + .../core_axi_read_out_if_filelist_hvl.f | 1 + .../core_axi_read_out_if_filelist_xrtl.f | 3 + .../core_axi_read_out_if_hdl.compile | 9 + .../core_axi_read_out_if_hvl.compile | 7 + .../core_axi_read_out_if_pkg.sv | 91 + .../core_axi_read_out_if_pkg.vinfo | 4 + .../core_axi_read_out_if_pkg_hdl.sv | 52 + .../core_axi_read_out_if_pkg_hdl.vinfo | 2 + .../core_axi_read_out_if_pkg_sve.F | 10 + .../src/core_axi_read_out_if2reg_adapter.svh | 142 ++ .../src/core_axi_read_out_if_agent.svh | 109 + .../core_axi_read_out_if_configuration.svh | 241 +++ .../src/core_axi_read_out_if_driver.svh | 141 ++ .../src/core_axi_read_out_if_driver_bfm.sv | 352 ++++ .../src/core_axi_read_out_if_if.sv | 109 + ...i_read_out_if_infact_coverage_strategy.csv | 6 + .../src/core_axi_read_out_if_macros.svh | 180 ++ .../src/core_axi_read_out_if_monitor.svh | 131 ++ .../src/core_axi_read_out_if_monitor_bfm.sv | 220 ++ .../core_axi_read_out_if_random_sequence.svh | 91 + ...ore_axi_read_out_if_responder_sequence.svh | 87 + .../core_axi_read_out_if_sequence_base.svh | 146 ++ .../src/core_axi_read_out_if_transaction.svh | 240 +++ ...e_axi_read_out_if_transaction_coverage.svh | 107 + .../src/core_axi_read_out_if_typedefs.svh | 34 + .../src/core_axi_read_out_if_typedefs_hdl.svh | 35 + .../yaml/core_axi_read_out_if_interface.yaml | 91 + .../core_axi_write_if_pkg/.project | 30 + .../core_axi_write_if_pkg/.svproject | 16 + .../core_axi_write_if_pkg/Makefile | 66 + .../core_axi_write_if_pkg/compile.do | 14 + .../core_axi_write_if.compile | 3 + .../core_axi_write_if_bfm.vinfo | 6 + .../core_axi_write_if_common.compile | 7 + .../core_axi_write_if_filelist_hdl.f | 1 + .../core_axi_write_if_filelist_hvl.f | 1 + .../core_axi_write_if_filelist_xrtl.f | 3 + .../core_axi_write_if_hdl.compile | 9 + .../core_axi_write_if_hvl.compile | 7 + .../core_axi_write_if_pkg.sv | 91 + .../core_axi_write_if_pkg.vinfo | 4 + .../core_axi_write_if_pkg_hdl.sv | 52 + .../core_axi_write_if_pkg_hdl.vinfo | 2 + .../core_axi_write_if_pkg_sve.F | 10 + .../src/core_axi_write_if2reg_adapter.svh | 142 ++ .../src/core_axi_write_if_agent.svh | 109 + .../src/core_axi_write_if_configuration.svh | 241 +++ .../src/core_axi_write_if_driver.svh | 141 ++ .../src/core_axi_write_if_driver_bfm.sv | 341 ++++ .../src/core_axi_write_if_if.sv | 104 + ..._axi_write_if_infact_coverage_strategy.csv | 6 + .../src/core_axi_write_if_macros.svh | 171 ++ .../src/core_axi_write_if_monitor.svh | 131 ++ .../src/core_axi_write_if_monitor_bfm.sv | 216 ++ .../src/core_axi_write_if_random_sequence.svh | 91 + .../core_axi_write_if_responder_sequence.svh | 87 + .../src/core_axi_write_if_sequence_base.svh | 146 ++ .../src/core_axi_write_if_transaction.svh | 236 +++ ...core_axi_write_if_transaction_coverage.svh | 106 + .../src/core_axi_write_if_typedefs.svh | 34 + .../src/core_axi_write_if_typedefs_hdl.svh | 35 + .../yaml/core_axi_write_if_interface.yaml | 81 + .../core_axi_write_out_if_pkg/.project | 30 + .../core_axi_write_out_if_pkg/.svproject | 16 + .../core_axi_write_out_if_pkg/Makefile | 66 + .../core_axi_write_out_if_pkg/compile.do | 14 + .../core_axi_write_out_if.compile | 3 + .../core_axi_write_out_if_bfm.vinfo | 6 + .../core_axi_write_out_if_common.compile | 7 + .../core_axi_write_out_if_filelist_hdl.f | 1 + .../core_axi_write_out_if_filelist_hvl.f | 1 + .../core_axi_write_out_if_filelist_xrtl.f | 3 + .../core_axi_write_out_if_hdl.compile | 9 + .../core_axi_write_out_if_hvl.compile | 7 + .../core_axi_write_out_if_pkg.sv | 91 + .../core_axi_write_out_if_pkg.vinfo | 4 + .../core_axi_write_out_if_pkg_hdl.sv | 52 + .../core_axi_write_out_if_pkg_hdl.vinfo | 2 + .../core_axi_write_out_if_pkg_sve.F | 10 + .../src/core_axi_write_out_if2reg_adapter.svh | 142 ++ .../src/core_axi_write_out_if_agent.svh | 109 + .../core_axi_write_out_if_configuration.svh | 241 +++ .../src/core_axi_write_out_if_driver.svh | 141 ++ .../src/core_axi_write_out_if_driver_bfm.sv | 341 ++++ .../src/core_axi_write_out_if_if.sv | 104 + ..._write_out_if_infact_coverage_strategy.csv | 6 + .../src/core_axi_write_out_if_macros.svh | 171 ++ .../src/core_axi_write_out_if_monitor.svh | 131 ++ .../src/core_axi_write_out_if_monitor_bfm.sv | 216 ++ .../core_axi_write_out_if_random_sequence.svh | 91 + ...re_axi_write_out_if_responder_sequence.svh | 87 + .../core_axi_write_out_if_sequence_base.svh | 146 ++ .../src/core_axi_write_out_if_transaction.svh | 236 +++ ..._axi_write_out_if_transaction_coverage.svh | 106 + .../src/core_axi_write_out_if_typedefs.svh | 34 + .../core_axi_write_out_if_typedefs_hdl.svh | 35 + .../yaml/core_axi_write_out_if_interface.yaml | 81 + .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_core_core_axi_write_out_if.compile | 3 + .../fuse_core_core_axi_write_out_if_bfm.vinfo | 6 + ..._core_core_axi_write_out_if_common.compile | 7 + ..._core_core_axi_write_out_if_filelist_hdl.f | 1 + ..._core_core_axi_write_out_if_filelist_hvl.f | 1 + ...core_core_axi_write_out_if_filelist_xrtl.f | 3 + ...use_core_core_axi_write_out_if_hdl.compile | 9 + ...use_core_core_axi_write_out_if_hvl.compile | 7 + .../fuse_core_core_axi_write_out_if_pkg.sv | 91 + .../fuse_core_core_axi_write_out_if_pkg.vinfo | 4 + ...fuse_core_core_axi_write_out_if_pkg_hdl.sv | 52 + ...e_core_core_axi_write_out_if_pkg_hdl.vinfo | 2 + .../fuse_core_core_axi_write_out_if_pkg_sve.F | 10 + ...core_core_axi_write_out_if2reg_adapter.svh | 142 ++ .../fuse_core_core_axi_write_out_if_agent.svh | 109 + ...re_core_axi_write_out_if_configuration.svh | 241 +++ ...fuse_core_core_axi_write_out_if_driver.svh | 141 ++ ...e_core_core_axi_write_out_if_driver_bfm.sv | 341 ++++ .../src/fuse_core_core_axi_write_out_if_if.sv | 104 + ..._write_out_if_infact_coverage_strategy.csv | 6 + ...fuse_core_core_axi_write_out_if_macros.svh | 171 ++ ...use_core_core_axi_write_out_if_monitor.svh | 131 ++ ..._core_core_axi_write_out_if_monitor_bfm.sv | 216 ++ ..._core_axi_write_out_if_random_sequence.svh | 91 + ...re_axi_write_out_if_responder_sequence.svh | 87 + ...re_core_axi_write_out_if_sequence_base.svh | 146 ++ ...core_core_axi_write_out_if_transaction.svh | 236 +++ ..._axi_write_out_if_transaction_coverage.svh | 106 + ...se_core_core_axi_write_out_if_typedefs.svh | 34 + ...ore_core_axi_write_out_if_typedefs_hdl.svh | 35 + ..._core_core_axi_write_out_if_interface.yaml | 81 + .../fuse_ctrl_core_axi_read_if_pkg/.project | 30 + .../fuse_ctrl_core_axi_read_if_pkg/.svproject | 16 + .../fuse_ctrl_core_axi_read_if_pkg/Makefile | 66 + .../fuse_ctrl_core_axi_read_if_pkg/compile.do | 14 + .../fuse_ctrl_core_axi_read_if.compile | 3 + .../fuse_ctrl_core_axi_read_if_bfm.vinfo | 6 + .../fuse_ctrl_core_axi_read_if_common.compile | 7 + .../fuse_ctrl_core_axi_read_if_filelist_hdl.f | 1 + .../fuse_ctrl_core_axi_read_if_filelist_hvl.f | 1 + ...fuse_ctrl_core_axi_read_if_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_read_if_hdl.compile | 9 + .../fuse_ctrl_core_axi_read_if_hvl.compile | 7 + .../fuse_ctrl_core_axi_read_if_pkg.sv | 91 + .../fuse_ctrl_core_axi_read_if_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_read_if_pkg_hdl.sv | 52 + .../fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_read_if_pkg_sve.F | 10 + ...fuse_ctrl_core_axi_read_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_core_axi_read_if_agent.svh | 109 + ...se_ctrl_core_axi_read_if_configuration.svh | 241 +++ .../src/fuse_ctrl_core_axi_read_if_driver.svh | 141 ++ .../fuse_ctrl_core_axi_read_if_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_core_axi_read_if_if.sv | 124 ++ ...e_axi_read_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_core_axi_read_if_macros.svh | 207 ++ .../fuse_ctrl_core_axi_read_if_monitor.svh | 131 ++ .../fuse_ctrl_core_axi_read_if_monitor_bfm.sv | 232 +++ ..._ctrl_core_axi_read_if_random_sequence.svh | 91 + ...rl_core_axi_read_if_responder_sequence.svh | 87 + ...se_ctrl_core_axi_read_if_sequence_base.svh | 146 ++ ...fuse_ctrl_core_axi_read_if_transaction.svh | 243 +++ ..._core_axi_read_if_transaction_coverage.svh | 110 + .../fuse_ctrl_core_axi_read_if_typedefs.svh | 34 + ...use_ctrl_core_axi_read_if_typedefs_hdl.svh | 35 + .../fuse_ctrl_core_axi_read_if_interface.yaml | 121 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_read_in_if.compile | 3 + .../fuse_ctrl_core_axi_read_in_if_bfm.vinfo | 6 + ...se_ctrl_core_axi_read_in_if_common.compile | 7 + ...se_ctrl_core_axi_read_in_if_filelist_hdl.f | 1 + ...se_ctrl_core_axi_read_in_if_filelist_hvl.f | 1 + ...e_ctrl_core_axi_read_in_if_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_read_in_if_hdl.compile | 9 + .../fuse_ctrl_core_axi_read_in_if_hvl.compile | 7 + .../fuse_ctrl_core_axi_read_in_if_pkg.sv | 91 + .../fuse_ctrl_core_axi_read_in_if_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv | 52 + ...use_ctrl_core_axi_read_in_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_read_in_if_pkg_sve.F | 10 + ...e_ctrl_core_axi_read_in_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_core_axi_read_in_if_agent.svh | 109 + ...ctrl_core_axi_read_in_if_configuration.svh | 241 +++ .../fuse_ctrl_core_axi_read_in_if_driver.svh | 141 ++ ...use_ctrl_core_axi_read_in_if_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_core_axi_read_in_if_if.sv | 124 ++ ...xi_read_in_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_core_axi_read_in_if_macros.svh | 207 ++ .../fuse_ctrl_core_axi_read_in_if_monitor.svh | 131 ++ ...se_ctrl_core_axi_read_in_if_monitor_bfm.sv | 232 +++ ...rl_core_axi_read_in_if_random_sequence.svh | 91 + ...core_axi_read_in_if_responder_sequence.svh | 87 + ...ctrl_core_axi_read_in_if_sequence_base.svh | 146 ++ ...e_ctrl_core_axi_read_in_if_transaction.svh | 243 +++ ...re_axi_read_in_if_transaction_coverage.svh | 110 + ...fuse_ctrl_core_axi_read_in_if_typedefs.svh | 34 + ..._ctrl_core_axi_read_in_if_typedefs_hdl.svh | 35 + ...se_ctrl_core_axi_read_in_if_interface.yaml | 121 ++ .../fuse_ctrl_core_axi_read_in_pkg/.project | 30 + .../fuse_ctrl_core_axi_read_in_pkg/.svproject | 16 + .../fuse_ctrl_core_axi_read_in_pkg/Makefile | 66 + .../fuse_ctrl_core_axi_read_in_pkg/compile.do | 14 + .../fuse_ctrl_core_axi_read_in.compile | 3 + .../fuse_ctrl_core_axi_read_in_bfm.vinfo | 6 + .../fuse_ctrl_core_axi_read_in_common.compile | 7 + .../fuse_ctrl_core_axi_read_in_filelist_hdl.f | 1 + .../fuse_ctrl_core_axi_read_in_filelist_hvl.f | 1 + ...fuse_ctrl_core_axi_read_in_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_read_in_hdl.compile | 9 + .../fuse_ctrl_core_axi_read_in_hvl.compile | 7 + .../fuse_ctrl_core_axi_read_in_pkg.sv | 91 + .../fuse_ctrl_core_axi_read_in_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_read_in_pkg_hdl.sv | 52 + .../fuse_ctrl_core_axi_read_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_read_in_pkg_sve.F | 10 + ...fuse_ctrl_core_axi_read_in2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_core_axi_read_in_agent.svh | 109 + ...se_ctrl_core_axi_read_in_configuration.svh | 241 +++ .../src/fuse_ctrl_core_axi_read_in_driver.svh | 141 ++ .../fuse_ctrl_core_axi_read_in_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_core_axi_read_in_if.sv | 124 ++ ...e_axi_read_in_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_core_axi_read_in_macros.svh | 207 ++ .../fuse_ctrl_core_axi_read_in_monitor.svh | 131 ++ .../fuse_ctrl_core_axi_read_in_monitor_bfm.sv | 232 +++ ..._ctrl_core_axi_read_in_random_sequence.svh | 91 + ...rl_core_axi_read_in_responder_sequence.svh | 87 + ...se_ctrl_core_axi_read_in_sequence_base.svh | 146 ++ ...fuse_ctrl_core_axi_read_in_transaction.svh | 243 +++ ..._core_axi_read_in_transaction_coverage.svh | 110 + .../fuse_ctrl_core_axi_read_in_typedefs.svh | 34 + ...use_ctrl_core_axi_read_in_typedefs_hdl.svh | 35 + .../fuse_ctrl_core_axi_read_in_interface.yaml | 121 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_read_out_if.compile | 3 + .../fuse_ctrl_core_axi_read_out_if_bfm.vinfo | 6 + ...e_ctrl_core_axi_read_out_if_common.compile | 7 + ...e_ctrl_core_axi_read_out_if_filelist_hdl.f | 1 + ...e_ctrl_core_axi_read_out_if_filelist_hvl.f | 1 + ..._ctrl_core_axi_read_out_if_filelist_xrtl.f | 3 + ...fuse_ctrl_core_axi_read_out_if_hdl.compile | 9 + ...fuse_ctrl_core_axi_read_out_if_hvl.compile | 7 + .../fuse_ctrl_core_axi_read_out_if_pkg.sv | 91 + .../fuse_ctrl_core_axi_read_out_if_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv | 52 + ...se_ctrl_core_axi_read_out_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_read_out_if_pkg_sve.F | 10 + ..._ctrl_core_axi_read_out_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_core_axi_read_out_if_agent.svh | 109 + ...trl_core_axi_read_out_if_configuration.svh | 241 +++ .../fuse_ctrl_core_axi_read_out_if_driver.svh | 141 ++ ...se_ctrl_core_axi_read_out_if_driver_bfm.sv | 352 ++++ .../src/fuse_ctrl_core_axi_read_out_if_if.sv | 109 + ...i_read_out_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_core_axi_read_out_if_macros.svh | 180 ++ ...fuse_ctrl_core_axi_read_out_if_monitor.svh | 131 ++ ...e_ctrl_core_axi_read_out_if_monitor_bfm.sv | 220 ++ ...l_core_axi_read_out_if_random_sequence.svh | 91 + ...ore_axi_read_out_if_responder_sequence.svh | 87 + ...trl_core_axi_read_out_if_sequence_base.svh | 146 ++ ..._ctrl_core_axi_read_out_if_transaction.svh | 240 +++ ...e_axi_read_out_if_transaction_coverage.svh | 107 + ...use_ctrl_core_axi_read_out_if_typedefs.svh | 34 + ...ctrl_core_axi_read_out_if_typedefs_hdl.svh | 35 + ...e_ctrl_core_axi_read_out_if_interface.yaml | 91 + .../fuse_ctrl_core_axi_read_out_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_core_axi_read_out_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_read_out.compile | 3 + .../fuse_ctrl_core_axi_read_out_bfm.vinfo | 6 + ...fuse_ctrl_core_axi_read_out_common.compile | 7 + ...fuse_ctrl_core_axi_read_out_filelist_hdl.f | 1 + ...fuse_ctrl_core_axi_read_out_filelist_hvl.f | 1 + ...use_ctrl_core_axi_read_out_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_read_out_hdl.compile | 9 + .../fuse_ctrl_core_axi_read_out_hvl.compile | 7 + .../fuse_ctrl_core_axi_read_out_pkg.sv | 91 + .../fuse_ctrl_core_axi_read_out_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_read_out_pkg_hdl.sv | 52 + .../fuse_ctrl_core_axi_read_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_read_out_pkg_sve.F | 10 + ...use_ctrl_core_axi_read_out2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_core_axi_read_out_agent.svh | 109 + ...e_ctrl_core_axi_read_out_configuration.svh | 241 +++ .../fuse_ctrl_core_axi_read_out_driver.svh | 141 ++ .../fuse_ctrl_core_axi_read_out_driver_bfm.sv | 352 ++++ .../src/fuse_ctrl_core_axi_read_out_if.sv | 109 + ..._axi_read_out_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_core_axi_read_out_macros.svh | 180 ++ .../fuse_ctrl_core_axi_read_out_monitor.svh | 131 ++ ...fuse_ctrl_core_axi_read_out_monitor_bfm.sv | 220 ++ ...ctrl_core_axi_read_out_random_sequence.svh | 91 + ...l_core_axi_read_out_responder_sequence.svh | 87 + ...e_ctrl_core_axi_read_out_sequence_base.svh | 146 ++ ...use_ctrl_core_axi_read_out_transaction.svh | 240 +++ ...core_axi_read_out_transaction_coverage.svh | 107 + .../fuse_ctrl_core_axi_read_out_typedefs.svh | 34 + ...se_ctrl_core_axi_read_out_typedefs_hdl.svh | 35 + ...fuse_ctrl_core_axi_read_out_interface.yaml | 91 + .../fuse_ctrl_core_axi_write_if_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_core_axi_write_if_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_write_if.compile | 3 + .../fuse_ctrl_core_axi_write_if_bfm.vinfo | 6 + ...fuse_ctrl_core_axi_write_if_common.compile | 7 + ...fuse_ctrl_core_axi_write_if_filelist_hdl.f | 1 + ...fuse_ctrl_core_axi_write_if_filelist_hvl.f | 1 + ...use_ctrl_core_axi_write_if_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_write_if_hdl.compile | 9 + .../fuse_ctrl_core_axi_write_if_hvl.compile | 7 + .../fuse_ctrl_core_axi_write_if_pkg.sv | 91 + .../fuse_ctrl_core_axi_write_if_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_write_if_pkg_hdl.sv | 52 + .../fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_write_if_pkg_sve.F | 10 + ...use_ctrl_core_axi_write_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_core_axi_write_if_agent.svh | 109 + ...e_ctrl_core_axi_write_if_configuration.svh | 241 +++ .../fuse_ctrl_core_axi_write_if_driver.svh | 141 ++ .../fuse_ctrl_core_axi_write_if_driver_bfm.sv | 429 ++++ .../src/fuse_ctrl_core_axi_write_if_if.sv | 144 ++ ..._axi_write_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_core_axi_write_if_macros.svh | 243 +++ .../fuse_ctrl_core_axi_write_if_monitor.svh | 131 ++ ...fuse_ctrl_core_axi_write_if_monitor_bfm.sv | 248 +++ ...ctrl_core_axi_write_if_random_sequence.svh | 91 + ...l_core_axi_write_if_responder_sequence.svh | 87 + ...e_ctrl_core_axi_write_if_sequence_base.svh | 146 ++ ...use_ctrl_core_axi_write_if_transaction.svh | 256 +++ ...core_axi_write_if_transaction_coverage.svh | 114 ++ .../fuse_ctrl_core_axi_write_if_typedefs.svh | 34 + ...se_ctrl_core_axi_write_if_typedefs_hdl.svh | 35 + ...fuse_ctrl_core_axi_write_if_interface.yaml | 161 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_write_in_if.compile | 3 + .../fuse_ctrl_core_axi_write_in_if_bfm.vinfo | 6 + ...e_ctrl_core_axi_write_in_if_common.compile | 7 + ...e_ctrl_core_axi_write_in_if_filelist_hdl.f | 1 + ...e_ctrl_core_axi_write_in_if_filelist_hvl.f | 1 + ..._ctrl_core_axi_write_in_if_filelist_xrtl.f | 3 + ...fuse_ctrl_core_axi_write_in_if_hdl.compile | 9 + ...fuse_ctrl_core_axi_write_in_if_hvl.compile | 7 + .../fuse_ctrl_core_axi_write_in_if_pkg.sv | 91 + .../fuse_ctrl_core_axi_write_in_if_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv | 52 + ...se_ctrl_core_axi_write_in_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_write_in_if_pkg_sve.F | 10 + ..._ctrl_core_axi_write_in_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_core_axi_write_in_if_agent.svh | 109 + ...trl_core_axi_write_in_if_configuration.svh | 241 +++ .../fuse_ctrl_core_axi_write_in_if_driver.svh | 141 ++ ...se_ctrl_core_axi_write_in_if_driver_bfm.sv | 429 ++++ .../src/fuse_ctrl_core_axi_write_in_if_if.sv | 144 ++ ...i_write_in_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_core_axi_write_in_if_macros.svh | 243 +++ ...fuse_ctrl_core_axi_write_in_if_monitor.svh | 131 ++ ...e_ctrl_core_axi_write_in_if_monitor_bfm.sv | 248 +++ ...l_core_axi_write_in_if_random_sequence.svh | 91 + ...ore_axi_write_in_if_responder_sequence.svh | 87 + ...trl_core_axi_write_in_if_sequence_base.svh | 146 ++ ..._ctrl_core_axi_write_in_if_transaction.svh | 256 +++ ...e_axi_write_in_if_transaction_coverage.svh | 114 ++ ...use_ctrl_core_axi_write_in_if_typedefs.svh | 34 + ...ctrl_core_axi_write_in_if_typedefs_hdl.svh | 35 + ...e_ctrl_core_axi_write_in_if_interface.yaml | 161 ++ .../fuse_ctrl_core_axi_write_in_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_core_axi_write_in_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_write_in.compile | 3 + .../fuse_ctrl_core_axi_write_in_bfm.vinfo | 6 + ...fuse_ctrl_core_axi_write_in_common.compile | 7 + ...fuse_ctrl_core_axi_write_in_filelist_hdl.f | 1 + ...fuse_ctrl_core_axi_write_in_filelist_hvl.f | 1 + ...use_ctrl_core_axi_write_in_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_write_in_hdl.compile | 9 + .../fuse_ctrl_core_axi_write_in_hvl.compile | 7 + .../fuse_ctrl_core_axi_write_in_pkg.sv | 91 + .../fuse_ctrl_core_axi_write_in_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_write_in_pkg_hdl.sv | 52 + .../fuse_ctrl_core_axi_write_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_write_in_pkg_sve.F | 10 + ...use_ctrl_core_axi_write_in2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_core_axi_write_in_agent.svh | 109 + ...e_ctrl_core_axi_write_in_configuration.svh | 241 +++ .../fuse_ctrl_core_axi_write_in_driver.svh | 141 ++ .../fuse_ctrl_core_axi_write_in_driver_bfm.sv | 429 ++++ .../src/fuse_ctrl_core_axi_write_in_if.sv | 144 ++ ..._axi_write_in_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_core_axi_write_in_macros.svh | 243 +++ .../fuse_ctrl_core_axi_write_in_monitor.svh | 131 ++ ...fuse_ctrl_core_axi_write_in_monitor_bfm.sv | 248 +++ ...ctrl_core_axi_write_in_random_sequence.svh | 91 + ...l_core_axi_write_in_responder_sequence.svh | 87 + ...e_ctrl_core_axi_write_in_sequence_base.svh | 146 ++ ...use_ctrl_core_axi_write_in_transaction.svh | 256 +++ ...core_axi_write_in_transaction_coverage.svh | 114 ++ .../fuse_ctrl_core_axi_write_in_typedefs.svh | 34 + ...se_ctrl_core_axi_write_in_typedefs_hdl.svh | 35 + ...fuse_ctrl_core_axi_write_in_interface.yaml | 161 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_write_out_if.compile | 3 + .../fuse_ctrl_core_axi_write_out_if_bfm.vinfo | 6 + ..._ctrl_core_axi_write_out_if_common.compile | 7 + ..._ctrl_core_axi_write_out_if_filelist_hdl.f | 1 + ..._ctrl_core_axi_write_out_if_filelist_hvl.f | 1 + ...ctrl_core_axi_write_out_if_filelist_xrtl.f | 3 + ...use_ctrl_core_axi_write_out_if_hdl.compile | 9 + ...use_ctrl_core_axi_write_out_if_hvl.compile | 7 + .../fuse_ctrl_core_axi_write_out_if_pkg.sv | 91 + .../fuse_ctrl_core_axi_write_out_if_pkg.vinfo | 4 + ...fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv | 52 + ...e_ctrl_core_axi_write_out_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_write_out_if_pkg_sve.F | 10 + ...ctrl_core_axi_write_out_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_core_axi_write_out_if_agent.svh | 109 + ...rl_core_axi_write_out_if_configuration.svh | 241 +++ ...fuse_ctrl_core_axi_write_out_if_driver.svh | 141 ++ ...e_ctrl_core_axi_write_out_if_driver_bfm.sv | 341 ++++ .../src/fuse_ctrl_core_axi_write_out_if_if.sv | 104 + ..._write_out_if_infact_coverage_strategy.csv | 6 + ...fuse_ctrl_core_axi_write_out_if_macros.svh | 171 ++ ...use_ctrl_core_axi_write_out_if_monitor.svh | 131 ++ ..._ctrl_core_axi_write_out_if_monitor_bfm.sv | 216 ++ ..._core_axi_write_out_if_random_sequence.svh | 91 + ...re_axi_write_out_if_responder_sequence.svh | 87 + ...rl_core_axi_write_out_if_sequence_base.svh | 146 ++ ...ctrl_core_axi_write_out_if_transaction.svh | 236 +++ ..._axi_write_out_if_transaction_coverage.svh | 106 + ...se_ctrl_core_axi_write_out_if_typedefs.svh | 34 + ...trl_core_axi_write_out_if_typedefs_hdl.svh | 35 + ..._ctrl_core_axi_write_out_if_interface.yaml | 81 + .../fuse_ctrl_core_axi_write_out_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_core_axi_write_out_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_write_out.compile | 3 + .../fuse_ctrl_core_axi_write_out_bfm.vinfo | 6 + ...use_ctrl_core_axi_write_out_common.compile | 7 + ...use_ctrl_core_axi_write_out_filelist_hdl.f | 1 + ...use_ctrl_core_axi_write_out_filelist_hvl.f | 1 + ...se_ctrl_core_axi_write_out_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_write_out_hdl.compile | 9 + .../fuse_ctrl_core_axi_write_out_hvl.compile | 7 + .../fuse_ctrl_core_axi_write_out_pkg.sv | 91 + .../fuse_ctrl_core_axi_write_out_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_write_out_pkg_hdl.sv | 52 + ...fuse_ctrl_core_axi_write_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_write_out_pkg_sve.F | 10 + ...se_ctrl_core_axi_write_out2reg_adapter.svh | 142 ++ .../fuse_ctrl_core_axi_write_out_agent.svh | 109 + ..._ctrl_core_axi_write_out_configuration.svh | 241 +++ .../fuse_ctrl_core_axi_write_out_driver.svh | 141 ++ ...fuse_ctrl_core_axi_write_out_driver_bfm.sv | 341 ++++ .../src/fuse_ctrl_core_axi_write_out_if.sv | 104 + ...axi_write_out_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_core_axi_write_out_macros.svh | 171 ++ .../fuse_ctrl_core_axi_write_out_monitor.svh | 131 ++ ...use_ctrl_core_axi_write_out_monitor_bfm.sv | 216 ++ ...trl_core_axi_write_out_random_sequence.svh | 91 + ..._core_axi_write_out_responder_sequence.svh | 87 + ..._ctrl_core_axi_write_out_sequence_base.svh | 146 ++ ...se_ctrl_core_axi_write_out_transaction.svh | 236 +++ ...ore_axi_write_out_transaction_coverage.svh | 106 + .../fuse_ctrl_core_axi_write_out_typedefs.svh | 34 + ...e_ctrl_core_axi_write_out_typedefs_hdl.svh | 35 + ...use_ctrl_core_axi_write_out_interface.yaml | 81 + .../fuse_ctrl_in_if_pkg/.project | 30 + .../fuse_ctrl_in_if_pkg/.svproject | 16 + .../fuse_ctrl_in_if_pkg/Makefile | 66 + .../fuse_ctrl_in_if_pkg/compile.do | 14 + .../fuse_ctrl_in_if.compile | 3 + .../fuse_ctrl_in_if_bfm.vinfo | 6 + .../fuse_ctrl_in_if_common.compile | 7 + .../fuse_ctrl_in_if_filelist_hdl.f | 1 + .../fuse_ctrl_in_if_filelist_hvl.f | 1 + .../fuse_ctrl_in_if_filelist_xrtl.f | 3 + .../fuse_ctrl_in_if_hdl.compile | 9 + .../fuse_ctrl_in_if_hvl.compile | 7 + .../fuse_ctrl_in_if_pkg.sv | 91 + .../fuse_ctrl_in_if_pkg.vinfo | 4 + .../fuse_ctrl_in_if_pkg_hdl.sv | 52 + .../fuse_ctrl_in_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_in_if_pkg_sve.F | 10 + .../src/fuse_ctrl_in_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_in_if_agent.svh | 109 + .../src/fuse_ctrl_in_if_configuration.svh | 241 +++ .../src/fuse_ctrl_in_if_driver.svh | 141 ++ .../src/fuse_ctrl_in_if_driver_bfm.sv | 346 ++++ .../src/fuse_ctrl_in_if_if.sv | 119 ++ ...se_ctrl_in_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_in_if_macros.svh | 135 ++ .../src/fuse_ctrl_in_if_monitor.svh | 131 ++ .../src/fuse_ctrl_in_if_monitor_bfm.sv | 221 ++ .../src/fuse_ctrl_in_if_random_sequence.svh | 91 + .../fuse_ctrl_in_if_responder_sequence.svh | 87 + .../src/fuse_ctrl_in_if_sequence_base.svh | 146 ++ .../src/fuse_ctrl_in_if_transaction.svh | 219 ++ .../fuse_ctrl_in_if_transaction_coverage.svh | 102 + .../src/fuse_ctrl_in_if_typedefs.svh | 34 + .../src/fuse_ctrl_in_if_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_in_if_interface.yaml | 68 + .../fuse_ctrl_in_pkg/.project | 30 + .../fuse_ctrl_in_pkg/.svproject | 16 + .../fuse_ctrl_in_pkg/Makefile | 66 + .../fuse_ctrl_in_pkg/compile.do | 14 + .../fuse_ctrl_in_pkg/fuse_ctrl_in.compile | 3 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo | 6 + .../fuse_ctrl_in_common.compile | 7 + .../fuse_ctrl_in_filelist_hdl.f | 1 + .../fuse_ctrl_in_filelist_hvl.f | 1 + .../fuse_ctrl_in_filelist_xrtl.f | 3 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile | 9 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile | 7 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv | 91 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo | 4 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv | 52 + .../fuse_ctrl_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F | 10 + .../src/fuse_ctrl_in2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_in_agent.svh | 109 + .../src/fuse_ctrl_in_configuration.svh | 241 +++ .../src/fuse_ctrl_in_driver.svh | 141 ++ .../src/fuse_ctrl_in_driver_bfm.sv | 342 ++++ .../fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv | 114 ++ .../fuse_ctrl_in_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_in_macros.svh | 135 ++ .../src/fuse_ctrl_in_monitor.svh | 131 ++ .../src/fuse_ctrl_in_monitor_bfm.sv | 218 ++ .../src/fuse_ctrl_in_random_sequence.svh | 91 + .../src/fuse_ctrl_in_responder_sequence.svh | 87 + .../src/fuse_ctrl_in_sequence_base.svh | 146 ++ .../src/fuse_ctrl_in_transaction.svh | 219 ++ .../src/fuse_ctrl_in_transaction_coverage.svh | 102 + .../src/fuse_ctrl_in_typedefs.svh | 34 + .../src/fuse_ctrl_in_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_in_interface.yaml | 64 + .../fuse_ctrl_lc_otp_if_pkg/.project | 30 + .../fuse_ctrl_lc_otp_if_pkg/.svproject | 16 + .../fuse_ctrl_lc_otp_if_pkg/Makefile | 66 + .../fuse_ctrl_lc_otp_if_pkg/compile.do | 14 + .../fuse_ctrl_lc_otp_if.compile | 3 + .../fuse_ctrl_lc_otp_if_bfm.vinfo | 6 + .../fuse_ctrl_lc_otp_if_common.compile | 7 + .../fuse_ctrl_lc_otp_if_filelist_hdl.f | 1 + .../fuse_ctrl_lc_otp_if_filelist_hvl.f | 1 + .../fuse_ctrl_lc_otp_if_filelist_xrtl.f | 3 + .../fuse_ctrl_lc_otp_if_hdl.compile | 9 + .../fuse_ctrl_lc_otp_if_hvl.compile | 7 + .../fuse_ctrl_lc_otp_if_pkg.sv | 91 + .../fuse_ctrl_lc_otp_if_pkg.vinfo | 4 + .../fuse_ctrl_lc_otp_if_pkg_hdl.sv | 52 + .../fuse_ctrl_lc_otp_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_lc_otp_if_pkg_sve.F | 10 + .../src/fuse_ctrl_lc_otp_if2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_lc_otp_if_agent.svh | 67 + .../src/fuse_ctrl_lc_otp_if_configuration.svh | 193 ++ .../src/fuse_ctrl_lc_otp_if_driver.svh | 105 + .../src/fuse_ctrl_lc_otp_if_driver_bfm.sv | 321 +++ .../src/fuse_ctrl_lc_otp_if_if.sv | 98 + ...trl_lc_otp_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_lc_otp_if_macros.svh | 153 ++ .../src/fuse_ctrl_lc_otp_if_monitor.svh | 101 + .../src/fuse_ctrl_lc_otp_if_monitor_bfm.sv | 202 ++ .../fuse_ctrl_lc_otp_if_random_sequence.svh | 67 + ...fuse_ctrl_lc_otp_if_responder_sequence.svh | 63 + .../src/fuse_ctrl_lc_otp_if_sequence_base.svh | 110 + .../src/fuse_ctrl_lc_otp_if_transaction.svh | 201 ++ ...se_ctrl_lc_otp_if_transaction_coverage.svh | 86 + .../src/fuse_ctrl_lc_otp_if_typedefs.svh | 34 + .../src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_lc_otp_if_interface.yaml | 57 + .../fuse_ctrl_lc_otp_in_if_pkg/.project | 30 + .../fuse_ctrl_lc_otp_in_if_pkg/.svproject | 16 + .../fuse_ctrl_lc_otp_in_if_pkg/Makefile | 66 + .../fuse_ctrl_lc_otp_in_if_pkg/compile.do | 14 + .../fuse_ctrl_lc_otp_in_if.compile | 3 + .../fuse_ctrl_lc_otp_in_if_bfm.vinfo | 6 + .../fuse_ctrl_lc_otp_in_if_common.compile | 7 + .../fuse_ctrl_lc_otp_in_if_filelist_hdl.f | 1 + .../fuse_ctrl_lc_otp_in_if_filelist_hvl.f | 1 + .../fuse_ctrl_lc_otp_in_if_filelist_xrtl.f | 3 + .../fuse_ctrl_lc_otp_in_if_hdl.compile | 9 + .../fuse_ctrl_lc_otp_in_if_hvl.compile | 7 + .../fuse_ctrl_lc_otp_in_if_pkg.sv | 91 + .../fuse_ctrl_lc_otp_in_if_pkg.vinfo | 4 + .../fuse_ctrl_lc_otp_in_if_pkg_hdl.sv | 52 + .../fuse_ctrl_lc_otp_in_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_lc_otp_in_if_pkg_sve.F | 10 + .../fuse_ctrl_lc_otp_in_if2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_lc_otp_in_if_agent.svh | 67 + .../fuse_ctrl_lc_otp_in_if_configuration.svh | 193 ++ .../src/fuse_ctrl_lc_otp_in_if_driver.svh | 105 + .../src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv | 321 +++ .../src/fuse_ctrl_lc_otp_in_if_if.sv | 98 + ..._lc_otp_in_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_lc_otp_in_if_macros.svh | 153 ++ .../src/fuse_ctrl_lc_otp_in_if_monitor.svh | 101 + .../src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv | 202 ++ ...fuse_ctrl_lc_otp_in_if_random_sequence.svh | 67 + ...e_ctrl_lc_otp_in_if_responder_sequence.svh | 63 + .../fuse_ctrl_lc_otp_in_if_sequence_base.svh | 110 + .../fuse_ctrl_lc_otp_in_if_transaction.svh | 201 ++ ...ctrl_lc_otp_in_if_transaction_coverage.svh | 86 + .../src/fuse_ctrl_lc_otp_in_if_typedefs.svh | 34 + .../fuse_ctrl_lc_otp_in_if_typedefs_hdl.svh | 35 + .../fuse_ctrl_lc_otp_in_if_interface.yaml | 57 + .../fuse_ctrl_lc_otp_in_pkg/.project | 30 + .../fuse_ctrl_lc_otp_in_pkg/.svproject | 16 + .../fuse_ctrl_lc_otp_in_pkg/Makefile | 66 + .../fuse_ctrl_lc_otp_in_pkg/compile.do | 14 + .../fuse_ctrl_lc_otp_in.compile | 3 + .../fuse_ctrl_lc_otp_in_bfm.vinfo | 6 + .../fuse_ctrl_lc_otp_in_common.compile | 7 + .../fuse_ctrl_lc_otp_in_filelist_hdl.f | 1 + .../fuse_ctrl_lc_otp_in_filelist_hvl.f | 1 + .../fuse_ctrl_lc_otp_in_filelist_xrtl.f | 3 + .../fuse_ctrl_lc_otp_in_hdl.compile | 9 + .../fuse_ctrl_lc_otp_in_hvl.compile | 7 + .../fuse_ctrl_lc_otp_in_pkg.sv | 91 + .../fuse_ctrl_lc_otp_in_pkg.vinfo | 4 + .../fuse_ctrl_lc_otp_in_pkg_hdl.sv | 52 + .../fuse_ctrl_lc_otp_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_lc_otp_in_pkg_sve.F | 10 + .../src/fuse_ctrl_lc_otp_in2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_lc_otp_in_agent.svh | 67 + .../src/fuse_ctrl_lc_otp_in_configuration.svh | 193 ++ .../src/fuse_ctrl_lc_otp_in_driver.svh | 105 + .../src/fuse_ctrl_lc_otp_in_driver_bfm.sv | 321 +++ .../src/fuse_ctrl_lc_otp_in_if.sv | 98 + ...trl_lc_otp_in_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_lc_otp_in_macros.svh | 153 ++ .../src/fuse_ctrl_lc_otp_in_monitor.svh | 101 + .../src/fuse_ctrl_lc_otp_in_monitor_bfm.sv | 202 ++ .../fuse_ctrl_lc_otp_in_random_sequence.svh | 67 + ...fuse_ctrl_lc_otp_in_responder_sequence.svh | 63 + .../src/fuse_ctrl_lc_otp_in_sequence_base.svh | 110 + .../src/fuse_ctrl_lc_otp_in_transaction.svh | 201 ++ ...se_ctrl_lc_otp_in_transaction_coverage.svh | 86 + .../src/fuse_ctrl_lc_otp_in_typedefs.svh | 34 + .../src/fuse_ctrl_lc_otp_in_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_lc_otp_in_interface.yaml | 57 + .../fuse_ctrl_lc_otp_out_if_pkg/.project | 30 + .../fuse_ctrl_lc_otp_out_if_pkg/.svproject | 16 + .../fuse_ctrl_lc_otp_out_if_pkg/Makefile | 66 + .../fuse_ctrl_lc_otp_out_if_pkg/compile.do | 14 + .../fuse_ctrl_lc_otp_out_if.compile | 3 + .../fuse_ctrl_lc_otp_out_if_bfm.vinfo | 6 + .../fuse_ctrl_lc_otp_out_if_common.compile | 7 + .../fuse_ctrl_lc_otp_out_if_filelist_hdl.f | 1 + .../fuse_ctrl_lc_otp_out_if_filelist_hvl.f | 1 + .../fuse_ctrl_lc_otp_out_if_filelist_xrtl.f | 3 + .../fuse_ctrl_lc_otp_out_if_hdl.compile | 9 + .../fuse_ctrl_lc_otp_out_if_hvl.compile | 7 + .../fuse_ctrl_lc_otp_out_if_pkg.sv | 91 + .../fuse_ctrl_lc_otp_out_if_pkg.vinfo | 4 + .../fuse_ctrl_lc_otp_out_if_pkg_hdl.sv | 52 + .../fuse_ctrl_lc_otp_out_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_lc_otp_out_if_pkg_sve.F | 10 + .../fuse_ctrl_lc_otp_out_if2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_lc_otp_out_if_agent.svh | 67 + .../fuse_ctrl_lc_otp_out_if_configuration.svh | 193 ++ .../src/fuse_ctrl_lc_otp_out_if_driver.svh | 105 + .../src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv | 299 +++ .../src/fuse_ctrl_lc_otp_out_if_if.sv | 88 + ...lc_otp_out_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_lc_otp_out_if_macros.svh | 135 ++ .../src/fuse_ctrl_lc_otp_out_if_monitor.svh | 101 + .../fuse_ctrl_lc_otp_out_if_monitor_bfm.sv | 194 ++ ...use_ctrl_lc_otp_out_if_random_sequence.svh | 67 + ..._ctrl_lc_otp_out_if_responder_sequence.svh | 63 + .../fuse_ctrl_lc_otp_out_if_sequence_base.svh | 110 + .../fuse_ctrl_lc_otp_out_if_transaction.svh | 196 ++ ...trl_lc_otp_out_if_transaction_coverage.svh | 84 + .../src/fuse_ctrl_lc_otp_out_if_typedefs.svh | 34 + .../fuse_ctrl_lc_otp_out_if_typedefs_hdl.svh | 35 + .../fuse_ctrl_lc_otp_out_if_interface.yaml | 37 + .../fuse_ctrl_lc_otp_out_pkg/.project | 30 + .../fuse_ctrl_lc_otp_out_pkg/.svproject | 16 + .../fuse_ctrl_lc_otp_out_pkg/Makefile | 66 + .../fuse_ctrl_lc_otp_out_pkg/compile.do | 14 + .../fuse_ctrl_lc_otp_out.compile | 3 + .../fuse_ctrl_lc_otp_out_bfm.vinfo | 6 + .../fuse_ctrl_lc_otp_out_common.compile | 7 + .../fuse_ctrl_lc_otp_out_filelist_hdl.f | 1 + .../fuse_ctrl_lc_otp_out_filelist_hvl.f | 1 + .../fuse_ctrl_lc_otp_out_filelist_xrtl.f | 3 + .../fuse_ctrl_lc_otp_out_hdl.compile | 9 + .../fuse_ctrl_lc_otp_out_hvl.compile | 7 + .../fuse_ctrl_lc_otp_out_pkg.sv | 91 + .../fuse_ctrl_lc_otp_out_pkg.vinfo | 4 + .../fuse_ctrl_lc_otp_out_pkg_hdl.sv | 52 + .../fuse_ctrl_lc_otp_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_lc_otp_out_pkg_sve.F | 10 + .../src/fuse_ctrl_lc_otp_out2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_lc_otp_out_agent.svh | 67 + .../fuse_ctrl_lc_otp_out_configuration.svh | 193 ++ .../src/fuse_ctrl_lc_otp_out_driver.svh | 105 + .../src/fuse_ctrl_lc_otp_out_driver_bfm.sv | 299 +++ .../src/fuse_ctrl_lc_otp_out_if.sv | 88 + ...rl_lc_otp_out_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_lc_otp_out_macros.svh | 135 ++ .../src/fuse_ctrl_lc_otp_out_monitor.svh | 101 + .../src/fuse_ctrl_lc_otp_out_monitor_bfm.sv | 194 ++ .../fuse_ctrl_lc_otp_out_random_sequence.svh | 67 + ...use_ctrl_lc_otp_out_responder_sequence.svh | 63 + .../fuse_ctrl_lc_otp_out_sequence_base.svh | 110 + .../src/fuse_ctrl_lc_otp_out_transaction.svh | 196 ++ ...e_ctrl_lc_otp_out_transaction_coverage.svh | 84 + .../src/fuse_ctrl_lc_otp_out_typedefs.svh | 34 + .../src/fuse_ctrl_lc_otp_out_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_lc_otp_out_interface.yaml | 37 + .../fuse_ctrl_out_if_pkg/.project | 30 + .../fuse_ctrl_out_if_pkg/.svproject | 16 + .../fuse_ctrl_out_if_pkg/Makefile | 66 + .../fuse_ctrl_out_if_pkg/compile.do | 14 + .../fuse_ctrl_out_if.compile | 3 + .../fuse_ctrl_out_if_bfm.vinfo | 6 + .../fuse_ctrl_out_if_common.compile | 7 + .../fuse_ctrl_out_if_filelist_hdl.f | 1 + .../fuse_ctrl_out_if_filelist_hvl.f | 1 + .../fuse_ctrl_out_if_filelist_xrtl.f | 3 + .../fuse_ctrl_out_if_hdl.compile | 9 + .../fuse_ctrl_out_if_hvl.compile | 7 + .../fuse_ctrl_out_if_pkg.sv | 91 + .../fuse_ctrl_out_if_pkg.vinfo | 4 + .../fuse_ctrl_out_if_pkg_hdl.sv | 52 + .../fuse_ctrl_out_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_out_if_pkg_sve.F | 10 + .../src/fuse_ctrl_out_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_out_if_agent.svh | 109 + .../src/fuse_ctrl_out_if_configuration.svh | 241 +++ .../src/fuse_ctrl_out_if_driver.svh | 141 ++ .../src/fuse_ctrl_out_if_driver_bfm.sv | 382 ++++ .../src/fuse_ctrl_out_if_if.sv | 134 ++ ...e_ctrl_out_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_out_if_macros.svh | 135 ++ .../src/fuse_ctrl_out_if_monitor.svh | 131 ++ .../src/fuse_ctrl_out_if_monitor_bfm.sv | 230 +++ .../src/fuse_ctrl_out_if_random_sequence.svh | 91 + .../fuse_ctrl_out_if_responder_sequence.svh | 87 + .../src/fuse_ctrl_out_if_sequence_base.svh | 146 ++ .../src/fuse_ctrl_out_if_transaction.svh | 223 +++ .../fuse_ctrl_out_if_transaction_coverage.svh | 103 + .../src/fuse_ctrl_out_if_typedefs.svh | 34 + .../src/fuse_ctrl_out_if_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_out_if_interface.yaml | 80 + .../fuse_ctrl_out_pkg/.project | 30 + .../fuse_ctrl_out_pkg/.svproject | 16 + .../fuse_ctrl_out_pkg/Makefile | 66 + .../fuse_ctrl_out_pkg/compile.do | 14 + .../fuse_ctrl_out_pkg/fuse_ctrl_out.compile | 3 + .../fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo | 6 + .../fuse_ctrl_out_common.compile | 7 + .../fuse_ctrl_out_filelist_hdl.f | 1 + .../fuse_ctrl_out_filelist_hvl.f | 1 + .../fuse_ctrl_out_filelist_xrtl.f | 3 + .../fuse_ctrl_out_hdl.compile | 9 + .../fuse_ctrl_out_hvl.compile | 7 + .../fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv | 91 + .../fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo | 4 + .../fuse_ctrl_out_pkg_hdl.sv | 52 + .../fuse_ctrl_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F | 10 + .../src/fuse_ctrl_out2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_out_agent.svh | 109 + .../src/fuse_ctrl_out_configuration.svh | 241 +++ .../src/fuse_ctrl_out_driver.svh | 141 ++ .../src/fuse_ctrl_out_driver_bfm.sv | 374 ++++ .../fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv | 124 ++ ...fuse_ctrl_out_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_out_macros.svh | 135 ++ .../src/fuse_ctrl_out_monitor.svh | 131 ++ .../src/fuse_ctrl_out_monitor_bfm.sv | 224 +++ .../src/fuse_ctrl_out_random_sequence.svh | 91 + .../src/fuse_ctrl_out_responder_sequence.svh | 87 + .../src/fuse_ctrl_out_sequence_base.svh | 146 ++ .../src/fuse_ctrl_out_transaction.svh | 223 +++ .../fuse_ctrl_out_transaction_coverage.svh | 103 + .../src/fuse_ctrl_out_typedefs.svh | 34 + .../src/fuse_ctrl_out_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_out_interface.yaml | 72 + .../fuse_ctrl_prim_axi_read_if_pkg/.project | 30 + .../fuse_ctrl_prim_axi_read_if_pkg/.svproject | 16 + .../fuse_ctrl_prim_axi_read_if_pkg/Makefile | 66 + .../fuse_ctrl_prim_axi_read_if_pkg/compile.do | 14 + .../fuse_ctrl_prim_axi_read_if.compile | 3 + .../fuse_ctrl_prim_axi_read_if_bfm.vinfo | 6 + .../fuse_ctrl_prim_axi_read_if_common.compile | 7 + .../fuse_ctrl_prim_axi_read_if_filelist_hdl.f | 1 + .../fuse_ctrl_prim_axi_read_if_filelist_hvl.f | 1 + ...fuse_ctrl_prim_axi_read_if_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_read_if_hdl.compile | 9 + .../fuse_ctrl_prim_axi_read_if_hvl.compile | 7 + .../fuse_ctrl_prim_axi_read_if_pkg.sv | 91 + .../fuse_ctrl_prim_axi_read_if_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_read_if_pkg_hdl.sv | 52 + .../fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_read_if_pkg_sve.F | 10 + ...fuse_ctrl_prim_axi_read_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_prim_axi_read_if_agent.svh | 109 + ...se_ctrl_prim_axi_read_if_configuration.svh | 241 +++ .../src/fuse_ctrl_prim_axi_read_if_driver.svh | 141 ++ .../fuse_ctrl_prim_axi_read_if_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_prim_axi_read_if_if.sv | 124 ++ ...m_axi_read_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_prim_axi_read_if_macros.svh | 207 ++ .../fuse_ctrl_prim_axi_read_if_monitor.svh | 131 ++ .../fuse_ctrl_prim_axi_read_if_monitor_bfm.sv | 232 +++ ..._ctrl_prim_axi_read_if_random_sequence.svh | 91 + ...rl_prim_axi_read_if_responder_sequence.svh | 87 + ...se_ctrl_prim_axi_read_if_sequence_base.svh | 146 ++ ...fuse_ctrl_prim_axi_read_if_transaction.svh | 243 +++ ..._prim_axi_read_if_transaction_coverage.svh | 110 + .../fuse_ctrl_prim_axi_read_if_typedefs.svh | 34 + ...use_ctrl_prim_axi_read_if_typedefs_hdl.svh | 35 + .../fuse_ctrl_prim_axi_read_if_interface.yaml | 121 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_read_in_if.compile | 3 + .../fuse_ctrl_prim_axi_read_in_if_bfm.vinfo | 6 + ...se_ctrl_prim_axi_read_in_if_common.compile | 7 + ...se_ctrl_prim_axi_read_in_if_filelist_hdl.f | 1 + ...se_ctrl_prim_axi_read_in_if_filelist_hvl.f | 1 + ...e_ctrl_prim_axi_read_in_if_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_read_in_if_hdl.compile | 9 + .../fuse_ctrl_prim_axi_read_in_if_hvl.compile | 7 + .../fuse_ctrl_prim_axi_read_in_if_pkg.sv | 91 + .../fuse_ctrl_prim_axi_read_in_if_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv | 52 + ...use_ctrl_prim_axi_read_in_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_read_in_if_pkg_sve.F | 10 + ...e_ctrl_prim_axi_read_in_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_prim_axi_read_in_if_agent.svh | 109 + ...ctrl_prim_axi_read_in_if_configuration.svh | 241 +++ .../fuse_ctrl_prim_axi_read_in_if_driver.svh | 141 ++ ...use_ctrl_prim_axi_read_in_if_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_prim_axi_read_in_if_if.sv | 124 ++ ...xi_read_in_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_prim_axi_read_in_if_macros.svh | 207 ++ .../fuse_ctrl_prim_axi_read_in_if_monitor.svh | 131 ++ ...se_ctrl_prim_axi_read_in_if_monitor_bfm.sv | 232 +++ ...rl_prim_axi_read_in_if_random_sequence.svh | 91 + ...prim_axi_read_in_if_responder_sequence.svh | 87 + ...ctrl_prim_axi_read_in_if_sequence_base.svh | 146 ++ ...e_ctrl_prim_axi_read_in_if_transaction.svh | 243 +++ ...im_axi_read_in_if_transaction_coverage.svh | 110 + ...fuse_ctrl_prim_axi_read_in_if_typedefs.svh | 34 + ..._ctrl_prim_axi_read_in_if_typedefs_hdl.svh | 35 + ...se_ctrl_prim_axi_read_in_if_interface.yaml | 121 ++ .../fuse_ctrl_prim_axi_read_in_pkg/.project | 30 + .../fuse_ctrl_prim_axi_read_in_pkg/.svproject | 16 + .../fuse_ctrl_prim_axi_read_in_pkg/Makefile | 66 + .../fuse_ctrl_prim_axi_read_in_pkg/compile.do | 14 + .../fuse_ctrl_prim_axi_read_in.compile | 3 + .../fuse_ctrl_prim_axi_read_in_bfm.vinfo | 6 + .../fuse_ctrl_prim_axi_read_in_common.compile | 7 + .../fuse_ctrl_prim_axi_read_in_filelist_hdl.f | 1 + .../fuse_ctrl_prim_axi_read_in_filelist_hvl.f | 1 + ...fuse_ctrl_prim_axi_read_in_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_read_in_hdl.compile | 9 + .../fuse_ctrl_prim_axi_read_in_hvl.compile | 7 + .../fuse_ctrl_prim_axi_read_in_pkg.sv | 91 + .../fuse_ctrl_prim_axi_read_in_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_read_in_pkg_hdl.sv | 52 + .../fuse_ctrl_prim_axi_read_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_read_in_pkg_sve.F | 10 + ...fuse_ctrl_prim_axi_read_in2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_prim_axi_read_in_agent.svh | 109 + ...se_ctrl_prim_axi_read_in_configuration.svh | 241 +++ .../src/fuse_ctrl_prim_axi_read_in_driver.svh | 141 ++ .../fuse_ctrl_prim_axi_read_in_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_prim_axi_read_in_if.sv | 124 ++ ...m_axi_read_in_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_prim_axi_read_in_macros.svh | 207 ++ .../fuse_ctrl_prim_axi_read_in_monitor.svh | 131 ++ .../fuse_ctrl_prim_axi_read_in_monitor_bfm.sv | 232 +++ ..._ctrl_prim_axi_read_in_random_sequence.svh | 91 + ...rl_prim_axi_read_in_responder_sequence.svh | 87 + ...se_ctrl_prim_axi_read_in_sequence_base.svh | 146 ++ ...fuse_ctrl_prim_axi_read_in_transaction.svh | 243 +++ ..._prim_axi_read_in_transaction_coverage.svh | 110 + .../fuse_ctrl_prim_axi_read_in_typedefs.svh | 34 + ...use_ctrl_prim_axi_read_in_typedefs_hdl.svh | 35 + .../fuse_ctrl_prim_axi_read_in_interface.yaml | 121 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_read_out_if.compile | 3 + .../fuse_ctrl_prim_axi_read_out_if_bfm.vinfo | 6 + ...e_ctrl_prim_axi_read_out_if_common.compile | 7 + ...e_ctrl_prim_axi_read_out_if_filelist_hdl.f | 1 + ...e_ctrl_prim_axi_read_out_if_filelist_hvl.f | 1 + ..._ctrl_prim_axi_read_out_if_filelist_xrtl.f | 3 + ...fuse_ctrl_prim_axi_read_out_if_hdl.compile | 9 + ...fuse_ctrl_prim_axi_read_out_if_hvl.compile | 7 + .../fuse_ctrl_prim_axi_read_out_if_pkg.sv | 91 + .../fuse_ctrl_prim_axi_read_out_if_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv | 52 + ...se_ctrl_prim_axi_read_out_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_read_out_if_pkg_sve.F | 10 + ..._ctrl_prim_axi_read_out_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_prim_axi_read_out_if_agent.svh | 109 + ...trl_prim_axi_read_out_if_configuration.svh | 241 +++ .../fuse_ctrl_prim_axi_read_out_if_driver.svh | 141 ++ ...se_ctrl_prim_axi_read_out_if_driver_bfm.sv | 352 ++++ .../src/fuse_ctrl_prim_axi_read_out_if_if.sv | 109 + ...i_read_out_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_prim_axi_read_out_if_macros.svh | 180 ++ ...fuse_ctrl_prim_axi_read_out_if_monitor.svh | 131 ++ ...e_ctrl_prim_axi_read_out_if_monitor_bfm.sv | 220 ++ ...l_prim_axi_read_out_if_random_sequence.svh | 91 + ...rim_axi_read_out_if_responder_sequence.svh | 87 + ...trl_prim_axi_read_out_if_sequence_base.svh | 146 ++ ..._ctrl_prim_axi_read_out_if_transaction.svh | 240 +++ ...m_axi_read_out_if_transaction_coverage.svh | 107 + ...use_ctrl_prim_axi_read_out_if_typedefs.svh | 34 + ...ctrl_prim_axi_read_out_if_typedefs_hdl.svh | 35 + ...e_ctrl_prim_axi_read_out_if_interface.yaml | 91 + .../fuse_ctrl_prim_axi_read_out_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_prim_axi_read_out_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_read_out.compile | 3 + .../fuse_ctrl_prim_axi_read_out_bfm.vinfo | 6 + ...fuse_ctrl_prim_axi_read_out_common.compile | 7 + ...fuse_ctrl_prim_axi_read_out_filelist_hdl.f | 1 + ...fuse_ctrl_prim_axi_read_out_filelist_hvl.f | 1 + ...use_ctrl_prim_axi_read_out_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_read_out_hdl.compile | 9 + .../fuse_ctrl_prim_axi_read_out_hvl.compile | 7 + .../fuse_ctrl_prim_axi_read_out_pkg.sv | 91 + .../fuse_ctrl_prim_axi_read_out_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_read_out_pkg_hdl.sv | 52 + .../fuse_ctrl_prim_axi_read_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_read_out_pkg_sve.F | 10 + ...use_ctrl_prim_axi_read_out2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_prim_axi_read_out_agent.svh | 109 + ...e_ctrl_prim_axi_read_out_configuration.svh | 241 +++ .../fuse_ctrl_prim_axi_read_out_driver.svh | 141 ++ .../fuse_ctrl_prim_axi_read_out_driver_bfm.sv | 352 ++++ .../src/fuse_ctrl_prim_axi_read_out_if.sv | 109 + ..._axi_read_out_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_prim_axi_read_out_macros.svh | 180 ++ .../fuse_ctrl_prim_axi_read_out_monitor.svh | 131 ++ ...fuse_ctrl_prim_axi_read_out_monitor_bfm.sv | 220 ++ ...ctrl_prim_axi_read_out_random_sequence.svh | 91 + ...l_prim_axi_read_out_responder_sequence.svh | 87 + ...e_ctrl_prim_axi_read_out_sequence_base.svh | 146 ++ ...use_ctrl_prim_axi_read_out_transaction.svh | 240 +++ ...prim_axi_read_out_transaction_coverage.svh | 107 + .../fuse_ctrl_prim_axi_read_out_typedefs.svh | 34 + ...se_ctrl_prim_axi_read_out_typedefs_hdl.svh | 35 + ...fuse_ctrl_prim_axi_read_out_interface.yaml | 91 + .../fuse_ctrl_prim_axi_write_if_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_prim_axi_write_if_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_write_if.compile | 3 + .../fuse_ctrl_prim_axi_write_if_bfm.vinfo | 6 + ...fuse_ctrl_prim_axi_write_if_common.compile | 7 + ...fuse_ctrl_prim_axi_write_if_filelist_hdl.f | 1 + ...fuse_ctrl_prim_axi_write_if_filelist_hvl.f | 1 + ...use_ctrl_prim_axi_write_if_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_write_if_hdl.compile | 9 + .../fuse_ctrl_prim_axi_write_if_hvl.compile | 7 + .../fuse_ctrl_prim_axi_write_if_pkg.sv | 91 + .../fuse_ctrl_prim_axi_write_if_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_write_if_pkg_hdl.sv | 52 + .../fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_write_if_pkg_sve.F | 10 + ...use_ctrl_prim_axi_write_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_prim_axi_write_if_agent.svh | 109 + ...e_ctrl_prim_axi_write_if_configuration.svh | 241 +++ .../fuse_ctrl_prim_axi_write_if_driver.svh | 141 ++ .../fuse_ctrl_prim_axi_write_if_driver_bfm.sv | 429 ++++ .../src/fuse_ctrl_prim_axi_write_if_if.sv | 144 ++ ..._axi_write_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_prim_axi_write_if_macros.svh | 243 +++ .../fuse_ctrl_prim_axi_write_if_monitor.svh | 131 ++ ...fuse_ctrl_prim_axi_write_if_monitor_bfm.sv | 248 +++ ...ctrl_prim_axi_write_if_random_sequence.svh | 91 + ...l_prim_axi_write_if_responder_sequence.svh | 87 + ...e_ctrl_prim_axi_write_if_sequence_base.svh | 146 ++ ...use_ctrl_prim_axi_write_if_transaction.svh | 256 +++ ...prim_axi_write_if_transaction_coverage.svh | 114 ++ .../fuse_ctrl_prim_axi_write_if_typedefs.svh | 34 + ...se_ctrl_prim_axi_write_if_typedefs_hdl.svh | 35 + ...fuse_ctrl_prim_axi_write_if_interface.yaml | 161 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_write_in_if.compile | 3 + .../fuse_ctrl_prim_axi_write_in_if_bfm.vinfo | 6 + ...e_ctrl_prim_axi_write_in_if_common.compile | 7 + ...e_ctrl_prim_axi_write_in_if_filelist_hdl.f | 1 + ...e_ctrl_prim_axi_write_in_if_filelist_hvl.f | 1 + ..._ctrl_prim_axi_write_in_if_filelist_xrtl.f | 3 + ...fuse_ctrl_prim_axi_write_in_if_hdl.compile | 9 + ...fuse_ctrl_prim_axi_write_in_if_hvl.compile | 7 + .../fuse_ctrl_prim_axi_write_in_if_pkg.sv | 91 + .../fuse_ctrl_prim_axi_write_in_if_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv | 52 + ...se_ctrl_prim_axi_write_in_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_write_in_if_pkg_sve.F | 10 + ..._ctrl_prim_axi_write_in_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_prim_axi_write_in_if_agent.svh | 109 + ...trl_prim_axi_write_in_if_configuration.svh | 241 +++ .../fuse_ctrl_prim_axi_write_in_if_driver.svh | 141 ++ ...se_ctrl_prim_axi_write_in_if_driver_bfm.sv | 429 ++++ .../src/fuse_ctrl_prim_axi_write_in_if_if.sv | 144 ++ ...i_write_in_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_prim_axi_write_in_if_macros.svh | 243 +++ ...fuse_ctrl_prim_axi_write_in_if_monitor.svh | 131 ++ ...e_ctrl_prim_axi_write_in_if_monitor_bfm.sv | 248 +++ ...l_prim_axi_write_in_if_random_sequence.svh | 91 + ...rim_axi_write_in_if_responder_sequence.svh | 87 + ...trl_prim_axi_write_in_if_sequence_base.svh | 146 ++ ..._ctrl_prim_axi_write_in_if_transaction.svh | 256 +++ ...m_axi_write_in_if_transaction_coverage.svh | 114 ++ ...use_ctrl_prim_axi_write_in_if_typedefs.svh | 34 + ...ctrl_prim_axi_write_in_if_typedefs_hdl.svh | 35 + ...e_ctrl_prim_axi_write_in_if_interface.yaml | 161 ++ .../fuse_ctrl_prim_axi_write_in_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_prim_axi_write_in_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_write_in.compile | 3 + .../fuse_ctrl_prim_axi_write_in_bfm.vinfo | 6 + ...fuse_ctrl_prim_axi_write_in_common.compile | 7 + ...fuse_ctrl_prim_axi_write_in_filelist_hdl.f | 1 + ...fuse_ctrl_prim_axi_write_in_filelist_hvl.f | 1 + ...use_ctrl_prim_axi_write_in_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_write_in_hdl.compile | 9 + .../fuse_ctrl_prim_axi_write_in_hvl.compile | 7 + .../fuse_ctrl_prim_axi_write_in_pkg.sv | 91 + .../fuse_ctrl_prim_axi_write_in_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_write_in_pkg_hdl.sv | 52 + .../fuse_ctrl_prim_axi_write_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_write_in_pkg_sve.F | 10 + ...use_ctrl_prim_axi_write_in2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_prim_axi_write_in_agent.svh | 109 + ...e_ctrl_prim_axi_write_in_configuration.svh | 241 +++ .../fuse_ctrl_prim_axi_write_in_driver.svh | 141 ++ .../fuse_ctrl_prim_axi_write_in_driver_bfm.sv | 429 ++++ .../src/fuse_ctrl_prim_axi_write_in_if.sv | 144 ++ ..._axi_write_in_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_prim_axi_write_in_macros.svh | 243 +++ .../fuse_ctrl_prim_axi_write_in_monitor.svh | 131 ++ ...fuse_ctrl_prim_axi_write_in_monitor_bfm.sv | 248 +++ ...ctrl_prim_axi_write_in_random_sequence.svh | 91 + ...l_prim_axi_write_in_responder_sequence.svh | 87 + ...e_ctrl_prim_axi_write_in_sequence_base.svh | 146 ++ ...use_ctrl_prim_axi_write_in_transaction.svh | 256 +++ ...prim_axi_write_in_transaction_coverage.svh | 114 ++ .../fuse_ctrl_prim_axi_write_in_typedefs.svh | 34 + ...se_ctrl_prim_axi_write_in_typedefs_hdl.svh | 35 + ...fuse_ctrl_prim_axi_write_in_interface.yaml | 161 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_write_out_if.compile | 3 + .../fuse_ctrl_prim_axi_write_out_if_bfm.vinfo | 6 + ..._ctrl_prim_axi_write_out_if_common.compile | 7 + ..._ctrl_prim_axi_write_out_if_filelist_hdl.f | 1 + ..._ctrl_prim_axi_write_out_if_filelist_hvl.f | 1 + ...ctrl_prim_axi_write_out_if_filelist_xrtl.f | 3 + ...use_ctrl_prim_axi_write_out_if_hdl.compile | 9 + ...use_ctrl_prim_axi_write_out_if_hvl.compile | 7 + .../fuse_ctrl_prim_axi_write_out_if_pkg.sv | 91 + .../fuse_ctrl_prim_axi_write_out_if_pkg.vinfo | 4 + ...fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv | 52 + ...e_ctrl_prim_axi_write_out_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_write_out_if_pkg_sve.F | 10 + ...ctrl_prim_axi_write_out_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_prim_axi_write_out_if_agent.svh | 109 + ...rl_prim_axi_write_out_if_configuration.svh | 241 +++ ...fuse_ctrl_prim_axi_write_out_if_driver.svh | 141 ++ ...e_ctrl_prim_axi_write_out_if_driver_bfm.sv | 341 ++++ .../src/fuse_ctrl_prim_axi_write_out_if_if.sv | 104 + ..._write_out_if_infact_coverage_strategy.csv | 6 + ...fuse_ctrl_prim_axi_write_out_if_macros.svh | 171 ++ ...use_ctrl_prim_axi_write_out_if_monitor.svh | 131 ++ ..._ctrl_prim_axi_write_out_if_monitor_bfm.sv | 216 ++ ..._prim_axi_write_out_if_random_sequence.svh | 91 + ...im_axi_write_out_if_responder_sequence.svh | 87 + ...rl_prim_axi_write_out_if_sequence_base.svh | 146 ++ ...ctrl_prim_axi_write_out_if_transaction.svh | 236 +++ ..._axi_write_out_if_transaction_coverage.svh | 106 + ...se_ctrl_prim_axi_write_out_if_typedefs.svh | 34 + ...trl_prim_axi_write_out_if_typedefs_hdl.svh | 35 + ..._ctrl_prim_axi_write_out_if_interface.yaml | 81 + .../fuse_ctrl_prim_axi_write_out_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_prim_axi_write_out_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_write_out.compile | 3 + .../fuse_ctrl_prim_axi_write_out_bfm.vinfo | 6 + ...use_ctrl_prim_axi_write_out_common.compile | 7 + ...use_ctrl_prim_axi_write_out_filelist_hdl.f | 1 + ...use_ctrl_prim_axi_write_out_filelist_hvl.f | 1 + ...se_ctrl_prim_axi_write_out_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_write_out_hdl.compile | 9 + .../fuse_ctrl_prim_axi_write_out_hvl.compile | 7 + .../fuse_ctrl_prim_axi_write_out_pkg.sv | 91 + .../fuse_ctrl_prim_axi_write_out_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_write_out_pkg_hdl.sv | 52 + ...fuse_ctrl_prim_axi_write_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_write_out_pkg_sve.F | 10 + ...se_ctrl_prim_axi_write_out2reg_adapter.svh | 142 ++ .../fuse_ctrl_prim_axi_write_out_agent.svh | 109 + ..._ctrl_prim_axi_write_out_configuration.svh | 241 +++ .../fuse_ctrl_prim_axi_write_out_driver.svh | 141 ++ ...fuse_ctrl_prim_axi_write_out_driver_bfm.sv | 341 ++++ .../src/fuse_ctrl_prim_axi_write_out_if.sv | 104 + ...axi_write_out_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_prim_axi_write_out_macros.svh | 171 ++ .../fuse_ctrl_prim_axi_write_out_monitor.svh | 131 ++ ...use_ctrl_prim_axi_write_out_monitor_bfm.sv | 216 ++ ...trl_prim_axi_write_out_random_sequence.svh | 91 + ..._prim_axi_write_out_responder_sequence.svh | 87 + ..._ctrl_prim_axi_write_out_sequence_base.svh | 146 ++ ...se_ctrl_prim_axi_write_out_transaction.svh | 236 +++ ...rim_axi_write_out_transaction_coverage.svh | 106 + .../fuse_ctrl_prim_axi_write_out_typedefs.svh | 34 + ...e_ctrl_prim_axi_write_out_typedefs_hdl.svh | 35 + ...use_ctrl_prim_axi_write_out_interface.yaml | 81 + .../fuse_ctrl_pwr_in_pkg/.project | 30 + .../fuse_ctrl_pwr_in_pkg/.svproject | 16 + .../fuse_ctrl_pwr_in_pkg/Makefile | 66 + .../fuse_ctrl_pwr_in_pkg/compile.do | 14 + .../fuse_ctrl_pwr_in.compile | 3 + .../fuse_ctrl_pwr_in_bfm.vinfo | 6 + .../fuse_ctrl_pwr_in_common.compile | 7 + .../fuse_ctrl_pwr_in_filelist_hdl.f | 1 + .../fuse_ctrl_pwr_in_filelist_hvl.f | 1 + .../fuse_ctrl_pwr_in_filelist_xrtl.f | 3 + .../fuse_ctrl_pwr_in_hdl.compile | 9 + .../fuse_ctrl_pwr_in_hvl.compile | 7 + .../fuse_ctrl_pwr_in_pkg.sv | 91 + .../fuse_ctrl_pwr_in_pkg.vinfo | 4 + .../fuse_ctrl_pwr_in_pkg_hdl.sv | 52 + .../fuse_ctrl_pwr_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_pwr_in_pkg_sve.F | 10 + .../src/fuse_ctrl_pwr_in2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_pwr_in_agent.svh | 67 + .../src/fuse_ctrl_pwr_in_configuration.svh | 193 ++ .../src/fuse_ctrl_pwr_in_driver.svh | 105 + .../src/fuse_ctrl_pwr_in_driver_bfm.sv | 294 +++ .../src/fuse_ctrl_pwr_in_if.sv | 83 + ...e_ctrl_pwr_in_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_pwr_in_macros.svh | 135 ++ .../src/fuse_ctrl_pwr_in_monitor.svh | 101 + .../src/fuse_ctrl_pwr_in_monitor_bfm.sv | 191 ++ .../src/fuse_ctrl_pwr_in_random_sequence.svh | 67 + .../fuse_ctrl_pwr_in_responder_sequence.svh | 63 + .../src/fuse_ctrl_pwr_in_sequence_base.svh | 110 + .../src/fuse_ctrl_pwr_in_transaction.svh | 195 ++ .../fuse_ctrl_pwr_in_transaction_coverage.svh | 84 + .../src/fuse_ctrl_pwr_in_typedefs.svh | 34 + .../src/fuse_ctrl_pwr_in_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_pwr_in_interface.yaml | 33 + .../fuse_ctrl_pwr_out_pkg/.project | 30 + .../fuse_ctrl_pwr_out_pkg/.svproject | 16 + .../fuse_ctrl_pwr_out_pkg/Makefile | 66 + .../fuse_ctrl_pwr_out_pkg/compile.do | 14 + .../fuse_ctrl_pwr_out.compile | 3 + .../fuse_ctrl_pwr_out_bfm.vinfo | 6 + .../fuse_ctrl_pwr_out_common.compile | 7 + .../fuse_ctrl_pwr_out_filelist_hdl.f | 1 + .../fuse_ctrl_pwr_out_filelist_hvl.f | 1 + .../fuse_ctrl_pwr_out_filelist_xrtl.f | 3 + .../fuse_ctrl_pwr_out_hdl.compile | 9 + .../fuse_ctrl_pwr_out_hvl.compile | 7 + .../fuse_ctrl_pwr_out_pkg.sv | 91 + .../fuse_ctrl_pwr_out_pkg.vinfo | 4 + .../fuse_ctrl_pwr_out_pkg_hdl.sv | 52 + .../fuse_ctrl_pwr_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_pwr_out_pkg_sve.F | 10 + .../src/fuse_ctrl_pwr_out2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_pwr_out_agent.svh | 67 + .../src/fuse_ctrl_pwr_out_configuration.svh | 193 ++ .../src/fuse_ctrl_pwr_out_driver.svh | 105 + .../src/fuse_ctrl_pwr_out_driver_bfm.sv | 294 +++ .../src/fuse_ctrl_pwr_out_if.sv | 83 + ..._ctrl_pwr_out_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_pwr_out_macros.svh | 135 ++ .../src/fuse_ctrl_pwr_out_monitor.svh | 101 + .../src/fuse_ctrl_pwr_out_monitor_bfm.sv | 191 ++ .../src/fuse_ctrl_pwr_out_random_sequence.svh | 67 + .../fuse_ctrl_pwr_out_responder_sequence.svh | 63 + .../src/fuse_ctrl_pwr_out_sequence_base.svh | 110 + .../src/fuse_ctrl_pwr_out_transaction.svh | 196 ++ ...fuse_ctrl_pwr_out_transaction_coverage.svh | 84 + .../src/fuse_ctrl_pwr_out_typedefs.svh | 34 + .../src/fuse_ctrl_pwr_out_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_pwr_out_interface.yaml | 33 + .../fuse_ctrl_rst_in_pkg/.project | 30 + .../fuse_ctrl_rst_in_pkg/.svproject | 16 + .../fuse_ctrl_rst_in_pkg/Makefile | 66 + .../fuse_ctrl_rst_in_pkg/compile.do | 14 + .../fuse_ctrl_rst_in.compile | 3 + .../fuse_ctrl_rst_in_bfm.vinfo | 6 + .../fuse_ctrl_rst_in_common.compile | 7 + .../fuse_ctrl_rst_in_filelist_hdl.f | 1 + .../fuse_ctrl_rst_in_filelist_hvl.f | 1 + .../fuse_ctrl_rst_in_filelist_xrtl.f | 3 + .../fuse_ctrl_rst_in_hdl.compile | 9 + .../fuse_ctrl_rst_in_hvl.compile | 7 + .../fuse_ctrl_rst_in_pkg.sv | 91 + .../fuse_ctrl_rst_in_pkg.vinfo | 4 + .../fuse_ctrl_rst_in_pkg_hdl.sv | 52 + .../fuse_ctrl_rst_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_rst_in_pkg_sve.F | 10 + .../src/fuse_ctrl_rst_in2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_rst_in_agent.svh | 67 + .../src/fuse_ctrl_rst_in_configuration.svh | 193 ++ .../src/fuse_ctrl_rst_in_driver.svh | 105 + .../src/fuse_ctrl_rst_in_driver_bfm.sv | 298 +++ .../src/fuse_ctrl_rst_in_if.sv | 83 + ...e_ctrl_rst_in_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_rst_in_macros.svh | 144 ++ .../src/fuse_ctrl_rst_in_monitor.svh | 101 + .../src/fuse_ctrl_rst_in_monitor_bfm.sv | 192 ++ .../src/fuse_ctrl_rst_in_random_sequence.svh | 67 + .../fuse_ctrl_rst_in_responder_sequence.svh | 63 + .../src/fuse_ctrl_rst_in_sequence_base.svh | 110 + .../src/fuse_ctrl_rst_in_transaction.svh | 198 ++ .../fuse_ctrl_rst_in_transaction_coverage.svh | 85 + .../src/fuse_ctrl_rst_in_typedefs.svh | 34 + .../src/fuse_ctrl_rst_in_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_rst_in_interface.yaml | 39 + .../fuse_ctrl_rst_out_pkg/.project | 30 + .../fuse_ctrl_rst_out_pkg/.svproject | 16 + .../fuse_ctrl_rst_out_pkg/Makefile | 66 + .../fuse_ctrl_rst_out_pkg/compile.do | 14 + .../fuse_ctrl_rst_out.compile | 3 + .../fuse_ctrl_rst_out_bfm.vinfo | 6 + .../fuse_ctrl_rst_out_common.compile | 7 + .../fuse_ctrl_rst_out_filelist_hdl.f | 1 + .../fuse_ctrl_rst_out_filelist_hvl.f | 1 + .../fuse_ctrl_rst_out_filelist_xrtl.f | 3 + .../fuse_ctrl_rst_out_hdl.compile | 9 + .../fuse_ctrl_rst_out_hvl.compile | 7 + .../fuse_ctrl_rst_out_pkg.sv | 91 + .../fuse_ctrl_rst_out_pkg.vinfo | 4 + .../fuse_ctrl_rst_out_pkg_hdl.sv | 52 + .../fuse_ctrl_rst_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_rst_out_pkg_sve.F | 10 + .../src/fuse_ctrl_rst_out2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_rst_out_agent.svh | 67 + .../src/fuse_ctrl_rst_out_configuration.svh | 193 ++ .../src/fuse_ctrl_rst_out_driver.svh | 105 + .../src/fuse_ctrl_rst_out_driver_bfm.sv | 294 +++ .../src/fuse_ctrl_rst_out_if.sv | 83 + ..._ctrl_rst_out_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_rst_out_macros.svh | 135 ++ .../src/fuse_ctrl_rst_out_monitor.svh | 101 + .../src/fuse_ctrl_rst_out_monitor_bfm.sv | 191 ++ .../src/fuse_ctrl_rst_out_random_sequence.svh | 67 + .../fuse_ctrl_rst_out_responder_sequence.svh | 63 + .../src/fuse_ctrl_rst_out_sequence_base.svh | 110 + .../src/fuse_ctrl_rst_out_transaction.svh | 196 ++ ...fuse_ctrl_rst_out_transaction_coverage.svh | 84 + .../src/fuse_ctrl_rst_out_typedefs.svh | 34 + .../src/fuse_ctrl_rst_out_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_rst_out_interface.yaml | 33 + .../fuse_ctrl_rst_pkg/.project | 30 + .../fuse_ctrl_rst_pkg/.svproject | 16 + .../fuse_ctrl_rst_pkg/Makefile | 66 + .../fuse_ctrl_rst_pkg/compile.do | 14 + .../fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile | 3 + .../fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo | 6 + .../fuse_ctrl_rst_common.compile | 7 + .../fuse_ctrl_rst_filelist_hdl.f | 1 + .../fuse_ctrl_rst_filelist_hvl.f | 1 + .../fuse_ctrl_rst_filelist_xrtl.f | 3 + .../fuse_ctrl_rst_hdl.compile | 9 + .../fuse_ctrl_rst_hvl.compile | 7 + .../fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv | 91 + .../fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo | 4 + .../fuse_ctrl_rst_pkg_hdl.sv | 52 + .../fuse_ctrl_rst_pkg_hdl.vinfo | 2 + .../fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F | 10 + .../src/fuse_ctrl_rst2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_rst_agent.svh | 67 + .../src/fuse_ctrl_rst_configuration.svh | 193 ++ .../src/fuse_ctrl_rst_driver.svh | 105 + .../src/fuse_ctrl_rst_driver_bfm.sv | 292 +++ .../fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv | 78 + ...fuse_ctrl_rst_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_rst_macros.svh | 135 ++ .../src/fuse_ctrl_rst_monitor.svh | 101 + .../src/fuse_ctrl_rst_monitor_bfm.sv | 188 ++ .../src/fuse_ctrl_rst_random_sequence.svh | 67 + .../src/fuse_ctrl_rst_responder_sequence.svh | 63 + .../src/fuse_ctrl_rst_sequence_base.svh | 110 + .../src/fuse_ctrl_rst_transaction.svh | 197 ++ .../fuse_ctrl_rst_transaction_coverage.svh | 85 + .../src/fuse_ctrl_rst_typedefs.svh | 34 + .../src/fuse_ctrl_rst_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_rst_interface.yaml | 29 + .../fuse_ctrl_secreg_axi_read_if_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_secreg_axi_read_if_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_secreg_axi_read_if.compile | 3 + .../fuse_ctrl_secreg_axi_read_if_bfm.vinfo | 6 + ...use_ctrl_secreg_axi_read_if_common.compile | 7 + ...use_ctrl_secreg_axi_read_if_filelist_hdl.f | 1 + ...use_ctrl_secreg_axi_read_if_filelist_hvl.f | 1 + ...se_ctrl_secreg_axi_read_if_filelist_xrtl.f | 3 + .../fuse_ctrl_secreg_axi_read_if_hdl.compile | 9 + .../fuse_ctrl_secreg_axi_read_if_hvl.compile | 7 + .../fuse_ctrl_secreg_axi_read_if_pkg.sv | 91 + .../fuse_ctrl_secreg_axi_read_if_pkg.vinfo | 4 + .../fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv | 52 + ...fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_secreg_axi_read_if_pkg_sve.F | 10 + ...se_ctrl_secreg_axi_read_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_secreg_axi_read_if_agent.svh | 109 + ..._ctrl_secreg_axi_read_if_configuration.svh | 241 +++ .../fuse_ctrl_secreg_axi_read_if_driver.svh | 141 ++ ...fuse_ctrl_secreg_axi_read_if_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_secreg_axi_read_if_if.sv | 124 ++ ...g_axi_read_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_secreg_axi_read_if_macros.svh | 207 ++ .../fuse_ctrl_secreg_axi_read_if_monitor.svh | 131 ++ ...use_ctrl_secreg_axi_read_if_monitor_bfm.sv | 232 +++ ...trl_secreg_axi_read_if_random_sequence.svh | 91 + ..._secreg_axi_read_if_responder_sequence.svh | 87 + ..._ctrl_secreg_axi_read_if_sequence_base.svh | 146 ++ ...se_ctrl_secreg_axi_read_if_transaction.svh | 243 +++ ...ecreg_axi_read_if_transaction_coverage.svh | 110 + .../fuse_ctrl_secreg_axi_read_if_typedefs.svh | 34 + ...e_ctrl_secreg_axi_read_if_typedefs_hdl.svh | 35 + ...use_ctrl_secreg_axi_read_if_interface.yaml | 121 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_secreg_axi_read_in_if.compile | 3 + .../fuse_ctrl_secreg_axi_read_in_if_bfm.vinfo | 6 + ..._ctrl_secreg_axi_read_in_if_common.compile | 7 + ..._ctrl_secreg_axi_read_in_if_filelist_hdl.f | 1 + ..._ctrl_secreg_axi_read_in_if_filelist_hvl.f | 1 + ...ctrl_secreg_axi_read_in_if_filelist_xrtl.f | 3 + ...use_ctrl_secreg_axi_read_in_if_hdl.compile | 9 + ...use_ctrl_secreg_axi_read_in_if_hvl.compile | 7 + .../fuse_ctrl_secreg_axi_read_in_if_pkg.sv | 91 + .../fuse_ctrl_secreg_axi_read_in_if_pkg.vinfo | 4 + ...fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv | 52 + ...e_ctrl_secreg_axi_read_in_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_secreg_axi_read_in_if_pkg_sve.F | 10 + ...ctrl_secreg_axi_read_in_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_secreg_axi_read_in_if_agent.svh | 109 + ...rl_secreg_axi_read_in_if_configuration.svh | 241 +++ ...fuse_ctrl_secreg_axi_read_in_if_driver.svh | 141 ++ ...e_ctrl_secreg_axi_read_in_if_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_secreg_axi_read_in_if_if.sv | 124 ++ ...xi_read_in_if_infact_coverage_strategy.csv | 6 + ...fuse_ctrl_secreg_axi_read_in_if_macros.svh | 207 ++ ...use_ctrl_secreg_axi_read_in_if_monitor.svh | 131 ++ ..._ctrl_secreg_axi_read_in_if_monitor_bfm.sv | 232 +++ ..._secreg_axi_read_in_if_random_sequence.svh | 91 + ...creg_axi_read_in_if_responder_sequence.svh | 87 + ...rl_secreg_axi_read_in_if_sequence_base.svh | 146 ++ ...ctrl_secreg_axi_read_in_if_transaction.svh | 243 +++ ...eg_axi_read_in_if_transaction_coverage.svh | 110 + ...se_ctrl_secreg_axi_read_in_if_typedefs.svh | 34 + ...trl_secreg_axi_read_in_if_typedefs_hdl.svh | 35 + ..._ctrl_secreg_axi_read_in_if_interface.yaml | 121 ++ .../fuse_ctrl_secreg_axi_read_in_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_secreg_axi_read_in_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_secreg_axi_read_in.compile | 3 + .../fuse_ctrl_secreg_axi_read_in_bfm.vinfo | 6 + ...use_ctrl_secreg_axi_read_in_common.compile | 7 + ...use_ctrl_secreg_axi_read_in_filelist_hdl.f | 1 + ...use_ctrl_secreg_axi_read_in_filelist_hvl.f | 1 + ...se_ctrl_secreg_axi_read_in_filelist_xrtl.f | 3 + .../fuse_ctrl_secreg_axi_read_in_hdl.compile | 9 + .../fuse_ctrl_secreg_axi_read_in_hvl.compile | 7 + .../fuse_ctrl_secreg_axi_read_in_pkg.sv | 91 + .../fuse_ctrl_secreg_axi_read_in_pkg.vinfo | 4 + .../fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv | 52 + ...fuse_ctrl_secreg_axi_read_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_secreg_axi_read_in_pkg_sve.F | 10 + ...se_ctrl_secreg_axi_read_in2reg_adapter.svh | 142 ++ .../fuse_ctrl_secreg_axi_read_in_agent.svh | 109 + ..._ctrl_secreg_axi_read_in_configuration.svh | 241 +++ .../fuse_ctrl_secreg_axi_read_in_driver.svh | 141 ++ ...fuse_ctrl_secreg_axi_read_in_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_secreg_axi_read_in_if.sv | 124 ++ ...g_axi_read_in_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_secreg_axi_read_in_macros.svh | 207 ++ .../fuse_ctrl_secreg_axi_read_in_monitor.svh | 131 ++ ...use_ctrl_secreg_axi_read_in_monitor_bfm.sv | 232 +++ ...trl_secreg_axi_read_in_random_sequence.svh | 91 + ..._secreg_axi_read_in_responder_sequence.svh | 87 + ..._ctrl_secreg_axi_read_in_sequence_base.svh | 146 ++ ...se_ctrl_secreg_axi_read_in_transaction.svh | 243 +++ ...ecreg_axi_read_in_transaction_coverage.svh | 110 + .../fuse_ctrl_secreg_axi_read_in_typedefs.svh | 34 + ...e_ctrl_secreg_axi_read_in_typedefs_hdl.svh | 35 + ...use_ctrl_secreg_axi_read_in_interface.yaml | 121 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_secreg_axi_read_out_if.compile | 3 + ...fuse_ctrl_secreg_axi_read_out_if_bfm.vinfo | 6 + ...ctrl_secreg_axi_read_out_if_common.compile | 7 + ...ctrl_secreg_axi_read_out_if_filelist_hdl.f | 1 + ...ctrl_secreg_axi_read_out_if_filelist_hvl.f | 1 + ...trl_secreg_axi_read_out_if_filelist_xrtl.f | 3 + ...se_ctrl_secreg_axi_read_out_if_hdl.compile | 9 + ...se_ctrl_secreg_axi_read_out_if_hvl.compile | 7 + .../fuse_ctrl_secreg_axi_read_out_if_pkg.sv | 91 + ...fuse_ctrl_secreg_axi_read_out_if_pkg.vinfo | 4 + ...use_ctrl_secreg_axi_read_out_if_pkg_hdl.sv | 52 + ..._ctrl_secreg_axi_read_out_if_pkg_hdl.vinfo | 2 + ...fuse_ctrl_secreg_axi_read_out_if_pkg_sve.F | 10 + ...trl_secreg_axi_read_out_if2reg_adapter.svh | 142 ++ ...fuse_ctrl_secreg_axi_read_out_if_agent.svh | 109 + ...l_secreg_axi_read_out_if_configuration.svh | 241 +++ ...use_ctrl_secreg_axi_read_out_if_driver.svh | 141 ++ ..._ctrl_secreg_axi_read_out_if_driver_bfm.sv | 352 ++++ .../fuse_ctrl_secreg_axi_read_out_if_if.sv | 109 + ...i_read_out_if_infact_coverage_strategy.csv | 6 + ...use_ctrl_secreg_axi_read_out_if_macros.svh | 180 ++ ...se_ctrl_secreg_axi_read_out_if_monitor.svh | 131 ++ ...ctrl_secreg_axi_read_out_if_monitor_bfm.sv | 220 ++ ...secreg_axi_read_out_if_random_sequence.svh | 91 + ...reg_axi_read_out_if_responder_sequence.svh | 87 + ...l_secreg_axi_read_out_if_sequence_base.svh | 146 ++ ...trl_secreg_axi_read_out_if_transaction.svh | 240 +++ ...g_axi_read_out_if_transaction_coverage.svh | 107 + ...e_ctrl_secreg_axi_read_out_if_typedefs.svh | 34 + ...rl_secreg_axi_read_out_if_typedefs_hdl.svh | 35 + ...ctrl_secreg_axi_read_out_if_interface.yaml | 91 + .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_secreg_axi_read_out.compile | 3 + .../fuse_ctrl_secreg_axi_read_out_bfm.vinfo | 6 + ...se_ctrl_secreg_axi_read_out_common.compile | 7 + ...se_ctrl_secreg_axi_read_out_filelist_hdl.f | 1 + ...se_ctrl_secreg_axi_read_out_filelist_hvl.f | 1 + ...e_ctrl_secreg_axi_read_out_filelist_xrtl.f | 3 + .../fuse_ctrl_secreg_axi_read_out_hdl.compile | 9 + .../fuse_ctrl_secreg_axi_read_out_hvl.compile | 7 + .../fuse_ctrl_secreg_axi_read_out_pkg.sv | 91 + .../fuse_ctrl_secreg_axi_read_out_pkg.vinfo | 4 + .../fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv | 52 + ...use_ctrl_secreg_axi_read_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_secreg_axi_read_out_pkg_sve.F | 10 + ...e_ctrl_secreg_axi_read_out2reg_adapter.svh | 142 ++ .../fuse_ctrl_secreg_axi_read_out_agent.svh | 109 + ...ctrl_secreg_axi_read_out_configuration.svh | 241 +++ .../fuse_ctrl_secreg_axi_read_out_driver.svh | 141 ++ ...use_ctrl_secreg_axi_read_out_driver_bfm.sv | 352 ++++ .../src/fuse_ctrl_secreg_axi_read_out_if.sv | 109 + ..._axi_read_out_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_secreg_axi_read_out_macros.svh | 180 ++ .../fuse_ctrl_secreg_axi_read_out_monitor.svh | 131 ++ ...se_ctrl_secreg_axi_read_out_monitor_bfm.sv | 220 ++ ...rl_secreg_axi_read_out_random_sequence.svh | 91 + ...secreg_axi_read_out_responder_sequence.svh | 87 + ...ctrl_secreg_axi_read_out_sequence_base.svh | 146 ++ ...e_ctrl_secreg_axi_read_out_transaction.svh | 240 +++ ...creg_axi_read_out_transaction_coverage.svh | 107 + ...fuse_ctrl_secreg_axi_read_out_typedefs.svh | 34 + ..._ctrl_secreg_axi_read_out_typedefs_hdl.svh | 35 + ...se_ctrl_secreg_axi_read_out_interface.yaml | 91 + .../prim_axi_read_if_pkg/.project | 30 + .../prim_axi_read_if_pkg/.svproject | 16 + .../prim_axi_read_if_pkg/Makefile | 66 + .../prim_axi_read_if_pkg/compile.do | 14 + .../prim_axi_read_if.compile | 3 + .../prim_axi_read_if_bfm.vinfo | 6 + .../prim_axi_read_if_common.compile | 7 + .../prim_axi_read_if_filelist_hdl.f | 1 + .../prim_axi_read_if_filelist_hvl.f | 1 + .../prim_axi_read_if_filelist_xrtl.f | 3 + .../prim_axi_read_if_hdl.compile | 9 + .../prim_axi_read_if_hvl.compile | 7 + .../prim_axi_read_if_pkg.sv | 91 + .../prim_axi_read_if_pkg.vinfo | 4 + .../prim_axi_read_if_pkg_hdl.sv | 52 + .../prim_axi_read_if_pkg_hdl.vinfo | 2 + .../prim_axi_read_if_pkg_sve.F | 10 + .../src/prim_axi_read_if2reg_adapter.svh | 142 ++ .../src/prim_axi_read_if_agent.svh | 109 + .../src/prim_axi_read_if_configuration.svh | 241 +++ .../src/prim_axi_read_if_driver.svh | 141 ++ .../src/prim_axi_read_if_driver_bfm.sv | 352 ++++ .../src/prim_axi_read_if_if.sv | 109 + ...m_axi_read_if_infact_coverage_strategy.csv | 6 + .../src/prim_axi_read_if_macros.svh | 180 ++ .../src/prim_axi_read_if_monitor.svh | 131 ++ .../src/prim_axi_read_if_monitor_bfm.sv | 220 ++ .../src/prim_axi_read_if_random_sequence.svh | 91 + .../prim_axi_read_if_responder_sequence.svh | 87 + .../src/prim_axi_read_if_sequence_base.svh | 146 ++ .../src/prim_axi_read_if_transaction.svh | 240 +++ .../prim_axi_read_if_transaction_coverage.svh | 107 + .../src/prim_axi_read_if_typedefs.svh | 34 + .../src/prim_axi_read_if_typedefs_hdl.svh | 35 + .../yaml/prim_axi_read_if_interface.yaml | 91 + .../prim_axi_read_out_if_pkg/.project | 30 + .../prim_axi_read_out_if_pkg/.svproject | 16 + .../prim_axi_read_out_if_pkg/Makefile | 66 + .../prim_axi_read_out_if_pkg/compile.do | 14 + .../prim_axi_read_out_if.compile | 3 + .../prim_axi_read_out_if_bfm.vinfo | 6 + .../prim_axi_read_out_if_common.compile | 7 + .../prim_axi_read_out_if_filelist_hdl.f | 1 + .../prim_axi_read_out_if_filelist_hvl.f | 1 + .../prim_axi_read_out_if_filelist_xrtl.f | 3 + .../prim_axi_read_out_if_hdl.compile | 9 + .../prim_axi_read_out_if_hvl.compile | 7 + .../prim_axi_read_out_if_pkg.sv | 91 + .../prim_axi_read_out_if_pkg.vinfo | 4 + .../prim_axi_read_out_if_pkg_hdl.sv | 52 + .../prim_axi_read_out_if_pkg_hdl.vinfo | 2 + .../prim_axi_read_out_if_pkg_sve.F | 10 + .../src/prim_axi_read_out_if2reg_adapter.svh | 142 ++ .../src/prim_axi_read_out_if_agent.svh | 109 + .../prim_axi_read_out_if_configuration.svh | 241 +++ .../src/prim_axi_read_out_if_driver.svh | 141 ++ .../src/prim_axi_read_out_if_driver_bfm.sv | 352 ++++ .../src/prim_axi_read_out_if_if.sv | 109 + ...i_read_out_if_infact_coverage_strategy.csv | 6 + .../src/prim_axi_read_out_if_macros.svh | 180 ++ .../src/prim_axi_read_out_if_monitor.svh | 131 ++ .../src/prim_axi_read_out_if_monitor_bfm.sv | 220 ++ .../prim_axi_read_out_if_random_sequence.svh | 91 + ...rim_axi_read_out_if_responder_sequence.svh | 87 + .../prim_axi_read_out_if_sequence_base.svh | 146 ++ .../src/prim_axi_read_out_if_transaction.svh | 240 +++ ...m_axi_read_out_if_transaction_coverage.svh | 107 + .../src/prim_axi_read_out_if_typedefs.svh | 34 + .../src/prim_axi_read_out_if_typedefs_hdl.svh | 35 + .../yaml/prim_axi_read_out_if_interface.yaml | 91 + .../prim_axi_write_if_pkg/.project | 30 + .../prim_axi_write_if_pkg/.svproject | 16 + .../prim_axi_write_if_pkg/Makefile | 66 + .../prim_axi_write_if_pkg/compile.do | 14 + .../prim_axi_write_if.compile | 3 + .../prim_axi_write_if_bfm.vinfo | 6 + .../prim_axi_write_if_common.compile | 7 + .../prim_axi_write_if_filelist_hdl.f | 1 + .../prim_axi_write_if_filelist_hvl.f | 1 + .../prim_axi_write_if_filelist_xrtl.f | 3 + .../prim_axi_write_if_hdl.compile | 9 + .../prim_axi_write_if_hvl.compile | 7 + .../prim_axi_write_if_pkg.sv | 91 + .../prim_axi_write_if_pkg.vinfo | 4 + .../prim_axi_write_if_pkg_hdl.sv | 52 + .../prim_axi_write_if_pkg_hdl.vinfo | 2 + .../prim_axi_write_if_pkg_sve.F | 10 + .../src/prim_axi_write_if2reg_adapter.svh | 142 ++ .../src/prim_axi_write_if_agent.svh | 109 + .../src/prim_axi_write_if_configuration.svh | 241 +++ .../src/prim_axi_write_if_driver.svh | 141 ++ .../src/prim_axi_write_if_driver_bfm.sv | 341 ++++ .../src/prim_axi_write_if_if.sv | 104 + ..._axi_write_if_infact_coverage_strategy.csv | 6 + .../src/prim_axi_write_if_macros.svh | 171 ++ .../src/prim_axi_write_if_monitor.svh | 131 ++ .../src/prim_axi_write_if_monitor_bfm.sv | 216 ++ .../src/prim_axi_write_if_random_sequence.svh | 91 + .../prim_axi_write_if_responder_sequence.svh | 87 + .../src/prim_axi_write_if_sequence_base.svh | 146 ++ .../src/prim_axi_write_if_transaction.svh | 236 +++ ...prim_axi_write_if_transaction_coverage.svh | 106 + .../src/prim_axi_write_if_typedefs.svh | 34 + .../src/prim_axi_write_if_typedefs_hdl.svh | 35 + .../yaml/prim_axi_write_if_interface.yaml | 81 + .../prim_axi_write_out_if_pkg/.project | 30 + .../prim_axi_write_out_if_pkg/.svproject | 16 + .../prim_axi_write_out_if_pkg/Makefile | 66 + .../prim_axi_write_out_if_pkg/compile.do | 14 + .../prim_axi_write_out_if.compile | 3 + .../prim_axi_write_out_if_bfm.vinfo | 6 + .../prim_axi_write_out_if_common.compile | 7 + .../prim_axi_write_out_if_filelist_hdl.f | 1 + .../prim_axi_write_out_if_filelist_hvl.f | 1 + .../prim_axi_write_out_if_filelist_xrtl.f | 3 + .../prim_axi_write_out_if_hdl.compile | 9 + .../prim_axi_write_out_if_hvl.compile | 7 + .../prim_axi_write_out_if_pkg.sv | 91 + .../prim_axi_write_out_if_pkg.vinfo | 4 + .../prim_axi_write_out_if_pkg_hdl.sv | 52 + .../prim_axi_write_out_if_pkg_hdl.vinfo | 2 + .../prim_axi_write_out_if_pkg_sve.F | 10 + .../src/prim_axi_write_out_if2reg_adapter.svh | 142 ++ .../src/prim_axi_write_out_if_agent.svh | 109 + .../prim_axi_write_out_if_configuration.svh | 241 +++ .../src/prim_axi_write_out_if_driver.svh | 141 ++ .../src/prim_axi_write_out_if_driver_bfm.sv | 341 ++++ .../src/prim_axi_write_out_if_if.sv | 104 + ..._write_out_if_infact_coverage_strategy.csv | 6 + .../src/prim_axi_write_out_if_macros.svh | 171 ++ .../src/prim_axi_write_out_if_monitor.svh | 131 ++ .../src/prim_axi_write_out_if_monitor_bfm.sv | 216 ++ .../prim_axi_write_out_if_random_sequence.svh | 91 + ...im_axi_write_out_if_responder_sequence.svh | 87 + .../prim_axi_write_out_if_sequence_base.svh | 146 ++ .../src/prim_axi_write_out_if_transaction.svh | 236 +++ ..._axi_write_out_if_transaction_coverage.svh | 106 + .../src/prim_axi_write_out_if_typedefs.svh | 34 + .../prim_axi_write_out_if_typedefs_hdl.svh | 35 + .../yaml/prim_axi_write_out_if_interface.yaml | 81 + .../secreg_axi_read_if_pkg/.project | 30 + .../secreg_axi_read_if_pkg/.svproject | 16 + .../secreg_axi_read_if_pkg/Makefile | 66 + .../secreg_axi_read_if_pkg/compile.do | 14 + .../secreg_axi_read_if.compile | 3 + .../secreg_axi_read_if_bfm.vinfo | 6 + .../secreg_axi_read_if_common.compile | 7 + .../secreg_axi_read_if_filelist_hdl.f | 1 + .../secreg_axi_read_if_filelist_hvl.f | 1 + .../secreg_axi_read_if_filelist_xrtl.f | 3 + .../secreg_axi_read_if_hdl.compile | 9 + .../secreg_axi_read_if_hvl.compile | 7 + .../secreg_axi_read_if_pkg.sv | 91 + .../secreg_axi_read_if_pkg.vinfo | 4 + .../secreg_axi_read_if_pkg_hdl.sv | 52 + .../secreg_axi_read_if_pkg_hdl.vinfo | 2 + .../secreg_axi_read_if_pkg_sve.F | 10 + .../src/secreg_axi_read_if2reg_adapter.svh | 142 ++ .../src/secreg_axi_read_if_agent.svh | 109 + .../src/secreg_axi_read_if_configuration.svh | 241 +++ .../src/secreg_axi_read_if_driver.svh | 141 ++ .../src/secreg_axi_read_if_driver_bfm.sv | 352 ++++ .../src/secreg_axi_read_if_if.sv | 109 + ...g_axi_read_if_infact_coverage_strategy.csv | 6 + .../src/secreg_axi_read_if_macros.svh | 180 ++ .../src/secreg_axi_read_if_monitor.svh | 131 ++ .../src/secreg_axi_read_if_monitor_bfm.sv | 220 ++ .../secreg_axi_read_if_random_sequence.svh | 91 + .../secreg_axi_read_if_responder_sequence.svh | 87 + .../src/secreg_axi_read_if_sequence_base.svh | 146 ++ .../src/secreg_axi_read_if_transaction.svh | 240 +++ ...ecreg_axi_read_if_transaction_coverage.svh | 107 + .../src/secreg_axi_read_if_typedefs.svh | 34 + .../src/secreg_axi_read_if_typedefs_hdl.svh | 35 + .../yaml/secreg_axi_read_if_interface.yaml | 91 + .../secreg_axi_read_out_if_pkg/.project | 30 + .../secreg_axi_read_out_if_pkg/.svproject | 16 + .../secreg_axi_read_out_if_pkg/Makefile | 66 + .../secreg_axi_read_out_if_pkg/compile.do | 14 + .../secreg_axi_read_out_if.compile | 3 + .../secreg_axi_read_out_if_bfm.vinfo | 6 + .../secreg_axi_read_out_if_common.compile | 7 + .../secreg_axi_read_out_if_filelist_hdl.f | 1 + .../secreg_axi_read_out_if_filelist_hvl.f | 1 + .../secreg_axi_read_out_if_filelist_xrtl.f | 3 + .../secreg_axi_read_out_if_hdl.compile | 9 + .../secreg_axi_read_out_if_hvl.compile | 7 + .../secreg_axi_read_out_if_pkg.sv | 91 + .../secreg_axi_read_out_if_pkg.vinfo | 4 + .../secreg_axi_read_out_if_pkg_hdl.sv | 52 + .../secreg_axi_read_out_if_pkg_hdl.vinfo | 2 + .../secreg_axi_read_out_if_pkg_sve.F | 10 + .../secreg_axi_read_out_if2reg_adapter.svh | 142 ++ .../src/secreg_axi_read_out_if_agent.svh | 109 + .../secreg_axi_read_out_if_configuration.svh | 241 +++ .../src/secreg_axi_read_out_if_driver.svh | 141 ++ .../src/secreg_axi_read_out_if_driver_bfm.sv | 352 ++++ .../src/secreg_axi_read_out_if_if.sv | 109 + ...i_read_out_if_infact_coverage_strategy.csv | 6 + .../src/secreg_axi_read_out_if_macros.svh | 180 ++ .../src/secreg_axi_read_out_if_monitor.svh | 131 ++ .../src/secreg_axi_read_out_if_monitor_bfm.sv | 220 ++ ...secreg_axi_read_out_if_random_sequence.svh | 91 + ...reg_axi_read_out_if_responder_sequence.svh | 87 + .../secreg_axi_read_out_if_sequence_base.svh | 146 ++ .../secreg_axi_read_out_if_transaction.svh | 240 +++ ...g_axi_read_out_if_transaction_coverage.svh | 107 + .../src/secreg_axi_read_out_if_typedefs.svh | 34 + .../secreg_axi_read_out_if_typedefs_hdl.svh | 35 + .../secreg_axi_read_out_if_interface.yaml | 91 + .../project_benches/fuse_ctrl/.project | 37 + .../project_benches/fuse_ctrl/.svproject | 16 + .../fuse_ctrl/docs/interfaces.csv | 33 + .../project_benches/fuse_ctrl/fuse_ctrl_sve.F | 33 + .../project_benches/fuse_ctrl/rtl/dut.compile | 6 + .../fuse_ctrl/rtl/verilog/verilog_dut.v | 21 + .../fuse_ctrl/rtl/verilog/verilog_dut.vinfo | 1 + .../fuse_ctrl/rtl/vhdl/vhdl_dut.vhd | 21 + .../project_benches/fuse_ctrl/sim/Makefile | 368 ++++ .../fuse_ctrl/sim/bcr_testlist | 19 + .../fuse_ctrl/sim/bcr_testlist.yaml | 44 + .../project_benches/fuse_ctrl/sim/compile.do | 243 +++ .../project_benches/fuse_ctrl/sim/hdl.compile | 5 + .../project_benches/fuse_ctrl/sim/hdl.vinfo | 1 + .../project_benches/fuse_ctrl/sim/hvl.compile | 2 + .../project_benches/fuse_ctrl/sim/hvl.vinfo | 1 + .../project_benches/fuse_ctrl/sim/run.do | 21 + .../project_benches/fuse_ctrl/sim/tbx.config | 10 + .../project_benches/fuse_ctrl/sim/testlist | 20 + .../fuse_ctrl/sim/testlist.yaml | 44 + .../project_benches/fuse_ctrl/sim/top.compile | 3 + .../fuse_ctrl/sim/veloce.config | 26 + .../project_benches/fuse_ctrl/sim/viswave.do | 52 + .../project_benches/fuse_ctrl/sim/wave.do | 45 + .../project_benches/fuse_ctrl/sim/xwaves.sigs | 17 + .../fuse_ctrl_parameters_pkg.compile | 4 + .../tb/parameters/fuse_ctrl_parameters_pkg.sv | 57 + .../parameters/fuse_ctrl_parameters_pkg.vinfo | 2 + .../sequences/fuse_ctrl_sequences_pkg.compile | 13 + .../tb/sequences/fuse_ctrl_sequences_pkg.sv | 75 + .../sequences/fuse_ctrl_sequences_pkg.vinfo | 12 + .../src/example_derived_test_sequence.svh | 44 + .../src/fuse_ctrl_bench_sequence_base.svh | 202 ++ .../sequences/src/register_test_sequence.svh | 76 + .../fuse_ctrl/tb/testbench/hdl_top.compile | 15 + .../fuse_ctrl/tb/testbench/hdl_top.sv | 218 ++ .../fuse_ctrl/tb/testbench/hdl_top.vinfo | 11 + .../fuse_ctrl/tb/testbench/hvl_top.compile | 7 + .../fuse_ctrl/tb/testbench/hvl_top.sv | 47 + .../fuse_ctrl/tb/testbench/hvl_top.vinfo | 2 + .../fuse_ctrl/tb/testbench/top_filelist_hdl.f | 3 + .../fuse_ctrl/tb/testbench/top_filelist_hvl.f | 3 + .../tb/tests/fuse_ctrl_tests_pkg.compile | 14 + .../fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.sv | 78 + .../tb/tests/fuse_ctrl_tests_pkg.vinfo | 13 + .../tb/tests/src/example_derived_test.svh | 57 + .../fuse_ctrl/tb/tests/src/register_test.svh | 54 + .../fuse_ctrl/tb/tests/src/test_top.svh | 102 + .../fuse_ctrl/yaml/fuse_ctrl_bench.yaml | 27 + .../fuse_ctrl_env_pkg/.project | 32 + .../fuse_ctrl_env_pkg/.svproject | 16 + .../fuse_ctrl_env_pkg/Makefile | 56 + .../fuse_ctrl_env_pkg/compile.do | 12 + .../fuse_ctrl_env_pkg.compile | 13 + .../fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv | 89 + .../fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo | 10 + .../fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F | 12 + .../src/fuse_ctrl_env_configuration.svh | 198 ++ .../src/fuse_ctrl_env_sequence_base.svh | 123 ++ .../src/fuse_ctrl_env_typedefs.svh | 34 + .../src/fuse_ctrl_environment.svh | 165 ++ .../src/fuse_ctrl_predictor.svh | 323 +++ .../src/fuse_ctrl_scoreboard.svh | 149 ++ .../yaml/fuse_ctrl_environment.yaml | 62 + ...se_ctrl_util_comp_fuse_ctrl_predictor.yaml | 23 + ...e_ctrl_util_comp_fuse_ctrl_scoreboard.yaml | 10 + .../core_axi_read_if_pkg/.project | 30 + .../core_axi_read_if_pkg/.svproject | 16 + .../core_axi_read_if_pkg/Makefile | 66 + .../core_axi_read_if_pkg/compile.do | 14 + .../core_axi_read_if.compile | 3 + .../core_axi_read_if_bfm.vinfo | 6 + .../core_axi_read_if_common.compile | 7 + .../core_axi_read_if_filelist_hdl.f | 1 + .../core_axi_read_if_filelist_hvl.f | 1 + .../core_axi_read_if_filelist_xrtl.f | 3 + .../core_axi_read_if_hdl.compile | 9 + .../core_axi_read_if_hvl.compile | 7 + .../core_axi_read_if_pkg.sv | 91 + .../core_axi_read_if_pkg.vinfo | 4 + .../core_axi_read_if_pkg_hdl.sv | 52 + .../core_axi_read_if_pkg_hdl.vinfo | 2 + .../core_axi_read_if_pkg_sve.F | 10 + .../src/core_axi_read_if2reg_adapter.svh | 142 ++ .../src/core_axi_read_if_agent.svh | 109 + .../src/core_axi_read_if_configuration.svh | 241 +++ .../src/core_axi_read_if_driver.svh | 141 ++ .../src/core_axi_read_if_driver_bfm.sv | 352 ++++ .../src/core_axi_read_if_if.sv | 109 + ...e_axi_read_if_infact_coverage_strategy.csv | 6 + .../src/core_axi_read_if_macros.svh | 180 ++ .../src/core_axi_read_if_monitor.svh | 131 ++ .../src/core_axi_read_if_monitor_bfm.sv | 220 ++ .../src/core_axi_read_if_random_sequence.svh | 91 + .../core_axi_read_if_responder_sequence.svh | 87 + .../src/core_axi_read_if_sequence_base.svh | 146 ++ .../src/core_axi_read_if_transaction.svh | 240 +++ .../core_axi_read_if_transaction_coverage.svh | 107 + .../src/core_axi_read_if_typedefs.svh | 34 + .../src/core_axi_read_if_typedefs_hdl.svh | 35 + .../yaml/core_axi_read_if_interface.yaml | 91 + .../core_axi_write_if_pkg/.project | 30 + .../core_axi_write_if_pkg/.svproject | 16 + .../core_axi_write_if_pkg/Makefile | 66 + .../core_axi_write_if_pkg/compile.do | 14 + .../core_axi_write_if.compile | 3 + .../core_axi_write_if_bfm.vinfo | 6 + .../core_axi_write_if_common.compile | 7 + .../core_axi_write_if_filelist_hdl.f | 1 + .../core_axi_write_if_filelist_hvl.f | 1 + .../core_axi_write_if_filelist_xrtl.f | 3 + .../core_axi_write_if_hdl.compile | 9 + .../core_axi_write_if_hvl.compile | 7 + .../core_axi_write_if_pkg.sv | 91 + .../core_axi_write_if_pkg.vinfo | 4 + .../core_axi_write_if_pkg_hdl.sv | 52 + .../core_axi_write_if_pkg_hdl.vinfo | 2 + .../core_axi_write_if_pkg_sve.F | 10 + .../src/core_axi_write_if2reg_adapter.svh | 142 ++ .../src/core_axi_write_if_agent.svh | 109 + .../src/core_axi_write_if_configuration.svh | 241 +++ .../src/core_axi_write_if_driver.svh | 141 ++ .../src/core_axi_write_if_driver_bfm.sv | 341 ++++ .../src/core_axi_write_if_if.sv | 104 + ..._axi_write_if_infact_coverage_strategy.csv | 6 + .../src/core_axi_write_if_macros.svh | 171 ++ .../src/core_axi_write_if_monitor.svh | 131 ++ .../src/core_axi_write_if_monitor_bfm.sv | 216 ++ .../src/core_axi_write_if_random_sequence.svh | 91 + .../core_axi_write_if_responder_sequence.svh | 87 + .../src/core_axi_write_if_sequence_base.svh | 146 ++ .../src/core_axi_write_if_transaction.svh | 236 +++ ...core_axi_write_if_transaction_coverage.svh | 106 + .../src/core_axi_write_if_typedefs.svh | 34 + .../src/core_axi_write_if_typedefs_hdl.svh | 35 + .../yaml/core_axi_write_if_interface.yaml | 81 + .../fuse_ctrl_core_axi_read_if_pkg/.project | 30 + .../fuse_ctrl_core_axi_read_if_pkg/.svproject | 16 + .../fuse_ctrl_core_axi_read_if_pkg/Makefile | 66 + .../fuse_ctrl_core_axi_read_if_pkg/compile.do | 14 + .../fuse_ctrl_core_axi_read_if.compile | 3 + .../fuse_ctrl_core_axi_read_if_bfm.vinfo | 6 + .../fuse_ctrl_core_axi_read_if_common.compile | 7 + .../fuse_ctrl_core_axi_read_if_filelist_hdl.f | 1 + .../fuse_ctrl_core_axi_read_if_filelist_hvl.f | 1 + ...fuse_ctrl_core_axi_read_if_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_read_if_hdl.compile | 9 + .../fuse_ctrl_core_axi_read_if_hvl.compile | 7 + .../fuse_ctrl_core_axi_read_if_pkg.sv | 91 + .../fuse_ctrl_core_axi_read_if_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_read_if_pkg_hdl.sv | 52 + .../fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_read_if_pkg_sve.F | 10 + ...fuse_ctrl_core_axi_read_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_core_axi_read_if_agent.svh | 109 + ...se_ctrl_core_axi_read_if_configuration.svh | 241 +++ .../src/fuse_ctrl_core_axi_read_if_driver.svh | 141 ++ .../fuse_ctrl_core_axi_read_if_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_core_axi_read_if_if.sv | 124 ++ ...e_axi_read_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_core_axi_read_if_macros.svh | 207 ++ .../fuse_ctrl_core_axi_read_if_monitor.svh | 131 ++ .../fuse_ctrl_core_axi_read_if_monitor_bfm.sv | 232 +++ ..._ctrl_core_axi_read_if_random_sequence.svh | 91 + ...rl_core_axi_read_if_responder_sequence.svh | 87 + ...se_ctrl_core_axi_read_if_sequence_base.svh | 146 ++ ...fuse_ctrl_core_axi_read_if_transaction.svh | 243 +++ ..._core_axi_read_if_transaction_coverage.svh | 110 + .../fuse_ctrl_core_axi_read_if_typedefs.svh | 34 + ...use_ctrl_core_axi_read_if_typedefs_hdl.svh | 35 + .../fuse_ctrl_core_axi_read_if_interface.yaml | 121 ++ .../fuse_ctrl_core_axi_write_if_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_core_axi_write_if_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_write_if.compile | 3 + .../fuse_ctrl_core_axi_write_if_bfm.vinfo | 6 + ...fuse_ctrl_core_axi_write_if_common.compile | 7 + ...fuse_ctrl_core_axi_write_if_filelist_hdl.f | 1 + ...fuse_ctrl_core_axi_write_if_filelist_hvl.f | 1 + ...use_ctrl_core_axi_write_if_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_write_if_hdl.compile | 9 + .../fuse_ctrl_core_axi_write_if_hvl.compile | 7 + .../fuse_ctrl_core_axi_write_if_pkg.sv | 91 + .../fuse_ctrl_core_axi_write_if_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_write_if_pkg_hdl.sv | 52 + .../fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_write_if_pkg_sve.F | 10 + ...use_ctrl_core_axi_write_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_core_axi_write_if_agent.svh | 109 + ...e_ctrl_core_axi_write_if_configuration.svh | 241 +++ .../fuse_ctrl_core_axi_write_if_driver.svh | 141 ++ .../fuse_ctrl_core_axi_write_if_driver_bfm.sv | 429 ++++ .../src/fuse_ctrl_core_axi_write_if_if.sv | 144 ++ ..._axi_write_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_core_axi_write_if_macros.svh | 243 +++ .../fuse_ctrl_core_axi_write_if_monitor.svh | 131 ++ ...fuse_ctrl_core_axi_write_if_monitor_bfm.sv | 248 +++ ...ctrl_core_axi_write_if_random_sequence.svh | 91 + ...l_core_axi_write_if_responder_sequence.svh | 87 + ...e_ctrl_core_axi_write_if_sequence_base.svh | 146 ++ ...use_ctrl_core_axi_write_if_transaction.svh | 256 +++ ...core_axi_write_if_transaction_coverage.svh | 114 ++ .../fuse_ctrl_core_axi_write_if_typedefs.svh | 34 + ...se_ctrl_core_axi_write_if_typedefs_hdl.svh | 35 + ...fuse_ctrl_core_axi_write_if_interface.yaml | 161 ++ .../fuse_ctrl_in_pkg/.project | 30 + .../fuse_ctrl_in_pkg/.svproject | 16 + .../fuse_ctrl_in_pkg/Makefile | 66 + .../fuse_ctrl_in_pkg/compile.do | 14 + .../fuse_ctrl_in_pkg/fuse_ctrl_in.compile | 3 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo | 6 + .../fuse_ctrl_in_common.compile | 7 + .../fuse_ctrl_in_filelist_hdl.f | 1 + .../fuse_ctrl_in_filelist_hvl.f | 1 + .../fuse_ctrl_in_filelist_xrtl.f | 3 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile | 9 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile | 7 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv | 91 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo | 4 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv | 52 + .../fuse_ctrl_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F | 10 + .../src/fuse_ctrl_in2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_in_agent.svh | 109 + .../src/fuse_ctrl_in_configuration.svh | 241 +++ .../src/fuse_ctrl_in_driver.svh | 141 ++ .../src/fuse_ctrl_in_driver_bfm.sv | 346 ++++ .../fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv | 119 ++ .../fuse_ctrl_in_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_in_macros.svh | 135 ++ .../src/fuse_ctrl_in_monitor.svh | 131 ++ .../src/fuse_ctrl_in_monitor_bfm.sv | 221 ++ .../src/fuse_ctrl_in_random_sequence.svh | 91 + .../src/fuse_ctrl_in_responder_sequence.svh | 87 + .../src/fuse_ctrl_in_sequence_base.svh | 146 ++ .../src/fuse_ctrl_in_transaction.svh | 219 ++ .../src/fuse_ctrl_in_transaction_coverage.svh | 102 + .../src/fuse_ctrl_in_typedefs.svh | 34 + .../src/fuse_ctrl_in_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_in_interface.yaml | 68 + .../fuse_ctrl_lc_otp_if_pkg/.project | 30 + .../fuse_ctrl_lc_otp_if_pkg/.svproject | 16 + .../fuse_ctrl_lc_otp_if_pkg/Makefile | 66 + .../fuse_ctrl_lc_otp_if_pkg/compile.do | 14 + .../fuse_ctrl_lc_otp_if.compile | 3 + .../fuse_ctrl_lc_otp_if_bfm.vinfo | 6 + .../fuse_ctrl_lc_otp_if_common.compile | 7 + .../fuse_ctrl_lc_otp_if_filelist_hdl.f | 1 + .../fuse_ctrl_lc_otp_if_filelist_hvl.f | 1 + .../fuse_ctrl_lc_otp_if_filelist_xrtl.f | 3 + .../fuse_ctrl_lc_otp_if_hdl.compile | 9 + .../fuse_ctrl_lc_otp_if_hvl.compile | 7 + .../fuse_ctrl_lc_otp_if_pkg.sv | 91 + .../fuse_ctrl_lc_otp_if_pkg.vinfo | 4 + .../fuse_ctrl_lc_otp_if_pkg_hdl.sv | 52 + .../fuse_ctrl_lc_otp_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_lc_otp_if_pkg_sve.F | 10 + .../src/fuse_ctrl_lc_otp_if2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_lc_otp_if_agent.svh | 67 + .../src/fuse_ctrl_lc_otp_if_configuration.svh | 193 ++ .../src/fuse_ctrl_lc_otp_if_driver.svh | 105 + .../src/fuse_ctrl_lc_otp_if_driver_bfm.sv | 321 +++ .../src/fuse_ctrl_lc_otp_if_if.sv | 98 + ...trl_lc_otp_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_lc_otp_if_macros.svh | 153 ++ .../src/fuse_ctrl_lc_otp_if_monitor.svh | 101 + .../src/fuse_ctrl_lc_otp_if_monitor_bfm.sv | 202 ++ .../fuse_ctrl_lc_otp_if_random_sequence.svh | 67 + ...fuse_ctrl_lc_otp_if_responder_sequence.svh | 63 + .../src/fuse_ctrl_lc_otp_if_sequence_base.svh | 110 + .../src/fuse_ctrl_lc_otp_if_transaction.svh | 201 ++ ...se_ctrl_lc_otp_if_transaction_coverage.svh | 86 + .../src/fuse_ctrl_lc_otp_if_typedefs.svh | 34 + .../src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_lc_otp_if_interface.yaml | 57 + .../fuse_ctrl_out_pkg/.project | 30 + .../fuse_ctrl_out_pkg/.svproject | 16 + .../fuse_ctrl_out_pkg/Makefile | 66 + .../fuse_ctrl_out_pkg/compile.do | 14 + .../fuse_ctrl_out_pkg/fuse_ctrl_out.compile | 3 + .../fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo | 6 + .../fuse_ctrl_out_common.compile | 7 + .../fuse_ctrl_out_filelist_hdl.f | 1 + .../fuse_ctrl_out_filelist_hvl.f | 1 + .../fuse_ctrl_out_filelist_xrtl.f | 3 + .../fuse_ctrl_out_hdl.compile | 9 + .../fuse_ctrl_out_hvl.compile | 7 + .../fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv | 91 + .../fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo | 4 + .../fuse_ctrl_out_pkg_hdl.sv | 52 + .../fuse_ctrl_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F | 10 + .../src/fuse_ctrl_out2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_out_agent.svh | 109 + .../src/fuse_ctrl_out_configuration.svh | 241 +++ .../src/fuse_ctrl_out_driver.svh | 141 ++ .../src/fuse_ctrl_out_driver_bfm.sv | 394 ++++ .../fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv | 149 ++ ...fuse_ctrl_out_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_out_macros.svh | 144 ++ .../src/fuse_ctrl_out_monitor.svh | 131 ++ .../src/fuse_ctrl_out_monitor_bfm.sv | 240 +++ .../src/fuse_ctrl_out_random_sequence.svh | 91 + .../src/fuse_ctrl_out_responder_sequence.svh | 87 + .../src/fuse_ctrl_out_sequence_base.svh | 146 ++ .../src/fuse_ctrl_out_transaction.svh | 224 +++ .../fuse_ctrl_out_transaction_coverage.svh | 103 + .../src/fuse_ctrl_out_typedefs.svh | 34 + .../src/fuse_ctrl_out_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_out_interface.yaml | 98 + .../fuse_ctrl_prim_axi_read_if_pkg/.project | 30 + .../fuse_ctrl_prim_axi_read_if_pkg/.svproject | 16 + .../fuse_ctrl_prim_axi_read_if_pkg/Makefile | 66 + .../fuse_ctrl_prim_axi_read_if_pkg/compile.do | 14 + .../fuse_ctrl_prim_axi_read_if.compile | 3 + .../fuse_ctrl_prim_axi_read_if_bfm.vinfo | 6 + .../fuse_ctrl_prim_axi_read_if_common.compile | 7 + .../fuse_ctrl_prim_axi_read_if_filelist_hdl.f | 1 + .../fuse_ctrl_prim_axi_read_if_filelist_hvl.f | 1 + ...fuse_ctrl_prim_axi_read_if_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_read_if_hdl.compile | 9 + .../fuse_ctrl_prim_axi_read_if_hvl.compile | 7 + .../fuse_ctrl_prim_axi_read_if_pkg.sv | 91 + .../fuse_ctrl_prim_axi_read_if_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_read_if_pkg_hdl.sv | 52 + .../fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_read_if_pkg_sve.F | 10 + ...fuse_ctrl_prim_axi_read_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_prim_axi_read_if_agent.svh | 109 + ...se_ctrl_prim_axi_read_if_configuration.svh | 241 +++ .../src/fuse_ctrl_prim_axi_read_if_driver.svh | 141 ++ .../fuse_ctrl_prim_axi_read_if_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_prim_axi_read_if_if.sv | 124 ++ ...m_axi_read_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_prim_axi_read_if_macros.svh | 207 ++ .../fuse_ctrl_prim_axi_read_if_monitor.svh | 131 ++ .../fuse_ctrl_prim_axi_read_if_monitor_bfm.sv | 232 +++ ..._ctrl_prim_axi_read_if_random_sequence.svh | 91 + ...rl_prim_axi_read_if_responder_sequence.svh | 87 + ...se_ctrl_prim_axi_read_if_sequence_base.svh | 146 ++ ...fuse_ctrl_prim_axi_read_if_transaction.svh | 243 +++ ..._prim_axi_read_if_transaction_coverage.svh | 110 + .../fuse_ctrl_prim_axi_read_if_typedefs.svh | 34 + ...use_ctrl_prim_axi_read_if_typedefs_hdl.svh | 35 + .../fuse_ctrl_prim_axi_read_if_interface.yaml | 121 ++ .../fuse_ctrl_prim_axi_write_if_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_prim_axi_write_if_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_write_if.compile | 3 + .../fuse_ctrl_prim_axi_write_if_bfm.vinfo | 6 + ...fuse_ctrl_prim_axi_write_if_common.compile | 7 + ...fuse_ctrl_prim_axi_write_if_filelist_hdl.f | 1 + ...fuse_ctrl_prim_axi_write_if_filelist_hvl.f | 1 + ...use_ctrl_prim_axi_write_if_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_write_if_hdl.compile | 9 + .../fuse_ctrl_prim_axi_write_if_hvl.compile | 7 + .../fuse_ctrl_prim_axi_write_if_pkg.sv | 91 + .../fuse_ctrl_prim_axi_write_if_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_write_if_pkg_hdl.sv | 52 + .../fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_write_if_pkg_sve.F | 10 + ...use_ctrl_prim_axi_write_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_prim_axi_write_if_agent.svh | 109 + ...e_ctrl_prim_axi_write_if_configuration.svh | 241 +++ .../fuse_ctrl_prim_axi_write_if_driver.svh | 141 ++ .../fuse_ctrl_prim_axi_write_if_driver_bfm.sv | 429 ++++ .../src/fuse_ctrl_prim_axi_write_if_if.sv | 144 ++ ..._axi_write_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_prim_axi_write_if_macros.svh | 243 +++ .../fuse_ctrl_prim_axi_write_if_monitor.svh | 131 ++ ...fuse_ctrl_prim_axi_write_if_monitor_bfm.sv | 248 +++ ...ctrl_prim_axi_write_if_random_sequence.svh | 91 + ...l_prim_axi_write_if_responder_sequence.svh | 87 + ...e_ctrl_prim_axi_write_if_sequence_base.svh | 146 ++ ...use_ctrl_prim_axi_write_if_transaction.svh | 256 +++ ...prim_axi_write_if_transaction_coverage.svh | 114 ++ .../fuse_ctrl_prim_axi_write_if_typedefs.svh | 34 + ...se_ctrl_prim_axi_write_if_typedefs_hdl.svh | 35 + ...fuse_ctrl_prim_axi_write_if_interface.yaml | 161 ++ .../fuse_ctrl_rst_pkg/.project | 30 + .../fuse_ctrl_rst_pkg/.svproject | 16 + .../fuse_ctrl_rst_pkg/Makefile | 66 + .../fuse_ctrl_rst_pkg/compile.do | 14 + .../fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile | 3 + .../fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo | 6 + .../fuse_ctrl_rst_common.compile | 7 + .../fuse_ctrl_rst_filelist_hdl.f | 1 + .../fuse_ctrl_rst_filelist_hvl.f | 1 + .../fuse_ctrl_rst_filelist_xrtl.f | 3 + .../fuse_ctrl_rst_hdl.compile | 9 + .../fuse_ctrl_rst_hvl.compile | 7 + .../fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv | 91 + .../fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo | 4 + .../fuse_ctrl_rst_pkg_hdl.sv | 52 + .../fuse_ctrl_rst_pkg_hdl.vinfo | 2 + .../fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F | 10 + .../src/fuse_ctrl_rst2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_rst_agent.svh | 67 + .../src/fuse_ctrl_rst_configuration.svh | 193 ++ .../src/fuse_ctrl_rst_driver.svh | 105 + .../src/fuse_ctrl_rst_driver_bfm.sv | 296 +++ .../fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv | 83 + ...fuse_ctrl_rst_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_rst_macros.svh | 144 ++ .../src/fuse_ctrl_rst_monitor.svh | 101 + .../src/fuse_ctrl_rst_monitor_bfm.sv | 192 ++ .../src/fuse_ctrl_rst_random_sequence.svh | 67 + .../src/fuse_ctrl_rst_responder_sequence.svh | 63 + .../src/fuse_ctrl_rst_sequence_base.svh | 110 + .../src/fuse_ctrl_rst_transaction.svh | 198 ++ .../fuse_ctrl_rst_transaction_coverage.svh | 85 + .../src/fuse_ctrl_rst_typedefs.svh | 34 + .../src/fuse_ctrl_rst_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_rst_interface.yaml | 39 + .../fuse_ctrl_secreg_axi_read_if_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_secreg_axi_read_if_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_secreg_axi_read_if.compile | 3 + .../fuse_ctrl_secreg_axi_read_if_bfm.vinfo | 6 + ...use_ctrl_secreg_axi_read_if_common.compile | 7 + ...use_ctrl_secreg_axi_read_if_filelist_hdl.f | 1 + ...use_ctrl_secreg_axi_read_if_filelist_hvl.f | 1 + ...se_ctrl_secreg_axi_read_if_filelist_xrtl.f | 3 + .../fuse_ctrl_secreg_axi_read_if_hdl.compile | 9 + .../fuse_ctrl_secreg_axi_read_if_hvl.compile | 7 + .../fuse_ctrl_secreg_axi_read_if_pkg.sv | 91 + .../fuse_ctrl_secreg_axi_read_if_pkg.vinfo | 4 + .../fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv | 52 + ...fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_secreg_axi_read_if_pkg_sve.F | 10 + ...se_ctrl_secreg_axi_read_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_secreg_axi_read_if_agent.svh | 109 + ..._ctrl_secreg_axi_read_if_configuration.svh | 241 +++ .../fuse_ctrl_secreg_axi_read_if_driver.svh | 141 ++ ...fuse_ctrl_secreg_axi_read_if_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_secreg_axi_read_if_if.sv | 124 ++ ...g_axi_read_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_secreg_axi_read_if_macros.svh | 207 ++ .../fuse_ctrl_secreg_axi_read_if_monitor.svh | 131 ++ ...use_ctrl_secreg_axi_read_if_monitor_bfm.sv | 232 +++ ...trl_secreg_axi_read_if_random_sequence.svh | 91 + ..._secreg_axi_read_if_responder_sequence.svh | 87 + ..._ctrl_secreg_axi_read_if_sequence_base.svh | 146 ++ ...se_ctrl_secreg_axi_read_if_transaction.svh | 243 +++ ...ecreg_axi_read_if_transaction_coverage.svh | 110 + .../fuse_ctrl_secreg_axi_read_if_typedefs.svh | 34 + ...e_ctrl_secreg_axi_read_if_typedefs_hdl.svh | 35 + ...use_ctrl_secreg_axi_read_if_interface.yaml | 121 ++ .../prim_axi_read_if_pkg/.project | 30 + .../prim_axi_read_if_pkg/.svproject | 16 + .../prim_axi_read_if_pkg/Makefile | 66 + .../prim_axi_read_if_pkg/compile.do | 14 + .../prim_axi_read_if.compile | 3 + .../prim_axi_read_if_bfm.vinfo | 6 + .../prim_axi_read_if_common.compile | 7 + .../prim_axi_read_if_filelist_hdl.f | 1 + .../prim_axi_read_if_filelist_hvl.f | 1 + .../prim_axi_read_if_filelist_xrtl.f | 3 + .../prim_axi_read_if_hdl.compile | 9 + .../prim_axi_read_if_hvl.compile | 7 + .../prim_axi_read_if_pkg.sv | 91 + .../prim_axi_read_if_pkg.vinfo | 4 + .../prim_axi_read_if_pkg_hdl.sv | 52 + .../prim_axi_read_if_pkg_hdl.vinfo | 2 + .../prim_axi_read_if_pkg_sve.F | 10 + .../src/prim_axi_read_if2reg_adapter.svh | 142 ++ .../src/prim_axi_read_if_agent.svh | 109 + .../src/prim_axi_read_if_configuration.svh | 241 +++ .../src/prim_axi_read_if_driver.svh | 141 ++ .../src/prim_axi_read_if_driver_bfm.sv | 352 ++++ .../src/prim_axi_read_if_if.sv | 109 + ...m_axi_read_if_infact_coverage_strategy.csv | 6 + .../src/prim_axi_read_if_macros.svh | 180 ++ .../src/prim_axi_read_if_monitor.svh | 131 ++ .../src/prim_axi_read_if_monitor_bfm.sv | 220 ++ .../src/prim_axi_read_if_random_sequence.svh | 91 + .../prim_axi_read_if_responder_sequence.svh | 87 + .../src/prim_axi_read_if_sequence_base.svh | 146 ++ .../src/prim_axi_read_if_transaction.svh | 240 +++ .../prim_axi_read_if_transaction_coverage.svh | 107 + .../src/prim_axi_read_if_typedefs.svh | 34 + .../src/prim_axi_read_if_typedefs_hdl.svh | 35 + .../yaml/prim_axi_read_if_interface.yaml | 91 + .../prim_axi_write_if_pkg/.project | 30 + .../prim_axi_write_if_pkg/.svproject | 16 + .../prim_axi_write_if_pkg/Makefile | 66 + .../prim_axi_write_if_pkg/compile.do | 14 + .../prim_axi_write_if.compile | 3 + .../prim_axi_write_if_bfm.vinfo | 6 + .../prim_axi_write_if_common.compile | 7 + .../prim_axi_write_if_filelist_hdl.f | 1 + .../prim_axi_write_if_filelist_hvl.f | 1 + .../prim_axi_write_if_filelist_xrtl.f | 3 + .../prim_axi_write_if_hdl.compile | 9 + .../prim_axi_write_if_hvl.compile | 7 + .../prim_axi_write_if_pkg.sv | 91 + .../prim_axi_write_if_pkg.vinfo | 4 + .../prim_axi_write_if_pkg_hdl.sv | 52 + .../prim_axi_write_if_pkg_hdl.vinfo | 2 + .../prim_axi_write_if_pkg_sve.F | 10 + .../src/prim_axi_write_if2reg_adapter.svh | 142 ++ .../src/prim_axi_write_if_agent.svh | 109 + .../src/prim_axi_write_if_configuration.svh | 241 +++ .../src/prim_axi_write_if_driver.svh | 141 ++ .../src/prim_axi_write_if_driver_bfm.sv | 341 ++++ .../src/prim_axi_write_if_if.sv | 104 + ..._axi_write_if_infact_coverage_strategy.csv | 6 + .../src/prim_axi_write_if_macros.svh | 171 ++ .../src/prim_axi_write_if_monitor.svh | 131 ++ .../src/prim_axi_write_if_monitor_bfm.sv | 216 ++ .../src/prim_axi_write_if_random_sequence.svh | 91 + .../prim_axi_write_if_responder_sequence.svh | 87 + .../src/prim_axi_write_if_sequence_base.svh | 146 ++ .../src/prim_axi_write_if_transaction.svh | 236 +++ ...prim_axi_write_if_transaction_coverage.svh | 106 + .../src/prim_axi_write_if_typedefs.svh | 34 + .../src/prim_axi_write_if_typedefs_hdl.svh | 35 + .../yaml/prim_axi_write_if_interface.yaml | 81 + .../secreg_axi_read_if_pkg/.project | 30 + .../secreg_axi_read_if_pkg/.svproject | 16 + .../secreg_axi_read_if_pkg/Makefile | 66 + .../secreg_axi_read_if_pkg/compile.do | 14 + .../secreg_axi_read_if.compile | 3 + .../secreg_axi_read_if_bfm.vinfo | 6 + .../secreg_axi_read_if_common.compile | 7 + .../secreg_axi_read_if_filelist_hdl.f | 1 + .../secreg_axi_read_if_filelist_hvl.f | 1 + .../secreg_axi_read_if_filelist_xrtl.f | 3 + .../secreg_axi_read_if_hdl.compile | 9 + .../secreg_axi_read_if_hvl.compile | 7 + .../secreg_axi_read_if_pkg.sv | 91 + .../secreg_axi_read_if_pkg.vinfo | 4 + .../secreg_axi_read_if_pkg_hdl.sv | 52 + .../secreg_axi_read_if_pkg_hdl.vinfo | 2 + .../secreg_axi_read_if_pkg_sve.F | 10 + .../src/secreg_axi_read_if2reg_adapter.svh | 142 ++ .../src/secreg_axi_read_if_agent.svh | 109 + .../src/secreg_axi_read_if_configuration.svh | 241 +++ .../src/secreg_axi_read_if_driver.svh | 141 ++ .../src/secreg_axi_read_if_driver_bfm.sv | 352 ++++ .../src/secreg_axi_read_if_if.sv | 109 + ...g_axi_read_if_infact_coverage_strategy.csv | 6 + .../src/secreg_axi_read_if_macros.svh | 180 ++ .../src/secreg_axi_read_if_monitor.svh | 131 ++ .../src/secreg_axi_read_if_monitor_bfm.sv | 220 ++ .../secreg_axi_read_if_random_sequence.svh | 91 + .../secreg_axi_read_if_responder_sequence.svh | 87 + .../src/secreg_axi_read_if_sequence_base.svh | 146 ++ .../src/secreg_axi_read_if_transaction.svh | 240 +++ ...ecreg_axi_read_if_transaction_coverage.svh | 107 + .../src/secreg_axi_read_if_typedefs.svh | 34 + .../src/secreg_axi_read_if_typedefs_hdl.svh | 35 + .../yaml/secreg_axi_read_if_interface.yaml | 91 + .../project_benches/fuse_ctrl/.project | 37 + .../project_benches/fuse_ctrl/.svproject | 16 + .../fuse_ctrl/docs/interfaces.csv | 34 + .../project_benches/fuse_ctrl/fuse_ctrl_sve.F | 34 + .../project_benches/fuse_ctrl/rtl/dut.compile | 6 + .../fuse_ctrl/rtl/verilog/verilog_dut.v | 21 + .../fuse_ctrl/rtl/verilog/verilog_dut.vinfo | 1 + .../fuse_ctrl/rtl/vhdl/vhdl_dut.vhd | 21 + .../project_benches/fuse_ctrl/sim/Makefile | 369 ++++ .../fuse_ctrl/sim/bcr_testlist | 19 + .../fuse_ctrl/sim/bcr_testlist.yaml | 44 + .../project_benches/fuse_ctrl/sim/compile.do | 77 + .../project_benches/fuse_ctrl/sim/hdl.compile | 5 + .../project_benches/fuse_ctrl/sim/hdl.vinfo | 1 + .../project_benches/fuse_ctrl/sim/hvl.compile | 2 + .../project_benches/fuse_ctrl/sim/hvl.vinfo | 1 + .../project_benches/fuse_ctrl/sim/run.do | 21 + .../project_benches/fuse_ctrl/sim/tbx.config | 10 + .../project_benches/fuse_ctrl/sim/testlist | 20 + .../fuse_ctrl/sim/testlist.yaml | 44 + .../project_benches/fuse_ctrl/sim/top.compile | 3 + .../fuse_ctrl/sim/veloce.config | 26 + .../project_benches/fuse_ctrl/sim/viswave.do | 58 + .../project_benches/fuse_ctrl/sim/wave.do | 48 + .../project_benches/fuse_ctrl/sim/xwaves.sigs | 17 + .../fuse_ctrl_parameters_pkg.compile | 4 + .../tb/parameters/fuse_ctrl_parameters_pkg.sv | 58 + .../parameters/fuse_ctrl_parameters_pkg.vinfo | 2 + .../sequences/fuse_ctrl_sequences_pkg.compile | 14 + .../tb/sequences/fuse_ctrl_sequences_pkg.sv | 77 + .../sequences/fuse_ctrl_sequences_pkg.vinfo | 13 + .../src/example_derived_test_sequence.svh | 44 + .../src/fuse_ctrl_bench_sequence_base.svh | 208 ++ .../sequences/src/register_test_sequence.svh | 76 + .../fuse_ctrl/tb/testbench/hdl_top.compile | 16 + .../fuse_ctrl/tb/testbench/hdl_top.sv | 227 +++ .../fuse_ctrl/tb/testbench/hdl_top.vinfo | 12 + .../fuse_ctrl/tb/testbench/hvl_top.compile | 7 + .../fuse_ctrl/tb/testbench/hvl_top.sv | 47 + .../fuse_ctrl/tb/testbench/hvl_top.vinfo | 2 + .../fuse_ctrl/tb/testbench/top_filelist_hdl.f | 3 + .../fuse_ctrl/tb/testbench/top_filelist_hvl.f | 3 + .../tb/tests/fuse_ctrl_tests_pkg.compile | 15 + .../fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.sv | 80 + .../tb/tests/fuse_ctrl_tests_pkg.vinfo | 14 + .../tb/tests/src/example_derived_test.svh | 57 + .../fuse_ctrl/tb/tests/src/register_test.svh | 54 + .../fuse_ctrl/tb/tests/src/test_top.svh | 104 + .../fuse_ctrl/yaml/fuse_ctrl_bench.yaml | 29 + .../fuse_ctrl_env_pkg/.project | 32 + .../fuse_ctrl_env_pkg/.svproject | 16 + .../fuse_ctrl_env_pkg/Makefile | 56 + .../fuse_ctrl_env_pkg/compile.do | 12 + .../fuse_ctrl_env_pkg.compile | 14 + .../fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv | 91 + .../fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo | 11 + .../fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F | 12 + .../src/fuse_ctrl_env_configuration.svh | 205 ++ .../src/fuse_ctrl_env_sequence_base.svh | 130 ++ .../src/fuse_ctrl_env_typedefs.svh | 34 + .../src/fuse_ctrl_environment.svh | 171 ++ .../src/fuse_ctrl_predictor.svh | 323 +++ .../src/fuse_ctrl_scoreboard.svh | 149 ++ .../yaml/fuse_ctrl_environment.yaml | 68 + ...se_ctrl_util_comp_fuse_ctrl_predictor.yaml | 23 + ...e_ctrl_util_comp_fuse_ctrl_scoreboard.yaml | 10 + .../core_axi_read_if_pkg/.project | 30 + .../core_axi_read_if_pkg/.svproject | 16 + .../core_axi_read_if_pkg/Makefile | 66 + .../core_axi_read_if_pkg/compile.do | 14 + .../core_axi_read_if.compile | 3 + .../core_axi_read_if_bfm.vinfo | 6 + .../core_axi_read_if_common.compile | 7 + .../core_axi_read_if_filelist_hdl.f | 1 + .../core_axi_read_if_filelist_hvl.f | 1 + .../core_axi_read_if_filelist_xrtl.f | 3 + .../core_axi_read_if_hdl.compile | 9 + .../core_axi_read_if_hvl.compile | 7 + .../core_axi_read_if_pkg.sv | 91 + .../core_axi_read_if_pkg.vinfo | 4 + .../core_axi_read_if_pkg_hdl.sv | 52 + .../core_axi_read_if_pkg_hdl.vinfo | 2 + .../core_axi_read_if_pkg_sve.F | 10 + .../src/core_axi_read_if2reg_adapter.svh | 142 ++ .../src/core_axi_read_if_agent.svh | 109 + .../src/core_axi_read_if_configuration.svh | 241 +++ .../src/core_axi_read_if_driver.svh | 141 ++ .../src/core_axi_read_if_driver_bfm.sv | 352 ++++ .../src/core_axi_read_if_if.sv | 109 + ...e_axi_read_if_infact_coverage_strategy.csv | 6 + .../src/core_axi_read_if_macros.svh | 180 ++ .../src/core_axi_read_if_monitor.svh | 131 ++ .../src/core_axi_read_if_monitor_bfm.sv | 220 ++ .../src/core_axi_read_if_random_sequence.svh | 91 + .../core_axi_read_if_responder_sequence.svh | 87 + .../src/core_axi_read_if_sequence_base.svh | 146 ++ .../src/core_axi_read_if_transaction.svh | 240 +++ .../core_axi_read_if_transaction_coverage.svh | 107 + .../src/core_axi_read_if_typedefs.svh | 34 + .../src/core_axi_read_if_typedefs_hdl.svh | 35 + .../yaml/core_axi_read_if_interface.yaml | 91 + .../core_axi_write_if_pkg/.project | 30 + .../core_axi_write_if_pkg/.svproject | 16 + .../core_axi_write_if_pkg/Makefile | 66 + .../core_axi_write_if_pkg/compile.do | 14 + .../core_axi_write_if.compile | 3 + .../core_axi_write_if_bfm.vinfo | 6 + .../core_axi_write_if_common.compile | 7 + .../core_axi_write_if_filelist_hdl.f | 1 + .../core_axi_write_if_filelist_hvl.f | 1 + .../core_axi_write_if_filelist_xrtl.f | 3 + .../core_axi_write_if_hdl.compile | 9 + .../core_axi_write_if_hvl.compile | 7 + .../core_axi_write_if_pkg.sv | 91 + .../core_axi_write_if_pkg.vinfo | 4 + .../core_axi_write_if_pkg_hdl.sv | 52 + .../core_axi_write_if_pkg_hdl.vinfo | 2 + .../core_axi_write_if_pkg_sve.F | 10 + .../src/core_axi_write_if2reg_adapter.svh | 142 ++ .../src/core_axi_write_if_agent.svh | 109 + .../src/core_axi_write_if_configuration.svh | 241 +++ .../src/core_axi_write_if_driver.svh | 141 ++ .../src/core_axi_write_if_driver_bfm.sv | 341 ++++ .../src/core_axi_write_if_if.sv | 104 + ..._axi_write_if_infact_coverage_strategy.csv | 6 + .../src/core_axi_write_if_macros.svh | 171 ++ .../src/core_axi_write_if_monitor.svh | 131 ++ .../src/core_axi_write_if_monitor_bfm.sv | 216 ++ .../src/core_axi_write_if_random_sequence.svh | 91 + .../core_axi_write_if_responder_sequence.svh | 87 + .../src/core_axi_write_if_sequence_base.svh | 146 ++ .../src/core_axi_write_if_transaction.svh | 236 +++ ...core_axi_write_if_transaction_coverage.svh | 106 + .../src/core_axi_write_if_typedefs.svh | 34 + .../src/core_axi_write_if_typedefs_hdl.svh | 35 + .../yaml/core_axi_write_if_interface.yaml | 81 + .../fuse_ctrl_core_axi_read_if_pkg/.project | 30 + .../fuse_ctrl_core_axi_read_if_pkg/.svproject | 16 + .../fuse_ctrl_core_axi_read_if_pkg/Makefile | 66 + .../fuse_ctrl_core_axi_read_if_pkg/compile.do | 14 + .../fuse_ctrl_core_axi_read_if.compile | 3 + .../fuse_ctrl_core_axi_read_if_bfm.vinfo | 6 + .../fuse_ctrl_core_axi_read_if_common.compile | 7 + .../fuse_ctrl_core_axi_read_if_filelist_hdl.f | 1 + .../fuse_ctrl_core_axi_read_if_filelist_hvl.f | 1 + ...fuse_ctrl_core_axi_read_if_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_read_if_hdl.compile | 9 + .../fuse_ctrl_core_axi_read_if_hvl.compile | 7 + .../fuse_ctrl_core_axi_read_if_pkg.sv | 91 + .../fuse_ctrl_core_axi_read_if_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_read_if_pkg_hdl.sv | 52 + .../fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_read_if_pkg_sve.F | 10 + ...fuse_ctrl_core_axi_read_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_core_axi_read_if_agent.svh | 109 + ...se_ctrl_core_axi_read_if_configuration.svh | 241 +++ .../src/fuse_ctrl_core_axi_read_if_driver.svh | 141 ++ .../fuse_ctrl_core_axi_read_if_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_core_axi_read_if_if.sv | 124 ++ ...e_axi_read_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_core_axi_read_if_macros.svh | 207 ++ .../fuse_ctrl_core_axi_read_if_monitor.svh | 131 ++ .../fuse_ctrl_core_axi_read_if_monitor_bfm.sv | 232 +++ ..._ctrl_core_axi_read_if_random_sequence.svh | 91 + ...rl_core_axi_read_if_responder_sequence.svh | 87 + ...se_ctrl_core_axi_read_if_sequence_base.svh | 146 ++ ...fuse_ctrl_core_axi_read_if_transaction.svh | 243 +++ ..._core_axi_read_if_transaction_coverage.svh | 110 + .../fuse_ctrl_core_axi_read_if_typedefs.svh | 34 + ...use_ctrl_core_axi_read_if_typedefs_hdl.svh | 35 + .../fuse_ctrl_core_axi_read_if_interface.yaml | 121 ++ .../fuse_ctrl_core_axi_write_if_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_core_axi_write_if_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_write_if.compile | 3 + .../fuse_ctrl_core_axi_write_if_bfm.vinfo | 6 + ...fuse_ctrl_core_axi_write_if_common.compile | 7 + ...fuse_ctrl_core_axi_write_if_filelist_hdl.f | 1 + ...fuse_ctrl_core_axi_write_if_filelist_hvl.f | 1 + ...use_ctrl_core_axi_write_if_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_write_if_hdl.compile | 9 + .../fuse_ctrl_core_axi_write_if_hvl.compile | 7 + .../fuse_ctrl_core_axi_write_if_pkg.sv | 91 + .../fuse_ctrl_core_axi_write_if_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_write_if_pkg_hdl.sv | 52 + .../fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_write_if_pkg_sve.F | 10 + ...use_ctrl_core_axi_write_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_core_axi_write_if_agent.svh | 109 + ...e_ctrl_core_axi_write_if_configuration.svh | 241 +++ .../fuse_ctrl_core_axi_write_if_driver.svh | 141 ++ .../fuse_ctrl_core_axi_write_if_driver_bfm.sv | 429 ++++ .../src/fuse_ctrl_core_axi_write_if_if.sv | 144 ++ ..._axi_write_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_core_axi_write_if_macros.svh | 243 +++ .../fuse_ctrl_core_axi_write_if_monitor.svh | 131 ++ ...fuse_ctrl_core_axi_write_if_monitor_bfm.sv | 248 +++ ...ctrl_core_axi_write_if_random_sequence.svh | 91 + ...l_core_axi_write_if_responder_sequence.svh | 87 + ...e_ctrl_core_axi_write_if_sequence_base.svh | 146 ++ ...use_ctrl_core_axi_write_if_transaction.svh | 256 +++ ...core_axi_write_if_transaction_coverage.svh | 114 ++ .../fuse_ctrl_core_axi_write_if_typedefs.svh | 34 + ...se_ctrl_core_axi_write_if_typedefs_hdl.svh | 35 + ...fuse_ctrl_core_axi_write_if_interface.yaml | 161 ++ .../fuse_ctrl_in_if_pkg/.project | 30 + .../fuse_ctrl_in_if_pkg/.svproject | 16 + .../fuse_ctrl_in_if_pkg/Makefile | 66 + .../fuse_ctrl_in_if_pkg/compile.do | 14 + .../fuse_ctrl_in_if.compile | 3 + .../fuse_ctrl_in_if_bfm.vinfo | 6 + .../fuse_ctrl_in_if_common.compile | 7 + .../fuse_ctrl_in_if_filelist_hdl.f | 1 + .../fuse_ctrl_in_if_filelist_hvl.f | 1 + .../fuse_ctrl_in_if_filelist_xrtl.f | 3 + .../fuse_ctrl_in_if_hdl.compile | 9 + .../fuse_ctrl_in_if_hvl.compile | 7 + .../fuse_ctrl_in_if_pkg.sv | 91 + .../fuse_ctrl_in_if_pkg.vinfo | 4 + .../fuse_ctrl_in_if_pkg_hdl.sv | 52 + .../fuse_ctrl_in_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_in_if_pkg_sve.F | 10 + .../src/fuse_ctrl_in_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_in_if_agent.svh | 109 + .../src/fuse_ctrl_in_if_configuration.svh | 241 +++ .../src/fuse_ctrl_in_if_driver.svh | 141 ++ .../src/fuse_ctrl_in_if_driver_bfm.sv | 346 ++++ .../src/fuse_ctrl_in_if_if.sv | 119 ++ ...se_ctrl_in_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_in_if_macros.svh | 135 ++ .../src/fuse_ctrl_in_if_monitor.svh | 131 ++ .../src/fuse_ctrl_in_if_monitor_bfm.sv | 221 ++ .../src/fuse_ctrl_in_if_random_sequence.svh | 91 + .../fuse_ctrl_in_if_responder_sequence.svh | 87 + .../src/fuse_ctrl_in_if_sequence_base.svh | 146 ++ .../src/fuse_ctrl_in_if_transaction.svh | 219 ++ .../fuse_ctrl_in_if_transaction_coverage.svh | 102 + .../src/fuse_ctrl_in_if_typedefs.svh | 34 + .../src/fuse_ctrl_in_if_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_in_if_interface.yaml | 68 + .../fuse_ctrl_in_pkg/.project | 30 + .../fuse_ctrl_in_pkg/.svproject | 16 + .../fuse_ctrl_in_pkg/Makefile | 66 + .../fuse_ctrl_in_pkg/compile.do | 14 + .../fuse_ctrl_in_pkg/fuse_ctrl_in.compile | 3 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo | 6 + .../fuse_ctrl_in_common.compile | 7 + .../fuse_ctrl_in_filelist_hdl.f | 1 + .../fuse_ctrl_in_filelist_hvl.f | 1 + .../fuse_ctrl_in_filelist_xrtl.f | 3 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile | 9 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile | 7 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv | 91 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo | 4 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv | 52 + .../fuse_ctrl_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F | 10 + .../src/fuse_ctrl_in2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_in_agent.svh | 109 + .../src/fuse_ctrl_in_configuration.svh | 241 +++ .../src/fuse_ctrl_in_driver.svh | 141 ++ .../src/fuse_ctrl_in_driver_bfm.sv | 346 ++++ .../fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv | 119 ++ .../fuse_ctrl_in_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_in_macros.svh | 135 ++ .../src/fuse_ctrl_in_monitor.svh | 131 ++ .../src/fuse_ctrl_in_monitor_bfm.sv | 221 ++ .../src/fuse_ctrl_in_random_sequence.svh | 91 + .../src/fuse_ctrl_in_responder_sequence.svh | 87 + .../src/fuse_ctrl_in_sequence_base.svh | 146 ++ .../src/fuse_ctrl_in_transaction.svh | 219 ++ .../src/fuse_ctrl_in_transaction_coverage.svh | 102 + .../src/fuse_ctrl_in_typedefs.svh | 34 + .../src/fuse_ctrl_in_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_in_interface.yaml | 68 + .../fuse_ctrl_lc_otp_if_pkg/.project | 30 + .../fuse_ctrl_lc_otp_if_pkg/.svproject | 16 + .../fuse_ctrl_lc_otp_if_pkg/Makefile | 66 + .../fuse_ctrl_lc_otp_if_pkg/compile.do | 14 + .../fuse_ctrl_lc_otp_if.compile | 3 + .../fuse_ctrl_lc_otp_if_bfm.vinfo | 6 + .../fuse_ctrl_lc_otp_if_common.compile | 7 + .../fuse_ctrl_lc_otp_if_filelist_hdl.f | 1 + .../fuse_ctrl_lc_otp_if_filelist_hvl.f | 1 + .../fuse_ctrl_lc_otp_if_filelist_xrtl.f | 3 + .../fuse_ctrl_lc_otp_if_hdl.compile | 9 + .../fuse_ctrl_lc_otp_if_hvl.compile | 7 + .../fuse_ctrl_lc_otp_if_pkg.sv | 91 + .../fuse_ctrl_lc_otp_if_pkg.vinfo | 4 + .../fuse_ctrl_lc_otp_if_pkg_hdl.sv | 52 + .../fuse_ctrl_lc_otp_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_lc_otp_if_pkg_sve.F | 10 + .../src/fuse_ctrl_lc_otp_if2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_lc_otp_if_agent.svh | 67 + .../src/fuse_ctrl_lc_otp_if_configuration.svh | 193 ++ .../src/fuse_ctrl_lc_otp_if_driver.svh | 105 + .../src/fuse_ctrl_lc_otp_if_driver_bfm.sv | 321 +++ .../src/fuse_ctrl_lc_otp_if_if.sv | 98 + ...trl_lc_otp_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_lc_otp_if_macros.svh | 153 ++ .../src/fuse_ctrl_lc_otp_if_monitor.svh | 101 + .../src/fuse_ctrl_lc_otp_if_monitor_bfm.sv | 202 ++ .../fuse_ctrl_lc_otp_if_random_sequence.svh | 67 + ...fuse_ctrl_lc_otp_if_responder_sequence.svh | 63 + .../src/fuse_ctrl_lc_otp_if_sequence_base.svh | 110 + .../src/fuse_ctrl_lc_otp_if_transaction.svh | 201 ++ ...se_ctrl_lc_otp_if_transaction_coverage.svh | 86 + .../src/fuse_ctrl_lc_otp_if_typedefs.svh | 34 + .../src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_lc_otp_if_interface.yaml | 57 + .../fuse_ctrl_out_if_pkg/.project | 30 + .../fuse_ctrl_out_if_pkg/.svproject | 16 + .../fuse_ctrl_out_if_pkg/Makefile | 66 + .../fuse_ctrl_out_if_pkg/compile.do | 14 + .../fuse_ctrl_out_if.compile | 3 + .../fuse_ctrl_out_if_bfm.vinfo | 6 + .../fuse_ctrl_out_if_common.compile | 7 + .../fuse_ctrl_out_if_filelist_hdl.f | 1 + .../fuse_ctrl_out_if_filelist_hvl.f | 1 + .../fuse_ctrl_out_if_filelist_xrtl.f | 3 + .../fuse_ctrl_out_if_hdl.compile | 9 + .../fuse_ctrl_out_if_hvl.compile | 7 + .../fuse_ctrl_out_if_pkg.sv | 91 + .../fuse_ctrl_out_if_pkg.vinfo | 4 + .../fuse_ctrl_out_if_pkg_hdl.sv | 52 + .../fuse_ctrl_out_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_out_if_pkg_sve.F | 10 + .../src/fuse_ctrl_out_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_out_if_agent.svh | 109 + .../src/fuse_ctrl_out_if_configuration.svh | 241 +++ .../src/fuse_ctrl_out_if_driver.svh | 141 ++ .../src/fuse_ctrl_out_if_driver_bfm.sv | 394 ++++ .../src/fuse_ctrl_out_if_if.sv | 149 ++ ...e_ctrl_out_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_out_if_macros.svh | 144 ++ .../src/fuse_ctrl_out_if_monitor.svh | 131 ++ .../src/fuse_ctrl_out_if_monitor_bfm.sv | 240 +++ .../src/fuse_ctrl_out_if_random_sequence.svh | 91 + .../fuse_ctrl_out_if_responder_sequence.svh | 87 + .../src/fuse_ctrl_out_if_sequence_base.svh | 146 ++ .../src/fuse_ctrl_out_if_transaction.svh | 224 +++ .../fuse_ctrl_out_if_transaction_coverage.svh | 103 + .../src/fuse_ctrl_out_if_typedefs.svh | 34 + .../src/fuse_ctrl_out_if_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_out_if_interface.yaml | 98 + .../fuse_ctrl_out_pkg/.project | 30 + .../fuse_ctrl_out_pkg/.svproject | 16 + .../fuse_ctrl_out_pkg/Makefile | 66 + .../fuse_ctrl_out_pkg/compile.do | 14 + .../fuse_ctrl_out_pkg/fuse_ctrl_out.compile | 3 + .../fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo | 6 + .../fuse_ctrl_out_common.compile | 7 + .../fuse_ctrl_out_filelist_hdl.f | 1 + .../fuse_ctrl_out_filelist_hvl.f | 1 + .../fuse_ctrl_out_filelist_xrtl.f | 3 + .../fuse_ctrl_out_hdl.compile | 9 + .../fuse_ctrl_out_hvl.compile | 7 + .../fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv | 91 + .../fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo | 4 + .../fuse_ctrl_out_pkg_hdl.sv | 52 + .../fuse_ctrl_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F | 10 + .../src/fuse_ctrl_out2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_out_agent.svh | 109 + .../src/fuse_ctrl_out_configuration.svh | 241 +++ .../src/fuse_ctrl_out_driver.svh | 141 ++ .../src/fuse_ctrl_out_driver_bfm.sv | 394 ++++ .../fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv | 149 ++ ...fuse_ctrl_out_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_out_macros.svh | 144 ++ .../src/fuse_ctrl_out_monitor.svh | 131 ++ .../src/fuse_ctrl_out_monitor_bfm.sv | 240 +++ .../src/fuse_ctrl_out_random_sequence.svh | 91 + .../src/fuse_ctrl_out_responder_sequence.svh | 87 + .../src/fuse_ctrl_out_sequence_base.svh | 146 ++ .../src/fuse_ctrl_out_transaction.svh | 224 +++ .../fuse_ctrl_out_transaction_coverage.svh | 103 + .../src/fuse_ctrl_out_typedefs.svh | 34 + .../src/fuse_ctrl_out_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_out_interface.yaml | 98 + .../fuse_ctrl_prim_axi_read_if_pkg/.project | 30 + .../fuse_ctrl_prim_axi_read_if_pkg/.svproject | 16 + .../fuse_ctrl_prim_axi_read_if_pkg/Makefile | 66 + .../fuse_ctrl_prim_axi_read_if_pkg/compile.do | 14 + .../fuse_ctrl_prim_axi_read_if.compile | 3 + .../fuse_ctrl_prim_axi_read_if_bfm.vinfo | 6 + .../fuse_ctrl_prim_axi_read_if_common.compile | 7 + .../fuse_ctrl_prim_axi_read_if_filelist_hdl.f | 1 + .../fuse_ctrl_prim_axi_read_if_filelist_hvl.f | 1 + ...fuse_ctrl_prim_axi_read_if_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_read_if_hdl.compile | 9 + .../fuse_ctrl_prim_axi_read_if_hvl.compile | 7 + .../fuse_ctrl_prim_axi_read_if_pkg.sv | 91 + .../fuse_ctrl_prim_axi_read_if_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_read_if_pkg_hdl.sv | 52 + .../fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_read_if_pkg_sve.F | 10 + ...fuse_ctrl_prim_axi_read_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_prim_axi_read_if_agent.svh | 109 + ...se_ctrl_prim_axi_read_if_configuration.svh | 241 +++ .../src/fuse_ctrl_prim_axi_read_if_driver.svh | 141 ++ .../fuse_ctrl_prim_axi_read_if_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_prim_axi_read_if_if.sv | 124 ++ ...m_axi_read_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_prim_axi_read_if_macros.svh | 207 ++ .../fuse_ctrl_prim_axi_read_if_monitor.svh | 131 ++ .../fuse_ctrl_prim_axi_read_if_monitor_bfm.sv | 232 +++ ..._ctrl_prim_axi_read_if_random_sequence.svh | 91 + ...rl_prim_axi_read_if_responder_sequence.svh | 87 + ...se_ctrl_prim_axi_read_if_sequence_base.svh | 146 ++ ...fuse_ctrl_prim_axi_read_if_transaction.svh | 243 +++ ..._prim_axi_read_if_transaction_coverage.svh | 110 + .../fuse_ctrl_prim_axi_read_if_typedefs.svh | 34 + ...use_ctrl_prim_axi_read_if_typedefs_hdl.svh | 35 + .../fuse_ctrl_prim_axi_read_if_interface.yaml | 121 ++ .../fuse_ctrl_prim_axi_write_if_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_prim_axi_write_if_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_write_if.compile | 3 + .../fuse_ctrl_prim_axi_write_if_bfm.vinfo | 6 + ...fuse_ctrl_prim_axi_write_if_common.compile | 7 + ...fuse_ctrl_prim_axi_write_if_filelist_hdl.f | 1 + ...fuse_ctrl_prim_axi_write_if_filelist_hvl.f | 1 + ...use_ctrl_prim_axi_write_if_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_write_if_hdl.compile | 9 + .../fuse_ctrl_prim_axi_write_if_hvl.compile | 7 + .../fuse_ctrl_prim_axi_write_if_pkg.sv | 91 + .../fuse_ctrl_prim_axi_write_if_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_write_if_pkg_hdl.sv | 52 + .../fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_write_if_pkg_sve.F | 10 + ...use_ctrl_prim_axi_write_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_prim_axi_write_if_agent.svh | 109 + ...e_ctrl_prim_axi_write_if_configuration.svh | 241 +++ .../fuse_ctrl_prim_axi_write_if_driver.svh | 141 ++ .../fuse_ctrl_prim_axi_write_if_driver_bfm.sv | 429 ++++ .../src/fuse_ctrl_prim_axi_write_if_if.sv | 144 ++ ..._axi_write_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_prim_axi_write_if_macros.svh | 243 +++ .../fuse_ctrl_prim_axi_write_if_monitor.svh | 131 ++ ...fuse_ctrl_prim_axi_write_if_monitor_bfm.sv | 248 +++ ...ctrl_prim_axi_write_if_random_sequence.svh | 91 + ...l_prim_axi_write_if_responder_sequence.svh | 87 + ...e_ctrl_prim_axi_write_if_sequence_base.svh | 146 ++ ...use_ctrl_prim_axi_write_if_transaction.svh | 256 +++ ...prim_axi_write_if_transaction_coverage.svh | 114 ++ .../fuse_ctrl_prim_axi_write_if_typedefs.svh | 34 + ...se_ctrl_prim_axi_write_if_typedefs_hdl.svh | 35 + ...fuse_ctrl_prim_axi_write_if_interface.yaml | 161 ++ .../fuse_ctrl_rst_pkg/.project | 30 + .../fuse_ctrl_rst_pkg/.svproject | 16 + .../fuse_ctrl_rst_pkg/Makefile | 66 + .../fuse_ctrl_rst_pkg/compile.do | 14 + .../fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile | 3 + .../fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo | 6 + .../fuse_ctrl_rst_common.compile | 7 + .../fuse_ctrl_rst_filelist_hdl.f | 1 + .../fuse_ctrl_rst_filelist_hvl.f | 1 + .../fuse_ctrl_rst_filelist_xrtl.f | 3 + .../fuse_ctrl_rst_hdl.compile | 9 + .../fuse_ctrl_rst_hvl.compile | 7 + .../fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv | 91 + .../fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo | 4 + .../fuse_ctrl_rst_pkg_hdl.sv | 52 + .../fuse_ctrl_rst_pkg_hdl.vinfo | 2 + .../fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F | 10 + .../src/fuse_ctrl_rst2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_rst_agent.svh | 67 + .../src/fuse_ctrl_rst_configuration.svh | 193 ++ .../src/fuse_ctrl_rst_driver.svh | 105 + .../src/fuse_ctrl_rst_driver_bfm.sv | 296 +++ .../fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv | 83 + ...fuse_ctrl_rst_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_rst_macros.svh | 144 ++ .../src/fuse_ctrl_rst_monitor.svh | 101 + .../src/fuse_ctrl_rst_monitor_bfm.sv | 192 ++ .../src/fuse_ctrl_rst_random_sequence.svh | 67 + .../src/fuse_ctrl_rst_responder_sequence.svh | 63 + .../src/fuse_ctrl_rst_sequence_base.svh | 110 + .../src/fuse_ctrl_rst_transaction.svh | 198 ++ .../fuse_ctrl_rst_transaction_coverage.svh | 85 + .../src/fuse_ctrl_rst_typedefs.svh | 34 + .../src/fuse_ctrl_rst_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_rst_interface.yaml | 39 + .../fuse_ctrl_secreg_axi_read_if_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_secreg_axi_read_if_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_secreg_axi_read_if.compile | 3 + .../fuse_ctrl_secreg_axi_read_if_bfm.vinfo | 6 + ...use_ctrl_secreg_axi_read_if_common.compile | 7 + ...use_ctrl_secreg_axi_read_if_filelist_hdl.f | 1 + ...use_ctrl_secreg_axi_read_if_filelist_hvl.f | 1 + ...se_ctrl_secreg_axi_read_if_filelist_xrtl.f | 3 + .../fuse_ctrl_secreg_axi_read_if_hdl.compile | 9 + .../fuse_ctrl_secreg_axi_read_if_hvl.compile | 7 + .../fuse_ctrl_secreg_axi_read_if_pkg.sv | 91 + .../fuse_ctrl_secreg_axi_read_if_pkg.vinfo | 4 + .../fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv | 52 + ...fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_secreg_axi_read_if_pkg_sve.F | 10 + ...se_ctrl_secreg_axi_read_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_secreg_axi_read_if_agent.svh | 109 + ..._ctrl_secreg_axi_read_if_configuration.svh | 241 +++ .../fuse_ctrl_secreg_axi_read_if_driver.svh | 141 ++ ...fuse_ctrl_secreg_axi_read_if_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_secreg_axi_read_if_if.sv | 124 ++ ...g_axi_read_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_secreg_axi_read_if_macros.svh | 207 ++ .../fuse_ctrl_secreg_axi_read_if_monitor.svh | 131 ++ ...use_ctrl_secreg_axi_read_if_monitor_bfm.sv | 232 +++ ...trl_secreg_axi_read_if_random_sequence.svh | 91 + ..._secreg_axi_read_if_responder_sequence.svh | 87 + ..._ctrl_secreg_axi_read_if_sequence_base.svh | 146 ++ ...se_ctrl_secreg_axi_read_if_transaction.svh | 243 +++ ...ecreg_axi_read_if_transaction_coverage.svh | 110 + .../fuse_ctrl_secreg_axi_read_if_typedefs.svh | 34 + ...e_ctrl_secreg_axi_read_if_typedefs_hdl.svh | 35 + ...use_ctrl_secreg_axi_read_if_interface.yaml | 121 ++ .../prim_axi_read_if_pkg/.project | 30 + .../prim_axi_read_if_pkg/.svproject | 16 + .../prim_axi_read_if_pkg/Makefile | 66 + .../prim_axi_read_if_pkg/compile.do | 14 + .../prim_axi_read_if.compile | 3 + .../prim_axi_read_if_bfm.vinfo | 6 + .../prim_axi_read_if_common.compile | 7 + .../prim_axi_read_if_filelist_hdl.f | 1 + .../prim_axi_read_if_filelist_hvl.f | 1 + .../prim_axi_read_if_filelist_xrtl.f | 3 + .../prim_axi_read_if_hdl.compile | 9 + .../prim_axi_read_if_hvl.compile | 7 + .../prim_axi_read_if_pkg.sv | 91 + .../prim_axi_read_if_pkg.vinfo | 4 + .../prim_axi_read_if_pkg_hdl.sv | 52 + .../prim_axi_read_if_pkg_hdl.vinfo | 2 + .../prim_axi_read_if_pkg_sve.F | 10 + .../src/prim_axi_read_if2reg_adapter.svh | 142 ++ .../src/prim_axi_read_if_agent.svh | 109 + .../src/prim_axi_read_if_configuration.svh | 241 +++ .../src/prim_axi_read_if_driver.svh | 141 ++ .../src/prim_axi_read_if_driver_bfm.sv | 352 ++++ .../src/prim_axi_read_if_if.sv | 109 + ...m_axi_read_if_infact_coverage_strategy.csv | 6 + .../src/prim_axi_read_if_macros.svh | 180 ++ .../src/prim_axi_read_if_monitor.svh | 131 ++ .../src/prim_axi_read_if_monitor_bfm.sv | 220 ++ .../src/prim_axi_read_if_random_sequence.svh | 91 + .../prim_axi_read_if_responder_sequence.svh | 87 + .../src/prim_axi_read_if_sequence_base.svh | 146 ++ .../src/prim_axi_read_if_transaction.svh | 240 +++ .../prim_axi_read_if_transaction_coverage.svh | 107 + .../src/prim_axi_read_if_typedefs.svh | 34 + .../src/prim_axi_read_if_typedefs_hdl.svh | 35 + .../yaml/prim_axi_read_if_interface.yaml | 91 + .../prim_axi_write_if_pkg/.project | 30 + .../prim_axi_write_if_pkg/.svproject | 16 + .../prim_axi_write_if_pkg/Makefile | 66 + .../prim_axi_write_if_pkg/compile.do | 14 + .../prim_axi_write_if.compile | 3 + .../prim_axi_write_if_bfm.vinfo | 6 + .../prim_axi_write_if_common.compile | 7 + .../prim_axi_write_if_filelist_hdl.f | 1 + .../prim_axi_write_if_filelist_hvl.f | 1 + .../prim_axi_write_if_filelist_xrtl.f | 3 + .../prim_axi_write_if_hdl.compile | 9 + .../prim_axi_write_if_hvl.compile | 7 + .../prim_axi_write_if_pkg.sv | 91 + .../prim_axi_write_if_pkg.vinfo | 4 + .../prim_axi_write_if_pkg_hdl.sv | 52 + .../prim_axi_write_if_pkg_hdl.vinfo | 2 + .../prim_axi_write_if_pkg_sve.F | 10 + .../src/prim_axi_write_if2reg_adapter.svh | 142 ++ .../src/prim_axi_write_if_agent.svh | 109 + .../src/prim_axi_write_if_configuration.svh | 241 +++ .../src/prim_axi_write_if_driver.svh | 141 ++ .../src/prim_axi_write_if_driver_bfm.sv | 341 ++++ .../src/prim_axi_write_if_if.sv | 104 + ..._axi_write_if_infact_coverage_strategy.csv | 6 + .../src/prim_axi_write_if_macros.svh | 171 ++ .../src/prim_axi_write_if_monitor.svh | 131 ++ .../src/prim_axi_write_if_monitor_bfm.sv | 216 ++ .../src/prim_axi_write_if_random_sequence.svh | 91 + .../prim_axi_write_if_responder_sequence.svh | 87 + .../src/prim_axi_write_if_sequence_base.svh | 146 ++ .../src/prim_axi_write_if_transaction.svh | 236 +++ ...prim_axi_write_if_transaction_coverage.svh | 106 + .../src/prim_axi_write_if_typedefs.svh | 34 + .../src/prim_axi_write_if_typedefs_hdl.svh | 35 + .../yaml/prim_axi_write_if_interface.yaml | 81 + .../secreg_axi_read_if_pkg/.project | 30 + .../secreg_axi_read_if_pkg/.svproject | 16 + .../secreg_axi_read_if_pkg/Makefile | 66 + .../secreg_axi_read_if_pkg/compile.do | 14 + .../secreg_axi_read_if.compile | 3 + .../secreg_axi_read_if_bfm.vinfo | 6 + .../secreg_axi_read_if_common.compile | 7 + .../secreg_axi_read_if_filelist_hdl.f | 1 + .../secreg_axi_read_if_filelist_hvl.f | 1 + .../secreg_axi_read_if_filelist_xrtl.f | 3 + .../secreg_axi_read_if_hdl.compile | 9 + .../secreg_axi_read_if_hvl.compile | 7 + .../secreg_axi_read_if_pkg.sv | 91 + .../secreg_axi_read_if_pkg.vinfo | 4 + .../secreg_axi_read_if_pkg_hdl.sv | 52 + .../secreg_axi_read_if_pkg_hdl.vinfo | 2 + .../secreg_axi_read_if_pkg_sve.F | 10 + .../src/secreg_axi_read_if2reg_adapter.svh | 142 ++ .../src/secreg_axi_read_if_agent.svh | 109 + .../src/secreg_axi_read_if_configuration.svh | 241 +++ .../src/secreg_axi_read_if_driver.svh | 141 ++ .../src/secreg_axi_read_if_driver_bfm.sv | 352 ++++ .../src/secreg_axi_read_if_if.sv | 109 + ...g_axi_read_if_infact_coverage_strategy.csv | 6 + .../src/secreg_axi_read_if_macros.svh | 180 ++ .../src/secreg_axi_read_if_monitor.svh | 131 ++ .../src/secreg_axi_read_if_monitor_bfm.sv | 220 ++ .../secreg_axi_read_if_random_sequence.svh | 91 + .../secreg_axi_read_if_responder_sequence.svh | 87 + .../src/secreg_axi_read_if_sequence_base.svh | 146 ++ .../src/secreg_axi_read_if_transaction.svh | 240 +++ ...ecreg_axi_read_if_transaction_coverage.svh | 107 + .../src/secreg_axi_read_if_typedefs.svh | 34 + .../src/secreg_axi_read_if_typedefs_hdl.svh | 35 + .../yaml/secreg_axi_read_if_interface.yaml | 91 + .../project_benches/fuse_ctrl/.project | 37 + .../project_benches/fuse_ctrl/.svproject | 16 + .../fuse_ctrl/docs/interfaces.csv | 41 + .../project_benches/fuse_ctrl/fuse_ctrl_sve.F | 41 + .../project_benches/fuse_ctrl/rtl/dut.compile | 6 + .../fuse_ctrl/rtl/verilog/verilog_dut.v | 21 + .../fuse_ctrl/rtl/verilog/verilog_dut.vinfo | 1 + .../fuse_ctrl/rtl/vhdl/vhdl_dut.vhd | 21 + .../project_benches/fuse_ctrl/sim/Makefile | 376 ++++ .../fuse_ctrl/sim/bcr_testlist | 19 + .../fuse_ctrl/sim/bcr_testlist.yaml | 44 + .../project_benches/fuse_ctrl/sim/compile.do | 84 + .../project_benches/fuse_ctrl/sim/hdl.compile | 5 + .../project_benches/fuse_ctrl/sim/hdl.vinfo | 1 + .../project_benches/fuse_ctrl/sim/hvl.compile | 2 + .../project_benches/fuse_ctrl/sim/hvl.vinfo | 1 + .../project_benches/fuse_ctrl/sim/run.do | 21 + .../project_benches/fuse_ctrl/sim/tbx.config | 10 + .../project_benches/fuse_ctrl/sim/testlist | 20 + .../fuse_ctrl/sim/testlist.yaml | 44 + .../project_benches/fuse_ctrl/sim/top.compile | 3 + .../fuse_ctrl/sim/veloce.config | 26 + .../project_benches/fuse_ctrl/sim/viswave.do | 100 + .../project_benches/fuse_ctrl/sim/wave.do | 69 + .../project_benches/fuse_ctrl/sim/xwaves.sigs | 17 + .../fuse_ctrl_parameters_pkg.compile | 4 + .../tb/parameters/fuse_ctrl_parameters_pkg.sv | 65 + .../parameters/fuse_ctrl_parameters_pkg.vinfo | 2 + .../sequences/fuse_ctrl_sequences_pkg.compile | 21 + .../tb/sequences/fuse_ctrl_sequences_pkg.sv | 92 + .../sequences/fuse_ctrl_sequences_pkg.vinfo | 20 + .../src/example_derived_test_sequence.svh | 44 + .../src/fuse_ctrl_bench_sequence_base.svh | 229 +++ .../src/fuse_ctrl_otf_reset_sequence.svh | 83 + .../sequences/src/register_test_sequence.svh | 76 + .../fuse_ctrl/tb/testbench/hdl_top.compile | 23 + .../fuse_ctrl/tb/testbench/hdl_top.sv | 276 +++ .../fuse_ctrl/tb/testbench/hdl_top.vinfo | 19 + .../fuse_ctrl/tb/testbench/hvl_top.compile | 7 + .../fuse_ctrl/tb/testbench/hvl_top.sv | 47 + .../fuse_ctrl/tb/testbench/hvl_top.vinfo | 2 + .../fuse_ctrl/tb/testbench/top_filelist_hdl.f | 3 + .../fuse_ctrl/tb/testbench/top_filelist_hvl.f | 3 + .../tb/tests/fuse_ctrl_tests_pkg.compile | 22 + .../fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.sv | 94 + .../tb/tests/fuse_ctrl_tests_pkg.vinfo | 21 + .../tb/tests/src/example_derived_test.svh | 57 + .../fuse_ctrl/tb/tests/src/register_test.svh | 54 + .../fuse_ctrl/tb/tests/src/test_top.svh | 118 ++ .../fuse_ctrl/yaml/fuse_ctrl_bench.yaml | 43 + .../fuse_ctrl_env_pkg/.project | 32 + .../fuse_ctrl_env_pkg/.svproject | 16 + .../fuse_ctrl_env_pkg/Makefile | 56 + .../fuse_ctrl_env_pkg/compile.do | 12 + .../fuse_ctrl_env_pkg.compile | 21 + .../fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv | 105 + .../fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo | 18 + .../fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F | 12 + .../src/fuse_ctrl_env_configuration.svh | 254 +++ .../src/fuse_ctrl_env_sequence_base.svh | 144 ++ .../src/fuse_ctrl_env_typedefs.svh | 34 + .../src/fuse_ctrl_environment.svh | 215 ++ .../src/fuse_ctrl_predictor.svh | 323 +++ .../src/fuse_ctrl_scoreboard.svh | 149 ++ .../yaml/fuse_ctrl_environment.yaml | 116 ++ ...se_ctrl_util_comp_fuse_ctrl_predictor.yaml | 23 + ...e_ctrl_util_comp_fuse_ctrl_scoreboard.yaml | 10 + .../core_axi_read_if_pkg/.project | 30 + .../core_axi_read_if_pkg/.svproject | 16 + .../core_axi_read_if_pkg/Makefile | 66 + .../core_axi_read_if_pkg/compile.do | 14 + .../core_axi_read_if.compile | 3 + .../core_axi_read_if_bfm.vinfo | 6 + .../core_axi_read_if_common.compile | 7 + .../core_axi_read_if_filelist_hdl.f | 1 + .../core_axi_read_if_filelist_hvl.f | 1 + .../core_axi_read_if_filelist_xrtl.f | 3 + .../core_axi_read_if_hdl.compile | 9 + .../core_axi_read_if_hvl.compile | 7 + .../core_axi_read_if_pkg.sv | 91 + .../core_axi_read_if_pkg.vinfo | 4 + .../core_axi_read_if_pkg_hdl.sv | 52 + .../core_axi_read_if_pkg_hdl.vinfo | 2 + .../core_axi_read_if_pkg_sve.F | 10 + .../src/core_axi_read_if2reg_adapter.svh | 142 ++ .../src/core_axi_read_if_agent.svh | 109 + .../src/core_axi_read_if_configuration.svh | 241 +++ .../src/core_axi_read_if_driver.svh | 141 ++ .../src/core_axi_read_if_driver_bfm.sv | 352 ++++ .../src/core_axi_read_if_if.sv | 109 + ...e_axi_read_if_infact_coverage_strategy.csv | 6 + .../src/core_axi_read_if_macros.svh | 180 ++ .../src/core_axi_read_if_monitor.svh | 131 ++ .../src/core_axi_read_if_monitor_bfm.sv | 220 ++ .../src/core_axi_read_if_random_sequence.svh | 91 + .../core_axi_read_if_responder_sequence.svh | 87 + .../src/core_axi_read_if_sequence_base.svh | 146 ++ .../src/core_axi_read_if_transaction.svh | 240 +++ .../core_axi_read_if_transaction_coverage.svh | 107 + .../src/core_axi_read_if_typedefs.svh | 34 + .../src/core_axi_read_if_typedefs_hdl.svh | 35 + .../yaml/core_axi_read_if_interface.yaml | 91 + .../core_axi_read_out_if_pkg/.project | 30 + .../core_axi_read_out_if_pkg/.svproject | 16 + .../core_axi_read_out_if_pkg/Makefile | 66 + .../core_axi_read_out_if_pkg/compile.do | 14 + .../core_axi_read_out_if.compile | 3 + .../core_axi_read_out_if_bfm.vinfo | 6 + .../core_axi_read_out_if_common.compile | 7 + .../core_axi_read_out_if_filelist_hdl.f | 1 + .../core_axi_read_out_if_filelist_hvl.f | 1 + .../core_axi_read_out_if_filelist_xrtl.f | 3 + .../core_axi_read_out_if_hdl.compile | 9 + .../core_axi_read_out_if_hvl.compile | 7 + .../core_axi_read_out_if_pkg.sv | 91 + .../core_axi_read_out_if_pkg.vinfo | 4 + .../core_axi_read_out_if_pkg_hdl.sv | 52 + .../core_axi_read_out_if_pkg_hdl.vinfo | 2 + .../core_axi_read_out_if_pkg_sve.F | 10 + .../src/core_axi_read_out_if2reg_adapter.svh | 142 ++ .../src/core_axi_read_out_if_agent.svh | 109 + .../core_axi_read_out_if_configuration.svh | 241 +++ .../src/core_axi_read_out_if_driver.svh | 141 ++ .../src/core_axi_read_out_if_driver_bfm.sv | 352 ++++ .../src/core_axi_read_out_if_if.sv | 109 + ...i_read_out_if_infact_coverage_strategy.csv | 6 + .../src/core_axi_read_out_if_macros.svh | 180 ++ .../src/core_axi_read_out_if_monitor.svh | 131 ++ .../src/core_axi_read_out_if_monitor_bfm.sv | 220 ++ .../core_axi_read_out_if_random_sequence.svh | 91 + ...ore_axi_read_out_if_responder_sequence.svh | 87 + .../core_axi_read_out_if_sequence_base.svh | 146 ++ .../src/core_axi_read_out_if_transaction.svh | 240 +++ ...e_axi_read_out_if_transaction_coverage.svh | 107 + .../src/core_axi_read_out_if_typedefs.svh | 34 + .../src/core_axi_read_out_if_typedefs_hdl.svh | 35 + .../yaml/core_axi_read_out_if_interface.yaml | 91 + .../core_axi_write_if_pkg/.project | 30 + .../core_axi_write_if_pkg/.svproject | 16 + .../core_axi_write_if_pkg/Makefile | 66 + .../core_axi_write_if_pkg/compile.do | 14 + .../core_axi_write_if.compile | 3 + .../core_axi_write_if_bfm.vinfo | 6 + .../core_axi_write_if_common.compile | 7 + .../core_axi_write_if_filelist_hdl.f | 1 + .../core_axi_write_if_filelist_hvl.f | 1 + .../core_axi_write_if_filelist_xrtl.f | 3 + .../core_axi_write_if_hdl.compile | 9 + .../core_axi_write_if_hvl.compile | 7 + .../core_axi_write_if_pkg.sv | 91 + .../core_axi_write_if_pkg.vinfo | 4 + .../core_axi_write_if_pkg_hdl.sv | 52 + .../core_axi_write_if_pkg_hdl.vinfo | 2 + .../core_axi_write_if_pkg_sve.F | 10 + .../src/core_axi_write_if2reg_adapter.svh | 142 ++ .../src/core_axi_write_if_agent.svh | 109 + .../src/core_axi_write_if_configuration.svh | 241 +++ .../src/core_axi_write_if_driver.svh | 141 ++ .../src/core_axi_write_if_driver_bfm.sv | 341 ++++ .../src/core_axi_write_if_if.sv | 104 + ..._axi_write_if_infact_coverage_strategy.csv | 6 + .../src/core_axi_write_if_macros.svh | 171 ++ .../src/core_axi_write_if_monitor.svh | 131 ++ .../src/core_axi_write_if_monitor_bfm.sv | 216 ++ .../src/core_axi_write_if_random_sequence.svh | 91 + .../core_axi_write_if_responder_sequence.svh | 87 + .../src/core_axi_write_if_sequence_base.svh | 146 ++ .../src/core_axi_write_if_transaction.svh | 236 +++ ...core_axi_write_if_transaction_coverage.svh | 106 + .../src/core_axi_write_if_typedefs.svh | 34 + .../src/core_axi_write_if_typedefs_hdl.svh | 35 + .../yaml/core_axi_write_if_interface.yaml | 81 + .../core_axi_write_out_if_pkg/.project | 30 + .../core_axi_write_out_if_pkg/.svproject | 16 + .../core_axi_write_out_if_pkg/Makefile | 66 + .../core_axi_write_out_if_pkg/compile.do | 14 + .../core_axi_write_out_if.compile | 3 + .../core_axi_write_out_if_bfm.vinfo | 6 + .../core_axi_write_out_if_common.compile | 7 + .../core_axi_write_out_if_filelist_hdl.f | 1 + .../core_axi_write_out_if_filelist_hvl.f | 1 + .../core_axi_write_out_if_filelist_xrtl.f | 3 + .../core_axi_write_out_if_hdl.compile | 9 + .../core_axi_write_out_if_hvl.compile | 7 + .../core_axi_write_out_if_pkg.sv | 91 + .../core_axi_write_out_if_pkg.vinfo | 4 + .../core_axi_write_out_if_pkg_hdl.sv | 52 + .../core_axi_write_out_if_pkg_hdl.vinfo | 2 + .../core_axi_write_out_if_pkg_sve.F | 10 + .../src/core_axi_write_out_if2reg_adapter.svh | 142 ++ .../src/core_axi_write_out_if_agent.svh | 109 + .../core_axi_write_out_if_configuration.svh | 241 +++ .../src/core_axi_write_out_if_driver.svh | 141 ++ .../src/core_axi_write_out_if_driver_bfm.sv | 341 ++++ .../src/core_axi_write_out_if_if.sv | 104 + ..._write_out_if_infact_coverage_strategy.csv | 6 + .../src/core_axi_write_out_if_macros.svh | 171 ++ .../src/core_axi_write_out_if_monitor.svh | 131 ++ .../src/core_axi_write_out_if_monitor_bfm.sv | 216 ++ .../core_axi_write_out_if_random_sequence.svh | 91 + ...re_axi_write_out_if_responder_sequence.svh | 87 + .../core_axi_write_out_if_sequence_base.svh | 146 ++ .../src/core_axi_write_out_if_transaction.svh | 236 +++ ..._axi_write_out_if_transaction_coverage.svh | 106 + .../src/core_axi_write_out_if_typedefs.svh | 34 + .../core_axi_write_out_if_typedefs_hdl.svh | 35 + .../yaml/core_axi_write_out_if_interface.yaml | 81 + .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_core_core_axi_write_out_if.compile | 3 + .../fuse_core_core_axi_write_out_if_bfm.vinfo | 6 + ..._core_core_axi_write_out_if_common.compile | 7 + ..._core_core_axi_write_out_if_filelist_hdl.f | 1 + ..._core_core_axi_write_out_if_filelist_hvl.f | 1 + ...core_core_axi_write_out_if_filelist_xrtl.f | 3 + ...use_core_core_axi_write_out_if_hdl.compile | 9 + ...use_core_core_axi_write_out_if_hvl.compile | 7 + .../fuse_core_core_axi_write_out_if_pkg.sv | 91 + .../fuse_core_core_axi_write_out_if_pkg.vinfo | 4 + ...fuse_core_core_axi_write_out_if_pkg_hdl.sv | 52 + ...e_core_core_axi_write_out_if_pkg_hdl.vinfo | 2 + .../fuse_core_core_axi_write_out_if_pkg_sve.F | 10 + ...core_core_axi_write_out_if2reg_adapter.svh | 142 ++ .../fuse_core_core_axi_write_out_if_agent.svh | 109 + ...re_core_axi_write_out_if_configuration.svh | 241 +++ ...fuse_core_core_axi_write_out_if_driver.svh | 141 ++ ...e_core_core_axi_write_out_if_driver_bfm.sv | 341 ++++ .../src/fuse_core_core_axi_write_out_if_if.sv | 104 + ..._write_out_if_infact_coverage_strategy.csv | 6 + ...fuse_core_core_axi_write_out_if_macros.svh | 171 ++ ...use_core_core_axi_write_out_if_monitor.svh | 131 ++ ..._core_core_axi_write_out_if_monitor_bfm.sv | 216 ++ ..._core_axi_write_out_if_random_sequence.svh | 91 + ...re_axi_write_out_if_responder_sequence.svh | 87 + ...re_core_axi_write_out_if_sequence_base.svh | 146 ++ ...core_core_axi_write_out_if_transaction.svh | 236 +++ ..._axi_write_out_if_transaction_coverage.svh | 106 + ...se_core_core_axi_write_out_if_typedefs.svh | 34 + ...ore_core_axi_write_out_if_typedefs_hdl.svh | 35 + ..._core_core_axi_write_out_if_interface.yaml | 81 + .../fuse_ctrl_core_axi_read_if_pkg/.project | 30 + .../fuse_ctrl_core_axi_read_if_pkg/.svproject | 16 + .../fuse_ctrl_core_axi_read_if_pkg/Makefile | 66 + .../fuse_ctrl_core_axi_read_if_pkg/compile.do | 14 + .../fuse_ctrl_core_axi_read_if.compile | 3 + .../fuse_ctrl_core_axi_read_if_bfm.vinfo | 6 + .../fuse_ctrl_core_axi_read_if_common.compile | 7 + .../fuse_ctrl_core_axi_read_if_filelist_hdl.f | 1 + .../fuse_ctrl_core_axi_read_if_filelist_hvl.f | 1 + ...fuse_ctrl_core_axi_read_if_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_read_if_hdl.compile | 9 + .../fuse_ctrl_core_axi_read_if_hvl.compile | 7 + .../fuse_ctrl_core_axi_read_if_pkg.sv | 91 + .../fuse_ctrl_core_axi_read_if_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_read_if_pkg_hdl.sv | 52 + .../fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_read_if_pkg_sve.F | 10 + ...fuse_ctrl_core_axi_read_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_core_axi_read_if_agent.svh | 109 + ...se_ctrl_core_axi_read_if_configuration.svh | 241 +++ .../src/fuse_ctrl_core_axi_read_if_driver.svh | 141 ++ .../fuse_ctrl_core_axi_read_if_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_core_axi_read_if_if.sv | 124 ++ ...e_axi_read_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_core_axi_read_if_macros.svh | 207 ++ .../fuse_ctrl_core_axi_read_if_monitor.svh | 131 ++ .../fuse_ctrl_core_axi_read_if_monitor_bfm.sv | 232 +++ ..._ctrl_core_axi_read_if_random_sequence.svh | 91 + ...rl_core_axi_read_if_responder_sequence.svh | 87 + ...se_ctrl_core_axi_read_if_sequence_base.svh | 146 ++ ...fuse_ctrl_core_axi_read_if_transaction.svh | 243 +++ ..._core_axi_read_if_transaction_coverage.svh | 110 + .../fuse_ctrl_core_axi_read_if_typedefs.svh | 34 + ...use_ctrl_core_axi_read_if_typedefs_hdl.svh | 35 + .../fuse_ctrl_core_axi_read_if_interface.yaml | 121 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_read_in_if.compile | 3 + .../fuse_ctrl_core_axi_read_in_if_bfm.vinfo | 6 + ...se_ctrl_core_axi_read_in_if_common.compile | 7 + ...se_ctrl_core_axi_read_in_if_filelist_hdl.f | 1 + ...se_ctrl_core_axi_read_in_if_filelist_hvl.f | 1 + ...e_ctrl_core_axi_read_in_if_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_read_in_if_hdl.compile | 9 + .../fuse_ctrl_core_axi_read_in_if_hvl.compile | 7 + .../fuse_ctrl_core_axi_read_in_if_pkg.sv | 91 + .../fuse_ctrl_core_axi_read_in_if_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv | 52 + ...use_ctrl_core_axi_read_in_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_read_in_if_pkg_sve.F | 10 + ...e_ctrl_core_axi_read_in_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_core_axi_read_in_if_agent.svh | 109 + ...ctrl_core_axi_read_in_if_configuration.svh | 241 +++ .../fuse_ctrl_core_axi_read_in_if_driver.svh | 141 ++ ...use_ctrl_core_axi_read_in_if_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_core_axi_read_in_if_if.sv | 124 ++ ...xi_read_in_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_core_axi_read_in_if_macros.svh | 207 ++ .../fuse_ctrl_core_axi_read_in_if_monitor.svh | 131 ++ ...se_ctrl_core_axi_read_in_if_monitor_bfm.sv | 232 +++ ...rl_core_axi_read_in_if_random_sequence.svh | 91 + ...core_axi_read_in_if_responder_sequence.svh | 87 + ...ctrl_core_axi_read_in_if_sequence_base.svh | 146 ++ ...e_ctrl_core_axi_read_in_if_transaction.svh | 243 +++ ...re_axi_read_in_if_transaction_coverage.svh | 110 + ...fuse_ctrl_core_axi_read_in_if_typedefs.svh | 34 + ..._ctrl_core_axi_read_in_if_typedefs_hdl.svh | 35 + ...se_ctrl_core_axi_read_in_if_interface.yaml | 121 ++ .../fuse_ctrl_core_axi_read_in_pkg/.project | 30 + .../fuse_ctrl_core_axi_read_in_pkg/.svproject | 16 + .../fuse_ctrl_core_axi_read_in_pkg/Makefile | 66 + .../fuse_ctrl_core_axi_read_in_pkg/compile.do | 14 + .../fuse_ctrl_core_axi_read_in.compile | 3 + .../fuse_ctrl_core_axi_read_in_bfm.vinfo | 6 + .../fuse_ctrl_core_axi_read_in_common.compile | 7 + .../fuse_ctrl_core_axi_read_in_filelist_hdl.f | 1 + .../fuse_ctrl_core_axi_read_in_filelist_hvl.f | 1 + ...fuse_ctrl_core_axi_read_in_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_read_in_hdl.compile | 9 + .../fuse_ctrl_core_axi_read_in_hvl.compile | 7 + .../fuse_ctrl_core_axi_read_in_pkg.sv | 91 + .../fuse_ctrl_core_axi_read_in_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_read_in_pkg_hdl.sv | 52 + .../fuse_ctrl_core_axi_read_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_read_in_pkg_sve.F | 10 + ...fuse_ctrl_core_axi_read_in2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_core_axi_read_in_agent.svh | 109 + ...se_ctrl_core_axi_read_in_configuration.svh | 241 +++ .../src/fuse_ctrl_core_axi_read_in_driver.svh | 141 ++ .../fuse_ctrl_core_axi_read_in_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_core_axi_read_in_if.sv | 124 ++ ...e_axi_read_in_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_core_axi_read_in_macros.svh | 207 ++ .../fuse_ctrl_core_axi_read_in_monitor.svh | 131 ++ .../fuse_ctrl_core_axi_read_in_monitor_bfm.sv | 232 +++ ..._ctrl_core_axi_read_in_random_sequence.svh | 91 + ...rl_core_axi_read_in_responder_sequence.svh | 87 + ...se_ctrl_core_axi_read_in_sequence_base.svh | 146 ++ ...fuse_ctrl_core_axi_read_in_transaction.svh | 243 +++ ..._core_axi_read_in_transaction_coverage.svh | 110 + .../fuse_ctrl_core_axi_read_in_typedefs.svh | 34 + ...use_ctrl_core_axi_read_in_typedefs_hdl.svh | 35 + .../fuse_ctrl_core_axi_read_in_interface.yaml | 121 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_read_out_if.compile | 3 + .../fuse_ctrl_core_axi_read_out_if_bfm.vinfo | 6 + ...e_ctrl_core_axi_read_out_if_common.compile | 7 + ...e_ctrl_core_axi_read_out_if_filelist_hdl.f | 1 + ...e_ctrl_core_axi_read_out_if_filelist_hvl.f | 1 + ..._ctrl_core_axi_read_out_if_filelist_xrtl.f | 3 + ...fuse_ctrl_core_axi_read_out_if_hdl.compile | 9 + ...fuse_ctrl_core_axi_read_out_if_hvl.compile | 7 + .../fuse_ctrl_core_axi_read_out_if_pkg.sv | 91 + .../fuse_ctrl_core_axi_read_out_if_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv | 52 + ...se_ctrl_core_axi_read_out_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_read_out_if_pkg_sve.F | 10 + ..._ctrl_core_axi_read_out_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_core_axi_read_out_if_agent.svh | 109 + ...trl_core_axi_read_out_if_configuration.svh | 241 +++ .../fuse_ctrl_core_axi_read_out_if_driver.svh | 141 ++ ...se_ctrl_core_axi_read_out_if_driver_bfm.sv | 352 ++++ .../src/fuse_ctrl_core_axi_read_out_if_if.sv | 109 + ...i_read_out_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_core_axi_read_out_if_macros.svh | 180 ++ ...fuse_ctrl_core_axi_read_out_if_monitor.svh | 131 ++ ...e_ctrl_core_axi_read_out_if_monitor_bfm.sv | 220 ++ ...l_core_axi_read_out_if_random_sequence.svh | 91 + ...ore_axi_read_out_if_responder_sequence.svh | 87 + ...trl_core_axi_read_out_if_sequence_base.svh | 146 ++ ..._ctrl_core_axi_read_out_if_transaction.svh | 240 +++ ...e_axi_read_out_if_transaction_coverage.svh | 107 + ...use_ctrl_core_axi_read_out_if_typedefs.svh | 34 + ...ctrl_core_axi_read_out_if_typedefs_hdl.svh | 35 + ...e_ctrl_core_axi_read_out_if_interface.yaml | 91 + .../fuse_ctrl_core_axi_read_out_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_core_axi_read_out_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_read_out.compile | 3 + .../fuse_ctrl_core_axi_read_out_bfm.vinfo | 6 + ...fuse_ctrl_core_axi_read_out_common.compile | 7 + ...fuse_ctrl_core_axi_read_out_filelist_hdl.f | 1 + ...fuse_ctrl_core_axi_read_out_filelist_hvl.f | 1 + ...use_ctrl_core_axi_read_out_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_read_out_hdl.compile | 9 + .../fuse_ctrl_core_axi_read_out_hvl.compile | 7 + .../fuse_ctrl_core_axi_read_out_pkg.sv | 91 + .../fuse_ctrl_core_axi_read_out_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_read_out_pkg_hdl.sv | 52 + .../fuse_ctrl_core_axi_read_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_read_out_pkg_sve.F | 10 + ...use_ctrl_core_axi_read_out2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_core_axi_read_out_agent.svh | 109 + ...e_ctrl_core_axi_read_out_configuration.svh | 241 +++ .../fuse_ctrl_core_axi_read_out_driver.svh | 141 ++ .../fuse_ctrl_core_axi_read_out_driver_bfm.sv | 352 ++++ .../src/fuse_ctrl_core_axi_read_out_if.sv | 109 + ..._axi_read_out_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_core_axi_read_out_macros.svh | 180 ++ .../fuse_ctrl_core_axi_read_out_monitor.svh | 131 ++ ...fuse_ctrl_core_axi_read_out_monitor_bfm.sv | 220 ++ ...ctrl_core_axi_read_out_random_sequence.svh | 91 + ...l_core_axi_read_out_responder_sequence.svh | 87 + ...e_ctrl_core_axi_read_out_sequence_base.svh | 146 ++ ...use_ctrl_core_axi_read_out_transaction.svh | 240 +++ ...core_axi_read_out_transaction_coverage.svh | 107 + .../fuse_ctrl_core_axi_read_out_typedefs.svh | 34 + ...se_ctrl_core_axi_read_out_typedefs_hdl.svh | 35 + ...fuse_ctrl_core_axi_read_out_interface.yaml | 91 + .../fuse_ctrl_core_axi_write_if_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_core_axi_write_if_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_write_if.compile | 3 + .../fuse_ctrl_core_axi_write_if_bfm.vinfo | 6 + ...fuse_ctrl_core_axi_write_if_common.compile | 7 + ...fuse_ctrl_core_axi_write_if_filelist_hdl.f | 1 + ...fuse_ctrl_core_axi_write_if_filelist_hvl.f | 1 + ...use_ctrl_core_axi_write_if_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_write_if_hdl.compile | 9 + .../fuse_ctrl_core_axi_write_if_hvl.compile | 7 + .../fuse_ctrl_core_axi_write_if_pkg.sv | 91 + .../fuse_ctrl_core_axi_write_if_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_write_if_pkg_hdl.sv | 52 + .../fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_write_if_pkg_sve.F | 10 + ...use_ctrl_core_axi_write_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_core_axi_write_if_agent.svh | 109 + ...e_ctrl_core_axi_write_if_configuration.svh | 241 +++ .../fuse_ctrl_core_axi_write_if_driver.svh | 141 ++ .../fuse_ctrl_core_axi_write_if_driver_bfm.sv | 429 ++++ .../src/fuse_ctrl_core_axi_write_if_if.sv | 144 ++ ..._axi_write_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_core_axi_write_if_macros.svh | 243 +++ .../fuse_ctrl_core_axi_write_if_monitor.svh | 131 ++ ...fuse_ctrl_core_axi_write_if_monitor_bfm.sv | 248 +++ ...ctrl_core_axi_write_if_random_sequence.svh | 91 + ...l_core_axi_write_if_responder_sequence.svh | 87 + ...e_ctrl_core_axi_write_if_sequence_base.svh | 146 ++ ...use_ctrl_core_axi_write_if_transaction.svh | 256 +++ ...core_axi_write_if_transaction_coverage.svh | 114 ++ .../fuse_ctrl_core_axi_write_if_typedefs.svh | 34 + ...se_ctrl_core_axi_write_if_typedefs_hdl.svh | 35 + ...fuse_ctrl_core_axi_write_if_interface.yaml | 161 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_write_in_if.compile | 3 + .../fuse_ctrl_core_axi_write_in_if_bfm.vinfo | 6 + ...e_ctrl_core_axi_write_in_if_common.compile | 7 + ...e_ctrl_core_axi_write_in_if_filelist_hdl.f | 1 + ...e_ctrl_core_axi_write_in_if_filelist_hvl.f | 1 + ..._ctrl_core_axi_write_in_if_filelist_xrtl.f | 3 + ...fuse_ctrl_core_axi_write_in_if_hdl.compile | 9 + ...fuse_ctrl_core_axi_write_in_if_hvl.compile | 7 + .../fuse_ctrl_core_axi_write_in_if_pkg.sv | 91 + .../fuse_ctrl_core_axi_write_in_if_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv | 52 + ...se_ctrl_core_axi_write_in_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_write_in_if_pkg_sve.F | 10 + ..._ctrl_core_axi_write_in_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_core_axi_write_in_if_agent.svh | 109 + ...trl_core_axi_write_in_if_configuration.svh | 241 +++ .../fuse_ctrl_core_axi_write_in_if_driver.svh | 141 ++ ...se_ctrl_core_axi_write_in_if_driver_bfm.sv | 429 ++++ .../src/fuse_ctrl_core_axi_write_in_if_if.sv | 144 ++ ...i_write_in_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_core_axi_write_in_if_macros.svh | 243 +++ ...fuse_ctrl_core_axi_write_in_if_monitor.svh | 131 ++ ...e_ctrl_core_axi_write_in_if_monitor_bfm.sv | 248 +++ ...l_core_axi_write_in_if_random_sequence.svh | 91 + ...ore_axi_write_in_if_responder_sequence.svh | 87 + ...trl_core_axi_write_in_if_sequence_base.svh | 146 ++ ..._ctrl_core_axi_write_in_if_transaction.svh | 256 +++ ...e_axi_write_in_if_transaction_coverage.svh | 114 ++ ...use_ctrl_core_axi_write_in_if_typedefs.svh | 34 + ...ctrl_core_axi_write_in_if_typedefs_hdl.svh | 35 + ...e_ctrl_core_axi_write_in_if_interface.yaml | 161 ++ .../fuse_ctrl_core_axi_write_in_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_core_axi_write_in_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_write_in.compile | 3 + .../fuse_ctrl_core_axi_write_in_bfm.vinfo | 6 + ...fuse_ctrl_core_axi_write_in_common.compile | 7 + ...fuse_ctrl_core_axi_write_in_filelist_hdl.f | 1 + ...fuse_ctrl_core_axi_write_in_filelist_hvl.f | 1 + ...use_ctrl_core_axi_write_in_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_write_in_hdl.compile | 9 + .../fuse_ctrl_core_axi_write_in_hvl.compile | 7 + .../fuse_ctrl_core_axi_write_in_pkg.sv | 91 + .../fuse_ctrl_core_axi_write_in_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_write_in_pkg_hdl.sv | 52 + .../fuse_ctrl_core_axi_write_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_write_in_pkg_sve.F | 10 + ...use_ctrl_core_axi_write_in2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_core_axi_write_in_agent.svh | 109 + ...e_ctrl_core_axi_write_in_configuration.svh | 241 +++ .../fuse_ctrl_core_axi_write_in_driver.svh | 141 ++ .../fuse_ctrl_core_axi_write_in_driver_bfm.sv | 429 ++++ .../src/fuse_ctrl_core_axi_write_in_if.sv | 144 ++ ..._axi_write_in_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_core_axi_write_in_macros.svh | 243 +++ .../fuse_ctrl_core_axi_write_in_monitor.svh | 131 ++ ...fuse_ctrl_core_axi_write_in_monitor_bfm.sv | 248 +++ ...ctrl_core_axi_write_in_random_sequence.svh | 91 + ...l_core_axi_write_in_responder_sequence.svh | 87 + ...e_ctrl_core_axi_write_in_sequence_base.svh | 146 ++ ...use_ctrl_core_axi_write_in_transaction.svh | 256 +++ ...core_axi_write_in_transaction_coverage.svh | 114 ++ .../fuse_ctrl_core_axi_write_in_typedefs.svh | 34 + ...se_ctrl_core_axi_write_in_typedefs_hdl.svh | 35 + ...fuse_ctrl_core_axi_write_in_interface.yaml | 161 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_write_out_if.compile | 3 + .../fuse_ctrl_core_axi_write_out_if_bfm.vinfo | 6 + ..._ctrl_core_axi_write_out_if_common.compile | 7 + ..._ctrl_core_axi_write_out_if_filelist_hdl.f | 1 + ..._ctrl_core_axi_write_out_if_filelist_hvl.f | 1 + ...ctrl_core_axi_write_out_if_filelist_xrtl.f | 3 + ...use_ctrl_core_axi_write_out_if_hdl.compile | 9 + ...use_ctrl_core_axi_write_out_if_hvl.compile | 7 + .../fuse_ctrl_core_axi_write_out_if_pkg.sv | 91 + .../fuse_ctrl_core_axi_write_out_if_pkg.vinfo | 4 + ...fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv | 52 + ...e_ctrl_core_axi_write_out_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_write_out_if_pkg_sve.F | 10 + ...ctrl_core_axi_write_out_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_core_axi_write_out_if_agent.svh | 109 + ...rl_core_axi_write_out_if_configuration.svh | 241 +++ ...fuse_ctrl_core_axi_write_out_if_driver.svh | 141 ++ ...e_ctrl_core_axi_write_out_if_driver_bfm.sv | 341 ++++ .../src/fuse_ctrl_core_axi_write_out_if_if.sv | 104 + ..._write_out_if_infact_coverage_strategy.csv | 6 + ...fuse_ctrl_core_axi_write_out_if_macros.svh | 171 ++ ...use_ctrl_core_axi_write_out_if_monitor.svh | 131 ++ ..._ctrl_core_axi_write_out_if_monitor_bfm.sv | 216 ++ ..._core_axi_write_out_if_random_sequence.svh | 91 + ...re_axi_write_out_if_responder_sequence.svh | 87 + ...rl_core_axi_write_out_if_sequence_base.svh | 146 ++ ...ctrl_core_axi_write_out_if_transaction.svh | 236 +++ ..._axi_write_out_if_transaction_coverage.svh | 106 + ...se_ctrl_core_axi_write_out_if_typedefs.svh | 34 + ...trl_core_axi_write_out_if_typedefs_hdl.svh | 35 + ..._ctrl_core_axi_write_out_if_interface.yaml | 81 + .../fuse_ctrl_core_axi_write_out_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_core_axi_write_out_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_write_out.compile | 3 + .../fuse_ctrl_core_axi_write_out_bfm.vinfo | 6 + ...use_ctrl_core_axi_write_out_common.compile | 7 + ...use_ctrl_core_axi_write_out_filelist_hdl.f | 1 + ...use_ctrl_core_axi_write_out_filelist_hvl.f | 1 + ...se_ctrl_core_axi_write_out_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_write_out_hdl.compile | 9 + .../fuse_ctrl_core_axi_write_out_hvl.compile | 7 + .../fuse_ctrl_core_axi_write_out_pkg.sv | 91 + .../fuse_ctrl_core_axi_write_out_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_write_out_pkg_hdl.sv | 52 + ...fuse_ctrl_core_axi_write_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_write_out_pkg_sve.F | 10 + ...se_ctrl_core_axi_write_out2reg_adapter.svh | 142 ++ .../fuse_ctrl_core_axi_write_out_agent.svh | 109 + ..._ctrl_core_axi_write_out_configuration.svh | 241 +++ .../fuse_ctrl_core_axi_write_out_driver.svh | 141 ++ ...fuse_ctrl_core_axi_write_out_driver_bfm.sv | 341 ++++ .../src/fuse_ctrl_core_axi_write_out_if.sv | 104 + ...axi_write_out_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_core_axi_write_out_macros.svh | 171 ++ .../fuse_ctrl_core_axi_write_out_monitor.svh | 131 ++ ...use_ctrl_core_axi_write_out_monitor_bfm.sv | 216 ++ ...trl_core_axi_write_out_random_sequence.svh | 91 + ..._core_axi_write_out_responder_sequence.svh | 87 + ..._ctrl_core_axi_write_out_sequence_base.svh | 146 ++ ...se_ctrl_core_axi_write_out_transaction.svh | 236 +++ ...ore_axi_write_out_transaction_coverage.svh | 106 + .../fuse_ctrl_core_axi_write_out_typedefs.svh | 34 + ...e_ctrl_core_axi_write_out_typedefs_hdl.svh | 35 + ...use_ctrl_core_axi_write_out_interface.yaml | 81 + .../fuse_ctrl_in_if_pkg/.project | 30 + .../fuse_ctrl_in_if_pkg/.svproject | 16 + .../fuse_ctrl_in_if_pkg/Makefile | 66 + .../fuse_ctrl_in_if_pkg/compile.do | 14 + .../fuse_ctrl_in_if.compile | 3 + .../fuse_ctrl_in_if_bfm.vinfo | 6 + .../fuse_ctrl_in_if_common.compile | 7 + .../fuse_ctrl_in_if_filelist_hdl.f | 1 + .../fuse_ctrl_in_if_filelist_hvl.f | 1 + .../fuse_ctrl_in_if_filelist_xrtl.f | 3 + .../fuse_ctrl_in_if_hdl.compile | 9 + .../fuse_ctrl_in_if_hvl.compile | 7 + .../fuse_ctrl_in_if_pkg.sv | 91 + .../fuse_ctrl_in_if_pkg.vinfo | 4 + .../fuse_ctrl_in_if_pkg_hdl.sv | 52 + .../fuse_ctrl_in_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_in_if_pkg_sve.F | 10 + .../src/fuse_ctrl_in_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_in_if_agent.svh | 109 + .../src/fuse_ctrl_in_if_configuration.svh | 241 +++ .../src/fuse_ctrl_in_if_driver.svh | 141 ++ .../src/fuse_ctrl_in_if_driver_bfm.sv | 346 ++++ .../src/fuse_ctrl_in_if_if.sv | 119 ++ ...se_ctrl_in_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_in_if_macros.svh | 135 ++ .../src/fuse_ctrl_in_if_monitor.svh | 131 ++ .../src/fuse_ctrl_in_if_monitor_bfm.sv | 221 ++ .../src/fuse_ctrl_in_if_random_sequence.svh | 91 + .../fuse_ctrl_in_if_responder_sequence.svh | 87 + .../src/fuse_ctrl_in_if_sequence_base.svh | 146 ++ .../src/fuse_ctrl_in_if_transaction.svh | 219 ++ .../fuse_ctrl_in_if_transaction_coverage.svh | 102 + .../src/fuse_ctrl_in_if_typedefs.svh | 34 + .../src/fuse_ctrl_in_if_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_in_if_interface.yaml | 68 + .../fuse_ctrl_in_pkg/.project | 30 + .../fuse_ctrl_in_pkg/.svproject | 16 + .../fuse_ctrl_in_pkg/Makefile | 66 + .../fuse_ctrl_in_pkg/compile.do | 14 + .../fuse_ctrl_in_pkg/fuse_ctrl_in.compile | 3 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo | 6 + .../fuse_ctrl_in_common.compile | 7 + .../fuse_ctrl_in_filelist_hdl.f | 1 + .../fuse_ctrl_in_filelist_hvl.f | 1 + .../fuse_ctrl_in_filelist_xrtl.f | 3 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile | 9 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile | 7 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv | 91 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo | 4 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv | 52 + .../fuse_ctrl_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F | 10 + .../src/fuse_ctrl_in2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_in_agent.svh | 109 + .../src/fuse_ctrl_in_configuration.svh | 241 +++ .../src/fuse_ctrl_in_driver.svh | 141 ++ .../src/fuse_ctrl_in_driver_bfm.sv | 346 ++++ .../fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv | 119 ++ .../fuse_ctrl_in_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_in_macros.svh | 135 ++ .../src/fuse_ctrl_in_monitor.svh | 131 ++ .../src/fuse_ctrl_in_monitor_bfm.sv | 221 ++ .../src/fuse_ctrl_in_random_sequence.svh | 91 + .../src/fuse_ctrl_in_responder_sequence.svh | 87 + .../src/fuse_ctrl_in_sequence_base.svh | 146 ++ .../src/fuse_ctrl_in_transaction.svh | 219 ++ .../src/fuse_ctrl_in_transaction_coverage.svh | 102 + .../src/fuse_ctrl_in_typedefs.svh | 34 + .../src/fuse_ctrl_in_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_in_interface.yaml | 68 + .../fuse_ctrl_lc_otp_if_pkg/.project | 30 + .../fuse_ctrl_lc_otp_if_pkg/.svproject | 16 + .../fuse_ctrl_lc_otp_if_pkg/Makefile | 66 + .../fuse_ctrl_lc_otp_if_pkg/compile.do | 14 + .../fuse_ctrl_lc_otp_if.compile | 3 + .../fuse_ctrl_lc_otp_if_bfm.vinfo | 6 + .../fuse_ctrl_lc_otp_if_common.compile | 7 + .../fuse_ctrl_lc_otp_if_filelist_hdl.f | 1 + .../fuse_ctrl_lc_otp_if_filelist_hvl.f | 1 + .../fuse_ctrl_lc_otp_if_filelist_xrtl.f | 3 + .../fuse_ctrl_lc_otp_if_hdl.compile | 9 + .../fuse_ctrl_lc_otp_if_hvl.compile | 7 + .../fuse_ctrl_lc_otp_if_pkg.sv | 91 + .../fuse_ctrl_lc_otp_if_pkg.vinfo | 4 + .../fuse_ctrl_lc_otp_if_pkg_hdl.sv | 52 + .../fuse_ctrl_lc_otp_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_lc_otp_if_pkg_sve.F | 10 + .../src/fuse_ctrl_lc_otp_if2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_lc_otp_if_agent.svh | 67 + .../src/fuse_ctrl_lc_otp_if_configuration.svh | 193 ++ .../src/fuse_ctrl_lc_otp_if_driver.svh | 105 + .../src/fuse_ctrl_lc_otp_if_driver_bfm.sv | 321 +++ .../src/fuse_ctrl_lc_otp_if_if.sv | 98 + ...trl_lc_otp_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_lc_otp_if_macros.svh | 153 ++ .../src/fuse_ctrl_lc_otp_if_monitor.svh | 101 + .../src/fuse_ctrl_lc_otp_if_monitor_bfm.sv | 202 ++ .../fuse_ctrl_lc_otp_if_random_sequence.svh | 67 + ...fuse_ctrl_lc_otp_if_responder_sequence.svh | 63 + .../src/fuse_ctrl_lc_otp_if_sequence_base.svh | 110 + .../src/fuse_ctrl_lc_otp_if_transaction.svh | 201 ++ ...se_ctrl_lc_otp_if_transaction_coverage.svh | 86 + .../src/fuse_ctrl_lc_otp_if_typedefs.svh | 34 + .../src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_lc_otp_if_interface.yaml | 57 + .../fuse_ctrl_lc_otp_in_if_pkg/.project | 30 + .../fuse_ctrl_lc_otp_in_if_pkg/.svproject | 16 + .../fuse_ctrl_lc_otp_in_if_pkg/Makefile | 66 + .../fuse_ctrl_lc_otp_in_if_pkg/compile.do | 14 + .../fuse_ctrl_lc_otp_in_if.compile | 3 + .../fuse_ctrl_lc_otp_in_if_bfm.vinfo | 6 + .../fuse_ctrl_lc_otp_in_if_common.compile | 7 + .../fuse_ctrl_lc_otp_in_if_filelist_hdl.f | 1 + .../fuse_ctrl_lc_otp_in_if_filelist_hvl.f | 1 + .../fuse_ctrl_lc_otp_in_if_filelist_xrtl.f | 3 + .../fuse_ctrl_lc_otp_in_if_hdl.compile | 9 + .../fuse_ctrl_lc_otp_in_if_hvl.compile | 7 + .../fuse_ctrl_lc_otp_in_if_pkg.sv | 91 + .../fuse_ctrl_lc_otp_in_if_pkg.vinfo | 4 + .../fuse_ctrl_lc_otp_in_if_pkg_hdl.sv | 52 + .../fuse_ctrl_lc_otp_in_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_lc_otp_in_if_pkg_sve.F | 10 + .../fuse_ctrl_lc_otp_in_if2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_lc_otp_in_if_agent.svh | 67 + .../fuse_ctrl_lc_otp_in_if_configuration.svh | 193 ++ .../src/fuse_ctrl_lc_otp_in_if_driver.svh | 105 + .../src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv | 321 +++ .../src/fuse_ctrl_lc_otp_in_if_if.sv | 98 + ..._lc_otp_in_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_lc_otp_in_if_macros.svh | 153 ++ .../src/fuse_ctrl_lc_otp_in_if_monitor.svh | 101 + .../src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv | 202 ++ ...fuse_ctrl_lc_otp_in_if_random_sequence.svh | 67 + ...e_ctrl_lc_otp_in_if_responder_sequence.svh | 63 + .../fuse_ctrl_lc_otp_in_if_sequence_base.svh | 110 + .../fuse_ctrl_lc_otp_in_if_transaction.svh | 201 ++ ...ctrl_lc_otp_in_if_transaction_coverage.svh | 86 + .../src/fuse_ctrl_lc_otp_in_if_typedefs.svh | 34 + .../fuse_ctrl_lc_otp_in_if_typedefs_hdl.svh | 35 + .../fuse_ctrl_lc_otp_in_if_interface.yaml | 57 + .../fuse_ctrl_lc_otp_in_pkg/.project | 30 + .../fuse_ctrl_lc_otp_in_pkg/.svproject | 16 + .../fuse_ctrl_lc_otp_in_pkg/Makefile | 66 + .../fuse_ctrl_lc_otp_in_pkg/compile.do | 14 + .../fuse_ctrl_lc_otp_in.compile | 3 + .../fuse_ctrl_lc_otp_in_bfm.vinfo | 6 + .../fuse_ctrl_lc_otp_in_common.compile | 7 + .../fuse_ctrl_lc_otp_in_filelist_hdl.f | 1 + .../fuse_ctrl_lc_otp_in_filelist_hvl.f | 1 + .../fuse_ctrl_lc_otp_in_filelist_xrtl.f | 3 + .../fuse_ctrl_lc_otp_in_hdl.compile | 9 + .../fuse_ctrl_lc_otp_in_hvl.compile | 7 + .../fuse_ctrl_lc_otp_in_pkg.sv | 91 + .../fuse_ctrl_lc_otp_in_pkg.vinfo | 4 + .../fuse_ctrl_lc_otp_in_pkg_hdl.sv | 52 + .../fuse_ctrl_lc_otp_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_lc_otp_in_pkg_sve.F | 10 + .../src/fuse_ctrl_lc_otp_in2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_lc_otp_in_agent.svh | 67 + .../src/fuse_ctrl_lc_otp_in_configuration.svh | 193 ++ .../src/fuse_ctrl_lc_otp_in_driver.svh | 105 + .../src/fuse_ctrl_lc_otp_in_driver_bfm.sv | 321 +++ .../src/fuse_ctrl_lc_otp_in_if.sv | 98 + ...trl_lc_otp_in_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_lc_otp_in_macros.svh | 153 ++ .../src/fuse_ctrl_lc_otp_in_monitor.svh | 101 + .../src/fuse_ctrl_lc_otp_in_monitor_bfm.sv | 202 ++ .../fuse_ctrl_lc_otp_in_random_sequence.svh | 67 + ...fuse_ctrl_lc_otp_in_responder_sequence.svh | 63 + .../src/fuse_ctrl_lc_otp_in_sequence_base.svh | 110 + .../src/fuse_ctrl_lc_otp_in_transaction.svh | 201 ++ ...se_ctrl_lc_otp_in_transaction_coverage.svh | 86 + .../src/fuse_ctrl_lc_otp_in_typedefs.svh | 34 + .../src/fuse_ctrl_lc_otp_in_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_lc_otp_in_interface.yaml | 57 + .../fuse_ctrl_lc_otp_out_if_pkg/.project | 30 + .../fuse_ctrl_lc_otp_out_if_pkg/.svproject | 16 + .../fuse_ctrl_lc_otp_out_if_pkg/Makefile | 66 + .../fuse_ctrl_lc_otp_out_if_pkg/compile.do | 14 + .../fuse_ctrl_lc_otp_out_if.compile | 3 + .../fuse_ctrl_lc_otp_out_if_bfm.vinfo | 6 + .../fuse_ctrl_lc_otp_out_if_common.compile | 7 + .../fuse_ctrl_lc_otp_out_if_filelist_hdl.f | 1 + .../fuse_ctrl_lc_otp_out_if_filelist_hvl.f | 1 + .../fuse_ctrl_lc_otp_out_if_filelist_xrtl.f | 3 + .../fuse_ctrl_lc_otp_out_if_hdl.compile | 9 + .../fuse_ctrl_lc_otp_out_if_hvl.compile | 7 + .../fuse_ctrl_lc_otp_out_if_pkg.sv | 91 + .../fuse_ctrl_lc_otp_out_if_pkg.vinfo | 4 + .../fuse_ctrl_lc_otp_out_if_pkg_hdl.sv | 52 + .../fuse_ctrl_lc_otp_out_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_lc_otp_out_if_pkg_sve.F | 10 + .../fuse_ctrl_lc_otp_out_if2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_lc_otp_out_if_agent.svh | 67 + .../fuse_ctrl_lc_otp_out_if_configuration.svh | 193 ++ .../src/fuse_ctrl_lc_otp_out_if_driver.svh | 105 + .../src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv | 299 +++ .../src/fuse_ctrl_lc_otp_out_if_if.sv | 88 + ...lc_otp_out_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_lc_otp_out_if_macros.svh | 135 ++ .../src/fuse_ctrl_lc_otp_out_if_monitor.svh | 101 + .../fuse_ctrl_lc_otp_out_if_monitor_bfm.sv | 194 ++ ...use_ctrl_lc_otp_out_if_random_sequence.svh | 67 + ..._ctrl_lc_otp_out_if_responder_sequence.svh | 63 + .../fuse_ctrl_lc_otp_out_if_sequence_base.svh | 110 + .../fuse_ctrl_lc_otp_out_if_transaction.svh | 196 ++ ...trl_lc_otp_out_if_transaction_coverage.svh | 84 + .../src/fuse_ctrl_lc_otp_out_if_typedefs.svh | 34 + .../fuse_ctrl_lc_otp_out_if_typedefs_hdl.svh | 35 + .../fuse_ctrl_lc_otp_out_if_interface.yaml | 37 + .../fuse_ctrl_lc_otp_out_pkg/.project | 30 + .../fuse_ctrl_lc_otp_out_pkg/.svproject | 16 + .../fuse_ctrl_lc_otp_out_pkg/Makefile | 66 + .../fuse_ctrl_lc_otp_out_pkg/compile.do | 14 + .../fuse_ctrl_lc_otp_out.compile | 3 + .../fuse_ctrl_lc_otp_out_bfm.vinfo | 6 + .../fuse_ctrl_lc_otp_out_common.compile | 7 + .../fuse_ctrl_lc_otp_out_filelist_hdl.f | 1 + .../fuse_ctrl_lc_otp_out_filelist_hvl.f | 1 + .../fuse_ctrl_lc_otp_out_filelist_xrtl.f | 3 + .../fuse_ctrl_lc_otp_out_hdl.compile | 9 + .../fuse_ctrl_lc_otp_out_hvl.compile | 7 + .../fuse_ctrl_lc_otp_out_pkg.sv | 91 + .../fuse_ctrl_lc_otp_out_pkg.vinfo | 4 + .../fuse_ctrl_lc_otp_out_pkg_hdl.sv | 52 + .../fuse_ctrl_lc_otp_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_lc_otp_out_pkg_sve.F | 10 + .../src/fuse_ctrl_lc_otp_out2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_lc_otp_out_agent.svh | 67 + .../fuse_ctrl_lc_otp_out_configuration.svh | 193 ++ .../src/fuse_ctrl_lc_otp_out_driver.svh | 105 + .../src/fuse_ctrl_lc_otp_out_driver_bfm.sv | 299 +++ .../src/fuse_ctrl_lc_otp_out_if.sv | 88 + ...rl_lc_otp_out_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_lc_otp_out_macros.svh | 135 ++ .../src/fuse_ctrl_lc_otp_out_monitor.svh | 101 + .../src/fuse_ctrl_lc_otp_out_monitor_bfm.sv | 194 ++ .../fuse_ctrl_lc_otp_out_random_sequence.svh | 67 + ...use_ctrl_lc_otp_out_responder_sequence.svh | 63 + .../fuse_ctrl_lc_otp_out_sequence_base.svh | 110 + .../src/fuse_ctrl_lc_otp_out_transaction.svh | 196 ++ ...e_ctrl_lc_otp_out_transaction_coverage.svh | 84 + .../src/fuse_ctrl_lc_otp_out_typedefs.svh | 34 + .../src/fuse_ctrl_lc_otp_out_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_lc_otp_out_interface.yaml | 37 + .../fuse_ctrl_out_if_pkg/.project | 30 + .../fuse_ctrl_out_if_pkg/.svproject | 16 + .../fuse_ctrl_out_if_pkg/Makefile | 66 + .../fuse_ctrl_out_if_pkg/compile.do | 14 + .../fuse_ctrl_out_if.compile | 3 + .../fuse_ctrl_out_if_bfm.vinfo | 6 + .../fuse_ctrl_out_if_common.compile | 7 + .../fuse_ctrl_out_if_filelist_hdl.f | 1 + .../fuse_ctrl_out_if_filelist_hvl.f | 1 + .../fuse_ctrl_out_if_filelist_xrtl.f | 3 + .../fuse_ctrl_out_if_hdl.compile | 9 + .../fuse_ctrl_out_if_hvl.compile | 7 + .../fuse_ctrl_out_if_pkg.sv | 91 + .../fuse_ctrl_out_if_pkg.vinfo | 4 + .../fuse_ctrl_out_if_pkg_hdl.sv | 52 + .../fuse_ctrl_out_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_out_if_pkg_sve.F | 10 + .../src/fuse_ctrl_out_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_out_if_agent.svh | 109 + .../src/fuse_ctrl_out_if_configuration.svh | 241 +++ .../src/fuse_ctrl_out_if_driver.svh | 141 ++ .../src/fuse_ctrl_out_if_driver_bfm.sv | 382 ++++ .../src/fuse_ctrl_out_if_if.sv | 134 ++ ...e_ctrl_out_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_out_if_macros.svh | 135 ++ .../src/fuse_ctrl_out_if_monitor.svh | 131 ++ .../src/fuse_ctrl_out_if_monitor_bfm.sv | 230 +++ .../src/fuse_ctrl_out_if_random_sequence.svh | 91 + .../fuse_ctrl_out_if_responder_sequence.svh | 87 + .../src/fuse_ctrl_out_if_sequence_base.svh | 146 ++ .../src/fuse_ctrl_out_if_transaction.svh | 223 +++ .../fuse_ctrl_out_if_transaction_coverage.svh | 103 + .../src/fuse_ctrl_out_if_typedefs.svh | 34 + .../src/fuse_ctrl_out_if_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_out_if_interface.yaml | 80 + .../fuse_ctrl_out_pkg/.project | 30 + .../fuse_ctrl_out_pkg/.svproject | 16 + .../fuse_ctrl_out_pkg/Makefile | 66 + .../fuse_ctrl_out_pkg/compile.do | 14 + .../fuse_ctrl_out_pkg/fuse_ctrl_out.compile | 3 + .../fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo | 6 + .../fuse_ctrl_out_common.compile | 7 + .../fuse_ctrl_out_filelist_hdl.f | 1 + .../fuse_ctrl_out_filelist_hvl.f | 1 + .../fuse_ctrl_out_filelist_xrtl.f | 3 + .../fuse_ctrl_out_hdl.compile | 9 + .../fuse_ctrl_out_hvl.compile | 7 + .../fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv | 91 + .../fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo | 4 + .../fuse_ctrl_out_pkg_hdl.sv | 52 + .../fuse_ctrl_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F | 10 + .../src/fuse_ctrl_out2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_out_agent.svh | 109 + .../src/fuse_ctrl_out_configuration.svh | 241 +++ .../src/fuse_ctrl_out_driver.svh | 141 ++ .../src/fuse_ctrl_out_driver_bfm.sv | 382 ++++ .../fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv | 134 ++ ...fuse_ctrl_out_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_out_macros.svh | 135 ++ .../src/fuse_ctrl_out_monitor.svh | 131 ++ .../src/fuse_ctrl_out_monitor_bfm.sv | 230 +++ .../src/fuse_ctrl_out_random_sequence.svh | 91 + .../src/fuse_ctrl_out_responder_sequence.svh | 87 + .../src/fuse_ctrl_out_sequence_base.svh | 146 ++ .../src/fuse_ctrl_out_transaction.svh | 223 +++ .../fuse_ctrl_out_transaction_coverage.svh | 103 + .../src/fuse_ctrl_out_typedefs.svh | 34 + .../src/fuse_ctrl_out_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_out_interface.yaml | 80 + .../fuse_ctrl_prim_axi_read_if_pkg/.project | 30 + .../fuse_ctrl_prim_axi_read_if_pkg/.svproject | 16 + .../fuse_ctrl_prim_axi_read_if_pkg/Makefile | 66 + .../fuse_ctrl_prim_axi_read_if_pkg/compile.do | 14 + .../fuse_ctrl_prim_axi_read_if.compile | 3 + .../fuse_ctrl_prim_axi_read_if_bfm.vinfo | 6 + .../fuse_ctrl_prim_axi_read_if_common.compile | 7 + .../fuse_ctrl_prim_axi_read_if_filelist_hdl.f | 1 + .../fuse_ctrl_prim_axi_read_if_filelist_hvl.f | 1 + ...fuse_ctrl_prim_axi_read_if_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_read_if_hdl.compile | 9 + .../fuse_ctrl_prim_axi_read_if_hvl.compile | 7 + .../fuse_ctrl_prim_axi_read_if_pkg.sv | 91 + .../fuse_ctrl_prim_axi_read_if_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_read_if_pkg_hdl.sv | 52 + .../fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_read_if_pkg_sve.F | 10 + ...fuse_ctrl_prim_axi_read_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_prim_axi_read_if_agent.svh | 109 + ...se_ctrl_prim_axi_read_if_configuration.svh | 241 +++ .../src/fuse_ctrl_prim_axi_read_if_driver.svh | 141 ++ .../fuse_ctrl_prim_axi_read_if_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_prim_axi_read_if_if.sv | 124 ++ ...m_axi_read_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_prim_axi_read_if_macros.svh | 207 ++ .../fuse_ctrl_prim_axi_read_if_monitor.svh | 131 ++ .../fuse_ctrl_prim_axi_read_if_monitor_bfm.sv | 232 +++ ..._ctrl_prim_axi_read_if_random_sequence.svh | 91 + ...rl_prim_axi_read_if_responder_sequence.svh | 87 + ...se_ctrl_prim_axi_read_if_sequence_base.svh | 146 ++ ...fuse_ctrl_prim_axi_read_if_transaction.svh | 243 +++ ..._prim_axi_read_if_transaction_coverage.svh | 110 + .../fuse_ctrl_prim_axi_read_if_typedefs.svh | 34 + ...use_ctrl_prim_axi_read_if_typedefs_hdl.svh | 35 + .../fuse_ctrl_prim_axi_read_if_interface.yaml | 121 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_read_in_if.compile | 3 + .../fuse_ctrl_prim_axi_read_in_if_bfm.vinfo | 6 + ...se_ctrl_prim_axi_read_in_if_common.compile | 7 + ...se_ctrl_prim_axi_read_in_if_filelist_hdl.f | 1 + ...se_ctrl_prim_axi_read_in_if_filelist_hvl.f | 1 + ...e_ctrl_prim_axi_read_in_if_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_read_in_if_hdl.compile | 9 + .../fuse_ctrl_prim_axi_read_in_if_hvl.compile | 7 + .../fuse_ctrl_prim_axi_read_in_if_pkg.sv | 91 + .../fuse_ctrl_prim_axi_read_in_if_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv | 52 + ...use_ctrl_prim_axi_read_in_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_read_in_if_pkg_sve.F | 10 + ...e_ctrl_prim_axi_read_in_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_prim_axi_read_in_if_agent.svh | 109 + ...ctrl_prim_axi_read_in_if_configuration.svh | 241 +++ .../fuse_ctrl_prim_axi_read_in_if_driver.svh | 141 ++ ...use_ctrl_prim_axi_read_in_if_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_prim_axi_read_in_if_if.sv | 124 ++ ...xi_read_in_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_prim_axi_read_in_if_macros.svh | 207 ++ .../fuse_ctrl_prim_axi_read_in_if_monitor.svh | 131 ++ ...se_ctrl_prim_axi_read_in_if_monitor_bfm.sv | 232 +++ ...rl_prim_axi_read_in_if_random_sequence.svh | 91 + ...prim_axi_read_in_if_responder_sequence.svh | 87 + ...ctrl_prim_axi_read_in_if_sequence_base.svh | 146 ++ ...e_ctrl_prim_axi_read_in_if_transaction.svh | 243 +++ ...im_axi_read_in_if_transaction_coverage.svh | 110 + ...fuse_ctrl_prim_axi_read_in_if_typedefs.svh | 34 + ..._ctrl_prim_axi_read_in_if_typedefs_hdl.svh | 35 + ...se_ctrl_prim_axi_read_in_if_interface.yaml | 121 ++ .../fuse_ctrl_prim_axi_read_in_pkg/.project | 30 + .../fuse_ctrl_prim_axi_read_in_pkg/.svproject | 16 + .../fuse_ctrl_prim_axi_read_in_pkg/Makefile | 66 + .../fuse_ctrl_prim_axi_read_in_pkg/compile.do | 14 + .../fuse_ctrl_prim_axi_read_in.compile | 3 + .../fuse_ctrl_prim_axi_read_in_bfm.vinfo | 6 + .../fuse_ctrl_prim_axi_read_in_common.compile | 7 + .../fuse_ctrl_prim_axi_read_in_filelist_hdl.f | 1 + .../fuse_ctrl_prim_axi_read_in_filelist_hvl.f | 1 + ...fuse_ctrl_prim_axi_read_in_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_read_in_hdl.compile | 9 + .../fuse_ctrl_prim_axi_read_in_hvl.compile | 7 + .../fuse_ctrl_prim_axi_read_in_pkg.sv | 91 + .../fuse_ctrl_prim_axi_read_in_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_read_in_pkg_hdl.sv | 52 + .../fuse_ctrl_prim_axi_read_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_read_in_pkg_sve.F | 10 + ...fuse_ctrl_prim_axi_read_in2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_prim_axi_read_in_agent.svh | 109 + ...se_ctrl_prim_axi_read_in_configuration.svh | 241 +++ .../src/fuse_ctrl_prim_axi_read_in_driver.svh | 141 ++ .../fuse_ctrl_prim_axi_read_in_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_prim_axi_read_in_if.sv | 124 ++ ...m_axi_read_in_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_prim_axi_read_in_macros.svh | 207 ++ .../fuse_ctrl_prim_axi_read_in_monitor.svh | 131 ++ .../fuse_ctrl_prim_axi_read_in_monitor_bfm.sv | 232 +++ ..._ctrl_prim_axi_read_in_random_sequence.svh | 91 + ...rl_prim_axi_read_in_responder_sequence.svh | 87 + ...se_ctrl_prim_axi_read_in_sequence_base.svh | 146 ++ ...fuse_ctrl_prim_axi_read_in_transaction.svh | 243 +++ ..._prim_axi_read_in_transaction_coverage.svh | 110 + .../fuse_ctrl_prim_axi_read_in_typedefs.svh | 34 + ...use_ctrl_prim_axi_read_in_typedefs_hdl.svh | 35 + .../fuse_ctrl_prim_axi_read_in_interface.yaml | 121 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_read_out_if.compile | 3 + .../fuse_ctrl_prim_axi_read_out_if_bfm.vinfo | 6 + ...e_ctrl_prim_axi_read_out_if_common.compile | 7 + ...e_ctrl_prim_axi_read_out_if_filelist_hdl.f | 1 + ...e_ctrl_prim_axi_read_out_if_filelist_hvl.f | 1 + ..._ctrl_prim_axi_read_out_if_filelist_xrtl.f | 3 + ...fuse_ctrl_prim_axi_read_out_if_hdl.compile | 9 + ...fuse_ctrl_prim_axi_read_out_if_hvl.compile | 7 + .../fuse_ctrl_prim_axi_read_out_if_pkg.sv | 91 + .../fuse_ctrl_prim_axi_read_out_if_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv | 52 + ...se_ctrl_prim_axi_read_out_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_read_out_if_pkg_sve.F | 10 + ..._ctrl_prim_axi_read_out_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_prim_axi_read_out_if_agent.svh | 109 + ...trl_prim_axi_read_out_if_configuration.svh | 241 +++ .../fuse_ctrl_prim_axi_read_out_if_driver.svh | 141 ++ ...se_ctrl_prim_axi_read_out_if_driver_bfm.sv | 352 ++++ .../src/fuse_ctrl_prim_axi_read_out_if_if.sv | 109 + ...i_read_out_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_prim_axi_read_out_if_macros.svh | 180 ++ ...fuse_ctrl_prim_axi_read_out_if_monitor.svh | 131 ++ ...e_ctrl_prim_axi_read_out_if_monitor_bfm.sv | 220 ++ ...l_prim_axi_read_out_if_random_sequence.svh | 91 + ...rim_axi_read_out_if_responder_sequence.svh | 87 + ...trl_prim_axi_read_out_if_sequence_base.svh | 146 ++ ..._ctrl_prim_axi_read_out_if_transaction.svh | 240 +++ ...m_axi_read_out_if_transaction_coverage.svh | 107 + ...use_ctrl_prim_axi_read_out_if_typedefs.svh | 34 + ...ctrl_prim_axi_read_out_if_typedefs_hdl.svh | 35 + ...e_ctrl_prim_axi_read_out_if_interface.yaml | 91 + .../fuse_ctrl_prim_axi_read_out_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_prim_axi_read_out_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_read_out.compile | 3 + .../fuse_ctrl_prim_axi_read_out_bfm.vinfo | 6 + ...fuse_ctrl_prim_axi_read_out_common.compile | 7 + ...fuse_ctrl_prim_axi_read_out_filelist_hdl.f | 1 + ...fuse_ctrl_prim_axi_read_out_filelist_hvl.f | 1 + ...use_ctrl_prim_axi_read_out_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_read_out_hdl.compile | 9 + .../fuse_ctrl_prim_axi_read_out_hvl.compile | 7 + .../fuse_ctrl_prim_axi_read_out_pkg.sv | 91 + .../fuse_ctrl_prim_axi_read_out_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_read_out_pkg_hdl.sv | 52 + .../fuse_ctrl_prim_axi_read_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_read_out_pkg_sve.F | 10 + ...use_ctrl_prim_axi_read_out2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_prim_axi_read_out_agent.svh | 109 + ...e_ctrl_prim_axi_read_out_configuration.svh | 241 +++ .../fuse_ctrl_prim_axi_read_out_driver.svh | 141 ++ .../fuse_ctrl_prim_axi_read_out_driver_bfm.sv | 352 ++++ .../src/fuse_ctrl_prim_axi_read_out_if.sv | 109 + ..._axi_read_out_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_prim_axi_read_out_macros.svh | 180 ++ .../fuse_ctrl_prim_axi_read_out_monitor.svh | 131 ++ ...fuse_ctrl_prim_axi_read_out_monitor_bfm.sv | 220 ++ ...ctrl_prim_axi_read_out_random_sequence.svh | 91 + ...l_prim_axi_read_out_responder_sequence.svh | 87 + ...e_ctrl_prim_axi_read_out_sequence_base.svh | 146 ++ ...use_ctrl_prim_axi_read_out_transaction.svh | 240 +++ ...prim_axi_read_out_transaction_coverage.svh | 107 + .../fuse_ctrl_prim_axi_read_out_typedefs.svh | 34 + ...se_ctrl_prim_axi_read_out_typedefs_hdl.svh | 35 + ...fuse_ctrl_prim_axi_read_out_interface.yaml | 91 + .../fuse_ctrl_prim_axi_write_if_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_prim_axi_write_if_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_write_if.compile | 3 + .../fuse_ctrl_prim_axi_write_if_bfm.vinfo | 6 + ...fuse_ctrl_prim_axi_write_if_common.compile | 7 + ...fuse_ctrl_prim_axi_write_if_filelist_hdl.f | 1 + ...fuse_ctrl_prim_axi_write_if_filelist_hvl.f | 1 + ...use_ctrl_prim_axi_write_if_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_write_if_hdl.compile | 9 + .../fuse_ctrl_prim_axi_write_if_hvl.compile | 7 + .../fuse_ctrl_prim_axi_write_if_pkg.sv | 91 + .../fuse_ctrl_prim_axi_write_if_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_write_if_pkg_hdl.sv | 52 + .../fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_write_if_pkg_sve.F | 10 + ...use_ctrl_prim_axi_write_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_prim_axi_write_if_agent.svh | 109 + ...e_ctrl_prim_axi_write_if_configuration.svh | 241 +++ .../fuse_ctrl_prim_axi_write_if_driver.svh | 141 ++ .../fuse_ctrl_prim_axi_write_if_driver_bfm.sv | 429 ++++ .../src/fuse_ctrl_prim_axi_write_if_if.sv | 144 ++ ..._axi_write_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_prim_axi_write_if_macros.svh | 243 +++ .../fuse_ctrl_prim_axi_write_if_monitor.svh | 131 ++ ...fuse_ctrl_prim_axi_write_if_monitor_bfm.sv | 248 +++ ...ctrl_prim_axi_write_if_random_sequence.svh | 91 + ...l_prim_axi_write_if_responder_sequence.svh | 87 + ...e_ctrl_prim_axi_write_if_sequence_base.svh | 146 ++ ...use_ctrl_prim_axi_write_if_transaction.svh | 256 +++ ...prim_axi_write_if_transaction_coverage.svh | 114 ++ .../fuse_ctrl_prim_axi_write_if_typedefs.svh | 34 + ...se_ctrl_prim_axi_write_if_typedefs_hdl.svh | 35 + ...fuse_ctrl_prim_axi_write_if_interface.yaml | 161 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_write_in_if.compile | 3 + .../fuse_ctrl_prim_axi_write_in_if_bfm.vinfo | 6 + ...e_ctrl_prim_axi_write_in_if_common.compile | 7 + ...e_ctrl_prim_axi_write_in_if_filelist_hdl.f | 1 + ...e_ctrl_prim_axi_write_in_if_filelist_hvl.f | 1 + ..._ctrl_prim_axi_write_in_if_filelist_xrtl.f | 3 + ...fuse_ctrl_prim_axi_write_in_if_hdl.compile | 9 + ...fuse_ctrl_prim_axi_write_in_if_hvl.compile | 7 + .../fuse_ctrl_prim_axi_write_in_if_pkg.sv | 91 + .../fuse_ctrl_prim_axi_write_in_if_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv | 52 + ...se_ctrl_prim_axi_write_in_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_write_in_if_pkg_sve.F | 10 + ..._ctrl_prim_axi_write_in_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_prim_axi_write_in_if_agent.svh | 109 + ...trl_prim_axi_write_in_if_configuration.svh | 241 +++ .../fuse_ctrl_prim_axi_write_in_if_driver.svh | 141 ++ ...se_ctrl_prim_axi_write_in_if_driver_bfm.sv | 429 ++++ .../src/fuse_ctrl_prim_axi_write_in_if_if.sv | 144 ++ ...i_write_in_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_prim_axi_write_in_if_macros.svh | 243 +++ ...fuse_ctrl_prim_axi_write_in_if_monitor.svh | 131 ++ ...e_ctrl_prim_axi_write_in_if_monitor_bfm.sv | 248 +++ ...l_prim_axi_write_in_if_random_sequence.svh | 91 + ...rim_axi_write_in_if_responder_sequence.svh | 87 + ...trl_prim_axi_write_in_if_sequence_base.svh | 146 ++ ..._ctrl_prim_axi_write_in_if_transaction.svh | 256 +++ ...m_axi_write_in_if_transaction_coverage.svh | 114 ++ ...use_ctrl_prim_axi_write_in_if_typedefs.svh | 34 + ...ctrl_prim_axi_write_in_if_typedefs_hdl.svh | 35 + ...e_ctrl_prim_axi_write_in_if_interface.yaml | 161 ++ .../fuse_ctrl_prim_axi_write_in_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_prim_axi_write_in_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_write_in.compile | 3 + .../fuse_ctrl_prim_axi_write_in_bfm.vinfo | 6 + ...fuse_ctrl_prim_axi_write_in_common.compile | 7 + ...fuse_ctrl_prim_axi_write_in_filelist_hdl.f | 1 + ...fuse_ctrl_prim_axi_write_in_filelist_hvl.f | 1 + ...use_ctrl_prim_axi_write_in_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_write_in_hdl.compile | 9 + .../fuse_ctrl_prim_axi_write_in_hvl.compile | 7 + .../fuse_ctrl_prim_axi_write_in_pkg.sv | 91 + .../fuse_ctrl_prim_axi_write_in_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_write_in_pkg_hdl.sv | 52 + .../fuse_ctrl_prim_axi_write_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_write_in_pkg_sve.F | 10 + ...use_ctrl_prim_axi_write_in2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_prim_axi_write_in_agent.svh | 109 + ...e_ctrl_prim_axi_write_in_configuration.svh | 241 +++ .../fuse_ctrl_prim_axi_write_in_driver.svh | 141 ++ .../fuse_ctrl_prim_axi_write_in_driver_bfm.sv | 429 ++++ .../src/fuse_ctrl_prim_axi_write_in_if.sv | 144 ++ ..._axi_write_in_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_prim_axi_write_in_macros.svh | 243 +++ .../fuse_ctrl_prim_axi_write_in_monitor.svh | 131 ++ ...fuse_ctrl_prim_axi_write_in_monitor_bfm.sv | 248 +++ ...ctrl_prim_axi_write_in_random_sequence.svh | 91 + ...l_prim_axi_write_in_responder_sequence.svh | 87 + ...e_ctrl_prim_axi_write_in_sequence_base.svh | 146 ++ ...use_ctrl_prim_axi_write_in_transaction.svh | 256 +++ ...prim_axi_write_in_transaction_coverage.svh | 114 ++ .../fuse_ctrl_prim_axi_write_in_typedefs.svh | 34 + ...se_ctrl_prim_axi_write_in_typedefs_hdl.svh | 35 + ...fuse_ctrl_prim_axi_write_in_interface.yaml | 161 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_write_out_if.compile | 3 + .../fuse_ctrl_prim_axi_write_out_if_bfm.vinfo | 6 + ..._ctrl_prim_axi_write_out_if_common.compile | 7 + ..._ctrl_prim_axi_write_out_if_filelist_hdl.f | 1 + ..._ctrl_prim_axi_write_out_if_filelist_hvl.f | 1 + ...ctrl_prim_axi_write_out_if_filelist_xrtl.f | 3 + ...use_ctrl_prim_axi_write_out_if_hdl.compile | 9 + ...use_ctrl_prim_axi_write_out_if_hvl.compile | 7 + .../fuse_ctrl_prim_axi_write_out_if_pkg.sv | 91 + .../fuse_ctrl_prim_axi_write_out_if_pkg.vinfo | 4 + ...fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv | 52 + ...e_ctrl_prim_axi_write_out_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_write_out_if_pkg_sve.F | 10 + ...ctrl_prim_axi_write_out_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_prim_axi_write_out_if_agent.svh | 109 + ...rl_prim_axi_write_out_if_configuration.svh | 241 +++ ...fuse_ctrl_prim_axi_write_out_if_driver.svh | 141 ++ ...e_ctrl_prim_axi_write_out_if_driver_bfm.sv | 341 ++++ .../src/fuse_ctrl_prim_axi_write_out_if_if.sv | 104 + ..._write_out_if_infact_coverage_strategy.csv | 6 + ...fuse_ctrl_prim_axi_write_out_if_macros.svh | 171 ++ ...use_ctrl_prim_axi_write_out_if_monitor.svh | 131 ++ ..._ctrl_prim_axi_write_out_if_monitor_bfm.sv | 216 ++ ..._prim_axi_write_out_if_random_sequence.svh | 91 + ...im_axi_write_out_if_responder_sequence.svh | 87 + ...rl_prim_axi_write_out_if_sequence_base.svh | 146 ++ ...ctrl_prim_axi_write_out_if_transaction.svh | 236 +++ ..._axi_write_out_if_transaction_coverage.svh | 106 + ...se_ctrl_prim_axi_write_out_if_typedefs.svh | 34 + ...trl_prim_axi_write_out_if_typedefs_hdl.svh | 35 + ..._ctrl_prim_axi_write_out_if_interface.yaml | 81 + .../fuse_ctrl_prim_axi_write_out_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_prim_axi_write_out_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_write_out.compile | 3 + .../fuse_ctrl_prim_axi_write_out_bfm.vinfo | 6 + ...use_ctrl_prim_axi_write_out_common.compile | 7 + ...use_ctrl_prim_axi_write_out_filelist_hdl.f | 1 + ...use_ctrl_prim_axi_write_out_filelist_hvl.f | 1 + ...se_ctrl_prim_axi_write_out_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_write_out_hdl.compile | 9 + .../fuse_ctrl_prim_axi_write_out_hvl.compile | 7 + .../fuse_ctrl_prim_axi_write_out_pkg.sv | 91 + .../fuse_ctrl_prim_axi_write_out_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_write_out_pkg_hdl.sv | 52 + ...fuse_ctrl_prim_axi_write_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_write_out_pkg_sve.F | 10 + ...se_ctrl_prim_axi_write_out2reg_adapter.svh | 142 ++ .../fuse_ctrl_prim_axi_write_out_agent.svh | 109 + ..._ctrl_prim_axi_write_out_configuration.svh | 241 +++ .../fuse_ctrl_prim_axi_write_out_driver.svh | 141 ++ ...fuse_ctrl_prim_axi_write_out_driver_bfm.sv | 341 ++++ .../src/fuse_ctrl_prim_axi_write_out_if.sv | 104 + ...axi_write_out_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_prim_axi_write_out_macros.svh | 171 ++ .../fuse_ctrl_prim_axi_write_out_monitor.svh | 131 ++ ...use_ctrl_prim_axi_write_out_monitor_bfm.sv | 216 ++ ...trl_prim_axi_write_out_random_sequence.svh | 91 + ..._prim_axi_write_out_responder_sequence.svh | 87 + ..._ctrl_prim_axi_write_out_sequence_base.svh | 146 ++ ...se_ctrl_prim_axi_write_out_transaction.svh | 236 +++ ...rim_axi_write_out_transaction_coverage.svh | 106 + .../fuse_ctrl_prim_axi_write_out_typedefs.svh | 34 + ...e_ctrl_prim_axi_write_out_typedefs_hdl.svh | 35 + ...use_ctrl_prim_axi_write_out_interface.yaml | 81 + .../fuse_ctrl_rst_pkg/.project | 30 + .../fuse_ctrl_rst_pkg/.svproject | 16 + .../fuse_ctrl_rst_pkg/Makefile | 66 + .../fuse_ctrl_rst_pkg/compile.do | 14 + .../fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile | 3 + .../fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo | 6 + .../fuse_ctrl_rst_common.compile | 7 + .../fuse_ctrl_rst_filelist_hdl.f | 1 + .../fuse_ctrl_rst_filelist_hvl.f | 1 + .../fuse_ctrl_rst_filelist_xrtl.f | 3 + .../fuse_ctrl_rst_hdl.compile | 9 + .../fuse_ctrl_rst_hvl.compile | 7 + .../fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv | 91 + .../fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo | 4 + .../fuse_ctrl_rst_pkg_hdl.sv | 52 + .../fuse_ctrl_rst_pkg_hdl.vinfo | 2 + .../fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F | 10 + .../src/fuse_ctrl_rst2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_rst_agent.svh | 67 + .../src/fuse_ctrl_rst_configuration.svh | 193 ++ .../src/fuse_ctrl_rst_driver.svh | 105 + .../src/fuse_ctrl_rst_driver_bfm.sv | 296 +++ .../fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv | 83 + ...fuse_ctrl_rst_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_rst_macros.svh | 144 ++ .../src/fuse_ctrl_rst_monitor.svh | 101 + .../src/fuse_ctrl_rst_monitor_bfm.sv | 192 ++ .../src/fuse_ctrl_rst_random_sequence.svh | 67 + .../src/fuse_ctrl_rst_responder_sequence.svh | 63 + .../src/fuse_ctrl_rst_sequence_base.svh | 110 + .../src/fuse_ctrl_rst_transaction.svh | 198 ++ .../fuse_ctrl_rst_transaction_coverage.svh | 85 + .../src/fuse_ctrl_rst_typedefs.svh | 34 + .../src/fuse_ctrl_rst_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_rst_interface.yaml | 39 + .../fuse_ctrl_secreg_axi_read_if_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_secreg_axi_read_if_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_secreg_axi_read_if.compile | 3 + .../fuse_ctrl_secreg_axi_read_if_bfm.vinfo | 6 + ...use_ctrl_secreg_axi_read_if_common.compile | 7 + ...use_ctrl_secreg_axi_read_if_filelist_hdl.f | 1 + ...use_ctrl_secreg_axi_read_if_filelist_hvl.f | 1 + ...se_ctrl_secreg_axi_read_if_filelist_xrtl.f | 3 + .../fuse_ctrl_secreg_axi_read_if_hdl.compile | 9 + .../fuse_ctrl_secreg_axi_read_if_hvl.compile | 7 + .../fuse_ctrl_secreg_axi_read_if_pkg.sv | 91 + .../fuse_ctrl_secreg_axi_read_if_pkg.vinfo | 4 + .../fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv | 52 + ...fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_secreg_axi_read_if_pkg_sve.F | 10 + ...se_ctrl_secreg_axi_read_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_secreg_axi_read_if_agent.svh | 109 + ..._ctrl_secreg_axi_read_if_configuration.svh | 241 +++ .../fuse_ctrl_secreg_axi_read_if_driver.svh | 141 ++ ...fuse_ctrl_secreg_axi_read_if_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_secreg_axi_read_if_if.sv | 124 ++ ...g_axi_read_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_secreg_axi_read_if_macros.svh | 207 ++ .../fuse_ctrl_secreg_axi_read_if_monitor.svh | 131 ++ ...use_ctrl_secreg_axi_read_if_monitor_bfm.sv | 232 +++ ...trl_secreg_axi_read_if_random_sequence.svh | 91 + ..._secreg_axi_read_if_responder_sequence.svh | 87 + ..._ctrl_secreg_axi_read_if_sequence_base.svh | 146 ++ ...se_ctrl_secreg_axi_read_if_transaction.svh | 243 +++ ...ecreg_axi_read_if_transaction_coverage.svh | 110 + .../fuse_ctrl_secreg_axi_read_if_typedefs.svh | 34 + ...e_ctrl_secreg_axi_read_if_typedefs_hdl.svh | 35 + ...use_ctrl_secreg_axi_read_if_interface.yaml | 121 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_secreg_axi_read_in_if.compile | 3 + .../fuse_ctrl_secreg_axi_read_in_if_bfm.vinfo | 6 + ..._ctrl_secreg_axi_read_in_if_common.compile | 7 + ..._ctrl_secreg_axi_read_in_if_filelist_hdl.f | 1 + ..._ctrl_secreg_axi_read_in_if_filelist_hvl.f | 1 + ...ctrl_secreg_axi_read_in_if_filelist_xrtl.f | 3 + ...use_ctrl_secreg_axi_read_in_if_hdl.compile | 9 + ...use_ctrl_secreg_axi_read_in_if_hvl.compile | 7 + .../fuse_ctrl_secreg_axi_read_in_if_pkg.sv | 91 + .../fuse_ctrl_secreg_axi_read_in_if_pkg.vinfo | 4 + ...fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv | 52 + ...e_ctrl_secreg_axi_read_in_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_secreg_axi_read_in_if_pkg_sve.F | 10 + ...ctrl_secreg_axi_read_in_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_secreg_axi_read_in_if_agent.svh | 109 + ...rl_secreg_axi_read_in_if_configuration.svh | 241 +++ ...fuse_ctrl_secreg_axi_read_in_if_driver.svh | 141 ++ ...e_ctrl_secreg_axi_read_in_if_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_secreg_axi_read_in_if_if.sv | 124 ++ ...xi_read_in_if_infact_coverage_strategy.csv | 6 + ...fuse_ctrl_secreg_axi_read_in_if_macros.svh | 207 ++ ...use_ctrl_secreg_axi_read_in_if_monitor.svh | 131 ++ ..._ctrl_secreg_axi_read_in_if_monitor_bfm.sv | 232 +++ ..._secreg_axi_read_in_if_random_sequence.svh | 91 + ...creg_axi_read_in_if_responder_sequence.svh | 87 + ...rl_secreg_axi_read_in_if_sequence_base.svh | 146 ++ ...ctrl_secreg_axi_read_in_if_transaction.svh | 243 +++ ...eg_axi_read_in_if_transaction_coverage.svh | 110 + ...se_ctrl_secreg_axi_read_in_if_typedefs.svh | 34 + ...trl_secreg_axi_read_in_if_typedefs_hdl.svh | 35 + ..._ctrl_secreg_axi_read_in_if_interface.yaml | 121 ++ .../fuse_ctrl_secreg_axi_read_in_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_secreg_axi_read_in_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_secreg_axi_read_in.compile | 3 + .../fuse_ctrl_secreg_axi_read_in_bfm.vinfo | 6 + ...use_ctrl_secreg_axi_read_in_common.compile | 7 + ...use_ctrl_secreg_axi_read_in_filelist_hdl.f | 1 + ...use_ctrl_secreg_axi_read_in_filelist_hvl.f | 1 + ...se_ctrl_secreg_axi_read_in_filelist_xrtl.f | 3 + .../fuse_ctrl_secreg_axi_read_in_hdl.compile | 9 + .../fuse_ctrl_secreg_axi_read_in_hvl.compile | 7 + .../fuse_ctrl_secreg_axi_read_in_pkg.sv | 91 + .../fuse_ctrl_secreg_axi_read_in_pkg.vinfo | 4 + .../fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv | 52 + ...fuse_ctrl_secreg_axi_read_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_secreg_axi_read_in_pkg_sve.F | 10 + ...se_ctrl_secreg_axi_read_in2reg_adapter.svh | 142 ++ .../fuse_ctrl_secreg_axi_read_in_agent.svh | 109 + ..._ctrl_secreg_axi_read_in_configuration.svh | 241 +++ .../fuse_ctrl_secreg_axi_read_in_driver.svh | 141 ++ ...fuse_ctrl_secreg_axi_read_in_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_secreg_axi_read_in_if.sv | 124 ++ ...g_axi_read_in_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_secreg_axi_read_in_macros.svh | 207 ++ .../fuse_ctrl_secreg_axi_read_in_monitor.svh | 131 ++ ...use_ctrl_secreg_axi_read_in_monitor_bfm.sv | 232 +++ ...trl_secreg_axi_read_in_random_sequence.svh | 91 + ..._secreg_axi_read_in_responder_sequence.svh | 87 + ..._ctrl_secreg_axi_read_in_sequence_base.svh | 146 ++ ...se_ctrl_secreg_axi_read_in_transaction.svh | 243 +++ ...ecreg_axi_read_in_transaction_coverage.svh | 110 + .../fuse_ctrl_secreg_axi_read_in_typedefs.svh | 34 + ...e_ctrl_secreg_axi_read_in_typedefs_hdl.svh | 35 + ...use_ctrl_secreg_axi_read_in_interface.yaml | 121 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_secreg_axi_read_out_if.compile | 3 + ...fuse_ctrl_secreg_axi_read_out_if_bfm.vinfo | 6 + ...ctrl_secreg_axi_read_out_if_common.compile | 7 + ...ctrl_secreg_axi_read_out_if_filelist_hdl.f | 1 + ...ctrl_secreg_axi_read_out_if_filelist_hvl.f | 1 + ...trl_secreg_axi_read_out_if_filelist_xrtl.f | 3 + ...se_ctrl_secreg_axi_read_out_if_hdl.compile | 9 + ...se_ctrl_secreg_axi_read_out_if_hvl.compile | 7 + .../fuse_ctrl_secreg_axi_read_out_if_pkg.sv | 91 + ...fuse_ctrl_secreg_axi_read_out_if_pkg.vinfo | 4 + ...use_ctrl_secreg_axi_read_out_if_pkg_hdl.sv | 52 + ..._ctrl_secreg_axi_read_out_if_pkg_hdl.vinfo | 2 + ...fuse_ctrl_secreg_axi_read_out_if_pkg_sve.F | 10 + ...trl_secreg_axi_read_out_if2reg_adapter.svh | 142 ++ ...fuse_ctrl_secreg_axi_read_out_if_agent.svh | 109 + ...l_secreg_axi_read_out_if_configuration.svh | 241 +++ ...use_ctrl_secreg_axi_read_out_if_driver.svh | 141 ++ ..._ctrl_secreg_axi_read_out_if_driver_bfm.sv | 352 ++++ .../fuse_ctrl_secreg_axi_read_out_if_if.sv | 109 + ...i_read_out_if_infact_coverage_strategy.csv | 6 + ...use_ctrl_secreg_axi_read_out_if_macros.svh | 180 ++ ...se_ctrl_secreg_axi_read_out_if_monitor.svh | 131 ++ ...ctrl_secreg_axi_read_out_if_monitor_bfm.sv | 220 ++ ...secreg_axi_read_out_if_random_sequence.svh | 91 + ...reg_axi_read_out_if_responder_sequence.svh | 87 + ...l_secreg_axi_read_out_if_sequence_base.svh | 146 ++ ...trl_secreg_axi_read_out_if_transaction.svh | 240 +++ ...g_axi_read_out_if_transaction_coverage.svh | 107 + ...e_ctrl_secreg_axi_read_out_if_typedefs.svh | 34 + ...rl_secreg_axi_read_out_if_typedefs_hdl.svh | 35 + ...ctrl_secreg_axi_read_out_if_interface.yaml | 91 + .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_secreg_axi_read_out.compile | 3 + .../fuse_ctrl_secreg_axi_read_out_bfm.vinfo | 6 + ...se_ctrl_secreg_axi_read_out_common.compile | 7 + ...se_ctrl_secreg_axi_read_out_filelist_hdl.f | 1 + ...se_ctrl_secreg_axi_read_out_filelist_hvl.f | 1 + ...e_ctrl_secreg_axi_read_out_filelist_xrtl.f | 3 + .../fuse_ctrl_secreg_axi_read_out_hdl.compile | 9 + .../fuse_ctrl_secreg_axi_read_out_hvl.compile | 7 + .../fuse_ctrl_secreg_axi_read_out_pkg.sv | 91 + .../fuse_ctrl_secreg_axi_read_out_pkg.vinfo | 4 + .../fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv | 52 + ...use_ctrl_secreg_axi_read_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_secreg_axi_read_out_pkg_sve.F | 10 + ...e_ctrl_secreg_axi_read_out2reg_adapter.svh | 142 ++ .../fuse_ctrl_secreg_axi_read_out_agent.svh | 109 + ...ctrl_secreg_axi_read_out_configuration.svh | 241 +++ .../fuse_ctrl_secreg_axi_read_out_driver.svh | 141 ++ ...use_ctrl_secreg_axi_read_out_driver_bfm.sv | 352 ++++ .../src/fuse_ctrl_secreg_axi_read_out_if.sv | 109 + ..._axi_read_out_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_secreg_axi_read_out_macros.svh | 180 ++ .../fuse_ctrl_secreg_axi_read_out_monitor.svh | 131 ++ ...se_ctrl_secreg_axi_read_out_monitor_bfm.sv | 220 ++ ...rl_secreg_axi_read_out_random_sequence.svh | 91 + ...secreg_axi_read_out_responder_sequence.svh | 87 + ...ctrl_secreg_axi_read_out_sequence_base.svh | 146 ++ ...e_ctrl_secreg_axi_read_out_transaction.svh | 240 +++ ...creg_axi_read_out_transaction_coverage.svh | 107 + ...fuse_ctrl_secreg_axi_read_out_typedefs.svh | 34 + ..._ctrl_secreg_axi_read_out_typedefs_hdl.svh | 35 + ...se_ctrl_secreg_axi_read_out_interface.yaml | 91 + .../prim_axi_read_if_pkg/.project | 30 + .../prim_axi_read_if_pkg/.svproject | 16 + .../prim_axi_read_if_pkg/Makefile | 66 + .../prim_axi_read_if_pkg/compile.do | 14 + .../prim_axi_read_if.compile | 3 + .../prim_axi_read_if_bfm.vinfo | 6 + .../prim_axi_read_if_common.compile | 7 + .../prim_axi_read_if_filelist_hdl.f | 1 + .../prim_axi_read_if_filelist_hvl.f | 1 + .../prim_axi_read_if_filelist_xrtl.f | 3 + .../prim_axi_read_if_hdl.compile | 9 + .../prim_axi_read_if_hvl.compile | 7 + .../prim_axi_read_if_pkg.sv | 91 + .../prim_axi_read_if_pkg.vinfo | 4 + .../prim_axi_read_if_pkg_hdl.sv | 52 + .../prim_axi_read_if_pkg_hdl.vinfo | 2 + .../prim_axi_read_if_pkg_sve.F | 10 + .../src/prim_axi_read_if2reg_adapter.svh | 142 ++ .../src/prim_axi_read_if_agent.svh | 109 + .../src/prim_axi_read_if_configuration.svh | 241 +++ .../src/prim_axi_read_if_driver.svh | 141 ++ .../src/prim_axi_read_if_driver_bfm.sv | 352 ++++ .../src/prim_axi_read_if_if.sv | 109 + ...m_axi_read_if_infact_coverage_strategy.csv | 6 + .../src/prim_axi_read_if_macros.svh | 180 ++ .../src/prim_axi_read_if_monitor.svh | 131 ++ .../src/prim_axi_read_if_monitor_bfm.sv | 220 ++ .../src/prim_axi_read_if_random_sequence.svh | 91 + .../prim_axi_read_if_responder_sequence.svh | 87 + .../src/prim_axi_read_if_sequence_base.svh | 146 ++ .../src/prim_axi_read_if_transaction.svh | 240 +++ .../prim_axi_read_if_transaction_coverage.svh | 107 + .../src/prim_axi_read_if_typedefs.svh | 34 + .../src/prim_axi_read_if_typedefs_hdl.svh | 35 + .../yaml/prim_axi_read_if_interface.yaml | 91 + .../prim_axi_read_out_if_pkg/.project | 30 + .../prim_axi_read_out_if_pkg/.svproject | 16 + .../prim_axi_read_out_if_pkg/Makefile | 66 + .../prim_axi_read_out_if_pkg/compile.do | 14 + .../prim_axi_read_out_if.compile | 3 + .../prim_axi_read_out_if_bfm.vinfo | 6 + .../prim_axi_read_out_if_common.compile | 7 + .../prim_axi_read_out_if_filelist_hdl.f | 1 + .../prim_axi_read_out_if_filelist_hvl.f | 1 + .../prim_axi_read_out_if_filelist_xrtl.f | 3 + .../prim_axi_read_out_if_hdl.compile | 9 + .../prim_axi_read_out_if_hvl.compile | 7 + .../prim_axi_read_out_if_pkg.sv | 91 + .../prim_axi_read_out_if_pkg.vinfo | 4 + .../prim_axi_read_out_if_pkg_hdl.sv | 52 + .../prim_axi_read_out_if_pkg_hdl.vinfo | 2 + .../prim_axi_read_out_if_pkg_sve.F | 10 + .../src/prim_axi_read_out_if2reg_adapter.svh | 142 ++ .../src/prim_axi_read_out_if_agent.svh | 109 + .../prim_axi_read_out_if_configuration.svh | 241 +++ .../src/prim_axi_read_out_if_driver.svh | 141 ++ .../src/prim_axi_read_out_if_driver_bfm.sv | 352 ++++ .../src/prim_axi_read_out_if_if.sv | 109 + ...i_read_out_if_infact_coverage_strategy.csv | 6 + .../src/prim_axi_read_out_if_macros.svh | 180 ++ .../src/prim_axi_read_out_if_monitor.svh | 131 ++ .../src/prim_axi_read_out_if_monitor_bfm.sv | 220 ++ .../prim_axi_read_out_if_random_sequence.svh | 91 + ...rim_axi_read_out_if_responder_sequence.svh | 87 + .../prim_axi_read_out_if_sequence_base.svh | 146 ++ .../src/prim_axi_read_out_if_transaction.svh | 240 +++ ...m_axi_read_out_if_transaction_coverage.svh | 107 + .../src/prim_axi_read_out_if_typedefs.svh | 34 + .../src/prim_axi_read_out_if_typedefs_hdl.svh | 35 + .../yaml/prim_axi_read_out_if_interface.yaml | 91 + .../prim_axi_write_if_pkg/.project | 30 + .../prim_axi_write_if_pkg/.svproject | 16 + .../prim_axi_write_if_pkg/Makefile | 66 + .../prim_axi_write_if_pkg/compile.do | 14 + .../prim_axi_write_if.compile | 3 + .../prim_axi_write_if_bfm.vinfo | 6 + .../prim_axi_write_if_common.compile | 7 + .../prim_axi_write_if_filelist_hdl.f | 1 + .../prim_axi_write_if_filelist_hvl.f | 1 + .../prim_axi_write_if_filelist_xrtl.f | 3 + .../prim_axi_write_if_hdl.compile | 9 + .../prim_axi_write_if_hvl.compile | 7 + .../prim_axi_write_if_pkg.sv | 91 + .../prim_axi_write_if_pkg.vinfo | 4 + .../prim_axi_write_if_pkg_hdl.sv | 52 + .../prim_axi_write_if_pkg_hdl.vinfo | 2 + .../prim_axi_write_if_pkg_sve.F | 10 + .../src/prim_axi_write_if2reg_adapter.svh | 142 ++ .../src/prim_axi_write_if_agent.svh | 109 + .../src/prim_axi_write_if_configuration.svh | 241 +++ .../src/prim_axi_write_if_driver.svh | 141 ++ .../src/prim_axi_write_if_driver_bfm.sv | 341 ++++ .../src/prim_axi_write_if_if.sv | 104 + ..._axi_write_if_infact_coverage_strategy.csv | 6 + .../src/prim_axi_write_if_macros.svh | 171 ++ .../src/prim_axi_write_if_monitor.svh | 131 ++ .../src/prim_axi_write_if_monitor_bfm.sv | 216 ++ .../src/prim_axi_write_if_random_sequence.svh | 91 + .../prim_axi_write_if_responder_sequence.svh | 87 + .../src/prim_axi_write_if_sequence_base.svh | 146 ++ .../src/prim_axi_write_if_transaction.svh | 236 +++ ...prim_axi_write_if_transaction_coverage.svh | 106 + .../src/prim_axi_write_if_typedefs.svh | 34 + .../src/prim_axi_write_if_typedefs_hdl.svh | 35 + .../yaml/prim_axi_write_if_interface.yaml | 81 + .../prim_axi_write_out_if_pkg/.project | 30 + .../prim_axi_write_out_if_pkg/.svproject | 16 + .../prim_axi_write_out_if_pkg/Makefile | 66 + .../prim_axi_write_out_if_pkg/compile.do | 14 + .../prim_axi_write_out_if.compile | 3 + .../prim_axi_write_out_if_bfm.vinfo | 6 + .../prim_axi_write_out_if_common.compile | 7 + .../prim_axi_write_out_if_filelist_hdl.f | 1 + .../prim_axi_write_out_if_filelist_hvl.f | 1 + .../prim_axi_write_out_if_filelist_xrtl.f | 3 + .../prim_axi_write_out_if_hdl.compile | 9 + .../prim_axi_write_out_if_hvl.compile | 7 + .../prim_axi_write_out_if_pkg.sv | 91 + .../prim_axi_write_out_if_pkg.vinfo | 4 + .../prim_axi_write_out_if_pkg_hdl.sv | 52 + .../prim_axi_write_out_if_pkg_hdl.vinfo | 2 + .../prim_axi_write_out_if_pkg_sve.F | 10 + .../src/prim_axi_write_out_if2reg_adapter.svh | 142 ++ .../src/prim_axi_write_out_if_agent.svh | 109 + .../prim_axi_write_out_if_configuration.svh | 241 +++ .../src/prim_axi_write_out_if_driver.svh | 141 ++ .../src/prim_axi_write_out_if_driver_bfm.sv | 341 ++++ .../src/prim_axi_write_out_if_if.sv | 104 + ..._write_out_if_infact_coverage_strategy.csv | 6 + .../src/prim_axi_write_out_if_macros.svh | 171 ++ .../src/prim_axi_write_out_if_monitor.svh | 131 ++ .../src/prim_axi_write_out_if_monitor_bfm.sv | 216 ++ .../prim_axi_write_out_if_random_sequence.svh | 91 + ...im_axi_write_out_if_responder_sequence.svh | 87 + .../prim_axi_write_out_if_sequence_base.svh | 146 ++ .../src/prim_axi_write_out_if_transaction.svh | 236 +++ ..._axi_write_out_if_transaction_coverage.svh | 106 + .../src/prim_axi_write_out_if_typedefs.svh | 34 + .../prim_axi_write_out_if_typedefs_hdl.svh | 35 + .../yaml/prim_axi_write_out_if_interface.yaml | 81 + .../secreg_axi_read_if_pkg/.project | 30 + .../secreg_axi_read_if_pkg/.svproject | 16 + .../secreg_axi_read_if_pkg/Makefile | 66 + .../secreg_axi_read_if_pkg/compile.do | 14 + .../secreg_axi_read_if.compile | 3 + .../secreg_axi_read_if_bfm.vinfo | 6 + .../secreg_axi_read_if_common.compile | 7 + .../secreg_axi_read_if_filelist_hdl.f | 1 + .../secreg_axi_read_if_filelist_hvl.f | 1 + .../secreg_axi_read_if_filelist_xrtl.f | 3 + .../secreg_axi_read_if_hdl.compile | 9 + .../secreg_axi_read_if_hvl.compile | 7 + .../secreg_axi_read_if_pkg.sv | 91 + .../secreg_axi_read_if_pkg.vinfo | 4 + .../secreg_axi_read_if_pkg_hdl.sv | 52 + .../secreg_axi_read_if_pkg_hdl.vinfo | 2 + .../secreg_axi_read_if_pkg_sve.F | 10 + .../src/secreg_axi_read_if2reg_adapter.svh | 142 ++ .../src/secreg_axi_read_if_agent.svh | 109 + .../src/secreg_axi_read_if_configuration.svh | 241 +++ .../src/secreg_axi_read_if_driver.svh | 141 ++ .../src/secreg_axi_read_if_driver_bfm.sv | 352 ++++ .../src/secreg_axi_read_if_if.sv | 109 + ...g_axi_read_if_infact_coverage_strategy.csv | 6 + .../src/secreg_axi_read_if_macros.svh | 180 ++ .../src/secreg_axi_read_if_monitor.svh | 131 ++ .../src/secreg_axi_read_if_monitor_bfm.sv | 220 ++ .../secreg_axi_read_if_random_sequence.svh | 91 + .../secreg_axi_read_if_responder_sequence.svh | 87 + .../src/secreg_axi_read_if_sequence_base.svh | 146 ++ .../src/secreg_axi_read_if_transaction.svh | 240 +++ ...ecreg_axi_read_if_transaction_coverage.svh | 107 + .../src/secreg_axi_read_if_typedefs.svh | 34 + .../src/secreg_axi_read_if_typedefs_hdl.svh | 35 + .../yaml/secreg_axi_read_if_interface.yaml | 91 + .../secreg_axi_read_out_if_pkg/.project | 30 + .../secreg_axi_read_out_if_pkg/.svproject | 16 + .../secreg_axi_read_out_if_pkg/Makefile | 66 + .../secreg_axi_read_out_if_pkg/compile.do | 14 + .../secreg_axi_read_out_if.compile | 3 + .../secreg_axi_read_out_if_bfm.vinfo | 6 + .../secreg_axi_read_out_if_common.compile | 7 + .../secreg_axi_read_out_if_filelist_hdl.f | 1 + .../secreg_axi_read_out_if_filelist_hvl.f | 1 + .../secreg_axi_read_out_if_filelist_xrtl.f | 3 + .../secreg_axi_read_out_if_hdl.compile | 9 + .../secreg_axi_read_out_if_hvl.compile | 7 + .../secreg_axi_read_out_if_pkg.sv | 91 + .../secreg_axi_read_out_if_pkg.vinfo | 4 + .../secreg_axi_read_out_if_pkg_hdl.sv | 52 + .../secreg_axi_read_out_if_pkg_hdl.vinfo | 2 + .../secreg_axi_read_out_if_pkg_sve.F | 10 + .../secreg_axi_read_out_if2reg_adapter.svh | 142 ++ .../src/secreg_axi_read_out_if_agent.svh | 109 + .../secreg_axi_read_out_if_configuration.svh | 241 +++ .../src/secreg_axi_read_out_if_driver.svh | 141 ++ .../src/secreg_axi_read_out_if_driver_bfm.sv | 352 ++++ .../src/secreg_axi_read_out_if_if.sv | 109 + ...i_read_out_if_infact_coverage_strategy.csv | 6 + .../src/secreg_axi_read_out_if_macros.svh | 180 ++ .../src/secreg_axi_read_out_if_monitor.svh | 131 ++ .../src/secreg_axi_read_out_if_monitor_bfm.sv | 220 ++ ...secreg_axi_read_out_if_random_sequence.svh | 91 + ...reg_axi_read_out_if_responder_sequence.svh | 87 + .../secreg_axi_read_out_if_sequence_base.svh | 146 ++ .../secreg_axi_read_out_if_transaction.svh | 240 +++ ...g_axi_read_out_if_transaction_coverage.svh | 107 + .../src/secreg_axi_read_out_if_typedefs.svh | 34 + .../secreg_axi_read_out_if_typedefs_hdl.svh | 35 + .../secreg_axi_read_out_if_interface.yaml | 91 + .../project_benches/fuse_ctrl/.project | 37 + .../project_benches/fuse_ctrl/.svproject | 16 + .../fuse_ctrl/docs/interfaces.csv | 41 + .../project_benches/fuse_ctrl/fuse_ctrl_sve.F | 41 + .../project_benches/fuse_ctrl/rtl/dut.compile | 6 + .../fuse_ctrl/rtl/verilog/verilog_dut.v | 21 + .../fuse_ctrl/rtl/verilog/verilog_dut.vinfo | 1 + .../fuse_ctrl/rtl/vhdl/vhdl_dut.vhd | 21 + .../project_benches/fuse_ctrl/sim/Makefile | 376 ++++ .../fuse_ctrl/sim/bcr_testlist | 19 + .../fuse_ctrl/sim/bcr_testlist.yaml | 44 + .../project_benches/fuse_ctrl/sim/compile.do | 84 + .../project_benches/fuse_ctrl/sim/hdl.compile | 5 + .../project_benches/fuse_ctrl/sim/hdl.vinfo | 1 + .../project_benches/fuse_ctrl/sim/hvl.compile | 2 + .../project_benches/fuse_ctrl/sim/hvl.vinfo | 1 + .../project_benches/fuse_ctrl/sim/run.do | 21 + .../project_benches/fuse_ctrl/sim/tbx.config | 10 + .../project_benches/fuse_ctrl/sim/testlist | 20 + .../fuse_ctrl/sim/testlist.yaml | 44 + .../project_benches/fuse_ctrl/sim/top.compile | 3 + .../fuse_ctrl/sim/veloce.config | 26 + .../project_benches/fuse_ctrl/sim/viswave.do | 100 + .../project_benches/fuse_ctrl/sim/wave.do | 69 + .../project_benches/fuse_ctrl/sim/xwaves.sigs | 17 + .../fuse_ctrl_parameters_pkg.compile | 4 + .../tb/parameters/fuse_ctrl_parameters_pkg.sv | 65 + .../parameters/fuse_ctrl_parameters_pkg.vinfo | 2 + .../sequences/fuse_ctrl_sequences_pkg.compile | 21 + .../tb/sequences/fuse_ctrl_sequences_pkg.sv | 91 + .../sequences/fuse_ctrl_sequences_pkg.vinfo | 20 + .../src/example_derived_test_sequence.svh | 44 + .../src/fuse_ctrl_bench_sequence_base.svh | 229 +++ .../sequences/src/register_test_sequence.svh | 76 + .../fuse_ctrl/tb/testbench/hdl_top.compile | 23 + .../fuse_ctrl/tb/testbench/hdl_top.sv | 276 +++ .../fuse_ctrl/tb/testbench/hdl_top.vinfo | 19 + .../fuse_ctrl/tb/testbench/hvl_top.compile | 7 + .../fuse_ctrl/tb/testbench/hvl_top.sv | 47 + .../fuse_ctrl/tb/testbench/hvl_top.vinfo | 2 + .../fuse_ctrl/tb/testbench/top_filelist_hdl.f | 3 + .../fuse_ctrl/tb/testbench/top_filelist_hvl.f | 3 + .../tb/tests/fuse_ctrl_tests_pkg.compile | 22 + .../fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.sv | 94 + .../tb/tests/fuse_ctrl_tests_pkg.vinfo | 21 + .../tb/tests/src/example_derived_test.svh | 57 + .../fuse_ctrl/tb/tests/src/register_test.svh | 54 + .../fuse_ctrl/tb/tests/src/test_top.svh | 118 ++ .../fuse_ctrl/yaml/fuse_ctrl_bench.yaml | 43 + .../fuse_ctrl_env_pkg/.project | 32 + .../fuse_ctrl_env_pkg/.svproject | 16 + .../fuse_ctrl_env_pkg/Makefile | 56 + .../fuse_ctrl_env_pkg/compile.do | 12 + .../fuse_ctrl_env_pkg.compile | 21 + .../fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv | 105 + .../fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo | 18 + .../fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F | 12 + .../src/fuse_ctrl_env_configuration.svh | 254 +++ .../src/fuse_ctrl_env_sequence_base.svh | 144 ++ .../src/fuse_ctrl_env_typedefs.svh | 34 + .../src/fuse_ctrl_environment.svh | 215 ++ .../src/fuse_ctrl_predictor.svh | 323 +++ .../src/fuse_ctrl_scoreboard.svh | 149 ++ .../yaml/fuse_ctrl_environment.yaml | 116 ++ ...se_ctrl_util_comp_fuse_ctrl_predictor.yaml | 23 + ...e_ctrl_util_comp_fuse_ctrl_scoreboard.yaml | 10 + .../core_axi_read_if_pkg/.project | 30 + .../core_axi_read_if_pkg/.svproject | 16 + .../core_axi_read_if_pkg/Makefile | 66 + .../core_axi_read_if_pkg/compile.do | 14 + .../core_axi_read_if.compile | 3 + .../core_axi_read_if_bfm.vinfo | 6 + .../core_axi_read_if_common.compile | 7 + .../core_axi_read_if_filelist_hdl.f | 1 + .../core_axi_read_if_filelist_hvl.f | 1 + .../core_axi_read_if_filelist_xrtl.f | 3 + .../core_axi_read_if_hdl.compile | 9 + .../core_axi_read_if_hvl.compile | 7 + .../core_axi_read_if_pkg.sv | 91 + .../core_axi_read_if_pkg.vinfo | 4 + .../core_axi_read_if_pkg_hdl.sv | 52 + .../core_axi_read_if_pkg_hdl.vinfo | 2 + .../core_axi_read_if_pkg_sve.F | 10 + .../src/core_axi_read_if2reg_adapter.svh | 142 ++ .../src/core_axi_read_if_agent.svh | 109 + .../src/core_axi_read_if_configuration.svh | 241 +++ .../src/core_axi_read_if_driver.svh | 141 ++ .../src/core_axi_read_if_driver_bfm.sv | 352 ++++ .../src/core_axi_read_if_if.sv | 109 + ...e_axi_read_if_infact_coverage_strategy.csv | 6 + .../src/core_axi_read_if_macros.svh | 180 ++ .../src/core_axi_read_if_monitor.svh | 131 ++ .../src/core_axi_read_if_monitor_bfm.sv | 220 ++ .../src/core_axi_read_if_random_sequence.svh | 91 + .../core_axi_read_if_responder_sequence.svh | 87 + .../src/core_axi_read_if_sequence_base.svh | 146 ++ .../src/core_axi_read_if_transaction.svh | 240 +++ .../core_axi_read_if_transaction_coverage.svh | 107 + .../src/core_axi_read_if_typedefs.svh | 34 + .../src/core_axi_read_if_typedefs_hdl.svh | 35 + .../yaml/core_axi_read_if_interface.yaml | 91 + .../core_axi_read_out_if_pkg/.project | 30 + .../core_axi_read_out_if_pkg/.svproject | 16 + .../core_axi_read_out_if_pkg/Makefile | 66 + .../core_axi_read_out_if_pkg/compile.do | 14 + .../core_axi_read_out_if.compile | 3 + .../core_axi_read_out_if_bfm.vinfo | 6 + .../core_axi_read_out_if_common.compile | 7 + .../core_axi_read_out_if_filelist_hdl.f | 1 + .../core_axi_read_out_if_filelist_hvl.f | 1 + .../core_axi_read_out_if_filelist_xrtl.f | 3 + .../core_axi_read_out_if_hdl.compile | 9 + .../core_axi_read_out_if_hvl.compile | 7 + .../core_axi_read_out_if_pkg.sv | 91 + .../core_axi_read_out_if_pkg.vinfo | 4 + .../core_axi_read_out_if_pkg_hdl.sv | 52 + .../core_axi_read_out_if_pkg_hdl.vinfo | 2 + .../core_axi_read_out_if_pkg_sve.F | 10 + .../src/core_axi_read_out_if2reg_adapter.svh | 142 ++ .../src/core_axi_read_out_if_agent.svh | 109 + .../core_axi_read_out_if_configuration.svh | 241 +++ .../src/core_axi_read_out_if_driver.svh | 141 ++ .../src/core_axi_read_out_if_driver_bfm.sv | 352 ++++ .../src/core_axi_read_out_if_if.sv | 109 + ...i_read_out_if_infact_coverage_strategy.csv | 6 + .../src/core_axi_read_out_if_macros.svh | 180 ++ .../src/core_axi_read_out_if_monitor.svh | 131 ++ .../src/core_axi_read_out_if_monitor_bfm.sv | 220 ++ .../core_axi_read_out_if_random_sequence.svh | 91 + ...ore_axi_read_out_if_responder_sequence.svh | 87 + .../core_axi_read_out_if_sequence_base.svh | 146 ++ .../src/core_axi_read_out_if_transaction.svh | 240 +++ ...e_axi_read_out_if_transaction_coverage.svh | 107 + .../src/core_axi_read_out_if_typedefs.svh | 34 + .../src/core_axi_read_out_if_typedefs_hdl.svh | 35 + .../yaml/core_axi_read_out_if_interface.yaml | 91 + .../core_axi_write_if_pkg/.project | 30 + .../core_axi_write_if_pkg/.svproject | 16 + .../core_axi_write_if_pkg/Makefile | 66 + .../core_axi_write_if_pkg/compile.do | 14 + .../core_axi_write_if.compile | 3 + .../core_axi_write_if_bfm.vinfo | 6 + .../core_axi_write_if_common.compile | 7 + .../core_axi_write_if_filelist_hdl.f | 1 + .../core_axi_write_if_filelist_hvl.f | 1 + .../core_axi_write_if_filelist_xrtl.f | 3 + .../core_axi_write_if_hdl.compile | 9 + .../core_axi_write_if_hvl.compile | 7 + .../core_axi_write_if_pkg.sv | 91 + .../core_axi_write_if_pkg.vinfo | 4 + .../core_axi_write_if_pkg_hdl.sv | 52 + .../core_axi_write_if_pkg_hdl.vinfo | 2 + .../core_axi_write_if_pkg_sve.F | 10 + .../src/core_axi_write_if2reg_adapter.svh | 142 ++ .../src/core_axi_write_if_agent.svh | 109 + .../src/core_axi_write_if_configuration.svh | 241 +++ .../src/core_axi_write_if_driver.svh | 141 ++ .../src/core_axi_write_if_driver_bfm.sv | 341 ++++ .../src/core_axi_write_if_if.sv | 104 + ..._axi_write_if_infact_coverage_strategy.csv | 6 + .../src/core_axi_write_if_macros.svh | 171 ++ .../src/core_axi_write_if_monitor.svh | 131 ++ .../src/core_axi_write_if_monitor_bfm.sv | 216 ++ .../src/core_axi_write_if_random_sequence.svh | 91 + .../core_axi_write_if_responder_sequence.svh | 87 + .../src/core_axi_write_if_sequence_base.svh | 146 ++ .../src/core_axi_write_if_transaction.svh | 236 +++ ...core_axi_write_if_transaction_coverage.svh | 106 + .../src/core_axi_write_if_typedefs.svh | 34 + .../src/core_axi_write_if_typedefs_hdl.svh | 35 + .../yaml/core_axi_write_if_interface.yaml | 81 + .../core_axi_write_out_if_pkg/.project | 30 + .../core_axi_write_out_if_pkg/.svproject | 16 + .../core_axi_write_out_if_pkg/Makefile | 66 + .../core_axi_write_out_if_pkg/compile.do | 14 + .../core_axi_write_out_if.compile | 3 + .../core_axi_write_out_if_bfm.vinfo | 6 + .../core_axi_write_out_if_common.compile | 7 + .../core_axi_write_out_if_filelist_hdl.f | 1 + .../core_axi_write_out_if_filelist_hvl.f | 1 + .../core_axi_write_out_if_filelist_xrtl.f | 3 + .../core_axi_write_out_if_hdl.compile | 9 + .../core_axi_write_out_if_hvl.compile | 7 + .../core_axi_write_out_if_pkg.sv | 91 + .../core_axi_write_out_if_pkg.vinfo | 4 + .../core_axi_write_out_if_pkg_hdl.sv | 52 + .../core_axi_write_out_if_pkg_hdl.vinfo | 2 + .../core_axi_write_out_if_pkg_sve.F | 10 + .../src/core_axi_write_out_if2reg_adapter.svh | 142 ++ .../src/core_axi_write_out_if_agent.svh | 109 + .../core_axi_write_out_if_configuration.svh | 241 +++ .../src/core_axi_write_out_if_driver.svh | 141 ++ .../src/core_axi_write_out_if_driver_bfm.sv | 341 ++++ .../src/core_axi_write_out_if_if.sv | 104 + ..._write_out_if_infact_coverage_strategy.csv | 6 + .../src/core_axi_write_out_if_macros.svh | 171 ++ .../src/core_axi_write_out_if_monitor.svh | 131 ++ .../src/core_axi_write_out_if_monitor_bfm.sv | 216 ++ .../core_axi_write_out_if_random_sequence.svh | 91 + ...re_axi_write_out_if_responder_sequence.svh | 87 + .../core_axi_write_out_if_sequence_base.svh | 146 ++ .../src/core_axi_write_out_if_transaction.svh | 236 +++ ..._axi_write_out_if_transaction_coverage.svh | 106 + .../src/core_axi_write_out_if_typedefs.svh | 34 + .../core_axi_write_out_if_typedefs_hdl.svh | 35 + .../yaml/core_axi_write_out_if_interface.yaml | 81 + .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_core_core_axi_write_out_if.compile | 3 + .../fuse_core_core_axi_write_out_if_bfm.vinfo | 6 + ..._core_core_axi_write_out_if_common.compile | 7 + ..._core_core_axi_write_out_if_filelist_hdl.f | 1 + ..._core_core_axi_write_out_if_filelist_hvl.f | 1 + ...core_core_axi_write_out_if_filelist_xrtl.f | 3 + ...use_core_core_axi_write_out_if_hdl.compile | 9 + ...use_core_core_axi_write_out_if_hvl.compile | 7 + .../fuse_core_core_axi_write_out_if_pkg.sv | 91 + .../fuse_core_core_axi_write_out_if_pkg.vinfo | 4 + ...fuse_core_core_axi_write_out_if_pkg_hdl.sv | 52 + ...e_core_core_axi_write_out_if_pkg_hdl.vinfo | 2 + .../fuse_core_core_axi_write_out_if_pkg_sve.F | 10 + ...core_core_axi_write_out_if2reg_adapter.svh | 142 ++ .../fuse_core_core_axi_write_out_if_agent.svh | 109 + ...re_core_axi_write_out_if_configuration.svh | 241 +++ ...fuse_core_core_axi_write_out_if_driver.svh | 141 ++ ...e_core_core_axi_write_out_if_driver_bfm.sv | 341 ++++ .../src/fuse_core_core_axi_write_out_if_if.sv | 104 + ..._write_out_if_infact_coverage_strategy.csv | 6 + ...fuse_core_core_axi_write_out_if_macros.svh | 171 ++ ...use_core_core_axi_write_out_if_monitor.svh | 131 ++ ..._core_core_axi_write_out_if_monitor_bfm.sv | 216 ++ ..._core_axi_write_out_if_random_sequence.svh | 91 + ...re_axi_write_out_if_responder_sequence.svh | 87 + ...re_core_axi_write_out_if_sequence_base.svh | 146 ++ ...core_core_axi_write_out_if_transaction.svh | 236 +++ ..._axi_write_out_if_transaction_coverage.svh | 106 + ...se_core_core_axi_write_out_if_typedefs.svh | 34 + ...ore_core_axi_write_out_if_typedefs_hdl.svh | 35 + ..._core_core_axi_write_out_if_interface.yaml | 81 + .../fuse_ctrl_core_axi_read_if_pkg/.project | 30 + .../fuse_ctrl_core_axi_read_if_pkg/.svproject | 16 + .../fuse_ctrl_core_axi_read_if_pkg/Makefile | 66 + .../fuse_ctrl_core_axi_read_if_pkg/compile.do | 14 + .../fuse_ctrl_core_axi_read_if.compile | 3 + .../fuse_ctrl_core_axi_read_if_bfm.vinfo | 6 + .../fuse_ctrl_core_axi_read_if_common.compile | 7 + .../fuse_ctrl_core_axi_read_if_filelist_hdl.f | 1 + .../fuse_ctrl_core_axi_read_if_filelist_hvl.f | 1 + ...fuse_ctrl_core_axi_read_if_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_read_if_hdl.compile | 9 + .../fuse_ctrl_core_axi_read_if_hvl.compile | 7 + .../fuse_ctrl_core_axi_read_if_pkg.sv | 91 + .../fuse_ctrl_core_axi_read_if_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_read_if_pkg_hdl.sv | 52 + .../fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_read_if_pkg_sve.F | 10 + ...fuse_ctrl_core_axi_read_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_core_axi_read_if_agent.svh | 109 + ...se_ctrl_core_axi_read_if_configuration.svh | 241 +++ .../src/fuse_ctrl_core_axi_read_if_driver.svh | 141 ++ .../fuse_ctrl_core_axi_read_if_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_core_axi_read_if_if.sv | 124 ++ ...e_axi_read_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_core_axi_read_if_macros.svh | 207 ++ .../fuse_ctrl_core_axi_read_if_monitor.svh | 131 ++ .../fuse_ctrl_core_axi_read_if_monitor_bfm.sv | 232 +++ ..._ctrl_core_axi_read_if_random_sequence.svh | 91 + ...rl_core_axi_read_if_responder_sequence.svh | 87 + ...se_ctrl_core_axi_read_if_sequence_base.svh | 146 ++ ...fuse_ctrl_core_axi_read_if_transaction.svh | 243 +++ ..._core_axi_read_if_transaction_coverage.svh | 110 + .../fuse_ctrl_core_axi_read_if_typedefs.svh | 34 + ...use_ctrl_core_axi_read_if_typedefs_hdl.svh | 35 + .../fuse_ctrl_core_axi_read_if_interface.yaml | 121 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_read_in_if.compile | 3 + .../fuse_ctrl_core_axi_read_in_if_bfm.vinfo | 6 + ...se_ctrl_core_axi_read_in_if_common.compile | 7 + ...se_ctrl_core_axi_read_in_if_filelist_hdl.f | 1 + ...se_ctrl_core_axi_read_in_if_filelist_hvl.f | 1 + ...e_ctrl_core_axi_read_in_if_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_read_in_if_hdl.compile | 9 + .../fuse_ctrl_core_axi_read_in_if_hvl.compile | 7 + .../fuse_ctrl_core_axi_read_in_if_pkg.sv | 91 + .../fuse_ctrl_core_axi_read_in_if_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv | 52 + ...use_ctrl_core_axi_read_in_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_read_in_if_pkg_sve.F | 10 + ...e_ctrl_core_axi_read_in_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_core_axi_read_in_if_agent.svh | 109 + ...ctrl_core_axi_read_in_if_configuration.svh | 241 +++ .../fuse_ctrl_core_axi_read_in_if_driver.svh | 141 ++ ...use_ctrl_core_axi_read_in_if_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_core_axi_read_in_if_if.sv | 124 ++ ...xi_read_in_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_core_axi_read_in_if_macros.svh | 207 ++ .../fuse_ctrl_core_axi_read_in_if_monitor.svh | 131 ++ ...se_ctrl_core_axi_read_in_if_monitor_bfm.sv | 232 +++ ...rl_core_axi_read_in_if_random_sequence.svh | 91 + ...core_axi_read_in_if_responder_sequence.svh | 87 + ...ctrl_core_axi_read_in_if_sequence_base.svh | 146 ++ ...e_ctrl_core_axi_read_in_if_transaction.svh | 243 +++ ...re_axi_read_in_if_transaction_coverage.svh | 110 + ...fuse_ctrl_core_axi_read_in_if_typedefs.svh | 34 + ..._ctrl_core_axi_read_in_if_typedefs_hdl.svh | 35 + ...se_ctrl_core_axi_read_in_if_interface.yaml | 121 ++ .../fuse_ctrl_core_axi_read_in_pkg/.project | 30 + .../fuse_ctrl_core_axi_read_in_pkg/.svproject | 16 + .../fuse_ctrl_core_axi_read_in_pkg/Makefile | 66 + .../fuse_ctrl_core_axi_read_in_pkg/compile.do | 14 + .../fuse_ctrl_core_axi_read_in.compile | 3 + .../fuse_ctrl_core_axi_read_in_bfm.vinfo | 6 + .../fuse_ctrl_core_axi_read_in_common.compile | 7 + .../fuse_ctrl_core_axi_read_in_filelist_hdl.f | 1 + .../fuse_ctrl_core_axi_read_in_filelist_hvl.f | 1 + ...fuse_ctrl_core_axi_read_in_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_read_in_hdl.compile | 9 + .../fuse_ctrl_core_axi_read_in_hvl.compile | 7 + .../fuse_ctrl_core_axi_read_in_pkg.sv | 91 + .../fuse_ctrl_core_axi_read_in_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_read_in_pkg_hdl.sv | 52 + .../fuse_ctrl_core_axi_read_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_read_in_pkg_sve.F | 10 + ...fuse_ctrl_core_axi_read_in2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_core_axi_read_in_agent.svh | 109 + ...se_ctrl_core_axi_read_in_configuration.svh | 241 +++ .../src/fuse_ctrl_core_axi_read_in_driver.svh | 141 ++ .../fuse_ctrl_core_axi_read_in_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_core_axi_read_in_if.sv | 124 ++ ...e_axi_read_in_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_core_axi_read_in_macros.svh | 207 ++ .../fuse_ctrl_core_axi_read_in_monitor.svh | 131 ++ .../fuse_ctrl_core_axi_read_in_monitor_bfm.sv | 232 +++ ..._ctrl_core_axi_read_in_random_sequence.svh | 91 + ...rl_core_axi_read_in_responder_sequence.svh | 87 + ...se_ctrl_core_axi_read_in_sequence_base.svh | 146 ++ ...fuse_ctrl_core_axi_read_in_transaction.svh | 243 +++ ..._core_axi_read_in_transaction_coverage.svh | 110 + .../fuse_ctrl_core_axi_read_in_typedefs.svh | 34 + ...use_ctrl_core_axi_read_in_typedefs_hdl.svh | 35 + .../fuse_ctrl_core_axi_read_in_interface.yaml | 121 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_read_out_if.compile | 3 + .../fuse_ctrl_core_axi_read_out_if_bfm.vinfo | 6 + ...e_ctrl_core_axi_read_out_if_common.compile | 7 + ...e_ctrl_core_axi_read_out_if_filelist_hdl.f | 1 + ...e_ctrl_core_axi_read_out_if_filelist_hvl.f | 1 + ..._ctrl_core_axi_read_out_if_filelist_xrtl.f | 3 + ...fuse_ctrl_core_axi_read_out_if_hdl.compile | 9 + ...fuse_ctrl_core_axi_read_out_if_hvl.compile | 7 + .../fuse_ctrl_core_axi_read_out_if_pkg.sv | 91 + .../fuse_ctrl_core_axi_read_out_if_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv | 52 + ...se_ctrl_core_axi_read_out_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_read_out_if_pkg_sve.F | 10 + ..._ctrl_core_axi_read_out_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_core_axi_read_out_if_agent.svh | 109 + ...trl_core_axi_read_out_if_configuration.svh | 241 +++ .../fuse_ctrl_core_axi_read_out_if_driver.svh | 141 ++ ...se_ctrl_core_axi_read_out_if_driver_bfm.sv | 352 ++++ .../src/fuse_ctrl_core_axi_read_out_if_if.sv | 109 + ...i_read_out_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_core_axi_read_out_if_macros.svh | 180 ++ ...fuse_ctrl_core_axi_read_out_if_monitor.svh | 131 ++ ...e_ctrl_core_axi_read_out_if_monitor_bfm.sv | 220 ++ ...l_core_axi_read_out_if_random_sequence.svh | 91 + ...ore_axi_read_out_if_responder_sequence.svh | 87 + ...trl_core_axi_read_out_if_sequence_base.svh | 146 ++ ..._ctrl_core_axi_read_out_if_transaction.svh | 240 +++ ...e_axi_read_out_if_transaction_coverage.svh | 107 + ...use_ctrl_core_axi_read_out_if_typedefs.svh | 34 + ...ctrl_core_axi_read_out_if_typedefs_hdl.svh | 35 + ...e_ctrl_core_axi_read_out_if_interface.yaml | 91 + .../fuse_ctrl_core_axi_read_out_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_core_axi_read_out_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_read_out.compile | 3 + .../fuse_ctrl_core_axi_read_out_bfm.vinfo | 6 + ...fuse_ctrl_core_axi_read_out_common.compile | 7 + ...fuse_ctrl_core_axi_read_out_filelist_hdl.f | 1 + ...fuse_ctrl_core_axi_read_out_filelist_hvl.f | 1 + ...use_ctrl_core_axi_read_out_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_read_out_hdl.compile | 9 + .../fuse_ctrl_core_axi_read_out_hvl.compile | 7 + .../fuse_ctrl_core_axi_read_out_pkg.sv | 91 + .../fuse_ctrl_core_axi_read_out_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_read_out_pkg_hdl.sv | 52 + .../fuse_ctrl_core_axi_read_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_read_out_pkg_sve.F | 10 + ...use_ctrl_core_axi_read_out2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_core_axi_read_out_agent.svh | 109 + ...e_ctrl_core_axi_read_out_configuration.svh | 241 +++ .../fuse_ctrl_core_axi_read_out_driver.svh | 141 ++ .../fuse_ctrl_core_axi_read_out_driver_bfm.sv | 352 ++++ .../src/fuse_ctrl_core_axi_read_out_if.sv | 109 + ..._axi_read_out_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_core_axi_read_out_macros.svh | 180 ++ .../fuse_ctrl_core_axi_read_out_monitor.svh | 131 ++ ...fuse_ctrl_core_axi_read_out_monitor_bfm.sv | 220 ++ ...ctrl_core_axi_read_out_random_sequence.svh | 91 + ...l_core_axi_read_out_responder_sequence.svh | 87 + ...e_ctrl_core_axi_read_out_sequence_base.svh | 146 ++ ...use_ctrl_core_axi_read_out_transaction.svh | 240 +++ ...core_axi_read_out_transaction_coverage.svh | 107 + .../fuse_ctrl_core_axi_read_out_typedefs.svh | 34 + ...se_ctrl_core_axi_read_out_typedefs_hdl.svh | 35 + ...fuse_ctrl_core_axi_read_out_interface.yaml | 91 + .../fuse_ctrl_core_axi_write_if_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_core_axi_write_if_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_write_if.compile | 3 + .../fuse_ctrl_core_axi_write_if_bfm.vinfo | 6 + ...fuse_ctrl_core_axi_write_if_common.compile | 7 + ...fuse_ctrl_core_axi_write_if_filelist_hdl.f | 1 + ...fuse_ctrl_core_axi_write_if_filelist_hvl.f | 1 + ...use_ctrl_core_axi_write_if_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_write_if_hdl.compile | 9 + .../fuse_ctrl_core_axi_write_if_hvl.compile | 7 + .../fuse_ctrl_core_axi_write_if_pkg.sv | 91 + .../fuse_ctrl_core_axi_write_if_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_write_if_pkg_hdl.sv | 52 + .../fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_write_if_pkg_sve.F | 10 + ...use_ctrl_core_axi_write_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_core_axi_write_if_agent.svh | 109 + ...e_ctrl_core_axi_write_if_configuration.svh | 241 +++ .../fuse_ctrl_core_axi_write_if_driver.svh | 141 ++ .../fuse_ctrl_core_axi_write_if_driver_bfm.sv | 429 ++++ .../src/fuse_ctrl_core_axi_write_if_if.sv | 144 ++ ..._axi_write_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_core_axi_write_if_macros.svh | 243 +++ .../fuse_ctrl_core_axi_write_if_monitor.svh | 131 ++ ...fuse_ctrl_core_axi_write_if_monitor_bfm.sv | 248 +++ ...ctrl_core_axi_write_if_random_sequence.svh | 91 + ...l_core_axi_write_if_responder_sequence.svh | 87 + ...e_ctrl_core_axi_write_if_sequence_base.svh | 146 ++ ...use_ctrl_core_axi_write_if_transaction.svh | 256 +++ ...core_axi_write_if_transaction_coverage.svh | 114 ++ .../fuse_ctrl_core_axi_write_if_typedefs.svh | 34 + ...se_ctrl_core_axi_write_if_typedefs_hdl.svh | 35 + ...fuse_ctrl_core_axi_write_if_interface.yaml | 161 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_write_in_if.compile | 3 + .../fuse_ctrl_core_axi_write_in_if_bfm.vinfo | 6 + ...e_ctrl_core_axi_write_in_if_common.compile | 7 + ...e_ctrl_core_axi_write_in_if_filelist_hdl.f | 1 + ...e_ctrl_core_axi_write_in_if_filelist_hvl.f | 1 + ..._ctrl_core_axi_write_in_if_filelist_xrtl.f | 3 + ...fuse_ctrl_core_axi_write_in_if_hdl.compile | 9 + ...fuse_ctrl_core_axi_write_in_if_hvl.compile | 7 + .../fuse_ctrl_core_axi_write_in_if_pkg.sv | 91 + .../fuse_ctrl_core_axi_write_in_if_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv | 52 + ...se_ctrl_core_axi_write_in_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_write_in_if_pkg_sve.F | 10 + ..._ctrl_core_axi_write_in_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_core_axi_write_in_if_agent.svh | 109 + ...trl_core_axi_write_in_if_configuration.svh | 241 +++ .../fuse_ctrl_core_axi_write_in_if_driver.svh | 141 ++ ...se_ctrl_core_axi_write_in_if_driver_bfm.sv | 429 ++++ .../src/fuse_ctrl_core_axi_write_in_if_if.sv | 144 ++ ...i_write_in_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_core_axi_write_in_if_macros.svh | 243 +++ ...fuse_ctrl_core_axi_write_in_if_monitor.svh | 131 ++ ...e_ctrl_core_axi_write_in_if_monitor_bfm.sv | 248 +++ ...l_core_axi_write_in_if_random_sequence.svh | 91 + ...ore_axi_write_in_if_responder_sequence.svh | 87 + ...trl_core_axi_write_in_if_sequence_base.svh | 146 ++ ..._ctrl_core_axi_write_in_if_transaction.svh | 256 +++ ...e_axi_write_in_if_transaction_coverage.svh | 114 ++ ...use_ctrl_core_axi_write_in_if_typedefs.svh | 34 + ...ctrl_core_axi_write_in_if_typedefs_hdl.svh | 35 + ...e_ctrl_core_axi_write_in_if_interface.yaml | 161 ++ .../fuse_ctrl_core_axi_write_in_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_core_axi_write_in_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_write_in.compile | 3 + .../fuse_ctrl_core_axi_write_in_bfm.vinfo | 6 + ...fuse_ctrl_core_axi_write_in_common.compile | 7 + ...fuse_ctrl_core_axi_write_in_filelist_hdl.f | 1 + ...fuse_ctrl_core_axi_write_in_filelist_hvl.f | 1 + ...use_ctrl_core_axi_write_in_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_write_in_hdl.compile | 9 + .../fuse_ctrl_core_axi_write_in_hvl.compile | 7 + .../fuse_ctrl_core_axi_write_in_pkg.sv | 91 + .../fuse_ctrl_core_axi_write_in_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_write_in_pkg_hdl.sv | 52 + .../fuse_ctrl_core_axi_write_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_write_in_pkg_sve.F | 10 + ...use_ctrl_core_axi_write_in2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_core_axi_write_in_agent.svh | 109 + ...e_ctrl_core_axi_write_in_configuration.svh | 241 +++ .../fuse_ctrl_core_axi_write_in_driver.svh | 141 ++ .../fuse_ctrl_core_axi_write_in_driver_bfm.sv | 429 ++++ .../src/fuse_ctrl_core_axi_write_in_if.sv | 144 ++ ..._axi_write_in_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_core_axi_write_in_macros.svh | 243 +++ .../fuse_ctrl_core_axi_write_in_monitor.svh | 131 ++ ...fuse_ctrl_core_axi_write_in_monitor_bfm.sv | 248 +++ ...ctrl_core_axi_write_in_random_sequence.svh | 91 + ...l_core_axi_write_in_responder_sequence.svh | 87 + ...e_ctrl_core_axi_write_in_sequence_base.svh | 146 ++ ...use_ctrl_core_axi_write_in_transaction.svh | 256 +++ ...core_axi_write_in_transaction_coverage.svh | 114 ++ .../fuse_ctrl_core_axi_write_in_typedefs.svh | 34 + ...se_ctrl_core_axi_write_in_typedefs_hdl.svh | 35 + ...fuse_ctrl_core_axi_write_in_interface.yaml | 161 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_write_out_if.compile | 3 + .../fuse_ctrl_core_axi_write_out_if_bfm.vinfo | 6 + ..._ctrl_core_axi_write_out_if_common.compile | 7 + ..._ctrl_core_axi_write_out_if_filelist_hdl.f | 1 + ..._ctrl_core_axi_write_out_if_filelist_hvl.f | 1 + ...ctrl_core_axi_write_out_if_filelist_xrtl.f | 3 + ...use_ctrl_core_axi_write_out_if_hdl.compile | 9 + ...use_ctrl_core_axi_write_out_if_hvl.compile | 7 + .../fuse_ctrl_core_axi_write_out_if_pkg.sv | 91 + .../fuse_ctrl_core_axi_write_out_if_pkg.vinfo | 4 + ...fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv | 52 + ...e_ctrl_core_axi_write_out_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_write_out_if_pkg_sve.F | 10 + ...ctrl_core_axi_write_out_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_core_axi_write_out_if_agent.svh | 109 + ...rl_core_axi_write_out_if_configuration.svh | 241 +++ ...fuse_ctrl_core_axi_write_out_if_driver.svh | 141 ++ ...e_ctrl_core_axi_write_out_if_driver_bfm.sv | 341 ++++ .../src/fuse_ctrl_core_axi_write_out_if_if.sv | 104 + ..._write_out_if_infact_coverage_strategy.csv | 6 + ...fuse_ctrl_core_axi_write_out_if_macros.svh | 171 ++ ...use_ctrl_core_axi_write_out_if_monitor.svh | 131 ++ ..._ctrl_core_axi_write_out_if_monitor_bfm.sv | 216 ++ ..._core_axi_write_out_if_random_sequence.svh | 91 + ...re_axi_write_out_if_responder_sequence.svh | 87 + ...rl_core_axi_write_out_if_sequence_base.svh | 146 ++ ...ctrl_core_axi_write_out_if_transaction.svh | 236 +++ ..._axi_write_out_if_transaction_coverage.svh | 106 + ...se_ctrl_core_axi_write_out_if_typedefs.svh | 34 + ...trl_core_axi_write_out_if_typedefs_hdl.svh | 35 + ..._ctrl_core_axi_write_out_if_interface.yaml | 81 + .../fuse_ctrl_core_axi_write_out_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_core_axi_write_out_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_write_out.compile | 3 + .../fuse_ctrl_core_axi_write_out_bfm.vinfo | 6 + ...use_ctrl_core_axi_write_out_common.compile | 7 + ...use_ctrl_core_axi_write_out_filelist_hdl.f | 1 + ...use_ctrl_core_axi_write_out_filelist_hvl.f | 1 + ...se_ctrl_core_axi_write_out_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_write_out_hdl.compile | 9 + .../fuse_ctrl_core_axi_write_out_hvl.compile | 7 + .../fuse_ctrl_core_axi_write_out_pkg.sv | 91 + .../fuse_ctrl_core_axi_write_out_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_write_out_pkg_hdl.sv | 52 + ...fuse_ctrl_core_axi_write_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_write_out_pkg_sve.F | 10 + ...se_ctrl_core_axi_write_out2reg_adapter.svh | 142 ++ .../fuse_ctrl_core_axi_write_out_agent.svh | 109 + ..._ctrl_core_axi_write_out_configuration.svh | 241 +++ .../fuse_ctrl_core_axi_write_out_driver.svh | 141 ++ ...fuse_ctrl_core_axi_write_out_driver_bfm.sv | 341 ++++ .../src/fuse_ctrl_core_axi_write_out_if.sv | 104 + ...axi_write_out_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_core_axi_write_out_macros.svh | 171 ++ .../fuse_ctrl_core_axi_write_out_monitor.svh | 131 ++ ...use_ctrl_core_axi_write_out_monitor_bfm.sv | 216 ++ ...trl_core_axi_write_out_random_sequence.svh | 91 + ..._core_axi_write_out_responder_sequence.svh | 87 + ..._ctrl_core_axi_write_out_sequence_base.svh | 146 ++ ...se_ctrl_core_axi_write_out_transaction.svh | 236 +++ ...ore_axi_write_out_transaction_coverage.svh | 106 + .../fuse_ctrl_core_axi_write_out_typedefs.svh | 34 + ...e_ctrl_core_axi_write_out_typedefs_hdl.svh | 35 + ...use_ctrl_core_axi_write_out_interface.yaml | 81 + .../fuse_ctrl_in_if_pkg/.project | 30 + .../fuse_ctrl_in_if_pkg/.svproject | 16 + .../fuse_ctrl_in_if_pkg/Makefile | 66 + .../fuse_ctrl_in_if_pkg/compile.do | 14 + .../fuse_ctrl_in_if.compile | 3 + .../fuse_ctrl_in_if_bfm.vinfo | 6 + .../fuse_ctrl_in_if_common.compile | 7 + .../fuse_ctrl_in_if_filelist_hdl.f | 1 + .../fuse_ctrl_in_if_filelist_hvl.f | 1 + .../fuse_ctrl_in_if_filelist_xrtl.f | 3 + .../fuse_ctrl_in_if_hdl.compile | 9 + .../fuse_ctrl_in_if_hvl.compile | 7 + .../fuse_ctrl_in_if_pkg.sv | 91 + .../fuse_ctrl_in_if_pkg.vinfo | 4 + .../fuse_ctrl_in_if_pkg_hdl.sv | 52 + .../fuse_ctrl_in_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_in_if_pkg_sve.F | 10 + .../src/fuse_ctrl_in_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_in_if_agent.svh | 109 + .../src/fuse_ctrl_in_if_configuration.svh | 241 +++ .../src/fuse_ctrl_in_if_driver.svh | 141 ++ .../src/fuse_ctrl_in_if_driver_bfm.sv | 346 ++++ .../src/fuse_ctrl_in_if_if.sv | 119 ++ ...se_ctrl_in_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_in_if_macros.svh | 135 ++ .../src/fuse_ctrl_in_if_monitor.svh | 131 ++ .../src/fuse_ctrl_in_if_monitor_bfm.sv | 221 ++ .../src/fuse_ctrl_in_if_random_sequence.svh | 91 + .../fuse_ctrl_in_if_responder_sequence.svh | 87 + .../src/fuse_ctrl_in_if_sequence_base.svh | 146 ++ .../src/fuse_ctrl_in_if_transaction.svh | 219 ++ .../fuse_ctrl_in_if_transaction_coverage.svh | 102 + .../src/fuse_ctrl_in_if_typedefs.svh | 34 + .../src/fuse_ctrl_in_if_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_in_if_interface.yaml | 68 + .../fuse_ctrl_in_pkg/.project | 30 + .../fuse_ctrl_in_pkg/.svproject | 16 + .../fuse_ctrl_in_pkg/Makefile | 66 + .../fuse_ctrl_in_pkg/compile.do | 14 + .../fuse_ctrl_in_pkg/fuse_ctrl_in.compile | 3 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo | 6 + .../fuse_ctrl_in_common.compile | 7 + .../fuse_ctrl_in_filelist_hdl.f | 1 + .../fuse_ctrl_in_filelist_hvl.f | 1 + .../fuse_ctrl_in_filelist_xrtl.f | 3 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile | 9 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile | 7 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv | 91 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo | 4 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv | 52 + .../fuse_ctrl_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F | 10 + .../src/fuse_ctrl_in2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_in_agent.svh | 109 + .../src/fuse_ctrl_in_configuration.svh | 241 +++ .../src/fuse_ctrl_in_driver.svh | 141 ++ .../src/fuse_ctrl_in_driver_bfm.sv | 342 ++++ .../fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv | 114 ++ .../fuse_ctrl_in_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_in_macros.svh | 135 ++ .../src/fuse_ctrl_in_monitor.svh | 131 ++ .../src/fuse_ctrl_in_monitor_bfm.sv | 218 ++ .../src/fuse_ctrl_in_random_sequence.svh | 91 + .../src/fuse_ctrl_in_responder_sequence.svh | 87 + .../src/fuse_ctrl_in_sequence_base.svh | 146 ++ .../src/fuse_ctrl_in_transaction.svh | 219 ++ .../src/fuse_ctrl_in_transaction_coverage.svh | 102 + .../src/fuse_ctrl_in_typedefs.svh | 34 + .../src/fuse_ctrl_in_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_in_interface.yaml | 64 + .../fuse_ctrl_lc_otp_if_pkg/.project | 30 + .../fuse_ctrl_lc_otp_if_pkg/.svproject | 16 + .../fuse_ctrl_lc_otp_if_pkg/Makefile | 66 + .../fuse_ctrl_lc_otp_if_pkg/compile.do | 14 + .../fuse_ctrl_lc_otp_if.compile | 3 + .../fuse_ctrl_lc_otp_if_bfm.vinfo | 6 + .../fuse_ctrl_lc_otp_if_common.compile | 7 + .../fuse_ctrl_lc_otp_if_filelist_hdl.f | 1 + .../fuse_ctrl_lc_otp_if_filelist_hvl.f | 1 + .../fuse_ctrl_lc_otp_if_filelist_xrtl.f | 3 + .../fuse_ctrl_lc_otp_if_hdl.compile | 9 + .../fuse_ctrl_lc_otp_if_hvl.compile | 7 + .../fuse_ctrl_lc_otp_if_pkg.sv | 91 + .../fuse_ctrl_lc_otp_if_pkg.vinfo | 4 + .../fuse_ctrl_lc_otp_if_pkg_hdl.sv | 52 + .../fuse_ctrl_lc_otp_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_lc_otp_if_pkg_sve.F | 10 + .../src/fuse_ctrl_lc_otp_if2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_lc_otp_if_agent.svh | 67 + .../src/fuse_ctrl_lc_otp_if_configuration.svh | 193 ++ .../src/fuse_ctrl_lc_otp_if_driver.svh | 105 + .../src/fuse_ctrl_lc_otp_if_driver_bfm.sv | 321 +++ .../src/fuse_ctrl_lc_otp_if_if.sv | 98 + ...trl_lc_otp_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_lc_otp_if_macros.svh | 153 ++ .../src/fuse_ctrl_lc_otp_if_monitor.svh | 101 + .../src/fuse_ctrl_lc_otp_if_monitor_bfm.sv | 202 ++ .../fuse_ctrl_lc_otp_if_random_sequence.svh | 67 + ...fuse_ctrl_lc_otp_if_responder_sequence.svh | 63 + .../src/fuse_ctrl_lc_otp_if_sequence_base.svh | 110 + .../src/fuse_ctrl_lc_otp_if_transaction.svh | 201 ++ ...se_ctrl_lc_otp_if_transaction_coverage.svh | 86 + .../src/fuse_ctrl_lc_otp_if_typedefs.svh | 34 + .../src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_lc_otp_if_interface.yaml | 57 + .../fuse_ctrl_lc_otp_in_if_pkg/.project | 30 + .../fuse_ctrl_lc_otp_in_if_pkg/.svproject | 16 + .../fuse_ctrl_lc_otp_in_if_pkg/Makefile | 66 + .../fuse_ctrl_lc_otp_in_if_pkg/compile.do | 14 + .../fuse_ctrl_lc_otp_in_if.compile | 3 + .../fuse_ctrl_lc_otp_in_if_bfm.vinfo | 6 + .../fuse_ctrl_lc_otp_in_if_common.compile | 7 + .../fuse_ctrl_lc_otp_in_if_filelist_hdl.f | 1 + .../fuse_ctrl_lc_otp_in_if_filelist_hvl.f | 1 + .../fuse_ctrl_lc_otp_in_if_filelist_xrtl.f | 3 + .../fuse_ctrl_lc_otp_in_if_hdl.compile | 9 + .../fuse_ctrl_lc_otp_in_if_hvl.compile | 7 + .../fuse_ctrl_lc_otp_in_if_pkg.sv | 91 + .../fuse_ctrl_lc_otp_in_if_pkg.vinfo | 4 + .../fuse_ctrl_lc_otp_in_if_pkg_hdl.sv | 52 + .../fuse_ctrl_lc_otp_in_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_lc_otp_in_if_pkg_sve.F | 10 + .../fuse_ctrl_lc_otp_in_if2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_lc_otp_in_if_agent.svh | 67 + .../fuse_ctrl_lc_otp_in_if_configuration.svh | 193 ++ .../src/fuse_ctrl_lc_otp_in_if_driver.svh | 105 + .../src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv | 321 +++ .../src/fuse_ctrl_lc_otp_in_if_if.sv | 98 + ..._lc_otp_in_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_lc_otp_in_if_macros.svh | 153 ++ .../src/fuse_ctrl_lc_otp_in_if_monitor.svh | 101 + .../src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv | 202 ++ ...fuse_ctrl_lc_otp_in_if_random_sequence.svh | 67 + ...e_ctrl_lc_otp_in_if_responder_sequence.svh | 63 + .../fuse_ctrl_lc_otp_in_if_sequence_base.svh | 110 + .../fuse_ctrl_lc_otp_in_if_transaction.svh | 201 ++ ...ctrl_lc_otp_in_if_transaction_coverage.svh | 86 + .../src/fuse_ctrl_lc_otp_in_if_typedefs.svh | 34 + .../fuse_ctrl_lc_otp_in_if_typedefs_hdl.svh | 35 + .../fuse_ctrl_lc_otp_in_if_interface.yaml | 57 + .../fuse_ctrl_lc_otp_in_pkg/.project | 30 + .../fuse_ctrl_lc_otp_in_pkg/.svproject | 16 + .../fuse_ctrl_lc_otp_in_pkg/Makefile | 66 + .../fuse_ctrl_lc_otp_in_pkg/compile.do | 14 + .../fuse_ctrl_lc_otp_in.compile | 3 + .../fuse_ctrl_lc_otp_in_bfm.vinfo | 6 + .../fuse_ctrl_lc_otp_in_common.compile | 7 + .../fuse_ctrl_lc_otp_in_filelist_hdl.f | 1 + .../fuse_ctrl_lc_otp_in_filelist_hvl.f | 1 + .../fuse_ctrl_lc_otp_in_filelist_xrtl.f | 3 + .../fuse_ctrl_lc_otp_in_hdl.compile | 9 + .../fuse_ctrl_lc_otp_in_hvl.compile | 7 + .../fuse_ctrl_lc_otp_in_pkg.sv | 91 + .../fuse_ctrl_lc_otp_in_pkg.vinfo | 4 + .../fuse_ctrl_lc_otp_in_pkg_hdl.sv | 52 + .../fuse_ctrl_lc_otp_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_lc_otp_in_pkg_sve.F | 10 + .../src/fuse_ctrl_lc_otp_in2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_lc_otp_in_agent.svh | 67 + .../src/fuse_ctrl_lc_otp_in_configuration.svh | 193 ++ .../src/fuse_ctrl_lc_otp_in_driver.svh | 105 + .../src/fuse_ctrl_lc_otp_in_driver_bfm.sv | 321 +++ .../src/fuse_ctrl_lc_otp_in_if.sv | 98 + ...trl_lc_otp_in_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_lc_otp_in_macros.svh | 153 ++ .../src/fuse_ctrl_lc_otp_in_monitor.svh | 101 + .../src/fuse_ctrl_lc_otp_in_monitor_bfm.sv | 202 ++ .../fuse_ctrl_lc_otp_in_random_sequence.svh | 67 + ...fuse_ctrl_lc_otp_in_responder_sequence.svh | 63 + .../src/fuse_ctrl_lc_otp_in_sequence_base.svh | 110 + .../src/fuse_ctrl_lc_otp_in_transaction.svh | 201 ++ ...se_ctrl_lc_otp_in_transaction_coverage.svh | 86 + .../src/fuse_ctrl_lc_otp_in_typedefs.svh | 34 + .../src/fuse_ctrl_lc_otp_in_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_lc_otp_in_interface.yaml | 57 + .../fuse_ctrl_lc_otp_out_if_pkg/.project | 30 + .../fuse_ctrl_lc_otp_out_if_pkg/.svproject | 16 + .../fuse_ctrl_lc_otp_out_if_pkg/Makefile | 66 + .../fuse_ctrl_lc_otp_out_if_pkg/compile.do | 14 + .../fuse_ctrl_lc_otp_out_if.compile | 3 + .../fuse_ctrl_lc_otp_out_if_bfm.vinfo | 6 + .../fuse_ctrl_lc_otp_out_if_common.compile | 7 + .../fuse_ctrl_lc_otp_out_if_filelist_hdl.f | 1 + .../fuse_ctrl_lc_otp_out_if_filelist_hvl.f | 1 + .../fuse_ctrl_lc_otp_out_if_filelist_xrtl.f | 3 + .../fuse_ctrl_lc_otp_out_if_hdl.compile | 9 + .../fuse_ctrl_lc_otp_out_if_hvl.compile | 7 + .../fuse_ctrl_lc_otp_out_if_pkg.sv | 91 + .../fuse_ctrl_lc_otp_out_if_pkg.vinfo | 4 + .../fuse_ctrl_lc_otp_out_if_pkg_hdl.sv | 52 + .../fuse_ctrl_lc_otp_out_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_lc_otp_out_if_pkg_sve.F | 10 + .../fuse_ctrl_lc_otp_out_if2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_lc_otp_out_if_agent.svh | 67 + .../fuse_ctrl_lc_otp_out_if_configuration.svh | 193 ++ .../src/fuse_ctrl_lc_otp_out_if_driver.svh | 105 + .../src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv | 299 +++ .../src/fuse_ctrl_lc_otp_out_if_if.sv | 88 + ...lc_otp_out_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_lc_otp_out_if_macros.svh | 135 ++ .../src/fuse_ctrl_lc_otp_out_if_monitor.svh | 101 + .../fuse_ctrl_lc_otp_out_if_monitor_bfm.sv | 194 ++ ...use_ctrl_lc_otp_out_if_random_sequence.svh | 67 + ..._ctrl_lc_otp_out_if_responder_sequence.svh | 63 + .../fuse_ctrl_lc_otp_out_if_sequence_base.svh | 110 + .../fuse_ctrl_lc_otp_out_if_transaction.svh | 196 ++ ...trl_lc_otp_out_if_transaction_coverage.svh | 84 + .../src/fuse_ctrl_lc_otp_out_if_typedefs.svh | 34 + .../fuse_ctrl_lc_otp_out_if_typedefs_hdl.svh | 35 + .../fuse_ctrl_lc_otp_out_if_interface.yaml | 37 + .../fuse_ctrl_lc_otp_out_pkg/.project | 30 + .../fuse_ctrl_lc_otp_out_pkg/.svproject | 16 + .../fuse_ctrl_lc_otp_out_pkg/Makefile | 66 + .../fuse_ctrl_lc_otp_out_pkg/compile.do | 14 + .../fuse_ctrl_lc_otp_out.compile | 3 + .../fuse_ctrl_lc_otp_out_bfm.vinfo | 6 + .../fuse_ctrl_lc_otp_out_common.compile | 7 + .../fuse_ctrl_lc_otp_out_filelist_hdl.f | 1 + .../fuse_ctrl_lc_otp_out_filelist_hvl.f | 1 + .../fuse_ctrl_lc_otp_out_filelist_xrtl.f | 3 + .../fuse_ctrl_lc_otp_out_hdl.compile | 9 + .../fuse_ctrl_lc_otp_out_hvl.compile | 7 + .../fuse_ctrl_lc_otp_out_pkg.sv | 91 + .../fuse_ctrl_lc_otp_out_pkg.vinfo | 4 + .../fuse_ctrl_lc_otp_out_pkg_hdl.sv | 52 + .../fuse_ctrl_lc_otp_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_lc_otp_out_pkg_sve.F | 10 + .../src/fuse_ctrl_lc_otp_out2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_lc_otp_out_agent.svh | 67 + .../fuse_ctrl_lc_otp_out_configuration.svh | 193 ++ .../src/fuse_ctrl_lc_otp_out_driver.svh | 105 + .../src/fuse_ctrl_lc_otp_out_driver_bfm.sv | 299 +++ .../src/fuse_ctrl_lc_otp_out_if.sv | 88 + ...rl_lc_otp_out_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_lc_otp_out_macros.svh | 135 ++ .../src/fuse_ctrl_lc_otp_out_monitor.svh | 101 + .../src/fuse_ctrl_lc_otp_out_monitor_bfm.sv | 194 ++ .../fuse_ctrl_lc_otp_out_random_sequence.svh | 67 + ...use_ctrl_lc_otp_out_responder_sequence.svh | 63 + .../fuse_ctrl_lc_otp_out_sequence_base.svh | 110 + .../src/fuse_ctrl_lc_otp_out_transaction.svh | 196 ++ ...e_ctrl_lc_otp_out_transaction_coverage.svh | 84 + .../src/fuse_ctrl_lc_otp_out_typedefs.svh | 34 + .../src/fuse_ctrl_lc_otp_out_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_lc_otp_out_interface.yaml | 37 + .../fuse_ctrl_out_if_pkg/.project | 30 + .../fuse_ctrl_out_if_pkg/.svproject | 16 + .../fuse_ctrl_out_if_pkg/Makefile | 66 + .../fuse_ctrl_out_if_pkg/compile.do | 14 + .../fuse_ctrl_out_if.compile | 3 + .../fuse_ctrl_out_if_bfm.vinfo | 6 + .../fuse_ctrl_out_if_common.compile | 7 + .../fuse_ctrl_out_if_filelist_hdl.f | 1 + .../fuse_ctrl_out_if_filelist_hvl.f | 1 + .../fuse_ctrl_out_if_filelist_xrtl.f | 3 + .../fuse_ctrl_out_if_hdl.compile | 9 + .../fuse_ctrl_out_if_hvl.compile | 7 + .../fuse_ctrl_out_if_pkg.sv | 91 + .../fuse_ctrl_out_if_pkg.vinfo | 4 + .../fuse_ctrl_out_if_pkg_hdl.sv | 52 + .../fuse_ctrl_out_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_out_if_pkg_sve.F | 10 + .../src/fuse_ctrl_out_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_out_if_agent.svh | 109 + .../src/fuse_ctrl_out_if_configuration.svh | 241 +++ .../src/fuse_ctrl_out_if_driver.svh | 141 ++ .../src/fuse_ctrl_out_if_driver_bfm.sv | 382 ++++ .../src/fuse_ctrl_out_if_if.sv | 134 ++ ...e_ctrl_out_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_out_if_macros.svh | 135 ++ .../src/fuse_ctrl_out_if_monitor.svh | 131 ++ .../src/fuse_ctrl_out_if_monitor_bfm.sv | 230 +++ .../src/fuse_ctrl_out_if_random_sequence.svh | 91 + .../fuse_ctrl_out_if_responder_sequence.svh | 87 + .../src/fuse_ctrl_out_if_sequence_base.svh | 146 ++ .../src/fuse_ctrl_out_if_transaction.svh | 223 +++ .../fuse_ctrl_out_if_transaction_coverage.svh | 103 + .../src/fuse_ctrl_out_if_typedefs.svh | 34 + .../src/fuse_ctrl_out_if_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_out_if_interface.yaml | 80 + .../fuse_ctrl_out_pkg/.project | 30 + .../fuse_ctrl_out_pkg/.svproject | 16 + .../fuse_ctrl_out_pkg/Makefile | 66 + .../fuse_ctrl_out_pkg/compile.do | 14 + .../fuse_ctrl_out_pkg/fuse_ctrl_out.compile | 3 + .../fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo | 6 + .../fuse_ctrl_out_common.compile | 7 + .../fuse_ctrl_out_filelist_hdl.f | 1 + .../fuse_ctrl_out_filelist_hvl.f | 1 + .../fuse_ctrl_out_filelist_xrtl.f | 3 + .../fuse_ctrl_out_hdl.compile | 9 + .../fuse_ctrl_out_hvl.compile | 7 + .../fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv | 91 + .../fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo | 4 + .../fuse_ctrl_out_pkg_hdl.sv | 52 + .../fuse_ctrl_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F | 10 + .../src/fuse_ctrl_out2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_out_agent.svh | 109 + .../src/fuse_ctrl_out_configuration.svh | 241 +++ .../src/fuse_ctrl_out_driver.svh | 141 ++ .../src/fuse_ctrl_out_driver_bfm.sv | 374 ++++ .../fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv | 124 ++ ...fuse_ctrl_out_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_out_macros.svh | 135 ++ .../src/fuse_ctrl_out_monitor.svh | 131 ++ .../src/fuse_ctrl_out_monitor_bfm.sv | 224 +++ .../src/fuse_ctrl_out_random_sequence.svh | 91 + .../src/fuse_ctrl_out_responder_sequence.svh | 87 + .../src/fuse_ctrl_out_sequence_base.svh | 146 ++ .../src/fuse_ctrl_out_transaction.svh | 223 +++ .../fuse_ctrl_out_transaction_coverage.svh | 103 + .../src/fuse_ctrl_out_typedefs.svh | 34 + .../src/fuse_ctrl_out_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_out_interface.yaml | 72 + .../fuse_ctrl_prim_axi_read_if_pkg/.project | 30 + .../fuse_ctrl_prim_axi_read_if_pkg/.svproject | 16 + .../fuse_ctrl_prim_axi_read_if_pkg/Makefile | 66 + .../fuse_ctrl_prim_axi_read_if_pkg/compile.do | 14 + .../fuse_ctrl_prim_axi_read_if.compile | 3 + .../fuse_ctrl_prim_axi_read_if_bfm.vinfo | 6 + .../fuse_ctrl_prim_axi_read_if_common.compile | 7 + .../fuse_ctrl_prim_axi_read_if_filelist_hdl.f | 1 + .../fuse_ctrl_prim_axi_read_if_filelist_hvl.f | 1 + ...fuse_ctrl_prim_axi_read_if_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_read_if_hdl.compile | 9 + .../fuse_ctrl_prim_axi_read_if_hvl.compile | 7 + .../fuse_ctrl_prim_axi_read_if_pkg.sv | 91 + .../fuse_ctrl_prim_axi_read_if_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_read_if_pkg_hdl.sv | 52 + .../fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_read_if_pkg_sve.F | 10 + ...fuse_ctrl_prim_axi_read_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_prim_axi_read_if_agent.svh | 109 + ...se_ctrl_prim_axi_read_if_configuration.svh | 241 +++ .../src/fuse_ctrl_prim_axi_read_if_driver.svh | 141 ++ .../fuse_ctrl_prim_axi_read_if_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_prim_axi_read_if_if.sv | 124 ++ ...m_axi_read_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_prim_axi_read_if_macros.svh | 207 ++ .../fuse_ctrl_prim_axi_read_if_monitor.svh | 131 ++ .../fuse_ctrl_prim_axi_read_if_monitor_bfm.sv | 232 +++ ..._ctrl_prim_axi_read_if_random_sequence.svh | 91 + ...rl_prim_axi_read_if_responder_sequence.svh | 87 + ...se_ctrl_prim_axi_read_if_sequence_base.svh | 146 ++ ...fuse_ctrl_prim_axi_read_if_transaction.svh | 243 +++ ..._prim_axi_read_if_transaction_coverage.svh | 110 + .../fuse_ctrl_prim_axi_read_if_typedefs.svh | 34 + ...use_ctrl_prim_axi_read_if_typedefs_hdl.svh | 35 + .../fuse_ctrl_prim_axi_read_if_interface.yaml | 121 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_read_in_if.compile | 3 + .../fuse_ctrl_prim_axi_read_in_if_bfm.vinfo | 6 + ...se_ctrl_prim_axi_read_in_if_common.compile | 7 + ...se_ctrl_prim_axi_read_in_if_filelist_hdl.f | 1 + ...se_ctrl_prim_axi_read_in_if_filelist_hvl.f | 1 + ...e_ctrl_prim_axi_read_in_if_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_read_in_if_hdl.compile | 9 + .../fuse_ctrl_prim_axi_read_in_if_hvl.compile | 7 + .../fuse_ctrl_prim_axi_read_in_if_pkg.sv | 91 + .../fuse_ctrl_prim_axi_read_in_if_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv | 52 + ...use_ctrl_prim_axi_read_in_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_read_in_if_pkg_sve.F | 10 + ...e_ctrl_prim_axi_read_in_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_prim_axi_read_in_if_agent.svh | 109 + ...ctrl_prim_axi_read_in_if_configuration.svh | 241 +++ .../fuse_ctrl_prim_axi_read_in_if_driver.svh | 141 ++ ...use_ctrl_prim_axi_read_in_if_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_prim_axi_read_in_if_if.sv | 124 ++ ...xi_read_in_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_prim_axi_read_in_if_macros.svh | 207 ++ .../fuse_ctrl_prim_axi_read_in_if_monitor.svh | 131 ++ ...se_ctrl_prim_axi_read_in_if_monitor_bfm.sv | 232 +++ ...rl_prim_axi_read_in_if_random_sequence.svh | 91 + ...prim_axi_read_in_if_responder_sequence.svh | 87 + ...ctrl_prim_axi_read_in_if_sequence_base.svh | 146 ++ ...e_ctrl_prim_axi_read_in_if_transaction.svh | 243 +++ ...im_axi_read_in_if_transaction_coverage.svh | 110 + ...fuse_ctrl_prim_axi_read_in_if_typedefs.svh | 34 + ..._ctrl_prim_axi_read_in_if_typedefs_hdl.svh | 35 + ...se_ctrl_prim_axi_read_in_if_interface.yaml | 121 ++ .../fuse_ctrl_prim_axi_read_in_pkg/.project | 30 + .../fuse_ctrl_prim_axi_read_in_pkg/.svproject | 16 + .../fuse_ctrl_prim_axi_read_in_pkg/Makefile | 66 + .../fuse_ctrl_prim_axi_read_in_pkg/compile.do | 14 + .../fuse_ctrl_prim_axi_read_in.compile | 3 + .../fuse_ctrl_prim_axi_read_in_bfm.vinfo | 6 + .../fuse_ctrl_prim_axi_read_in_common.compile | 7 + .../fuse_ctrl_prim_axi_read_in_filelist_hdl.f | 1 + .../fuse_ctrl_prim_axi_read_in_filelist_hvl.f | 1 + ...fuse_ctrl_prim_axi_read_in_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_read_in_hdl.compile | 9 + .../fuse_ctrl_prim_axi_read_in_hvl.compile | 7 + .../fuse_ctrl_prim_axi_read_in_pkg.sv | 91 + .../fuse_ctrl_prim_axi_read_in_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_read_in_pkg_hdl.sv | 52 + .../fuse_ctrl_prim_axi_read_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_read_in_pkg_sve.F | 10 + ...fuse_ctrl_prim_axi_read_in2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_prim_axi_read_in_agent.svh | 109 + ...se_ctrl_prim_axi_read_in_configuration.svh | 241 +++ .../src/fuse_ctrl_prim_axi_read_in_driver.svh | 141 ++ .../fuse_ctrl_prim_axi_read_in_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_prim_axi_read_in_if.sv | 124 ++ ...m_axi_read_in_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_prim_axi_read_in_macros.svh | 207 ++ .../fuse_ctrl_prim_axi_read_in_monitor.svh | 131 ++ .../fuse_ctrl_prim_axi_read_in_monitor_bfm.sv | 232 +++ ..._ctrl_prim_axi_read_in_random_sequence.svh | 91 + ...rl_prim_axi_read_in_responder_sequence.svh | 87 + ...se_ctrl_prim_axi_read_in_sequence_base.svh | 146 ++ ...fuse_ctrl_prim_axi_read_in_transaction.svh | 243 +++ ..._prim_axi_read_in_transaction_coverage.svh | 110 + .../fuse_ctrl_prim_axi_read_in_typedefs.svh | 34 + ...use_ctrl_prim_axi_read_in_typedefs_hdl.svh | 35 + .../fuse_ctrl_prim_axi_read_in_interface.yaml | 121 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_read_out_if.compile | 3 + .../fuse_ctrl_prim_axi_read_out_if_bfm.vinfo | 6 + ...e_ctrl_prim_axi_read_out_if_common.compile | 7 + ...e_ctrl_prim_axi_read_out_if_filelist_hdl.f | 1 + ...e_ctrl_prim_axi_read_out_if_filelist_hvl.f | 1 + ..._ctrl_prim_axi_read_out_if_filelist_xrtl.f | 3 + ...fuse_ctrl_prim_axi_read_out_if_hdl.compile | 9 + ...fuse_ctrl_prim_axi_read_out_if_hvl.compile | 7 + .../fuse_ctrl_prim_axi_read_out_if_pkg.sv | 91 + .../fuse_ctrl_prim_axi_read_out_if_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv | 52 + ...se_ctrl_prim_axi_read_out_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_read_out_if_pkg_sve.F | 10 + ..._ctrl_prim_axi_read_out_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_prim_axi_read_out_if_agent.svh | 109 + ...trl_prim_axi_read_out_if_configuration.svh | 241 +++ .../fuse_ctrl_prim_axi_read_out_if_driver.svh | 141 ++ ...se_ctrl_prim_axi_read_out_if_driver_bfm.sv | 352 ++++ .../src/fuse_ctrl_prim_axi_read_out_if_if.sv | 109 + ...i_read_out_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_prim_axi_read_out_if_macros.svh | 180 ++ ...fuse_ctrl_prim_axi_read_out_if_monitor.svh | 131 ++ ...e_ctrl_prim_axi_read_out_if_monitor_bfm.sv | 220 ++ ...l_prim_axi_read_out_if_random_sequence.svh | 91 + ...rim_axi_read_out_if_responder_sequence.svh | 87 + ...trl_prim_axi_read_out_if_sequence_base.svh | 146 ++ ..._ctrl_prim_axi_read_out_if_transaction.svh | 240 +++ ...m_axi_read_out_if_transaction_coverage.svh | 107 + ...use_ctrl_prim_axi_read_out_if_typedefs.svh | 34 + ...ctrl_prim_axi_read_out_if_typedefs_hdl.svh | 35 + ...e_ctrl_prim_axi_read_out_if_interface.yaml | 91 + .../fuse_ctrl_prim_axi_read_out_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_prim_axi_read_out_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_read_out.compile | 3 + .../fuse_ctrl_prim_axi_read_out_bfm.vinfo | 6 + ...fuse_ctrl_prim_axi_read_out_common.compile | 7 + ...fuse_ctrl_prim_axi_read_out_filelist_hdl.f | 1 + ...fuse_ctrl_prim_axi_read_out_filelist_hvl.f | 1 + ...use_ctrl_prim_axi_read_out_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_read_out_hdl.compile | 9 + .../fuse_ctrl_prim_axi_read_out_hvl.compile | 7 + .../fuse_ctrl_prim_axi_read_out_pkg.sv | 91 + .../fuse_ctrl_prim_axi_read_out_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_read_out_pkg_hdl.sv | 52 + .../fuse_ctrl_prim_axi_read_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_read_out_pkg_sve.F | 10 + ...use_ctrl_prim_axi_read_out2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_prim_axi_read_out_agent.svh | 109 + ...e_ctrl_prim_axi_read_out_configuration.svh | 241 +++ .../fuse_ctrl_prim_axi_read_out_driver.svh | 141 ++ .../fuse_ctrl_prim_axi_read_out_driver_bfm.sv | 352 ++++ .../src/fuse_ctrl_prim_axi_read_out_if.sv | 109 + ..._axi_read_out_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_prim_axi_read_out_macros.svh | 180 ++ .../fuse_ctrl_prim_axi_read_out_monitor.svh | 131 ++ ...fuse_ctrl_prim_axi_read_out_monitor_bfm.sv | 220 ++ ...ctrl_prim_axi_read_out_random_sequence.svh | 91 + ...l_prim_axi_read_out_responder_sequence.svh | 87 + ...e_ctrl_prim_axi_read_out_sequence_base.svh | 146 ++ ...use_ctrl_prim_axi_read_out_transaction.svh | 240 +++ ...prim_axi_read_out_transaction_coverage.svh | 107 + .../fuse_ctrl_prim_axi_read_out_typedefs.svh | 34 + ...se_ctrl_prim_axi_read_out_typedefs_hdl.svh | 35 + ...fuse_ctrl_prim_axi_read_out_interface.yaml | 91 + .../fuse_ctrl_prim_axi_write_if_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_prim_axi_write_if_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_write_if.compile | 3 + .../fuse_ctrl_prim_axi_write_if_bfm.vinfo | 6 + ...fuse_ctrl_prim_axi_write_if_common.compile | 7 + ...fuse_ctrl_prim_axi_write_if_filelist_hdl.f | 1 + ...fuse_ctrl_prim_axi_write_if_filelist_hvl.f | 1 + ...use_ctrl_prim_axi_write_if_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_write_if_hdl.compile | 9 + .../fuse_ctrl_prim_axi_write_if_hvl.compile | 7 + .../fuse_ctrl_prim_axi_write_if_pkg.sv | 91 + .../fuse_ctrl_prim_axi_write_if_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_write_if_pkg_hdl.sv | 52 + .../fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_write_if_pkg_sve.F | 10 + ...use_ctrl_prim_axi_write_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_prim_axi_write_if_agent.svh | 109 + ...e_ctrl_prim_axi_write_if_configuration.svh | 241 +++ .../fuse_ctrl_prim_axi_write_if_driver.svh | 141 ++ .../fuse_ctrl_prim_axi_write_if_driver_bfm.sv | 429 ++++ .../src/fuse_ctrl_prim_axi_write_if_if.sv | 144 ++ ..._axi_write_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_prim_axi_write_if_macros.svh | 243 +++ .../fuse_ctrl_prim_axi_write_if_monitor.svh | 131 ++ ...fuse_ctrl_prim_axi_write_if_monitor_bfm.sv | 248 +++ ...ctrl_prim_axi_write_if_random_sequence.svh | 91 + ...l_prim_axi_write_if_responder_sequence.svh | 87 + ...e_ctrl_prim_axi_write_if_sequence_base.svh | 146 ++ ...use_ctrl_prim_axi_write_if_transaction.svh | 256 +++ ...prim_axi_write_if_transaction_coverage.svh | 114 ++ .../fuse_ctrl_prim_axi_write_if_typedefs.svh | 34 + ...se_ctrl_prim_axi_write_if_typedefs_hdl.svh | 35 + ...fuse_ctrl_prim_axi_write_if_interface.yaml | 161 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_write_in_if.compile | 3 + .../fuse_ctrl_prim_axi_write_in_if_bfm.vinfo | 6 + ...e_ctrl_prim_axi_write_in_if_common.compile | 7 + ...e_ctrl_prim_axi_write_in_if_filelist_hdl.f | 1 + ...e_ctrl_prim_axi_write_in_if_filelist_hvl.f | 1 + ..._ctrl_prim_axi_write_in_if_filelist_xrtl.f | 3 + ...fuse_ctrl_prim_axi_write_in_if_hdl.compile | 9 + ...fuse_ctrl_prim_axi_write_in_if_hvl.compile | 7 + .../fuse_ctrl_prim_axi_write_in_if_pkg.sv | 91 + .../fuse_ctrl_prim_axi_write_in_if_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv | 52 + ...se_ctrl_prim_axi_write_in_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_write_in_if_pkg_sve.F | 10 + ..._ctrl_prim_axi_write_in_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_prim_axi_write_in_if_agent.svh | 109 + ...trl_prim_axi_write_in_if_configuration.svh | 241 +++ .../fuse_ctrl_prim_axi_write_in_if_driver.svh | 141 ++ ...se_ctrl_prim_axi_write_in_if_driver_bfm.sv | 429 ++++ .../src/fuse_ctrl_prim_axi_write_in_if_if.sv | 144 ++ ...i_write_in_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_prim_axi_write_in_if_macros.svh | 243 +++ ...fuse_ctrl_prim_axi_write_in_if_monitor.svh | 131 ++ ...e_ctrl_prim_axi_write_in_if_monitor_bfm.sv | 248 +++ ...l_prim_axi_write_in_if_random_sequence.svh | 91 + ...rim_axi_write_in_if_responder_sequence.svh | 87 + ...trl_prim_axi_write_in_if_sequence_base.svh | 146 ++ ..._ctrl_prim_axi_write_in_if_transaction.svh | 256 +++ ...m_axi_write_in_if_transaction_coverage.svh | 114 ++ ...use_ctrl_prim_axi_write_in_if_typedefs.svh | 34 + ...ctrl_prim_axi_write_in_if_typedefs_hdl.svh | 35 + ...e_ctrl_prim_axi_write_in_if_interface.yaml | 161 ++ .../fuse_ctrl_prim_axi_write_in_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_prim_axi_write_in_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_write_in.compile | 3 + .../fuse_ctrl_prim_axi_write_in_bfm.vinfo | 6 + ...fuse_ctrl_prim_axi_write_in_common.compile | 7 + ...fuse_ctrl_prim_axi_write_in_filelist_hdl.f | 1 + ...fuse_ctrl_prim_axi_write_in_filelist_hvl.f | 1 + ...use_ctrl_prim_axi_write_in_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_write_in_hdl.compile | 9 + .../fuse_ctrl_prim_axi_write_in_hvl.compile | 7 + .../fuse_ctrl_prim_axi_write_in_pkg.sv | 91 + .../fuse_ctrl_prim_axi_write_in_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_write_in_pkg_hdl.sv | 52 + .../fuse_ctrl_prim_axi_write_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_write_in_pkg_sve.F | 10 + ...use_ctrl_prim_axi_write_in2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_prim_axi_write_in_agent.svh | 109 + ...e_ctrl_prim_axi_write_in_configuration.svh | 241 +++ .../fuse_ctrl_prim_axi_write_in_driver.svh | 141 ++ .../fuse_ctrl_prim_axi_write_in_driver_bfm.sv | 429 ++++ .../src/fuse_ctrl_prim_axi_write_in_if.sv | 144 ++ ..._axi_write_in_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_prim_axi_write_in_macros.svh | 243 +++ .../fuse_ctrl_prim_axi_write_in_monitor.svh | 131 ++ ...fuse_ctrl_prim_axi_write_in_monitor_bfm.sv | 248 +++ ...ctrl_prim_axi_write_in_random_sequence.svh | 91 + ...l_prim_axi_write_in_responder_sequence.svh | 87 + ...e_ctrl_prim_axi_write_in_sequence_base.svh | 146 ++ ...use_ctrl_prim_axi_write_in_transaction.svh | 256 +++ ...prim_axi_write_in_transaction_coverage.svh | 114 ++ .../fuse_ctrl_prim_axi_write_in_typedefs.svh | 34 + ...se_ctrl_prim_axi_write_in_typedefs_hdl.svh | 35 + ...fuse_ctrl_prim_axi_write_in_interface.yaml | 161 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_write_out_if.compile | 3 + .../fuse_ctrl_prim_axi_write_out_if_bfm.vinfo | 6 + ..._ctrl_prim_axi_write_out_if_common.compile | 7 + ..._ctrl_prim_axi_write_out_if_filelist_hdl.f | 1 + ..._ctrl_prim_axi_write_out_if_filelist_hvl.f | 1 + ...ctrl_prim_axi_write_out_if_filelist_xrtl.f | 3 + ...use_ctrl_prim_axi_write_out_if_hdl.compile | 9 + ...use_ctrl_prim_axi_write_out_if_hvl.compile | 7 + .../fuse_ctrl_prim_axi_write_out_if_pkg.sv | 91 + .../fuse_ctrl_prim_axi_write_out_if_pkg.vinfo | 4 + ...fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv | 52 + ...e_ctrl_prim_axi_write_out_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_write_out_if_pkg_sve.F | 10 + ...ctrl_prim_axi_write_out_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_prim_axi_write_out_if_agent.svh | 109 + ...rl_prim_axi_write_out_if_configuration.svh | 241 +++ ...fuse_ctrl_prim_axi_write_out_if_driver.svh | 141 ++ ...e_ctrl_prim_axi_write_out_if_driver_bfm.sv | 341 ++++ .../src/fuse_ctrl_prim_axi_write_out_if_if.sv | 104 + ..._write_out_if_infact_coverage_strategy.csv | 6 + ...fuse_ctrl_prim_axi_write_out_if_macros.svh | 171 ++ ...use_ctrl_prim_axi_write_out_if_monitor.svh | 131 ++ ..._ctrl_prim_axi_write_out_if_monitor_bfm.sv | 216 ++ ..._prim_axi_write_out_if_random_sequence.svh | 91 + ...im_axi_write_out_if_responder_sequence.svh | 87 + ...rl_prim_axi_write_out_if_sequence_base.svh | 146 ++ ...ctrl_prim_axi_write_out_if_transaction.svh | 236 +++ ..._axi_write_out_if_transaction_coverage.svh | 106 + ...se_ctrl_prim_axi_write_out_if_typedefs.svh | 34 + ...trl_prim_axi_write_out_if_typedefs_hdl.svh | 35 + ..._ctrl_prim_axi_write_out_if_interface.yaml | 81 + .../fuse_ctrl_prim_axi_write_out_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_prim_axi_write_out_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_write_out.compile | 3 + .../fuse_ctrl_prim_axi_write_out_bfm.vinfo | 6 + ...use_ctrl_prim_axi_write_out_common.compile | 7 + ...use_ctrl_prim_axi_write_out_filelist_hdl.f | 1 + ...use_ctrl_prim_axi_write_out_filelist_hvl.f | 1 + ...se_ctrl_prim_axi_write_out_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_write_out_hdl.compile | 9 + .../fuse_ctrl_prim_axi_write_out_hvl.compile | 7 + .../fuse_ctrl_prim_axi_write_out_pkg.sv | 91 + .../fuse_ctrl_prim_axi_write_out_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_write_out_pkg_hdl.sv | 52 + ...fuse_ctrl_prim_axi_write_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_write_out_pkg_sve.F | 10 + ...se_ctrl_prim_axi_write_out2reg_adapter.svh | 142 ++ .../fuse_ctrl_prim_axi_write_out_agent.svh | 109 + ..._ctrl_prim_axi_write_out_configuration.svh | 241 +++ .../fuse_ctrl_prim_axi_write_out_driver.svh | 141 ++ ...fuse_ctrl_prim_axi_write_out_driver_bfm.sv | 341 ++++ .../src/fuse_ctrl_prim_axi_write_out_if.sv | 104 + ...axi_write_out_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_prim_axi_write_out_macros.svh | 171 ++ .../fuse_ctrl_prim_axi_write_out_monitor.svh | 131 ++ ...use_ctrl_prim_axi_write_out_monitor_bfm.sv | 216 ++ ...trl_prim_axi_write_out_random_sequence.svh | 91 + ..._prim_axi_write_out_responder_sequence.svh | 87 + ..._ctrl_prim_axi_write_out_sequence_base.svh | 146 ++ ...se_ctrl_prim_axi_write_out_transaction.svh | 236 +++ ...rim_axi_write_out_transaction_coverage.svh | 106 + .../fuse_ctrl_prim_axi_write_out_typedefs.svh | 34 + ...e_ctrl_prim_axi_write_out_typedefs_hdl.svh | 35 + ...use_ctrl_prim_axi_write_out_interface.yaml | 81 + .../fuse_ctrl_pwr_in_pkg/.project | 30 + .../fuse_ctrl_pwr_in_pkg/.svproject | 16 + .../fuse_ctrl_pwr_in_pkg/Makefile | 66 + .../fuse_ctrl_pwr_in_pkg/compile.do | 14 + .../fuse_ctrl_pwr_in.compile | 3 + .../fuse_ctrl_pwr_in_bfm.vinfo | 6 + .../fuse_ctrl_pwr_in_common.compile | 7 + .../fuse_ctrl_pwr_in_filelist_hdl.f | 1 + .../fuse_ctrl_pwr_in_filelist_hvl.f | 1 + .../fuse_ctrl_pwr_in_filelist_xrtl.f | 3 + .../fuse_ctrl_pwr_in_hdl.compile | 9 + .../fuse_ctrl_pwr_in_hvl.compile | 7 + .../fuse_ctrl_pwr_in_pkg.sv | 91 + .../fuse_ctrl_pwr_in_pkg.vinfo | 4 + .../fuse_ctrl_pwr_in_pkg_hdl.sv | 52 + .../fuse_ctrl_pwr_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_pwr_in_pkg_sve.F | 10 + .../src/fuse_ctrl_pwr_in2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_pwr_in_agent.svh | 67 + .../src/fuse_ctrl_pwr_in_configuration.svh | 193 ++ .../src/fuse_ctrl_pwr_in_driver.svh | 105 + .../src/fuse_ctrl_pwr_in_driver_bfm.sv | 294 +++ .../src/fuse_ctrl_pwr_in_if.sv | 83 + ...e_ctrl_pwr_in_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_pwr_in_macros.svh | 135 ++ .../src/fuse_ctrl_pwr_in_monitor.svh | 101 + .../src/fuse_ctrl_pwr_in_monitor_bfm.sv | 191 ++ .../src/fuse_ctrl_pwr_in_random_sequence.svh | 67 + .../fuse_ctrl_pwr_in_responder_sequence.svh | 63 + .../src/fuse_ctrl_pwr_in_sequence_base.svh | 110 + .../src/fuse_ctrl_pwr_in_transaction.svh | 195 ++ .../fuse_ctrl_pwr_in_transaction_coverage.svh | 84 + .../src/fuse_ctrl_pwr_in_typedefs.svh | 34 + .../src/fuse_ctrl_pwr_in_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_pwr_in_interface.yaml | 33 + .../fuse_ctrl_pwr_out_pkg/.project | 30 + .../fuse_ctrl_pwr_out_pkg/.svproject | 16 + .../fuse_ctrl_pwr_out_pkg/Makefile | 66 + .../fuse_ctrl_pwr_out_pkg/compile.do | 14 + .../fuse_ctrl_pwr_out.compile | 3 + .../fuse_ctrl_pwr_out_bfm.vinfo | 6 + .../fuse_ctrl_pwr_out_common.compile | 7 + .../fuse_ctrl_pwr_out_filelist_hdl.f | 1 + .../fuse_ctrl_pwr_out_filelist_hvl.f | 1 + .../fuse_ctrl_pwr_out_filelist_xrtl.f | 3 + .../fuse_ctrl_pwr_out_hdl.compile | 9 + .../fuse_ctrl_pwr_out_hvl.compile | 7 + .../fuse_ctrl_pwr_out_pkg.sv | 91 + .../fuse_ctrl_pwr_out_pkg.vinfo | 4 + .../fuse_ctrl_pwr_out_pkg_hdl.sv | 52 + .../fuse_ctrl_pwr_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_pwr_out_pkg_sve.F | 10 + .../src/fuse_ctrl_pwr_out2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_pwr_out_agent.svh | 67 + .../src/fuse_ctrl_pwr_out_configuration.svh | 193 ++ .../src/fuse_ctrl_pwr_out_driver.svh | 105 + .../src/fuse_ctrl_pwr_out_driver_bfm.sv | 294 +++ .../src/fuse_ctrl_pwr_out_if.sv | 83 + ..._ctrl_pwr_out_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_pwr_out_macros.svh | 135 ++ .../src/fuse_ctrl_pwr_out_monitor.svh | 101 + .../src/fuse_ctrl_pwr_out_monitor_bfm.sv | 191 ++ .../src/fuse_ctrl_pwr_out_random_sequence.svh | 67 + .../fuse_ctrl_pwr_out_responder_sequence.svh | 63 + .../src/fuse_ctrl_pwr_out_sequence_base.svh | 110 + .../src/fuse_ctrl_pwr_out_transaction.svh | 196 ++ ...fuse_ctrl_pwr_out_transaction_coverage.svh | 84 + .../src/fuse_ctrl_pwr_out_typedefs.svh | 34 + .../src/fuse_ctrl_pwr_out_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_pwr_out_interface.yaml | 33 + .../fuse_ctrl_rst_pkg/.project | 30 + .../fuse_ctrl_rst_pkg/.svproject | 16 + .../fuse_ctrl_rst_pkg/Makefile | 66 + .../fuse_ctrl_rst_pkg/compile.do | 14 + .../fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile | 3 + .../fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo | 6 + .../fuse_ctrl_rst_common.compile | 7 + .../fuse_ctrl_rst_filelist_hdl.f | 1 + .../fuse_ctrl_rst_filelist_hvl.f | 1 + .../fuse_ctrl_rst_filelist_xrtl.f | 3 + .../fuse_ctrl_rst_hdl.compile | 9 + .../fuse_ctrl_rst_hvl.compile | 7 + .../fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv | 91 + .../fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo | 4 + .../fuse_ctrl_rst_pkg_hdl.sv | 52 + .../fuse_ctrl_rst_pkg_hdl.vinfo | 2 + .../fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F | 10 + .../src/fuse_ctrl_rst2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_rst_agent.svh | 67 + .../src/fuse_ctrl_rst_configuration.svh | 193 ++ .../src/fuse_ctrl_rst_driver.svh | 105 + .../src/fuse_ctrl_rst_driver_bfm.sv | 292 +++ .../fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv | 78 + ...fuse_ctrl_rst_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_rst_macros.svh | 135 ++ .../src/fuse_ctrl_rst_monitor.svh | 101 + .../src/fuse_ctrl_rst_monitor_bfm.sv | 188 ++ .../src/fuse_ctrl_rst_random_sequence.svh | 67 + .../src/fuse_ctrl_rst_responder_sequence.svh | 63 + .../src/fuse_ctrl_rst_sequence_base.svh | 110 + .../src/fuse_ctrl_rst_transaction.svh | 197 ++ .../fuse_ctrl_rst_transaction_coverage.svh | 85 + .../src/fuse_ctrl_rst_typedefs.svh | 34 + .../src/fuse_ctrl_rst_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_rst_interface.yaml | 29 + .../fuse_ctrl_secreg_axi_read_if_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_secreg_axi_read_if_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_secreg_axi_read_if.compile | 3 + .../fuse_ctrl_secreg_axi_read_if_bfm.vinfo | 6 + ...use_ctrl_secreg_axi_read_if_common.compile | 7 + ...use_ctrl_secreg_axi_read_if_filelist_hdl.f | 1 + ...use_ctrl_secreg_axi_read_if_filelist_hvl.f | 1 + ...se_ctrl_secreg_axi_read_if_filelist_xrtl.f | 3 + .../fuse_ctrl_secreg_axi_read_if_hdl.compile | 9 + .../fuse_ctrl_secreg_axi_read_if_hvl.compile | 7 + .../fuse_ctrl_secreg_axi_read_if_pkg.sv | 91 + .../fuse_ctrl_secreg_axi_read_if_pkg.vinfo | 4 + .../fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv | 52 + ...fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_secreg_axi_read_if_pkg_sve.F | 10 + ...se_ctrl_secreg_axi_read_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_secreg_axi_read_if_agent.svh | 109 + ..._ctrl_secreg_axi_read_if_configuration.svh | 241 +++ .../fuse_ctrl_secreg_axi_read_if_driver.svh | 141 ++ ...fuse_ctrl_secreg_axi_read_if_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_secreg_axi_read_if_if.sv | 124 ++ ...g_axi_read_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_secreg_axi_read_if_macros.svh | 207 ++ .../fuse_ctrl_secreg_axi_read_if_monitor.svh | 131 ++ ...use_ctrl_secreg_axi_read_if_monitor_bfm.sv | 232 +++ ...trl_secreg_axi_read_if_random_sequence.svh | 91 + ..._secreg_axi_read_if_responder_sequence.svh | 87 + ..._ctrl_secreg_axi_read_if_sequence_base.svh | 146 ++ ...se_ctrl_secreg_axi_read_if_transaction.svh | 243 +++ ...ecreg_axi_read_if_transaction_coverage.svh | 110 + .../fuse_ctrl_secreg_axi_read_if_typedefs.svh | 34 + ...e_ctrl_secreg_axi_read_if_typedefs_hdl.svh | 35 + ...use_ctrl_secreg_axi_read_if_interface.yaml | 121 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_secreg_axi_read_in_if.compile | 3 + .../fuse_ctrl_secreg_axi_read_in_if_bfm.vinfo | 6 + ..._ctrl_secreg_axi_read_in_if_common.compile | 7 + ..._ctrl_secreg_axi_read_in_if_filelist_hdl.f | 1 + ..._ctrl_secreg_axi_read_in_if_filelist_hvl.f | 1 + ...ctrl_secreg_axi_read_in_if_filelist_xrtl.f | 3 + ...use_ctrl_secreg_axi_read_in_if_hdl.compile | 9 + ...use_ctrl_secreg_axi_read_in_if_hvl.compile | 7 + .../fuse_ctrl_secreg_axi_read_in_if_pkg.sv | 91 + .../fuse_ctrl_secreg_axi_read_in_if_pkg.vinfo | 4 + ...fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv | 52 + ...e_ctrl_secreg_axi_read_in_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_secreg_axi_read_in_if_pkg_sve.F | 10 + ...ctrl_secreg_axi_read_in_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_secreg_axi_read_in_if_agent.svh | 109 + ...rl_secreg_axi_read_in_if_configuration.svh | 241 +++ ...fuse_ctrl_secreg_axi_read_in_if_driver.svh | 141 ++ ...e_ctrl_secreg_axi_read_in_if_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_secreg_axi_read_in_if_if.sv | 124 ++ ...xi_read_in_if_infact_coverage_strategy.csv | 6 + ...fuse_ctrl_secreg_axi_read_in_if_macros.svh | 207 ++ ...use_ctrl_secreg_axi_read_in_if_monitor.svh | 131 ++ ..._ctrl_secreg_axi_read_in_if_monitor_bfm.sv | 232 +++ ..._secreg_axi_read_in_if_random_sequence.svh | 91 + ...creg_axi_read_in_if_responder_sequence.svh | 87 + ...rl_secreg_axi_read_in_if_sequence_base.svh | 146 ++ ...ctrl_secreg_axi_read_in_if_transaction.svh | 243 +++ ...eg_axi_read_in_if_transaction_coverage.svh | 110 + ...se_ctrl_secreg_axi_read_in_if_typedefs.svh | 34 + ...trl_secreg_axi_read_in_if_typedefs_hdl.svh | 35 + ..._ctrl_secreg_axi_read_in_if_interface.yaml | 121 ++ .../fuse_ctrl_secreg_axi_read_in_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_secreg_axi_read_in_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_secreg_axi_read_in.compile | 3 + .../fuse_ctrl_secreg_axi_read_in_bfm.vinfo | 6 + ...use_ctrl_secreg_axi_read_in_common.compile | 7 + ...use_ctrl_secreg_axi_read_in_filelist_hdl.f | 1 + ...use_ctrl_secreg_axi_read_in_filelist_hvl.f | 1 + ...se_ctrl_secreg_axi_read_in_filelist_xrtl.f | 3 + .../fuse_ctrl_secreg_axi_read_in_hdl.compile | 9 + .../fuse_ctrl_secreg_axi_read_in_hvl.compile | 7 + .../fuse_ctrl_secreg_axi_read_in_pkg.sv | 91 + .../fuse_ctrl_secreg_axi_read_in_pkg.vinfo | 4 + .../fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv | 52 + ...fuse_ctrl_secreg_axi_read_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_secreg_axi_read_in_pkg_sve.F | 10 + ...se_ctrl_secreg_axi_read_in2reg_adapter.svh | 142 ++ .../fuse_ctrl_secreg_axi_read_in_agent.svh | 109 + ..._ctrl_secreg_axi_read_in_configuration.svh | 241 +++ .../fuse_ctrl_secreg_axi_read_in_driver.svh | 141 ++ ...fuse_ctrl_secreg_axi_read_in_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_secreg_axi_read_in_if.sv | 124 ++ ...g_axi_read_in_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_secreg_axi_read_in_macros.svh | 207 ++ .../fuse_ctrl_secreg_axi_read_in_monitor.svh | 131 ++ ...use_ctrl_secreg_axi_read_in_monitor_bfm.sv | 232 +++ ...trl_secreg_axi_read_in_random_sequence.svh | 91 + ..._secreg_axi_read_in_responder_sequence.svh | 87 + ..._ctrl_secreg_axi_read_in_sequence_base.svh | 146 ++ ...se_ctrl_secreg_axi_read_in_transaction.svh | 243 +++ ...ecreg_axi_read_in_transaction_coverage.svh | 110 + .../fuse_ctrl_secreg_axi_read_in_typedefs.svh | 34 + ...e_ctrl_secreg_axi_read_in_typedefs_hdl.svh | 35 + ...use_ctrl_secreg_axi_read_in_interface.yaml | 121 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_secreg_axi_read_out_if.compile | 3 + ...fuse_ctrl_secreg_axi_read_out_if_bfm.vinfo | 6 + ...ctrl_secreg_axi_read_out_if_common.compile | 7 + ...ctrl_secreg_axi_read_out_if_filelist_hdl.f | 1 + ...ctrl_secreg_axi_read_out_if_filelist_hvl.f | 1 + ...trl_secreg_axi_read_out_if_filelist_xrtl.f | 3 + ...se_ctrl_secreg_axi_read_out_if_hdl.compile | 9 + ...se_ctrl_secreg_axi_read_out_if_hvl.compile | 7 + .../fuse_ctrl_secreg_axi_read_out_if_pkg.sv | 91 + ...fuse_ctrl_secreg_axi_read_out_if_pkg.vinfo | 4 + ...use_ctrl_secreg_axi_read_out_if_pkg_hdl.sv | 52 + ..._ctrl_secreg_axi_read_out_if_pkg_hdl.vinfo | 2 + ...fuse_ctrl_secreg_axi_read_out_if_pkg_sve.F | 10 + ...trl_secreg_axi_read_out_if2reg_adapter.svh | 142 ++ ...fuse_ctrl_secreg_axi_read_out_if_agent.svh | 109 + ...l_secreg_axi_read_out_if_configuration.svh | 241 +++ ...use_ctrl_secreg_axi_read_out_if_driver.svh | 141 ++ ..._ctrl_secreg_axi_read_out_if_driver_bfm.sv | 352 ++++ .../fuse_ctrl_secreg_axi_read_out_if_if.sv | 109 + ...i_read_out_if_infact_coverage_strategy.csv | 6 + ...use_ctrl_secreg_axi_read_out_if_macros.svh | 180 ++ ...se_ctrl_secreg_axi_read_out_if_monitor.svh | 131 ++ ...ctrl_secreg_axi_read_out_if_monitor_bfm.sv | 220 ++ ...secreg_axi_read_out_if_random_sequence.svh | 91 + ...reg_axi_read_out_if_responder_sequence.svh | 87 + ...l_secreg_axi_read_out_if_sequence_base.svh | 146 ++ ...trl_secreg_axi_read_out_if_transaction.svh | 240 +++ ...g_axi_read_out_if_transaction_coverage.svh | 107 + ...e_ctrl_secreg_axi_read_out_if_typedefs.svh | 34 + ...rl_secreg_axi_read_out_if_typedefs_hdl.svh | 35 + ...ctrl_secreg_axi_read_out_if_interface.yaml | 91 + .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_secreg_axi_read_out.compile | 3 + .../fuse_ctrl_secreg_axi_read_out_bfm.vinfo | 6 + ...se_ctrl_secreg_axi_read_out_common.compile | 7 + ...se_ctrl_secreg_axi_read_out_filelist_hdl.f | 1 + ...se_ctrl_secreg_axi_read_out_filelist_hvl.f | 1 + ...e_ctrl_secreg_axi_read_out_filelist_xrtl.f | 3 + .../fuse_ctrl_secreg_axi_read_out_hdl.compile | 9 + .../fuse_ctrl_secreg_axi_read_out_hvl.compile | 7 + .../fuse_ctrl_secreg_axi_read_out_pkg.sv | 91 + .../fuse_ctrl_secreg_axi_read_out_pkg.vinfo | 4 + .../fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv | 52 + ...use_ctrl_secreg_axi_read_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_secreg_axi_read_out_pkg_sve.F | 10 + ...e_ctrl_secreg_axi_read_out2reg_adapter.svh | 142 ++ .../fuse_ctrl_secreg_axi_read_out_agent.svh | 109 + ...ctrl_secreg_axi_read_out_configuration.svh | 241 +++ .../fuse_ctrl_secreg_axi_read_out_driver.svh | 141 ++ ...use_ctrl_secreg_axi_read_out_driver_bfm.sv | 352 ++++ .../src/fuse_ctrl_secreg_axi_read_out_if.sv | 109 + ..._axi_read_out_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_secreg_axi_read_out_macros.svh | 180 ++ .../fuse_ctrl_secreg_axi_read_out_monitor.svh | 131 ++ ...se_ctrl_secreg_axi_read_out_monitor_bfm.sv | 220 ++ ...rl_secreg_axi_read_out_random_sequence.svh | 91 + ...secreg_axi_read_out_responder_sequence.svh | 87 + ...ctrl_secreg_axi_read_out_sequence_base.svh | 146 ++ ...e_ctrl_secreg_axi_read_out_transaction.svh | 240 +++ ...creg_axi_read_out_transaction_coverage.svh | 107 + ...fuse_ctrl_secreg_axi_read_out_typedefs.svh | 34 + ..._ctrl_secreg_axi_read_out_typedefs_hdl.svh | 35 + ...se_ctrl_secreg_axi_read_out_interface.yaml | 91 + .../prim_axi_read_if_pkg/.project | 30 + .../prim_axi_read_if_pkg/.svproject | 16 + .../prim_axi_read_if_pkg/Makefile | 66 + .../prim_axi_read_if_pkg/compile.do | 14 + .../prim_axi_read_if.compile | 3 + .../prim_axi_read_if_bfm.vinfo | 6 + .../prim_axi_read_if_common.compile | 7 + .../prim_axi_read_if_filelist_hdl.f | 1 + .../prim_axi_read_if_filelist_hvl.f | 1 + .../prim_axi_read_if_filelist_xrtl.f | 3 + .../prim_axi_read_if_hdl.compile | 9 + .../prim_axi_read_if_hvl.compile | 7 + .../prim_axi_read_if_pkg.sv | 91 + .../prim_axi_read_if_pkg.vinfo | 4 + .../prim_axi_read_if_pkg_hdl.sv | 52 + .../prim_axi_read_if_pkg_hdl.vinfo | 2 + .../prim_axi_read_if_pkg_sve.F | 10 + .../src/prim_axi_read_if2reg_adapter.svh | 142 ++ .../src/prim_axi_read_if_agent.svh | 109 + .../src/prim_axi_read_if_configuration.svh | 241 +++ .../src/prim_axi_read_if_driver.svh | 141 ++ .../src/prim_axi_read_if_driver_bfm.sv | 352 ++++ .../src/prim_axi_read_if_if.sv | 109 + ...m_axi_read_if_infact_coverage_strategy.csv | 6 + .../src/prim_axi_read_if_macros.svh | 180 ++ .../src/prim_axi_read_if_monitor.svh | 131 ++ .../src/prim_axi_read_if_monitor_bfm.sv | 220 ++ .../src/prim_axi_read_if_random_sequence.svh | 91 + .../prim_axi_read_if_responder_sequence.svh | 87 + .../src/prim_axi_read_if_sequence_base.svh | 146 ++ .../src/prim_axi_read_if_transaction.svh | 240 +++ .../prim_axi_read_if_transaction_coverage.svh | 107 + .../src/prim_axi_read_if_typedefs.svh | 34 + .../src/prim_axi_read_if_typedefs_hdl.svh | 35 + .../yaml/prim_axi_read_if_interface.yaml | 91 + .../prim_axi_read_out_if_pkg/.project | 30 + .../prim_axi_read_out_if_pkg/.svproject | 16 + .../prim_axi_read_out_if_pkg/Makefile | 66 + .../prim_axi_read_out_if_pkg/compile.do | 14 + .../prim_axi_read_out_if.compile | 3 + .../prim_axi_read_out_if_bfm.vinfo | 6 + .../prim_axi_read_out_if_common.compile | 7 + .../prim_axi_read_out_if_filelist_hdl.f | 1 + .../prim_axi_read_out_if_filelist_hvl.f | 1 + .../prim_axi_read_out_if_filelist_xrtl.f | 3 + .../prim_axi_read_out_if_hdl.compile | 9 + .../prim_axi_read_out_if_hvl.compile | 7 + .../prim_axi_read_out_if_pkg.sv | 91 + .../prim_axi_read_out_if_pkg.vinfo | 4 + .../prim_axi_read_out_if_pkg_hdl.sv | 52 + .../prim_axi_read_out_if_pkg_hdl.vinfo | 2 + .../prim_axi_read_out_if_pkg_sve.F | 10 + .../src/prim_axi_read_out_if2reg_adapter.svh | 142 ++ .../src/prim_axi_read_out_if_agent.svh | 109 + .../prim_axi_read_out_if_configuration.svh | 241 +++ .../src/prim_axi_read_out_if_driver.svh | 141 ++ .../src/prim_axi_read_out_if_driver_bfm.sv | 352 ++++ .../src/prim_axi_read_out_if_if.sv | 109 + ...i_read_out_if_infact_coverage_strategy.csv | 6 + .../src/prim_axi_read_out_if_macros.svh | 180 ++ .../src/prim_axi_read_out_if_monitor.svh | 131 ++ .../src/prim_axi_read_out_if_monitor_bfm.sv | 220 ++ .../prim_axi_read_out_if_random_sequence.svh | 91 + ...rim_axi_read_out_if_responder_sequence.svh | 87 + .../prim_axi_read_out_if_sequence_base.svh | 146 ++ .../src/prim_axi_read_out_if_transaction.svh | 240 +++ ...m_axi_read_out_if_transaction_coverage.svh | 107 + .../src/prim_axi_read_out_if_typedefs.svh | 34 + .../src/prim_axi_read_out_if_typedefs_hdl.svh | 35 + .../yaml/prim_axi_read_out_if_interface.yaml | 91 + .../prim_axi_write_if_pkg/.project | 30 + .../prim_axi_write_if_pkg/.svproject | 16 + .../prim_axi_write_if_pkg/Makefile | 66 + .../prim_axi_write_if_pkg/compile.do | 14 + .../prim_axi_write_if.compile | 3 + .../prim_axi_write_if_bfm.vinfo | 6 + .../prim_axi_write_if_common.compile | 7 + .../prim_axi_write_if_filelist_hdl.f | 1 + .../prim_axi_write_if_filelist_hvl.f | 1 + .../prim_axi_write_if_filelist_xrtl.f | 3 + .../prim_axi_write_if_hdl.compile | 9 + .../prim_axi_write_if_hvl.compile | 7 + .../prim_axi_write_if_pkg.sv | 91 + .../prim_axi_write_if_pkg.vinfo | 4 + .../prim_axi_write_if_pkg_hdl.sv | 52 + .../prim_axi_write_if_pkg_hdl.vinfo | 2 + .../prim_axi_write_if_pkg_sve.F | 10 + .../src/prim_axi_write_if2reg_adapter.svh | 142 ++ .../src/prim_axi_write_if_agent.svh | 109 + .../src/prim_axi_write_if_configuration.svh | 241 +++ .../src/prim_axi_write_if_driver.svh | 141 ++ .../src/prim_axi_write_if_driver_bfm.sv | 341 ++++ .../src/prim_axi_write_if_if.sv | 104 + ..._axi_write_if_infact_coverage_strategy.csv | 6 + .../src/prim_axi_write_if_macros.svh | 171 ++ .../src/prim_axi_write_if_monitor.svh | 131 ++ .../src/prim_axi_write_if_monitor_bfm.sv | 216 ++ .../src/prim_axi_write_if_random_sequence.svh | 91 + .../prim_axi_write_if_responder_sequence.svh | 87 + .../src/prim_axi_write_if_sequence_base.svh | 146 ++ .../src/prim_axi_write_if_transaction.svh | 236 +++ ...prim_axi_write_if_transaction_coverage.svh | 106 + .../src/prim_axi_write_if_typedefs.svh | 34 + .../src/prim_axi_write_if_typedefs_hdl.svh | 35 + .../yaml/prim_axi_write_if_interface.yaml | 81 + .../prim_axi_write_out_if_pkg/.project | 30 + .../prim_axi_write_out_if_pkg/.svproject | 16 + .../prim_axi_write_out_if_pkg/Makefile | 66 + .../prim_axi_write_out_if_pkg/compile.do | 14 + .../prim_axi_write_out_if.compile | 3 + .../prim_axi_write_out_if_bfm.vinfo | 6 + .../prim_axi_write_out_if_common.compile | 7 + .../prim_axi_write_out_if_filelist_hdl.f | 1 + .../prim_axi_write_out_if_filelist_hvl.f | 1 + .../prim_axi_write_out_if_filelist_xrtl.f | 3 + .../prim_axi_write_out_if_hdl.compile | 9 + .../prim_axi_write_out_if_hvl.compile | 7 + .../prim_axi_write_out_if_pkg.sv | 91 + .../prim_axi_write_out_if_pkg.vinfo | 4 + .../prim_axi_write_out_if_pkg_hdl.sv | 52 + .../prim_axi_write_out_if_pkg_hdl.vinfo | 2 + .../prim_axi_write_out_if_pkg_sve.F | 10 + .../src/prim_axi_write_out_if2reg_adapter.svh | 142 ++ .../src/prim_axi_write_out_if_agent.svh | 109 + .../prim_axi_write_out_if_configuration.svh | 241 +++ .../src/prim_axi_write_out_if_driver.svh | 141 ++ .../src/prim_axi_write_out_if_driver_bfm.sv | 341 ++++ .../src/prim_axi_write_out_if_if.sv | 104 + ..._write_out_if_infact_coverage_strategy.csv | 6 + .../src/prim_axi_write_out_if_macros.svh | 171 ++ .../src/prim_axi_write_out_if_monitor.svh | 131 ++ .../src/prim_axi_write_out_if_monitor_bfm.sv | 216 ++ .../prim_axi_write_out_if_random_sequence.svh | 91 + ...im_axi_write_out_if_responder_sequence.svh | 87 + .../prim_axi_write_out_if_sequence_base.svh | 146 ++ .../src/prim_axi_write_out_if_transaction.svh | 236 +++ ..._axi_write_out_if_transaction_coverage.svh | 106 + .../src/prim_axi_write_out_if_typedefs.svh | 34 + .../prim_axi_write_out_if_typedefs_hdl.svh | 35 + .../yaml/prim_axi_write_out_if_interface.yaml | 81 + .../secreg_axi_read_if_pkg/.project | 30 + .../secreg_axi_read_if_pkg/.svproject | 16 + .../secreg_axi_read_if_pkg/Makefile | 66 + .../secreg_axi_read_if_pkg/compile.do | 14 + .../secreg_axi_read_if.compile | 3 + .../secreg_axi_read_if_bfm.vinfo | 6 + .../secreg_axi_read_if_common.compile | 7 + .../secreg_axi_read_if_filelist_hdl.f | 1 + .../secreg_axi_read_if_filelist_hvl.f | 1 + .../secreg_axi_read_if_filelist_xrtl.f | 3 + .../secreg_axi_read_if_hdl.compile | 9 + .../secreg_axi_read_if_hvl.compile | 7 + .../secreg_axi_read_if_pkg.sv | 91 + .../secreg_axi_read_if_pkg.vinfo | 4 + .../secreg_axi_read_if_pkg_hdl.sv | 52 + .../secreg_axi_read_if_pkg_hdl.vinfo | 2 + .../secreg_axi_read_if_pkg_sve.F | 10 + .../src/secreg_axi_read_if2reg_adapter.svh | 142 ++ .../src/secreg_axi_read_if_agent.svh | 109 + .../src/secreg_axi_read_if_configuration.svh | 241 +++ .../src/secreg_axi_read_if_driver.svh | 141 ++ .../src/secreg_axi_read_if_driver_bfm.sv | 352 ++++ .../src/secreg_axi_read_if_if.sv | 109 + ...g_axi_read_if_infact_coverage_strategy.csv | 6 + .../src/secreg_axi_read_if_macros.svh | 180 ++ .../src/secreg_axi_read_if_monitor.svh | 131 ++ .../src/secreg_axi_read_if_monitor_bfm.sv | 220 ++ .../secreg_axi_read_if_random_sequence.svh | 91 + .../secreg_axi_read_if_responder_sequence.svh | 87 + .../src/secreg_axi_read_if_sequence_base.svh | 146 ++ .../src/secreg_axi_read_if_transaction.svh | 240 +++ ...ecreg_axi_read_if_transaction_coverage.svh | 107 + .../src/secreg_axi_read_if_typedefs.svh | 34 + .../src/secreg_axi_read_if_typedefs_hdl.svh | 35 + .../yaml/secreg_axi_read_if_interface.yaml | 91 + .../secreg_axi_read_out_if_pkg/.project | 30 + .../secreg_axi_read_out_if_pkg/.svproject | 16 + .../secreg_axi_read_out_if_pkg/Makefile | 66 + .../secreg_axi_read_out_if_pkg/compile.do | 14 + .../secreg_axi_read_out_if.compile | 3 + .../secreg_axi_read_out_if_bfm.vinfo | 6 + .../secreg_axi_read_out_if_common.compile | 7 + .../secreg_axi_read_out_if_filelist_hdl.f | 1 + .../secreg_axi_read_out_if_filelist_hvl.f | 1 + .../secreg_axi_read_out_if_filelist_xrtl.f | 3 + .../secreg_axi_read_out_if_hdl.compile | 9 + .../secreg_axi_read_out_if_hvl.compile | 7 + .../secreg_axi_read_out_if_pkg.sv | 91 + .../secreg_axi_read_out_if_pkg.vinfo | 4 + .../secreg_axi_read_out_if_pkg_hdl.sv | 52 + .../secreg_axi_read_out_if_pkg_hdl.vinfo | 2 + .../secreg_axi_read_out_if_pkg_sve.F | 10 + .../secreg_axi_read_out_if2reg_adapter.svh | 142 ++ .../src/secreg_axi_read_out_if_agent.svh | 109 + .../secreg_axi_read_out_if_configuration.svh | 241 +++ .../src/secreg_axi_read_out_if_driver.svh | 141 ++ .../src/secreg_axi_read_out_if_driver_bfm.sv | 352 ++++ .../src/secreg_axi_read_out_if_if.sv | 109 + ...i_read_out_if_infact_coverage_strategy.csv | 6 + .../src/secreg_axi_read_out_if_macros.svh | 180 ++ .../src/secreg_axi_read_out_if_monitor.svh | 131 ++ .../src/secreg_axi_read_out_if_monitor_bfm.sv | 220 ++ ...secreg_axi_read_out_if_random_sequence.svh | 91 + ...reg_axi_read_out_if_responder_sequence.svh | 87 + .../secreg_axi_read_out_if_sequence_base.svh | 146 ++ .../secreg_axi_read_out_if_transaction.svh | 240 +++ ...g_axi_read_out_if_transaction_coverage.svh | 107 + .../src/secreg_axi_read_out_if_typedefs.svh | 34 + .../secreg_axi_read_out_if_typedefs_hdl.svh | 35 + .../secreg_axi_read_out_if_interface.yaml | 91 + .../project_benches/fuse_ctrl/.project | 37 + .../project_benches/fuse_ctrl/.svproject | 16 + .../fuse_ctrl/docs/interfaces.csv | 42 + .../project_benches/fuse_ctrl/fuse_ctrl_sve.F | 42 + .../project_benches/fuse_ctrl/rtl/dut.compile | 6 + .../fuse_ctrl/rtl/verilog/verilog_dut.v | 21 + .../fuse_ctrl/rtl/verilog/verilog_dut.vinfo | 1 + .../fuse_ctrl/rtl/vhdl/vhdl_dut.vhd | 21 + .../project_benches/fuse_ctrl/sim/Makefile | 377 ++++ .../fuse_ctrl/sim/bcr_testlist | 19 + .../fuse_ctrl/sim/bcr_testlist.yaml | 44 + .../project_benches/fuse_ctrl/sim/compile.do | 85 + .../project_benches/fuse_ctrl/sim/hdl.compile | 5 + .../project_benches/fuse_ctrl/sim/hdl.vinfo | 1 + .../project_benches/fuse_ctrl/sim/hvl.compile | 2 + .../project_benches/fuse_ctrl/sim/hvl.vinfo | 1 + .../project_benches/fuse_ctrl/sim/run.do | 21 + .../project_benches/fuse_ctrl/sim/tbx.config | 10 + .../project_benches/fuse_ctrl/sim/testlist | 20 + .../fuse_ctrl/sim/testlist.yaml | 44 + .../project_benches/fuse_ctrl/sim/top.compile | 3 + .../fuse_ctrl/sim/veloce.config | 26 + .../project_benches/fuse_ctrl/sim/viswave.do | 106 + .../project_benches/fuse_ctrl/sim/wave.do | 72 + .../project_benches/fuse_ctrl/sim/xwaves.sigs | 17 + .../fuse_ctrl_parameters_pkg.compile | 4 + .../tb/parameters/fuse_ctrl_parameters_pkg.sv | 66 + .../parameters/fuse_ctrl_parameters_pkg.vinfo | 2 + .../sequences/fuse_ctrl_sequences_pkg.compile | 22 + .../tb/sequences/fuse_ctrl_sequences_pkg.sv | 93 + .../sequences/fuse_ctrl_sequences_pkg.vinfo | 21 + .../src/example_derived_test_sequence.svh | 44 + .../src/fuse_ctrl_bench_sequence_base.svh | 232 +++ .../sequences/src/register_test_sequence.svh | 76 + .../fuse_ctrl/tb/testbench/hdl_top.compile | 24 + .../fuse_ctrl/tb/testbench/hdl_top.sv | 283 +++ .../fuse_ctrl/tb/testbench/hdl_top.vinfo | 20 + .../fuse_ctrl/tb/testbench/hvl_top.compile | 7 + .../fuse_ctrl/tb/testbench/hvl_top.sv | 47 + .../fuse_ctrl/tb/testbench/hvl_top.vinfo | 2 + .../fuse_ctrl/tb/testbench/top_filelist_hdl.f | 3 + .../fuse_ctrl/tb/testbench/top_filelist_hvl.f | 3 + .../tb/tests/fuse_ctrl_tests_pkg.compile | 23 + .../fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.sv | 96 + .../tb/tests/fuse_ctrl_tests_pkg.vinfo | 22 + .../tb/tests/src/example_derived_test.svh | 57 + .../fuse_ctrl/tb/tests/src/register_test.svh | 54 + .../fuse_ctrl/tb/tests/src/test_top.svh | 120 ++ .../fuse_ctrl/yaml/fuse_ctrl_bench.yaml | 45 + .../fuse_ctrl_env_pkg/.project | 32 + .../fuse_ctrl_env_pkg/.svproject | 16 + .../fuse_ctrl_env_pkg/Makefile | 56 + .../fuse_ctrl_env_pkg/compile.do | 12 + .../fuse_ctrl_env_pkg.compile | 22 + .../fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv | 107 + .../fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo | 19 + .../fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F | 12 + .../src/fuse_ctrl_env_configuration.svh | 261 +++ .../src/fuse_ctrl_env_sequence_base.svh | 146 ++ .../src/fuse_ctrl_env_typedefs.svh | 34 + .../src/fuse_ctrl_environment.svh | 221 ++ .../src/fuse_ctrl_predictor.svh | 323 +++ .../src/fuse_ctrl_scoreboard.svh | 149 ++ .../yaml/fuse_ctrl_environment.yaml | 122 ++ ...se_ctrl_util_comp_fuse_ctrl_predictor.yaml | 23 + ...e_ctrl_util_comp_fuse_ctrl_scoreboard.yaml | 10 + .../core_axi_read_if_pkg/.project | 30 + .../core_axi_read_if_pkg/.svproject | 16 + .../core_axi_read_if_pkg/Makefile | 66 + .../core_axi_read_if_pkg/compile.do | 14 + .../core_axi_read_if.compile | 3 + .../core_axi_read_if_bfm.vinfo | 6 + .../core_axi_read_if_common.compile | 7 + .../core_axi_read_if_filelist_hdl.f | 1 + .../core_axi_read_if_filelist_hvl.f | 1 + .../core_axi_read_if_filelist_xrtl.f | 3 + .../core_axi_read_if_hdl.compile | 9 + .../core_axi_read_if_hvl.compile | 7 + .../core_axi_read_if_pkg.sv | 91 + .../core_axi_read_if_pkg.vinfo | 4 + .../core_axi_read_if_pkg_hdl.sv | 52 + .../core_axi_read_if_pkg_hdl.vinfo | 2 + .../core_axi_read_if_pkg_sve.F | 10 + .../src/core_axi_read_if2reg_adapter.svh | 142 ++ .../src/core_axi_read_if_agent.svh | 109 + .../src/core_axi_read_if_configuration.svh | 241 +++ .../src/core_axi_read_if_driver.svh | 141 ++ .../src/core_axi_read_if_driver_bfm.sv | 352 ++++ .../src/core_axi_read_if_if.sv | 109 + ...e_axi_read_if_infact_coverage_strategy.csv | 6 + .../src/core_axi_read_if_macros.svh | 180 ++ .../src/core_axi_read_if_monitor.svh | 131 ++ .../src/core_axi_read_if_monitor_bfm.sv | 220 ++ .../src/core_axi_read_if_random_sequence.svh | 91 + .../core_axi_read_if_responder_sequence.svh | 87 + .../src/core_axi_read_if_sequence_base.svh | 146 ++ .../src/core_axi_read_if_transaction.svh | 240 +++ .../core_axi_read_if_transaction_coverage.svh | 107 + .../src/core_axi_read_if_typedefs.svh | 34 + .../src/core_axi_read_if_typedefs_hdl.svh | 35 + .../yaml/core_axi_read_if_interface.yaml | 91 + .../core_axi_read_out_if_pkg/.project | 30 + .../core_axi_read_out_if_pkg/.svproject | 16 + .../core_axi_read_out_if_pkg/Makefile | 66 + .../core_axi_read_out_if_pkg/compile.do | 14 + .../core_axi_read_out_if.compile | 3 + .../core_axi_read_out_if_bfm.vinfo | 6 + .../core_axi_read_out_if_common.compile | 7 + .../core_axi_read_out_if_filelist_hdl.f | 1 + .../core_axi_read_out_if_filelist_hvl.f | 1 + .../core_axi_read_out_if_filelist_xrtl.f | 3 + .../core_axi_read_out_if_hdl.compile | 9 + .../core_axi_read_out_if_hvl.compile | 7 + .../core_axi_read_out_if_pkg.sv | 91 + .../core_axi_read_out_if_pkg.vinfo | 4 + .../core_axi_read_out_if_pkg_hdl.sv | 52 + .../core_axi_read_out_if_pkg_hdl.vinfo | 2 + .../core_axi_read_out_if_pkg_sve.F | 10 + .../src/core_axi_read_out_if2reg_adapter.svh | 142 ++ .../src/core_axi_read_out_if_agent.svh | 109 + .../core_axi_read_out_if_configuration.svh | 241 +++ .../src/core_axi_read_out_if_driver.svh | 141 ++ .../src/core_axi_read_out_if_driver_bfm.sv | 352 ++++ .../src/core_axi_read_out_if_if.sv | 109 + ...i_read_out_if_infact_coverage_strategy.csv | 6 + .../src/core_axi_read_out_if_macros.svh | 180 ++ .../src/core_axi_read_out_if_monitor.svh | 131 ++ .../src/core_axi_read_out_if_monitor_bfm.sv | 220 ++ .../core_axi_read_out_if_random_sequence.svh | 91 + ...ore_axi_read_out_if_responder_sequence.svh | 87 + .../core_axi_read_out_if_sequence_base.svh | 146 ++ .../src/core_axi_read_out_if_transaction.svh | 240 +++ ...e_axi_read_out_if_transaction_coverage.svh | 107 + .../src/core_axi_read_out_if_typedefs.svh | 34 + .../src/core_axi_read_out_if_typedefs_hdl.svh | 35 + .../yaml/core_axi_read_out_if_interface.yaml | 91 + .../core_axi_write_if_pkg/.project | 30 + .../core_axi_write_if_pkg/.svproject | 16 + .../core_axi_write_if_pkg/Makefile | 66 + .../core_axi_write_if_pkg/compile.do | 14 + .../core_axi_write_if.compile | 3 + .../core_axi_write_if_bfm.vinfo | 6 + .../core_axi_write_if_common.compile | 7 + .../core_axi_write_if_filelist_hdl.f | 1 + .../core_axi_write_if_filelist_hvl.f | 1 + .../core_axi_write_if_filelist_xrtl.f | 3 + .../core_axi_write_if_hdl.compile | 9 + .../core_axi_write_if_hvl.compile | 7 + .../core_axi_write_if_pkg.sv | 91 + .../core_axi_write_if_pkg.vinfo | 4 + .../core_axi_write_if_pkg_hdl.sv | 52 + .../core_axi_write_if_pkg_hdl.vinfo | 2 + .../core_axi_write_if_pkg_sve.F | 10 + .../src/core_axi_write_if2reg_adapter.svh | 142 ++ .../src/core_axi_write_if_agent.svh | 109 + .../src/core_axi_write_if_configuration.svh | 241 +++ .../src/core_axi_write_if_driver.svh | 141 ++ .../src/core_axi_write_if_driver_bfm.sv | 341 ++++ .../src/core_axi_write_if_if.sv | 104 + ..._axi_write_if_infact_coverage_strategy.csv | 6 + .../src/core_axi_write_if_macros.svh | 171 ++ .../src/core_axi_write_if_monitor.svh | 131 ++ .../src/core_axi_write_if_monitor_bfm.sv | 216 ++ .../src/core_axi_write_if_random_sequence.svh | 91 + .../core_axi_write_if_responder_sequence.svh | 87 + .../src/core_axi_write_if_sequence_base.svh | 146 ++ .../src/core_axi_write_if_transaction.svh | 236 +++ ...core_axi_write_if_transaction_coverage.svh | 106 + .../src/core_axi_write_if_typedefs.svh | 34 + .../src/core_axi_write_if_typedefs_hdl.svh | 35 + .../yaml/core_axi_write_if_interface.yaml | 81 + .../core_axi_write_out_if_pkg/.project | 30 + .../core_axi_write_out_if_pkg/.svproject | 16 + .../core_axi_write_out_if_pkg/Makefile | 66 + .../core_axi_write_out_if_pkg/compile.do | 14 + .../core_axi_write_out_if.compile | 3 + .../core_axi_write_out_if_bfm.vinfo | 6 + .../core_axi_write_out_if_common.compile | 7 + .../core_axi_write_out_if_filelist_hdl.f | 1 + .../core_axi_write_out_if_filelist_hvl.f | 1 + .../core_axi_write_out_if_filelist_xrtl.f | 3 + .../core_axi_write_out_if_hdl.compile | 9 + .../core_axi_write_out_if_hvl.compile | 7 + .../core_axi_write_out_if_pkg.sv | 91 + .../core_axi_write_out_if_pkg.vinfo | 4 + .../core_axi_write_out_if_pkg_hdl.sv | 52 + .../core_axi_write_out_if_pkg_hdl.vinfo | 2 + .../core_axi_write_out_if_pkg_sve.F | 10 + .../src/core_axi_write_out_if2reg_adapter.svh | 142 ++ .../src/core_axi_write_out_if_agent.svh | 109 + .../core_axi_write_out_if_configuration.svh | 241 +++ .../src/core_axi_write_out_if_driver.svh | 141 ++ .../src/core_axi_write_out_if_driver_bfm.sv | 341 ++++ .../src/core_axi_write_out_if_if.sv | 104 + ..._write_out_if_infact_coverage_strategy.csv | 6 + .../src/core_axi_write_out_if_macros.svh | 171 ++ .../src/core_axi_write_out_if_monitor.svh | 131 ++ .../src/core_axi_write_out_if_monitor_bfm.sv | 216 ++ .../core_axi_write_out_if_random_sequence.svh | 91 + ...re_axi_write_out_if_responder_sequence.svh | 87 + .../core_axi_write_out_if_sequence_base.svh | 146 ++ .../src/core_axi_write_out_if_transaction.svh | 236 +++ ..._axi_write_out_if_transaction_coverage.svh | 106 + .../src/core_axi_write_out_if_typedefs.svh | 34 + .../core_axi_write_out_if_typedefs_hdl.svh | 35 + .../yaml/core_axi_write_out_if_interface.yaml | 81 + .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_core_core_axi_write_out_if.compile | 3 + .../fuse_core_core_axi_write_out_if_bfm.vinfo | 6 + ..._core_core_axi_write_out_if_common.compile | 7 + ..._core_core_axi_write_out_if_filelist_hdl.f | 1 + ..._core_core_axi_write_out_if_filelist_hvl.f | 1 + ...core_core_axi_write_out_if_filelist_xrtl.f | 3 + ...use_core_core_axi_write_out_if_hdl.compile | 9 + ...use_core_core_axi_write_out_if_hvl.compile | 7 + .../fuse_core_core_axi_write_out_if_pkg.sv | 91 + .../fuse_core_core_axi_write_out_if_pkg.vinfo | 4 + ...fuse_core_core_axi_write_out_if_pkg_hdl.sv | 52 + ...e_core_core_axi_write_out_if_pkg_hdl.vinfo | 2 + .../fuse_core_core_axi_write_out_if_pkg_sve.F | 10 + ...core_core_axi_write_out_if2reg_adapter.svh | 142 ++ .../fuse_core_core_axi_write_out_if_agent.svh | 109 + ...re_core_axi_write_out_if_configuration.svh | 241 +++ ...fuse_core_core_axi_write_out_if_driver.svh | 141 ++ ...e_core_core_axi_write_out_if_driver_bfm.sv | 341 ++++ .../src/fuse_core_core_axi_write_out_if_if.sv | 104 + ..._write_out_if_infact_coverage_strategy.csv | 6 + ...fuse_core_core_axi_write_out_if_macros.svh | 171 ++ ...use_core_core_axi_write_out_if_monitor.svh | 131 ++ ..._core_core_axi_write_out_if_monitor_bfm.sv | 216 ++ ..._core_axi_write_out_if_random_sequence.svh | 91 + ...re_axi_write_out_if_responder_sequence.svh | 87 + ...re_core_axi_write_out_if_sequence_base.svh | 146 ++ ...core_core_axi_write_out_if_transaction.svh | 236 +++ ..._axi_write_out_if_transaction_coverage.svh | 106 + ...se_core_core_axi_write_out_if_typedefs.svh | 34 + ...ore_core_axi_write_out_if_typedefs_hdl.svh | 35 + ..._core_core_axi_write_out_if_interface.yaml | 81 + .../fuse_ctrl_core_axi_read_if_pkg/.project | 30 + .../fuse_ctrl_core_axi_read_if_pkg/.svproject | 16 + .../fuse_ctrl_core_axi_read_if_pkg/Makefile | 66 + .../fuse_ctrl_core_axi_read_if_pkg/compile.do | 14 + .../fuse_ctrl_core_axi_read_if.compile | 3 + .../fuse_ctrl_core_axi_read_if_bfm.vinfo | 6 + .../fuse_ctrl_core_axi_read_if_common.compile | 7 + .../fuse_ctrl_core_axi_read_if_filelist_hdl.f | 1 + .../fuse_ctrl_core_axi_read_if_filelist_hvl.f | 1 + ...fuse_ctrl_core_axi_read_if_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_read_if_hdl.compile | 9 + .../fuse_ctrl_core_axi_read_if_hvl.compile | 7 + .../fuse_ctrl_core_axi_read_if_pkg.sv | 91 + .../fuse_ctrl_core_axi_read_if_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_read_if_pkg_hdl.sv | 52 + .../fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_read_if_pkg_sve.F | 10 + ...fuse_ctrl_core_axi_read_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_core_axi_read_if_agent.svh | 109 + ...se_ctrl_core_axi_read_if_configuration.svh | 241 +++ .../src/fuse_ctrl_core_axi_read_if_driver.svh | 141 ++ .../fuse_ctrl_core_axi_read_if_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_core_axi_read_if_if.sv | 124 ++ ...e_axi_read_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_core_axi_read_if_macros.svh | 207 ++ .../fuse_ctrl_core_axi_read_if_monitor.svh | 131 ++ .../fuse_ctrl_core_axi_read_if_monitor_bfm.sv | 232 +++ ..._ctrl_core_axi_read_if_random_sequence.svh | 91 + ...rl_core_axi_read_if_responder_sequence.svh | 87 + ...se_ctrl_core_axi_read_if_sequence_base.svh | 146 ++ ...fuse_ctrl_core_axi_read_if_transaction.svh | 243 +++ ..._core_axi_read_if_transaction_coverage.svh | 110 + .../fuse_ctrl_core_axi_read_if_typedefs.svh | 34 + ...use_ctrl_core_axi_read_if_typedefs_hdl.svh | 35 + .../fuse_ctrl_core_axi_read_if_interface.yaml | 121 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_read_in_if.compile | 3 + .../fuse_ctrl_core_axi_read_in_if_bfm.vinfo | 6 + ...se_ctrl_core_axi_read_in_if_common.compile | 7 + ...se_ctrl_core_axi_read_in_if_filelist_hdl.f | 1 + ...se_ctrl_core_axi_read_in_if_filelist_hvl.f | 1 + ...e_ctrl_core_axi_read_in_if_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_read_in_if_hdl.compile | 9 + .../fuse_ctrl_core_axi_read_in_if_hvl.compile | 7 + .../fuse_ctrl_core_axi_read_in_if_pkg.sv | 91 + .../fuse_ctrl_core_axi_read_in_if_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv | 52 + ...use_ctrl_core_axi_read_in_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_read_in_if_pkg_sve.F | 10 + ...e_ctrl_core_axi_read_in_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_core_axi_read_in_if_agent.svh | 109 + ...ctrl_core_axi_read_in_if_configuration.svh | 241 +++ .../fuse_ctrl_core_axi_read_in_if_driver.svh | 141 ++ ...use_ctrl_core_axi_read_in_if_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_core_axi_read_in_if_if.sv | 124 ++ ...xi_read_in_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_core_axi_read_in_if_macros.svh | 207 ++ .../fuse_ctrl_core_axi_read_in_if_monitor.svh | 131 ++ ...se_ctrl_core_axi_read_in_if_monitor_bfm.sv | 232 +++ ...rl_core_axi_read_in_if_random_sequence.svh | 91 + ...core_axi_read_in_if_responder_sequence.svh | 87 + ...ctrl_core_axi_read_in_if_sequence_base.svh | 146 ++ ...e_ctrl_core_axi_read_in_if_transaction.svh | 243 +++ ...re_axi_read_in_if_transaction_coverage.svh | 110 + ...fuse_ctrl_core_axi_read_in_if_typedefs.svh | 34 + ..._ctrl_core_axi_read_in_if_typedefs_hdl.svh | 35 + ...se_ctrl_core_axi_read_in_if_interface.yaml | 121 ++ .../fuse_ctrl_core_axi_read_in_pkg/.project | 30 + .../fuse_ctrl_core_axi_read_in_pkg/.svproject | 16 + .../fuse_ctrl_core_axi_read_in_pkg/Makefile | 66 + .../fuse_ctrl_core_axi_read_in_pkg/compile.do | 14 + .../fuse_ctrl_core_axi_read_in.compile | 3 + .../fuse_ctrl_core_axi_read_in_bfm.vinfo | 6 + .../fuse_ctrl_core_axi_read_in_common.compile | 7 + .../fuse_ctrl_core_axi_read_in_filelist_hdl.f | 1 + .../fuse_ctrl_core_axi_read_in_filelist_hvl.f | 1 + ...fuse_ctrl_core_axi_read_in_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_read_in_hdl.compile | 9 + .../fuse_ctrl_core_axi_read_in_hvl.compile | 7 + .../fuse_ctrl_core_axi_read_in_pkg.sv | 91 + .../fuse_ctrl_core_axi_read_in_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_read_in_pkg_hdl.sv | 52 + .../fuse_ctrl_core_axi_read_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_read_in_pkg_sve.F | 10 + ...fuse_ctrl_core_axi_read_in2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_core_axi_read_in_agent.svh | 109 + ...se_ctrl_core_axi_read_in_configuration.svh | 241 +++ .../src/fuse_ctrl_core_axi_read_in_driver.svh | 141 ++ .../fuse_ctrl_core_axi_read_in_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_core_axi_read_in_if.sv | 124 ++ ...e_axi_read_in_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_core_axi_read_in_macros.svh | 207 ++ .../fuse_ctrl_core_axi_read_in_monitor.svh | 131 ++ .../fuse_ctrl_core_axi_read_in_monitor_bfm.sv | 232 +++ ..._ctrl_core_axi_read_in_random_sequence.svh | 91 + ...rl_core_axi_read_in_responder_sequence.svh | 87 + ...se_ctrl_core_axi_read_in_sequence_base.svh | 146 ++ ...fuse_ctrl_core_axi_read_in_transaction.svh | 243 +++ ..._core_axi_read_in_transaction_coverage.svh | 110 + .../fuse_ctrl_core_axi_read_in_typedefs.svh | 34 + ...use_ctrl_core_axi_read_in_typedefs_hdl.svh | 35 + .../fuse_ctrl_core_axi_read_in_interface.yaml | 121 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_read_out_if.compile | 3 + .../fuse_ctrl_core_axi_read_out_if_bfm.vinfo | 6 + ...e_ctrl_core_axi_read_out_if_common.compile | 7 + ...e_ctrl_core_axi_read_out_if_filelist_hdl.f | 1 + ...e_ctrl_core_axi_read_out_if_filelist_hvl.f | 1 + ..._ctrl_core_axi_read_out_if_filelist_xrtl.f | 3 + ...fuse_ctrl_core_axi_read_out_if_hdl.compile | 9 + ...fuse_ctrl_core_axi_read_out_if_hvl.compile | 7 + .../fuse_ctrl_core_axi_read_out_if_pkg.sv | 91 + .../fuse_ctrl_core_axi_read_out_if_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv | 52 + ...se_ctrl_core_axi_read_out_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_read_out_if_pkg_sve.F | 10 + ..._ctrl_core_axi_read_out_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_core_axi_read_out_if_agent.svh | 109 + ...trl_core_axi_read_out_if_configuration.svh | 241 +++ .../fuse_ctrl_core_axi_read_out_if_driver.svh | 141 ++ ...se_ctrl_core_axi_read_out_if_driver_bfm.sv | 352 ++++ .../src/fuse_ctrl_core_axi_read_out_if_if.sv | 109 + ...i_read_out_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_core_axi_read_out_if_macros.svh | 180 ++ ...fuse_ctrl_core_axi_read_out_if_monitor.svh | 131 ++ ...e_ctrl_core_axi_read_out_if_monitor_bfm.sv | 220 ++ ...l_core_axi_read_out_if_random_sequence.svh | 91 + ...ore_axi_read_out_if_responder_sequence.svh | 87 + ...trl_core_axi_read_out_if_sequence_base.svh | 146 ++ ..._ctrl_core_axi_read_out_if_transaction.svh | 240 +++ ...e_axi_read_out_if_transaction_coverage.svh | 107 + ...use_ctrl_core_axi_read_out_if_typedefs.svh | 34 + ...ctrl_core_axi_read_out_if_typedefs_hdl.svh | 35 + ...e_ctrl_core_axi_read_out_if_interface.yaml | 91 + .../fuse_ctrl_core_axi_read_out_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_core_axi_read_out_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_read_out.compile | 3 + .../fuse_ctrl_core_axi_read_out_bfm.vinfo | 6 + ...fuse_ctrl_core_axi_read_out_common.compile | 7 + ...fuse_ctrl_core_axi_read_out_filelist_hdl.f | 1 + ...fuse_ctrl_core_axi_read_out_filelist_hvl.f | 1 + ...use_ctrl_core_axi_read_out_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_read_out_hdl.compile | 9 + .../fuse_ctrl_core_axi_read_out_hvl.compile | 7 + .../fuse_ctrl_core_axi_read_out_pkg.sv | 91 + .../fuse_ctrl_core_axi_read_out_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_read_out_pkg_hdl.sv | 52 + .../fuse_ctrl_core_axi_read_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_read_out_pkg_sve.F | 10 + ...use_ctrl_core_axi_read_out2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_core_axi_read_out_agent.svh | 109 + ...e_ctrl_core_axi_read_out_configuration.svh | 241 +++ .../fuse_ctrl_core_axi_read_out_driver.svh | 141 ++ .../fuse_ctrl_core_axi_read_out_driver_bfm.sv | 352 ++++ .../src/fuse_ctrl_core_axi_read_out_if.sv | 109 + ..._axi_read_out_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_core_axi_read_out_macros.svh | 180 ++ .../fuse_ctrl_core_axi_read_out_monitor.svh | 131 ++ ...fuse_ctrl_core_axi_read_out_monitor_bfm.sv | 220 ++ ...ctrl_core_axi_read_out_random_sequence.svh | 91 + ...l_core_axi_read_out_responder_sequence.svh | 87 + ...e_ctrl_core_axi_read_out_sequence_base.svh | 146 ++ ...use_ctrl_core_axi_read_out_transaction.svh | 240 +++ ...core_axi_read_out_transaction_coverage.svh | 107 + .../fuse_ctrl_core_axi_read_out_typedefs.svh | 34 + ...se_ctrl_core_axi_read_out_typedefs_hdl.svh | 35 + ...fuse_ctrl_core_axi_read_out_interface.yaml | 91 + .../fuse_ctrl_core_axi_write_if_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_core_axi_write_if_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_write_if.compile | 3 + .../fuse_ctrl_core_axi_write_if_bfm.vinfo | 6 + ...fuse_ctrl_core_axi_write_if_common.compile | 7 + ...fuse_ctrl_core_axi_write_if_filelist_hdl.f | 1 + ...fuse_ctrl_core_axi_write_if_filelist_hvl.f | 1 + ...use_ctrl_core_axi_write_if_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_write_if_hdl.compile | 9 + .../fuse_ctrl_core_axi_write_if_hvl.compile | 7 + .../fuse_ctrl_core_axi_write_if_pkg.sv | 91 + .../fuse_ctrl_core_axi_write_if_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_write_if_pkg_hdl.sv | 52 + .../fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_write_if_pkg_sve.F | 10 + ...use_ctrl_core_axi_write_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_core_axi_write_if_agent.svh | 109 + ...e_ctrl_core_axi_write_if_configuration.svh | 241 +++ .../fuse_ctrl_core_axi_write_if_driver.svh | 141 ++ .../fuse_ctrl_core_axi_write_if_driver_bfm.sv | 429 ++++ .../src/fuse_ctrl_core_axi_write_if_if.sv | 144 ++ ..._axi_write_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_core_axi_write_if_macros.svh | 243 +++ .../fuse_ctrl_core_axi_write_if_monitor.svh | 131 ++ ...fuse_ctrl_core_axi_write_if_monitor_bfm.sv | 248 +++ ...ctrl_core_axi_write_if_random_sequence.svh | 91 + ...l_core_axi_write_if_responder_sequence.svh | 87 + ...e_ctrl_core_axi_write_if_sequence_base.svh | 146 ++ ...use_ctrl_core_axi_write_if_transaction.svh | 256 +++ ...core_axi_write_if_transaction_coverage.svh | 114 ++ .../fuse_ctrl_core_axi_write_if_typedefs.svh | 34 + ...se_ctrl_core_axi_write_if_typedefs_hdl.svh | 35 + ...fuse_ctrl_core_axi_write_if_interface.yaml | 161 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_write_in_if.compile | 3 + .../fuse_ctrl_core_axi_write_in_if_bfm.vinfo | 6 + ...e_ctrl_core_axi_write_in_if_common.compile | 7 + ...e_ctrl_core_axi_write_in_if_filelist_hdl.f | 1 + ...e_ctrl_core_axi_write_in_if_filelist_hvl.f | 1 + ..._ctrl_core_axi_write_in_if_filelist_xrtl.f | 3 + ...fuse_ctrl_core_axi_write_in_if_hdl.compile | 9 + ...fuse_ctrl_core_axi_write_in_if_hvl.compile | 7 + .../fuse_ctrl_core_axi_write_in_if_pkg.sv | 91 + .../fuse_ctrl_core_axi_write_in_if_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv | 52 + ...se_ctrl_core_axi_write_in_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_write_in_if_pkg_sve.F | 10 + ..._ctrl_core_axi_write_in_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_core_axi_write_in_if_agent.svh | 109 + ...trl_core_axi_write_in_if_configuration.svh | 241 +++ .../fuse_ctrl_core_axi_write_in_if_driver.svh | 141 ++ ...se_ctrl_core_axi_write_in_if_driver_bfm.sv | 429 ++++ .../src/fuse_ctrl_core_axi_write_in_if_if.sv | 144 ++ ...i_write_in_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_core_axi_write_in_if_macros.svh | 243 +++ ...fuse_ctrl_core_axi_write_in_if_monitor.svh | 131 ++ ...e_ctrl_core_axi_write_in_if_monitor_bfm.sv | 248 +++ ...l_core_axi_write_in_if_random_sequence.svh | 91 + ...ore_axi_write_in_if_responder_sequence.svh | 87 + ...trl_core_axi_write_in_if_sequence_base.svh | 146 ++ ..._ctrl_core_axi_write_in_if_transaction.svh | 256 +++ ...e_axi_write_in_if_transaction_coverage.svh | 114 ++ ...use_ctrl_core_axi_write_in_if_typedefs.svh | 34 + ...ctrl_core_axi_write_in_if_typedefs_hdl.svh | 35 + ...e_ctrl_core_axi_write_in_if_interface.yaml | 161 ++ .../fuse_ctrl_core_axi_write_in_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_core_axi_write_in_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_write_in.compile | 3 + .../fuse_ctrl_core_axi_write_in_bfm.vinfo | 6 + ...fuse_ctrl_core_axi_write_in_common.compile | 7 + ...fuse_ctrl_core_axi_write_in_filelist_hdl.f | 1 + ...fuse_ctrl_core_axi_write_in_filelist_hvl.f | 1 + ...use_ctrl_core_axi_write_in_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_write_in_hdl.compile | 9 + .../fuse_ctrl_core_axi_write_in_hvl.compile | 7 + .../fuse_ctrl_core_axi_write_in_pkg.sv | 91 + .../fuse_ctrl_core_axi_write_in_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_write_in_pkg_hdl.sv | 52 + .../fuse_ctrl_core_axi_write_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_write_in_pkg_sve.F | 10 + ...use_ctrl_core_axi_write_in2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_core_axi_write_in_agent.svh | 109 + ...e_ctrl_core_axi_write_in_configuration.svh | 241 +++ .../fuse_ctrl_core_axi_write_in_driver.svh | 141 ++ .../fuse_ctrl_core_axi_write_in_driver_bfm.sv | 429 ++++ .../src/fuse_ctrl_core_axi_write_in_if.sv | 144 ++ ..._axi_write_in_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_core_axi_write_in_macros.svh | 243 +++ .../fuse_ctrl_core_axi_write_in_monitor.svh | 131 ++ ...fuse_ctrl_core_axi_write_in_monitor_bfm.sv | 248 +++ ...ctrl_core_axi_write_in_random_sequence.svh | 91 + ...l_core_axi_write_in_responder_sequence.svh | 87 + ...e_ctrl_core_axi_write_in_sequence_base.svh | 146 ++ ...use_ctrl_core_axi_write_in_transaction.svh | 256 +++ ...core_axi_write_in_transaction_coverage.svh | 114 ++ .../fuse_ctrl_core_axi_write_in_typedefs.svh | 34 + ...se_ctrl_core_axi_write_in_typedefs_hdl.svh | 35 + ...fuse_ctrl_core_axi_write_in_interface.yaml | 161 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_write_out_if.compile | 3 + .../fuse_ctrl_core_axi_write_out_if_bfm.vinfo | 6 + ..._ctrl_core_axi_write_out_if_common.compile | 7 + ..._ctrl_core_axi_write_out_if_filelist_hdl.f | 1 + ..._ctrl_core_axi_write_out_if_filelist_hvl.f | 1 + ...ctrl_core_axi_write_out_if_filelist_xrtl.f | 3 + ...use_ctrl_core_axi_write_out_if_hdl.compile | 9 + ...use_ctrl_core_axi_write_out_if_hvl.compile | 7 + .../fuse_ctrl_core_axi_write_out_if_pkg.sv | 91 + .../fuse_ctrl_core_axi_write_out_if_pkg.vinfo | 4 + ...fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv | 52 + ...e_ctrl_core_axi_write_out_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_write_out_if_pkg_sve.F | 10 + ...ctrl_core_axi_write_out_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_core_axi_write_out_if_agent.svh | 109 + ...rl_core_axi_write_out_if_configuration.svh | 241 +++ ...fuse_ctrl_core_axi_write_out_if_driver.svh | 141 ++ ...e_ctrl_core_axi_write_out_if_driver_bfm.sv | 341 ++++ .../src/fuse_ctrl_core_axi_write_out_if_if.sv | 104 + ..._write_out_if_infact_coverage_strategy.csv | 6 + ...fuse_ctrl_core_axi_write_out_if_macros.svh | 171 ++ ...use_ctrl_core_axi_write_out_if_monitor.svh | 131 ++ ..._ctrl_core_axi_write_out_if_monitor_bfm.sv | 216 ++ ..._core_axi_write_out_if_random_sequence.svh | 91 + ...re_axi_write_out_if_responder_sequence.svh | 87 + ...rl_core_axi_write_out_if_sequence_base.svh | 146 ++ ...ctrl_core_axi_write_out_if_transaction.svh | 236 +++ ..._axi_write_out_if_transaction_coverage.svh | 106 + ...se_ctrl_core_axi_write_out_if_typedefs.svh | 34 + ...trl_core_axi_write_out_if_typedefs_hdl.svh | 35 + ..._ctrl_core_axi_write_out_if_interface.yaml | 81 + .../fuse_ctrl_core_axi_write_out_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_core_axi_write_out_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_core_axi_write_out.compile | 3 + .../fuse_ctrl_core_axi_write_out_bfm.vinfo | 6 + ...use_ctrl_core_axi_write_out_common.compile | 7 + ...use_ctrl_core_axi_write_out_filelist_hdl.f | 1 + ...use_ctrl_core_axi_write_out_filelist_hvl.f | 1 + ...se_ctrl_core_axi_write_out_filelist_xrtl.f | 3 + .../fuse_ctrl_core_axi_write_out_hdl.compile | 9 + .../fuse_ctrl_core_axi_write_out_hvl.compile | 7 + .../fuse_ctrl_core_axi_write_out_pkg.sv | 91 + .../fuse_ctrl_core_axi_write_out_pkg.vinfo | 4 + .../fuse_ctrl_core_axi_write_out_pkg_hdl.sv | 52 + ...fuse_ctrl_core_axi_write_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_core_axi_write_out_pkg_sve.F | 10 + ...se_ctrl_core_axi_write_out2reg_adapter.svh | 142 ++ .../fuse_ctrl_core_axi_write_out_agent.svh | 109 + ..._ctrl_core_axi_write_out_configuration.svh | 241 +++ .../fuse_ctrl_core_axi_write_out_driver.svh | 141 ++ ...fuse_ctrl_core_axi_write_out_driver_bfm.sv | 341 ++++ .../src/fuse_ctrl_core_axi_write_out_if.sv | 104 + ...axi_write_out_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_core_axi_write_out_macros.svh | 171 ++ .../fuse_ctrl_core_axi_write_out_monitor.svh | 131 ++ ...use_ctrl_core_axi_write_out_monitor_bfm.sv | 216 ++ ...trl_core_axi_write_out_random_sequence.svh | 91 + ..._core_axi_write_out_responder_sequence.svh | 87 + ..._ctrl_core_axi_write_out_sequence_base.svh | 146 ++ ...se_ctrl_core_axi_write_out_transaction.svh | 236 +++ ...ore_axi_write_out_transaction_coverage.svh | 106 + .../fuse_ctrl_core_axi_write_out_typedefs.svh | 34 + ...e_ctrl_core_axi_write_out_typedefs_hdl.svh | 35 + ...use_ctrl_core_axi_write_out_interface.yaml | 81 + .../fuse_ctrl_in_if_pkg/.project | 30 + .../fuse_ctrl_in_if_pkg/.svproject | 16 + .../fuse_ctrl_in_if_pkg/Makefile | 66 + .../fuse_ctrl_in_if_pkg/compile.do | 14 + .../fuse_ctrl_in_if.compile | 3 + .../fuse_ctrl_in_if_bfm.vinfo | 6 + .../fuse_ctrl_in_if_common.compile | 7 + .../fuse_ctrl_in_if_filelist_hdl.f | 1 + .../fuse_ctrl_in_if_filelist_hvl.f | 1 + .../fuse_ctrl_in_if_filelist_xrtl.f | 3 + .../fuse_ctrl_in_if_hdl.compile | 9 + .../fuse_ctrl_in_if_hvl.compile | 7 + .../fuse_ctrl_in_if_pkg.sv | 91 + .../fuse_ctrl_in_if_pkg.vinfo | 4 + .../fuse_ctrl_in_if_pkg_hdl.sv | 52 + .../fuse_ctrl_in_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_in_if_pkg_sve.F | 10 + .../src/fuse_ctrl_in_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_in_if_agent.svh | 109 + .../src/fuse_ctrl_in_if_configuration.svh | 241 +++ .../src/fuse_ctrl_in_if_driver.svh | 141 ++ .../src/fuse_ctrl_in_if_driver_bfm.sv | 346 ++++ .../src/fuse_ctrl_in_if_if.sv | 119 ++ ...se_ctrl_in_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_in_if_macros.svh | 135 ++ .../src/fuse_ctrl_in_if_monitor.svh | 131 ++ .../src/fuse_ctrl_in_if_monitor_bfm.sv | 221 ++ .../src/fuse_ctrl_in_if_random_sequence.svh | 91 + .../fuse_ctrl_in_if_responder_sequence.svh | 87 + .../src/fuse_ctrl_in_if_sequence_base.svh | 146 ++ .../src/fuse_ctrl_in_if_transaction.svh | 219 ++ .../fuse_ctrl_in_if_transaction_coverage.svh | 102 + .../src/fuse_ctrl_in_if_typedefs.svh | 34 + .../src/fuse_ctrl_in_if_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_in_if_interface.yaml | 68 + .../fuse_ctrl_in_pkg/.project | 30 + .../fuse_ctrl_in_pkg/.svproject | 16 + .../fuse_ctrl_in_pkg/Makefile | 66 + .../fuse_ctrl_in_pkg/compile.do | 14 + .../fuse_ctrl_in_pkg/fuse_ctrl_in.compile | 3 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo | 6 + .../fuse_ctrl_in_common.compile | 7 + .../fuse_ctrl_in_filelist_hdl.f | 1 + .../fuse_ctrl_in_filelist_hvl.f | 1 + .../fuse_ctrl_in_filelist_xrtl.f | 3 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile | 9 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile | 7 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv | 91 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo | 4 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv | 52 + .../fuse_ctrl_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F | 10 + .../src/fuse_ctrl_in2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_in_agent.svh | 109 + .../src/fuse_ctrl_in_configuration.svh | 241 +++ .../src/fuse_ctrl_in_driver.svh | 141 ++ .../src/fuse_ctrl_in_driver_bfm.sv | 342 ++++ .../fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv | 114 ++ .../fuse_ctrl_in_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_in_macros.svh | 135 ++ .../src/fuse_ctrl_in_monitor.svh | 131 ++ .../src/fuse_ctrl_in_monitor_bfm.sv | 218 ++ .../src/fuse_ctrl_in_random_sequence.svh | 91 + .../src/fuse_ctrl_in_responder_sequence.svh | 87 + .../src/fuse_ctrl_in_sequence_base.svh | 146 ++ .../src/fuse_ctrl_in_transaction.svh | 219 ++ .../src/fuse_ctrl_in_transaction_coverage.svh | 102 + .../src/fuse_ctrl_in_typedefs.svh | 34 + .../src/fuse_ctrl_in_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_in_interface.yaml | 64 + .../fuse_ctrl_lc_otp_if_pkg/.project | 30 + .../fuse_ctrl_lc_otp_if_pkg/.svproject | 16 + .../fuse_ctrl_lc_otp_if_pkg/Makefile | 66 + .../fuse_ctrl_lc_otp_if_pkg/compile.do | 14 + .../fuse_ctrl_lc_otp_if.compile | 3 + .../fuse_ctrl_lc_otp_if_bfm.vinfo | 6 + .../fuse_ctrl_lc_otp_if_common.compile | 7 + .../fuse_ctrl_lc_otp_if_filelist_hdl.f | 1 + .../fuse_ctrl_lc_otp_if_filelist_hvl.f | 1 + .../fuse_ctrl_lc_otp_if_filelist_xrtl.f | 3 + .../fuse_ctrl_lc_otp_if_hdl.compile | 9 + .../fuse_ctrl_lc_otp_if_hvl.compile | 7 + .../fuse_ctrl_lc_otp_if_pkg.sv | 91 + .../fuse_ctrl_lc_otp_if_pkg.vinfo | 4 + .../fuse_ctrl_lc_otp_if_pkg_hdl.sv | 52 + .../fuse_ctrl_lc_otp_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_lc_otp_if_pkg_sve.F | 10 + .../src/fuse_ctrl_lc_otp_if2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_lc_otp_if_agent.svh | 67 + .../src/fuse_ctrl_lc_otp_if_configuration.svh | 193 ++ .../src/fuse_ctrl_lc_otp_if_driver.svh | 105 + .../src/fuse_ctrl_lc_otp_if_driver_bfm.sv | 321 +++ .../src/fuse_ctrl_lc_otp_if_if.sv | 98 + ...trl_lc_otp_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_lc_otp_if_macros.svh | 153 ++ .../src/fuse_ctrl_lc_otp_if_monitor.svh | 101 + .../src/fuse_ctrl_lc_otp_if_monitor_bfm.sv | 202 ++ .../fuse_ctrl_lc_otp_if_random_sequence.svh | 67 + ...fuse_ctrl_lc_otp_if_responder_sequence.svh | 63 + .../src/fuse_ctrl_lc_otp_if_sequence_base.svh | 110 + .../src/fuse_ctrl_lc_otp_if_transaction.svh | 201 ++ ...se_ctrl_lc_otp_if_transaction_coverage.svh | 86 + .../src/fuse_ctrl_lc_otp_if_typedefs.svh | 34 + .../src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_lc_otp_if_interface.yaml | 57 + .../fuse_ctrl_lc_otp_in_if_pkg/.project | 30 + .../fuse_ctrl_lc_otp_in_if_pkg/.svproject | 16 + .../fuse_ctrl_lc_otp_in_if_pkg/Makefile | 66 + .../fuse_ctrl_lc_otp_in_if_pkg/compile.do | 14 + .../fuse_ctrl_lc_otp_in_if.compile | 3 + .../fuse_ctrl_lc_otp_in_if_bfm.vinfo | 6 + .../fuse_ctrl_lc_otp_in_if_common.compile | 7 + .../fuse_ctrl_lc_otp_in_if_filelist_hdl.f | 1 + .../fuse_ctrl_lc_otp_in_if_filelist_hvl.f | 1 + .../fuse_ctrl_lc_otp_in_if_filelist_xrtl.f | 3 + .../fuse_ctrl_lc_otp_in_if_hdl.compile | 9 + .../fuse_ctrl_lc_otp_in_if_hvl.compile | 7 + .../fuse_ctrl_lc_otp_in_if_pkg.sv | 91 + .../fuse_ctrl_lc_otp_in_if_pkg.vinfo | 4 + .../fuse_ctrl_lc_otp_in_if_pkg_hdl.sv | 52 + .../fuse_ctrl_lc_otp_in_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_lc_otp_in_if_pkg_sve.F | 10 + .../fuse_ctrl_lc_otp_in_if2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_lc_otp_in_if_agent.svh | 67 + .../fuse_ctrl_lc_otp_in_if_configuration.svh | 193 ++ .../src/fuse_ctrl_lc_otp_in_if_driver.svh | 105 + .../src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv | 321 +++ .../src/fuse_ctrl_lc_otp_in_if_if.sv | 98 + ..._lc_otp_in_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_lc_otp_in_if_macros.svh | 153 ++ .../src/fuse_ctrl_lc_otp_in_if_monitor.svh | 101 + .../src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv | 202 ++ ...fuse_ctrl_lc_otp_in_if_random_sequence.svh | 67 + ...e_ctrl_lc_otp_in_if_responder_sequence.svh | 63 + .../fuse_ctrl_lc_otp_in_if_sequence_base.svh | 110 + .../fuse_ctrl_lc_otp_in_if_transaction.svh | 201 ++ ...ctrl_lc_otp_in_if_transaction_coverage.svh | 86 + .../src/fuse_ctrl_lc_otp_in_if_typedefs.svh | 34 + .../fuse_ctrl_lc_otp_in_if_typedefs_hdl.svh | 35 + .../fuse_ctrl_lc_otp_in_if_interface.yaml | 57 + .../fuse_ctrl_lc_otp_in_pkg/.project | 30 + .../fuse_ctrl_lc_otp_in_pkg/.svproject | 16 + .../fuse_ctrl_lc_otp_in_pkg/Makefile | 66 + .../fuse_ctrl_lc_otp_in_pkg/compile.do | 14 + .../fuse_ctrl_lc_otp_in.compile | 3 + .../fuse_ctrl_lc_otp_in_bfm.vinfo | 6 + .../fuse_ctrl_lc_otp_in_common.compile | 7 + .../fuse_ctrl_lc_otp_in_filelist_hdl.f | 1 + .../fuse_ctrl_lc_otp_in_filelist_hvl.f | 1 + .../fuse_ctrl_lc_otp_in_filelist_xrtl.f | 3 + .../fuse_ctrl_lc_otp_in_hdl.compile | 9 + .../fuse_ctrl_lc_otp_in_hvl.compile | 7 + .../fuse_ctrl_lc_otp_in_pkg.sv | 91 + .../fuse_ctrl_lc_otp_in_pkg.vinfo | 4 + .../fuse_ctrl_lc_otp_in_pkg_hdl.sv | 52 + .../fuse_ctrl_lc_otp_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_lc_otp_in_pkg_sve.F | 10 + .../src/fuse_ctrl_lc_otp_in2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_lc_otp_in_agent.svh | 67 + .../src/fuse_ctrl_lc_otp_in_configuration.svh | 193 ++ .../src/fuse_ctrl_lc_otp_in_driver.svh | 105 + .../src/fuse_ctrl_lc_otp_in_driver_bfm.sv | 321 +++ .../src/fuse_ctrl_lc_otp_in_if.sv | 98 + ...trl_lc_otp_in_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_lc_otp_in_macros.svh | 153 ++ .../src/fuse_ctrl_lc_otp_in_monitor.svh | 101 + .../src/fuse_ctrl_lc_otp_in_monitor_bfm.sv | 202 ++ .../fuse_ctrl_lc_otp_in_random_sequence.svh | 67 + ...fuse_ctrl_lc_otp_in_responder_sequence.svh | 63 + .../src/fuse_ctrl_lc_otp_in_sequence_base.svh | 110 + .../src/fuse_ctrl_lc_otp_in_transaction.svh | 201 ++ ...se_ctrl_lc_otp_in_transaction_coverage.svh | 86 + .../src/fuse_ctrl_lc_otp_in_typedefs.svh | 34 + .../src/fuse_ctrl_lc_otp_in_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_lc_otp_in_interface.yaml | 57 + .../fuse_ctrl_lc_otp_out_if_pkg/.project | 30 + .../fuse_ctrl_lc_otp_out_if_pkg/.svproject | 16 + .../fuse_ctrl_lc_otp_out_if_pkg/Makefile | 66 + .../fuse_ctrl_lc_otp_out_if_pkg/compile.do | 14 + .../fuse_ctrl_lc_otp_out_if.compile | 3 + .../fuse_ctrl_lc_otp_out_if_bfm.vinfo | 6 + .../fuse_ctrl_lc_otp_out_if_common.compile | 7 + .../fuse_ctrl_lc_otp_out_if_filelist_hdl.f | 1 + .../fuse_ctrl_lc_otp_out_if_filelist_hvl.f | 1 + .../fuse_ctrl_lc_otp_out_if_filelist_xrtl.f | 3 + .../fuse_ctrl_lc_otp_out_if_hdl.compile | 9 + .../fuse_ctrl_lc_otp_out_if_hvl.compile | 7 + .../fuse_ctrl_lc_otp_out_if_pkg.sv | 91 + .../fuse_ctrl_lc_otp_out_if_pkg.vinfo | 4 + .../fuse_ctrl_lc_otp_out_if_pkg_hdl.sv | 52 + .../fuse_ctrl_lc_otp_out_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_lc_otp_out_if_pkg_sve.F | 10 + .../fuse_ctrl_lc_otp_out_if2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_lc_otp_out_if_agent.svh | 67 + .../fuse_ctrl_lc_otp_out_if_configuration.svh | 193 ++ .../src/fuse_ctrl_lc_otp_out_if_driver.svh | 105 + .../src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv | 299 +++ .../src/fuse_ctrl_lc_otp_out_if_if.sv | 88 + ...lc_otp_out_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_lc_otp_out_if_macros.svh | 135 ++ .../src/fuse_ctrl_lc_otp_out_if_monitor.svh | 101 + .../fuse_ctrl_lc_otp_out_if_monitor_bfm.sv | 194 ++ ...use_ctrl_lc_otp_out_if_random_sequence.svh | 67 + ..._ctrl_lc_otp_out_if_responder_sequence.svh | 63 + .../fuse_ctrl_lc_otp_out_if_sequence_base.svh | 110 + .../fuse_ctrl_lc_otp_out_if_transaction.svh | 196 ++ ...trl_lc_otp_out_if_transaction_coverage.svh | 84 + .../src/fuse_ctrl_lc_otp_out_if_typedefs.svh | 34 + .../fuse_ctrl_lc_otp_out_if_typedefs_hdl.svh | 35 + .../fuse_ctrl_lc_otp_out_if_interface.yaml | 37 + .../fuse_ctrl_lc_otp_out_pkg/.project | 30 + .../fuse_ctrl_lc_otp_out_pkg/.svproject | 16 + .../fuse_ctrl_lc_otp_out_pkg/Makefile | 66 + .../fuse_ctrl_lc_otp_out_pkg/compile.do | 14 + .../fuse_ctrl_lc_otp_out.compile | 3 + .../fuse_ctrl_lc_otp_out_bfm.vinfo | 6 + .../fuse_ctrl_lc_otp_out_common.compile | 7 + .../fuse_ctrl_lc_otp_out_filelist_hdl.f | 1 + .../fuse_ctrl_lc_otp_out_filelist_hvl.f | 1 + .../fuse_ctrl_lc_otp_out_filelist_xrtl.f | 3 + .../fuse_ctrl_lc_otp_out_hdl.compile | 9 + .../fuse_ctrl_lc_otp_out_hvl.compile | 7 + .../fuse_ctrl_lc_otp_out_pkg.sv | 91 + .../fuse_ctrl_lc_otp_out_pkg.vinfo | 4 + .../fuse_ctrl_lc_otp_out_pkg_hdl.sv | 52 + .../fuse_ctrl_lc_otp_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_lc_otp_out_pkg_sve.F | 10 + .../src/fuse_ctrl_lc_otp_out2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_lc_otp_out_agent.svh | 67 + .../fuse_ctrl_lc_otp_out_configuration.svh | 193 ++ .../src/fuse_ctrl_lc_otp_out_driver.svh | 105 + .../src/fuse_ctrl_lc_otp_out_driver_bfm.sv | 299 +++ .../src/fuse_ctrl_lc_otp_out_if.sv | 88 + ...rl_lc_otp_out_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_lc_otp_out_macros.svh | 135 ++ .../src/fuse_ctrl_lc_otp_out_monitor.svh | 101 + .../src/fuse_ctrl_lc_otp_out_monitor_bfm.sv | 194 ++ .../fuse_ctrl_lc_otp_out_random_sequence.svh | 67 + ...use_ctrl_lc_otp_out_responder_sequence.svh | 63 + .../fuse_ctrl_lc_otp_out_sequence_base.svh | 110 + .../src/fuse_ctrl_lc_otp_out_transaction.svh | 196 ++ ...e_ctrl_lc_otp_out_transaction_coverage.svh | 84 + .../src/fuse_ctrl_lc_otp_out_typedefs.svh | 34 + .../src/fuse_ctrl_lc_otp_out_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_lc_otp_out_interface.yaml | 37 + .../fuse_ctrl_out_if_pkg/.project | 30 + .../fuse_ctrl_out_if_pkg/.svproject | 16 + .../fuse_ctrl_out_if_pkg/Makefile | 66 + .../fuse_ctrl_out_if_pkg/compile.do | 14 + .../fuse_ctrl_out_if.compile | 3 + .../fuse_ctrl_out_if_bfm.vinfo | 6 + .../fuse_ctrl_out_if_common.compile | 7 + .../fuse_ctrl_out_if_filelist_hdl.f | 1 + .../fuse_ctrl_out_if_filelist_hvl.f | 1 + .../fuse_ctrl_out_if_filelist_xrtl.f | 3 + .../fuse_ctrl_out_if_hdl.compile | 9 + .../fuse_ctrl_out_if_hvl.compile | 7 + .../fuse_ctrl_out_if_pkg.sv | 91 + .../fuse_ctrl_out_if_pkg.vinfo | 4 + .../fuse_ctrl_out_if_pkg_hdl.sv | 52 + .../fuse_ctrl_out_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_out_if_pkg_sve.F | 10 + .../src/fuse_ctrl_out_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_out_if_agent.svh | 109 + .../src/fuse_ctrl_out_if_configuration.svh | 241 +++ .../src/fuse_ctrl_out_if_driver.svh | 141 ++ .../src/fuse_ctrl_out_if_driver_bfm.sv | 382 ++++ .../src/fuse_ctrl_out_if_if.sv | 134 ++ ...e_ctrl_out_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_out_if_macros.svh | 135 ++ .../src/fuse_ctrl_out_if_monitor.svh | 131 ++ .../src/fuse_ctrl_out_if_monitor_bfm.sv | 230 +++ .../src/fuse_ctrl_out_if_random_sequence.svh | 91 + .../fuse_ctrl_out_if_responder_sequence.svh | 87 + .../src/fuse_ctrl_out_if_sequence_base.svh | 146 ++ .../src/fuse_ctrl_out_if_transaction.svh | 223 +++ .../fuse_ctrl_out_if_transaction_coverage.svh | 103 + .../src/fuse_ctrl_out_if_typedefs.svh | 34 + .../src/fuse_ctrl_out_if_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_out_if_interface.yaml | 80 + .../fuse_ctrl_out_pkg/.project | 30 + .../fuse_ctrl_out_pkg/.svproject | 16 + .../fuse_ctrl_out_pkg/Makefile | 66 + .../fuse_ctrl_out_pkg/compile.do | 14 + .../fuse_ctrl_out_pkg/fuse_ctrl_out.compile | 3 + .../fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo | 6 + .../fuse_ctrl_out_common.compile | 7 + .../fuse_ctrl_out_filelist_hdl.f | 1 + .../fuse_ctrl_out_filelist_hvl.f | 1 + .../fuse_ctrl_out_filelist_xrtl.f | 3 + .../fuse_ctrl_out_hdl.compile | 9 + .../fuse_ctrl_out_hvl.compile | 7 + .../fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv | 91 + .../fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo | 4 + .../fuse_ctrl_out_pkg_hdl.sv | 52 + .../fuse_ctrl_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F | 10 + .../src/fuse_ctrl_out2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_out_agent.svh | 109 + .../src/fuse_ctrl_out_configuration.svh | 241 +++ .../src/fuse_ctrl_out_driver.svh | 141 ++ .../src/fuse_ctrl_out_driver_bfm.sv | 374 ++++ .../fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv | 124 ++ ...fuse_ctrl_out_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_out_macros.svh | 135 ++ .../src/fuse_ctrl_out_monitor.svh | 131 ++ .../src/fuse_ctrl_out_monitor_bfm.sv | 224 +++ .../src/fuse_ctrl_out_random_sequence.svh | 91 + .../src/fuse_ctrl_out_responder_sequence.svh | 87 + .../src/fuse_ctrl_out_sequence_base.svh | 146 ++ .../src/fuse_ctrl_out_transaction.svh | 223 +++ .../fuse_ctrl_out_transaction_coverage.svh | 103 + .../src/fuse_ctrl_out_typedefs.svh | 34 + .../src/fuse_ctrl_out_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_out_interface.yaml | 72 + .../fuse_ctrl_prim_axi_read_if_pkg/.project | 30 + .../fuse_ctrl_prim_axi_read_if_pkg/.svproject | 16 + .../fuse_ctrl_prim_axi_read_if_pkg/Makefile | 66 + .../fuse_ctrl_prim_axi_read_if_pkg/compile.do | 14 + .../fuse_ctrl_prim_axi_read_if.compile | 3 + .../fuse_ctrl_prim_axi_read_if_bfm.vinfo | 6 + .../fuse_ctrl_prim_axi_read_if_common.compile | 7 + .../fuse_ctrl_prim_axi_read_if_filelist_hdl.f | 1 + .../fuse_ctrl_prim_axi_read_if_filelist_hvl.f | 1 + ...fuse_ctrl_prim_axi_read_if_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_read_if_hdl.compile | 9 + .../fuse_ctrl_prim_axi_read_if_hvl.compile | 7 + .../fuse_ctrl_prim_axi_read_if_pkg.sv | 91 + .../fuse_ctrl_prim_axi_read_if_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_read_if_pkg_hdl.sv | 52 + .../fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_read_if_pkg_sve.F | 10 + ...fuse_ctrl_prim_axi_read_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_prim_axi_read_if_agent.svh | 109 + ...se_ctrl_prim_axi_read_if_configuration.svh | 241 +++ .../src/fuse_ctrl_prim_axi_read_if_driver.svh | 141 ++ .../fuse_ctrl_prim_axi_read_if_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_prim_axi_read_if_if.sv | 124 ++ ...m_axi_read_if_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_prim_axi_read_if_macros.svh | 207 ++ .../fuse_ctrl_prim_axi_read_if_monitor.svh | 131 ++ .../fuse_ctrl_prim_axi_read_if_monitor_bfm.sv | 232 +++ ..._ctrl_prim_axi_read_if_random_sequence.svh | 91 + ...rl_prim_axi_read_if_responder_sequence.svh | 87 + ...se_ctrl_prim_axi_read_if_sequence_base.svh | 146 ++ ...fuse_ctrl_prim_axi_read_if_transaction.svh | 243 +++ ..._prim_axi_read_if_transaction_coverage.svh | 110 + .../fuse_ctrl_prim_axi_read_if_typedefs.svh | 34 + ...use_ctrl_prim_axi_read_if_typedefs_hdl.svh | 35 + .../fuse_ctrl_prim_axi_read_if_interface.yaml | 121 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_read_in_if.compile | 3 + .../fuse_ctrl_prim_axi_read_in_if_bfm.vinfo | 6 + ...se_ctrl_prim_axi_read_in_if_common.compile | 7 + ...se_ctrl_prim_axi_read_in_if_filelist_hdl.f | 1 + ...se_ctrl_prim_axi_read_in_if_filelist_hvl.f | 1 + ...e_ctrl_prim_axi_read_in_if_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_read_in_if_hdl.compile | 9 + .../fuse_ctrl_prim_axi_read_in_if_hvl.compile | 7 + .../fuse_ctrl_prim_axi_read_in_if_pkg.sv | 91 + .../fuse_ctrl_prim_axi_read_in_if_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv | 52 + ...use_ctrl_prim_axi_read_in_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_read_in_if_pkg_sve.F | 10 + ...e_ctrl_prim_axi_read_in_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_prim_axi_read_in_if_agent.svh | 109 + ...ctrl_prim_axi_read_in_if_configuration.svh | 241 +++ .../fuse_ctrl_prim_axi_read_in_if_driver.svh | 141 ++ ...use_ctrl_prim_axi_read_in_if_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_prim_axi_read_in_if_if.sv | 124 ++ ...xi_read_in_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_prim_axi_read_in_if_macros.svh | 207 ++ .../fuse_ctrl_prim_axi_read_in_if_monitor.svh | 131 ++ ...se_ctrl_prim_axi_read_in_if_monitor_bfm.sv | 232 +++ ...rl_prim_axi_read_in_if_random_sequence.svh | 91 + ...prim_axi_read_in_if_responder_sequence.svh | 87 + ...ctrl_prim_axi_read_in_if_sequence_base.svh | 146 ++ ...e_ctrl_prim_axi_read_in_if_transaction.svh | 243 +++ ...im_axi_read_in_if_transaction_coverage.svh | 110 + ...fuse_ctrl_prim_axi_read_in_if_typedefs.svh | 34 + ..._ctrl_prim_axi_read_in_if_typedefs_hdl.svh | 35 + ...se_ctrl_prim_axi_read_in_if_interface.yaml | 121 ++ .../fuse_ctrl_prim_axi_read_in_pkg/.project | 30 + .../fuse_ctrl_prim_axi_read_in_pkg/.svproject | 16 + .../fuse_ctrl_prim_axi_read_in_pkg/Makefile | 66 + .../fuse_ctrl_prim_axi_read_in_pkg/compile.do | 14 + .../fuse_ctrl_prim_axi_read_in.compile | 3 + .../fuse_ctrl_prim_axi_read_in_bfm.vinfo | 6 + .../fuse_ctrl_prim_axi_read_in_common.compile | 7 + .../fuse_ctrl_prim_axi_read_in_filelist_hdl.f | 1 + .../fuse_ctrl_prim_axi_read_in_filelist_hvl.f | 1 + ...fuse_ctrl_prim_axi_read_in_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_read_in_hdl.compile | 9 + .../fuse_ctrl_prim_axi_read_in_hvl.compile | 7 + .../fuse_ctrl_prim_axi_read_in_pkg.sv | 91 + .../fuse_ctrl_prim_axi_read_in_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_read_in_pkg_hdl.sv | 52 + .../fuse_ctrl_prim_axi_read_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_read_in_pkg_sve.F | 10 + ...fuse_ctrl_prim_axi_read_in2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_prim_axi_read_in_agent.svh | 109 + ...se_ctrl_prim_axi_read_in_configuration.svh | 241 +++ .../src/fuse_ctrl_prim_axi_read_in_driver.svh | 141 ++ .../fuse_ctrl_prim_axi_read_in_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_prim_axi_read_in_if.sv | 124 ++ ...m_axi_read_in_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_prim_axi_read_in_macros.svh | 207 ++ .../fuse_ctrl_prim_axi_read_in_monitor.svh | 131 ++ .../fuse_ctrl_prim_axi_read_in_monitor_bfm.sv | 232 +++ ..._ctrl_prim_axi_read_in_random_sequence.svh | 91 + ...rl_prim_axi_read_in_responder_sequence.svh | 87 + ...se_ctrl_prim_axi_read_in_sequence_base.svh | 146 ++ ...fuse_ctrl_prim_axi_read_in_transaction.svh | 243 +++ ..._prim_axi_read_in_transaction_coverage.svh | 110 + .../fuse_ctrl_prim_axi_read_in_typedefs.svh | 34 + ...use_ctrl_prim_axi_read_in_typedefs_hdl.svh | 35 + .../fuse_ctrl_prim_axi_read_in_interface.yaml | 121 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_read_out_if.compile | 3 + .../fuse_ctrl_prim_axi_read_out_if_bfm.vinfo | 6 + ...e_ctrl_prim_axi_read_out_if_common.compile | 7 + ...e_ctrl_prim_axi_read_out_if_filelist_hdl.f | 1 + ...e_ctrl_prim_axi_read_out_if_filelist_hvl.f | 1 + ..._ctrl_prim_axi_read_out_if_filelist_xrtl.f | 3 + ...fuse_ctrl_prim_axi_read_out_if_hdl.compile | 9 + ...fuse_ctrl_prim_axi_read_out_if_hvl.compile | 7 + .../fuse_ctrl_prim_axi_read_out_if_pkg.sv | 91 + .../fuse_ctrl_prim_axi_read_out_if_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv | 52 + ...se_ctrl_prim_axi_read_out_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_read_out_if_pkg_sve.F | 10 + ..._ctrl_prim_axi_read_out_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_prim_axi_read_out_if_agent.svh | 109 + ...trl_prim_axi_read_out_if_configuration.svh | 241 +++ .../fuse_ctrl_prim_axi_read_out_if_driver.svh | 141 ++ ...se_ctrl_prim_axi_read_out_if_driver_bfm.sv | 352 ++++ .../src/fuse_ctrl_prim_axi_read_out_if_if.sv | 109 + ...i_read_out_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_prim_axi_read_out_if_macros.svh | 180 ++ ...fuse_ctrl_prim_axi_read_out_if_monitor.svh | 131 ++ ...e_ctrl_prim_axi_read_out_if_monitor_bfm.sv | 220 ++ ...l_prim_axi_read_out_if_random_sequence.svh | 91 + ...rim_axi_read_out_if_responder_sequence.svh | 87 + ...trl_prim_axi_read_out_if_sequence_base.svh | 146 ++ ..._ctrl_prim_axi_read_out_if_transaction.svh | 240 +++ ...m_axi_read_out_if_transaction_coverage.svh | 107 + ...use_ctrl_prim_axi_read_out_if_typedefs.svh | 34 + ...ctrl_prim_axi_read_out_if_typedefs_hdl.svh | 35 + ...e_ctrl_prim_axi_read_out_if_interface.yaml | 91 + .../fuse_ctrl_prim_axi_read_out_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_prim_axi_read_out_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_read_out.compile | 3 + .../fuse_ctrl_prim_axi_read_out_bfm.vinfo | 6 + ...fuse_ctrl_prim_axi_read_out_common.compile | 7 + ...fuse_ctrl_prim_axi_read_out_filelist_hdl.f | 1 + ...fuse_ctrl_prim_axi_read_out_filelist_hvl.f | 1 + ...use_ctrl_prim_axi_read_out_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_read_out_hdl.compile | 9 + .../fuse_ctrl_prim_axi_read_out_hvl.compile | 7 + .../fuse_ctrl_prim_axi_read_out_pkg.sv | 91 + .../fuse_ctrl_prim_axi_read_out_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_read_out_pkg_hdl.sv | 52 + .../fuse_ctrl_prim_axi_read_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_read_out_pkg_sve.F | 10 + ...use_ctrl_prim_axi_read_out2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_prim_axi_read_out_agent.svh | 109 + ...e_ctrl_prim_axi_read_out_configuration.svh | 241 +++ .../fuse_ctrl_prim_axi_read_out_driver.svh | 141 ++ .../fuse_ctrl_prim_axi_read_out_driver_bfm.sv | 352 ++++ .../src/fuse_ctrl_prim_axi_read_out_if.sv | 109 + ..._axi_read_out_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_prim_axi_read_out_macros.svh | 180 ++ .../fuse_ctrl_prim_axi_read_out_monitor.svh | 131 ++ ...fuse_ctrl_prim_axi_read_out_monitor_bfm.sv | 220 ++ ...ctrl_prim_axi_read_out_random_sequence.svh | 91 + ...l_prim_axi_read_out_responder_sequence.svh | 87 + ...e_ctrl_prim_axi_read_out_sequence_base.svh | 146 ++ ...use_ctrl_prim_axi_read_out_transaction.svh | 240 +++ ...prim_axi_read_out_transaction_coverage.svh | 107 + .../fuse_ctrl_prim_axi_read_out_typedefs.svh | 34 + ...se_ctrl_prim_axi_read_out_typedefs_hdl.svh | 35 + ...fuse_ctrl_prim_axi_read_out_interface.yaml | 91 + .../fuse_ctrl_prim_axi_write_if_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_prim_axi_write_if_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_write_if.compile | 3 + .../fuse_ctrl_prim_axi_write_if_bfm.vinfo | 6 + ...fuse_ctrl_prim_axi_write_if_common.compile | 7 + ...fuse_ctrl_prim_axi_write_if_filelist_hdl.f | 1 + ...fuse_ctrl_prim_axi_write_if_filelist_hvl.f | 1 + ...use_ctrl_prim_axi_write_if_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_write_if_hdl.compile | 9 + .../fuse_ctrl_prim_axi_write_if_hvl.compile | 7 + .../fuse_ctrl_prim_axi_write_if_pkg.sv | 91 + .../fuse_ctrl_prim_axi_write_if_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_write_if_pkg_hdl.sv | 52 + .../fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_write_if_pkg_sve.F | 10 + ...use_ctrl_prim_axi_write_if2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_prim_axi_write_if_agent.svh | 109 + ...e_ctrl_prim_axi_write_if_configuration.svh | 241 +++ .../fuse_ctrl_prim_axi_write_if_driver.svh | 141 ++ .../fuse_ctrl_prim_axi_write_if_driver_bfm.sv | 429 ++++ .../src/fuse_ctrl_prim_axi_write_if_if.sv | 144 ++ ..._axi_write_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_prim_axi_write_if_macros.svh | 243 +++ .../fuse_ctrl_prim_axi_write_if_monitor.svh | 131 ++ ...fuse_ctrl_prim_axi_write_if_monitor_bfm.sv | 248 +++ ...ctrl_prim_axi_write_if_random_sequence.svh | 91 + ...l_prim_axi_write_if_responder_sequence.svh | 87 + ...e_ctrl_prim_axi_write_if_sequence_base.svh | 146 ++ ...use_ctrl_prim_axi_write_if_transaction.svh | 256 +++ ...prim_axi_write_if_transaction_coverage.svh | 114 ++ .../fuse_ctrl_prim_axi_write_if_typedefs.svh | 34 + ...se_ctrl_prim_axi_write_if_typedefs_hdl.svh | 35 + ...fuse_ctrl_prim_axi_write_if_interface.yaml | 161 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_write_in_if.compile | 3 + .../fuse_ctrl_prim_axi_write_in_if_bfm.vinfo | 6 + ...e_ctrl_prim_axi_write_in_if_common.compile | 7 + ...e_ctrl_prim_axi_write_in_if_filelist_hdl.f | 1 + ...e_ctrl_prim_axi_write_in_if_filelist_hvl.f | 1 + ..._ctrl_prim_axi_write_in_if_filelist_xrtl.f | 3 + ...fuse_ctrl_prim_axi_write_in_if_hdl.compile | 9 + ...fuse_ctrl_prim_axi_write_in_if_hvl.compile | 7 + .../fuse_ctrl_prim_axi_write_in_if_pkg.sv | 91 + .../fuse_ctrl_prim_axi_write_in_if_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv | 52 + ...se_ctrl_prim_axi_write_in_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_write_in_if_pkg_sve.F | 10 + ..._ctrl_prim_axi_write_in_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_prim_axi_write_in_if_agent.svh | 109 + ...trl_prim_axi_write_in_if_configuration.svh | 241 +++ .../fuse_ctrl_prim_axi_write_in_if_driver.svh | 141 ++ ...se_ctrl_prim_axi_write_in_if_driver_bfm.sv | 429 ++++ .../src/fuse_ctrl_prim_axi_write_in_if_if.sv | 144 ++ ...i_write_in_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_prim_axi_write_in_if_macros.svh | 243 +++ ...fuse_ctrl_prim_axi_write_in_if_monitor.svh | 131 ++ ...e_ctrl_prim_axi_write_in_if_monitor_bfm.sv | 248 +++ ...l_prim_axi_write_in_if_random_sequence.svh | 91 + ...rim_axi_write_in_if_responder_sequence.svh | 87 + ...trl_prim_axi_write_in_if_sequence_base.svh | 146 ++ ..._ctrl_prim_axi_write_in_if_transaction.svh | 256 +++ ...m_axi_write_in_if_transaction_coverage.svh | 114 ++ ...use_ctrl_prim_axi_write_in_if_typedefs.svh | 34 + ...ctrl_prim_axi_write_in_if_typedefs_hdl.svh | 35 + ...e_ctrl_prim_axi_write_in_if_interface.yaml | 161 ++ .../fuse_ctrl_prim_axi_write_in_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_prim_axi_write_in_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_write_in.compile | 3 + .../fuse_ctrl_prim_axi_write_in_bfm.vinfo | 6 + ...fuse_ctrl_prim_axi_write_in_common.compile | 7 + ...fuse_ctrl_prim_axi_write_in_filelist_hdl.f | 1 + ...fuse_ctrl_prim_axi_write_in_filelist_hvl.f | 1 + ...use_ctrl_prim_axi_write_in_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_write_in_hdl.compile | 9 + .../fuse_ctrl_prim_axi_write_in_hvl.compile | 7 + .../fuse_ctrl_prim_axi_write_in_pkg.sv | 91 + .../fuse_ctrl_prim_axi_write_in_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_write_in_pkg_hdl.sv | 52 + .../fuse_ctrl_prim_axi_write_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_write_in_pkg_sve.F | 10 + ...use_ctrl_prim_axi_write_in2reg_adapter.svh | 142 ++ .../src/fuse_ctrl_prim_axi_write_in_agent.svh | 109 + ...e_ctrl_prim_axi_write_in_configuration.svh | 241 +++ .../fuse_ctrl_prim_axi_write_in_driver.svh | 141 ++ .../fuse_ctrl_prim_axi_write_in_driver_bfm.sv | 429 ++++ .../src/fuse_ctrl_prim_axi_write_in_if.sv | 144 ++ ..._axi_write_in_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_prim_axi_write_in_macros.svh | 243 +++ .../fuse_ctrl_prim_axi_write_in_monitor.svh | 131 ++ ...fuse_ctrl_prim_axi_write_in_monitor_bfm.sv | 248 +++ ...ctrl_prim_axi_write_in_random_sequence.svh | 91 + ...l_prim_axi_write_in_responder_sequence.svh | 87 + ...e_ctrl_prim_axi_write_in_sequence_base.svh | 146 ++ ...use_ctrl_prim_axi_write_in_transaction.svh | 256 +++ ...prim_axi_write_in_transaction_coverage.svh | 114 ++ .../fuse_ctrl_prim_axi_write_in_typedefs.svh | 34 + ...se_ctrl_prim_axi_write_in_typedefs_hdl.svh | 35 + ...fuse_ctrl_prim_axi_write_in_interface.yaml | 161 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_write_out_if.compile | 3 + .../fuse_ctrl_prim_axi_write_out_if_bfm.vinfo | 6 + ..._ctrl_prim_axi_write_out_if_common.compile | 7 + ..._ctrl_prim_axi_write_out_if_filelist_hdl.f | 1 + ..._ctrl_prim_axi_write_out_if_filelist_hvl.f | 1 + ...ctrl_prim_axi_write_out_if_filelist_xrtl.f | 3 + ...use_ctrl_prim_axi_write_out_if_hdl.compile | 9 + ...use_ctrl_prim_axi_write_out_if_hvl.compile | 7 + .../fuse_ctrl_prim_axi_write_out_if_pkg.sv | 91 + .../fuse_ctrl_prim_axi_write_out_if_pkg.vinfo | 4 + ...fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv | 52 + ...e_ctrl_prim_axi_write_out_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_write_out_if_pkg_sve.F | 10 + ...ctrl_prim_axi_write_out_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_prim_axi_write_out_if_agent.svh | 109 + ...rl_prim_axi_write_out_if_configuration.svh | 241 +++ ...fuse_ctrl_prim_axi_write_out_if_driver.svh | 141 ++ ...e_ctrl_prim_axi_write_out_if_driver_bfm.sv | 341 ++++ .../src/fuse_ctrl_prim_axi_write_out_if_if.sv | 104 + ..._write_out_if_infact_coverage_strategy.csv | 6 + ...fuse_ctrl_prim_axi_write_out_if_macros.svh | 171 ++ ...use_ctrl_prim_axi_write_out_if_monitor.svh | 131 ++ ..._ctrl_prim_axi_write_out_if_monitor_bfm.sv | 216 ++ ..._prim_axi_write_out_if_random_sequence.svh | 91 + ...im_axi_write_out_if_responder_sequence.svh | 87 + ...rl_prim_axi_write_out_if_sequence_base.svh | 146 ++ ...ctrl_prim_axi_write_out_if_transaction.svh | 236 +++ ..._axi_write_out_if_transaction_coverage.svh | 106 + ...se_ctrl_prim_axi_write_out_if_typedefs.svh | 34 + ...trl_prim_axi_write_out_if_typedefs_hdl.svh | 35 + ..._ctrl_prim_axi_write_out_if_interface.yaml | 81 + .../fuse_ctrl_prim_axi_write_out_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_prim_axi_write_out_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_prim_axi_write_out.compile | 3 + .../fuse_ctrl_prim_axi_write_out_bfm.vinfo | 6 + ...use_ctrl_prim_axi_write_out_common.compile | 7 + ...use_ctrl_prim_axi_write_out_filelist_hdl.f | 1 + ...use_ctrl_prim_axi_write_out_filelist_hvl.f | 1 + ...se_ctrl_prim_axi_write_out_filelist_xrtl.f | 3 + .../fuse_ctrl_prim_axi_write_out_hdl.compile | 9 + .../fuse_ctrl_prim_axi_write_out_hvl.compile | 7 + .../fuse_ctrl_prim_axi_write_out_pkg.sv | 91 + .../fuse_ctrl_prim_axi_write_out_pkg.vinfo | 4 + .../fuse_ctrl_prim_axi_write_out_pkg_hdl.sv | 52 + ...fuse_ctrl_prim_axi_write_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_prim_axi_write_out_pkg_sve.F | 10 + ...se_ctrl_prim_axi_write_out2reg_adapter.svh | 142 ++ .../fuse_ctrl_prim_axi_write_out_agent.svh | 109 + ..._ctrl_prim_axi_write_out_configuration.svh | 241 +++ .../fuse_ctrl_prim_axi_write_out_driver.svh | 141 ++ ...fuse_ctrl_prim_axi_write_out_driver_bfm.sv | 341 ++++ .../src/fuse_ctrl_prim_axi_write_out_if.sv | 104 + ...axi_write_out_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_prim_axi_write_out_macros.svh | 171 ++ .../fuse_ctrl_prim_axi_write_out_monitor.svh | 131 ++ ...use_ctrl_prim_axi_write_out_monitor_bfm.sv | 216 ++ ...trl_prim_axi_write_out_random_sequence.svh | 91 + ..._prim_axi_write_out_responder_sequence.svh | 87 + ..._ctrl_prim_axi_write_out_sequence_base.svh | 146 ++ ...se_ctrl_prim_axi_write_out_transaction.svh | 236 +++ ...rim_axi_write_out_transaction_coverage.svh | 106 + .../fuse_ctrl_prim_axi_write_out_typedefs.svh | 34 + ...e_ctrl_prim_axi_write_out_typedefs_hdl.svh | 35 + ...use_ctrl_prim_axi_write_out_interface.yaml | 81 + .../fuse_ctrl_pwr_in_pkg/.project | 30 + .../fuse_ctrl_pwr_in_pkg/.svproject | 16 + .../fuse_ctrl_pwr_in_pkg/Makefile | 66 + .../fuse_ctrl_pwr_in_pkg/compile.do | 14 + .../fuse_ctrl_pwr_in.compile | 3 + .../fuse_ctrl_pwr_in_bfm.vinfo | 6 + .../fuse_ctrl_pwr_in_common.compile | 7 + .../fuse_ctrl_pwr_in_filelist_hdl.f | 1 + .../fuse_ctrl_pwr_in_filelist_hvl.f | 1 + .../fuse_ctrl_pwr_in_filelist_xrtl.f | 3 + .../fuse_ctrl_pwr_in_hdl.compile | 9 + .../fuse_ctrl_pwr_in_hvl.compile | 7 + .../fuse_ctrl_pwr_in_pkg.sv | 91 + .../fuse_ctrl_pwr_in_pkg.vinfo | 4 + .../fuse_ctrl_pwr_in_pkg_hdl.sv | 52 + .../fuse_ctrl_pwr_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_pwr_in_pkg_sve.F | 10 + .../src/fuse_ctrl_pwr_in2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_pwr_in_agent.svh | 67 + .../src/fuse_ctrl_pwr_in_configuration.svh | 193 ++ .../src/fuse_ctrl_pwr_in_driver.svh | 105 + .../src/fuse_ctrl_pwr_in_driver_bfm.sv | 294 +++ .../src/fuse_ctrl_pwr_in_if.sv | 83 + ...e_ctrl_pwr_in_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_pwr_in_macros.svh | 135 ++ .../src/fuse_ctrl_pwr_in_monitor.svh | 101 + .../src/fuse_ctrl_pwr_in_monitor_bfm.sv | 191 ++ .../src/fuse_ctrl_pwr_in_random_sequence.svh | 67 + .../fuse_ctrl_pwr_in_responder_sequence.svh | 63 + .../src/fuse_ctrl_pwr_in_sequence_base.svh | 110 + .../src/fuse_ctrl_pwr_in_transaction.svh | 195 ++ .../fuse_ctrl_pwr_in_transaction_coverage.svh | 84 + .../src/fuse_ctrl_pwr_in_typedefs.svh | 34 + .../src/fuse_ctrl_pwr_in_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_pwr_in_interface.yaml | 33 + .../fuse_ctrl_pwr_out_pkg/.project | 30 + .../fuse_ctrl_pwr_out_pkg/.svproject | 16 + .../fuse_ctrl_pwr_out_pkg/Makefile | 66 + .../fuse_ctrl_pwr_out_pkg/compile.do | 14 + .../fuse_ctrl_pwr_out.compile | 3 + .../fuse_ctrl_pwr_out_bfm.vinfo | 6 + .../fuse_ctrl_pwr_out_common.compile | 7 + .../fuse_ctrl_pwr_out_filelist_hdl.f | 1 + .../fuse_ctrl_pwr_out_filelist_hvl.f | 1 + .../fuse_ctrl_pwr_out_filelist_xrtl.f | 3 + .../fuse_ctrl_pwr_out_hdl.compile | 9 + .../fuse_ctrl_pwr_out_hvl.compile | 7 + .../fuse_ctrl_pwr_out_pkg.sv | 91 + .../fuse_ctrl_pwr_out_pkg.vinfo | 4 + .../fuse_ctrl_pwr_out_pkg_hdl.sv | 52 + .../fuse_ctrl_pwr_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_pwr_out_pkg_sve.F | 10 + .../src/fuse_ctrl_pwr_out2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_pwr_out_agent.svh | 67 + .../src/fuse_ctrl_pwr_out_configuration.svh | 193 ++ .../src/fuse_ctrl_pwr_out_driver.svh | 105 + .../src/fuse_ctrl_pwr_out_driver_bfm.sv | 294 +++ .../src/fuse_ctrl_pwr_out_if.sv | 83 + ..._ctrl_pwr_out_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_pwr_out_macros.svh | 135 ++ .../src/fuse_ctrl_pwr_out_monitor.svh | 101 + .../src/fuse_ctrl_pwr_out_monitor_bfm.sv | 191 ++ .../src/fuse_ctrl_pwr_out_random_sequence.svh | 67 + .../fuse_ctrl_pwr_out_responder_sequence.svh | 63 + .../src/fuse_ctrl_pwr_out_sequence_base.svh | 110 + .../src/fuse_ctrl_pwr_out_transaction.svh | 196 ++ ...fuse_ctrl_pwr_out_transaction_coverage.svh | 84 + .../src/fuse_ctrl_pwr_out_typedefs.svh | 34 + .../src/fuse_ctrl_pwr_out_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_pwr_out_interface.yaml | 33 + .../fuse_ctrl_rst_in_pkg/.project | 30 + .../fuse_ctrl_rst_in_pkg/.svproject | 16 + .../fuse_ctrl_rst_in_pkg/Makefile | 66 + .../fuse_ctrl_rst_in_pkg/compile.do | 14 + .../fuse_ctrl_rst_in.compile | 3 + .../fuse_ctrl_rst_in_bfm.vinfo | 6 + .../fuse_ctrl_rst_in_common.compile | 7 + .../fuse_ctrl_rst_in_filelist_hdl.f | 1 + .../fuse_ctrl_rst_in_filelist_hvl.f | 1 + .../fuse_ctrl_rst_in_filelist_xrtl.f | 3 + .../fuse_ctrl_rst_in_hdl.compile | 9 + .../fuse_ctrl_rst_in_hvl.compile | 7 + .../fuse_ctrl_rst_in_pkg.sv | 91 + .../fuse_ctrl_rst_in_pkg.vinfo | 4 + .../fuse_ctrl_rst_in_pkg_hdl.sv | 52 + .../fuse_ctrl_rst_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_rst_in_pkg_sve.F | 10 + .../src/fuse_ctrl_rst_in2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_rst_in_agent.svh | 67 + .../src/fuse_ctrl_rst_in_configuration.svh | 193 ++ .../src/fuse_ctrl_rst_in_driver.svh | 105 + .../src/fuse_ctrl_rst_in_driver_bfm.sv | 298 +++ .../src/fuse_ctrl_rst_in_if.sv | 83 + ...e_ctrl_rst_in_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_rst_in_macros.svh | 144 ++ .../src/fuse_ctrl_rst_in_monitor.svh | 101 + .../src/fuse_ctrl_rst_in_monitor_bfm.sv | 192 ++ .../src/fuse_ctrl_rst_in_random_sequence.svh | 67 + .../fuse_ctrl_rst_in_responder_sequence.svh | 63 + .../src/fuse_ctrl_rst_in_sequence_base.svh | 110 + .../src/fuse_ctrl_rst_in_transaction.svh | 198 ++ .../fuse_ctrl_rst_in_transaction_coverage.svh | 85 + .../src/fuse_ctrl_rst_in_typedefs.svh | 34 + .../src/fuse_ctrl_rst_in_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_rst_in_interface.yaml | 39 + .../fuse_ctrl_rst_out_pkg/.project | 30 + .../fuse_ctrl_rst_out_pkg/.svproject | 16 + .../fuse_ctrl_rst_out_pkg/Makefile | 66 + .../fuse_ctrl_rst_out_pkg/compile.do | 14 + .../fuse_ctrl_rst_out.compile | 3 + .../fuse_ctrl_rst_out_bfm.vinfo | 6 + .../fuse_ctrl_rst_out_common.compile | 7 + .../fuse_ctrl_rst_out_filelist_hdl.f | 1 + .../fuse_ctrl_rst_out_filelist_hvl.f | 1 + .../fuse_ctrl_rst_out_filelist_xrtl.f | 3 + .../fuse_ctrl_rst_out_hdl.compile | 9 + .../fuse_ctrl_rst_out_hvl.compile | 7 + .../fuse_ctrl_rst_out_pkg.sv | 91 + .../fuse_ctrl_rst_out_pkg.vinfo | 4 + .../fuse_ctrl_rst_out_pkg_hdl.sv | 52 + .../fuse_ctrl_rst_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_rst_out_pkg_sve.F | 10 + .../src/fuse_ctrl_rst_out2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_rst_out_agent.svh | 67 + .../src/fuse_ctrl_rst_out_configuration.svh | 193 ++ .../src/fuse_ctrl_rst_out_driver.svh | 105 + .../src/fuse_ctrl_rst_out_driver_bfm.sv | 294 +++ .../src/fuse_ctrl_rst_out_if.sv | 83 + ..._ctrl_rst_out_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_rst_out_macros.svh | 135 ++ .../src/fuse_ctrl_rst_out_monitor.svh | 101 + .../src/fuse_ctrl_rst_out_monitor_bfm.sv | 191 ++ .../src/fuse_ctrl_rst_out_random_sequence.svh | 67 + .../fuse_ctrl_rst_out_responder_sequence.svh | 63 + .../src/fuse_ctrl_rst_out_sequence_base.svh | 110 + .../src/fuse_ctrl_rst_out_transaction.svh | 196 ++ ...fuse_ctrl_rst_out_transaction_coverage.svh | 84 + .../src/fuse_ctrl_rst_out_typedefs.svh | 34 + .../src/fuse_ctrl_rst_out_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_rst_out_interface.yaml | 33 + .../fuse_ctrl_rst_pkg/.project | 30 + .../fuse_ctrl_rst_pkg/.svproject | 16 + .../fuse_ctrl_rst_pkg/Makefile | 66 + .../fuse_ctrl_rst_pkg/compile.do | 14 + .../fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile | 3 + .../fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo | 6 + .../fuse_ctrl_rst_common.compile | 7 + .../fuse_ctrl_rst_filelist_hdl.f | 1 + .../fuse_ctrl_rst_filelist_hvl.f | 1 + .../fuse_ctrl_rst_filelist_xrtl.f | 3 + .../fuse_ctrl_rst_hdl.compile | 9 + .../fuse_ctrl_rst_hvl.compile | 7 + .../fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv | 91 + .../fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo | 4 + .../fuse_ctrl_rst_pkg_hdl.sv | 52 + .../fuse_ctrl_rst_pkg_hdl.vinfo | 2 + .../fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F | 10 + .../src/fuse_ctrl_rst2reg_adapter.svh | 112 ++ .../src/fuse_ctrl_rst_agent.svh | 67 + .../src/fuse_ctrl_rst_configuration.svh | 193 ++ .../src/fuse_ctrl_rst_driver.svh | 105 + .../src/fuse_ctrl_rst_driver_bfm.sv | 292 +++ .../fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv | 78 + ...fuse_ctrl_rst_infact_coverage_strategy.csv | 6 + .../src/fuse_ctrl_rst_macros.svh | 135 ++ .../src/fuse_ctrl_rst_monitor.svh | 101 + .../src/fuse_ctrl_rst_monitor_bfm.sv | 188 ++ .../src/fuse_ctrl_rst_random_sequence.svh | 67 + .../src/fuse_ctrl_rst_responder_sequence.svh | 63 + .../src/fuse_ctrl_rst_sequence_base.svh | 110 + .../src/fuse_ctrl_rst_transaction.svh | 197 ++ .../fuse_ctrl_rst_transaction_coverage.svh | 85 + .../src/fuse_ctrl_rst_typedefs.svh | 34 + .../src/fuse_ctrl_rst_typedefs_hdl.svh | 35 + .../yaml/fuse_ctrl_rst_interface.yaml | 29 + .../fuse_ctrl_secreg_axi_read_if_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_secreg_axi_read_if_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_secreg_axi_read_if.compile | 3 + .../fuse_ctrl_secreg_axi_read_if_bfm.vinfo | 6 + ...use_ctrl_secreg_axi_read_if_common.compile | 7 + ...use_ctrl_secreg_axi_read_if_filelist_hdl.f | 1 + ...use_ctrl_secreg_axi_read_if_filelist_hvl.f | 1 + ...se_ctrl_secreg_axi_read_if_filelist_xrtl.f | 3 + .../fuse_ctrl_secreg_axi_read_if_hdl.compile | 9 + .../fuse_ctrl_secreg_axi_read_if_hvl.compile | 7 + .../fuse_ctrl_secreg_axi_read_if_pkg.sv | 91 + .../fuse_ctrl_secreg_axi_read_if_pkg.vinfo | 4 + .../fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv | 52 + ...fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_secreg_axi_read_if_pkg_sve.F | 10 + ...se_ctrl_secreg_axi_read_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_secreg_axi_read_if_agent.svh | 109 + ..._ctrl_secreg_axi_read_if_configuration.svh | 241 +++ .../fuse_ctrl_secreg_axi_read_if_driver.svh | 141 ++ ...fuse_ctrl_secreg_axi_read_if_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_secreg_axi_read_if_if.sv | 124 ++ ...g_axi_read_if_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_secreg_axi_read_if_macros.svh | 207 ++ .../fuse_ctrl_secreg_axi_read_if_monitor.svh | 131 ++ ...use_ctrl_secreg_axi_read_if_monitor_bfm.sv | 232 +++ ...trl_secreg_axi_read_if_random_sequence.svh | 91 + ..._secreg_axi_read_if_responder_sequence.svh | 87 + ..._ctrl_secreg_axi_read_if_sequence_base.svh | 146 ++ ...se_ctrl_secreg_axi_read_if_transaction.svh | 243 +++ ...ecreg_axi_read_if_transaction_coverage.svh | 110 + .../fuse_ctrl_secreg_axi_read_if_typedefs.svh | 34 + ...e_ctrl_secreg_axi_read_if_typedefs_hdl.svh | 35 + ...use_ctrl_secreg_axi_read_if_interface.yaml | 121 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_secreg_axi_read_in_if.compile | 3 + .../fuse_ctrl_secreg_axi_read_in_if_bfm.vinfo | 6 + ..._ctrl_secreg_axi_read_in_if_common.compile | 7 + ..._ctrl_secreg_axi_read_in_if_filelist_hdl.f | 1 + ..._ctrl_secreg_axi_read_in_if_filelist_hvl.f | 1 + ...ctrl_secreg_axi_read_in_if_filelist_xrtl.f | 3 + ...use_ctrl_secreg_axi_read_in_if_hdl.compile | 9 + ...use_ctrl_secreg_axi_read_in_if_hvl.compile | 7 + .../fuse_ctrl_secreg_axi_read_in_if_pkg.sv | 91 + .../fuse_ctrl_secreg_axi_read_in_if_pkg.vinfo | 4 + ...fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv | 52 + ...e_ctrl_secreg_axi_read_in_if_pkg_hdl.vinfo | 2 + .../fuse_ctrl_secreg_axi_read_in_if_pkg_sve.F | 10 + ...ctrl_secreg_axi_read_in_if2reg_adapter.svh | 142 ++ .../fuse_ctrl_secreg_axi_read_in_if_agent.svh | 109 + ...rl_secreg_axi_read_in_if_configuration.svh | 241 +++ ...fuse_ctrl_secreg_axi_read_in_if_driver.svh | 141 ++ ...e_ctrl_secreg_axi_read_in_if_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_secreg_axi_read_in_if_if.sv | 124 ++ ...xi_read_in_if_infact_coverage_strategy.csv | 6 + ...fuse_ctrl_secreg_axi_read_in_if_macros.svh | 207 ++ ...use_ctrl_secreg_axi_read_in_if_monitor.svh | 131 ++ ..._ctrl_secreg_axi_read_in_if_monitor_bfm.sv | 232 +++ ..._secreg_axi_read_in_if_random_sequence.svh | 91 + ...creg_axi_read_in_if_responder_sequence.svh | 87 + ...rl_secreg_axi_read_in_if_sequence_base.svh | 146 ++ ...ctrl_secreg_axi_read_in_if_transaction.svh | 243 +++ ...eg_axi_read_in_if_transaction_coverage.svh | 110 + ...se_ctrl_secreg_axi_read_in_if_typedefs.svh | 34 + ...trl_secreg_axi_read_in_if_typedefs_hdl.svh | 35 + ..._ctrl_secreg_axi_read_in_if_interface.yaml | 121 ++ .../fuse_ctrl_secreg_axi_read_in_pkg/.project | 30 + .../.svproject | 16 + .../fuse_ctrl_secreg_axi_read_in_pkg/Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_secreg_axi_read_in.compile | 3 + .../fuse_ctrl_secreg_axi_read_in_bfm.vinfo | 6 + ...use_ctrl_secreg_axi_read_in_common.compile | 7 + ...use_ctrl_secreg_axi_read_in_filelist_hdl.f | 1 + ...use_ctrl_secreg_axi_read_in_filelist_hvl.f | 1 + ...se_ctrl_secreg_axi_read_in_filelist_xrtl.f | 3 + .../fuse_ctrl_secreg_axi_read_in_hdl.compile | 9 + .../fuse_ctrl_secreg_axi_read_in_hvl.compile | 7 + .../fuse_ctrl_secreg_axi_read_in_pkg.sv | 91 + .../fuse_ctrl_secreg_axi_read_in_pkg.vinfo | 4 + .../fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv | 52 + ...fuse_ctrl_secreg_axi_read_in_pkg_hdl.vinfo | 2 + .../fuse_ctrl_secreg_axi_read_in_pkg_sve.F | 10 + ...se_ctrl_secreg_axi_read_in2reg_adapter.svh | 142 ++ .../fuse_ctrl_secreg_axi_read_in_agent.svh | 109 + ..._ctrl_secreg_axi_read_in_configuration.svh | 241 +++ .../fuse_ctrl_secreg_axi_read_in_driver.svh | 141 ++ ...fuse_ctrl_secreg_axi_read_in_driver_bfm.sv | 385 ++++ .../src/fuse_ctrl_secreg_axi_read_in_if.sv | 124 ++ ...g_axi_read_in_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_secreg_axi_read_in_macros.svh | 207 ++ .../fuse_ctrl_secreg_axi_read_in_monitor.svh | 131 ++ ...use_ctrl_secreg_axi_read_in_monitor_bfm.sv | 232 +++ ...trl_secreg_axi_read_in_random_sequence.svh | 91 + ..._secreg_axi_read_in_responder_sequence.svh | 87 + ..._ctrl_secreg_axi_read_in_sequence_base.svh | 146 ++ ...se_ctrl_secreg_axi_read_in_transaction.svh | 243 +++ ...ecreg_axi_read_in_transaction_coverage.svh | 110 + .../fuse_ctrl_secreg_axi_read_in_typedefs.svh | 34 + ...e_ctrl_secreg_axi_read_in_typedefs_hdl.svh | 35 + ...use_ctrl_secreg_axi_read_in_interface.yaml | 121 ++ .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_secreg_axi_read_out_if.compile | 3 + ...fuse_ctrl_secreg_axi_read_out_if_bfm.vinfo | 6 + ...ctrl_secreg_axi_read_out_if_common.compile | 7 + ...ctrl_secreg_axi_read_out_if_filelist_hdl.f | 1 + ...ctrl_secreg_axi_read_out_if_filelist_hvl.f | 1 + ...trl_secreg_axi_read_out_if_filelist_xrtl.f | 3 + ...se_ctrl_secreg_axi_read_out_if_hdl.compile | 9 + ...se_ctrl_secreg_axi_read_out_if_hvl.compile | 7 + .../fuse_ctrl_secreg_axi_read_out_if_pkg.sv | 91 + ...fuse_ctrl_secreg_axi_read_out_if_pkg.vinfo | 4 + ...use_ctrl_secreg_axi_read_out_if_pkg_hdl.sv | 52 + ..._ctrl_secreg_axi_read_out_if_pkg_hdl.vinfo | 2 + ...fuse_ctrl_secreg_axi_read_out_if_pkg_sve.F | 10 + ...trl_secreg_axi_read_out_if2reg_adapter.svh | 142 ++ ...fuse_ctrl_secreg_axi_read_out_if_agent.svh | 109 + ...l_secreg_axi_read_out_if_configuration.svh | 241 +++ ...use_ctrl_secreg_axi_read_out_if_driver.svh | 141 ++ ..._ctrl_secreg_axi_read_out_if_driver_bfm.sv | 352 ++++ .../fuse_ctrl_secreg_axi_read_out_if_if.sv | 109 + ...i_read_out_if_infact_coverage_strategy.csv | 6 + ...use_ctrl_secreg_axi_read_out_if_macros.svh | 180 ++ ...se_ctrl_secreg_axi_read_out_if_monitor.svh | 131 ++ ...ctrl_secreg_axi_read_out_if_monitor_bfm.sv | 220 ++ ...secreg_axi_read_out_if_random_sequence.svh | 91 + ...reg_axi_read_out_if_responder_sequence.svh | 87 + ...l_secreg_axi_read_out_if_sequence_base.svh | 146 ++ ...trl_secreg_axi_read_out_if_transaction.svh | 240 +++ ...g_axi_read_out_if_transaction_coverage.svh | 107 + ...e_ctrl_secreg_axi_read_out_if_typedefs.svh | 34 + ...rl_secreg_axi_read_out_if_typedefs_hdl.svh | 35 + ...ctrl_secreg_axi_read_out_if_interface.yaml | 91 + .../.project | 30 + .../.svproject | 16 + .../Makefile | 66 + .../compile.do | 14 + .../fuse_ctrl_secreg_axi_read_out.compile | 3 + .../fuse_ctrl_secreg_axi_read_out_bfm.vinfo | 6 + ...se_ctrl_secreg_axi_read_out_common.compile | 7 + ...se_ctrl_secreg_axi_read_out_filelist_hdl.f | 1 + ...se_ctrl_secreg_axi_read_out_filelist_hvl.f | 1 + ...e_ctrl_secreg_axi_read_out_filelist_xrtl.f | 3 + .../fuse_ctrl_secreg_axi_read_out_hdl.compile | 9 + .../fuse_ctrl_secreg_axi_read_out_hvl.compile | 7 + .../fuse_ctrl_secreg_axi_read_out_pkg.sv | 91 + .../fuse_ctrl_secreg_axi_read_out_pkg.vinfo | 4 + .../fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv | 52 + ...use_ctrl_secreg_axi_read_out_pkg_hdl.vinfo | 2 + .../fuse_ctrl_secreg_axi_read_out_pkg_sve.F | 10 + ...e_ctrl_secreg_axi_read_out2reg_adapter.svh | 142 ++ .../fuse_ctrl_secreg_axi_read_out_agent.svh | 109 + ...ctrl_secreg_axi_read_out_configuration.svh | 241 +++ .../fuse_ctrl_secreg_axi_read_out_driver.svh | 141 ++ ...use_ctrl_secreg_axi_read_out_driver_bfm.sv | 352 ++++ .../src/fuse_ctrl_secreg_axi_read_out_if.sv | 109 + ..._axi_read_out_infact_coverage_strategy.csv | 6 + .../fuse_ctrl_secreg_axi_read_out_macros.svh | 180 ++ .../fuse_ctrl_secreg_axi_read_out_monitor.svh | 131 ++ ...se_ctrl_secreg_axi_read_out_monitor_bfm.sv | 220 ++ ...rl_secreg_axi_read_out_random_sequence.svh | 91 + ...secreg_axi_read_out_responder_sequence.svh | 87 + ...ctrl_secreg_axi_read_out_sequence_base.svh | 146 ++ ...e_ctrl_secreg_axi_read_out_transaction.svh | 240 +++ ...creg_axi_read_out_transaction_coverage.svh | 107 + ...fuse_ctrl_secreg_axi_read_out_typedefs.svh | 34 + ..._ctrl_secreg_axi_read_out_typedefs_hdl.svh | 35 + ...se_ctrl_secreg_axi_read_out_interface.yaml | 91 + .../prim_axi_read_if_pkg/.project | 30 + .../prim_axi_read_if_pkg/.svproject | 16 + .../prim_axi_read_if_pkg/Makefile | 66 + .../prim_axi_read_if_pkg/compile.do | 14 + .../prim_axi_read_if.compile | 3 + .../prim_axi_read_if_bfm.vinfo | 6 + .../prim_axi_read_if_common.compile | 7 + .../prim_axi_read_if_filelist_hdl.f | 1 + .../prim_axi_read_if_filelist_hvl.f | 1 + .../prim_axi_read_if_filelist_xrtl.f | 3 + .../prim_axi_read_if_hdl.compile | 9 + .../prim_axi_read_if_hvl.compile | 7 + .../prim_axi_read_if_pkg.sv | 91 + .../prim_axi_read_if_pkg.vinfo | 4 + .../prim_axi_read_if_pkg_hdl.sv | 52 + .../prim_axi_read_if_pkg_hdl.vinfo | 2 + .../prim_axi_read_if_pkg_sve.F | 10 + .../src/prim_axi_read_if2reg_adapter.svh | 142 ++ .../src/prim_axi_read_if_agent.svh | 109 + .../src/prim_axi_read_if_configuration.svh | 241 +++ .../src/prim_axi_read_if_driver.svh | 141 ++ .../src/prim_axi_read_if_driver_bfm.sv | 352 ++++ .../src/prim_axi_read_if_if.sv | 109 + ...m_axi_read_if_infact_coverage_strategy.csv | 6 + .../src/prim_axi_read_if_macros.svh | 180 ++ .../src/prim_axi_read_if_monitor.svh | 131 ++ .../src/prim_axi_read_if_monitor_bfm.sv | 220 ++ .../src/prim_axi_read_if_random_sequence.svh | 91 + .../prim_axi_read_if_responder_sequence.svh | 87 + .../src/prim_axi_read_if_sequence_base.svh | 146 ++ .../src/prim_axi_read_if_transaction.svh | 240 +++ .../prim_axi_read_if_transaction_coverage.svh | 107 + .../src/prim_axi_read_if_typedefs.svh | 34 + .../src/prim_axi_read_if_typedefs_hdl.svh | 35 + .../yaml/prim_axi_read_if_interface.yaml | 91 + .../prim_axi_read_out_if_pkg/.project | 30 + .../prim_axi_read_out_if_pkg/.svproject | 16 + .../prim_axi_read_out_if_pkg/Makefile | 66 + .../prim_axi_read_out_if_pkg/compile.do | 14 + .../prim_axi_read_out_if.compile | 3 + .../prim_axi_read_out_if_bfm.vinfo | 6 + .../prim_axi_read_out_if_common.compile | 7 + .../prim_axi_read_out_if_filelist_hdl.f | 1 + .../prim_axi_read_out_if_filelist_hvl.f | 1 + .../prim_axi_read_out_if_filelist_xrtl.f | 3 + .../prim_axi_read_out_if_hdl.compile | 9 + .../prim_axi_read_out_if_hvl.compile | 7 + .../prim_axi_read_out_if_pkg.sv | 91 + .../prim_axi_read_out_if_pkg.vinfo | 4 + .../prim_axi_read_out_if_pkg_hdl.sv | 52 + .../prim_axi_read_out_if_pkg_hdl.vinfo | 2 + .../prim_axi_read_out_if_pkg_sve.F | 10 + .../src/prim_axi_read_out_if2reg_adapter.svh | 142 ++ .../src/prim_axi_read_out_if_agent.svh | 109 + .../prim_axi_read_out_if_configuration.svh | 241 +++ .../src/prim_axi_read_out_if_driver.svh | 141 ++ .../src/prim_axi_read_out_if_driver_bfm.sv | 352 ++++ .../src/prim_axi_read_out_if_if.sv | 109 + ...i_read_out_if_infact_coverage_strategy.csv | 6 + .../src/prim_axi_read_out_if_macros.svh | 180 ++ .../src/prim_axi_read_out_if_monitor.svh | 131 ++ .../src/prim_axi_read_out_if_monitor_bfm.sv | 220 ++ .../prim_axi_read_out_if_random_sequence.svh | 91 + ...rim_axi_read_out_if_responder_sequence.svh | 87 + .../prim_axi_read_out_if_sequence_base.svh | 146 ++ .../src/prim_axi_read_out_if_transaction.svh | 240 +++ ...m_axi_read_out_if_transaction_coverage.svh | 107 + .../src/prim_axi_read_out_if_typedefs.svh | 34 + .../src/prim_axi_read_out_if_typedefs_hdl.svh | 35 + .../yaml/prim_axi_read_out_if_interface.yaml | 91 + .../prim_axi_write_if_pkg/.project | 30 + .../prim_axi_write_if_pkg/.svproject | 16 + .../prim_axi_write_if_pkg/Makefile | 66 + .../prim_axi_write_if_pkg/compile.do | 14 + .../prim_axi_write_if.compile | 3 + .../prim_axi_write_if_bfm.vinfo | 6 + .../prim_axi_write_if_common.compile | 7 + .../prim_axi_write_if_filelist_hdl.f | 1 + .../prim_axi_write_if_filelist_hvl.f | 1 + .../prim_axi_write_if_filelist_xrtl.f | 3 + .../prim_axi_write_if_hdl.compile | 9 + .../prim_axi_write_if_hvl.compile | 7 + .../prim_axi_write_if_pkg.sv | 91 + .../prim_axi_write_if_pkg.vinfo | 4 + .../prim_axi_write_if_pkg_hdl.sv | 52 + .../prim_axi_write_if_pkg_hdl.vinfo | 2 + .../prim_axi_write_if_pkg_sve.F | 10 + .../src/prim_axi_write_if2reg_adapter.svh | 142 ++ .../src/prim_axi_write_if_agent.svh | 109 + .../src/prim_axi_write_if_configuration.svh | 241 +++ .../src/prim_axi_write_if_driver.svh | 141 ++ .../src/prim_axi_write_if_driver_bfm.sv | 341 ++++ .../src/prim_axi_write_if_if.sv | 104 + ..._axi_write_if_infact_coverage_strategy.csv | 6 + .../src/prim_axi_write_if_macros.svh | 171 ++ .../src/prim_axi_write_if_monitor.svh | 131 ++ .../src/prim_axi_write_if_monitor_bfm.sv | 216 ++ .../src/prim_axi_write_if_random_sequence.svh | 91 + .../prim_axi_write_if_responder_sequence.svh | 87 + .../src/prim_axi_write_if_sequence_base.svh | 146 ++ .../src/prim_axi_write_if_transaction.svh | 236 +++ ...prim_axi_write_if_transaction_coverage.svh | 106 + .../src/prim_axi_write_if_typedefs.svh | 34 + .../src/prim_axi_write_if_typedefs_hdl.svh | 35 + .../yaml/prim_axi_write_if_interface.yaml | 81 + .../prim_axi_write_out_if_pkg/.project | 30 + .../prim_axi_write_out_if_pkg/.svproject | 16 + .../prim_axi_write_out_if_pkg/Makefile | 66 + .../prim_axi_write_out_if_pkg/compile.do | 14 + .../prim_axi_write_out_if.compile | 3 + .../prim_axi_write_out_if_bfm.vinfo | 6 + .../prim_axi_write_out_if_common.compile | 7 + .../prim_axi_write_out_if_filelist_hdl.f | 1 + .../prim_axi_write_out_if_filelist_hvl.f | 1 + .../prim_axi_write_out_if_filelist_xrtl.f | 3 + .../prim_axi_write_out_if_hdl.compile | 9 + .../prim_axi_write_out_if_hvl.compile | 7 + .../prim_axi_write_out_if_pkg.sv | 91 + .../prim_axi_write_out_if_pkg.vinfo | 4 + .../prim_axi_write_out_if_pkg_hdl.sv | 52 + .../prim_axi_write_out_if_pkg_hdl.vinfo | 2 + .../prim_axi_write_out_if_pkg_sve.F | 10 + .../src/prim_axi_write_out_if2reg_adapter.svh | 142 ++ .../src/prim_axi_write_out_if_agent.svh | 109 + .../prim_axi_write_out_if_configuration.svh | 241 +++ .../src/prim_axi_write_out_if_driver.svh | 141 ++ .../src/prim_axi_write_out_if_driver_bfm.sv | 341 ++++ .../src/prim_axi_write_out_if_if.sv | 104 + ..._write_out_if_infact_coverage_strategy.csv | 6 + .../src/prim_axi_write_out_if_macros.svh | 171 ++ .../src/prim_axi_write_out_if_monitor.svh | 131 ++ .../src/prim_axi_write_out_if_monitor_bfm.sv | 216 ++ .../prim_axi_write_out_if_random_sequence.svh | 91 + ...im_axi_write_out_if_responder_sequence.svh | 87 + .../prim_axi_write_out_if_sequence_base.svh | 146 ++ .../src/prim_axi_write_out_if_transaction.svh | 236 +++ ..._axi_write_out_if_transaction_coverage.svh | 106 + .../src/prim_axi_write_out_if_typedefs.svh | 34 + .../prim_axi_write_out_if_typedefs_hdl.svh | 35 + .../yaml/prim_axi_write_out_if_interface.yaml | 81 + .../secreg_axi_read_if_pkg/.project | 30 + .../secreg_axi_read_if_pkg/.svproject | 16 + .../secreg_axi_read_if_pkg/Makefile | 66 + .../secreg_axi_read_if_pkg/compile.do | 14 + .../secreg_axi_read_if.compile | 3 + .../secreg_axi_read_if_bfm.vinfo | 6 + .../secreg_axi_read_if_common.compile | 7 + .../secreg_axi_read_if_filelist_hdl.f | 1 + .../secreg_axi_read_if_filelist_hvl.f | 1 + .../secreg_axi_read_if_filelist_xrtl.f | 3 + .../secreg_axi_read_if_hdl.compile | 9 + .../secreg_axi_read_if_hvl.compile | 7 + .../secreg_axi_read_if_pkg.sv | 91 + .../secreg_axi_read_if_pkg.vinfo | 4 + .../secreg_axi_read_if_pkg_hdl.sv | 52 + .../secreg_axi_read_if_pkg_hdl.vinfo | 2 + .../secreg_axi_read_if_pkg_sve.F | 10 + .../src/secreg_axi_read_if2reg_adapter.svh | 142 ++ .../src/secreg_axi_read_if_agent.svh | 109 + .../src/secreg_axi_read_if_configuration.svh | 241 +++ .../src/secreg_axi_read_if_driver.svh | 141 ++ .../src/secreg_axi_read_if_driver_bfm.sv | 352 ++++ .../src/secreg_axi_read_if_if.sv | 109 + ...g_axi_read_if_infact_coverage_strategy.csv | 6 + .../src/secreg_axi_read_if_macros.svh | 180 ++ .../src/secreg_axi_read_if_monitor.svh | 131 ++ .../src/secreg_axi_read_if_monitor_bfm.sv | 220 ++ .../secreg_axi_read_if_random_sequence.svh | 91 + .../secreg_axi_read_if_responder_sequence.svh | 87 + .../src/secreg_axi_read_if_sequence_base.svh | 146 ++ .../src/secreg_axi_read_if_transaction.svh | 240 +++ ...ecreg_axi_read_if_transaction_coverage.svh | 107 + .../src/secreg_axi_read_if_typedefs.svh | 34 + .../src/secreg_axi_read_if_typedefs_hdl.svh | 35 + .../yaml/secreg_axi_read_if_interface.yaml | 91 + .../secreg_axi_read_out_if_pkg/.project | 30 + .../secreg_axi_read_out_if_pkg/.svproject | 16 + .../secreg_axi_read_out_if_pkg/Makefile | 66 + .../secreg_axi_read_out_if_pkg/compile.do | 14 + .../secreg_axi_read_out_if.compile | 3 + .../secreg_axi_read_out_if_bfm.vinfo | 6 + .../secreg_axi_read_out_if_common.compile | 7 + .../secreg_axi_read_out_if_filelist_hdl.f | 1 + .../secreg_axi_read_out_if_filelist_hvl.f | 1 + .../secreg_axi_read_out_if_filelist_xrtl.f | 3 + .../secreg_axi_read_out_if_hdl.compile | 9 + .../secreg_axi_read_out_if_hvl.compile | 7 + .../secreg_axi_read_out_if_pkg.sv | 91 + .../secreg_axi_read_out_if_pkg.vinfo | 4 + .../secreg_axi_read_out_if_pkg_hdl.sv | 52 + .../secreg_axi_read_out_if_pkg_hdl.vinfo | 2 + .../secreg_axi_read_out_if_pkg_sve.F | 10 + .../secreg_axi_read_out_if2reg_adapter.svh | 142 ++ .../src/secreg_axi_read_out_if_agent.svh | 109 + .../secreg_axi_read_out_if_configuration.svh | 241 +++ .../src/secreg_axi_read_out_if_driver.svh | 141 ++ .../src/secreg_axi_read_out_if_driver_bfm.sv | 352 ++++ .../src/secreg_axi_read_out_if_if.sv | 109 + ...i_read_out_if_infact_coverage_strategy.csv | 6 + .../src/secreg_axi_read_out_if_macros.svh | 180 ++ .../src/secreg_axi_read_out_if_monitor.svh | 131 ++ .../src/secreg_axi_read_out_if_monitor_bfm.sv | 220 ++ ...secreg_axi_read_out_if_random_sequence.svh | 91 + ...reg_axi_read_out_if_responder_sequence.svh | 87 + .../secreg_axi_read_out_if_sequence_base.svh | 146 ++ .../secreg_axi_read_out_if_transaction.svh | 240 +++ ...g_axi_read_out_if_transaction_coverage.svh | 107 + .../src/secreg_axi_read_out_if_typedefs.svh | 34 + .../secreg_axi_read_out_if_typedefs_hdl.svh | 35 + .../secreg_axi_read_out_if_interface.yaml | 91 + src/jtag/config/compile.yml | 11 + src/jtag/rtl/jtag_pkg.sv | 24 + src/kmac/config/compile.yml | 1 + src/kmac/rtl/kmac_pkg.sv | 429 ++++ src/lc_ctrl/config/compile.yml | 28 + src/lc_ctrl/rtl/lc_ctrl.sv | 829 ++++++++ src/lc_ctrl/rtl/lc_ctrl_fsm.sv | 884 ++++++++ src/lc_ctrl/rtl/lc_ctrl_kmac_if.sv | 213 ++ src/lc_ctrl/rtl/lc_ctrl_pkg.sv | 18 +- src/lc_ctrl/rtl/lc_ctrl_reg_pkg.sv | 223 ++- src/lc_ctrl/rtl/lc_ctrl_reg_top.sv | 1527 ++++++++++++++ src/lc_ctrl/rtl/lc_ctrl_signal_decode.sv | 402 ++++ src/lc_ctrl/rtl/lc_ctrl_state_decode.sv | 167 ++ src/lc_ctrl/rtl/lc_ctrl_state_transition.sv | 207 ++ src/lc_ctrl/rtl/lc_ctrl_top.sv | 241 +++ 8266 files changed, 646572 insertions(+), 104 deletions(-) create mode 100644 src/alert_handler/config/compile.yml create mode 100644 src/alert_handler/rtl/alert_handler_reg_pkg.sv create mode 100644 src/caliptra_prim/rtl/caliptra_prim_esc_pkg.sv create mode 100644 src/dm/config/compile.yml create mode 100644 src/dm/rtl/dm_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/fuse_ctrl_bench.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/fuse_ctrl_environment.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/fuse_ctrl_global.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/fuse_ctrl_in_interfaces.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/fuse_ctrl_out_interfaces.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/fuse_ctrl_util_comp_predictor.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/fuse_ctrl_util_comp_scoreboard.yaml create mode 100755 src/fuse_ctrl/uvmf_fuse_ctrl/run_yaml_uvmf_scripts.sh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/docs/interfaces.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/fuse_ctrl_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/rtl/dut.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.v create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/rtl/vhdl/vhdl_dut.vhd create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/bcr_testlist create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/bcr_testlist.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/hvl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/run.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/tbx.config create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/testlist create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/testlist.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/top.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/veloce.config create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/viswave.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/wave.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/xwaves.sigs create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/sequences/src/example_derived_test_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/sequences/src/fuse_ctrl_bench_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/sequences/src/register_test_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/hdl_top.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/hdl_top.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/hdl_top.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/hvl_top.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/hvl_top.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/hvl_top.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/top_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/top_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/tests/src/example_derived_test.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/tests/src/register_test.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/tests/src/test_top.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/yaml/fuse_ctrl_bench.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_environment.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_predictor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_scoreboard.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_environment.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_predictor.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_scoreboard.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/yaml/core_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/yaml/core_axi_read_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/yaml/core_axi_write_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/yaml/core_axi_write_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/yaml/fuse_core_core_axi_write_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/yaml/fuse_ctrl_core_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/yaml/fuse_ctrl_core_axi_read_in_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/yaml/fuse_ctrl_core_axi_read_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/yaml/fuse_ctrl_core_axi_read_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/yaml/fuse_ctrl_core_axi_read_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/yaml/fuse_ctrl_core_axi_write_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/yaml/fuse_ctrl_core_axi_write_in_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/yaml/fuse_ctrl_core_axi_write_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/yaml/fuse_ctrl_core_axi_write_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/yaml/fuse_ctrl_core_axi_write_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/yaml/fuse_ctrl_in_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/yaml/fuse_ctrl_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/yaml/fuse_ctrl_lc_otp_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/yaml/fuse_ctrl_lc_otp_in_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/yaml/fuse_ctrl_lc_otp_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/yaml/fuse_ctrl_lc_otp_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/yaml/fuse_ctrl_lc_otp_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/yaml/fuse_ctrl_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/yaml/fuse_ctrl_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/yaml/fuse_ctrl_prim_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/yaml/fuse_ctrl_prim_axi_read_in_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/yaml/fuse_ctrl_prim_axi_read_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/yaml/fuse_ctrl_prim_axi_read_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/yaml/fuse_ctrl_prim_axi_read_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/yaml/fuse_ctrl_prim_axi_write_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/yaml/fuse_ctrl_prim_axi_write_in_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/yaml/fuse_ctrl_prim_axi_write_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/yaml/fuse_ctrl_prim_axi_write_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/yaml/fuse_ctrl_prim_axi_write_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/yaml/fuse_ctrl_pwr_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/yaml/fuse_ctrl_pwr_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/yaml/fuse_ctrl_rst_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/yaml/fuse_ctrl_rst_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/yaml/fuse_ctrl_rst_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/yaml/fuse_ctrl_secreg_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/yaml/fuse_ctrl_secreg_axi_read_in_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/yaml/fuse_ctrl_secreg_axi_read_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/yaml/fuse_ctrl_secreg_axi_read_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/yaml/fuse_ctrl_secreg_axi_read_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/yaml/prim_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/yaml/prim_axi_read_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/yaml/prim_axi_write_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/yaml/prim_axi_write_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/yaml/secreg_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/yaml/secreg_axi_read_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/docs/interfaces.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/fuse_ctrl_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/rtl/dut.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.v create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/rtl/vhdl/vhdl_dut.vhd create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/bcr_testlist create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/bcr_testlist.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/hvl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/run.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/tbx.config create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/testlist create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/testlist.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/top.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/veloce.config create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/viswave.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/wave.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/xwaves.sigs create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/sequences/src/example_derived_test_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/sequences/src/fuse_ctrl_bench_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/sequences/src/register_test_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/hdl_top.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/hdl_top.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/hdl_top.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/hvl_top.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/hvl_top.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/hvl_top.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/top_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/top_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/tests/src/example_derived_test.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/tests/src/register_test.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/tests/src/test_top.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/yaml/fuse_ctrl_bench.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_environment.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_predictor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_scoreboard.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_environment.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_predictor.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_scoreboard.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/yaml/core_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/yaml/core_axi_write_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/yaml/fuse_ctrl_core_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/yaml/fuse_ctrl_core_axi_write_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/yaml/fuse_ctrl_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/yaml/fuse_ctrl_lc_otp_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/yaml/fuse_ctrl_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/yaml/fuse_ctrl_prim_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/yaml/fuse_ctrl_prim_axi_write_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/yaml/fuse_ctrl_rst_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/yaml/fuse_ctrl_secreg_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/yaml/prim_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/yaml/prim_axi_write_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/yaml/secreg_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/docs/interfaces.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/fuse_ctrl_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/rtl/dut.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.v create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/rtl/vhdl/vhdl_dut.vhd create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/bcr_testlist create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/bcr_testlist.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/hvl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/run.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/tbx.config create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/testlist create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/testlist.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/top.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/veloce.config create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/viswave.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/wave.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/xwaves.sigs create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/sequences/src/example_derived_test_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/sequences/src/fuse_ctrl_bench_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/sequences/src/register_test_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/hdl_top.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/hdl_top.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/hdl_top.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/hvl_top.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/hvl_top.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/hvl_top.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/top_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/top_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/tests/src/example_derived_test.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/tests/src/register_test.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/tests/src/test_top.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/yaml/fuse_ctrl_bench.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_environment.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_predictor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_scoreboard.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_environment.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_predictor.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_scoreboard.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/yaml/core_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/yaml/core_axi_write_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/yaml/fuse_ctrl_core_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/yaml/fuse_ctrl_core_axi_write_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/yaml/fuse_ctrl_in_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/yaml/fuse_ctrl_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/yaml/fuse_ctrl_lc_otp_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/yaml/fuse_ctrl_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/yaml/fuse_ctrl_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/yaml/fuse_ctrl_prim_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/yaml/fuse_ctrl_prim_axi_write_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/yaml/fuse_ctrl_rst_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/yaml/fuse_ctrl_secreg_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/yaml/prim_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/yaml/prim_axi_write_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/yaml/secreg_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/docs/interfaces.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/fuse_ctrl_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/rtl/dut.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.v create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/rtl/vhdl/vhdl_dut.vhd create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/bcr_testlist create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/bcr_testlist.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/hvl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/run.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/tbx.config create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/testlist create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/testlist.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/top.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/veloce.config create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/viswave.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/wave.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/xwaves.sigs create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/sequences/src/example_derived_test_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/sequences/src/fuse_ctrl_bench_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/sequences/src/fuse_ctrl_otf_reset_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/sequences/src/register_test_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/hdl_top.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/hdl_top.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/hdl_top.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/hvl_top.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/hvl_top.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/hvl_top.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/top_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/top_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/tests/src/example_derived_test.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/tests/src/register_test.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/tests/src/test_top.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/yaml/fuse_ctrl_bench.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_environment.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_predictor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_scoreboard.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_environment.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_predictor.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_scoreboard.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/yaml/core_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/yaml/core_axi_read_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/yaml/core_axi_write_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/yaml/core_axi_write_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/yaml/fuse_core_core_axi_write_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/yaml/fuse_ctrl_core_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/yaml/fuse_ctrl_core_axi_read_in_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/yaml/fuse_ctrl_core_axi_read_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/yaml/fuse_ctrl_core_axi_read_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/yaml/fuse_ctrl_core_axi_read_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/yaml/fuse_ctrl_core_axi_write_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/yaml/fuse_ctrl_core_axi_write_in_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/yaml/fuse_ctrl_core_axi_write_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/yaml/fuse_ctrl_core_axi_write_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/yaml/fuse_ctrl_core_axi_write_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/yaml/fuse_ctrl_in_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/yaml/fuse_ctrl_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/yaml/fuse_ctrl_lc_otp_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/yaml/fuse_ctrl_lc_otp_in_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/yaml/fuse_ctrl_lc_otp_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/yaml/fuse_ctrl_lc_otp_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/yaml/fuse_ctrl_lc_otp_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/yaml/fuse_ctrl_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/yaml/fuse_ctrl_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/yaml/fuse_ctrl_prim_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/yaml/fuse_ctrl_prim_axi_read_in_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/yaml/fuse_ctrl_prim_axi_read_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/yaml/fuse_ctrl_prim_axi_read_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/yaml/fuse_ctrl_prim_axi_read_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/yaml/fuse_ctrl_prim_axi_write_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/yaml/fuse_ctrl_prim_axi_write_in_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/yaml/fuse_ctrl_prim_axi_write_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/yaml/fuse_ctrl_prim_axi_write_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/yaml/fuse_ctrl_prim_axi_write_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/yaml/fuse_ctrl_rst_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/yaml/fuse_ctrl_secreg_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/yaml/fuse_ctrl_secreg_axi_read_in_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/yaml/fuse_ctrl_secreg_axi_read_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/yaml/fuse_ctrl_secreg_axi_read_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/yaml/fuse_ctrl_secreg_axi_read_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/yaml/prim_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/yaml/prim_axi_read_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/yaml/prim_axi_write_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/yaml/prim_axi_write_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/yaml/secreg_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/yaml/secreg_axi_read_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/docs/interfaces.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/fuse_ctrl_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/rtl/dut.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.v create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/rtl/vhdl/vhdl_dut.vhd create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/bcr_testlist create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/bcr_testlist.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/hvl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/run.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/tbx.config create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/testlist create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/testlist.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/top.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/veloce.config create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/viswave.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/wave.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/xwaves.sigs create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/sequences/src/example_derived_test_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/sequences/src/fuse_ctrl_bench_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/sequences/src/register_test_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/hdl_top.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/hdl_top.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/hdl_top.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/hvl_top.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/hvl_top.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/hvl_top.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/top_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/top_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/tests/src/example_derived_test.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/tests/src/register_test.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/tests/src/test_top.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/yaml/fuse_ctrl_bench.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_environment.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_predictor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_scoreboard.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_environment.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_predictor.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_scoreboard.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/yaml/core_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/yaml/core_axi_read_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/yaml/core_axi_write_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/yaml/core_axi_write_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/yaml/fuse_core_core_axi_write_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/yaml/fuse_ctrl_core_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/yaml/fuse_ctrl_core_axi_read_in_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/yaml/fuse_ctrl_core_axi_read_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/yaml/fuse_ctrl_core_axi_read_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/yaml/fuse_ctrl_core_axi_read_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/yaml/fuse_ctrl_core_axi_write_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/yaml/fuse_ctrl_core_axi_write_in_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/yaml/fuse_ctrl_core_axi_write_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/yaml/fuse_ctrl_core_axi_write_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/yaml/fuse_ctrl_core_axi_write_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/yaml/fuse_ctrl_in_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/yaml/fuse_ctrl_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/yaml/fuse_ctrl_lc_otp_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/yaml/fuse_ctrl_lc_otp_in_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/yaml/fuse_ctrl_lc_otp_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/yaml/fuse_ctrl_lc_otp_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/yaml/fuse_ctrl_lc_otp_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/yaml/fuse_ctrl_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/yaml/fuse_ctrl_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/yaml/fuse_ctrl_prim_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/yaml/fuse_ctrl_prim_axi_read_in_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/yaml/fuse_ctrl_prim_axi_read_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/yaml/fuse_ctrl_prim_axi_read_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/yaml/fuse_ctrl_prim_axi_read_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/yaml/fuse_ctrl_prim_axi_write_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/yaml/fuse_ctrl_prim_axi_write_in_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/yaml/fuse_ctrl_prim_axi_write_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/yaml/fuse_ctrl_prim_axi_write_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/yaml/fuse_ctrl_prim_axi_write_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/yaml/fuse_ctrl_pwr_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/yaml/fuse_ctrl_pwr_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/yaml/fuse_ctrl_rst_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/yaml/fuse_ctrl_secreg_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/yaml/fuse_ctrl_secreg_axi_read_in_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/yaml/fuse_ctrl_secreg_axi_read_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/yaml/fuse_ctrl_secreg_axi_read_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/yaml/fuse_ctrl_secreg_axi_read_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/yaml/prim_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/yaml/prim_axi_read_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/yaml/prim_axi_write_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/yaml/prim_axi_write_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/yaml/secreg_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/yaml/secreg_axi_read_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/docs/interfaces.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/fuse_ctrl_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/rtl/dut.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.v create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/rtl/vhdl/vhdl_dut.vhd create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/bcr_testlist create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/bcr_testlist.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/hvl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/run.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/tbx.config create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/testlist create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/testlist.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/top.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/veloce.config create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/viswave.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/wave.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/xwaves.sigs create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/sequences/src/example_derived_test_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/sequences/src/fuse_ctrl_bench_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/sequences/src/register_test_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/hdl_top.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/hdl_top.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/hdl_top.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/hvl_top.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/hvl_top.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/hvl_top.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/top_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/top_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/tests/src/example_derived_test.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/tests/src/register_test.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/tests/src/test_top.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/yaml/fuse_ctrl_bench.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_environment.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_predictor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_scoreboard.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_environment.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_predictor.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_scoreboard.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/yaml/core_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/yaml/core_axi_read_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/yaml/core_axi_write_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/yaml/core_axi_write_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/yaml/fuse_core_core_axi_write_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/yaml/fuse_ctrl_core_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/yaml/fuse_ctrl_core_axi_read_in_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/yaml/fuse_ctrl_core_axi_read_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/yaml/fuse_ctrl_core_axi_read_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/yaml/fuse_ctrl_core_axi_read_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/yaml/fuse_ctrl_core_axi_write_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/yaml/fuse_ctrl_core_axi_write_in_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/yaml/fuse_ctrl_core_axi_write_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/yaml/fuse_ctrl_core_axi_write_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/yaml/fuse_ctrl_core_axi_write_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/yaml/fuse_ctrl_in_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/yaml/fuse_ctrl_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/yaml/fuse_ctrl_lc_otp_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/yaml/fuse_ctrl_lc_otp_in_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/yaml/fuse_ctrl_lc_otp_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/yaml/fuse_ctrl_lc_otp_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/yaml/fuse_ctrl_lc_otp_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/yaml/fuse_ctrl_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/yaml/fuse_ctrl_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/yaml/fuse_ctrl_prim_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/yaml/fuse_ctrl_prim_axi_read_in_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/yaml/fuse_ctrl_prim_axi_read_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/yaml/fuse_ctrl_prim_axi_read_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/yaml/fuse_ctrl_prim_axi_read_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/yaml/fuse_ctrl_prim_axi_write_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/yaml/fuse_ctrl_prim_axi_write_in_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/yaml/fuse_ctrl_prim_axi_write_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/yaml/fuse_ctrl_prim_axi_write_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/yaml/fuse_ctrl_prim_axi_write_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/yaml/fuse_ctrl_pwr_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/yaml/fuse_ctrl_pwr_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/yaml/fuse_ctrl_rst_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/yaml/fuse_ctrl_rst_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/yaml/fuse_ctrl_rst_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/yaml/fuse_ctrl_secreg_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/yaml/fuse_ctrl_secreg_axi_read_in_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/yaml/fuse_ctrl_secreg_axi_read_in_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/yaml/fuse_ctrl_secreg_axi_read_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/yaml/fuse_ctrl_secreg_axi_read_out_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/yaml/prim_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/yaml/prim_axi_read_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/yaml/prim_axi_write_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/yaml/prim_axi_write_out_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/yaml/secreg_axi_read_if_interface.yaml create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.project create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.svproject create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/Makefile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/compile.do create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_bfm.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_common.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hdl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hvl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_xrtl.f create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hdl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hvl.compile create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.vinfo create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_sve.F create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if2reg_adapter.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_agent.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_configuration.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_if.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_infact_coverage_strategy.csv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_macros.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor_bfm.sv create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_random_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_responder_sequence.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_sequence_base.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction_coverage.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs_hdl.svh create mode 100644 src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/yaml/secreg_axi_read_out_if_interface.yaml create mode 100644 src/jtag/config/compile.yml create mode 100644 src/jtag/rtl/jtag_pkg.sv create mode 100644 src/kmac/rtl/kmac_pkg.sv create mode 100644 src/lc_ctrl/rtl/lc_ctrl.sv create mode 100644 src/lc_ctrl/rtl/lc_ctrl_fsm.sv create mode 100644 src/lc_ctrl/rtl/lc_ctrl_kmac_if.sv create mode 100644 src/lc_ctrl/rtl/lc_ctrl_reg_top.sv create mode 100644 src/lc_ctrl/rtl/lc_ctrl_signal_decode.sv create mode 100644 src/lc_ctrl/rtl/lc_ctrl_state_decode.sv create mode 100644 src/lc_ctrl/rtl/lc_ctrl_state_transition.sv create mode 100644 src/lc_ctrl/rtl/lc_ctrl_top.sv diff --git a/src/alert_handler/config/compile.yml b/src/alert_handler/config/compile.yml new file mode 100644 index 000000000..e5453fa83 --- /dev/null +++ b/src/alert_handler/config/compile.yml @@ -0,0 +1,12 @@ +--- +provides: [alert_pkg] +schema_version: 2.4.0 +targets: + rtl: + directories: [$COMPILE_ROOT/rtl] + files: + - $COMPILE_ROOT/rtl/alert_handler_reg_pkg.sv + tb: + directories: [$COMPILE_ROOT/rtl] + files: + - $COMPILE_ROOT/rtl/alert_handler_reg_pkg.sv diff --git a/src/alert_handler/rtl/alert_handler_reg_pkg.sv b/src/alert_handler/rtl/alert_handler_reg_pkg.sv new file mode 100644 index 000000000..9d8fb703a --- /dev/null +++ b/src/alert_handler/rtl/alert_handler_reg_pkg.sv @@ -0,0 +1,1781 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Register Package auto-generated by `reggen` containing data structure + +package alert_handler_reg_pkg; + + // Param list + parameter int NAlerts = 65; + parameter int NLpg = 24; + parameter int NLpgWidth = 5; + parameter logic [NAlerts-1:0][NLpgWidth-1:0] LpgMap = { + 5'd17, + 5'd17, + 5'd17, + 5'd17, + 5'd17, + 5'd17, + 5'd19, + 5'd19, + 5'd19, + 5'd19, + 5'd19, + 5'd19, + 5'd19, + 5'd19, + 5'd19, + 5'd19, + 5'd23, + 5'd23, + 5'd22, + 5'd22, + 5'd21, + 5'd20, + 5'd20, + 5'd19, + 5'd18, + 5'd17, + 5'd17, + 5'd17, + 5'd17, + 5'd17, + 5'd16, + 5'd12, + 5'd12, + 5'd14, + 5'd11, + 5'd13, + 5'd13, + 5'd12, + 5'd11, + 5'd11, + 5'd11, + 5'd11, + 5'd10, + 5'd9, + 5'd8, + 5'd7, + 5'd6, + 5'd6, + 5'd6, + 5'd6, + 5'd6, + 5'd6, + 5'd6, + 5'd6, + 5'd5, + 5'd0, + 5'd4, + 5'd3, + 5'd2, + 5'd1, + 5'd0, + 5'd0, + 5'd0, + 5'd0, + 5'd0 +}; + parameter int EscCntDw = 32; + parameter int AccuCntDw = 16; + parameter logic [NAlerts-1:0] AsyncOn = { + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1, + 1'b1 +}; + parameter int N_CLASSES = 4; + parameter int N_ESC_SEV = 4; + parameter int N_PHASES = 4; + parameter int N_LOC_ALERT = 7; + parameter int PING_CNT_DW = 16; + parameter int PHASE_DW = 2; + parameter int CLASS_DW = 2; + parameter int LOCAL_ALERT_ID_ALERT_PINGFAIL = 0; + parameter int LOCAL_ALERT_ID_ESC_PINGFAIL = 1; + parameter int LOCAL_ALERT_ID_ALERT_INTEGFAIL = 2; + parameter int LOCAL_ALERT_ID_ESC_INTEGFAIL = 3; + parameter int LOCAL_ALERT_ID_BUS_INTEGFAIL = 4; + parameter int LOCAL_ALERT_ID_SHADOW_REG_UPDATE_ERROR = 5; + parameter int LOCAL_ALERT_ID_SHADOW_REG_STORAGE_ERROR = 6; + parameter int LOCAL_ALERT_ID_LAST = 6; + + // Address widths within the block + parameter int BlockAw = 11; + + //////////////////////////// + // Typedefs for registers // + //////////////////////////// + + typedef struct packed { + struct packed { + logic q; + } classd; + struct packed { + logic q; + } classc; + struct packed { + logic q; + } classb; + struct packed { + logic q; + } classa; + } alert_handler_reg2hw_intr_state_reg_t; + + typedef struct packed { + struct packed { + logic q; + } classd; + struct packed { + logic q; + } classc; + struct packed { + logic q; + } classb; + struct packed { + logic q; + } classa; + } alert_handler_reg2hw_intr_enable_reg_t; + + typedef struct packed { + struct packed { + logic q; + logic qe; + } classd; + struct packed { + logic q; + logic qe; + } classc; + struct packed { + logic q; + logic qe; + } classb; + struct packed { + logic q; + logic qe; + } classa; + } alert_handler_reg2hw_intr_test_reg_t; + + typedef struct packed { + logic [15:0] q; + } alert_handler_reg2hw_ping_timeout_cyc_shadowed_reg_t; + + typedef struct packed { + logic q; + } alert_handler_reg2hw_ping_timer_en_shadowed_reg_t; + + typedef struct packed { + logic q; + } alert_handler_reg2hw_alert_regwen_mreg_t; + + typedef struct packed { + logic q; + } alert_handler_reg2hw_alert_en_shadowed_mreg_t; + + typedef struct packed { + logic [1:0] q; + } alert_handler_reg2hw_alert_class_shadowed_mreg_t; + + typedef struct packed { + logic q; + } alert_handler_reg2hw_alert_cause_mreg_t; + + typedef struct packed { + logic q; + } alert_handler_reg2hw_loc_alert_en_shadowed_mreg_t; + + typedef struct packed { + logic [1:0] q; + } alert_handler_reg2hw_loc_alert_class_shadowed_mreg_t; + + typedef struct packed { + logic q; + } alert_handler_reg2hw_loc_alert_cause_mreg_t; + + typedef struct packed { + struct packed { + logic [1:0] q; + } map_e3; + struct packed { + logic [1:0] q; + } map_e2; + struct packed { + logic [1:0] q; + } map_e1; + struct packed { + logic [1:0] q; + } map_e0; + struct packed { + logic q; + } en_e3; + struct packed { + logic q; + } en_e2; + struct packed { + logic q; + } en_e1; + struct packed { + logic q; + } en_e0; + struct packed { + logic q; + } lock; + struct packed { + logic q; + } en; + } alert_handler_reg2hw_classa_ctrl_shadowed_reg_t; + + typedef struct packed { + logic q; + logic qe; + } alert_handler_reg2hw_classa_clr_shadowed_reg_t; + + typedef struct packed { + logic [15:0] q; + } alert_handler_reg2hw_classa_accum_thresh_shadowed_reg_t; + + typedef struct packed { + logic [31:0] q; + } alert_handler_reg2hw_classa_timeout_cyc_shadowed_reg_t; + + typedef struct packed { + logic [1:0] q; + } alert_handler_reg2hw_classa_crashdump_trigger_shadowed_reg_t; + + typedef struct packed { + logic [31:0] q; + } alert_handler_reg2hw_classa_phase0_cyc_shadowed_reg_t; + + typedef struct packed { + logic [31:0] q; + } alert_handler_reg2hw_classa_phase1_cyc_shadowed_reg_t; + + typedef struct packed { + logic [31:0] q; + } alert_handler_reg2hw_classa_phase2_cyc_shadowed_reg_t; + + typedef struct packed { + logic [31:0] q; + } alert_handler_reg2hw_classa_phase3_cyc_shadowed_reg_t; + + typedef struct packed { + struct packed { + logic [1:0] q; + } map_e3; + struct packed { + logic [1:0] q; + } map_e2; + struct packed { + logic [1:0] q; + } map_e1; + struct packed { + logic [1:0] q; + } map_e0; + struct packed { + logic q; + } en_e3; + struct packed { + logic q; + } en_e2; + struct packed { + logic q; + } en_e1; + struct packed { + logic q; + } en_e0; + struct packed { + logic q; + } lock; + struct packed { + logic q; + } en; + } alert_handler_reg2hw_classb_ctrl_shadowed_reg_t; + + typedef struct packed { + logic q; + logic qe; + } alert_handler_reg2hw_classb_clr_shadowed_reg_t; + + typedef struct packed { + logic [15:0] q; + } alert_handler_reg2hw_classb_accum_thresh_shadowed_reg_t; + + typedef struct packed { + logic [31:0] q; + } alert_handler_reg2hw_classb_timeout_cyc_shadowed_reg_t; + + typedef struct packed { + logic [1:0] q; + } alert_handler_reg2hw_classb_crashdump_trigger_shadowed_reg_t; + + typedef struct packed { + logic [31:0] q; + } alert_handler_reg2hw_classb_phase0_cyc_shadowed_reg_t; + + typedef struct packed { + logic [31:0] q; + } alert_handler_reg2hw_classb_phase1_cyc_shadowed_reg_t; + + typedef struct packed { + logic [31:0] q; + } alert_handler_reg2hw_classb_phase2_cyc_shadowed_reg_t; + + typedef struct packed { + logic [31:0] q; + } alert_handler_reg2hw_classb_phase3_cyc_shadowed_reg_t; + + typedef struct packed { + struct packed { + logic [1:0] q; + } map_e3; + struct packed { + logic [1:0] q; + } map_e2; + struct packed { + logic [1:0] q; + } map_e1; + struct packed { + logic [1:0] q; + } map_e0; + struct packed { + logic q; + } en_e3; + struct packed { + logic q; + } en_e2; + struct packed { + logic q; + } en_e1; + struct packed { + logic q; + } en_e0; + struct packed { + logic q; + } lock; + struct packed { + logic q; + } en; + } alert_handler_reg2hw_classc_ctrl_shadowed_reg_t; + + typedef struct packed { + logic q; + logic qe; + } alert_handler_reg2hw_classc_clr_shadowed_reg_t; + + typedef struct packed { + logic [15:0] q; + } alert_handler_reg2hw_classc_accum_thresh_shadowed_reg_t; + + typedef struct packed { + logic [31:0] q; + } alert_handler_reg2hw_classc_timeout_cyc_shadowed_reg_t; + + typedef struct packed { + logic [1:0] q; + } alert_handler_reg2hw_classc_crashdump_trigger_shadowed_reg_t; + + typedef struct packed { + logic [31:0] q; + } alert_handler_reg2hw_classc_phase0_cyc_shadowed_reg_t; + + typedef struct packed { + logic [31:0] q; + } alert_handler_reg2hw_classc_phase1_cyc_shadowed_reg_t; + + typedef struct packed { + logic [31:0] q; + } alert_handler_reg2hw_classc_phase2_cyc_shadowed_reg_t; + + typedef struct packed { + logic [31:0] q; + } alert_handler_reg2hw_classc_phase3_cyc_shadowed_reg_t; + + typedef struct packed { + struct packed { + logic [1:0] q; + } map_e3; + struct packed { + logic [1:0] q; + } map_e2; + struct packed { + logic [1:0] q; + } map_e1; + struct packed { + logic [1:0] q; + } map_e0; + struct packed { + logic q; + } en_e3; + struct packed { + logic q; + } en_e2; + struct packed { + logic q; + } en_e1; + struct packed { + logic q; + } en_e0; + struct packed { + logic q; + } lock; + struct packed { + logic q; + } en; + } alert_handler_reg2hw_classd_ctrl_shadowed_reg_t; + + typedef struct packed { + logic q; + logic qe; + } alert_handler_reg2hw_classd_clr_shadowed_reg_t; + + typedef struct packed { + logic [15:0] q; + } alert_handler_reg2hw_classd_accum_thresh_shadowed_reg_t; + + typedef struct packed { + logic [31:0] q; + } alert_handler_reg2hw_classd_timeout_cyc_shadowed_reg_t; + + typedef struct packed { + logic [1:0] q; + } alert_handler_reg2hw_classd_crashdump_trigger_shadowed_reg_t; + + typedef struct packed { + logic [31:0] q; + } alert_handler_reg2hw_classd_phase0_cyc_shadowed_reg_t; + + typedef struct packed { + logic [31:0] q; + } alert_handler_reg2hw_classd_phase1_cyc_shadowed_reg_t; + + typedef struct packed { + logic [31:0] q; + } alert_handler_reg2hw_classd_phase2_cyc_shadowed_reg_t; + + typedef struct packed { + logic [31:0] q; + } alert_handler_reg2hw_classd_phase3_cyc_shadowed_reg_t; + + typedef struct packed { + struct packed { + logic d; + logic de; + } classa; + struct packed { + logic d; + logic de; + } classb; + struct packed { + logic d; + logic de; + } classc; + struct packed { + logic d; + logic de; + } classd; + } alert_handler_hw2reg_intr_state_reg_t; + + typedef struct packed { + logic d; + logic de; + } alert_handler_hw2reg_alert_cause_mreg_t; + + typedef struct packed { + logic d; + logic de; + } alert_handler_hw2reg_loc_alert_cause_mreg_t; + + typedef struct packed { + logic d; + logic de; + } alert_handler_hw2reg_classa_clr_regwen_reg_t; + + typedef struct packed { + logic [15:0] d; + } alert_handler_hw2reg_classa_accum_cnt_reg_t; + + typedef struct packed { + logic [31:0] d; + } alert_handler_hw2reg_classa_esc_cnt_reg_t; + + typedef struct packed { + logic [2:0] d; + } alert_handler_hw2reg_classa_state_reg_t; + + typedef struct packed { + logic d; + logic de; + } alert_handler_hw2reg_classb_clr_regwen_reg_t; + + typedef struct packed { + logic [15:0] d; + } alert_handler_hw2reg_classb_accum_cnt_reg_t; + + typedef struct packed { + logic [31:0] d; + } alert_handler_hw2reg_classb_esc_cnt_reg_t; + + typedef struct packed { + logic [2:0] d; + } alert_handler_hw2reg_classb_state_reg_t; + + typedef struct packed { + logic d; + logic de; + } alert_handler_hw2reg_classc_clr_regwen_reg_t; + + typedef struct packed { + logic [15:0] d; + } alert_handler_hw2reg_classc_accum_cnt_reg_t; + + typedef struct packed { + logic [31:0] d; + } alert_handler_hw2reg_classc_esc_cnt_reg_t; + + typedef struct packed { + logic [2:0] d; + } alert_handler_hw2reg_classc_state_reg_t; + + typedef struct packed { + logic d; + logic de; + } alert_handler_hw2reg_classd_clr_regwen_reg_t; + + typedef struct packed { + logic [15:0] d; + } alert_handler_hw2reg_classd_accum_cnt_reg_t; + + typedef struct packed { + logic [31:0] d; + } alert_handler_hw2reg_classd_esc_cnt_reg_t; + + typedef struct packed { + logic [2:0] d; + } alert_handler_hw2reg_classd_state_reg_t; + + // Register -> HW type + typedef struct packed { + alert_handler_reg2hw_intr_state_reg_t intr_state; // [1161:1158] + alert_handler_reg2hw_intr_enable_reg_t intr_enable; // [1157:1154] + alert_handler_reg2hw_intr_test_reg_t intr_test; // [1153:1146] + alert_handler_reg2hw_ping_timeout_cyc_shadowed_reg_t ping_timeout_cyc_shadowed; // [1145:1130] + alert_handler_reg2hw_ping_timer_en_shadowed_reg_t ping_timer_en_shadowed; // [1129:1129] + alert_handler_reg2hw_alert_regwen_mreg_t [64:0] alert_regwen; // [1128:1064] + alert_handler_reg2hw_alert_en_shadowed_mreg_t [64:0] alert_en_shadowed; // [1063:999] + alert_handler_reg2hw_alert_class_shadowed_mreg_t [64:0] alert_class_shadowed; // [998:869] + alert_handler_reg2hw_alert_cause_mreg_t [64:0] alert_cause; // [868:804] + alert_handler_reg2hw_loc_alert_en_shadowed_mreg_t [6:0] loc_alert_en_shadowed; // [803:797] + alert_handler_reg2hw_loc_alert_class_shadowed_mreg_t [6:0] + loc_alert_class_shadowed; // [796:783] + alert_handler_reg2hw_loc_alert_cause_mreg_t [6:0] loc_alert_cause; // [782:776] + alert_handler_reg2hw_classa_ctrl_shadowed_reg_t classa_ctrl_shadowed; // [775:762] + alert_handler_reg2hw_classa_clr_shadowed_reg_t classa_clr_shadowed; // [761:760] + alert_handler_reg2hw_classa_accum_thresh_shadowed_reg_t + classa_accum_thresh_shadowed; // [759:744] + alert_handler_reg2hw_classa_timeout_cyc_shadowed_reg_t classa_timeout_cyc_shadowed; // [743:712] + alert_handler_reg2hw_classa_crashdump_trigger_shadowed_reg_t + classa_crashdump_trigger_shadowed; // [711:710] + alert_handler_reg2hw_classa_phase0_cyc_shadowed_reg_t classa_phase0_cyc_shadowed; // [709:678] + alert_handler_reg2hw_classa_phase1_cyc_shadowed_reg_t classa_phase1_cyc_shadowed; // [677:646] + alert_handler_reg2hw_classa_phase2_cyc_shadowed_reg_t classa_phase2_cyc_shadowed; // [645:614] + alert_handler_reg2hw_classa_phase3_cyc_shadowed_reg_t classa_phase3_cyc_shadowed; // [613:582] + alert_handler_reg2hw_classb_ctrl_shadowed_reg_t classb_ctrl_shadowed; // [581:568] + alert_handler_reg2hw_classb_clr_shadowed_reg_t classb_clr_shadowed; // [567:566] + alert_handler_reg2hw_classb_accum_thresh_shadowed_reg_t + classb_accum_thresh_shadowed; // [565:550] + alert_handler_reg2hw_classb_timeout_cyc_shadowed_reg_t classb_timeout_cyc_shadowed; // [549:518] + alert_handler_reg2hw_classb_crashdump_trigger_shadowed_reg_t + classb_crashdump_trigger_shadowed; // [517:516] + alert_handler_reg2hw_classb_phase0_cyc_shadowed_reg_t classb_phase0_cyc_shadowed; // [515:484] + alert_handler_reg2hw_classb_phase1_cyc_shadowed_reg_t classb_phase1_cyc_shadowed; // [483:452] + alert_handler_reg2hw_classb_phase2_cyc_shadowed_reg_t classb_phase2_cyc_shadowed; // [451:420] + alert_handler_reg2hw_classb_phase3_cyc_shadowed_reg_t classb_phase3_cyc_shadowed; // [419:388] + alert_handler_reg2hw_classc_ctrl_shadowed_reg_t classc_ctrl_shadowed; // [387:374] + alert_handler_reg2hw_classc_clr_shadowed_reg_t classc_clr_shadowed; // [373:372] + alert_handler_reg2hw_classc_accum_thresh_shadowed_reg_t + classc_accum_thresh_shadowed; // [371:356] + alert_handler_reg2hw_classc_timeout_cyc_shadowed_reg_t classc_timeout_cyc_shadowed; // [355:324] + alert_handler_reg2hw_classc_crashdump_trigger_shadowed_reg_t + classc_crashdump_trigger_shadowed; // [323:322] + alert_handler_reg2hw_classc_phase0_cyc_shadowed_reg_t classc_phase0_cyc_shadowed; // [321:290] + alert_handler_reg2hw_classc_phase1_cyc_shadowed_reg_t classc_phase1_cyc_shadowed; // [289:258] + alert_handler_reg2hw_classc_phase2_cyc_shadowed_reg_t classc_phase2_cyc_shadowed; // [257:226] + alert_handler_reg2hw_classc_phase3_cyc_shadowed_reg_t classc_phase3_cyc_shadowed; // [225:194] + alert_handler_reg2hw_classd_ctrl_shadowed_reg_t classd_ctrl_shadowed; // [193:180] + alert_handler_reg2hw_classd_clr_shadowed_reg_t classd_clr_shadowed; // [179:178] + alert_handler_reg2hw_classd_accum_thresh_shadowed_reg_t + classd_accum_thresh_shadowed; // [177:162] + alert_handler_reg2hw_classd_timeout_cyc_shadowed_reg_t classd_timeout_cyc_shadowed; // [161:130] + alert_handler_reg2hw_classd_crashdump_trigger_shadowed_reg_t + classd_crashdump_trigger_shadowed; // [129:128] + alert_handler_reg2hw_classd_phase0_cyc_shadowed_reg_t classd_phase0_cyc_shadowed; // [127:96] + alert_handler_reg2hw_classd_phase1_cyc_shadowed_reg_t classd_phase1_cyc_shadowed; // [95:64] + alert_handler_reg2hw_classd_phase2_cyc_shadowed_reg_t classd_phase2_cyc_shadowed; // [63:32] + alert_handler_reg2hw_classd_phase3_cyc_shadowed_reg_t classd_phase3_cyc_shadowed; // [31:0] + } alert_handler_reg2hw_t; + + // HW -> register type + typedef struct packed { + alert_handler_hw2reg_intr_state_reg_t intr_state; // [363:356] + alert_handler_hw2reg_alert_cause_mreg_t [64:0] alert_cause; // [355:226] + alert_handler_hw2reg_loc_alert_cause_mreg_t [6:0] loc_alert_cause; // [225:212] + alert_handler_hw2reg_classa_clr_regwen_reg_t classa_clr_regwen; // [211:210] + alert_handler_hw2reg_classa_accum_cnt_reg_t classa_accum_cnt; // [209:194] + alert_handler_hw2reg_classa_esc_cnt_reg_t classa_esc_cnt; // [193:162] + alert_handler_hw2reg_classa_state_reg_t classa_state; // [161:159] + alert_handler_hw2reg_classb_clr_regwen_reg_t classb_clr_regwen; // [158:157] + alert_handler_hw2reg_classb_accum_cnt_reg_t classb_accum_cnt; // [156:141] + alert_handler_hw2reg_classb_esc_cnt_reg_t classb_esc_cnt; // [140:109] + alert_handler_hw2reg_classb_state_reg_t classb_state; // [108:106] + alert_handler_hw2reg_classc_clr_regwen_reg_t classc_clr_regwen; // [105:104] + alert_handler_hw2reg_classc_accum_cnt_reg_t classc_accum_cnt; // [103:88] + alert_handler_hw2reg_classc_esc_cnt_reg_t classc_esc_cnt; // [87:56] + alert_handler_hw2reg_classc_state_reg_t classc_state; // [55:53] + alert_handler_hw2reg_classd_clr_regwen_reg_t classd_clr_regwen; // [52:51] + alert_handler_hw2reg_classd_accum_cnt_reg_t classd_accum_cnt; // [50:35] + alert_handler_hw2reg_classd_esc_cnt_reg_t classd_esc_cnt; // [34:3] + alert_handler_hw2reg_classd_state_reg_t classd_state; // [2:0] + } alert_handler_hw2reg_t; + + // Register offsets + parameter logic [BlockAw-1:0] ALERT_HANDLER_INTR_STATE_OFFSET = 11'h 0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_INTR_ENABLE_OFFSET = 11'h 4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_INTR_TEST_OFFSET = 11'h 8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_PING_TIMER_REGWEN_OFFSET = 11'h c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_PING_TIMEOUT_CYC_SHADOWED_OFFSET = 11'h 10; + parameter logic [BlockAw-1:0] ALERT_HANDLER_PING_TIMER_EN_SHADOWED_OFFSET = 11'h 14; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_0_OFFSET = 11'h 18; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_1_OFFSET = 11'h 1c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_2_OFFSET = 11'h 20; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_3_OFFSET = 11'h 24; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_4_OFFSET = 11'h 28; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_5_OFFSET = 11'h 2c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_6_OFFSET = 11'h 30; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_7_OFFSET = 11'h 34; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_8_OFFSET = 11'h 38; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_9_OFFSET = 11'h 3c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_10_OFFSET = 11'h 40; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_11_OFFSET = 11'h 44; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_12_OFFSET = 11'h 48; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_13_OFFSET = 11'h 4c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_14_OFFSET = 11'h 50; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_15_OFFSET = 11'h 54; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_16_OFFSET = 11'h 58; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_17_OFFSET = 11'h 5c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_18_OFFSET = 11'h 60; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_19_OFFSET = 11'h 64; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_20_OFFSET = 11'h 68; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_21_OFFSET = 11'h 6c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_22_OFFSET = 11'h 70; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_23_OFFSET = 11'h 74; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_24_OFFSET = 11'h 78; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_25_OFFSET = 11'h 7c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_26_OFFSET = 11'h 80; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_27_OFFSET = 11'h 84; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_28_OFFSET = 11'h 88; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_29_OFFSET = 11'h 8c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_30_OFFSET = 11'h 90; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_31_OFFSET = 11'h 94; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_32_OFFSET = 11'h 98; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_33_OFFSET = 11'h 9c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_34_OFFSET = 11'h a0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_35_OFFSET = 11'h a4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_36_OFFSET = 11'h a8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_37_OFFSET = 11'h ac; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_38_OFFSET = 11'h b0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_39_OFFSET = 11'h b4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_40_OFFSET = 11'h b8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_41_OFFSET = 11'h bc; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_42_OFFSET = 11'h c0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_43_OFFSET = 11'h c4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_44_OFFSET = 11'h c8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_45_OFFSET = 11'h cc; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_46_OFFSET = 11'h d0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_47_OFFSET = 11'h d4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_48_OFFSET = 11'h d8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_49_OFFSET = 11'h dc; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_50_OFFSET = 11'h e0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_51_OFFSET = 11'h e4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_52_OFFSET = 11'h e8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_53_OFFSET = 11'h ec; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_54_OFFSET = 11'h f0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_55_OFFSET = 11'h f4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_56_OFFSET = 11'h f8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_57_OFFSET = 11'h fc; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_58_OFFSET = 11'h 100; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_59_OFFSET = 11'h 104; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_60_OFFSET = 11'h 108; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_61_OFFSET = 11'h 10c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_62_OFFSET = 11'h 110; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_63_OFFSET = 11'h 114; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_REGWEN_64_OFFSET = 11'h 118; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_0_OFFSET = 11'h 11c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_1_OFFSET = 11'h 120; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_2_OFFSET = 11'h 124; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_3_OFFSET = 11'h 128; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_4_OFFSET = 11'h 12c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_5_OFFSET = 11'h 130; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_6_OFFSET = 11'h 134; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_7_OFFSET = 11'h 138; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_8_OFFSET = 11'h 13c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_9_OFFSET = 11'h 140; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_10_OFFSET = 11'h 144; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_11_OFFSET = 11'h 148; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_12_OFFSET = 11'h 14c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_13_OFFSET = 11'h 150; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_14_OFFSET = 11'h 154; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_15_OFFSET = 11'h 158; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_16_OFFSET = 11'h 15c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_17_OFFSET = 11'h 160; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_18_OFFSET = 11'h 164; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_19_OFFSET = 11'h 168; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_20_OFFSET = 11'h 16c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_21_OFFSET = 11'h 170; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_22_OFFSET = 11'h 174; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_23_OFFSET = 11'h 178; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_24_OFFSET = 11'h 17c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_25_OFFSET = 11'h 180; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_26_OFFSET = 11'h 184; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_27_OFFSET = 11'h 188; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_28_OFFSET = 11'h 18c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_29_OFFSET = 11'h 190; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_30_OFFSET = 11'h 194; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_31_OFFSET = 11'h 198; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_32_OFFSET = 11'h 19c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_33_OFFSET = 11'h 1a0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_34_OFFSET = 11'h 1a4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_35_OFFSET = 11'h 1a8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_36_OFFSET = 11'h 1ac; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_37_OFFSET = 11'h 1b0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_38_OFFSET = 11'h 1b4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_39_OFFSET = 11'h 1b8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_40_OFFSET = 11'h 1bc; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_41_OFFSET = 11'h 1c0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_42_OFFSET = 11'h 1c4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_43_OFFSET = 11'h 1c8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_44_OFFSET = 11'h 1cc; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_45_OFFSET = 11'h 1d0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_46_OFFSET = 11'h 1d4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_47_OFFSET = 11'h 1d8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_48_OFFSET = 11'h 1dc; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_49_OFFSET = 11'h 1e0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_50_OFFSET = 11'h 1e4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_51_OFFSET = 11'h 1e8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_52_OFFSET = 11'h 1ec; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_53_OFFSET = 11'h 1f0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_54_OFFSET = 11'h 1f4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_55_OFFSET = 11'h 1f8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_56_OFFSET = 11'h 1fc; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_57_OFFSET = 11'h 200; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_58_OFFSET = 11'h 204; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_59_OFFSET = 11'h 208; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_60_OFFSET = 11'h 20c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_61_OFFSET = 11'h 210; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_62_OFFSET = 11'h 214; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_63_OFFSET = 11'h 218; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_EN_SHADOWED_64_OFFSET = 11'h 21c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_0_OFFSET = 11'h 220; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_1_OFFSET = 11'h 224; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_2_OFFSET = 11'h 228; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_3_OFFSET = 11'h 22c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_4_OFFSET = 11'h 230; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_5_OFFSET = 11'h 234; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_6_OFFSET = 11'h 238; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_7_OFFSET = 11'h 23c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_8_OFFSET = 11'h 240; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_9_OFFSET = 11'h 244; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_10_OFFSET = 11'h 248; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_11_OFFSET = 11'h 24c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_12_OFFSET = 11'h 250; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_13_OFFSET = 11'h 254; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_14_OFFSET = 11'h 258; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_15_OFFSET = 11'h 25c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_16_OFFSET = 11'h 260; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_17_OFFSET = 11'h 264; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_18_OFFSET = 11'h 268; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_19_OFFSET = 11'h 26c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_20_OFFSET = 11'h 270; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_21_OFFSET = 11'h 274; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_22_OFFSET = 11'h 278; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_23_OFFSET = 11'h 27c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_24_OFFSET = 11'h 280; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_25_OFFSET = 11'h 284; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_26_OFFSET = 11'h 288; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_27_OFFSET = 11'h 28c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_28_OFFSET = 11'h 290; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_29_OFFSET = 11'h 294; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_30_OFFSET = 11'h 298; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_31_OFFSET = 11'h 29c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_32_OFFSET = 11'h 2a0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_33_OFFSET = 11'h 2a4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_34_OFFSET = 11'h 2a8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_35_OFFSET = 11'h 2ac; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_36_OFFSET = 11'h 2b0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_37_OFFSET = 11'h 2b4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_38_OFFSET = 11'h 2b8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_39_OFFSET = 11'h 2bc; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_40_OFFSET = 11'h 2c0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_41_OFFSET = 11'h 2c4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_42_OFFSET = 11'h 2c8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_43_OFFSET = 11'h 2cc; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_44_OFFSET = 11'h 2d0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_45_OFFSET = 11'h 2d4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_46_OFFSET = 11'h 2d8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_47_OFFSET = 11'h 2dc; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_48_OFFSET = 11'h 2e0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_49_OFFSET = 11'h 2e4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_50_OFFSET = 11'h 2e8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_51_OFFSET = 11'h 2ec; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_52_OFFSET = 11'h 2f0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_53_OFFSET = 11'h 2f4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_54_OFFSET = 11'h 2f8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_55_OFFSET = 11'h 2fc; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_56_OFFSET = 11'h 300; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_57_OFFSET = 11'h 304; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_58_OFFSET = 11'h 308; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_59_OFFSET = 11'h 30c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_60_OFFSET = 11'h 310; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_61_OFFSET = 11'h 314; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_62_OFFSET = 11'h 318; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_63_OFFSET = 11'h 31c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CLASS_SHADOWED_64_OFFSET = 11'h 320; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_0_OFFSET = 11'h 324; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_1_OFFSET = 11'h 328; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_2_OFFSET = 11'h 32c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_3_OFFSET = 11'h 330; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_4_OFFSET = 11'h 334; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_5_OFFSET = 11'h 338; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_6_OFFSET = 11'h 33c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_7_OFFSET = 11'h 340; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_8_OFFSET = 11'h 344; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_9_OFFSET = 11'h 348; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_10_OFFSET = 11'h 34c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_11_OFFSET = 11'h 350; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_12_OFFSET = 11'h 354; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_13_OFFSET = 11'h 358; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_14_OFFSET = 11'h 35c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_15_OFFSET = 11'h 360; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_16_OFFSET = 11'h 364; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_17_OFFSET = 11'h 368; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_18_OFFSET = 11'h 36c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_19_OFFSET = 11'h 370; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_20_OFFSET = 11'h 374; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_21_OFFSET = 11'h 378; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_22_OFFSET = 11'h 37c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_23_OFFSET = 11'h 380; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_24_OFFSET = 11'h 384; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_25_OFFSET = 11'h 388; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_26_OFFSET = 11'h 38c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_27_OFFSET = 11'h 390; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_28_OFFSET = 11'h 394; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_29_OFFSET = 11'h 398; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_30_OFFSET = 11'h 39c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_31_OFFSET = 11'h 3a0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_32_OFFSET = 11'h 3a4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_33_OFFSET = 11'h 3a8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_34_OFFSET = 11'h 3ac; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_35_OFFSET = 11'h 3b0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_36_OFFSET = 11'h 3b4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_37_OFFSET = 11'h 3b8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_38_OFFSET = 11'h 3bc; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_39_OFFSET = 11'h 3c0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_40_OFFSET = 11'h 3c4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_41_OFFSET = 11'h 3c8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_42_OFFSET = 11'h 3cc; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_43_OFFSET = 11'h 3d0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_44_OFFSET = 11'h 3d4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_45_OFFSET = 11'h 3d8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_46_OFFSET = 11'h 3dc; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_47_OFFSET = 11'h 3e0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_48_OFFSET = 11'h 3e4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_49_OFFSET = 11'h 3e8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_50_OFFSET = 11'h 3ec; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_51_OFFSET = 11'h 3f0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_52_OFFSET = 11'h 3f4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_53_OFFSET = 11'h 3f8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_54_OFFSET = 11'h 3fc; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_55_OFFSET = 11'h 400; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_56_OFFSET = 11'h 404; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_57_OFFSET = 11'h 408; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_58_OFFSET = 11'h 40c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_59_OFFSET = 11'h 410; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_60_OFFSET = 11'h 414; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_61_OFFSET = 11'h 418; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_62_OFFSET = 11'h 41c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_63_OFFSET = 11'h 420; + parameter logic [BlockAw-1:0] ALERT_HANDLER_ALERT_CAUSE_64_OFFSET = 11'h 424; + parameter logic [BlockAw-1:0] ALERT_HANDLER_LOC_ALERT_REGWEN_0_OFFSET = 11'h 428; + parameter logic [BlockAw-1:0] ALERT_HANDLER_LOC_ALERT_REGWEN_1_OFFSET = 11'h 42c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_LOC_ALERT_REGWEN_2_OFFSET = 11'h 430; + parameter logic [BlockAw-1:0] ALERT_HANDLER_LOC_ALERT_REGWEN_3_OFFSET = 11'h 434; + parameter logic [BlockAw-1:0] ALERT_HANDLER_LOC_ALERT_REGWEN_4_OFFSET = 11'h 438; + parameter logic [BlockAw-1:0] ALERT_HANDLER_LOC_ALERT_REGWEN_5_OFFSET = 11'h 43c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_LOC_ALERT_REGWEN_6_OFFSET = 11'h 440; + parameter logic [BlockAw-1:0] ALERT_HANDLER_LOC_ALERT_EN_SHADOWED_0_OFFSET = 11'h 444; + parameter logic [BlockAw-1:0] ALERT_HANDLER_LOC_ALERT_EN_SHADOWED_1_OFFSET = 11'h 448; + parameter logic [BlockAw-1:0] ALERT_HANDLER_LOC_ALERT_EN_SHADOWED_2_OFFSET = 11'h 44c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_LOC_ALERT_EN_SHADOWED_3_OFFSET = 11'h 450; + parameter logic [BlockAw-1:0] ALERT_HANDLER_LOC_ALERT_EN_SHADOWED_4_OFFSET = 11'h 454; + parameter logic [BlockAw-1:0] ALERT_HANDLER_LOC_ALERT_EN_SHADOWED_5_OFFSET = 11'h 458; + parameter logic [BlockAw-1:0] ALERT_HANDLER_LOC_ALERT_EN_SHADOWED_6_OFFSET = 11'h 45c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_LOC_ALERT_CLASS_SHADOWED_0_OFFSET = 11'h 460; + parameter logic [BlockAw-1:0] ALERT_HANDLER_LOC_ALERT_CLASS_SHADOWED_1_OFFSET = 11'h 464; + parameter logic [BlockAw-1:0] ALERT_HANDLER_LOC_ALERT_CLASS_SHADOWED_2_OFFSET = 11'h 468; + parameter logic [BlockAw-1:0] ALERT_HANDLER_LOC_ALERT_CLASS_SHADOWED_3_OFFSET = 11'h 46c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_LOC_ALERT_CLASS_SHADOWED_4_OFFSET = 11'h 470; + parameter logic [BlockAw-1:0] ALERT_HANDLER_LOC_ALERT_CLASS_SHADOWED_5_OFFSET = 11'h 474; + parameter logic [BlockAw-1:0] ALERT_HANDLER_LOC_ALERT_CLASS_SHADOWED_6_OFFSET = 11'h 478; + parameter logic [BlockAw-1:0] ALERT_HANDLER_LOC_ALERT_CAUSE_0_OFFSET = 11'h 47c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_LOC_ALERT_CAUSE_1_OFFSET = 11'h 480; + parameter logic [BlockAw-1:0] ALERT_HANDLER_LOC_ALERT_CAUSE_2_OFFSET = 11'h 484; + parameter logic [BlockAw-1:0] ALERT_HANDLER_LOC_ALERT_CAUSE_3_OFFSET = 11'h 488; + parameter logic [BlockAw-1:0] ALERT_HANDLER_LOC_ALERT_CAUSE_4_OFFSET = 11'h 48c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_LOC_ALERT_CAUSE_5_OFFSET = 11'h 490; + parameter logic [BlockAw-1:0] ALERT_HANDLER_LOC_ALERT_CAUSE_6_OFFSET = 11'h 494; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSA_REGWEN_OFFSET = 11'h 498; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSA_CTRL_SHADOWED_OFFSET = 11'h 49c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSA_CLR_REGWEN_OFFSET = 11'h 4a0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSA_CLR_SHADOWED_OFFSET = 11'h 4a4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSA_ACCUM_CNT_OFFSET = 11'h 4a8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSA_ACCUM_THRESH_SHADOWED_OFFSET = 11'h 4ac; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSA_TIMEOUT_CYC_SHADOWED_OFFSET = 11'h 4b0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSA_CRASHDUMP_TRIGGER_SHADOWED_OFFSET = 11'h 4b4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSA_PHASE0_CYC_SHADOWED_OFFSET = 11'h 4b8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSA_PHASE1_CYC_SHADOWED_OFFSET = 11'h 4bc; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSA_PHASE2_CYC_SHADOWED_OFFSET = 11'h 4c0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSA_PHASE3_CYC_SHADOWED_OFFSET = 11'h 4c4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSA_ESC_CNT_OFFSET = 11'h 4c8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSA_STATE_OFFSET = 11'h 4cc; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSB_REGWEN_OFFSET = 11'h 4d0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSB_CTRL_SHADOWED_OFFSET = 11'h 4d4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSB_CLR_REGWEN_OFFSET = 11'h 4d8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSB_CLR_SHADOWED_OFFSET = 11'h 4dc; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSB_ACCUM_CNT_OFFSET = 11'h 4e0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSB_ACCUM_THRESH_SHADOWED_OFFSET = 11'h 4e4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSB_TIMEOUT_CYC_SHADOWED_OFFSET = 11'h 4e8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSB_CRASHDUMP_TRIGGER_SHADOWED_OFFSET = 11'h 4ec; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSB_PHASE0_CYC_SHADOWED_OFFSET = 11'h 4f0; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSB_PHASE1_CYC_SHADOWED_OFFSET = 11'h 4f4; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSB_PHASE2_CYC_SHADOWED_OFFSET = 11'h 4f8; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSB_PHASE3_CYC_SHADOWED_OFFSET = 11'h 4fc; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSB_ESC_CNT_OFFSET = 11'h 500; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSB_STATE_OFFSET = 11'h 504; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSC_REGWEN_OFFSET = 11'h 508; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSC_CTRL_SHADOWED_OFFSET = 11'h 50c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSC_CLR_REGWEN_OFFSET = 11'h 510; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSC_CLR_SHADOWED_OFFSET = 11'h 514; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSC_ACCUM_CNT_OFFSET = 11'h 518; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSC_ACCUM_THRESH_SHADOWED_OFFSET = 11'h 51c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSC_TIMEOUT_CYC_SHADOWED_OFFSET = 11'h 520; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSC_CRASHDUMP_TRIGGER_SHADOWED_OFFSET = 11'h 524; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSC_PHASE0_CYC_SHADOWED_OFFSET = 11'h 528; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSC_PHASE1_CYC_SHADOWED_OFFSET = 11'h 52c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSC_PHASE2_CYC_SHADOWED_OFFSET = 11'h 530; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSC_PHASE3_CYC_SHADOWED_OFFSET = 11'h 534; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSC_ESC_CNT_OFFSET = 11'h 538; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSC_STATE_OFFSET = 11'h 53c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSD_REGWEN_OFFSET = 11'h 540; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSD_CTRL_SHADOWED_OFFSET = 11'h 544; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSD_CLR_REGWEN_OFFSET = 11'h 548; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSD_CLR_SHADOWED_OFFSET = 11'h 54c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSD_ACCUM_CNT_OFFSET = 11'h 550; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSD_ACCUM_THRESH_SHADOWED_OFFSET = 11'h 554; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSD_TIMEOUT_CYC_SHADOWED_OFFSET = 11'h 558; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSD_CRASHDUMP_TRIGGER_SHADOWED_OFFSET = 11'h 55c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSD_PHASE0_CYC_SHADOWED_OFFSET = 11'h 560; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSD_PHASE1_CYC_SHADOWED_OFFSET = 11'h 564; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSD_PHASE2_CYC_SHADOWED_OFFSET = 11'h 568; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSD_PHASE3_CYC_SHADOWED_OFFSET = 11'h 56c; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSD_ESC_CNT_OFFSET = 11'h 570; + parameter logic [BlockAw-1:0] ALERT_HANDLER_CLASSD_STATE_OFFSET = 11'h 574; + + // Reset values for hwext registers and their fields + parameter logic [3:0] ALERT_HANDLER_INTR_TEST_RESVAL = 4'h 0; + parameter logic [0:0] ALERT_HANDLER_INTR_TEST_CLASSA_RESVAL = 1'h 0; + parameter logic [0:0] ALERT_HANDLER_INTR_TEST_CLASSB_RESVAL = 1'h 0; + parameter logic [0:0] ALERT_HANDLER_INTR_TEST_CLASSC_RESVAL = 1'h 0; + parameter logic [0:0] ALERT_HANDLER_INTR_TEST_CLASSD_RESVAL = 1'h 0; + parameter logic [15:0] ALERT_HANDLER_CLASSA_ACCUM_CNT_RESVAL = 16'h 0; + parameter logic [31:0] ALERT_HANDLER_CLASSA_ESC_CNT_RESVAL = 32'h 0; + parameter logic [2:0] ALERT_HANDLER_CLASSA_STATE_RESVAL = 3'h 0; + parameter logic [15:0] ALERT_HANDLER_CLASSB_ACCUM_CNT_RESVAL = 16'h 0; + parameter logic [31:0] ALERT_HANDLER_CLASSB_ESC_CNT_RESVAL = 32'h 0; + parameter logic [2:0] ALERT_HANDLER_CLASSB_STATE_RESVAL = 3'h 0; + parameter logic [15:0] ALERT_HANDLER_CLASSC_ACCUM_CNT_RESVAL = 16'h 0; + parameter logic [31:0] ALERT_HANDLER_CLASSC_ESC_CNT_RESVAL = 32'h 0; + parameter logic [2:0] ALERT_HANDLER_CLASSC_STATE_RESVAL = 3'h 0; + parameter logic [15:0] ALERT_HANDLER_CLASSD_ACCUM_CNT_RESVAL = 16'h 0; + parameter logic [31:0] ALERT_HANDLER_CLASSD_ESC_CNT_RESVAL = 32'h 0; + parameter logic [2:0] ALERT_HANDLER_CLASSD_STATE_RESVAL = 3'h 0; + + // Register index + typedef enum int { + ALERT_HANDLER_INTR_STATE, + ALERT_HANDLER_INTR_ENABLE, + ALERT_HANDLER_INTR_TEST, + ALERT_HANDLER_PING_TIMER_REGWEN, + ALERT_HANDLER_PING_TIMEOUT_CYC_SHADOWED, + ALERT_HANDLER_PING_TIMER_EN_SHADOWED, + ALERT_HANDLER_ALERT_REGWEN_0, + ALERT_HANDLER_ALERT_REGWEN_1, + ALERT_HANDLER_ALERT_REGWEN_2, + ALERT_HANDLER_ALERT_REGWEN_3, + ALERT_HANDLER_ALERT_REGWEN_4, + ALERT_HANDLER_ALERT_REGWEN_5, + ALERT_HANDLER_ALERT_REGWEN_6, + ALERT_HANDLER_ALERT_REGWEN_7, + ALERT_HANDLER_ALERT_REGWEN_8, + ALERT_HANDLER_ALERT_REGWEN_9, + ALERT_HANDLER_ALERT_REGWEN_10, + ALERT_HANDLER_ALERT_REGWEN_11, + ALERT_HANDLER_ALERT_REGWEN_12, + ALERT_HANDLER_ALERT_REGWEN_13, + ALERT_HANDLER_ALERT_REGWEN_14, + ALERT_HANDLER_ALERT_REGWEN_15, + ALERT_HANDLER_ALERT_REGWEN_16, + ALERT_HANDLER_ALERT_REGWEN_17, + ALERT_HANDLER_ALERT_REGWEN_18, + ALERT_HANDLER_ALERT_REGWEN_19, + ALERT_HANDLER_ALERT_REGWEN_20, + ALERT_HANDLER_ALERT_REGWEN_21, + ALERT_HANDLER_ALERT_REGWEN_22, + ALERT_HANDLER_ALERT_REGWEN_23, + ALERT_HANDLER_ALERT_REGWEN_24, + ALERT_HANDLER_ALERT_REGWEN_25, + ALERT_HANDLER_ALERT_REGWEN_26, + ALERT_HANDLER_ALERT_REGWEN_27, + ALERT_HANDLER_ALERT_REGWEN_28, + ALERT_HANDLER_ALERT_REGWEN_29, + ALERT_HANDLER_ALERT_REGWEN_30, + ALERT_HANDLER_ALERT_REGWEN_31, + ALERT_HANDLER_ALERT_REGWEN_32, + ALERT_HANDLER_ALERT_REGWEN_33, + ALERT_HANDLER_ALERT_REGWEN_34, + ALERT_HANDLER_ALERT_REGWEN_35, + ALERT_HANDLER_ALERT_REGWEN_36, + ALERT_HANDLER_ALERT_REGWEN_37, + ALERT_HANDLER_ALERT_REGWEN_38, + ALERT_HANDLER_ALERT_REGWEN_39, + ALERT_HANDLER_ALERT_REGWEN_40, + ALERT_HANDLER_ALERT_REGWEN_41, + ALERT_HANDLER_ALERT_REGWEN_42, + ALERT_HANDLER_ALERT_REGWEN_43, + ALERT_HANDLER_ALERT_REGWEN_44, + ALERT_HANDLER_ALERT_REGWEN_45, + ALERT_HANDLER_ALERT_REGWEN_46, + ALERT_HANDLER_ALERT_REGWEN_47, + ALERT_HANDLER_ALERT_REGWEN_48, + ALERT_HANDLER_ALERT_REGWEN_49, + ALERT_HANDLER_ALERT_REGWEN_50, + ALERT_HANDLER_ALERT_REGWEN_51, + ALERT_HANDLER_ALERT_REGWEN_52, + ALERT_HANDLER_ALERT_REGWEN_53, + ALERT_HANDLER_ALERT_REGWEN_54, + ALERT_HANDLER_ALERT_REGWEN_55, + ALERT_HANDLER_ALERT_REGWEN_56, + ALERT_HANDLER_ALERT_REGWEN_57, + ALERT_HANDLER_ALERT_REGWEN_58, + ALERT_HANDLER_ALERT_REGWEN_59, + ALERT_HANDLER_ALERT_REGWEN_60, + ALERT_HANDLER_ALERT_REGWEN_61, + ALERT_HANDLER_ALERT_REGWEN_62, + ALERT_HANDLER_ALERT_REGWEN_63, + ALERT_HANDLER_ALERT_REGWEN_64, + ALERT_HANDLER_ALERT_EN_SHADOWED_0, + ALERT_HANDLER_ALERT_EN_SHADOWED_1, + ALERT_HANDLER_ALERT_EN_SHADOWED_2, + ALERT_HANDLER_ALERT_EN_SHADOWED_3, + ALERT_HANDLER_ALERT_EN_SHADOWED_4, + ALERT_HANDLER_ALERT_EN_SHADOWED_5, + ALERT_HANDLER_ALERT_EN_SHADOWED_6, + ALERT_HANDLER_ALERT_EN_SHADOWED_7, + ALERT_HANDLER_ALERT_EN_SHADOWED_8, + ALERT_HANDLER_ALERT_EN_SHADOWED_9, + ALERT_HANDLER_ALERT_EN_SHADOWED_10, + ALERT_HANDLER_ALERT_EN_SHADOWED_11, + ALERT_HANDLER_ALERT_EN_SHADOWED_12, + ALERT_HANDLER_ALERT_EN_SHADOWED_13, + ALERT_HANDLER_ALERT_EN_SHADOWED_14, + ALERT_HANDLER_ALERT_EN_SHADOWED_15, + ALERT_HANDLER_ALERT_EN_SHADOWED_16, + ALERT_HANDLER_ALERT_EN_SHADOWED_17, + ALERT_HANDLER_ALERT_EN_SHADOWED_18, + ALERT_HANDLER_ALERT_EN_SHADOWED_19, + ALERT_HANDLER_ALERT_EN_SHADOWED_20, + ALERT_HANDLER_ALERT_EN_SHADOWED_21, + ALERT_HANDLER_ALERT_EN_SHADOWED_22, + ALERT_HANDLER_ALERT_EN_SHADOWED_23, + ALERT_HANDLER_ALERT_EN_SHADOWED_24, + ALERT_HANDLER_ALERT_EN_SHADOWED_25, + ALERT_HANDLER_ALERT_EN_SHADOWED_26, + ALERT_HANDLER_ALERT_EN_SHADOWED_27, + ALERT_HANDLER_ALERT_EN_SHADOWED_28, + ALERT_HANDLER_ALERT_EN_SHADOWED_29, + ALERT_HANDLER_ALERT_EN_SHADOWED_30, + ALERT_HANDLER_ALERT_EN_SHADOWED_31, + ALERT_HANDLER_ALERT_EN_SHADOWED_32, + ALERT_HANDLER_ALERT_EN_SHADOWED_33, + ALERT_HANDLER_ALERT_EN_SHADOWED_34, + ALERT_HANDLER_ALERT_EN_SHADOWED_35, + ALERT_HANDLER_ALERT_EN_SHADOWED_36, + ALERT_HANDLER_ALERT_EN_SHADOWED_37, + ALERT_HANDLER_ALERT_EN_SHADOWED_38, + ALERT_HANDLER_ALERT_EN_SHADOWED_39, + ALERT_HANDLER_ALERT_EN_SHADOWED_40, + ALERT_HANDLER_ALERT_EN_SHADOWED_41, + ALERT_HANDLER_ALERT_EN_SHADOWED_42, + ALERT_HANDLER_ALERT_EN_SHADOWED_43, + ALERT_HANDLER_ALERT_EN_SHADOWED_44, + ALERT_HANDLER_ALERT_EN_SHADOWED_45, + ALERT_HANDLER_ALERT_EN_SHADOWED_46, + ALERT_HANDLER_ALERT_EN_SHADOWED_47, + ALERT_HANDLER_ALERT_EN_SHADOWED_48, + ALERT_HANDLER_ALERT_EN_SHADOWED_49, + ALERT_HANDLER_ALERT_EN_SHADOWED_50, + ALERT_HANDLER_ALERT_EN_SHADOWED_51, + ALERT_HANDLER_ALERT_EN_SHADOWED_52, + ALERT_HANDLER_ALERT_EN_SHADOWED_53, + ALERT_HANDLER_ALERT_EN_SHADOWED_54, + ALERT_HANDLER_ALERT_EN_SHADOWED_55, + ALERT_HANDLER_ALERT_EN_SHADOWED_56, + ALERT_HANDLER_ALERT_EN_SHADOWED_57, + ALERT_HANDLER_ALERT_EN_SHADOWED_58, + ALERT_HANDLER_ALERT_EN_SHADOWED_59, + ALERT_HANDLER_ALERT_EN_SHADOWED_60, + ALERT_HANDLER_ALERT_EN_SHADOWED_61, + ALERT_HANDLER_ALERT_EN_SHADOWED_62, + ALERT_HANDLER_ALERT_EN_SHADOWED_63, + ALERT_HANDLER_ALERT_EN_SHADOWED_64, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_0, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_1, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_2, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_3, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_4, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_5, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_6, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_7, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_8, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_9, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_10, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_11, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_12, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_13, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_14, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_15, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_16, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_17, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_18, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_19, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_20, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_21, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_22, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_23, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_24, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_25, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_26, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_27, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_28, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_29, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_30, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_31, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_32, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_33, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_34, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_35, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_36, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_37, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_38, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_39, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_40, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_41, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_42, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_43, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_44, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_45, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_46, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_47, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_48, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_49, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_50, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_51, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_52, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_53, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_54, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_55, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_56, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_57, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_58, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_59, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_60, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_61, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_62, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_63, + ALERT_HANDLER_ALERT_CLASS_SHADOWED_64, + ALERT_HANDLER_ALERT_CAUSE_0, + ALERT_HANDLER_ALERT_CAUSE_1, + ALERT_HANDLER_ALERT_CAUSE_2, + ALERT_HANDLER_ALERT_CAUSE_3, + ALERT_HANDLER_ALERT_CAUSE_4, + ALERT_HANDLER_ALERT_CAUSE_5, + ALERT_HANDLER_ALERT_CAUSE_6, + ALERT_HANDLER_ALERT_CAUSE_7, + ALERT_HANDLER_ALERT_CAUSE_8, + ALERT_HANDLER_ALERT_CAUSE_9, + ALERT_HANDLER_ALERT_CAUSE_10, + ALERT_HANDLER_ALERT_CAUSE_11, + ALERT_HANDLER_ALERT_CAUSE_12, + ALERT_HANDLER_ALERT_CAUSE_13, + ALERT_HANDLER_ALERT_CAUSE_14, + ALERT_HANDLER_ALERT_CAUSE_15, + ALERT_HANDLER_ALERT_CAUSE_16, + ALERT_HANDLER_ALERT_CAUSE_17, + ALERT_HANDLER_ALERT_CAUSE_18, + ALERT_HANDLER_ALERT_CAUSE_19, + ALERT_HANDLER_ALERT_CAUSE_20, + ALERT_HANDLER_ALERT_CAUSE_21, + ALERT_HANDLER_ALERT_CAUSE_22, + ALERT_HANDLER_ALERT_CAUSE_23, + ALERT_HANDLER_ALERT_CAUSE_24, + ALERT_HANDLER_ALERT_CAUSE_25, + ALERT_HANDLER_ALERT_CAUSE_26, + ALERT_HANDLER_ALERT_CAUSE_27, + ALERT_HANDLER_ALERT_CAUSE_28, + ALERT_HANDLER_ALERT_CAUSE_29, + ALERT_HANDLER_ALERT_CAUSE_30, + ALERT_HANDLER_ALERT_CAUSE_31, + ALERT_HANDLER_ALERT_CAUSE_32, + ALERT_HANDLER_ALERT_CAUSE_33, + ALERT_HANDLER_ALERT_CAUSE_34, + ALERT_HANDLER_ALERT_CAUSE_35, + ALERT_HANDLER_ALERT_CAUSE_36, + ALERT_HANDLER_ALERT_CAUSE_37, + ALERT_HANDLER_ALERT_CAUSE_38, + ALERT_HANDLER_ALERT_CAUSE_39, + ALERT_HANDLER_ALERT_CAUSE_40, + ALERT_HANDLER_ALERT_CAUSE_41, + ALERT_HANDLER_ALERT_CAUSE_42, + ALERT_HANDLER_ALERT_CAUSE_43, + ALERT_HANDLER_ALERT_CAUSE_44, + ALERT_HANDLER_ALERT_CAUSE_45, + ALERT_HANDLER_ALERT_CAUSE_46, + ALERT_HANDLER_ALERT_CAUSE_47, + ALERT_HANDLER_ALERT_CAUSE_48, + ALERT_HANDLER_ALERT_CAUSE_49, + ALERT_HANDLER_ALERT_CAUSE_50, + ALERT_HANDLER_ALERT_CAUSE_51, + ALERT_HANDLER_ALERT_CAUSE_52, + ALERT_HANDLER_ALERT_CAUSE_53, + ALERT_HANDLER_ALERT_CAUSE_54, + ALERT_HANDLER_ALERT_CAUSE_55, + ALERT_HANDLER_ALERT_CAUSE_56, + ALERT_HANDLER_ALERT_CAUSE_57, + ALERT_HANDLER_ALERT_CAUSE_58, + ALERT_HANDLER_ALERT_CAUSE_59, + ALERT_HANDLER_ALERT_CAUSE_60, + ALERT_HANDLER_ALERT_CAUSE_61, + ALERT_HANDLER_ALERT_CAUSE_62, + ALERT_HANDLER_ALERT_CAUSE_63, + ALERT_HANDLER_ALERT_CAUSE_64, + ALERT_HANDLER_LOC_ALERT_REGWEN_0, + ALERT_HANDLER_LOC_ALERT_REGWEN_1, + ALERT_HANDLER_LOC_ALERT_REGWEN_2, + ALERT_HANDLER_LOC_ALERT_REGWEN_3, + ALERT_HANDLER_LOC_ALERT_REGWEN_4, + ALERT_HANDLER_LOC_ALERT_REGWEN_5, + ALERT_HANDLER_LOC_ALERT_REGWEN_6, + ALERT_HANDLER_LOC_ALERT_EN_SHADOWED_0, + ALERT_HANDLER_LOC_ALERT_EN_SHADOWED_1, + ALERT_HANDLER_LOC_ALERT_EN_SHADOWED_2, + ALERT_HANDLER_LOC_ALERT_EN_SHADOWED_3, + ALERT_HANDLER_LOC_ALERT_EN_SHADOWED_4, + ALERT_HANDLER_LOC_ALERT_EN_SHADOWED_5, + ALERT_HANDLER_LOC_ALERT_EN_SHADOWED_6, + ALERT_HANDLER_LOC_ALERT_CLASS_SHADOWED_0, + ALERT_HANDLER_LOC_ALERT_CLASS_SHADOWED_1, + ALERT_HANDLER_LOC_ALERT_CLASS_SHADOWED_2, + ALERT_HANDLER_LOC_ALERT_CLASS_SHADOWED_3, + ALERT_HANDLER_LOC_ALERT_CLASS_SHADOWED_4, + ALERT_HANDLER_LOC_ALERT_CLASS_SHADOWED_5, + ALERT_HANDLER_LOC_ALERT_CLASS_SHADOWED_6, + ALERT_HANDLER_LOC_ALERT_CAUSE_0, + ALERT_HANDLER_LOC_ALERT_CAUSE_1, + ALERT_HANDLER_LOC_ALERT_CAUSE_2, + ALERT_HANDLER_LOC_ALERT_CAUSE_3, + ALERT_HANDLER_LOC_ALERT_CAUSE_4, + ALERT_HANDLER_LOC_ALERT_CAUSE_5, + ALERT_HANDLER_LOC_ALERT_CAUSE_6, + ALERT_HANDLER_CLASSA_REGWEN, + ALERT_HANDLER_CLASSA_CTRL_SHADOWED, + ALERT_HANDLER_CLASSA_CLR_REGWEN, + ALERT_HANDLER_CLASSA_CLR_SHADOWED, + ALERT_HANDLER_CLASSA_ACCUM_CNT, + ALERT_HANDLER_CLASSA_ACCUM_THRESH_SHADOWED, + ALERT_HANDLER_CLASSA_TIMEOUT_CYC_SHADOWED, + ALERT_HANDLER_CLASSA_CRASHDUMP_TRIGGER_SHADOWED, + ALERT_HANDLER_CLASSA_PHASE0_CYC_SHADOWED, + ALERT_HANDLER_CLASSA_PHASE1_CYC_SHADOWED, + ALERT_HANDLER_CLASSA_PHASE2_CYC_SHADOWED, + ALERT_HANDLER_CLASSA_PHASE3_CYC_SHADOWED, + ALERT_HANDLER_CLASSA_ESC_CNT, + ALERT_HANDLER_CLASSA_STATE, + ALERT_HANDLER_CLASSB_REGWEN, + ALERT_HANDLER_CLASSB_CTRL_SHADOWED, + ALERT_HANDLER_CLASSB_CLR_REGWEN, + ALERT_HANDLER_CLASSB_CLR_SHADOWED, + ALERT_HANDLER_CLASSB_ACCUM_CNT, + ALERT_HANDLER_CLASSB_ACCUM_THRESH_SHADOWED, + ALERT_HANDLER_CLASSB_TIMEOUT_CYC_SHADOWED, + ALERT_HANDLER_CLASSB_CRASHDUMP_TRIGGER_SHADOWED, + ALERT_HANDLER_CLASSB_PHASE0_CYC_SHADOWED, + ALERT_HANDLER_CLASSB_PHASE1_CYC_SHADOWED, + ALERT_HANDLER_CLASSB_PHASE2_CYC_SHADOWED, + ALERT_HANDLER_CLASSB_PHASE3_CYC_SHADOWED, + ALERT_HANDLER_CLASSB_ESC_CNT, + ALERT_HANDLER_CLASSB_STATE, + ALERT_HANDLER_CLASSC_REGWEN, + ALERT_HANDLER_CLASSC_CTRL_SHADOWED, + ALERT_HANDLER_CLASSC_CLR_REGWEN, + ALERT_HANDLER_CLASSC_CLR_SHADOWED, + ALERT_HANDLER_CLASSC_ACCUM_CNT, + ALERT_HANDLER_CLASSC_ACCUM_THRESH_SHADOWED, + ALERT_HANDLER_CLASSC_TIMEOUT_CYC_SHADOWED, + ALERT_HANDLER_CLASSC_CRASHDUMP_TRIGGER_SHADOWED, + ALERT_HANDLER_CLASSC_PHASE0_CYC_SHADOWED, + ALERT_HANDLER_CLASSC_PHASE1_CYC_SHADOWED, + ALERT_HANDLER_CLASSC_PHASE2_CYC_SHADOWED, + ALERT_HANDLER_CLASSC_PHASE3_CYC_SHADOWED, + ALERT_HANDLER_CLASSC_ESC_CNT, + ALERT_HANDLER_CLASSC_STATE, + ALERT_HANDLER_CLASSD_REGWEN, + ALERT_HANDLER_CLASSD_CTRL_SHADOWED, + ALERT_HANDLER_CLASSD_CLR_REGWEN, + ALERT_HANDLER_CLASSD_CLR_SHADOWED, + ALERT_HANDLER_CLASSD_ACCUM_CNT, + ALERT_HANDLER_CLASSD_ACCUM_THRESH_SHADOWED, + ALERT_HANDLER_CLASSD_TIMEOUT_CYC_SHADOWED, + ALERT_HANDLER_CLASSD_CRASHDUMP_TRIGGER_SHADOWED, + ALERT_HANDLER_CLASSD_PHASE0_CYC_SHADOWED, + ALERT_HANDLER_CLASSD_PHASE1_CYC_SHADOWED, + ALERT_HANDLER_CLASSD_PHASE2_CYC_SHADOWED, + ALERT_HANDLER_CLASSD_PHASE3_CYC_SHADOWED, + ALERT_HANDLER_CLASSD_ESC_CNT, + ALERT_HANDLER_CLASSD_STATE + } alert_handler_id_e; + + // Register width information to check illegal writes + parameter logic [3:0] ALERT_HANDLER_PERMIT [350] = '{ + 4'b 0001, // index[ 0] ALERT_HANDLER_INTR_STATE + 4'b 0001, // index[ 1] ALERT_HANDLER_INTR_ENABLE + 4'b 0001, // index[ 2] ALERT_HANDLER_INTR_TEST + 4'b 0001, // index[ 3] ALERT_HANDLER_PING_TIMER_REGWEN + 4'b 0011, // index[ 4] ALERT_HANDLER_PING_TIMEOUT_CYC_SHADOWED + 4'b 0001, // index[ 5] ALERT_HANDLER_PING_TIMER_EN_SHADOWED + 4'b 0001, // index[ 6] ALERT_HANDLER_ALERT_REGWEN_0 + 4'b 0001, // index[ 7] ALERT_HANDLER_ALERT_REGWEN_1 + 4'b 0001, // index[ 8] ALERT_HANDLER_ALERT_REGWEN_2 + 4'b 0001, // index[ 9] ALERT_HANDLER_ALERT_REGWEN_3 + 4'b 0001, // index[ 10] ALERT_HANDLER_ALERT_REGWEN_4 + 4'b 0001, // index[ 11] ALERT_HANDLER_ALERT_REGWEN_5 + 4'b 0001, // index[ 12] ALERT_HANDLER_ALERT_REGWEN_6 + 4'b 0001, // index[ 13] ALERT_HANDLER_ALERT_REGWEN_7 + 4'b 0001, // index[ 14] ALERT_HANDLER_ALERT_REGWEN_8 + 4'b 0001, // index[ 15] ALERT_HANDLER_ALERT_REGWEN_9 + 4'b 0001, // index[ 16] ALERT_HANDLER_ALERT_REGWEN_10 + 4'b 0001, // index[ 17] ALERT_HANDLER_ALERT_REGWEN_11 + 4'b 0001, // index[ 18] ALERT_HANDLER_ALERT_REGWEN_12 + 4'b 0001, // index[ 19] ALERT_HANDLER_ALERT_REGWEN_13 + 4'b 0001, // index[ 20] ALERT_HANDLER_ALERT_REGWEN_14 + 4'b 0001, // index[ 21] ALERT_HANDLER_ALERT_REGWEN_15 + 4'b 0001, // index[ 22] ALERT_HANDLER_ALERT_REGWEN_16 + 4'b 0001, // index[ 23] ALERT_HANDLER_ALERT_REGWEN_17 + 4'b 0001, // index[ 24] ALERT_HANDLER_ALERT_REGWEN_18 + 4'b 0001, // index[ 25] ALERT_HANDLER_ALERT_REGWEN_19 + 4'b 0001, // index[ 26] ALERT_HANDLER_ALERT_REGWEN_20 + 4'b 0001, // index[ 27] ALERT_HANDLER_ALERT_REGWEN_21 + 4'b 0001, // index[ 28] ALERT_HANDLER_ALERT_REGWEN_22 + 4'b 0001, // index[ 29] ALERT_HANDLER_ALERT_REGWEN_23 + 4'b 0001, // index[ 30] ALERT_HANDLER_ALERT_REGWEN_24 + 4'b 0001, // index[ 31] ALERT_HANDLER_ALERT_REGWEN_25 + 4'b 0001, // index[ 32] ALERT_HANDLER_ALERT_REGWEN_26 + 4'b 0001, // index[ 33] ALERT_HANDLER_ALERT_REGWEN_27 + 4'b 0001, // index[ 34] ALERT_HANDLER_ALERT_REGWEN_28 + 4'b 0001, // index[ 35] ALERT_HANDLER_ALERT_REGWEN_29 + 4'b 0001, // index[ 36] ALERT_HANDLER_ALERT_REGWEN_30 + 4'b 0001, // index[ 37] ALERT_HANDLER_ALERT_REGWEN_31 + 4'b 0001, // index[ 38] ALERT_HANDLER_ALERT_REGWEN_32 + 4'b 0001, // index[ 39] ALERT_HANDLER_ALERT_REGWEN_33 + 4'b 0001, // index[ 40] ALERT_HANDLER_ALERT_REGWEN_34 + 4'b 0001, // index[ 41] ALERT_HANDLER_ALERT_REGWEN_35 + 4'b 0001, // index[ 42] ALERT_HANDLER_ALERT_REGWEN_36 + 4'b 0001, // index[ 43] ALERT_HANDLER_ALERT_REGWEN_37 + 4'b 0001, // index[ 44] ALERT_HANDLER_ALERT_REGWEN_38 + 4'b 0001, // index[ 45] ALERT_HANDLER_ALERT_REGWEN_39 + 4'b 0001, // index[ 46] ALERT_HANDLER_ALERT_REGWEN_40 + 4'b 0001, // index[ 47] ALERT_HANDLER_ALERT_REGWEN_41 + 4'b 0001, // index[ 48] ALERT_HANDLER_ALERT_REGWEN_42 + 4'b 0001, // index[ 49] ALERT_HANDLER_ALERT_REGWEN_43 + 4'b 0001, // index[ 50] ALERT_HANDLER_ALERT_REGWEN_44 + 4'b 0001, // index[ 51] ALERT_HANDLER_ALERT_REGWEN_45 + 4'b 0001, // index[ 52] ALERT_HANDLER_ALERT_REGWEN_46 + 4'b 0001, // index[ 53] ALERT_HANDLER_ALERT_REGWEN_47 + 4'b 0001, // index[ 54] ALERT_HANDLER_ALERT_REGWEN_48 + 4'b 0001, // index[ 55] ALERT_HANDLER_ALERT_REGWEN_49 + 4'b 0001, // index[ 56] ALERT_HANDLER_ALERT_REGWEN_50 + 4'b 0001, // index[ 57] ALERT_HANDLER_ALERT_REGWEN_51 + 4'b 0001, // index[ 58] ALERT_HANDLER_ALERT_REGWEN_52 + 4'b 0001, // index[ 59] ALERT_HANDLER_ALERT_REGWEN_53 + 4'b 0001, // index[ 60] ALERT_HANDLER_ALERT_REGWEN_54 + 4'b 0001, // index[ 61] ALERT_HANDLER_ALERT_REGWEN_55 + 4'b 0001, // index[ 62] ALERT_HANDLER_ALERT_REGWEN_56 + 4'b 0001, // index[ 63] ALERT_HANDLER_ALERT_REGWEN_57 + 4'b 0001, // index[ 64] ALERT_HANDLER_ALERT_REGWEN_58 + 4'b 0001, // index[ 65] ALERT_HANDLER_ALERT_REGWEN_59 + 4'b 0001, // index[ 66] ALERT_HANDLER_ALERT_REGWEN_60 + 4'b 0001, // index[ 67] ALERT_HANDLER_ALERT_REGWEN_61 + 4'b 0001, // index[ 68] ALERT_HANDLER_ALERT_REGWEN_62 + 4'b 0001, // index[ 69] ALERT_HANDLER_ALERT_REGWEN_63 + 4'b 0001, // index[ 70] ALERT_HANDLER_ALERT_REGWEN_64 + 4'b 0001, // index[ 71] ALERT_HANDLER_ALERT_EN_SHADOWED_0 + 4'b 0001, // index[ 72] ALERT_HANDLER_ALERT_EN_SHADOWED_1 + 4'b 0001, // index[ 73] ALERT_HANDLER_ALERT_EN_SHADOWED_2 + 4'b 0001, // index[ 74] ALERT_HANDLER_ALERT_EN_SHADOWED_3 + 4'b 0001, // index[ 75] ALERT_HANDLER_ALERT_EN_SHADOWED_4 + 4'b 0001, // index[ 76] ALERT_HANDLER_ALERT_EN_SHADOWED_5 + 4'b 0001, // index[ 77] ALERT_HANDLER_ALERT_EN_SHADOWED_6 + 4'b 0001, // index[ 78] ALERT_HANDLER_ALERT_EN_SHADOWED_7 + 4'b 0001, // index[ 79] ALERT_HANDLER_ALERT_EN_SHADOWED_8 + 4'b 0001, // index[ 80] ALERT_HANDLER_ALERT_EN_SHADOWED_9 + 4'b 0001, // index[ 81] ALERT_HANDLER_ALERT_EN_SHADOWED_10 + 4'b 0001, // index[ 82] ALERT_HANDLER_ALERT_EN_SHADOWED_11 + 4'b 0001, // index[ 83] ALERT_HANDLER_ALERT_EN_SHADOWED_12 + 4'b 0001, // index[ 84] ALERT_HANDLER_ALERT_EN_SHADOWED_13 + 4'b 0001, // index[ 85] ALERT_HANDLER_ALERT_EN_SHADOWED_14 + 4'b 0001, // index[ 86] ALERT_HANDLER_ALERT_EN_SHADOWED_15 + 4'b 0001, // index[ 87] ALERT_HANDLER_ALERT_EN_SHADOWED_16 + 4'b 0001, // index[ 88] ALERT_HANDLER_ALERT_EN_SHADOWED_17 + 4'b 0001, // index[ 89] ALERT_HANDLER_ALERT_EN_SHADOWED_18 + 4'b 0001, // index[ 90] ALERT_HANDLER_ALERT_EN_SHADOWED_19 + 4'b 0001, // index[ 91] ALERT_HANDLER_ALERT_EN_SHADOWED_20 + 4'b 0001, // index[ 92] ALERT_HANDLER_ALERT_EN_SHADOWED_21 + 4'b 0001, // index[ 93] ALERT_HANDLER_ALERT_EN_SHADOWED_22 + 4'b 0001, // index[ 94] ALERT_HANDLER_ALERT_EN_SHADOWED_23 + 4'b 0001, // index[ 95] ALERT_HANDLER_ALERT_EN_SHADOWED_24 + 4'b 0001, // index[ 96] ALERT_HANDLER_ALERT_EN_SHADOWED_25 + 4'b 0001, // index[ 97] ALERT_HANDLER_ALERT_EN_SHADOWED_26 + 4'b 0001, // index[ 98] ALERT_HANDLER_ALERT_EN_SHADOWED_27 + 4'b 0001, // index[ 99] ALERT_HANDLER_ALERT_EN_SHADOWED_28 + 4'b 0001, // index[100] ALERT_HANDLER_ALERT_EN_SHADOWED_29 + 4'b 0001, // index[101] ALERT_HANDLER_ALERT_EN_SHADOWED_30 + 4'b 0001, // index[102] ALERT_HANDLER_ALERT_EN_SHADOWED_31 + 4'b 0001, // index[103] ALERT_HANDLER_ALERT_EN_SHADOWED_32 + 4'b 0001, // index[104] ALERT_HANDLER_ALERT_EN_SHADOWED_33 + 4'b 0001, // index[105] ALERT_HANDLER_ALERT_EN_SHADOWED_34 + 4'b 0001, // index[106] ALERT_HANDLER_ALERT_EN_SHADOWED_35 + 4'b 0001, // index[107] ALERT_HANDLER_ALERT_EN_SHADOWED_36 + 4'b 0001, // index[108] ALERT_HANDLER_ALERT_EN_SHADOWED_37 + 4'b 0001, // index[109] ALERT_HANDLER_ALERT_EN_SHADOWED_38 + 4'b 0001, // index[110] ALERT_HANDLER_ALERT_EN_SHADOWED_39 + 4'b 0001, // index[111] ALERT_HANDLER_ALERT_EN_SHADOWED_40 + 4'b 0001, // index[112] ALERT_HANDLER_ALERT_EN_SHADOWED_41 + 4'b 0001, // index[113] ALERT_HANDLER_ALERT_EN_SHADOWED_42 + 4'b 0001, // index[114] ALERT_HANDLER_ALERT_EN_SHADOWED_43 + 4'b 0001, // index[115] ALERT_HANDLER_ALERT_EN_SHADOWED_44 + 4'b 0001, // index[116] ALERT_HANDLER_ALERT_EN_SHADOWED_45 + 4'b 0001, // index[117] ALERT_HANDLER_ALERT_EN_SHADOWED_46 + 4'b 0001, // index[118] ALERT_HANDLER_ALERT_EN_SHADOWED_47 + 4'b 0001, // index[119] ALERT_HANDLER_ALERT_EN_SHADOWED_48 + 4'b 0001, // index[120] ALERT_HANDLER_ALERT_EN_SHADOWED_49 + 4'b 0001, // index[121] ALERT_HANDLER_ALERT_EN_SHADOWED_50 + 4'b 0001, // index[122] ALERT_HANDLER_ALERT_EN_SHADOWED_51 + 4'b 0001, // index[123] ALERT_HANDLER_ALERT_EN_SHADOWED_52 + 4'b 0001, // index[124] ALERT_HANDLER_ALERT_EN_SHADOWED_53 + 4'b 0001, // index[125] ALERT_HANDLER_ALERT_EN_SHADOWED_54 + 4'b 0001, // index[126] ALERT_HANDLER_ALERT_EN_SHADOWED_55 + 4'b 0001, // index[127] ALERT_HANDLER_ALERT_EN_SHADOWED_56 + 4'b 0001, // index[128] ALERT_HANDLER_ALERT_EN_SHADOWED_57 + 4'b 0001, // index[129] ALERT_HANDLER_ALERT_EN_SHADOWED_58 + 4'b 0001, // index[130] ALERT_HANDLER_ALERT_EN_SHADOWED_59 + 4'b 0001, // index[131] ALERT_HANDLER_ALERT_EN_SHADOWED_60 + 4'b 0001, // index[132] ALERT_HANDLER_ALERT_EN_SHADOWED_61 + 4'b 0001, // index[133] ALERT_HANDLER_ALERT_EN_SHADOWED_62 + 4'b 0001, // index[134] ALERT_HANDLER_ALERT_EN_SHADOWED_63 + 4'b 0001, // index[135] ALERT_HANDLER_ALERT_EN_SHADOWED_64 + 4'b 0001, // index[136] ALERT_HANDLER_ALERT_CLASS_SHADOWED_0 + 4'b 0001, // index[137] ALERT_HANDLER_ALERT_CLASS_SHADOWED_1 + 4'b 0001, // index[138] ALERT_HANDLER_ALERT_CLASS_SHADOWED_2 + 4'b 0001, // index[139] ALERT_HANDLER_ALERT_CLASS_SHADOWED_3 + 4'b 0001, // index[140] ALERT_HANDLER_ALERT_CLASS_SHADOWED_4 + 4'b 0001, // index[141] ALERT_HANDLER_ALERT_CLASS_SHADOWED_5 + 4'b 0001, // index[142] ALERT_HANDLER_ALERT_CLASS_SHADOWED_6 + 4'b 0001, // index[143] ALERT_HANDLER_ALERT_CLASS_SHADOWED_7 + 4'b 0001, // index[144] ALERT_HANDLER_ALERT_CLASS_SHADOWED_8 + 4'b 0001, // index[145] ALERT_HANDLER_ALERT_CLASS_SHADOWED_9 + 4'b 0001, // index[146] ALERT_HANDLER_ALERT_CLASS_SHADOWED_10 + 4'b 0001, // index[147] ALERT_HANDLER_ALERT_CLASS_SHADOWED_11 + 4'b 0001, // index[148] ALERT_HANDLER_ALERT_CLASS_SHADOWED_12 + 4'b 0001, // index[149] ALERT_HANDLER_ALERT_CLASS_SHADOWED_13 + 4'b 0001, // index[150] ALERT_HANDLER_ALERT_CLASS_SHADOWED_14 + 4'b 0001, // index[151] ALERT_HANDLER_ALERT_CLASS_SHADOWED_15 + 4'b 0001, // index[152] ALERT_HANDLER_ALERT_CLASS_SHADOWED_16 + 4'b 0001, // index[153] ALERT_HANDLER_ALERT_CLASS_SHADOWED_17 + 4'b 0001, // index[154] ALERT_HANDLER_ALERT_CLASS_SHADOWED_18 + 4'b 0001, // index[155] ALERT_HANDLER_ALERT_CLASS_SHADOWED_19 + 4'b 0001, // index[156] ALERT_HANDLER_ALERT_CLASS_SHADOWED_20 + 4'b 0001, // index[157] ALERT_HANDLER_ALERT_CLASS_SHADOWED_21 + 4'b 0001, // index[158] ALERT_HANDLER_ALERT_CLASS_SHADOWED_22 + 4'b 0001, // index[159] ALERT_HANDLER_ALERT_CLASS_SHADOWED_23 + 4'b 0001, // index[160] ALERT_HANDLER_ALERT_CLASS_SHADOWED_24 + 4'b 0001, // index[161] ALERT_HANDLER_ALERT_CLASS_SHADOWED_25 + 4'b 0001, // index[162] ALERT_HANDLER_ALERT_CLASS_SHADOWED_26 + 4'b 0001, // index[163] ALERT_HANDLER_ALERT_CLASS_SHADOWED_27 + 4'b 0001, // index[164] ALERT_HANDLER_ALERT_CLASS_SHADOWED_28 + 4'b 0001, // index[165] ALERT_HANDLER_ALERT_CLASS_SHADOWED_29 + 4'b 0001, // index[166] ALERT_HANDLER_ALERT_CLASS_SHADOWED_30 + 4'b 0001, // index[167] ALERT_HANDLER_ALERT_CLASS_SHADOWED_31 + 4'b 0001, // index[168] ALERT_HANDLER_ALERT_CLASS_SHADOWED_32 + 4'b 0001, // index[169] ALERT_HANDLER_ALERT_CLASS_SHADOWED_33 + 4'b 0001, // index[170] ALERT_HANDLER_ALERT_CLASS_SHADOWED_34 + 4'b 0001, // index[171] ALERT_HANDLER_ALERT_CLASS_SHADOWED_35 + 4'b 0001, // index[172] ALERT_HANDLER_ALERT_CLASS_SHADOWED_36 + 4'b 0001, // index[173] ALERT_HANDLER_ALERT_CLASS_SHADOWED_37 + 4'b 0001, // index[174] ALERT_HANDLER_ALERT_CLASS_SHADOWED_38 + 4'b 0001, // index[175] ALERT_HANDLER_ALERT_CLASS_SHADOWED_39 + 4'b 0001, // index[176] ALERT_HANDLER_ALERT_CLASS_SHADOWED_40 + 4'b 0001, // index[177] ALERT_HANDLER_ALERT_CLASS_SHADOWED_41 + 4'b 0001, // index[178] ALERT_HANDLER_ALERT_CLASS_SHADOWED_42 + 4'b 0001, // index[179] ALERT_HANDLER_ALERT_CLASS_SHADOWED_43 + 4'b 0001, // index[180] ALERT_HANDLER_ALERT_CLASS_SHADOWED_44 + 4'b 0001, // index[181] ALERT_HANDLER_ALERT_CLASS_SHADOWED_45 + 4'b 0001, // index[182] ALERT_HANDLER_ALERT_CLASS_SHADOWED_46 + 4'b 0001, // index[183] ALERT_HANDLER_ALERT_CLASS_SHADOWED_47 + 4'b 0001, // index[184] ALERT_HANDLER_ALERT_CLASS_SHADOWED_48 + 4'b 0001, // index[185] ALERT_HANDLER_ALERT_CLASS_SHADOWED_49 + 4'b 0001, // index[186] ALERT_HANDLER_ALERT_CLASS_SHADOWED_50 + 4'b 0001, // index[187] ALERT_HANDLER_ALERT_CLASS_SHADOWED_51 + 4'b 0001, // index[188] ALERT_HANDLER_ALERT_CLASS_SHADOWED_52 + 4'b 0001, // index[189] ALERT_HANDLER_ALERT_CLASS_SHADOWED_53 + 4'b 0001, // index[190] ALERT_HANDLER_ALERT_CLASS_SHADOWED_54 + 4'b 0001, // index[191] ALERT_HANDLER_ALERT_CLASS_SHADOWED_55 + 4'b 0001, // index[192] ALERT_HANDLER_ALERT_CLASS_SHADOWED_56 + 4'b 0001, // index[193] ALERT_HANDLER_ALERT_CLASS_SHADOWED_57 + 4'b 0001, // index[194] ALERT_HANDLER_ALERT_CLASS_SHADOWED_58 + 4'b 0001, // index[195] ALERT_HANDLER_ALERT_CLASS_SHADOWED_59 + 4'b 0001, // index[196] ALERT_HANDLER_ALERT_CLASS_SHADOWED_60 + 4'b 0001, // index[197] ALERT_HANDLER_ALERT_CLASS_SHADOWED_61 + 4'b 0001, // index[198] ALERT_HANDLER_ALERT_CLASS_SHADOWED_62 + 4'b 0001, // index[199] ALERT_HANDLER_ALERT_CLASS_SHADOWED_63 + 4'b 0001, // index[200] ALERT_HANDLER_ALERT_CLASS_SHADOWED_64 + 4'b 0001, // index[201] ALERT_HANDLER_ALERT_CAUSE_0 + 4'b 0001, // index[202] ALERT_HANDLER_ALERT_CAUSE_1 + 4'b 0001, // index[203] ALERT_HANDLER_ALERT_CAUSE_2 + 4'b 0001, // index[204] ALERT_HANDLER_ALERT_CAUSE_3 + 4'b 0001, // index[205] ALERT_HANDLER_ALERT_CAUSE_4 + 4'b 0001, // index[206] ALERT_HANDLER_ALERT_CAUSE_5 + 4'b 0001, // index[207] ALERT_HANDLER_ALERT_CAUSE_6 + 4'b 0001, // index[208] ALERT_HANDLER_ALERT_CAUSE_7 + 4'b 0001, // index[209] ALERT_HANDLER_ALERT_CAUSE_8 + 4'b 0001, // index[210] ALERT_HANDLER_ALERT_CAUSE_9 + 4'b 0001, // index[211] ALERT_HANDLER_ALERT_CAUSE_10 + 4'b 0001, // index[212] ALERT_HANDLER_ALERT_CAUSE_11 + 4'b 0001, // index[213] ALERT_HANDLER_ALERT_CAUSE_12 + 4'b 0001, // index[214] ALERT_HANDLER_ALERT_CAUSE_13 + 4'b 0001, // index[215] ALERT_HANDLER_ALERT_CAUSE_14 + 4'b 0001, // index[216] ALERT_HANDLER_ALERT_CAUSE_15 + 4'b 0001, // index[217] ALERT_HANDLER_ALERT_CAUSE_16 + 4'b 0001, // index[218] ALERT_HANDLER_ALERT_CAUSE_17 + 4'b 0001, // index[219] ALERT_HANDLER_ALERT_CAUSE_18 + 4'b 0001, // index[220] ALERT_HANDLER_ALERT_CAUSE_19 + 4'b 0001, // index[221] ALERT_HANDLER_ALERT_CAUSE_20 + 4'b 0001, // index[222] ALERT_HANDLER_ALERT_CAUSE_21 + 4'b 0001, // index[223] ALERT_HANDLER_ALERT_CAUSE_22 + 4'b 0001, // index[224] ALERT_HANDLER_ALERT_CAUSE_23 + 4'b 0001, // index[225] ALERT_HANDLER_ALERT_CAUSE_24 + 4'b 0001, // index[226] ALERT_HANDLER_ALERT_CAUSE_25 + 4'b 0001, // index[227] ALERT_HANDLER_ALERT_CAUSE_26 + 4'b 0001, // index[228] ALERT_HANDLER_ALERT_CAUSE_27 + 4'b 0001, // index[229] ALERT_HANDLER_ALERT_CAUSE_28 + 4'b 0001, // index[230] ALERT_HANDLER_ALERT_CAUSE_29 + 4'b 0001, // index[231] ALERT_HANDLER_ALERT_CAUSE_30 + 4'b 0001, // index[232] ALERT_HANDLER_ALERT_CAUSE_31 + 4'b 0001, // index[233] ALERT_HANDLER_ALERT_CAUSE_32 + 4'b 0001, // index[234] ALERT_HANDLER_ALERT_CAUSE_33 + 4'b 0001, // index[235] ALERT_HANDLER_ALERT_CAUSE_34 + 4'b 0001, // index[236] ALERT_HANDLER_ALERT_CAUSE_35 + 4'b 0001, // index[237] ALERT_HANDLER_ALERT_CAUSE_36 + 4'b 0001, // index[238] ALERT_HANDLER_ALERT_CAUSE_37 + 4'b 0001, // index[239] ALERT_HANDLER_ALERT_CAUSE_38 + 4'b 0001, // index[240] ALERT_HANDLER_ALERT_CAUSE_39 + 4'b 0001, // index[241] ALERT_HANDLER_ALERT_CAUSE_40 + 4'b 0001, // index[242] ALERT_HANDLER_ALERT_CAUSE_41 + 4'b 0001, // index[243] ALERT_HANDLER_ALERT_CAUSE_42 + 4'b 0001, // index[244] ALERT_HANDLER_ALERT_CAUSE_43 + 4'b 0001, // index[245] ALERT_HANDLER_ALERT_CAUSE_44 + 4'b 0001, // index[246] ALERT_HANDLER_ALERT_CAUSE_45 + 4'b 0001, // index[247] ALERT_HANDLER_ALERT_CAUSE_46 + 4'b 0001, // index[248] ALERT_HANDLER_ALERT_CAUSE_47 + 4'b 0001, // index[249] ALERT_HANDLER_ALERT_CAUSE_48 + 4'b 0001, // index[250] ALERT_HANDLER_ALERT_CAUSE_49 + 4'b 0001, // index[251] ALERT_HANDLER_ALERT_CAUSE_50 + 4'b 0001, // index[252] ALERT_HANDLER_ALERT_CAUSE_51 + 4'b 0001, // index[253] ALERT_HANDLER_ALERT_CAUSE_52 + 4'b 0001, // index[254] ALERT_HANDLER_ALERT_CAUSE_53 + 4'b 0001, // index[255] ALERT_HANDLER_ALERT_CAUSE_54 + 4'b 0001, // index[256] ALERT_HANDLER_ALERT_CAUSE_55 + 4'b 0001, // index[257] ALERT_HANDLER_ALERT_CAUSE_56 + 4'b 0001, // index[258] ALERT_HANDLER_ALERT_CAUSE_57 + 4'b 0001, // index[259] ALERT_HANDLER_ALERT_CAUSE_58 + 4'b 0001, // index[260] ALERT_HANDLER_ALERT_CAUSE_59 + 4'b 0001, // index[261] ALERT_HANDLER_ALERT_CAUSE_60 + 4'b 0001, // index[262] ALERT_HANDLER_ALERT_CAUSE_61 + 4'b 0001, // index[263] ALERT_HANDLER_ALERT_CAUSE_62 + 4'b 0001, // index[264] ALERT_HANDLER_ALERT_CAUSE_63 + 4'b 0001, // index[265] ALERT_HANDLER_ALERT_CAUSE_64 + 4'b 0001, // index[266] ALERT_HANDLER_LOC_ALERT_REGWEN_0 + 4'b 0001, // index[267] ALERT_HANDLER_LOC_ALERT_REGWEN_1 + 4'b 0001, // index[268] ALERT_HANDLER_LOC_ALERT_REGWEN_2 + 4'b 0001, // index[269] ALERT_HANDLER_LOC_ALERT_REGWEN_3 + 4'b 0001, // index[270] ALERT_HANDLER_LOC_ALERT_REGWEN_4 + 4'b 0001, // index[271] ALERT_HANDLER_LOC_ALERT_REGWEN_5 + 4'b 0001, // index[272] ALERT_HANDLER_LOC_ALERT_REGWEN_6 + 4'b 0001, // index[273] ALERT_HANDLER_LOC_ALERT_EN_SHADOWED_0 + 4'b 0001, // index[274] ALERT_HANDLER_LOC_ALERT_EN_SHADOWED_1 + 4'b 0001, // index[275] ALERT_HANDLER_LOC_ALERT_EN_SHADOWED_2 + 4'b 0001, // index[276] ALERT_HANDLER_LOC_ALERT_EN_SHADOWED_3 + 4'b 0001, // index[277] ALERT_HANDLER_LOC_ALERT_EN_SHADOWED_4 + 4'b 0001, // index[278] ALERT_HANDLER_LOC_ALERT_EN_SHADOWED_5 + 4'b 0001, // index[279] ALERT_HANDLER_LOC_ALERT_EN_SHADOWED_6 + 4'b 0001, // index[280] ALERT_HANDLER_LOC_ALERT_CLASS_SHADOWED_0 + 4'b 0001, // index[281] ALERT_HANDLER_LOC_ALERT_CLASS_SHADOWED_1 + 4'b 0001, // index[282] ALERT_HANDLER_LOC_ALERT_CLASS_SHADOWED_2 + 4'b 0001, // index[283] ALERT_HANDLER_LOC_ALERT_CLASS_SHADOWED_3 + 4'b 0001, // index[284] ALERT_HANDLER_LOC_ALERT_CLASS_SHADOWED_4 + 4'b 0001, // index[285] ALERT_HANDLER_LOC_ALERT_CLASS_SHADOWED_5 + 4'b 0001, // index[286] ALERT_HANDLER_LOC_ALERT_CLASS_SHADOWED_6 + 4'b 0001, // index[287] ALERT_HANDLER_LOC_ALERT_CAUSE_0 + 4'b 0001, // index[288] ALERT_HANDLER_LOC_ALERT_CAUSE_1 + 4'b 0001, // index[289] ALERT_HANDLER_LOC_ALERT_CAUSE_2 + 4'b 0001, // index[290] ALERT_HANDLER_LOC_ALERT_CAUSE_3 + 4'b 0001, // index[291] ALERT_HANDLER_LOC_ALERT_CAUSE_4 + 4'b 0001, // index[292] ALERT_HANDLER_LOC_ALERT_CAUSE_5 + 4'b 0001, // index[293] ALERT_HANDLER_LOC_ALERT_CAUSE_6 + 4'b 0001, // index[294] ALERT_HANDLER_CLASSA_REGWEN + 4'b 0011, // index[295] ALERT_HANDLER_CLASSA_CTRL_SHADOWED + 4'b 0001, // index[296] ALERT_HANDLER_CLASSA_CLR_REGWEN + 4'b 0001, // index[297] ALERT_HANDLER_CLASSA_CLR_SHADOWED + 4'b 0011, // index[298] ALERT_HANDLER_CLASSA_ACCUM_CNT + 4'b 0011, // index[299] ALERT_HANDLER_CLASSA_ACCUM_THRESH_SHADOWED + 4'b 1111, // index[300] ALERT_HANDLER_CLASSA_TIMEOUT_CYC_SHADOWED + 4'b 0001, // index[301] ALERT_HANDLER_CLASSA_CRASHDUMP_TRIGGER_SHADOWED + 4'b 1111, // index[302] ALERT_HANDLER_CLASSA_PHASE0_CYC_SHADOWED + 4'b 1111, // index[303] ALERT_HANDLER_CLASSA_PHASE1_CYC_SHADOWED + 4'b 1111, // index[304] ALERT_HANDLER_CLASSA_PHASE2_CYC_SHADOWED + 4'b 1111, // index[305] ALERT_HANDLER_CLASSA_PHASE3_CYC_SHADOWED + 4'b 1111, // index[306] ALERT_HANDLER_CLASSA_ESC_CNT + 4'b 0001, // index[307] ALERT_HANDLER_CLASSA_STATE + 4'b 0001, // index[308] ALERT_HANDLER_CLASSB_REGWEN + 4'b 0011, // index[309] ALERT_HANDLER_CLASSB_CTRL_SHADOWED + 4'b 0001, // index[310] ALERT_HANDLER_CLASSB_CLR_REGWEN + 4'b 0001, // index[311] ALERT_HANDLER_CLASSB_CLR_SHADOWED + 4'b 0011, // index[312] ALERT_HANDLER_CLASSB_ACCUM_CNT + 4'b 0011, // index[313] ALERT_HANDLER_CLASSB_ACCUM_THRESH_SHADOWED + 4'b 1111, // index[314] ALERT_HANDLER_CLASSB_TIMEOUT_CYC_SHADOWED + 4'b 0001, // index[315] ALERT_HANDLER_CLASSB_CRASHDUMP_TRIGGER_SHADOWED + 4'b 1111, // index[316] ALERT_HANDLER_CLASSB_PHASE0_CYC_SHADOWED + 4'b 1111, // index[317] ALERT_HANDLER_CLASSB_PHASE1_CYC_SHADOWED + 4'b 1111, // index[318] ALERT_HANDLER_CLASSB_PHASE2_CYC_SHADOWED + 4'b 1111, // index[319] ALERT_HANDLER_CLASSB_PHASE3_CYC_SHADOWED + 4'b 1111, // index[320] ALERT_HANDLER_CLASSB_ESC_CNT + 4'b 0001, // index[321] ALERT_HANDLER_CLASSB_STATE + 4'b 0001, // index[322] ALERT_HANDLER_CLASSC_REGWEN + 4'b 0011, // index[323] ALERT_HANDLER_CLASSC_CTRL_SHADOWED + 4'b 0001, // index[324] ALERT_HANDLER_CLASSC_CLR_REGWEN + 4'b 0001, // index[325] ALERT_HANDLER_CLASSC_CLR_SHADOWED + 4'b 0011, // index[326] ALERT_HANDLER_CLASSC_ACCUM_CNT + 4'b 0011, // index[327] ALERT_HANDLER_CLASSC_ACCUM_THRESH_SHADOWED + 4'b 1111, // index[328] ALERT_HANDLER_CLASSC_TIMEOUT_CYC_SHADOWED + 4'b 0001, // index[329] ALERT_HANDLER_CLASSC_CRASHDUMP_TRIGGER_SHADOWED + 4'b 1111, // index[330] ALERT_HANDLER_CLASSC_PHASE0_CYC_SHADOWED + 4'b 1111, // index[331] ALERT_HANDLER_CLASSC_PHASE1_CYC_SHADOWED + 4'b 1111, // index[332] ALERT_HANDLER_CLASSC_PHASE2_CYC_SHADOWED + 4'b 1111, // index[333] ALERT_HANDLER_CLASSC_PHASE3_CYC_SHADOWED + 4'b 1111, // index[334] ALERT_HANDLER_CLASSC_ESC_CNT + 4'b 0001, // index[335] ALERT_HANDLER_CLASSC_STATE + 4'b 0001, // index[336] ALERT_HANDLER_CLASSD_REGWEN + 4'b 0011, // index[337] ALERT_HANDLER_CLASSD_CTRL_SHADOWED + 4'b 0001, // index[338] ALERT_HANDLER_CLASSD_CLR_REGWEN + 4'b 0001, // index[339] ALERT_HANDLER_CLASSD_CLR_SHADOWED + 4'b 0011, // index[340] ALERT_HANDLER_CLASSD_ACCUM_CNT + 4'b 0011, // index[341] ALERT_HANDLER_CLASSD_ACCUM_THRESH_SHADOWED + 4'b 1111, // index[342] ALERT_HANDLER_CLASSD_TIMEOUT_CYC_SHADOWED + 4'b 0001, // index[343] ALERT_HANDLER_CLASSD_CRASHDUMP_TRIGGER_SHADOWED + 4'b 1111, // index[344] ALERT_HANDLER_CLASSD_PHASE0_CYC_SHADOWED + 4'b 1111, // index[345] ALERT_HANDLER_CLASSD_PHASE1_CYC_SHADOWED + 4'b 1111, // index[346] ALERT_HANDLER_CLASSD_PHASE2_CYC_SHADOWED + 4'b 1111, // index[347] ALERT_HANDLER_CLASSD_PHASE3_CYC_SHADOWED + 4'b 1111, // index[348] ALERT_HANDLER_CLASSD_ESC_CNT + 4'b 0001 // index[349] ALERT_HANDLER_CLASSD_STATE + }; + +endpackage diff --git a/src/caliptra_prim/config/compile.yml b/src/caliptra_prim/config/compile.yml index f89a74deb..fac767548 100644 --- a/src/caliptra_prim/config/compile.yml +++ b/src/caliptra_prim/config/compile.yml @@ -17,6 +17,7 @@ targets: - $COMPILE_ROOT/rtl/caliptra_prim_secded_pkg.sv - $COMPILE_ROOT/rtl/caliptra_prim_otp_pkg.sv - $COMPILE_ROOT/rtl/caliptra_prim_ram_1p_pkg.sv + - $COMPILE_ROOT/rtl/caliptra_prim_esc_pkg.sv tb: directories: [$COMPILE_ROOT/rtl] files: @@ -30,6 +31,7 @@ targets: - $COMPILE_ROOT/rtl/caliptra_prim_secded_pkg.sv - $COMPILE_ROOT/rtl/caliptra_prim_otp_pkg.sv - $COMPILE_ROOT/rtl/caliptra_prim_ram_1p_pkg.sv + - $COMPILE_ROOT/rtl/caliptra_prim_esc_pkg.sv --- provides: [caliptra_prim] schema_version: 2.4.0 diff --git a/src/caliptra_prim/rtl/caliptra_prim_esc_pkg.sv b/src/caliptra_prim/rtl/caliptra_prim_esc_pkg.sv new file mode 100644 index 000000000..0fdb8ad53 --- /dev/null +++ b/src/caliptra_prim/rtl/caliptra_prim_esc_pkg.sv @@ -0,0 +1,23 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +package caliptra_prim_esc_pkg; + + typedef struct packed { + logic esc_p; + logic esc_n; + } esc_tx_t; + + typedef struct packed { + logic resp_p; + logic resp_n; + } esc_rx_t; + + parameter esc_tx_t ESC_TX_DEFAULT = '{esc_p: 1'b0, + esc_n: 1'b1}; + + parameter esc_rx_t ESC_RX_DEFAULT = '{resp_p: 1'b0, + resp_n: 1'b1}; + +endpackage : caliptra_prim_esc_pkg diff --git a/src/dm/config/compile.yml b/src/dm/config/compile.yml new file mode 100644 index 000000000..1b650062e --- /dev/null +++ b/src/dm/config/compile.yml @@ -0,0 +1,11 @@ +provides: [dm_pkg] +schema_version: 2.4.0 +targets: + rtl: + directories: [$COMPILE_ROOT/rtl] + files: + - $COMPILE_ROOT/rtl/dm_pkg.sv + tb: + directories: [$COMPILE_ROOT/rtl] + files: + - $COMPILE_ROOT/rtl/dm_pkg.sv diff --git a/src/dm/rtl/dm_pkg.sv b/src/dm/rtl/dm_pkg.sv new file mode 100644 index 000000000..a8a27d2f1 --- /dev/null +++ b/src/dm/rtl/dm_pkg.sv @@ -0,0 +1,451 @@ +/* Copyright 2018 ETH Zurich and University of Bologna. + * Copyright and related rights are licensed under the Solderpad Hardware + * License, Version 0.51 (the “License”); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://solderpad.org/licenses/SHL-0.51. Unless required by applicable law + * or agreed to in writing, software, hardware and materials distributed under + * this License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR + * CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + * + * File: dm_pkg.sv + * Author: Florian Zaruba + * Date: 30.6.2018 + * + * Description: Debug-module package, contains common system definitions. + * + */ + +package dm; + localparam logic [3:0] DbgVersion013 = 4'h2; + // size of program buffer in junks of 32-bit words + localparam logic [4:0] ProgBufSize = 5'h8; + + // amount of data count registers implemented + localparam logic [3:0] DataCount = 4'h2; + + // address to which a hart should jump when it was requested to halt + localparam logic [63:0] HaltAddress = 64'h800; + localparam logic [63:0] ResumeAddress = HaltAddress + 8; + localparam logic [63:0] ExceptionAddress = HaltAddress + 16; + + // address where data0-15 is shadowed or if shadowed in a CSR + // address of the first CSR used for shadowing the data + localparam logic [11:0] DataAddr = 12'h380; // we are aligned with Rocket here + + // debug registers + typedef enum logic [7:0] { + Data0 = 8'h04, + Data1 = 8'h05, + Data2 = 8'h06, + Data3 = 8'h07, + Data4 = 8'h08, + Data5 = 8'h09, + Data6 = 8'h0A, + Data7 = 8'h0B, + Data8 = 8'h0C, + Data9 = 8'h0D, + Data10 = 8'h0E, + Data11 = 8'h0F, + DMControl = 8'h10, + DMStatus = 8'h11, // r/o + Hartinfo = 8'h12, + HaltSum1 = 8'h13, + HAWindowSel = 8'h14, + HAWindow = 8'h15, + AbstractCS = 8'h16, + Command = 8'h17, + AbstractAuto = 8'h18, + DevTreeAddr0 = 8'h19, + DevTreeAddr1 = 8'h1A, + DevTreeAddr2 = 8'h1B, + DevTreeAddr3 = 8'h1C, + NextDM = 8'h1D, + ProgBuf0 = 8'h20, + ProgBuf1 = 8'h21, + ProgBuf2 = 8'h22, + ProgBuf3 = 8'h23, + ProgBuf4 = 8'h24, + ProgBuf5 = 8'h25, + ProgBuf6 = 8'h26, + ProgBuf7 = 8'h27, + ProgBuf8 = 8'h28, + ProgBuf9 = 8'h29, + ProgBuf10 = 8'h2A, + ProgBuf11 = 8'h2B, + ProgBuf12 = 8'h2C, + ProgBuf13 = 8'h2D, + ProgBuf14 = 8'h2E, + ProgBuf15 = 8'h2F, + AuthData = 8'h30, + HaltSum2 = 8'h34, + HaltSum3 = 8'h35, + SBAddress3 = 8'h37, + SBCS = 8'h38, + SBAddress0 = 8'h39, + SBAddress1 = 8'h3A, + SBAddress2 = 8'h3B, + SBData0 = 8'h3C, + SBData1 = 8'h3D, + SBData2 = 8'h3E, + SBData3 = 8'h3F, + HaltSum0 = 8'h40 + } dm_csr_e; + + // debug causes + localparam logic [2:0] CauseBreakpoint = 3'h1; + localparam logic [2:0] CauseTrigger = 3'h2; + localparam logic [2:0] CauseRequest = 3'h3; + localparam logic [2:0] CauseSingleStep = 3'h4; + + typedef struct packed { + logic [31:23] zero1; + logic impebreak; + logic [21:20] zero0; + logic allhavereset; + logic anyhavereset; + logic allresumeack; + logic anyresumeack; + logic allnonexistent; + logic anynonexistent; + logic allunavail; + logic anyunavail; + logic allrunning; + logic anyrunning; + logic allhalted; + logic anyhalted; + logic authenticated; + logic authbusy; + logic hasresethaltreq; + logic devtreevalid; + logic [3:0] version; + } dmstatus_t; + + typedef struct packed { + logic haltreq; + logic resumereq; + logic hartreset; + logic ackhavereset; + logic zero1; + logic hasel; + logic [25:16] hartsello; + logic [15:6] hartselhi; + logic [5:4] zero0; + logic setresethaltreq; + logic clrresethaltreq; + logic ndmreset; + logic dmactive; + } dmcontrol_t; + + typedef struct packed { + logic [31:24] zero1; + logic [23:20] nscratch; + logic [19:17] zero0; + logic dataaccess; + logic [15:12] datasize; + logic [11:0] dataaddr; + } hartinfo_t; + + typedef enum logic [2:0] { + CmdErrNone, CmdErrBusy, CmdErrNotSupported, + CmdErrorException, CmdErrorHaltResume, + CmdErrorBus, CmdErrorOther = 7 + } cmderr_e; + + typedef struct packed { + logic [31:29] zero3; + logic [28:24] progbufsize; + logic [23:13] zero2; + logic busy; + logic zero1; + cmderr_e cmderr; + logic [7:4] zero0; + logic [3:0] datacount; + } abstractcs_t; + + typedef enum logic [7:0] { + AccessRegister = 8'h0, + QuickAccess = 8'h1, + AccessMemory = 8'h2 + } cmd_e; + + typedef struct packed { + cmd_e cmdtype; + logic [23:0] control; + } command_t; + + typedef struct packed { + logic [31:16] autoexecprogbuf; + logic [15:12] zero0; + logic [11:0] autoexecdata; + } abstractauto_t; + + typedef struct packed { + logic zero1; + logic [22:20] aarsize; + logic aarpostincrement; + logic postexec; + logic transfer; + logic write; + logic [15:0] regno; + } ac_ar_cmd_t; + + // DTM + typedef enum logic [1:0] { + DTM_NOP = 2'h0, + DTM_READ = 2'h1, + DTM_WRITE = 2'h2 + } dtm_op_e; + + typedef enum logic [1:0] { + DTM_SUCCESS = 2'h0, + DTM_ERR = 2'h2, + DTM_BUSY = 2'h3 + } dtm_op_status_e; + + typedef struct packed { + logic [31:29] sbversion; + logic [28:23] zero0; + logic sbbusyerror; + logic sbbusy; + logic sbreadonaddr; + logic [19:17] sbaccess; + logic sbautoincrement; + logic sbreadondata; + logic [14:12] sberror; + logic [11:5] sbasize; + logic sbaccess128; + logic sbaccess64; + logic sbaccess32; + logic sbaccess16; + logic sbaccess8; + } sbcs_t; + + typedef struct packed { + logic [31:0] addr; + dtm_op_e op; + logic [31:0] data; + } dmi_req_t; + + typedef struct packed { + logic [31:0] data; + logic [1:0] resp; + } dmi_resp_t; + + typedef struct packed { + logic [31:18] zero1; + logic dmihardreset; + logic dmireset; + logic zero0; + logic [14:12] idle; + logic [11:10] dmistat; + logic [9:4] abits; + logic [3:0] version; + } dtmcs_t; + + // privilege levels + typedef enum logic[1:0] { + PRIV_LVL_M = 2'b11, + PRIV_LVL_S = 2'b01, + PRIV_LVL_U = 2'b00 + } priv_lvl_t; + + // debugregs in core + typedef struct packed { + logic [31:28] xdebugver; + logic [27:16] zero2; + logic ebreakm; + logic zero1; + logic ebreaks; + logic ebreaku; + logic stepie; + logic stopcount; + logic stoptime; + logic [8:6] cause; + logic zero0; + logic mprven; + logic nmip; + logic step; + priv_lvl_t prv; + } dcsr_t; + + // CSRs + typedef enum logic [11:0] { + // Floating-Point CSRs + CSR_FFLAGS = 12'h001, + CSR_FRM = 12'h002, + CSR_FCSR = 12'h003, + CSR_FTRAN = 12'h800, + // Supervisor Mode CSRs + CSR_SSTATUS = 12'h100, + CSR_SIE = 12'h104, + CSR_STVEC = 12'h105, + CSR_SCOUNTEREN = 12'h106, + CSR_SSCRATCH = 12'h140, + CSR_SEPC = 12'h141, + CSR_SCAUSE = 12'h142, + CSR_STVAL = 12'h143, + CSR_SIP = 12'h144, + CSR_SATP = 12'h180, + // Machine Mode CSRs + CSR_MSTATUS = 12'h300, + CSR_MISA = 12'h301, + CSR_MEDELEG = 12'h302, + CSR_MIDELEG = 12'h303, + CSR_MIE = 12'h304, + CSR_MTVEC = 12'h305, + CSR_MCOUNTEREN = 12'h306, + CSR_MSCRATCH = 12'h340, + CSR_MEPC = 12'h341, + CSR_MCAUSE = 12'h342, + CSR_MTVAL = 12'h343, + CSR_MIP = 12'h344, + CSR_PMPCFG0 = 12'h3A0, + CSR_PMPADDR0 = 12'h3B0, + CSR_MVENDORID = 12'hF11, + CSR_MARCHID = 12'hF12, + CSR_MIMPID = 12'hF13, + CSR_MHARTID = 12'hF14, + CSR_MCYCLE = 12'hB00, + CSR_MINSTRET = 12'hB02, + CSR_DCACHE = 12'h701, + CSR_ICACHE = 12'h700, + + CSR_TSELECT = 12'h7A0, + CSR_TDATA1 = 12'h7A1, + CSR_TDATA2 = 12'h7A2, + CSR_TDATA3 = 12'h7A3, + CSR_TINFO = 12'h7A4, + + // Debug CSR + CSR_DCSR = 12'h7b0, + CSR_DPC = 12'h7b1, + CSR_DSCRATCH0 = 12'h7b2, // optional + CSR_DSCRATCH1 = 12'h7b3, // optional + + // Counters and Timers + CSR_CYCLE = 12'hC00, + CSR_TIME = 12'hC01, + CSR_INSTRET = 12'hC02 + } csr_reg_t; + + // SBA state + typedef enum logic [2:0] { + Idle, + Read, + Write, + WaitRead, + WaitWrite + } sba_state_e; + + // Instruction Generation Helpers + function automatic logic [31:0] jal (logic [4:0] rd, + logic [20:0] imm); + // OpCode Jal + return {imm[20], imm[10:1], imm[11], imm[19:12], rd, 7'h6f}; + endfunction + + function automatic logic [31:0] jalr (logic [4:0] rd, + logic [4:0] rs1, + logic [11:0] offset); + // OpCode Jal + return {offset[11:0], rs1, 3'b0, rd, 7'h67}; + endfunction + + function automatic logic [31:0] andi (logic [4:0] rd, + logic [4:0] rs1, + logic [11:0] imm); + // OpCode andi + return {imm[11:0], rs1, 3'h7, rd, 7'h13}; + endfunction + + function automatic logic [31:0] slli (logic [4:0] rd, + logic [4:0] rs1, + logic [5:0] shamt); + // OpCode slli + return {6'b0, shamt[5:0], rs1, 3'h1, rd, 7'h13}; + endfunction + + function automatic logic [31:0] srli (logic [4:0] rd, + logic [4:0] rs1, + logic [5:0] shamt); + // OpCode srli + return {6'b0, shamt[5:0], rs1, 3'h5, rd, 7'h13}; + endfunction + + function automatic logic [31:0] load (logic [2:0] size, + logic [4:0] dest, + logic [4:0] base, + logic [11:0] offset); + // OpCode Load + return {offset[11:0], base, size, dest, 7'h03}; + endfunction + + function automatic logic [31:0] auipc (logic [4:0] rd, + logic [20:0] imm); + // OpCode Auipc + return {imm[20], imm[10:1], imm[11], imm[19:12], rd, 7'h17}; + endfunction + + function automatic logic [31:0] store (logic [2:0] size, + logic [4:0] src, + logic [4:0] base, + logic [11:0] offset); + // OpCode Store + return {offset[11:5], src, base, size, offset[4:0], 7'h23}; + endfunction + + function automatic logic [31:0] float_load (logic [2:0] size, + logic [4:0] dest, + logic [4:0] base, + logic [11:0] offset); + // OpCode Load + return {offset[11:0], base, size, dest, 7'b00_001_11}; + endfunction + + function automatic logic [31:0] float_store (logic [2:0] size, + logic [4:0] src, + logic [4:0] base, + logic [11:0] offset); + // OpCode Store + return {offset[11:5], src, base, size, offset[4:0], 7'b01_001_11}; + endfunction + + function automatic logic [31:0] csrw (csr_reg_t csr, + logic [4:0] rs1); + // CSRRW, rd, OpCode System + return {csr, rs1, 3'h1, 5'h0, 7'h73}; + endfunction + + function automatic logic [31:0] csrr (csr_reg_t csr, + logic [4:0] dest); + // rs1, CSRRS, rd, OpCode System + return {csr, 5'h0, 3'h2, dest, 7'h73}; + endfunction + + function automatic logic [31:0] branch(logic [4:0] src2, + logic [4:0] src1, + logic [2:0] funct3, + logic [11:0] offset); + // OpCode Branch + return {offset[11], offset[9:4], src2, src1, funct3, + offset[3:0], offset[10], 7'b11_000_11}; + endfunction + + function automatic logic [31:0] ebreak (); + return 32'h00100073; + endfunction + + function automatic logic [31:0] wfi (); + return 32'h10500073; + endfunction + + function automatic logic [31:0] nop (); + return 32'h00000013; + endfunction + + function automatic logic [31:0] illegal (); + return 32'h00000000; + endfunction + +endpackage : dm diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/fuse_ctrl_bench.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/fuse_ctrl_bench.yaml new file mode 100644 index 000000000..c7d74614a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/fuse_ctrl_bench.yaml @@ -0,0 +1,51 @@ +uvmf: + benches: + fuse_ctrl: + + active_passive: + - bfm_name: fuse_ctrl_rst_in_agent + value: ACTIVE + - bfm_name: fuse_ctrl_rst_out_agent + value: PASSIVE + ############# WRITE AGENTS ########## + - bfm_name: fuse_ctrl_core_axi_write_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_core_axi_write_out_if_agent + value: PASSIVE + - bfm_name: fuse_ctrl_prim_axi_write_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_prim_axi_write_out_if_agent + value: PASSIVE + ############# READ AGENTS ########### + - bfm_name: fuse_ctrl_core_axi_read_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_core_axi_read_out_if_agent + value: PASSIVE + - bfm_name: fuse_ctrl_prim_axi_read_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_prim_axi_read_out_if_agent + value: PASSIVE + - bfm_name: fuse_ctrl_secreg_axi_read_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_secreg_axi_read_out_if_agent + value: PASSIVE + ############ OTHER AGENTS ########### + - bfm_name: fuse_ctrl_lc_otp_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_lc_otp_out_if_agent + value: PASSIVE + - bfm_name: fuse_ctrl_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_out_if_agent + value: PASSIVE + + + clock_half_period: 5ns + clock_phase_offset: 0ns + + interface_params: [] + + reset_assertion_level: 'False' + reset_duration: 200ns + + top_env: fuse_ctrl \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/fuse_ctrl_environment.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/fuse_ctrl_environment.yaml new file mode 100644 index 000000000..15b1eb3ab --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/fuse_ctrl_environment.yaml @@ -0,0 +1,106 @@ +uvmf: + environments: + fuse_ctrl: + agents: + - name: fuse_ctrl_rst_in_agent + type: fuse_ctrl_rst_in + initiator_responder: "INITIATOR" + - name: fuse_ctrl_rst_out_agent + type: fuse_ctrl_rst_out + initiator_responder: "RESPONDER" + - name: fuse_ctrl_core_axi_write_in_if_agent + type: fuse_ctrl_core_axi_write_in + initiator_responder: "INITIATOR" + - name: fuse_ctrl_core_axi_write_out_if_agent + type: fuse_ctrl_core_axi_write_out + initiator_responder: "RESPONDER" + - name: fuse_ctrl_prim_axi_write_in_if_agent + type: fuse_ctrl_prim_axi_write_in + initiator_responder: "INITIATOR" + - name: fuse_ctrl_prim_axi_write_out_if_agent + type: fuse_ctrl_prim_axi_write_out + initiator_responder: "RESPONDER" + - name: fuse_ctrl_core_axi_read_in_if_agent + type: fuse_ctrl_core_axi_read_in + initiator_responder: "INITIATOR" + - name: fuse_ctrl_core_axi_read_out_if_agent + type: fuse_ctrl_core_axi_read_out + initiator_responder: "RESPONDER" + - name: fuse_ctrl_prim_axi_read_in_if_agent + type: fuse_ctrl_prim_axi_read_in + initiator_responder: "INITIATOR" + - name: fuse_ctrl_prim_axi_read_out_if_agent + type: fuse_ctrl_prim_axi_read_out + initiator_responder: "RESPONDER" + - name: fuse_ctrl_secreg_axi_read_in_if_agent + type: fuse_ctrl_secreg_axi_read_in + initiator_responder: "INITIATOR" + - name: fuse_ctrl_secreg_axi_read_out_if_agent + type: fuse_ctrl_secreg_axi_read_out + initiator_responder: "RESPONDER" + - name: fuse_ctrl_lc_otp_in_if_agent + type: fuse_ctrl_lc_otp_in + initiator_responder: "INITIATOR" + - name: fuse_ctrl_lc_otp_out_if_agent + type: fuse_ctrl_lc_otp_out + initiator_responder: "RESPONDER" + - name: fuse_ctrl_in_if_agent + type: fuse_ctrl_in + initiator_responder: "INITIATOR" + - name: fuse_ctrl_out_if_agent + type: fuse_ctrl_out + initiator_responder: "RESPONDER" + + analysis_components: + - name: fuse_ctrl_pred + type: fuse_ctrl_predictor + - name: fuse_ctrl_sb + type: fuse_ctrl_scoreboard + + analysis_ports: [] + + config_constraints: [] + config_vars: [] + + parameters: [] + + scoreboards: [] + + subenvs: [] + + tlm_connections: + - driver: fuse_ctrl_rst_in_agent.monitored_ap + receiver: fuse_ctrl_pred.fuse_ctrl_rst_agent_ae + - driver: fuse_ctrl_pred.fuse_ctrl_sb_ap + receiver: fuse_ctrl_sb.expected_analysis_export + - driver: fuse_ctrl_rst_out_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + - driver: fuse_ctrl_core_axi_write_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + - driver: fuse_ctrl_core_axi_write_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + - driver: fuse_ctrl_core_axi_read_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + - driver: fuse_ctrl_core_axi_read_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + - driver: fuse_ctrl_prim_axi_write_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + - driver: fuse_ctrl_prim_axi_write_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + - driver: fuse_ctrl_prim_axi_read_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + - driver: fuse_ctrl_prim_axi_read_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + - driver: fuse_ctrl_secreg_axi_read_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + - driver: fuse_ctrl_secreg_axi_read_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + - driver: fuse_ctrl_lc_otp_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + - driver: fuse_ctrl_lc_otp_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + - driver: fuse_ctrl_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + - driver: fuse_ctrl_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/fuse_ctrl_global.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/fuse_ctrl_global.yaml new file mode 100644 index 000000000..562413a78 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/fuse_ctrl_global.yaml @@ -0,0 +1,16 @@ +uvmf : + global: + header: | + // SPDX-License-Identifier: Apache-2.0 + // + // Licensed under the Apache License, Version 2.0 (the "License"); + // you may not use this file except in compliance with the License. + // You may obtain a copy of the License at + // + // http://www.apache.org/licenses/LICENSE-2.0 + // + // Unless required by applicable law or agreed to in writing, software + // distributed under the License is distributed on an "AS IS" BASIS, + // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + // See the License for the specific language governing permissions and + // limitations under the License. diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/fuse_ctrl_in_interfaces.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/fuse_ctrl_in_interfaces.yaml new file mode 100644 index 000000000..454df4e9f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/fuse_ctrl_in_interfaces.yaml @@ -0,0 +1,698 @@ +uvmf: + interfaces: + #################################################### + ############### RESET INTERFACE #################### + #################################################### + "fuse_ctrl_rst_in": + clock: "clk_i" + reset: "rst_ni" + reset_assertion_level: "False" + + ports: + # Power manager interface + - name: pwr_otp_i + dir: output + width: [$bits(pwrmgr_pkg::pwr_otp_req_t)] + # External voltage for OTP + - name: otp_ext_voltage_h_io + dir: inout + width: '1' + + transaction_constraints: [] + transaction_vars: + - name: assert_rst + type: bit + iscompare: 'False' + isrand: 'False' + - name: assert_otp_pwr_init + type: bit + iscompare: 'False' + isrand: 'False' + + #################################################### + ############### CORE AXI WRITE ##################### + #################################################### + "fuse_ctrl_core_axi_write_in": + clock: "clk_i" + reset: "rst_ni" + reset_assertion_level: "False" + + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + + ports: + # Address Channel Write Address + - name: awaddr + dir: output + width: [AW] + # Burst + - name: awburst + dir: output + width: [$bits(axi_pkg::axi_burst_e)] + # size + - name: awsize + dir: output + width: '3' + # Length: + - name: awlen + dir: output + width: '8' + # User + - name: awuser + dir: output + width: [UW] + # ID + - name: awid + dir: output + width: [UW] + # Lock + - name: awlock + dir: output + width: '1' + # Write request valid + - name: awvalid + dir: output + width: '1' + # Write data + - name: wdata + dir: output + width: [DW] + # Write strobe + - name: wstrb + dir: output + width: [DW/8] + # Write data valid + - name: wvalid + dir: output + width: '1' + # Write last + - name: wlast + dir: output + width: '1' + # Ready for write + - name: bready + dir: output + width: '1' + + transaction_constraints: [] + transaction_vars: + - name: core_awaddr + type: logic [AW-1:0] + iscompare: 'False' + isrand: 'True' + - name: core_awvalid + type: logic + iscompare: 'False' + isrand: 'False' + - name: core_awburst + type: logic [$bits(axi_pkg::axi_burst_e)] + iscompare: 'False' + isrand: 'False' + - name: core_awsize + type: logic [2:0] + iscompare: 'False' + isrand: 'False' + - name: core_awlen + type: logic [7:0] + iscompare: 'False' + isrand: 'False' + - name: core_awuser + type: logic [UW-1:0] + iscompare: 'False' + isrand: 'False' + - name: core_awid + type: logic [IW-1:0] + iscompare: 'False' + isrand: 'False' + - name: core_awlock + type: logic + iscompare: 'False' + isrand: 'False' + - name: core_wdata + type: logic [DW-1:0] + iscompare: 'True' + isrand: 'False' + - name: core_wstrb + type: logic [DW/8 - 1:0] + iscompare: 'False' + isrand: 'False' + - name: core_wvalid + type: logic + iscompare: 'False' + isrand: 'False' + - name: core_wlast + type: logic + iscompare: 'False' + isrand: 'False' + - name: core_bready + type: logic + iscompare: 'False' + isrand: 'False' + + #################################################### + ############### CORE AXI READ ###################### + #################################################### + "fuse_ctrl_core_axi_read_in": + clock: "clk_i" + reset: "rst_ni" + reset_assertion_level: "False" + + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + + ports: + # Address Channel Read Address + - name: araddr + dir: output + width: [AW] + # Burst + - name: arburst + dir: output + width: [$bits(axi_pkg::axi_burst_e)] + # Size + - name: arsize + dir: output + width: '3' + # Length: + - name: arlen + dir: output + width: '8' + # User: + - name: aruser + dir: output + width: [UW] + # Id + - name: arid + dir: output + width: [IW] + # Lock + - name: arlock + dir: output + width: '1' + # Address valid + - name: arvalid + dir: output + width: '1' + # Device ready + - name: rready + dir: output + width: '1' + + transaction_constraints: [] + transaction_vars: + - name: core_araddr + type: logic [AW-1:0] + iscompare: 'False' + isrand: 'True' + - name: core_arvalid + type: logic + iscompare: 'False' + isrand: 'False' + - name: core_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + iscompare: 'False' + isrand: 'False' + - name: core_arsize + type: logic [2:0] + iscompare: 'False' + isrand: 'False' + - name: core_arlen + type: logic [7:0] + iscompare: 'False' + isrand: 'False' + - name: core_aruser + type: logic [UW-1:0] + iscompare: 'False' + isrand: 'False' + - name: core_arid + type: logic [IW-1:0] + iscompare: 'False' + isrand: 'False' + - name: core_arlock + type: logic + iscompare: 'False' + isrand: 'False' + - name: core_rready + type: logic + iscompare: 'False' + isrand: 'False' + + #################################################### + ############### PRIM AXI WRITE ##################### + #################################################### + "fuse_ctrl_prim_axi_write_in": + clock: "clk_i" + reset: "rst_ni" + reset_assertion_level: "False" + + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + + ports: + # Address Channel Write Address + - name: awaddr + dir: output + width: [AW] + # Burst + - name: awburst + dir: output + width: [$bits(axi_pkg::axi_burst_e)] + # size + - name: awsize + dir: output + width: '3' + # Length: + - name: awlen + dir: output + width: '8' + # User + - name: awuser + dir: output + width: [UW] + # ID + - name: awid + dir: output + width: [UW] + # Lock + - name: awlock + dir: output + width: '1' + # Write request valid + - name: awvalid + dir: output + width: '1' + # Write data + - name: wdata + dir: output + width: [DW] + # Write strobe + - name: wstrb + dir: output + width: [DW/8] + # Write data valid + - name: wvalid + dir: output + width: '1' + # Write last + - name: wlast + dir: output + width: '1' + # Ready for write + - name: bready + dir: output + width: '1' + + transaction_constraints: [] + transaction_vars: + - name: prim_awaddr + type: logic [AW-1:0] + iscompare: 'False' + isrand: 'True' + - name: prim_awvalid + type: logic + iscompare: 'False' + isrand: 'False' + - name: prim_awburst + type: logic [$bits(axi_pkg::axi_burst_e)] + iscompare: 'False' + isrand: 'False' + - name: prim_awsize + type: logic [2:0] + iscompare: 'False' + isrand: 'False' + - name: prim_awlen + type: logic [7:0] + iscompare: 'False' + isrand: 'False' + - name: prim_awuser + type: logic [UW-1:0] + iscompare: 'False' + isrand: 'False' + - name: prim_awid + type: logic [IW-1:0] + iscompare: 'False' + isrand: 'False' + - name: prim_awlock + type: logic + iscompare: 'False' + isrand: 'False' + - name: prim_wdata + type: logic [DW-1:0] + iscompare: 'True' + isrand: 'False' + - name: prim_wstrb + type: logic [DW/8 - 1:0] + iscompare: 'False' + isrand: 'False' + - name: prim_wvalid + type: logic + iscompare: 'False' + isrand: 'False' + - name: prim_wlast + type: logic + iscompare: 'False' + isrand: 'False' + - name: prim_bready + type: logic + iscompare: 'False' + isrand: 'False' + + #################################################### + ############### PRIM AXI READ ###################### + #################################################### + "fuse_ctrl_prim_axi_read_in": + clock: "clk_i" + reset: "rst_ni" + reset_assertion_level: "False" + + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + + ports: + # Address Channel Read Address + - name: araddr + dir: output + width: [AW] + # Burst + - name: arburst + dir: output + width: [$bits(axi_pkg::axi_burst_e)] + # Size + - name: arsize + dir: output + width: '3' + # Length: + - name: arlen + dir: output + width: '8' + # User: + - name: aruser + dir: output + width: [UW] + # Id + - name: arid + dir: output + width: [IW] + # Lock + - name: arlock + dir: output + width: '1' + # Address valid + - name: arvalid + dir: output + width: '1' + # Device ready + - name: rready + dir: output + width: '1' + + transaction_constraints: [] + transaction_vars: + - name: prim_araddr + type: logic [AW-1:0] + iscompare: 'False' + isrand: 'True' + - name: prim_arvalid + type: logic + iscompare: 'False' + isrand: 'False' + - name: prim_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + iscompare: 'False' + isrand: 'False' + - name: prim_arsize + type: logic [2:0] + iscompare: 'False' + isrand: 'False' + - name: prim_arlen + type: logic [7:0] + iscompare: 'False' + isrand: 'False' + - name: prim_aruser + type: logic [UW-1:0] + iscompare: 'False' + isrand: 'False' + - name: prim_arid + type: logic [IW-1:0] + iscompare: 'False' + isrand: 'False' + - name: prim_arlock + type: logic + iscompare: 'False' + isrand: 'False' + - name: prim_rready + type: logic + iscompare: 'False' + isrand: 'False' + + #################################################### + ############### SECREG AXI READ #################### + #################################################### + "fuse_ctrl_secreg_axi_read_in": + clock: "clk_i" + reset: "rst_ni" + reset_assertion_level: "False" + + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + + ports: + # Address Channel Read Address + - name: araddr + dir: output + width: [AW] + # Burst + - name: arburst + dir: output + width: [$bits(axi_pkg::axi_burst_e)] + # Size + - name: arsize + dir: output + width: '3' + # Length: + - name: arlen + dir: output + width: '8' + # User: + - name: aruser + dir: output + width: [UW] + # Id + - name: arid + dir: output + width: [IW] + # Lock + - name: arlock + dir: output + width: '1' + # Address valid + - name: arvalid + dir: output + width: '1' + # Device ready + - name: rready + dir: output + width: '1' + + transaction_constraints: [] + transaction_vars: + - name: secreg_araddr + type: logic [AW-1:0] + iscompare: 'False' + isrand: 'True' + - name: secreg_arvalid + type: logic + iscompare: 'False' + isrand: 'False' + - name: secreg_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + iscompare: 'False' + isrand: 'False' + - name: secreg_arsize + type: logic [2:0] + iscompare: 'False' + isrand: 'False' + - name: secreg_arlen + type: logic [7:0] + iscompare: 'False' + isrand: 'False' + - name: secreg_aruser + type: logic [UW-1:0] + iscompare: 'False' + isrand: 'False' + - name: secreg_arid + type: logic [IW-1:0] + iscompare: 'False' + isrand: 'False' + - name: secreg_arlock + type: logic + iscompare: 'False' + isrand: 'False' + - name: secreg_rready + type: logic + iscompare: 'False' + isrand: 'False' + + #################################################### + ############### FUSE CTRL IF ####################### + #################################################### + "fuse_ctrl_in": + clock: "clk_i" + reset: "rst_ni" + reset_assertion_level: "False" + + parameters: + - name: AlertSyncOn + type: int + value: '3' + - name: RndConstLfrSeed + type: lfsr_seed_t + value: 'RndConstLfsrSeedDefault' + - name: RndCnstLfsrPerm + type: lsfr_perm_t + value: 'RndCnstLfsrPermDefault' + - name: MemInitFile + type: string + value: "" + + ports: + # EDN interface + - name: edn_i + dir: output + width: [$bits(edn_pkg::edn_req_t)] + # Alerts + - name: alert_rx_i + dir: output + width: [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)] + # Observability to AST + - name: obs_ctrl_i + dir: output + width: [$bits(ast_pkg::ast_obs_ctrl_t)] + # macro-specific power sequencing signal from AST + - name: otp_ast_pwr_seq_h_i + dir: output + width: [$bits(otp_ast_req_t)] + # Scan + - name: scan_en_i + dir: output + width: '1' + - name: scan_rst_ni + dir: output + width: '1' + - name: scanmode_i + dir: output + width: '1' + + transaction_constraints: [] + transaction_vars: + - name: set_alert_rx_i + type: caliptra_prim_alert_pkg::alert_rx_t + iscompare: 'False' + isrand: 'False' + + + #################################################### + ################## OTP LC IF ####################### + #################################################### + "fuse_ctrl_lc_otp_in": + clock: "clk_i" + reset: "rst_ni" + reset_assertion_level: "False" + + ports: + # macro specific test register from LC TAP + - name: lc_otp_vendor_test_i + dir: output + width: [$bits(lc_otp_vendor_test_req_t)] + # LC transition command interface + - name: lc_otp_program_i + dir: output + width: [$bits(lc_otp_program_req_t)] + # LC Broadcast inputs + - name: lc_dft_en_i + dir: output + width: [$bits(lc_ctrl_pkg::lc_tx_t)] + - name: lc_escalate_en_i + dir: output + width: [$bits(lc_ctrl_pkg::lc_tx_t)] + - name: lc_check_byp_en_i + dir: output + width: [$bits(lc_ctrl_pkg::lc_tx_t)] + + response_info: + data: [] + operation: 1'b0 + + transaction_constraints: [] + transaction_vars: + - name: lc_dft_en_i + type: lc_ctrl_pkg::lc_tx_t + iscompare: 'False' + isrand: 'False' + - name: lc_escalate_en_i + type: lc_ctrl_pkg::lc_tx_t + iscompare: 'False' + isrand: 'False' + - name: lc_check_byp_en_i + type: lc_ctrl_pkg::lc_tx_t + iscompare: 'False' + isrand: 'False' + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/fuse_ctrl_out_interfaces.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/fuse_ctrl_out_interfaces.yaml new file mode 100644 index 000000000..029952af7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/fuse_ctrl_out_interfaces.yaml @@ -0,0 +1,470 @@ +uvmf: + interfaces: + "fuse_ctrl_rst_out": + clock: "clk_i" + reset: "rst_ni" + reset_assertion_level: "False" + + ports: + # Power manager interface + - name: pwr_otp_o + dir: input + width: [$bits(pwrmgr_pkg::pwr_otp_rsp_t)] + # External voltage for OTP + - name: otp_ext_voltage_h_io + dir: inout + width: '1' + + transaction_constraints: [] + transaction_vars: + - name: pwr_otp_o + type: pwrmgr_pkg::pwr_otp_rsp_t + isrand: 'False' + iscompare: 'True' + + "fuse_ctrl_core_axi_write_out": + clock: "clk_i" + reset: "rst_ni" + reset_assertion_level: "False" + + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + + ports: + # Address Write Channel Ready + - name: awready + dir: input + width: '1' + # Write Ready + - name: wready + dir: input + width: '1' + # Write Response + - name: bresp + dir: input + width: [$bits(axi_pkg::axi_burst_e)] + # Write Response ID + - name: bid + dir: input + width: '1' + # Write Response Valid + - name: bvalid + dir: input + width: '1' + + transaction_constraints: [] + transaction_vars: + - name: core_awready + type: logic + iscompare: 'True' + isrand: 'False' + - name: core_wready + type: logic + iscompare: 'True' + isrand: 'False' + - name: core_bresp + type: axi_pkg::axi_burst_e + iscompare: 'True' + isrand: 'False' + - name: core_bid + type: logic + iscompare: 'True' + isrand: 'False' + - name: core_bvalid + type: logic + iscompare: 'True' + isrand: 'False' + + "fuse_ctrl_core_axi_read_out": + clock: "clk_i" + reset: "rst_ni" + reset_assertion_level: "False" + + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + + ports: + # Address Read Channel Ready + - name: arready + dir: input + width: '1' + # Read Data + - name: rdata + dir: input + width: "DW" + # Read Response + - name: rresp + dir: input + width: '1' + # Read ID + - name: rid + dir: input + width: '1' + # Read Last + - name: rlast + dir: input + width: '1' + # Read Data Valid + - name: rvalid + dir: input + width: '1' + + transaction_constraints: [] + transaction_vars: + - name: core_arready + type: logic + iscompare: 'True' + isrand: 'False' + - name: core_rdata + type: logic [DW-1:0] + iscompare: 'True' + isrand: 'False' + - name: core_rresp + type: axi_pkg::axi_burst_e + iscompare: 'True' + isrand: 'False' + - name: core_rid + type: logic [IW-1:0] + iscompare: 'True' + isrand: 'False' + - name: core_rlast + type: logic + iscompare: 'True' + isrand: 'False' + - name: core_rvalid + type: logic + iscompare: 'True' + isrand: 'False' + + "fuse_ctrl_prim_axi_write_out": + clock: "clk_i" + reset: "rst_ni" + reset_assertion_level: "False" + + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + + ports: + # Address Write Channel Ready + - name: awready + dir: input + width: '1' + # Write Ready + - name: wready + dir: input + width: '1' + # Write Response + - name: bresp + dir: input + width: [$bits(axi_pkg::axi_burst_e)] + # Write Response ID + - name: bid + dir: input + width: '1' + # Write Response Valid + - name: bvalid + dir: input + width: '1' + + transaction_constraints: [] + transaction_vars: + - name: prim_awready + type: logic + iscompare: 'True' + isrand: 'False' + - name: prim_wready + type: logic + iscompare: 'True' + isrand: 'False' + - name: prim_bresp + type: axi_pkg::axi_burst_e + iscompare: 'True' + isrand: 'False' + - name: prim_bid + type: logic + iscompare: 'True' + isrand: 'False' + - name: prim_bvalid + type: logic + iscompare: 'True' + isrand: 'False' + + + "fuse_ctrl_prim_axi_read_out": + clock: "clk_i" + reset: "rst_ni" + reset_assertion_level: "False" + + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + + ports: + # Address Read Channel Ready + - name: arready + dir: input + width: '1' + # Read Data + - name: rdata + dir: input + width: "DW" + # Read Response + - name: rresp + dir: input + width: '1' + # Read ID + - name: rid + dir: input + width: '1' + # Read Last + - name: rlast + dir: input + width: '1' + # Read Data Valid + - name: rvalid + dir: input + width: '1' + + transaction_constraints: [] + transaction_vars: + - name: prim_arready + type: logic + iscompare: 'True' + isrand: 'False' + - name: prim_rdata + type: logic [DW-1:0] + iscompare: 'True' + isrand: 'False' + - name: prim_rresp + type: axi_pkg::axi_burst_e + iscompare: 'True' + isrand: 'False' + - name: prim_rid + type: logic [IW-1:0] + iscompare: 'True' + isrand: 'False' + - name: prim_rlast + type: logic + iscompare: 'True' + isrand: 'False' + - name: prim_rvalid + type: logic + iscompare: 'True' + isrand: 'False' + + "fuse_ctrl_secreg_axi_read_out": + clock: "clk_i" + reset: "rst_ni" + reset_assertion_level: "False" + + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + + ports: + # Address Read Channel Ready + - name: arready + dir: input + width: '1' + # Read Data + - name: rdata + dir: input + width: "DW" + # Read Response + - name: rresp + dir: input + width: '1' + # Read ID + - name: rid + dir: input + width: '1' + # Read Last + - name: rlast + dir: input + width: '1' + # Read Data Valid + - name: rvalid + dir: input + width: '1' + + transaction_constraints: [] + transaction_vars: + - name: secreg_arready + type: logic + iscompare: 'True' + isrand: 'False' + - name: secreg_rdata + type: logic [DW-1:0] + iscompare: 'True' + isrand: 'False' + - name: secreg_rresp + type: axi_pkg::axi_burst_e + iscompare: 'True' + isrand: 'False' + - name: secreg_rid + type: logic [IW-1:0] + iscompare: 'True' + isrand: 'False' + - name: secreg_rlast + type: logic + iscompare: 'True' + isrand: 'False' + - name: secreg_rvalid + type: logic + iscompare: 'True' + isrand: 'False' + + "fuse_ctrl_out": + clock: "clk_i" + reset: "rst_ni" + reset_assertion_level: "False" + + parameters: + - name: AlertSyncOn + type: int + value: '3' + - name: RndConstLfrSeed + type: lfsr_seed_t + value: 'RndConstLfsrSeedDefault' + - name: RndCnstLfsrPerm + type: lsfr_perm_t + value: 'RndCnstLfsrPermDefault' + - name: MemInitFile + type: string + value: "" + + ports: + # EDN interface + - name: edn_o + dir: input + width: [$bits(edn_pkg::edn_req_t)] + # Interrupt Requests + - name: intr_otp_operation_done_o + dir: input + width: '1' + - name: intr_otp_error_o + dir: input + width: '1' + # Alerts + - name: alert_tx_o + dir: input + width: [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)] + # Observability to AST + - name: otp_obs_o + dir: input + width: '8' + # Macro-specific power sequencing signal to AST + - name: otp_ast_pwr_seq_o + dir: input + width: [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)] + + # Hardware config bits + - name: otp_broadcast_o + dir: input + width: [$bits(otp_broadcast_t)] + + # Test-related GPIO output + - name: cio_test_o + dir: input + width: [OtpTestVectWidth] + - name: cio_test_en_o + dir: input + width: [OtpTestVectWidth] + + response_info: + data: [] + operation: 1'b0 + + transaction_constraints: [] + transaction_vars: + - name: pwr_otp_o + type: pwrmgr_pkg::pwr_otp_rsp_t + iscompare: 'True' + isrand: 'False' + + "fuse_ctrl_lc_otp_out": + clock: "clk_i" + reset: "rst_ni" + reset_assertion_level: "False" + + ports: + # Test register to Life Cycle TAP + - name: lc_otp_vendor_test_o + dir: input + width: [$bits(lc_otp_vendor_test_rsp_t)] + # LC transition interface + - name: lc_otp_program_o + dir: input + width: [$bits(lc_otp_program_rsp_t)] + # OTP broadcast output + - name: otp_lc_data_o + dir: input + width: [$bits(otp_lc_data_t)] + + response_info: + data: [] + operation: 1'b0 + + transaction_constraints: [] + transaction_vars: + - name: otp_lc_data_o + type: otp_lc_data_t + iscompare: 'True' + isrand: 'False' + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/fuse_ctrl_util_comp_predictor.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/fuse_ctrl_util_comp_predictor.yaml new file mode 100644 index 000000000..fde2c1eb3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/fuse_ctrl_util_comp_predictor.yaml @@ -0,0 +1,28 @@ +uvmf: + util_components: + fuse_ctrl_predictor: + type: predictor + analysis_exports: + # RST + - name: fuse_ctrl_rst_agent_ae + type: 'fuse_ctrl_rst_transaction' + # Writes + - name: fuse_ctrl_core_axi_write_agent_ae + type: 'fuse_ctrl_write_transaction' + - name: fuse_ctrl_prim_axi_write_agent_ae + type: 'fuse_ctrl_write_transaction' + # Reads + - name: fuse_ctrl_core_axi_read_agent_ae + type: 'fuse_ctrl_read_transaction' + - name: fuse_ctrl_prim_axi_read_agent_ae + type: 'fuse_ctrl_read_transaction' + - name: fuse_ctrl_secreg_axi_read_agent_ae + type: 'fuse_ctrl_read_transaction' + # OTP LC IF + - name: fuse_ctrl_lc_otp_if_agent_ae + type: 'fuse_ctrl_read_transaction' + + analysis_ports: + - name: fuse_ctrl_sb_ap + type: 'fuse_ctrl_read_transaction' + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/fuse_ctrl_util_comp_scoreboard.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/fuse_ctrl_util_comp_scoreboard.yaml new file mode 100644 index 000000000..59b331e58 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/fuse_ctrl_util_comp_scoreboard.yaml @@ -0,0 +1,37 @@ +uvmf: + util_components: + fuse_ctrl_scoreboard: + type: scoreboard +# # Default APs + analysis_exports: + - name: expected_analysis_export + type: 'fuse_ctrl_read_transaction' + - name: actual_analysis_export + type: 'fuse_ctrl_read_transaction' + #qvip_analysis_exports: + #- name: expected_ahb_analysis_export + # type: 'ahb_master_burst_transfer #(ahb_lite_slave_0_params::AHB_NUM_MASTERS, + # ahb_lite_slave_0_params::AHB_NUM_MASTER_BITS, + # ahb_lite_slave_0_params::AHB_NUM_SLAVES, + # ahb_lite_slave_0_params::AHB_ADDRESS_WIDTH, + # ahb_lite_slave_0_params::AHB_WDATA_WIDTH, + # ahb_lite_slave_0_params::AHB_RDATA_WIDTH)' + # - name: expected_apb_analysis_export + # type: 'apb3_host_apb3_transaction #(apb5_master_0_params::APB3_SLAVE_COUNT, + # apb5_master_0_params::APB3_PADDR_BIT_WIDTH, + # apb5_master_0_params::APB3_PWDATA_BIT_WIDTH, + # apb5_master_0_params::APB3_PRDATA_BIT_WIDTH)' + #- name: actual_ahb_analysis_export + # # type: 'mvc_sequence_item_base' + # type: 'ahb_master_burst_transfer #(ahb_lite_slave_0_params::AHB_NUM_MASTERS, + # ahb_lite_slave_0_params::AHB_NUM_MASTER_BITS, + # ahb_lite_slave_0_params::AHB_NUM_SLAVES, + # ahb_lite_slave_0_params::AHB_ADDRESS_WIDTH, + # ahb_lite_slave_0_params::AHB_WDATA_WIDTH, + # ahb_lite_slave_0_params::AHB_RDATA_WIDTH)' + # - name: actual_apb_analysis_export + # type: 'mvc_sequence_item_base' +# type: 'apb3_host_apb3_transaction #(apb5_master_0_params::APB3_SLAVE_COUNT, +# apb5_master_0_params::APB3_PADDR_BIT_WIDTH, +# apb5_master_0_params::APB3_PWDATA_BIT_WIDTH, +# apb5_master_0_params::APB3_PRDATA_BIT_WIDTH)' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/run_yaml_uvmf_scripts.sh b/src/fuse_ctrl/uvmf_fuse_ctrl/run_yaml_uvmf_scripts.sh new file mode 100755 index 000000000..dedf0f3b0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/run_yaml_uvmf_scripts.sh @@ -0,0 +1,12 @@ +#export UVMF_HOME='/home/cad/tools/mentor/uvmf/UVMF_2022.3' +python ${UVMF_HOME}/scripts/yaml2uvmf.py --merge_source uvmf_template_output \ + --merge_skip_missing_blocks \ + fuse_ctrl_global.yaml \ + fuse_ctrl_in_interfaces.yaml \ + fuse_ctrl_out_interfaces.yaml \ + fuse_ctrl_util_comp_predictor.yaml \ + fuse_ctrl_util_comp_scoreboard.yaml \ + fuse_ctrl_environment.yaml \ + fuse_ctrl_bench.yaml \ + -d uvmf_template_output_merged + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/.project new file mode 100644 index 000000000..1462dcefd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/.project @@ -0,0 +1,37 @@ + + + fuse_ctrl + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + verification_ip + 2 + UVMF_VIP_LIBRARY_HOME + + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D/verification_ip + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/.svproject new file mode 100644 index 000000000..9e84acf61 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/docs/interfaces.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/docs/interfaces.csv new file mode 100644 index 000000000..d783ccf31 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/docs/interfaces.csv @@ -0,0 +1,42 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +, +Interface Description, Interface Type, Interface Transaction, Interface Name, +fuse_ctrl_rst_in_agent, fuse_ctrl_rst_in_driver_bfm fuse_ctrl_rst_in_monitor_bfm, fuse_ctrl_rst_in_transaction, fuse_ctrl_rst_in_pkg_fuse_ctrl_rst_in_agent_BFM, +fuse_ctrl_rst_out_agent, fuse_ctrl_rst_out_driver_bfm fuse_ctrl_rst_out_monitor_bfm, fuse_ctrl_rst_out_transaction, fuse_ctrl_rst_out_pkg_fuse_ctrl_rst_out_agent_BFM, +fuse_ctrl_core_axi_write_in_if_agent, fuse_ctrl_core_axi_write_in_driver_bfm fuse_ctrl_core_axi_write_in_monitor_bfm, fuse_ctrl_core_axi_write_in_transaction, fuse_ctrl_core_axi_write_in_pkg_fuse_ctrl_core_axi_write_in_if_agent_BFM, +fuse_ctrl_core_axi_write_out_if_agent, fuse_ctrl_core_axi_write_out_driver_bfm fuse_ctrl_core_axi_write_out_monitor_bfm, fuse_ctrl_core_axi_write_out_transaction, fuse_ctrl_core_axi_write_out_pkg_fuse_ctrl_core_axi_write_out_if_agent_BFM, +fuse_ctrl_prim_axi_write_in_if_agent, fuse_ctrl_prim_axi_write_in_driver_bfm fuse_ctrl_prim_axi_write_in_monitor_bfm, fuse_ctrl_prim_axi_write_in_transaction, fuse_ctrl_prim_axi_write_in_pkg_fuse_ctrl_prim_axi_write_in_if_agent_BFM, +fuse_ctrl_prim_axi_write_out_if_agent, fuse_ctrl_prim_axi_write_out_driver_bfm fuse_ctrl_prim_axi_write_out_monitor_bfm, fuse_ctrl_prim_axi_write_out_transaction, fuse_ctrl_prim_axi_write_out_pkg_fuse_ctrl_prim_axi_write_out_if_agent_BFM, +fuse_ctrl_core_axi_read_in_if_agent, fuse_ctrl_core_axi_read_in_driver_bfm fuse_ctrl_core_axi_read_in_monitor_bfm, fuse_ctrl_core_axi_read_in_transaction, fuse_ctrl_core_axi_read_in_pkg_fuse_ctrl_core_axi_read_in_if_agent_BFM, +fuse_ctrl_core_axi_read_out_if_agent, fuse_ctrl_core_axi_read_out_driver_bfm fuse_ctrl_core_axi_read_out_monitor_bfm, fuse_ctrl_core_axi_read_out_transaction, fuse_ctrl_core_axi_read_out_pkg_fuse_ctrl_core_axi_read_out_if_agent_BFM, +fuse_ctrl_prim_axi_read_in_if_agent, fuse_ctrl_prim_axi_read_in_driver_bfm fuse_ctrl_prim_axi_read_in_monitor_bfm, fuse_ctrl_prim_axi_read_in_transaction, fuse_ctrl_prim_axi_read_in_pkg_fuse_ctrl_prim_axi_read_in_if_agent_BFM, +fuse_ctrl_prim_axi_read_out_if_agent, fuse_ctrl_prim_axi_read_out_driver_bfm fuse_ctrl_prim_axi_read_out_monitor_bfm, fuse_ctrl_prim_axi_read_out_transaction, fuse_ctrl_prim_axi_read_out_pkg_fuse_ctrl_prim_axi_read_out_if_agent_BFM, +fuse_ctrl_secreg_axi_read_in_if_agent, fuse_ctrl_secreg_axi_read_in_driver_bfm fuse_ctrl_secreg_axi_read_in_monitor_bfm, fuse_ctrl_secreg_axi_read_in_transaction, fuse_ctrl_secreg_axi_read_in_pkg_fuse_ctrl_secreg_axi_read_in_if_agent_BFM, +fuse_ctrl_secreg_axi_read_out_if_agent, fuse_ctrl_secreg_axi_read_out_driver_bfm fuse_ctrl_secreg_axi_read_out_monitor_bfm, fuse_ctrl_secreg_axi_read_out_transaction, fuse_ctrl_secreg_axi_read_out_pkg_fuse_ctrl_secreg_axi_read_out_if_agent_BFM, +fuse_ctrl_lc_otp_in_if_agent, fuse_ctrl_lc_otp_in_driver_bfm fuse_ctrl_lc_otp_in_monitor_bfm, fuse_ctrl_lc_otp_in_transaction, fuse_ctrl_lc_otp_in_pkg_fuse_ctrl_lc_otp_in_if_agent_BFM, +fuse_ctrl_lc_otp_out_if_agent, fuse_ctrl_lc_otp_out_driver_bfm fuse_ctrl_lc_otp_out_monitor_bfm, fuse_ctrl_lc_otp_out_transaction, fuse_ctrl_lc_otp_out_pkg_fuse_ctrl_lc_otp_out_if_agent_BFM, +fuse_ctrl_in_if_agent, fuse_ctrl_in_driver_bfm fuse_ctrl_in_monitor_bfm, fuse_ctrl_in_transaction, fuse_ctrl_in_pkg_fuse_ctrl_in_if_agent_BFM, +fuse_ctrl_out_if_agent, fuse_ctrl_out_driver_bfm fuse_ctrl_out_monitor_bfm, fuse_ctrl_out_transaction, fuse_ctrl_out_pkg_fuse_ctrl_out_if_agent_BFM, + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/fuse_ctrl_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/fuse_ctrl_sve.F new file mode 100644 index 000000000..37457d76f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/fuse_ctrl_sve.F @@ -0,0 +1,42 @@ + +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + +// BFM Files +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F + +// Environment Files +-F ${UVMF_VIP_LIBRARY_HOME}/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F + +// Bench Files ++incdir+./tb/tests +./tb/tests/fuse_ctrl_tests_pkg.sv + ++incdir+./tb/sequences +./tb/sequences/fuse_ctrl_sequences_pkg.sv + ++incdir+./tb/parameters +./tb/parameters/fuse_ctrl_parameters_pkg.sv + +./tb/testbench/hdl_top.sv +./tb/testbench/hvl_top.sv + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/rtl/dut.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/rtl/dut.compile new file mode 100644 index 000000000..9b0008fc5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/rtl/dut.compile @@ -0,0 +1,6 @@ + +# pragma uvmf custom dut_compile_info begin +src: + - ./vhdl/vhdl_dut.vhd + - ./verilog/verilog_dut.v +# pragma uvmf custom dut_compile_info end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.v b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.v new file mode 100644 index 000000000..96198441c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.v @@ -0,0 +1,21 @@ +module verilog_dut(clk, rst, in_signal, out_signal); + +input clk; +input rst; +input in_signal; +output out_signal; + +reg out_signal_o; + +always @(posedge clk) begin + if (rst) begin + out_signal_o <= 0; + end + else begin + out_signal_o <= ~in_signal; + end + end + +assign out_signal = out_signal_o; + +endmodule diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.vinfo new file mode 100644 index 000000000..87e95f36f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.vinfo @@ -0,0 +1 @@ +verilog_dut.v diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/rtl/vhdl/vhdl_dut.vhd b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/rtl/vhdl/vhdl_dut.vhd new file mode 100644 index 000000000..904aa37d1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/rtl/vhdl/vhdl_dut.vhd @@ -0,0 +1,21 @@ +library ieee; +use ieee.std_logic_1164.all ; + +entity vhdl_dut is + port ( clk : in std_logic ; + rst : in std_logic ; + in_signal : in std_logic ; + out_signal :out std_logic + ); +end vhdl_dut; + +architecture rtl of vhdl_dut is + begin + P1: process + variable out_signal_o : std_logic; + begin + wait until clk'event and clk = '1'; + out_signal_o := in_signal; + out_signal <= out_signal_o; + end process; + end rtl; diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/Makefile new file mode 100644 index 000000000..31c05828a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/Makefile @@ -0,0 +1,377 @@ + +# +#---------------------------------------------------------------------- +# +# DESCRIPTION: This makefile includes the shared makefile and contains +# bench level make targets. +# +#---------------------------------------------------------------------- + + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +# ********************************************************************************************* +# UVMF library directory: +# This variable points to the UVMF release where uvmf_base_pkg directory resides. +# This variable points to release code that is not user modified. +# This variable allows for UVMF release directories to reside independent of project related verification IP and project bench directories. +# This code below looks "upward" for directory starting with UVMF_* and returns first match for use with the release examples. +UVMF_HOME ?= ___PLEASE_SET_AN_ENVIRONMENT_VARIABLE_NAMED_UVMF_HOME_TO_POINT_TO_THE_UVMF_INSTALLATION___ + +# pragma uvmf custom exports begin +# +# Project(s) specific verification IP library: +# Directory where reusable verification packages for interfaces, environments, utilities, etc. reside. +# This variable allows for your verification IP to reside independent of project bench and UVMF release directories. +# For examples deployed with UVMF this will be $(UVMF_HOME)//verification_ip +export UVMF_VIP_LIBRARY_HOME ?= $(PWD)/../../../verification_ip +# +# Project specific bench: +# Directory where bench specific code is located. +# This variable allows for project_benches to reside independent of verification IP and UVMF release directories. +# For examples deployed with UVMF this will be $(UVMF_HOME)//project_benches/ +export UVMF_PROJECT_DIR ?= $(PWD)/.. +# +# +# pragma uvmf custom exports end +# ********************************************************************************************* + +## Check PATH for required vinfo scripts +PVAL := $(shell command -v make_filelist.py 2> /dev/null) +ifndef PVAL + MFLIST = $(UVMF_HOME)/scripts/make_filelist.py +else + MFLIST = make_filelist.py +endif + + +# Set test case specific Variables +TEST_NAME ?= test_top + +TEST_SEED ?= random +UVM_CLI_ARGS = + +# Usage of Veloce, etc. to be input by the user (subject to defaults) +USE_VELOCE ?= 0 + +# Usage of vinfo flow for generating file list +USE_VINFO ?= 0 + +# Usage of Veloce and Questa profilers +USE_VELOCE_PROFILER ?= 0 +USE_QUESTA_PROFILER ?= 0 + + +# Set project Variables +TEST_PLAN_NAME = fuse_ctrl_TestPlan +REPORTING_DO_FILE = fuse_ctrl_reports_script + + +# Include makefile that includes targets for UVM_VIP_Library packages +include $(UVMF_HOME)/scripts/Makefile + + + + +# Include all requisite interface package targets for this bench +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_in_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_out_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/Makefile + +# Include all requisite environment package targets for this bench +include $(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg/Makefile + + + +# Add to default compile/load/run arguments +VCOM_ARGS += + +# Note: vsim-3009 error can be eliminated by adding -timescale 1ps/1ps to VLOG_ARGS + +VLOG_ARGS += $(UVM_DISABLE_FILE_LINE_CMD) + +VELANALYZE_ARGS += +VELANALYZE_HVL_ARGS += + +BATCH_VOPT_ARGS += +DEBUG_VOPT_ARGS += +EXTRA_VOPT_TOPS += +COMMON_VSIM_ARGS += +COMMON_VSIM_ARGS += + + +BATCH_VSIM_ARGS += #-uvmcontrol=none +DEBUG_VSIM_ARGS += +EXTRA_VSIM_TOPS += + +# pragma uvmf custom additional_args begin +# pragma uvmf custom additional_args end + + +# Project bench package source +fuse_ctrl_PARAMETERS_PKG ?=\ +$(UVMF_PROJECT_DIR)/tb/parameters/fuse_ctrl_parameters_pkg.sv + + +fuse_ctrl_SEQUENCES_PKG ?=\ +$(UVMF_PROJECT_DIR)/tb/sequences/fuse_ctrl_sequences_pkg.sv + + +fuse_ctrl_TEST_PKG ?=\ +$(UVMF_PROJECT_DIR)/tb/tests/fuse_ctrl_tests_pkg.sv + +# pragma uvmf custom dut_files begin +# UVMF_CHANGE_ME : Reference Verilog DUT source. +fuse_ctrl_VERILOG_DUT ?=\ +$(UVMF_PROJECT_DIR)/../../../../../integration/rtl/config_defines.svh +$(UVMF_PROJECT_DIR)/../../../../../integration/rtl/caliptra_reg_defines.svh +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_sva.svh +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_macros.svh +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_sram.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/ahb_defines_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_ahb_srom.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/apb_slv_sif.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/ahb_slv_sif.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_icg.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/clk_gate.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_2ff_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/ahb_to_reg_adapter.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/skidbuffer.v +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_util_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_alert_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_subreg_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_mubi_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_cipher_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sparse_fsm_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_otp_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_ram_1p_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../lc_ctrl/rtl/lc_ctrl_reg_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../lc_ctrl/rtl/lc_ctrl_state_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../lc_ctrl/rtl/lc_ctrl_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_flop_en.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_flop.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_buf.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_otp.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_ram_1p.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_and2.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_flop_en.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_cdc_rand_delay.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_flop_2sync.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_lfsr.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_double_lfsr.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_arbiter_fixed.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_arbiter_tree.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_edn_req.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_present.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_lc_sender.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sync_reqack.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sync_reqack_data.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_mubi4_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_diff_decode.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sec_anchor_buf.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_slicer.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_count.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sparse_fsm_flop.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_dom_and_2share.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sec_anchor_flop.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_reg_we_check.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_packer_fifo.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_max_tree.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_subreg_arb.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_subreg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_intr_hw.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_onehot_check.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_mubi8_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_mubi8_sender.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_fifo_sync_cnt.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_buf.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_lc_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_alert_receiver.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_flop.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_alert_sender.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_fifo_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_arbiter_ppc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sum_tree.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_subreg_ext.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_edge_detector.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_blanker.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_ram_1p_adv.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_assert_multiple.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_assert.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/sram2tlul.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_adapter_host.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_adapter_reg.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_adapter_sram.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_cmd_intg_chk.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_cmd_intg_gen.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_data_integ_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_data_integ_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_err_resp.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_err.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_fifo_async.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_fifo_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_lc_gate.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_rsp_intg_chk.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_rsp_intg_gen.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_socket_1n.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_socket_m1.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_sram_byte.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_if.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_addr.v +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_sub_rd.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_sub_wr.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_sub_arb.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_sub.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_22_16_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_22_16_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_28_22_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_28_22_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_39_32_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_39_32_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_64_57_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_64_57_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_72_64_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_72_64_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_22_16_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_22_16_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_39_32_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_39_32_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_72_64_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_72_64_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_76_68_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_76_68_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_22_16_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_22_16_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_28_22_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_28_22_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_39_32_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_39_32_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_64_57_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_64_57_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_72_64_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_72_64_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_22_16_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_22_16_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_39_32_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_39_32_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_72_64_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_72_64_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_76_68_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_76_68_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../axi2tlul/rtl/axi2tlul_cmd_intg_gen.sv +$(UVMF_PROJECT_DIR)/../../../../../axi2tlul/rtl/sub2tlul.sv +$(UVMF_PROJECT_DIR)/../../../../../axi2tlul/rtl/axi2tlul.sv +$(UVMF_PROJECT_DIR)/../../../../../entropy_src/rtl/entropy_src_main_sm_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../entropy_src/rtl/entropy_src_ack_sm_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../entropy_src/rtl/entropy_src_reg_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../entropy_src/rtl/entropy_src_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../edn/rtl/edn_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../ast/rtl/ast_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../pwrmgr/rtl/pwrmgr_reg_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../pwrmgr/rtl/pwrmgr_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_reg_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_part_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_core_reg_top.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_prim_reg_top.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_dai.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_ecc_reg.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_lci.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_lfsr_timer.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_part_buf.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_part_unbuf.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_scrmbl.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_top.sv + + +# UVMF_CHANGE_ME : Reference VHDL DUT source. +fuse_ctrl_VHDL_DUT ?=\ +$(UVMF_PROJECT_DIR)/rtl/vhdl/vhdl_dut.vhd +# pragma uvmf custom dut_files end + + +# Project bench package targets +COMP_fuse_ctrl_PARAMETERS_PKG_TGT_0 = q_comp_fuse_ctrl_parameters_pkg +COMP_fuse_ctrl_PARAMETERS_PKG_TGT_1 = v_comp_fuse_ctrl_parameters_pkg +COMP_fuse_ctrl_PARAMETERS_PKG_TGT = $(COMP_fuse_ctrl_PARAMETERS_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_parameters_pkg: $(COMP_fuse_ctrl_PARAMETERS_PKG_TGT) + +q_comp_fuse_ctrl_parameters_pkg: + $(HVL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/parameters $(fuse_ctrl_PARAMETERS_PKG) + +v_comp_fuse_ctrl_parameters_pkg: q_comp_fuse_ctrl_parameters_pkg + $(HDL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/parameters $(fuse_ctrl_PARAMETERS_PKG) + + +comp_fuse_ctrl_sequence_pkg: + $(HVL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/sequences $(fuse_ctrl_SEQUENCES_PKG) + +comp_fuse_ctrl_tests_pkg: + $(HVL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/tests $(fuse_ctrl_TEST_PKG) + +# pragma uvmf custom dut_compile_make_target begin +# UVMF_CHANGE_ME : Add make target to compile your verilog dut here +comp_fuse_ctrl_verilog_dut: + echo "Compile your verilog DUT here" + $(HDL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/../../../../../libs/rtl $(fuse_ctrl_VERILOG_DUT) + +# UVMF_CHANGE_ME : Add make target to compile your vhdl dut here +comp_fuse_ctrl_vhdl_dut: + echo "Compile your vhdl DUT here" + $(HDL_COMP_CMD_VHDL) $(fuse_ctrl_VHDL_DUT) + +# UVMF_CHANGE_ME : Add make target to compile your dut here +comp_fuse_ctrl_dut: comp_fuse_ctrl_vhdl_dut comp_fuse_ctrl_verilog_dut +# pragma uvmf custom dut_compile_make_target end + + +BUILD_TGT_0 = make_build +BUILD_TGT_1 = vinfo_build +BUILD_TGT = $(BUILD_TGT_$(USE_VINFO)) + + +comp_hvl : comp_hvl_core + + +comp_hvl_core : \ + comp_fuse_ctrl_rst_in_pkg comp_fuse_ctrl_rst_out_pkg comp_fuse_ctrl_core_axi_write_in_pkg comp_fuse_ctrl_core_axi_write_out_pkg comp_fuse_ctrl_prim_axi_write_in_pkg comp_fuse_ctrl_prim_axi_write_out_pkg comp_fuse_ctrl_core_axi_read_in_pkg comp_fuse_ctrl_core_axi_read_out_pkg comp_fuse_ctrl_prim_axi_read_in_pkg comp_fuse_ctrl_prim_axi_read_out_pkg comp_fuse_ctrl_secreg_axi_read_in_pkg comp_fuse_ctrl_secreg_axi_read_out_pkg comp_fuse_ctrl_lc_otp_in_pkg comp_fuse_ctrl_lc_otp_out_pkg comp_fuse_ctrl_in_pkg comp_fuse_ctrl_out_pkg \ + comp_fuse_ctrl_env_pkg \ + comp_fuse_ctrl_parameters_pkg comp_fuse_ctrl_sequence_pkg comp_fuse_ctrl_tests_pkg + +comp_uvmf_core : comp_uvm_pkg comp_uvmf_base_pkg + +make_build: comp_fuse_ctrl_dut comp_uvmf_core comp_hvl comp_test_bench + +hvl_build: q_comp_fuse_ctrl_rst_in_pkg q_comp_fuse_ctrl_rst_out_pkg q_comp_fuse_ctrl_core_axi_write_in_pkg q_comp_fuse_ctrl_core_axi_write_out_pkg q_comp_fuse_ctrl_prim_axi_write_in_pkg q_comp_fuse_ctrl_prim_axi_write_out_pkg q_comp_fuse_ctrl_core_axi_read_in_pkg q_comp_fuse_ctrl_core_axi_read_out_pkg q_comp_fuse_ctrl_prim_axi_read_in_pkg q_comp_fuse_ctrl_prim_axi_read_out_pkg q_comp_fuse_ctrl_secreg_axi_read_in_pkg q_comp_fuse_ctrl_secreg_axi_read_out_pkg q_comp_fuse_ctrl_lc_otp_in_pkg q_comp_fuse_ctrl_lc_otp_out_pkg q_comp_fuse_ctrl_in_pkg q_comp_fuse_ctrl_out_pkg comp_fuse_ctrl_env_pkg comp_fuse_ctrl_sequence_pkg comp_fuse_ctrl_tests_pkg hvl_comp_testbench link optimize + + +vinfo_build: comp_fuse_ctrl_vhdl_dut build_hdl_vinfo build_hvl_vinfo $(VINFO_TGT) + + $(HDL_COMP_CMD) -F hdl.vf + $(VEL_COMP) + +build: $(BUILD_TGT) + +# pragma uvmf custom additional_targets begin +# pragma uvmf custom additional_targets end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/bcr_testlist b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/bcr_testlist new file mode 100644 index 000000000..4df4567ee --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/bcr_testlist @@ -0,0 +1,19 @@ + + + +# Test list for use by RMDB file +# File syntax is +# TB_INFO { } { } +# TB ## All subsequent tests will run on this bench until a different "TB" line is seen +# TEST <1st_seed> ... +# If not enough seeds are provided then random seeds are used to pad +# If no repeat count is given, default is 1 +# pragma uvmf custom tb_info begin +TB_INFO fuse_ctrl { } { } +# pragma uvmf custom tb_info end +TB fuse_ctrl +# pragma uvmf custom regression_suite begin +TEST test_top 3 +# pragma uvmf custom regression_suite end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/bcr_testlist.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/bcr_testlist.yaml new file mode 100644 index 000000000..65b6be08a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/bcr_testlist.yaml @@ -0,0 +1,44 @@ + + + +# YAML test list for use by RMDB file +# File syntax is +# uvmf_testlist: +# testbenches: +# - name: +# extra_build_options: +# extra_run_options: +# - name: +# ... +# - name: +# tests: +# - name: +# uvm_testname: (defaults to test_name) +# testbench: (defaults to last tb name seen) +# repeat: (defaults to 1) +# seeds: [,,...,] (defaults to all random) +# extra_test_options: +# - name: +# ... +# - name: +# include: +# - (relative path reference is to the including YAML file) +# - +# ... +# - + +uvmf_testlist: + testbenches: +# pragma uvmf custom tb_info begin + - name: fuse_ctrl + extra_build_options: "" + extra_run_options: "" +# pragma uvmf custom tb_info end + tests: + - testbench: fuse_ctrl +# pragma uvmf custom regression_suite begin + - name: test_top + repeat: 3 +# pragma uvmf custom regression_suite end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/compile.do new file mode 100644 index 000000000..be9526004 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/compile.do @@ -0,0 +1,85 @@ + + +################################################################## +## ENVIRONMENT VARIABLES +################################################################## +quietly set ::env(UVMF_VIP_LIBRARY_HOME) ../../../verification_ip +quietly set ::env(UVMF_PROJECT_DIR) .. + +## Using VRM means that the build is occuring several more directories deeper underneath +## the sim directory, need to prepend some more '..' +if {[info exists ::env(VRM_BUILD)]} { + quietly set ::env(UVMF_VIP_LIBRARY_HOME) "../../../../../$::env(UVMF_VIP_LIBRARY_HOME)" + quietly set ::env(UVMF_PROJECT_DIR) "../../../../../$::env(UVMF_PROJECT_DIR)" +} +quietly set ::env(UVMF_VIP_LIBRARY_HOME) [file normalize $::env(UVMF_VIP_LIBRARY_HOME)] +quietly set ::env(UVMF_PROJECT_DIR) [file normalize $::env(UVMF_PROJECT_DIR)] +quietly echo "UVMF_VIP_LIBRARY_HOME = $::env(UVMF_VIP_LIBRARY_HOME)" +quietly echo "UVMF_PROJECT_DIR = $::env(UVMF_PROJECT_DIR)" + + +################################################################### +## HOUSEKEEPING : DELETE FILES THAT WILL BE REGENERATED +################################################################### +file delete -force *~ *.ucdb vsim.dbg *.vstf *.log work *.mem *.transcript.txt certe_dump.xml *.wlf covhtmlreport VRMDATA +file delete -force design.bin qwave.db dpiheader.h visualizer*.ses +file delete -force veloce.med veloce.wave veloce.map tbxbindings.h edsenv velrunopts.ini +file delete -force sv_connect.* + +################################################################### +## COMPILE DUT SOURCE CODE +################################################################### +vlib work +# pragma uvmf custom dut_compile_dofile_target begin +# UVMF_CHANGE_ME : Add commands to compile your dut here, replacing the default examples +#vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/rtl/verilog/verilog_dut.v +#vcom $env(UVMF_PROJECT_DIR)/rtl/vhdl/vhdl_dut.vhd +# pragma uvmf custom dut_compile_dofile_target end + +################################################################### +## COMPILE UVMF BASE/COMMON SOURCE CODE +################################################################### +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_HOME)/uvmf_base_pkg -F $env(UVMF_HOME)/uvmf_base_pkg/uvmf_base_pkg_filelist_hdl.f +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_HOME)/uvmf_base_pkg -F $env(UVMF_HOME)/uvmf_base_pkg/uvmf_base_pkg_filelist_hvl.f + + +################################################################### +## UVMF INTERFACE COMPILATION +################################################################### +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_in_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_out_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/compile.do + +################################################################### +## UVMF ENVIRONMENT COMPILATION +################################################################### +do $env(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg/compile.do + +################################################################### +## UVMF BENCHES COMPILATION +################################################################### +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/parameters $env(UVMF_PROJECT_DIR)/tb/parameters/fuse_ctrl_parameters_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/sequences $env(UVMF_PROJECT_DIR)/tb/sequences/fuse_ctrl_sequences_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/tests $env(UVMF_PROJECT_DIR)/tb/tests/fuse_ctrl_tests_pkg.sv + +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/testbench -F $env(UVMF_PROJECT_DIR)/tb/testbench/top_filelist_hdl.f +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/testbench -F $env(UVMF_PROJECT_DIR)/tb/testbench/top_filelist_hvl.f + +################################################################### +## OPTIMIZATION +################################################################### +vopt hvl_top hdl_top -o optimized_batch_top_tb +vopt +acc hvl_top hdl_top -o optimized_debug_top_tb diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/hdl.compile new file mode 100644 index 000000000..8e7bd41ac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/hdl.compile @@ -0,0 +1,5 @@ +needs: +# pragma uvmf custom dut_compile_info begin + - ../rtl/dut.compile +# pragma uvmf custom dut_compile_info end + - ../tb/testbench/hdl_top.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/hdl.vinfo new file mode 100644 index 000000000..da27ec773 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/hdl.vinfo @@ -0,0 +1 @@ +@use $UVMF_PROJECT_DIR/tb/testbench/hdl_top.vinfo diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/hvl.compile new file mode 100644 index 000000000..ce9525496 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/hvl.compile @@ -0,0 +1,2 @@ +needs: + - ../tb/testbench/hvl_top.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/hvl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/hvl.vinfo new file mode 100644 index 000000000..d22eff338 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/hvl.vinfo @@ -0,0 +1 @@ +@use $UVMF_PROJECT_DIR/tb/testbench/hvl_top.vinfo diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/run.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/run.do new file mode 100644 index 000000000..101ddc486 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/run.do @@ -0,0 +1,21 @@ + + +quietly set svLibs "" +quietly set extra_vsim_args "" + +################################################################### +## Check for additional vsim arguments passed using env var $UVMF_EXTRA_VSIM_ARGS +################################################################### +if {[info exists ::env(UVMF_EXTRA_VSIM_ARGS)]} { + echo "Adding more args to vsim command" + quietly set extra_vsim_args $::env(UVMF_EXTRA_VSIM_ARGS) +} + +################################################################## +## Launch Questa : generate vsim command line and execute +################################################################## +# pragma uvmf custom dut_run_dofile_target begin +# UVMF_CHANGE_ME : Change the UVM_TESTNAME plusarg to run a different test +quietly set cmd [format "vsim -i -sv_seed random +UVM_TESTNAME=test_top +UVM_VERBOSITY=UVM_HIGH -permit_unmatched_virtual_intf +notimingchecks -suppress 8887 %s %s -uvmcontrol=all -msgmode both -classdebug -assertdebug +uvm_set_config_int=*,enable_transaction_viewing,1 -do { set NoQuitOnFinish 1; onbreak {resume}; run 0; do wave.do; set PrefSource(OpenOnBreak) 0; radix hex showbase; } optimized_debug_top_tb" $svLibs $extra_vsim_args] +# pragma uvmf custom dut_run_dofile_target end +eval $cmd diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/tbx.config b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/tbx.config new file mode 100644 index 000000000..eec58168c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/tbx.config @@ -0,0 +1,10 @@ + + + + + +comp -questa +velsyn -D1S +rtlc -allow_4ST + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/testlist b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/testlist new file mode 100644 index 000000000..0c6229764 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/testlist @@ -0,0 +1,20 @@ + + + + +# Test list for use by RMDB file +# File syntax is +# TB_INFO { } { } +# TB ## All subsequent tests will run on this bench until a different "TB" line is seen +# TEST <1st_seed> ... +# If not enough seeds are provided then random seeds are used to pad +# If no repeat count is given, default is 1 +# pragma uvmf custom tb_info begin +TB_INFO fuse_ctrl { UVMF_VIP_LIBRARY_HOME=../../../../../../../../verification_ip UVMF_PROJECT_DIR=../../../../../../../fuse_ctrl } { } +# pragma uvmf custom tb_info end +TB fuse_ctrl +# pragma uvmf custom regression_suite begin +TEST test_top 3 +# pragma uvmf custom regression_suite end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/testlist.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/testlist.yaml new file mode 100644 index 000000000..6236cc790 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/testlist.yaml @@ -0,0 +1,44 @@ + + + +# YAML test list for use by RMDB file +# File syntax is +# uvmf_testlist: +# testbenches: +# - name: +# extra_build_options: +# extra_run_options: +# - name: +# ... +# - name: +# tests: +# - name: +# uvm_testname: (defaults to test_name) +# testbench: (defaults to last tb name seen) +# repeat: (defaults to 1) +# seeds: [,,...,] (defaults to all random) +# extra_test_options: +# - name: +# ... +# - name: +# include: +# - (relative path reference is to the including YAML file) +# - +# ... +# - + +uvmf_testlist: + testbenches: +# pragma uvmf custom tb_info begin + - name: fuse_ctrl + extra_build_options: "UVMF_VIP_LIBRARY_HOME=../../../../../../../../verification_ip UVMF_PROJECT_DIR=../../../../../../../fuse_ctrl" + extra_run_options: "" +# pragma uvmf custom tb_info end + tests: + - testbench: fuse_ctrl +# pragma uvmf custom regression_suite begin + - name: test_top + repeat: 3 +# pragma uvmf custom regression_suite end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/top.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/top.compile new file mode 100644 index 000000000..efd51c07e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/top.compile @@ -0,0 +1,3 @@ +needs: + - hvl.compile + - hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/veloce.config b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/veloce.config new file mode 100644 index 000000000..d09751555 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/veloce.config @@ -0,0 +1,26 @@ + + + + + +# pragma uvmf custom additional begin +comp -num_boards 1 +comp -hvl questa +# Please choose the correct emulator type code for +# comp -platform command or else velcomp will fail +# Available types are: +# - Veloce2 Quattro: D2 +# - Veloce2 Maximus: D2M +# - Veloce Strato TiL, Ti, and Mi: Strato +# - Veloce Strato M and Strato T: StratoM +# - comp -platform +comp -platform Strato + +rtlc -enable_tbx_pragma_checks +rtlc -allow_4ST +rtlc -allow_MDR +rtlc -compile_display +rtlc -xwave_siglist xwaves.sigs +# pragma uvmf custom additional end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/viswave.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/viswave.do new file mode 100644 index 000000000..db43b441f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/viswave.do @@ -0,0 +1,106 @@ + + +onerror resume +wave tags F0 +wave update off + +wave spacer -backgroundcolor Salmon { fuse_ctrl_rst_in_agent } +wave add uvm_test_top.environment.fuse_ctrl_rst_in_agent.fuse_ctrl_rst_in_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_rst_in_agent_bus +wave add -group fuse_ctrl_rst_in_agent_bus hdl_top.fuse_ctrl_rst_in_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_rst_in_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_rst_out_agent } +wave add uvm_test_top.environment.fuse_ctrl_rst_out_agent.fuse_ctrl_rst_out_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_rst_out_agent_bus +wave add -group fuse_ctrl_rst_out_agent_bus hdl_top.fuse_ctrl_rst_out_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_rst_out_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_core_axi_write_in_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_core_axi_write_in_if_agent.fuse_ctrl_core_axi_write_in_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_core_axi_write_in_if_agent_bus +wave add -group fuse_ctrl_core_axi_write_in_if_agent_bus hdl_top.fuse_ctrl_core_axi_write_in_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_core_axi_write_in_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_core_axi_write_out_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_core_axi_write_out_if_agent.fuse_ctrl_core_axi_write_out_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_core_axi_write_out_if_agent_bus +wave add -group fuse_ctrl_core_axi_write_out_if_agent_bus hdl_top.fuse_ctrl_core_axi_write_out_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_core_axi_write_out_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_prim_axi_write_in_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_prim_axi_write_in_if_agent.fuse_ctrl_prim_axi_write_in_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_prim_axi_write_in_if_agent_bus +wave add -group fuse_ctrl_prim_axi_write_in_if_agent_bus hdl_top.fuse_ctrl_prim_axi_write_in_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_prim_axi_write_in_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_prim_axi_write_out_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_prim_axi_write_out_if_agent.fuse_ctrl_prim_axi_write_out_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_prim_axi_write_out_if_agent_bus +wave add -group fuse_ctrl_prim_axi_write_out_if_agent_bus hdl_top.fuse_ctrl_prim_axi_write_out_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_prim_axi_write_out_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_core_axi_read_in_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_core_axi_read_in_if_agent.fuse_ctrl_core_axi_read_in_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_core_axi_read_in_if_agent_bus +wave add -group fuse_ctrl_core_axi_read_in_if_agent_bus hdl_top.fuse_ctrl_core_axi_read_in_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_core_axi_read_in_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_core_axi_read_out_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_core_axi_read_out_if_agent.fuse_ctrl_core_axi_read_out_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_core_axi_read_out_if_agent_bus +wave add -group fuse_ctrl_core_axi_read_out_if_agent_bus hdl_top.fuse_ctrl_core_axi_read_out_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_core_axi_read_out_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_prim_axi_read_in_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_prim_axi_read_in_if_agent.fuse_ctrl_prim_axi_read_in_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_prim_axi_read_in_if_agent_bus +wave add -group fuse_ctrl_prim_axi_read_in_if_agent_bus hdl_top.fuse_ctrl_prim_axi_read_in_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_prim_axi_read_in_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_prim_axi_read_out_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_prim_axi_read_out_if_agent.fuse_ctrl_prim_axi_read_out_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_prim_axi_read_out_if_agent_bus +wave add -group fuse_ctrl_prim_axi_read_out_if_agent_bus hdl_top.fuse_ctrl_prim_axi_read_out_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_prim_axi_read_out_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_secreg_axi_read_in_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_secreg_axi_read_in_if_agent.fuse_ctrl_secreg_axi_read_in_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_secreg_axi_read_in_if_agent_bus +wave add -group fuse_ctrl_secreg_axi_read_in_if_agent_bus hdl_top.fuse_ctrl_secreg_axi_read_in_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_secreg_axi_read_in_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_secreg_axi_read_out_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_secreg_axi_read_out_if_agent.fuse_ctrl_secreg_axi_read_out_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_secreg_axi_read_out_if_agent_bus +wave add -group fuse_ctrl_secreg_axi_read_out_if_agent_bus hdl_top.fuse_ctrl_secreg_axi_read_out_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_secreg_axi_read_out_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_lc_otp_in_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_lc_otp_in_if_agent.fuse_ctrl_lc_otp_in_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_lc_otp_in_if_agent_bus +wave add -group fuse_ctrl_lc_otp_in_if_agent_bus hdl_top.fuse_ctrl_lc_otp_in_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_lc_otp_in_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_lc_otp_out_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_lc_otp_out_if_agent.fuse_ctrl_lc_otp_out_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_lc_otp_out_if_agent_bus +wave add -group fuse_ctrl_lc_otp_out_if_agent_bus hdl_top.fuse_ctrl_lc_otp_out_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_lc_otp_out_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_in_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_in_if_agent.fuse_ctrl_in_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_in_if_agent_bus +wave add -group fuse_ctrl_in_if_agent_bus hdl_top.fuse_ctrl_in_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_in_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_out_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_out_if_agent.fuse_ctrl_out_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_out_if_agent_bus +wave add -group fuse_ctrl_out_if_agent_bus hdl_top.fuse_ctrl_out_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_out_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] + +wave update on +WaveSetStreamView + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/wave.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/wave.do new file mode 100644 index 000000000..1ec995984 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/wave.do @@ -0,0 +1,72 @@ + + +onerror {resume} +quietly WaveActivateNextPane {} 0 + +add wave -noupdate -divider fuse_ctrl_rst_in_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_rst_in_agent/fuse_ctrl_rst_in_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_rst_in_agent_bus /hdl_top/fuse_ctrl_rst_in_agent_bus/* +add wave -noupdate -divider fuse_ctrl_rst_out_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_rst_out_agent/fuse_ctrl_rst_out_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_rst_out_agent_bus /hdl_top/fuse_ctrl_rst_out_agent_bus/* +add wave -noupdate -divider fuse_ctrl_core_axi_write_in_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_core_axi_write_in_if_agent/fuse_ctrl_core_axi_write_in_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_core_axi_write_in_if_agent_bus /hdl_top/fuse_ctrl_core_axi_write_in_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_core_axi_write_out_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_core_axi_write_out_if_agent/fuse_ctrl_core_axi_write_out_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_core_axi_write_out_if_agent_bus /hdl_top/fuse_ctrl_core_axi_write_out_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_prim_axi_write_in_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_prim_axi_write_in_if_agent/fuse_ctrl_prim_axi_write_in_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_prim_axi_write_in_if_agent_bus /hdl_top/fuse_ctrl_prim_axi_write_in_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_prim_axi_write_out_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_prim_axi_write_out_if_agent/fuse_ctrl_prim_axi_write_out_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_prim_axi_write_out_if_agent_bus /hdl_top/fuse_ctrl_prim_axi_write_out_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_core_axi_read_in_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_core_axi_read_in_if_agent/fuse_ctrl_core_axi_read_in_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_core_axi_read_in_if_agent_bus /hdl_top/fuse_ctrl_core_axi_read_in_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_core_axi_read_out_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_core_axi_read_out_if_agent/fuse_ctrl_core_axi_read_out_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_core_axi_read_out_if_agent_bus /hdl_top/fuse_ctrl_core_axi_read_out_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_prim_axi_read_in_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_prim_axi_read_in_if_agent/fuse_ctrl_prim_axi_read_in_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_prim_axi_read_in_if_agent_bus /hdl_top/fuse_ctrl_prim_axi_read_in_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_prim_axi_read_out_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_prim_axi_read_out_if_agent/fuse_ctrl_prim_axi_read_out_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_prim_axi_read_out_if_agent_bus /hdl_top/fuse_ctrl_prim_axi_read_out_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_secreg_axi_read_in_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_secreg_axi_read_in_if_agent/fuse_ctrl_secreg_axi_read_in_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_secreg_axi_read_in_if_agent_bus /hdl_top/fuse_ctrl_secreg_axi_read_in_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_secreg_axi_read_out_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_secreg_axi_read_out_if_agent/fuse_ctrl_secreg_axi_read_out_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_secreg_axi_read_out_if_agent_bus /hdl_top/fuse_ctrl_secreg_axi_read_out_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_lc_otp_in_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_lc_otp_in_if_agent/fuse_ctrl_lc_otp_in_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_lc_otp_in_if_agent_bus /hdl_top/fuse_ctrl_lc_otp_in_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_lc_otp_out_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_lc_otp_out_if_agent/fuse_ctrl_lc_otp_out_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_lc_otp_out_if_agent_bus /hdl_top/fuse_ctrl_lc_otp_out_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_in_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_in_if_agent/fuse_ctrl_in_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_in_if_agent_bus /hdl_top/fuse_ctrl_in_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_out_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_out_if_agent/fuse_ctrl_out_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_out_if_agent_bus /hdl_top/fuse_ctrl_out_if_agent_bus/* + +TreeUpdate [SetDefaultTree] +quietly wave cursor active 0 +configure wave -namecolwidth 472 +configure wave -valuecolwidth 100 +configure wave -justifyvalue left +configure wave -signalnamewidth 0 +configure wave -snapdistance 10 +configure wave -datasetprefix 0 +configure wave -rowmargin 4 +configure wave -childrowmargin 2 +configure wave -gridoffset 0 +configure wave -gridperiod 1 +configure wave -griddelta 40 +configure wave -timeline 0 +configure wave -timelineunits ns +update +WaveRestoreZoom {27 ns} {168 ns} + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/xwaves.sigs b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/xwaves.sigs new file mode 100644 index 000000000..d75f0a575 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/sim/xwaves.sigs @@ -0,0 +1,17 @@ + + + + + +# pragma uvmf custom additional begin + +Group All + +#Top level signals +hdl_top.* +#Add additional levels or individual signals as needed +hdl_top.*.* + +# pragma uvmf custom additional end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.compile new file mode 100644 index 000000000..0c6b841a5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.compile @@ -0,0 +1,4 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +src: + - fuse_ctrl_parameters_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.sv new file mode 100644 index 000000000..df84a8b07 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.sv @@ -0,0 +1,66 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This package contains test level parameters +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +package fuse_ctrl_parameters_pkg; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + + // These parameters are used to uniquely identify each interface. The monitor_bfm and + // driver_bfm are placed into and retrieved from the uvm_config_db using these string + // names as the field_name. The parameter is also used to enable transaction viewing + // from the command line for selected interfaces using the UVM command line processing. + parameter string fuse_ctrl_rst_in_agent_BFM = "fuse_ctrl_rst_in_agent_BFM"; /* [0] */ + parameter string fuse_ctrl_rst_out_agent_BFM = "fuse_ctrl_rst_out_agent_BFM"; /* [1] */ + parameter string fuse_ctrl_core_axi_write_in_if_agent_BFM = "fuse_ctrl_core_axi_write_in_if_agent_BFM"; /* [2] */ + parameter string fuse_ctrl_core_axi_write_out_if_agent_BFM = "fuse_ctrl_core_axi_write_out_if_agent_BFM"; /* [3] */ + parameter string fuse_ctrl_prim_axi_write_in_if_agent_BFM = "fuse_ctrl_prim_axi_write_in_if_agent_BFM"; /* [4] */ + parameter string fuse_ctrl_prim_axi_write_out_if_agent_BFM = "fuse_ctrl_prim_axi_write_out_if_agent_BFM"; /* [5] */ + parameter string fuse_ctrl_core_axi_read_in_if_agent_BFM = "fuse_ctrl_core_axi_read_in_if_agent_BFM"; /* [6] */ + parameter string fuse_ctrl_core_axi_read_out_if_agent_BFM = "fuse_ctrl_core_axi_read_out_if_agent_BFM"; /* [7] */ + parameter string fuse_ctrl_prim_axi_read_in_if_agent_BFM = "fuse_ctrl_prim_axi_read_in_if_agent_BFM"; /* [8] */ + parameter string fuse_ctrl_prim_axi_read_out_if_agent_BFM = "fuse_ctrl_prim_axi_read_out_if_agent_BFM"; /* [9] */ + parameter string fuse_ctrl_secreg_axi_read_in_if_agent_BFM = "fuse_ctrl_secreg_axi_read_in_if_agent_BFM"; /* [10] */ + parameter string fuse_ctrl_secreg_axi_read_out_if_agent_BFM = "fuse_ctrl_secreg_axi_read_out_if_agent_BFM"; /* [11] */ + parameter string fuse_ctrl_lc_otp_in_if_agent_BFM = "fuse_ctrl_lc_otp_in_if_agent_BFM"; /* [12] */ + parameter string fuse_ctrl_lc_otp_out_if_agent_BFM = "fuse_ctrl_lc_otp_out_if_agent_BFM"; /* [13] */ + parameter string fuse_ctrl_in_if_agent_BFM = "fuse_ctrl_in_if_agent_BFM"; /* [14] */ + parameter string fuse_ctrl_out_if_agent_BFM = "fuse_ctrl_out_if_agent_BFM"; /* [15] */ + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.vinfo new file mode 100644 index 000000000..3bd4d7f9b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_parameters_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.compile new file mode 100644 index 000000000..85c9189c6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.compile @@ -0,0 +1,22 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile + - ../../../../verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile + - ../parameters/fuse_ctrl_parameters_pkg.compile +src: + - fuse_ctrl_sequences_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.sv new file mode 100644 index 000000000..3ebdc90b6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.sv @@ -0,0 +1,93 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This package includes all high level sequence classes used +// in the environment. These include utility sequences and top +// level sequences. +// +// CONTAINS: +// - +// - +// +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +// + +package fuse_ctrl_sequences_pkg; + import uvm_pkg::*; + import uvmf_base_pkg::*; + import fuse_ctrl_rst_in_pkg::*; + import fuse_ctrl_rst_in_pkg_hdl::*; + import fuse_ctrl_rst_out_pkg::*; + import fuse_ctrl_rst_out_pkg_hdl::*; + import fuse_ctrl_core_axi_write_in_pkg::*; + import fuse_ctrl_core_axi_write_in_pkg_hdl::*; + import fuse_ctrl_core_axi_write_out_pkg::*; + import fuse_ctrl_core_axi_write_out_pkg_hdl::*; + import fuse_ctrl_prim_axi_write_in_pkg::*; + import fuse_ctrl_prim_axi_write_in_pkg_hdl::*; + import fuse_ctrl_prim_axi_write_out_pkg::*; + import fuse_ctrl_prim_axi_write_out_pkg_hdl::*; + import fuse_ctrl_core_axi_read_in_pkg::*; + import fuse_ctrl_core_axi_read_in_pkg_hdl::*; + import fuse_ctrl_core_axi_read_out_pkg::*; + import fuse_ctrl_core_axi_read_out_pkg_hdl::*; + import fuse_ctrl_prim_axi_read_in_pkg::*; + import fuse_ctrl_prim_axi_read_in_pkg_hdl::*; + import fuse_ctrl_prim_axi_read_out_pkg::*; + import fuse_ctrl_prim_axi_read_out_pkg_hdl::*; + import fuse_ctrl_secreg_axi_read_in_pkg::*; + import fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; + import fuse_ctrl_secreg_axi_read_out_pkg::*; + import fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; + import fuse_ctrl_lc_otp_in_pkg::*; + import fuse_ctrl_lc_otp_in_pkg_hdl::*; + import fuse_ctrl_lc_otp_out_pkg::*; + import fuse_ctrl_lc_otp_out_pkg_hdl::*; + import fuse_ctrl_in_pkg::*; + import fuse_ctrl_in_pkg_hdl::*; + import fuse_ctrl_out_pkg::*; + import fuse_ctrl_out_pkg_hdl::*; + import fuse_ctrl_parameters_pkg::*; + import fuse_ctrl_env_pkg::*; + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + `include "src/fuse_ctrl_bench_sequence_base.svh" + `include "src/register_test_sequence.svh" + `include "src/example_derived_test_sequence.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the sequence package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.vinfo new file mode 100644 index 000000000..150eb8cc8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.vinfo @@ -0,0 +1,21 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo +@use $UVMF_PROJECT_DIR/tb/parameters/fuse_ctrl_parameters_pkg.vinfo ++incdir+@vinfodir +fuse_ctrl_sequences_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/sequences/src/example_derived_test_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/sequences/src/example_derived_test_sequence.svh new file mode 100644 index 000000000..7566dc511 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/sequences/src/example_derived_test_sequence.svh @@ -0,0 +1,44 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains the top level sequence used in example_derived_test. +// It is an example of a sequence that is extended from %(benchName)_bench_sequence_base +// and can override %(benchName)_bench_sequence_base. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class example_derived_test_sequence extends fuse_ctrl_bench_sequence_base; + + `uvm_object_utils( example_derived_test_sequence ); + + function new(string name = "" ); + super.new(name); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/sequences/src/fuse_ctrl_bench_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/sequences/src/fuse_ctrl_bench_sequence_base.svh new file mode 100644 index 000000000..395cc47d1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/sequences/src/fuse_ctrl_bench_sequence_base.svh @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// Description: This file contains the top level and utility sequences +// used by test_top. It can be extended to create derivative top +// level sequences. +// +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +// + + +typedef fuse_ctrl_env_configuration fuse_ctrl_env_configuration_t; + +class fuse_ctrl_bench_sequence_base extends uvmf_sequence_base #(uvm_sequence_item); + + `uvm_object_utils( fuse_ctrl_bench_sequence_base ); + + // pragma uvmf custom sequences begin + +typedef fuse_ctrl_env_sequence_base #( + .CONFIG_T(fuse_ctrl_env_configuration_t) + ) + fuse_ctrl_env_sequence_base_t; +rand fuse_ctrl_env_sequence_base_t fuse_ctrl_env_seq; + + + + // UVMF_CHANGE_ME : Instantiate, construct, and start sequences as needed to create stimulus scenarios. + // Instantiate sequences here + typedef fuse_ctrl_rst_random_sequence fuse_ctrl_rst_agent_random_seq_t; + fuse_ctrl_rst_agent_random_seq_t fuse_ctrl_rst_agent_random_seq; + typedef fuse_ctrl_core_axi_write_if_random_sequence fuse_ctrl_core_axi_write_agent_random_seq_t; + fuse_ctrl_core_axi_write_agent_random_seq_t fuse_ctrl_core_axi_write_agent_random_seq; + typedef fuse_ctrl_prim_axi_write_if_random_sequence fuse_ctrl_prim_axi_write_agent_random_seq_t; + fuse_ctrl_prim_axi_write_agent_random_seq_t fuse_ctrl_prim_axi_write_agent_random_seq; + typedef fuse_ctrl_core_axi_read_if_random_sequence fuse_ctrl_core_axi_read_agent_random_seq_t; + fuse_ctrl_core_axi_read_agent_random_seq_t fuse_ctrl_core_axi_read_agent_random_seq; + typedef fuse_ctrl_prim_axi_read_if_random_sequence fuse_ctrl_prim_axi_read_agent_random_seq_t; + fuse_ctrl_prim_axi_read_agent_random_seq_t fuse_ctrl_prim_axi_read_agent_random_seq; + typedef fuse_ctrl_secreg_axi_read_if_random_sequence fuse_ctrl_secreg_axi_read_agent_random_seq_t; + fuse_ctrl_secreg_axi_read_agent_random_seq_t fuse_ctrl_secreg_axi_read_agent_random_seq; + typedef fuse_ctrl_lc_otp_if_random_sequence fuse_ctrl_lc_otp_if_agent_random_seq_t; + fuse_ctrl_lc_otp_if_agent_random_seq_t fuse_ctrl_lc_otp_if_agent_random_seq; + // pragma uvmf custom sequences end + + // Sequencer handles for each active interface in the environment + typedef fuse_ctrl_rst_in_transaction fuse_ctrl_rst_in_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_rst_in_agent_transaction_t) fuse_ctrl_rst_in_agent_sequencer; + typedef fuse_ctrl_core_axi_write_in_transaction fuse_ctrl_core_axi_write_in_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_core_axi_write_in_if_agent_transaction_t) fuse_ctrl_core_axi_write_in_if_agent_sequencer; + typedef fuse_ctrl_prim_axi_write_in_transaction fuse_ctrl_prim_axi_write_in_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_prim_axi_write_in_if_agent_transaction_t) fuse_ctrl_prim_axi_write_in_if_agent_sequencer; + typedef fuse_ctrl_core_axi_read_in_transaction fuse_ctrl_core_axi_read_in_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_core_axi_read_in_if_agent_transaction_t) fuse_ctrl_core_axi_read_in_if_agent_sequencer; + typedef fuse_ctrl_prim_axi_read_in_transaction fuse_ctrl_prim_axi_read_in_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_prim_axi_read_in_if_agent_transaction_t) fuse_ctrl_prim_axi_read_in_if_agent_sequencer; + typedef fuse_ctrl_secreg_axi_read_in_transaction fuse_ctrl_secreg_axi_read_in_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_secreg_axi_read_in_if_agent_transaction_t) fuse_ctrl_secreg_axi_read_in_if_agent_sequencer; + typedef fuse_ctrl_lc_otp_in_transaction fuse_ctrl_lc_otp_in_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_lc_otp_in_if_agent_transaction_t) fuse_ctrl_lc_otp_in_if_agent_sequencer; + typedef fuse_ctrl_in_transaction fuse_ctrl_in_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_in_if_agent_transaction_t) fuse_ctrl_in_if_agent_sequencer; + + + // Top level environment configuration handle + fuse_ctrl_env_configuration_t top_configuration; + + // Configuration handles to access interface BFM's + fuse_ctrl_rst_in_configuration fuse_ctrl_rst_in_agent_config; + fuse_ctrl_rst_out_configuration fuse_ctrl_rst_out_agent_config; + fuse_ctrl_core_axi_write_in_configuration fuse_ctrl_core_axi_write_in_if_agent_config; + fuse_ctrl_core_axi_write_out_configuration fuse_ctrl_core_axi_write_out_if_agent_config; + fuse_ctrl_prim_axi_write_in_configuration fuse_ctrl_prim_axi_write_in_if_agent_config; + fuse_ctrl_prim_axi_write_out_configuration fuse_ctrl_prim_axi_write_out_if_agent_config; + fuse_ctrl_core_axi_read_in_configuration fuse_ctrl_core_axi_read_in_if_agent_config; + fuse_ctrl_core_axi_read_out_configuration fuse_ctrl_core_axi_read_out_if_agent_config; + fuse_ctrl_prim_axi_read_in_configuration fuse_ctrl_prim_axi_read_in_if_agent_config; + fuse_ctrl_prim_axi_read_out_configuration fuse_ctrl_prim_axi_read_out_if_agent_config; + fuse_ctrl_secreg_axi_read_in_configuration fuse_ctrl_secreg_axi_read_in_if_agent_config; + fuse_ctrl_secreg_axi_read_out_configuration fuse_ctrl_secreg_axi_read_out_if_agent_config; + fuse_ctrl_lc_otp_in_configuration fuse_ctrl_lc_otp_in_if_agent_config; + fuse_ctrl_lc_otp_out_configuration fuse_ctrl_lc_otp_out_if_agent_config; + fuse_ctrl_in_configuration fuse_ctrl_in_if_agent_config; + fuse_ctrl_out_configuration fuse_ctrl_out_if_agent_config; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + function new( string name = "" ); + super.new( name ); + // Retrieve the configuration handles from the uvm_config_db + + // Retrieve top level configuration handle + if ( !uvm_config_db#(fuse_ctrl_env_configuration_t)::get(null,UVMF_CONFIGURATIONS, "TOP_ENV_CONFIG",top_configuration) ) begin + `uvm_info("CFG", "*** FATAL *** uvm_config_db::get can not find TOP_ENV_CONFIG. Are you using an older UVMF release than what was used to generate this bench?",UVM_NONE); + `uvm_fatal("CFG", "uvm_config_db#(fuse_ctrl_env_configuration_t)::get cannot find resource TOP_ENV_CONFIG"); + end + + // Retrieve config handles for all agents + if( !uvm_config_db #( fuse_ctrl_rst_in_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_rst_in_agent_BFM , fuse_ctrl_rst_in_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_rst_in_configuration )::get cannot find resource fuse_ctrl_rst_in_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_rst_out_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_rst_out_agent_BFM , fuse_ctrl_rst_out_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_rst_out_configuration )::get cannot find resource fuse_ctrl_rst_out_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_core_axi_write_in_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_core_axi_write_in_if_agent_BFM , fuse_ctrl_core_axi_write_in_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_core_axi_write_in_configuration )::get cannot find resource fuse_ctrl_core_axi_write_in_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_core_axi_write_out_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_core_axi_write_out_if_agent_BFM , fuse_ctrl_core_axi_write_out_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_core_axi_write_out_configuration )::get cannot find resource fuse_ctrl_core_axi_write_out_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_prim_axi_write_in_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_prim_axi_write_in_if_agent_BFM , fuse_ctrl_prim_axi_write_in_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_prim_axi_write_in_configuration )::get cannot find resource fuse_ctrl_prim_axi_write_in_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_prim_axi_write_out_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_prim_axi_write_out_if_agent_BFM , fuse_ctrl_prim_axi_write_out_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_prim_axi_write_out_configuration )::get cannot find resource fuse_ctrl_prim_axi_write_out_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_core_axi_read_in_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_core_axi_read_in_if_agent_BFM , fuse_ctrl_core_axi_read_in_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_core_axi_read_in_configuration )::get cannot find resource fuse_ctrl_core_axi_read_in_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_core_axi_read_out_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_core_axi_read_out_if_agent_BFM , fuse_ctrl_core_axi_read_out_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_core_axi_read_out_configuration )::get cannot find resource fuse_ctrl_core_axi_read_out_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_prim_axi_read_in_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_prim_axi_read_in_if_agent_BFM , fuse_ctrl_prim_axi_read_in_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_prim_axi_read_in_configuration )::get cannot find resource fuse_ctrl_prim_axi_read_in_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_prim_axi_read_out_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_prim_axi_read_out_if_agent_BFM , fuse_ctrl_prim_axi_read_out_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_prim_axi_read_out_configuration )::get cannot find resource fuse_ctrl_prim_axi_read_out_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_secreg_axi_read_in_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_secreg_axi_read_in_if_agent_BFM , fuse_ctrl_secreg_axi_read_in_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_secreg_axi_read_in_configuration )::get cannot find resource fuse_ctrl_secreg_axi_read_in_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_secreg_axi_read_out_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_secreg_axi_read_out_if_agent_BFM , fuse_ctrl_secreg_axi_read_out_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_secreg_axi_read_out_configuration )::get cannot find resource fuse_ctrl_secreg_axi_read_out_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_lc_otp_in_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_lc_otp_in_if_agent_BFM , fuse_ctrl_lc_otp_in_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_lc_otp_in_configuration )::get cannot find resource fuse_ctrl_lc_otp_in_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_lc_otp_out_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_lc_otp_out_if_agent_BFM , fuse_ctrl_lc_otp_out_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_lc_otp_out_configuration )::get cannot find resource fuse_ctrl_lc_otp_out_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_in_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_in_if_agent_BFM , fuse_ctrl_in_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_in_configuration )::get cannot find resource fuse_ctrl_in_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_out_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_out_if_agent_BFM , fuse_ctrl_out_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_out_configuration )::get cannot find resource fuse_ctrl_out_if_agent_BFM" ) + + // Assign the sequencer handles from the handles within agent configurations + fuse_ctrl_rst_in_agent_sequencer = fuse_ctrl_rst_in_agent_config.get_sequencer(); + fuse_ctrl_core_axi_write_in_if_agent_sequencer = fuse_ctrl_core_axi_write_in_if_agent_config.get_sequencer(); + fuse_ctrl_prim_axi_write_in_if_agent_sequencer = fuse_ctrl_prim_axi_write_in_if_agent_config.get_sequencer(); + fuse_ctrl_core_axi_read_in_if_agent_sequencer = fuse_ctrl_core_axi_read_in_if_agent_config.get_sequencer(); + fuse_ctrl_prim_axi_read_in_if_agent_sequencer = fuse_ctrl_prim_axi_read_in_if_agent_config.get_sequencer(); + fuse_ctrl_secreg_axi_read_in_if_agent_sequencer = fuse_ctrl_secreg_axi_read_in_if_agent_config.get_sequencer(); + fuse_ctrl_lc_otp_in_if_agent_sequencer = fuse_ctrl_lc_otp_in_if_agent_config.get_sequencer(); + fuse_ctrl_in_if_agent_sequencer = fuse_ctrl_in_if_agent_config.get_sequencer(); + + + + // pragma uvmf custom new begin + // pragma uvmf custom new end + + endfunction + + // **************************************************************************** + virtual task body(); + // pragma uvmf custom body begin + + // Construct sequences here + + fuse_ctrl_env_seq = fuse_ctrl_env_sequence_base_t::type_id::create("fuse_ctrl_env_seq"); + + fuse_ctrl_rst_agent_random_seq = fuse_ctrl_rst_agent_random_seq_t::type_id::create("fuse_ctrl_rst_agent_random_seq"); + fuse_ctrl_core_axi_write_agent_random_seq = fuse_ctrl_core_axi_write_agent_random_seq_t::type_id::create("fuse_ctrl_core_axi_write_agent_random_seq"); + fuse_ctrl_prim_axi_write_agent_random_seq = fuse_ctrl_prim_axi_write_agent_random_seq_t::type_id::create("fuse_ctrl_prim_axi_write_agent_random_seq"); + fuse_ctrl_core_axi_read_agent_random_seq = fuse_ctrl_core_axi_read_agent_random_seq_t::type_id::create("fuse_ctrl_core_axi_read_agent_random_seq"); + fuse_ctrl_prim_axi_read_agent_random_seq = fuse_ctrl_prim_axi_read_agent_random_seq_t::type_id::create("fuse_ctrl_prim_axi_read_agent_random_seq"); + fuse_ctrl_secreg_axi_read_agent_random_seq = fuse_ctrl_secreg_axi_read_agent_random_seq_t::type_id::create("fuse_ctrl_secreg_axi_read_agent_random_seq"); + fuse_ctrl_lc_otp_if_agent_random_seq = fuse_ctrl_lc_otp_if_agent_random_seq_t::type_id::create("fuse_ctrl_lc_otp_if_agent_random_seq"); + fork + fuse_ctrl_rst_agent_config.wait_for_reset(); + fuse_ctrl_core_axi_write_agent_config.wait_for_reset(); + fuse_ctrl_prim_axi_write_agent_config.wait_for_reset(); + fuse_ctrl_core_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_prim_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_secreg_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_lc_otp_if_agent_config.wait_for_reset(); + join + // Start RESPONDER sequences here + fork + join_none + // Start INITIATOR sequences here + fork + repeat (25) fuse_ctrl_rst_agent_random_seq.start(fuse_ctrl_rst_agent_sequencer); + repeat (25) fuse_ctrl_core_axi_write_agent_random_seq.start(fuse_ctrl_core_axi_write_agent_sequencer); + repeat (25) fuse_ctrl_prim_axi_write_agent_random_seq.start(fuse_ctrl_prim_axi_write_agent_sequencer); + repeat (25) fuse_ctrl_core_axi_read_agent_random_seq.start(fuse_ctrl_core_axi_read_agent_sequencer); + repeat (25) fuse_ctrl_prim_axi_read_agent_random_seq.start(fuse_ctrl_prim_axi_read_agent_sequencer); + repeat (25) fuse_ctrl_secreg_axi_read_agent_random_seq.start(fuse_ctrl_secreg_axi_read_agent_sequencer); + repeat (25) fuse_ctrl_lc_otp_if_agent_random_seq.start(fuse_ctrl_lc_otp_if_agent_sequencer); + join + +fuse_ctrl_env_seq.start(top_configuration.vsqr); + + // UVMF_CHANGE_ME : Extend the simulation XXX number of clocks after + // the last sequence to allow for the last sequence item to flow + // through the design. + fork + fuse_ctrl_rst_agent_config.wait_for_num_clocks(400); + fuse_ctrl_core_axi_write_agent_config.wait_for_num_clocks(400); + fuse_ctrl_prim_axi_write_agent_config.wait_for_num_clocks(400); + fuse_ctrl_core_axi_read_agent_config.wait_for_num_clocks(400); + fuse_ctrl_prim_axi_read_agent_config.wait_for_num_clocks(400); + fuse_ctrl_secreg_axi_read_agent_config.wait_for_num_clocks(400); + fuse_ctrl_lc_otp_if_agent_config.wait_for_num_clocks(400); + join + + // pragma uvmf custom body end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/sequences/src/register_test_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/sequences/src/register_test_sequence.svh new file mode 100644 index 000000000..0db60c39b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/sequences/src/register_test_sequence.svh @@ -0,0 +1,76 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains the top level sequence used in register_test. +// It uses the UVM built in register test. Specific UVM built-in tests can be +// selected in the body task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class register_test_sequence extends fuse_ctrl_bench_sequence_base; + + `uvm_object_utils( register_test_sequence ); + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "" ); + super.new(name); + endfunction + + // **************************************************************************** + virtual task body(); + + // Reset the DUT + fork + // pragma uvmf custom register_test_reset begin + // UVMF_CHANGE_ME + // Select the desired wait_for_reset or provide custom mechanism. + // fork-join for this code block may be unnecessary based on your situation. + fuse_ctrl_rst_agent_config.wait_for_reset(); + fuse_ctrl_core_axi_write_agent_config.wait_for_reset(); + fuse_ctrl_prim_axi_write_agent_config.wait_for_reset(); + fuse_ctrl_core_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_prim_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_secreg_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_lc_otp_if_agent_config.wait_for_reset(); + // pragma uvmf custom register_test_reset end + join + + // pragma uvmf custom register_test_setup begin + // UVMF_CHANGE_ME perform potentially necessary operations before running the sequence. + // pragma uvmf custom register_test_setup end + + // pragma uvmf custom register_test_operation begin + // UVMF_CHANGE_ME Perform your custom register test + // pragma uvmf custom register_test_operation end + + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/hdl_top.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/hdl_top.compile new file mode 100644 index 000000000..651edf5d7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/hdl_top.compile @@ -0,0 +1,24 @@ +incdir: + - ${uvm_path}/src + - . +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ../parameters/fuse_ctrl_parameters_pkg.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hdl.compile +src: + - hdl_top.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/hdl_top.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/hdl_top.sv new file mode 100644 index 000000000..c7cbfcb62 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/hdl_top.sv @@ -0,0 +1,339 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// Description: This top level module instantiates all synthesizable +// static content. This and tb_top.sv are the two top level modules +// of the simulation. +// +// This module instantiates the following: +// DUT: The Design Under Test +// Interfaces: Signal bundles that contain signals connected to DUT +// Driver BFM's: BFM's that actively drive interface signals +// Monitor BFM's: BFM's that passively monitor interface signals +// +//---------------------------------------------------------------------- + +//---------------------------------------------------------------------- +// + +module hdl_top; + +import fuse_ctrl_parameters_pkg::*; +import uvmf_base_pkg_hdl::*; + + // pragma attribute hdl_top partition_module_xrtl +// pragma uvmf custom clock_generator begin + bit clk; + // Instantiate a clk driver + // tbx clkgen + initial begin + clk = 0; + #0ns; + forever begin + clk = ~clk; + #5ns; + end + end +// pragma uvmf custom clock_generator end + +// pragma uvmf custom reset_generator begin + bit rst; + // Instantiate a rst driver + // tbx clkgen + initial begin + rst = 0; + #200ns; + rst = 1; + end +// pragma uvmf custom reset_generator end + + // pragma uvmf custom module_item_additional begin + logic edn_clk; + logic edn_rst_n; + // pragma uvmf custom module_item_additional end + + // Instantiate the signal bundle, monitor bfm and driver bfm for each interface. + // The signal bundle, _if, contains signals to be connected to the DUT. + // The monitor, monitor_bfm, observes the bus, _if, and captures transactions. + // The driver, driver_bfm, drives transactions onto the bus, _if. + fuse_ctrl_rst_in_if fuse_ctrl_rst_in_agent_bus( + // pragma uvmf custom fuse_ctrl_rst_in_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_rst_in_agent_bus_connections end + ); + fuse_ctrl_rst_out_if fuse_ctrl_rst_out_agent_bus( + // pragma uvmf custom fuse_ctrl_rst_out_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_rst_out_agent_bus_connections end + ); + fuse_ctrl_core_axi_write_in_if fuse_ctrl_core_axi_write_in_if_agent_bus( + // pragma uvmf custom fuse_ctrl_core_axi_write_in_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_core_axi_write_in_if_agent_bus_connections end + ); + fuse_ctrl_core_axi_write_out_if fuse_ctrl_core_axi_write_out_if_agent_bus( + // pragma uvmf custom fuse_ctrl_core_axi_write_out_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_core_axi_write_out_if_agent_bus_connections end + ); + fuse_ctrl_prim_axi_write_in_if fuse_ctrl_prim_axi_write_in_if_agent_bus( + // pragma uvmf custom fuse_ctrl_prim_axi_write_in_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_prim_axi_write_in_if_agent_bus_connections end + ); + fuse_ctrl_prim_axi_write_out_if fuse_ctrl_prim_axi_write_out_if_agent_bus( + // pragma uvmf custom fuse_ctrl_prim_axi_write_out_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_prim_axi_write_out_if_agent_bus_connections end + ); + fuse_ctrl_core_axi_read_in_if fuse_ctrl_core_axi_read_in_if_agent_bus( + // pragma uvmf custom fuse_ctrl_core_axi_read_in_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_core_axi_read_in_if_agent_bus_connections end + ); + fuse_ctrl_core_axi_read_out_if fuse_ctrl_core_axi_read_out_if_agent_bus( + // pragma uvmf custom fuse_ctrl_core_axi_read_out_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_core_axi_read_out_if_agent_bus_connections end + ); + fuse_ctrl_prim_axi_read_in_if fuse_ctrl_prim_axi_read_in_if_agent_bus( + // pragma uvmf custom fuse_ctrl_prim_axi_read_in_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_prim_axi_read_in_if_agent_bus_connections end + ); + fuse_ctrl_prim_axi_read_out_if fuse_ctrl_prim_axi_read_out_if_agent_bus( + // pragma uvmf custom fuse_ctrl_prim_axi_read_out_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_prim_axi_read_out_if_agent_bus_connections end + ); + fuse_ctrl_secreg_axi_read_in_if fuse_ctrl_secreg_axi_read_in_if_agent_bus( + // pragma uvmf custom fuse_ctrl_secreg_axi_read_in_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_secreg_axi_read_in_if_agent_bus_connections end + ); + fuse_ctrl_secreg_axi_read_out_if fuse_ctrl_secreg_axi_read_out_if_agent_bus( + // pragma uvmf custom fuse_ctrl_secreg_axi_read_out_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_secreg_axi_read_out_if_agent_bus_connections end + ); + fuse_ctrl_lc_otp_in_if fuse_ctrl_lc_otp_in_if_agent_bus( + // pragma uvmf custom fuse_ctrl_lc_otp_in_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_lc_otp_in_if_agent_bus_connections end + ); + fuse_ctrl_lc_otp_out_if fuse_ctrl_lc_otp_out_if_agent_bus( + // pragma uvmf custom fuse_ctrl_lc_otp_out_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_lc_otp_out_if_agent_bus_connections end + ); + fuse_ctrl_in_if fuse_ctrl_in_if_agent_bus( + // pragma uvmf custom fuse_ctrl_in_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_in_if_agent_bus_connections end + ); + fuse_ctrl_out_if fuse_ctrl_out_if_agent_bus( + // pragma uvmf custom fuse_ctrl_out_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_out_if_agent_bus_connections end + ); + fuse_ctrl_rst_in_monitor_bfm fuse_ctrl_rst_in_agent_mon_bfm(fuse_ctrl_rst_in_agent_bus.monitor_port); + fuse_ctrl_rst_out_monitor_bfm fuse_ctrl_rst_out_agent_mon_bfm(fuse_ctrl_rst_out_agent_bus.monitor_port); + fuse_ctrl_core_axi_write_in_monitor_bfm fuse_ctrl_core_axi_write_in_if_agent_mon_bfm(fuse_ctrl_core_axi_write_in_if_agent_bus.monitor_port); + fuse_ctrl_core_axi_write_out_monitor_bfm fuse_ctrl_core_axi_write_out_if_agent_mon_bfm(fuse_ctrl_core_axi_write_out_if_agent_bus.monitor_port); + fuse_ctrl_prim_axi_write_in_monitor_bfm fuse_ctrl_prim_axi_write_in_if_agent_mon_bfm(fuse_ctrl_prim_axi_write_in_if_agent_bus.monitor_port); + fuse_ctrl_prim_axi_write_out_monitor_bfm fuse_ctrl_prim_axi_write_out_if_agent_mon_bfm(fuse_ctrl_prim_axi_write_out_if_agent_bus.monitor_port); + fuse_ctrl_core_axi_read_in_monitor_bfm fuse_ctrl_core_axi_read_in_if_agent_mon_bfm(fuse_ctrl_core_axi_read_in_if_agent_bus.monitor_port); + fuse_ctrl_core_axi_read_out_monitor_bfm fuse_ctrl_core_axi_read_out_if_agent_mon_bfm(fuse_ctrl_core_axi_read_out_if_agent_bus.monitor_port); + fuse_ctrl_prim_axi_read_in_monitor_bfm fuse_ctrl_prim_axi_read_in_if_agent_mon_bfm(fuse_ctrl_prim_axi_read_in_if_agent_bus.monitor_port); + fuse_ctrl_prim_axi_read_out_monitor_bfm fuse_ctrl_prim_axi_read_out_if_agent_mon_bfm(fuse_ctrl_prim_axi_read_out_if_agent_bus.monitor_port); + fuse_ctrl_secreg_axi_read_in_monitor_bfm fuse_ctrl_secreg_axi_read_in_if_agent_mon_bfm(fuse_ctrl_secreg_axi_read_in_if_agent_bus.monitor_port); + fuse_ctrl_secreg_axi_read_out_monitor_bfm fuse_ctrl_secreg_axi_read_out_if_agent_mon_bfm(fuse_ctrl_secreg_axi_read_out_if_agent_bus.monitor_port); + fuse_ctrl_lc_otp_in_monitor_bfm fuse_ctrl_lc_otp_in_if_agent_mon_bfm(fuse_ctrl_lc_otp_in_if_agent_bus.monitor_port); + fuse_ctrl_lc_otp_out_monitor_bfm fuse_ctrl_lc_otp_out_if_agent_mon_bfm(fuse_ctrl_lc_otp_out_if_agent_bus.monitor_port); + fuse_ctrl_in_monitor_bfm fuse_ctrl_in_if_agent_mon_bfm(fuse_ctrl_in_if_agent_bus.monitor_port); + fuse_ctrl_out_monitor_bfm fuse_ctrl_out_if_agent_mon_bfm(fuse_ctrl_out_if_agent_bus.monitor_port); + fuse_ctrl_rst_in_driver_bfm fuse_ctrl_rst_in_agent_drv_bfm(fuse_ctrl_rst_in_agent_bus.initiator_port); + fuse_ctrl_core_axi_write_in_driver_bfm fuse_ctrl_core_axi_write_in_if_agent_drv_bfm(fuse_ctrl_core_axi_write_in_if_agent_bus.initiator_port); + fuse_ctrl_prim_axi_write_in_driver_bfm fuse_ctrl_prim_axi_write_in_if_agent_drv_bfm(fuse_ctrl_prim_axi_write_in_if_agent_bus.initiator_port); + fuse_ctrl_core_axi_read_in_driver_bfm fuse_ctrl_core_axi_read_in_if_agent_drv_bfm(fuse_ctrl_core_axi_read_in_if_agent_bus.initiator_port); + fuse_ctrl_prim_axi_read_in_driver_bfm fuse_ctrl_prim_axi_read_in_if_agent_drv_bfm(fuse_ctrl_prim_axi_read_in_if_agent_bus.initiator_port); + fuse_ctrl_secreg_axi_read_in_driver_bfm fuse_ctrl_secreg_axi_read_in_if_agent_drv_bfm(fuse_ctrl_secreg_axi_read_in_if_agent_bus.initiator_port); + fuse_ctrl_lc_otp_in_driver_bfm fuse_ctrl_lc_otp_in_if_agent_drv_bfm(fuse_ctrl_lc_otp_in_if_agent_bus.initiator_port); + fuse_ctrl_in_driver_bfm fuse_ctrl_in_if_agent_drv_bfm(fuse_ctrl_in_if_agent_bus.initiator_port); + + // pragma uvmf custom dut_instantiation begin + // UVMF_CHANGE_ME : Add DUT and connect to signals in _bus interfaces listed above + // Instantiate your DUT here + // These DUT's instantiated to show verilog and vhdl instantiation + //verilog_dut dut_verilog( .clk(clk), .rst(rst), .in_signal(vhdl_to_verilog_signal), .out_signal(verilog_to_vhdl_signal)); + //vhdl_dut dut_vhdl ( .clk(clk), .rst(rst), .in_signal(verilog_to_vhdl_signal), .out_signal(vhdl_to_verilog_signal)); + + otp_ctrl_top #( + .MemInitFile (MemInitFile) + ) dut ( + .clk_i (fuse_ctrl_rst_in_agent_bus.clk_i ), + .rst_ni (fuse_ctrl_rst_in_agent_bus.rst_ni ), + // edn + .clk_edn_i (edn_clk ), + .rst_edn_ni (edn_rst_n ), + .edn_o (fuse_ctrl_out_if_agent_bus.edn_o), //(edn_if[0].req ), + .edn_i (fuse_ctrl_in_if_agent_bus.edn_i), //({edn_if[0].ack, edn_if[0].d_data}), + // AXI interface + .s_core_axi_r_if (axi_core_if.r_sub), + .s_core_axi_w_if (axi_core_if.w_sub), + .s_prim_axi_r_if (axI_prim_if.r_sub), + .s_prim_axi_w_if (axi_prim_if.w_sub), + .s_secreg_axi_r_if (axi_secreg_if.r_sub), + // interrupt + .intr_otp_operation_done_o (fuse_ctrl_out_if_agent_bus.intr_otp_operation_done), + .intr_otp_error_o (fuse_ctrl_out_if_agent_bus.intr_otp_error), + // alert + .alert_rx_i (fuse_ctrl_in_if_agent_bus.alert_rx_i ), //(alert_rx parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ALERT_TEST_OFFSET = 13'h c; + .alert_tx_o (fuse_ctrl_out_if_agent_bus.alert_tx_o ), //(alert_tx ), + // ast + .obs_ctrl_i (fuse_ctrl_in_if_agent_bus.obs_ctrl_i), //(otp_ctrl_if.obs_ctrl_i), + .otp_obs_o (fuse_ctrl_out_if_agent_bus.otp_obs_o), + .otp_ast_pwr_seq_o (fuse_ctrl_out_if_agent_bus.otp_ast_pwr_seq_o), //(ast_req), + .otp_ast_pwr_seq_h_i (fuse_ctrl_out_if_agent_bus.otp_ast_pwr_seq_h_i), //(otp_ctrl_if.otp_ast_pwr_seq_h_i), + // pwrmgr + .pwr_otp_i (fuse_ctrl_rst_in_agent_bus.pwr_otp_i), //(otp_ctrl_if.pwr_otp_init_i), + .pwr_otp_o (fuse_ctrl_rst_out_agent_bus.pwr_otp_o), //({otp_ctrl_if.pwr_otp_done_o, otp_ctrl_if.pwr_otp_idle_o}), + // lc + .lc_otp_vendor_test_i (fuse_ctrl_lc_otp_in_if_agent_bus.lc_otp_vendor_test_i), //(otp_ctrl_if.otp_vendor_test_ctrl_i), + .lc_otp_vendor_test_o (fuse_ctrl_lc_otp_out_if_agent_bus.lc_otp_vendor_test_o), //(otp_ctrl_if.otp_vendor_test_status_o), + .lc_otp_program_i (fuse_ctrl_lc_otp_out_if_agent_bus.lc_otp_program_i), //({lc_prog_if.req, lc_prog_if.h_data}), + .lc_otp_program_o (fuse_ctrl_lc_otp_out_if_agent_bus.lc_otp_program_o), //({lc_prog_if.d_data, lc_prog_if.ack}), + //.lc_creator_seed_sw_rw_en_i (lc_creator_seed_sw_rw_en_i), //(otp_ctrl_if.lc_creator_seed_sw_rw_en_i), + //.lc_owner_seed_sw_rw_en_i (lc_owner_seed_sw_rw_en_i), //(otp_ctrl_if.lc_owner_seed_sw_rw_en_i), + //.lc_seed_hw_rd_en_i (lc_seed_hw_rd_en_i), //(otp_ctrl_if.lc_seed_hw_rd_en_i), + .lc_dft_en_i (fuse_ctrl_lc_otp_in_if_agent_bus.lc_dft_en_i), //(otp_ctrl_if.lc_dft_en_i), + .lc_escalate_en_i (fuse_ctrl_lc_otp_in_if_agent_bus.lc_escalate_en_i), //(otp_ctrl_if.lc_escalate_en_i), + .lc_check_byp_en_i (fuse_ctrl_lc_otp_in_if_agent_bus.lc_check_byp_en_i), //(otp_ctrl_if.lc_check_byp_en_i), + .otp_lc_data_o (fuse_ctrl_lc_otp_out_if_agent_bus.otp_lc_data_o), //(otp_ctrl_if.lc_data_o), + + + .otp_broadcast_o (fuse_ctrl_out_if_agent_bus.otp_broadcast_o), //(otp_ctrl_if.otp_broadcast_o), + .otp_ext_voltage_h_io (fuse_ctrl_in_if_agent_bus.otp_ext_voltage_h_io), + //scan + .scan_en_i (fuse_ctrl_in_if_agent_bus.scan_en_i), //(otp_ctrl_if.scan_en_i), + .scan_rst_ni (fuse_ctrl_in_if_agent_bus.scan_rst_ni), //(otp_ctrl_if.scan_rst_ni), + .scanmode_i (fuse_ctrl_in_if_agent_bus.scanmode_i), //(otp_ctrl_if.scanmode_i), + + // Test-related GPIO output + .cio_test_o (fuse_ctrl_out_if_agent_bus.cio_test_o), //(otp_ctrl_if.cio_test_o), + .cio_test_en_o (fuse_ctrl_out_if_agent_bus.cio_test_en_o) //(otp_ctrl_if.cio_test_en_o) + ); + + // AXI Core Interface + axi_if #( + .AW (AW), + .DW (DW), + .IW (IW), + .UW (UW) + ) axi_core_if ( + .clk (clk_tb), + .rst_n (reset_n_tb) + ); + + // AXI Prim Interface + axi_if #( + .AW (AW), + .DW (DW), + .IW (IW), + .UW (UW) + ) axi_prim_if ( + .clk (clk_tb), + .rst_n (reset_n_tb) + ); + + // AXI Secret Reg Interface + axi_if #( + .AW (AW), + .DW (DW), + .IW (IW), + .UW (UW) + ) axi_secreg_if ( + .clk (clk_tb), + .rst_n (reset_n_tb) + ); + + assign axi_core_if.w_sub.awaddr = fuse_ctrl_core_axi_write_in_if_agent_bus.awaddr; + assign axi_core_if.w_sub.awburst = fuse_ctrl_core_axi_write_in_if_agent_bus.awburst; + assign axi_core_if.w_sub.awsize = fuse_ctrl_core_axi_write_in_if_agent_bus.awsize; + assign axi_core_if.w_sub.awlen = fuse_ctrl_core_axi_write_in_if_agent_bus.awlen; + assign axi_core_if.w_sub.awuser = fuse_ctrl_core_axi_write_in_if_agent_bus.awuser; + assign axi_core_if.w_sub.awid = fuse_ctrl_core_axi_write_in_if_agent_bus.awid; + assign axi_core_if.w_sub.awlock = fuse_ctrl_core_axi_write_in_if_agent_bus.awlock; + assign axi_core_if.w_sub.awvalid = fuse_ctrl_core_axi_write_in_if_agent_bus.awvalid; + assign axi_core_if.w_sub.wdata = fuse_ctrl_core_axi_write_in_if_agent_bus.wdata; + assign axi_core_if.w_sub.wstrb = fuse_ctrl_core_axi_write_in_if_agent_bus.wstrb; + assign axi_core_if.w_sub.wlast = fuse_ctrl_core_axi_write_in_if_agent_bus.wlast; + assign axi_core_if.w_sub.wvalid = fuse_ctrl_core_axi_write_in_if_agent_bus.wvalid; + assign axi_core_if.w_sub.bready = fuse_ctrl_core_axi_write_in_if_agent_bus.bready; + + assign axi_core_if.w_sub.awready = fuse_ctrl_core_axi_write_out_if_agent_bus.awready; + assign axi_core_if.w_sub.wready = fuse_ctrl_core_axi_write_out_if_agent_bus.wready; + assign axi_core_if.w_sub.bresp = fuse_ctrl_core_axi_write_out_if_agent_bus.bresp; + assign axi_core_if.w_sub.bvalid = fuse_ctrl_core_axi_write_out_if_agent_bus.bvalid; + assign axi_core_if.w_sub.bid = fuse_ctrl_core_axi_write_out_if_agent_bus.bid; + + + + // pragma uvmf custom dut_instantiation end + + initial begin // tbx vif_binding_block + import uvm_pkg::uvm_config_db; + // The monitor_bfm and driver_bfm for each interface is placed into the uvm_config_db. + // They are placed into the uvm_config_db using the string names defined in the parameters package. + // The string names are passed to the agent configurations by test_top through the top level configuration. + // They are retrieved by the agents configuration class for use by the agent. + uvm_config_db #( virtual fuse_ctrl_rst_in_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_rst_in_agent_BFM , fuse_ctrl_rst_in_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_rst_out_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_rst_out_agent_BFM , fuse_ctrl_rst_out_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_write_in_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_write_in_if_agent_BFM , fuse_ctrl_core_axi_write_in_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_write_out_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_write_out_if_agent_BFM , fuse_ctrl_core_axi_write_out_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_write_in_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_write_in_if_agent_BFM , fuse_ctrl_prim_axi_write_in_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_write_out_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_write_out_if_agent_BFM , fuse_ctrl_prim_axi_write_out_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_read_in_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_read_in_if_agent_BFM , fuse_ctrl_core_axi_read_in_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_read_out_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_read_out_if_agent_BFM , fuse_ctrl_core_axi_read_out_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_read_in_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_read_in_if_agent_BFM , fuse_ctrl_prim_axi_read_in_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_read_out_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_read_out_if_agent_BFM , fuse_ctrl_prim_axi_read_out_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_secreg_axi_read_in_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_secreg_axi_read_in_if_agent_BFM , fuse_ctrl_secreg_axi_read_in_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_secreg_axi_read_out_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_secreg_axi_read_out_if_agent_BFM , fuse_ctrl_secreg_axi_read_out_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_lc_otp_in_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_lc_otp_in_if_agent_BFM , fuse_ctrl_lc_otp_in_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_lc_otp_out_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_lc_otp_out_if_agent_BFM , fuse_ctrl_lc_otp_out_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_in_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_in_if_agent_BFM , fuse_ctrl_in_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_out_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_out_if_agent_BFM , fuse_ctrl_out_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_rst_in_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_rst_in_agent_BFM , fuse_ctrl_rst_in_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_write_in_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_write_in_if_agent_BFM , fuse_ctrl_core_axi_write_in_if_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_write_in_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_write_in_if_agent_BFM , fuse_ctrl_prim_axi_write_in_if_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_read_in_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_read_in_if_agent_BFM , fuse_ctrl_core_axi_read_in_if_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_read_in_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_read_in_if_agent_BFM , fuse_ctrl_prim_axi_read_in_if_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_secreg_axi_read_in_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_secreg_axi_read_in_if_agent_BFM , fuse_ctrl_secreg_axi_read_in_if_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_lc_otp_in_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_lc_otp_in_if_agent_BFM , fuse_ctrl_lc_otp_in_if_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_in_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_in_if_agent_BFM , fuse_ctrl_in_if_agent_drv_bfm ); + end + +endmodule + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/hdl_top.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/hdl_top.vinfo new file mode 100644 index 000000000..b39169a56 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/hdl_top.vinfo @@ -0,0 +1,20 @@ +@use $UVMF_PROJECT_DIR/rtl/verilog/verilog_dut.vinfo +@use $UVMF_PROJECT_DIR/tb/parameters/fuse_ctrl_parameters_pkg.vinfo +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo +hdl_top.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/hvl_top.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/hvl_top.compile new file mode 100644 index 000000000..040488764 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/hvl_top.compile @@ -0,0 +1,7 @@ +incdir: + - ${uvm_path}/src + - . +needs: + - ../tests/fuse_ctrl_tests_pkg.compile +src: + - hvl_top.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/hvl_top.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/hvl_top.sv new file mode 100644 index 000000000..68e3fc6f6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/hvl_top.sv @@ -0,0 +1,47 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +// +// DESCRIPTION: This module loads the test package and starts the UVM phases. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +module hvl_top; + +import uvm_pkg::*; +import fuse_ctrl_tests_pkg::*; + + // pragma uvmf custom module_item_additional begin + // pragma uvmf custom module_item_additional end + + initial begin + $timeformat(-9,3,"ns",5); + run_test(); + end + +endmodule + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/hvl_top.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/hvl_top.vinfo new file mode 100644 index 000000000..31185e42f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/hvl_top.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_PROJECT_DIR/tb/tests/fuse_ctrl_tests_pkg.vinfo +hvl_top.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/top_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/top_filelist_hdl.f new file mode 100644 index 000000000..1e9dab653 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/top_filelist_hdl.f @@ -0,0 +1,3 @@ +$UVMF_PROJECT_DIR/tb/testbench/hdl_top.sv +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/top_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/top_filelist_hvl.f new file mode 100644 index 000000000..42383ab2d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/testbench/top_filelist_hvl.f @@ -0,0 +1,3 @@ +$UVMF_PROJECT_DIR/tb/testbench/hvl_top.sv +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.compile new file mode 100644 index 000000000..c75585199 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.compile @@ -0,0 +1,23 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile + - ../../../../verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile + - ../parameters/fuse_ctrl_parameters_pkg.compile + - ../sequences/fuse_ctrl_sequences_pkg.compile +src: + - fuse_ctrl_tests_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.sv new file mode 100644 index 000000000..05f83c5e9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.sv @@ -0,0 +1,96 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This package contains all tests currently written for +// the simulation project. Once compiled, any test can be selected +// from the vsim command line using +UVM_TESTNAME=yourTestNameHere +// +// CONTAINS: +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +package fuse_ctrl_tests_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg::*; + import fuse_ctrl_parameters_pkg::*; + import fuse_ctrl_env_pkg::*; + import fuse_ctrl_sequences_pkg::*; + import fuse_ctrl_rst_in_pkg::*; + import fuse_ctrl_rst_in_pkg_hdl::*; + import fuse_ctrl_rst_out_pkg::*; + import fuse_ctrl_rst_out_pkg_hdl::*; + import fuse_ctrl_core_axi_write_in_pkg::*; + import fuse_ctrl_core_axi_write_in_pkg_hdl::*; + import fuse_ctrl_core_axi_write_out_pkg::*; + import fuse_ctrl_core_axi_write_out_pkg_hdl::*; + import fuse_ctrl_prim_axi_write_in_pkg::*; + import fuse_ctrl_prim_axi_write_in_pkg_hdl::*; + import fuse_ctrl_prim_axi_write_out_pkg::*; + import fuse_ctrl_prim_axi_write_out_pkg_hdl::*; + import fuse_ctrl_core_axi_read_in_pkg::*; + import fuse_ctrl_core_axi_read_in_pkg_hdl::*; + import fuse_ctrl_core_axi_read_out_pkg::*; + import fuse_ctrl_core_axi_read_out_pkg_hdl::*; + import fuse_ctrl_prim_axi_read_in_pkg::*; + import fuse_ctrl_prim_axi_read_in_pkg_hdl::*; + import fuse_ctrl_prim_axi_read_out_pkg::*; + import fuse_ctrl_prim_axi_read_out_pkg_hdl::*; + import fuse_ctrl_secreg_axi_read_in_pkg::*; + import fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; + import fuse_ctrl_secreg_axi_read_out_pkg::*; + import fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; + import fuse_ctrl_lc_otp_in_pkg::*; + import fuse_ctrl_lc_otp_in_pkg_hdl::*; + import fuse_ctrl_lc_otp_out_pkg::*; + import fuse_ctrl_lc_otp_out_pkg_hdl::*; + import fuse_ctrl_in_pkg::*; + import fuse_ctrl_in_pkg_hdl::*; + import fuse_ctrl_out_pkg::*; + import fuse_ctrl_out_pkg_hdl::*; + + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + `include "src/test_top.svh" + `include "src/register_test.svh" + `include "src/example_derived_test.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new tests to the src directory + // be sure to add the test file here so that it will be + // compiled as part of the test package. Be sure to place + // the new test after any base tests of the new test. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.vinfo new file mode 100644 index 000000000..651052b39 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.vinfo @@ -0,0 +1,22 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo +@use $UVMF_PROJECT_DIR/tb/parameters/fuse_ctrl_parameters_pkg.vinfo +@use $UVMF_PROJECT_DIR/tb/sequences/fuse_ctrl_sequences_pkg.vinfo ++incdir+@vinfodir +fuse_ctrl_tests_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/tests/src/example_derived_test.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/tests/src/example_derived_test.svh new file mode 100644 index 000000000..82d6c45ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/tests/src/example_derived_test.svh @@ -0,0 +1,57 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This test extends test_top and makes +// changes to test_top using the UVM factory type_override: +// +// Test scenario: +// This is a template test that can be used to create future tests. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class example_derived_test extends test_top; + + `uvm_component_utils( example_derived_test ); + + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + + virtual function void build_phase(uvm_phase phase); + // The factory override below is an example of how to replace the fuse_ctrl_bench_sequence_base + // sequence with the example_derived_test_sequence. + fuse_ctrl_bench_sequence_base::type_id::set_type_override(example_derived_test_sequence::get_type()); + // Execute the build_phase of test_top AFTER all factory overrides have been created. + super.build_phase(phase); + // pragma uvmf custom configuration_settings_post_randomize begin + // UVMF_CHANGE_ME Test specific configuration values can be set here. + // The configuration structure has already been randomized. + // pragma uvmf custom configuration_settings_post_randomize end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/tests/src/register_test.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/tests/src/register_test.svh new file mode 100644 index 000000000..1be722286 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/tests/src/register_test.svh @@ -0,0 +1,54 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This test extends test_top and makes +// changes to test_top using the UVM factory type_override: +// +// Test scenario: +// This is a template test that can be used to create future tests. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class register_test extends test_top; + + `uvm_component_utils( register_test ); + + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + + virtual function void build_phase(uvm_phase phase); + // The factory override below replaces the fuse_ctrl_bench_sequence_base + // sequence with the register_test_sequence. + fuse_ctrl_bench_sequence_base::type_id::set_type_override(register_test_sequence::get_type()); + // Execute the build_phase of test_top AFTER all factory overrides have been created. + super.build_phase(phase); + endfunction + + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/tests/src/test_top.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/tests/src/test_top.svh new file mode 100644 index 000000000..f5b1c3c68 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/tb/tests/src/test_top.svh @@ -0,0 +1,120 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// Description: This top level UVM test is the base class for all +// future tests created for this project. +// +// This test class contains: +// Configuration: The top level configuration for the project. +// Environment: The top level environment for the project. +// Top_level_sequence: The top level sequence for the project. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +typedef fuse_ctrl_env_configuration fuse_ctrl_env_configuration_t; +typedef fuse_ctrl_environment fuse_ctrl_environment_t; + +class test_top extends uvmf_test_base #(.CONFIG_T(fuse_ctrl_env_configuration_t), + .ENV_T(fuse_ctrl_environment_t), + .TOP_LEVEL_SEQ_T(fuse_ctrl_bench_sequence_base)); + + `uvm_component_utils( test_top ); + + + + string interface_names[] = { + fuse_ctrl_rst_in_agent_BFM /* fuse_ctrl_rst_in_agent [0] */ , + fuse_ctrl_rst_out_agent_BFM /* fuse_ctrl_rst_out_agent [1] */ , + fuse_ctrl_core_axi_write_in_if_agent_BFM /* fuse_ctrl_core_axi_write_in_if_agent [2] */ , + fuse_ctrl_core_axi_write_out_if_agent_BFM /* fuse_ctrl_core_axi_write_out_if_agent [3] */ , + fuse_ctrl_prim_axi_write_in_if_agent_BFM /* fuse_ctrl_prim_axi_write_in_if_agent [4] */ , + fuse_ctrl_prim_axi_write_out_if_agent_BFM /* fuse_ctrl_prim_axi_write_out_if_agent [5] */ , + fuse_ctrl_core_axi_read_in_if_agent_BFM /* fuse_ctrl_core_axi_read_in_if_agent [6] */ , + fuse_ctrl_core_axi_read_out_if_agent_BFM /* fuse_ctrl_core_axi_read_out_if_agent [7] */ , + fuse_ctrl_prim_axi_read_in_if_agent_BFM /* fuse_ctrl_prim_axi_read_in_if_agent [8] */ , + fuse_ctrl_prim_axi_read_out_if_agent_BFM /* fuse_ctrl_prim_axi_read_out_if_agent [9] */ , + fuse_ctrl_secreg_axi_read_in_if_agent_BFM /* fuse_ctrl_secreg_axi_read_in_if_agent [10] */ , + fuse_ctrl_secreg_axi_read_out_if_agent_BFM /* fuse_ctrl_secreg_axi_read_out_if_agent [11] */ , + fuse_ctrl_lc_otp_in_if_agent_BFM /* fuse_ctrl_lc_otp_in_if_agent [12] */ , + fuse_ctrl_lc_otp_out_if_agent_BFM /* fuse_ctrl_lc_otp_out_if_agent [13] */ , + fuse_ctrl_in_if_agent_BFM /* fuse_ctrl_in_if_agent [14] */ , + fuse_ctrl_out_if_agent_BFM /* fuse_ctrl_out_if_agent [15] */ +}; + +uvmf_active_passive_t interface_activities[] = { + ACTIVE /* fuse_ctrl_rst_in_agent [0] */ , + PASSIVE /* fuse_ctrl_rst_out_agent [1] */ , + ACTIVE /* fuse_ctrl_core_axi_write_in_if_agent [2] */ , + PASSIVE /* fuse_ctrl_core_axi_write_out_if_agent [3] */ , + ACTIVE /* fuse_ctrl_prim_axi_write_in_if_agent [4] */ , + PASSIVE /* fuse_ctrl_prim_axi_write_out_if_agent [5] */ , + ACTIVE /* fuse_ctrl_core_axi_read_in_if_agent [6] */ , + PASSIVE /* fuse_ctrl_core_axi_read_out_if_agent [7] */ , + ACTIVE /* fuse_ctrl_prim_axi_read_in_if_agent [8] */ , + PASSIVE /* fuse_ctrl_prim_axi_read_out_if_agent [9] */ , + ACTIVE /* fuse_ctrl_secreg_axi_read_in_if_agent [10] */ , + PASSIVE /* fuse_ctrl_secreg_axi_read_out_if_agent [11] */ , + ACTIVE /* fuse_ctrl_lc_otp_in_if_agent [12] */ , + PASSIVE /* fuse_ctrl_lc_otp_out_if_agent [13] */ , + ACTIVE /* fuse_ctrl_in_if_agent [14] */ , + PASSIVE /* fuse_ctrl_out_if_agent [15] */ }; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // FUNCTION: new() + // This is the standard systemVerilog constructor. All components are + // constructed in the build_phase to allow factory overriding. + // + function new( string name = "", uvm_component parent = null ); + super.new( name ,parent ); + endfunction + + + + // **************************************************************************** + // FUNCTION: build_phase() + // The construction of the configuration and environment classes is done in + // the build_phase of uvmf_test_base. Once the configuraton and environment + // classes are built then the initialize call is made to perform the + // following: + // Monitor and driver BFM virtual interface handle passing into agents + // Set the active/passive state for each agent + // Once this build_phase completes, the build_phase of the environment is + // executed which builds the agents. + // + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + // pragma uvmf custom configuration_settings_post_randomize begin + // pragma uvmf custom configuration_settings_post_randomize end + configuration.initialize(NA, "uvm_test_top.environment", interface_names, null, interface_activities); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/yaml/fuse_ctrl_bench.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/yaml/fuse_ctrl_bench.yaml new file mode 100644 index 000000000..24489d9b8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/project_benches/fuse_ctrl/yaml/fuse_ctrl_bench.yaml @@ -0,0 +1,45 @@ +uvmf: + benches: + fuse_ctrl: + active_passive: + - bfm_name: fuse_ctrl_rst_in_agent + value: ACTIVE + - bfm_name: fuse_ctrl_rst_out_agent + value: PASSIVE + - bfm_name: fuse_ctrl_core_axi_write_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_core_axi_write_out_if_agent + value: PASSIVE + - bfm_name: fuse_ctrl_prim_axi_write_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_prim_axi_write_out_if_agent + value: PASSIVE + - bfm_name: fuse_ctrl_core_axi_read_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_core_axi_read_out_if_agent + value: PASSIVE + - bfm_name: fuse_ctrl_prim_axi_read_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_prim_axi_read_out_if_agent + value: PASSIVE + - bfm_name: fuse_ctrl_secreg_axi_read_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_secreg_axi_read_out_if_agent + value: PASSIVE + - bfm_name: fuse_ctrl_lc_otp_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_lc_otp_out_if_agent + value: PASSIVE + - bfm_name: fuse_ctrl_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_out_if_agent + value: PASSIVE + active_passive_default: ACTIVE + clock_half_period: 5ns + clock_phase_offset: 0ns + existing_library_component: 'True' + interface_params: [] + reset_assertion_level: 'False' + reset_duration: 200ns + top_env: fuse_ctrl + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/.project new file mode 100644 index 000000000..ec64afa4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/.project @@ -0,0 +1,32 @@ + + + fuse_ctrl_env_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/.svproject new file mode 100644 index 000000000..bcfe6ac3d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/Makefile new file mode 100644 index 000000000..4cf61d51d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/Makefile @@ -0,0 +1,56 @@ +# fuse_ctrl environment packages source and make target + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +# Include all requisite sub-environment package targets for this bench + +fuse_ctrl_ENV_PKG =\ + $(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv + +COMP_fuse_ctrl_PKG_TGT_0 = q_comp_fuse_ctrl_env_pkg +COMP_fuse_ctrl_PKG_TGT_1 = v_comp_fuse_ctrl_env_pkg +COMP_fuse_ctrl_PKG_TGT = $(COMP_fuse_ctrl_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_env_pkg: $(COMP_fuse_ctrl_PKG_TGT) + +q_comp_fuse_ctrl_env_pkg: + $(HVL_COMP_CMD) +incdir+$(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg $(fuse_ctrl_ENV_PKG) + +v_comp_fuse_ctrl_env_pkg: q_comp_fuse_ctrl_env_pkg + $(VELANALYZE_HVL_CMD) +incdir+$(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg $(fuse_ctrl_ENV_PKG) + + + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_ENV_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_env_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_env_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_env_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_env_pkg += -I$(fuse_ctrl_ENV_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_env_pkg += $(fuse_ctrl_ENV_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_env_pkg += \ + \ + -o .so + +comp_fuse_ctrl_env_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Environment C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_env_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_env_pkg) + @echo "--------------------------------" + @echo "Linking Environment C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_env_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_env_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/compile.do new file mode 100644 index 000000000..05dca66cc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/compile.do @@ -0,0 +1,12 @@ +# Tcl do file for compile of fuse_ctrl interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + + +quietly set cmd [format "vlog -timescale 1ps/1ps +incdir+%s/environment_packages/fuse_ctrl_env_pkg" $env(UVMF_VIP_LIBRARY_HOME)] +quietly set cmd [format "%s %s/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv" $cmd $env(UVMF_VIP_LIBRARY_HOME)] +eval $cmd + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile new file mode 100644 index 000000000..7bd08d6b2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile @@ -0,0 +1,22 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hvl.compile + +src: + - fuse_ctrl_env_pkg.sv + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv new file mode 100644 index 000000000..e9b702999 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// environment package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_env_pkg; + + import uvm_pkg::*; + `include "uvm_macros.svh" + import uvmf_base_pkg::*; + import fuse_ctrl_rst_in_pkg::*; + import fuse_ctrl_rst_in_pkg_hdl::*; + import fuse_ctrl_rst_out_pkg::*; + import fuse_ctrl_rst_out_pkg_hdl::*; + import fuse_ctrl_core_axi_write_in_pkg::*; + import fuse_ctrl_core_axi_write_in_pkg_hdl::*; + import fuse_ctrl_core_axi_write_out_pkg::*; + import fuse_ctrl_core_axi_write_out_pkg_hdl::*; + import fuse_ctrl_prim_axi_write_in_pkg::*; + import fuse_ctrl_prim_axi_write_in_pkg_hdl::*; + import fuse_ctrl_prim_axi_write_out_pkg::*; + import fuse_ctrl_prim_axi_write_out_pkg_hdl::*; + import fuse_ctrl_core_axi_read_in_pkg::*; + import fuse_ctrl_core_axi_read_in_pkg_hdl::*; + import fuse_ctrl_core_axi_read_out_pkg::*; + import fuse_ctrl_core_axi_read_out_pkg_hdl::*; + import fuse_ctrl_prim_axi_read_in_pkg::*; + import fuse_ctrl_prim_axi_read_in_pkg_hdl::*; + import fuse_ctrl_prim_axi_read_out_pkg::*; + import fuse_ctrl_prim_axi_read_out_pkg_hdl::*; + import fuse_ctrl_secreg_axi_read_in_pkg::*; + import fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; + import fuse_ctrl_secreg_axi_read_out_pkg::*; + import fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; + import fuse_ctrl_lc_otp_in_pkg::*; + import fuse_ctrl_lc_otp_in_pkg_hdl::*; + import fuse_ctrl_lc_otp_out_pkg::*; + import fuse_ctrl_lc_otp_out_pkg_hdl::*; + import fuse_ctrl_in_pkg::*; + import fuse_ctrl_in_pkg_hdl::*; + import fuse_ctrl_out_pkg::*; + import fuse_ctrl_out_pkg_hdl::*; + + `uvm_analysis_imp_decl(_fuse_ctrl_rst_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_core_axi_write_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_prim_axi_write_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_core_axi_read_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_prim_axi_read_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_secreg_axi_read_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_lc_otp_if_agent_ae) + `uvm_analysis_imp_decl(_expected_analysis_export) + `uvm_analysis_imp_decl(_actual_analysis_export) + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_env_typedefs.svh" + `include "src/fuse_ctrl_env_configuration.svh" + `include "src/fuse_ctrl_predictor.svh" + `include "src/fuse_ctrl_scoreboard.svh" + `include "src/fuse_ctrl_environment.svh" + `include "src/fuse_ctrl_env_sequence_base.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new environment level sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the environment package. Be sure to place + // the new sequence after any base sequence of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo new file mode 100644 index 000000000..f4f985fef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo @@ -0,0 +1,19 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo ++incdir+@vinfodir +fuse_ctrl_env_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F new file mode 100644 index 000000000..b40213df3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F @@ -0,0 +1,12 @@ + +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + +// Sub-Environments + ++incdir+. +./fuse_ctrl_env_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_configuration.svh new file mode 100644 index 000000000..1f5b77d61 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_configuration.svh @@ -0,0 +1,261 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: THis is the configuration for the fuse_ctrl environment. +// it contains configuration classes for each agent. It also contains +// environment level configuration variables. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_env_configuration +extends uvmf_environment_configuration_base; + + `uvm_object_utils( fuse_ctrl_env_configuration ) + + +//Constraints for the configuration variables: + + + covergroup fuse_ctrl_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + + typedef fuse_ctrl_rst_in_configuration fuse_ctrl_rst_in_agent_config_t; + rand fuse_ctrl_rst_in_agent_config_t fuse_ctrl_rst_in_agent_config; + + typedef fuse_ctrl_rst_out_configuration fuse_ctrl_rst_out_agent_config_t; + rand fuse_ctrl_rst_out_agent_config_t fuse_ctrl_rst_out_agent_config; + + typedef fuse_ctrl_core_axi_write_in_configuration fuse_ctrl_core_axi_write_in_if_agent_config_t; + rand fuse_ctrl_core_axi_write_in_if_agent_config_t fuse_ctrl_core_axi_write_in_if_agent_config; + + typedef fuse_ctrl_core_axi_write_out_configuration fuse_ctrl_core_axi_write_out_if_agent_config_t; + rand fuse_ctrl_core_axi_write_out_if_agent_config_t fuse_ctrl_core_axi_write_out_if_agent_config; + + typedef fuse_ctrl_prim_axi_write_in_configuration fuse_ctrl_prim_axi_write_in_if_agent_config_t; + rand fuse_ctrl_prim_axi_write_in_if_agent_config_t fuse_ctrl_prim_axi_write_in_if_agent_config; + + typedef fuse_ctrl_prim_axi_write_out_configuration fuse_ctrl_prim_axi_write_out_if_agent_config_t; + rand fuse_ctrl_prim_axi_write_out_if_agent_config_t fuse_ctrl_prim_axi_write_out_if_agent_config; + + typedef fuse_ctrl_core_axi_read_in_configuration fuse_ctrl_core_axi_read_in_if_agent_config_t; + rand fuse_ctrl_core_axi_read_in_if_agent_config_t fuse_ctrl_core_axi_read_in_if_agent_config; + + typedef fuse_ctrl_core_axi_read_out_configuration fuse_ctrl_core_axi_read_out_if_agent_config_t; + rand fuse_ctrl_core_axi_read_out_if_agent_config_t fuse_ctrl_core_axi_read_out_if_agent_config; + + typedef fuse_ctrl_prim_axi_read_in_configuration fuse_ctrl_prim_axi_read_in_if_agent_config_t; + rand fuse_ctrl_prim_axi_read_in_if_agent_config_t fuse_ctrl_prim_axi_read_in_if_agent_config; + + typedef fuse_ctrl_prim_axi_read_out_configuration fuse_ctrl_prim_axi_read_out_if_agent_config_t; + rand fuse_ctrl_prim_axi_read_out_if_agent_config_t fuse_ctrl_prim_axi_read_out_if_agent_config; + + typedef fuse_ctrl_secreg_axi_read_in_configuration fuse_ctrl_secreg_axi_read_in_if_agent_config_t; + rand fuse_ctrl_secreg_axi_read_in_if_agent_config_t fuse_ctrl_secreg_axi_read_in_if_agent_config; + + typedef fuse_ctrl_secreg_axi_read_out_configuration fuse_ctrl_secreg_axi_read_out_if_agent_config_t; + rand fuse_ctrl_secreg_axi_read_out_if_agent_config_t fuse_ctrl_secreg_axi_read_out_if_agent_config; + + typedef fuse_ctrl_lc_otp_in_configuration fuse_ctrl_lc_otp_in_if_agent_config_t; + rand fuse_ctrl_lc_otp_in_if_agent_config_t fuse_ctrl_lc_otp_in_if_agent_config; + + typedef fuse_ctrl_lc_otp_out_configuration fuse_ctrl_lc_otp_out_if_agent_config_t; + rand fuse_ctrl_lc_otp_out_if_agent_config_t fuse_ctrl_lc_otp_out_if_agent_config; + + typedef fuse_ctrl_in_configuration fuse_ctrl_in_if_agent_config_t; + rand fuse_ctrl_in_if_agent_config_t fuse_ctrl_in_if_agent_config; + + typedef fuse_ctrl_out_configuration fuse_ctrl_out_if_agent_config_t; + rand fuse_ctrl_out_if_agent_config_t fuse_ctrl_out_if_agent_config; + + + + + typedef uvmf_virtual_sequencer_base #(.CONFIG_T(fuse_ctrl_env_configuration)) fuse_ctrl_vsqr_t; + fuse_ctrl_vsqr_t vsqr; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// This function constructs the configuration object for each agent in the environment. +// + function new( string name = "" ); + super.new( name ); + + + fuse_ctrl_rst_in_agent_config = fuse_ctrl_rst_in_agent_config_t::type_id::create("fuse_ctrl_rst_in_agent_config"); + fuse_ctrl_rst_out_agent_config = fuse_ctrl_rst_out_agent_config_t::type_id::create("fuse_ctrl_rst_out_agent_config"); + fuse_ctrl_core_axi_write_in_if_agent_config = fuse_ctrl_core_axi_write_in_if_agent_config_t::type_id::create("fuse_ctrl_core_axi_write_in_if_agent_config"); + fuse_ctrl_core_axi_write_out_if_agent_config = fuse_ctrl_core_axi_write_out_if_agent_config_t::type_id::create("fuse_ctrl_core_axi_write_out_if_agent_config"); + fuse_ctrl_prim_axi_write_in_if_agent_config = fuse_ctrl_prim_axi_write_in_if_agent_config_t::type_id::create("fuse_ctrl_prim_axi_write_in_if_agent_config"); + fuse_ctrl_prim_axi_write_out_if_agent_config = fuse_ctrl_prim_axi_write_out_if_agent_config_t::type_id::create("fuse_ctrl_prim_axi_write_out_if_agent_config"); + fuse_ctrl_core_axi_read_in_if_agent_config = fuse_ctrl_core_axi_read_in_if_agent_config_t::type_id::create("fuse_ctrl_core_axi_read_in_if_agent_config"); + fuse_ctrl_core_axi_read_out_if_agent_config = fuse_ctrl_core_axi_read_out_if_agent_config_t::type_id::create("fuse_ctrl_core_axi_read_out_if_agent_config"); + fuse_ctrl_prim_axi_read_in_if_agent_config = fuse_ctrl_prim_axi_read_in_if_agent_config_t::type_id::create("fuse_ctrl_prim_axi_read_in_if_agent_config"); + fuse_ctrl_prim_axi_read_out_if_agent_config = fuse_ctrl_prim_axi_read_out_if_agent_config_t::type_id::create("fuse_ctrl_prim_axi_read_out_if_agent_config"); + fuse_ctrl_secreg_axi_read_in_if_agent_config = fuse_ctrl_secreg_axi_read_in_if_agent_config_t::type_id::create("fuse_ctrl_secreg_axi_read_in_if_agent_config"); + fuse_ctrl_secreg_axi_read_out_if_agent_config = fuse_ctrl_secreg_axi_read_out_if_agent_config_t::type_id::create("fuse_ctrl_secreg_axi_read_out_if_agent_config"); + fuse_ctrl_lc_otp_in_if_agent_config = fuse_ctrl_lc_otp_in_if_agent_config_t::type_id::create("fuse_ctrl_lc_otp_in_if_agent_config"); + fuse_ctrl_lc_otp_out_if_agent_config = fuse_ctrl_lc_otp_out_if_agent_config_t::type_id::create("fuse_ctrl_lc_otp_out_if_agent_config"); + fuse_ctrl_in_if_agent_config = fuse_ctrl_in_if_agent_config_t::type_id::create("fuse_ctrl_in_if_agent_config"); + fuse_ctrl_out_if_agent_config = fuse_ctrl_out_if_agent_config_t::type_id::create("fuse_ctrl_out_if_agent_config"); + + + fuse_ctrl_configuration_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that configuration variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + + // pragma uvmf custom new begin + // pragma uvmf custom new end + endfunction + +// **************************************************************************** +// FUNCTION : set_vsqr() +// This function is used to assign the vsqr handle. + virtual function void set_vsqr( fuse_ctrl_vsqr_t vsqr); + this.vsqr = vsqr; + endfunction : set_vsqr + +// **************************************************************************** +// FUNCTION: post_randomize() +// This function is automatically called after the randomize() function +// is executed. +// + function void post_randomize(); + super.post_randomize(); + // pragma uvmf custom post_randomize begin + // pragma uvmf custom post_randomize end + endfunction + +// **************************************************************************** +// FUNCTION: convert2string() +// This function converts all variables in this class to a single string for +// logfile reporting. This function concatenates the convert2string result for +// each agent configuration in this configuration class. +// + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + return { + + "\n", fuse_ctrl_rst_agent_config.convert2string, + "\n", fuse_ctrl_core_axi_write_agent_config.convert2string, + "\n", fuse_ctrl_prim_axi_write_agent_config.convert2string, + "\n", fuse_ctrl_core_axi_read_agent_config.convert2string, + "\n", fuse_ctrl_prim_axi_read_agent_config.convert2string, + "\n", fuse_ctrl_secreg_axi_read_agent_config.convert2string, + "\n", fuse_ctrl_lc_otp_if_agent_config.convert2string + + + }; + // pragma uvmf custom convert2string end + endfunction +// **************************************************************************** +// FUNCTION: initialize(); +// This function configures each interface agents configuration class. The +// sim level determines the active/passive state of the agent. The environment_path +// identifies the hierarchy down to and including the instantiation name of the +// environment for this configuration class. Each instance of the environment +// has its own configuration class. The string interface names are used by +// the agent configurations to identify the virtual interface handle to pull from +// the uvm_config_db. +// + function void initialize(uvmf_sim_level_t sim_level, + string environment_path, + string interface_names[], + uvm_reg_block register_model = null, + uvmf_active_passive_t interface_activity[] = {} + ); + + super.initialize(sim_level, environment_path, interface_names, register_model, interface_activity); + + + + // Interface initialization for local agents + fuse_ctrl_rst_in_agent_config.initialize( interface_activity[0], {environment_path,".fuse_ctrl_rst_in_agent"}, interface_names[0]); + fuse_ctrl_rst_in_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_rst_in_agent_config.has_coverage = 1; + fuse_ctrl_rst_out_agent_config.initialize( interface_activity[1], {environment_path,".fuse_ctrl_rst_out_agent"}, interface_names[1]); + fuse_ctrl_rst_out_agent_config.initiator_responder = RESPONDER; + // fuse_ctrl_rst_out_agent_config.has_coverage = 1; + fuse_ctrl_core_axi_write_in_if_agent_config.initialize( interface_activity[2], {environment_path,".fuse_ctrl_core_axi_write_in_if_agent"}, interface_names[2]); + fuse_ctrl_core_axi_write_in_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_core_axi_write_in_if_agent_config.has_coverage = 1; + fuse_ctrl_core_axi_write_out_if_agent_config.initialize( interface_activity[3], {environment_path,".fuse_ctrl_core_axi_write_out_if_agent"}, interface_names[3]); + fuse_ctrl_core_axi_write_out_if_agent_config.initiator_responder = RESPONDER; + // fuse_ctrl_core_axi_write_out_if_agent_config.has_coverage = 1; + fuse_ctrl_prim_axi_write_in_if_agent_config.initialize( interface_activity[4], {environment_path,".fuse_ctrl_prim_axi_write_in_if_agent"}, interface_names[4]); + fuse_ctrl_prim_axi_write_in_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_prim_axi_write_in_if_agent_config.has_coverage = 1; + fuse_ctrl_prim_axi_write_out_if_agent_config.initialize( interface_activity[5], {environment_path,".fuse_ctrl_prim_axi_write_out_if_agent"}, interface_names[5]); + fuse_ctrl_prim_axi_write_out_if_agent_config.initiator_responder = RESPONDER; + // fuse_ctrl_prim_axi_write_out_if_agent_config.has_coverage = 1; + fuse_ctrl_core_axi_read_in_if_agent_config.initialize( interface_activity[6], {environment_path,".fuse_ctrl_core_axi_read_in_if_agent"}, interface_names[6]); + fuse_ctrl_core_axi_read_in_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_core_axi_read_in_if_agent_config.has_coverage = 1; + fuse_ctrl_core_axi_read_out_if_agent_config.initialize( interface_activity[7], {environment_path,".fuse_ctrl_core_axi_read_out_if_agent"}, interface_names[7]); + fuse_ctrl_core_axi_read_out_if_agent_config.initiator_responder = RESPONDER; + // fuse_ctrl_core_axi_read_out_if_agent_config.has_coverage = 1; + fuse_ctrl_prim_axi_read_in_if_agent_config.initialize( interface_activity[8], {environment_path,".fuse_ctrl_prim_axi_read_in_if_agent"}, interface_names[8]); + fuse_ctrl_prim_axi_read_in_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_prim_axi_read_in_if_agent_config.has_coverage = 1; + fuse_ctrl_prim_axi_read_out_if_agent_config.initialize( interface_activity[9], {environment_path,".fuse_ctrl_prim_axi_read_out_if_agent"}, interface_names[9]); + fuse_ctrl_prim_axi_read_out_if_agent_config.initiator_responder = RESPONDER; + // fuse_ctrl_prim_axi_read_out_if_agent_config.has_coverage = 1; + fuse_ctrl_secreg_axi_read_in_if_agent_config.initialize( interface_activity[10], {environment_path,".fuse_ctrl_secreg_axi_read_in_if_agent"}, interface_names[10]); + fuse_ctrl_secreg_axi_read_in_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_secreg_axi_read_in_if_agent_config.has_coverage = 1; + fuse_ctrl_secreg_axi_read_out_if_agent_config.initialize( interface_activity[11], {environment_path,".fuse_ctrl_secreg_axi_read_out_if_agent"}, interface_names[11]); + fuse_ctrl_secreg_axi_read_out_if_agent_config.initiator_responder = RESPONDER; + // fuse_ctrl_secreg_axi_read_out_if_agent_config.has_coverage = 1; + fuse_ctrl_lc_otp_in_if_agent_config.initialize( interface_activity[12], {environment_path,".fuse_ctrl_lc_otp_in_if_agent"}, interface_names[12]); + fuse_ctrl_lc_otp_in_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_lc_otp_in_if_agent_config.has_coverage = 1; + fuse_ctrl_lc_otp_out_if_agent_config.initialize( interface_activity[13], {environment_path,".fuse_ctrl_lc_otp_out_if_agent"}, interface_names[13]); + fuse_ctrl_lc_otp_out_if_agent_config.initiator_responder = RESPONDER; + // fuse_ctrl_lc_otp_out_if_agent_config.has_coverage = 1; + fuse_ctrl_in_if_agent_config.initialize( interface_activity[14], {environment_path,".fuse_ctrl_in_if_agent"}, interface_names[14]); + fuse_ctrl_in_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_in_if_agent_config.has_coverage = 1; + fuse_ctrl_out_if_agent_config.initialize( interface_activity[15], {environment_path,".fuse_ctrl_out_if_agent"}, interface_names[15]); + fuse_ctrl_out_if_agent_config.initiator_responder = RESPONDER; + // fuse_ctrl_out_if_agent_config.has_coverage = 1; + + + + + + // pragma uvmf custom initialize begin + // pragma uvmf custom initialize end + + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_sequence_base.svh new file mode 100644 index 000000000..ac7965f6f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains environment level sequences that will +// be reused from block to top level simulations. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_env_sequence_base #( + type CONFIG_T + ) extends uvmf_virtual_sequence_base #(.CONFIG_T(CONFIG_T)); + + + `uvm_object_param_utils( fuse_ctrl_env_sequence_base #( + CONFIG_T + ) ); + + +// This fuse_ctrl_env_sequence_base contains a handle to a fuse_ctrl_env_configuration object +// named configuration. This configuration variable contains a handle to each +// sequencer within each agent within this environment and any sub-environments. +// The configuration object handle is automatically assigned in the pre_body in the +// base class of this sequence. The configuration handle is retrieved from the +// virtual sequencer that this sequence is started on. +// Available sequencer handles within the environment configuration: + + // Initiator agent sequencers in fuse_ctrl_environment: + // configuration.fuse_ctrl_rst_in_agent_config.sequencer + // configuration.fuse_ctrl_core_axi_write_in_if_agent_config.sequencer + // configuration.fuse_ctrl_prim_axi_write_in_if_agent_config.sequencer + // configuration.fuse_ctrl_core_axi_read_in_if_agent_config.sequencer + // configuration.fuse_ctrl_prim_axi_read_in_if_agent_config.sequencer + // configuration.fuse_ctrl_secreg_axi_read_in_if_agent_config.sequencer + // configuration.fuse_ctrl_lc_otp_in_if_agent_config.sequencer + // configuration.fuse_ctrl_in_if_agent_config.sequencer + + // Responder agent sequencers in fuse_ctrl_environment: + // configuration.fuse_ctrl_rst_out_agent_config.sequencer + // configuration.fuse_ctrl_core_axi_write_out_if_agent_config.sequencer + // configuration.fuse_ctrl_prim_axi_write_out_if_agent_config.sequencer + // configuration.fuse_ctrl_core_axi_read_out_if_agent_config.sequencer + // configuration.fuse_ctrl_prim_axi_read_out_if_agent_config.sequencer + // configuration.fuse_ctrl_secreg_axi_read_out_if_agent_config.sequencer + // configuration.fuse_ctrl_lc_otp_out_if_agent_config.sequencer + // configuration.fuse_ctrl_out_if_agent_config.sequencer + + + typedef fuse_ctrl_rst_in_random_sequence fuse_ctrl_rst_in_agent_random_sequence_t; + fuse_ctrl_rst_in_agent_random_sequence_t fuse_ctrl_rst_in_agent_rand_seq; + + + typedef fuse_ctrl_core_axi_write_in_random_sequence fuse_ctrl_core_axi_write_in_if_agent_random_sequence_t; + fuse_ctrl_core_axi_write_in_if_agent_random_sequence_t fuse_ctrl_core_axi_write_in_if_agent_rand_seq; + + + typedef fuse_ctrl_prim_axi_write_in_random_sequence fuse_ctrl_prim_axi_write_in_if_agent_random_sequence_t; + fuse_ctrl_prim_axi_write_in_if_agent_random_sequence_t fuse_ctrl_prim_axi_write_in_if_agent_rand_seq; + + + typedef fuse_ctrl_core_axi_read_in_random_sequence fuse_ctrl_core_axi_read_in_if_agent_random_sequence_t; + fuse_ctrl_core_axi_read_in_if_agent_random_sequence_t fuse_ctrl_core_axi_read_in_if_agent_rand_seq; + + + typedef fuse_ctrl_prim_axi_read_in_random_sequence fuse_ctrl_prim_axi_read_in_if_agent_random_sequence_t; + fuse_ctrl_prim_axi_read_in_if_agent_random_sequence_t fuse_ctrl_prim_axi_read_in_if_agent_rand_seq; + + + typedef fuse_ctrl_secreg_axi_read_in_random_sequence fuse_ctrl_secreg_axi_read_in_if_agent_random_sequence_t; + fuse_ctrl_secreg_axi_read_in_if_agent_random_sequence_t fuse_ctrl_secreg_axi_read_in_if_agent_rand_seq; + + + typedef fuse_ctrl_lc_otp_in_random_sequence fuse_ctrl_lc_otp_in_if_agent_random_sequence_t; + fuse_ctrl_lc_otp_in_if_agent_random_sequence_t fuse_ctrl_lc_otp_in_if_agent_rand_seq; + + + typedef fuse_ctrl_in_random_sequence fuse_ctrl_in_if_agent_random_sequence_t; + fuse_ctrl_in_if_agent_random_sequence_t fuse_ctrl_in_if_agent_rand_seq; + + + + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "" ); + super.new(name); + fuse_ctrl_rst_in_agent_rand_seq = fuse_ctrl_rst_in_agent_random_sequence_t::type_id::create("fuse_ctrl_rst_in_agent_rand_seq"); + fuse_ctrl_core_axi_write_in_if_agent_rand_seq = fuse_ctrl_core_axi_write_in_if_agent_random_sequence_t::type_id::create("fuse_ctrl_core_axi_write_in_if_agent_rand_seq"); + fuse_ctrl_prim_axi_write_in_if_agent_rand_seq = fuse_ctrl_prim_axi_write_in_if_agent_random_sequence_t::type_id::create("fuse_ctrl_prim_axi_write_in_if_agent_rand_seq"); + fuse_ctrl_core_axi_read_in_if_agent_rand_seq = fuse_ctrl_core_axi_read_in_if_agent_random_sequence_t::type_id::create("fuse_ctrl_core_axi_read_in_if_agent_rand_seq"); + fuse_ctrl_prim_axi_read_in_if_agent_rand_seq = fuse_ctrl_prim_axi_read_in_if_agent_random_sequence_t::type_id::create("fuse_ctrl_prim_axi_read_in_if_agent_rand_seq"); + fuse_ctrl_secreg_axi_read_in_if_agent_rand_seq = fuse_ctrl_secreg_axi_read_in_if_agent_random_sequence_t::type_id::create("fuse_ctrl_secreg_axi_read_in_if_agent_rand_seq"); + fuse_ctrl_lc_otp_in_if_agent_rand_seq = fuse_ctrl_lc_otp_in_if_agent_random_sequence_t::type_id::create("fuse_ctrl_lc_otp_in_if_agent_rand_seq"); + fuse_ctrl_in_if_agent_rand_seq = fuse_ctrl_in_if_agent_random_sequence_t::type_id::create("fuse_ctrl_in_if_agent_rand_seq"); + + + endfunction + + virtual task body(); + + if ( configuration.fuse_ctrl_rst_in_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_rst_in_agent_rand_seq.start(configuration.fuse_ctrl_rst_in_agent_config.sequencer); + if ( configuration.fuse_ctrl_core_axi_write_in_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_core_axi_write_in_if_agent_rand_seq.start(configuration.fuse_ctrl_core_axi_write_in_if_agent_config.sequencer); + if ( configuration.fuse_ctrl_prim_axi_write_in_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_prim_axi_write_in_if_agent_rand_seq.start(configuration.fuse_ctrl_prim_axi_write_in_if_agent_config.sequencer); + if ( configuration.fuse_ctrl_core_axi_read_in_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_core_axi_read_in_if_agent_rand_seq.start(configuration.fuse_ctrl_core_axi_read_in_if_agent_config.sequencer); + if ( configuration.fuse_ctrl_prim_axi_read_in_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_prim_axi_read_in_if_agent_rand_seq.start(configuration.fuse_ctrl_prim_axi_read_in_if_agent_config.sequencer); + if ( configuration.fuse_ctrl_secreg_axi_read_in_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_secreg_axi_read_in_if_agent_rand_seq.start(configuration.fuse_ctrl_secreg_axi_read_in_if_agent_config.sequencer); + if ( configuration.fuse_ctrl_lc_otp_in_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_lc_otp_in_if_agent_rand_seq.start(configuration.fuse_ctrl_lc_otp_in_if_agent_config.sequencer); + if ( configuration.fuse_ctrl_in_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_in_if_agent_rand_seq.start(configuration.fuse_ctrl_in_if_agent_config.sequencer); + + + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_typedefs.svh new file mode 100644 index 000000000..79d1b10a2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the environment package. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + // pragma uvmf custom additional begin + // pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_environment.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_environment.svh new file mode 100644 index 000000000..c15635581 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_environment.svh @@ -0,0 +1,221 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This environment contains all agents, predictors and +// scoreboards required for the block level design. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class fuse_ctrl_environment extends uvmf_environment_base #( + .CONFIG_T( fuse_ctrl_env_configuration + )); + `uvm_component_utils( fuse_ctrl_environment ) + + + + + + typedef fuse_ctrl_rst_in_agent fuse_ctrl_rst_in_agent_t; + fuse_ctrl_rst_in_agent_t fuse_ctrl_rst_in_agent; + + typedef fuse_ctrl_rst_out_agent fuse_ctrl_rst_out_agent_t; + fuse_ctrl_rst_out_agent_t fuse_ctrl_rst_out_agent; + + typedef fuse_ctrl_core_axi_write_in_agent fuse_ctrl_core_axi_write_in_if_agent_t; + fuse_ctrl_core_axi_write_in_if_agent_t fuse_ctrl_core_axi_write_in_if_agent; + + typedef fuse_ctrl_core_axi_write_out_agent fuse_ctrl_core_axi_write_out_if_agent_t; + fuse_ctrl_core_axi_write_out_if_agent_t fuse_ctrl_core_axi_write_out_if_agent; + + typedef fuse_ctrl_prim_axi_write_in_agent fuse_ctrl_prim_axi_write_in_if_agent_t; + fuse_ctrl_prim_axi_write_in_if_agent_t fuse_ctrl_prim_axi_write_in_if_agent; + + typedef fuse_ctrl_prim_axi_write_out_agent fuse_ctrl_prim_axi_write_out_if_agent_t; + fuse_ctrl_prim_axi_write_out_if_agent_t fuse_ctrl_prim_axi_write_out_if_agent; + + typedef fuse_ctrl_core_axi_read_in_agent fuse_ctrl_core_axi_read_in_if_agent_t; + fuse_ctrl_core_axi_read_in_if_agent_t fuse_ctrl_core_axi_read_in_if_agent; + + typedef fuse_ctrl_core_axi_read_out_agent fuse_ctrl_core_axi_read_out_if_agent_t; + fuse_ctrl_core_axi_read_out_if_agent_t fuse_ctrl_core_axi_read_out_if_agent; + + typedef fuse_ctrl_prim_axi_read_in_agent fuse_ctrl_prim_axi_read_in_if_agent_t; + fuse_ctrl_prim_axi_read_in_if_agent_t fuse_ctrl_prim_axi_read_in_if_agent; + + typedef fuse_ctrl_prim_axi_read_out_agent fuse_ctrl_prim_axi_read_out_if_agent_t; + fuse_ctrl_prim_axi_read_out_if_agent_t fuse_ctrl_prim_axi_read_out_if_agent; + + typedef fuse_ctrl_secreg_axi_read_in_agent fuse_ctrl_secreg_axi_read_in_if_agent_t; + fuse_ctrl_secreg_axi_read_in_if_agent_t fuse_ctrl_secreg_axi_read_in_if_agent; + + typedef fuse_ctrl_secreg_axi_read_out_agent fuse_ctrl_secreg_axi_read_out_if_agent_t; + fuse_ctrl_secreg_axi_read_out_if_agent_t fuse_ctrl_secreg_axi_read_out_if_agent; + + typedef fuse_ctrl_lc_otp_in_agent fuse_ctrl_lc_otp_in_if_agent_t; + fuse_ctrl_lc_otp_in_if_agent_t fuse_ctrl_lc_otp_in_if_agent; + + typedef fuse_ctrl_lc_otp_out_agent fuse_ctrl_lc_otp_out_if_agent_t; + fuse_ctrl_lc_otp_out_if_agent_t fuse_ctrl_lc_otp_out_if_agent; + + typedef fuse_ctrl_in_agent fuse_ctrl_in_if_agent_t; + fuse_ctrl_in_if_agent_t fuse_ctrl_in_if_agent; + + typedef fuse_ctrl_out_agent fuse_ctrl_out_if_agent_t; + fuse_ctrl_out_if_agent_t fuse_ctrl_out_if_agent; + + + + + typedef fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T) + ) + fuse_ctrl_pred_t; + fuse_ctrl_pred_t fuse_ctrl_pred; + typedef fuse_ctrl_scoreboard #( + .CONFIG_T(CONFIG_T) + ) + fuse_ctrl_sb_t; + fuse_ctrl_sb_t fuse_ctrl_sb; + + + + + typedef uvmf_virtual_sequencer_base #(.CONFIG_T(fuse_ctrl_env_configuration)) fuse_ctrl_vsqr_t; + fuse_ctrl_vsqr_t vsqr; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// FUNCTION: build_phase() +// This function builds all components within this environment. +// + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + fuse_ctrl_rst_in_agent = fuse_ctrl_rst_in_agent_t::type_id::create("fuse_ctrl_rst_in_agent",this); + fuse_ctrl_rst_in_agent.set_config(configuration.fuse_ctrl_rst_in_agent_config); + fuse_ctrl_rst_out_agent = fuse_ctrl_rst_out_agent_t::type_id::create("fuse_ctrl_rst_out_agent",this); + fuse_ctrl_rst_out_agent.set_config(configuration.fuse_ctrl_rst_out_agent_config); + fuse_ctrl_core_axi_write_in_if_agent = fuse_ctrl_core_axi_write_in_if_agent_t::type_id::create("fuse_ctrl_core_axi_write_in_if_agent",this); + fuse_ctrl_core_axi_write_in_if_agent.set_config(configuration.fuse_ctrl_core_axi_write_in_if_agent_config); + fuse_ctrl_core_axi_write_out_if_agent = fuse_ctrl_core_axi_write_out_if_agent_t::type_id::create("fuse_ctrl_core_axi_write_out_if_agent",this); + fuse_ctrl_core_axi_write_out_if_agent.set_config(configuration.fuse_ctrl_core_axi_write_out_if_agent_config); + fuse_ctrl_prim_axi_write_in_if_agent = fuse_ctrl_prim_axi_write_in_if_agent_t::type_id::create("fuse_ctrl_prim_axi_write_in_if_agent",this); + fuse_ctrl_prim_axi_write_in_if_agent.set_config(configuration.fuse_ctrl_prim_axi_write_in_if_agent_config); + fuse_ctrl_prim_axi_write_out_if_agent = fuse_ctrl_prim_axi_write_out_if_agent_t::type_id::create("fuse_ctrl_prim_axi_write_out_if_agent",this); + fuse_ctrl_prim_axi_write_out_if_agent.set_config(configuration.fuse_ctrl_prim_axi_write_out_if_agent_config); + fuse_ctrl_core_axi_read_in_if_agent = fuse_ctrl_core_axi_read_in_if_agent_t::type_id::create("fuse_ctrl_core_axi_read_in_if_agent",this); + fuse_ctrl_core_axi_read_in_if_agent.set_config(configuration.fuse_ctrl_core_axi_read_in_if_agent_config); + fuse_ctrl_core_axi_read_out_if_agent = fuse_ctrl_core_axi_read_out_if_agent_t::type_id::create("fuse_ctrl_core_axi_read_out_if_agent",this); + fuse_ctrl_core_axi_read_out_if_agent.set_config(configuration.fuse_ctrl_core_axi_read_out_if_agent_config); + fuse_ctrl_prim_axi_read_in_if_agent = fuse_ctrl_prim_axi_read_in_if_agent_t::type_id::create("fuse_ctrl_prim_axi_read_in_if_agent",this); + fuse_ctrl_prim_axi_read_in_if_agent.set_config(configuration.fuse_ctrl_prim_axi_read_in_if_agent_config); + fuse_ctrl_prim_axi_read_out_if_agent = fuse_ctrl_prim_axi_read_out_if_agent_t::type_id::create("fuse_ctrl_prim_axi_read_out_if_agent",this); + fuse_ctrl_prim_axi_read_out_if_agent.set_config(configuration.fuse_ctrl_prim_axi_read_out_if_agent_config); + fuse_ctrl_secreg_axi_read_in_if_agent = fuse_ctrl_secreg_axi_read_in_if_agent_t::type_id::create("fuse_ctrl_secreg_axi_read_in_if_agent",this); + fuse_ctrl_secreg_axi_read_in_if_agent.set_config(configuration.fuse_ctrl_secreg_axi_read_in_if_agent_config); + fuse_ctrl_secreg_axi_read_out_if_agent = fuse_ctrl_secreg_axi_read_out_if_agent_t::type_id::create("fuse_ctrl_secreg_axi_read_out_if_agent",this); + fuse_ctrl_secreg_axi_read_out_if_agent.set_config(configuration.fuse_ctrl_secreg_axi_read_out_if_agent_config); + fuse_ctrl_lc_otp_in_if_agent = fuse_ctrl_lc_otp_in_if_agent_t::type_id::create("fuse_ctrl_lc_otp_in_if_agent",this); + fuse_ctrl_lc_otp_in_if_agent.set_config(configuration.fuse_ctrl_lc_otp_in_if_agent_config); + fuse_ctrl_lc_otp_out_if_agent = fuse_ctrl_lc_otp_out_if_agent_t::type_id::create("fuse_ctrl_lc_otp_out_if_agent",this); + fuse_ctrl_lc_otp_out_if_agent.set_config(configuration.fuse_ctrl_lc_otp_out_if_agent_config); + fuse_ctrl_in_if_agent = fuse_ctrl_in_if_agent_t::type_id::create("fuse_ctrl_in_if_agent",this); + fuse_ctrl_in_if_agent.set_config(configuration.fuse_ctrl_in_if_agent_config); + fuse_ctrl_out_if_agent = fuse_ctrl_out_if_agent_t::type_id::create("fuse_ctrl_out_if_agent",this); + fuse_ctrl_out_if_agent.set_config(configuration.fuse_ctrl_out_if_agent_config); + fuse_ctrl_pred = fuse_ctrl_pred_t::type_id::create("fuse_ctrl_pred",this); + fuse_ctrl_pred.configuration = configuration; + fuse_ctrl_sb = fuse_ctrl_sb_t::type_id::create("fuse_ctrl_sb",this); + fuse_ctrl_sb.configuration = configuration; + + vsqr = fuse_ctrl_vsqr_t::type_id::create("vsqr", this); + vsqr.set_config(configuration); + configuration.set_vsqr(vsqr); + + // pragma uvmf custom build_phase begin + // pragma uvmf custom build_phase end + endfunction + +// **************************************************************************** +// FUNCTION: connect_phase() +// This function makes all connections within this environment. Connections +// typically inclue agent to predictor, predictor to scoreboard and scoreboard +// to agent. +// + virtual function void connect_phase(uvm_phase phase); +// pragma uvmf custom connect_phase_pre_super begin +// pragma uvmf custom connect_phase_pre_super end + super.connect_phase(phase); + fuse_ctrl_rst_in_agent.monitored_ap.connect(fuse_ctrl_pred.fuse_ctrl_rst_agent_ae); + fuse_ctrl_pred.fuse_ctrl_sb_ap.connect(fuse_ctrl_sb.expected_analysis_export); + fuse_ctrl_rst_out_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_core_axi_write_in_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_core_axi_write_out_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_core_axi_read_in_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_core_axi_read_out_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_prim_axi_write_in_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_prim_axi_write_out_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_prim_axi_read_in_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_prim_axi_read_out_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_secreg_axi_read_in_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_secreg_axi_read_out_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_lc_otp_in_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_lc_otp_out_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_in_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_out_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + // pragma uvmf custom reg_model_connect_phase begin + // pragma uvmf custom reg_model_connect_phase end + endfunction + +// **************************************************************************** +// FUNCTION: end_of_simulation_phase() +// This function is executed just prior to executing run_phase. This function +// was added to the environment to sample environment configuration settings +// just before the simulation exits time 0. The configuration structure is +// randomized in the build phase before the environment structure is constructed. +// Configuration variables can be customized after randomization in the build_phase +// of the extended test. +// If a sequence modifies values in the configuration structure then the sequence is +// responsible for sampling the covergroup in the configuration if required. +// + virtual function void start_of_simulation_phase(uvm_phase phase); + configuration.fuse_ctrl_configuration_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_predictor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_predictor.svh new file mode 100644 index 000000000..0250853d4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_predictor.svh @@ -0,0 +1,323 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +// +// DESCRIPTION: This analysis component contains analysis_exports for receiving +// data and analysis_ports for sending data. +// +// This analysis component has the following analysis_exports that receive the +// listed transaction type. +// +// fuse_ctrl_rst_agent_ae receives transactions of type fuse_ctrl_rst_transaction +// fuse_ctrl_core_axi_write_agent_ae receives transactions of type fuse_ctrl_write_transaction +// fuse_ctrl_prim_axi_write_agent_ae receives transactions of type fuse_ctrl_write_transaction +// fuse_ctrl_core_axi_read_agent_ae receives transactions of type fuse_ctrl_read_transaction +// fuse_ctrl_prim_axi_read_agent_ae receives transactions of type fuse_ctrl_read_transaction +// fuse_ctrl_secreg_axi_read_agent_ae receives transactions of type fuse_ctrl_read_transaction +// fuse_ctrl_lc_otp_if_agent_ae receives transactions of type fuse_ctrl_read_transaction +// +// This analysis component has the following analysis_ports that can broadcast +// the listed transaction type. +// +// fuse_ctrl_sb_ap broadcasts transactions of type fuse_ctrl_read_transaction +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class fuse_ctrl_predictor #( + type CONFIG_T, + type BASE_T = uvm_component + ) + extends BASE_T; + + // Factory registration of this class + `uvm_component_param_utils( fuse_ctrl_predictor #( + CONFIG_T, + BASE_T + ) +) + + + // Instantiate a handle to the configuration of the environment in which this component resides + CONFIG_T configuration; + + + // Instantiate the analysis exports + uvm_analysis_imp_fuse_ctrl_rst_agent_ae #(fuse_ctrl_rst_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_rst_agent_ae; + uvm_analysis_imp_fuse_ctrl_core_axi_write_agent_ae #(fuse_ctrl_write_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_core_axi_write_agent_ae; + uvm_analysis_imp_fuse_ctrl_prim_axi_write_agent_ae #(fuse_ctrl_write_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_prim_axi_write_agent_ae; + uvm_analysis_imp_fuse_ctrl_core_axi_read_agent_ae #(fuse_ctrl_read_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_core_axi_read_agent_ae; + uvm_analysis_imp_fuse_ctrl_prim_axi_read_agent_ae #(fuse_ctrl_read_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_prim_axi_read_agent_ae; + uvm_analysis_imp_fuse_ctrl_secreg_axi_read_agent_ae #(fuse_ctrl_read_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_secreg_axi_read_agent_ae; + uvm_analysis_imp_fuse_ctrl_lc_otp_if_agent_ae #(fuse_ctrl_read_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_lc_otp_if_agent_ae; + + + // Instantiate the analysis ports + uvm_analysis_port #(fuse_ctrl_read_transaction) fuse_ctrl_sb_ap; + + + // Transaction variable for predicted values to be sent out fuse_ctrl_sb_ap + // Once a transaction is sent through an analysis_port, another transaction should + // be constructed for the next predicted transaction. + typedef fuse_ctrl_read_transaction fuse_ctrl_sb_ap_output_transaction_t; + fuse_ctrl_sb_ap_output_transaction_t fuse_ctrl_sb_ap_output_transaction; + // Code for sending output transaction out through fuse_ctrl_sb_ap + // fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + + // Define transaction handles for debug visibility + fuse_ctrl_rst_transaction fuse_ctrl_rst_agent_ae_debug; + fuse_ctrl_write_transaction fuse_ctrl_core_axi_write_agent_ae_debug; + fuse_ctrl_write_transaction fuse_ctrl_prim_axi_write_agent_ae_debug; + fuse_ctrl_read_transaction fuse_ctrl_core_axi_read_agent_ae_debug; + fuse_ctrl_read_transaction fuse_ctrl_prim_axi_read_agent_ae_debug; + fuse_ctrl_read_transaction fuse_ctrl_secreg_axi_read_agent_ae_debug; + fuse_ctrl_read_transaction fuse_ctrl_lc_otp_if_agent_ae_debug; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // FUNCTION: new + function new(string name, uvm_component parent); + super.new(name,parent); + `uvm_warning("PREDICTOR_REVIEW", "This predictor has been created either through generation or re-generation with merging. Remove this warning after the predictor has been reviewed.") + // pragma uvmf custom new begin + // pragma uvmf custom new end + endfunction + + // FUNCTION: build_phase + virtual function void build_phase (uvm_phase phase); + + fuse_ctrl_rst_agent_ae = new("fuse_ctrl_rst_agent_ae", this); + fuse_ctrl_core_axi_write_agent_ae = new("fuse_ctrl_core_axi_write_agent_ae", this); + fuse_ctrl_prim_axi_write_agent_ae = new("fuse_ctrl_prim_axi_write_agent_ae", this); + fuse_ctrl_core_axi_read_agent_ae = new("fuse_ctrl_core_axi_read_agent_ae", this); + fuse_ctrl_prim_axi_read_agent_ae = new("fuse_ctrl_prim_axi_read_agent_ae", this); + fuse_ctrl_secreg_axi_read_agent_ae = new("fuse_ctrl_secreg_axi_read_agent_ae", this); + fuse_ctrl_lc_otp_if_agent_ae = new("fuse_ctrl_lc_otp_if_agent_ae", this); + fuse_ctrl_sb_ap =new("fuse_ctrl_sb_ap", this ); + // pragma uvmf custom build_phase begin + // pragma uvmf custom build_phase end + endfunction + + // FUNCTION: write_fuse_ctrl_rst_agent_ae + // Transactions received through fuse_ctrl_rst_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_rst_agent_ae(fuse_ctrl_rst_transaction t); + // pragma uvmf custom fuse_ctrl_rst_agent_ae_predictor begin + fuse_ctrl_rst_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_rst_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_rst_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_rst_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_core_axi_write_agent_ae + // Transactions received through fuse_ctrl_core_axi_write_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_core_axi_write_agent_ae(fuse_ctrl_write_transaction t); + // pragma uvmf custom fuse_ctrl_core_axi_write_agent_ae_predictor begin + fuse_ctrl_core_axi_write_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_core_axi_write_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_core_axi_write_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_core_axi_write_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_prim_axi_write_agent_ae + // Transactions received through fuse_ctrl_prim_axi_write_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_prim_axi_write_agent_ae(fuse_ctrl_write_transaction t); + // pragma uvmf custom fuse_ctrl_prim_axi_write_agent_ae_predictor begin + fuse_ctrl_prim_axi_write_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_prim_axi_write_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_prim_axi_write_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_prim_axi_write_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_core_axi_read_agent_ae + // Transactions received through fuse_ctrl_core_axi_read_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_core_axi_read_agent_ae(fuse_ctrl_read_transaction t); + // pragma uvmf custom fuse_ctrl_core_axi_read_agent_ae_predictor begin + fuse_ctrl_core_axi_read_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_core_axi_read_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_core_axi_read_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_core_axi_read_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_prim_axi_read_agent_ae + // Transactions received through fuse_ctrl_prim_axi_read_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_prim_axi_read_agent_ae(fuse_ctrl_read_transaction t); + // pragma uvmf custom fuse_ctrl_prim_axi_read_agent_ae_predictor begin + fuse_ctrl_prim_axi_read_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_prim_axi_read_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_prim_axi_read_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_prim_axi_read_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_secreg_axi_read_agent_ae + // Transactions received through fuse_ctrl_secreg_axi_read_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_secreg_axi_read_agent_ae(fuse_ctrl_read_transaction t); + // pragma uvmf custom fuse_ctrl_secreg_axi_read_agent_ae_predictor begin + fuse_ctrl_secreg_axi_read_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_secreg_axi_read_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_secreg_axi_read_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_secreg_axi_read_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_lc_otp_if_agent_ae + // Transactions received through fuse_ctrl_lc_otp_if_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_lc_otp_if_agent_ae(fuse_ctrl_read_transaction t); + // pragma uvmf custom fuse_ctrl_lc_otp_if_agent_ae_predictor begin + fuse_ctrl_lc_otp_if_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_lc_otp_if_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_lc_otp_if_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_lc_otp_if_agent_ae_predictor end + endfunction + + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_scoreboard.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_scoreboard.svh new file mode 100644 index 000000000..319d51fae --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_scoreboard.svh @@ -0,0 +1,149 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This analysis component contains analysis_exports for receiving +// data and analysis_ports for sending data. +// +// This analysis component has the following analysis_exports that receive the +// listed transaction type. +// +// expected_analysis_export receives transactions of type fuse_ctrl_read_transaction +// actual_analysis_export receives transactions of type fuse_ctrl_read_transaction +// +// This analysis component has the following analysis_ports that can broadcast +// the listed transaction type. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +class fuse_ctrl_scoreboard #( + type CONFIG_T, + type BASE_T = uvm_component + ) + extends BASE_T; + + // Factory registration of this class + `uvm_component_param_utils( fuse_ctrl_scoreboard #( + CONFIG_T, + BASE_T + ) +) + + + // Instantiate a handle to the configuration of the environment in which this component resides + CONFIG_T configuration; + + + // Instantiate the analysis exports + uvm_analysis_imp_expected_analysis_export #(fuse_ctrl_read_transaction, fuse_ctrl_scoreboard #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) expected_analysis_export; + uvm_analysis_imp_actual_analysis_export #(fuse_ctrl_read_transaction, fuse_ctrl_scoreboard #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) actual_analysis_export; + + + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // FUNCTION: new + function new(string name, uvm_component parent); + super.new(name,parent); + // pragma uvmf custom new begin + // pragma uvmf custom new end + endfunction + + // FUNCTION: build_phase + virtual function void build_phase (uvm_phase phase); + + expected_analysis_export = new("expected_analysis_export", this); + actual_analysis_export = new("actual_analysis_export", this); + // pragma uvmf custom build_phase begin + // pragma uvmf custom build_phase end + endfunction + + // FUNCTION: write_expected_analysis_export + // Transactions received through expected_analysis_export initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_expected_analysis_export(fuse_ctrl_read_transaction t); + // pragma uvmf custom expected_analysis_export_scoreboard begin + `uvm_info("PRED", "Transaction Received through expected_analysis_export", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // UVMF_CHANGE_ME: Implement custom scoreboard here. + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "UVMF_CHANGE_ME: The fuse_ctrl_scoreboard::write_expected_analysis_export function needs to be completed with custom scoreboard functionality",UVM_NONE) + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "******************************************************************************************************",UVM_NONE) + + // pragma uvmf custom expected_analysis_export_scoreboard end + endfunction + + // FUNCTION: write_actual_analysis_export + // Transactions received through actual_analysis_export initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_actual_analysis_export(fuse_ctrl_read_transaction t); + // pragma uvmf custom actual_analysis_export_scoreboard begin + `uvm_info("PRED", "Transaction Received through actual_analysis_export", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // UVMF_CHANGE_ME: Implement custom scoreboard here. + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "UVMF_CHANGE_ME: The fuse_ctrl_scoreboard::write_actual_analysis_export function needs to be completed with custom scoreboard functionality",UVM_NONE) + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "******************************************************************************************************",UVM_NONE) + + // pragma uvmf custom actual_analysis_export_scoreboard end + endfunction + + + + // FUNCTION: extract_phase + virtual function void extract_phase(uvm_phase phase); +// pragma uvmf custom extract_phase begin + super.extract_phase(phase); +// pragma uvmf custom extract_phase end + endfunction + + // FUNCTION: check_phase + virtual function void check_phase(uvm_phase phase); +// pragma uvmf custom check_phase begin + super.check_phase(phase); +// pragma uvmf custom check_phase end + endfunction + + // FUNCTION: report_phase + virtual function void report_phase(uvm_phase phase); +// pragma uvmf custom report_phase begin + super.report_phase(phase); +// pragma uvmf custom report_phase end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_environment.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_environment.yaml new file mode 100644 index 000000000..3cdc526e9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_environment.yaml @@ -0,0 +1,122 @@ +uvmf: + environments: + fuse_ctrl: + agents: + - initiator_responder: INITIATOR + name: fuse_ctrl_rst_in_agent + type: fuse_ctrl_rst_in + - initiator_responder: RESPONDER + name: fuse_ctrl_rst_out_agent + type: fuse_ctrl_rst_out + - initiator_responder: INITIATOR + name: fuse_ctrl_core_axi_write_in_if_agent + type: fuse_ctrl_core_axi_write_in + - initiator_responder: RESPONDER + name: fuse_ctrl_core_axi_write_out_if_agent + type: fuse_ctrl_core_axi_write_out + - initiator_responder: INITIATOR + name: fuse_ctrl_prim_axi_write_in_if_agent + type: fuse_ctrl_prim_axi_write_in + - initiator_responder: RESPONDER + name: fuse_ctrl_prim_axi_write_out_if_agent + type: fuse_ctrl_prim_axi_write_out + - initiator_responder: INITIATOR + name: fuse_ctrl_core_axi_read_in_if_agent + type: fuse_ctrl_core_axi_read_in + - initiator_responder: RESPONDER + name: fuse_ctrl_core_axi_read_out_if_agent + type: fuse_ctrl_core_axi_read_out + - initiator_responder: INITIATOR + name: fuse_ctrl_prim_axi_read_in_if_agent + type: fuse_ctrl_prim_axi_read_in + - initiator_responder: RESPONDER + name: fuse_ctrl_prim_axi_read_out_if_agent + type: fuse_ctrl_prim_axi_read_out + - initiator_responder: INITIATOR + name: fuse_ctrl_secreg_axi_read_in_if_agent + type: fuse_ctrl_secreg_axi_read_in + - initiator_responder: RESPONDER + name: fuse_ctrl_secreg_axi_read_out_if_agent + type: fuse_ctrl_secreg_axi_read_out + - initiator_responder: INITIATOR + name: fuse_ctrl_lc_otp_in_if_agent + type: fuse_ctrl_lc_otp_in + - initiator_responder: RESPONDER + name: fuse_ctrl_lc_otp_out_if_agent + type: fuse_ctrl_lc_otp_out + - initiator_responder: INITIATOR + name: fuse_ctrl_in_if_agent + type: fuse_ctrl_in + - initiator_responder: RESPONDER + name: fuse_ctrl_out_if_agent + type: fuse_ctrl_out + analysis_components: + - name: fuse_ctrl_pred + parameters: [] + type: fuse_ctrl_predictor + - name: fuse_ctrl_sb + parameters: [] + type: fuse_ctrl_scoreboard + analysis_exports: [] + analysis_ports: [] + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + hvl_pkg_parameters: [] + non_uvmf_components: [] + parameters: [] + qvip_memory_agents: [] + scoreboards: [] + subenvs: [] + tlm_connections: + - driver: fuse_ctrl_rst_in_agent.monitored_ap + receiver: fuse_ctrl_pred.fuse_ctrl_rst_agent_ae + validate: 'True' + - driver: fuse_ctrl_pred.fuse_ctrl_sb_ap + receiver: fuse_ctrl_sb.expected_analysis_export + validate: 'True' + - driver: fuse_ctrl_rst_out_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_core_axi_write_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_core_axi_write_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_core_axi_read_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_core_axi_read_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_prim_axi_write_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_prim_axi_write_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_prim_axi_read_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_prim_axi_read_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_secreg_axi_read_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_secreg_axi_read_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_lc_otp_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_lc_otp_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_predictor.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_predictor.yaml new file mode 100644 index 000000000..7832404a7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_predictor.yaml @@ -0,0 +1,23 @@ +uvmf: + util_components: + fuse_ctrl_predictor: + analysis_exports: + - name: fuse_ctrl_rst_agent_ae + type: fuse_ctrl_rst_transaction + - name: fuse_ctrl_core_axi_write_agent_ae + type: fuse_ctrl_write_transaction + - name: fuse_ctrl_prim_axi_write_agent_ae + type: fuse_ctrl_write_transaction + - name: fuse_ctrl_core_axi_read_agent_ae + type: fuse_ctrl_read_transaction + - name: fuse_ctrl_prim_axi_read_agent_ae + type: fuse_ctrl_read_transaction + - name: fuse_ctrl_secreg_axi_read_agent_ae + type: fuse_ctrl_read_transaction + - name: fuse_ctrl_lc_otp_if_agent_ae + type: fuse_ctrl_read_transaction + analysis_ports: + - name: fuse_ctrl_sb_ap + type: fuse_ctrl_read_transaction + existing_library_component: 'True' + type: predictor diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_scoreboard.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_scoreboard.yaml new file mode 100644 index 000000000..05167c417 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_scoreboard.yaml @@ -0,0 +1,10 @@ +uvmf: + util_components: + fuse_ctrl_scoreboard: + analysis_exports: + - name: expected_analysis_export + type: fuse_ctrl_read_transaction + - name: actual_analysis_export + type: fuse_ctrl_read_transaction + existing_library_component: 'True' + type: scoreboard diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/.project new file mode 100644 index 000000000..f5be90c8f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + core_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..5646c3df8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..9974230a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# core_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +core_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f + +core_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f + +core_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f + +COMP_core_axi_read_if_PKG_TGT_0 = q_comp_core_axi_read_if_pkg +COMP_core_axi_read_if_PKG_TGT_1 = v_comp_core_axi_read_if_pkg +COMP_core_axi_read_if_PKG_TGT = $(COMP_core_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_core_axi_read_if_pkg: $(COMP_core_axi_read_if_PKG_TGT) + +q_comp_core_axi_read_if_pkg: + $(HDL_COMP_CMD) $(core_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_read_if_PKG) + $(HDL_COMP_CMD) $(core_axi_read_if_PKG_XRTL) + +v_comp_core_axi_read_if_pkg: + $(HVL_COMP_CMD) $(core_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_read_if_PKG) + $(VELANALYZE_CMD) $(core_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(core_axi_read_if_PKG) + $(HDL_COMP_CMD) $(core_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export core_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_core_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_core_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_core_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_core_axi_read_if_pkg += -I$(core_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_core_axi_read_if_pkg += $(core_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_core_axi_read_if_pkg += \ + \ + -o .so + +comp_core_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_core_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_core_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_core_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_core_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..bfe89a8e0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of core_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if.compile new file mode 100644 index 000000000..5aa3fb538 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - core_axi_read_if_hvl.compile + - core_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..58385ae7f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use core_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/core_axi_read_if_if.sv +src/core_axi_read_if_driver_bfm.sv +src/core_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_common.compile new file mode 100644 index 000000000..9374bee40 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..6dfc76a5f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..c3606bba2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..6c5bc4baa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hdl.compile new file mode 100644 index 000000000..6665d30a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./core_axi_read_if_common.compile +incdir: + - . +src: + - src/core_axi_read_if_if.sv + - src/core_axi_read_if_monitor_bfm.sv + - src/core_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hvl.compile new file mode 100644 index 000000000..ffce38e1b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./core_axi_read_if_common.compile +incdir: + - . +src: + - core_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.sv new file mode 100644 index 000000000..5be093439 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import core_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/core_axi_read_if_macros.svh" + + export core_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/core_axi_read_if_typedefs.svh" + `include "src/core_axi_read_if_transaction.svh" + + `include "src/core_axi_read_if_configuration.svh" + `include "src/core_axi_read_if_driver.svh" + `include "src/core_axi_read_if_monitor.svh" + + `include "src/core_axi_read_if_transaction_coverage.svh" + `include "src/core_axi_read_if_sequence_base.svh" + `include "src/core_axi_read_if_random_sequence.svh" + + `include "src/core_axi_read_if_responder_sequence.svh" + `include "src/core_axi_read_if2reg_adapter.svh" + + `include "src/core_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..54878b149 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use core_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +core_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..738469493 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/core_axi_read_if_typedefs_hdl.svh" + `include "src/core_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..289cfb15d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..25ac277ab --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..872ddc7d8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the core_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( core_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "core_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : core_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_agent.svh new file mode 100644 index 000000000..74e70677a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(core_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(core_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(core_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( core_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_configuration.svh new file mode 100644 index 000000000..96293f076 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the core_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual core_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual core_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup core_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in core_axi_read_if_macros.svh + `core_axi_read_if_CONFIGURATION_STRUCT + core_axi_read_if_configuration_s core_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a core_axi_read_if_configuration_s + // structure. The function returns the handle to the core_axi_read_if_configuration_struct. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + core_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + core_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + core_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + core_axi_read_if_configuration_cg.set_inst_name($sformatf("core_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver.svh new file mode 100644 index 000000000..2da1ca1ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual core_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( core_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in core_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm +// to communicate initiator driven data to core_axi_read_if_driver_bfm. +`core_axi_read_if_INITIATOR_STRUCT + core_axi_read_if_initiator_s core_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm +// to communicate Responder driven data to core_axi_read_if_driver_bfm. +`core_axi_read_if_RESPONDER_STRUCT + core_axi_read_if_responder_s core_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + core_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(core_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + core_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(core_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..cfce6e49c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the core_axi_read_if signal driving. It is +// accessed by the uvm core_axi_read_if driver through a virtual interface +// handle in the core_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type core_axi_read_if_if. +// +// Input signals from the core_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within core_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_read_if_pkg_hdl::*; +`include "src/core_axi_read_if_macros.svh" + +interface core_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (core_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute core_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + core_axi_read_if_pkg::core_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in core_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from core_axi_read_if_driver to this BFM + // **************************************************************************** + `core_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm + // to communicate initiator driven data to core_axi_read_if_driver_bfm. + `core_axi_read_if_INITIATOR_STRUCT + core_axi_read_if_initiator_s initiator_struct; + // Responder macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm + // to communicate Responder driven data to core_axi_read_if_driver_bfm. + `core_axi_read_if_RESPONDER_STRUCT + core_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(core_axi_read_if_configuration_s core_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input core_axi_read_if_initiator_s core_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output core_axi_read_if_responder_s core_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the core_axi_read_if_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Members within the core_axi_read_if_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + initiator_struct = core_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // core_axi_read_if_responder_struct.xyz = arready_i; // + // core_axi_read_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // core_axi_read_if_responder_struct.xyz = rresp_i; // + // core_axi_read_if_responder_struct.xyz = rid_i; // + // core_axi_read_if_responder_struct.xyz = rlast_i; // + // core_axi_read_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // core_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = core_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output core_axi_read_if_initiator_s core_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input core_axi_read_if_responder_s core_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the core_axi_read_if_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Variables within the core_axi_read_if_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= core_axi_read_if_initiator_struct.xyz; // + // rdata_o <= core_axi_read_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= core_axi_read_if_initiator_struct.xyz; // + // rid_o <= core_axi_read_if_initiator_struct.xyz; // + // rlast_o <= core_axi_read_if_initiator_struct.xyz; // + // rvalid_o <= core_axi_read_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the core_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the core_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_if.sv new file mode 100644 index 000000000..bd1242f03 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the core_axi_read_if interface signals. +// It is instantiated once per core_axi_read_if bus. Bus Functional Models, +// BFM's named core_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named core_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(core_axi_read_if_bus.arready), // Agent input +// .dut_signal_port(core_axi_read_if_bus.rdata), // Agent input +// .dut_signal_port(core_axi_read_if_bus.rresp), // Agent input +// .dut_signal_port(core_axi_read_if_bus.rid), // Agent input +// .dut_signal_port(core_axi_read_if_bus.rlast), // Agent input +// .dut_signal_port(core_axi_read_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import core_axi_read_if_pkg_hdl::*; + +interface core_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_macros.svh new file mode 100644 index 000000000..61c6fdb62 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the core_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the core_axi_read_if_configuration class. +// + `define core_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } core_axi_read_if_configuration_s; + + `define core_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function core_axi_read_if_configuration_s to_struct();\ + core_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( core_axi_read_if_configuration_struct );\ + endfunction + + `define core_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(core_axi_read_if_configuration_s core_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = core_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the core_axi_read_if_transaction class. +// + `define core_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } core_axi_read_if_monitor_s; + + `define core_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function core_axi_read_if_monitor_s to_monitor_struct();\ + core_axi_read_if_monitor_struct = \ + { \ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( core_axi_read_if_monitor_struct);\ + endfunction\ + + `define core_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(core_axi_read_if_monitor_s core_axi_read_if_monitor_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = core_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the core_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } core_axi_read_if_initiator_s; + + `define core_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function core_axi_read_if_initiator_s to_initiator_struct();\ + core_axi_read_if_initiator_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( core_axi_read_if_initiator_struct);\ + endfunction + + `define core_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(core_axi_read_if_initiator_s core_axi_read_if_initiator_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = core_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the core_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } core_axi_read_if_responder_s; + + `define core_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function core_axi_read_if_responder_s to_responder_struct();\ + core_axi_read_if_responder_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( core_axi_read_if_responder_struct);\ + endfunction + + `define core_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(core_axi_read_if_responder_s core_axi_read_if_responder_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = core_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor.svh new file mode 100644 index 000000000..a26f7ab33 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives core_axi_read_if transactions observed by the +// core_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual core_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`core_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the core_axi_read_if_monitor_struct. + virtual function void notify_transaction(input core_axi_read_if_monitor_s core_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(core_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..3940f5ab1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the core_axi_read_if signal monitoring. +// It is accessed by the uvm core_axi_read_if monitor through a virtual +// interface handle in the core_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type core_axi_read_if_if. +// +// Input signals from the core_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the core_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_read_if_pkg_hdl::*; +`include "src/core_axi_read_if_macros.svh" + + +interface core_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( core_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute core_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`core_axi_read_if_MONITOR_STRUCT + core_axi_read_if_monitor_s core_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `core_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + core_axi_read_if_pkg::core_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( core_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( core_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(core_axi_read_if_configuration_s core_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output core_axi_read_if_monitor_s core_axi_read_if_monitor_struct); + // + // Available struct members: + // // core_axi_read_if_monitor_struct.core_arready + // // core_axi_read_if_monitor_struct.core_rdata + // // core_axi_read_if_monitor_struct.core_rresp + // // core_axi_read_if_monitor_struct.core_rid + // // core_axi_read_if_monitor_struct.core_rlast + // // core_axi_read_if_monitor_struct.core_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // core_axi_read_if_monitor_struct.xyz = arready_i; // + // core_axi_read_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // core_axi_read_if_monitor_struct.xyz = rresp_i; // + // core_axi_read_if_monitor_struct.xyz = rid_i; // + // core_axi_read_if_monitor_struct.xyz = rlast_i; // + // core_axi_read_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..9f52585cd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the core_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a core_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "core_axi_read_if_random_sequence::body()-core_axi_read_if_transaction randomization failed") + // Send the transaction to the core_axi_read_if_driver_bfm via the sequencer and core_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: core_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..a51c239e4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "core_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..39f9a15a4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_read_if_transaction_req_t; + core_axi_read_if_transaction_req_t req; + typedef core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_read_if_transaction_rsp_t; + core_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = core_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = core_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction.svh new file mode 100644 index 000000000..2b8fc724c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an core_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( core_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_arready ; + logic [DW-1:0] core_rdata ; + axi_pkg::axi_burst_e core_rresp ; + logic [IW-1:0] core_rid ; + logic core_rlast ; + logic core_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in core_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by core_axi_read_if_monitor and core_axi_read_if_monitor_bfm + // This struct is defined in core_axi_read_if_macros.svh + `core_axi_read_if_MONITOR_STRUCT + core_axi_read_if_monitor_s core_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a core_axi_read_if_monitor_s + // structure. The function returns the handle to the core_axi_read_if_monitor_struct. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm + // to communicate initiator driven data to core_axi_read_if_driver_bfm. + // This struct is defined in core_axi_read_if_macros.svh + `core_axi_read_if_INITIATOR_STRUCT + core_axi_read_if_initiator_s core_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a core_axi_read_if_initiator_s + // structure. The function returns the handle to the core_axi_read_if_initiator_struct. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm + // to communicate Responder driven data to core_axi_read_if_driver_bfm. + // This struct is defined in core_axi_read_if_macros.svh + `core_axi_read_if_RESPONDER_STRUCT + core_axi_read_if_responder_s core_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a core_axi_read_if_responder_s + // structure. The function returns the handle to the core_axi_read_if_responder_struct. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_arready:0x%x core_rdata:0x%x core_rresp:0x%x core_rid:0x%x core_rlast:0x%x core_rvalid:0x%x ",core_arready,core_rdata,core_rresp,core_rid,core_rlast,core_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_arready == RHS.core_arready) + &&(this.core_rdata == RHS.core_rdata) + &&(this.core_rresp == RHS.core_rresp) + &&(this.core_rid == RHS.core_rid) + &&(this.core_rlast == RHS.core_rlast) + &&(this.core_rvalid == RHS.core_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_arready = RHS.core_arready; + this.core_rdata = RHS.core_rdata; + this.core_rresp = RHS.core_rresp; + this.core_rid = RHS.core_rid; + this.core_rlast = RHS.core_rlast; + this.core_rvalid = RHS.core_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"core_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_arready,"core_arready"); + $add_attribute(transaction_view_h,core_rdata,"core_rdata"); + $add_attribute(transaction_view_h,core_rresp,"core_rresp"); + $add_attribute(transaction_view_h,core_rid,"core_rid"); + $add_attribute(transaction_view_h,core_rlast,"core_rlast"); + $add_attribute(transaction_view_h,core_rvalid,"core_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..0e45fd07d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records core_axi_read_if transaction information using +// a covergroup named core_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup core_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_arready: coverpoint coverage_trans.core_arready; + core_rdata: coverpoint coverage_trans.core_rdata; + core_rresp: coverpoint coverage_trans.core_rresp; + core_rid: coverpoint coverage_trans.core_rid; + core_rlast: coverpoint coverage_trans.core_rlast; + core_rvalid: coverpoint coverage_trans.core_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + core_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + core_axi_read_if_transaction_cg.set_inst_name($sformatf("core_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + core_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/yaml/core_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/yaml/core_axi_read_if_interface.yaml new file mode 100644 index 000000000..be65d5c34 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_if_pkg/yaml/core_axi_read_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + core_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/.project new file mode 100644 index 000000000..d9e187c97 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + core_axi_read_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/.svproject new file mode 100644 index 000000000..6620fd792 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/Makefile new file mode 100644 index 000000000..674d9fe11 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# core_axi_read_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +core_axi_read_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hvl.f + +core_axi_read_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hdl.f + +core_axi_read_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_xrtl.f + +COMP_core_axi_read_out_if_PKG_TGT_0 = q_comp_core_axi_read_out_if_pkg +COMP_core_axi_read_out_if_PKG_TGT_1 = v_comp_core_axi_read_out_if_pkg +COMP_core_axi_read_out_if_PKG_TGT = $(COMP_core_axi_read_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_core_axi_read_out_if_pkg: $(COMP_core_axi_read_out_if_PKG_TGT) + +q_comp_core_axi_read_out_if_pkg: + $(HDL_COMP_CMD) $(core_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(core_axi_read_out_if_PKG_XRTL) + +v_comp_core_axi_read_out_if_pkg: + $(HVL_COMP_CMD) $(core_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_read_out_if_PKG) + $(VELANALYZE_CMD) $(core_axi_read_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(core_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(core_axi_read_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export core_axi_read_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_core_axi_read_out_if_pkg = \ + +O_FILE_COMPILE_LIST_core_axi_read_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_core_axi_read_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_core_axi_read_out_if_pkg += -I$(core_axi_read_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_core_axi_read_out_if_pkg += $(core_axi_read_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_core_axi_read_out_if_pkg += \ + \ + -o .so + +comp_core_axi_read_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_core_axi_read_out_if_pkg) $(C_FILE_COMPILE_LIST_core_axi_read_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_core_axi_read_out_if_pkg) $(O_FILE_COMPILE_LIST_core_axi_read_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/compile.do new file mode 100644 index 000000000..73e42d35e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of core_axi_read_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if.compile new file mode 100644 index 000000000..6899ae4aa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if.compile @@ -0,0 +1,3 @@ +needs: + - core_axi_read_out_if_hvl.compile + - core_axi_read_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_bfm.vinfo new file mode 100644 index 000000000..d3826b867 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use core_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/core_axi_read_out_if_if.sv +src/core_axi_read_out_if_driver_bfm.sv +src/core_axi_read_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_common.compile new file mode 100644 index 000000000..439747e2b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - core_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hdl.f new file mode 100644 index 000000000..61a64a8fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hvl.f new file mode 100644 index 000000000..63499edc2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_xrtl.f new file mode 100644 index 000000000..54bc26587 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hdl.compile new file mode 100644 index 000000000..c01edb529 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./core_axi_read_out_if_common.compile +incdir: + - . +src: + - src/core_axi_read_out_if_if.sv + - src/core_axi_read_out_if_monitor_bfm.sv + - src/core_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hvl.compile new file mode 100644 index 000000000..52b13e38e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./core_axi_read_out_if_common.compile +incdir: + - . +src: + - core_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.sv new file mode 100644 index 000000000..27da26683 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_read_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import core_axi_read_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/core_axi_read_out_if_macros.svh" + + export core_axi_read_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/core_axi_read_out_if_typedefs.svh" + `include "src/core_axi_read_out_if_transaction.svh" + + `include "src/core_axi_read_out_if_configuration.svh" + `include "src/core_axi_read_out_if_driver.svh" + `include "src/core_axi_read_out_if_monitor.svh" + + `include "src/core_axi_read_out_if_transaction_coverage.svh" + `include "src/core_axi_read_out_if_sequence_base.svh" + `include "src/core_axi_read_out_if_random_sequence.svh" + + `include "src/core_axi_read_out_if_responder_sequence.svh" + `include "src/core_axi_read_out_if2reg_adapter.svh" + + `include "src/core_axi_read_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.vinfo new file mode 100644 index 000000000..353f8e89e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use core_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +core_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.sv new file mode 100644 index 000000000..af073f726 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_read_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/core_axi_read_out_if_typedefs_hdl.svh" + `include "src/core_axi_read_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..da16ef949 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +core_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_sve.F new file mode 100644 index 000000000..847a827c8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if2reg_adapter.svh new file mode 100644 index 000000000..ab579bfdc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the core_axi_read_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( core_axi_read_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "core_axi_read_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : core_axi_read_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_agent.svh new file mode 100644 index 000000000..8a5580622 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(core_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(core_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(core_axi_read_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( core_axi_read_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_configuration.svh new file mode 100644 index 000000000..0873724c5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the core_axi_read_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual core_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual core_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_read_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup core_axi_read_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_CONFIGURATION_STRUCT + core_axi_read_out_if_configuration_s core_axi_read_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a core_axi_read_out_if_configuration_s + // structure. The function returns the handle to the core_axi_read_out_if_configuration_struct. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + core_axi_read_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + core_axi_read_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + core_axi_read_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + core_axi_read_out_if_configuration_cg.set_inst_name($sformatf("core_axi_read_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(core_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver.svh new file mode 100644 index 000000000..fe19e1127 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual core_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( core_axi_read_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in core_axi_read_out_if_macros.svh +//******************************************************************* +// Initiator macro used by core_axi_read_out_if_driver and core_axi_read_out_if_driver_bfm +// to communicate initiator driven data to core_axi_read_out_if_driver_bfm. +`core_axi_read_out_if_INITIATOR_STRUCT + core_axi_read_out_if_initiator_s core_axi_read_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by core_axi_read_out_if_driver and core_axi_read_out_if_driver_bfm +// to communicate Responder driven data to core_axi_read_out_if_driver_bfm. +`core_axi_read_out_if_RESPONDER_STRUCT + core_axi_read_out_if_responder_s core_axi_read_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + core_axi_read_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(core_axi_read_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + core_axi_read_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(core_axi_read_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver_bfm.sv new file mode 100644 index 000000000..4569dc443 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the core_axi_read_out_if signal driving. It is +// accessed by the uvm core_axi_read_out_if driver through a virtual interface +// handle in the core_axi_read_out_if configuration. It drives the singals passed +// in through the port connection named bus of type core_axi_read_out_if_if. +// +// Input signals from the core_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within core_axi_read_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_read_out_if_pkg_hdl::*; +`include "src/core_axi_read_out_if_macros.svh" + +interface core_axi_read_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (core_axi_read_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute core_axi_read_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + core_axi_read_out_if_pkg::core_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in core_axi_read_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from core_axi_read_out_if_driver to this BFM + // **************************************************************************** + `core_axi_read_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by core_axi_read_out_if_driver and core_axi_read_out_if_driver_bfm + // to communicate initiator driven data to core_axi_read_out_if_driver_bfm. + `core_axi_read_out_if_INITIATOR_STRUCT + core_axi_read_out_if_initiator_s initiator_struct; + // Responder macro used by core_axi_read_out_if_driver and core_axi_read_out_if_driver_bfm + // to communicate Responder driven data to core_axi_read_out_if_driver_bfm. + `core_axi_read_out_if_RESPONDER_STRUCT + core_axi_read_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(core_axi_read_out_if_configuration_s core_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input core_axi_read_out_if_initiator_s core_axi_read_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output core_axi_read_out_if_responder_s core_axi_read_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the core_axi_read_out_if_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Members within the core_axi_read_out_if_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + initiator_struct = core_axi_read_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // core_axi_read_out_if_responder_struct.xyz = arready_i; // + // core_axi_read_out_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // core_axi_read_out_if_responder_struct.xyz = rresp_i; // + // core_axi_read_out_if_responder_struct.xyz = rid_i; // + // core_axi_read_out_if_responder_struct.xyz = rlast_i; // + // core_axi_read_out_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // core_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = core_axi_read_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output core_axi_read_out_if_initiator_s core_axi_read_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input core_axi_read_out_if_responder_s core_axi_read_out_if_responder_struct + );// pragma tbx xtf + // Variables within the core_axi_read_out_if_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Variables within the core_axi_read_out_if_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= core_axi_read_out_if_initiator_struct.xyz; // + // rdata_o <= core_axi_read_out_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= core_axi_read_out_if_initiator_struct.xyz; // + // rid_o <= core_axi_read_out_if_initiator_struct.xyz; // + // rlast_o <= core_axi_read_out_if_initiator_struct.xyz; // + // rvalid_o <= core_axi_read_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the core_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the core_axi_read_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_if.sv new file mode 100644 index 000000000..0bdb905ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the core_axi_read_out_if interface signals. +// It is instantiated once per core_axi_read_out_if bus. Bus Functional Models, +// BFM's named core_axi_read_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named core_axi_read_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(core_axi_read_out_if_bus.arready), // Agent input +// .dut_signal_port(core_axi_read_out_if_bus.rdata), // Agent input +// .dut_signal_port(core_axi_read_out_if_bus.rresp), // Agent input +// .dut_signal_port(core_axi_read_out_if_bus.rid), // Agent input +// .dut_signal_port(core_axi_read_out_if_bus.rlast), // Agent input +// .dut_signal_port(core_axi_read_out_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import core_axi_read_out_if_pkg_hdl::*; + +interface core_axi_read_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_macros.svh new file mode 100644 index 000000000..778373aa8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the core_axi_read_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the core_axi_read_out_if_configuration class. +// + `define core_axi_read_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } core_axi_read_out_if_configuration_s; + + `define core_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function core_axi_read_out_if_configuration_s to_struct();\ + core_axi_read_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( core_axi_read_out_if_configuration_struct );\ + endfunction + + `define core_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(core_axi_read_out_if_configuration_s core_axi_read_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = core_axi_read_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the core_axi_read_out_if_transaction class. +// + `define core_axi_read_out_if_MONITOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } core_axi_read_out_if_monitor_s; + + `define core_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function core_axi_read_out_if_monitor_s to_monitor_struct();\ + core_axi_read_out_if_monitor_struct = \ + { \ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( core_axi_read_out_if_monitor_struct);\ + endfunction\ + + `define core_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(core_axi_read_out_if_monitor_s core_axi_read_out_if_monitor_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = core_axi_read_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the core_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_read_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } core_axi_read_out_if_initiator_s; + + `define core_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function core_axi_read_out_if_initiator_s to_initiator_struct();\ + core_axi_read_out_if_initiator_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( core_axi_read_out_if_initiator_struct);\ + endfunction + + `define core_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(core_axi_read_out_if_initiator_s core_axi_read_out_if_initiator_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = core_axi_read_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the core_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_read_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } core_axi_read_out_if_responder_s; + + `define core_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function core_axi_read_out_if_responder_s to_responder_struct();\ + core_axi_read_out_if_responder_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( core_axi_read_out_if_responder_struct);\ + endfunction + + `define core_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(core_axi_read_out_if_responder_s core_axi_read_out_if_responder_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = core_axi_read_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor.svh new file mode 100644 index 000000000..8cd448e91 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives core_axi_read_out_if transactions observed by the +// core_axi_read_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual core_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_read_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`core_axi_read_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the core_axi_read_out_if_monitor_struct. + virtual function void notify_transaction(input core_axi_read_out_if_monitor_s core_axi_read_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(core_axi_read_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor_bfm.sv new file mode 100644 index 000000000..d47c910f6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the core_axi_read_out_if signal monitoring. +// It is accessed by the uvm core_axi_read_out_if monitor through a virtual +// interface handle in the core_axi_read_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type core_axi_read_out_if_if. +// +// Input signals from the core_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the core_axi_read_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_read_out_if_pkg_hdl::*; +`include "src/core_axi_read_out_if_macros.svh" + + +interface core_axi_read_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( core_axi_read_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute core_axi_read_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`core_axi_read_out_if_MONITOR_STRUCT + core_axi_read_out_if_monitor_s core_axi_read_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `core_axi_read_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + core_axi_read_out_if_pkg::core_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( core_axi_read_out_if_monitor_struct ); + + + proxy.notify_transaction( core_axi_read_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(core_axi_read_out_if_configuration_s core_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output core_axi_read_out_if_monitor_s core_axi_read_out_if_monitor_struct); + // + // Available struct members: + // // core_axi_read_out_if_monitor_struct.core_arready + // // core_axi_read_out_if_monitor_struct.core_rdata + // // core_axi_read_out_if_monitor_struct.core_rresp + // // core_axi_read_out_if_monitor_struct.core_rid + // // core_axi_read_out_if_monitor_struct.core_rlast + // // core_axi_read_out_if_monitor_struct.core_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // core_axi_read_out_if_monitor_struct.xyz = arready_i; // + // core_axi_read_out_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // core_axi_read_out_if_monitor_struct.xyz = rresp_i; // + // core_axi_read_out_if_monitor_struct.xyz = rid_i; // + // core_axi_read_out_if_monitor_struct.xyz = rlast_i; // + // core_axi_read_out_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_random_sequence.svh new file mode 100644 index 000000000..51d933c94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the core_axi_read_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a core_axi_read_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_read_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=core_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "core_axi_read_out_if_random_sequence::body()-core_axi_read_out_if_transaction randomization failed") + // Send the transaction to the core_axi_read_out_if_driver_bfm via the sequencer and core_axi_read_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: core_axi_read_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_responder_sequence.svh new file mode 100644 index 000000000..f41646f83 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_read_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "core_axi_read_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=core_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_sequence_base.svh new file mode 100644 index 000000000..9e9fbb58b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_read_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_read_out_if_transaction_req_t; + core_axi_read_out_if_transaction_req_t req; + typedef core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_read_out_if_transaction_rsp_t; + core_axi_read_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = core_axi_read_out_if_transaction_req_t::type_id::create("req"); + rsp = core_axi_read_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction.svh new file mode 100644 index 000000000..7b95d521b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an core_axi_read_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( core_axi_read_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_arready ; + logic [DW-1:0] core_rdata ; + axi_pkg::axi_burst_e core_rresp ; + logic [IW-1:0] core_rid ; + logic core_rlast ; + logic core_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in core_axi_read_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by core_axi_read_out_if_monitor and core_axi_read_out_if_monitor_bfm + // This struct is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_MONITOR_STRUCT + core_axi_read_out_if_monitor_s core_axi_read_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a core_axi_read_out_if_monitor_s + // structure. The function returns the handle to the core_axi_read_out_if_monitor_struct. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by core_axi_read_out_if_driver and core_axi_read_out_if_driver_bfm + // to communicate initiator driven data to core_axi_read_out_if_driver_bfm. + // This struct is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_INITIATOR_STRUCT + core_axi_read_out_if_initiator_s core_axi_read_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a core_axi_read_out_if_initiator_s + // structure. The function returns the handle to the core_axi_read_out_if_initiator_struct. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by core_axi_read_out_if_driver and core_axi_read_out_if_driver_bfm + // to communicate Responder driven data to core_axi_read_out_if_driver_bfm. + // This struct is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_RESPONDER_STRUCT + core_axi_read_out_if_responder_s core_axi_read_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a core_axi_read_out_if_responder_s + // structure. The function returns the handle to the core_axi_read_out_if_responder_struct. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_arready:0x%x core_rdata:0x%x core_rresp:0x%x core_rid:0x%x core_rlast:0x%x core_rvalid:0x%x ",core_arready,core_rdata,core_rresp,core_rid,core_rlast,core_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_arready == RHS.core_arready) + &&(this.core_rdata == RHS.core_rdata) + &&(this.core_rresp == RHS.core_rresp) + &&(this.core_rid == RHS.core_rid) + &&(this.core_rlast == RHS.core_rlast) + &&(this.core_rvalid == RHS.core_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_arready = RHS.core_arready; + this.core_rdata = RHS.core_rdata; + this.core_rresp = RHS.core_rresp; + this.core_rid = RHS.core_rid; + this.core_rlast = RHS.core_rlast; + this.core_rvalid = RHS.core_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"core_axi_read_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_arready,"core_arready"); + $add_attribute(transaction_view_h,core_rdata,"core_rdata"); + $add_attribute(transaction_view_h,core_rresp,"core_rresp"); + $add_attribute(transaction_view_h,core_rid,"core_rid"); + $add_attribute(transaction_view_h,core_rlast,"core_rlast"); + $add_attribute(transaction_view_h,core_rvalid,"core_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction_coverage.svh new file mode 100644 index 000000000..938c15317 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records core_axi_read_out_if transaction information using +// a covergroup named core_axi_read_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_read_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup core_axi_read_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_arready: coverpoint coverage_trans.core_arready; + core_rdata: coverpoint coverage_trans.core_rdata; + core_rresp: coverpoint coverage_trans.core_rresp; + core_rid: coverpoint coverage_trans.core_rid; + core_rlast: coverpoint coverage_trans.core_rlast; + core_rvalid: coverpoint coverage_trans.core_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + core_axi_read_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + core_axi_read_out_if_transaction_cg.set_inst_name($sformatf("core_axi_read_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + core_axi_read_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/yaml/core_axi_read_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/yaml/core_axi_read_out_if_interface.yaml new file mode 100644 index 000000000..4624cc767 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_read_out_if_pkg/yaml/core_axi_read_out_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + core_axi_read_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/.project new file mode 100644 index 000000000..c317ffc88 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/.project @@ -0,0 +1,30 @@ + + + core_axi_write_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/.svproject new file mode 100644 index 000000000..c0a4e460d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/Makefile new file mode 100644 index 000000000..7e6ea601e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/Makefile @@ -0,0 +1,66 @@ +# core_axi_write_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +core_axi_write_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f + +core_axi_write_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f + +core_axi_write_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f + +COMP_core_axi_write_if_PKG_TGT_0 = q_comp_core_axi_write_if_pkg +COMP_core_axi_write_if_PKG_TGT_1 = v_comp_core_axi_write_if_pkg +COMP_core_axi_write_if_PKG_TGT = $(COMP_core_axi_write_if_PKG_TGT_$(USE_VELOCE)) + +comp_core_axi_write_if_pkg: $(COMP_core_axi_write_if_PKG_TGT) + +q_comp_core_axi_write_if_pkg: + $(HDL_COMP_CMD) $(core_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_write_if_PKG) + $(HDL_COMP_CMD) $(core_axi_write_if_PKG_XRTL) + +v_comp_core_axi_write_if_pkg: + $(HVL_COMP_CMD) $(core_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_write_if_PKG) + $(VELANALYZE_CMD) $(core_axi_write_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(core_axi_write_if_PKG) + $(HDL_COMP_CMD) $(core_axi_write_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export core_axi_write_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/dpi + +C_FILE_COMPILE_LIST_core_axi_write_if_pkg = \ + +O_FILE_COMPILE_LIST_core_axi_write_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_core_axi_write_if_pkg:.c=.o)) + +GCC_COMP_ARGS_core_axi_write_if_pkg += -I$(core_axi_write_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_core_axi_write_if_pkg += $(core_axi_write_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_core_axi_write_if_pkg += \ + \ + -o .so + +comp_core_axi_write_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_core_axi_write_if_pkg) $(C_FILE_COMPILE_LIST_core_axi_write_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_core_axi_write_if_pkg) $(O_FILE_COMPILE_LIST_core_axi_write_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/compile.do new file mode 100644 index 000000000..d57b919fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of core_axi_write_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if.compile new file mode 100644 index 000000000..d5945e5ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if.compile @@ -0,0 +1,3 @@ +needs: + - core_axi_write_if_hvl.compile + - core_axi_write_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_bfm.vinfo new file mode 100644 index 000000000..ab7c2fca6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use core_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/core_axi_write_if_if.sv +src/core_axi_write_if_driver_bfm.sv +src/core_axi_write_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_common.compile new file mode 100644 index 000000000..4922a4200 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f new file mode 100644 index 000000000..b14f9380d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f new file mode 100644 index 000000000..a56447389 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f new file mode 100644 index 000000000..d93277776 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hdl.compile new file mode 100644 index 000000000..0328e5087 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./core_axi_write_if_common.compile +incdir: + - . +src: + - src/core_axi_write_if_if.sv + - src/core_axi_write_if_monitor_bfm.sv + - src/core_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hvl.compile new file mode 100644 index 000000000..e19dd38c2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./core_axi_write_if_common.compile +incdir: + - . +src: + - core_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.sv new file mode 100644 index 000000000..ee9c7cec8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_write_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import core_axi_write_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/core_axi_write_if_macros.svh" + + export core_axi_write_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/core_axi_write_if_typedefs.svh" + `include "src/core_axi_write_if_transaction.svh" + + `include "src/core_axi_write_if_configuration.svh" + `include "src/core_axi_write_if_driver.svh" + `include "src/core_axi_write_if_monitor.svh" + + `include "src/core_axi_write_if_transaction_coverage.svh" + `include "src/core_axi_write_if_sequence_base.svh" + `include "src/core_axi_write_if_random_sequence.svh" + + `include "src/core_axi_write_if_responder_sequence.svh" + `include "src/core_axi_write_if2reg_adapter.svh" + + `include "src/core_axi_write_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.vinfo new file mode 100644 index 000000000..d8e9ffc3f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use core_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +core_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.sv new file mode 100644 index 000000000..2d56fd18c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_write_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/core_axi_write_if_typedefs_hdl.svh" + `include "src/core_axi_write_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.vinfo new file mode 100644 index 000000000..5360aa61b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_sve.F new file mode 100644 index 000000000..1c96c4aff --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if2reg_adapter.svh new file mode 100644 index 000000000..902b4b13e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the core_axi_write_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( core_axi_write_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "core_axi_write_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : core_axi_write_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_agent.svh new file mode 100644 index 000000000..38ae017f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(core_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(core_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(core_axi_write_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( core_axi_write_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_configuration.svh new file mode 100644 index 000000000..2178c5d3f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the core_axi_write_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual core_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual core_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_write_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup core_axi_write_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in core_axi_write_if_macros.svh + `core_axi_write_if_CONFIGURATION_STRUCT + core_axi_write_if_configuration_s core_axi_write_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a core_axi_write_if_configuration_s + // structure. The function returns the handle to the core_axi_write_if_configuration_struct. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + core_axi_write_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + core_axi_write_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + core_axi_write_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + core_axi_write_if_configuration_cg.set_inst_name($sformatf("core_axi_write_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver.svh new file mode 100644 index 000000000..61afbc09d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual core_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( core_axi_write_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in core_axi_write_if_macros.svh +//******************************************************************* +// Initiator macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm +// to communicate initiator driven data to core_axi_write_if_driver_bfm. +`core_axi_write_if_INITIATOR_STRUCT + core_axi_write_if_initiator_s core_axi_write_if_initiator_struct; +//******************************************************************* +// Responder macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm +// to communicate Responder driven data to core_axi_write_if_driver_bfm. +`core_axi_write_if_RESPONDER_STRUCT + core_axi_write_if_responder_s core_axi_write_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + core_axi_write_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(core_axi_write_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + core_axi_write_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(core_axi_write_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver_bfm.sv new file mode 100644 index 000000000..2e5f63dbd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the core_axi_write_if signal driving. It is +// accessed by the uvm core_axi_write_if driver through a virtual interface +// handle in the core_axi_write_if configuration. It drives the singals passed +// in through the port connection named bus of type core_axi_write_if_if. +// +// Input signals from the core_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within core_axi_write_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_write_if_pkg_hdl::*; +`include "src/core_axi_write_if_macros.svh" + +interface core_axi_write_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (core_axi_write_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute core_axi_write_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + core_axi_write_if_pkg::core_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in core_axi_write_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from core_axi_write_if_driver to this BFM + // **************************************************************************** + `core_axi_write_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm + // to communicate initiator driven data to core_axi_write_if_driver_bfm. + `core_axi_write_if_INITIATOR_STRUCT + core_axi_write_if_initiator_s initiator_struct; + // Responder macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm + // to communicate Responder driven data to core_axi_write_if_driver_bfm. + `core_axi_write_if_RESPONDER_STRUCT + core_axi_write_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(core_axi_write_if_configuration_s core_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input core_axi_write_if_initiator_s core_axi_write_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output core_axi_write_if_responder_s core_axi_write_if_responder_struct + );// pragma tbx xtf + // + // Members within the core_axi_write_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Members within the core_axi_write_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + initiator_struct = core_axi_write_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // core_axi_write_if_responder_struct.xyz = awready_i; // + // core_axi_write_if_responder_struct.xyz = wready_i; // + // core_axi_write_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // core_axi_write_if_responder_struct.xyz = bid_i; // + // core_axi_write_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // core_axi_write_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = core_axi_write_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output core_axi_write_if_initiator_s core_axi_write_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input core_axi_write_if_responder_s core_axi_write_if_responder_struct + );// pragma tbx xtf + // Variables within the core_axi_write_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Variables within the core_axi_write_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= core_axi_write_if_initiator_struct.xyz; // + // wready_o <= core_axi_write_if_initiator_struct.xyz; // + // bresp_o <= core_axi_write_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= core_axi_write_if_initiator_struct.xyz; // + // bvalid_o <= core_axi_write_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the core_axi_write_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the core_axi_write_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_if.sv new file mode 100644 index 000000000..86ab20f72 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the core_axi_write_if interface signals. +// It is instantiated once per core_axi_write_if bus. Bus Functional Models, +// BFM's named core_axi_write_if_driver_bfm, are used to drive signals on the bus. +// BFM's named core_axi_write_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(core_axi_write_if_bus.awready), // Agent input +// .dut_signal_port(core_axi_write_if_bus.wready), // Agent input +// .dut_signal_port(core_axi_write_if_bus.bresp), // Agent input +// .dut_signal_port(core_axi_write_if_bus.bid), // Agent input +// .dut_signal_port(core_axi_write_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import core_axi_write_if_pkg_hdl::*; + +interface core_axi_write_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_macros.svh new file mode 100644 index 000000000..8c8873557 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the core_axi_write_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the core_axi_write_if_configuration class. +// + `define core_axi_write_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } core_axi_write_if_configuration_s; + + `define core_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function core_axi_write_if_configuration_s to_struct();\ + core_axi_write_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( core_axi_write_if_configuration_struct );\ + endfunction + + `define core_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(core_axi_write_if_configuration_s core_axi_write_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = core_axi_write_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the core_axi_write_if_transaction class. +// + `define core_axi_write_if_MONITOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } core_axi_write_if_monitor_s; + + `define core_axi_write_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function core_axi_write_if_monitor_s to_monitor_struct();\ + core_axi_write_if_monitor_struct = \ + { \ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( core_axi_write_if_monitor_struct);\ + endfunction\ + + `define core_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(core_axi_write_if_monitor_s core_axi_write_if_monitor_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = core_axi_write_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the core_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_write_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } core_axi_write_if_initiator_s; + + `define core_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function core_axi_write_if_initiator_s to_initiator_struct();\ + core_axi_write_if_initiator_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( core_axi_write_if_initiator_struct);\ + endfunction + + `define core_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(core_axi_write_if_initiator_s core_axi_write_if_initiator_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = core_axi_write_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the core_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_write_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } core_axi_write_if_responder_s; + + `define core_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function core_axi_write_if_responder_s to_responder_struct();\ + core_axi_write_if_responder_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( core_axi_write_if_responder_struct);\ + endfunction + + `define core_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(core_axi_write_if_responder_s core_axi_write_if_responder_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = core_axi_write_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor.svh new file mode 100644 index 000000000..52be1a9ca --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives core_axi_write_if transactions observed by the +// core_axi_write_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual core_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_write_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`core_axi_write_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the core_axi_write_if_monitor_struct. + virtual function void notify_transaction(input core_axi_write_if_monitor_s core_axi_write_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(core_axi_write_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor_bfm.sv new file mode 100644 index 000000000..9661876ce --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the core_axi_write_if signal monitoring. +// It is accessed by the uvm core_axi_write_if monitor through a virtual +// interface handle in the core_axi_write_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type core_axi_write_if_if. +// +// Input signals from the core_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the core_axi_write_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_write_if_pkg_hdl::*; +`include "src/core_axi_write_if_macros.svh" + + +interface core_axi_write_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( core_axi_write_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute core_axi_write_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`core_axi_write_if_MONITOR_STRUCT + core_axi_write_if_monitor_s core_axi_write_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `core_axi_write_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + core_axi_write_if_pkg::core_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( core_axi_write_if_monitor_struct ); + + + proxy.notify_transaction( core_axi_write_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(core_axi_write_if_configuration_s core_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output core_axi_write_if_monitor_s core_axi_write_if_monitor_struct); + // + // Available struct members: + // // core_axi_write_if_monitor_struct.core_awready + // // core_axi_write_if_monitor_struct.core_wready + // // core_axi_write_if_monitor_struct.core_bresp + // // core_axi_write_if_monitor_struct.core_bid + // // core_axi_write_if_monitor_struct.core_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // core_axi_write_if_monitor_struct.xyz = awready_i; // + // core_axi_write_if_monitor_struct.xyz = wready_i; // + // core_axi_write_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // core_axi_write_if_monitor_struct.xyz = bid_i; // + // core_axi_write_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_random_sequence.svh new file mode 100644 index 000000000..9722594f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the core_axi_write_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a core_axi_write_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_write_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "core_axi_write_if_random_sequence::body()-core_axi_write_if_transaction randomization failed") + // Send the transaction to the core_axi_write_if_driver_bfm via the sequencer and core_axi_write_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: core_axi_write_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_responder_sequence.svh new file mode 100644 index 000000000..4ee61b3ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_write_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "core_axi_write_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_sequence_base.svh new file mode 100644 index 000000000..339755d18 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_write_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_write_if_transaction_req_t; + core_axi_write_if_transaction_req_t req; + typedef core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_write_if_transaction_rsp_t; + core_axi_write_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = core_axi_write_if_transaction_req_t::type_id::create("req"); + rsp = core_axi_write_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction.svh new file mode 100644 index 000000000..78c5353a7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an core_axi_write_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( core_axi_write_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_awready ; + logic core_wready ; + axi_pkg::axi_burst_e core_bresp ; + logic core_bid ; + logic core_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in core_axi_write_if_macros.svh + + //******************************************************************* + // Monitor macro used by core_axi_write_if_monitor and core_axi_write_if_monitor_bfm + // This struct is defined in core_axi_write_if_macros.svh + `core_axi_write_if_MONITOR_STRUCT + core_axi_write_if_monitor_s core_axi_write_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a core_axi_write_if_monitor_s + // structure. The function returns the handle to the core_axi_write_if_monitor_struct. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm + // to communicate initiator driven data to core_axi_write_if_driver_bfm. + // This struct is defined in core_axi_write_if_macros.svh + `core_axi_write_if_INITIATOR_STRUCT + core_axi_write_if_initiator_s core_axi_write_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a core_axi_write_if_initiator_s + // structure. The function returns the handle to the core_axi_write_if_initiator_struct. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm + // to communicate Responder driven data to core_axi_write_if_driver_bfm. + // This struct is defined in core_axi_write_if_macros.svh + `core_axi_write_if_RESPONDER_STRUCT + core_axi_write_if_responder_s core_axi_write_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a core_axi_write_if_responder_s + // structure. The function returns the handle to the core_axi_write_if_responder_struct. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awready:0x%x core_wready:0x%x core_bresp:0x%x core_bid:0x%x core_bvalid:0x%x ",core_awready,core_wready,core_bresp,core_bid,core_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_awready == RHS.core_awready) + &&(this.core_wready == RHS.core_wready) + &&(this.core_bresp == RHS.core_bresp) + &&(this.core_bid == RHS.core_bid) + &&(this.core_bvalid == RHS.core_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awready = RHS.core_awready; + this.core_wready = RHS.core_wready; + this.core_bresp = RHS.core_bresp; + this.core_bid = RHS.core_bid; + this.core_bvalid = RHS.core_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"core_axi_write_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awready,"core_awready"); + $add_attribute(transaction_view_h,core_wready,"core_wready"); + $add_attribute(transaction_view_h,core_bresp,"core_bresp"); + $add_attribute(transaction_view_h,core_bid,"core_bid"); + $add_attribute(transaction_view_h,core_bvalid,"core_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction_coverage.svh new file mode 100644 index 000000000..aa3fe1d6e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records core_axi_write_if transaction information using +// a covergroup named core_axi_write_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_write_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup core_axi_write_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awready: coverpoint coverage_trans.core_awready; + core_wready: coverpoint coverage_trans.core_wready; + core_bresp: coverpoint coverage_trans.core_bresp; + core_bid: coverpoint coverage_trans.core_bid; + core_bvalid: coverpoint coverage_trans.core_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + core_axi_write_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + core_axi_write_if_transaction_cg.set_inst_name($sformatf("core_axi_write_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + core_axi_write_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/yaml/core_axi_write_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/yaml/core_axi_write_if_interface.yaml new file mode 100644 index 000000000..049bcebe2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_if_pkg/yaml/core_axi_write_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + core_axi_write_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/.project new file mode 100644 index 000000000..938b34c4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + core_axi_write_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/.svproject new file mode 100644 index 000000000..7a0d950c7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/Makefile new file mode 100644 index 000000000..732c0fa5f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# core_axi_write_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +core_axi_write_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hvl.f + +core_axi_write_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hdl.f + +core_axi_write_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_xrtl.f + +COMP_core_axi_write_out_if_PKG_TGT_0 = q_comp_core_axi_write_out_if_pkg +COMP_core_axi_write_out_if_PKG_TGT_1 = v_comp_core_axi_write_out_if_pkg +COMP_core_axi_write_out_if_PKG_TGT = $(COMP_core_axi_write_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_core_axi_write_out_if_pkg: $(COMP_core_axi_write_out_if_PKG_TGT) + +q_comp_core_axi_write_out_if_pkg: + $(HDL_COMP_CMD) $(core_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(core_axi_write_out_if_PKG_XRTL) + +v_comp_core_axi_write_out_if_pkg: + $(HVL_COMP_CMD) $(core_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_write_out_if_PKG) + $(VELANALYZE_CMD) $(core_axi_write_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(core_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(core_axi_write_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export core_axi_write_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_core_axi_write_out_if_pkg = \ + +O_FILE_COMPILE_LIST_core_axi_write_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_core_axi_write_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_core_axi_write_out_if_pkg += -I$(core_axi_write_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_core_axi_write_out_if_pkg += $(core_axi_write_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_core_axi_write_out_if_pkg += \ + \ + -o .so + +comp_core_axi_write_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_core_axi_write_out_if_pkg) $(C_FILE_COMPILE_LIST_core_axi_write_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_core_axi_write_out_if_pkg) $(O_FILE_COMPILE_LIST_core_axi_write_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/compile.do new file mode 100644 index 000000000..54d017934 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of core_axi_write_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if.compile new file mode 100644 index 000000000..40e8aee73 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if.compile @@ -0,0 +1,3 @@ +needs: + - core_axi_write_out_if_hvl.compile + - core_axi_write_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_bfm.vinfo new file mode 100644 index 000000000..ccc4ac319 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use core_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/core_axi_write_out_if_if.sv +src/core_axi_write_out_if_driver_bfm.sv +src/core_axi_write_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_common.compile new file mode 100644 index 000000000..e684a6c49 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hdl.f new file mode 100644 index 000000000..3f8dc2a40 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hvl.f new file mode 100644 index 000000000..73fb6826d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_xrtl.f new file mode 100644 index 000000000..b5cb783d0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hdl.compile new file mode 100644 index 000000000..ddedadb4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./core_axi_write_out_if_common.compile +incdir: + - . +src: + - src/core_axi_write_out_if_if.sv + - src/core_axi_write_out_if_monitor_bfm.sv + - src/core_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hvl.compile new file mode 100644 index 000000000..c5d3d08a4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./core_axi_write_out_if_common.compile +incdir: + - . +src: + - core_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.sv new file mode 100644 index 000000000..483e82f13 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_write_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import core_axi_write_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/core_axi_write_out_if_macros.svh" + + export core_axi_write_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/core_axi_write_out_if_typedefs.svh" + `include "src/core_axi_write_out_if_transaction.svh" + + `include "src/core_axi_write_out_if_configuration.svh" + `include "src/core_axi_write_out_if_driver.svh" + `include "src/core_axi_write_out_if_monitor.svh" + + `include "src/core_axi_write_out_if_transaction_coverage.svh" + `include "src/core_axi_write_out_if_sequence_base.svh" + `include "src/core_axi_write_out_if_random_sequence.svh" + + `include "src/core_axi_write_out_if_responder_sequence.svh" + `include "src/core_axi_write_out_if2reg_adapter.svh" + + `include "src/core_axi_write_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.vinfo new file mode 100644 index 000000000..b15563968 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use core_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +core_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.sv new file mode 100644 index 000000000..c33ed1c80 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_write_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/core_axi_write_out_if_typedefs_hdl.svh" + `include "src/core_axi_write_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..df5363cef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_sve.F new file mode 100644 index 000000000..47df0133c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if2reg_adapter.svh new file mode 100644 index 000000000..fefb54e87 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the core_axi_write_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( core_axi_write_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "core_axi_write_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : core_axi_write_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_agent.svh new file mode 100644 index 000000000..178e2aa3d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(core_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(core_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(core_axi_write_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( core_axi_write_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_configuration.svh new file mode 100644 index 000000000..d5fa5f073 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the core_axi_write_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual core_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual core_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_write_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup core_axi_write_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_CONFIGURATION_STRUCT + core_axi_write_out_if_configuration_s core_axi_write_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a core_axi_write_out_if_configuration_s + // structure. The function returns the handle to the core_axi_write_out_if_configuration_struct. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + core_axi_write_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + core_axi_write_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + core_axi_write_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + core_axi_write_out_if_configuration_cg.set_inst_name($sformatf("core_axi_write_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver.svh new file mode 100644 index 000000000..0c4673f28 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual core_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( core_axi_write_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in core_axi_write_out_if_macros.svh +//******************************************************************* +// Initiator macro used by core_axi_write_out_if_driver and core_axi_write_out_if_driver_bfm +// to communicate initiator driven data to core_axi_write_out_if_driver_bfm. +`core_axi_write_out_if_INITIATOR_STRUCT + core_axi_write_out_if_initiator_s core_axi_write_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by core_axi_write_out_if_driver and core_axi_write_out_if_driver_bfm +// to communicate Responder driven data to core_axi_write_out_if_driver_bfm. +`core_axi_write_out_if_RESPONDER_STRUCT + core_axi_write_out_if_responder_s core_axi_write_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + core_axi_write_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(core_axi_write_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + core_axi_write_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(core_axi_write_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver_bfm.sv new file mode 100644 index 000000000..2b871cb7e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the core_axi_write_out_if signal driving. It is +// accessed by the uvm core_axi_write_out_if driver through a virtual interface +// handle in the core_axi_write_out_if configuration. It drives the singals passed +// in through the port connection named bus of type core_axi_write_out_if_if. +// +// Input signals from the core_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within core_axi_write_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_write_out_if_pkg_hdl::*; +`include "src/core_axi_write_out_if_macros.svh" + +interface core_axi_write_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (core_axi_write_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute core_axi_write_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + core_axi_write_out_if_pkg::core_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in core_axi_write_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from core_axi_write_out_if_driver to this BFM + // **************************************************************************** + `core_axi_write_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by core_axi_write_out_if_driver and core_axi_write_out_if_driver_bfm + // to communicate initiator driven data to core_axi_write_out_if_driver_bfm. + `core_axi_write_out_if_INITIATOR_STRUCT + core_axi_write_out_if_initiator_s initiator_struct; + // Responder macro used by core_axi_write_out_if_driver and core_axi_write_out_if_driver_bfm + // to communicate Responder driven data to core_axi_write_out_if_driver_bfm. + `core_axi_write_out_if_RESPONDER_STRUCT + core_axi_write_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(core_axi_write_out_if_configuration_s core_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input core_axi_write_out_if_initiator_s core_axi_write_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output core_axi_write_out_if_responder_s core_axi_write_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the core_axi_write_out_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Members within the core_axi_write_out_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + initiator_struct = core_axi_write_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // core_axi_write_out_if_responder_struct.xyz = awready_i; // + // core_axi_write_out_if_responder_struct.xyz = wready_i; // + // core_axi_write_out_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // core_axi_write_out_if_responder_struct.xyz = bid_i; // + // core_axi_write_out_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // core_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = core_axi_write_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output core_axi_write_out_if_initiator_s core_axi_write_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input core_axi_write_out_if_responder_s core_axi_write_out_if_responder_struct + );// pragma tbx xtf + // Variables within the core_axi_write_out_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Variables within the core_axi_write_out_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= core_axi_write_out_if_initiator_struct.xyz; // + // wready_o <= core_axi_write_out_if_initiator_struct.xyz; // + // bresp_o <= core_axi_write_out_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= core_axi_write_out_if_initiator_struct.xyz; // + // bvalid_o <= core_axi_write_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the core_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the core_axi_write_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_if.sv new file mode 100644 index 000000000..ae3e65b7e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the core_axi_write_out_if interface signals. +// It is instantiated once per core_axi_write_out_if bus. Bus Functional Models, +// BFM's named core_axi_write_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named core_axi_write_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(core_axi_write_out_if_bus.awready), // Agent input +// .dut_signal_port(core_axi_write_out_if_bus.wready), // Agent input +// .dut_signal_port(core_axi_write_out_if_bus.bresp), // Agent input +// .dut_signal_port(core_axi_write_out_if_bus.bid), // Agent input +// .dut_signal_port(core_axi_write_out_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import core_axi_write_out_if_pkg_hdl::*; + +interface core_axi_write_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_macros.svh new file mode 100644 index 000000000..87d43196c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the core_axi_write_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the core_axi_write_out_if_configuration class. +// + `define core_axi_write_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } core_axi_write_out_if_configuration_s; + + `define core_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function core_axi_write_out_if_configuration_s to_struct();\ + core_axi_write_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( core_axi_write_out_if_configuration_struct );\ + endfunction + + `define core_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(core_axi_write_out_if_configuration_s core_axi_write_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = core_axi_write_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the core_axi_write_out_if_transaction class. +// + `define core_axi_write_out_if_MONITOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } core_axi_write_out_if_monitor_s; + + `define core_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function core_axi_write_out_if_monitor_s to_monitor_struct();\ + core_axi_write_out_if_monitor_struct = \ + { \ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( core_axi_write_out_if_monitor_struct);\ + endfunction\ + + `define core_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(core_axi_write_out_if_monitor_s core_axi_write_out_if_monitor_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = core_axi_write_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the core_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_write_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } core_axi_write_out_if_initiator_s; + + `define core_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function core_axi_write_out_if_initiator_s to_initiator_struct();\ + core_axi_write_out_if_initiator_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( core_axi_write_out_if_initiator_struct);\ + endfunction + + `define core_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(core_axi_write_out_if_initiator_s core_axi_write_out_if_initiator_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = core_axi_write_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the core_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_write_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } core_axi_write_out_if_responder_s; + + `define core_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function core_axi_write_out_if_responder_s to_responder_struct();\ + core_axi_write_out_if_responder_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( core_axi_write_out_if_responder_struct);\ + endfunction + + `define core_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(core_axi_write_out_if_responder_s core_axi_write_out_if_responder_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = core_axi_write_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor.svh new file mode 100644 index 000000000..7371c7122 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives core_axi_write_out_if transactions observed by the +// core_axi_write_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual core_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_write_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`core_axi_write_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the core_axi_write_out_if_monitor_struct. + virtual function void notify_transaction(input core_axi_write_out_if_monitor_s core_axi_write_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(core_axi_write_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor_bfm.sv new file mode 100644 index 000000000..870cb1641 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the core_axi_write_out_if signal monitoring. +// It is accessed by the uvm core_axi_write_out_if monitor through a virtual +// interface handle in the core_axi_write_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type core_axi_write_out_if_if. +// +// Input signals from the core_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the core_axi_write_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_write_out_if_pkg_hdl::*; +`include "src/core_axi_write_out_if_macros.svh" + + +interface core_axi_write_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( core_axi_write_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute core_axi_write_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`core_axi_write_out_if_MONITOR_STRUCT + core_axi_write_out_if_monitor_s core_axi_write_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `core_axi_write_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + core_axi_write_out_if_pkg::core_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( core_axi_write_out_if_monitor_struct ); + + + proxy.notify_transaction( core_axi_write_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(core_axi_write_out_if_configuration_s core_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output core_axi_write_out_if_monitor_s core_axi_write_out_if_monitor_struct); + // + // Available struct members: + // // core_axi_write_out_if_monitor_struct.core_awready + // // core_axi_write_out_if_monitor_struct.core_wready + // // core_axi_write_out_if_monitor_struct.core_bresp + // // core_axi_write_out_if_monitor_struct.core_bid + // // core_axi_write_out_if_monitor_struct.core_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // core_axi_write_out_if_monitor_struct.xyz = awready_i; // + // core_axi_write_out_if_monitor_struct.xyz = wready_i; // + // core_axi_write_out_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // core_axi_write_out_if_monitor_struct.xyz = bid_i; // + // core_axi_write_out_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_random_sequence.svh new file mode 100644 index 000000000..7780e6dd1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the core_axi_write_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a core_axi_write_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_write_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "core_axi_write_out_if_random_sequence::body()-core_axi_write_out_if_transaction randomization failed") + // Send the transaction to the core_axi_write_out_if_driver_bfm via the sequencer and core_axi_write_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: core_axi_write_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_responder_sequence.svh new file mode 100644 index 000000000..49afe1128 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_write_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "core_axi_write_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_sequence_base.svh new file mode 100644 index 000000000..d76fe29bd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_write_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_write_out_if_transaction_req_t; + core_axi_write_out_if_transaction_req_t req; + typedef core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_write_out_if_transaction_rsp_t; + core_axi_write_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = core_axi_write_out_if_transaction_req_t::type_id::create("req"); + rsp = core_axi_write_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction.svh new file mode 100644 index 000000000..c895977d8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an core_axi_write_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( core_axi_write_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_awready ; + logic core_wready ; + axi_pkg::axi_burst_e core_bresp ; + logic core_bid ; + logic core_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in core_axi_write_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by core_axi_write_out_if_monitor and core_axi_write_out_if_monitor_bfm + // This struct is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_MONITOR_STRUCT + core_axi_write_out_if_monitor_s core_axi_write_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a core_axi_write_out_if_monitor_s + // structure. The function returns the handle to the core_axi_write_out_if_monitor_struct. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by core_axi_write_out_if_driver and core_axi_write_out_if_driver_bfm + // to communicate initiator driven data to core_axi_write_out_if_driver_bfm. + // This struct is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_INITIATOR_STRUCT + core_axi_write_out_if_initiator_s core_axi_write_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a core_axi_write_out_if_initiator_s + // structure. The function returns the handle to the core_axi_write_out_if_initiator_struct. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by core_axi_write_out_if_driver and core_axi_write_out_if_driver_bfm + // to communicate Responder driven data to core_axi_write_out_if_driver_bfm. + // This struct is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_RESPONDER_STRUCT + core_axi_write_out_if_responder_s core_axi_write_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a core_axi_write_out_if_responder_s + // structure. The function returns the handle to the core_axi_write_out_if_responder_struct. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awready:0x%x core_wready:0x%x core_bresp:0x%x core_bid:0x%x core_bvalid:0x%x ",core_awready,core_wready,core_bresp,core_bid,core_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_awready == RHS.core_awready) + &&(this.core_wready == RHS.core_wready) + &&(this.core_bresp == RHS.core_bresp) + &&(this.core_bid == RHS.core_bid) + &&(this.core_bvalid == RHS.core_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awready = RHS.core_awready; + this.core_wready = RHS.core_wready; + this.core_bresp = RHS.core_bresp; + this.core_bid = RHS.core_bid; + this.core_bvalid = RHS.core_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"core_axi_write_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awready,"core_awready"); + $add_attribute(transaction_view_h,core_wready,"core_wready"); + $add_attribute(transaction_view_h,core_bresp,"core_bresp"); + $add_attribute(transaction_view_h,core_bid,"core_bid"); + $add_attribute(transaction_view_h,core_bvalid,"core_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction_coverage.svh new file mode 100644 index 000000000..c2318af97 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records core_axi_write_out_if transaction information using +// a covergroup named core_axi_write_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_write_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup core_axi_write_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awready: coverpoint coverage_trans.core_awready; + core_wready: coverpoint coverage_trans.core_wready; + core_bresp: coverpoint coverage_trans.core_bresp; + core_bid: coverpoint coverage_trans.core_bid; + core_bvalid: coverpoint coverage_trans.core_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + core_axi_write_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + core_axi_write_out_if_transaction_cg.set_inst_name($sformatf("core_axi_write_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + core_axi_write_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/yaml/core_axi_write_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/yaml/core_axi_write_out_if_interface.yaml new file mode 100644 index 000000000..bb9a51431 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/core_axi_write_out_if_pkg/yaml/core_axi_write_out_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + core_axi_write_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.project new file mode 100644 index 000000000..f25d7a6d4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_core_core_axi_write_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.svproject new file mode 100644 index 000000000..737757535 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/Makefile new file mode 100644 index 000000000..3f1313baf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_core_core_axi_write_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_core_core_axi_write_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hvl.f + +fuse_core_core_axi_write_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hdl.f + +fuse_core_core_axi_write_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_xrtl.f + +COMP_fuse_core_core_axi_write_out_if_PKG_TGT_0 = q_comp_fuse_core_core_axi_write_out_if_pkg +COMP_fuse_core_core_axi_write_out_if_PKG_TGT_1 = v_comp_fuse_core_core_axi_write_out_if_pkg +COMP_fuse_core_core_axi_write_out_if_PKG_TGT = $(COMP_fuse_core_core_axi_write_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_core_core_axi_write_out_if_pkg: $(COMP_fuse_core_core_axi_write_out_if_PKG_TGT) + +q_comp_fuse_core_core_axi_write_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_core_core_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_core_core_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_core_core_axi_write_out_if_PKG_XRTL) + +v_comp_fuse_core_core_axi_write_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_core_core_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_core_core_axi_write_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_core_core_axi_write_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_core_core_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_core_core_axi_write_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_core_core_axi_write_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_core_core_axi_write_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_core_core_axi_write_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_core_core_axi_write_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_core_core_axi_write_out_if_pkg += -I$(fuse_core_core_axi_write_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_core_core_axi_write_out_if_pkg += $(fuse_core_core_axi_write_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_core_core_axi_write_out_if_pkg += \ + \ + -o .so + +comp_fuse_core_core_axi_write_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_core_core_axi_write_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_core_core_axi_write_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_core_core_axi_write_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_core_core_axi_write_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/compile.do new file mode 100644 index 000000000..b8f65efb7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_core_core_axi_write_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if.compile new file mode 100644 index 000000000..35966add7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_core_core_axi_write_out_if_hvl.compile + - fuse_core_core_axi_write_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_bfm.vinfo new file mode 100644 index 000000000..9a6fb73a0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_core_core_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_core_core_axi_write_out_if_if.sv +src/fuse_core_core_axi_write_out_if_driver_bfm.sv +src/fuse_core_core_axi_write_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_common.compile new file mode 100644 index 000000000..029c5cda8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_core_core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hdl.f new file mode 100644 index 000000000..c7e54dfd4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hvl.f new file mode 100644 index 000000000..85b4f73d1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_xrtl.f new file mode 100644 index 000000000..759299056 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hdl.compile new file mode 100644 index 000000000..8c8200827 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_core_core_axi_write_out_if_common.compile +incdir: + - . +src: + - src/fuse_core_core_axi_write_out_if_if.sv + - src/fuse_core_core_axi_write_out_if_monitor_bfm.sv + - src/fuse_core_core_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hvl.compile new file mode 100644 index 000000000..91c251b33 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_core_core_axi_write_out_if_common.compile +incdir: + - . +src: + - fuse_core_core_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.sv new file mode 100644 index 000000000..67a3e3ba6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_core_core_axi_write_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_core_core_axi_write_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_core_core_axi_write_out_if_macros.svh" + + export fuse_core_core_axi_write_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_core_core_axi_write_out_if_typedefs.svh" + `include "src/fuse_core_core_axi_write_out_if_transaction.svh" + + `include "src/fuse_core_core_axi_write_out_if_configuration.svh" + `include "src/fuse_core_core_axi_write_out_if_driver.svh" + `include "src/fuse_core_core_axi_write_out_if_monitor.svh" + + `include "src/fuse_core_core_axi_write_out_if_transaction_coverage.svh" + `include "src/fuse_core_core_axi_write_out_if_sequence_base.svh" + `include "src/fuse_core_core_axi_write_out_if_random_sequence.svh" + + `include "src/fuse_core_core_axi_write_out_if_responder_sequence.svh" + `include "src/fuse_core_core_axi_write_out_if2reg_adapter.svh" + + `include "src/fuse_core_core_axi_write_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.vinfo new file mode 100644 index 000000000..c61f97535 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_core_core_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_core_core_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.sv new file mode 100644 index 000000000..104321aef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_core_core_axi_write_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_core_core_axi_write_out_if_typedefs_hdl.svh" + `include "src/fuse_core_core_axi_write_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..0aca1a6dd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_core_core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_sve.F new file mode 100644 index 000000000..fe260360b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if2reg_adapter.svh new file mode 100644 index 000000000..2092ace2d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_core_core_axi_write_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_core_core_axi_write_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_core_core_axi_write_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_core_core_axi_write_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_agent.svh new file mode 100644 index 000000000..d33c79019 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_core_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_core_core_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_core_core_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_core_core_axi_write_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_core_core_axi_write_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_configuration.svh new file mode 100644 index 000000000..5647a3442 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_core_core_axi_write_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_core_core_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_core_core_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_core_core_axi_write_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_core_core_axi_write_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_CONFIGURATION_STRUCT + fuse_core_core_axi_write_out_if_configuration_s fuse_core_core_axi_write_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_core_core_axi_write_out_if_configuration_s + // structure. The function returns the handle to the fuse_core_core_axi_write_out_if_configuration_struct. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_core_core_axi_write_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_core_core_axi_write_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_core_core_axi_write_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_core_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_core_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_core_core_axi_write_out_if_configuration_cg.set_inst_name($sformatf("fuse_core_core_axi_write_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_core_core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver.svh new file mode 100644 index 000000000..f49aeaaa8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_core_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_core_core_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_core_core_axi_write_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_core_core_axi_write_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_core_core_axi_write_out_if_driver and fuse_core_core_axi_write_out_if_driver_bfm +// to communicate initiator driven data to fuse_core_core_axi_write_out_if_driver_bfm. +`fuse_core_core_axi_write_out_if_INITIATOR_STRUCT + fuse_core_core_axi_write_out_if_initiator_s fuse_core_core_axi_write_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_core_core_axi_write_out_if_driver and fuse_core_core_axi_write_out_if_driver_bfm +// to communicate Responder driven data to fuse_core_core_axi_write_out_if_driver_bfm. +`fuse_core_core_axi_write_out_if_RESPONDER_STRUCT + fuse_core_core_axi_write_out_if_responder_s fuse_core_core_axi_write_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_core_core_axi_write_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_core_core_axi_write_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_core_core_axi_write_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_core_core_axi_write_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver_bfm.sv new file mode 100644 index 000000000..e5b9f650e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_core_core_axi_write_out_if signal driving. It is +// accessed by the uvm fuse_core_core_axi_write_out_if driver through a virtual interface +// handle in the fuse_core_core_axi_write_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_core_core_axi_write_out_if_if. +// +// Input signals from the fuse_core_core_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_core_core_axi_write_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_core_core_axi_write_out_if_pkg_hdl::*; +`include "src/fuse_core_core_axi_write_out_if_macros.svh" + +interface fuse_core_core_axi_write_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_core_core_axi_write_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_core_core_axi_write_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_core_core_axi_write_out_if_pkg::fuse_core_core_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_core_core_axi_write_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_core_core_axi_write_out_if_driver to this BFM + // **************************************************************************** + `fuse_core_core_axi_write_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_core_core_axi_write_out_if_driver and fuse_core_core_axi_write_out_if_driver_bfm + // to communicate initiator driven data to fuse_core_core_axi_write_out_if_driver_bfm. + `fuse_core_core_axi_write_out_if_INITIATOR_STRUCT + fuse_core_core_axi_write_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_core_core_axi_write_out_if_driver and fuse_core_core_axi_write_out_if_driver_bfm + // to communicate Responder driven data to fuse_core_core_axi_write_out_if_driver_bfm. + `fuse_core_core_axi_write_out_if_RESPONDER_STRUCT + fuse_core_core_axi_write_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_core_core_axi_write_out_if_configuration_s fuse_core_core_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_core_core_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_core_core_axi_write_out_if_initiator_s fuse_core_core_axi_write_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_core_core_axi_write_out_if_responder_s fuse_core_core_axi_write_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_core_core_axi_write_out_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Members within the fuse_core_core_axi_write_out_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + initiator_struct = fuse_core_core_axi_write_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_core_core_axi_write_out_if_responder_struct.xyz = awready_i; // + // fuse_core_core_axi_write_out_if_responder_struct.xyz = wready_i; // + // fuse_core_core_axi_write_out_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_core_core_axi_write_out_if_responder_struct.xyz = bid_i; // + // fuse_core_core_axi_write_out_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_core_core_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_core_core_axi_write_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_core_core_axi_write_out_if_initiator_s fuse_core_core_axi_write_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_core_core_axi_write_out_if_responder_s fuse_core_core_axi_write_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_core_core_axi_write_out_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Variables within the fuse_core_core_axi_write_out_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= fuse_core_core_axi_write_out_if_initiator_struct.xyz; // + // wready_o <= fuse_core_core_axi_write_out_if_initiator_struct.xyz; // + // bresp_o <= fuse_core_core_axi_write_out_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= fuse_core_core_axi_write_out_if_initiator_struct.xyz; // + // bvalid_o <= fuse_core_core_axi_write_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_core_core_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_core_core_axi_write_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_if.sv new file mode 100644 index 000000000..6bbcc3a46 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_core_core_axi_write_out_if interface signals. +// It is instantiated once per fuse_core_core_axi_write_out_if bus. Bus Functional Models, +// BFM's named fuse_core_core_axi_write_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_core_core_axi_write_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_core_core_axi_write_out_if_bus.awready), // Agent input +// .dut_signal_port(fuse_core_core_axi_write_out_if_bus.wready), // Agent input +// .dut_signal_port(fuse_core_core_axi_write_out_if_bus.bresp), // Agent input +// .dut_signal_port(fuse_core_core_axi_write_out_if_bus.bid), // Agent input +// .dut_signal_port(fuse_core_core_axi_write_out_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_core_core_axi_write_out_if_pkg_hdl::*; + +interface fuse_core_core_axi_write_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_macros.svh new file mode 100644 index 000000000..91edfefea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_core_core_axi_write_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_core_core_axi_write_out_if_configuration class. +// + `define fuse_core_core_axi_write_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_core_core_axi_write_out_if_configuration_s; + + `define fuse_core_core_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_core_core_axi_write_out_if_configuration_s to_struct();\ + fuse_core_core_axi_write_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_core_core_axi_write_out_if_configuration_struct );\ + endfunction + + `define fuse_core_core_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_core_core_axi_write_out_if_configuration_s fuse_core_core_axi_write_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_core_core_axi_write_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_core_core_axi_write_out_if_transaction class. +// + `define fuse_core_core_axi_write_out_if_MONITOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_core_core_axi_write_out_if_monitor_s; + + `define fuse_core_core_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_core_core_axi_write_out_if_monitor_s to_monitor_struct();\ + fuse_core_core_axi_write_out_if_monitor_struct = \ + { \ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_core_core_axi_write_out_if_monitor_struct);\ + endfunction\ + + `define fuse_core_core_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_core_core_axi_write_out_if_monitor_s fuse_core_core_axi_write_out_if_monitor_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_core_core_axi_write_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_core_core_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_core_core_axi_write_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_core_core_axi_write_out_if_initiator_s; + + `define fuse_core_core_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_core_core_axi_write_out_if_initiator_s to_initiator_struct();\ + fuse_core_core_axi_write_out_if_initiator_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_core_core_axi_write_out_if_initiator_struct);\ + endfunction + + `define fuse_core_core_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_core_core_axi_write_out_if_initiator_s fuse_core_core_axi_write_out_if_initiator_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_core_core_axi_write_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_core_core_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_core_core_axi_write_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_core_core_axi_write_out_if_responder_s; + + `define fuse_core_core_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_core_core_axi_write_out_if_responder_s to_responder_struct();\ + fuse_core_core_axi_write_out_if_responder_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_core_core_axi_write_out_if_responder_struct);\ + endfunction + + `define fuse_core_core_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_core_core_axi_write_out_if_responder_s fuse_core_core_axi_write_out_if_responder_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_core_core_axi_write_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor.svh new file mode 100644 index 000000000..583e26c88 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_core_core_axi_write_out_if transactions observed by the +// fuse_core_core_axi_write_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_core_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_core_core_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_core_core_axi_write_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_core_core_axi_write_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_core_core_axi_write_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_core_core_axi_write_out_if_monitor_s fuse_core_core_axi_write_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_core_core_axi_write_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor_bfm.sv new file mode 100644 index 000000000..37b7af3f7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_core_core_axi_write_out_if signal monitoring. +// It is accessed by the uvm fuse_core_core_axi_write_out_if monitor through a virtual +// interface handle in the fuse_core_core_axi_write_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_core_core_axi_write_out_if_if. +// +// Input signals from the fuse_core_core_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_core_core_axi_write_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_core_core_axi_write_out_if_pkg_hdl::*; +`include "src/fuse_core_core_axi_write_out_if_macros.svh" + + +interface fuse_core_core_axi_write_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_core_core_axi_write_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_core_core_axi_write_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_core_core_axi_write_out_if_MONITOR_STRUCT + fuse_core_core_axi_write_out_if_monitor_s fuse_core_core_axi_write_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_core_core_axi_write_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + fuse_core_core_axi_write_out_if_pkg::fuse_core_core_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_core_core_axi_write_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_core_core_axi_write_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_core_core_axi_write_out_if_configuration_s fuse_core_core_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_core_core_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_core_core_axi_write_out_if_monitor_s fuse_core_core_axi_write_out_if_monitor_struct); + // + // Available struct members: + // // fuse_core_core_axi_write_out_if_monitor_struct.core_awready + // // fuse_core_core_axi_write_out_if_monitor_struct.core_wready + // // fuse_core_core_axi_write_out_if_monitor_struct.core_bresp + // // fuse_core_core_axi_write_out_if_monitor_struct.core_bid + // // fuse_core_core_axi_write_out_if_monitor_struct.core_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_core_core_axi_write_out_if_monitor_struct.xyz = awready_i; // + // fuse_core_core_axi_write_out_if_monitor_struct.xyz = wready_i; // + // fuse_core_core_axi_write_out_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_core_core_axi_write_out_if_monitor_struct.xyz = bid_i; // + // fuse_core_core_axi_write_out_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_random_sequence.svh new file mode 100644 index 000000000..df9b0ffcd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_core_core_axi_write_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_core_core_axi_write_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_core_core_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_core_core_axi_write_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_core_core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_core_core_axi_write_out_if_random_sequence::body()-fuse_core_core_axi_write_out_if_transaction randomization failed") + // Send the transaction to the fuse_core_core_axi_write_out_if_driver_bfm via the sequencer and fuse_core_core_axi_write_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_core_core_axi_write_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_responder_sequence.svh new file mode 100644 index 000000000..21ff7b447 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_core_core_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_core_core_axi_write_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_core_core_axi_write_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_core_core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_sequence_base.svh new file mode 100644 index 000000000..c1c075a25 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_core_core_axi_write_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_core_core_axi_write_out_if_transaction_req_t; + fuse_core_core_axi_write_out_if_transaction_req_t req; + typedef fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_core_core_axi_write_out_if_transaction_rsp_t; + fuse_core_core_axi_write_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_core_core_axi_write_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_core_core_axi_write_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction.svh new file mode 100644 index 000000000..ce2250205 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_core_core_axi_write_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_core_core_axi_write_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_awready ; + logic core_wready ; + axi_pkg::axi_burst_e core_bresp ; + logic core_bid ; + logic core_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_core_core_axi_write_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_core_core_axi_write_out_if_monitor and fuse_core_core_axi_write_out_if_monitor_bfm + // This struct is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_MONITOR_STRUCT + fuse_core_core_axi_write_out_if_monitor_s fuse_core_core_axi_write_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_core_core_axi_write_out_if_monitor_s + // structure. The function returns the handle to the fuse_core_core_axi_write_out_if_monitor_struct. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_core_core_axi_write_out_if_driver and fuse_core_core_axi_write_out_if_driver_bfm + // to communicate initiator driven data to fuse_core_core_axi_write_out_if_driver_bfm. + // This struct is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_INITIATOR_STRUCT + fuse_core_core_axi_write_out_if_initiator_s fuse_core_core_axi_write_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_core_core_axi_write_out_if_initiator_s + // structure. The function returns the handle to the fuse_core_core_axi_write_out_if_initiator_struct. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_core_core_axi_write_out_if_driver and fuse_core_core_axi_write_out_if_driver_bfm + // to communicate Responder driven data to fuse_core_core_axi_write_out_if_driver_bfm. + // This struct is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_RESPONDER_STRUCT + fuse_core_core_axi_write_out_if_responder_s fuse_core_core_axi_write_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_core_core_axi_write_out_if_responder_s + // structure. The function returns the handle to the fuse_core_core_axi_write_out_if_responder_struct. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awready:0x%x core_wready:0x%x core_bresp:0x%x core_bid:0x%x core_bvalid:0x%x ",core_awready,core_wready,core_bresp,core_bid,core_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_awready == RHS.core_awready) + &&(this.core_wready == RHS.core_wready) + &&(this.core_bresp == RHS.core_bresp) + &&(this.core_bid == RHS.core_bid) + &&(this.core_bvalid == RHS.core_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awready = RHS.core_awready; + this.core_wready = RHS.core_wready; + this.core_bresp = RHS.core_bresp; + this.core_bid = RHS.core_bid; + this.core_bvalid = RHS.core_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_core_core_axi_write_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awready,"core_awready"); + $add_attribute(transaction_view_h,core_wready,"core_wready"); + $add_attribute(transaction_view_h,core_bresp,"core_bresp"); + $add_attribute(transaction_view_h,core_bid,"core_bid"); + $add_attribute(transaction_view_h,core_bvalid,"core_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction_coverage.svh new file mode 100644 index 000000000..73985aa24 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_core_core_axi_write_out_if transaction information using +// a covergroup named fuse_core_core_axi_write_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_core_core_axi_write_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_core_core_axi_write_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awready: coverpoint coverage_trans.core_awready; + core_wready: coverpoint coverage_trans.core_wready; + core_bresp: coverpoint coverage_trans.core_bresp; + core_bid: coverpoint coverage_trans.core_bid; + core_bvalid: coverpoint coverage_trans.core_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_core_core_axi_write_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_core_core_axi_write_out_if_transaction_cg.set_inst_name($sformatf("fuse_core_core_axi_write_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_core_core_axi_write_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/yaml/fuse_core_core_axi_write_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/yaml/fuse_core_core_axi_write_out_if_interface.yaml new file mode 100644 index 000000000..943a1091a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/yaml/fuse_core_core_axi_write_out_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + fuse_core_core_axi_write_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.project new file mode 100644 index 000000000..63a0f5c9d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..a3cbefe0b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..c29cae1ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f + +fuse_ctrl_core_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f + +fuse_ctrl_core_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_read_if_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_read_if_pkg +COMP_fuse_ctrl_core_axi_read_if_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_read_if_pkg +COMP_fuse_ctrl_core_axi_read_if_PKG_TGT = $(COMP_fuse_ctrl_core_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_read_if_pkg: $(COMP_fuse_ctrl_core_axi_read_if_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_read_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_read_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_if_pkg += -I$(fuse_ctrl_core_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_if_pkg += $(fuse_ctrl_core_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_read_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..4e0c5588d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if.compile new file mode 100644 index 000000000..48a0d3158 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_read_if_hvl.compile + - fuse_ctrl_core_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..28155505e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_read_if_if.sv +src/fuse_ctrl_core_axi_read_if_driver_bfm.sv +src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_common.compile new file mode 100644 index 000000000..109b88dad --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..733787653 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..90b4e36ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..26bcff49c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hdl.compile new file mode 100644 index 000000000..c28340779 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_read_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_read_if_if.sv + - src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv + - src/fuse_ctrl_core_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hvl.compile new file mode 100644 index 000000000..6135baefd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_read_if_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.sv new file mode 100644 index 000000000..88b9bb7a3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_read_if_macros.svh" + + export fuse_ctrl_core_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_read_if_typedefs.svh" + `include "src/fuse_ctrl_core_axi_read_if_transaction.svh" + + `include "src/fuse_ctrl_core_axi_read_if_configuration.svh" + `include "src/fuse_ctrl_core_axi_read_if_driver.svh" + `include "src/fuse_ctrl_core_axi_read_if_monitor.svh" + + `include "src/fuse_ctrl_core_axi_read_if_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_read_if_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_read_if_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_read_if_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_read_if2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..bb1d0794d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..c410235bf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_read_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..723625863 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..863eb4873 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..2ac137314 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_agent.svh new file mode 100644 index 000000000..cecf128e5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_configuration.svh new file mode 100644 index 000000000..c75c85e1c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_read_if_configuration_s fuse_ctrl_core_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_read_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_if_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_read_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver.svh new file mode 100644 index 000000000..ab8413284 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_read_if_driver_bfm. +`fuse_ctrl_core_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_if_initiator_s fuse_ctrl_core_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_read_if_driver_bfm. +`fuse_ctrl_core_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_if_responder_s fuse_ctrl_core_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..8d672492f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_read_if signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_read_if driver through a virtual interface +// handle in the fuse_ctrl_core_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_read_if_if. +// +// Input signals from the fuse_ctrl_core_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_if_macros.svh" + +interface fuse_ctrl_core_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_read_if_pkg::fuse_ctrl_core_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_read_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_if_driver_bfm. + `fuse_ctrl_core_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_if_driver_bfm. + `fuse_ctrl_core_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_read_if_configuration_s fuse_ctrl_core_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_read_if_initiator_s fuse_ctrl_core_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_read_if_responder_s fuse_ctrl_core_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_read_if_initiator_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Members within the fuse_ctrl_core_axi_read_if_responder_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + initiator_struct = fuse_ctrl_core_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_read_if_initiator_s fuse_ctrl_core_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_read_if_responder_s fuse_ctrl_core_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_read_if_initiator_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Variables within the fuse_ctrl_core_axi_read_if_responder_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arlock_i; // + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_if.sv new file mode 100644 index 000000000..5f8ec8923 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_read_if interface signals. +// It is instantiated once per fuse_ctrl_core_axi_read_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_if_pkg_hdl::*; + +interface fuse_ctrl_core_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_macros.svh new file mode 100644 index 000000000..c5799df29 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_read_if_configuration class. +// + `define fuse_ctrl_core_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_read_if_configuration_s; + + `define fuse_ctrl_core_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_if_configuration_s to_struct();\ + fuse_ctrl_core_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_read_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_read_if_configuration_s fuse_ctrl_core_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_read_if_transaction class. +// + `define fuse_ctrl_core_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_if_monitor_s; + + `define fuse_ctrl_core_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_if_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_read_if_monitor_struct = \ + { \ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_read_if_monitor_s fuse_ctrl_core_axi_read_if_monitor_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_if_initiator_s; + + `define fuse_ctrl_core_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_if_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_read_if_initiator_struct = \ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_read_if_initiator_s fuse_ctrl_core_axi_read_if_initiator_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_if_responder_s; + + `define fuse_ctrl_core_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_if_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_read_if_responder_struct = \ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_if_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_read_if_responder_s fuse_ctrl_core_axi_read_if_responder_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor.svh new file mode 100644 index 000000000..09bb82cf5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_read_if transactions observed by the +// fuse_ctrl_core_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_read_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_read_if_monitor_s fuse_ctrl_core_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..2f9a66938 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_read_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_read_if monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_read_if_if. +// +// Input signals from the fuse_ctrl_core_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_if_macros.svh" + + +interface fuse_ctrl_core_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_read_if_MONITOR_STRUCT + fuse_ctrl_core_axi_read_if_monitor_s fuse_ctrl_core_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_read_if_pkg::fuse_ctrl_core_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_read_if_configuration_s fuse_ctrl_core_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_read_if_monitor_s fuse_ctrl_core_axi_read_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_araddr + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arvalid + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arburst + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arsize + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arlen + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_aruser + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arid + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arlock + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..f0d127eb7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_read_if_random_sequence::body()-fuse_ctrl_core_axi_read_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_read_if_driver_bfm via the sequencer and fuse_ctrl_core_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..beadd0baf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..ecb0cebaa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_if_transaction_req_t; + fuse_ctrl_core_axi_read_if_transaction_req_t req; + typedef fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_if_transaction_rsp_t; + fuse_ctrl_core_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction.svh new file mode 100644 index 000000000..44757277a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] core_araddr ; + logic core_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + logic [2:0] core_arsize ; + logic [7:0] core_arlen ; + logic [UW-1:0] core_aruser ; + logic [IW-1:0] core_arid ; + logic core_arlock ; + logic core_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_read_if_monitor and fuse_ctrl_core_axi_read_if_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_MONITOR_STRUCT + fuse_ctrl_core_axi_read_if_monitor_s fuse_ctrl_core_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_if_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_if_initiator_s fuse_ctrl_core_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_if_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_if_responder_s fuse_ctrl_core_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_if_responder_struct. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_araddr:0x%x core_arvalid:0x%x core_arburst:0x%x core_arsize:0x%x core_arlen:0x%x core_aruser:0x%x core_arid:0x%x core_arlock:0x%x core_rready:0x%x ",core_araddr,core_arvalid,core_arburst,core_arsize,core_arlen,core_aruser,core_arid,core_arlock,core_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_araddr = RHS.core_araddr; + this.core_arvalid = RHS.core_arvalid; + this.core_arburst = RHS.core_arburst; + this.core_arsize = RHS.core_arsize; + this.core_arlen = RHS.core_arlen; + this.core_aruser = RHS.core_aruser; + this.core_arid = RHS.core_arid; + this.core_arlock = RHS.core_arlock; + this.core_rready = RHS.core_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_araddr,"core_araddr"); + $add_attribute(transaction_view_h,core_arvalid,"core_arvalid"); + $add_attribute(transaction_view_h,core_arburst,"core_arburst"); + $add_attribute(transaction_view_h,core_arsize,"core_arsize"); + $add_attribute(transaction_view_h,core_arlen,"core_arlen"); + $add_attribute(transaction_view_h,core_aruser,"core_aruser"); + $add_attribute(transaction_view_h,core_arid,"core_arid"); + $add_attribute(transaction_view_h,core_arlock,"core_arlock"); + $add_attribute(transaction_view_h,core_rready,"core_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..70b6c9261 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_read_if transaction information using +// a covergroup named fuse_ctrl_core_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_araddr: coverpoint coverage_trans.core_araddr; + core_arvalid: coverpoint coverage_trans.core_arvalid; + core_arburst: coverpoint coverage_trans.core_arburst; + core_arsize: coverpoint coverage_trans.core_arsize; + core_arlen: coverpoint coverage_trans.core_arlen; + core_aruser: coverpoint coverage_trans.core_aruser; + core_arid: coverpoint coverage_trans.core_arid; + core_arlock: coverpoint coverage_trans.core_arlock; + core_rready: coverpoint coverage_trans.core_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_read_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/yaml/fuse_ctrl_core_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/yaml/fuse_ctrl_core_axi_read_if_interface.yaml new file mode 100644 index 000000000..cacadd72c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/yaml/fuse_ctrl_core_axi_read_if_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: core_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.project new file mode 100644 index 000000000..5f36c5d66 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_read_in_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.svproject new file mode 100644 index 000000000..33b6b34f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/Makefile new file mode 100644 index 000000000..04937f1d7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_read_in_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_read_in_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hvl.f + +fuse_ctrl_core_axi_read_in_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hdl.f + +fuse_ctrl_core_axi_read_in_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_read_in_if_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_read_in_if_pkg +COMP_fuse_ctrl_core_axi_read_in_if_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_read_in_if_pkg +COMP_fuse_ctrl_core_axi_read_in_if_PKG_TGT = $(COMP_fuse_ctrl_core_axi_read_in_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_read_in_if_pkg: $(COMP_fuse_ctrl_core_axi_read_in_if_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_read_in_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_read_in_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_read_in_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_in_if_pkg += -I$(fuse_ctrl_core_axi_read_in_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_in_if_pkg += $(fuse_ctrl_core_axi_read_in_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_read_in_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_read_in_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_read_in_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_read_in_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/compile.do new file mode 100644 index 000000000..ba9f78050 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_read_in_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if.compile new file mode 100644 index 000000000..cea52ff3f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_read_in_if_hvl.compile + - fuse_ctrl_core_axi_read_in_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_bfm.vinfo new file mode 100644 index 000000000..667ead1d5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_read_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_read_in_if_if.sv +src/fuse_ctrl_core_axi_read_in_if_driver_bfm.sv +src/fuse_ctrl_core_axi_read_in_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_common.compile new file mode 100644 index 000000000..984ba6c81 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hdl.f new file mode 100644 index 000000000..ab0f78a58 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hvl.f new file mode 100644 index 000000000..6e9dbaf7e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_xrtl.f new file mode 100644 index 000000000..02f0d168d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hdl.compile new file mode 100644 index 000000000..491ad6336 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_read_in_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_read_in_if_if.sv + - src/fuse_ctrl_core_axi_read_in_if_monitor_bfm.sv + - src/fuse_ctrl_core_axi_read_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hvl.compile new file mode 100644 index 000000000..1bab122b1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_read_in_if_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_read_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.sv new file mode 100644 index 000000000..c825d77d2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_in_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_read_in_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_read_in_if_macros.svh" + + export fuse_ctrl_core_axi_read_in_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_read_in_if_typedefs.svh" + `include "src/fuse_ctrl_core_axi_read_in_if_transaction.svh" + + `include "src/fuse_ctrl_core_axi_read_in_if_configuration.svh" + `include "src/fuse_ctrl_core_axi_read_in_if_driver.svh" + `include "src/fuse_ctrl_core_axi_read_in_if_monitor.svh" + + `include "src/fuse_ctrl_core_axi_read_in_if_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_read_in_if_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_read_in_if_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_read_in_if_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_read_in_if2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_read_in_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.vinfo new file mode 100644 index 000000000..7aa6556f8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_read_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_read_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv new file mode 100644 index 000000000..bd812d443 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_in_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_read_in_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_read_in_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.vinfo new file mode 100644 index 000000000..1740fc2cc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_sve.F new file mode 100644 index 000000000..c8b15a089 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if2reg_adapter.svh new file mode 100644 index 000000000..742aa971e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_read_in_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_read_in_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_read_in_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_agent.svh new file mode 100644 index 000000000..c79cacb4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_read_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_read_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_read_in_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_configuration.svh new file mode 100644 index 000000000..eaf5806d5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_read_in_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_read_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_read_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_read_in_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_read_in_if_configuration_s fuse_ctrl_core_axi_read_in_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_read_in_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_if_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_read_in_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_read_in_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_read_in_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_read_in_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_in_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver.svh new file mode 100644 index 000000000..40a71d1b7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_read_in_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_read_in_if_driver and fuse_ctrl_core_axi_read_in_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_read_in_if_driver_bfm. +`fuse_ctrl_core_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_in_if_initiator_s fuse_ctrl_core_axi_read_in_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_read_in_if_driver and fuse_ctrl_core_axi_read_in_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_read_in_if_driver_bfm. +`fuse_ctrl_core_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_in_if_responder_s fuse_ctrl_core_axi_read_in_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_read_in_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_read_in_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_read_in_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_read_in_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver_bfm.sv new file mode 100644 index 000000000..bdf19e41e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_read_in_if signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_read_in_if driver through a virtual interface +// handle in the fuse_ctrl_core_axi_read_in_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_read_in_if_if. +// +// Input signals from the fuse_ctrl_core_axi_read_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_read_in_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_in_if_macros.svh" + +interface fuse_ctrl_core_axi_read_in_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_read_in_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_in_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_read_in_if_pkg::fuse_ctrl_core_axi_read_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_read_in_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_read_in_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_read_in_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_in_if_driver and fuse_ctrl_core_axi_read_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_in_if_driver_bfm. + `fuse_ctrl_core_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_in_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_read_in_if_driver and fuse_ctrl_core_axi_read_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_in_if_driver_bfm. + `fuse_ctrl_core_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_in_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_read_in_if_configuration_s fuse_ctrl_core_axi_read_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_read_in_if_initiator_s fuse_ctrl_core_axi_read_in_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_read_in_if_responder_s fuse_ctrl_core_axi_read_in_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_read_in_if_initiator_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Members within the fuse_ctrl_core_axi_read_in_if_responder_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + initiator_struct = fuse_ctrl_core_axi_read_in_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_read_in_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_read_in_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_read_in_if_initiator_s fuse_ctrl_core_axi_read_in_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_read_in_if_responder_s fuse_ctrl_core_axi_read_in_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_read_in_if_initiator_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Variables within the fuse_ctrl_core_axi_read_in_if_responder_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = arlock_i; // + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_read_in_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_read_in_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_if.sv new file mode 100644 index 000000000..c46ca5b4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_read_in_if interface signals. +// It is instantiated once per fuse_ctrl_core_axi_read_in_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_read_in_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_read_in_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_in_if_pkg_hdl::*; + +interface fuse_ctrl_core_axi_read_in_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_macros.svh new file mode 100644 index 000000000..71c48f0b3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_read_in_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_read_in_if_configuration class. +// + `define fuse_ctrl_core_axi_read_in_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_read_in_if_configuration_s; + + `define fuse_ctrl_core_axi_read_in_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_if_configuration_s to_struct();\ + fuse_ctrl_core_axi_read_in_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_read_in_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_read_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_read_in_if_configuration_s fuse_ctrl_core_axi_read_in_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_read_in_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_read_in_if_transaction class. +// + `define fuse_ctrl_core_axi_read_in_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_in_if_monitor_s; + + `define fuse_ctrl_core_axi_read_in_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_if_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_read_in_if_monitor_struct = \ + { \ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_in_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_read_in_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_read_in_if_monitor_s fuse_ctrl_core_axi_read_in_if_monitor_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_in_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_read_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_in_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_in_if_initiator_s; + + `define fuse_ctrl_core_axi_read_in_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_if_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_read_in_if_initiator_struct = \ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_in_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_in_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_read_in_if_initiator_s fuse_ctrl_core_axi_read_in_if_initiator_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_in_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_read_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_in_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_in_if_responder_s; + + `define fuse_ctrl_core_axi_read_in_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_if_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_read_in_if_responder_struct = \ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_in_if_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_in_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_read_in_if_responder_s fuse_ctrl_core_axi_read_in_if_responder_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_in_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor.svh new file mode 100644 index 000000000..4942cca3b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_read_in_if transactions observed by the +// fuse_ctrl_core_axi_read_in_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_read_in_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_read_in_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_read_in_if_monitor_s fuse_ctrl_core_axi_read_in_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_read_in_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor_bfm.sv new file mode 100644 index 000000000..2e9f2fc31 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_read_in_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_read_in_if monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_read_in_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_read_in_if_if. +// +// Input signals from the fuse_ctrl_core_axi_read_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_read_in_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_in_if_macros.svh" + + +interface fuse_ctrl_core_axi_read_in_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_read_in_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_in_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_read_in_if_MONITOR_STRUCT + fuse_ctrl_core_axi_read_in_if_monitor_s fuse_ctrl_core_axi_read_in_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_read_in_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_read_in_if_pkg::fuse_ctrl_core_axi_read_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_read_in_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_read_in_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_read_in_if_configuration_s fuse_ctrl_core_axi_read_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_read_in_if_monitor_s fuse_ctrl_core_axi_read_in_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_araddr + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_arvalid + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_arburst + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_arsize + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_arlen + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_aruser + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_arid + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_arlock + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_random_sequence.svh new file mode 100644 index 000000000..4d44b21a1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_read_in_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_read_in_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_read_in_if_random_sequence::body()-fuse_ctrl_core_axi_read_in_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_read_in_if_driver_bfm via the sequencer and fuse_ctrl_core_axi_read_in_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_read_in_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_responder_sequence.svh new file mode 100644 index 000000000..cafea5de4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_read_in_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_sequence_base.svh new file mode 100644 index 000000000..ccf0c8987 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_in_if_transaction_req_t; + fuse_ctrl_core_axi_read_in_if_transaction_req_t req; + typedef fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_in_if_transaction_rsp_t; + fuse_ctrl_core_axi_read_in_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_read_in_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_read_in_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction.svh new file mode 100644 index 000000000..75bfc1b3a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_read_in_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] core_araddr ; + logic core_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + logic [2:0] core_arsize ; + logic [7:0] core_arlen ; + logic [UW-1:0] core_aruser ; + logic [IW-1:0] core_arid ; + logic core_arlock ; + logic core_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_read_in_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_read_in_if_monitor and fuse_ctrl_core_axi_read_in_if_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_MONITOR_STRUCT + fuse_ctrl_core_axi_read_in_if_monitor_s fuse_ctrl_core_axi_read_in_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_in_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_if_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_in_if_driver and fuse_ctrl_core_axi_read_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_in_if_initiator_s fuse_ctrl_core_axi_read_in_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_in_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_if_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_read_in_if_driver and fuse_ctrl_core_axi_read_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_in_if_responder_s fuse_ctrl_core_axi_read_in_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_in_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_if_responder_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_araddr:0x%x core_arvalid:0x%x core_arburst:0x%x core_arsize:0x%x core_arlen:0x%x core_aruser:0x%x core_arid:0x%x core_arlock:0x%x core_rready:0x%x ",core_araddr,core_arvalid,core_arburst,core_arsize,core_arlen,core_aruser,core_arid,core_arlock,core_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_araddr = RHS.core_araddr; + this.core_arvalid = RHS.core_arvalid; + this.core_arburst = RHS.core_arburst; + this.core_arsize = RHS.core_arsize; + this.core_arlen = RHS.core_arlen; + this.core_aruser = RHS.core_aruser; + this.core_arid = RHS.core_arid; + this.core_arlock = RHS.core_arlock; + this.core_rready = RHS.core_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_read_in_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_araddr,"core_araddr"); + $add_attribute(transaction_view_h,core_arvalid,"core_arvalid"); + $add_attribute(transaction_view_h,core_arburst,"core_arburst"); + $add_attribute(transaction_view_h,core_arsize,"core_arsize"); + $add_attribute(transaction_view_h,core_arlen,"core_arlen"); + $add_attribute(transaction_view_h,core_aruser,"core_aruser"); + $add_attribute(transaction_view_h,core_arid,"core_arid"); + $add_attribute(transaction_view_h,core_arlock,"core_arlock"); + $add_attribute(transaction_view_h,core_rready,"core_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction_coverage.svh new file mode 100644 index 000000000..ae301fb39 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_read_in_if transaction information using +// a covergroup named fuse_ctrl_core_axi_read_in_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_read_in_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_araddr: coverpoint coverage_trans.core_araddr; + core_arvalid: coverpoint coverage_trans.core_arvalid; + core_arburst: coverpoint coverage_trans.core_arburst; + core_arsize: coverpoint coverage_trans.core_arsize; + core_arlen: coverpoint coverage_trans.core_arlen; + core_aruser: coverpoint coverage_trans.core_aruser; + core_arid: coverpoint coverage_trans.core_arid; + core_arlock: coverpoint coverage_trans.core_arlock; + core_rready: coverpoint coverage_trans.core_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_read_in_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_read_in_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_in_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_read_in_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/yaml/fuse_ctrl_core_axi_read_in_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/yaml/fuse_ctrl_core_axi_read_in_if_interface.yaml new file mode 100644 index 000000000..a53f12850 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/yaml/fuse_ctrl_core_axi_read_in_if_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_read_in_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: core_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.project new file mode 100644 index 000000000..e463bf00a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_read_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.svproject new file mode 100644 index 000000000..4a40ac8c2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/Makefile new file mode 100644 index 000000000..0ccd2f81d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_read_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_read_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hvl.f + +fuse_ctrl_core_axi_read_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hdl.f + +fuse_ctrl_core_axi_read_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_read_in_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_read_in_pkg +COMP_fuse_ctrl_core_axi_read_in_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_read_in_pkg +COMP_fuse_ctrl_core_axi_read_in_PKG_TGT = $(COMP_fuse_ctrl_core_axi_read_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_read_in_pkg: $(COMP_fuse_ctrl_core_axi_read_in_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_read_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_read_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_read_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_read_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_read_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_in_pkg += -I$(fuse_ctrl_core_axi_read_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_in_pkg += $(fuse_ctrl_core_axi_read_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_read_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_read_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_read_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_read_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/compile.do new file mode 100644 index 000000000..badb44884 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_read_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in.compile new file mode 100644 index 000000000..87b941a8f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_read_in_hvl.compile + - fuse_ctrl_core_axi_read_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_bfm.vinfo new file mode 100644 index 000000000..5b881217d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_read_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_read_in_if.sv +src/fuse_ctrl_core_axi_read_in_driver_bfm.sv +src/fuse_ctrl_core_axi_read_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_common.compile new file mode 100644 index 000000000..c150c939d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hdl.f new file mode 100644 index 000000000..b5ab5eab1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hvl.f new file mode 100644 index 000000000..ea2d1017f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_xrtl.f new file mode 100644 index 000000000..16c479246 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hdl.compile new file mode 100644 index 000000000..96c4c97f5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_read_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_read_in_if.sv + - src/fuse_ctrl_core_axi_read_in_monitor_bfm.sv + - src/fuse_ctrl_core_axi_read_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hvl.compile new file mode 100644 index 000000000..287ac6ac3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_read_in_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_read_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.sv new file mode 100644 index 000000000..69c23d827 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_read_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_read_in_macros.svh" + + export fuse_ctrl_core_axi_read_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_read_in_typedefs.svh" + `include "src/fuse_ctrl_core_axi_read_in_transaction.svh" + + `include "src/fuse_ctrl_core_axi_read_in_configuration.svh" + `include "src/fuse_ctrl_core_axi_read_in_driver.svh" + `include "src/fuse_ctrl_core_axi_read_in_monitor.svh" + + `include "src/fuse_ctrl_core_axi_read_in_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_read_in_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_read_in_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_read_in_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_read_in2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_read_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.vinfo new file mode 100644 index 000000000..0c3c242fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_read_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_read_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.sv new file mode 100644 index 000000000..2377e24ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_read_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_read_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.vinfo new file mode 100644 index 000000000..ff9df3113 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_sve.F new file mode 100644 index 000000000..2a3defa24 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in2reg_adapter.svh new file mode 100644 index 000000000..cb981636b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_read_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_read_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_read_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_agent.svh new file mode 100644 index 000000000..40c3aad46 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_read_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_read_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_read_in_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_configuration.svh new file mode 100644 index 000000000..55a8cfe6b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_read_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_read_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_read_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_read_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_read_in_configuration_s fuse_ctrl_core_axi_read_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_read_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_read_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_read_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_read_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_read_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver.svh new file mode 100644 index 000000000..a0a7a6daa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_read_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_read_in_driver and fuse_ctrl_core_axi_read_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_read_in_driver_bfm. +`fuse_ctrl_core_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_in_initiator_s fuse_ctrl_core_axi_read_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_read_in_driver and fuse_ctrl_core_axi_read_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_read_in_driver_bfm. +`fuse_ctrl_core_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_in_responder_s fuse_ctrl_core_axi_read_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_read_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_read_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_read_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_read_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver_bfm.sv new file mode 100644 index 000000000..ae6de997b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_read_in signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_read_in driver through a virtual interface +// handle in the fuse_ctrl_core_axi_read_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_read_in_if. +// +// Input signals from the fuse_ctrl_core_axi_read_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_read_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_in_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_in_macros.svh" + +interface fuse_ctrl_core_axi_read_in_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_read_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_read_in_pkg::fuse_ctrl_core_axi_read_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_read_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_read_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_read_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_in_driver and fuse_ctrl_core_axi_read_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_in_driver_bfm. + `fuse_ctrl_core_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_read_in_driver and fuse_ctrl_core_axi_read_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_in_driver_bfm. + `fuse_ctrl_core_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_read_in_configuration_s fuse_ctrl_core_axi_read_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_read_in_initiator_s fuse_ctrl_core_axi_read_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_read_in_responder_s fuse_ctrl_core_axi_read_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_read_in_initiator_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Members within the fuse_ctrl_core_axi_read_in_responder_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + initiator_struct = fuse_ctrl_core_axi_read_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_read_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_read_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_read_in_initiator_s fuse_ctrl_core_axi_read_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_read_in_responder_s fuse_ctrl_core_axi_read_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_read_in_initiator_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Variables within the fuse_ctrl_core_axi_read_in_responder_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = arlock_i; // + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_read_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_read_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_if.sv new file mode 100644 index 000000000..b778c9293 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_read_in interface signals. +// It is instantiated once per fuse_ctrl_core_axi_read_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_read_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_read_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_in_pkg_hdl::*; + +interface fuse_ctrl_core_axi_read_in_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_macros.svh new file mode 100644 index 000000000..4ada88f4d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_read_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_read_in_configuration class. +// + `define fuse_ctrl_core_axi_read_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_read_in_configuration_s; + + `define fuse_ctrl_core_axi_read_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_configuration_s to_struct();\ + fuse_ctrl_core_axi_read_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_read_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_read_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_read_in_configuration_s fuse_ctrl_core_axi_read_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_read_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_read_in_transaction class. +// + `define fuse_ctrl_core_axi_read_in_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_in_monitor_s; + + `define fuse_ctrl_core_axi_read_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_read_in_monitor_struct = \ + { \ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_read_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_read_in_monitor_s fuse_ctrl_core_axi_read_in_monitor_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_read_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_in_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_in_initiator_s; + + `define fuse_ctrl_core_axi_read_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_read_in_initiator_struct = \ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_read_in_initiator_s fuse_ctrl_core_axi_read_in_initiator_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_read_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_in_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_in_responder_s; + + `define fuse_ctrl_core_axi_read_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_read_in_responder_struct = \ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_in_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_read_in_responder_s fuse_ctrl_core_axi_read_in_responder_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor.svh new file mode 100644 index 000000000..62b74b3f5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_read_in transactions observed by the +// fuse_ctrl_core_axi_read_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_read_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_read_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_read_in_monitor_s fuse_ctrl_core_axi_read_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_read_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor_bfm.sv new file mode 100644 index 000000000..13ea7d2b3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_read_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_read_in monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_read_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_read_in_if. +// +// Input signals from the fuse_ctrl_core_axi_read_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_read_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_in_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_in_macros.svh" + + +interface fuse_ctrl_core_axi_read_in_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_read_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_read_in_MONITOR_STRUCT + fuse_ctrl_core_axi_read_in_monitor_s fuse_ctrl_core_axi_read_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_read_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_read_in_pkg::fuse_ctrl_core_axi_read_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_read_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_read_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_read_in_configuration_s fuse_ctrl_core_axi_read_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_read_in_monitor_s fuse_ctrl_core_axi_read_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_araddr + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_arvalid + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_arburst + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_arsize + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_arlen + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_aruser + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_arid + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_arlock + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_random_sequence.svh new file mode 100644 index 000000000..ce6f4efd0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_read_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_read_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_read_in_random_sequence::body()-fuse_ctrl_core_axi_read_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_read_in_driver_bfm via the sequencer and fuse_ctrl_core_axi_read_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_read_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_responder_sequence.svh new file mode 100644 index 000000000..44a3b25db --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_read_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_sequence_base.svh new file mode 100644 index 000000000..bb92d2409 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_in_transaction_req_t; + fuse_ctrl_core_axi_read_in_transaction_req_t req; + typedef fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_in_transaction_rsp_t; + fuse_ctrl_core_axi_read_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_read_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_read_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction.svh new file mode 100644 index 000000000..39e8f9735 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_read_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] core_araddr ; + logic core_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + logic [2:0] core_arsize ; + logic [7:0] core_arlen ; + logic [UW-1:0] core_aruser ; + logic [IW-1:0] core_arid ; + logic core_arlock ; + logic core_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_read_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_read_in_monitor and fuse_ctrl_core_axi_read_in_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_MONITOR_STRUCT + fuse_ctrl_core_axi_read_in_monitor_s fuse_ctrl_core_axi_read_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_in_driver and fuse_ctrl_core_axi_read_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_in_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_in_initiator_s fuse_ctrl_core_axi_read_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_read_in_driver and fuse_ctrl_core_axi_read_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_in_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_in_responder_s fuse_ctrl_core_axi_read_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_responder_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_araddr:0x%x core_arvalid:0x%x core_arburst:0x%x core_arsize:0x%x core_arlen:0x%x core_aruser:0x%x core_arid:0x%x core_arlock:0x%x core_rready:0x%x ",core_araddr,core_arvalid,core_arburst,core_arsize,core_arlen,core_aruser,core_arid,core_arlock,core_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_araddr = RHS.core_araddr; + this.core_arvalid = RHS.core_arvalid; + this.core_arburst = RHS.core_arburst; + this.core_arsize = RHS.core_arsize; + this.core_arlen = RHS.core_arlen; + this.core_aruser = RHS.core_aruser; + this.core_arid = RHS.core_arid; + this.core_arlock = RHS.core_arlock; + this.core_rready = RHS.core_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_read_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_araddr,"core_araddr"); + $add_attribute(transaction_view_h,core_arvalid,"core_arvalid"); + $add_attribute(transaction_view_h,core_arburst,"core_arburst"); + $add_attribute(transaction_view_h,core_arsize,"core_arsize"); + $add_attribute(transaction_view_h,core_arlen,"core_arlen"); + $add_attribute(transaction_view_h,core_aruser,"core_aruser"); + $add_attribute(transaction_view_h,core_arid,"core_arid"); + $add_attribute(transaction_view_h,core_arlock,"core_arlock"); + $add_attribute(transaction_view_h,core_rready,"core_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction_coverage.svh new file mode 100644 index 000000000..b17252421 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_read_in transaction information using +// a covergroup named fuse_ctrl_core_axi_read_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_read_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_araddr: coverpoint coverage_trans.core_araddr; + core_arvalid: coverpoint coverage_trans.core_arvalid; + core_arburst: coverpoint coverage_trans.core_arburst; + core_arsize: coverpoint coverage_trans.core_arsize; + core_arlen: coverpoint coverage_trans.core_arlen; + core_aruser: coverpoint coverage_trans.core_aruser; + core_arid: coverpoint coverage_trans.core_arid; + core_arlock: coverpoint coverage_trans.core_arlock; + core_rready: coverpoint coverage_trans.core_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_read_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_read_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_read_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/yaml/fuse_ctrl_core_axi_read_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/yaml/fuse_ctrl_core_axi_read_in_interface.yaml new file mode 100644 index 000000000..85b8443f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/yaml/fuse_ctrl_core_axi_read_in_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_read_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: core_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.project new file mode 100644 index 000000000..4eb8e7fa7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_read_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.svproject new file mode 100644 index 000000000..ca67120a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/Makefile new file mode 100644 index 000000000..77d2d8ef1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_read_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_read_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hvl.f + +fuse_ctrl_core_axi_read_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hdl.f + +fuse_ctrl_core_axi_read_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_read_out_if_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_read_out_if_pkg +COMP_fuse_ctrl_core_axi_read_out_if_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_read_out_if_pkg +COMP_fuse_ctrl_core_axi_read_out_if_PKG_TGT = $(COMP_fuse_ctrl_core_axi_read_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_read_out_if_pkg: $(COMP_fuse_ctrl_core_axi_read_out_if_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_read_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_read_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_read_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_out_if_pkg += -I$(fuse_ctrl_core_axi_read_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_out_if_pkg += $(fuse_ctrl_core_axi_read_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_read_out_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_read_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_read_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_read_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/compile.do new file mode 100644 index 000000000..79c0b7bbf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_read_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if.compile new file mode 100644 index 000000000..9b16b1eb7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_read_out_if_hvl.compile + - fuse_ctrl_core_axi_read_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_bfm.vinfo new file mode 100644 index 000000000..052ffff1e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_read_out_if_if.sv +src/fuse_ctrl_core_axi_read_out_if_driver_bfm.sv +src/fuse_ctrl_core_axi_read_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_common.compile new file mode 100644 index 000000000..6f3386ead --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hdl.f new file mode 100644 index 000000000..49d73f821 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hvl.f new file mode 100644 index 000000000..49fbb9e2b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_xrtl.f new file mode 100644 index 000000000..6a4fea185 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hdl.compile new file mode 100644 index 000000000..67f1b7bb1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_read_out_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_read_out_if_if.sv + - src/fuse_ctrl_core_axi_read_out_if_monitor_bfm.sv + - src/fuse_ctrl_core_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hvl.compile new file mode 100644 index 000000000..0a7a5beef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_read_out_if_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.sv new file mode 100644 index 000000000..83af573ed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_read_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_read_out_if_macros.svh" + + export fuse_ctrl_core_axi_read_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_read_out_if_typedefs.svh" + `include "src/fuse_ctrl_core_axi_read_out_if_transaction.svh" + + `include "src/fuse_ctrl_core_axi_read_out_if_configuration.svh" + `include "src/fuse_ctrl_core_axi_read_out_if_driver.svh" + `include "src/fuse_ctrl_core_axi_read_out_if_monitor.svh" + + `include "src/fuse_ctrl_core_axi_read_out_if_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_read_out_if_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_read_out_if_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_read_out_if_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_read_out_if2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_read_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.vinfo new file mode 100644 index 000000000..11d12898a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv new file mode 100644 index 000000000..7e145d3ca --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_read_out_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_read_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..4ebfc1cf0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_sve.F new file mode 100644 index 000000000..7e68f8b02 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if2reg_adapter.svh new file mode 100644 index 000000000..572880369 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_read_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_read_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_read_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_agent.svh new file mode 100644 index 000000000..98e11f158 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_read_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_configuration.svh new file mode 100644 index 000000000..ca3265795 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_read_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_read_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_read_out_if_configuration_s fuse_ctrl_core_axi_read_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_read_out_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_if_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_read_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_read_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_read_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_read_out_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver.svh new file mode 100644 index 000000000..79a37cfcd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_read_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_read_out_if_driver and fuse_ctrl_core_axi_read_out_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_read_out_if_driver_bfm. +`fuse_ctrl_core_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_out_if_initiator_s fuse_ctrl_core_axi_read_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_read_out_if_driver and fuse_ctrl_core_axi_read_out_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_read_out_if_driver_bfm. +`fuse_ctrl_core_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_out_if_responder_s fuse_ctrl_core_axi_read_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_read_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_read_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_read_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_read_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver_bfm.sv new file mode 100644 index 000000000..7bc0b6bba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_read_out_if signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_read_out_if driver through a virtual interface +// handle in the fuse_ctrl_core_axi_read_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_read_out_if_if. +// +// Input signals from the fuse_ctrl_core_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_read_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_out_if_macros.svh" + +interface fuse_ctrl_core_axi_read_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_read_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_read_out_if_pkg::fuse_ctrl_core_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_read_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_read_out_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_read_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_out_if_driver and fuse_ctrl_core_axi_read_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_out_if_driver_bfm. + `fuse_ctrl_core_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_read_out_if_driver and fuse_ctrl_core_axi_read_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_out_if_driver_bfm. + `fuse_ctrl_core_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_read_out_if_configuration_s fuse_ctrl_core_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_read_out_if_initiator_s fuse_ctrl_core_axi_read_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_read_out_if_responder_s fuse_ctrl_core_axi_read_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_read_out_if_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Members within the fuse_ctrl_core_axi_read_out_if_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + initiator_struct = fuse_ctrl_core_axi_read_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_core_axi_read_out_if_responder_struct.xyz = arready_i; // + // fuse_ctrl_core_axi_read_out_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_read_out_if_responder_struct.xyz = rresp_i; // + // fuse_ctrl_core_axi_read_out_if_responder_struct.xyz = rid_i; // + // fuse_ctrl_core_axi_read_out_if_responder_struct.xyz = rlast_i; // + // fuse_ctrl_core_axi_read_out_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_read_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_read_out_if_initiator_s fuse_ctrl_core_axi_read_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_read_out_if_responder_s fuse_ctrl_core_axi_read_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_read_out_if_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Variables within the fuse_ctrl_core_axi_read_out_if_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= fuse_ctrl_core_axi_read_out_if_initiator_struct.xyz; // + // rdata_o <= fuse_ctrl_core_axi_read_out_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= fuse_ctrl_core_axi_read_out_if_initiator_struct.xyz; // + // rid_o <= fuse_ctrl_core_axi_read_out_if_initiator_struct.xyz; // + // rlast_o <= fuse_ctrl_core_axi_read_out_if_initiator_struct.xyz; // + // rvalid_o <= fuse_ctrl_core_axi_read_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_read_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_if.sv new file mode 100644 index 000000000..b9222ea7e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_read_out_if interface signals. +// It is instantiated once per fuse_ctrl_core_axi_read_out_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_read_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_read_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_read_out_if_bus.arready), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_if_bus.rdata), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_if_bus.rresp), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_if_bus.rid), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_if_bus.rlast), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_out_if_pkg_hdl::*; + +interface fuse_ctrl_core_axi_read_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_macros.svh new file mode 100644 index 000000000..6806b6e97 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_read_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_read_out_if_configuration class. +// + `define fuse_ctrl_core_axi_read_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_read_out_if_configuration_s; + + `define fuse_ctrl_core_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_if_configuration_s to_struct();\ + fuse_ctrl_core_axi_read_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_read_out_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_read_out_if_configuration_s fuse_ctrl_core_axi_read_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_read_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_read_out_if_transaction class. +// + `define fuse_ctrl_core_axi_read_out_if_MONITOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } fuse_ctrl_core_axi_read_out_if_monitor_s; + + `define fuse_ctrl_core_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_if_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_read_out_if_monitor_struct = \ + { \ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( fuse_ctrl_core_axi_read_out_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_read_out_if_monitor_s fuse_ctrl_core_axi_read_out_if_monitor_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = fuse_ctrl_core_axi_read_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } fuse_ctrl_core_axi_read_out_if_initiator_s; + + `define fuse_ctrl_core_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_if_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_read_out_if_initiator_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( fuse_ctrl_core_axi_read_out_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_read_out_if_initiator_s fuse_ctrl_core_axi_read_out_if_initiator_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = fuse_ctrl_core_axi_read_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } fuse_ctrl_core_axi_read_out_if_responder_s; + + `define fuse_ctrl_core_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_if_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_read_out_if_responder_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( fuse_ctrl_core_axi_read_out_if_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_read_out_if_responder_s fuse_ctrl_core_axi_read_out_if_responder_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = fuse_ctrl_core_axi_read_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor.svh new file mode 100644 index 000000000..b170cd71e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_read_out_if transactions observed by the +// fuse_ctrl_core_axi_read_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_read_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_read_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_read_out_if_monitor_s fuse_ctrl_core_axi_read_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_read_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor_bfm.sv new file mode 100644 index 000000000..e01d9bb2b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_read_out_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_read_out_if monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_read_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_read_out_if_if. +// +// Input signals from the fuse_ctrl_core_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_read_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_out_if_macros.svh" + + +interface fuse_ctrl_core_axi_read_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_read_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_read_out_if_MONITOR_STRUCT + fuse_ctrl_core_axi_read_out_if_monitor_s fuse_ctrl_core_axi_read_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_read_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_read_out_if_pkg::fuse_ctrl_core_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_read_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_read_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_read_out_if_configuration_s fuse_ctrl_core_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_read_out_if_monitor_s fuse_ctrl_core_axi_read_out_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_read_out_if_monitor_struct.core_arready + // // fuse_ctrl_core_axi_read_out_if_monitor_struct.core_rdata + // // fuse_ctrl_core_axi_read_out_if_monitor_struct.core_rresp + // // fuse_ctrl_core_axi_read_out_if_monitor_struct.core_rid + // // fuse_ctrl_core_axi_read_out_if_monitor_struct.core_rlast + // // fuse_ctrl_core_axi_read_out_if_monitor_struct.core_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_read_out_if_monitor_struct.xyz = arready_i; // + // fuse_ctrl_core_axi_read_out_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_read_out_if_monitor_struct.xyz = rresp_i; // + // fuse_ctrl_core_axi_read_out_if_monitor_struct.xyz = rid_i; // + // fuse_ctrl_core_axi_read_out_if_monitor_struct.xyz = rlast_i; // + // fuse_ctrl_core_axi_read_out_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_random_sequence.svh new file mode 100644 index 000000000..444ad3349 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_read_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_read_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_read_out_if_random_sequence::body()-fuse_ctrl_core_axi_read_out_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_read_out_if_driver_bfm via the sequencer and fuse_ctrl_core_axi_read_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_read_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_responder_sequence.svh new file mode 100644 index 000000000..b146cb193 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_read_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_sequence_base.svh new file mode 100644 index 000000000..cc685c46c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_out_if_transaction_req_t; + fuse_ctrl_core_axi_read_out_if_transaction_req_t req; + typedef fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_out_if_transaction_rsp_t; + fuse_ctrl_core_axi_read_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_read_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_read_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction.svh new file mode 100644 index 000000000..3d9e4155f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_read_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_arready ; + logic [DW-1:0] core_rdata ; + axi_pkg::axi_burst_e core_rresp ; + logic [IW-1:0] core_rid ; + logic core_rlast ; + logic core_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_read_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_read_out_if_monitor and fuse_ctrl_core_axi_read_out_if_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_MONITOR_STRUCT + fuse_ctrl_core_axi_read_out_if_monitor_s fuse_ctrl_core_axi_read_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_out_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_if_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_out_if_driver and fuse_ctrl_core_axi_read_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_out_if_initiator_s fuse_ctrl_core_axi_read_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_out_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_if_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_read_out_if_driver and fuse_ctrl_core_axi_read_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_out_if_responder_s fuse_ctrl_core_axi_read_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_out_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_if_responder_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_arready:0x%x core_rdata:0x%x core_rresp:0x%x core_rid:0x%x core_rlast:0x%x core_rvalid:0x%x ",core_arready,core_rdata,core_rresp,core_rid,core_rlast,core_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_arready == RHS.core_arready) + &&(this.core_rdata == RHS.core_rdata) + &&(this.core_rresp == RHS.core_rresp) + &&(this.core_rid == RHS.core_rid) + &&(this.core_rlast == RHS.core_rlast) + &&(this.core_rvalid == RHS.core_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_arready = RHS.core_arready; + this.core_rdata = RHS.core_rdata; + this.core_rresp = RHS.core_rresp; + this.core_rid = RHS.core_rid; + this.core_rlast = RHS.core_rlast; + this.core_rvalid = RHS.core_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_read_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_arready,"core_arready"); + $add_attribute(transaction_view_h,core_rdata,"core_rdata"); + $add_attribute(transaction_view_h,core_rresp,"core_rresp"); + $add_attribute(transaction_view_h,core_rid,"core_rid"); + $add_attribute(transaction_view_h,core_rlast,"core_rlast"); + $add_attribute(transaction_view_h,core_rvalid,"core_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction_coverage.svh new file mode 100644 index 000000000..8c29582fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_read_out_if transaction information using +// a covergroup named fuse_ctrl_core_axi_read_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_read_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_arready: coverpoint coverage_trans.core_arready; + core_rdata: coverpoint coverage_trans.core_rdata; + core_rresp: coverpoint coverage_trans.core_rresp; + core_rid: coverpoint coverage_trans.core_rid; + core_rlast: coverpoint coverage_trans.core_rlast; + core_rvalid: coverpoint coverage_trans.core_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_read_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_read_out_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_read_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/yaml/fuse_ctrl_core_axi_read_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/yaml/fuse_ctrl_core_axi_read_out_if_interface.yaml new file mode 100644 index 000000000..e6555eaf2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/yaml/fuse_ctrl_core_axi_read_out_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_read_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.project new file mode 100644 index 000000000..23723ddc3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_read_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.svproject new file mode 100644 index 000000000..b74d8263a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/Makefile new file mode 100644 index 000000000..673e00d3b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_read_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_read_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hvl.f + +fuse_ctrl_core_axi_read_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hdl.f + +fuse_ctrl_core_axi_read_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_read_out_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_read_out_pkg +COMP_fuse_ctrl_core_axi_read_out_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_read_out_pkg +COMP_fuse_ctrl_core_axi_read_out_PKG_TGT = $(COMP_fuse_ctrl_core_axi_read_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_read_out_pkg: $(COMP_fuse_ctrl_core_axi_read_out_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_read_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_read_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_read_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_read_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_read_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_out_pkg += -I$(fuse_ctrl_core_axi_read_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_out_pkg += $(fuse_ctrl_core_axi_read_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_read_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_read_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_read_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_read_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/compile.do new file mode 100644 index 000000000..5e6a9fd02 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_read_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out.compile new file mode 100644 index 000000000..ad96a809e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_read_out_hvl.compile + - fuse_ctrl_core_axi_read_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_bfm.vinfo new file mode 100644 index 000000000..03fc49a0a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_read_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_read_out_if.sv +src/fuse_ctrl_core_axi_read_out_driver_bfm.sv +src/fuse_ctrl_core_axi_read_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_common.compile new file mode 100644 index 000000000..84d4f2e7f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hdl.f new file mode 100644 index 000000000..2debd1cc6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hvl.f new file mode 100644 index 000000000..8e9b75a31 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_xrtl.f new file mode 100644 index 000000000..4b0eaa25b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hdl.compile new file mode 100644 index 000000000..5b16e7513 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_read_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_read_out_if.sv + - src/fuse_ctrl_core_axi_read_out_monitor_bfm.sv + - src/fuse_ctrl_core_axi_read_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hvl.compile new file mode 100644 index 000000000..a24021047 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_read_out_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_read_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.sv new file mode 100644 index 000000000..d297db477 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_read_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_read_out_macros.svh" + + export fuse_ctrl_core_axi_read_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_read_out_typedefs.svh" + `include "src/fuse_ctrl_core_axi_read_out_transaction.svh" + + `include "src/fuse_ctrl_core_axi_read_out_configuration.svh" + `include "src/fuse_ctrl_core_axi_read_out_driver.svh" + `include "src/fuse_ctrl_core_axi_read_out_monitor.svh" + + `include "src/fuse_ctrl_core_axi_read_out_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_read_out_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_read_out_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_read_out_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_read_out2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_read_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.vinfo new file mode 100644 index 000000000..50e86c01e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_read_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_read_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.sv new file mode 100644 index 000000000..0e4cd5815 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_read_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_read_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.vinfo new file mode 100644 index 000000000..b7569b98e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_sve.F new file mode 100644 index 000000000..531457d9b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out2reg_adapter.svh new file mode 100644 index 000000000..44bdb8771 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_read_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_read_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_read_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_agent.svh new file mode 100644 index 000000000..4c2bae450 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_read_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_read_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_read_out_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_configuration.svh new file mode 100644 index 000000000..cadcf884e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_read_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_read_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_read_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_read_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_read_out_configuration_s fuse_ctrl_core_axi_read_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_read_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_read_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_read_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_read_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_read_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver.svh new file mode 100644 index 000000000..0471800a7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_read_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_read_out_driver and fuse_ctrl_core_axi_read_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_read_out_driver_bfm. +`fuse_ctrl_core_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_out_initiator_s fuse_ctrl_core_axi_read_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_read_out_driver and fuse_ctrl_core_axi_read_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_read_out_driver_bfm. +`fuse_ctrl_core_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_out_responder_s fuse_ctrl_core_axi_read_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_read_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_read_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_read_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_read_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver_bfm.sv new file mode 100644 index 000000000..e7cfcff1b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_read_out signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_read_out driver through a virtual interface +// handle in the fuse_ctrl_core_axi_read_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_read_out_if. +// +// Input signals from the fuse_ctrl_core_axi_read_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_read_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_out_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_out_macros.svh" + +interface fuse_ctrl_core_axi_read_out_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_read_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_read_out_pkg::fuse_ctrl_core_axi_read_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_read_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_read_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_read_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_out_driver and fuse_ctrl_core_axi_read_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_out_driver_bfm. + `fuse_ctrl_core_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_read_out_driver and fuse_ctrl_core_axi_read_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_out_driver_bfm. + `fuse_ctrl_core_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_read_out_configuration_s fuse_ctrl_core_axi_read_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_read_out_initiator_s fuse_ctrl_core_axi_read_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_read_out_responder_s fuse_ctrl_core_axi_read_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_read_out_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Members within the fuse_ctrl_core_axi_read_out_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + initiator_struct = fuse_ctrl_core_axi_read_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_core_axi_read_out_responder_struct.xyz = arready_i; // + // fuse_ctrl_core_axi_read_out_responder_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_read_out_responder_struct.xyz = rresp_i; // + // fuse_ctrl_core_axi_read_out_responder_struct.xyz = rid_i; // + // fuse_ctrl_core_axi_read_out_responder_struct.xyz = rlast_i; // + // fuse_ctrl_core_axi_read_out_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_read_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_read_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_read_out_initiator_s fuse_ctrl_core_axi_read_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_read_out_responder_s fuse_ctrl_core_axi_read_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_read_out_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Variables within the fuse_ctrl_core_axi_read_out_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= fuse_ctrl_core_axi_read_out_initiator_struct.xyz; // + // rdata_o <= fuse_ctrl_core_axi_read_out_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= fuse_ctrl_core_axi_read_out_initiator_struct.xyz; // + // rid_o <= fuse_ctrl_core_axi_read_out_initiator_struct.xyz; // + // rlast_o <= fuse_ctrl_core_axi_read_out_initiator_struct.xyz; // + // rvalid_o <= fuse_ctrl_core_axi_read_out_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_read_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_read_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_if.sv new file mode 100644 index 000000000..f32c01a5d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_read_out interface signals. +// It is instantiated once per fuse_ctrl_core_axi_read_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_read_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_read_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_read_out_bus.arready), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_bus.rdata), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_bus.rresp), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_bus.rid), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_bus.rlast), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_out_pkg_hdl::*; + +interface fuse_ctrl_core_axi_read_out_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_macros.svh new file mode 100644 index 000000000..2742dc04b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_read_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_read_out_configuration class. +// + `define fuse_ctrl_core_axi_read_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_read_out_configuration_s; + + `define fuse_ctrl_core_axi_read_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_configuration_s to_struct();\ + fuse_ctrl_core_axi_read_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_read_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_read_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_read_out_configuration_s fuse_ctrl_core_axi_read_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_read_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_read_out_transaction class. +// + `define fuse_ctrl_core_axi_read_out_MONITOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } fuse_ctrl_core_axi_read_out_monitor_s; + + `define fuse_ctrl_core_axi_read_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_read_out_monitor_struct = \ + { \ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( fuse_ctrl_core_axi_read_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_read_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_read_out_monitor_s fuse_ctrl_core_axi_read_out_monitor_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = fuse_ctrl_core_axi_read_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_read_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_out_INITIATOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } fuse_ctrl_core_axi_read_out_initiator_s; + + `define fuse_ctrl_core_axi_read_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_read_out_initiator_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( fuse_ctrl_core_axi_read_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_read_out_initiator_s fuse_ctrl_core_axi_read_out_initiator_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = fuse_ctrl_core_axi_read_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_read_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_out_RESPONDER_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } fuse_ctrl_core_axi_read_out_responder_s; + + `define fuse_ctrl_core_axi_read_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_read_out_responder_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( fuse_ctrl_core_axi_read_out_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_read_out_responder_s fuse_ctrl_core_axi_read_out_responder_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = fuse_ctrl_core_axi_read_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor.svh new file mode 100644 index 000000000..192a1829f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_read_out transactions observed by the +// fuse_ctrl_core_axi_read_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_read_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_read_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_read_out_monitor_s fuse_ctrl_core_axi_read_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_read_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor_bfm.sv new file mode 100644 index 000000000..05a619e3c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_read_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_read_out monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_read_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_read_out_if. +// +// Input signals from the fuse_ctrl_core_axi_read_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_read_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_out_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_out_macros.svh" + + +interface fuse_ctrl_core_axi_read_out_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_read_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_read_out_MONITOR_STRUCT + fuse_ctrl_core_axi_read_out_monitor_s fuse_ctrl_core_axi_read_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_read_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_read_out_pkg::fuse_ctrl_core_axi_read_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_read_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_read_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_read_out_configuration_s fuse_ctrl_core_axi_read_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_read_out_monitor_s fuse_ctrl_core_axi_read_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_read_out_monitor_struct.core_arready + // // fuse_ctrl_core_axi_read_out_monitor_struct.core_rdata + // // fuse_ctrl_core_axi_read_out_monitor_struct.core_rresp + // // fuse_ctrl_core_axi_read_out_monitor_struct.core_rid + // // fuse_ctrl_core_axi_read_out_monitor_struct.core_rlast + // // fuse_ctrl_core_axi_read_out_monitor_struct.core_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_read_out_monitor_struct.xyz = arready_i; // + // fuse_ctrl_core_axi_read_out_monitor_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_read_out_monitor_struct.xyz = rresp_i; // + // fuse_ctrl_core_axi_read_out_monitor_struct.xyz = rid_i; // + // fuse_ctrl_core_axi_read_out_monitor_struct.xyz = rlast_i; // + // fuse_ctrl_core_axi_read_out_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_random_sequence.svh new file mode 100644 index 000000000..75644216c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_read_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_read_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_read_out_random_sequence::body()-fuse_ctrl_core_axi_read_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_read_out_driver_bfm via the sequencer and fuse_ctrl_core_axi_read_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_read_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_responder_sequence.svh new file mode 100644 index 000000000..7201178fa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_read_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_sequence_base.svh new file mode 100644 index 000000000..552bdba7d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_out_transaction_req_t; + fuse_ctrl_core_axi_read_out_transaction_req_t req; + typedef fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_out_transaction_rsp_t; + fuse_ctrl_core_axi_read_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_read_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_read_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction.svh new file mode 100644 index 000000000..4654272c3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_read_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_arready ; + logic [DW-1:0] core_rdata ; + axi_pkg::axi_burst_e core_rresp ; + logic [IW-1:0] core_rid ; + logic core_rlast ; + logic core_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_read_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_read_out_monitor and fuse_ctrl_core_axi_read_out_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_MONITOR_STRUCT + fuse_ctrl_core_axi_read_out_monitor_s fuse_ctrl_core_axi_read_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_out_driver and fuse_ctrl_core_axi_read_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_out_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_out_initiator_s fuse_ctrl_core_axi_read_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_read_out_driver and fuse_ctrl_core_axi_read_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_out_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_out_responder_s fuse_ctrl_core_axi_read_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_responder_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_arready:0x%x core_rdata:0x%x core_rresp:0x%x core_rid:0x%x core_rlast:0x%x core_rvalid:0x%x ",core_arready,core_rdata,core_rresp,core_rid,core_rlast,core_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_arready == RHS.core_arready) + &&(this.core_rdata == RHS.core_rdata) + &&(this.core_rresp == RHS.core_rresp) + &&(this.core_rid == RHS.core_rid) + &&(this.core_rlast == RHS.core_rlast) + &&(this.core_rvalid == RHS.core_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_arready = RHS.core_arready; + this.core_rdata = RHS.core_rdata; + this.core_rresp = RHS.core_rresp; + this.core_rid = RHS.core_rid; + this.core_rlast = RHS.core_rlast; + this.core_rvalid = RHS.core_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_read_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_arready,"core_arready"); + $add_attribute(transaction_view_h,core_rdata,"core_rdata"); + $add_attribute(transaction_view_h,core_rresp,"core_rresp"); + $add_attribute(transaction_view_h,core_rid,"core_rid"); + $add_attribute(transaction_view_h,core_rlast,"core_rlast"); + $add_attribute(transaction_view_h,core_rvalid,"core_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction_coverage.svh new file mode 100644 index 000000000..ad53e4910 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_read_out transaction information using +// a covergroup named fuse_ctrl_core_axi_read_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_read_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_arready: coverpoint coverage_trans.core_arready; + core_rdata: coverpoint coverage_trans.core_rdata; + core_rresp: coverpoint coverage_trans.core_rresp; + core_rid: coverpoint coverage_trans.core_rid; + core_rlast: coverpoint coverage_trans.core_rlast; + core_rvalid: coverpoint coverage_trans.core_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_read_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_read_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_read_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/yaml/fuse_ctrl_core_axi_read_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/yaml/fuse_ctrl_core_axi_read_out_interface.yaml new file mode 100644 index 000000000..9e2244bcb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/yaml/fuse_ctrl_core_axi_read_out_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_read_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.project new file mode 100644 index 000000000..574f71c48 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_write_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.svproject new file mode 100644 index 000000000..ed3bfd5bc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/Makefile new file mode 100644 index 000000000..573f6542d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_write_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_write_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f + +fuse_ctrl_core_axi_write_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f + +fuse_ctrl_core_axi_write_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_write_if_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_write_if_pkg +COMP_fuse_ctrl_core_axi_write_if_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_write_if_pkg +COMP_fuse_ctrl_core_axi_write_if_PKG_TGT = $(COMP_fuse_ctrl_core_axi_write_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_write_if_pkg: $(COMP_fuse_ctrl_core_axi_write_if_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_write_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_write_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_write_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_write_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_write_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_if_pkg += -I$(fuse_ctrl_core_axi_write_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_if_pkg += $(fuse_ctrl_core_axi_write_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_write_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_write_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_write_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_write_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/compile.do new file mode 100644 index 000000000..1628622fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_write_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if.compile new file mode 100644 index 000000000..2ee95290b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_write_if_hvl.compile + - fuse_ctrl_core_axi_write_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_bfm.vinfo new file mode 100644 index 000000000..cfb94c619 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_write_if_if.sv +src/fuse_ctrl_core_axi_write_if_driver_bfm.sv +src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_common.compile new file mode 100644 index 000000000..12a17faa4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f new file mode 100644 index 000000000..c5556080a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f new file mode 100644 index 000000000..68b83cc94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f new file mode 100644 index 000000000..3108e102e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hdl.compile new file mode 100644 index 000000000..7185a09f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_write_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_write_if_if.sv + - src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv + - src/fuse_ctrl_core_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hvl.compile new file mode 100644 index 000000000..5096b1689 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_write_if_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.sv new file mode 100644 index 000000000..4fcea64ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_write_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_write_if_macros.svh" + + export fuse_ctrl_core_axi_write_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_write_if_typedefs.svh" + `include "src/fuse_ctrl_core_axi_write_if_transaction.svh" + + `include "src/fuse_ctrl_core_axi_write_if_configuration.svh" + `include "src/fuse_ctrl_core_axi_write_if_driver.svh" + `include "src/fuse_ctrl_core_axi_write_if_monitor.svh" + + `include "src/fuse_ctrl_core_axi_write_if_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_write_if_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_write_if_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_write_if_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_write_if2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_write_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.vinfo new file mode 100644 index 000000000..6bd4a3132 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.sv new file mode 100644 index 000000000..943fb4e9c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_write_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_write_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo new file mode 100644 index 000000000..179238254 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_sve.F new file mode 100644 index 000000000..0168ba713 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if2reg_adapter.svh new file mode 100644 index 000000000..f7dc857b5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_write_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_write_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_write_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_agent.svh new file mode 100644 index 000000000..d991ed3fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_write_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_configuration.svh new file mode 100644 index 000000000..e0d213f15 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_write_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_write_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_write_if_configuration_s fuse_ctrl_core_axi_write_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_write_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_if_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_write_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_write_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_write_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_write_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver.svh new file mode 100644 index 000000000..33543d00f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_write_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_write_if_driver_bfm. +`fuse_ctrl_core_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_if_initiator_s fuse_ctrl_core_axi_write_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_write_if_driver_bfm. +`fuse_ctrl_core_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_if_responder_s fuse_ctrl_core_axi_write_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_write_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_write_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_write_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_write_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver_bfm.sv new file mode 100644 index 000000000..8b920cc3e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver_bfm.sv @@ -0,0 +1,429 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_write_if signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_write_if driver through a virtual interface +// handle in the fuse_ctrl_core_axi_write_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_write_if_if. +// +// Input signals from the fuse_ctrl_core_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_write_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_if_macros.svh" + +interface fuse_ctrl_core_axi_write_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_write_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] awaddr_i; + reg [AW-1:0] awaddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] awburst_o = 'bz; + tri [2:0] awsize_i; + reg [2:0] awsize_o = 'bz; + tri [7:0] awlen_i; + reg [7:0] awlen_o = 'bz; + tri [UW-1:0] awuser_i; + reg [UW-1:0] awuser_o = 'bz; + tri [UW-1:0] awid_i; + reg [UW-1:0] awid_o = 'bz; + tri awlock_i; + reg awlock_o = 'bz; + tri awvalid_i; + reg awvalid_o = 'bz; + tri [DW-1:0] wdata_i; + reg [DW-1:0] wdata_o = 'bz; + tri [DW/8-1:0] wstrb_i; + reg [DW/8-1:0] wstrb_o = 'bz; + tri wvalid_i; + reg wvalid_o = 'bz; + tri wlast_i; + reg wlast_o = 'bz; + tri bready_i; + reg bready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.awaddr = (initiator_responder == INITIATOR) ? awaddr_o : 'bz; + assign awaddr_i = bus.awaddr; + assign bus.awburst = (initiator_responder == INITIATOR) ? awburst_o : 'bz; + assign awburst_i = bus.awburst; + assign bus.awsize = (initiator_responder == INITIATOR) ? awsize_o : 'bz; + assign awsize_i = bus.awsize; + assign bus.awlen = (initiator_responder == INITIATOR) ? awlen_o : 'bz; + assign awlen_i = bus.awlen; + assign bus.awuser = (initiator_responder == INITIATOR) ? awuser_o : 'bz; + assign awuser_i = bus.awuser; + assign bus.awid = (initiator_responder == INITIATOR) ? awid_o : 'bz; + assign awid_i = bus.awid; + assign bus.awlock = (initiator_responder == INITIATOR) ? awlock_o : 'bz; + assign awlock_i = bus.awlock; + assign bus.awvalid = (initiator_responder == INITIATOR) ? awvalid_o : 'bz; + assign awvalid_i = bus.awvalid; + assign bus.wdata = (initiator_responder == INITIATOR) ? wdata_o : 'bz; + assign wdata_i = bus.wdata; + assign bus.wstrb = (initiator_responder == INITIATOR) ? wstrb_o : 'bz; + assign wstrb_i = bus.wstrb; + assign bus.wvalid = (initiator_responder == INITIATOR) ? wvalid_o : 'bz; + assign wvalid_i = bus.wvalid; + assign bus.wlast = (initiator_responder == INITIATOR) ? wlast_o : 'bz; + assign wlast_i = bus.wlast; + assign bus.bready = (initiator_responder == INITIATOR) ? bready_o : 'bz; + assign bready_i = bus.bready; + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_write_if_pkg::fuse_ctrl_core_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_write_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_write_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_write_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_if_driver_bfm. + `fuse_ctrl_core_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_if_driver_bfm. + `fuse_ctrl_core_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + awaddr_o <= 'bz; + awburst_o <= 'bz; + awsize_o <= 'bz; + awlen_o <= 'bz; + awuser_o <= 'bz; + awid_o <= 'bz; + awlock_o <= 'bz; + awvalid_o <= 'bz; + wdata_o <= 'bz; + wstrb_o <= 'bz; + wvalid_o <= 'bz; + wlast_o <= 'bz; + bready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_write_if_configuration_s fuse_ctrl_core_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_write_if_initiator_s fuse_ctrl_core_axi_write_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_write_if_responder_s fuse_ctrl_core_axi_write_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_write_if_initiator_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Members within the fuse_ctrl_core_axi_write_if_responder_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + initiator_struct = fuse_ctrl_core_axi_write_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // awaddr_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [AW-1:0] + // awburst_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // awsize_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [2:0] + // awlen_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [7:0] + // awuser_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [UW-1:0] + // awid_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [UW-1:0] + // awlock_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // + // awvalid_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // + // wdata_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [DW-1:0] + // wstrb_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [DW/8-1:0] + // wvalid_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // + // wlast_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // + // bready_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_write_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_write_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_write_if_initiator_s fuse_ctrl_core_axi_write_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_write_if_responder_s fuse_ctrl_core_axi_write_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_write_if_initiator_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Variables within the fuse_ctrl_core_axi_write_if_responder_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awlock_i; // + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awvalid_i; // + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = wvalid_i; // + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = wlast_i; // + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = bready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_write_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_write_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_if.sv new file mode 100644 index 000000000..b0047fa1f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_if.sv @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_write_if interface signals. +// It is instantiated once per fuse_ctrl_core_axi_write_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_write_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_write_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awaddr), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awburst), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awsize), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awlen), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awuser), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awlock), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.wdata), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.wstrb), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.wvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.wlast), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.bready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_if_pkg_hdl::*; + +interface fuse_ctrl_core_axi_write_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] awaddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst, + inout tri [2:0] awsize, + inout tri [7:0] awlen, + inout tri [UW-1:0] awuser, + inout tri [UW-1:0] awid, + inout tri awlock, + inout tri awvalid, + inout tri [DW-1:0] wdata, + inout tri [DW/8-1:0] wstrb, + inout tri wvalid, + inout tri wlast, + inout tri bready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output awaddr, + output awburst, + output awsize, + output awlen, + output awuser, + output awid, + output awlock, + output awvalid, + output wdata, + output wstrb, + output wvalid, + output wlast, + output bready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_macros.svh new file mode 100644 index 000000000..b8fd5a307 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_macros.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_write_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_write_if_configuration class. +// + `define fuse_ctrl_core_axi_write_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_write_if_configuration_s; + + `define fuse_ctrl_core_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_if_configuration_s to_struct();\ + fuse_ctrl_core_axi_write_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_write_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_write_if_configuration_s fuse_ctrl_core_axi_write_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_write_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_write_if_transaction class. +// + `define fuse_ctrl_core_axi_write_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_if_monitor_s; + + `define fuse_ctrl_core_axi_write_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_if_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_write_if_monitor_struct = \ + { \ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_write_if_monitor_s fuse_ctrl_core_axi_write_if_monitor_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_if_initiator_s; + + `define fuse_ctrl_core_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_if_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_write_if_initiator_struct = \ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_write_if_initiator_s fuse_ctrl_core_axi_write_if_initiator_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_if_responder_s; + + `define fuse_ctrl_core_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_if_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_write_if_responder_struct = \ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_if_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_write_if_responder_s fuse_ctrl_core_axi_write_if_responder_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor.svh new file mode 100644 index 000000000..a0022cc66 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_write_if transactions observed by the +// fuse_ctrl_core_axi_write_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_write_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_write_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_write_if_monitor_s fuse_ctrl_core_axi_write_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_write_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv new file mode 100644 index 000000000..de0093e53 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv @@ -0,0 +1,248 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_write_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_write_if monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_write_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_write_if_if. +// +// Input signals from the fuse_ctrl_core_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_write_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_if_macros.svh" + + +interface fuse_ctrl_core_axi_write_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_write_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_write_if_MONITOR_STRUCT + fuse_ctrl_core_axi_write_if_monitor_s fuse_ctrl_core_axi_write_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_write_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] awaddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + tri [2:0] awsize_i; + tri [7:0] awlen_i; + tri [UW-1:0] awuser_i; + tri [UW-1:0] awid_i; + tri awlock_i; + tri awvalid_i; + tri [DW-1:0] wdata_i; + tri [DW/8-1:0] wstrb_i; + tri wvalid_i; + tri wlast_i; + tri bready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awaddr_i = bus.awaddr; + assign awburst_i = bus.awburst; + assign awsize_i = bus.awsize; + assign awlen_i = bus.awlen; + assign awuser_i = bus.awuser; + assign awid_i = bus.awid; + assign awlock_i = bus.awlock; + assign awvalid_i = bus.awvalid; + assign wdata_i = bus.wdata; + assign wstrb_i = bus.wstrb; + assign wvalid_i = bus.wvalid; + assign wlast_i = bus.wlast; + assign bready_i = bus.bready; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_write_if_pkg::fuse_ctrl_core_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_write_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_write_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_write_if_configuration_s fuse_ctrl_core_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_write_if_monitor_s fuse_ctrl_core_axi_write_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awaddr + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awvalid + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awburst + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awsize + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awlen + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awuser + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awid + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awlock + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_wdata + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_wstrb + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_wvalid + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_wlast + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_bready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awlock_i; // + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awvalid_i; // + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = wvalid_i; // + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = wlast_i; // + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = bready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_random_sequence.svh new file mode 100644 index 000000000..77120c18e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_write_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_write_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_write_if_random_sequence::body()-fuse_ctrl_core_axi_write_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_write_if_driver_bfm via the sequencer and fuse_ctrl_core_axi_write_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_write_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_responder_sequence.svh new file mode 100644 index 000000000..ed1c8c6bd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_write_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_sequence_base.svh new file mode 100644 index 000000000..122b3d543 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_if_transaction_req_t; + fuse_ctrl_core_axi_write_if_transaction_req_t req; + typedef fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_if_transaction_rsp_t; + fuse_ctrl_core_axi_write_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_write_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_write_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction.svh new file mode 100644 index 000000000..3298d1196 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction.svh @@ -0,0 +1,256 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_write_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] core_awaddr ; + logic core_awvalid ; + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + logic [2:0] core_awsize ; + logic [7:0] core_awlen ; + logic [UW-1:0] core_awuser ; + logic [IW-1:0] core_awid ; + logic core_awlock ; + logic [DW-1:0] core_wdata ; + logic [DW/8 - 1:0] core_wstrb ; + logic core_wvalid ; + logic core_wlast ; + logic core_bready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_write_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_write_if_monitor and fuse_ctrl_core_axi_write_if_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_MONITOR_STRUCT + fuse_ctrl_core_axi_write_if_monitor_s fuse_ctrl_core_axi_write_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_if_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_if_initiator_s fuse_ctrl_core_axi_write_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_if_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_if_responder_s fuse_ctrl_core_axi_write_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_if_responder_struct. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awaddr:0x%x core_awvalid:0x%x core_awburst:0x%x core_awsize:0x%x core_awlen:0x%x core_awuser:0x%x core_awid:0x%x core_awlock:0x%x core_wdata:0x%x core_wstrb:0x%x core_wvalid:0x%x core_wlast:0x%x core_bready:0x%x ",core_awaddr,core_awvalid,core_awburst,core_awsize,core_awlen,core_awuser,core_awid,core_awlock,core_wdata,core_wstrb,core_wvalid,core_wlast,core_bready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_wdata == RHS.core_wdata) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awaddr = RHS.core_awaddr; + this.core_awvalid = RHS.core_awvalid; + this.core_awburst = RHS.core_awburst; + this.core_awsize = RHS.core_awsize; + this.core_awlen = RHS.core_awlen; + this.core_awuser = RHS.core_awuser; + this.core_awid = RHS.core_awid; + this.core_awlock = RHS.core_awlock; + this.core_wdata = RHS.core_wdata; + this.core_wstrb = RHS.core_wstrb; + this.core_wvalid = RHS.core_wvalid; + this.core_wlast = RHS.core_wlast; + this.core_bready = RHS.core_bready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_write_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awaddr,"core_awaddr"); + $add_attribute(transaction_view_h,core_awvalid,"core_awvalid"); + $add_attribute(transaction_view_h,core_awburst,"core_awburst"); + $add_attribute(transaction_view_h,core_awsize,"core_awsize"); + $add_attribute(transaction_view_h,core_awlen,"core_awlen"); + $add_attribute(transaction_view_h,core_awuser,"core_awuser"); + $add_attribute(transaction_view_h,core_awid,"core_awid"); + $add_attribute(transaction_view_h,core_awlock,"core_awlock"); + $add_attribute(transaction_view_h,core_wdata,"core_wdata"); + $add_attribute(transaction_view_h,core_wstrb,"core_wstrb"); + $add_attribute(transaction_view_h,core_wvalid,"core_wvalid"); + $add_attribute(transaction_view_h,core_wlast,"core_wlast"); + $add_attribute(transaction_view_h,core_bready,"core_bready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction_coverage.svh new file mode 100644 index 000000000..3f905316d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction_coverage.svh @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_write_if transaction information using +// a covergroup named fuse_ctrl_core_axi_write_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_write_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awaddr: coverpoint coverage_trans.core_awaddr; + core_awvalid: coverpoint coverage_trans.core_awvalid; + core_awburst: coverpoint coverage_trans.core_awburst; + core_awsize: coverpoint coverage_trans.core_awsize; + core_awlen: coverpoint coverage_trans.core_awlen; + core_awuser: coverpoint coverage_trans.core_awuser; + core_awid: coverpoint coverage_trans.core_awid; + core_awlock: coverpoint coverage_trans.core_awlock; + core_wdata: coverpoint coverage_trans.core_wdata; + core_wstrb: coverpoint coverage_trans.core_wstrb; + core_wvalid: coverpoint coverage_trans.core_wvalid; + core_wlast: coverpoint coverage_trans.core_wlast; + core_bready: coverpoint coverage_trans.core_bready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_write_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_write_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_write_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/yaml/fuse_ctrl_core_axi_write_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/yaml/fuse_ctrl_core_axi_write_if_interface.yaml new file mode 100644 index 000000000..242a9b639 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/yaml/fuse_ctrl_core_axi_write_if_interface.yaml @@ -0,0 +1,161 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_write_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: awaddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: awburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: awsize + reset_value: '''bz' + width: '3' + - dir: output + name: awlen + reset_value: '''bz' + width: '8' + - dir: output + name: awuser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awid + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awlock + reset_value: '''bz' + width: '1' + - dir: output + name: awvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wdata + reset_value: '''bz' + width: '[''DW'']' + - dir: output + name: wstrb + reset_value: '''bz' + width: '[''DW/8'']' + - dir: output + name: wvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wlast + reset_value: '''bz' + width: '1' + - dir: output + name: bready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: core_awaddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awuser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wstrb + type: logic [DW/8 - 1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_bready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.project new file mode 100644 index 000000000..f33bf59ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_write_in_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.svproject new file mode 100644 index 000000000..3d3a99047 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/Makefile new file mode 100644 index 000000000..f507d2ab2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_write_in_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_write_in_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hvl.f + +fuse_ctrl_core_axi_write_in_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hdl.f + +fuse_ctrl_core_axi_write_in_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_write_in_if_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_write_in_if_pkg +COMP_fuse_ctrl_core_axi_write_in_if_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_write_in_if_pkg +COMP_fuse_ctrl_core_axi_write_in_if_PKG_TGT = $(COMP_fuse_ctrl_core_axi_write_in_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_write_in_if_pkg: $(COMP_fuse_ctrl_core_axi_write_in_if_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_write_in_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_write_in_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_write_in_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_in_if_pkg += -I$(fuse_ctrl_core_axi_write_in_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_in_if_pkg += $(fuse_ctrl_core_axi_write_in_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_write_in_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_write_in_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_write_in_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_write_in_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/compile.do new file mode 100644 index 000000000..b42d44e51 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_write_in_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if.compile new file mode 100644 index 000000000..a65a64cbf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_write_in_if_hvl.compile + - fuse_ctrl_core_axi_write_in_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_bfm.vinfo new file mode 100644 index 000000000..cd1ff68b7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_write_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_write_in_if_if.sv +src/fuse_ctrl_core_axi_write_in_if_driver_bfm.sv +src/fuse_ctrl_core_axi_write_in_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_common.compile new file mode 100644 index 000000000..be72a0784 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hdl.f new file mode 100644 index 000000000..495338020 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hvl.f new file mode 100644 index 000000000..6bf770355 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_xrtl.f new file mode 100644 index 000000000..fef44745f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hdl.compile new file mode 100644 index 000000000..8a805dd85 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_write_in_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_write_in_if_if.sv + - src/fuse_ctrl_core_axi_write_in_if_monitor_bfm.sv + - src/fuse_ctrl_core_axi_write_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hvl.compile new file mode 100644 index 000000000..55e60dcf3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_write_in_if_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_write_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.sv new file mode 100644 index 000000000..6a3db4ff3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_in_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_write_in_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_write_in_if_macros.svh" + + export fuse_ctrl_core_axi_write_in_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_write_in_if_typedefs.svh" + `include "src/fuse_ctrl_core_axi_write_in_if_transaction.svh" + + `include "src/fuse_ctrl_core_axi_write_in_if_configuration.svh" + `include "src/fuse_ctrl_core_axi_write_in_if_driver.svh" + `include "src/fuse_ctrl_core_axi_write_in_if_monitor.svh" + + `include "src/fuse_ctrl_core_axi_write_in_if_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_write_in_if_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_write_in_if_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_write_in_if_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_write_in_if2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_write_in_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.vinfo new file mode 100644 index 000000000..d62098632 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_write_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_write_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv new file mode 100644 index 000000000..0f242e32a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_in_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_write_in_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_write_in_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.vinfo new file mode 100644 index 000000000..b94d858eb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_sve.F new file mode 100644 index 000000000..0586654a2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if2reg_adapter.svh new file mode 100644 index 000000000..f64280b7a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_write_in_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_write_in_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_write_in_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_agent.svh new file mode 100644 index 000000000..42ed311c4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_write_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_write_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_write_in_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_configuration.svh new file mode 100644 index 000000000..d1e8058cb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_write_in_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_write_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_write_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_write_in_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_write_in_if_configuration_s fuse_ctrl_core_axi_write_in_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_write_in_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_if_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_write_in_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_write_in_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_write_in_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_write_in_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_in_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_write_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver.svh new file mode 100644 index 000000000..1dddeaea6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_write_in_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_write_in_if_driver and fuse_ctrl_core_axi_write_in_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_write_in_if_driver_bfm. +`fuse_ctrl_core_axi_write_in_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_in_if_initiator_s fuse_ctrl_core_axi_write_in_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_write_in_if_driver and fuse_ctrl_core_axi_write_in_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_write_in_if_driver_bfm. +`fuse_ctrl_core_axi_write_in_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_in_if_responder_s fuse_ctrl_core_axi_write_in_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_write_in_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_write_in_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_write_in_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_write_in_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver_bfm.sv new file mode 100644 index 000000000..d54fd8571 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver_bfm.sv @@ -0,0 +1,429 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_write_in_if signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_write_in_if driver through a virtual interface +// handle in the fuse_ctrl_core_axi_write_in_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_write_in_if_if. +// +// Input signals from the fuse_ctrl_core_axi_write_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_write_in_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_in_if_macros.svh" + +interface fuse_ctrl_core_axi_write_in_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_write_in_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_in_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] awaddr_i; + reg [AW-1:0] awaddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] awburst_o = 'bz; + tri [2:0] awsize_i; + reg [2:0] awsize_o = 'bz; + tri [7:0] awlen_i; + reg [7:0] awlen_o = 'bz; + tri [UW-1:0] awuser_i; + reg [UW-1:0] awuser_o = 'bz; + tri [UW-1:0] awid_i; + reg [UW-1:0] awid_o = 'bz; + tri awlock_i; + reg awlock_o = 'bz; + tri awvalid_i; + reg awvalid_o = 'bz; + tri [DW-1:0] wdata_i; + reg [DW-1:0] wdata_o = 'bz; + tri [DW/8-1:0] wstrb_i; + reg [DW/8-1:0] wstrb_o = 'bz; + tri wvalid_i; + reg wvalid_o = 'bz; + tri wlast_i; + reg wlast_o = 'bz; + tri bready_i; + reg bready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.awaddr = (initiator_responder == INITIATOR) ? awaddr_o : 'bz; + assign awaddr_i = bus.awaddr; + assign bus.awburst = (initiator_responder == INITIATOR) ? awburst_o : 'bz; + assign awburst_i = bus.awburst; + assign bus.awsize = (initiator_responder == INITIATOR) ? awsize_o : 'bz; + assign awsize_i = bus.awsize; + assign bus.awlen = (initiator_responder == INITIATOR) ? awlen_o : 'bz; + assign awlen_i = bus.awlen; + assign bus.awuser = (initiator_responder == INITIATOR) ? awuser_o : 'bz; + assign awuser_i = bus.awuser; + assign bus.awid = (initiator_responder == INITIATOR) ? awid_o : 'bz; + assign awid_i = bus.awid; + assign bus.awlock = (initiator_responder == INITIATOR) ? awlock_o : 'bz; + assign awlock_i = bus.awlock; + assign bus.awvalid = (initiator_responder == INITIATOR) ? awvalid_o : 'bz; + assign awvalid_i = bus.awvalid; + assign bus.wdata = (initiator_responder == INITIATOR) ? wdata_o : 'bz; + assign wdata_i = bus.wdata; + assign bus.wstrb = (initiator_responder == INITIATOR) ? wstrb_o : 'bz; + assign wstrb_i = bus.wstrb; + assign bus.wvalid = (initiator_responder == INITIATOR) ? wvalid_o : 'bz; + assign wvalid_i = bus.wvalid; + assign bus.wlast = (initiator_responder == INITIATOR) ? wlast_o : 'bz; + assign wlast_i = bus.wlast; + assign bus.bready = (initiator_responder == INITIATOR) ? bready_o : 'bz; + assign bready_i = bus.bready; + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_write_in_if_pkg::fuse_ctrl_core_axi_write_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_write_in_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_write_in_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_write_in_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_in_if_driver and fuse_ctrl_core_axi_write_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_in_if_driver_bfm. + `fuse_ctrl_core_axi_write_in_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_in_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_write_in_if_driver and fuse_ctrl_core_axi_write_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_in_if_driver_bfm. + `fuse_ctrl_core_axi_write_in_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_in_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + awaddr_o <= 'bz; + awburst_o <= 'bz; + awsize_o <= 'bz; + awlen_o <= 'bz; + awuser_o <= 'bz; + awid_o <= 'bz; + awlock_o <= 'bz; + awvalid_o <= 'bz; + wdata_o <= 'bz; + wstrb_o <= 'bz; + wvalid_o <= 'bz; + wlast_o <= 'bz; + bready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_write_in_if_configuration_s fuse_ctrl_core_axi_write_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_write_in_if_initiator_s fuse_ctrl_core_axi_write_in_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_write_in_if_responder_s fuse_ctrl_core_axi_write_in_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_write_in_if_initiator_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Members within the fuse_ctrl_core_axi_write_in_if_responder_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + initiator_struct = fuse_ctrl_core_axi_write_in_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // awaddr_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [AW-1:0] + // awburst_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // awsize_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [2:0] + // awlen_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [7:0] + // awuser_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [UW-1:0] + // awid_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [UW-1:0] + // awlock_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // + // awvalid_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // + // wdata_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [DW-1:0] + // wstrb_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [DW/8-1:0] + // wvalid_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // + // wlast_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // + // bready_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_write_in_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_write_in_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_write_in_if_initiator_s fuse_ctrl_core_axi_write_in_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_write_in_if_responder_s fuse_ctrl_core_axi_write_in_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_write_in_if_initiator_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Variables within the fuse_ctrl_core_axi_write_in_if_responder_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awlock_i; // + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awvalid_i; // + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = wvalid_i; // + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = wlast_i; // + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = bready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_write_in_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_write_in_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_if.sv new file mode 100644 index 000000000..f8447e714 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_if.sv @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_write_in_if interface signals. +// It is instantiated once per fuse_ctrl_core_axi_write_in_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_write_in_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_write_in_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awaddr), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awburst), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awsize), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awlen), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awuser), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awlock), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.wdata), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.wstrb), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.wvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.wlast), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.bready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_in_if_pkg_hdl::*; + +interface fuse_ctrl_core_axi_write_in_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] awaddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst, + inout tri [2:0] awsize, + inout tri [7:0] awlen, + inout tri [UW-1:0] awuser, + inout tri [UW-1:0] awid, + inout tri awlock, + inout tri awvalid, + inout tri [DW-1:0] wdata, + inout tri [DW/8-1:0] wstrb, + inout tri wvalid, + inout tri wlast, + inout tri bready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output awaddr, + output awburst, + output awsize, + output awlen, + output awuser, + output awid, + output awlock, + output awvalid, + output wdata, + output wstrb, + output wvalid, + output wlast, + output bready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_macros.svh new file mode 100644 index 000000000..8f3e6b640 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_macros.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_write_in_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_write_in_if_configuration class. +// + `define fuse_ctrl_core_axi_write_in_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_write_in_if_configuration_s; + + `define fuse_ctrl_core_axi_write_in_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_if_configuration_s to_struct();\ + fuse_ctrl_core_axi_write_in_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_write_in_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_write_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_write_in_if_configuration_s fuse_ctrl_core_axi_write_in_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_write_in_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_write_in_if_transaction class. +// + `define fuse_ctrl_core_axi_write_in_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_in_if_monitor_s; + + `define fuse_ctrl_core_axi_write_in_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_if_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_write_in_if_monitor_struct = \ + { \ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_in_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_write_in_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_write_in_if_monitor_s fuse_ctrl_core_axi_write_in_if_monitor_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_in_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_write_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_in_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_in_if_initiator_s; + + `define fuse_ctrl_core_axi_write_in_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_if_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_write_in_if_initiator_struct = \ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_in_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_in_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_write_in_if_initiator_s fuse_ctrl_core_axi_write_in_if_initiator_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_in_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_write_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_in_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_in_if_responder_s; + + `define fuse_ctrl_core_axi_write_in_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_if_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_write_in_if_responder_struct = \ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_in_if_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_in_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_write_in_if_responder_s fuse_ctrl_core_axi_write_in_if_responder_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_in_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor.svh new file mode 100644 index 000000000..7689925cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_write_in_if transactions observed by the +// fuse_ctrl_core_axi_write_in_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_write_in_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_write_in_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_write_in_if_monitor_s fuse_ctrl_core_axi_write_in_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_write_in_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor_bfm.sv new file mode 100644 index 000000000..0b3ac9795 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor_bfm.sv @@ -0,0 +1,248 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_write_in_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_write_in_if monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_write_in_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_write_in_if_if. +// +// Input signals from the fuse_ctrl_core_axi_write_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_write_in_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_in_if_macros.svh" + + +interface fuse_ctrl_core_axi_write_in_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_write_in_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_in_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_write_in_if_MONITOR_STRUCT + fuse_ctrl_core_axi_write_in_if_monitor_s fuse_ctrl_core_axi_write_in_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_write_in_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] awaddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + tri [2:0] awsize_i; + tri [7:0] awlen_i; + tri [UW-1:0] awuser_i; + tri [UW-1:0] awid_i; + tri awlock_i; + tri awvalid_i; + tri [DW-1:0] wdata_i; + tri [DW/8-1:0] wstrb_i; + tri wvalid_i; + tri wlast_i; + tri bready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awaddr_i = bus.awaddr; + assign awburst_i = bus.awburst; + assign awsize_i = bus.awsize; + assign awlen_i = bus.awlen; + assign awuser_i = bus.awuser; + assign awid_i = bus.awid; + assign awlock_i = bus.awlock; + assign awvalid_i = bus.awvalid; + assign wdata_i = bus.wdata; + assign wstrb_i = bus.wstrb; + assign wvalid_i = bus.wvalid; + assign wlast_i = bus.wlast; + assign bready_i = bus.bready; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_write_in_if_pkg::fuse_ctrl_core_axi_write_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_write_in_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_write_in_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_write_in_if_configuration_s fuse_ctrl_core_axi_write_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_write_in_if_monitor_s fuse_ctrl_core_axi_write_in_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awaddr + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awvalid + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awburst + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awsize + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awlen + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awuser + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awid + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awlock + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_wdata + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_wstrb + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_wvalid + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_wlast + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_bready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awlock_i; // + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awvalid_i; // + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = wvalid_i; // + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = wlast_i; // + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = bready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_random_sequence.svh new file mode 100644 index 000000000..1be509e5a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_write_in_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_write_in_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_write_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_write_in_if_random_sequence::body()-fuse_ctrl_core_axi_write_in_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_write_in_if_driver_bfm via the sequencer and fuse_ctrl_core_axi_write_in_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_write_in_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_responder_sequence.svh new file mode 100644 index 000000000..4a94ad4e8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_write_in_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_write_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_sequence_base.svh new file mode 100644 index 000000000..ecbf6b8a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_in_if_transaction_req_t; + fuse_ctrl_core_axi_write_in_if_transaction_req_t req; + typedef fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_in_if_transaction_rsp_t; + fuse_ctrl_core_axi_write_in_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_write_in_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_write_in_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction.svh new file mode 100644 index 000000000..efec989b8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction.svh @@ -0,0 +1,256 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_write_in_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] core_awaddr ; + logic core_awvalid ; + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + logic [2:0] core_awsize ; + logic [7:0] core_awlen ; + logic [UW-1:0] core_awuser ; + logic [IW-1:0] core_awid ; + logic core_awlock ; + logic [DW-1:0] core_wdata ; + logic [DW/8 - 1:0] core_wstrb ; + logic core_wvalid ; + logic core_wlast ; + logic core_bready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_write_in_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_write_in_if_monitor and fuse_ctrl_core_axi_write_in_if_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_MONITOR_STRUCT + fuse_ctrl_core_axi_write_in_if_monitor_s fuse_ctrl_core_axi_write_in_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_in_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_if_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_in_if_driver and fuse_ctrl_core_axi_write_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_in_if_initiator_s fuse_ctrl_core_axi_write_in_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_in_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_if_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_write_in_if_driver and fuse_ctrl_core_axi_write_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_in_if_responder_s fuse_ctrl_core_axi_write_in_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_in_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_if_responder_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awaddr:0x%x core_awvalid:0x%x core_awburst:0x%x core_awsize:0x%x core_awlen:0x%x core_awuser:0x%x core_awid:0x%x core_awlock:0x%x core_wdata:0x%x core_wstrb:0x%x core_wvalid:0x%x core_wlast:0x%x core_bready:0x%x ",core_awaddr,core_awvalid,core_awburst,core_awsize,core_awlen,core_awuser,core_awid,core_awlock,core_wdata,core_wstrb,core_wvalid,core_wlast,core_bready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_wdata == RHS.core_wdata) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awaddr = RHS.core_awaddr; + this.core_awvalid = RHS.core_awvalid; + this.core_awburst = RHS.core_awburst; + this.core_awsize = RHS.core_awsize; + this.core_awlen = RHS.core_awlen; + this.core_awuser = RHS.core_awuser; + this.core_awid = RHS.core_awid; + this.core_awlock = RHS.core_awlock; + this.core_wdata = RHS.core_wdata; + this.core_wstrb = RHS.core_wstrb; + this.core_wvalid = RHS.core_wvalid; + this.core_wlast = RHS.core_wlast; + this.core_bready = RHS.core_bready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_write_in_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awaddr,"core_awaddr"); + $add_attribute(transaction_view_h,core_awvalid,"core_awvalid"); + $add_attribute(transaction_view_h,core_awburst,"core_awburst"); + $add_attribute(transaction_view_h,core_awsize,"core_awsize"); + $add_attribute(transaction_view_h,core_awlen,"core_awlen"); + $add_attribute(transaction_view_h,core_awuser,"core_awuser"); + $add_attribute(transaction_view_h,core_awid,"core_awid"); + $add_attribute(transaction_view_h,core_awlock,"core_awlock"); + $add_attribute(transaction_view_h,core_wdata,"core_wdata"); + $add_attribute(transaction_view_h,core_wstrb,"core_wstrb"); + $add_attribute(transaction_view_h,core_wvalid,"core_wvalid"); + $add_attribute(transaction_view_h,core_wlast,"core_wlast"); + $add_attribute(transaction_view_h,core_bready,"core_bready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction_coverage.svh new file mode 100644 index 000000000..fa56703da --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction_coverage.svh @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_write_in_if transaction information using +// a covergroup named fuse_ctrl_core_axi_write_in_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_write_in_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awaddr: coverpoint coverage_trans.core_awaddr; + core_awvalid: coverpoint coverage_trans.core_awvalid; + core_awburst: coverpoint coverage_trans.core_awburst; + core_awsize: coverpoint coverage_trans.core_awsize; + core_awlen: coverpoint coverage_trans.core_awlen; + core_awuser: coverpoint coverage_trans.core_awuser; + core_awid: coverpoint coverage_trans.core_awid; + core_awlock: coverpoint coverage_trans.core_awlock; + core_wdata: coverpoint coverage_trans.core_wdata; + core_wstrb: coverpoint coverage_trans.core_wstrb; + core_wvalid: coverpoint coverage_trans.core_wvalid; + core_wlast: coverpoint coverage_trans.core_wlast; + core_bready: coverpoint coverage_trans.core_bready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_write_in_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_write_in_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_in_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_write_in_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/yaml/fuse_ctrl_core_axi_write_in_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/yaml/fuse_ctrl_core_axi_write_in_if_interface.yaml new file mode 100644 index 000000000..a1fdac635 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/yaml/fuse_ctrl_core_axi_write_in_if_interface.yaml @@ -0,0 +1,161 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_write_in_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: awaddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: awburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: awsize + reset_value: '''bz' + width: '3' + - dir: output + name: awlen + reset_value: '''bz' + width: '8' + - dir: output + name: awuser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awid + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awlock + reset_value: '''bz' + width: '1' + - dir: output + name: awvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wdata + reset_value: '''bz' + width: '[''DW'']' + - dir: output + name: wstrb + reset_value: '''bz' + width: '[''DW/8'']' + - dir: output + name: wvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wlast + reset_value: '''bz' + width: '1' + - dir: output + name: bready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: core_awaddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awuser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wstrb + type: logic [DW/8 - 1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_bready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.project new file mode 100644 index 000000000..b26e81c0e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_write_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.svproject new file mode 100644 index 000000000..be11cb63e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/Makefile new file mode 100644 index 000000000..b9ea6af97 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_write_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_write_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hvl.f + +fuse_ctrl_core_axi_write_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hdl.f + +fuse_ctrl_core_axi_write_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_write_in_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_write_in_pkg +COMP_fuse_ctrl_core_axi_write_in_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_write_in_pkg +COMP_fuse_ctrl_core_axi_write_in_PKG_TGT = $(COMP_fuse_ctrl_core_axi_write_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_write_in_pkg: $(COMP_fuse_ctrl_core_axi_write_in_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_write_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_write_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_write_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_write_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_write_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_in_pkg += -I$(fuse_ctrl_core_axi_write_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_in_pkg += $(fuse_ctrl_core_axi_write_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_write_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_write_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_write_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_write_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/compile.do new file mode 100644 index 000000000..a2f727a47 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_write_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in.compile new file mode 100644 index 000000000..328de1745 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_write_in_hvl.compile + - fuse_ctrl_core_axi_write_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_bfm.vinfo new file mode 100644 index 000000000..8580294a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_write_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_write_in_if.sv +src/fuse_ctrl_core_axi_write_in_driver_bfm.sv +src/fuse_ctrl_core_axi_write_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_common.compile new file mode 100644 index 000000000..ebcb42c3c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_write_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hdl.f new file mode 100644 index 000000000..dcea9f3fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hvl.f new file mode 100644 index 000000000..0aa6cf48f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_xrtl.f new file mode 100644 index 000000000..9729a9fda --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hdl.compile new file mode 100644 index 000000000..b28a2bd69 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_write_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_write_in_if.sv + - src/fuse_ctrl_core_axi_write_in_monitor_bfm.sv + - src/fuse_ctrl_core_axi_write_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hvl.compile new file mode 100644 index 000000000..7801ce4bb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_write_in_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_write_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.sv new file mode 100644 index 000000000..af903832a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_write_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_write_in_macros.svh" + + export fuse_ctrl_core_axi_write_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_write_in_typedefs.svh" + `include "src/fuse_ctrl_core_axi_write_in_transaction.svh" + + `include "src/fuse_ctrl_core_axi_write_in_configuration.svh" + `include "src/fuse_ctrl_core_axi_write_in_driver.svh" + `include "src/fuse_ctrl_core_axi_write_in_monitor.svh" + + `include "src/fuse_ctrl_core_axi_write_in_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_write_in_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_write_in_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_write_in_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_write_in2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_write_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.vinfo new file mode 100644 index 000000000..07d2c9ac8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_write_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_write_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.sv new file mode 100644 index 000000000..48ee66303 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_write_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_write_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.vinfo new file mode 100644 index 000000000..5c56ef576 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_write_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_sve.F new file mode 100644 index 000000000..24bdc9fde --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in2reg_adapter.svh new file mode 100644 index 000000000..0265f70a4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_write_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_write_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_write_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_agent.svh new file mode 100644 index 000000000..2bd552ac5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_write_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_write_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_write_in_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_configuration.svh new file mode 100644 index 000000000..374ebfbd7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_write_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_write_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_write_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_write_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_write_in_configuration_s fuse_ctrl_core_axi_write_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_write_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_write_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_write_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_write_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_write_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_write_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver.svh new file mode 100644 index 000000000..2454403fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_write_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_write_in_driver and fuse_ctrl_core_axi_write_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_write_in_driver_bfm. +`fuse_ctrl_core_axi_write_in_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_in_initiator_s fuse_ctrl_core_axi_write_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_write_in_driver and fuse_ctrl_core_axi_write_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_write_in_driver_bfm. +`fuse_ctrl_core_axi_write_in_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_in_responder_s fuse_ctrl_core_axi_write_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_write_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_write_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_write_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_write_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver_bfm.sv new file mode 100644 index 000000000..934c0f86b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver_bfm.sv @@ -0,0 +1,429 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_write_in signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_write_in driver through a virtual interface +// handle in the fuse_ctrl_core_axi_write_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_write_in_if. +// +// Input signals from the fuse_ctrl_core_axi_write_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_write_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_in_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_in_macros.svh" + +interface fuse_ctrl_core_axi_write_in_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_write_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] awaddr_i; + reg [AW-1:0] awaddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] awburst_o = 'bz; + tri [2:0] awsize_i; + reg [2:0] awsize_o = 'bz; + tri [7:0] awlen_i; + reg [7:0] awlen_o = 'bz; + tri [UW-1:0] awuser_i; + reg [UW-1:0] awuser_o = 'bz; + tri [UW-1:0] awid_i; + reg [UW-1:0] awid_o = 'bz; + tri awlock_i; + reg awlock_o = 'bz; + tri awvalid_i; + reg awvalid_o = 'bz; + tri [DW-1:0] wdata_i; + reg [DW-1:0] wdata_o = 'bz; + tri [DW/8-1:0] wstrb_i; + reg [DW/8-1:0] wstrb_o = 'bz; + tri wvalid_i; + reg wvalid_o = 'bz; + tri wlast_i; + reg wlast_o = 'bz; + tri bready_i; + reg bready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.awaddr = (initiator_responder == INITIATOR) ? awaddr_o : 'bz; + assign awaddr_i = bus.awaddr; + assign bus.awburst = (initiator_responder == INITIATOR) ? awburst_o : 'bz; + assign awburst_i = bus.awburst; + assign bus.awsize = (initiator_responder == INITIATOR) ? awsize_o : 'bz; + assign awsize_i = bus.awsize; + assign bus.awlen = (initiator_responder == INITIATOR) ? awlen_o : 'bz; + assign awlen_i = bus.awlen; + assign bus.awuser = (initiator_responder == INITIATOR) ? awuser_o : 'bz; + assign awuser_i = bus.awuser; + assign bus.awid = (initiator_responder == INITIATOR) ? awid_o : 'bz; + assign awid_i = bus.awid; + assign bus.awlock = (initiator_responder == INITIATOR) ? awlock_o : 'bz; + assign awlock_i = bus.awlock; + assign bus.awvalid = (initiator_responder == INITIATOR) ? awvalid_o : 'bz; + assign awvalid_i = bus.awvalid; + assign bus.wdata = (initiator_responder == INITIATOR) ? wdata_o : 'bz; + assign wdata_i = bus.wdata; + assign bus.wstrb = (initiator_responder == INITIATOR) ? wstrb_o : 'bz; + assign wstrb_i = bus.wstrb; + assign bus.wvalid = (initiator_responder == INITIATOR) ? wvalid_o : 'bz; + assign wvalid_i = bus.wvalid; + assign bus.wlast = (initiator_responder == INITIATOR) ? wlast_o : 'bz; + assign wlast_i = bus.wlast; + assign bus.bready = (initiator_responder == INITIATOR) ? bready_o : 'bz; + assign bready_i = bus.bready; + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_write_in_pkg::fuse_ctrl_core_axi_write_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_write_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_write_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_write_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_in_driver and fuse_ctrl_core_axi_write_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_in_driver_bfm. + `fuse_ctrl_core_axi_write_in_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_write_in_driver and fuse_ctrl_core_axi_write_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_in_driver_bfm. + `fuse_ctrl_core_axi_write_in_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + awaddr_o <= 'bz; + awburst_o <= 'bz; + awsize_o <= 'bz; + awlen_o <= 'bz; + awuser_o <= 'bz; + awid_o <= 'bz; + awlock_o <= 'bz; + awvalid_o <= 'bz; + wdata_o <= 'bz; + wstrb_o <= 'bz; + wvalid_o <= 'bz; + wlast_o <= 'bz; + bready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_write_in_configuration_s fuse_ctrl_core_axi_write_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_write_in_initiator_s fuse_ctrl_core_axi_write_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_write_in_responder_s fuse_ctrl_core_axi_write_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_write_in_initiator_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Members within the fuse_ctrl_core_axi_write_in_responder_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + initiator_struct = fuse_ctrl_core_axi_write_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // awaddr_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [AW-1:0] + // awburst_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // awsize_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [2:0] + // awlen_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [7:0] + // awuser_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [UW-1:0] + // awid_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [UW-1:0] + // awlock_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // + // awvalid_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // + // wdata_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [DW-1:0] + // wstrb_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [DW/8-1:0] + // wvalid_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // + // wlast_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // + // bready_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_write_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_write_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_write_in_initiator_s fuse_ctrl_core_axi_write_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_write_in_responder_s fuse_ctrl_core_axi_write_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_write_in_initiator_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Variables within the fuse_ctrl_core_axi_write_in_responder_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awlock_i; // + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awvalid_i; // + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = wvalid_i; // + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = wlast_i; // + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = bready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_write_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_write_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_if.sv new file mode 100644 index 000000000..5208bddc6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_if.sv @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_write_in interface signals. +// It is instantiated once per fuse_ctrl_core_axi_write_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_write_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_write_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awaddr), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awburst), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awsize), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awlen), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awuser), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awlock), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.wdata), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.wstrb), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.wvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.wlast), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.bready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_in_pkg_hdl::*; + +interface fuse_ctrl_core_axi_write_in_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] awaddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst, + inout tri [2:0] awsize, + inout tri [7:0] awlen, + inout tri [UW-1:0] awuser, + inout tri [UW-1:0] awid, + inout tri awlock, + inout tri awvalid, + inout tri [DW-1:0] wdata, + inout tri [DW/8-1:0] wstrb, + inout tri wvalid, + inout tri wlast, + inout tri bready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output awaddr, + output awburst, + output awsize, + output awlen, + output awuser, + output awid, + output awlock, + output awvalid, + output wdata, + output wstrb, + output wvalid, + output wlast, + output bready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_macros.svh new file mode 100644 index 000000000..c925c1523 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_macros.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_write_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_write_in_configuration class. +// + `define fuse_ctrl_core_axi_write_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_write_in_configuration_s; + + `define fuse_ctrl_core_axi_write_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_configuration_s to_struct();\ + fuse_ctrl_core_axi_write_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_write_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_write_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_write_in_configuration_s fuse_ctrl_core_axi_write_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_write_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_write_in_transaction class. +// + `define fuse_ctrl_core_axi_write_in_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_in_monitor_s; + + `define fuse_ctrl_core_axi_write_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_write_in_monitor_struct = \ + { \ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_write_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_write_in_monitor_s fuse_ctrl_core_axi_write_in_monitor_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_write_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_in_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_in_initiator_s; + + `define fuse_ctrl_core_axi_write_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_write_in_initiator_struct = \ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_write_in_initiator_s fuse_ctrl_core_axi_write_in_initiator_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_write_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_in_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_in_responder_s; + + `define fuse_ctrl_core_axi_write_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_write_in_responder_struct = \ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_in_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_write_in_responder_s fuse_ctrl_core_axi_write_in_responder_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor.svh new file mode 100644 index 000000000..b17587874 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_write_in transactions observed by the +// fuse_ctrl_core_axi_write_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_write_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_write_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_write_in_monitor_s fuse_ctrl_core_axi_write_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_write_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor_bfm.sv new file mode 100644 index 000000000..f25132158 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor_bfm.sv @@ -0,0 +1,248 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_write_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_write_in monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_write_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_write_in_if. +// +// Input signals from the fuse_ctrl_core_axi_write_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_write_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_in_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_in_macros.svh" + + +interface fuse_ctrl_core_axi_write_in_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_write_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_write_in_MONITOR_STRUCT + fuse_ctrl_core_axi_write_in_monitor_s fuse_ctrl_core_axi_write_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_write_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] awaddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + tri [2:0] awsize_i; + tri [7:0] awlen_i; + tri [UW-1:0] awuser_i; + tri [UW-1:0] awid_i; + tri awlock_i; + tri awvalid_i; + tri [DW-1:0] wdata_i; + tri [DW/8-1:0] wstrb_i; + tri wvalid_i; + tri wlast_i; + tri bready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awaddr_i = bus.awaddr; + assign awburst_i = bus.awburst; + assign awsize_i = bus.awsize; + assign awlen_i = bus.awlen; + assign awuser_i = bus.awuser; + assign awid_i = bus.awid; + assign awlock_i = bus.awlock; + assign awvalid_i = bus.awvalid; + assign wdata_i = bus.wdata; + assign wstrb_i = bus.wstrb; + assign wvalid_i = bus.wvalid; + assign wlast_i = bus.wlast; + assign bready_i = bus.bready; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_write_in_pkg::fuse_ctrl_core_axi_write_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_write_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_write_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_write_in_configuration_s fuse_ctrl_core_axi_write_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_write_in_monitor_s fuse_ctrl_core_axi_write_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awaddr + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awvalid + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awburst + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awsize + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awlen + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awuser + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awid + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awlock + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_wdata + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_wstrb + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_wvalid + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_wlast + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_bready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awlock_i; // + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awvalid_i; // + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = wvalid_i; // + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = wlast_i; // + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = bready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_random_sequence.svh new file mode 100644 index 000000000..fd2c3c939 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_write_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_write_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_write_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_write_in_random_sequence::body()-fuse_ctrl_core_axi_write_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_write_in_driver_bfm via the sequencer and fuse_ctrl_core_axi_write_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_write_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_responder_sequence.svh new file mode 100644 index 000000000..6305f4d91 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_write_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_write_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_sequence_base.svh new file mode 100644 index 000000000..69be97677 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_in_transaction_req_t; + fuse_ctrl_core_axi_write_in_transaction_req_t req; + typedef fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_in_transaction_rsp_t; + fuse_ctrl_core_axi_write_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_write_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_write_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction.svh new file mode 100644 index 000000000..08595f6e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction.svh @@ -0,0 +1,256 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_write_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] core_awaddr ; + logic core_awvalid ; + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + logic [2:0] core_awsize ; + logic [7:0] core_awlen ; + logic [UW-1:0] core_awuser ; + logic [IW-1:0] core_awid ; + logic core_awlock ; + logic [DW-1:0] core_wdata ; + logic [DW/8 - 1:0] core_wstrb ; + logic core_wvalid ; + logic core_wlast ; + logic core_bready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_write_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_write_in_monitor and fuse_ctrl_core_axi_write_in_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_MONITOR_STRUCT + fuse_ctrl_core_axi_write_in_monitor_s fuse_ctrl_core_axi_write_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_in_driver and fuse_ctrl_core_axi_write_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_in_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_in_initiator_s fuse_ctrl_core_axi_write_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_write_in_driver and fuse_ctrl_core_axi_write_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_in_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_in_responder_s fuse_ctrl_core_axi_write_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_responder_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awaddr:0x%x core_awvalid:0x%x core_awburst:0x%x core_awsize:0x%x core_awlen:0x%x core_awuser:0x%x core_awid:0x%x core_awlock:0x%x core_wdata:0x%x core_wstrb:0x%x core_wvalid:0x%x core_wlast:0x%x core_bready:0x%x ",core_awaddr,core_awvalid,core_awburst,core_awsize,core_awlen,core_awuser,core_awid,core_awlock,core_wdata,core_wstrb,core_wvalid,core_wlast,core_bready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_wdata == RHS.core_wdata) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awaddr = RHS.core_awaddr; + this.core_awvalid = RHS.core_awvalid; + this.core_awburst = RHS.core_awburst; + this.core_awsize = RHS.core_awsize; + this.core_awlen = RHS.core_awlen; + this.core_awuser = RHS.core_awuser; + this.core_awid = RHS.core_awid; + this.core_awlock = RHS.core_awlock; + this.core_wdata = RHS.core_wdata; + this.core_wstrb = RHS.core_wstrb; + this.core_wvalid = RHS.core_wvalid; + this.core_wlast = RHS.core_wlast; + this.core_bready = RHS.core_bready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_write_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awaddr,"core_awaddr"); + $add_attribute(transaction_view_h,core_awvalid,"core_awvalid"); + $add_attribute(transaction_view_h,core_awburst,"core_awburst"); + $add_attribute(transaction_view_h,core_awsize,"core_awsize"); + $add_attribute(transaction_view_h,core_awlen,"core_awlen"); + $add_attribute(transaction_view_h,core_awuser,"core_awuser"); + $add_attribute(transaction_view_h,core_awid,"core_awid"); + $add_attribute(transaction_view_h,core_awlock,"core_awlock"); + $add_attribute(transaction_view_h,core_wdata,"core_wdata"); + $add_attribute(transaction_view_h,core_wstrb,"core_wstrb"); + $add_attribute(transaction_view_h,core_wvalid,"core_wvalid"); + $add_attribute(transaction_view_h,core_wlast,"core_wlast"); + $add_attribute(transaction_view_h,core_bready,"core_bready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction_coverage.svh new file mode 100644 index 000000000..8fd417418 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction_coverage.svh @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_write_in transaction information using +// a covergroup named fuse_ctrl_core_axi_write_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_write_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awaddr: coverpoint coverage_trans.core_awaddr; + core_awvalid: coverpoint coverage_trans.core_awvalid; + core_awburst: coverpoint coverage_trans.core_awburst; + core_awsize: coverpoint coverage_trans.core_awsize; + core_awlen: coverpoint coverage_trans.core_awlen; + core_awuser: coverpoint coverage_trans.core_awuser; + core_awid: coverpoint coverage_trans.core_awid; + core_awlock: coverpoint coverage_trans.core_awlock; + core_wdata: coverpoint coverage_trans.core_wdata; + core_wstrb: coverpoint coverage_trans.core_wstrb; + core_wvalid: coverpoint coverage_trans.core_wvalid; + core_wlast: coverpoint coverage_trans.core_wlast; + core_bready: coverpoint coverage_trans.core_bready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_write_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_write_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_write_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/yaml/fuse_ctrl_core_axi_write_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/yaml/fuse_ctrl_core_axi_write_in_interface.yaml new file mode 100644 index 000000000..9882e7c50 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/yaml/fuse_ctrl_core_axi_write_in_interface.yaml @@ -0,0 +1,161 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_write_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: awaddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: awburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: awsize + reset_value: '''bz' + width: '3' + - dir: output + name: awlen + reset_value: '''bz' + width: '8' + - dir: output + name: awuser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awid + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awlock + reset_value: '''bz' + width: '1' + - dir: output + name: awvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wdata + reset_value: '''bz' + width: '[''DW'']' + - dir: output + name: wstrb + reset_value: '''bz' + width: '[''DW/8'']' + - dir: output + name: wvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wlast + reset_value: '''bz' + width: '1' + - dir: output + name: bready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: core_awaddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awuser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wstrb + type: logic [DW/8 - 1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_bready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.project new file mode 100644 index 000000000..f8447cc2e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_write_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.svproject new file mode 100644 index 000000000..4af4ad18e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/Makefile new file mode 100644 index 000000000..9c70bece5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_write_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_write_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hvl.f + +fuse_ctrl_core_axi_write_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hdl.f + +fuse_ctrl_core_axi_write_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_write_out_if_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_write_out_if_pkg +COMP_fuse_ctrl_core_axi_write_out_if_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_write_out_if_pkg +COMP_fuse_ctrl_core_axi_write_out_if_PKG_TGT = $(COMP_fuse_ctrl_core_axi_write_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_write_out_if_pkg: $(COMP_fuse_ctrl_core_axi_write_out_if_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_write_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_write_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_write_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_out_if_pkg += -I$(fuse_ctrl_core_axi_write_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_out_if_pkg += $(fuse_ctrl_core_axi_write_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_write_out_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_write_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_write_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_write_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/compile.do new file mode 100644 index 000000000..a150aebd7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_write_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if.compile new file mode 100644 index 000000000..019584b20 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_write_out_if_hvl.compile + - fuse_ctrl_core_axi_write_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_bfm.vinfo new file mode 100644 index 000000000..3e0319cf4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_write_out_if_if.sv +src/fuse_ctrl_core_axi_write_out_if_driver_bfm.sv +src/fuse_ctrl_core_axi_write_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_common.compile new file mode 100644 index 000000000..7e6930876 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hdl.f new file mode 100644 index 000000000..02ef8e42c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hvl.f new file mode 100644 index 000000000..6c0fbb4c3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_xrtl.f new file mode 100644 index 000000000..d0c02e170 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hdl.compile new file mode 100644 index 000000000..9deb2f5cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_write_out_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_write_out_if_if.sv + - src/fuse_ctrl_core_axi_write_out_if_monitor_bfm.sv + - src/fuse_ctrl_core_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hvl.compile new file mode 100644 index 000000000..eeb57fb37 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_write_out_if_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.sv new file mode 100644 index 000000000..049a79ab9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_write_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_write_out_if_macros.svh" + + export fuse_ctrl_core_axi_write_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_write_out_if_typedefs.svh" + `include "src/fuse_ctrl_core_axi_write_out_if_transaction.svh" + + `include "src/fuse_ctrl_core_axi_write_out_if_configuration.svh" + `include "src/fuse_ctrl_core_axi_write_out_if_driver.svh" + `include "src/fuse_ctrl_core_axi_write_out_if_monitor.svh" + + `include "src/fuse_ctrl_core_axi_write_out_if_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_write_out_if_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_write_out_if_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_write_out_if_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_write_out_if2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_write_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.vinfo new file mode 100644 index 000000000..94eb5cdef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv new file mode 100644 index 000000000..ca03d31ac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_write_out_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_write_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..2ef500d08 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_sve.F new file mode 100644 index 000000000..ad8763dab --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if2reg_adapter.svh new file mode 100644 index 000000000..a62903564 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_write_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_write_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_write_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_agent.svh new file mode 100644 index 000000000..8cbb38cfe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_write_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_configuration.svh new file mode 100644 index 000000000..6310b6980 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_write_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_write_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_write_out_if_configuration_s fuse_ctrl_core_axi_write_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_write_out_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_if_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_write_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_write_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_write_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_write_out_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver.svh new file mode 100644 index 000000000..700a867c2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_write_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_write_out_if_driver and fuse_ctrl_core_axi_write_out_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_write_out_if_driver_bfm. +`fuse_ctrl_core_axi_write_out_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_out_if_initiator_s fuse_ctrl_core_axi_write_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_write_out_if_driver and fuse_ctrl_core_axi_write_out_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_write_out_if_driver_bfm. +`fuse_ctrl_core_axi_write_out_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_out_if_responder_s fuse_ctrl_core_axi_write_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_write_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_write_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_write_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_write_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver_bfm.sv new file mode 100644 index 000000000..546de39a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_write_out_if signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_write_out_if driver through a virtual interface +// handle in the fuse_ctrl_core_axi_write_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_write_out_if_if. +// +// Input signals from the fuse_ctrl_core_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_write_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_out_if_macros.svh" + +interface fuse_ctrl_core_axi_write_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_write_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_write_out_if_pkg::fuse_ctrl_core_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_write_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_write_out_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_write_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_out_if_driver and fuse_ctrl_core_axi_write_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_out_if_driver_bfm. + `fuse_ctrl_core_axi_write_out_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_write_out_if_driver and fuse_ctrl_core_axi_write_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_out_if_driver_bfm. + `fuse_ctrl_core_axi_write_out_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_write_out_if_configuration_s fuse_ctrl_core_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_write_out_if_initiator_s fuse_ctrl_core_axi_write_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_write_out_if_responder_s fuse_ctrl_core_axi_write_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_write_out_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Members within the fuse_ctrl_core_axi_write_out_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + initiator_struct = fuse_ctrl_core_axi_write_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_core_axi_write_out_if_responder_struct.xyz = awready_i; // + // fuse_ctrl_core_axi_write_out_if_responder_struct.xyz = wready_i; // + // fuse_ctrl_core_axi_write_out_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_out_if_responder_struct.xyz = bid_i; // + // fuse_ctrl_core_axi_write_out_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_write_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_write_out_if_initiator_s fuse_ctrl_core_axi_write_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_write_out_if_responder_s fuse_ctrl_core_axi_write_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_write_out_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Variables within the fuse_ctrl_core_axi_write_out_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= fuse_ctrl_core_axi_write_out_if_initiator_struct.xyz; // + // wready_o <= fuse_ctrl_core_axi_write_out_if_initiator_struct.xyz; // + // bresp_o <= fuse_ctrl_core_axi_write_out_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= fuse_ctrl_core_axi_write_out_if_initiator_struct.xyz; // + // bvalid_o <= fuse_ctrl_core_axi_write_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_write_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_if.sv new file mode 100644 index 000000000..2be6f57ed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_write_out_if interface signals. +// It is instantiated once per fuse_ctrl_core_axi_write_out_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_write_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_write_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_write_out_if_bus.awready), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_if_bus.wready), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_if_bus.bresp), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_if_bus.bid), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_out_if_pkg_hdl::*; + +interface fuse_ctrl_core_axi_write_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_macros.svh new file mode 100644 index 000000000..0e6c3c0de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_write_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_write_out_if_configuration class. +// + `define fuse_ctrl_core_axi_write_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_write_out_if_configuration_s; + + `define fuse_ctrl_core_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_if_configuration_s to_struct();\ + fuse_ctrl_core_axi_write_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_write_out_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_write_out_if_configuration_s fuse_ctrl_core_axi_write_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_write_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_write_out_if_transaction class. +// + `define fuse_ctrl_core_axi_write_out_if_MONITOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_ctrl_core_axi_write_out_if_monitor_s; + + `define fuse_ctrl_core_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_if_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_write_out_if_monitor_struct = \ + { \ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_ctrl_core_axi_write_out_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_write_out_if_monitor_s fuse_ctrl_core_axi_write_out_if_monitor_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_ctrl_core_axi_write_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_ctrl_core_axi_write_out_if_initiator_s; + + `define fuse_ctrl_core_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_if_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_write_out_if_initiator_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_ctrl_core_axi_write_out_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_write_out_if_initiator_s fuse_ctrl_core_axi_write_out_if_initiator_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_ctrl_core_axi_write_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_ctrl_core_axi_write_out_if_responder_s; + + `define fuse_ctrl_core_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_if_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_write_out_if_responder_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_ctrl_core_axi_write_out_if_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_write_out_if_responder_s fuse_ctrl_core_axi_write_out_if_responder_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_ctrl_core_axi_write_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor.svh new file mode 100644 index 000000000..b63c646f1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_write_out_if transactions observed by the +// fuse_ctrl_core_axi_write_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_write_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_write_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_write_out_if_monitor_s fuse_ctrl_core_axi_write_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_write_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor_bfm.sv new file mode 100644 index 000000000..f78f26207 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_write_out_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_write_out_if monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_write_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_write_out_if_if. +// +// Input signals from the fuse_ctrl_core_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_write_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_out_if_macros.svh" + + +interface fuse_ctrl_core_axi_write_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_write_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_write_out_if_MONITOR_STRUCT + fuse_ctrl_core_axi_write_out_if_monitor_s fuse_ctrl_core_axi_write_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_write_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_write_out_if_pkg::fuse_ctrl_core_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_write_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_write_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_write_out_if_configuration_s fuse_ctrl_core_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_write_out_if_monitor_s fuse_ctrl_core_axi_write_out_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_write_out_if_monitor_struct.core_awready + // // fuse_ctrl_core_axi_write_out_if_monitor_struct.core_wready + // // fuse_ctrl_core_axi_write_out_if_monitor_struct.core_bresp + // // fuse_ctrl_core_axi_write_out_if_monitor_struct.core_bid + // // fuse_ctrl_core_axi_write_out_if_monitor_struct.core_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_write_out_if_monitor_struct.xyz = awready_i; // + // fuse_ctrl_core_axi_write_out_if_monitor_struct.xyz = wready_i; // + // fuse_ctrl_core_axi_write_out_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_out_if_monitor_struct.xyz = bid_i; // + // fuse_ctrl_core_axi_write_out_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_random_sequence.svh new file mode 100644 index 000000000..03119f4d4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_write_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_write_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_write_out_if_random_sequence::body()-fuse_ctrl_core_axi_write_out_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_write_out_if_driver_bfm via the sequencer and fuse_ctrl_core_axi_write_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_write_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_responder_sequence.svh new file mode 100644 index 000000000..f525d3d69 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_write_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_sequence_base.svh new file mode 100644 index 000000000..7f3957f54 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_out_if_transaction_req_t; + fuse_ctrl_core_axi_write_out_if_transaction_req_t req; + typedef fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_out_if_transaction_rsp_t; + fuse_ctrl_core_axi_write_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_write_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_write_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction.svh new file mode 100644 index 000000000..9c52f7f9b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_write_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_awready ; + logic core_wready ; + axi_pkg::axi_burst_e core_bresp ; + logic core_bid ; + logic core_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_write_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_write_out_if_monitor and fuse_ctrl_core_axi_write_out_if_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_MONITOR_STRUCT + fuse_ctrl_core_axi_write_out_if_monitor_s fuse_ctrl_core_axi_write_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_out_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_if_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_out_if_driver and fuse_ctrl_core_axi_write_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_out_if_initiator_s fuse_ctrl_core_axi_write_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_out_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_if_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_write_out_if_driver and fuse_ctrl_core_axi_write_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_out_if_responder_s fuse_ctrl_core_axi_write_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_out_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_if_responder_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awready:0x%x core_wready:0x%x core_bresp:0x%x core_bid:0x%x core_bvalid:0x%x ",core_awready,core_wready,core_bresp,core_bid,core_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_awready == RHS.core_awready) + &&(this.core_wready == RHS.core_wready) + &&(this.core_bresp == RHS.core_bresp) + &&(this.core_bid == RHS.core_bid) + &&(this.core_bvalid == RHS.core_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awready = RHS.core_awready; + this.core_wready = RHS.core_wready; + this.core_bresp = RHS.core_bresp; + this.core_bid = RHS.core_bid; + this.core_bvalid = RHS.core_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_write_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awready,"core_awready"); + $add_attribute(transaction_view_h,core_wready,"core_wready"); + $add_attribute(transaction_view_h,core_bresp,"core_bresp"); + $add_attribute(transaction_view_h,core_bid,"core_bid"); + $add_attribute(transaction_view_h,core_bvalid,"core_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction_coverage.svh new file mode 100644 index 000000000..e83ee969f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_write_out_if transaction information using +// a covergroup named fuse_ctrl_core_axi_write_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_write_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awready: coverpoint coverage_trans.core_awready; + core_wready: coverpoint coverage_trans.core_wready; + core_bresp: coverpoint coverage_trans.core_bresp; + core_bid: coverpoint coverage_trans.core_bid; + core_bvalid: coverpoint coverage_trans.core_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_write_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_write_out_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_write_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/yaml/fuse_ctrl_core_axi_write_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/yaml/fuse_ctrl_core_axi_write_out_if_interface.yaml new file mode 100644 index 000000000..a4ad2e78b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/yaml/fuse_ctrl_core_axi_write_out_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_write_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.project new file mode 100644 index 000000000..673a4105f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_write_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.svproject new file mode 100644 index 000000000..e0ccd6023 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/Makefile new file mode 100644 index 000000000..b885f66ae --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_write_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_write_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hvl.f + +fuse_ctrl_core_axi_write_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hdl.f + +fuse_ctrl_core_axi_write_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_write_out_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_write_out_pkg +COMP_fuse_ctrl_core_axi_write_out_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_write_out_pkg +COMP_fuse_ctrl_core_axi_write_out_PKG_TGT = $(COMP_fuse_ctrl_core_axi_write_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_write_out_pkg: $(COMP_fuse_ctrl_core_axi_write_out_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_write_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_write_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_write_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_write_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_write_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_out_pkg += -I$(fuse_ctrl_core_axi_write_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_out_pkg += $(fuse_ctrl_core_axi_write_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_write_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_write_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_write_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_write_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/compile.do new file mode 100644 index 000000000..dd7c8dfdc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_write_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out.compile new file mode 100644 index 000000000..fc356ade3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_write_out_hvl.compile + - fuse_ctrl_core_axi_write_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_bfm.vinfo new file mode 100644 index 000000000..4acbc3dcb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_write_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_write_out_if.sv +src/fuse_ctrl_core_axi_write_out_driver_bfm.sv +src/fuse_ctrl_core_axi_write_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_common.compile new file mode 100644 index 000000000..ab99fa6e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_write_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hdl.f new file mode 100644 index 000000000..354fe2499 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hvl.f new file mode 100644 index 000000000..d14e3d6c5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_xrtl.f new file mode 100644 index 000000000..9aecc8885 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hdl.compile new file mode 100644 index 000000000..d220bb845 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_write_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_write_out_if.sv + - src/fuse_ctrl_core_axi_write_out_monitor_bfm.sv + - src/fuse_ctrl_core_axi_write_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hvl.compile new file mode 100644 index 000000000..2d0aa9807 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_write_out_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_write_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.sv new file mode 100644 index 000000000..4e525f12e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_write_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_write_out_macros.svh" + + export fuse_ctrl_core_axi_write_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_write_out_typedefs.svh" + `include "src/fuse_ctrl_core_axi_write_out_transaction.svh" + + `include "src/fuse_ctrl_core_axi_write_out_configuration.svh" + `include "src/fuse_ctrl_core_axi_write_out_driver.svh" + `include "src/fuse_ctrl_core_axi_write_out_monitor.svh" + + `include "src/fuse_ctrl_core_axi_write_out_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_write_out_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_write_out_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_write_out_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_write_out2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_write_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.vinfo new file mode 100644 index 000000000..6c1d3851b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_write_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_write_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.sv new file mode 100644 index 000000000..9bdd4e613 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_write_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_write_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.vinfo new file mode 100644 index 000000000..68e75c652 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_write_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_sve.F new file mode 100644 index 000000000..dd141cca6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out2reg_adapter.svh new file mode 100644 index 000000000..7f7d115ab --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_write_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_write_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_write_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_agent.svh new file mode 100644 index 000000000..f35b0c2f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_write_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_write_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_write_out_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_configuration.svh new file mode 100644 index 000000000..e6dac332a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_write_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_write_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_write_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_write_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_write_out_configuration_s fuse_ctrl_core_axi_write_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_write_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_write_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_write_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_write_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_write_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_write_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver.svh new file mode 100644 index 000000000..18a3dac72 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_write_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_write_out_driver and fuse_ctrl_core_axi_write_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_write_out_driver_bfm. +`fuse_ctrl_core_axi_write_out_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_out_initiator_s fuse_ctrl_core_axi_write_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_write_out_driver and fuse_ctrl_core_axi_write_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_write_out_driver_bfm. +`fuse_ctrl_core_axi_write_out_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_out_responder_s fuse_ctrl_core_axi_write_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_write_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_write_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_write_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_write_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver_bfm.sv new file mode 100644 index 000000000..ee3c4fb40 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_write_out signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_write_out driver through a virtual interface +// handle in the fuse_ctrl_core_axi_write_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_write_out_if. +// +// Input signals from the fuse_ctrl_core_axi_write_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_write_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_out_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_out_macros.svh" + +interface fuse_ctrl_core_axi_write_out_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_write_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_write_out_pkg::fuse_ctrl_core_axi_write_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_write_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_write_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_write_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_out_driver and fuse_ctrl_core_axi_write_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_out_driver_bfm. + `fuse_ctrl_core_axi_write_out_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_write_out_driver and fuse_ctrl_core_axi_write_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_out_driver_bfm. + `fuse_ctrl_core_axi_write_out_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_write_out_configuration_s fuse_ctrl_core_axi_write_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_write_out_initiator_s fuse_ctrl_core_axi_write_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_write_out_responder_s fuse_ctrl_core_axi_write_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_write_out_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Members within the fuse_ctrl_core_axi_write_out_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + initiator_struct = fuse_ctrl_core_axi_write_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_core_axi_write_out_responder_struct.xyz = awready_i; // + // fuse_ctrl_core_axi_write_out_responder_struct.xyz = wready_i; // + // fuse_ctrl_core_axi_write_out_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_out_responder_struct.xyz = bid_i; // + // fuse_ctrl_core_axi_write_out_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_write_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_write_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_write_out_initiator_s fuse_ctrl_core_axi_write_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_write_out_responder_s fuse_ctrl_core_axi_write_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_write_out_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Variables within the fuse_ctrl_core_axi_write_out_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= fuse_ctrl_core_axi_write_out_initiator_struct.xyz; // + // wready_o <= fuse_ctrl_core_axi_write_out_initiator_struct.xyz; // + // bresp_o <= fuse_ctrl_core_axi_write_out_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= fuse_ctrl_core_axi_write_out_initiator_struct.xyz; // + // bvalid_o <= fuse_ctrl_core_axi_write_out_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_write_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_write_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_if.sv new file mode 100644 index 000000000..a5e2f1cb4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_write_out interface signals. +// It is instantiated once per fuse_ctrl_core_axi_write_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_write_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_write_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_write_out_bus.awready), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_bus.wready), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_bus.bresp), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_bus.bid), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_out_pkg_hdl::*; + +interface fuse_ctrl_core_axi_write_out_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_macros.svh new file mode 100644 index 000000000..5f57ee1cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_write_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_write_out_configuration class. +// + `define fuse_ctrl_core_axi_write_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_write_out_configuration_s; + + `define fuse_ctrl_core_axi_write_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_configuration_s to_struct();\ + fuse_ctrl_core_axi_write_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_write_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_write_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_write_out_configuration_s fuse_ctrl_core_axi_write_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_write_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_write_out_transaction class. +// + `define fuse_ctrl_core_axi_write_out_MONITOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_ctrl_core_axi_write_out_monitor_s; + + `define fuse_ctrl_core_axi_write_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_write_out_monitor_struct = \ + { \ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_ctrl_core_axi_write_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_write_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_write_out_monitor_s fuse_ctrl_core_axi_write_out_monitor_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_ctrl_core_axi_write_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_write_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_out_INITIATOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_ctrl_core_axi_write_out_initiator_s; + + `define fuse_ctrl_core_axi_write_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_write_out_initiator_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_ctrl_core_axi_write_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_write_out_initiator_s fuse_ctrl_core_axi_write_out_initiator_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_ctrl_core_axi_write_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_write_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_out_RESPONDER_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_ctrl_core_axi_write_out_responder_s; + + `define fuse_ctrl_core_axi_write_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_write_out_responder_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_ctrl_core_axi_write_out_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_write_out_responder_s fuse_ctrl_core_axi_write_out_responder_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_ctrl_core_axi_write_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor.svh new file mode 100644 index 000000000..d540c2d82 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_write_out transactions observed by the +// fuse_ctrl_core_axi_write_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_write_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_write_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_write_out_monitor_s fuse_ctrl_core_axi_write_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_write_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor_bfm.sv new file mode 100644 index 000000000..d39a378de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_write_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_write_out monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_write_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_write_out_if. +// +// Input signals from the fuse_ctrl_core_axi_write_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_write_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_out_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_out_macros.svh" + + +interface fuse_ctrl_core_axi_write_out_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_write_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_write_out_MONITOR_STRUCT + fuse_ctrl_core_axi_write_out_monitor_s fuse_ctrl_core_axi_write_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_write_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_write_out_pkg::fuse_ctrl_core_axi_write_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_write_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_write_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_write_out_configuration_s fuse_ctrl_core_axi_write_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_write_out_monitor_s fuse_ctrl_core_axi_write_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_write_out_monitor_struct.core_awready + // // fuse_ctrl_core_axi_write_out_monitor_struct.core_wready + // // fuse_ctrl_core_axi_write_out_monitor_struct.core_bresp + // // fuse_ctrl_core_axi_write_out_monitor_struct.core_bid + // // fuse_ctrl_core_axi_write_out_monitor_struct.core_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_write_out_monitor_struct.xyz = awready_i; // + // fuse_ctrl_core_axi_write_out_monitor_struct.xyz = wready_i; // + // fuse_ctrl_core_axi_write_out_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_out_monitor_struct.xyz = bid_i; // + // fuse_ctrl_core_axi_write_out_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_random_sequence.svh new file mode 100644 index 000000000..490a94fe3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_write_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_write_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_write_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_write_out_random_sequence::body()-fuse_ctrl_core_axi_write_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_write_out_driver_bfm via the sequencer and fuse_ctrl_core_axi_write_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_write_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_responder_sequence.svh new file mode 100644 index 000000000..9aaa395ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_write_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_write_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_sequence_base.svh new file mode 100644 index 000000000..d4ae2f4d6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_out_transaction_req_t; + fuse_ctrl_core_axi_write_out_transaction_req_t req; + typedef fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_out_transaction_rsp_t; + fuse_ctrl_core_axi_write_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_write_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_write_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction.svh new file mode 100644 index 000000000..fc836d88f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_write_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_awready ; + logic core_wready ; + axi_pkg::axi_burst_e core_bresp ; + logic core_bid ; + logic core_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_write_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_write_out_monitor and fuse_ctrl_core_axi_write_out_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_MONITOR_STRUCT + fuse_ctrl_core_axi_write_out_monitor_s fuse_ctrl_core_axi_write_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_out_driver and fuse_ctrl_core_axi_write_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_out_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_out_initiator_s fuse_ctrl_core_axi_write_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_write_out_driver and fuse_ctrl_core_axi_write_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_out_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_out_responder_s fuse_ctrl_core_axi_write_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_responder_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awready:0x%x core_wready:0x%x core_bresp:0x%x core_bid:0x%x core_bvalid:0x%x ",core_awready,core_wready,core_bresp,core_bid,core_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_awready == RHS.core_awready) + &&(this.core_wready == RHS.core_wready) + &&(this.core_bresp == RHS.core_bresp) + &&(this.core_bid == RHS.core_bid) + &&(this.core_bvalid == RHS.core_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awready = RHS.core_awready; + this.core_wready = RHS.core_wready; + this.core_bresp = RHS.core_bresp; + this.core_bid = RHS.core_bid; + this.core_bvalid = RHS.core_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_write_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awready,"core_awready"); + $add_attribute(transaction_view_h,core_wready,"core_wready"); + $add_attribute(transaction_view_h,core_bresp,"core_bresp"); + $add_attribute(transaction_view_h,core_bid,"core_bid"); + $add_attribute(transaction_view_h,core_bvalid,"core_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction_coverage.svh new file mode 100644 index 000000000..f6e083118 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_write_out transaction information using +// a covergroup named fuse_ctrl_core_axi_write_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_write_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awready: coverpoint coverage_trans.core_awready; + core_wready: coverpoint coverage_trans.core_wready; + core_bresp: coverpoint coverage_trans.core_bresp; + core_bid: coverpoint coverage_trans.core_bid; + core_bvalid: coverpoint coverage_trans.core_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_write_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_write_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_write_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/yaml/fuse_ctrl_core_axi_write_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/yaml/fuse_ctrl_core_axi_write_out_interface.yaml new file mode 100644 index 000000000..7f30cb198 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/yaml/fuse_ctrl_core_axi_write_out_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_write_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.project new file mode 100644 index 000000000..45e6ebf46 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_in_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.svproject new file mode 100644 index 000000000..f75187c7a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/Makefile new file mode 100644 index 000000000..ec35ee1db --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_in_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_in_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f + +fuse_ctrl_in_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f + +fuse_ctrl_in_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_xrtl.f + +COMP_fuse_ctrl_in_if_PKG_TGT_0 = q_comp_fuse_ctrl_in_if_pkg +COMP_fuse_ctrl_in_if_PKG_TGT_1 = v_comp_fuse_ctrl_in_if_pkg +COMP_fuse_ctrl_in_if_PKG_TGT = $(COMP_fuse_ctrl_in_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_in_if_pkg: $(COMP_fuse_ctrl_in_if_PKG_TGT) + +q_comp_fuse_ctrl_in_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_in_if_PKG_XRTL) + +v_comp_fuse_ctrl_in_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_in_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_in_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_in_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_in_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_in_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_in_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_in_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_in_if_pkg += -I$(fuse_ctrl_in_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_in_if_pkg += $(fuse_ctrl_in_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_in_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_in_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_in_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_in_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_in_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_in_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/compile.do new file mode 100644 index 000000000..c285781cd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_in_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if.compile new file mode 100644 index 000000000..e8e8162d5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_in_if_hvl.compile + - fuse_ctrl_in_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_bfm.vinfo new file mode 100644 index 000000000..b43d67488 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_in_if_if.sv +src/fuse_ctrl_in_if_driver_bfm.sv +src/fuse_ctrl_in_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_common.compile new file mode 100644 index 000000000..b81563f6f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f new file mode 100644 index 000000000..12e3b303b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f new file mode 100644 index 000000000..7a81ab807 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_xrtl.f new file mode 100644 index 000000000..179ff7f94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hdl.compile new file mode 100644 index 000000000..c092af6fc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_in_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_in_if_if.sv + - src/fuse_ctrl_in_if_monitor_bfm.sv + - src/fuse_ctrl_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hvl.compile new file mode 100644 index 000000000..92ee0394b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_in_if_common.compile +incdir: + - . +src: + - fuse_ctrl_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.sv new file mode 100644 index 000000000..084ccc70c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_in_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_in_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_in_if_macros.svh" + + export fuse_ctrl_in_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_in_if_typedefs.svh" + `include "src/fuse_ctrl_in_if_transaction.svh" + + `include "src/fuse_ctrl_in_if_configuration.svh" + `include "src/fuse_ctrl_in_if_driver.svh" + `include "src/fuse_ctrl_in_if_monitor.svh" + + `include "src/fuse_ctrl_in_if_transaction_coverage.svh" + `include "src/fuse_ctrl_in_if_sequence_base.svh" + `include "src/fuse_ctrl_in_if_random_sequence.svh" + + `include "src/fuse_ctrl_in_if_responder_sequence.svh" + `include "src/fuse_ctrl_in_if2reg_adapter.svh" + + `include "src/fuse_ctrl_in_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.vinfo new file mode 100644 index 000000000..638065653 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.sv new file mode 100644 index 000000000..0037ca5fe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_in_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_in_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_in_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.vinfo new file mode 100644 index 000000000..63327f479 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_sve.F new file mode 100644 index 000000000..8f42525dc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if2reg_adapter.svh new file mode 100644 index 000000000..949a9a2be --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_in_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if2reg_adapter #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_in_if2reg_adapter #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_in_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h = fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_in_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_agent.svh new file mode 100644 index 000000000..c4e054bf2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_agent #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_in_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .DRIVER_T(fuse_ctrl_in_if_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_T(fuse_ctrl_in_if_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .COVERAGE_T(fuse_ctrl_in_if_transaction_coverage #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_in_if_agent #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_configuration.svh new file mode 100644 index 000000000..2f557ad05 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_in_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_configuration #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_in_if_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_in_if_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_in_if_configuration #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_in_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_CONFIGURATION_STRUCT + fuse_ctrl_in_if_configuration_s fuse_ctrl_in_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_in_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_in_if_configuration_struct. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_in_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_in_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_in_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_in_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_in_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_in_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_in_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", agent_path, interface_name, AlertSyncOn ,RndConstLfrSeed ,RndCnstLfsrPerm ,MemInitFile ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_in_if_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver.svh new file mode 100644 index 000000000..4f5e71c4a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_driver #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_in_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_in_if_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .REQ(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .RSP(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_in_if_driver #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_in_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_in_if_driver and fuse_ctrl_in_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_in_if_driver_bfm. +`fuse_ctrl_in_if_INITIATOR_STRUCT + fuse_ctrl_in_if_initiator_s fuse_ctrl_in_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_in_if_driver and fuse_ctrl_in_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_in_if_driver_bfm. +`fuse_ctrl_in_if_RESPONDER_STRUCT + fuse_ctrl_in_if_responder_s fuse_ctrl_in_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_in_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_in_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_in_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_in_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver_bfm.sv new file mode 100644 index 000000000..6b39174a4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver_bfm.sv @@ -0,0 +1,346 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_in_if signal driving. It is +// accessed by the uvm fuse_ctrl_in_if driver through a virtual interface +// handle in the fuse_ctrl_in_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_in_if_if. +// +// Input signals from the fuse_ctrl_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_in_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_in_if_macros.svh" + +interface fuse_ctrl_in_if_driver_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + (fuse_ctrl_in_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_in_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i_i; + reg [$bits(edn_pkg::edn_req_t)-1:0] edn_i_o = 'bz; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_i; + reg [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_o = 'bz; + tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_i; + reg [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_o = 'bz; + tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_i; + reg [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_o = 'bz; + tri otp_ext_voltage_h_io_i; + reg otp_ext_voltage_h_io_o = 'bz; + tri scan_en_i_i; + reg scan_en_i_o = 'bz; + tri scan_rst_ni_i; + reg scan_rst_ni_o = 'bz; + tri scanmode_i_i; + reg scanmode_i_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.edn_i = (initiator_responder == INITIATOR) ? edn_i_o : 'bz; + assign edn_i_i = bus.edn_i; + assign bus.alert_rx_i = (initiator_responder == INITIATOR) ? alert_rx_i_o : 'bz; + assign alert_rx_i_i = bus.alert_rx_i; + assign bus.obs_ctrl_i = (initiator_responder == INITIATOR) ? obs_ctrl_i_o : 'bz; + assign obs_ctrl_i_i = bus.obs_ctrl_i; + assign bus.otp_ast_pwr_seq_h_i = (initiator_responder == INITIATOR) ? otp_ast_pwr_seq_h_i_o : 'bz; + assign otp_ast_pwr_seq_h_i_i = bus.otp_ast_pwr_seq_h_i; + assign bus.otp_ext_voltage_h_io = (initiator_responder == INITIATOR) ? otp_ext_voltage_h_io_o : 'bz; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + assign bus.scan_en_i = (initiator_responder == INITIATOR) ? scan_en_i_o : 'bz; + assign scan_en_i_i = bus.scan_en_i; + assign bus.scan_rst_ni = (initiator_responder == INITIATOR) ? scan_rst_ni_o : 'bz; + assign scan_rst_ni_i = bus.scan_rst_ni; + assign bus.scanmode_i = (initiator_responder == INITIATOR) ? scanmode_i_o : 'bz; + assign scanmode_i_i = bus.scanmode_i; + + // Proxy handle to UVM driver + fuse_ctrl_in_if_pkg::fuse_ctrl_in_if_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_in_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_in_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_in_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_in_if_driver and fuse_ctrl_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_in_if_driver_bfm. + `fuse_ctrl_in_if_INITIATOR_STRUCT + fuse_ctrl_in_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_in_if_driver and fuse_ctrl_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_in_if_driver_bfm. + `fuse_ctrl_in_if_RESPONDER_STRUCT + fuse_ctrl_in_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + edn_i_o <= 'bz; + alert_rx_i_o <= 'bz; + obs_ctrl_i_o <= 'bz; + otp_ast_pwr_seq_h_i_o <= 'bz; + otp_ext_voltage_h_io_o <= 'bz; + scan_en_i_o <= 'bz; + scan_rst_ni_o <= 'bz; + scanmode_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_in_if_configuration_s fuse_ctrl_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_in_if_initiator_s fuse_ctrl_in_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_in_if_responder_s fuse_ctrl_in_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_in_if_initiator_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Members within the fuse_ctrl_in_if_responder_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + initiator_struct = fuse_ctrl_in_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // edn_i_o <= fuse_ctrl_in_if_initiator_struct.xyz; // [$bits(edn_pkg::edn_req_t)-1:0] + // alert_rx_i_o <= fuse_ctrl_in_if_initiator_struct.xyz; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // obs_ctrl_i_o <= fuse_ctrl_in_if_initiator_struct.xyz; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // otp_ast_pwr_seq_h_i_o <= fuse_ctrl_in_if_initiator_struct.xyz; // [$bits(otp_ast_req_t)-1:0] + // otp_ext_voltage_h_io_o <= fuse_ctrl_in_if_initiator_struct.xyz; // + // scan_en_i_o <= fuse_ctrl_in_if_initiator_struct.xyz; // + // scan_rst_ni_o <= fuse_ctrl_in_if_initiator_struct.xyz; // + // scanmode_i_o <= fuse_ctrl_in_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_in_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_in_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_in_if_initiator_s fuse_ctrl_in_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_in_if_responder_s fuse_ctrl_in_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_in_if_initiator_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Variables within the fuse_ctrl_in_if_responder_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_in_if_responder_struct.xyz = edn_i_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_in_if_responder_struct.xyz = alert_rx_i_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // fuse_ctrl_in_if_responder_struct.xyz = obs_ctrl_i_i; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // fuse_ctrl_in_if_responder_struct.xyz = otp_ast_pwr_seq_h_i_i; // [$bits(otp_ast_req_t)-1:0] + // fuse_ctrl_in_if_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // fuse_ctrl_in_if_responder_struct.xyz = scan_en_i_i; // + // fuse_ctrl_in_if_responder_struct.xyz = scan_rst_ni_i; // + // fuse_ctrl_in_if_responder_struct.xyz = scanmode_i_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_in_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_in_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_if.sv new file mode 100644 index 000000000..590cb0dfa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_if.sv @@ -0,0 +1,119 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_in_if interface signals. +// It is instantiated once per fuse_ctrl_in_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_in_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_in_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_in_if_bus.edn_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.alert_rx_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.obs_ctrl_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.otp_ast_pwr_seq_h_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.otp_ext_voltage_h_io), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.scan_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.scan_rst_ni), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.scanmode_i), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_if_pkg_hdl::*; + +interface fuse_ctrl_in_if_if #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i, + inout tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i, + inout tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i, + inout tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i, + inout tri otp_ext_voltage_h_io, + inout tri scan_en_i, + inout tri scan_rst_ni, + inout tri scanmode_i + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input edn_i, + input alert_rx_i, + input obs_ctrl_i, + input otp_ast_pwr_seq_h_i, + input otp_ext_voltage_h_io, + input scan_en_i, + input scan_rst_ni, + input scanmode_i + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output edn_i, + output alert_rx_i, + output obs_ctrl_i, + output otp_ast_pwr_seq_h_i, + output otp_ext_voltage_h_io, + output scan_en_i, + output scan_rst_ni, + output scanmode_i + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input edn_i, + input alert_rx_i, + input obs_ctrl_i, + input otp_ast_pwr_seq_h_i, + input otp_ext_voltage_h_io, + input scan_en_i, + input scan_rst_ni, + input scanmode_i + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_macros.svh new file mode 100644 index 000000000..1c4c94307 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_in_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_in_if_configuration class. +// + `define fuse_ctrl_in_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_in_if_configuration_s; + + `define fuse_ctrl_in_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_if_configuration_s to_struct();\ + fuse_ctrl_in_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_in_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_in_if_configuration_s fuse_ctrl_in_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_in_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_in_if_transaction class. +// + `define fuse_ctrl_in_if_MONITOR_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_if_monitor_s; + + `define fuse_ctrl_in_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_if_monitor_s to_monitor_struct();\ + fuse_ctrl_in_if_monitor_struct = \ + { \ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_in_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_in_if_monitor_s fuse_ctrl_in_if_monitor_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_in_if_INITIATOR_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_if_initiator_s; + + `define fuse_ctrl_in_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_if_initiator_s to_initiator_struct();\ + fuse_ctrl_in_if_initiator_struct = \ + {\ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_in_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_in_if_initiator_s fuse_ctrl_in_if_initiator_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_in_if_RESPONDER_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_if_responder_s; + + `define fuse_ctrl_in_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_if_responder_s to_responder_struct();\ + fuse_ctrl_in_if_responder_struct = \ + {\ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_if_responder_struct);\ + endfunction + + `define fuse_ctrl_in_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_in_if_responder_s fuse_ctrl_in_if_responder_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor.svh new file mode 100644 index 000000000..b58f2c631 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_in_if transactions observed by the +// fuse_ctrl_in_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_monitor #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_in_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_in_if_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_in_if_monitor #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_in_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_in_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_in_if_monitor_s fuse_ctrl_in_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_in_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor_bfm.sv new file mode 100644 index 000000000..96d9a80f5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor_bfm.sv @@ -0,0 +1,221 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_in_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_in_if monitor through a virtual +// interface handle in the fuse_ctrl_in_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_in_if_if. +// +// Input signals from the fuse_ctrl_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_in_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_in_if_macros.svh" + + +interface fuse_ctrl_in_if_monitor_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + ( fuse_ctrl_in_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_in_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_in_if_MONITOR_STRUCT + fuse_ctrl_in_if_monitor_s fuse_ctrl_in_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_in_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i_i; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_i; + tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_i; + tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_i; + tri otp_ext_voltage_h_io_i; + tri scan_en_i_i; + tri scan_rst_ni_i; + tri scanmode_i_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign edn_i_i = bus.edn_i; + assign alert_rx_i_i = bus.alert_rx_i; + assign obs_ctrl_i_i = bus.obs_ctrl_i; + assign otp_ast_pwr_seq_h_i_i = bus.otp_ast_pwr_seq_h_i; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + assign scan_en_i_i = bus.scan_en_i; + assign scan_rst_ni_i = bus.scan_rst_ni; + assign scanmode_i_i = bus.scanmode_i; + + // Proxy handle to UVM monitor + fuse_ctrl_in_if_pkg::fuse_ctrl_in_if_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_in_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_in_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_in_if_configuration_s fuse_ctrl_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_in_if_monitor_s fuse_ctrl_in_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_in_if_monitor_struct.set_alert_rx_i + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_in_if_monitor_struct.xyz = edn_i_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_in_if_monitor_struct.xyz = alert_rx_i_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // fuse_ctrl_in_if_monitor_struct.xyz = obs_ctrl_i_i; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // fuse_ctrl_in_if_monitor_struct.xyz = otp_ast_pwr_seq_h_i_i; // [$bits(otp_ast_req_t)-1:0] + // fuse_ctrl_in_if_monitor_struct.xyz = otp_ext_voltage_h_io_i; // + // fuse_ctrl_in_if_monitor_struct.xyz = scan_en_i_i; // + // fuse_ctrl_in_if_monitor_struct.xyz = scan_rst_ni_i; // + // fuse_ctrl_in_if_monitor_struct.xyz = scanmode_i_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_random_sequence.svh new file mode 100644 index 000000000..8982a5cb8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_in_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_in_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_random_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_in_if_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_in_if_random_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_in_if_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_in_if_random_sequence::body()-fuse_ctrl_in_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_in_if_driver_bfm via the sequencer and fuse_ctrl_in_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_in_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_responder_sequence.svh new file mode 100644 index 000000000..75ca72188 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_responder_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_in_if_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_in_if_responder_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_in_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_in_if_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_sequence_base.svh new file mode 100644 index 000000000..12b699748 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_sequence_base #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .RSP(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_in_if_sequence_base #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // variables + typedef fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_in_if_transaction_req_t; + fuse_ctrl_in_if_transaction_req_t req; + typedef fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_in_if_transaction_rsp_t; + fuse_ctrl_in_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_in_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_in_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction.svh new file mode 100644 index 000000000..106e016f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction.svh @@ -0,0 +1,219 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_in_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_transaction #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_in_if_transaction #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_in_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_in_if_monitor and fuse_ctrl_in_if_monitor_bfm + // This struct is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_MONITOR_STRUCT + fuse_ctrl_in_if_monitor_s fuse_ctrl_in_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_in_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_in_if_monitor_struct. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_in_if_driver and fuse_ctrl_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_INITIATOR_STRUCT + fuse_ctrl_in_if_initiator_s fuse_ctrl_in_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_in_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_in_if_initiator_struct. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_in_if_driver and fuse_ctrl_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_RESPONDER_STRUCT + fuse_ctrl_in_if_responder_s fuse_ctrl_in_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_in_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_in_if_responder_struct. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("set_alert_rx_i:0x%x ",set_alert_rx_i); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.set_alert_rx_i = RHS.set_alert_rx_i; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_in_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,set_alert_rx_i,"set_alert_rx_i"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction_coverage.svh new file mode 100644 index 000000000..27fa4a7bd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction_coverage.svh @@ -0,0 +1,102 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_in_if transaction information using +// a covergroup named fuse_ctrl_in_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_transaction_coverage #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_subscriber #(.T(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_in_if_transaction_coverage #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_in_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + set_alert_rx_i: coverpoint coverage_trans.set_alert_rx_i; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_in_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_in_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_in_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_in_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/yaml/fuse_ctrl_in_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/yaml/fuse_ctrl_in_if_interface.yaml new file mode 100644 index 000000000..2dac8368b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/yaml/fuse_ctrl_in_if_interface.yaml @@ -0,0 +1,68 @@ +uvmf: + interfaces: + fuse_ctrl_in_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AlertSyncOn + type: int + value: '3' + - name: RndConstLfrSeed + type: lfsr_seed_t + value: RndConstLfsrSeedDefault + - name: RndCnstLfsrPerm + type: lsfr_perm_t + value: RndCnstLfsrPermDefault + - name: MemInitFile + type: string + ports: + - dir: output + name: edn_i + reset_value: '''bz' + width: '[''$bits(edn_pkg::edn_req_t)'']' + - dir: output + name: alert_rx_i + reset_value: '''bz' + width: '[''NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)'']' + - dir: output + name: obs_ctrl_i + reset_value: '''bz' + width: '[''$bits(ast_pkg::ast_obs_ctrl_t)'']' + - dir: output + name: otp_ast_pwr_seq_h_i + reset_value: '''bz' + width: '[''$bits(otp_ast_req_t)'']' + - dir: output + name: otp_ext_voltage_h_io + reset_value: '''bz' + width: '1' + - dir: output + name: scan_en_i + reset_value: '''bz' + width: '1' + - dir: output + name: scan_rst_ni + reset_value: '''bz' + width: '1' + - dir: output + name: scanmode_i + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: set_alert_rx_i + type: caliptra_prim_alert_pkg::alert_rx_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/.project new file mode 100644 index 000000000..3038bf51b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/.svproject new file mode 100644 index 000000000..40fcc43fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/Makefile new file mode 100644 index 000000000..9fd3230c4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f + +fuse_ctrl_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f + +fuse_ctrl_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f + +COMP_fuse_ctrl_in_PKG_TGT_0 = q_comp_fuse_ctrl_in_pkg +COMP_fuse_ctrl_in_PKG_TGT_1 = v_comp_fuse_ctrl_in_pkg +COMP_fuse_ctrl_in_PKG_TGT = $(COMP_fuse_ctrl_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_in_pkg: $(COMP_fuse_ctrl_in_PKG_TGT) + +q_comp_fuse_ctrl_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_in_PKG_XRTL) + +v_comp_fuse_ctrl_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_in_pkg += -I$(fuse_ctrl_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_in_pkg += $(fuse_ctrl_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/compile.do new file mode 100644 index 000000000..26458397d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile new file mode 100644 index 000000000..ae6ef9dd8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_in_hvl.compile + - fuse_ctrl_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo new file mode 100644 index 000000000..cf88b7005 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_in_if.sv +src/fuse_ctrl_in_driver_bfm.sv +src/fuse_ctrl_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_common.compile new file mode 100644 index 000000000..82360a88a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f new file mode 100644 index 000000000..959aa9e78 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f new file mode 100644 index 000000000..e57e74b80 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f new file mode 100644 index 000000000..1e9819e09 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile new file mode 100644 index 000000000..da38bec57 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_in_if.sv + - src/fuse_ctrl_in_monitor_bfm.sv + - src/fuse_ctrl_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile new file mode 100644 index 000000000..210102ccf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_in_common.compile +incdir: + - . +src: + - fuse_ctrl_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv new file mode 100644 index 000000000..58df769b3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_in_macros.svh" + + export fuse_ctrl_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_in_typedefs.svh" + `include "src/fuse_ctrl_in_transaction.svh" + + `include "src/fuse_ctrl_in_configuration.svh" + `include "src/fuse_ctrl_in_driver.svh" + `include "src/fuse_ctrl_in_monitor.svh" + + `include "src/fuse_ctrl_in_transaction_coverage.svh" + `include "src/fuse_ctrl_in_sequence_base.svh" + `include "src/fuse_ctrl_in_random_sequence.svh" + + `include "src/fuse_ctrl_in_responder_sequence.svh" + `include "src/fuse_ctrl_in2reg_adapter.svh" + + `include "src/fuse_ctrl_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo new file mode 100644 index 000000000..164f1255c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv new file mode 100644 index 000000000..b13dcf77e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.vinfo new file mode 100644 index 000000000..79de2ad70 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F new file mode 100644 index 000000000..345b7e8cd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in2reg_adapter.svh new file mode 100644 index 000000000..a359e7f30 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in2reg_adapter #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_in2reg_adapter #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h = fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_agent.svh new file mode 100644 index 000000000..8f2300972 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_agent #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_in_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .DRIVER_T(fuse_ctrl_in_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_T(fuse_ctrl_in_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .COVERAGE_T(fuse_ctrl_in_transaction_coverage #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_in_agent #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_configuration.svh new file mode 100644 index 000000000..14af02688 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_configuration #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_in_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_in_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_in_configuration #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_CONFIGURATION_STRUCT + fuse_ctrl_in_configuration_s fuse_ctrl_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_in_configuration_struct. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_in_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_in_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", agent_path, interface_name, AlertSyncOn ,RndConstLfrSeed ,RndCnstLfsrPerm ,MemInitFile ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_in_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver.svh new file mode 100644 index 000000000..2817f179d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_driver #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_in_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_in_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .REQ(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .RSP(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_in_driver #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_in_driver_bfm. +`fuse_ctrl_in_INITIATOR_STRUCT + fuse_ctrl_in_initiator_s fuse_ctrl_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_in_driver_bfm. +`fuse_ctrl_in_RESPONDER_STRUCT + fuse_ctrl_in_responder_s fuse_ctrl_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver_bfm.sv new file mode 100644 index 000000000..bab880b49 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver_bfm.sv @@ -0,0 +1,342 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_in signal driving. It is +// accessed by the uvm fuse_ctrl_in driver through a virtual interface +// handle in the fuse_ctrl_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_in_if. +// +// Input signals from the fuse_ctrl_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_pkg_hdl::*; +`include "src/fuse_ctrl_in_macros.svh" + +interface fuse_ctrl_in_driver_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + (fuse_ctrl_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i_i; + reg [$bits(edn_pkg::edn_req_t)-1:0] edn_i_o = 'bz; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_i; + reg [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_o = 'bz; + tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_i; + reg [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_o = 'bz; + tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_i; + reg [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_o = 'bz; + tri scan_en_i_i; + reg scan_en_i_o = 'bz; + tri scan_rst_ni_i; + reg scan_rst_ni_o = 'bz; + tri scanmode_i_i; + reg scanmode_i_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.edn_i = (initiator_responder == INITIATOR) ? edn_i_o : 'bz; + assign edn_i_i = bus.edn_i; + assign bus.alert_rx_i = (initiator_responder == INITIATOR) ? alert_rx_i_o : 'bz; + assign alert_rx_i_i = bus.alert_rx_i; + assign bus.obs_ctrl_i = (initiator_responder == INITIATOR) ? obs_ctrl_i_o : 'bz; + assign obs_ctrl_i_i = bus.obs_ctrl_i; + assign bus.otp_ast_pwr_seq_h_i = (initiator_responder == INITIATOR) ? otp_ast_pwr_seq_h_i_o : 'bz; + assign otp_ast_pwr_seq_h_i_i = bus.otp_ast_pwr_seq_h_i; + assign bus.scan_en_i = (initiator_responder == INITIATOR) ? scan_en_i_o : 'bz; + assign scan_en_i_i = bus.scan_en_i; + assign bus.scan_rst_ni = (initiator_responder == INITIATOR) ? scan_rst_ni_o : 'bz; + assign scan_rst_ni_i = bus.scan_rst_ni; + assign bus.scanmode_i = (initiator_responder == INITIATOR) ? scanmode_i_o : 'bz; + assign scanmode_i_i = bus.scanmode_i; + + // Proxy handle to UVM driver + fuse_ctrl_in_pkg::fuse_ctrl_in_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_in_driver_bfm. + `fuse_ctrl_in_INITIATOR_STRUCT + fuse_ctrl_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_in_driver_bfm. + `fuse_ctrl_in_RESPONDER_STRUCT + fuse_ctrl_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + edn_i_o <= 'bz; + alert_rx_i_o <= 'bz; + obs_ctrl_i_o <= 'bz; + otp_ast_pwr_seq_h_i_o <= 'bz; + otp_ext_voltage_h_io_o <= 'bz; + scan_en_i_o <= 'bz; + scan_rst_ni_o <= 'bz; + scanmode_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_in_configuration_s fuse_ctrl_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_in_initiator_s fuse_ctrl_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_in_responder_s fuse_ctrl_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_in_initiator_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Members within the fuse_ctrl_in_responder_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + initiator_struct = fuse_ctrl_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // edn_i_o <= fuse_ctrl_in_initiator_struct.xyz; // [$bits(edn_pkg::edn_req_t)-1:0] + // alert_rx_i_o <= fuse_ctrl_in_initiator_struct.xyz; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // obs_ctrl_i_o <= fuse_ctrl_in_initiator_struct.xyz; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // otp_ast_pwr_seq_h_i_o <= fuse_ctrl_in_initiator_struct.xyz; // [$bits(otp_ast_req_t)-1:0] + // otp_ext_voltage_h_io_o <= fuse_ctrl_in_initiator_struct.xyz; // + // scan_en_i_o <= fuse_ctrl_in_initiator_struct.xyz; // + // scan_rst_ni_o <= fuse_ctrl_in_initiator_struct.xyz; // + // scanmode_i_o <= fuse_ctrl_in_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_in_initiator_s fuse_ctrl_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_in_responder_s fuse_ctrl_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_in_initiator_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Variables within the fuse_ctrl_in_responder_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_in_responder_struct.xyz = edn_i_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_in_responder_struct.xyz = alert_rx_i_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // fuse_ctrl_in_responder_struct.xyz = obs_ctrl_i_i; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // fuse_ctrl_in_responder_struct.xyz = otp_ast_pwr_seq_h_i_i; // [$bits(otp_ast_req_t)-1:0] + // fuse_ctrl_in_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // fuse_ctrl_in_responder_struct.xyz = scan_en_i_i; // + // fuse_ctrl_in_responder_struct.xyz = scan_rst_ni_i; // + // fuse_ctrl_in_responder_struct.xyz = scanmode_i_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv new file mode 100644 index 000000000..2ddd420c6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_in interface signals. +// It is instantiated once per fuse_ctrl_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_in_bus.edn_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.alert_rx_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.obs_ctrl_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.otp_ast_pwr_seq_h_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.scan_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.scan_rst_ni), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.scanmode_i), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_pkg_hdl::*; + +interface fuse_ctrl_in_if #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i, + inout tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i, + inout tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i, + inout tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i, + inout tri scan_en_i, + inout tri scan_rst_ni, + inout tri scanmode_i + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input edn_i, + input alert_rx_i, + input obs_ctrl_i, + input otp_ast_pwr_seq_h_i, + input scan_en_i, + input scan_rst_ni, + input scanmode_i + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output edn_i, + output alert_rx_i, + output obs_ctrl_i, + output otp_ast_pwr_seq_h_i, + output scan_en_i, + output scan_rst_ni, + output scanmode_i + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input edn_i, + input alert_rx_i, + input obs_ctrl_i, + input otp_ast_pwr_seq_h_i, + input scan_en_i, + input scan_rst_ni, + input scanmode_i + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_macros.svh new file mode 100644 index 000000000..cf85634de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_in_configuration class. +// + `define fuse_ctrl_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_in_configuration_s; + + `define fuse_ctrl_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_configuration_s to_struct();\ + fuse_ctrl_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_in_configuration_s fuse_ctrl_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_in_transaction class. +// + `define fuse_ctrl_in_MONITOR_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_monitor_s; + + `define fuse_ctrl_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_monitor_s to_monitor_struct();\ + fuse_ctrl_in_monitor_struct = \ + { \ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_in_monitor_s fuse_ctrl_in_monitor_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_in_INITIATOR_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_initiator_s; + + `define fuse_ctrl_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_initiator_s to_initiator_struct();\ + fuse_ctrl_in_initiator_struct = \ + {\ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_in_initiator_s fuse_ctrl_in_initiator_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_in_RESPONDER_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_responder_s; + + `define fuse_ctrl_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_responder_s to_responder_struct();\ + fuse_ctrl_in_responder_struct = \ + {\ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_responder_struct);\ + endfunction + + `define fuse_ctrl_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_in_responder_s fuse_ctrl_in_responder_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor.svh new file mode 100644 index 000000000..cf4d9fd27 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_in transactions observed by the +// fuse_ctrl_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_monitor #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_in_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_in_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_in_monitor #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_in_monitor_s fuse_ctrl_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor_bfm.sv new file mode 100644 index 000000000..483519917 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor_bfm.sv @@ -0,0 +1,218 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_in monitor through a virtual +// interface handle in the fuse_ctrl_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_in_if. +// +// Input signals from the fuse_ctrl_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_pkg_hdl::*; +`include "src/fuse_ctrl_in_macros.svh" + + +interface fuse_ctrl_in_monitor_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + ( fuse_ctrl_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_in_MONITOR_STRUCT + fuse_ctrl_in_monitor_s fuse_ctrl_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i_i; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_i; + tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_i; + tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_i; + tri scan_en_i_i; + tri scan_rst_ni_i; + tri scanmode_i_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign edn_i_i = bus.edn_i; + assign alert_rx_i_i = bus.alert_rx_i; + assign obs_ctrl_i_i = bus.obs_ctrl_i; + assign otp_ast_pwr_seq_h_i_i = bus.otp_ast_pwr_seq_h_i; + assign scan_en_i_i = bus.scan_en_i; + assign scan_rst_ni_i = bus.scan_rst_ni; + assign scanmode_i_i = bus.scanmode_i; + + // Proxy handle to UVM monitor + fuse_ctrl_in_pkg::fuse_ctrl_in_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_in_configuration_s fuse_ctrl_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_in_monitor_s fuse_ctrl_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_in_monitor_struct.set_alert_rx_i + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_in_monitor_struct.xyz = edn_i_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_in_monitor_struct.xyz = alert_rx_i_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // fuse_ctrl_in_monitor_struct.xyz = obs_ctrl_i_i; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // fuse_ctrl_in_monitor_struct.xyz = otp_ast_pwr_seq_h_i_i; // [$bits(otp_ast_req_t)-1:0] + // fuse_ctrl_in_monitor_struct.xyz = scan_en_i_i; // + // fuse_ctrl_in_monitor_struct.xyz = scan_rst_ni_i; // + // fuse_ctrl_in_monitor_struct.xyz = scanmode_i_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_random_sequence.svh new file mode 100644 index 000000000..66b5a5d4a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_random_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_in_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_in_random_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_in_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_in_random_sequence::body()-fuse_ctrl_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_in_driver_bfm via the sequencer and fuse_ctrl_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_responder_sequence.svh new file mode 100644 index 000000000..e4e42b6aa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_responder_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_in_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_in_responder_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_in_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_sequence_base.svh new file mode 100644 index 000000000..ce6a3b740 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_sequence_base #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .RSP(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_in_sequence_base #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // variables + typedef fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_in_transaction_req_t; + fuse_ctrl_in_transaction_req_t req; + typedef fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_in_transaction_rsp_t; + fuse_ctrl_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction.svh new file mode 100644 index 000000000..f8a7fc400 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction.svh @@ -0,0 +1,219 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_transaction #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_in_transaction #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_in_monitor and fuse_ctrl_in_monitor_bfm + // This struct is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_MONITOR_STRUCT + fuse_ctrl_in_monitor_s fuse_ctrl_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_in_monitor_struct. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_in_driver_bfm. + // This struct is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_INITIATOR_STRUCT + fuse_ctrl_in_initiator_s fuse_ctrl_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_in_initiator_struct. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_in_driver_bfm. + // This struct is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_RESPONDER_STRUCT + fuse_ctrl_in_responder_s fuse_ctrl_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_in_responder_struct. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("set_alert_rx_i:0x%x ",set_alert_rx_i); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.set_alert_rx_i = RHS.set_alert_rx_i; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,set_alert_rx_i,"set_alert_rx_i"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction_coverage.svh new file mode 100644 index 000000000..5da482565 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction_coverage.svh @@ -0,0 +1,102 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_in transaction information using +// a covergroup named fuse_ctrl_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_transaction_coverage #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_subscriber #(.T(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_in_transaction_coverage #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + set_alert_rx_i: coverpoint coverage_trans.set_alert_rx_i; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/yaml/fuse_ctrl_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/yaml/fuse_ctrl_in_interface.yaml new file mode 100644 index 000000000..333979905 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_in_pkg/yaml/fuse_ctrl_in_interface.yaml @@ -0,0 +1,64 @@ +uvmf: + interfaces: + fuse_ctrl_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AlertSyncOn + type: int + value: '3' + - name: RndConstLfrSeed + type: lfsr_seed_t + value: RndConstLfsrSeedDefault + - name: RndCnstLfsrPerm + type: lsfr_perm_t + value: RndCnstLfsrPermDefault + - name: MemInitFile + type: string + ports: + - dir: output + name: edn_i + reset_value: '''bz' + width: '[''$bits(edn_pkg::edn_req_t)'']' + - dir: output + name: alert_rx_i + reset_value: '''bz' + width: '[''NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)'']' + - dir: output + name: obs_ctrl_i + reset_value: '''bz' + width: '[''$bits(ast_pkg::ast_obs_ctrl_t)'']' + - dir: output + name: otp_ast_pwr_seq_h_i + reset_value: '''bz' + width: '[''$bits(otp_ast_req_t)'']' + - dir: output + name: scan_en_i + reset_value: '''bz' + width: '1' + - dir: output + name: scan_rst_ni + reset_value: '''bz' + width: '1' + - dir: output + name: scanmode_i + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: set_alert_rx_i + type: caliptra_prim_alert_pkg::alert_rx_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.project new file mode 100644 index 000000000..da8a90eb7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_lc_otp_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.svproject new file mode 100644 index 000000000..6dac2c36a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/Makefile new file mode 100644 index 000000000..1ce37d99e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_lc_otp_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_lc_otp_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f + +fuse_ctrl_lc_otp_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f + +fuse_ctrl_lc_otp_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f + +COMP_fuse_ctrl_lc_otp_if_PKG_TGT_0 = q_comp_fuse_ctrl_lc_otp_if_pkg +COMP_fuse_ctrl_lc_otp_if_PKG_TGT_1 = v_comp_fuse_ctrl_lc_otp_if_pkg +COMP_fuse_ctrl_lc_otp_if_PKG_TGT = $(COMP_fuse_ctrl_lc_otp_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_lc_otp_if_pkg: $(COMP_fuse_ctrl_lc_otp_if_PKG_TGT) + +q_comp_fuse_ctrl_lc_otp_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG_XRTL) + +v_comp_fuse_ctrl_lc_otp_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_lc_otp_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_lc_otp_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_lc_otp_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_if_pkg += -I$(fuse_ctrl_lc_otp_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_if_pkg += $(fuse_ctrl_lc_otp_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_lc_otp_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_lc_otp_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_lc_otp_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_lc_otp_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/compile.do new file mode 100644 index 000000000..5f222a54a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_lc_otp_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if.compile new file mode 100644 index 000000000..ecb1301fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_lc_otp_if_hvl.compile + - fuse_ctrl_lc_otp_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_bfm.vinfo new file mode 100644 index 000000000..4007fc103 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_lc_otp_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_lc_otp_if_if.sv +src/fuse_ctrl_lc_otp_if_driver_bfm.sv +src/fuse_ctrl_lc_otp_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_common.compile new file mode 100644 index 000000000..0a9110502 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_lc_otp_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f new file mode 100644 index 000000000..30a25f810 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f new file mode 100644 index 000000000..0807a17da --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f new file mode 100644 index 000000000..e39f0bb0c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hdl.compile new file mode 100644 index 000000000..6d534830c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_lc_otp_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_lc_otp_if_if.sv + - src/fuse_ctrl_lc_otp_if_monitor_bfm.sv + - src/fuse_ctrl_lc_otp_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hvl.compile new file mode 100644 index 000000000..208b3d517 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_lc_otp_if_common.compile +incdir: + - . +src: + - fuse_ctrl_lc_otp_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.sv new file mode 100644 index 000000000..6bf19e8ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_lc_otp_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_lc_otp_if_macros.svh" + + export fuse_ctrl_lc_otp_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_lc_otp_if_typedefs.svh" + `include "src/fuse_ctrl_lc_otp_if_transaction.svh" + + `include "src/fuse_ctrl_lc_otp_if_configuration.svh" + `include "src/fuse_ctrl_lc_otp_if_driver.svh" + `include "src/fuse_ctrl_lc_otp_if_monitor.svh" + + `include "src/fuse_ctrl_lc_otp_if_transaction_coverage.svh" + `include "src/fuse_ctrl_lc_otp_if_sequence_base.svh" + `include "src/fuse_ctrl_lc_otp_if_random_sequence.svh" + + `include "src/fuse_ctrl_lc_otp_if_responder_sequence.svh" + `include "src/fuse_ctrl_lc_otp_if2reg_adapter.svh" + + `include "src/fuse_ctrl_lc_otp_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.vinfo new file mode 100644 index 000000000..f712ae9b4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_lc_otp_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_lc_otp_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.sv new file mode 100644 index 000000000..a4cdc7c70 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_lc_otp_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.vinfo new file mode 100644 index 000000000..a99ea0171 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_lc_otp_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_sve.F new file mode 100644 index 000000000..950466b92 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if2reg_adapter.svh new file mode 100644 index 000000000..e9b1a7897 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_lc_otp_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_lc_otp_if2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_lc_otp_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_lc_otp_if_transaction trans_h = fuse_ctrl_lc_otp_if_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_lc_otp_if_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_lc_otp_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_agent.svh new file mode 100644 index 000000000..bc148927a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_lc_otp_if_configuration ), + .DRIVER_T(fuse_ctrl_lc_otp_if_driver ), + .MONITOR_T(fuse_ctrl_lc_otp_if_monitor ), + .COVERAGE_T(fuse_ctrl_lc_otp_if_transaction_coverage ), + .TRANS_T(fuse_ctrl_lc_otp_if_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_lc_otp_if_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_configuration.svh new file mode 100644 index 000000000..92685e229 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_lc_otp_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_lc_otp_if_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_lc_otp_if_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_lc_otp_if_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_lc_otp_if_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_lc_otp_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_CONFIGURATION_STRUCT + fuse_ctrl_lc_otp_if_configuration_s fuse_ctrl_lc_otp_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_lc_otp_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_if_configuration_struct. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_lc_otp_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_lc_otp_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_lc_otp_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_lc_otp_if_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_lc_otp_if_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_lc_otp_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_lc_otp_if_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver.svh new file mode 100644 index 000000000..d96c73f4f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_lc_otp_if_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_if_driver_bfm ), + .REQ(fuse_ctrl_lc_otp_if_transaction ), + .RSP(fuse_ctrl_lc_otp_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_if_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_lc_otp_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_lc_otp_if_driver_bfm. +`fuse_ctrl_lc_otp_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_if_initiator_s fuse_ctrl_lc_otp_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_lc_otp_if_driver_bfm. +`fuse_ctrl_lc_otp_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_if_responder_s fuse_ctrl_lc_otp_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_lc_otp_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_lc_otp_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_lc_otp_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_lc_otp_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver_bfm.sv new file mode 100644 index 000000000..5675f3b6c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver_bfm.sv @@ -0,0 +1,321 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_lc_otp_if signal driving. It is +// accessed by the uvm fuse_ctrl_lc_otp_if driver through a virtual interface +// handle in the fuse_ctrl_lc_otp_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_lc_otp_if_if. +// +// Input signals from the fuse_ctrl_lc_otp_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_lc_otp_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_if_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_if_macros.svh" + +interface fuse_ctrl_lc_otp_if_driver_bfm + (fuse_ctrl_lc_otp_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_i; + reg [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_o = 'bz; + tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_i; + reg [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.lc_otp_vendor_test_i = (initiator_responder == INITIATOR) ? lc_otp_vendor_test_i_o : 'bz; + assign lc_otp_vendor_test_i_i = bus.lc_otp_vendor_test_i; + assign bus.lc_otp_program_i = (initiator_responder == INITIATOR) ? lc_otp_program_i_o : 'bz; + assign lc_otp_program_i_i = bus.lc_otp_program_i; + assign bus.lc_dft_en_i = (initiator_responder == INITIATOR) ? lc_dft_en_i_o : 'bz; + assign lc_dft_en_i_i = bus.lc_dft_en_i; + assign bus.lc_escalate_en_i = (initiator_responder == INITIATOR) ? lc_escalate_en_i_o : 'bz; + assign lc_escalate_en_i_i = bus.lc_escalate_en_i; + assign bus.lc_check_byp_en_i = (initiator_responder == INITIATOR) ? lc_check_byp_en_i_o : 'bz; + assign lc_check_byp_en_i_i = bus.lc_check_byp_en_i; + + // Proxy handle to UVM driver + fuse_ctrl_lc_otp_if_pkg::fuse_ctrl_lc_otp_if_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_lc_otp_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_lc_otp_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_lc_otp_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_if_driver_bfm. + `fuse_ctrl_lc_otp_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_if_driver_bfm. + `fuse_ctrl_lc_otp_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + lc_otp_vendor_test_i_o <= 'bz; + lc_otp_program_i_o <= 'bz; + lc_dft_en_i_o <= 'bz; + lc_escalate_en_i_o <= 'bz; + lc_check_byp_en_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_lc_otp_if_configuration_s fuse_ctrl_lc_otp_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_lc_otp_if_initiator_s fuse_ctrl_lc_otp_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_lc_otp_if_responder_s fuse_ctrl_lc_otp_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_lc_otp_if_initiator_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Members within the fuse_ctrl_lc_otp_if_responder_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + initiator_struct = fuse_ctrl_lc_otp_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // lc_otp_vendor_test_i_o <= fuse_ctrl_lc_otp_if_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // lc_otp_program_i_o <= fuse_ctrl_lc_otp_if_initiator_struct.xyz; // [$bits(lc_otp_program_req_t)-1:0] + // lc_dft_en_i_o <= fuse_ctrl_lc_otp_if_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // lc_escalate_en_i_o <= fuse_ctrl_lc_otp_if_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // lc_check_byp_en_i_o <= fuse_ctrl_lc_otp_if_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_lc_otp_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_lc_otp_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_lc_otp_if_initiator_s fuse_ctrl_lc_otp_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_lc_otp_if_responder_s fuse_ctrl_lc_otp_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_lc_otp_if_initiator_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Variables within the fuse_ctrl_lc_otp_if_responder_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_lc_otp_if_responder_struct.xyz = lc_otp_vendor_test_i_i; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // fuse_ctrl_lc_otp_if_responder_struct.xyz = lc_otp_program_i_i; // [$bits(lc_otp_program_req_t)-1:0] + // fuse_ctrl_lc_otp_if_responder_struct.xyz = lc_dft_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_if_responder_struct.xyz = lc_escalate_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_if_responder_struct.xyz = lc_check_byp_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_lc_otp_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_lc_otp_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_if.sv new file mode 100644 index 000000000..523ae029b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_if.sv @@ -0,0 +1,98 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_lc_otp_if interface signals. +// It is instantiated once per fuse_ctrl_lc_otp_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_lc_otp_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_lc_otp_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_lc_otp_if_bus.lc_otp_vendor_test_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_if_bus.lc_otp_program_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_if_bus.lc_dft_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_if_bus.lc_escalate_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_if_bus.lc_check_byp_en_i), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_if_pkg_hdl::*; + +interface fuse_ctrl_lc_otp_if_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i, + inout tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_i, + input lc_otp_program_i, + input lc_dft_en_i, + input lc_escalate_en_i, + input lc_check_byp_en_i + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output lc_otp_vendor_test_i, + output lc_otp_program_i, + output lc_dft_en_i, + output lc_escalate_en_i, + output lc_check_byp_en_i + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_i, + input lc_otp_program_i, + input lc_dft_en_i, + input lc_escalate_en_i, + input lc_check_byp_en_i + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_macros.svh new file mode 100644 index 000000000..98f551beb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_macros.svh @@ -0,0 +1,153 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_lc_otp_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_lc_otp_if_configuration class. +// + `define fuse_ctrl_lc_otp_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_lc_otp_if_configuration_s; + + `define fuse_ctrl_lc_otp_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_if_configuration_s to_struct();\ + fuse_ctrl_lc_otp_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_lc_otp_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_lc_otp_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_lc_otp_if_configuration_s fuse_ctrl_lc_otp_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_lc_otp_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_lc_otp_if_transaction class. +// + `define fuse_ctrl_lc_otp_if_MONITOR_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_if_monitor_s; + + `define fuse_ctrl_lc_otp_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_if_monitor_s to_monitor_struct();\ + fuse_ctrl_lc_otp_if_monitor_struct = \ + { \ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_lc_otp_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_lc_otp_if_monitor_s fuse_ctrl_lc_otp_if_monitor_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_lc_otp_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_if_INITIATOR_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_if_initiator_s; + + `define fuse_ctrl_lc_otp_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_if_initiator_s to_initiator_struct();\ + fuse_ctrl_lc_otp_if_initiator_struct = \ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_lc_otp_if_initiator_s fuse_ctrl_lc_otp_if_initiator_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_lc_otp_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_if_RESPONDER_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_if_responder_s; + + `define fuse_ctrl_lc_otp_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_if_responder_s to_responder_struct();\ + fuse_ctrl_lc_otp_if_responder_struct = \ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_if_responder_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_lc_otp_if_responder_s fuse_ctrl_lc_otp_if_responder_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor.svh new file mode 100644 index 000000000..cbf67060e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_lc_otp_if transactions observed by the +// fuse_ctrl_lc_otp_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_lc_otp_if_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_if_monitor_bfm ), + .TRANS_T(fuse_ctrl_lc_otp_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_if_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_lc_otp_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_lc_otp_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_lc_otp_if_monitor_s fuse_ctrl_lc_otp_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_lc_otp_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor_bfm.sv new file mode 100644 index 000000000..8ac6ebeac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor_bfm.sv @@ -0,0 +1,202 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_lc_otp_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_lc_otp_if monitor through a virtual +// interface handle in the fuse_ctrl_lc_otp_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_lc_otp_if_if. +// +// Input signals from the fuse_ctrl_lc_otp_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_lc_otp_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_if_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_if_macros.svh" + + +interface fuse_ctrl_lc_otp_if_monitor_bfm + ( fuse_ctrl_lc_otp_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_lc_otp_if_MONITOR_STRUCT + fuse_ctrl_lc_otp_if_monitor_s fuse_ctrl_lc_otp_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_lc_otp_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_i; + tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign lc_otp_vendor_test_i_i = bus.lc_otp_vendor_test_i; + assign lc_otp_program_i_i = bus.lc_otp_program_i; + assign lc_dft_en_i_i = bus.lc_dft_en_i; + assign lc_escalate_en_i_i = bus.lc_escalate_en_i; + assign lc_check_byp_en_i_i = bus.lc_check_byp_en_i; + + // Proxy handle to UVM monitor + fuse_ctrl_lc_otp_if_pkg::fuse_ctrl_lc_otp_if_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_lc_otp_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_lc_otp_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_lc_otp_if_configuration_s fuse_ctrl_lc_otp_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_lc_otp_if_monitor_s fuse_ctrl_lc_otp_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_lc_otp_if_monitor_struct.lc_dft_en_i + // // fuse_ctrl_lc_otp_if_monitor_struct.lc_escalate_en_i + // // fuse_ctrl_lc_otp_if_monitor_struct.lc_check_byp_en_i + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_lc_otp_if_monitor_struct.xyz = lc_otp_vendor_test_i_i; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // fuse_ctrl_lc_otp_if_monitor_struct.xyz = lc_otp_program_i_i; // [$bits(lc_otp_program_req_t)-1:0] + // fuse_ctrl_lc_otp_if_monitor_struct.xyz = lc_dft_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_if_monitor_struct.xyz = lc_escalate_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_if_monitor_struct.xyz = lc_check_byp_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_random_sequence.svh new file mode 100644 index 000000000..0fce942fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_lc_otp_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_lc_otp_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_random_sequence + extends fuse_ctrl_lc_otp_if_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_if_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_lc_otp_if_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_lc_otp_if_random_sequence::body()-fuse_ctrl_lc_otp_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_lc_otp_if_driver_bfm via the sequencer and fuse_ctrl_lc_otp_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_lc_otp_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_responder_sequence.svh new file mode 100644 index 000000000..8636e02b0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_responder_sequence + extends fuse_ctrl_lc_otp_if_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_if_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_lc_otp_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_lc_otp_if_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_sequence_base.svh new file mode 100644 index 000000000..3be42a152 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_lc_otp_if_transaction ), + .RSP(fuse_ctrl_lc_otp_if_transaction )); + + `uvm_object_utils( fuse_ctrl_lc_otp_if_sequence_base ) + + // variables + typedef fuse_ctrl_lc_otp_if_transaction fuse_ctrl_lc_otp_if_transaction_req_t; + fuse_ctrl_lc_otp_if_transaction_req_t req; + typedef fuse_ctrl_lc_otp_if_transaction fuse_ctrl_lc_otp_if_transaction_rsp_t; + fuse_ctrl_lc_otp_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_lc_otp_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_lc_otp_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction.svh new file mode 100644 index 000000000..695d6b043 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction.svh @@ -0,0 +1,201 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_lc_otp_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_lc_otp_if_transaction ) + + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_lc_otp_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_lc_otp_if_monitor and fuse_ctrl_lc_otp_if_monitor_bfm + // This struct is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_MONITOR_STRUCT + fuse_ctrl_lc_otp_if_monitor_s fuse_ctrl_lc_otp_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_if_monitor_struct. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_if_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_if_initiator_s fuse_ctrl_lc_otp_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_if_initiator_struct. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_if_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_if_responder_s fuse_ctrl_lc_otp_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_if_responder_struct. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("lc_dft_en_i:0x%x lc_escalate_en_i:0x%x lc_check_byp_en_i:0x%x ",lc_dft_en_i,lc_escalate_en_i,lc_check_byp_en_i); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_lc_otp_if_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_lc_otp_if_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.lc_dft_en_i = RHS.lc_dft_en_i; + this.lc_escalate_en_i = RHS.lc_escalate_en_i; + this.lc_check_byp_en_i = RHS.lc_check_byp_en_i; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_lc_otp_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,lc_dft_en_i,"lc_dft_en_i"); + $add_attribute(transaction_view_h,lc_escalate_en_i,"lc_escalate_en_i"); + $add_attribute(transaction_view_h,lc_check_byp_en_i,"lc_check_byp_en_i"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction_coverage.svh new file mode 100644 index 000000000..d0cfad043 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction_coverage.svh @@ -0,0 +1,86 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_lc_otp_if transaction information using +// a covergroup named fuse_ctrl_lc_otp_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_lc_otp_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_if_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_lc_otp_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + lc_dft_en_i: coverpoint coverage_trans.lc_dft_en_i; + lc_escalate_en_i: coverpoint coverage_trans.lc_escalate_en_i; + lc_check_byp_en_i: coverpoint coverage_trans.lc_check_byp_en_i; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_lc_otp_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_lc_otp_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_lc_otp_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/yaml/fuse_ctrl_lc_otp_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/yaml/fuse_ctrl_lc_otp_if_interface.yaml new file mode 100644 index 000000000..d24f3aef1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/yaml/fuse_ctrl_lc_otp_if_interface.yaml @@ -0,0 +1,57 @@ +uvmf: + interfaces: + fuse_ctrl_lc_otp_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: output + name: lc_otp_vendor_test_i + reset_value: '''bz' + width: '[''$bits(lc_otp_vendor_test_req_t)'']' + - dir: output + name: lc_otp_program_i + reset_value: '''bz' + width: '[''$bits(lc_otp_program_req_t)'']' + - dir: output + name: lc_dft_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + - dir: output + name: lc_escalate_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + - dir: output + name: lc_check_byp_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_dft_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_escalate_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_check_byp_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.project new file mode 100644 index 000000000..991dede72 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_lc_otp_in_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.svproject new file mode 100644 index 000000000..77a2ded66 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/Makefile new file mode 100644 index 000000000..1b21f7ed4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_lc_otp_in_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_lc_otp_in_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hvl.f + +fuse_ctrl_lc_otp_in_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hdl.f + +fuse_ctrl_lc_otp_in_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_xrtl.f + +COMP_fuse_ctrl_lc_otp_in_if_PKG_TGT_0 = q_comp_fuse_ctrl_lc_otp_in_if_pkg +COMP_fuse_ctrl_lc_otp_in_if_PKG_TGT_1 = v_comp_fuse_ctrl_lc_otp_in_if_pkg +COMP_fuse_ctrl_lc_otp_in_if_PKG_TGT = $(COMP_fuse_ctrl_lc_otp_in_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_lc_otp_in_if_pkg: $(COMP_fuse_ctrl_lc_otp_in_if_PKG_TGT) + +q_comp_fuse_ctrl_lc_otp_in_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_in_if_PKG_XRTL) + +v_comp_fuse_ctrl_lc_otp_in_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_in_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_lc_otp_in_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_lc_otp_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_in_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_lc_otp_in_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_in_if_pkg += -I$(fuse_ctrl_lc_otp_in_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_in_if_pkg += $(fuse_ctrl_lc_otp_in_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_lc_otp_in_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_lc_otp_in_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_lc_otp_in_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_lc_otp_in_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/compile.do new file mode 100644 index 000000000..0734f2115 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_lc_otp_in_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if.compile new file mode 100644 index 000000000..aa08b9bb4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_lc_otp_in_if_hvl.compile + - fuse_ctrl_lc_otp_in_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_bfm.vinfo new file mode 100644 index 000000000..186ee8240 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_lc_otp_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_lc_otp_in_if_if.sv +src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv +src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_common.compile new file mode 100644 index 000000000..fa80957cc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_lc_otp_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hdl.f new file mode 100644 index 000000000..5c87977b4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hvl.f new file mode 100644 index 000000000..443604421 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_xrtl.f new file mode 100644 index 000000000..2752b1fda --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hdl.compile new file mode 100644 index 000000000..d4b535457 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_lc_otp_in_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_lc_otp_in_if_if.sv + - src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv + - src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hvl.compile new file mode 100644 index 000000000..4dcbd0438 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_lc_otp_in_if_common.compile +incdir: + - . +src: + - fuse_ctrl_lc_otp_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.sv new file mode 100644 index 000000000..222ac1f65 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_in_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_lc_otp_in_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_lc_otp_in_if_macros.svh" + + export fuse_ctrl_lc_otp_in_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_lc_otp_in_if_typedefs.svh" + `include "src/fuse_ctrl_lc_otp_in_if_transaction.svh" + + `include "src/fuse_ctrl_lc_otp_in_if_configuration.svh" + `include "src/fuse_ctrl_lc_otp_in_if_driver.svh" + `include "src/fuse_ctrl_lc_otp_in_if_monitor.svh" + + `include "src/fuse_ctrl_lc_otp_in_if_transaction_coverage.svh" + `include "src/fuse_ctrl_lc_otp_in_if_sequence_base.svh" + `include "src/fuse_ctrl_lc_otp_in_if_random_sequence.svh" + + `include "src/fuse_ctrl_lc_otp_in_if_responder_sequence.svh" + `include "src/fuse_ctrl_lc_otp_in_if2reg_adapter.svh" + + `include "src/fuse_ctrl_lc_otp_in_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.vinfo new file mode 100644 index 000000000..867918714 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_lc_otp_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_lc_otp_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.sv new file mode 100644 index 000000000..53d891062 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_in_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_lc_otp_in_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_lc_otp_in_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.vinfo new file mode 100644 index 000000000..47ec6ae84 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_lc_otp_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_sve.F new file mode 100644 index 000000000..3ae1e74b1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if2reg_adapter.svh new file mode 100644 index 000000000..56a7c8934 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_lc_otp_in_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_lc_otp_in_if2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_lc_otp_in_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_lc_otp_in_if_transaction trans_h = fuse_ctrl_lc_otp_in_if_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_lc_otp_in_if_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_lc_otp_in_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_agent.svh new file mode 100644 index 000000000..4950f6a51 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_lc_otp_in_if_configuration ), + .DRIVER_T(fuse_ctrl_lc_otp_in_if_driver ), + .MONITOR_T(fuse_ctrl_lc_otp_in_if_monitor ), + .COVERAGE_T(fuse_ctrl_lc_otp_in_if_transaction_coverage ), + .TRANS_T(fuse_ctrl_lc_otp_in_if_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_if_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_configuration.svh new file mode 100644 index 000000000..36f931b74 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_lc_otp_in_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_lc_otp_in_if_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_lc_otp_in_if_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_lc_otp_in_if_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_lc_otp_in_if_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_lc_otp_in_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_CONFIGURATION_STRUCT + fuse_ctrl_lc_otp_in_if_configuration_s fuse_ctrl_lc_otp_in_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_lc_otp_in_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_if_configuration_struct. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_lc_otp_in_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_lc_otp_in_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_lc_otp_in_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_lc_otp_in_if_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_lc_otp_in_if_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_lc_otp_in_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_in_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_lc_otp_in_if_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver.svh new file mode 100644 index 000000000..b5699c94f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_lc_otp_in_if_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_in_if_driver_bfm ), + .REQ(fuse_ctrl_lc_otp_in_if_transaction ), + .RSP(fuse_ctrl_lc_otp_in_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_if_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_lc_otp_in_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_lc_otp_in_if_driver and fuse_ctrl_lc_otp_in_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_lc_otp_in_if_driver_bfm. +`fuse_ctrl_lc_otp_in_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_in_if_initiator_s fuse_ctrl_lc_otp_in_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_lc_otp_in_if_driver and fuse_ctrl_lc_otp_in_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_lc_otp_in_if_driver_bfm. +`fuse_ctrl_lc_otp_in_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_in_if_responder_s fuse_ctrl_lc_otp_in_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_lc_otp_in_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_lc_otp_in_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_lc_otp_in_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_lc_otp_in_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv new file mode 100644 index 000000000..5cc5aed55 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv @@ -0,0 +1,321 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_lc_otp_in_if signal driving. It is +// accessed by the uvm fuse_ctrl_lc_otp_in_if driver through a virtual interface +// handle in the fuse_ctrl_lc_otp_in_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_lc_otp_in_if_if. +// +// Input signals from the fuse_ctrl_lc_otp_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_lc_otp_in_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_in_if_macros.svh" + +interface fuse_ctrl_lc_otp_in_if_driver_bfm + (fuse_ctrl_lc_otp_in_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_in_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_i; + reg [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_o = 'bz; + tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_i; + reg [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.lc_otp_vendor_test_i = (initiator_responder == INITIATOR) ? lc_otp_vendor_test_i_o : 'bz; + assign lc_otp_vendor_test_i_i = bus.lc_otp_vendor_test_i; + assign bus.lc_otp_program_i = (initiator_responder == INITIATOR) ? lc_otp_program_i_o : 'bz; + assign lc_otp_program_i_i = bus.lc_otp_program_i; + assign bus.lc_dft_en_i = (initiator_responder == INITIATOR) ? lc_dft_en_i_o : 'bz; + assign lc_dft_en_i_i = bus.lc_dft_en_i; + assign bus.lc_escalate_en_i = (initiator_responder == INITIATOR) ? lc_escalate_en_i_o : 'bz; + assign lc_escalate_en_i_i = bus.lc_escalate_en_i; + assign bus.lc_check_byp_en_i = (initiator_responder == INITIATOR) ? lc_check_byp_en_i_o : 'bz; + assign lc_check_byp_en_i_i = bus.lc_check_byp_en_i; + + // Proxy handle to UVM driver + fuse_ctrl_lc_otp_in_if_pkg::fuse_ctrl_lc_otp_in_if_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_lc_otp_in_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_lc_otp_in_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_lc_otp_in_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_in_if_driver and fuse_ctrl_lc_otp_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_in_if_driver_bfm. + `fuse_ctrl_lc_otp_in_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_in_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_lc_otp_in_if_driver and fuse_ctrl_lc_otp_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_in_if_driver_bfm. + `fuse_ctrl_lc_otp_in_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_in_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + lc_otp_vendor_test_i_o <= 'bz; + lc_otp_program_i_o <= 'bz; + lc_dft_en_i_o <= 'bz; + lc_escalate_en_i_o <= 'bz; + lc_check_byp_en_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_lc_otp_in_if_configuration_s fuse_ctrl_lc_otp_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_lc_otp_in_if_initiator_s fuse_ctrl_lc_otp_in_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_lc_otp_in_if_responder_s fuse_ctrl_lc_otp_in_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_lc_otp_in_if_initiator_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Members within the fuse_ctrl_lc_otp_in_if_responder_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + initiator_struct = fuse_ctrl_lc_otp_in_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // lc_otp_vendor_test_i_o <= fuse_ctrl_lc_otp_in_if_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // lc_otp_program_i_o <= fuse_ctrl_lc_otp_in_if_initiator_struct.xyz; // [$bits(lc_otp_program_req_t)-1:0] + // lc_dft_en_i_o <= fuse_ctrl_lc_otp_in_if_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // lc_escalate_en_i_o <= fuse_ctrl_lc_otp_in_if_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // lc_check_byp_en_i_o <= fuse_ctrl_lc_otp_in_if_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_lc_otp_in_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_lc_otp_in_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_lc_otp_in_if_initiator_s fuse_ctrl_lc_otp_in_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_lc_otp_in_if_responder_s fuse_ctrl_lc_otp_in_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_lc_otp_in_if_initiator_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Variables within the fuse_ctrl_lc_otp_in_if_responder_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_lc_otp_in_if_responder_struct.xyz = lc_otp_vendor_test_i_i; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // fuse_ctrl_lc_otp_in_if_responder_struct.xyz = lc_otp_program_i_i; // [$bits(lc_otp_program_req_t)-1:0] + // fuse_ctrl_lc_otp_in_if_responder_struct.xyz = lc_dft_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_if_responder_struct.xyz = lc_escalate_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_if_responder_struct.xyz = lc_check_byp_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_lc_otp_in_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_lc_otp_in_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_if.sv new file mode 100644 index 000000000..b66aee0c5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_if.sv @@ -0,0 +1,98 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_lc_otp_in_if interface signals. +// It is instantiated once per fuse_ctrl_lc_otp_in_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_lc_otp_in_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_lc_otp_in_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_lc_otp_in_if_bus.lc_otp_vendor_test_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_if_bus.lc_otp_program_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_if_bus.lc_dft_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_if_bus.lc_escalate_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_if_bus.lc_check_byp_en_i), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_in_if_pkg_hdl::*; + +interface fuse_ctrl_lc_otp_in_if_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i, + inout tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_i, + input lc_otp_program_i, + input lc_dft_en_i, + input lc_escalate_en_i, + input lc_check_byp_en_i + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output lc_otp_vendor_test_i, + output lc_otp_program_i, + output lc_dft_en_i, + output lc_escalate_en_i, + output lc_check_byp_en_i + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_i, + input lc_otp_program_i, + input lc_dft_en_i, + input lc_escalate_en_i, + input lc_check_byp_en_i + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_macros.svh new file mode 100644 index 000000000..8a54f0aa1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_macros.svh @@ -0,0 +1,153 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_lc_otp_in_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_lc_otp_in_if_configuration class. +// + `define fuse_ctrl_lc_otp_in_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_lc_otp_in_if_configuration_s; + + `define fuse_ctrl_lc_otp_in_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_if_configuration_s to_struct();\ + fuse_ctrl_lc_otp_in_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_lc_otp_in_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_lc_otp_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_lc_otp_in_if_configuration_s fuse_ctrl_lc_otp_in_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_lc_otp_in_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_lc_otp_in_if_transaction class. +// + `define fuse_ctrl_lc_otp_in_if_MONITOR_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_in_if_monitor_s; + + `define fuse_ctrl_lc_otp_in_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_if_monitor_s to_monitor_struct();\ + fuse_ctrl_lc_otp_in_if_monitor_struct = \ + { \ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_in_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_lc_otp_in_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_lc_otp_in_if_monitor_s fuse_ctrl_lc_otp_in_if_monitor_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_in_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_lc_otp_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_in_if_INITIATOR_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_in_if_initiator_s; + + `define fuse_ctrl_lc_otp_in_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_if_initiator_s to_initiator_struct();\ + fuse_ctrl_lc_otp_in_if_initiator_struct = \ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_in_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_in_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_lc_otp_in_if_initiator_s fuse_ctrl_lc_otp_in_if_initiator_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_in_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_lc_otp_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_in_if_RESPONDER_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_in_if_responder_s; + + `define fuse_ctrl_lc_otp_in_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_if_responder_s to_responder_struct();\ + fuse_ctrl_lc_otp_in_if_responder_struct = \ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_in_if_responder_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_in_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_lc_otp_in_if_responder_s fuse_ctrl_lc_otp_in_if_responder_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_in_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor.svh new file mode 100644 index 000000000..02ed6b9d5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_lc_otp_in_if transactions observed by the +// fuse_ctrl_lc_otp_in_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_lc_otp_in_if_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_in_if_monitor_bfm ), + .TRANS_T(fuse_ctrl_lc_otp_in_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_if_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_lc_otp_in_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_lc_otp_in_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_lc_otp_in_if_monitor_s fuse_ctrl_lc_otp_in_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_lc_otp_in_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv new file mode 100644 index 000000000..cd1494da0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv @@ -0,0 +1,202 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_lc_otp_in_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_lc_otp_in_if monitor through a virtual +// interface handle in the fuse_ctrl_lc_otp_in_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_lc_otp_in_if_if. +// +// Input signals from the fuse_ctrl_lc_otp_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_lc_otp_in_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_in_if_macros.svh" + + +interface fuse_ctrl_lc_otp_in_if_monitor_bfm + ( fuse_ctrl_lc_otp_in_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_in_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_lc_otp_in_if_MONITOR_STRUCT + fuse_ctrl_lc_otp_in_if_monitor_s fuse_ctrl_lc_otp_in_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_lc_otp_in_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_i; + tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign lc_otp_vendor_test_i_i = bus.lc_otp_vendor_test_i; + assign lc_otp_program_i_i = bus.lc_otp_program_i; + assign lc_dft_en_i_i = bus.lc_dft_en_i; + assign lc_escalate_en_i_i = bus.lc_escalate_en_i; + assign lc_check_byp_en_i_i = bus.lc_check_byp_en_i; + + // Proxy handle to UVM monitor + fuse_ctrl_lc_otp_in_if_pkg::fuse_ctrl_lc_otp_in_if_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_lc_otp_in_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_lc_otp_in_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_lc_otp_in_if_configuration_s fuse_ctrl_lc_otp_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_lc_otp_in_if_monitor_s fuse_ctrl_lc_otp_in_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_lc_otp_in_if_monitor_struct.lc_dft_en_i + // // fuse_ctrl_lc_otp_in_if_monitor_struct.lc_escalate_en_i + // // fuse_ctrl_lc_otp_in_if_monitor_struct.lc_check_byp_en_i + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_lc_otp_in_if_monitor_struct.xyz = lc_otp_vendor_test_i_i; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // fuse_ctrl_lc_otp_in_if_monitor_struct.xyz = lc_otp_program_i_i; // [$bits(lc_otp_program_req_t)-1:0] + // fuse_ctrl_lc_otp_in_if_monitor_struct.xyz = lc_dft_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_if_monitor_struct.xyz = lc_escalate_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_if_monitor_struct.xyz = lc_check_byp_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_random_sequence.svh new file mode 100644 index 000000000..d3283cbbd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_lc_otp_in_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_lc_otp_in_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_random_sequence + extends fuse_ctrl_lc_otp_in_if_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_in_if_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_lc_otp_in_if_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_lc_otp_in_if_random_sequence::body()-fuse_ctrl_lc_otp_in_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_lc_otp_in_if_driver_bfm via the sequencer and fuse_ctrl_lc_otp_in_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_lc_otp_in_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_responder_sequence.svh new file mode 100644 index 000000000..4f7b3dcf7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_responder_sequence + extends fuse_ctrl_lc_otp_in_if_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_in_if_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_lc_otp_in_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_lc_otp_in_if_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_sequence_base.svh new file mode 100644 index 000000000..d92d33cf2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_lc_otp_in_if_transaction ), + .RSP(fuse_ctrl_lc_otp_in_if_transaction )); + + `uvm_object_utils( fuse_ctrl_lc_otp_in_if_sequence_base ) + + // variables + typedef fuse_ctrl_lc_otp_in_if_transaction fuse_ctrl_lc_otp_in_if_transaction_req_t; + fuse_ctrl_lc_otp_in_if_transaction_req_t req; + typedef fuse_ctrl_lc_otp_in_if_transaction fuse_ctrl_lc_otp_in_if_transaction_rsp_t; + fuse_ctrl_lc_otp_in_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_lc_otp_in_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_lc_otp_in_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction.svh new file mode 100644 index 000000000..9a35652c3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction.svh @@ -0,0 +1,201 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_lc_otp_in_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_lc_otp_in_if_transaction ) + + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_lc_otp_in_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_lc_otp_in_if_monitor and fuse_ctrl_lc_otp_in_if_monitor_bfm + // This struct is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_MONITOR_STRUCT + fuse_ctrl_lc_otp_in_if_monitor_s fuse_ctrl_lc_otp_in_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_in_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_if_monitor_struct. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_in_if_driver and fuse_ctrl_lc_otp_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_in_if_initiator_s fuse_ctrl_lc_otp_in_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_in_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_if_initiator_struct. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_lc_otp_in_if_driver and fuse_ctrl_lc_otp_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_in_if_responder_s fuse_ctrl_lc_otp_in_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_in_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_if_responder_struct. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("lc_dft_en_i:0x%x lc_escalate_en_i:0x%x lc_check_byp_en_i:0x%x ",lc_dft_en_i,lc_escalate_en_i,lc_check_byp_en_i); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_lc_otp_in_if_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_lc_otp_in_if_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.lc_dft_en_i = RHS.lc_dft_en_i; + this.lc_escalate_en_i = RHS.lc_escalate_en_i; + this.lc_check_byp_en_i = RHS.lc_check_byp_en_i; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_lc_otp_in_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,lc_dft_en_i,"lc_dft_en_i"); + $add_attribute(transaction_view_h,lc_escalate_en_i,"lc_escalate_en_i"); + $add_attribute(transaction_view_h,lc_check_byp_en_i,"lc_check_byp_en_i"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction_coverage.svh new file mode 100644 index 000000000..6c47ed21e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction_coverage.svh @@ -0,0 +1,86 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_lc_otp_in_if transaction information using +// a covergroup named fuse_ctrl_lc_otp_in_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_lc_otp_in_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_if_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_lc_otp_in_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + lc_dft_en_i: coverpoint coverage_trans.lc_dft_en_i; + lc_escalate_en_i: coverpoint coverage_trans.lc_escalate_en_i; + lc_check_byp_en_i: coverpoint coverage_trans.lc_check_byp_en_i; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_lc_otp_in_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_lc_otp_in_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_in_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_lc_otp_in_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/yaml/fuse_ctrl_lc_otp_in_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/yaml/fuse_ctrl_lc_otp_in_if_interface.yaml new file mode 100644 index 000000000..c47ea5a7d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/yaml/fuse_ctrl_lc_otp_in_if_interface.yaml @@ -0,0 +1,57 @@ +uvmf: + interfaces: + fuse_ctrl_lc_otp_in_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: output + name: lc_otp_vendor_test_i + reset_value: '''bz' + width: '[''$bits(lc_otp_vendor_test_req_t)'']' + - dir: output + name: lc_otp_program_i + reset_value: '''bz' + width: '[''$bits(lc_otp_program_req_t)'']' + - dir: output + name: lc_dft_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + - dir: output + name: lc_escalate_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + - dir: output + name: lc_check_byp_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_dft_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_escalate_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_check_byp_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.project new file mode 100644 index 000000000..bc9bb7a1d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_lc_otp_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.svproject new file mode 100644 index 000000000..e267e6c41 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/Makefile new file mode 100644 index 000000000..48df82f15 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_lc_otp_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_lc_otp_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hvl.f + +fuse_ctrl_lc_otp_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hdl.f + +fuse_ctrl_lc_otp_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_xrtl.f + +COMP_fuse_ctrl_lc_otp_in_PKG_TGT_0 = q_comp_fuse_ctrl_lc_otp_in_pkg +COMP_fuse_ctrl_lc_otp_in_PKG_TGT_1 = v_comp_fuse_ctrl_lc_otp_in_pkg +COMP_fuse_ctrl_lc_otp_in_PKG_TGT = $(COMP_fuse_ctrl_lc_otp_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_lc_otp_in_pkg: $(COMP_fuse_ctrl_lc_otp_in_PKG_TGT) + +q_comp_fuse_ctrl_lc_otp_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_in_PKG_XRTL) + +v_comp_fuse_ctrl_lc_otp_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_lc_otp_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_lc_otp_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_lc_otp_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_in_pkg += -I$(fuse_ctrl_lc_otp_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_in_pkg += $(fuse_ctrl_lc_otp_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_lc_otp_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_lc_otp_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_lc_otp_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_lc_otp_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/compile.do new file mode 100644 index 000000000..2334cca94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_lc_otp_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in.compile new file mode 100644 index 000000000..934282f83 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_lc_otp_in_hvl.compile + - fuse_ctrl_lc_otp_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_bfm.vinfo new file mode 100644 index 000000000..35c34c5f1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_lc_otp_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_lc_otp_in_if.sv +src/fuse_ctrl_lc_otp_in_driver_bfm.sv +src/fuse_ctrl_lc_otp_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_common.compile new file mode 100644 index 000000000..5683974c1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_lc_otp_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hdl.f new file mode 100644 index 000000000..fd87f109b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hvl.f new file mode 100644 index 000000000..ea2637ffb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_xrtl.f new file mode 100644 index 000000000..736ca19e3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hdl.compile new file mode 100644 index 000000000..9def84f00 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_lc_otp_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_lc_otp_in_if.sv + - src/fuse_ctrl_lc_otp_in_monitor_bfm.sv + - src/fuse_ctrl_lc_otp_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hvl.compile new file mode 100644 index 000000000..03742057a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_lc_otp_in_common.compile +incdir: + - . +src: + - fuse_ctrl_lc_otp_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.sv new file mode 100644 index 000000000..707771742 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_lc_otp_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_lc_otp_in_macros.svh" + + export fuse_ctrl_lc_otp_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_lc_otp_in_typedefs.svh" + `include "src/fuse_ctrl_lc_otp_in_transaction.svh" + + `include "src/fuse_ctrl_lc_otp_in_configuration.svh" + `include "src/fuse_ctrl_lc_otp_in_driver.svh" + `include "src/fuse_ctrl_lc_otp_in_monitor.svh" + + `include "src/fuse_ctrl_lc_otp_in_transaction_coverage.svh" + `include "src/fuse_ctrl_lc_otp_in_sequence_base.svh" + `include "src/fuse_ctrl_lc_otp_in_random_sequence.svh" + + `include "src/fuse_ctrl_lc_otp_in_responder_sequence.svh" + `include "src/fuse_ctrl_lc_otp_in2reg_adapter.svh" + + `include "src/fuse_ctrl_lc_otp_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.vinfo new file mode 100644 index 000000000..a51e3e02c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_lc_otp_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_lc_otp_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.sv new file mode 100644 index 000000000..e1761c3ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_lc_otp_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_lc_otp_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.vinfo new file mode 100644 index 000000000..536dd9eed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_lc_otp_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_sve.F new file mode 100644 index 000000000..1f476e946 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in2reg_adapter.svh new file mode 100644 index 000000000..b1d2bb59c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_lc_otp_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_lc_otp_in2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_lc_otp_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_lc_otp_in_transaction trans_h = fuse_ctrl_lc_otp_in_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_lc_otp_in_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_lc_otp_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_agent.svh new file mode 100644 index 000000000..1bcc44562 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_lc_otp_in_configuration ), + .DRIVER_T(fuse_ctrl_lc_otp_in_driver ), + .MONITOR_T(fuse_ctrl_lc_otp_in_monitor ), + .COVERAGE_T(fuse_ctrl_lc_otp_in_transaction_coverage ), + .TRANS_T(fuse_ctrl_lc_otp_in_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_configuration.svh new file mode 100644 index 000000000..3d01dbb4f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_lc_otp_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_lc_otp_in_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_lc_otp_in_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_lc_otp_in_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_lc_otp_in_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_lc_otp_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_CONFIGURATION_STRUCT + fuse_ctrl_lc_otp_in_configuration_s fuse_ctrl_lc_otp_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_lc_otp_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_configuration_struct. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_lc_otp_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_lc_otp_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_lc_otp_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_lc_otp_in_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_lc_otp_in_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_lc_otp_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_lc_otp_in_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver.svh new file mode 100644 index 000000000..fc0a2193e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_lc_otp_in_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_in_driver_bfm ), + .REQ(fuse_ctrl_lc_otp_in_transaction ), + .RSP(fuse_ctrl_lc_otp_in_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_lc_otp_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_lc_otp_in_driver and fuse_ctrl_lc_otp_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_lc_otp_in_driver_bfm. +`fuse_ctrl_lc_otp_in_INITIATOR_STRUCT + fuse_ctrl_lc_otp_in_initiator_s fuse_ctrl_lc_otp_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_lc_otp_in_driver and fuse_ctrl_lc_otp_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_lc_otp_in_driver_bfm. +`fuse_ctrl_lc_otp_in_RESPONDER_STRUCT + fuse_ctrl_lc_otp_in_responder_s fuse_ctrl_lc_otp_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_lc_otp_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_lc_otp_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_lc_otp_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_lc_otp_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver_bfm.sv new file mode 100644 index 000000000..15738caa7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver_bfm.sv @@ -0,0 +1,321 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_lc_otp_in signal driving. It is +// accessed by the uvm fuse_ctrl_lc_otp_in driver through a virtual interface +// handle in the fuse_ctrl_lc_otp_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_lc_otp_in_if. +// +// Input signals from the fuse_ctrl_lc_otp_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_lc_otp_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_in_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_in_macros.svh" + +interface fuse_ctrl_lc_otp_in_driver_bfm + (fuse_ctrl_lc_otp_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_i; + reg [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_o = 'bz; + tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_i; + reg [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.lc_otp_vendor_test_i = (initiator_responder == INITIATOR) ? lc_otp_vendor_test_i_o : 'bz; + assign lc_otp_vendor_test_i_i = bus.lc_otp_vendor_test_i; + assign bus.lc_otp_program_i = (initiator_responder == INITIATOR) ? lc_otp_program_i_o : 'bz; + assign lc_otp_program_i_i = bus.lc_otp_program_i; + assign bus.lc_dft_en_i = (initiator_responder == INITIATOR) ? lc_dft_en_i_o : 'bz; + assign lc_dft_en_i_i = bus.lc_dft_en_i; + assign bus.lc_escalate_en_i = (initiator_responder == INITIATOR) ? lc_escalate_en_i_o : 'bz; + assign lc_escalate_en_i_i = bus.lc_escalate_en_i; + assign bus.lc_check_byp_en_i = (initiator_responder == INITIATOR) ? lc_check_byp_en_i_o : 'bz; + assign lc_check_byp_en_i_i = bus.lc_check_byp_en_i; + + // Proxy handle to UVM driver + fuse_ctrl_lc_otp_in_pkg::fuse_ctrl_lc_otp_in_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_lc_otp_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_lc_otp_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_lc_otp_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_in_driver and fuse_ctrl_lc_otp_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_in_driver_bfm. + `fuse_ctrl_lc_otp_in_INITIATOR_STRUCT + fuse_ctrl_lc_otp_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_lc_otp_in_driver and fuse_ctrl_lc_otp_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_in_driver_bfm. + `fuse_ctrl_lc_otp_in_RESPONDER_STRUCT + fuse_ctrl_lc_otp_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + lc_otp_vendor_test_i_o <= 'bz; + lc_otp_program_i_o <= 'bz; + lc_dft_en_i_o <= 'bz; + lc_escalate_en_i_o <= 'bz; + lc_check_byp_en_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_lc_otp_in_configuration_s fuse_ctrl_lc_otp_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_lc_otp_in_initiator_s fuse_ctrl_lc_otp_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_lc_otp_in_responder_s fuse_ctrl_lc_otp_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_lc_otp_in_initiator_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Members within the fuse_ctrl_lc_otp_in_responder_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + initiator_struct = fuse_ctrl_lc_otp_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // lc_otp_vendor_test_i_o <= fuse_ctrl_lc_otp_in_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // lc_otp_program_i_o <= fuse_ctrl_lc_otp_in_initiator_struct.xyz; // [$bits(lc_otp_program_req_t)-1:0] + // lc_dft_en_i_o <= fuse_ctrl_lc_otp_in_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // lc_escalate_en_i_o <= fuse_ctrl_lc_otp_in_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // lc_check_byp_en_i_o <= fuse_ctrl_lc_otp_in_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_lc_otp_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_lc_otp_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_lc_otp_in_initiator_s fuse_ctrl_lc_otp_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_lc_otp_in_responder_s fuse_ctrl_lc_otp_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_lc_otp_in_initiator_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Variables within the fuse_ctrl_lc_otp_in_responder_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_lc_otp_in_responder_struct.xyz = lc_otp_vendor_test_i_i; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // fuse_ctrl_lc_otp_in_responder_struct.xyz = lc_otp_program_i_i; // [$bits(lc_otp_program_req_t)-1:0] + // fuse_ctrl_lc_otp_in_responder_struct.xyz = lc_dft_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_responder_struct.xyz = lc_escalate_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_responder_struct.xyz = lc_check_byp_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_lc_otp_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_lc_otp_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_if.sv new file mode 100644 index 000000000..68a0925a0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_if.sv @@ -0,0 +1,98 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_lc_otp_in interface signals. +// It is instantiated once per fuse_ctrl_lc_otp_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_lc_otp_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_lc_otp_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_lc_otp_in_bus.lc_otp_vendor_test_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_bus.lc_otp_program_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_bus.lc_dft_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_bus.lc_escalate_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_bus.lc_check_byp_en_i), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_in_pkg_hdl::*; + +interface fuse_ctrl_lc_otp_in_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i, + inout tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_i, + input lc_otp_program_i, + input lc_dft_en_i, + input lc_escalate_en_i, + input lc_check_byp_en_i + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output lc_otp_vendor_test_i, + output lc_otp_program_i, + output lc_dft_en_i, + output lc_escalate_en_i, + output lc_check_byp_en_i + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_i, + input lc_otp_program_i, + input lc_dft_en_i, + input lc_escalate_en_i, + input lc_check_byp_en_i + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_macros.svh new file mode 100644 index 000000000..9ad130b28 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_macros.svh @@ -0,0 +1,153 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_lc_otp_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_lc_otp_in_configuration class. +// + `define fuse_ctrl_lc_otp_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_lc_otp_in_configuration_s; + + `define fuse_ctrl_lc_otp_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_configuration_s to_struct();\ + fuse_ctrl_lc_otp_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_lc_otp_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_lc_otp_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_lc_otp_in_configuration_s fuse_ctrl_lc_otp_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_lc_otp_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_lc_otp_in_transaction class. +// + `define fuse_ctrl_lc_otp_in_MONITOR_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_in_monitor_s; + + `define fuse_ctrl_lc_otp_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_monitor_s to_monitor_struct();\ + fuse_ctrl_lc_otp_in_monitor_struct = \ + { \ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_lc_otp_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_lc_otp_in_monitor_s fuse_ctrl_lc_otp_in_monitor_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_lc_otp_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_in_INITIATOR_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_in_initiator_s; + + `define fuse_ctrl_lc_otp_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_initiator_s to_initiator_struct();\ + fuse_ctrl_lc_otp_in_initiator_struct = \ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_lc_otp_in_initiator_s fuse_ctrl_lc_otp_in_initiator_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_lc_otp_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_in_RESPONDER_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_in_responder_s; + + `define fuse_ctrl_lc_otp_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_responder_s to_responder_struct();\ + fuse_ctrl_lc_otp_in_responder_struct = \ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_in_responder_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_lc_otp_in_responder_s fuse_ctrl_lc_otp_in_responder_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor.svh new file mode 100644 index 000000000..f046d7ea3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_lc_otp_in transactions observed by the +// fuse_ctrl_lc_otp_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_lc_otp_in_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_in_monitor_bfm ), + .TRANS_T(fuse_ctrl_lc_otp_in_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_lc_otp_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_lc_otp_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_lc_otp_in_monitor_s fuse_ctrl_lc_otp_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_lc_otp_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor_bfm.sv new file mode 100644 index 000000000..783657acb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor_bfm.sv @@ -0,0 +1,202 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_lc_otp_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_lc_otp_in monitor through a virtual +// interface handle in the fuse_ctrl_lc_otp_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_lc_otp_in_if. +// +// Input signals from the fuse_ctrl_lc_otp_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_lc_otp_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_in_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_in_macros.svh" + + +interface fuse_ctrl_lc_otp_in_monitor_bfm + ( fuse_ctrl_lc_otp_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_lc_otp_in_MONITOR_STRUCT + fuse_ctrl_lc_otp_in_monitor_s fuse_ctrl_lc_otp_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_lc_otp_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_i; + tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign lc_otp_vendor_test_i_i = bus.lc_otp_vendor_test_i; + assign lc_otp_program_i_i = bus.lc_otp_program_i; + assign lc_dft_en_i_i = bus.lc_dft_en_i; + assign lc_escalate_en_i_i = bus.lc_escalate_en_i; + assign lc_check_byp_en_i_i = bus.lc_check_byp_en_i; + + // Proxy handle to UVM monitor + fuse_ctrl_lc_otp_in_pkg::fuse_ctrl_lc_otp_in_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_lc_otp_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_lc_otp_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_lc_otp_in_configuration_s fuse_ctrl_lc_otp_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_lc_otp_in_monitor_s fuse_ctrl_lc_otp_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_lc_otp_in_monitor_struct.lc_dft_en_i + // // fuse_ctrl_lc_otp_in_monitor_struct.lc_escalate_en_i + // // fuse_ctrl_lc_otp_in_monitor_struct.lc_check_byp_en_i + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_lc_otp_in_monitor_struct.xyz = lc_otp_vendor_test_i_i; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // fuse_ctrl_lc_otp_in_monitor_struct.xyz = lc_otp_program_i_i; // [$bits(lc_otp_program_req_t)-1:0] + // fuse_ctrl_lc_otp_in_monitor_struct.xyz = lc_dft_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_monitor_struct.xyz = lc_escalate_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_monitor_struct.xyz = lc_check_byp_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_random_sequence.svh new file mode 100644 index 000000000..477393c3e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_lc_otp_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_lc_otp_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_random_sequence + extends fuse_ctrl_lc_otp_in_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_in_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_lc_otp_in_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_lc_otp_in_random_sequence::body()-fuse_ctrl_lc_otp_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_lc_otp_in_driver_bfm via the sequencer and fuse_ctrl_lc_otp_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_lc_otp_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_responder_sequence.svh new file mode 100644 index 000000000..e41496803 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_responder_sequence + extends fuse_ctrl_lc_otp_in_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_in_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_lc_otp_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_lc_otp_in_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_sequence_base.svh new file mode 100644 index 000000000..83a122cb0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_lc_otp_in_transaction ), + .RSP(fuse_ctrl_lc_otp_in_transaction )); + + `uvm_object_utils( fuse_ctrl_lc_otp_in_sequence_base ) + + // variables + typedef fuse_ctrl_lc_otp_in_transaction fuse_ctrl_lc_otp_in_transaction_req_t; + fuse_ctrl_lc_otp_in_transaction_req_t req; + typedef fuse_ctrl_lc_otp_in_transaction fuse_ctrl_lc_otp_in_transaction_rsp_t; + fuse_ctrl_lc_otp_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_lc_otp_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_lc_otp_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction.svh new file mode 100644 index 000000000..187b6480c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction.svh @@ -0,0 +1,201 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_lc_otp_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_lc_otp_in_transaction ) + + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_lc_otp_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_lc_otp_in_monitor and fuse_ctrl_lc_otp_in_monitor_bfm + // This struct is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_MONITOR_STRUCT + fuse_ctrl_lc_otp_in_monitor_s fuse_ctrl_lc_otp_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_monitor_struct. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_in_driver and fuse_ctrl_lc_otp_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_in_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_INITIATOR_STRUCT + fuse_ctrl_lc_otp_in_initiator_s fuse_ctrl_lc_otp_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_initiator_struct. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_lc_otp_in_driver and fuse_ctrl_lc_otp_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_in_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_RESPONDER_STRUCT + fuse_ctrl_lc_otp_in_responder_s fuse_ctrl_lc_otp_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_responder_struct. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("lc_dft_en_i:0x%x lc_escalate_en_i:0x%x lc_check_byp_en_i:0x%x ",lc_dft_en_i,lc_escalate_en_i,lc_check_byp_en_i); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_lc_otp_in_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_lc_otp_in_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.lc_dft_en_i = RHS.lc_dft_en_i; + this.lc_escalate_en_i = RHS.lc_escalate_en_i; + this.lc_check_byp_en_i = RHS.lc_check_byp_en_i; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_lc_otp_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,lc_dft_en_i,"lc_dft_en_i"); + $add_attribute(transaction_view_h,lc_escalate_en_i,"lc_escalate_en_i"); + $add_attribute(transaction_view_h,lc_check_byp_en_i,"lc_check_byp_en_i"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction_coverage.svh new file mode 100644 index 000000000..e5fa783de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction_coverage.svh @@ -0,0 +1,86 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_lc_otp_in transaction information using +// a covergroup named fuse_ctrl_lc_otp_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_lc_otp_in_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_lc_otp_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + lc_dft_en_i: coverpoint coverage_trans.lc_dft_en_i; + lc_escalate_en_i: coverpoint coverage_trans.lc_escalate_en_i; + lc_check_byp_en_i: coverpoint coverage_trans.lc_check_byp_en_i; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_lc_otp_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_lc_otp_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_lc_otp_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/yaml/fuse_ctrl_lc_otp_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/yaml/fuse_ctrl_lc_otp_in_interface.yaml new file mode 100644 index 000000000..a7f2b381a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/yaml/fuse_ctrl_lc_otp_in_interface.yaml @@ -0,0 +1,57 @@ +uvmf: + interfaces: + fuse_ctrl_lc_otp_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: output + name: lc_otp_vendor_test_i + reset_value: '''bz' + width: '[''$bits(lc_otp_vendor_test_req_t)'']' + - dir: output + name: lc_otp_program_i + reset_value: '''bz' + width: '[''$bits(lc_otp_program_req_t)'']' + - dir: output + name: lc_dft_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + - dir: output + name: lc_escalate_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + - dir: output + name: lc_check_byp_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_dft_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_escalate_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_check_byp_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.project new file mode 100644 index 000000000..95dcde6a7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_lc_otp_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.svproject new file mode 100644 index 000000000..50f9edd81 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/Makefile new file mode 100644 index 000000000..7b42b541d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_lc_otp_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_lc_otp_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hvl.f + +fuse_ctrl_lc_otp_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hdl.f + +fuse_ctrl_lc_otp_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_xrtl.f + +COMP_fuse_ctrl_lc_otp_out_if_PKG_TGT_0 = q_comp_fuse_ctrl_lc_otp_out_if_pkg +COMP_fuse_ctrl_lc_otp_out_if_PKG_TGT_1 = v_comp_fuse_ctrl_lc_otp_out_if_pkg +COMP_fuse_ctrl_lc_otp_out_if_PKG_TGT = $(COMP_fuse_ctrl_lc_otp_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_lc_otp_out_if_pkg: $(COMP_fuse_ctrl_lc_otp_out_if_PKG_TGT) + +q_comp_fuse_ctrl_lc_otp_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_out_if_PKG_XRTL) + +v_comp_fuse_ctrl_lc_otp_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_lc_otp_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_lc_otp_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_lc_otp_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_out_if_pkg += -I$(fuse_ctrl_lc_otp_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_out_if_pkg += $(fuse_ctrl_lc_otp_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_lc_otp_out_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_lc_otp_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_lc_otp_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_lc_otp_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/compile.do new file mode 100644 index 000000000..af1e34f37 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_lc_otp_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if.compile new file mode 100644 index 000000000..ec237f3ce --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_lc_otp_out_if_hvl.compile + - fuse_ctrl_lc_otp_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_bfm.vinfo new file mode 100644 index 000000000..2a91b10ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_lc_otp_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_lc_otp_out_if_if.sv +src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv +src/fuse_ctrl_lc_otp_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_common.compile new file mode 100644 index 000000000..cd97600ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_lc_otp_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hdl.f new file mode 100644 index 000000000..ee3a8c8a4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hvl.f new file mode 100644 index 000000000..2713f8a05 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_xrtl.f new file mode 100644 index 000000000..6d99f13fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hdl.compile new file mode 100644 index 000000000..30bf39951 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_lc_otp_out_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_lc_otp_out_if_if.sv + - src/fuse_ctrl_lc_otp_out_if_monitor_bfm.sv + - src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hvl.compile new file mode 100644 index 000000000..01d7bd750 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_lc_otp_out_if_common.compile +incdir: + - . +src: + - fuse_ctrl_lc_otp_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.sv new file mode 100644 index 000000000..4605a92a3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_lc_otp_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_lc_otp_out_if_macros.svh" + + export fuse_ctrl_lc_otp_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_lc_otp_out_if_typedefs.svh" + `include "src/fuse_ctrl_lc_otp_out_if_transaction.svh" + + `include "src/fuse_ctrl_lc_otp_out_if_configuration.svh" + `include "src/fuse_ctrl_lc_otp_out_if_driver.svh" + `include "src/fuse_ctrl_lc_otp_out_if_monitor.svh" + + `include "src/fuse_ctrl_lc_otp_out_if_transaction_coverage.svh" + `include "src/fuse_ctrl_lc_otp_out_if_sequence_base.svh" + `include "src/fuse_ctrl_lc_otp_out_if_random_sequence.svh" + + `include "src/fuse_ctrl_lc_otp_out_if_responder_sequence.svh" + `include "src/fuse_ctrl_lc_otp_out_if2reg_adapter.svh" + + `include "src/fuse_ctrl_lc_otp_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.vinfo new file mode 100644 index 000000000..7657b3597 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_lc_otp_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_lc_otp_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.sv new file mode 100644 index 000000000..99c7cc9fa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_lc_otp_out_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_lc_otp_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..8fd4be1a1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_lc_otp_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_sve.F new file mode 100644 index 000000000..42c8070f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if2reg_adapter.svh new file mode 100644 index 000000000..be38d67f8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_lc_otp_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_lc_otp_out_if2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_lc_otp_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_lc_otp_out_if_transaction trans_h = fuse_ctrl_lc_otp_out_if_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_lc_otp_out_if_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_lc_otp_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_agent.svh new file mode 100644 index 000000000..8d10fabf2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_lc_otp_out_if_configuration ), + .DRIVER_T(fuse_ctrl_lc_otp_out_if_driver ), + .MONITOR_T(fuse_ctrl_lc_otp_out_if_monitor ), + .COVERAGE_T(fuse_ctrl_lc_otp_out_if_transaction_coverage ), + .TRANS_T(fuse_ctrl_lc_otp_out_if_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_if_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_configuration.svh new file mode 100644 index 000000000..a8b19a603 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_lc_otp_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_lc_otp_out_if_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_lc_otp_out_if_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_lc_otp_out_if_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_lc_otp_out_if_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_lc_otp_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_CONFIGURATION_STRUCT + fuse_ctrl_lc_otp_out_if_configuration_s fuse_ctrl_lc_otp_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_lc_otp_out_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_if_configuration_struct. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_lc_otp_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_lc_otp_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_lc_otp_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_lc_otp_out_if_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_lc_otp_out_if_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_lc_otp_out_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_lc_otp_out_if_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver.svh new file mode 100644 index 000000000..78fcd4d6f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_lc_otp_out_if_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_out_if_driver_bfm ), + .REQ(fuse_ctrl_lc_otp_out_if_transaction ), + .RSP(fuse_ctrl_lc_otp_out_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_if_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_lc_otp_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_lc_otp_out_if_driver and fuse_ctrl_lc_otp_out_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_lc_otp_out_if_driver_bfm. +`fuse_ctrl_lc_otp_out_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_out_if_initiator_s fuse_ctrl_lc_otp_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_lc_otp_out_if_driver and fuse_ctrl_lc_otp_out_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_lc_otp_out_if_driver_bfm. +`fuse_ctrl_lc_otp_out_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_out_if_responder_s fuse_ctrl_lc_otp_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_lc_otp_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_lc_otp_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_lc_otp_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_lc_otp_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv new file mode 100644 index 000000000..b903dfe7f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv @@ -0,0 +1,299 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_lc_otp_out_if signal driving. It is +// accessed by the uvm fuse_ctrl_lc_otp_out_if driver through a virtual interface +// handle in the fuse_ctrl_lc_otp_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_lc_otp_out_if_if. +// +// Input signals from the fuse_ctrl_lc_otp_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_lc_otp_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_out_if_macros.svh" + +interface fuse_ctrl_lc_otp_out_if_driver_bfm + (fuse_ctrl_lc_otp_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_i; + reg [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_o = 'bz; + tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_i; + reg [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_o = 'bz; + tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_i; + reg [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign lc_otp_vendor_test_o_i = bus.lc_otp_vendor_test_o; + assign bus.lc_otp_vendor_test_o = (initiator_responder == RESPONDER) ? lc_otp_vendor_test_o_o : 'bz; + assign lc_otp_program_o_i = bus.lc_otp_program_o; + assign bus.lc_otp_program_o = (initiator_responder == RESPONDER) ? lc_otp_program_o_o : 'bz; + assign otp_lc_data_o_i = bus.otp_lc_data_o; + assign bus.otp_lc_data_o = (initiator_responder == RESPONDER) ? otp_lc_data_o_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_lc_otp_out_if_pkg::fuse_ctrl_lc_otp_out_if_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_lc_otp_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_lc_otp_out_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_lc_otp_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_out_if_driver and fuse_ctrl_lc_otp_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_out_if_driver_bfm. + `fuse_ctrl_lc_otp_out_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_lc_otp_out_if_driver and fuse_ctrl_lc_otp_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_out_if_driver_bfm. + `fuse_ctrl_lc_otp_out_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + lc_otp_vendor_test_o_o <= 'bz; + lc_otp_program_o_o <= 'bz; + otp_lc_data_o_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_lc_otp_out_if_configuration_s fuse_ctrl_lc_otp_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_lc_otp_out_if_initiator_s fuse_ctrl_lc_otp_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_lc_otp_out_if_responder_s fuse_ctrl_lc_otp_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_lc_otp_out_if_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // Members within the fuse_ctrl_lc_otp_out_if_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + initiator_struct = fuse_ctrl_lc_otp_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_lc_otp_out_if_responder_struct.xyz = lc_otp_vendor_test_o_i; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_if_responder_struct.xyz = lc_otp_program_o_i; // [$bits(lc_otp_program_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_if_responder_struct.xyz = otp_lc_data_o_i; // [$bits(otp_lc_data_t)-1:0] + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_lc_otp_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_lc_otp_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_lc_otp_out_if_initiator_s fuse_ctrl_lc_otp_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_lc_otp_out_if_responder_s fuse_ctrl_lc_otp_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_lc_otp_out_if_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // Variables within the fuse_ctrl_lc_otp_out_if_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // lc_otp_vendor_test_o_o <= fuse_ctrl_lc_otp_out_if_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // lc_otp_program_o_o <= fuse_ctrl_lc_otp_out_if_initiator_struct.xyz; // [$bits(lc_otp_program_rsp_t)-1:0] + // otp_lc_data_o_o <= fuse_ctrl_lc_otp_out_if_initiator_struct.xyz; // [$bits(otp_lc_data_t)-1:0] + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_lc_otp_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_lc_otp_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_if.sv new file mode 100644 index 000000000..839416f4d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_if.sv @@ -0,0 +1,88 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_lc_otp_out_if interface signals. +// It is instantiated once per fuse_ctrl_lc_otp_out_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_lc_otp_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_lc_otp_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_lc_otp_out_if_bus.lc_otp_vendor_test_o), // Agent input +// .dut_signal_port(fuse_ctrl_lc_otp_out_if_bus.lc_otp_program_o), // Agent input +// .dut_signal_port(fuse_ctrl_lc_otp_out_if_bus.otp_lc_data_o), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_out_if_pkg_hdl::*; + +interface fuse_ctrl_lc_otp_out_if_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o, + inout tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o, + inout tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_o, + input lc_otp_program_o, + input otp_lc_data_o + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_o, + input lc_otp_program_o, + input otp_lc_data_o + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output lc_otp_vendor_test_o, + output lc_otp_program_o, + output otp_lc_data_o + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_macros.svh new file mode 100644 index 000000000..ea991a89b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_lc_otp_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_lc_otp_out_if_configuration class. +// + `define fuse_ctrl_lc_otp_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_lc_otp_out_if_configuration_s; + + `define fuse_ctrl_lc_otp_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_if_configuration_s to_struct();\ + fuse_ctrl_lc_otp_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_lc_otp_out_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_lc_otp_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_lc_otp_out_if_configuration_s fuse_ctrl_lc_otp_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_lc_otp_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_lc_otp_out_if_transaction class. +// + `define fuse_ctrl_lc_otp_out_if_MONITOR_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + } fuse_ctrl_lc_otp_out_if_monitor_s; + + `define fuse_ctrl_lc_otp_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_if_monitor_s to_monitor_struct();\ + fuse_ctrl_lc_otp_out_if_monitor_struct = \ + { \ + this.otp_lc_data_o \ + };\ + return ( fuse_ctrl_lc_otp_out_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_lc_otp_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_lc_otp_out_if_monitor_s fuse_ctrl_lc_otp_out_if_monitor_struct);\ + {\ + this.otp_lc_data_o \ + } = fuse_ctrl_lc_otp_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_lc_otp_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_out_if_INITIATOR_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + } fuse_ctrl_lc_otp_out_if_initiator_s; + + `define fuse_ctrl_lc_otp_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_if_initiator_s to_initiator_struct();\ + fuse_ctrl_lc_otp_out_if_initiator_struct = \ + {\ + this.otp_lc_data_o \ + };\ + return ( fuse_ctrl_lc_otp_out_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_lc_otp_out_if_initiator_s fuse_ctrl_lc_otp_out_if_initiator_struct);\ + {\ + this.otp_lc_data_o \ + } = fuse_ctrl_lc_otp_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_lc_otp_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_out_if_RESPONDER_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + } fuse_ctrl_lc_otp_out_if_responder_s; + + `define fuse_ctrl_lc_otp_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_if_responder_s to_responder_struct();\ + fuse_ctrl_lc_otp_out_if_responder_struct = \ + {\ + this.otp_lc_data_o \ + };\ + return ( fuse_ctrl_lc_otp_out_if_responder_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_lc_otp_out_if_responder_s fuse_ctrl_lc_otp_out_if_responder_struct);\ + {\ + this.otp_lc_data_o \ + } = fuse_ctrl_lc_otp_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor.svh new file mode 100644 index 000000000..2d03f44ed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_lc_otp_out_if transactions observed by the +// fuse_ctrl_lc_otp_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_lc_otp_out_if_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_out_if_monitor_bfm ), + .TRANS_T(fuse_ctrl_lc_otp_out_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_if_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_lc_otp_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_lc_otp_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_lc_otp_out_if_monitor_s fuse_ctrl_lc_otp_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_lc_otp_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor_bfm.sv new file mode 100644 index 000000000..685fdceee --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor_bfm.sv @@ -0,0 +1,194 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_lc_otp_out_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_lc_otp_out_if monitor through a virtual +// interface handle in the fuse_ctrl_lc_otp_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_lc_otp_out_if_if. +// +// Input signals from the fuse_ctrl_lc_otp_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_lc_otp_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_out_if_macros.svh" + + +interface fuse_ctrl_lc_otp_out_if_monitor_bfm + ( fuse_ctrl_lc_otp_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_lc_otp_out_if_MONITOR_STRUCT + fuse_ctrl_lc_otp_out_if_monitor_s fuse_ctrl_lc_otp_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_lc_otp_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_i; + tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_i; + tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign lc_otp_vendor_test_o_i = bus.lc_otp_vendor_test_o; + assign lc_otp_program_o_i = bus.lc_otp_program_o; + assign otp_lc_data_o_i = bus.otp_lc_data_o; + + // Proxy handle to UVM monitor + fuse_ctrl_lc_otp_out_if_pkg::fuse_ctrl_lc_otp_out_if_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_lc_otp_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_lc_otp_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_lc_otp_out_if_configuration_s fuse_ctrl_lc_otp_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_lc_otp_out_if_monitor_s fuse_ctrl_lc_otp_out_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_lc_otp_out_if_monitor_struct.otp_lc_data_o + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_lc_otp_out_if_monitor_struct.xyz = lc_otp_vendor_test_o_i; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_if_monitor_struct.xyz = lc_otp_program_o_i; // [$bits(lc_otp_program_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_if_monitor_struct.xyz = otp_lc_data_o_i; // [$bits(otp_lc_data_t)-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_random_sequence.svh new file mode 100644 index 000000000..998964a53 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_lc_otp_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_lc_otp_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_random_sequence + extends fuse_ctrl_lc_otp_out_if_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_out_if_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_lc_otp_out_if_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_lc_otp_out_if_random_sequence::body()-fuse_ctrl_lc_otp_out_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_lc_otp_out_if_driver_bfm via the sequencer and fuse_ctrl_lc_otp_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_lc_otp_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_responder_sequence.svh new file mode 100644 index 000000000..1adc62db5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_responder_sequence + extends fuse_ctrl_lc_otp_out_if_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_out_if_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_lc_otp_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_lc_otp_out_if_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_sequence_base.svh new file mode 100644 index 000000000..dc133adf1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_lc_otp_out_if_transaction ), + .RSP(fuse_ctrl_lc_otp_out_if_transaction )); + + `uvm_object_utils( fuse_ctrl_lc_otp_out_if_sequence_base ) + + // variables + typedef fuse_ctrl_lc_otp_out_if_transaction fuse_ctrl_lc_otp_out_if_transaction_req_t; + fuse_ctrl_lc_otp_out_if_transaction_req_t req; + typedef fuse_ctrl_lc_otp_out_if_transaction fuse_ctrl_lc_otp_out_if_transaction_rsp_t; + fuse_ctrl_lc_otp_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_lc_otp_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_lc_otp_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction.svh new file mode 100644 index 000000000..652f3aa11 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction.svh @@ -0,0 +1,196 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_lc_otp_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_lc_otp_out_if_transaction ) + + otp_lc_data_t otp_lc_data_o ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_lc_otp_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_lc_otp_out_if_monitor and fuse_ctrl_lc_otp_out_if_monitor_bfm + // This struct is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_MONITOR_STRUCT + fuse_ctrl_lc_otp_out_if_monitor_s fuse_ctrl_lc_otp_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_out_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_if_monitor_struct. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_out_if_driver and fuse_ctrl_lc_otp_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_out_if_initiator_s fuse_ctrl_lc_otp_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_out_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_if_initiator_struct. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_lc_otp_out_if_driver and fuse_ctrl_lc_otp_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_out_if_responder_s fuse_ctrl_lc_otp_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_out_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_if_responder_struct. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("otp_lc_data_o:0x%x ",otp_lc_data_o); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_lc_otp_out_if_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.otp_lc_data_o == RHS.otp_lc_data_o) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_lc_otp_out_if_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.otp_lc_data_o = RHS.otp_lc_data_o; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_lc_otp_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,otp_lc_data_o,"otp_lc_data_o"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction_coverage.svh new file mode 100644 index 000000000..8cdbe2099 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction_coverage.svh @@ -0,0 +1,84 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_lc_otp_out_if transaction information using +// a covergroup named fuse_ctrl_lc_otp_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_lc_otp_out_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_if_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_lc_otp_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + otp_lc_data_o: coverpoint coverage_trans.otp_lc_data_o; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_lc_otp_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_lc_otp_out_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_lc_otp_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/yaml/fuse_ctrl_lc_otp_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/yaml/fuse_ctrl_lc_otp_out_if_interface.yaml new file mode 100644 index 000000000..e5cfe2007 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/yaml/fuse_ctrl_lc_otp_out_if_interface.yaml @@ -0,0 +1,37 @@ +uvmf: + interfaces: + fuse_ctrl_lc_otp_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: input + name: lc_otp_vendor_test_o + reset_value: '''bz' + width: '[''$bits(lc_otp_vendor_test_rsp_t)'']' + - dir: input + name: lc_otp_program_o + reset_value: '''bz' + width: '[''$bits(lc_otp_program_rsp_t)'']' + - dir: input + name: otp_lc_data_o + reset_value: '''bz' + width: '[''$bits(otp_lc_data_t)'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: otp_lc_data_o + type: otp_lc_data_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.project new file mode 100644 index 000000000..42717eed9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_lc_otp_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.svproject new file mode 100644 index 000000000..fe0ca64ff --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/Makefile new file mode 100644 index 000000000..f975b194b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_lc_otp_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_lc_otp_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hvl.f + +fuse_ctrl_lc_otp_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hdl.f + +fuse_ctrl_lc_otp_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_xrtl.f + +COMP_fuse_ctrl_lc_otp_out_PKG_TGT_0 = q_comp_fuse_ctrl_lc_otp_out_pkg +COMP_fuse_ctrl_lc_otp_out_PKG_TGT_1 = v_comp_fuse_ctrl_lc_otp_out_pkg +COMP_fuse_ctrl_lc_otp_out_PKG_TGT = $(COMP_fuse_ctrl_lc_otp_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_lc_otp_out_pkg: $(COMP_fuse_ctrl_lc_otp_out_PKG_TGT) + +q_comp_fuse_ctrl_lc_otp_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_out_PKG_XRTL) + +v_comp_fuse_ctrl_lc_otp_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_lc_otp_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_lc_otp_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_lc_otp_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_out_pkg += -I$(fuse_ctrl_lc_otp_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_out_pkg += $(fuse_ctrl_lc_otp_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_lc_otp_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_lc_otp_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_lc_otp_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_lc_otp_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/compile.do new file mode 100644 index 000000000..8073231a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_lc_otp_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out.compile new file mode 100644 index 000000000..f8a8ac4ee --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_lc_otp_out_hvl.compile + - fuse_ctrl_lc_otp_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_bfm.vinfo new file mode 100644 index 000000000..0c1d35fa9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_lc_otp_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_lc_otp_out_if.sv +src/fuse_ctrl_lc_otp_out_driver_bfm.sv +src/fuse_ctrl_lc_otp_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_common.compile new file mode 100644 index 000000000..42616d50e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_lc_otp_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hdl.f new file mode 100644 index 000000000..dd3eb8a20 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hvl.f new file mode 100644 index 000000000..b0a13c621 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_xrtl.f new file mode 100644 index 000000000..48f620eef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hdl.compile new file mode 100644 index 000000000..2ce74cc85 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_lc_otp_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_lc_otp_out_if.sv + - src/fuse_ctrl_lc_otp_out_monitor_bfm.sv + - src/fuse_ctrl_lc_otp_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hvl.compile new file mode 100644 index 000000000..d6a5b8850 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_lc_otp_out_common.compile +incdir: + - . +src: + - fuse_ctrl_lc_otp_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.sv new file mode 100644 index 000000000..c18cea812 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_lc_otp_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_lc_otp_out_macros.svh" + + export fuse_ctrl_lc_otp_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_lc_otp_out_typedefs.svh" + `include "src/fuse_ctrl_lc_otp_out_transaction.svh" + + `include "src/fuse_ctrl_lc_otp_out_configuration.svh" + `include "src/fuse_ctrl_lc_otp_out_driver.svh" + `include "src/fuse_ctrl_lc_otp_out_monitor.svh" + + `include "src/fuse_ctrl_lc_otp_out_transaction_coverage.svh" + `include "src/fuse_ctrl_lc_otp_out_sequence_base.svh" + `include "src/fuse_ctrl_lc_otp_out_random_sequence.svh" + + `include "src/fuse_ctrl_lc_otp_out_responder_sequence.svh" + `include "src/fuse_ctrl_lc_otp_out2reg_adapter.svh" + + `include "src/fuse_ctrl_lc_otp_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.vinfo new file mode 100644 index 000000000..7a4f8b1c8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_lc_otp_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_lc_otp_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.sv new file mode 100644 index 000000000..8987535e6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_lc_otp_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_lc_otp_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.vinfo new file mode 100644 index 000000000..f662f8c19 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_lc_otp_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_sve.F new file mode 100644 index 000000000..0483ef5c0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out2reg_adapter.svh new file mode 100644 index 000000000..bd1fa55e6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_lc_otp_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_lc_otp_out2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_lc_otp_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_lc_otp_out_transaction trans_h = fuse_ctrl_lc_otp_out_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_lc_otp_out_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_lc_otp_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_agent.svh new file mode 100644 index 000000000..2b6207d35 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_lc_otp_out_configuration ), + .DRIVER_T(fuse_ctrl_lc_otp_out_driver ), + .MONITOR_T(fuse_ctrl_lc_otp_out_monitor ), + .COVERAGE_T(fuse_ctrl_lc_otp_out_transaction_coverage ), + .TRANS_T(fuse_ctrl_lc_otp_out_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_configuration.svh new file mode 100644 index 000000000..b7ccdaca3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_lc_otp_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_lc_otp_out_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_lc_otp_out_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_lc_otp_out_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_lc_otp_out_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_lc_otp_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_CONFIGURATION_STRUCT + fuse_ctrl_lc_otp_out_configuration_s fuse_ctrl_lc_otp_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_lc_otp_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_configuration_struct. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_lc_otp_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_lc_otp_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_lc_otp_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_lc_otp_out_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_lc_otp_out_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_lc_otp_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_lc_otp_out_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver.svh new file mode 100644 index 000000000..d25471cfc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_lc_otp_out_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_out_driver_bfm ), + .REQ(fuse_ctrl_lc_otp_out_transaction ), + .RSP(fuse_ctrl_lc_otp_out_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_lc_otp_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_lc_otp_out_driver and fuse_ctrl_lc_otp_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_lc_otp_out_driver_bfm. +`fuse_ctrl_lc_otp_out_INITIATOR_STRUCT + fuse_ctrl_lc_otp_out_initiator_s fuse_ctrl_lc_otp_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_lc_otp_out_driver and fuse_ctrl_lc_otp_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_lc_otp_out_driver_bfm. +`fuse_ctrl_lc_otp_out_RESPONDER_STRUCT + fuse_ctrl_lc_otp_out_responder_s fuse_ctrl_lc_otp_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_lc_otp_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_lc_otp_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_lc_otp_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_lc_otp_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver_bfm.sv new file mode 100644 index 000000000..9456d2d75 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver_bfm.sv @@ -0,0 +1,299 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_lc_otp_out signal driving. It is +// accessed by the uvm fuse_ctrl_lc_otp_out driver through a virtual interface +// handle in the fuse_ctrl_lc_otp_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_lc_otp_out_if. +// +// Input signals from the fuse_ctrl_lc_otp_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_lc_otp_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_out_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_out_macros.svh" + +interface fuse_ctrl_lc_otp_out_driver_bfm + (fuse_ctrl_lc_otp_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_i; + reg [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_o = 'bz; + tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_i; + reg [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_o = 'bz; + tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_i; + reg [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign lc_otp_vendor_test_o_i = bus.lc_otp_vendor_test_o; + assign bus.lc_otp_vendor_test_o = (initiator_responder == RESPONDER) ? lc_otp_vendor_test_o_o : 'bz; + assign lc_otp_program_o_i = bus.lc_otp_program_o; + assign bus.lc_otp_program_o = (initiator_responder == RESPONDER) ? lc_otp_program_o_o : 'bz; + assign otp_lc_data_o_i = bus.otp_lc_data_o; + assign bus.otp_lc_data_o = (initiator_responder == RESPONDER) ? otp_lc_data_o_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_lc_otp_out_pkg::fuse_ctrl_lc_otp_out_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_lc_otp_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_lc_otp_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_lc_otp_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_out_driver and fuse_ctrl_lc_otp_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_out_driver_bfm. + `fuse_ctrl_lc_otp_out_INITIATOR_STRUCT + fuse_ctrl_lc_otp_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_lc_otp_out_driver and fuse_ctrl_lc_otp_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_out_driver_bfm. + `fuse_ctrl_lc_otp_out_RESPONDER_STRUCT + fuse_ctrl_lc_otp_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + lc_otp_vendor_test_o_o <= 'bz; + lc_otp_program_o_o <= 'bz; + otp_lc_data_o_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_lc_otp_out_configuration_s fuse_ctrl_lc_otp_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_lc_otp_out_initiator_s fuse_ctrl_lc_otp_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_lc_otp_out_responder_s fuse_ctrl_lc_otp_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_lc_otp_out_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // Members within the fuse_ctrl_lc_otp_out_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + initiator_struct = fuse_ctrl_lc_otp_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_lc_otp_out_responder_struct.xyz = lc_otp_vendor_test_o_i; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_responder_struct.xyz = lc_otp_program_o_i; // [$bits(lc_otp_program_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_responder_struct.xyz = otp_lc_data_o_i; // [$bits(otp_lc_data_t)-1:0] + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_lc_otp_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_lc_otp_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_lc_otp_out_initiator_s fuse_ctrl_lc_otp_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_lc_otp_out_responder_s fuse_ctrl_lc_otp_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_lc_otp_out_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // Variables within the fuse_ctrl_lc_otp_out_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // lc_otp_vendor_test_o_o <= fuse_ctrl_lc_otp_out_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // lc_otp_program_o_o <= fuse_ctrl_lc_otp_out_initiator_struct.xyz; // [$bits(lc_otp_program_rsp_t)-1:0] + // otp_lc_data_o_o <= fuse_ctrl_lc_otp_out_initiator_struct.xyz; // [$bits(otp_lc_data_t)-1:0] + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_lc_otp_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_lc_otp_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_if.sv new file mode 100644 index 000000000..76b45dc37 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_if.sv @@ -0,0 +1,88 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_lc_otp_out interface signals. +// It is instantiated once per fuse_ctrl_lc_otp_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_lc_otp_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_lc_otp_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_lc_otp_out_bus.lc_otp_vendor_test_o), // Agent input +// .dut_signal_port(fuse_ctrl_lc_otp_out_bus.lc_otp_program_o), // Agent input +// .dut_signal_port(fuse_ctrl_lc_otp_out_bus.otp_lc_data_o), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_out_pkg_hdl::*; + +interface fuse_ctrl_lc_otp_out_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o, + inout tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o, + inout tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_o, + input lc_otp_program_o, + input otp_lc_data_o + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_o, + input lc_otp_program_o, + input otp_lc_data_o + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output lc_otp_vendor_test_o, + output lc_otp_program_o, + output otp_lc_data_o + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_macros.svh new file mode 100644 index 000000000..e4e72e20b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_lc_otp_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_lc_otp_out_configuration class. +// + `define fuse_ctrl_lc_otp_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_lc_otp_out_configuration_s; + + `define fuse_ctrl_lc_otp_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_configuration_s to_struct();\ + fuse_ctrl_lc_otp_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_lc_otp_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_lc_otp_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_lc_otp_out_configuration_s fuse_ctrl_lc_otp_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_lc_otp_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_lc_otp_out_transaction class. +// + `define fuse_ctrl_lc_otp_out_MONITOR_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + } fuse_ctrl_lc_otp_out_monitor_s; + + `define fuse_ctrl_lc_otp_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_monitor_s to_monitor_struct();\ + fuse_ctrl_lc_otp_out_monitor_struct = \ + { \ + this.otp_lc_data_o \ + };\ + return ( fuse_ctrl_lc_otp_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_lc_otp_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_lc_otp_out_monitor_s fuse_ctrl_lc_otp_out_monitor_struct);\ + {\ + this.otp_lc_data_o \ + } = fuse_ctrl_lc_otp_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_lc_otp_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_out_INITIATOR_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + } fuse_ctrl_lc_otp_out_initiator_s; + + `define fuse_ctrl_lc_otp_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_initiator_s to_initiator_struct();\ + fuse_ctrl_lc_otp_out_initiator_struct = \ + {\ + this.otp_lc_data_o \ + };\ + return ( fuse_ctrl_lc_otp_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_lc_otp_out_initiator_s fuse_ctrl_lc_otp_out_initiator_struct);\ + {\ + this.otp_lc_data_o \ + } = fuse_ctrl_lc_otp_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_lc_otp_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_out_RESPONDER_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + } fuse_ctrl_lc_otp_out_responder_s; + + `define fuse_ctrl_lc_otp_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_responder_s to_responder_struct();\ + fuse_ctrl_lc_otp_out_responder_struct = \ + {\ + this.otp_lc_data_o \ + };\ + return ( fuse_ctrl_lc_otp_out_responder_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_lc_otp_out_responder_s fuse_ctrl_lc_otp_out_responder_struct);\ + {\ + this.otp_lc_data_o \ + } = fuse_ctrl_lc_otp_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor.svh new file mode 100644 index 000000000..0c9f4465f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_lc_otp_out transactions observed by the +// fuse_ctrl_lc_otp_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_lc_otp_out_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_out_monitor_bfm ), + .TRANS_T(fuse_ctrl_lc_otp_out_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_lc_otp_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_lc_otp_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_lc_otp_out_monitor_s fuse_ctrl_lc_otp_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_lc_otp_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor_bfm.sv new file mode 100644 index 000000000..2a630288e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor_bfm.sv @@ -0,0 +1,194 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_lc_otp_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_lc_otp_out monitor through a virtual +// interface handle in the fuse_ctrl_lc_otp_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_lc_otp_out_if. +// +// Input signals from the fuse_ctrl_lc_otp_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_lc_otp_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_out_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_out_macros.svh" + + +interface fuse_ctrl_lc_otp_out_monitor_bfm + ( fuse_ctrl_lc_otp_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_lc_otp_out_MONITOR_STRUCT + fuse_ctrl_lc_otp_out_monitor_s fuse_ctrl_lc_otp_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_lc_otp_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_i; + tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_i; + tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign lc_otp_vendor_test_o_i = bus.lc_otp_vendor_test_o; + assign lc_otp_program_o_i = bus.lc_otp_program_o; + assign otp_lc_data_o_i = bus.otp_lc_data_o; + + // Proxy handle to UVM monitor + fuse_ctrl_lc_otp_out_pkg::fuse_ctrl_lc_otp_out_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_lc_otp_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_lc_otp_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_lc_otp_out_configuration_s fuse_ctrl_lc_otp_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_lc_otp_out_monitor_s fuse_ctrl_lc_otp_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_lc_otp_out_monitor_struct.otp_lc_data_o + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_lc_otp_out_monitor_struct.xyz = lc_otp_vendor_test_o_i; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_monitor_struct.xyz = lc_otp_program_o_i; // [$bits(lc_otp_program_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_monitor_struct.xyz = otp_lc_data_o_i; // [$bits(otp_lc_data_t)-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_random_sequence.svh new file mode 100644 index 000000000..a6806536f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_lc_otp_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_lc_otp_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_random_sequence + extends fuse_ctrl_lc_otp_out_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_out_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_lc_otp_out_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_lc_otp_out_random_sequence::body()-fuse_ctrl_lc_otp_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_lc_otp_out_driver_bfm via the sequencer and fuse_ctrl_lc_otp_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_lc_otp_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_responder_sequence.svh new file mode 100644 index 000000000..0e7cf5ce4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_responder_sequence + extends fuse_ctrl_lc_otp_out_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_out_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_lc_otp_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_lc_otp_out_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_sequence_base.svh new file mode 100644 index 000000000..d084a6b64 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_lc_otp_out_transaction ), + .RSP(fuse_ctrl_lc_otp_out_transaction )); + + `uvm_object_utils( fuse_ctrl_lc_otp_out_sequence_base ) + + // variables + typedef fuse_ctrl_lc_otp_out_transaction fuse_ctrl_lc_otp_out_transaction_req_t; + fuse_ctrl_lc_otp_out_transaction_req_t req; + typedef fuse_ctrl_lc_otp_out_transaction fuse_ctrl_lc_otp_out_transaction_rsp_t; + fuse_ctrl_lc_otp_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_lc_otp_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_lc_otp_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction.svh new file mode 100644 index 000000000..ef2229e27 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction.svh @@ -0,0 +1,196 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_lc_otp_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_lc_otp_out_transaction ) + + otp_lc_data_t otp_lc_data_o ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_lc_otp_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_lc_otp_out_monitor and fuse_ctrl_lc_otp_out_monitor_bfm + // This struct is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_MONITOR_STRUCT + fuse_ctrl_lc_otp_out_monitor_s fuse_ctrl_lc_otp_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_monitor_struct. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_out_driver and fuse_ctrl_lc_otp_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_out_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_INITIATOR_STRUCT + fuse_ctrl_lc_otp_out_initiator_s fuse_ctrl_lc_otp_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_initiator_struct. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_lc_otp_out_driver and fuse_ctrl_lc_otp_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_out_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_RESPONDER_STRUCT + fuse_ctrl_lc_otp_out_responder_s fuse_ctrl_lc_otp_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_responder_struct. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("otp_lc_data_o:0x%x ",otp_lc_data_o); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_lc_otp_out_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.otp_lc_data_o == RHS.otp_lc_data_o) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_lc_otp_out_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.otp_lc_data_o = RHS.otp_lc_data_o; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_lc_otp_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,otp_lc_data_o,"otp_lc_data_o"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction_coverage.svh new file mode 100644 index 000000000..25eeac7c7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction_coverage.svh @@ -0,0 +1,84 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_lc_otp_out transaction information using +// a covergroup named fuse_ctrl_lc_otp_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_lc_otp_out_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_lc_otp_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + otp_lc_data_o: coverpoint coverage_trans.otp_lc_data_o; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_lc_otp_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_lc_otp_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_lc_otp_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/yaml/fuse_ctrl_lc_otp_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/yaml/fuse_ctrl_lc_otp_out_interface.yaml new file mode 100644 index 000000000..108ed5f70 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/yaml/fuse_ctrl_lc_otp_out_interface.yaml @@ -0,0 +1,37 @@ +uvmf: + interfaces: + fuse_ctrl_lc_otp_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: input + name: lc_otp_vendor_test_o + reset_value: '''bz' + width: '[''$bits(lc_otp_vendor_test_rsp_t)'']' + - dir: input + name: lc_otp_program_o + reset_value: '''bz' + width: '[''$bits(lc_otp_program_rsp_t)'']' + - dir: input + name: otp_lc_data_o + reset_value: '''bz' + width: '[''$bits(otp_lc_data_t)'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: otp_lc_data_o + type: otp_lc_data_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.project new file mode 100644 index 000000000..a51915b99 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.svproject new file mode 100644 index 000000000..cc08a42fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/Makefile new file mode 100644 index 000000000..e454f5811 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f + +fuse_ctrl_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f + +fuse_ctrl_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_xrtl.f + +COMP_fuse_ctrl_out_if_PKG_TGT_0 = q_comp_fuse_ctrl_out_if_pkg +COMP_fuse_ctrl_out_if_PKG_TGT_1 = v_comp_fuse_ctrl_out_if_pkg +COMP_fuse_ctrl_out_if_PKG_TGT = $(COMP_fuse_ctrl_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_out_if_pkg: $(COMP_fuse_ctrl_out_if_PKG_TGT) + +q_comp_fuse_ctrl_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_out_if_PKG_XRTL) + +v_comp_fuse_ctrl_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_out_if_pkg += -I$(fuse_ctrl_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_out_if_pkg += $(fuse_ctrl_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_out_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/compile.do new file mode 100644 index 000000000..a96c13af2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if.compile new file mode 100644 index 000000000..dd4689f64 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_out_if_hvl.compile + - fuse_ctrl_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_bfm.vinfo new file mode 100644 index 000000000..6288a8874 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_out_if_if.sv +src/fuse_ctrl_out_if_driver_bfm.sv +src/fuse_ctrl_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_common.compile new file mode 100644 index 000000000..c7726ee65 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f new file mode 100644 index 000000000..4355e25d9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f new file mode 100644 index 000000000..13bb387c5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_xrtl.f new file mode 100644 index 000000000..0e7ea6718 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hdl.compile new file mode 100644 index 000000000..676003b6c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_out_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_out_if_if.sv + - src/fuse_ctrl_out_if_monitor_bfm.sv + - src/fuse_ctrl_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hvl.compile new file mode 100644 index 000000000..9d8526a89 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_out_if_common.compile +incdir: + - . +src: + - fuse_ctrl_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.sv new file mode 100644 index 000000000..534d87ccd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_out_if_macros.svh" + + export fuse_ctrl_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_out_if_typedefs.svh" + `include "src/fuse_ctrl_out_if_transaction.svh" + + `include "src/fuse_ctrl_out_if_configuration.svh" + `include "src/fuse_ctrl_out_if_driver.svh" + `include "src/fuse_ctrl_out_if_monitor.svh" + + `include "src/fuse_ctrl_out_if_transaction_coverage.svh" + `include "src/fuse_ctrl_out_if_sequence_base.svh" + `include "src/fuse_ctrl_out_if_random_sequence.svh" + + `include "src/fuse_ctrl_out_if_responder_sequence.svh" + `include "src/fuse_ctrl_out_if2reg_adapter.svh" + + `include "src/fuse_ctrl_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.vinfo new file mode 100644 index 000000000..0daa42ac2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.sv new file mode 100644 index 000000000..80d7ad79d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_out_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..fcc4ab02f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_sve.F new file mode 100644 index 000000000..a4f0dfc42 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if2reg_adapter.svh new file mode 100644 index 000000000..fd141b5fe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if2reg_adapter #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_out_if2reg_adapter #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h = fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_agent.svh new file mode 100644 index 000000000..2fb6d2a15 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_agent #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_out_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .DRIVER_T(fuse_ctrl_out_if_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_T(fuse_ctrl_out_if_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .COVERAGE_T(fuse_ctrl_out_if_transaction_coverage #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_out_if_agent #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_configuration.svh new file mode 100644 index 000000000..401f3ac74 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_configuration #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_out_if_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_out_if_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_out_if_configuration #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_CONFIGURATION_STRUCT + fuse_ctrl_out_if_configuration_s fuse_ctrl_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_out_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_out_if_configuration_struct. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_out_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_out_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_out_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", agent_path, interface_name, AlertSyncOn ,RndConstLfrSeed ,RndCnstLfsrPerm ,MemInitFile ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_out_if_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver.svh new file mode 100644 index 000000000..03f256f92 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_driver #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_out_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_out_if_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .REQ(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .RSP(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_out_if_driver #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_out_if_driver and fuse_ctrl_out_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_out_if_driver_bfm. +`fuse_ctrl_out_if_INITIATOR_STRUCT + fuse_ctrl_out_if_initiator_s fuse_ctrl_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_out_if_driver and fuse_ctrl_out_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_out_if_driver_bfm. +`fuse_ctrl_out_if_RESPONDER_STRUCT + fuse_ctrl_out_if_responder_s fuse_ctrl_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver_bfm.sv new file mode 100644 index 000000000..a4c591277 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver_bfm.sv @@ -0,0 +1,382 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_out_if signal driving. It is +// accessed by the uvm fuse_ctrl_out_if driver through a virtual interface +// handle in the fuse_ctrl_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_out_if_if. +// +// Input signals from the fuse_ctrl_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_out_if_macros.svh" + +interface fuse_ctrl_out_if_driver_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + (fuse_ctrl_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o_i; + reg [$bits(edn_pkg::edn_req_t)-1:0] edn_o_o = 'bz; + tri intr_otp_operation_done_o_i; + reg intr_otp_operation_done_o_o = 'bz; + tri intr_otp_error_o_i; + reg intr_otp_error_o_o = 'bz; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_i; + reg [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_o = 'bz; + tri [7:0] otp_obs_o_i; + reg [7:0] otp_obs_o_o = 'bz; + tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_i; + reg [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_o = 'bz; + tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_i; + reg [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_o = 'bz; + tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_i; + reg [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_o = 'bz; + tri [OtpTestVectWidth-1:0] cio_test_o_i; + reg [OtpTestVectWidth-1:0] cio_test_o_o = 'bz; + tri [OtpTestVectWidth-1:0] cio_test_en_o_i; + reg [OtpTestVectWidth-1:0] cio_test_en_o_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + tri otp_ext_voltage_h_io_i; + reg otp_ext_voltage_h_io_o = 'bz; + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign edn_o_i = bus.edn_o; + assign bus.edn_o = (initiator_responder == RESPONDER) ? edn_o_o : 'bz; + assign intr_otp_operation_done_o_i = bus.intr_otp_operation_done_o; + assign bus.intr_otp_operation_done_o = (initiator_responder == RESPONDER) ? intr_otp_operation_done_o_o : 'bz; + assign intr_otp_error_o_i = bus.intr_otp_error_o; + assign bus.intr_otp_error_o = (initiator_responder == RESPONDER) ? intr_otp_error_o_o : 'bz; + assign alert_tx_o_i = bus.alert_tx_o; + assign bus.alert_tx_o = (initiator_responder == RESPONDER) ? alert_tx_o_o : 'bz; + assign otp_obs_o_i = bus.otp_obs_o; + assign bus.otp_obs_o = (initiator_responder == RESPONDER) ? otp_obs_o_o : 'bz; + assign otp_ast_pwr_seq_o_i = bus.otp_ast_pwr_seq_o; + assign bus.otp_ast_pwr_seq_o = (initiator_responder == RESPONDER) ? otp_ast_pwr_seq_o_o : 'bz; + assign pwr_otp_o_i = bus.pwr_otp_o; + assign bus.pwr_otp_o = (initiator_responder == RESPONDER) ? pwr_otp_o_o : 'bz; + assign otp_broadcast_o_i = bus.otp_broadcast_o; + assign bus.otp_broadcast_o = (initiator_responder == RESPONDER) ? otp_broadcast_o_o : 'bz; + assign cio_test_o_i = bus.cio_test_o; + assign bus.cio_test_o = (initiator_responder == RESPONDER) ? cio_test_o_o : 'bz; + assign cio_test_en_o_i = bus.cio_test_en_o; + assign bus.cio_test_en_o = (initiator_responder == RESPONDER) ? cio_test_en_o_o : 'bz; + + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.otp_ext_voltage_h_io = otp_ext_voltage_h_io_o; + + // Proxy handle to UVM driver + fuse_ctrl_out_if_pkg::fuse_ctrl_out_if_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_out_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_out_if_driver and fuse_ctrl_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_out_if_driver_bfm. + `fuse_ctrl_out_if_INITIATOR_STRUCT + fuse_ctrl_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_out_if_driver and fuse_ctrl_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_out_if_driver_bfm. + `fuse_ctrl_out_if_RESPONDER_STRUCT + fuse_ctrl_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + edn_o_o <= 'bz; + intr_otp_operation_done_o_o <= 'bz; + intr_otp_error_o_o <= 'bz; + alert_tx_o_o <= 'bz; + otp_obs_o_o <= 'bz; + otp_ast_pwr_seq_o_o <= 'bz; + pwr_otp_o_o <= 'bz; + lc_otp_vendor_test_o_o <= 'bz; + lc_otp_program_o_o <= 'bz; + otp_lc_data_o_o <= 'bz; + otp_broadcast_o_o <= 'bz; + cio_test_o_o <= 'bz; + cio_test_en_o_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + otp_ext_voltage_h_io_o <= 'bz; + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_out_if_configuration_s fuse_ctrl_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_out_if_initiator_s fuse_ctrl_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_out_if_responder_s fuse_ctrl_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_out_if_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Members within the fuse_ctrl_out_if_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + initiator_struct = fuse_ctrl_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_out_if_responder_struct.xyz = edn_o_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = intr_otp_operation_done_o_i; // + // fuse_ctrl_out_if_responder_struct.xyz = intr_otp_error_o_i; // + // fuse_ctrl_out_if_responder_struct.xyz = alert_tx_o_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = otp_obs_o_i; // [7:0] + // fuse_ctrl_out_if_responder_struct.xyz = otp_ast_pwr_seq_o_i; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = pwr_otp_o_i; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = lc_otp_vendor_test_o_i; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = lc_otp_program_o_i; // [$bits(lc_otp_program_rsp_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = otp_lc_data_o_i; // [$bits(otp_lc_data_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = otp_broadcast_o_i; // [$bits(otp_broadcast_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = cio_test_o_i; // [OtpTestVectWidth-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = cio_test_en_o_i; // [OtpTestVectWidth-1:0] + // Initiator inout signals + // fuse_ctrl_out_if_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_out_if_initiator_struct.xyz; // + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_out_if_initiator_s fuse_ctrl_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_out_if_responder_s fuse_ctrl_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_out_if_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Variables within the fuse_ctrl_out_if_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // fuse_ctrl_out_if_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // edn_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(edn_pkg::edn_req_t)-1:0] + // intr_otp_operation_done_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // + // intr_otp_error_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // + // alert_tx_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // otp_obs_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [7:0] + // otp_ast_pwr_seq_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // pwr_otp_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // lc_otp_vendor_test_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // lc_otp_program_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(lc_otp_program_rsp_t)-1:0] + // otp_lc_data_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(otp_lc_data_t)-1:0] + // otp_broadcast_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(otp_broadcast_t)-1:0] + // cio_test_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [OtpTestVectWidth-1:0] + // cio_test_en_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [OtpTestVectWidth-1:0] + // Responder inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_out_if_initiator_struct.xyz; // + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_if.sv new file mode 100644 index 000000000..d1b92cdfb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_if.sv @@ -0,0 +1,134 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_out_if interface signals. +// It is instantiated once per fuse_ctrl_out_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_out_if_bus.edn_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.intr_otp_operation_done_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.intr_otp_error_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.alert_tx_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.otp_obs_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.otp_ast_pwr_seq_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.pwr_otp_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.otp_broadcast_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.otp_ext_voltage_h_io), // Agent inout +// .dut_signal_port(fuse_ctrl_out_if_bus.cio_test_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.cio_test_en_o), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_if_pkg_hdl::*; + +interface fuse_ctrl_out_if_if #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o, + inout tri intr_otp_operation_done_o, + inout tri intr_otp_error_o, + inout tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o, + inout tri [7:0] otp_obs_o, + inout tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o, + inout tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o, + inout tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o, + inout tri otp_ext_voltage_h_io, + inout tri [OtpTestVectWidth-1:0] cio_test_o, + inout tri [OtpTestVectWidth-1:0] cio_test_en_o + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input edn_o, + input intr_otp_operation_done_o, + input intr_otp_error_o, + input alert_tx_o, + input otp_obs_o, + input otp_ast_pwr_seq_o, + input pwr_otp_o, + input otp_broadcast_o, + input otp_ext_voltage_h_io, + input cio_test_o, + input cio_test_en_o + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input edn_o, + input intr_otp_operation_done_o, + input intr_otp_error_o, + input alert_tx_o, + input otp_obs_o, + input otp_ast_pwr_seq_o, + input pwr_otp_o, + input otp_broadcast_o, + inout otp_ext_voltage_h_io, + input cio_test_o, + input cio_test_en_o + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output edn_o, + output intr_otp_operation_done_o, + output intr_otp_error_o, + output alert_tx_o, + output otp_obs_o, + output otp_ast_pwr_seq_o, + output pwr_otp_o, + output otp_broadcast_o, + inout otp_ext_voltage_h_io, + output cio_test_o, + output cio_test_en_o + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_macros.svh new file mode 100644 index 000000000..79bf75fe9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_out_if_configuration class. +// + `define fuse_ctrl_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_out_if_configuration_s; + + `define fuse_ctrl_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_if_configuration_s to_struct();\ + fuse_ctrl_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_out_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_out_if_configuration_s fuse_ctrl_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_out_if_transaction class. +// + `define fuse_ctrl_out_if_MONITOR_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_if_monitor_s; + + `define fuse_ctrl_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_if_monitor_s to_monitor_struct();\ + fuse_ctrl_out_if_monitor_struct = \ + { \ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_out_if_monitor_s fuse_ctrl_out_if_monitor_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_out_if_INITIATOR_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_if_initiator_s; + + `define fuse_ctrl_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_if_initiator_s to_initiator_struct();\ + fuse_ctrl_out_if_initiator_struct = \ + {\ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_out_if_initiator_s fuse_ctrl_out_if_initiator_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_out_if_RESPONDER_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_if_responder_s; + + `define fuse_ctrl_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_if_responder_s to_responder_struct();\ + fuse_ctrl_out_if_responder_struct = \ + {\ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_if_responder_struct);\ + endfunction + + `define fuse_ctrl_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_out_if_responder_s fuse_ctrl_out_if_responder_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor.svh new file mode 100644 index 000000000..5aba5c809 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_out_if transactions observed by the +// fuse_ctrl_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_monitor #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_out_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_out_if_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_out_if_monitor #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_out_if_monitor_s fuse_ctrl_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor_bfm.sv new file mode 100644 index 000000000..e10a4b55e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor_bfm.sv @@ -0,0 +1,230 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_out_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_out_if monitor through a virtual +// interface handle in the fuse_ctrl_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_out_if_if. +// +// Input signals from the fuse_ctrl_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_out_if_macros.svh" + + +interface fuse_ctrl_out_if_monitor_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + ( fuse_ctrl_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_out_if_MONITOR_STRUCT + fuse_ctrl_out_if_monitor_s fuse_ctrl_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o_i; + tri intr_otp_operation_done_o_i; + tri intr_otp_error_o_i; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_i; + tri [7:0] otp_obs_o_i; + tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_i; + tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_i; + tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_i; + tri otp_ext_voltage_h_io_i; + tri [OtpTestVectWidth-1:0] cio_test_o_i; + tri [OtpTestVectWidth-1:0] cio_test_en_o_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign edn_o_i = bus.edn_o; + assign intr_otp_operation_done_o_i = bus.intr_otp_operation_done_o; + assign intr_otp_error_o_i = bus.intr_otp_error_o; + assign alert_tx_o_i = bus.alert_tx_o; + assign otp_obs_o_i = bus.otp_obs_o; + assign otp_ast_pwr_seq_o_i = bus.otp_ast_pwr_seq_o; + assign pwr_otp_o_i = bus.pwr_otp_o; + assign otp_broadcast_o_i = bus.otp_broadcast_o; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + assign cio_test_o_i = bus.cio_test_o; + assign cio_test_en_o_i = bus.cio_test_en_o; + + // Proxy handle to UVM monitor + fuse_ctrl_out_if_pkg::fuse_ctrl_out_if_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_out_if_configuration_s fuse_ctrl_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_out_if_monitor_s fuse_ctrl_out_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_out_if_monitor_struct.pwr_otp_o + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_out_if_monitor_struct.xyz = edn_o_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = intr_otp_operation_done_o_i; // + // fuse_ctrl_out_if_monitor_struct.xyz = intr_otp_error_o_i; // + // fuse_ctrl_out_if_monitor_struct.xyz = alert_tx_o_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = otp_obs_o_i; // [7:0] + // fuse_ctrl_out_if_monitor_struct.xyz = otp_ast_pwr_seq_o_i; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = pwr_otp_o_i; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = otp_broadcast_o_i; // [$bits(otp_broadcast_t)-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = otp_ext_voltage_h_io_i; // + // fuse_ctrl_out_if_monitor_struct.xyz = cio_test_o_i; // [OtpTestVectWidth-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = cio_test_en_o_i; // [OtpTestVectWidth-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_random_sequence.svh new file mode 100644 index 000000000..6aacd46f1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_random_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_out_if_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_out_if_random_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_out_if_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_out_if_random_sequence::body()-fuse_ctrl_out_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_out_if_driver_bfm via the sequencer and fuse_ctrl_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_responder_sequence.svh new file mode 100644 index 000000000..b82d116c6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_responder_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_out_if_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_out_if_responder_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_out_if_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_sequence_base.svh new file mode 100644 index 000000000..475fcbfc5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_sequence_base #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .RSP(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_out_if_sequence_base #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // variables + typedef fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_out_if_transaction_req_t; + fuse_ctrl_out_if_transaction_req_t req; + typedef fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_out_if_transaction_rsp_t; + fuse_ctrl_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction.svh new file mode 100644 index 000000000..110c96097 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction.svh @@ -0,0 +1,223 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_transaction #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_out_if_transaction #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_out_if_monitor and fuse_ctrl_out_if_monitor_bfm + // This struct is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_MONITOR_STRUCT + fuse_ctrl_out_if_monitor_s fuse_ctrl_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_out_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_out_if_monitor_struct. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_out_if_driver and fuse_ctrl_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_INITIATOR_STRUCT + fuse_ctrl_out_if_initiator_s fuse_ctrl_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_out_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_out_if_initiator_struct. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_out_if_driver and fuse_ctrl_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_RESPONDER_STRUCT + fuse_ctrl_out_if_responder_s fuse_ctrl_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_out_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_out_if_responder_struct. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("otp_lc_data_o:0x%x pwr_otp_o:0x%x ",otp_lc_data_o,pwr_otp_o); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.otp_lc_data_o == RHS.otp_lc_data_o) + &&(this.pwr_otp_o == RHS.pwr_otp_o) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.otp_lc_data_o = RHS.otp_lc_data_o; + this.pwr_otp_o = RHS.pwr_otp_o; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,otp_lc_data_o,"otp_lc_data_o"); + $add_attribute(transaction_view_h,pwr_otp_o,"pwr_otp_o"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction_coverage.svh new file mode 100644 index 000000000..4c40b9333 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction_coverage.svh @@ -0,0 +1,103 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_out_if transaction information using +// a covergroup named fuse_ctrl_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_transaction_coverage #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_subscriber #(.T(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_out_if_transaction_coverage #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + otp_lc_data_o: coverpoint coverage_trans.otp_lc_data_o; + pwr_otp_o: coverpoint coverage_trans.pwr_otp_o; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_out_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/yaml/fuse_ctrl_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/yaml/fuse_ctrl_out_if_interface.yaml new file mode 100644 index 000000000..dd001e21a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/yaml/fuse_ctrl_out_if_interface.yaml @@ -0,0 +1,80 @@ +uvmf: + interfaces: + fuse_ctrl_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AlertSyncOn + type: int + value: '3' + - name: RndConstLfrSeed + type: lfsr_seed_t + value: RndConstLfsrSeedDefault + - name: RndCnstLfsrPerm + type: lsfr_perm_t + value: RndCnstLfsrPermDefault + - name: MemInitFile + type: string + ports: + - dir: input + name: edn_o + reset_value: '''bz' + width: '[''$bits(edn_pkg::edn_req_t)'']' + - dir: input + name: intr_otp_operation_done_o + reset_value: '''bz' + width: '1' + - dir: input + name: intr_otp_error_o + reset_value: '''bz' + width: '1' + - dir: input + name: alert_tx_o + reset_value: '''bz' + width: '[''NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)'']' + - dir: input + name: otp_obs_o + reset_value: '''bz' + width: '8' + - dir: input + name: otp_ast_pwr_seq_o + reset_value: '''bz' + width: '[''$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)'']' + - dir: input + name: pwr_otp_o + reset_value: '''bz' + width: '[''$bits(pwrmgr_pkg::pwr_otp_rsp_t)'']' + - dir: input + name: otp_broadcast_o + reset_value: '''bz' + width: '[''$bits(otp_broadcast_t)'']' + - dir: inout + name: otp_ext_voltage_h_io + reset_value: '''bz' + width: '1' + - dir: input + name: cio_test_o + reset_value: '''bz' + width: '[''OtpTestVectWidth'']' + - dir: input + name: cio_test_en_o + reset_value: '''bz' + width: '[''OtpTestVectWidth'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: pwr_otp_o + type: pwrmgr_pkg::pwr_otp_rsp_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/.project new file mode 100644 index 000000000..c96dcb429 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/.svproject new file mode 100644 index 000000000..64d224ae5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/Makefile new file mode 100644 index 000000000..b5ee9df5a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f + +fuse_ctrl_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f + +fuse_ctrl_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f + +COMP_fuse_ctrl_out_PKG_TGT_0 = q_comp_fuse_ctrl_out_pkg +COMP_fuse_ctrl_out_PKG_TGT_1 = v_comp_fuse_ctrl_out_pkg +COMP_fuse_ctrl_out_PKG_TGT = $(COMP_fuse_ctrl_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_out_pkg: $(COMP_fuse_ctrl_out_PKG_TGT) + +q_comp_fuse_ctrl_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_out_PKG_XRTL) + +v_comp_fuse_ctrl_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_out_pkg += -I$(fuse_ctrl_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_out_pkg += $(fuse_ctrl_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/compile.do new file mode 100644 index 000000000..5fdaafcd1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile new file mode 100644 index 000000000..3ac4b243e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_out_hvl.compile + - fuse_ctrl_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo new file mode 100644 index 000000000..b4ea5985b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_out_if.sv +src/fuse_ctrl_out_driver_bfm.sv +src/fuse_ctrl_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_common.compile new file mode 100644 index 000000000..1193b2509 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f new file mode 100644 index 000000000..5be27730e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f new file mode 100644 index 000000000..fc769adb0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f new file mode 100644 index 000000000..4a7b8cc2b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hdl.compile new file mode 100644 index 000000000..2745ad2a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_out_if.sv + - src/fuse_ctrl_out_monitor_bfm.sv + - src/fuse_ctrl_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hvl.compile new file mode 100644 index 000000000..5562a204a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_out_common.compile +incdir: + - . +src: + - fuse_ctrl_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv new file mode 100644 index 000000000..afb8df957 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_out_macros.svh" + + export fuse_ctrl_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_out_typedefs.svh" + `include "src/fuse_ctrl_out_transaction.svh" + + `include "src/fuse_ctrl_out_configuration.svh" + `include "src/fuse_ctrl_out_driver.svh" + `include "src/fuse_ctrl_out_monitor.svh" + + `include "src/fuse_ctrl_out_transaction_coverage.svh" + `include "src/fuse_ctrl_out_sequence_base.svh" + `include "src/fuse_ctrl_out_random_sequence.svh" + + `include "src/fuse_ctrl_out_responder_sequence.svh" + `include "src/fuse_ctrl_out2reg_adapter.svh" + + `include "src/fuse_ctrl_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo new file mode 100644 index 000000000..4f08c9ef3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.sv new file mode 100644 index 000000000..f90777afe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.vinfo new file mode 100644 index 000000000..c55df62d8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F new file mode 100644 index 000000000..94ccd9b8b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out2reg_adapter.svh new file mode 100644 index 000000000..c13afeb59 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out2reg_adapter #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_out2reg_adapter #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h = fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_agent.svh new file mode 100644 index 000000000..64fcd3c17 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_agent #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_out_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .DRIVER_T(fuse_ctrl_out_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_T(fuse_ctrl_out_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .COVERAGE_T(fuse_ctrl_out_transaction_coverage #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_out_agent #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_configuration.svh new file mode 100644 index 000000000..52338d1e5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_configuration #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_out_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_out_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_out_configuration #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_CONFIGURATION_STRUCT + fuse_ctrl_out_configuration_s fuse_ctrl_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_out_configuration_struct. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_out_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_out_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", agent_path, interface_name, AlertSyncOn ,RndConstLfrSeed ,RndCnstLfsrPerm ,MemInitFile ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_out_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver.svh new file mode 100644 index 000000000..ec2f7b4ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_driver #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_out_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_out_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .REQ(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .RSP(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_out_driver #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_out_driver_bfm. +`fuse_ctrl_out_INITIATOR_STRUCT + fuse_ctrl_out_initiator_s fuse_ctrl_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_out_driver_bfm. +`fuse_ctrl_out_RESPONDER_STRUCT + fuse_ctrl_out_responder_s fuse_ctrl_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver_bfm.sv new file mode 100644 index 000000000..0b796ef47 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver_bfm.sv @@ -0,0 +1,374 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_out signal driving. It is +// accessed by the uvm fuse_ctrl_out driver through a virtual interface +// handle in the fuse_ctrl_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_out_if. +// +// Input signals from the fuse_ctrl_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_pkg_hdl::*; +`include "src/fuse_ctrl_out_macros.svh" + +interface fuse_ctrl_out_driver_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + (fuse_ctrl_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o_i; + reg [$bits(edn_pkg::edn_req_t)-1:0] edn_o_o = 'bz; + tri intr_otp_operation_done_o_i; + reg intr_otp_operation_done_o_o = 'bz; + tri intr_otp_error_o_i; + reg intr_otp_error_o_o = 'bz; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_i; + reg [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_o = 'bz; + tri [7:0] otp_obs_o_i; + reg [7:0] otp_obs_o_o = 'bz; + tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_i; + reg [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_o = 'bz; + tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_i; + reg [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_o = 'bz; + tri [OtpTestVectWidth-1:0] cio_test_o_i; + reg [OtpTestVectWidth-1:0] cio_test_o_o = 'bz; + tri [OtpTestVectWidth-1:0] cio_test_en_o_i; + reg [OtpTestVectWidth-1:0] cio_test_en_o_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign edn_o_i = bus.edn_o; + assign bus.edn_o = (initiator_responder == RESPONDER) ? edn_o_o : 'bz; + assign intr_otp_operation_done_o_i = bus.intr_otp_operation_done_o; + assign bus.intr_otp_operation_done_o = (initiator_responder == RESPONDER) ? intr_otp_operation_done_o_o : 'bz; + assign intr_otp_error_o_i = bus.intr_otp_error_o; + assign bus.intr_otp_error_o = (initiator_responder == RESPONDER) ? intr_otp_error_o_o : 'bz; + assign alert_tx_o_i = bus.alert_tx_o; + assign bus.alert_tx_o = (initiator_responder == RESPONDER) ? alert_tx_o_o : 'bz; + assign otp_obs_o_i = bus.otp_obs_o; + assign bus.otp_obs_o = (initiator_responder == RESPONDER) ? otp_obs_o_o : 'bz; + assign otp_ast_pwr_seq_o_i = bus.otp_ast_pwr_seq_o; + assign bus.otp_ast_pwr_seq_o = (initiator_responder == RESPONDER) ? otp_ast_pwr_seq_o_o : 'bz; + assign otp_broadcast_o_i = bus.otp_broadcast_o; + assign bus.otp_broadcast_o = (initiator_responder == RESPONDER) ? otp_broadcast_o_o : 'bz; + assign cio_test_o_i = bus.cio_test_o; + assign bus.cio_test_o = (initiator_responder == RESPONDER) ? cio_test_o_o : 'bz; + assign cio_test_en_o_i = bus.cio_test_en_o; + assign bus.cio_test_en_o = (initiator_responder == RESPONDER) ? cio_test_en_o_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_out_pkg::fuse_ctrl_out_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_out_driver_bfm. + `fuse_ctrl_out_INITIATOR_STRUCT + fuse_ctrl_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_out_driver_bfm. + `fuse_ctrl_out_RESPONDER_STRUCT + fuse_ctrl_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + edn_o_o <= 'bz; + intr_otp_operation_done_o_o <= 'bz; + intr_otp_error_o_o <= 'bz; + alert_tx_o_o <= 'bz; + otp_obs_o_o <= 'bz; + otp_ast_pwr_seq_o_o <= 'bz; + pwr_otp_o_o <= 'bz; + lc_otp_vendor_test_o_o <= 'bz; + lc_otp_program_o_o <= 'bz; + otp_lc_data_o_o <= 'bz; + otp_broadcast_o_o <= 'bz; + cio_test_o_o <= 'bz; + cio_test_en_o_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + otp_ext_voltage_h_io_o <= 'bz; + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_out_configuration_s fuse_ctrl_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_out_initiator_s fuse_ctrl_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_out_responder_s fuse_ctrl_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_out_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Members within the fuse_ctrl_out_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + initiator_struct = fuse_ctrl_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_out_responder_struct.xyz = edn_o_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = intr_otp_operation_done_o_i; // + // fuse_ctrl_out_responder_struct.xyz = intr_otp_error_o_i; // + // fuse_ctrl_out_responder_struct.xyz = alert_tx_o_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = otp_obs_o_i; // [7:0] + // fuse_ctrl_out_responder_struct.xyz = otp_ast_pwr_seq_o_i; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = pwr_otp_o_i; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = lc_otp_vendor_test_o_i; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = lc_otp_program_o_i; // [$bits(lc_otp_program_rsp_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = otp_lc_data_o_i; // [$bits(otp_lc_data_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = otp_broadcast_o_i; // [$bits(otp_broadcast_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = cio_test_o_i; // [OtpTestVectWidth-1:0] + // fuse_ctrl_out_responder_struct.xyz = cio_test_en_o_i; // [OtpTestVectWidth-1:0] + // Initiator inout signals + // fuse_ctrl_out_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_out_initiator_struct.xyz; // + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_out_initiator_s fuse_ctrl_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_out_responder_s fuse_ctrl_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_out_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Variables within the fuse_ctrl_out_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // fuse_ctrl_out_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // edn_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(edn_pkg::edn_req_t)-1:0] + // intr_otp_operation_done_o_o <= fuse_ctrl_out_initiator_struct.xyz; // + // intr_otp_error_o_o <= fuse_ctrl_out_initiator_struct.xyz; // + // alert_tx_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // otp_obs_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [7:0] + // otp_ast_pwr_seq_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // pwr_otp_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // lc_otp_vendor_test_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // lc_otp_program_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(lc_otp_program_rsp_t)-1:0] + // otp_lc_data_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(otp_lc_data_t)-1:0] + // otp_broadcast_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(otp_broadcast_t)-1:0] + // cio_test_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [OtpTestVectWidth-1:0] + // cio_test_en_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [OtpTestVectWidth-1:0] + // Responder inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_out_initiator_struct.xyz; // + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv new file mode 100644 index 000000000..25d4370f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_out interface signals. +// It is instantiated once per fuse_ctrl_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_out_bus.edn_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.intr_otp_operation_done_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.intr_otp_error_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.alert_tx_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.otp_obs_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.otp_ast_pwr_seq_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.otp_broadcast_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.cio_test_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.cio_test_en_o), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_pkg_hdl::*; + +interface fuse_ctrl_out_if #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o, + inout tri intr_otp_operation_done_o, + inout tri intr_otp_error_o, + inout tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o, + inout tri [7:0] otp_obs_o, + inout tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o, + inout tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o, + inout tri [OtpTestVectWidth-1:0] cio_test_o, + inout tri [OtpTestVectWidth-1:0] cio_test_en_o + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input edn_o, + input intr_otp_operation_done_o, + input intr_otp_error_o, + input alert_tx_o, + input otp_obs_o, + input otp_ast_pwr_seq_o, + input otp_broadcast_o, + input cio_test_o, + input cio_test_en_o + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input edn_o, + input intr_otp_operation_done_o, + input intr_otp_error_o, + input alert_tx_o, + input otp_obs_o, + input otp_ast_pwr_seq_o, + input otp_broadcast_o, + input cio_test_o, + input cio_test_en_o + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output edn_o, + output intr_otp_operation_done_o, + output intr_otp_error_o, + output alert_tx_o, + output otp_obs_o, + output otp_ast_pwr_seq_o, + output otp_broadcast_o, + output cio_test_o, + output cio_test_en_o + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_macros.svh new file mode 100644 index 000000000..3002819f6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_out_configuration class. +// + `define fuse_ctrl_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_out_configuration_s; + + `define fuse_ctrl_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_configuration_s to_struct();\ + fuse_ctrl_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_out_configuration_s fuse_ctrl_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_out_transaction class. +// + `define fuse_ctrl_out_MONITOR_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_monitor_s; + + `define fuse_ctrl_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_monitor_s to_monitor_struct();\ + fuse_ctrl_out_monitor_struct = \ + { \ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_out_monitor_s fuse_ctrl_out_monitor_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_out_INITIATOR_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_initiator_s; + + `define fuse_ctrl_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_initiator_s to_initiator_struct();\ + fuse_ctrl_out_initiator_struct = \ + {\ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_out_initiator_s fuse_ctrl_out_initiator_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_out_RESPONDER_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_responder_s; + + `define fuse_ctrl_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_responder_s to_responder_struct();\ + fuse_ctrl_out_responder_struct = \ + {\ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_responder_struct);\ + endfunction + + `define fuse_ctrl_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_out_responder_s fuse_ctrl_out_responder_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor.svh new file mode 100644 index 000000000..9f967f63b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_out transactions observed by the +// fuse_ctrl_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_monitor #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_out_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_out_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_out_monitor #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_out_monitor_s fuse_ctrl_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor_bfm.sv new file mode 100644 index 000000000..e33c93099 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor_bfm.sv @@ -0,0 +1,224 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_out monitor through a virtual +// interface handle in the fuse_ctrl_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_out_if. +// +// Input signals from the fuse_ctrl_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_pkg_hdl::*; +`include "src/fuse_ctrl_out_macros.svh" + + +interface fuse_ctrl_out_monitor_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + ( fuse_ctrl_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_out_MONITOR_STRUCT + fuse_ctrl_out_monitor_s fuse_ctrl_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o_i; + tri intr_otp_operation_done_o_i; + tri intr_otp_error_o_i; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_i; + tri [7:0] otp_obs_o_i; + tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_i; + tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_i; + tri [OtpTestVectWidth-1:0] cio_test_o_i; + tri [OtpTestVectWidth-1:0] cio_test_en_o_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign edn_o_i = bus.edn_o; + assign intr_otp_operation_done_o_i = bus.intr_otp_operation_done_o; + assign intr_otp_error_o_i = bus.intr_otp_error_o; + assign alert_tx_o_i = bus.alert_tx_o; + assign otp_obs_o_i = bus.otp_obs_o; + assign otp_ast_pwr_seq_o_i = bus.otp_ast_pwr_seq_o; + assign otp_broadcast_o_i = bus.otp_broadcast_o; + assign cio_test_o_i = bus.cio_test_o; + assign cio_test_en_o_i = bus.cio_test_en_o; + + // Proxy handle to UVM monitor + fuse_ctrl_out_pkg::fuse_ctrl_out_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_out_configuration_s fuse_ctrl_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_out_monitor_s fuse_ctrl_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_out_monitor_struct.pwr_otp_o + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_out_monitor_struct.xyz = edn_o_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = intr_otp_operation_done_o_i; // + // fuse_ctrl_out_monitor_struct.xyz = intr_otp_error_o_i; // + // fuse_ctrl_out_monitor_struct.xyz = alert_tx_o_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = otp_obs_o_i; // [7:0] + // fuse_ctrl_out_monitor_struct.xyz = otp_ast_pwr_seq_o_i; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = otp_broadcast_o_i; // [$bits(otp_broadcast_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = cio_test_o_i; // [OtpTestVectWidth-1:0] + // fuse_ctrl_out_monitor_struct.xyz = cio_test_en_o_i; // [OtpTestVectWidth-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_random_sequence.svh new file mode 100644 index 000000000..fa517894b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_random_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_out_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_out_random_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_out_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_out_random_sequence::body()-fuse_ctrl_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_out_driver_bfm via the sequencer and fuse_ctrl_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_responder_sequence.svh new file mode 100644 index 000000000..2dfe53b5d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_responder_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_out_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_out_responder_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_out_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_sequence_base.svh new file mode 100644 index 000000000..d115821b5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_sequence_base #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .RSP(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_out_sequence_base #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // variables + typedef fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_out_transaction_req_t; + fuse_ctrl_out_transaction_req_t req; + typedef fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_out_transaction_rsp_t; + fuse_ctrl_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction.svh new file mode 100644 index 000000000..1da32f283 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction.svh @@ -0,0 +1,223 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_transaction #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_out_transaction #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_out_monitor and fuse_ctrl_out_monitor_bfm + // This struct is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_MONITOR_STRUCT + fuse_ctrl_out_monitor_s fuse_ctrl_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_out_monitor_struct. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_out_driver_bfm. + // This struct is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_INITIATOR_STRUCT + fuse_ctrl_out_initiator_s fuse_ctrl_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_out_initiator_struct. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_out_driver_bfm. + // This struct is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_RESPONDER_STRUCT + fuse_ctrl_out_responder_s fuse_ctrl_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_out_responder_struct. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("otp_lc_data_o:0x%x pwr_otp_o:0x%x ",otp_lc_data_o,pwr_otp_o); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.otp_lc_data_o == RHS.otp_lc_data_o) + &&(this.pwr_otp_o == RHS.pwr_otp_o) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.otp_lc_data_o = RHS.otp_lc_data_o; + this.pwr_otp_o = RHS.pwr_otp_o; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,otp_lc_data_o,"otp_lc_data_o"); + $add_attribute(transaction_view_h,pwr_otp_o,"pwr_otp_o"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction_coverage.svh new file mode 100644 index 000000000..2233f6d7e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction_coverage.svh @@ -0,0 +1,103 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_out transaction information using +// a covergroup named fuse_ctrl_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_transaction_coverage #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_subscriber #(.T(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_out_transaction_coverage #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + otp_lc_data_o: coverpoint coverage_trans.otp_lc_data_o; + pwr_otp_o: coverpoint coverage_trans.pwr_otp_o; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/yaml/fuse_ctrl_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/yaml/fuse_ctrl_out_interface.yaml new file mode 100644 index 000000000..bbb13e052 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_out_pkg/yaml/fuse_ctrl_out_interface.yaml @@ -0,0 +1,72 @@ +uvmf: + interfaces: + fuse_ctrl_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AlertSyncOn + type: int + value: '3' + - name: RndConstLfrSeed + type: lfsr_seed_t + value: RndConstLfsrSeedDefault + - name: RndCnstLfsrPerm + type: lsfr_perm_t + value: RndCnstLfsrPermDefault + - name: MemInitFile + type: string + ports: + - dir: input + name: edn_o + reset_value: '''bz' + width: '[''$bits(edn_pkg::edn_req_t)'']' + - dir: input + name: intr_otp_operation_done_o + reset_value: '''bz' + width: '1' + - dir: input + name: intr_otp_error_o + reset_value: '''bz' + width: '1' + - dir: input + name: alert_tx_o + reset_value: '''bz' + width: '[''NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)'']' + - dir: input + name: otp_obs_o + reset_value: '''bz' + width: '8' + - dir: input + name: otp_ast_pwr_seq_o + reset_value: '''bz' + width: '[''$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)'']' + - dir: input + name: otp_broadcast_o + reset_value: '''bz' + width: '[''$bits(otp_broadcast_t)'']' + - dir: input + name: cio_test_o + reset_value: '''bz' + width: '[''OtpTestVectWidth'']' + - dir: input + name: cio_test_en_o + reset_value: '''bz' + width: '[''OtpTestVectWidth'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: pwr_otp_o + type: pwrmgr_pkg::pwr_otp_rsp_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.project new file mode 100644 index 000000000..931d0548e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..e6e385ac0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..7ce58a365 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f + +fuse_ctrl_prim_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f + +fuse_ctrl_prim_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_read_if_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_read_if_pkg +COMP_fuse_ctrl_prim_axi_read_if_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_read_if_pkg +COMP_fuse_ctrl_prim_axi_read_if_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_read_if_pkg: $(COMP_fuse_ctrl_prim_axi_read_if_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_read_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_read_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_if_pkg += -I$(fuse_ctrl_prim_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_if_pkg += $(fuse_ctrl_prim_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..5a8d38b1e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if.compile new file mode 100644 index 000000000..ce142767a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_read_if_hvl.compile + - fuse_ctrl_prim_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..5ecca257f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_read_if_if.sv +src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv +src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_common.compile new file mode 100644 index 000000000..f7bbff4b6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..3be99c24b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..f66b0809e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..0f9b2fdb7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hdl.compile new file mode 100644 index 000000000..4cb1da005 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_read_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_read_if_if.sv + - src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hvl.compile new file mode 100644 index 000000000..bd9e9530a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_read_if_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.sv new file mode 100644 index 000000000..39a398f84 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_read_if_macros.svh" + + export fuse_ctrl_prim_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_read_if_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_read_if_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_read_if_configuration.svh" + `include "src/fuse_ctrl_prim_axi_read_if_driver.svh" + `include "src/fuse_ctrl_prim_axi_read_if_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_read_if_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_read_if_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_read_if_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_read_if_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_read_if2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..9ca839db8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..150746c87 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_read_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..3b7c038b4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..6e979354a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..850d7d4dd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_agent.svh new file mode 100644 index 000000000..21263a19c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_configuration.svh new file mode 100644 index 000000000..b51d7b8f0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_read_if_configuration_s fuse_ctrl_prim_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_read_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_if_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_read_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver.svh new file mode 100644 index 000000000..e414a4883 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. +`fuse_ctrl_prim_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_if_initiator_s fuse_ctrl_prim_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. +`fuse_ctrl_prim_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_if_responder_s fuse_ctrl_prim_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..c519b223f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_read_if signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_read_if driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_read_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_if_macros.svh" + +interface fuse_ctrl_prim_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_read_if_pkg::fuse_ctrl_prim_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_read_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. + `fuse_ctrl_prim_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. + `fuse_ctrl_prim_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_read_if_configuration_s fuse_ctrl_prim_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_read_if_initiator_s fuse_ctrl_prim_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_read_if_responder_s fuse_ctrl_prim_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_read_if_initiator_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Members within the fuse_ctrl_prim_axi_read_if_responder_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + initiator_struct = fuse_ctrl_prim_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_read_if_initiator_s fuse_ctrl_prim_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_read_if_responder_s fuse_ctrl_prim_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_read_if_initiator_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Variables within the fuse_ctrl_prim_axi_read_if_responder_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arlock_i; // + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_if.sv new file mode 100644 index 000000000..e1e4911a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_read_if interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_read_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_if_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_macros.svh new file mode 100644 index 000000000..9aa71c06e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_read_if_configuration class. +// + `define fuse_ctrl_prim_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_read_if_configuration_s; + + `define fuse_ctrl_prim_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_if_configuration_s to_struct();\ + fuse_ctrl_prim_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_read_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_read_if_configuration_s fuse_ctrl_prim_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_read_if_transaction class. +// + `define fuse_ctrl_prim_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_if_monitor_s; + + `define fuse_ctrl_prim_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_if_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_read_if_monitor_struct = \ + { \ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_read_if_monitor_s fuse_ctrl_prim_axi_read_if_monitor_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_if_initiator_s; + + `define fuse_ctrl_prim_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_if_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_read_if_initiator_struct = \ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_read_if_initiator_s fuse_ctrl_prim_axi_read_if_initiator_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_if_responder_s; + + `define fuse_ctrl_prim_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_if_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_read_if_responder_struct = \ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_if_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_read_if_responder_s fuse_ctrl_prim_axi_read_if_responder_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor.svh new file mode 100644 index 000000000..bf0c76c81 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_read_if transactions observed by the +// fuse_ctrl_prim_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_read_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_read_if_monitor_s fuse_ctrl_prim_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..bed13faf6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_read_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_read_if monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_read_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_if_macros.svh" + + +interface fuse_ctrl_prim_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_read_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_if_monitor_s fuse_ctrl_prim_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_read_if_pkg::fuse_ctrl_prim_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_read_if_configuration_s fuse_ctrl_prim_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_read_if_monitor_s fuse_ctrl_prim_axi_read_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_araddr + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arvalid + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arburst + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arsize + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arlen + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_aruser + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arid + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arlock + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..bd8b0a768 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_read_if_random_sequence::body()-fuse_ctrl_prim_axi_read_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_read_if_driver_bfm via the sequencer and fuse_ctrl_prim_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..dd96f25d6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..0d10545bd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_if_transaction_req_t; + fuse_ctrl_prim_axi_read_if_transaction_req_t req; + typedef fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_if_transaction_rsp_t; + fuse_ctrl_prim_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction.svh new file mode 100644 index 000000000..f4f6cb786 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] prim_araddr ; + logic prim_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + logic [2:0] prim_arsize ; + logic [7:0] prim_arlen ; + logic [UW-1:0] prim_aruser ; + logic [IW-1:0] prim_arid ; + logic prim_arlock ; + logic prim_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_read_if_monitor and fuse_ctrl_prim_axi_read_if_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_if_monitor_s fuse_ctrl_prim_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_if_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_if_initiator_s fuse_ctrl_prim_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_if_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_if_responder_s fuse_ctrl_prim_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_if_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_araddr:0x%x prim_arvalid:0x%x prim_arburst:0x%x prim_arsize:0x%x prim_arlen:0x%x prim_aruser:0x%x prim_arid:0x%x prim_arlock:0x%x prim_rready:0x%x ",prim_araddr,prim_arvalid,prim_arburst,prim_arsize,prim_arlen,prim_aruser,prim_arid,prim_arlock,prim_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_araddr = RHS.prim_araddr; + this.prim_arvalid = RHS.prim_arvalid; + this.prim_arburst = RHS.prim_arburst; + this.prim_arsize = RHS.prim_arsize; + this.prim_arlen = RHS.prim_arlen; + this.prim_aruser = RHS.prim_aruser; + this.prim_arid = RHS.prim_arid; + this.prim_arlock = RHS.prim_arlock; + this.prim_rready = RHS.prim_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_araddr,"prim_araddr"); + $add_attribute(transaction_view_h,prim_arvalid,"prim_arvalid"); + $add_attribute(transaction_view_h,prim_arburst,"prim_arburst"); + $add_attribute(transaction_view_h,prim_arsize,"prim_arsize"); + $add_attribute(transaction_view_h,prim_arlen,"prim_arlen"); + $add_attribute(transaction_view_h,prim_aruser,"prim_aruser"); + $add_attribute(transaction_view_h,prim_arid,"prim_arid"); + $add_attribute(transaction_view_h,prim_arlock,"prim_arlock"); + $add_attribute(transaction_view_h,prim_rready,"prim_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..283a0b24c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_read_if transaction information using +// a covergroup named fuse_ctrl_prim_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_araddr: coverpoint coverage_trans.prim_araddr; + prim_arvalid: coverpoint coverage_trans.prim_arvalid; + prim_arburst: coverpoint coverage_trans.prim_arburst; + prim_arsize: coverpoint coverage_trans.prim_arsize; + prim_arlen: coverpoint coverage_trans.prim_arlen; + prim_aruser: coverpoint coverage_trans.prim_aruser; + prim_arid: coverpoint coverage_trans.prim_arid; + prim_arlock: coverpoint coverage_trans.prim_arlock; + prim_rready: coverpoint coverage_trans.prim_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_read_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/yaml/fuse_ctrl_prim_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/yaml/fuse_ctrl_prim_axi_read_if_interface.yaml new file mode 100644 index 000000000..a55568558 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/yaml/fuse_ctrl_prim_axi_read_if_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: prim_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.project new file mode 100644 index 000000000..e3c0c4ae5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_read_in_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.svproject new file mode 100644 index 000000000..fef449edc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/Makefile new file mode 100644 index 000000000..65765f4e1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_read_in_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_read_in_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hvl.f + +fuse_ctrl_prim_axi_read_in_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hdl.f + +fuse_ctrl_prim_axi_read_in_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_read_in_if_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_read_in_if_pkg +COMP_fuse_ctrl_prim_axi_read_in_if_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_read_in_if_pkg +COMP_fuse_ctrl_prim_axi_read_in_if_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_read_in_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_read_in_if_pkg: $(COMP_fuse_ctrl_prim_axi_read_in_if_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_read_in_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_read_in_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_read_in_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_in_if_pkg += -I$(fuse_ctrl_prim_axi_read_in_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_in_if_pkg += $(fuse_ctrl_prim_axi_read_in_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_in_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_read_in_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_in_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_in_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/compile.do new file mode 100644 index 000000000..a0e911399 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_read_in_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if.compile new file mode 100644 index 000000000..43fd9c4de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_read_in_if_hvl.compile + - fuse_ctrl_prim_axi_read_in_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_bfm.vinfo new file mode 100644 index 000000000..395fd9b15 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_read_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_read_in_if_if.sv +src/fuse_ctrl_prim_axi_read_in_if_driver_bfm.sv +src/fuse_ctrl_prim_axi_read_in_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_common.compile new file mode 100644 index 000000000..906b7e2e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hdl.f new file mode 100644 index 000000000..9cdf065b2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hvl.f new file mode 100644 index 000000000..2450d1346 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_xrtl.f new file mode 100644 index 000000000..5634d3c6c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hdl.compile new file mode 100644 index 000000000..1483fae51 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_read_in_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_read_in_if_if.sv + - src/fuse_ctrl_prim_axi_read_in_if_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_read_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hvl.compile new file mode 100644 index 000000000..76c6ba103 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_read_in_if_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_read_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.sv new file mode 100644 index 000000000..41e089ed4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_in_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_read_in_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_read_in_if_macros.svh" + + export fuse_ctrl_prim_axi_read_in_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_read_in_if_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_read_in_if_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_if_configuration.svh" + `include "src/fuse_ctrl_prim_axi_read_in_if_driver.svh" + `include "src/fuse_ctrl_prim_axi_read_in_if_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_if_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_read_in_if_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_read_in_if_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_if_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_read_in_if2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.vinfo new file mode 100644 index 000000000..2cf3cfaf1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_read_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_read_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv new file mode 100644 index 000000000..9a998627f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_in_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_read_in_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_read_in_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.vinfo new file mode 100644 index 000000000..955dc6c9b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_sve.F new file mode 100644 index 000000000..bb7219efe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if2reg_adapter.svh new file mode 100644 index 000000000..573953654 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_read_in_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_read_in_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_read_in_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_agent.svh new file mode 100644 index 000000000..9780962c5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_read_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_read_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_read_in_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_configuration.svh new file mode 100644 index 000000000..efaafca0c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_read_in_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_read_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_read_in_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_read_in_if_configuration_s fuse_ctrl_prim_axi_read_in_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_read_in_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_if_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_read_in_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_read_in_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_read_in_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_read_in_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_in_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver.svh new file mode 100644 index 000000000..cc47e681a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_read_in_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_read_in_if_driver and fuse_ctrl_prim_axi_read_in_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_read_in_if_driver_bfm. +`fuse_ctrl_prim_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_in_if_initiator_s fuse_ctrl_prim_axi_read_in_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_read_in_if_driver and fuse_ctrl_prim_axi_read_in_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_read_in_if_driver_bfm. +`fuse_ctrl_prim_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_in_if_responder_s fuse_ctrl_prim_axi_read_in_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_read_in_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_read_in_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_read_in_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_read_in_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver_bfm.sv new file mode 100644 index 000000000..f1542cfed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_read_in_if signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_read_in_if driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_read_in_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_read_in_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_read_in_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_in_if_macros.svh" + +interface fuse_ctrl_prim_axi_read_in_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_read_in_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_in_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_read_in_if_pkg::fuse_ctrl_prim_axi_read_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_read_in_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_read_in_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_in_if_driver and fuse_ctrl_prim_axi_read_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_in_if_driver_bfm. + `fuse_ctrl_prim_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_in_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_read_in_if_driver and fuse_ctrl_prim_axi_read_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_in_if_driver_bfm. + `fuse_ctrl_prim_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_in_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_read_in_if_configuration_s fuse_ctrl_prim_axi_read_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_read_in_if_initiator_s fuse_ctrl_prim_axi_read_in_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_read_in_if_responder_s fuse_ctrl_prim_axi_read_in_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_read_in_if_initiator_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Members within the fuse_ctrl_prim_axi_read_in_if_responder_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + initiator_struct = fuse_ctrl_prim_axi_read_in_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_read_in_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_read_in_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_read_in_if_initiator_s fuse_ctrl_prim_axi_read_in_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_read_in_if_responder_s fuse_ctrl_prim_axi_read_in_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_read_in_if_initiator_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Variables within the fuse_ctrl_prim_axi_read_in_if_responder_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = arlock_i; // + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_read_in_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_read_in_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_if.sv new file mode 100644 index 000000000..b301c7050 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_read_in_if interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_read_in_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_read_in_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_read_in_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_in_if_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_read_in_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_macros.svh new file mode 100644 index 000000000..8ae1c0f22 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_read_in_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_read_in_if_configuration class. +// + `define fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_read_in_if_configuration_s; + + `define fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_if_configuration_s to_struct();\ + fuse_ctrl_prim_axi_read_in_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_read_in_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_read_in_if_configuration_s fuse_ctrl_prim_axi_read_in_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_read_in_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_read_in_if_transaction class. +// + `define fuse_ctrl_prim_axi_read_in_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_in_if_monitor_s; + + `define fuse_ctrl_prim_axi_read_in_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_if_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_read_in_if_monitor_struct = \ + { \ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_in_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_read_in_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_read_in_if_monitor_s fuse_ctrl_prim_axi_read_in_if_monitor_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_in_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_read_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_in_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_in_if_initiator_s; + + `define fuse_ctrl_prim_axi_read_in_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_if_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_read_in_if_initiator_struct = \ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_in_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_in_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_read_in_if_initiator_s fuse_ctrl_prim_axi_read_in_if_initiator_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_in_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_read_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_in_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_in_if_responder_s; + + `define fuse_ctrl_prim_axi_read_in_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_if_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_read_in_if_responder_struct = \ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_in_if_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_in_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_read_in_if_responder_s fuse_ctrl_prim_axi_read_in_if_responder_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_in_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor.svh new file mode 100644 index 000000000..b6411afc9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_read_in_if transactions observed by the +// fuse_ctrl_prim_axi_read_in_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_read_in_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_read_in_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_read_in_if_monitor_s fuse_ctrl_prim_axi_read_in_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_read_in_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor_bfm.sv new file mode 100644 index 000000000..96ecff71c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_read_in_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_read_in_if monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_read_in_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_read_in_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_read_in_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_in_if_macros.svh" + + +interface fuse_ctrl_prim_axi_read_in_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_read_in_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_in_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_read_in_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_in_if_monitor_s fuse_ctrl_prim_axi_read_in_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_read_in_if_pkg::fuse_ctrl_prim_axi_read_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_read_in_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_read_in_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_read_in_if_configuration_s fuse_ctrl_prim_axi_read_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_read_in_if_monitor_s fuse_ctrl_prim_axi_read_in_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_araddr + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_arvalid + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_arburst + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_arsize + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_arlen + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_aruser + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_arid + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_arlock + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_random_sequence.svh new file mode 100644 index 000000000..323a17c7d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_read_in_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_read_in_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_read_in_if_random_sequence::body()-fuse_ctrl_prim_axi_read_in_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_read_in_if_driver_bfm via the sequencer and fuse_ctrl_prim_axi_read_in_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_read_in_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_responder_sequence.svh new file mode 100644 index 000000000..8005d684e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_read_in_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_sequence_base.svh new file mode 100644 index 000000000..7642d22ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_in_if_transaction_req_t; + fuse_ctrl_prim_axi_read_in_if_transaction_req_t req; + typedef fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_in_if_transaction_rsp_t; + fuse_ctrl_prim_axi_read_in_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_read_in_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_read_in_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction.svh new file mode 100644 index 000000000..ed0bed0fc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_read_in_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] prim_araddr ; + logic prim_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + logic [2:0] prim_arsize ; + logic [7:0] prim_arlen ; + logic [UW-1:0] prim_aruser ; + logic [IW-1:0] prim_arid ; + logic prim_arlock ; + logic prim_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_read_in_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_read_in_if_monitor and fuse_ctrl_prim_axi_read_in_if_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_in_if_monitor_s fuse_ctrl_prim_axi_read_in_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_in_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_if_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_in_if_driver and fuse_ctrl_prim_axi_read_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_in_if_initiator_s fuse_ctrl_prim_axi_read_in_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_in_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_if_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_read_in_if_driver and fuse_ctrl_prim_axi_read_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_in_if_responder_s fuse_ctrl_prim_axi_read_in_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_in_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_if_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_araddr:0x%x prim_arvalid:0x%x prim_arburst:0x%x prim_arsize:0x%x prim_arlen:0x%x prim_aruser:0x%x prim_arid:0x%x prim_arlock:0x%x prim_rready:0x%x ",prim_araddr,prim_arvalid,prim_arburst,prim_arsize,prim_arlen,prim_aruser,prim_arid,prim_arlock,prim_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_araddr = RHS.prim_araddr; + this.prim_arvalid = RHS.prim_arvalid; + this.prim_arburst = RHS.prim_arburst; + this.prim_arsize = RHS.prim_arsize; + this.prim_arlen = RHS.prim_arlen; + this.prim_aruser = RHS.prim_aruser; + this.prim_arid = RHS.prim_arid; + this.prim_arlock = RHS.prim_arlock; + this.prim_rready = RHS.prim_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_read_in_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_araddr,"prim_araddr"); + $add_attribute(transaction_view_h,prim_arvalid,"prim_arvalid"); + $add_attribute(transaction_view_h,prim_arburst,"prim_arburst"); + $add_attribute(transaction_view_h,prim_arsize,"prim_arsize"); + $add_attribute(transaction_view_h,prim_arlen,"prim_arlen"); + $add_attribute(transaction_view_h,prim_aruser,"prim_aruser"); + $add_attribute(transaction_view_h,prim_arid,"prim_arid"); + $add_attribute(transaction_view_h,prim_arlock,"prim_arlock"); + $add_attribute(transaction_view_h,prim_rready,"prim_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction_coverage.svh new file mode 100644 index 000000000..59ee6af33 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_read_in_if transaction information using +// a covergroup named fuse_ctrl_prim_axi_read_in_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_read_in_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_araddr: coverpoint coverage_trans.prim_araddr; + prim_arvalid: coverpoint coverage_trans.prim_arvalid; + prim_arburst: coverpoint coverage_trans.prim_arburst; + prim_arsize: coverpoint coverage_trans.prim_arsize; + prim_arlen: coverpoint coverage_trans.prim_arlen; + prim_aruser: coverpoint coverage_trans.prim_aruser; + prim_arid: coverpoint coverage_trans.prim_arid; + prim_arlock: coverpoint coverage_trans.prim_arlock; + prim_rready: coverpoint coverage_trans.prim_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_read_in_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_read_in_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_in_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_read_in_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/yaml/fuse_ctrl_prim_axi_read_in_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/yaml/fuse_ctrl_prim_axi_read_in_if_interface.yaml new file mode 100644 index 000000000..8ef041734 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/yaml/fuse_ctrl_prim_axi_read_in_if_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_read_in_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: prim_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.project new file mode 100644 index 000000000..d0dba887e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_read_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.svproject new file mode 100644 index 000000000..7f5e878c7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/Makefile new file mode 100644 index 000000000..ff7476558 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_read_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_read_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hvl.f + +fuse_ctrl_prim_axi_read_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hdl.f + +fuse_ctrl_prim_axi_read_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_read_in_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_read_in_pkg +COMP_fuse_ctrl_prim_axi_read_in_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_read_in_pkg +COMP_fuse_ctrl_prim_axi_read_in_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_read_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_read_in_pkg: $(COMP_fuse_ctrl_prim_axi_read_in_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_read_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_read_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_read_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_read_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_read_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_in_pkg += -I$(fuse_ctrl_prim_axi_read_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_in_pkg += $(fuse_ctrl_prim_axi_read_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_read_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/compile.do new file mode 100644 index 000000000..d5afe8a68 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_read_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in.compile new file mode 100644 index 000000000..73650e4cb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_read_in_hvl.compile + - fuse_ctrl_prim_axi_read_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_bfm.vinfo new file mode 100644 index 000000000..8ed6f0d0a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_read_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_read_in_if.sv +src/fuse_ctrl_prim_axi_read_in_driver_bfm.sv +src/fuse_ctrl_prim_axi_read_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_common.compile new file mode 100644 index 000000000..ca43b4da1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hdl.f new file mode 100644 index 000000000..f0b99a312 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hvl.f new file mode 100644 index 000000000..8dcf1976e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_xrtl.f new file mode 100644 index 000000000..46c2aabe8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hdl.compile new file mode 100644 index 000000000..31d8fb131 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_read_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_read_in_if.sv + - src/fuse_ctrl_prim_axi_read_in_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_read_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hvl.compile new file mode 100644 index 000000000..7c7cc34c5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_read_in_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_read_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.sv new file mode 100644 index 000000000..2e29485bd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_read_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_read_in_macros.svh" + + export fuse_ctrl_prim_axi_read_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_read_in_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_read_in_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_configuration.svh" + `include "src/fuse_ctrl_prim_axi_read_in_driver.svh" + `include "src/fuse_ctrl_prim_axi_read_in_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_read_in_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_read_in_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_read_in2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.vinfo new file mode 100644 index 000000000..7f62c3037 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_read_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_read_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.sv new file mode 100644 index 000000000..f771faa9d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_read_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_read_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.vinfo new file mode 100644 index 000000000..eb67953c1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_sve.F new file mode 100644 index 000000000..ce8af1688 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in2reg_adapter.svh new file mode 100644 index 000000000..2c9b99ecd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_read_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_read_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_read_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_agent.svh new file mode 100644 index 000000000..b2ff8a6c4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_read_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_read_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_read_in_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_configuration.svh new file mode 100644 index 000000000..7692603a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_read_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_read_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_read_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_read_in_configuration_s fuse_ctrl_prim_axi_read_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_read_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_read_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_read_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_read_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_read_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver.svh new file mode 100644 index 000000000..47ced3bf4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_read_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_read_in_driver and fuse_ctrl_prim_axi_read_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_read_in_driver_bfm. +`fuse_ctrl_prim_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_in_initiator_s fuse_ctrl_prim_axi_read_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_read_in_driver and fuse_ctrl_prim_axi_read_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_read_in_driver_bfm. +`fuse_ctrl_prim_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_in_responder_s fuse_ctrl_prim_axi_read_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_read_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_read_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_read_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_read_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver_bfm.sv new file mode 100644 index 000000000..a3f220a11 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_read_in signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_read_in driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_read_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_read_in_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_read_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_in_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_in_macros.svh" + +interface fuse_ctrl_prim_axi_read_in_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_read_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_read_in_pkg::fuse_ctrl_prim_axi_read_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_read_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_read_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_read_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_in_driver and fuse_ctrl_prim_axi_read_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_in_driver_bfm. + `fuse_ctrl_prim_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_read_in_driver and fuse_ctrl_prim_axi_read_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_in_driver_bfm. + `fuse_ctrl_prim_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_read_in_configuration_s fuse_ctrl_prim_axi_read_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_read_in_initiator_s fuse_ctrl_prim_axi_read_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_read_in_responder_s fuse_ctrl_prim_axi_read_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_read_in_initiator_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Members within the fuse_ctrl_prim_axi_read_in_responder_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + initiator_struct = fuse_ctrl_prim_axi_read_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_read_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_read_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_read_in_initiator_s fuse_ctrl_prim_axi_read_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_read_in_responder_s fuse_ctrl_prim_axi_read_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_read_in_initiator_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Variables within the fuse_ctrl_prim_axi_read_in_responder_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = arlock_i; // + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_read_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_read_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_if.sv new file mode 100644 index 000000000..f7a4f7b73 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_read_in interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_read_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_read_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_read_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_in_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_read_in_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_macros.svh new file mode 100644 index 000000000..ba93fd264 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_read_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_read_in_configuration class. +// + `define fuse_ctrl_prim_axi_read_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_read_in_configuration_s; + + `define fuse_ctrl_prim_axi_read_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_configuration_s to_struct();\ + fuse_ctrl_prim_axi_read_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_read_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_read_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_read_in_configuration_s fuse_ctrl_prim_axi_read_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_read_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_read_in_transaction class. +// + `define fuse_ctrl_prim_axi_read_in_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_in_monitor_s; + + `define fuse_ctrl_prim_axi_read_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_read_in_monitor_struct = \ + { \ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_read_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_read_in_monitor_s fuse_ctrl_prim_axi_read_in_monitor_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_read_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_in_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_in_initiator_s; + + `define fuse_ctrl_prim_axi_read_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_read_in_initiator_struct = \ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_read_in_initiator_s fuse_ctrl_prim_axi_read_in_initiator_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_read_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_in_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_in_responder_s; + + `define fuse_ctrl_prim_axi_read_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_read_in_responder_struct = \ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_in_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_read_in_responder_s fuse_ctrl_prim_axi_read_in_responder_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor.svh new file mode 100644 index 000000000..1c3949390 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_read_in transactions observed by the +// fuse_ctrl_prim_axi_read_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_read_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_read_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_read_in_monitor_s fuse_ctrl_prim_axi_read_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_read_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor_bfm.sv new file mode 100644 index 000000000..efa2c9f98 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_read_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_read_in monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_read_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_read_in_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_read_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_in_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_in_macros.svh" + + +interface fuse_ctrl_prim_axi_read_in_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_read_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_read_in_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_in_monitor_s fuse_ctrl_prim_axi_read_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_read_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_read_in_pkg::fuse_ctrl_prim_axi_read_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_read_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_read_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_read_in_configuration_s fuse_ctrl_prim_axi_read_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_read_in_monitor_s fuse_ctrl_prim_axi_read_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_araddr + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_arvalid + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_arburst + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_arsize + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_arlen + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_aruser + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_arid + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_arlock + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_random_sequence.svh new file mode 100644 index 000000000..1cb563fc1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_read_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_read_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_read_in_random_sequence::body()-fuse_ctrl_prim_axi_read_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_read_in_driver_bfm via the sequencer and fuse_ctrl_prim_axi_read_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_read_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_responder_sequence.svh new file mode 100644 index 000000000..3a60a5cf8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_read_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_sequence_base.svh new file mode 100644 index 000000000..7c8932c6b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_in_transaction_req_t; + fuse_ctrl_prim_axi_read_in_transaction_req_t req; + typedef fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_in_transaction_rsp_t; + fuse_ctrl_prim_axi_read_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_read_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_read_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction.svh new file mode 100644 index 000000000..601cca308 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_read_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] prim_araddr ; + logic prim_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + logic [2:0] prim_arsize ; + logic [7:0] prim_arlen ; + logic [UW-1:0] prim_aruser ; + logic [IW-1:0] prim_arid ; + logic prim_arlock ; + logic prim_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_read_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_read_in_monitor and fuse_ctrl_prim_axi_read_in_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_in_monitor_s fuse_ctrl_prim_axi_read_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_in_driver and fuse_ctrl_prim_axi_read_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_in_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_in_initiator_s fuse_ctrl_prim_axi_read_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_read_in_driver and fuse_ctrl_prim_axi_read_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_in_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_in_responder_s fuse_ctrl_prim_axi_read_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_araddr:0x%x prim_arvalid:0x%x prim_arburst:0x%x prim_arsize:0x%x prim_arlen:0x%x prim_aruser:0x%x prim_arid:0x%x prim_arlock:0x%x prim_rready:0x%x ",prim_araddr,prim_arvalid,prim_arburst,prim_arsize,prim_arlen,prim_aruser,prim_arid,prim_arlock,prim_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_araddr = RHS.prim_araddr; + this.prim_arvalid = RHS.prim_arvalid; + this.prim_arburst = RHS.prim_arburst; + this.prim_arsize = RHS.prim_arsize; + this.prim_arlen = RHS.prim_arlen; + this.prim_aruser = RHS.prim_aruser; + this.prim_arid = RHS.prim_arid; + this.prim_arlock = RHS.prim_arlock; + this.prim_rready = RHS.prim_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_read_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_araddr,"prim_araddr"); + $add_attribute(transaction_view_h,prim_arvalid,"prim_arvalid"); + $add_attribute(transaction_view_h,prim_arburst,"prim_arburst"); + $add_attribute(transaction_view_h,prim_arsize,"prim_arsize"); + $add_attribute(transaction_view_h,prim_arlen,"prim_arlen"); + $add_attribute(transaction_view_h,prim_aruser,"prim_aruser"); + $add_attribute(transaction_view_h,prim_arid,"prim_arid"); + $add_attribute(transaction_view_h,prim_arlock,"prim_arlock"); + $add_attribute(transaction_view_h,prim_rready,"prim_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction_coverage.svh new file mode 100644 index 000000000..9315e32d7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_read_in transaction information using +// a covergroup named fuse_ctrl_prim_axi_read_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_read_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_araddr: coverpoint coverage_trans.prim_araddr; + prim_arvalid: coverpoint coverage_trans.prim_arvalid; + prim_arburst: coverpoint coverage_trans.prim_arburst; + prim_arsize: coverpoint coverage_trans.prim_arsize; + prim_arlen: coverpoint coverage_trans.prim_arlen; + prim_aruser: coverpoint coverage_trans.prim_aruser; + prim_arid: coverpoint coverage_trans.prim_arid; + prim_arlock: coverpoint coverage_trans.prim_arlock; + prim_rready: coverpoint coverage_trans.prim_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_read_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_read_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_read_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/yaml/fuse_ctrl_prim_axi_read_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/yaml/fuse_ctrl_prim_axi_read_in_interface.yaml new file mode 100644 index 000000000..722b47650 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/yaml/fuse_ctrl_prim_axi_read_in_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_read_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: prim_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.project new file mode 100644 index 000000000..383395618 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_read_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.svproject new file mode 100644 index 000000000..b202873ab --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/Makefile new file mode 100644 index 000000000..4e9d0fe18 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_read_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_read_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hvl.f + +fuse_ctrl_prim_axi_read_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hdl.f + +fuse_ctrl_prim_axi_read_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_read_out_if_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_read_out_if_pkg +COMP_fuse_ctrl_prim_axi_read_out_if_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_read_out_if_pkg +COMP_fuse_ctrl_prim_axi_read_out_if_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_read_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_read_out_if_pkg: $(COMP_fuse_ctrl_prim_axi_read_out_if_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_read_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_read_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_read_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_out_if_pkg += -I$(fuse_ctrl_prim_axi_read_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_out_if_pkg += $(fuse_ctrl_prim_axi_read_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_out_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_read_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/compile.do new file mode 100644 index 000000000..7c3781f3f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_read_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if.compile new file mode 100644 index 000000000..38953a316 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_read_out_if_hvl.compile + - fuse_ctrl_prim_axi_read_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_bfm.vinfo new file mode 100644 index 000000000..964634f61 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_read_out_if_if.sv +src/fuse_ctrl_prim_axi_read_out_if_driver_bfm.sv +src/fuse_ctrl_prim_axi_read_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_common.compile new file mode 100644 index 000000000..317b5d7ac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hdl.f new file mode 100644 index 000000000..0c9029736 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hvl.f new file mode 100644 index 000000000..9ee108d67 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_xrtl.f new file mode 100644 index 000000000..fbbf739cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hdl.compile new file mode 100644 index 000000000..06fb80cd7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_read_out_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_read_out_if_if.sv + - src/fuse_ctrl_prim_axi_read_out_if_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hvl.compile new file mode 100644 index 000000000..e8c82fe46 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_read_out_if_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.sv new file mode 100644 index 000000000..cb08be3f6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_read_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_read_out_if_macros.svh" + + export fuse_ctrl_prim_axi_read_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_read_out_if_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_read_out_if_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_if_configuration.svh" + `include "src/fuse_ctrl_prim_axi_read_out_if_driver.svh" + `include "src/fuse_ctrl_prim_axi_read_out_if_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_if_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_read_out_if_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_read_out_if_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_if_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_read_out_if2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.vinfo new file mode 100644 index 000000000..e405462b7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv new file mode 100644 index 000000000..09ecb0eef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_read_out_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_read_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..4f06d25c2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_sve.F new file mode 100644 index 000000000..5efb9cf26 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if2reg_adapter.svh new file mode 100644 index 000000000..3b4b607bb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_read_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_read_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_read_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_agent.svh new file mode 100644 index 000000000..7c0be008b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_read_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_configuration.svh new file mode 100644 index 000000000..300f44e63 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_read_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_read_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_read_out_if_configuration_s fuse_ctrl_prim_axi_read_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_read_out_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_if_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_read_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_read_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_read_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_read_out_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver.svh new file mode 100644 index 000000000..84cb7a06a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_read_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_read_out_if_driver and fuse_ctrl_prim_axi_read_out_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_read_out_if_driver_bfm. +`fuse_ctrl_prim_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_out_if_initiator_s fuse_ctrl_prim_axi_read_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_read_out_if_driver and fuse_ctrl_prim_axi_read_out_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_read_out_if_driver_bfm. +`fuse_ctrl_prim_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_out_if_responder_s fuse_ctrl_prim_axi_read_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_read_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_read_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_read_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_read_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver_bfm.sv new file mode 100644 index 000000000..4beaa864a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_read_out_if signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_read_out_if driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_read_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_read_out_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_read_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_out_if_macros.svh" + +interface fuse_ctrl_prim_axi_read_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_read_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_read_out_if_pkg::fuse_ctrl_prim_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_read_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_read_out_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_out_if_driver and fuse_ctrl_prim_axi_read_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_out_if_driver_bfm. + `fuse_ctrl_prim_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_read_out_if_driver and fuse_ctrl_prim_axi_read_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_out_if_driver_bfm. + `fuse_ctrl_prim_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_read_out_if_configuration_s fuse_ctrl_prim_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_read_out_if_initiator_s fuse_ctrl_prim_axi_read_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_read_out_if_responder_s fuse_ctrl_prim_axi_read_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_read_out_if_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Members within the fuse_ctrl_prim_axi_read_out_if_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + initiator_struct = fuse_ctrl_prim_axi_read_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_prim_axi_read_out_if_responder_struct.xyz = arready_i; // + // fuse_ctrl_prim_axi_read_out_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_read_out_if_responder_struct.xyz = rresp_i; // + // fuse_ctrl_prim_axi_read_out_if_responder_struct.xyz = rid_i; // + // fuse_ctrl_prim_axi_read_out_if_responder_struct.xyz = rlast_i; // + // fuse_ctrl_prim_axi_read_out_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_read_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_read_out_if_initiator_s fuse_ctrl_prim_axi_read_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_read_out_if_responder_s fuse_ctrl_prim_axi_read_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_read_out_if_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Variables within the fuse_ctrl_prim_axi_read_out_if_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= fuse_ctrl_prim_axi_read_out_if_initiator_struct.xyz; // + // rdata_o <= fuse_ctrl_prim_axi_read_out_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= fuse_ctrl_prim_axi_read_out_if_initiator_struct.xyz; // + // rid_o <= fuse_ctrl_prim_axi_read_out_if_initiator_struct.xyz; // + // rlast_o <= fuse_ctrl_prim_axi_read_out_if_initiator_struct.xyz; // + // rvalid_o <= fuse_ctrl_prim_axi_read_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_read_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_if.sv new file mode 100644 index 000000000..5819fef10 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_read_out_if interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_read_out_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_read_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_read_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_if_bus.arready), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_if_bus.rdata), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_if_bus.rresp), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_if_bus.rid), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_if_bus.rlast), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_out_if_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_read_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_macros.svh new file mode 100644 index 000000000..c5e996d07 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_read_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_read_out_if_configuration class. +// + `define fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_read_out_if_configuration_s; + + `define fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_if_configuration_s to_struct();\ + fuse_ctrl_prim_axi_read_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_read_out_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_read_out_if_configuration_s fuse_ctrl_prim_axi_read_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_read_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_read_out_if_transaction class. +// + `define fuse_ctrl_prim_axi_read_out_if_MONITOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } fuse_ctrl_prim_axi_read_out_if_monitor_s; + + `define fuse_ctrl_prim_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_if_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_read_out_if_monitor_struct = \ + { \ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( fuse_ctrl_prim_axi_read_out_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_read_out_if_monitor_s fuse_ctrl_prim_axi_read_out_if_monitor_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = fuse_ctrl_prim_axi_read_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } fuse_ctrl_prim_axi_read_out_if_initiator_s; + + `define fuse_ctrl_prim_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_if_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_read_out_if_initiator_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( fuse_ctrl_prim_axi_read_out_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_read_out_if_initiator_s fuse_ctrl_prim_axi_read_out_if_initiator_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = fuse_ctrl_prim_axi_read_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } fuse_ctrl_prim_axi_read_out_if_responder_s; + + `define fuse_ctrl_prim_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_if_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_read_out_if_responder_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( fuse_ctrl_prim_axi_read_out_if_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_read_out_if_responder_s fuse_ctrl_prim_axi_read_out_if_responder_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = fuse_ctrl_prim_axi_read_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor.svh new file mode 100644 index 000000000..5c5ffaeeb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_read_out_if transactions observed by the +// fuse_ctrl_prim_axi_read_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_read_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_read_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_read_out_if_monitor_s fuse_ctrl_prim_axi_read_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_read_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor_bfm.sv new file mode 100644 index 000000000..c4c0ad5d3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_read_out_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_read_out_if monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_read_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_read_out_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_read_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_out_if_macros.svh" + + +interface fuse_ctrl_prim_axi_read_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_read_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_read_out_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_out_if_monitor_s fuse_ctrl_prim_axi_read_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_read_out_if_pkg::fuse_ctrl_prim_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_read_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_read_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_read_out_if_configuration_s fuse_ctrl_prim_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_read_out_if_monitor_s fuse_ctrl_prim_axi_read_out_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_read_out_if_monitor_struct.prim_arready + // // fuse_ctrl_prim_axi_read_out_if_monitor_struct.prim_rdata + // // fuse_ctrl_prim_axi_read_out_if_monitor_struct.prim_rresp + // // fuse_ctrl_prim_axi_read_out_if_monitor_struct.prim_rid + // // fuse_ctrl_prim_axi_read_out_if_monitor_struct.prim_rlast + // // fuse_ctrl_prim_axi_read_out_if_monitor_struct.prim_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_read_out_if_monitor_struct.xyz = arready_i; // + // fuse_ctrl_prim_axi_read_out_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_read_out_if_monitor_struct.xyz = rresp_i; // + // fuse_ctrl_prim_axi_read_out_if_monitor_struct.xyz = rid_i; // + // fuse_ctrl_prim_axi_read_out_if_monitor_struct.xyz = rlast_i; // + // fuse_ctrl_prim_axi_read_out_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_random_sequence.svh new file mode 100644 index 000000000..cb283839d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_read_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_read_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_read_out_if_random_sequence::body()-fuse_ctrl_prim_axi_read_out_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_read_out_if_driver_bfm via the sequencer and fuse_ctrl_prim_axi_read_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_read_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_responder_sequence.svh new file mode 100644 index 000000000..2b38158de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_read_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_sequence_base.svh new file mode 100644 index 000000000..8138bfaf3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_out_if_transaction_req_t; + fuse_ctrl_prim_axi_read_out_if_transaction_req_t req; + typedef fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_out_if_transaction_rsp_t; + fuse_ctrl_prim_axi_read_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_read_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_read_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction.svh new file mode 100644 index 000000000..fdce68486 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_read_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_arready ; + logic [DW-1:0] prim_rdata ; + axi_pkg::axi_burst_e prim_rresp ; + logic [IW-1:0] prim_rid ; + logic prim_rlast ; + logic prim_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_read_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_read_out_if_monitor and fuse_ctrl_prim_axi_read_out_if_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_out_if_monitor_s fuse_ctrl_prim_axi_read_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_out_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_if_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_out_if_driver and fuse_ctrl_prim_axi_read_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_out_if_initiator_s fuse_ctrl_prim_axi_read_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_out_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_if_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_read_out_if_driver and fuse_ctrl_prim_axi_read_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_out_if_responder_s fuse_ctrl_prim_axi_read_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_out_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_if_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_arready:0x%x prim_rdata:0x%x prim_rresp:0x%x prim_rid:0x%x prim_rlast:0x%x prim_rvalid:0x%x ",prim_arready,prim_rdata,prim_rresp,prim_rid,prim_rlast,prim_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_arready == RHS.prim_arready) + &&(this.prim_rdata == RHS.prim_rdata) + &&(this.prim_rresp == RHS.prim_rresp) + &&(this.prim_rid == RHS.prim_rid) + &&(this.prim_rlast == RHS.prim_rlast) + &&(this.prim_rvalid == RHS.prim_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_arready = RHS.prim_arready; + this.prim_rdata = RHS.prim_rdata; + this.prim_rresp = RHS.prim_rresp; + this.prim_rid = RHS.prim_rid; + this.prim_rlast = RHS.prim_rlast; + this.prim_rvalid = RHS.prim_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_read_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_arready,"prim_arready"); + $add_attribute(transaction_view_h,prim_rdata,"prim_rdata"); + $add_attribute(transaction_view_h,prim_rresp,"prim_rresp"); + $add_attribute(transaction_view_h,prim_rid,"prim_rid"); + $add_attribute(transaction_view_h,prim_rlast,"prim_rlast"); + $add_attribute(transaction_view_h,prim_rvalid,"prim_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction_coverage.svh new file mode 100644 index 000000000..ea69c07a1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_read_out_if transaction information using +// a covergroup named fuse_ctrl_prim_axi_read_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_read_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_arready: coverpoint coverage_trans.prim_arready; + prim_rdata: coverpoint coverage_trans.prim_rdata; + prim_rresp: coverpoint coverage_trans.prim_rresp; + prim_rid: coverpoint coverage_trans.prim_rid; + prim_rlast: coverpoint coverage_trans.prim_rlast; + prim_rvalid: coverpoint coverage_trans.prim_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_read_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_read_out_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_read_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/yaml/fuse_ctrl_prim_axi_read_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/yaml/fuse_ctrl_prim_axi_read_out_if_interface.yaml new file mode 100644 index 000000000..5d9e6555a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/yaml/fuse_ctrl_prim_axi_read_out_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_read_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.project new file mode 100644 index 000000000..a150c2600 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_read_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.svproject new file mode 100644 index 000000000..07283b071 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/Makefile new file mode 100644 index 000000000..c82fb10fe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_read_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_read_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hvl.f + +fuse_ctrl_prim_axi_read_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hdl.f + +fuse_ctrl_prim_axi_read_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_read_out_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_read_out_pkg +COMP_fuse_ctrl_prim_axi_read_out_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_read_out_pkg +COMP_fuse_ctrl_prim_axi_read_out_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_read_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_read_out_pkg: $(COMP_fuse_ctrl_prim_axi_read_out_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_read_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_read_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_read_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_read_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_read_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_out_pkg += -I$(fuse_ctrl_prim_axi_read_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_out_pkg += $(fuse_ctrl_prim_axi_read_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_read_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/compile.do new file mode 100644 index 000000000..1f3f42509 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_read_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out.compile new file mode 100644 index 000000000..3ae619a60 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_read_out_hvl.compile + - fuse_ctrl_prim_axi_read_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_bfm.vinfo new file mode 100644 index 000000000..804bedee2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_read_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_read_out_if.sv +src/fuse_ctrl_prim_axi_read_out_driver_bfm.sv +src/fuse_ctrl_prim_axi_read_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_common.compile new file mode 100644 index 000000000..473bd1034 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hdl.f new file mode 100644 index 000000000..9915fab63 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hvl.f new file mode 100644 index 000000000..c105f6ac9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_xrtl.f new file mode 100644 index 000000000..efd90f559 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hdl.compile new file mode 100644 index 000000000..3110b6364 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_read_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_read_out_if.sv + - src/fuse_ctrl_prim_axi_read_out_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_read_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hvl.compile new file mode 100644 index 000000000..5f022ac42 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_read_out_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_read_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.sv new file mode 100644 index 000000000..d12ebea63 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_read_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_read_out_macros.svh" + + export fuse_ctrl_prim_axi_read_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_read_out_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_read_out_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_configuration.svh" + `include "src/fuse_ctrl_prim_axi_read_out_driver.svh" + `include "src/fuse_ctrl_prim_axi_read_out_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_read_out_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_read_out_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_read_out2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.vinfo new file mode 100644 index 000000000..ce44bd3e7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_read_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_read_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.sv new file mode 100644 index 000000000..3a6641be3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_read_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_read_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.vinfo new file mode 100644 index 000000000..d2706f6b1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_sve.F new file mode 100644 index 000000000..e27a4496e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out2reg_adapter.svh new file mode 100644 index 000000000..6d0791b2d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_read_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_read_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_read_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_agent.svh new file mode 100644 index 000000000..4ecac4aa1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_read_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_read_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_read_out_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_configuration.svh new file mode 100644 index 000000000..04a822d95 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_read_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_read_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_read_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_read_out_configuration_s fuse_ctrl_prim_axi_read_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_read_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_read_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_read_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_read_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_read_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver.svh new file mode 100644 index 000000000..706e00774 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_read_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_read_out_driver and fuse_ctrl_prim_axi_read_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_read_out_driver_bfm. +`fuse_ctrl_prim_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_out_initiator_s fuse_ctrl_prim_axi_read_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_read_out_driver and fuse_ctrl_prim_axi_read_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_read_out_driver_bfm. +`fuse_ctrl_prim_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_out_responder_s fuse_ctrl_prim_axi_read_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_read_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_read_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_read_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_read_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver_bfm.sv new file mode 100644 index 000000000..f23f7c67a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_read_out signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_read_out driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_read_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_read_out_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_read_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_out_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_out_macros.svh" + +interface fuse_ctrl_prim_axi_read_out_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_read_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_read_out_pkg::fuse_ctrl_prim_axi_read_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_read_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_read_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_read_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_out_driver and fuse_ctrl_prim_axi_read_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_out_driver_bfm. + `fuse_ctrl_prim_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_read_out_driver and fuse_ctrl_prim_axi_read_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_out_driver_bfm. + `fuse_ctrl_prim_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_read_out_configuration_s fuse_ctrl_prim_axi_read_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_read_out_initiator_s fuse_ctrl_prim_axi_read_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_read_out_responder_s fuse_ctrl_prim_axi_read_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_read_out_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Members within the fuse_ctrl_prim_axi_read_out_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + initiator_struct = fuse_ctrl_prim_axi_read_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_prim_axi_read_out_responder_struct.xyz = arready_i; // + // fuse_ctrl_prim_axi_read_out_responder_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_read_out_responder_struct.xyz = rresp_i; // + // fuse_ctrl_prim_axi_read_out_responder_struct.xyz = rid_i; // + // fuse_ctrl_prim_axi_read_out_responder_struct.xyz = rlast_i; // + // fuse_ctrl_prim_axi_read_out_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_read_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_read_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_read_out_initiator_s fuse_ctrl_prim_axi_read_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_read_out_responder_s fuse_ctrl_prim_axi_read_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_read_out_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Variables within the fuse_ctrl_prim_axi_read_out_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= fuse_ctrl_prim_axi_read_out_initiator_struct.xyz; // + // rdata_o <= fuse_ctrl_prim_axi_read_out_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= fuse_ctrl_prim_axi_read_out_initiator_struct.xyz; // + // rid_o <= fuse_ctrl_prim_axi_read_out_initiator_struct.xyz; // + // rlast_o <= fuse_ctrl_prim_axi_read_out_initiator_struct.xyz; // + // rvalid_o <= fuse_ctrl_prim_axi_read_out_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_read_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_read_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_if.sv new file mode 100644 index 000000000..1f59430f9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_read_out interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_read_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_read_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_read_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_bus.arready), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_bus.rdata), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_bus.rresp), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_bus.rid), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_bus.rlast), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_out_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_read_out_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_macros.svh new file mode 100644 index 000000000..a5d9e29df --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_read_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_read_out_configuration class. +// + `define fuse_ctrl_prim_axi_read_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_read_out_configuration_s; + + `define fuse_ctrl_prim_axi_read_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_configuration_s to_struct();\ + fuse_ctrl_prim_axi_read_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_read_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_read_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_read_out_configuration_s fuse_ctrl_prim_axi_read_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_read_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_read_out_transaction class. +// + `define fuse_ctrl_prim_axi_read_out_MONITOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } fuse_ctrl_prim_axi_read_out_monitor_s; + + `define fuse_ctrl_prim_axi_read_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_read_out_monitor_struct = \ + { \ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( fuse_ctrl_prim_axi_read_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_read_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_read_out_monitor_s fuse_ctrl_prim_axi_read_out_monitor_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = fuse_ctrl_prim_axi_read_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_read_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_out_INITIATOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } fuse_ctrl_prim_axi_read_out_initiator_s; + + `define fuse_ctrl_prim_axi_read_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_read_out_initiator_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( fuse_ctrl_prim_axi_read_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_read_out_initiator_s fuse_ctrl_prim_axi_read_out_initiator_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = fuse_ctrl_prim_axi_read_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_read_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_out_RESPONDER_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } fuse_ctrl_prim_axi_read_out_responder_s; + + `define fuse_ctrl_prim_axi_read_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_read_out_responder_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( fuse_ctrl_prim_axi_read_out_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_read_out_responder_s fuse_ctrl_prim_axi_read_out_responder_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = fuse_ctrl_prim_axi_read_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor.svh new file mode 100644 index 000000000..a47648e00 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_read_out transactions observed by the +// fuse_ctrl_prim_axi_read_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_read_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_read_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_read_out_monitor_s fuse_ctrl_prim_axi_read_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_read_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor_bfm.sv new file mode 100644 index 000000000..8aae56b3d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_read_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_read_out monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_read_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_read_out_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_read_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_out_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_out_macros.svh" + + +interface fuse_ctrl_prim_axi_read_out_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_read_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_read_out_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_out_monitor_s fuse_ctrl_prim_axi_read_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_read_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_read_out_pkg::fuse_ctrl_prim_axi_read_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_read_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_read_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_read_out_configuration_s fuse_ctrl_prim_axi_read_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_read_out_monitor_s fuse_ctrl_prim_axi_read_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_read_out_monitor_struct.prim_arready + // // fuse_ctrl_prim_axi_read_out_monitor_struct.prim_rdata + // // fuse_ctrl_prim_axi_read_out_monitor_struct.prim_rresp + // // fuse_ctrl_prim_axi_read_out_monitor_struct.prim_rid + // // fuse_ctrl_prim_axi_read_out_monitor_struct.prim_rlast + // // fuse_ctrl_prim_axi_read_out_monitor_struct.prim_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_read_out_monitor_struct.xyz = arready_i; // + // fuse_ctrl_prim_axi_read_out_monitor_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_read_out_monitor_struct.xyz = rresp_i; // + // fuse_ctrl_prim_axi_read_out_monitor_struct.xyz = rid_i; // + // fuse_ctrl_prim_axi_read_out_monitor_struct.xyz = rlast_i; // + // fuse_ctrl_prim_axi_read_out_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_random_sequence.svh new file mode 100644 index 000000000..869532e93 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_read_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_read_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_read_out_random_sequence::body()-fuse_ctrl_prim_axi_read_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_read_out_driver_bfm via the sequencer and fuse_ctrl_prim_axi_read_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_read_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_responder_sequence.svh new file mode 100644 index 000000000..f27579be3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_read_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_sequence_base.svh new file mode 100644 index 000000000..fb9238126 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_out_transaction_req_t; + fuse_ctrl_prim_axi_read_out_transaction_req_t req; + typedef fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_out_transaction_rsp_t; + fuse_ctrl_prim_axi_read_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_read_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_read_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction.svh new file mode 100644 index 000000000..4eda4dfd7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_read_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_arready ; + logic [DW-1:0] prim_rdata ; + axi_pkg::axi_burst_e prim_rresp ; + logic [IW-1:0] prim_rid ; + logic prim_rlast ; + logic prim_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_read_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_read_out_monitor and fuse_ctrl_prim_axi_read_out_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_out_monitor_s fuse_ctrl_prim_axi_read_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_out_driver and fuse_ctrl_prim_axi_read_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_out_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_out_initiator_s fuse_ctrl_prim_axi_read_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_read_out_driver and fuse_ctrl_prim_axi_read_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_out_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_out_responder_s fuse_ctrl_prim_axi_read_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_arready:0x%x prim_rdata:0x%x prim_rresp:0x%x prim_rid:0x%x prim_rlast:0x%x prim_rvalid:0x%x ",prim_arready,prim_rdata,prim_rresp,prim_rid,prim_rlast,prim_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_arready == RHS.prim_arready) + &&(this.prim_rdata == RHS.prim_rdata) + &&(this.prim_rresp == RHS.prim_rresp) + &&(this.prim_rid == RHS.prim_rid) + &&(this.prim_rlast == RHS.prim_rlast) + &&(this.prim_rvalid == RHS.prim_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_arready = RHS.prim_arready; + this.prim_rdata = RHS.prim_rdata; + this.prim_rresp = RHS.prim_rresp; + this.prim_rid = RHS.prim_rid; + this.prim_rlast = RHS.prim_rlast; + this.prim_rvalid = RHS.prim_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_read_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_arready,"prim_arready"); + $add_attribute(transaction_view_h,prim_rdata,"prim_rdata"); + $add_attribute(transaction_view_h,prim_rresp,"prim_rresp"); + $add_attribute(transaction_view_h,prim_rid,"prim_rid"); + $add_attribute(transaction_view_h,prim_rlast,"prim_rlast"); + $add_attribute(transaction_view_h,prim_rvalid,"prim_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction_coverage.svh new file mode 100644 index 000000000..b701f57c1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_read_out transaction information using +// a covergroup named fuse_ctrl_prim_axi_read_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_read_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_arready: coverpoint coverage_trans.prim_arready; + prim_rdata: coverpoint coverage_trans.prim_rdata; + prim_rresp: coverpoint coverage_trans.prim_rresp; + prim_rid: coverpoint coverage_trans.prim_rid; + prim_rlast: coverpoint coverage_trans.prim_rlast; + prim_rvalid: coverpoint coverage_trans.prim_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_read_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_read_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_read_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/yaml/fuse_ctrl_prim_axi_read_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/yaml/fuse_ctrl_prim_axi_read_out_interface.yaml new file mode 100644 index 000000000..518e6a1ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/yaml/fuse_ctrl_prim_axi_read_out_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_read_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.project new file mode 100644 index 000000000..1d2b3a2b3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_write_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.svproject new file mode 100644 index 000000000..378d11293 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/Makefile new file mode 100644 index 000000000..e0851422c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_write_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_write_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f + +fuse_ctrl_prim_axi_write_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f + +fuse_ctrl_prim_axi_write_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_write_if_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_write_if_pkg +COMP_fuse_ctrl_prim_axi_write_if_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_write_if_pkg +COMP_fuse_ctrl_prim_axi_write_if_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_write_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_write_if_pkg: $(COMP_fuse_ctrl_prim_axi_write_if_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_write_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_write_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_write_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_write_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_write_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_if_pkg += -I$(fuse_ctrl_prim_axi_write_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_if_pkg += $(fuse_ctrl_prim_axi_write_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_write_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/compile.do new file mode 100644 index 000000000..e542958e1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_write_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if.compile new file mode 100644 index 000000000..5809b76c4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_write_if_hvl.compile + - fuse_ctrl_prim_axi_write_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_bfm.vinfo new file mode 100644 index 000000000..6c5f5cfbb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_write_if_if.sv +src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv +src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_common.compile new file mode 100644 index 000000000..dde3d0d7f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f new file mode 100644 index 000000000..11983b34a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f new file mode 100644 index 000000000..16c93aac2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f new file mode 100644 index 000000000..8e0817f98 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hdl.compile new file mode 100644 index 000000000..ff56c3bc8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_write_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_write_if_if.sv + - src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hvl.compile new file mode 100644 index 000000000..a21321c58 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_write_if_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.sv new file mode 100644 index 000000000..886790867 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_write_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_write_if_macros.svh" + + export fuse_ctrl_prim_axi_write_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_write_if_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_write_if_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_write_if_configuration.svh" + `include "src/fuse_ctrl_prim_axi_write_if_driver.svh" + `include "src/fuse_ctrl_prim_axi_write_if_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_write_if_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_write_if_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_write_if_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_write_if_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_write_if2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_write_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.vinfo new file mode 100644 index 000000000..51f12e079 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.sv new file mode 100644 index 000000000..7998fdf63 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_write_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_write_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo new file mode 100644 index 000000000..a0dd33de5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_sve.F new file mode 100644 index 000000000..c2cbc2a56 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if2reg_adapter.svh new file mode 100644 index 000000000..3639e693b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_write_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_write_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_write_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_agent.svh new file mode 100644 index 000000000..df581f3f1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_write_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_configuration.svh new file mode 100644 index 000000000..676cfcb02 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_write_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_write_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_write_if_configuration_s fuse_ctrl_prim_axi_write_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_write_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_if_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_write_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_write_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_write_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_write_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver.svh new file mode 100644 index 000000000..55d444021 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_write_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. +`fuse_ctrl_prim_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_if_initiator_s fuse_ctrl_prim_axi_write_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. +`fuse_ctrl_prim_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_if_responder_s fuse_ctrl_prim_axi_write_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_write_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_write_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_write_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_write_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv new file mode 100644 index 000000000..b418ebbf8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv @@ -0,0 +1,429 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_write_if signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_write_if driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_write_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_write_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_write_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_if_macros.svh" + +interface fuse_ctrl_prim_axi_write_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_write_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] awaddr_i; + reg [AW-1:0] awaddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] awburst_o = 'bz; + tri [2:0] awsize_i; + reg [2:0] awsize_o = 'bz; + tri [7:0] awlen_i; + reg [7:0] awlen_o = 'bz; + tri [UW-1:0] awuser_i; + reg [UW-1:0] awuser_o = 'bz; + tri [UW-1:0] awid_i; + reg [UW-1:0] awid_o = 'bz; + tri awlock_i; + reg awlock_o = 'bz; + tri awvalid_i; + reg awvalid_o = 'bz; + tri [DW-1:0] wdata_i; + reg [DW-1:0] wdata_o = 'bz; + tri [DW/8-1:0] wstrb_i; + reg [DW/8-1:0] wstrb_o = 'bz; + tri wvalid_i; + reg wvalid_o = 'bz; + tri wlast_i; + reg wlast_o = 'bz; + tri bready_i; + reg bready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.awaddr = (initiator_responder == INITIATOR) ? awaddr_o : 'bz; + assign awaddr_i = bus.awaddr; + assign bus.awburst = (initiator_responder == INITIATOR) ? awburst_o : 'bz; + assign awburst_i = bus.awburst; + assign bus.awsize = (initiator_responder == INITIATOR) ? awsize_o : 'bz; + assign awsize_i = bus.awsize; + assign bus.awlen = (initiator_responder == INITIATOR) ? awlen_o : 'bz; + assign awlen_i = bus.awlen; + assign bus.awuser = (initiator_responder == INITIATOR) ? awuser_o : 'bz; + assign awuser_i = bus.awuser; + assign bus.awid = (initiator_responder == INITIATOR) ? awid_o : 'bz; + assign awid_i = bus.awid; + assign bus.awlock = (initiator_responder == INITIATOR) ? awlock_o : 'bz; + assign awlock_i = bus.awlock; + assign bus.awvalid = (initiator_responder == INITIATOR) ? awvalid_o : 'bz; + assign awvalid_i = bus.awvalid; + assign bus.wdata = (initiator_responder == INITIATOR) ? wdata_o : 'bz; + assign wdata_i = bus.wdata; + assign bus.wstrb = (initiator_responder == INITIATOR) ? wstrb_o : 'bz; + assign wstrb_i = bus.wstrb; + assign bus.wvalid = (initiator_responder == INITIATOR) ? wvalid_o : 'bz; + assign wvalid_i = bus.wvalid; + assign bus.wlast = (initiator_responder == INITIATOR) ? wlast_o : 'bz; + assign wlast_i = bus.wlast; + assign bus.bready = (initiator_responder == INITIATOR) ? bready_o : 'bz; + assign bready_i = bus.bready; + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_write_if_pkg::fuse_ctrl_prim_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_write_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_write_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_write_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. + `fuse_ctrl_prim_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. + `fuse_ctrl_prim_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + awaddr_o <= 'bz; + awburst_o <= 'bz; + awsize_o <= 'bz; + awlen_o <= 'bz; + awuser_o <= 'bz; + awid_o <= 'bz; + awlock_o <= 'bz; + awvalid_o <= 'bz; + wdata_o <= 'bz; + wstrb_o <= 'bz; + wvalid_o <= 'bz; + wlast_o <= 'bz; + bready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_write_if_configuration_s fuse_ctrl_prim_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_write_if_initiator_s fuse_ctrl_prim_axi_write_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_write_if_responder_s fuse_ctrl_prim_axi_write_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_write_if_initiator_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Members within the fuse_ctrl_prim_axi_write_if_responder_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + initiator_struct = fuse_ctrl_prim_axi_write_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // awaddr_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [AW-1:0] + // awburst_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // awsize_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [2:0] + // awlen_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [7:0] + // awuser_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [UW-1:0] + // awid_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [UW-1:0] + // awlock_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // + // awvalid_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // + // wdata_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [DW-1:0] + // wstrb_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [DW/8-1:0] + // wvalid_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // + // wlast_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // + // bready_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_write_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_write_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_write_if_initiator_s fuse_ctrl_prim_axi_write_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_write_if_responder_s fuse_ctrl_prim_axi_write_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_write_if_initiator_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Variables within the fuse_ctrl_prim_axi_write_if_responder_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awlock_i; // + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awvalid_i; // + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = wvalid_i; // + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = wlast_i; // + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = bready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_write_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_write_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_if.sv new file mode 100644 index 000000000..afcdb92da --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_if.sv @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_write_if interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_write_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_write_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_write_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awaddr), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awburst), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awsize), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awlen), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awuser), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awlock), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.wdata), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.wstrb), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.wvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.wlast), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.bready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_if_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_write_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] awaddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst, + inout tri [2:0] awsize, + inout tri [7:0] awlen, + inout tri [UW-1:0] awuser, + inout tri [UW-1:0] awid, + inout tri awlock, + inout tri awvalid, + inout tri [DW-1:0] wdata, + inout tri [DW/8-1:0] wstrb, + inout tri wvalid, + inout tri wlast, + inout tri bready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output awaddr, + output awburst, + output awsize, + output awlen, + output awuser, + output awid, + output awlock, + output awvalid, + output wdata, + output wstrb, + output wvalid, + output wlast, + output bready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_macros.svh new file mode 100644 index 000000000..f1a207086 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_macros.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_write_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_write_if_configuration class. +// + `define fuse_ctrl_prim_axi_write_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_write_if_configuration_s; + + `define fuse_ctrl_prim_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_if_configuration_s to_struct();\ + fuse_ctrl_prim_axi_write_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_write_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_write_if_configuration_s fuse_ctrl_prim_axi_write_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_write_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_write_if_transaction class. +// + `define fuse_ctrl_prim_axi_write_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_if_monitor_s; + + `define fuse_ctrl_prim_axi_write_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_if_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_write_if_monitor_struct = \ + { \ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_write_if_monitor_s fuse_ctrl_prim_axi_write_if_monitor_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_if_initiator_s; + + `define fuse_ctrl_prim_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_if_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_write_if_initiator_struct = \ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_write_if_initiator_s fuse_ctrl_prim_axi_write_if_initiator_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_if_responder_s; + + `define fuse_ctrl_prim_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_if_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_write_if_responder_struct = \ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_if_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_write_if_responder_s fuse_ctrl_prim_axi_write_if_responder_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor.svh new file mode 100644 index 000000000..33bf7f57e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_write_if transactions observed by the +// fuse_ctrl_prim_axi_write_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_write_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_write_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_write_if_monitor_s fuse_ctrl_prim_axi_write_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_write_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv new file mode 100644 index 000000000..909871de8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv @@ -0,0 +1,248 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_write_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_write_if monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_write_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_write_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_write_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_if_macros.svh" + + +interface fuse_ctrl_prim_axi_write_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_write_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_write_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_if_monitor_s fuse_ctrl_prim_axi_write_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_write_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] awaddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + tri [2:0] awsize_i; + tri [7:0] awlen_i; + tri [UW-1:0] awuser_i; + tri [UW-1:0] awid_i; + tri awlock_i; + tri awvalid_i; + tri [DW-1:0] wdata_i; + tri [DW/8-1:0] wstrb_i; + tri wvalid_i; + tri wlast_i; + tri bready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awaddr_i = bus.awaddr; + assign awburst_i = bus.awburst; + assign awsize_i = bus.awsize; + assign awlen_i = bus.awlen; + assign awuser_i = bus.awuser; + assign awid_i = bus.awid; + assign awlock_i = bus.awlock; + assign awvalid_i = bus.awvalid; + assign wdata_i = bus.wdata; + assign wstrb_i = bus.wstrb; + assign wvalid_i = bus.wvalid; + assign wlast_i = bus.wlast; + assign bready_i = bus.bready; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_write_if_pkg::fuse_ctrl_prim_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_write_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_write_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_write_if_configuration_s fuse_ctrl_prim_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_write_if_monitor_s fuse_ctrl_prim_axi_write_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awaddr + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awvalid + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awburst + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awsize + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awlen + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awuser + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awid + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awlock + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_wdata + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_wstrb + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_wvalid + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_wlast + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_bready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awlock_i; // + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awvalid_i; // + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = wvalid_i; // + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = wlast_i; // + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = bready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_random_sequence.svh new file mode 100644 index 000000000..8c64fb3c6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_write_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_write_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_write_if_random_sequence::body()-fuse_ctrl_prim_axi_write_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_write_if_driver_bfm via the sequencer and fuse_ctrl_prim_axi_write_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_write_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_responder_sequence.svh new file mode 100644 index 000000000..088b5cae1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_write_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_sequence_base.svh new file mode 100644 index 000000000..3dabe4d22 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_if_transaction_req_t; + fuse_ctrl_prim_axi_write_if_transaction_req_t req; + typedef fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_if_transaction_rsp_t; + fuse_ctrl_prim_axi_write_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_write_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_write_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction.svh new file mode 100644 index 000000000..168cf90d5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction.svh @@ -0,0 +1,256 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_write_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] prim_awaddr ; + logic prim_awvalid ; + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + logic [2:0] prim_awsize ; + logic [7:0] prim_awlen ; + logic [UW-1:0] prim_awuser ; + logic [IW-1:0] prim_awid ; + logic prim_awlock ; + logic [DW-1:0] prim_wdata ; + logic [DW/8 - 1:0] prim_wstrb ; + logic prim_wvalid ; + logic prim_wlast ; + logic prim_bready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_write_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_write_if_monitor and fuse_ctrl_prim_axi_write_if_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_if_monitor_s fuse_ctrl_prim_axi_write_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_if_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_if_initiator_s fuse_ctrl_prim_axi_write_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_if_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_if_responder_s fuse_ctrl_prim_axi_write_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_if_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awaddr:0x%x prim_awvalid:0x%x prim_awburst:0x%x prim_awsize:0x%x prim_awlen:0x%x prim_awuser:0x%x prim_awid:0x%x prim_awlock:0x%x prim_wdata:0x%x prim_wstrb:0x%x prim_wvalid:0x%x prim_wlast:0x%x prim_bready:0x%x ",prim_awaddr,prim_awvalid,prim_awburst,prim_awsize,prim_awlen,prim_awuser,prim_awid,prim_awlock,prim_wdata,prim_wstrb,prim_wvalid,prim_wlast,prim_bready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_wdata == RHS.prim_wdata) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awaddr = RHS.prim_awaddr; + this.prim_awvalid = RHS.prim_awvalid; + this.prim_awburst = RHS.prim_awburst; + this.prim_awsize = RHS.prim_awsize; + this.prim_awlen = RHS.prim_awlen; + this.prim_awuser = RHS.prim_awuser; + this.prim_awid = RHS.prim_awid; + this.prim_awlock = RHS.prim_awlock; + this.prim_wdata = RHS.prim_wdata; + this.prim_wstrb = RHS.prim_wstrb; + this.prim_wvalid = RHS.prim_wvalid; + this.prim_wlast = RHS.prim_wlast; + this.prim_bready = RHS.prim_bready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_write_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awaddr,"prim_awaddr"); + $add_attribute(transaction_view_h,prim_awvalid,"prim_awvalid"); + $add_attribute(transaction_view_h,prim_awburst,"prim_awburst"); + $add_attribute(transaction_view_h,prim_awsize,"prim_awsize"); + $add_attribute(transaction_view_h,prim_awlen,"prim_awlen"); + $add_attribute(transaction_view_h,prim_awuser,"prim_awuser"); + $add_attribute(transaction_view_h,prim_awid,"prim_awid"); + $add_attribute(transaction_view_h,prim_awlock,"prim_awlock"); + $add_attribute(transaction_view_h,prim_wdata,"prim_wdata"); + $add_attribute(transaction_view_h,prim_wstrb,"prim_wstrb"); + $add_attribute(transaction_view_h,prim_wvalid,"prim_wvalid"); + $add_attribute(transaction_view_h,prim_wlast,"prim_wlast"); + $add_attribute(transaction_view_h,prim_bready,"prim_bready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction_coverage.svh new file mode 100644 index 000000000..a6fbb3558 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction_coverage.svh @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_write_if transaction information using +// a covergroup named fuse_ctrl_prim_axi_write_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_write_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awaddr: coverpoint coverage_trans.prim_awaddr; + prim_awvalid: coverpoint coverage_trans.prim_awvalid; + prim_awburst: coverpoint coverage_trans.prim_awburst; + prim_awsize: coverpoint coverage_trans.prim_awsize; + prim_awlen: coverpoint coverage_trans.prim_awlen; + prim_awuser: coverpoint coverage_trans.prim_awuser; + prim_awid: coverpoint coverage_trans.prim_awid; + prim_awlock: coverpoint coverage_trans.prim_awlock; + prim_wdata: coverpoint coverage_trans.prim_wdata; + prim_wstrb: coverpoint coverage_trans.prim_wstrb; + prim_wvalid: coverpoint coverage_trans.prim_wvalid; + prim_wlast: coverpoint coverage_trans.prim_wlast; + prim_bready: coverpoint coverage_trans.prim_bready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_write_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_write_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_write_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/yaml/fuse_ctrl_prim_axi_write_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/yaml/fuse_ctrl_prim_axi_write_if_interface.yaml new file mode 100644 index 000000000..4a69d4c96 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/yaml/fuse_ctrl_prim_axi_write_if_interface.yaml @@ -0,0 +1,161 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_write_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: awaddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: awburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: awsize + reset_value: '''bz' + width: '3' + - dir: output + name: awlen + reset_value: '''bz' + width: '8' + - dir: output + name: awuser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awid + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awlock + reset_value: '''bz' + width: '1' + - dir: output + name: awvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wdata + reset_value: '''bz' + width: '[''DW'']' + - dir: output + name: wstrb + reset_value: '''bz' + width: '[''DW/8'']' + - dir: output + name: wvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wlast + reset_value: '''bz' + width: '1' + - dir: output + name: bready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: prim_awaddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awuser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wstrb + type: logic [DW/8 - 1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_bready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.project new file mode 100644 index 000000000..0770491f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_write_in_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.svproject new file mode 100644 index 000000000..b46351d9f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/Makefile new file mode 100644 index 000000000..856db9d2f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_write_in_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_write_in_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hvl.f + +fuse_ctrl_prim_axi_write_in_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hdl.f + +fuse_ctrl_prim_axi_write_in_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_write_in_if_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_write_in_if_pkg +COMP_fuse_ctrl_prim_axi_write_in_if_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_write_in_if_pkg +COMP_fuse_ctrl_prim_axi_write_in_if_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_write_in_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_write_in_if_pkg: $(COMP_fuse_ctrl_prim_axi_write_in_if_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_write_in_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_write_in_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_write_in_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_in_if_pkg += -I$(fuse_ctrl_prim_axi_write_in_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_in_if_pkg += $(fuse_ctrl_prim_axi_write_in_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_in_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_write_in_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_in_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_in_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/compile.do new file mode 100644 index 000000000..96057eeae --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_write_in_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if.compile new file mode 100644 index 000000000..3b0556089 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_write_in_if_hvl.compile + - fuse_ctrl_prim_axi_write_in_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_bfm.vinfo new file mode 100644 index 000000000..ec81da644 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_write_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_write_in_if_if.sv +src/fuse_ctrl_prim_axi_write_in_if_driver_bfm.sv +src/fuse_ctrl_prim_axi_write_in_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_common.compile new file mode 100644 index 000000000..9d4c93462 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hdl.f new file mode 100644 index 000000000..fe4f02fb8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hvl.f new file mode 100644 index 000000000..eb0bfa3dd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_xrtl.f new file mode 100644 index 000000000..9ce77bf09 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hdl.compile new file mode 100644 index 000000000..8c2ca2641 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_write_in_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_write_in_if_if.sv + - src/fuse_ctrl_prim_axi_write_in_if_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_write_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hvl.compile new file mode 100644 index 000000000..208f90cc3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_write_in_if_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_write_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.sv new file mode 100644 index 000000000..dfd8133f9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_in_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_write_in_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_write_in_if_macros.svh" + + export fuse_ctrl_prim_axi_write_in_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_write_in_if_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_write_in_if_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_if_configuration.svh" + `include "src/fuse_ctrl_prim_axi_write_in_if_driver.svh" + `include "src/fuse_ctrl_prim_axi_write_in_if_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_if_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_write_in_if_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_write_in_if_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_if_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_write_in_if2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.vinfo new file mode 100644 index 000000000..1a4ed8ccb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_write_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_write_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv new file mode 100644 index 000000000..c6851188c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_in_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_write_in_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_write_in_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.vinfo new file mode 100644 index 000000000..6cdfa7339 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_sve.F new file mode 100644 index 000000000..a43c2ae34 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if2reg_adapter.svh new file mode 100644 index 000000000..db59eab23 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_write_in_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_write_in_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_write_in_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_agent.svh new file mode 100644 index 000000000..6ce4e8784 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_write_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_write_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_write_in_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_configuration.svh new file mode 100644 index 000000000..d201a9a66 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_write_in_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_write_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_write_in_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_write_in_if_configuration_s fuse_ctrl_prim_axi_write_in_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_write_in_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_if_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_write_in_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_write_in_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_write_in_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_write_in_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_in_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_write_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver.svh new file mode 100644 index 000000000..4e0b0c977 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_write_in_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_write_in_if_driver and fuse_ctrl_prim_axi_write_in_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_write_in_if_driver_bfm. +`fuse_ctrl_prim_axi_write_in_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_in_if_initiator_s fuse_ctrl_prim_axi_write_in_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_write_in_if_driver and fuse_ctrl_prim_axi_write_in_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_write_in_if_driver_bfm. +`fuse_ctrl_prim_axi_write_in_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_in_if_responder_s fuse_ctrl_prim_axi_write_in_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_write_in_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_write_in_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_write_in_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_write_in_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver_bfm.sv new file mode 100644 index 000000000..96ba0eea1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver_bfm.sv @@ -0,0 +1,429 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_write_in_if signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_write_in_if driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_write_in_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_write_in_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_write_in_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_in_if_macros.svh" + +interface fuse_ctrl_prim_axi_write_in_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_write_in_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_in_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] awaddr_i; + reg [AW-1:0] awaddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] awburst_o = 'bz; + tri [2:0] awsize_i; + reg [2:0] awsize_o = 'bz; + tri [7:0] awlen_i; + reg [7:0] awlen_o = 'bz; + tri [UW-1:0] awuser_i; + reg [UW-1:0] awuser_o = 'bz; + tri [UW-1:0] awid_i; + reg [UW-1:0] awid_o = 'bz; + tri awlock_i; + reg awlock_o = 'bz; + tri awvalid_i; + reg awvalid_o = 'bz; + tri [DW-1:0] wdata_i; + reg [DW-1:0] wdata_o = 'bz; + tri [DW/8-1:0] wstrb_i; + reg [DW/8-1:0] wstrb_o = 'bz; + tri wvalid_i; + reg wvalid_o = 'bz; + tri wlast_i; + reg wlast_o = 'bz; + tri bready_i; + reg bready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.awaddr = (initiator_responder == INITIATOR) ? awaddr_o : 'bz; + assign awaddr_i = bus.awaddr; + assign bus.awburst = (initiator_responder == INITIATOR) ? awburst_o : 'bz; + assign awburst_i = bus.awburst; + assign bus.awsize = (initiator_responder == INITIATOR) ? awsize_o : 'bz; + assign awsize_i = bus.awsize; + assign bus.awlen = (initiator_responder == INITIATOR) ? awlen_o : 'bz; + assign awlen_i = bus.awlen; + assign bus.awuser = (initiator_responder == INITIATOR) ? awuser_o : 'bz; + assign awuser_i = bus.awuser; + assign bus.awid = (initiator_responder == INITIATOR) ? awid_o : 'bz; + assign awid_i = bus.awid; + assign bus.awlock = (initiator_responder == INITIATOR) ? awlock_o : 'bz; + assign awlock_i = bus.awlock; + assign bus.awvalid = (initiator_responder == INITIATOR) ? awvalid_o : 'bz; + assign awvalid_i = bus.awvalid; + assign bus.wdata = (initiator_responder == INITIATOR) ? wdata_o : 'bz; + assign wdata_i = bus.wdata; + assign bus.wstrb = (initiator_responder == INITIATOR) ? wstrb_o : 'bz; + assign wstrb_i = bus.wstrb; + assign bus.wvalid = (initiator_responder == INITIATOR) ? wvalid_o : 'bz; + assign wvalid_i = bus.wvalid; + assign bus.wlast = (initiator_responder == INITIATOR) ? wlast_o : 'bz; + assign wlast_i = bus.wlast; + assign bus.bready = (initiator_responder == INITIATOR) ? bready_o : 'bz; + assign bready_i = bus.bready; + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_write_in_if_pkg::fuse_ctrl_prim_axi_write_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_write_in_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_write_in_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_in_if_driver and fuse_ctrl_prim_axi_write_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_in_if_driver_bfm. + `fuse_ctrl_prim_axi_write_in_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_in_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_write_in_if_driver and fuse_ctrl_prim_axi_write_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_in_if_driver_bfm. + `fuse_ctrl_prim_axi_write_in_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_in_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + awaddr_o <= 'bz; + awburst_o <= 'bz; + awsize_o <= 'bz; + awlen_o <= 'bz; + awuser_o <= 'bz; + awid_o <= 'bz; + awlock_o <= 'bz; + awvalid_o <= 'bz; + wdata_o <= 'bz; + wstrb_o <= 'bz; + wvalid_o <= 'bz; + wlast_o <= 'bz; + bready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_write_in_if_configuration_s fuse_ctrl_prim_axi_write_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_write_in_if_initiator_s fuse_ctrl_prim_axi_write_in_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_write_in_if_responder_s fuse_ctrl_prim_axi_write_in_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_write_in_if_initiator_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Members within the fuse_ctrl_prim_axi_write_in_if_responder_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + initiator_struct = fuse_ctrl_prim_axi_write_in_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // awaddr_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [AW-1:0] + // awburst_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // awsize_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [2:0] + // awlen_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [7:0] + // awuser_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [UW-1:0] + // awid_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [UW-1:0] + // awlock_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // + // awvalid_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // + // wdata_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [DW-1:0] + // wstrb_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [DW/8-1:0] + // wvalid_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // + // wlast_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // + // bready_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_write_in_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_write_in_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_write_in_if_initiator_s fuse_ctrl_prim_axi_write_in_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_write_in_if_responder_s fuse_ctrl_prim_axi_write_in_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_write_in_if_initiator_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Variables within the fuse_ctrl_prim_axi_write_in_if_responder_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awlock_i; // + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awvalid_i; // + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = wvalid_i; // + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = wlast_i; // + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = bready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_write_in_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_write_in_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_if.sv new file mode 100644 index 000000000..80a131b63 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_if.sv @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_write_in_if interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_write_in_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_write_in_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_write_in_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awaddr), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awburst), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awsize), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awlen), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awuser), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awlock), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.wdata), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.wstrb), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.wvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.wlast), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.bready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_in_if_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_write_in_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] awaddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst, + inout tri [2:0] awsize, + inout tri [7:0] awlen, + inout tri [UW-1:0] awuser, + inout tri [UW-1:0] awid, + inout tri awlock, + inout tri awvalid, + inout tri [DW-1:0] wdata, + inout tri [DW/8-1:0] wstrb, + inout tri wvalid, + inout tri wlast, + inout tri bready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output awaddr, + output awburst, + output awsize, + output awlen, + output awuser, + output awid, + output awlock, + output awvalid, + output wdata, + output wstrb, + output wvalid, + output wlast, + output bready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_macros.svh new file mode 100644 index 000000000..21b77c4eb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_macros.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_write_in_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_write_in_if_configuration class. +// + `define fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_write_in_if_configuration_s; + + `define fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_if_configuration_s to_struct();\ + fuse_ctrl_prim_axi_write_in_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_write_in_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_write_in_if_configuration_s fuse_ctrl_prim_axi_write_in_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_write_in_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_write_in_if_transaction class. +// + `define fuse_ctrl_prim_axi_write_in_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_in_if_monitor_s; + + `define fuse_ctrl_prim_axi_write_in_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_if_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_write_in_if_monitor_struct = \ + { \ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_in_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_write_in_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_write_in_if_monitor_s fuse_ctrl_prim_axi_write_in_if_monitor_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_in_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_write_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_in_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_in_if_initiator_s; + + `define fuse_ctrl_prim_axi_write_in_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_if_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_write_in_if_initiator_struct = \ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_in_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_in_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_write_in_if_initiator_s fuse_ctrl_prim_axi_write_in_if_initiator_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_in_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_write_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_in_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_in_if_responder_s; + + `define fuse_ctrl_prim_axi_write_in_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_if_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_write_in_if_responder_struct = \ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_in_if_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_in_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_write_in_if_responder_s fuse_ctrl_prim_axi_write_in_if_responder_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_in_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor.svh new file mode 100644 index 000000000..d70eab613 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_write_in_if transactions observed by the +// fuse_ctrl_prim_axi_write_in_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_write_in_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_write_in_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_write_in_if_monitor_s fuse_ctrl_prim_axi_write_in_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_write_in_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor_bfm.sv new file mode 100644 index 000000000..d69cf9edc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor_bfm.sv @@ -0,0 +1,248 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_write_in_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_write_in_if monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_write_in_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_write_in_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_write_in_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_in_if_macros.svh" + + +interface fuse_ctrl_prim_axi_write_in_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_write_in_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_in_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_write_in_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_in_if_monitor_s fuse_ctrl_prim_axi_write_in_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] awaddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + tri [2:0] awsize_i; + tri [7:0] awlen_i; + tri [UW-1:0] awuser_i; + tri [UW-1:0] awid_i; + tri awlock_i; + tri awvalid_i; + tri [DW-1:0] wdata_i; + tri [DW/8-1:0] wstrb_i; + tri wvalid_i; + tri wlast_i; + tri bready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awaddr_i = bus.awaddr; + assign awburst_i = bus.awburst; + assign awsize_i = bus.awsize; + assign awlen_i = bus.awlen; + assign awuser_i = bus.awuser; + assign awid_i = bus.awid; + assign awlock_i = bus.awlock; + assign awvalid_i = bus.awvalid; + assign wdata_i = bus.wdata; + assign wstrb_i = bus.wstrb; + assign wvalid_i = bus.wvalid; + assign wlast_i = bus.wlast; + assign bready_i = bus.bready; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_write_in_if_pkg::fuse_ctrl_prim_axi_write_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_write_in_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_write_in_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_write_in_if_configuration_s fuse_ctrl_prim_axi_write_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_write_in_if_monitor_s fuse_ctrl_prim_axi_write_in_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awaddr + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awvalid + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awburst + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awsize + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awlen + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awuser + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awid + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awlock + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_wdata + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_wstrb + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_wvalid + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_wlast + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_bready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awlock_i; // + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awvalid_i; // + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = wvalid_i; // + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = wlast_i; // + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = bready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_random_sequence.svh new file mode 100644 index 000000000..2855daa79 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_write_in_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_write_in_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_write_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_write_in_if_random_sequence::body()-fuse_ctrl_prim_axi_write_in_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_write_in_if_driver_bfm via the sequencer and fuse_ctrl_prim_axi_write_in_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_write_in_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_responder_sequence.svh new file mode 100644 index 000000000..0b77b4c78 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_write_in_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_write_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_sequence_base.svh new file mode 100644 index 000000000..33d0fe368 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_in_if_transaction_req_t; + fuse_ctrl_prim_axi_write_in_if_transaction_req_t req; + typedef fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_in_if_transaction_rsp_t; + fuse_ctrl_prim_axi_write_in_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_write_in_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_write_in_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction.svh new file mode 100644 index 000000000..587456c34 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction.svh @@ -0,0 +1,256 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_write_in_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] prim_awaddr ; + logic prim_awvalid ; + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + logic [2:0] prim_awsize ; + logic [7:0] prim_awlen ; + logic [UW-1:0] prim_awuser ; + logic [IW-1:0] prim_awid ; + logic prim_awlock ; + logic [DW-1:0] prim_wdata ; + logic [DW/8 - 1:0] prim_wstrb ; + logic prim_wvalid ; + logic prim_wlast ; + logic prim_bready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_write_in_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_write_in_if_monitor and fuse_ctrl_prim_axi_write_in_if_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_in_if_monitor_s fuse_ctrl_prim_axi_write_in_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_in_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_if_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_in_if_driver and fuse_ctrl_prim_axi_write_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_in_if_initiator_s fuse_ctrl_prim_axi_write_in_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_in_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_if_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_write_in_if_driver and fuse_ctrl_prim_axi_write_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_in_if_responder_s fuse_ctrl_prim_axi_write_in_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_in_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_if_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awaddr:0x%x prim_awvalid:0x%x prim_awburst:0x%x prim_awsize:0x%x prim_awlen:0x%x prim_awuser:0x%x prim_awid:0x%x prim_awlock:0x%x prim_wdata:0x%x prim_wstrb:0x%x prim_wvalid:0x%x prim_wlast:0x%x prim_bready:0x%x ",prim_awaddr,prim_awvalid,prim_awburst,prim_awsize,prim_awlen,prim_awuser,prim_awid,prim_awlock,prim_wdata,prim_wstrb,prim_wvalid,prim_wlast,prim_bready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_wdata == RHS.prim_wdata) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awaddr = RHS.prim_awaddr; + this.prim_awvalid = RHS.prim_awvalid; + this.prim_awburst = RHS.prim_awburst; + this.prim_awsize = RHS.prim_awsize; + this.prim_awlen = RHS.prim_awlen; + this.prim_awuser = RHS.prim_awuser; + this.prim_awid = RHS.prim_awid; + this.prim_awlock = RHS.prim_awlock; + this.prim_wdata = RHS.prim_wdata; + this.prim_wstrb = RHS.prim_wstrb; + this.prim_wvalid = RHS.prim_wvalid; + this.prim_wlast = RHS.prim_wlast; + this.prim_bready = RHS.prim_bready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_write_in_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awaddr,"prim_awaddr"); + $add_attribute(transaction_view_h,prim_awvalid,"prim_awvalid"); + $add_attribute(transaction_view_h,prim_awburst,"prim_awburst"); + $add_attribute(transaction_view_h,prim_awsize,"prim_awsize"); + $add_attribute(transaction_view_h,prim_awlen,"prim_awlen"); + $add_attribute(transaction_view_h,prim_awuser,"prim_awuser"); + $add_attribute(transaction_view_h,prim_awid,"prim_awid"); + $add_attribute(transaction_view_h,prim_awlock,"prim_awlock"); + $add_attribute(transaction_view_h,prim_wdata,"prim_wdata"); + $add_attribute(transaction_view_h,prim_wstrb,"prim_wstrb"); + $add_attribute(transaction_view_h,prim_wvalid,"prim_wvalid"); + $add_attribute(transaction_view_h,prim_wlast,"prim_wlast"); + $add_attribute(transaction_view_h,prim_bready,"prim_bready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction_coverage.svh new file mode 100644 index 000000000..0a8862ad8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction_coverage.svh @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_write_in_if transaction information using +// a covergroup named fuse_ctrl_prim_axi_write_in_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_write_in_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awaddr: coverpoint coverage_trans.prim_awaddr; + prim_awvalid: coverpoint coverage_trans.prim_awvalid; + prim_awburst: coverpoint coverage_trans.prim_awburst; + prim_awsize: coverpoint coverage_trans.prim_awsize; + prim_awlen: coverpoint coverage_trans.prim_awlen; + prim_awuser: coverpoint coverage_trans.prim_awuser; + prim_awid: coverpoint coverage_trans.prim_awid; + prim_awlock: coverpoint coverage_trans.prim_awlock; + prim_wdata: coverpoint coverage_trans.prim_wdata; + prim_wstrb: coverpoint coverage_trans.prim_wstrb; + prim_wvalid: coverpoint coverage_trans.prim_wvalid; + prim_wlast: coverpoint coverage_trans.prim_wlast; + prim_bready: coverpoint coverage_trans.prim_bready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_write_in_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_write_in_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_in_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_write_in_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/yaml/fuse_ctrl_prim_axi_write_in_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/yaml/fuse_ctrl_prim_axi_write_in_if_interface.yaml new file mode 100644 index 000000000..94606fc08 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/yaml/fuse_ctrl_prim_axi_write_in_if_interface.yaml @@ -0,0 +1,161 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_write_in_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: awaddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: awburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: awsize + reset_value: '''bz' + width: '3' + - dir: output + name: awlen + reset_value: '''bz' + width: '8' + - dir: output + name: awuser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awid + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awlock + reset_value: '''bz' + width: '1' + - dir: output + name: awvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wdata + reset_value: '''bz' + width: '[''DW'']' + - dir: output + name: wstrb + reset_value: '''bz' + width: '[''DW/8'']' + - dir: output + name: wvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wlast + reset_value: '''bz' + width: '1' + - dir: output + name: bready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: prim_awaddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awuser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wstrb + type: logic [DW/8 - 1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_bready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.project new file mode 100644 index 000000000..8c615b525 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_write_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.svproject new file mode 100644 index 000000000..14eb90e60 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/Makefile new file mode 100644 index 000000000..58b6255e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_write_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_write_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hvl.f + +fuse_ctrl_prim_axi_write_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hdl.f + +fuse_ctrl_prim_axi_write_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_write_in_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_write_in_pkg +COMP_fuse_ctrl_prim_axi_write_in_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_write_in_pkg +COMP_fuse_ctrl_prim_axi_write_in_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_write_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_write_in_pkg: $(COMP_fuse_ctrl_prim_axi_write_in_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_write_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_write_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_write_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_write_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_write_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_in_pkg += -I$(fuse_ctrl_prim_axi_write_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_in_pkg += $(fuse_ctrl_prim_axi_write_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_write_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/compile.do new file mode 100644 index 000000000..0b7eaf691 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_write_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in.compile new file mode 100644 index 000000000..cc55184d7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_write_in_hvl.compile + - fuse_ctrl_prim_axi_write_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_bfm.vinfo new file mode 100644 index 000000000..f0da591fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_write_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_write_in_if.sv +src/fuse_ctrl_prim_axi_write_in_driver_bfm.sv +src/fuse_ctrl_prim_axi_write_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_common.compile new file mode 100644 index 000000000..9fd1f6c57 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_write_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hdl.f new file mode 100644 index 000000000..05ff74470 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hvl.f new file mode 100644 index 000000000..9e594a7e8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_xrtl.f new file mode 100644 index 000000000..aeb98365e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hdl.compile new file mode 100644 index 000000000..954117b62 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_write_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_write_in_if.sv + - src/fuse_ctrl_prim_axi_write_in_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_write_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hvl.compile new file mode 100644 index 000000000..7be9859cb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_write_in_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_write_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.sv new file mode 100644 index 000000000..bebb7a348 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_write_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_write_in_macros.svh" + + export fuse_ctrl_prim_axi_write_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_write_in_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_write_in_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_configuration.svh" + `include "src/fuse_ctrl_prim_axi_write_in_driver.svh" + `include "src/fuse_ctrl_prim_axi_write_in_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_write_in_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_write_in_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_write_in2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.vinfo new file mode 100644 index 000000000..a03a77b1d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_write_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_write_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.sv new file mode 100644 index 000000000..b974d8d0d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_write_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_write_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.vinfo new file mode 100644 index 000000000..6813b251a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_write_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_sve.F new file mode 100644 index 000000000..276278034 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in2reg_adapter.svh new file mode 100644 index 000000000..5711099ae --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_write_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_write_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_write_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_agent.svh new file mode 100644 index 000000000..552affab0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_write_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_write_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_write_in_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_configuration.svh new file mode 100644 index 000000000..2a5858b9b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_write_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_write_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_write_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_write_in_configuration_s fuse_ctrl_prim_axi_write_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_write_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_write_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_write_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_write_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_write_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_write_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver.svh new file mode 100644 index 000000000..ad7975fd9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_write_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_write_in_driver and fuse_ctrl_prim_axi_write_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_write_in_driver_bfm. +`fuse_ctrl_prim_axi_write_in_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_in_initiator_s fuse_ctrl_prim_axi_write_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_write_in_driver and fuse_ctrl_prim_axi_write_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_write_in_driver_bfm. +`fuse_ctrl_prim_axi_write_in_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_in_responder_s fuse_ctrl_prim_axi_write_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_write_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_write_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_write_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_write_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver_bfm.sv new file mode 100644 index 000000000..74c7fb4ce --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver_bfm.sv @@ -0,0 +1,429 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_write_in signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_write_in driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_write_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_write_in_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_write_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_in_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_in_macros.svh" + +interface fuse_ctrl_prim_axi_write_in_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_write_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] awaddr_i; + reg [AW-1:0] awaddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] awburst_o = 'bz; + tri [2:0] awsize_i; + reg [2:0] awsize_o = 'bz; + tri [7:0] awlen_i; + reg [7:0] awlen_o = 'bz; + tri [UW-1:0] awuser_i; + reg [UW-1:0] awuser_o = 'bz; + tri [UW-1:0] awid_i; + reg [UW-1:0] awid_o = 'bz; + tri awlock_i; + reg awlock_o = 'bz; + tri awvalid_i; + reg awvalid_o = 'bz; + tri [DW-1:0] wdata_i; + reg [DW-1:0] wdata_o = 'bz; + tri [DW/8-1:0] wstrb_i; + reg [DW/8-1:0] wstrb_o = 'bz; + tri wvalid_i; + reg wvalid_o = 'bz; + tri wlast_i; + reg wlast_o = 'bz; + tri bready_i; + reg bready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.awaddr = (initiator_responder == INITIATOR) ? awaddr_o : 'bz; + assign awaddr_i = bus.awaddr; + assign bus.awburst = (initiator_responder == INITIATOR) ? awburst_o : 'bz; + assign awburst_i = bus.awburst; + assign bus.awsize = (initiator_responder == INITIATOR) ? awsize_o : 'bz; + assign awsize_i = bus.awsize; + assign bus.awlen = (initiator_responder == INITIATOR) ? awlen_o : 'bz; + assign awlen_i = bus.awlen; + assign bus.awuser = (initiator_responder == INITIATOR) ? awuser_o : 'bz; + assign awuser_i = bus.awuser; + assign bus.awid = (initiator_responder == INITIATOR) ? awid_o : 'bz; + assign awid_i = bus.awid; + assign bus.awlock = (initiator_responder == INITIATOR) ? awlock_o : 'bz; + assign awlock_i = bus.awlock; + assign bus.awvalid = (initiator_responder == INITIATOR) ? awvalid_o : 'bz; + assign awvalid_i = bus.awvalid; + assign bus.wdata = (initiator_responder == INITIATOR) ? wdata_o : 'bz; + assign wdata_i = bus.wdata; + assign bus.wstrb = (initiator_responder == INITIATOR) ? wstrb_o : 'bz; + assign wstrb_i = bus.wstrb; + assign bus.wvalid = (initiator_responder == INITIATOR) ? wvalid_o : 'bz; + assign wvalid_i = bus.wvalid; + assign bus.wlast = (initiator_responder == INITIATOR) ? wlast_o : 'bz; + assign wlast_i = bus.wlast; + assign bus.bready = (initiator_responder == INITIATOR) ? bready_o : 'bz; + assign bready_i = bus.bready; + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_write_in_pkg::fuse_ctrl_prim_axi_write_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_write_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_write_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_write_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_in_driver and fuse_ctrl_prim_axi_write_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_in_driver_bfm. + `fuse_ctrl_prim_axi_write_in_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_write_in_driver and fuse_ctrl_prim_axi_write_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_in_driver_bfm. + `fuse_ctrl_prim_axi_write_in_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + awaddr_o <= 'bz; + awburst_o <= 'bz; + awsize_o <= 'bz; + awlen_o <= 'bz; + awuser_o <= 'bz; + awid_o <= 'bz; + awlock_o <= 'bz; + awvalid_o <= 'bz; + wdata_o <= 'bz; + wstrb_o <= 'bz; + wvalid_o <= 'bz; + wlast_o <= 'bz; + bready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_write_in_configuration_s fuse_ctrl_prim_axi_write_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_write_in_initiator_s fuse_ctrl_prim_axi_write_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_write_in_responder_s fuse_ctrl_prim_axi_write_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_write_in_initiator_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Members within the fuse_ctrl_prim_axi_write_in_responder_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + initiator_struct = fuse_ctrl_prim_axi_write_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // awaddr_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [AW-1:0] + // awburst_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // awsize_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [2:0] + // awlen_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [7:0] + // awuser_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [UW-1:0] + // awid_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [UW-1:0] + // awlock_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // + // awvalid_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // + // wdata_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [DW-1:0] + // wstrb_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [DW/8-1:0] + // wvalid_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // + // wlast_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // + // bready_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_write_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_write_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_write_in_initiator_s fuse_ctrl_prim_axi_write_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_write_in_responder_s fuse_ctrl_prim_axi_write_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_write_in_initiator_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Variables within the fuse_ctrl_prim_axi_write_in_responder_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awlock_i; // + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awvalid_i; // + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = wvalid_i; // + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = wlast_i; // + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = bready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_write_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_write_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_if.sv new file mode 100644 index 000000000..ba77427e3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_if.sv @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_write_in interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_write_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_write_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_write_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awaddr), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awburst), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awsize), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awlen), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awuser), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awlock), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.wdata), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.wstrb), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.wvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.wlast), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.bready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_in_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_write_in_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] awaddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst, + inout tri [2:0] awsize, + inout tri [7:0] awlen, + inout tri [UW-1:0] awuser, + inout tri [UW-1:0] awid, + inout tri awlock, + inout tri awvalid, + inout tri [DW-1:0] wdata, + inout tri [DW/8-1:0] wstrb, + inout tri wvalid, + inout tri wlast, + inout tri bready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output awaddr, + output awburst, + output awsize, + output awlen, + output awuser, + output awid, + output awlock, + output awvalid, + output wdata, + output wstrb, + output wvalid, + output wlast, + output bready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_macros.svh new file mode 100644 index 000000000..5d21a9094 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_macros.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_write_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_write_in_configuration class. +// + `define fuse_ctrl_prim_axi_write_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_write_in_configuration_s; + + `define fuse_ctrl_prim_axi_write_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_configuration_s to_struct();\ + fuse_ctrl_prim_axi_write_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_write_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_write_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_write_in_configuration_s fuse_ctrl_prim_axi_write_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_write_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_write_in_transaction class. +// + `define fuse_ctrl_prim_axi_write_in_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_in_monitor_s; + + `define fuse_ctrl_prim_axi_write_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_write_in_monitor_struct = \ + { \ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_write_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_write_in_monitor_s fuse_ctrl_prim_axi_write_in_monitor_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_write_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_in_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_in_initiator_s; + + `define fuse_ctrl_prim_axi_write_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_write_in_initiator_struct = \ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_write_in_initiator_s fuse_ctrl_prim_axi_write_in_initiator_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_write_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_in_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_in_responder_s; + + `define fuse_ctrl_prim_axi_write_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_write_in_responder_struct = \ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_in_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_write_in_responder_s fuse_ctrl_prim_axi_write_in_responder_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor.svh new file mode 100644 index 000000000..4deee8c06 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_write_in transactions observed by the +// fuse_ctrl_prim_axi_write_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_write_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_write_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_write_in_monitor_s fuse_ctrl_prim_axi_write_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_write_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor_bfm.sv new file mode 100644 index 000000000..80b4df5ac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor_bfm.sv @@ -0,0 +1,248 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_write_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_write_in monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_write_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_write_in_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_write_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_in_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_in_macros.svh" + + +interface fuse_ctrl_prim_axi_write_in_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_write_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_write_in_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_in_monitor_s fuse_ctrl_prim_axi_write_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_write_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] awaddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + tri [2:0] awsize_i; + tri [7:0] awlen_i; + tri [UW-1:0] awuser_i; + tri [UW-1:0] awid_i; + tri awlock_i; + tri awvalid_i; + tri [DW-1:0] wdata_i; + tri [DW/8-1:0] wstrb_i; + tri wvalid_i; + tri wlast_i; + tri bready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awaddr_i = bus.awaddr; + assign awburst_i = bus.awburst; + assign awsize_i = bus.awsize; + assign awlen_i = bus.awlen; + assign awuser_i = bus.awuser; + assign awid_i = bus.awid; + assign awlock_i = bus.awlock; + assign awvalid_i = bus.awvalid; + assign wdata_i = bus.wdata; + assign wstrb_i = bus.wstrb; + assign wvalid_i = bus.wvalid; + assign wlast_i = bus.wlast; + assign bready_i = bus.bready; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_write_in_pkg::fuse_ctrl_prim_axi_write_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_write_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_write_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_write_in_configuration_s fuse_ctrl_prim_axi_write_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_write_in_monitor_s fuse_ctrl_prim_axi_write_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awaddr + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awvalid + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awburst + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awsize + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awlen + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awuser + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awid + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awlock + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_wdata + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_wstrb + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_wvalid + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_wlast + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_bready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awlock_i; // + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awvalid_i; // + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = wvalid_i; // + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = wlast_i; // + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = bready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_random_sequence.svh new file mode 100644 index 000000000..5b9a8e55b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_write_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_write_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_write_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_write_in_random_sequence::body()-fuse_ctrl_prim_axi_write_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_write_in_driver_bfm via the sequencer and fuse_ctrl_prim_axi_write_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_write_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_responder_sequence.svh new file mode 100644 index 000000000..e8be3065d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_write_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_write_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_sequence_base.svh new file mode 100644 index 000000000..2d40c99ed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_in_transaction_req_t; + fuse_ctrl_prim_axi_write_in_transaction_req_t req; + typedef fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_in_transaction_rsp_t; + fuse_ctrl_prim_axi_write_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_write_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_write_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction.svh new file mode 100644 index 000000000..e58f4ec51 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction.svh @@ -0,0 +1,256 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_write_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] prim_awaddr ; + logic prim_awvalid ; + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + logic [2:0] prim_awsize ; + logic [7:0] prim_awlen ; + logic [UW-1:0] prim_awuser ; + logic [IW-1:0] prim_awid ; + logic prim_awlock ; + logic [DW-1:0] prim_wdata ; + logic [DW/8 - 1:0] prim_wstrb ; + logic prim_wvalid ; + logic prim_wlast ; + logic prim_bready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_write_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_write_in_monitor and fuse_ctrl_prim_axi_write_in_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_in_monitor_s fuse_ctrl_prim_axi_write_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_in_driver and fuse_ctrl_prim_axi_write_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_in_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_in_initiator_s fuse_ctrl_prim_axi_write_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_write_in_driver and fuse_ctrl_prim_axi_write_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_in_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_in_responder_s fuse_ctrl_prim_axi_write_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awaddr:0x%x prim_awvalid:0x%x prim_awburst:0x%x prim_awsize:0x%x prim_awlen:0x%x prim_awuser:0x%x prim_awid:0x%x prim_awlock:0x%x prim_wdata:0x%x prim_wstrb:0x%x prim_wvalid:0x%x prim_wlast:0x%x prim_bready:0x%x ",prim_awaddr,prim_awvalid,prim_awburst,prim_awsize,prim_awlen,prim_awuser,prim_awid,prim_awlock,prim_wdata,prim_wstrb,prim_wvalid,prim_wlast,prim_bready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_wdata == RHS.prim_wdata) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awaddr = RHS.prim_awaddr; + this.prim_awvalid = RHS.prim_awvalid; + this.prim_awburst = RHS.prim_awburst; + this.prim_awsize = RHS.prim_awsize; + this.prim_awlen = RHS.prim_awlen; + this.prim_awuser = RHS.prim_awuser; + this.prim_awid = RHS.prim_awid; + this.prim_awlock = RHS.prim_awlock; + this.prim_wdata = RHS.prim_wdata; + this.prim_wstrb = RHS.prim_wstrb; + this.prim_wvalid = RHS.prim_wvalid; + this.prim_wlast = RHS.prim_wlast; + this.prim_bready = RHS.prim_bready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_write_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awaddr,"prim_awaddr"); + $add_attribute(transaction_view_h,prim_awvalid,"prim_awvalid"); + $add_attribute(transaction_view_h,prim_awburst,"prim_awburst"); + $add_attribute(transaction_view_h,prim_awsize,"prim_awsize"); + $add_attribute(transaction_view_h,prim_awlen,"prim_awlen"); + $add_attribute(transaction_view_h,prim_awuser,"prim_awuser"); + $add_attribute(transaction_view_h,prim_awid,"prim_awid"); + $add_attribute(transaction_view_h,prim_awlock,"prim_awlock"); + $add_attribute(transaction_view_h,prim_wdata,"prim_wdata"); + $add_attribute(transaction_view_h,prim_wstrb,"prim_wstrb"); + $add_attribute(transaction_view_h,prim_wvalid,"prim_wvalid"); + $add_attribute(transaction_view_h,prim_wlast,"prim_wlast"); + $add_attribute(transaction_view_h,prim_bready,"prim_bready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction_coverage.svh new file mode 100644 index 000000000..30d005a0a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction_coverage.svh @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_write_in transaction information using +// a covergroup named fuse_ctrl_prim_axi_write_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_write_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awaddr: coverpoint coverage_trans.prim_awaddr; + prim_awvalid: coverpoint coverage_trans.prim_awvalid; + prim_awburst: coverpoint coverage_trans.prim_awburst; + prim_awsize: coverpoint coverage_trans.prim_awsize; + prim_awlen: coverpoint coverage_trans.prim_awlen; + prim_awuser: coverpoint coverage_trans.prim_awuser; + prim_awid: coverpoint coverage_trans.prim_awid; + prim_awlock: coverpoint coverage_trans.prim_awlock; + prim_wdata: coverpoint coverage_trans.prim_wdata; + prim_wstrb: coverpoint coverage_trans.prim_wstrb; + prim_wvalid: coverpoint coverage_trans.prim_wvalid; + prim_wlast: coverpoint coverage_trans.prim_wlast; + prim_bready: coverpoint coverage_trans.prim_bready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_write_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_write_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_write_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/yaml/fuse_ctrl_prim_axi_write_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/yaml/fuse_ctrl_prim_axi_write_in_interface.yaml new file mode 100644 index 000000000..ec7591e55 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/yaml/fuse_ctrl_prim_axi_write_in_interface.yaml @@ -0,0 +1,161 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_write_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: awaddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: awburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: awsize + reset_value: '''bz' + width: '3' + - dir: output + name: awlen + reset_value: '''bz' + width: '8' + - dir: output + name: awuser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awid + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awlock + reset_value: '''bz' + width: '1' + - dir: output + name: awvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wdata + reset_value: '''bz' + width: '[''DW'']' + - dir: output + name: wstrb + reset_value: '''bz' + width: '[''DW/8'']' + - dir: output + name: wvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wlast + reset_value: '''bz' + width: '1' + - dir: output + name: bready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: prim_awaddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awuser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wstrb + type: logic [DW/8 - 1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_bready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.project new file mode 100644 index 000000000..3fbcdcad1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_write_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.svproject new file mode 100644 index 000000000..c87614b22 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/Makefile new file mode 100644 index 000000000..1ac2ce11c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_write_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_write_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hvl.f + +fuse_ctrl_prim_axi_write_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hdl.f + +fuse_ctrl_prim_axi_write_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_write_out_if_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_write_out_if_pkg +COMP_fuse_ctrl_prim_axi_write_out_if_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_write_out_if_pkg +COMP_fuse_ctrl_prim_axi_write_out_if_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_write_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_write_out_if_pkg: $(COMP_fuse_ctrl_prim_axi_write_out_if_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_write_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_write_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_write_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_out_if_pkg += -I$(fuse_ctrl_prim_axi_write_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_out_if_pkg += $(fuse_ctrl_prim_axi_write_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_out_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_write_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/compile.do new file mode 100644 index 000000000..195e5ab83 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_write_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if.compile new file mode 100644 index 000000000..8935f53f7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_write_out_if_hvl.compile + - fuse_ctrl_prim_axi_write_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_bfm.vinfo new file mode 100644 index 000000000..18c4d8b34 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_write_out_if_if.sv +src/fuse_ctrl_prim_axi_write_out_if_driver_bfm.sv +src/fuse_ctrl_prim_axi_write_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_common.compile new file mode 100644 index 000000000..b42384370 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hdl.f new file mode 100644 index 000000000..eb11340b2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hvl.f new file mode 100644 index 000000000..aa9e377b1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_xrtl.f new file mode 100644 index 000000000..54a6c5251 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hdl.compile new file mode 100644 index 000000000..dfeac8677 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_write_out_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_write_out_if_if.sv + - src/fuse_ctrl_prim_axi_write_out_if_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hvl.compile new file mode 100644 index 000000000..2e07fe5b4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_write_out_if_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.sv new file mode 100644 index 000000000..489f30c82 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_write_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_write_out_if_macros.svh" + + export fuse_ctrl_prim_axi_write_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_write_out_if_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_write_out_if_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_if_configuration.svh" + `include "src/fuse_ctrl_prim_axi_write_out_if_driver.svh" + `include "src/fuse_ctrl_prim_axi_write_out_if_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_if_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_write_out_if_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_write_out_if_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_if_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_write_out_if2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.vinfo new file mode 100644 index 000000000..20ff7d6ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv new file mode 100644 index 000000000..e893dbdcc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_write_out_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_write_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..3c442ba81 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_sve.F new file mode 100644 index 000000000..dedbb6647 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if2reg_adapter.svh new file mode 100644 index 000000000..24aefdb70 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_write_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_write_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_write_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_agent.svh new file mode 100644 index 000000000..f7ca4af1b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_write_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_configuration.svh new file mode 100644 index 000000000..1f4fb4bd2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_write_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_write_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_write_out_if_configuration_s fuse_ctrl_prim_axi_write_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_write_out_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_if_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_write_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_write_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_write_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_write_out_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver.svh new file mode 100644 index 000000000..820e05be0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_write_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_write_out_if_driver and fuse_ctrl_prim_axi_write_out_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_write_out_if_driver_bfm. +`fuse_ctrl_prim_axi_write_out_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_out_if_initiator_s fuse_ctrl_prim_axi_write_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_write_out_if_driver and fuse_ctrl_prim_axi_write_out_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_write_out_if_driver_bfm. +`fuse_ctrl_prim_axi_write_out_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_out_if_responder_s fuse_ctrl_prim_axi_write_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_write_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_write_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_write_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_write_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver_bfm.sv new file mode 100644 index 000000000..12dbc26ed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_write_out_if signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_write_out_if driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_write_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_write_out_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_write_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_out_if_macros.svh" + +interface fuse_ctrl_prim_axi_write_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_write_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_write_out_if_pkg::fuse_ctrl_prim_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_write_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_write_out_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_out_if_driver and fuse_ctrl_prim_axi_write_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_out_if_driver_bfm. + `fuse_ctrl_prim_axi_write_out_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_write_out_if_driver and fuse_ctrl_prim_axi_write_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_out_if_driver_bfm. + `fuse_ctrl_prim_axi_write_out_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_write_out_if_configuration_s fuse_ctrl_prim_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_write_out_if_initiator_s fuse_ctrl_prim_axi_write_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_write_out_if_responder_s fuse_ctrl_prim_axi_write_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_write_out_if_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Members within the fuse_ctrl_prim_axi_write_out_if_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + initiator_struct = fuse_ctrl_prim_axi_write_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_prim_axi_write_out_if_responder_struct.xyz = awready_i; // + // fuse_ctrl_prim_axi_write_out_if_responder_struct.xyz = wready_i; // + // fuse_ctrl_prim_axi_write_out_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_out_if_responder_struct.xyz = bid_i; // + // fuse_ctrl_prim_axi_write_out_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_write_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_write_out_if_initiator_s fuse_ctrl_prim_axi_write_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_write_out_if_responder_s fuse_ctrl_prim_axi_write_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_write_out_if_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Variables within the fuse_ctrl_prim_axi_write_out_if_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= fuse_ctrl_prim_axi_write_out_if_initiator_struct.xyz; // + // wready_o <= fuse_ctrl_prim_axi_write_out_if_initiator_struct.xyz; // + // bresp_o <= fuse_ctrl_prim_axi_write_out_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= fuse_ctrl_prim_axi_write_out_if_initiator_struct.xyz; // + // bvalid_o <= fuse_ctrl_prim_axi_write_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_write_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_if.sv new file mode 100644 index 000000000..49688b122 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_write_out_if interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_write_out_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_write_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_write_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_if_bus.awready), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_if_bus.wready), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_if_bus.bresp), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_if_bus.bid), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_out_if_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_write_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_macros.svh new file mode 100644 index 000000000..21b9831e7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_write_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_write_out_if_configuration class. +// + `define fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_write_out_if_configuration_s; + + `define fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_if_configuration_s to_struct();\ + fuse_ctrl_prim_axi_write_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_write_out_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_write_out_if_configuration_s fuse_ctrl_prim_axi_write_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_write_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_write_out_if_transaction class. +// + `define fuse_ctrl_prim_axi_write_out_if_MONITOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } fuse_ctrl_prim_axi_write_out_if_monitor_s; + + `define fuse_ctrl_prim_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_if_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_write_out_if_monitor_struct = \ + { \ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( fuse_ctrl_prim_axi_write_out_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_write_out_if_monitor_s fuse_ctrl_prim_axi_write_out_if_monitor_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = fuse_ctrl_prim_axi_write_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } fuse_ctrl_prim_axi_write_out_if_initiator_s; + + `define fuse_ctrl_prim_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_if_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_write_out_if_initiator_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( fuse_ctrl_prim_axi_write_out_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_write_out_if_initiator_s fuse_ctrl_prim_axi_write_out_if_initiator_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = fuse_ctrl_prim_axi_write_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } fuse_ctrl_prim_axi_write_out_if_responder_s; + + `define fuse_ctrl_prim_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_if_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_write_out_if_responder_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( fuse_ctrl_prim_axi_write_out_if_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_write_out_if_responder_s fuse_ctrl_prim_axi_write_out_if_responder_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = fuse_ctrl_prim_axi_write_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor.svh new file mode 100644 index 000000000..d8852fe9a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_write_out_if transactions observed by the +// fuse_ctrl_prim_axi_write_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_write_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_write_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_write_out_if_monitor_s fuse_ctrl_prim_axi_write_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_write_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor_bfm.sv new file mode 100644 index 000000000..2455bcc7b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_write_out_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_write_out_if monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_write_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_write_out_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_write_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_out_if_macros.svh" + + +interface fuse_ctrl_prim_axi_write_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_write_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_write_out_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_out_if_monitor_s fuse_ctrl_prim_axi_write_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_write_out_if_pkg::fuse_ctrl_prim_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_write_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_write_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_write_out_if_configuration_s fuse_ctrl_prim_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_write_out_if_monitor_s fuse_ctrl_prim_axi_write_out_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_write_out_if_monitor_struct.prim_awready + // // fuse_ctrl_prim_axi_write_out_if_monitor_struct.prim_wready + // // fuse_ctrl_prim_axi_write_out_if_monitor_struct.prim_bresp + // // fuse_ctrl_prim_axi_write_out_if_monitor_struct.prim_bid + // // fuse_ctrl_prim_axi_write_out_if_monitor_struct.prim_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_write_out_if_monitor_struct.xyz = awready_i; // + // fuse_ctrl_prim_axi_write_out_if_monitor_struct.xyz = wready_i; // + // fuse_ctrl_prim_axi_write_out_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_out_if_monitor_struct.xyz = bid_i; // + // fuse_ctrl_prim_axi_write_out_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_random_sequence.svh new file mode 100644 index 000000000..55946e4ad --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_write_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_write_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_write_out_if_random_sequence::body()-fuse_ctrl_prim_axi_write_out_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_write_out_if_driver_bfm via the sequencer and fuse_ctrl_prim_axi_write_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_write_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_responder_sequence.svh new file mode 100644 index 000000000..fa31c283d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_write_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_sequence_base.svh new file mode 100644 index 000000000..aa53c7213 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_out_if_transaction_req_t; + fuse_ctrl_prim_axi_write_out_if_transaction_req_t req; + typedef fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_out_if_transaction_rsp_t; + fuse_ctrl_prim_axi_write_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_write_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_write_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction.svh new file mode 100644 index 000000000..c4bc6fa5c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_write_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_awready ; + logic prim_wready ; + axi_pkg::axi_burst_e prim_bresp ; + logic prim_bid ; + logic prim_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_write_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_write_out_if_monitor and fuse_ctrl_prim_axi_write_out_if_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_out_if_monitor_s fuse_ctrl_prim_axi_write_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_out_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_if_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_out_if_driver and fuse_ctrl_prim_axi_write_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_out_if_initiator_s fuse_ctrl_prim_axi_write_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_out_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_if_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_write_out_if_driver and fuse_ctrl_prim_axi_write_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_out_if_responder_s fuse_ctrl_prim_axi_write_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_out_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_if_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awready:0x%x prim_wready:0x%x prim_bresp:0x%x prim_bid:0x%x prim_bvalid:0x%x ",prim_awready,prim_wready,prim_bresp,prim_bid,prim_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_awready == RHS.prim_awready) + &&(this.prim_wready == RHS.prim_wready) + &&(this.prim_bresp == RHS.prim_bresp) + &&(this.prim_bid == RHS.prim_bid) + &&(this.prim_bvalid == RHS.prim_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awready = RHS.prim_awready; + this.prim_wready = RHS.prim_wready; + this.prim_bresp = RHS.prim_bresp; + this.prim_bid = RHS.prim_bid; + this.prim_bvalid = RHS.prim_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_write_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awready,"prim_awready"); + $add_attribute(transaction_view_h,prim_wready,"prim_wready"); + $add_attribute(transaction_view_h,prim_bresp,"prim_bresp"); + $add_attribute(transaction_view_h,prim_bid,"prim_bid"); + $add_attribute(transaction_view_h,prim_bvalid,"prim_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction_coverage.svh new file mode 100644 index 000000000..2459f7b3c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_write_out_if transaction information using +// a covergroup named fuse_ctrl_prim_axi_write_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_write_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awready: coverpoint coverage_trans.prim_awready; + prim_wready: coverpoint coverage_trans.prim_wready; + prim_bresp: coverpoint coverage_trans.prim_bresp; + prim_bid: coverpoint coverage_trans.prim_bid; + prim_bvalid: coverpoint coverage_trans.prim_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_write_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_write_out_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_write_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/yaml/fuse_ctrl_prim_axi_write_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/yaml/fuse_ctrl_prim_axi_write_out_if_interface.yaml new file mode 100644 index 000000000..0c0ce4466 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/yaml/fuse_ctrl_prim_axi_write_out_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_write_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.project new file mode 100644 index 000000000..3e0bf6c6b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_write_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.svproject new file mode 100644 index 000000000..376273afc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/Makefile new file mode 100644 index 000000000..7bd75ac29 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_write_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_write_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hvl.f + +fuse_ctrl_prim_axi_write_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hdl.f + +fuse_ctrl_prim_axi_write_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_write_out_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_write_out_pkg +COMP_fuse_ctrl_prim_axi_write_out_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_write_out_pkg +COMP_fuse_ctrl_prim_axi_write_out_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_write_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_write_out_pkg: $(COMP_fuse_ctrl_prim_axi_write_out_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_write_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_write_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_write_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_write_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_write_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_out_pkg += -I$(fuse_ctrl_prim_axi_write_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_out_pkg += $(fuse_ctrl_prim_axi_write_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_write_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/compile.do new file mode 100644 index 000000000..2728571fe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_write_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out.compile new file mode 100644 index 000000000..fa21f0f3e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_write_out_hvl.compile + - fuse_ctrl_prim_axi_write_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_bfm.vinfo new file mode 100644 index 000000000..708c584b5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_write_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_write_out_if.sv +src/fuse_ctrl_prim_axi_write_out_driver_bfm.sv +src/fuse_ctrl_prim_axi_write_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_common.compile new file mode 100644 index 000000000..ba5ad3565 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_write_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hdl.f new file mode 100644 index 000000000..6b9dd5f56 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hvl.f new file mode 100644 index 000000000..6aea29704 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_xrtl.f new file mode 100644 index 000000000..3c6293173 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hdl.compile new file mode 100644 index 000000000..1a738c19e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_write_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_write_out_if.sv + - src/fuse_ctrl_prim_axi_write_out_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_write_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hvl.compile new file mode 100644 index 000000000..894eaaf2f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_write_out_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_write_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.sv new file mode 100644 index 000000000..50f57ffb2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_write_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_write_out_macros.svh" + + export fuse_ctrl_prim_axi_write_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_write_out_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_write_out_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_configuration.svh" + `include "src/fuse_ctrl_prim_axi_write_out_driver.svh" + `include "src/fuse_ctrl_prim_axi_write_out_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_write_out_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_write_out_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_write_out2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.vinfo new file mode 100644 index 000000000..790347eb1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_write_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_write_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.sv new file mode 100644 index 000000000..bd64b4efe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_write_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_write_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.vinfo new file mode 100644 index 000000000..dfc2d8e5c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_write_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_sve.F new file mode 100644 index 000000000..9a71aafbc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out2reg_adapter.svh new file mode 100644 index 000000000..34b91afc0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_write_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_write_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_write_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_agent.svh new file mode 100644 index 000000000..0622fae7b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_write_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_write_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_write_out_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_configuration.svh new file mode 100644 index 000000000..2440f4015 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_write_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_write_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_write_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_write_out_configuration_s fuse_ctrl_prim_axi_write_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_write_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_write_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_write_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_write_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_write_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_write_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver.svh new file mode 100644 index 000000000..97995a3fe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_write_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_write_out_driver and fuse_ctrl_prim_axi_write_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_write_out_driver_bfm. +`fuse_ctrl_prim_axi_write_out_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_out_initiator_s fuse_ctrl_prim_axi_write_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_write_out_driver and fuse_ctrl_prim_axi_write_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_write_out_driver_bfm. +`fuse_ctrl_prim_axi_write_out_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_out_responder_s fuse_ctrl_prim_axi_write_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_write_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_write_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_write_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_write_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver_bfm.sv new file mode 100644 index 000000000..7e5c72db7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_write_out signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_write_out driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_write_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_write_out_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_write_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_out_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_out_macros.svh" + +interface fuse_ctrl_prim_axi_write_out_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_write_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_write_out_pkg::fuse_ctrl_prim_axi_write_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_write_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_write_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_write_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_out_driver and fuse_ctrl_prim_axi_write_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_out_driver_bfm. + `fuse_ctrl_prim_axi_write_out_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_write_out_driver and fuse_ctrl_prim_axi_write_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_out_driver_bfm. + `fuse_ctrl_prim_axi_write_out_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_write_out_configuration_s fuse_ctrl_prim_axi_write_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_write_out_initiator_s fuse_ctrl_prim_axi_write_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_write_out_responder_s fuse_ctrl_prim_axi_write_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_write_out_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Members within the fuse_ctrl_prim_axi_write_out_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + initiator_struct = fuse_ctrl_prim_axi_write_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_prim_axi_write_out_responder_struct.xyz = awready_i; // + // fuse_ctrl_prim_axi_write_out_responder_struct.xyz = wready_i; // + // fuse_ctrl_prim_axi_write_out_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_out_responder_struct.xyz = bid_i; // + // fuse_ctrl_prim_axi_write_out_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_write_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_write_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_write_out_initiator_s fuse_ctrl_prim_axi_write_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_write_out_responder_s fuse_ctrl_prim_axi_write_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_write_out_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Variables within the fuse_ctrl_prim_axi_write_out_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= fuse_ctrl_prim_axi_write_out_initiator_struct.xyz; // + // wready_o <= fuse_ctrl_prim_axi_write_out_initiator_struct.xyz; // + // bresp_o <= fuse_ctrl_prim_axi_write_out_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= fuse_ctrl_prim_axi_write_out_initiator_struct.xyz; // + // bvalid_o <= fuse_ctrl_prim_axi_write_out_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_write_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_write_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_if.sv new file mode 100644 index 000000000..66c2c91b7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_write_out interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_write_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_write_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_write_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_bus.awready), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_bus.wready), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_bus.bresp), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_bus.bid), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_out_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_write_out_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_macros.svh new file mode 100644 index 000000000..28bfd68ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_write_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_write_out_configuration class. +// + `define fuse_ctrl_prim_axi_write_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_write_out_configuration_s; + + `define fuse_ctrl_prim_axi_write_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_configuration_s to_struct();\ + fuse_ctrl_prim_axi_write_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_write_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_write_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_write_out_configuration_s fuse_ctrl_prim_axi_write_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_write_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_write_out_transaction class. +// + `define fuse_ctrl_prim_axi_write_out_MONITOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } fuse_ctrl_prim_axi_write_out_monitor_s; + + `define fuse_ctrl_prim_axi_write_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_write_out_monitor_struct = \ + { \ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( fuse_ctrl_prim_axi_write_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_write_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_write_out_monitor_s fuse_ctrl_prim_axi_write_out_monitor_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = fuse_ctrl_prim_axi_write_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_write_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_out_INITIATOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } fuse_ctrl_prim_axi_write_out_initiator_s; + + `define fuse_ctrl_prim_axi_write_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_write_out_initiator_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( fuse_ctrl_prim_axi_write_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_write_out_initiator_s fuse_ctrl_prim_axi_write_out_initiator_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = fuse_ctrl_prim_axi_write_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_write_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_out_RESPONDER_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } fuse_ctrl_prim_axi_write_out_responder_s; + + `define fuse_ctrl_prim_axi_write_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_write_out_responder_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( fuse_ctrl_prim_axi_write_out_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_write_out_responder_s fuse_ctrl_prim_axi_write_out_responder_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = fuse_ctrl_prim_axi_write_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor.svh new file mode 100644 index 000000000..db0d6bb13 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_write_out transactions observed by the +// fuse_ctrl_prim_axi_write_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_write_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_write_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_write_out_monitor_s fuse_ctrl_prim_axi_write_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_write_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor_bfm.sv new file mode 100644 index 000000000..d8a55807b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_write_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_write_out monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_write_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_write_out_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_write_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_out_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_out_macros.svh" + + +interface fuse_ctrl_prim_axi_write_out_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_write_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_write_out_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_out_monitor_s fuse_ctrl_prim_axi_write_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_write_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_write_out_pkg::fuse_ctrl_prim_axi_write_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_write_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_write_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_write_out_configuration_s fuse_ctrl_prim_axi_write_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_write_out_monitor_s fuse_ctrl_prim_axi_write_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_write_out_monitor_struct.prim_awready + // // fuse_ctrl_prim_axi_write_out_monitor_struct.prim_wready + // // fuse_ctrl_prim_axi_write_out_monitor_struct.prim_bresp + // // fuse_ctrl_prim_axi_write_out_monitor_struct.prim_bid + // // fuse_ctrl_prim_axi_write_out_monitor_struct.prim_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_write_out_monitor_struct.xyz = awready_i; // + // fuse_ctrl_prim_axi_write_out_monitor_struct.xyz = wready_i; // + // fuse_ctrl_prim_axi_write_out_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_out_monitor_struct.xyz = bid_i; // + // fuse_ctrl_prim_axi_write_out_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_random_sequence.svh new file mode 100644 index 000000000..c5c49199d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_write_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_write_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_write_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_write_out_random_sequence::body()-fuse_ctrl_prim_axi_write_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_write_out_driver_bfm via the sequencer and fuse_ctrl_prim_axi_write_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_write_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_responder_sequence.svh new file mode 100644 index 000000000..f129205e3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_write_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_write_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_sequence_base.svh new file mode 100644 index 000000000..28cfc04d0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_out_transaction_req_t; + fuse_ctrl_prim_axi_write_out_transaction_req_t req; + typedef fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_out_transaction_rsp_t; + fuse_ctrl_prim_axi_write_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_write_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_write_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction.svh new file mode 100644 index 000000000..fd93a892d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_write_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_awready ; + logic prim_wready ; + axi_pkg::axi_burst_e prim_bresp ; + logic prim_bid ; + logic prim_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_write_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_write_out_monitor and fuse_ctrl_prim_axi_write_out_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_out_monitor_s fuse_ctrl_prim_axi_write_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_out_driver and fuse_ctrl_prim_axi_write_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_out_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_out_initiator_s fuse_ctrl_prim_axi_write_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_write_out_driver and fuse_ctrl_prim_axi_write_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_out_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_out_responder_s fuse_ctrl_prim_axi_write_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awready:0x%x prim_wready:0x%x prim_bresp:0x%x prim_bid:0x%x prim_bvalid:0x%x ",prim_awready,prim_wready,prim_bresp,prim_bid,prim_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_awready == RHS.prim_awready) + &&(this.prim_wready == RHS.prim_wready) + &&(this.prim_bresp == RHS.prim_bresp) + &&(this.prim_bid == RHS.prim_bid) + &&(this.prim_bvalid == RHS.prim_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awready = RHS.prim_awready; + this.prim_wready = RHS.prim_wready; + this.prim_bresp = RHS.prim_bresp; + this.prim_bid = RHS.prim_bid; + this.prim_bvalid = RHS.prim_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_write_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awready,"prim_awready"); + $add_attribute(transaction_view_h,prim_wready,"prim_wready"); + $add_attribute(transaction_view_h,prim_bresp,"prim_bresp"); + $add_attribute(transaction_view_h,prim_bid,"prim_bid"); + $add_attribute(transaction_view_h,prim_bvalid,"prim_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction_coverage.svh new file mode 100644 index 000000000..8a37ca501 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_write_out transaction information using +// a covergroup named fuse_ctrl_prim_axi_write_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_write_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awready: coverpoint coverage_trans.prim_awready; + prim_wready: coverpoint coverage_trans.prim_wready; + prim_bresp: coverpoint coverage_trans.prim_bresp; + prim_bid: coverpoint coverage_trans.prim_bid; + prim_bvalid: coverpoint coverage_trans.prim_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_write_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_write_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_write_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/yaml/fuse_ctrl_prim_axi_write_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/yaml/fuse_ctrl_prim_axi_write_out_interface.yaml new file mode 100644 index 000000000..d0566d0e7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/yaml/fuse_ctrl_prim_axi_write_out_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_write_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/.project new file mode 100644 index 000000000..2ff8b5e37 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_pwr_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/.svproject new file mode 100644 index 000000000..240269e95 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/Makefile new file mode 100644 index 000000000..abc4c57ca --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_pwr_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_pwr_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hvl.f + +fuse_ctrl_pwr_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hdl.f + +fuse_ctrl_pwr_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_xrtl.f + +COMP_fuse_ctrl_pwr_in_PKG_TGT_0 = q_comp_fuse_ctrl_pwr_in_pkg +COMP_fuse_ctrl_pwr_in_PKG_TGT_1 = v_comp_fuse_ctrl_pwr_in_pkg +COMP_fuse_ctrl_pwr_in_PKG_TGT = $(COMP_fuse_ctrl_pwr_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_pwr_in_pkg: $(COMP_fuse_ctrl_pwr_in_PKG_TGT) + +q_comp_fuse_ctrl_pwr_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_pwr_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_pwr_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_pwr_in_PKG_XRTL) + +v_comp_fuse_ctrl_pwr_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_pwr_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_pwr_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_pwr_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_pwr_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_pwr_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_pwr_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_pwr_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_pwr_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_pwr_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_pwr_in_pkg += -I$(fuse_ctrl_pwr_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_pwr_in_pkg += $(fuse_ctrl_pwr_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_pwr_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_pwr_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_pwr_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_pwr_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_pwr_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_pwr_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/compile.do new file mode 100644 index 000000000..2d426564e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_pwr_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in.compile new file mode 100644 index 000000000..d752db08d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_pwr_in_hvl.compile + - fuse_ctrl_pwr_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_bfm.vinfo new file mode 100644 index 000000000..caae09a06 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_pwr_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_pwr_in_if.sv +src/fuse_ctrl_pwr_in_driver_bfm.sv +src/fuse_ctrl_pwr_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_common.compile new file mode 100644 index 000000000..a6831d02e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_pwr_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hdl.f new file mode 100644 index 000000000..5fc815f8a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hvl.f new file mode 100644 index 000000000..b62aefb0d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_xrtl.f new file mode 100644 index 000000000..0e6b1f94c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_hdl.compile new file mode 100644 index 000000000..99fb5f9a6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_pwr_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_pwr_in_if.sv + - src/fuse_ctrl_pwr_in_monitor_bfm.sv + - src/fuse_ctrl_pwr_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_hvl.compile new file mode 100644 index 000000000..2b577edca --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_pwr_in_common.compile +incdir: + - . +src: + - fuse_ctrl_pwr_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg.sv new file mode 100644 index 000000000..dc960d5f1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_pwr_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_pwr_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_pwr_in_macros.svh" + + export fuse_ctrl_pwr_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_pwr_in_typedefs.svh" + `include "src/fuse_ctrl_pwr_in_transaction.svh" + + `include "src/fuse_ctrl_pwr_in_configuration.svh" + `include "src/fuse_ctrl_pwr_in_driver.svh" + `include "src/fuse_ctrl_pwr_in_monitor.svh" + + `include "src/fuse_ctrl_pwr_in_transaction_coverage.svh" + `include "src/fuse_ctrl_pwr_in_sequence_base.svh" + `include "src/fuse_ctrl_pwr_in_random_sequence.svh" + + `include "src/fuse_ctrl_pwr_in_responder_sequence.svh" + `include "src/fuse_ctrl_pwr_in2reg_adapter.svh" + + `include "src/fuse_ctrl_pwr_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg.vinfo new file mode 100644 index 000000000..7f4e27c24 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_pwr_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_pwr_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_hdl.sv new file mode 100644 index 000000000..fe57a7f58 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_pwr_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_pwr_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_pwr_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_hdl.vinfo new file mode 100644 index 000000000..b74887324 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_pwr_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_sve.F new file mode 100644 index 000000000..5f60ac6b9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in2reg_adapter.svh new file mode 100644 index 000000000..5ef2d62ce --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_pwr_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_in2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_pwr_in2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_pwr_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_pwr_in_transaction trans_h = fuse_ctrl_pwr_in_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_pwr_in_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_pwr_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_agent.svh new file mode 100644 index 000000000..b6fb954e4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_in_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_pwr_in_configuration ), + .DRIVER_T(fuse_ctrl_pwr_in_driver ), + .MONITOR_T(fuse_ctrl_pwr_in_monitor ), + .COVERAGE_T(fuse_ctrl_pwr_in_transaction_coverage ), + .TRANS_T(fuse_ctrl_pwr_in_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_pwr_in_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_configuration.svh new file mode 100644 index 000000000..09b18fec9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_pwr_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_in_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_pwr_in_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_pwr_in_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_pwr_in_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_pwr_in_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_pwr_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_CONFIGURATION_STRUCT + fuse_ctrl_pwr_in_configuration_s fuse_ctrl_pwr_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_pwr_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_pwr_in_configuration_struct. + // This function is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_pwr_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_pwr_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_pwr_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_pwr_in_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_pwr_in_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_pwr_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_pwr_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_pwr_in_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_driver.svh new file mode 100644 index 000000000..e115ef740 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_in_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_pwr_in_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_pwr_in_driver_bfm ), + .REQ(fuse_ctrl_pwr_in_transaction ), + .RSP(fuse_ctrl_pwr_in_transaction )); + + `uvm_component_utils( fuse_ctrl_pwr_in_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_pwr_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_pwr_in_driver and fuse_ctrl_pwr_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_pwr_in_driver_bfm. +`fuse_ctrl_pwr_in_INITIATOR_STRUCT + fuse_ctrl_pwr_in_initiator_s fuse_ctrl_pwr_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_pwr_in_driver and fuse_ctrl_pwr_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_pwr_in_driver_bfm. +`fuse_ctrl_pwr_in_RESPONDER_STRUCT + fuse_ctrl_pwr_in_responder_s fuse_ctrl_pwr_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_pwr_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_pwr_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_pwr_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_pwr_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_driver_bfm.sv new file mode 100644 index 000000000..34999f1bb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_driver_bfm.sv @@ -0,0 +1,294 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_pwr_in signal driving. It is +// accessed by the uvm fuse_ctrl_pwr_in driver through a virtual interface +// handle in the fuse_ctrl_pwr_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_pwr_in_if. +// +// Input signals from the fuse_ctrl_pwr_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_pwr_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_pwr_in_pkg_hdl::*; +`include "src/fuse_ctrl_pwr_in_macros.svh" + +interface fuse_ctrl_pwr_in_driver_bfm + (fuse_ctrl_pwr_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_pwr_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i_i; + reg [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i_o = 'bz; + + // Bi-directional signals + tri otp_ext_voltage_h_io_i; + reg otp_ext_voltage_h_io_o = 'bz; + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.pwr_otp_i = (initiator_responder == INITIATOR) ? pwr_otp_i_o : 'bz; + assign pwr_otp_i_i = bus.pwr_otp_i; + assign bus.otp_ext_voltage_h_io = otp_ext_voltage_h_io_o; + + // Proxy handle to UVM driver + fuse_ctrl_pwr_in_pkg::fuse_ctrl_pwr_in_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_pwr_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_pwr_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_pwr_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_pwr_in_driver and fuse_ctrl_pwr_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_pwr_in_driver_bfm. + `fuse_ctrl_pwr_in_INITIATOR_STRUCT + fuse_ctrl_pwr_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_pwr_in_driver and fuse_ctrl_pwr_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_pwr_in_driver_bfm. + `fuse_ctrl_pwr_in_RESPONDER_STRUCT + fuse_ctrl_pwr_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + pwr_otp_i_o <= 'bz; + // Bi-directional signals + otp_ext_voltage_h_io_o <= 'bz; + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_pwr_in_configuration_s fuse_ctrl_pwr_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_pwr_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_pwr_in_initiator_s fuse_ctrl_pwr_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_pwr_in_responder_s fuse_ctrl_pwr_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_pwr_in_initiator_struct: + // bit assert_otp_init ; + // Members within the fuse_ctrl_pwr_in_responder_struct: + // bit assert_otp_init ; + initiator_struct = fuse_ctrl_pwr_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // fuse_ctrl_pwr_in_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // pwr_otp_i_o <= fuse_ctrl_pwr_in_initiator_struct.xyz; // [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] + // Initiator inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_pwr_in_initiator_struct.xyz; // + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_pwr_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_pwr_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_pwr_in_initiator_s fuse_ctrl_pwr_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_pwr_in_responder_s fuse_ctrl_pwr_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_pwr_in_initiator_struct: + // bit assert_otp_init ; + // Variables within the fuse_ctrl_pwr_in_responder_struct: + // bit assert_otp_init ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_pwr_in_responder_struct.xyz = pwr_otp_i_i; // [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] + // Responder inout signals + // fuse_ctrl_pwr_in_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_pwr_in_initiator_struct.xyz; // + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_pwr_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_pwr_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_if.sv new file mode 100644 index 000000000..efb6acfee --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_if.sv @@ -0,0 +1,83 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_pwr_in interface signals. +// It is instantiated once per fuse_ctrl_pwr_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_pwr_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_pwr_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_pwr_in_bus.pwr_otp_i), // Agent output +// .dut_signal_port(fuse_ctrl_pwr_in_bus.otp_ext_voltage_h_io), // Agent inout + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_pwr_in_pkg_hdl::*; + +interface fuse_ctrl_pwr_in_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i, + inout tri otp_ext_voltage_h_io + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input pwr_otp_i, + input otp_ext_voltage_h_io + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output pwr_otp_i, + inout otp_ext_voltage_h_io + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input pwr_otp_i, + inout otp_ext_voltage_h_io + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_macros.svh new file mode 100644 index 000000000..64d3c0c9a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_pwr_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_pwr_in_configuration class. +// + `define fuse_ctrl_pwr_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_pwr_in_configuration_s; + + `define fuse_ctrl_pwr_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_pwr_in_configuration_s to_struct();\ + fuse_ctrl_pwr_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_pwr_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_pwr_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_pwr_in_configuration_s fuse_ctrl_pwr_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_pwr_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_pwr_in_transaction class. +// + `define fuse_ctrl_pwr_in_MONITOR_STRUCT typedef struct packed { \ + bit assert_otp_init ; \ + } fuse_ctrl_pwr_in_monitor_s; + + `define fuse_ctrl_pwr_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_pwr_in_monitor_s to_monitor_struct();\ + fuse_ctrl_pwr_in_monitor_struct = \ + { \ + this.assert_otp_init \ + };\ + return ( fuse_ctrl_pwr_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_pwr_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_pwr_in_monitor_s fuse_ctrl_pwr_in_monitor_struct);\ + {\ + this.assert_otp_init \ + } = fuse_ctrl_pwr_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_pwr_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_pwr_in_INITIATOR_STRUCT typedef struct packed { \ + bit assert_otp_init ; \ + } fuse_ctrl_pwr_in_initiator_s; + + `define fuse_ctrl_pwr_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_pwr_in_initiator_s to_initiator_struct();\ + fuse_ctrl_pwr_in_initiator_struct = \ + {\ + this.assert_otp_init \ + };\ + return ( fuse_ctrl_pwr_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_pwr_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_pwr_in_initiator_s fuse_ctrl_pwr_in_initiator_struct);\ + {\ + this.assert_otp_init \ + } = fuse_ctrl_pwr_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_pwr_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_pwr_in_RESPONDER_STRUCT typedef struct packed { \ + bit assert_otp_init ; \ + } fuse_ctrl_pwr_in_responder_s; + + `define fuse_ctrl_pwr_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_pwr_in_responder_s to_responder_struct();\ + fuse_ctrl_pwr_in_responder_struct = \ + {\ + this.assert_otp_init \ + };\ + return ( fuse_ctrl_pwr_in_responder_struct);\ + endfunction + + `define fuse_ctrl_pwr_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_pwr_in_responder_s fuse_ctrl_pwr_in_responder_struct);\ + {\ + this.assert_otp_init \ + } = fuse_ctrl_pwr_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_monitor.svh new file mode 100644 index 000000000..8966b7e75 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_pwr_in transactions observed by the +// fuse_ctrl_pwr_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_in_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_pwr_in_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_pwr_in_monitor_bfm ), + .TRANS_T(fuse_ctrl_pwr_in_transaction )); + + `uvm_component_utils( fuse_ctrl_pwr_in_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_pwr_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_pwr_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_pwr_in_monitor_s fuse_ctrl_pwr_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_pwr_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_monitor_bfm.sv new file mode 100644 index 000000000..a2373ce44 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_monitor_bfm.sv @@ -0,0 +1,191 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_pwr_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_pwr_in monitor through a virtual +// interface handle in the fuse_ctrl_pwr_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_pwr_in_if. +// +// Input signals from the fuse_ctrl_pwr_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_pwr_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_pwr_in_pkg_hdl::*; +`include "src/fuse_ctrl_pwr_in_macros.svh" + + +interface fuse_ctrl_pwr_in_monitor_bfm + ( fuse_ctrl_pwr_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_pwr_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_pwr_in_MONITOR_STRUCT + fuse_ctrl_pwr_in_monitor_s fuse_ctrl_pwr_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_pwr_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i_i; + tri otp_ext_voltage_h_io_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign pwr_otp_i_i = bus.pwr_otp_i; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + + // Proxy handle to UVM monitor + fuse_ctrl_pwr_in_pkg::fuse_ctrl_pwr_in_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_pwr_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_pwr_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_pwr_in_configuration_s fuse_ctrl_pwr_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_pwr_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_pwr_in_monitor_s fuse_ctrl_pwr_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_pwr_in_monitor_struct.assert_otp_init + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_pwr_in_monitor_struct.xyz = pwr_otp_i_i; // [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] + // fuse_ctrl_pwr_in_monitor_struct.xyz = otp_ext_voltage_h_io_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_random_sequence.svh new file mode 100644 index 000000000..bf58cb0ee --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_pwr_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_pwr_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_in_random_sequence + extends fuse_ctrl_pwr_in_sequence_base ; + + `uvm_object_utils( fuse_ctrl_pwr_in_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_pwr_in_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_pwr_in_random_sequence::body()-fuse_ctrl_pwr_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_pwr_in_driver_bfm via the sequencer and fuse_ctrl_pwr_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_pwr_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_responder_sequence.svh new file mode 100644 index 000000000..289f878ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_in_responder_sequence + extends fuse_ctrl_pwr_in_sequence_base ; + + `uvm_object_utils( fuse_ctrl_pwr_in_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_pwr_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_pwr_in_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_sequence_base.svh new file mode 100644 index 000000000..7f03e487e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_in_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_pwr_in_transaction ), + .RSP(fuse_ctrl_pwr_in_transaction )); + + `uvm_object_utils( fuse_ctrl_pwr_in_sequence_base ) + + // variables + typedef fuse_ctrl_pwr_in_transaction fuse_ctrl_pwr_in_transaction_req_t; + fuse_ctrl_pwr_in_transaction_req_t req; + typedef fuse_ctrl_pwr_in_transaction fuse_ctrl_pwr_in_transaction_rsp_t; + fuse_ctrl_pwr_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_pwr_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_pwr_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_transaction.svh new file mode 100644 index 000000000..371c51131 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_transaction.svh @@ -0,0 +1,195 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_pwr_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_in_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_pwr_in_transaction ) + + bit assert_otp_init ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_pwr_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_pwr_in_monitor and fuse_ctrl_pwr_in_monitor_bfm + // This struct is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_MONITOR_STRUCT + fuse_ctrl_pwr_in_monitor_s fuse_ctrl_pwr_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_pwr_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_pwr_in_monitor_struct. + // This function is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_pwr_in_driver and fuse_ctrl_pwr_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_pwr_in_driver_bfm. + // This struct is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_INITIATOR_STRUCT + fuse_ctrl_pwr_in_initiator_s fuse_ctrl_pwr_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_pwr_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_pwr_in_initiator_struct. + // This function is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_pwr_in_driver and fuse_ctrl_pwr_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_pwr_in_driver_bfm. + // This struct is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_RESPONDER_STRUCT + fuse_ctrl_pwr_in_responder_s fuse_ctrl_pwr_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_pwr_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_pwr_in_responder_struct. + // This function is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("assert_otp_init:0x%x ",assert_otp_init); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_pwr_in_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_pwr_in_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.assert_otp_init = RHS.assert_otp_init; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_pwr_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,assert_otp_init,"assert_otp_init"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_transaction_coverage.svh new file mode 100644 index 000000000..4bbaa5e7b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_transaction_coverage.svh @@ -0,0 +1,84 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_pwr_in transaction information using +// a covergroup named fuse_ctrl_pwr_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_in_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_pwr_in_transaction )); + + `uvm_component_utils( fuse_ctrl_pwr_in_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_pwr_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + assert_otp_init: coverpoint coverage_trans.assert_otp_init; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_pwr_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_pwr_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_pwr_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_pwr_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/yaml/fuse_ctrl_pwr_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/yaml/fuse_ctrl_pwr_in_interface.yaml new file mode 100644 index 000000000..ec63253f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/yaml/fuse_ctrl_pwr_in_interface.yaml @@ -0,0 +1,33 @@ +uvmf: + interfaces: + fuse_ctrl_pwr_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: output + name: pwr_otp_i + reset_value: '''bz' + width: '[''$bits(pwrmgr_pkg::pwr_otp_req_t)'']' + - dir: inout + name: otp_ext_voltage_h_io + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: assert_otp_init + type: bit + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/.project new file mode 100644 index 000000000..a43a448fe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_pwr_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/.svproject new file mode 100644 index 000000000..20bf29405 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/Makefile new file mode 100644 index 000000000..412c5be02 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_pwr_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_pwr_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hvl.f + +fuse_ctrl_pwr_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hdl.f + +fuse_ctrl_pwr_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_xrtl.f + +COMP_fuse_ctrl_pwr_out_PKG_TGT_0 = q_comp_fuse_ctrl_pwr_out_pkg +COMP_fuse_ctrl_pwr_out_PKG_TGT_1 = v_comp_fuse_ctrl_pwr_out_pkg +COMP_fuse_ctrl_pwr_out_PKG_TGT = $(COMP_fuse_ctrl_pwr_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_pwr_out_pkg: $(COMP_fuse_ctrl_pwr_out_PKG_TGT) + +q_comp_fuse_ctrl_pwr_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_pwr_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_pwr_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_pwr_out_PKG_XRTL) + +v_comp_fuse_ctrl_pwr_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_pwr_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_pwr_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_pwr_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_pwr_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_pwr_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_pwr_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_pwr_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_pwr_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_pwr_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_pwr_out_pkg += -I$(fuse_ctrl_pwr_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_pwr_out_pkg += $(fuse_ctrl_pwr_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_pwr_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_pwr_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_pwr_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_pwr_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_pwr_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_pwr_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/compile.do new file mode 100644 index 000000000..da19a9005 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_pwr_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out.compile new file mode 100644 index 000000000..3739adcd8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_pwr_out_hvl.compile + - fuse_ctrl_pwr_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_bfm.vinfo new file mode 100644 index 000000000..40b8da1de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_pwr_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_pwr_out_if.sv +src/fuse_ctrl_pwr_out_driver_bfm.sv +src/fuse_ctrl_pwr_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_common.compile new file mode 100644 index 000000000..13236612e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_pwr_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hdl.f new file mode 100644 index 000000000..d6ce3f2a3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hvl.f new file mode 100644 index 000000000..8545586ce --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_xrtl.f new file mode 100644 index 000000000..eddc5dda6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_hdl.compile new file mode 100644 index 000000000..7cca6d2df --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_pwr_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_pwr_out_if.sv + - src/fuse_ctrl_pwr_out_monitor_bfm.sv + - src/fuse_ctrl_pwr_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_hvl.compile new file mode 100644 index 000000000..daaff80fa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_pwr_out_common.compile +incdir: + - . +src: + - fuse_ctrl_pwr_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg.sv new file mode 100644 index 000000000..632f46c8f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_pwr_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_pwr_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_pwr_out_macros.svh" + + export fuse_ctrl_pwr_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_pwr_out_typedefs.svh" + `include "src/fuse_ctrl_pwr_out_transaction.svh" + + `include "src/fuse_ctrl_pwr_out_configuration.svh" + `include "src/fuse_ctrl_pwr_out_driver.svh" + `include "src/fuse_ctrl_pwr_out_monitor.svh" + + `include "src/fuse_ctrl_pwr_out_transaction_coverage.svh" + `include "src/fuse_ctrl_pwr_out_sequence_base.svh" + `include "src/fuse_ctrl_pwr_out_random_sequence.svh" + + `include "src/fuse_ctrl_pwr_out_responder_sequence.svh" + `include "src/fuse_ctrl_pwr_out2reg_adapter.svh" + + `include "src/fuse_ctrl_pwr_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg.vinfo new file mode 100644 index 000000000..fd4dfbdf9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_pwr_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_pwr_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_hdl.sv new file mode 100644 index 000000000..9d8ba22cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_pwr_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_pwr_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_pwr_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_hdl.vinfo new file mode 100644 index 000000000..6be7b78a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_pwr_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_sve.F new file mode 100644 index 000000000..2ca94bc40 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out2reg_adapter.svh new file mode 100644 index 000000000..4dc675a52 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_pwr_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_out2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_pwr_out2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_pwr_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_pwr_out_transaction trans_h = fuse_ctrl_pwr_out_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_pwr_out_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_pwr_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_agent.svh new file mode 100644 index 000000000..a1f6f3921 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_out_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_pwr_out_configuration ), + .DRIVER_T(fuse_ctrl_pwr_out_driver ), + .MONITOR_T(fuse_ctrl_pwr_out_monitor ), + .COVERAGE_T(fuse_ctrl_pwr_out_transaction_coverage ), + .TRANS_T(fuse_ctrl_pwr_out_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_pwr_out_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_configuration.svh new file mode 100644 index 000000000..669971d36 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_pwr_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_out_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_pwr_out_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_pwr_out_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_pwr_out_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_pwr_out_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_pwr_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_CONFIGURATION_STRUCT + fuse_ctrl_pwr_out_configuration_s fuse_ctrl_pwr_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_pwr_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_pwr_out_configuration_struct. + // This function is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_pwr_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_pwr_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_pwr_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_pwr_out_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_pwr_out_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_pwr_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_pwr_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_pwr_out_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_driver.svh new file mode 100644 index 000000000..dd7809272 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_out_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_pwr_out_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_pwr_out_driver_bfm ), + .REQ(fuse_ctrl_pwr_out_transaction ), + .RSP(fuse_ctrl_pwr_out_transaction )); + + `uvm_component_utils( fuse_ctrl_pwr_out_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_pwr_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_pwr_out_driver and fuse_ctrl_pwr_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_pwr_out_driver_bfm. +`fuse_ctrl_pwr_out_INITIATOR_STRUCT + fuse_ctrl_pwr_out_initiator_s fuse_ctrl_pwr_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_pwr_out_driver and fuse_ctrl_pwr_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_pwr_out_driver_bfm. +`fuse_ctrl_pwr_out_RESPONDER_STRUCT + fuse_ctrl_pwr_out_responder_s fuse_ctrl_pwr_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_pwr_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_pwr_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_pwr_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_pwr_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_driver_bfm.sv new file mode 100644 index 000000000..973336690 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_driver_bfm.sv @@ -0,0 +1,294 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_pwr_out signal driving. It is +// accessed by the uvm fuse_ctrl_pwr_out driver through a virtual interface +// handle in the fuse_ctrl_pwr_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_pwr_out_if. +// +// Input signals from the fuse_ctrl_pwr_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_pwr_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_pwr_out_pkg_hdl::*; +`include "src/fuse_ctrl_pwr_out_macros.svh" + +interface fuse_ctrl_pwr_out_driver_bfm + (fuse_ctrl_pwr_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_pwr_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_i; + reg [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + tri otp_ext_voltage_h_io_i; + reg otp_ext_voltage_h_io_o = 'bz; + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign pwr_otp_o_i = bus.pwr_otp_o; + assign bus.pwr_otp_o = (initiator_responder == RESPONDER) ? pwr_otp_o_o : 'bz; + + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.otp_ext_voltage_h_io = otp_ext_voltage_h_io_o; + + // Proxy handle to UVM driver + fuse_ctrl_pwr_out_pkg::fuse_ctrl_pwr_out_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_pwr_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_pwr_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_pwr_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_pwr_out_driver and fuse_ctrl_pwr_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_pwr_out_driver_bfm. + `fuse_ctrl_pwr_out_INITIATOR_STRUCT + fuse_ctrl_pwr_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_pwr_out_driver and fuse_ctrl_pwr_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_pwr_out_driver_bfm. + `fuse_ctrl_pwr_out_RESPONDER_STRUCT + fuse_ctrl_pwr_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + pwr_otp_o_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + otp_ext_voltage_h_io_o <= 'bz; + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_pwr_out_configuration_s fuse_ctrl_pwr_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_pwr_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_pwr_out_initiator_s fuse_ctrl_pwr_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_pwr_out_responder_s fuse_ctrl_pwr_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_pwr_out_initiator_struct: + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Members within the fuse_ctrl_pwr_out_responder_struct: + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + initiator_struct = fuse_ctrl_pwr_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_pwr_out_responder_struct.xyz = pwr_otp_o_i; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // Initiator inout signals + // fuse_ctrl_pwr_out_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_pwr_out_initiator_struct.xyz; // + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_pwr_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_pwr_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_pwr_out_initiator_s fuse_ctrl_pwr_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_pwr_out_responder_s fuse_ctrl_pwr_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_pwr_out_initiator_struct: + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Variables within the fuse_ctrl_pwr_out_responder_struct: + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // fuse_ctrl_pwr_out_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // pwr_otp_o_o <= fuse_ctrl_pwr_out_initiator_struct.xyz; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // Responder inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_pwr_out_initiator_struct.xyz; // + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_pwr_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_pwr_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_if.sv new file mode 100644 index 000000000..d8a00c80b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_if.sv @@ -0,0 +1,83 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_pwr_out interface signals. +// It is instantiated once per fuse_ctrl_pwr_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_pwr_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_pwr_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_pwr_out_bus.pwr_otp_o), // Agent input +// .dut_signal_port(fuse_ctrl_pwr_out_bus.otp_ext_voltage_h_io), // Agent inout + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_pwr_out_pkg_hdl::*; + +interface fuse_ctrl_pwr_out_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o, + inout tri otp_ext_voltage_h_io + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input pwr_otp_o, + input otp_ext_voltage_h_io + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input pwr_otp_o, + inout otp_ext_voltage_h_io + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output pwr_otp_o, + inout otp_ext_voltage_h_io + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_macros.svh new file mode 100644 index 000000000..8d5aca7a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_pwr_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_pwr_out_configuration class. +// + `define fuse_ctrl_pwr_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_pwr_out_configuration_s; + + `define fuse_ctrl_pwr_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_pwr_out_configuration_s to_struct();\ + fuse_ctrl_pwr_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_pwr_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_pwr_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_pwr_out_configuration_s fuse_ctrl_pwr_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_pwr_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_pwr_out_transaction class. +// + `define fuse_ctrl_pwr_out_MONITOR_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_pwr_out_monitor_s; + + `define fuse_ctrl_pwr_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_pwr_out_monitor_s to_monitor_struct();\ + fuse_ctrl_pwr_out_monitor_struct = \ + { \ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_pwr_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_pwr_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_pwr_out_monitor_s fuse_ctrl_pwr_out_monitor_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_pwr_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_pwr_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_pwr_out_INITIATOR_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_pwr_out_initiator_s; + + `define fuse_ctrl_pwr_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_pwr_out_initiator_s to_initiator_struct();\ + fuse_ctrl_pwr_out_initiator_struct = \ + {\ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_pwr_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_pwr_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_pwr_out_initiator_s fuse_ctrl_pwr_out_initiator_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_pwr_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_pwr_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_pwr_out_RESPONDER_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_pwr_out_responder_s; + + `define fuse_ctrl_pwr_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_pwr_out_responder_s to_responder_struct();\ + fuse_ctrl_pwr_out_responder_struct = \ + {\ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_pwr_out_responder_struct);\ + endfunction + + `define fuse_ctrl_pwr_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_pwr_out_responder_s fuse_ctrl_pwr_out_responder_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_pwr_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_monitor.svh new file mode 100644 index 000000000..bfd354e5f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_pwr_out transactions observed by the +// fuse_ctrl_pwr_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_out_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_pwr_out_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_pwr_out_monitor_bfm ), + .TRANS_T(fuse_ctrl_pwr_out_transaction )); + + `uvm_component_utils( fuse_ctrl_pwr_out_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_pwr_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_pwr_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_pwr_out_monitor_s fuse_ctrl_pwr_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_pwr_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_monitor_bfm.sv new file mode 100644 index 000000000..3c25c0212 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_monitor_bfm.sv @@ -0,0 +1,191 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_pwr_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_pwr_out monitor through a virtual +// interface handle in the fuse_ctrl_pwr_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_pwr_out_if. +// +// Input signals from the fuse_ctrl_pwr_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_pwr_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_pwr_out_pkg_hdl::*; +`include "src/fuse_ctrl_pwr_out_macros.svh" + + +interface fuse_ctrl_pwr_out_monitor_bfm + ( fuse_ctrl_pwr_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_pwr_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_pwr_out_MONITOR_STRUCT + fuse_ctrl_pwr_out_monitor_s fuse_ctrl_pwr_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_pwr_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_i; + tri otp_ext_voltage_h_io_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign pwr_otp_o_i = bus.pwr_otp_o; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + + // Proxy handle to UVM monitor + fuse_ctrl_pwr_out_pkg::fuse_ctrl_pwr_out_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_pwr_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_pwr_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_pwr_out_configuration_s fuse_ctrl_pwr_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_pwr_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_pwr_out_monitor_s fuse_ctrl_pwr_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_pwr_out_monitor_struct.pwr_otp_o + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_pwr_out_monitor_struct.xyz = pwr_otp_o_i; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // fuse_ctrl_pwr_out_monitor_struct.xyz = otp_ext_voltage_h_io_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_random_sequence.svh new file mode 100644 index 000000000..319e48704 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_pwr_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_pwr_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_out_random_sequence + extends fuse_ctrl_pwr_out_sequence_base ; + + `uvm_object_utils( fuse_ctrl_pwr_out_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_pwr_out_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_pwr_out_random_sequence::body()-fuse_ctrl_pwr_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_pwr_out_driver_bfm via the sequencer and fuse_ctrl_pwr_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_pwr_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_responder_sequence.svh new file mode 100644 index 000000000..d34cce767 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_out_responder_sequence + extends fuse_ctrl_pwr_out_sequence_base ; + + `uvm_object_utils( fuse_ctrl_pwr_out_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_pwr_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_pwr_out_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_sequence_base.svh new file mode 100644 index 000000000..aa01f7116 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_out_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_pwr_out_transaction ), + .RSP(fuse_ctrl_pwr_out_transaction )); + + `uvm_object_utils( fuse_ctrl_pwr_out_sequence_base ) + + // variables + typedef fuse_ctrl_pwr_out_transaction fuse_ctrl_pwr_out_transaction_req_t; + fuse_ctrl_pwr_out_transaction_req_t req; + typedef fuse_ctrl_pwr_out_transaction fuse_ctrl_pwr_out_transaction_rsp_t; + fuse_ctrl_pwr_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_pwr_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_pwr_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_transaction.svh new file mode 100644 index 000000000..339833a00 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_transaction.svh @@ -0,0 +1,196 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_pwr_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_out_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_pwr_out_transaction ) + + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_pwr_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_pwr_out_monitor and fuse_ctrl_pwr_out_monitor_bfm + // This struct is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_MONITOR_STRUCT + fuse_ctrl_pwr_out_monitor_s fuse_ctrl_pwr_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_pwr_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_pwr_out_monitor_struct. + // This function is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_pwr_out_driver and fuse_ctrl_pwr_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_pwr_out_driver_bfm. + // This struct is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_INITIATOR_STRUCT + fuse_ctrl_pwr_out_initiator_s fuse_ctrl_pwr_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_pwr_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_pwr_out_initiator_struct. + // This function is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_pwr_out_driver and fuse_ctrl_pwr_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_pwr_out_driver_bfm. + // This struct is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_RESPONDER_STRUCT + fuse_ctrl_pwr_out_responder_s fuse_ctrl_pwr_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_pwr_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_pwr_out_responder_struct. + // This function is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("pwr_otp_o:0x%x ",pwr_otp_o); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_pwr_out_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.pwr_otp_o == RHS.pwr_otp_o) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_pwr_out_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.pwr_otp_o = RHS.pwr_otp_o; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_pwr_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,pwr_otp_o,"pwr_otp_o"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_transaction_coverage.svh new file mode 100644 index 000000000..d50449a73 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_transaction_coverage.svh @@ -0,0 +1,84 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_pwr_out transaction information using +// a covergroup named fuse_ctrl_pwr_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_out_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_pwr_out_transaction )); + + `uvm_component_utils( fuse_ctrl_pwr_out_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_pwr_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + pwr_otp_o: coverpoint coverage_trans.pwr_otp_o; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_pwr_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_pwr_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_pwr_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_pwr_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/yaml/fuse_ctrl_pwr_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/yaml/fuse_ctrl_pwr_out_interface.yaml new file mode 100644 index 000000000..30b59a245 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/yaml/fuse_ctrl_pwr_out_interface.yaml @@ -0,0 +1,33 @@ +uvmf: + interfaces: + fuse_ctrl_pwr_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: input + name: pwr_otp_o + reset_value: '''bz' + width: '[''$bits(pwrmgr_pkg::pwr_otp_rsp_t)'']' + - dir: inout + name: otp_ext_voltage_h_io + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: pwr_otp_o + type: pwrmgr_pkg::pwr_otp_rsp_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/.project new file mode 100644 index 000000000..942f586e8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_rst_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/.svproject new file mode 100644 index 000000000..8ad76331b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/Makefile new file mode 100644 index 000000000..7a8fb498a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_rst_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_rst_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_hvl.f + +fuse_ctrl_rst_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_hdl.f + +fuse_ctrl_rst_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_xrtl.f + +COMP_fuse_ctrl_rst_in_PKG_TGT_0 = q_comp_fuse_ctrl_rst_in_pkg +COMP_fuse_ctrl_rst_in_PKG_TGT_1 = v_comp_fuse_ctrl_rst_in_pkg +COMP_fuse_ctrl_rst_in_PKG_TGT = $(COMP_fuse_ctrl_rst_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_rst_in_pkg: $(COMP_fuse_ctrl_rst_in_PKG_TGT) + +q_comp_fuse_ctrl_rst_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_rst_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_rst_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_rst_in_PKG_XRTL) + +v_comp_fuse_ctrl_rst_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_rst_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_rst_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_rst_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_rst_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_rst_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_rst_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_rst_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_rst_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_rst_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_rst_in_pkg += -I$(fuse_ctrl_rst_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_rst_in_pkg += $(fuse_ctrl_rst_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_rst_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_rst_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_rst_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_rst_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_rst_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_rst_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/compile.do new file mode 100644 index 000000000..8fe1b2380 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_rst_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in.compile new file mode 100644 index 000000000..fdf807f5a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_rst_in_hvl.compile + - fuse_ctrl_rst_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_bfm.vinfo new file mode 100644 index 000000000..acb7e422c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_rst_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_rst_in_if.sv +src/fuse_ctrl_rst_in_driver_bfm.sv +src/fuse_ctrl_rst_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_common.compile new file mode 100644 index 000000000..66aaa5877 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_rst_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_hdl.f new file mode 100644 index 000000000..19c43688f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_hvl.f new file mode 100644 index 000000000..1a4457838 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_xrtl.f new file mode 100644 index 000000000..2a4fd6596 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_hdl.compile new file mode 100644 index 000000000..a3d5a616a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_rst_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_rst_in_if.sv + - src/fuse_ctrl_rst_in_monitor_bfm.sv + - src/fuse_ctrl_rst_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_hvl.compile new file mode 100644 index 000000000..26e18a789 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_rst_in_common.compile +incdir: + - . +src: + - fuse_ctrl_rst_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg.sv new file mode 100644 index 000000000..05dd6ee30 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_rst_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_rst_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_rst_in_macros.svh" + + export fuse_ctrl_rst_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_rst_in_typedefs.svh" + `include "src/fuse_ctrl_rst_in_transaction.svh" + + `include "src/fuse_ctrl_rst_in_configuration.svh" + `include "src/fuse_ctrl_rst_in_driver.svh" + `include "src/fuse_ctrl_rst_in_monitor.svh" + + `include "src/fuse_ctrl_rst_in_transaction_coverage.svh" + `include "src/fuse_ctrl_rst_in_sequence_base.svh" + `include "src/fuse_ctrl_rst_in_random_sequence.svh" + + `include "src/fuse_ctrl_rst_in_responder_sequence.svh" + `include "src/fuse_ctrl_rst_in2reg_adapter.svh" + + `include "src/fuse_ctrl_rst_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg.vinfo new file mode 100644 index 000000000..37f56607f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_rst_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_rst_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg_hdl.sv new file mode 100644 index 000000000..57235319e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_rst_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_rst_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_rst_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg_hdl.vinfo new file mode 100644 index 000000000..313c0e887 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_rst_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg_sve.F new file mode 100644 index 000000000..d9e5416d2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in2reg_adapter.svh new file mode 100644 index 000000000..00428f282 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_rst_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_in2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_rst_in2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_rst_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_rst_in_transaction trans_h = fuse_ctrl_rst_in_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_rst_in_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_rst_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_agent.svh new file mode 100644 index 000000000..2de920a98 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_in_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_rst_in_configuration ), + .DRIVER_T(fuse_ctrl_rst_in_driver ), + .MONITOR_T(fuse_ctrl_rst_in_monitor ), + .COVERAGE_T(fuse_ctrl_rst_in_transaction_coverage ), + .TRANS_T(fuse_ctrl_rst_in_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_rst_in_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_configuration.svh new file mode 100644 index 000000000..3010ecf6d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_rst_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_in_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_rst_in_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_rst_in_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_rst_in_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_rst_in_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_rst_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_rst_in_macros.svh + `fuse_ctrl_rst_in_CONFIGURATION_STRUCT + fuse_ctrl_rst_in_configuration_s fuse_ctrl_rst_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_rst_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_rst_in_configuration_struct. + // This function is defined in fuse_ctrl_rst_in_macros.svh + `fuse_ctrl_rst_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_rst_in_macros.svh + `fuse_ctrl_rst_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_rst_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_rst_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_rst_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_rst_in_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_rst_in_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_rst_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_rst_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_rst_in_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_driver.svh new file mode 100644 index 000000000..e691b017a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_in_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_rst_in_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_rst_in_driver_bfm ), + .REQ(fuse_ctrl_rst_in_transaction ), + .RSP(fuse_ctrl_rst_in_transaction )); + + `uvm_component_utils( fuse_ctrl_rst_in_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_rst_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_rst_in_driver and fuse_ctrl_rst_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_rst_in_driver_bfm. +`fuse_ctrl_rst_in_INITIATOR_STRUCT + fuse_ctrl_rst_in_initiator_s fuse_ctrl_rst_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_rst_in_driver and fuse_ctrl_rst_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_rst_in_driver_bfm. +`fuse_ctrl_rst_in_RESPONDER_STRUCT + fuse_ctrl_rst_in_responder_s fuse_ctrl_rst_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_rst_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_rst_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_rst_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_rst_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_driver_bfm.sv new file mode 100644 index 000000000..b992b394b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_driver_bfm.sv @@ -0,0 +1,298 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_rst_in signal driving. It is +// accessed by the uvm fuse_ctrl_rst_in driver through a virtual interface +// handle in the fuse_ctrl_rst_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_rst_in_if. +// +// Input signals from the fuse_ctrl_rst_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_rst_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_rst_in_pkg_hdl::*; +`include "src/fuse_ctrl_rst_in_macros.svh" + +interface fuse_ctrl_rst_in_driver_bfm + (fuse_ctrl_rst_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_rst_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i_i; + reg [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i_o = 'bz; + + // Bi-directional signals + tri otp_ext_voltage_h_io_i; + reg otp_ext_voltage_h_io_o = 'bz; + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.pwr_otp_i = (initiator_responder == INITIATOR) ? pwr_otp_i_o : 'bz; + assign pwr_otp_i_i = bus.pwr_otp_i; + assign bus.otp_ext_voltage_h_io = otp_ext_voltage_h_io_o; + + // Proxy handle to UVM driver + fuse_ctrl_rst_in_pkg::fuse_ctrl_rst_in_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_rst_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_rst_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_rst_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_rst_in_driver and fuse_ctrl_rst_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_rst_in_driver_bfm. + `fuse_ctrl_rst_in_INITIATOR_STRUCT + fuse_ctrl_rst_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_rst_in_driver and fuse_ctrl_rst_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_rst_in_driver_bfm. + `fuse_ctrl_rst_in_RESPONDER_STRUCT + fuse_ctrl_rst_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + pwr_otp_i_o <= 'bz; + // Bi-directional signals + otp_ext_voltage_h_io_o <= 'bz; + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_rst_in_configuration_s fuse_ctrl_rst_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_rst_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_rst_in_initiator_s fuse_ctrl_rst_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_rst_in_responder_s fuse_ctrl_rst_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_rst_in_initiator_struct: + // bit assert_rst ; + // bit assert_otp_pwr_init ; + // Members within the fuse_ctrl_rst_in_responder_struct: + // bit assert_rst ; + // bit assert_otp_pwr_init ; + initiator_struct = fuse_ctrl_rst_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // fuse_ctrl_rst_in_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // pwr_otp_i_o <= fuse_ctrl_rst_in_initiator_struct.xyz; // [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] + // Initiator inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_rst_in_initiator_struct.xyz; // + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_rst_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_rst_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_rst_in_initiator_s fuse_ctrl_rst_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_rst_in_responder_s fuse_ctrl_rst_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_rst_in_initiator_struct: + // bit assert_rst ; + // bit assert_otp_pwr_init ; + // Variables within the fuse_ctrl_rst_in_responder_struct: + // bit assert_rst ; + // bit assert_otp_pwr_init ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_rst_in_responder_struct.xyz = pwr_otp_i_i; // [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] + // Responder inout signals + // fuse_ctrl_rst_in_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_rst_in_initiator_struct.xyz; // + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_rst_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_rst_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_if.sv new file mode 100644 index 000000000..de04ea930 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_if.sv @@ -0,0 +1,83 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_rst_in interface signals. +// It is instantiated once per fuse_ctrl_rst_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_rst_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_rst_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_rst_in_bus.pwr_otp_i), // Agent output +// .dut_signal_port(fuse_ctrl_rst_in_bus.otp_ext_voltage_h_io), // Agent inout + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_rst_in_pkg_hdl::*; + +interface fuse_ctrl_rst_in_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i, + inout tri otp_ext_voltage_h_io + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input pwr_otp_i, + input otp_ext_voltage_h_io + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output pwr_otp_i, + inout otp_ext_voltage_h_io + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input pwr_otp_i, + inout otp_ext_voltage_h_io + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_macros.svh new file mode 100644 index 000000000..a7124a6cd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_macros.svh @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_rst_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_rst_in_configuration class. +// + `define fuse_ctrl_rst_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_rst_in_configuration_s; + + `define fuse_ctrl_rst_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_in_configuration_s to_struct();\ + fuse_ctrl_rst_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_rst_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_rst_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_rst_in_configuration_s fuse_ctrl_rst_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_rst_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_rst_in_transaction class. +// + `define fuse_ctrl_rst_in_MONITOR_STRUCT typedef struct packed { \ + bit assert_rst ; \ + bit assert_otp_pwr_init ; \ + } fuse_ctrl_rst_in_monitor_s; + + `define fuse_ctrl_rst_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_in_monitor_s to_monitor_struct();\ + fuse_ctrl_rst_in_monitor_struct = \ + { \ + this.assert_rst , \ + this.assert_otp_pwr_init \ + };\ + return ( fuse_ctrl_rst_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_rst_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_rst_in_monitor_s fuse_ctrl_rst_in_monitor_struct);\ + {\ + this.assert_rst , \ + this.assert_otp_pwr_init \ + } = fuse_ctrl_rst_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_rst_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_rst_in_INITIATOR_STRUCT typedef struct packed { \ + bit assert_rst ; \ + bit assert_otp_pwr_init ; \ + } fuse_ctrl_rst_in_initiator_s; + + `define fuse_ctrl_rst_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_in_initiator_s to_initiator_struct();\ + fuse_ctrl_rst_in_initiator_struct = \ + {\ + this.assert_rst , \ + this.assert_otp_pwr_init \ + };\ + return ( fuse_ctrl_rst_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_rst_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_rst_in_initiator_s fuse_ctrl_rst_in_initiator_struct);\ + {\ + this.assert_rst , \ + this.assert_otp_pwr_init \ + } = fuse_ctrl_rst_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_rst_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_rst_in_RESPONDER_STRUCT typedef struct packed { \ + bit assert_rst ; \ + bit assert_otp_pwr_init ; \ + } fuse_ctrl_rst_in_responder_s; + + `define fuse_ctrl_rst_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_in_responder_s to_responder_struct();\ + fuse_ctrl_rst_in_responder_struct = \ + {\ + this.assert_rst , \ + this.assert_otp_pwr_init \ + };\ + return ( fuse_ctrl_rst_in_responder_struct);\ + endfunction + + `define fuse_ctrl_rst_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_rst_in_responder_s fuse_ctrl_rst_in_responder_struct);\ + {\ + this.assert_rst , \ + this.assert_otp_pwr_init \ + } = fuse_ctrl_rst_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_monitor.svh new file mode 100644 index 000000000..f160bbcb3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_rst_in transactions observed by the +// fuse_ctrl_rst_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_in_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_rst_in_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_rst_in_monitor_bfm ), + .TRANS_T(fuse_ctrl_rst_in_transaction )); + + `uvm_component_utils( fuse_ctrl_rst_in_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_rst_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_rst_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_rst_in_monitor_s fuse_ctrl_rst_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_rst_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_monitor_bfm.sv new file mode 100644 index 000000000..0e43766fa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_monitor_bfm.sv @@ -0,0 +1,192 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_rst_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_rst_in monitor through a virtual +// interface handle in the fuse_ctrl_rst_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_rst_in_if. +// +// Input signals from the fuse_ctrl_rst_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_rst_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_rst_in_pkg_hdl::*; +`include "src/fuse_ctrl_rst_in_macros.svh" + + +interface fuse_ctrl_rst_in_monitor_bfm + ( fuse_ctrl_rst_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_rst_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_rst_in_MONITOR_STRUCT + fuse_ctrl_rst_in_monitor_s fuse_ctrl_rst_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_rst_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i_i; + tri otp_ext_voltage_h_io_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign pwr_otp_i_i = bus.pwr_otp_i; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + + // Proxy handle to UVM monitor + fuse_ctrl_rst_in_pkg::fuse_ctrl_rst_in_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_rst_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_rst_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_rst_in_configuration_s fuse_ctrl_rst_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_rst_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_rst_in_monitor_s fuse_ctrl_rst_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_rst_in_monitor_struct.assert_rst + // // fuse_ctrl_rst_in_monitor_struct.assert_otp_pwr_init + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_rst_in_monitor_struct.xyz = pwr_otp_i_i; // [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] + // fuse_ctrl_rst_in_monitor_struct.xyz = otp_ext_voltage_h_io_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_random_sequence.svh new file mode 100644 index 000000000..99ba931d1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_rst_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_rst_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_in_random_sequence + extends fuse_ctrl_rst_in_sequence_base ; + + `uvm_object_utils( fuse_ctrl_rst_in_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_rst_in_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_rst_in_random_sequence::body()-fuse_ctrl_rst_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_rst_in_driver_bfm via the sequencer and fuse_ctrl_rst_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_rst_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_responder_sequence.svh new file mode 100644 index 000000000..96f0fa3a7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_in_responder_sequence + extends fuse_ctrl_rst_in_sequence_base ; + + `uvm_object_utils( fuse_ctrl_rst_in_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_rst_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_rst_in_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_sequence_base.svh new file mode 100644 index 000000000..47c3b89f6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_in_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_rst_in_transaction ), + .RSP(fuse_ctrl_rst_in_transaction )); + + `uvm_object_utils( fuse_ctrl_rst_in_sequence_base ) + + // variables + typedef fuse_ctrl_rst_in_transaction fuse_ctrl_rst_in_transaction_req_t; + fuse_ctrl_rst_in_transaction_req_t req; + typedef fuse_ctrl_rst_in_transaction fuse_ctrl_rst_in_transaction_rsp_t; + fuse_ctrl_rst_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_rst_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_rst_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_transaction.svh new file mode 100644 index 000000000..83d7dbc7d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_transaction.svh @@ -0,0 +1,198 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_rst_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_in_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_rst_in_transaction ) + + bit assert_rst ; + bit assert_otp_pwr_init ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_rst_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_rst_in_monitor and fuse_ctrl_rst_in_monitor_bfm + // This struct is defined in fuse_ctrl_rst_in_macros.svh + `fuse_ctrl_rst_in_MONITOR_STRUCT + fuse_ctrl_rst_in_monitor_s fuse_ctrl_rst_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_rst_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_rst_in_monitor_struct. + // This function is defined in fuse_ctrl_rst_in_macros.svh + `fuse_ctrl_rst_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_rst_in_macros.svh + `fuse_ctrl_rst_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_rst_in_driver and fuse_ctrl_rst_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_rst_in_driver_bfm. + // This struct is defined in fuse_ctrl_rst_in_macros.svh + `fuse_ctrl_rst_in_INITIATOR_STRUCT + fuse_ctrl_rst_in_initiator_s fuse_ctrl_rst_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_rst_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_rst_in_initiator_struct. + // This function is defined in fuse_ctrl_rst_in_macros.svh + `fuse_ctrl_rst_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_rst_in_macros.svh + `fuse_ctrl_rst_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_rst_in_driver and fuse_ctrl_rst_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_rst_in_driver_bfm. + // This struct is defined in fuse_ctrl_rst_in_macros.svh + `fuse_ctrl_rst_in_RESPONDER_STRUCT + fuse_ctrl_rst_in_responder_s fuse_ctrl_rst_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_rst_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_rst_in_responder_struct. + // This function is defined in fuse_ctrl_rst_in_macros.svh + `fuse_ctrl_rst_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_rst_in_macros.svh + `fuse_ctrl_rst_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("assert_rst:0x%x assert_otp_pwr_init:0x%x ",assert_rst,assert_otp_pwr_init); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_rst_in_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_rst_in_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.assert_rst = RHS.assert_rst; + this.assert_otp_pwr_init = RHS.assert_otp_pwr_init; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_rst_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,assert_rst,"assert_rst"); + $add_attribute(transaction_view_h,assert_otp_pwr_init,"assert_otp_pwr_init"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_transaction_coverage.svh new file mode 100644 index 000000000..32b88a02d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_transaction_coverage.svh @@ -0,0 +1,85 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_rst_in transaction information using +// a covergroup named fuse_ctrl_rst_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_in_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_rst_in_transaction )); + + `uvm_component_utils( fuse_ctrl_rst_in_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_rst_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + assert_rst: coverpoint coverage_trans.assert_rst; + assert_otp_pwr_init: coverpoint coverage_trans.assert_otp_pwr_init; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_rst_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_rst_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_rst_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_rst_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/yaml/fuse_ctrl_rst_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/yaml/fuse_ctrl_rst_in_interface.yaml new file mode 100644 index 000000000..6da6d45ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/yaml/fuse_ctrl_rst_in_interface.yaml @@ -0,0 +1,39 @@ +uvmf: + interfaces: + fuse_ctrl_rst_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: output + name: pwr_otp_i + reset_value: '''bz' + width: '[''$bits(pwrmgr_pkg::pwr_otp_req_t)'']' + - dir: inout + name: otp_ext_voltage_h_io + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: assert_rst + type: bit + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: assert_otp_pwr_init + type: bit + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/.project new file mode 100644 index 000000000..dfcfc9a71 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_rst_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/.svproject new file mode 100644 index 000000000..e389a42fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/Makefile new file mode 100644 index 000000000..cec1c89e7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_rst_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_rst_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_hvl.f + +fuse_ctrl_rst_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_hdl.f + +fuse_ctrl_rst_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_xrtl.f + +COMP_fuse_ctrl_rst_out_PKG_TGT_0 = q_comp_fuse_ctrl_rst_out_pkg +COMP_fuse_ctrl_rst_out_PKG_TGT_1 = v_comp_fuse_ctrl_rst_out_pkg +COMP_fuse_ctrl_rst_out_PKG_TGT = $(COMP_fuse_ctrl_rst_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_rst_out_pkg: $(COMP_fuse_ctrl_rst_out_PKG_TGT) + +q_comp_fuse_ctrl_rst_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_rst_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_rst_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_rst_out_PKG_XRTL) + +v_comp_fuse_ctrl_rst_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_rst_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_rst_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_rst_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_rst_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_rst_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_rst_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_rst_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_rst_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_rst_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_rst_out_pkg += -I$(fuse_ctrl_rst_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_rst_out_pkg += $(fuse_ctrl_rst_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_rst_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_rst_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_rst_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_rst_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_rst_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_rst_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/compile.do new file mode 100644 index 000000000..d9a26ba15 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_rst_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out.compile new file mode 100644 index 000000000..d3c0b4656 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_rst_out_hvl.compile + - fuse_ctrl_rst_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_bfm.vinfo new file mode 100644 index 000000000..6c2d817a0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_rst_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_rst_out_if.sv +src/fuse_ctrl_rst_out_driver_bfm.sv +src/fuse_ctrl_rst_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_common.compile new file mode 100644 index 000000000..f6f7480f0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_rst_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_hdl.f new file mode 100644 index 000000000..a63bb95cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_hvl.f new file mode 100644 index 000000000..411a2c846 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_xrtl.f new file mode 100644 index 000000000..7fb91c04b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_hdl.compile new file mode 100644 index 000000000..e4bbfccd4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_rst_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_rst_out_if.sv + - src/fuse_ctrl_rst_out_monitor_bfm.sv + - src/fuse_ctrl_rst_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_hvl.compile new file mode 100644 index 000000000..71b0f73d5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_rst_out_common.compile +incdir: + - . +src: + - fuse_ctrl_rst_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg.sv new file mode 100644 index 000000000..114980ca1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_rst_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_rst_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_rst_out_macros.svh" + + export fuse_ctrl_rst_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_rst_out_typedefs.svh" + `include "src/fuse_ctrl_rst_out_transaction.svh" + + `include "src/fuse_ctrl_rst_out_configuration.svh" + `include "src/fuse_ctrl_rst_out_driver.svh" + `include "src/fuse_ctrl_rst_out_monitor.svh" + + `include "src/fuse_ctrl_rst_out_transaction_coverage.svh" + `include "src/fuse_ctrl_rst_out_sequence_base.svh" + `include "src/fuse_ctrl_rst_out_random_sequence.svh" + + `include "src/fuse_ctrl_rst_out_responder_sequence.svh" + `include "src/fuse_ctrl_rst_out2reg_adapter.svh" + + `include "src/fuse_ctrl_rst_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg.vinfo new file mode 100644 index 000000000..e11706307 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_rst_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_rst_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg_hdl.sv new file mode 100644 index 000000000..0dca9e611 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_rst_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_rst_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_rst_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg_hdl.vinfo new file mode 100644 index 000000000..3d6a42bb1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_rst_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg_sve.F new file mode 100644 index 000000000..a4e1931ab --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out2reg_adapter.svh new file mode 100644 index 000000000..ebcb194e5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_rst_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_out2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_rst_out2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_rst_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_rst_out_transaction trans_h = fuse_ctrl_rst_out_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_rst_out_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_rst_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_agent.svh new file mode 100644 index 000000000..72f514f70 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_out_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_rst_out_configuration ), + .DRIVER_T(fuse_ctrl_rst_out_driver ), + .MONITOR_T(fuse_ctrl_rst_out_monitor ), + .COVERAGE_T(fuse_ctrl_rst_out_transaction_coverage ), + .TRANS_T(fuse_ctrl_rst_out_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_rst_out_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_configuration.svh new file mode 100644 index 000000000..cc1788a1d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_rst_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_out_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_rst_out_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_rst_out_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_rst_out_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_rst_out_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_rst_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_rst_out_macros.svh + `fuse_ctrl_rst_out_CONFIGURATION_STRUCT + fuse_ctrl_rst_out_configuration_s fuse_ctrl_rst_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_rst_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_rst_out_configuration_struct. + // This function is defined in fuse_ctrl_rst_out_macros.svh + `fuse_ctrl_rst_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_rst_out_macros.svh + `fuse_ctrl_rst_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_rst_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_rst_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_rst_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_rst_out_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_rst_out_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_rst_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_rst_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_rst_out_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_driver.svh new file mode 100644 index 000000000..6b15dc277 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_out_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_rst_out_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_rst_out_driver_bfm ), + .REQ(fuse_ctrl_rst_out_transaction ), + .RSP(fuse_ctrl_rst_out_transaction )); + + `uvm_component_utils( fuse_ctrl_rst_out_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_rst_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_rst_out_driver and fuse_ctrl_rst_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_rst_out_driver_bfm. +`fuse_ctrl_rst_out_INITIATOR_STRUCT + fuse_ctrl_rst_out_initiator_s fuse_ctrl_rst_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_rst_out_driver and fuse_ctrl_rst_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_rst_out_driver_bfm. +`fuse_ctrl_rst_out_RESPONDER_STRUCT + fuse_ctrl_rst_out_responder_s fuse_ctrl_rst_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_rst_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_rst_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_rst_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_rst_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_driver_bfm.sv new file mode 100644 index 000000000..b66cf3d3e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_driver_bfm.sv @@ -0,0 +1,294 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_rst_out signal driving. It is +// accessed by the uvm fuse_ctrl_rst_out driver through a virtual interface +// handle in the fuse_ctrl_rst_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_rst_out_if. +// +// Input signals from the fuse_ctrl_rst_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_rst_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_rst_out_pkg_hdl::*; +`include "src/fuse_ctrl_rst_out_macros.svh" + +interface fuse_ctrl_rst_out_driver_bfm + (fuse_ctrl_rst_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_rst_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_i; + reg [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + tri otp_ext_voltage_h_io_i; + reg otp_ext_voltage_h_io_o = 'bz; + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign pwr_otp_o_i = bus.pwr_otp_o; + assign bus.pwr_otp_o = (initiator_responder == RESPONDER) ? pwr_otp_o_o : 'bz; + + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.otp_ext_voltage_h_io = otp_ext_voltage_h_io_o; + + // Proxy handle to UVM driver + fuse_ctrl_rst_out_pkg::fuse_ctrl_rst_out_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_rst_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_rst_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_rst_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_rst_out_driver and fuse_ctrl_rst_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_rst_out_driver_bfm. + `fuse_ctrl_rst_out_INITIATOR_STRUCT + fuse_ctrl_rst_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_rst_out_driver and fuse_ctrl_rst_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_rst_out_driver_bfm. + `fuse_ctrl_rst_out_RESPONDER_STRUCT + fuse_ctrl_rst_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + pwr_otp_o_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + otp_ext_voltage_h_io_o <= 'bz; + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_rst_out_configuration_s fuse_ctrl_rst_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_rst_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_rst_out_initiator_s fuse_ctrl_rst_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_rst_out_responder_s fuse_ctrl_rst_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_rst_out_initiator_struct: + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Members within the fuse_ctrl_rst_out_responder_struct: + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + initiator_struct = fuse_ctrl_rst_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_rst_out_responder_struct.xyz = pwr_otp_o_i; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // Initiator inout signals + // fuse_ctrl_rst_out_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_rst_out_initiator_struct.xyz; // + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_rst_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_rst_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_rst_out_initiator_s fuse_ctrl_rst_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_rst_out_responder_s fuse_ctrl_rst_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_rst_out_initiator_struct: + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Variables within the fuse_ctrl_rst_out_responder_struct: + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // fuse_ctrl_rst_out_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // pwr_otp_o_o <= fuse_ctrl_rst_out_initiator_struct.xyz; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // Responder inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_rst_out_initiator_struct.xyz; // + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_rst_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_rst_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_if.sv new file mode 100644 index 000000000..d510f9f64 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_if.sv @@ -0,0 +1,83 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_rst_out interface signals. +// It is instantiated once per fuse_ctrl_rst_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_rst_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_rst_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_rst_out_bus.pwr_otp_o), // Agent input +// .dut_signal_port(fuse_ctrl_rst_out_bus.otp_ext_voltage_h_io), // Agent inout + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_rst_out_pkg_hdl::*; + +interface fuse_ctrl_rst_out_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o, + inout tri otp_ext_voltage_h_io + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input pwr_otp_o, + input otp_ext_voltage_h_io + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input pwr_otp_o, + inout otp_ext_voltage_h_io + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output pwr_otp_o, + inout otp_ext_voltage_h_io + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_macros.svh new file mode 100644 index 000000000..244a2c7ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_rst_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_rst_out_configuration class. +// + `define fuse_ctrl_rst_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_rst_out_configuration_s; + + `define fuse_ctrl_rst_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_out_configuration_s to_struct();\ + fuse_ctrl_rst_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_rst_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_rst_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_rst_out_configuration_s fuse_ctrl_rst_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_rst_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_rst_out_transaction class. +// + `define fuse_ctrl_rst_out_MONITOR_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_rst_out_monitor_s; + + `define fuse_ctrl_rst_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_out_monitor_s to_monitor_struct();\ + fuse_ctrl_rst_out_monitor_struct = \ + { \ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_rst_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_rst_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_rst_out_monitor_s fuse_ctrl_rst_out_monitor_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_rst_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_rst_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_rst_out_INITIATOR_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_rst_out_initiator_s; + + `define fuse_ctrl_rst_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_out_initiator_s to_initiator_struct();\ + fuse_ctrl_rst_out_initiator_struct = \ + {\ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_rst_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_rst_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_rst_out_initiator_s fuse_ctrl_rst_out_initiator_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_rst_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_rst_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_rst_out_RESPONDER_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_rst_out_responder_s; + + `define fuse_ctrl_rst_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_out_responder_s to_responder_struct();\ + fuse_ctrl_rst_out_responder_struct = \ + {\ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_rst_out_responder_struct);\ + endfunction + + `define fuse_ctrl_rst_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_rst_out_responder_s fuse_ctrl_rst_out_responder_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_rst_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_monitor.svh new file mode 100644 index 000000000..22093ba38 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_rst_out transactions observed by the +// fuse_ctrl_rst_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_out_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_rst_out_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_rst_out_monitor_bfm ), + .TRANS_T(fuse_ctrl_rst_out_transaction )); + + `uvm_component_utils( fuse_ctrl_rst_out_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_rst_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_rst_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_rst_out_monitor_s fuse_ctrl_rst_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_rst_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_monitor_bfm.sv new file mode 100644 index 000000000..596760d61 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_monitor_bfm.sv @@ -0,0 +1,191 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_rst_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_rst_out monitor through a virtual +// interface handle in the fuse_ctrl_rst_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_rst_out_if. +// +// Input signals from the fuse_ctrl_rst_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_rst_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_rst_out_pkg_hdl::*; +`include "src/fuse_ctrl_rst_out_macros.svh" + + +interface fuse_ctrl_rst_out_monitor_bfm + ( fuse_ctrl_rst_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_rst_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_rst_out_MONITOR_STRUCT + fuse_ctrl_rst_out_monitor_s fuse_ctrl_rst_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_rst_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_i; + tri otp_ext_voltage_h_io_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign pwr_otp_o_i = bus.pwr_otp_o; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + + // Proxy handle to UVM monitor + fuse_ctrl_rst_out_pkg::fuse_ctrl_rst_out_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_rst_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_rst_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_rst_out_configuration_s fuse_ctrl_rst_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_rst_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_rst_out_monitor_s fuse_ctrl_rst_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_rst_out_monitor_struct.pwr_otp_o + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_rst_out_monitor_struct.xyz = pwr_otp_o_i; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // fuse_ctrl_rst_out_monitor_struct.xyz = otp_ext_voltage_h_io_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_random_sequence.svh new file mode 100644 index 000000000..448cc51dd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_rst_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_rst_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_out_random_sequence + extends fuse_ctrl_rst_out_sequence_base ; + + `uvm_object_utils( fuse_ctrl_rst_out_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_rst_out_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_rst_out_random_sequence::body()-fuse_ctrl_rst_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_rst_out_driver_bfm via the sequencer and fuse_ctrl_rst_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_rst_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_responder_sequence.svh new file mode 100644 index 000000000..0a1e3cb9c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_out_responder_sequence + extends fuse_ctrl_rst_out_sequence_base ; + + `uvm_object_utils( fuse_ctrl_rst_out_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_rst_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_rst_out_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_sequence_base.svh new file mode 100644 index 000000000..e4c8255a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_out_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_rst_out_transaction ), + .RSP(fuse_ctrl_rst_out_transaction )); + + `uvm_object_utils( fuse_ctrl_rst_out_sequence_base ) + + // variables + typedef fuse_ctrl_rst_out_transaction fuse_ctrl_rst_out_transaction_req_t; + fuse_ctrl_rst_out_transaction_req_t req; + typedef fuse_ctrl_rst_out_transaction fuse_ctrl_rst_out_transaction_rsp_t; + fuse_ctrl_rst_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_rst_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_rst_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_transaction.svh new file mode 100644 index 000000000..55736433d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_transaction.svh @@ -0,0 +1,196 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_rst_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_out_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_rst_out_transaction ) + + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_rst_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_rst_out_monitor and fuse_ctrl_rst_out_monitor_bfm + // This struct is defined in fuse_ctrl_rst_out_macros.svh + `fuse_ctrl_rst_out_MONITOR_STRUCT + fuse_ctrl_rst_out_monitor_s fuse_ctrl_rst_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_rst_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_rst_out_monitor_struct. + // This function is defined in fuse_ctrl_rst_out_macros.svh + `fuse_ctrl_rst_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_rst_out_macros.svh + `fuse_ctrl_rst_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_rst_out_driver and fuse_ctrl_rst_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_rst_out_driver_bfm. + // This struct is defined in fuse_ctrl_rst_out_macros.svh + `fuse_ctrl_rst_out_INITIATOR_STRUCT + fuse_ctrl_rst_out_initiator_s fuse_ctrl_rst_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_rst_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_rst_out_initiator_struct. + // This function is defined in fuse_ctrl_rst_out_macros.svh + `fuse_ctrl_rst_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_rst_out_macros.svh + `fuse_ctrl_rst_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_rst_out_driver and fuse_ctrl_rst_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_rst_out_driver_bfm. + // This struct is defined in fuse_ctrl_rst_out_macros.svh + `fuse_ctrl_rst_out_RESPONDER_STRUCT + fuse_ctrl_rst_out_responder_s fuse_ctrl_rst_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_rst_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_rst_out_responder_struct. + // This function is defined in fuse_ctrl_rst_out_macros.svh + `fuse_ctrl_rst_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_rst_out_macros.svh + `fuse_ctrl_rst_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("pwr_otp_o:0x%x ",pwr_otp_o); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_rst_out_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.pwr_otp_o == RHS.pwr_otp_o) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_rst_out_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.pwr_otp_o = RHS.pwr_otp_o; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_rst_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,pwr_otp_o,"pwr_otp_o"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_transaction_coverage.svh new file mode 100644 index 000000000..ef38834e1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_transaction_coverage.svh @@ -0,0 +1,84 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_rst_out transaction information using +// a covergroup named fuse_ctrl_rst_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_out_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_rst_out_transaction )); + + `uvm_component_utils( fuse_ctrl_rst_out_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_rst_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + pwr_otp_o: coverpoint coverage_trans.pwr_otp_o; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_rst_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_rst_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_rst_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_rst_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/yaml/fuse_ctrl_rst_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/yaml/fuse_ctrl_rst_out_interface.yaml new file mode 100644 index 000000000..ca4764b9d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/yaml/fuse_ctrl_rst_out_interface.yaml @@ -0,0 +1,33 @@ +uvmf: + interfaces: + fuse_ctrl_rst_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: input + name: pwr_otp_o + reset_value: '''bz' + width: '[''$bits(pwrmgr_pkg::pwr_otp_rsp_t)'']' + - dir: inout + name: otp_ext_voltage_h_io + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: pwr_otp_o + type: pwrmgr_pkg::pwr_otp_rsp_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.project new file mode 100644 index 000000000..ffd5f9686 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_rst_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.svproject new file mode 100644 index 000000000..79beebd45 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/Makefile new file mode 100644 index 000000000..4067417f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_rst interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_rst_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f + +fuse_ctrl_rst_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f + +fuse_ctrl_rst_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f + +COMP_fuse_ctrl_rst_PKG_TGT_0 = q_comp_fuse_ctrl_rst_pkg +COMP_fuse_ctrl_rst_PKG_TGT_1 = v_comp_fuse_ctrl_rst_pkg +COMP_fuse_ctrl_rst_PKG_TGT = $(COMP_fuse_ctrl_rst_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_rst_pkg: $(COMP_fuse_ctrl_rst_PKG_TGT) + +q_comp_fuse_ctrl_rst_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_rst_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_rst_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_rst_PKG_XRTL) + +v_comp_fuse_ctrl_rst_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_rst_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_rst_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_rst_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_rst_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_rst_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_rst_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_rst_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_rst_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_rst_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_rst_pkg += -I$(fuse_ctrl_rst_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_rst_pkg += $(fuse_ctrl_rst_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_rst_pkg += \ + \ + -o .so + +comp_fuse_ctrl_rst_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_rst_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_rst_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_rst_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_rst_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/compile.do new file mode 100644 index 000000000..935ebc791 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_rst interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile new file mode 100644 index 000000000..98756cb39 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_rst_hvl.compile + - fuse_ctrl_rst_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo new file mode 100644 index 000000000..c41b1f119 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_rst_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_rst_if.sv +src/fuse_ctrl_rst_driver_bfm.sv +src/fuse_ctrl_rst_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_common.compile new file mode 100644 index 000000000..098d340ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_rst_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f new file mode 100644 index 000000000..a5e629a59 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f new file mode 100644 index 000000000..9bddd1e32 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f new file mode 100644 index 000000000..a68e85753 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hdl.compile new file mode 100644 index 000000000..5e99298f4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_rst_common.compile +incdir: + - . +src: + - src/fuse_ctrl_rst_if.sv + - src/fuse_ctrl_rst_monitor_bfm.sv + - src/fuse_ctrl_rst_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hvl.compile new file mode 100644 index 000000000..69ab1ac56 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_rst_common.compile +incdir: + - . +src: + - fuse_ctrl_rst_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv new file mode 100644 index 000000000..2ea60c87c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_rst_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_rst_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_rst_macros.svh" + + export fuse_ctrl_rst_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_rst_typedefs.svh" + `include "src/fuse_ctrl_rst_transaction.svh" + + `include "src/fuse_ctrl_rst_configuration.svh" + `include "src/fuse_ctrl_rst_driver.svh" + `include "src/fuse_ctrl_rst_monitor.svh" + + `include "src/fuse_ctrl_rst_transaction_coverage.svh" + `include "src/fuse_ctrl_rst_sequence_base.svh" + `include "src/fuse_ctrl_rst_random_sequence.svh" + + `include "src/fuse_ctrl_rst_responder_sequence.svh" + `include "src/fuse_ctrl_rst2reg_adapter.svh" + + `include "src/fuse_ctrl_rst_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo new file mode 100644 index 000000000..7efd3da90 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_rst_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_rst_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.sv new file mode 100644 index 000000000..59c4ce0d1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_rst_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_rst_typedefs_hdl.svh" + `include "src/fuse_ctrl_rst_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.vinfo new file mode 100644 index 000000000..105e5a267 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_rst_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F new file mode 100644 index 000000000..2a76484f8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst2reg_adapter.svh new file mode 100644 index 000000000..e74aaf5c8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_rst interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_rst2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_rst2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_rst_transaction trans_h = fuse_ctrl_rst_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_rst_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_rst2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_agent.svh new file mode 100644 index 000000000..3129024c4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_rst_configuration ), + .DRIVER_T(fuse_ctrl_rst_driver ), + .MONITOR_T(fuse_ctrl_rst_monitor ), + .COVERAGE_T(fuse_ctrl_rst_transaction_coverage ), + .TRANS_T(fuse_ctrl_rst_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_rst_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_configuration.svh new file mode 100644 index 000000000..2b8c3b89a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_rst agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_rst_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_rst_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_rst_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_rst_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_rst_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_CONFIGURATION_STRUCT + fuse_ctrl_rst_configuration_s fuse_ctrl_rst_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_rst_configuration_s + // structure. The function returns the handle to the fuse_ctrl_rst_configuration_struct. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_rst_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_rst_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_rst_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_rst_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_rst_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_rst_configuration_cg.set_inst_name($sformatf("fuse_ctrl_rst_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_rst_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver.svh new file mode 100644 index 000000000..c0c6921a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_rst_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_rst_driver_bfm ), + .REQ(fuse_ctrl_rst_transaction ), + .RSP(fuse_ctrl_rst_transaction )); + + `uvm_component_utils( fuse_ctrl_rst_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_rst_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm +// to communicate initiator driven data to fuse_ctrl_rst_driver_bfm. +`fuse_ctrl_rst_INITIATOR_STRUCT + fuse_ctrl_rst_initiator_s fuse_ctrl_rst_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm +// to communicate Responder driven data to fuse_ctrl_rst_driver_bfm. +`fuse_ctrl_rst_RESPONDER_STRUCT + fuse_ctrl_rst_responder_s fuse_ctrl_rst_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_rst_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_rst_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_rst_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_rst_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver_bfm.sv new file mode 100644 index 000000000..3b43b4098 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver_bfm.sv @@ -0,0 +1,292 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_rst signal driving. It is +// accessed by the uvm fuse_ctrl_rst driver through a virtual interface +// handle in the fuse_ctrl_rst configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_rst_if. +// +// Input signals from the fuse_ctrl_rst_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_rst_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_rst_pkg_hdl::*; +`include "src/fuse_ctrl_rst_macros.svh" + +interface fuse_ctrl_rst_driver_bfm + (fuse_ctrl_rst_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_rst_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri rst_ni_i; + reg rst_ni_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.rst_ni = (initiator_responder == INITIATOR) ? rst_ni_o : 'bz; + assign rst_ni_i = bus.rst_ni; + + // Proxy handle to UVM driver + fuse_ctrl_rst_pkg::fuse_ctrl_rst_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_rst_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_rst_driver to this BFM + // **************************************************************************** + `fuse_ctrl_rst_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm + // to communicate initiator driven data to fuse_ctrl_rst_driver_bfm. + `fuse_ctrl_rst_INITIATOR_STRUCT + fuse_ctrl_rst_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm + // to communicate Responder driven data to fuse_ctrl_rst_driver_bfm. + `fuse_ctrl_rst_RESPONDER_STRUCT + fuse_ctrl_rst_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + rst_ni_o <= 'bz; + pwr_otp_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_rst_configuration_s fuse_ctrl_rst_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_rst_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_rst_initiator_s fuse_ctrl_rst_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_rst_responder_s fuse_ctrl_rst_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_rst_initiator_struct: + // bit assert_rst ; + // bit assert_otp_init ; + // Members within the fuse_ctrl_rst_responder_struct: + // bit assert_rst ; + // bit assert_otp_init ; + initiator_struct = fuse_ctrl_rst_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // rst_ni_o <= fuse_ctrl_rst_initiator_struct.xyz; // + // pwr_otp_i_o <= fuse_ctrl_rst_initiator_struct.xyz; // [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_rst_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_rst_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_rst_initiator_s fuse_ctrl_rst_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_rst_responder_s fuse_ctrl_rst_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_rst_initiator_struct: + // bit assert_rst ; + // bit assert_otp_init ; + // Variables within the fuse_ctrl_rst_responder_struct: + // bit assert_rst ; + // bit assert_otp_init ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_rst_responder_struct.xyz = rst_ni_i; // + // fuse_ctrl_rst_responder_struct.xyz = pwr_otp_i_i; // [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_rst_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_rst_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv new file mode 100644 index 000000000..45947f7cd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv @@ -0,0 +1,78 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_rst interface signals. +// It is instantiated once per fuse_ctrl_rst bus. Bus Functional Models, +// BFM's named fuse_ctrl_rst_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_rst_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_rst_bus.rst_ni), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_rst_pkg_hdl::*; + +interface fuse_ctrl_rst_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri rst_ni + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input rst_ni + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output rst_ni + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input rst_ni + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_macros.svh new file mode 100644 index 000000000..7af53766d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_rst package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_rst_configuration class. +// + `define fuse_ctrl_rst_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_rst_configuration_s; + + `define fuse_ctrl_rst_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_configuration_s to_struct();\ + fuse_ctrl_rst_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_rst_configuration_struct );\ + endfunction + + `define fuse_ctrl_rst_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_rst_configuration_s fuse_ctrl_rst_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_rst_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_rst_transaction class. +// + `define fuse_ctrl_rst_MONITOR_STRUCT typedef struct packed { \ + bit assert_rst ; \ + } fuse_ctrl_rst_monitor_s; + + `define fuse_ctrl_rst_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_monitor_s to_monitor_struct();\ + fuse_ctrl_rst_monitor_struct = \ + { \ + this.assert_rst \ + };\ + return ( fuse_ctrl_rst_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_rst_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_rst_monitor_s fuse_ctrl_rst_monitor_struct);\ + {\ + this.assert_rst \ + } = fuse_ctrl_rst_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_rst_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_rst_INITIATOR_STRUCT typedef struct packed { \ + bit assert_rst ; \ + } fuse_ctrl_rst_initiator_s; + + `define fuse_ctrl_rst_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_initiator_s to_initiator_struct();\ + fuse_ctrl_rst_initiator_struct = \ + {\ + this.assert_rst \ + };\ + return ( fuse_ctrl_rst_initiator_struct);\ + endfunction + + `define fuse_ctrl_rst_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_rst_initiator_s fuse_ctrl_rst_initiator_struct);\ + {\ + this.assert_rst \ + } = fuse_ctrl_rst_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_rst_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_rst_RESPONDER_STRUCT typedef struct packed { \ + bit assert_rst ; \ + } fuse_ctrl_rst_responder_s; + + `define fuse_ctrl_rst_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_responder_s to_responder_struct();\ + fuse_ctrl_rst_responder_struct = \ + {\ + this.assert_rst \ + };\ + return ( fuse_ctrl_rst_responder_struct);\ + endfunction + + `define fuse_ctrl_rst_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_rst_responder_s fuse_ctrl_rst_responder_struct);\ + {\ + this.assert_rst \ + } = fuse_ctrl_rst_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor.svh new file mode 100644 index 000000000..6e829b3a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_rst transactions observed by the +// fuse_ctrl_rst monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_rst_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_rst_monitor_bfm ), + .TRANS_T(fuse_ctrl_rst_transaction )); + + `uvm_component_utils( fuse_ctrl_rst_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_rst_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_rst_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_rst_monitor_s fuse_ctrl_rst_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_rst_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor_bfm.sv new file mode 100644 index 000000000..6ba721bc4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor_bfm.sv @@ -0,0 +1,188 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_rst signal monitoring. +// It is accessed by the uvm fuse_ctrl_rst monitor through a virtual +// interface handle in the fuse_ctrl_rst configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_rst_if. +// +// Input signals from the fuse_ctrl_rst_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_rst bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_rst_pkg_hdl::*; +`include "src/fuse_ctrl_rst_macros.svh" + + +interface fuse_ctrl_rst_monitor_bfm + ( fuse_ctrl_rst_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_rst_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_rst_MONITOR_STRUCT + fuse_ctrl_rst_monitor_s fuse_ctrl_rst_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_rst_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri rst_ni_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign rst_ni_i = bus.rst_ni; + + // Proxy handle to UVM monitor + fuse_ctrl_rst_pkg::fuse_ctrl_rst_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_rst_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_rst_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_rst_configuration_s fuse_ctrl_rst_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_rst_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_rst_monitor_s fuse_ctrl_rst_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_rst_monitor_struct.assert_rst + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_rst_monitor_struct.xyz = rst_ni_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_random_sequence.svh new file mode 100644 index 000000000..2b719a026 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_rst transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_rst_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_random_sequence + extends fuse_ctrl_rst_sequence_base ; + + `uvm_object_utils( fuse_ctrl_rst_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_rst_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_rst_random_sequence::body()-fuse_ctrl_rst_transaction randomization failed") + // Send the transaction to the fuse_ctrl_rst_driver_bfm via the sequencer and fuse_ctrl_rst_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_rst_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_responder_sequence.svh new file mode 100644 index 000000000..85fe8a75e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_responder_sequence + extends fuse_ctrl_rst_sequence_base ; + + `uvm_object_utils( fuse_ctrl_rst_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_rst_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_rst_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_sequence_base.svh new file mode 100644 index 000000000..d6a30499e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_rst_transaction ), + .RSP(fuse_ctrl_rst_transaction )); + + `uvm_object_utils( fuse_ctrl_rst_sequence_base ) + + // variables + typedef fuse_ctrl_rst_transaction fuse_ctrl_rst_transaction_req_t; + fuse_ctrl_rst_transaction_req_t req; + typedef fuse_ctrl_rst_transaction fuse_ctrl_rst_transaction_rsp_t; + fuse_ctrl_rst_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_rst_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_rst_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction.svh new file mode 100644 index 000000000..806f8a2d2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction.svh @@ -0,0 +1,197 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_rst +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_rst_transaction ) + + bit assert_rst ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_rst_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_rst_monitor and fuse_ctrl_rst_monitor_bfm + // This struct is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_MONITOR_STRUCT + fuse_ctrl_rst_monitor_s fuse_ctrl_rst_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_rst_monitor_s + // structure. The function returns the handle to the fuse_ctrl_rst_monitor_struct. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm + // to communicate initiator driven data to fuse_ctrl_rst_driver_bfm. + // This struct is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_INITIATOR_STRUCT + fuse_ctrl_rst_initiator_s fuse_ctrl_rst_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_rst_initiator_s + // structure. The function returns the handle to the fuse_ctrl_rst_initiator_struct. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm + // to communicate Responder driven data to fuse_ctrl_rst_driver_bfm. + // This struct is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_RESPONDER_STRUCT + fuse_ctrl_rst_responder_s fuse_ctrl_rst_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_rst_responder_s + // structure. The function returns the handle to the fuse_ctrl_rst_responder_struct. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("assert_rst:0x%x assert_otp_init:0x%x ",assert_rst,assert_otp_init); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_rst_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_rst_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.assert_rst = RHS.assert_rst; + this.assert_otp_init = RHS.assert_otp_init; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_rst_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,assert_rst,"assert_rst"); + $add_attribute(transaction_view_h,assert_otp_init,"assert_otp_init"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction_coverage.svh new file mode 100644 index 000000000..8bfc9decb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction_coverage.svh @@ -0,0 +1,85 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_rst transaction information using +// a covergroup named fuse_ctrl_rst_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_rst_transaction )); + + `uvm_component_utils( fuse_ctrl_rst_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_rst_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + assert_rst: coverpoint coverage_trans.assert_rst; + assert_otp_init: coverpoint coverage_trans.assert_otp_init; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_rst_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_rst_transaction_cg.set_inst_name($sformatf("fuse_ctrl_rst_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_rst_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/yaml/fuse_ctrl_rst_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/yaml/fuse_ctrl_rst_interface.yaml new file mode 100644 index 000000000..d439455ae --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_rst_pkg/yaml/fuse_ctrl_rst_interface.yaml @@ -0,0 +1,29 @@ +uvmf: + interfaces: + fuse_ctrl_rst: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: output + name: rst_ni + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: assert_rst + type: bit + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.project new file mode 100644 index 000000000..802c3e187 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_secreg_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..be911ec39 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..1eb10014e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_secreg_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_secreg_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f + +fuse_ctrl_secreg_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f + +fuse_ctrl_secreg_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f + +COMP_fuse_ctrl_secreg_axi_read_if_PKG_TGT_0 = q_comp_fuse_ctrl_secreg_axi_read_if_pkg +COMP_fuse_ctrl_secreg_axi_read_if_PKG_TGT_1 = v_comp_fuse_ctrl_secreg_axi_read_if_pkg +COMP_fuse_ctrl_secreg_axi_read_if_PKG_TGT = $(COMP_fuse_ctrl_secreg_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_secreg_axi_read_if_pkg: $(COMP_fuse_ctrl_secreg_axi_read_if_PKG_TGT) + +q_comp_fuse_ctrl_secreg_axi_read_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG_XRTL) + +v_comp_fuse_ctrl_secreg_axi_read_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_secreg_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_if_pkg += -I$(fuse_ctrl_secreg_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_if_pkg += $(fuse_ctrl_secreg_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_secreg_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..04f613c1e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_secreg_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if.compile new file mode 100644 index 000000000..ae2507ea9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_secreg_axi_read_if_hvl.compile + - fuse_ctrl_secreg_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..e97c29c20 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_secreg_axi_read_if_if.sv +src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv +src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_common.compile new file mode 100644 index 000000000..81dd659b6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..220cf1690 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..91290db0d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..3c42c25e3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hdl.compile new file mode 100644 index 000000000..a6821997e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_secreg_axi_read_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_secreg_axi_read_if_if.sv + - src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv + - src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hvl.compile new file mode 100644 index 000000000..8017b8d2c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_secreg_axi_read_if_common.compile +incdir: + - . +src: + - fuse_ctrl_secreg_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.sv new file mode 100644 index 000000000..91a38d680 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_secreg_axi_read_if_macros.svh" + + export fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_secreg_axi_read_if_typedefs.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_transaction.svh" + + `include "src/fuse_ctrl_secreg_axi_read_if_configuration.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_driver.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_monitor.svh" + + `include "src/fuse_ctrl_secreg_axi_read_if_transaction_coverage.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_sequence_base.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_random_sequence.svh" + + `include "src/fuse_ctrl_secreg_axi_read_if_responder_sequence.svh" + `include "src/fuse_ctrl_secreg_axi_read_if2reg_adapter.svh" + + `include "src/fuse_ctrl_secreg_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..3044046cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_secreg_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..e73051e81 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_secreg_axi_read_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..0009d2d8b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..ea92e98f5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..98ba3aacb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_secreg_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_secreg_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_secreg_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_agent.svh new file mode 100644 index 000000000..d2895c679 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_secreg_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_secreg_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_secreg_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_configuration.svh new file mode 100644 index 000000000..981626306 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_secreg_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_secreg_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_secreg_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_CONFIGURATION_STRUCT + fuse_ctrl_secreg_axi_read_if_configuration_s fuse_ctrl_secreg_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_secreg_axi_read_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_if_configuration_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_secreg_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_secreg_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_secreg_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_secreg_axi_read_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver.svh new file mode 100644 index 000000000..ebbf22afa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_secreg_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. +`fuse_ctrl_secreg_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_if_initiator_s fuse_ctrl_secreg_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. +`fuse_ctrl_secreg_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_if_responder_s fuse_ctrl_secreg_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_secreg_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_secreg_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_secreg_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_secreg_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..b440efec7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_secreg_axi_read_if signal driving. It is +// accessed by the uvm fuse_ctrl_secreg_axi_read_if driver through a virtual interface +// handle in the fuse_ctrl_secreg_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_secreg_axi_read_if_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_secreg_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_if_macros.svh" + +interface fuse_ctrl_secreg_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_secreg_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_secreg_axi_read_if_pkg::fuse_ctrl_secreg_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_secreg_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_secreg_axi_read_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_secreg_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. + `fuse_ctrl_secreg_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. + `fuse_ctrl_secreg_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_secreg_axi_read_if_configuration_s fuse_ctrl_secreg_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_secreg_axi_read_if_initiator_s fuse_ctrl_secreg_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_secreg_axi_read_if_responder_s fuse_ctrl_secreg_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_secreg_axi_read_if_initiator_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Members within the fuse_ctrl_secreg_axi_read_if_responder_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + initiator_struct = fuse_ctrl_secreg_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_secreg_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_secreg_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_secreg_axi_read_if_initiator_s fuse_ctrl_secreg_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_secreg_axi_read_if_responder_s fuse_ctrl_secreg_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_secreg_axi_read_if_initiator_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Variables within the fuse_ctrl_secreg_axi_read_if_responder_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arlock_i; // + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_secreg_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_secreg_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_if.sv new file mode 100644 index 000000000..91845e87d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_secreg_axi_read_if interface signals. +// It is instantiated once per fuse_ctrl_secreg_axi_read_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_secreg_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_secreg_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; + +interface fuse_ctrl_secreg_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_macros.svh new file mode 100644 index 000000000..b4d9deeba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_secreg_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_secreg_axi_read_if_configuration class. +// + `define fuse_ctrl_secreg_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_secreg_axi_read_if_configuration_s; + + `define fuse_ctrl_secreg_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_if_configuration_s to_struct();\ + fuse_ctrl_secreg_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_secreg_axi_read_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_secreg_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_secreg_axi_read_if_configuration_s fuse_ctrl_secreg_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_secreg_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_secreg_axi_read_if_transaction class. +// + `define fuse_ctrl_secreg_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_if_monitor_s; + + `define fuse_ctrl_secreg_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_if_monitor_s to_monitor_struct();\ + fuse_ctrl_secreg_axi_read_if_monitor_struct = \ + { \ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_secreg_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_secreg_axi_read_if_monitor_s fuse_ctrl_secreg_axi_read_if_monitor_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_secreg_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_if_initiator_s; + + `define fuse_ctrl_secreg_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_if_initiator_s to_initiator_struct();\ + fuse_ctrl_secreg_axi_read_if_initiator_struct = \ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_secreg_axi_read_if_initiator_s fuse_ctrl_secreg_axi_read_if_initiator_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_secreg_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_if_responder_s; + + `define fuse_ctrl_secreg_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_if_responder_s to_responder_struct();\ + fuse_ctrl_secreg_axi_read_if_responder_struct = \ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_if_responder_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_secreg_axi_read_if_responder_s fuse_ctrl_secreg_axi_read_if_responder_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor.svh new file mode 100644 index 000000000..6addcdb7b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_secreg_axi_read_if transactions observed by the +// fuse_ctrl_secreg_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_secreg_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_secreg_axi_read_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_secreg_axi_read_if_monitor_s fuse_ctrl_secreg_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_secreg_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..7bba9981c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_secreg_axi_read_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_secreg_axi_read_if monitor through a virtual +// interface handle in the fuse_ctrl_secreg_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_secreg_axi_read_if_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_secreg_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_if_macros.svh" + + +interface fuse_ctrl_secreg_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_secreg_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_secreg_axi_read_if_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_if_monitor_s fuse_ctrl_secreg_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_secreg_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_secreg_axi_read_if_pkg::fuse_ctrl_secreg_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_secreg_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_secreg_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_secreg_axi_read_if_configuration_s fuse_ctrl_secreg_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_secreg_axi_read_if_monitor_s fuse_ctrl_secreg_axi_read_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_araddr + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arvalid + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arburst + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arsize + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arlen + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_aruser + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arid + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arlock + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..648972d51 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_secreg_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_secreg_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_secreg_axi_read_if_random_sequence::body()-fuse_ctrl_secreg_axi_read_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_secreg_axi_read_if_driver_bfm via the sequencer and fuse_ctrl_secreg_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_secreg_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..709581bdd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_secreg_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..66bc21078 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_if_transaction_req_t; + fuse_ctrl_secreg_axi_read_if_transaction_req_t req; + typedef fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_if_transaction_rsp_t; + fuse_ctrl_secreg_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_secreg_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_secreg_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction.svh new file mode 100644 index 000000000..c58498d8f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_secreg_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] secreg_araddr ; + logic secreg_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + logic [2:0] secreg_arsize ; + logic [7:0] secreg_arlen ; + logic [UW-1:0] secreg_aruser ; + logic [IW-1:0] secreg_arid ; + logic secreg_arlock ; + logic secreg_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_secreg_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_secreg_axi_read_if_monitor and fuse_ctrl_secreg_axi_read_if_monitor_bfm + // This struct is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_if_monitor_s fuse_ctrl_secreg_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_if_monitor_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_if_initiator_s fuse_ctrl_secreg_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_if_initiator_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_if_responder_s fuse_ctrl_secreg_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_if_responder_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_araddr:0x%x secreg_arvalid:0x%x secreg_arburst:0x%x secreg_arsize:0x%x secreg_arlen:0x%x secreg_aruser:0x%x secreg_arid:0x%x secreg_arlock:0x%x secreg_rready:0x%x ",secreg_araddr,secreg_arvalid,secreg_arburst,secreg_arsize,secreg_arlen,secreg_aruser,secreg_arid,secreg_arlock,secreg_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_araddr = RHS.secreg_araddr; + this.secreg_arvalid = RHS.secreg_arvalid; + this.secreg_arburst = RHS.secreg_arburst; + this.secreg_arsize = RHS.secreg_arsize; + this.secreg_arlen = RHS.secreg_arlen; + this.secreg_aruser = RHS.secreg_aruser; + this.secreg_arid = RHS.secreg_arid; + this.secreg_arlock = RHS.secreg_arlock; + this.secreg_rready = RHS.secreg_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_secreg_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_araddr,"secreg_araddr"); + $add_attribute(transaction_view_h,secreg_arvalid,"secreg_arvalid"); + $add_attribute(transaction_view_h,secreg_arburst,"secreg_arburst"); + $add_attribute(transaction_view_h,secreg_arsize,"secreg_arsize"); + $add_attribute(transaction_view_h,secreg_arlen,"secreg_arlen"); + $add_attribute(transaction_view_h,secreg_aruser,"secreg_aruser"); + $add_attribute(transaction_view_h,secreg_arid,"secreg_arid"); + $add_attribute(transaction_view_h,secreg_arlock,"secreg_arlock"); + $add_attribute(transaction_view_h,secreg_rready,"secreg_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..4da8fb856 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_secreg_axi_read_if transaction information using +// a covergroup named fuse_ctrl_secreg_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_secreg_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_araddr: coverpoint coverage_trans.secreg_araddr; + secreg_arvalid: coverpoint coverage_trans.secreg_arvalid; + secreg_arburst: coverpoint coverage_trans.secreg_arburst; + secreg_arsize: coverpoint coverage_trans.secreg_arsize; + secreg_arlen: coverpoint coverage_trans.secreg_arlen; + secreg_aruser: coverpoint coverage_trans.secreg_aruser; + secreg_arid: coverpoint coverage_trans.secreg_arid; + secreg_arlock: coverpoint coverage_trans.secreg_arlock; + secreg_rready: coverpoint coverage_trans.secreg_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_secreg_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_secreg_axi_read_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_secreg_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/yaml/fuse_ctrl_secreg_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/yaml/fuse_ctrl_secreg_axi_read_if_interface.yaml new file mode 100644 index 000000000..dfcf19887 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/yaml/fuse_ctrl_secreg_axi_read_if_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_secreg_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: secreg_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.project new file mode 100644 index 000000000..9b5119db2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_secreg_axi_read_in_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.svproject new file mode 100644 index 000000000..216cb589b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/Makefile new file mode 100644 index 000000000..ff0b63afb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_secreg_axi_read_in_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_secreg_axi_read_in_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hvl.f + +fuse_ctrl_secreg_axi_read_in_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hdl.f + +fuse_ctrl_secreg_axi_read_in_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_xrtl.f + +COMP_fuse_ctrl_secreg_axi_read_in_if_PKG_TGT_0 = q_comp_fuse_ctrl_secreg_axi_read_in_if_pkg +COMP_fuse_ctrl_secreg_axi_read_in_if_PKG_TGT_1 = v_comp_fuse_ctrl_secreg_axi_read_in_if_pkg +COMP_fuse_ctrl_secreg_axi_read_in_if_PKG_TGT = $(COMP_fuse_ctrl_secreg_axi_read_in_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_secreg_axi_read_in_if_pkg: $(COMP_fuse_ctrl_secreg_axi_read_in_if_PKG_TGT) + +q_comp_fuse_ctrl_secreg_axi_read_in_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG_XRTL) + +v_comp_fuse_ctrl_secreg_axi_read_in_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_secreg_axi_read_in_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_in_if_pkg += -I$(fuse_ctrl_secreg_axi_read_in_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_in_if_pkg += $(fuse_ctrl_secreg_axi_read_in_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_in_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_secreg_axi_read_in_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_in_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_in_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/compile.do new file mode 100644 index 000000000..67fa90a30 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_secreg_axi_read_in_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if.compile new file mode 100644 index 000000000..edfeedfc0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_secreg_axi_read_in_if_hvl.compile + - fuse_ctrl_secreg_axi_read_in_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_bfm.vinfo new file mode 100644 index 000000000..ff090bad6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_secreg_axi_read_in_if_if.sv +src/fuse_ctrl_secreg_axi_read_in_if_driver_bfm.sv +src/fuse_ctrl_secreg_axi_read_in_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_common.compile new file mode 100644 index 000000000..289cd2865 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hdl.f new file mode 100644 index 000000000..a40d395c6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hvl.f new file mode 100644 index 000000000..8d8670a23 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_xrtl.f new file mode 100644 index 000000000..81f832e79 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hdl.compile new file mode 100644 index 000000000..a29a791a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_secreg_axi_read_in_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_secreg_axi_read_in_if_if.sv + - src/fuse_ctrl_secreg_axi_read_in_if_monitor_bfm.sv + - src/fuse_ctrl_secreg_axi_read_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hvl.compile new file mode 100644 index 000000000..5ea481a70 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_secreg_axi_read_in_if_common.compile +incdir: + - . +src: + - fuse_ctrl_secreg_axi_read_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.sv new file mode 100644 index 000000000..ca2fa65e5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_in_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_secreg_axi_read_in_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_secreg_axi_read_in_if_macros.svh" + + export fuse_ctrl_secreg_axi_read_in_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_secreg_axi_read_in_if_typedefs.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_if_transaction.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_if_configuration.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_if_driver.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_if_monitor.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_if_transaction_coverage.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_if_sequence_base.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_if_random_sequence.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_if_responder_sequence.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_if2reg_adapter.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.vinfo new file mode 100644 index 000000000..d85f8b901 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_secreg_axi_read_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv new file mode 100644 index 000000000..faeaeed8a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_in_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_secreg_axi_read_in_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.vinfo new file mode 100644 index 000000000..44fb0c125 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_sve.F new file mode 100644 index 000000000..1256ffedb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if2reg_adapter.svh new file mode 100644 index 000000000..cd5608daf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_secreg_axi_read_in_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_secreg_axi_read_in_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_secreg_axi_read_in_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_agent.svh new file mode 100644 index 000000000..d6359882b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_secreg_axi_read_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_secreg_axi_read_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_secreg_axi_read_in_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_configuration.svh new file mode 100644 index 000000000..f5aa0e94e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_secreg_axi_read_in_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_secreg_axi_read_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_secreg_axi_read_in_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_STRUCT + fuse_ctrl_secreg_axi_read_in_if_configuration_s fuse_ctrl_secreg_axi_read_in_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_secreg_axi_read_in_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_if_configuration_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_secreg_axi_read_in_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_secreg_axi_read_in_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_secreg_axi_read_in_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_secreg_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_secreg_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_secreg_axi_read_in_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_in_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_secreg_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver.svh new file mode 100644 index 000000000..e4ff24f99 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_secreg_axi_read_in_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_secreg_axi_read_in_if_driver and fuse_ctrl_secreg_axi_read_in_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_secreg_axi_read_in_if_driver_bfm. +`fuse_ctrl_secreg_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_in_if_initiator_s fuse_ctrl_secreg_axi_read_in_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_secreg_axi_read_in_if_driver and fuse_ctrl_secreg_axi_read_in_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_secreg_axi_read_in_if_driver_bfm. +`fuse_ctrl_secreg_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_in_if_responder_s fuse_ctrl_secreg_axi_read_in_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_secreg_axi_read_in_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_secreg_axi_read_in_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_secreg_axi_read_in_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_secreg_axi_read_in_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver_bfm.sv new file mode 100644 index 000000000..95d7f303a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_secreg_axi_read_in_if signal driving. It is +// accessed by the uvm fuse_ctrl_secreg_axi_read_in_if driver through a virtual interface +// handle in the fuse_ctrl_secreg_axi_read_in_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_secreg_axi_read_in_if_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_secreg_axi_read_in_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_in_if_macros.svh" + +interface fuse_ctrl_secreg_axi_read_in_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_secreg_axi_read_in_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_in_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_secreg_axi_read_in_if_pkg::fuse_ctrl_secreg_axi_read_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_secreg_axi_read_in_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_secreg_axi_read_in_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_in_if_driver and fuse_ctrl_secreg_axi_read_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_in_if_driver_bfm. + `fuse_ctrl_secreg_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_in_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_secreg_axi_read_in_if_driver and fuse_ctrl_secreg_axi_read_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_in_if_driver_bfm. + `fuse_ctrl_secreg_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_in_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_secreg_axi_read_in_if_configuration_s fuse_ctrl_secreg_axi_read_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_secreg_axi_read_in_if_initiator_s fuse_ctrl_secreg_axi_read_in_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_secreg_axi_read_in_if_responder_s fuse_ctrl_secreg_axi_read_in_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_secreg_axi_read_in_if_initiator_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Members within the fuse_ctrl_secreg_axi_read_in_if_responder_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + initiator_struct = fuse_ctrl_secreg_axi_read_in_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_secreg_axi_read_in_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_secreg_axi_read_in_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_secreg_axi_read_in_if_initiator_s fuse_ctrl_secreg_axi_read_in_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_secreg_axi_read_in_if_responder_s fuse_ctrl_secreg_axi_read_in_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_secreg_axi_read_in_if_initiator_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Variables within the fuse_ctrl_secreg_axi_read_in_if_responder_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = arlock_i; // + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_secreg_axi_read_in_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_secreg_axi_read_in_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_if.sv new file mode 100644 index 000000000..207866a2c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_secreg_axi_read_in_if interface signals. +// It is instantiated once per fuse_ctrl_secreg_axi_read_in_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_secreg_axi_read_in_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_secreg_axi_read_in_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_in_if_pkg_hdl::*; + +interface fuse_ctrl_secreg_axi_read_in_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_macros.svh new file mode 100644 index 000000000..70d9a7aed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_secreg_axi_read_in_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_secreg_axi_read_in_if_configuration class. +// + `define fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_secreg_axi_read_in_if_configuration_s; + + `define fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_if_configuration_s to_struct();\ + fuse_ctrl_secreg_axi_read_in_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_secreg_axi_read_in_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_secreg_axi_read_in_if_configuration_s fuse_ctrl_secreg_axi_read_in_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_secreg_axi_read_in_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_secreg_axi_read_in_if_transaction class. +// + `define fuse_ctrl_secreg_axi_read_in_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_in_if_monitor_s; + + `define fuse_ctrl_secreg_axi_read_in_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_if_monitor_s to_monitor_struct();\ + fuse_ctrl_secreg_axi_read_in_if_monitor_struct = \ + { \ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_in_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_secreg_axi_read_in_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_secreg_axi_read_in_if_monitor_s fuse_ctrl_secreg_axi_read_in_if_monitor_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_in_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_secreg_axi_read_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_in_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_in_if_initiator_s; + + `define fuse_ctrl_secreg_axi_read_in_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_if_initiator_s to_initiator_struct();\ + fuse_ctrl_secreg_axi_read_in_if_initiator_struct = \ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_in_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_in_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_secreg_axi_read_in_if_initiator_s fuse_ctrl_secreg_axi_read_in_if_initiator_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_in_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_secreg_axi_read_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_in_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_in_if_responder_s; + + `define fuse_ctrl_secreg_axi_read_in_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_if_responder_s to_responder_struct();\ + fuse_ctrl_secreg_axi_read_in_if_responder_struct = \ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_in_if_responder_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_in_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_secreg_axi_read_in_if_responder_s fuse_ctrl_secreg_axi_read_in_if_responder_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_in_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor.svh new file mode 100644 index 000000000..f6b696c0a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_secreg_axi_read_in_if transactions observed by the +// fuse_ctrl_secreg_axi_read_in_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_secreg_axi_read_in_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_secreg_axi_read_in_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_secreg_axi_read_in_if_monitor_s fuse_ctrl_secreg_axi_read_in_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_secreg_axi_read_in_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor_bfm.sv new file mode 100644 index 000000000..2a6b5dd00 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_secreg_axi_read_in_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_secreg_axi_read_in_if monitor through a virtual +// interface handle in the fuse_ctrl_secreg_axi_read_in_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_secreg_axi_read_in_if_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_secreg_axi_read_in_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_in_if_macros.svh" + + +interface fuse_ctrl_secreg_axi_read_in_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_secreg_axi_read_in_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_in_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_secreg_axi_read_in_if_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_in_if_monitor_s fuse_ctrl_secreg_axi_read_in_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_secreg_axi_read_in_if_pkg::fuse_ctrl_secreg_axi_read_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_secreg_axi_read_in_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_secreg_axi_read_in_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_secreg_axi_read_in_if_configuration_s fuse_ctrl_secreg_axi_read_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_secreg_axi_read_in_if_monitor_s fuse_ctrl_secreg_axi_read_in_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_araddr + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_arvalid + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_arburst + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_arsize + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_arlen + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_aruser + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_arid + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_arlock + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_random_sequence.svh new file mode 100644 index 000000000..fdbf06a6e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_secreg_axi_read_in_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_secreg_axi_read_in_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_secreg_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_secreg_axi_read_in_if_random_sequence::body()-fuse_ctrl_secreg_axi_read_in_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_secreg_axi_read_in_if_driver_bfm via the sequencer and fuse_ctrl_secreg_axi_read_in_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_secreg_axi_read_in_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_responder_sequence.svh new file mode 100644 index 000000000..e270aad62 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_secreg_axi_read_in_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_secreg_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_sequence_base.svh new file mode 100644 index 000000000..ca8e9725f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_in_if_transaction_req_t; + fuse_ctrl_secreg_axi_read_in_if_transaction_req_t req; + typedef fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_in_if_transaction_rsp_t; + fuse_ctrl_secreg_axi_read_in_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_secreg_axi_read_in_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_secreg_axi_read_in_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction.svh new file mode 100644 index 000000000..aa60a802f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_secreg_axi_read_in_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] secreg_araddr ; + logic secreg_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + logic [2:0] secreg_arsize ; + logic [7:0] secreg_arlen ; + logic [UW-1:0] secreg_aruser ; + logic [IW-1:0] secreg_arid ; + logic secreg_arlock ; + logic secreg_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_secreg_axi_read_in_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_secreg_axi_read_in_if_monitor and fuse_ctrl_secreg_axi_read_in_if_monitor_bfm + // This struct is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_in_if_monitor_s fuse_ctrl_secreg_axi_read_in_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_in_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_if_monitor_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_in_if_driver and fuse_ctrl_secreg_axi_read_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_in_if_initiator_s fuse_ctrl_secreg_axi_read_in_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_in_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_if_initiator_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_secreg_axi_read_in_if_driver and fuse_ctrl_secreg_axi_read_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_in_if_responder_s fuse_ctrl_secreg_axi_read_in_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_in_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_if_responder_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_araddr:0x%x secreg_arvalid:0x%x secreg_arburst:0x%x secreg_arsize:0x%x secreg_arlen:0x%x secreg_aruser:0x%x secreg_arid:0x%x secreg_arlock:0x%x secreg_rready:0x%x ",secreg_araddr,secreg_arvalid,secreg_arburst,secreg_arsize,secreg_arlen,secreg_aruser,secreg_arid,secreg_arlock,secreg_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_araddr = RHS.secreg_araddr; + this.secreg_arvalid = RHS.secreg_arvalid; + this.secreg_arburst = RHS.secreg_arburst; + this.secreg_arsize = RHS.secreg_arsize; + this.secreg_arlen = RHS.secreg_arlen; + this.secreg_aruser = RHS.secreg_aruser; + this.secreg_arid = RHS.secreg_arid; + this.secreg_arlock = RHS.secreg_arlock; + this.secreg_rready = RHS.secreg_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_secreg_axi_read_in_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_araddr,"secreg_araddr"); + $add_attribute(transaction_view_h,secreg_arvalid,"secreg_arvalid"); + $add_attribute(transaction_view_h,secreg_arburst,"secreg_arburst"); + $add_attribute(transaction_view_h,secreg_arsize,"secreg_arsize"); + $add_attribute(transaction_view_h,secreg_arlen,"secreg_arlen"); + $add_attribute(transaction_view_h,secreg_aruser,"secreg_aruser"); + $add_attribute(transaction_view_h,secreg_arid,"secreg_arid"); + $add_attribute(transaction_view_h,secreg_arlock,"secreg_arlock"); + $add_attribute(transaction_view_h,secreg_rready,"secreg_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction_coverage.svh new file mode 100644 index 000000000..3fe27f376 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_secreg_axi_read_in_if transaction information using +// a covergroup named fuse_ctrl_secreg_axi_read_in_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_secreg_axi_read_in_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_araddr: coverpoint coverage_trans.secreg_araddr; + secreg_arvalid: coverpoint coverage_trans.secreg_arvalid; + secreg_arburst: coverpoint coverage_trans.secreg_arburst; + secreg_arsize: coverpoint coverage_trans.secreg_arsize; + secreg_arlen: coverpoint coverage_trans.secreg_arlen; + secreg_aruser: coverpoint coverage_trans.secreg_aruser; + secreg_arid: coverpoint coverage_trans.secreg_arid; + secreg_arlock: coverpoint coverage_trans.secreg_arlock; + secreg_rready: coverpoint coverage_trans.secreg_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_secreg_axi_read_in_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_secreg_axi_read_in_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_in_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_secreg_axi_read_in_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/yaml/fuse_ctrl_secreg_axi_read_in_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/yaml/fuse_ctrl_secreg_axi_read_in_if_interface.yaml new file mode 100644 index 000000000..75a5a8826 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/yaml/fuse_ctrl_secreg_axi_read_in_if_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_secreg_axi_read_in_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: secreg_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.project new file mode 100644 index 000000000..a4da8e376 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_secreg_axi_read_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.svproject new file mode 100644 index 000000000..52a9f8cb9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/Makefile new file mode 100644 index 000000000..0c9fcbd1e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_secreg_axi_read_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_secreg_axi_read_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hvl.f + +fuse_ctrl_secreg_axi_read_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hdl.f + +fuse_ctrl_secreg_axi_read_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_xrtl.f + +COMP_fuse_ctrl_secreg_axi_read_in_PKG_TGT_0 = q_comp_fuse_ctrl_secreg_axi_read_in_pkg +COMP_fuse_ctrl_secreg_axi_read_in_PKG_TGT_1 = v_comp_fuse_ctrl_secreg_axi_read_in_pkg +COMP_fuse_ctrl_secreg_axi_read_in_PKG_TGT = $(COMP_fuse_ctrl_secreg_axi_read_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_secreg_axi_read_in_pkg: $(COMP_fuse_ctrl_secreg_axi_read_in_PKG_TGT) + +q_comp_fuse_ctrl_secreg_axi_read_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG_XRTL) + +v_comp_fuse_ctrl_secreg_axi_read_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_secreg_axi_read_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_in_pkg += -I$(fuse_ctrl_secreg_axi_read_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_in_pkg += $(fuse_ctrl_secreg_axi_read_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_secreg_axi_read_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/compile.do new file mode 100644 index 000000000..88878d432 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_secreg_axi_read_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in.compile new file mode 100644 index 000000000..30a6c81f0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_secreg_axi_read_in_hvl.compile + - fuse_ctrl_secreg_axi_read_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_bfm.vinfo new file mode 100644 index 000000000..7a7c867b2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_secreg_axi_read_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_secreg_axi_read_in_if.sv +src/fuse_ctrl_secreg_axi_read_in_driver_bfm.sv +src/fuse_ctrl_secreg_axi_read_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_common.compile new file mode 100644 index 000000000..34e8920b8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hdl.f new file mode 100644 index 000000000..5f203b951 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hvl.f new file mode 100644 index 000000000..6917a8ff3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_xrtl.f new file mode 100644 index 000000000..4801037d9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hdl.compile new file mode 100644 index 000000000..822c6dae4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_secreg_axi_read_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_secreg_axi_read_in_if.sv + - src/fuse_ctrl_secreg_axi_read_in_monitor_bfm.sv + - src/fuse_ctrl_secreg_axi_read_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hvl.compile new file mode 100644 index 000000000..baf1ae95d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_secreg_axi_read_in_common.compile +incdir: + - . +src: + - fuse_ctrl_secreg_axi_read_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.sv new file mode 100644 index 000000000..411b4957f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_secreg_axi_read_in_macros.svh" + + export fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_secreg_axi_read_in_typedefs.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_transaction.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_configuration.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_driver.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_monitor.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_transaction_coverage.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_sequence_base.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_random_sequence.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_responder_sequence.svh" + `include "src/fuse_ctrl_secreg_axi_read_in2reg_adapter.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.vinfo new file mode 100644 index 000000000..a76e85842 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_secreg_axi_read_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_secreg_axi_read_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv new file mode 100644 index 000000000..1b90f0274 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_secreg_axi_read_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.vinfo new file mode 100644 index 000000000..269b5c06e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_sve.F new file mode 100644 index 000000000..8fec4a904 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in2reg_adapter.svh new file mode 100644 index 000000000..c7d2b13f0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_secreg_axi_read_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_secreg_axi_read_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_secreg_axi_read_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_agent.svh new file mode 100644 index 000000000..59c7181b3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_secreg_axi_read_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_secreg_axi_read_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_secreg_axi_read_in_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_configuration.svh new file mode 100644 index 000000000..c4124708f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_secreg_axi_read_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_secreg_axi_read_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_secreg_axi_read_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_CONFIGURATION_STRUCT + fuse_ctrl_secreg_axi_read_in_configuration_s fuse_ctrl_secreg_axi_read_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_secreg_axi_read_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_configuration_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_secreg_axi_read_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_secreg_axi_read_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_secreg_axi_read_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_secreg_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_secreg_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_secreg_axi_read_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_secreg_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver.svh new file mode 100644 index 000000000..dae487dcd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_secreg_axi_read_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_secreg_axi_read_in_driver and fuse_ctrl_secreg_axi_read_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_secreg_axi_read_in_driver_bfm. +`fuse_ctrl_secreg_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_in_initiator_s fuse_ctrl_secreg_axi_read_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_secreg_axi_read_in_driver and fuse_ctrl_secreg_axi_read_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_secreg_axi_read_in_driver_bfm. +`fuse_ctrl_secreg_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_in_responder_s fuse_ctrl_secreg_axi_read_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_secreg_axi_read_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_secreg_axi_read_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_secreg_axi_read_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_secreg_axi_read_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver_bfm.sv new file mode 100644 index 000000000..4b9b81520 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_secreg_axi_read_in signal driving. It is +// accessed by the uvm fuse_ctrl_secreg_axi_read_in driver through a virtual interface +// handle in the fuse_ctrl_secreg_axi_read_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_secreg_axi_read_in_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_secreg_axi_read_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_in_macros.svh" + +interface fuse_ctrl_secreg_axi_read_in_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_secreg_axi_read_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_secreg_axi_read_in_pkg::fuse_ctrl_secreg_axi_read_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_secreg_axi_read_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_secreg_axi_read_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_secreg_axi_read_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_in_driver and fuse_ctrl_secreg_axi_read_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_in_driver_bfm. + `fuse_ctrl_secreg_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_secreg_axi_read_in_driver and fuse_ctrl_secreg_axi_read_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_in_driver_bfm. + `fuse_ctrl_secreg_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_secreg_axi_read_in_configuration_s fuse_ctrl_secreg_axi_read_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_secreg_axi_read_in_initiator_s fuse_ctrl_secreg_axi_read_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_secreg_axi_read_in_responder_s fuse_ctrl_secreg_axi_read_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_secreg_axi_read_in_initiator_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Members within the fuse_ctrl_secreg_axi_read_in_responder_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + initiator_struct = fuse_ctrl_secreg_axi_read_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_secreg_axi_read_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_secreg_axi_read_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_secreg_axi_read_in_initiator_s fuse_ctrl_secreg_axi_read_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_secreg_axi_read_in_responder_s fuse_ctrl_secreg_axi_read_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_secreg_axi_read_in_initiator_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Variables within the fuse_ctrl_secreg_axi_read_in_responder_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = arlock_i; // + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_secreg_axi_read_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_secreg_axi_read_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_if.sv new file mode 100644 index 000000000..74f7ba6cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_secreg_axi_read_in interface signals. +// It is instantiated once per fuse_ctrl_secreg_axi_read_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_secreg_axi_read_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_secreg_axi_read_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; + +interface fuse_ctrl_secreg_axi_read_in_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_macros.svh new file mode 100644 index 000000000..fd62fe9d0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_secreg_axi_read_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_secreg_axi_read_in_configuration class. +// + `define fuse_ctrl_secreg_axi_read_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_secreg_axi_read_in_configuration_s; + + `define fuse_ctrl_secreg_axi_read_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_configuration_s to_struct();\ + fuse_ctrl_secreg_axi_read_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_secreg_axi_read_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_secreg_axi_read_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_secreg_axi_read_in_configuration_s fuse_ctrl_secreg_axi_read_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_secreg_axi_read_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_secreg_axi_read_in_transaction class. +// + `define fuse_ctrl_secreg_axi_read_in_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_in_monitor_s; + + `define fuse_ctrl_secreg_axi_read_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_monitor_s to_monitor_struct();\ + fuse_ctrl_secreg_axi_read_in_monitor_struct = \ + { \ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_secreg_axi_read_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_secreg_axi_read_in_monitor_s fuse_ctrl_secreg_axi_read_in_monitor_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_secreg_axi_read_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_in_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_in_initiator_s; + + `define fuse_ctrl_secreg_axi_read_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_initiator_s to_initiator_struct();\ + fuse_ctrl_secreg_axi_read_in_initiator_struct = \ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_secreg_axi_read_in_initiator_s fuse_ctrl_secreg_axi_read_in_initiator_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_secreg_axi_read_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_in_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_in_responder_s; + + `define fuse_ctrl_secreg_axi_read_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_responder_s to_responder_struct();\ + fuse_ctrl_secreg_axi_read_in_responder_struct = \ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_in_responder_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_secreg_axi_read_in_responder_s fuse_ctrl_secreg_axi_read_in_responder_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor.svh new file mode 100644 index 000000000..f62bb2c33 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_secreg_axi_read_in transactions observed by the +// fuse_ctrl_secreg_axi_read_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_secreg_axi_read_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_secreg_axi_read_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_secreg_axi_read_in_monitor_s fuse_ctrl_secreg_axi_read_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_secreg_axi_read_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor_bfm.sv new file mode 100644 index 000000000..520864f61 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_secreg_axi_read_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_secreg_axi_read_in monitor through a virtual +// interface handle in the fuse_ctrl_secreg_axi_read_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_secreg_axi_read_in_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_secreg_axi_read_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_in_macros.svh" + + +interface fuse_ctrl_secreg_axi_read_in_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_secreg_axi_read_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_secreg_axi_read_in_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_in_monitor_s fuse_ctrl_secreg_axi_read_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_secreg_axi_read_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_secreg_axi_read_in_pkg::fuse_ctrl_secreg_axi_read_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_secreg_axi_read_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_secreg_axi_read_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_secreg_axi_read_in_configuration_s fuse_ctrl_secreg_axi_read_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_secreg_axi_read_in_monitor_s fuse_ctrl_secreg_axi_read_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_araddr + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_arvalid + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_arburst + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_arsize + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_arlen + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_aruser + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_arid + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_arlock + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_random_sequence.svh new file mode 100644 index 000000000..b2a6f7e7e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_secreg_axi_read_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_secreg_axi_read_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_secreg_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_secreg_axi_read_in_random_sequence::body()-fuse_ctrl_secreg_axi_read_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_secreg_axi_read_in_driver_bfm via the sequencer and fuse_ctrl_secreg_axi_read_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_secreg_axi_read_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_responder_sequence.svh new file mode 100644 index 000000000..c2c7396c0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_secreg_axi_read_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_secreg_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_sequence_base.svh new file mode 100644 index 000000000..dff36dd01 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_in_transaction_req_t; + fuse_ctrl_secreg_axi_read_in_transaction_req_t req; + typedef fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_in_transaction_rsp_t; + fuse_ctrl_secreg_axi_read_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_secreg_axi_read_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_secreg_axi_read_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction.svh new file mode 100644 index 000000000..7a2899ae2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_secreg_axi_read_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] secreg_araddr ; + logic secreg_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + logic [2:0] secreg_arsize ; + logic [7:0] secreg_arlen ; + logic [UW-1:0] secreg_aruser ; + logic [IW-1:0] secreg_arid ; + logic secreg_arlock ; + logic secreg_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_secreg_axi_read_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_secreg_axi_read_in_monitor and fuse_ctrl_secreg_axi_read_in_monitor_bfm + // This struct is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_in_monitor_s fuse_ctrl_secreg_axi_read_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_monitor_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_in_driver and fuse_ctrl_secreg_axi_read_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_in_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_in_initiator_s fuse_ctrl_secreg_axi_read_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_initiator_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_secreg_axi_read_in_driver and fuse_ctrl_secreg_axi_read_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_in_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_in_responder_s fuse_ctrl_secreg_axi_read_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_responder_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_araddr:0x%x secreg_arvalid:0x%x secreg_arburst:0x%x secreg_arsize:0x%x secreg_arlen:0x%x secreg_aruser:0x%x secreg_arid:0x%x secreg_arlock:0x%x secreg_rready:0x%x ",secreg_araddr,secreg_arvalid,secreg_arburst,secreg_arsize,secreg_arlen,secreg_aruser,secreg_arid,secreg_arlock,secreg_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_araddr = RHS.secreg_araddr; + this.secreg_arvalid = RHS.secreg_arvalid; + this.secreg_arburst = RHS.secreg_arburst; + this.secreg_arsize = RHS.secreg_arsize; + this.secreg_arlen = RHS.secreg_arlen; + this.secreg_aruser = RHS.secreg_aruser; + this.secreg_arid = RHS.secreg_arid; + this.secreg_arlock = RHS.secreg_arlock; + this.secreg_rready = RHS.secreg_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_secreg_axi_read_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_araddr,"secreg_araddr"); + $add_attribute(transaction_view_h,secreg_arvalid,"secreg_arvalid"); + $add_attribute(transaction_view_h,secreg_arburst,"secreg_arburst"); + $add_attribute(transaction_view_h,secreg_arsize,"secreg_arsize"); + $add_attribute(transaction_view_h,secreg_arlen,"secreg_arlen"); + $add_attribute(transaction_view_h,secreg_aruser,"secreg_aruser"); + $add_attribute(transaction_view_h,secreg_arid,"secreg_arid"); + $add_attribute(transaction_view_h,secreg_arlock,"secreg_arlock"); + $add_attribute(transaction_view_h,secreg_rready,"secreg_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction_coverage.svh new file mode 100644 index 000000000..586b6770f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_secreg_axi_read_in transaction information using +// a covergroup named fuse_ctrl_secreg_axi_read_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_secreg_axi_read_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_araddr: coverpoint coverage_trans.secreg_araddr; + secreg_arvalid: coverpoint coverage_trans.secreg_arvalid; + secreg_arburst: coverpoint coverage_trans.secreg_arburst; + secreg_arsize: coverpoint coverage_trans.secreg_arsize; + secreg_arlen: coverpoint coverage_trans.secreg_arlen; + secreg_aruser: coverpoint coverage_trans.secreg_aruser; + secreg_arid: coverpoint coverage_trans.secreg_arid; + secreg_arlock: coverpoint coverage_trans.secreg_arlock; + secreg_rready: coverpoint coverage_trans.secreg_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_secreg_axi_read_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_secreg_axi_read_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_secreg_axi_read_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/yaml/fuse_ctrl_secreg_axi_read_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/yaml/fuse_ctrl_secreg_axi_read_in_interface.yaml new file mode 100644 index 000000000..a5ff8dd8b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/yaml/fuse_ctrl_secreg_axi_read_in_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_secreg_axi_read_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: secreg_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.project new file mode 100644 index 000000000..18afeef3d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_secreg_axi_read_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.svproject new file mode 100644 index 000000000..c600cb8e1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/Makefile new file mode 100644 index 000000000..6f4f5542b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_secreg_axi_read_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_secreg_axi_read_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hvl.f + +fuse_ctrl_secreg_axi_read_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hdl.f + +fuse_ctrl_secreg_axi_read_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_xrtl.f + +COMP_fuse_ctrl_secreg_axi_read_out_if_PKG_TGT_0 = q_comp_fuse_ctrl_secreg_axi_read_out_if_pkg +COMP_fuse_ctrl_secreg_axi_read_out_if_PKG_TGT_1 = v_comp_fuse_ctrl_secreg_axi_read_out_if_pkg +COMP_fuse_ctrl_secreg_axi_read_out_if_PKG_TGT = $(COMP_fuse_ctrl_secreg_axi_read_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_secreg_axi_read_out_if_pkg: $(COMP_fuse_ctrl_secreg_axi_read_out_if_PKG_TGT) + +q_comp_fuse_ctrl_secreg_axi_read_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG_XRTL) + +v_comp_fuse_ctrl_secreg_axi_read_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_secreg_axi_read_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_out_if_pkg += -I$(fuse_ctrl_secreg_axi_read_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_out_if_pkg += $(fuse_ctrl_secreg_axi_read_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_out_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_secreg_axi_read_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/compile.do new file mode 100644 index 000000000..9df86868c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_secreg_axi_read_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if.compile new file mode 100644 index 000000000..eb85cfd7c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_secreg_axi_read_out_if_hvl.compile + - fuse_ctrl_secreg_axi_read_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_bfm.vinfo new file mode 100644 index 000000000..0146ca8a1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_secreg_axi_read_out_if_if.sv +src/fuse_ctrl_secreg_axi_read_out_if_driver_bfm.sv +src/fuse_ctrl_secreg_axi_read_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_common.compile new file mode 100644 index 000000000..91b0fa6ac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hdl.f new file mode 100644 index 000000000..8db592711 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hvl.f new file mode 100644 index 000000000..b5b109af5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_xrtl.f new file mode 100644 index 000000000..d0c4b72a5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hdl.compile new file mode 100644 index 000000000..3547429f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_secreg_axi_read_out_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_secreg_axi_read_out_if_if.sv + - src/fuse_ctrl_secreg_axi_read_out_if_monitor_bfm.sv + - src/fuse_ctrl_secreg_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hvl.compile new file mode 100644 index 000000000..43151aea1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_secreg_axi_read_out_if_common.compile +incdir: + - . +src: + - fuse_ctrl_secreg_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.sv new file mode 100644 index 000000000..6ab054b1e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_secreg_axi_read_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_secreg_axi_read_out_if_macros.svh" + + export fuse_ctrl_secreg_axi_read_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_secreg_axi_read_out_if_typedefs.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_if_transaction.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_if_configuration.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_if_driver.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_if_monitor.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_if_transaction_coverage.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_if_sequence_base.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_if_random_sequence.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_if_responder_sequence.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_if2reg_adapter.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.vinfo new file mode 100644 index 000000000..af597b791 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_secreg_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.sv new file mode 100644 index 000000000..b966c748b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_secreg_axi_read_out_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..04a3a2344 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_sve.F new file mode 100644 index 000000000..795ea3865 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if2reg_adapter.svh new file mode 100644 index 000000000..318dd9a3f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_secreg_axi_read_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_secreg_axi_read_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_secreg_axi_read_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_agent.svh new file mode 100644 index 000000000..7481759c6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_secreg_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_secreg_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_secreg_axi_read_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_configuration.svh new file mode 100644 index 000000000..96b86ba40 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_secreg_axi_read_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_secreg_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_secreg_axi_read_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_STRUCT + fuse_ctrl_secreg_axi_read_out_if_configuration_s fuse_ctrl_secreg_axi_read_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_secreg_axi_read_out_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_if_configuration_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_secreg_axi_read_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_secreg_axi_read_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_secreg_axi_read_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_secreg_axi_read_out_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_secreg_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver.svh new file mode 100644 index 000000000..a72957934 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_secreg_axi_read_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_secreg_axi_read_out_if_driver and fuse_ctrl_secreg_axi_read_out_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_secreg_axi_read_out_if_driver_bfm. +`fuse_ctrl_secreg_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_out_if_initiator_s fuse_ctrl_secreg_axi_read_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_secreg_axi_read_out_if_driver and fuse_ctrl_secreg_axi_read_out_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_secreg_axi_read_out_if_driver_bfm. +`fuse_ctrl_secreg_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_out_if_responder_s fuse_ctrl_secreg_axi_read_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_secreg_axi_read_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_secreg_axi_read_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_secreg_axi_read_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_secreg_axi_read_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver_bfm.sv new file mode 100644 index 000000000..b7588ca95 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_secreg_axi_read_out_if signal driving. It is +// accessed by the uvm fuse_ctrl_secreg_axi_read_out_if driver through a virtual interface +// handle in the fuse_ctrl_secreg_axi_read_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_secreg_axi_read_out_if_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_secreg_axi_read_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_out_if_macros.svh" + +interface fuse_ctrl_secreg_axi_read_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_secreg_axi_read_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_secreg_axi_read_out_if_pkg::fuse_ctrl_secreg_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_secreg_axi_read_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_secreg_axi_read_out_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_out_if_driver and fuse_ctrl_secreg_axi_read_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_out_if_driver_bfm. + `fuse_ctrl_secreg_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_secreg_axi_read_out_if_driver and fuse_ctrl_secreg_axi_read_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_out_if_driver_bfm. + `fuse_ctrl_secreg_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_secreg_axi_read_out_if_configuration_s fuse_ctrl_secreg_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_secreg_axi_read_out_if_initiator_s fuse_ctrl_secreg_axi_read_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_secreg_axi_read_out_if_responder_s fuse_ctrl_secreg_axi_read_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_secreg_axi_read_out_if_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Members within the fuse_ctrl_secreg_axi_read_out_if_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + initiator_struct = fuse_ctrl_secreg_axi_read_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_secreg_axi_read_out_if_responder_struct.xyz = arready_i; // + // fuse_ctrl_secreg_axi_read_out_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_secreg_axi_read_out_if_responder_struct.xyz = rresp_i; // + // fuse_ctrl_secreg_axi_read_out_if_responder_struct.xyz = rid_i; // + // fuse_ctrl_secreg_axi_read_out_if_responder_struct.xyz = rlast_i; // + // fuse_ctrl_secreg_axi_read_out_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_secreg_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_secreg_axi_read_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_secreg_axi_read_out_if_initiator_s fuse_ctrl_secreg_axi_read_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_secreg_axi_read_out_if_responder_s fuse_ctrl_secreg_axi_read_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_secreg_axi_read_out_if_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Variables within the fuse_ctrl_secreg_axi_read_out_if_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= fuse_ctrl_secreg_axi_read_out_if_initiator_struct.xyz; // + // rdata_o <= fuse_ctrl_secreg_axi_read_out_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= fuse_ctrl_secreg_axi_read_out_if_initiator_struct.xyz; // + // rid_o <= fuse_ctrl_secreg_axi_read_out_if_initiator_struct.xyz; // + // rlast_o <= fuse_ctrl_secreg_axi_read_out_if_initiator_struct.xyz; // + // rvalid_o <= fuse_ctrl_secreg_axi_read_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_secreg_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_secreg_axi_read_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_if.sv new file mode 100644 index 000000000..73192909d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_secreg_axi_read_out_if interface signals. +// It is instantiated once per fuse_ctrl_secreg_axi_read_out_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_secreg_axi_read_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_secreg_axi_read_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_if_bus.arready), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_if_bus.rdata), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_if_bus.rresp), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_if_bus.rid), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_if_bus.rlast), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_out_if_pkg_hdl::*; + +interface fuse_ctrl_secreg_axi_read_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_macros.svh new file mode 100644 index 000000000..68dec6f33 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_secreg_axi_read_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_secreg_axi_read_out_if_configuration class. +// + `define fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_secreg_axi_read_out_if_configuration_s; + + `define fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_if_configuration_s to_struct();\ + fuse_ctrl_secreg_axi_read_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_secreg_axi_read_out_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_secreg_axi_read_out_if_configuration_s fuse_ctrl_secreg_axi_read_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_secreg_axi_read_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_secreg_axi_read_out_if_transaction class. +// + `define fuse_ctrl_secreg_axi_read_out_if_MONITOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } fuse_ctrl_secreg_axi_read_out_if_monitor_s; + + `define fuse_ctrl_secreg_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_if_monitor_s to_monitor_struct();\ + fuse_ctrl_secreg_axi_read_out_if_monitor_struct = \ + { \ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( fuse_ctrl_secreg_axi_read_out_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_secreg_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_secreg_axi_read_out_if_monitor_s fuse_ctrl_secreg_axi_read_out_if_monitor_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = fuse_ctrl_secreg_axi_read_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_secreg_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } fuse_ctrl_secreg_axi_read_out_if_initiator_s; + + `define fuse_ctrl_secreg_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_if_initiator_s to_initiator_struct();\ + fuse_ctrl_secreg_axi_read_out_if_initiator_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( fuse_ctrl_secreg_axi_read_out_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_secreg_axi_read_out_if_initiator_s fuse_ctrl_secreg_axi_read_out_if_initiator_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = fuse_ctrl_secreg_axi_read_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_secreg_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } fuse_ctrl_secreg_axi_read_out_if_responder_s; + + `define fuse_ctrl_secreg_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_if_responder_s to_responder_struct();\ + fuse_ctrl_secreg_axi_read_out_if_responder_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( fuse_ctrl_secreg_axi_read_out_if_responder_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_secreg_axi_read_out_if_responder_s fuse_ctrl_secreg_axi_read_out_if_responder_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = fuse_ctrl_secreg_axi_read_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor.svh new file mode 100644 index 000000000..ca4e744eb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_secreg_axi_read_out_if transactions observed by the +// fuse_ctrl_secreg_axi_read_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_secreg_axi_read_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_secreg_axi_read_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_secreg_axi_read_out_if_monitor_s fuse_ctrl_secreg_axi_read_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_secreg_axi_read_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor_bfm.sv new file mode 100644 index 000000000..32b5eaf40 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_secreg_axi_read_out_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_secreg_axi_read_out_if monitor through a virtual +// interface handle in the fuse_ctrl_secreg_axi_read_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_secreg_axi_read_out_if_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_secreg_axi_read_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_out_if_macros.svh" + + +interface fuse_ctrl_secreg_axi_read_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_secreg_axi_read_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_secreg_axi_read_out_if_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_out_if_monitor_s fuse_ctrl_secreg_axi_read_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_secreg_axi_read_out_if_pkg::fuse_ctrl_secreg_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_secreg_axi_read_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_secreg_axi_read_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_secreg_axi_read_out_if_configuration_s fuse_ctrl_secreg_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_secreg_axi_read_out_if_monitor_s fuse_ctrl_secreg_axi_read_out_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.secreg_arready + // // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.secreg_rdata + // // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.secreg_rresp + // // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.secreg_rid + // // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.secreg_rlast + // // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.secreg_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.xyz = arready_i; // + // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.xyz = rresp_i; // + // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.xyz = rid_i; // + // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.xyz = rlast_i; // + // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_random_sequence.svh new file mode 100644 index 000000000..30fa8b2f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_secreg_axi_read_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_secreg_axi_read_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_secreg_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_secreg_axi_read_out_if_random_sequence::body()-fuse_ctrl_secreg_axi_read_out_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_secreg_axi_read_out_if_driver_bfm via the sequencer and fuse_ctrl_secreg_axi_read_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_secreg_axi_read_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_responder_sequence.svh new file mode 100644 index 000000000..8627fa46e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_secreg_axi_read_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_secreg_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_sequence_base.svh new file mode 100644 index 000000000..821876b40 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_out_if_transaction_req_t; + fuse_ctrl_secreg_axi_read_out_if_transaction_req_t req; + typedef fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_out_if_transaction_rsp_t; + fuse_ctrl_secreg_axi_read_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_secreg_axi_read_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_secreg_axi_read_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction.svh new file mode 100644 index 000000000..d1fb1311a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_secreg_axi_read_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic secreg_arready ; + logic [DW-1:0] secreg_rdata ; + axi_pkg::axi_burst_e secreg_rresp ; + logic [IW-1:0] secreg_rid ; + logic secreg_rlast ; + logic secreg_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_secreg_axi_read_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_secreg_axi_read_out_if_monitor and fuse_ctrl_secreg_axi_read_out_if_monitor_bfm + // This struct is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_out_if_monitor_s fuse_ctrl_secreg_axi_read_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_out_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_if_monitor_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_out_if_driver and fuse_ctrl_secreg_axi_read_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_out_if_initiator_s fuse_ctrl_secreg_axi_read_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_out_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_if_initiator_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_secreg_axi_read_out_if_driver and fuse_ctrl_secreg_axi_read_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_out_if_responder_s fuse_ctrl_secreg_axi_read_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_out_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_if_responder_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_arready:0x%x secreg_rdata:0x%x secreg_rresp:0x%x secreg_rid:0x%x secreg_rlast:0x%x secreg_rvalid:0x%x ",secreg_arready,secreg_rdata,secreg_rresp,secreg_rid,secreg_rlast,secreg_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.secreg_arready == RHS.secreg_arready) + &&(this.secreg_rdata == RHS.secreg_rdata) + &&(this.secreg_rresp == RHS.secreg_rresp) + &&(this.secreg_rid == RHS.secreg_rid) + &&(this.secreg_rlast == RHS.secreg_rlast) + &&(this.secreg_rvalid == RHS.secreg_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_arready = RHS.secreg_arready; + this.secreg_rdata = RHS.secreg_rdata; + this.secreg_rresp = RHS.secreg_rresp; + this.secreg_rid = RHS.secreg_rid; + this.secreg_rlast = RHS.secreg_rlast; + this.secreg_rvalid = RHS.secreg_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_secreg_axi_read_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_arready,"secreg_arready"); + $add_attribute(transaction_view_h,secreg_rdata,"secreg_rdata"); + $add_attribute(transaction_view_h,secreg_rresp,"secreg_rresp"); + $add_attribute(transaction_view_h,secreg_rid,"secreg_rid"); + $add_attribute(transaction_view_h,secreg_rlast,"secreg_rlast"); + $add_attribute(transaction_view_h,secreg_rvalid,"secreg_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction_coverage.svh new file mode 100644 index 000000000..e5fd88621 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_secreg_axi_read_out_if transaction information using +// a covergroup named fuse_ctrl_secreg_axi_read_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_secreg_axi_read_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_arready: coverpoint coverage_trans.secreg_arready; + secreg_rdata: coverpoint coverage_trans.secreg_rdata; + secreg_rresp: coverpoint coverage_trans.secreg_rresp; + secreg_rid: coverpoint coverage_trans.secreg_rid; + secreg_rlast: coverpoint coverage_trans.secreg_rlast; + secreg_rvalid: coverpoint coverage_trans.secreg_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_secreg_axi_read_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_secreg_axi_read_out_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_secreg_axi_read_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/yaml/fuse_ctrl_secreg_axi_read_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/yaml/fuse_ctrl_secreg_axi_read_out_if_interface.yaml new file mode 100644 index 000000000..a61691557 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/yaml/fuse_ctrl_secreg_axi_read_out_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + fuse_ctrl_secreg_axi_read_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.project new file mode 100644 index 000000000..615ab14e5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_secreg_axi_read_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.svproject new file mode 100644 index 000000000..9d45666db --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/Makefile new file mode 100644 index 000000000..2b6270941 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_secreg_axi_read_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_secreg_axi_read_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hvl.f + +fuse_ctrl_secreg_axi_read_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hdl.f + +fuse_ctrl_secreg_axi_read_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_xrtl.f + +COMP_fuse_ctrl_secreg_axi_read_out_PKG_TGT_0 = q_comp_fuse_ctrl_secreg_axi_read_out_pkg +COMP_fuse_ctrl_secreg_axi_read_out_PKG_TGT_1 = v_comp_fuse_ctrl_secreg_axi_read_out_pkg +COMP_fuse_ctrl_secreg_axi_read_out_PKG_TGT = $(COMP_fuse_ctrl_secreg_axi_read_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_secreg_axi_read_out_pkg: $(COMP_fuse_ctrl_secreg_axi_read_out_PKG_TGT) + +q_comp_fuse_ctrl_secreg_axi_read_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG_XRTL) + +v_comp_fuse_ctrl_secreg_axi_read_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_secreg_axi_read_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_out_pkg += -I$(fuse_ctrl_secreg_axi_read_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_out_pkg += $(fuse_ctrl_secreg_axi_read_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_secreg_axi_read_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/compile.do new file mode 100644 index 000000000..76aa3ca09 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_secreg_axi_read_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out.compile new file mode 100644 index 000000000..630dad514 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_secreg_axi_read_out_hvl.compile + - fuse_ctrl_secreg_axi_read_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_bfm.vinfo new file mode 100644 index 000000000..ecf711b62 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_secreg_axi_read_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_secreg_axi_read_out_if.sv +src/fuse_ctrl_secreg_axi_read_out_driver_bfm.sv +src/fuse_ctrl_secreg_axi_read_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_common.compile new file mode 100644 index 000000000..ab88d14dc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hdl.f new file mode 100644 index 000000000..5665d944e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hvl.f new file mode 100644 index 000000000..dd6d2e780 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_xrtl.f new file mode 100644 index 000000000..39d267222 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hdl.compile new file mode 100644 index 000000000..7def0007c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_secreg_axi_read_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_secreg_axi_read_out_if.sv + - src/fuse_ctrl_secreg_axi_read_out_monitor_bfm.sv + - src/fuse_ctrl_secreg_axi_read_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hvl.compile new file mode 100644 index 000000000..b4a074d33 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_secreg_axi_read_out_common.compile +incdir: + - . +src: + - fuse_ctrl_secreg_axi_read_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.sv new file mode 100644 index 000000000..e5e0fb140 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_secreg_axi_read_out_macros.svh" + + export fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_secreg_axi_read_out_typedefs.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_transaction.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_configuration.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_driver.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_monitor.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_transaction_coverage.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_sequence_base.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_random_sequence.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_responder_sequence.svh" + `include "src/fuse_ctrl_secreg_axi_read_out2reg_adapter.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.vinfo new file mode 100644 index 000000000..fcfbb848d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_secreg_axi_read_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_secreg_axi_read_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv new file mode 100644 index 000000000..86bf6a521 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_secreg_axi_read_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.vinfo new file mode 100644 index 000000000..217e9f2f8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_sve.F new file mode 100644 index 000000000..7feb9ad5d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out2reg_adapter.svh new file mode 100644 index 000000000..e96620f37 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_secreg_axi_read_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_secreg_axi_read_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_secreg_axi_read_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_agent.svh new file mode 100644 index 000000000..8c136cf4b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_secreg_axi_read_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_secreg_axi_read_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_secreg_axi_read_out_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_configuration.svh new file mode 100644 index 000000000..5660faa8c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_secreg_axi_read_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_secreg_axi_read_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_secreg_axi_read_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_CONFIGURATION_STRUCT + fuse_ctrl_secreg_axi_read_out_configuration_s fuse_ctrl_secreg_axi_read_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_secreg_axi_read_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_configuration_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_secreg_axi_read_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_secreg_axi_read_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_secreg_axi_read_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_secreg_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_secreg_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_secreg_axi_read_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_secreg_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver.svh new file mode 100644 index 000000000..3902fe883 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_secreg_axi_read_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_secreg_axi_read_out_driver and fuse_ctrl_secreg_axi_read_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_secreg_axi_read_out_driver_bfm. +`fuse_ctrl_secreg_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_out_initiator_s fuse_ctrl_secreg_axi_read_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_secreg_axi_read_out_driver and fuse_ctrl_secreg_axi_read_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_secreg_axi_read_out_driver_bfm. +`fuse_ctrl_secreg_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_out_responder_s fuse_ctrl_secreg_axi_read_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_secreg_axi_read_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_secreg_axi_read_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_secreg_axi_read_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_secreg_axi_read_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver_bfm.sv new file mode 100644 index 000000000..3b1e0d51d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_secreg_axi_read_out signal driving. It is +// accessed by the uvm fuse_ctrl_secreg_axi_read_out driver through a virtual interface +// handle in the fuse_ctrl_secreg_axi_read_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_secreg_axi_read_out_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_secreg_axi_read_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_out_macros.svh" + +interface fuse_ctrl_secreg_axi_read_out_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_secreg_axi_read_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_secreg_axi_read_out_pkg::fuse_ctrl_secreg_axi_read_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_secreg_axi_read_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_secreg_axi_read_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_secreg_axi_read_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_out_driver and fuse_ctrl_secreg_axi_read_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_out_driver_bfm. + `fuse_ctrl_secreg_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_secreg_axi_read_out_driver and fuse_ctrl_secreg_axi_read_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_out_driver_bfm. + `fuse_ctrl_secreg_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_secreg_axi_read_out_configuration_s fuse_ctrl_secreg_axi_read_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_secreg_axi_read_out_initiator_s fuse_ctrl_secreg_axi_read_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_secreg_axi_read_out_responder_s fuse_ctrl_secreg_axi_read_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_secreg_axi_read_out_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Members within the fuse_ctrl_secreg_axi_read_out_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + initiator_struct = fuse_ctrl_secreg_axi_read_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_secreg_axi_read_out_responder_struct.xyz = arready_i; // + // fuse_ctrl_secreg_axi_read_out_responder_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_secreg_axi_read_out_responder_struct.xyz = rresp_i; // + // fuse_ctrl_secreg_axi_read_out_responder_struct.xyz = rid_i; // + // fuse_ctrl_secreg_axi_read_out_responder_struct.xyz = rlast_i; // + // fuse_ctrl_secreg_axi_read_out_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_secreg_axi_read_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_secreg_axi_read_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_secreg_axi_read_out_initiator_s fuse_ctrl_secreg_axi_read_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_secreg_axi_read_out_responder_s fuse_ctrl_secreg_axi_read_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_secreg_axi_read_out_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Variables within the fuse_ctrl_secreg_axi_read_out_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= fuse_ctrl_secreg_axi_read_out_initiator_struct.xyz; // + // rdata_o <= fuse_ctrl_secreg_axi_read_out_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= fuse_ctrl_secreg_axi_read_out_initiator_struct.xyz; // + // rid_o <= fuse_ctrl_secreg_axi_read_out_initiator_struct.xyz; // + // rlast_o <= fuse_ctrl_secreg_axi_read_out_initiator_struct.xyz; // + // rvalid_o <= fuse_ctrl_secreg_axi_read_out_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_secreg_axi_read_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_secreg_axi_read_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_if.sv new file mode 100644 index 000000000..08ee4ed10 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_secreg_axi_read_out interface signals. +// It is instantiated once per fuse_ctrl_secreg_axi_read_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_secreg_axi_read_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_secreg_axi_read_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_bus.arready), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_bus.rdata), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_bus.rresp), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_bus.rid), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_bus.rlast), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; + +interface fuse_ctrl_secreg_axi_read_out_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_macros.svh new file mode 100644 index 000000000..882e661bd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_secreg_axi_read_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_secreg_axi_read_out_configuration class. +// + `define fuse_ctrl_secreg_axi_read_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_secreg_axi_read_out_configuration_s; + + `define fuse_ctrl_secreg_axi_read_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_configuration_s to_struct();\ + fuse_ctrl_secreg_axi_read_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_secreg_axi_read_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_secreg_axi_read_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_secreg_axi_read_out_configuration_s fuse_ctrl_secreg_axi_read_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_secreg_axi_read_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_secreg_axi_read_out_transaction class. +// + `define fuse_ctrl_secreg_axi_read_out_MONITOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } fuse_ctrl_secreg_axi_read_out_monitor_s; + + `define fuse_ctrl_secreg_axi_read_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_monitor_s to_monitor_struct();\ + fuse_ctrl_secreg_axi_read_out_monitor_struct = \ + { \ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( fuse_ctrl_secreg_axi_read_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_secreg_axi_read_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_secreg_axi_read_out_monitor_s fuse_ctrl_secreg_axi_read_out_monitor_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = fuse_ctrl_secreg_axi_read_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_secreg_axi_read_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_out_INITIATOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } fuse_ctrl_secreg_axi_read_out_initiator_s; + + `define fuse_ctrl_secreg_axi_read_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_initiator_s to_initiator_struct();\ + fuse_ctrl_secreg_axi_read_out_initiator_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( fuse_ctrl_secreg_axi_read_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_secreg_axi_read_out_initiator_s fuse_ctrl_secreg_axi_read_out_initiator_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = fuse_ctrl_secreg_axi_read_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_secreg_axi_read_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_out_RESPONDER_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } fuse_ctrl_secreg_axi_read_out_responder_s; + + `define fuse_ctrl_secreg_axi_read_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_responder_s to_responder_struct();\ + fuse_ctrl_secreg_axi_read_out_responder_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( fuse_ctrl_secreg_axi_read_out_responder_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_secreg_axi_read_out_responder_s fuse_ctrl_secreg_axi_read_out_responder_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = fuse_ctrl_secreg_axi_read_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor.svh new file mode 100644 index 000000000..8e4f46381 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_secreg_axi_read_out transactions observed by the +// fuse_ctrl_secreg_axi_read_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_secreg_axi_read_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_secreg_axi_read_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_secreg_axi_read_out_monitor_s fuse_ctrl_secreg_axi_read_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_secreg_axi_read_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor_bfm.sv new file mode 100644 index 000000000..744b71555 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_secreg_axi_read_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_secreg_axi_read_out monitor through a virtual +// interface handle in the fuse_ctrl_secreg_axi_read_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_secreg_axi_read_out_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_secreg_axi_read_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_out_macros.svh" + + +interface fuse_ctrl_secreg_axi_read_out_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_secreg_axi_read_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_secreg_axi_read_out_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_out_monitor_s fuse_ctrl_secreg_axi_read_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_secreg_axi_read_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_secreg_axi_read_out_pkg::fuse_ctrl_secreg_axi_read_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_secreg_axi_read_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_secreg_axi_read_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_secreg_axi_read_out_configuration_s fuse_ctrl_secreg_axi_read_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_secreg_axi_read_out_monitor_s fuse_ctrl_secreg_axi_read_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_secreg_axi_read_out_monitor_struct.secreg_arready + // // fuse_ctrl_secreg_axi_read_out_monitor_struct.secreg_rdata + // // fuse_ctrl_secreg_axi_read_out_monitor_struct.secreg_rresp + // // fuse_ctrl_secreg_axi_read_out_monitor_struct.secreg_rid + // // fuse_ctrl_secreg_axi_read_out_monitor_struct.secreg_rlast + // // fuse_ctrl_secreg_axi_read_out_monitor_struct.secreg_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_secreg_axi_read_out_monitor_struct.xyz = arready_i; // + // fuse_ctrl_secreg_axi_read_out_monitor_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_secreg_axi_read_out_monitor_struct.xyz = rresp_i; // + // fuse_ctrl_secreg_axi_read_out_monitor_struct.xyz = rid_i; // + // fuse_ctrl_secreg_axi_read_out_monitor_struct.xyz = rlast_i; // + // fuse_ctrl_secreg_axi_read_out_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_random_sequence.svh new file mode 100644 index 000000000..ff6541d98 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_secreg_axi_read_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_secreg_axi_read_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_secreg_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_secreg_axi_read_out_random_sequence::body()-fuse_ctrl_secreg_axi_read_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_secreg_axi_read_out_driver_bfm via the sequencer and fuse_ctrl_secreg_axi_read_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_secreg_axi_read_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_responder_sequence.svh new file mode 100644 index 000000000..83a9996a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_secreg_axi_read_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_secreg_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_sequence_base.svh new file mode 100644 index 000000000..30cb7935d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_out_transaction_req_t; + fuse_ctrl_secreg_axi_read_out_transaction_req_t req; + typedef fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_out_transaction_rsp_t; + fuse_ctrl_secreg_axi_read_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_secreg_axi_read_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_secreg_axi_read_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction.svh new file mode 100644 index 000000000..b36b950c4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_secreg_axi_read_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic secreg_arready ; + logic [DW-1:0] secreg_rdata ; + axi_pkg::axi_burst_e secreg_rresp ; + logic [IW-1:0] secreg_rid ; + logic secreg_rlast ; + logic secreg_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_secreg_axi_read_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_secreg_axi_read_out_monitor and fuse_ctrl_secreg_axi_read_out_monitor_bfm + // This struct is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_out_monitor_s fuse_ctrl_secreg_axi_read_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_monitor_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_out_driver and fuse_ctrl_secreg_axi_read_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_out_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_out_initiator_s fuse_ctrl_secreg_axi_read_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_initiator_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_secreg_axi_read_out_driver and fuse_ctrl_secreg_axi_read_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_out_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_out_responder_s fuse_ctrl_secreg_axi_read_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_responder_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_arready:0x%x secreg_rdata:0x%x secreg_rresp:0x%x secreg_rid:0x%x secreg_rlast:0x%x secreg_rvalid:0x%x ",secreg_arready,secreg_rdata,secreg_rresp,secreg_rid,secreg_rlast,secreg_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.secreg_arready == RHS.secreg_arready) + &&(this.secreg_rdata == RHS.secreg_rdata) + &&(this.secreg_rresp == RHS.secreg_rresp) + &&(this.secreg_rid == RHS.secreg_rid) + &&(this.secreg_rlast == RHS.secreg_rlast) + &&(this.secreg_rvalid == RHS.secreg_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_arready = RHS.secreg_arready; + this.secreg_rdata = RHS.secreg_rdata; + this.secreg_rresp = RHS.secreg_rresp; + this.secreg_rid = RHS.secreg_rid; + this.secreg_rlast = RHS.secreg_rlast; + this.secreg_rvalid = RHS.secreg_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_secreg_axi_read_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_arready,"secreg_arready"); + $add_attribute(transaction_view_h,secreg_rdata,"secreg_rdata"); + $add_attribute(transaction_view_h,secreg_rresp,"secreg_rresp"); + $add_attribute(transaction_view_h,secreg_rid,"secreg_rid"); + $add_attribute(transaction_view_h,secreg_rlast,"secreg_rlast"); + $add_attribute(transaction_view_h,secreg_rvalid,"secreg_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction_coverage.svh new file mode 100644 index 000000000..cdbf4e229 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_secreg_axi_read_out transaction information using +// a covergroup named fuse_ctrl_secreg_axi_read_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_secreg_axi_read_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_arready: coverpoint coverage_trans.secreg_arready; + secreg_rdata: coverpoint coverage_trans.secreg_rdata; + secreg_rresp: coverpoint coverage_trans.secreg_rresp; + secreg_rid: coverpoint coverage_trans.secreg_rid; + secreg_rlast: coverpoint coverage_trans.secreg_rlast; + secreg_rvalid: coverpoint coverage_trans.secreg_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_secreg_axi_read_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_secreg_axi_read_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_secreg_axi_read_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/yaml/fuse_ctrl_secreg_axi_read_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/yaml/fuse_ctrl_secreg_axi_read_out_interface.yaml new file mode 100644 index 000000000..a0081ffd6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/yaml/fuse_ctrl_secreg_axi_read_out_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + fuse_ctrl_secreg_axi_read_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/.project new file mode 100644 index 000000000..ce67d0c3e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + prim_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..f8c7ed7c8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..01ec95534 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# prim_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +prim_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f + +prim_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f + +prim_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f + +COMP_prim_axi_read_if_PKG_TGT_0 = q_comp_prim_axi_read_if_pkg +COMP_prim_axi_read_if_PKG_TGT_1 = v_comp_prim_axi_read_if_pkg +COMP_prim_axi_read_if_PKG_TGT = $(COMP_prim_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_prim_axi_read_if_pkg: $(COMP_prim_axi_read_if_PKG_TGT) + +q_comp_prim_axi_read_if_pkg: + $(HDL_COMP_CMD) $(prim_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_read_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_read_if_PKG_XRTL) + +v_comp_prim_axi_read_if_pkg: + $(HVL_COMP_CMD) $(prim_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_read_if_PKG) + $(VELANALYZE_CMD) $(prim_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(prim_axi_read_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export prim_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_prim_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_prim_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_prim_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_prim_axi_read_if_pkg += -I$(prim_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_prim_axi_read_if_pkg += $(prim_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_prim_axi_read_if_pkg += \ + \ + -o .so + +comp_prim_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_prim_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_prim_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_prim_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_prim_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..9c440083a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of prim_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if.compile new file mode 100644 index 000000000..6b8986ce1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - prim_axi_read_if_hvl.compile + - prim_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..6ed51480b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use prim_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/prim_axi_read_if_if.sv +src/prim_axi_read_if_driver_bfm.sv +src/prim_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_common.compile new file mode 100644 index 000000000..09fd9b43c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..0dcc7ec77 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..1ca45536b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..db173a50e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hdl.compile new file mode 100644 index 000000000..bf564aa0c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./prim_axi_read_if_common.compile +incdir: + - . +src: + - src/prim_axi_read_if_if.sv + - src/prim_axi_read_if_monitor_bfm.sv + - src/prim_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hvl.compile new file mode 100644 index 000000000..ebdc1e779 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./prim_axi_read_if_common.compile +incdir: + - . +src: + - prim_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.sv new file mode 100644 index 000000000..21866eb57 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import prim_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/prim_axi_read_if_macros.svh" + + export prim_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/prim_axi_read_if_typedefs.svh" + `include "src/prim_axi_read_if_transaction.svh" + + `include "src/prim_axi_read_if_configuration.svh" + `include "src/prim_axi_read_if_driver.svh" + `include "src/prim_axi_read_if_monitor.svh" + + `include "src/prim_axi_read_if_transaction_coverage.svh" + `include "src/prim_axi_read_if_sequence_base.svh" + `include "src/prim_axi_read_if_random_sequence.svh" + + `include "src/prim_axi_read_if_responder_sequence.svh" + `include "src/prim_axi_read_if2reg_adapter.svh" + + `include "src/prim_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..9dc1034d4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use prim_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +prim_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..e2ff7fcd4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/prim_axi_read_if_typedefs_hdl.svh" + `include "src/prim_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..fe5f59e5b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..1112cd0fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..e5ff21492 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the prim_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( prim_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "prim_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : prim_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_agent.svh new file mode 100644 index 000000000..e510c9b42 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(prim_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(prim_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(prim_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( prim_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_configuration.svh new file mode 100644 index 000000000..4fe7507ff --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the prim_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual prim_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual prim_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup prim_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_CONFIGURATION_STRUCT + prim_axi_read_if_configuration_s prim_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a prim_axi_read_if_configuration_s + // structure. The function returns the handle to the prim_axi_read_if_configuration_struct. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + prim_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + prim_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + prim_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + prim_axi_read_if_configuration_cg.set_inst_name($sformatf("prim_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver.svh new file mode 100644 index 000000000..80f3658f6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual prim_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( prim_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in prim_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm +// to communicate initiator driven data to prim_axi_read_if_driver_bfm. +`prim_axi_read_if_INITIATOR_STRUCT + prim_axi_read_if_initiator_s prim_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm +// to communicate Responder driven data to prim_axi_read_if_driver_bfm. +`prim_axi_read_if_RESPONDER_STRUCT + prim_axi_read_if_responder_s prim_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + prim_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(prim_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + prim_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(prim_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..fb79a5e87 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the prim_axi_read_if signal driving. It is +// accessed by the uvm prim_axi_read_if driver through a virtual interface +// handle in the prim_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type prim_axi_read_if_if. +// +// Input signals from the prim_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within prim_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_read_if_pkg_hdl::*; +`include "src/prim_axi_read_if_macros.svh" + +interface prim_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (prim_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute prim_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + prim_axi_read_if_pkg::prim_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in prim_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from prim_axi_read_if_driver to this BFM + // **************************************************************************** + `prim_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm + // to communicate initiator driven data to prim_axi_read_if_driver_bfm. + `prim_axi_read_if_INITIATOR_STRUCT + prim_axi_read_if_initiator_s initiator_struct; + // Responder macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm + // to communicate Responder driven data to prim_axi_read_if_driver_bfm. + `prim_axi_read_if_RESPONDER_STRUCT + prim_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(prim_axi_read_if_configuration_s prim_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input prim_axi_read_if_initiator_s prim_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output prim_axi_read_if_responder_s prim_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the prim_axi_read_if_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Members within the prim_axi_read_if_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + initiator_struct = prim_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // prim_axi_read_if_responder_struct.xyz = arready_i; // + // prim_axi_read_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // prim_axi_read_if_responder_struct.xyz = rresp_i; // + // prim_axi_read_if_responder_struct.xyz = rid_i; // + // prim_axi_read_if_responder_struct.xyz = rlast_i; // + // prim_axi_read_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // prim_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = prim_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output prim_axi_read_if_initiator_s prim_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input prim_axi_read_if_responder_s prim_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the prim_axi_read_if_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Variables within the prim_axi_read_if_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= prim_axi_read_if_initiator_struct.xyz; // + // rdata_o <= prim_axi_read_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= prim_axi_read_if_initiator_struct.xyz; // + // rid_o <= prim_axi_read_if_initiator_struct.xyz; // + // rlast_o <= prim_axi_read_if_initiator_struct.xyz; // + // rvalid_o <= prim_axi_read_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the prim_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the prim_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_if.sv new file mode 100644 index 000000000..3e2dc9c5d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the prim_axi_read_if interface signals. +// It is instantiated once per prim_axi_read_if bus. Bus Functional Models, +// BFM's named prim_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named prim_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(prim_axi_read_if_bus.arready), // Agent input +// .dut_signal_port(prim_axi_read_if_bus.rdata), // Agent input +// .dut_signal_port(prim_axi_read_if_bus.rresp), // Agent input +// .dut_signal_port(prim_axi_read_if_bus.rid), // Agent input +// .dut_signal_port(prim_axi_read_if_bus.rlast), // Agent input +// .dut_signal_port(prim_axi_read_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import prim_axi_read_if_pkg_hdl::*; + +interface prim_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_macros.svh new file mode 100644 index 000000000..afbd57861 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the prim_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the prim_axi_read_if_configuration class. +// + `define prim_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } prim_axi_read_if_configuration_s; + + `define prim_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function prim_axi_read_if_configuration_s to_struct();\ + prim_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( prim_axi_read_if_configuration_struct );\ + endfunction + + `define prim_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(prim_axi_read_if_configuration_s prim_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = prim_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the prim_axi_read_if_transaction class. +// + `define prim_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } prim_axi_read_if_monitor_s; + + `define prim_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function prim_axi_read_if_monitor_s to_monitor_struct();\ + prim_axi_read_if_monitor_struct = \ + { \ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( prim_axi_read_if_monitor_struct);\ + endfunction\ + + `define prim_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(prim_axi_read_if_monitor_s prim_axi_read_if_monitor_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = prim_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the prim_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } prim_axi_read_if_initiator_s; + + `define prim_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function prim_axi_read_if_initiator_s to_initiator_struct();\ + prim_axi_read_if_initiator_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( prim_axi_read_if_initiator_struct);\ + endfunction + + `define prim_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(prim_axi_read_if_initiator_s prim_axi_read_if_initiator_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = prim_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the prim_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } prim_axi_read_if_responder_s; + + `define prim_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function prim_axi_read_if_responder_s to_responder_struct();\ + prim_axi_read_if_responder_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( prim_axi_read_if_responder_struct);\ + endfunction + + `define prim_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(prim_axi_read_if_responder_s prim_axi_read_if_responder_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = prim_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor.svh new file mode 100644 index 000000000..2f4d1fc43 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives prim_axi_read_if transactions observed by the +// prim_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual prim_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`prim_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the prim_axi_read_if_monitor_struct. + virtual function void notify_transaction(input prim_axi_read_if_monitor_s prim_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(prim_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..a6c05bea2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the prim_axi_read_if signal monitoring. +// It is accessed by the uvm prim_axi_read_if monitor through a virtual +// interface handle in the prim_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type prim_axi_read_if_if. +// +// Input signals from the prim_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the prim_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_read_if_pkg_hdl::*; +`include "src/prim_axi_read_if_macros.svh" + + +interface prim_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( prim_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute prim_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`prim_axi_read_if_MONITOR_STRUCT + prim_axi_read_if_monitor_s prim_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `prim_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + prim_axi_read_if_pkg::prim_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( prim_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( prim_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(prim_axi_read_if_configuration_s prim_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output prim_axi_read_if_monitor_s prim_axi_read_if_monitor_struct); + // + // Available struct members: + // // prim_axi_read_if_monitor_struct.prim_arready + // // prim_axi_read_if_monitor_struct.prim_rdata + // // prim_axi_read_if_monitor_struct.prim_rresp + // // prim_axi_read_if_monitor_struct.prim_rid + // // prim_axi_read_if_monitor_struct.prim_rlast + // // prim_axi_read_if_monitor_struct.prim_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // prim_axi_read_if_monitor_struct.xyz = arready_i; // + // prim_axi_read_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // prim_axi_read_if_monitor_struct.xyz = rresp_i; // + // prim_axi_read_if_monitor_struct.xyz = rid_i; // + // prim_axi_read_if_monitor_struct.xyz = rlast_i; // + // prim_axi_read_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..08857b229 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the prim_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a prim_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "prim_axi_read_if_random_sequence::body()-prim_axi_read_if_transaction randomization failed") + // Send the transaction to the prim_axi_read_if_driver_bfm via the sequencer and prim_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: prim_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..501b728cc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "prim_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..c94ac9063 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_read_if_transaction_req_t; + prim_axi_read_if_transaction_req_t req; + typedef prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_read_if_transaction_rsp_t; + prim_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = prim_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = prim_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction.svh new file mode 100644 index 000000000..c7e72b2ee --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an prim_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( prim_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_arready ; + logic [DW-1:0] prim_rdata ; + axi_pkg::axi_burst_e prim_rresp ; + logic [IW-1:0] prim_rid ; + logic prim_rlast ; + logic prim_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in prim_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by prim_axi_read_if_monitor and prim_axi_read_if_monitor_bfm + // This struct is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_MONITOR_STRUCT + prim_axi_read_if_monitor_s prim_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a prim_axi_read_if_monitor_s + // structure. The function returns the handle to the prim_axi_read_if_monitor_struct. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm + // to communicate initiator driven data to prim_axi_read_if_driver_bfm. + // This struct is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_INITIATOR_STRUCT + prim_axi_read_if_initiator_s prim_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a prim_axi_read_if_initiator_s + // structure. The function returns the handle to the prim_axi_read_if_initiator_struct. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm + // to communicate Responder driven data to prim_axi_read_if_driver_bfm. + // This struct is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_RESPONDER_STRUCT + prim_axi_read_if_responder_s prim_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a prim_axi_read_if_responder_s + // structure. The function returns the handle to the prim_axi_read_if_responder_struct. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_arready:0x%x prim_rdata:0x%x prim_rresp:0x%x prim_rid:0x%x prim_rlast:0x%x prim_rvalid:0x%x ",prim_arready,prim_rdata,prim_rresp,prim_rid,prim_rlast,prim_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_arready == RHS.prim_arready) + &&(this.prim_rdata == RHS.prim_rdata) + &&(this.prim_rresp == RHS.prim_rresp) + &&(this.prim_rid == RHS.prim_rid) + &&(this.prim_rlast == RHS.prim_rlast) + &&(this.prim_rvalid == RHS.prim_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_arready = RHS.prim_arready; + this.prim_rdata = RHS.prim_rdata; + this.prim_rresp = RHS.prim_rresp; + this.prim_rid = RHS.prim_rid; + this.prim_rlast = RHS.prim_rlast; + this.prim_rvalid = RHS.prim_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"prim_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_arready,"prim_arready"); + $add_attribute(transaction_view_h,prim_rdata,"prim_rdata"); + $add_attribute(transaction_view_h,prim_rresp,"prim_rresp"); + $add_attribute(transaction_view_h,prim_rid,"prim_rid"); + $add_attribute(transaction_view_h,prim_rlast,"prim_rlast"); + $add_attribute(transaction_view_h,prim_rvalid,"prim_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..e31162373 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records prim_axi_read_if transaction information using +// a covergroup named prim_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup prim_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_arready: coverpoint coverage_trans.prim_arready; + prim_rdata: coverpoint coverage_trans.prim_rdata; + prim_rresp: coverpoint coverage_trans.prim_rresp; + prim_rid: coverpoint coverage_trans.prim_rid; + prim_rlast: coverpoint coverage_trans.prim_rlast; + prim_rvalid: coverpoint coverage_trans.prim_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + prim_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + prim_axi_read_if_transaction_cg.set_inst_name($sformatf("prim_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + prim_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/yaml/prim_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/yaml/prim_axi_read_if_interface.yaml new file mode 100644 index 000000000..e8716f4a1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_if_pkg/yaml/prim_axi_read_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + prim_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.project new file mode 100644 index 000000000..585c5e823 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + prim_axi_read_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.svproject new file mode 100644 index 000000000..ddf3caeab --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/Makefile new file mode 100644 index 000000000..f228130ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# prim_axi_read_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +prim_axi_read_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hvl.f + +prim_axi_read_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hdl.f + +prim_axi_read_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_xrtl.f + +COMP_prim_axi_read_out_if_PKG_TGT_0 = q_comp_prim_axi_read_out_if_pkg +COMP_prim_axi_read_out_if_PKG_TGT_1 = v_comp_prim_axi_read_out_if_pkg +COMP_prim_axi_read_out_if_PKG_TGT = $(COMP_prim_axi_read_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_prim_axi_read_out_if_pkg: $(COMP_prim_axi_read_out_if_PKG_TGT) + +q_comp_prim_axi_read_out_if_pkg: + $(HDL_COMP_CMD) $(prim_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_read_out_if_PKG_XRTL) + +v_comp_prim_axi_read_out_if_pkg: + $(HVL_COMP_CMD) $(prim_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_read_out_if_PKG) + $(VELANALYZE_CMD) $(prim_axi_read_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(prim_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_read_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export prim_axi_read_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_prim_axi_read_out_if_pkg = \ + +O_FILE_COMPILE_LIST_prim_axi_read_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_prim_axi_read_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_prim_axi_read_out_if_pkg += -I$(prim_axi_read_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_prim_axi_read_out_if_pkg += $(prim_axi_read_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_prim_axi_read_out_if_pkg += \ + \ + -o .so + +comp_prim_axi_read_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_prim_axi_read_out_if_pkg) $(C_FILE_COMPILE_LIST_prim_axi_read_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_prim_axi_read_out_if_pkg) $(O_FILE_COMPILE_LIST_prim_axi_read_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/compile.do new file mode 100644 index 000000000..a3a345d11 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of prim_axi_read_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if.compile new file mode 100644 index 000000000..4670ed42f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if.compile @@ -0,0 +1,3 @@ +needs: + - prim_axi_read_out_if_hvl.compile + - prim_axi_read_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_bfm.vinfo new file mode 100644 index 000000000..d5f56b7f4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use prim_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/prim_axi_read_out_if_if.sv +src/prim_axi_read_out_if_driver_bfm.sv +src/prim_axi_read_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_common.compile new file mode 100644 index 000000000..7e04b5d77 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - prim_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hdl.f new file mode 100644 index 000000000..ac4c979b1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hvl.f new file mode 100644 index 000000000..601a2a9a6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_xrtl.f new file mode 100644 index 000000000..f129101a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hdl.compile new file mode 100644 index 000000000..5b8611c73 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./prim_axi_read_out_if_common.compile +incdir: + - . +src: + - src/prim_axi_read_out_if_if.sv + - src/prim_axi_read_out_if_monitor_bfm.sv + - src/prim_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hvl.compile new file mode 100644 index 000000000..8e542050f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./prim_axi_read_out_if_common.compile +incdir: + - . +src: + - prim_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.sv new file mode 100644 index 000000000..a2a9a1e31 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_read_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import prim_axi_read_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/prim_axi_read_out_if_macros.svh" + + export prim_axi_read_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/prim_axi_read_out_if_typedefs.svh" + `include "src/prim_axi_read_out_if_transaction.svh" + + `include "src/prim_axi_read_out_if_configuration.svh" + `include "src/prim_axi_read_out_if_driver.svh" + `include "src/prim_axi_read_out_if_monitor.svh" + + `include "src/prim_axi_read_out_if_transaction_coverage.svh" + `include "src/prim_axi_read_out_if_sequence_base.svh" + `include "src/prim_axi_read_out_if_random_sequence.svh" + + `include "src/prim_axi_read_out_if_responder_sequence.svh" + `include "src/prim_axi_read_out_if2reg_adapter.svh" + + `include "src/prim_axi_read_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.vinfo new file mode 100644 index 000000000..aa65183de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use prim_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +prim_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.sv new file mode 100644 index 000000000..5c650077e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_read_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/prim_axi_read_out_if_typedefs_hdl.svh" + `include "src/prim_axi_read_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..368a69419 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +prim_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_sve.F new file mode 100644 index 000000000..8c95c1e2d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if2reg_adapter.svh new file mode 100644 index 000000000..721a65049 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the prim_axi_read_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( prim_axi_read_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "prim_axi_read_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : prim_axi_read_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_agent.svh new file mode 100644 index 000000000..7c2483b3a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(prim_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(prim_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(prim_axi_read_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( prim_axi_read_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_configuration.svh new file mode 100644 index 000000000..26028d38f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the prim_axi_read_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual prim_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual prim_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_read_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup prim_axi_read_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_CONFIGURATION_STRUCT + prim_axi_read_out_if_configuration_s prim_axi_read_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a prim_axi_read_out_if_configuration_s + // structure. The function returns the handle to the prim_axi_read_out_if_configuration_struct. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + prim_axi_read_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + prim_axi_read_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + prim_axi_read_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + prim_axi_read_out_if_configuration_cg.set_inst_name($sformatf("prim_axi_read_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(prim_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver.svh new file mode 100644 index 000000000..495604d11 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual prim_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( prim_axi_read_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in prim_axi_read_out_if_macros.svh +//******************************************************************* +// Initiator macro used by prim_axi_read_out_if_driver and prim_axi_read_out_if_driver_bfm +// to communicate initiator driven data to prim_axi_read_out_if_driver_bfm. +`prim_axi_read_out_if_INITIATOR_STRUCT + prim_axi_read_out_if_initiator_s prim_axi_read_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by prim_axi_read_out_if_driver and prim_axi_read_out_if_driver_bfm +// to communicate Responder driven data to prim_axi_read_out_if_driver_bfm. +`prim_axi_read_out_if_RESPONDER_STRUCT + prim_axi_read_out_if_responder_s prim_axi_read_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + prim_axi_read_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(prim_axi_read_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + prim_axi_read_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(prim_axi_read_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver_bfm.sv new file mode 100644 index 000000000..d7dd2549e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the prim_axi_read_out_if signal driving. It is +// accessed by the uvm prim_axi_read_out_if driver through a virtual interface +// handle in the prim_axi_read_out_if configuration. It drives the singals passed +// in through the port connection named bus of type prim_axi_read_out_if_if. +// +// Input signals from the prim_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within prim_axi_read_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_read_out_if_pkg_hdl::*; +`include "src/prim_axi_read_out_if_macros.svh" + +interface prim_axi_read_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (prim_axi_read_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute prim_axi_read_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + prim_axi_read_out_if_pkg::prim_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in prim_axi_read_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from prim_axi_read_out_if_driver to this BFM + // **************************************************************************** + `prim_axi_read_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by prim_axi_read_out_if_driver and prim_axi_read_out_if_driver_bfm + // to communicate initiator driven data to prim_axi_read_out_if_driver_bfm. + `prim_axi_read_out_if_INITIATOR_STRUCT + prim_axi_read_out_if_initiator_s initiator_struct; + // Responder macro used by prim_axi_read_out_if_driver and prim_axi_read_out_if_driver_bfm + // to communicate Responder driven data to prim_axi_read_out_if_driver_bfm. + `prim_axi_read_out_if_RESPONDER_STRUCT + prim_axi_read_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(prim_axi_read_out_if_configuration_s prim_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input prim_axi_read_out_if_initiator_s prim_axi_read_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output prim_axi_read_out_if_responder_s prim_axi_read_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the prim_axi_read_out_if_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Members within the prim_axi_read_out_if_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + initiator_struct = prim_axi_read_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // prim_axi_read_out_if_responder_struct.xyz = arready_i; // + // prim_axi_read_out_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // prim_axi_read_out_if_responder_struct.xyz = rresp_i; // + // prim_axi_read_out_if_responder_struct.xyz = rid_i; // + // prim_axi_read_out_if_responder_struct.xyz = rlast_i; // + // prim_axi_read_out_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // prim_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = prim_axi_read_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output prim_axi_read_out_if_initiator_s prim_axi_read_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input prim_axi_read_out_if_responder_s prim_axi_read_out_if_responder_struct + );// pragma tbx xtf + // Variables within the prim_axi_read_out_if_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Variables within the prim_axi_read_out_if_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= prim_axi_read_out_if_initiator_struct.xyz; // + // rdata_o <= prim_axi_read_out_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= prim_axi_read_out_if_initiator_struct.xyz; // + // rid_o <= prim_axi_read_out_if_initiator_struct.xyz; // + // rlast_o <= prim_axi_read_out_if_initiator_struct.xyz; // + // rvalid_o <= prim_axi_read_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the prim_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the prim_axi_read_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_if.sv new file mode 100644 index 000000000..c73529236 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the prim_axi_read_out_if interface signals. +// It is instantiated once per prim_axi_read_out_if bus. Bus Functional Models, +// BFM's named prim_axi_read_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named prim_axi_read_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(prim_axi_read_out_if_bus.arready), // Agent input +// .dut_signal_port(prim_axi_read_out_if_bus.rdata), // Agent input +// .dut_signal_port(prim_axi_read_out_if_bus.rresp), // Agent input +// .dut_signal_port(prim_axi_read_out_if_bus.rid), // Agent input +// .dut_signal_port(prim_axi_read_out_if_bus.rlast), // Agent input +// .dut_signal_port(prim_axi_read_out_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import prim_axi_read_out_if_pkg_hdl::*; + +interface prim_axi_read_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_macros.svh new file mode 100644 index 000000000..902824de8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the prim_axi_read_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the prim_axi_read_out_if_configuration class. +// + `define prim_axi_read_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } prim_axi_read_out_if_configuration_s; + + `define prim_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function prim_axi_read_out_if_configuration_s to_struct();\ + prim_axi_read_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( prim_axi_read_out_if_configuration_struct );\ + endfunction + + `define prim_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(prim_axi_read_out_if_configuration_s prim_axi_read_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = prim_axi_read_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the prim_axi_read_out_if_transaction class. +// + `define prim_axi_read_out_if_MONITOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } prim_axi_read_out_if_monitor_s; + + `define prim_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function prim_axi_read_out_if_monitor_s to_monitor_struct();\ + prim_axi_read_out_if_monitor_struct = \ + { \ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( prim_axi_read_out_if_monitor_struct);\ + endfunction\ + + `define prim_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(prim_axi_read_out_if_monitor_s prim_axi_read_out_if_monitor_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = prim_axi_read_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the prim_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_read_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } prim_axi_read_out_if_initiator_s; + + `define prim_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function prim_axi_read_out_if_initiator_s to_initiator_struct();\ + prim_axi_read_out_if_initiator_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( prim_axi_read_out_if_initiator_struct);\ + endfunction + + `define prim_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(prim_axi_read_out_if_initiator_s prim_axi_read_out_if_initiator_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = prim_axi_read_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the prim_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_read_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } prim_axi_read_out_if_responder_s; + + `define prim_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function prim_axi_read_out_if_responder_s to_responder_struct();\ + prim_axi_read_out_if_responder_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( prim_axi_read_out_if_responder_struct);\ + endfunction + + `define prim_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(prim_axi_read_out_if_responder_s prim_axi_read_out_if_responder_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = prim_axi_read_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor.svh new file mode 100644 index 000000000..523177215 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives prim_axi_read_out_if transactions observed by the +// prim_axi_read_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual prim_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_read_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`prim_axi_read_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the prim_axi_read_out_if_monitor_struct. + virtual function void notify_transaction(input prim_axi_read_out_if_monitor_s prim_axi_read_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(prim_axi_read_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor_bfm.sv new file mode 100644 index 000000000..7e5d3651d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the prim_axi_read_out_if signal monitoring. +// It is accessed by the uvm prim_axi_read_out_if monitor through a virtual +// interface handle in the prim_axi_read_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type prim_axi_read_out_if_if. +// +// Input signals from the prim_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the prim_axi_read_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_read_out_if_pkg_hdl::*; +`include "src/prim_axi_read_out_if_macros.svh" + + +interface prim_axi_read_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( prim_axi_read_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute prim_axi_read_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`prim_axi_read_out_if_MONITOR_STRUCT + prim_axi_read_out_if_monitor_s prim_axi_read_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `prim_axi_read_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + prim_axi_read_out_if_pkg::prim_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( prim_axi_read_out_if_monitor_struct ); + + + proxy.notify_transaction( prim_axi_read_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(prim_axi_read_out_if_configuration_s prim_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output prim_axi_read_out_if_monitor_s prim_axi_read_out_if_monitor_struct); + // + // Available struct members: + // // prim_axi_read_out_if_monitor_struct.prim_arready + // // prim_axi_read_out_if_monitor_struct.prim_rdata + // // prim_axi_read_out_if_monitor_struct.prim_rresp + // // prim_axi_read_out_if_monitor_struct.prim_rid + // // prim_axi_read_out_if_monitor_struct.prim_rlast + // // prim_axi_read_out_if_monitor_struct.prim_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // prim_axi_read_out_if_monitor_struct.xyz = arready_i; // + // prim_axi_read_out_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // prim_axi_read_out_if_monitor_struct.xyz = rresp_i; // + // prim_axi_read_out_if_monitor_struct.xyz = rid_i; // + // prim_axi_read_out_if_monitor_struct.xyz = rlast_i; // + // prim_axi_read_out_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_random_sequence.svh new file mode 100644 index 000000000..9f624f7a3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the prim_axi_read_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a prim_axi_read_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_read_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=prim_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "prim_axi_read_out_if_random_sequence::body()-prim_axi_read_out_if_transaction randomization failed") + // Send the transaction to the prim_axi_read_out_if_driver_bfm via the sequencer and prim_axi_read_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: prim_axi_read_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_responder_sequence.svh new file mode 100644 index 000000000..ecfaf2543 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_read_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "prim_axi_read_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=prim_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_sequence_base.svh new file mode 100644 index 000000000..8d4377f4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_read_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_read_out_if_transaction_req_t; + prim_axi_read_out_if_transaction_req_t req; + typedef prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_read_out_if_transaction_rsp_t; + prim_axi_read_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = prim_axi_read_out_if_transaction_req_t::type_id::create("req"); + rsp = prim_axi_read_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction.svh new file mode 100644 index 000000000..972915ab7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an prim_axi_read_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( prim_axi_read_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_arready ; + logic [DW-1:0] prim_rdata ; + axi_pkg::axi_burst_e prim_rresp ; + logic [IW-1:0] prim_rid ; + logic prim_rlast ; + logic prim_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in prim_axi_read_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by prim_axi_read_out_if_monitor and prim_axi_read_out_if_monitor_bfm + // This struct is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_MONITOR_STRUCT + prim_axi_read_out_if_monitor_s prim_axi_read_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a prim_axi_read_out_if_monitor_s + // structure. The function returns the handle to the prim_axi_read_out_if_monitor_struct. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by prim_axi_read_out_if_driver and prim_axi_read_out_if_driver_bfm + // to communicate initiator driven data to prim_axi_read_out_if_driver_bfm. + // This struct is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_INITIATOR_STRUCT + prim_axi_read_out_if_initiator_s prim_axi_read_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a prim_axi_read_out_if_initiator_s + // structure. The function returns the handle to the prim_axi_read_out_if_initiator_struct. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by prim_axi_read_out_if_driver and prim_axi_read_out_if_driver_bfm + // to communicate Responder driven data to prim_axi_read_out_if_driver_bfm. + // This struct is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_RESPONDER_STRUCT + prim_axi_read_out_if_responder_s prim_axi_read_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a prim_axi_read_out_if_responder_s + // structure. The function returns the handle to the prim_axi_read_out_if_responder_struct. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_arready:0x%x prim_rdata:0x%x prim_rresp:0x%x prim_rid:0x%x prim_rlast:0x%x prim_rvalid:0x%x ",prim_arready,prim_rdata,prim_rresp,prim_rid,prim_rlast,prim_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_arready == RHS.prim_arready) + &&(this.prim_rdata == RHS.prim_rdata) + &&(this.prim_rresp == RHS.prim_rresp) + &&(this.prim_rid == RHS.prim_rid) + &&(this.prim_rlast == RHS.prim_rlast) + &&(this.prim_rvalid == RHS.prim_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_arready = RHS.prim_arready; + this.prim_rdata = RHS.prim_rdata; + this.prim_rresp = RHS.prim_rresp; + this.prim_rid = RHS.prim_rid; + this.prim_rlast = RHS.prim_rlast; + this.prim_rvalid = RHS.prim_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"prim_axi_read_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_arready,"prim_arready"); + $add_attribute(transaction_view_h,prim_rdata,"prim_rdata"); + $add_attribute(transaction_view_h,prim_rresp,"prim_rresp"); + $add_attribute(transaction_view_h,prim_rid,"prim_rid"); + $add_attribute(transaction_view_h,prim_rlast,"prim_rlast"); + $add_attribute(transaction_view_h,prim_rvalid,"prim_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction_coverage.svh new file mode 100644 index 000000000..cf69fb8ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records prim_axi_read_out_if transaction information using +// a covergroup named prim_axi_read_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_read_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup prim_axi_read_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_arready: coverpoint coverage_trans.prim_arready; + prim_rdata: coverpoint coverage_trans.prim_rdata; + prim_rresp: coverpoint coverage_trans.prim_rresp; + prim_rid: coverpoint coverage_trans.prim_rid; + prim_rlast: coverpoint coverage_trans.prim_rlast; + prim_rvalid: coverpoint coverage_trans.prim_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + prim_axi_read_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + prim_axi_read_out_if_transaction_cg.set_inst_name($sformatf("prim_axi_read_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + prim_axi_read_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/yaml/prim_axi_read_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/yaml/prim_axi_read_out_if_interface.yaml new file mode 100644 index 000000000..5c3006321 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_read_out_if_pkg/yaml/prim_axi_read_out_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + prim_axi_read_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/.project new file mode 100644 index 000000000..97cc8aeb8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/.project @@ -0,0 +1,30 @@ + + + prim_axi_write_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/.svproject new file mode 100644 index 000000000..79b1f983b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/Makefile new file mode 100644 index 000000000..623a7daa4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/Makefile @@ -0,0 +1,66 @@ +# prim_axi_write_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +prim_axi_write_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f + +prim_axi_write_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f + +prim_axi_write_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f + +COMP_prim_axi_write_if_PKG_TGT_0 = q_comp_prim_axi_write_if_pkg +COMP_prim_axi_write_if_PKG_TGT_1 = v_comp_prim_axi_write_if_pkg +COMP_prim_axi_write_if_PKG_TGT = $(COMP_prim_axi_write_if_PKG_TGT_$(USE_VELOCE)) + +comp_prim_axi_write_if_pkg: $(COMP_prim_axi_write_if_PKG_TGT) + +q_comp_prim_axi_write_if_pkg: + $(HDL_COMP_CMD) $(prim_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_write_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_write_if_PKG_XRTL) + +v_comp_prim_axi_write_if_pkg: + $(HVL_COMP_CMD) $(prim_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_write_if_PKG) + $(VELANALYZE_CMD) $(prim_axi_write_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(prim_axi_write_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_write_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export prim_axi_write_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/dpi + +C_FILE_COMPILE_LIST_prim_axi_write_if_pkg = \ + +O_FILE_COMPILE_LIST_prim_axi_write_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_prim_axi_write_if_pkg:.c=.o)) + +GCC_COMP_ARGS_prim_axi_write_if_pkg += -I$(prim_axi_write_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_prim_axi_write_if_pkg += $(prim_axi_write_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_prim_axi_write_if_pkg += \ + \ + -o .so + +comp_prim_axi_write_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_prim_axi_write_if_pkg) $(C_FILE_COMPILE_LIST_prim_axi_write_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_prim_axi_write_if_pkg) $(O_FILE_COMPILE_LIST_prim_axi_write_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/compile.do new file mode 100644 index 000000000..677a4a098 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of prim_axi_write_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if.compile new file mode 100644 index 000000000..bd0dc7378 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if.compile @@ -0,0 +1,3 @@ +needs: + - prim_axi_write_if_hvl.compile + - prim_axi_write_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_bfm.vinfo new file mode 100644 index 000000000..aaa26f79c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use prim_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/prim_axi_write_if_if.sv +src/prim_axi_write_if_driver_bfm.sv +src/prim_axi_write_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_common.compile new file mode 100644 index 000000000..f496fac10 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f new file mode 100644 index 000000000..efc271244 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f new file mode 100644 index 000000000..711212b62 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f new file mode 100644 index 000000000..9dc37651b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hdl.compile new file mode 100644 index 000000000..547090a3d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./prim_axi_write_if_common.compile +incdir: + - . +src: + - src/prim_axi_write_if_if.sv + - src/prim_axi_write_if_monitor_bfm.sv + - src/prim_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hvl.compile new file mode 100644 index 000000000..07cd15926 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./prim_axi_write_if_common.compile +incdir: + - . +src: + - prim_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.sv new file mode 100644 index 000000000..78143d109 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_write_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import prim_axi_write_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/prim_axi_write_if_macros.svh" + + export prim_axi_write_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/prim_axi_write_if_typedefs.svh" + `include "src/prim_axi_write_if_transaction.svh" + + `include "src/prim_axi_write_if_configuration.svh" + `include "src/prim_axi_write_if_driver.svh" + `include "src/prim_axi_write_if_monitor.svh" + + `include "src/prim_axi_write_if_transaction_coverage.svh" + `include "src/prim_axi_write_if_sequence_base.svh" + `include "src/prim_axi_write_if_random_sequence.svh" + + `include "src/prim_axi_write_if_responder_sequence.svh" + `include "src/prim_axi_write_if2reg_adapter.svh" + + `include "src/prim_axi_write_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.vinfo new file mode 100644 index 000000000..da70e9f95 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use prim_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +prim_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.sv new file mode 100644 index 000000000..dbe4a2871 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_write_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/prim_axi_write_if_typedefs_hdl.svh" + `include "src/prim_axi_write_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.vinfo new file mode 100644 index 000000000..8eb50779a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_sve.F new file mode 100644 index 000000000..2232ac433 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if2reg_adapter.svh new file mode 100644 index 000000000..1aad1f2c1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the prim_axi_write_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( prim_axi_write_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "prim_axi_write_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : prim_axi_write_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_agent.svh new file mode 100644 index 000000000..db46f4fe1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(prim_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(prim_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(prim_axi_write_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( prim_axi_write_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_configuration.svh new file mode 100644 index 000000000..114b7e0ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the prim_axi_write_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual prim_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual prim_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_write_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup prim_axi_write_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_CONFIGURATION_STRUCT + prim_axi_write_if_configuration_s prim_axi_write_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a prim_axi_write_if_configuration_s + // structure. The function returns the handle to the prim_axi_write_if_configuration_struct. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + prim_axi_write_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + prim_axi_write_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + prim_axi_write_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + prim_axi_write_if_configuration_cg.set_inst_name($sformatf("prim_axi_write_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver.svh new file mode 100644 index 000000000..f1028f48a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual prim_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( prim_axi_write_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in prim_axi_write_if_macros.svh +//******************************************************************* +// Initiator macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm +// to communicate initiator driven data to prim_axi_write_if_driver_bfm. +`prim_axi_write_if_INITIATOR_STRUCT + prim_axi_write_if_initiator_s prim_axi_write_if_initiator_struct; +//******************************************************************* +// Responder macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm +// to communicate Responder driven data to prim_axi_write_if_driver_bfm. +`prim_axi_write_if_RESPONDER_STRUCT + prim_axi_write_if_responder_s prim_axi_write_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + prim_axi_write_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(prim_axi_write_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + prim_axi_write_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(prim_axi_write_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver_bfm.sv new file mode 100644 index 000000000..62c377ccd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the prim_axi_write_if signal driving. It is +// accessed by the uvm prim_axi_write_if driver through a virtual interface +// handle in the prim_axi_write_if configuration. It drives the singals passed +// in through the port connection named bus of type prim_axi_write_if_if. +// +// Input signals from the prim_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within prim_axi_write_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_write_if_pkg_hdl::*; +`include "src/prim_axi_write_if_macros.svh" + +interface prim_axi_write_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (prim_axi_write_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute prim_axi_write_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + prim_axi_write_if_pkg::prim_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in prim_axi_write_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from prim_axi_write_if_driver to this BFM + // **************************************************************************** + `prim_axi_write_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm + // to communicate initiator driven data to prim_axi_write_if_driver_bfm. + `prim_axi_write_if_INITIATOR_STRUCT + prim_axi_write_if_initiator_s initiator_struct; + // Responder macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm + // to communicate Responder driven data to prim_axi_write_if_driver_bfm. + `prim_axi_write_if_RESPONDER_STRUCT + prim_axi_write_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(prim_axi_write_if_configuration_s prim_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input prim_axi_write_if_initiator_s prim_axi_write_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output prim_axi_write_if_responder_s prim_axi_write_if_responder_struct + );// pragma tbx xtf + // + // Members within the prim_axi_write_if_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Members within the prim_axi_write_if_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + initiator_struct = prim_axi_write_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // prim_axi_write_if_responder_struct.xyz = awready_i; // + // prim_axi_write_if_responder_struct.xyz = wready_i; // + // prim_axi_write_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // prim_axi_write_if_responder_struct.xyz = bid_i; // + // prim_axi_write_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // prim_axi_write_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = prim_axi_write_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output prim_axi_write_if_initiator_s prim_axi_write_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input prim_axi_write_if_responder_s prim_axi_write_if_responder_struct + );// pragma tbx xtf + // Variables within the prim_axi_write_if_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Variables within the prim_axi_write_if_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= prim_axi_write_if_initiator_struct.xyz; // + // wready_o <= prim_axi_write_if_initiator_struct.xyz; // + // bresp_o <= prim_axi_write_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= prim_axi_write_if_initiator_struct.xyz; // + // bvalid_o <= prim_axi_write_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the prim_axi_write_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the prim_axi_write_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_if.sv new file mode 100644 index 000000000..de556ace4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the prim_axi_write_if interface signals. +// It is instantiated once per prim_axi_write_if bus. Bus Functional Models, +// BFM's named prim_axi_write_if_driver_bfm, are used to drive signals on the bus. +// BFM's named prim_axi_write_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(prim_axi_write_if_bus.awready), // Agent input +// .dut_signal_port(prim_axi_write_if_bus.wready), // Agent input +// .dut_signal_port(prim_axi_write_if_bus.bresp), // Agent input +// .dut_signal_port(prim_axi_write_if_bus.bid), // Agent input +// .dut_signal_port(prim_axi_write_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import prim_axi_write_if_pkg_hdl::*; + +interface prim_axi_write_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_macros.svh new file mode 100644 index 000000000..95c6a8bf7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the prim_axi_write_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the prim_axi_write_if_configuration class. +// + `define prim_axi_write_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } prim_axi_write_if_configuration_s; + + `define prim_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function prim_axi_write_if_configuration_s to_struct();\ + prim_axi_write_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( prim_axi_write_if_configuration_struct );\ + endfunction + + `define prim_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(prim_axi_write_if_configuration_s prim_axi_write_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = prim_axi_write_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the prim_axi_write_if_transaction class. +// + `define prim_axi_write_if_MONITOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } prim_axi_write_if_monitor_s; + + `define prim_axi_write_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function prim_axi_write_if_monitor_s to_monitor_struct();\ + prim_axi_write_if_monitor_struct = \ + { \ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( prim_axi_write_if_monitor_struct);\ + endfunction\ + + `define prim_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(prim_axi_write_if_monitor_s prim_axi_write_if_monitor_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = prim_axi_write_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the prim_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_write_if_INITIATOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } prim_axi_write_if_initiator_s; + + `define prim_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function prim_axi_write_if_initiator_s to_initiator_struct();\ + prim_axi_write_if_initiator_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( prim_axi_write_if_initiator_struct);\ + endfunction + + `define prim_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(prim_axi_write_if_initiator_s prim_axi_write_if_initiator_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = prim_axi_write_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the prim_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_write_if_RESPONDER_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } prim_axi_write_if_responder_s; + + `define prim_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function prim_axi_write_if_responder_s to_responder_struct();\ + prim_axi_write_if_responder_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( prim_axi_write_if_responder_struct);\ + endfunction + + `define prim_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(prim_axi_write_if_responder_s prim_axi_write_if_responder_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = prim_axi_write_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor.svh new file mode 100644 index 000000000..67050c334 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives prim_axi_write_if transactions observed by the +// prim_axi_write_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual prim_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_write_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`prim_axi_write_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the prim_axi_write_if_monitor_struct. + virtual function void notify_transaction(input prim_axi_write_if_monitor_s prim_axi_write_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(prim_axi_write_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor_bfm.sv new file mode 100644 index 000000000..7719d6325 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the prim_axi_write_if signal monitoring. +// It is accessed by the uvm prim_axi_write_if monitor through a virtual +// interface handle in the prim_axi_write_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type prim_axi_write_if_if. +// +// Input signals from the prim_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the prim_axi_write_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_write_if_pkg_hdl::*; +`include "src/prim_axi_write_if_macros.svh" + + +interface prim_axi_write_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( prim_axi_write_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute prim_axi_write_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`prim_axi_write_if_MONITOR_STRUCT + prim_axi_write_if_monitor_s prim_axi_write_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `prim_axi_write_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + prim_axi_write_if_pkg::prim_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( prim_axi_write_if_monitor_struct ); + + + proxy.notify_transaction( prim_axi_write_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(prim_axi_write_if_configuration_s prim_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output prim_axi_write_if_monitor_s prim_axi_write_if_monitor_struct); + // + // Available struct members: + // // prim_axi_write_if_monitor_struct.prim_awready + // // prim_axi_write_if_monitor_struct.prim_wready + // // prim_axi_write_if_monitor_struct.prim_bresp + // // prim_axi_write_if_monitor_struct.prim_bid + // // prim_axi_write_if_monitor_struct.prim_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // prim_axi_write_if_monitor_struct.xyz = awready_i; // + // prim_axi_write_if_monitor_struct.xyz = wready_i; // + // prim_axi_write_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // prim_axi_write_if_monitor_struct.xyz = bid_i; // + // prim_axi_write_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_random_sequence.svh new file mode 100644 index 000000000..12e4f9c83 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the prim_axi_write_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a prim_axi_write_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_write_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "prim_axi_write_if_random_sequence::body()-prim_axi_write_if_transaction randomization failed") + // Send the transaction to the prim_axi_write_if_driver_bfm via the sequencer and prim_axi_write_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: prim_axi_write_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_responder_sequence.svh new file mode 100644 index 000000000..eec3703ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_write_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "prim_axi_write_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_sequence_base.svh new file mode 100644 index 000000000..a606d7b2b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_write_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_write_if_transaction_req_t; + prim_axi_write_if_transaction_req_t req; + typedef prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_write_if_transaction_rsp_t; + prim_axi_write_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = prim_axi_write_if_transaction_req_t::type_id::create("req"); + rsp = prim_axi_write_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction.svh new file mode 100644 index 000000000..7e1571969 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an prim_axi_write_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( prim_axi_write_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_awready ; + logic prim_wready ; + axi_pkg::axi_burst_e prim_bresp ; + logic prim_bid ; + logic prim_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in prim_axi_write_if_macros.svh + + //******************************************************************* + // Monitor macro used by prim_axi_write_if_monitor and prim_axi_write_if_monitor_bfm + // This struct is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_MONITOR_STRUCT + prim_axi_write_if_monitor_s prim_axi_write_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a prim_axi_write_if_monitor_s + // structure. The function returns the handle to the prim_axi_write_if_monitor_struct. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm + // to communicate initiator driven data to prim_axi_write_if_driver_bfm. + // This struct is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_INITIATOR_STRUCT + prim_axi_write_if_initiator_s prim_axi_write_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a prim_axi_write_if_initiator_s + // structure. The function returns the handle to the prim_axi_write_if_initiator_struct. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm + // to communicate Responder driven data to prim_axi_write_if_driver_bfm. + // This struct is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_RESPONDER_STRUCT + prim_axi_write_if_responder_s prim_axi_write_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a prim_axi_write_if_responder_s + // structure. The function returns the handle to the prim_axi_write_if_responder_struct. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awready:0x%x prim_wready:0x%x prim_bresp:0x%x prim_bid:0x%x prim_bvalid:0x%x ",prim_awready,prim_wready,prim_bresp,prim_bid,prim_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_awready == RHS.prim_awready) + &&(this.prim_wready == RHS.prim_wready) + &&(this.prim_bresp == RHS.prim_bresp) + &&(this.prim_bid == RHS.prim_bid) + &&(this.prim_bvalid == RHS.prim_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awready = RHS.prim_awready; + this.prim_wready = RHS.prim_wready; + this.prim_bresp = RHS.prim_bresp; + this.prim_bid = RHS.prim_bid; + this.prim_bvalid = RHS.prim_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"prim_axi_write_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awready,"prim_awready"); + $add_attribute(transaction_view_h,prim_wready,"prim_wready"); + $add_attribute(transaction_view_h,prim_bresp,"prim_bresp"); + $add_attribute(transaction_view_h,prim_bid,"prim_bid"); + $add_attribute(transaction_view_h,prim_bvalid,"prim_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction_coverage.svh new file mode 100644 index 000000000..6f9d9804b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records prim_axi_write_if transaction information using +// a covergroup named prim_axi_write_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_write_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup prim_axi_write_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awready: coverpoint coverage_trans.prim_awready; + prim_wready: coverpoint coverage_trans.prim_wready; + prim_bresp: coverpoint coverage_trans.prim_bresp; + prim_bid: coverpoint coverage_trans.prim_bid; + prim_bvalid: coverpoint coverage_trans.prim_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + prim_axi_write_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + prim_axi_write_if_transaction_cg.set_inst_name($sformatf("prim_axi_write_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + prim_axi_write_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/yaml/prim_axi_write_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/yaml/prim_axi_write_if_interface.yaml new file mode 100644 index 000000000..e5bd3c347 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_if_pkg/yaml/prim_axi_write_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + prim_axi_write_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.project new file mode 100644 index 000000000..c176cd178 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + prim_axi_write_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.svproject new file mode 100644 index 000000000..0999e5cba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/Makefile new file mode 100644 index 000000000..2ecf149e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# prim_axi_write_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +prim_axi_write_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hvl.f + +prim_axi_write_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hdl.f + +prim_axi_write_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_xrtl.f + +COMP_prim_axi_write_out_if_PKG_TGT_0 = q_comp_prim_axi_write_out_if_pkg +COMP_prim_axi_write_out_if_PKG_TGT_1 = v_comp_prim_axi_write_out_if_pkg +COMP_prim_axi_write_out_if_PKG_TGT = $(COMP_prim_axi_write_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_prim_axi_write_out_if_pkg: $(COMP_prim_axi_write_out_if_PKG_TGT) + +q_comp_prim_axi_write_out_if_pkg: + $(HDL_COMP_CMD) $(prim_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_write_out_if_PKG_XRTL) + +v_comp_prim_axi_write_out_if_pkg: + $(HVL_COMP_CMD) $(prim_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_write_out_if_PKG) + $(VELANALYZE_CMD) $(prim_axi_write_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(prim_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_write_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export prim_axi_write_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_prim_axi_write_out_if_pkg = \ + +O_FILE_COMPILE_LIST_prim_axi_write_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_prim_axi_write_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_prim_axi_write_out_if_pkg += -I$(prim_axi_write_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_prim_axi_write_out_if_pkg += $(prim_axi_write_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_prim_axi_write_out_if_pkg += \ + \ + -o .so + +comp_prim_axi_write_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_prim_axi_write_out_if_pkg) $(C_FILE_COMPILE_LIST_prim_axi_write_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_prim_axi_write_out_if_pkg) $(O_FILE_COMPILE_LIST_prim_axi_write_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/compile.do new file mode 100644 index 000000000..15879fa4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of prim_axi_write_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if.compile new file mode 100644 index 000000000..3bec6af69 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if.compile @@ -0,0 +1,3 @@ +needs: + - prim_axi_write_out_if_hvl.compile + - prim_axi_write_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_bfm.vinfo new file mode 100644 index 000000000..3260e601e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use prim_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/prim_axi_write_out_if_if.sv +src/prim_axi_write_out_if_driver_bfm.sv +src/prim_axi_write_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_common.compile new file mode 100644 index 000000000..18c7cd074 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - prim_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hdl.f new file mode 100644 index 000000000..fca35261c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hvl.f new file mode 100644 index 000000000..cc3120398 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_xrtl.f new file mode 100644 index 000000000..d880c05ab --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hdl.compile new file mode 100644 index 000000000..1e451c889 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./prim_axi_write_out_if_common.compile +incdir: + - . +src: + - src/prim_axi_write_out_if_if.sv + - src/prim_axi_write_out_if_monitor_bfm.sv + - src/prim_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hvl.compile new file mode 100644 index 000000000..7c4235dd0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./prim_axi_write_out_if_common.compile +incdir: + - . +src: + - prim_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.sv new file mode 100644 index 000000000..e9936a387 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_write_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import prim_axi_write_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/prim_axi_write_out_if_macros.svh" + + export prim_axi_write_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/prim_axi_write_out_if_typedefs.svh" + `include "src/prim_axi_write_out_if_transaction.svh" + + `include "src/prim_axi_write_out_if_configuration.svh" + `include "src/prim_axi_write_out_if_driver.svh" + `include "src/prim_axi_write_out_if_monitor.svh" + + `include "src/prim_axi_write_out_if_transaction_coverage.svh" + `include "src/prim_axi_write_out_if_sequence_base.svh" + `include "src/prim_axi_write_out_if_random_sequence.svh" + + `include "src/prim_axi_write_out_if_responder_sequence.svh" + `include "src/prim_axi_write_out_if2reg_adapter.svh" + + `include "src/prim_axi_write_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.vinfo new file mode 100644 index 000000000..202d1770d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use prim_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +prim_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.sv new file mode 100644 index 000000000..2956468f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_write_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/prim_axi_write_out_if_typedefs_hdl.svh" + `include "src/prim_axi_write_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..8528147da --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +prim_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_sve.F new file mode 100644 index 000000000..492fecffa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if2reg_adapter.svh new file mode 100644 index 000000000..3937222fe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the prim_axi_write_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( prim_axi_write_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "prim_axi_write_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : prim_axi_write_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_agent.svh new file mode 100644 index 000000000..2a241e356 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(prim_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(prim_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(prim_axi_write_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( prim_axi_write_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_configuration.svh new file mode 100644 index 000000000..7494ed5da --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the prim_axi_write_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual prim_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual prim_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_write_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup prim_axi_write_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_CONFIGURATION_STRUCT + prim_axi_write_out_if_configuration_s prim_axi_write_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a prim_axi_write_out_if_configuration_s + // structure. The function returns the handle to the prim_axi_write_out_if_configuration_struct. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + prim_axi_write_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + prim_axi_write_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + prim_axi_write_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + prim_axi_write_out_if_configuration_cg.set_inst_name($sformatf("prim_axi_write_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(prim_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver.svh new file mode 100644 index 000000000..15cac7080 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual prim_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( prim_axi_write_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in prim_axi_write_out_if_macros.svh +//******************************************************************* +// Initiator macro used by prim_axi_write_out_if_driver and prim_axi_write_out_if_driver_bfm +// to communicate initiator driven data to prim_axi_write_out_if_driver_bfm. +`prim_axi_write_out_if_INITIATOR_STRUCT + prim_axi_write_out_if_initiator_s prim_axi_write_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by prim_axi_write_out_if_driver and prim_axi_write_out_if_driver_bfm +// to communicate Responder driven data to prim_axi_write_out_if_driver_bfm. +`prim_axi_write_out_if_RESPONDER_STRUCT + prim_axi_write_out_if_responder_s prim_axi_write_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + prim_axi_write_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(prim_axi_write_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + prim_axi_write_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(prim_axi_write_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver_bfm.sv new file mode 100644 index 000000000..eaecaa7f0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the prim_axi_write_out_if signal driving. It is +// accessed by the uvm prim_axi_write_out_if driver through a virtual interface +// handle in the prim_axi_write_out_if configuration. It drives the singals passed +// in through the port connection named bus of type prim_axi_write_out_if_if. +// +// Input signals from the prim_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within prim_axi_write_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_write_out_if_pkg_hdl::*; +`include "src/prim_axi_write_out_if_macros.svh" + +interface prim_axi_write_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (prim_axi_write_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute prim_axi_write_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + prim_axi_write_out_if_pkg::prim_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in prim_axi_write_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from prim_axi_write_out_if_driver to this BFM + // **************************************************************************** + `prim_axi_write_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by prim_axi_write_out_if_driver and prim_axi_write_out_if_driver_bfm + // to communicate initiator driven data to prim_axi_write_out_if_driver_bfm. + `prim_axi_write_out_if_INITIATOR_STRUCT + prim_axi_write_out_if_initiator_s initiator_struct; + // Responder macro used by prim_axi_write_out_if_driver and prim_axi_write_out_if_driver_bfm + // to communicate Responder driven data to prim_axi_write_out_if_driver_bfm. + `prim_axi_write_out_if_RESPONDER_STRUCT + prim_axi_write_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(prim_axi_write_out_if_configuration_s prim_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input prim_axi_write_out_if_initiator_s prim_axi_write_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output prim_axi_write_out_if_responder_s prim_axi_write_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the prim_axi_write_out_if_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Members within the prim_axi_write_out_if_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + initiator_struct = prim_axi_write_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // prim_axi_write_out_if_responder_struct.xyz = awready_i; // + // prim_axi_write_out_if_responder_struct.xyz = wready_i; // + // prim_axi_write_out_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // prim_axi_write_out_if_responder_struct.xyz = bid_i; // + // prim_axi_write_out_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // prim_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = prim_axi_write_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output prim_axi_write_out_if_initiator_s prim_axi_write_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input prim_axi_write_out_if_responder_s prim_axi_write_out_if_responder_struct + );// pragma tbx xtf + // Variables within the prim_axi_write_out_if_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Variables within the prim_axi_write_out_if_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= prim_axi_write_out_if_initiator_struct.xyz; // + // wready_o <= prim_axi_write_out_if_initiator_struct.xyz; // + // bresp_o <= prim_axi_write_out_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= prim_axi_write_out_if_initiator_struct.xyz; // + // bvalid_o <= prim_axi_write_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the prim_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the prim_axi_write_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_if.sv new file mode 100644 index 000000000..ab746c836 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the prim_axi_write_out_if interface signals. +// It is instantiated once per prim_axi_write_out_if bus. Bus Functional Models, +// BFM's named prim_axi_write_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named prim_axi_write_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(prim_axi_write_out_if_bus.awready), // Agent input +// .dut_signal_port(prim_axi_write_out_if_bus.wready), // Agent input +// .dut_signal_port(prim_axi_write_out_if_bus.bresp), // Agent input +// .dut_signal_port(prim_axi_write_out_if_bus.bid), // Agent input +// .dut_signal_port(prim_axi_write_out_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import prim_axi_write_out_if_pkg_hdl::*; + +interface prim_axi_write_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_macros.svh new file mode 100644 index 000000000..f85b89591 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the prim_axi_write_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the prim_axi_write_out_if_configuration class. +// + `define prim_axi_write_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } prim_axi_write_out_if_configuration_s; + + `define prim_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function prim_axi_write_out_if_configuration_s to_struct();\ + prim_axi_write_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( prim_axi_write_out_if_configuration_struct );\ + endfunction + + `define prim_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(prim_axi_write_out_if_configuration_s prim_axi_write_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = prim_axi_write_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the prim_axi_write_out_if_transaction class. +// + `define prim_axi_write_out_if_MONITOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } prim_axi_write_out_if_monitor_s; + + `define prim_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function prim_axi_write_out_if_monitor_s to_monitor_struct();\ + prim_axi_write_out_if_monitor_struct = \ + { \ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( prim_axi_write_out_if_monitor_struct);\ + endfunction\ + + `define prim_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(prim_axi_write_out_if_monitor_s prim_axi_write_out_if_monitor_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = prim_axi_write_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the prim_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_write_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } prim_axi_write_out_if_initiator_s; + + `define prim_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function prim_axi_write_out_if_initiator_s to_initiator_struct();\ + prim_axi_write_out_if_initiator_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( prim_axi_write_out_if_initiator_struct);\ + endfunction + + `define prim_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(prim_axi_write_out_if_initiator_s prim_axi_write_out_if_initiator_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = prim_axi_write_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the prim_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_write_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } prim_axi_write_out_if_responder_s; + + `define prim_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function prim_axi_write_out_if_responder_s to_responder_struct();\ + prim_axi_write_out_if_responder_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( prim_axi_write_out_if_responder_struct);\ + endfunction + + `define prim_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(prim_axi_write_out_if_responder_s prim_axi_write_out_if_responder_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = prim_axi_write_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor.svh new file mode 100644 index 000000000..f387b3874 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives prim_axi_write_out_if transactions observed by the +// prim_axi_write_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual prim_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_write_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`prim_axi_write_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the prim_axi_write_out_if_monitor_struct. + virtual function void notify_transaction(input prim_axi_write_out_if_monitor_s prim_axi_write_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(prim_axi_write_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor_bfm.sv new file mode 100644 index 000000000..7bb9d30cd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the prim_axi_write_out_if signal monitoring. +// It is accessed by the uvm prim_axi_write_out_if monitor through a virtual +// interface handle in the prim_axi_write_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type prim_axi_write_out_if_if. +// +// Input signals from the prim_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the prim_axi_write_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_write_out_if_pkg_hdl::*; +`include "src/prim_axi_write_out_if_macros.svh" + + +interface prim_axi_write_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( prim_axi_write_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute prim_axi_write_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`prim_axi_write_out_if_MONITOR_STRUCT + prim_axi_write_out_if_monitor_s prim_axi_write_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `prim_axi_write_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + prim_axi_write_out_if_pkg::prim_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( prim_axi_write_out_if_monitor_struct ); + + + proxy.notify_transaction( prim_axi_write_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(prim_axi_write_out_if_configuration_s prim_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output prim_axi_write_out_if_monitor_s prim_axi_write_out_if_monitor_struct); + // + // Available struct members: + // // prim_axi_write_out_if_monitor_struct.prim_awready + // // prim_axi_write_out_if_monitor_struct.prim_wready + // // prim_axi_write_out_if_monitor_struct.prim_bresp + // // prim_axi_write_out_if_monitor_struct.prim_bid + // // prim_axi_write_out_if_monitor_struct.prim_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // prim_axi_write_out_if_monitor_struct.xyz = awready_i; // + // prim_axi_write_out_if_monitor_struct.xyz = wready_i; // + // prim_axi_write_out_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // prim_axi_write_out_if_monitor_struct.xyz = bid_i; // + // prim_axi_write_out_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_random_sequence.svh new file mode 100644 index 000000000..a08f27b67 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the prim_axi_write_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a prim_axi_write_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_write_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=prim_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "prim_axi_write_out_if_random_sequence::body()-prim_axi_write_out_if_transaction randomization failed") + // Send the transaction to the prim_axi_write_out_if_driver_bfm via the sequencer and prim_axi_write_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: prim_axi_write_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_responder_sequence.svh new file mode 100644 index 000000000..5fd14eb62 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_write_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "prim_axi_write_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=prim_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_sequence_base.svh new file mode 100644 index 000000000..c5e7917da --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_write_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_write_out_if_transaction_req_t; + prim_axi_write_out_if_transaction_req_t req; + typedef prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_write_out_if_transaction_rsp_t; + prim_axi_write_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = prim_axi_write_out_if_transaction_req_t::type_id::create("req"); + rsp = prim_axi_write_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction.svh new file mode 100644 index 000000000..aea5dc8a0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an prim_axi_write_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( prim_axi_write_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_awready ; + logic prim_wready ; + axi_pkg::axi_burst_e prim_bresp ; + logic prim_bid ; + logic prim_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in prim_axi_write_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by prim_axi_write_out_if_monitor and prim_axi_write_out_if_monitor_bfm + // This struct is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_MONITOR_STRUCT + prim_axi_write_out_if_monitor_s prim_axi_write_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a prim_axi_write_out_if_monitor_s + // structure. The function returns the handle to the prim_axi_write_out_if_monitor_struct. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by prim_axi_write_out_if_driver and prim_axi_write_out_if_driver_bfm + // to communicate initiator driven data to prim_axi_write_out_if_driver_bfm. + // This struct is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_INITIATOR_STRUCT + prim_axi_write_out_if_initiator_s prim_axi_write_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a prim_axi_write_out_if_initiator_s + // structure. The function returns the handle to the prim_axi_write_out_if_initiator_struct. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by prim_axi_write_out_if_driver and prim_axi_write_out_if_driver_bfm + // to communicate Responder driven data to prim_axi_write_out_if_driver_bfm. + // This struct is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_RESPONDER_STRUCT + prim_axi_write_out_if_responder_s prim_axi_write_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a prim_axi_write_out_if_responder_s + // structure. The function returns the handle to the prim_axi_write_out_if_responder_struct. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awready:0x%x prim_wready:0x%x prim_bresp:0x%x prim_bid:0x%x prim_bvalid:0x%x ",prim_awready,prim_wready,prim_bresp,prim_bid,prim_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_awready == RHS.prim_awready) + &&(this.prim_wready == RHS.prim_wready) + &&(this.prim_bresp == RHS.prim_bresp) + &&(this.prim_bid == RHS.prim_bid) + &&(this.prim_bvalid == RHS.prim_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awready = RHS.prim_awready; + this.prim_wready = RHS.prim_wready; + this.prim_bresp = RHS.prim_bresp; + this.prim_bid = RHS.prim_bid; + this.prim_bvalid = RHS.prim_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"prim_axi_write_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awready,"prim_awready"); + $add_attribute(transaction_view_h,prim_wready,"prim_wready"); + $add_attribute(transaction_view_h,prim_bresp,"prim_bresp"); + $add_attribute(transaction_view_h,prim_bid,"prim_bid"); + $add_attribute(transaction_view_h,prim_bvalid,"prim_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction_coverage.svh new file mode 100644 index 000000000..df6bc2e86 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records prim_axi_write_out_if transaction information using +// a covergroup named prim_axi_write_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_write_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup prim_axi_write_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awready: coverpoint coverage_trans.prim_awready; + prim_wready: coverpoint coverage_trans.prim_wready; + prim_bresp: coverpoint coverage_trans.prim_bresp; + prim_bid: coverpoint coverage_trans.prim_bid; + prim_bvalid: coverpoint coverage_trans.prim_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + prim_axi_write_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + prim_axi_write_out_if_transaction_cg.set_inst_name($sformatf("prim_axi_write_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + prim_axi_write_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/yaml/prim_axi_write_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/yaml/prim_axi_write_out_if_interface.yaml new file mode 100644 index 000000000..aa66e27a7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/prim_axi_write_out_if_pkg/yaml/prim_axi_write_out_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + prim_axi_write_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/.project new file mode 100644 index 000000000..2683cb016 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + secreg_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..72277d03c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..2d3ef8fcd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# secreg_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +secreg_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f + +secreg_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f + +secreg_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f + +COMP_secreg_axi_read_if_PKG_TGT_0 = q_comp_secreg_axi_read_if_pkg +COMP_secreg_axi_read_if_PKG_TGT_1 = v_comp_secreg_axi_read_if_pkg +COMP_secreg_axi_read_if_PKG_TGT = $(COMP_secreg_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_secreg_axi_read_if_pkg: $(COMP_secreg_axi_read_if_PKG_TGT) + +q_comp_secreg_axi_read_if_pkg: + $(HDL_COMP_CMD) $(secreg_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(secreg_axi_read_if_PKG) + $(HDL_COMP_CMD) $(secreg_axi_read_if_PKG_XRTL) + +v_comp_secreg_axi_read_if_pkg: + $(HVL_COMP_CMD) $(secreg_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(secreg_axi_read_if_PKG) + $(VELANALYZE_CMD) $(secreg_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(secreg_axi_read_if_PKG) + $(HDL_COMP_CMD) $(secreg_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export secreg_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_secreg_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_secreg_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_secreg_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_secreg_axi_read_if_pkg += -I$(secreg_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_secreg_axi_read_if_pkg += $(secreg_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_secreg_axi_read_if_pkg += \ + \ + -o .so + +comp_secreg_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_secreg_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_secreg_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_secreg_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_secreg_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..864496dd5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of secreg_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if.compile new file mode 100644 index 000000000..c7d9ea90d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - secreg_axi_read_if_hvl.compile + - secreg_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..557cbed12 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use secreg_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/secreg_axi_read_if_if.sv +src/secreg_axi_read_if_driver_bfm.sv +src/secreg_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_common.compile new file mode 100644 index 000000000..fbd65847f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..7f0ec9552 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..d8510e398 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..cb3095083 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hdl.compile new file mode 100644 index 000000000..d84364941 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./secreg_axi_read_if_common.compile +incdir: + - . +src: + - src/secreg_axi_read_if_if.sv + - src/secreg_axi_read_if_monitor_bfm.sv + - src/secreg_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hvl.compile new file mode 100644 index 000000000..14ff5a6a2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./secreg_axi_read_if_common.compile +incdir: + - . +src: + - secreg_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.sv new file mode 100644 index 000000000..a8766a676 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package secreg_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import secreg_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/secreg_axi_read_if_macros.svh" + + export secreg_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/secreg_axi_read_if_typedefs.svh" + `include "src/secreg_axi_read_if_transaction.svh" + + `include "src/secreg_axi_read_if_configuration.svh" + `include "src/secreg_axi_read_if_driver.svh" + `include "src/secreg_axi_read_if_monitor.svh" + + `include "src/secreg_axi_read_if_transaction_coverage.svh" + `include "src/secreg_axi_read_if_sequence_base.svh" + `include "src/secreg_axi_read_if_random_sequence.svh" + + `include "src/secreg_axi_read_if_responder_sequence.svh" + `include "src/secreg_axi_read_if2reg_adapter.svh" + + `include "src/secreg_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..9ef82e6b1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use secreg_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +secreg_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..6e5d0d9fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package secreg_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/secreg_axi_read_if_typedefs_hdl.svh" + `include "src/secreg_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..c8b7f5572 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..ec83c1931 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..9b9b95c9c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the secreg_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( secreg_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "secreg_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : secreg_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_agent.svh new file mode 100644 index 000000000..b7809cae6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(secreg_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(secreg_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(secreg_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( secreg_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_configuration.svh new file mode 100644 index 000000000..2fff5b259 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the secreg_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual secreg_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual secreg_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( secreg_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup secreg_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_CONFIGURATION_STRUCT + secreg_axi_read_if_configuration_s secreg_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a secreg_axi_read_if_configuration_s + // structure. The function returns the handle to the secreg_axi_read_if_configuration_struct. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + secreg_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + secreg_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + secreg_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + secreg_axi_read_if_configuration_cg.set_inst_name($sformatf("secreg_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver.svh new file mode 100644 index 000000000..02e992918 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual secreg_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( secreg_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in secreg_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm +// to communicate initiator driven data to secreg_axi_read_if_driver_bfm. +`secreg_axi_read_if_INITIATOR_STRUCT + secreg_axi_read_if_initiator_s secreg_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm +// to communicate Responder driven data to secreg_axi_read_if_driver_bfm. +`secreg_axi_read_if_RESPONDER_STRUCT + secreg_axi_read_if_responder_s secreg_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + secreg_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(secreg_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + secreg_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(secreg_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..4ebf76fbf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the secreg_axi_read_if signal driving. It is +// accessed by the uvm secreg_axi_read_if driver through a virtual interface +// handle in the secreg_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type secreg_axi_read_if_if. +// +// Input signals from the secreg_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within secreg_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import secreg_axi_read_if_pkg_hdl::*; +`include "src/secreg_axi_read_if_macros.svh" + +interface secreg_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (secreg_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute secreg_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + secreg_axi_read_if_pkg::secreg_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in secreg_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from secreg_axi_read_if_driver to this BFM + // **************************************************************************** + `secreg_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm + // to communicate initiator driven data to secreg_axi_read_if_driver_bfm. + `secreg_axi_read_if_INITIATOR_STRUCT + secreg_axi_read_if_initiator_s initiator_struct; + // Responder macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm + // to communicate Responder driven data to secreg_axi_read_if_driver_bfm. + `secreg_axi_read_if_RESPONDER_STRUCT + secreg_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(secreg_axi_read_if_configuration_s secreg_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = secreg_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input secreg_axi_read_if_initiator_s secreg_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output secreg_axi_read_if_responder_s secreg_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the secreg_axi_read_if_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Members within the secreg_axi_read_if_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + initiator_struct = secreg_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // secreg_axi_read_if_responder_struct.xyz = arready_i; // + // secreg_axi_read_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // secreg_axi_read_if_responder_struct.xyz = rresp_i; // + // secreg_axi_read_if_responder_struct.xyz = rid_i; // + // secreg_axi_read_if_responder_struct.xyz = rlast_i; // + // secreg_axi_read_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // secreg_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = secreg_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output secreg_axi_read_if_initiator_s secreg_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input secreg_axi_read_if_responder_s secreg_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the secreg_axi_read_if_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Variables within the secreg_axi_read_if_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= secreg_axi_read_if_initiator_struct.xyz; // + // rdata_o <= secreg_axi_read_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= secreg_axi_read_if_initiator_struct.xyz; // + // rid_o <= secreg_axi_read_if_initiator_struct.xyz; // + // rlast_o <= secreg_axi_read_if_initiator_struct.xyz; // + // rvalid_o <= secreg_axi_read_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the secreg_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the secreg_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_if.sv new file mode 100644 index 000000000..299364565 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the secreg_axi_read_if interface signals. +// It is instantiated once per secreg_axi_read_if bus. Bus Functional Models, +// BFM's named secreg_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named secreg_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(secreg_axi_read_if_bus.arready), // Agent input +// .dut_signal_port(secreg_axi_read_if_bus.rdata), // Agent input +// .dut_signal_port(secreg_axi_read_if_bus.rresp), // Agent input +// .dut_signal_port(secreg_axi_read_if_bus.rid), // Agent input +// .dut_signal_port(secreg_axi_read_if_bus.rlast), // Agent input +// .dut_signal_port(secreg_axi_read_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import secreg_axi_read_if_pkg_hdl::*; + +interface secreg_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_macros.svh new file mode 100644 index 000000000..01e181bac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the secreg_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the secreg_axi_read_if_configuration class. +// + `define secreg_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } secreg_axi_read_if_configuration_s; + + `define secreg_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function secreg_axi_read_if_configuration_s to_struct();\ + secreg_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( secreg_axi_read_if_configuration_struct );\ + endfunction + + `define secreg_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(secreg_axi_read_if_configuration_s secreg_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = secreg_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the secreg_axi_read_if_transaction class. +// + `define secreg_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } secreg_axi_read_if_monitor_s; + + `define secreg_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function secreg_axi_read_if_monitor_s to_monitor_struct();\ + secreg_axi_read_if_monitor_struct = \ + { \ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( secreg_axi_read_if_monitor_struct);\ + endfunction\ + + `define secreg_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(secreg_axi_read_if_monitor_s secreg_axi_read_if_monitor_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = secreg_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the secreg_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define secreg_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } secreg_axi_read_if_initiator_s; + + `define secreg_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function secreg_axi_read_if_initiator_s to_initiator_struct();\ + secreg_axi_read_if_initiator_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( secreg_axi_read_if_initiator_struct);\ + endfunction + + `define secreg_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(secreg_axi_read_if_initiator_s secreg_axi_read_if_initiator_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = secreg_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the secreg_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define secreg_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } secreg_axi_read_if_responder_s; + + `define secreg_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function secreg_axi_read_if_responder_s to_responder_struct();\ + secreg_axi_read_if_responder_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( secreg_axi_read_if_responder_struct);\ + endfunction + + `define secreg_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(secreg_axi_read_if_responder_s secreg_axi_read_if_responder_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = secreg_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor.svh new file mode 100644 index 000000000..4a1a86451 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives secreg_axi_read_if transactions observed by the +// secreg_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual secreg_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( secreg_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`secreg_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the secreg_axi_read_if_monitor_struct. + virtual function void notify_transaction(input secreg_axi_read_if_monitor_s secreg_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(secreg_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..88b287386 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the secreg_axi_read_if signal monitoring. +// It is accessed by the uvm secreg_axi_read_if monitor through a virtual +// interface handle in the secreg_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type secreg_axi_read_if_if. +// +// Input signals from the secreg_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the secreg_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import secreg_axi_read_if_pkg_hdl::*; +`include "src/secreg_axi_read_if_macros.svh" + + +interface secreg_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( secreg_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute secreg_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`secreg_axi_read_if_MONITOR_STRUCT + secreg_axi_read_if_monitor_s secreg_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `secreg_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + secreg_axi_read_if_pkg::secreg_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( secreg_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( secreg_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(secreg_axi_read_if_configuration_s secreg_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = secreg_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output secreg_axi_read_if_monitor_s secreg_axi_read_if_monitor_struct); + // + // Available struct members: + // // secreg_axi_read_if_monitor_struct.secreg_arready + // // secreg_axi_read_if_monitor_struct.secreg_rdata + // // secreg_axi_read_if_monitor_struct.secreg_rresp + // // secreg_axi_read_if_monitor_struct.secreg_rid + // // secreg_axi_read_if_monitor_struct.secreg_rlast + // // secreg_axi_read_if_monitor_struct.secreg_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // secreg_axi_read_if_monitor_struct.xyz = arready_i; // + // secreg_axi_read_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // secreg_axi_read_if_monitor_struct.xyz = rresp_i; // + // secreg_axi_read_if_monitor_struct.xyz = rid_i; // + // secreg_axi_read_if_monitor_struct.xyz = rlast_i; // + // secreg_axi_read_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..99ba1090a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the secreg_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a secreg_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends secreg_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( secreg_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "secreg_axi_read_if_random_sequence::body()-secreg_axi_read_if_transaction randomization failed") + // Send the transaction to the secreg_axi_read_if_driver_bfm via the sequencer and secreg_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: secreg_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..d67fab023 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends secreg_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( secreg_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "secreg_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..6f62375a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( secreg_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + secreg_axi_read_if_transaction_req_t; + secreg_axi_read_if_transaction_req_t req; + typedef secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + secreg_axi_read_if_transaction_rsp_t; + secreg_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = secreg_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = secreg_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction.svh new file mode 100644 index 000000000..6b47b5928 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an secreg_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( secreg_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic secreg_arready ; + logic [DW-1:0] secreg_rdata ; + axi_pkg::axi_burst_e secreg_rresp ; + logic [IW-1:0] secreg_rid ; + logic secreg_rlast ; + logic secreg_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in secreg_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by secreg_axi_read_if_monitor and secreg_axi_read_if_monitor_bfm + // This struct is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_MONITOR_STRUCT + secreg_axi_read_if_monitor_s secreg_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a secreg_axi_read_if_monitor_s + // structure. The function returns the handle to the secreg_axi_read_if_monitor_struct. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm + // to communicate initiator driven data to secreg_axi_read_if_driver_bfm. + // This struct is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_INITIATOR_STRUCT + secreg_axi_read_if_initiator_s secreg_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a secreg_axi_read_if_initiator_s + // structure. The function returns the handle to the secreg_axi_read_if_initiator_struct. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm + // to communicate Responder driven data to secreg_axi_read_if_driver_bfm. + // This struct is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_RESPONDER_STRUCT + secreg_axi_read_if_responder_s secreg_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a secreg_axi_read_if_responder_s + // structure. The function returns the handle to the secreg_axi_read_if_responder_struct. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_arready:0x%x secreg_rdata:0x%x secreg_rresp:0x%x secreg_rid:0x%x secreg_rlast:0x%x secreg_rvalid:0x%x ",secreg_arready,secreg_rdata,secreg_rresp,secreg_rid,secreg_rlast,secreg_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.secreg_arready == RHS.secreg_arready) + &&(this.secreg_rdata == RHS.secreg_rdata) + &&(this.secreg_rresp == RHS.secreg_rresp) + &&(this.secreg_rid == RHS.secreg_rid) + &&(this.secreg_rlast == RHS.secreg_rlast) + &&(this.secreg_rvalid == RHS.secreg_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_arready = RHS.secreg_arready; + this.secreg_rdata = RHS.secreg_rdata; + this.secreg_rresp = RHS.secreg_rresp; + this.secreg_rid = RHS.secreg_rid; + this.secreg_rlast = RHS.secreg_rlast; + this.secreg_rvalid = RHS.secreg_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"secreg_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_arready,"secreg_arready"); + $add_attribute(transaction_view_h,secreg_rdata,"secreg_rdata"); + $add_attribute(transaction_view_h,secreg_rresp,"secreg_rresp"); + $add_attribute(transaction_view_h,secreg_rid,"secreg_rid"); + $add_attribute(transaction_view_h,secreg_rlast,"secreg_rlast"); + $add_attribute(transaction_view_h,secreg_rvalid,"secreg_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..01ff22535 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records secreg_axi_read_if transaction information using +// a covergroup named secreg_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( secreg_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup secreg_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_arready: coverpoint coverage_trans.secreg_arready; + secreg_rdata: coverpoint coverage_trans.secreg_rdata; + secreg_rresp: coverpoint coverage_trans.secreg_rresp; + secreg_rid: coverpoint coverage_trans.secreg_rid; + secreg_rlast: coverpoint coverage_trans.secreg_rlast; + secreg_rvalid: coverpoint coverage_trans.secreg_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + secreg_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + secreg_axi_read_if_transaction_cg.set_inst_name($sformatf("secreg_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + secreg_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/yaml/secreg_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/yaml/secreg_axi_read_if_interface.yaml new file mode 100644 index 000000000..77d1a8ed1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_if_pkg/yaml/secreg_axi_read_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + secreg_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.project new file mode 100644 index 000000000..8ff15aaa7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + secreg_axi_read_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.svproject new file mode 100644 index 000000000..c9f7e3bc5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/Makefile new file mode 100644 index 000000000..ec9e43ad6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# secreg_axi_read_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +secreg_axi_read_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hvl.f + +secreg_axi_read_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hdl.f + +secreg_axi_read_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_xrtl.f + +COMP_secreg_axi_read_out_if_PKG_TGT_0 = q_comp_secreg_axi_read_out_if_pkg +COMP_secreg_axi_read_out_if_PKG_TGT_1 = v_comp_secreg_axi_read_out_if_pkg +COMP_secreg_axi_read_out_if_PKG_TGT = $(COMP_secreg_axi_read_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_secreg_axi_read_out_if_pkg: $(COMP_secreg_axi_read_out_if_PKG_TGT) + +q_comp_secreg_axi_read_out_if_pkg: + $(HDL_COMP_CMD) $(secreg_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(secreg_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(secreg_axi_read_out_if_PKG_XRTL) + +v_comp_secreg_axi_read_out_if_pkg: + $(HVL_COMP_CMD) $(secreg_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(secreg_axi_read_out_if_PKG) + $(VELANALYZE_CMD) $(secreg_axi_read_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(secreg_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(secreg_axi_read_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export secreg_axi_read_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_secreg_axi_read_out_if_pkg = \ + +O_FILE_COMPILE_LIST_secreg_axi_read_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_secreg_axi_read_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_secreg_axi_read_out_if_pkg += -I$(secreg_axi_read_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_secreg_axi_read_out_if_pkg += $(secreg_axi_read_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_secreg_axi_read_out_if_pkg += \ + \ + -o .so + +comp_secreg_axi_read_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_secreg_axi_read_out_if_pkg) $(C_FILE_COMPILE_LIST_secreg_axi_read_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_secreg_axi_read_out_if_pkg) $(O_FILE_COMPILE_LIST_secreg_axi_read_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/compile.do new file mode 100644 index 000000000..f867dc5d7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of secreg_axi_read_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if.compile new file mode 100644 index 000000000..cfbe1cb35 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if.compile @@ -0,0 +1,3 @@ +needs: + - secreg_axi_read_out_if_hvl.compile + - secreg_axi_read_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_bfm.vinfo new file mode 100644 index 000000000..47b065ce0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use secreg_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/secreg_axi_read_out_if_if.sv +src/secreg_axi_read_out_if_driver_bfm.sv +src/secreg_axi_read_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_common.compile new file mode 100644 index 000000000..1ce5be570 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - secreg_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hdl.f new file mode 100644 index 000000000..e669da6e0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hvl.f new file mode 100644 index 000000000..22fdb970b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_xrtl.f new file mode 100644 index 000000000..52cf88070 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hdl.compile new file mode 100644 index 000000000..492d8c2ce --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./secreg_axi_read_out_if_common.compile +incdir: + - . +src: + - src/secreg_axi_read_out_if_if.sv + - src/secreg_axi_read_out_if_monitor_bfm.sv + - src/secreg_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hvl.compile new file mode 100644 index 000000000..fdeed3512 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./secreg_axi_read_out_if_common.compile +incdir: + - . +src: + - secreg_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.sv new file mode 100644 index 000000000..2d7516123 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package secreg_axi_read_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import secreg_axi_read_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/secreg_axi_read_out_if_macros.svh" + + export secreg_axi_read_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/secreg_axi_read_out_if_typedefs.svh" + `include "src/secreg_axi_read_out_if_transaction.svh" + + `include "src/secreg_axi_read_out_if_configuration.svh" + `include "src/secreg_axi_read_out_if_driver.svh" + `include "src/secreg_axi_read_out_if_monitor.svh" + + `include "src/secreg_axi_read_out_if_transaction_coverage.svh" + `include "src/secreg_axi_read_out_if_sequence_base.svh" + `include "src/secreg_axi_read_out_if_random_sequence.svh" + + `include "src/secreg_axi_read_out_if_responder_sequence.svh" + `include "src/secreg_axi_read_out_if2reg_adapter.svh" + + `include "src/secreg_axi_read_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.vinfo new file mode 100644 index 000000000..905f79483 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use secreg_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +secreg_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.sv new file mode 100644 index 000000000..e05290254 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package secreg_axi_read_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/secreg_axi_read_out_if_typedefs_hdl.svh" + `include "src/secreg_axi_read_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..3eea142fa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +secreg_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_sve.F new file mode 100644 index 000000000..828ba63f4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if2reg_adapter.svh new file mode 100644 index 000000000..194eb7487 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the secreg_axi_read_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( secreg_axi_read_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "secreg_axi_read_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : secreg_axi_read_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_agent.svh new file mode 100644 index 000000000..d61b61ace --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(secreg_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(secreg_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(secreg_axi_read_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( secreg_axi_read_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_configuration.svh new file mode 100644 index 000000000..c9e9eede7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the secreg_axi_read_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual secreg_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual secreg_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( secreg_axi_read_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup secreg_axi_read_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_CONFIGURATION_STRUCT + secreg_axi_read_out_if_configuration_s secreg_axi_read_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a secreg_axi_read_out_if_configuration_s + // structure. The function returns the handle to the secreg_axi_read_out_if_configuration_struct. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + secreg_axi_read_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + secreg_axi_read_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + secreg_axi_read_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + secreg_axi_read_out_if_configuration_cg.set_inst_name($sformatf("secreg_axi_read_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(secreg_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver.svh new file mode 100644 index 000000000..409728519 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual secreg_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( secreg_axi_read_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in secreg_axi_read_out_if_macros.svh +//******************************************************************* +// Initiator macro used by secreg_axi_read_out_if_driver and secreg_axi_read_out_if_driver_bfm +// to communicate initiator driven data to secreg_axi_read_out_if_driver_bfm. +`secreg_axi_read_out_if_INITIATOR_STRUCT + secreg_axi_read_out_if_initiator_s secreg_axi_read_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by secreg_axi_read_out_if_driver and secreg_axi_read_out_if_driver_bfm +// to communicate Responder driven data to secreg_axi_read_out_if_driver_bfm. +`secreg_axi_read_out_if_RESPONDER_STRUCT + secreg_axi_read_out_if_responder_s secreg_axi_read_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + secreg_axi_read_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(secreg_axi_read_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + secreg_axi_read_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(secreg_axi_read_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver_bfm.sv new file mode 100644 index 000000000..358d0de16 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the secreg_axi_read_out_if signal driving. It is +// accessed by the uvm secreg_axi_read_out_if driver through a virtual interface +// handle in the secreg_axi_read_out_if configuration. It drives the singals passed +// in through the port connection named bus of type secreg_axi_read_out_if_if. +// +// Input signals from the secreg_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within secreg_axi_read_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import secreg_axi_read_out_if_pkg_hdl::*; +`include "src/secreg_axi_read_out_if_macros.svh" + +interface secreg_axi_read_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (secreg_axi_read_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute secreg_axi_read_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + secreg_axi_read_out_if_pkg::secreg_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in secreg_axi_read_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from secreg_axi_read_out_if_driver to this BFM + // **************************************************************************** + `secreg_axi_read_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by secreg_axi_read_out_if_driver and secreg_axi_read_out_if_driver_bfm + // to communicate initiator driven data to secreg_axi_read_out_if_driver_bfm. + `secreg_axi_read_out_if_INITIATOR_STRUCT + secreg_axi_read_out_if_initiator_s initiator_struct; + // Responder macro used by secreg_axi_read_out_if_driver and secreg_axi_read_out_if_driver_bfm + // to communicate Responder driven data to secreg_axi_read_out_if_driver_bfm. + `secreg_axi_read_out_if_RESPONDER_STRUCT + secreg_axi_read_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(secreg_axi_read_out_if_configuration_s secreg_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = secreg_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input secreg_axi_read_out_if_initiator_s secreg_axi_read_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output secreg_axi_read_out_if_responder_s secreg_axi_read_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the secreg_axi_read_out_if_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Members within the secreg_axi_read_out_if_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + initiator_struct = secreg_axi_read_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // secreg_axi_read_out_if_responder_struct.xyz = arready_i; // + // secreg_axi_read_out_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // secreg_axi_read_out_if_responder_struct.xyz = rresp_i; // + // secreg_axi_read_out_if_responder_struct.xyz = rid_i; // + // secreg_axi_read_out_if_responder_struct.xyz = rlast_i; // + // secreg_axi_read_out_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // secreg_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = secreg_axi_read_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output secreg_axi_read_out_if_initiator_s secreg_axi_read_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input secreg_axi_read_out_if_responder_s secreg_axi_read_out_if_responder_struct + );// pragma tbx xtf + // Variables within the secreg_axi_read_out_if_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Variables within the secreg_axi_read_out_if_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= secreg_axi_read_out_if_initiator_struct.xyz; // + // rdata_o <= secreg_axi_read_out_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= secreg_axi_read_out_if_initiator_struct.xyz; // + // rid_o <= secreg_axi_read_out_if_initiator_struct.xyz; // + // rlast_o <= secreg_axi_read_out_if_initiator_struct.xyz; // + // rvalid_o <= secreg_axi_read_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the secreg_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the secreg_axi_read_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_if.sv new file mode 100644 index 000000000..cc52f2ea4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the secreg_axi_read_out_if interface signals. +// It is instantiated once per secreg_axi_read_out_if bus. Bus Functional Models, +// BFM's named secreg_axi_read_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named secreg_axi_read_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(secreg_axi_read_out_if_bus.arready), // Agent input +// .dut_signal_port(secreg_axi_read_out_if_bus.rdata), // Agent input +// .dut_signal_port(secreg_axi_read_out_if_bus.rresp), // Agent input +// .dut_signal_port(secreg_axi_read_out_if_bus.rid), // Agent input +// .dut_signal_port(secreg_axi_read_out_if_bus.rlast), // Agent input +// .dut_signal_port(secreg_axi_read_out_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import secreg_axi_read_out_if_pkg_hdl::*; + +interface secreg_axi_read_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_macros.svh new file mode 100644 index 000000000..c59ee1d57 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the secreg_axi_read_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the secreg_axi_read_out_if_configuration class. +// + `define secreg_axi_read_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } secreg_axi_read_out_if_configuration_s; + + `define secreg_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function secreg_axi_read_out_if_configuration_s to_struct();\ + secreg_axi_read_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( secreg_axi_read_out_if_configuration_struct );\ + endfunction + + `define secreg_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(secreg_axi_read_out_if_configuration_s secreg_axi_read_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = secreg_axi_read_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the secreg_axi_read_out_if_transaction class. +// + `define secreg_axi_read_out_if_MONITOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } secreg_axi_read_out_if_monitor_s; + + `define secreg_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function secreg_axi_read_out_if_monitor_s to_monitor_struct();\ + secreg_axi_read_out_if_monitor_struct = \ + { \ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( secreg_axi_read_out_if_monitor_struct);\ + endfunction\ + + `define secreg_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(secreg_axi_read_out_if_monitor_s secreg_axi_read_out_if_monitor_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = secreg_axi_read_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the secreg_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define secreg_axi_read_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } secreg_axi_read_out_if_initiator_s; + + `define secreg_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function secreg_axi_read_out_if_initiator_s to_initiator_struct();\ + secreg_axi_read_out_if_initiator_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( secreg_axi_read_out_if_initiator_struct);\ + endfunction + + `define secreg_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(secreg_axi_read_out_if_initiator_s secreg_axi_read_out_if_initiator_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = secreg_axi_read_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the secreg_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define secreg_axi_read_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } secreg_axi_read_out_if_responder_s; + + `define secreg_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function secreg_axi_read_out_if_responder_s to_responder_struct();\ + secreg_axi_read_out_if_responder_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( secreg_axi_read_out_if_responder_struct);\ + endfunction + + `define secreg_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(secreg_axi_read_out_if_responder_s secreg_axi_read_out_if_responder_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = secreg_axi_read_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor.svh new file mode 100644 index 000000000..5eb9dffdc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives secreg_axi_read_out_if transactions observed by the +// secreg_axi_read_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual secreg_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( secreg_axi_read_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`secreg_axi_read_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the secreg_axi_read_out_if_monitor_struct. + virtual function void notify_transaction(input secreg_axi_read_out_if_monitor_s secreg_axi_read_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(secreg_axi_read_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor_bfm.sv new file mode 100644 index 000000000..3a5271d8c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the secreg_axi_read_out_if signal monitoring. +// It is accessed by the uvm secreg_axi_read_out_if monitor through a virtual +// interface handle in the secreg_axi_read_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type secreg_axi_read_out_if_if. +// +// Input signals from the secreg_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the secreg_axi_read_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import secreg_axi_read_out_if_pkg_hdl::*; +`include "src/secreg_axi_read_out_if_macros.svh" + + +interface secreg_axi_read_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( secreg_axi_read_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute secreg_axi_read_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`secreg_axi_read_out_if_MONITOR_STRUCT + secreg_axi_read_out_if_monitor_s secreg_axi_read_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `secreg_axi_read_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + secreg_axi_read_out_if_pkg::secreg_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( secreg_axi_read_out_if_monitor_struct ); + + + proxy.notify_transaction( secreg_axi_read_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(secreg_axi_read_out_if_configuration_s secreg_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = secreg_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output secreg_axi_read_out_if_monitor_s secreg_axi_read_out_if_monitor_struct); + // + // Available struct members: + // // secreg_axi_read_out_if_monitor_struct.secreg_arready + // // secreg_axi_read_out_if_monitor_struct.secreg_rdata + // // secreg_axi_read_out_if_monitor_struct.secreg_rresp + // // secreg_axi_read_out_if_monitor_struct.secreg_rid + // // secreg_axi_read_out_if_monitor_struct.secreg_rlast + // // secreg_axi_read_out_if_monitor_struct.secreg_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // secreg_axi_read_out_if_monitor_struct.xyz = arready_i; // + // secreg_axi_read_out_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // secreg_axi_read_out_if_monitor_struct.xyz = rresp_i; // + // secreg_axi_read_out_if_monitor_struct.xyz = rid_i; // + // secreg_axi_read_out_if_monitor_struct.xyz = rlast_i; // + // secreg_axi_read_out_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_random_sequence.svh new file mode 100644 index 000000000..3ac1e82c7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the secreg_axi_read_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a secreg_axi_read_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends secreg_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( secreg_axi_read_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=secreg_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "secreg_axi_read_out_if_random_sequence::body()-secreg_axi_read_out_if_transaction randomization failed") + // Send the transaction to the secreg_axi_read_out_if_driver_bfm via the sequencer and secreg_axi_read_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: secreg_axi_read_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_responder_sequence.svh new file mode 100644 index 000000000..044fb1741 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends secreg_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( secreg_axi_read_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "secreg_axi_read_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=secreg_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_sequence_base.svh new file mode 100644 index 000000000..4c4380762 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( secreg_axi_read_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + secreg_axi_read_out_if_transaction_req_t; + secreg_axi_read_out_if_transaction_req_t req; + typedef secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + secreg_axi_read_out_if_transaction_rsp_t; + secreg_axi_read_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = secreg_axi_read_out_if_transaction_req_t::type_id::create("req"); + rsp = secreg_axi_read_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction.svh new file mode 100644 index 000000000..938c0a49c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an secreg_axi_read_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( secreg_axi_read_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic secreg_arready ; + logic [DW-1:0] secreg_rdata ; + axi_pkg::axi_burst_e secreg_rresp ; + logic [IW-1:0] secreg_rid ; + logic secreg_rlast ; + logic secreg_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in secreg_axi_read_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by secreg_axi_read_out_if_monitor and secreg_axi_read_out_if_monitor_bfm + // This struct is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_MONITOR_STRUCT + secreg_axi_read_out_if_monitor_s secreg_axi_read_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a secreg_axi_read_out_if_monitor_s + // structure. The function returns the handle to the secreg_axi_read_out_if_monitor_struct. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by secreg_axi_read_out_if_driver and secreg_axi_read_out_if_driver_bfm + // to communicate initiator driven data to secreg_axi_read_out_if_driver_bfm. + // This struct is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_INITIATOR_STRUCT + secreg_axi_read_out_if_initiator_s secreg_axi_read_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a secreg_axi_read_out_if_initiator_s + // structure. The function returns the handle to the secreg_axi_read_out_if_initiator_struct. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by secreg_axi_read_out_if_driver and secreg_axi_read_out_if_driver_bfm + // to communicate Responder driven data to secreg_axi_read_out_if_driver_bfm. + // This struct is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_RESPONDER_STRUCT + secreg_axi_read_out_if_responder_s secreg_axi_read_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a secreg_axi_read_out_if_responder_s + // structure. The function returns the handle to the secreg_axi_read_out_if_responder_struct. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_arready:0x%x secreg_rdata:0x%x secreg_rresp:0x%x secreg_rid:0x%x secreg_rlast:0x%x secreg_rvalid:0x%x ",secreg_arready,secreg_rdata,secreg_rresp,secreg_rid,secreg_rlast,secreg_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.secreg_arready == RHS.secreg_arready) + &&(this.secreg_rdata == RHS.secreg_rdata) + &&(this.secreg_rresp == RHS.secreg_rresp) + &&(this.secreg_rid == RHS.secreg_rid) + &&(this.secreg_rlast == RHS.secreg_rlast) + &&(this.secreg_rvalid == RHS.secreg_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_arready = RHS.secreg_arready; + this.secreg_rdata = RHS.secreg_rdata; + this.secreg_rresp = RHS.secreg_rresp; + this.secreg_rid = RHS.secreg_rid; + this.secreg_rlast = RHS.secreg_rlast; + this.secreg_rvalid = RHS.secreg_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"secreg_axi_read_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_arready,"secreg_arready"); + $add_attribute(transaction_view_h,secreg_rdata,"secreg_rdata"); + $add_attribute(transaction_view_h,secreg_rresp,"secreg_rresp"); + $add_attribute(transaction_view_h,secreg_rid,"secreg_rid"); + $add_attribute(transaction_view_h,secreg_rlast,"secreg_rlast"); + $add_attribute(transaction_view_h,secreg_rvalid,"secreg_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction_coverage.svh new file mode 100644 index 000000000..da4a5a005 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records secreg_axi_read_out_if transaction information using +// a covergroup named secreg_axi_read_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( secreg_axi_read_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup secreg_axi_read_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_arready: coverpoint coverage_trans.secreg_arready; + secreg_rdata: coverpoint coverage_trans.secreg_rdata; + secreg_rresp: coverpoint coverage_trans.secreg_rresp; + secreg_rid: coverpoint coverage_trans.secreg_rid; + secreg_rlast: coverpoint coverage_trans.secreg_rlast; + secreg_rvalid: coverpoint coverage_trans.secreg_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + secreg_axi_read_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + secreg_axi_read_out_if_transaction_cg.set_inst_name($sformatf("secreg_axi_read_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + secreg_axi_read_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/yaml/secreg_axi_read_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/yaml/secreg_axi_read_out_if_interface.yaml new file mode 100644 index 000000000..af8439504 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/yaml/secreg_axi_read_out_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + secreg_axi_read_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/.project new file mode 100644 index 000000000..1462dcefd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/.project @@ -0,0 +1,37 @@ + + + fuse_ctrl + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + verification_ip + 2 + UVMF_VIP_LIBRARY_HOME + + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D/verification_ip + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/.svproject new file mode 100644 index 000000000..9e84acf61 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/docs/interfaces.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/docs/interfaces.csv new file mode 100644 index 000000000..82710feda --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/docs/interfaces.csv @@ -0,0 +1,33 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +, +Interface Description, Interface Type, Interface Transaction, Interface Name, +fuse_ctrl_rst_agent, fuse_ctrl_rst_driver_bfm fuse_ctrl_rst_monitor_bfm, fuse_ctrl_rst_transaction, fuse_ctrl_rst_pkg_fuse_ctrl_rst_agent_BFM, +fuse_ctrl_core_axi_write_agent, fuse_ctrl_core_axi_write_if_driver_bfm fuse_ctrl_core_axi_write_if_monitor_bfm, fuse_ctrl_core_axi_write_if_transaction, fuse_ctrl_core_axi_write_if_pkg_fuse_ctrl_core_axi_write_agent_BFM, +fuse_ctrl_prim_axi_write_agent, fuse_ctrl_prim_axi_write_if_driver_bfm fuse_ctrl_prim_axi_write_if_monitor_bfm, fuse_ctrl_prim_axi_write_if_transaction, fuse_ctrl_prim_axi_write_if_pkg_fuse_ctrl_prim_axi_write_agent_BFM, +fuse_ctrl_core_axi_read_agent, fuse_ctrl_core_axi_read_if_driver_bfm fuse_ctrl_core_axi_read_if_monitor_bfm, fuse_ctrl_core_axi_read_if_transaction, fuse_ctrl_core_axi_read_if_pkg_fuse_ctrl_core_axi_read_agent_BFM, +fuse_ctrl_prim_axi_read_agent, fuse_ctrl_prim_axi_read_if_driver_bfm fuse_ctrl_prim_axi_read_if_monitor_bfm, fuse_ctrl_prim_axi_read_if_transaction, fuse_ctrl_prim_axi_read_if_pkg_fuse_ctrl_prim_axi_read_agent_BFM, +fuse_ctrl_secreg_axi_read_agent, fuse_ctrl_secreg_axi_read_if_driver_bfm fuse_ctrl_secreg_axi_read_if_monitor_bfm, fuse_ctrl_secreg_axi_read_if_transaction, fuse_ctrl_secreg_axi_read_if_pkg_fuse_ctrl_secreg_axi_read_agent_BFM, +fuse_ctrl_lc_otp_if_agent, fuse_ctrl_lc_otp_if_driver_bfm fuse_ctrl_lc_otp_if_monitor_bfm, fuse_ctrl_lc_otp_if_transaction, fuse_ctrl_lc_otp_if_pkg_fuse_ctrl_lc_otp_if_agent_BFM, + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/fuse_ctrl_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/fuse_ctrl_sve.F new file mode 100644 index 000000000..57e6f7916 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/fuse_ctrl_sve.F @@ -0,0 +1,33 @@ + +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + +// BFM Files +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_sve.F + +// Environment Files +-F ${UVMF_VIP_LIBRARY_HOME}/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F + +// Bench Files ++incdir+./tb/tests +./tb/tests/fuse_ctrl_tests_pkg.sv + ++incdir+./tb/sequences +./tb/sequences/fuse_ctrl_sequences_pkg.sv + ++incdir+./tb/parameters +./tb/parameters/fuse_ctrl_parameters_pkg.sv + +./tb/testbench/hdl_top.sv +./tb/testbench/hvl_top.sv + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/rtl/dut.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/rtl/dut.compile new file mode 100644 index 000000000..9b0008fc5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/rtl/dut.compile @@ -0,0 +1,6 @@ + +# pragma uvmf custom dut_compile_info begin +src: + - ./vhdl/vhdl_dut.vhd + - ./verilog/verilog_dut.v +# pragma uvmf custom dut_compile_info end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.v b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.v new file mode 100644 index 000000000..96198441c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.v @@ -0,0 +1,21 @@ +module verilog_dut(clk, rst, in_signal, out_signal); + +input clk; +input rst; +input in_signal; +output out_signal; + +reg out_signal_o; + +always @(posedge clk) begin + if (rst) begin + out_signal_o <= 0; + end + else begin + out_signal_o <= ~in_signal; + end + end + +assign out_signal = out_signal_o; + +endmodule diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.vinfo new file mode 100644 index 000000000..87e95f36f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.vinfo @@ -0,0 +1 @@ +verilog_dut.v diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/rtl/vhdl/vhdl_dut.vhd b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/rtl/vhdl/vhdl_dut.vhd new file mode 100644 index 000000000..904aa37d1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/rtl/vhdl/vhdl_dut.vhd @@ -0,0 +1,21 @@ +library ieee; +use ieee.std_logic_1164.all ; + +entity vhdl_dut is + port ( clk : in std_logic ; + rst : in std_logic ; + in_signal : in std_logic ; + out_signal :out std_logic + ); +end vhdl_dut; + +architecture rtl of vhdl_dut is + begin + P1: process + variable out_signal_o : std_logic; + begin + wait until clk'event and clk = '1'; + out_signal_o := in_signal; + out_signal <= out_signal_o; + end process; + end rtl; diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/Makefile new file mode 100644 index 000000000..b72b0b113 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/Makefile @@ -0,0 +1,368 @@ + +# +#---------------------------------------------------------------------- +# +# DESCRIPTION: This makefile includes the shared makefile and contains +# bench level make targets. +# +#---------------------------------------------------------------------- + + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +# ********************************************************************************************* +# UVMF library directory: +# This variable points to the UVMF release where uvmf_base_pkg directory resides. +# This variable points to release code that is not user modified. +# This variable allows for UVMF release directories to reside independent of project related verification IP and project bench directories. +# This code below looks "upward" for directory starting with UVMF_* and returns first match for use with the release examples. +UVMF_HOME ?= ___PLEASE_SET_AN_ENVIRONMENT_VARIABLE_NAMED_UVMF_HOME_TO_POINT_TO_THE_UVMF_INSTALLATION___ + +# pragma uvmf custom exports begin +# +# Project(s) specific verification IP library: +# Directory where reusable verification packages for interfaces, environments, utilities, etc. reside. +# This variable allows for your verification IP to reside independent of project bench and UVMF release directories. +# For examples deployed with UVMF this will be $(UVMF_HOME)//verification_ip +export UVMF_VIP_LIBRARY_HOME ?= $(PWD)/../../../verification_ip +# +# Project specific bench: +# Directory where bench specific code is located. +# This variable allows for project_benches to reside independent of verification IP and UVMF release directories. +# For examples deployed with UVMF this will be $(UVMF_HOME)//project_benches/ +export UVMF_PROJECT_DIR ?= $(PWD)/.. +# +# +# pragma uvmf custom exports end +# ********************************************************************************************* + +## Check PATH for required vinfo scripts +PVAL := $(shell command -v make_filelist.py 2> /dev/null) +ifndef PVAL + MFLIST = $(UVMF_HOME)/scripts/make_filelist.py +else + MFLIST = make_filelist.py +endif + + +# Set test case specific Variables +TEST_NAME ?= test_top + +TEST_SEED ?= random +UVM_CLI_ARGS = + +# Usage of Veloce, etc. to be input by the user (subject to defaults) +USE_VELOCE ?= 0 + +# Usage of vinfo flow for generating file list +USE_VINFO ?= 0 + +# Usage of Veloce and Questa profilers +USE_VELOCE_PROFILER ?= 0 +USE_QUESTA_PROFILER ?= 0 + + +# Set project Variables +TEST_PLAN_NAME = fuse_ctrl_TestPlan +REPORTING_DO_FILE = fuse_ctrl_reports_script + + +# Include makefile that includes targets for UVM_VIP_Library packages +include $(UVMF_HOME)/scripts/Makefile + + + + +# Include all requisite interface package targets for this bench +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/Makefile + +# Include all requisite environment package targets for this bench +include $(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg/Makefile + + + +# Add to default compile/load/run arguments +VCOM_ARGS += + +# Note: vsim-3009 error can be eliminated by adding -timescale 1ps/1ps to VLOG_ARGS + +VLOG_ARGS += $(UVM_DISABLE_FILE_LINE_CMD) + +VELANALYZE_ARGS += +VELANALYZE_HVL_ARGS += + +BATCH_VOPT_ARGS += +DEBUG_VOPT_ARGS += +EXTRA_VOPT_TOPS += +COMMON_VSIM_ARGS += +COMMON_VSIM_ARGS += + + +BATCH_VSIM_ARGS += #-uvmcontrol=none +DEBUG_VSIM_ARGS += +EXTRA_VSIM_TOPS += + +# pragma uvmf custom additional_args begin +# pragma uvmf custom additional_args end + + +# Project bench package source +fuse_ctrl_PARAMETERS_PKG ?=\ +$(UVMF_PROJECT_DIR)/tb/parameters/fuse_ctrl_parameters_pkg.sv + + +fuse_ctrl_SEQUENCES_PKG ?=\ +$(UVMF_PROJECT_DIR)/tb/sequences/fuse_ctrl_sequences_pkg.sv + + +fuse_ctrl_TEST_PKG ?=\ +$(UVMF_PROJECT_DIR)/tb/tests/fuse_ctrl_tests_pkg.sv + +# pragma uvmf custom dut_files begin +# UVMF_CHANGE_ME : Reference Verilog DUT source. +fuse_ctrl_VERILOG_DUT ?=\ +$(UVMF_PROJECT_DIR)/../../../../../integration/rtl/config_defines.svh +$(UVMF_PROJECT_DIR)/../../../../../integration/rtl/caliptra_reg_defines.svh +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_sva.svh +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_macros.svh +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_sram.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/ahb_defines_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_ahb_srom.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/apb_slv_sif.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/ahb_slv_sif.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_icg.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/clk_gate.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_2ff_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/ahb_to_reg_adapter.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/skidbuffer.v +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_util_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_alert_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_subreg_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_mubi_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_cipher_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sparse_fsm_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_otp_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_ram_1p_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../lc_ctrl/rtl/lc_ctrl_reg_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../lc_ctrl/rtl/lc_ctrl_state_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../lc_ctrl/rtl/lc_ctrl_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_flop_en.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_flop.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_buf.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_otp.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_ram_1p.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_and2.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_flop_en.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_cdc_rand_delay.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_flop_2sync.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_lfsr.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_double_lfsr.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_arbiter_fixed.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_arbiter_tree.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_edn_req.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_present.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_lc_sender.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sync_reqack.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sync_reqack_data.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_mubi4_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_diff_decode.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sec_anchor_buf.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_slicer.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_count.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sparse_fsm_flop.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_dom_and_2share.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sec_anchor_flop.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_reg_we_check.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_packer_fifo.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_max_tree.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_subreg_arb.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_subreg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_intr_hw.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_onehot_check.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_mubi8_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_mubi8_sender.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_fifo_sync_cnt.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_buf.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_lc_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_alert_receiver.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_flop.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_alert_sender.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_fifo_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_arbiter_ppc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sum_tree.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_subreg_ext.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_edge_detector.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_blanker.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_ram_1p_adv.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_assert_multiple.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_assert.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/sram2tlul.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_adapter_host.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_adapter_reg.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_adapter_sram.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_cmd_intg_chk.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_cmd_intg_gen.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_data_integ_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_data_integ_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_err_resp.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_err.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_fifo_async.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_fifo_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_lc_gate.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_rsp_intg_chk.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_rsp_intg_gen.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_socket_1n.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_socket_m1.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_sram_byte.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_if.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_addr.v +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_sub_rd.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_sub_wr.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_sub_arb.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_sub.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_22_16_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_22_16_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_28_22_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_28_22_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_39_32_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_39_32_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_64_57_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_64_57_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_72_64_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_72_64_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_22_16_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_22_16_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_39_32_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_39_32_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_72_64_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_72_64_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_76_68_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_76_68_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_22_16_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_22_16_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_28_22_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_28_22_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_39_32_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_39_32_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_64_57_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_64_57_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_72_64_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_72_64_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_22_16_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_22_16_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_39_32_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_39_32_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_72_64_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_72_64_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_76_68_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_76_68_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../axi2tlul/rtl/axi2tlul_cmd_intg_gen.sv +$(UVMF_PROJECT_DIR)/../../../../../axi2tlul/rtl/sub2tlul.sv +$(UVMF_PROJECT_DIR)/../../../../../axi2tlul/rtl/axi2tlul.sv +$(UVMF_PROJECT_DIR)/../../../../../entropy_src/rtl/entropy_src_main_sm_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../entropy_src/rtl/entropy_src_ack_sm_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../entropy_src/rtl/entropy_src_reg_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../entropy_src/rtl/entropy_src_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../edn/rtl/edn_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../ast/rtl/ast_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../pwrmgr/rtl/pwrmgr_reg_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../pwrmgr/rtl/pwrmgr_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_reg_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_part_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_core_reg_top.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_prim_reg_top.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_dai.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_ecc_reg.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_lci.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_lfsr_timer.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_part_buf.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_part_unbuf.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_scrmbl.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_top.sv + + +# UVMF_CHANGE_ME : Reference VHDL DUT source. +fuse_ctrl_VHDL_DUT ?=\ +$(UVMF_PROJECT_DIR)/rtl/vhdl/vhdl_dut.vhd +# pragma uvmf custom dut_files end + + +# Project bench package targets +COMP_fuse_ctrl_PARAMETERS_PKG_TGT_0 = q_comp_fuse_ctrl_parameters_pkg +COMP_fuse_ctrl_PARAMETERS_PKG_TGT_1 = v_comp_fuse_ctrl_parameters_pkg +COMP_fuse_ctrl_PARAMETERS_PKG_TGT = $(COMP_fuse_ctrl_PARAMETERS_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_parameters_pkg: $(COMP_fuse_ctrl_PARAMETERS_PKG_TGT) + +q_comp_fuse_ctrl_parameters_pkg: + $(HVL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/parameters $(fuse_ctrl_PARAMETERS_PKG) + +v_comp_fuse_ctrl_parameters_pkg: q_comp_fuse_ctrl_parameters_pkg + $(HDL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/parameters $(fuse_ctrl_PARAMETERS_PKG) + + +comp_fuse_ctrl_sequence_pkg: + $(HVL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/sequences $(fuse_ctrl_SEQUENCES_PKG) + +comp_fuse_ctrl_tests_pkg: + $(HVL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/tests $(fuse_ctrl_TEST_PKG) + +# pragma uvmf custom dut_compile_make_target begin +# UVMF_CHANGE_ME : Add make target to compile your verilog dut here +comp_fuse_ctrl_verilog_dut: + echo "Compile your verilog DUT here" + $(HDL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/../../../../../libs/rtl $(fuse_ctrl_VERILOG_DUT) + +# UVMF_CHANGE_ME : Add make target to compile your vhdl dut here +comp_fuse_ctrl_vhdl_dut: + echo "Compile your vhdl DUT here" + $(HDL_COMP_CMD_VHDL) $(fuse_ctrl_VHDL_DUT) + +# UVMF_CHANGE_ME : Add make target to compile your dut here +comp_fuse_ctrl_dut: comp_fuse_ctrl_vhdl_dut comp_fuse_ctrl_verilog_dut +# pragma uvmf custom dut_compile_make_target end + + +BUILD_TGT_0 = make_build +BUILD_TGT_1 = vinfo_build +BUILD_TGT = $(BUILD_TGT_$(USE_VINFO)) + + +comp_hvl : comp_hvl_core + + +comp_hvl_core : \ + comp_fuse_ctrl_rst_pkg comp_fuse_ctrl_core_axi_write_if_pkg comp_fuse_ctrl_prim_axi_write_if_pkg comp_fuse_ctrl_core_axi_read_if_pkg comp_fuse_ctrl_prim_axi_read_if_pkg comp_fuse_ctrl_secreg_axi_read_if_pkg comp_fuse_ctrl_lc_otp_if_pkg \ + comp_fuse_ctrl_env_pkg \ + comp_fuse_ctrl_parameters_pkg comp_fuse_ctrl_sequence_pkg comp_fuse_ctrl_tests_pkg + +comp_uvmf_core : comp_uvm_pkg comp_uvmf_base_pkg + +make_build: comp_fuse_ctrl_dut comp_uvmf_core comp_hvl comp_test_bench + +hvl_build: q_comp_fuse_ctrl_rst_pkg q_comp_fuse_ctrl_core_axi_write_if_pkg q_comp_fuse_ctrl_prim_axi_write_if_pkg q_comp_fuse_ctrl_core_axi_read_if_pkg q_comp_fuse_ctrl_prim_axi_read_if_pkg q_comp_fuse_ctrl_secreg_axi_read_if_pkg q_comp_fuse_ctrl_lc_otp_if_pkg comp_fuse_ctrl_env_pkg comp_fuse_ctrl_sequence_pkg comp_fuse_ctrl_tests_pkg hvl_comp_testbench link optimize + + +vinfo_build: comp_fuse_ctrl_vhdl_dut build_hdl_vinfo build_hvl_vinfo $(VINFO_TGT) + + $(HDL_COMP_CMD) -F hdl.vf + $(VEL_COMP) + +build: $(BUILD_TGT) + +# pragma uvmf custom additional_targets begin +# pragma uvmf custom additional_targets end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/bcr_testlist b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/bcr_testlist new file mode 100644 index 000000000..4df4567ee --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/bcr_testlist @@ -0,0 +1,19 @@ + + + +# Test list for use by RMDB file +# File syntax is +# TB_INFO { } { } +# TB ## All subsequent tests will run on this bench until a different "TB" line is seen +# TEST <1st_seed> ... +# If not enough seeds are provided then random seeds are used to pad +# If no repeat count is given, default is 1 +# pragma uvmf custom tb_info begin +TB_INFO fuse_ctrl { } { } +# pragma uvmf custom tb_info end +TB fuse_ctrl +# pragma uvmf custom regression_suite begin +TEST test_top 3 +# pragma uvmf custom regression_suite end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/bcr_testlist.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/bcr_testlist.yaml new file mode 100644 index 000000000..65b6be08a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/bcr_testlist.yaml @@ -0,0 +1,44 @@ + + + +# YAML test list for use by RMDB file +# File syntax is +# uvmf_testlist: +# testbenches: +# - name: +# extra_build_options: +# extra_run_options: +# - name: +# ... +# - name: +# tests: +# - name: +# uvm_testname: (defaults to test_name) +# testbench: (defaults to last tb name seen) +# repeat: (defaults to 1) +# seeds: [,,...,] (defaults to all random) +# extra_test_options: +# - name: +# ... +# - name: +# include: +# - (relative path reference is to the including YAML file) +# - +# ... +# - + +uvmf_testlist: + testbenches: +# pragma uvmf custom tb_info begin + - name: fuse_ctrl + extra_build_options: "" + extra_run_options: "" +# pragma uvmf custom tb_info end + tests: + - testbench: fuse_ctrl +# pragma uvmf custom regression_suite begin + - name: test_top + repeat: 3 +# pragma uvmf custom regression_suite end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/compile.do new file mode 100644 index 000000000..0a7addaa9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/compile.do @@ -0,0 +1,243 @@ + + +################################################################## +## ENVIRONMENT VARIABLES +################################################################## +quietly set ::env(UVMF_VIP_LIBRARY_HOME) ../../../verification_ip +quietly set ::env(UVMF_PROJECT_DIR) .. + +## Using VRM means that the build is occuring several more directories deeper underneath +## the sim directory, need to prepend some more '..' +if {[info exists ::env(VRM_BUILD)]} { + quietly set ::env(UVMF_VIP_LIBRARY_HOME) "../../../../../$::env(UVMF_VIP_LIBRARY_HOME)" + quietly set ::env(UVMF_PROJECT_DIR) "../../../../../$::env(UVMF_PROJECT_DIR)" +} +quietly set ::env(UVMF_VIP_LIBRARY_HOME) [file normalize $::env(UVMF_VIP_LIBRARY_HOME)] +quietly set ::env(UVMF_PROJECT_DIR) [file normalize $::env(UVMF_PROJECT_DIR)] +quietly echo "UVMF_VIP_LIBRARY_HOME = $::env(UVMF_VIP_LIBRARY_HOME)" +quietly echo "UVMF_PROJECT_DIR = $::env(UVMF_PROJECT_DIR)" + + +################################################################### +## HOUSEKEEPING : DELETE FILES THAT WILL BE REGENERATED +################################################################### +file delete -force *~ *.ucdb vsim.dbg *.vstf *.log work *.mem *.transcript.txt certe_dump.xml *.wlf covhtmlreport VRMDATA +file delete -force design.bin qwave.db dpiheader.h visualizer*.ses +file delete -force veloce.med veloce.wave veloce.map tbxbindings.h edsenv velrunopts.ini +file delete -force sv_connect.* + +################################################################### +## COMPILE DUT SOURCE CODE +################################################################### +vlib work +# pragma uvmf custom dut_compile_dofile_target begin +# UVMF_CHANGE_ME : Add commands to compile your dut here, replacing the default examples +#vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/rtl/verilog/verilog_dut.v +#vcom $env(UVMF_PROJECT_DIR)/rtl/vhdl/vhdl_dut.vhd +# pragma uvmf custom dut_compile_dofile_target end + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../integration/rtl/config_defines.svh +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../integration/rtl/caliptra_reg_defines.svh +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_sva.svh +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_macros.svh +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_sram.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../libs/rtl/ahb_defines_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_ahb_srom.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../libs/rtl/apb_slv_sif.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../libs/rtl/ahb_slv_sif.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_icg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../libs/rtl/clk_gate.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_2ff_sync.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../libs/rtl/ahb_to_reg_adapter.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../libs/rtl/skidbuffer.v +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_util_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_alert_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_subreg_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_mubi_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_cipher_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sparse_fsm_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_otp_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_ram_1p_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../lc_ctrl/rtl/lc_ctrl_reg_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../lc_ctrl/rtl/lc_ctrl_state_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../lc_ctrl/rtl/lc_ctrl_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_flop_en.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_flop.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_buf.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_otp.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_ram_1p.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_and2.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_flop_en.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_cdc_rand_delay.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_flop_2sync.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_lfsr.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_double_lfsr.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_arbiter_fixed.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_arbiter_tree.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_edn_req.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_present.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_lc_sender.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sync_reqack.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sync_reqack_data.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_mubi4_sync.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_diff_decode.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sec_anchor_buf.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_slicer.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_count.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sparse_fsm_flop.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_dom_and_2share.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sec_anchor_flop.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_reg_we_check.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_packer_fifo.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_max_tree.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_subreg_arb.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_subreg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_intr_hw.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_onehot_check.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_mubi8_sync.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_mubi8_sender.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_fifo_sync_cnt.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_buf.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_lc_sync.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_alert_receiver.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_flop.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_alert_sender.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_fifo_sync.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_arbiter_ppc.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sum_tree.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_subreg_ext.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_edge_detector.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_blanker.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_ram_1p_adv.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_assert_multiple.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_assert.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/sram2tlul.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_adapter_host.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_adapter_reg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_adapter_sram.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_cmd_intg_chk.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_cmd_intg_gen.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_data_integ_dec.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_data_integ_enc.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_err_resp.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_err.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_fifo_async.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_fifo_sync.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_lc_gate.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_rsp_intg_chk.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_rsp_intg_gen.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_socket_1n.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_socket_m1.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_sram_byte.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_if.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_addr.v +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_sub_rd.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_sub_wr.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_sub_arb.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_sub.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_22_16_dec.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_22_16_enc.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_28_22_dec.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_28_22_enc.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_39_32_dec.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_39_32_enc.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_64_57_dec.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_64_57_enc.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_72_64_dec.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_72_64_enc.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_22_16_dec.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_22_16_enc.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_39_32_dec.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_39_32_enc.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_72_64_dec.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_72_64_enc.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_76_68_dec.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_76_68_enc.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_22_16_dec.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_22_16_enc.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_28_22_dec.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_28_22_enc.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_39_32_dec.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_39_32_enc.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_64_57_dec.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_64_57_enc.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_72_64_dec.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_72_64_enc.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_22_16_dec.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_22_16_enc.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_39_32_dec.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_39_32_enc.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_72_64_dec.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_72_64_enc.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_76_68_dec.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_76_68_enc.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../axi2tlul/rtl/axi2tlul_cmd_intg_gen.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../axi2tlul/rtl/sub2tlul.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../axi2tlul/rtl/axi2tlul.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../entropy_src/rtl/entropy_src_main_sm_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../entropy_src/rtl/entropy_src_ack_sm_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../entropy_src/rtl/entropy_src_reg_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../entropy_src/rtl/entropy_src_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../edn/rtl/edn_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../ast/rtl/ast_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../pwrmgr/rtl/pwrmgr_reg_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../../pwrmgr/rtl/pwrmgr_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_reg_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_part_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_core_reg_top.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_prim_reg_top.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_dai.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_ecc_reg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_lci.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_lfsr_timer.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_part_buf.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_part_unbuf.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_scrmbl.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl.sv +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_top.sv + + + +################################################################### +## COMPILE UVMF BASE/COMMON SOURCE CODE +################################################################### +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_HOME)/uvmf_base_pkg -F $env(UVMF_HOME)/uvmf_base_pkg/uvmf_base_pkg_filelist_hdl.f +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_HOME)/uvmf_base_pkg -F $env(UVMF_HOME)/uvmf_base_pkg/uvmf_base_pkg_filelist_hvl.f + + +################################################################### +## UVMF INTERFACE COMPILATION +################################################################### +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/compile.do + +################################################################### +## UVMF ENVIRONMENT COMPILATION +################################################################### +do $env(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg/compile.do + +################################################################### +## UVMF BENCHES COMPILATION +################################################################### +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/parameters $env(UVMF_PROJECT_DIR)/tb/parameters/fuse_ctrl_parameters_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/sequences $env(UVMF_PROJECT_DIR)/tb/sequences/fuse_ctrl_sequences_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/tests $env(UVMF_PROJECT_DIR)/tb/tests/fuse_ctrl_tests_pkg.sv + +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/testbench -F $env(UVMF_PROJECT_DIR)/tb/testbench/top_filelist_hdl.f +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/testbench -F $env(UVMF_PROJECT_DIR)/tb/testbench/top_filelist_hvl.f + +################################################################### +## OPTIMIZATION +################################################################### +vopt hvl_top hdl_top -o optimized_batch_top_tb +vopt +acc hvl_top hdl_top -o optimized_debug_top_tb diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/hdl.compile new file mode 100644 index 000000000..8e7bd41ac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/hdl.compile @@ -0,0 +1,5 @@ +needs: +# pragma uvmf custom dut_compile_info begin + - ../rtl/dut.compile +# pragma uvmf custom dut_compile_info end + - ../tb/testbench/hdl_top.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/hdl.vinfo new file mode 100644 index 000000000..da27ec773 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/hdl.vinfo @@ -0,0 +1 @@ +@use $UVMF_PROJECT_DIR/tb/testbench/hdl_top.vinfo diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/hvl.compile new file mode 100644 index 000000000..ce9525496 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/hvl.compile @@ -0,0 +1,2 @@ +needs: + - ../tb/testbench/hvl_top.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/hvl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/hvl.vinfo new file mode 100644 index 000000000..d22eff338 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/hvl.vinfo @@ -0,0 +1 @@ +@use $UVMF_PROJECT_DIR/tb/testbench/hvl_top.vinfo diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/run.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/run.do new file mode 100644 index 000000000..101ddc486 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/run.do @@ -0,0 +1,21 @@ + + +quietly set svLibs "" +quietly set extra_vsim_args "" + +################################################################### +## Check for additional vsim arguments passed using env var $UVMF_EXTRA_VSIM_ARGS +################################################################### +if {[info exists ::env(UVMF_EXTRA_VSIM_ARGS)]} { + echo "Adding more args to vsim command" + quietly set extra_vsim_args $::env(UVMF_EXTRA_VSIM_ARGS) +} + +################################################################## +## Launch Questa : generate vsim command line and execute +################################################################## +# pragma uvmf custom dut_run_dofile_target begin +# UVMF_CHANGE_ME : Change the UVM_TESTNAME plusarg to run a different test +quietly set cmd [format "vsim -i -sv_seed random +UVM_TESTNAME=test_top +UVM_VERBOSITY=UVM_HIGH -permit_unmatched_virtual_intf +notimingchecks -suppress 8887 %s %s -uvmcontrol=all -msgmode both -classdebug -assertdebug +uvm_set_config_int=*,enable_transaction_viewing,1 -do { set NoQuitOnFinish 1; onbreak {resume}; run 0; do wave.do; set PrefSource(OpenOnBreak) 0; radix hex showbase; } optimized_debug_top_tb" $svLibs $extra_vsim_args] +# pragma uvmf custom dut_run_dofile_target end +eval $cmd diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/tbx.config b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/tbx.config new file mode 100644 index 000000000..eec58168c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/tbx.config @@ -0,0 +1,10 @@ + + + + + +comp -questa +velsyn -D1S +rtlc -allow_4ST + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/testlist b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/testlist new file mode 100644 index 000000000..0c6229764 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/testlist @@ -0,0 +1,20 @@ + + + + +# Test list for use by RMDB file +# File syntax is +# TB_INFO { } { } +# TB ## All subsequent tests will run on this bench until a different "TB" line is seen +# TEST <1st_seed> ... +# If not enough seeds are provided then random seeds are used to pad +# If no repeat count is given, default is 1 +# pragma uvmf custom tb_info begin +TB_INFO fuse_ctrl { UVMF_VIP_LIBRARY_HOME=../../../../../../../../verification_ip UVMF_PROJECT_DIR=../../../../../../../fuse_ctrl } { } +# pragma uvmf custom tb_info end +TB fuse_ctrl +# pragma uvmf custom regression_suite begin +TEST test_top 3 +# pragma uvmf custom regression_suite end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/testlist.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/testlist.yaml new file mode 100644 index 000000000..6236cc790 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/testlist.yaml @@ -0,0 +1,44 @@ + + + +# YAML test list for use by RMDB file +# File syntax is +# uvmf_testlist: +# testbenches: +# - name: +# extra_build_options: +# extra_run_options: +# - name: +# ... +# - name: +# tests: +# - name: +# uvm_testname: (defaults to test_name) +# testbench: (defaults to last tb name seen) +# repeat: (defaults to 1) +# seeds: [,,...,] (defaults to all random) +# extra_test_options: +# - name: +# ... +# - name: +# include: +# - (relative path reference is to the including YAML file) +# - +# ... +# - + +uvmf_testlist: + testbenches: +# pragma uvmf custom tb_info begin + - name: fuse_ctrl + extra_build_options: "UVMF_VIP_LIBRARY_HOME=../../../../../../../../verification_ip UVMF_PROJECT_DIR=../../../../../../../fuse_ctrl" + extra_run_options: "" +# pragma uvmf custom tb_info end + tests: + - testbench: fuse_ctrl +# pragma uvmf custom regression_suite begin + - name: test_top + repeat: 3 +# pragma uvmf custom regression_suite end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/top.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/top.compile new file mode 100644 index 000000000..efd51c07e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/top.compile @@ -0,0 +1,3 @@ +needs: + - hvl.compile + - hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/veloce.config b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/veloce.config new file mode 100644 index 000000000..d09751555 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/veloce.config @@ -0,0 +1,26 @@ + + + + + +# pragma uvmf custom additional begin +comp -num_boards 1 +comp -hvl questa +# Please choose the correct emulator type code for +# comp -platform command or else velcomp will fail +# Available types are: +# - Veloce2 Quattro: D2 +# - Veloce2 Maximus: D2M +# - Veloce Strato TiL, Ti, and Mi: Strato +# - Veloce Strato M and Strato T: StratoM +# - comp -platform +comp -platform Strato + +rtlc -enable_tbx_pragma_checks +rtlc -allow_4ST +rtlc -allow_MDR +rtlc -compile_display +rtlc -xwave_siglist xwaves.sigs +# pragma uvmf custom additional end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/viswave.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/viswave.do new file mode 100644 index 000000000..e5e7ad466 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/viswave.do @@ -0,0 +1,52 @@ + + +onerror resume +wave tags F0 +wave update off + +wave spacer -backgroundcolor Salmon { fuse_ctrl_rst_agent } +wave add uvm_test_top.environment.fuse_ctrl_rst_agent.fuse_ctrl_rst_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_rst_agent_bus +wave add -group fuse_ctrl_rst_agent_bus hdl_top.fuse_ctrl_rst_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_rst_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_core_axi_write_agent } +wave add uvm_test_top.environment.fuse_ctrl_core_axi_write_agent.fuse_ctrl_core_axi_write_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_core_axi_write_agent_bus +wave add -group fuse_ctrl_core_axi_write_agent_bus hdl_top.fuse_ctrl_core_axi_write_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_core_axi_write_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_prim_axi_write_agent } +wave add uvm_test_top.environment.fuse_ctrl_prim_axi_write_agent.fuse_ctrl_prim_axi_write_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_prim_axi_write_agent_bus +wave add -group fuse_ctrl_prim_axi_write_agent_bus hdl_top.fuse_ctrl_prim_axi_write_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_prim_axi_write_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_core_axi_read_agent } +wave add uvm_test_top.environment.fuse_ctrl_core_axi_read_agent.fuse_ctrl_core_axi_read_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_core_axi_read_agent_bus +wave add -group fuse_ctrl_core_axi_read_agent_bus hdl_top.fuse_ctrl_core_axi_read_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_core_axi_read_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_prim_axi_read_agent } +wave add uvm_test_top.environment.fuse_ctrl_prim_axi_read_agent.fuse_ctrl_prim_axi_read_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_prim_axi_read_agent_bus +wave add -group fuse_ctrl_prim_axi_read_agent_bus hdl_top.fuse_ctrl_prim_axi_read_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_prim_axi_read_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_secreg_axi_read_agent } +wave add uvm_test_top.environment.fuse_ctrl_secreg_axi_read_agent.fuse_ctrl_secreg_axi_read_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_secreg_axi_read_agent_bus +wave add -group fuse_ctrl_secreg_axi_read_agent_bus hdl_top.fuse_ctrl_secreg_axi_read_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_secreg_axi_read_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_lc_otp_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_lc_otp_if_agent.fuse_ctrl_lc_otp_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_lc_otp_if_agent_bus +wave add -group fuse_ctrl_lc_otp_if_agent_bus hdl_top.fuse_ctrl_lc_otp_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_lc_otp_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] + +wave update on +WaveSetStreamView + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/wave.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/wave.do new file mode 100644 index 000000000..1e8ccdf10 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/wave.do @@ -0,0 +1,45 @@ + + +onerror {resume} +quietly WaveActivateNextPane {} 0 + +add wave -noupdate -divider fuse_ctrl_rst_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_rst_agent/fuse_ctrl_rst_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_rst_agent_bus /hdl_top/fuse_ctrl_rst_agent_bus/* +add wave -noupdate -divider fuse_ctrl_core_axi_write_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_core_axi_write_agent/fuse_ctrl_core_axi_write_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_core_axi_write_agent_bus /hdl_top/fuse_ctrl_core_axi_write_agent_bus/* +add wave -noupdate -divider fuse_ctrl_prim_axi_write_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_prim_axi_write_agent/fuse_ctrl_prim_axi_write_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_prim_axi_write_agent_bus /hdl_top/fuse_ctrl_prim_axi_write_agent_bus/* +add wave -noupdate -divider fuse_ctrl_core_axi_read_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_core_axi_read_agent/fuse_ctrl_core_axi_read_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_core_axi_read_agent_bus /hdl_top/fuse_ctrl_core_axi_read_agent_bus/* +add wave -noupdate -divider fuse_ctrl_prim_axi_read_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_prim_axi_read_agent/fuse_ctrl_prim_axi_read_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_prim_axi_read_agent_bus /hdl_top/fuse_ctrl_prim_axi_read_agent_bus/* +add wave -noupdate -divider fuse_ctrl_secreg_axi_read_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_secreg_axi_read_agent/fuse_ctrl_secreg_axi_read_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_secreg_axi_read_agent_bus /hdl_top/fuse_ctrl_secreg_axi_read_agent_bus/* +add wave -noupdate -divider fuse_ctrl_lc_otp_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_lc_otp_if_agent/fuse_ctrl_lc_otp_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_lc_otp_if_agent_bus /hdl_top/fuse_ctrl_lc_otp_if_agent_bus/* + +TreeUpdate [SetDefaultTree] +quietly wave cursor active 0 +configure wave -namecolwidth 472 +configure wave -valuecolwidth 100 +configure wave -justifyvalue left +configure wave -signalnamewidth 0 +configure wave -snapdistance 10 +configure wave -datasetprefix 0 +configure wave -rowmargin 4 +configure wave -childrowmargin 2 +configure wave -gridoffset 0 +configure wave -gridperiod 1 +configure wave -griddelta 40 +configure wave -timeline 0 +configure wave -timelineunits ns +update +WaveRestoreZoom {27 ns} {168 ns} + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/xwaves.sigs b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/xwaves.sigs new file mode 100644 index 000000000..d75f0a575 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/sim/xwaves.sigs @@ -0,0 +1,17 @@ + + + + + +# pragma uvmf custom additional begin + +Group All + +#Top level signals +hdl_top.* +#Add additional levels or individual signals as needed +hdl_top.*.* + +# pragma uvmf custom additional end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.compile new file mode 100644 index 000000000..0c6b841a5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.compile @@ -0,0 +1,4 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +src: + - fuse_ctrl_parameters_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.sv new file mode 100644 index 000000000..bf23f46f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.sv @@ -0,0 +1,57 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This package contains test level parameters +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +package fuse_ctrl_parameters_pkg; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + + // These parameters are used to uniquely identify each interface. The monitor_bfm and + // driver_bfm are placed into and retrieved from the uvm_config_db using these string + // names as the field_name. The parameter is also used to enable transaction viewing + // from the command line for selected interfaces using the UVM command line processing. + parameter string fuse_ctrl_rst_agent_BFM = "fuse_ctrl_rst_agent_BFM"; /* [0] */ + parameter string fuse_ctrl_core_axi_write_agent_BFM = "fuse_ctrl_core_axi_write_agent_BFM"; /* [1] */ + parameter string fuse_ctrl_prim_axi_write_agent_BFM = "fuse_ctrl_prim_axi_write_agent_BFM"; /* [2] */ + parameter string fuse_ctrl_core_axi_read_agent_BFM = "fuse_ctrl_core_axi_read_agent_BFM"; /* [3] */ + parameter string fuse_ctrl_prim_axi_read_agent_BFM = "fuse_ctrl_prim_axi_read_agent_BFM"; /* [4] */ + parameter string fuse_ctrl_secreg_axi_read_agent_BFM = "fuse_ctrl_secreg_axi_read_agent_BFM"; /* [5] */ + parameter string fuse_ctrl_lc_otp_if_agent_BFM = "fuse_ctrl_lc_otp_if_agent_BFM"; /* [6] */ + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.vinfo new file mode 100644 index 000000000..3bd4d7f9b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_parameters_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.compile new file mode 100644 index 000000000..50a725cb3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.compile @@ -0,0 +1,13 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if.compile + - ../../../../verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile + - ../parameters/fuse_ctrl_parameters_pkg.compile +src: + - fuse_ctrl_sequences_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.sv new file mode 100644 index 000000000..73c1e158e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.sv @@ -0,0 +1,75 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This package includes all high level sequence classes used +// in the environment. These include utility sequences and top +// level sequences. +// +// CONTAINS: +// - +// - +// +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +// + +package fuse_ctrl_sequences_pkg; + import uvm_pkg::*; + import uvmf_base_pkg::*; + import fuse_ctrl_rst_pkg::*; + import fuse_ctrl_rst_pkg_hdl::*; + import fuse_ctrl_core_axi_write_if_pkg::*; + import fuse_ctrl_core_axi_write_if_pkg_hdl::*; + import fuse_ctrl_prim_axi_write_if_pkg::*; + import fuse_ctrl_prim_axi_write_if_pkg_hdl::*; + import fuse_ctrl_core_axi_read_if_pkg::*; + import fuse_ctrl_core_axi_read_if_pkg_hdl::*; + import fuse_ctrl_prim_axi_read_if_pkg::*; + import fuse_ctrl_prim_axi_read_if_pkg_hdl::*; + import fuse_ctrl_secreg_axi_read_if_pkg::*; + import fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; + import fuse_ctrl_lc_otp_if_pkg::*; + import fuse_ctrl_lc_otp_if_pkg_hdl::*; + import fuse_ctrl_parameters_pkg::*; + import fuse_ctrl_env_pkg::*; + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + `include "src/fuse_ctrl_bench_sequence_base.svh" + `include "src/register_test_sequence.svh" + `include "src/example_derived_test_sequence.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the sequence package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.vinfo new file mode 100644 index 000000000..d727f602e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.vinfo @@ -0,0 +1,12 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo +@use $UVMF_PROJECT_DIR/tb/parameters/fuse_ctrl_parameters_pkg.vinfo ++incdir+@vinfodir +fuse_ctrl_sequences_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/sequences/src/example_derived_test_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/sequences/src/example_derived_test_sequence.svh new file mode 100644 index 000000000..7566dc511 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/sequences/src/example_derived_test_sequence.svh @@ -0,0 +1,44 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains the top level sequence used in example_derived_test. +// It is an example of a sequence that is extended from %(benchName)_bench_sequence_base +// and can override %(benchName)_bench_sequence_base. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class example_derived_test_sequence extends fuse_ctrl_bench_sequence_base; + + `uvm_object_utils( example_derived_test_sequence ); + + function new(string name = "" ); + super.new(name); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/sequences/src/fuse_ctrl_bench_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/sequences/src/fuse_ctrl_bench_sequence_base.svh new file mode 100644 index 000000000..b232cfe41 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/sequences/src/fuse_ctrl_bench_sequence_base.svh @@ -0,0 +1,202 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// Description: This file contains the top level and utility sequences +// used by test_top. It can be extended to create derivative top +// level sequences. +// +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +// + + +typedef fuse_ctrl_env_configuration fuse_ctrl_env_configuration_t; + +class fuse_ctrl_bench_sequence_base extends uvmf_sequence_base #(uvm_sequence_item); + + `uvm_object_utils( fuse_ctrl_bench_sequence_base ); + + // pragma uvmf custom sequences begin + +typedef fuse_ctrl_env_sequence_base #( + .CONFIG_T(fuse_ctrl_env_configuration_t) + ) + fuse_ctrl_env_sequence_base_t; +rand fuse_ctrl_env_sequence_base_t fuse_ctrl_env_seq; + + + + // UVMF_CHANGE_ME : Instantiate, construct, and start sequences as needed to create stimulus scenarios. + // Instantiate sequences here + typedef fuse_ctrl_rst_random_sequence fuse_ctrl_rst_agent_random_seq_t; + fuse_ctrl_rst_agent_random_seq_t fuse_ctrl_rst_agent_random_seq; + typedef fuse_ctrl_core_axi_write_if_random_sequence fuse_ctrl_core_axi_write_agent_random_seq_t; + fuse_ctrl_core_axi_write_agent_random_seq_t fuse_ctrl_core_axi_write_agent_random_seq; + typedef fuse_ctrl_prim_axi_write_if_random_sequence fuse_ctrl_prim_axi_write_agent_random_seq_t; + fuse_ctrl_prim_axi_write_agent_random_seq_t fuse_ctrl_prim_axi_write_agent_random_seq; + typedef fuse_ctrl_core_axi_read_if_random_sequence fuse_ctrl_core_axi_read_agent_random_seq_t; + fuse_ctrl_core_axi_read_agent_random_seq_t fuse_ctrl_core_axi_read_agent_random_seq; + typedef fuse_ctrl_prim_axi_read_if_random_sequence fuse_ctrl_prim_axi_read_agent_random_seq_t; + fuse_ctrl_prim_axi_read_agent_random_seq_t fuse_ctrl_prim_axi_read_agent_random_seq; + typedef fuse_ctrl_secreg_axi_read_if_random_sequence fuse_ctrl_secreg_axi_read_agent_random_seq_t; + fuse_ctrl_secreg_axi_read_agent_random_seq_t fuse_ctrl_secreg_axi_read_agent_random_seq; + typedef fuse_ctrl_lc_otp_if_random_sequence fuse_ctrl_lc_otp_if_agent_random_seq_t; + fuse_ctrl_lc_otp_if_agent_random_seq_t fuse_ctrl_lc_otp_if_agent_random_seq; + // pragma uvmf custom sequences end + + // Sequencer handles for each active interface in the environment + typedef fuse_ctrl_rst_transaction fuse_ctrl_rst_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_rst_agent_transaction_t) fuse_ctrl_rst_agent_sequencer; + typedef fuse_ctrl_core_axi_write_if_transaction fuse_ctrl_core_axi_write_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_core_axi_write_agent_transaction_t) fuse_ctrl_core_axi_write_agent_sequencer; + typedef fuse_ctrl_prim_axi_write_if_transaction fuse_ctrl_prim_axi_write_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_prim_axi_write_agent_transaction_t) fuse_ctrl_prim_axi_write_agent_sequencer; + typedef fuse_ctrl_core_axi_read_if_transaction fuse_ctrl_core_axi_read_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_core_axi_read_agent_transaction_t) fuse_ctrl_core_axi_read_agent_sequencer; + typedef fuse_ctrl_prim_axi_read_if_transaction fuse_ctrl_prim_axi_read_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_prim_axi_read_agent_transaction_t) fuse_ctrl_prim_axi_read_agent_sequencer; + typedef fuse_ctrl_secreg_axi_read_if_transaction fuse_ctrl_secreg_axi_read_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_secreg_axi_read_agent_transaction_t) fuse_ctrl_secreg_axi_read_agent_sequencer; + typedef fuse_ctrl_lc_otp_if_transaction fuse_ctrl_lc_otp_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_lc_otp_if_agent_transaction_t) fuse_ctrl_lc_otp_if_agent_sequencer; + + + // Top level environment configuration handle + fuse_ctrl_env_configuration_t top_configuration; + + // Configuration handles to access interface BFM's + fuse_ctrl_rst_configuration fuse_ctrl_rst_agent_config; + fuse_ctrl_core_axi_write_if_configuration fuse_ctrl_core_axi_write_agent_config; + fuse_ctrl_prim_axi_write_if_configuration fuse_ctrl_prim_axi_write_agent_config; + fuse_ctrl_core_axi_read_if_configuration fuse_ctrl_core_axi_read_agent_config; + fuse_ctrl_prim_axi_read_if_configuration fuse_ctrl_prim_axi_read_agent_config; + fuse_ctrl_secreg_axi_read_if_configuration fuse_ctrl_secreg_axi_read_agent_config; + fuse_ctrl_lc_otp_if_configuration fuse_ctrl_lc_otp_if_agent_config; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + function new( string name = "" ); + super.new( name ); + // Retrieve the configuration handles from the uvm_config_db + + // Retrieve top level configuration handle + if ( !uvm_config_db#(fuse_ctrl_env_configuration_t)::get(null,UVMF_CONFIGURATIONS, "TOP_ENV_CONFIG",top_configuration) ) begin + `uvm_info("CFG", "*** FATAL *** uvm_config_db::get can not find TOP_ENV_CONFIG. Are you using an older UVMF release than what was used to generate this bench?",UVM_NONE); + `uvm_fatal("CFG", "uvm_config_db#(fuse_ctrl_env_configuration_t)::get cannot find resource TOP_ENV_CONFIG"); + end + + // Retrieve config handles for all agents + if( !uvm_config_db #( fuse_ctrl_rst_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_rst_agent_BFM , fuse_ctrl_rst_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_rst_configuration )::get cannot find resource fuse_ctrl_rst_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_core_axi_write_if_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_core_axi_write_agent_BFM , fuse_ctrl_core_axi_write_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_core_axi_write_if_configuration )::get cannot find resource fuse_ctrl_core_axi_write_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_prim_axi_write_if_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_prim_axi_write_agent_BFM , fuse_ctrl_prim_axi_write_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_prim_axi_write_if_configuration )::get cannot find resource fuse_ctrl_prim_axi_write_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_core_axi_read_if_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_core_axi_read_agent_BFM , fuse_ctrl_core_axi_read_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_core_axi_read_if_configuration )::get cannot find resource fuse_ctrl_core_axi_read_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_prim_axi_read_if_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_prim_axi_read_agent_BFM , fuse_ctrl_prim_axi_read_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_prim_axi_read_if_configuration )::get cannot find resource fuse_ctrl_prim_axi_read_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_secreg_axi_read_if_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_secreg_axi_read_agent_BFM , fuse_ctrl_secreg_axi_read_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_secreg_axi_read_if_configuration )::get cannot find resource fuse_ctrl_secreg_axi_read_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_lc_otp_if_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_lc_otp_if_agent_BFM , fuse_ctrl_lc_otp_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_lc_otp_if_configuration )::get cannot find resource fuse_ctrl_lc_otp_if_agent_BFM" ) + + // Assign the sequencer handles from the handles within agent configurations + fuse_ctrl_rst_agent_sequencer = fuse_ctrl_rst_agent_config.get_sequencer(); + fuse_ctrl_core_axi_write_agent_sequencer = fuse_ctrl_core_axi_write_agent_config.get_sequencer(); + fuse_ctrl_prim_axi_write_agent_sequencer = fuse_ctrl_prim_axi_write_agent_config.get_sequencer(); + fuse_ctrl_core_axi_read_agent_sequencer = fuse_ctrl_core_axi_read_agent_config.get_sequencer(); + fuse_ctrl_prim_axi_read_agent_sequencer = fuse_ctrl_prim_axi_read_agent_config.get_sequencer(); + fuse_ctrl_secreg_axi_read_agent_sequencer = fuse_ctrl_secreg_axi_read_agent_config.get_sequencer(); + fuse_ctrl_lc_otp_if_agent_sequencer = fuse_ctrl_lc_otp_if_agent_config.get_sequencer(); + + + + // pragma uvmf custom new begin + // pragma uvmf custom new end + + endfunction + + // **************************************************************************** + virtual task body(); + // pragma uvmf custom body begin + + // Construct sequences here + + fuse_ctrl_env_seq = fuse_ctrl_env_sequence_base_t::type_id::create("fuse_ctrl_env_seq"); + + fuse_ctrl_rst_agent_random_seq = fuse_ctrl_rst_agent_random_seq_t::type_id::create("fuse_ctrl_rst_agent_random_seq"); + fuse_ctrl_core_axi_write_agent_random_seq = fuse_ctrl_core_axi_write_agent_random_seq_t::type_id::create("fuse_ctrl_core_axi_write_agent_random_seq"); + fuse_ctrl_prim_axi_write_agent_random_seq = fuse_ctrl_prim_axi_write_agent_random_seq_t::type_id::create("fuse_ctrl_prim_axi_write_agent_random_seq"); + fuse_ctrl_core_axi_read_agent_random_seq = fuse_ctrl_core_axi_read_agent_random_seq_t::type_id::create("fuse_ctrl_core_axi_read_agent_random_seq"); + fuse_ctrl_prim_axi_read_agent_random_seq = fuse_ctrl_prim_axi_read_agent_random_seq_t::type_id::create("fuse_ctrl_prim_axi_read_agent_random_seq"); + fuse_ctrl_secreg_axi_read_agent_random_seq = fuse_ctrl_secreg_axi_read_agent_random_seq_t::type_id::create("fuse_ctrl_secreg_axi_read_agent_random_seq"); + fuse_ctrl_lc_otp_if_agent_random_seq = fuse_ctrl_lc_otp_if_agent_random_seq_t::type_id::create("fuse_ctrl_lc_otp_if_agent_random_seq"); + fork + fuse_ctrl_rst_agent_config.wait_for_reset(); + fuse_ctrl_core_axi_write_agent_config.wait_for_reset(); + fuse_ctrl_prim_axi_write_agent_config.wait_for_reset(); + fuse_ctrl_core_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_prim_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_secreg_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_lc_otp_if_agent_config.wait_for_reset(); + join + // Start RESPONDER sequences here + fork + join_none + // Start INITIATOR sequences here + fork + repeat (25) fuse_ctrl_rst_agent_random_seq.start(fuse_ctrl_rst_agent_sequencer); + repeat (25) fuse_ctrl_core_axi_write_agent_random_seq.start(fuse_ctrl_core_axi_write_agent_sequencer); + repeat (25) fuse_ctrl_prim_axi_write_agent_random_seq.start(fuse_ctrl_prim_axi_write_agent_sequencer); + repeat (25) fuse_ctrl_core_axi_read_agent_random_seq.start(fuse_ctrl_core_axi_read_agent_sequencer); + repeat (25) fuse_ctrl_prim_axi_read_agent_random_seq.start(fuse_ctrl_prim_axi_read_agent_sequencer); + repeat (25) fuse_ctrl_secreg_axi_read_agent_random_seq.start(fuse_ctrl_secreg_axi_read_agent_sequencer); + repeat (25) fuse_ctrl_lc_otp_if_agent_random_seq.start(fuse_ctrl_lc_otp_if_agent_sequencer); + join + +fuse_ctrl_env_seq.start(top_configuration.vsqr); + + // UVMF_CHANGE_ME : Extend the simulation XXX number of clocks after + // the last sequence to allow for the last sequence item to flow + // through the design. + fork + fuse_ctrl_rst_agent_config.wait_for_num_clocks(400); + fuse_ctrl_core_axi_write_agent_config.wait_for_num_clocks(400); + fuse_ctrl_prim_axi_write_agent_config.wait_for_num_clocks(400); + fuse_ctrl_core_axi_read_agent_config.wait_for_num_clocks(400); + fuse_ctrl_prim_axi_read_agent_config.wait_for_num_clocks(400); + fuse_ctrl_secreg_axi_read_agent_config.wait_for_num_clocks(400); + fuse_ctrl_lc_otp_if_agent_config.wait_for_num_clocks(400); + join + + // pragma uvmf custom body end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/sequences/src/register_test_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/sequences/src/register_test_sequence.svh new file mode 100644 index 000000000..0db60c39b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/sequences/src/register_test_sequence.svh @@ -0,0 +1,76 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains the top level sequence used in register_test. +// It uses the UVM built in register test. Specific UVM built-in tests can be +// selected in the body task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class register_test_sequence extends fuse_ctrl_bench_sequence_base; + + `uvm_object_utils( register_test_sequence ); + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "" ); + super.new(name); + endfunction + + // **************************************************************************** + virtual task body(); + + // Reset the DUT + fork + // pragma uvmf custom register_test_reset begin + // UVMF_CHANGE_ME + // Select the desired wait_for_reset or provide custom mechanism. + // fork-join for this code block may be unnecessary based on your situation. + fuse_ctrl_rst_agent_config.wait_for_reset(); + fuse_ctrl_core_axi_write_agent_config.wait_for_reset(); + fuse_ctrl_prim_axi_write_agent_config.wait_for_reset(); + fuse_ctrl_core_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_prim_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_secreg_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_lc_otp_if_agent_config.wait_for_reset(); + // pragma uvmf custom register_test_reset end + join + + // pragma uvmf custom register_test_setup begin + // UVMF_CHANGE_ME perform potentially necessary operations before running the sequence. + // pragma uvmf custom register_test_setup end + + // pragma uvmf custom register_test_operation begin + // UVMF_CHANGE_ME Perform your custom register test + // pragma uvmf custom register_test_operation end + + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/hdl_top.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/hdl_top.compile new file mode 100644 index 000000000..1b54746f9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/hdl_top.compile @@ -0,0 +1,15 @@ +incdir: + - ${uvm_path}/src + - . +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ../parameters/fuse_ctrl_parameters_pkg.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hdl.compile +src: + - hdl_top.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/hdl_top.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/hdl_top.sv new file mode 100644 index 000000000..0ac419292 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/hdl_top.sv @@ -0,0 +1,218 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// Description: This top level module instantiates all synthesizable +// static content. This and tb_top.sv are the two top level modules +// of the simulation. +// +// This module instantiates the following: +// DUT: The Design Under Test +// Interfaces: Signal bundles that contain signals connected to DUT +// Driver BFM's: BFM's that actively drive interface signals +// Monitor BFM's: BFM's that passively monitor interface signals +// +//---------------------------------------------------------------------- + +//---------------------------------------------------------------------- +// + +module hdl_top; + +import fuse_ctrl_parameters_pkg::*; +import uvmf_base_pkg_hdl::*; + + // pragma attribute hdl_top partition_module_xrtl +// pragma uvmf custom clock_generator begin + bit clk; + // Instantiate a clk driver + // tbx clkgen + initial begin + clk = 0; + #0ns; + forever begin + clk = ~clk; + #5ns; + end + end +// pragma uvmf custom clock_generator end + +// pragma uvmf custom reset_generator begin + bit rst; + // Instantiate a rst driver + // tbx clkgen + initial begin + rst = 0; + #200ns; + rst = 1; + end +// pragma uvmf custom reset_generator end + + // pragma uvmf custom module_item_additional begin + logic edn_clk; + logic edn_rst_n; + // pragma uvmf custom module_item_additional end + + // Instantiate the signal bundle, monitor bfm and driver bfm for each interface. + // The signal bundle, _if, contains signals to be connected to the DUT. + // The monitor, monitor_bfm, observes the bus, _if, and captures transactions. + // The driver, driver_bfm, drives transactions onto the bus, _if. + fuse_ctrl_rst_if fuse_ctrl_rst_agent_bus( + // pragma uvmf custom fuse_ctrl_rst_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_rst_agent_bus_connections end + ); + fuse_ctrl_core_axi_write_if_if fuse_ctrl_core_axi_write_agent_bus( + // pragma uvmf custom fuse_ctrl_core_axi_write_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_core_axi_write_agent_bus_connections end + ); + fuse_ctrl_prim_axi_write_if_if fuse_ctrl_prim_axi_write_agent_bus( + // pragma uvmf custom fuse_ctrl_prim_axi_write_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_prim_axi_write_agent_bus_connections end + ); + fuse_ctrl_core_axi_read_if_if fuse_ctrl_core_axi_read_agent_bus( + // pragma uvmf custom fuse_ctrl_core_axi_read_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_core_axi_read_agent_bus_connections end + ); + fuse_ctrl_prim_axi_read_if_if fuse_ctrl_prim_axi_read_agent_bus( + // pragma uvmf custom fuse_ctrl_prim_axi_read_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_prim_axi_read_agent_bus_connections end + ); + fuse_ctrl_secreg_axi_read_if_if fuse_ctrl_secreg_axi_read_agent_bus( + // pragma uvmf custom fuse_ctrl_secreg_axi_read_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_secreg_axi_read_agent_bus_connections end + ); + fuse_ctrl_lc_otp_if_if fuse_ctrl_lc_otp_if_agent_bus( + // pragma uvmf custom fuse_ctrl_lc_otp_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_lc_otp_if_agent_bus_connections end + ); + fuse_ctrl_rst_monitor_bfm fuse_ctrl_rst_agent_mon_bfm(fuse_ctrl_rst_agent_bus.monitor_port); + fuse_ctrl_core_axi_write_if_monitor_bfm fuse_ctrl_core_axi_write_agent_mon_bfm(fuse_ctrl_core_axi_write_agent_bus.monitor_port); + fuse_ctrl_prim_axi_write_if_monitor_bfm fuse_ctrl_prim_axi_write_agent_mon_bfm(fuse_ctrl_prim_axi_write_agent_bus.monitor_port); + fuse_ctrl_core_axi_read_if_monitor_bfm fuse_ctrl_core_axi_read_agent_mon_bfm(fuse_ctrl_core_axi_read_agent_bus.monitor_port); + fuse_ctrl_prim_axi_read_if_monitor_bfm fuse_ctrl_prim_axi_read_agent_mon_bfm(fuse_ctrl_prim_axi_read_agent_bus.monitor_port); + fuse_ctrl_secreg_axi_read_if_monitor_bfm fuse_ctrl_secreg_axi_read_agent_mon_bfm(fuse_ctrl_secreg_axi_read_agent_bus.monitor_port); + fuse_ctrl_lc_otp_if_monitor_bfm fuse_ctrl_lc_otp_if_agent_mon_bfm(fuse_ctrl_lc_otp_if_agent_bus.monitor_port); + fuse_ctrl_rst_driver_bfm fuse_ctrl_rst_agent_drv_bfm(fuse_ctrl_rst_agent_bus.initiator_port); + fuse_ctrl_core_axi_write_if_driver_bfm fuse_ctrl_core_axi_write_agent_drv_bfm(fuse_ctrl_core_axi_write_agent_bus.initiator_port); + fuse_ctrl_prim_axi_write_if_driver_bfm fuse_ctrl_prim_axi_write_agent_drv_bfm(fuse_ctrl_prim_axi_write_agent_bus.initiator_port); + fuse_ctrl_core_axi_read_if_driver_bfm fuse_ctrl_core_axi_read_agent_drv_bfm(fuse_ctrl_core_axi_read_agent_bus.initiator_port); + fuse_ctrl_prim_axi_read_if_driver_bfm fuse_ctrl_prim_axi_read_agent_drv_bfm(fuse_ctrl_prim_axi_read_agent_bus.initiator_port); + fuse_ctrl_secreg_axi_read_if_driver_bfm fuse_ctrl_secreg_axi_read_agent_drv_bfm(fuse_ctrl_secreg_axi_read_agent_bus.initiator_port); + fuse_ctrl_lc_otp_if_driver_bfm fuse_ctrl_lc_otp_if_agent_drv_bfm(fuse_ctrl_lc_otp_if_agent_bus.initiator_port); + + // pragma uvmf custom dut_instantiation begin + // UVMF_CHANGE_ME : Add DUT and connect to signals in _bus interfaces listed above + // Instantiate your DUT here + // These DUT's instantiated to show verilog and vhdl instantiation + //verilog_dut dut_verilog( .clk(clk), .rst(rst), .in_signal(vhdl_to_verilog_signal), .out_signal(verilog_to_vhdl_signal)); + //vhdl_dut dut_vhdl ( .clk(clk), .rst(rst), .in_signal(verilog_to_vhdl_signal), .out_signal(vhdl_to_verilog_signal)); + + otp_ctrl_top #( + .MemInitFile (MemInitFile) + ) dut ( + .clk_i (fuse_ctrl_rst_agent_bus.clk_i ), + .rst_ni (fuse_ctrl_rst_agent_bus.rst_ni ), + // edn + .clk_edn_i (edn_clk ), + .rst_edn_ni (edn_rst_n ), + .edn_o (edn_o), //(edn_if[0].req ), + .edn_i (fuse_ctrl_in_edn_i), //({edn_if[0].ack, edn_if[0].d_data}), + // AXI interface + .s_core_axi_r_if (axi_core_if.r_sub), + .s_core_axi_w_if (axi_core_if.w_sub), + .s_prim_axi_r_if (axi_prim_if.r_sub), + .s_prim_axi_w_if (axi_prim_if.w_sub), + .s_secreg_axi_r_if (axi_secreg_if.r_sub), + // interrupt + .intr_otp_operation_done_o (intr_otp_operation_done), + .intr_otp_error_o (intr_otp_error), + // alert + .alert_rx_i (alert_rx_i ), //(alert_rx parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ALERT_TEST_OFFSET = 13'h c; + .alert_tx_o (alert_tx_o ), //(alert_tx ), + // ast + .obs_ctrl_i (obs_ctrl_i), //(otp_ctrl_if.obs_ctrl_i), + .otp_obs_o (otp_obs_o), + .otp_ast_pwr_seq_o (otp_ast_pwr_seq_o), //(ast_req), + .otp_ast_pwr_seq_h_i (otp_ast_pwr_seq_h_i), //(otp_ctrl_if.otp_ast_pwr_seq_h_i), + // pwrmgr + .pwr_otp_i (pwr_otp_init_i), //(otp_ctrl_if.pwr_otp_init_i), + .pwr_otp_o (pwr_otp_o), //({otp_ctrl_if.pwr_otp_done_o, otp_ctrl_if.pwr_otp_idle_o}), + // lc + .lc_otp_vendor_test_i (lc_otp_vendor_test_i), //(otp_ctrl_if.otp_vendor_test_ctrl_i), + .lc_otp_vendor_test_o (lc_otp_vendor_test_o), //(otp_ctrl_if.otp_vendor_test_status_o), + .lc_otp_program_i (lc_otp_program_i), //({lc_prog_if.req, lc_prog_if.h_data}), + .lc_otp_program_o (lc_otp_program_o), //({lc_prog_if.d_data, lc_prog_if.ack}), + //.lc_creator_seed_sw_rw_en_i (lc_creator_seed_sw_rw_en_i), //(otp_ctrl_if.lc_creator_seed_sw_rw_en_i), + //.lc_owner_seed_sw_rw_en_i (lc_owner_seed_sw_rw_en_i), //(otp_ctrl_if.lc_owner_seed_sw_rw_en_i), + //.lc_seed_hw_rd_en_i (lc_seed_hw_rd_en_i), //(otp_ctrl_if.lc_seed_hw_rd_en_i), + .lc_dft_en_i (lc_dft_en_i), //(otp_ctrl_if.lc_dft_en_i), + .lc_escalate_en_i (lc_escalate_en_i), //(otp_ctrl_if.lc_escalate_en_i), + .lc_check_byp_en_i (lc_check_byp_en_i), //(otp_ctrl_if.lc_check_byp_en_i), + .otp_lc_data_o (otp_lc_data_o), //(otp_ctrl_if.lc_data_o), + + + .otp_broadcast_o (otp_broadcast_o), //(otp_ctrl_if.otp_broadcast_o), + .otp_ext_voltage_h_io (otp_ext_voltage_h_io), + //scan + .scan_en_i (scan_en_i), //(otp_ctrl_if.scan_en_i), + .scan_rst_ni (scan_rst_ni), //(otp_ctrl_if.scan_rst_ni), + .scanmode_i (scanmode_i), //(otp_ctrl_if.scanmode_i), + + // Test-related GPIO output + .cio_test_o (cio_test_o), //(otp_ctrl_if.cio_test_o), + .cio_test_en_o (cio_test_en_o) //(otp_ctrl_if.cio_test_en_o) + ); + // pragma uvmf custom dut_instantiation end + + initial begin // tbx vif_binding_block + import uvm_pkg::uvm_config_db; + // The monitor_bfm and driver_bfm for each interface is placed into the uvm_config_db. + // They are placed into the uvm_config_db using the string names defined in the parameters package. + // The string names are passed to the agent configurations by test_top through the top level configuration. + // They are retrieved by the agents configuration class for use by the agent. + uvm_config_db #( virtual fuse_ctrl_rst_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_rst_agent_BFM , fuse_ctrl_rst_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_write_if_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_write_agent_BFM , fuse_ctrl_core_axi_write_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_write_if_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_write_agent_BFM , fuse_ctrl_prim_axi_write_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_read_if_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_read_agent_BFM , fuse_ctrl_core_axi_read_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_read_if_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_read_agent_BFM , fuse_ctrl_prim_axi_read_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_secreg_axi_read_if_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_secreg_axi_read_agent_BFM , fuse_ctrl_secreg_axi_read_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_lc_otp_if_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_lc_otp_if_agent_BFM , fuse_ctrl_lc_otp_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_rst_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_rst_agent_BFM , fuse_ctrl_rst_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_write_if_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_write_agent_BFM , fuse_ctrl_core_axi_write_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_write_if_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_write_agent_BFM , fuse_ctrl_prim_axi_write_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_read_if_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_read_agent_BFM , fuse_ctrl_core_axi_read_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_read_if_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_read_agent_BFM , fuse_ctrl_prim_axi_read_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_secreg_axi_read_if_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_secreg_axi_read_agent_BFM , fuse_ctrl_secreg_axi_read_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_lc_otp_if_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_lc_otp_if_agent_BFM , fuse_ctrl_lc_otp_if_agent_drv_bfm ); + end + +endmodule + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/hdl_top.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/hdl_top.vinfo new file mode 100644 index 000000000..5bce48845 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/hdl_top.vinfo @@ -0,0 +1,11 @@ +@use $UVMF_PROJECT_DIR/rtl/verilog/verilog_dut.vinfo +@use $UVMF_PROJECT_DIR/tb/parameters/fuse_ctrl_parameters_pkg.vinfo +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_bfm.vinfo +hdl_top.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/hvl_top.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/hvl_top.compile new file mode 100644 index 000000000..040488764 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/hvl_top.compile @@ -0,0 +1,7 @@ +incdir: + - ${uvm_path}/src + - . +needs: + - ../tests/fuse_ctrl_tests_pkg.compile +src: + - hvl_top.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/hvl_top.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/hvl_top.sv new file mode 100644 index 000000000..68e3fc6f6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/hvl_top.sv @@ -0,0 +1,47 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +// +// DESCRIPTION: This module loads the test package and starts the UVM phases. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +module hvl_top; + +import uvm_pkg::*; +import fuse_ctrl_tests_pkg::*; + + // pragma uvmf custom module_item_additional begin + // pragma uvmf custom module_item_additional end + + initial begin + $timeformat(-9,3,"ns",5); + run_test(); + end + +endmodule + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/hvl_top.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/hvl_top.vinfo new file mode 100644 index 000000000..31185e42f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/hvl_top.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_PROJECT_DIR/tb/tests/fuse_ctrl_tests_pkg.vinfo +hvl_top.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/top_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/top_filelist_hdl.f new file mode 100644 index 000000000..1e9dab653 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/top_filelist_hdl.f @@ -0,0 +1,3 @@ +$UVMF_PROJECT_DIR/tb/testbench/hdl_top.sv +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/top_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/top_filelist_hvl.f new file mode 100644 index 000000000..42383ab2d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/testbench/top_filelist_hvl.f @@ -0,0 +1,3 @@ +$UVMF_PROJECT_DIR/tb/testbench/hvl_top.sv +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.compile new file mode 100644 index 000000000..5834f81ca --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.compile @@ -0,0 +1,14 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if.compile + - ../../../../verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile + - ../parameters/fuse_ctrl_parameters_pkg.compile + - ../sequences/fuse_ctrl_sequences_pkg.compile +src: + - fuse_ctrl_tests_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.sv new file mode 100644 index 000000000..8f174a54c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.sv @@ -0,0 +1,78 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This package contains all tests currently written for +// the simulation project. Once compiled, any test can be selected +// from the vsim command line using +UVM_TESTNAME=yourTestNameHere +// +// CONTAINS: +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +package fuse_ctrl_tests_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg::*; + import fuse_ctrl_parameters_pkg::*; + import fuse_ctrl_env_pkg::*; + import fuse_ctrl_sequences_pkg::*; + import fuse_ctrl_rst_pkg::*; + import fuse_ctrl_rst_pkg_hdl::*; + import fuse_ctrl_core_axi_write_if_pkg::*; + import fuse_ctrl_core_axi_write_if_pkg_hdl::*; + import fuse_ctrl_prim_axi_write_if_pkg::*; + import fuse_ctrl_prim_axi_write_if_pkg_hdl::*; + import fuse_ctrl_core_axi_read_if_pkg::*; + import fuse_ctrl_core_axi_read_if_pkg_hdl::*; + import fuse_ctrl_prim_axi_read_if_pkg::*; + import fuse_ctrl_prim_axi_read_if_pkg_hdl::*; + import fuse_ctrl_secreg_axi_read_if_pkg::*; + import fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; + import fuse_ctrl_lc_otp_if_pkg::*; + import fuse_ctrl_lc_otp_if_pkg_hdl::*; + + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + `include "src/test_top.svh" + `include "src/register_test.svh" + `include "src/example_derived_test.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new tests to the src directory + // be sure to add the test file here so that it will be + // compiled as part of the test package. Be sure to place + // the new test after any base tests of the new test. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.vinfo new file mode 100644 index 000000000..195db0c5d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.vinfo @@ -0,0 +1,13 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo +@use $UVMF_PROJECT_DIR/tb/parameters/fuse_ctrl_parameters_pkg.vinfo +@use $UVMF_PROJECT_DIR/tb/sequences/fuse_ctrl_sequences_pkg.vinfo ++incdir+@vinfodir +fuse_ctrl_tests_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/tests/src/example_derived_test.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/tests/src/example_derived_test.svh new file mode 100644 index 000000000..82d6c45ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/tests/src/example_derived_test.svh @@ -0,0 +1,57 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This test extends test_top and makes +// changes to test_top using the UVM factory type_override: +// +// Test scenario: +// This is a template test that can be used to create future tests. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class example_derived_test extends test_top; + + `uvm_component_utils( example_derived_test ); + + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + + virtual function void build_phase(uvm_phase phase); + // The factory override below is an example of how to replace the fuse_ctrl_bench_sequence_base + // sequence with the example_derived_test_sequence. + fuse_ctrl_bench_sequence_base::type_id::set_type_override(example_derived_test_sequence::get_type()); + // Execute the build_phase of test_top AFTER all factory overrides have been created. + super.build_phase(phase); + // pragma uvmf custom configuration_settings_post_randomize begin + // UVMF_CHANGE_ME Test specific configuration values can be set here. + // The configuration structure has already been randomized. + // pragma uvmf custom configuration_settings_post_randomize end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/tests/src/register_test.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/tests/src/register_test.svh new file mode 100644 index 000000000..1be722286 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/tests/src/register_test.svh @@ -0,0 +1,54 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This test extends test_top and makes +// changes to test_top using the UVM factory type_override: +// +// Test scenario: +// This is a template test that can be used to create future tests. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class register_test extends test_top; + + `uvm_component_utils( register_test ); + + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + + virtual function void build_phase(uvm_phase phase); + // The factory override below replaces the fuse_ctrl_bench_sequence_base + // sequence with the register_test_sequence. + fuse_ctrl_bench_sequence_base::type_id::set_type_override(register_test_sequence::get_type()); + // Execute the build_phase of test_top AFTER all factory overrides have been created. + super.build_phase(phase); + endfunction + + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/tests/src/test_top.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/tests/src/test_top.svh new file mode 100644 index 000000000..c9616c5bc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/tb/tests/src/test_top.svh @@ -0,0 +1,102 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// Description: This top level UVM test is the base class for all +// future tests created for this project. +// +// This test class contains: +// Configuration: The top level configuration for the project. +// Environment: The top level environment for the project. +// Top_level_sequence: The top level sequence for the project. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +typedef fuse_ctrl_env_configuration fuse_ctrl_env_configuration_t; +typedef fuse_ctrl_environment fuse_ctrl_environment_t; + +class test_top extends uvmf_test_base #(.CONFIG_T(fuse_ctrl_env_configuration_t), + .ENV_T(fuse_ctrl_environment_t), + .TOP_LEVEL_SEQ_T(fuse_ctrl_bench_sequence_base)); + + `uvm_component_utils( test_top ); + + + + string interface_names[] = { + fuse_ctrl_rst_agent_BFM /* fuse_ctrl_rst_agent [0] */ , + fuse_ctrl_core_axi_write_agent_BFM /* fuse_ctrl_core_axi_write_agent [1] */ , + fuse_ctrl_prim_axi_write_agent_BFM /* fuse_ctrl_prim_axi_write_agent [2] */ , + fuse_ctrl_core_axi_read_agent_BFM /* fuse_ctrl_core_axi_read_agent [3] */ , + fuse_ctrl_prim_axi_read_agent_BFM /* fuse_ctrl_prim_axi_read_agent [4] */ , + fuse_ctrl_secreg_axi_read_agent_BFM /* fuse_ctrl_secreg_axi_read_agent [5] */ , + fuse_ctrl_lc_otp_if_agent_BFM /* fuse_ctrl_lc_otp_if_agent [6] */ +}; + +uvmf_active_passive_t interface_activities[] = { + ACTIVE /* fuse_ctrl_rst_agent [0] */ , + ACTIVE /* fuse_ctrl_core_axi_write_agent [1] */ , + ACTIVE /* fuse_ctrl_prim_axi_write_agent [2] */ , + ACTIVE /* fuse_ctrl_core_axi_read_agent [3] */ , + ACTIVE /* fuse_ctrl_prim_axi_read_agent [4] */ , + ACTIVE /* fuse_ctrl_secreg_axi_read_agent [5] */ , + ACTIVE /* fuse_ctrl_lc_otp_if_agent [6] */ }; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // FUNCTION: new() + // This is the standard systemVerilog constructor. All components are + // constructed in the build_phase to allow factory overriding. + // + function new( string name = "", uvm_component parent = null ); + super.new( name ,parent ); + endfunction + + + + // **************************************************************************** + // FUNCTION: build_phase() + // The construction of the configuration and environment classes is done in + // the build_phase of uvmf_test_base. Once the configuraton and environment + // classes are built then the initialize call is made to perform the + // following: + // Monitor and driver BFM virtual interface handle passing into agents + // Set the active/passive state for each agent + // Once this build_phase completes, the build_phase of the environment is + // executed which builds the agents. + // + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + // pragma uvmf custom configuration_settings_post_randomize begin + // pragma uvmf custom configuration_settings_post_randomize end + configuration.initialize(NA, "uvm_test_top.environment", interface_names, null, interface_activities); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/yaml/fuse_ctrl_bench.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/yaml/fuse_ctrl_bench.yaml new file mode 100644 index 000000000..c75432df9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/project_benches/fuse_ctrl/yaml/fuse_ctrl_bench.yaml @@ -0,0 +1,27 @@ +uvmf: + benches: + fuse_ctrl: + active_passive: + - bfm_name: fuse_ctrl_rst_agent + value: ACTIVE + - bfm_name: fuse_ctrl_core_axi_write_agent + value: ACTIVE + - bfm_name: fuse_ctrl_prim_axi_write_agent + value: ACTIVE + - bfm_name: fuse_ctrl_core_axi_read_agent + value: ACTIVE + - bfm_name: fuse_ctrl_prim_axi_read_agent + value: ACTIVE + - bfm_name: fuse_ctrl_secreg_axi_read_agent + value: ACTIVE + - bfm_name: fuse_ctrl_lc_otp_if_agent + value: ACTIVE + active_passive_default: ACTIVE + clock_half_period: 5ns + clock_phase_offset: 0ns + existing_library_component: 'True' + interface_params: [] + reset_assertion_level: 'False' + reset_duration: 200ns + top_env: fuse_ctrl + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/.project new file mode 100644 index 000000000..ec64afa4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/.project @@ -0,0 +1,32 @@ + + + fuse_ctrl_env_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/.svproject new file mode 100644 index 000000000..bcfe6ac3d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/Makefile new file mode 100644 index 000000000..4cf61d51d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/Makefile @@ -0,0 +1,56 @@ +# fuse_ctrl environment packages source and make target + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +# Include all requisite sub-environment package targets for this bench + +fuse_ctrl_ENV_PKG =\ + $(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv + +COMP_fuse_ctrl_PKG_TGT_0 = q_comp_fuse_ctrl_env_pkg +COMP_fuse_ctrl_PKG_TGT_1 = v_comp_fuse_ctrl_env_pkg +COMP_fuse_ctrl_PKG_TGT = $(COMP_fuse_ctrl_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_env_pkg: $(COMP_fuse_ctrl_PKG_TGT) + +q_comp_fuse_ctrl_env_pkg: + $(HVL_COMP_CMD) +incdir+$(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg $(fuse_ctrl_ENV_PKG) + +v_comp_fuse_ctrl_env_pkg: q_comp_fuse_ctrl_env_pkg + $(VELANALYZE_HVL_CMD) +incdir+$(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg $(fuse_ctrl_ENV_PKG) + + + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_ENV_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_env_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_env_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_env_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_env_pkg += -I$(fuse_ctrl_ENV_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_env_pkg += $(fuse_ctrl_ENV_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_env_pkg += \ + \ + -o .so + +comp_fuse_ctrl_env_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Environment C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_env_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_env_pkg) + @echo "--------------------------------" + @echo "Linking Environment C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_env_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_env_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/compile.do new file mode 100644 index 000000000..05dca66cc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/compile.do @@ -0,0 +1,12 @@ +# Tcl do file for compile of fuse_ctrl interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + + +quietly set cmd [format "vlog -timescale 1ps/1ps +incdir+%s/environment_packages/fuse_ctrl_env_pkg" $env(UVMF_VIP_LIBRARY_HOME)] +quietly set cmd [format "%s %s/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv" $cmd $env(UVMF_VIP_LIBRARY_HOME)] +eval $cmd + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile new file mode 100644 index 000000000..4a35e659d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile @@ -0,0 +1,13 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hvl.compile + +src: + - fuse_ctrl_env_pkg.sv + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv new file mode 100644 index 000000000..cb556f974 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv @@ -0,0 +1,89 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// environment package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_env_pkg; + + import uvm_pkg::*; + `include "uvm_macros.svh" + import uvmf_base_pkg::*; + import fuse_ctrl_rst_pkg::*; + import fuse_ctrl_rst_pkg_hdl::*; + import fuse_ctrl_core_axi_write_if_pkg::*; + import fuse_ctrl_core_axi_write_if_pkg_hdl::*; + import fuse_ctrl_prim_axi_write_if_pkg::*; + import fuse_ctrl_prim_axi_write_if_pkg_hdl::*; + import fuse_ctrl_core_axi_read_if_pkg::*; + import fuse_ctrl_core_axi_read_if_pkg_hdl::*; + import fuse_ctrl_prim_axi_read_if_pkg::*; + import fuse_ctrl_prim_axi_read_if_pkg_hdl::*; + import fuse_ctrl_secreg_axi_read_if_pkg::*; + import fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; + import fuse_ctrl_lc_otp_if_pkg::*; + import fuse_ctrl_lc_otp_if_pkg_hdl::*; + + `uvm_analysis_imp_decl(_fuse_ctrl_rst_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_core_axi_write_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_prim_axi_write_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_core_axi_read_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_prim_axi_read_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_secreg_axi_read_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_lc_otp_if_agent_ae) + `uvm_analysis_imp_decl(_expected_analysis_export) + `uvm_analysis_imp_decl(_actual_analysis_export) + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_env_typedefs.svh" + `include "src/fuse_ctrl_env_configuration.svh" + `include "src/fuse_ctrl_predictor.svh" + `include "src/fuse_ctrl_scoreboard.svh" + `include "src/fuse_ctrl_environment.svh" + `include "src/fuse_ctrl_env_sequence_base.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new environment level sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the environment package. Be sure to place + // the new sequence after any base sequence of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo new file mode 100644 index 000000000..3209ed6ac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo @@ -0,0 +1,10 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.vinfo ++incdir+@vinfodir +fuse_ctrl_env_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F new file mode 100644 index 000000000..b40213df3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F @@ -0,0 +1,12 @@ + +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + +// Sub-Environments + ++incdir+. +./fuse_ctrl_env_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_configuration.svh new file mode 100644 index 000000000..5fc6e65a3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_configuration.svh @@ -0,0 +1,198 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: THis is the configuration for the fuse_ctrl environment. +// it contains configuration classes for each agent. It also contains +// environment level configuration variables. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_env_configuration +extends uvmf_environment_configuration_base; + + `uvm_object_utils( fuse_ctrl_env_configuration ) + + +//Constraints for the configuration variables: + + + covergroup fuse_ctrl_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + + typedef fuse_ctrl_rst_configuration fuse_ctrl_rst_agent_config_t; + rand fuse_ctrl_rst_agent_config_t fuse_ctrl_rst_agent_config; + + typedef fuse_ctrl_core_axi_write_if_configuration fuse_ctrl_core_axi_write_agent_config_t; + rand fuse_ctrl_core_axi_write_agent_config_t fuse_ctrl_core_axi_write_agent_config; + + typedef fuse_ctrl_prim_axi_write_if_configuration fuse_ctrl_prim_axi_write_agent_config_t; + rand fuse_ctrl_prim_axi_write_agent_config_t fuse_ctrl_prim_axi_write_agent_config; + + typedef fuse_ctrl_core_axi_read_if_configuration fuse_ctrl_core_axi_read_agent_config_t; + rand fuse_ctrl_core_axi_read_agent_config_t fuse_ctrl_core_axi_read_agent_config; + + typedef fuse_ctrl_prim_axi_read_if_configuration fuse_ctrl_prim_axi_read_agent_config_t; + rand fuse_ctrl_prim_axi_read_agent_config_t fuse_ctrl_prim_axi_read_agent_config; + + typedef fuse_ctrl_secreg_axi_read_if_configuration fuse_ctrl_secreg_axi_read_agent_config_t; + rand fuse_ctrl_secreg_axi_read_agent_config_t fuse_ctrl_secreg_axi_read_agent_config; + + typedef fuse_ctrl_lc_otp_if_configuration fuse_ctrl_lc_otp_if_agent_config_t; + rand fuse_ctrl_lc_otp_if_agent_config_t fuse_ctrl_lc_otp_if_agent_config; + + + + + typedef uvmf_virtual_sequencer_base #(.CONFIG_T(fuse_ctrl_env_configuration)) fuse_ctrl_vsqr_t; + fuse_ctrl_vsqr_t vsqr; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// This function constructs the configuration object for each agent in the environment. +// + function new( string name = "" ); + super.new( name ); + + + fuse_ctrl_rst_agent_config = fuse_ctrl_rst_agent_config_t::type_id::create("fuse_ctrl_rst_agent_config"); + fuse_ctrl_core_axi_write_agent_config = fuse_ctrl_core_axi_write_agent_config_t::type_id::create("fuse_ctrl_core_axi_write_agent_config"); + fuse_ctrl_prim_axi_write_agent_config = fuse_ctrl_prim_axi_write_agent_config_t::type_id::create("fuse_ctrl_prim_axi_write_agent_config"); + fuse_ctrl_core_axi_read_agent_config = fuse_ctrl_core_axi_read_agent_config_t::type_id::create("fuse_ctrl_core_axi_read_agent_config"); + fuse_ctrl_prim_axi_read_agent_config = fuse_ctrl_prim_axi_read_agent_config_t::type_id::create("fuse_ctrl_prim_axi_read_agent_config"); + fuse_ctrl_secreg_axi_read_agent_config = fuse_ctrl_secreg_axi_read_agent_config_t::type_id::create("fuse_ctrl_secreg_axi_read_agent_config"); + fuse_ctrl_lc_otp_if_agent_config = fuse_ctrl_lc_otp_if_agent_config_t::type_id::create("fuse_ctrl_lc_otp_if_agent_config"); + + + fuse_ctrl_configuration_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that configuration variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + + // pragma uvmf custom new begin + // pragma uvmf custom new end + endfunction + +// **************************************************************************** +// FUNCTION : set_vsqr() +// This function is used to assign the vsqr handle. + virtual function void set_vsqr( fuse_ctrl_vsqr_t vsqr); + this.vsqr = vsqr; + endfunction : set_vsqr + +// **************************************************************************** +// FUNCTION: post_randomize() +// This function is automatically called after the randomize() function +// is executed. +// + function void post_randomize(); + super.post_randomize(); + // pragma uvmf custom post_randomize begin + // pragma uvmf custom post_randomize end + endfunction + +// **************************************************************************** +// FUNCTION: convert2string() +// This function converts all variables in this class to a single string for +// logfile reporting. This function concatenates the convert2string result for +// each agent configuration in this configuration class. +// + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + return { + + "\n", fuse_ctrl_rst_agent_config.convert2string, + "\n", fuse_ctrl_core_axi_write_agent_config.convert2string, + "\n", fuse_ctrl_prim_axi_write_agent_config.convert2string, + "\n", fuse_ctrl_core_axi_read_agent_config.convert2string, + "\n", fuse_ctrl_prim_axi_read_agent_config.convert2string, + "\n", fuse_ctrl_secreg_axi_read_agent_config.convert2string, + "\n", fuse_ctrl_lc_otp_if_agent_config.convert2string + + + }; + // pragma uvmf custom convert2string end + endfunction +// **************************************************************************** +// FUNCTION: initialize(); +// This function configures each interface agents configuration class. The +// sim level determines the active/passive state of the agent. The environment_path +// identifies the hierarchy down to and including the instantiation name of the +// environment for this configuration class. Each instance of the environment +// has its own configuration class. The string interface names are used by +// the agent configurations to identify the virtual interface handle to pull from +// the uvm_config_db. +// + function void initialize(uvmf_sim_level_t sim_level, + string environment_path, + string interface_names[], + uvm_reg_block register_model = null, + uvmf_active_passive_t interface_activity[] = {} + ); + + super.initialize(sim_level, environment_path, interface_names, register_model, interface_activity); + + + + // Interface initialization for local agents + fuse_ctrl_rst_agent_config.initialize( interface_activity[0], {environment_path,".fuse_ctrl_rst_agent"}, interface_names[0]); + fuse_ctrl_rst_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_rst_agent_config.has_coverage = 1; + fuse_ctrl_core_axi_write_agent_config.initialize( interface_activity[1], {environment_path,".fuse_ctrl_core_axi_write_agent"}, interface_names[1]); + fuse_ctrl_core_axi_write_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_core_axi_write_agent_config.has_coverage = 1; + fuse_ctrl_prim_axi_write_agent_config.initialize( interface_activity[2], {environment_path,".fuse_ctrl_prim_axi_write_agent"}, interface_names[2]); + fuse_ctrl_prim_axi_write_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_prim_axi_write_agent_config.has_coverage = 1; + fuse_ctrl_core_axi_read_agent_config.initialize( interface_activity[3], {environment_path,".fuse_ctrl_core_axi_read_agent"}, interface_names[3]); + fuse_ctrl_core_axi_read_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_core_axi_read_agent_config.has_coverage = 1; + fuse_ctrl_prim_axi_read_agent_config.initialize( interface_activity[4], {environment_path,".fuse_ctrl_prim_axi_read_agent"}, interface_names[4]); + fuse_ctrl_prim_axi_read_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_prim_axi_read_agent_config.has_coverage = 1; + fuse_ctrl_secreg_axi_read_agent_config.initialize( interface_activity[5], {environment_path,".fuse_ctrl_secreg_axi_read_agent"}, interface_names[5]); + fuse_ctrl_secreg_axi_read_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_secreg_axi_read_agent_config.has_coverage = 1; + fuse_ctrl_lc_otp_if_agent_config.initialize( interface_activity[6], {environment_path,".fuse_ctrl_lc_otp_if_agent"}, interface_names[6]); + fuse_ctrl_lc_otp_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_lc_otp_if_agent_config.has_coverage = 1; + + + + + + // pragma uvmf custom initialize begin + // pragma uvmf custom initialize end + + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_sequence_base.svh new file mode 100644 index 000000000..240ae942d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_sequence_base.svh @@ -0,0 +1,123 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains environment level sequences that will +// be reused from block to top level simulations. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_env_sequence_base #( + type CONFIG_T + ) extends uvmf_virtual_sequence_base #(.CONFIG_T(CONFIG_T)); + + + `uvm_object_param_utils( fuse_ctrl_env_sequence_base #( + CONFIG_T + ) ); + + +// This fuse_ctrl_env_sequence_base contains a handle to a fuse_ctrl_env_configuration object +// named configuration. This configuration variable contains a handle to each +// sequencer within each agent within this environment and any sub-environments. +// The configuration object handle is automatically assigned in the pre_body in the +// base class of this sequence. The configuration handle is retrieved from the +// virtual sequencer that this sequence is started on. +// Available sequencer handles within the environment configuration: + + // Initiator agent sequencers in fuse_ctrl_environment: + // configuration.fuse_ctrl_rst_agent_config.sequencer + // configuration.fuse_ctrl_core_axi_write_agent_config.sequencer + // configuration.fuse_ctrl_prim_axi_write_agent_config.sequencer + // configuration.fuse_ctrl_core_axi_read_agent_config.sequencer + // configuration.fuse_ctrl_prim_axi_read_agent_config.sequencer + // configuration.fuse_ctrl_secreg_axi_read_agent_config.sequencer + // configuration.fuse_ctrl_lc_otp_if_agent_config.sequencer + + // Responder agent sequencers in fuse_ctrl_environment: + + + typedef fuse_ctrl_rst_random_sequence fuse_ctrl_rst_agent_random_sequence_t; + fuse_ctrl_rst_agent_random_sequence_t fuse_ctrl_rst_agent_rand_seq; + + typedef fuse_ctrl_core_axi_write_if_random_sequence fuse_ctrl_core_axi_write_agent_random_sequence_t; + fuse_ctrl_core_axi_write_agent_random_sequence_t fuse_ctrl_core_axi_write_agent_rand_seq; + + typedef fuse_ctrl_prim_axi_write_if_random_sequence fuse_ctrl_prim_axi_write_agent_random_sequence_t; + fuse_ctrl_prim_axi_write_agent_random_sequence_t fuse_ctrl_prim_axi_write_agent_rand_seq; + + typedef fuse_ctrl_core_axi_read_if_random_sequence fuse_ctrl_core_axi_read_agent_random_sequence_t; + fuse_ctrl_core_axi_read_agent_random_sequence_t fuse_ctrl_core_axi_read_agent_rand_seq; + + typedef fuse_ctrl_prim_axi_read_if_random_sequence fuse_ctrl_prim_axi_read_agent_random_sequence_t; + fuse_ctrl_prim_axi_read_agent_random_sequence_t fuse_ctrl_prim_axi_read_agent_rand_seq; + + typedef fuse_ctrl_secreg_axi_read_if_random_sequence fuse_ctrl_secreg_axi_read_agent_random_sequence_t; + fuse_ctrl_secreg_axi_read_agent_random_sequence_t fuse_ctrl_secreg_axi_read_agent_rand_seq; + + typedef fuse_ctrl_lc_otp_if_random_sequence fuse_ctrl_lc_otp_if_agent_random_sequence_t; + fuse_ctrl_lc_otp_if_agent_random_sequence_t fuse_ctrl_lc_otp_if_agent_rand_seq; + + + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "" ); + super.new(name); + fuse_ctrl_rst_agent_rand_seq = fuse_ctrl_rst_agent_random_sequence_t::type_id::create("fuse_ctrl_rst_agent_rand_seq"); + fuse_ctrl_core_axi_write_agent_rand_seq = fuse_ctrl_core_axi_write_agent_random_sequence_t::type_id::create("fuse_ctrl_core_axi_write_agent_rand_seq"); + fuse_ctrl_prim_axi_write_agent_rand_seq = fuse_ctrl_prim_axi_write_agent_random_sequence_t::type_id::create("fuse_ctrl_prim_axi_write_agent_rand_seq"); + fuse_ctrl_core_axi_read_agent_rand_seq = fuse_ctrl_core_axi_read_agent_random_sequence_t::type_id::create("fuse_ctrl_core_axi_read_agent_rand_seq"); + fuse_ctrl_prim_axi_read_agent_rand_seq = fuse_ctrl_prim_axi_read_agent_random_sequence_t::type_id::create("fuse_ctrl_prim_axi_read_agent_rand_seq"); + fuse_ctrl_secreg_axi_read_agent_rand_seq = fuse_ctrl_secreg_axi_read_agent_random_sequence_t::type_id::create("fuse_ctrl_secreg_axi_read_agent_rand_seq"); + fuse_ctrl_lc_otp_if_agent_rand_seq = fuse_ctrl_lc_otp_if_agent_random_sequence_t::type_id::create("fuse_ctrl_lc_otp_if_agent_rand_seq"); + + + endfunction + + virtual task body(); + + if ( configuration.fuse_ctrl_rst_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_rst_agent_rand_seq.start(configuration.fuse_ctrl_rst_agent_config.sequencer); + if ( configuration.fuse_ctrl_core_axi_write_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_core_axi_write_agent_rand_seq.start(configuration.fuse_ctrl_core_axi_write_agent_config.sequencer); + if ( configuration.fuse_ctrl_prim_axi_write_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_prim_axi_write_agent_rand_seq.start(configuration.fuse_ctrl_prim_axi_write_agent_config.sequencer); + if ( configuration.fuse_ctrl_core_axi_read_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_core_axi_read_agent_rand_seq.start(configuration.fuse_ctrl_core_axi_read_agent_config.sequencer); + if ( configuration.fuse_ctrl_prim_axi_read_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_prim_axi_read_agent_rand_seq.start(configuration.fuse_ctrl_prim_axi_read_agent_config.sequencer); + if ( configuration.fuse_ctrl_secreg_axi_read_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_secreg_axi_read_agent_rand_seq.start(configuration.fuse_ctrl_secreg_axi_read_agent_config.sequencer); + if ( configuration.fuse_ctrl_lc_otp_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_lc_otp_if_agent_rand_seq.start(configuration.fuse_ctrl_lc_otp_if_agent_config.sequencer); + + + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_typedefs.svh new file mode 100644 index 000000000..79d1b10a2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the environment package. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + // pragma uvmf custom additional begin + // pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_environment.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_environment.svh new file mode 100644 index 000000000..760174bcc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_environment.svh @@ -0,0 +1,165 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This environment contains all agents, predictors and +// scoreboards required for the block level design. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class fuse_ctrl_environment extends uvmf_environment_base #( + .CONFIG_T( fuse_ctrl_env_configuration + )); + `uvm_component_utils( fuse_ctrl_environment ) + + + + + + typedef fuse_ctrl_rst_agent fuse_ctrl_rst_agent_t; + fuse_ctrl_rst_agent_t fuse_ctrl_rst_agent; + + typedef fuse_ctrl_core_axi_write_if_agent fuse_ctrl_core_axi_write_agent_t; + fuse_ctrl_core_axi_write_agent_t fuse_ctrl_core_axi_write_agent; + + typedef fuse_ctrl_prim_axi_write_if_agent fuse_ctrl_prim_axi_write_agent_t; + fuse_ctrl_prim_axi_write_agent_t fuse_ctrl_prim_axi_write_agent; + + typedef fuse_ctrl_core_axi_read_if_agent fuse_ctrl_core_axi_read_agent_t; + fuse_ctrl_core_axi_read_agent_t fuse_ctrl_core_axi_read_agent; + + typedef fuse_ctrl_prim_axi_read_if_agent fuse_ctrl_prim_axi_read_agent_t; + fuse_ctrl_prim_axi_read_agent_t fuse_ctrl_prim_axi_read_agent; + + typedef fuse_ctrl_secreg_axi_read_if_agent fuse_ctrl_secreg_axi_read_agent_t; + fuse_ctrl_secreg_axi_read_agent_t fuse_ctrl_secreg_axi_read_agent; + + typedef fuse_ctrl_lc_otp_if_agent fuse_ctrl_lc_otp_if_agent_t; + fuse_ctrl_lc_otp_if_agent_t fuse_ctrl_lc_otp_if_agent; + + + + + typedef fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T) + ) + fuse_ctrl_pred_t; + fuse_ctrl_pred_t fuse_ctrl_pred; + typedef fuse_ctrl_scoreboard #( + .CONFIG_T(CONFIG_T) + ) + fuse_ctrl_sb_t; + fuse_ctrl_sb_t fuse_ctrl_sb; + + + + + typedef uvmf_virtual_sequencer_base #(.CONFIG_T(fuse_ctrl_env_configuration)) fuse_ctrl_vsqr_t; + fuse_ctrl_vsqr_t vsqr; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// FUNCTION: build_phase() +// This function builds all components within this environment. +// + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + fuse_ctrl_rst_agent = fuse_ctrl_rst_agent_t::type_id::create("fuse_ctrl_rst_agent",this); + fuse_ctrl_rst_agent.set_config(configuration.fuse_ctrl_rst_agent_config); + fuse_ctrl_core_axi_write_agent = fuse_ctrl_core_axi_write_agent_t::type_id::create("fuse_ctrl_core_axi_write_agent",this); + fuse_ctrl_core_axi_write_agent.set_config(configuration.fuse_ctrl_core_axi_write_agent_config); + fuse_ctrl_prim_axi_write_agent = fuse_ctrl_prim_axi_write_agent_t::type_id::create("fuse_ctrl_prim_axi_write_agent",this); + fuse_ctrl_prim_axi_write_agent.set_config(configuration.fuse_ctrl_prim_axi_write_agent_config); + fuse_ctrl_core_axi_read_agent = fuse_ctrl_core_axi_read_agent_t::type_id::create("fuse_ctrl_core_axi_read_agent",this); + fuse_ctrl_core_axi_read_agent.set_config(configuration.fuse_ctrl_core_axi_read_agent_config); + fuse_ctrl_prim_axi_read_agent = fuse_ctrl_prim_axi_read_agent_t::type_id::create("fuse_ctrl_prim_axi_read_agent",this); + fuse_ctrl_prim_axi_read_agent.set_config(configuration.fuse_ctrl_prim_axi_read_agent_config); + fuse_ctrl_secreg_axi_read_agent = fuse_ctrl_secreg_axi_read_agent_t::type_id::create("fuse_ctrl_secreg_axi_read_agent",this); + fuse_ctrl_secreg_axi_read_agent.set_config(configuration.fuse_ctrl_secreg_axi_read_agent_config); + fuse_ctrl_lc_otp_if_agent = fuse_ctrl_lc_otp_if_agent_t::type_id::create("fuse_ctrl_lc_otp_if_agent",this); + fuse_ctrl_lc_otp_if_agent.set_config(configuration.fuse_ctrl_lc_otp_if_agent_config); + fuse_ctrl_pred = fuse_ctrl_pred_t::type_id::create("fuse_ctrl_pred",this); + fuse_ctrl_pred.configuration = configuration; + fuse_ctrl_sb = fuse_ctrl_sb_t::type_id::create("fuse_ctrl_sb",this); + fuse_ctrl_sb.configuration = configuration; + + vsqr = fuse_ctrl_vsqr_t::type_id::create("vsqr", this); + vsqr.set_config(configuration); + configuration.set_vsqr(vsqr); + + // pragma uvmf custom build_phase begin + // pragma uvmf custom build_phase end + endfunction + +// **************************************************************************** +// FUNCTION: connect_phase() +// This function makes all connections within this environment. Connections +// typically inclue agent to predictor, predictor to scoreboard and scoreboard +// to agent. +// + virtual function void connect_phase(uvm_phase phase); +// pragma uvmf custom connect_phase_pre_super begin +// pragma uvmf custom connect_phase_pre_super end + super.connect_phase(phase); + fuse_ctrl_rst_agent.monitored_ap.connect(fuse_ctrl_pred.fuse_ctrl_rst_agent_ae); + fuse_ctrl_pred.fuse_ctrl_sb_ap.connect(fuse_ctrl_sb.expected_analysis_export); + fuse_ctrl_core_axi_read_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_prim_axi_read_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_secreg_axi_read_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_lc_otp_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + // pragma uvmf custom reg_model_connect_phase begin + // pragma uvmf custom reg_model_connect_phase end + endfunction + +// **************************************************************************** +// FUNCTION: end_of_simulation_phase() +// This function is executed just prior to executing run_phase. This function +// was added to the environment to sample environment configuration settings +// just before the simulation exits time 0. The configuration structure is +// randomized in the build phase before the environment structure is constructed. +// Configuration variables can be customized after randomization in the build_phase +// of the extended test. +// If a sequence modifies values in the configuration structure then the sequence is +// responsible for sampling the covergroup in the configuration if required. +// + virtual function void start_of_simulation_phase(uvm_phase phase); + configuration.fuse_ctrl_configuration_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_predictor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_predictor.svh new file mode 100644 index 000000000..0250853d4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_predictor.svh @@ -0,0 +1,323 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +// +// DESCRIPTION: This analysis component contains analysis_exports for receiving +// data and analysis_ports for sending data. +// +// This analysis component has the following analysis_exports that receive the +// listed transaction type. +// +// fuse_ctrl_rst_agent_ae receives transactions of type fuse_ctrl_rst_transaction +// fuse_ctrl_core_axi_write_agent_ae receives transactions of type fuse_ctrl_write_transaction +// fuse_ctrl_prim_axi_write_agent_ae receives transactions of type fuse_ctrl_write_transaction +// fuse_ctrl_core_axi_read_agent_ae receives transactions of type fuse_ctrl_read_transaction +// fuse_ctrl_prim_axi_read_agent_ae receives transactions of type fuse_ctrl_read_transaction +// fuse_ctrl_secreg_axi_read_agent_ae receives transactions of type fuse_ctrl_read_transaction +// fuse_ctrl_lc_otp_if_agent_ae receives transactions of type fuse_ctrl_read_transaction +// +// This analysis component has the following analysis_ports that can broadcast +// the listed transaction type. +// +// fuse_ctrl_sb_ap broadcasts transactions of type fuse_ctrl_read_transaction +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class fuse_ctrl_predictor #( + type CONFIG_T, + type BASE_T = uvm_component + ) + extends BASE_T; + + // Factory registration of this class + `uvm_component_param_utils( fuse_ctrl_predictor #( + CONFIG_T, + BASE_T + ) +) + + + // Instantiate a handle to the configuration of the environment in which this component resides + CONFIG_T configuration; + + + // Instantiate the analysis exports + uvm_analysis_imp_fuse_ctrl_rst_agent_ae #(fuse_ctrl_rst_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_rst_agent_ae; + uvm_analysis_imp_fuse_ctrl_core_axi_write_agent_ae #(fuse_ctrl_write_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_core_axi_write_agent_ae; + uvm_analysis_imp_fuse_ctrl_prim_axi_write_agent_ae #(fuse_ctrl_write_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_prim_axi_write_agent_ae; + uvm_analysis_imp_fuse_ctrl_core_axi_read_agent_ae #(fuse_ctrl_read_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_core_axi_read_agent_ae; + uvm_analysis_imp_fuse_ctrl_prim_axi_read_agent_ae #(fuse_ctrl_read_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_prim_axi_read_agent_ae; + uvm_analysis_imp_fuse_ctrl_secreg_axi_read_agent_ae #(fuse_ctrl_read_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_secreg_axi_read_agent_ae; + uvm_analysis_imp_fuse_ctrl_lc_otp_if_agent_ae #(fuse_ctrl_read_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_lc_otp_if_agent_ae; + + + // Instantiate the analysis ports + uvm_analysis_port #(fuse_ctrl_read_transaction) fuse_ctrl_sb_ap; + + + // Transaction variable for predicted values to be sent out fuse_ctrl_sb_ap + // Once a transaction is sent through an analysis_port, another transaction should + // be constructed for the next predicted transaction. + typedef fuse_ctrl_read_transaction fuse_ctrl_sb_ap_output_transaction_t; + fuse_ctrl_sb_ap_output_transaction_t fuse_ctrl_sb_ap_output_transaction; + // Code for sending output transaction out through fuse_ctrl_sb_ap + // fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + + // Define transaction handles for debug visibility + fuse_ctrl_rst_transaction fuse_ctrl_rst_agent_ae_debug; + fuse_ctrl_write_transaction fuse_ctrl_core_axi_write_agent_ae_debug; + fuse_ctrl_write_transaction fuse_ctrl_prim_axi_write_agent_ae_debug; + fuse_ctrl_read_transaction fuse_ctrl_core_axi_read_agent_ae_debug; + fuse_ctrl_read_transaction fuse_ctrl_prim_axi_read_agent_ae_debug; + fuse_ctrl_read_transaction fuse_ctrl_secreg_axi_read_agent_ae_debug; + fuse_ctrl_read_transaction fuse_ctrl_lc_otp_if_agent_ae_debug; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // FUNCTION: new + function new(string name, uvm_component parent); + super.new(name,parent); + `uvm_warning("PREDICTOR_REVIEW", "This predictor has been created either through generation or re-generation with merging. Remove this warning after the predictor has been reviewed.") + // pragma uvmf custom new begin + // pragma uvmf custom new end + endfunction + + // FUNCTION: build_phase + virtual function void build_phase (uvm_phase phase); + + fuse_ctrl_rst_agent_ae = new("fuse_ctrl_rst_agent_ae", this); + fuse_ctrl_core_axi_write_agent_ae = new("fuse_ctrl_core_axi_write_agent_ae", this); + fuse_ctrl_prim_axi_write_agent_ae = new("fuse_ctrl_prim_axi_write_agent_ae", this); + fuse_ctrl_core_axi_read_agent_ae = new("fuse_ctrl_core_axi_read_agent_ae", this); + fuse_ctrl_prim_axi_read_agent_ae = new("fuse_ctrl_prim_axi_read_agent_ae", this); + fuse_ctrl_secreg_axi_read_agent_ae = new("fuse_ctrl_secreg_axi_read_agent_ae", this); + fuse_ctrl_lc_otp_if_agent_ae = new("fuse_ctrl_lc_otp_if_agent_ae", this); + fuse_ctrl_sb_ap =new("fuse_ctrl_sb_ap", this ); + // pragma uvmf custom build_phase begin + // pragma uvmf custom build_phase end + endfunction + + // FUNCTION: write_fuse_ctrl_rst_agent_ae + // Transactions received through fuse_ctrl_rst_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_rst_agent_ae(fuse_ctrl_rst_transaction t); + // pragma uvmf custom fuse_ctrl_rst_agent_ae_predictor begin + fuse_ctrl_rst_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_rst_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_rst_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_rst_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_core_axi_write_agent_ae + // Transactions received through fuse_ctrl_core_axi_write_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_core_axi_write_agent_ae(fuse_ctrl_write_transaction t); + // pragma uvmf custom fuse_ctrl_core_axi_write_agent_ae_predictor begin + fuse_ctrl_core_axi_write_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_core_axi_write_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_core_axi_write_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_core_axi_write_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_prim_axi_write_agent_ae + // Transactions received through fuse_ctrl_prim_axi_write_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_prim_axi_write_agent_ae(fuse_ctrl_write_transaction t); + // pragma uvmf custom fuse_ctrl_prim_axi_write_agent_ae_predictor begin + fuse_ctrl_prim_axi_write_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_prim_axi_write_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_prim_axi_write_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_prim_axi_write_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_core_axi_read_agent_ae + // Transactions received through fuse_ctrl_core_axi_read_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_core_axi_read_agent_ae(fuse_ctrl_read_transaction t); + // pragma uvmf custom fuse_ctrl_core_axi_read_agent_ae_predictor begin + fuse_ctrl_core_axi_read_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_core_axi_read_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_core_axi_read_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_core_axi_read_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_prim_axi_read_agent_ae + // Transactions received through fuse_ctrl_prim_axi_read_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_prim_axi_read_agent_ae(fuse_ctrl_read_transaction t); + // pragma uvmf custom fuse_ctrl_prim_axi_read_agent_ae_predictor begin + fuse_ctrl_prim_axi_read_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_prim_axi_read_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_prim_axi_read_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_prim_axi_read_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_secreg_axi_read_agent_ae + // Transactions received through fuse_ctrl_secreg_axi_read_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_secreg_axi_read_agent_ae(fuse_ctrl_read_transaction t); + // pragma uvmf custom fuse_ctrl_secreg_axi_read_agent_ae_predictor begin + fuse_ctrl_secreg_axi_read_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_secreg_axi_read_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_secreg_axi_read_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_secreg_axi_read_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_lc_otp_if_agent_ae + // Transactions received through fuse_ctrl_lc_otp_if_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_lc_otp_if_agent_ae(fuse_ctrl_read_transaction t); + // pragma uvmf custom fuse_ctrl_lc_otp_if_agent_ae_predictor begin + fuse_ctrl_lc_otp_if_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_lc_otp_if_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_lc_otp_if_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_lc_otp_if_agent_ae_predictor end + endfunction + + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_scoreboard.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_scoreboard.svh new file mode 100644 index 000000000..319d51fae --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_scoreboard.svh @@ -0,0 +1,149 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This analysis component contains analysis_exports for receiving +// data and analysis_ports for sending data. +// +// This analysis component has the following analysis_exports that receive the +// listed transaction type. +// +// expected_analysis_export receives transactions of type fuse_ctrl_read_transaction +// actual_analysis_export receives transactions of type fuse_ctrl_read_transaction +// +// This analysis component has the following analysis_ports that can broadcast +// the listed transaction type. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +class fuse_ctrl_scoreboard #( + type CONFIG_T, + type BASE_T = uvm_component + ) + extends BASE_T; + + // Factory registration of this class + `uvm_component_param_utils( fuse_ctrl_scoreboard #( + CONFIG_T, + BASE_T + ) +) + + + // Instantiate a handle to the configuration of the environment in which this component resides + CONFIG_T configuration; + + + // Instantiate the analysis exports + uvm_analysis_imp_expected_analysis_export #(fuse_ctrl_read_transaction, fuse_ctrl_scoreboard #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) expected_analysis_export; + uvm_analysis_imp_actual_analysis_export #(fuse_ctrl_read_transaction, fuse_ctrl_scoreboard #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) actual_analysis_export; + + + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // FUNCTION: new + function new(string name, uvm_component parent); + super.new(name,parent); + // pragma uvmf custom new begin + // pragma uvmf custom new end + endfunction + + // FUNCTION: build_phase + virtual function void build_phase (uvm_phase phase); + + expected_analysis_export = new("expected_analysis_export", this); + actual_analysis_export = new("actual_analysis_export", this); + // pragma uvmf custom build_phase begin + // pragma uvmf custom build_phase end + endfunction + + // FUNCTION: write_expected_analysis_export + // Transactions received through expected_analysis_export initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_expected_analysis_export(fuse_ctrl_read_transaction t); + // pragma uvmf custom expected_analysis_export_scoreboard begin + `uvm_info("PRED", "Transaction Received through expected_analysis_export", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // UVMF_CHANGE_ME: Implement custom scoreboard here. + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "UVMF_CHANGE_ME: The fuse_ctrl_scoreboard::write_expected_analysis_export function needs to be completed with custom scoreboard functionality",UVM_NONE) + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "******************************************************************************************************",UVM_NONE) + + // pragma uvmf custom expected_analysis_export_scoreboard end + endfunction + + // FUNCTION: write_actual_analysis_export + // Transactions received through actual_analysis_export initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_actual_analysis_export(fuse_ctrl_read_transaction t); + // pragma uvmf custom actual_analysis_export_scoreboard begin + `uvm_info("PRED", "Transaction Received through actual_analysis_export", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // UVMF_CHANGE_ME: Implement custom scoreboard here. + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "UVMF_CHANGE_ME: The fuse_ctrl_scoreboard::write_actual_analysis_export function needs to be completed with custom scoreboard functionality",UVM_NONE) + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "******************************************************************************************************",UVM_NONE) + + // pragma uvmf custom actual_analysis_export_scoreboard end + endfunction + + + + // FUNCTION: extract_phase + virtual function void extract_phase(uvm_phase phase); +// pragma uvmf custom extract_phase begin + super.extract_phase(phase); +// pragma uvmf custom extract_phase end + endfunction + + // FUNCTION: check_phase + virtual function void check_phase(uvm_phase phase); +// pragma uvmf custom check_phase begin + super.check_phase(phase); +// pragma uvmf custom check_phase end + endfunction + + // FUNCTION: report_phase + virtual function void report_phase(uvm_phase phase); +// pragma uvmf custom report_phase begin + super.report_phase(phase); +// pragma uvmf custom report_phase end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_environment.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_environment.yaml new file mode 100644 index 000000000..dabb12970 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_environment.yaml @@ -0,0 +1,62 @@ +uvmf: + environments: + fuse_ctrl: + agents: + - initiator_responder: INITIATOR + name: fuse_ctrl_rst_agent + type: fuse_ctrl_rst + - initiator_responder: INITIATOR + name: fuse_ctrl_core_axi_write_agent + type: fuse_ctrl_core_axi_write_if + - initiator_responder: INITIATOR + name: fuse_ctrl_prim_axi_write_agent + type: fuse_ctrl_prim_axi_write_if + - initiator_responder: INITIATOR + name: fuse_ctrl_core_axi_read_agent + type: fuse_ctrl_core_axi_read_if + - initiator_responder: INITIATOR + name: fuse_ctrl_prim_axi_read_agent + type: fuse_ctrl_prim_axi_read_if + - initiator_responder: INITIATOR + name: fuse_ctrl_secreg_axi_read_agent + type: fuse_ctrl_secreg_axi_read_if + - initiator_responder: INITIATOR + name: fuse_ctrl_lc_otp_if_agent + type: fuse_ctrl_lc_otp_if + analysis_components: + - name: fuse_ctrl_pred + parameters: [] + type: fuse_ctrl_predictor + - name: fuse_ctrl_sb + parameters: [] + type: fuse_ctrl_scoreboard + analysis_exports: [] + analysis_ports: [] + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + hvl_pkg_parameters: [] + non_uvmf_components: [] + parameters: [] + qvip_memory_agents: [] + scoreboards: [] + subenvs: [] + tlm_connections: + - driver: fuse_ctrl_rst_agent.monitored_ap + receiver: fuse_ctrl_pred.fuse_ctrl_rst_agent_ae + validate: 'True' + - driver: fuse_ctrl_pred.fuse_ctrl_sb_ap + receiver: fuse_ctrl_sb.expected_analysis_export + validate: 'True' + - driver: fuse_ctrl_core_axi_read_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_prim_axi_read_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_secreg_axi_read_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_lc_otp_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_predictor.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_predictor.yaml new file mode 100644 index 000000000..7832404a7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_predictor.yaml @@ -0,0 +1,23 @@ +uvmf: + util_components: + fuse_ctrl_predictor: + analysis_exports: + - name: fuse_ctrl_rst_agent_ae + type: fuse_ctrl_rst_transaction + - name: fuse_ctrl_core_axi_write_agent_ae + type: fuse_ctrl_write_transaction + - name: fuse_ctrl_prim_axi_write_agent_ae + type: fuse_ctrl_write_transaction + - name: fuse_ctrl_core_axi_read_agent_ae + type: fuse_ctrl_read_transaction + - name: fuse_ctrl_prim_axi_read_agent_ae + type: fuse_ctrl_read_transaction + - name: fuse_ctrl_secreg_axi_read_agent_ae + type: fuse_ctrl_read_transaction + - name: fuse_ctrl_lc_otp_if_agent_ae + type: fuse_ctrl_read_transaction + analysis_ports: + - name: fuse_ctrl_sb_ap + type: fuse_ctrl_read_transaction + existing_library_component: 'True' + type: predictor diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_scoreboard.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_scoreboard.yaml new file mode 100644 index 000000000..05167c417 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_scoreboard.yaml @@ -0,0 +1,10 @@ +uvmf: + util_components: + fuse_ctrl_scoreboard: + analysis_exports: + - name: expected_analysis_export + type: fuse_ctrl_read_transaction + - name: actual_analysis_export + type: fuse_ctrl_read_transaction + existing_library_component: 'True' + type: scoreboard diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/.project new file mode 100644 index 000000000..f5be90c8f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + core_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..5646c3df8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..9974230a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# core_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +core_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f + +core_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f + +core_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f + +COMP_core_axi_read_if_PKG_TGT_0 = q_comp_core_axi_read_if_pkg +COMP_core_axi_read_if_PKG_TGT_1 = v_comp_core_axi_read_if_pkg +COMP_core_axi_read_if_PKG_TGT = $(COMP_core_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_core_axi_read_if_pkg: $(COMP_core_axi_read_if_PKG_TGT) + +q_comp_core_axi_read_if_pkg: + $(HDL_COMP_CMD) $(core_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_read_if_PKG) + $(HDL_COMP_CMD) $(core_axi_read_if_PKG_XRTL) + +v_comp_core_axi_read_if_pkg: + $(HVL_COMP_CMD) $(core_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_read_if_PKG) + $(VELANALYZE_CMD) $(core_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(core_axi_read_if_PKG) + $(HDL_COMP_CMD) $(core_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export core_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_core_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_core_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_core_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_core_axi_read_if_pkg += -I$(core_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_core_axi_read_if_pkg += $(core_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_core_axi_read_if_pkg += \ + \ + -o .so + +comp_core_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_core_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_core_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_core_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_core_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..bfe89a8e0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of core_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if.compile new file mode 100644 index 000000000..5aa3fb538 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - core_axi_read_if_hvl.compile + - core_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..58385ae7f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use core_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/core_axi_read_if_if.sv +src/core_axi_read_if_driver_bfm.sv +src/core_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_common.compile new file mode 100644 index 000000000..9374bee40 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..6dfc76a5f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..c3606bba2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..6c5bc4baa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hdl.compile new file mode 100644 index 000000000..6665d30a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./core_axi_read_if_common.compile +incdir: + - . +src: + - src/core_axi_read_if_if.sv + - src/core_axi_read_if_monitor_bfm.sv + - src/core_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hvl.compile new file mode 100644 index 000000000..ffce38e1b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./core_axi_read_if_common.compile +incdir: + - . +src: + - core_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.sv new file mode 100644 index 000000000..5be093439 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import core_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/core_axi_read_if_macros.svh" + + export core_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/core_axi_read_if_typedefs.svh" + `include "src/core_axi_read_if_transaction.svh" + + `include "src/core_axi_read_if_configuration.svh" + `include "src/core_axi_read_if_driver.svh" + `include "src/core_axi_read_if_monitor.svh" + + `include "src/core_axi_read_if_transaction_coverage.svh" + `include "src/core_axi_read_if_sequence_base.svh" + `include "src/core_axi_read_if_random_sequence.svh" + + `include "src/core_axi_read_if_responder_sequence.svh" + `include "src/core_axi_read_if2reg_adapter.svh" + + `include "src/core_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..54878b149 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use core_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +core_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..738469493 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/core_axi_read_if_typedefs_hdl.svh" + `include "src/core_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..289cfb15d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..25ac277ab --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..872ddc7d8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the core_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( core_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "core_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : core_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_agent.svh new file mode 100644 index 000000000..74e70677a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(core_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(core_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(core_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( core_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_configuration.svh new file mode 100644 index 000000000..96293f076 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the core_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual core_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual core_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup core_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in core_axi_read_if_macros.svh + `core_axi_read_if_CONFIGURATION_STRUCT + core_axi_read_if_configuration_s core_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a core_axi_read_if_configuration_s + // structure. The function returns the handle to the core_axi_read_if_configuration_struct. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + core_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + core_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + core_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + core_axi_read_if_configuration_cg.set_inst_name($sformatf("core_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver.svh new file mode 100644 index 000000000..2da1ca1ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual core_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( core_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in core_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm +// to communicate initiator driven data to core_axi_read_if_driver_bfm. +`core_axi_read_if_INITIATOR_STRUCT + core_axi_read_if_initiator_s core_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm +// to communicate Responder driven data to core_axi_read_if_driver_bfm. +`core_axi_read_if_RESPONDER_STRUCT + core_axi_read_if_responder_s core_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + core_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(core_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + core_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(core_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..cfce6e49c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the core_axi_read_if signal driving. It is +// accessed by the uvm core_axi_read_if driver through a virtual interface +// handle in the core_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type core_axi_read_if_if. +// +// Input signals from the core_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within core_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_read_if_pkg_hdl::*; +`include "src/core_axi_read_if_macros.svh" + +interface core_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (core_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute core_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + core_axi_read_if_pkg::core_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in core_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from core_axi_read_if_driver to this BFM + // **************************************************************************** + `core_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm + // to communicate initiator driven data to core_axi_read_if_driver_bfm. + `core_axi_read_if_INITIATOR_STRUCT + core_axi_read_if_initiator_s initiator_struct; + // Responder macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm + // to communicate Responder driven data to core_axi_read_if_driver_bfm. + `core_axi_read_if_RESPONDER_STRUCT + core_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(core_axi_read_if_configuration_s core_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input core_axi_read_if_initiator_s core_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output core_axi_read_if_responder_s core_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the core_axi_read_if_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Members within the core_axi_read_if_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + initiator_struct = core_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // core_axi_read_if_responder_struct.xyz = arready_i; // + // core_axi_read_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // core_axi_read_if_responder_struct.xyz = rresp_i; // + // core_axi_read_if_responder_struct.xyz = rid_i; // + // core_axi_read_if_responder_struct.xyz = rlast_i; // + // core_axi_read_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // core_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = core_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output core_axi_read_if_initiator_s core_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input core_axi_read_if_responder_s core_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the core_axi_read_if_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Variables within the core_axi_read_if_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= core_axi_read_if_initiator_struct.xyz; // + // rdata_o <= core_axi_read_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= core_axi_read_if_initiator_struct.xyz; // + // rid_o <= core_axi_read_if_initiator_struct.xyz; // + // rlast_o <= core_axi_read_if_initiator_struct.xyz; // + // rvalid_o <= core_axi_read_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the core_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the core_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_if.sv new file mode 100644 index 000000000..bd1242f03 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the core_axi_read_if interface signals. +// It is instantiated once per core_axi_read_if bus. Bus Functional Models, +// BFM's named core_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named core_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(core_axi_read_if_bus.arready), // Agent input +// .dut_signal_port(core_axi_read_if_bus.rdata), // Agent input +// .dut_signal_port(core_axi_read_if_bus.rresp), // Agent input +// .dut_signal_port(core_axi_read_if_bus.rid), // Agent input +// .dut_signal_port(core_axi_read_if_bus.rlast), // Agent input +// .dut_signal_port(core_axi_read_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import core_axi_read_if_pkg_hdl::*; + +interface core_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_macros.svh new file mode 100644 index 000000000..61c6fdb62 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the core_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the core_axi_read_if_configuration class. +// + `define core_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } core_axi_read_if_configuration_s; + + `define core_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function core_axi_read_if_configuration_s to_struct();\ + core_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( core_axi_read_if_configuration_struct );\ + endfunction + + `define core_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(core_axi_read_if_configuration_s core_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = core_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the core_axi_read_if_transaction class. +// + `define core_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } core_axi_read_if_monitor_s; + + `define core_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function core_axi_read_if_monitor_s to_monitor_struct();\ + core_axi_read_if_monitor_struct = \ + { \ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( core_axi_read_if_monitor_struct);\ + endfunction\ + + `define core_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(core_axi_read_if_monitor_s core_axi_read_if_monitor_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = core_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the core_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } core_axi_read_if_initiator_s; + + `define core_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function core_axi_read_if_initiator_s to_initiator_struct();\ + core_axi_read_if_initiator_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( core_axi_read_if_initiator_struct);\ + endfunction + + `define core_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(core_axi_read_if_initiator_s core_axi_read_if_initiator_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = core_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the core_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } core_axi_read_if_responder_s; + + `define core_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function core_axi_read_if_responder_s to_responder_struct();\ + core_axi_read_if_responder_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( core_axi_read_if_responder_struct);\ + endfunction + + `define core_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(core_axi_read_if_responder_s core_axi_read_if_responder_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = core_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor.svh new file mode 100644 index 000000000..a26f7ab33 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives core_axi_read_if transactions observed by the +// core_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual core_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`core_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the core_axi_read_if_monitor_struct. + virtual function void notify_transaction(input core_axi_read_if_monitor_s core_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(core_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..3940f5ab1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the core_axi_read_if signal monitoring. +// It is accessed by the uvm core_axi_read_if monitor through a virtual +// interface handle in the core_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type core_axi_read_if_if. +// +// Input signals from the core_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the core_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_read_if_pkg_hdl::*; +`include "src/core_axi_read_if_macros.svh" + + +interface core_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( core_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute core_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`core_axi_read_if_MONITOR_STRUCT + core_axi_read_if_monitor_s core_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `core_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + core_axi_read_if_pkg::core_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( core_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( core_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(core_axi_read_if_configuration_s core_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output core_axi_read_if_monitor_s core_axi_read_if_monitor_struct); + // + // Available struct members: + // // core_axi_read_if_monitor_struct.core_arready + // // core_axi_read_if_monitor_struct.core_rdata + // // core_axi_read_if_monitor_struct.core_rresp + // // core_axi_read_if_monitor_struct.core_rid + // // core_axi_read_if_monitor_struct.core_rlast + // // core_axi_read_if_monitor_struct.core_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // core_axi_read_if_monitor_struct.xyz = arready_i; // + // core_axi_read_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // core_axi_read_if_monitor_struct.xyz = rresp_i; // + // core_axi_read_if_monitor_struct.xyz = rid_i; // + // core_axi_read_if_monitor_struct.xyz = rlast_i; // + // core_axi_read_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..9f52585cd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the core_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a core_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "core_axi_read_if_random_sequence::body()-core_axi_read_if_transaction randomization failed") + // Send the transaction to the core_axi_read_if_driver_bfm via the sequencer and core_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: core_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..a51c239e4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "core_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..39f9a15a4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_read_if_transaction_req_t; + core_axi_read_if_transaction_req_t req; + typedef core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_read_if_transaction_rsp_t; + core_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = core_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = core_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction.svh new file mode 100644 index 000000000..2b8fc724c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an core_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( core_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_arready ; + logic [DW-1:0] core_rdata ; + axi_pkg::axi_burst_e core_rresp ; + logic [IW-1:0] core_rid ; + logic core_rlast ; + logic core_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in core_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by core_axi_read_if_monitor and core_axi_read_if_monitor_bfm + // This struct is defined in core_axi_read_if_macros.svh + `core_axi_read_if_MONITOR_STRUCT + core_axi_read_if_monitor_s core_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a core_axi_read_if_monitor_s + // structure. The function returns the handle to the core_axi_read_if_monitor_struct. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm + // to communicate initiator driven data to core_axi_read_if_driver_bfm. + // This struct is defined in core_axi_read_if_macros.svh + `core_axi_read_if_INITIATOR_STRUCT + core_axi_read_if_initiator_s core_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a core_axi_read_if_initiator_s + // structure. The function returns the handle to the core_axi_read_if_initiator_struct. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm + // to communicate Responder driven data to core_axi_read_if_driver_bfm. + // This struct is defined in core_axi_read_if_macros.svh + `core_axi_read_if_RESPONDER_STRUCT + core_axi_read_if_responder_s core_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a core_axi_read_if_responder_s + // structure. The function returns the handle to the core_axi_read_if_responder_struct. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_arready:0x%x core_rdata:0x%x core_rresp:0x%x core_rid:0x%x core_rlast:0x%x core_rvalid:0x%x ",core_arready,core_rdata,core_rresp,core_rid,core_rlast,core_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_arready == RHS.core_arready) + &&(this.core_rdata == RHS.core_rdata) + &&(this.core_rresp == RHS.core_rresp) + &&(this.core_rid == RHS.core_rid) + &&(this.core_rlast == RHS.core_rlast) + &&(this.core_rvalid == RHS.core_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_arready = RHS.core_arready; + this.core_rdata = RHS.core_rdata; + this.core_rresp = RHS.core_rresp; + this.core_rid = RHS.core_rid; + this.core_rlast = RHS.core_rlast; + this.core_rvalid = RHS.core_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"core_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_arready,"core_arready"); + $add_attribute(transaction_view_h,core_rdata,"core_rdata"); + $add_attribute(transaction_view_h,core_rresp,"core_rresp"); + $add_attribute(transaction_view_h,core_rid,"core_rid"); + $add_attribute(transaction_view_h,core_rlast,"core_rlast"); + $add_attribute(transaction_view_h,core_rvalid,"core_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..0e45fd07d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records core_axi_read_if transaction information using +// a covergroup named core_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup core_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_arready: coverpoint coverage_trans.core_arready; + core_rdata: coverpoint coverage_trans.core_rdata; + core_rresp: coverpoint coverage_trans.core_rresp; + core_rid: coverpoint coverage_trans.core_rid; + core_rlast: coverpoint coverage_trans.core_rlast; + core_rvalid: coverpoint coverage_trans.core_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + core_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + core_axi_read_if_transaction_cg.set_inst_name($sformatf("core_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + core_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/yaml/core_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/yaml/core_axi_read_if_interface.yaml new file mode 100644 index 000000000..be65d5c34 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_read_if_pkg/yaml/core_axi_read_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + core_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/.project new file mode 100644 index 000000000..c317ffc88 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/.project @@ -0,0 +1,30 @@ + + + core_axi_write_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/.svproject new file mode 100644 index 000000000..c0a4e460d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/Makefile new file mode 100644 index 000000000..7e6ea601e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/Makefile @@ -0,0 +1,66 @@ +# core_axi_write_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +core_axi_write_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f + +core_axi_write_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f + +core_axi_write_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f + +COMP_core_axi_write_if_PKG_TGT_0 = q_comp_core_axi_write_if_pkg +COMP_core_axi_write_if_PKG_TGT_1 = v_comp_core_axi_write_if_pkg +COMP_core_axi_write_if_PKG_TGT = $(COMP_core_axi_write_if_PKG_TGT_$(USE_VELOCE)) + +comp_core_axi_write_if_pkg: $(COMP_core_axi_write_if_PKG_TGT) + +q_comp_core_axi_write_if_pkg: + $(HDL_COMP_CMD) $(core_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_write_if_PKG) + $(HDL_COMP_CMD) $(core_axi_write_if_PKG_XRTL) + +v_comp_core_axi_write_if_pkg: + $(HVL_COMP_CMD) $(core_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_write_if_PKG) + $(VELANALYZE_CMD) $(core_axi_write_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(core_axi_write_if_PKG) + $(HDL_COMP_CMD) $(core_axi_write_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export core_axi_write_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/dpi + +C_FILE_COMPILE_LIST_core_axi_write_if_pkg = \ + +O_FILE_COMPILE_LIST_core_axi_write_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_core_axi_write_if_pkg:.c=.o)) + +GCC_COMP_ARGS_core_axi_write_if_pkg += -I$(core_axi_write_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_core_axi_write_if_pkg += $(core_axi_write_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_core_axi_write_if_pkg += \ + \ + -o .so + +comp_core_axi_write_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_core_axi_write_if_pkg) $(C_FILE_COMPILE_LIST_core_axi_write_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_core_axi_write_if_pkg) $(O_FILE_COMPILE_LIST_core_axi_write_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/compile.do new file mode 100644 index 000000000..d57b919fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of core_axi_write_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if.compile new file mode 100644 index 000000000..d5945e5ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if.compile @@ -0,0 +1,3 @@ +needs: + - core_axi_write_if_hvl.compile + - core_axi_write_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_bfm.vinfo new file mode 100644 index 000000000..ab7c2fca6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use core_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/core_axi_write_if_if.sv +src/core_axi_write_if_driver_bfm.sv +src/core_axi_write_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_common.compile new file mode 100644 index 000000000..4922a4200 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f new file mode 100644 index 000000000..b14f9380d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f new file mode 100644 index 000000000..a56447389 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f new file mode 100644 index 000000000..d93277776 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hdl.compile new file mode 100644 index 000000000..0328e5087 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./core_axi_write_if_common.compile +incdir: + - . +src: + - src/core_axi_write_if_if.sv + - src/core_axi_write_if_monitor_bfm.sv + - src/core_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hvl.compile new file mode 100644 index 000000000..e19dd38c2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./core_axi_write_if_common.compile +incdir: + - . +src: + - core_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.sv new file mode 100644 index 000000000..ee9c7cec8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_write_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import core_axi_write_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/core_axi_write_if_macros.svh" + + export core_axi_write_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/core_axi_write_if_typedefs.svh" + `include "src/core_axi_write_if_transaction.svh" + + `include "src/core_axi_write_if_configuration.svh" + `include "src/core_axi_write_if_driver.svh" + `include "src/core_axi_write_if_monitor.svh" + + `include "src/core_axi_write_if_transaction_coverage.svh" + `include "src/core_axi_write_if_sequence_base.svh" + `include "src/core_axi_write_if_random_sequence.svh" + + `include "src/core_axi_write_if_responder_sequence.svh" + `include "src/core_axi_write_if2reg_adapter.svh" + + `include "src/core_axi_write_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.vinfo new file mode 100644 index 000000000..d8e9ffc3f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use core_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +core_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.sv new file mode 100644 index 000000000..2d56fd18c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_write_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/core_axi_write_if_typedefs_hdl.svh" + `include "src/core_axi_write_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.vinfo new file mode 100644 index 000000000..5360aa61b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_sve.F new file mode 100644 index 000000000..1c96c4aff --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if2reg_adapter.svh new file mode 100644 index 000000000..902b4b13e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the core_axi_write_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( core_axi_write_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "core_axi_write_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : core_axi_write_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_agent.svh new file mode 100644 index 000000000..38ae017f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(core_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(core_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(core_axi_write_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( core_axi_write_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_configuration.svh new file mode 100644 index 000000000..2178c5d3f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the core_axi_write_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual core_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual core_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_write_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup core_axi_write_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in core_axi_write_if_macros.svh + `core_axi_write_if_CONFIGURATION_STRUCT + core_axi_write_if_configuration_s core_axi_write_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a core_axi_write_if_configuration_s + // structure. The function returns the handle to the core_axi_write_if_configuration_struct. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + core_axi_write_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + core_axi_write_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + core_axi_write_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + core_axi_write_if_configuration_cg.set_inst_name($sformatf("core_axi_write_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver.svh new file mode 100644 index 000000000..61afbc09d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual core_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( core_axi_write_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in core_axi_write_if_macros.svh +//******************************************************************* +// Initiator macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm +// to communicate initiator driven data to core_axi_write_if_driver_bfm. +`core_axi_write_if_INITIATOR_STRUCT + core_axi_write_if_initiator_s core_axi_write_if_initiator_struct; +//******************************************************************* +// Responder macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm +// to communicate Responder driven data to core_axi_write_if_driver_bfm. +`core_axi_write_if_RESPONDER_STRUCT + core_axi_write_if_responder_s core_axi_write_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + core_axi_write_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(core_axi_write_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + core_axi_write_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(core_axi_write_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver_bfm.sv new file mode 100644 index 000000000..2e5f63dbd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the core_axi_write_if signal driving. It is +// accessed by the uvm core_axi_write_if driver through a virtual interface +// handle in the core_axi_write_if configuration. It drives the singals passed +// in through the port connection named bus of type core_axi_write_if_if. +// +// Input signals from the core_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within core_axi_write_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_write_if_pkg_hdl::*; +`include "src/core_axi_write_if_macros.svh" + +interface core_axi_write_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (core_axi_write_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute core_axi_write_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + core_axi_write_if_pkg::core_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in core_axi_write_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from core_axi_write_if_driver to this BFM + // **************************************************************************** + `core_axi_write_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm + // to communicate initiator driven data to core_axi_write_if_driver_bfm. + `core_axi_write_if_INITIATOR_STRUCT + core_axi_write_if_initiator_s initiator_struct; + // Responder macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm + // to communicate Responder driven data to core_axi_write_if_driver_bfm. + `core_axi_write_if_RESPONDER_STRUCT + core_axi_write_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(core_axi_write_if_configuration_s core_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input core_axi_write_if_initiator_s core_axi_write_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output core_axi_write_if_responder_s core_axi_write_if_responder_struct + );// pragma tbx xtf + // + // Members within the core_axi_write_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Members within the core_axi_write_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + initiator_struct = core_axi_write_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // core_axi_write_if_responder_struct.xyz = awready_i; // + // core_axi_write_if_responder_struct.xyz = wready_i; // + // core_axi_write_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // core_axi_write_if_responder_struct.xyz = bid_i; // + // core_axi_write_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // core_axi_write_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = core_axi_write_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output core_axi_write_if_initiator_s core_axi_write_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input core_axi_write_if_responder_s core_axi_write_if_responder_struct + );// pragma tbx xtf + // Variables within the core_axi_write_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Variables within the core_axi_write_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= core_axi_write_if_initiator_struct.xyz; // + // wready_o <= core_axi_write_if_initiator_struct.xyz; // + // bresp_o <= core_axi_write_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= core_axi_write_if_initiator_struct.xyz; // + // bvalid_o <= core_axi_write_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the core_axi_write_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the core_axi_write_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_if.sv new file mode 100644 index 000000000..86ab20f72 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the core_axi_write_if interface signals. +// It is instantiated once per core_axi_write_if bus. Bus Functional Models, +// BFM's named core_axi_write_if_driver_bfm, are used to drive signals on the bus. +// BFM's named core_axi_write_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(core_axi_write_if_bus.awready), // Agent input +// .dut_signal_port(core_axi_write_if_bus.wready), // Agent input +// .dut_signal_port(core_axi_write_if_bus.bresp), // Agent input +// .dut_signal_port(core_axi_write_if_bus.bid), // Agent input +// .dut_signal_port(core_axi_write_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import core_axi_write_if_pkg_hdl::*; + +interface core_axi_write_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_macros.svh new file mode 100644 index 000000000..8c8873557 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the core_axi_write_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the core_axi_write_if_configuration class. +// + `define core_axi_write_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } core_axi_write_if_configuration_s; + + `define core_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function core_axi_write_if_configuration_s to_struct();\ + core_axi_write_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( core_axi_write_if_configuration_struct );\ + endfunction + + `define core_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(core_axi_write_if_configuration_s core_axi_write_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = core_axi_write_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the core_axi_write_if_transaction class. +// + `define core_axi_write_if_MONITOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } core_axi_write_if_monitor_s; + + `define core_axi_write_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function core_axi_write_if_monitor_s to_monitor_struct();\ + core_axi_write_if_monitor_struct = \ + { \ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( core_axi_write_if_monitor_struct);\ + endfunction\ + + `define core_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(core_axi_write_if_monitor_s core_axi_write_if_monitor_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = core_axi_write_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the core_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_write_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } core_axi_write_if_initiator_s; + + `define core_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function core_axi_write_if_initiator_s to_initiator_struct();\ + core_axi_write_if_initiator_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( core_axi_write_if_initiator_struct);\ + endfunction + + `define core_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(core_axi_write_if_initiator_s core_axi_write_if_initiator_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = core_axi_write_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the core_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_write_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } core_axi_write_if_responder_s; + + `define core_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function core_axi_write_if_responder_s to_responder_struct();\ + core_axi_write_if_responder_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( core_axi_write_if_responder_struct);\ + endfunction + + `define core_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(core_axi_write_if_responder_s core_axi_write_if_responder_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = core_axi_write_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor.svh new file mode 100644 index 000000000..52be1a9ca --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives core_axi_write_if transactions observed by the +// core_axi_write_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual core_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_write_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`core_axi_write_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the core_axi_write_if_monitor_struct. + virtual function void notify_transaction(input core_axi_write_if_monitor_s core_axi_write_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(core_axi_write_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor_bfm.sv new file mode 100644 index 000000000..9661876ce --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the core_axi_write_if signal monitoring. +// It is accessed by the uvm core_axi_write_if monitor through a virtual +// interface handle in the core_axi_write_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type core_axi_write_if_if. +// +// Input signals from the core_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the core_axi_write_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_write_if_pkg_hdl::*; +`include "src/core_axi_write_if_macros.svh" + + +interface core_axi_write_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( core_axi_write_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute core_axi_write_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`core_axi_write_if_MONITOR_STRUCT + core_axi_write_if_monitor_s core_axi_write_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `core_axi_write_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + core_axi_write_if_pkg::core_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( core_axi_write_if_monitor_struct ); + + + proxy.notify_transaction( core_axi_write_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(core_axi_write_if_configuration_s core_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output core_axi_write_if_monitor_s core_axi_write_if_monitor_struct); + // + // Available struct members: + // // core_axi_write_if_monitor_struct.core_awready + // // core_axi_write_if_monitor_struct.core_wready + // // core_axi_write_if_monitor_struct.core_bresp + // // core_axi_write_if_monitor_struct.core_bid + // // core_axi_write_if_monitor_struct.core_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // core_axi_write_if_monitor_struct.xyz = awready_i; // + // core_axi_write_if_monitor_struct.xyz = wready_i; // + // core_axi_write_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // core_axi_write_if_monitor_struct.xyz = bid_i; // + // core_axi_write_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_random_sequence.svh new file mode 100644 index 000000000..9722594f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the core_axi_write_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a core_axi_write_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_write_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "core_axi_write_if_random_sequence::body()-core_axi_write_if_transaction randomization failed") + // Send the transaction to the core_axi_write_if_driver_bfm via the sequencer and core_axi_write_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: core_axi_write_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_responder_sequence.svh new file mode 100644 index 000000000..4ee61b3ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_write_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "core_axi_write_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_sequence_base.svh new file mode 100644 index 000000000..339755d18 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_write_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_write_if_transaction_req_t; + core_axi_write_if_transaction_req_t req; + typedef core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_write_if_transaction_rsp_t; + core_axi_write_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = core_axi_write_if_transaction_req_t::type_id::create("req"); + rsp = core_axi_write_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction.svh new file mode 100644 index 000000000..78c5353a7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an core_axi_write_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( core_axi_write_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_awready ; + logic core_wready ; + axi_pkg::axi_burst_e core_bresp ; + logic core_bid ; + logic core_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in core_axi_write_if_macros.svh + + //******************************************************************* + // Monitor macro used by core_axi_write_if_monitor and core_axi_write_if_monitor_bfm + // This struct is defined in core_axi_write_if_macros.svh + `core_axi_write_if_MONITOR_STRUCT + core_axi_write_if_monitor_s core_axi_write_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a core_axi_write_if_monitor_s + // structure. The function returns the handle to the core_axi_write_if_monitor_struct. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm + // to communicate initiator driven data to core_axi_write_if_driver_bfm. + // This struct is defined in core_axi_write_if_macros.svh + `core_axi_write_if_INITIATOR_STRUCT + core_axi_write_if_initiator_s core_axi_write_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a core_axi_write_if_initiator_s + // structure. The function returns the handle to the core_axi_write_if_initiator_struct. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm + // to communicate Responder driven data to core_axi_write_if_driver_bfm. + // This struct is defined in core_axi_write_if_macros.svh + `core_axi_write_if_RESPONDER_STRUCT + core_axi_write_if_responder_s core_axi_write_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a core_axi_write_if_responder_s + // structure. The function returns the handle to the core_axi_write_if_responder_struct. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awready:0x%x core_wready:0x%x core_bresp:0x%x core_bid:0x%x core_bvalid:0x%x ",core_awready,core_wready,core_bresp,core_bid,core_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_awready == RHS.core_awready) + &&(this.core_wready == RHS.core_wready) + &&(this.core_bresp == RHS.core_bresp) + &&(this.core_bid == RHS.core_bid) + &&(this.core_bvalid == RHS.core_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awready = RHS.core_awready; + this.core_wready = RHS.core_wready; + this.core_bresp = RHS.core_bresp; + this.core_bid = RHS.core_bid; + this.core_bvalid = RHS.core_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"core_axi_write_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awready,"core_awready"); + $add_attribute(transaction_view_h,core_wready,"core_wready"); + $add_attribute(transaction_view_h,core_bresp,"core_bresp"); + $add_attribute(transaction_view_h,core_bid,"core_bid"); + $add_attribute(transaction_view_h,core_bvalid,"core_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction_coverage.svh new file mode 100644 index 000000000..aa3fe1d6e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records core_axi_write_if transaction information using +// a covergroup named core_axi_write_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_write_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup core_axi_write_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awready: coverpoint coverage_trans.core_awready; + core_wready: coverpoint coverage_trans.core_wready; + core_bresp: coverpoint coverage_trans.core_bresp; + core_bid: coverpoint coverage_trans.core_bid; + core_bvalid: coverpoint coverage_trans.core_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + core_axi_write_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + core_axi_write_if_transaction_cg.set_inst_name($sformatf("core_axi_write_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + core_axi_write_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/yaml/core_axi_write_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/yaml/core_axi_write_if_interface.yaml new file mode 100644 index 000000000..049bcebe2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/core_axi_write_if_pkg/yaml/core_axi_write_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + core_axi_write_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.project new file mode 100644 index 000000000..63a0f5c9d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..a3cbefe0b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..c29cae1ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f + +fuse_ctrl_core_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f + +fuse_ctrl_core_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_read_if_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_read_if_pkg +COMP_fuse_ctrl_core_axi_read_if_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_read_if_pkg +COMP_fuse_ctrl_core_axi_read_if_PKG_TGT = $(COMP_fuse_ctrl_core_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_read_if_pkg: $(COMP_fuse_ctrl_core_axi_read_if_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_read_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_read_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_if_pkg += -I$(fuse_ctrl_core_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_if_pkg += $(fuse_ctrl_core_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_read_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..4e0c5588d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if.compile new file mode 100644 index 000000000..48a0d3158 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_read_if_hvl.compile + - fuse_ctrl_core_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..28155505e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_read_if_if.sv +src/fuse_ctrl_core_axi_read_if_driver_bfm.sv +src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_common.compile new file mode 100644 index 000000000..109b88dad --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..733787653 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..90b4e36ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..26bcff49c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hdl.compile new file mode 100644 index 000000000..c28340779 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_read_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_read_if_if.sv + - src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv + - src/fuse_ctrl_core_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hvl.compile new file mode 100644 index 000000000..6135baefd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_read_if_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.sv new file mode 100644 index 000000000..88b9bb7a3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_read_if_macros.svh" + + export fuse_ctrl_core_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_read_if_typedefs.svh" + `include "src/fuse_ctrl_core_axi_read_if_transaction.svh" + + `include "src/fuse_ctrl_core_axi_read_if_configuration.svh" + `include "src/fuse_ctrl_core_axi_read_if_driver.svh" + `include "src/fuse_ctrl_core_axi_read_if_monitor.svh" + + `include "src/fuse_ctrl_core_axi_read_if_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_read_if_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_read_if_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_read_if_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_read_if2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..bb1d0794d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..c410235bf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_read_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..723625863 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..863eb4873 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..2ac137314 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_agent.svh new file mode 100644 index 000000000..cecf128e5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_configuration.svh new file mode 100644 index 000000000..c75c85e1c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_read_if_configuration_s fuse_ctrl_core_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_read_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_if_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_read_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver.svh new file mode 100644 index 000000000..ab8413284 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_read_if_driver_bfm. +`fuse_ctrl_core_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_if_initiator_s fuse_ctrl_core_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_read_if_driver_bfm. +`fuse_ctrl_core_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_if_responder_s fuse_ctrl_core_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..8d672492f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_read_if signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_read_if driver through a virtual interface +// handle in the fuse_ctrl_core_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_read_if_if. +// +// Input signals from the fuse_ctrl_core_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_if_macros.svh" + +interface fuse_ctrl_core_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_read_if_pkg::fuse_ctrl_core_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_read_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_if_driver_bfm. + `fuse_ctrl_core_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_if_driver_bfm. + `fuse_ctrl_core_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_read_if_configuration_s fuse_ctrl_core_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_read_if_initiator_s fuse_ctrl_core_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_read_if_responder_s fuse_ctrl_core_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_read_if_initiator_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Members within the fuse_ctrl_core_axi_read_if_responder_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + initiator_struct = fuse_ctrl_core_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_read_if_initiator_s fuse_ctrl_core_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_read_if_responder_s fuse_ctrl_core_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_read_if_initiator_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Variables within the fuse_ctrl_core_axi_read_if_responder_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arlock_i; // + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_if.sv new file mode 100644 index 000000000..5f8ec8923 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_read_if interface signals. +// It is instantiated once per fuse_ctrl_core_axi_read_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_if_pkg_hdl::*; + +interface fuse_ctrl_core_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_macros.svh new file mode 100644 index 000000000..c5799df29 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_read_if_configuration class. +// + `define fuse_ctrl_core_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_read_if_configuration_s; + + `define fuse_ctrl_core_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_if_configuration_s to_struct();\ + fuse_ctrl_core_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_read_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_read_if_configuration_s fuse_ctrl_core_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_read_if_transaction class. +// + `define fuse_ctrl_core_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_if_monitor_s; + + `define fuse_ctrl_core_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_if_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_read_if_monitor_struct = \ + { \ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_read_if_monitor_s fuse_ctrl_core_axi_read_if_monitor_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_if_initiator_s; + + `define fuse_ctrl_core_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_if_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_read_if_initiator_struct = \ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_read_if_initiator_s fuse_ctrl_core_axi_read_if_initiator_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_if_responder_s; + + `define fuse_ctrl_core_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_if_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_read_if_responder_struct = \ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_if_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_read_if_responder_s fuse_ctrl_core_axi_read_if_responder_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor.svh new file mode 100644 index 000000000..09bb82cf5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_read_if transactions observed by the +// fuse_ctrl_core_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_read_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_read_if_monitor_s fuse_ctrl_core_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..2f9a66938 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_read_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_read_if monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_read_if_if. +// +// Input signals from the fuse_ctrl_core_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_if_macros.svh" + + +interface fuse_ctrl_core_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_read_if_MONITOR_STRUCT + fuse_ctrl_core_axi_read_if_monitor_s fuse_ctrl_core_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_read_if_pkg::fuse_ctrl_core_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_read_if_configuration_s fuse_ctrl_core_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_read_if_monitor_s fuse_ctrl_core_axi_read_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_araddr + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arvalid + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arburst + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arsize + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arlen + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_aruser + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arid + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arlock + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..f0d127eb7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_read_if_random_sequence::body()-fuse_ctrl_core_axi_read_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_read_if_driver_bfm via the sequencer and fuse_ctrl_core_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..beadd0baf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..ecb0cebaa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_if_transaction_req_t; + fuse_ctrl_core_axi_read_if_transaction_req_t req; + typedef fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_if_transaction_rsp_t; + fuse_ctrl_core_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction.svh new file mode 100644 index 000000000..44757277a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] core_araddr ; + logic core_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + logic [2:0] core_arsize ; + logic [7:0] core_arlen ; + logic [UW-1:0] core_aruser ; + logic [IW-1:0] core_arid ; + logic core_arlock ; + logic core_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_read_if_monitor and fuse_ctrl_core_axi_read_if_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_MONITOR_STRUCT + fuse_ctrl_core_axi_read_if_monitor_s fuse_ctrl_core_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_if_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_if_initiator_s fuse_ctrl_core_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_if_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_if_responder_s fuse_ctrl_core_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_if_responder_struct. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_araddr:0x%x core_arvalid:0x%x core_arburst:0x%x core_arsize:0x%x core_arlen:0x%x core_aruser:0x%x core_arid:0x%x core_arlock:0x%x core_rready:0x%x ",core_araddr,core_arvalid,core_arburst,core_arsize,core_arlen,core_aruser,core_arid,core_arlock,core_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_araddr = RHS.core_araddr; + this.core_arvalid = RHS.core_arvalid; + this.core_arburst = RHS.core_arburst; + this.core_arsize = RHS.core_arsize; + this.core_arlen = RHS.core_arlen; + this.core_aruser = RHS.core_aruser; + this.core_arid = RHS.core_arid; + this.core_arlock = RHS.core_arlock; + this.core_rready = RHS.core_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_araddr,"core_araddr"); + $add_attribute(transaction_view_h,core_arvalid,"core_arvalid"); + $add_attribute(transaction_view_h,core_arburst,"core_arburst"); + $add_attribute(transaction_view_h,core_arsize,"core_arsize"); + $add_attribute(transaction_view_h,core_arlen,"core_arlen"); + $add_attribute(transaction_view_h,core_aruser,"core_aruser"); + $add_attribute(transaction_view_h,core_arid,"core_arid"); + $add_attribute(transaction_view_h,core_arlock,"core_arlock"); + $add_attribute(transaction_view_h,core_rready,"core_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..70b6c9261 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_read_if transaction information using +// a covergroup named fuse_ctrl_core_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_araddr: coverpoint coverage_trans.core_araddr; + core_arvalid: coverpoint coverage_trans.core_arvalid; + core_arburst: coverpoint coverage_trans.core_arburst; + core_arsize: coverpoint coverage_trans.core_arsize; + core_arlen: coverpoint coverage_trans.core_arlen; + core_aruser: coverpoint coverage_trans.core_aruser; + core_arid: coverpoint coverage_trans.core_arid; + core_arlock: coverpoint coverage_trans.core_arlock; + core_rready: coverpoint coverage_trans.core_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_read_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/yaml/fuse_ctrl_core_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/yaml/fuse_ctrl_core_axi_read_if_interface.yaml new file mode 100644 index 000000000..cacadd72c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/yaml/fuse_ctrl_core_axi_read_if_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: core_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.project new file mode 100644 index 000000000..574f71c48 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_write_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.svproject new file mode 100644 index 000000000..ed3bfd5bc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/Makefile new file mode 100644 index 000000000..573f6542d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_write_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_write_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f + +fuse_ctrl_core_axi_write_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f + +fuse_ctrl_core_axi_write_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_write_if_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_write_if_pkg +COMP_fuse_ctrl_core_axi_write_if_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_write_if_pkg +COMP_fuse_ctrl_core_axi_write_if_PKG_TGT = $(COMP_fuse_ctrl_core_axi_write_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_write_if_pkg: $(COMP_fuse_ctrl_core_axi_write_if_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_write_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_write_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_write_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_write_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_write_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_if_pkg += -I$(fuse_ctrl_core_axi_write_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_if_pkg += $(fuse_ctrl_core_axi_write_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_write_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_write_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_write_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_write_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/compile.do new file mode 100644 index 000000000..1628622fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_write_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if.compile new file mode 100644 index 000000000..2ee95290b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_write_if_hvl.compile + - fuse_ctrl_core_axi_write_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_bfm.vinfo new file mode 100644 index 000000000..cfb94c619 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_write_if_if.sv +src/fuse_ctrl_core_axi_write_if_driver_bfm.sv +src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_common.compile new file mode 100644 index 000000000..12a17faa4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f new file mode 100644 index 000000000..c5556080a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f new file mode 100644 index 000000000..68b83cc94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f new file mode 100644 index 000000000..3108e102e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hdl.compile new file mode 100644 index 000000000..7185a09f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_write_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_write_if_if.sv + - src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv + - src/fuse_ctrl_core_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hvl.compile new file mode 100644 index 000000000..5096b1689 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_write_if_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.sv new file mode 100644 index 000000000..4fcea64ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_write_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_write_if_macros.svh" + + export fuse_ctrl_core_axi_write_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_write_if_typedefs.svh" + `include "src/fuse_ctrl_core_axi_write_if_transaction.svh" + + `include "src/fuse_ctrl_core_axi_write_if_configuration.svh" + `include "src/fuse_ctrl_core_axi_write_if_driver.svh" + `include "src/fuse_ctrl_core_axi_write_if_monitor.svh" + + `include "src/fuse_ctrl_core_axi_write_if_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_write_if_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_write_if_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_write_if_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_write_if2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_write_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.vinfo new file mode 100644 index 000000000..6bd4a3132 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.sv new file mode 100644 index 000000000..943fb4e9c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_write_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_write_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo new file mode 100644 index 000000000..179238254 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_sve.F new file mode 100644 index 000000000..0168ba713 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if2reg_adapter.svh new file mode 100644 index 000000000..f7dc857b5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_write_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_write_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_write_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_agent.svh new file mode 100644 index 000000000..d991ed3fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_write_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_configuration.svh new file mode 100644 index 000000000..e0d213f15 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_write_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_write_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_write_if_configuration_s fuse_ctrl_core_axi_write_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_write_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_if_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_write_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_write_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_write_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_write_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver.svh new file mode 100644 index 000000000..33543d00f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_write_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_write_if_driver_bfm. +`fuse_ctrl_core_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_if_initiator_s fuse_ctrl_core_axi_write_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_write_if_driver_bfm. +`fuse_ctrl_core_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_if_responder_s fuse_ctrl_core_axi_write_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_write_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_write_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_write_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_write_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver_bfm.sv new file mode 100644 index 000000000..8b920cc3e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver_bfm.sv @@ -0,0 +1,429 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_write_if signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_write_if driver through a virtual interface +// handle in the fuse_ctrl_core_axi_write_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_write_if_if. +// +// Input signals from the fuse_ctrl_core_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_write_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_if_macros.svh" + +interface fuse_ctrl_core_axi_write_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_write_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] awaddr_i; + reg [AW-1:0] awaddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] awburst_o = 'bz; + tri [2:0] awsize_i; + reg [2:0] awsize_o = 'bz; + tri [7:0] awlen_i; + reg [7:0] awlen_o = 'bz; + tri [UW-1:0] awuser_i; + reg [UW-1:0] awuser_o = 'bz; + tri [UW-1:0] awid_i; + reg [UW-1:0] awid_o = 'bz; + tri awlock_i; + reg awlock_o = 'bz; + tri awvalid_i; + reg awvalid_o = 'bz; + tri [DW-1:0] wdata_i; + reg [DW-1:0] wdata_o = 'bz; + tri [DW/8-1:0] wstrb_i; + reg [DW/8-1:0] wstrb_o = 'bz; + tri wvalid_i; + reg wvalid_o = 'bz; + tri wlast_i; + reg wlast_o = 'bz; + tri bready_i; + reg bready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.awaddr = (initiator_responder == INITIATOR) ? awaddr_o : 'bz; + assign awaddr_i = bus.awaddr; + assign bus.awburst = (initiator_responder == INITIATOR) ? awburst_o : 'bz; + assign awburst_i = bus.awburst; + assign bus.awsize = (initiator_responder == INITIATOR) ? awsize_o : 'bz; + assign awsize_i = bus.awsize; + assign bus.awlen = (initiator_responder == INITIATOR) ? awlen_o : 'bz; + assign awlen_i = bus.awlen; + assign bus.awuser = (initiator_responder == INITIATOR) ? awuser_o : 'bz; + assign awuser_i = bus.awuser; + assign bus.awid = (initiator_responder == INITIATOR) ? awid_o : 'bz; + assign awid_i = bus.awid; + assign bus.awlock = (initiator_responder == INITIATOR) ? awlock_o : 'bz; + assign awlock_i = bus.awlock; + assign bus.awvalid = (initiator_responder == INITIATOR) ? awvalid_o : 'bz; + assign awvalid_i = bus.awvalid; + assign bus.wdata = (initiator_responder == INITIATOR) ? wdata_o : 'bz; + assign wdata_i = bus.wdata; + assign bus.wstrb = (initiator_responder == INITIATOR) ? wstrb_o : 'bz; + assign wstrb_i = bus.wstrb; + assign bus.wvalid = (initiator_responder == INITIATOR) ? wvalid_o : 'bz; + assign wvalid_i = bus.wvalid; + assign bus.wlast = (initiator_responder == INITIATOR) ? wlast_o : 'bz; + assign wlast_i = bus.wlast; + assign bus.bready = (initiator_responder == INITIATOR) ? bready_o : 'bz; + assign bready_i = bus.bready; + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_write_if_pkg::fuse_ctrl_core_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_write_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_write_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_write_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_if_driver_bfm. + `fuse_ctrl_core_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_if_driver_bfm. + `fuse_ctrl_core_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + awaddr_o <= 'bz; + awburst_o <= 'bz; + awsize_o <= 'bz; + awlen_o <= 'bz; + awuser_o <= 'bz; + awid_o <= 'bz; + awlock_o <= 'bz; + awvalid_o <= 'bz; + wdata_o <= 'bz; + wstrb_o <= 'bz; + wvalid_o <= 'bz; + wlast_o <= 'bz; + bready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_write_if_configuration_s fuse_ctrl_core_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_write_if_initiator_s fuse_ctrl_core_axi_write_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_write_if_responder_s fuse_ctrl_core_axi_write_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_write_if_initiator_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Members within the fuse_ctrl_core_axi_write_if_responder_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + initiator_struct = fuse_ctrl_core_axi_write_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // awaddr_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [AW-1:0] + // awburst_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // awsize_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [2:0] + // awlen_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [7:0] + // awuser_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [UW-1:0] + // awid_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [UW-1:0] + // awlock_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // + // awvalid_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // + // wdata_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [DW-1:0] + // wstrb_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [DW/8-1:0] + // wvalid_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // + // wlast_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // + // bready_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_write_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_write_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_write_if_initiator_s fuse_ctrl_core_axi_write_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_write_if_responder_s fuse_ctrl_core_axi_write_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_write_if_initiator_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Variables within the fuse_ctrl_core_axi_write_if_responder_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awlock_i; // + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awvalid_i; // + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = wvalid_i; // + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = wlast_i; // + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = bready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_write_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_write_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_if.sv new file mode 100644 index 000000000..b0047fa1f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_if.sv @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_write_if interface signals. +// It is instantiated once per fuse_ctrl_core_axi_write_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_write_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_write_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awaddr), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awburst), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awsize), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awlen), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awuser), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awlock), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.wdata), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.wstrb), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.wvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.wlast), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.bready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_if_pkg_hdl::*; + +interface fuse_ctrl_core_axi_write_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] awaddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst, + inout tri [2:0] awsize, + inout tri [7:0] awlen, + inout tri [UW-1:0] awuser, + inout tri [UW-1:0] awid, + inout tri awlock, + inout tri awvalid, + inout tri [DW-1:0] wdata, + inout tri [DW/8-1:0] wstrb, + inout tri wvalid, + inout tri wlast, + inout tri bready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output awaddr, + output awburst, + output awsize, + output awlen, + output awuser, + output awid, + output awlock, + output awvalid, + output wdata, + output wstrb, + output wvalid, + output wlast, + output bready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_macros.svh new file mode 100644 index 000000000..b8fd5a307 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_macros.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_write_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_write_if_configuration class. +// + `define fuse_ctrl_core_axi_write_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_write_if_configuration_s; + + `define fuse_ctrl_core_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_if_configuration_s to_struct();\ + fuse_ctrl_core_axi_write_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_write_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_write_if_configuration_s fuse_ctrl_core_axi_write_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_write_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_write_if_transaction class. +// + `define fuse_ctrl_core_axi_write_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_if_monitor_s; + + `define fuse_ctrl_core_axi_write_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_if_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_write_if_monitor_struct = \ + { \ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_write_if_monitor_s fuse_ctrl_core_axi_write_if_monitor_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_if_initiator_s; + + `define fuse_ctrl_core_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_if_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_write_if_initiator_struct = \ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_write_if_initiator_s fuse_ctrl_core_axi_write_if_initiator_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_if_responder_s; + + `define fuse_ctrl_core_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_if_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_write_if_responder_struct = \ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_if_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_write_if_responder_s fuse_ctrl_core_axi_write_if_responder_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor.svh new file mode 100644 index 000000000..a0022cc66 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_write_if transactions observed by the +// fuse_ctrl_core_axi_write_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_write_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_write_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_write_if_monitor_s fuse_ctrl_core_axi_write_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_write_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv new file mode 100644 index 000000000..de0093e53 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv @@ -0,0 +1,248 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_write_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_write_if monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_write_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_write_if_if. +// +// Input signals from the fuse_ctrl_core_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_write_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_if_macros.svh" + + +interface fuse_ctrl_core_axi_write_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_write_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_write_if_MONITOR_STRUCT + fuse_ctrl_core_axi_write_if_monitor_s fuse_ctrl_core_axi_write_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_write_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] awaddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + tri [2:0] awsize_i; + tri [7:0] awlen_i; + tri [UW-1:0] awuser_i; + tri [UW-1:0] awid_i; + tri awlock_i; + tri awvalid_i; + tri [DW-1:0] wdata_i; + tri [DW/8-1:0] wstrb_i; + tri wvalid_i; + tri wlast_i; + tri bready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awaddr_i = bus.awaddr; + assign awburst_i = bus.awburst; + assign awsize_i = bus.awsize; + assign awlen_i = bus.awlen; + assign awuser_i = bus.awuser; + assign awid_i = bus.awid; + assign awlock_i = bus.awlock; + assign awvalid_i = bus.awvalid; + assign wdata_i = bus.wdata; + assign wstrb_i = bus.wstrb; + assign wvalid_i = bus.wvalid; + assign wlast_i = bus.wlast; + assign bready_i = bus.bready; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_write_if_pkg::fuse_ctrl_core_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_write_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_write_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_write_if_configuration_s fuse_ctrl_core_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_write_if_monitor_s fuse_ctrl_core_axi_write_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awaddr + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awvalid + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awburst + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awsize + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awlen + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awuser + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awid + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awlock + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_wdata + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_wstrb + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_wvalid + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_wlast + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_bready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awlock_i; // + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awvalid_i; // + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = wvalid_i; // + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = wlast_i; // + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = bready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_random_sequence.svh new file mode 100644 index 000000000..77120c18e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_write_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_write_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_write_if_random_sequence::body()-fuse_ctrl_core_axi_write_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_write_if_driver_bfm via the sequencer and fuse_ctrl_core_axi_write_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_write_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_responder_sequence.svh new file mode 100644 index 000000000..ed1c8c6bd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_write_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_sequence_base.svh new file mode 100644 index 000000000..122b3d543 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_if_transaction_req_t; + fuse_ctrl_core_axi_write_if_transaction_req_t req; + typedef fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_if_transaction_rsp_t; + fuse_ctrl_core_axi_write_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_write_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_write_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction.svh new file mode 100644 index 000000000..3298d1196 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction.svh @@ -0,0 +1,256 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_write_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] core_awaddr ; + logic core_awvalid ; + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + logic [2:0] core_awsize ; + logic [7:0] core_awlen ; + logic [UW-1:0] core_awuser ; + logic [IW-1:0] core_awid ; + logic core_awlock ; + logic [DW-1:0] core_wdata ; + logic [DW/8 - 1:0] core_wstrb ; + logic core_wvalid ; + logic core_wlast ; + logic core_bready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_write_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_write_if_monitor and fuse_ctrl_core_axi_write_if_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_MONITOR_STRUCT + fuse_ctrl_core_axi_write_if_monitor_s fuse_ctrl_core_axi_write_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_if_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_if_initiator_s fuse_ctrl_core_axi_write_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_if_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_if_responder_s fuse_ctrl_core_axi_write_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_if_responder_struct. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awaddr:0x%x core_awvalid:0x%x core_awburst:0x%x core_awsize:0x%x core_awlen:0x%x core_awuser:0x%x core_awid:0x%x core_awlock:0x%x core_wdata:0x%x core_wstrb:0x%x core_wvalid:0x%x core_wlast:0x%x core_bready:0x%x ",core_awaddr,core_awvalid,core_awburst,core_awsize,core_awlen,core_awuser,core_awid,core_awlock,core_wdata,core_wstrb,core_wvalid,core_wlast,core_bready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_wdata == RHS.core_wdata) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awaddr = RHS.core_awaddr; + this.core_awvalid = RHS.core_awvalid; + this.core_awburst = RHS.core_awburst; + this.core_awsize = RHS.core_awsize; + this.core_awlen = RHS.core_awlen; + this.core_awuser = RHS.core_awuser; + this.core_awid = RHS.core_awid; + this.core_awlock = RHS.core_awlock; + this.core_wdata = RHS.core_wdata; + this.core_wstrb = RHS.core_wstrb; + this.core_wvalid = RHS.core_wvalid; + this.core_wlast = RHS.core_wlast; + this.core_bready = RHS.core_bready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_write_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awaddr,"core_awaddr"); + $add_attribute(transaction_view_h,core_awvalid,"core_awvalid"); + $add_attribute(transaction_view_h,core_awburst,"core_awburst"); + $add_attribute(transaction_view_h,core_awsize,"core_awsize"); + $add_attribute(transaction_view_h,core_awlen,"core_awlen"); + $add_attribute(transaction_view_h,core_awuser,"core_awuser"); + $add_attribute(transaction_view_h,core_awid,"core_awid"); + $add_attribute(transaction_view_h,core_awlock,"core_awlock"); + $add_attribute(transaction_view_h,core_wdata,"core_wdata"); + $add_attribute(transaction_view_h,core_wstrb,"core_wstrb"); + $add_attribute(transaction_view_h,core_wvalid,"core_wvalid"); + $add_attribute(transaction_view_h,core_wlast,"core_wlast"); + $add_attribute(transaction_view_h,core_bready,"core_bready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction_coverage.svh new file mode 100644 index 000000000..3f905316d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction_coverage.svh @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_write_if transaction information using +// a covergroup named fuse_ctrl_core_axi_write_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_write_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awaddr: coverpoint coverage_trans.core_awaddr; + core_awvalid: coverpoint coverage_trans.core_awvalid; + core_awburst: coverpoint coverage_trans.core_awburst; + core_awsize: coverpoint coverage_trans.core_awsize; + core_awlen: coverpoint coverage_trans.core_awlen; + core_awuser: coverpoint coverage_trans.core_awuser; + core_awid: coverpoint coverage_trans.core_awid; + core_awlock: coverpoint coverage_trans.core_awlock; + core_wdata: coverpoint coverage_trans.core_wdata; + core_wstrb: coverpoint coverage_trans.core_wstrb; + core_wvalid: coverpoint coverage_trans.core_wvalid; + core_wlast: coverpoint coverage_trans.core_wlast; + core_bready: coverpoint coverage_trans.core_bready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_write_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_write_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_write_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/yaml/fuse_ctrl_core_axi_write_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/yaml/fuse_ctrl_core_axi_write_if_interface.yaml new file mode 100644 index 000000000..242a9b639 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/yaml/fuse_ctrl_core_axi_write_if_interface.yaml @@ -0,0 +1,161 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_write_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: awaddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: awburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: awsize + reset_value: '''bz' + width: '3' + - dir: output + name: awlen + reset_value: '''bz' + width: '8' + - dir: output + name: awuser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awid + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awlock + reset_value: '''bz' + width: '1' + - dir: output + name: awvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wdata + reset_value: '''bz' + width: '[''DW'']' + - dir: output + name: wstrb + reset_value: '''bz' + width: '[''DW/8'']' + - dir: output + name: wvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wlast + reset_value: '''bz' + width: '1' + - dir: output + name: bready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: core_awaddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awuser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wstrb + type: logic [DW/8 - 1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_bready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/.project new file mode 100644 index 000000000..3038bf51b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/.svproject new file mode 100644 index 000000000..40fcc43fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/Makefile new file mode 100644 index 000000000..9fd3230c4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f + +fuse_ctrl_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f + +fuse_ctrl_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f + +COMP_fuse_ctrl_in_PKG_TGT_0 = q_comp_fuse_ctrl_in_pkg +COMP_fuse_ctrl_in_PKG_TGT_1 = v_comp_fuse_ctrl_in_pkg +COMP_fuse_ctrl_in_PKG_TGT = $(COMP_fuse_ctrl_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_in_pkg: $(COMP_fuse_ctrl_in_PKG_TGT) + +q_comp_fuse_ctrl_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_in_PKG_XRTL) + +v_comp_fuse_ctrl_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_in_pkg += -I$(fuse_ctrl_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_in_pkg += $(fuse_ctrl_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/compile.do new file mode 100644 index 000000000..26458397d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile new file mode 100644 index 000000000..ae6ef9dd8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_in_hvl.compile + - fuse_ctrl_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo new file mode 100644 index 000000000..cf88b7005 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_in_if.sv +src/fuse_ctrl_in_driver_bfm.sv +src/fuse_ctrl_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_common.compile new file mode 100644 index 000000000..82360a88a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f new file mode 100644 index 000000000..959aa9e78 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f new file mode 100644 index 000000000..e57e74b80 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f new file mode 100644 index 000000000..1e9819e09 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile new file mode 100644 index 000000000..da38bec57 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_in_if.sv + - src/fuse_ctrl_in_monitor_bfm.sv + - src/fuse_ctrl_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile new file mode 100644 index 000000000..210102ccf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_in_common.compile +incdir: + - . +src: + - fuse_ctrl_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv new file mode 100644 index 000000000..58df769b3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_in_macros.svh" + + export fuse_ctrl_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_in_typedefs.svh" + `include "src/fuse_ctrl_in_transaction.svh" + + `include "src/fuse_ctrl_in_configuration.svh" + `include "src/fuse_ctrl_in_driver.svh" + `include "src/fuse_ctrl_in_monitor.svh" + + `include "src/fuse_ctrl_in_transaction_coverage.svh" + `include "src/fuse_ctrl_in_sequence_base.svh" + `include "src/fuse_ctrl_in_random_sequence.svh" + + `include "src/fuse_ctrl_in_responder_sequence.svh" + `include "src/fuse_ctrl_in2reg_adapter.svh" + + `include "src/fuse_ctrl_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo new file mode 100644 index 000000000..164f1255c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv new file mode 100644 index 000000000..b13dcf77e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.vinfo new file mode 100644 index 000000000..79de2ad70 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F new file mode 100644 index 000000000..345b7e8cd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in2reg_adapter.svh new file mode 100644 index 000000000..a359e7f30 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in2reg_adapter #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_in2reg_adapter #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h = fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_agent.svh new file mode 100644 index 000000000..8f2300972 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_agent #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_in_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .DRIVER_T(fuse_ctrl_in_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_T(fuse_ctrl_in_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .COVERAGE_T(fuse_ctrl_in_transaction_coverage #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_in_agent #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_configuration.svh new file mode 100644 index 000000000..14af02688 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_configuration #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_in_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_in_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_in_configuration #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_CONFIGURATION_STRUCT + fuse_ctrl_in_configuration_s fuse_ctrl_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_in_configuration_struct. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_in_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_in_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", agent_path, interface_name, AlertSyncOn ,RndConstLfrSeed ,RndCnstLfsrPerm ,MemInitFile ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_in_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver.svh new file mode 100644 index 000000000..2817f179d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_driver #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_in_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_in_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .REQ(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .RSP(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_in_driver #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_in_driver_bfm. +`fuse_ctrl_in_INITIATOR_STRUCT + fuse_ctrl_in_initiator_s fuse_ctrl_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_in_driver_bfm. +`fuse_ctrl_in_RESPONDER_STRUCT + fuse_ctrl_in_responder_s fuse_ctrl_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver_bfm.sv new file mode 100644 index 000000000..e7e60a495 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver_bfm.sv @@ -0,0 +1,346 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_in signal driving. It is +// accessed by the uvm fuse_ctrl_in driver through a virtual interface +// handle in the fuse_ctrl_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_in_if. +// +// Input signals from the fuse_ctrl_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_pkg_hdl::*; +`include "src/fuse_ctrl_in_macros.svh" + +interface fuse_ctrl_in_driver_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + (fuse_ctrl_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i_i; + reg [$bits(edn_pkg::edn_req_t)-1:0] edn_i_o = 'bz; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_i; + reg [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_o = 'bz; + tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_i; + reg [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_o = 'bz; + tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_i; + reg [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_o = 'bz; + tri otp_ext_voltage_h_io_i; + reg otp_ext_voltage_h_io_o = 'bz; + tri scan_en_i_i; + reg scan_en_i_o = 'bz; + tri scan_rst_ni_i; + reg scan_rst_ni_o = 'bz; + tri scanmode_i_i; + reg scanmode_i_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.edn_i = (initiator_responder == INITIATOR) ? edn_i_o : 'bz; + assign edn_i_i = bus.edn_i; + assign bus.alert_rx_i = (initiator_responder == INITIATOR) ? alert_rx_i_o : 'bz; + assign alert_rx_i_i = bus.alert_rx_i; + assign bus.obs_ctrl_i = (initiator_responder == INITIATOR) ? obs_ctrl_i_o : 'bz; + assign obs_ctrl_i_i = bus.obs_ctrl_i; + assign bus.otp_ast_pwr_seq_h_i = (initiator_responder == INITIATOR) ? otp_ast_pwr_seq_h_i_o : 'bz; + assign otp_ast_pwr_seq_h_i_i = bus.otp_ast_pwr_seq_h_i; + assign bus.otp_ext_voltage_h_io = (initiator_responder == INITIATOR) ? otp_ext_voltage_h_io_o : 'bz; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + assign bus.scan_en_i = (initiator_responder == INITIATOR) ? scan_en_i_o : 'bz; + assign scan_en_i_i = bus.scan_en_i; + assign bus.scan_rst_ni = (initiator_responder == INITIATOR) ? scan_rst_ni_o : 'bz; + assign scan_rst_ni_i = bus.scan_rst_ni; + assign bus.scanmode_i = (initiator_responder == INITIATOR) ? scanmode_i_o : 'bz; + assign scanmode_i_i = bus.scanmode_i; + + // Proxy handle to UVM driver + fuse_ctrl_in_pkg::fuse_ctrl_in_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_in_driver_bfm. + `fuse_ctrl_in_INITIATOR_STRUCT + fuse_ctrl_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_in_driver_bfm. + `fuse_ctrl_in_RESPONDER_STRUCT + fuse_ctrl_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + edn_i_o <= 'bz; + alert_rx_i_o <= 'bz; + obs_ctrl_i_o <= 'bz; + otp_ast_pwr_seq_h_i_o <= 'bz; + otp_ext_voltage_h_io_o <= 'bz; + scan_en_i_o <= 'bz; + scan_rst_ni_o <= 'bz; + scanmode_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_in_configuration_s fuse_ctrl_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_in_initiator_s fuse_ctrl_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_in_responder_s fuse_ctrl_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_in_initiator_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Members within the fuse_ctrl_in_responder_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + initiator_struct = fuse_ctrl_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // edn_i_o <= fuse_ctrl_in_initiator_struct.xyz; // [$bits(edn_pkg::edn_req_t)-1:0] + // alert_rx_i_o <= fuse_ctrl_in_initiator_struct.xyz; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // obs_ctrl_i_o <= fuse_ctrl_in_initiator_struct.xyz; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // otp_ast_pwr_seq_h_i_o <= fuse_ctrl_in_initiator_struct.xyz; // [$bits(otp_ast_req_t)-1:0] + // otp_ext_voltage_h_io_o <= fuse_ctrl_in_initiator_struct.xyz; // + // scan_en_i_o <= fuse_ctrl_in_initiator_struct.xyz; // + // scan_rst_ni_o <= fuse_ctrl_in_initiator_struct.xyz; // + // scanmode_i_o <= fuse_ctrl_in_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_in_initiator_s fuse_ctrl_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_in_responder_s fuse_ctrl_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_in_initiator_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Variables within the fuse_ctrl_in_responder_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_in_responder_struct.xyz = edn_i_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_in_responder_struct.xyz = alert_rx_i_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // fuse_ctrl_in_responder_struct.xyz = obs_ctrl_i_i; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // fuse_ctrl_in_responder_struct.xyz = otp_ast_pwr_seq_h_i_i; // [$bits(otp_ast_req_t)-1:0] + // fuse_ctrl_in_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // fuse_ctrl_in_responder_struct.xyz = scan_en_i_i; // + // fuse_ctrl_in_responder_struct.xyz = scan_rst_ni_i; // + // fuse_ctrl_in_responder_struct.xyz = scanmode_i_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv new file mode 100644 index 000000000..ad21f9b9f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv @@ -0,0 +1,119 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_in interface signals. +// It is instantiated once per fuse_ctrl_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_in_bus.edn_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.alert_rx_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.obs_ctrl_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.otp_ast_pwr_seq_h_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.otp_ext_voltage_h_io), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.scan_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.scan_rst_ni), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.scanmode_i), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_pkg_hdl::*; + +interface fuse_ctrl_in_if #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i, + inout tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i, + inout tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i, + inout tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i, + inout tri otp_ext_voltage_h_io, + inout tri scan_en_i, + inout tri scan_rst_ni, + inout tri scanmode_i + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input edn_i, + input alert_rx_i, + input obs_ctrl_i, + input otp_ast_pwr_seq_h_i, + input otp_ext_voltage_h_io, + input scan_en_i, + input scan_rst_ni, + input scanmode_i + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output edn_i, + output alert_rx_i, + output obs_ctrl_i, + output otp_ast_pwr_seq_h_i, + output otp_ext_voltage_h_io, + output scan_en_i, + output scan_rst_ni, + output scanmode_i + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input edn_i, + input alert_rx_i, + input obs_ctrl_i, + input otp_ast_pwr_seq_h_i, + input otp_ext_voltage_h_io, + input scan_en_i, + input scan_rst_ni, + input scanmode_i + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_macros.svh new file mode 100644 index 000000000..cf85634de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_in_configuration class. +// + `define fuse_ctrl_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_in_configuration_s; + + `define fuse_ctrl_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_configuration_s to_struct();\ + fuse_ctrl_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_in_configuration_s fuse_ctrl_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_in_transaction class. +// + `define fuse_ctrl_in_MONITOR_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_monitor_s; + + `define fuse_ctrl_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_monitor_s to_monitor_struct();\ + fuse_ctrl_in_monitor_struct = \ + { \ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_in_monitor_s fuse_ctrl_in_monitor_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_in_INITIATOR_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_initiator_s; + + `define fuse_ctrl_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_initiator_s to_initiator_struct();\ + fuse_ctrl_in_initiator_struct = \ + {\ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_in_initiator_s fuse_ctrl_in_initiator_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_in_RESPONDER_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_responder_s; + + `define fuse_ctrl_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_responder_s to_responder_struct();\ + fuse_ctrl_in_responder_struct = \ + {\ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_responder_struct);\ + endfunction + + `define fuse_ctrl_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_in_responder_s fuse_ctrl_in_responder_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor.svh new file mode 100644 index 000000000..cf4d9fd27 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_in transactions observed by the +// fuse_ctrl_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_monitor #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_in_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_in_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_in_monitor #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_in_monitor_s fuse_ctrl_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor_bfm.sv new file mode 100644 index 000000000..4857b9f66 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor_bfm.sv @@ -0,0 +1,221 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_in monitor through a virtual +// interface handle in the fuse_ctrl_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_in_if. +// +// Input signals from the fuse_ctrl_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_pkg_hdl::*; +`include "src/fuse_ctrl_in_macros.svh" + + +interface fuse_ctrl_in_monitor_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + ( fuse_ctrl_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_in_MONITOR_STRUCT + fuse_ctrl_in_monitor_s fuse_ctrl_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i_i; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_i; + tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_i; + tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_i; + tri otp_ext_voltage_h_io_i; + tri scan_en_i_i; + tri scan_rst_ni_i; + tri scanmode_i_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign edn_i_i = bus.edn_i; + assign alert_rx_i_i = bus.alert_rx_i; + assign obs_ctrl_i_i = bus.obs_ctrl_i; + assign otp_ast_pwr_seq_h_i_i = bus.otp_ast_pwr_seq_h_i; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + assign scan_en_i_i = bus.scan_en_i; + assign scan_rst_ni_i = bus.scan_rst_ni; + assign scanmode_i_i = bus.scanmode_i; + + // Proxy handle to UVM monitor + fuse_ctrl_in_pkg::fuse_ctrl_in_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_in_configuration_s fuse_ctrl_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_in_monitor_s fuse_ctrl_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_in_monitor_struct.set_alert_rx_i + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_in_monitor_struct.xyz = edn_i_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_in_monitor_struct.xyz = alert_rx_i_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // fuse_ctrl_in_monitor_struct.xyz = obs_ctrl_i_i; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // fuse_ctrl_in_monitor_struct.xyz = otp_ast_pwr_seq_h_i_i; // [$bits(otp_ast_req_t)-1:0] + // fuse_ctrl_in_monitor_struct.xyz = otp_ext_voltage_h_io_i; // + // fuse_ctrl_in_monitor_struct.xyz = scan_en_i_i; // + // fuse_ctrl_in_monitor_struct.xyz = scan_rst_ni_i; // + // fuse_ctrl_in_monitor_struct.xyz = scanmode_i_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_random_sequence.svh new file mode 100644 index 000000000..66b5a5d4a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_random_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_in_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_in_random_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_in_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_in_random_sequence::body()-fuse_ctrl_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_in_driver_bfm via the sequencer and fuse_ctrl_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_responder_sequence.svh new file mode 100644 index 000000000..e4e42b6aa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_responder_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_in_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_in_responder_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_in_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_sequence_base.svh new file mode 100644 index 000000000..ce6a3b740 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_sequence_base #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .RSP(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_in_sequence_base #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // variables + typedef fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_in_transaction_req_t; + fuse_ctrl_in_transaction_req_t req; + typedef fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_in_transaction_rsp_t; + fuse_ctrl_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction.svh new file mode 100644 index 000000000..f8a7fc400 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction.svh @@ -0,0 +1,219 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_transaction #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_in_transaction #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_in_monitor and fuse_ctrl_in_monitor_bfm + // This struct is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_MONITOR_STRUCT + fuse_ctrl_in_monitor_s fuse_ctrl_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_in_monitor_struct. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_in_driver_bfm. + // This struct is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_INITIATOR_STRUCT + fuse_ctrl_in_initiator_s fuse_ctrl_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_in_initiator_struct. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_in_driver_bfm. + // This struct is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_RESPONDER_STRUCT + fuse_ctrl_in_responder_s fuse_ctrl_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_in_responder_struct. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("set_alert_rx_i:0x%x ",set_alert_rx_i); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.set_alert_rx_i = RHS.set_alert_rx_i; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,set_alert_rx_i,"set_alert_rx_i"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction_coverage.svh new file mode 100644 index 000000000..5da482565 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction_coverage.svh @@ -0,0 +1,102 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_in transaction information using +// a covergroup named fuse_ctrl_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_transaction_coverage #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_subscriber #(.T(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_in_transaction_coverage #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + set_alert_rx_i: coverpoint coverage_trans.set_alert_rx_i; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/yaml/fuse_ctrl_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/yaml/fuse_ctrl_in_interface.yaml new file mode 100644 index 000000000..e7be8c60b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_in_pkg/yaml/fuse_ctrl_in_interface.yaml @@ -0,0 +1,68 @@ +uvmf: + interfaces: + fuse_ctrl_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AlertSyncOn + type: int + value: '3' + - name: RndConstLfrSeed + type: lfsr_seed_t + value: RndConstLfsrSeedDefault + - name: RndCnstLfsrPerm + type: lsfr_perm_t + value: RndCnstLfsrPermDefault + - name: MemInitFile + type: string + ports: + - dir: output + name: edn_i + reset_value: '''bz' + width: '[''$bits(edn_pkg::edn_req_t)'']' + - dir: output + name: alert_rx_i + reset_value: '''bz' + width: '[''NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)'']' + - dir: output + name: obs_ctrl_i + reset_value: '''bz' + width: '[''$bits(ast_pkg::ast_obs_ctrl_t)'']' + - dir: output + name: otp_ast_pwr_seq_h_i + reset_value: '''bz' + width: '[''$bits(otp_ast_req_t)'']' + - dir: output + name: otp_ext_voltage_h_io + reset_value: '''bz' + width: '1' + - dir: output + name: scan_en_i + reset_value: '''bz' + width: '1' + - dir: output + name: scan_rst_ni + reset_value: '''bz' + width: '1' + - dir: output + name: scanmode_i + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: set_alert_rx_i + type: caliptra_prim_alert_pkg::alert_rx_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.project new file mode 100644 index 000000000..da8a90eb7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_lc_otp_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.svproject new file mode 100644 index 000000000..6dac2c36a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/Makefile new file mode 100644 index 000000000..1ce37d99e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_lc_otp_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_lc_otp_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f + +fuse_ctrl_lc_otp_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f + +fuse_ctrl_lc_otp_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f + +COMP_fuse_ctrl_lc_otp_if_PKG_TGT_0 = q_comp_fuse_ctrl_lc_otp_if_pkg +COMP_fuse_ctrl_lc_otp_if_PKG_TGT_1 = v_comp_fuse_ctrl_lc_otp_if_pkg +COMP_fuse_ctrl_lc_otp_if_PKG_TGT = $(COMP_fuse_ctrl_lc_otp_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_lc_otp_if_pkg: $(COMP_fuse_ctrl_lc_otp_if_PKG_TGT) + +q_comp_fuse_ctrl_lc_otp_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG_XRTL) + +v_comp_fuse_ctrl_lc_otp_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_lc_otp_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_lc_otp_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_lc_otp_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_if_pkg += -I$(fuse_ctrl_lc_otp_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_if_pkg += $(fuse_ctrl_lc_otp_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_lc_otp_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_lc_otp_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_lc_otp_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_lc_otp_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/compile.do new file mode 100644 index 000000000..5f222a54a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_lc_otp_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if.compile new file mode 100644 index 000000000..ecb1301fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_lc_otp_if_hvl.compile + - fuse_ctrl_lc_otp_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_bfm.vinfo new file mode 100644 index 000000000..4007fc103 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_lc_otp_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_lc_otp_if_if.sv +src/fuse_ctrl_lc_otp_if_driver_bfm.sv +src/fuse_ctrl_lc_otp_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_common.compile new file mode 100644 index 000000000..0a9110502 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_lc_otp_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f new file mode 100644 index 000000000..30a25f810 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f new file mode 100644 index 000000000..0807a17da --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f new file mode 100644 index 000000000..e39f0bb0c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hdl.compile new file mode 100644 index 000000000..6d534830c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_lc_otp_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_lc_otp_if_if.sv + - src/fuse_ctrl_lc_otp_if_monitor_bfm.sv + - src/fuse_ctrl_lc_otp_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hvl.compile new file mode 100644 index 000000000..208b3d517 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_lc_otp_if_common.compile +incdir: + - . +src: + - fuse_ctrl_lc_otp_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.sv new file mode 100644 index 000000000..6bf19e8ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_lc_otp_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_lc_otp_if_macros.svh" + + export fuse_ctrl_lc_otp_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_lc_otp_if_typedefs.svh" + `include "src/fuse_ctrl_lc_otp_if_transaction.svh" + + `include "src/fuse_ctrl_lc_otp_if_configuration.svh" + `include "src/fuse_ctrl_lc_otp_if_driver.svh" + `include "src/fuse_ctrl_lc_otp_if_monitor.svh" + + `include "src/fuse_ctrl_lc_otp_if_transaction_coverage.svh" + `include "src/fuse_ctrl_lc_otp_if_sequence_base.svh" + `include "src/fuse_ctrl_lc_otp_if_random_sequence.svh" + + `include "src/fuse_ctrl_lc_otp_if_responder_sequence.svh" + `include "src/fuse_ctrl_lc_otp_if2reg_adapter.svh" + + `include "src/fuse_ctrl_lc_otp_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.vinfo new file mode 100644 index 000000000..f712ae9b4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_lc_otp_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_lc_otp_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.sv new file mode 100644 index 000000000..a4cdc7c70 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_lc_otp_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.vinfo new file mode 100644 index 000000000..a99ea0171 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_lc_otp_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_sve.F new file mode 100644 index 000000000..950466b92 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if2reg_adapter.svh new file mode 100644 index 000000000..e9b1a7897 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_lc_otp_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_lc_otp_if2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_lc_otp_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_lc_otp_if_transaction trans_h = fuse_ctrl_lc_otp_if_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_lc_otp_if_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_lc_otp_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_agent.svh new file mode 100644 index 000000000..bc148927a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_lc_otp_if_configuration ), + .DRIVER_T(fuse_ctrl_lc_otp_if_driver ), + .MONITOR_T(fuse_ctrl_lc_otp_if_monitor ), + .COVERAGE_T(fuse_ctrl_lc_otp_if_transaction_coverage ), + .TRANS_T(fuse_ctrl_lc_otp_if_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_lc_otp_if_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_configuration.svh new file mode 100644 index 000000000..92685e229 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_lc_otp_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_lc_otp_if_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_lc_otp_if_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_lc_otp_if_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_lc_otp_if_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_lc_otp_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_CONFIGURATION_STRUCT + fuse_ctrl_lc_otp_if_configuration_s fuse_ctrl_lc_otp_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_lc_otp_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_if_configuration_struct. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_lc_otp_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_lc_otp_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_lc_otp_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_lc_otp_if_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_lc_otp_if_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_lc_otp_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_lc_otp_if_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver.svh new file mode 100644 index 000000000..d96c73f4f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_lc_otp_if_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_if_driver_bfm ), + .REQ(fuse_ctrl_lc_otp_if_transaction ), + .RSP(fuse_ctrl_lc_otp_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_if_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_lc_otp_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_lc_otp_if_driver_bfm. +`fuse_ctrl_lc_otp_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_if_initiator_s fuse_ctrl_lc_otp_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_lc_otp_if_driver_bfm. +`fuse_ctrl_lc_otp_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_if_responder_s fuse_ctrl_lc_otp_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_lc_otp_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_lc_otp_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_lc_otp_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_lc_otp_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver_bfm.sv new file mode 100644 index 000000000..5675f3b6c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver_bfm.sv @@ -0,0 +1,321 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_lc_otp_if signal driving. It is +// accessed by the uvm fuse_ctrl_lc_otp_if driver through a virtual interface +// handle in the fuse_ctrl_lc_otp_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_lc_otp_if_if. +// +// Input signals from the fuse_ctrl_lc_otp_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_lc_otp_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_if_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_if_macros.svh" + +interface fuse_ctrl_lc_otp_if_driver_bfm + (fuse_ctrl_lc_otp_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_i; + reg [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_o = 'bz; + tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_i; + reg [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.lc_otp_vendor_test_i = (initiator_responder == INITIATOR) ? lc_otp_vendor_test_i_o : 'bz; + assign lc_otp_vendor_test_i_i = bus.lc_otp_vendor_test_i; + assign bus.lc_otp_program_i = (initiator_responder == INITIATOR) ? lc_otp_program_i_o : 'bz; + assign lc_otp_program_i_i = bus.lc_otp_program_i; + assign bus.lc_dft_en_i = (initiator_responder == INITIATOR) ? lc_dft_en_i_o : 'bz; + assign lc_dft_en_i_i = bus.lc_dft_en_i; + assign bus.lc_escalate_en_i = (initiator_responder == INITIATOR) ? lc_escalate_en_i_o : 'bz; + assign lc_escalate_en_i_i = bus.lc_escalate_en_i; + assign bus.lc_check_byp_en_i = (initiator_responder == INITIATOR) ? lc_check_byp_en_i_o : 'bz; + assign lc_check_byp_en_i_i = bus.lc_check_byp_en_i; + + // Proxy handle to UVM driver + fuse_ctrl_lc_otp_if_pkg::fuse_ctrl_lc_otp_if_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_lc_otp_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_lc_otp_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_lc_otp_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_if_driver_bfm. + `fuse_ctrl_lc_otp_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_if_driver_bfm. + `fuse_ctrl_lc_otp_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + lc_otp_vendor_test_i_o <= 'bz; + lc_otp_program_i_o <= 'bz; + lc_dft_en_i_o <= 'bz; + lc_escalate_en_i_o <= 'bz; + lc_check_byp_en_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_lc_otp_if_configuration_s fuse_ctrl_lc_otp_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_lc_otp_if_initiator_s fuse_ctrl_lc_otp_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_lc_otp_if_responder_s fuse_ctrl_lc_otp_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_lc_otp_if_initiator_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Members within the fuse_ctrl_lc_otp_if_responder_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + initiator_struct = fuse_ctrl_lc_otp_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // lc_otp_vendor_test_i_o <= fuse_ctrl_lc_otp_if_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // lc_otp_program_i_o <= fuse_ctrl_lc_otp_if_initiator_struct.xyz; // [$bits(lc_otp_program_req_t)-1:0] + // lc_dft_en_i_o <= fuse_ctrl_lc_otp_if_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // lc_escalate_en_i_o <= fuse_ctrl_lc_otp_if_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // lc_check_byp_en_i_o <= fuse_ctrl_lc_otp_if_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_lc_otp_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_lc_otp_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_lc_otp_if_initiator_s fuse_ctrl_lc_otp_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_lc_otp_if_responder_s fuse_ctrl_lc_otp_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_lc_otp_if_initiator_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Variables within the fuse_ctrl_lc_otp_if_responder_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_lc_otp_if_responder_struct.xyz = lc_otp_vendor_test_i_i; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // fuse_ctrl_lc_otp_if_responder_struct.xyz = lc_otp_program_i_i; // [$bits(lc_otp_program_req_t)-1:0] + // fuse_ctrl_lc_otp_if_responder_struct.xyz = lc_dft_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_if_responder_struct.xyz = lc_escalate_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_if_responder_struct.xyz = lc_check_byp_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_lc_otp_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_lc_otp_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_if.sv new file mode 100644 index 000000000..523ae029b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_if.sv @@ -0,0 +1,98 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_lc_otp_if interface signals. +// It is instantiated once per fuse_ctrl_lc_otp_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_lc_otp_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_lc_otp_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_lc_otp_if_bus.lc_otp_vendor_test_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_if_bus.lc_otp_program_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_if_bus.lc_dft_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_if_bus.lc_escalate_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_if_bus.lc_check_byp_en_i), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_if_pkg_hdl::*; + +interface fuse_ctrl_lc_otp_if_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i, + inout tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_i, + input lc_otp_program_i, + input lc_dft_en_i, + input lc_escalate_en_i, + input lc_check_byp_en_i + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output lc_otp_vendor_test_i, + output lc_otp_program_i, + output lc_dft_en_i, + output lc_escalate_en_i, + output lc_check_byp_en_i + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_i, + input lc_otp_program_i, + input lc_dft_en_i, + input lc_escalate_en_i, + input lc_check_byp_en_i + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_macros.svh new file mode 100644 index 000000000..98f551beb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_macros.svh @@ -0,0 +1,153 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_lc_otp_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_lc_otp_if_configuration class. +// + `define fuse_ctrl_lc_otp_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_lc_otp_if_configuration_s; + + `define fuse_ctrl_lc_otp_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_if_configuration_s to_struct();\ + fuse_ctrl_lc_otp_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_lc_otp_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_lc_otp_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_lc_otp_if_configuration_s fuse_ctrl_lc_otp_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_lc_otp_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_lc_otp_if_transaction class. +// + `define fuse_ctrl_lc_otp_if_MONITOR_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_if_monitor_s; + + `define fuse_ctrl_lc_otp_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_if_monitor_s to_monitor_struct();\ + fuse_ctrl_lc_otp_if_monitor_struct = \ + { \ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_lc_otp_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_lc_otp_if_monitor_s fuse_ctrl_lc_otp_if_monitor_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_lc_otp_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_if_INITIATOR_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_if_initiator_s; + + `define fuse_ctrl_lc_otp_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_if_initiator_s to_initiator_struct();\ + fuse_ctrl_lc_otp_if_initiator_struct = \ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_lc_otp_if_initiator_s fuse_ctrl_lc_otp_if_initiator_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_lc_otp_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_if_RESPONDER_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_if_responder_s; + + `define fuse_ctrl_lc_otp_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_if_responder_s to_responder_struct();\ + fuse_ctrl_lc_otp_if_responder_struct = \ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_if_responder_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_lc_otp_if_responder_s fuse_ctrl_lc_otp_if_responder_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor.svh new file mode 100644 index 000000000..cbf67060e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_lc_otp_if transactions observed by the +// fuse_ctrl_lc_otp_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_lc_otp_if_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_if_monitor_bfm ), + .TRANS_T(fuse_ctrl_lc_otp_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_if_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_lc_otp_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_lc_otp_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_lc_otp_if_monitor_s fuse_ctrl_lc_otp_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_lc_otp_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor_bfm.sv new file mode 100644 index 000000000..8ac6ebeac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor_bfm.sv @@ -0,0 +1,202 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_lc_otp_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_lc_otp_if monitor through a virtual +// interface handle in the fuse_ctrl_lc_otp_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_lc_otp_if_if. +// +// Input signals from the fuse_ctrl_lc_otp_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_lc_otp_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_if_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_if_macros.svh" + + +interface fuse_ctrl_lc_otp_if_monitor_bfm + ( fuse_ctrl_lc_otp_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_lc_otp_if_MONITOR_STRUCT + fuse_ctrl_lc_otp_if_monitor_s fuse_ctrl_lc_otp_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_lc_otp_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_i; + tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign lc_otp_vendor_test_i_i = bus.lc_otp_vendor_test_i; + assign lc_otp_program_i_i = bus.lc_otp_program_i; + assign lc_dft_en_i_i = bus.lc_dft_en_i; + assign lc_escalate_en_i_i = bus.lc_escalate_en_i; + assign lc_check_byp_en_i_i = bus.lc_check_byp_en_i; + + // Proxy handle to UVM monitor + fuse_ctrl_lc_otp_if_pkg::fuse_ctrl_lc_otp_if_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_lc_otp_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_lc_otp_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_lc_otp_if_configuration_s fuse_ctrl_lc_otp_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_lc_otp_if_monitor_s fuse_ctrl_lc_otp_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_lc_otp_if_monitor_struct.lc_dft_en_i + // // fuse_ctrl_lc_otp_if_monitor_struct.lc_escalate_en_i + // // fuse_ctrl_lc_otp_if_monitor_struct.lc_check_byp_en_i + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_lc_otp_if_monitor_struct.xyz = lc_otp_vendor_test_i_i; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // fuse_ctrl_lc_otp_if_monitor_struct.xyz = lc_otp_program_i_i; // [$bits(lc_otp_program_req_t)-1:0] + // fuse_ctrl_lc_otp_if_monitor_struct.xyz = lc_dft_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_if_monitor_struct.xyz = lc_escalate_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_if_monitor_struct.xyz = lc_check_byp_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_random_sequence.svh new file mode 100644 index 000000000..0fce942fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_lc_otp_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_lc_otp_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_random_sequence + extends fuse_ctrl_lc_otp_if_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_if_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_lc_otp_if_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_lc_otp_if_random_sequence::body()-fuse_ctrl_lc_otp_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_lc_otp_if_driver_bfm via the sequencer and fuse_ctrl_lc_otp_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_lc_otp_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_responder_sequence.svh new file mode 100644 index 000000000..8636e02b0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_responder_sequence + extends fuse_ctrl_lc_otp_if_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_if_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_lc_otp_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_lc_otp_if_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_sequence_base.svh new file mode 100644 index 000000000..3be42a152 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_lc_otp_if_transaction ), + .RSP(fuse_ctrl_lc_otp_if_transaction )); + + `uvm_object_utils( fuse_ctrl_lc_otp_if_sequence_base ) + + // variables + typedef fuse_ctrl_lc_otp_if_transaction fuse_ctrl_lc_otp_if_transaction_req_t; + fuse_ctrl_lc_otp_if_transaction_req_t req; + typedef fuse_ctrl_lc_otp_if_transaction fuse_ctrl_lc_otp_if_transaction_rsp_t; + fuse_ctrl_lc_otp_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_lc_otp_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_lc_otp_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction.svh new file mode 100644 index 000000000..695d6b043 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction.svh @@ -0,0 +1,201 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_lc_otp_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_lc_otp_if_transaction ) + + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_lc_otp_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_lc_otp_if_monitor and fuse_ctrl_lc_otp_if_monitor_bfm + // This struct is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_MONITOR_STRUCT + fuse_ctrl_lc_otp_if_monitor_s fuse_ctrl_lc_otp_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_if_monitor_struct. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_if_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_if_initiator_s fuse_ctrl_lc_otp_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_if_initiator_struct. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_if_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_if_responder_s fuse_ctrl_lc_otp_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_if_responder_struct. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("lc_dft_en_i:0x%x lc_escalate_en_i:0x%x lc_check_byp_en_i:0x%x ",lc_dft_en_i,lc_escalate_en_i,lc_check_byp_en_i); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_lc_otp_if_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_lc_otp_if_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.lc_dft_en_i = RHS.lc_dft_en_i; + this.lc_escalate_en_i = RHS.lc_escalate_en_i; + this.lc_check_byp_en_i = RHS.lc_check_byp_en_i; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_lc_otp_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,lc_dft_en_i,"lc_dft_en_i"); + $add_attribute(transaction_view_h,lc_escalate_en_i,"lc_escalate_en_i"); + $add_attribute(transaction_view_h,lc_check_byp_en_i,"lc_check_byp_en_i"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction_coverage.svh new file mode 100644 index 000000000..d0cfad043 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction_coverage.svh @@ -0,0 +1,86 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_lc_otp_if transaction information using +// a covergroup named fuse_ctrl_lc_otp_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_lc_otp_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_if_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_lc_otp_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + lc_dft_en_i: coverpoint coverage_trans.lc_dft_en_i; + lc_escalate_en_i: coverpoint coverage_trans.lc_escalate_en_i; + lc_check_byp_en_i: coverpoint coverage_trans.lc_check_byp_en_i; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_lc_otp_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_lc_otp_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_lc_otp_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/yaml/fuse_ctrl_lc_otp_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/yaml/fuse_ctrl_lc_otp_if_interface.yaml new file mode 100644 index 000000000..d24f3aef1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/yaml/fuse_ctrl_lc_otp_if_interface.yaml @@ -0,0 +1,57 @@ +uvmf: + interfaces: + fuse_ctrl_lc_otp_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: output + name: lc_otp_vendor_test_i + reset_value: '''bz' + width: '[''$bits(lc_otp_vendor_test_req_t)'']' + - dir: output + name: lc_otp_program_i + reset_value: '''bz' + width: '[''$bits(lc_otp_program_req_t)'']' + - dir: output + name: lc_dft_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + - dir: output + name: lc_escalate_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + - dir: output + name: lc_check_byp_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_dft_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_escalate_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_check_byp_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/.project new file mode 100644 index 000000000..c96dcb429 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/.svproject new file mode 100644 index 000000000..64d224ae5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/Makefile new file mode 100644 index 000000000..b5ee9df5a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f + +fuse_ctrl_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f + +fuse_ctrl_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f + +COMP_fuse_ctrl_out_PKG_TGT_0 = q_comp_fuse_ctrl_out_pkg +COMP_fuse_ctrl_out_PKG_TGT_1 = v_comp_fuse_ctrl_out_pkg +COMP_fuse_ctrl_out_PKG_TGT = $(COMP_fuse_ctrl_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_out_pkg: $(COMP_fuse_ctrl_out_PKG_TGT) + +q_comp_fuse_ctrl_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_out_PKG_XRTL) + +v_comp_fuse_ctrl_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_out_pkg += -I$(fuse_ctrl_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_out_pkg += $(fuse_ctrl_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/compile.do new file mode 100644 index 000000000..5fdaafcd1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile new file mode 100644 index 000000000..3ac4b243e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_out_hvl.compile + - fuse_ctrl_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo new file mode 100644 index 000000000..b4ea5985b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_out_if.sv +src/fuse_ctrl_out_driver_bfm.sv +src/fuse_ctrl_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_common.compile new file mode 100644 index 000000000..1193b2509 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f new file mode 100644 index 000000000..5be27730e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f new file mode 100644 index 000000000..fc769adb0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f new file mode 100644 index 000000000..4a7b8cc2b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hdl.compile new file mode 100644 index 000000000..2745ad2a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_out_if.sv + - src/fuse_ctrl_out_monitor_bfm.sv + - src/fuse_ctrl_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hvl.compile new file mode 100644 index 000000000..5562a204a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_out_common.compile +incdir: + - . +src: + - fuse_ctrl_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv new file mode 100644 index 000000000..afb8df957 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_out_macros.svh" + + export fuse_ctrl_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_out_typedefs.svh" + `include "src/fuse_ctrl_out_transaction.svh" + + `include "src/fuse_ctrl_out_configuration.svh" + `include "src/fuse_ctrl_out_driver.svh" + `include "src/fuse_ctrl_out_monitor.svh" + + `include "src/fuse_ctrl_out_transaction_coverage.svh" + `include "src/fuse_ctrl_out_sequence_base.svh" + `include "src/fuse_ctrl_out_random_sequence.svh" + + `include "src/fuse_ctrl_out_responder_sequence.svh" + `include "src/fuse_ctrl_out2reg_adapter.svh" + + `include "src/fuse_ctrl_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo new file mode 100644 index 000000000..4f08c9ef3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.sv new file mode 100644 index 000000000..f90777afe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.vinfo new file mode 100644 index 000000000..c55df62d8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F new file mode 100644 index 000000000..94ccd9b8b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out2reg_adapter.svh new file mode 100644 index 000000000..c13afeb59 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out2reg_adapter #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_out2reg_adapter #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h = fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_agent.svh new file mode 100644 index 000000000..64fcd3c17 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_agent #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_out_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .DRIVER_T(fuse_ctrl_out_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_T(fuse_ctrl_out_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .COVERAGE_T(fuse_ctrl_out_transaction_coverage #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_out_agent #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_configuration.svh new file mode 100644 index 000000000..52338d1e5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_configuration #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_out_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_out_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_out_configuration #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_CONFIGURATION_STRUCT + fuse_ctrl_out_configuration_s fuse_ctrl_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_out_configuration_struct. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_out_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_out_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", agent_path, interface_name, AlertSyncOn ,RndConstLfrSeed ,RndCnstLfsrPerm ,MemInitFile ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_out_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver.svh new file mode 100644 index 000000000..ec2f7b4ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_driver #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_out_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_out_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .REQ(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .RSP(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_out_driver #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_out_driver_bfm. +`fuse_ctrl_out_INITIATOR_STRUCT + fuse_ctrl_out_initiator_s fuse_ctrl_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_out_driver_bfm. +`fuse_ctrl_out_RESPONDER_STRUCT + fuse_ctrl_out_responder_s fuse_ctrl_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver_bfm.sv new file mode 100644 index 000000000..95bd96316 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver_bfm.sv @@ -0,0 +1,394 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_out signal driving. It is +// accessed by the uvm fuse_ctrl_out driver through a virtual interface +// handle in the fuse_ctrl_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_out_if. +// +// Input signals from the fuse_ctrl_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_pkg_hdl::*; +`include "src/fuse_ctrl_out_macros.svh" + +interface fuse_ctrl_out_driver_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + (fuse_ctrl_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o_i; + reg [$bits(edn_pkg::edn_req_t)-1:0] edn_o_o = 'bz; + tri intr_otp_operation_done_o_i; + reg intr_otp_operation_done_o_o = 'bz; + tri intr_otp_error_o_i; + reg intr_otp_error_o_o = 'bz; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_i; + reg [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_o = 'bz; + tri [7:0] otp_obs_o_i; + reg [7:0] otp_obs_o_o = 'bz; + tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_i; + reg [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_o = 'bz; + tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_i; + reg [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_o = 'bz; + tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_i; + reg [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_o = 'bz; + tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_i; + reg [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_o = 'bz; + tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_i; + reg [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_o = 'bz; + tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_i; + reg [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_o = 'bz; + tri [OtpTestVectWidth-1:0] cio_test_o_i; + reg [OtpTestVectWidth-1:0] cio_test_o_o = 'bz; + tri [OtpTestVectWidth-1:0] cio_test_en_o_i; + reg [OtpTestVectWidth-1:0] cio_test_en_o_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + tri otp_ext_voltage_h_io_i; + reg otp_ext_voltage_h_io_o = 'bz; + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign edn_o_i = bus.edn_o; + assign bus.edn_o = (initiator_responder == RESPONDER) ? edn_o_o : 'bz; + assign intr_otp_operation_done_o_i = bus.intr_otp_operation_done_o; + assign bus.intr_otp_operation_done_o = (initiator_responder == RESPONDER) ? intr_otp_operation_done_o_o : 'bz; + assign intr_otp_error_o_i = bus.intr_otp_error_o; + assign bus.intr_otp_error_o = (initiator_responder == RESPONDER) ? intr_otp_error_o_o : 'bz; + assign alert_tx_o_i = bus.alert_tx_o; + assign bus.alert_tx_o = (initiator_responder == RESPONDER) ? alert_tx_o_o : 'bz; + assign otp_obs_o_i = bus.otp_obs_o; + assign bus.otp_obs_o = (initiator_responder == RESPONDER) ? otp_obs_o_o : 'bz; + assign otp_ast_pwr_seq_o_i = bus.otp_ast_pwr_seq_o; + assign bus.otp_ast_pwr_seq_o = (initiator_responder == RESPONDER) ? otp_ast_pwr_seq_o_o : 'bz; + assign pwr_otp_o_i = bus.pwr_otp_o; + assign bus.pwr_otp_o = (initiator_responder == RESPONDER) ? pwr_otp_o_o : 'bz; + assign lc_otp_vendor_test_o_i = bus.lc_otp_vendor_test_o; + assign bus.lc_otp_vendor_test_o = (initiator_responder == RESPONDER) ? lc_otp_vendor_test_o_o : 'bz; + assign lc_otp_program_o_i = bus.lc_otp_program_o; + assign bus.lc_otp_program_o = (initiator_responder == RESPONDER) ? lc_otp_program_o_o : 'bz; + assign otp_lc_data_o_i = bus.otp_lc_data_o; + assign bus.otp_lc_data_o = (initiator_responder == RESPONDER) ? otp_lc_data_o_o : 'bz; + assign otp_broadcast_o_i = bus.otp_broadcast_o; + assign bus.otp_broadcast_o = (initiator_responder == RESPONDER) ? otp_broadcast_o_o : 'bz; + assign cio_test_o_i = bus.cio_test_o; + assign bus.cio_test_o = (initiator_responder == RESPONDER) ? cio_test_o_o : 'bz; + assign cio_test_en_o_i = bus.cio_test_en_o; + assign bus.cio_test_en_o = (initiator_responder == RESPONDER) ? cio_test_en_o_o : 'bz; + + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.otp_ext_voltage_h_io = otp_ext_voltage_h_io_o; + + // Proxy handle to UVM driver + fuse_ctrl_out_pkg::fuse_ctrl_out_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_out_driver_bfm. + `fuse_ctrl_out_INITIATOR_STRUCT + fuse_ctrl_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_out_driver_bfm. + `fuse_ctrl_out_RESPONDER_STRUCT + fuse_ctrl_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + edn_o_o <= 'bz; + intr_otp_operation_done_o_o <= 'bz; + intr_otp_error_o_o <= 'bz; + alert_tx_o_o <= 'bz; + otp_obs_o_o <= 'bz; + otp_ast_pwr_seq_o_o <= 'bz; + pwr_otp_o_o <= 'bz; + lc_otp_vendor_test_o_o <= 'bz; + lc_otp_program_o_o <= 'bz; + otp_lc_data_o_o <= 'bz; + otp_broadcast_o_o <= 'bz; + cio_test_o_o <= 'bz; + cio_test_en_o_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + otp_ext_voltage_h_io_o <= 'bz; + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_out_configuration_s fuse_ctrl_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_out_initiator_s fuse_ctrl_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_out_responder_s fuse_ctrl_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_out_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Members within the fuse_ctrl_out_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + initiator_struct = fuse_ctrl_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_out_responder_struct.xyz = edn_o_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = intr_otp_operation_done_o_i; // + // fuse_ctrl_out_responder_struct.xyz = intr_otp_error_o_i; // + // fuse_ctrl_out_responder_struct.xyz = alert_tx_o_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = otp_obs_o_i; // [7:0] + // fuse_ctrl_out_responder_struct.xyz = otp_ast_pwr_seq_o_i; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = pwr_otp_o_i; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = lc_otp_vendor_test_o_i; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = lc_otp_program_o_i; // [$bits(lc_otp_program_rsp_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = otp_lc_data_o_i; // [$bits(otp_lc_data_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = otp_broadcast_o_i; // [$bits(otp_broadcast_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = cio_test_o_i; // [OtpTestVectWidth-1:0] + // fuse_ctrl_out_responder_struct.xyz = cio_test_en_o_i; // [OtpTestVectWidth-1:0] + // Initiator inout signals + // fuse_ctrl_out_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_out_initiator_struct.xyz; // + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_out_initiator_s fuse_ctrl_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_out_responder_s fuse_ctrl_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_out_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Variables within the fuse_ctrl_out_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // fuse_ctrl_out_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // edn_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(edn_pkg::edn_req_t)-1:0] + // intr_otp_operation_done_o_o <= fuse_ctrl_out_initiator_struct.xyz; // + // intr_otp_error_o_o <= fuse_ctrl_out_initiator_struct.xyz; // + // alert_tx_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // otp_obs_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [7:0] + // otp_ast_pwr_seq_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // pwr_otp_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // lc_otp_vendor_test_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // lc_otp_program_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(lc_otp_program_rsp_t)-1:0] + // otp_lc_data_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(otp_lc_data_t)-1:0] + // otp_broadcast_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(otp_broadcast_t)-1:0] + // cio_test_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [OtpTestVectWidth-1:0] + // cio_test_en_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [OtpTestVectWidth-1:0] + // Responder inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_out_initiator_struct.xyz; // + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv new file mode 100644 index 000000000..8425da82c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv @@ -0,0 +1,149 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_out interface signals. +// It is instantiated once per fuse_ctrl_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_out_bus.edn_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.intr_otp_operation_done_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.intr_otp_error_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.alert_tx_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.otp_obs_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.otp_ast_pwr_seq_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.pwr_otp_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.lc_otp_vendor_test_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.lc_otp_program_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.otp_lc_data_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.otp_broadcast_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.otp_ext_voltage_h_io), // Agent inout +// .dut_signal_port(fuse_ctrl_out_bus.cio_test_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.cio_test_en_o), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_pkg_hdl::*; + +interface fuse_ctrl_out_if #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o, + inout tri intr_otp_operation_done_o, + inout tri intr_otp_error_o, + inout tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o, + inout tri [7:0] otp_obs_o, + inout tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o, + inout tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o, + inout tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o, + inout tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o, + inout tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o, + inout tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o, + inout tri otp_ext_voltage_h_io, + inout tri [OtpTestVectWidth-1:0] cio_test_o, + inout tri [OtpTestVectWidth-1:0] cio_test_en_o + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input edn_o, + input intr_otp_operation_done_o, + input intr_otp_error_o, + input alert_tx_o, + input otp_obs_o, + input otp_ast_pwr_seq_o, + input pwr_otp_o, + input lc_otp_vendor_test_o, + input lc_otp_program_o, + input otp_lc_data_o, + input otp_broadcast_o, + input otp_ext_voltage_h_io, + input cio_test_o, + input cio_test_en_o + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input edn_o, + input intr_otp_operation_done_o, + input intr_otp_error_o, + input alert_tx_o, + input otp_obs_o, + input otp_ast_pwr_seq_o, + input pwr_otp_o, + input lc_otp_vendor_test_o, + input lc_otp_program_o, + input otp_lc_data_o, + input otp_broadcast_o, + inout otp_ext_voltage_h_io, + input cio_test_o, + input cio_test_en_o + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output edn_o, + output intr_otp_operation_done_o, + output intr_otp_error_o, + output alert_tx_o, + output otp_obs_o, + output otp_ast_pwr_seq_o, + output pwr_otp_o, + output lc_otp_vendor_test_o, + output lc_otp_program_o, + output otp_lc_data_o, + output otp_broadcast_o, + inout otp_ext_voltage_h_io, + output cio_test_o, + output cio_test_en_o + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_macros.svh new file mode 100644 index 000000000..ee0b9ef48 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_macros.svh @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_out_configuration class. +// + `define fuse_ctrl_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_out_configuration_s; + + `define fuse_ctrl_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_configuration_s to_struct();\ + fuse_ctrl_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_out_configuration_s fuse_ctrl_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_out_transaction class. +// + `define fuse_ctrl_out_MONITOR_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_monitor_s; + + `define fuse_ctrl_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_monitor_s to_monitor_struct();\ + fuse_ctrl_out_monitor_struct = \ + { \ + this.otp_lc_data_o , \ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_out_monitor_s fuse_ctrl_out_monitor_struct);\ + {\ + this.otp_lc_data_o , \ + this.pwr_otp_o \ + } = fuse_ctrl_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_out_INITIATOR_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_initiator_s; + + `define fuse_ctrl_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_initiator_s to_initiator_struct();\ + fuse_ctrl_out_initiator_struct = \ + {\ + this.otp_lc_data_o , \ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_out_initiator_s fuse_ctrl_out_initiator_struct);\ + {\ + this.otp_lc_data_o , \ + this.pwr_otp_o \ + } = fuse_ctrl_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_out_RESPONDER_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_responder_s; + + `define fuse_ctrl_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_responder_s to_responder_struct();\ + fuse_ctrl_out_responder_struct = \ + {\ + this.otp_lc_data_o , \ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_responder_struct);\ + endfunction + + `define fuse_ctrl_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_out_responder_s fuse_ctrl_out_responder_struct);\ + {\ + this.otp_lc_data_o , \ + this.pwr_otp_o \ + } = fuse_ctrl_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor.svh new file mode 100644 index 000000000..9f967f63b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_out transactions observed by the +// fuse_ctrl_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_monitor #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_out_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_out_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_out_monitor #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_out_monitor_s fuse_ctrl_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor_bfm.sv new file mode 100644 index 000000000..ff16a1311 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor_bfm.sv @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_out monitor through a virtual +// interface handle in the fuse_ctrl_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_out_if. +// +// Input signals from the fuse_ctrl_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_pkg_hdl::*; +`include "src/fuse_ctrl_out_macros.svh" + + +interface fuse_ctrl_out_monitor_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + ( fuse_ctrl_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_out_MONITOR_STRUCT + fuse_ctrl_out_monitor_s fuse_ctrl_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o_i; + tri intr_otp_operation_done_o_i; + tri intr_otp_error_o_i; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_i; + tri [7:0] otp_obs_o_i; + tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_i; + tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_i; + tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_i; + tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_i; + tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_i; + tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_i; + tri otp_ext_voltage_h_io_i; + tri [OtpTestVectWidth-1:0] cio_test_o_i; + tri [OtpTestVectWidth-1:0] cio_test_en_o_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign edn_o_i = bus.edn_o; + assign intr_otp_operation_done_o_i = bus.intr_otp_operation_done_o; + assign intr_otp_error_o_i = bus.intr_otp_error_o; + assign alert_tx_o_i = bus.alert_tx_o; + assign otp_obs_o_i = bus.otp_obs_o; + assign otp_ast_pwr_seq_o_i = bus.otp_ast_pwr_seq_o; + assign pwr_otp_o_i = bus.pwr_otp_o; + assign lc_otp_vendor_test_o_i = bus.lc_otp_vendor_test_o; + assign lc_otp_program_o_i = bus.lc_otp_program_o; + assign otp_lc_data_o_i = bus.otp_lc_data_o; + assign otp_broadcast_o_i = bus.otp_broadcast_o; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + assign cio_test_o_i = bus.cio_test_o; + assign cio_test_en_o_i = bus.cio_test_en_o; + + // Proxy handle to UVM monitor + fuse_ctrl_out_pkg::fuse_ctrl_out_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_out_configuration_s fuse_ctrl_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_out_monitor_s fuse_ctrl_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_out_monitor_struct.otp_lc_data_o + // // fuse_ctrl_out_monitor_struct.pwr_otp_o + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_out_monitor_struct.xyz = edn_o_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = intr_otp_operation_done_o_i; // + // fuse_ctrl_out_monitor_struct.xyz = intr_otp_error_o_i; // + // fuse_ctrl_out_monitor_struct.xyz = alert_tx_o_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = otp_obs_o_i; // [7:0] + // fuse_ctrl_out_monitor_struct.xyz = otp_ast_pwr_seq_o_i; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = pwr_otp_o_i; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = lc_otp_vendor_test_o_i; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = lc_otp_program_o_i; // [$bits(lc_otp_program_rsp_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = otp_lc_data_o_i; // [$bits(otp_lc_data_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = otp_broadcast_o_i; // [$bits(otp_broadcast_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = otp_ext_voltage_h_io_i; // + // fuse_ctrl_out_monitor_struct.xyz = cio_test_o_i; // [OtpTestVectWidth-1:0] + // fuse_ctrl_out_monitor_struct.xyz = cio_test_en_o_i; // [OtpTestVectWidth-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_random_sequence.svh new file mode 100644 index 000000000..fa517894b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_random_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_out_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_out_random_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_out_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_out_random_sequence::body()-fuse_ctrl_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_out_driver_bfm via the sequencer and fuse_ctrl_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_responder_sequence.svh new file mode 100644 index 000000000..2dfe53b5d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_responder_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_out_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_out_responder_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_out_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_sequence_base.svh new file mode 100644 index 000000000..d115821b5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_sequence_base #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .RSP(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_out_sequence_base #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // variables + typedef fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_out_transaction_req_t; + fuse_ctrl_out_transaction_req_t req; + typedef fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_out_transaction_rsp_t; + fuse_ctrl_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction.svh new file mode 100644 index 000000000..2326cb59b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction.svh @@ -0,0 +1,224 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_transaction #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_out_transaction #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + otp_lc_data_t otp_lc_data_o ; + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_out_monitor and fuse_ctrl_out_monitor_bfm + // This struct is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_MONITOR_STRUCT + fuse_ctrl_out_monitor_s fuse_ctrl_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_out_monitor_struct. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_out_driver_bfm. + // This struct is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_INITIATOR_STRUCT + fuse_ctrl_out_initiator_s fuse_ctrl_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_out_initiator_struct. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_out_driver_bfm. + // This struct is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_RESPONDER_STRUCT + fuse_ctrl_out_responder_s fuse_ctrl_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_out_responder_struct. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("otp_lc_data_o:0x%x pwr_otp_o:0x%x ",otp_lc_data_o,pwr_otp_o); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.otp_lc_data_o == RHS.otp_lc_data_o) + &&(this.pwr_otp_o == RHS.pwr_otp_o) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.otp_lc_data_o = RHS.otp_lc_data_o; + this.pwr_otp_o = RHS.pwr_otp_o; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,otp_lc_data_o,"otp_lc_data_o"); + $add_attribute(transaction_view_h,pwr_otp_o,"pwr_otp_o"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction_coverage.svh new file mode 100644 index 000000000..2233f6d7e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction_coverage.svh @@ -0,0 +1,103 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_out transaction information using +// a covergroup named fuse_ctrl_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_transaction_coverage #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_subscriber #(.T(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_out_transaction_coverage #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + otp_lc_data_o: coverpoint coverage_trans.otp_lc_data_o; + pwr_otp_o: coverpoint coverage_trans.pwr_otp_o; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/yaml/fuse_ctrl_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/yaml/fuse_ctrl_out_interface.yaml new file mode 100644 index 000000000..0b1df0b61 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_out_pkg/yaml/fuse_ctrl_out_interface.yaml @@ -0,0 +1,98 @@ +uvmf: + interfaces: + fuse_ctrl_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AlertSyncOn + type: int + value: '3' + - name: RndConstLfrSeed + type: lfsr_seed_t + value: RndConstLfsrSeedDefault + - name: RndCnstLfsrPerm + type: lsfr_perm_t + value: RndCnstLfsrPermDefault + - name: MemInitFile + type: string + ports: + - dir: input + name: edn_o + reset_value: '''bz' + width: '[''$bits(edn_pkg::edn_req_t)'']' + - dir: input + name: intr_otp_operation_done_o + reset_value: '''bz' + width: '1' + - dir: input + name: intr_otp_error_o + reset_value: '''bz' + width: '1' + - dir: input + name: alert_tx_o + reset_value: '''bz' + width: '[''NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)'']' + - dir: input + name: otp_obs_o + reset_value: '''bz' + width: '8' + - dir: input + name: otp_ast_pwr_seq_o + reset_value: '''bz' + width: '[''$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)'']' + - dir: input + name: pwr_otp_o + reset_value: '''bz' + width: '[''$bits(pwrmgr_pkg::pwr_otp_rsp_t)'']' + - dir: input + name: lc_otp_vendor_test_o + reset_value: '''bz' + width: '[''$bits(lc_otp_vendor_test_rsp_t)'']' + - dir: input + name: lc_otp_program_o + reset_value: '''bz' + width: '[''$bits(lc_otp_program_rsp_t)'']' + - dir: input + name: otp_lc_data_o + reset_value: '''bz' + width: '[''$bits(otp_lc_data_t)'']' + - dir: input + name: otp_broadcast_o + reset_value: '''bz' + width: '[''$bits(otp_broadcast_t)'']' + - dir: inout + name: otp_ext_voltage_h_io + reset_value: '''bz' + width: '1' + - dir: input + name: cio_test_o + reset_value: '''bz' + width: '[''OtpTestVectWidth'']' + - dir: input + name: cio_test_en_o + reset_value: '''bz' + width: '[''OtpTestVectWidth'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: otp_lc_data_o + type: otp_lc_data_t + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: pwr_otp_o + type: pwrmgr_pkg::pwr_otp_rsp_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.project new file mode 100644 index 000000000..931d0548e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..e6e385ac0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..7ce58a365 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f + +fuse_ctrl_prim_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f + +fuse_ctrl_prim_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_read_if_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_read_if_pkg +COMP_fuse_ctrl_prim_axi_read_if_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_read_if_pkg +COMP_fuse_ctrl_prim_axi_read_if_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_read_if_pkg: $(COMP_fuse_ctrl_prim_axi_read_if_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_read_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_read_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_if_pkg += -I$(fuse_ctrl_prim_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_if_pkg += $(fuse_ctrl_prim_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..5a8d38b1e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if.compile new file mode 100644 index 000000000..ce142767a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_read_if_hvl.compile + - fuse_ctrl_prim_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..5ecca257f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_read_if_if.sv +src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv +src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_common.compile new file mode 100644 index 000000000..f7bbff4b6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..3be99c24b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..f66b0809e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..0f9b2fdb7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hdl.compile new file mode 100644 index 000000000..4cb1da005 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_read_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_read_if_if.sv + - src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hvl.compile new file mode 100644 index 000000000..bd9e9530a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_read_if_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.sv new file mode 100644 index 000000000..39a398f84 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_read_if_macros.svh" + + export fuse_ctrl_prim_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_read_if_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_read_if_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_read_if_configuration.svh" + `include "src/fuse_ctrl_prim_axi_read_if_driver.svh" + `include "src/fuse_ctrl_prim_axi_read_if_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_read_if_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_read_if_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_read_if_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_read_if_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_read_if2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..9ca839db8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..150746c87 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_read_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..3b7c038b4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..6e979354a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..850d7d4dd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_agent.svh new file mode 100644 index 000000000..21263a19c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_configuration.svh new file mode 100644 index 000000000..b51d7b8f0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_read_if_configuration_s fuse_ctrl_prim_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_read_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_if_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_read_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver.svh new file mode 100644 index 000000000..e414a4883 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. +`fuse_ctrl_prim_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_if_initiator_s fuse_ctrl_prim_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. +`fuse_ctrl_prim_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_if_responder_s fuse_ctrl_prim_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..c519b223f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_read_if signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_read_if driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_read_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_if_macros.svh" + +interface fuse_ctrl_prim_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_read_if_pkg::fuse_ctrl_prim_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_read_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. + `fuse_ctrl_prim_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. + `fuse_ctrl_prim_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_read_if_configuration_s fuse_ctrl_prim_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_read_if_initiator_s fuse_ctrl_prim_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_read_if_responder_s fuse_ctrl_prim_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_read_if_initiator_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Members within the fuse_ctrl_prim_axi_read_if_responder_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + initiator_struct = fuse_ctrl_prim_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_read_if_initiator_s fuse_ctrl_prim_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_read_if_responder_s fuse_ctrl_prim_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_read_if_initiator_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Variables within the fuse_ctrl_prim_axi_read_if_responder_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arlock_i; // + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_if.sv new file mode 100644 index 000000000..e1e4911a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_read_if interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_read_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_if_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_macros.svh new file mode 100644 index 000000000..9aa71c06e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_read_if_configuration class. +// + `define fuse_ctrl_prim_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_read_if_configuration_s; + + `define fuse_ctrl_prim_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_if_configuration_s to_struct();\ + fuse_ctrl_prim_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_read_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_read_if_configuration_s fuse_ctrl_prim_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_read_if_transaction class. +// + `define fuse_ctrl_prim_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_if_monitor_s; + + `define fuse_ctrl_prim_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_if_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_read_if_monitor_struct = \ + { \ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_read_if_monitor_s fuse_ctrl_prim_axi_read_if_monitor_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_if_initiator_s; + + `define fuse_ctrl_prim_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_if_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_read_if_initiator_struct = \ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_read_if_initiator_s fuse_ctrl_prim_axi_read_if_initiator_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_if_responder_s; + + `define fuse_ctrl_prim_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_if_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_read_if_responder_struct = \ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_if_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_read_if_responder_s fuse_ctrl_prim_axi_read_if_responder_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor.svh new file mode 100644 index 000000000..bf0c76c81 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_read_if transactions observed by the +// fuse_ctrl_prim_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_read_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_read_if_monitor_s fuse_ctrl_prim_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..bed13faf6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_read_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_read_if monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_read_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_if_macros.svh" + + +interface fuse_ctrl_prim_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_read_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_if_monitor_s fuse_ctrl_prim_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_read_if_pkg::fuse_ctrl_prim_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_read_if_configuration_s fuse_ctrl_prim_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_read_if_monitor_s fuse_ctrl_prim_axi_read_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_araddr + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arvalid + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arburst + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arsize + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arlen + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_aruser + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arid + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arlock + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..bd8b0a768 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_read_if_random_sequence::body()-fuse_ctrl_prim_axi_read_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_read_if_driver_bfm via the sequencer and fuse_ctrl_prim_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..dd96f25d6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..0d10545bd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_if_transaction_req_t; + fuse_ctrl_prim_axi_read_if_transaction_req_t req; + typedef fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_if_transaction_rsp_t; + fuse_ctrl_prim_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction.svh new file mode 100644 index 000000000..f4f6cb786 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] prim_araddr ; + logic prim_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + logic [2:0] prim_arsize ; + logic [7:0] prim_arlen ; + logic [UW-1:0] prim_aruser ; + logic [IW-1:0] prim_arid ; + logic prim_arlock ; + logic prim_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_read_if_monitor and fuse_ctrl_prim_axi_read_if_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_if_monitor_s fuse_ctrl_prim_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_if_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_if_initiator_s fuse_ctrl_prim_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_if_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_if_responder_s fuse_ctrl_prim_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_if_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_araddr:0x%x prim_arvalid:0x%x prim_arburst:0x%x prim_arsize:0x%x prim_arlen:0x%x prim_aruser:0x%x prim_arid:0x%x prim_arlock:0x%x prim_rready:0x%x ",prim_araddr,prim_arvalid,prim_arburst,prim_arsize,prim_arlen,prim_aruser,prim_arid,prim_arlock,prim_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_araddr = RHS.prim_araddr; + this.prim_arvalid = RHS.prim_arvalid; + this.prim_arburst = RHS.prim_arburst; + this.prim_arsize = RHS.prim_arsize; + this.prim_arlen = RHS.prim_arlen; + this.prim_aruser = RHS.prim_aruser; + this.prim_arid = RHS.prim_arid; + this.prim_arlock = RHS.prim_arlock; + this.prim_rready = RHS.prim_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_araddr,"prim_araddr"); + $add_attribute(transaction_view_h,prim_arvalid,"prim_arvalid"); + $add_attribute(transaction_view_h,prim_arburst,"prim_arburst"); + $add_attribute(transaction_view_h,prim_arsize,"prim_arsize"); + $add_attribute(transaction_view_h,prim_arlen,"prim_arlen"); + $add_attribute(transaction_view_h,prim_aruser,"prim_aruser"); + $add_attribute(transaction_view_h,prim_arid,"prim_arid"); + $add_attribute(transaction_view_h,prim_arlock,"prim_arlock"); + $add_attribute(transaction_view_h,prim_rready,"prim_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..283a0b24c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_read_if transaction information using +// a covergroup named fuse_ctrl_prim_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_araddr: coverpoint coverage_trans.prim_araddr; + prim_arvalid: coverpoint coverage_trans.prim_arvalid; + prim_arburst: coverpoint coverage_trans.prim_arburst; + prim_arsize: coverpoint coverage_trans.prim_arsize; + prim_arlen: coverpoint coverage_trans.prim_arlen; + prim_aruser: coverpoint coverage_trans.prim_aruser; + prim_arid: coverpoint coverage_trans.prim_arid; + prim_arlock: coverpoint coverage_trans.prim_arlock; + prim_rready: coverpoint coverage_trans.prim_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_read_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/yaml/fuse_ctrl_prim_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/yaml/fuse_ctrl_prim_axi_read_if_interface.yaml new file mode 100644 index 000000000..a55568558 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/yaml/fuse_ctrl_prim_axi_read_if_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: prim_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.project new file mode 100644 index 000000000..1d2b3a2b3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_write_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.svproject new file mode 100644 index 000000000..378d11293 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/Makefile new file mode 100644 index 000000000..e0851422c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_write_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_write_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f + +fuse_ctrl_prim_axi_write_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f + +fuse_ctrl_prim_axi_write_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_write_if_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_write_if_pkg +COMP_fuse_ctrl_prim_axi_write_if_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_write_if_pkg +COMP_fuse_ctrl_prim_axi_write_if_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_write_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_write_if_pkg: $(COMP_fuse_ctrl_prim_axi_write_if_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_write_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_write_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_write_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_write_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_write_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_if_pkg += -I$(fuse_ctrl_prim_axi_write_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_if_pkg += $(fuse_ctrl_prim_axi_write_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_write_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/compile.do new file mode 100644 index 000000000..e542958e1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_write_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if.compile new file mode 100644 index 000000000..5809b76c4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_write_if_hvl.compile + - fuse_ctrl_prim_axi_write_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_bfm.vinfo new file mode 100644 index 000000000..6c5f5cfbb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_write_if_if.sv +src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv +src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_common.compile new file mode 100644 index 000000000..dde3d0d7f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f new file mode 100644 index 000000000..11983b34a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f new file mode 100644 index 000000000..16c93aac2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f new file mode 100644 index 000000000..8e0817f98 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hdl.compile new file mode 100644 index 000000000..ff56c3bc8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_write_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_write_if_if.sv + - src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hvl.compile new file mode 100644 index 000000000..a21321c58 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_write_if_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.sv new file mode 100644 index 000000000..886790867 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_write_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_write_if_macros.svh" + + export fuse_ctrl_prim_axi_write_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_write_if_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_write_if_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_write_if_configuration.svh" + `include "src/fuse_ctrl_prim_axi_write_if_driver.svh" + `include "src/fuse_ctrl_prim_axi_write_if_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_write_if_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_write_if_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_write_if_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_write_if_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_write_if2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_write_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.vinfo new file mode 100644 index 000000000..51f12e079 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.sv new file mode 100644 index 000000000..7998fdf63 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_write_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_write_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo new file mode 100644 index 000000000..a0dd33de5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_sve.F new file mode 100644 index 000000000..c2cbc2a56 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if2reg_adapter.svh new file mode 100644 index 000000000..3639e693b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_write_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_write_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_write_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_agent.svh new file mode 100644 index 000000000..df581f3f1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_write_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_configuration.svh new file mode 100644 index 000000000..676cfcb02 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_write_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_write_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_write_if_configuration_s fuse_ctrl_prim_axi_write_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_write_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_if_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_write_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_write_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_write_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_write_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver.svh new file mode 100644 index 000000000..55d444021 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_write_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. +`fuse_ctrl_prim_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_if_initiator_s fuse_ctrl_prim_axi_write_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. +`fuse_ctrl_prim_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_if_responder_s fuse_ctrl_prim_axi_write_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_write_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_write_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_write_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_write_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv new file mode 100644 index 000000000..b418ebbf8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv @@ -0,0 +1,429 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_write_if signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_write_if driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_write_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_write_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_write_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_if_macros.svh" + +interface fuse_ctrl_prim_axi_write_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_write_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] awaddr_i; + reg [AW-1:0] awaddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] awburst_o = 'bz; + tri [2:0] awsize_i; + reg [2:0] awsize_o = 'bz; + tri [7:0] awlen_i; + reg [7:0] awlen_o = 'bz; + tri [UW-1:0] awuser_i; + reg [UW-1:0] awuser_o = 'bz; + tri [UW-1:0] awid_i; + reg [UW-1:0] awid_o = 'bz; + tri awlock_i; + reg awlock_o = 'bz; + tri awvalid_i; + reg awvalid_o = 'bz; + tri [DW-1:0] wdata_i; + reg [DW-1:0] wdata_o = 'bz; + tri [DW/8-1:0] wstrb_i; + reg [DW/8-1:0] wstrb_o = 'bz; + tri wvalid_i; + reg wvalid_o = 'bz; + tri wlast_i; + reg wlast_o = 'bz; + tri bready_i; + reg bready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.awaddr = (initiator_responder == INITIATOR) ? awaddr_o : 'bz; + assign awaddr_i = bus.awaddr; + assign bus.awburst = (initiator_responder == INITIATOR) ? awburst_o : 'bz; + assign awburst_i = bus.awburst; + assign bus.awsize = (initiator_responder == INITIATOR) ? awsize_o : 'bz; + assign awsize_i = bus.awsize; + assign bus.awlen = (initiator_responder == INITIATOR) ? awlen_o : 'bz; + assign awlen_i = bus.awlen; + assign bus.awuser = (initiator_responder == INITIATOR) ? awuser_o : 'bz; + assign awuser_i = bus.awuser; + assign bus.awid = (initiator_responder == INITIATOR) ? awid_o : 'bz; + assign awid_i = bus.awid; + assign bus.awlock = (initiator_responder == INITIATOR) ? awlock_o : 'bz; + assign awlock_i = bus.awlock; + assign bus.awvalid = (initiator_responder == INITIATOR) ? awvalid_o : 'bz; + assign awvalid_i = bus.awvalid; + assign bus.wdata = (initiator_responder == INITIATOR) ? wdata_o : 'bz; + assign wdata_i = bus.wdata; + assign bus.wstrb = (initiator_responder == INITIATOR) ? wstrb_o : 'bz; + assign wstrb_i = bus.wstrb; + assign bus.wvalid = (initiator_responder == INITIATOR) ? wvalid_o : 'bz; + assign wvalid_i = bus.wvalid; + assign bus.wlast = (initiator_responder == INITIATOR) ? wlast_o : 'bz; + assign wlast_i = bus.wlast; + assign bus.bready = (initiator_responder == INITIATOR) ? bready_o : 'bz; + assign bready_i = bus.bready; + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_write_if_pkg::fuse_ctrl_prim_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_write_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_write_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_write_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. + `fuse_ctrl_prim_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. + `fuse_ctrl_prim_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + awaddr_o <= 'bz; + awburst_o <= 'bz; + awsize_o <= 'bz; + awlen_o <= 'bz; + awuser_o <= 'bz; + awid_o <= 'bz; + awlock_o <= 'bz; + awvalid_o <= 'bz; + wdata_o <= 'bz; + wstrb_o <= 'bz; + wvalid_o <= 'bz; + wlast_o <= 'bz; + bready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_write_if_configuration_s fuse_ctrl_prim_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_write_if_initiator_s fuse_ctrl_prim_axi_write_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_write_if_responder_s fuse_ctrl_prim_axi_write_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_write_if_initiator_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Members within the fuse_ctrl_prim_axi_write_if_responder_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + initiator_struct = fuse_ctrl_prim_axi_write_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // awaddr_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [AW-1:0] + // awburst_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // awsize_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [2:0] + // awlen_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [7:0] + // awuser_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [UW-1:0] + // awid_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [UW-1:0] + // awlock_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // + // awvalid_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // + // wdata_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [DW-1:0] + // wstrb_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [DW/8-1:0] + // wvalid_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // + // wlast_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // + // bready_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_write_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_write_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_write_if_initiator_s fuse_ctrl_prim_axi_write_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_write_if_responder_s fuse_ctrl_prim_axi_write_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_write_if_initiator_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Variables within the fuse_ctrl_prim_axi_write_if_responder_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awlock_i; // + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awvalid_i; // + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = wvalid_i; // + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = wlast_i; // + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = bready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_write_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_write_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_if.sv new file mode 100644 index 000000000..afcdb92da --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_if.sv @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_write_if interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_write_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_write_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_write_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awaddr), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awburst), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awsize), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awlen), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awuser), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awlock), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.wdata), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.wstrb), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.wvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.wlast), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.bready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_if_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_write_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] awaddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst, + inout tri [2:0] awsize, + inout tri [7:0] awlen, + inout tri [UW-1:0] awuser, + inout tri [UW-1:0] awid, + inout tri awlock, + inout tri awvalid, + inout tri [DW-1:0] wdata, + inout tri [DW/8-1:0] wstrb, + inout tri wvalid, + inout tri wlast, + inout tri bready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output awaddr, + output awburst, + output awsize, + output awlen, + output awuser, + output awid, + output awlock, + output awvalid, + output wdata, + output wstrb, + output wvalid, + output wlast, + output bready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_macros.svh new file mode 100644 index 000000000..f1a207086 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_macros.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_write_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_write_if_configuration class. +// + `define fuse_ctrl_prim_axi_write_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_write_if_configuration_s; + + `define fuse_ctrl_prim_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_if_configuration_s to_struct();\ + fuse_ctrl_prim_axi_write_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_write_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_write_if_configuration_s fuse_ctrl_prim_axi_write_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_write_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_write_if_transaction class. +// + `define fuse_ctrl_prim_axi_write_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_if_monitor_s; + + `define fuse_ctrl_prim_axi_write_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_if_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_write_if_monitor_struct = \ + { \ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_write_if_monitor_s fuse_ctrl_prim_axi_write_if_monitor_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_if_initiator_s; + + `define fuse_ctrl_prim_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_if_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_write_if_initiator_struct = \ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_write_if_initiator_s fuse_ctrl_prim_axi_write_if_initiator_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_if_responder_s; + + `define fuse_ctrl_prim_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_if_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_write_if_responder_struct = \ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_if_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_write_if_responder_s fuse_ctrl_prim_axi_write_if_responder_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor.svh new file mode 100644 index 000000000..33bf7f57e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_write_if transactions observed by the +// fuse_ctrl_prim_axi_write_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_write_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_write_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_write_if_monitor_s fuse_ctrl_prim_axi_write_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_write_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv new file mode 100644 index 000000000..909871de8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv @@ -0,0 +1,248 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_write_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_write_if monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_write_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_write_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_write_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_if_macros.svh" + + +interface fuse_ctrl_prim_axi_write_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_write_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_write_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_if_monitor_s fuse_ctrl_prim_axi_write_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_write_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] awaddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + tri [2:0] awsize_i; + tri [7:0] awlen_i; + tri [UW-1:0] awuser_i; + tri [UW-1:0] awid_i; + tri awlock_i; + tri awvalid_i; + tri [DW-1:0] wdata_i; + tri [DW/8-1:0] wstrb_i; + tri wvalid_i; + tri wlast_i; + tri bready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awaddr_i = bus.awaddr; + assign awburst_i = bus.awburst; + assign awsize_i = bus.awsize; + assign awlen_i = bus.awlen; + assign awuser_i = bus.awuser; + assign awid_i = bus.awid; + assign awlock_i = bus.awlock; + assign awvalid_i = bus.awvalid; + assign wdata_i = bus.wdata; + assign wstrb_i = bus.wstrb; + assign wvalid_i = bus.wvalid; + assign wlast_i = bus.wlast; + assign bready_i = bus.bready; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_write_if_pkg::fuse_ctrl_prim_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_write_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_write_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_write_if_configuration_s fuse_ctrl_prim_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_write_if_monitor_s fuse_ctrl_prim_axi_write_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awaddr + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awvalid + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awburst + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awsize + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awlen + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awuser + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awid + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awlock + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_wdata + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_wstrb + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_wvalid + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_wlast + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_bready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awlock_i; // + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awvalid_i; // + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = wvalid_i; // + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = wlast_i; // + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = bready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_random_sequence.svh new file mode 100644 index 000000000..8c64fb3c6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_write_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_write_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_write_if_random_sequence::body()-fuse_ctrl_prim_axi_write_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_write_if_driver_bfm via the sequencer and fuse_ctrl_prim_axi_write_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_write_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_responder_sequence.svh new file mode 100644 index 000000000..088b5cae1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_write_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_sequence_base.svh new file mode 100644 index 000000000..3dabe4d22 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_if_transaction_req_t; + fuse_ctrl_prim_axi_write_if_transaction_req_t req; + typedef fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_if_transaction_rsp_t; + fuse_ctrl_prim_axi_write_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_write_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_write_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction.svh new file mode 100644 index 000000000..168cf90d5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction.svh @@ -0,0 +1,256 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_write_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] prim_awaddr ; + logic prim_awvalid ; + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + logic [2:0] prim_awsize ; + logic [7:0] prim_awlen ; + logic [UW-1:0] prim_awuser ; + logic [IW-1:0] prim_awid ; + logic prim_awlock ; + logic [DW-1:0] prim_wdata ; + logic [DW/8 - 1:0] prim_wstrb ; + logic prim_wvalid ; + logic prim_wlast ; + logic prim_bready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_write_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_write_if_monitor and fuse_ctrl_prim_axi_write_if_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_if_monitor_s fuse_ctrl_prim_axi_write_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_if_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_if_initiator_s fuse_ctrl_prim_axi_write_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_if_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_if_responder_s fuse_ctrl_prim_axi_write_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_if_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awaddr:0x%x prim_awvalid:0x%x prim_awburst:0x%x prim_awsize:0x%x prim_awlen:0x%x prim_awuser:0x%x prim_awid:0x%x prim_awlock:0x%x prim_wdata:0x%x prim_wstrb:0x%x prim_wvalid:0x%x prim_wlast:0x%x prim_bready:0x%x ",prim_awaddr,prim_awvalid,prim_awburst,prim_awsize,prim_awlen,prim_awuser,prim_awid,prim_awlock,prim_wdata,prim_wstrb,prim_wvalid,prim_wlast,prim_bready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_wdata == RHS.prim_wdata) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awaddr = RHS.prim_awaddr; + this.prim_awvalid = RHS.prim_awvalid; + this.prim_awburst = RHS.prim_awburst; + this.prim_awsize = RHS.prim_awsize; + this.prim_awlen = RHS.prim_awlen; + this.prim_awuser = RHS.prim_awuser; + this.prim_awid = RHS.prim_awid; + this.prim_awlock = RHS.prim_awlock; + this.prim_wdata = RHS.prim_wdata; + this.prim_wstrb = RHS.prim_wstrb; + this.prim_wvalid = RHS.prim_wvalid; + this.prim_wlast = RHS.prim_wlast; + this.prim_bready = RHS.prim_bready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_write_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awaddr,"prim_awaddr"); + $add_attribute(transaction_view_h,prim_awvalid,"prim_awvalid"); + $add_attribute(transaction_view_h,prim_awburst,"prim_awburst"); + $add_attribute(transaction_view_h,prim_awsize,"prim_awsize"); + $add_attribute(transaction_view_h,prim_awlen,"prim_awlen"); + $add_attribute(transaction_view_h,prim_awuser,"prim_awuser"); + $add_attribute(transaction_view_h,prim_awid,"prim_awid"); + $add_attribute(transaction_view_h,prim_awlock,"prim_awlock"); + $add_attribute(transaction_view_h,prim_wdata,"prim_wdata"); + $add_attribute(transaction_view_h,prim_wstrb,"prim_wstrb"); + $add_attribute(transaction_view_h,prim_wvalid,"prim_wvalid"); + $add_attribute(transaction_view_h,prim_wlast,"prim_wlast"); + $add_attribute(transaction_view_h,prim_bready,"prim_bready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction_coverage.svh new file mode 100644 index 000000000..a6fbb3558 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction_coverage.svh @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_write_if transaction information using +// a covergroup named fuse_ctrl_prim_axi_write_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_write_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awaddr: coverpoint coverage_trans.prim_awaddr; + prim_awvalid: coverpoint coverage_trans.prim_awvalid; + prim_awburst: coverpoint coverage_trans.prim_awburst; + prim_awsize: coverpoint coverage_trans.prim_awsize; + prim_awlen: coverpoint coverage_trans.prim_awlen; + prim_awuser: coverpoint coverage_trans.prim_awuser; + prim_awid: coverpoint coverage_trans.prim_awid; + prim_awlock: coverpoint coverage_trans.prim_awlock; + prim_wdata: coverpoint coverage_trans.prim_wdata; + prim_wstrb: coverpoint coverage_trans.prim_wstrb; + prim_wvalid: coverpoint coverage_trans.prim_wvalid; + prim_wlast: coverpoint coverage_trans.prim_wlast; + prim_bready: coverpoint coverage_trans.prim_bready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_write_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_write_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_write_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/yaml/fuse_ctrl_prim_axi_write_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/yaml/fuse_ctrl_prim_axi_write_if_interface.yaml new file mode 100644 index 000000000..4a69d4c96 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/yaml/fuse_ctrl_prim_axi_write_if_interface.yaml @@ -0,0 +1,161 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_write_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: awaddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: awburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: awsize + reset_value: '''bz' + width: '3' + - dir: output + name: awlen + reset_value: '''bz' + width: '8' + - dir: output + name: awuser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awid + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awlock + reset_value: '''bz' + width: '1' + - dir: output + name: awvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wdata + reset_value: '''bz' + width: '[''DW'']' + - dir: output + name: wstrb + reset_value: '''bz' + width: '[''DW/8'']' + - dir: output + name: wvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wlast + reset_value: '''bz' + width: '1' + - dir: output + name: bready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: prim_awaddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awuser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wstrb + type: logic [DW/8 - 1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_bready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.project new file mode 100644 index 000000000..ffd5f9686 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_rst_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.svproject new file mode 100644 index 000000000..79beebd45 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/Makefile new file mode 100644 index 000000000..4067417f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_rst interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_rst_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f + +fuse_ctrl_rst_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f + +fuse_ctrl_rst_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f + +COMP_fuse_ctrl_rst_PKG_TGT_0 = q_comp_fuse_ctrl_rst_pkg +COMP_fuse_ctrl_rst_PKG_TGT_1 = v_comp_fuse_ctrl_rst_pkg +COMP_fuse_ctrl_rst_PKG_TGT = $(COMP_fuse_ctrl_rst_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_rst_pkg: $(COMP_fuse_ctrl_rst_PKG_TGT) + +q_comp_fuse_ctrl_rst_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_rst_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_rst_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_rst_PKG_XRTL) + +v_comp_fuse_ctrl_rst_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_rst_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_rst_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_rst_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_rst_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_rst_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_rst_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_rst_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_rst_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_rst_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_rst_pkg += -I$(fuse_ctrl_rst_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_rst_pkg += $(fuse_ctrl_rst_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_rst_pkg += \ + \ + -o .so + +comp_fuse_ctrl_rst_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_rst_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_rst_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_rst_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_rst_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/compile.do new file mode 100644 index 000000000..935ebc791 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_rst interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile new file mode 100644 index 000000000..98756cb39 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_rst_hvl.compile + - fuse_ctrl_rst_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo new file mode 100644 index 000000000..c41b1f119 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_rst_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_rst_if.sv +src/fuse_ctrl_rst_driver_bfm.sv +src/fuse_ctrl_rst_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_common.compile new file mode 100644 index 000000000..098d340ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_rst_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f new file mode 100644 index 000000000..a5e629a59 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f new file mode 100644 index 000000000..9bddd1e32 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f new file mode 100644 index 000000000..a68e85753 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hdl.compile new file mode 100644 index 000000000..5e99298f4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_rst_common.compile +incdir: + - . +src: + - src/fuse_ctrl_rst_if.sv + - src/fuse_ctrl_rst_monitor_bfm.sv + - src/fuse_ctrl_rst_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hvl.compile new file mode 100644 index 000000000..69ab1ac56 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_rst_common.compile +incdir: + - . +src: + - fuse_ctrl_rst_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv new file mode 100644 index 000000000..2ea60c87c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_rst_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_rst_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_rst_macros.svh" + + export fuse_ctrl_rst_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_rst_typedefs.svh" + `include "src/fuse_ctrl_rst_transaction.svh" + + `include "src/fuse_ctrl_rst_configuration.svh" + `include "src/fuse_ctrl_rst_driver.svh" + `include "src/fuse_ctrl_rst_monitor.svh" + + `include "src/fuse_ctrl_rst_transaction_coverage.svh" + `include "src/fuse_ctrl_rst_sequence_base.svh" + `include "src/fuse_ctrl_rst_random_sequence.svh" + + `include "src/fuse_ctrl_rst_responder_sequence.svh" + `include "src/fuse_ctrl_rst2reg_adapter.svh" + + `include "src/fuse_ctrl_rst_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo new file mode 100644 index 000000000..7efd3da90 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_rst_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_rst_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.sv new file mode 100644 index 000000000..59c4ce0d1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_rst_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_rst_typedefs_hdl.svh" + `include "src/fuse_ctrl_rst_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.vinfo new file mode 100644 index 000000000..105e5a267 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_rst_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F new file mode 100644 index 000000000..2a76484f8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst2reg_adapter.svh new file mode 100644 index 000000000..e74aaf5c8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_rst interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_rst2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_rst2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_rst_transaction trans_h = fuse_ctrl_rst_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_rst_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_rst2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_agent.svh new file mode 100644 index 000000000..3129024c4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_rst_configuration ), + .DRIVER_T(fuse_ctrl_rst_driver ), + .MONITOR_T(fuse_ctrl_rst_monitor ), + .COVERAGE_T(fuse_ctrl_rst_transaction_coverage ), + .TRANS_T(fuse_ctrl_rst_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_rst_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_configuration.svh new file mode 100644 index 000000000..2b8c3b89a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_rst agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_rst_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_rst_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_rst_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_rst_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_rst_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_CONFIGURATION_STRUCT + fuse_ctrl_rst_configuration_s fuse_ctrl_rst_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_rst_configuration_s + // structure. The function returns the handle to the fuse_ctrl_rst_configuration_struct. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_rst_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_rst_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_rst_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_rst_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_rst_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_rst_configuration_cg.set_inst_name($sformatf("fuse_ctrl_rst_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_rst_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver.svh new file mode 100644 index 000000000..c0c6921a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_rst_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_rst_driver_bfm ), + .REQ(fuse_ctrl_rst_transaction ), + .RSP(fuse_ctrl_rst_transaction )); + + `uvm_component_utils( fuse_ctrl_rst_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_rst_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm +// to communicate initiator driven data to fuse_ctrl_rst_driver_bfm. +`fuse_ctrl_rst_INITIATOR_STRUCT + fuse_ctrl_rst_initiator_s fuse_ctrl_rst_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm +// to communicate Responder driven data to fuse_ctrl_rst_driver_bfm. +`fuse_ctrl_rst_RESPONDER_STRUCT + fuse_ctrl_rst_responder_s fuse_ctrl_rst_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_rst_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_rst_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_rst_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_rst_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver_bfm.sv new file mode 100644 index 000000000..99e34af0a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver_bfm.sv @@ -0,0 +1,296 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_rst signal driving. It is +// accessed by the uvm fuse_ctrl_rst driver through a virtual interface +// handle in the fuse_ctrl_rst configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_rst_if. +// +// Input signals from the fuse_ctrl_rst_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_rst_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_rst_pkg_hdl::*; +`include "src/fuse_ctrl_rst_macros.svh" + +interface fuse_ctrl_rst_driver_bfm + (fuse_ctrl_rst_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_rst_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri rst_ni_i; + reg rst_ni_o = 'bz; + tri [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i_i; + reg [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.rst_ni = (initiator_responder == INITIATOR) ? rst_ni_o : 'bz; + assign rst_ni_i = bus.rst_ni; + assign bus.pwr_otp_i = (initiator_responder == INITIATOR) ? pwr_otp_i_o : 'bz; + assign pwr_otp_i_i = bus.pwr_otp_i; + + // Proxy handle to UVM driver + fuse_ctrl_rst_pkg::fuse_ctrl_rst_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_rst_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_rst_driver to this BFM + // **************************************************************************** + `fuse_ctrl_rst_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm + // to communicate initiator driven data to fuse_ctrl_rst_driver_bfm. + `fuse_ctrl_rst_INITIATOR_STRUCT + fuse_ctrl_rst_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm + // to communicate Responder driven data to fuse_ctrl_rst_driver_bfm. + `fuse_ctrl_rst_RESPONDER_STRUCT + fuse_ctrl_rst_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + rst_ni_o <= 'bz; + pwr_otp_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_rst_configuration_s fuse_ctrl_rst_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_rst_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_rst_initiator_s fuse_ctrl_rst_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_rst_responder_s fuse_ctrl_rst_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_rst_initiator_struct: + // bit assert_rst ; + // bit assert_otp_init ; + // Members within the fuse_ctrl_rst_responder_struct: + // bit assert_rst ; + // bit assert_otp_init ; + initiator_struct = fuse_ctrl_rst_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // rst_ni_o <= fuse_ctrl_rst_initiator_struct.xyz; // + // pwr_otp_i_o <= fuse_ctrl_rst_initiator_struct.xyz; // [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_rst_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_rst_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_rst_initiator_s fuse_ctrl_rst_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_rst_responder_s fuse_ctrl_rst_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_rst_initiator_struct: + // bit assert_rst ; + // bit assert_otp_init ; + // Variables within the fuse_ctrl_rst_responder_struct: + // bit assert_rst ; + // bit assert_otp_init ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_rst_responder_struct.xyz = rst_ni_i; // + // fuse_ctrl_rst_responder_struct.xyz = pwr_otp_i_i; // [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_rst_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_rst_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv new file mode 100644 index 000000000..086a0f954 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv @@ -0,0 +1,83 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_rst interface signals. +// It is instantiated once per fuse_ctrl_rst bus. Bus Functional Models, +// BFM's named fuse_ctrl_rst_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_rst_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_rst_bus.rst_ni), // Agent output +// .dut_signal_port(fuse_ctrl_rst_bus.pwr_otp_i), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_rst_pkg_hdl::*; + +interface fuse_ctrl_rst_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri rst_ni, + inout tri [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input rst_ni, + input pwr_otp_i + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output rst_ni, + output pwr_otp_i + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input rst_ni, + input pwr_otp_i + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_macros.svh new file mode 100644 index 000000000..dfad076e5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_macros.svh @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_rst package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_rst_configuration class. +// + `define fuse_ctrl_rst_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_rst_configuration_s; + + `define fuse_ctrl_rst_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_configuration_s to_struct();\ + fuse_ctrl_rst_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_rst_configuration_struct );\ + endfunction + + `define fuse_ctrl_rst_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_rst_configuration_s fuse_ctrl_rst_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_rst_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_rst_transaction class. +// + `define fuse_ctrl_rst_MONITOR_STRUCT typedef struct packed { \ + bit assert_rst ; \ + bit assert_otp_init ; \ + } fuse_ctrl_rst_monitor_s; + + `define fuse_ctrl_rst_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_monitor_s to_monitor_struct();\ + fuse_ctrl_rst_monitor_struct = \ + { \ + this.assert_rst , \ + this.assert_otp_init \ + };\ + return ( fuse_ctrl_rst_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_rst_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_rst_monitor_s fuse_ctrl_rst_monitor_struct);\ + {\ + this.assert_rst , \ + this.assert_otp_init \ + } = fuse_ctrl_rst_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_rst_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_rst_INITIATOR_STRUCT typedef struct packed { \ + bit assert_rst ; \ + bit assert_otp_init ; \ + } fuse_ctrl_rst_initiator_s; + + `define fuse_ctrl_rst_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_initiator_s to_initiator_struct();\ + fuse_ctrl_rst_initiator_struct = \ + {\ + this.assert_rst , \ + this.assert_otp_init \ + };\ + return ( fuse_ctrl_rst_initiator_struct);\ + endfunction + + `define fuse_ctrl_rst_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_rst_initiator_s fuse_ctrl_rst_initiator_struct);\ + {\ + this.assert_rst , \ + this.assert_otp_init \ + } = fuse_ctrl_rst_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_rst_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_rst_RESPONDER_STRUCT typedef struct packed { \ + bit assert_rst ; \ + bit assert_otp_init ; \ + } fuse_ctrl_rst_responder_s; + + `define fuse_ctrl_rst_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_responder_s to_responder_struct();\ + fuse_ctrl_rst_responder_struct = \ + {\ + this.assert_rst , \ + this.assert_otp_init \ + };\ + return ( fuse_ctrl_rst_responder_struct);\ + endfunction + + `define fuse_ctrl_rst_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_rst_responder_s fuse_ctrl_rst_responder_struct);\ + {\ + this.assert_rst , \ + this.assert_otp_init \ + } = fuse_ctrl_rst_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor.svh new file mode 100644 index 000000000..6e829b3a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_rst transactions observed by the +// fuse_ctrl_rst monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_rst_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_rst_monitor_bfm ), + .TRANS_T(fuse_ctrl_rst_transaction )); + + `uvm_component_utils( fuse_ctrl_rst_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_rst_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_rst_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_rst_monitor_s fuse_ctrl_rst_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_rst_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor_bfm.sv new file mode 100644 index 000000000..6aa8fd333 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor_bfm.sv @@ -0,0 +1,192 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_rst signal monitoring. +// It is accessed by the uvm fuse_ctrl_rst monitor through a virtual +// interface handle in the fuse_ctrl_rst configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_rst_if. +// +// Input signals from the fuse_ctrl_rst_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_rst bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_rst_pkg_hdl::*; +`include "src/fuse_ctrl_rst_macros.svh" + + +interface fuse_ctrl_rst_monitor_bfm + ( fuse_ctrl_rst_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_rst_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_rst_MONITOR_STRUCT + fuse_ctrl_rst_monitor_s fuse_ctrl_rst_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_rst_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri rst_ni_i; + tri [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign rst_ni_i = bus.rst_ni; + assign pwr_otp_i_i = bus.pwr_otp_i; + + // Proxy handle to UVM monitor + fuse_ctrl_rst_pkg::fuse_ctrl_rst_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_rst_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_rst_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_rst_configuration_s fuse_ctrl_rst_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_rst_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_rst_monitor_s fuse_ctrl_rst_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_rst_monitor_struct.assert_rst + // // fuse_ctrl_rst_monitor_struct.assert_otp_init + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_rst_monitor_struct.xyz = rst_ni_i; // + // fuse_ctrl_rst_monitor_struct.xyz = pwr_otp_i_i; // [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_random_sequence.svh new file mode 100644 index 000000000..2b719a026 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_rst transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_rst_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_random_sequence + extends fuse_ctrl_rst_sequence_base ; + + `uvm_object_utils( fuse_ctrl_rst_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_rst_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_rst_random_sequence::body()-fuse_ctrl_rst_transaction randomization failed") + // Send the transaction to the fuse_ctrl_rst_driver_bfm via the sequencer and fuse_ctrl_rst_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_rst_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_responder_sequence.svh new file mode 100644 index 000000000..85fe8a75e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_responder_sequence + extends fuse_ctrl_rst_sequence_base ; + + `uvm_object_utils( fuse_ctrl_rst_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_rst_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_rst_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_sequence_base.svh new file mode 100644 index 000000000..d6a30499e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_rst_transaction ), + .RSP(fuse_ctrl_rst_transaction )); + + `uvm_object_utils( fuse_ctrl_rst_sequence_base ) + + // variables + typedef fuse_ctrl_rst_transaction fuse_ctrl_rst_transaction_req_t; + fuse_ctrl_rst_transaction_req_t req; + typedef fuse_ctrl_rst_transaction fuse_ctrl_rst_transaction_rsp_t; + fuse_ctrl_rst_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_rst_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_rst_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction.svh new file mode 100644 index 000000000..37cf35148 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction.svh @@ -0,0 +1,198 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_rst +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_rst_transaction ) + + bit assert_rst ; + bit assert_otp_init ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_rst_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_rst_monitor and fuse_ctrl_rst_monitor_bfm + // This struct is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_MONITOR_STRUCT + fuse_ctrl_rst_monitor_s fuse_ctrl_rst_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_rst_monitor_s + // structure. The function returns the handle to the fuse_ctrl_rst_monitor_struct. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm + // to communicate initiator driven data to fuse_ctrl_rst_driver_bfm. + // This struct is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_INITIATOR_STRUCT + fuse_ctrl_rst_initiator_s fuse_ctrl_rst_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_rst_initiator_s + // structure. The function returns the handle to the fuse_ctrl_rst_initiator_struct. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm + // to communicate Responder driven data to fuse_ctrl_rst_driver_bfm. + // This struct is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_RESPONDER_STRUCT + fuse_ctrl_rst_responder_s fuse_ctrl_rst_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_rst_responder_s + // structure. The function returns the handle to the fuse_ctrl_rst_responder_struct. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("assert_rst:0x%x assert_otp_init:0x%x ",assert_rst,assert_otp_init); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_rst_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_rst_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.assert_rst = RHS.assert_rst; + this.assert_otp_init = RHS.assert_otp_init; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_rst_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,assert_rst,"assert_rst"); + $add_attribute(transaction_view_h,assert_otp_init,"assert_otp_init"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction_coverage.svh new file mode 100644 index 000000000..8bfc9decb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction_coverage.svh @@ -0,0 +1,85 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_rst transaction information using +// a covergroup named fuse_ctrl_rst_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_rst_transaction )); + + `uvm_component_utils( fuse_ctrl_rst_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_rst_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + assert_rst: coverpoint coverage_trans.assert_rst; + assert_otp_init: coverpoint coverage_trans.assert_otp_init; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_rst_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_rst_transaction_cg.set_inst_name($sformatf("fuse_ctrl_rst_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_rst_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/yaml/fuse_ctrl_rst_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/yaml/fuse_ctrl_rst_interface.yaml new file mode 100644 index 000000000..f21a4199c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_rst_pkg/yaml/fuse_ctrl_rst_interface.yaml @@ -0,0 +1,39 @@ +uvmf: + interfaces: + fuse_ctrl_rst: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: output + name: rst_ni + reset_value: '''bz' + width: '1' + - dir: output + name: pwr_otp_i + reset_value: '''bz' + width: '[''$bits(pwrmgr_pkg::pwr_otp_req_t)'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: assert_rst + type: bit + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: assert_otp_init + type: bit + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.project new file mode 100644 index 000000000..802c3e187 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_secreg_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..be911ec39 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..1eb10014e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_secreg_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_secreg_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f + +fuse_ctrl_secreg_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f + +fuse_ctrl_secreg_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f + +COMP_fuse_ctrl_secreg_axi_read_if_PKG_TGT_0 = q_comp_fuse_ctrl_secreg_axi_read_if_pkg +COMP_fuse_ctrl_secreg_axi_read_if_PKG_TGT_1 = v_comp_fuse_ctrl_secreg_axi_read_if_pkg +COMP_fuse_ctrl_secreg_axi_read_if_PKG_TGT = $(COMP_fuse_ctrl_secreg_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_secreg_axi_read_if_pkg: $(COMP_fuse_ctrl_secreg_axi_read_if_PKG_TGT) + +q_comp_fuse_ctrl_secreg_axi_read_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG_XRTL) + +v_comp_fuse_ctrl_secreg_axi_read_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_secreg_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_if_pkg += -I$(fuse_ctrl_secreg_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_if_pkg += $(fuse_ctrl_secreg_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_secreg_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..04f613c1e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_secreg_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if.compile new file mode 100644 index 000000000..ae2507ea9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_secreg_axi_read_if_hvl.compile + - fuse_ctrl_secreg_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..e97c29c20 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_secreg_axi_read_if_if.sv +src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv +src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_common.compile new file mode 100644 index 000000000..81dd659b6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..220cf1690 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..91290db0d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..3c42c25e3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hdl.compile new file mode 100644 index 000000000..a6821997e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_secreg_axi_read_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_secreg_axi_read_if_if.sv + - src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv + - src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hvl.compile new file mode 100644 index 000000000..8017b8d2c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_secreg_axi_read_if_common.compile +incdir: + - . +src: + - fuse_ctrl_secreg_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.sv new file mode 100644 index 000000000..91a38d680 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_secreg_axi_read_if_macros.svh" + + export fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_secreg_axi_read_if_typedefs.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_transaction.svh" + + `include "src/fuse_ctrl_secreg_axi_read_if_configuration.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_driver.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_monitor.svh" + + `include "src/fuse_ctrl_secreg_axi_read_if_transaction_coverage.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_sequence_base.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_random_sequence.svh" + + `include "src/fuse_ctrl_secreg_axi_read_if_responder_sequence.svh" + `include "src/fuse_ctrl_secreg_axi_read_if2reg_adapter.svh" + + `include "src/fuse_ctrl_secreg_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..3044046cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_secreg_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..e73051e81 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_secreg_axi_read_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..0009d2d8b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..ea92e98f5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..98ba3aacb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_secreg_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_secreg_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_secreg_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_agent.svh new file mode 100644 index 000000000..d2895c679 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_secreg_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_secreg_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_secreg_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_configuration.svh new file mode 100644 index 000000000..981626306 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_secreg_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_secreg_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_secreg_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_CONFIGURATION_STRUCT + fuse_ctrl_secreg_axi_read_if_configuration_s fuse_ctrl_secreg_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_secreg_axi_read_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_if_configuration_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_secreg_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_secreg_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_secreg_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_secreg_axi_read_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver.svh new file mode 100644 index 000000000..ebbf22afa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_secreg_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. +`fuse_ctrl_secreg_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_if_initiator_s fuse_ctrl_secreg_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. +`fuse_ctrl_secreg_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_if_responder_s fuse_ctrl_secreg_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_secreg_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_secreg_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_secreg_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_secreg_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..b440efec7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_secreg_axi_read_if signal driving. It is +// accessed by the uvm fuse_ctrl_secreg_axi_read_if driver through a virtual interface +// handle in the fuse_ctrl_secreg_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_secreg_axi_read_if_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_secreg_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_if_macros.svh" + +interface fuse_ctrl_secreg_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_secreg_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_secreg_axi_read_if_pkg::fuse_ctrl_secreg_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_secreg_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_secreg_axi_read_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_secreg_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. + `fuse_ctrl_secreg_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. + `fuse_ctrl_secreg_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_secreg_axi_read_if_configuration_s fuse_ctrl_secreg_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_secreg_axi_read_if_initiator_s fuse_ctrl_secreg_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_secreg_axi_read_if_responder_s fuse_ctrl_secreg_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_secreg_axi_read_if_initiator_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Members within the fuse_ctrl_secreg_axi_read_if_responder_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + initiator_struct = fuse_ctrl_secreg_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_secreg_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_secreg_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_secreg_axi_read_if_initiator_s fuse_ctrl_secreg_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_secreg_axi_read_if_responder_s fuse_ctrl_secreg_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_secreg_axi_read_if_initiator_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Variables within the fuse_ctrl_secreg_axi_read_if_responder_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arlock_i; // + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_secreg_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_secreg_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_if.sv new file mode 100644 index 000000000..91845e87d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_secreg_axi_read_if interface signals. +// It is instantiated once per fuse_ctrl_secreg_axi_read_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_secreg_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_secreg_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; + +interface fuse_ctrl_secreg_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_macros.svh new file mode 100644 index 000000000..b4d9deeba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_secreg_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_secreg_axi_read_if_configuration class. +// + `define fuse_ctrl_secreg_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_secreg_axi_read_if_configuration_s; + + `define fuse_ctrl_secreg_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_if_configuration_s to_struct();\ + fuse_ctrl_secreg_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_secreg_axi_read_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_secreg_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_secreg_axi_read_if_configuration_s fuse_ctrl_secreg_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_secreg_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_secreg_axi_read_if_transaction class. +// + `define fuse_ctrl_secreg_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_if_monitor_s; + + `define fuse_ctrl_secreg_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_if_monitor_s to_monitor_struct();\ + fuse_ctrl_secreg_axi_read_if_monitor_struct = \ + { \ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_secreg_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_secreg_axi_read_if_monitor_s fuse_ctrl_secreg_axi_read_if_monitor_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_secreg_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_if_initiator_s; + + `define fuse_ctrl_secreg_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_if_initiator_s to_initiator_struct();\ + fuse_ctrl_secreg_axi_read_if_initiator_struct = \ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_secreg_axi_read_if_initiator_s fuse_ctrl_secreg_axi_read_if_initiator_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_secreg_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_if_responder_s; + + `define fuse_ctrl_secreg_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_if_responder_s to_responder_struct();\ + fuse_ctrl_secreg_axi_read_if_responder_struct = \ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_if_responder_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_secreg_axi_read_if_responder_s fuse_ctrl_secreg_axi_read_if_responder_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor.svh new file mode 100644 index 000000000..6addcdb7b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_secreg_axi_read_if transactions observed by the +// fuse_ctrl_secreg_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_secreg_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_secreg_axi_read_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_secreg_axi_read_if_monitor_s fuse_ctrl_secreg_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_secreg_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..7bba9981c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_secreg_axi_read_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_secreg_axi_read_if monitor through a virtual +// interface handle in the fuse_ctrl_secreg_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_secreg_axi_read_if_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_secreg_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_if_macros.svh" + + +interface fuse_ctrl_secreg_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_secreg_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_secreg_axi_read_if_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_if_monitor_s fuse_ctrl_secreg_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_secreg_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_secreg_axi_read_if_pkg::fuse_ctrl_secreg_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_secreg_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_secreg_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_secreg_axi_read_if_configuration_s fuse_ctrl_secreg_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_secreg_axi_read_if_monitor_s fuse_ctrl_secreg_axi_read_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_araddr + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arvalid + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arburst + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arsize + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arlen + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_aruser + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arid + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arlock + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..648972d51 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_secreg_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_secreg_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_secreg_axi_read_if_random_sequence::body()-fuse_ctrl_secreg_axi_read_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_secreg_axi_read_if_driver_bfm via the sequencer and fuse_ctrl_secreg_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_secreg_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..709581bdd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_secreg_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..66bc21078 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_if_transaction_req_t; + fuse_ctrl_secreg_axi_read_if_transaction_req_t req; + typedef fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_if_transaction_rsp_t; + fuse_ctrl_secreg_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_secreg_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_secreg_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction.svh new file mode 100644 index 000000000..c58498d8f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_secreg_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] secreg_araddr ; + logic secreg_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + logic [2:0] secreg_arsize ; + logic [7:0] secreg_arlen ; + logic [UW-1:0] secreg_aruser ; + logic [IW-1:0] secreg_arid ; + logic secreg_arlock ; + logic secreg_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_secreg_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_secreg_axi_read_if_monitor and fuse_ctrl_secreg_axi_read_if_monitor_bfm + // This struct is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_if_monitor_s fuse_ctrl_secreg_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_if_monitor_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_if_initiator_s fuse_ctrl_secreg_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_if_initiator_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_if_responder_s fuse_ctrl_secreg_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_if_responder_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_araddr:0x%x secreg_arvalid:0x%x secreg_arburst:0x%x secreg_arsize:0x%x secreg_arlen:0x%x secreg_aruser:0x%x secreg_arid:0x%x secreg_arlock:0x%x secreg_rready:0x%x ",secreg_araddr,secreg_arvalid,secreg_arburst,secreg_arsize,secreg_arlen,secreg_aruser,secreg_arid,secreg_arlock,secreg_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_araddr = RHS.secreg_araddr; + this.secreg_arvalid = RHS.secreg_arvalid; + this.secreg_arburst = RHS.secreg_arburst; + this.secreg_arsize = RHS.secreg_arsize; + this.secreg_arlen = RHS.secreg_arlen; + this.secreg_aruser = RHS.secreg_aruser; + this.secreg_arid = RHS.secreg_arid; + this.secreg_arlock = RHS.secreg_arlock; + this.secreg_rready = RHS.secreg_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_secreg_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_araddr,"secreg_araddr"); + $add_attribute(transaction_view_h,secreg_arvalid,"secreg_arvalid"); + $add_attribute(transaction_view_h,secreg_arburst,"secreg_arburst"); + $add_attribute(transaction_view_h,secreg_arsize,"secreg_arsize"); + $add_attribute(transaction_view_h,secreg_arlen,"secreg_arlen"); + $add_attribute(transaction_view_h,secreg_aruser,"secreg_aruser"); + $add_attribute(transaction_view_h,secreg_arid,"secreg_arid"); + $add_attribute(transaction_view_h,secreg_arlock,"secreg_arlock"); + $add_attribute(transaction_view_h,secreg_rready,"secreg_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..4da8fb856 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_secreg_axi_read_if transaction information using +// a covergroup named fuse_ctrl_secreg_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_secreg_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_araddr: coverpoint coverage_trans.secreg_araddr; + secreg_arvalid: coverpoint coverage_trans.secreg_arvalid; + secreg_arburst: coverpoint coverage_trans.secreg_arburst; + secreg_arsize: coverpoint coverage_trans.secreg_arsize; + secreg_arlen: coverpoint coverage_trans.secreg_arlen; + secreg_aruser: coverpoint coverage_trans.secreg_aruser; + secreg_arid: coverpoint coverage_trans.secreg_arid; + secreg_arlock: coverpoint coverage_trans.secreg_arlock; + secreg_rready: coverpoint coverage_trans.secreg_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_secreg_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_secreg_axi_read_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_secreg_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/yaml/fuse_ctrl_secreg_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/yaml/fuse_ctrl_secreg_axi_read_if_interface.yaml new file mode 100644 index 000000000..dfcf19887 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/yaml/fuse_ctrl_secreg_axi_read_if_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_secreg_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: secreg_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/.project new file mode 100644 index 000000000..ce67d0c3e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + prim_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..f8c7ed7c8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..01ec95534 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# prim_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +prim_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f + +prim_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f + +prim_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f + +COMP_prim_axi_read_if_PKG_TGT_0 = q_comp_prim_axi_read_if_pkg +COMP_prim_axi_read_if_PKG_TGT_1 = v_comp_prim_axi_read_if_pkg +COMP_prim_axi_read_if_PKG_TGT = $(COMP_prim_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_prim_axi_read_if_pkg: $(COMP_prim_axi_read_if_PKG_TGT) + +q_comp_prim_axi_read_if_pkg: + $(HDL_COMP_CMD) $(prim_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_read_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_read_if_PKG_XRTL) + +v_comp_prim_axi_read_if_pkg: + $(HVL_COMP_CMD) $(prim_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_read_if_PKG) + $(VELANALYZE_CMD) $(prim_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(prim_axi_read_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export prim_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_prim_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_prim_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_prim_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_prim_axi_read_if_pkg += -I$(prim_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_prim_axi_read_if_pkg += $(prim_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_prim_axi_read_if_pkg += \ + \ + -o .so + +comp_prim_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_prim_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_prim_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_prim_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_prim_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..9c440083a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of prim_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if.compile new file mode 100644 index 000000000..6b8986ce1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - prim_axi_read_if_hvl.compile + - prim_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..6ed51480b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use prim_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/prim_axi_read_if_if.sv +src/prim_axi_read_if_driver_bfm.sv +src/prim_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_common.compile new file mode 100644 index 000000000..09fd9b43c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..0dcc7ec77 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..1ca45536b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..db173a50e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hdl.compile new file mode 100644 index 000000000..bf564aa0c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./prim_axi_read_if_common.compile +incdir: + - . +src: + - src/prim_axi_read_if_if.sv + - src/prim_axi_read_if_monitor_bfm.sv + - src/prim_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hvl.compile new file mode 100644 index 000000000..ebdc1e779 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./prim_axi_read_if_common.compile +incdir: + - . +src: + - prim_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.sv new file mode 100644 index 000000000..21866eb57 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import prim_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/prim_axi_read_if_macros.svh" + + export prim_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/prim_axi_read_if_typedefs.svh" + `include "src/prim_axi_read_if_transaction.svh" + + `include "src/prim_axi_read_if_configuration.svh" + `include "src/prim_axi_read_if_driver.svh" + `include "src/prim_axi_read_if_monitor.svh" + + `include "src/prim_axi_read_if_transaction_coverage.svh" + `include "src/prim_axi_read_if_sequence_base.svh" + `include "src/prim_axi_read_if_random_sequence.svh" + + `include "src/prim_axi_read_if_responder_sequence.svh" + `include "src/prim_axi_read_if2reg_adapter.svh" + + `include "src/prim_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..9dc1034d4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use prim_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +prim_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..e2ff7fcd4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/prim_axi_read_if_typedefs_hdl.svh" + `include "src/prim_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..fe5f59e5b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..1112cd0fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..e5ff21492 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the prim_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( prim_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "prim_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : prim_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_agent.svh new file mode 100644 index 000000000..e510c9b42 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(prim_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(prim_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(prim_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( prim_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_configuration.svh new file mode 100644 index 000000000..4fe7507ff --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the prim_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual prim_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual prim_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup prim_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_CONFIGURATION_STRUCT + prim_axi_read_if_configuration_s prim_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a prim_axi_read_if_configuration_s + // structure. The function returns the handle to the prim_axi_read_if_configuration_struct. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + prim_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + prim_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + prim_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + prim_axi_read_if_configuration_cg.set_inst_name($sformatf("prim_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver.svh new file mode 100644 index 000000000..80f3658f6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual prim_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( prim_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in prim_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm +// to communicate initiator driven data to prim_axi_read_if_driver_bfm. +`prim_axi_read_if_INITIATOR_STRUCT + prim_axi_read_if_initiator_s prim_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm +// to communicate Responder driven data to prim_axi_read_if_driver_bfm. +`prim_axi_read_if_RESPONDER_STRUCT + prim_axi_read_if_responder_s prim_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + prim_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(prim_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + prim_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(prim_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..fb79a5e87 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the prim_axi_read_if signal driving. It is +// accessed by the uvm prim_axi_read_if driver through a virtual interface +// handle in the prim_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type prim_axi_read_if_if. +// +// Input signals from the prim_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within prim_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_read_if_pkg_hdl::*; +`include "src/prim_axi_read_if_macros.svh" + +interface prim_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (prim_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute prim_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + prim_axi_read_if_pkg::prim_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in prim_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from prim_axi_read_if_driver to this BFM + // **************************************************************************** + `prim_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm + // to communicate initiator driven data to prim_axi_read_if_driver_bfm. + `prim_axi_read_if_INITIATOR_STRUCT + prim_axi_read_if_initiator_s initiator_struct; + // Responder macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm + // to communicate Responder driven data to prim_axi_read_if_driver_bfm. + `prim_axi_read_if_RESPONDER_STRUCT + prim_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(prim_axi_read_if_configuration_s prim_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input prim_axi_read_if_initiator_s prim_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output prim_axi_read_if_responder_s prim_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the prim_axi_read_if_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Members within the prim_axi_read_if_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + initiator_struct = prim_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // prim_axi_read_if_responder_struct.xyz = arready_i; // + // prim_axi_read_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // prim_axi_read_if_responder_struct.xyz = rresp_i; // + // prim_axi_read_if_responder_struct.xyz = rid_i; // + // prim_axi_read_if_responder_struct.xyz = rlast_i; // + // prim_axi_read_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // prim_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = prim_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output prim_axi_read_if_initiator_s prim_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input prim_axi_read_if_responder_s prim_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the prim_axi_read_if_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Variables within the prim_axi_read_if_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= prim_axi_read_if_initiator_struct.xyz; // + // rdata_o <= prim_axi_read_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= prim_axi_read_if_initiator_struct.xyz; // + // rid_o <= prim_axi_read_if_initiator_struct.xyz; // + // rlast_o <= prim_axi_read_if_initiator_struct.xyz; // + // rvalid_o <= prim_axi_read_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the prim_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the prim_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_if.sv new file mode 100644 index 000000000..3e2dc9c5d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the prim_axi_read_if interface signals. +// It is instantiated once per prim_axi_read_if bus. Bus Functional Models, +// BFM's named prim_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named prim_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(prim_axi_read_if_bus.arready), // Agent input +// .dut_signal_port(prim_axi_read_if_bus.rdata), // Agent input +// .dut_signal_port(prim_axi_read_if_bus.rresp), // Agent input +// .dut_signal_port(prim_axi_read_if_bus.rid), // Agent input +// .dut_signal_port(prim_axi_read_if_bus.rlast), // Agent input +// .dut_signal_port(prim_axi_read_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import prim_axi_read_if_pkg_hdl::*; + +interface prim_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_macros.svh new file mode 100644 index 000000000..afbd57861 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the prim_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the prim_axi_read_if_configuration class. +// + `define prim_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } prim_axi_read_if_configuration_s; + + `define prim_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function prim_axi_read_if_configuration_s to_struct();\ + prim_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( prim_axi_read_if_configuration_struct );\ + endfunction + + `define prim_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(prim_axi_read_if_configuration_s prim_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = prim_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the prim_axi_read_if_transaction class. +// + `define prim_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } prim_axi_read_if_monitor_s; + + `define prim_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function prim_axi_read_if_monitor_s to_monitor_struct();\ + prim_axi_read_if_monitor_struct = \ + { \ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( prim_axi_read_if_monitor_struct);\ + endfunction\ + + `define prim_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(prim_axi_read_if_monitor_s prim_axi_read_if_monitor_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = prim_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the prim_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } prim_axi_read_if_initiator_s; + + `define prim_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function prim_axi_read_if_initiator_s to_initiator_struct();\ + prim_axi_read_if_initiator_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( prim_axi_read_if_initiator_struct);\ + endfunction + + `define prim_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(prim_axi_read_if_initiator_s prim_axi_read_if_initiator_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = prim_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the prim_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } prim_axi_read_if_responder_s; + + `define prim_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function prim_axi_read_if_responder_s to_responder_struct();\ + prim_axi_read_if_responder_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( prim_axi_read_if_responder_struct);\ + endfunction + + `define prim_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(prim_axi_read_if_responder_s prim_axi_read_if_responder_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = prim_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor.svh new file mode 100644 index 000000000..2f4d1fc43 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives prim_axi_read_if transactions observed by the +// prim_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual prim_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`prim_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the prim_axi_read_if_monitor_struct. + virtual function void notify_transaction(input prim_axi_read_if_monitor_s prim_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(prim_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..a6c05bea2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the prim_axi_read_if signal monitoring. +// It is accessed by the uvm prim_axi_read_if monitor through a virtual +// interface handle in the prim_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type prim_axi_read_if_if. +// +// Input signals from the prim_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the prim_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_read_if_pkg_hdl::*; +`include "src/prim_axi_read_if_macros.svh" + + +interface prim_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( prim_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute prim_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`prim_axi_read_if_MONITOR_STRUCT + prim_axi_read_if_monitor_s prim_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `prim_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + prim_axi_read_if_pkg::prim_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( prim_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( prim_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(prim_axi_read_if_configuration_s prim_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output prim_axi_read_if_monitor_s prim_axi_read_if_monitor_struct); + // + // Available struct members: + // // prim_axi_read_if_monitor_struct.prim_arready + // // prim_axi_read_if_monitor_struct.prim_rdata + // // prim_axi_read_if_monitor_struct.prim_rresp + // // prim_axi_read_if_monitor_struct.prim_rid + // // prim_axi_read_if_monitor_struct.prim_rlast + // // prim_axi_read_if_monitor_struct.prim_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // prim_axi_read_if_monitor_struct.xyz = arready_i; // + // prim_axi_read_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // prim_axi_read_if_monitor_struct.xyz = rresp_i; // + // prim_axi_read_if_monitor_struct.xyz = rid_i; // + // prim_axi_read_if_monitor_struct.xyz = rlast_i; // + // prim_axi_read_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..08857b229 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the prim_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a prim_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "prim_axi_read_if_random_sequence::body()-prim_axi_read_if_transaction randomization failed") + // Send the transaction to the prim_axi_read_if_driver_bfm via the sequencer and prim_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: prim_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..501b728cc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "prim_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..c94ac9063 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_read_if_transaction_req_t; + prim_axi_read_if_transaction_req_t req; + typedef prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_read_if_transaction_rsp_t; + prim_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = prim_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = prim_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction.svh new file mode 100644 index 000000000..c7e72b2ee --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an prim_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( prim_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_arready ; + logic [DW-1:0] prim_rdata ; + axi_pkg::axi_burst_e prim_rresp ; + logic [IW-1:0] prim_rid ; + logic prim_rlast ; + logic prim_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in prim_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by prim_axi_read_if_monitor and prim_axi_read_if_monitor_bfm + // This struct is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_MONITOR_STRUCT + prim_axi_read_if_monitor_s prim_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a prim_axi_read_if_monitor_s + // structure. The function returns the handle to the prim_axi_read_if_monitor_struct. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm + // to communicate initiator driven data to prim_axi_read_if_driver_bfm. + // This struct is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_INITIATOR_STRUCT + prim_axi_read_if_initiator_s prim_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a prim_axi_read_if_initiator_s + // structure. The function returns the handle to the prim_axi_read_if_initiator_struct. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm + // to communicate Responder driven data to prim_axi_read_if_driver_bfm. + // This struct is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_RESPONDER_STRUCT + prim_axi_read_if_responder_s prim_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a prim_axi_read_if_responder_s + // structure. The function returns the handle to the prim_axi_read_if_responder_struct. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_arready:0x%x prim_rdata:0x%x prim_rresp:0x%x prim_rid:0x%x prim_rlast:0x%x prim_rvalid:0x%x ",prim_arready,prim_rdata,prim_rresp,prim_rid,prim_rlast,prim_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_arready == RHS.prim_arready) + &&(this.prim_rdata == RHS.prim_rdata) + &&(this.prim_rresp == RHS.prim_rresp) + &&(this.prim_rid == RHS.prim_rid) + &&(this.prim_rlast == RHS.prim_rlast) + &&(this.prim_rvalid == RHS.prim_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_arready = RHS.prim_arready; + this.prim_rdata = RHS.prim_rdata; + this.prim_rresp = RHS.prim_rresp; + this.prim_rid = RHS.prim_rid; + this.prim_rlast = RHS.prim_rlast; + this.prim_rvalid = RHS.prim_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"prim_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_arready,"prim_arready"); + $add_attribute(transaction_view_h,prim_rdata,"prim_rdata"); + $add_attribute(transaction_view_h,prim_rresp,"prim_rresp"); + $add_attribute(transaction_view_h,prim_rid,"prim_rid"); + $add_attribute(transaction_view_h,prim_rlast,"prim_rlast"); + $add_attribute(transaction_view_h,prim_rvalid,"prim_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..e31162373 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records prim_axi_read_if transaction information using +// a covergroup named prim_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup prim_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_arready: coverpoint coverage_trans.prim_arready; + prim_rdata: coverpoint coverage_trans.prim_rdata; + prim_rresp: coverpoint coverage_trans.prim_rresp; + prim_rid: coverpoint coverage_trans.prim_rid; + prim_rlast: coverpoint coverage_trans.prim_rlast; + prim_rvalid: coverpoint coverage_trans.prim_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + prim_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + prim_axi_read_if_transaction_cg.set_inst_name($sformatf("prim_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + prim_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/yaml/prim_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/yaml/prim_axi_read_if_interface.yaml new file mode 100644 index 000000000..e8716f4a1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_read_if_pkg/yaml/prim_axi_read_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + prim_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/.project new file mode 100644 index 000000000..97cc8aeb8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/.project @@ -0,0 +1,30 @@ + + + prim_axi_write_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/.svproject new file mode 100644 index 000000000..79b1f983b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/Makefile new file mode 100644 index 000000000..623a7daa4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/Makefile @@ -0,0 +1,66 @@ +# prim_axi_write_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +prim_axi_write_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f + +prim_axi_write_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f + +prim_axi_write_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f + +COMP_prim_axi_write_if_PKG_TGT_0 = q_comp_prim_axi_write_if_pkg +COMP_prim_axi_write_if_PKG_TGT_1 = v_comp_prim_axi_write_if_pkg +COMP_prim_axi_write_if_PKG_TGT = $(COMP_prim_axi_write_if_PKG_TGT_$(USE_VELOCE)) + +comp_prim_axi_write_if_pkg: $(COMP_prim_axi_write_if_PKG_TGT) + +q_comp_prim_axi_write_if_pkg: + $(HDL_COMP_CMD) $(prim_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_write_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_write_if_PKG_XRTL) + +v_comp_prim_axi_write_if_pkg: + $(HVL_COMP_CMD) $(prim_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_write_if_PKG) + $(VELANALYZE_CMD) $(prim_axi_write_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(prim_axi_write_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_write_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export prim_axi_write_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/dpi + +C_FILE_COMPILE_LIST_prim_axi_write_if_pkg = \ + +O_FILE_COMPILE_LIST_prim_axi_write_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_prim_axi_write_if_pkg:.c=.o)) + +GCC_COMP_ARGS_prim_axi_write_if_pkg += -I$(prim_axi_write_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_prim_axi_write_if_pkg += $(prim_axi_write_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_prim_axi_write_if_pkg += \ + \ + -o .so + +comp_prim_axi_write_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_prim_axi_write_if_pkg) $(C_FILE_COMPILE_LIST_prim_axi_write_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_prim_axi_write_if_pkg) $(O_FILE_COMPILE_LIST_prim_axi_write_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/compile.do new file mode 100644 index 000000000..677a4a098 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of prim_axi_write_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if.compile new file mode 100644 index 000000000..bd0dc7378 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if.compile @@ -0,0 +1,3 @@ +needs: + - prim_axi_write_if_hvl.compile + - prim_axi_write_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_bfm.vinfo new file mode 100644 index 000000000..aaa26f79c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use prim_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/prim_axi_write_if_if.sv +src/prim_axi_write_if_driver_bfm.sv +src/prim_axi_write_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_common.compile new file mode 100644 index 000000000..f496fac10 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f new file mode 100644 index 000000000..efc271244 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f new file mode 100644 index 000000000..711212b62 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f new file mode 100644 index 000000000..9dc37651b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hdl.compile new file mode 100644 index 000000000..547090a3d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./prim_axi_write_if_common.compile +incdir: + - . +src: + - src/prim_axi_write_if_if.sv + - src/prim_axi_write_if_monitor_bfm.sv + - src/prim_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hvl.compile new file mode 100644 index 000000000..07cd15926 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./prim_axi_write_if_common.compile +incdir: + - . +src: + - prim_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.sv new file mode 100644 index 000000000..78143d109 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_write_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import prim_axi_write_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/prim_axi_write_if_macros.svh" + + export prim_axi_write_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/prim_axi_write_if_typedefs.svh" + `include "src/prim_axi_write_if_transaction.svh" + + `include "src/prim_axi_write_if_configuration.svh" + `include "src/prim_axi_write_if_driver.svh" + `include "src/prim_axi_write_if_monitor.svh" + + `include "src/prim_axi_write_if_transaction_coverage.svh" + `include "src/prim_axi_write_if_sequence_base.svh" + `include "src/prim_axi_write_if_random_sequence.svh" + + `include "src/prim_axi_write_if_responder_sequence.svh" + `include "src/prim_axi_write_if2reg_adapter.svh" + + `include "src/prim_axi_write_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.vinfo new file mode 100644 index 000000000..da70e9f95 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use prim_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +prim_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.sv new file mode 100644 index 000000000..dbe4a2871 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_write_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/prim_axi_write_if_typedefs_hdl.svh" + `include "src/prim_axi_write_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.vinfo new file mode 100644 index 000000000..8eb50779a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_sve.F new file mode 100644 index 000000000..2232ac433 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if2reg_adapter.svh new file mode 100644 index 000000000..1aad1f2c1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the prim_axi_write_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( prim_axi_write_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "prim_axi_write_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : prim_axi_write_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_agent.svh new file mode 100644 index 000000000..db46f4fe1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(prim_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(prim_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(prim_axi_write_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( prim_axi_write_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_configuration.svh new file mode 100644 index 000000000..114b7e0ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the prim_axi_write_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual prim_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual prim_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_write_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup prim_axi_write_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_CONFIGURATION_STRUCT + prim_axi_write_if_configuration_s prim_axi_write_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a prim_axi_write_if_configuration_s + // structure. The function returns the handle to the prim_axi_write_if_configuration_struct. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + prim_axi_write_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + prim_axi_write_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + prim_axi_write_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + prim_axi_write_if_configuration_cg.set_inst_name($sformatf("prim_axi_write_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver.svh new file mode 100644 index 000000000..f1028f48a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual prim_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( prim_axi_write_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in prim_axi_write_if_macros.svh +//******************************************************************* +// Initiator macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm +// to communicate initiator driven data to prim_axi_write_if_driver_bfm. +`prim_axi_write_if_INITIATOR_STRUCT + prim_axi_write_if_initiator_s prim_axi_write_if_initiator_struct; +//******************************************************************* +// Responder macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm +// to communicate Responder driven data to prim_axi_write_if_driver_bfm. +`prim_axi_write_if_RESPONDER_STRUCT + prim_axi_write_if_responder_s prim_axi_write_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + prim_axi_write_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(prim_axi_write_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + prim_axi_write_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(prim_axi_write_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver_bfm.sv new file mode 100644 index 000000000..62c377ccd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the prim_axi_write_if signal driving. It is +// accessed by the uvm prim_axi_write_if driver through a virtual interface +// handle in the prim_axi_write_if configuration. It drives the singals passed +// in through the port connection named bus of type prim_axi_write_if_if. +// +// Input signals from the prim_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within prim_axi_write_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_write_if_pkg_hdl::*; +`include "src/prim_axi_write_if_macros.svh" + +interface prim_axi_write_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (prim_axi_write_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute prim_axi_write_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + prim_axi_write_if_pkg::prim_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in prim_axi_write_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from prim_axi_write_if_driver to this BFM + // **************************************************************************** + `prim_axi_write_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm + // to communicate initiator driven data to prim_axi_write_if_driver_bfm. + `prim_axi_write_if_INITIATOR_STRUCT + prim_axi_write_if_initiator_s initiator_struct; + // Responder macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm + // to communicate Responder driven data to prim_axi_write_if_driver_bfm. + `prim_axi_write_if_RESPONDER_STRUCT + prim_axi_write_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(prim_axi_write_if_configuration_s prim_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input prim_axi_write_if_initiator_s prim_axi_write_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output prim_axi_write_if_responder_s prim_axi_write_if_responder_struct + );// pragma tbx xtf + // + // Members within the prim_axi_write_if_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Members within the prim_axi_write_if_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + initiator_struct = prim_axi_write_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // prim_axi_write_if_responder_struct.xyz = awready_i; // + // prim_axi_write_if_responder_struct.xyz = wready_i; // + // prim_axi_write_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // prim_axi_write_if_responder_struct.xyz = bid_i; // + // prim_axi_write_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // prim_axi_write_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = prim_axi_write_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output prim_axi_write_if_initiator_s prim_axi_write_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input prim_axi_write_if_responder_s prim_axi_write_if_responder_struct + );// pragma tbx xtf + // Variables within the prim_axi_write_if_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Variables within the prim_axi_write_if_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= prim_axi_write_if_initiator_struct.xyz; // + // wready_o <= prim_axi_write_if_initiator_struct.xyz; // + // bresp_o <= prim_axi_write_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= prim_axi_write_if_initiator_struct.xyz; // + // bvalid_o <= prim_axi_write_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the prim_axi_write_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the prim_axi_write_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_if.sv new file mode 100644 index 000000000..de556ace4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the prim_axi_write_if interface signals. +// It is instantiated once per prim_axi_write_if bus. Bus Functional Models, +// BFM's named prim_axi_write_if_driver_bfm, are used to drive signals on the bus. +// BFM's named prim_axi_write_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(prim_axi_write_if_bus.awready), // Agent input +// .dut_signal_port(prim_axi_write_if_bus.wready), // Agent input +// .dut_signal_port(prim_axi_write_if_bus.bresp), // Agent input +// .dut_signal_port(prim_axi_write_if_bus.bid), // Agent input +// .dut_signal_port(prim_axi_write_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import prim_axi_write_if_pkg_hdl::*; + +interface prim_axi_write_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_macros.svh new file mode 100644 index 000000000..95c6a8bf7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the prim_axi_write_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the prim_axi_write_if_configuration class. +// + `define prim_axi_write_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } prim_axi_write_if_configuration_s; + + `define prim_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function prim_axi_write_if_configuration_s to_struct();\ + prim_axi_write_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( prim_axi_write_if_configuration_struct );\ + endfunction + + `define prim_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(prim_axi_write_if_configuration_s prim_axi_write_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = prim_axi_write_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the prim_axi_write_if_transaction class. +// + `define prim_axi_write_if_MONITOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } prim_axi_write_if_monitor_s; + + `define prim_axi_write_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function prim_axi_write_if_monitor_s to_monitor_struct();\ + prim_axi_write_if_monitor_struct = \ + { \ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( prim_axi_write_if_monitor_struct);\ + endfunction\ + + `define prim_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(prim_axi_write_if_monitor_s prim_axi_write_if_monitor_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = prim_axi_write_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the prim_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_write_if_INITIATOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } prim_axi_write_if_initiator_s; + + `define prim_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function prim_axi_write_if_initiator_s to_initiator_struct();\ + prim_axi_write_if_initiator_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( prim_axi_write_if_initiator_struct);\ + endfunction + + `define prim_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(prim_axi_write_if_initiator_s prim_axi_write_if_initiator_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = prim_axi_write_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the prim_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_write_if_RESPONDER_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } prim_axi_write_if_responder_s; + + `define prim_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function prim_axi_write_if_responder_s to_responder_struct();\ + prim_axi_write_if_responder_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( prim_axi_write_if_responder_struct);\ + endfunction + + `define prim_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(prim_axi_write_if_responder_s prim_axi_write_if_responder_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = prim_axi_write_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor.svh new file mode 100644 index 000000000..67050c334 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives prim_axi_write_if transactions observed by the +// prim_axi_write_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual prim_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_write_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`prim_axi_write_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the prim_axi_write_if_monitor_struct. + virtual function void notify_transaction(input prim_axi_write_if_monitor_s prim_axi_write_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(prim_axi_write_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor_bfm.sv new file mode 100644 index 000000000..7719d6325 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the prim_axi_write_if signal monitoring. +// It is accessed by the uvm prim_axi_write_if monitor through a virtual +// interface handle in the prim_axi_write_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type prim_axi_write_if_if. +// +// Input signals from the prim_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the prim_axi_write_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_write_if_pkg_hdl::*; +`include "src/prim_axi_write_if_macros.svh" + + +interface prim_axi_write_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( prim_axi_write_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute prim_axi_write_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`prim_axi_write_if_MONITOR_STRUCT + prim_axi_write_if_monitor_s prim_axi_write_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `prim_axi_write_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + prim_axi_write_if_pkg::prim_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( prim_axi_write_if_monitor_struct ); + + + proxy.notify_transaction( prim_axi_write_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(prim_axi_write_if_configuration_s prim_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output prim_axi_write_if_monitor_s prim_axi_write_if_monitor_struct); + // + // Available struct members: + // // prim_axi_write_if_monitor_struct.prim_awready + // // prim_axi_write_if_monitor_struct.prim_wready + // // prim_axi_write_if_monitor_struct.prim_bresp + // // prim_axi_write_if_monitor_struct.prim_bid + // // prim_axi_write_if_monitor_struct.prim_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // prim_axi_write_if_monitor_struct.xyz = awready_i; // + // prim_axi_write_if_monitor_struct.xyz = wready_i; // + // prim_axi_write_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // prim_axi_write_if_monitor_struct.xyz = bid_i; // + // prim_axi_write_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_random_sequence.svh new file mode 100644 index 000000000..12e4f9c83 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the prim_axi_write_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a prim_axi_write_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_write_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "prim_axi_write_if_random_sequence::body()-prim_axi_write_if_transaction randomization failed") + // Send the transaction to the prim_axi_write_if_driver_bfm via the sequencer and prim_axi_write_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: prim_axi_write_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_responder_sequence.svh new file mode 100644 index 000000000..eec3703ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_write_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "prim_axi_write_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_sequence_base.svh new file mode 100644 index 000000000..a606d7b2b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_write_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_write_if_transaction_req_t; + prim_axi_write_if_transaction_req_t req; + typedef prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_write_if_transaction_rsp_t; + prim_axi_write_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = prim_axi_write_if_transaction_req_t::type_id::create("req"); + rsp = prim_axi_write_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction.svh new file mode 100644 index 000000000..7e1571969 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an prim_axi_write_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( prim_axi_write_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_awready ; + logic prim_wready ; + axi_pkg::axi_burst_e prim_bresp ; + logic prim_bid ; + logic prim_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in prim_axi_write_if_macros.svh + + //******************************************************************* + // Monitor macro used by prim_axi_write_if_monitor and prim_axi_write_if_monitor_bfm + // This struct is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_MONITOR_STRUCT + prim_axi_write_if_monitor_s prim_axi_write_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a prim_axi_write_if_monitor_s + // structure. The function returns the handle to the prim_axi_write_if_monitor_struct. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm + // to communicate initiator driven data to prim_axi_write_if_driver_bfm. + // This struct is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_INITIATOR_STRUCT + prim_axi_write_if_initiator_s prim_axi_write_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a prim_axi_write_if_initiator_s + // structure. The function returns the handle to the prim_axi_write_if_initiator_struct. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm + // to communicate Responder driven data to prim_axi_write_if_driver_bfm. + // This struct is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_RESPONDER_STRUCT + prim_axi_write_if_responder_s prim_axi_write_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a prim_axi_write_if_responder_s + // structure. The function returns the handle to the prim_axi_write_if_responder_struct. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awready:0x%x prim_wready:0x%x prim_bresp:0x%x prim_bid:0x%x prim_bvalid:0x%x ",prim_awready,prim_wready,prim_bresp,prim_bid,prim_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_awready == RHS.prim_awready) + &&(this.prim_wready == RHS.prim_wready) + &&(this.prim_bresp == RHS.prim_bresp) + &&(this.prim_bid == RHS.prim_bid) + &&(this.prim_bvalid == RHS.prim_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awready = RHS.prim_awready; + this.prim_wready = RHS.prim_wready; + this.prim_bresp = RHS.prim_bresp; + this.prim_bid = RHS.prim_bid; + this.prim_bvalid = RHS.prim_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"prim_axi_write_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awready,"prim_awready"); + $add_attribute(transaction_view_h,prim_wready,"prim_wready"); + $add_attribute(transaction_view_h,prim_bresp,"prim_bresp"); + $add_attribute(transaction_view_h,prim_bid,"prim_bid"); + $add_attribute(transaction_view_h,prim_bvalid,"prim_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction_coverage.svh new file mode 100644 index 000000000..6f9d9804b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records prim_axi_write_if transaction information using +// a covergroup named prim_axi_write_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_write_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup prim_axi_write_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awready: coverpoint coverage_trans.prim_awready; + prim_wready: coverpoint coverage_trans.prim_wready; + prim_bresp: coverpoint coverage_trans.prim_bresp; + prim_bid: coverpoint coverage_trans.prim_bid; + prim_bvalid: coverpoint coverage_trans.prim_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + prim_axi_write_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + prim_axi_write_if_transaction_cg.set_inst_name($sformatf("prim_axi_write_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + prim_axi_write_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/yaml/prim_axi_write_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/yaml/prim_axi_write_if_interface.yaml new file mode 100644 index 000000000..e5bd3c347 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/prim_axi_write_if_pkg/yaml/prim_axi_write_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + prim_axi_write_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/.project new file mode 100644 index 000000000..2683cb016 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + secreg_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..72277d03c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..2d3ef8fcd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# secreg_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +secreg_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f + +secreg_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f + +secreg_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f + +COMP_secreg_axi_read_if_PKG_TGT_0 = q_comp_secreg_axi_read_if_pkg +COMP_secreg_axi_read_if_PKG_TGT_1 = v_comp_secreg_axi_read_if_pkg +COMP_secreg_axi_read_if_PKG_TGT = $(COMP_secreg_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_secreg_axi_read_if_pkg: $(COMP_secreg_axi_read_if_PKG_TGT) + +q_comp_secreg_axi_read_if_pkg: + $(HDL_COMP_CMD) $(secreg_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(secreg_axi_read_if_PKG) + $(HDL_COMP_CMD) $(secreg_axi_read_if_PKG_XRTL) + +v_comp_secreg_axi_read_if_pkg: + $(HVL_COMP_CMD) $(secreg_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(secreg_axi_read_if_PKG) + $(VELANALYZE_CMD) $(secreg_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(secreg_axi_read_if_PKG) + $(HDL_COMP_CMD) $(secreg_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export secreg_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_secreg_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_secreg_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_secreg_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_secreg_axi_read_if_pkg += -I$(secreg_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_secreg_axi_read_if_pkg += $(secreg_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_secreg_axi_read_if_pkg += \ + \ + -o .so + +comp_secreg_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_secreg_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_secreg_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_secreg_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_secreg_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..864496dd5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of secreg_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if.compile new file mode 100644 index 000000000..c7d9ea90d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - secreg_axi_read_if_hvl.compile + - secreg_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..557cbed12 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use secreg_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/secreg_axi_read_if_if.sv +src/secreg_axi_read_if_driver_bfm.sv +src/secreg_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_common.compile new file mode 100644 index 000000000..fbd65847f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..7f0ec9552 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..d8510e398 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..cb3095083 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hdl.compile new file mode 100644 index 000000000..d84364941 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./secreg_axi_read_if_common.compile +incdir: + - . +src: + - src/secreg_axi_read_if_if.sv + - src/secreg_axi_read_if_monitor_bfm.sv + - src/secreg_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hvl.compile new file mode 100644 index 000000000..14ff5a6a2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./secreg_axi_read_if_common.compile +incdir: + - . +src: + - secreg_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.sv new file mode 100644 index 000000000..a8766a676 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package secreg_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import secreg_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/secreg_axi_read_if_macros.svh" + + export secreg_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/secreg_axi_read_if_typedefs.svh" + `include "src/secreg_axi_read_if_transaction.svh" + + `include "src/secreg_axi_read_if_configuration.svh" + `include "src/secreg_axi_read_if_driver.svh" + `include "src/secreg_axi_read_if_monitor.svh" + + `include "src/secreg_axi_read_if_transaction_coverage.svh" + `include "src/secreg_axi_read_if_sequence_base.svh" + `include "src/secreg_axi_read_if_random_sequence.svh" + + `include "src/secreg_axi_read_if_responder_sequence.svh" + `include "src/secreg_axi_read_if2reg_adapter.svh" + + `include "src/secreg_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..9ef82e6b1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use secreg_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +secreg_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..6e5d0d9fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package secreg_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/secreg_axi_read_if_typedefs_hdl.svh" + `include "src/secreg_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..c8b7f5572 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..ec83c1931 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..9b9b95c9c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the secreg_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( secreg_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "secreg_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : secreg_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_agent.svh new file mode 100644 index 000000000..b7809cae6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(secreg_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(secreg_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(secreg_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( secreg_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_configuration.svh new file mode 100644 index 000000000..2fff5b259 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the secreg_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual secreg_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual secreg_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( secreg_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup secreg_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_CONFIGURATION_STRUCT + secreg_axi_read_if_configuration_s secreg_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a secreg_axi_read_if_configuration_s + // structure. The function returns the handle to the secreg_axi_read_if_configuration_struct. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + secreg_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + secreg_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + secreg_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + secreg_axi_read_if_configuration_cg.set_inst_name($sformatf("secreg_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver.svh new file mode 100644 index 000000000..02e992918 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual secreg_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( secreg_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in secreg_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm +// to communicate initiator driven data to secreg_axi_read_if_driver_bfm. +`secreg_axi_read_if_INITIATOR_STRUCT + secreg_axi_read_if_initiator_s secreg_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm +// to communicate Responder driven data to secreg_axi_read_if_driver_bfm. +`secreg_axi_read_if_RESPONDER_STRUCT + secreg_axi_read_if_responder_s secreg_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + secreg_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(secreg_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + secreg_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(secreg_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..4ebf76fbf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the secreg_axi_read_if signal driving. It is +// accessed by the uvm secreg_axi_read_if driver through a virtual interface +// handle in the secreg_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type secreg_axi_read_if_if. +// +// Input signals from the secreg_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within secreg_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import secreg_axi_read_if_pkg_hdl::*; +`include "src/secreg_axi_read_if_macros.svh" + +interface secreg_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (secreg_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute secreg_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + secreg_axi_read_if_pkg::secreg_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in secreg_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from secreg_axi_read_if_driver to this BFM + // **************************************************************************** + `secreg_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm + // to communicate initiator driven data to secreg_axi_read_if_driver_bfm. + `secreg_axi_read_if_INITIATOR_STRUCT + secreg_axi_read_if_initiator_s initiator_struct; + // Responder macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm + // to communicate Responder driven data to secreg_axi_read_if_driver_bfm. + `secreg_axi_read_if_RESPONDER_STRUCT + secreg_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(secreg_axi_read_if_configuration_s secreg_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = secreg_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input secreg_axi_read_if_initiator_s secreg_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output secreg_axi_read_if_responder_s secreg_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the secreg_axi_read_if_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Members within the secreg_axi_read_if_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + initiator_struct = secreg_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // secreg_axi_read_if_responder_struct.xyz = arready_i; // + // secreg_axi_read_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // secreg_axi_read_if_responder_struct.xyz = rresp_i; // + // secreg_axi_read_if_responder_struct.xyz = rid_i; // + // secreg_axi_read_if_responder_struct.xyz = rlast_i; // + // secreg_axi_read_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // secreg_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = secreg_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output secreg_axi_read_if_initiator_s secreg_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input secreg_axi_read_if_responder_s secreg_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the secreg_axi_read_if_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Variables within the secreg_axi_read_if_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= secreg_axi_read_if_initiator_struct.xyz; // + // rdata_o <= secreg_axi_read_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= secreg_axi_read_if_initiator_struct.xyz; // + // rid_o <= secreg_axi_read_if_initiator_struct.xyz; // + // rlast_o <= secreg_axi_read_if_initiator_struct.xyz; // + // rvalid_o <= secreg_axi_read_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the secreg_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the secreg_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_if.sv new file mode 100644 index 000000000..299364565 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the secreg_axi_read_if interface signals. +// It is instantiated once per secreg_axi_read_if bus. Bus Functional Models, +// BFM's named secreg_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named secreg_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(secreg_axi_read_if_bus.arready), // Agent input +// .dut_signal_port(secreg_axi_read_if_bus.rdata), // Agent input +// .dut_signal_port(secreg_axi_read_if_bus.rresp), // Agent input +// .dut_signal_port(secreg_axi_read_if_bus.rid), // Agent input +// .dut_signal_port(secreg_axi_read_if_bus.rlast), // Agent input +// .dut_signal_port(secreg_axi_read_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import secreg_axi_read_if_pkg_hdl::*; + +interface secreg_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_macros.svh new file mode 100644 index 000000000..01e181bac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the secreg_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the secreg_axi_read_if_configuration class. +// + `define secreg_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } secreg_axi_read_if_configuration_s; + + `define secreg_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function secreg_axi_read_if_configuration_s to_struct();\ + secreg_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( secreg_axi_read_if_configuration_struct );\ + endfunction + + `define secreg_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(secreg_axi_read_if_configuration_s secreg_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = secreg_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the secreg_axi_read_if_transaction class. +// + `define secreg_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } secreg_axi_read_if_monitor_s; + + `define secreg_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function secreg_axi_read_if_monitor_s to_monitor_struct();\ + secreg_axi_read_if_monitor_struct = \ + { \ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( secreg_axi_read_if_monitor_struct);\ + endfunction\ + + `define secreg_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(secreg_axi_read_if_monitor_s secreg_axi_read_if_monitor_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = secreg_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the secreg_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define secreg_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } secreg_axi_read_if_initiator_s; + + `define secreg_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function secreg_axi_read_if_initiator_s to_initiator_struct();\ + secreg_axi_read_if_initiator_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( secreg_axi_read_if_initiator_struct);\ + endfunction + + `define secreg_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(secreg_axi_read_if_initiator_s secreg_axi_read_if_initiator_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = secreg_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the secreg_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define secreg_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } secreg_axi_read_if_responder_s; + + `define secreg_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function secreg_axi_read_if_responder_s to_responder_struct();\ + secreg_axi_read_if_responder_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( secreg_axi_read_if_responder_struct);\ + endfunction + + `define secreg_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(secreg_axi_read_if_responder_s secreg_axi_read_if_responder_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = secreg_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor.svh new file mode 100644 index 000000000..4a1a86451 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives secreg_axi_read_if transactions observed by the +// secreg_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual secreg_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( secreg_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`secreg_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the secreg_axi_read_if_monitor_struct. + virtual function void notify_transaction(input secreg_axi_read_if_monitor_s secreg_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(secreg_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..88b287386 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the secreg_axi_read_if signal monitoring. +// It is accessed by the uvm secreg_axi_read_if monitor through a virtual +// interface handle in the secreg_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type secreg_axi_read_if_if. +// +// Input signals from the secreg_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the secreg_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import secreg_axi_read_if_pkg_hdl::*; +`include "src/secreg_axi_read_if_macros.svh" + + +interface secreg_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( secreg_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute secreg_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`secreg_axi_read_if_MONITOR_STRUCT + secreg_axi_read_if_monitor_s secreg_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `secreg_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + secreg_axi_read_if_pkg::secreg_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( secreg_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( secreg_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(secreg_axi_read_if_configuration_s secreg_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = secreg_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output secreg_axi_read_if_monitor_s secreg_axi_read_if_monitor_struct); + // + // Available struct members: + // // secreg_axi_read_if_monitor_struct.secreg_arready + // // secreg_axi_read_if_monitor_struct.secreg_rdata + // // secreg_axi_read_if_monitor_struct.secreg_rresp + // // secreg_axi_read_if_monitor_struct.secreg_rid + // // secreg_axi_read_if_monitor_struct.secreg_rlast + // // secreg_axi_read_if_monitor_struct.secreg_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // secreg_axi_read_if_monitor_struct.xyz = arready_i; // + // secreg_axi_read_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // secreg_axi_read_if_monitor_struct.xyz = rresp_i; // + // secreg_axi_read_if_monitor_struct.xyz = rid_i; // + // secreg_axi_read_if_monitor_struct.xyz = rlast_i; // + // secreg_axi_read_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..99ba1090a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the secreg_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a secreg_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends secreg_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( secreg_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "secreg_axi_read_if_random_sequence::body()-secreg_axi_read_if_transaction randomization failed") + // Send the transaction to the secreg_axi_read_if_driver_bfm via the sequencer and secreg_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: secreg_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..d67fab023 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends secreg_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( secreg_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "secreg_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..6f62375a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( secreg_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + secreg_axi_read_if_transaction_req_t; + secreg_axi_read_if_transaction_req_t req; + typedef secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + secreg_axi_read_if_transaction_rsp_t; + secreg_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = secreg_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = secreg_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction.svh new file mode 100644 index 000000000..6b47b5928 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an secreg_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( secreg_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic secreg_arready ; + logic [DW-1:0] secreg_rdata ; + axi_pkg::axi_burst_e secreg_rresp ; + logic [IW-1:0] secreg_rid ; + logic secreg_rlast ; + logic secreg_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in secreg_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by secreg_axi_read_if_monitor and secreg_axi_read_if_monitor_bfm + // This struct is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_MONITOR_STRUCT + secreg_axi_read_if_monitor_s secreg_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a secreg_axi_read_if_monitor_s + // structure. The function returns the handle to the secreg_axi_read_if_monitor_struct. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm + // to communicate initiator driven data to secreg_axi_read_if_driver_bfm. + // This struct is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_INITIATOR_STRUCT + secreg_axi_read_if_initiator_s secreg_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a secreg_axi_read_if_initiator_s + // structure. The function returns the handle to the secreg_axi_read_if_initiator_struct. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm + // to communicate Responder driven data to secreg_axi_read_if_driver_bfm. + // This struct is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_RESPONDER_STRUCT + secreg_axi_read_if_responder_s secreg_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a secreg_axi_read_if_responder_s + // structure. The function returns the handle to the secreg_axi_read_if_responder_struct. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_arready:0x%x secreg_rdata:0x%x secreg_rresp:0x%x secreg_rid:0x%x secreg_rlast:0x%x secreg_rvalid:0x%x ",secreg_arready,secreg_rdata,secreg_rresp,secreg_rid,secreg_rlast,secreg_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.secreg_arready == RHS.secreg_arready) + &&(this.secreg_rdata == RHS.secreg_rdata) + &&(this.secreg_rresp == RHS.secreg_rresp) + &&(this.secreg_rid == RHS.secreg_rid) + &&(this.secreg_rlast == RHS.secreg_rlast) + &&(this.secreg_rvalid == RHS.secreg_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_arready = RHS.secreg_arready; + this.secreg_rdata = RHS.secreg_rdata; + this.secreg_rresp = RHS.secreg_rresp; + this.secreg_rid = RHS.secreg_rid; + this.secreg_rlast = RHS.secreg_rlast; + this.secreg_rvalid = RHS.secreg_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"secreg_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_arready,"secreg_arready"); + $add_attribute(transaction_view_h,secreg_rdata,"secreg_rdata"); + $add_attribute(transaction_view_h,secreg_rresp,"secreg_rresp"); + $add_attribute(transaction_view_h,secreg_rid,"secreg_rid"); + $add_attribute(transaction_view_h,secreg_rlast,"secreg_rlast"); + $add_attribute(transaction_view_h,secreg_rvalid,"secreg_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..01ff22535 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records secreg_axi_read_if transaction information using +// a covergroup named secreg_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( secreg_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup secreg_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_arready: coverpoint coverage_trans.secreg_arready; + secreg_rdata: coverpoint coverage_trans.secreg_rdata; + secreg_rresp: coverpoint coverage_trans.secreg_rresp; + secreg_rid: coverpoint coverage_trans.secreg_rid; + secreg_rlast: coverpoint coverage_trans.secreg_rlast; + secreg_rvalid: coverpoint coverage_trans.secreg_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + secreg_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + secreg_axi_read_if_transaction_cg.set_inst_name($sformatf("secreg_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + secreg_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/yaml/secreg_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/yaml/secreg_axi_read_if_interface.yaml new file mode 100644 index 000000000..77d1a8ed1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_0/verification_ip/interface_packages/secreg_axi_read_if_pkg/yaml/secreg_axi_read_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + secreg_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/.project new file mode 100644 index 000000000..1462dcefd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/.project @@ -0,0 +1,37 @@ + + + fuse_ctrl + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + verification_ip + 2 + UVMF_VIP_LIBRARY_HOME + + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D/verification_ip + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/.svproject new file mode 100644 index 000000000..9e84acf61 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/docs/interfaces.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/docs/interfaces.csv new file mode 100644 index 000000000..153592de5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/docs/interfaces.csv @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +, +Interface Description, Interface Type, Interface Transaction, Interface Name, +fuse_ctrl_rst_agent, fuse_ctrl_rst_driver_bfm fuse_ctrl_rst_monitor_bfm, fuse_ctrl_rst_transaction, fuse_ctrl_rst_pkg_fuse_ctrl_rst_agent_BFM, +fuse_ctrl_core_axi_write_agent, fuse_ctrl_core_axi_write_if_driver_bfm fuse_ctrl_core_axi_write_if_monitor_bfm, fuse_ctrl_core_axi_write_if_transaction, fuse_ctrl_core_axi_write_if_pkg_fuse_ctrl_core_axi_write_agent_BFM, +fuse_ctrl_prim_axi_write_agent, fuse_ctrl_prim_axi_write_if_driver_bfm fuse_ctrl_prim_axi_write_if_monitor_bfm, fuse_ctrl_prim_axi_write_if_transaction, fuse_ctrl_prim_axi_write_if_pkg_fuse_ctrl_prim_axi_write_agent_BFM, +fuse_ctrl_core_axi_read_agent, fuse_ctrl_core_axi_read_if_driver_bfm fuse_ctrl_core_axi_read_if_monitor_bfm, fuse_ctrl_core_axi_read_if_transaction, fuse_ctrl_core_axi_read_if_pkg_fuse_ctrl_core_axi_read_agent_BFM, +fuse_ctrl_prim_axi_read_agent, fuse_ctrl_prim_axi_read_if_driver_bfm fuse_ctrl_prim_axi_read_if_monitor_bfm, fuse_ctrl_prim_axi_read_if_transaction, fuse_ctrl_prim_axi_read_if_pkg_fuse_ctrl_prim_axi_read_agent_BFM, +fuse_ctrl_secreg_axi_read_agent, fuse_ctrl_secreg_axi_read_if_driver_bfm fuse_ctrl_secreg_axi_read_if_monitor_bfm, fuse_ctrl_secreg_axi_read_if_transaction, fuse_ctrl_secreg_axi_read_if_pkg_fuse_ctrl_secreg_axi_read_agent_BFM, +fuse_ctrl_lc_otp_if_agent, fuse_ctrl_lc_otp_if_driver_bfm fuse_ctrl_lc_otp_if_monitor_bfm, fuse_ctrl_lc_otp_if_transaction, fuse_ctrl_lc_otp_if_pkg_fuse_ctrl_lc_otp_if_agent_BFM, +fuse_ctrl_in_if_agent, fuse_ctrl_in_if_driver_bfm fuse_ctrl_in_if_monitor_bfm, fuse_ctrl_in_if_transaction, fuse_ctrl_in_if_pkg_fuse_ctrl_in_if_agent_BFM, + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/fuse_ctrl_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/fuse_ctrl_sve.F new file mode 100644 index 000000000..05830bec8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/fuse_ctrl_sve.F @@ -0,0 +1,34 @@ + +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + +// BFM Files +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_sve.F + +// Environment Files +-F ${UVMF_VIP_LIBRARY_HOME}/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F + +// Bench Files ++incdir+./tb/tests +./tb/tests/fuse_ctrl_tests_pkg.sv + ++incdir+./tb/sequences +./tb/sequences/fuse_ctrl_sequences_pkg.sv + ++incdir+./tb/parameters +./tb/parameters/fuse_ctrl_parameters_pkg.sv + +./tb/testbench/hdl_top.sv +./tb/testbench/hvl_top.sv + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/rtl/dut.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/rtl/dut.compile new file mode 100644 index 000000000..9b0008fc5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/rtl/dut.compile @@ -0,0 +1,6 @@ + +# pragma uvmf custom dut_compile_info begin +src: + - ./vhdl/vhdl_dut.vhd + - ./verilog/verilog_dut.v +# pragma uvmf custom dut_compile_info end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.v b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.v new file mode 100644 index 000000000..96198441c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.v @@ -0,0 +1,21 @@ +module verilog_dut(clk, rst, in_signal, out_signal); + +input clk; +input rst; +input in_signal; +output out_signal; + +reg out_signal_o; + +always @(posedge clk) begin + if (rst) begin + out_signal_o <= 0; + end + else begin + out_signal_o <= ~in_signal; + end + end + +assign out_signal = out_signal_o; + +endmodule diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.vinfo new file mode 100644 index 000000000..87e95f36f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.vinfo @@ -0,0 +1 @@ +verilog_dut.v diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/rtl/vhdl/vhdl_dut.vhd b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/rtl/vhdl/vhdl_dut.vhd new file mode 100644 index 000000000..904aa37d1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/rtl/vhdl/vhdl_dut.vhd @@ -0,0 +1,21 @@ +library ieee; +use ieee.std_logic_1164.all ; + +entity vhdl_dut is + port ( clk : in std_logic ; + rst : in std_logic ; + in_signal : in std_logic ; + out_signal :out std_logic + ); +end vhdl_dut; + +architecture rtl of vhdl_dut is + begin + P1: process + variable out_signal_o : std_logic; + begin + wait until clk'event and clk = '1'; + out_signal_o := in_signal; + out_signal <= out_signal_o; + end process; + end rtl; diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/Makefile new file mode 100644 index 000000000..83f9b15c7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/Makefile @@ -0,0 +1,369 @@ + +# +#---------------------------------------------------------------------- +# +# DESCRIPTION: This makefile includes the shared makefile and contains +# bench level make targets. +# +#---------------------------------------------------------------------- + + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +# ********************************************************************************************* +# UVMF library directory: +# This variable points to the UVMF release where uvmf_base_pkg directory resides. +# This variable points to release code that is not user modified. +# This variable allows for UVMF release directories to reside independent of project related verification IP and project bench directories. +# This code below looks "upward" for directory starting with UVMF_* and returns first match for use with the release examples. +UVMF_HOME ?= ___PLEASE_SET_AN_ENVIRONMENT_VARIABLE_NAMED_UVMF_HOME_TO_POINT_TO_THE_UVMF_INSTALLATION___ + +# pragma uvmf custom exports begin +# +# Project(s) specific verification IP library: +# Directory where reusable verification packages for interfaces, environments, utilities, etc. reside. +# This variable allows for your verification IP to reside independent of project bench and UVMF release directories. +# For examples deployed with UVMF this will be $(UVMF_HOME)//verification_ip +export UVMF_VIP_LIBRARY_HOME ?= $(PWD)/../../../verification_ip +# +# Project specific bench: +# Directory where bench specific code is located. +# This variable allows for project_benches to reside independent of verification IP and UVMF release directories. +# For examples deployed with UVMF this will be $(UVMF_HOME)//project_benches/ +export UVMF_PROJECT_DIR ?= $(PWD)/.. +# +# +# pragma uvmf custom exports end +# ********************************************************************************************* + +## Check PATH for required vinfo scripts +PVAL := $(shell command -v make_filelist.py 2> /dev/null) +ifndef PVAL + MFLIST = $(UVMF_HOME)/scripts/make_filelist.py +else + MFLIST = make_filelist.py +endif + + +# Set test case specific Variables +TEST_NAME ?= test_top + +TEST_SEED ?= random +UVM_CLI_ARGS = + +# Usage of Veloce, etc. to be input by the user (subject to defaults) +USE_VELOCE ?= 0 + +# Usage of vinfo flow for generating file list +USE_VINFO ?= 0 + +# Usage of Veloce and Questa profilers +USE_VELOCE_PROFILER ?= 0 +USE_QUESTA_PROFILER ?= 0 + + +# Set project Variables +TEST_PLAN_NAME = fuse_ctrl_TestPlan +REPORTING_DO_FILE = fuse_ctrl_reports_script + + +# Include makefile that includes targets for UVM_VIP_Library packages +include $(UVMF_HOME)/scripts/Makefile + + + + +# Include all requisite interface package targets for this bench +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/Makefile + +# Include all requisite environment package targets for this bench +include $(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg/Makefile + + + +# Add to default compile/load/run arguments +VCOM_ARGS += + +# Note: vsim-3009 error can be eliminated by adding -timescale 1ps/1ps to VLOG_ARGS + +VLOG_ARGS += $(UVM_DISABLE_FILE_LINE_CMD) + +VELANALYZE_ARGS += +VELANALYZE_HVL_ARGS += + +BATCH_VOPT_ARGS += +DEBUG_VOPT_ARGS += +EXTRA_VOPT_TOPS += +COMMON_VSIM_ARGS += +COMMON_VSIM_ARGS += + + +BATCH_VSIM_ARGS += #-uvmcontrol=none +DEBUG_VSIM_ARGS += +EXTRA_VSIM_TOPS += + +# pragma uvmf custom additional_args begin +# pragma uvmf custom additional_args end + + +# Project bench package source +fuse_ctrl_PARAMETERS_PKG ?=\ +$(UVMF_PROJECT_DIR)/tb/parameters/fuse_ctrl_parameters_pkg.sv + + +fuse_ctrl_SEQUENCES_PKG ?=\ +$(UVMF_PROJECT_DIR)/tb/sequences/fuse_ctrl_sequences_pkg.sv + + +fuse_ctrl_TEST_PKG ?=\ +$(UVMF_PROJECT_DIR)/tb/tests/fuse_ctrl_tests_pkg.sv + +# pragma uvmf custom dut_files begin +# UVMF_CHANGE_ME : Reference Verilog DUT source. +fuse_ctrl_VERILOG_DUT ?=\ +$(UVMF_PROJECT_DIR)/../../../../../integration/rtl/config_defines.svh +$(UVMF_PROJECT_DIR)/../../../../../integration/rtl/caliptra_reg_defines.svh +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_sva.svh +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_macros.svh +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_sram.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/ahb_defines_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_ahb_srom.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/apb_slv_sif.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/ahb_slv_sif.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_icg.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/clk_gate.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_2ff_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/ahb_to_reg_adapter.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/skidbuffer.v +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_util_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_alert_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_subreg_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_mubi_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_cipher_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sparse_fsm_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_otp_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_ram_1p_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../lc_ctrl/rtl/lc_ctrl_reg_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../lc_ctrl/rtl/lc_ctrl_state_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../lc_ctrl/rtl/lc_ctrl_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_flop_en.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_flop.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_buf.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_otp.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_ram_1p.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_and2.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_flop_en.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_cdc_rand_delay.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_flop_2sync.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_lfsr.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_double_lfsr.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_arbiter_fixed.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_arbiter_tree.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_edn_req.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_present.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_lc_sender.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sync_reqack.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sync_reqack_data.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_mubi4_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_diff_decode.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sec_anchor_buf.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_slicer.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_count.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sparse_fsm_flop.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_dom_and_2share.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sec_anchor_flop.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_reg_we_check.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_packer_fifo.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_max_tree.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_subreg_arb.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_subreg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_intr_hw.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_onehot_check.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_mubi8_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_mubi8_sender.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_fifo_sync_cnt.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_buf.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_lc_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_alert_receiver.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_flop.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_alert_sender.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_fifo_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_arbiter_ppc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sum_tree.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_subreg_ext.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_edge_detector.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_blanker.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_ram_1p_adv.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_assert_multiple.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_assert.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/sram2tlul.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_adapter_host.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_adapter_reg.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_adapter_sram.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_cmd_intg_chk.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_cmd_intg_gen.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_data_integ_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_data_integ_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_err_resp.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_err.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_fifo_async.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_fifo_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_lc_gate.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_rsp_intg_chk.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_rsp_intg_gen.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_socket_1n.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_socket_m1.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_sram_byte.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_if.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_addr.v +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_sub_rd.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_sub_wr.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_sub_arb.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_sub.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_22_16_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_22_16_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_28_22_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_28_22_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_39_32_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_39_32_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_64_57_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_64_57_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_72_64_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_72_64_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_22_16_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_22_16_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_39_32_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_39_32_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_72_64_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_72_64_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_76_68_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_76_68_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_22_16_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_22_16_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_28_22_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_28_22_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_39_32_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_39_32_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_64_57_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_64_57_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_72_64_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_72_64_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_22_16_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_22_16_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_39_32_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_39_32_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_72_64_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_72_64_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_76_68_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_76_68_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../axi2tlul/rtl/axi2tlul_cmd_intg_gen.sv +$(UVMF_PROJECT_DIR)/../../../../../axi2tlul/rtl/sub2tlul.sv +$(UVMF_PROJECT_DIR)/../../../../../axi2tlul/rtl/axi2tlul.sv +$(UVMF_PROJECT_DIR)/../../../../../entropy_src/rtl/entropy_src_main_sm_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../entropy_src/rtl/entropy_src_ack_sm_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../entropy_src/rtl/entropy_src_reg_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../entropy_src/rtl/entropy_src_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../edn/rtl/edn_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../ast/rtl/ast_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../pwrmgr/rtl/pwrmgr_reg_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../pwrmgr/rtl/pwrmgr_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_reg_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_part_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_core_reg_top.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_prim_reg_top.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_dai.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_ecc_reg.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_lci.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_lfsr_timer.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_part_buf.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_part_unbuf.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_scrmbl.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_top.sv + + +# UVMF_CHANGE_ME : Reference VHDL DUT source. +fuse_ctrl_VHDL_DUT ?=\ +$(UVMF_PROJECT_DIR)/rtl/vhdl/vhdl_dut.vhd +# pragma uvmf custom dut_files end + + +# Project bench package targets +COMP_fuse_ctrl_PARAMETERS_PKG_TGT_0 = q_comp_fuse_ctrl_parameters_pkg +COMP_fuse_ctrl_PARAMETERS_PKG_TGT_1 = v_comp_fuse_ctrl_parameters_pkg +COMP_fuse_ctrl_PARAMETERS_PKG_TGT = $(COMP_fuse_ctrl_PARAMETERS_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_parameters_pkg: $(COMP_fuse_ctrl_PARAMETERS_PKG_TGT) + +q_comp_fuse_ctrl_parameters_pkg: + $(HVL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/parameters $(fuse_ctrl_PARAMETERS_PKG) + +v_comp_fuse_ctrl_parameters_pkg: q_comp_fuse_ctrl_parameters_pkg + $(HDL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/parameters $(fuse_ctrl_PARAMETERS_PKG) + + +comp_fuse_ctrl_sequence_pkg: + $(HVL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/sequences $(fuse_ctrl_SEQUENCES_PKG) + +comp_fuse_ctrl_tests_pkg: + $(HVL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/tests $(fuse_ctrl_TEST_PKG) + +# pragma uvmf custom dut_compile_make_target begin +# UVMF_CHANGE_ME : Add make target to compile your verilog dut here +comp_fuse_ctrl_verilog_dut: + echo "Compile your verilog DUT here" + $(HDL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/../../../../../libs/rtl $(fuse_ctrl_VERILOG_DUT) + +# UVMF_CHANGE_ME : Add make target to compile your vhdl dut here +comp_fuse_ctrl_vhdl_dut: + echo "Compile your vhdl DUT here" + $(HDL_COMP_CMD_VHDL) $(fuse_ctrl_VHDL_DUT) + +# UVMF_CHANGE_ME : Add make target to compile your dut here +comp_fuse_ctrl_dut: comp_fuse_ctrl_vhdl_dut comp_fuse_ctrl_verilog_dut +# pragma uvmf custom dut_compile_make_target end + + +BUILD_TGT_0 = make_build +BUILD_TGT_1 = vinfo_build +BUILD_TGT = $(BUILD_TGT_$(USE_VINFO)) + + +comp_hvl : comp_hvl_core + + +comp_hvl_core : \ + comp_fuse_ctrl_rst_pkg comp_fuse_ctrl_core_axi_write_if_pkg comp_fuse_ctrl_prim_axi_write_if_pkg comp_fuse_ctrl_core_axi_read_if_pkg comp_fuse_ctrl_prim_axi_read_if_pkg comp_fuse_ctrl_secreg_axi_read_if_pkg comp_fuse_ctrl_lc_otp_if_pkg comp_fuse_ctrl_in_if_pkg \ + comp_fuse_ctrl_env_pkg \ + comp_fuse_ctrl_parameters_pkg comp_fuse_ctrl_sequence_pkg comp_fuse_ctrl_tests_pkg + +comp_uvmf_core : comp_uvm_pkg comp_uvmf_base_pkg + +make_build: comp_fuse_ctrl_dut comp_uvmf_core comp_hvl comp_test_bench + +hvl_build: q_comp_fuse_ctrl_rst_pkg q_comp_fuse_ctrl_core_axi_write_if_pkg q_comp_fuse_ctrl_prim_axi_write_if_pkg q_comp_fuse_ctrl_core_axi_read_if_pkg q_comp_fuse_ctrl_prim_axi_read_if_pkg q_comp_fuse_ctrl_secreg_axi_read_if_pkg q_comp_fuse_ctrl_lc_otp_if_pkg q_comp_fuse_ctrl_in_if_pkg comp_fuse_ctrl_env_pkg comp_fuse_ctrl_sequence_pkg comp_fuse_ctrl_tests_pkg hvl_comp_testbench link optimize + + +vinfo_build: comp_fuse_ctrl_vhdl_dut build_hdl_vinfo build_hvl_vinfo $(VINFO_TGT) + + $(HDL_COMP_CMD) -F hdl.vf + $(VEL_COMP) + +build: $(BUILD_TGT) + +# pragma uvmf custom additional_targets begin +# pragma uvmf custom additional_targets end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/bcr_testlist b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/bcr_testlist new file mode 100644 index 000000000..4df4567ee --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/bcr_testlist @@ -0,0 +1,19 @@ + + + +# Test list for use by RMDB file +# File syntax is +# TB_INFO { } { } +# TB ## All subsequent tests will run on this bench until a different "TB" line is seen +# TEST <1st_seed> ... +# If not enough seeds are provided then random seeds are used to pad +# If no repeat count is given, default is 1 +# pragma uvmf custom tb_info begin +TB_INFO fuse_ctrl { } { } +# pragma uvmf custom tb_info end +TB fuse_ctrl +# pragma uvmf custom regression_suite begin +TEST test_top 3 +# pragma uvmf custom regression_suite end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/bcr_testlist.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/bcr_testlist.yaml new file mode 100644 index 000000000..65b6be08a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/bcr_testlist.yaml @@ -0,0 +1,44 @@ + + + +# YAML test list for use by RMDB file +# File syntax is +# uvmf_testlist: +# testbenches: +# - name: +# extra_build_options: +# extra_run_options: +# - name: +# ... +# - name: +# tests: +# - name: +# uvm_testname: (defaults to test_name) +# testbench: (defaults to last tb name seen) +# repeat: (defaults to 1) +# seeds: [,,...,] (defaults to all random) +# extra_test_options: +# - name: +# ... +# - name: +# include: +# - (relative path reference is to the including YAML file) +# - +# ... +# - + +uvmf_testlist: + testbenches: +# pragma uvmf custom tb_info begin + - name: fuse_ctrl + extra_build_options: "" + extra_run_options: "" +# pragma uvmf custom tb_info end + tests: + - testbench: fuse_ctrl +# pragma uvmf custom regression_suite begin + - name: test_top + repeat: 3 +# pragma uvmf custom regression_suite end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/compile.do new file mode 100644 index 000000000..730a4c022 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/compile.do @@ -0,0 +1,77 @@ + + +################################################################## +## ENVIRONMENT VARIABLES +################################################################## +quietly set ::env(UVMF_VIP_LIBRARY_HOME) ../../../verification_ip +quietly set ::env(UVMF_PROJECT_DIR) .. + +## Using VRM means that the build is occuring several more directories deeper underneath +## the sim directory, need to prepend some more '..' +if {[info exists ::env(VRM_BUILD)]} { + quietly set ::env(UVMF_VIP_LIBRARY_HOME) "../../../../../$::env(UVMF_VIP_LIBRARY_HOME)" + quietly set ::env(UVMF_PROJECT_DIR) "../../../../../$::env(UVMF_PROJECT_DIR)" +} +quietly set ::env(UVMF_VIP_LIBRARY_HOME) [file normalize $::env(UVMF_VIP_LIBRARY_HOME)] +quietly set ::env(UVMF_PROJECT_DIR) [file normalize $::env(UVMF_PROJECT_DIR)] +quietly echo "UVMF_VIP_LIBRARY_HOME = $::env(UVMF_VIP_LIBRARY_HOME)" +quietly echo "UVMF_PROJECT_DIR = $::env(UVMF_PROJECT_DIR)" + + +################################################################### +## HOUSEKEEPING : DELETE FILES THAT WILL BE REGENERATED +################################################################### +file delete -force *~ *.ucdb vsim.dbg *.vstf *.log work *.mem *.transcript.txt certe_dump.xml *.wlf covhtmlreport VRMDATA +file delete -force design.bin qwave.db dpiheader.h visualizer*.ses +file delete -force veloce.med veloce.wave veloce.map tbxbindings.h edsenv velrunopts.ini +file delete -force sv_connect.* + +################################################################### +## COMPILE DUT SOURCE CODE +################################################################### +vlib work +# pragma uvmf custom dut_compile_dofile_target begin +# UVMF_CHANGE_ME : Add commands to compile your dut here, replacing the default examples +#vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/rtl/verilog/verilog_dut.v +#vcom $env(UVMF_PROJECT_DIR)/rtl/vhdl/vhdl_dut.vhd +# pragma uvmf custom dut_compile_dofile_target end + +################################################################### +## COMPILE UVMF BASE/COMMON SOURCE CODE +################################################################### +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_HOME)/uvmf_base_pkg -F $env(UVMF_HOME)/uvmf_base_pkg/uvmf_base_pkg_filelist_hdl.f +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_HOME)/uvmf_base_pkg -F $env(UVMF_HOME)/uvmf_base_pkg/uvmf_base_pkg_filelist_hvl.f + + +################################################################### +## UVMF INTERFACE COMPILATION +################################################################### +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/compile.do + +################################################################### +## UVMF ENVIRONMENT COMPILATION +################################################################### +do $env(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg/compile.do + +################################################################### +## UVMF BENCHES COMPILATION +################################################################### +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/parameters $env(UVMF_PROJECT_DIR)/tb/parameters/fuse_ctrl_parameters_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/sequences $env(UVMF_PROJECT_DIR)/tb/sequences/fuse_ctrl_sequences_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/tests $env(UVMF_PROJECT_DIR)/tb/tests/fuse_ctrl_tests_pkg.sv + +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/testbench -F $env(UVMF_PROJECT_DIR)/tb/testbench/top_filelist_hdl.f +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/testbench -F $env(UVMF_PROJECT_DIR)/tb/testbench/top_filelist_hvl.f + +################################################################### +## OPTIMIZATION +################################################################### +vopt hvl_top hdl_top -o optimized_batch_top_tb +vopt +acc hvl_top hdl_top -o optimized_debug_top_tb diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/hdl.compile new file mode 100644 index 000000000..8e7bd41ac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/hdl.compile @@ -0,0 +1,5 @@ +needs: +# pragma uvmf custom dut_compile_info begin + - ../rtl/dut.compile +# pragma uvmf custom dut_compile_info end + - ../tb/testbench/hdl_top.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/hdl.vinfo new file mode 100644 index 000000000..da27ec773 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/hdl.vinfo @@ -0,0 +1 @@ +@use $UVMF_PROJECT_DIR/tb/testbench/hdl_top.vinfo diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/hvl.compile new file mode 100644 index 000000000..ce9525496 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/hvl.compile @@ -0,0 +1,2 @@ +needs: + - ../tb/testbench/hvl_top.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/hvl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/hvl.vinfo new file mode 100644 index 000000000..d22eff338 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/hvl.vinfo @@ -0,0 +1 @@ +@use $UVMF_PROJECT_DIR/tb/testbench/hvl_top.vinfo diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/run.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/run.do new file mode 100644 index 000000000..101ddc486 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/run.do @@ -0,0 +1,21 @@ + + +quietly set svLibs "" +quietly set extra_vsim_args "" + +################################################################### +## Check for additional vsim arguments passed using env var $UVMF_EXTRA_VSIM_ARGS +################################################################### +if {[info exists ::env(UVMF_EXTRA_VSIM_ARGS)]} { + echo "Adding more args to vsim command" + quietly set extra_vsim_args $::env(UVMF_EXTRA_VSIM_ARGS) +} + +################################################################## +## Launch Questa : generate vsim command line and execute +################################################################## +# pragma uvmf custom dut_run_dofile_target begin +# UVMF_CHANGE_ME : Change the UVM_TESTNAME plusarg to run a different test +quietly set cmd [format "vsim -i -sv_seed random +UVM_TESTNAME=test_top +UVM_VERBOSITY=UVM_HIGH -permit_unmatched_virtual_intf +notimingchecks -suppress 8887 %s %s -uvmcontrol=all -msgmode both -classdebug -assertdebug +uvm_set_config_int=*,enable_transaction_viewing,1 -do { set NoQuitOnFinish 1; onbreak {resume}; run 0; do wave.do; set PrefSource(OpenOnBreak) 0; radix hex showbase; } optimized_debug_top_tb" $svLibs $extra_vsim_args] +# pragma uvmf custom dut_run_dofile_target end +eval $cmd diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/tbx.config b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/tbx.config new file mode 100644 index 000000000..eec58168c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/tbx.config @@ -0,0 +1,10 @@ + + + + + +comp -questa +velsyn -D1S +rtlc -allow_4ST + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/testlist b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/testlist new file mode 100644 index 000000000..0c6229764 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/testlist @@ -0,0 +1,20 @@ + + + + +# Test list for use by RMDB file +# File syntax is +# TB_INFO { } { } +# TB ## All subsequent tests will run on this bench until a different "TB" line is seen +# TEST <1st_seed> ... +# If not enough seeds are provided then random seeds are used to pad +# If no repeat count is given, default is 1 +# pragma uvmf custom tb_info begin +TB_INFO fuse_ctrl { UVMF_VIP_LIBRARY_HOME=../../../../../../../../verification_ip UVMF_PROJECT_DIR=../../../../../../../fuse_ctrl } { } +# pragma uvmf custom tb_info end +TB fuse_ctrl +# pragma uvmf custom regression_suite begin +TEST test_top 3 +# pragma uvmf custom regression_suite end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/testlist.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/testlist.yaml new file mode 100644 index 000000000..6236cc790 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/testlist.yaml @@ -0,0 +1,44 @@ + + + +# YAML test list for use by RMDB file +# File syntax is +# uvmf_testlist: +# testbenches: +# - name: +# extra_build_options: +# extra_run_options: +# - name: +# ... +# - name: +# tests: +# - name: +# uvm_testname: (defaults to test_name) +# testbench: (defaults to last tb name seen) +# repeat: (defaults to 1) +# seeds: [,,...,] (defaults to all random) +# extra_test_options: +# - name: +# ... +# - name: +# include: +# - (relative path reference is to the including YAML file) +# - +# ... +# - + +uvmf_testlist: + testbenches: +# pragma uvmf custom tb_info begin + - name: fuse_ctrl + extra_build_options: "UVMF_VIP_LIBRARY_HOME=../../../../../../../../verification_ip UVMF_PROJECT_DIR=../../../../../../../fuse_ctrl" + extra_run_options: "" +# pragma uvmf custom tb_info end + tests: + - testbench: fuse_ctrl +# pragma uvmf custom regression_suite begin + - name: test_top + repeat: 3 +# pragma uvmf custom regression_suite end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/top.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/top.compile new file mode 100644 index 000000000..efd51c07e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/top.compile @@ -0,0 +1,3 @@ +needs: + - hvl.compile + - hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/veloce.config b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/veloce.config new file mode 100644 index 000000000..d09751555 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/veloce.config @@ -0,0 +1,26 @@ + + + + + +# pragma uvmf custom additional begin +comp -num_boards 1 +comp -hvl questa +# Please choose the correct emulator type code for +# comp -platform command or else velcomp will fail +# Available types are: +# - Veloce2 Quattro: D2 +# - Veloce2 Maximus: D2M +# - Veloce Strato TiL, Ti, and Mi: Strato +# - Veloce Strato M and Strato T: StratoM +# - comp -platform +comp -platform Strato + +rtlc -enable_tbx_pragma_checks +rtlc -allow_4ST +rtlc -allow_MDR +rtlc -compile_display +rtlc -xwave_siglist xwaves.sigs +# pragma uvmf custom additional end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/viswave.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/viswave.do new file mode 100644 index 000000000..7399c049b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/viswave.do @@ -0,0 +1,58 @@ + + +onerror resume +wave tags F0 +wave update off + +wave spacer -backgroundcolor Salmon { fuse_ctrl_rst_agent } +wave add uvm_test_top.environment.fuse_ctrl_rst_agent.fuse_ctrl_rst_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_rst_agent_bus +wave add -group fuse_ctrl_rst_agent_bus hdl_top.fuse_ctrl_rst_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_rst_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_core_axi_write_agent } +wave add uvm_test_top.environment.fuse_ctrl_core_axi_write_agent.fuse_ctrl_core_axi_write_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_core_axi_write_agent_bus +wave add -group fuse_ctrl_core_axi_write_agent_bus hdl_top.fuse_ctrl_core_axi_write_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_core_axi_write_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_prim_axi_write_agent } +wave add uvm_test_top.environment.fuse_ctrl_prim_axi_write_agent.fuse_ctrl_prim_axi_write_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_prim_axi_write_agent_bus +wave add -group fuse_ctrl_prim_axi_write_agent_bus hdl_top.fuse_ctrl_prim_axi_write_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_prim_axi_write_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_core_axi_read_agent } +wave add uvm_test_top.environment.fuse_ctrl_core_axi_read_agent.fuse_ctrl_core_axi_read_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_core_axi_read_agent_bus +wave add -group fuse_ctrl_core_axi_read_agent_bus hdl_top.fuse_ctrl_core_axi_read_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_core_axi_read_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_prim_axi_read_agent } +wave add uvm_test_top.environment.fuse_ctrl_prim_axi_read_agent.fuse_ctrl_prim_axi_read_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_prim_axi_read_agent_bus +wave add -group fuse_ctrl_prim_axi_read_agent_bus hdl_top.fuse_ctrl_prim_axi_read_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_prim_axi_read_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_secreg_axi_read_agent } +wave add uvm_test_top.environment.fuse_ctrl_secreg_axi_read_agent.fuse_ctrl_secreg_axi_read_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_secreg_axi_read_agent_bus +wave add -group fuse_ctrl_secreg_axi_read_agent_bus hdl_top.fuse_ctrl_secreg_axi_read_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_secreg_axi_read_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_lc_otp_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_lc_otp_if_agent.fuse_ctrl_lc_otp_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_lc_otp_if_agent_bus +wave add -group fuse_ctrl_lc_otp_if_agent_bus hdl_top.fuse_ctrl_lc_otp_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_lc_otp_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_in_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_in_if_agent.fuse_ctrl_in_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_in_if_agent_bus +wave add -group fuse_ctrl_in_if_agent_bus hdl_top.fuse_ctrl_in_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_in_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] + +wave update on +WaveSetStreamView + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/wave.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/wave.do new file mode 100644 index 000000000..9ca0b2c04 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/wave.do @@ -0,0 +1,48 @@ + + +onerror {resume} +quietly WaveActivateNextPane {} 0 + +add wave -noupdate -divider fuse_ctrl_rst_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_rst_agent/fuse_ctrl_rst_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_rst_agent_bus /hdl_top/fuse_ctrl_rst_agent_bus/* +add wave -noupdate -divider fuse_ctrl_core_axi_write_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_core_axi_write_agent/fuse_ctrl_core_axi_write_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_core_axi_write_agent_bus /hdl_top/fuse_ctrl_core_axi_write_agent_bus/* +add wave -noupdate -divider fuse_ctrl_prim_axi_write_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_prim_axi_write_agent/fuse_ctrl_prim_axi_write_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_prim_axi_write_agent_bus /hdl_top/fuse_ctrl_prim_axi_write_agent_bus/* +add wave -noupdate -divider fuse_ctrl_core_axi_read_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_core_axi_read_agent/fuse_ctrl_core_axi_read_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_core_axi_read_agent_bus /hdl_top/fuse_ctrl_core_axi_read_agent_bus/* +add wave -noupdate -divider fuse_ctrl_prim_axi_read_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_prim_axi_read_agent/fuse_ctrl_prim_axi_read_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_prim_axi_read_agent_bus /hdl_top/fuse_ctrl_prim_axi_read_agent_bus/* +add wave -noupdate -divider fuse_ctrl_secreg_axi_read_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_secreg_axi_read_agent/fuse_ctrl_secreg_axi_read_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_secreg_axi_read_agent_bus /hdl_top/fuse_ctrl_secreg_axi_read_agent_bus/* +add wave -noupdate -divider fuse_ctrl_lc_otp_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_lc_otp_if_agent/fuse_ctrl_lc_otp_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_lc_otp_if_agent_bus /hdl_top/fuse_ctrl_lc_otp_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_in_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_in_if_agent/fuse_ctrl_in_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_in_if_agent_bus /hdl_top/fuse_ctrl_in_if_agent_bus/* + +TreeUpdate [SetDefaultTree] +quietly wave cursor active 0 +configure wave -namecolwidth 472 +configure wave -valuecolwidth 100 +configure wave -justifyvalue left +configure wave -signalnamewidth 0 +configure wave -snapdistance 10 +configure wave -datasetprefix 0 +configure wave -rowmargin 4 +configure wave -childrowmargin 2 +configure wave -gridoffset 0 +configure wave -gridperiod 1 +configure wave -griddelta 40 +configure wave -timeline 0 +configure wave -timelineunits ns +update +WaveRestoreZoom {27 ns} {168 ns} + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/xwaves.sigs b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/xwaves.sigs new file mode 100644 index 000000000..d75f0a575 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/sim/xwaves.sigs @@ -0,0 +1,17 @@ + + + + + +# pragma uvmf custom additional begin + +Group All + +#Top level signals +hdl_top.* +#Add additional levels or individual signals as needed +hdl_top.*.* + +# pragma uvmf custom additional end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.compile new file mode 100644 index 000000000..0c6b841a5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.compile @@ -0,0 +1,4 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +src: + - fuse_ctrl_parameters_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.sv new file mode 100644 index 000000000..86966778b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.sv @@ -0,0 +1,58 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This package contains test level parameters +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +package fuse_ctrl_parameters_pkg; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + + // These parameters are used to uniquely identify each interface. The monitor_bfm and + // driver_bfm are placed into and retrieved from the uvm_config_db using these string + // names as the field_name. The parameter is also used to enable transaction viewing + // from the command line for selected interfaces using the UVM command line processing. + parameter string fuse_ctrl_rst_agent_BFM = "fuse_ctrl_rst_agent_BFM"; /* [0] */ + parameter string fuse_ctrl_core_axi_write_agent_BFM = "fuse_ctrl_core_axi_write_agent_BFM"; /* [1] */ + parameter string fuse_ctrl_prim_axi_write_agent_BFM = "fuse_ctrl_prim_axi_write_agent_BFM"; /* [2] */ + parameter string fuse_ctrl_core_axi_read_agent_BFM = "fuse_ctrl_core_axi_read_agent_BFM"; /* [3] */ + parameter string fuse_ctrl_prim_axi_read_agent_BFM = "fuse_ctrl_prim_axi_read_agent_BFM"; /* [4] */ + parameter string fuse_ctrl_secreg_axi_read_agent_BFM = "fuse_ctrl_secreg_axi_read_agent_BFM"; /* [5] */ + parameter string fuse_ctrl_lc_otp_if_agent_BFM = "fuse_ctrl_lc_otp_if_agent_BFM"; /* [6] */ + parameter string fuse_ctrl_in_if_agent_BFM = "fuse_ctrl_in_if_agent_BFM"; /* [7] */ + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.vinfo new file mode 100644 index 000000000..3bd4d7f9b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_parameters_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.compile new file mode 100644 index 000000000..0c0117f4d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.compile @@ -0,0 +1,14 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if.compile + - ../../../../verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile + - ../parameters/fuse_ctrl_parameters_pkg.compile +src: + - fuse_ctrl_sequences_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.sv new file mode 100644 index 000000000..42d9f942d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.sv @@ -0,0 +1,77 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This package includes all high level sequence classes used +// in the environment. These include utility sequences and top +// level sequences. +// +// CONTAINS: +// - +// - +// +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +// + +package fuse_ctrl_sequences_pkg; + import uvm_pkg::*; + import uvmf_base_pkg::*; + import fuse_ctrl_rst_pkg::*; + import fuse_ctrl_rst_pkg_hdl::*; + import fuse_ctrl_core_axi_write_if_pkg::*; + import fuse_ctrl_core_axi_write_if_pkg_hdl::*; + import fuse_ctrl_prim_axi_write_if_pkg::*; + import fuse_ctrl_prim_axi_write_if_pkg_hdl::*; + import fuse_ctrl_core_axi_read_if_pkg::*; + import fuse_ctrl_core_axi_read_if_pkg_hdl::*; + import fuse_ctrl_prim_axi_read_if_pkg::*; + import fuse_ctrl_prim_axi_read_if_pkg_hdl::*; + import fuse_ctrl_secreg_axi_read_if_pkg::*; + import fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; + import fuse_ctrl_lc_otp_if_pkg::*; + import fuse_ctrl_lc_otp_if_pkg_hdl::*; + import fuse_ctrl_in_if_pkg::*; + import fuse_ctrl_in_if_pkg_hdl::*; + import fuse_ctrl_parameters_pkg::*; + import fuse_ctrl_env_pkg::*; + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + `include "src/fuse_ctrl_bench_sequence_base.svh" + `include "src/register_test_sequence.svh" + `include "src/example_derived_test_sequence.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the sequence package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.vinfo new file mode 100644 index 000000000..736859f23 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.vinfo @@ -0,0 +1,13 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo +@use $UVMF_PROJECT_DIR/tb/parameters/fuse_ctrl_parameters_pkg.vinfo ++incdir+@vinfodir +fuse_ctrl_sequences_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/sequences/src/example_derived_test_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/sequences/src/example_derived_test_sequence.svh new file mode 100644 index 000000000..7566dc511 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/sequences/src/example_derived_test_sequence.svh @@ -0,0 +1,44 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains the top level sequence used in example_derived_test. +// It is an example of a sequence that is extended from %(benchName)_bench_sequence_base +// and can override %(benchName)_bench_sequence_base. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class example_derived_test_sequence extends fuse_ctrl_bench_sequence_base; + + `uvm_object_utils( example_derived_test_sequence ); + + function new(string name = "" ); + super.new(name); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/sequences/src/fuse_ctrl_bench_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/sequences/src/fuse_ctrl_bench_sequence_base.svh new file mode 100644 index 000000000..943c54360 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/sequences/src/fuse_ctrl_bench_sequence_base.svh @@ -0,0 +1,208 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// Description: This file contains the top level and utility sequences +// used by test_top. It can be extended to create derivative top +// level sequences. +// +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +// + + +typedef fuse_ctrl_env_configuration fuse_ctrl_env_configuration_t; + +class fuse_ctrl_bench_sequence_base extends uvmf_sequence_base #(uvm_sequence_item); + + `uvm_object_utils( fuse_ctrl_bench_sequence_base ); + + // pragma uvmf custom sequences begin + +typedef fuse_ctrl_env_sequence_base #( + .CONFIG_T(fuse_ctrl_env_configuration_t) + ) + fuse_ctrl_env_sequence_base_t; +rand fuse_ctrl_env_sequence_base_t fuse_ctrl_env_seq; + + + + // UVMF_CHANGE_ME : Instantiate, construct, and start sequences as needed to create stimulus scenarios. + // Instantiate sequences here + typedef fuse_ctrl_rst_random_sequence fuse_ctrl_rst_agent_random_seq_t; + fuse_ctrl_rst_agent_random_seq_t fuse_ctrl_rst_agent_random_seq; + typedef fuse_ctrl_core_axi_write_if_random_sequence fuse_ctrl_core_axi_write_agent_random_seq_t; + fuse_ctrl_core_axi_write_agent_random_seq_t fuse_ctrl_core_axi_write_agent_random_seq; + typedef fuse_ctrl_prim_axi_write_if_random_sequence fuse_ctrl_prim_axi_write_agent_random_seq_t; + fuse_ctrl_prim_axi_write_agent_random_seq_t fuse_ctrl_prim_axi_write_agent_random_seq; + typedef fuse_ctrl_core_axi_read_if_random_sequence fuse_ctrl_core_axi_read_agent_random_seq_t; + fuse_ctrl_core_axi_read_agent_random_seq_t fuse_ctrl_core_axi_read_agent_random_seq; + typedef fuse_ctrl_prim_axi_read_if_random_sequence fuse_ctrl_prim_axi_read_agent_random_seq_t; + fuse_ctrl_prim_axi_read_agent_random_seq_t fuse_ctrl_prim_axi_read_agent_random_seq; + typedef fuse_ctrl_secreg_axi_read_if_random_sequence fuse_ctrl_secreg_axi_read_agent_random_seq_t; + fuse_ctrl_secreg_axi_read_agent_random_seq_t fuse_ctrl_secreg_axi_read_agent_random_seq; + typedef fuse_ctrl_lc_otp_if_random_sequence fuse_ctrl_lc_otp_if_agent_random_seq_t; + fuse_ctrl_lc_otp_if_agent_random_seq_t fuse_ctrl_lc_otp_if_agent_random_seq; + // pragma uvmf custom sequences end + + // Sequencer handles for each active interface in the environment + typedef fuse_ctrl_rst_transaction fuse_ctrl_rst_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_rst_agent_transaction_t) fuse_ctrl_rst_agent_sequencer; + typedef fuse_ctrl_core_axi_write_if_transaction fuse_ctrl_core_axi_write_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_core_axi_write_agent_transaction_t) fuse_ctrl_core_axi_write_agent_sequencer; + typedef fuse_ctrl_prim_axi_write_if_transaction fuse_ctrl_prim_axi_write_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_prim_axi_write_agent_transaction_t) fuse_ctrl_prim_axi_write_agent_sequencer; + typedef fuse_ctrl_core_axi_read_if_transaction fuse_ctrl_core_axi_read_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_core_axi_read_agent_transaction_t) fuse_ctrl_core_axi_read_agent_sequencer; + typedef fuse_ctrl_prim_axi_read_if_transaction fuse_ctrl_prim_axi_read_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_prim_axi_read_agent_transaction_t) fuse_ctrl_prim_axi_read_agent_sequencer; + typedef fuse_ctrl_secreg_axi_read_if_transaction fuse_ctrl_secreg_axi_read_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_secreg_axi_read_agent_transaction_t) fuse_ctrl_secreg_axi_read_agent_sequencer; + typedef fuse_ctrl_lc_otp_if_transaction fuse_ctrl_lc_otp_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_lc_otp_if_agent_transaction_t) fuse_ctrl_lc_otp_if_agent_sequencer; + typedef fuse_ctrl_in_if_transaction fuse_ctrl_in_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_in_if_agent_transaction_t) fuse_ctrl_in_if_agent_sequencer; + + + // Top level environment configuration handle + fuse_ctrl_env_configuration_t top_configuration; + + // Configuration handles to access interface BFM's + fuse_ctrl_rst_configuration fuse_ctrl_rst_agent_config; + fuse_ctrl_core_axi_write_if_configuration fuse_ctrl_core_axi_write_agent_config; + fuse_ctrl_prim_axi_write_if_configuration fuse_ctrl_prim_axi_write_agent_config; + fuse_ctrl_core_axi_read_if_configuration fuse_ctrl_core_axi_read_agent_config; + fuse_ctrl_prim_axi_read_if_configuration fuse_ctrl_prim_axi_read_agent_config; + fuse_ctrl_secreg_axi_read_if_configuration fuse_ctrl_secreg_axi_read_agent_config; + fuse_ctrl_lc_otp_if_configuration fuse_ctrl_lc_otp_if_agent_config; + fuse_ctrl_in_if_configuration fuse_ctrl_in_if_agent_config; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + function new( string name = "" ); + super.new( name ); + // Retrieve the configuration handles from the uvm_config_db + + // Retrieve top level configuration handle + if ( !uvm_config_db#(fuse_ctrl_env_configuration_t)::get(null,UVMF_CONFIGURATIONS, "TOP_ENV_CONFIG",top_configuration) ) begin + `uvm_info("CFG", "*** FATAL *** uvm_config_db::get can not find TOP_ENV_CONFIG. Are you using an older UVMF release than what was used to generate this bench?",UVM_NONE); + `uvm_fatal("CFG", "uvm_config_db#(fuse_ctrl_env_configuration_t)::get cannot find resource TOP_ENV_CONFIG"); + end + + // Retrieve config handles for all agents + if( !uvm_config_db #( fuse_ctrl_rst_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_rst_agent_BFM , fuse_ctrl_rst_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_rst_configuration )::get cannot find resource fuse_ctrl_rst_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_core_axi_write_if_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_core_axi_write_agent_BFM , fuse_ctrl_core_axi_write_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_core_axi_write_if_configuration )::get cannot find resource fuse_ctrl_core_axi_write_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_prim_axi_write_if_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_prim_axi_write_agent_BFM , fuse_ctrl_prim_axi_write_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_prim_axi_write_if_configuration )::get cannot find resource fuse_ctrl_prim_axi_write_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_core_axi_read_if_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_core_axi_read_agent_BFM , fuse_ctrl_core_axi_read_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_core_axi_read_if_configuration )::get cannot find resource fuse_ctrl_core_axi_read_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_prim_axi_read_if_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_prim_axi_read_agent_BFM , fuse_ctrl_prim_axi_read_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_prim_axi_read_if_configuration )::get cannot find resource fuse_ctrl_prim_axi_read_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_secreg_axi_read_if_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_secreg_axi_read_agent_BFM , fuse_ctrl_secreg_axi_read_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_secreg_axi_read_if_configuration )::get cannot find resource fuse_ctrl_secreg_axi_read_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_lc_otp_if_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_lc_otp_if_agent_BFM , fuse_ctrl_lc_otp_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_lc_otp_if_configuration )::get cannot find resource fuse_ctrl_lc_otp_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_in_if_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_in_if_agent_BFM , fuse_ctrl_in_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_in_if_configuration )::get cannot find resource fuse_ctrl_in_if_agent_BFM" ) + + // Assign the sequencer handles from the handles within agent configurations + fuse_ctrl_rst_agent_sequencer = fuse_ctrl_rst_agent_config.get_sequencer(); + fuse_ctrl_core_axi_write_agent_sequencer = fuse_ctrl_core_axi_write_agent_config.get_sequencer(); + fuse_ctrl_prim_axi_write_agent_sequencer = fuse_ctrl_prim_axi_write_agent_config.get_sequencer(); + fuse_ctrl_core_axi_read_agent_sequencer = fuse_ctrl_core_axi_read_agent_config.get_sequencer(); + fuse_ctrl_prim_axi_read_agent_sequencer = fuse_ctrl_prim_axi_read_agent_config.get_sequencer(); + fuse_ctrl_secreg_axi_read_agent_sequencer = fuse_ctrl_secreg_axi_read_agent_config.get_sequencer(); + fuse_ctrl_lc_otp_if_agent_sequencer = fuse_ctrl_lc_otp_if_agent_config.get_sequencer(); + fuse_ctrl_in_if_agent_sequencer = fuse_ctrl_in_if_agent_config.get_sequencer(); + + + + // pragma uvmf custom new begin + // pragma uvmf custom new end + + endfunction + + // **************************************************************************** + virtual task body(); + // pragma uvmf custom body begin + + // Construct sequences here + + fuse_ctrl_env_seq = fuse_ctrl_env_sequence_base_t::type_id::create("fuse_ctrl_env_seq"); + + fuse_ctrl_rst_agent_random_seq = fuse_ctrl_rst_agent_random_seq_t::type_id::create("fuse_ctrl_rst_agent_random_seq"); + fuse_ctrl_core_axi_write_agent_random_seq = fuse_ctrl_core_axi_write_agent_random_seq_t::type_id::create("fuse_ctrl_core_axi_write_agent_random_seq"); + fuse_ctrl_prim_axi_write_agent_random_seq = fuse_ctrl_prim_axi_write_agent_random_seq_t::type_id::create("fuse_ctrl_prim_axi_write_agent_random_seq"); + fuse_ctrl_core_axi_read_agent_random_seq = fuse_ctrl_core_axi_read_agent_random_seq_t::type_id::create("fuse_ctrl_core_axi_read_agent_random_seq"); + fuse_ctrl_prim_axi_read_agent_random_seq = fuse_ctrl_prim_axi_read_agent_random_seq_t::type_id::create("fuse_ctrl_prim_axi_read_agent_random_seq"); + fuse_ctrl_secreg_axi_read_agent_random_seq = fuse_ctrl_secreg_axi_read_agent_random_seq_t::type_id::create("fuse_ctrl_secreg_axi_read_agent_random_seq"); + fuse_ctrl_lc_otp_if_agent_random_seq = fuse_ctrl_lc_otp_if_agent_random_seq_t::type_id::create("fuse_ctrl_lc_otp_if_agent_random_seq"); + fork + fuse_ctrl_rst_agent_config.wait_for_reset(); + fuse_ctrl_core_axi_write_agent_config.wait_for_reset(); + fuse_ctrl_prim_axi_write_agent_config.wait_for_reset(); + fuse_ctrl_core_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_prim_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_secreg_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_lc_otp_if_agent_config.wait_for_reset(); + join + // Start RESPONDER sequences here + fork + join_none + // Start INITIATOR sequences here + fork + repeat (25) fuse_ctrl_rst_agent_random_seq.start(fuse_ctrl_rst_agent_sequencer); + repeat (25) fuse_ctrl_core_axi_write_agent_random_seq.start(fuse_ctrl_core_axi_write_agent_sequencer); + repeat (25) fuse_ctrl_prim_axi_write_agent_random_seq.start(fuse_ctrl_prim_axi_write_agent_sequencer); + repeat (25) fuse_ctrl_core_axi_read_agent_random_seq.start(fuse_ctrl_core_axi_read_agent_sequencer); + repeat (25) fuse_ctrl_prim_axi_read_agent_random_seq.start(fuse_ctrl_prim_axi_read_agent_sequencer); + repeat (25) fuse_ctrl_secreg_axi_read_agent_random_seq.start(fuse_ctrl_secreg_axi_read_agent_sequencer); + repeat (25) fuse_ctrl_lc_otp_if_agent_random_seq.start(fuse_ctrl_lc_otp_if_agent_sequencer); + join + +fuse_ctrl_env_seq.start(top_configuration.vsqr); + + // UVMF_CHANGE_ME : Extend the simulation XXX number of clocks after + // the last sequence to allow for the last sequence item to flow + // through the design. + fork + fuse_ctrl_rst_agent_config.wait_for_num_clocks(400); + fuse_ctrl_core_axi_write_agent_config.wait_for_num_clocks(400); + fuse_ctrl_prim_axi_write_agent_config.wait_for_num_clocks(400); + fuse_ctrl_core_axi_read_agent_config.wait_for_num_clocks(400); + fuse_ctrl_prim_axi_read_agent_config.wait_for_num_clocks(400); + fuse_ctrl_secreg_axi_read_agent_config.wait_for_num_clocks(400); + fuse_ctrl_lc_otp_if_agent_config.wait_for_num_clocks(400); + join + + // pragma uvmf custom body end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/sequences/src/register_test_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/sequences/src/register_test_sequence.svh new file mode 100644 index 000000000..0db60c39b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/sequences/src/register_test_sequence.svh @@ -0,0 +1,76 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains the top level sequence used in register_test. +// It uses the UVM built in register test. Specific UVM built-in tests can be +// selected in the body task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class register_test_sequence extends fuse_ctrl_bench_sequence_base; + + `uvm_object_utils( register_test_sequence ); + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "" ); + super.new(name); + endfunction + + // **************************************************************************** + virtual task body(); + + // Reset the DUT + fork + // pragma uvmf custom register_test_reset begin + // UVMF_CHANGE_ME + // Select the desired wait_for_reset or provide custom mechanism. + // fork-join for this code block may be unnecessary based on your situation. + fuse_ctrl_rst_agent_config.wait_for_reset(); + fuse_ctrl_core_axi_write_agent_config.wait_for_reset(); + fuse_ctrl_prim_axi_write_agent_config.wait_for_reset(); + fuse_ctrl_core_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_prim_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_secreg_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_lc_otp_if_agent_config.wait_for_reset(); + // pragma uvmf custom register_test_reset end + join + + // pragma uvmf custom register_test_setup begin + // UVMF_CHANGE_ME perform potentially necessary operations before running the sequence. + // pragma uvmf custom register_test_setup end + + // pragma uvmf custom register_test_operation begin + // UVMF_CHANGE_ME Perform your custom register test + // pragma uvmf custom register_test_operation end + + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/hdl_top.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/hdl_top.compile new file mode 100644 index 000000000..4c9de0a48 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/hdl_top.compile @@ -0,0 +1,16 @@ +incdir: + - ${uvm_path}/src + - . +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ../parameters/fuse_ctrl_parameters_pkg.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hdl.compile +src: + - hdl_top.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/hdl_top.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/hdl_top.sv new file mode 100644 index 000000000..5a9b63255 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/hdl_top.sv @@ -0,0 +1,227 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// Description: This top level module instantiates all synthesizable +// static content. This and tb_top.sv are the two top level modules +// of the simulation. +// +// This module instantiates the following: +// DUT: The Design Under Test +// Interfaces: Signal bundles that contain signals connected to DUT +// Driver BFM's: BFM's that actively drive interface signals +// Monitor BFM's: BFM's that passively monitor interface signals +// +//---------------------------------------------------------------------- + +//---------------------------------------------------------------------- +// + +module hdl_top; + +import fuse_ctrl_parameters_pkg::*; +import uvmf_base_pkg_hdl::*; + + // pragma attribute hdl_top partition_module_xrtl +// pragma uvmf custom clock_generator begin + bit clk; + // Instantiate a clk driver + // tbx clkgen + initial begin + clk = 0; + #0ns; + forever begin + clk = ~clk; + #5ns; + end + end +// pragma uvmf custom clock_generator end + +// pragma uvmf custom reset_generator begin + bit rst; + // Instantiate a rst driver + // tbx clkgen + initial begin + rst = 0; + #200ns; + rst = 1; + end +// pragma uvmf custom reset_generator end + + // pragma uvmf custom module_item_additional begin + logic edn_clk; + logic edn_rst_n; + // pragma uvmf custom module_item_additional end + + // Instantiate the signal bundle, monitor bfm and driver bfm for each interface. + // The signal bundle, _if, contains signals to be connected to the DUT. + // The monitor, monitor_bfm, observes the bus, _if, and captures transactions. + // The driver, driver_bfm, drives transactions onto the bus, _if. + fuse_ctrl_rst_if fuse_ctrl_rst_agent_bus( + // pragma uvmf custom fuse_ctrl_rst_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_rst_agent_bus_connections end + ); + fuse_ctrl_core_axi_write_if_if fuse_ctrl_core_axi_write_agent_bus( + // pragma uvmf custom fuse_ctrl_core_axi_write_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_core_axi_write_agent_bus_connections end + ); + fuse_ctrl_prim_axi_write_if_if fuse_ctrl_prim_axi_write_agent_bus( + // pragma uvmf custom fuse_ctrl_prim_axi_write_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_prim_axi_write_agent_bus_connections end + ); + fuse_ctrl_core_axi_read_if_if fuse_ctrl_core_axi_read_agent_bus( + // pragma uvmf custom fuse_ctrl_core_axi_read_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_core_axi_read_agent_bus_connections end + ); + fuse_ctrl_prim_axi_read_if_if fuse_ctrl_prim_axi_read_agent_bus( + // pragma uvmf custom fuse_ctrl_prim_axi_read_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_prim_axi_read_agent_bus_connections end + ); + fuse_ctrl_secreg_axi_read_if_if fuse_ctrl_secreg_axi_read_agent_bus( + // pragma uvmf custom fuse_ctrl_secreg_axi_read_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_secreg_axi_read_agent_bus_connections end + ); + fuse_ctrl_lc_otp_if_if fuse_ctrl_lc_otp_if_agent_bus( + // pragma uvmf custom fuse_ctrl_lc_otp_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_lc_otp_if_agent_bus_connections end + ); + fuse_ctrl_in_if_if fuse_ctrl_in_if_agent_bus( + // pragma uvmf custom fuse_ctrl_in_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_in_if_agent_bus_connections end + ); + fuse_ctrl_rst_monitor_bfm fuse_ctrl_rst_agent_mon_bfm(fuse_ctrl_rst_agent_bus.monitor_port); + fuse_ctrl_core_axi_write_if_monitor_bfm fuse_ctrl_core_axi_write_agent_mon_bfm(fuse_ctrl_core_axi_write_agent_bus.monitor_port); + fuse_ctrl_prim_axi_write_if_monitor_bfm fuse_ctrl_prim_axi_write_agent_mon_bfm(fuse_ctrl_prim_axi_write_agent_bus.monitor_port); + fuse_ctrl_core_axi_read_if_monitor_bfm fuse_ctrl_core_axi_read_agent_mon_bfm(fuse_ctrl_core_axi_read_agent_bus.monitor_port); + fuse_ctrl_prim_axi_read_if_monitor_bfm fuse_ctrl_prim_axi_read_agent_mon_bfm(fuse_ctrl_prim_axi_read_agent_bus.monitor_port); + fuse_ctrl_secreg_axi_read_if_monitor_bfm fuse_ctrl_secreg_axi_read_agent_mon_bfm(fuse_ctrl_secreg_axi_read_agent_bus.monitor_port); + fuse_ctrl_lc_otp_if_monitor_bfm fuse_ctrl_lc_otp_if_agent_mon_bfm(fuse_ctrl_lc_otp_if_agent_bus.monitor_port); + fuse_ctrl_in_if_monitor_bfm fuse_ctrl_in_if_agent_mon_bfm(fuse_ctrl_in_if_agent_bus.monitor_port); + fuse_ctrl_rst_driver_bfm fuse_ctrl_rst_agent_drv_bfm(fuse_ctrl_rst_agent_bus.initiator_port); + fuse_ctrl_core_axi_write_if_driver_bfm fuse_ctrl_core_axi_write_agent_drv_bfm(fuse_ctrl_core_axi_write_agent_bus.initiator_port); + fuse_ctrl_prim_axi_write_if_driver_bfm fuse_ctrl_prim_axi_write_agent_drv_bfm(fuse_ctrl_prim_axi_write_agent_bus.initiator_port); + fuse_ctrl_core_axi_read_if_driver_bfm fuse_ctrl_core_axi_read_agent_drv_bfm(fuse_ctrl_core_axi_read_agent_bus.initiator_port); + fuse_ctrl_prim_axi_read_if_driver_bfm fuse_ctrl_prim_axi_read_agent_drv_bfm(fuse_ctrl_prim_axi_read_agent_bus.initiator_port); + fuse_ctrl_secreg_axi_read_if_driver_bfm fuse_ctrl_secreg_axi_read_agent_drv_bfm(fuse_ctrl_secreg_axi_read_agent_bus.initiator_port); + fuse_ctrl_lc_otp_if_driver_bfm fuse_ctrl_lc_otp_if_agent_drv_bfm(fuse_ctrl_lc_otp_if_agent_bus.initiator_port); + fuse_ctrl_in_if_driver_bfm fuse_ctrl_in_if_agent_drv_bfm(fuse_ctrl_in_if_agent_bus.initiator_port); + + // pragma uvmf custom dut_instantiation begin + // UVMF_CHANGE_ME : Add DUT and connect to signals in _bus interfaces listed above + // Instantiate your DUT here + // These DUT's instantiated to show verilog and vhdl instantiation + //verilog_dut dut_verilog( .clk(clk), .rst(rst), .in_signal(vhdl_to_verilog_signal), .out_signal(verilog_to_vhdl_signal)); + //vhdl_dut dut_vhdl ( .clk(clk), .rst(rst), .in_signal(verilog_to_vhdl_signal), .out_signal(vhdl_to_verilog_signal)); + + otp_ctrl_top #( + .MemInitFile (MemInitFile) + ) dut ( + .clk_i (fuse_ctrl_rst_agent_bus.clk_i ), + .rst_ni (fuse_ctrl_rst_agent_bus.rst_ni ), + // edn + .clk_edn_i (edn_clk ), + .rst_edn_ni (edn_rst_n ), + .edn_o (fuse_ctrl_edn_o), //(edn_if[0].req ), + .edn_i (fuse_ctrl_in_if_agent_bus.edn_i), //({edn_if[0].ack, edn_if[0].d_data}), + // AXI interface + .s_core_axi_r_if (), + .s_core_axi_w_if (), + .s_prim_axi_r_if (), + .s_prim_axi_w_if (), + .s_secreg_axi_r_if (), + // interrupt + .intr_otp_operation_done_o (fuseintr_otp_operation_done), + .intr_otp_error_o (intr_otp_error), + // alert + .alert_rx_i (alert_rx_i ), //(alert_rx parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ALERT_TEST_OFFSET = 13'h c; + .alert_tx_o (alert_tx_o ), //(alert_tx ), + // ast + .obs_ctrl_i (obs_ctrl_i), //(otp_ctrl_if.obs_ctrl_i), + .otp_obs_o (otp_obs_o), + .otp_ast_pwr_seq_o (otp_ast_pwr_seq_o), //(ast_req), + .otp_ast_pwr_seq_h_i (otp_ast_pwr_seq_h_i), //(otp_ctrl_if.otp_ast_pwr_seq_h_i), + // pwrmgr + .pwr_otp_i (pwr_otp_init_i), //(otp_ctrl_if.pwr_otp_init_i), + .pwr_otp_o (pwr_otp_o), //({otp_ctrl_if.pwr_otp_done_o, otp_ctrl_if.pwr_otp_idle_o}), + // lc + .lc_otp_vendor_test_i (lc_otp_vendor_test_i), //(otp_ctrl_if.otp_vendor_test_ctrl_i), + .lc_otp_vendor_test_o (lc_otp_vendor_test_o), //(otp_ctrl_if.otp_vendor_test_status_o), + .lc_otp_program_i (lc_otp_program_i), //({lc_prog_if.req, lc_prog_if.h_data}), + .lc_otp_program_o (lc_otp_program_o), //({lc_prog_if.d_data, lc_prog_if.ack}), + //.lc_creator_seed_sw_rw_en_i (lc_creator_seed_sw_rw_en_i), //(otp_ctrl_if.lc_creator_seed_sw_rw_en_i), + //.lc_owner_seed_sw_rw_en_i (lc_owner_seed_sw_rw_en_i), //(otp_ctrl_if.lc_owner_seed_sw_rw_en_i), + //.lc_seed_hw_rd_en_i (lc_seed_hw_rd_en_i), //(otp_ctrl_if.lc_seed_hw_rd_en_i), + .lc_dft_en_i (lc_dft_en_i), //(otp_ctrl_if.lc_dft_en_i), + .lc_escalate_en_i (lc_escalate_en_i), //(otp_ctrl_if.lc_escalate_en_i), + .lc_check_byp_en_i (lc_check_byp_en_i), //(otp_ctrl_if.lc_check_byp_en_i), + .otp_lc_data_o (otp_lc_data_o), //(otp_ctrl_if.lc_data_o), + + + .otp_broadcast_o (otp_broadcast_o), //(otp_ctrl_if.otp_broadcast_o), + .otp_ext_voltage_h_io (otp_ext_voltage_h_io), + //scan + .scan_en_i (scan_en_i), //(otp_ctrl_if.scan_en_i), + .scan_rst_ni (scan_rst_ni), //(otp_ctrl_if.scan_rst_ni), + .scanmode_i (scanmode_i), //(otp_ctrl_if.scanmode_i), + + // Test-related GPIO output + .cio_test_o (cio_test_o), //(otp_ctrl_if.cio_test_o), + .cio_test_en_o (cio_test_en_o) //(otp_ctrl_if.cio_test_en_o) + ); + // pragma uvmf custom dut_instantiation end + + initial begin // tbx vif_binding_block + import uvm_pkg::uvm_config_db; + // The monitor_bfm and driver_bfm for each interface is placed into the uvm_config_db. + // They are placed into the uvm_config_db using the string names defined in the parameters package. + // The string names are passed to the agent configurations by test_top through the top level configuration. + // They are retrieved by the agents configuration class for use by the agent. + uvm_config_db #( virtual fuse_ctrl_rst_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_rst_agent_BFM , fuse_ctrl_rst_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_write_if_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_write_agent_BFM , fuse_ctrl_core_axi_write_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_write_if_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_write_agent_BFM , fuse_ctrl_prim_axi_write_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_read_if_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_read_agent_BFM , fuse_ctrl_core_axi_read_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_read_if_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_read_agent_BFM , fuse_ctrl_prim_axi_read_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_secreg_axi_read_if_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_secreg_axi_read_agent_BFM , fuse_ctrl_secreg_axi_read_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_lc_otp_if_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_lc_otp_if_agent_BFM , fuse_ctrl_lc_otp_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_in_if_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_in_if_agent_BFM , fuse_ctrl_in_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_rst_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_rst_agent_BFM , fuse_ctrl_rst_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_write_if_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_write_agent_BFM , fuse_ctrl_core_axi_write_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_write_if_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_write_agent_BFM , fuse_ctrl_prim_axi_write_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_read_if_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_read_agent_BFM , fuse_ctrl_core_axi_read_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_read_if_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_read_agent_BFM , fuse_ctrl_prim_axi_read_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_secreg_axi_read_if_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_secreg_axi_read_agent_BFM , fuse_ctrl_secreg_axi_read_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_lc_otp_if_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_lc_otp_if_agent_BFM , fuse_ctrl_lc_otp_if_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_in_if_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_in_if_agent_BFM , fuse_ctrl_in_if_agent_drv_bfm ); + end + +endmodule + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/hdl_top.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/hdl_top.vinfo new file mode 100644 index 000000000..82d17feab --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/hdl_top.vinfo @@ -0,0 +1,12 @@ +@use $UVMF_PROJECT_DIR/rtl/verilog/verilog_dut.vinfo +@use $UVMF_PROJECT_DIR/tb/parameters/fuse_ctrl_parameters_pkg.vinfo +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_bfm.vinfo +hdl_top.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/hvl_top.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/hvl_top.compile new file mode 100644 index 000000000..040488764 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/hvl_top.compile @@ -0,0 +1,7 @@ +incdir: + - ${uvm_path}/src + - . +needs: + - ../tests/fuse_ctrl_tests_pkg.compile +src: + - hvl_top.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/hvl_top.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/hvl_top.sv new file mode 100644 index 000000000..68e3fc6f6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/hvl_top.sv @@ -0,0 +1,47 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +// +// DESCRIPTION: This module loads the test package and starts the UVM phases. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +module hvl_top; + +import uvm_pkg::*; +import fuse_ctrl_tests_pkg::*; + + // pragma uvmf custom module_item_additional begin + // pragma uvmf custom module_item_additional end + + initial begin + $timeformat(-9,3,"ns",5); + run_test(); + end + +endmodule + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/hvl_top.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/hvl_top.vinfo new file mode 100644 index 000000000..31185e42f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/hvl_top.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_PROJECT_DIR/tb/tests/fuse_ctrl_tests_pkg.vinfo +hvl_top.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/top_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/top_filelist_hdl.f new file mode 100644 index 000000000..1e9dab653 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/top_filelist_hdl.f @@ -0,0 +1,3 @@ +$UVMF_PROJECT_DIR/tb/testbench/hdl_top.sv +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/top_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/top_filelist_hvl.f new file mode 100644 index 000000000..42383ab2d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/testbench/top_filelist_hvl.f @@ -0,0 +1,3 @@ +$UVMF_PROJECT_DIR/tb/testbench/hvl_top.sv +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.compile new file mode 100644 index 000000000..a2b2c59b7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.compile @@ -0,0 +1,15 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if.compile + - ../../../../verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile + - ../parameters/fuse_ctrl_parameters_pkg.compile + - ../sequences/fuse_ctrl_sequences_pkg.compile +src: + - fuse_ctrl_tests_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.sv new file mode 100644 index 000000000..d597d2257 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.sv @@ -0,0 +1,80 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This package contains all tests currently written for +// the simulation project. Once compiled, any test can be selected +// from the vsim command line using +UVM_TESTNAME=yourTestNameHere +// +// CONTAINS: +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +package fuse_ctrl_tests_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg::*; + import fuse_ctrl_parameters_pkg::*; + import fuse_ctrl_env_pkg::*; + import fuse_ctrl_sequences_pkg::*; + import fuse_ctrl_rst_pkg::*; + import fuse_ctrl_rst_pkg_hdl::*; + import fuse_ctrl_core_axi_write_if_pkg::*; + import fuse_ctrl_core_axi_write_if_pkg_hdl::*; + import fuse_ctrl_prim_axi_write_if_pkg::*; + import fuse_ctrl_prim_axi_write_if_pkg_hdl::*; + import fuse_ctrl_core_axi_read_if_pkg::*; + import fuse_ctrl_core_axi_read_if_pkg_hdl::*; + import fuse_ctrl_prim_axi_read_if_pkg::*; + import fuse_ctrl_prim_axi_read_if_pkg_hdl::*; + import fuse_ctrl_secreg_axi_read_if_pkg::*; + import fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; + import fuse_ctrl_lc_otp_if_pkg::*; + import fuse_ctrl_lc_otp_if_pkg_hdl::*; + import fuse_ctrl_in_if_pkg::*; + import fuse_ctrl_in_if_pkg_hdl::*; + + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + `include "src/test_top.svh" + `include "src/register_test.svh" + `include "src/example_derived_test.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new tests to the src directory + // be sure to add the test file here so that it will be + // compiled as part of the test package. Be sure to place + // the new test after any base tests of the new test. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.vinfo new file mode 100644 index 000000000..5b6552f52 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.vinfo @@ -0,0 +1,14 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo +@use $UVMF_PROJECT_DIR/tb/parameters/fuse_ctrl_parameters_pkg.vinfo +@use $UVMF_PROJECT_DIR/tb/sequences/fuse_ctrl_sequences_pkg.vinfo ++incdir+@vinfodir +fuse_ctrl_tests_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/tests/src/example_derived_test.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/tests/src/example_derived_test.svh new file mode 100644 index 000000000..82d6c45ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/tests/src/example_derived_test.svh @@ -0,0 +1,57 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This test extends test_top and makes +// changes to test_top using the UVM factory type_override: +// +// Test scenario: +// This is a template test that can be used to create future tests. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class example_derived_test extends test_top; + + `uvm_component_utils( example_derived_test ); + + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + + virtual function void build_phase(uvm_phase phase); + // The factory override below is an example of how to replace the fuse_ctrl_bench_sequence_base + // sequence with the example_derived_test_sequence. + fuse_ctrl_bench_sequence_base::type_id::set_type_override(example_derived_test_sequence::get_type()); + // Execute the build_phase of test_top AFTER all factory overrides have been created. + super.build_phase(phase); + // pragma uvmf custom configuration_settings_post_randomize begin + // UVMF_CHANGE_ME Test specific configuration values can be set here. + // The configuration structure has already been randomized. + // pragma uvmf custom configuration_settings_post_randomize end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/tests/src/register_test.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/tests/src/register_test.svh new file mode 100644 index 000000000..1be722286 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/tests/src/register_test.svh @@ -0,0 +1,54 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This test extends test_top and makes +// changes to test_top using the UVM factory type_override: +// +// Test scenario: +// This is a template test that can be used to create future tests. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class register_test extends test_top; + + `uvm_component_utils( register_test ); + + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + + virtual function void build_phase(uvm_phase phase); + // The factory override below replaces the fuse_ctrl_bench_sequence_base + // sequence with the register_test_sequence. + fuse_ctrl_bench_sequence_base::type_id::set_type_override(register_test_sequence::get_type()); + // Execute the build_phase of test_top AFTER all factory overrides have been created. + super.build_phase(phase); + endfunction + + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/tests/src/test_top.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/tests/src/test_top.svh new file mode 100644 index 000000000..c82402a71 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/tb/tests/src/test_top.svh @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// Description: This top level UVM test is the base class for all +// future tests created for this project. +// +// This test class contains: +// Configuration: The top level configuration for the project. +// Environment: The top level environment for the project. +// Top_level_sequence: The top level sequence for the project. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +typedef fuse_ctrl_env_configuration fuse_ctrl_env_configuration_t; +typedef fuse_ctrl_environment fuse_ctrl_environment_t; + +class test_top extends uvmf_test_base #(.CONFIG_T(fuse_ctrl_env_configuration_t), + .ENV_T(fuse_ctrl_environment_t), + .TOP_LEVEL_SEQ_T(fuse_ctrl_bench_sequence_base)); + + `uvm_component_utils( test_top ); + + + + string interface_names[] = { + fuse_ctrl_rst_agent_BFM /* fuse_ctrl_rst_agent [0] */ , + fuse_ctrl_core_axi_write_agent_BFM /* fuse_ctrl_core_axi_write_agent [1] */ , + fuse_ctrl_prim_axi_write_agent_BFM /* fuse_ctrl_prim_axi_write_agent [2] */ , + fuse_ctrl_core_axi_read_agent_BFM /* fuse_ctrl_core_axi_read_agent [3] */ , + fuse_ctrl_prim_axi_read_agent_BFM /* fuse_ctrl_prim_axi_read_agent [4] */ , + fuse_ctrl_secreg_axi_read_agent_BFM /* fuse_ctrl_secreg_axi_read_agent [5] */ , + fuse_ctrl_lc_otp_if_agent_BFM /* fuse_ctrl_lc_otp_if_agent [6] */ , + fuse_ctrl_in_if_agent_BFM /* fuse_ctrl_in_if_agent [7] */ +}; + +uvmf_active_passive_t interface_activities[] = { + ACTIVE /* fuse_ctrl_rst_agent [0] */ , + ACTIVE /* fuse_ctrl_core_axi_write_agent [1] */ , + ACTIVE /* fuse_ctrl_prim_axi_write_agent [2] */ , + ACTIVE /* fuse_ctrl_core_axi_read_agent [3] */ , + ACTIVE /* fuse_ctrl_prim_axi_read_agent [4] */ , + ACTIVE /* fuse_ctrl_secreg_axi_read_agent [5] */ , + ACTIVE /* fuse_ctrl_lc_otp_if_agent [6] */ , + ACTIVE /* fuse_ctrl_in_if_agent [7] */ }; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // FUNCTION: new() + // This is the standard systemVerilog constructor. All components are + // constructed in the build_phase to allow factory overriding. + // + function new( string name = "", uvm_component parent = null ); + super.new( name ,parent ); + endfunction + + + + // **************************************************************************** + // FUNCTION: build_phase() + // The construction of the configuration and environment classes is done in + // the build_phase of uvmf_test_base. Once the configuraton and environment + // classes are built then the initialize call is made to perform the + // following: + // Monitor and driver BFM virtual interface handle passing into agents + // Set the active/passive state for each agent + // Once this build_phase completes, the build_phase of the environment is + // executed which builds the agents. + // + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + // pragma uvmf custom configuration_settings_post_randomize begin + // pragma uvmf custom configuration_settings_post_randomize end + configuration.initialize(NA, "uvm_test_top.environment", interface_names, null, interface_activities); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/yaml/fuse_ctrl_bench.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/yaml/fuse_ctrl_bench.yaml new file mode 100644 index 000000000..407a411bf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/project_benches/fuse_ctrl/yaml/fuse_ctrl_bench.yaml @@ -0,0 +1,29 @@ +uvmf: + benches: + fuse_ctrl: + active_passive: + - bfm_name: fuse_ctrl_rst_agent + value: ACTIVE + - bfm_name: fuse_ctrl_core_axi_write_agent + value: ACTIVE + - bfm_name: fuse_ctrl_prim_axi_write_agent + value: ACTIVE + - bfm_name: fuse_ctrl_core_axi_read_agent + value: ACTIVE + - bfm_name: fuse_ctrl_prim_axi_read_agent + value: ACTIVE + - bfm_name: fuse_ctrl_secreg_axi_read_agent + value: ACTIVE + - bfm_name: fuse_ctrl_lc_otp_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_in_if_agent + value: ACTIVE + active_passive_default: ACTIVE + clock_half_period: 5ns + clock_phase_offset: 0ns + existing_library_component: 'True' + interface_params: [] + reset_assertion_level: 'False' + reset_duration: 200ns + top_env: fuse_ctrl + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/.project new file mode 100644 index 000000000..ec64afa4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/.project @@ -0,0 +1,32 @@ + + + fuse_ctrl_env_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/.svproject new file mode 100644 index 000000000..bcfe6ac3d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/Makefile new file mode 100644 index 000000000..4cf61d51d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/Makefile @@ -0,0 +1,56 @@ +# fuse_ctrl environment packages source and make target + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +# Include all requisite sub-environment package targets for this bench + +fuse_ctrl_ENV_PKG =\ + $(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv + +COMP_fuse_ctrl_PKG_TGT_0 = q_comp_fuse_ctrl_env_pkg +COMP_fuse_ctrl_PKG_TGT_1 = v_comp_fuse_ctrl_env_pkg +COMP_fuse_ctrl_PKG_TGT = $(COMP_fuse_ctrl_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_env_pkg: $(COMP_fuse_ctrl_PKG_TGT) + +q_comp_fuse_ctrl_env_pkg: + $(HVL_COMP_CMD) +incdir+$(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg $(fuse_ctrl_ENV_PKG) + +v_comp_fuse_ctrl_env_pkg: q_comp_fuse_ctrl_env_pkg + $(VELANALYZE_HVL_CMD) +incdir+$(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg $(fuse_ctrl_ENV_PKG) + + + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_ENV_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_env_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_env_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_env_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_env_pkg += -I$(fuse_ctrl_ENV_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_env_pkg += $(fuse_ctrl_ENV_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_env_pkg += \ + \ + -o .so + +comp_fuse_ctrl_env_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Environment C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_env_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_env_pkg) + @echo "--------------------------------" + @echo "Linking Environment C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_env_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_env_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/compile.do new file mode 100644 index 000000000..05dca66cc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/compile.do @@ -0,0 +1,12 @@ +# Tcl do file for compile of fuse_ctrl interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + + +quietly set cmd [format "vlog -timescale 1ps/1ps +incdir+%s/environment_packages/fuse_ctrl_env_pkg" $env(UVMF_VIP_LIBRARY_HOME)] +quietly set cmd [format "%s %s/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv" $cmd $env(UVMF_VIP_LIBRARY_HOME)] +eval $cmd + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile new file mode 100644 index 000000000..e7d634b95 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile @@ -0,0 +1,14 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hvl.compile + +src: + - fuse_ctrl_env_pkg.sv + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv new file mode 100644 index 000000000..486dd38e5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// environment package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_env_pkg; + + import uvm_pkg::*; + `include "uvm_macros.svh" + import uvmf_base_pkg::*; + import fuse_ctrl_rst_pkg::*; + import fuse_ctrl_rst_pkg_hdl::*; + import fuse_ctrl_core_axi_write_if_pkg::*; + import fuse_ctrl_core_axi_write_if_pkg_hdl::*; + import fuse_ctrl_prim_axi_write_if_pkg::*; + import fuse_ctrl_prim_axi_write_if_pkg_hdl::*; + import fuse_ctrl_core_axi_read_if_pkg::*; + import fuse_ctrl_core_axi_read_if_pkg_hdl::*; + import fuse_ctrl_prim_axi_read_if_pkg::*; + import fuse_ctrl_prim_axi_read_if_pkg_hdl::*; + import fuse_ctrl_secreg_axi_read_if_pkg::*; + import fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; + import fuse_ctrl_lc_otp_if_pkg::*; + import fuse_ctrl_lc_otp_if_pkg_hdl::*; + import fuse_ctrl_in_if_pkg::*; + import fuse_ctrl_in_if_pkg_hdl::*; + + `uvm_analysis_imp_decl(_fuse_ctrl_rst_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_core_axi_write_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_prim_axi_write_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_core_axi_read_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_prim_axi_read_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_secreg_axi_read_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_lc_otp_if_agent_ae) + `uvm_analysis_imp_decl(_expected_analysis_export) + `uvm_analysis_imp_decl(_actual_analysis_export) + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_env_typedefs.svh" + `include "src/fuse_ctrl_env_configuration.svh" + `include "src/fuse_ctrl_predictor.svh" + `include "src/fuse_ctrl_scoreboard.svh" + `include "src/fuse_ctrl_environment.svh" + `include "src/fuse_ctrl_env_sequence_base.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new environment level sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the environment package. Be sure to place + // the new sequence after any base sequence of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo new file mode 100644 index 000000000..2a26a8b67 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo @@ -0,0 +1,11 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.vinfo ++incdir+@vinfodir +fuse_ctrl_env_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F new file mode 100644 index 000000000..b40213df3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F @@ -0,0 +1,12 @@ + +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + +// Sub-Environments + ++incdir+. +./fuse_ctrl_env_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_configuration.svh new file mode 100644 index 000000000..16e5d8ed9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_configuration.svh @@ -0,0 +1,205 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: THis is the configuration for the fuse_ctrl environment. +// it contains configuration classes for each agent. It also contains +// environment level configuration variables. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_env_configuration +extends uvmf_environment_configuration_base; + + `uvm_object_utils( fuse_ctrl_env_configuration ) + + +//Constraints for the configuration variables: + + + covergroup fuse_ctrl_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + + typedef fuse_ctrl_rst_configuration fuse_ctrl_rst_agent_config_t; + rand fuse_ctrl_rst_agent_config_t fuse_ctrl_rst_agent_config; + + typedef fuse_ctrl_core_axi_write_if_configuration fuse_ctrl_core_axi_write_agent_config_t; + rand fuse_ctrl_core_axi_write_agent_config_t fuse_ctrl_core_axi_write_agent_config; + + typedef fuse_ctrl_prim_axi_write_if_configuration fuse_ctrl_prim_axi_write_agent_config_t; + rand fuse_ctrl_prim_axi_write_agent_config_t fuse_ctrl_prim_axi_write_agent_config; + + typedef fuse_ctrl_core_axi_read_if_configuration fuse_ctrl_core_axi_read_agent_config_t; + rand fuse_ctrl_core_axi_read_agent_config_t fuse_ctrl_core_axi_read_agent_config; + + typedef fuse_ctrl_prim_axi_read_if_configuration fuse_ctrl_prim_axi_read_agent_config_t; + rand fuse_ctrl_prim_axi_read_agent_config_t fuse_ctrl_prim_axi_read_agent_config; + + typedef fuse_ctrl_secreg_axi_read_if_configuration fuse_ctrl_secreg_axi_read_agent_config_t; + rand fuse_ctrl_secreg_axi_read_agent_config_t fuse_ctrl_secreg_axi_read_agent_config; + + typedef fuse_ctrl_lc_otp_if_configuration fuse_ctrl_lc_otp_if_agent_config_t; + rand fuse_ctrl_lc_otp_if_agent_config_t fuse_ctrl_lc_otp_if_agent_config; + + typedef fuse_ctrl_in_if_configuration fuse_ctrl_in_if_agent_config_t; + rand fuse_ctrl_in_if_agent_config_t fuse_ctrl_in_if_agent_config; + + + + + typedef uvmf_virtual_sequencer_base #(.CONFIG_T(fuse_ctrl_env_configuration)) fuse_ctrl_vsqr_t; + fuse_ctrl_vsqr_t vsqr; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// This function constructs the configuration object for each agent in the environment. +// + function new( string name = "" ); + super.new( name ); + + + fuse_ctrl_rst_agent_config = fuse_ctrl_rst_agent_config_t::type_id::create("fuse_ctrl_rst_agent_config"); + fuse_ctrl_core_axi_write_agent_config = fuse_ctrl_core_axi_write_agent_config_t::type_id::create("fuse_ctrl_core_axi_write_agent_config"); + fuse_ctrl_prim_axi_write_agent_config = fuse_ctrl_prim_axi_write_agent_config_t::type_id::create("fuse_ctrl_prim_axi_write_agent_config"); + fuse_ctrl_core_axi_read_agent_config = fuse_ctrl_core_axi_read_agent_config_t::type_id::create("fuse_ctrl_core_axi_read_agent_config"); + fuse_ctrl_prim_axi_read_agent_config = fuse_ctrl_prim_axi_read_agent_config_t::type_id::create("fuse_ctrl_prim_axi_read_agent_config"); + fuse_ctrl_secreg_axi_read_agent_config = fuse_ctrl_secreg_axi_read_agent_config_t::type_id::create("fuse_ctrl_secreg_axi_read_agent_config"); + fuse_ctrl_lc_otp_if_agent_config = fuse_ctrl_lc_otp_if_agent_config_t::type_id::create("fuse_ctrl_lc_otp_if_agent_config"); + fuse_ctrl_in_if_agent_config = fuse_ctrl_in_if_agent_config_t::type_id::create("fuse_ctrl_in_if_agent_config"); + + + fuse_ctrl_configuration_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that configuration variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + + // pragma uvmf custom new begin + // pragma uvmf custom new end + endfunction + +// **************************************************************************** +// FUNCTION : set_vsqr() +// This function is used to assign the vsqr handle. + virtual function void set_vsqr( fuse_ctrl_vsqr_t vsqr); + this.vsqr = vsqr; + endfunction : set_vsqr + +// **************************************************************************** +// FUNCTION: post_randomize() +// This function is automatically called after the randomize() function +// is executed. +// + function void post_randomize(); + super.post_randomize(); + // pragma uvmf custom post_randomize begin + // pragma uvmf custom post_randomize end + endfunction + +// **************************************************************************** +// FUNCTION: convert2string() +// This function converts all variables in this class to a single string for +// logfile reporting. This function concatenates the convert2string result for +// each agent configuration in this configuration class. +// + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + return { + + "\n", fuse_ctrl_rst_agent_config.convert2string, + "\n", fuse_ctrl_core_axi_write_agent_config.convert2string, + "\n", fuse_ctrl_prim_axi_write_agent_config.convert2string, + "\n", fuse_ctrl_core_axi_read_agent_config.convert2string, + "\n", fuse_ctrl_prim_axi_read_agent_config.convert2string, + "\n", fuse_ctrl_secreg_axi_read_agent_config.convert2string, + "\n", fuse_ctrl_lc_otp_if_agent_config.convert2string + + + }; + // pragma uvmf custom convert2string end + endfunction +// **************************************************************************** +// FUNCTION: initialize(); +// This function configures each interface agents configuration class. The +// sim level determines the active/passive state of the agent. The environment_path +// identifies the hierarchy down to and including the instantiation name of the +// environment for this configuration class. Each instance of the environment +// has its own configuration class. The string interface names are used by +// the agent configurations to identify the virtual interface handle to pull from +// the uvm_config_db. +// + function void initialize(uvmf_sim_level_t sim_level, + string environment_path, + string interface_names[], + uvm_reg_block register_model = null, + uvmf_active_passive_t interface_activity[] = {} + ); + + super.initialize(sim_level, environment_path, interface_names, register_model, interface_activity); + + + + // Interface initialization for local agents + fuse_ctrl_rst_agent_config.initialize( interface_activity[0], {environment_path,".fuse_ctrl_rst_agent"}, interface_names[0]); + fuse_ctrl_rst_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_rst_agent_config.has_coverage = 1; + fuse_ctrl_core_axi_write_agent_config.initialize( interface_activity[1], {environment_path,".fuse_ctrl_core_axi_write_agent"}, interface_names[1]); + fuse_ctrl_core_axi_write_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_core_axi_write_agent_config.has_coverage = 1; + fuse_ctrl_prim_axi_write_agent_config.initialize( interface_activity[2], {environment_path,".fuse_ctrl_prim_axi_write_agent"}, interface_names[2]); + fuse_ctrl_prim_axi_write_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_prim_axi_write_agent_config.has_coverage = 1; + fuse_ctrl_core_axi_read_agent_config.initialize( interface_activity[3], {environment_path,".fuse_ctrl_core_axi_read_agent"}, interface_names[3]); + fuse_ctrl_core_axi_read_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_core_axi_read_agent_config.has_coverage = 1; + fuse_ctrl_prim_axi_read_agent_config.initialize( interface_activity[4], {environment_path,".fuse_ctrl_prim_axi_read_agent"}, interface_names[4]); + fuse_ctrl_prim_axi_read_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_prim_axi_read_agent_config.has_coverage = 1; + fuse_ctrl_secreg_axi_read_agent_config.initialize( interface_activity[5], {environment_path,".fuse_ctrl_secreg_axi_read_agent"}, interface_names[5]); + fuse_ctrl_secreg_axi_read_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_secreg_axi_read_agent_config.has_coverage = 1; + fuse_ctrl_lc_otp_if_agent_config.initialize( interface_activity[6], {environment_path,".fuse_ctrl_lc_otp_if_agent"}, interface_names[6]); + fuse_ctrl_lc_otp_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_lc_otp_if_agent_config.has_coverage = 1; + fuse_ctrl_in_if_agent_config.initialize( interface_activity[7], {environment_path,".fuse_ctrl_in_if_agent"}, interface_names[7]); + fuse_ctrl_in_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_in_if_agent_config.has_coverage = 1; + + + + + + // pragma uvmf custom initialize begin + // pragma uvmf custom initialize end + + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_sequence_base.svh new file mode 100644 index 000000000..fd194b363 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_sequence_base.svh @@ -0,0 +1,130 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains environment level sequences that will +// be reused from block to top level simulations. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_env_sequence_base #( + type CONFIG_T + ) extends uvmf_virtual_sequence_base #(.CONFIG_T(CONFIG_T)); + + + `uvm_object_param_utils( fuse_ctrl_env_sequence_base #( + CONFIG_T + ) ); + + +// This fuse_ctrl_env_sequence_base contains a handle to a fuse_ctrl_env_configuration object +// named configuration. This configuration variable contains a handle to each +// sequencer within each agent within this environment and any sub-environments. +// The configuration object handle is automatically assigned in the pre_body in the +// base class of this sequence. The configuration handle is retrieved from the +// virtual sequencer that this sequence is started on. +// Available sequencer handles within the environment configuration: + + // Initiator agent sequencers in fuse_ctrl_environment: + // configuration.fuse_ctrl_rst_agent_config.sequencer + // configuration.fuse_ctrl_core_axi_write_agent_config.sequencer + // configuration.fuse_ctrl_prim_axi_write_agent_config.sequencer + // configuration.fuse_ctrl_core_axi_read_agent_config.sequencer + // configuration.fuse_ctrl_prim_axi_read_agent_config.sequencer + // configuration.fuse_ctrl_secreg_axi_read_agent_config.sequencer + // configuration.fuse_ctrl_lc_otp_if_agent_config.sequencer + // configuration.fuse_ctrl_in_if_agent_config.sequencer + + // Responder agent sequencers in fuse_ctrl_environment: + + + typedef fuse_ctrl_rst_random_sequence fuse_ctrl_rst_agent_random_sequence_t; + fuse_ctrl_rst_agent_random_sequence_t fuse_ctrl_rst_agent_rand_seq; + + typedef fuse_ctrl_core_axi_write_if_random_sequence fuse_ctrl_core_axi_write_agent_random_sequence_t; + fuse_ctrl_core_axi_write_agent_random_sequence_t fuse_ctrl_core_axi_write_agent_rand_seq; + + typedef fuse_ctrl_prim_axi_write_if_random_sequence fuse_ctrl_prim_axi_write_agent_random_sequence_t; + fuse_ctrl_prim_axi_write_agent_random_sequence_t fuse_ctrl_prim_axi_write_agent_rand_seq; + + typedef fuse_ctrl_core_axi_read_if_random_sequence fuse_ctrl_core_axi_read_agent_random_sequence_t; + fuse_ctrl_core_axi_read_agent_random_sequence_t fuse_ctrl_core_axi_read_agent_rand_seq; + + typedef fuse_ctrl_prim_axi_read_if_random_sequence fuse_ctrl_prim_axi_read_agent_random_sequence_t; + fuse_ctrl_prim_axi_read_agent_random_sequence_t fuse_ctrl_prim_axi_read_agent_rand_seq; + + typedef fuse_ctrl_secreg_axi_read_if_random_sequence fuse_ctrl_secreg_axi_read_agent_random_sequence_t; + fuse_ctrl_secreg_axi_read_agent_random_sequence_t fuse_ctrl_secreg_axi_read_agent_rand_seq; + + typedef fuse_ctrl_lc_otp_if_random_sequence fuse_ctrl_lc_otp_if_agent_random_sequence_t; + fuse_ctrl_lc_otp_if_agent_random_sequence_t fuse_ctrl_lc_otp_if_agent_rand_seq; + + typedef fuse_ctrl_in_if_random_sequence fuse_ctrl_in_if_agent_random_sequence_t; + fuse_ctrl_in_if_agent_random_sequence_t fuse_ctrl_in_if_agent_rand_seq; + + + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "" ); + super.new(name); + fuse_ctrl_rst_agent_rand_seq = fuse_ctrl_rst_agent_random_sequence_t::type_id::create("fuse_ctrl_rst_agent_rand_seq"); + fuse_ctrl_core_axi_write_agent_rand_seq = fuse_ctrl_core_axi_write_agent_random_sequence_t::type_id::create("fuse_ctrl_core_axi_write_agent_rand_seq"); + fuse_ctrl_prim_axi_write_agent_rand_seq = fuse_ctrl_prim_axi_write_agent_random_sequence_t::type_id::create("fuse_ctrl_prim_axi_write_agent_rand_seq"); + fuse_ctrl_core_axi_read_agent_rand_seq = fuse_ctrl_core_axi_read_agent_random_sequence_t::type_id::create("fuse_ctrl_core_axi_read_agent_rand_seq"); + fuse_ctrl_prim_axi_read_agent_rand_seq = fuse_ctrl_prim_axi_read_agent_random_sequence_t::type_id::create("fuse_ctrl_prim_axi_read_agent_rand_seq"); + fuse_ctrl_secreg_axi_read_agent_rand_seq = fuse_ctrl_secreg_axi_read_agent_random_sequence_t::type_id::create("fuse_ctrl_secreg_axi_read_agent_rand_seq"); + fuse_ctrl_lc_otp_if_agent_rand_seq = fuse_ctrl_lc_otp_if_agent_random_sequence_t::type_id::create("fuse_ctrl_lc_otp_if_agent_rand_seq"); + fuse_ctrl_in_if_agent_rand_seq = fuse_ctrl_in_if_agent_random_sequence_t::type_id::create("fuse_ctrl_in_if_agent_rand_seq"); + + + endfunction + + virtual task body(); + + if ( configuration.fuse_ctrl_rst_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_rst_agent_rand_seq.start(configuration.fuse_ctrl_rst_agent_config.sequencer); + if ( configuration.fuse_ctrl_core_axi_write_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_core_axi_write_agent_rand_seq.start(configuration.fuse_ctrl_core_axi_write_agent_config.sequencer); + if ( configuration.fuse_ctrl_prim_axi_write_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_prim_axi_write_agent_rand_seq.start(configuration.fuse_ctrl_prim_axi_write_agent_config.sequencer); + if ( configuration.fuse_ctrl_core_axi_read_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_core_axi_read_agent_rand_seq.start(configuration.fuse_ctrl_core_axi_read_agent_config.sequencer); + if ( configuration.fuse_ctrl_prim_axi_read_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_prim_axi_read_agent_rand_seq.start(configuration.fuse_ctrl_prim_axi_read_agent_config.sequencer); + if ( configuration.fuse_ctrl_secreg_axi_read_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_secreg_axi_read_agent_rand_seq.start(configuration.fuse_ctrl_secreg_axi_read_agent_config.sequencer); + if ( configuration.fuse_ctrl_lc_otp_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_lc_otp_if_agent_rand_seq.start(configuration.fuse_ctrl_lc_otp_if_agent_config.sequencer); + if ( configuration.fuse_ctrl_in_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_in_if_agent_rand_seq.start(configuration.fuse_ctrl_in_if_agent_config.sequencer); + + + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_typedefs.svh new file mode 100644 index 000000000..79d1b10a2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the environment package. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + // pragma uvmf custom additional begin + // pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_environment.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_environment.svh new file mode 100644 index 000000000..6ccd68c55 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_environment.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This environment contains all agents, predictors and +// scoreboards required for the block level design. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class fuse_ctrl_environment extends uvmf_environment_base #( + .CONFIG_T( fuse_ctrl_env_configuration + )); + `uvm_component_utils( fuse_ctrl_environment ) + + + + + + typedef fuse_ctrl_rst_agent fuse_ctrl_rst_agent_t; + fuse_ctrl_rst_agent_t fuse_ctrl_rst_agent; + + typedef fuse_ctrl_core_axi_write_if_agent fuse_ctrl_core_axi_write_agent_t; + fuse_ctrl_core_axi_write_agent_t fuse_ctrl_core_axi_write_agent; + + typedef fuse_ctrl_prim_axi_write_if_agent fuse_ctrl_prim_axi_write_agent_t; + fuse_ctrl_prim_axi_write_agent_t fuse_ctrl_prim_axi_write_agent; + + typedef fuse_ctrl_core_axi_read_if_agent fuse_ctrl_core_axi_read_agent_t; + fuse_ctrl_core_axi_read_agent_t fuse_ctrl_core_axi_read_agent; + + typedef fuse_ctrl_prim_axi_read_if_agent fuse_ctrl_prim_axi_read_agent_t; + fuse_ctrl_prim_axi_read_agent_t fuse_ctrl_prim_axi_read_agent; + + typedef fuse_ctrl_secreg_axi_read_if_agent fuse_ctrl_secreg_axi_read_agent_t; + fuse_ctrl_secreg_axi_read_agent_t fuse_ctrl_secreg_axi_read_agent; + + typedef fuse_ctrl_lc_otp_if_agent fuse_ctrl_lc_otp_if_agent_t; + fuse_ctrl_lc_otp_if_agent_t fuse_ctrl_lc_otp_if_agent; + + typedef fuse_ctrl_in_if_agent fuse_ctrl_in_if_agent_t; + fuse_ctrl_in_if_agent_t fuse_ctrl_in_if_agent; + + + + + typedef fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T) + ) + fuse_ctrl_pred_t; + fuse_ctrl_pred_t fuse_ctrl_pred; + typedef fuse_ctrl_scoreboard #( + .CONFIG_T(CONFIG_T) + ) + fuse_ctrl_sb_t; + fuse_ctrl_sb_t fuse_ctrl_sb; + + + + + typedef uvmf_virtual_sequencer_base #(.CONFIG_T(fuse_ctrl_env_configuration)) fuse_ctrl_vsqr_t; + fuse_ctrl_vsqr_t vsqr; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// FUNCTION: build_phase() +// This function builds all components within this environment. +// + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + fuse_ctrl_rst_agent = fuse_ctrl_rst_agent_t::type_id::create("fuse_ctrl_rst_agent",this); + fuse_ctrl_rst_agent.set_config(configuration.fuse_ctrl_rst_agent_config); + fuse_ctrl_core_axi_write_agent = fuse_ctrl_core_axi_write_agent_t::type_id::create("fuse_ctrl_core_axi_write_agent",this); + fuse_ctrl_core_axi_write_agent.set_config(configuration.fuse_ctrl_core_axi_write_agent_config); + fuse_ctrl_prim_axi_write_agent = fuse_ctrl_prim_axi_write_agent_t::type_id::create("fuse_ctrl_prim_axi_write_agent",this); + fuse_ctrl_prim_axi_write_agent.set_config(configuration.fuse_ctrl_prim_axi_write_agent_config); + fuse_ctrl_core_axi_read_agent = fuse_ctrl_core_axi_read_agent_t::type_id::create("fuse_ctrl_core_axi_read_agent",this); + fuse_ctrl_core_axi_read_agent.set_config(configuration.fuse_ctrl_core_axi_read_agent_config); + fuse_ctrl_prim_axi_read_agent = fuse_ctrl_prim_axi_read_agent_t::type_id::create("fuse_ctrl_prim_axi_read_agent",this); + fuse_ctrl_prim_axi_read_agent.set_config(configuration.fuse_ctrl_prim_axi_read_agent_config); + fuse_ctrl_secreg_axi_read_agent = fuse_ctrl_secreg_axi_read_agent_t::type_id::create("fuse_ctrl_secreg_axi_read_agent",this); + fuse_ctrl_secreg_axi_read_agent.set_config(configuration.fuse_ctrl_secreg_axi_read_agent_config); + fuse_ctrl_lc_otp_if_agent = fuse_ctrl_lc_otp_if_agent_t::type_id::create("fuse_ctrl_lc_otp_if_agent",this); + fuse_ctrl_lc_otp_if_agent.set_config(configuration.fuse_ctrl_lc_otp_if_agent_config); + fuse_ctrl_in_if_agent = fuse_ctrl_in_if_agent_t::type_id::create("fuse_ctrl_in_if_agent",this); + fuse_ctrl_in_if_agent.set_config(configuration.fuse_ctrl_in_if_agent_config); + fuse_ctrl_pred = fuse_ctrl_pred_t::type_id::create("fuse_ctrl_pred",this); + fuse_ctrl_pred.configuration = configuration; + fuse_ctrl_sb = fuse_ctrl_sb_t::type_id::create("fuse_ctrl_sb",this); + fuse_ctrl_sb.configuration = configuration; + + vsqr = fuse_ctrl_vsqr_t::type_id::create("vsqr", this); + vsqr.set_config(configuration); + configuration.set_vsqr(vsqr); + + // pragma uvmf custom build_phase begin + // pragma uvmf custom build_phase end + endfunction + +// **************************************************************************** +// FUNCTION: connect_phase() +// This function makes all connections within this environment. Connections +// typically inclue agent to predictor, predictor to scoreboard and scoreboard +// to agent. +// + virtual function void connect_phase(uvm_phase phase); +// pragma uvmf custom connect_phase_pre_super begin +// pragma uvmf custom connect_phase_pre_super end + super.connect_phase(phase); + fuse_ctrl_rst_agent.monitored_ap.connect(fuse_ctrl_pred.fuse_ctrl_rst_agent_ae); + fuse_ctrl_pred.fuse_ctrl_sb_ap.connect(fuse_ctrl_sb.expected_analysis_export); + fuse_ctrl_core_axi_read_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_prim_axi_read_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_secreg_axi_read_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_lc_otp_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_in_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + // pragma uvmf custom reg_model_connect_phase begin + // pragma uvmf custom reg_model_connect_phase end + endfunction + +// **************************************************************************** +// FUNCTION: end_of_simulation_phase() +// This function is executed just prior to executing run_phase. This function +// was added to the environment to sample environment configuration settings +// just before the simulation exits time 0. The configuration structure is +// randomized in the build phase before the environment structure is constructed. +// Configuration variables can be customized after randomization in the build_phase +// of the extended test. +// If a sequence modifies values in the configuration structure then the sequence is +// responsible for sampling the covergroup in the configuration if required. +// + virtual function void start_of_simulation_phase(uvm_phase phase); + configuration.fuse_ctrl_configuration_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_predictor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_predictor.svh new file mode 100644 index 000000000..0250853d4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_predictor.svh @@ -0,0 +1,323 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +// +// DESCRIPTION: This analysis component contains analysis_exports for receiving +// data and analysis_ports for sending data. +// +// This analysis component has the following analysis_exports that receive the +// listed transaction type. +// +// fuse_ctrl_rst_agent_ae receives transactions of type fuse_ctrl_rst_transaction +// fuse_ctrl_core_axi_write_agent_ae receives transactions of type fuse_ctrl_write_transaction +// fuse_ctrl_prim_axi_write_agent_ae receives transactions of type fuse_ctrl_write_transaction +// fuse_ctrl_core_axi_read_agent_ae receives transactions of type fuse_ctrl_read_transaction +// fuse_ctrl_prim_axi_read_agent_ae receives transactions of type fuse_ctrl_read_transaction +// fuse_ctrl_secreg_axi_read_agent_ae receives transactions of type fuse_ctrl_read_transaction +// fuse_ctrl_lc_otp_if_agent_ae receives transactions of type fuse_ctrl_read_transaction +// +// This analysis component has the following analysis_ports that can broadcast +// the listed transaction type. +// +// fuse_ctrl_sb_ap broadcasts transactions of type fuse_ctrl_read_transaction +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class fuse_ctrl_predictor #( + type CONFIG_T, + type BASE_T = uvm_component + ) + extends BASE_T; + + // Factory registration of this class + `uvm_component_param_utils( fuse_ctrl_predictor #( + CONFIG_T, + BASE_T + ) +) + + + // Instantiate a handle to the configuration of the environment in which this component resides + CONFIG_T configuration; + + + // Instantiate the analysis exports + uvm_analysis_imp_fuse_ctrl_rst_agent_ae #(fuse_ctrl_rst_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_rst_agent_ae; + uvm_analysis_imp_fuse_ctrl_core_axi_write_agent_ae #(fuse_ctrl_write_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_core_axi_write_agent_ae; + uvm_analysis_imp_fuse_ctrl_prim_axi_write_agent_ae #(fuse_ctrl_write_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_prim_axi_write_agent_ae; + uvm_analysis_imp_fuse_ctrl_core_axi_read_agent_ae #(fuse_ctrl_read_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_core_axi_read_agent_ae; + uvm_analysis_imp_fuse_ctrl_prim_axi_read_agent_ae #(fuse_ctrl_read_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_prim_axi_read_agent_ae; + uvm_analysis_imp_fuse_ctrl_secreg_axi_read_agent_ae #(fuse_ctrl_read_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_secreg_axi_read_agent_ae; + uvm_analysis_imp_fuse_ctrl_lc_otp_if_agent_ae #(fuse_ctrl_read_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_lc_otp_if_agent_ae; + + + // Instantiate the analysis ports + uvm_analysis_port #(fuse_ctrl_read_transaction) fuse_ctrl_sb_ap; + + + // Transaction variable for predicted values to be sent out fuse_ctrl_sb_ap + // Once a transaction is sent through an analysis_port, another transaction should + // be constructed for the next predicted transaction. + typedef fuse_ctrl_read_transaction fuse_ctrl_sb_ap_output_transaction_t; + fuse_ctrl_sb_ap_output_transaction_t fuse_ctrl_sb_ap_output_transaction; + // Code for sending output transaction out through fuse_ctrl_sb_ap + // fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + + // Define transaction handles for debug visibility + fuse_ctrl_rst_transaction fuse_ctrl_rst_agent_ae_debug; + fuse_ctrl_write_transaction fuse_ctrl_core_axi_write_agent_ae_debug; + fuse_ctrl_write_transaction fuse_ctrl_prim_axi_write_agent_ae_debug; + fuse_ctrl_read_transaction fuse_ctrl_core_axi_read_agent_ae_debug; + fuse_ctrl_read_transaction fuse_ctrl_prim_axi_read_agent_ae_debug; + fuse_ctrl_read_transaction fuse_ctrl_secreg_axi_read_agent_ae_debug; + fuse_ctrl_read_transaction fuse_ctrl_lc_otp_if_agent_ae_debug; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // FUNCTION: new + function new(string name, uvm_component parent); + super.new(name,parent); + `uvm_warning("PREDICTOR_REVIEW", "This predictor has been created either through generation or re-generation with merging. Remove this warning after the predictor has been reviewed.") + // pragma uvmf custom new begin + // pragma uvmf custom new end + endfunction + + // FUNCTION: build_phase + virtual function void build_phase (uvm_phase phase); + + fuse_ctrl_rst_agent_ae = new("fuse_ctrl_rst_agent_ae", this); + fuse_ctrl_core_axi_write_agent_ae = new("fuse_ctrl_core_axi_write_agent_ae", this); + fuse_ctrl_prim_axi_write_agent_ae = new("fuse_ctrl_prim_axi_write_agent_ae", this); + fuse_ctrl_core_axi_read_agent_ae = new("fuse_ctrl_core_axi_read_agent_ae", this); + fuse_ctrl_prim_axi_read_agent_ae = new("fuse_ctrl_prim_axi_read_agent_ae", this); + fuse_ctrl_secreg_axi_read_agent_ae = new("fuse_ctrl_secreg_axi_read_agent_ae", this); + fuse_ctrl_lc_otp_if_agent_ae = new("fuse_ctrl_lc_otp_if_agent_ae", this); + fuse_ctrl_sb_ap =new("fuse_ctrl_sb_ap", this ); + // pragma uvmf custom build_phase begin + // pragma uvmf custom build_phase end + endfunction + + // FUNCTION: write_fuse_ctrl_rst_agent_ae + // Transactions received through fuse_ctrl_rst_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_rst_agent_ae(fuse_ctrl_rst_transaction t); + // pragma uvmf custom fuse_ctrl_rst_agent_ae_predictor begin + fuse_ctrl_rst_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_rst_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_rst_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_rst_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_core_axi_write_agent_ae + // Transactions received through fuse_ctrl_core_axi_write_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_core_axi_write_agent_ae(fuse_ctrl_write_transaction t); + // pragma uvmf custom fuse_ctrl_core_axi_write_agent_ae_predictor begin + fuse_ctrl_core_axi_write_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_core_axi_write_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_core_axi_write_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_core_axi_write_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_prim_axi_write_agent_ae + // Transactions received through fuse_ctrl_prim_axi_write_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_prim_axi_write_agent_ae(fuse_ctrl_write_transaction t); + // pragma uvmf custom fuse_ctrl_prim_axi_write_agent_ae_predictor begin + fuse_ctrl_prim_axi_write_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_prim_axi_write_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_prim_axi_write_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_prim_axi_write_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_core_axi_read_agent_ae + // Transactions received through fuse_ctrl_core_axi_read_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_core_axi_read_agent_ae(fuse_ctrl_read_transaction t); + // pragma uvmf custom fuse_ctrl_core_axi_read_agent_ae_predictor begin + fuse_ctrl_core_axi_read_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_core_axi_read_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_core_axi_read_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_core_axi_read_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_prim_axi_read_agent_ae + // Transactions received through fuse_ctrl_prim_axi_read_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_prim_axi_read_agent_ae(fuse_ctrl_read_transaction t); + // pragma uvmf custom fuse_ctrl_prim_axi_read_agent_ae_predictor begin + fuse_ctrl_prim_axi_read_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_prim_axi_read_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_prim_axi_read_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_prim_axi_read_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_secreg_axi_read_agent_ae + // Transactions received through fuse_ctrl_secreg_axi_read_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_secreg_axi_read_agent_ae(fuse_ctrl_read_transaction t); + // pragma uvmf custom fuse_ctrl_secreg_axi_read_agent_ae_predictor begin + fuse_ctrl_secreg_axi_read_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_secreg_axi_read_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_secreg_axi_read_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_secreg_axi_read_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_lc_otp_if_agent_ae + // Transactions received through fuse_ctrl_lc_otp_if_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_lc_otp_if_agent_ae(fuse_ctrl_read_transaction t); + // pragma uvmf custom fuse_ctrl_lc_otp_if_agent_ae_predictor begin + fuse_ctrl_lc_otp_if_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_lc_otp_if_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_lc_otp_if_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_lc_otp_if_agent_ae_predictor end + endfunction + + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_scoreboard.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_scoreboard.svh new file mode 100644 index 000000000..319d51fae --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_scoreboard.svh @@ -0,0 +1,149 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This analysis component contains analysis_exports for receiving +// data and analysis_ports for sending data. +// +// This analysis component has the following analysis_exports that receive the +// listed transaction type. +// +// expected_analysis_export receives transactions of type fuse_ctrl_read_transaction +// actual_analysis_export receives transactions of type fuse_ctrl_read_transaction +// +// This analysis component has the following analysis_ports that can broadcast +// the listed transaction type. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +class fuse_ctrl_scoreboard #( + type CONFIG_T, + type BASE_T = uvm_component + ) + extends BASE_T; + + // Factory registration of this class + `uvm_component_param_utils( fuse_ctrl_scoreboard #( + CONFIG_T, + BASE_T + ) +) + + + // Instantiate a handle to the configuration of the environment in which this component resides + CONFIG_T configuration; + + + // Instantiate the analysis exports + uvm_analysis_imp_expected_analysis_export #(fuse_ctrl_read_transaction, fuse_ctrl_scoreboard #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) expected_analysis_export; + uvm_analysis_imp_actual_analysis_export #(fuse_ctrl_read_transaction, fuse_ctrl_scoreboard #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) actual_analysis_export; + + + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // FUNCTION: new + function new(string name, uvm_component parent); + super.new(name,parent); + // pragma uvmf custom new begin + // pragma uvmf custom new end + endfunction + + // FUNCTION: build_phase + virtual function void build_phase (uvm_phase phase); + + expected_analysis_export = new("expected_analysis_export", this); + actual_analysis_export = new("actual_analysis_export", this); + // pragma uvmf custom build_phase begin + // pragma uvmf custom build_phase end + endfunction + + // FUNCTION: write_expected_analysis_export + // Transactions received through expected_analysis_export initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_expected_analysis_export(fuse_ctrl_read_transaction t); + // pragma uvmf custom expected_analysis_export_scoreboard begin + `uvm_info("PRED", "Transaction Received through expected_analysis_export", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // UVMF_CHANGE_ME: Implement custom scoreboard here. + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "UVMF_CHANGE_ME: The fuse_ctrl_scoreboard::write_expected_analysis_export function needs to be completed with custom scoreboard functionality",UVM_NONE) + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "******************************************************************************************************",UVM_NONE) + + // pragma uvmf custom expected_analysis_export_scoreboard end + endfunction + + // FUNCTION: write_actual_analysis_export + // Transactions received through actual_analysis_export initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_actual_analysis_export(fuse_ctrl_read_transaction t); + // pragma uvmf custom actual_analysis_export_scoreboard begin + `uvm_info("PRED", "Transaction Received through actual_analysis_export", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // UVMF_CHANGE_ME: Implement custom scoreboard here. + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "UVMF_CHANGE_ME: The fuse_ctrl_scoreboard::write_actual_analysis_export function needs to be completed with custom scoreboard functionality",UVM_NONE) + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "******************************************************************************************************",UVM_NONE) + + // pragma uvmf custom actual_analysis_export_scoreboard end + endfunction + + + + // FUNCTION: extract_phase + virtual function void extract_phase(uvm_phase phase); +// pragma uvmf custom extract_phase begin + super.extract_phase(phase); +// pragma uvmf custom extract_phase end + endfunction + + // FUNCTION: check_phase + virtual function void check_phase(uvm_phase phase); +// pragma uvmf custom check_phase begin + super.check_phase(phase); +// pragma uvmf custom check_phase end + endfunction + + // FUNCTION: report_phase + virtual function void report_phase(uvm_phase phase); +// pragma uvmf custom report_phase begin + super.report_phase(phase); +// pragma uvmf custom report_phase end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_environment.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_environment.yaml new file mode 100644 index 000000000..3bcd9ccb7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_environment.yaml @@ -0,0 +1,68 @@ +uvmf: + environments: + fuse_ctrl: + agents: + - initiator_responder: INITIATOR + name: fuse_ctrl_rst_agent + type: fuse_ctrl_rst + - initiator_responder: INITIATOR + name: fuse_ctrl_core_axi_write_agent + type: fuse_ctrl_core_axi_write_if + - initiator_responder: INITIATOR + name: fuse_ctrl_prim_axi_write_agent + type: fuse_ctrl_prim_axi_write_if + - initiator_responder: INITIATOR + name: fuse_ctrl_core_axi_read_agent + type: fuse_ctrl_core_axi_read_if + - initiator_responder: INITIATOR + name: fuse_ctrl_prim_axi_read_agent + type: fuse_ctrl_prim_axi_read_if + - initiator_responder: INITIATOR + name: fuse_ctrl_secreg_axi_read_agent + type: fuse_ctrl_secreg_axi_read_if + - initiator_responder: INITIATOR + name: fuse_ctrl_lc_otp_if_agent + type: fuse_ctrl_lc_otp_if + - initiator_responder: INITIATOR + name: fuse_ctrl_in_if_agent + type: fuse_ctrl_in_if + analysis_components: + - name: fuse_ctrl_pred + parameters: [] + type: fuse_ctrl_predictor + - name: fuse_ctrl_sb + parameters: [] + type: fuse_ctrl_scoreboard + analysis_exports: [] + analysis_ports: [] + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + hvl_pkg_parameters: [] + non_uvmf_components: [] + parameters: [] + qvip_memory_agents: [] + scoreboards: [] + subenvs: [] + tlm_connections: + - driver: fuse_ctrl_rst_agent.monitored_ap + receiver: fuse_ctrl_pred.fuse_ctrl_rst_agent_ae + validate: 'True' + - driver: fuse_ctrl_pred.fuse_ctrl_sb_ap + receiver: fuse_ctrl_sb.expected_analysis_export + validate: 'True' + - driver: fuse_ctrl_core_axi_read_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_prim_axi_read_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_secreg_axi_read_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_lc_otp_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_predictor.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_predictor.yaml new file mode 100644 index 000000000..7832404a7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_predictor.yaml @@ -0,0 +1,23 @@ +uvmf: + util_components: + fuse_ctrl_predictor: + analysis_exports: + - name: fuse_ctrl_rst_agent_ae + type: fuse_ctrl_rst_transaction + - name: fuse_ctrl_core_axi_write_agent_ae + type: fuse_ctrl_write_transaction + - name: fuse_ctrl_prim_axi_write_agent_ae + type: fuse_ctrl_write_transaction + - name: fuse_ctrl_core_axi_read_agent_ae + type: fuse_ctrl_read_transaction + - name: fuse_ctrl_prim_axi_read_agent_ae + type: fuse_ctrl_read_transaction + - name: fuse_ctrl_secreg_axi_read_agent_ae + type: fuse_ctrl_read_transaction + - name: fuse_ctrl_lc_otp_if_agent_ae + type: fuse_ctrl_read_transaction + analysis_ports: + - name: fuse_ctrl_sb_ap + type: fuse_ctrl_read_transaction + existing_library_component: 'True' + type: predictor diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_scoreboard.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_scoreboard.yaml new file mode 100644 index 000000000..05167c417 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_scoreboard.yaml @@ -0,0 +1,10 @@ +uvmf: + util_components: + fuse_ctrl_scoreboard: + analysis_exports: + - name: expected_analysis_export + type: fuse_ctrl_read_transaction + - name: actual_analysis_export + type: fuse_ctrl_read_transaction + existing_library_component: 'True' + type: scoreboard diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/.project new file mode 100644 index 000000000..f5be90c8f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + core_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..5646c3df8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..9974230a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# core_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +core_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f + +core_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f + +core_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f + +COMP_core_axi_read_if_PKG_TGT_0 = q_comp_core_axi_read_if_pkg +COMP_core_axi_read_if_PKG_TGT_1 = v_comp_core_axi_read_if_pkg +COMP_core_axi_read_if_PKG_TGT = $(COMP_core_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_core_axi_read_if_pkg: $(COMP_core_axi_read_if_PKG_TGT) + +q_comp_core_axi_read_if_pkg: + $(HDL_COMP_CMD) $(core_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_read_if_PKG) + $(HDL_COMP_CMD) $(core_axi_read_if_PKG_XRTL) + +v_comp_core_axi_read_if_pkg: + $(HVL_COMP_CMD) $(core_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_read_if_PKG) + $(VELANALYZE_CMD) $(core_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(core_axi_read_if_PKG) + $(HDL_COMP_CMD) $(core_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export core_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_core_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_core_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_core_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_core_axi_read_if_pkg += -I$(core_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_core_axi_read_if_pkg += $(core_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_core_axi_read_if_pkg += \ + \ + -o .so + +comp_core_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_core_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_core_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_core_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_core_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..bfe89a8e0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of core_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if.compile new file mode 100644 index 000000000..5aa3fb538 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - core_axi_read_if_hvl.compile + - core_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..58385ae7f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use core_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/core_axi_read_if_if.sv +src/core_axi_read_if_driver_bfm.sv +src/core_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_common.compile new file mode 100644 index 000000000..9374bee40 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..6dfc76a5f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..c3606bba2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..6c5bc4baa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hdl.compile new file mode 100644 index 000000000..6665d30a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./core_axi_read_if_common.compile +incdir: + - . +src: + - src/core_axi_read_if_if.sv + - src/core_axi_read_if_monitor_bfm.sv + - src/core_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hvl.compile new file mode 100644 index 000000000..ffce38e1b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./core_axi_read_if_common.compile +incdir: + - . +src: + - core_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.sv new file mode 100644 index 000000000..5be093439 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import core_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/core_axi_read_if_macros.svh" + + export core_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/core_axi_read_if_typedefs.svh" + `include "src/core_axi_read_if_transaction.svh" + + `include "src/core_axi_read_if_configuration.svh" + `include "src/core_axi_read_if_driver.svh" + `include "src/core_axi_read_if_monitor.svh" + + `include "src/core_axi_read_if_transaction_coverage.svh" + `include "src/core_axi_read_if_sequence_base.svh" + `include "src/core_axi_read_if_random_sequence.svh" + + `include "src/core_axi_read_if_responder_sequence.svh" + `include "src/core_axi_read_if2reg_adapter.svh" + + `include "src/core_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..54878b149 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use core_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +core_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..738469493 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/core_axi_read_if_typedefs_hdl.svh" + `include "src/core_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..289cfb15d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..25ac277ab --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..872ddc7d8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the core_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( core_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "core_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : core_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_agent.svh new file mode 100644 index 000000000..74e70677a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(core_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(core_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(core_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( core_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_configuration.svh new file mode 100644 index 000000000..96293f076 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the core_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual core_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual core_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup core_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in core_axi_read_if_macros.svh + `core_axi_read_if_CONFIGURATION_STRUCT + core_axi_read_if_configuration_s core_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a core_axi_read_if_configuration_s + // structure. The function returns the handle to the core_axi_read_if_configuration_struct. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + core_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + core_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + core_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + core_axi_read_if_configuration_cg.set_inst_name($sformatf("core_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver.svh new file mode 100644 index 000000000..2da1ca1ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual core_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( core_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in core_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm +// to communicate initiator driven data to core_axi_read_if_driver_bfm. +`core_axi_read_if_INITIATOR_STRUCT + core_axi_read_if_initiator_s core_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm +// to communicate Responder driven data to core_axi_read_if_driver_bfm. +`core_axi_read_if_RESPONDER_STRUCT + core_axi_read_if_responder_s core_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + core_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(core_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + core_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(core_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..cfce6e49c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the core_axi_read_if signal driving. It is +// accessed by the uvm core_axi_read_if driver through a virtual interface +// handle in the core_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type core_axi_read_if_if. +// +// Input signals from the core_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within core_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_read_if_pkg_hdl::*; +`include "src/core_axi_read_if_macros.svh" + +interface core_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (core_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute core_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + core_axi_read_if_pkg::core_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in core_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from core_axi_read_if_driver to this BFM + // **************************************************************************** + `core_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm + // to communicate initiator driven data to core_axi_read_if_driver_bfm. + `core_axi_read_if_INITIATOR_STRUCT + core_axi_read_if_initiator_s initiator_struct; + // Responder macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm + // to communicate Responder driven data to core_axi_read_if_driver_bfm. + `core_axi_read_if_RESPONDER_STRUCT + core_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(core_axi_read_if_configuration_s core_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input core_axi_read_if_initiator_s core_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output core_axi_read_if_responder_s core_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the core_axi_read_if_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Members within the core_axi_read_if_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + initiator_struct = core_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // core_axi_read_if_responder_struct.xyz = arready_i; // + // core_axi_read_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // core_axi_read_if_responder_struct.xyz = rresp_i; // + // core_axi_read_if_responder_struct.xyz = rid_i; // + // core_axi_read_if_responder_struct.xyz = rlast_i; // + // core_axi_read_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // core_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = core_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output core_axi_read_if_initiator_s core_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input core_axi_read_if_responder_s core_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the core_axi_read_if_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Variables within the core_axi_read_if_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= core_axi_read_if_initiator_struct.xyz; // + // rdata_o <= core_axi_read_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= core_axi_read_if_initiator_struct.xyz; // + // rid_o <= core_axi_read_if_initiator_struct.xyz; // + // rlast_o <= core_axi_read_if_initiator_struct.xyz; // + // rvalid_o <= core_axi_read_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the core_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the core_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_if.sv new file mode 100644 index 000000000..bd1242f03 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the core_axi_read_if interface signals. +// It is instantiated once per core_axi_read_if bus. Bus Functional Models, +// BFM's named core_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named core_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(core_axi_read_if_bus.arready), // Agent input +// .dut_signal_port(core_axi_read_if_bus.rdata), // Agent input +// .dut_signal_port(core_axi_read_if_bus.rresp), // Agent input +// .dut_signal_port(core_axi_read_if_bus.rid), // Agent input +// .dut_signal_port(core_axi_read_if_bus.rlast), // Agent input +// .dut_signal_port(core_axi_read_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import core_axi_read_if_pkg_hdl::*; + +interface core_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_macros.svh new file mode 100644 index 000000000..61c6fdb62 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the core_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the core_axi_read_if_configuration class. +// + `define core_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } core_axi_read_if_configuration_s; + + `define core_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function core_axi_read_if_configuration_s to_struct();\ + core_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( core_axi_read_if_configuration_struct );\ + endfunction + + `define core_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(core_axi_read_if_configuration_s core_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = core_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the core_axi_read_if_transaction class. +// + `define core_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } core_axi_read_if_monitor_s; + + `define core_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function core_axi_read_if_monitor_s to_monitor_struct();\ + core_axi_read_if_monitor_struct = \ + { \ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( core_axi_read_if_monitor_struct);\ + endfunction\ + + `define core_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(core_axi_read_if_monitor_s core_axi_read_if_monitor_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = core_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the core_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } core_axi_read_if_initiator_s; + + `define core_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function core_axi_read_if_initiator_s to_initiator_struct();\ + core_axi_read_if_initiator_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( core_axi_read_if_initiator_struct);\ + endfunction + + `define core_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(core_axi_read_if_initiator_s core_axi_read_if_initiator_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = core_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the core_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } core_axi_read_if_responder_s; + + `define core_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function core_axi_read_if_responder_s to_responder_struct();\ + core_axi_read_if_responder_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( core_axi_read_if_responder_struct);\ + endfunction + + `define core_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(core_axi_read_if_responder_s core_axi_read_if_responder_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = core_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor.svh new file mode 100644 index 000000000..a26f7ab33 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives core_axi_read_if transactions observed by the +// core_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual core_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`core_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the core_axi_read_if_monitor_struct. + virtual function void notify_transaction(input core_axi_read_if_monitor_s core_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(core_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..3940f5ab1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the core_axi_read_if signal monitoring. +// It is accessed by the uvm core_axi_read_if monitor through a virtual +// interface handle in the core_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type core_axi_read_if_if. +// +// Input signals from the core_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the core_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_read_if_pkg_hdl::*; +`include "src/core_axi_read_if_macros.svh" + + +interface core_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( core_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute core_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`core_axi_read_if_MONITOR_STRUCT + core_axi_read_if_monitor_s core_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `core_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + core_axi_read_if_pkg::core_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( core_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( core_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(core_axi_read_if_configuration_s core_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output core_axi_read_if_monitor_s core_axi_read_if_monitor_struct); + // + // Available struct members: + // // core_axi_read_if_monitor_struct.core_arready + // // core_axi_read_if_monitor_struct.core_rdata + // // core_axi_read_if_monitor_struct.core_rresp + // // core_axi_read_if_monitor_struct.core_rid + // // core_axi_read_if_monitor_struct.core_rlast + // // core_axi_read_if_monitor_struct.core_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // core_axi_read_if_monitor_struct.xyz = arready_i; // + // core_axi_read_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // core_axi_read_if_monitor_struct.xyz = rresp_i; // + // core_axi_read_if_monitor_struct.xyz = rid_i; // + // core_axi_read_if_monitor_struct.xyz = rlast_i; // + // core_axi_read_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..9f52585cd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the core_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a core_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "core_axi_read_if_random_sequence::body()-core_axi_read_if_transaction randomization failed") + // Send the transaction to the core_axi_read_if_driver_bfm via the sequencer and core_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: core_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..a51c239e4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "core_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..39f9a15a4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_read_if_transaction_req_t; + core_axi_read_if_transaction_req_t req; + typedef core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_read_if_transaction_rsp_t; + core_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = core_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = core_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction.svh new file mode 100644 index 000000000..2b8fc724c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an core_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( core_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_arready ; + logic [DW-1:0] core_rdata ; + axi_pkg::axi_burst_e core_rresp ; + logic [IW-1:0] core_rid ; + logic core_rlast ; + logic core_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in core_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by core_axi_read_if_monitor and core_axi_read_if_monitor_bfm + // This struct is defined in core_axi_read_if_macros.svh + `core_axi_read_if_MONITOR_STRUCT + core_axi_read_if_monitor_s core_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a core_axi_read_if_monitor_s + // structure. The function returns the handle to the core_axi_read_if_monitor_struct. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm + // to communicate initiator driven data to core_axi_read_if_driver_bfm. + // This struct is defined in core_axi_read_if_macros.svh + `core_axi_read_if_INITIATOR_STRUCT + core_axi_read_if_initiator_s core_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a core_axi_read_if_initiator_s + // structure. The function returns the handle to the core_axi_read_if_initiator_struct. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm + // to communicate Responder driven data to core_axi_read_if_driver_bfm. + // This struct is defined in core_axi_read_if_macros.svh + `core_axi_read_if_RESPONDER_STRUCT + core_axi_read_if_responder_s core_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a core_axi_read_if_responder_s + // structure. The function returns the handle to the core_axi_read_if_responder_struct. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_arready:0x%x core_rdata:0x%x core_rresp:0x%x core_rid:0x%x core_rlast:0x%x core_rvalid:0x%x ",core_arready,core_rdata,core_rresp,core_rid,core_rlast,core_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_arready == RHS.core_arready) + &&(this.core_rdata == RHS.core_rdata) + &&(this.core_rresp == RHS.core_rresp) + &&(this.core_rid == RHS.core_rid) + &&(this.core_rlast == RHS.core_rlast) + &&(this.core_rvalid == RHS.core_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_arready = RHS.core_arready; + this.core_rdata = RHS.core_rdata; + this.core_rresp = RHS.core_rresp; + this.core_rid = RHS.core_rid; + this.core_rlast = RHS.core_rlast; + this.core_rvalid = RHS.core_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"core_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_arready,"core_arready"); + $add_attribute(transaction_view_h,core_rdata,"core_rdata"); + $add_attribute(transaction_view_h,core_rresp,"core_rresp"); + $add_attribute(transaction_view_h,core_rid,"core_rid"); + $add_attribute(transaction_view_h,core_rlast,"core_rlast"); + $add_attribute(transaction_view_h,core_rvalid,"core_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..0e45fd07d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records core_axi_read_if transaction information using +// a covergroup named core_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup core_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_arready: coverpoint coverage_trans.core_arready; + core_rdata: coverpoint coverage_trans.core_rdata; + core_rresp: coverpoint coverage_trans.core_rresp; + core_rid: coverpoint coverage_trans.core_rid; + core_rlast: coverpoint coverage_trans.core_rlast; + core_rvalid: coverpoint coverage_trans.core_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + core_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + core_axi_read_if_transaction_cg.set_inst_name($sformatf("core_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + core_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/yaml/core_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/yaml/core_axi_read_if_interface.yaml new file mode 100644 index 000000000..be65d5c34 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_read_if_pkg/yaml/core_axi_read_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + core_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/.project new file mode 100644 index 000000000..c317ffc88 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/.project @@ -0,0 +1,30 @@ + + + core_axi_write_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/.svproject new file mode 100644 index 000000000..c0a4e460d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/Makefile new file mode 100644 index 000000000..7e6ea601e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/Makefile @@ -0,0 +1,66 @@ +# core_axi_write_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +core_axi_write_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f + +core_axi_write_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f + +core_axi_write_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f + +COMP_core_axi_write_if_PKG_TGT_0 = q_comp_core_axi_write_if_pkg +COMP_core_axi_write_if_PKG_TGT_1 = v_comp_core_axi_write_if_pkg +COMP_core_axi_write_if_PKG_TGT = $(COMP_core_axi_write_if_PKG_TGT_$(USE_VELOCE)) + +comp_core_axi_write_if_pkg: $(COMP_core_axi_write_if_PKG_TGT) + +q_comp_core_axi_write_if_pkg: + $(HDL_COMP_CMD) $(core_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_write_if_PKG) + $(HDL_COMP_CMD) $(core_axi_write_if_PKG_XRTL) + +v_comp_core_axi_write_if_pkg: + $(HVL_COMP_CMD) $(core_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_write_if_PKG) + $(VELANALYZE_CMD) $(core_axi_write_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(core_axi_write_if_PKG) + $(HDL_COMP_CMD) $(core_axi_write_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export core_axi_write_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/dpi + +C_FILE_COMPILE_LIST_core_axi_write_if_pkg = \ + +O_FILE_COMPILE_LIST_core_axi_write_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_core_axi_write_if_pkg:.c=.o)) + +GCC_COMP_ARGS_core_axi_write_if_pkg += -I$(core_axi_write_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_core_axi_write_if_pkg += $(core_axi_write_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_core_axi_write_if_pkg += \ + \ + -o .so + +comp_core_axi_write_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_core_axi_write_if_pkg) $(C_FILE_COMPILE_LIST_core_axi_write_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_core_axi_write_if_pkg) $(O_FILE_COMPILE_LIST_core_axi_write_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/compile.do new file mode 100644 index 000000000..d57b919fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of core_axi_write_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if.compile new file mode 100644 index 000000000..d5945e5ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if.compile @@ -0,0 +1,3 @@ +needs: + - core_axi_write_if_hvl.compile + - core_axi_write_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_bfm.vinfo new file mode 100644 index 000000000..ab7c2fca6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use core_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/core_axi_write_if_if.sv +src/core_axi_write_if_driver_bfm.sv +src/core_axi_write_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_common.compile new file mode 100644 index 000000000..4922a4200 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f new file mode 100644 index 000000000..b14f9380d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f new file mode 100644 index 000000000..a56447389 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f new file mode 100644 index 000000000..d93277776 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hdl.compile new file mode 100644 index 000000000..0328e5087 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./core_axi_write_if_common.compile +incdir: + - . +src: + - src/core_axi_write_if_if.sv + - src/core_axi_write_if_monitor_bfm.sv + - src/core_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hvl.compile new file mode 100644 index 000000000..e19dd38c2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./core_axi_write_if_common.compile +incdir: + - . +src: + - core_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.sv new file mode 100644 index 000000000..ee9c7cec8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_write_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import core_axi_write_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/core_axi_write_if_macros.svh" + + export core_axi_write_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/core_axi_write_if_typedefs.svh" + `include "src/core_axi_write_if_transaction.svh" + + `include "src/core_axi_write_if_configuration.svh" + `include "src/core_axi_write_if_driver.svh" + `include "src/core_axi_write_if_monitor.svh" + + `include "src/core_axi_write_if_transaction_coverage.svh" + `include "src/core_axi_write_if_sequence_base.svh" + `include "src/core_axi_write_if_random_sequence.svh" + + `include "src/core_axi_write_if_responder_sequence.svh" + `include "src/core_axi_write_if2reg_adapter.svh" + + `include "src/core_axi_write_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.vinfo new file mode 100644 index 000000000..d8e9ffc3f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use core_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +core_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.sv new file mode 100644 index 000000000..2d56fd18c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_write_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/core_axi_write_if_typedefs_hdl.svh" + `include "src/core_axi_write_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.vinfo new file mode 100644 index 000000000..5360aa61b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_sve.F new file mode 100644 index 000000000..1c96c4aff --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if2reg_adapter.svh new file mode 100644 index 000000000..902b4b13e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the core_axi_write_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( core_axi_write_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "core_axi_write_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : core_axi_write_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_agent.svh new file mode 100644 index 000000000..38ae017f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(core_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(core_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(core_axi_write_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( core_axi_write_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_configuration.svh new file mode 100644 index 000000000..2178c5d3f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the core_axi_write_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual core_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual core_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_write_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup core_axi_write_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in core_axi_write_if_macros.svh + `core_axi_write_if_CONFIGURATION_STRUCT + core_axi_write_if_configuration_s core_axi_write_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a core_axi_write_if_configuration_s + // structure. The function returns the handle to the core_axi_write_if_configuration_struct. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + core_axi_write_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + core_axi_write_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + core_axi_write_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + core_axi_write_if_configuration_cg.set_inst_name($sformatf("core_axi_write_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver.svh new file mode 100644 index 000000000..61afbc09d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual core_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( core_axi_write_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in core_axi_write_if_macros.svh +//******************************************************************* +// Initiator macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm +// to communicate initiator driven data to core_axi_write_if_driver_bfm. +`core_axi_write_if_INITIATOR_STRUCT + core_axi_write_if_initiator_s core_axi_write_if_initiator_struct; +//******************************************************************* +// Responder macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm +// to communicate Responder driven data to core_axi_write_if_driver_bfm. +`core_axi_write_if_RESPONDER_STRUCT + core_axi_write_if_responder_s core_axi_write_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + core_axi_write_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(core_axi_write_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + core_axi_write_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(core_axi_write_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver_bfm.sv new file mode 100644 index 000000000..2e5f63dbd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the core_axi_write_if signal driving. It is +// accessed by the uvm core_axi_write_if driver through a virtual interface +// handle in the core_axi_write_if configuration. It drives the singals passed +// in through the port connection named bus of type core_axi_write_if_if. +// +// Input signals from the core_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within core_axi_write_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_write_if_pkg_hdl::*; +`include "src/core_axi_write_if_macros.svh" + +interface core_axi_write_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (core_axi_write_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute core_axi_write_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + core_axi_write_if_pkg::core_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in core_axi_write_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from core_axi_write_if_driver to this BFM + // **************************************************************************** + `core_axi_write_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm + // to communicate initiator driven data to core_axi_write_if_driver_bfm. + `core_axi_write_if_INITIATOR_STRUCT + core_axi_write_if_initiator_s initiator_struct; + // Responder macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm + // to communicate Responder driven data to core_axi_write_if_driver_bfm. + `core_axi_write_if_RESPONDER_STRUCT + core_axi_write_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(core_axi_write_if_configuration_s core_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input core_axi_write_if_initiator_s core_axi_write_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output core_axi_write_if_responder_s core_axi_write_if_responder_struct + );// pragma tbx xtf + // + // Members within the core_axi_write_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Members within the core_axi_write_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + initiator_struct = core_axi_write_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // core_axi_write_if_responder_struct.xyz = awready_i; // + // core_axi_write_if_responder_struct.xyz = wready_i; // + // core_axi_write_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // core_axi_write_if_responder_struct.xyz = bid_i; // + // core_axi_write_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // core_axi_write_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = core_axi_write_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output core_axi_write_if_initiator_s core_axi_write_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input core_axi_write_if_responder_s core_axi_write_if_responder_struct + );// pragma tbx xtf + // Variables within the core_axi_write_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Variables within the core_axi_write_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= core_axi_write_if_initiator_struct.xyz; // + // wready_o <= core_axi_write_if_initiator_struct.xyz; // + // bresp_o <= core_axi_write_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= core_axi_write_if_initiator_struct.xyz; // + // bvalid_o <= core_axi_write_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the core_axi_write_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the core_axi_write_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_if.sv new file mode 100644 index 000000000..86ab20f72 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the core_axi_write_if interface signals. +// It is instantiated once per core_axi_write_if bus. Bus Functional Models, +// BFM's named core_axi_write_if_driver_bfm, are used to drive signals on the bus. +// BFM's named core_axi_write_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(core_axi_write_if_bus.awready), // Agent input +// .dut_signal_port(core_axi_write_if_bus.wready), // Agent input +// .dut_signal_port(core_axi_write_if_bus.bresp), // Agent input +// .dut_signal_port(core_axi_write_if_bus.bid), // Agent input +// .dut_signal_port(core_axi_write_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import core_axi_write_if_pkg_hdl::*; + +interface core_axi_write_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_macros.svh new file mode 100644 index 000000000..8c8873557 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the core_axi_write_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the core_axi_write_if_configuration class. +// + `define core_axi_write_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } core_axi_write_if_configuration_s; + + `define core_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function core_axi_write_if_configuration_s to_struct();\ + core_axi_write_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( core_axi_write_if_configuration_struct );\ + endfunction + + `define core_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(core_axi_write_if_configuration_s core_axi_write_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = core_axi_write_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the core_axi_write_if_transaction class. +// + `define core_axi_write_if_MONITOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } core_axi_write_if_monitor_s; + + `define core_axi_write_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function core_axi_write_if_monitor_s to_monitor_struct();\ + core_axi_write_if_monitor_struct = \ + { \ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( core_axi_write_if_monitor_struct);\ + endfunction\ + + `define core_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(core_axi_write_if_monitor_s core_axi_write_if_monitor_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = core_axi_write_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the core_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_write_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } core_axi_write_if_initiator_s; + + `define core_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function core_axi_write_if_initiator_s to_initiator_struct();\ + core_axi_write_if_initiator_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( core_axi_write_if_initiator_struct);\ + endfunction + + `define core_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(core_axi_write_if_initiator_s core_axi_write_if_initiator_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = core_axi_write_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the core_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_write_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } core_axi_write_if_responder_s; + + `define core_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function core_axi_write_if_responder_s to_responder_struct();\ + core_axi_write_if_responder_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( core_axi_write_if_responder_struct);\ + endfunction + + `define core_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(core_axi_write_if_responder_s core_axi_write_if_responder_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = core_axi_write_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor.svh new file mode 100644 index 000000000..52be1a9ca --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives core_axi_write_if transactions observed by the +// core_axi_write_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual core_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_write_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`core_axi_write_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the core_axi_write_if_monitor_struct. + virtual function void notify_transaction(input core_axi_write_if_monitor_s core_axi_write_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(core_axi_write_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor_bfm.sv new file mode 100644 index 000000000..9661876ce --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the core_axi_write_if signal monitoring. +// It is accessed by the uvm core_axi_write_if monitor through a virtual +// interface handle in the core_axi_write_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type core_axi_write_if_if. +// +// Input signals from the core_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the core_axi_write_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_write_if_pkg_hdl::*; +`include "src/core_axi_write_if_macros.svh" + + +interface core_axi_write_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( core_axi_write_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute core_axi_write_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`core_axi_write_if_MONITOR_STRUCT + core_axi_write_if_monitor_s core_axi_write_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `core_axi_write_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + core_axi_write_if_pkg::core_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( core_axi_write_if_monitor_struct ); + + + proxy.notify_transaction( core_axi_write_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(core_axi_write_if_configuration_s core_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output core_axi_write_if_monitor_s core_axi_write_if_monitor_struct); + // + // Available struct members: + // // core_axi_write_if_monitor_struct.core_awready + // // core_axi_write_if_monitor_struct.core_wready + // // core_axi_write_if_monitor_struct.core_bresp + // // core_axi_write_if_monitor_struct.core_bid + // // core_axi_write_if_monitor_struct.core_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // core_axi_write_if_monitor_struct.xyz = awready_i; // + // core_axi_write_if_monitor_struct.xyz = wready_i; // + // core_axi_write_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // core_axi_write_if_monitor_struct.xyz = bid_i; // + // core_axi_write_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_random_sequence.svh new file mode 100644 index 000000000..9722594f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the core_axi_write_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a core_axi_write_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_write_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "core_axi_write_if_random_sequence::body()-core_axi_write_if_transaction randomization failed") + // Send the transaction to the core_axi_write_if_driver_bfm via the sequencer and core_axi_write_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: core_axi_write_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_responder_sequence.svh new file mode 100644 index 000000000..4ee61b3ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_write_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "core_axi_write_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_sequence_base.svh new file mode 100644 index 000000000..339755d18 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_write_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_write_if_transaction_req_t; + core_axi_write_if_transaction_req_t req; + typedef core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_write_if_transaction_rsp_t; + core_axi_write_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = core_axi_write_if_transaction_req_t::type_id::create("req"); + rsp = core_axi_write_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction.svh new file mode 100644 index 000000000..78c5353a7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an core_axi_write_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( core_axi_write_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_awready ; + logic core_wready ; + axi_pkg::axi_burst_e core_bresp ; + logic core_bid ; + logic core_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in core_axi_write_if_macros.svh + + //******************************************************************* + // Monitor macro used by core_axi_write_if_monitor and core_axi_write_if_monitor_bfm + // This struct is defined in core_axi_write_if_macros.svh + `core_axi_write_if_MONITOR_STRUCT + core_axi_write_if_monitor_s core_axi_write_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a core_axi_write_if_monitor_s + // structure. The function returns the handle to the core_axi_write_if_monitor_struct. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm + // to communicate initiator driven data to core_axi_write_if_driver_bfm. + // This struct is defined in core_axi_write_if_macros.svh + `core_axi_write_if_INITIATOR_STRUCT + core_axi_write_if_initiator_s core_axi_write_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a core_axi_write_if_initiator_s + // structure. The function returns the handle to the core_axi_write_if_initiator_struct. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm + // to communicate Responder driven data to core_axi_write_if_driver_bfm. + // This struct is defined in core_axi_write_if_macros.svh + `core_axi_write_if_RESPONDER_STRUCT + core_axi_write_if_responder_s core_axi_write_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a core_axi_write_if_responder_s + // structure. The function returns the handle to the core_axi_write_if_responder_struct. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awready:0x%x core_wready:0x%x core_bresp:0x%x core_bid:0x%x core_bvalid:0x%x ",core_awready,core_wready,core_bresp,core_bid,core_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_awready == RHS.core_awready) + &&(this.core_wready == RHS.core_wready) + &&(this.core_bresp == RHS.core_bresp) + &&(this.core_bid == RHS.core_bid) + &&(this.core_bvalid == RHS.core_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awready = RHS.core_awready; + this.core_wready = RHS.core_wready; + this.core_bresp = RHS.core_bresp; + this.core_bid = RHS.core_bid; + this.core_bvalid = RHS.core_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"core_axi_write_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awready,"core_awready"); + $add_attribute(transaction_view_h,core_wready,"core_wready"); + $add_attribute(transaction_view_h,core_bresp,"core_bresp"); + $add_attribute(transaction_view_h,core_bid,"core_bid"); + $add_attribute(transaction_view_h,core_bvalid,"core_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction_coverage.svh new file mode 100644 index 000000000..aa3fe1d6e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records core_axi_write_if transaction information using +// a covergroup named core_axi_write_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_write_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup core_axi_write_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awready: coverpoint coverage_trans.core_awready; + core_wready: coverpoint coverage_trans.core_wready; + core_bresp: coverpoint coverage_trans.core_bresp; + core_bid: coverpoint coverage_trans.core_bid; + core_bvalid: coverpoint coverage_trans.core_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + core_axi_write_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + core_axi_write_if_transaction_cg.set_inst_name($sformatf("core_axi_write_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + core_axi_write_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/yaml/core_axi_write_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/yaml/core_axi_write_if_interface.yaml new file mode 100644 index 000000000..049bcebe2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/core_axi_write_if_pkg/yaml/core_axi_write_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + core_axi_write_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.project new file mode 100644 index 000000000..63a0f5c9d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..a3cbefe0b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..c29cae1ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f + +fuse_ctrl_core_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f + +fuse_ctrl_core_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_read_if_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_read_if_pkg +COMP_fuse_ctrl_core_axi_read_if_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_read_if_pkg +COMP_fuse_ctrl_core_axi_read_if_PKG_TGT = $(COMP_fuse_ctrl_core_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_read_if_pkg: $(COMP_fuse_ctrl_core_axi_read_if_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_read_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_read_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_if_pkg += -I$(fuse_ctrl_core_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_if_pkg += $(fuse_ctrl_core_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_read_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..4e0c5588d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if.compile new file mode 100644 index 000000000..48a0d3158 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_read_if_hvl.compile + - fuse_ctrl_core_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..28155505e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_read_if_if.sv +src/fuse_ctrl_core_axi_read_if_driver_bfm.sv +src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_common.compile new file mode 100644 index 000000000..109b88dad --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..733787653 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..90b4e36ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..26bcff49c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hdl.compile new file mode 100644 index 000000000..c28340779 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_read_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_read_if_if.sv + - src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv + - src/fuse_ctrl_core_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hvl.compile new file mode 100644 index 000000000..6135baefd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_read_if_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.sv new file mode 100644 index 000000000..88b9bb7a3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_read_if_macros.svh" + + export fuse_ctrl_core_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_read_if_typedefs.svh" + `include "src/fuse_ctrl_core_axi_read_if_transaction.svh" + + `include "src/fuse_ctrl_core_axi_read_if_configuration.svh" + `include "src/fuse_ctrl_core_axi_read_if_driver.svh" + `include "src/fuse_ctrl_core_axi_read_if_monitor.svh" + + `include "src/fuse_ctrl_core_axi_read_if_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_read_if_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_read_if_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_read_if_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_read_if2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..bb1d0794d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..c410235bf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_read_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..723625863 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..863eb4873 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..2ac137314 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_agent.svh new file mode 100644 index 000000000..cecf128e5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_configuration.svh new file mode 100644 index 000000000..c75c85e1c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_read_if_configuration_s fuse_ctrl_core_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_read_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_if_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_read_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver.svh new file mode 100644 index 000000000..ab8413284 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_read_if_driver_bfm. +`fuse_ctrl_core_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_if_initiator_s fuse_ctrl_core_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_read_if_driver_bfm. +`fuse_ctrl_core_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_if_responder_s fuse_ctrl_core_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..8d672492f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_read_if signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_read_if driver through a virtual interface +// handle in the fuse_ctrl_core_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_read_if_if. +// +// Input signals from the fuse_ctrl_core_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_if_macros.svh" + +interface fuse_ctrl_core_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_read_if_pkg::fuse_ctrl_core_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_read_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_if_driver_bfm. + `fuse_ctrl_core_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_if_driver_bfm. + `fuse_ctrl_core_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_read_if_configuration_s fuse_ctrl_core_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_read_if_initiator_s fuse_ctrl_core_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_read_if_responder_s fuse_ctrl_core_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_read_if_initiator_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Members within the fuse_ctrl_core_axi_read_if_responder_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + initiator_struct = fuse_ctrl_core_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_read_if_initiator_s fuse_ctrl_core_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_read_if_responder_s fuse_ctrl_core_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_read_if_initiator_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Variables within the fuse_ctrl_core_axi_read_if_responder_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arlock_i; // + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_if.sv new file mode 100644 index 000000000..5f8ec8923 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_read_if interface signals. +// It is instantiated once per fuse_ctrl_core_axi_read_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_if_pkg_hdl::*; + +interface fuse_ctrl_core_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_macros.svh new file mode 100644 index 000000000..c5799df29 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_read_if_configuration class. +// + `define fuse_ctrl_core_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_read_if_configuration_s; + + `define fuse_ctrl_core_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_if_configuration_s to_struct();\ + fuse_ctrl_core_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_read_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_read_if_configuration_s fuse_ctrl_core_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_read_if_transaction class. +// + `define fuse_ctrl_core_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_if_monitor_s; + + `define fuse_ctrl_core_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_if_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_read_if_monitor_struct = \ + { \ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_read_if_monitor_s fuse_ctrl_core_axi_read_if_monitor_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_if_initiator_s; + + `define fuse_ctrl_core_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_if_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_read_if_initiator_struct = \ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_read_if_initiator_s fuse_ctrl_core_axi_read_if_initiator_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_if_responder_s; + + `define fuse_ctrl_core_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_if_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_read_if_responder_struct = \ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_if_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_read_if_responder_s fuse_ctrl_core_axi_read_if_responder_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor.svh new file mode 100644 index 000000000..09bb82cf5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_read_if transactions observed by the +// fuse_ctrl_core_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_read_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_read_if_monitor_s fuse_ctrl_core_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..2f9a66938 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_read_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_read_if monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_read_if_if. +// +// Input signals from the fuse_ctrl_core_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_if_macros.svh" + + +interface fuse_ctrl_core_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_read_if_MONITOR_STRUCT + fuse_ctrl_core_axi_read_if_monitor_s fuse_ctrl_core_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_read_if_pkg::fuse_ctrl_core_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_read_if_configuration_s fuse_ctrl_core_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_read_if_monitor_s fuse_ctrl_core_axi_read_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_araddr + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arvalid + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arburst + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arsize + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arlen + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_aruser + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arid + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arlock + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..f0d127eb7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_read_if_random_sequence::body()-fuse_ctrl_core_axi_read_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_read_if_driver_bfm via the sequencer and fuse_ctrl_core_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..beadd0baf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..ecb0cebaa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_if_transaction_req_t; + fuse_ctrl_core_axi_read_if_transaction_req_t req; + typedef fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_if_transaction_rsp_t; + fuse_ctrl_core_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction.svh new file mode 100644 index 000000000..44757277a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] core_araddr ; + logic core_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + logic [2:0] core_arsize ; + logic [7:0] core_arlen ; + logic [UW-1:0] core_aruser ; + logic [IW-1:0] core_arid ; + logic core_arlock ; + logic core_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_read_if_monitor and fuse_ctrl_core_axi_read_if_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_MONITOR_STRUCT + fuse_ctrl_core_axi_read_if_monitor_s fuse_ctrl_core_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_if_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_if_initiator_s fuse_ctrl_core_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_if_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_if_responder_s fuse_ctrl_core_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_if_responder_struct. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_araddr:0x%x core_arvalid:0x%x core_arburst:0x%x core_arsize:0x%x core_arlen:0x%x core_aruser:0x%x core_arid:0x%x core_arlock:0x%x core_rready:0x%x ",core_araddr,core_arvalid,core_arburst,core_arsize,core_arlen,core_aruser,core_arid,core_arlock,core_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_araddr = RHS.core_araddr; + this.core_arvalid = RHS.core_arvalid; + this.core_arburst = RHS.core_arburst; + this.core_arsize = RHS.core_arsize; + this.core_arlen = RHS.core_arlen; + this.core_aruser = RHS.core_aruser; + this.core_arid = RHS.core_arid; + this.core_arlock = RHS.core_arlock; + this.core_rready = RHS.core_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_araddr,"core_araddr"); + $add_attribute(transaction_view_h,core_arvalid,"core_arvalid"); + $add_attribute(transaction_view_h,core_arburst,"core_arburst"); + $add_attribute(transaction_view_h,core_arsize,"core_arsize"); + $add_attribute(transaction_view_h,core_arlen,"core_arlen"); + $add_attribute(transaction_view_h,core_aruser,"core_aruser"); + $add_attribute(transaction_view_h,core_arid,"core_arid"); + $add_attribute(transaction_view_h,core_arlock,"core_arlock"); + $add_attribute(transaction_view_h,core_rready,"core_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..70b6c9261 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_read_if transaction information using +// a covergroup named fuse_ctrl_core_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_araddr: coverpoint coverage_trans.core_araddr; + core_arvalid: coverpoint coverage_trans.core_arvalid; + core_arburst: coverpoint coverage_trans.core_arburst; + core_arsize: coverpoint coverage_trans.core_arsize; + core_arlen: coverpoint coverage_trans.core_arlen; + core_aruser: coverpoint coverage_trans.core_aruser; + core_arid: coverpoint coverage_trans.core_arid; + core_arlock: coverpoint coverage_trans.core_arlock; + core_rready: coverpoint coverage_trans.core_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_read_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/yaml/fuse_ctrl_core_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/yaml/fuse_ctrl_core_axi_read_if_interface.yaml new file mode 100644 index 000000000..cacadd72c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/yaml/fuse_ctrl_core_axi_read_if_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: core_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.project new file mode 100644 index 000000000..574f71c48 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_write_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.svproject new file mode 100644 index 000000000..ed3bfd5bc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/Makefile new file mode 100644 index 000000000..573f6542d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_write_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_write_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f + +fuse_ctrl_core_axi_write_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f + +fuse_ctrl_core_axi_write_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_write_if_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_write_if_pkg +COMP_fuse_ctrl_core_axi_write_if_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_write_if_pkg +COMP_fuse_ctrl_core_axi_write_if_PKG_TGT = $(COMP_fuse_ctrl_core_axi_write_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_write_if_pkg: $(COMP_fuse_ctrl_core_axi_write_if_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_write_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_write_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_write_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_write_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_write_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_if_pkg += -I$(fuse_ctrl_core_axi_write_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_if_pkg += $(fuse_ctrl_core_axi_write_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_write_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_write_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_write_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_write_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/compile.do new file mode 100644 index 000000000..1628622fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_write_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if.compile new file mode 100644 index 000000000..2ee95290b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_write_if_hvl.compile + - fuse_ctrl_core_axi_write_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_bfm.vinfo new file mode 100644 index 000000000..cfb94c619 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_write_if_if.sv +src/fuse_ctrl_core_axi_write_if_driver_bfm.sv +src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_common.compile new file mode 100644 index 000000000..12a17faa4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f new file mode 100644 index 000000000..c5556080a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f new file mode 100644 index 000000000..68b83cc94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f new file mode 100644 index 000000000..3108e102e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hdl.compile new file mode 100644 index 000000000..7185a09f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_write_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_write_if_if.sv + - src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv + - src/fuse_ctrl_core_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hvl.compile new file mode 100644 index 000000000..5096b1689 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_write_if_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.sv new file mode 100644 index 000000000..4fcea64ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_write_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_write_if_macros.svh" + + export fuse_ctrl_core_axi_write_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_write_if_typedefs.svh" + `include "src/fuse_ctrl_core_axi_write_if_transaction.svh" + + `include "src/fuse_ctrl_core_axi_write_if_configuration.svh" + `include "src/fuse_ctrl_core_axi_write_if_driver.svh" + `include "src/fuse_ctrl_core_axi_write_if_monitor.svh" + + `include "src/fuse_ctrl_core_axi_write_if_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_write_if_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_write_if_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_write_if_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_write_if2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_write_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.vinfo new file mode 100644 index 000000000..6bd4a3132 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.sv new file mode 100644 index 000000000..943fb4e9c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_write_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_write_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo new file mode 100644 index 000000000..179238254 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_sve.F new file mode 100644 index 000000000..0168ba713 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if2reg_adapter.svh new file mode 100644 index 000000000..f7dc857b5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_write_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_write_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_write_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_agent.svh new file mode 100644 index 000000000..d991ed3fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_write_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_configuration.svh new file mode 100644 index 000000000..e0d213f15 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_write_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_write_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_write_if_configuration_s fuse_ctrl_core_axi_write_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_write_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_if_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_write_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_write_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_write_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_write_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver.svh new file mode 100644 index 000000000..33543d00f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_write_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_write_if_driver_bfm. +`fuse_ctrl_core_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_if_initiator_s fuse_ctrl_core_axi_write_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_write_if_driver_bfm. +`fuse_ctrl_core_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_if_responder_s fuse_ctrl_core_axi_write_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_write_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_write_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_write_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_write_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver_bfm.sv new file mode 100644 index 000000000..8b920cc3e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver_bfm.sv @@ -0,0 +1,429 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_write_if signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_write_if driver through a virtual interface +// handle in the fuse_ctrl_core_axi_write_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_write_if_if. +// +// Input signals from the fuse_ctrl_core_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_write_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_if_macros.svh" + +interface fuse_ctrl_core_axi_write_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_write_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] awaddr_i; + reg [AW-1:0] awaddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] awburst_o = 'bz; + tri [2:0] awsize_i; + reg [2:0] awsize_o = 'bz; + tri [7:0] awlen_i; + reg [7:0] awlen_o = 'bz; + tri [UW-1:0] awuser_i; + reg [UW-1:0] awuser_o = 'bz; + tri [UW-1:0] awid_i; + reg [UW-1:0] awid_o = 'bz; + tri awlock_i; + reg awlock_o = 'bz; + tri awvalid_i; + reg awvalid_o = 'bz; + tri [DW-1:0] wdata_i; + reg [DW-1:0] wdata_o = 'bz; + tri [DW/8-1:0] wstrb_i; + reg [DW/8-1:0] wstrb_o = 'bz; + tri wvalid_i; + reg wvalid_o = 'bz; + tri wlast_i; + reg wlast_o = 'bz; + tri bready_i; + reg bready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.awaddr = (initiator_responder == INITIATOR) ? awaddr_o : 'bz; + assign awaddr_i = bus.awaddr; + assign bus.awburst = (initiator_responder == INITIATOR) ? awburst_o : 'bz; + assign awburst_i = bus.awburst; + assign bus.awsize = (initiator_responder == INITIATOR) ? awsize_o : 'bz; + assign awsize_i = bus.awsize; + assign bus.awlen = (initiator_responder == INITIATOR) ? awlen_o : 'bz; + assign awlen_i = bus.awlen; + assign bus.awuser = (initiator_responder == INITIATOR) ? awuser_o : 'bz; + assign awuser_i = bus.awuser; + assign bus.awid = (initiator_responder == INITIATOR) ? awid_o : 'bz; + assign awid_i = bus.awid; + assign bus.awlock = (initiator_responder == INITIATOR) ? awlock_o : 'bz; + assign awlock_i = bus.awlock; + assign bus.awvalid = (initiator_responder == INITIATOR) ? awvalid_o : 'bz; + assign awvalid_i = bus.awvalid; + assign bus.wdata = (initiator_responder == INITIATOR) ? wdata_o : 'bz; + assign wdata_i = bus.wdata; + assign bus.wstrb = (initiator_responder == INITIATOR) ? wstrb_o : 'bz; + assign wstrb_i = bus.wstrb; + assign bus.wvalid = (initiator_responder == INITIATOR) ? wvalid_o : 'bz; + assign wvalid_i = bus.wvalid; + assign bus.wlast = (initiator_responder == INITIATOR) ? wlast_o : 'bz; + assign wlast_i = bus.wlast; + assign bus.bready = (initiator_responder == INITIATOR) ? bready_o : 'bz; + assign bready_i = bus.bready; + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_write_if_pkg::fuse_ctrl_core_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_write_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_write_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_write_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_if_driver_bfm. + `fuse_ctrl_core_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_if_driver_bfm. + `fuse_ctrl_core_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + awaddr_o <= 'bz; + awburst_o <= 'bz; + awsize_o <= 'bz; + awlen_o <= 'bz; + awuser_o <= 'bz; + awid_o <= 'bz; + awlock_o <= 'bz; + awvalid_o <= 'bz; + wdata_o <= 'bz; + wstrb_o <= 'bz; + wvalid_o <= 'bz; + wlast_o <= 'bz; + bready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_write_if_configuration_s fuse_ctrl_core_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_write_if_initiator_s fuse_ctrl_core_axi_write_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_write_if_responder_s fuse_ctrl_core_axi_write_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_write_if_initiator_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Members within the fuse_ctrl_core_axi_write_if_responder_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + initiator_struct = fuse_ctrl_core_axi_write_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // awaddr_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [AW-1:0] + // awburst_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // awsize_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [2:0] + // awlen_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [7:0] + // awuser_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [UW-1:0] + // awid_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [UW-1:0] + // awlock_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // + // awvalid_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // + // wdata_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [DW-1:0] + // wstrb_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [DW/8-1:0] + // wvalid_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // + // wlast_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // + // bready_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_write_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_write_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_write_if_initiator_s fuse_ctrl_core_axi_write_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_write_if_responder_s fuse_ctrl_core_axi_write_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_write_if_initiator_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Variables within the fuse_ctrl_core_axi_write_if_responder_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awlock_i; // + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awvalid_i; // + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = wvalid_i; // + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = wlast_i; // + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = bready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_write_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_write_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_if.sv new file mode 100644 index 000000000..b0047fa1f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_if.sv @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_write_if interface signals. +// It is instantiated once per fuse_ctrl_core_axi_write_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_write_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_write_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awaddr), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awburst), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awsize), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awlen), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awuser), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awlock), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.wdata), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.wstrb), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.wvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.wlast), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.bready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_if_pkg_hdl::*; + +interface fuse_ctrl_core_axi_write_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] awaddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst, + inout tri [2:0] awsize, + inout tri [7:0] awlen, + inout tri [UW-1:0] awuser, + inout tri [UW-1:0] awid, + inout tri awlock, + inout tri awvalid, + inout tri [DW-1:0] wdata, + inout tri [DW/8-1:0] wstrb, + inout tri wvalid, + inout tri wlast, + inout tri bready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output awaddr, + output awburst, + output awsize, + output awlen, + output awuser, + output awid, + output awlock, + output awvalid, + output wdata, + output wstrb, + output wvalid, + output wlast, + output bready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_macros.svh new file mode 100644 index 000000000..b8fd5a307 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_macros.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_write_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_write_if_configuration class. +// + `define fuse_ctrl_core_axi_write_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_write_if_configuration_s; + + `define fuse_ctrl_core_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_if_configuration_s to_struct();\ + fuse_ctrl_core_axi_write_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_write_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_write_if_configuration_s fuse_ctrl_core_axi_write_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_write_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_write_if_transaction class. +// + `define fuse_ctrl_core_axi_write_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_if_monitor_s; + + `define fuse_ctrl_core_axi_write_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_if_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_write_if_monitor_struct = \ + { \ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_write_if_monitor_s fuse_ctrl_core_axi_write_if_monitor_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_if_initiator_s; + + `define fuse_ctrl_core_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_if_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_write_if_initiator_struct = \ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_write_if_initiator_s fuse_ctrl_core_axi_write_if_initiator_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_if_responder_s; + + `define fuse_ctrl_core_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_if_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_write_if_responder_struct = \ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_if_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_write_if_responder_s fuse_ctrl_core_axi_write_if_responder_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor.svh new file mode 100644 index 000000000..a0022cc66 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_write_if transactions observed by the +// fuse_ctrl_core_axi_write_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_write_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_write_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_write_if_monitor_s fuse_ctrl_core_axi_write_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_write_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv new file mode 100644 index 000000000..de0093e53 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv @@ -0,0 +1,248 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_write_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_write_if monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_write_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_write_if_if. +// +// Input signals from the fuse_ctrl_core_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_write_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_if_macros.svh" + + +interface fuse_ctrl_core_axi_write_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_write_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_write_if_MONITOR_STRUCT + fuse_ctrl_core_axi_write_if_monitor_s fuse_ctrl_core_axi_write_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_write_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] awaddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + tri [2:0] awsize_i; + tri [7:0] awlen_i; + tri [UW-1:0] awuser_i; + tri [UW-1:0] awid_i; + tri awlock_i; + tri awvalid_i; + tri [DW-1:0] wdata_i; + tri [DW/8-1:0] wstrb_i; + tri wvalid_i; + tri wlast_i; + tri bready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awaddr_i = bus.awaddr; + assign awburst_i = bus.awburst; + assign awsize_i = bus.awsize; + assign awlen_i = bus.awlen; + assign awuser_i = bus.awuser; + assign awid_i = bus.awid; + assign awlock_i = bus.awlock; + assign awvalid_i = bus.awvalid; + assign wdata_i = bus.wdata; + assign wstrb_i = bus.wstrb; + assign wvalid_i = bus.wvalid; + assign wlast_i = bus.wlast; + assign bready_i = bus.bready; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_write_if_pkg::fuse_ctrl_core_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_write_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_write_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_write_if_configuration_s fuse_ctrl_core_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_write_if_monitor_s fuse_ctrl_core_axi_write_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awaddr + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awvalid + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awburst + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awsize + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awlen + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awuser + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awid + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awlock + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_wdata + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_wstrb + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_wvalid + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_wlast + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_bready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awlock_i; // + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awvalid_i; // + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = wvalid_i; // + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = wlast_i; // + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = bready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_random_sequence.svh new file mode 100644 index 000000000..77120c18e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_write_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_write_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_write_if_random_sequence::body()-fuse_ctrl_core_axi_write_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_write_if_driver_bfm via the sequencer and fuse_ctrl_core_axi_write_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_write_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_responder_sequence.svh new file mode 100644 index 000000000..ed1c8c6bd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_write_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_sequence_base.svh new file mode 100644 index 000000000..122b3d543 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_if_transaction_req_t; + fuse_ctrl_core_axi_write_if_transaction_req_t req; + typedef fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_if_transaction_rsp_t; + fuse_ctrl_core_axi_write_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_write_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_write_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction.svh new file mode 100644 index 000000000..3298d1196 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction.svh @@ -0,0 +1,256 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_write_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] core_awaddr ; + logic core_awvalid ; + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + logic [2:0] core_awsize ; + logic [7:0] core_awlen ; + logic [UW-1:0] core_awuser ; + logic [IW-1:0] core_awid ; + logic core_awlock ; + logic [DW-1:0] core_wdata ; + logic [DW/8 - 1:0] core_wstrb ; + logic core_wvalid ; + logic core_wlast ; + logic core_bready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_write_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_write_if_monitor and fuse_ctrl_core_axi_write_if_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_MONITOR_STRUCT + fuse_ctrl_core_axi_write_if_monitor_s fuse_ctrl_core_axi_write_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_if_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_if_initiator_s fuse_ctrl_core_axi_write_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_if_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_if_responder_s fuse_ctrl_core_axi_write_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_if_responder_struct. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awaddr:0x%x core_awvalid:0x%x core_awburst:0x%x core_awsize:0x%x core_awlen:0x%x core_awuser:0x%x core_awid:0x%x core_awlock:0x%x core_wdata:0x%x core_wstrb:0x%x core_wvalid:0x%x core_wlast:0x%x core_bready:0x%x ",core_awaddr,core_awvalid,core_awburst,core_awsize,core_awlen,core_awuser,core_awid,core_awlock,core_wdata,core_wstrb,core_wvalid,core_wlast,core_bready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_wdata == RHS.core_wdata) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awaddr = RHS.core_awaddr; + this.core_awvalid = RHS.core_awvalid; + this.core_awburst = RHS.core_awburst; + this.core_awsize = RHS.core_awsize; + this.core_awlen = RHS.core_awlen; + this.core_awuser = RHS.core_awuser; + this.core_awid = RHS.core_awid; + this.core_awlock = RHS.core_awlock; + this.core_wdata = RHS.core_wdata; + this.core_wstrb = RHS.core_wstrb; + this.core_wvalid = RHS.core_wvalid; + this.core_wlast = RHS.core_wlast; + this.core_bready = RHS.core_bready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_write_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awaddr,"core_awaddr"); + $add_attribute(transaction_view_h,core_awvalid,"core_awvalid"); + $add_attribute(transaction_view_h,core_awburst,"core_awburst"); + $add_attribute(transaction_view_h,core_awsize,"core_awsize"); + $add_attribute(transaction_view_h,core_awlen,"core_awlen"); + $add_attribute(transaction_view_h,core_awuser,"core_awuser"); + $add_attribute(transaction_view_h,core_awid,"core_awid"); + $add_attribute(transaction_view_h,core_awlock,"core_awlock"); + $add_attribute(transaction_view_h,core_wdata,"core_wdata"); + $add_attribute(transaction_view_h,core_wstrb,"core_wstrb"); + $add_attribute(transaction_view_h,core_wvalid,"core_wvalid"); + $add_attribute(transaction_view_h,core_wlast,"core_wlast"); + $add_attribute(transaction_view_h,core_bready,"core_bready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction_coverage.svh new file mode 100644 index 000000000..3f905316d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction_coverage.svh @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_write_if transaction information using +// a covergroup named fuse_ctrl_core_axi_write_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_write_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awaddr: coverpoint coverage_trans.core_awaddr; + core_awvalid: coverpoint coverage_trans.core_awvalid; + core_awburst: coverpoint coverage_trans.core_awburst; + core_awsize: coverpoint coverage_trans.core_awsize; + core_awlen: coverpoint coverage_trans.core_awlen; + core_awuser: coverpoint coverage_trans.core_awuser; + core_awid: coverpoint coverage_trans.core_awid; + core_awlock: coverpoint coverage_trans.core_awlock; + core_wdata: coverpoint coverage_trans.core_wdata; + core_wstrb: coverpoint coverage_trans.core_wstrb; + core_wvalid: coverpoint coverage_trans.core_wvalid; + core_wlast: coverpoint coverage_trans.core_wlast; + core_bready: coverpoint coverage_trans.core_bready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_write_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_write_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_write_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/yaml/fuse_ctrl_core_axi_write_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/yaml/fuse_ctrl_core_axi_write_if_interface.yaml new file mode 100644 index 000000000..242a9b639 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/yaml/fuse_ctrl_core_axi_write_if_interface.yaml @@ -0,0 +1,161 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_write_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: awaddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: awburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: awsize + reset_value: '''bz' + width: '3' + - dir: output + name: awlen + reset_value: '''bz' + width: '8' + - dir: output + name: awuser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awid + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awlock + reset_value: '''bz' + width: '1' + - dir: output + name: awvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wdata + reset_value: '''bz' + width: '[''DW'']' + - dir: output + name: wstrb + reset_value: '''bz' + width: '[''DW/8'']' + - dir: output + name: wvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wlast + reset_value: '''bz' + width: '1' + - dir: output + name: bready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: core_awaddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awuser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wstrb + type: logic [DW/8 - 1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_bready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.project new file mode 100644 index 000000000..45e6ebf46 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_in_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.svproject new file mode 100644 index 000000000..f75187c7a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/Makefile new file mode 100644 index 000000000..ec35ee1db --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_in_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_in_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f + +fuse_ctrl_in_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f + +fuse_ctrl_in_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_xrtl.f + +COMP_fuse_ctrl_in_if_PKG_TGT_0 = q_comp_fuse_ctrl_in_if_pkg +COMP_fuse_ctrl_in_if_PKG_TGT_1 = v_comp_fuse_ctrl_in_if_pkg +COMP_fuse_ctrl_in_if_PKG_TGT = $(COMP_fuse_ctrl_in_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_in_if_pkg: $(COMP_fuse_ctrl_in_if_PKG_TGT) + +q_comp_fuse_ctrl_in_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_in_if_PKG_XRTL) + +v_comp_fuse_ctrl_in_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_in_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_in_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_in_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_in_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_in_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_in_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_in_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_in_if_pkg += -I$(fuse_ctrl_in_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_in_if_pkg += $(fuse_ctrl_in_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_in_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_in_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_in_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_in_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_in_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_in_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/compile.do new file mode 100644 index 000000000..c285781cd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_in_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if.compile new file mode 100644 index 000000000..e8e8162d5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_in_if_hvl.compile + - fuse_ctrl_in_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_bfm.vinfo new file mode 100644 index 000000000..b43d67488 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_in_if_if.sv +src/fuse_ctrl_in_if_driver_bfm.sv +src/fuse_ctrl_in_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_common.compile new file mode 100644 index 000000000..b81563f6f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f new file mode 100644 index 000000000..12e3b303b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f new file mode 100644 index 000000000..7a81ab807 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_xrtl.f new file mode 100644 index 000000000..179ff7f94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hdl.compile new file mode 100644 index 000000000..c092af6fc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_in_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_in_if_if.sv + - src/fuse_ctrl_in_if_monitor_bfm.sv + - src/fuse_ctrl_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hvl.compile new file mode 100644 index 000000000..92ee0394b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_in_if_common.compile +incdir: + - . +src: + - fuse_ctrl_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.sv new file mode 100644 index 000000000..084ccc70c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_in_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_in_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_in_if_macros.svh" + + export fuse_ctrl_in_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_in_if_typedefs.svh" + `include "src/fuse_ctrl_in_if_transaction.svh" + + `include "src/fuse_ctrl_in_if_configuration.svh" + `include "src/fuse_ctrl_in_if_driver.svh" + `include "src/fuse_ctrl_in_if_monitor.svh" + + `include "src/fuse_ctrl_in_if_transaction_coverage.svh" + `include "src/fuse_ctrl_in_if_sequence_base.svh" + `include "src/fuse_ctrl_in_if_random_sequence.svh" + + `include "src/fuse_ctrl_in_if_responder_sequence.svh" + `include "src/fuse_ctrl_in_if2reg_adapter.svh" + + `include "src/fuse_ctrl_in_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.vinfo new file mode 100644 index 000000000..638065653 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.sv new file mode 100644 index 000000000..0037ca5fe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_in_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_in_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_in_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.vinfo new file mode 100644 index 000000000..63327f479 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_sve.F new file mode 100644 index 000000000..8f42525dc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if2reg_adapter.svh new file mode 100644 index 000000000..949a9a2be --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_in_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if2reg_adapter #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_in_if2reg_adapter #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_in_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h = fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_in_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_agent.svh new file mode 100644 index 000000000..c4e054bf2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_agent #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_in_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .DRIVER_T(fuse_ctrl_in_if_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_T(fuse_ctrl_in_if_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .COVERAGE_T(fuse_ctrl_in_if_transaction_coverage #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_in_if_agent #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_configuration.svh new file mode 100644 index 000000000..2f557ad05 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_in_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_configuration #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_in_if_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_in_if_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_in_if_configuration #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_in_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_CONFIGURATION_STRUCT + fuse_ctrl_in_if_configuration_s fuse_ctrl_in_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_in_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_in_if_configuration_struct. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_in_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_in_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_in_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_in_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_in_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_in_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_in_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", agent_path, interface_name, AlertSyncOn ,RndConstLfrSeed ,RndCnstLfsrPerm ,MemInitFile ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_in_if_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver.svh new file mode 100644 index 000000000..4f5e71c4a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_driver #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_in_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_in_if_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .REQ(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .RSP(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_in_if_driver #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_in_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_in_if_driver and fuse_ctrl_in_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_in_if_driver_bfm. +`fuse_ctrl_in_if_INITIATOR_STRUCT + fuse_ctrl_in_if_initiator_s fuse_ctrl_in_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_in_if_driver and fuse_ctrl_in_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_in_if_driver_bfm. +`fuse_ctrl_in_if_RESPONDER_STRUCT + fuse_ctrl_in_if_responder_s fuse_ctrl_in_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_in_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_in_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_in_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_in_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver_bfm.sv new file mode 100644 index 000000000..6b39174a4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver_bfm.sv @@ -0,0 +1,346 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_in_if signal driving. It is +// accessed by the uvm fuse_ctrl_in_if driver through a virtual interface +// handle in the fuse_ctrl_in_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_in_if_if. +// +// Input signals from the fuse_ctrl_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_in_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_in_if_macros.svh" + +interface fuse_ctrl_in_if_driver_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + (fuse_ctrl_in_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_in_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i_i; + reg [$bits(edn_pkg::edn_req_t)-1:0] edn_i_o = 'bz; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_i; + reg [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_o = 'bz; + tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_i; + reg [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_o = 'bz; + tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_i; + reg [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_o = 'bz; + tri otp_ext_voltage_h_io_i; + reg otp_ext_voltage_h_io_o = 'bz; + tri scan_en_i_i; + reg scan_en_i_o = 'bz; + tri scan_rst_ni_i; + reg scan_rst_ni_o = 'bz; + tri scanmode_i_i; + reg scanmode_i_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.edn_i = (initiator_responder == INITIATOR) ? edn_i_o : 'bz; + assign edn_i_i = bus.edn_i; + assign bus.alert_rx_i = (initiator_responder == INITIATOR) ? alert_rx_i_o : 'bz; + assign alert_rx_i_i = bus.alert_rx_i; + assign bus.obs_ctrl_i = (initiator_responder == INITIATOR) ? obs_ctrl_i_o : 'bz; + assign obs_ctrl_i_i = bus.obs_ctrl_i; + assign bus.otp_ast_pwr_seq_h_i = (initiator_responder == INITIATOR) ? otp_ast_pwr_seq_h_i_o : 'bz; + assign otp_ast_pwr_seq_h_i_i = bus.otp_ast_pwr_seq_h_i; + assign bus.otp_ext_voltage_h_io = (initiator_responder == INITIATOR) ? otp_ext_voltage_h_io_o : 'bz; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + assign bus.scan_en_i = (initiator_responder == INITIATOR) ? scan_en_i_o : 'bz; + assign scan_en_i_i = bus.scan_en_i; + assign bus.scan_rst_ni = (initiator_responder == INITIATOR) ? scan_rst_ni_o : 'bz; + assign scan_rst_ni_i = bus.scan_rst_ni; + assign bus.scanmode_i = (initiator_responder == INITIATOR) ? scanmode_i_o : 'bz; + assign scanmode_i_i = bus.scanmode_i; + + // Proxy handle to UVM driver + fuse_ctrl_in_if_pkg::fuse_ctrl_in_if_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_in_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_in_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_in_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_in_if_driver and fuse_ctrl_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_in_if_driver_bfm. + `fuse_ctrl_in_if_INITIATOR_STRUCT + fuse_ctrl_in_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_in_if_driver and fuse_ctrl_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_in_if_driver_bfm. + `fuse_ctrl_in_if_RESPONDER_STRUCT + fuse_ctrl_in_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + edn_i_o <= 'bz; + alert_rx_i_o <= 'bz; + obs_ctrl_i_o <= 'bz; + otp_ast_pwr_seq_h_i_o <= 'bz; + otp_ext_voltage_h_io_o <= 'bz; + scan_en_i_o <= 'bz; + scan_rst_ni_o <= 'bz; + scanmode_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_in_if_configuration_s fuse_ctrl_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_in_if_initiator_s fuse_ctrl_in_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_in_if_responder_s fuse_ctrl_in_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_in_if_initiator_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Members within the fuse_ctrl_in_if_responder_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + initiator_struct = fuse_ctrl_in_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // edn_i_o <= fuse_ctrl_in_if_initiator_struct.xyz; // [$bits(edn_pkg::edn_req_t)-1:0] + // alert_rx_i_o <= fuse_ctrl_in_if_initiator_struct.xyz; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // obs_ctrl_i_o <= fuse_ctrl_in_if_initiator_struct.xyz; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // otp_ast_pwr_seq_h_i_o <= fuse_ctrl_in_if_initiator_struct.xyz; // [$bits(otp_ast_req_t)-1:0] + // otp_ext_voltage_h_io_o <= fuse_ctrl_in_if_initiator_struct.xyz; // + // scan_en_i_o <= fuse_ctrl_in_if_initiator_struct.xyz; // + // scan_rst_ni_o <= fuse_ctrl_in_if_initiator_struct.xyz; // + // scanmode_i_o <= fuse_ctrl_in_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_in_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_in_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_in_if_initiator_s fuse_ctrl_in_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_in_if_responder_s fuse_ctrl_in_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_in_if_initiator_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Variables within the fuse_ctrl_in_if_responder_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_in_if_responder_struct.xyz = edn_i_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_in_if_responder_struct.xyz = alert_rx_i_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // fuse_ctrl_in_if_responder_struct.xyz = obs_ctrl_i_i; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // fuse_ctrl_in_if_responder_struct.xyz = otp_ast_pwr_seq_h_i_i; // [$bits(otp_ast_req_t)-1:0] + // fuse_ctrl_in_if_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // fuse_ctrl_in_if_responder_struct.xyz = scan_en_i_i; // + // fuse_ctrl_in_if_responder_struct.xyz = scan_rst_ni_i; // + // fuse_ctrl_in_if_responder_struct.xyz = scanmode_i_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_in_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_in_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_if.sv new file mode 100644 index 000000000..590cb0dfa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_if.sv @@ -0,0 +1,119 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_in_if interface signals. +// It is instantiated once per fuse_ctrl_in_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_in_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_in_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_in_if_bus.edn_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.alert_rx_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.obs_ctrl_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.otp_ast_pwr_seq_h_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.otp_ext_voltage_h_io), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.scan_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.scan_rst_ni), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.scanmode_i), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_if_pkg_hdl::*; + +interface fuse_ctrl_in_if_if #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i, + inout tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i, + inout tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i, + inout tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i, + inout tri otp_ext_voltage_h_io, + inout tri scan_en_i, + inout tri scan_rst_ni, + inout tri scanmode_i + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input edn_i, + input alert_rx_i, + input obs_ctrl_i, + input otp_ast_pwr_seq_h_i, + input otp_ext_voltage_h_io, + input scan_en_i, + input scan_rst_ni, + input scanmode_i + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output edn_i, + output alert_rx_i, + output obs_ctrl_i, + output otp_ast_pwr_seq_h_i, + output otp_ext_voltage_h_io, + output scan_en_i, + output scan_rst_ni, + output scanmode_i + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input edn_i, + input alert_rx_i, + input obs_ctrl_i, + input otp_ast_pwr_seq_h_i, + input otp_ext_voltage_h_io, + input scan_en_i, + input scan_rst_ni, + input scanmode_i + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_macros.svh new file mode 100644 index 000000000..1c4c94307 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_in_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_in_if_configuration class. +// + `define fuse_ctrl_in_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_in_if_configuration_s; + + `define fuse_ctrl_in_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_if_configuration_s to_struct();\ + fuse_ctrl_in_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_in_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_in_if_configuration_s fuse_ctrl_in_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_in_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_in_if_transaction class. +// + `define fuse_ctrl_in_if_MONITOR_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_if_monitor_s; + + `define fuse_ctrl_in_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_if_monitor_s to_monitor_struct();\ + fuse_ctrl_in_if_monitor_struct = \ + { \ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_in_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_in_if_monitor_s fuse_ctrl_in_if_monitor_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_in_if_INITIATOR_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_if_initiator_s; + + `define fuse_ctrl_in_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_if_initiator_s to_initiator_struct();\ + fuse_ctrl_in_if_initiator_struct = \ + {\ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_in_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_in_if_initiator_s fuse_ctrl_in_if_initiator_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_in_if_RESPONDER_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_if_responder_s; + + `define fuse_ctrl_in_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_if_responder_s to_responder_struct();\ + fuse_ctrl_in_if_responder_struct = \ + {\ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_if_responder_struct);\ + endfunction + + `define fuse_ctrl_in_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_in_if_responder_s fuse_ctrl_in_if_responder_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor.svh new file mode 100644 index 000000000..b58f2c631 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_in_if transactions observed by the +// fuse_ctrl_in_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_monitor #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_in_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_in_if_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_in_if_monitor #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_in_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_in_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_in_if_monitor_s fuse_ctrl_in_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_in_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor_bfm.sv new file mode 100644 index 000000000..96d9a80f5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor_bfm.sv @@ -0,0 +1,221 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_in_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_in_if monitor through a virtual +// interface handle in the fuse_ctrl_in_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_in_if_if. +// +// Input signals from the fuse_ctrl_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_in_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_in_if_macros.svh" + + +interface fuse_ctrl_in_if_monitor_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + ( fuse_ctrl_in_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_in_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_in_if_MONITOR_STRUCT + fuse_ctrl_in_if_monitor_s fuse_ctrl_in_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_in_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i_i; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_i; + tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_i; + tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_i; + tri otp_ext_voltage_h_io_i; + tri scan_en_i_i; + tri scan_rst_ni_i; + tri scanmode_i_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign edn_i_i = bus.edn_i; + assign alert_rx_i_i = bus.alert_rx_i; + assign obs_ctrl_i_i = bus.obs_ctrl_i; + assign otp_ast_pwr_seq_h_i_i = bus.otp_ast_pwr_seq_h_i; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + assign scan_en_i_i = bus.scan_en_i; + assign scan_rst_ni_i = bus.scan_rst_ni; + assign scanmode_i_i = bus.scanmode_i; + + // Proxy handle to UVM monitor + fuse_ctrl_in_if_pkg::fuse_ctrl_in_if_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_in_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_in_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_in_if_configuration_s fuse_ctrl_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_in_if_monitor_s fuse_ctrl_in_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_in_if_monitor_struct.set_alert_rx_i + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_in_if_monitor_struct.xyz = edn_i_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_in_if_monitor_struct.xyz = alert_rx_i_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // fuse_ctrl_in_if_monitor_struct.xyz = obs_ctrl_i_i; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // fuse_ctrl_in_if_monitor_struct.xyz = otp_ast_pwr_seq_h_i_i; // [$bits(otp_ast_req_t)-1:0] + // fuse_ctrl_in_if_monitor_struct.xyz = otp_ext_voltage_h_io_i; // + // fuse_ctrl_in_if_monitor_struct.xyz = scan_en_i_i; // + // fuse_ctrl_in_if_monitor_struct.xyz = scan_rst_ni_i; // + // fuse_ctrl_in_if_monitor_struct.xyz = scanmode_i_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_random_sequence.svh new file mode 100644 index 000000000..8982a5cb8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_in_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_in_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_random_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_in_if_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_in_if_random_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_in_if_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_in_if_random_sequence::body()-fuse_ctrl_in_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_in_if_driver_bfm via the sequencer and fuse_ctrl_in_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_in_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_responder_sequence.svh new file mode 100644 index 000000000..75ca72188 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_responder_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_in_if_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_in_if_responder_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_in_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_in_if_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_sequence_base.svh new file mode 100644 index 000000000..12b699748 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_sequence_base #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .RSP(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_in_if_sequence_base #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // variables + typedef fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_in_if_transaction_req_t; + fuse_ctrl_in_if_transaction_req_t req; + typedef fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_in_if_transaction_rsp_t; + fuse_ctrl_in_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_in_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_in_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction.svh new file mode 100644 index 000000000..106e016f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction.svh @@ -0,0 +1,219 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_in_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_transaction #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_in_if_transaction #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_in_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_in_if_monitor and fuse_ctrl_in_if_monitor_bfm + // This struct is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_MONITOR_STRUCT + fuse_ctrl_in_if_monitor_s fuse_ctrl_in_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_in_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_in_if_monitor_struct. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_in_if_driver and fuse_ctrl_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_INITIATOR_STRUCT + fuse_ctrl_in_if_initiator_s fuse_ctrl_in_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_in_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_in_if_initiator_struct. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_in_if_driver and fuse_ctrl_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_RESPONDER_STRUCT + fuse_ctrl_in_if_responder_s fuse_ctrl_in_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_in_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_in_if_responder_struct. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("set_alert_rx_i:0x%x ",set_alert_rx_i); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.set_alert_rx_i = RHS.set_alert_rx_i; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_in_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,set_alert_rx_i,"set_alert_rx_i"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction_coverage.svh new file mode 100644 index 000000000..27fa4a7bd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction_coverage.svh @@ -0,0 +1,102 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_in_if transaction information using +// a covergroup named fuse_ctrl_in_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_transaction_coverage #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_subscriber #(.T(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_in_if_transaction_coverage #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_in_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + set_alert_rx_i: coverpoint coverage_trans.set_alert_rx_i; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_in_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_in_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_in_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_in_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/yaml/fuse_ctrl_in_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/yaml/fuse_ctrl_in_if_interface.yaml new file mode 100644 index 000000000..2dac8368b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/yaml/fuse_ctrl_in_if_interface.yaml @@ -0,0 +1,68 @@ +uvmf: + interfaces: + fuse_ctrl_in_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AlertSyncOn + type: int + value: '3' + - name: RndConstLfrSeed + type: lfsr_seed_t + value: RndConstLfsrSeedDefault + - name: RndCnstLfsrPerm + type: lsfr_perm_t + value: RndCnstLfsrPermDefault + - name: MemInitFile + type: string + ports: + - dir: output + name: edn_i + reset_value: '''bz' + width: '[''$bits(edn_pkg::edn_req_t)'']' + - dir: output + name: alert_rx_i + reset_value: '''bz' + width: '[''NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)'']' + - dir: output + name: obs_ctrl_i + reset_value: '''bz' + width: '[''$bits(ast_pkg::ast_obs_ctrl_t)'']' + - dir: output + name: otp_ast_pwr_seq_h_i + reset_value: '''bz' + width: '[''$bits(otp_ast_req_t)'']' + - dir: output + name: otp_ext_voltage_h_io + reset_value: '''bz' + width: '1' + - dir: output + name: scan_en_i + reset_value: '''bz' + width: '1' + - dir: output + name: scan_rst_ni + reset_value: '''bz' + width: '1' + - dir: output + name: scanmode_i + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: set_alert_rx_i + type: caliptra_prim_alert_pkg::alert_rx_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/.project new file mode 100644 index 000000000..3038bf51b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/.svproject new file mode 100644 index 000000000..40fcc43fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/Makefile new file mode 100644 index 000000000..9fd3230c4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f + +fuse_ctrl_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f + +fuse_ctrl_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f + +COMP_fuse_ctrl_in_PKG_TGT_0 = q_comp_fuse_ctrl_in_pkg +COMP_fuse_ctrl_in_PKG_TGT_1 = v_comp_fuse_ctrl_in_pkg +COMP_fuse_ctrl_in_PKG_TGT = $(COMP_fuse_ctrl_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_in_pkg: $(COMP_fuse_ctrl_in_PKG_TGT) + +q_comp_fuse_ctrl_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_in_PKG_XRTL) + +v_comp_fuse_ctrl_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_in_pkg += -I$(fuse_ctrl_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_in_pkg += $(fuse_ctrl_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/compile.do new file mode 100644 index 000000000..26458397d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile new file mode 100644 index 000000000..ae6ef9dd8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_in_hvl.compile + - fuse_ctrl_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo new file mode 100644 index 000000000..cf88b7005 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_in_if.sv +src/fuse_ctrl_in_driver_bfm.sv +src/fuse_ctrl_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_common.compile new file mode 100644 index 000000000..82360a88a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f new file mode 100644 index 000000000..959aa9e78 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f new file mode 100644 index 000000000..e57e74b80 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f new file mode 100644 index 000000000..1e9819e09 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile new file mode 100644 index 000000000..da38bec57 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_in_if.sv + - src/fuse_ctrl_in_monitor_bfm.sv + - src/fuse_ctrl_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile new file mode 100644 index 000000000..210102ccf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_in_common.compile +incdir: + - . +src: + - fuse_ctrl_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv new file mode 100644 index 000000000..58df769b3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_in_macros.svh" + + export fuse_ctrl_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_in_typedefs.svh" + `include "src/fuse_ctrl_in_transaction.svh" + + `include "src/fuse_ctrl_in_configuration.svh" + `include "src/fuse_ctrl_in_driver.svh" + `include "src/fuse_ctrl_in_monitor.svh" + + `include "src/fuse_ctrl_in_transaction_coverage.svh" + `include "src/fuse_ctrl_in_sequence_base.svh" + `include "src/fuse_ctrl_in_random_sequence.svh" + + `include "src/fuse_ctrl_in_responder_sequence.svh" + `include "src/fuse_ctrl_in2reg_adapter.svh" + + `include "src/fuse_ctrl_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo new file mode 100644 index 000000000..164f1255c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv new file mode 100644 index 000000000..b13dcf77e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.vinfo new file mode 100644 index 000000000..79de2ad70 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F new file mode 100644 index 000000000..345b7e8cd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in2reg_adapter.svh new file mode 100644 index 000000000..a359e7f30 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in2reg_adapter #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_in2reg_adapter #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h = fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_agent.svh new file mode 100644 index 000000000..8f2300972 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_agent #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_in_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .DRIVER_T(fuse_ctrl_in_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_T(fuse_ctrl_in_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .COVERAGE_T(fuse_ctrl_in_transaction_coverage #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_in_agent #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_configuration.svh new file mode 100644 index 000000000..14af02688 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_configuration #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_in_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_in_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_in_configuration #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_CONFIGURATION_STRUCT + fuse_ctrl_in_configuration_s fuse_ctrl_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_in_configuration_struct. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_in_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_in_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", agent_path, interface_name, AlertSyncOn ,RndConstLfrSeed ,RndCnstLfsrPerm ,MemInitFile ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_in_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver.svh new file mode 100644 index 000000000..2817f179d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_driver #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_in_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_in_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .REQ(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .RSP(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_in_driver #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_in_driver_bfm. +`fuse_ctrl_in_INITIATOR_STRUCT + fuse_ctrl_in_initiator_s fuse_ctrl_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_in_driver_bfm. +`fuse_ctrl_in_RESPONDER_STRUCT + fuse_ctrl_in_responder_s fuse_ctrl_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver_bfm.sv new file mode 100644 index 000000000..e7e60a495 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver_bfm.sv @@ -0,0 +1,346 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_in signal driving. It is +// accessed by the uvm fuse_ctrl_in driver through a virtual interface +// handle in the fuse_ctrl_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_in_if. +// +// Input signals from the fuse_ctrl_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_pkg_hdl::*; +`include "src/fuse_ctrl_in_macros.svh" + +interface fuse_ctrl_in_driver_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + (fuse_ctrl_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i_i; + reg [$bits(edn_pkg::edn_req_t)-1:0] edn_i_o = 'bz; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_i; + reg [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_o = 'bz; + tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_i; + reg [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_o = 'bz; + tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_i; + reg [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_o = 'bz; + tri otp_ext_voltage_h_io_i; + reg otp_ext_voltage_h_io_o = 'bz; + tri scan_en_i_i; + reg scan_en_i_o = 'bz; + tri scan_rst_ni_i; + reg scan_rst_ni_o = 'bz; + tri scanmode_i_i; + reg scanmode_i_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.edn_i = (initiator_responder == INITIATOR) ? edn_i_o : 'bz; + assign edn_i_i = bus.edn_i; + assign bus.alert_rx_i = (initiator_responder == INITIATOR) ? alert_rx_i_o : 'bz; + assign alert_rx_i_i = bus.alert_rx_i; + assign bus.obs_ctrl_i = (initiator_responder == INITIATOR) ? obs_ctrl_i_o : 'bz; + assign obs_ctrl_i_i = bus.obs_ctrl_i; + assign bus.otp_ast_pwr_seq_h_i = (initiator_responder == INITIATOR) ? otp_ast_pwr_seq_h_i_o : 'bz; + assign otp_ast_pwr_seq_h_i_i = bus.otp_ast_pwr_seq_h_i; + assign bus.otp_ext_voltage_h_io = (initiator_responder == INITIATOR) ? otp_ext_voltage_h_io_o : 'bz; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + assign bus.scan_en_i = (initiator_responder == INITIATOR) ? scan_en_i_o : 'bz; + assign scan_en_i_i = bus.scan_en_i; + assign bus.scan_rst_ni = (initiator_responder == INITIATOR) ? scan_rst_ni_o : 'bz; + assign scan_rst_ni_i = bus.scan_rst_ni; + assign bus.scanmode_i = (initiator_responder == INITIATOR) ? scanmode_i_o : 'bz; + assign scanmode_i_i = bus.scanmode_i; + + // Proxy handle to UVM driver + fuse_ctrl_in_pkg::fuse_ctrl_in_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_in_driver_bfm. + `fuse_ctrl_in_INITIATOR_STRUCT + fuse_ctrl_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_in_driver_bfm. + `fuse_ctrl_in_RESPONDER_STRUCT + fuse_ctrl_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + edn_i_o <= 'bz; + alert_rx_i_o <= 'bz; + obs_ctrl_i_o <= 'bz; + otp_ast_pwr_seq_h_i_o <= 'bz; + otp_ext_voltage_h_io_o <= 'bz; + scan_en_i_o <= 'bz; + scan_rst_ni_o <= 'bz; + scanmode_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_in_configuration_s fuse_ctrl_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_in_initiator_s fuse_ctrl_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_in_responder_s fuse_ctrl_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_in_initiator_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Members within the fuse_ctrl_in_responder_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + initiator_struct = fuse_ctrl_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // edn_i_o <= fuse_ctrl_in_initiator_struct.xyz; // [$bits(edn_pkg::edn_req_t)-1:0] + // alert_rx_i_o <= fuse_ctrl_in_initiator_struct.xyz; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // obs_ctrl_i_o <= fuse_ctrl_in_initiator_struct.xyz; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // otp_ast_pwr_seq_h_i_o <= fuse_ctrl_in_initiator_struct.xyz; // [$bits(otp_ast_req_t)-1:0] + // otp_ext_voltage_h_io_o <= fuse_ctrl_in_initiator_struct.xyz; // + // scan_en_i_o <= fuse_ctrl_in_initiator_struct.xyz; // + // scan_rst_ni_o <= fuse_ctrl_in_initiator_struct.xyz; // + // scanmode_i_o <= fuse_ctrl_in_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_in_initiator_s fuse_ctrl_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_in_responder_s fuse_ctrl_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_in_initiator_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Variables within the fuse_ctrl_in_responder_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_in_responder_struct.xyz = edn_i_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_in_responder_struct.xyz = alert_rx_i_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // fuse_ctrl_in_responder_struct.xyz = obs_ctrl_i_i; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // fuse_ctrl_in_responder_struct.xyz = otp_ast_pwr_seq_h_i_i; // [$bits(otp_ast_req_t)-1:0] + // fuse_ctrl_in_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // fuse_ctrl_in_responder_struct.xyz = scan_en_i_i; // + // fuse_ctrl_in_responder_struct.xyz = scan_rst_ni_i; // + // fuse_ctrl_in_responder_struct.xyz = scanmode_i_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv new file mode 100644 index 000000000..ad21f9b9f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv @@ -0,0 +1,119 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_in interface signals. +// It is instantiated once per fuse_ctrl_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_in_bus.edn_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.alert_rx_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.obs_ctrl_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.otp_ast_pwr_seq_h_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.otp_ext_voltage_h_io), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.scan_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.scan_rst_ni), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.scanmode_i), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_pkg_hdl::*; + +interface fuse_ctrl_in_if #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i, + inout tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i, + inout tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i, + inout tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i, + inout tri otp_ext_voltage_h_io, + inout tri scan_en_i, + inout tri scan_rst_ni, + inout tri scanmode_i + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input edn_i, + input alert_rx_i, + input obs_ctrl_i, + input otp_ast_pwr_seq_h_i, + input otp_ext_voltage_h_io, + input scan_en_i, + input scan_rst_ni, + input scanmode_i + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output edn_i, + output alert_rx_i, + output obs_ctrl_i, + output otp_ast_pwr_seq_h_i, + output otp_ext_voltage_h_io, + output scan_en_i, + output scan_rst_ni, + output scanmode_i + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input edn_i, + input alert_rx_i, + input obs_ctrl_i, + input otp_ast_pwr_seq_h_i, + input otp_ext_voltage_h_io, + input scan_en_i, + input scan_rst_ni, + input scanmode_i + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_macros.svh new file mode 100644 index 000000000..cf85634de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_in_configuration class. +// + `define fuse_ctrl_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_in_configuration_s; + + `define fuse_ctrl_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_configuration_s to_struct();\ + fuse_ctrl_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_in_configuration_s fuse_ctrl_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_in_transaction class. +// + `define fuse_ctrl_in_MONITOR_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_monitor_s; + + `define fuse_ctrl_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_monitor_s to_monitor_struct();\ + fuse_ctrl_in_monitor_struct = \ + { \ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_in_monitor_s fuse_ctrl_in_monitor_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_in_INITIATOR_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_initiator_s; + + `define fuse_ctrl_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_initiator_s to_initiator_struct();\ + fuse_ctrl_in_initiator_struct = \ + {\ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_in_initiator_s fuse_ctrl_in_initiator_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_in_RESPONDER_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_responder_s; + + `define fuse_ctrl_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_responder_s to_responder_struct();\ + fuse_ctrl_in_responder_struct = \ + {\ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_responder_struct);\ + endfunction + + `define fuse_ctrl_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_in_responder_s fuse_ctrl_in_responder_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor.svh new file mode 100644 index 000000000..cf4d9fd27 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_in transactions observed by the +// fuse_ctrl_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_monitor #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_in_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_in_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_in_monitor #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_in_monitor_s fuse_ctrl_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor_bfm.sv new file mode 100644 index 000000000..4857b9f66 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor_bfm.sv @@ -0,0 +1,221 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_in monitor through a virtual +// interface handle in the fuse_ctrl_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_in_if. +// +// Input signals from the fuse_ctrl_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_pkg_hdl::*; +`include "src/fuse_ctrl_in_macros.svh" + + +interface fuse_ctrl_in_monitor_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + ( fuse_ctrl_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_in_MONITOR_STRUCT + fuse_ctrl_in_monitor_s fuse_ctrl_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i_i; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_i; + tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_i; + tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_i; + tri otp_ext_voltage_h_io_i; + tri scan_en_i_i; + tri scan_rst_ni_i; + tri scanmode_i_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign edn_i_i = bus.edn_i; + assign alert_rx_i_i = bus.alert_rx_i; + assign obs_ctrl_i_i = bus.obs_ctrl_i; + assign otp_ast_pwr_seq_h_i_i = bus.otp_ast_pwr_seq_h_i; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + assign scan_en_i_i = bus.scan_en_i; + assign scan_rst_ni_i = bus.scan_rst_ni; + assign scanmode_i_i = bus.scanmode_i; + + // Proxy handle to UVM monitor + fuse_ctrl_in_pkg::fuse_ctrl_in_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_in_configuration_s fuse_ctrl_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_in_monitor_s fuse_ctrl_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_in_monitor_struct.set_alert_rx_i + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_in_monitor_struct.xyz = edn_i_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_in_monitor_struct.xyz = alert_rx_i_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // fuse_ctrl_in_monitor_struct.xyz = obs_ctrl_i_i; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // fuse_ctrl_in_monitor_struct.xyz = otp_ast_pwr_seq_h_i_i; // [$bits(otp_ast_req_t)-1:0] + // fuse_ctrl_in_monitor_struct.xyz = otp_ext_voltage_h_io_i; // + // fuse_ctrl_in_monitor_struct.xyz = scan_en_i_i; // + // fuse_ctrl_in_monitor_struct.xyz = scan_rst_ni_i; // + // fuse_ctrl_in_monitor_struct.xyz = scanmode_i_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_random_sequence.svh new file mode 100644 index 000000000..66b5a5d4a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_random_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_in_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_in_random_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_in_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_in_random_sequence::body()-fuse_ctrl_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_in_driver_bfm via the sequencer and fuse_ctrl_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_responder_sequence.svh new file mode 100644 index 000000000..e4e42b6aa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_responder_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_in_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_in_responder_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_in_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_sequence_base.svh new file mode 100644 index 000000000..ce6a3b740 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_sequence_base #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .RSP(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_in_sequence_base #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // variables + typedef fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_in_transaction_req_t; + fuse_ctrl_in_transaction_req_t req; + typedef fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_in_transaction_rsp_t; + fuse_ctrl_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction.svh new file mode 100644 index 000000000..f8a7fc400 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction.svh @@ -0,0 +1,219 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_transaction #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_in_transaction #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_in_monitor and fuse_ctrl_in_monitor_bfm + // This struct is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_MONITOR_STRUCT + fuse_ctrl_in_monitor_s fuse_ctrl_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_in_monitor_struct. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_in_driver_bfm. + // This struct is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_INITIATOR_STRUCT + fuse_ctrl_in_initiator_s fuse_ctrl_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_in_initiator_struct. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_in_driver_bfm. + // This struct is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_RESPONDER_STRUCT + fuse_ctrl_in_responder_s fuse_ctrl_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_in_responder_struct. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("set_alert_rx_i:0x%x ",set_alert_rx_i); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.set_alert_rx_i = RHS.set_alert_rx_i; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,set_alert_rx_i,"set_alert_rx_i"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction_coverage.svh new file mode 100644 index 000000000..5da482565 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction_coverage.svh @@ -0,0 +1,102 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_in transaction information using +// a covergroup named fuse_ctrl_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_transaction_coverage #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_subscriber #(.T(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_in_transaction_coverage #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + set_alert_rx_i: coverpoint coverage_trans.set_alert_rx_i; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/yaml/fuse_ctrl_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/yaml/fuse_ctrl_in_interface.yaml new file mode 100644 index 000000000..e7be8c60b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_in_pkg/yaml/fuse_ctrl_in_interface.yaml @@ -0,0 +1,68 @@ +uvmf: + interfaces: + fuse_ctrl_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AlertSyncOn + type: int + value: '3' + - name: RndConstLfrSeed + type: lfsr_seed_t + value: RndConstLfsrSeedDefault + - name: RndCnstLfsrPerm + type: lsfr_perm_t + value: RndCnstLfsrPermDefault + - name: MemInitFile + type: string + ports: + - dir: output + name: edn_i + reset_value: '''bz' + width: '[''$bits(edn_pkg::edn_req_t)'']' + - dir: output + name: alert_rx_i + reset_value: '''bz' + width: '[''NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)'']' + - dir: output + name: obs_ctrl_i + reset_value: '''bz' + width: '[''$bits(ast_pkg::ast_obs_ctrl_t)'']' + - dir: output + name: otp_ast_pwr_seq_h_i + reset_value: '''bz' + width: '[''$bits(otp_ast_req_t)'']' + - dir: output + name: otp_ext_voltage_h_io + reset_value: '''bz' + width: '1' + - dir: output + name: scan_en_i + reset_value: '''bz' + width: '1' + - dir: output + name: scan_rst_ni + reset_value: '''bz' + width: '1' + - dir: output + name: scanmode_i + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: set_alert_rx_i + type: caliptra_prim_alert_pkg::alert_rx_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.project new file mode 100644 index 000000000..da8a90eb7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_lc_otp_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.svproject new file mode 100644 index 000000000..6dac2c36a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/Makefile new file mode 100644 index 000000000..1ce37d99e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_lc_otp_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_lc_otp_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f + +fuse_ctrl_lc_otp_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f + +fuse_ctrl_lc_otp_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f + +COMP_fuse_ctrl_lc_otp_if_PKG_TGT_0 = q_comp_fuse_ctrl_lc_otp_if_pkg +COMP_fuse_ctrl_lc_otp_if_PKG_TGT_1 = v_comp_fuse_ctrl_lc_otp_if_pkg +COMP_fuse_ctrl_lc_otp_if_PKG_TGT = $(COMP_fuse_ctrl_lc_otp_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_lc_otp_if_pkg: $(COMP_fuse_ctrl_lc_otp_if_PKG_TGT) + +q_comp_fuse_ctrl_lc_otp_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG_XRTL) + +v_comp_fuse_ctrl_lc_otp_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_lc_otp_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_lc_otp_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_lc_otp_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_if_pkg += -I$(fuse_ctrl_lc_otp_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_if_pkg += $(fuse_ctrl_lc_otp_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_lc_otp_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_lc_otp_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_lc_otp_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_lc_otp_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/compile.do new file mode 100644 index 000000000..5f222a54a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_lc_otp_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if.compile new file mode 100644 index 000000000..ecb1301fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_lc_otp_if_hvl.compile + - fuse_ctrl_lc_otp_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_bfm.vinfo new file mode 100644 index 000000000..4007fc103 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_lc_otp_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_lc_otp_if_if.sv +src/fuse_ctrl_lc_otp_if_driver_bfm.sv +src/fuse_ctrl_lc_otp_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_common.compile new file mode 100644 index 000000000..0a9110502 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_lc_otp_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f new file mode 100644 index 000000000..30a25f810 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f new file mode 100644 index 000000000..0807a17da --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f new file mode 100644 index 000000000..e39f0bb0c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hdl.compile new file mode 100644 index 000000000..6d534830c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_lc_otp_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_lc_otp_if_if.sv + - src/fuse_ctrl_lc_otp_if_monitor_bfm.sv + - src/fuse_ctrl_lc_otp_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hvl.compile new file mode 100644 index 000000000..208b3d517 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_lc_otp_if_common.compile +incdir: + - . +src: + - fuse_ctrl_lc_otp_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.sv new file mode 100644 index 000000000..6bf19e8ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_lc_otp_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_lc_otp_if_macros.svh" + + export fuse_ctrl_lc_otp_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_lc_otp_if_typedefs.svh" + `include "src/fuse_ctrl_lc_otp_if_transaction.svh" + + `include "src/fuse_ctrl_lc_otp_if_configuration.svh" + `include "src/fuse_ctrl_lc_otp_if_driver.svh" + `include "src/fuse_ctrl_lc_otp_if_monitor.svh" + + `include "src/fuse_ctrl_lc_otp_if_transaction_coverage.svh" + `include "src/fuse_ctrl_lc_otp_if_sequence_base.svh" + `include "src/fuse_ctrl_lc_otp_if_random_sequence.svh" + + `include "src/fuse_ctrl_lc_otp_if_responder_sequence.svh" + `include "src/fuse_ctrl_lc_otp_if2reg_adapter.svh" + + `include "src/fuse_ctrl_lc_otp_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.vinfo new file mode 100644 index 000000000..f712ae9b4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_lc_otp_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_lc_otp_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.sv new file mode 100644 index 000000000..a4cdc7c70 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_lc_otp_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.vinfo new file mode 100644 index 000000000..a99ea0171 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_lc_otp_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_sve.F new file mode 100644 index 000000000..950466b92 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if2reg_adapter.svh new file mode 100644 index 000000000..e9b1a7897 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_lc_otp_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_lc_otp_if2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_lc_otp_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_lc_otp_if_transaction trans_h = fuse_ctrl_lc_otp_if_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_lc_otp_if_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_lc_otp_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_agent.svh new file mode 100644 index 000000000..bc148927a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_lc_otp_if_configuration ), + .DRIVER_T(fuse_ctrl_lc_otp_if_driver ), + .MONITOR_T(fuse_ctrl_lc_otp_if_monitor ), + .COVERAGE_T(fuse_ctrl_lc_otp_if_transaction_coverage ), + .TRANS_T(fuse_ctrl_lc_otp_if_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_lc_otp_if_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_configuration.svh new file mode 100644 index 000000000..92685e229 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_lc_otp_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_lc_otp_if_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_lc_otp_if_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_lc_otp_if_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_lc_otp_if_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_lc_otp_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_CONFIGURATION_STRUCT + fuse_ctrl_lc_otp_if_configuration_s fuse_ctrl_lc_otp_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_lc_otp_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_if_configuration_struct. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_lc_otp_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_lc_otp_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_lc_otp_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_lc_otp_if_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_lc_otp_if_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_lc_otp_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_lc_otp_if_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver.svh new file mode 100644 index 000000000..d96c73f4f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_lc_otp_if_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_if_driver_bfm ), + .REQ(fuse_ctrl_lc_otp_if_transaction ), + .RSP(fuse_ctrl_lc_otp_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_if_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_lc_otp_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_lc_otp_if_driver_bfm. +`fuse_ctrl_lc_otp_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_if_initiator_s fuse_ctrl_lc_otp_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_lc_otp_if_driver_bfm. +`fuse_ctrl_lc_otp_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_if_responder_s fuse_ctrl_lc_otp_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_lc_otp_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_lc_otp_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_lc_otp_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_lc_otp_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver_bfm.sv new file mode 100644 index 000000000..5675f3b6c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver_bfm.sv @@ -0,0 +1,321 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_lc_otp_if signal driving. It is +// accessed by the uvm fuse_ctrl_lc_otp_if driver through a virtual interface +// handle in the fuse_ctrl_lc_otp_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_lc_otp_if_if. +// +// Input signals from the fuse_ctrl_lc_otp_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_lc_otp_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_if_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_if_macros.svh" + +interface fuse_ctrl_lc_otp_if_driver_bfm + (fuse_ctrl_lc_otp_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_i; + reg [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_o = 'bz; + tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_i; + reg [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.lc_otp_vendor_test_i = (initiator_responder == INITIATOR) ? lc_otp_vendor_test_i_o : 'bz; + assign lc_otp_vendor_test_i_i = bus.lc_otp_vendor_test_i; + assign bus.lc_otp_program_i = (initiator_responder == INITIATOR) ? lc_otp_program_i_o : 'bz; + assign lc_otp_program_i_i = bus.lc_otp_program_i; + assign bus.lc_dft_en_i = (initiator_responder == INITIATOR) ? lc_dft_en_i_o : 'bz; + assign lc_dft_en_i_i = bus.lc_dft_en_i; + assign bus.lc_escalate_en_i = (initiator_responder == INITIATOR) ? lc_escalate_en_i_o : 'bz; + assign lc_escalate_en_i_i = bus.lc_escalate_en_i; + assign bus.lc_check_byp_en_i = (initiator_responder == INITIATOR) ? lc_check_byp_en_i_o : 'bz; + assign lc_check_byp_en_i_i = bus.lc_check_byp_en_i; + + // Proxy handle to UVM driver + fuse_ctrl_lc_otp_if_pkg::fuse_ctrl_lc_otp_if_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_lc_otp_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_lc_otp_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_lc_otp_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_if_driver_bfm. + `fuse_ctrl_lc_otp_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_if_driver_bfm. + `fuse_ctrl_lc_otp_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + lc_otp_vendor_test_i_o <= 'bz; + lc_otp_program_i_o <= 'bz; + lc_dft_en_i_o <= 'bz; + lc_escalate_en_i_o <= 'bz; + lc_check_byp_en_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_lc_otp_if_configuration_s fuse_ctrl_lc_otp_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_lc_otp_if_initiator_s fuse_ctrl_lc_otp_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_lc_otp_if_responder_s fuse_ctrl_lc_otp_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_lc_otp_if_initiator_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Members within the fuse_ctrl_lc_otp_if_responder_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + initiator_struct = fuse_ctrl_lc_otp_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // lc_otp_vendor_test_i_o <= fuse_ctrl_lc_otp_if_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // lc_otp_program_i_o <= fuse_ctrl_lc_otp_if_initiator_struct.xyz; // [$bits(lc_otp_program_req_t)-1:0] + // lc_dft_en_i_o <= fuse_ctrl_lc_otp_if_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // lc_escalate_en_i_o <= fuse_ctrl_lc_otp_if_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // lc_check_byp_en_i_o <= fuse_ctrl_lc_otp_if_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_lc_otp_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_lc_otp_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_lc_otp_if_initiator_s fuse_ctrl_lc_otp_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_lc_otp_if_responder_s fuse_ctrl_lc_otp_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_lc_otp_if_initiator_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Variables within the fuse_ctrl_lc_otp_if_responder_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_lc_otp_if_responder_struct.xyz = lc_otp_vendor_test_i_i; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // fuse_ctrl_lc_otp_if_responder_struct.xyz = lc_otp_program_i_i; // [$bits(lc_otp_program_req_t)-1:0] + // fuse_ctrl_lc_otp_if_responder_struct.xyz = lc_dft_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_if_responder_struct.xyz = lc_escalate_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_if_responder_struct.xyz = lc_check_byp_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_lc_otp_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_lc_otp_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_if.sv new file mode 100644 index 000000000..523ae029b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_if.sv @@ -0,0 +1,98 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_lc_otp_if interface signals. +// It is instantiated once per fuse_ctrl_lc_otp_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_lc_otp_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_lc_otp_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_lc_otp_if_bus.lc_otp_vendor_test_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_if_bus.lc_otp_program_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_if_bus.lc_dft_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_if_bus.lc_escalate_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_if_bus.lc_check_byp_en_i), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_if_pkg_hdl::*; + +interface fuse_ctrl_lc_otp_if_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i, + inout tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_i, + input lc_otp_program_i, + input lc_dft_en_i, + input lc_escalate_en_i, + input lc_check_byp_en_i + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output lc_otp_vendor_test_i, + output lc_otp_program_i, + output lc_dft_en_i, + output lc_escalate_en_i, + output lc_check_byp_en_i + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_i, + input lc_otp_program_i, + input lc_dft_en_i, + input lc_escalate_en_i, + input lc_check_byp_en_i + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_macros.svh new file mode 100644 index 000000000..98f551beb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_macros.svh @@ -0,0 +1,153 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_lc_otp_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_lc_otp_if_configuration class. +// + `define fuse_ctrl_lc_otp_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_lc_otp_if_configuration_s; + + `define fuse_ctrl_lc_otp_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_if_configuration_s to_struct();\ + fuse_ctrl_lc_otp_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_lc_otp_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_lc_otp_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_lc_otp_if_configuration_s fuse_ctrl_lc_otp_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_lc_otp_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_lc_otp_if_transaction class. +// + `define fuse_ctrl_lc_otp_if_MONITOR_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_if_monitor_s; + + `define fuse_ctrl_lc_otp_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_if_monitor_s to_monitor_struct();\ + fuse_ctrl_lc_otp_if_monitor_struct = \ + { \ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_lc_otp_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_lc_otp_if_monitor_s fuse_ctrl_lc_otp_if_monitor_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_lc_otp_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_if_INITIATOR_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_if_initiator_s; + + `define fuse_ctrl_lc_otp_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_if_initiator_s to_initiator_struct();\ + fuse_ctrl_lc_otp_if_initiator_struct = \ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_lc_otp_if_initiator_s fuse_ctrl_lc_otp_if_initiator_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_lc_otp_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_if_RESPONDER_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_if_responder_s; + + `define fuse_ctrl_lc_otp_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_if_responder_s to_responder_struct();\ + fuse_ctrl_lc_otp_if_responder_struct = \ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_if_responder_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_lc_otp_if_responder_s fuse_ctrl_lc_otp_if_responder_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor.svh new file mode 100644 index 000000000..cbf67060e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_lc_otp_if transactions observed by the +// fuse_ctrl_lc_otp_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_lc_otp_if_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_if_monitor_bfm ), + .TRANS_T(fuse_ctrl_lc_otp_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_if_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_lc_otp_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_lc_otp_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_lc_otp_if_monitor_s fuse_ctrl_lc_otp_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_lc_otp_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor_bfm.sv new file mode 100644 index 000000000..8ac6ebeac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor_bfm.sv @@ -0,0 +1,202 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_lc_otp_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_lc_otp_if monitor through a virtual +// interface handle in the fuse_ctrl_lc_otp_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_lc_otp_if_if. +// +// Input signals from the fuse_ctrl_lc_otp_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_lc_otp_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_if_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_if_macros.svh" + + +interface fuse_ctrl_lc_otp_if_monitor_bfm + ( fuse_ctrl_lc_otp_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_lc_otp_if_MONITOR_STRUCT + fuse_ctrl_lc_otp_if_monitor_s fuse_ctrl_lc_otp_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_lc_otp_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_i; + tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign lc_otp_vendor_test_i_i = bus.lc_otp_vendor_test_i; + assign lc_otp_program_i_i = bus.lc_otp_program_i; + assign lc_dft_en_i_i = bus.lc_dft_en_i; + assign lc_escalate_en_i_i = bus.lc_escalate_en_i; + assign lc_check_byp_en_i_i = bus.lc_check_byp_en_i; + + // Proxy handle to UVM monitor + fuse_ctrl_lc_otp_if_pkg::fuse_ctrl_lc_otp_if_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_lc_otp_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_lc_otp_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_lc_otp_if_configuration_s fuse_ctrl_lc_otp_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_lc_otp_if_monitor_s fuse_ctrl_lc_otp_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_lc_otp_if_monitor_struct.lc_dft_en_i + // // fuse_ctrl_lc_otp_if_monitor_struct.lc_escalate_en_i + // // fuse_ctrl_lc_otp_if_monitor_struct.lc_check_byp_en_i + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_lc_otp_if_monitor_struct.xyz = lc_otp_vendor_test_i_i; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // fuse_ctrl_lc_otp_if_monitor_struct.xyz = lc_otp_program_i_i; // [$bits(lc_otp_program_req_t)-1:0] + // fuse_ctrl_lc_otp_if_monitor_struct.xyz = lc_dft_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_if_monitor_struct.xyz = lc_escalate_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_if_monitor_struct.xyz = lc_check_byp_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_random_sequence.svh new file mode 100644 index 000000000..0fce942fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_lc_otp_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_lc_otp_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_random_sequence + extends fuse_ctrl_lc_otp_if_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_if_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_lc_otp_if_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_lc_otp_if_random_sequence::body()-fuse_ctrl_lc_otp_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_lc_otp_if_driver_bfm via the sequencer and fuse_ctrl_lc_otp_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_lc_otp_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_responder_sequence.svh new file mode 100644 index 000000000..8636e02b0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_responder_sequence + extends fuse_ctrl_lc_otp_if_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_if_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_lc_otp_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_lc_otp_if_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_sequence_base.svh new file mode 100644 index 000000000..3be42a152 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_lc_otp_if_transaction ), + .RSP(fuse_ctrl_lc_otp_if_transaction )); + + `uvm_object_utils( fuse_ctrl_lc_otp_if_sequence_base ) + + // variables + typedef fuse_ctrl_lc_otp_if_transaction fuse_ctrl_lc_otp_if_transaction_req_t; + fuse_ctrl_lc_otp_if_transaction_req_t req; + typedef fuse_ctrl_lc_otp_if_transaction fuse_ctrl_lc_otp_if_transaction_rsp_t; + fuse_ctrl_lc_otp_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_lc_otp_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_lc_otp_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction.svh new file mode 100644 index 000000000..695d6b043 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction.svh @@ -0,0 +1,201 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_lc_otp_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_lc_otp_if_transaction ) + + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_lc_otp_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_lc_otp_if_monitor and fuse_ctrl_lc_otp_if_monitor_bfm + // This struct is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_MONITOR_STRUCT + fuse_ctrl_lc_otp_if_monitor_s fuse_ctrl_lc_otp_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_if_monitor_struct. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_if_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_if_initiator_s fuse_ctrl_lc_otp_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_if_initiator_struct. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_if_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_if_responder_s fuse_ctrl_lc_otp_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_if_responder_struct. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("lc_dft_en_i:0x%x lc_escalate_en_i:0x%x lc_check_byp_en_i:0x%x ",lc_dft_en_i,lc_escalate_en_i,lc_check_byp_en_i); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_lc_otp_if_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_lc_otp_if_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.lc_dft_en_i = RHS.lc_dft_en_i; + this.lc_escalate_en_i = RHS.lc_escalate_en_i; + this.lc_check_byp_en_i = RHS.lc_check_byp_en_i; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_lc_otp_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,lc_dft_en_i,"lc_dft_en_i"); + $add_attribute(transaction_view_h,lc_escalate_en_i,"lc_escalate_en_i"); + $add_attribute(transaction_view_h,lc_check_byp_en_i,"lc_check_byp_en_i"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction_coverage.svh new file mode 100644 index 000000000..d0cfad043 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction_coverage.svh @@ -0,0 +1,86 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_lc_otp_if transaction information using +// a covergroup named fuse_ctrl_lc_otp_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_lc_otp_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_if_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_lc_otp_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + lc_dft_en_i: coverpoint coverage_trans.lc_dft_en_i; + lc_escalate_en_i: coverpoint coverage_trans.lc_escalate_en_i; + lc_check_byp_en_i: coverpoint coverage_trans.lc_check_byp_en_i; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_lc_otp_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_lc_otp_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_lc_otp_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/yaml/fuse_ctrl_lc_otp_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/yaml/fuse_ctrl_lc_otp_if_interface.yaml new file mode 100644 index 000000000..d24f3aef1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/yaml/fuse_ctrl_lc_otp_if_interface.yaml @@ -0,0 +1,57 @@ +uvmf: + interfaces: + fuse_ctrl_lc_otp_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: output + name: lc_otp_vendor_test_i + reset_value: '''bz' + width: '[''$bits(lc_otp_vendor_test_req_t)'']' + - dir: output + name: lc_otp_program_i + reset_value: '''bz' + width: '[''$bits(lc_otp_program_req_t)'']' + - dir: output + name: lc_dft_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + - dir: output + name: lc_escalate_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + - dir: output + name: lc_check_byp_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_dft_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_escalate_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_check_byp_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.project new file mode 100644 index 000000000..a51915b99 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.svproject new file mode 100644 index 000000000..cc08a42fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/Makefile new file mode 100644 index 000000000..e454f5811 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f + +fuse_ctrl_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f + +fuse_ctrl_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_xrtl.f + +COMP_fuse_ctrl_out_if_PKG_TGT_0 = q_comp_fuse_ctrl_out_if_pkg +COMP_fuse_ctrl_out_if_PKG_TGT_1 = v_comp_fuse_ctrl_out_if_pkg +COMP_fuse_ctrl_out_if_PKG_TGT = $(COMP_fuse_ctrl_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_out_if_pkg: $(COMP_fuse_ctrl_out_if_PKG_TGT) + +q_comp_fuse_ctrl_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_out_if_PKG_XRTL) + +v_comp_fuse_ctrl_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_out_if_pkg += -I$(fuse_ctrl_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_out_if_pkg += $(fuse_ctrl_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_out_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/compile.do new file mode 100644 index 000000000..a96c13af2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if.compile new file mode 100644 index 000000000..dd4689f64 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_out_if_hvl.compile + - fuse_ctrl_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_bfm.vinfo new file mode 100644 index 000000000..6288a8874 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_out_if_if.sv +src/fuse_ctrl_out_if_driver_bfm.sv +src/fuse_ctrl_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_common.compile new file mode 100644 index 000000000..c7726ee65 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f new file mode 100644 index 000000000..4355e25d9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f new file mode 100644 index 000000000..13bb387c5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_xrtl.f new file mode 100644 index 000000000..0e7ea6718 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hdl.compile new file mode 100644 index 000000000..676003b6c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_out_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_out_if_if.sv + - src/fuse_ctrl_out_if_monitor_bfm.sv + - src/fuse_ctrl_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hvl.compile new file mode 100644 index 000000000..9d8526a89 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_out_if_common.compile +incdir: + - . +src: + - fuse_ctrl_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.sv new file mode 100644 index 000000000..534d87ccd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_out_if_macros.svh" + + export fuse_ctrl_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_out_if_typedefs.svh" + `include "src/fuse_ctrl_out_if_transaction.svh" + + `include "src/fuse_ctrl_out_if_configuration.svh" + `include "src/fuse_ctrl_out_if_driver.svh" + `include "src/fuse_ctrl_out_if_monitor.svh" + + `include "src/fuse_ctrl_out_if_transaction_coverage.svh" + `include "src/fuse_ctrl_out_if_sequence_base.svh" + `include "src/fuse_ctrl_out_if_random_sequence.svh" + + `include "src/fuse_ctrl_out_if_responder_sequence.svh" + `include "src/fuse_ctrl_out_if2reg_adapter.svh" + + `include "src/fuse_ctrl_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.vinfo new file mode 100644 index 000000000..0daa42ac2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.sv new file mode 100644 index 000000000..80d7ad79d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_out_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..fcc4ab02f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_sve.F new file mode 100644 index 000000000..a4f0dfc42 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if2reg_adapter.svh new file mode 100644 index 000000000..fd141b5fe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if2reg_adapter #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_out_if2reg_adapter #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h = fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_agent.svh new file mode 100644 index 000000000..2fb6d2a15 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_agent #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_out_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .DRIVER_T(fuse_ctrl_out_if_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_T(fuse_ctrl_out_if_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .COVERAGE_T(fuse_ctrl_out_if_transaction_coverage #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_out_if_agent #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_configuration.svh new file mode 100644 index 000000000..401f3ac74 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_configuration #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_out_if_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_out_if_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_out_if_configuration #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_CONFIGURATION_STRUCT + fuse_ctrl_out_if_configuration_s fuse_ctrl_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_out_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_out_if_configuration_struct. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_out_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_out_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_out_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", agent_path, interface_name, AlertSyncOn ,RndConstLfrSeed ,RndCnstLfsrPerm ,MemInitFile ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_out_if_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver.svh new file mode 100644 index 000000000..03f256f92 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_driver #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_out_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_out_if_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .REQ(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .RSP(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_out_if_driver #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_out_if_driver and fuse_ctrl_out_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_out_if_driver_bfm. +`fuse_ctrl_out_if_INITIATOR_STRUCT + fuse_ctrl_out_if_initiator_s fuse_ctrl_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_out_if_driver and fuse_ctrl_out_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_out_if_driver_bfm. +`fuse_ctrl_out_if_RESPONDER_STRUCT + fuse_ctrl_out_if_responder_s fuse_ctrl_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver_bfm.sv new file mode 100644 index 000000000..cf027f627 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver_bfm.sv @@ -0,0 +1,394 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_out_if signal driving. It is +// accessed by the uvm fuse_ctrl_out_if driver through a virtual interface +// handle in the fuse_ctrl_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_out_if_if. +// +// Input signals from the fuse_ctrl_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_out_if_macros.svh" + +interface fuse_ctrl_out_if_driver_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + (fuse_ctrl_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o_i; + reg [$bits(edn_pkg::edn_req_t)-1:0] edn_o_o = 'bz; + tri intr_otp_operation_done_o_i; + reg intr_otp_operation_done_o_o = 'bz; + tri intr_otp_error_o_i; + reg intr_otp_error_o_o = 'bz; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_i; + reg [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_o = 'bz; + tri [7:0] otp_obs_o_i; + reg [7:0] otp_obs_o_o = 'bz; + tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_i; + reg [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_o = 'bz; + tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_i; + reg [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_o = 'bz; + tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_i; + reg [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_o = 'bz; + tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_i; + reg [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_o = 'bz; + tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_i; + reg [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_o = 'bz; + tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_i; + reg [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_o = 'bz; + tri [OtpTestVectWidth-1:0] cio_test_o_i; + reg [OtpTestVectWidth-1:0] cio_test_o_o = 'bz; + tri [OtpTestVectWidth-1:0] cio_test_en_o_i; + reg [OtpTestVectWidth-1:0] cio_test_en_o_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + tri otp_ext_voltage_h_io_i; + reg otp_ext_voltage_h_io_o = 'bz; + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign edn_o_i = bus.edn_o; + assign bus.edn_o = (initiator_responder == RESPONDER) ? edn_o_o : 'bz; + assign intr_otp_operation_done_o_i = bus.intr_otp_operation_done_o; + assign bus.intr_otp_operation_done_o = (initiator_responder == RESPONDER) ? intr_otp_operation_done_o_o : 'bz; + assign intr_otp_error_o_i = bus.intr_otp_error_o; + assign bus.intr_otp_error_o = (initiator_responder == RESPONDER) ? intr_otp_error_o_o : 'bz; + assign alert_tx_o_i = bus.alert_tx_o; + assign bus.alert_tx_o = (initiator_responder == RESPONDER) ? alert_tx_o_o : 'bz; + assign otp_obs_o_i = bus.otp_obs_o; + assign bus.otp_obs_o = (initiator_responder == RESPONDER) ? otp_obs_o_o : 'bz; + assign otp_ast_pwr_seq_o_i = bus.otp_ast_pwr_seq_o; + assign bus.otp_ast_pwr_seq_o = (initiator_responder == RESPONDER) ? otp_ast_pwr_seq_o_o : 'bz; + assign pwr_otp_o_i = bus.pwr_otp_o; + assign bus.pwr_otp_o = (initiator_responder == RESPONDER) ? pwr_otp_o_o : 'bz; + assign lc_otp_vendor_test_o_i = bus.lc_otp_vendor_test_o; + assign bus.lc_otp_vendor_test_o = (initiator_responder == RESPONDER) ? lc_otp_vendor_test_o_o : 'bz; + assign lc_otp_program_o_i = bus.lc_otp_program_o; + assign bus.lc_otp_program_o = (initiator_responder == RESPONDER) ? lc_otp_program_o_o : 'bz; + assign otp_lc_data_o_i = bus.otp_lc_data_o; + assign bus.otp_lc_data_o = (initiator_responder == RESPONDER) ? otp_lc_data_o_o : 'bz; + assign otp_broadcast_o_i = bus.otp_broadcast_o; + assign bus.otp_broadcast_o = (initiator_responder == RESPONDER) ? otp_broadcast_o_o : 'bz; + assign cio_test_o_i = bus.cio_test_o; + assign bus.cio_test_o = (initiator_responder == RESPONDER) ? cio_test_o_o : 'bz; + assign cio_test_en_o_i = bus.cio_test_en_o; + assign bus.cio_test_en_o = (initiator_responder == RESPONDER) ? cio_test_en_o_o : 'bz; + + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.otp_ext_voltage_h_io = otp_ext_voltage_h_io_o; + + // Proxy handle to UVM driver + fuse_ctrl_out_if_pkg::fuse_ctrl_out_if_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_out_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_out_if_driver and fuse_ctrl_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_out_if_driver_bfm. + `fuse_ctrl_out_if_INITIATOR_STRUCT + fuse_ctrl_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_out_if_driver and fuse_ctrl_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_out_if_driver_bfm. + `fuse_ctrl_out_if_RESPONDER_STRUCT + fuse_ctrl_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + edn_o_o <= 'bz; + intr_otp_operation_done_o_o <= 'bz; + intr_otp_error_o_o <= 'bz; + alert_tx_o_o <= 'bz; + otp_obs_o_o <= 'bz; + otp_ast_pwr_seq_o_o <= 'bz; + pwr_otp_o_o <= 'bz; + lc_otp_vendor_test_o_o <= 'bz; + lc_otp_program_o_o <= 'bz; + otp_lc_data_o_o <= 'bz; + otp_broadcast_o_o <= 'bz; + cio_test_o_o <= 'bz; + cio_test_en_o_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + otp_ext_voltage_h_io_o <= 'bz; + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_out_if_configuration_s fuse_ctrl_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_out_if_initiator_s fuse_ctrl_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_out_if_responder_s fuse_ctrl_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_out_if_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Members within the fuse_ctrl_out_if_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + initiator_struct = fuse_ctrl_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_out_if_responder_struct.xyz = edn_o_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = intr_otp_operation_done_o_i; // + // fuse_ctrl_out_if_responder_struct.xyz = intr_otp_error_o_i; // + // fuse_ctrl_out_if_responder_struct.xyz = alert_tx_o_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = otp_obs_o_i; // [7:0] + // fuse_ctrl_out_if_responder_struct.xyz = otp_ast_pwr_seq_o_i; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = pwr_otp_o_i; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = lc_otp_vendor_test_o_i; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = lc_otp_program_o_i; // [$bits(lc_otp_program_rsp_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = otp_lc_data_o_i; // [$bits(otp_lc_data_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = otp_broadcast_o_i; // [$bits(otp_broadcast_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = cio_test_o_i; // [OtpTestVectWidth-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = cio_test_en_o_i; // [OtpTestVectWidth-1:0] + // Initiator inout signals + // fuse_ctrl_out_if_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_out_if_initiator_struct.xyz; // + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_out_if_initiator_s fuse_ctrl_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_out_if_responder_s fuse_ctrl_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_out_if_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Variables within the fuse_ctrl_out_if_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // fuse_ctrl_out_if_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // edn_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(edn_pkg::edn_req_t)-1:0] + // intr_otp_operation_done_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // + // intr_otp_error_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // + // alert_tx_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // otp_obs_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [7:0] + // otp_ast_pwr_seq_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // pwr_otp_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // lc_otp_vendor_test_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // lc_otp_program_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(lc_otp_program_rsp_t)-1:0] + // otp_lc_data_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(otp_lc_data_t)-1:0] + // otp_broadcast_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(otp_broadcast_t)-1:0] + // cio_test_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [OtpTestVectWidth-1:0] + // cio_test_en_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [OtpTestVectWidth-1:0] + // Responder inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_out_if_initiator_struct.xyz; // + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_if.sv new file mode 100644 index 000000000..e2e71c190 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_if.sv @@ -0,0 +1,149 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_out_if interface signals. +// It is instantiated once per fuse_ctrl_out_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_out_if_bus.edn_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.intr_otp_operation_done_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.intr_otp_error_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.alert_tx_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.otp_obs_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.otp_ast_pwr_seq_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.pwr_otp_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.lc_otp_vendor_test_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.lc_otp_program_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.otp_lc_data_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.otp_broadcast_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.otp_ext_voltage_h_io), // Agent inout +// .dut_signal_port(fuse_ctrl_out_if_bus.cio_test_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.cio_test_en_o), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_if_pkg_hdl::*; + +interface fuse_ctrl_out_if_if #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o, + inout tri intr_otp_operation_done_o, + inout tri intr_otp_error_o, + inout tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o, + inout tri [7:0] otp_obs_o, + inout tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o, + inout tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o, + inout tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o, + inout tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o, + inout tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o, + inout tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o, + inout tri otp_ext_voltage_h_io, + inout tri [OtpTestVectWidth-1:0] cio_test_o, + inout tri [OtpTestVectWidth-1:0] cio_test_en_o + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input edn_o, + input intr_otp_operation_done_o, + input intr_otp_error_o, + input alert_tx_o, + input otp_obs_o, + input otp_ast_pwr_seq_o, + input pwr_otp_o, + input lc_otp_vendor_test_o, + input lc_otp_program_o, + input otp_lc_data_o, + input otp_broadcast_o, + input otp_ext_voltage_h_io, + input cio_test_o, + input cio_test_en_o + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input edn_o, + input intr_otp_operation_done_o, + input intr_otp_error_o, + input alert_tx_o, + input otp_obs_o, + input otp_ast_pwr_seq_o, + input pwr_otp_o, + input lc_otp_vendor_test_o, + input lc_otp_program_o, + input otp_lc_data_o, + input otp_broadcast_o, + inout otp_ext_voltage_h_io, + input cio_test_o, + input cio_test_en_o + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output edn_o, + output intr_otp_operation_done_o, + output intr_otp_error_o, + output alert_tx_o, + output otp_obs_o, + output otp_ast_pwr_seq_o, + output pwr_otp_o, + output lc_otp_vendor_test_o, + output lc_otp_program_o, + output otp_lc_data_o, + output otp_broadcast_o, + inout otp_ext_voltage_h_io, + output cio_test_o, + output cio_test_en_o + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_macros.svh new file mode 100644 index 000000000..1410436cc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_macros.svh @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_out_if_configuration class. +// + `define fuse_ctrl_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_out_if_configuration_s; + + `define fuse_ctrl_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_if_configuration_s to_struct();\ + fuse_ctrl_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_out_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_out_if_configuration_s fuse_ctrl_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_out_if_transaction class. +// + `define fuse_ctrl_out_if_MONITOR_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_if_monitor_s; + + `define fuse_ctrl_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_if_monitor_s to_monitor_struct();\ + fuse_ctrl_out_if_monitor_struct = \ + { \ + this.otp_lc_data_o , \ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_out_if_monitor_s fuse_ctrl_out_if_monitor_struct);\ + {\ + this.otp_lc_data_o , \ + this.pwr_otp_o \ + } = fuse_ctrl_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_out_if_INITIATOR_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_if_initiator_s; + + `define fuse_ctrl_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_if_initiator_s to_initiator_struct();\ + fuse_ctrl_out_if_initiator_struct = \ + {\ + this.otp_lc_data_o , \ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_out_if_initiator_s fuse_ctrl_out_if_initiator_struct);\ + {\ + this.otp_lc_data_o , \ + this.pwr_otp_o \ + } = fuse_ctrl_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_out_if_RESPONDER_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_if_responder_s; + + `define fuse_ctrl_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_if_responder_s to_responder_struct();\ + fuse_ctrl_out_if_responder_struct = \ + {\ + this.otp_lc_data_o , \ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_if_responder_struct);\ + endfunction + + `define fuse_ctrl_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_out_if_responder_s fuse_ctrl_out_if_responder_struct);\ + {\ + this.otp_lc_data_o , \ + this.pwr_otp_o \ + } = fuse_ctrl_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor.svh new file mode 100644 index 000000000..5aba5c809 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_out_if transactions observed by the +// fuse_ctrl_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_monitor #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_out_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_out_if_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_out_if_monitor #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_out_if_monitor_s fuse_ctrl_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor_bfm.sv new file mode 100644 index 000000000..8207dd60e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor_bfm.sv @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_out_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_out_if monitor through a virtual +// interface handle in the fuse_ctrl_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_out_if_if. +// +// Input signals from the fuse_ctrl_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_out_if_macros.svh" + + +interface fuse_ctrl_out_if_monitor_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + ( fuse_ctrl_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_out_if_MONITOR_STRUCT + fuse_ctrl_out_if_monitor_s fuse_ctrl_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o_i; + tri intr_otp_operation_done_o_i; + tri intr_otp_error_o_i; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_i; + tri [7:0] otp_obs_o_i; + tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_i; + tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_i; + tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_i; + tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_i; + tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_i; + tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_i; + tri otp_ext_voltage_h_io_i; + tri [OtpTestVectWidth-1:0] cio_test_o_i; + tri [OtpTestVectWidth-1:0] cio_test_en_o_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign edn_o_i = bus.edn_o; + assign intr_otp_operation_done_o_i = bus.intr_otp_operation_done_o; + assign intr_otp_error_o_i = bus.intr_otp_error_o; + assign alert_tx_o_i = bus.alert_tx_o; + assign otp_obs_o_i = bus.otp_obs_o; + assign otp_ast_pwr_seq_o_i = bus.otp_ast_pwr_seq_o; + assign pwr_otp_o_i = bus.pwr_otp_o; + assign lc_otp_vendor_test_o_i = bus.lc_otp_vendor_test_o; + assign lc_otp_program_o_i = bus.lc_otp_program_o; + assign otp_lc_data_o_i = bus.otp_lc_data_o; + assign otp_broadcast_o_i = bus.otp_broadcast_o; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + assign cio_test_o_i = bus.cio_test_o; + assign cio_test_en_o_i = bus.cio_test_en_o; + + // Proxy handle to UVM monitor + fuse_ctrl_out_if_pkg::fuse_ctrl_out_if_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_out_if_configuration_s fuse_ctrl_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_out_if_monitor_s fuse_ctrl_out_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_out_if_monitor_struct.otp_lc_data_o + // // fuse_ctrl_out_if_monitor_struct.pwr_otp_o + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_out_if_monitor_struct.xyz = edn_o_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = intr_otp_operation_done_o_i; // + // fuse_ctrl_out_if_monitor_struct.xyz = intr_otp_error_o_i; // + // fuse_ctrl_out_if_monitor_struct.xyz = alert_tx_o_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = otp_obs_o_i; // [7:0] + // fuse_ctrl_out_if_monitor_struct.xyz = otp_ast_pwr_seq_o_i; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = pwr_otp_o_i; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = lc_otp_vendor_test_o_i; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = lc_otp_program_o_i; // [$bits(lc_otp_program_rsp_t)-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = otp_lc_data_o_i; // [$bits(otp_lc_data_t)-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = otp_broadcast_o_i; // [$bits(otp_broadcast_t)-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = otp_ext_voltage_h_io_i; // + // fuse_ctrl_out_if_monitor_struct.xyz = cio_test_o_i; // [OtpTestVectWidth-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = cio_test_en_o_i; // [OtpTestVectWidth-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_random_sequence.svh new file mode 100644 index 000000000..6aacd46f1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_random_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_out_if_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_out_if_random_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_out_if_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_out_if_random_sequence::body()-fuse_ctrl_out_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_out_if_driver_bfm via the sequencer and fuse_ctrl_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_responder_sequence.svh new file mode 100644 index 000000000..b82d116c6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_responder_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_out_if_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_out_if_responder_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_out_if_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_sequence_base.svh new file mode 100644 index 000000000..475fcbfc5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_sequence_base #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .RSP(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_out_if_sequence_base #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // variables + typedef fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_out_if_transaction_req_t; + fuse_ctrl_out_if_transaction_req_t req; + typedef fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_out_if_transaction_rsp_t; + fuse_ctrl_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction.svh new file mode 100644 index 000000000..8ebbb5b8d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction.svh @@ -0,0 +1,224 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_transaction #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_out_if_transaction #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + otp_lc_data_t otp_lc_data_o ; + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_out_if_monitor and fuse_ctrl_out_if_monitor_bfm + // This struct is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_MONITOR_STRUCT + fuse_ctrl_out_if_monitor_s fuse_ctrl_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_out_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_out_if_monitor_struct. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_out_if_driver and fuse_ctrl_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_INITIATOR_STRUCT + fuse_ctrl_out_if_initiator_s fuse_ctrl_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_out_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_out_if_initiator_struct. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_out_if_driver and fuse_ctrl_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_RESPONDER_STRUCT + fuse_ctrl_out_if_responder_s fuse_ctrl_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_out_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_out_if_responder_struct. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("otp_lc_data_o:0x%x pwr_otp_o:0x%x ",otp_lc_data_o,pwr_otp_o); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.otp_lc_data_o == RHS.otp_lc_data_o) + &&(this.pwr_otp_o == RHS.pwr_otp_o) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.otp_lc_data_o = RHS.otp_lc_data_o; + this.pwr_otp_o = RHS.pwr_otp_o; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,otp_lc_data_o,"otp_lc_data_o"); + $add_attribute(transaction_view_h,pwr_otp_o,"pwr_otp_o"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction_coverage.svh new file mode 100644 index 000000000..4c40b9333 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction_coverage.svh @@ -0,0 +1,103 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_out_if transaction information using +// a covergroup named fuse_ctrl_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_transaction_coverage #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_subscriber #(.T(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_out_if_transaction_coverage #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + otp_lc_data_o: coverpoint coverage_trans.otp_lc_data_o; + pwr_otp_o: coverpoint coverage_trans.pwr_otp_o; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_out_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/yaml/fuse_ctrl_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/yaml/fuse_ctrl_out_if_interface.yaml new file mode 100644 index 000000000..43605ee4e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/yaml/fuse_ctrl_out_if_interface.yaml @@ -0,0 +1,98 @@ +uvmf: + interfaces: + fuse_ctrl_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AlertSyncOn + type: int + value: '3' + - name: RndConstLfrSeed + type: lfsr_seed_t + value: RndConstLfsrSeedDefault + - name: RndCnstLfsrPerm + type: lsfr_perm_t + value: RndCnstLfsrPermDefault + - name: MemInitFile + type: string + ports: + - dir: input + name: edn_o + reset_value: '''bz' + width: '[''$bits(edn_pkg::edn_req_t)'']' + - dir: input + name: intr_otp_operation_done_o + reset_value: '''bz' + width: '1' + - dir: input + name: intr_otp_error_o + reset_value: '''bz' + width: '1' + - dir: input + name: alert_tx_o + reset_value: '''bz' + width: '[''NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)'']' + - dir: input + name: otp_obs_o + reset_value: '''bz' + width: '8' + - dir: input + name: otp_ast_pwr_seq_o + reset_value: '''bz' + width: '[''$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)'']' + - dir: input + name: pwr_otp_o + reset_value: '''bz' + width: '[''$bits(pwrmgr_pkg::pwr_otp_rsp_t)'']' + - dir: input + name: lc_otp_vendor_test_o + reset_value: '''bz' + width: '[''$bits(lc_otp_vendor_test_rsp_t)'']' + - dir: input + name: lc_otp_program_o + reset_value: '''bz' + width: '[''$bits(lc_otp_program_rsp_t)'']' + - dir: input + name: otp_lc_data_o + reset_value: '''bz' + width: '[''$bits(otp_lc_data_t)'']' + - dir: input + name: otp_broadcast_o + reset_value: '''bz' + width: '[''$bits(otp_broadcast_t)'']' + - dir: inout + name: otp_ext_voltage_h_io + reset_value: '''bz' + width: '1' + - dir: input + name: cio_test_o + reset_value: '''bz' + width: '[''OtpTestVectWidth'']' + - dir: input + name: cio_test_en_o + reset_value: '''bz' + width: '[''OtpTestVectWidth'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: otp_lc_data_o + type: otp_lc_data_t + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: pwr_otp_o + type: pwrmgr_pkg::pwr_otp_rsp_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/.project new file mode 100644 index 000000000..c96dcb429 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/.svproject new file mode 100644 index 000000000..64d224ae5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/Makefile new file mode 100644 index 000000000..b5ee9df5a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f + +fuse_ctrl_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f + +fuse_ctrl_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f + +COMP_fuse_ctrl_out_PKG_TGT_0 = q_comp_fuse_ctrl_out_pkg +COMP_fuse_ctrl_out_PKG_TGT_1 = v_comp_fuse_ctrl_out_pkg +COMP_fuse_ctrl_out_PKG_TGT = $(COMP_fuse_ctrl_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_out_pkg: $(COMP_fuse_ctrl_out_PKG_TGT) + +q_comp_fuse_ctrl_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_out_PKG_XRTL) + +v_comp_fuse_ctrl_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_out_pkg += -I$(fuse_ctrl_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_out_pkg += $(fuse_ctrl_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/compile.do new file mode 100644 index 000000000..5fdaafcd1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile new file mode 100644 index 000000000..3ac4b243e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_out_hvl.compile + - fuse_ctrl_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo new file mode 100644 index 000000000..b4ea5985b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_out_if.sv +src/fuse_ctrl_out_driver_bfm.sv +src/fuse_ctrl_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_common.compile new file mode 100644 index 000000000..1193b2509 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f new file mode 100644 index 000000000..5be27730e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f new file mode 100644 index 000000000..fc769adb0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f new file mode 100644 index 000000000..4a7b8cc2b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hdl.compile new file mode 100644 index 000000000..2745ad2a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_out_if.sv + - src/fuse_ctrl_out_monitor_bfm.sv + - src/fuse_ctrl_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hvl.compile new file mode 100644 index 000000000..5562a204a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_out_common.compile +incdir: + - . +src: + - fuse_ctrl_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv new file mode 100644 index 000000000..afb8df957 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_out_macros.svh" + + export fuse_ctrl_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_out_typedefs.svh" + `include "src/fuse_ctrl_out_transaction.svh" + + `include "src/fuse_ctrl_out_configuration.svh" + `include "src/fuse_ctrl_out_driver.svh" + `include "src/fuse_ctrl_out_monitor.svh" + + `include "src/fuse_ctrl_out_transaction_coverage.svh" + `include "src/fuse_ctrl_out_sequence_base.svh" + `include "src/fuse_ctrl_out_random_sequence.svh" + + `include "src/fuse_ctrl_out_responder_sequence.svh" + `include "src/fuse_ctrl_out2reg_adapter.svh" + + `include "src/fuse_ctrl_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo new file mode 100644 index 000000000..4f08c9ef3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.sv new file mode 100644 index 000000000..f90777afe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.vinfo new file mode 100644 index 000000000..c55df62d8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F new file mode 100644 index 000000000..94ccd9b8b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out2reg_adapter.svh new file mode 100644 index 000000000..c13afeb59 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out2reg_adapter #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_out2reg_adapter #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h = fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_agent.svh new file mode 100644 index 000000000..64fcd3c17 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_agent #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_out_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .DRIVER_T(fuse_ctrl_out_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_T(fuse_ctrl_out_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .COVERAGE_T(fuse_ctrl_out_transaction_coverage #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_out_agent #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_configuration.svh new file mode 100644 index 000000000..52338d1e5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_configuration #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_out_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_out_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_out_configuration #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_CONFIGURATION_STRUCT + fuse_ctrl_out_configuration_s fuse_ctrl_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_out_configuration_struct. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_out_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_out_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", agent_path, interface_name, AlertSyncOn ,RndConstLfrSeed ,RndCnstLfsrPerm ,MemInitFile ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_out_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver.svh new file mode 100644 index 000000000..ec2f7b4ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_driver #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_out_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_out_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .REQ(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .RSP(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_out_driver #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_out_driver_bfm. +`fuse_ctrl_out_INITIATOR_STRUCT + fuse_ctrl_out_initiator_s fuse_ctrl_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_out_driver_bfm. +`fuse_ctrl_out_RESPONDER_STRUCT + fuse_ctrl_out_responder_s fuse_ctrl_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver_bfm.sv new file mode 100644 index 000000000..95bd96316 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver_bfm.sv @@ -0,0 +1,394 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_out signal driving. It is +// accessed by the uvm fuse_ctrl_out driver through a virtual interface +// handle in the fuse_ctrl_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_out_if. +// +// Input signals from the fuse_ctrl_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_pkg_hdl::*; +`include "src/fuse_ctrl_out_macros.svh" + +interface fuse_ctrl_out_driver_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + (fuse_ctrl_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o_i; + reg [$bits(edn_pkg::edn_req_t)-1:0] edn_o_o = 'bz; + tri intr_otp_operation_done_o_i; + reg intr_otp_operation_done_o_o = 'bz; + tri intr_otp_error_o_i; + reg intr_otp_error_o_o = 'bz; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_i; + reg [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_o = 'bz; + tri [7:0] otp_obs_o_i; + reg [7:0] otp_obs_o_o = 'bz; + tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_i; + reg [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_o = 'bz; + tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_i; + reg [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_o = 'bz; + tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_i; + reg [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_o = 'bz; + tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_i; + reg [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_o = 'bz; + tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_i; + reg [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_o = 'bz; + tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_i; + reg [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_o = 'bz; + tri [OtpTestVectWidth-1:0] cio_test_o_i; + reg [OtpTestVectWidth-1:0] cio_test_o_o = 'bz; + tri [OtpTestVectWidth-1:0] cio_test_en_o_i; + reg [OtpTestVectWidth-1:0] cio_test_en_o_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + tri otp_ext_voltage_h_io_i; + reg otp_ext_voltage_h_io_o = 'bz; + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign edn_o_i = bus.edn_o; + assign bus.edn_o = (initiator_responder == RESPONDER) ? edn_o_o : 'bz; + assign intr_otp_operation_done_o_i = bus.intr_otp_operation_done_o; + assign bus.intr_otp_operation_done_o = (initiator_responder == RESPONDER) ? intr_otp_operation_done_o_o : 'bz; + assign intr_otp_error_o_i = bus.intr_otp_error_o; + assign bus.intr_otp_error_o = (initiator_responder == RESPONDER) ? intr_otp_error_o_o : 'bz; + assign alert_tx_o_i = bus.alert_tx_o; + assign bus.alert_tx_o = (initiator_responder == RESPONDER) ? alert_tx_o_o : 'bz; + assign otp_obs_o_i = bus.otp_obs_o; + assign bus.otp_obs_o = (initiator_responder == RESPONDER) ? otp_obs_o_o : 'bz; + assign otp_ast_pwr_seq_o_i = bus.otp_ast_pwr_seq_o; + assign bus.otp_ast_pwr_seq_o = (initiator_responder == RESPONDER) ? otp_ast_pwr_seq_o_o : 'bz; + assign pwr_otp_o_i = bus.pwr_otp_o; + assign bus.pwr_otp_o = (initiator_responder == RESPONDER) ? pwr_otp_o_o : 'bz; + assign lc_otp_vendor_test_o_i = bus.lc_otp_vendor_test_o; + assign bus.lc_otp_vendor_test_o = (initiator_responder == RESPONDER) ? lc_otp_vendor_test_o_o : 'bz; + assign lc_otp_program_o_i = bus.lc_otp_program_o; + assign bus.lc_otp_program_o = (initiator_responder == RESPONDER) ? lc_otp_program_o_o : 'bz; + assign otp_lc_data_o_i = bus.otp_lc_data_o; + assign bus.otp_lc_data_o = (initiator_responder == RESPONDER) ? otp_lc_data_o_o : 'bz; + assign otp_broadcast_o_i = bus.otp_broadcast_o; + assign bus.otp_broadcast_o = (initiator_responder == RESPONDER) ? otp_broadcast_o_o : 'bz; + assign cio_test_o_i = bus.cio_test_o; + assign bus.cio_test_o = (initiator_responder == RESPONDER) ? cio_test_o_o : 'bz; + assign cio_test_en_o_i = bus.cio_test_en_o; + assign bus.cio_test_en_o = (initiator_responder == RESPONDER) ? cio_test_en_o_o : 'bz; + + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.otp_ext_voltage_h_io = otp_ext_voltage_h_io_o; + + // Proxy handle to UVM driver + fuse_ctrl_out_pkg::fuse_ctrl_out_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_out_driver_bfm. + `fuse_ctrl_out_INITIATOR_STRUCT + fuse_ctrl_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_out_driver_bfm. + `fuse_ctrl_out_RESPONDER_STRUCT + fuse_ctrl_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + edn_o_o <= 'bz; + intr_otp_operation_done_o_o <= 'bz; + intr_otp_error_o_o <= 'bz; + alert_tx_o_o <= 'bz; + otp_obs_o_o <= 'bz; + otp_ast_pwr_seq_o_o <= 'bz; + pwr_otp_o_o <= 'bz; + lc_otp_vendor_test_o_o <= 'bz; + lc_otp_program_o_o <= 'bz; + otp_lc_data_o_o <= 'bz; + otp_broadcast_o_o <= 'bz; + cio_test_o_o <= 'bz; + cio_test_en_o_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + otp_ext_voltage_h_io_o <= 'bz; + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_out_configuration_s fuse_ctrl_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_out_initiator_s fuse_ctrl_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_out_responder_s fuse_ctrl_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_out_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Members within the fuse_ctrl_out_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + initiator_struct = fuse_ctrl_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_out_responder_struct.xyz = edn_o_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = intr_otp_operation_done_o_i; // + // fuse_ctrl_out_responder_struct.xyz = intr_otp_error_o_i; // + // fuse_ctrl_out_responder_struct.xyz = alert_tx_o_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = otp_obs_o_i; // [7:0] + // fuse_ctrl_out_responder_struct.xyz = otp_ast_pwr_seq_o_i; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = pwr_otp_o_i; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = lc_otp_vendor_test_o_i; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = lc_otp_program_o_i; // [$bits(lc_otp_program_rsp_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = otp_lc_data_o_i; // [$bits(otp_lc_data_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = otp_broadcast_o_i; // [$bits(otp_broadcast_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = cio_test_o_i; // [OtpTestVectWidth-1:0] + // fuse_ctrl_out_responder_struct.xyz = cio_test_en_o_i; // [OtpTestVectWidth-1:0] + // Initiator inout signals + // fuse_ctrl_out_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_out_initiator_struct.xyz; // + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_out_initiator_s fuse_ctrl_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_out_responder_s fuse_ctrl_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_out_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Variables within the fuse_ctrl_out_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // fuse_ctrl_out_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // edn_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(edn_pkg::edn_req_t)-1:0] + // intr_otp_operation_done_o_o <= fuse_ctrl_out_initiator_struct.xyz; // + // intr_otp_error_o_o <= fuse_ctrl_out_initiator_struct.xyz; // + // alert_tx_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // otp_obs_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [7:0] + // otp_ast_pwr_seq_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // pwr_otp_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // lc_otp_vendor_test_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // lc_otp_program_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(lc_otp_program_rsp_t)-1:0] + // otp_lc_data_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(otp_lc_data_t)-1:0] + // otp_broadcast_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(otp_broadcast_t)-1:0] + // cio_test_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [OtpTestVectWidth-1:0] + // cio_test_en_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [OtpTestVectWidth-1:0] + // Responder inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_out_initiator_struct.xyz; // + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv new file mode 100644 index 000000000..8425da82c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv @@ -0,0 +1,149 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_out interface signals. +// It is instantiated once per fuse_ctrl_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_out_bus.edn_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.intr_otp_operation_done_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.intr_otp_error_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.alert_tx_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.otp_obs_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.otp_ast_pwr_seq_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.pwr_otp_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.lc_otp_vendor_test_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.lc_otp_program_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.otp_lc_data_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.otp_broadcast_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.otp_ext_voltage_h_io), // Agent inout +// .dut_signal_port(fuse_ctrl_out_bus.cio_test_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.cio_test_en_o), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_pkg_hdl::*; + +interface fuse_ctrl_out_if #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o, + inout tri intr_otp_operation_done_o, + inout tri intr_otp_error_o, + inout tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o, + inout tri [7:0] otp_obs_o, + inout tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o, + inout tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o, + inout tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o, + inout tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o, + inout tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o, + inout tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o, + inout tri otp_ext_voltage_h_io, + inout tri [OtpTestVectWidth-1:0] cio_test_o, + inout tri [OtpTestVectWidth-1:0] cio_test_en_o + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input edn_o, + input intr_otp_operation_done_o, + input intr_otp_error_o, + input alert_tx_o, + input otp_obs_o, + input otp_ast_pwr_seq_o, + input pwr_otp_o, + input lc_otp_vendor_test_o, + input lc_otp_program_o, + input otp_lc_data_o, + input otp_broadcast_o, + input otp_ext_voltage_h_io, + input cio_test_o, + input cio_test_en_o + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input edn_o, + input intr_otp_operation_done_o, + input intr_otp_error_o, + input alert_tx_o, + input otp_obs_o, + input otp_ast_pwr_seq_o, + input pwr_otp_o, + input lc_otp_vendor_test_o, + input lc_otp_program_o, + input otp_lc_data_o, + input otp_broadcast_o, + inout otp_ext_voltage_h_io, + input cio_test_o, + input cio_test_en_o + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output edn_o, + output intr_otp_operation_done_o, + output intr_otp_error_o, + output alert_tx_o, + output otp_obs_o, + output otp_ast_pwr_seq_o, + output pwr_otp_o, + output lc_otp_vendor_test_o, + output lc_otp_program_o, + output otp_lc_data_o, + output otp_broadcast_o, + inout otp_ext_voltage_h_io, + output cio_test_o, + output cio_test_en_o + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_macros.svh new file mode 100644 index 000000000..ee0b9ef48 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_macros.svh @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_out_configuration class. +// + `define fuse_ctrl_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_out_configuration_s; + + `define fuse_ctrl_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_configuration_s to_struct();\ + fuse_ctrl_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_out_configuration_s fuse_ctrl_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_out_transaction class. +// + `define fuse_ctrl_out_MONITOR_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_monitor_s; + + `define fuse_ctrl_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_monitor_s to_monitor_struct();\ + fuse_ctrl_out_monitor_struct = \ + { \ + this.otp_lc_data_o , \ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_out_monitor_s fuse_ctrl_out_monitor_struct);\ + {\ + this.otp_lc_data_o , \ + this.pwr_otp_o \ + } = fuse_ctrl_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_out_INITIATOR_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_initiator_s; + + `define fuse_ctrl_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_initiator_s to_initiator_struct();\ + fuse_ctrl_out_initiator_struct = \ + {\ + this.otp_lc_data_o , \ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_out_initiator_s fuse_ctrl_out_initiator_struct);\ + {\ + this.otp_lc_data_o , \ + this.pwr_otp_o \ + } = fuse_ctrl_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_out_RESPONDER_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_responder_s; + + `define fuse_ctrl_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_responder_s to_responder_struct();\ + fuse_ctrl_out_responder_struct = \ + {\ + this.otp_lc_data_o , \ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_responder_struct);\ + endfunction + + `define fuse_ctrl_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_out_responder_s fuse_ctrl_out_responder_struct);\ + {\ + this.otp_lc_data_o , \ + this.pwr_otp_o \ + } = fuse_ctrl_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor.svh new file mode 100644 index 000000000..9f967f63b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_out transactions observed by the +// fuse_ctrl_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_monitor #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_out_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_out_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_out_monitor #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_out_monitor_s fuse_ctrl_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor_bfm.sv new file mode 100644 index 000000000..ff16a1311 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor_bfm.sv @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_out monitor through a virtual +// interface handle in the fuse_ctrl_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_out_if. +// +// Input signals from the fuse_ctrl_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_pkg_hdl::*; +`include "src/fuse_ctrl_out_macros.svh" + + +interface fuse_ctrl_out_monitor_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + ( fuse_ctrl_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_out_MONITOR_STRUCT + fuse_ctrl_out_monitor_s fuse_ctrl_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o_i; + tri intr_otp_operation_done_o_i; + tri intr_otp_error_o_i; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_i; + tri [7:0] otp_obs_o_i; + tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_i; + tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_i; + tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_i; + tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_i; + tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_i; + tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_i; + tri otp_ext_voltage_h_io_i; + tri [OtpTestVectWidth-1:0] cio_test_o_i; + tri [OtpTestVectWidth-1:0] cio_test_en_o_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign edn_o_i = bus.edn_o; + assign intr_otp_operation_done_o_i = bus.intr_otp_operation_done_o; + assign intr_otp_error_o_i = bus.intr_otp_error_o; + assign alert_tx_o_i = bus.alert_tx_o; + assign otp_obs_o_i = bus.otp_obs_o; + assign otp_ast_pwr_seq_o_i = bus.otp_ast_pwr_seq_o; + assign pwr_otp_o_i = bus.pwr_otp_o; + assign lc_otp_vendor_test_o_i = bus.lc_otp_vendor_test_o; + assign lc_otp_program_o_i = bus.lc_otp_program_o; + assign otp_lc_data_o_i = bus.otp_lc_data_o; + assign otp_broadcast_o_i = bus.otp_broadcast_o; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + assign cio_test_o_i = bus.cio_test_o; + assign cio_test_en_o_i = bus.cio_test_en_o; + + // Proxy handle to UVM monitor + fuse_ctrl_out_pkg::fuse_ctrl_out_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_out_configuration_s fuse_ctrl_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_out_monitor_s fuse_ctrl_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_out_monitor_struct.otp_lc_data_o + // // fuse_ctrl_out_monitor_struct.pwr_otp_o + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_out_monitor_struct.xyz = edn_o_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = intr_otp_operation_done_o_i; // + // fuse_ctrl_out_monitor_struct.xyz = intr_otp_error_o_i; // + // fuse_ctrl_out_monitor_struct.xyz = alert_tx_o_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = otp_obs_o_i; // [7:0] + // fuse_ctrl_out_monitor_struct.xyz = otp_ast_pwr_seq_o_i; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = pwr_otp_o_i; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = lc_otp_vendor_test_o_i; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = lc_otp_program_o_i; // [$bits(lc_otp_program_rsp_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = otp_lc_data_o_i; // [$bits(otp_lc_data_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = otp_broadcast_o_i; // [$bits(otp_broadcast_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = otp_ext_voltage_h_io_i; // + // fuse_ctrl_out_monitor_struct.xyz = cio_test_o_i; // [OtpTestVectWidth-1:0] + // fuse_ctrl_out_monitor_struct.xyz = cio_test_en_o_i; // [OtpTestVectWidth-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_random_sequence.svh new file mode 100644 index 000000000..fa517894b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_random_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_out_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_out_random_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_out_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_out_random_sequence::body()-fuse_ctrl_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_out_driver_bfm via the sequencer and fuse_ctrl_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_responder_sequence.svh new file mode 100644 index 000000000..2dfe53b5d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_responder_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_out_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_out_responder_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_out_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_sequence_base.svh new file mode 100644 index 000000000..d115821b5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_sequence_base #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .RSP(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_out_sequence_base #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // variables + typedef fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_out_transaction_req_t; + fuse_ctrl_out_transaction_req_t req; + typedef fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_out_transaction_rsp_t; + fuse_ctrl_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction.svh new file mode 100644 index 000000000..2326cb59b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction.svh @@ -0,0 +1,224 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_transaction #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_out_transaction #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + otp_lc_data_t otp_lc_data_o ; + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_out_monitor and fuse_ctrl_out_monitor_bfm + // This struct is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_MONITOR_STRUCT + fuse_ctrl_out_monitor_s fuse_ctrl_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_out_monitor_struct. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_out_driver_bfm. + // This struct is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_INITIATOR_STRUCT + fuse_ctrl_out_initiator_s fuse_ctrl_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_out_initiator_struct. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_out_driver_bfm. + // This struct is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_RESPONDER_STRUCT + fuse_ctrl_out_responder_s fuse_ctrl_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_out_responder_struct. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("otp_lc_data_o:0x%x pwr_otp_o:0x%x ",otp_lc_data_o,pwr_otp_o); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.otp_lc_data_o == RHS.otp_lc_data_o) + &&(this.pwr_otp_o == RHS.pwr_otp_o) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.otp_lc_data_o = RHS.otp_lc_data_o; + this.pwr_otp_o = RHS.pwr_otp_o; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,otp_lc_data_o,"otp_lc_data_o"); + $add_attribute(transaction_view_h,pwr_otp_o,"pwr_otp_o"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction_coverage.svh new file mode 100644 index 000000000..2233f6d7e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction_coverage.svh @@ -0,0 +1,103 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_out transaction information using +// a covergroup named fuse_ctrl_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_transaction_coverage #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_subscriber #(.T(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_out_transaction_coverage #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + otp_lc_data_o: coverpoint coverage_trans.otp_lc_data_o; + pwr_otp_o: coverpoint coverage_trans.pwr_otp_o; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/yaml/fuse_ctrl_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/yaml/fuse_ctrl_out_interface.yaml new file mode 100644 index 000000000..0b1df0b61 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_out_pkg/yaml/fuse_ctrl_out_interface.yaml @@ -0,0 +1,98 @@ +uvmf: + interfaces: + fuse_ctrl_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AlertSyncOn + type: int + value: '3' + - name: RndConstLfrSeed + type: lfsr_seed_t + value: RndConstLfsrSeedDefault + - name: RndCnstLfsrPerm + type: lsfr_perm_t + value: RndCnstLfsrPermDefault + - name: MemInitFile + type: string + ports: + - dir: input + name: edn_o + reset_value: '''bz' + width: '[''$bits(edn_pkg::edn_req_t)'']' + - dir: input + name: intr_otp_operation_done_o + reset_value: '''bz' + width: '1' + - dir: input + name: intr_otp_error_o + reset_value: '''bz' + width: '1' + - dir: input + name: alert_tx_o + reset_value: '''bz' + width: '[''NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)'']' + - dir: input + name: otp_obs_o + reset_value: '''bz' + width: '8' + - dir: input + name: otp_ast_pwr_seq_o + reset_value: '''bz' + width: '[''$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)'']' + - dir: input + name: pwr_otp_o + reset_value: '''bz' + width: '[''$bits(pwrmgr_pkg::pwr_otp_rsp_t)'']' + - dir: input + name: lc_otp_vendor_test_o + reset_value: '''bz' + width: '[''$bits(lc_otp_vendor_test_rsp_t)'']' + - dir: input + name: lc_otp_program_o + reset_value: '''bz' + width: '[''$bits(lc_otp_program_rsp_t)'']' + - dir: input + name: otp_lc_data_o + reset_value: '''bz' + width: '[''$bits(otp_lc_data_t)'']' + - dir: input + name: otp_broadcast_o + reset_value: '''bz' + width: '[''$bits(otp_broadcast_t)'']' + - dir: inout + name: otp_ext_voltage_h_io + reset_value: '''bz' + width: '1' + - dir: input + name: cio_test_o + reset_value: '''bz' + width: '[''OtpTestVectWidth'']' + - dir: input + name: cio_test_en_o + reset_value: '''bz' + width: '[''OtpTestVectWidth'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: otp_lc_data_o + type: otp_lc_data_t + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: pwr_otp_o + type: pwrmgr_pkg::pwr_otp_rsp_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.project new file mode 100644 index 000000000..931d0548e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..e6e385ac0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..7ce58a365 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f + +fuse_ctrl_prim_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f + +fuse_ctrl_prim_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_read_if_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_read_if_pkg +COMP_fuse_ctrl_prim_axi_read_if_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_read_if_pkg +COMP_fuse_ctrl_prim_axi_read_if_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_read_if_pkg: $(COMP_fuse_ctrl_prim_axi_read_if_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_read_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_read_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_if_pkg += -I$(fuse_ctrl_prim_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_if_pkg += $(fuse_ctrl_prim_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..5a8d38b1e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if.compile new file mode 100644 index 000000000..ce142767a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_read_if_hvl.compile + - fuse_ctrl_prim_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..5ecca257f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_read_if_if.sv +src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv +src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_common.compile new file mode 100644 index 000000000..f7bbff4b6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..3be99c24b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..f66b0809e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..0f9b2fdb7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hdl.compile new file mode 100644 index 000000000..4cb1da005 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_read_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_read_if_if.sv + - src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hvl.compile new file mode 100644 index 000000000..bd9e9530a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_read_if_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.sv new file mode 100644 index 000000000..39a398f84 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_read_if_macros.svh" + + export fuse_ctrl_prim_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_read_if_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_read_if_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_read_if_configuration.svh" + `include "src/fuse_ctrl_prim_axi_read_if_driver.svh" + `include "src/fuse_ctrl_prim_axi_read_if_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_read_if_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_read_if_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_read_if_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_read_if_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_read_if2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..9ca839db8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..150746c87 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_read_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..3b7c038b4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..6e979354a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..850d7d4dd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_agent.svh new file mode 100644 index 000000000..21263a19c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_configuration.svh new file mode 100644 index 000000000..b51d7b8f0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_read_if_configuration_s fuse_ctrl_prim_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_read_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_if_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_read_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver.svh new file mode 100644 index 000000000..e414a4883 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. +`fuse_ctrl_prim_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_if_initiator_s fuse_ctrl_prim_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. +`fuse_ctrl_prim_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_if_responder_s fuse_ctrl_prim_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..c519b223f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_read_if signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_read_if driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_read_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_if_macros.svh" + +interface fuse_ctrl_prim_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_read_if_pkg::fuse_ctrl_prim_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_read_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. + `fuse_ctrl_prim_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. + `fuse_ctrl_prim_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_read_if_configuration_s fuse_ctrl_prim_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_read_if_initiator_s fuse_ctrl_prim_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_read_if_responder_s fuse_ctrl_prim_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_read_if_initiator_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Members within the fuse_ctrl_prim_axi_read_if_responder_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + initiator_struct = fuse_ctrl_prim_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_read_if_initiator_s fuse_ctrl_prim_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_read_if_responder_s fuse_ctrl_prim_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_read_if_initiator_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Variables within the fuse_ctrl_prim_axi_read_if_responder_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arlock_i; // + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_if.sv new file mode 100644 index 000000000..e1e4911a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_read_if interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_read_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_if_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_macros.svh new file mode 100644 index 000000000..9aa71c06e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_read_if_configuration class. +// + `define fuse_ctrl_prim_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_read_if_configuration_s; + + `define fuse_ctrl_prim_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_if_configuration_s to_struct();\ + fuse_ctrl_prim_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_read_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_read_if_configuration_s fuse_ctrl_prim_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_read_if_transaction class. +// + `define fuse_ctrl_prim_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_if_monitor_s; + + `define fuse_ctrl_prim_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_if_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_read_if_monitor_struct = \ + { \ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_read_if_monitor_s fuse_ctrl_prim_axi_read_if_monitor_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_if_initiator_s; + + `define fuse_ctrl_prim_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_if_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_read_if_initiator_struct = \ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_read_if_initiator_s fuse_ctrl_prim_axi_read_if_initiator_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_if_responder_s; + + `define fuse_ctrl_prim_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_if_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_read_if_responder_struct = \ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_if_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_read_if_responder_s fuse_ctrl_prim_axi_read_if_responder_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor.svh new file mode 100644 index 000000000..bf0c76c81 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_read_if transactions observed by the +// fuse_ctrl_prim_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_read_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_read_if_monitor_s fuse_ctrl_prim_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..bed13faf6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_read_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_read_if monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_read_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_if_macros.svh" + + +interface fuse_ctrl_prim_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_read_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_if_monitor_s fuse_ctrl_prim_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_read_if_pkg::fuse_ctrl_prim_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_read_if_configuration_s fuse_ctrl_prim_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_read_if_monitor_s fuse_ctrl_prim_axi_read_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_araddr + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arvalid + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arburst + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arsize + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arlen + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_aruser + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arid + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arlock + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..bd8b0a768 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_read_if_random_sequence::body()-fuse_ctrl_prim_axi_read_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_read_if_driver_bfm via the sequencer and fuse_ctrl_prim_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..dd96f25d6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..0d10545bd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_if_transaction_req_t; + fuse_ctrl_prim_axi_read_if_transaction_req_t req; + typedef fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_if_transaction_rsp_t; + fuse_ctrl_prim_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction.svh new file mode 100644 index 000000000..f4f6cb786 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] prim_araddr ; + logic prim_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + logic [2:0] prim_arsize ; + logic [7:0] prim_arlen ; + logic [UW-1:0] prim_aruser ; + logic [IW-1:0] prim_arid ; + logic prim_arlock ; + logic prim_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_read_if_monitor and fuse_ctrl_prim_axi_read_if_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_if_monitor_s fuse_ctrl_prim_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_if_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_if_initiator_s fuse_ctrl_prim_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_if_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_if_responder_s fuse_ctrl_prim_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_if_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_araddr:0x%x prim_arvalid:0x%x prim_arburst:0x%x prim_arsize:0x%x prim_arlen:0x%x prim_aruser:0x%x prim_arid:0x%x prim_arlock:0x%x prim_rready:0x%x ",prim_araddr,prim_arvalid,prim_arburst,prim_arsize,prim_arlen,prim_aruser,prim_arid,prim_arlock,prim_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_araddr = RHS.prim_araddr; + this.prim_arvalid = RHS.prim_arvalid; + this.prim_arburst = RHS.prim_arburst; + this.prim_arsize = RHS.prim_arsize; + this.prim_arlen = RHS.prim_arlen; + this.prim_aruser = RHS.prim_aruser; + this.prim_arid = RHS.prim_arid; + this.prim_arlock = RHS.prim_arlock; + this.prim_rready = RHS.prim_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_araddr,"prim_araddr"); + $add_attribute(transaction_view_h,prim_arvalid,"prim_arvalid"); + $add_attribute(transaction_view_h,prim_arburst,"prim_arburst"); + $add_attribute(transaction_view_h,prim_arsize,"prim_arsize"); + $add_attribute(transaction_view_h,prim_arlen,"prim_arlen"); + $add_attribute(transaction_view_h,prim_aruser,"prim_aruser"); + $add_attribute(transaction_view_h,prim_arid,"prim_arid"); + $add_attribute(transaction_view_h,prim_arlock,"prim_arlock"); + $add_attribute(transaction_view_h,prim_rready,"prim_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..283a0b24c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_read_if transaction information using +// a covergroup named fuse_ctrl_prim_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_araddr: coverpoint coverage_trans.prim_araddr; + prim_arvalid: coverpoint coverage_trans.prim_arvalid; + prim_arburst: coverpoint coverage_trans.prim_arburst; + prim_arsize: coverpoint coverage_trans.prim_arsize; + prim_arlen: coverpoint coverage_trans.prim_arlen; + prim_aruser: coverpoint coverage_trans.prim_aruser; + prim_arid: coverpoint coverage_trans.prim_arid; + prim_arlock: coverpoint coverage_trans.prim_arlock; + prim_rready: coverpoint coverage_trans.prim_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_read_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/yaml/fuse_ctrl_prim_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/yaml/fuse_ctrl_prim_axi_read_if_interface.yaml new file mode 100644 index 000000000..a55568558 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/yaml/fuse_ctrl_prim_axi_read_if_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: prim_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.project new file mode 100644 index 000000000..1d2b3a2b3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_write_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.svproject new file mode 100644 index 000000000..378d11293 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/Makefile new file mode 100644 index 000000000..e0851422c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_write_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_write_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f + +fuse_ctrl_prim_axi_write_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f + +fuse_ctrl_prim_axi_write_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_write_if_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_write_if_pkg +COMP_fuse_ctrl_prim_axi_write_if_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_write_if_pkg +COMP_fuse_ctrl_prim_axi_write_if_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_write_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_write_if_pkg: $(COMP_fuse_ctrl_prim_axi_write_if_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_write_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_write_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_write_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_write_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_write_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_if_pkg += -I$(fuse_ctrl_prim_axi_write_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_if_pkg += $(fuse_ctrl_prim_axi_write_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_write_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/compile.do new file mode 100644 index 000000000..e542958e1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_write_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if.compile new file mode 100644 index 000000000..5809b76c4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_write_if_hvl.compile + - fuse_ctrl_prim_axi_write_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_bfm.vinfo new file mode 100644 index 000000000..6c5f5cfbb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_write_if_if.sv +src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv +src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_common.compile new file mode 100644 index 000000000..dde3d0d7f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f new file mode 100644 index 000000000..11983b34a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f new file mode 100644 index 000000000..16c93aac2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f new file mode 100644 index 000000000..8e0817f98 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hdl.compile new file mode 100644 index 000000000..ff56c3bc8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_write_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_write_if_if.sv + - src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hvl.compile new file mode 100644 index 000000000..a21321c58 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_write_if_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.sv new file mode 100644 index 000000000..886790867 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_write_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_write_if_macros.svh" + + export fuse_ctrl_prim_axi_write_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_write_if_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_write_if_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_write_if_configuration.svh" + `include "src/fuse_ctrl_prim_axi_write_if_driver.svh" + `include "src/fuse_ctrl_prim_axi_write_if_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_write_if_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_write_if_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_write_if_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_write_if_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_write_if2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_write_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.vinfo new file mode 100644 index 000000000..51f12e079 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.sv new file mode 100644 index 000000000..7998fdf63 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_write_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_write_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo new file mode 100644 index 000000000..a0dd33de5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_sve.F new file mode 100644 index 000000000..c2cbc2a56 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if2reg_adapter.svh new file mode 100644 index 000000000..3639e693b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_write_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_write_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_write_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_agent.svh new file mode 100644 index 000000000..df581f3f1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_write_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_configuration.svh new file mode 100644 index 000000000..676cfcb02 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_write_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_write_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_write_if_configuration_s fuse_ctrl_prim_axi_write_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_write_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_if_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_write_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_write_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_write_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_write_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver.svh new file mode 100644 index 000000000..55d444021 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_write_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. +`fuse_ctrl_prim_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_if_initiator_s fuse_ctrl_prim_axi_write_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. +`fuse_ctrl_prim_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_if_responder_s fuse_ctrl_prim_axi_write_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_write_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_write_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_write_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_write_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv new file mode 100644 index 000000000..b418ebbf8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv @@ -0,0 +1,429 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_write_if signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_write_if driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_write_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_write_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_write_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_if_macros.svh" + +interface fuse_ctrl_prim_axi_write_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_write_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] awaddr_i; + reg [AW-1:0] awaddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] awburst_o = 'bz; + tri [2:0] awsize_i; + reg [2:0] awsize_o = 'bz; + tri [7:0] awlen_i; + reg [7:0] awlen_o = 'bz; + tri [UW-1:0] awuser_i; + reg [UW-1:0] awuser_o = 'bz; + tri [UW-1:0] awid_i; + reg [UW-1:0] awid_o = 'bz; + tri awlock_i; + reg awlock_o = 'bz; + tri awvalid_i; + reg awvalid_o = 'bz; + tri [DW-1:0] wdata_i; + reg [DW-1:0] wdata_o = 'bz; + tri [DW/8-1:0] wstrb_i; + reg [DW/8-1:0] wstrb_o = 'bz; + tri wvalid_i; + reg wvalid_o = 'bz; + tri wlast_i; + reg wlast_o = 'bz; + tri bready_i; + reg bready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.awaddr = (initiator_responder == INITIATOR) ? awaddr_o : 'bz; + assign awaddr_i = bus.awaddr; + assign bus.awburst = (initiator_responder == INITIATOR) ? awburst_o : 'bz; + assign awburst_i = bus.awburst; + assign bus.awsize = (initiator_responder == INITIATOR) ? awsize_o : 'bz; + assign awsize_i = bus.awsize; + assign bus.awlen = (initiator_responder == INITIATOR) ? awlen_o : 'bz; + assign awlen_i = bus.awlen; + assign bus.awuser = (initiator_responder == INITIATOR) ? awuser_o : 'bz; + assign awuser_i = bus.awuser; + assign bus.awid = (initiator_responder == INITIATOR) ? awid_o : 'bz; + assign awid_i = bus.awid; + assign bus.awlock = (initiator_responder == INITIATOR) ? awlock_o : 'bz; + assign awlock_i = bus.awlock; + assign bus.awvalid = (initiator_responder == INITIATOR) ? awvalid_o : 'bz; + assign awvalid_i = bus.awvalid; + assign bus.wdata = (initiator_responder == INITIATOR) ? wdata_o : 'bz; + assign wdata_i = bus.wdata; + assign bus.wstrb = (initiator_responder == INITIATOR) ? wstrb_o : 'bz; + assign wstrb_i = bus.wstrb; + assign bus.wvalid = (initiator_responder == INITIATOR) ? wvalid_o : 'bz; + assign wvalid_i = bus.wvalid; + assign bus.wlast = (initiator_responder == INITIATOR) ? wlast_o : 'bz; + assign wlast_i = bus.wlast; + assign bus.bready = (initiator_responder == INITIATOR) ? bready_o : 'bz; + assign bready_i = bus.bready; + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_write_if_pkg::fuse_ctrl_prim_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_write_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_write_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_write_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. + `fuse_ctrl_prim_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. + `fuse_ctrl_prim_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + awaddr_o <= 'bz; + awburst_o <= 'bz; + awsize_o <= 'bz; + awlen_o <= 'bz; + awuser_o <= 'bz; + awid_o <= 'bz; + awlock_o <= 'bz; + awvalid_o <= 'bz; + wdata_o <= 'bz; + wstrb_o <= 'bz; + wvalid_o <= 'bz; + wlast_o <= 'bz; + bready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_write_if_configuration_s fuse_ctrl_prim_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_write_if_initiator_s fuse_ctrl_prim_axi_write_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_write_if_responder_s fuse_ctrl_prim_axi_write_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_write_if_initiator_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Members within the fuse_ctrl_prim_axi_write_if_responder_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + initiator_struct = fuse_ctrl_prim_axi_write_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // awaddr_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [AW-1:0] + // awburst_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // awsize_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [2:0] + // awlen_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [7:0] + // awuser_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [UW-1:0] + // awid_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [UW-1:0] + // awlock_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // + // awvalid_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // + // wdata_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [DW-1:0] + // wstrb_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [DW/8-1:0] + // wvalid_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // + // wlast_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // + // bready_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_write_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_write_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_write_if_initiator_s fuse_ctrl_prim_axi_write_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_write_if_responder_s fuse_ctrl_prim_axi_write_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_write_if_initiator_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Variables within the fuse_ctrl_prim_axi_write_if_responder_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awlock_i; // + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awvalid_i; // + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = wvalid_i; // + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = wlast_i; // + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = bready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_write_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_write_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_if.sv new file mode 100644 index 000000000..afcdb92da --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_if.sv @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_write_if interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_write_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_write_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_write_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awaddr), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awburst), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awsize), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awlen), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awuser), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awlock), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.wdata), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.wstrb), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.wvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.wlast), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.bready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_if_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_write_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] awaddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst, + inout tri [2:0] awsize, + inout tri [7:0] awlen, + inout tri [UW-1:0] awuser, + inout tri [UW-1:0] awid, + inout tri awlock, + inout tri awvalid, + inout tri [DW-1:0] wdata, + inout tri [DW/8-1:0] wstrb, + inout tri wvalid, + inout tri wlast, + inout tri bready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output awaddr, + output awburst, + output awsize, + output awlen, + output awuser, + output awid, + output awlock, + output awvalid, + output wdata, + output wstrb, + output wvalid, + output wlast, + output bready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_macros.svh new file mode 100644 index 000000000..f1a207086 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_macros.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_write_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_write_if_configuration class. +// + `define fuse_ctrl_prim_axi_write_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_write_if_configuration_s; + + `define fuse_ctrl_prim_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_if_configuration_s to_struct();\ + fuse_ctrl_prim_axi_write_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_write_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_write_if_configuration_s fuse_ctrl_prim_axi_write_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_write_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_write_if_transaction class. +// + `define fuse_ctrl_prim_axi_write_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_if_monitor_s; + + `define fuse_ctrl_prim_axi_write_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_if_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_write_if_monitor_struct = \ + { \ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_write_if_monitor_s fuse_ctrl_prim_axi_write_if_monitor_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_if_initiator_s; + + `define fuse_ctrl_prim_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_if_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_write_if_initiator_struct = \ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_write_if_initiator_s fuse_ctrl_prim_axi_write_if_initiator_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_if_responder_s; + + `define fuse_ctrl_prim_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_if_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_write_if_responder_struct = \ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_if_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_write_if_responder_s fuse_ctrl_prim_axi_write_if_responder_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor.svh new file mode 100644 index 000000000..33bf7f57e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_write_if transactions observed by the +// fuse_ctrl_prim_axi_write_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_write_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_write_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_write_if_monitor_s fuse_ctrl_prim_axi_write_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_write_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv new file mode 100644 index 000000000..909871de8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv @@ -0,0 +1,248 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_write_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_write_if monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_write_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_write_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_write_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_if_macros.svh" + + +interface fuse_ctrl_prim_axi_write_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_write_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_write_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_if_monitor_s fuse_ctrl_prim_axi_write_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_write_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] awaddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + tri [2:0] awsize_i; + tri [7:0] awlen_i; + tri [UW-1:0] awuser_i; + tri [UW-1:0] awid_i; + tri awlock_i; + tri awvalid_i; + tri [DW-1:0] wdata_i; + tri [DW/8-1:0] wstrb_i; + tri wvalid_i; + tri wlast_i; + tri bready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awaddr_i = bus.awaddr; + assign awburst_i = bus.awburst; + assign awsize_i = bus.awsize; + assign awlen_i = bus.awlen; + assign awuser_i = bus.awuser; + assign awid_i = bus.awid; + assign awlock_i = bus.awlock; + assign awvalid_i = bus.awvalid; + assign wdata_i = bus.wdata; + assign wstrb_i = bus.wstrb; + assign wvalid_i = bus.wvalid; + assign wlast_i = bus.wlast; + assign bready_i = bus.bready; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_write_if_pkg::fuse_ctrl_prim_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_write_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_write_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_write_if_configuration_s fuse_ctrl_prim_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_write_if_monitor_s fuse_ctrl_prim_axi_write_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awaddr + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awvalid + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awburst + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awsize + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awlen + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awuser + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awid + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awlock + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_wdata + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_wstrb + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_wvalid + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_wlast + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_bready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awlock_i; // + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awvalid_i; // + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = wvalid_i; // + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = wlast_i; // + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = bready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_random_sequence.svh new file mode 100644 index 000000000..8c64fb3c6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_write_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_write_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_write_if_random_sequence::body()-fuse_ctrl_prim_axi_write_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_write_if_driver_bfm via the sequencer and fuse_ctrl_prim_axi_write_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_write_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_responder_sequence.svh new file mode 100644 index 000000000..088b5cae1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_write_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_sequence_base.svh new file mode 100644 index 000000000..3dabe4d22 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_if_transaction_req_t; + fuse_ctrl_prim_axi_write_if_transaction_req_t req; + typedef fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_if_transaction_rsp_t; + fuse_ctrl_prim_axi_write_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_write_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_write_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction.svh new file mode 100644 index 000000000..168cf90d5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction.svh @@ -0,0 +1,256 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_write_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] prim_awaddr ; + logic prim_awvalid ; + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + logic [2:0] prim_awsize ; + logic [7:0] prim_awlen ; + logic [UW-1:0] prim_awuser ; + logic [IW-1:0] prim_awid ; + logic prim_awlock ; + logic [DW-1:0] prim_wdata ; + logic [DW/8 - 1:0] prim_wstrb ; + logic prim_wvalid ; + logic prim_wlast ; + logic prim_bready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_write_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_write_if_monitor and fuse_ctrl_prim_axi_write_if_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_if_monitor_s fuse_ctrl_prim_axi_write_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_if_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_if_initiator_s fuse_ctrl_prim_axi_write_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_if_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_if_responder_s fuse_ctrl_prim_axi_write_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_if_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awaddr:0x%x prim_awvalid:0x%x prim_awburst:0x%x prim_awsize:0x%x prim_awlen:0x%x prim_awuser:0x%x prim_awid:0x%x prim_awlock:0x%x prim_wdata:0x%x prim_wstrb:0x%x prim_wvalid:0x%x prim_wlast:0x%x prim_bready:0x%x ",prim_awaddr,prim_awvalid,prim_awburst,prim_awsize,prim_awlen,prim_awuser,prim_awid,prim_awlock,prim_wdata,prim_wstrb,prim_wvalid,prim_wlast,prim_bready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_wdata == RHS.prim_wdata) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awaddr = RHS.prim_awaddr; + this.prim_awvalid = RHS.prim_awvalid; + this.prim_awburst = RHS.prim_awburst; + this.prim_awsize = RHS.prim_awsize; + this.prim_awlen = RHS.prim_awlen; + this.prim_awuser = RHS.prim_awuser; + this.prim_awid = RHS.prim_awid; + this.prim_awlock = RHS.prim_awlock; + this.prim_wdata = RHS.prim_wdata; + this.prim_wstrb = RHS.prim_wstrb; + this.prim_wvalid = RHS.prim_wvalid; + this.prim_wlast = RHS.prim_wlast; + this.prim_bready = RHS.prim_bready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_write_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awaddr,"prim_awaddr"); + $add_attribute(transaction_view_h,prim_awvalid,"prim_awvalid"); + $add_attribute(transaction_view_h,prim_awburst,"prim_awburst"); + $add_attribute(transaction_view_h,prim_awsize,"prim_awsize"); + $add_attribute(transaction_view_h,prim_awlen,"prim_awlen"); + $add_attribute(transaction_view_h,prim_awuser,"prim_awuser"); + $add_attribute(transaction_view_h,prim_awid,"prim_awid"); + $add_attribute(transaction_view_h,prim_awlock,"prim_awlock"); + $add_attribute(transaction_view_h,prim_wdata,"prim_wdata"); + $add_attribute(transaction_view_h,prim_wstrb,"prim_wstrb"); + $add_attribute(transaction_view_h,prim_wvalid,"prim_wvalid"); + $add_attribute(transaction_view_h,prim_wlast,"prim_wlast"); + $add_attribute(transaction_view_h,prim_bready,"prim_bready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction_coverage.svh new file mode 100644 index 000000000..a6fbb3558 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction_coverage.svh @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_write_if transaction information using +// a covergroup named fuse_ctrl_prim_axi_write_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_write_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awaddr: coverpoint coverage_trans.prim_awaddr; + prim_awvalid: coverpoint coverage_trans.prim_awvalid; + prim_awburst: coverpoint coverage_trans.prim_awburst; + prim_awsize: coverpoint coverage_trans.prim_awsize; + prim_awlen: coverpoint coverage_trans.prim_awlen; + prim_awuser: coverpoint coverage_trans.prim_awuser; + prim_awid: coverpoint coverage_trans.prim_awid; + prim_awlock: coverpoint coverage_trans.prim_awlock; + prim_wdata: coverpoint coverage_trans.prim_wdata; + prim_wstrb: coverpoint coverage_trans.prim_wstrb; + prim_wvalid: coverpoint coverage_trans.prim_wvalid; + prim_wlast: coverpoint coverage_trans.prim_wlast; + prim_bready: coverpoint coverage_trans.prim_bready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_write_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_write_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_write_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/yaml/fuse_ctrl_prim_axi_write_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/yaml/fuse_ctrl_prim_axi_write_if_interface.yaml new file mode 100644 index 000000000..4a69d4c96 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/yaml/fuse_ctrl_prim_axi_write_if_interface.yaml @@ -0,0 +1,161 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_write_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: awaddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: awburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: awsize + reset_value: '''bz' + width: '3' + - dir: output + name: awlen + reset_value: '''bz' + width: '8' + - dir: output + name: awuser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awid + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awlock + reset_value: '''bz' + width: '1' + - dir: output + name: awvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wdata + reset_value: '''bz' + width: '[''DW'']' + - dir: output + name: wstrb + reset_value: '''bz' + width: '[''DW/8'']' + - dir: output + name: wvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wlast + reset_value: '''bz' + width: '1' + - dir: output + name: bready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: prim_awaddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awuser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wstrb + type: logic [DW/8 - 1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_bready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.project new file mode 100644 index 000000000..ffd5f9686 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_rst_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.svproject new file mode 100644 index 000000000..79beebd45 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/Makefile new file mode 100644 index 000000000..4067417f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_rst interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_rst_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f + +fuse_ctrl_rst_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f + +fuse_ctrl_rst_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f + +COMP_fuse_ctrl_rst_PKG_TGT_0 = q_comp_fuse_ctrl_rst_pkg +COMP_fuse_ctrl_rst_PKG_TGT_1 = v_comp_fuse_ctrl_rst_pkg +COMP_fuse_ctrl_rst_PKG_TGT = $(COMP_fuse_ctrl_rst_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_rst_pkg: $(COMP_fuse_ctrl_rst_PKG_TGT) + +q_comp_fuse_ctrl_rst_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_rst_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_rst_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_rst_PKG_XRTL) + +v_comp_fuse_ctrl_rst_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_rst_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_rst_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_rst_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_rst_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_rst_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_rst_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_rst_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_rst_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_rst_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_rst_pkg += -I$(fuse_ctrl_rst_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_rst_pkg += $(fuse_ctrl_rst_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_rst_pkg += \ + \ + -o .so + +comp_fuse_ctrl_rst_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_rst_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_rst_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_rst_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_rst_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/compile.do new file mode 100644 index 000000000..935ebc791 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_rst interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile new file mode 100644 index 000000000..98756cb39 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_rst_hvl.compile + - fuse_ctrl_rst_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo new file mode 100644 index 000000000..c41b1f119 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_rst_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_rst_if.sv +src/fuse_ctrl_rst_driver_bfm.sv +src/fuse_ctrl_rst_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_common.compile new file mode 100644 index 000000000..098d340ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_rst_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f new file mode 100644 index 000000000..a5e629a59 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f new file mode 100644 index 000000000..9bddd1e32 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f new file mode 100644 index 000000000..a68e85753 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hdl.compile new file mode 100644 index 000000000..5e99298f4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_rst_common.compile +incdir: + - . +src: + - src/fuse_ctrl_rst_if.sv + - src/fuse_ctrl_rst_monitor_bfm.sv + - src/fuse_ctrl_rst_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hvl.compile new file mode 100644 index 000000000..69ab1ac56 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_rst_common.compile +incdir: + - . +src: + - fuse_ctrl_rst_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv new file mode 100644 index 000000000..2ea60c87c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_rst_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_rst_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_rst_macros.svh" + + export fuse_ctrl_rst_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_rst_typedefs.svh" + `include "src/fuse_ctrl_rst_transaction.svh" + + `include "src/fuse_ctrl_rst_configuration.svh" + `include "src/fuse_ctrl_rst_driver.svh" + `include "src/fuse_ctrl_rst_monitor.svh" + + `include "src/fuse_ctrl_rst_transaction_coverage.svh" + `include "src/fuse_ctrl_rst_sequence_base.svh" + `include "src/fuse_ctrl_rst_random_sequence.svh" + + `include "src/fuse_ctrl_rst_responder_sequence.svh" + `include "src/fuse_ctrl_rst2reg_adapter.svh" + + `include "src/fuse_ctrl_rst_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo new file mode 100644 index 000000000..7efd3da90 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_rst_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_rst_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.sv new file mode 100644 index 000000000..59c4ce0d1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_rst_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_rst_typedefs_hdl.svh" + `include "src/fuse_ctrl_rst_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.vinfo new file mode 100644 index 000000000..105e5a267 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_rst_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F new file mode 100644 index 000000000..2a76484f8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst2reg_adapter.svh new file mode 100644 index 000000000..e74aaf5c8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_rst interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_rst2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_rst2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_rst_transaction trans_h = fuse_ctrl_rst_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_rst_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_rst2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_agent.svh new file mode 100644 index 000000000..3129024c4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_rst_configuration ), + .DRIVER_T(fuse_ctrl_rst_driver ), + .MONITOR_T(fuse_ctrl_rst_monitor ), + .COVERAGE_T(fuse_ctrl_rst_transaction_coverage ), + .TRANS_T(fuse_ctrl_rst_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_rst_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_configuration.svh new file mode 100644 index 000000000..2b8c3b89a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_rst agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_rst_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_rst_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_rst_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_rst_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_rst_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_CONFIGURATION_STRUCT + fuse_ctrl_rst_configuration_s fuse_ctrl_rst_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_rst_configuration_s + // structure. The function returns the handle to the fuse_ctrl_rst_configuration_struct. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_rst_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_rst_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_rst_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_rst_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_rst_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_rst_configuration_cg.set_inst_name($sformatf("fuse_ctrl_rst_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_rst_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver.svh new file mode 100644 index 000000000..c0c6921a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_rst_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_rst_driver_bfm ), + .REQ(fuse_ctrl_rst_transaction ), + .RSP(fuse_ctrl_rst_transaction )); + + `uvm_component_utils( fuse_ctrl_rst_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_rst_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm +// to communicate initiator driven data to fuse_ctrl_rst_driver_bfm. +`fuse_ctrl_rst_INITIATOR_STRUCT + fuse_ctrl_rst_initiator_s fuse_ctrl_rst_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm +// to communicate Responder driven data to fuse_ctrl_rst_driver_bfm. +`fuse_ctrl_rst_RESPONDER_STRUCT + fuse_ctrl_rst_responder_s fuse_ctrl_rst_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_rst_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_rst_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_rst_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_rst_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver_bfm.sv new file mode 100644 index 000000000..99e34af0a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver_bfm.sv @@ -0,0 +1,296 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_rst signal driving. It is +// accessed by the uvm fuse_ctrl_rst driver through a virtual interface +// handle in the fuse_ctrl_rst configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_rst_if. +// +// Input signals from the fuse_ctrl_rst_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_rst_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_rst_pkg_hdl::*; +`include "src/fuse_ctrl_rst_macros.svh" + +interface fuse_ctrl_rst_driver_bfm + (fuse_ctrl_rst_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_rst_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri rst_ni_i; + reg rst_ni_o = 'bz; + tri [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i_i; + reg [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.rst_ni = (initiator_responder == INITIATOR) ? rst_ni_o : 'bz; + assign rst_ni_i = bus.rst_ni; + assign bus.pwr_otp_i = (initiator_responder == INITIATOR) ? pwr_otp_i_o : 'bz; + assign pwr_otp_i_i = bus.pwr_otp_i; + + // Proxy handle to UVM driver + fuse_ctrl_rst_pkg::fuse_ctrl_rst_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_rst_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_rst_driver to this BFM + // **************************************************************************** + `fuse_ctrl_rst_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm + // to communicate initiator driven data to fuse_ctrl_rst_driver_bfm. + `fuse_ctrl_rst_INITIATOR_STRUCT + fuse_ctrl_rst_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm + // to communicate Responder driven data to fuse_ctrl_rst_driver_bfm. + `fuse_ctrl_rst_RESPONDER_STRUCT + fuse_ctrl_rst_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + rst_ni_o <= 'bz; + pwr_otp_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_rst_configuration_s fuse_ctrl_rst_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_rst_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_rst_initiator_s fuse_ctrl_rst_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_rst_responder_s fuse_ctrl_rst_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_rst_initiator_struct: + // bit assert_rst ; + // bit assert_otp_init ; + // Members within the fuse_ctrl_rst_responder_struct: + // bit assert_rst ; + // bit assert_otp_init ; + initiator_struct = fuse_ctrl_rst_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // rst_ni_o <= fuse_ctrl_rst_initiator_struct.xyz; // + // pwr_otp_i_o <= fuse_ctrl_rst_initiator_struct.xyz; // [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_rst_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_rst_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_rst_initiator_s fuse_ctrl_rst_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_rst_responder_s fuse_ctrl_rst_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_rst_initiator_struct: + // bit assert_rst ; + // bit assert_otp_init ; + // Variables within the fuse_ctrl_rst_responder_struct: + // bit assert_rst ; + // bit assert_otp_init ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_rst_responder_struct.xyz = rst_ni_i; // + // fuse_ctrl_rst_responder_struct.xyz = pwr_otp_i_i; // [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_rst_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_rst_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv new file mode 100644 index 000000000..086a0f954 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv @@ -0,0 +1,83 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_rst interface signals. +// It is instantiated once per fuse_ctrl_rst bus. Bus Functional Models, +// BFM's named fuse_ctrl_rst_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_rst_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_rst_bus.rst_ni), // Agent output +// .dut_signal_port(fuse_ctrl_rst_bus.pwr_otp_i), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_rst_pkg_hdl::*; + +interface fuse_ctrl_rst_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri rst_ni, + inout tri [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input rst_ni, + input pwr_otp_i + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output rst_ni, + output pwr_otp_i + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input rst_ni, + input pwr_otp_i + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_macros.svh new file mode 100644 index 000000000..dfad076e5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_macros.svh @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_rst package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_rst_configuration class. +// + `define fuse_ctrl_rst_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_rst_configuration_s; + + `define fuse_ctrl_rst_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_configuration_s to_struct();\ + fuse_ctrl_rst_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_rst_configuration_struct );\ + endfunction + + `define fuse_ctrl_rst_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_rst_configuration_s fuse_ctrl_rst_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_rst_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_rst_transaction class. +// + `define fuse_ctrl_rst_MONITOR_STRUCT typedef struct packed { \ + bit assert_rst ; \ + bit assert_otp_init ; \ + } fuse_ctrl_rst_monitor_s; + + `define fuse_ctrl_rst_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_monitor_s to_monitor_struct();\ + fuse_ctrl_rst_monitor_struct = \ + { \ + this.assert_rst , \ + this.assert_otp_init \ + };\ + return ( fuse_ctrl_rst_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_rst_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_rst_monitor_s fuse_ctrl_rst_monitor_struct);\ + {\ + this.assert_rst , \ + this.assert_otp_init \ + } = fuse_ctrl_rst_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_rst_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_rst_INITIATOR_STRUCT typedef struct packed { \ + bit assert_rst ; \ + bit assert_otp_init ; \ + } fuse_ctrl_rst_initiator_s; + + `define fuse_ctrl_rst_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_initiator_s to_initiator_struct();\ + fuse_ctrl_rst_initiator_struct = \ + {\ + this.assert_rst , \ + this.assert_otp_init \ + };\ + return ( fuse_ctrl_rst_initiator_struct);\ + endfunction + + `define fuse_ctrl_rst_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_rst_initiator_s fuse_ctrl_rst_initiator_struct);\ + {\ + this.assert_rst , \ + this.assert_otp_init \ + } = fuse_ctrl_rst_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_rst_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_rst_RESPONDER_STRUCT typedef struct packed { \ + bit assert_rst ; \ + bit assert_otp_init ; \ + } fuse_ctrl_rst_responder_s; + + `define fuse_ctrl_rst_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_responder_s to_responder_struct();\ + fuse_ctrl_rst_responder_struct = \ + {\ + this.assert_rst , \ + this.assert_otp_init \ + };\ + return ( fuse_ctrl_rst_responder_struct);\ + endfunction + + `define fuse_ctrl_rst_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_rst_responder_s fuse_ctrl_rst_responder_struct);\ + {\ + this.assert_rst , \ + this.assert_otp_init \ + } = fuse_ctrl_rst_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor.svh new file mode 100644 index 000000000..6e829b3a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_rst transactions observed by the +// fuse_ctrl_rst monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_rst_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_rst_monitor_bfm ), + .TRANS_T(fuse_ctrl_rst_transaction )); + + `uvm_component_utils( fuse_ctrl_rst_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_rst_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_rst_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_rst_monitor_s fuse_ctrl_rst_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_rst_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor_bfm.sv new file mode 100644 index 000000000..6aa8fd333 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor_bfm.sv @@ -0,0 +1,192 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_rst signal monitoring. +// It is accessed by the uvm fuse_ctrl_rst monitor through a virtual +// interface handle in the fuse_ctrl_rst configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_rst_if. +// +// Input signals from the fuse_ctrl_rst_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_rst bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_rst_pkg_hdl::*; +`include "src/fuse_ctrl_rst_macros.svh" + + +interface fuse_ctrl_rst_monitor_bfm + ( fuse_ctrl_rst_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_rst_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_rst_MONITOR_STRUCT + fuse_ctrl_rst_monitor_s fuse_ctrl_rst_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_rst_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri rst_ni_i; + tri [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign rst_ni_i = bus.rst_ni; + assign pwr_otp_i_i = bus.pwr_otp_i; + + // Proxy handle to UVM monitor + fuse_ctrl_rst_pkg::fuse_ctrl_rst_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_rst_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_rst_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_rst_configuration_s fuse_ctrl_rst_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_rst_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_rst_monitor_s fuse_ctrl_rst_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_rst_monitor_struct.assert_rst + // // fuse_ctrl_rst_monitor_struct.assert_otp_init + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_rst_monitor_struct.xyz = rst_ni_i; // + // fuse_ctrl_rst_monitor_struct.xyz = pwr_otp_i_i; // [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_random_sequence.svh new file mode 100644 index 000000000..2b719a026 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_rst transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_rst_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_random_sequence + extends fuse_ctrl_rst_sequence_base ; + + `uvm_object_utils( fuse_ctrl_rst_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_rst_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_rst_random_sequence::body()-fuse_ctrl_rst_transaction randomization failed") + // Send the transaction to the fuse_ctrl_rst_driver_bfm via the sequencer and fuse_ctrl_rst_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_rst_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_responder_sequence.svh new file mode 100644 index 000000000..85fe8a75e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_responder_sequence + extends fuse_ctrl_rst_sequence_base ; + + `uvm_object_utils( fuse_ctrl_rst_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_rst_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_rst_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_sequence_base.svh new file mode 100644 index 000000000..d6a30499e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_rst_transaction ), + .RSP(fuse_ctrl_rst_transaction )); + + `uvm_object_utils( fuse_ctrl_rst_sequence_base ) + + // variables + typedef fuse_ctrl_rst_transaction fuse_ctrl_rst_transaction_req_t; + fuse_ctrl_rst_transaction_req_t req; + typedef fuse_ctrl_rst_transaction fuse_ctrl_rst_transaction_rsp_t; + fuse_ctrl_rst_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_rst_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_rst_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction.svh new file mode 100644 index 000000000..37cf35148 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction.svh @@ -0,0 +1,198 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_rst +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_rst_transaction ) + + bit assert_rst ; + bit assert_otp_init ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_rst_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_rst_monitor and fuse_ctrl_rst_monitor_bfm + // This struct is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_MONITOR_STRUCT + fuse_ctrl_rst_monitor_s fuse_ctrl_rst_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_rst_monitor_s + // structure. The function returns the handle to the fuse_ctrl_rst_monitor_struct. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm + // to communicate initiator driven data to fuse_ctrl_rst_driver_bfm. + // This struct is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_INITIATOR_STRUCT + fuse_ctrl_rst_initiator_s fuse_ctrl_rst_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_rst_initiator_s + // structure. The function returns the handle to the fuse_ctrl_rst_initiator_struct. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm + // to communicate Responder driven data to fuse_ctrl_rst_driver_bfm. + // This struct is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_RESPONDER_STRUCT + fuse_ctrl_rst_responder_s fuse_ctrl_rst_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_rst_responder_s + // structure. The function returns the handle to the fuse_ctrl_rst_responder_struct. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("assert_rst:0x%x assert_otp_init:0x%x ",assert_rst,assert_otp_init); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_rst_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_rst_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.assert_rst = RHS.assert_rst; + this.assert_otp_init = RHS.assert_otp_init; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_rst_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,assert_rst,"assert_rst"); + $add_attribute(transaction_view_h,assert_otp_init,"assert_otp_init"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction_coverage.svh new file mode 100644 index 000000000..8bfc9decb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction_coverage.svh @@ -0,0 +1,85 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_rst transaction information using +// a covergroup named fuse_ctrl_rst_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_rst_transaction )); + + `uvm_component_utils( fuse_ctrl_rst_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_rst_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + assert_rst: coverpoint coverage_trans.assert_rst; + assert_otp_init: coverpoint coverage_trans.assert_otp_init; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_rst_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_rst_transaction_cg.set_inst_name($sformatf("fuse_ctrl_rst_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_rst_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/yaml/fuse_ctrl_rst_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/yaml/fuse_ctrl_rst_interface.yaml new file mode 100644 index 000000000..f21a4199c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_rst_pkg/yaml/fuse_ctrl_rst_interface.yaml @@ -0,0 +1,39 @@ +uvmf: + interfaces: + fuse_ctrl_rst: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: output + name: rst_ni + reset_value: '''bz' + width: '1' + - dir: output + name: pwr_otp_i + reset_value: '''bz' + width: '[''$bits(pwrmgr_pkg::pwr_otp_req_t)'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: assert_rst + type: bit + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: assert_otp_init + type: bit + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.project new file mode 100644 index 000000000..802c3e187 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_secreg_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..be911ec39 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..1eb10014e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_secreg_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_secreg_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f + +fuse_ctrl_secreg_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f + +fuse_ctrl_secreg_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f + +COMP_fuse_ctrl_secreg_axi_read_if_PKG_TGT_0 = q_comp_fuse_ctrl_secreg_axi_read_if_pkg +COMP_fuse_ctrl_secreg_axi_read_if_PKG_TGT_1 = v_comp_fuse_ctrl_secreg_axi_read_if_pkg +COMP_fuse_ctrl_secreg_axi_read_if_PKG_TGT = $(COMP_fuse_ctrl_secreg_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_secreg_axi_read_if_pkg: $(COMP_fuse_ctrl_secreg_axi_read_if_PKG_TGT) + +q_comp_fuse_ctrl_secreg_axi_read_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG_XRTL) + +v_comp_fuse_ctrl_secreg_axi_read_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_secreg_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_if_pkg += -I$(fuse_ctrl_secreg_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_if_pkg += $(fuse_ctrl_secreg_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_secreg_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..04f613c1e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_secreg_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if.compile new file mode 100644 index 000000000..ae2507ea9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_secreg_axi_read_if_hvl.compile + - fuse_ctrl_secreg_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..e97c29c20 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_secreg_axi_read_if_if.sv +src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv +src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_common.compile new file mode 100644 index 000000000..81dd659b6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..220cf1690 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..91290db0d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..3c42c25e3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hdl.compile new file mode 100644 index 000000000..a6821997e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_secreg_axi_read_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_secreg_axi_read_if_if.sv + - src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv + - src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hvl.compile new file mode 100644 index 000000000..8017b8d2c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_secreg_axi_read_if_common.compile +incdir: + - . +src: + - fuse_ctrl_secreg_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.sv new file mode 100644 index 000000000..91a38d680 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_secreg_axi_read_if_macros.svh" + + export fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_secreg_axi_read_if_typedefs.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_transaction.svh" + + `include "src/fuse_ctrl_secreg_axi_read_if_configuration.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_driver.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_monitor.svh" + + `include "src/fuse_ctrl_secreg_axi_read_if_transaction_coverage.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_sequence_base.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_random_sequence.svh" + + `include "src/fuse_ctrl_secreg_axi_read_if_responder_sequence.svh" + `include "src/fuse_ctrl_secreg_axi_read_if2reg_adapter.svh" + + `include "src/fuse_ctrl_secreg_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..3044046cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_secreg_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..e73051e81 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_secreg_axi_read_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..0009d2d8b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..ea92e98f5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..98ba3aacb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_secreg_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_secreg_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_secreg_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_agent.svh new file mode 100644 index 000000000..d2895c679 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_secreg_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_secreg_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_secreg_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_configuration.svh new file mode 100644 index 000000000..981626306 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_secreg_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_secreg_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_secreg_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_CONFIGURATION_STRUCT + fuse_ctrl_secreg_axi_read_if_configuration_s fuse_ctrl_secreg_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_secreg_axi_read_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_if_configuration_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_secreg_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_secreg_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_secreg_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_secreg_axi_read_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver.svh new file mode 100644 index 000000000..ebbf22afa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_secreg_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. +`fuse_ctrl_secreg_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_if_initiator_s fuse_ctrl_secreg_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. +`fuse_ctrl_secreg_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_if_responder_s fuse_ctrl_secreg_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_secreg_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_secreg_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_secreg_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_secreg_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..b440efec7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_secreg_axi_read_if signal driving. It is +// accessed by the uvm fuse_ctrl_secreg_axi_read_if driver through a virtual interface +// handle in the fuse_ctrl_secreg_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_secreg_axi_read_if_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_secreg_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_if_macros.svh" + +interface fuse_ctrl_secreg_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_secreg_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_secreg_axi_read_if_pkg::fuse_ctrl_secreg_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_secreg_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_secreg_axi_read_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_secreg_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. + `fuse_ctrl_secreg_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. + `fuse_ctrl_secreg_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_secreg_axi_read_if_configuration_s fuse_ctrl_secreg_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_secreg_axi_read_if_initiator_s fuse_ctrl_secreg_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_secreg_axi_read_if_responder_s fuse_ctrl_secreg_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_secreg_axi_read_if_initiator_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Members within the fuse_ctrl_secreg_axi_read_if_responder_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + initiator_struct = fuse_ctrl_secreg_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_secreg_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_secreg_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_secreg_axi_read_if_initiator_s fuse_ctrl_secreg_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_secreg_axi_read_if_responder_s fuse_ctrl_secreg_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_secreg_axi_read_if_initiator_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Variables within the fuse_ctrl_secreg_axi_read_if_responder_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arlock_i; // + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_secreg_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_secreg_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_if.sv new file mode 100644 index 000000000..91845e87d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_secreg_axi_read_if interface signals. +// It is instantiated once per fuse_ctrl_secreg_axi_read_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_secreg_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_secreg_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; + +interface fuse_ctrl_secreg_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_macros.svh new file mode 100644 index 000000000..b4d9deeba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_secreg_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_secreg_axi_read_if_configuration class. +// + `define fuse_ctrl_secreg_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_secreg_axi_read_if_configuration_s; + + `define fuse_ctrl_secreg_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_if_configuration_s to_struct();\ + fuse_ctrl_secreg_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_secreg_axi_read_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_secreg_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_secreg_axi_read_if_configuration_s fuse_ctrl_secreg_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_secreg_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_secreg_axi_read_if_transaction class. +// + `define fuse_ctrl_secreg_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_if_monitor_s; + + `define fuse_ctrl_secreg_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_if_monitor_s to_monitor_struct();\ + fuse_ctrl_secreg_axi_read_if_monitor_struct = \ + { \ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_secreg_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_secreg_axi_read_if_monitor_s fuse_ctrl_secreg_axi_read_if_monitor_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_secreg_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_if_initiator_s; + + `define fuse_ctrl_secreg_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_if_initiator_s to_initiator_struct();\ + fuse_ctrl_secreg_axi_read_if_initiator_struct = \ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_secreg_axi_read_if_initiator_s fuse_ctrl_secreg_axi_read_if_initiator_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_secreg_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_if_responder_s; + + `define fuse_ctrl_secreg_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_if_responder_s to_responder_struct();\ + fuse_ctrl_secreg_axi_read_if_responder_struct = \ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_if_responder_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_secreg_axi_read_if_responder_s fuse_ctrl_secreg_axi_read_if_responder_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor.svh new file mode 100644 index 000000000..6addcdb7b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_secreg_axi_read_if transactions observed by the +// fuse_ctrl_secreg_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_secreg_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_secreg_axi_read_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_secreg_axi_read_if_monitor_s fuse_ctrl_secreg_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_secreg_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..7bba9981c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_secreg_axi_read_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_secreg_axi_read_if monitor through a virtual +// interface handle in the fuse_ctrl_secreg_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_secreg_axi_read_if_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_secreg_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_if_macros.svh" + + +interface fuse_ctrl_secreg_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_secreg_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_secreg_axi_read_if_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_if_monitor_s fuse_ctrl_secreg_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_secreg_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_secreg_axi_read_if_pkg::fuse_ctrl_secreg_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_secreg_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_secreg_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_secreg_axi_read_if_configuration_s fuse_ctrl_secreg_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_secreg_axi_read_if_monitor_s fuse_ctrl_secreg_axi_read_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_araddr + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arvalid + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arburst + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arsize + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arlen + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_aruser + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arid + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arlock + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..648972d51 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_secreg_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_secreg_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_secreg_axi_read_if_random_sequence::body()-fuse_ctrl_secreg_axi_read_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_secreg_axi_read_if_driver_bfm via the sequencer and fuse_ctrl_secreg_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_secreg_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..709581bdd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_secreg_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..66bc21078 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_if_transaction_req_t; + fuse_ctrl_secreg_axi_read_if_transaction_req_t req; + typedef fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_if_transaction_rsp_t; + fuse_ctrl_secreg_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_secreg_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_secreg_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction.svh new file mode 100644 index 000000000..c58498d8f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_secreg_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] secreg_araddr ; + logic secreg_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + logic [2:0] secreg_arsize ; + logic [7:0] secreg_arlen ; + logic [UW-1:0] secreg_aruser ; + logic [IW-1:0] secreg_arid ; + logic secreg_arlock ; + logic secreg_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_secreg_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_secreg_axi_read_if_monitor and fuse_ctrl_secreg_axi_read_if_monitor_bfm + // This struct is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_if_monitor_s fuse_ctrl_secreg_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_if_monitor_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_if_initiator_s fuse_ctrl_secreg_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_if_initiator_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_if_responder_s fuse_ctrl_secreg_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_if_responder_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_araddr:0x%x secreg_arvalid:0x%x secreg_arburst:0x%x secreg_arsize:0x%x secreg_arlen:0x%x secreg_aruser:0x%x secreg_arid:0x%x secreg_arlock:0x%x secreg_rready:0x%x ",secreg_araddr,secreg_arvalid,secreg_arburst,secreg_arsize,secreg_arlen,secreg_aruser,secreg_arid,secreg_arlock,secreg_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_araddr = RHS.secreg_araddr; + this.secreg_arvalid = RHS.secreg_arvalid; + this.secreg_arburst = RHS.secreg_arburst; + this.secreg_arsize = RHS.secreg_arsize; + this.secreg_arlen = RHS.secreg_arlen; + this.secreg_aruser = RHS.secreg_aruser; + this.secreg_arid = RHS.secreg_arid; + this.secreg_arlock = RHS.secreg_arlock; + this.secreg_rready = RHS.secreg_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_secreg_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_araddr,"secreg_araddr"); + $add_attribute(transaction_view_h,secreg_arvalid,"secreg_arvalid"); + $add_attribute(transaction_view_h,secreg_arburst,"secreg_arburst"); + $add_attribute(transaction_view_h,secreg_arsize,"secreg_arsize"); + $add_attribute(transaction_view_h,secreg_arlen,"secreg_arlen"); + $add_attribute(transaction_view_h,secreg_aruser,"secreg_aruser"); + $add_attribute(transaction_view_h,secreg_arid,"secreg_arid"); + $add_attribute(transaction_view_h,secreg_arlock,"secreg_arlock"); + $add_attribute(transaction_view_h,secreg_rready,"secreg_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..4da8fb856 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_secreg_axi_read_if transaction information using +// a covergroup named fuse_ctrl_secreg_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_secreg_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_araddr: coverpoint coverage_trans.secreg_araddr; + secreg_arvalid: coverpoint coverage_trans.secreg_arvalid; + secreg_arburst: coverpoint coverage_trans.secreg_arburst; + secreg_arsize: coverpoint coverage_trans.secreg_arsize; + secreg_arlen: coverpoint coverage_trans.secreg_arlen; + secreg_aruser: coverpoint coverage_trans.secreg_aruser; + secreg_arid: coverpoint coverage_trans.secreg_arid; + secreg_arlock: coverpoint coverage_trans.secreg_arlock; + secreg_rready: coverpoint coverage_trans.secreg_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_secreg_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_secreg_axi_read_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_secreg_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/yaml/fuse_ctrl_secreg_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/yaml/fuse_ctrl_secreg_axi_read_if_interface.yaml new file mode 100644 index 000000000..dfcf19887 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/yaml/fuse_ctrl_secreg_axi_read_if_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_secreg_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: secreg_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/.project new file mode 100644 index 000000000..ce67d0c3e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + prim_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..f8c7ed7c8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..01ec95534 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# prim_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +prim_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f + +prim_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f + +prim_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f + +COMP_prim_axi_read_if_PKG_TGT_0 = q_comp_prim_axi_read_if_pkg +COMP_prim_axi_read_if_PKG_TGT_1 = v_comp_prim_axi_read_if_pkg +COMP_prim_axi_read_if_PKG_TGT = $(COMP_prim_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_prim_axi_read_if_pkg: $(COMP_prim_axi_read_if_PKG_TGT) + +q_comp_prim_axi_read_if_pkg: + $(HDL_COMP_CMD) $(prim_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_read_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_read_if_PKG_XRTL) + +v_comp_prim_axi_read_if_pkg: + $(HVL_COMP_CMD) $(prim_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_read_if_PKG) + $(VELANALYZE_CMD) $(prim_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(prim_axi_read_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export prim_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_prim_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_prim_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_prim_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_prim_axi_read_if_pkg += -I$(prim_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_prim_axi_read_if_pkg += $(prim_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_prim_axi_read_if_pkg += \ + \ + -o .so + +comp_prim_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_prim_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_prim_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_prim_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_prim_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..9c440083a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of prim_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if.compile new file mode 100644 index 000000000..6b8986ce1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - prim_axi_read_if_hvl.compile + - prim_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..6ed51480b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use prim_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/prim_axi_read_if_if.sv +src/prim_axi_read_if_driver_bfm.sv +src/prim_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_common.compile new file mode 100644 index 000000000..09fd9b43c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..0dcc7ec77 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..1ca45536b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..db173a50e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hdl.compile new file mode 100644 index 000000000..bf564aa0c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./prim_axi_read_if_common.compile +incdir: + - . +src: + - src/prim_axi_read_if_if.sv + - src/prim_axi_read_if_monitor_bfm.sv + - src/prim_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hvl.compile new file mode 100644 index 000000000..ebdc1e779 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./prim_axi_read_if_common.compile +incdir: + - . +src: + - prim_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.sv new file mode 100644 index 000000000..21866eb57 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import prim_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/prim_axi_read_if_macros.svh" + + export prim_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/prim_axi_read_if_typedefs.svh" + `include "src/prim_axi_read_if_transaction.svh" + + `include "src/prim_axi_read_if_configuration.svh" + `include "src/prim_axi_read_if_driver.svh" + `include "src/prim_axi_read_if_monitor.svh" + + `include "src/prim_axi_read_if_transaction_coverage.svh" + `include "src/prim_axi_read_if_sequence_base.svh" + `include "src/prim_axi_read_if_random_sequence.svh" + + `include "src/prim_axi_read_if_responder_sequence.svh" + `include "src/prim_axi_read_if2reg_adapter.svh" + + `include "src/prim_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..9dc1034d4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use prim_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +prim_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..e2ff7fcd4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/prim_axi_read_if_typedefs_hdl.svh" + `include "src/prim_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..fe5f59e5b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..1112cd0fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..e5ff21492 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the prim_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( prim_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "prim_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : prim_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_agent.svh new file mode 100644 index 000000000..e510c9b42 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(prim_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(prim_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(prim_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( prim_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_configuration.svh new file mode 100644 index 000000000..4fe7507ff --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the prim_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual prim_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual prim_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup prim_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_CONFIGURATION_STRUCT + prim_axi_read_if_configuration_s prim_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a prim_axi_read_if_configuration_s + // structure. The function returns the handle to the prim_axi_read_if_configuration_struct. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + prim_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + prim_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + prim_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + prim_axi_read_if_configuration_cg.set_inst_name($sformatf("prim_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver.svh new file mode 100644 index 000000000..80f3658f6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual prim_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( prim_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in prim_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm +// to communicate initiator driven data to prim_axi_read_if_driver_bfm. +`prim_axi_read_if_INITIATOR_STRUCT + prim_axi_read_if_initiator_s prim_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm +// to communicate Responder driven data to prim_axi_read_if_driver_bfm. +`prim_axi_read_if_RESPONDER_STRUCT + prim_axi_read_if_responder_s prim_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + prim_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(prim_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + prim_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(prim_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..fb79a5e87 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the prim_axi_read_if signal driving. It is +// accessed by the uvm prim_axi_read_if driver through a virtual interface +// handle in the prim_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type prim_axi_read_if_if. +// +// Input signals from the prim_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within prim_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_read_if_pkg_hdl::*; +`include "src/prim_axi_read_if_macros.svh" + +interface prim_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (prim_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute prim_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + prim_axi_read_if_pkg::prim_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in prim_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from prim_axi_read_if_driver to this BFM + // **************************************************************************** + `prim_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm + // to communicate initiator driven data to prim_axi_read_if_driver_bfm. + `prim_axi_read_if_INITIATOR_STRUCT + prim_axi_read_if_initiator_s initiator_struct; + // Responder macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm + // to communicate Responder driven data to prim_axi_read_if_driver_bfm. + `prim_axi_read_if_RESPONDER_STRUCT + prim_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(prim_axi_read_if_configuration_s prim_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input prim_axi_read_if_initiator_s prim_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output prim_axi_read_if_responder_s prim_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the prim_axi_read_if_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Members within the prim_axi_read_if_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + initiator_struct = prim_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // prim_axi_read_if_responder_struct.xyz = arready_i; // + // prim_axi_read_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // prim_axi_read_if_responder_struct.xyz = rresp_i; // + // prim_axi_read_if_responder_struct.xyz = rid_i; // + // prim_axi_read_if_responder_struct.xyz = rlast_i; // + // prim_axi_read_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // prim_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = prim_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output prim_axi_read_if_initiator_s prim_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input prim_axi_read_if_responder_s prim_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the prim_axi_read_if_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Variables within the prim_axi_read_if_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= prim_axi_read_if_initiator_struct.xyz; // + // rdata_o <= prim_axi_read_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= prim_axi_read_if_initiator_struct.xyz; // + // rid_o <= prim_axi_read_if_initiator_struct.xyz; // + // rlast_o <= prim_axi_read_if_initiator_struct.xyz; // + // rvalid_o <= prim_axi_read_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the prim_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the prim_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_if.sv new file mode 100644 index 000000000..3e2dc9c5d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the prim_axi_read_if interface signals. +// It is instantiated once per prim_axi_read_if bus. Bus Functional Models, +// BFM's named prim_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named prim_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(prim_axi_read_if_bus.arready), // Agent input +// .dut_signal_port(prim_axi_read_if_bus.rdata), // Agent input +// .dut_signal_port(prim_axi_read_if_bus.rresp), // Agent input +// .dut_signal_port(prim_axi_read_if_bus.rid), // Agent input +// .dut_signal_port(prim_axi_read_if_bus.rlast), // Agent input +// .dut_signal_port(prim_axi_read_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import prim_axi_read_if_pkg_hdl::*; + +interface prim_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_macros.svh new file mode 100644 index 000000000..afbd57861 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the prim_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the prim_axi_read_if_configuration class. +// + `define prim_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } prim_axi_read_if_configuration_s; + + `define prim_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function prim_axi_read_if_configuration_s to_struct();\ + prim_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( prim_axi_read_if_configuration_struct );\ + endfunction + + `define prim_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(prim_axi_read_if_configuration_s prim_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = prim_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the prim_axi_read_if_transaction class. +// + `define prim_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } prim_axi_read_if_monitor_s; + + `define prim_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function prim_axi_read_if_monitor_s to_monitor_struct();\ + prim_axi_read_if_monitor_struct = \ + { \ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( prim_axi_read_if_monitor_struct);\ + endfunction\ + + `define prim_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(prim_axi_read_if_monitor_s prim_axi_read_if_monitor_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = prim_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the prim_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } prim_axi_read_if_initiator_s; + + `define prim_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function prim_axi_read_if_initiator_s to_initiator_struct();\ + prim_axi_read_if_initiator_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( prim_axi_read_if_initiator_struct);\ + endfunction + + `define prim_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(prim_axi_read_if_initiator_s prim_axi_read_if_initiator_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = prim_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the prim_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } prim_axi_read_if_responder_s; + + `define prim_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function prim_axi_read_if_responder_s to_responder_struct();\ + prim_axi_read_if_responder_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( prim_axi_read_if_responder_struct);\ + endfunction + + `define prim_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(prim_axi_read_if_responder_s prim_axi_read_if_responder_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = prim_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor.svh new file mode 100644 index 000000000..2f4d1fc43 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives prim_axi_read_if transactions observed by the +// prim_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual prim_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`prim_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the prim_axi_read_if_monitor_struct. + virtual function void notify_transaction(input prim_axi_read_if_monitor_s prim_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(prim_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..a6c05bea2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the prim_axi_read_if signal monitoring. +// It is accessed by the uvm prim_axi_read_if monitor through a virtual +// interface handle in the prim_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type prim_axi_read_if_if. +// +// Input signals from the prim_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the prim_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_read_if_pkg_hdl::*; +`include "src/prim_axi_read_if_macros.svh" + + +interface prim_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( prim_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute prim_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`prim_axi_read_if_MONITOR_STRUCT + prim_axi_read_if_monitor_s prim_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `prim_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + prim_axi_read_if_pkg::prim_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( prim_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( prim_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(prim_axi_read_if_configuration_s prim_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output prim_axi_read_if_monitor_s prim_axi_read_if_monitor_struct); + // + // Available struct members: + // // prim_axi_read_if_monitor_struct.prim_arready + // // prim_axi_read_if_monitor_struct.prim_rdata + // // prim_axi_read_if_monitor_struct.prim_rresp + // // prim_axi_read_if_monitor_struct.prim_rid + // // prim_axi_read_if_monitor_struct.prim_rlast + // // prim_axi_read_if_monitor_struct.prim_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // prim_axi_read_if_monitor_struct.xyz = arready_i; // + // prim_axi_read_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // prim_axi_read_if_monitor_struct.xyz = rresp_i; // + // prim_axi_read_if_monitor_struct.xyz = rid_i; // + // prim_axi_read_if_monitor_struct.xyz = rlast_i; // + // prim_axi_read_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..08857b229 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the prim_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a prim_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "prim_axi_read_if_random_sequence::body()-prim_axi_read_if_transaction randomization failed") + // Send the transaction to the prim_axi_read_if_driver_bfm via the sequencer and prim_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: prim_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..501b728cc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "prim_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..c94ac9063 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_read_if_transaction_req_t; + prim_axi_read_if_transaction_req_t req; + typedef prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_read_if_transaction_rsp_t; + prim_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = prim_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = prim_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction.svh new file mode 100644 index 000000000..c7e72b2ee --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an prim_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( prim_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_arready ; + logic [DW-1:0] prim_rdata ; + axi_pkg::axi_burst_e prim_rresp ; + logic [IW-1:0] prim_rid ; + logic prim_rlast ; + logic prim_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in prim_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by prim_axi_read_if_monitor and prim_axi_read_if_monitor_bfm + // This struct is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_MONITOR_STRUCT + prim_axi_read_if_monitor_s prim_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a prim_axi_read_if_monitor_s + // structure. The function returns the handle to the prim_axi_read_if_monitor_struct. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm + // to communicate initiator driven data to prim_axi_read_if_driver_bfm. + // This struct is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_INITIATOR_STRUCT + prim_axi_read_if_initiator_s prim_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a prim_axi_read_if_initiator_s + // structure. The function returns the handle to the prim_axi_read_if_initiator_struct. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm + // to communicate Responder driven data to prim_axi_read_if_driver_bfm. + // This struct is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_RESPONDER_STRUCT + prim_axi_read_if_responder_s prim_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a prim_axi_read_if_responder_s + // structure. The function returns the handle to the prim_axi_read_if_responder_struct. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_arready:0x%x prim_rdata:0x%x prim_rresp:0x%x prim_rid:0x%x prim_rlast:0x%x prim_rvalid:0x%x ",prim_arready,prim_rdata,prim_rresp,prim_rid,prim_rlast,prim_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_arready == RHS.prim_arready) + &&(this.prim_rdata == RHS.prim_rdata) + &&(this.prim_rresp == RHS.prim_rresp) + &&(this.prim_rid == RHS.prim_rid) + &&(this.prim_rlast == RHS.prim_rlast) + &&(this.prim_rvalid == RHS.prim_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_arready = RHS.prim_arready; + this.prim_rdata = RHS.prim_rdata; + this.prim_rresp = RHS.prim_rresp; + this.prim_rid = RHS.prim_rid; + this.prim_rlast = RHS.prim_rlast; + this.prim_rvalid = RHS.prim_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"prim_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_arready,"prim_arready"); + $add_attribute(transaction_view_h,prim_rdata,"prim_rdata"); + $add_attribute(transaction_view_h,prim_rresp,"prim_rresp"); + $add_attribute(transaction_view_h,prim_rid,"prim_rid"); + $add_attribute(transaction_view_h,prim_rlast,"prim_rlast"); + $add_attribute(transaction_view_h,prim_rvalid,"prim_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..e31162373 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records prim_axi_read_if transaction information using +// a covergroup named prim_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup prim_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_arready: coverpoint coverage_trans.prim_arready; + prim_rdata: coverpoint coverage_trans.prim_rdata; + prim_rresp: coverpoint coverage_trans.prim_rresp; + prim_rid: coverpoint coverage_trans.prim_rid; + prim_rlast: coverpoint coverage_trans.prim_rlast; + prim_rvalid: coverpoint coverage_trans.prim_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + prim_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + prim_axi_read_if_transaction_cg.set_inst_name($sformatf("prim_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + prim_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/yaml/prim_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/yaml/prim_axi_read_if_interface.yaml new file mode 100644 index 000000000..e8716f4a1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_read_if_pkg/yaml/prim_axi_read_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + prim_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/.project new file mode 100644 index 000000000..97cc8aeb8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/.project @@ -0,0 +1,30 @@ + + + prim_axi_write_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/.svproject new file mode 100644 index 000000000..79b1f983b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/Makefile new file mode 100644 index 000000000..623a7daa4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/Makefile @@ -0,0 +1,66 @@ +# prim_axi_write_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +prim_axi_write_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f + +prim_axi_write_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f + +prim_axi_write_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f + +COMP_prim_axi_write_if_PKG_TGT_0 = q_comp_prim_axi_write_if_pkg +COMP_prim_axi_write_if_PKG_TGT_1 = v_comp_prim_axi_write_if_pkg +COMP_prim_axi_write_if_PKG_TGT = $(COMP_prim_axi_write_if_PKG_TGT_$(USE_VELOCE)) + +comp_prim_axi_write_if_pkg: $(COMP_prim_axi_write_if_PKG_TGT) + +q_comp_prim_axi_write_if_pkg: + $(HDL_COMP_CMD) $(prim_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_write_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_write_if_PKG_XRTL) + +v_comp_prim_axi_write_if_pkg: + $(HVL_COMP_CMD) $(prim_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_write_if_PKG) + $(VELANALYZE_CMD) $(prim_axi_write_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(prim_axi_write_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_write_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export prim_axi_write_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/dpi + +C_FILE_COMPILE_LIST_prim_axi_write_if_pkg = \ + +O_FILE_COMPILE_LIST_prim_axi_write_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_prim_axi_write_if_pkg:.c=.o)) + +GCC_COMP_ARGS_prim_axi_write_if_pkg += -I$(prim_axi_write_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_prim_axi_write_if_pkg += $(prim_axi_write_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_prim_axi_write_if_pkg += \ + \ + -o .so + +comp_prim_axi_write_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_prim_axi_write_if_pkg) $(C_FILE_COMPILE_LIST_prim_axi_write_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_prim_axi_write_if_pkg) $(O_FILE_COMPILE_LIST_prim_axi_write_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/compile.do new file mode 100644 index 000000000..677a4a098 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of prim_axi_write_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if.compile new file mode 100644 index 000000000..bd0dc7378 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if.compile @@ -0,0 +1,3 @@ +needs: + - prim_axi_write_if_hvl.compile + - prim_axi_write_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_bfm.vinfo new file mode 100644 index 000000000..aaa26f79c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use prim_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/prim_axi_write_if_if.sv +src/prim_axi_write_if_driver_bfm.sv +src/prim_axi_write_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_common.compile new file mode 100644 index 000000000..f496fac10 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f new file mode 100644 index 000000000..efc271244 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f new file mode 100644 index 000000000..711212b62 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f new file mode 100644 index 000000000..9dc37651b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hdl.compile new file mode 100644 index 000000000..547090a3d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./prim_axi_write_if_common.compile +incdir: + - . +src: + - src/prim_axi_write_if_if.sv + - src/prim_axi_write_if_monitor_bfm.sv + - src/prim_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hvl.compile new file mode 100644 index 000000000..07cd15926 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./prim_axi_write_if_common.compile +incdir: + - . +src: + - prim_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.sv new file mode 100644 index 000000000..78143d109 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_write_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import prim_axi_write_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/prim_axi_write_if_macros.svh" + + export prim_axi_write_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/prim_axi_write_if_typedefs.svh" + `include "src/prim_axi_write_if_transaction.svh" + + `include "src/prim_axi_write_if_configuration.svh" + `include "src/prim_axi_write_if_driver.svh" + `include "src/prim_axi_write_if_monitor.svh" + + `include "src/prim_axi_write_if_transaction_coverage.svh" + `include "src/prim_axi_write_if_sequence_base.svh" + `include "src/prim_axi_write_if_random_sequence.svh" + + `include "src/prim_axi_write_if_responder_sequence.svh" + `include "src/prim_axi_write_if2reg_adapter.svh" + + `include "src/prim_axi_write_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.vinfo new file mode 100644 index 000000000..da70e9f95 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use prim_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +prim_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.sv new file mode 100644 index 000000000..dbe4a2871 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_write_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/prim_axi_write_if_typedefs_hdl.svh" + `include "src/prim_axi_write_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.vinfo new file mode 100644 index 000000000..8eb50779a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_sve.F new file mode 100644 index 000000000..2232ac433 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if2reg_adapter.svh new file mode 100644 index 000000000..1aad1f2c1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the prim_axi_write_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( prim_axi_write_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "prim_axi_write_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : prim_axi_write_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_agent.svh new file mode 100644 index 000000000..db46f4fe1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(prim_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(prim_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(prim_axi_write_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( prim_axi_write_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_configuration.svh new file mode 100644 index 000000000..114b7e0ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the prim_axi_write_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual prim_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual prim_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_write_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup prim_axi_write_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_CONFIGURATION_STRUCT + prim_axi_write_if_configuration_s prim_axi_write_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a prim_axi_write_if_configuration_s + // structure. The function returns the handle to the prim_axi_write_if_configuration_struct. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + prim_axi_write_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + prim_axi_write_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + prim_axi_write_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + prim_axi_write_if_configuration_cg.set_inst_name($sformatf("prim_axi_write_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver.svh new file mode 100644 index 000000000..f1028f48a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual prim_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( prim_axi_write_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in prim_axi_write_if_macros.svh +//******************************************************************* +// Initiator macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm +// to communicate initiator driven data to prim_axi_write_if_driver_bfm. +`prim_axi_write_if_INITIATOR_STRUCT + prim_axi_write_if_initiator_s prim_axi_write_if_initiator_struct; +//******************************************************************* +// Responder macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm +// to communicate Responder driven data to prim_axi_write_if_driver_bfm. +`prim_axi_write_if_RESPONDER_STRUCT + prim_axi_write_if_responder_s prim_axi_write_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + prim_axi_write_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(prim_axi_write_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + prim_axi_write_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(prim_axi_write_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver_bfm.sv new file mode 100644 index 000000000..62c377ccd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the prim_axi_write_if signal driving. It is +// accessed by the uvm prim_axi_write_if driver through a virtual interface +// handle in the prim_axi_write_if configuration. It drives the singals passed +// in through the port connection named bus of type prim_axi_write_if_if. +// +// Input signals from the prim_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within prim_axi_write_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_write_if_pkg_hdl::*; +`include "src/prim_axi_write_if_macros.svh" + +interface prim_axi_write_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (prim_axi_write_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute prim_axi_write_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + prim_axi_write_if_pkg::prim_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in prim_axi_write_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from prim_axi_write_if_driver to this BFM + // **************************************************************************** + `prim_axi_write_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm + // to communicate initiator driven data to prim_axi_write_if_driver_bfm. + `prim_axi_write_if_INITIATOR_STRUCT + prim_axi_write_if_initiator_s initiator_struct; + // Responder macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm + // to communicate Responder driven data to prim_axi_write_if_driver_bfm. + `prim_axi_write_if_RESPONDER_STRUCT + prim_axi_write_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(prim_axi_write_if_configuration_s prim_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input prim_axi_write_if_initiator_s prim_axi_write_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output prim_axi_write_if_responder_s prim_axi_write_if_responder_struct + );// pragma tbx xtf + // + // Members within the prim_axi_write_if_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Members within the prim_axi_write_if_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + initiator_struct = prim_axi_write_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // prim_axi_write_if_responder_struct.xyz = awready_i; // + // prim_axi_write_if_responder_struct.xyz = wready_i; // + // prim_axi_write_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // prim_axi_write_if_responder_struct.xyz = bid_i; // + // prim_axi_write_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // prim_axi_write_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = prim_axi_write_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output prim_axi_write_if_initiator_s prim_axi_write_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input prim_axi_write_if_responder_s prim_axi_write_if_responder_struct + );// pragma tbx xtf + // Variables within the prim_axi_write_if_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Variables within the prim_axi_write_if_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= prim_axi_write_if_initiator_struct.xyz; // + // wready_o <= prim_axi_write_if_initiator_struct.xyz; // + // bresp_o <= prim_axi_write_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= prim_axi_write_if_initiator_struct.xyz; // + // bvalid_o <= prim_axi_write_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the prim_axi_write_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the prim_axi_write_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_if.sv new file mode 100644 index 000000000..de556ace4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the prim_axi_write_if interface signals. +// It is instantiated once per prim_axi_write_if bus. Bus Functional Models, +// BFM's named prim_axi_write_if_driver_bfm, are used to drive signals on the bus. +// BFM's named prim_axi_write_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(prim_axi_write_if_bus.awready), // Agent input +// .dut_signal_port(prim_axi_write_if_bus.wready), // Agent input +// .dut_signal_port(prim_axi_write_if_bus.bresp), // Agent input +// .dut_signal_port(prim_axi_write_if_bus.bid), // Agent input +// .dut_signal_port(prim_axi_write_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import prim_axi_write_if_pkg_hdl::*; + +interface prim_axi_write_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_macros.svh new file mode 100644 index 000000000..95c6a8bf7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the prim_axi_write_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the prim_axi_write_if_configuration class. +// + `define prim_axi_write_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } prim_axi_write_if_configuration_s; + + `define prim_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function prim_axi_write_if_configuration_s to_struct();\ + prim_axi_write_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( prim_axi_write_if_configuration_struct );\ + endfunction + + `define prim_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(prim_axi_write_if_configuration_s prim_axi_write_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = prim_axi_write_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the prim_axi_write_if_transaction class. +// + `define prim_axi_write_if_MONITOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } prim_axi_write_if_monitor_s; + + `define prim_axi_write_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function prim_axi_write_if_monitor_s to_monitor_struct();\ + prim_axi_write_if_monitor_struct = \ + { \ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( prim_axi_write_if_monitor_struct);\ + endfunction\ + + `define prim_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(prim_axi_write_if_monitor_s prim_axi_write_if_monitor_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = prim_axi_write_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the prim_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_write_if_INITIATOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } prim_axi_write_if_initiator_s; + + `define prim_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function prim_axi_write_if_initiator_s to_initiator_struct();\ + prim_axi_write_if_initiator_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( prim_axi_write_if_initiator_struct);\ + endfunction + + `define prim_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(prim_axi_write_if_initiator_s prim_axi_write_if_initiator_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = prim_axi_write_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the prim_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_write_if_RESPONDER_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } prim_axi_write_if_responder_s; + + `define prim_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function prim_axi_write_if_responder_s to_responder_struct();\ + prim_axi_write_if_responder_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( prim_axi_write_if_responder_struct);\ + endfunction + + `define prim_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(prim_axi_write_if_responder_s prim_axi_write_if_responder_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = prim_axi_write_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor.svh new file mode 100644 index 000000000..67050c334 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives prim_axi_write_if transactions observed by the +// prim_axi_write_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual prim_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_write_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`prim_axi_write_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the prim_axi_write_if_monitor_struct. + virtual function void notify_transaction(input prim_axi_write_if_monitor_s prim_axi_write_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(prim_axi_write_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor_bfm.sv new file mode 100644 index 000000000..7719d6325 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the prim_axi_write_if signal monitoring. +// It is accessed by the uvm prim_axi_write_if monitor through a virtual +// interface handle in the prim_axi_write_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type prim_axi_write_if_if. +// +// Input signals from the prim_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the prim_axi_write_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_write_if_pkg_hdl::*; +`include "src/prim_axi_write_if_macros.svh" + + +interface prim_axi_write_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( prim_axi_write_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute prim_axi_write_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`prim_axi_write_if_MONITOR_STRUCT + prim_axi_write_if_monitor_s prim_axi_write_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `prim_axi_write_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + prim_axi_write_if_pkg::prim_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( prim_axi_write_if_monitor_struct ); + + + proxy.notify_transaction( prim_axi_write_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(prim_axi_write_if_configuration_s prim_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output prim_axi_write_if_monitor_s prim_axi_write_if_monitor_struct); + // + // Available struct members: + // // prim_axi_write_if_monitor_struct.prim_awready + // // prim_axi_write_if_monitor_struct.prim_wready + // // prim_axi_write_if_monitor_struct.prim_bresp + // // prim_axi_write_if_monitor_struct.prim_bid + // // prim_axi_write_if_monitor_struct.prim_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // prim_axi_write_if_monitor_struct.xyz = awready_i; // + // prim_axi_write_if_monitor_struct.xyz = wready_i; // + // prim_axi_write_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // prim_axi_write_if_monitor_struct.xyz = bid_i; // + // prim_axi_write_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_random_sequence.svh new file mode 100644 index 000000000..12e4f9c83 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the prim_axi_write_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a prim_axi_write_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_write_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "prim_axi_write_if_random_sequence::body()-prim_axi_write_if_transaction randomization failed") + // Send the transaction to the prim_axi_write_if_driver_bfm via the sequencer and prim_axi_write_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: prim_axi_write_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_responder_sequence.svh new file mode 100644 index 000000000..eec3703ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_write_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "prim_axi_write_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_sequence_base.svh new file mode 100644 index 000000000..a606d7b2b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_write_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_write_if_transaction_req_t; + prim_axi_write_if_transaction_req_t req; + typedef prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_write_if_transaction_rsp_t; + prim_axi_write_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = prim_axi_write_if_transaction_req_t::type_id::create("req"); + rsp = prim_axi_write_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction.svh new file mode 100644 index 000000000..7e1571969 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an prim_axi_write_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( prim_axi_write_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_awready ; + logic prim_wready ; + axi_pkg::axi_burst_e prim_bresp ; + logic prim_bid ; + logic prim_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in prim_axi_write_if_macros.svh + + //******************************************************************* + // Monitor macro used by prim_axi_write_if_monitor and prim_axi_write_if_monitor_bfm + // This struct is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_MONITOR_STRUCT + prim_axi_write_if_monitor_s prim_axi_write_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a prim_axi_write_if_monitor_s + // structure. The function returns the handle to the prim_axi_write_if_monitor_struct. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm + // to communicate initiator driven data to prim_axi_write_if_driver_bfm. + // This struct is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_INITIATOR_STRUCT + prim_axi_write_if_initiator_s prim_axi_write_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a prim_axi_write_if_initiator_s + // structure. The function returns the handle to the prim_axi_write_if_initiator_struct. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm + // to communicate Responder driven data to prim_axi_write_if_driver_bfm. + // This struct is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_RESPONDER_STRUCT + prim_axi_write_if_responder_s prim_axi_write_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a prim_axi_write_if_responder_s + // structure. The function returns the handle to the prim_axi_write_if_responder_struct. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awready:0x%x prim_wready:0x%x prim_bresp:0x%x prim_bid:0x%x prim_bvalid:0x%x ",prim_awready,prim_wready,prim_bresp,prim_bid,prim_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_awready == RHS.prim_awready) + &&(this.prim_wready == RHS.prim_wready) + &&(this.prim_bresp == RHS.prim_bresp) + &&(this.prim_bid == RHS.prim_bid) + &&(this.prim_bvalid == RHS.prim_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awready = RHS.prim_awready; + this.prim_wready = RHS.prim_wready; + this.prim_bresp = RHS.prim_bresp; + this.prim_bid = RHS.prim_bid; + this.prim_bvalid = RHS.prim_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"prim_axi_write_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awready,"prim_awready"); + $add_attribute(transaction_view_h,prim_wready,"prim_wready"); + $add_attribute(transaction_view_h,prim_bresp,"prim_bresp"); + $add_attribute(transaction_view_h,prim_bid,"prim_bid"); + $add_attribute(transaction_view_h,prim_bvalid,"prim_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction_coverage.svh new file mode 100644 index 000000000..6f9d9804b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records prim_axi_write_if transaction information using +// a covergroup named prim_axi_write_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_write_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup prim_axi_write_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awready: coverpoint coverage_trans.prim_awready; + prim_wready: coverpoint coverage_trans.prim_wready; + prim_bresp: coverpoint coverage_trans.prim_bresp; + prim_bid: coverpoint coverage_trans.prim_bid; + prim_bvalid: coverpoint coverage_trans.prim_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + prim_axi_write_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + prim_axi_write_if_transaction_cg.set_inst_name($sformatf("prim_axi_write_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + prim_axi_write_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/yaml/prim_axi_write_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/yaml/prim_axi_write_if_interface.yaml new file mode 100644 index 000000000..e5bd3c347 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/prim_axi_write_if_pkg/yaml/prim_axi_write_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + prim_axi_write_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/.project new file mode 100644 index 000000000..2683cb016 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + secreg_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..72277d03c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..2d3ef8fcd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# secreg_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +secreg_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f + +secreg_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f + +secreg_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f + +COMP_secreg_axi_read_if_PKG_TGT_0 = q_comp_secreg_axi_read_if_pkg +COMP_secreg_axi_read_if_PKG_TGT_1 = v_comp_secreg_axi_read_if_pkg +COMP_secreg_axi_read_if_PKG_TGT = $(COMP_secreg_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_secreg_axi_read_if_pkg: $(COMP_secreg_axi_read_if_PKG_TGT) + +q_comp_secreg_axi_read_if_pkg: + $(HDL_COMP_CMD) $(secreg_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(secreg_axi_read_if_PKG) + $(HDL_COMP_CMD) $(secreg_axi_read_if_PKG_XRTL) + +v_comp_secreg_axi_read_if_pkg: + $(HVL_COMP_CMD) $(secreg_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(secreg_axi_read_if_PKG) + $(VELANALYZE_CMD) $(secreg_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(secreg_axi_read_if_PKG) + $(HDL_COMP_CMD) $(secreg_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export secreg_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_secreg_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_secreg_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_secreg_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_secreg_axi_read_if_pkg += -I$(secreg_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_secreg_axi_read_if_pkg += $(secreg_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_secreg_axi_read_if_pkg += \ + \ + -o .so + +comp_secreg_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_secreg_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_secreg_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_secreg_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_secreg_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..864496dd5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of secreg_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if.compile new file mode 100644 index 000000000..c7d9ea90d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - secreg_axi_read_if_hvl.compile + - secreg_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..557cbed12 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use secreg_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/secreg_axi_read_if_if.sv +src/secreg_axi_read_if_driver_bfm.sv +src/secreg_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_common.compile new file mode 100644 index 000000000..fbd65847f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..7f0ec9552 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..d8510e398 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..cb3095083 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hdl.compile new file mode 100644 index 000000000..d84364941 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./secreg_axi_read_if_common.compile +incdir: + - . +src: + - src/secreg_axi_read_if_if.sv + - src/secreg_axi_read_if_monitor_bfm.sv + - src/secreg_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hvl.compile new file mode 100644 index 000000000..14ff5a6a2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./secreg_axi_read_if_common.compile +incdir: + - . +src: + - secreg_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.sv new file mode 100644 index 000000000..a8766a676 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package secreg_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import secreg_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/secreg_axi_read_if_macros.svh" + + export secreg_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/secreg_axi_read_if_typedefs.svh" + `include "src/secreg_axi_read_if_transaction.svh" + + `include "src/secreg_axi_read_if_configuration.svh" + `include "src/secreg_axi_read_if_driver.svh" + `include "src/secreg_axi_read_if_monitor.svh" + + `include "src/secreg_axi_read_if_transaction_coverage.svh" + `include "src/secreg_axi_read_if_sequence_base.svh" + `include "src/secreg_axi_read_if_random_sequence.svh" + + `include "src/secreg_axi_read_if_responder_sequence.svh" + `include "src/secreg_axi_read_if2reg_adapter.svh" + + `include "src/secreg_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..9ef82e6b1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use secreg_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +secreg_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..6e5d0d9fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package secreg_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/secreg_axi_read_if_typedefs_hdl.svh" + `include "src/secreg_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..c8b7f5572 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..ec83c1931 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..9b9b95c9c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the secreg_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( secreg_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "secreg_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : secreg_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_agent.svh new file mode 100644 index 000000000..b7809cae6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(secreg_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(secreg_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(secreg_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( secreg_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_configuration.svh new file mode 100644 index 000000000..2fff5b259 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the secreg_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual secreg_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual secreg_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( secreg_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup secreg_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_CONFIGURATION_STRUCT + secreg_axi_read_if_configuration_s secreg_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a secreg_axi_read_if_configuration_s + // structure. The function returns the handle to the secreg_axi_read_if_configuration_struct. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + secreg_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + secreg_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + secreg_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + secreg_axi_read_if_configuration_cg.set_inst_name($sformatf("secreg_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver.svh new file mode 100644 index 000000000..02e992918 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual secreg_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( secreg_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in secreg_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm +// to communicate initiator driven data to secreg_axi_read_if_driver_bfm. +`secreg_axi_read_if_INITIATOR_STRUCT + secreg_axi_read_if_initiator_s secreg_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm +// to communicate Responder driven data to secreg_axi_read_if_driver_bfm. +`secreg_axi_read_if_RESPONDER_STRUCT + secreg_axi_read_if_responder_s secreg_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + secreg_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(secreg_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + secreg_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(secreg_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..4ebf76fbf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the secreg_axi_read_if signal driving. It is +// accessed by the uvm secreg_axi_read_if driver through a virtual interface +// handle in the secreg_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type secreg_axi_read_if_if. +// +// Input signals from the secreg_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within secreg_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import secreg_axi_read_if_pkg_hdl::*; +`include "src/secreg_axi_read_if_macros.svh" + +interface secreg_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (secreg_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute secreg_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + secreg_axi_read_if_pkg::secreg_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in secreg_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from secreg_axi_read_if_driver to this BFM + // **************************************************************************** + `secreg_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm + // to communicate initiator driven data to secreg_axi_read_if_driver_bfm. + `secreg_axi_read_if_INITIATOR_STRUCT + secreg_axi_read_if_initiator_s initiator_struct; + // Responder macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm + // to communicate Responder driven data to secreg_axi_read_if_driver_bfm. + `secreg_axi_read_if_RESPONDER_STRUCT + secreg_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(secreg_axi_read_if_configuration_s secreg_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = secreg_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input secreg_axi_read_if_initiator_s secreg_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output secreg_axi_read_if_responder_s secreg_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the secreg_axi_read_if_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Members within the secreg_axi_read_if_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + initiator_struct = secreg_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // secreg_axi_read_if_responder_struct.xyz = arready_i; // + // secreg_axi_read_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // secreg_axi_read_if_responder_struct.xyz = rresp_i; // + // secreg_axi_read_if_responder_struct.xyz = rid_i; // + // secreg_axi_read_if_responder_struct.xyz = rlast_i; // + // secreg_axi_read_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // secreg_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = secreg_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output secreg_axi_read_if_initiator_s secreg_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input secreg_axi_read_if_responder_s secreg_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the secreg_axi_read_if_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Variables within the secreg_axi_read_if_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= secreg_axi_read_if_initiator_struct.xyz; // + // rdata_o <= secreg_axi_read_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= secreg_axi_read_if_initiator_struct.xyz; // + // rid_o <= secreg_axi_read_if_initiator_struct.xyz; // + // rlast_o <= secreg_axi_read_if_initiator_struct.xyz; // + // rvalid_o <= secreg_axi_read_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the secreg_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the secreg_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_if.sv new file mode 100644 index 000000000..299364565 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the secreg_axi_read_if interface signals. +// It is instantiated once per secreg_axi_read_if bus. Bus Functional Models, +// BFM's named secreg_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named secreg_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(secreg_axi_read_if_bus.arready), // Agent input +// .dut_signal_port(secreg_axi_read_if_bus.rdata), // Agent input +// .dut_signal_port(secreg_axi_read_if_bus.rresp), // Agent input +// .dut_signal_port(secreg_axi_read_if_bus.rid), // Agent input +// .dut_signal_port(secreg_axi_read_if_bus.rlast), // Agent input +// .dut_signal_port(secreg_axi_read_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import secreg_axi_read_if_pkg_hdl::*; + +interface secreg_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_macros.svh new file mode 100644 index 000000000..01e181bac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the secreg_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the secreg_axi_read_if_configuration class. +// + `define secreg_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } secreg_axi_read_if_configuration_s; + + `define secreg_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function secreg_axi_read_if_configuration_s to_struct();\ + secreg_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( secreg_axi_read_if_configuration_struct );\ + endfunction + + `define secreg_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(secreg_axi_read_if_configuration_s secreg_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = secreg_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the secreg_axi_read_if_transaction class. +// + `define secreg_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } secreg_axi_read_if_monitor_s; + + `define secreg_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function secreg_axi_read_if_monitor_s to_monitor_struct();\ + secreg_axi_read_if_monitor_struct = \ + { \ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( secreg_axi_read_if_monitor_struct);\ + endfunction\ + + `define secreg_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(secreg_axi_read_if_monitor_s secreg_axi_read_if_monitor_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = secreg_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the secreg_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define secreg_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } secreg_axi_read_if_initiator_s; + + `define secreg_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function secreg_axi_read_if_initiator_s to_initiator_struct();\ + secreg_axi_read_if_initiator_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( secreg_axi_read_if_initiator_struct);\ + endfunction + + `define secreg_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(secreg_axi_read_if_initiator_s secreg_axi_read_if_initiator_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = secreg_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the secreg_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define secreg_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } secreg_axi_read_if_responder_s; + + `define secreg_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function secreg_axi_read_if_responder_s to_responder_struct();\ + secreg_axi_read_if_responder_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( secreg_axi_read_if_responder_struct);\ + endfunction + + `define secreg_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(secreg_axi_read_if_responder_s secreg_axi_read_if_responder_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = secreg_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor.svh new file mode 100644 index 000000000..4a1a86451 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives secreg_axi_read_if transactions observed by the +// secreg_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual secreg_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( secreg_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`secreg_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the secreg_axi_read_if_monitor_struct. + virtual function void notify_transaction(input secreg_axi_read_if_monitor_s secreg_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(secreg_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..88b287386 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the secreg_axi_read_if signal monitoring. +// It is accessed by the uvm secreg_axi_read_if monitor through a virtual +// interface handle in the secreg_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type secreg_axi_read_if_if. +// +// Input signals from the secreg_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the secreg_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import secreg_axi_read_if_pkg_hdl::*; +`include "src/secreg_axi_read_if_macros.svh" + + +interface secreg_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( secreg_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute secreg_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`secreg_axi_read_if_MONITOR_STRUCT + secreg_axi_read_if_monitor_s secreg_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `secreg_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + secreg_axi_read_if_pkg::secreg_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( secreg_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( secreg_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(secreg_axi_read_if_configuration_s secreg_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = secreg_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output secreg_axi_read_if_monitor_s secreg_axi_read_if_monitor_struct); + // + // Available struct members: + // // secreg_axi_read_if_monitor_struct.secreg_arready + // // secreg_axi_read_if_monitor_struct.secreg_rdata + // // secreg_axi_read_if_monitor_struct.secreg_rresp + // // secreg_axi_read_if_monitor_struct.secreg_rid + // // secreg_axi_read_if_monitor_struct.secreg_rlast + // // secreg_axi_read_if_monitor_struct.secreg_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // secreg_axi_read_if_monitor_struct.xyz = arready_i; // + // secreg_axi_read_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // secreg_axi_read_if_monitor_struct.xyz = rresp_i; // + // secreg_axi_read_if_monitor_struct.xyz = rid_i; // + // secreg_axi_read_if_monitor_struct.xyz = rlast_i; // + // secreg_axi_read_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..99ba1090a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the secreg_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a secreg_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends secreg_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( secreg_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "secreg_axi_read_if_random_sequence::body()-secreg_axi_read_if_transaction randomization failed") + // Send the transaction to the secreg_axi_read_if_driver_bfm via the sequencer and secreg_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: secreg_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..d67fab023 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends secreg_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( secreg_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "secreg_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..6f62375a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( secreg_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + secreg_axi_read_if_transaction_req_t; + secreg_axi_read_if_transaction_req_t req; + typedef secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + secreg_axi_read_if_transaction_rsp_t; + secreg_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = secreg_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = secreg_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction.svh new file mode 100644 index 000000000..6b47b5928 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an secreg_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( secreg_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic secreg_arready ; + logic [DW-1:0] secreg_rdata ; + axi_pkg::axi_burst_e secreg_rresp ; + logic [IW-1:0] secreg_rid ; + logic secreg_rlast ; + logic secreg_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in secreg_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by secreg_axi_read_if_monitor and secreg_axi_read_if_monitor_bfm + // This struct is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_MONITOR_STRUCT + secreg_axi_read_if_monitor_s secreg_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a secreg_axi_read_if_monitor_s + // structure. The function returns the handle to the secreg_axi_read_if_monitor_struct. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm + // to communicate initiator driven data to secreg_axi_read_if_driver_bfm. + // This struct is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_INITIATOR_STRUCT + secreg_axi_read_if_initiator_s secreg_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a secreg_axi_read_if_initiator_s + // structure. The function returns the handle to the secreg_axi_read_if_initiator_struct. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm + // to communicate Responder driven data to secreg_axi_read_if_driver_bfm. + // This struct is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_RESPONDER_STRUCT + secreg_axi_read_if_responder_s secreg_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a secreg_axi_read_if_responder_s + // structure. The function returns the handle to the secreg_axi_read_if_responder_struct. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_arready:0x%x secreg_rdata:0x%x secreg_rresp:0x%x secreg_rid:0x%x secreg_rlast:0x%x secreg_rvalid:0x%x ",secreg_arready,secreg_rdata,secreg_rresp,secreg_rid,secreg_rlast,secreg_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.secreg_arready == RHS.secreg_arready) + &&(this.secreg_rdata == RHS.secreg_rdata) + &&(this.secreg_rresp == RHS.secreg_rresp) + &&(this.secreg_rid == RHS.secreg_rid) + &&(this.secreg_rlast == RHS.secreg_rlast) + &&(this.secreg_rvalid == RHS.secreg_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_arready = RHS.secreg_arready; + this.secreg_rdata = RHS.secreg_rdata; + this.secreg_rresp = RHS.secreg_rresp; + this.secreg_rid = RHS.secreg_rid; + this.secreg_rlast = RHS.secreg_rlast; + this.secreg_rvalid = RHS.secreg_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"secreg_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_arready,"secreg_arready"); + $add_attribute(transaction_view_h,secreg_rdata,"secreg_rdata"); + $add_attribute(transaction_view_h,secreg_rresp,"secreg_rresp"); + $add_attribute(transaction_view_h,secreg_rid,"secreg_rid"); + $add_attribute(transaction_view_h,secreg_rlast,"secreg_rlast"); + $add_attribute(transaction_view_h,secreg_rvalid,"secreg_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..01ff22535 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records secreg_axi_read_if transaction information using +// a covergroup named secreg_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( secreg_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup secreg_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_arready: coverpoint coverage_trans.secreg_arready; + secreg_rdata: coverpoint coverage_trans.secreg_rdata; + secreg_rresp: coverpoint coverage_trans.secreg_rresp; + secreg_rid: coverpoint coverage_trans.secreg_rid; + secreg_rlast: coverpoint coverage_trans.secreg_rlast; + secreg_rvalid: coverpoint coverage_trans.secreg_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + secreg_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + secreg_axi_read_if_transaction_cg.set_inst_name($sformatf("secreg_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + secreg_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/yaml/secreg_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/yaml/secreg_axi_read_if_interface.yaml new file mode 100644 index 000000000..77d1a8ed1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_1/verification_ip/interface_packages/secreg_axi_read_if_pkg/yaml/secreg_axi_read_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + secreg_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/.project new file mode 100644 index 000000000..1462dcefd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/.project @@ -0,0 +1,37 @@ + + + fuse_ctrl + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + verification_ip + 2 + UVMF_VIP_LIBRARY_HOME + + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D/verification_ip + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/.svproject new file mode 100644 index 000000000..9e84acf61 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/docs/interfaces.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/docs/interfaces.csv new file mode 100644 index 000000000..121200b4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/docs/interfaces.csv @@ -0,0 +1,41 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +, +Interface Description, Interface Type, Interface Transaction, Interface Name, +fuse_ctrl_rst_agent, fuse_ctrl_rst_driver_bfm fuse_ctrl_rst_monitor_bfm, fuse_ctrl_rst_transaction, fuse_ctrl_rst_pkg_fuse_ctrl_rst_agent_BFM, +fuse_ctrl_core_axi_write_in_if_agent, fuse_ctrl_core_axi_write_in_driver_bfm fuse_ctrl_core_axi_write_in_monitor_bfm, fuse_ctrl_core_axi_write_in_transaction, fuse_ctrl_core_axi_write_in_pkg_fuse_ctrl_core_axi_write_in_if_agent_BFM, +fuse_ctrl_core_axi_write_out_if_agent, fuse_ctrl_core_axi_write_out_driver_bfm fuse_ctrl_core_axi_write_out_monitor_bfm, fuse_ctrl_core_axi_write_out_transaction, fuse_ctrl_core_axi_write_out_pkg_fuse_ctrl_core_axi_write_out_if_agent_BFM, +fuse_ctrl_prim_axi_write_in_if_agent, fuse_ctrl_prim_axi_write_in_driver_bfm fuse_ctrl_prim_axi_write_in_monitor_bfm, fuse_ctrl_prim_axi_write_in_transaction, fuse_ctrl_prim_axi_write_in_pkg_fuse_ctrl_prim_axi_write_in_if_agent_BFM, +fuse_ctrl_prim_axi_write_out_if_agent, fuse_ctrl_prim_axi_write_out_driver_bfm fuse_ctrl_prim_axi_write_out_monitor_bfm, fuse_ctrl_prim_axi_write_out_transaction, fuse_ctrl_prim_axi_write_out_pkg_fuse_ctrl_prim_axi_write_out_if_agent_BFM, +fuse_ctrl_core_axi_read_in_if_agent, fuse_ctrl_core_axi_read_in_driver_bfm fuse_ctrl_core_axi_read_in_monitor_bfm, fuse_ctrl_core_axi_read_in_transaction, fuse_ctrl_core_axi_read_in_pkg_fuse_ctrl_core_axi_read_in_if_agent_BFM, +fuse_ctrl_core_axi_read_out_if_agent, fuse_ctrl_core_axi_read_out_driver_bfm fuse_ctrl_core_axi_read_out_monitor_bfm, fuse_ctrl_core_axi_read_out_transaction, fuse_ctrl_core_axi_read_out_pkg_fuse_ctrl_core_axi_read_out_if_agent_BFM, +fuse_ctrl_prim_axi_read_in_if_agent, fuse_ctrl_prim_axi_read_in_driver_bfm fuse_ctrl_prim_axi_read_in_monitor_bfm, fuse_ctrl_prim_axi_read_in_transaction, fuse_ctrl_prim_axi_read_in_pkg_fuse_ctrl_prim_axi_read_in_if_agent_BFM, +fuse_ctrl_prim_axi_read_out_if_agent, fuse_ctrl_prim_axi_read_out_driver_bfm fuse_ctrl_prim_axi_read_out_monitor_bfm, fuse_ctrl_prim_axi_read_out_transaction, fuse_ctrl_prim_axi_read_out_pkg_fuse_ctrl_prim_axi_read_out_if_agent_BFM, +fuse_ctrl_secreg_axi_read_in_if_agent, fuse_ctrl_secreg_axi_read_in_driver_bfm fuse_ctrl_secreg_axi_read_in_monitor_bfm, fuse_ctrl_secreg_axi_read_in_transaction, fuse_ctrl_secreg_axi_read_in_pkg_fuse_ctrl_secreg_axi_read_in_if_agent_BFM, +fuse_ctrl_secreg_axi_read_out_if_agent, fuse_ctrl_secreg_axi_read_out_driver_bfm fuse_ctrl_secreg_axi_read_out_monitor_bfm, fuse_ctrl_secreg_axi_read_out_transaction, fuse_ctrl_secreg_axi_read_out_pkg_fuse_ctrl_secreg_axi_read_out_if_agent_BFM, +fuse_ctrl_lc_otp_in_if_agent, fuse_ctrl_lc_otp_in_driver_bfm fuse_ctrl_lc_otp_in_monitor_bfm, fuse_ctrl_lc_otp_in_transaction, fuse_ctrl_lc_otp_in_pkg_fuse_ctrl_lc_otp_in_if_agent_BFM, +fuse_ctrl_lc_otp_out_if_agent, fuse_ctrl_lc_otp_out_driver_bfm fuse_ctrl_lc_otp_out_monitor_bfm, fuse_ctrl_lc_otp_out_transaction, fuse_ctrl_lc_otp_out_pkg_fuse_ctrl_lc_otp_out_if_agent_BFM, +fuse_ctrl_in_if_agent, fuse_ctrl_in_driver_bfm fuse_ctrl_in_monitor_bfm, fuse_ctrl_in_transaction, fuse_ctrl_in_pkg_fuse_ctrl_in_if_agent_BFM, +fuse_ctrl_out_if_agent, fuse_ctrl_out_driver_bfm fuse_ctrl_out_monitor_bfm, fuse_ctrl_out_transaction, fuse_ctrl_out_pkg_fuse_ctrl_out_if_agent_BFM, + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/fuse_ctrl_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/fuse_ctrl_sve.F new file mode 100644 index 000000000..5ae38f3f9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/fuse_ctrl_sve.F @@ -0,0 +1,41 @@ + +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + +// BFM Files +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F + +// Environment Files +-F ${UVMF_VIP_LIBRARY_HOME}/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F + +// Bench Files ++incdir+./tb/tests +./tb/tests/fuse_ctrl_tests_pkg.sv + ++incdir+./tb/sequences +./tb/sequences/fuse_ctrl_sequences_pkg.sv + ++incdir+./tb/parameters +./tb/parameters/fuse_ctrl_parameters_pkg.sv + +./tb/testbench/hdl_top.sv +./tb/testbench/hvl_top.sv + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/rtl/dut.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/rtl/dut.compile new file mode 100644 index 000000000..9b0008fc5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/rtl/dut.compile @@ -0,0 +1,6 @@ + +# pragma uvmf custom dut_compile_info begin +src: + - ./vhdl/vhdl_dut.vhd + - ./verilog/verilog_dut.v +# pragma uvmf custom dut_compile_info end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.v b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.v new file mode 100644 index 000000000..96198441c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.v @@ -0,0 +1,21 @@ +module verilog_dut(clk, rst, in_signal, out_signal); + +input clk; +input rst; +input in_signal; +output out_signal; + +reg out_signal_o; + +always @(posedge clk) begin + if (rst) begin + out_signal_o <= 0; + end + else begin + out_signal_o <= ~in_signal; + end + end + +assign out_signal = out_signal_o; + +endmodule diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.vinfo new file mode 100644 index 000000000..87e95f36f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.vinfo @@ -0,0 +1 @@ +verilog_dut.v diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/rtl/vhdl/vhdl_dut.vhd b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/rtl/vhdl/vhdl_dut.vhd new file mode 100644 index 000000000..904aa37d1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/rtl/vhdl/vhdl_dut.vhd @@ -0,0 +1,21 @@ +library ieee; +use ieee.std_logic_1164.all ; + +entity vhdl_dut is + port ( clk : in std_logic ; + rst : in std_logic ; + in_signal : in std_logic ; + out_signal :out std_logic + ); +end vhdl_dut; + +architecture rtl of vhdl_dut is + begin + P1: process + variable out_signal_o : std_logic; + begin + wait until clk'event and clk = '1'; + out_signal_o := in_signal; + out_signal <= out_signal_o; + end process; + end rtl; diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/Makefile new file mode 100644 index 000000000..c794443c2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/Makefile @@ -0,0 +1,376 @@ + +# +#---------------------------------------------------------------------- +# +# DESCRIPTION: This makefile includes the shared makefile and contains +# bench level make targets. +# +#---------------------------------------------------------------------- + + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +# ********************************************************************************************* +# UVMF library directory: +# This variable points to the UVMF release where uvmf_base_pkg directory resides. +# This variable points to release code that is not user modified. +# This variable allows for UVMF release directories to reside independent of project related verification IP and project bench directories. +# This code below looks "upward" for directory starting with UVMF_* and returns first match for use with the release examples. +UVMF_HOME ?= ___PLEASE_SET_AN_ENVIRONMENT_VARIABLE_NAMED_UVMF_HOME_TO_POINT_TO_THE_UVMF_INSTALLATION___ + +# pragma uvmf custom exports begin +# +# Project(s) specific verification IP library: +# Directory where reusable verification packages for interfaces, environments, utilities, etc. reside. +# This variable allows for your verification IP to reside independent of project bench and UVMF release directories. +# For examples deployed with UVMF this will be $(UVMF_HOME)//verification_ip +export UVMF_VIP_LIBRARY_HOME ?= $(PWD)/../../../verification_ip +# +# Project specific bench: +# Directory where bench specific code is located. +# This variable allows for project_benches to reside independent of verification IP and UVMF release directories. +# For examples deployed with UVMF this will be $(UVMF_HOME)//project_benches/ +export UVMF_PROJECT_DIR ?= $(PWD)/.. +# +# +# pragma uvmf custom exports end +# ********************************************************************************************* + +## Check PATH for required vinfo scripts +PVAL := $(shell command -v make_filelist.py 2> /dev/null) +ifndef PVAL + MFLIST = $(UVMF_HOME)/scripts/make_filelist.py +else + MFLIST = make_filelist.py +endif + + +# Set test case specific Variables +TEST_NAME ?= test_top + +TEST_SEED ?= random +UVM_CLI_ARGS = + +# Usage of Veloce, etc. to be input by the user (subject to defaults) +USE_VELOCE ?= 0 + +# Usage of vinfo flow for generating file list +USE_VINFO ?= 0 + +# Usage of Veloce and Questa profilers +USE_VELOCE_PROFILER ?= 0 +USE_QUESTA_PROFILER ?= 0 + + +# Set project Variables +TEST_PLAN_NAME = fuse_ctrl_TestPlan +REPORTING_DO_FILE = fuse_ctrl_reports_script + + +# Include makefile that includes targets for UVM_VIP_Library packages +include $(UVMF_HOME)/scripts/Makefile + + + + +# Include all requisite interface package targets for this bench +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/Makefile + +# Include all requisite environment package targets for this bench +include $(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg/Makefile + + + +# Add to default compile/load/run arguments +VCOM_ARGS += + +# Note: vsim-3009 error can be eliminated by adding -timescale 1ps/1ps to VLOG_ARGS + +VLOG_ARGS += $(UVM_DISABLE_FILE_LINE_CMD) + +VELANALYZE_ARGS += +VELANALYZE_HVL_ARGS += + +BATCH_VOPT_ARGS += +DEBUG_VOPT_ARGS += +EXTRA_VOPT_TOPS += +COMMON_VSIM_ARGS += +COMMON_VSIM_ARGS += + + +BATCH_VSIM_ARGS += #-uvmcontrol=none +DEBUG_VSIM_ARGS += +EXTRA_VSIM_TOPS += + +# pragma uvmf custom additional_args begin +# pragma uvmf custom additional_args end + + +# Project bench package source +fuse_ctrl_PARAMETERS_PKG ?=\ +$(UVMF_PROJECT_DIR)/tb/parameters/fuse_ctrl_parameters_pkg.sv + + +fuse_ctrl_SEQUENCES_PKG ?=\ +$(UVMF_PROJECT_DIR)/tb/sequences/fuse_ctrl_sequences_pkg.sv + + +fuse_ctrl_TEST_PKG ?=\ +$(UVMF_PROJECT_DIR)/tb/tests/fuse_ctrl_tests_pkg.sv + +# pragma uvmf custom dut_files begin +# UVMF_CHANGE_ME : Reference Verilog DUT source. +fuse_ctrl_VERILOG_DUT ?=\ +$(UVMF_PROJECT_DIR)/../../../../../integration/rtl/config_defines.svh +$(UVMF_PROJECT_DIR)/../../../../../integration/rtl/caliptra_reg_defines.svh +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_sva.svh +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_macros.svh +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_sram.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/ahb_defines_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_ahb_srom.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/apb_slv_sif.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/ahb_slv_sif.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_icg.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/clk_gate.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_2ff_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/ahb_to_reg_adapter.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/skidbuffer.v +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_util_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_alert_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_subreg_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_mubi_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_cipher_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sparse_fsm_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_otp_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_ram_1p_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../lc_ctrl/rtl/lc_ctrl_reg_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../lc_ctrl/rtl/lc_ctrl_state_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../lc_ctrl/rtl/lc_ctrl_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_flop_en.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_flop.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_buf.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_otp.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_ram_1p.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_and2.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_flop_en.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_cdc_rand_delay.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_flop_2sync.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_lfsr.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_double_lfsr.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_arbiter_fixed.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_arbiter_tree.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_edn_req.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_present.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_lc_sender.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sync_reqack.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sync_reqack_data.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_mubi4_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_diff_decode.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sec_anchor_buf.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_slicer.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_count.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sparse_fsm_flop.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_dom_and_2share.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sec_anchor_flop.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_reg_we_check.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_packer_fifo.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_max_tree.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_subreg_arb.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_subreg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_intr_hw.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_onehot_check.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_mubi8_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_mubi8_sender.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_fifo_sync_cnt.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_buf.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_lc_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_alert_receiver.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_flop.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_alert_sender.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_fifo_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_arbiter_ppc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sum_tree.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_subreg_ext.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_edge_detector.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_blanker.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_ram_1p_adv.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_assert_multiple.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_assert.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/sram2tlul.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_adapter_host.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_adapter_reg.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_adapter_sram.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_cmd_intg_chk.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_cmd_intg_gen.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_data_integ_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_data_integ_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_err_resp.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_err.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_fifo_async.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_fifo_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_lc_gate.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_rsp_intg_chk.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_rsp_intg_gen.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_socket_1n.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_socket_m1.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_sram_byte.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_if.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_addr.v +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_sub_rd.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_sub_wr.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_sub_arb.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_sub.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_22_16_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_22_16_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_28_22_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_28_22_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_39_32_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_39_32_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_64_57_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_64_57_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_72_64_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_72_64_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_22_16_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_22_16_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_39_32_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_39_32_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_72_64_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_72_64_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_76_68_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_76_68_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_22_16_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_22_16_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_28_22_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_28_22_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_39_32_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_39_32_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_64_57_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_64_57_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_72_64_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_72_64_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_22_16_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_22_16_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_39_32_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_39_32_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_72_64_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_72_64_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_76_68_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_76_68_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../axi2tlul/rtl/axi2tlul_cmd_intg_gen.sv +$(UVMF_PROJECT_DIR)/../../../../../axi2tlul/rtl/sub2tlul.sv +$(UVMF_PROJECT_DIR)/../../../../../axi2tlul/rtl/axi2tlul.sv +$(UVMF_PROJECT_DIR)/../../../../../entropy_src/rtl/entropy_src_main_sm_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../entropy_src/rtl/entropy_src_ack_sm_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../entropy_src/rtl/entropy_src_reg_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../entropy_src/rtl/entropy_src_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../edn/rtl/edn_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../ast/rtl/ast_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../pwrmgr/rtl/pwrmgr_reg_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../pwrmgr/rtl/pwrmgr_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_reg_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_part_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_core_reg_top.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_prim_reg_top.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_dai.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_ecc_reg.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_lci.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_lfsr_timer.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_part_buf.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_part_unbuf.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_scrmbl.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_top.sv + + +# UVMF_CHANGE_ME : Reference VHDL DUT source. +fuse_ctrl_VHDL_DUT ?=\ +$(UVMF_PROJECT_DIR)/rtl/vhdl/vhdl_dut.vhd +# pragma uvmf custom dut_files end + + +# Project bench package targets +COMP_fuse_ctrl_PARAMETERS_PKG_TGT_0 = q_comp_fuse_ctrl_parameters_pkg +COMP_fuse_ctrl_PARAMETERS_PKG_TGT_1 = v_comp_fuse_ctrl_parameters_pkg +COMP_fuse_ctrl_PARAMETERS_PKG_TGT = $(COMP_fuse_ctrl_PARAMETERS_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_parameters_pkg: $(COMP_fuse_ctrl_PARAMETERS_PKG_TGT) + +q_comp_fuse_ctrl_parameters_pkg: + $(HVL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/parameters $(fuse_ctrl_PARAMETERS_PKG) + +v_comp_fuse_ctrl_parameters_pkg: q_comp_fuse_ctrl_parameters_pkg + $(HDL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/parameters $(fuse_ctrl_PARAMETERS_PKG) + + +comp_fuse_ctrl_sequence_pkg: + $(HVL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/sequences $(fuse_ctrl_SEQUENCES_PKG) + +comp_fuse_ctrl_tests_pkg: + $(HVL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/tests $(fuse_ctrl_TEST_PKG) + +# pragma uvmf custom dut_compile_make_target begin +# UVMF_CHANGE_ME : Add make target to compile your verilog dut here +comp_fuse_ctrl_verilog_dut: + echo "Compile your verilog DUT here" + $(HDL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/../../../../../libs/rtl $(fuse_ctrl_VERILOG_DUT) + +# UVMF_CHANGE_ME : Add make target to compile your vhdl dut here +comp_fuse_ctrl_vhdl_dut: + echo "Compile your vhdl DUT here" + $(HDL_COMP_CMD_VHDL) $(fuse_ctrl_VHDL_DUT) + +# UVMF_CHANGE_ME : Add make target to compile your dut here +comp_fuse_ctrl_dut: comp_fuse_ctrl_vhdl_dut comp_fuse_ctrl_verilog_dut +# pragma uvmf custom dut_compile_make_target end + + +BUILD_TGT_0 = make_build +BUILD_TGT_1 = vinfo_build +BUILD_TGT = $(BUILD_TGT_$(USE_VINFO)) + + +comp_hvl : comp_hvl_core + + +comp_hvl_core : \ + comp_fuse_ctrl_rst_pkg comp_fuse_ctrl_core_axi_write_in_pkg comp_fuse_ctrl_core_axi_write_out_pkg comp_fuse_ctrl_prim_axi_write_in_pkg comp_fuse_ctrl_prim_axi_write_out_pkg comp_fuse_ctrl_core_axi_read_in_pkg comp_fuse_ctrl_core_axi_read_out_pkg comp_fuse_ctrl_prim_axi_read_in_pkg comp_fuse_ctrl_prim_axi_read_out_pkg comp_fuse_ctrl_secreg_axi_read_in_pkg comp_fuse_ctrl_secreg_axi_read_out_pkg comp_fuse_ctrl_lc_otp_in_pkg comp_fuse_ctrl_lc_otp_out_pkg comp_fuse_ctrl_in_pkg comp_fuse_ctrl_out_pkg \ + comp_fuse_ctrl_env_pkg \ + comp_fuse_ctrl_parameters_pkg comp_fuse_ctrl_sequence_pkg comp_fuse_ctrl_tests_pkg + +comp_uvmf_core : comp_uvm_pkg comp_uvmf_base_pkg + +make_build: comp_fuse_ctrl_dut comp_uvmf_core comp_hvl comp_test_bench + +hvl_build: q_comp_fuse_ctrl_rst_pkg q_comp_fuse_ctrl_core_axi_write_in_pkg q_comp_fuse_ctrl_core_axi_write_out_pkg q_comp_fuse_ctrl_prim_axi_write_in_pkg q_comp_fuse_ctrl_prim_axi_write_out_pkg q_comp_fuse_ctrl_core_axi_read_in_pkg q_comp_fuse_ctrl_core_axi_read_out_pkg q_comp_fuse_ctrl_prim_axi_read_in_pkg q_comp_fuse_ctrl_prim_axi_read_out_pkg q_comp_fuse_ctrl_secreg_axi_read_in_pkg q_comp_fuse_ctrl_secreg_axi_read_out_pkg q_comp_fuse_ctrl_lc_otp_in_pkg q_comp_fuse_ctrl_lc_otp_out_pkg q_comp_fuse_ctrl_in_pkg q_comp_fuse_ctrl_out_pkg comp_fuse_ctrl_env_pkg comp_fuse_ctrl_sequence_pkg comp_fuse_ctrl_tests_pkg hvl_comp_testbench link optimize + + +vinfo_build: comp_fuse_ctrl_vhdl_dut build_hdl_vinfo build_hvl_vinfo $(VINFO_TGT) + + $(HDL_COMP_CMD) -F hdl.vf + $(VEL_COMP) + +build: $(BUILD_TGT) + +# pragma uvmf custom additional_targets begin +# pragma uvmf custom additional_targets end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/bcr_testlist b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/bcr_testlist new file mode 100644 index 000000000..4df4567ee --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/bcr_testlist @@ -0,0 +1,19 @@ + + + +# Test list for use by RMDB file +# File syntax is +# TB_INFO { } { } +# TB ## All subsequent tests will run on this bench until a different "TB" line is seen +# TEST <1st_seed> ... +# If not enough seeds are provided then random seeds are used to pad +# If no repeat count is given, default is 1 +# pragma uvmf custom tb_info begin +TB_INFO fuse_ctrl { } { } +# pragma uvmf custom tb_info end +TB fuse_ctrl +# pragma uvmf custom regression_suite begin +TEST test_top 3 +# pragma uvmf custom regression_suite end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/bcr_testlist.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/bcr_testlist.yaml new file mode 100644 index 000000000..65b6be08a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/bcr_testlist.yaml @@ -0,0 +1,44 @@ + + + +# YAML test list for use by RMDB file +# File syntax is +# uvmf_testlist: +# testbenches: +# - name: +# extra_build_options: +# extra_run_options: +# - name: +# ... +# - name: +# tests: +# - name: +# uvm_testname: (defaults to test_name) +# testbench: (defaults to last tb name seen) +# repeat: (defaults to 1) +# seeds: [,,...,] (defaults to all random) +# extra_test_options: +# - name: +# ... +# - name: +# include: +# - (relative path reference is to the including YAML file) +# - +# ... +# - + +uvmf_testlist: + testbenches: +# pragma uvmf custom tb_info begin + - name: fuse_ctrl + extra_build_options: "" + extra_run_options: "" +# pragma uvmf custom tb_info end + tests: + - testbench: fuse_ctrl +# pragma uvmf custom regression_suite begin + - name: test_top + repeat: 3 +# pragma uvmf custom regression_suite end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/compile.do new file mode 100644 index 000000000..b34a09034 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/compile.do @@ -0,0 +1,84 @@ + + +################################################################## +## ENVIRONMENT VARIABLES +################################################################## +quietly set ::env(UVMF_VIP_LIBRARY_HOME) ../../../verification_ip +quietly set ::env(UVMF_PROJECT_DIR) .. + +## Using VRM means that the build is occuring several more directories deeper underneath +## the sim directory, need to prepend some more '..' +if {[info exists ::env(VRM_BUILD)]} { + quietly set ::env(UVMF_VIP_LIBRARY_HOME) "../../../../../$::env(UVMF_VIP_LIBRARY_HOME)" + quietly set ::env(UVMF_PROJECT_DIR) "../../../../../$::env(UVMF_PROJECT_DIR)" +} +quietly set ::env(UVMF_VIP_LIBRARY_HOME) [file normalize $::env(UVMF_VIP_LIBRARY_HOME)] +quietly set ::env(UVMF_PROJECT_DIR) [file normalize $::env(UVMF_PROJECT_DIR)] +quietly echo "UVMF_VIP_LIBRARY_HOME = $::env(UVMF_VIP_LIBRARY_HOME)" +quietly echo "UVMF_PROJECT_DIR = $::env(UVMF_PROJECT_DIR)" + + +################################################################### +## HOUSEKEEPING : DELETE FILES THAT WILL BE REGENERATED +################################################################### +file delete -force *~ *.ucdb vsim.dbg *.vstf *.log work *.mem *.transcript.txt certe_dump.xml *.wlf covhtmlreport VRMDATA +file delete -force design.bin qwave.db dpiheader.h visualizer*.ses +file delete -force veloce.med veloce.wave veloce.map tbxbindings.h edsenv velrunopts.ini +file delete -force sv_connect.* + +################################################################### +## COMPILE DUT SOURCE CODE +################################################################### +vlib work +# pragma uvmf custom dut_compile_dofile_target begin +# UVMF_CHANGE_ME : Add commands to compile your dut here, replacing the default examples +#vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/rtl/verilog/verilog_dut.v +#vcom $env(UVMF_PROJECT_DIR)/rtl/vhdl/vhdl_dut.vhd +# pragma uvmf custom dut_compile_dofile_target end + +################################################################### +## COMPILE UVMF BASE/COMMON SOURCE CODE +################################################################### +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_HOME)/uvmf_base_pkg -F $env(UVMF_HOME)/uvmf_base_pkg/uvmf_base_pkg_filelist_hdl.f +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_HOME)/uvmf_base_pkg -F $env(UVMF_HOME)/uvmf_base_pkg/uvmf_base_pkg_filelist_hvl.f + + +################################################################### +## UVMF INTERFACE COMPILATION +################################################################### +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/compile.do + +################################################################### +## UVMF ENVIRONMENT COMPILATION +################################################################### +do $env(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg/compile.do + +################################################################### +## UVMF BENCHES COMPILATION +################################################################### +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/parameters $env(UVMF_PROJECT_DIR)/tb/parameters/fuse_ctrl_parameters_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/sequences $env(UVMF_PROJECT_DIR)/tb/sequences/fuse_ctrl_sequences_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/tests $env(UVMF_PROJECT_DIR)/tb/tests/fuse_ctrl_tests_pkg.sv + +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/testbench -F $env(UVMF_PROJECT_DIR)/tb/testbench/top_filelist_hdl.f +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/testbench -F $env(UVMF_PROJECT_DIR)/tb/testbench/top_filelist_hvl.f + +################################################################### +## OPTIMIZATION +################################################################### +vopt hvl_top hdl_top -o optimized_batch_top_tb +vopt +acc hvl_top hdl_top -o optimized_debug_top_tb diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/hdl.compile new file mode 100644 index 000000000..8e7bd41ac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/hdl.compile @@ -0,0 +1,5 @@ +needs: +# pragma uvmf custom dut_compile_info begin + - ../rtl/dut.compile +# pragma uvmf custom dut_compile_info end + - ../tb/testbench/hdl_top.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/hdl.vinfo new file mode 100644 index 000000000..da27ec773 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/hdl.vinfo @@ -0,0 +1 @@ +@use $UVMF_PROJECT_DIR/tb/testbench/hdl_top.vinfo diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/hvl.compile new file mode 100644 index 000000000..ce9525496 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/hvl.compile @@ -0,0 +1,2 @@ +needs: + - ../tb/testbench/hvl_top.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/hvl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/hvl.vinfo new file mode 100644 index 000000000..d22eff338 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/hvl.vinfo @@ -0,0 +1 @@ +@use $UVMF_PROJECT_DIR/tb/testbench/hvl_top.vinfo diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/run.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/run.do new file mode 100644 index 000000000..101ddc486 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/run.do @@ -0,0 +1,21 @@ + + +quietly set svLibs "" +quietly set extra_vsim_args "" + +################################################################### +## Check for additional vsim arguments passed using env var $UVMF_EXTRA_VSIM_ARGS +################################################################### +if {[info exists ::env(UVMF_EXTRA_VSIM_ARGS)]} { + echo "Adding more args to vsim command" + quietly set extra_vsim_args $::env(UVMF_EXTRA_VSIM_ARGS) +} + +################################################################## +## Launch Questa : generate vsim command line and execute +################################################################## +# pragma uvmf custom dut_run_dofile_target begin +# UVMF_CHANGE_ME : Change the UVM_TESTNAME plusarg to run a different test +quietly set cmd [format "vsim -i -sv_seed random +UVM_TESTNAME=test_top +UVM_VERBOSITY=UVM_HIGH -permit_unmatched_virtual_intf +notimingchecks -suppress 8887 %s %s -uvmcontrol=all -msgmode both -classdebug -assertdebug +uvm_set_config_int=*,enable_transaction_viewing,1 -do { set NoQuitOnFinish 1; onbreak {resume}; run 0; do wave.do; set PrefSource(OpenOnBreak) 0; radix hex showbase; } optimized_debug_top_tb" $svLibs $extra_vsim_args] +# pragma uvmf custom dut_run_dofile_target end +eval $cmd diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/tbx.config b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/tbx.config new file mode 100644 index 000000000..eec58168c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/tbx.config @@ -0,0 +1,10 @@ + + + + + +comp -questa +velsyn -D1S +rtlc -allow_4ST + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/testlist b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/testlist new file mode 100644 index 000000000..0c6229764 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/testlist @@ -0,0 +1,20 @@ + + + + +# Test list for use by RMDB file +# File syntax is +# TB_INFO { } { } +# TB ## All subsequent tests will run on this bench until a different "TB" line is seen +# TEST <1st_seed> ... +# If not enough seeds are provided then random seeds are used to pad +# If no repeat count is given, default is 1 +# pragma uvmf custom tb_info begin +TB_INFO fuse_ctrl { UVMF_VIP_LIBRARY_HOME=../../../../../../../../verification_ip UVMF_PROJECT_DIR=../../../../../../../fuse_ctrl } { } +# pragma uvmf custom tb_info end +TB fuse_ctrl +# pragma uvmf custom regression_suite begin +TEST test_top 3 +# pragma uvmf custom regression_suite end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/testlist.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/testlist.yaml new file mode 100644 index 000000000..6236cc790 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/testlist.yaml @@ -0,0 +1,44 @@ + + + +# YAML test list for use by RMDB file +# File syntax is +# uvmf_testlist: +# testbenches: +# - name: +# extra_build_options: +# extra_run_options: +# - name: +# ... +# - name: +# tests: +# - name: +# uvm_testname: (defaults to test_name) +# testbench: (defaults to last tb name seen) +# repeat: (defaults to 1) +# seeds: [,,...,] (defaults to all random) +# extra_test_options: +# - name: +# ... +# - name: +# include: +# - (relative path reference is to the including YAML file) +# - +# ... +# - + +uvmf_testlist: + testbenches: +# pragma uvmf custom tb_info begin + - name: fuse_ctrl + extra_build_options: "UVMF_VIP_LIBRARY_HOME=../../../../../../../../verification_ip UVMF_PROJECT_DIR=../../../../../../../fuse_ctrl" + extra_run_options: "" +# pragma uvmf custom tb_info end + tests: + - testbench: fuse_ctrl +# pragma uvmf custom regression_suite begin + - name: test_top + repeat: 3 +# pragma uvmf custom regression_suite end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/top.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/top.compile new file mode 100644 index 000000000..efd51c07e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/top.compile @@ -0,0 +1,3 @@ +needs: + - hvl.compile + - hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/veloce.config b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/veloce.config new file mode 100644 index 000000000..d09751555 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/veloce.config @@ -0,0 +1,26 @@ + + + + + +# pragma uvmf custom additional begin +comp -num_boards 1 +comp -hvl questa +# Please choose the correct emulator type code for +# comp -platform command or else velcomp will fail +# Available types are: +# - Veloce2 Quattro: D2 +# - Veloce2 Maximus: D2M +# - Veloce Strato TiL, Ti, and Mi: Strato +# - Veloce Strato M and Strato T: StratoM +# - comp -platform +comp -platform Strato + +rtlc -enable_tbx_pragma_checks +rtlc -allow_4ST +rtlc -allow_MDR +rtlc -compile_display +rtlc -xwave_siglist xwaves.sigs +# pragma uvmf custom additional end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/viswave.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/viswave.do new file mode 100644 index 000000000..81298c032 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/viswave.do @@ -0,0 +1,100 @@ + + +onerror resume +wave tags F0 +wave update off + +wave spacer -backgroundcolor Salmon { fuse_ctrl_rst_agent } +wave add uvm_test_top.environment.fuse_ctrl_rst_agent.fuse_ctrl_rst_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_rst_agent_bus +wave add -group fuse_ctrl_rst_agent_bus hdl_top.fuse_ctrl_rst_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_rst_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_core_axi_write_in_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_core_axi_write_in_if_agent.fuse_ctrl_core_axi_write_in_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_core_axi_write_in_if_agent_bus +wave add -group fuse_ctrl_core_axi_write_in_if_agent_bus hdl_top.fuse_ctrl_core_axi_write_in_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_core_axi_write_in_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_core_axi_write_out_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_core_axi_write_out_if_agent.fuse_ctrl_core_axi_write_out_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_core_axi_write_out_if_agent_bus +wave add -group fuse_ctrl_core_axi_write_out_if_agent_bus hdl_top.fuse_ctrl_core_axi_write_out_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_core_axi_write_out_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_prim_axi_write_in_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_prim_axi_write_in_if_agent.fuse_ctrl_prim_axi_write_in_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_prim_axi_write_in_if_agent_bus +wave add -group fuse_ctrl_prim_axi_write_in_if_agent_bus hdl_top.fuse_ctrl_prim_axi_write_in_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_prim_axi_write_in_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_prim_axi_write_out_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_prim_axi_write_out_if_agent.fuse_ctrl_prim_axi_write_out_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_prim_axi_write_out_if_agent_bus +wave add -group fuse_ctrl_prim_axi_write_out_if_agent_bus hdl_top.fuse_ctrl_prim_axi_write_out_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_prim_axi_write_out_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_core_axi_read_in_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_core_axi_read_in_if_agent.fuse_ctrl_core_axi_read_in_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_core_axi_read_in_if_agent_bus +wave add -group fuse_ctrl_core_axi_read_in_if_agent_bus hdl_top.fuse_ctrl_core_axi_read_in_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_core_axi_read_in_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_core_axi_read_out_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_core_axi_read_out_if_agent.fuse_ctrl_core_axi_read_out_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_core_axi_read_out_if_agent_bus +wave add -group fuse_ctrl_core_axi_read_out_if_agent_bus hdl_top.fuse_ctrl_core_axi_read_out_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_core_axi_read_out_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_prim_axi_read_in_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_prim_axi_read_in_if_agent.fuse_ctrl_prim_axi_read_in_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_prim_axi_read_in_if_agent_bus +wave add -group fuse_ctrl_prim_axi_read_in_if_agent_bus hdl_top.fuse_ctrl_prim_axi_read_in_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_prim_axi_read_in_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_prim_axi_read_out_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_prim_axi_read_out_if_agent.fuse_ctrl_prim_axi_read_out_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_prim_axi_read_out_if_agent_bus +wave add -group fuse_ctrl_prim_axi_read_out_if_agent_bus hdl_top.fuse_ctrl_prim_axi_read_out_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_prim_axi_read_out_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_secreg_axi_read_in_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_secreg_axi_read_in_if_agent.fuse_ctrl_secreg_axi_read_in_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_secreg_axi_read_in_if_agent_bus +wave add -group fuse_ctrl_secreg_axi_read_in_if_agent_bus hdl_top.fuse_ctrl_secreg_axi_read_in_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_secreg_axi_read_in_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_secreg_axi_read_out_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_secreg_axi_read_out_if_agent.fuse_ctrl_secreg_axi_read_out_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_secreg_axi_read_out_if_agent_bus +wave add -group fuse_ctrl_secreg_axi_read_out_if_agent_bus hdl_top.fuse_ctrl_secreg_axi_read_out_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_secreg_axi_read_out_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_lc_otp_in_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_lc_otp_in_if_agent.fuse_ctrl_lc_otp_in_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_lc_otp_in_if_agent_bus +wave add -group fuse_ctrl_lc_otp_in_if_agent_bus hdl_top.fuse_ctrl_lc_otp_in_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_lc_otp_in_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_lc_otp_out_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_lc_otp_out_if_agent.fuse_ctrl_lc_otp_out_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_lc_otp_out_if_agent_bus +wave add -group fuse_ctrl_lc_otp_out_if_agent_bus hdl_top.fuse_ctrl_lc_otp_out_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_lc_otp_out_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_in_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_in_if_agent.fuse_ctrl_in_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_in_if_agent_bus +wave add -group fuse_ctrl_in_if_agent_bus hdl_top.fuse_ctrl_in_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_in_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_out_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_out_if_agent.fuse_ctrl_out_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_out_if_agent_bus +wave add -group fuse_ctrl_out_if_agent_bus hdl_top.fuse_ctrl_out_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_out_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] + +wave update on +WaveSetStreamView + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/wave.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/wave.do new file mode 100644 index 000000000..099f950d6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/wave.do @@ -0,0 +1,69 @@ + + +onerror {resume} +quietly WaveActivateNextPane {} 0 + +add wave -noupdate -divider fuse_ctrl_rst_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_rst_agent/fuse_ctrl_rst_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_rst_agent_bus /hdl_top/fuse_ctrl_rst_agent_bus/* +add wave -noupdate -divider fuse_ctrl_core_axi_write_in_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_core_axi_write_in_if_agent/fuse_ctrl_core_axi_write_in_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_core_axi_write_in_if_agent_bus /hdl_top/fuse_ctrl_core_axi_write_in_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_core_axi_write_out_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_core_axi_write_out_if_agent/fuse_ctrl_core_axi_write_out_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_core_axi_write_out_if_agent_bus /hdl_top/fuse_ctrl_core_axi_write_out_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_prim_axi_write_in_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_prim_axi_write_in_if_agent/fuse_ctrl_prim_axi_write_in_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_prim_axi_write_in_if_agent_bus /hdl_top/fuse_ctrl_prim_axi_write_in_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_prim_axi_write_out_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_prim_axi_write_out_if_agent/fuse_ctrl_prim_axi_write_out_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_prim_axi_write_out_if_agent_bus /hdl_top/fuse_ctrl_prim_axi_write_out_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_core_axi_read_in_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_core_axi_read_in_if_agent/fuse_ctrl_core_axi_read_in_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_core_axi_read_in_if_agent_bus /hdl_top/fuse_ctrl_core_axi_read_in_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_core_axi_read_out_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_core_axi_read_out_if_agent/fuse_ctrl_core_axi_read_out_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_core_axi_read_out_if_agent_bus /hdl_top/fuse_ctrl_core_axi_read_out_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_prim_axi_read_in_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_prim_axi_read_in_if_agent/fuse_ctrl_prim_axi_read_in_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_prim_axi_read_in_if_agent_bus /hdl_top/fuse_ctrl_prim_axi_read_in_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_prim_axi_read_out_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_prim_axi_read_out_if_agent/fuse_ctrl_prim_axi_read_out_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_prim_axi_read_out_if_agent_bus /hdl_top/fuse_ctrl_prim_axi_read_out_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_secreg_axi_read_in_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_secreg_axi_read_in_if_agent/fuse_ctrl_secreg_axi_read_in_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_secreg_axi_read_in_if_agent_bus /hdl_top/fuse_ctrl_secreg_axi_read_in_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_secreg_axi_read_out_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_secreg_axi_read_out_if_agent/fuse_ctrl_secreg_axi_read_out_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_secreg_axi_read_out_if_agent_bus /hdl_top/fuse_ctrl_secreg_axi_read_out_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_lc_otp_in_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_lc_otp_in_if_agent/fuse_ctrl_lc_otp_in_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_lc_otp_in_if_agent_bus /hdl_top/fuse_ctrl_lc_otp_in_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_lc_otp_out_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_lc_otp_out_if_agent/fuse_ctrl_lc_otp_out_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_lc_otp_out_if_agent_bus /hdl_top/fuse_ctrl_lc_otp_out_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_in_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_in_if_agent/fuse_ctrl_in_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_in_if_agent_bus /hdl_top/fuse_ctrl_in_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_out_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_out_if_agent/fuse_ctrl_out_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_out_if_agent_bus /hdl_top/fuse_ctrl_out_if_agent_bus/* + +TreeUpdate [SetDefaultTree] +quietly wave cursor active 0 +configure wave -namecolwidth 472 +configure wave -valuecolwidth 100 +configure wave -justifyvalue left +configure wave -signalnamewidth 0 +configure wave -snapdistance 10 +configure wave -datasetprefix 0 +configure wave -rowmargin 4 +configure wave -childrowmargin 2 +configure wave -gridoffset 0 +configure wave -gridperiod 1 +configure wave -griddelta 40 +configure wave -timeline 0 +configure wave -timelineunits ns +update +WaveRestoreZoom {27 ns} {168 ns} + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/xwaves.sigs b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/xwaves.sigs new file mode 100644 index 000000000..d75f0a575 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/sim/xwaves.sigs @@ -0,0 +1,17 @@ + + + + + +# pragma uvmf custom additional begin + +Group All + +#Top level signals +hdl_top.* +#Add additional levels or individual signals as needed +hdl_top.*.* + +# pragma uvmf custom additional end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.compile new file mode 100644 index 000000000..0c6b841a5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.compile @@ -0,0 +1,4 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +src: + - fuse_ctrl_parameters_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.sv new file mode 100644 index 000000000..e1bc7742d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.sv @@ -0,0 +1,65 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This package contains test level parameters +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +package fuse_ctrl_parameters_pkg; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + + // These parameters are used to uniquely identify each interface. The monitor_bfm and + // driver_bfm are placed into and retrieved from the uvm_config_db using these string + // names as the field_name. The parameter is also used to enable transaction viewing + // from the command line for selected interfaces using the UVM command line processing. + parameter string fuse_ctrl_rst_agent_BFM = "fuse_ctrl_rst_agent_BFM"; /* [0] */ + parameter string fuse_ctrl_core_axi_write_in_if_agent_BFM = "fuse_ctrl_core_axi_write_in_if_agent_BFM"; /* [1] */ + parameter string fuse_ctrl_core_axi_write_out_if_agent_BFM = "fuse_ctrl_core_axi_write_out_if_agent_BFM"; /* [2] */ + parameter string fuse_ctrl_prim_axi_write_in_if_agent_BFM = "fuse_ctrl_prim_axi_write_in_if_agent_BFM"; /* [3] */ + parameter string fuse_ctrl_prim_axi_write_out_if_agent_BFM = "fuse_ctrl_prim_axi_write_out_if_agent_BFM"; /* [4] */ + parameter string fuse_ctrl_core_axi_read_in_if_agent_BFM = "fuse_ctrl_core_axi_read_in_if_agent_BFM"; /* [5] */ + parameter string fuse_ctrl_core_axi_read_out_if_agent_BFM = "fuse_ctrl_core_axi_read_out_if_agent_BFM"; /* [6] */ + parameter string fuse_ctrl_prim_axi_read_in_if_agent_BFM = "fuse_ctrl_prim_axi_read_in_if_agent_BFM"; /* [7] */ + parameter string fuse_ctrl_prim_axi_read_out_if_agent_BFM = "fuse_ctrl_prim_axi_read_out_if_agent_BFM"; /* [8] */ + parameter string fuse_ctrl_secreg_axi_read_in_if_agent_BFM = "fuse_ctrl_secreg_axi_read_in_if_agent_BFM"; /* [9] */ + parameter string fuse_ctrl_secreg_axi_read_out_if_agent_BFM = "fuse_ctrl_secreg_axi_read_out_if_agent_BFM"; /* [10] */ + parameter string fuse_ctrl_lc_otp_in_if_agent_BFM = "fuse_ctrl_lc_otp_in_if_agent_BFM"; /* [11] */ + parameter string fuse_ctrl_lc_otp_out_if_agent_BFM = "fuse_ctrl_lc_otp_out_if_agent_BFM"; /* [12] */ + parameter string fuse_ctrl_in_if_agent_BFM = "fuse_ctrl_in_if_agent_BFM"; /* [13] */ + parameter string fuse_ctrl_out_if_agent_BFM = "fuse_ctrl_out_if_agent_BFM"; /* [14] */ + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.vinfo new file mode 100644 index 000000000..3bd4d7f9b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_parameters_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.compile new file mode 100644 index 000000000..307646d01 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.compile @@ -0,0 +1,21 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile + - ../../../../verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile + - ../parameters/fuse_ctrl_parameters_pkg.compile +src: + - fuse_ctrl_sequences_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.sv new file mode 100644 index 000000000..e871c188a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.sv @@ -0,0 +1,92 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This package includes all high level sequence classes used +// in the environment. These include utility sequences and top +// level sequences. +// +// CONTAINS: +// - +// - +// +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +// + +package fuse_ctrl_sequences_pkg; + import uvm_pkg::*; + import uvmf_base_pkg::*; + import fuse_ctrl_rst_pkg::*; + import fuse_ctrl_rst_pkg_hdl::*; + import fuse_ctrl_core_axi_write_in_pkg::*; + import fuse_ctrl_core_axi_write_in_pkg_hdl::*; + import fuse_ctrl_core_axi_write_out_pkg::*; + import fuse_ctrl_core_axi_write_out_pkg_hdl::*; + import fuse_ctrl_prim_axi_write_in_pkg::*; + import fuse_ctrl_prim_axi_write_in_pkg_hdl::*; + import fuse_ctrl_prim_axi_write_out_pkg::*; + import fuse_ctrl_prim_axi_write_out_pkg_hdl::*; + import fuse_ctrl_core_axi_read_in_pkg::*; + import fuse_ctrl_core_axi_read_in_pkg_hdl::*; + import fuse_ctrl_core_axi_read_out_pkg::*; + import fuse_ctrl_core_axi_read_out_pkg_hdl::*; + import fuse_ctrl_prim_axi_read_in_pkg::*; + import fuse_ctrl_prim_axi_read_in_pkg_hdl::*; + import fuse_ctrl_prim_axi_read_out_pkg::*; + import fuse_ctrl_prim_axi_read_out_pkg_hdl::*; + import fuse_ctrl_secreg_axi_read_in_pkg::*; + import fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; + import fuse_ctrl_secreg_axi_read_out_pkg::*; + import fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; + import fuse_ctrl_lc_otp_in_pkg::*; + import fuse_ctrl_lc_otp_in_pkg_hdl::*; + import fuse_ctrl_lc_otp_out_pkg::*; + import fuse_ctrl_lc_otp_out_pkg_hdl::*; + import fuse_ctrl_in_pkg::*; + import fuse_ctrl_in_pkg_hdl::*; + import fuse_ctrl_out_pkg::*; + import fuse_ctrl_out_pkg_hdl::*; + import fuse_ctrl_parameters_pkg::*; + import fuse_ctrl_env_pkg::*; + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + `include "src/fuse_ctrl_bench_sequence_base.svh" + `include "src/fuse_ctrl_otf_reset_sequence.svh" + `include "src/register_test_sequence.svh" + `include "src/example_derived_test_sequence.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the sequence package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.vinfo new file mode 100644 index 000000000..10f1cf16e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.vinfo @@ -0,0 +1,20 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo +@use $UVMF_PROJECT_DIR/tb/parameters/fuse_ctrl_parameters_pkg.vinfo ++incdir+@vinfodir +fuse_ctrl_sequences_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/sequences/src/example_derived_test_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/sequences/src/example_derived_test_sequence.svh new file mode 100644 index 000000000..7566dc511 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/sequences/src/example_derived_test_sequence.svh @@ -0,0 +1,44 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains the top level sequence used in example_derived_test. +// It is an example of a sequence that is extended from %(benchName)_bench_sequence_base +// and can override %(benchName)_bench_sequence_base. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class example_derived_test_sequence extends fuse_ctrl_bench_sequence_base; + + `uvm_object_utils( example_derived_test_sequence ); + + function new(string name = "" ); + super.new(name); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/sequences/src/fuse_ctrl_bench_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/sequences/src/fuse_ctrl_bench_sequence_base.svh new file mode 100644 index 000000000..0f56a687c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/sequences/src/fuse_ctrl_bench_sequence_base.svh @@ -0,0 +1,229 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// Description: This file contains the top level and utility sequences +// used by test_top. It can be extended to create derivative top +// level sequences. +// +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +// + + +typedef fuse_ctrl_env_configuration fuse_ctrl_env_configuration_t; + +class fuse_ctrl_bench_sequence_base extends uvmf_sequence_base #(uvm_sequence_item); + + `uvm_object_utils( fuse_ctrl_bench_sequence_base ); + + // pragma uvmf custom sequences begin + +typedef fuse_ctrl_env_sequence_base #( + .CONFIG_T(fuse_ctrl_env_configuration_t) + ) + fuse_ctrl_env_sequence_base_t; +rand fuse_ctrl_env_sequence_base_t fuse_ctrl_env_seq; + + + + // UVMF_CHANGE_ME : Instantiate, construct, and start sequences as needed to create stimulus scenarios. + // Instantiate sequences here + typedef fuse_ctrl_rst_random_sequence fuse_ctrl_rst_agent_random_seq_t; + fuse_ctrl_rst_agent_random_seq_t fuse_ctrl_rst_agent_random_seq; + typedef fuse_ctrl_core_axi_write_if_random_sequence fuse_ctrl_core_axi_write_agent_random_seq_t; + fuse_ctrl_core_axi_write_agent_random_seq_t fuse_ctrl_core_axi_write_agent_random_seq; + typedef fuse_ctrl_prim_axi_write_if_random_sequence fuse_ctrl_prim_axi_write_agent_random_seq_t; + fuse_ctrl_prim_axi_write_agent_random_seq_t fuse_ctrl_prim_axi_write_agent_random_seq; + typedef fuse_ctrl_core_axi_read_if_random_sequence fuse_ctrl_core_axi_read_agent_random_seq_t; + fuse_ctrl_core_axi_read_agent_random_seq_t fuse_ctrl_core_axi_read_agent_random_seq; + typedef fuse_ctrl_prim_axi_read_if_random_sequence fuse_ctrl_prim_axi_read_agent_random_seq_t; + fuse_ctrl_prim_axi_read_agent_random_seq_t fuse_ctrl_prim_axi_read_agent_random_seq; + typedef fuse_ctrl_secreg_axi_read_if_random_sequence fuse_ctrl_secreg_axi_read_agent_random_seq_t; + fuse_ctrl_secreg_axi_read_agent_random_seq_t fuse_ctrl_secreg_axi_read_agent_random_seq; + typedef fuse_ctrl_lc_otp_if_random_sequence fuse_ctrl_lc_otp_if_agent_random_seq_t; + fuse_ctrl_lc_otp_if_agent_random_seq_t fuse_ctrl_lc_otp_if_agent_random_seq; + // pragma uvmf custom sequences end + + // Sequencer handles for each active interface in the environment + typedef fuse_ctrl_rst_transaction fuse_ctrl_rst_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_rst_agent_transaction_t) fuse_ctrl_rst_agent_sequencer; + typedef fuse_ctrl_core_axi_write_in_transaction fuse_ctrl_core_axi_write_in_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_core_axi_write_in_if_agent_transaction_t) fuse_ctrl_core_axi_write_in_if_agent_sequencer; + typedef fuse_ctrl_prim_axi_write_in_transaction fuse_ctrl_prim_axi_write_in_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_prim_axi_write_in_if_agent_transaction_t) fuse_ctrl_prim_axi_write_in_if_agent_sequencer; + typedef fuse_ctrl_core_axi_read_in_transaction fuse_ctrl_core_axi_read_in_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_core_axi_read_in_if_agent_transaction_t) fuse_ctrl_core_axi_read_in_if_agent_sequencer; + typedef fuse_ctrl_prim_axi_read_in_transaction fuse_ctrl_prim_axi_read_in_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_prim_axi_read_in_if_agent_transaction_t) fuse_ctrl_prim_axi_read_in_if_agent_sequencer; + typedef fuse_ctrl_secreg_axi_read_in_transaction fuse_ctrl_secreg_axi_read_in_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_secreg_axi_read_in_if_agent_transaction_t) fuse_ctrl_secreg_axi_read_in_if_agent_sequencer; + typedef fuse_ctrl_lc_otp_in_transaction fuse_ctrl_lc_otp_in_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_lc_otp_in_if_agent_transaction_t) fuse_ctrl_lc_otp_in_if_agent_sequencer; + typedef fuse_ctrl_in_transaction fuse_ctrl_in_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_in_if_agent_transaction_t) fuse_ctrl_in_if_agent_sequencer; + + + // Top level environment configuration handle + fuse_ctrl_env_configuration_t top_configuration; + + // Configuration handles to access interface BFM's + fuse_ctrl_rst_configuration fuse_ctrl_rst_agent_config; + fuse_ctrl_core_axi_write_in_configuration fuse_ctrl_core_axi_write_in_if_agent_config; + fuse_ctrl_core_axi_write_out_configuration fuse_ctrl_core_axi_write_out_if_agent_config; + fuse_ctrl_prim_axi_write_in_configuration fuse_ctrl_prim_axi_write_in_if_agent_config; + fuse_ctrl_prim_axi_write_out_configuration fuse_ctrl_prim_axi_write_out_if_agent_config; + fuse_ctrl_core_axi_read_in_configuration fuse_ctrl_core_axi_read_in_if_agent_config; + fuse_ctrl_core_axi_read_out_configuration fuse_ctrl_core_axi_read_out_if_agent_config; + fuse_ctrl_prim_axi_read_in_configuration fuse_ctrl_prim_axi_read_in_if_agent_config; + fuse_ctrl_prim_axi_read_out_configuration fuse_ctrl_prim_axi_read_out_if_agent_config; + fuse_ctrl_secreg_axi_read_in_configuration fuse_ctrl_secreg_axi_read_in_if_agent_config; + fuse_ctrl_secreg_axi_read_out_configuration fuse_ctrl_secreg_axi_read_out_if_agent_config; + fuse_ctrl_lc_otp_in_configuration fuse_ctrl_lc_otp_in_if_agent_config; + fuse_ctrl_lc_otp_out_configuration fuse_ctrl_lc_otp_out_if_agent_config; + fuse_ctrl_in_configuration fuse_ctrl_in_if_agent_config; + fuse_ctrl_out_configuration fuse_ctrl_out_if_agent_config; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + function new( string name = "" ); + super.new( name ); + // Retrieve the configuration handles from the uvm_config_db + + // Retrieve top level configuration handle + if ( !uvm_config_db#(fuse_ctrl_env_configuration_t)::get(null,UVMF_CONFIGURATIONS, "TOP_ENV_CONFIG",top_configuration) ) begin + `uvm_info("CFG", "*** FATAL *** uvm_config_db::get can not find TOP_ENV_CONFIG. Are you using an older UVMF release than what was used to generate this bench?",UVM_NONE); + `uvm_fatal("CFG", "uvm_config_db#(fuse_ctrl_env_configuration_t)::get cannot find resource TOP_ENV_CONFIG"); + end + + // Retrieve config handles for all agents + if( !uvm_config_db #( fuse_ctrl_rst_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_rst_agent_BFM , fuse_ctrl_rst_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_rst_configuration )::get cannot find resource fuse_ctrl_rst_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_core_axi_write_in_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_core_axi_write_in_if_agent_BFM , fuse_ctrl_core_axi_write_in_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_core_axi_write_in_configuration )::get cannot find resource fuse_ctrl_core_axi_write_in_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_core_axi_write_out_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_core_axi_write_out_if_agent_BFM , fuse_ctrl_core_axi_write_out_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_core_axi_write_out_configuration )::get cannot find resource fuse_ctrl_core_axi_write_out_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_prim_axi_write_in_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_prim_axi_write_in_if_agent_BFM , fuse_ctrl_prim_axi_write_in_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_prim_axi_write_in_configuration )::get cannot find resource fuse_ctrl_prim_axi_write_in_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_prim_axi_write_out_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_prim_axi_write_out_if_agent_BFM , fuse_ctrl_prim_axi_write_out_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_prim_axi_write_out_configuration )::get cannot find resource fuse_ctrl_prim_axi_write_out_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_core_axi_read_in_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_core_axi_read_in_if_agent_BFM , fuse_ctrl_core_axi_read_in_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_core_axi_read_in_configuration )::get cannot find resource fuse_ctrl_core_axi_read_in_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_core_axi_read_out_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_core_axi_read_out_if_agent_BFM , fuse_ctrl_core_axi_read_out_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_core_axi_read_out_configuration )::get cannot find resource fuse_ctrl_core_axi_read_out_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_prim_axi_read_in_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_prim_axi_read_in_if_agent_BFM , fuse_ctrl_prim_axi_read_in_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_prim_axi_read_in_configuration )::get cannot find resource fuse_ctrl_prim_axi_read_in_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_prim_axi_read_out_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_prim_axi_read_out_if_agent_BFM , fuse_ctrl_prim_axi_read_out_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_prim_axi_read_out_configuration )::get cannot find resource fuse_ctrl_prim_axi_read_out_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_secreg_axi_read_in_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_secreg_axi_read_in_if_agent_BFM , fuse_ctrl_secreg_axi_read_in_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_secreg_axi_read_in_configuration )::get cannot find resource fuse_ctrl_secreg_axi_read_in_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_secreg_axi_read_out_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_secreg_axi_read_out_if_agent_BFM , fuse_ctrl_secreg_axi_read_out_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_secreg_axi_read_out_configuration )::get cannot find resource fuse_ctrl_secreg_axi_read_out_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_lc_otp_in_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_lc_otp_in_if_agent_BFM , fuse_ctrl_lc_otp_in_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_lc_otp_in_configuration )::get cannot find resource fuse_ctrl_lc_otp_in_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_lc_otp_out_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_lc_otp_out_if_agent_BFM , fuse_ctrl_lc_otp_out_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_lc_otp_out_configuration )::get cannot find resource fuse_ctrl_lc_otp_out_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_in_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_in_if_agent_BFM , fuse_ctrl_in_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_in_configuration )::get cannot find resource fuse_ctrl_in_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_out_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_out_if_agent_BFM , fuse_ctrl_out_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_out_configuration )::get cannot find resource fuse_ctrl_out_if_agent_BFM" ) + + // Assign the sequencer handles from the handles within agent configurations + fuse_ctrl_rst_agent_sequencer = fuse_ctrl_rst_agent_config.get_sequencer(); + fuse_ctrl_core_axi_write_in_if_agent_sequencer = fuse_ctrl_core_axi_write_in_if_agent_config.get_sequencer(); + fuse_ctrl_prim_axi_write_in_if_agent_sequencer = fuse_ctrl_prim_axi_write_in_if_agent_config.get_sequencer(); + fuse_ctrl_core_axi_read_in_if_agent_sequencer = fuse_ctrl_core_axi_read_in_if_agent_config.get_sequencer(); + fuse_ctrl_prim_axi_read_in_if_agent_sequencer = fuse_ctrl_prim_axi_read_in_if_agent_config.get_sequencer(); + fuse_ctrl_secreg_axi_read_in_if_agent_sequencer = fuse_ctrl_secreg_axi_read_in_if_agent_config.get_sequencer(); + fuse_ctrl_lc_otp_in_if_agent_sequencer = fuse_ctrl_lc_otp_in_if_agent_config.get_sequencer(); + fuse_ctrl_in_if_agent_sequencer = fuse_ctrl_in_if_agent_config.get_sequencer(); + + + + // pragma uvmf custom new begin + // pragma uvmf custom new end + + endfunction + + // **************************************************************************** + virtual task body(); + // pragma uvmf custom body begin + + // Construct sequences here + + fuse_ctrl_env_seq = fuse_ctrl_env_sequence_base_t::type_id::create("fuse_ctrl_env_seq"); + + fuse_ctrl_rst_agent_random_seq = fuse_ctrl_rst_agent_random_seq_t::type_id::create("fuse_ctrl_rst_agent_random_seq"); + fuse_ctrl_core_axi_write_agent_random_seq = fuse_ctrl_core_axi_write_agent_random_seq_t::type_id::create("fuse_ctrl_core_axi_write_agent_random_seq"); + fuse_ctrl_prim_axi_write_agent_random_seq = fuse_ctrl_prim_axi_write_agent_random_seq_t::type_id::create("fuse_ctrl_prim_axi_write_agent_random_seq"); + fuse_ctrl_core_axi_read_agent_random_seq = fuse_ctrl_core_axi_read_agent_random_seq_t::type_id::create("fuse_ctrl_core_axi_read_agent_random_seq"); + fuse_ctrl_prim_axi_read_agent_random_seq = fuse_ctrl_prim_axi_read_agent_random_seq_t::type_id::create("fuse_ctrl_prim_axi_read_agent_random_seq"); + fuse_ctrl_secreg_axi_read_agent_random_seq = fuse_ctrl_secreg_axi_read_agent_random_seq_t::type_id::create("fuse_ctrl_secreg_axi_read_agent_random_seq"); + fuse_ctrl_lc_otp_if_agent_random_seq = fuse_ctrl_lc_otp_if_agent_random_seq_t::type_id::create("fuse_ctrl_lc_otp_if_agent_random_seq"); + fork + fuse_ctrl_rst_agent_config.wait_for_reset(); + fuse_ctrl_core_axi_write_agent_config.wait_for_reset(); + fuse_ctrl_prim_axi_write_agent_config.wait_for_reset(); + fuse_ctrl_core_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_prim_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_secreg_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_lc_otp_if_agent_config.wait_for_reset(); + join + // Start RESPONDER sequences here + fork + join_none + // Start INITIATOR sequences here + fork + repeat (25) fuse_ctrl_rst_agent_random_seq.start(fuse_ctrl_rst_agent_sequencer); + repeat (25) fuse_ctrl_core_axi_write_agent_random_seq.start(fuse_ctrl_core_axi_write_agent_sequencer); + repeat (25) fuse_ctrl_prim_axi_write_agent_random_seq.start(fuse_ctrl_prim_axi_write_agent_sequencer); + repeat (25) fuse_ctrl_core_axi_read_agent_random_seq.start(fuse_ctrl_core_axi_read_agent_sequencer); + repeat (25) fuse_ctrl_prim_axi_read_agent_random_seq.start(fuse_ctrl_prim_axi_read_agent_sequencer); + repeat (25) fuse_ctrl_secreg_axi_read_agent_random_seq.start(fuse_ctrl_secreg_axi_read_agent_sequencer); + repeat (25) fuse_ctrl_lc_otp_if_agent_random_seq.start(fuse_ctrl_lc_otp_if_agent_sequencer); + join + +fuse_ctrl_env_seq.start(top_configuration.vsqr); + + // UVMF_CHANGE_ME : Extend the simulation XXX number of clocks after + // the last sequence to allow for the last sequence item to flow + // through the design. + fork + fuse_ctrl_rst_agent_config.wait_for_num_clocks(400); + fuse_ctrl_core_axi_write_agent_config.wait_for_num_clocks(400); + fuse_ctrl_prim_axi_write_agent_config.wait_for_num_clocks(400); + fuse_ctrl_core_axi_read_agent_config.wait_for_num_clocks(400); + fuse_ctrl_prim_axi_read_agent_config.wait_for_num_clocks(400); + fuse_ctrl_secreg_axi_read_agent_config.wait_for_num_clocks(400); + fuse_ctrl_lc_otp_if_agent_config.wait_for_num_clocks(400); + join + + // pragma uvmf custom body end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/sequences/src/fuse_ctrl_otf_reset_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/sequences/src/fuse_ctrl_otf_reset_sequence.svh new file mode 100644 index 000000000..39e878261 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/sequences/src/fuse_ctrl_otf_reset_sequence.svh @@ -0,0 +1,83 @@ +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +`ifndef __FUSE_CTRL_RESET_SEQUENCE +`define __FUSE_CTRL_RESET_SEQUENCE + +`include "uvm_macros.svh" + +class fuse_ctrl_otf_reset_sequence extends fuse_ctrl_bench_sequence; + + `uvm_object_utls(fuse_ctrl_otf_reset_sequence) + + // Define type and handle for reset sequence + typedef fuse_ctrl_in_otf_reset_sequence fuse_ctrl_in_otf_reset_sequence_t; + fuse_ctrl_in_otf_reset_sequence_t fuse_ctrl_in_otf_reset_s; + + // constructor + function new(string name = ""); + super.new(name); + endfunction: new + + virtual task body(); + fuse_ctrl_in_otf_reset_s = fuse_ctrl_in_otf_reset_sequence()::type_id::create("fuse_ctrl_in_otf_reset_s"); + + fork + fuse_ctrl_rst_agent_config.wait_for_reset(); + fuse_ctrl_core_axi_write_in_if_agent_config.wait_for_reset(); + fuse_ctrl_core_axi_write_out_if_agent_config.wait_for_reset(); + fuse_ctrl_prim_axi_write_in_if_agent_config.wait_for_reset(); + fuse_ctrl_prim_axi_write_out_if_agent_config.wait_for_reset(); + fuse_ctrl_core_axi_read_in_if_agent_config.wait_for_reset(); + fuse_ctrl_core_axi_read_out_if_agent_config.wait_for_reset(); + fuse_ctrl_prim_axi_read_in_if_agent_config.wait_for_reset(); + fuse_ctrl_prim_axi_read_out_if_agent_config.wait_for_reset(); + fuse_ctrl_secreg_axi_read_in_if_agent_config.wait_for_reset(); + fuse_ctrl_secreg_axi_read_out_if_agent_config.wait_for_reset(); + fuse_ctrl_in_if_agent_config.wait_for_reset(); + fuse_ctrl_out_if_agent_config.wait_for_reset(); + fuse_ctrl_lc_otp_in_if_agent_config.wait_for_reset(); + fuse_ctrl_lc_otp_out_if_agent_config.wait_for_reset(); + join + + repeat (10) fuse_ctrl_in_otf_reset_s.start(fuse_ctrl_rst_agent_sequencer); + + fork + fuse_ctrl_rst_agent_config.wait_for_num_clocks(50); + fuse_ctrl_core_axi_write_in_if_agent_config.wait_for_num_clocks(50); + fuse_ctrl_core_axi_write_out_if_agent_config.wait_for_num_clocks(50); + fuse_ctrl_prim_axi_write_in_if_agent_config.wait_for_num_clocks(50); + fuse_ctrl_prim_axi_write_out_if_agent_config.wait_for_num_clocks(50); + fuse_ctrl_core_axi_read_in_if_agent_config.wait_for_num_clocks(50); + fuse_ctrl_core_axi_read_out_if_agent_config.wait_for_num_clocks(50); + fuse_ctrl_prim_axi_read_in_if_agent_config.wait_for_num_clocks(50); + fuse_ctrl_prim_axi_read_out_if_agent_config.wait_for_num_clocks(50); + fuse_ctrl_secreg_axi_read_in_if_agent_config.wait_for_num_clocks(50); + fuse_ctrl_secreg_axi_read_out_if_agent_config.wait_for_num_clocks(50); + fuse_ctrl_in_if_agent_config.wait_for_num_clocks(50); + fuse_ctrl_out_if_agent_config.wait_for_num_clocks(50); + fuse_ctrl_lc_otp_in_if_agent_config.wait_for_num_clocks(50); + fuse_ctrl_lc_otp_out_if_agent_config.wait_for_num_clocks(50); + join + + if (1) + $display("* TESTCASE PASSED"); + else + $display("* TESTCASE FAILED"); + endtask + +endclass : fuse_ctrl_otf_reset_sequence + +`endif diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/sequences/src/register_test_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/sequences/src/register_test_sequence.svh new file mode 100644 index 000000000..0db60c39b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/sequences/src/register_test_sequence.svh @@ -0,0 +1,76 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains the top level sequence used in register_test. +// It uses the UVM built in register test. Specific UVM built-in tests can be +// selected in the body task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class register_test_sequence extends fuse_ctrl_bench_sequence_base; + + `uvm_object_utils( register_test_sequence ); + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "" ); + super.new(name); + endfunction + + // **************************************************************************** + virtual task body(); + + // Reset the DUT + fork + // pragma uvmf custom register_test_reset begin + // UVMF_CHANGE_ME + // Select the desired wait_for_reset or provide custom mechanism. + // fork-join for this code block may be unnecessary based on your situation. + fuse_ctrl_rst_agent_config.wait_for_reset(); + fuse_ctrl_core_axi_write_agent_config.wait_for_reset(); + fuse_ctrl_prim_axi_write_agent_config.wait_for_reset(); + fuse_ctrl_core_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_prim_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_secreg_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_lc_otp_if_agent_config.wait_for_reset(); + // pragma uvmf custom register_test_reset end + join + + // pragma uvmf custom register_test_setup begin + // UVMF_CHANGE_ME perform potentially necessary operations before running the sequence. + // pragma uvmf custom register_test_setup end + + // pragma uvmf custom register_test_operation begin + // UVMF_CHANGE_ME Perform your custom register test + // pragma uvmf custom register_test_operation end + + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/hdl_top.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/hdl_top.compile new file mode 100644 index 000000000..44aeff616 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/hdl_top.compile @@ -0,0 +1,23 @@ +incdir: + - ${uvm_path}/src + - . +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ../parameters/fuse_ctrl_parameters_pkg.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hdl.compile +src: + - hdl_top.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/hdl_top.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/hdl_top.sv new file mode 100644 index 000000000..e48687ac8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/hdl_top.sv @@ -0,0 +1,276 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// Description: This top level module instantiates all synthesizable +// static content. This and tb_top.sv are the two top level modules +// of the simulation. +// +// This module instantiates the following: +// DUT: The Design Under Test +// Interfaces: Signal bundles that contain signals connected to DUT +// Driver BFM's: BFM's that actively drive interface signals +// Monitor BFM's: BFM's that passively monitor interface signals +// +//---------------------------------------------------------------------- + +//---------------------------------------------------------------------- +// + +module hdl_top; + +import fuse_ctrl_parameters_pkg::*; +import uvmf_base_pkg_hdl::*; + + // pragma attribute hdl_top partition_module_xrtl +// pragma uvmf custom clock_generator begin + bit clk; + // Instantiate a clk driver + // tbx clkgen + initial begin + clk = 0; + #0ns; + forever begin + clk = ~clk; + #5ns; + end + end +// pragma uvmf custom clock_generator end + +// pragma uvmf custom reset_generator begin + bit rst; + // Instantiate a rst driver + // tbx clkgen + initial begin + rst = 0; + #200ns; + rst = 1; + end +// pragma uvmf custom reset_generator end + + // pragma uvmf custom module_item_additional begin + logic edn_clk; + logic edn_rst_n; + // pragma uvmf custom module_item_additional end + + // Instantiate the signal bundle, monitor bfm and driver bfm for each interface. + // The signal bundle, _if, contains signals to be connected to the DUT. + // The monitor, monitor_bfm, observes the bus, _if, and captures transactions. + // The driver, driver_bfm, drives transactions onto the bus, _if. + fuse_ctrl_rst_if fuse_ctrl_rst_agent_bus( + // pragma uvmf custom fuse_ctrl_rst_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_rst_agent_bus_connections end + ); + fuse_ctrl_core_axi_write_in_if fuse_ctrl_core_axi_write_in_if_agent_bus( + // pragma uvmf custom fuse_ctrl_core_axi_write_in_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_core_axi_write_in_if_agent_bus_connections end + ); + fuse_ctrl_core_axi_write_out_if fuse_ctrl_core_axi_write_out_if_agent_bus( + // pragma uvmf custom fuse_ctrl_core_axi_write_out_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_core_axi_write_out_if_agent_bus_connections end + ); + fuse_ctrl_prim_axi_write_in_if fuse_ctrl_prim_axi_write_in_if_agent_bus( + // pragma uvmf custom fuse_ctrl_prim_axi_write_in_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_prim_axi_write_in_if_agent_bus_connections end + ); + fuse_ctrl_prim_axi_write_out_if fuse_ctrl_prim_axi_write_out_if_agent_bus( + // pragma uvmf custom fuse_ctrl_prim_axi_write_out_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_prim_axi_write_out_if_agent_bus_connections end + ); + fuse_ctrl_core_axi_read_in_if fuse_ctrl_core_axi_read_in_if_agent_bus( + // pragma uvmf custom fuse_ctrl_core_axi_read_in_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_core_axi_read_in_if_agent_bus_connections end + ); + fuse_ctrl_core_axi_read_out_if fuse_ctrl_core_axi_read_out_if_agent_bus( + // pragma uvmf custom fuse_ctrl_core_axi_read_out_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_core_axi_read_out_if_agent_bus_connections end + ); + fuse_ctrl_prim_axi_read_in_if fuse_ctrl_prim_axi_read_in_if_agent_bus( + // pragma uvmf custom fuse_ctrl_prim_axi_read_in_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_prim_axi_read_in_if_agent_bus_connections end + ); + fuse_ctrl_prim_axi_read_out_if fuse_ctrl_prim_axi_read_out_if_agent_bus( + // pragma uvmf custom fuse_ctrl_prim_axi_read_out_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_prim_axi_read_out_if_agent_bus_connections end + ); + fuse_ctrl_secreg_axi_read_in_if fuse_ctrl_secreg_axi_read_in_if_agent_bus( + // pragma uvmf custom fuse_ctrl_secreg_axi_read_in_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_secreg_axi_read_in_if_agent_bus_connections end + ); + fuse_ctrl_secreg_axi_read_out_if fuse_ctrl_secreg_axi_read_out_if_agent_bus( + // pragma uvmf custom fuse_ctrl_secreg_axi_read_out_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_secreg_axi_read_out_if_agent_bus_connections end + ); + fuse_ctrl_lc_otp_in_if fuse_ctrl_lc_otp_in_if_agent_bus( + // pragma uvmf custom fuse_ctrl_lc_otp_in_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_lc_otp_in_if_agent_bus_connections end + ); + fuse_ctrl_lc_otp_out_if fuse_ctrl_lc_otp_out_if_agent_bus( + // pragma uvmf custom fuse_ctrl_lc_otp_out_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_lc_otp_out_if_agent_bus_connections end + ); + fuse_ctrl_in_if fuse_ctrl_in_if_agent_bus( + // pragma uvmf custom fuse_ctrl_in_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_in_if_agent_bus_connections end + ); + fuse_ctrl_out_if fuse_ctrl_out_if_agent_bus( + // pragma uvmf custom fuse_ctrl_out_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_out_if_agent_bus_connections end + ); + fuse_ctrl_rst_monitor_bfm fuse_ctrl_rst_agent_mon_bfm(fuse_ctrl_rst_agent_bus.monitor_port); + fuse_ctrl_core_axi_write_in_monitor_bfm fuse_ctrl_core_axi_write_in_if_agent_mon_bfm(fuse_ctrl_core_axi_write_in_if_agent_bus.monitor_port); + fuse_ctrl_core_axi_write_out_monitor_bfm fuse_ctrl_core_axi_write_out_if_agent_mon_bfm(fuse_ctrl_core_axi_write_out_if_agent_bus.monitor_port); + fuse_ctrl_prim_axi_write_in_monitor_bfm fuse_ctrl_prim_axi_write_in_if_agent_mon_bfm(fuse_ctrl_prim_axi_write_in_if_agent_bus.monitor_port); + fuse_ctrl_prim_axi_write_out_monitor_bfm fuse_ctrl_prim_axi_write_out_if_agent_mon_bfm(fuse_ctrl_prim_axi_write_out_if_agent_bus.monitor_port); + fuse_ctrl_core_axi_read_in_monitor_bfm fuse_ctrl_core_axi_read_in_if_agent_mon_bfm(fuse_ctrl_core_axi_read_in_if_agent_bus.monitor_port); + fuse_ctrl_core_axi_read_out_monitor_bfm fuse_ctrl_core_axi_read_out_if_agent_mon_bfm(fuse_ctrl_core_axi_read_out_if_agent_bus.monitor_port); + fuse_ctrl_prim_axi_read_in_monitor_bfm fuse_ctrl_prim_axi_read_in_if_agent_mon_bfm(fuse_ctrl_prim_axi_read_in_if_agent_bus.monitor_port); + fuse_ctrl_prim_axi_read_out_monitor_bfm fuse_ctrl_prim_axi_read_out_if_agent_mon_bfm(fuse_ctrl_prim_axi_read_out_if_agent_bus.monitor_port); + fuse_ctrl_secreg_axi_read_in_monitor_bfm fuse_ctrl_secreg_axi_read_in_if_agent_mon_bfm(fuse_ctrl_secreg_axi_read_in_if_agent_bus.monitor_port); + fuse_ctrl_secreg_axi_read_out_monitor_bfm fuse_ctrl_secreg_axi_read_out_if_agent_mon_bfm(fuse_ctrl_secreg_axi_read_out_if_agent_bus.monitor_port); + fuse_ctrl_lc_otp_in_monitor_bfm fuse_ctrl_lc_otp_in_if_agent_mon_bfm(fuse_ctrl_lc_otp_in_if_agent_bus.monitor_port); + fuse_ctrl_lc_otp_out_monitor_bfm fuse_ctrl_lc_otp_out_if_agent_mon_bfm(fuse_ctrl_lc_otp_out_if_agent_bus.monitor_port); + fuse_ctrl_in_monitor_bfm fuse_ctrl_in_if_agent_mon_bfm(fuse_ctrl_in_if_agent_bus.monitor_port); + fuse_ctrl_out_monitor_bfm fuse_ctrl_out_if_agent_mon_bfm(fuse_ctrl_out_if_agent_bus.monitor_port); + fuse_ctrl_rst_driver_bfm fuse_ctrl_rst_agent_drv_bfm(fuse_ctrl_rst_agent_bus.initiator_port); + fuse_ctrl_core_axi_write_in_driver_bfm fuse_ctrl_core_axi_write_in_if_agent_drv_bfm(fuse_ctrl_core_axi_write_in_if_agent_bus.initiator_port); + fuse_ctrl_prim_axi_write_in_driver_bfm fuse_ctrl_prim_axi_write_in_if_agent_drv_bfm(fuse_ctrl_prim_axi_write_in_if_agent_bus.initiator_port); + fuse_ctrl_core_axi_read_in_driver_bfm fuse_ctrl_core_axi_read_in_if_agent_drv_bfm(fuse_ctrl_core_axi_read_in_if_agent_bus.initiator_port); + fuse_ctrl_prim_axi_read_in_driver_bfm fuse_ctrl_prim_axi_read_in_if_agent_drv_bfm(fuse_ctrl_prim_axi_read_in_if_agent_bus.initiator_port); + fuse_ctrl_secreg_axi_read_in_driver_bfm fuse_ctrl_secreg_axi_read_in_if_agent_drv_bfm(fuse_ctrl_secreg_axi_read_in_if_agent_bus.initiator_port); + fuse_ctrl_lc_otp_in_driver_bfm fuse_ctrl_lc_otp_in_if_agent_drv_bfm(fuse_ctrl_lc_otp_in_if_agent_bus.initiator_port); + fuse_ctrl_in_driver_bfm fuse_ctrl_in_if_agent_drv_bfm(fuse_ctrl_in_if_agent_bus.initiator_port); + + // pragma uvmf custom dut_instantiation begin + // UVMF_CHANGE_ME : Add DUT and connect to signals in _bus interfaces listed above + // Instantiate your DUT here + // These DUT's instantiated to show verilog and vhdl instantiation + //verilog_dut dut_verilog( .clk(clk), .rst(rst), .in_signal(vhdl_to_verilog_signal), .out_signal(verilog_to_vhdl_signal)); + //vhdl_dut dut_vhdl ( .clk(clk), .rst(rst), .in_signal(verilog_to_vhdl_signal), .out_signal(vhdl_to_verilog_signal)); + + otp_ctrl_top #( + .MemInitFile (MemInitFile) + ) dut ( + .clk_i (fuse_ctrl_rst_agent_bus.clk_i ), + .rst_ni (fuse_ctrl_rst_agent_bus.rst_ni ), + // edn + .clk_edn_i (edn_clk ), + .rst_edn_ni (edn_rst_n ), + .edn_o (fuse_ctrl_out_if_agent_bus.edn_o), //(edn_if[0].req ), + .edn_i (fuse_ctrl_in_if_agent_bus.edn_i), //({edn_if[0].ack, edn_if[0].d_data}), + // AXI interface + .s_core_axi_r_if (), + .s_core_axi_w_if (), + .s_prim_axi_r_if (), + .s_prim_axi_w_if (), + .s_secreg_axi_r_if (), + // interrupt + .intr_otp_operation_done_o (fuse_ctrl_out_if_agent_bus.intr_otp_operation_done), + .intr_otp_error_o (fuse_ctrl_out_if_agent_bus.intr_otp_error), + // alert + .alert_rx_i (fuse_ctrl_in_if_agent_bus.alert_rx_i ), //(alert_rx parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ALERT_TEST_OFFSET = 13'h c; + .alert_tx_o (fuse_ctrl_out_if_agent_bus.alert_tx_o ), //(alert_tx ), + // ast + .obs_ctrl_i (fuse_ctrl_in_if_agent_bus.obs_ctrl_i), //(otp_ctrl_if.obs_ctrl_i), + .otp_obs_o (fuse_ctrl_out_if_agent_bus.otp_obs_o), + .otp_ast_pwr_seq_o (fuse_ctrl_out_if_agent_bus.otp_ast_pwr_seq_o), //(ast_req), + .otp_ast_pwr_seq_h_i (fuse_ctrl_out_if_agent_bus.otp_ast_pwr_seq_h_i), //(otp_ctrl_if.otp_ast_pwr_seq_h_i), + // pwrmgr + .pwr_otp_i (fuse_ctrl_in_if_agent_bus.pwr_otp_init_i), //(otp_ctrl_if.pwr_otp_init_i), + .pwr_otp_o (fuse_ctrl_out_if_agent_bus.pwr_otp_o), //({otp_ctrl_if.pwr_otp_done_o, otp_ctrl_if.pwr_otp_idle_o}), + // lc + .lc_otp_vendor_test_i (fuse_ctrl_lc_otp_in_if_agent_bus.lc_otp_vendor_test_i), //(otp_ctrl_if.otp_vendor_test_ctrl_i), + .lc_otp_vendor_test_o (fuse_ctrl_lc_otp_out_if_agent_bus.lc_otp_vendor_test_o), //(otp_ctrl_if.otp_vendor_test_status_o), + .lc_otp_program_i (fuse_ctrl_lc_otp_out_if_agent_bus.lc_otp_program_i), //({lc_prog_if.req, lc_prog_if.h_data}), + .lc_otp_program_o (fuse_ctrl_lc_otp_out_if_agent_bus.lc_otp_program_o), //({lc_prog_if.d_data, lc_prog_if.ack}), + //.lc_creator_seed_sw_rw_en_i (lc_creator_seed_sw_rw_en_i), //(otp_ctrl_if.lc_creator_seed_sw_rw_en_i), + //.lc_owner_seed_sw_rw_en_i (lc_owner_seed_sw_rw_en_i), //(otp_ctrl_if.lc_owner_seed_sw_rw_en_i), + //.lc_seed_hw_rd_en_i (lc_seed_hw_rd_en_i), //(otp_ctrl_if.lc_seed_hw_rd_en_i), + .lc_dft_en_i (fuse_ctrl_lc_otp_in_if_agent_bus.lc_dft_en_i), //(otp_ctrl_if.lc_dft_en_i), + .lc_escalate_en_i (fuse_ctrl_lc_otp_in_if_agent_bus.lc_escalate_en_i), //(otp_ctrl_if.lc_escalate_en_i), + .lc_check_byp_en_i (fuse_ctrl_lc_otp_in_if_agent_bus.lc_check_byp_en_i), //(otp_ctrl_if.lc_check_byp_en_i), + .otp_lc_data_o (fuse_ctrl_lc_otp_out_if_agent_bus.otp_lc_data_o), //(otp_ctrl_if.lc_data_o), + + + .otp_broadcast_o (fuse_ctrl_out_if_agent_bus.otp_broadcast_o), //(otp_ctrl_if.otp_broadcast_o), + .otp_ext_voltage_h_io (fuse_ctrl_in_if_agent_bus.otp_ext_voltage_h_io), + //scan + .scan_en_i (fuse_ctrl_in_if_agent_bus.scan_en_i), //(otp_ctrl_if.scan_en_i), + .scan_rst_ni (fuse_ctrl_in_if_agent_bus.scan_rst_ni), //(otp_ctrl_if.scan_rst_ni), + .scanmode_i (fuse_ctrl_in_if_agent_bus.scanmode_i), //(otp_ctrl_if.scanmode_i), + + // Test-related GPIO output + .cio_test_o (fuse_ctrl_out_if_agent_bus.cio_test_o), //(otp_ctrl_if.cio_test_o), + .cio_test_en_o (fuse_ctrl_out_if_agent_bus.cio_test_en_o) //(otp_ctrl_if.cio_test_en_o) + ); + // pragma uvmf custom dut_instantiation end + + initial begin // tbx vif_binding_block + import uvm_pkg::uvm_config_db; + // The monitor_bfm and driver_bfm for each interface is placed into the uvm_config_db. + // They are placed into the uvm_config_db using the string names defined in the parameters package. + // The string names are passed to the agent configurations by test_top through the top level configuration. + // They are retrieved by the agents configuration class for use by the agent. + uvm_config_db #( virtual fuse_ctrl_rst_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_rst_agent_BFM , fuse_ctrl_rst_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_write_in_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_write_in_if_agent_BFM , fuse_ctrl_core_axi_write_in_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_write_out_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_write_out_if_agent_BFM , fuse_ctrl_core_axi_write_out_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_write_in_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_write_in_if_agent_BFM , fuse_ctrl_prim_axi_write_in_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_write_out_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_write_out_if_agent_BFM , fuse_ctrl_prim_axi_write_out_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_read_in_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_read_in_if_agent_BFM , fuse_ctrl_core_axi_read_in_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_read_out_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_read_out_if_agent_BFM , fuse_ctrl_core_axi_read_out_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_read_in_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_read_in_if_agent_BFM , fuse_ctrl_prim_axi_read_in_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_read_out_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_read_out_if_agent_BFM , fuse_ctrl_prim_axi_read_out_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_secreg_axi_read_in_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_secreg_axi_read_in_if_agent_BFM , fuse_ctrl_secreg_axi_read_in_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_secreg_axi_read_out_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_secreg_axi_read_out_if_agent_BFM , fuse_ctrl_secreg_axi_read_out_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_lc_otp_in_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_lc_otp_in_if_agent_BFM , fuse_ctrl_lc_otp_in_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_lc_otp_out_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_lc_otp_out_if_agent_BFM , fuse_ctrl_lc_otp_out_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_in_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_in_if_agent_BFM , fuse_ctrl_in_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_out_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_out_if_agent_BFM , fuse_ctrl_out_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_rst_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_rst_agent_BFM , fuse_ctrl_rst_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_write_in_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_write_in_if_agent_BFM , fuse_ctrl_core_axi_write_in_if_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_write_in_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_write_in_if_agent_BFM , fuse_ctrl_prim_axi_write_in_if_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_read_in_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_read_in_if_agent_BFM , fuse_ctrl_core_axi_read_in_if_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_read_in_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_read_in_if_agent_BFM , fuse_ctrl_prim_axi_read_in_if_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_secreg_axi_read_in_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_secreg_axi_read_in_if_agent_BFM , fuse_ctrl_secreg_axi_read_in_if_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_lc_otp_in_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_lc_otp_in_if_agent_BFM , fuse_ctrl_lc_otp_in_if_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_in_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_in_if_agent_BFM , fuse_ctrl_in_if_agent_drv_bfm ); + end + +endmodule + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/hdl_top.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/hdl_top.vinfo new file mode 100644 index 000000000..0c3ac0b29 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/hdl_top.vinfo @@ -0,0 +1,19 @@ +@use $UVMF_PROJECT_DIR/rtl/verilog/verilog_dut.vinfo +@use $UVMF_PROJECT_DIR/tb/parameters/fuse_ctrl_parameters_pkg.vinfo +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo +hdl_top.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/hvl_top.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/hvl_top.compile new file mode 100644 index 000000000..040488764 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/hvl_top.compile @@ -0,0 +1,7 @@ +incdir: + - ${uvm_path}/src + - . +needs: + - ../tests/fuse_ctrl_tests_pkg.compile +src: + - hvl_top.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/hvl_top.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/hvl_top.sv new file mode 100644 index 000000000..68e3fc6f6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/hvl_top.sv @@ -0,0 +1,47 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +// +// DESCRIPTION: This module loads the test package and starts the UVM phases. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +module hvl_top; + +import uvm_pkg::*; +import fuse_ctrl_tests_pkg::*; + + // pragma uvmf custom module_item_additional begin + // pragma uvmf custom module_item_additional end + + initial begin + $timeformat(-9,3,"ns",5); + run_test(); + end + +endmodule + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/hvl_top.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/hvl_top.vinfo new file mode 100644 index 000000000..31185e42f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/hvl_top.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_PROJECT_DIR/tb/tests/fuse_ctrl_tests_pkg.vinfo +hvl_top.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/top_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/top_filelist_hdl.f new file mode 100644 index 000000000..1e9dab653 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/top_filelist_hdl.f @@ -0,0 +1,3 @@ +$UVMF_PROJECT_DIR/tb/testbench/hdl_top.sv +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/top_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/top_filelist_hvl.f new file mode 100644 index 000000000..42383ab2d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/testbench/top_filelist_hvl.f @@ -0,0 +1,3 @@ +$UVMF_PROJECT_DIR/tb/testbench/hvl_top.sv +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.compile new file mode 100644 index 000000000..97d3ea8b7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.compile @@ -0,0 +1,22 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile + - ../../../../verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile + - ../parameters/fuse_ctrl_parameters_pkg.compile + - ../sequences/fuse_ctrl_sequences_pkg.compile +src: + - fuse_ctrl_tests_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.sv new file mode 100644 index 000000000..a3021a054 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.sv @@ -0,0 +1,94 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This package contains all tests currently written for +// the simulation project. Once compiled, any test can be selected +// from the vsim command line using +UVM_TESTNAME=yourTestNameHere +// +// CONTAINS: +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +package fuse_ctrl_tests_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg::*; + import fuse_ctrl_parameters_pkg::*; + import fuse_ctrl_env_pkg::*; + import fuse_ctrl_sequences_pkg::*; + import fuse_ctrl_rst_pkg::*; + import fuse_ctrl_rst_pkg_hdl::*; + import fuse_ctrl_core_axi_write_in_pkg::*; + import fuse_ctrl_core_axi_write_in_pkg_hdl::*; + import fuse_ctrl_core_axi_write_out_pkg::*; + import fuse_ctrl_core_axi_write_out_pkg_hdl::*; + import fuse_ctrl_prim_axi_write_in_pkg::*; + import fuse_ctrl_prim_axi_write_in_pkg_hdl::*; + import fuse_ctrl_prim_axi_write_out_pkg::*; + import fuse_ctrl_prim_axi_write_out_pkg_hdl::*; + import fuse_ctrl_core_axi_read_in_pkg::*; + import fuse_ctrl_core_axi_read_in_pkg_hdl::*; + import fuse_ctrl_core_axi_read_out_pkg::*; + import fuse_ctrl_core_axi_read_out_pkg_hdl::*; + import fuse_ctrl_prim_axi_read_in_pkg::*; + import fuse_ctrl_prim_axi_read_in_pkg_hdl::*; + import fuse_ctrl_prim_axi_read_out_pkg::*; + import fuse_ctrl_prim_axi_read_out_pkg_hdl::*; + import fuse_ctrl_secreg_axi_read_in_pkg::*; + import fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; + import fuse_ctrl_secreg_axi_read_out_pkg::*; + import fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; + import fuse_ctrl_lc_otp_in_pkg::*; + import fuse_ctrl_lc_otp_in_pkg_hdl::*; + import fuse_ctrl_lc_otp_out_pkg::*; + import fuse_ctrl_lc_otp_out_pkg_hdl::*; + import fuse_ctrl_in_pkg::*; + import fuse_ctrl_in_pkg_hdl::*; + import fuse_ctrl_out_pkg::*; + import fuse_ctrl_out_pkg_hdl::*; + + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + `include "src/test_top.svh" + `include "src/register_test.svh" + `include "src/example_derived_test.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new tests to the src directory + // be sure to add the test file here so that it will be + // compiled as part of the test package. Be sure to place + // the new test after any base tests of the new test. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.vinfo new file mode 100644 index 000000000..e0db7c18e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.vinfo @@ -0,0 +1,21 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo +@use $UVMF_PROJECT_DIR/tb/parameters/fuse_ctrl_parameters_pkg.vinfo +@use $UVMF_PROJECT_DIR/tb/sequences/fuse_ctrl_sequences_pkg.vinfo ++incdir+@vinfodir +fuse_ctrl_tests_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/tests/src/example_derived_test.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/tests/src/example_derived_test.svh new file mode 100644 index 000000000..82d6c45ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/tests/src/example_derived_test.svh @@ -0,0 +1,57 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This test extends test_top and makes +// changes to test_top using the UVM factory type_override: +// +// Test scenario: +// This is a template test that can be used to create future tests. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class example_derived_test extends test_top; + + `uvm_component_utils( example_derived_test ); + + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + + virtual function void build_phase(uvm_phase phase); + // The factory override below is an example of how to replace the fuse_ctrl_bench_sequence_base + // sequence with the example_derived_test_sequence. + fuse_ctrl_bench_sequence_base::type_id::set_type_override(example_derived_test_sequence::get_type()); + // Execute the build_phase of test_top AFTER all factory overrides have been created. + super.build_phase(phase); + // pragma uvmf custom configuration_settings_post_randomize begin + // UVMF_CHANGE_ME Test specific configuration values can be set here. + // The configuration structure has already been randomized. + // pragma uvmf custom configuration_settings_post_randomize end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/tests/src/register_test.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/tests/src/register_test.svh new file mode 100644 index 000000000..1be722286 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/tests/src/register_test.svh @@ -0,0 +1,54 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This test extends test_top and makes +// changes to test_top using the UVM factory type_override: +// +// Test scenario: +// This is a template test that can be used to create future tests. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class register_test extends test_top; + + `uvm_component_utils( register_test ); + + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + + virtual function void build_phase(uvm_phase phase); + // The factory override below replaces the fuse_ctrl_bench_sequence_base + // sequence with the register_test_sequence. + fuse_ctrl_bench_sequence_base::type_id::set_type_override(register_test_sequence::get_type()); + // Execute the build_phase of test_top AFTER all factory overrides have been created. + super.build_phase(phase); + endfunction + + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/tests/src/test_top.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/tests/src/test_top.svh new file mode 100644 index 000000000..fc71ef31d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/tb/tests/src/test_top.svh @@ -0,0 +1,118 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// Description: This top level UVM test is the base class for all +// future tests created for this project. +// +// This test class contains: +// Configuration: The top level configuration for the project. +// Environment: The top level environment for the project. +// Top_level_sequence: The top level sequence for the project. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +typedef fuse_ctrl_env_configuration fuse_ctrl_env_configuration_t; +typedef fuse_ctrl_environment fuse_ctrl_environment_t; + +class test_top extends uvmf_test_base #(.CONFIG_T(fuse_ctrl_env_configuration_t), + .ENV_T(fuse_ctrl_environment_t), + .TOP_LEVEL_SEQ_T(fuse_ctrl_bench_sequence_base)); + + `uvm_component_utils( test_top ); + + + + string interface_names[] = { + fuse_ctrl_rst_agent_BFM /* fuse_ctrl_rst_agent [0] */ , + fuse_ctrl_core_axi_write_in_if_agent_BFM /* fuse_ctrl_core_axi_write_in_if_agent [1] */ , + fuse_ctrl_core_axi_write_out_if_agent_BFM /* fuse_ctrl_core_axi_write_out_if_agent [2] */ , + fuse_ctrl_prim_axi_write_in_if_agent_BFM /* fuse_ctrl_prim_axi_write_in_if_agent [3] */ , + fuse_ctrl_prim_axi_write_out_if_agent_BFM /* fuse_ctrl_prim_axi_write_out_if_agent [4] */ , + fuse_ctrl_core_axi_read_in_if_agent_BFM /* fuse_ctrl_core_axi_read_in_if_agent [5] */ , + fuse_ctrl_core_axi_read_out_if_agent_BFM /* fuse_ctrl_core_axi_read_out_if_agent [6] */ , + fuse_ctrl_prim_axi_read_in_if_agent_BFM /* fuse_ctrl_prim_axi_read_in_if_agent [7] */ , + fuse_ctrl_prim_axi_read_out_if_agent_BFM /* fuse_ctrl_prim_axi_read_out_if_agent [8] */ , + fuse_ctrl_secreg_axi_read_in_if_agent_BFM /* fuse_ctrl_secreg_axi_read_in_if_agent [9] */ , + fuse_ctrl_secreg_axi_read_out_if_agent_BFM /* fuse_ctrl_secreg_axi_read_out_if_agent [10] */ , + fuse_ctrl_lc_otp_in_if_agent_BFM /* fuse_ctrl_lc_otp_in_if_agent [11] */ , + fuse_ctrl_lc_otp_out_if_agent_BFM /* fuse_ctrl_lc_otp_out_if_agent [12] */ , + fuse_ctrl_in_if_agent_BFM /* fuse_ctrl_in_if_agent [13] */ , + fuse_ctrl_out_if_agent_BFM /* fuse_ctrl_out_if_agent [14] */ +}; + +uvmf_active_passive_t interface_activities[] = { + ACTIVE /* fuse_ctrl_rst_agent [0] */ , + ACTIVE /* fuse_ctrl_core_axi_write_in_if_agent [1] */ , + PASSIVE /* fuse_ctrl_core_axi_write_out_if_agent [2] */ , + ACTIVE /* fuse_ctrl_prim_axi_write_in_if_agent [3] */ , + PASSIVE /* fuse_ctrl_prim_axi_write_out_if_agent [4] */ , + ACTIVE /* fuse_ctrl_core_axi_read_in_if_agent [5] */ , + PASSIVE /* fuse_ctrl_core_axi_read_out_if_agent [6] */ , + ACTIVE /* fuse_ctrl_prim_axi_read_in_if_agent [7] */ , + PASSIVE /* fuse_ctrl_prim_axi_read_out_if_agent [8] */ , + ACTIVE /* fuse_ctrl_secreg_axi_read_in_if_agent [9] */ , + PASSIVE /* fuse_ctrl_secreg_axi_read_out_if_agent [10] */ , + ACTIVE /* fuse_ctrl_lc_otp_in_if_agent [11] */ , + PASSIVE /* fuse_ctrl_lc_otp_out_if_agent [12] */ , + ACTIVE /* fuse_ctrl_in_if_agent [13] */ , + PASSIVE /* fuse_ctrl_out_if_agent [14] */ }; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // FUNCTION: new() + // This is the standard systemVerilog constructor. All components are + // constructed in the build_phase to allow factory overriding. + // + function new( string name = "", uvm_component parent = null ); + super.new( name ,parent ); + endfunction + + + + // **************************************************************************** + // FUNCTION: build_phase() + // The construction of the configuration and environment classes is done in + // the build_phase of uvmf_test_base. Once the configuraton and environment + // classes are built then the initialize call is made to perform the + // following: + // Monitor and driver BFM virtual interface handle passing into agents + // Set the active/passive state for each agent + // Once this build_phase completes, the build_phase of the environment is + // executed which builds the agents. + // + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + // pragma uvmf custom configuration_settings_post_randomize begin + // pragma uvmf custom configuration_settings_post_randomize end + configuration.initialize(NA, "uvm_test_top.environment", interface_names, null, interface_activities); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/yaml/fuse_ctrl_bench.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/yaml/fuse_ctrl_bench.yaml new file mode 100644 index 000000000..5dfa4be4a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/project_benches/fuse_ctrl/yaml/fuse_ctrl_bench.yaml @@ -0,0 +1,43 @@ +uvmf: + benches: + fuse_ctrl: + active_passive: + - bfm_name: fuse_ctrl_rst_agent + value: ACTIVE + - bfm_name: fuse_ctrl_core_axi_write_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_core_axi_write_out_if_agent + value: PASSIVE + - bfm_name: fuse_ctrl_prim_axi_write_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_prim_axi_write_out_if_agent + value: PASSIVE + - bfm_name: fuse_ctrl_core_axi_read_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_core_axi_read_out_if_agent + value: PASSIVE + - bfm_name: fuse_ctrl_prim_axi_read_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_prim_axi_read_out_if_agent + value: PASSIVE + - bfm_name: fuse_ctrl_secreg_axi_read_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_secreg_axi_read_out_if_agent + value: PASSIVE + - bfm_name: fuse_ctrl_lc_otp_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_lc_otp_out_if_agent + value: PASSIVE + - bfm_name: fuse_ctrl_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_out_if_agent + value: PASSIVE + active_passive_default: ACTIVE + clock_half_period: 5ns + clock_phase_offset: 0ns + existing_library_component: 'True' + interface_params: [] + reset_assertion_level: 'False' + reset_duration: 200ns + top_env: fuse_ctrl + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/.project new file mode 100644 index 000000000..ec64afa4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/.project @@ -0,0 +1,32 @@ + + + fuse_ctrl_env_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/.svproject new file mode 100644 index 000000000..bcfe6ac3d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/Makefile new file mode 100644 index 000000000..4cf61d51d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/Makefile @@ -0,0 +1,56 @@ +# fuse_ctrl environment packages source and make target + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +# Include all requisite sub-environment package targets for this bench + +fuse_ctrl_ENV_PKG =\ + $(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv + +COMP_fuse_ctrl_PKG_TGT_0 = q_comp_fuse_ctrl_env_pkg +COMP_fuse_ctrl_PKG_TGT_1 = v_comp_fuse_ctrl_env_pkg +COMP_fuse_ctrl_PKG_TGT = $(COMP_fuse_ctrl_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_env_pkg: $(COMP_fuse_ctrl_PKG_TGT) + +q_comp_fuse_ctrl_env_pkg: + $(HVL_COMP_CMD) +incdir+$(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg $(fuse_ctrl_ENV_PKG) + +v_comp_fuse_ctrl_env_pkg: q_comp_fuse_ctrl_env_pkg + $(VELANALYZE_HVL_CMD) +incdir+$(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg $(fuse_ctrl_ENV_PKG) + + + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_ENV_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_env_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_env_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_env_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_env_pkg += -I$(fuse_ctrl_ENV_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_env_pkg += $(fuse_ctrl_ENV_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_env_pkg += \ + \ + -o .so + +comp_fuse_ctrl_env_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Environment C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_env_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_env_pkg) + @echo "--------------------------------" + @echo "Linking Environment C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_env_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_env_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/compile.do new file mode 100644 index 000000000..05dca66cc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/compile.do @@ -0,0 +1,12 @@ +# Tcl do file for compile of fuse_ctrl interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + + +quietly set cmd [format "vlog -timescale 1ps/1ps +incdir+%s/environment_packages/fuse_ctrl_env_pkg" $env(UVMF_VIP_LIBRARY_HOME)] +quietly set cmd [format "%s %s/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv" $cmd $env(UVMF_VIP_LIBRARY_HOME)] +eval $cmd + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile new file mode 100644 index 000000000..cf63398b5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile @@ -0,0 +1,21 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hvl.compile + +src: + - fuse_ctrl_env_pkg.sv + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv new file mode 100644 index 000000000..b4b5001bc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// environment package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_env_pkg; + + import uvm_pkg::*; + `include "uvm_macros.svh" + import uvmf_base_pkg::*; + import fuse_ctrl_rst_pkg::*; + import fuse_ctrl_rst_pkg_hdl::*; + import fuse_ctrl_core_axi_write_in_if_pkg::*; + import fuse_ctrl_core_axi_write_in_if_pkg_hdl::*; + import fuse_ctrl_core_axi_write_out_if_pkg::*; + import fuse_ctrl_core_axi_write_out_if_pkg_hdl::*; + import fuse_ctrl_prim_axi_write_in_if_pkg::*; + import fuse_ctrl_prim_axi_write_in_if_pkg_hdl::*; + import fuse_ctrl_prim_axi_write_out_if_pkg::*; + import fuse_ctrl_prim_axi_write_out_if_pkg_hdl::*; + import fuse_ctrl_core_axi_read_in_if_pkg::*; + import fuse_ctrl_core_axi_read_in_if_pkg_hdl::*; + import fuse_ctrl_core_axi_read_out_if_pkg::*; + import fuse_ctrl_core_axi_read_out_if_pkg_hdl::*; + import fuse_ctrl_prim_axi_read_in_if_pkg::*; + import fuse_ctrl_prim_axi_read_in_if_pkg_hdl::*; + import fuse_ctrl_prim_axi_read_out_if_pkg::*; + import fuse_ctrl_prim_axi_read_out_if_pkg_hdl::*; + import fuse_ctrl_secreg_axi_read_in_if_pkg::*; + import fuse_ctrl_secreg_axi_read_in_if_pkg_hdl::*; + import fuse_ctrl_secreg_axi_read_out_if_pkg::*; + import fuse_ctrl_secreg_axi_read_out_if_pkg_hdl::*; + import fuse_ctrl_lc_otp_in_if_pkg::*; + import fuse_ctrl_lc_otp_in_if_pkg_hdl::*; + import fuse_ctrl_lc_otp_out_if_pkg::*; + import fuse_ctrl_lc_otp_out_if_pkg_hdl::*; + import fuse_ctrl_in_if_pkg::*; + import fuse_ctrl_in_if_pkg_hdl::*; + import fuse_ctrl_out_if_pkg::*; + import fuse_ctrl_out_if_pkg_hdl::*; + + `uvm_analysis_imp_decl(_fuse_ctrl_rst_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_core_axi_write_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_prim_axi_write_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_core_axi_read_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_prim_axi_read_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_secreg_axi_read_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_lc_otp_if_agent_ae) + `uvm_analysis_imp_decl(_expected_analysis_export) + `uvm_analysis_imp_decl(_actual_analysis_export) + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_env_typedefs.svh" + `include "src/fuse_ctrl_env_configuration.svh" + `include "src/fuse_ctrl_predictor.svh" + `include "src/fuse_ctrl_scoreboard.svh" + `include "src/fuse_ctrl_environment.svh" + `include "src/fuse_ctrl_env_sequence_base.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new environment level sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the environment package. Be sure to place + // the new sequence after any base sequence of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo new file mode 100644 index 000000000..9a30910e5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo @@ -0,0 +1,18 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.vinfo ++incdir+@vinfodir +fuse_ctrl_env_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F new file mode 100644 index 000000000..b40213df3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F @@ -0,0 +1,12 @@ + +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + +// Sub-Environments + ++incdir+. +./fuse_ctrl_env_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_configuration.svh new file mode 100644 index 000000000..f3e1a188e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_configuration.svh @@ -0,0 +1,254 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: THis is the configuration for the fuse_ctrl environment. +// it contains configuration classes for each agent. It also contains +// environment level configuration variables. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_env_configuration +extends uvmf_environment_configuration_base; + + `uvm_object_utils( fuse_ctrl_env_configuration ) + + +//Constraints for the configuration variables: + + + covergroup fuse_ctrl_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + + typedef fuse_ctrl_rst_configuration fuse_ctrl_rst_agent_config_t; + rand fuse_ctrl_rst_agent_config_t fuse_ctrl_rst_agent_config; + + typedef fuse_ctrl_core_axi_write_in_if_configuration fuse_ctrl_core_axi_write_in_if_agent_config_t; + rand fuse_ctrl_core_axi_write_in_if_agent_config_t fuse_ctrl_core_axi_write_in_if_agent_config; + + typedef fuse_ctrl_core_axi_write_out_if_configuration fuse_ctrl_core_axi_write_out_if_agent_config_t; + rand fuse_ctrl_core_axi_write_out_if_agent_config_t fuse_ctrl_core_axi_write_out_if_agent_config; + + typedef fuse_ctrl_prim_axi_write_in_if_configuration fuse_ctrl_prim_axi_write_in_if_agent_config_t; + rand fuse_ctrl_prim_axi_write_in_if_agent_config_t fuse_ctrl_prim_axi_write_in_if_agent_config; + + typedef fuse_ctrl_prim_axi_write_out_if_configuration fuse_ctrl_prim_axi_write_out_if_agent_config_t; + rand fuse_ctrl_prim_axi_write_out_if_agent_config_t fuse_ctrl_prim_axi_write_out_if_agent_config; + + typedef fuse_ctrl_core_axi_read_in_if_configuration fuse_ctrl_core_axi_read_in_if_agent_config_t; + rand fuse_ctrl_core_axi_read_in_if_agent_config_t fuse_ctrl_core_axi_read_in_if_agent_config; + + typedef fuse_ctrl_core_axi_read_out_if_configuration fuse_ctrl_core_axi_read_out_if_agent_config_t; + rand fuse_ctrl_core_axi_read_out_if_agent_config_t fuse_ctrl_core_axi_read_out_if_agent_config; + + typedef fuse_ctrl_prim_axi_read_in_if_configuration fuse_ctrl_prim_axi_read_in_if_agent_config_t; + rand fuse_ctrl_prim_axi_read_in_if_agent_config_t fuse_ctrl_prim_axi_read_in_if_agent_config; + + typedef fuse_ctrl_prim_axi_read_out_if_configuration fuse_ctrl_prim_axi_read_out_if_agent_config_t; + rand fuse_ctrl_prim_axi_read_out_if_agent_config_t fuse_ctrl_prim_axi_read_out_if_agent_config; + + typedef fuse_ctrl_secreg_axi_read_in_if_configuration fuse_ctrl_secreg_axi_read_in_if_agent_config_t; + rand fuse_ctrl_secreg_axi_read_in_if_agent_config_t fuse_ctrl_secreg_axi_read_in_if_agent_config; + + typedef fuse_ctrl_secreg_axi_read_out_if_configuration fuse_ctrl_secreg_axi_read_out_if_agent_config_t; + rand fuse_ctrl_secreg_axi_read_out_if_agent_config_t fuse_ctrl_secreg_axi_read_out_if_agent_config; + + typedef fuse_ctrl_lc_otp_in_if_configuration fuse_ctrl_lc_otp_in_if_agent_config_t; + rand fuse_ctrl_lc_otp_in_if_agent_config_t fuse_ctrl_lc_otp_in_if_agent_config; + + typedef fuse_ctrl_lc_otp_out_if_configuration fuse_ctrl_lc_otp_out_if_agent_config_t; + rand fuse_ctrl_lc_otp_out_if_agent_config_t fuse_ctrl_lc_otp_out_if_agent_config; + + typedef fuse_ctrl_in_if_configuration fuse_ctrl_in_if_agent_config_t; + rand fuse_ctrl_in_if_agent_config_t fuse_ctrl_in_if_agent_config; + + typedef fuse_ctrl_out_if_configuration fuse_ctrl_out_if_agent_config_t; + rand fuse_ctrl_out_if_agent_config_t fuse_ctrl_out_if_agent_config; + + + + + typedef uvmf_virtual_sequencer_base #(.CONFIG_T(fuse_ctrl_env_configuration)) fuse_ctrl_vsqr_t; + fuse_ctrl_vsqr_t vsqr; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// This function constructs the configuration object for each agent in the environment. +// + function new( string name = "" ); + super.new( name ); + + + fuse_ctrl_rst_agent_config = fuse_ctrl_rst_agent_config_t::type_id::create("fuse_ctrl_rst_agent_config"); + fuse_ctrl_core_axi_write_in_if_agent_config = fuse_ctrl_core_axi_write_in_if_agent_config_t::type_id::create("fuse_ctrl_core_axi_write_in_if_agent_config"); + fuse_ctrl_core_axi_write_out_if_agent_config = fuse_ctrl_core_axi_write_out_if_agent_config_t::type_id::create("fuse_ctrl_core_axi_write_out_if_agent_config"); + fuse_ctrl_prim_axi_write_in_if_agent_config = fuse_ctrl_prim_axi_write_in_if_agent_config_t::type_id::create("fuse_ctrl_prim_axi_write_in_if_agent_config"); + fuse_ctrl_prim_axi_write_out_if_agent_config = fuse_ctrl_prim_axi_write_out_if_agent_config_t::type_id::create("fuse_ctrl_prim_axi_write_out_if_agent_config"); + fuse_ctrl_core_axi_read_in_if_agent_config = fuse_ctrl_core_axi_read_in_if_agent_config_t::type_id::create("fuse_ctrl_core_axi_read_in_if_agent_config"); + fuse_ctrl_core_axi_read_out_if_agent_config = fuse_ctrl_core_axi_read_out_if_agent_config_t::type_id::create("fuse_ctrl_core_axi_read_out_if_agent_config"); + fuse_ctrl_prim_axi_read_in_if_agent_config = fuse_ctrl_prim_axi_read_in_if_agent_config_t::type_id::create("fuse_ctrl_prim_axi_read_in_if_agent_config"); + fuse_ctrl_prim_axi_read_out_if_agent_config = fuse_ctrl_prim_axi_read_out_if_agent_config_t::type_id::create("fuse_ctrl_prim_axi_read_out_if_agent_config"); + fuse_ctrl_secreg_axi_read_in_if_agent_config = fuse_ctrl_secreg_axi_read_in_if_agent_config_t::type_id::create("fuse_ctrl_secreg_axi_read_in_if_agent_config"); + fuse_ctrl_secreg_axi_read_out_if_agent_config = fuse_ctrl_secreg_axi_read_out_if_agent_config_t::type_id::create("fuse_ctrl_secreg_axi_read_out_if_agent_config"); + fuse_ctrl_lc_otp_in_if_agent_config = fuse_ctrl_lc_otp_in_if_agent_config_t::type_id::create("fuse_ctrl_lc_otp_in_if_agent_config"); + fuse_ctrl_lc_otp_out_if_agent_config = fuse_ctrl_lc_otp_out_if_agent_config_t::type_id::create("fuse_ctrl_lc_otp_out_if_agent_config"); + fuse_ctrl_in_if_agent_config = fuse_ctrl_in_if_agent_config_t::type_id::create("fuse_ctrl_in_if_agent_config"); + fuse_ctrl_out_if_agent_config = fuse_ctrl_out_if_agent_config_t::type_id::create("fuse_ctrl_out_if_agent_config"); + + + fuse_ctrl_configuration_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that configuration variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + + // pragma uvmf custom new begin + // pragma uvmf custom new end + endfunction + +// **************************************************************************** +// FUNCTION : set_vsqr() +// This function is used to assign the vsqr handle. + virtual function void set_vsqr( fuse_ctrl_vsqr_t vsqr); + this.vsqr = vsqr; + endfunction : set_vsqr + +// **************************************************************************** +// FUNCTION: post_randomize() +// This function is automatically called after the randomize() function +// is executed. +// + function void post_randomize(); + super.post_randomize(); + // pragma uvmf custom post_randomize begin + // pragma uvmf custom post_randomize end + endfunction + +// **************************************************************************** +// FUNCTION: convert2string() +// This function converts all variables in this class to a single string for +// logfile reporting. This function concatenates the convert2string result for +// each agent configuration in this configuration class. +// + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + return { + + "\n", fuse_ctrl_rst_agent_config.convert2string, + "\n", fuse_ctrl_core_axi_write_agent_config.convert2string, + "\n", fuse_ctrl_prim_axi_write_agent_config.convert2string, + "\n", fuse_ctrl_core_axi_read_agent_config.convert2string, + "\n", fuse_ctrl_prim_axi_read_agent_config.convert2string, + "\n", fuse_ctrl_secreg_axi_read_agent_config.convert2string, + "\n", fuse_ctrl_lc_otp_if_agent_config.convert2string + + + }; + // pragma uvmf custom convert2string end + endfunction +// **************************************************************************** +// FUNCTION: initialize(); +// This function configures each interface agents configuration class. The +// sim level determines the active/passive state of the agent. The environment_path +// identifies the hierarchy down to and including the instantiation name of the +// environment for this configuration class. Each instance of the environment +// has its own configuration class. The string interface names are used by +// the agent configurations to identify the virtual interface handle to pull from +// the uvm_config_db. +// + function void initialize(uvmf_sim_level_t sim_level, + string environment_path, + string interface_names[], + uvm_reg_block register_model = null, + uvmf_active_passive_t interface_activity[] = {} + ); + + super.initialize(sim_level, environment_path, interface_names, register_model, interface_activity); + + + + // Interface initialization for local agents + fuse_ctrl_rst_agent_config.initialize( interface_activity[0], {environment_path,".fuse_ctrl_rst_agent"}, interface_names[0]); + fuse_ctrl_rst_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_rst_agent_config.has_coverage = 1; + fuse_ctrl_core_axi_write_in_if_agent_config.initialize( interface_activity[1], {environment_path,".fuse_ctrl_core_axi_write_in_if_agent"}, interface_names[1]); + fuse_ctrl_core_axi_write_in_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_core_axi_write_in_if_agent_config.has_coverage = 1; + fuse_ctrl_core_axi_write_out_if_agent_config.initialize( interface_activity[2], {environment_path,".fuse_ctrl_core_axi_write_out_if_agent"}, interface_names[2]); + fuse_ctrl_core_axi_write_out_if_agent_config.initiator_responder = RESPONDER; + // fuse_ctrl_core_axi_write_out_if_agent_config.has_coverage = 1; + fuse_ctrl_prim_axi_write_in_if_agent_config.initialize( interface_activity[3], {environment_path,".fuse_ctrl_prim_axi_write_in_if_agent"}, interface_names[3]); + fuse_ctrl_prim_axi_write_in_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_prim_axi_write_in_if_agent_config.has_coverage = 1; + fuse_ctrl_prim_axi_write_out_if_agent_config.initialize( interface_activity[4], {environment_path,".fuse_ctrl_prim_axi_write_out_if_agent"}, interface_names[4]); + fuse_ctrl_prim_axi_write_out_if_agent_config.initiator_responder = RESPONDER; + // fuse_ctrl_prim_axi_write_out_if_agent_config.has_coverage = 1; + fuse_ctrl_core_axi_read_in_if_agent_config.initialize( interface_activity[5], {environment_path,".fuse_ctrl_core_axi_read_in_if_agent"}, interface_names[5]); + fuse_ctrl_core_axi_read_in_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_core_axi_read_in_if_agent_config.has_coverage = 1; + fuse_ctrl_core_axi_read_out_if_agent_config.initialize( interface_activity[6], {environment_path,".fuse_ctrl_core_axi_read_out_if_agent"}, interface_names[6]); + fuse_ctrl_core_axi_read_out_if_agent_config.initiator_responder = RESPONDER; + // fuse_ctrl_core_axi_read_out_if_agent_config.has_coverage = 1; + fuse_ctrl_prim_axi_read_in_if_agent_config.initialize( interface_activity[7], {environment_path,".fuse_ctrl_prim_axi_read_in_if_agent"}, interface_names[7]); + fuse_ctrl_prim_axi_read_in_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_prim_axi_read_in_if_agent_config.has_coverage = 1; + fuse_ctrl_prim_axi_read_out_if_agent_config.initialize( interface_activity[8], {environment_path,".fuse_ctrl_prim_axi_read_out_if_agent"}, interface_names[8]); + fuse_ctrl_prim_axi_read_out_if_agent_config.initiator_responder = RESPONDER; + // fuse_ctrl_prim_axi_read_out_if_agent_config.has_coverage = 1; + fuse_ctrl_secreg_axi_read_in_if_agent_config.initialize( interface_activity[9], {environment_path,".fuse_ctrl_secreg_axi_read_in_if_agent"}, interface_names[9]); + fuse_ctrl_secreg_axi_read_in_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_secreg_axi_read_in_if_agent_config.has_coverage = 1; + fuse_ctrl_secreg_axi_read_out_if_agent_config.initialize( interface_activity[10], {environment_path,".fuse_ctrl_secreg_axi_read_out_if_agent"}, interface_names[10]); + fuse_ctrl_secreg_axi_read_out_if_agent_config.initiator_responder = RESPONDER; + // fuse_ctrl_secreg_axi_read_out_if_agent_config.has_coverage = 1; + fuse_ctrl_lc_otp_in_if_agent_config.initialize( interface_activity[11], {environment_path,".fuse_ctrl_lc_otp_in_if_agent"}, interface_names[11]); + fuse_ctrl_lc_otp_in_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_lc_otp_in_if_agent_config.has_coverage = 1; + fuse_ctrl_lc_otp_out_if_agent_config.initialize( interface_activity[12], {environment_path,".fuse_ctrl_lc_otp_out_if_agent"}, interface_names[12]); + fuse_ctrl_lc_otp_out_if_agent_config.initiator_responder = RESPONDER; + // fuse_ctrl_lc_otp_out_if_agent_config.has_coverage = 1; + fuse_ctrl_in_if_agent_config.initialize( interface_activity[13], {environment_path,".fuse_ctrl_in_if_agent"}, interface_names[13]); + fuse_ctrl_in_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_in_if_agent_config.has_coverage = 1; + fuse_ctrl_out_if_agent_config.initialize( interface_activity[14], {environment_path,".fuse_ctrl_out_if_agent"}, interface_names[14]); + fuse_ctrl_out_if_agent_config.initiator_responder = RESPONDER; + // fuse_ctrl_out_if_agent_config.has_coverage = 1; + + + + + + // pragma uvmf custom initialize begin + // pragma uvmf custom initialize end + + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_sequence_base.svh new file mode 100644 index 000000000..ff0f1f6fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_sequence_base.svh @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains environment level sequences that will +// be reused from block to top level simulations. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_env_sequence_base #( + type CONFIG_T + ) extends uvmf_virtual_sequence_base #(.CONFIG_T(CONFIG_T)); + + + `uvm_object_param_utils( fuse_ctrl_env_sequence_base #( + CONFIG_T + ) ); + + +// This fuse_ctrl_env_sequence_base contains a handle to a fuse_ctrl_env_configuration object +// named configuration. This configuration variable contains a handle to each +// sequencer within each agent within this environment and any sub-environments. +// The configuration object handle is automatically assigned in the pre_body in the +// base class of this sequence. The configuration handle is retrieved from the +// virtual sequencer that this sequence is started on. +// Available sequencer handles within the environment configuration: + + // Initiator agent sequencers in fuse_ctrl_environment: + // configuration.fuse_ctrl_rst_agent_config.sequencer + // configuration.fuse_ctrl_core_axi_write_in_if_agent_config.sequencer + // configuration.fuse_ctrl_prim_axi_write_in_if_agent_config.sequencer + // configuration.fuse_ctrl_core_axi_read_in_if_agent_config.sequencer + // configuration.fuse_ctrl_prim_axi_read_in_if_agent_config.sequencer + // configuration.fuse_ctrl_secreg_axi_read_in_if_agent_config.sequencer + // configuration.fuse_ctrl_lc_otp_in_if_agent_config.sequencer + // configuration.fuse_ctrl_in_if_agent_config.sequencer + + // Responder agent sequencers in fuse_ctrl_environment: + // configuration.fuse_ctrl_core_axi_write_out_if_agent_config.sequencer + // configuration.fuse_ctrl_prim_axi_write_out_if_agent_config.sequencer + // configuration.fuse_ctrl_core_axi_read_out_if_agent_config.sequencer + // configuration.fuse_ctrl_prim_axi_read_out_if_agent_config.sequencer + // configuration.fuse_ctrl_secreg_axi_read_out_if_agent_config.sequencer + // configuration.fuse_ctrl_lc_otp_out_if_agent_config.sequencer + // configuration.fuse_ctrl_out_if_agent_config.sequencer + + + typedef fuse_ctrl_rst_random_sequence fuse_ctrl_rst_agent_random_sequence_t; + fuse_ctrl_rst_agent_random_sequence_t fuse_ctrl_rst_agent_rand_seq; + + typedef fuse_ctrl_core_axi_write_in_if_random_sequence fuse_ctrl_core_axi_write_in_if_agent_random_sequence_t; + fuse_ctrl_core_axi_write_in_if_agent_random_sequence_t fuse_ctrl_core_axi_write_in_if_agent_rand_seq; + + + typedef fuse_ctrl_prim_axi_write_in_if_random_sequence fuse_ctrl_prim_axi_write_in_if_agent_random_sequence_t; + fuse_ctrl_prim_axi_write_in_if_agent_random_sequence_t fuse_ctrl_prim_axi_write_in_if_agent_rand_seq; + + + typedef fuse_ctrl_core_axi_read_in_if_random_sequence fuse_ctrl_core_axi_read_in_if_agent_random_sequence_t; + fuse_ctrl_core_axi_read_in_if_agent_random_sequence_t fuse_ctrl_core_axi_read_in_if_agent_rand_seq; + + + typedef fuse_ctrl_prim_axi_read_in_if_random_sequence fuse_ctrl_prim_axi_read_in_if_agent_random_sequence_t; + fuse_ctrl_prim_axi_read_in_if_agent_random_sequence_t fuse_ctrl_prim_axi_read_in_if_agent_rand_seq; + + + typedef fuse_ctrl_secreg_axi_read_in_if_random_sequence fuse_ctrl_secreg_axi_read_in_if_agent_random_sequence_t; + fuse_ctrl_secreg_axi_read_in_if_agent_random_sequence_t fuse_ctrl_secreg_axi_read_in_if_agent_rand_seq; + + + typedef fuse_ctrl_lc_otp_in_if_random_sequence fuse_ctrl_lc_otp_in_if_agent_random_sequence_t; + fuse_ctrl_lc_otp_in_if_agent_random_sequence_t fuse_ctrl_lc_otp_in_if_agent_rand_seq; + + + typedef fuse_ctrl_in_if_random_sequence fuse_ctrl_in_if_agent_random_sequence_t; + fuse_ctrl_in_if_agent_random_sequence_t fuse_ctrl_in_if_agent_rand_seq; + + + + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "" ); + super.new(name); + fuse_ctrl_rst_agent_rand_seq = fuse_ctrl_rst_agent_random_sequence_t::type_id::create("fuse_ctrl_rst_agent_rand_seq"); + fuse_ctrl_core_axi_write_in_if_agent_rand_seq = fuse_ctrl_core_axi_write_in_if_agent_random_sequence_t::type_id::create("fuse_ctrl_core_axi_write_in_if_agent_rand_seq"); + fuse_ctrl_prim_axi_write_in_if_agent_rand_seq = fuse_ctrl_prim_axi_write_in_if_agent_random_sequence_t::type_id::create("fuse_ctrl_prim_axi_write_in_if_agent_rand_seq"); + fuse_ctrl_core_axi_read_in_if_agent_rand_seq = fuse_ctrl_core_axi_read_in_if_agent_random_sequence_t::type_id::create("fuse_ctrl_core_axi_read_in_if_agent_rand_seq"); + fuse_ctrl_prim_axi_read_in_if_agent_rand_seq = fuse_ctrl_prim_axi_read_in_if_agent_random_sequence_t::type_id::create("fuse_ctrl_prim_axi_read_in_if_agent_rand_seq"); + fuse_ctrl_secreg_axi_read_in_if_agent_rand_seq = fuse_ctrl_secreg_axi_read_in_if_agent_random_sequence_t::type_id::create("fuse_ctrl_secreg_axi_read_in_if_agent_rand_seq"); + fuse_ctrl_lc_otp_in_if_agent_rand_seq = fuse_ctrl_lc_otp_in_if_agent_random_sequence_t::type_id::create("fuse_ctrl_lc_otp_in_if_agent_rand_seq"); + fuse_ctrl_in_if_agent_rand_seq = fuse_ctrl_in_if_agent_random_sequence_t::type_id::create("fuse_ctrl_in_if_agent_rand_seq"); + + + endfunction + + virtual task body(); + + if ( configuration.fuse_ctrl_rst_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_rst_agent_rand_seq.start(configuration.fuse_ctrl_rst_agent_config.sequencer); + if ( configuration.fuse_ctrl_core_axi_write_in_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_core_axi_write_in_if_agent_rand_seq.start(configuration.fuse_ctrl_core_axi_write_in_if_agent_config.sequencer); + if ( configuration.fuse_ctrl_prim_axi_write_in_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_prim_axi_write_in_if_agent_rand_seq.start(configuration.fuse_ctrl_prim_axi_write_in_if_agent_config.sequencer); + if ( configuration.fuse_ctrl_core_axi_read_in_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_core_axi_read_in_if_agent_rand_seq.start(configuration.fuse_ctrl_core_axi_read_in_if_agent_config.sequencer); + if ( configuration.fuse_ctrl_prim_axi_read_in_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_prim_axi_read_in_if_agent_rand_seq.start(configuration.fuse_ctrl_prim_axi_read_in_if_agent_config.sequencer); + if ( configuration.fuse_ctrl_secreg_axi_read_in_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_secreg_axi_read_in_if_agent_rand_seq.start(configuration.fuse_ctrl_secreg_axi_read_in_if_agent_config.sequencer); + if ( configuration.fuse_ctrl_lc_otp_in_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_lc_otp_in_if_agent_rand_seq.start(configuration.fuse_ctrl_lc_otp_in_if_agent_config.sequencer); + if ( configuration.fuse_ctrl_in_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_in_if_agent_rand_seq.start(configuration.fuse_ctrl_in_if_agent_config.sequencer); + + + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_typedefs.svh new file mode 100644 index 000000000..79d1b10a2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the environment package. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + // pragma uvmf custom additional begin + // pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_environment.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_environment.svh new file mode 100644 index 000000000..941225b90 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_environment.svh @@ -0,0 +1,215 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This environment contains all agents, predictors and +// scoreboards required for the block level design. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class fuse_ctrl_environment extends uvmf_environment_base #( + .CONFIG_T( fuse_ctrl_env_configuration + )); + `uvm_component_utils( fuse_ctrl_environment ) + + + + + + typedef fuse_ctrl_rst_agent fuse_ctrl_rst_agent_t; + fuse_ctrl_rst_agent_t fuse_ctrl_rst_agent; + + typedef fuse_ctrl_core_axi_write_in_if_agent fuse_ctrl_core_axi_write_in_if_agent_t; + fuse_ctrl_core_axi_write_in_if_agent_t fuse_ctrl_core_axi_write_in_if_agent; + + typedef fuse_ctrl_core_axi_write_out_if_agent fuse_ctrl_core_axi_write_out_if_agent_t; + fuse_ctrl_core_axi_write_out_if_agent_t fuse_ctrl_core_axi_write_out_if_agent; + + typedef fuse_ctrl_prim_axi_write_in_if_agent fuse_ctrl_prim_axi_write_in_if_agent_t; + fuse_ctrl_prim_axi_write_in_if_agent_t fuse_ctrl_prim_axi_write_in_if_agent; + + typedef fuse_ctrl_prim_axi_write_out_if_agent fuse_ctrl_prim_axi_write_out_if_agent_t; + fuse_ctrl_prim_axi_write_out_if_agent_t fuse_ctrl_prim_axi_write_out_if_agent; + + typedef fuse_ctrl_core_axi_read_in_if_agent fuse_ctrl_core_axi_read_in_if_agent_t; + fuse_ctrl_core_axi_read_in_if_agent_t fuse_ctrl_core_axi_read_in_if_agent; + + typedef fuse_ctrl_core_axi_read_out_if_agent fuse_ctrl_core_axi_read_out_if_agent_t; + fuse_ctrl_core_axi_read_out_if_agent_t fuse_ctrl_core_axi_read_out_if_agent; + + typedef fuse_ctrl_prim_axi_read_in_if_agent fuse_ctrl_prim_axi_read_in_if_agent_t; + fuse_ctrl_prim_axi_read_in_if_agent_t fuse_ctrl_prim_axi_read_in_if_agent; + + typedef fuse_ctrl_prim_axi_read_out_if_agent fuse_ctrl_prim_axi_read_out_if_agent_t; + fuse_ctrl_prim_axi_read_out_if_agent_t fuse_ctrl_prim_axi_read_out_if_agent; + + typedef fuse_ctrl_secreg_axi_read_in_if_agent fuse_ctrl_secreg_axi_read_in_if_agent_t; + fuse_ctrl_secreg_axi_read_in_if_agent_t fuse_ctrl_secreg_axi_read_in_if_agent; + + typedef fuse_ctrl_secreg_axi_read_out_if_agent fuse_ctrl_secreg_axi_read_out_if_agent_t; + fuse_ctrl_secreg_axi_read_out_if_agent_t fuse_ctrl_secreg_axi_read_out_if_agent; + + typedef fuse_ctrl_lc_otp_in_if_agent fuse_ctrl_lc_otp_in_if_agent_t; + fuse_ctrl_lc_otp_in_if_agent_t fuse_ctrl_lc_otp_in_if_agent; + + typedef fuse_ctrl_lc_otp_out_if_agent fuse_ctrl_lc_otp_out_if_agent_t; + fuse_ctrl_lc_otp_out_if_agent_t fuse_ctrl_lc_otp_out_if_agent; + + typedef fuse_ctrl_in_if_agent fuse_ctrl_in_if_agent_t; + fuse_ctrl_in_if_agent_t fuse_ctrl_in_if_agent; + + typedef fuse_ctrl_out_if_agent fuse_ctrl_out_if_agent_t; + fuse_ctrl_out_if_agent_t fuse_ctrl_out_if_agent; + + + + + typedef fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T) + ) + fuse_ctrl_pred_t; + fuse_ctrl_pred_t fuse_ctrl_pred; + typedef fuse_ctrl_scoreboard #( + .CONFIG_T(CONFIG_T) + ) + fuse_ctrl_sb_t; + fuse_ctrl_sb_t fuse_ctrl_sb; + + + + + typedef uvmf_virtual_sequencer_base #(.CONFIG_T(fuse_ctrl_env_configuration)) fuse_ctrl_vsqr_t; + fuse_ctrl_vsqr_t vsqr; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// FUNCTION: build_phase() +// This function builds all components within this environment. +// + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + fuse_ctrl_rst_agent = fuse_ctrl_rst_agent_t::type_id::create("fuse_ctrl_rst_agent",this); + fuse_ctrl_rst_agent.set_config(configuration.fuse_ctrl_rst_agent_config); + fuse_ctrl_core_axi_write_in_if_agent = fuse_ctrl_core_axi_write_in_if_agent_t::type_id::create("fuse_ctrl_core_axi_write_in_if_agent",this); + fuse_ctrl_core_axi_write_in_if_agent.set_config(configuration.fuse_ctrl_core_axi_write_in_if_agent_config); + fuse_ctrl_core_axi_write_out_if_agent = fuse_ctrl_core_axi_write_out_if_agent_t::type_id::create("fuse_ctrl_core_axi_write_out_if_agent",this); + fuse_ctrl_core_axi_write_out_if_agent.set_config(configuration.fuse_ctrl_core_axi_write_out_if_agent_config); + fuse_ctrl_prim_axi_write_in_if_agent = fuse_ctrl_prim_axi_write_in_if_agent_t::type_id::create("fuse_ctrl_prim_axi_write_in_if_agent",this); + fuse_ctrl_prim_axi_write_in_if_agent.set_config(configuration.fuse_ctrl_prim_axi_write_in_if_agent_config); + fuse_ctrl_prim_axi_write_out_if_agent = fuse_ctrl_prim_axi_write_out_if_agent_t::type_id::create("fuse_ctrl_prim_axi_write_out_if_agent",this); + fuse_ctrl_prim_axi_write_out_if_agent.set_config(configuration.fuse_ctrl_prim_axi_write_out_if_agent_config); + fuse_ctrl_core_axi_read_in_if_agent = fuse_ctrl_core_axi_read_in_if_agent_t::type_id::create("fuse_ctrl_core_axi_read_in_if_agent",this); + fuse_ctrl_core_axi_read_in_if_agent.set_config(configuration.fuse_ctrl_core_axi_read_in_if_agent_config); + fuse_ctrl_core_axi_read_out_if_agent = fuse_ctrl_core_axi_read_out_if_agent_t::type_id::create("fuse_ctrl_core_axi_read_out_if_agent",this); + fuse_ctrl_core_axi_read_out_if_agent.set_config(configuration.fuse_ctrl_core_axi_read_out_if_agent_config); + fuse_ctrl_prim_axi_read_in_if_agent = fuse_ctrl_prim_axi_read_in_if_agent_t::type_id::create("fuse_ctrl_prim_axi_read_in_if_agent",this); + fuse_ctrl_prim_axi_read_in_if_agent.set_config(configuration.fuse_ctrl_prim_axi_read_in_if_agent_config); + fuse_ctrl_prim_axi_read_out_if_agent = fuse_ctrl_prim_axi_read_out_if_agent_t::type_id::create("fuse_ctrl_prim_axi_read_out_if_agent",this); + fuse_ctrl_prim_axi_read_out_if_agent.set_config(configuration.fuse_ctrl_prim_axi_read_out_if_agent_config); + fuse_ctrl_secreg_axi_read_in_if_agent = fuse_ctrl_secreg_axi_read_in_if_agent_t::type_id::create("fuse_ctrl_secreg_axi_read_in_if_agent",this); + fuse_ctrl_secreg_axi_read_in_if_agent.set_config(configuration.fuse_ctrl_secreg_axi_read_in_if_agent_config); + fuse_ctrl_secreg_axi_read_out_if_agent = fuse_ctrl_secreg_axi_read_out_if_agent_t::type_id::create("fuse_ctrl_secreg_axi_read_out_if_agent",this); + fuse_ctrl_secreg_axi_read_out_if_agent.set_config(configuration.fuse_ctrl_secreg_axi_read_out_if_agent_config); + fuse_ctrl_lc_otp_in_if_agent = fuse_ctrl_lc_otp_in_if_agent_t::type_id::create("fuse_ctrl_lc_otp_in_if_agent",this); + fuse_ctrl_lc_otp_in_if_agent.set_config(configuration.fuse_ctrl_lc_otp_in_if_agent_config); + fuse_ctrl_lc_otp_out_if_agent = fuse_ctrl_lc_otp_out_if_agent_t::type_id::create("fuse_ctrl_lc_otp_out_if_agent",this); + fuse_ctrl_lc_otp_out_if_agent.set_config(configuration.fuse_ctrl_lc_otp_out_if_agent_config); + fuse_ctrl_in_if_agent = fuse_ctrl_in_if_agent_t::type_id::create("fuse_ctrl_in_if_agent",this); + fuse_ctrl_in_if_agent.set_config(configuration.fuse_ctrl_in_if_agent_config); + fuse_ctrl_out_if_agent = fuse_ctrl_out_if_agent_t::type_id::create("fuse_ctrl_out_if_agent",this); + fuse_ctrl_out_if_agent.set_config(configuration.fuse_ctrl_out_if_agent_config); + fuse_ctrl_pred = fuse_ctrl_pred_t::type_id::create("fuse_ctrl_pred",this); + fuse_ctrl_pred.configuration = configuration; + fuse_ctrl_sb = fuse_ctrl_sb_t::type_id::create("fuse_ctrl_sb",this); + fuse_ctrl_sb.configuration = configuration; + + vsqr = fuse_ctrl_vsqr_t::type_id::create("vsqr", this); + vsqr.set_config(configuration); + configuration.set_vsqr(vsqr); + + // pragma uvmf custom build_phase begin + // pragma uvmf custom build_phase end + endfunction + +// **************************************************************************** +// FUNCTION: connect_phase() +// This function makes all connections within this environment. Connections +// typically inclue agent to predictor, predictor to scoreboard and scoreboard +// to agent. +// + virtual function void connect_phase(uvm_phase phase); +// pragma uvmf custom connect_phase_pre_super begin +// pragma uvmf custom connect_phase_pre_super end + super.connect_phase(phase); + fuse_ctrl_rst_agent.monitored_ap.connect(fuse_ctrl_pred.fuse_ctrl_rst_agent_ae); + fuse_ctrl_pred.fuse_ctrl_sb_ap.connect(fuse_ctrl_sb.expected_analysis_export); + fuse_ctrl_core_axi_write_in_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_core_axi_write_out_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_core_axi_read_in_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_core_axi_read_out_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_prim_axi_write_in_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_prim_axi_write_out_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_prim_axi_read_in_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_prim_axi_read_out_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_secreg_axi_read_in_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_secreg_axi_read_out_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_lc_otp_in_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_lc_otp_out_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_in_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_out_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + // pragma uvmf custom reg_model_connect_phase begin + // pragma uvmf custom reg_model_connect_phase end + endfunction + +// **************************************************************************** +// FUNCTION: end_of_simulation_phase() +// This function is executed just prior to executing run_phase. This function +// was added to the environment to sample environment configuration settings +// just before the simulation exits time 0. The configuration structure is +// randomized in the build phase before the environment structure is constructed. +// Configuration variables can be customized after randomization in the build_phase +// of the extended test. +// If a sequence modifies values in the configuration structure then the sequence is +// responsible for sampling the covergroup in the configuration if required. +// + virtual function void start_of_simulation_phase(uvm_phase phase); + configuration.fuse_ctrl_configuration_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_predictor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_predictor.svh new file mode 100644 index 000000000..0250853d4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_predictor.svh @@ -0,0 +1,323 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +// +// DESCRIPTION: This analysis component contains analysis_exports for receiving +// data and analysis_ports for sending data. +// +// This analysis component has the following analysis_exports that receive the +// listed transaction type. +// +// fuse_ctrl_rst_agent_ae receives transactions of type fuse_ctrl_rst_transaction +// fuse_ctrl_core_axi_write_agent_ae receives transactions of type fuse_ctrl_write_transaction +// fuse_ctrl_prim_axi_write_agent_ae receives transactions of type fuse_ctrl_write_transaction +// fuse_ctrl_core_axi_read_agent_ae receives transactions of type fuse_ctrl_read_transaction +// fuse_ctrl_prim_axi_read_agent_ae receives transactions of type fuse_ctrl_read_transaction +// fuse_ctrl_secreg_axi_read_agent_ae receives transactions of type fuse_ctrl_read_transaction +// fuse_ctrl_lc_otp_if_agent_ae receives transactions of type fuse_ctrl_read_transaction +// +// This analysis component has the following analysis_ports that can broadcast +// the listed transaction type. +// +// fuse_ctrl_sb_ap broadcasts transactions of type fuse_ctrl_read_transaction +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class fuse_ctrl_predictor #( + type CONFIG_T, + type BASE_T = uvm_component + ) + extends BASE_T; + + // Factory registration of this class + `uvm_component_param_utils( fuse_ctrl_predictor #( + CONFIG_T, + BASE_T + ) +) + + + // Instantiate a handle to the configuration of the environment in which this component resides + CONFIG_T configuration; + + + // Instantiate the analysis exports + uvm_analysis_imp_fuse_ctrl_rst_agent_ae #(fuse_ctrl_rst_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_rst_agent_ae; + uvm_analysis_imp_fuse_ctrl_core_axi_write_agent_ae #(fuse_ctrl_write_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_core_axi_write_agent_ae; + uvm_analysis_imp_fuse_ctrl_prim_axi_write_agent_ae #(fuse_ctrl_write_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_prim_axi_write_agent_ae; + uvm_analysis_imp_fuse_ctrl_core_axi_read_agent_ae #(fuse_ctrl_read_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_core_axi_read_agent_ae; + uvm_analysis_imp_fuse_ctrl_prim_axi_read_agent_ae #(fuse_ctrl_read_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_prim_axi_read_agent_ae; + uvm_analysis_imp_fuse_ctrl_secreg_axi_read_agent_ae #(fuse_ctrl_read_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_secreg_axi_read_agent_ae; + uvm_analysis_imp_fuse_ctrl_lc_otp_if_agent_ae #(fuse_ctrl_read_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_lc_otp_if_agent_ae; + + + // Instantiate the analysis ports + uvm_analysis_port #(fuse_ctrl_read_transaction) fuse_ctrl_sb_ap; + + + // Transaction variable for predicted values to be sent out fuse_ctrl_sb_ap + // Once a transaction is sent through an analysis_port, another transaction should + // be constructed for the next predicted transaction. + typedef fuse_ctrl_read_transaction fuse_ctrl_sb_ap_output_transaction_t; + fuse_ctrl_sb_ap_output_transaction_t fuse_ctrl_sb_ap_output_transaction; + // Code for sending output transaction out through fuse_ctrl_sb_ap + // fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + + // Define transaction handles for debug visibility + fuse_ctrl_rst_transaction fuse_ctrl_rst_agent_ae_debug; + fuse_ctrl_write_transaction fuse_ctrl_core_axi_write_agent_ae_debug; + fuse_ctrl_write_transaction fuse_ctrl_prim_axi_write_agent_ae_debug; + fuse_ctrl_read_transaction fuse_ctrl_core_axi_read_agent_ae_debug; + fuse_ctrl_read_transaction fuse_ctrl_prim_axi_read_agent_ae_debug; + fuse_ctrl_read_transaction fuse_ctrl_secreg_axi_read_agent_ae_debug; + fuse_ctrl_read_transaction fuse_ctrl_lc_otp_if_agent_ae_debug; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // FUNCTION: new + function new(string name, uvm_component parent); + super.new(name,parent); + `uvm_warning("PREDICTOR_REVIEW", "This predictor has been created either through generation or re-generation with merging. Remove this warning after the predictor has been reviewed.") + // pragma uvmf custom new begin + // pragma uvmf custom new end + endfunction + + // FUNCTION: build_phase + virtual function void build_phase (uvm_phase phase); + + fuse_ctrl_rst_agent_ae = new("fuse_ctrl_rst_agent_ae", this); + fuse_ctrl_core_axi_write_agent_ae = new("fuse_ctrl_core_axi_write_agent_ae", this); + fuse_ctrl_prim_axi_write_agent_ae = new("fuse_ctrl_prim_axi_write_agent_ae", this); + fuse_ctrl_core_axi_read_agent_ae = new("fuse_ctrl_core_axi_read_agent_ae", this); + fuse_ctrl_prim_axi_read_agent_ae = new("fuse_ctrl_prim_axi_read_agent_ae", this); + fuse_ctrl_secreg_axi_read_agent_ae = new("fuse_ctrl_secreg_axi_read_agent_ae", this); + fuse_ctrl_lc_otp_if_agent_ae = new("fuse_ctrl_lc_otp_if_agent_ae", this); + fuse_ctrl_sb_ap =new("fuse_ctrl_sb_ap", this ); + // pragma uvmf custom build_phase begin + // pragma uvmf custom build_phase end + endfunction + + // FUNCTION: write_fuse_ctrl_rst_agent_ae + // Transactions received through fuse_ctrl_rst_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_rst_agent_ae(fuse_ctrl_rst_transaction t); + // pragma uvmf custom fuse_ctrl_rst_agent_ae_predictor begin + fuse_ctrl_rst_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_rst_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_rst_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_rst_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_core_axi_write_agent_ae + // Transactions received through fuse_ctrl_core_axi_write_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_core_axi_write_agent_ae(fuse_ctrl_write_transaction t); + // pragma uvmf custom fuse_ctrl_core_axi_write_agent_ae_predictor begin + fuse_ctrl_core_axi_write_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_core_axi_write_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_core_axi_write_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_core_axi_write_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_prim_axi_write_agent_ae + // Transactions received through fuse_ctrl_prim_axi_write_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_prim_axi_write_agent_ae(fuse_ctrl_write_transaction t); + // pragma uvmf custom fuse_ctrl_prim_axi_write_agent_ae_predictor begin + fuse_ctrl_prim_axi_write_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_prim_axi_write_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_prim_axi_write_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_prim_axi_write_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_core_axi_read_agent_ae + // Transactions received through fuse_ctrl_core_axi_read_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_core_axi_read_agent_ae(fuse_ctrl_read_transaction t); + // pragma uvmf custom fuse_ctrl_core_axi_read_agent_ae_predictor begin + fuse_ctrl_core_axi_read_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_core_axi_read_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_core_axi_read_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_core_axi_read_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_prim_axi_read_agent_ae + // Transactions received through fuse_ctrl_prim_axi_read_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_prim_axi_read_agent_ae(fuse_ctrl_read_transaction t); + // pragma uvmf custom fuse_ctrl_prim_axi_read_agent_ae_predictor begin + fuse_ctrl_prim_axi_read_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_prim_axi_read_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_prim_axi_read_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_prim_axi_read_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_secreg_axi_read_agent_ae + // Transactions received through fuse_ctrl_secreg_axi_read_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_secreg_axi_read_agent_ae(fuse_ctrl_read_transaction t); + // pragma uvmf custom fuse_ctrl_secreg_axi_read_agent_ae_predictor begin + fuse_ctrl_secreg_axi_read_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_secreg_axi_read_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_secreg_axi_read_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_secreg_axi_read_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_lc_otp_if_agent_ae + // Transactions received through fuse_ctrl_lc_otp_if_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_lc_otp_if_agent_ae(fuse_ctrl_read_transaction t); + // pragma uvmf custom fuse_ctrl_lc_otp_if_agent_ae_predictor begin + fuse_ctrl_lc_otp_if_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_lc_otp_if_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_lc_otp_if_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_lc_otp_if_agent_ae_predictor end + endfunction + + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_scoreboard.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_scoreboard.svh new file mode 100644 index 000000000..319d51fae --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_scoreboard.svh @@ -0,0 +1,149 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This analysis component contains analysis_exports for receiving +// data and analysis_ports for sending data. +// +// This analysis component has the following analysis_exports that receive the +// listed transaction type. +// +// expected_analysis_export receives transactions of type fuse_ctrl_read_transaction +// actual_analysis_export receives transactions of type fuse_ctrl_read_transaction +// +// This analysis component has the following analysis_ports that can broadcast +// the listed transaction type. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +class fuse_ctrl_scoreboard #( + type CONFIG_T, + type BASE_T = uvm_component + ) + extends BASE_T; + + // Factory registration of this class + `uvm_component_param_utils( fuse_ctrl_scoreboard #( + CONFIG_T, + BASE_T + ) +) + + + // Instantiate a handle to the configuration of the environment in which this component resides + CONFIG_T configuration; + + + // Instantiate the analysis exports + uvm_analysis_imp_expected_analysis_export #(fuse_ctrl_read_transaction, fuse_ctrl_scoreboard #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) expected_analysis_export; + uvm_analysis_imp_actual_analysis_export #(fuse_ctrl_read_transaction, fuse_ctrl_scoreboard #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) actual_analysis_export; + + + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // FUNCTION: new + function new(string name, uvm_component parent); + super.new(name,parent); + // pragma uvmf custom new begin + // pragma uvmf custom new end + endfunction + + // FUNCTION: build_phase + virtual function void build_phase (uvm_phase phase); + + expected_analysis_export = new("expected_analysis_export", this); + actual_analysis_export = new("actual_analysis_export", this); + // pragma uvmf custom build_phase begin + // pragma uvmf custom build_phase end + endfunction + + // FUNCTION: write_expected_analysis_export + // Transactions received through expected_analysis_export initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_expected_analysis_export(fuse_ctrl_read_transaction t); + // pragma uvmf custom expected_analysis_export_scoreboard begin + `uvm_info("PRED", "Transaction Received through expected_analysis_export", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // UVMF_CHANGE_ME: Implement custom scoreboard here. + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "UVMF_CHANGE_ME: The fuse_ctrl_scoreboard::write_expected_analysis_export function needs to be completed with custom scoreboard functionality",UVM_NONE) + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "******************************************************************************************************",UVM_NONE) + + // pragma uvmf custom expected_analysis_export_scoreboard end + endfunction + + // FUNCTION: write_actual_analysis_export + // Transactions received through actual_analysis_export initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_actual_analysis_export(fuse_ctrl_read_transaction t); + // pragma uvmf custom actual_analysis_export_scoreboard begin + `uvm_info("PRED", "Transaction Received through actual_analysis_export", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // UVMF_CHANGE_ME: Implement custom scoreboard here. + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "UVMF_CHANGE_ME: The fuse_ctrl_scoreboard::write_actual_analysis_export function needs to be completed with custom scoreboard functionality",UVM_NONE) + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "******************************************************************************************************",UVM_NONE) + + // pragma uvmf custom actual_analysis_export_scoreboard end + endfunction + + + + // FUNCTION: extract_phase + virtual function void extract_phase(uvm_phase phase); +// pragma uvmf custom extract_phase begin + super.extract_phase(phase); +// pragma uvmf custom extract_phase end + endfunction + + // FUNCTION: check_phase + virtual function void check_phase(uvm_phase phase); +// pragma uvmf custom check_phase begin + super.check_phase(phase); +// pragma uvmf custom check_phase end + endfunction + + // FUNCTION: report_phase + virtual function void report_phase(uvm_phase phase); +// pragma uvmf custom report_phase begin + super.report_phase(phase); +// pragma uvmf custom report_phase end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_environment.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_environment.yaml new file mode 100644 index 000000000..df52e4025 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_environment.yaml @@ -0,0 +1,116 @@ +uvmf: + environments: + fuse_ctrl: + agents: + - initiator_responder: INITIATOR + name: fuse_ctrl_rst_agent + type: fuse_ctrl_rst + - initiator_responder: INITIATOR + name: fuse_ctrl_core_axi_write_in_if_agent + type: fuse_ctrl_core_axi_write_in_if + - initiator_responder: RESPONDER + name: fuse_ctrl_core_axi_write_out_if_agent + type: fuse_ctrl_core_axi_write_out_if + - initiator_responder: INITIATOR + name: fuse_ctrl_prim_axi_write_in_if_agent + type: fuse_ctrl_prim_axi_write_in_if + - initiator_responder: RESPONDER + name: fuse_ctrl_prim_axi_write_out_if_agent + type: fuse_ctrl_prim_axi_write_out_if + - initiator_responder: INITIATOR + name: fuse_ctrl_core_axi_read_in_if_agent + type: fuse_ctrl_core_axi_read_in_if + - initiator_responder: RESPONDER + name: fuse_ctrl_core_axi_read_out_if_agent + type: fuse_ctrl_core_axi_read_out_if + - initiator_responder: INITIATOR + name: fuse_ctrl_prim_axi_read_in_if_agent + type: fuse_ctrl_prim_axi_read_in_if + - initiator_responder: RESPONDER + name: fuse_ctrl_prim_axi_read_out_if_agent + type: fuse_ctrl_prim_axi_read_out_if + - initiator_responder: INITIATOR + name: fuse_ctrl_secreg_axi_read_in_if_agent + type: fuse_ctrl_secreg_axi_read_in_if + - initiator_responder: RESPONDER + name: fuse_ctrl_secreg_axi_read_out_if_agent + type: fuse_ctrl_secreg_axi_read_out_if + - initiator_responder: INITIATOR + name: fuse_ctrl_lc_otp_in_if_agent + type: fuse_ctrl_lc_otp_in_if + - initiator_responder: RESPONDER + name: fuse_ctrl_lc_otp_out_if_agent + type: fuse_ctrl_lc_otp_out_if + - initiator_responder: INITIATOR + name: fuse_ctrl_in_if_agent + type: fuse_ctrl_in_if + - initiator_responder: RESPONDER + name: fuse_ctrl_out_if_agent + type: fuse_ctrl_out_if + analysis_components: + - name: fuse_ctrl_pred + parameters: [] + type: fuse_ctrl_predictor + - name: fuse_ctrl_sb + parameters: [] + type: fuse_ctrl_scoreboard + analysis_exports: [] + analysis_ports: [] + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + hvl_pkg_parameters: [] + non_uvmf_components: [] + parameters: [] + qvip_memory_agents: [] + scoreboards: [] + subenvs: [] + tlm_connections: + - driver: fuse_ctrl_rst_agent.monitored_ap + receiver: fuse_ctrl_pred.fuse_ctrl_rst_agent_ae + validate: 'True' + - driver: fuse_ctrl_pred.fuse_ctrl_sb_ap + receiver: fuse_ctrl_sb.expected_analysis_export + validate: 'True' + - driver: fuse_ctrl_core_axi_write_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_core_axi_write_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_core_axi_read_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_core_axi_read_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_prim_axi_write_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_prim_axi_write_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_prim_axi_read_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_prim_axi_read_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_secreg_axi_read_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_secreg_axi_read_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_lc_otp_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_lc_otp_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_predictor.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_predictor.yaml new file mode 100644 index 000000000..7832404a7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_predictor.yaml @@ -0,0 +1,23 @@ +uvmf: + util_components: + fuse_ctrl_predictor: + analysis_exports: + - name: fuse_ctrl_rst_agent_ae + type: fuse_ctrl_rst_transaction + - name: fuse_ctrl_core_axi_write_agent_ae + type: fuse_ctrl_write_transaction + - name: fuse_ctrl_prim_axi_write_agent_ae + type: fuse_ctrl_write_transaction + - name: fuse_ctrl_core_axi_read_agent_ae + type: fuse_ctrl_read_transaction + - name: fuse_ctrl_prim_axi_read_agent_ae + type: fuse_ctrl_read_transaction + - name: fuse_ctrl_secreg_axi_read_agent_ae + type: fuse_ctrl_read_transaction + - name: fuse_ctrl_lc_otp_if_agent_ae + type: fuse_ctrl_read_transaction + analysis_ports: + - name: fuse_ctrl_sb_ap + type: fuse_ctrl_read_transaction + existing_library_component: 'True' + type: predictor diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_scoreboard.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_scoreboard.yaml new file mode 100644 index 000000000..05167c417 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_scoreboard.yaml @@ -0,0 +1,10 @@ +uvmf: + util_components: + fuse_ctrl_scoreboard: + analysis_exports: + - name: expected_analysis_export + type: fuse_ctrl_read_transaction + - name: actual_analysis_export + type: fuse_ctrl_read_transaction + existing_library_component: 'True' + type: scoreboard diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/.project new file mode 100644 index 000000000..f5be90c8f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + core_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..5646c3df8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..9974230a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# core_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +core_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f + +core_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f + +core_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f + +COMP_core_axi_read_if_PKG_TGT_0 = q_comp_core_axi_read_if_pkg +COMP_core_axi_read_if_PKG_TGT_1 = v_comp_core_axi_read_if_pkg +COMP_core_axi_read_if_PKG_TGT = $(COMP_core_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_core_axi_read_if_pkg: $(COMP_core_axi_read_if_PKG_TGT) + +q_comp_core_axi_read_if_pkg: + $(HDL_COMP_CMD) $(core_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_read_if_PKG) + $(HDL_COMP_CMD) $(core_axi_read_if_PKG_XRTL) + +v_comp_core_axi_read_if_pkg: + $(HVL_COMP_CMD) $(core_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_read_if_PKG) + $(VELANALYZE_CMD) $(core_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(core_axi_read_if_PKG) + $(HDL_COMP_CMD) $(core_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export core_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_core_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_core_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_core_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_core_axi_read_if_pkg += -I$(core_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_core_axi_read_if_pkg += $(core_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_core_axi_read_if_pkg += \ + \ + -o .so + +comp_core_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_core_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_core_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_core_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_core_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..bfe89a8e0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of core_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if.compile new file mode 100644 index 000000000..5aa3fb538 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - core_axi_read_if_hvl.compile + - core_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..58385ae7f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use core_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/core_axi_read_if_if.sv +src/core_axi_read_if_driver_bfm.sv +src/core_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_common.compile new file mode 100644 index 000000000..9374bee40 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..6dfc76a5f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..c3606bba2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..6c5bc4baa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hdl.compile new file mode 100644 index 000000000..6665d30a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./core_axi_read_if_common.compile +incdir: + - . +src: + - src/core_axi_read_if_if.sv + - src/core_axi_read_if_monitor_bfm.sv + - src/core_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hvl.compile new file mode 100644 index 000000000..ffce38e1b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./core_axi_read_if_common.compile +incdir: + - . +src: + - core_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.sv new file mode 100644 index 000000000..5be093439 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import core_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/core_axi_read_if_macros.svh" + + export core_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/core_axi_read_if_typedefs.svh" + `include "src/core_axi_read_if_transaction.svh" + + `include "src/core_axi_read_if_configuration.svh" + `include "src/core_axi_read_if_driver.svh" + `include "src/core_axi_read_if_monitor.svh" + + `include "src/core_axi_read_if_transaction_coverage.svh" + `include "src/core_axi_read_if_sequence_base.svh" + `include "src/core_axi_read_if_random_sequence.svh" + + `include "src/core_axi_read_if_responder_sequence.svh" + `include "src/core_axi_read_if2reg_adapter.svh" + + `include "src/core_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..54878b149 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use core_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +core_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..738469493 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/core_axi_read_if_typedefs_hdl.svh" + `include "src/core_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..289cfb15d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..25ac277ab --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..872ddc7d8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the core_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( core_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "core_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : core_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_agent.svh new file mode 100644 index 000000000..74e70677a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(core_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(core_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(core_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( core_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_configuration.svh new file mode 100644 index 000000000..96293f076 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the core_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual core_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual core_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup core_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in core_axi_read_if_macros.svh + `core_axi_read_if_CONFIGURATION_STRUCT + core_axi_read_if_configuration_s core_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a core_axi_read_if_configuration_s + // structure. The function returns the handle to the core_axi_read_if_configuration_struct. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + core_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + core_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + core_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + core_axi_read_if_configuration_cg.set_inst_name($sformatf("core_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver.svh new file mode 100644 index 000000000..2da1ca1ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual core_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( core_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in core_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm +// to communicate initiator driven data to core_axi_read_if_driver_bfm. +`core_axi_read_if_INITIATOR_STRUCT + core_axi_read_if_initiator_s core_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm +// to communicate Responder driven data to core_axi_read_if_driver_bfm. +`core_axi_read_if_RESPONDER_STRUCT + core_axi_read_if_responder_s core_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + core_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(core_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + core_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(core_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..cfce6e49c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the core_axi_read_if signal driving. It is +// accessed by the uvm core_axi_read_if driver through a virtual interface +// handle in the core_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type core_axi_read_if_if. +// +// Input signals from the core_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within core_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_read_if_pkg_hdl::*; +`include "src/core_axi_read_if_macros.svh" + +interface core_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (core_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute core_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + core_axi_read_if_pkg::core_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in core_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from core_axi_read_if_driver to this BFM + // **************************************************************************** + `core_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm + // to communicate initiator driven data to core_axi_read_if_driver_bfm. + `core_axi_read_if_INITIATOR_STRUCT + core_axi_read_if_initiator_s initiator_struct; + // Responder macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm + // to communicate Responder driven data to core_axi_read_if_driver_bfm. + `core_axi_read_if_RESPONDER_STRUCT + core_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(core_axi_read_if_configuration_s core_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input core_axi_read_if_initiator_s core_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output core_axi_read_if_responder_s core_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the core_axi_read_if_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Members within the core_axi_read_if_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + initiator_struct = core_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // core_axi_read_if_responder_struct.xyz = arready_i; // + // core_axi_read_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // core_axi_read_if_responder_struct.xyz = rresp_i; // + // core_axi_read_if_responder_struct.xyz = rid_i; // + // core_axi_read_if_responder_struct.xyz = rlast_i; // + // core_axi_read_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // core_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = core_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output core_axi_read_if_initiator_s core_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input core_axi_read_if_responder_s core_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the core_axi_read_if_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Variables within the core_axi_read_if_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= core_axi_read_if_initiator_struct.xyz; // + // rdata_o <= core_axi_read_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= core_axi_read_if_initiator_struct.xyz; // + // rid_o <= core_axi_read_if_initiator_struct.xyz; // + // rlast_o <= core_axi_read_if_initiator_struct.xyz; // + // rvalid_o <= core_axi_read_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the core_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the core_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_if.sv new file mode 100644 index 000000000..bd1242f03 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the core_axi_read_if interface signals. +// It is instantiated once per core_axi_read_if bus. Bus Functional Models, +// BFM's named core_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named core_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(core_axi_read_if_bus.arready), // Agent input +// .dut_signal_port(core_axi_read_if_bus.rdata), // Agent input +// .dut_signal_port(core_axi_read_if_bus.rresp), // Agent input +// .dut_signal_port(core_axi_read_if_bus.rid), // Agent input +// .dut_signal_port(core_axi_read_if_bus.rlast), // Agent input +// .dut_signal_port(core_axi_read_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import core_axi_read_if_pkg_hdl::*; + +interface core_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_macros.svh new file mode 100644 index 000000000..61c6fdb62 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the core_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the core_axi_read_if_configuration class. +// + `define core_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } core_axi_read_if_configuration_s; + + `define core_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function core_axi_read_if_configuration_s to_struct();\ + core_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( core_axi_read_if_configuration_struct );\ + endfunction + + `define core_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(core_axi_read_if_configuration_s core_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = core_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the core_axi_read_if_transaction class. +// + `define core_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } core_axi_read_if_monitor_s; + + `define core_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function core_axi_read_if_monitor_s to_monitor_struct();\ + core_axi_read_if_monitor_struct = \ + { \ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( core_axi_read_if_monitor_struct);\ + endfunction\ + + `define core_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(core_axi_read_if_monitor_s core_axi_read_if_monitor_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = core_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the core_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } core_axi_read_if_initiator_s; + + `define core_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function core_axi_read_if_initiator_s to_initiator_struct();\ + core_axi_read_if_initiator_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( core_axi_read_if_initiator_struct);\ + endfunction + + `define core_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(core_axi_read_if_initiator_s core_axi_read_if_initiator_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = core_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the core_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } core_axi_read_if_responder_s; + + `define core_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function core_axi_read_if_responder_s to_responder_struct();\ + core_axi_read_if_responder_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( core_axi_read_if_responder_struct);\ + endfunction + + `define core_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(core_axi_read_if_responder_s core_axi_read_if_responder_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = core_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor.svh new file mode 100644 index 000000000..a26f7ab33 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives core_axi_read_if transactions observed by the +// core_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual core_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`core_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the core_axi_read_if_monitor_struct. + virtual function void notify_transaction(input core_axi_read_if_monitor_s core_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(core_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..3940f5ab1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the core_axi_read_if signal monitoring. +// It is accessed by the uvm core_axi_read_if monitor through a virtual +// interface handle in the core_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type core_axi_read_if_if. +// +// Input signals from the core_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the core_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_read_if_pkg_hdl::*; +`include "src/core_axi_read_if_macros.svh" + + +interface core_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( core_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute core_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`core_axi_read_if_MONITOR_STRUCT + core_axi_read_if_monitor_s core_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `core_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + core_axi_read_if_pkg::core_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( core_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( core_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(core_axi_read_if_configuration_s core_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output core_axi_read_if_monitor_s core_axi_read_if_monitor_struct); + // + // Available struct members: + // // core_axi_read_if_monitor_struct.core_arready + // // core_axi_read_if_monitor_struct.core_rdata + // // core_axi_read_if_monitor_struct.core_rresp + // // core_axi_read_if_monitor_struct.core_rid + // // core_axi_read_if_monitor_struct.core_rlast + // // core_axi_read_if_monitor_struct.core_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // core_axi_read_if_monitor_struct.xyz = arready_i; // + // core_axi_read_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // core_axi_read_if_monitor_struct.xyz = rresp_i; // + // core_axi_read_if_monitor_struct.xyz = rid_i; // + // core_axi_read_if_monitor_struct.xyz = rlast_i; // + // core_axi_read_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..9f52585cd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the core_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a core_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "core_axi_read_if_random_sequence::body()-core_axi_read_if_transaction randomization failed") + // Send the transaction to the core_axi_read_if_driver_bfm via the sequencer and core_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: core_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..a51c239e4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "core_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..39f9a15a4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_read_if_transaction_req_t; + core_axi_read_if_transaction_req_t req; + typedef core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_read_if_transaction_rsp_t; + core_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = core_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = core_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction.svh new file mode 100644 index 000000000..2b8fc724c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an core_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( core_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_arready ; + logic [DW-1:0] core_rdata ; + axi_pkg::axi_burst_e core_rresp ; + logic [IW-1:0] core_rid ; + logic core_rlast ; + logic core_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in core_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by core_axi_read_if_monitor and core_axi_read_if_monitor_bfm + // This struct is defined in core_axi_read_if_macros.svh + `core_axi_read_if_MONITOR_STRUCT + core_axi_read_if_monitor_s core_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a core_axi_read_if_monitor_s + // structure. The function returns the handle to the core_axi_read_if_monitor_struct. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm + // to communicate initiator driven data to core_axi_read_if_driver_bfm. + // This struct is defined in core_axi_read_if_macros.svh + `core_axi_read_if_INITIATOR_STRUCT + core_axi_read_if_initiator_s core_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a core_axi_read_if_initiator_s + // structure. The function returns the handle to the core_axi_read_if_initiator_struct. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm + // to communicate Responder driven data to core_axi_read_if_driver_bfm. + // This struct is defined in core_axi_read_if_macros.svh + `core_axi_read_if_RESPONDER_STRUCT + core_axi_read_if_responder_s core_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a core_axi_read_if_responder_s + // structure. The function returns the handle to the core_axi_read_if_responder_struct. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_arready:0x%x core_rdata:0x%x core_rresp:0x%x core_rid:0x%x core_rlast:0x%x core_rvalid:0x%x ",core_arready,core_rdata,core_rresp,core_rid,core_rlast,core_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_arready == RHS.core_arready) + &&(this.core_rdata == RHS.core_rdata) + &&(this.core_rresp == RHS.core_rresp) + &&(this.core_rid == RHS.core_rid) + &&(this.core_rlast == RHS.core_rlast) + &&(this.core_rvalid == RHS.core_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_arready = RHS.core_arready; + this.core_rdata = RHS.core_rdata; + this.core_rresp = RHS.core_rresp; + this.core_rid = RHS.core_rid; + this.core_rlast = RHS.core_rlast; + this.core_rvalid = RHS.core_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"core_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_arready,"core_arready"); + $add_attribute(transaction_view_h,core_rdata,"core_rdata"); + $add_attribute(transaction_view_h,core_rresp,"core_rresp"); + $add_attribute(transaction_view_h,core_rid,"core_rid"); + $add_attribute(transaction_view_h,core_rlast,"core_rlast"); + $add_attribute(transaction_view_h,core_rvalid,"core_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..0e45fd07d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records core_axi_read_if transaction information using +// a covergroup named core_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup core_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_arready: coverpoint coverage_trans.core_arready; + core_rdata: coverpoint coverage_trans.core_rdata; + core_rresp: coverpoint coverage_trans.core_rresp; + core_rid: coverpoint coverage_trans.core_rid; + core_rlast: coverpoint coverage_trans.core_rlast; + core_rvalid: coverpoint coverage_trans.core_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + core_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + core_axi_read_if_transaction_cg.set_inst_name($sformatf("core_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + core_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/yaml/core_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/yaml/core_axi_read_if_interface.yaml new file mode 100644 index 000000000..be65d5c34 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_if_pkg/yaml/core_axi_read_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + core_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/.project new file mode 100644 index 000000000..d9e187c97 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + core_axi_read_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/.svproject new file mode 100644 index 000000000..6620fd792 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/Makefile new file mode 100644 index 000000000..674d9fe11 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# core_axi_read_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +core_axi_read_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hvl.f + +core_axi_read_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hdl.f + +core_axi_read_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_xrtl.f + +COMP_core_axi_read_out_if_PKG_TGT_0 = q_comp_core_axi_read_out_if_pkg +COMP_core_axi_read_out_if_PKG_TGT_1 = v_comp_core_axi_read_out_if_pkg +COMP_core_axi_read_out_if_PKG_TGT = $(COMP_core_axi_read_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_core_axi_read_out_if_pkg: $(COMP_core_axi_read_out_if_PKG_TGT) + +q_comp_core_axi_read_out_if_pkg: + $(HDL_COMP_CMD) $(core_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(core_axi_read_out_if_PKG_XRTL) + +v_comp_core_axi_read_out_if_pkg: + $(HVL_COMP_CMD) $(core_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_read_out_if_PKG) + $(VELANALYZE_CMD) $(core_axi_read_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(core_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(core_axi_read_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export core_axi_read_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_core_axi_read_out_if_pkg = \ + +O_FILE_COMPILE_LIST_core_axi_read_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_core_axi_read_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_core_axi_read_out_if_pkg += -I$(core_axi_read_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_core_axi_read_out_if_pkg += $(core_axi_read_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_core_axi_read_out_if_pkg += \ + \ + -o .so + +comp_core_axi_read_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_core_axi_read_out_if_pkg) $(C_FILE_COMPILE_LIST_core_axi_read_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_core_axi_read_out_if_pkg) $(O_FILE_COMPILE_LIST_core_axi_read_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/compile.do new file mode 100644 index 000000000..73e42d35e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of core_axi_read_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if.compile new file mode 100644 index 000000000..6899ae4aa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if.compile @@ -0,0 +1,3 @@ +needs: + - core_axi_read_out_if_hvl.compile + - core_axi_read_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_bfm.vinfo new file mode 100644 index 000000000..d3826b867 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use core_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/core_axi_read_out_if_if.sv +src/core_axi_read_out_if_driver_bfm.sv +src/core_axi_read_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_common.compile new file mode 100644 index 000000000..439747e2b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - core_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hdl.f new file mode 100644 index 000000000..61a64a8fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hvl.f new file mode 100644 index 000000000..63499edc2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_xrtl.f new file mode 100644 index 000000000..54bc26587 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hdl.compile new file mode 100644 index 000000000..c01edb529 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./core_axi_read_out_if_common.compile +incdir: + - . +src: + - src/core_axi_read_out_if_if.sv + - src/core_axi_read_out_if_monitor_bfm.sv + - src/core_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hvl.compile new file mode 100644 index 000000000..52b13e38e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./core_axi_read_out_if_common.compile +incdir: + - . +src: + - core_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.sv new file mode 100644 index 000000000..27da26683 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_read_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import core_axi_read_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/core_axi_read_out_if_macros.svh" + + export core_axi_read_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/core_axi_read_out_if_typedefs.svh" + `include "src/core_axi_read_out_if_transaction.svh" + + `include "src/core_axi_read_out_if_configuration.svh" + `include "src/core_axi_read_out_if_driver.svh" + `include "src/core_axi_read_out_if_monitor.svh" + + `include "src/core_axi_read_out_if_transaction_coverage.svh" + `include "src/core_axi_read_out_if_sequence_base.svh" + `include "src/core_axi_read_out_if_random_sequence.svh" + + `include "src/core_axi_read_out_if_responder_sequence.svh" + `include "src/core_axi_read_out_if2reg_adapter.svh" + + `include "src/core_axi_read_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.vinfo new file mode 100644 index 000000000..353f8e89e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use core_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +core_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.sv new file mode 100644 index 000000000..af073f726 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_read_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/core_axi_read_out_if_typedefs_hdl.svh" + `include "src/core_axi_read_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..da16ef949 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +core_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_sve.F new file mode 100644 index 000000000..847a827c8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if2reg_adapter.svh new file mode 100644 index 000000000..ab579bfdc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the core_axi_read_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( core_axi_read_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "core_axi_read_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : core_axi_read_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_agent.svh new file mode 100644 index 000000000..8a5580622 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(core_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(core_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(core_axi_read_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( core_axi_read_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_configuration.svh new file mode 100644 index 000000000..0873724c5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the core_axi_read_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual core_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual core_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_read_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup core_axi_read_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_CONFIGURATION_STRUCT + core_axi_read_out_if_configuration_s core_axi_read_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a core_axi_read_out_if_configuration_s + // structure. The function returns the handle to the core_axi_read_out_if_configuration_struct. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + core_axi_read_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + core_axi_read_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + core_axi_read_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + core_axi_read_out_if_configuration_cg.set_inst_name($sformatf("core_axi_read_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(core_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver.svh new file mode 100644 index 000000000..fe19e1127 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual core_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( core_axi_read_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in core_axi_read_out_if_macros.svh +//******************************************************************* +// Initiator macro used by core_axi_read_out_if_driver and core_axi_read_out_if_driver_bfm +// to communicate initiator driven data to core_axi_read_out_if_driver_bfm. +`core_axi_read_out_if_INITIATOR_STRUCT + core_axi_read_out_if_initiator_s core_axi_read_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by core_axi_read_out_if_driver and core_axi_read_out_if_driver_bfm +// to communicate Responder driven data to core_axi_read_out_if_driver_bfm. +`core_axi_read_out_if_RESPONDER_STRUCT + core_axi_read_out_if_responder_s core_axi_read_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + core_axi_read_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(core_axi_read_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + core_axi_read_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(core_axi_read_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver_bfm.sv new file mode 100644 index 000000000..4569dc443 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the core_axi_read_out_if signal driving. It is +// accessed by the uvm core_axi_read_out_if driver through a virtual interface +// handle in the core_axi_read_out_if configuration. It drives the singals passed +// in through the port connection named bus of type core_axi_read_out_if_if. +// +// Input signals from the core_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within core_axi_read_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_read_out_if_pkg_hdl::*; +`include "src/core_axi_read_out_if_macros.svh" + +interface core_axi_read_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (core_axi_read_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute core_axi_read_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + core_axi_read_out_if_pkg::core_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in core_axi_read_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from core_axi_read_out_if_driver to this BFM + // **************************************************************************** + `core_axi_read_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by core_axi_read_out_if_driver and core_axi_read_out_if_driver_bfm + // to communicate initiator driven data to core_axi_read_out_if_driver_bfm. + `core_axi_read_out_if_INITIATOR_STRUCT + core_axi_read_out_if_initiator_s initiator_struct; + // Responder macro used by core_axi_read_out_if_driver and core_axi_read_out_if_driver_bfm + // to communicate Responder driven data to core_axi_read_out_if_driver_bfm. + `core_axi_read_out_if_RESPONDER_STRUCT + core_axi_read_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(core_axi_read_out_if_configuration_s core_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input core_axi_read_out_if_initiator_s core_axi_read_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output core_axi_read_out_if_responder_s core_axi_read_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the core_axi_read_out_if_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Members within the core_axi_read_out_if_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + initiator_struct = core_axi_read_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // core_axi_read_out_if_responder_struct.xyz = arready_i; // + // core_axi_read_out_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // core_axi_read_out_if_responder_struct.xyz = rresp_i; // + // core_axi_read_out_if_responder_struct.xyz = rid_i; // + // core_axi_read_out_if_responder_struct.xyz = rlast_i; // + // core_axi_read_out_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // core_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = core_axi_read_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output core_axi_read_out_if_initiator_s core_axi_read_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input core_axi_read_out_if_responder_s core_axi_read_out_if_responder_struct + );// pragma tbx xtf + // Variables within the core_axi_read_out_if_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Variables within the core_axi_read_out_if_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= core_axi_read_out_if_initiator_struct.xyz; // + // rdata_o <= core_axi_read_out_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= core_axi_read_out_if_initiator_struct.xyz; // + // rid_o <= core_axi_read_out_if_initiator_struct.xyz; // + // rlast_o <= core_axi_read_out_if_initiator_struct.xyz; // + // rvalid_o <= core_axi_read_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the core_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the core_axi_read_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_if.sv new file mode 100644 index 000000000..0bdb905ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the core_axi_read_out_if interface signals. +// It is instantiated once per core_axi_read_out_if bus. Bus Functional Models, +// BFM's named core_axi_read_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named core_axi_read_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(core_axi_read_out_if_bus.arready), // Agent input +// .dut_signal_port(core_axi_read_out_if_bus.rdata), // Agent input +// .dut_signal_port(core_axi_read_out_if_bus.rresp), // Agent input +// .dut_signal_port(core_axi_read_out_if_bus.rid), // Agent input +// .dut_signal_port(core_axi_read_out_if_bus.rlast), // Agent input +// .dut_signal_port(core_axi_read_out_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import core_axi_read_out_if_pkg_hdl::*; + +interface core_axi_read_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_macros.svh new file mode 100644 index 000000000..778373aa8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the core_axi_read_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the core_axi_read_out_if_configuration class. +// + `define core_axi_read_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } core_axi_read_out_if_configuration_s; + + `define core_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function core_axi_read_out_if_configuration_s to_struct();\ + core_axi_read_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( core_axi_read_out_if_configuration_struct );\ + endfunction + + `define core_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(core_axi_read_out_if_configuration_s core_axi_read_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = core_axi_read_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the core_axi_read_out_if_transaction class. +// + `define core_axi_read_out_if_MONITOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } core_axi_read_out_if_monitor_s; + + `define core_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function core_axi_read_out_if_monitor_s to_monitor_struct();\ + core_axi_read_out_if_monitor_struct = \ + { \ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( core_axi_read_out_if_monitor_struct);\ + endfunction\ + + `define core_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(core_axi_read_out_if_monitor_s core_axi_read_out_if_monitor_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = core_axi_read_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the core_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_read_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } core_axi_read_out_if_initiator_s; + + `define core_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function core_axi_read_out_if_initiator_s to_initiator_struct();\ + core_axi_read_out_if_initiator_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( core_axi_read_out_if_initiator_struct);\ + endfunction + + `define core_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(core_axi_read_out_if_initiator_s core_axi_read_out_if_initiator_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = core_axi_read_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the core_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_read_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } core_axi_read_out_if_responder_s; + + `define core_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function core_axi_read_out_if_responder_s to_responder_struct();\ + core_axi_read_out_if_responder_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( core_axi_read_out_if_responder_struct);\ + endfunction + + `define core_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(core_axi_read_out_if_responder_s core_axi_read_out_if_responder_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = core_axi_read_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor.svh new file mode 100644 index 000000000..8cd448e91 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives core_axi_read_out_if transactions observed by the +// core_axi_read_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual core_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_read_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`core_axi_read_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the core_axi_read_out_if_monitor_struct. + virtual function void notify_transaction(input core_axi_read_out_if_monitor_s core_axi_read_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(core_axi_read_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor_bfm.sv new file mode 100644 index 000000000..d47c910f6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the core_axi_read_out_if signal monitoring. +// It is accessed by the uvm core_axi_read_out_if monitor through a virtual +// interface handle in the core_axi_read_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type core_axi_read_out_if_if. +// +// Input signals from the core_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the core_axi_read_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_read_out_if_pkg_hdl::*; +`include "src/core_axi_read_out_if_macros.svh" + + +interface core_axi_read_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( core_axi_read_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute core_axi_read_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`core_axi_read_out_if_MONITOR_STRUCT + core_axi_read_out_if_monitor_s core_axi_read_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `core_axi_read_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + core_axi_read_out_if_pkg::core_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( core_axi_read_out_if_monitor_struct ); + + + proxy.notify_transaction( core_axi_read_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(core_axi_read_out_if_configuration_s core_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output core_axi_read_out_if_monitor_s core_axi_read_out_if_monitor_struct); + // + // Available struct members: + // // core_axi_read_out_if_monitor_struct.core_arready + // // core_axi_read_out_if_monitor_struct.core_rdata + // // core_axi_read_out_if_monitor_struct.core_rresp + // // core_axi_read_out_if_monitor_struct.core_rid + // // core_axi_read_out_if_monitor_struct.core_rlast + // // core_axi_read_out_if_monitor_struct.core_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // core_axi_read_out_if_monitor_struct.xyz = arready_i; // + // core_axi_read_out_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // core_axi_read_out_if_monitor_struct.xyz = rresp_i; // + // core_axi_read_out_if_monitor_struct.xyz = rid_i; // + // core_axi_read_out_if_monitor_struct.xyz = rlast_i; // + // core_axi_read_out_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_random_sequence.svh new file mode 100644 index 000000000..51d933c94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the core_axi_read_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a core_axi_read_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_read_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=core_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "core_axi_read_out_if_random_sequence::body()-core_axi_read_out_if_transaction randomization failed") + // Send the transaction to the core_axi_read_out_if_driver_bfm via the sequencer and core_axi_read_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: core_axi_read_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_responder_sequence.svh new file mode 100644 index 000000000..f41646f83 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_read_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "core_axi_read_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=core_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_sequence_base.svh new file mode 100644 index 000000000..9e9fbb58b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_read_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_read_out_if_transaction_req_t; + core_axi_read_out_if_transaction_req_t req; + typedef core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_read_out_if_transaction_rsp_t; + core_axi_read_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = core_axi_read_out_if_transaction_req_t::type_id::create("req"); + rsp = core_axi_read_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction.svh new file mode 100644 index 000000000..7b95d521b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an core_axi_read_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( core_axi_read_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_arready ; + logic [DW-1:0] core_rdata ; + axi_pkg::axi_burst_e core_rresp ; + logic [IW-1:0] core_rid ; + logic core_rlast ; + logic core_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in core_axi_read_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by core_axi_read_out_if_monitor and core_axi_read_out_if_monitor_bfm + // This struct is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_MONITOR_STRUCT + core_axi_read_out_if_monitor_s core_axi_read_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a core_axi_read_out_if_monitor_s + // structure. The function returns the handle to the core_axi_read_out_if_monitor_struct. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by core_axi_read_out_if_driver and core_axi_read_out_if_driver_bfm + // to communicate initiator driven data to core_axi_read_out_if_driver_bfm. + // This struct is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_INITIATOR_STRUCT + core_axi_read_out_if_initiator_s core_axi_read_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a core_axi_read_out_if_initiator_s + // structure. The function returns the handle to the core_axi_read_out_if_initiator_struct. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by core_axi_read_out_if_driver and core_axi_read_out_if_driver_bfm + // to communicate Responder driven data to core_axi_read_out_if_driver_bfm. + // This struct is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_RESPONDER_STRUCT + core_axi_read_out_if_responder_s core_axi_read_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a core_axi_read_out_if_responder_s + // structure. The function returns the handle to the core_axi_read_out_if_responder_struct. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_arready:0x%x core_rdata:0x%x core_rresp:0x%x core_rid:0x%x core_rlast:0x%x core_rvalid:0x%x ",core_arready,core_rdata,core_rresp,core_rid,core_rlast,core_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_arready == RHS.core_arready) + &&(this.core_rdata == RHS.core_rdata) + &&(this.core_rresp == RHS.core_rresp) + &&(this.core_rid == RHS.core_rid) + &&(this.core_rlast == RHS.core_rlast) + &&(this.core_rvalid == RHS.core_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_arready = RHS.core_arready; + this.core_rdata = RHS.core_rdata; + this.core_rresp = RHS.core_rresp; + this.core_rid = RHS.core_rid; + this.core_rlast = RHS.core_rlast; + this.core_rvalid = RHS.core_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"core_axi_read_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_arready,"core_arready"); + $add_attribute(transaction_view_h,core_rdata,"core_rdata"); + $add_attribute(transaction_view_h,core_rresp,"core_rresp"); + $add_attribute(transaction_view_h,core_rid,"core_rid"); + $add_attribute(transaction_view_h,core_rlast,"core_rlast"); + $add_attribute(transaction_view_h,core_rvalid,"core_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction_coverage.svh new file mode 100644 index 000000000..938c15317 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records core_axi_read_out_if transaction information using +// a covergroup named core_axi_read_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_read_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup core_axi_read_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_arready: coverpoint coverage_trans.core_arready; + core_rdata: coverpoint coverage_trans.core_rdata; + core_rresp: coverpoint coverage_trans.core_rresp; + core_rid: coverpoint coverage_trans.core_rid; + core_rlast: coverpoint coverage_trans.core_rlast; + core_rvalid: coverpoint coverage_trans.core_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + core_axi_read_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + core_axi_read_out_if_transaction_cg.set_inst_name($sformatf("core_axi_read_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + core_axi_read_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/yaml/core_axi_read_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/yaml/core_axi_read_out_if_interface.yaml new file mode 100644 index 000000000..4624cc767 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_read_out_if_pkg/yaml/core_axi_read_out_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + core_axi_read_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/.project new file mode 100644 index 000000000..c317ffc88 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/.project @@ -0,0 +1,30 @@ + + + core_axi_write_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/.svproject new file mode 100644 index 000000000..c0a4e460d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/Makefile new file mode 100644 index 000000000..7e6ea601e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/Makefile @@ -0,0 +1,66 @@ +# core_axi_write_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +core_axi_write_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f + +core_axi_write_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f + +core_axi_write_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f + +COMP_core_axi_write_if_PKG_TGT_0 = q_comp_core_axi_write_if_pkg +COMP_core_axi_write_if_PKG_TGT_1 = v_comp_core_axi_write_if_pkg +COMP_core_axi_write_if_PKG_TGT = $(COMP_core_axi_write_if_PKG_TGT_$(USE_VELOCE)) + +comp_core_axi_write_if_pkg: $(COMP_core_axi_write_if_PKG_TGT) + +q_comp_core_axi_write_if_pkg: + $(HDL_COMP_CMD) $(core_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_write_if_PKG) + $(HDL_COMP_CMD) $(core_axi_write_if_PKG_XRTL) + +v_comp_core_axi_write_if_pkg: + $(HVL_COMP_CMD) $(core_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_write_if_PKG) + $(VELANALYZE_CMD) $(core_axi_write_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(core_axi_write_if_PKG) + $(HDL_COMP_CMD) $(core_axi_write_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export core_axi_write_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/dpi + +C_FILE_COMPILE_LIST_core_axi_write_if_pkg = \ + +O_FILE_COMPILE_LIST_core_axi_write_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_core_axi_write_if_pkg:.c=.o)) + +GCC_COMP_ARGS_core_axi_write_if_pkg += -I$(core_axi_write_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_core_axi_write_if_pkg += $(core_axi_write_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_core_axi_write_if_pkg += \ + \ + -o .so + +comp_core_axi_write_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_core_axi_write_if_pkg) $(C_FILE_COMPILE_LIST_core_axi_write_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_core_axi_write_if_pkg) $(O_FILE_COMPILE_LIST_core_axi_write_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/compile.do new file mode 100644 index 000000000..d57b919fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of core_axi_write_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if.compile new file mode 100644 index 000000000..d5945e5ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if.compile @@ -0,0 +1,3 @@ +needs: + - core_axi_write_if_hvl.compile + - core_axi_write_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_bfm.vinfo new file mode 100644 index 000000000..ab7c2fca6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use core_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/core_axi_write_if_if.sv +src/core_axi_write_if_driver_bfm.sv +src/core_axi_write_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_common.compile new file mode 100644 index 000000000..4922a4200 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f new file mode 100644 index 000000000..b14f9380d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f new file mode 100644 index 000000000..a56447389 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f new file mode 100644 index 000000000..d93277776 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hdl.compile new file mode 100644 index 000000000..0328e5087 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./core_axi_write_if_common.compile +incdir: + - . +src: + - src/core_axi_write_if_if.sv + - src/core_axi_write_if_monitor_bfm.sv + - src/core_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hvl.compile new file mode 100644 index 000000000..e19dd38c2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./core_axi_write_if_common.compile +incdir: + - . +src: + - core_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.sv new file mode 100644 index 000000000..ee9c7cec8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_write_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import core_axi_write_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/core_axi_write_if_macros.svh" + + export core_axi_write_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/core_axi_write_if_typedefs.svh" + `include "src/core_axi_write_if_transaction.svh" + + `include "src/core_axi_write_if_configuration.svh" + `include "src/core_axi_write_if_driver.svh" + `include "src/core_axi_write_if_monitor.svh" + + `include "src/core_axi_write_if_transaction_coverage.svh" + `include "src/core_axi_write_if_sequence_base.svh" + `include "src/core_axi_write_if_random_sequence.svh" + + `include "src/core_axi_write_if_responder_sequence.svh" + `include "src/core_axi_write_if2reg_adapter.svh" + + `include "src/core_axi_write_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.vinfo new file mode 100644 index 000000000..d8e9ffc3f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use core_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +core_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.sv new file mode 100644 index 000000000..2d56fd18c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_write_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/core_axi_write_if_typedefs_hdl.svh" + `include "src/core_axi_write_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.vinfo new file mode 100644 index 000000000..5360aa61b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_sve.F new file mode 100644 index 000000000..1c96c4aff --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if2reg_adapter.svh new file mode 100644 index 000000000..902b4b13e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the core_axi_write_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( core_axi_write_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "core_axi_write_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : core_axi_write_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_agent.svh new file mode 100644 index 000000000..38ae017f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(core_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(core_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(core_axi_write_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( core_axi_write_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_configuration.svh new file mode 100644 index 000000000..2178c5d3f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the core_axi_write_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual core_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual core_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_write_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup core_axi_write_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in core_axi_write_if_macros.svh + `core_axi_write_if_CONFIGURATION_STRUCT + core_axi_write_if_configuration_s core_axi_write_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a core_axi_write_if_configuration_s + // structure. The function returns the handle to the core_axi_write_if_configuration_struct. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + core_axi_write_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + core_axi_write_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + core_axi_write_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + core_axi_write_if_configuration_cg.set_inst_name($sformatf("core_axi_write_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver.svh new file mode 100644 index 000000000..61afbc09d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual core_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( core_axi_write_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in core_axi_write_if_macros.svh +//******************************************************************* +// Initiator macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm +// to communicate initiator driven data to core_axi_write_if_driver_bfm. +`core_axi_write_if_INITIATOR_STRUCT + core_axi_write_if_initiator_s core_axi_write_if_initiator_struct; +//******************************************************************* +// Responder macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm +// to communicate Responder driven data to core_axi_write_if_driver_bfm. +`core_axi_write_if_RESPONDER_STRUCT + core_axi_write_if_responder_s core_axi_write_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + core_axi_write_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(core_axi_write_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + core_axi_write_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(core_axi_write_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver_bfm.sv new file mode 100644 index 000000000..2e5f63dbd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the core_axi_write_if signal driving. It is +// accessed by the uvm core_axi_write_if driver through a virtual interface +// handle in the core_axi_write_if configuration. It drives the singals passed +// in through the port connection named bus of type core_axi_write_if_if. +// +// Input signals from the core_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within core_axi_write_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_write_if_pkg_hdl::*; +`include "src/core_axi_write_if_macros.svh" + +interface core_axi_write_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (core_axi_write_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute core_axi_write_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + core_axi_write_if_pkg::core_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in core_axi_write_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from core_axi_write_if_driver to this BFM + // **************************************************************************** + `core_axi_write_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm + // to communicate initiator driven data to core_axi_write_if_driver_bfm. + `core_axi_write_if_INITIATOR_STRUCT + core_axi_write_if_initiator_s initiator_struct; + // Responder macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm + // to communicate Responder driven data to core_axi_write_if_driver_bfm. + `core_axi_write_if_RESPONDER_STRUCT + core_axi_write_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(core_axi_write_if_configuration_s core_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input core_axi_write_if_initiator_s core_axi_write_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output core_axi_write_if_responder_s core_axi_write_if_responder_struct + );// pragma tbx xtf + // + // Members within the core_axi_write_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Members within the core_axi_write_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + initiator_struct = core_axi_write_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // core_axi_write_if_responder_struct.xyz = awready_i; // + // core_axi_write_if_responder_struct.xyz = wready_i; // + // core_axi_write_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // core_axi_write_if_responder_struct.xyz = bid_i; // + // core_axi_write_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // core_axi_write_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = core_axi_write_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output core_axi_write_if_initiator_s core_axi_write_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input core_axi_write_if_responder_s core_axi_write_if_responder_struct + );// pragma tbx xtf + // Variables within the core_axi_write_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Variables within the core_axi_write_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= core_axi_write_if_initiator_struct.xyz; // + // wready_o <= core_axi_write_if_initiator_struct.xyz; // + // bresp_o <= core_axi_write_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= core_axi_write_if_initiator_struct.xyz; // + // bvalid_o <= core_axi_write_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the core_axi_write_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the core_axi_write_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_if.sv new file mode 100644 index 000000000..86ab20f72 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the core_axi_write_if interface signals. +// It is instantiated once per core_axi_write_if bus. Bus Functional Models, +// BFM's named core_axi_write_if_driver_bfm, are used to drive signals on the bus. +// BFM's named core_axi_write_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(core_axi_write_if_bus.awready), // Agent input +// .dut_signal_port(core_axi_write_if_bus.wready), // Agent input +// .dut_signal_port(core_axi_write_if_bus.bresp), // Agent input +// .dut_signal_port(core_axi_write_if_bus.bid), // Agent input +// .dut_signal_port(core_axi_write_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import core_axi_write_if_pkg_hdl::*; + +interface core_axi_write_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_macros.svh new file mode 100644 index 000000000..8c8873557 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the core_axi_write_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the core_axi_write_if_configuration class. +// + `define core_axi_write_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } core_axi_write_if_configuration_s; + + `define core_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function core_axi_write_if_configuration_s to_struct();\ + core_axi_write_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( core_axi_write_if_configuration_struct );\ + endfunction + + `define core_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(core_axi_write_if_configuration_s core_axi_write_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = core_axi_write_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the core_axi_write_if_transaction class. +// + `define core_axi_write_if_MONITOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } core_axi_write_if_monitor_s; + + `define core_axi_write_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function core_axi_write_if_monitor_s to_monitor_struct();\ + core_axi_write_if_monitor_struct = \ + { \ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( core_axi_write_if_monitor_struct);\ + endfunction\ + + `define core_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(core_axi_write_if_monitor_s core_axi_write_if_monitor_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = core_axi_write_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the core_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_write_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } core_axi_write_if_initiator_s; + + `define core_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function core_axi_write_if_initiator_s to_initiator_struct();\ + core_axi_write_if_initiator_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( core_axi_write_if_initiator_struct);\ + endfunction + + `define core_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(core_axi_write_if_initiator_s core_axi_write_if_initiator_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = core_axi_write_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the core_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_write_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } core_axi_write_if_responder_s; + + `define core_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function core_axi_write_if_responder_s to_responder_struct();\ + core_axi_write_if_responder_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( core_axi_write_if_responder_struct);\ + endfunction + + `define core_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(core_axi_write_if_responder_s core_axi_write_if_responder_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = core_axi_write_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor.svh new file mode 100644 index 000000000..52be1a9ca --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives core_axi_write_if transactions observed by the +// core_axi_write_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual core_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_write_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`core_axi_write_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the core_axi_write_if_monitor_struct. + virtual function void notify_transaction(input core_axi_write_if_monitor_s core_axi_write_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(core_axi_write_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor_bfm.sv new file mode 100644 index 000000000..9661876ce --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the core_axi_write_if signal monitoring. +// It is accessed by the uvm core_axi_write_if monitor through a virtual +// interface handle in the core_axi_write_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type core_axi_write_if_if. +// +// Input signals from the core_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the core_axi_write_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_write_if_pkg_hdl::*; +`include "src/core_axi_write_if_macros.svh" + + +interface core_axi_write_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( core_axi_write_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute core_axi_write_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`core_axi_write_if_MONITOR_STRUCT + core_axi_write_if_monitor_s core_axi_write_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `core_axi_write_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + core_axi_write_if_pkg::core_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( core_axi_write_if_monitor_struct ); + + + proxy.notify_transaction( core_axi_write_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(core_axi_write_if_configuration_s core_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output core_axi_write_if_monitor_s core_axi_write_if_monitor_struct); + // + // Available struct members: + // // core_axi_write_if_monitor_struct.core_awready + // // core_axi_write_if_monitor_struct.core_wready + // // core_axi_write_if_monitor_struct.core_bresp + // // core_axi_write_if_monitor_struct.core_bid + // // core_axi_write_if_monitor_struct.core_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // core_axi_write_if_monitor_struct.xyz = awready_i; // + // core_axi_write_if_monitor_struct.xyz = wready_i; // + // core_axi_write_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // core_axi_write_if_monitor_struct.xyz = bid_i; // + // core_axi_write_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_random_sequence.svh new file mode 100644 index 000000000..9722594f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the core_axi_write_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a core_axi_write_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_write_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "core_axi_write_if_random_sequence::body()-core_axi_write_if_transaction randomization failed") + // Send the transaction to the core_axi_write_if_driver_bfm via the sequencer and core_axi_write_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: core_axi_write_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_responder_sequence.svh new file mode 100644 index 000000000..4ee61b3ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_write_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "core_axi_write_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_sequence_base.svh new file mode 100644 index 000000000..339755d18 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_write_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_write_if_transaction_req_t; + core_axi_write_if_transaction_req_t req; + typedef core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_write_if_transaction_rsp_t; + core_axi_write_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = core_axi_write_if_transaction_req_t::type_id::create("req"); + rsp = core_axi_write_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction.svh new file mode 100644 index 000000000..78c5353a7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an core_axi_write_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( core_axi_write_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_awready ; + logic core_wready ; + axi_pkg::axi_burst_e core_bresp ; + logic core_bid ; + logic core_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in core_axi_write_if_macros.svh + + //******************************************************************* + // Monitor macro used by core_axi_write_if_monitor and core_axi_write_if_monitor_bfm + // This struct is defined in core_axi_write_if_macros.svh + `core_axi_write_if_MONITOR_STRUCT + core_axi_write_if_monitor_s core_axi_write_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a core_axi_write_if_monitor_s + // structure. The function returns the handle to the core_axi_write_if_monitor_struct. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm + // to communicate initiator driven data to core_axi_write_if_driver_bfm. + // This struct is defined in core_axi_write_if_macros.svh + `core_axi_write_if_INITIATOR_STRUCT + core_axi_write_if_initiator_s core_axi_write_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a core_axi_write_if_initiator_s + // structure. The function returns the handle to the core_axi_write_if_initiator_struct. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm + // to communicate Responder driven data to core_axi_write_if_driver_bfm. + // This struct is defined in core_axi_write_if_macros.svh + `core_axi_write_if_RESPONDER_STRUCT + core_axi_write_if_responder_s core_axi_write_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a core_axi_write_if_responder_s + // structure. The function returns the handle to the core_axi_write_if_responder_struct. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awready:0x%x core_wready:0x%x core_bresp:0x%x core_bid:0x%x core_bvalid:0x%x ",core_awready,core_wready,core_bresp,core_bid,core_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_awready == RHS.core_awready) + &&(this.core_wready == RHS.core_wready) + &&(this.core_bresp == RHS.core_bresp) + &&(this.core_bid == RHS.core_bid) + &&(this.core_bvalid == RHS.core_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awready = RHS.core_awready; + this.core_wready = RHS.core_wready; + this.core_bresp = RHS.core_bresp; + this.core_bid = RHS.core_bid; + this.core_bvalid = RHS.core_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"core_axi_write_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awready,"core_awready"); + $add_attribute(transaction_view_h,core_wready,"core_wready"); + $add_attribute(transaction_view_h,core_bresp,"core_bresp"); + $add_attribute(transaction_view_h,core_bid,"core_bid"); + $add_attribute(transaction_view_h,core_bvalid,"core_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction_coverage.svh new file mode 100644 index 000000000..aa3fe1d6e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records core_axi_write_if transaction information using +// a covergroup named core_axi_write_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_write_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup core_axi_write_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awready: coverpoint coverage_trans.core_awready; + core_wready: coverpoint coverage_trans.core_wready; + core_bresp: coverpoint coverage_trans.core_bresp; + core_bid: coverpoint coverage_trans.core_bid; + core_bvalid: coverpoint coverage_trans.core_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + core_axi_write_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + core_axi_write_if_transaction_cg.set_inst_name($sformatf("core_axi_write_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + core_axi_write_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/yaml/core_axi_write_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/yaml/core_axi_write_if_interface.yaml new file mode 100644 index 000000000..049bcebe2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_if_pkg/yaml/core_axi_write_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + core_axi_write_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/.project new file mode 100644 index 000000000..938b34c4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + core_axi_write_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/.svproject new file mode 100644 index 000000000..7a0d950c7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/Makefile new file mode 100644 index 000000000..732c0fa5f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# core_axi_write_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +core_axi_write_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hvl.f + +core_axi_write_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hdl.f + +core_axi_write_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_xrtl.f + +COMP_core_axi_write_out_if_PKG_TGT_0 = q_comp_core_axi_write_out_if_pkg +COMP_core_axi_write_out_if_PKG_TGT_1 = v_comp_core_axi_write_out_if_pkg +COMP_core_axi_write_out_if_PKG_TGT = $(COMP_core_axi_write_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_core_axi_write_out_if_pkg: $(COMP_core_axi_write_out_if_PKG_TGT) + +q_comp_core_axi_write_out_if_pkg: + $(HDL_COMP_CMD) $(core_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(core_axi_write_out_if_PKG_XRTL) + +v_comp_core_axi_write_out_if_pkg: + $(HVL_COMP_CMD) $(core_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_write_out_if_PKG) + $(VELANALYZE_CMD) $(core_axi_write_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(core_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(core_axi_write_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export core_axi_write_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_core_axi_write_out_if_pkg = \ + +O_FILE_COMPILE_LIST_core_axi_write_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_core_axi_write_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_core_axi_write_out_if_pkg += -I$(core_axi_write_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_core_axi_write_out_if_pkg += $(core_axi_write_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_core_axi_write_out_if_pkg += \ + \ + -o .so + +comp_core_axi_write_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_core_axi_write_out_if_pkg) $(C_FILE_COMPILE_LIST_core_axi_write_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_core_axi_write_out_if_pkg) $(O_FILE_COMPILE_LIST_core_axi_write_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/compile.do new file mode 100644 index 000000000..54d017934 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of core_axi_write_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if.compile new file mode 100644 index 000000000..40e8aee73 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if.compile @@ -0,0 +1,3 @@ +needs: + - core_axi_write_out_if_hvl.compile + - core_axi_write_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_bfm.vinfo new file mode 100644 index 000000000..ccc4ac319 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use core_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/core_axi_write_out_if_if.sv +src/core_axi_write_out_if_driver_bfm.sv +src/core_axi_write_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_common.compile new file mode 100644 index 000000000..e684a6c49 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hdl.f new file mode 100644 index 000000000..3f8dc2a40 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hvl.f new file mode 100644 index 000000000..73fb6826d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_xrtl.f new file mode 100644 index 000000000..b5cb783d0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hdl.compile new file mode 100644 index 000000000..ddedadb4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./core_axi_write_out_if_common.compile +incdir: + - . +src: + - src/core_axi_write_out_if_if.sv + - src/core_axi_write_out_if_monitor_bfm.sv + - src/core_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hvl.compile new file mode 100644 index 000000000..c5d3d08a4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./core_axi_write_out_if_common.compile +incdir: + - . +src: + - core_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.sv new file mode 100644 index 000000000..483e82f13 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_write_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import core_axi_write_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/core_axi_write_out_if_macros.svh" + + export core_axi_write_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/core_axi_write_out_if_typedefs.svh" + `include "src/core_axi_write_out_if_transaction.svh" + + `include "src/core_axi_write_out_if_configuration.svh" + `include "src/core_axi_write_out_if_driver.svh" + `include "src/core_axi_write_out_if_monitor.svh" + + `include "src/core_axi_write_out_if_transaction_coverage.svh" + `include "src/core_axi_write_out_if_sequence_base.svh" + `include "src/core_axi_write_out_if_random_sequence.svh" + + `include "src/core_axi_write_out_if_responder_sequence.svh" + `include "src/core_axi_write_out_if2reg_adapter.svh" + + `include "src/core_axi_write_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.vinfo new file mode 100644 index 000000000..b15563968 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use core_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +core_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.sv new file mode 100644 index 000000000..c33ed1c80 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_write_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/core_axi_write_out_if_typedefs_hdl.svh" + `include "src/core_axi_write_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..df5363cef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_sve.F new file mode 100644 index 000000000..47df0133c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if2reg_adapter.svh new file mode 100644 index 000000000..fefb54e87 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the core_axi_write_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( core_axi_write_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "core_axi_write_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : core_axi_write_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_agent.svh new file mode 100644 index 000000000..178e2aa3d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(core_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(core_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(core_axi_write_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( core_axi_write_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_configuration.svh new file mode 100644 index 000000000..d5fa5f073 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the core_axi_write_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual core_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual core_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_write_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup core_axi_write_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_CONFIGURATION_STRUCT + core_axi_write_out_if_configuration_s core_axi_write_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a core_axi_write_out_if_configuration_s + // structure. The function returns the handle to the core_axi_write_out_if_configuration_struct. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + core_axi_write_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + core_axi_write_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + core_axi_write_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + core_axi_write_out_if_configuration_cg.set_inst_name($sformatf("core_axi_write_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver.svh new file mode 100644 index 000000000..0c4673f28 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual core_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( core_axi_write_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in core_axi_write_out_if_macros.svh +//******************************************************************* +// Initiator macro used by core_axi_write_out_if_driver and core_axi_write_out_if_driver_bfm +// to communicate initiator driven data to core_axi_write_out_if_driver_bfm. +`core_axi_write_out_if_INITIATOR_STRUCT + core_axi_write_out_if_initiator_s core_axi_write_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by core_axi_write_out_if_driver and core_axi_write_out_if_driver_bfm +// to communicate Responder driven data to core_axi_write_out_if_driver_bfm. +`core_axi_write_out_if_RESPONDER_STRUCT + core_axi_write_out_if_responder_s core_axi_write_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + core_axi_write_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(core_axi_write_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + core_axi_write_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(core_axi_write_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver_bfm.sv new file mode 100644 index 000000000..2b871cb7e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the core_axi_write_out_if signal driving. It is +// accessed by the uvm core_axi_write_out_if driver through a virtual interface +// handle in the core_axi_write_out_if configuration. It drives the singals passed +// in through the port connection named bus of type core_axi_write_out_if_if. +// +// Input signals from the core_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within core_axi_write_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_write_out_if_pkg_hdl::*; +`include "src/core_axi_write_out_if_macros.svh" + +interface core_axi_write_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (core_axi_write_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute core_axi_write_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + core_axi_write_out_if_pkg::core_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in core_axi_write_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from core_axi_write_out_if_driver to this BFM + // **************************************************************************** + `core_axi_write_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by core_axi_write_out_if_driver and core_axi_write_out_if_driver_bfm + // to communicate initiator driven data to core_axi_write_out_if_driver_bfm. + `core_axi_write_out_if_INITIATOR_STRUCT + core_axi_write_out_if_initiator_s initiator_struct; + // Responder macro used by core_axi_write_out_if_driver and core_axi_write_out_if_driver_bfm + // to communicate Responder driven data to core_axi_write_out_if_driver_bfm. + `core_axi_write_out_if_RESPONDER_STRUCT + core_axi_write_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(core_axi_write_out_if_configuration_s core_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input core_axi_write_out_if_initiator_s core_axi_write_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output core_axi_write_out_if_responder_s core_axi_write_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the core_axi_write_out_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Members within the core_axi_write_out_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + initiator_struct = core_axi_write_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // core_axi_write_out_if_responder_struct.xyz = awready_i; // + // core_axi_write_out_if_responder_struct.xyz = wready_i; // + // core_axi_write_out_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // core_axi_write_out_if_responder_struct.xyz = bid_i; // + // core_axi_write_out_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // core_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = core_axi_write_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output core_axi_write_out_if_initiator_s core_axi_write_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input core_axi_write_out_if_responder_s core_axi_write_out_if_responder_struct + );// pragma tbx xtf + // Variables within the core_axi_write_out_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Variables within the core_axi_write_out_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= core_axi_write_out_if_initiator_struct.xyz; // + // wready_o <= core_axi_write_out_if_initiator_struct.xyz; // + // bresp_o <= core_axi_write_out_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= core_axi_write_out_if_initiator_struct.xyz; // + // bvalid_o <= core_axi_write_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the core_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the core_axi_write_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_if.sv new file mode 100644 index 000000000..ae3e65b7e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the core_axi_write_out_if interface signals. +// It is instantiated once per core_axi_write_out_if bus. Bus Functional Models, +// BFM's named core_axi_write_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named core_axi_write_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(core_axi_write_out_if_bus.awready), // Agent input +// .dut_signal_port(core_axi_write_out_if_bus.wready), // Agent input +// .dut_signal_port(core_axi_write_out_if_bus.bresp), // Agent input +// .dut_signal_port(core_axi_write_out_if_bus.bid), // Agent input +// .dut_signal_port(core_axi_write_out_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import core_axi_write_out_if_pkg_hdl::*; + +interface core_axi_write_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_macros.svh new file mode 100644 index 000000000..87d43196c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the core_axi_write_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the core_axi_write_out_if_configuration class. +// + `define core_axi_write_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } core_axi_write_out_if_configuration_s; + + `define core_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function core_axi_write_out_if_configuration_s to_struct();\ + core_axi_write_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( core_axi_write_out_if_configuration_struct );\ + endfunction + + `define core_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(core_axi_write_out_if_configuration_s core_axi_write_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = core_axi_write_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the core_axi_write_out_if_transaction class. +// + `define core_axi_write_out_if_MONITOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } core_axi_write_out_if_monitor_s; + + `define core_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function core_axi_write_out_if_monitor_s to_monitor_struct();\ + core_axi_write_out_if_monitor_struct = \ + { \ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( core_axi_write_out_if_monitor_struct);\ + endfunction\ + + `define core_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(core_axi_write_out_if_monitor_s core_axi_write_out_if_monitor_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = core_axi_write_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the core_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_write_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } core_axi_write_out_if_initiator_s; + + `define core_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function core_axi_write_out_if_initiator_s to_initiator_struct();\ + core_axi_write_out_if_initiator_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( core_axi_write_out_if_initiator_struct);\ + endfunction + + `define core_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(core_axi_write_out_if_initiator_s core_axi_write_out_if_initiator_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = core_axi_write_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the core_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_write_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } core_axi_write_out_if_responder_s; + + `define core_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function core_axi_write_out_if_responder_s to_responder_struct();\ + core_axi_write_out_if_responder_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( core_axi_write_out_if_responder_struct);\ + endfunction + + `define core_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(core_axi_write_out_if_responder_s core_axi_write_out_if_responder_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = core_axi_write_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor.svh new file mode 100644 index 000000000..7371c7122 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives core_axi_write_out_if transactions observed by the +// core_axi_write_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual core_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_write_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`core_axi_write_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the core_axi_write_out_if_monitor_struct. + virtual function void notify_transaction(input core_axi_write_out_if_monitor_s core_axi_write_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(core_axi_write_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor_bfm.sv new file mode 100644 index 000000000..870cb1641 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the core_axi_write_out_if signal monitoring. +// It is accessed by the uvm core_axi_write_out_if monitor through a virtual +// interface handle in the core_axi_write_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type core_axi_write_out_if_if. +// +// Input signals from the core_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the core_axi_write_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_write_out_if_pkg_hdl::*; +`include "src/core_axi_write_out_if_macros.svh" + + +interface core_axi_write_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( core_axi_write_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute core_axi_write_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`core_axi_write_out_if_MONITOR_STRUCT + core_axi_write_out_if_monitor_s core_axi_write_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `core_axi_write_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + core_axi_write_out_if_pkg::core_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( core_axi_write_out_if_monitor_struct ); + + + proxy.notify_transaction( core_axi_write_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(core_axi_write_out_if_configuration_s core_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output core_axi_write_out_if_monitor_s core_axi_write_out_if_monitor_struct); + // + // Available struct members: + // // core_axi_write_out_if_monitor_struct.core_awready + // // core_axi_write_out_if_monitor_struct.core_wready + // // core_axi_write_out_if_monitor_struct.core_bresp + // // core_axi_write_out_if_monitor_struct.core_bid + // // core_axi_write_out_if_monitor_struct.core_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // core_axi_write_out_if_monitor_struct.xyz = awready_i; // + // core_axi_write_out_if_monitor_struct.xyz = wready_i; // + // core_axi_write_out_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // core_axi_write_out_if_monitor_struct.xyz = bid_i; // + // core_axi_write_out_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_random_sequence.svh new file mode 100644 index 000000000..7780e6dd1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the core_axi_write_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a core_axi_write_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_write_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "core_axi_write_out_if_random_sequence::body()-core_axi_write_out_if_transaction randomization failed") + // Send the transaction to the core_axi_write_out_if_driver_bfm via the sequencer and core_axi_write_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: core_axi_write_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_responder_sequence.svh new file mode 100644 index 000000000..49afe1128 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_write_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "core_axi_write_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_sequence_base.svh new file mode 100644 index 000000000..d76fe29bd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_write_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_write_out_if_transaction_req_t; + core_axi_write_out_if_transaction_req_t req; + typedef core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_write_out_if_transaction_rsp_t; + core_axi_write_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = core_axi_write_out_if_transaction_req_t::type_id::create("req"); + rsp = core_axi_write_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction.svh new file mode 100644 index 000000000..c895977d8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an core_axi_write_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( core_axi_write_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_awready ; + logic core_wready ; + axi_pkg::axi_burst_e core_bresp ; + logic core_bid ; + logic core_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in core_axi_write_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by core_axi_write_out_if_monitor and core_axi_write_out_if_monitor_bfm + // This struct is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_MONITOR_STRUCT + core_axi_write_out_if_monitor_s core_axi_write_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a core_axi_write_out_if_monitor_s + // structure. The function returns the handle to the core_axi_write_out_if_monitor_struct. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by core_axi_write_out_if_driver and core_axi_write_out_if_driver_bfm + // to communicate initiator driven data to core_axi_write_out_if_driver_bfm. + // This struct is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_INITIATOR_STRUCT + core_axi_write_out_if_initiator_s core_axi_write_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a core_axi_write_out_if_initiator_s + // structure. The function returns the handle to the core_axi_write_out_if_initiator_struct. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by core_axi_write_out_if_driver and core_axi_write_out_if_driver_bfm + // to communicate Responder driven data to core_axi_write_out_if_driver_bfm. + // This struct is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_RESPONDER_STRUCT + core_axi_write_out_if_responder_s core_axi_write_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a core_axi_write_out_if_responder_s + // structure. The function returns the handle to the core_axi_write_out_if_responder_struct. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awready:0x%x core_wready:0x%x core_bresp:0x%x core_bid:0x%x core_bvalid:0x%x ",core_awready,core_wready,core_bresp,core_bid,core_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_awready == RHS.core_awready) + &&(this.core_wready == RHS.core_wready) + &&(this.core_bresp == RHS.core_bresp) + &&(this.core_bid == RHS.core_bid) + &&(this.core_bvalid == RHS.core_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awready = RHS.core_awready; + this.core_wready = RHS.core_wready; + this.core_bresp = RHS.core_bresp; + this.core_bid = RHS.core_bid; + this.core_bvalid = RHS.core_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"core_axi_write_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awready,"core_awready"); + $add_attribute(transaction_view_h,core_wready,"core_wready"); + $add_attribute(transaction_view_h,core_bresp,"core_bresp"); + $add_attribute(transaction_view_h,core_bid,"core_bid"); + $add_attribute(transaction_view_h,core_bvalid,"core_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction_coverage.svh new file mode 100644 index 000000000..c2318af97 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records core_axi_write_out_if transaction information using +// a covergroup named core_axi_write_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_write_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup core_axi_write_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awready: coverpoint coverage_trans.core_awready; + core_wready: coverpoint coverage_trans.core_wready; + core_bresp: coverpoint coverage_trans.core_bresp; + core_bid: coverpoint coverage_trans.core_bid; + core_bvalid: coverpoint coverage_trans.core_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + core_axi_write_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + core_axi_write_out_if_transaction_cg.set_inst_name($sformatf("core_axi_write_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + core_axi_write_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/yaml/core_axi_write_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/yaml/core_axi_write_out_if_interface.yaml new file mode 100644 index 000000000..bb9a51431 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/core_axi_write_out_if_pkg/yaml/core_axi_write_out_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + core_axi_write_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.project new file mode 100644 index 000000000..f25d7a6d4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_core_core_axi_write_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.svproject new file mode 100644 index 000000000..737757535 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/Makefile new file mode 100644 index 000000000..3f1313baf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_core_core_axi_write_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_core_core_axi_write_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hvl.f + +fuse_core_core_axi_write_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hdl.f + +fuse_core_core_axi_write_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_xrtl.f + +COMP_fuse_core_core_axi_write_out_if_PKG_TGT_0 = q_comp_fuse_core_core_axi_write_out_if_pkg +COMP_fuse_core_core_axi_write_out_if_PKG_TGT_1 = v_comp_fuse_core_core_axi_write_out_if_pkg +COMP_fuse_core_core_axi_write_out_if_PKG_TGT = $(COMP_fuse_core_core_axi_write_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_core_core_axi_write_out_if_pkg: $(COMP_fuse_core_core_axi_write_out_if_PKG_TGT) + +q_comp_fuse_core_core_axi_write_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_core_core_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_core_core_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_core_core_axi_write_out_if_PKG_XRTL) + +v_comp_fuse_core_core_axi_write_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_core_core_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_core_core_axi_write_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_core_core_axi_write_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_core_core_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_core_core_axi_write_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_core_core_axi_write_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_core_core_axi_write_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_core_core_axi_write_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_core_core_axi_write_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_core_core_axi_write_out_if_pkg += -I$(fuse_core_core_axi_write_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_core_core_axi_write_out_if_pkg += $(fuse_core_core_axi_write_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_core_core_axi_write_out_if_pkg += \ + \ + -o .so + +comp_fuse_core_core_axi_write_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_core_core_axi_write_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_core_core_axi_write_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_core_core_axi_write_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_core_core_axi_write_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/compile.do new file mode 100644 index 000000000..b8f65efb7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_core_core_axi_write_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if.compile new file mode 100644 index 000000000..35966add7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_core_core_axi_write_out_if_hvl.compile + - fuse_core_core_axi_write_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_bfm.vinfo new file mode 100644 index 000000000..9a6fb73a0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_core_core_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_core_core_axi_write_out_if_if.sv +src/fuse_core_core_axi_write_out_if_driver_bfm.sv +src/fuse_core_core_axi_write_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_common.compile new file mode 100644 index 000000000..029c5cda8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_core_core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hdl.f new file mode 100644 index 000000000..c7e54dfd4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hvl.f new file mode 100644 index 000000000..85b4f73d1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_xrtl.f new file mode 100644 index 000000000..759299056 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hdl.compile new file mode 100644 index 000000000..8c8200827 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_core_core_axi_write_out_if_common.compile +incdir: + - . +src: + - src/fuse_core_core_axi_write_out_if_if.sv + - src/fuse_core_core_axi_write_out_if_monitor_bfm.sv + - src/fuse_core_core_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hvl.compile new file mode 100644 index 000000000..91c251b33 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_core_core_axi_write_out_if_common.compile +incdir: + - . +src: + - fuse_core_core_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.sv new file mode 100644 index 000000000..67a3e3ba6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_core_core_axi_write_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_core_core_axi_write_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_core_core_axi_write_out_if_macros.svh" + + export fuse_core_core_axi_write_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_core_core_axi_write_out_if_typedefs.svh" + `include "src/fuse_core_core_axi_write_out_if_transaction.svh" + + `include "src/fuse_core_core_axi_write_out_if_configuration.svh" + `include "src/fuse_core_core_axi_write_out_if_driver.svh" + `include "src/fuse_core_core_axi_write_out_if_monitor.svh" + + `include "src/fuse_core_core_axi_write_out_if_transaction_coverage.svh" + `include "src/fuse_core_core_axi_write_out_if_sequence_base.svh" + `include "src/fuse_core_core_axi_write_out_if_random_sequence.svh" + + `include "src/fuse_core_core_axi_write_out_if_responder_sequence.svh" + `include "src/fuse_core_core_axi_write_out_if2reg_adapter.svh" + + `include "src/fuse_core_core_axi_write_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.vinfo new file mode 100644 index 000000000..c61f97535 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_core_core_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_core_core_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.sv new file mode 100644 index 000000000..104321aef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_core_core_axi_write_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_core_core_axi_write_out_if_typedefs_hdl.svh" + `include "src/fuse_core_core_axi_write_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..0aca1a6dd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_core_core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_sve.F new file mode 100644 index 000000000..fe260360b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if2reg_adapter.svh new file mode 100644 index 000000000..2092ace2d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_core_core_axi_write_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_core_core_axi_write_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_core_core_axi_write_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_core_core_axi_write_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_agent.svh new file mode 100644 index 000000000..d33c79019 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_core_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_core_core_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_core_core_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_core_core_axi_write_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_core_core_axi_write_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_configuration.svh new file mode 100644 index 000000000..5647a3442 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_core_core_axi_write_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_core_core_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_core_core_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_core_core_axi_write_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_core_core_axi_write_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_CONFIGURATION_STRUCT + fuse_core_core_axi_write_out_if_configuration_s fuse_core_core_axi_write_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_core_core_axi_write_out_if_configuration_s + // structure. The function returns the handle to the fuse_core_core_axi_write_out_if_configuration_struct. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_core_core_axi_write_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_core_core_axi_write_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_core_core_axi_write_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_core_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_core_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_core_core_axi_write_out_if_configuration_cg.set_inst_name($sformatf("fuse_core_core_axi_write_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_core_core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver.svh new file mode 100644 index 000000000..f49aeaaa8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_core_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_core_core_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_core_core_axi_write_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_core_core_axi_write_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_core_core_axi_write_out_if_driver and fuse_core_core_axi_write_out_if_driver_bfm +// to communicate initiator driven data to fuse_core_core_axi_write_out_if_driver_bfm. +`fuse_core_core_axi_write_out_if_INITIATOR_STRUCT + fuse_core_core_axi_write_out_if_initiator_s fuse_core_core_axi_write_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_core_core_axi_write_out_if_driver and fuse_core_core_axi_write_out_if_driver_bfm +// to communicate Responder driven data to fuse_core_core_axi_write_out_if_driver_bfm. +`fuse_core_core_axi_write_out_if_RESPONDER_STRUCT + fuse_core_core_axi_write_out_if_responder_s fuse_core_core_axi_write_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_core_core_axi_write_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_core_core_axi_write_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_core_core_axi_write_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_core_core_axi_write_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver_bfm.sv new file mode 100644 index 000000000..e5b9f650e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_core_core_axi_write_out_if signal driving. It is +// accessed by the uvm fuse_core_core_axi_write_out_if driver through a virtual interface +// handle in the fuse_core_core_axi_write_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_core_core_axi_write_out_if_if. +// +// Input signals from the fuse_core_core_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_core_core_axi_write_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_core_core_axi_write_out_if_pkg_hdl::*; +`include "src/fuse_core_core_axi_write_out_if_macros.svh" + +interface fuse_core_core_axi_write_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_core_core_axi_write_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_core_core_axi_write_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_core_core_axi_write_out_if_pkg::fuse_core_core_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_core_core_axi_write_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_core_core_axi_write_out_if_driver to this BFM + // **************************************************************************** + `fuse_core_core_axi_write_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_core_core_axi_write_out_if_driver and fuse_core_core_axi_write_out_if_driver_bfm + // to communicate initiator driven data to fuse_core_core_axi_write_out_if_driver_bfm. + `fuse_core_core_axi_write_out_if_INITIATOR_STRUCT + fuse_core_core_axi_write_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_core_core_axi_write_out_if_driver and fuse_core_core_axi_write_out_if_driver_bfm + // to communicate Responder driven data to fuse_core_core_axi_write_out_if_driver_bfm. + `fuse_core_core_axi_write_out_if_RESPONDER_STRUCT + fuse_core_core_axi_write_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_core_core_axi_write_out_if_configuration_s fuse_core_core_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_core_core_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_core_core_axi_write_out_if_initiator_s fuse_core_core_axi_write_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_core_core_axi_write_out_if_responder_s fuse_core_core_axi_write_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_core_core_axi_write_out_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Members within the fuse_core_core_axi_write_out_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + initiator_struct = fuse_core_core_axi_write_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_core_core_axi_write_out_if_responder_struct.xyz = awready_i; // + // fuse_core_core_axi_write_out_if_responder_struct.xyz = wready_i; // + // fuse_core_core_axi_write_out_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_core_core_axi_write_out_if_responder_struct.xyz = bid_i; // + // fuse_core_core_axi_write_out_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_core_core_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_core_core_axi_write_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_core_core_axi_write_out_if_initiator_s fuse_core_core_axi_write_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_core_core_axi_write_out_if_responder_s fuse_core_core_axi_write_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_core_core_axi_write_out_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Variables within the fuse_core_core_axi_write_out_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= fuse_core_core_axi_write_out_if_initiator_struct.xyz; // + // wready_o <= fuse_core_core_axi_write_out_if_initiator_struct.xyz; // + // bresp_o <= fuse_core_core_axi_write_out_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= fuse_core_core_axi_write_out_if_initiator_struct.xyz; // + // bvalid_o <= fuse_core_core_axi_write_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_core_core_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_core_core_axi_write_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_if.sv new file mode 100644 index 000000000..6bbcc3a46 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_core_core_axi_write_out_if interface signals. +// It is instantiated once per fuse_core_core_axi_write_out_if bus. Bus Functional Models, +// BFM's named fuse_core_core_axi_write_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_core_core_axi_write_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_core_core_axi_write_out_if_bus.awready), // Agent input +// .dut_signal_port(fuse_core_core_axi_write_out_if_bus.wready), // Agent input +// .dut_signal_port(fuse_core_core_axi_write_out_if_bus.bresp), // Agent input +// .dut_signal_port(fuse_core_core_axi_write_out_if_bus.bid), // Agent input +// .dut_signal_port(fuse_core_core_axi_write_out_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_core_core_axi_write_out_if_pkg_hdl::*; + +interface fuse_core_core_axi_write_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_macros.svh new file mode 100644 index 000000000..91edfefea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_core_core_axi_write_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_core_core_axi_write_out_if_configuration class. +// + `define fuse_core_core_axi_write_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_core_core_axi_write_out_if_configuration_s; + + `define fuse_core_core_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_core_core_axi_write_out_if_configuration_s to_struct();\ + fuse_core_core_axi_write_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_core_core_axi_write_out_if_configuration_struct );\ + endfunction + + `define fuse_core_core_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_core_core_axi_write_out_if_configuration_s fuse_core_core_axi_write_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_core_core_axi_write_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_core_core_axi_write_out_if_transaction class. +// + `define fuse_core_core_axi_write_out_if_MONITOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_core_core_axi_write_out_if_monitor_s; + + `define fuse_core_core_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_core_core_axi_write_out_if_monitor_s to_monitor_struct();\ + fuse_core_core_axi_write_out_if_monitor_struct = \ + { \ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_core_core_axi_write_out_if_monitor_struct);\ + endfunction\ + + `define fuse_core_core_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_core_core_axi_write_out_if_monitor_s fuse_core_core_axi_write_out_if_monitor_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_core_core_axi_write_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_core_core_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_core_core_axi_write_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_core_core_axi_write_out_if_initiator_s; + + `define fuse_core_core_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_core_core_axi_write_out_if_initiator_s to_initiator_struct();\ + fuse_core_core_axi_write_out_if_initiator_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_core_core_axi_write_out_if_initiator_struct);\ + endfunction + + `define fuse_core_core_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_core_core_axi_write_out_if_initiator_s fuse_core_core_axi_write_out_if_initiator_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_core_core_axi_write_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_core_core_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_core_core_axi_write_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_core_core_axi_write_out_if_responder_s; + + `define fuse_core_core_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_core_core_axi_write_out_if_responder_s to_responder_struct();\ + fuse_core_core_axi_write_out_if_responder_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_core_core_axi_write_out_if_responder_struct);\ + endfunction + + `define fuse_core_core_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_core_core_axi_write_out_if_responder_s fuse_core_core_axi_write_out_if_responder_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_core_core_axi_write_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor.svh new file mode 100644 index 000000000..583e26c88 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_core_core_axi_write_out_if transactions observed by the +// fuse_core_core_axi_write_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_core_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_core_core_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_core_core_axi_write_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_core_core_axi_write_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_core_core_axi_write_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_core_core_axi_write_out_if_monitor_s fuse_core_core_axi_write_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_core_core_axi_write_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor_bfm.sv new file mode 100644 index 000000000..37b7af3f7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_core_core_axi_write_out_if signal monitoring. +// It is accessed by the uvm fuse_core_core_axi_write_out_if monitor through a virtual +// interface handle in the fuse_core_core_axi_write_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_core_core_axi_write_out_if_if. +// +// Input signals from the fuse_core_core_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_core_core_axi_write_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_core_core_axi_write_out_if_pkg_hdl::*; +`include "src/fuse_core_core_axi_write_out_if_macros.svh" + + +interface fuse_core_core_axi_write_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_core_core_axi_write_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_core_core_axi_write_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_core_core_axi_write_out_if_MONITOR_STRUCT + fuse_core_core_axi_write_out_if_monitor_s fuse_core_core_axi_write_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_core_core_axi_write_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + fuse_core_core_axi_write_out_if_pkg::fuse_core_core_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_core_core_axi_write_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_core_core_axi_write_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_core_core_axi_write_out_if_configuration_s fuse_core_core_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_core_core_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_core_core_axi_write_out_if_monitor_s fuse_core_core_axi_write_out_if_monitor_struct); + // + // Available struct members: + // // fuse_core_core_axi_write_out_if_monitor_struct.core_awready + // // fuse_core_core_axi_write_out_if_monitor_struct.core_wready + // // fuse_core_core_axi_write_out_if_monitor_struct.core_bresp + // // fuse_core_core_axi_write_out_if_monitor_struct.core_bid + // // fuse_core_core_axi_write_out_if_monitor_struct.core_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_core_core_axi_write_out_if_monitor_struct.xyz = awready_i; // + // fuse_core_core_axi_write_out_if_monitor_struct.xyz = wready_i; // + // fuse_core_core_axi_write_out_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_core_core_axi_write_out_if_monitor_struct.xyz = bid_i; // + // fuse_core_core_axi_write_out_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_random_sequence.svh new file mode 100644 index 000000000..df9b0ffcd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_core_core_axi_write_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_core_core_axi_write_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_core_core_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_core_core_axi_write_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_core_core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_core_core_axi_write_out_if_random_sequence::body()-fuse_core_core_axi_write_out_if_transaction randomization failed") + // Send the transaction to the fuse_core_core_axi_write_out_if_driver_bfm via the sequencer and fuse_core_core_axi_write_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_core_core_axi_write_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_responder_sequence.svh new file mode 100644 index 000000000..21ff7b447 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_core_core_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_core_core_axi_write_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_core_core_axi_write_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_core_core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_sequence_base.svh new file mode 100644 index 000000000..c1c075a25 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_core_core_axi_write_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_core_core_axi_write_out_if_transaction_req_t; + fuse_core_core_axi_write_out_if_transaction_req_t req; + typedef fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_core_core_axi_write_out_if_transaction_rsp_t; + fuse_core_core_axi_write_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_core_core_axi_write_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_core_core_axi_write_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction.svh new file mode 100644 index 000000000..ce2250205 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_core_core_axi_write_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_core_core_axi_write_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_awready ; + logic core_wready ; + axi_pkg::axi_burst_e core_bresp ; + logic core_bid ; + logic core_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_core_core_axi_write_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_core_core_axi_write_out_if_monitor and fuse_core_core_axi_write_out_if_monitor_bfm + // This struct is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_MONITOR_STRUCT + fuse_core_core_axi_write_out_if_monitor_s fuse_core_core_axi_write_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_core_core_axi_write_out_if_monitor_s + // structure. The function returns the handle to the fuse_core_core_axi_write_out_if_monitor_struct. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_core_core_axi_write_out_if_driver and fuse_core_core_axi_write_out_if_driver_bfm + // to communicate initiator driven data to fuse_core_core_axi_write_out_if_driver_bfm. + // This struct is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_INITIATOR_STRUCT + fuse_core_core_axi_write_out_if_initiator_s fuse_core_core_axi_write_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_core_core_axi_write_out_if_initiator_s + // structure. The function returns the handle to the fuse_core_core_axi_write_out_if_initiator_struct. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_core_core_axi_write_out_if_driver and fuse_core_core_axi_write_out_if_driver_bfm + // to communicate Responder driven data to fuse_core_core_axi_write_out_if_driver_bfm. + // This struct is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_RESPONDER_STRUCT + fuse_core_core_axi_write_out_if_responder_s fuse_core_core_axi_write_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_core_core_axi_write_out_if_responder_s + // structure. The function returns the handle to the fuse_core_core_axi_write_out_if_responder_struct. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awready:0x%x core_wready:0x%x core_bresp:0x%x core_bid:0x%x core_bvalid:0x%x ",core_awready,core_wready,core_bresp,core_bid,core_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_awready == RHS.core_awready) + &&(this.core_wready == RHS.core_wready) + &&(this.core_bresp == RHS.core_bresp) + &&(this.core_bid == RHS.core_bid) + &&(this.core_bvalid == RHS.core_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awready = RHS.core_awready; + this.core_wready = RHS.core_wready; + this.core_bresp = RHS.core_bresp; + this.core_bid = RHS.core_bid; + this.core_bvalid = RHS.core_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_core_core_axi_write_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awready,"core_awready"); + $add_attribute(transaction_view_h,core_wready,"core_wready"); + $add_attribute(transaction_view_h,core_bresp,"core_bresp"); + $add_attribute(transaction_view_h,core_bid,"core_bid"); + $add_attribute(transaction_view_h,core_bvalid,"core_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction_coverage.svh new file mode 100644 index 000000000..73985aa24 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_core_core_axi_write_out_if transaction information using +// a covergroup named fuse_core_core_axi_write_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_core_core_axi_write_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_core_core_axi_write_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awready: coverpoint coverage_trans.core_awready; + core_wready: coverpoint coverage_trans.core_wready; + core_bresp: coverpoint coverage_trans.core_bresp; + core_bid: coverpoint coverage_trans.core_bid; + core_bvalid: coverpoint coverage_trans.core_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_core_core_axi_write_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_core_core_axi_write_out_if_transaction_cg.set_inst_name($sformatf("fuse_core_core_axi_write_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_core_core_axi_write_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/yaml/fuse_core_core_axi_write_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/yaml/fuse_core_core_axi_write_out_if_interface.yaml new file mode 100644 index 000000000..943a1091a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/yaml/fuse_core_core_axi_write_out_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + fuse_core_core_axi_write_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.project new file mode 100644 index 000000000..63a0f5c9d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..a3cbefe0b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..c29cae1ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f + +fuse_ctrl_core_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f + +fuse_ctrl_core_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_read_if_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_read_if_pkg +COMP_fuse_ctrl_core_axi_read_if_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_read_if_pkg +COMP_fuse_ctrl_core_axi_read_if_PKG_TGT = $(COMP_fuse_ctrl_core_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_read_if_pkg: $(COMP_fuse_ctrl_core_axi_read_if_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_read_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_read_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_if_pkg += -I$(fuse_ctrl_core_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_if_pkg += $(fuse_ctrl_core_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_read_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..4e0c5588d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if.compile new file mode 100644 index 000000000..48a0d3158 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_read_if_hvl.compile + - fuse_ctrl_core_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..28155505e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_read_if_if.sv +src/fuse_ctrl_core_axi_read_if_driver_bfm.sv +src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_common.compile new file mode 100644 index 000000000..109b88dad --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..733787653 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..90b4e36ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..26bcff49c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hdl.compile new file mode 100644 index 000000000..c28340779 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_read_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_read_if_if.sv + - src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv + - src/fuse_ctrl_core_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hvl.compile new file mode 100644 index 000000000..6135baefd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_read_if_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.sv new file mode 100644 index 000000000..88b9bb7a3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_read_if_macros.svh" + + export fuse_ctrl_core_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_read_if_typedefs.svh" + `include "src/fuse_ctrl_core_axi_read_if_transaction.svh" + + `include "src/fuse_ctrl_core_axi_read_if_configuration.svh" + `include "src/fuse_ctrl_core_axi_read_if_driver.svh" + `include "src/fuse_ctrl_core_axi_read_if_monitor.svh" + + `include "src/fuse_ctrl_core_axi_read_if_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_read_if_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_read_if_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_read_if_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_read_if2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..bb1d0794d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..c410235bf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_read_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..723625863 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..863eb4873 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..2ac137314 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_agent.svh new file mode 100644 index 000000000..cecf128e5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_configuration.svh new file mode 100644 index 000000000..c75c85e1c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_read_if_configuration_s fuse_ctrl_core_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_read_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_if_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_read_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver.svh new file mode 100644 index 000000000..ab8413284 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_read_if_driver_bfm. +`fuse_ctrl_core_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_if_initiator_s fuse_ctrl_core_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_read_if_driver_bfm. +`fuse_ctrl_core_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_if_responder_s fuse_ctrl_core_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..8d672492f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_read_if signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_read_if driver through a virtual interface +// handle in the fuse_ctrl_core_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_read_if_if. +// +// Input signals from the fuse_ctrl_core_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_if_macros.svh" + +interface fuse_ctrl_core_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_read_if_pkg::fuse_ctrl_core_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_read_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_if_driver_bfm. + `fuse_ctrl_core_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_if_driver_bfm. + `fuse_ctrl_core_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_read_if_configuration_s fuse_ctrl_core_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_read_if_initiator_s fuse_ctrl_core_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_read_if_responder_s fuse_ctrl_core_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_read_if_initiator_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Members within the fuse_ctrl_core_axi_read_if_responder_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + initiator_struct = fuse_ctrl_core_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_read_if_initiator_s fuse_ctrl_core_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_read_if_responder_s fuse_ctrl_core_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_read_if_initiator_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Variables within the fuse_ctrl_core_axi_read_if_responder_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arlock_i; // + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_if.sv new file mode 100644 index 000000000..5f8ec8923 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_read_if interface signals. +// It is instantiated once per fuse_ctrl_core_axi_read_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_if_pkg_hdl::*; + +interface fuse_ctrl_core_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_macros.svh new file mode 100644 index 000000000..c5799df29 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_read_if_configuration class. +// + `define fuse_ctrl_core_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_read_if_configuration_s; + + `define fuse_ctrl_core_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_if_configuration_s to_struct();\ + fuse_ctrl_core_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_read_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_read_if_configuration_s fuse_ctrl_core_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_read_if_transaction class. +// + `define fuse_ctrl_core_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_if_monitor_s; + + `define fuse_ctrl_core_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_if_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_read_if_monitor_struct = \ + { \ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_read_if_monitor_s fuse_ctrl_core_axi_read_if_monitor_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_if_initiator_s; + + `define fuse_ctrl_core_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_if_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_read_if_initiator_struct = \ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_read_if_initiator_s fuse_ctrl_core_axi_read_if_initiator_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_if_responder_s; + + `define fuse_ctrl_core_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_if_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_read_if_responder_struct = \ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_if_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_read_if_responder_s fuse_ctrl_core_axi_read_if_responder_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor.svh new file mode 100644 index 000000000..09bb82cf5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_read_if transactions observed by the +// fuse_ctrl_core_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_read_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_read_if_monitor_s fuse_ctrl_core_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..2f9a66938 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_read_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_read_if monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_read_if_if. +// +// Input signals from the fuse_ctrl_core_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_if_macros.svh" + + +interface fuse_ctrl_core_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_read_if_MONITOR_STRUCT + fuse_ctrl_core_axi_read_if_monitor_s fuse_ctrl_core_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_read_if_pkg::fuse_ctrl_core_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_read_if_configuration_s fuse_ctrl_core_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_read_if_monitor_s fuse_ctrl_core_axi_read_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_araddr + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arvalid + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arburst + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arsize + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arlen + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_aruser + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arid + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arlock + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..f0d127eb7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_read_if_random_sequence::body()-fuse_ctrl_core_axi_read_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_read_if_driver_bfm via the sequencer and fuse_ctrl_core_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..beadd0baf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..ecb0cebaa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_if_transaction_req_t; + fuse_ctrl_core_axi_read_if_transaction_req_t req; + typedef fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_if_transaction_rsp_t; + fuse_ctrl_core_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction.svh new file mode 100644 index 000000000..44757277a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] core_araddr ; + logic core_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + logic [2:0] core_arsize ; + logic [7:0] core_arlen ; + logic [UW-1:0] core_aruser ; + logic [IW-1:0] core_arid ; + logic core_arlock ; + logic core_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_read_if_monitor and fuse_ctrl_core_axi_read_if_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_MONITOR_STRUCT + fuse_ctrl_core_axi_read_if_monitor_s fuse_ctrl_core_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_if_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_if_initiator_s fuse_ctrl_core_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_if_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_if_responder_s fuse_ctrl_core_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_if_responder_struct. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_araddr:0x%x core_arvalid:0x%x core_arburst:0x%x core_arsize:0x%x core_arlen:0x%x core_aruser:0x%x core_arid:0x%x core_arlock:0x%x core_rready:0x%x ",core_araddr,core_arvalid,core_arburst,core_arsize,core_arlen,core_aruser,core_arid,core_arlock,core_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_araddr = RHS.core_araddr; + this.core_arvalid = RHS.core_arvalid; + this.core_arburst = RHS.core_arburst; + this.core_arsize = RHS.core_arsize; + this.core_arlen = RHS.core_arlen; + this.core_aruser = RHS.core_aruser; + this.core_arid = RHS.core_arid; + this.core_arlock = RHS.core_arlock; + this.core_rready = RHS.core_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_araddr,"core_araddr"); + $add_attribute(transaction_view_h,core_arvalid,"core_arvalid"); + $add_attribute(transaction_view_h,core_arburst,"core_arburst"); + $add_attribute(transaction_view_h,core_arsize,"core_arsize"); + $add_attribute(transaction_view_h,core_arlen,"core_arlen"); + $add_attribute(transaction_view_h,core_aruser,"core_aruser"); + $add_attribute(transaction_view_h,core_arid,"core_arid"); + $add_attribute(transaction_view_h,core_arlock,"core_arlock"); + $add_attribute(transaction_view_h,core_rready,"core_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..70b6c9261 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_read_if transaction information using +// a covergroup named fuse_ctrl_core_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_araddr: coverpoint coverage_trans.core_araddr; + core_arvalid: coverpoint coverage_trans.core_arvalid; + core_arburst: coverpoint coverage_trans.core_arburst; + core_arsize: coverpoint coverage_trans.core_arsize; + core_arlen: coverpoint coverage_trans.core_arlen; + core_aruser: coverpoint coverage_trans.core_aruser; + core_arid: coverpoint coverage_trans.core_arid; + core_arlock: coverpoint coverage_trans.core_arlock; + core_rready: coverpoint coverage_trans.core_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_read_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/yaml/fuse_ctrl_core_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/yaml/fuse_ctrl_core_axi_read_if_interface.yaml new file mode 100644 index 000000000..cacadd72c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/yaml/fuse_ctrl_core_axi_read_if_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: core_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.project new file mode 100644 index 000000000..5f36c5d66 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_read_in_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.svproject new file mode 100644 index 000000000..33b6b34f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/Makefile new file mode 100644 index 000000000..04937f1d7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_read_in_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_read_in_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hvl.f + +fuse_ctrl_core_axi_read_in_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hdl.f + +fuse_ctrl_core_axi_read_in_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_read_in_if_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_read_in_if_pkg +COMP_fuse_ctrl_core_axi_read_in_if_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_read_in_if_pkg +COMP_fuse_ctrl_core_axi_read_in_if_PKG_TGT = $(COMP_fuse_ctrl_core_axi_read_in_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_read_in_if_pkg: $(COMP_fuse_ctrl_core_axi_read_in_if_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_read_in_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_read_in_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_read_in_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_in_if_pkg += -I$(fuse_ctrl_core_axi_read_in_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_in_if_pkg += $(fuse_ctrl_core_axi_read_in_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_read_in_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_read_in_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_read_in_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_read_in_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/compile.do new file mode 100644 index 000000000..ba9f78050 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_read_in_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if.compile new file mode 100644 index 000000000..cea52ff3f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_read_in_if_hvl.compile + - fuse_ctrl_core_axi_read_in_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_bfm.vinfo new file mode 100644 index 000000000..667ead1d5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_read_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_read_in_if_if.sv +src/fuse_ctrl_core_axi_read_in_if_driver_bfm.sv +src/fuse_ctrl_core_axi_read_in_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_common.compile new file mode 100644 index 000000000..984ba6c81 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hdl.f new file mode 100644 index 000000000..ab0f78a58 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hvl.f new file mode 100644 index 000000000..6e9dbaf7e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_xrtl.f new file mode 100644 index 000000000..02f0d168d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hdl.compile new file mode 100644 index 000000000..491ad6336 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_read_in_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_read_in_if_if.sv + - src/fuse_ctrl_core_axi_read_in_if_monitor_bfm.sv + - src/fuse_ctrl_core_axi_read_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hvl.compile new file mode 100644 index 000000000..1bab122b1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_read_in_if_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_read_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.sv new file mode 100644 index 000000000..c825d77d2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_in_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_read_in_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_read_in_if_macros.svh" + + export fuse_ctrl_core_axi_read_in_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_read_in_if_typedefs.svh" + `include "src/fuse_ctrl_core_axi_read_in_if_transaction.svh" + + `include "src/fuse_ctrl_core_axi_read_in_if_configuration.svh" + `include "src/fuse_ctrl_core_axi_read_in_if_driver.svh" + `include "src/fuse_ctrl_core_axi_read_in_if_monitor.svh" + + `include "src/fuse_ctrl_core_axi_read_in_if_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_read_in_if_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_read_in_if_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_read_in_if_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_read_in_if2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_read_in_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.vinfo new file mode 100644 index 000000000..7aa6556f8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_read_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_read_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv new file mode 100644 index 000000000..bd812d443 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_in_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_read_in_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_read_in_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.vinfo new file mode 100644 index 000000000..1740fc2cc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_sve.F new file mode 100644 index 000000000..c8b15a089 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if2reg_adapter.svh new file mode 100644 index 000000000..742aa971e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_read_in_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_read_in_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_read_in_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_agent.svh new file mode 100644 index 000000000..c79cacb4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_read_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_read_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_read_in_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_configuration.svh new file mode 100644 index 000000000..eaf5806d5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_read_in_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_read_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_read_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_read_in_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_read_in_if_configuration_s fuse_ctrl_core_axi_read_in_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_read_in_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_if_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_read_in_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_read_in_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_read_in_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_read_in_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_in_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver.svh new file mode 100644 index 000000000..40a71d1b7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_read_in_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_read_in_if_driver and fuse_ctrl_core_axi_read_in_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_read_in_if_driver_bfm. +`fuse_ctrl_core_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_in_if_initiator_s fuse_ctrl_core_axi_read_in_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_read_in_if_driver and fuse_ctrl_core_axi_read_in_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_read_in_if_driver_bfm. +`fuse_ctrl_core_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_in_if_responder_s fuse_ctrl_core_axi_read_in_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_read_in_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_read_in_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_read_in_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_read_in_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver_bfm.sv new file mode 100644 index 000000000..bdf19e41e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_read_in_if signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_read_in_if driver through a virtual interface +// handle in the fuse_ctrl_core_axi_read_in_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_read_in_if_if. +// +// Input signals from the fuse_ctrl_core_axi_read_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_read_in_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_in_if_macros.svh" + +interface fuse_ctrl_core_axi_read_in_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_read_in_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_in_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_read_in_if_pkg::fuse_ctrl_core_axi_read_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_read_in_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_read_in_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_read_in_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_in_if_driver and fuse_ctrl_core_axi_read_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_in_if_driver_bfm. + `fuse_ctrl_core_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_in_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_read_in_if_driver and fuse_ctrl_core_axi_read_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_in_if_driver_bfm. + `fuse_ctrl_core_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_in_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_read_in_if_configuration_s fuse_ctrl_core_axi_read_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_read_in_if_initiator_s fuse_ctrl_core_axi_read_in_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_read_in_if_responder_s fuse_ctrl_core_axi_read_in_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_read_in_if_initiator_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Members within the fuse_ctrl_core_axi_read_in_if_responder_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + initiator_struct = fuse_ctrl_core_axi_read_in_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_read_in_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_read_in_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_read_in_if_initiator_s fuse_ctrl_core_axi_read_in_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_read_in_if_responder_s fuse_ctrl_core_axi_read_in_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_read_in_if_initiator_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Variables within the fuse_ctrl_core_axi_read_in_if_responder_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = arlock_i; // + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_read_in_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_read_in_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_if.sv new file mode 100644 index 000000000..c46ca5b4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_read_in_if interface signals. +// It is instantiated once per fuse_ctrl_core_axi_read_in_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_read_in_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_read_in_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_in_if_pkg_hdl::*; + +interface fuse_ctrl_core_axi_read_in_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_macros.svh new file mode 100644 index 000000000..71c48f0b3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_read_in_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_read_in_if_configuration class. +// + `define fuse_ctrl_core_axi_read_in_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_read_in_if_configuration_s; + + `define fuse_ctrl_core_axi_read_in_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_if_configuration_s to_struct();\ + fuse_ctrl_core_axi_read_in_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_read_in_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_read_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_read_in_if_configuration_s fuse_ctrl_core_axi_read_in_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_read_in_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_read_in_if_transaction class. +// + `define fuse_ctrl_core_axi_read_in_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_in_if_monitor_s; + + `define fuse_ctrl_core_axi_read_in_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_if_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_read_in_if_monitor_struct = \ + { \ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_in_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_read_in_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_read_in_if_monitor_s fuse_ctrl_core_axi_read_in_if_monitor_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_in_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_read_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_in_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_in_if_initiator_s; + + `define fuse_ctrl_core_axi_read_in_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_if_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_read_in_if_initiator_struct = \ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_in_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_in_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_read_in_if_initiator_s fuse_ctrl_core_axi_read_in_if_initiator_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_in_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_read_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_in_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_in_if_responder_s; + + `define fuse_ctrl_core_axi_read_in_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_if_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_read_in_if_responder_struct = \ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_in_if_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_in_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_read_in_if_responder_s fuse_ctrl_core_axi_read_in_if_responder_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_in_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor.svh new file mode 100644 index 000000000..4942cca3b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_read_in_if transactions observed by the +// fuse_ctrl_core_axi_read_in_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_read_in_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_read_in_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_read_in_if_monitor_s fuse_ctrl_core_axi_read_in_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_read_in_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor_bfm.sv new file mode 100644 index 000000000..2e9f2fc31 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_read_in_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_read_in_if monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_read_in_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_read_in_if_if. +// +// Input signals from the fuse_ctrl_core_axi_read_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_read_in_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_in_if_macros.svh" + + +interface fuse_ctrl_core_axi_read_in_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_read_in_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_in_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_read_in_if_MONITOR_STRUCT + fuse_ctrl_core_axi_read_in_if_monitor_s fuse_ctrl_core_axi_read_in_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_read_in_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_read_in_if_pkg::fuse_ctrl_core_axi_read_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_read_in_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_read_in_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_read_in_if_configuration_s fuse_ctrl_core_axi_read_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_read_in_if_monitor_s fuse_ctrl_core_axi_read_in_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_araddr + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_arvalid + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_arburst + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_arsize + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_arlen + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_aruser + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_arid + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_arlock + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_random_sequence.svh new file mode 100644 index 000000000..4d44b21a1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_read_in_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_read_in_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_read_in_if_random_sequence::body()-fuse_ctrl_core_axi_read_in_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_read_in_if_driver_bfm via the sequencer and fuse_ctrl_core_axi_read_in_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_read_in_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_responder_sequence.svh new file mode 100644 index 000000000..cafea5de4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_read_in_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_sequence_base.svh new file mode 100644 index 000000000..ccf0c8987 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_in_if_transaction_req_t; + fuse_ctrl_core_axi_read_in_if_transaction_req_t req; + typedef fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_in_if_transaction_rsp_t; + fuse_ctrl_core_axi_read_in_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_read_in_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_read_in_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction.svh new file mode 100644 index 000000000..75bfc1b3a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_read_in_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] core_araddr ; + logic core_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + logic [2:0] core_arsize ; + logic [7:0] core_arlen ; + logic [UW-1:0] core_aruser ; + logic [IW-1:0] core_arid ; + logic core_arlock ; + logic core_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_read_in_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_read_in_if_monitor and fuse_ctrl_core_axi_read_in_if_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_MONITOR_STRUCT + fuse_ctrl_core_axi_read_in_if_monitor_s fuse_ctrl_core_axi_read_in_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_in_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_if_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_in_if_driver and fuse_ctrl_core_axi_read_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_in_if_initiator_s fuse_ctrl_core_axi_read_in_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_in_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_if_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_read_in_if_driver and fuse_ctrl_core_axi_read_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_in_if_responder_s fuse_ctrl_core_axi_read_in_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_in_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_if_responder_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_araddr:0x%x core_arvalid:0x%x core_arburst:0x%x core_arsize:0x%x core_arlen:0x%x core_aruser:0x%x core_arid:0x%x core_arlock:0x%x core_rready:0x%x ",core_araddr,core_arvalid,core_arburst,core_arsize,core_arlen,core_aruser,core_arid,core_arlock,core_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_araddr = RHS.core_araddr; + this.core_arvalid = RHS.core_arvalid; + this.core_arburst = RHS.core_arburst; + this.core_arsize = RHS.core_arsize; + this.core_arlen = RHS.core_arlen; + this.core_aruser = RHS.core_aruser; + this.core_arid = RHS.core_arid; + this.core_arlock = RHS.core_arlock; + this.core_rready = RHS.core_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_read_in_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_araddr,"core_araddr"); + $add_attribute(transaction_view_h,core_arvalid,"core_arvalid"); + $add_attribute(transaction_view_h,core_arburst,"core_arburst"); + $add_attribute(transaction_view_h,core_arsize,"core_arsize"); + $add_attribute(transaction_view_h,core_arlen,"core_arlen"); + $add_attribute(transaction_view_h,core_aruser,"core_aruser"); + $add_attribute(transaction_view_h,core_arid,"core_arid"); + $add_attribute(transaction_view_h,core_arlock,"core_arlock"); + $add_attribute(transaction_view_h,core_rready,"core_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction_coverage.svh new file mode 100644 index 000000000..ae301fb39 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_read_in_if transaction information using +// a covergroup named fuse_ctrl_core_axi_read_in_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_read_in_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_araddr: coverpoint coverage_trans.core_araddr; + core_arvalid: coverpoint coverage_trans.core_arvalid; + core_arburst: coverpoint coverage_trans.core_arburst; + core_arsize: coverpoint coverage_trans.core_arsize; + core_arlen: coverpoint coverage_trans.core_arlen; + core_aruser: coverpoint coverage_trans.core_aruser; + core_arid: coverpoint coverage_trans.core_arid; + core_arlock: coverpoint coverage_trans.core_arlock; + core_rready: coverpoint coverage_trans.core_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_read_in_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_read_in_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_in_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_read_in_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/yaml/fuse_ctrl_core_axi_read_in_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/yaml/fuse_ctrl_core_axi_read_in_if_interface.yaml new file mode 100644 index 000000000..a53f12850 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/yaml/fuse_ctrl_core_axi_read_in_if_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_read_in_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: core_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.project new file mode 100644 index 000000000..e463bf00a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_read_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.svproject new file mode 100644 index 000000000..4a40ac8c2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/Makefile new file mode 100644 index 000000000..0ccd2f81d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_read_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_read_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hvl.f + +fuse_ctrl_core_axi_read_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hdl.f + +fuse_ctrl_core_axi_read_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_read_in_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_read_in_pkg +COMP_fuse_ctrl_core_axi_read_in_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_read_in_pkg +COMP_fuse_ctrl_core_axi_read_in_PKG_TGT = $(COMP_fuse_ctrl_core_axi_read_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_read_in_pkg: $(COMP_fuse_ctrl_core_axi_read_in_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_read_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_read_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_read_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_read_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_read_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_in_pkg += -I$(fuse_ctrl_core_axi_read_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_in_pkg += $(fuse_ctrl_core_axi_read_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_read_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_read_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_read_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_read_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/compile.do new file mode 100644 index 000000000..badb44884 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_read_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in.compile new file mode 100644 index 000000000..87b941a8f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_read_in_hvl.compile + - fuse_ctrl_core_axi_read_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_bfm.vinfo new file mode 100644 index 000000000..5b881217d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_read_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_read_in_if.sv +src/fuse_ctrl_core_axi_read_in_driver_bfm.sv +src/fuse_ctrl_core_axi_read_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_common.compile new file mode 100644 index 000000000..c150c939d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hdl.f new file mode 100644 index 000000000..b5ab5eab1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hvl.f new file mode 100644 index 000000000..ea2d1017f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_xrtl.f new file mode 100644 index 000000000..16c479246 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hdl.compile new file mode 100644 index 000000000..96c4c97f5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_read_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_read_in_if.sv + - src/fuse_ctrl_core_axi_read_in_monitor_bfm.sv + - src/fuse_ctrl_core_axi_read_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hvl.compile new file mode 100644 index 000000000..287ac6ac3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_read_in_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_read_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.sv new file mode 100644 index 000000000..69c23d827 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_read_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_read_in_macros.svh" + + export fuse_ctrl_core_axi_read_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_read_in_typedefs.svh" + `include "src/fuse_ctrl_core_axi_read_in_transaction.svh" + + `include "src/fuse_ctrl_core_axi_read_in_configuration.svh" + `include "src/fuse_ctrl_core_axi_read_in_driver.svh" + `include "src/fuse_ctrl_core_axi_read_in_monitor.svh" + + `include "src/fuse_ctrl_core_axi_read_in_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_read_in_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_read_in_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_read_in_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_read_in2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_read_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.vinfo new file mode 100644 index 000000000..0c3c242fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_read_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_read_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.sv new file mode 100644 index 000000000..2377e24ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_read_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_read_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.vinfo new file mode 100644 index 000000000..ff9df3113 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_sve.F new file mode 100644 index 000000000..2a3defa24 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in2reg_adapter.svh new file mode 100644 index 000000000..cb981636b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_read_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_read_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_read_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_agent.svh new file mode 100644 index 000000000..40c3aad46 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_read_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_read_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_read_in_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_configuration.svh new file mode 100644 index 000000000..55a8cfe6b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_read_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_read_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_read_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_read_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_read_in_configuration_s fuse_ctrl_core_axi_read_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_read_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_read_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_read_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_read_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_read_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver.svh new file mode 100644 index 000000000..a0a7a6daa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_read_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_read_in_driver and fuse_ctrl_core_axi_read_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_read_in_driver_bfm. +`fuse_ctrl_core_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_in_initiator_s fuse_ctrl_core_axi_read_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_read_in_driver and fuse_ctrl_core_axi_read_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_read_in_driver_bfm. +`fuse_ctrl_core_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_in_responder_s fuse_ctrl_core_axi_read_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_read_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_read_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_read_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_read_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver_bfm.sv new file mode 100644 index 000000000..ae6de997b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_read_in signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_read_in driver through a virtual interface +// handle in the fuse_ctrl_core_axi_read_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_read_in_if. +// +// Input signals from the fuse_ctrl_core_axi_read_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_read_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_in_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_in_macros.svh" + +interface fuse_ctrl_core_axi_read_in_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_read_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_read_in_pkg::fuse_ctrl_core_axi_read_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_read_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_read_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_read_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_in_driver and fuse_ctrl_core_axi_read_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_in_driver_bfm. + `fuse_ctrl_core_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_read_in_driver and fuse_ctrl_core_axi_read_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_in_driver_bfm. + `fuse_ctrl_core_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_read_in_configuration_s fuse_ctrl_core_axi_read_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_read_in_initiator_s fuse_ctrl_core_axi_read_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_read_in_responder_s fuse_ctrl_core_axi_read_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_read_in_initiator_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Members within the fuse_ctrl_core_axi_read_in_responder_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + initiator_struct = fuse_ctrl_core_axi_read_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_read_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_read_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_read_in_initiator_s fuse_ctrl_core_axi_read_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_read_in_responder_s fuse_ctrl_core_axi_read_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_read_in_initiator_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Variables within the fuse_ctrl_core_axi_read_in_responder_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = arlock_i; // + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_read_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_read_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_if.sv new file mode 100644 index 000000000..b778c9293 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_read_in interface signals. +// It is instantiated once per fuse_ctrl_core_axi_read_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_read_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_read_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_in_pkg_hdl::*; + +interface fuse_ctrl_core_axi_read_in_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_macros.svh new file mode 100644 index 000000000..4ada88f4d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_read_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_read_in_configuration class. +// + `define fuse_ctrl_core_axi_read_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_read_in_configuration_s; + + `define fuse_ctrl_core_axi_read_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_configuration_s to_struct();\ + fuse_ctrl_core_axi_read_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_read_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_read_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_read_in_configuration_s fuse_ctrl_core_axi_read_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_read_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_read_in_transaction class. +// + `define fuse_ctrl_core_axi_read_in_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_in_monitor_s; + + `define fuse_ctrl_core_axi_read_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_read_in_monitor_struct = \ + { \ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_read_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_read_in_monitor_s fuse_ctrl_core_axi_read_in_monitor_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_read_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_in_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_in_initiator_s; + + `define fuse_ctrl_core_axi_read_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_read_in_initiator_struct = \ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_read_in_initiator_s fuse_ctrl_core_axi_read_in_initiator_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_read_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_in_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_in_responder_s; + + `define fuse_ctrl_core_axi_read_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_read_in_responder_struct = \ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_in_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_read_in_responder_s fuse_ctrl_core_axi_read_in_responder_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor.svh new file mode 100644 index 000000000..62b74b3f5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_read_in transactions observed by the +// fuse_ctrl_core_axi_read_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_read_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_read_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_read_in_monitor_s fuse_ctrl_core_axi_read_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_read_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor_bfm.sv new file mode 100644 index 000000000..13ea7d2b3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_read_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_read_in monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_read_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_read_in_if. +// +// Input signals from the fuse_ctrl_core_axi_read_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_read_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_in_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_in_macros.svh" + + +interface fuse_ctrl_core_axi_read_in_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_read_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_read_in_MONITOR_STRUCT + fuse_ctrl_core_axi_read_in_monitor_s fuse_ctrl_core_axi_read_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_read_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_read_in_pkg::fuse_ctrl_core_axi_read_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_read_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_read_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_read_in_configuration_s fuse_ctrl_core_axi_read_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_read_in_monitor_s fuse_ctrl_core_axi_read_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_araddr + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_arvalid + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_arburst + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_arsize + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_arlen + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_aruser + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_arid + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_arlock + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_random_sequence.svh new file mode 100644 index 000000000..ce6f4efd0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_read_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_read_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_read_in_random_sequence::body()-fuse_ctrl_core_axi_read_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_read_in_driver_bfm via the sequencer and fuse_ctrl_core_axi_read_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_read_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_responder_sequence.svh new file mode 100644 index 000000000..44a3b25db --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_read_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_sequence_base.svh new file mode 100644 index 000000000..bb92d2409 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_in_transaction_req_t; + fuse_ctrl_core_axi_read_in_transaction_req_t req; + typedef fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_in_transaction_rsp_t; + fuse_ctrl_core_axi_read_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_read_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_read_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction.svh new file mode 100644 index 000000000..39e8f9735 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_read_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] core_araddr ; + logic core_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + logic [2:0] core_arsize ; + logic [7:0] core_arlen ; + logic [UW-1:0] core_aruser ; + logic [IW-1:0] core_arid ; + logic core_arlock ; + logic core_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_read_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_read_in_monitor and fuse_ctrl_core_axi_read_in_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_MONITOR_STRUCT + fuse_ctrl_core_axi_read_in_monitor_s fuse_ctrl_core_axi_read_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_in_driver and fuse_ctrl_core_axi_read_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_in_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_in_initiator_s fuse_ctrl_core_axi_read_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_read_in_driver and fuse_ctrl_core_axi_read_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_in_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_in_responder_s fuse_ctrl_core_axi_read_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_responder_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_araddr:0x%x core_arvalid:0x%x core_arburst:0x%x core_arsize:0x%x core_arlen:0x%x core_aruser:0x%x core_arid:0x%x core_arlock:0x%x core_rready:0x%x ",core_araddr,core_arvalid,core_arburst,core_arsize,core_arlen,core_aruser,core_arid,core_arlock,core_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_araddr = RHS.core_araddr; + this.core_arvalid = RHS.core_arvalid; + this.core_arburst = RHS.core_arburst; + this.core_arsize = RHS.core_arsize; + this.core_arlen = RHS.core_arlen; + this.core_aruser = RHS.core_aruser; + this.core_arid = RHS.core_arid; + this.core_arlock = RHS.core_arlock; + this.core_rready = RHS.core_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_read_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_araddr,"core_araddr"); + $add_attribute(transaction_view_h,core_arvalid,"core_arvalid"); + $add_attribute(transaction_view_h,core_arburst,"core_arburst"); + $add_attribute(transaction_view_h,core_arsize,"core_arsize"); + $add_attribute(transaction_view_h,core_arlen,"core_arlen"); + $add_attribute(transaction_view_h,core_aruser,"core_aruser"); + $add_attribute(transaction_view_h,core_arid,"core_arid"); + $add_attribute(transaction_view_h,core_arlock,"core_arlock"); + $add_attribute(transaction_view_h,core_rready,"core_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction_coverage.svh new file mode 100644 index 000000000..b17252421 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_read_in transaction information using +// a covergroup named fuse_ctrl_core_axi_read_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_read_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_araddr: coverpoint coverage_trans.core_araddr; + core_arvalid: coverpoint coverage_trans.core_arvalid; + core_arburst: coverpoint coverage_trans.core_arburst; + core_arsize: coverpoint coverage_trans.core_arsize; + core_arlen: coverpoint coverage_trans.core_arlen; + core_aruser: coverpoint coverage_trans.core_aruser; + core_arid: coverpoint coverage_trans.core_arid; + core_arlock: coverpoint coverage_trans.core_arlock; + core_rready: coverpoint coverage_trans.core_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_read_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_read_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_read_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/yaml/fuse_ctrl_core_axi_read_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/yaml/fuse_ctrl_core_axi_read_in_interface.yaml new file mode 100644 index 000000000..85b8443f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/yaml/fuse_ctrl_core_axi_read_in_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_read_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: core_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.project new file mode 100644 index 000000000..4eb8e7fa7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_read_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.svproject new file mode 100644 index 000000000..ca67120a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/Makefile new file mode 100644 index 000000000..77d2d8ef1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_read_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_read_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hvl.f + +fuse_ctrl_core_axi_read_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hdl.f + +fuse_ctrl_core_axi_read_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_read_out_if_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_read_out_if_pkg +COMP_fuse_ctrl_core_axi_read_out_if_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_read_out_if_pkg +COMP_fuse_ctrl_core_axi_read_out_if_PKG_TGT = $(COMP_fuse_ctrl_core_axi_read_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_read_out_if_pkg: $(COMP_fuse_ctrl_core_axi_read_out_if_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_read_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_read_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_read_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_out_if_pkg += -I$(fuse_ctrl_core_axi_read_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_out_if_pkg += $(fuse_ctrl_core_axi_read_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_read_out_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_read_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_read_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_read_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/compile.do new file mode 100644 index 000000000..79c0b7bbf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_read_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if.compile new file mode 100644 index 000000000..9b16b1eb7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_read_out_if_hvl.compile + - fuse_ctrl_core_axi_read_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_bfm.vinfo new file mode 100644 index 000000000..052ffff1e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_read_out_if_if.sv +src/fuse_ctrl_core_axi_read_out_if_driver_bfm.sv +src/fuse_ctrl_core_axi_read_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_common.compile new file mode 100644 index 000000000..6f3386ead --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hdl.f new file mode 100644 index 000000000..49d73f821 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hvl.f new file mode 100644 index 000000000..49fbb9e2b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_xrtl.f new file mode 100644 index 000000000..6a4fea185 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hdl.compile new file mode 100644 index 000000000..67f1b7bb1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_read_out_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_read_out_if_if.sv + - src/fuse_ctrl_core_axi_read_out_if_monitor_bfm.sv + - src/fuse_ctrl_core_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hvl.compile new file mode 100644 index 000000000..0a7a5beef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_read_out_if_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.sv new file mode 100644 index 000000000..83af573ed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_read_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_read_out_if_macros.svh" + + export fuse_ctrl_core_axi_read_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_read_out_if_typedefs.svh" + `include "src/fuse_ctrl_core_axi_read_out_if_transaction.svh" + + `include "src/fuse_ctrl_core_axi_read_out_if_configuration.svh" + `include "src/fuse_ctrl_core_axi_read_out_if_driver.svh" + `include "src/fuse_ctrl_core_axi_read_out_if_monitor.svh" + + `include "src/fuse_ctrl_core_axi_read_out_if_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_read_out_if_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_read_out_if_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_read_out_if_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_read_out_if2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_read_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.vinfo new file mode 100644 index 000000000..11d12898a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv new file mode 100644 index 000000000..7e145d3ca --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_read_out_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_read_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..4ebfc1cf0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_sve.F new file mode 100644 index 000000000..7e68f8b02 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if2reg_adapter.svh new file mode 100644 index 000000000..572880369 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_read_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_read_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_read_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_agent.svh new file mode 100644 index 000000000..98e11f158 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_read_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_configuration.svh new file mode 100644 index 000000000..ca3265795 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_read_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_read_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_read_out_if_configuration_s fuse_ctrl_core_axi_read_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_read_out_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_if_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_read_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_read_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_read_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_read_out_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver.svh new file mode 100644 index 000000000..79a37cfcd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_read_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_read_out_if_driver and fuse_ctrl_core_axi_read_out_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_read_out_if_driver_bfm. +`fuse_ctrl_core_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_out_if_initiator_s fuse_ctrl_core_axi_read_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_read_out_if_driver and fuse_ctrl_core_axi_read_out_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_read_out_if_driver_bfm. +`fuse_ctrl_core_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_out_if_responder_s fuse_ctrl_core_axi_read_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_read_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_read_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_read_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_read_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver_bfm.sv new file mode 100644 index 000000000..7bc0b6bba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_read_out_if signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_read_out_if driver through a virtual interface +// handle in the fuse_ctrl_core_axi_read_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_read_out_if_if. +// +// Input signals from the fuse_ctrl_core_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_read_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_out_if_macros.svh" + +interface fuse_ctrl_core_axi_read_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_read_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_read_out_if_pkg::fuse_ctrl_core_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_read_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_read_out_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_read_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_out_if_driver and fuse_ctrl_core_axi_read_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_out_if_driver_bfm. + `fuse_ctrl_core_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_read_out_if_driver and fuse_ctrl_core_axi_read_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_out_if_driver_bfm. + `fuse_ctrl_core_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_read_out_if_configuration_s fuse_ctrl_core_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_read_out_if_initiator_s fuse_ctrl_core_axi_read_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_read_out_if_responder_s fuse_ctrl_core_axi_read_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_read_out_if_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Members within the fuse_ctrl_core_axi_read_out_if_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + initiator_struct = fuse_ctrl_core_axi_read_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_core_axi_read_out_if_responder_struct.xyz = arready_i; // + // fuse_ctrl_core_axi_read_out_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_read_out_if_responder_struct.xyz = rresp_i; // + // fuse_ctrl_core_axi_read_out_if_responder_struct.xyz = rid_i; // + // fuse_ctrl_core_axi_read_out_if_responder_struct.xyz = rlast_i; // + // fuse_ctrl_core_axi_read_out_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_read_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_read_out_if_initiator_s fuse_ctrl_core_axi_read_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_read_out_if_responder_s fuse_ctrl_core_axi_read_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_read_out_if_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Variables within the fuse_ctrl_core_axi_read_out_if_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= fuse_ctrl_core_axi_read_out_if_initiator_struct.xyz; // + // rdata_o <= fuse_ctrl_core_axi_read_out_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= fuse_ctrl_core_axi_read_out_if_initiator_struct.xyz; // + // rid_o <= fuse_ctrl_core_axi_read_out_if_initiator_struct.xyz; // + // rlast_o <= fuse_ctrl_core_axi_read_out_if_initiator_struct.xyz; // + // rvalid_o <= fuse_ctrl_core_axi_read_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_read_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_if.sv new file mode 100644 index 000000000..b9222ea7e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_read_out_if interface signals. +// It is instantiated once per fuse_ctrl_core_axi_read_out_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_read_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_read_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_read_out_if_bus.arready), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_if_bus.rdata), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_if_bus.rresp), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_if_bus.rid), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_if_bus.rlast), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_out_if_pkg_hdl::*; + +interface fuse_ctrl_core_axi_read_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_macros.svh new file mode 100644 index 000000000..6806b6e97 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_read_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_read_out_if_configuration class. +// + `define fuse_ctrl_core_axi_read_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_read_out_if_configuration_s; + + `define fuse_ctrl_core_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_if_configuration_s to_struct();\ + fuse_ctrl_core_axi_read_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_read_out_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_read_out_if_configuration_s fuse_ctrl_core_axi_read_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_read_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_read_out_if_transaction class. +// + `define fuse_ctrl_core_axi_read_out_if_MONITOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } fuse_ctrl_core_axi_read_out_if_monitor_s; + + `define fuse_ctrl_core_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_if_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_read_out_if_monitor_struct = \ + { \ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( fuse_ctrl_core_axi_read_out_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_read_out_if_monitor_s fuse_ctrl_core_axi_read_out_if_monitor_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = fuse_ctrl_core_axi_read_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } fuse_ctrl_core_axi_read_out_if_initiator_s; + + `define fuse_ctrl_core_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_if_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_read_out_if_initiator_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( fuse_ctrl_core_axi_read_out_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_read_out_if_initiator_s fuse_ctrl_core_axi_read_out_if_initiator_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = fuse_ctrl_core_axi_read_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } fuse_ctrl_core_axi_read_out_if_responder_s; + + `define fuse_ctrl_core_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_if_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_read_out_if_responder_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( fuse_ctrl_core_axi_read_out_if_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_read_out_if_responder_s fuse_ctrl_core_axi_read_out_if_responder_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = fuse_ctrl_core_axi_read_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor.svh new file mode 100644 index 000000000..b170cd71e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_read_out_if transactions observed by the +// fuse_ctrl_core_axi_read_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_read_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_read_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_read_out_if_monitor_s fuse_ctrl_core_axi_read_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_read_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor_bfm.sv new file mode 100644 index 000000000..e01d9bb2b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_read_out_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_read_out_if monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_read_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_read_out_if_if. +// +// Input signals from the fuse_ctrl_core_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_read_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_out_if_macros.svh" + + +interface fuse_ctrl_core_axi_read_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_read_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_read_out_if_MONITOR_STRUCT + fuse_ctrl_core_axi_read_out_if_monitor_s fuse_ctrl_core_axi_read_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_read_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_read_out_if_pkg::fuse_ctrl_core_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_read_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_read_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_read_out_if_configuration_s fuse_ctrl_core_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_read_out_if_monitor_s fuse_ctrl_core_axi_read_out_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_read_out_if_monitor_struct.core_arready + // // fuse_ctrl_core_axi_read_out_if_monitor_struct.core_rdata + // // fuse_ctrl_core_axi_read_out_if_monitor_struct.core_rresp + // // fuse_ctrl_core_axi_read_out_if_monitor_struct.core_rid + // // fuse_ctrl_core_axi_read_out_if_monitor_struct.core_rlast + // // fuse_ctrl_core_axi_read_out_if_monitor_struct.core_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_read_out_if_monitor_struct.xyz = arready_i; // + // fuse_ctrl_core_axi_read_out_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_read_out_if_monitor_struct.xyz = rresp_i; // + // fuse_ctrl_core_axi_read_out_if_monitor_struct.xyz = rid_i; // + // fuse_ctrl_core_axi_read_out_if_monitor_struct.xyz = rlast_i; // + // fuse_ctrl_core_axi_read_out_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_random_sequence.svh new file mode 100644 index 000000000..444ad3349 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_read_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_read_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_read_out_if_random_sequence::body()-fuse_ctrl_core_axi_read_out_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_read_out_if_driver_bfm via the sequencer and fuse_ctrl_core_axi_read_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_read_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_responder_sequence.svh new file mode 100644 index 000000000..b146cb193 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_read_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_sequence_base.svh new file mode 100644 index 000000000..cc685c46c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_out_if_transaction_req_t; + fuse_ctrl_core_axi_read_out_if_transaction_req_t req; + typedef fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_out_if_transaction_rsp_t; + fuse_ctrl_core_axi_read_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_read_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_read_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction.svh new file mode 100644 index 000000000..3d9e4155f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_read_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_arready ; + logic [DW-1:0] core_rdata ; + axi_pkg::axi_burst_e core_rresp ; + logic [IW-1:0] core_rid ; + logic core_rlast ; + logic core_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_read_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_read_out_if_monitor and fuse_ctrl_core_axi_read_out_if_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_MONITOR_STRUCT + fuse_ctrl_core_axi_read_out_if_monitor_s fuse_ctrl_core_axi_read_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_out_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_if_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_out_if_driver and fuse_ctrl_core_axi_read_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_out_if_initiator_s fuse_ctrl_core_axi_read_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_out_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_if_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_read_out_if_driver and fuse_ctrl_core_axi_read_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_out_if_responder_s fuse_ctrl_core_axi_read_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_out_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_if_responder_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_arready:0x%x core_rdata:0x%x core_rresp:0x%x core_rid:0x%x core_rlast:0x%x core_rvalid:0x%x ",core_arready,core_rdata,core_rresp,core_rid,core_rlast,core_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_arready == RHS.core_arready) + &&(this.core_rdata == RHS.core_rdata) + &&(this.core_rresp == RHS.core_rresp) + &&(this.core_rid == RHS.core_rid) + &&(this.core_rlast == RHS.core_rlast) + &&(this.core_rvalid == RHS.core_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_arready = RHS.core_arready; + this.core_rdata = RHS.core_rdata; + this.core_rresp = RHS.core_rresp; + this.core_rid = RHS.core_rid; + this.core_rlast = RHS.core_rlast; + this.core_rvalid = RHS.core_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_read_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_arready,"core_arready"); + $add_attribute(transaction_view_h,core_rdata,"core_rdata"); + $add_attribute(transaction_view_h,core_rresp,"core_rresp"); + $add_attribute(transaction_view_h,core_rid,"core_rid"); + $add_attribute(transaction_view_h,core_rlast,"core_rlast"); + $add_attribute(transaction_view_h,core_rvalid,"core_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction_coverage.svh new file mode 100644 index 000000000..8c29582fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_read_out_if transaction information using +// a covergroup named fuse_ctrl_core_axi_read_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_read_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_arready: coverpoint coverage_trans.core_arready; + core_rdata: coverpoint coverage_trans.core_rdata; + core_rresp: coverpoint coverage_trans.core_rresp; + core_rid: coverpoint coverage_trans.core_rid; + core_rlast: coverpoint coverage_trans.core_rlast; + core_rvalid: coverpoint coverage_trans.core_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_read_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_read_out_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_read_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/yaml/fuse_ctrl_core_axi_read_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/yaml/fuse_ctrl_core_axi_read_out_if_interface.yaml new file mode 100644 index 000000000..e6555eaf2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/yaml/fuse_ctrl_core_axi_read_out_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_read_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.project new file mode 100644 index 000000000..23723ddc3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_read_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.svproject new file mode 100644 index 000000000..b74d8263a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/Makefile new file mode 100644 index 000000000..673e00d3b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_read_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_read_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hvl.f + +fuse_ctrl_core_axi_read_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hdl.f + +fuse_ctrl_core_axi_read_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_read_out_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_read_out_pkg +COMP_fuse_ctrl_core_axi_read_out_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_read_out_pkg +COMP_fuse_ctrl_core_axi_read_out_PKG_TGT = $(COMP_fuse_ctrl_core_axi_read_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_read_out_pkg: $(COMP_fuse_ctrl_core_axi_read_out_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_read_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_read_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_read_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_read_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_read_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_out_pkg += -I$(fuse_ctrl_core_axi_read_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_out_pkg += $(fuse_ctrl_core_axi_read_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_read_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_read_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_read_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_read_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/compile.do new file mode 100644 index 000000000..5e6a9fd02 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_read_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out.compile new file mode 100644 index 000000000..ad96a809e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_read_out_hvl.compile + - fuse_ctrl_core_axi_read_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_bfm.vinfo new file mode 100644 index 000000000..03fc49a0a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_read_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_read_out_if.sv +src/fuse_ctrl_core_axi_read_out_driver_bfm.sv +src/fuse_ctrl_core_axi_read_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_common.compile new file mode 100644 index 000000000..84d4f2e7f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hdl.f new file mode 100644 index 000000000..2debd1cc6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hvl.f new file mode 100644 index 000000000..8e9b75a31 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_xrtl.f new file mode 100644 index 000000000..4b0eaa25b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hdl.compile new file mode 100644 index 000000000..5b16e7513 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_read_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_read_out_if.sv + - src/fuse_ctrl_core_axi_read_out_monitor_bfm.sv + - src/fuse_ctrl_core_axi_read_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hvl.compile new file mode 100644 index 000000000..a24021047 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_read_out_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_read_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.sv new file mode 100644 index 000000000..d297db477 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_read_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_read_out_macros.svh" + + export fuse_ctrl_core_axi_read_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_read_out_typedefs.svh" + `include "src/fuse_ctrl_core_axi_read_out_transaction.svh" + + `include "src/fuse_ctrl_core_axi_read_out_configuration.svh" + `include "src/fuse_ctrl_core_axi_read_out_driver.svh" + `include "src/fuse_ctrl_core_axi_read_out_monitor.svh" + + `include "src/fuse_ctrl_core_axi_read_out_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_read_out_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_read_out_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_read_out_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_read_out2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_read_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.vinfo new file mode 100644 index 000000000..50e86c01e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_read_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_read_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.sv new file mode 100644 index 000000000..0e4cd5815 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_read_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_read_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.vinfo new file mode 100644 index 000000000..b7569b98e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_sve.F new file mode 100644 index 000000000..531457d9b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out2reg_adapter.svh new file mode 100644 index 000000000..44bdb8771 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_read_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_read_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_read_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_agent.svh new file mode 100644 index 000000000..4c2bae450 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_read_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_read_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_read_out_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_configuration.svh new file mode 100644 index 000000000..cadcf884e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_read_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_read_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_read_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_read_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_read_out_configuration_s fuse_ctrl_core_axi_read_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_read_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_read_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_read_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_read_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_read_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver.svh new file mode 100644 index 000000000..0471800a7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_read_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_read_out_driver and fuse_ctrl_core_axi_read_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_read_out_driver_bfm. +`fuse_ctrl_core_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_out_initiator_s fuse_ctrl_core_axi_read_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_read_out_driver and fuse_ctrl_core_axi_read_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_read_out_driver_bfm. +`fuse_ctrl_core_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_out_responder_s fuse_ctrl_core_axi_read_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_read_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_read_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_read_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_read_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver_bfm.sv new file mode 100644 index 000000000..e7cfcff1b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_read_out signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_read_out driver through a virtual interface +// handle in the fuse_ctrl_core_axi_read_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_read_out_if. +// +// Input signals from the fuse_ctrl_core_axi_read_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_read_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_out_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_out_macros.svh" + +interface fuse_ctrl_core_axi_read_out_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_read_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_read_out_pkg::fuse_ctrl_core_axi_read_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_read_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_read_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_read_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_out_driver and fuse_ctrl_core_axi_read_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_out_driver_bfm. + `fuse_ctrl_core_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_read_out_driver and fuse_ctrl_core_axi_read_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_out_driver_bfm. + `fuse_ctrl_core_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_read_out_configuration_s fuse_ctrl_core_axi_read_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_read_out_initiator_s fuse_ctrl_core_axi_read_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_read_out_responder_s fuse_ctrl_core_axi_read_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_read_out_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Members within the fuse_ctrl_core_axi_read_out_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + initiator_struct = fuse_ctrl_core_axi_read_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_core_axi_read_out_responder_struct.xyz = arready_i; // + // fuse_ctrl_core_axi_read_out_responder_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_read_out_responder_struct.xyz = rresp_i; // + // fuse_ctrl_core_axi_read_out_responder_struct.xyz = rid_i; // + // fuse_ctrl_core_axi_read_out_responder_struct.xyz = rlast_i; // + // fuse_ctrl_core_axi_read_out_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_read_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_read_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_read_out_initiator_s fuse_ctrl_core_axi_read_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_read_out_responder_s fuse_ctrl_core_axi_read_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_read_out_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Variables within the fuse_ctrl_core_axi_read_out_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= fuse_ctrl_core_axi_read_out_initiator_struct.xyz; // + // rdata_o <= fuse_ctrl_core_axi_read_out_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= fuse_ctrl_core_axi_read_out_initiator_struct.xyz; // + // rid_o <= fuse_ctrl_core_axi_read_out_initiator_struct.xyz; // + // rlast_o <= fuse_ctrl_core_axi_read_out_initiator_struct.xyz; // + // rvalid_o <= fuse_ctrl_core_axi_read_out_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_read_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_read_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_if.sv new file mode 100644 index 000000000..f32c01a5d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_read_out interface signals. +// It is instantiated once per fuse_ctrl_core_axi_read_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_read_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_read_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_read_out_bus.arready), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_bus.rdata), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_bus.rresp), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_bus.rid), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_bus.rlast), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_out_pkg_hdl::*; + +interface fuse_ctrl_core_axi_read_out_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_macros.svh new file mode 100644 index 000000000..2742dc04b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_read_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_read_out_configuration class. +// + `define fuse_ctrl_core_axi_read_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_read_out_configuration_s; + + `define fuse_ctrl_core_axi_read_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_configuration_s to_struct();\ + fuse_ctrl_core_axi_read_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_read_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_read_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_read_out_configuration_s fuse_ctrl_core_axi_read_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_read_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_read_out_transaction class. +// + `define fuse_ctrl_core_axi_read_out_MONITOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } fuse_ctrl_core_axi_read_out_monitor_s; + + `define fuse_ctrl_core_axi_read_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_read_out_monitor_struct = \ + { \ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( fuse_ctrl_core_axi_read_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_read_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_read_out_monitor_s fuse_ctrl_core_axi_read_out_monitor_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = fuse_ctrl_core_axi_read_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_read_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_out_INITIATOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } fuse_ctrl_core_axi_read_out_initiator_s; + + `define fuse_ctrl_core_axi_read_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_read_out_initiator_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( fuse_ctrl_core_axi_read_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_read_out_initiator_s fuse_ctrl_core_axi_read_out_initiator_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = fuse_ctrl_core_axi_read_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_read_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_out_RESPONDER_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } fuse_ctrl_core_axi_read_out_responder_s; + + `define fuse_ctrl_core_axi_read_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_read_out_responder_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( fuse_ctrl_core_axi_read_out_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_read_out_responder_s fuse_ctrl_core_axi_read_out_responder_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = fuse_ctrl_core_axi_read_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor.svh new file mode 100644 index 000000000..192a1829f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_read_out transactions observed by the +// fuse_ctrl_core_axi_read_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_read_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_read_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_read_out_monitor_s fuse_ctrl_core_axi_read_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_read_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor_bfm.sv new file mode 100644 index 000000000..05a619e3c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_read_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_read_out monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_read_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_read_out_if. +// +// Input signals from the fuse_ctrl_core_axi_read_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_read_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_out_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_out_macros.svh" + + +interface fuse_ctrl_core_axi_read_out_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_read_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_read_out_MONITOR_STRUCT + fuse_ctrl_core_axi_read_out_monitor_s fuse_ctrl_core_axi_read_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_read_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_read_out_pkg::fuse_ctrl_core_axi_read_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_read_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_read_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_read_out_configuration_s fuse_ctrl_core_axi_read_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_read_out_monitor_s fuse_ctrl_core_axi_read_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_read_out_monitor_struct.core_arready + // // fuse_ctrl_core_axi_read_out_monitor_struct.core_rdata + // // fuse_ctrl_core_axi_read_out_monitor_struct.core_rresp + // // fuse_ctrl_core_axi_read_out_monitor_struct.core_rid + // // fuse_ctrl_core_axi_read_out_monitor_struct.core_rlast + // // fuse_ctrl_core_axi_read_out_monitor_struct.core_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_read_out_monitor_struct.xyz = arready_i; // + // fuse_ctrl_core_axi_read_out_monitor_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_read_out_monitor_struct.xyz = rresp_i; // + // fuse_ctrl_core_axi_read_out_monitor_struct.xyz = rid_i; // + // fuse_ctrl_core_axi_read_out_monitor_struct.xyz = rlast_i; // + // fuse_ctrl_core_axi_read_out_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_random_sequence.svh new file mode 100644 index 000000000..75644216c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_read_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_read_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_read_out_random_sequence::body()-fuse_ctrl_core_axi_read_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_read_out_driver_bfm via the sequencer and fuse_ctrl_core_axi_read_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_read_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_responder_sequence.svh new file mode 100644 index 000000000..7201178fa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_read_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_sequence_base.svh new file mode 100644 index 000000000..552bdba7d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_out_transaction_req_t; + fuse_ctrl_core_axi_read_out_transaction_req_t req; + typedef fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_out_transaction_rsp_t; + fuse_ctrl_core_axi_read_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_read_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_read_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction.svh new file mode 100644 index 000000000..4654272c3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_read_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_arready ; + logic [DW-1:0] core_rdata ; + axi_pkg::axi_burst_e core_rresp ; + logic [IW-1:0] core_rid ; + logic core_rlast ; + logic core_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_read_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_read_out_monitor and fuse_ctrl_core_axi_read_out_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_MONITOR_STRUCT + fuse_ctrl_core_axi_read_out_monitor_s fuse_ctrl_core_axi_read_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_out_driver and fuse_ctrl_core_axi_read_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_out_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_out_initiator_s fuse_ctrl_core_axi_read_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_read_out_driver and fuse_ctrl_core_axi_read_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_out_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_out_responder_s fuse_ctrl_core_axi_read_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_responder_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_arready:0x%x core_rdata:0x%x core_rresp:0x%x core_rid:0x%x core_rlast:0x%x core_rvalid:0x%x ",core_arready,core_rdata,core_rresp,core_rid,core_rlast,core_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_arready == RHS.core_arready) + &&(this.core_rdata == RHS.core_rdata) + &&(this.core_rresp == RHS.core_rresp) + &&(this.core_rid == RHS.core_rid) + &&(this.core_rlast == RHS.core_rlast) + &&(this.core_rvalid == RHS.core_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_arready = RHS.core_arready; + this.core_rdata = RHS.core_rdata; + this.core_rresp = RHS.core_rresp; + this.core_rid = RHS.core_rid; + this.core_rlast = RHS.core_rlast; + this.core_rvalid = RHS.core_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_read_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_arready,"core_arready"); + $add_attribute(transaction_view_h,core_rdata,"core_rdata"); + $add_attribute(transaction_view_h,core_rresp,"core_rresp"); + $add_attribute(transaction_view_h,core_rid,"core_rid"); + $add_attribute(transaction_view_h,core_rlast,"core_rlast"); + $add_attribute(transaction_view_h,core_rvalid,"core_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction_coverage.svh new file mode 100644 index 000000000..ad53e4910 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_read_out transaction information using +// a covergroup named fuse_ctrl_core_axi_read_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_read_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_arready: coverpoint coverage_trans.core_arready; + core_rdata: coverpoint coverage_trans.core_rdata; + core_rresp: coverpoint coverage_trans.core_rresp; + core_rid: coverpoint coverage_trans.core_rid; + core_rlast: coverpoint coverage_trans.core_rlast; + core_rvalid: coverpoint coverage_trans.core_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_read_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_read_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_read_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/yaml/fuse_ctrl_core_axi_read_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/yaml/fuse_ctrl_core_axi_read_out_interface.yaml new file mode 100644 index 000000000..9e2244bcb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/yaml/fuse_ctrl_core_axi_read_out_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_read_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.project new file mode 100644 index 000000000..574f71c48 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_write_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.svproject new file mode 100644 index 000000000..ed3bfd5bc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/Makefile new file mode 100644 index 000000000..573f6542d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_write_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_write_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f + +fuse_ctrl_core_axi_write_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f + +fuse_ctrl_core_axi_write_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_write_if_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_write_if_pkg +COMP_fuse_ctrl_core_axi_write_if_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_write_if_pkg +COMP_fuse_ctrl_core_axi_write_if_PKG_TGT = $(COMP_fuse_ctrl_core_axi_write_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_write_if_pkg: $(COMP_fuse_ctrl_core_axi_write_if_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_write_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_write_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_write_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_write_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_write_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_if_pkg += -I$(fuse_ctrl_core_axi_write_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_if_pkg += $(fuse_ctrl_core_axi_write_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_write_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_write_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_write_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_write_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/compile.do new file mode 100644 index 000000000..1628622fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_write_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if.compile new file mode 100644 index 000000000..2ee95290b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_write_if_hvl.compile + - fuse_ctrl_core_axi_write_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_bfm.vinfo new file mode 100644 index 000000000..cfb94c619 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_write_if_if.sv +src/fuse_ctrl_core_axi_write_if_driver_bfm.sv +src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_common.compile new file mode 100644 index 000000000..12a17faa4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f new file mode 100644 index 000000000..c5556080a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f new file mode 100644 index 000000000..68b83cc94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f new file mode 100644 index 000000000..3108e102e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hdl.compile new file mode 100644 index 000000000..7185a09f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_write_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_write_if_if.sv + - src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv + - src/fuse_ctrl_core_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hvl.compile new file mode 100644 index 000000000..5096b1689 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_write_if_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.sv new file mode 100644 index 000000000..4fcea64ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_write_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_write_if_macros.svh" + + export fuse_ctrl_core_axi_write_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_write_if_typedefs.svh" + `include "src/fuse_ctrl_core_axi_write_if_transaction.svh" + + `include "src/fuse_ctrl_core_axi_write_if_configuration.svh" + `include "src/fuse_ctrl_core_axi_write_if_driver.svh" + `include "src/fuse_ctrl_core_axi_write_if_monitor.svh" + + `include "src/fuse_ctrl_core_axi_write_if_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_write_if_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_write_if_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_write_if_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_write_if2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_write_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.vinfo new file mode 100644 index 000000000..6bd4a3132 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.sv new file mode 100644 index 000000000..943fb4e9c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_write_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_write_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo new file mode 100644 index 000000000..179238254 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_sve.F new file mode 100644 index 000000000..0168ba713 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if2reg_adapter.svh new file mode 100644 index 000000000..f7dc857b5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_write_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_write_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_write_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_agent.svh new file mode 100644 index 000000000..d991ed3fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_write_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_configuration.svh new file mode 100644 index 000000000..e0d213f15 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_write_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_write_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_write_if_configuration_s fuse_ctrl_core_axi_write_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_write_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_if_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_write_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_write_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_write_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_write_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver.svh new file mode 100644 index 000000000..33543d00f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_write_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_write_if_driver_bfm. +`fuse_ctrl_core_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_if_initiator_s fuse_ctrl_core_axi_write_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_write_if_driver_bfm. +`fuse_ctrl_core_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_if_responder_s fuse_ctrl_core_axi_write_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_write_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_write_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_write_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_write_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver_bfm.sv new file mode 100644 index 000000000..8b920cc3e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver_bfm.sv @@ -0,0 +1,429 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_write_if signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_write_if driver through a virtual interface +// handle in the fuse_ctrl_core_axi_write_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_write_if_if. +// +// Input signals from the fuse_ctrl_core_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_write_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_if_macros.svh" + +interface fuse_ctrl_core_axi_write_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_write_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] awaddr_i; + reg [AW-1:0] awaddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] awburst_o = 'bz; + tri [2:0] awsize_i; + reg [2:0] awsize_o = 'bz; + tri [7:0] awlen_i; + reg [7:0] awlen_o = 'bz; + tri [UW-1:0] awuser_i; + reg [UW-1:0] awuser_o = 'bz; + tri [UW-1:0] awid_i; + reg [UW-1:0] awid_o = 'bz; + tri awlock_i; + reg awlock_o = 'bz; + tri awvalid_i; + reg awvalid_o = 'bz; + tri [DW-1:0] wdata_i; + reg [DW-1:0] wdata_o = 'bz; + tri [DW/8-1:0] wstrb_i; + reg [DW/8-1:0] wstrb_o = 'bz; + tri wvalid_i; + reg wvalid_o = 'bz; + tri wlast_i; + reg wlast_o = 'bz; + tri bready_i; + reg bready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.awaddr = (initiator_responder == INITIATOR) ? awaddr_o : 'bz; + assign awaddr_i = bus.awaddr; + assign bus.awburst = (initiator_responder == INITIATOR) ? awburst_o : 'bz; + assign awburst_i = bus.awburst; + assign bus.awsize = (initiator_responder == INITIATOR) ? awsize_o : 'bz; + assign awsize_i = bus.awsize; + assign bus.awlen = (initiator_responder == INITIATOR) ? awlen_o : 'bz; + assign awlen_i = bus.awlen; + assign bus.awuser = (initiator_responder == INITIATOR) ? awuser_o : 'bz; + assign awuser_i = bus.awuser; + assign bus.awid = (initiator_responder == INITIATOR) ? awid_o : 'bz; + assign awid_i = bus.awid; + assign bus.awlock = (initiator_responder == INITIATOR) ? awlock_o : 'bz; + assign awlock_i = bus.awlock; + assign bus.awvalid = (initiator_responder == INITIATOR) ? awvalid_o : 'bz; + assign awvalid_i = bus.awvalid; + assign bus.wdata = (initiator_responder == INITIATOR) ? wdata_o : 'bz; + assign wdata_i = bus.wdata; + assign bus.wstrb = (initiator_responder == INITIATOR) ? wstrb_o : 'bz; + assign wstrb_i = bus.wstrb; + assign bus.wvalid = (initiator_responder == INITIATOR) ? wvalid_o : 'bz; + assign wvalid_i = bus.wvalid; + assign bus.wlast = (initiator_responder == INITIATOR) ? wlast_o : 'bz; + assign wlast_i = bus.wlast; + assign bus.bready = (initiator_responder == INITIATOR) ? bready_o : 'bz; + assign bready_i = bus.bready; + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_write_if_pkg::fuse_ctrl_core_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_write_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_write_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_write_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_if_driver_bfm. + `fuse_ctrl_core_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_if_driver_bfm. + `fuse_ctrl_core_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + awaddr_o <= 'bz; + awburst_o <= 'bz; + awsize_o <= 'bz; + awlen_o <= 'bz; + awuser_o <= 'bz; + awid_o <= 'bz; + awlock_o <= 'bz; + awvalid_o <= 'bz; + wdata_o <= 'bz; + wstrb_o <= 'bz; + wvalid_o <= 'bz; + wlast_o <= 'bz; + bready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_write_if_configuration_s fuse_ctrl_core_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_write_if_initiator_s fuse_ctrl_core_axi_write_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_write_if_responder_s fuse_ctrl_core_axi_write_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_write_if_initiator_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Members within the fuse_ctrl_core_axi_write_if_responder_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + initiator_struct = fuse_ctrl_core_axi_write_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // awaddr_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [AW-1:0] + // awburst_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // awsize_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [2:0] + // awlen_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [7:0] + // awuser_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [UW-1:0] + // awid_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [UW-1:0] + // awlock_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // + // awvalid_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // + // wdata_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [DW-1:0] + // wstrb_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [DW/8-1:0] + // wvalid_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // + // wlast_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // + // bready_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_write_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_write_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_write_if_initiator_s fuse_ctrl_core_axi_write_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_write_if_responder_s fuse_ctrl_core_axi_write_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_write_if_initiator_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Variables within the fuse_ctrl_core_axi_write_if_responder_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awlock_i; // + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awvalid_i; // + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = wvalid_i; // + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = wlast_i; // + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = bready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_write_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_write_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_if.sv new file mode 100644 index 000000000..b0047fa1f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_if.sv @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_write_if interface signals. +// It is instantiated once per fuse_ctrl_core_axi_write_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_write_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_write_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awaddr), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awburst), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awsize), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awlen), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awuser), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awlock), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.wdata), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.wstrb), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.wvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.wlast), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.bready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_if_pkg_hdl::*; + +interface fuse_ctrl_core_axi_write_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] awaddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst, + inout tri [2:0] awsize, + inout tri [7:0] awlen, + inout tri [UW-1:0] awuser, + inout tri [UW-1:0] awid, + inout tri awlock, + inout tri awvalid, + inout tri [DW-1:0] wdata, + inout tri [DW/8-1:0] wstrb, + inout tri wvalid, + inout tri wlast, + inout tri bready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output awaddr, + output awburst, + output awsize, + output awlen, + output awuser, + output awid, + output awlock, + output awvalid, + output wdata, + output wstrb, + output wvalid, + output wlast, + output bready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_macros.svh new file mode 100644 index 000000000..b8fd5a307 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_macros.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_write_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_write_if_configuration class. +// + `define fuse_ctrl_core_axi_write_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_write_if_configuration_s; + + `define fuse_ctrl_core_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_if_configuration_s to_struct();\ + fuse_ctrl_core_axi_write_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_write_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_write_if_configuration_s fuse_ctrl_core_axi_write_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_write_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_write_if_transaction class. +// + `define fuse_ctrl_core_axi_write_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_if_monitor_s; + + `define fuse_ctrl_core_axi_write_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_if_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_write_if_monitor_struct = \ + { \ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_write_if_monitor_s fuse_ctrl_core_axi_write_if_monitor_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_if_initiator_s; + + `define fuse_ctrl_core_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_if_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_write_if_initiator_struct = \ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_write_if_initiator_s fuse_ctrl_core_axi_write_if_initiator_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_if_responder_s; + + `define fuse_ctrl_core_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_if_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_write_if_responder_struct = \ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_if_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_write_if_responder_s fuse_ctrl_core_axi_write_if_responder_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor.svh new file mode 100644 index 000000000..a0022cc66 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_write_if transactions observed by the +// fuse_ctrl_core_axi_write_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_write_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_write_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_write_if_monitor_s fuse_ctrl_core_axi_write_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_write_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv new file mode 100644 index 000000000..de0093e53 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv @@ -0,0 +1,248 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_write_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_write_if monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_write_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_write_if_if. +// +// Input signals from the fuse_ctrl_core_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_write_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_if_macros.svh" + + +interface fuse_ctrl_core_axi_write_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_write_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_write_if_MONITOR_STRUCT + fuse_ctrl_core_axi_write_if_monitor_s fuse_ctrl_core_axi_write_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_write_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] awaddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + tri [2:0] awsize_i; + tri [7:0] awlen_i; + tri [UW-1:0] awuser_i; + tri [UW-1:0] awid_i; + tri awlock_i; + tri awvalid_i; + tri [DW-1:0] wdata_i; + tri [DW/8-1:0] wstrb_i; + tri wvalid_i; + tri wlast_i; + tri bready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awaddr_i = bus.awaddr; + assign awburst_i = bus.awburst; + assign awsize_i = bus.awsize; + assign awlen_i = bus.awlen; + assign awuser_i = bus.awuser; + assign awid_i = bus.awid; + assign awlock_i = bus.awlock; + assign awvalid_i = bus.awvalid; + assign wdata_i = bus.wdata; + assign wstrb_i = bus.wstrb; + assign wvalid_i = bus.wvalid; + assign wlast_i = bus.wlast; + assign bready_i = bus.bready; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_write_if_pkg::fuse_ctrl_core_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_write_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_write_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_write_if_configuration_s fuse_ctrl_core_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_write_if_monitor_s fuse_ctrl_core_axi_write_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awaddr + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awvalid + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awburst + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awsize + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awlen + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awuser + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awid + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awlock + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_wdata + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_wstrb + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_wvalid + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_wlast + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_bready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awlock_i; // + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awvalid_i; // + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = wvalid_i; // + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = wlast_i; // + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = bready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_random_sequence.svh new file mode 100644 index 000000000..77120c18e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_write_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_write_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_write_if_random_sequence::body()-fuse_ctrl_core_axi_write_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_write_if_driver_bfm via the sequencer and fuse_ctrl_core_axi_write_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_write_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_responder_sequence.svh new file mode 100644 index 000000000..ed1c8c6bd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_write_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_sequence_base.svh new file mode 100644 index 000000000..122b3d543 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_if_transaction_req_t; + fuse_ctrl_core_axi_write_if_transaction_req_t req; + typedef fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_if_transaction_rsp_t; + fuse_ctrl_core_axi_write_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_write_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_write_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction.svh new file mode 100644 index 000000000..3298d1196 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction.svh @@ -0,0 +1,256 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_write_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] core_awaddr ; + logic core_awvalid ; + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + logic [2:0] core_awsize ; + logic [7:0] core_awlen ; + logic [UW-1:0] core_awuser ; + logic [IW-1:0] core_awid ; + logic core_awlock ; + logic [DW-1:0] core_wdata ; + logic [DW/8 - 1:0] core_wstrb ; + logic core_wvalid ; + logic core_wlast ; + logic core_bready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_write_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_write_if_monitor and fuse_ctrl_core_axi_write_if_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_MONITOR_STRUCT + fuse_ctrl_core_axi_write_if_monitor_s fuse_ctrl_core_axi_write_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_if_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_if_initiator_s fuse_ctrl_core_axi_write_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_if_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_if_responder_s fuse_ctrl_core_axi_write_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_if_responder_struct. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awaddr:0x%x core_awvalid:0x%x core_awburst:0x%x core_awsize:0x%x core_awlen:0x%x core_awuser:0x%x core_awid:0x%x core_awlock:0x%x core_wdata:0x%x core_wstrb:0x%x core_wvalid:0x%x core_wlast:0x%x core_bready:0x%x ",core_awaddr,core_awvalid,core_awburst,core_awsize,core_awlen,core_awuser,core_awid,core_awlock,core_wdata,core_wstrb,core_wvalid,core_wlast,core_bready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_wdata == RHS.core_wdata) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awaddr = RHS.core_awaddr; + this.core_awvalid = RHS.core_awvalid; + this.core_awburst = RHS.core_awburst; + this.core_awsize = RHS.core_awsize; + this.core_awlen = RHS.core_awlen; + this.core_awuser = RHS.core_awuser; + this.core_awid = RHS.core_awid; + this.core_awlock = RHS.core_awlock; + this.core_wdata = RHS.core_wdata; + this.core_wstrb = RHS.core_wstrb; + this.core_wvalid = RHS.core_wvalid; + this.core_wlast = RHS.core_wlast; + this.core_bready = RHS.core_bready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_write_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awaddr,"core_awaddr"); + $add_attribute(transaction_view_h,core_awvalid,"core_awvalid"); + $add_attribute(transaction_view_h,core_awburst,"core_awburst"); + $add_attribute(transaction_view_h,core_awsize,"core_awsize"); + $add_attribute(transaction_view_h,core_awlen,"core_awlen"); + $add_attribute(transaction_view_h,core_awuser,"core_awuser"); + $add_attribute(transaction_view_h,core_awid,"core_awid"); + $add_attribute(transaction_view_h,core_awlock,"core_awlock"); + $add_attribute(transaction_view_h,core_wdata,"core_wdata"); + $add_attribute(transaction_view_h,core_wstrb,"core_wstrb"); + $add_attribute(transaction_view_h,core_wvalid,"core_wvalid"); + $add_attribute(transaction_view_h,core_wlast,"core_wlast"); + $add_attribute(transaction_view_h,core_bready,"core_bready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction_coverage.svh new file mode 100644 index 000000000..3f905316d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction_coverage.svh @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_write_if transaction information using +// a covergroup named fuse_ctrl_core_axi_write_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_write_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awaddr: coverpoint coverage_trans.core_awaddr; + core_awvalid: coverpoint coverage_trans.core_awvalid; + core_awburst: coverpoint coverage_trans.core_awburst; + core_awsize: coverpoint coverage_trans.core_awsize; + core_awlen: coverpoint coverage_trans.core_awlen; + core_awuser: coverpoint coverage_trans.core_awuser; + core_awid: coverpoint coverage_trans.core_awid; + core_awlock: coverpoint coverage_trans.core_awlock; + core_wdata: coverpoint coverage_trans.core_wdata; + core_wstrb: coverpoint coverage_trans.core_wstrb; + core_wvalid: coverpoint coverage_trans.core_wvalid; + core_wlast: coverpoint coverage_trans.core_wlast; + core_bready: coverpoint coverage_trans.core_bready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_write_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_write_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_write_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/yaml/fuse_ctrl_core_axi_write_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/yaml/fuse_ctrl_core_axi_write_if_interface.yaml new file mode 100644 index 000000000..242a9b639 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/yaml/fuse_ctrl_core_axi_write_if_interface.yaml @@ -0,0 +1,161 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_write_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: awaddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: awburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: awsize + reset_value: '''bz' + width: '3' + - dir: output + name: awlen + reset_value: '''bz' + width: '8' + - dir: output + name: awuser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awid + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awlock + reset_value: '''bz' + width: '1' + - dir: output + name: awvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wdata + reset_value: '''bz' + width: '[''DW'']' + - dir: output + name: wstrb + reset_value: '''bz' + width: '[''DW/8'']' + - dir: output + name: wvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wlast + reset_value: '''bz' + width: '1' + - dir: output + name: bready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: core_awaddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awuser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wstrb + type: logic [DW/8 - 1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_bready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.project new file mode 100644 index 000000000..f33bf59ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_write_in_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.svproject new file mode 100644 index 000000000..3d3a99047 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/Makefile new file mode 100644 index 000000000..f507d2ab2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_write_in_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_write_in_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hvl.f + +fuse_ctrl_core_axi_write_in_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hdl.f + +fuse_ctrl_core_axi_write_in_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_write_in_if_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_write_in_if_pkg +COMP_fuse_ctrl_core_axi_write_in_if_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_write_in_if_pkg +COMP_fuse_ctrl_core_axi_write_in_if_PKG_TGT = $(COMP_fuse_ctrl_core_axi_write_in_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_write_in_if_pkg: $(COMP_fuse_ctrl_core_axi_write_in_if_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_write_in_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_write_in_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_write_in_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_in_if_pkg += -I$(fuse_ctrl_core_axi_write_in_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_in_if_pkg += $(fuse_ctrl_core_axi_write_in_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_write_in_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_write_in_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_write_in_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_write_in_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/compile.do new file mode 100644 index 000000000..b42d44e51 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_write_in_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if.compile new file mode 100644 index 000000000..a65a64cbf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_write_in_if_hvl.compile + - fuse_ctrl_core_axi_write_in_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_bfm.vinfo new file mode 100644 index 000000000..cd1ff68b7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_write_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_write_in_if_if.sv +src/fuse_ctrl_core_axi_write_in_if_driver_bfm.sv +src/fuse_ctrl_core_axi_write_in_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_common.compile new file mode 100644 index 000000000..be72a0784 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hdl.f new file mode 100644 index 000000000..495338020 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hvl.f new file mode 100644 index 000000000..6bf770355 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_xrtl.f new file mode 100644 index 000000000..fef44745f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hdl.compile new file mode 100644 index 000000000..8a805dd85 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_write_in_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_write_in_if_if.sv + - src/fuse_ctrl_core_axi_write_in_if_monitor_bfm.sv + - src/fuse_ctrl_core_axi_write_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hvl.compile new file mode 100644 index 000000000..55e60dcf3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_write_in_if_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_write_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.sv new file mode 100644 index 000000000..6a3db4ff3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_in_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_write_in_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_write_in_if_macros.svh" + + export fuse_ctrl_core_axi_write_in_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_write_in_if_typedefs.svh" + `include "src/fuse_ctrl_core_axi_write_in_if_transaction.svh" + + `include "src/fuse_ctrl_core_axi_write_in_if_configuration.svh" + `include "src/fuse_ctrl_core_axi_write_in_if_driver.svh" + `include "src/fuse_ctrl_core_axi_write_in_if_monitor.svh" + + `include "src/fuse_ctrl_core_axi_write_in_if_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_write_in_if_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_write_in_if_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_write_in_if_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_write_in_if2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_write_in_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.vinfo new file mode 100644 index 000000000..d62098632 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_write_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_write_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv new file mode 100644 index 000000000..0f242e32a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_in_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_write_in_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_write_in_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.vinfo new file mode 100644 index 000000000..b94d858eb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_sve.F new file mode 100644 index 000000000..0586654a2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if2reg_adapter.svh new file mode 100644 index 000000000..f64280b7a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_write_in_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_write_in_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_write_in_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_agent.svh new file mode 100644 index 000000000..42ed311c4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_write_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_write_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_write_in_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_configuration.svh new file mode 100644 index 000000000..d1e8058cb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_write_in_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_write_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_write_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_write_in_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_write_in_if_configuration_s fuse_ctrl_core_axi_write_in_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_write_in_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_if_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_write_in_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_write_in_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_write_in_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_write_in_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_in_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_write_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver.svh new file mode 100644 index 000000000..1dddeaea6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_write_in_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_write_in_if_driver and fuse_ctrl_core_axi_write_in_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_write_in_if_driver_bfm. +`fuse_ctrl_core_axi_write_in_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_in_if_initiator_s fuse_ctrl_core_axi_write_in_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_write_in_if_driver and fuse_ctrl_core_axi_write_in_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_write_in_if_driver_bfm. +`fuse_ctrl_core_axi_write_in_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_in_if_responder_s fuse_ctrl_core_axi_write_in_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_write_in_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_write_in_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_write_in_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_write_in_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver_bfm.sv new file mode 100644 index 000000000..d54fd8571 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver_bfm.sv @@ -0,0 +1,429 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_write_in_if signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_write_in_if driver through a virtual interface +// handle in the fuse_ctrl_core_axi_write_in_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_write_in_if_if. +// +// Input signals from the fuse_ctrl_core_axi_write_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_write_in_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_in_if_macros.svh" + +interface fuse_ctrl_core_axi_write_in_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_write_in_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_in_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] awaddr_i; + reg [AW-1:0] awaddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] awburst_o = 'bz; + tri [2:0] awsize_i; + reg [2:0] awsize_o = 'bz; + tri [7:0] awlen_i; + reg [7:0] awlen_o = 'bz; + tri [UW-1:0] awuser_i; + reg [UW-1:0] awuser_o = 'bz; + tri [UW-1:0] awid_i; + reg [UW-1:0] awid_o = 'bz; + tri awlock_i; + reg awlock_o = 'bz; + tri awvalid_i; + reg awvalid_o = 'bz; + tri [DW-1:0] wdata_i; + reg [DW-1:0] wdata_o = 'bz; + tri [DW/8-1:0] wstrb_i; + reg [DW/8-1:0] wstrb_o = 'bz; + tri wvalid_i; + reg wvalid_o = 'bz; + tri wlast_i; + reg wlast_o = 'bz; + tri bready_i; + reg bready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.awaddr = (initiator_responder == INITIATOR) ? awaddr_o : 'bz; + assign awaddr_i = bus.awaddr; + assign bus.awburst = (initiator_responder == INITIATOR) ? awburst_o : 'bz; + assign awburst_i = bus.awburst; + assign bus.awsize = (initiator_responder == INITIATOR) ? awsize_o : 'bz; + assign awsize_i = bus.awsize; + assign bus.awlen = (initiator_responder == INITIATOR) ? awlen_o : 'bz; + assign awlen_i = bus.awlen; + assign bus.awuser = (initiator_responder == INITIATOR) ? awuser_o : 'bz; + assign awuser_i = bus.awuser; + assign bus.awid = (initiator_responder == INITIATOR) ? awid_o : 'bz; + assign awid_i = bus.awid; + assign bus.awlock = (initiator_responder == INITIATOR) ? awlock_o : 'bz; + assign awlock_i = bus.awlock; + assign bus.awvalid = (initiator_responder == INITIATOR) ? awvalid_o : 'bz; + assign awvalid_i = bus.awvalid; + assign bus.wdata = (initiator_responder == INITIATOR) ? wdata_o : 'bz; + assign wdata_i = bus.wdata; + assign bus.wstrb = (initiator_responder == INITIATOR) ? wstrb_o : 'bz; + assign wstrb_i = bus.wstrb; + assign bus.wvalid = (initiator_responder == INITIATOR) ? wvalid_o : 'bz; + assign wvalid_i = bus.wvalid; + assign bus.wlast = (initiator_responder == INITIATOR) ? wlast_o : 'bz; + assign wlast_i = bus.wlast; + assign bus.bready = (initiator_responder == INITIATOR) ? bready_o : 'bz; + assign bready_i = bus.bready; + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_write_in_if_pkg::fuse_ctrl_core_axi_write_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_write_in_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_write_in_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_write_in_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_in_if_driver and fuse_ctrl_core_axi_write_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_in_if_driver_bfm. + `fuse_ctrl_core_axi_write_in_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_in_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_write_in_if_driver and fuse_ctrl_core_axi_write_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_in_if_driver_bfm. + `fuse_ctrl_core_axi_write_in_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_in_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + awaddr_o <= 'bz; + awburst_o <= 'bz; + awsize_o <= 'bz; + awlen_o <= 'bz; + awuser_o <= 'bz; + awid_o <= 'bz; + awlock_o <= 'bz; + awvalid_o <= 'bz; + wdata_o <= 'bz; + wstrb_o <= 'bz; + wvalid_o <= 'bz; + wlast_o <= 'bz; + bready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_write_in_if_configuration_s fuse_ctrl_core_axi_write_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_write_in_if_initiator_s fuse_ctrl_core_axi_write_in_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_write_in_if_responder_s fuse_ctrl_core_axi_write_in_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_write_in_if_initiator_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Members within the fuse_ctrl_core_axi_write_in_if_responder_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + initiator_struct = fuse_ctrl_core_axi_write_in_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // awaddr_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [AW-1:0] + // awburst_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // awsize_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [2:0] + // awlen_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [7:0] + // awuser_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [UW-1:0] + // awid_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [UW-1:0] + // awlock_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // + // awvalid_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // + // wdata_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [DW-1:0] + // wstrb_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [DW/8-1:0] + // wvalid_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // + // wlast_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // + // bready_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_write_in_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_write_in_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_write_in_if_initiator_s fuse_ctrl_core_axi_write_in_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_write_in_if_responder_s fuse_ctrl_core_axi_write_in_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_write_in_if_initiator_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Variables within the fuse_ctrl_core_axi_write_in_if_responder_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awlock_i; // + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awvalid_i; // + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = wvalid_i; // + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = wlast_i; // + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = bready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_write_in_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_write_in_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_if.sv new file mode 100644 index 000000000..f8447e714 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_if.sv @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_write_in_if interface signals. +// It is instantiated once per fuse_ctrl_core_axi_write_in_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_write_in_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_write_in_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awaddr), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awburst), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awsize), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awlen), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awuser), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awlock), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.wdata), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.wstrb), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.wvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.wlast), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.bready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_in_if_pkg_hdl::*; + +interface fuse_ctrl_core_axi_write_in_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] awaddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst, + inout tri [2:0] awsize, + inout tri [7:0] awlen, + inout tri [UW-1:0] awuser, + inout tri [UW-1:0] awid, + inout tri awlock, + inout tri awvalid, + inout tri [DW-1:0] wdata, + inout tri [DW/8-1:0] wstrb, + inout tri wvalid, + inout tri wlast, + inout tri bready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output awaddr, + output awburst, + output awsize, + output awlen, + output awuser, + output awid, + output awlock, + output awvalid, + output wdata, + output wstrb, + output wvalid, + output wlast, + output bready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_macros.svh new file mode 100644 index 000000000..8f3e6b640 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_macros.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_write_in_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_write_in_if_configuration class. +// + `define fuse_ctrl_core_axi_write_in_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_write_in_if_configuration_s; + + `define fuse_ctrl_core_axi_write_in_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_if_configuration_s to_struct();\ + fuse_ctrl_core_axi_write_in_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_write_in_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_write_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_write_in_if_configuration_s fuse_ctrl_core_axi_write_in_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_write_in_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_write_in_if_transaction class. +// + `define fuse_ctrl_core_axi_write_in_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_in_if_monitor_s; + + `define fuse_ctrl_core_axi_write_in_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_if_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_write_in_if_monitor_struct = \ + { \ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_in_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_write_in_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_write_in_if_monitor_s fuse_ctrl_core_axi_write_in_if_monitor_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_in_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_write_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_in_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_in_if_initiator_s; + + `define fuse_ctrl_core_axi_write_in_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_if_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_write_in_if_initiator_struct = \ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_in_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_in_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_write_in_if_initiator_s fuse_ctrl_core_axi_write_in_if_initiator_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_in_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_write_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_in_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_in_if_responder_s; + + `define fuse_ctrl_core_axi_write_in_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_if_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_write_in_if_responder_struct = \ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_in_if_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_in_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_write_in_if_responder_s fuse_ctrl_core_axi_write_in_if_responder_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_in_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor.svh new file mode 100644 index 000000000..7689925cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_write_in_if transactions observed by the +// fuse_ctrl_core_axi_write_in_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_write_in_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_write_in_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_write_in_if_monitor_s fuse_ctrl_core_axi_write_in_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_write_in_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor_bfm.sv new file mode 100644 index 000000000..0b3ac9795 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor_bfm.sv @@ -0,0 +1,248 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_write_in_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_write_in_if monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_write_in_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_write_in_if_if. +// +// Input signals from the fuse_ctrl_core_axi_write_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_write_in_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_in_if_macros.svh" + + +interface fuse_ctrl_core_axi_write_in_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_write_in_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_in_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_write_in_if_MONITOR_STRUCT + fuse_ctrl_core_axi_write_in_if_monitor_s fuse_ctrl_core_axi_write_in_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_write_in_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] awaddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + tri [2:0] awsize_i; + tri [7:0] awlen_i; + tri [UW-1:0] awuser_i; + tri [UW-1:0] awid_i; + tri awlock_i; + tri awvalid_i; + tri [DW-1:0] wdata_i; + tri [DW/8-1:0] wstrb_i; + tri wvalid_i; + tri wlast_i; + tri bready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awaddr_i = bus.awaddr; + assign awburst_i = bus.awburst; + assign awsize_i = bus.awsize; + assign awlen_i = bus.awlen; + assign awuser_i = bus.awuser; + assign awid_i = bus.awid; + assign awlock_i = bus.awlock; + assign awvalid_i = bus.awvalid; + assign wdata_i = bus.wdata; + assign wstrb_i = bus.wstrb; + assign wvalid_i = bus.wvalid; + assign wlast_i = bus.wlast; + assign bready_i = bus.bready; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_write_in_if_pkg::fuse_ctrl_core_axi_write_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_write_in_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_write_in_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_write_in_if_configuration_s fuse_ctrl_core_axi_write_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_write_in_if_monitor_s fuse_ctrl_core_axi_write_in_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awaddr + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awvalid + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awburst + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awsize + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awlen + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awuser + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awid + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awlock + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_wdata + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_wstrb + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_wvalid + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_wlast + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_bready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awlock_i; // + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awvalid_i; // + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = wvalid_i; // + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = wlast_i; // + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = bready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_random_sequence.svh new file mode 100644 index 000000000..1be509e5a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_write_in_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_write_in_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_write_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_write_in_if_random_sequence::body()-fuse_ctrl_core_axi_write_in_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_write_in_if_driver_bfm via the sequencer and fuse_ctrl_core_axi_write_in_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_write_in_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_responder_sequence.svh new file mode 100644 index 000000000..4a94ad4e8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_write_in_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_write_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_sequence_base.svh new file mode 100644 index 000000000..ecbf6b8a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_in_if_transaction_req_t; + fuse_ctrl_core_axi_write_in_if_transaction_req_t req; + typedef fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_in_if_transaction_rsp_t; + fuse_ctrl_core_axi_write_in_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_write_in_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_write_in_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction.svh new file mode 100644 index 000000000..efec989b8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction.svh @@ -0,0 +1,256 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_write_in_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] core_awaddr ; + logic core_awvalid ; + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + logic [2:0] core_awsize ; + logic [7:0] core_awlen ; + logic [UW-1:0] core_awuser ; + logic [IW-1:0] core_awid ; + logic core_awlock ; + logic [DW-1:0] core_wdata ; + logic [DW/8 - 1:0] core_wstrb ; + logic core_wvalid ; + logic core_wlast ; + logic core_bready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_write_in_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_write_in_if_monitor and fuse_ctrl_core_axi_write_in_if_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_MONITOR_STRUCT + fuse_ctrl_core_axi_write_in_if_monitor_s fuse_ctrl_core_axi_write_in_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_in_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_if_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_in_if_driver and fuse_ctrl_core_axi_write_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_in_if_initiator_s fuse_ctrl_core_axi_write_in_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_in_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_if_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_write_in_if_driver and fuse_ctrl_core_axi_write_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_in_if_responder_s fuse_ctrl_core_axi_write_in_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_in_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_if_responder_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awaddr:0x%x core_awvalid:0x%x core_awburst:0x%x core_awsize:0x%x core_awlen:0x%x core_awuser:0x%x core_awid:0x%x core_awlock:0x%x core_wdata:0x%x core_wstrb:0x%x core_wvalid:0x%x core_wlast:0x%x core_bready:0x%x ",core_awaddr,core_awvalid,core_awburst,core_awsize,core_awlen,core_awuser,core_awid,core_awlock,core_wdata,core_wstrb,core_wvalid,core_wlast,core_bready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_wdata == RHS.core_wdata) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awaddr = RHS.core_awaddr; + this.core_awvalid = RHS.core_awvalid; + this.core_awburst = RHS.core_awburst; + this.core_awsize = RHS.core_awsize; + this.core_awlen = RHS.core_awlen; + this.core_awuser = RHS.core_awuser; + this.core_awid = RHS.core_awid; + this.core_awlock = RHS.core_awlock; + this.core_wdata = RHS.core_wdata; + this.core_wstrb = RHS.core_wstrb; + this.core_wvalid = RHS.core_wvalid; + this.core_wlast = RHS.core_wlast; + this.core_bready = RHS.core_bready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_write_in_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awaddr,"core_awaddr"); + $add_attribute(transaction_view_h,core_awvalid,"core_awvalid"); + $add_attribute(transaction_view_h,core_awburst,"core_awburst"); + $add_attribute(transaction_view_h,core_awsize,"core_awsize"); + $add_attribute(transaction_view_h,core_awlen,"core_awlen"); + $add_attribute(transaction_view_h,core_awuser,"core_awuser"); + $add_attribute(transaction_view_h,core_awid,"core_awid"); + $add_attribute(transaction_view_h,core_awlock,"core_awlock"); + $add_attribute(transaction_view_h,core_wdata,"core_wdata"); + $add_attribute(transaction_view_h,core_wstrb,"core_wstrb"); + $add_attribute(transaction_view_h,core_wvalid,"core_wvalid"); + $add_attribute(transaction_view_h,core_wlast,"core_wlast"); + $add_attribute(transaction_view_h,core_bready,"core_bready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction_coverage.svh new file mode 100644 index 000000000..fa56703da --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction_coverage.svh @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_write_in_if transaction information using +// a covergroup named fuse_ctrl_core_axi_write_in_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_write_in_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awaddr: coverpoint coverage_trans.core_awaddr; + core_awvalid: coverpoint coverage_trans.core_awvalid; + core_awburst: coverpoint coverage_trans.core_awburst; + core_awsize: coverpoint coverage_trans.core_awsize; + core_awlen: coverpoint coverage_trans.core_awlen; + core_awuser: coverpoint coverage_trans.core_awuser; + core_awid: coverpoint coverage_trans.core_awid; + core_awlock: coverpoint coverage_trans.core_awlock; + core_wdata: coverpoint coverage_trans.core_wdata; + core_wstrb: coverpoint coverage_trans.core_wstrb; + core_wvalid: coverpoint coverage_trans.core_wvalid; + core_wlast: coverpoint coverage_trans.core_wlast; + core_bready: coverpoint coverage_trans.core_bready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_write_in_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_write_in_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_in_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_write_in_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/yaml/fuse_ctrl_core_axi_write_in_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/yaml/fuse_ctrl_core_axi_write_in_if_interface.yaml new file mode 100644 index 000000000..a1fdac635 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/yaml/fuse_ctrl_core_axi_write_in_if_interface.yaml @@ -0,0 +1,161 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_write_in_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: awaddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: awburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: awsize + reset_value: '''bz' + width: '3' + - dir: output + name: awlen + reset_value: '''bz' + width: '8' + - dir: output + name: awuser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awid + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awlock + reset_value: '''bz' + width: '1' + - dir: output + name: awvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wdata + reset_value: '''bz' + width: '[''DW'']' + - dir: output + name: wstrb + reset_value: '''bz' + width: '[''DW/8'']' + - dir: output + name: wvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wlast + reset_value: '''bz' + width: '1' + - dir: output + name: bready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: core_awaddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awuser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wstrb + type: logic [DW/8 - 1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_bready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.project new file mode 100644 index 000000000..b26e81c0e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_write_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.svproject new file mode 100644 index 000000000..be11cb63e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/Makefile new file mode 100644 index 000000000..b9ea6af97 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_write_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_write_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hvl.f + +fuse_ctrl_core_axi_write_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hdl.f + +fuse_ctrl_core_axi_write_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_write_in_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_write_in_pkg +COMP_fuse_ctrl_core_axi_write_in_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_write_in_pkg +COMP_fuse_ctrl_core_axi_write_in_PKG_TGT = $(COMP_fuse_ctrl_core_axi_write_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_write_in_pkg: $(COMP_fuse_ctrl_core_axi_write_in_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_write_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_write_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_write_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_write_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_write_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_in_pkg += -I$(fuse_ctrl_core_axi_write_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_in_pkg += $(fuse_ctrl_core_axi_write_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_write_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_write_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_write_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_write_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/compile.do new file mode 100644 index 000000000..a2f727a47 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_write_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in.compile new file mode 100644 index 000000000..328de1745 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_write_in_hvl.compile + - fuse_ctrl_core_axi_write_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_bfm.vinfo new file mode 100644 index 000000000..8580294a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_write_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_write_in_if.sv +src/fuse_ctrl_core_axi_write_in_driver_bfm.sv +src/fuse_ctrl_core_axi_write_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_common.compile new file mode 100644 index 000000000..ebcb42c3c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_write_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hdl.f new file mode 100644 index 000000000..dcea9f3fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hvl.f new file mode 100644 index 000000000..0aa6cf48f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_xrtl.f new file mode 100644 index 000000000..9729a9fda --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hdl.compile new file mode 100644 index 000000000..b28a2bd69 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_write_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_write_in_if.sv + - src/fuse_ctrl_core_axi_write_in_monitor_bfm.sv + - src/fuse_ctrl_core_axi_write_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hvl.compile new file mode 100644 index 000000000..7801ce4bb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_write_in_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_write_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.sv new file mode 100644 index 000000000..af903832a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_write_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_write_in_macros.svh" + + export fuse_ctrl_core_axi_write_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_write_in_typedefs.svh" + `include "src/fuse_ctrl_core_axi_write_in_transaction.svh" + + `include "src/fuse_ctrl_core_axi_write_in_configuration.svh" + `include "src/fuse_ctrl_core_axi_write_in_driver.svh" + `include "src/fuse_ctrl_core_axi_write_in_monitor.svh" + + `include "src/fuse_ctrl_core_axi_write_in_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_write_in_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_write_in_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_write_in_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_write_in2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_write_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.vinfo new file mode 100644 index 000000000..07d2c9ac8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_write_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_write_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.sv new file mode 100644 index 000000000..48ee66303 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_write_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_write_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.vinfo new file mode 100644 index 000000000..5c56ef576 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_write_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_sve.F new file mode 100644 index 000000000..24bdc9fde --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in2reg_adapter.svh new file mode 100644 index 000000000..0265f70a4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_write_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_write_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_write_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_agent.svh new file mode 100644 index 000000000..2bd552ac5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_write_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_write_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_write_in_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_configuration.svh new file mode 100644 index 000000000..374ebfbd7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_write_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_write_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_write_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_write_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_write_in_configuration_s fuse_ctrl_core_axi_write_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_write_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_write_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_write_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_write_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_write_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_write_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver.svh new file mode 100644 index 000000000..2454403fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_write_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_write_in_driver and fuse_ctrl_core_axi_write_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_write_in_driver_bfm. +`fuse_ctrl_core_axi_write_in_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_in_initiator_s fuse_ctrl_core_axi_write_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_write_in_driver and fuse_ctrl_core_axi_write_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_write_in_driver_bfm. +`fuse_ctrl_core_axi_write_in_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_in_responder_s fuse_ctrl_core_axi_write_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_write_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_write_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_write_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_write_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver_bfm.sv new file mode 100644 index 000000000..934c0f86b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver_bfm.sv @@ -0,0 +1,429 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_write_in signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_write_in driver through a virtual interface +// handle in the fuse_ctrl_core_axi_write_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_write_in_if. +// +// Input signals from the fuse_ctrl_core_axi_write_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_write_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_in_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_in_macros.svh" + +interface fuse_ctrl_core_axi_write_in_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_write_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] awaddr_i; + reg [AW-1:0] awaddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] awburst_o = 'bz; + tri [2:0] awsize_i; + reg [2:0] awsize_o = 'bz; + tri [7:0] awlen_i; + reg [7:0] awlen_o = 'bz; + tri [UW-1:0] awuser_i; + reg [UW-1:0] awuser_o = 'bz; + tri [UW-1:0] awid_i; + reg [UW-1:0] awid_o = 'bz; + tri awlock_i; + reg awlock_o = 'bz; + tri awvalid_i; + reg awvalid_o = 'bz; + tri [DW-1:0] wdata_i; + reg [DW-1:0] wdata_o = 'bz; + tri [DW/8-1:0] wstrb_i; + reg [DW/8-1:0] wstrb_o = 'bz; + tri wvalid_i; + reg wvalid_o = 'bz; + tri wlast_i; + reg wlast_o = 'bz; + tri bready_i; + reg bready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.awaddr = (initiator_responder == INITIATOR) ? awaddr_o : 'bz; + assign awaddr_i = bus.awaddr; + assign bus.awburst = (initiator_responder == INITIATOR) ? awburst_o : 'bz; + assign awburst_i = bus.awburst; + assign bus.awsize = (initiator_responder == INITIATOR) ? awsize_o : 'bz; + assign awsize_i = bus.awsize; + assign bus.awlen = (initiator_responder == INITIATOR) ? awlen_o : 'bz; + assign awlen_i = bus.awlen; + assign bus.awuser = (initiator_responder == INITIATOR) ? awuser_o : 'bz; + assign awuser_i = bus.awuser; + assign bus.awid = (initiator_responder == INITIATOR) ? awid_o : 'bz; + assign awid_i = bus.awid; + assign bus.awlock = (initiator_responder == INITIATOR) ? awlock_o : 'bz; + assign awlock_i = bus.awlock; + assign bus.awvalid = (initiator_responder == INITIATOR) ? awvalid_o : 'bz; + assign awvalid_i = bus.awvalid; + assign bus.wdata = (initiator_responder == INITIATOR) ? wdata_o : 'bz; + assign wdata_i = bus.wdata; + assign bus.wstrb = (initiator_responder == INITIATOR) ? wstrb_o : 'bz; + assign wstrb_i = bus.wstrb; + assign bus.wvalid = (initiator_responder == INITIATOR) ? wvalid_o : 'bz; + assign wvalid_i = bus.wvalid; + assign bus.wlast = (initiator_responder == INITIATOR) ? wlast_o : 'bz; + assign wlast_i = bus.wlast; + assign bus.bready = (initiator_responder == INITIATOR) ? bready_o : 'bz; + assign bready_i = bus.bready; + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_write_in_pkg::fuse_ctrl_core_axi_write_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_write_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_write_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_write_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_in_driver and fuse_ctrl_core_axi_write_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_in_driver_bfm. + `fuse_ctrl_core_axi_write_in_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_write_in_driver and fuse_ctrl_core_axi_write_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_in_driver_bfm. + `fuse_ctrl_core_axi_write_in_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + awaddr_o <= 'bz; + awburst_o <= 'bz; + awsize_o <= 'bz; + awlen_o <= 'bz; + awuser_o <= 'bz; + awid_o <= 'bz; + awlock_o <= 'bz; + awvalid_o <= 'bz; + wdata_o <= 'bz; + wstrb_o <= 'bz; + wvalid_o <= 'bz; + wlast_o <= 'bz; + bready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_write_in_configuration_s fuse_ctrl_core_axi_write_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_write_in_initiator_s fuse_ctrl_core_axi_write_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_write_in_responder_s fuse_ctrl_core_axi_write_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_write_in_initiator_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Members within the fuse_ctrl_core_axi_write_in_responder_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + initiator_struct = fuse_ctrl_core_axi_write_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // awaddr_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [AW-1:0] + // awburst_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // awsize_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [2:0] + // awlen_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [7:0] + // awuser_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [UW-1:0] + // awid_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [UW-1:0] + // awlock_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // + // awvalid_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // + // wdata_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [DW-1:0] + // wstrb_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [DW/8-1:0] + // wvalid_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // + // wlast_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // + // bready_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_write_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_write_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_write_in_initiator_s fuse_ctrl_core_axi_write_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_write_in_responder_s fuse_ctrl_core_axi_write_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_write_in_initiator_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Variables within the fuse_ctrl_core_axi_write_in_responder_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awlock_i; // + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awvalid_i; // + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = wvalid_i; // + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = wlast_i; // + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = bready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_write_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_write_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_if.sv new file mode 100644 index 000000000..5208bddc6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_if.sv @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_write_in interface signals. +// It is instantiated once per fuse_ctrl_core_axi_write_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_write_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_write_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awaddr), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awburst), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awsize), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awlen), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awuser), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awlock), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.wdata), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.wstrb), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.wvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.wlast), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.bready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_in_pkg_hdl::*; + +interface fuse_ctrl_core_axi_write_in_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] awaddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst, + inout tri [2:0] awsize, + inout tri [7:0] awlen, + inout tri [UW-1:0] awuser, + inout tri [UW-1:0] awid, + inout tri awlock, + inout tri awvalid, + inout tri [DW-1:0] wdata, + inout tri [DW/8-1:0] wstrb, + inout tri wvalid, + inout tri wlast, + inout tri bready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output awaddr, + output awburst, + output awsize, + output awlen, + output awuser, + output awid, + output awlock, + output awvalid, + output wdata, + output wstrb, + output wvalid, + output wlast, + output bready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_macros.svh new file mode 100644 index 000000000..c925c1523 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_macros.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_write_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_write_in_configuration class. +// + `define fuse_ctrl_core_axi_write_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_write_in_configuration_s; + + `define fuse_ctrl_core_axi_write_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_configuration_s to_struct();\ + fuse_ctrl_core_axi_write_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_write_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_write_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_write_in_configuration_s fuse_ctrl_core_axi_write_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_write_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_write_in_transaction class. +// + `define fuse_ctrl_core_axi_write_in_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_in_monitor_s; + + `define fuse_ctrl_core_axi_write_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_write_in_monitor_struct = \ + { \ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_write_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_write_in_monitor_s fuse_ctrl_core_axi_write_in_monitor_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_write_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_in_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_in_initiator_s; + + `define fuse_ctrl_core_axi_write_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_write_in_initiator_struct = \ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_write_in_initiator_s fuse_ctrl_core_axi_write_in_initiator_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_write_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_in_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_in_responder_s; + + `define fuse_ctrl_core_axi_write_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_write_in_responder_struct = \ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_in_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_write_in_responder_s fuse_ctrl_core_axi_write_in_responder_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor.svh new file mode 100644 index 000000000..b17587874 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_write_in transactions observed by the +// fuse_ctrl_core_axi_write_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_write_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_write_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_write_in_monitor_s fuse_ctrl_core_axi_write_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_write_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor_bfm.sv new file mode 100644 index 000000000..f25132158 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor_bfm.sv @@ -0,0 +1,248 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_write_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_write_in monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_write_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_write_in_if. +// +// Input signals from the fuse_ctrl_core_axi_write_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_write_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_in_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_in_macros.svh" + + +interface fuse_ctrl_core_axi_write_in_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_write_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_write_in_MONITOR_STRUCT + fuse_ctrl_core_axi_write_in_monitor_s fuse_ctrl_core_axi_write_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_write_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] awaddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + tri [2:0] awsize_i; + tri [7:0] awlen_i; + tri [UW-1:0] awuser_i; + tri [UW-1:0] awid_i; + tri awlock_i; + tri awvalid_i; + tri [DW-1:0] wdata_i; + tri [DW/8-1:0] wstrb_i; + tri wvalid_i; + tri wlast_i; + tri bready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awaddr_i = bus.awaddr; + assign awburst_i = bus.awburst; + assign awsize_i = bus.awsize; + assign awlen_i = bus.awlen; + assign awuser_i = bus.awuser; + assign awid_i = bus.awid; + assign awlock_i = bus.awlock; + assign awvalid_i = bus.awvalid; + assign wdata_i = bus.wdata; + assign wstrb_i = bus.wstrb; + assign wvalid_i = bus.wvalid; + assign wlast_i = bus.wlast; + assign bready_i = bus.bready; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_write_in_pkg::fuse_ctrl_core_axi_write_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_write_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_write_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_write_in_configuration_s fuse_ctrl_core_axi_write_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_write_in_monitor_s fuse_ctrl_core_axi_write_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awaddr + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awvalid + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awburst + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awsize + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awlen + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awuser + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awid + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awlock + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_wdata + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_wstrb + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_wvalid + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_wlast + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_bready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awlock_i; // + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awvalid_i; // + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = wvalid_i; // + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = wlast_i; // + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = bready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_random_sequence.svh new file mode 100644 index 000000000..fd2c3c939 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_write_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_write_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_write_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_write_in_random_sequence::body()-fuse_ctrl_core_axi_write_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_write_in_driver_bfm via the sequencer and fuse_ctrl_core_axi_write_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_write_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_responder_sequence.svh new file mode 100644 index 000000000..6305f4d91 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_write_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_write_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_sequence_base.svh new file mode 100644 index 000000000..69be97677 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_in_transaction_req_t; + fuse_ctrl_core_axi_write_in_transaction_req_t req; + typedef fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_in_transaction_rsp_t; + fuse_ctrl_core_axi_write_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_write_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_write_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction.svh new file mode 100644 index 000000000..08595f6e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction.svh @@ -0,0 +1,256 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_write_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] core_awaddr ; + logic core_awvalid ; + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + logic [2:0] core_awsize ; + logic [7:0] core_awlen ; + logic [UW-1:0] core_awuser ; + logic [IW-1:0] core_awid ; + logic core_awlock ; + logic [DW-1:0] core_wdata ; + logic [DW/8 - 1:0] core_wstrb ; + logic core_wvalid ; + logic core_wlast ; + logic core_bready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_write_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_write_in_monitor and fuse_ctrl_core_axi_write_in_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_MONITOR_STRUCT + fuse_ctrl_core_axi_write_in_monitor_s fuse_ctrl_core_axi_write_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_in_driver and fuse_ctrl_core_axi_write_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_in_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_in_initiator_s fuse_ctrl_core_axi_write_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_write_in_driver and fuse_ctrl_core_axi_write_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_in_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_in_responder_s fuse_ctrl_core_axi_write_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_responder_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awaddr:0x%x core_awvalid:0x%x core_awburst:0x%x core_awsize:0x%x core_awlen:0x%x core_awuser:0x%x core_awid:0x%x core_awlock:0x%x core_wdata:0x%x core_wstrb:0x%x core_wvalid:0x%x core_wlast:0x%x core_bready:0x%x ",core_awaddr,core_awvalid,core_awburst,core_awsize,core_awlen,core_awuser,core_awid,core_awlock,core_wdata,core_wstrb,core_wvalid,core_wlast,core_bready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_wdata == RHS.core_wdata) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awaddr = RHS.core_awaddr; + this.core_awvalid = RHS.core_awvalid; + this.core_awburst = RHS.core_awburst; + this.core_awsize = RHS.core_awsize; + this.core_awlen = RHS.core_awlen; + this.core_awuser = RHS.core_awuser; + this.core_awid = RHS.core_awid; + this.core_awlock = RHS.core_awlock; + this.core_wdata = RHS.core_wdata; + this.core_wstrb = RHS.core_wstrb; + this.core_wvalid = RHS.core_wvalid; + this.core_wlast = RHS.core_wlast; + this.core_bready = RHS.core_bready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_write_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awaddr,"core_awaddr"); + $add_attribute(transaction_view_h,core_awvalid,"core_awvalid"); + $add_attribute(transaction_view_h,core_awburst,"core_awburst"); + $add_attribute(transaction_view_h,core_awsize,"core_awsize"); + $add_attribute(transaction_view_h,core_awlen,"core_awlen"); + $add_attribute(transaction_view_h,core_awuser,"core_awuser"); + $add_attribute(transaction_view_h,core_awid,"core_awid"); + $add_attribute(transaction_view_h,core_awlock,"core_awlock"); + $add_attribute(transaction_view_h,core_wdata,"core_wdata"); + $add_attribute(transaction_view_h,core_wstrb,"core_wstrb"); + $add_attribute(transaction_view_h,core_wvalid,"core_wvalid"); + $add_attribute(transaction_view_h,core_wlast,"core_wlast"); + $add_attribute(transaction_view_h,core_bready,"core_bready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction_coverage.svh new file mode 100644 index 000000000..8fd417418 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction_coverage.svh @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_write_in transaction information using +// a covergroup named fuse_ctrl_core_axi_write_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_write_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awaddr: coverpoint coverage_trans.core_awaddr; + core_awvalid: coverpoint coverage_trans.core_awvalid; + core_awburst: coverpoint coverage_trans.core_awburst; + core_awsize: coverpoint coverage_trans.core_awsize; + core_awlen: coverpoint coverage_trans.core_awlen; + core_awuser: coverpoint coverage_trans.core_awuser; + core_awid: coverpoint coverage_trans.core_awid; + core_awlock: coverpoint coverage_trans.core_awlock; + core_wdata: coverpoint coverage_trans.core_wdata; + core_wstrb: coverpoint coverage_trans.core_wstrb; + core_wvalid: coverpoint coverage_trans.core_wvalid; + core_wlast: coverpoint coverage_trans.core_wlast; + core_bready: coverpoint coverage_trans.core_bready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_write_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_write_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_write_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/yaml/fuse_ctrl_core_axi_write_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/yaml/fuse_ctrl_core_axi_write_in_interface.yaml new file mode 100644 index 000000000..9882e7c50 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/yaml/fuse_ctrl_core_axi_write_in_interface.yaml @@ -0,0 +1,161 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_write_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: awaddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: awburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: awsize + reset_value: '''bz' + width: '3' + - dir: output + name: awlen + reset_value: '''bz' + width: '8' + - dir: output + name: awuser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awid + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awlock + reset_value: '''bz' + width: '1' + - dir: output + name: awvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wdata + reset_value: '''bz' + width: '[''DW'']' + - dir: output + name: wstrb + reset_value: '''bz' + width: '[''DW/8'']' + - dir: output + name: wvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wlast + reset_value: '''bz' + width: '1' + - dir: output + name: bready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: core_awaddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awuser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wstrb + type: logic [DW/8 - 1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_bready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.project new file mode 100644 index 000000000..f8447cc2e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_write_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.svproject new file mode 100644 index 000000000..4af4ad18e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/Makefile new file mode 100644 index 000000000..9c70bece5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_write_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_write_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hvl.f + +fuse_ctrl_core_axi_write_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hdl.f + +fuse_ctrl_core_axi_write_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_write_out_if_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_write_out_if_pkg +COMP_fuse_ctrl_core_axi_write_out_if_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_write_out_if_pkg +COMP_fuse_ctrl_core_axi_write_out_if_PKG_TGT = $(COMP_fuse_ctrl_core_axi_write_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_write_out_if_pkg: $(COMP_fuse_ctrl_core_axi_write_out_if_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_write_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_write_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_write_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_out_if_pkg += -I$(fuse_ctrl_core_axi_write_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_out_if_pkg += $(fuse_ctrl_core_axi_write_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_write_out_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_write_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_write_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_write_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/compile.do new file mode 100644 index 000000000..a150aebd7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_write_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if.compile new file mode 100644 index 000000000..019584b20 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_write_out_if_hvl.compile + - fuse_ctrl_core_axi_write_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_bfm.vinfo new file mode 100644 index 000000000..3e0319cf4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_write_out_if_if.sv +src/fuse_ctrl_core_axi_write_out_if_driver_bfm.sv +src/fuse_ctrl_core_axi_write_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_common.compile new file mode 100644 index 000000000..7e6930876 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hdl.f new file mode 100644 index 000000000..02ef8e42c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hvl.f new file mode 100644 index 000000000..6c0fbb4c3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_xrtl.f new file mode 100644 index 000000000..d0c02e170 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hdl.compile new file mode 100644 index 000000000..9deb2f5cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_write_out_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_write_out_if_if.sv + - src/fuse_ctrl_core_axi_write_out_if_monitor_bfm.sv + - src/fuse_ctrl_core_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hvl.compile new file mode 100644 index 000000000..eeb57fb37 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_write_out_if_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.sv new file mode 100644 index 000000000..049a79ab9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_write_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_write_out_if_macros.svh" + + export fuse_ctrl_core_axi_write_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_write_out_if_typedefs.svh" + `include "src/fuse_ctrl_core_axi_write_out_if_transaction.svh" + + `include "src/fuse_ctrl_core_axi_write_out_if_configuration.svh" + `include "src/fuse_ctrl_core_axi_write_out_if_driver.svh" + `include "src/fuse_ctrl_core_axi_write_out_if_monitor.svh" + + `include "src/fuse_ctrl_core_axi_write_out_if_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_write_out_if_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_write_out_if_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_write_out_if_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_write_out_if2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_write_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.vinfo new file mode 100644 index 000000000..94eb5cdef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv new file mode 100644 index 000000000..ca03d31ac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_write_out_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_write_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..2ef500d08 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_sve.F new file mode 100644 index 000000000..ad8763dab --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if2reg_adapter.svh new file mode 100644 index 000000000..a62903564 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_write_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_write_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_write_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_agent.svh new file mode 100644 index 000000000..8cbb38cfe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_write_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_configuration.svh new file mode 100644 index 000000000..6310b6980 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_write_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_write_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_write_out_if_configuration_s fuse_ctrl_core_axi_write_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_write_out_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_if_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_write_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_write_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_write_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_write_out_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver.svh new file mode 100644 index 000000000..700a867c2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_write_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_write_out_if_driver and fuse_ctrl_core_axi_write_out_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_write_out_if_driver_bfm. +`fuse_ctrl_core_axi_write_out_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_out_if_initiator_s fuse_ctrl_core_axi_write_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_write_out_if_driver and fuse_ctrl_core_axi_write_out_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_write_out_if_driver_bfm. +`fuse_ctrl_core_axi_write_out_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_out_if_responder_s fuse_ctrl_core_axi_write_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_write_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_write_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_write_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_write_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver_bfm.sv new file mode 100644 index 000000000..546de39a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_write_out_if signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_write_out_if driver through a virtual interface +// handle in the fuse_ctrl_core_axi_write_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_write_out_if_if. +// +// Input signals from the fuse_ctrl_core_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_write_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_out_if_macros.svh" + +interface fuse_ctrl_core_axi_write_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_write_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_write_out_if_pkg::fuse_ctrl_core_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_write_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_write_out_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_write_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_out_if_driver and fuse_ctrl_core_axi_write_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_out_if_driver_bfm. + `fuse_ctrl_core_axi_write_out_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_write_out_if_driver and fuse_ctrl_core_axi_write_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_out_if_driver_bfm. + `fuse_ctrl_core_axi_write_out_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_write_out_if_configuration_s fuse_ctrl_core_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_write_out_if_initiator_s fuse_ctrl_core_axi_write_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_write_out_if_responder_s fuse_ctrl_core_axi_write_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_write_out_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Members within the fuse_ctrl_core_axi_write_out_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + initiator_struct = fuse_ctrl_core_axi_write_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_core_axi_write_out_if_responder_struct.xyz = awready_i; // + // fuse_ctrl_core_axi_write_out_if_responder_struct.xyz = wready_i; // + // fuse_ctrl_core_axi_write_out_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_out_if_responder_struct.xyz = bid_i; // + // fuse_ctrl_core_axi_write_out_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_write_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_write_out_if_initiator_s fuse_ctrl_core_axi_write_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_write_out_if_responder_s fuse_ctrl_core_axi_write_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_write_out_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Variables within the fuse_ctrl_core_axi_write_out_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= fuse_ctrl_core_axi_write_out_if_initiator_struct.xyz; // + // wready_o <= fuse_ctrl_core_axi_write_out_if_initiator_struct.xyz; // + // bresp_o <= fuse_ctrl_core_axi_write_out_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= fuse_ctrl_core_axi_write_out_if_initiator_struct.xyz; // + // bvalid_o <= fuse_ctrl_core_axi_write_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_write_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_if.sv new file mode 100644 index 000000000..2be6f57ed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_write_out_if interface signals. +// It is instantiated once per fuse_ctrl_core_axi_write_out_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_write_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_write_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_write_out_if_bus.awready), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_if_bus.wready), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_if_bus.bresp), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_if_bus.bid), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_out_if_pkg_hdl::*; + +interface fuse_ctrl_core_axi_write_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_macros.svh new file mode 100644 index 000000000..0e6c3c0de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_write_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_write_out_if_configuration class. +// + `define fuse_ctrl_core_axi_write_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_write_out_if_configuration_s; + + `define fuse_ctrl_core_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_if_configuration_s to_struct();\ + fuse_ctrl_core_axi_write_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_write_out_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_write_out_if_configuration_s fuse_ctrl_core_axi_write_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_write_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_write_out_if_transaction class. +// + `define fuse_ctrl_core_axi_write_out_if_MONITOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_ctrl_core_axi_write_out_if_monitor_s; + + `define fuse_ctrl_core_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_if_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_write_out_if_monitor_struct = \ + { \ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_ctrl_core_axi_write_out_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_write_out_if_monitor_s fuse_ctrl_core_axi_write_out_if_monitor_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_ctrl_core_axi_write_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_ctrl_core_axi_write_out_if_initiator_s; + + `define fuse_ctrl_core_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_if_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_write_out_if_initiator_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_ctrl_core_axi_write_out_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_write_out_if_initiator_s fuse_ctrl_core_axi_write_out_if_initiator_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_ctrl_core_axi_write_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_ctrl_core_axi_write_out_if_responder_s; + + `define fuse_ctrl_core_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_if_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_write_out_if_responder_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_ctrl_core_axi_write_out_if_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_write_out_if_responder_s fuse_ctrl_core_axi_write_out_if_responder_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_ctrl_core_axi_write_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor.svh new file mode 100644 index 000000000..b63c646f1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_write_out_if transactions observed by the +// fuse_ctrl_core_axi_write_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_write_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_write_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_write_out_if_monitor_s fuse_ctrl_core_axi_write_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_write_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor_bfm.sv new file mode 100644 index 000000000..f78f26207 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_write_out_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_write_out_if monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_write_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_write_out_if_if. +// +// Input signals from the fuse_ctrl_core_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_write_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_out_if_macros.svh" + + +interface fuse_ctrl_core_axi_write_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_write_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_write_out_if_MONITOR_STRUCT + fuse_ctrl_core_axi_write_out_if_monitor_s fuse_ctrl_core_axi_write_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_write_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_write_out_if_pkg::fuse_ctrl_core_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_write_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_write_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_write_out_if_configuration_s fuse_ctrl_core_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_write_out_if_monitor_s fuse_ctrl_core_axi_write_out_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_write_out_if_monitor_struct.core_awready + // // fuse_ctrl_core_axi_write_out_if_monitor_struct.core_wready + // // fuse_ctrl_core_axi_write_out_if_monitor_struct.core_bresp + // // fuse_ctrl_core_axi_write_out_if_monitor_struct.core_bid + // // fuse_ctrl_core_axi_write_out_if_monitor_struct.core_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_write_out_if_monitor_struct.xyz = awready_i; // + // fuse_ctrl_core_axi_write_out_if_monitor_struct.xyz = wready_i; // + // fuse_ctrl_core_axi_write_out_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_out_if_monitor_struct.xyz = bid_i; // + // fuse_ctrl_core_axi_write_out_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_random_sequence.svh new file mode 100644 index 000000000..03119f4d4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_write_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_write_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_write_out_if_random_sequence::body()-fuse_ctrl_core_axi_write_out_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_write_out_if_driver_bfm via the sequencer and fuse_ctrl_core_axi_write_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_write_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_responder_sequence.svh new file mode 100644 index 000000000..f525d3d69 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_write_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_sequence_base.svh new file mode 100644 index 000000000..7f3957f54 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_out_if_transaction_req_t; + fuse_ctrl_core_axi_write_out_if_transaction_req_t req; + typedef fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_out_if_transaction_rsp_t; + fuse_ctrl_core_axi_write_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_write_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_write_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction.svh new file mode 100644 index 000000000..9c52f7f9b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_write_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_awready ; + logic core_wready ; + axi_pkg::axi_burst_e core_bresp ; + logic core_bid ; + logic core_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_write_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_write_out_if_monitor and fuse_ctrl_core_axi_write_out_if_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_MONITOR_STRUCT + fuse_ctrl_core_axi_write_out_if_monitor_s fuse_ctrl_core_axi_write_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_out_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_if_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_out_if_driver and fuse_ctrl_core_axi_write_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_out_if_initiator_s fuse_ctrl_core_axi_write_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_out_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_if_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_write_out_if_driver and fuse_ctrl_core_axi_write_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_out_if_responder_s fuse_ctrl_core_axi_write_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_out_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_if_responder_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awready:0x%x core_wready:0x%x core_bresp:0x%x core_bid:0x%x core_bvalid:0x%x ",core_awready,core_wready,core_bresp,core_bid,core_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_awready == RHS.core_awready) + &&(this.core_wready == RHS.core_wready) + &&(this.core_bresp == RHS.core_bresp) + &&(this.core_bid == RHS.core_bid) + &&(this.core_bvalid == RHS.core_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awready = RHS.core_awready; + this.core_wready = RHS.core_wready; + this.core_bresp = RHS.core_bresp; + this.core_bid = RHS.core_bid; + this.core_bvalid = RHS.core_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_write_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awready,"core_awready"); + $add_attribute(transaction_view_h,core_wready,"core_wready"); + $add_attribute(transaction_view_h,core_bresp,"core_bresp"); + $add_attribute(transaction_view_h,core_bid,"core_bid"); + $add_attribute(transaction_view_h,core_bvalid,"core_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction_coverage.svh new file mode 100644 index 000000000..e83ee969f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_write_out_if transaction information using +// a covergroup named fuse_ctrl_core_axi_write_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_write_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awready: coverpoint coverage_trans.core_awready; + core_wready: coverpoint coverage_trans.core_wready; + core_bresp: coverpoint coverage_trans.core_bresp; + core_bid: coverpoint coverage_trans.core_bid; + core_bvalid: coverpoint coverage_trans.core_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_write_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_write_out_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_write_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/yaml/fuse_ctrl_core_axi_write_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/yaml/fuse_ctrl_core_axi_write_out_if_interface.yaml new file mode 100644 index 000000000..a4ad2e78b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/yaml/fuse_ctrl_core_axi_write_out_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_write_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.project new file mode 100644 index 000000000..673a4105f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_write_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.svproject new file mode 100644 index 000000000..e0ccd6023 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/Makefile new file mode 100644 index 000000000..b885f66ae --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_write_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_write_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hvl.f + +fuse_ctrl_core_axi_write_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hdl.f + +fuse_ctrl_core_axi_write_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_write_out_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_write_out_pkg +COMP_fuse_ctrl_core_axi_write_out_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_write_out_pkg +COMP_fuse_ctrl_core_axi_write_out_PKG_TGT = $(COMP_fuse_ctrl_core_axi_write_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_write_out_pkg: $(COMP_fuse_ctrl_core_axi_write_out_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_write_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_write_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_write_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_write_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_write_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_out_pkg += -I$(fuse_ctrl_core_axi_write_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_out_pkg += $(fuse_ctrl_core_axi_write_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_write_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_write_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_write_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_write_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/compile.do new file mode 100644 index 000000000..dd7c8dfdc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_write_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out.compile new file mode 100644 index 000000000..fc356ade3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_write_out_hvl.compile + - fuse_ctrl_core_axi_write_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_bfm.vinfo new file mode 100644 index 000000000..4acbc3dcb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_write_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_write_out_if.sv +src/fuse_ctrl_core_axi_write_out_driver_bfm.sv +src/fuse_ctrl_core_axi_write_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_common.compile new file mode 100644 index 000000000..ab99fa6e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_write_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hdl.f new file mode 100644 index 000000000..354fe2499 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hvl.f new file mode 100644 index 000000000..d14e3d6c5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_xrtl.f new file mode 100644 index 000000000..9aecc8885 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hdl.compile new file mode 100644 index 000000000..d220bb845 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_write_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_write_out_if.sv + - src/fuse_ctrl_core_axi_write_out_monitor_bfm.sv + - src/fuse_ctrl_core_axi_write_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hvl.compile new file mode 100644 index 000000000..2d0aa9807 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_write_out_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_write_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.sv new file mode 100644 index 000000000..4e525f12e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_write_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_write_out_macros.svh" + + export fuse_ctrl_core_axi_write_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_write_out_typedefs.svh" + `include "src/fuse_ctrl_core_axi_write_out_transaction.svh" + + `include "src/fuse_ctrl_core_axi_write_out_configuration.svh" + `include "src/fuse_ctrl_core_axi_write_out_driver.svh" + `include "src/fuse_ctrl_core_axi_write_out_monitor.svh" + + `include "src/fuse_ctrl_core_axi_write_out_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_write_out_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_write_out_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_write_out_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_write_out2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_write_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.vinfo new file mode 100644 index 000000000..6c1d3851b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_write_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_write_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.sv new file mode 100644 index 000000000..9bdd4e613 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_write_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_write_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.vinfo new file mode 100644 index 000000000..68e75c652 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_write_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_sve.F new file mode 100644 index 000000000..dd141cca6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out2reg_adapter.svh new file mode 100644 index 000000000..7f7d115ab --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_write_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_write_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_write_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_agent.svh new file mode 100644 index 000000000..f35b0c2f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_write_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_write_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_write_out_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_configuration.svh new file mode 100644 index 000000000..e6dac332a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_write_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_write_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_write_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_write_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_write_out_configuration_s fuse_ctrl_core_axi_write_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_write_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_write_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_write_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_write_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_write_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_write_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver.svh new file mode 100644 index 000000000..18a3dac72 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_write_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_write_out_driver and fuse_ctrl_core_axi_write_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_write_out_driver_bfm. +`fuse_ctrl_core_axi_write_out_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_out_initiator_s fuse_ctrl_core_axi_write_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_write_out_driver and fuse_ctrl_core_axi_write_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_write_out_driver_bfm. +`fuse_ctrl_core_axi_write_out_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_out_responder_s fuse_ctrl_core_axi_write_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_write_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_write_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_write_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_write_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver_bfm.sv new file mode 100644 index 000000000..ee3c4fb40 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_write_out signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_write_out driver through a virtual interface +// handle in the fuse_ctrl_core_axi_write_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_write_out_if. +// +// Input signals from the fuse_ctrl_core_axi_write_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_write_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_out_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_out_macros.svh" + +interface fuse_ctrl_core_axi_write_out_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_write_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_write_out_pkg::fuse_ctrl_core_axi_write_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_write_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_write_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_write_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_out_driver and fuse_ctrl_core_axi_write_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_out_driver_bfm. + `fuse_ctrl_core_axi_write_out_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_write_out_driver and fuse_ctrl_core_axi_write_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_out_driver_bfm. + `fuse_ctrl_core_axi_write_out_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_write_out_configuration_s fuse_ctrl_core_axi_write_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_write_out_initiator_s fuse_ctrl_core_axi_write_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_write_out_responder_s fuse_ctrl_core_axi_write_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_write_out_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Members within the fuse_ctrl_core_axi_write_out_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + initiator_struct = fuse_ctrl_core_axi_write_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_core_axi_write_out_responder_struct.xyz = awready_i; // + // fuse_ctrl_core_axi_write_out_responder_struct.xyz = wready_i; // + // fuse_ctrl_core_axi_write_out_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_out_responder_struct.xyz = bid_i; // + // fuse_ctrl_core_axi_write_out_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_write_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_write_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_write_out_initiator_s fuse_ctrl_core_axi_write_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_write_out_responder_s fuse_ctrl_core_axi_write_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_write_out_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Variables within the fuse_ctrl_core_axi_write_out_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= fuse_ctrl_core_axi_write_out_initiator_struct.xyz; // + // wready_o <= fuse_ctrl_core_axi_write_out_initiator_struct.xyz; // + // bresp_o <= fuse_ctrl_core_axi_write_out_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= fuse_ctrl_core_axi_write_out_initiator_struct.xyz; // + // bvalid_o <= fuse_ctrl_core_axi_write_out_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_write_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_write_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_if.sv new file mode 100644 index 000000000..a5e2f1cb4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_write_out interface signals. +// It is instantiated once per fuse_ctrl_core_axi_write_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_write_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_write_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_write_out_bus.awready), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_bus.wready), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_bus.bresp), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_bus.bid), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_out_pkg_hdl::*; + +interface fuse_ctrl_core_axi_write_out_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_macros.svh new file mode 100644 index 000000000..5f57ee1cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_write_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_write_out_configuration class. +// + `define fuse_ctrl_core_axi_write_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_write_out_configuration_s; + + `define fuse_ctrl_core_axi_write_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_configuration_s to_struct();\ + fuse_ctrl_core_axi_write_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_write_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_write_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_write_out_configuration_s fuse_ctrl_core_axi_write_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_write_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_write_out_transaction class. +// + `define fuse_ctrl_core_axi_write_out_MONITOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_ctrl_core_axi_write_out_monitor_s; + + `define fuse_ctrl_core_axi_write_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_write_out_monitor_struct = \ + { \ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_ctrl_core_axi_write_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_write_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_write_out_monitor_s fuse_ctrl_core_axi_write_out_monitor_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_ctrl_core_axi_write_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_write_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_out_INITIATOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_ctrl_core_axi_write_out_initiator_s; + + `define fuse_ctrl_core_axi_write_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_write_out_initiator_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_ctrl_core_axi_write_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_write_out_initiator_s fuse_ctrl_core_axi_write_out_initiator_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_ctrl_core_axi_write_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_write_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_out_RESPONDER_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_ctrl_core_axi_write_out_responder_s; + + `define fuse_ctrl_core_axi_write_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_write_out_responder_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_ctrl_core_axi_write_out_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_write_out_responder_s fuse_ctrl_core_axi_write_out_responder_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_ctrl_core_axi_write_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor.svh new file mode 100644 index 000000000..d540c2d82 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_write_out transactions observed by the +// fuse_ctrl_core_axi_write_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_write_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_write_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_write_out_monitor_s fuse_ctrl_core_axi_write_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_write_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor_bfm.sv new file mode 100644 index 000000000..d39a378de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_write_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_write_out monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_write_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_write_out_if. +// +// Input signals from the fuse_ctrl_core_axi_write_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_write_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_out_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_out_macros.svh" + + +interface fuse_ctrl_core_axi_write_out_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_write_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_write_out_MONITOR_STRUCT + fuse_ctrl_core_axi_write_out_monitor_s fuse_ctrl_core_axi_write_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_write_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_write_out_pkg::fuse_ctrl_core_axi_write_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_write_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_write_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_write_out_configuration_s fuse_ctrl_core_axi_write_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_write_out_monitor_s fuse_ctrl_core_axi_write_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_write_out_monitor_struct.core_awready + // // fuse_ctrl_core_axi_write_out_monitor_struct.core_wready + // // fuse_ctrl_core_axi_write_out_monitor_struct.core_bresp + // // fuse_ctrl_core_axi_write_out_monitor_struct.core_bid + // // fuse_ctrl_core_axi_write_out_monitor_struct.core_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_write_out_monitor_struct.xyz = awready_i; // + // fuse_ctrl_core_axi_write_out_monitor_struct.xyz = wready_i; // + // fuse_ctrl_core_axi_write_out_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_out_monitor_struct.xyz = bid_i; // + // fuse_ctrl_core_axi_write_out_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_random_sequence.svh new file mode 100644 index 000000000..490a94fe3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_write_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_write_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_write_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_write_out_random_sequence::body()-fuse_ctrl_core_axi_write_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_write_out_driver_bfm via the sequencer and fuse_ctrl_core_axi_write_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_write_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_responder_sequence.svh new file mode 100644 index 000000000..9aaa395ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_write_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_write_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_sequence_base.svh new file mode 100644 index 000000000..d4ae2f4d6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_out_transaction_req_t; + fuse_ctrl_core_axi_write_out_transaction_req_t req; + typedef fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_out_transaction_rsp_t; + fuse_ctrl_core_axi_write_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_write_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_write_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction.svh new file mode 100644 index 000000000..fc836d88f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_write_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_awready ; + logic core_wready ; + axi_pkg::axi_burst_e core_bresp ; + logic core_bid ; + logic core_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_write_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_write_out_monitor and fuse_ctrl_core_axi_write_out_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_MONITOR_STRUCT + fuse_ctrl_core_axi_write_out_monitor_s fuse_ctrl_core_axi_write_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_out_driver and fuse_ctrl_core_axi_write_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_out_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_out_initiator_s fuse_ctrl_core_axi_write_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_write_out_driver and fuse_ctrl_core_axi_write_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_out_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_out_responder_s fuse_ctrl_core_axi_write_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_responder_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awready:0x%x core_wready:0x%x core_bresp:0x%x core_bid:0x%x core_bvalid:0x%x ",core_awready,core_wready,core_bresp,core_bid,core_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_awready == RHS.core_awready) + &&(this.core_wready == RHS.core_wready) + &&(this.core_bresp == RHS.core_bresp) + &&(this.core_bid == RHS.core_bid) + &&(this.core_bvalid == RHS.core_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awready = RHS.core_awready; + this.core_wready = RHS.core_wready; + this.core_bresp = RHS.core_bresp; + this.core_bid = RHS.core_bid; + this.core_bvalid = RHS.core_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_write_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awready,"core_awready"); + $add_attribute(transaction_view_h,core_wready,"core_wready"); + $add_attribute(transaction_view_h,core_bresp,"core_bresp"); + $add_attribute(transaction_view_h,core_bid,"core_bid"); + $add_attribute(transaction_view_h,core_bvalid,"core_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction_coverage.svh new file mode 100644 index 000000000..f6e083118 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_write_out transaction information using +// a covergroup named fuse_ctrl_core_axi_write_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_write_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awready: coverpoint coverage_trans.core_awready; + core_wready: coverpoint coverage_trans.core_wready; + core_bresp: coverpoint coverage_trans.core_bresp; + core_bid: coverpoint coverage_trans.core_bid; + core_bvalid: coverpoint coverage_trans.core_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_write_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_write_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_write_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/yaml/fuse_ctrl_core_axi_write_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/yaml/fuse_ctrl_core_axi_write_out_interface.yaml new file mode 100644 index 000000000..7f30cb198 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/yaml/fuse_ctrl_core_axi_write_out_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_write_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.project new file mode 100644 index 000000000..45e6ebf46 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_in_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.svproject new file mode 100644 index 000000000..f75187c7a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/Makefile new file mode 100644 index 000000000..ec35ee1db --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_in_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_in_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f + +fuse_ctrl_in_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f + +fuse_ctrl_in_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_xrtl.f + +COMP_fuse_ctrl_in_if_PKG_TGT_0 = q_comp_fuse_ctrl_in_if_pkg +COMP_fuse_ctrl_in_if_PKG_TGT_1 = v_comp_fuse_ctrl_in_if_pkg +COMP_fuse_ctrl_in_if_PKG_TGT = $(COMP_fuse_ctrl_in_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_in_if_pkg: $(COMP_fuse_ctrl_in_if_PKG_TGT) + +q_comp_fuse_ctrl_in_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_in_if_PKG_XRTL) + +v_comp_fuse_ctrl_in_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_in_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_in_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_in_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_in_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_in_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_in_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_in_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_in_if_pkg += -I$(fuse_ctrl_in_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_in_if_pkg += $(fuse_ctrl_in_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_in_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_in_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_in_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_in_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_in_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_in_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/compile.do new file mode 100644 index 000000000..c285781cd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_in_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if.compile new file mode 100644 index 000000000..e8e8162d5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_in_if_hvl.compile + - fuse_ctrl_in_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_bfm.vinfo new file mode 100644 index 000000000..b43d67488 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_in_if_if.sv +src/fuse_ctrl_in_if_driver_bfm.sv +src/fuse_ctrl_in_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_common.compile new file mode 100644 index 000000000..b81563f6f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f new file mode 100644 index 000000000..12e3b303b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f new file mode 100644 index 000000000..7a81ab807 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_xrtl.f new file mode 100644 index 000000000..179ff7f94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hdl.compile new file mode 100644 index 000000000..c092af6fc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_in_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_in_if_if.sv + - src/fuse_ctrl_in_if_monitor_bfm.sv + - src/fuse_ctrl_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hvl.compile new file mode 100644 index 000000000..92ee0394b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_in_if_common.compile +incdir: + - . +src: + - fuse_ctrl_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.sv new file mode 100644 index 000000000..084ccc70c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_in_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_in_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_in_if_macros.svh" + + export fuse_ctrl_in_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_in_if_typedefs.svh" + `include "src/fuse_ctrl_in_if_transaction.svh" + + `include "src/fuse_ctrl_in_if_configuration.svh" + `include "src/fuse_ctrl_in_if_driver.svh" + `include "src/fuse_ctrl_in_if_monitor.svh" + + `include "src/fuse_ctrl_in_if_transaction_coverage.svh" + `include "src/fuse_ctrl_in_if_sequence_base.svh" + `include "src/fuse_ctrl_in_if_random_sequence.svh" + + `include "src/fuse_ctrl_in_if_responder_sequence.svh" + `include "src/fuse_ctrl_in_if2reg_adapter.svh" + + `include "src/fuse_ctrl_in_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.vinfo new file mode 100644 index 000000000..638065653 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.sv new file mode 100644 index 000000000..0037ca5fe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_in_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_in_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_in_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.vinfo new file mode 100644 index 000000000..63327f479 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_sve.F new file mode 100644 index 000000000..8f42525dc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if2reg_adapter.svh new file mode 100644 index 000000000..949a9a2be --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_in_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if2reg_adapter #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_in_if2reg_adapter #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_in_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h = fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_in_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_agent.svh new file mode 100644 index 000000000..c4e054bf2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_agent #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_in_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .DRIVER_T(fuse_ctrl_in_if_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_T(fuse_ctrl_in_if_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .COVERAGE_T(fuse_ctrl_in_if_transaction_coverage #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_in_if_agent #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_configuration.svh new file mode 100644 index 000000000..2f557ad05 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_in_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_configuration #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_in_if_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_in_if_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_in_if_configuration #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_in_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_CONFIGURATION_STRUCT + fuse_ctrl_in_if_configuration_s fuse_ctrl_in_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_in_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_in_if_configuration_struct. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_in_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_in_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_in_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_in_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_in_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_in_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_in_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", agent_path, interface_name, AlertSyncOn ,RndConstLfrSeed ,RndCnstLfsrPerm ,MemInitFile ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_in_if_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver.svh new file mode 100644 index 000000000..4f5e71c4a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_driver #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_in_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_in_if_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .REQ(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .RSP(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_in_if_driver #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_in_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_in_if_driver and fuse_ctrl_in_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_in_if_driver_bfm. +`fuse_ctrl_in_if_INITIATOR_STRUCT + fuse_ctrl_in_if_initiator_s fuse_ctrl_in_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_in_if_driver and fuse_ctrl_in_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_in_if_driver_bfm. +`fuse_ctrl_in_if_RESPONDER_STRUCT + fuse_ctrl_in_if_responder_s fuse_ctrl_in_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_in_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_in_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_in_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_in_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver_bfm.sv new file mode 100644 index 000000000..6b39174a4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver_bfm.sv @@ -0,0 +1,346 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_in_if signal driving. It is +// accessed by the uvm fuse_ctrl_in_if driver through a virtual interface +// handle in the fuse_ctrl_in_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_in_if_if. +// +// Input signals from the fuse_ctrl_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_in_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_in_if_macros.svh" + +interface fuse_ctrl_in_if_driver_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + (fuse_ctrl_in_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_in_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i_i; + reg [$bits(edn_pkg::edn_req_t)-1:0] edn_i_o = 'bz; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_i; + reg [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_o = 'bz; + tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_i; + reg [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_o = 'bz; + tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_i; + reg [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_o = 'bz; + tri otp_ext_voltage_h_io_i; + reg otp_ext_voltage_h_io_o = 'bz; + tri scan_en_i_i; + reg scan_en_i_o = 'bz; + tri scan_rst_ni_i; + reg scan_rst_ni_o = 'bz; + tri scanmode_i_i; + reg scanmode_i_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.edn_i = (initiator_responder == INITIATOR) ? edn_i_o : 'bz; + assign edn_i_i = bus.edn_i; + assign bus.alert_rx_i = (initiator_responder == INITIATOR) ? alert_rx_i_o : 'bz; + assign alert_rx_i_i = bus.alert_rx_i; + assign bus.obs_ctrl_i = (initiator_responder == INITIATOR) ? obs_ctrl_i_o : 'bz; + assign obs_ctrl_i_i = bus.obs_ctrl_i; + assign bus.otp_ast_pwr_seq_h_i = (initiator_responder == INITIATOR) ? otp_ast_pwr_seq_h_i_o : 'bz; + assign otp_ast_pwr_seq_h_i_i = bus.otp_ast_pwr_seq_h_i; + assign bus.otp_ext_voltage_h_io = (initiator_responder == INITIATOR) ? otp_ext_voltage_h_io_o : 'bz; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + assign bus.scan_en_i = (initiator_responder == INITIATOR) ? scan_en_i_o : 'bz; + assign scan_en_i_i = bus.scan_en_i; + assign bus.scan_rst_ni = (initiator_responder == INITIATOR) ? scan_rst_ni_o : 'bz; + assign scan_rst_ni_i = bus.scan_rst_ni; + assign bus.scanmode_i = (initiator_responder == INITIATOR) ? scanmode_i_o : 'bz; + assign scanmode_i_i = bus.scanmode_i; + + // Proxy handle to UVM driver + fuse_ctrl_in_if_pkg::fuse_ctrl_in_if_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_in_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_in_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_in_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_in_if_driver and fuse_ctrl_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_in_if_driver_bfm. + `fuse_ctrl_in_if_INITIATOR_STRUCT + fuse_ctrl_in_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_in_if_driver and fuse_ctrl_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_in_if_driver_bfm. + `fuse_ctrl_in_if_RESPONDER_STRUCT + fuse_ctrl_in_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + edn_i_o <= 'bz; + alert_rx_i_o <= 'bz; + obs_ctrl_i_o <= 'bz; + otp_ast_pwr_seq_h_i_o <= 'bz; + otp_ext_voltage_h_io_o <= 'bz; + scan_en_i_o <= 'bz; + scan_rst_ni_o <= 'bz; + scanmode_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_in_if_configuration_s fuse_ctrl_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_in_if_initiator_s fuse_ctrl_in_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_in_if_responder_s fuse_ctrl_in_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_in_if_initiator_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Members within the fuse_ctrl_in_if_responder_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + initiator_struct = fuse_ctrl_in_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // edn_i_o <= fuse_ctrl_in_if_initiator_struct.xyz; // [$bits(edn_pkg::edn_req_t)-1:0] + // alert_rx_i_o <= fuse_ctrl_in_if_initiator_struct.xyz; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // obs_ctrl_i_o <= fuse_ctrl_in_if_initiator_struct.xyz; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // otp_ast_pwr_seq_h_i_o <= fuse_ctrl_in_if_initiator_struct.xyz; // [$bits(otp_ast_req_t)-1:0] + // otp_ext_voltage_h_io_o <= fuse_ctrl_in_if_initiator_struct.xyz; // + // scan_en_i_o <= fuse_ctrl_in_if_initiator_struct.xyz; // + // scan_rst_ni_o <= fuse_ctrl_in_if_initiator_struct.xyz; // + // scanmode_i_o <= fuse_ctrl_in_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_in_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_in_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_in_if_initiator_s fuse_ctrl_in_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_in_if_responder_s fuse_ctrl_in_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_in_if_initiator_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Variables within the fuse_ctrl_in_if_responder_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_in_if_responder_struct.xyz = edn_i_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_in_if_responder_struct.xyz = alert_rx_i_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // fuse_ctrl_in_if_responder_struct.xyz = obs_ctrl_i_i; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // fuse_ctrl_in_if_responder_struct.xyz = otp_ast_pwr_seq_h_i_i; // [$bits(otp_ast_req_t)-1:0] + // fuse_ctrl_in_if_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // fuse_ctrl_in_if_responder_struct.xyz = scan_en_i_i; // + // fuse_ctrl_in_if_responder_struct.xyz = scan_rst_ni_i; // + // fuse_ctrl_in_if_responder_struct.xyz = scanmode_i_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_in_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_in_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_if.sv new file mode 100644 index 000000000..590cb0dfa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_if.sv @@ -0,0 +1,119 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_in_if interface signals. +// It is instantiated once per fuse_ctrl_in_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_in_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_in_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_in_if_bus.edn_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.alert_rx_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.obs_ctrl_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.otp_ast_pwr_seq_h_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.otp_ext_voltage_h_io), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.scan_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.scan_rst_ni), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.scanmode_i), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_if_pkg_hdl::*; + +interface fuse_ctrl_in_if_if #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i, + inout tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i, + inout tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i, + inout tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i, + inout tri otp_ext_voltage_h_io, + inout tri scan_en_i, + inout tri scan_rst_ni, + inout tri scanmode_i + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input edn_i, + input alert_rx_i, + input obs_ctrl_i, + input otp_ast_pwr_seq_h_i, + input otp_ext_voltage_h_io, + input scan_en_i, + input scan_rst_ni, + input scanmode_i + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output edn_i, + output alert_rx_i, + output obs_ctrl_i, + output otp_ast_pwr_seq_h_i, + output otp_ext_voltage_h_io, + output scan_en_i, + output scan_rst_ni, + output scanmode_i + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input edn_i, + input alert_rx_i, + input obs_ctrl_i, + input otp_ast_pwr_seq_h_i, + input otp_ext_voltage_h_io, + input scan_en_i, + input scan_rst_ni, + input scanmode_i + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_macros.svh new file mode 100644 index 000000000..1c4c94307 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_in_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_in_if_configuration class. +// + `define fuse_ctrl_in_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_in_if_configuration_s; + + `define fuse_ctrl_in_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_if_configuration_s to_struct();\ + fuse_ctrl_in_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_in_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_in_if_configuration_s fuse_ctrl_in_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_in_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_in_if_transaction class. +// + `define fuse_ctrl_in_if_MONITOR_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_if_monitor_s; + + `define fuse_ctrl_in_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_if_monitor_s to_monitor_struct();\ + fuse_ctrl_in_if_monitor_struct = \ + { \ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_in_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_in_if_monitor_s fuse_ctrl_in_if_monitor_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_in_if_INITIATOR_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_if_initiator_s; + + `define fuse_ctrl_in_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_if_initiator_s to_initiator_struct();\ + fuse_ctrl_in_if_initiator_struct = \ + {\ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_in_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_in_if_initiator_s fuse_ctrl_in_if_initiator_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_in_if_RESPONDER_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_if_responder_s; + + `define fuse_ctrl_in_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_if_responder_s to_responder_struct();\ + fuse_ctrl_in_if_responder_struct = \ + {\ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_if_responder_struct);\ + endfunction + + `define fuse_ctrl_in_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_in_if_responder_s fuse_ctrl_in_if_responder_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor.svh new file mode 100644 index 000000000..b58f2c631 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_in_if transactions observed by the +// fuse_ctrl_in_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_monitor #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_in_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_in_if_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_in_if_monitor #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_in_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_in_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_in_if_monitor_s fuse_ctrl_in_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_in_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor_bfm.sv new file mode 100644 index 000000000..96d9a80f5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor_bfm.sv @@ -0,0 +1,221 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_in_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_in_if monitor through a virtual +// interface handle in the fuse_ctrl_in_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_in_if_if. +// +// Input signals from the fuse_ctrl_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_in_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_in_if_macros.svh" + + +interface fuse_ctrl_in_if_monitor_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + ( fuse_ctrl_in_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_in_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_in_if_MONITOR_STRUCT + fuse_ctrl_in_if_monitor_s fuse_ctrl_in_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_in_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i_i; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_i; + tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_i; + tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_i; + tri otp_ext_voltage_h_io_i; + tri scan_en_i_i; + tri scan_rst_ni_i; + tri scanmode_i_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign edn_i_i = bus.edn_i; + assign alert_rx_i_i = bus.alert_rx_i; + assign obs_ctrl_i_i = bus.obs_ctrl_i; + assign otp_ast_pwr_seq_h_i_i = bus.otp_ast_pwr_seq_h_i; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + assign scan_en_i_i = bus.scan_en_i; + assign scan_rst_ni_i = bus.scan_rst_ni; + assign scanmode_i_i = bus.scanmode_i; + + // Proxy handle to UVM monitor + fuse_ctrl_in_if_pkg::fuse_ctrl_in_if_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_in_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_in_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_in_if_configuration_s fuse_ctrl_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_in_if_monitor_s fuse_ctrl_in_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_in_if_monitor_struct.set_alert_rx_i + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_in_if_monitor_struct.xyz = edn_i_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_in_if_monitor_struct.xyz = alert_rx_i_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // fuse_ctrl_in_if_monitor_struct.xyz = obs_ctrl_i_i; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // fuse_ctrl_in_if_monitor_struct.xyz = otp_ast_pwr_seq_h_i_i; // [$bits(otp_ast_req_t)-1:0] + // fuse_ctrl_in_if_monitor_struct.xyz = otp_ext_voltage_h_io_i; // + // fuse_ctrl_in_if_monitor_struct.xyz = scan_en_i_i; // + // fuse_ctrl_in_if_monitor_struct.xyz = scan_rst_ni_i; // + // fuse_ctrl_in_if_monitor_struct.xyz = scanmode_i_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_random_sequence.svh new file mode 100644 index 000000000..8982a5cb8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_in_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_in_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_random_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_in_if_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_in_if_random_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_in_if_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_in_if_random_sequence::body()-fuse_ctrl_in_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_in_if_driver_bfm via the sequencer and fuse_ctrl_in_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_in_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_responder_sequence.svh new file mode 100644 index 000000000..75ca72188 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_responder_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_in_if_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_in_if_responder_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_in_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_in_if_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_sequence_base.svh new file mode 100644 index 000000000..12b699748 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_sequence_base #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .RSP(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_in_if_sequence_base #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // variables + typedef fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_in_if_transaction_req_t; + fuse_ctrl_in_if_transaction_req_t req; + typedef fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_in_if_transaction_rsp_t; + fuse_ctrl_in_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_in_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_in_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction.svh new file mode 100644 index 000000000..106e016f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction.svh @@ -0,0 +1,219 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_in_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_transaction #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_in_if_transaction #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_in_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_in_if_monitor and fuse_ctrl_in_if_monitor_bfm + // This struct is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_MONITOR_STRUCT + fuse_ctrl_in_if_monitor_s fuse_ctrl_in_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_in_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_in_if_monitor_struct. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_in_if_driver and fuse_ctrl_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_INITIATOR_STRUCT + fuse_ctrl_in_if_initiator_s fuse_ctrl_in_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_in_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_in_if_initiator_struct. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_in_if_driver and fuse_ctrl_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_RESPONDER_STRUCT + fuse_ctrl_in_if_responder_s fuse_ctrl_in_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_in_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_in_if_responder_struct. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("set_alert_rx_i:0x%x ",set_alert_rx_i); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.set_alert_rx_i = RHS.set_alert_rx_i; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_in_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,set_alert_rx_i,"set_alert_rx_i"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction_coverage.svh new file mode 100644 index 000000000..27fa4a7bd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction_coverage.svh @@ -0,0 +1,102 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_in_if transaction information using +// a covergroup named fuse_ctrl_in_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_transaction_coverage #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_subscriber #(.T(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_in_if_transaction_coverage #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_in_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + set_alert_rx_i: coverpoint coverage_trans.set_alert_rx_i; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_in_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_in_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_in_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_in_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/yaml/fuse_ctrl_in_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/yaml/fuse_ctrl_in_if_interface.yaml new file mode 100644 index 000000000..2dac8368b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/yaml/fuse_ctrl_in_if_interface.yaml @@ -0,0 +1,68 @@ +uvmf: + interfaces: + fuse_ctrl_in_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AlertSyncOn + type: int + value: '3' + - name: RndConstLfrSeed + type: lfsr_seed_t + value: RndConstLfsrSeedDefault + - name: RndCnstLfsrPerm + type: lsfr_perm_t + value: RndCnstLfsrPermDefault + - name: MemInitFile + type: string + ports: + - dir: output + name: edn_i + reset_value: '''bz' + width: '[''$bits(edn_pkg::edn_req_t)'']' + - dir: output + name: alert_rx_i + reset_value: '''bz' + width: '[''NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)'']' + - dir: output + name: obs_ctrl_i + reset_value: '''bz' + width: '[''$bits(ast_pkg::ast_obs_ctrl_t)'']' + - dir: output + name: otp_ast_pwr_seq_h_i + reset_value: '''bz' + width: '[''$bits(otp_ast_req_t)'']' + - dir: output + name: otp_ext_voltage_h_io + reset_value: '''bz' + width: '1' + - dir: output + name: scan_en_i + reset_value: '''bz' + width: '1' + - dir: output + name: scan_rst_ni + reset_value: '''bz' + width: '1' + - dir: output + name: scanmode_i + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: set_alert_rx_i + type: caliptra_prim_alert_pkg::alert_rx_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/.project new file mode 100644 index 000000000..3038bf51b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/.svproject new file mode 100644 index 000000000..40fcc43fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/Makefile new file mode 100644 index 000000000..9fd3230c4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f + +fuse_ctrl_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f + +fuse_ctrl_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f + +COMP_fuse_ctrl_in_PKG_TGT_0 = q_comp_fuse_ctrl_in_pkg +COMP_fuse_ctrl_in_PKG_TGT_1 = v_comp_fuse_ctrl_in_pkg +COMP_fuse_ctrl_in_PKG_TGT = $(COMP_fuse_ctrl_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_in_pkg: $(COMP_fuse_ctrl_in_PKG_TGT) + +q_comp_fuse_ctrl_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_in_PKG_XRTL) + +v_comp_fuse_ctrl_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_in_pkg += -I$(fuse_ctrl_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_in_pkg += $(fuse_ctrl_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/compile.do new file mode 100644 index 000000000..26458397d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile new file mode 100644 index 000000000..ae6ef9dd8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_in_hvl.compile + - fuse_ctrl_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo new file mode 100644 index 000000000..cf88b7005 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_in_if.sv +src/fuse_ctrl_in_driver_bfm.sv +src/fuse_ctrl_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_common.compile new file mode 100644 index 000000000..82360a88a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f new file mode 100644 index 000000000..959aa9e78 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f new file mode 100644 index 000000000..e57e74b80 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f new file mode 100644 index 000000000..1e9819e09 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile new file mode 100644 index 000000000..da38bec57 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_in_if.sv + - src/fuse_ctrl_in_monitor_bfm.sv + - src/fuse_ctrl_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile new file mode 100644 index 000000000..210102ccf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_in_common.compile +incdir: + - . +src: + - fuse_ctrl_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv new file mode 100644 index 000000000..58df769b3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_in_macros.svh" + + export fuse_ctrl_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_in_typedefs.svh" + `include "src/fuse_ctrl_in_transaction.svh" + + `include "src/fuse_ctrl_in_configuration.svh" + `include "src/fuse_ctrl_in_driver.svh" + `include "src/fuse_ctrl_in_monitor.svh" + + `include "src/fuse_ctrl_in_transaction_coverage.svh" + `include "src/fuse_ctrl_in_sequence_base.svh" + `include "src/fuse_ctrl_in_random_sequence.svh" + + `include "src/fuse_ctrl_in_responder_sequence.svh" + `include "src/fuse_ctrl_in2reg_adapter.svh" + + `include "src/fuse_ctrl_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo new file mode 100644 index 000000000..164f1255c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv new file mode 100644 index 000000000..b13dcf77e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.vinfo new file mode 100644 index 000000000..79de2ad70 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F new file mode 100644 index 000000000..345b7e8cd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in2reg_adapter.svh new file mode 100644 index 000000000..a359e7f30 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in2reg_adapter #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_in2reg_adapter #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h = fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_agent.svh new file mode 100644 index 000000000..8f2300972 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_agent #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_in_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .DRIVER_T(fuse_ctrl_in_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_T(fuse_ctrl_in_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .COVERAGE_T(fuse_ctrl_in_transaction_coverage #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_in_agent #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_configuration.svh new file mode 100644 index 000000000..14af02688 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_configuration #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_in_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_in_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_in_configuration #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_CONFIGURATION_STRUCT + fuse_ctrl_in_configuration_s fuse_ctrl_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_in_configuration_struct. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_in_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_in_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", agent_path, interface_name, AlertSyncOn ,RndConstLfrSeed ,RndCnstLfsrPerm ,MemInitFile ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_in_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver.svh new file mode 100644 index 000000000..2817f179d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_driver #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_in_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_in_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .REQ(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .RSP(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_in_driver #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_in_driver_bfm. +`fuse_ctrl_in_INITIATOR_STRUCT + fuse_ctrl_in_initiator_s fuse_ctrl_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_in_driver_bfm. +`fuse_ctrl_in_RESPONDER_STRUCT + fuse_ctrl_in_responder_s fuse_ctrl_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver_bfm.sv new file mode 100644 index 000000000..e7e60a495 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver_bfm.sv @@ -0,0 +1,346 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_in signal driving. It is +// accessed by the uvm fuse_ctrl_in driver through a virtual interface +// handle in the fuse_ctrl_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_in_if. +// +// Input signals from the fuse_ctrl_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_pkg_hdl::*; +`include "src/fuse_ctrl_in_macros.svh" + +interface fuse_ctrl_in_driver_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + (fuse_ctrl_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i_i; + reg [$bits(edn_pkg::edn_req_t)-1:0] edn_i_o = 'bz; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_i; + reg [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_o = 'bz; + tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_i; + reg [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_o = 'bz; + tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_i; + reg [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_o = 'bz; + tri otp_ext_voltage_h_io_i; + reg otp_ext_voltage_h_io_o = 'bz; + tri scan_en_i_i; + reg scan_en_i_o = 'bz; + tri scan_rst_ni_i; + reg scan_rst_ni_o = 'bz; + tri scanmode_i_i; + reg scanmode_i_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.edn_i = (initiator_responder == INITIATOR) ? edn_i_o : 'bz; + assign edn_i_i = bus.edn_i; + assign bus.alert_rx_i = (initiator_responder == INITIATOR) ? alert_rx_i_o : 'bz; + assign alert_rx_i_i = bus.alert_rx_i; + assign bus.obs_ctrl_i = (initiator_responder == INITIATOR) ? obs_ctrl_i_o : 'bz; + assign obs_ctrl_i_i = bus.obs_ctrl_i; + assign bus.otp_ast_pwr_seq_h_i = (initiator_responder == INITIATOR) ? otp_ast_pwr_seq_h_i_o : 'bz; + assign otp_ast_pwr_seq_h_i_i = bus.otp_ast_pwr_seq_h_i; + assign bus.otp_ext_voltage_h_io = (initiator_responder == INITIATOR) ? otp_ext_voltage_h_io_o : 'bz; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + assign bus.scan_en_i = (initiator_responder == INITIATOR) ? scan_en_i_o : 'bz; + assign scan_en_i_i = bus.scan_en_i; + assign bus.scan_rst_ni = (initiator_responder == INITIATOR) ? scan_rst_ni_o : 'bz; + assign scan_rst_ni_i = bus.scan_rst_ni; + assign bus.scanmode_i = (initiator_responder == INITIATOR) ? scanmode_i_o : 'bz; + assign scanmode_i_i = bus.scanmode_i; + + // Proxy handle to UVM driver + fuse_ctrl_in_pkg::fuse_ctrl_in_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_in_driver_bfm. + `fuse_ctrl_in_INITIATOR_STRUCT + fuse_ctrl_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_in_driver_bfm. + `fuse_ctrl_in_RESPONDER_STRUCT + fuse_ctrl_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + edn_i_o <= 'bz; + alert_rx_i_o <= 'bz; + obs_ctrl_i_o <= 'bz; + otp_ast_pwr_seq_h_i_o <= 'bz; + otp_ext_voltage_h_io_o <= 'bz; + scan_en_i_o <= 'bz; + scan_rst_ni_o <= 'bz; + scanmode_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_in_configuration_s fuse_ctrl_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_in_initiator_s fuse_ctrl_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_in_responder_s fuse_ctrl_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_in_initiator_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Members within the fuse_ctrl_in_responder_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + initiator_struct = fuse_ctrl_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // edn_i_o <= fuse_ctrl_in_initiator_struct.xyz; // [$bits(edn_pkg::edn_req_t)-1:0] + // alert_rx_i_o <= fuse_ctrl_in_initiator_struct.xyz; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // obs_ctrl_i_o <= fuse_ctrl_in_initiator_struct.xyz; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // otp_ast_pwr_seq_h_i_o <= fuse_ctrl_in_initiator_struct.xyz; // [$bits(otp_ast_req_t)-1:0] + // otp_ext_voltage_h_io_o <= fuse_ctrl_in_initiator_struct.xyz; // + // scan_en_i_o <= fuse_ctrl_in_initiator_struct.xyz; // + // scan_rst_ni_o <= fuse_ctrl_in_initiator_struct.xyz; // + // scanmode_i_o <= fuse_ctrl_in_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_in_initiator_s fuse_ctrl_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_in_responder_s fuse_ctrl_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_in_initiator_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Variables within the fuse_ctrl_in_responder_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_in_responder_struct.xyz = edn_i_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_in_responder_struct.xyz = alert_rx_i_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // fuse_ctrl_in_responder_struct.xyz = obs_ctrl_i_i; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // fuse_ctrl_in_responder_struct.xyz = otp_ast_pwr_seq_h_i_i; // [$bits(otp_ast_req_t)-1:0] + // fuse_ctrl_in_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // fuse_ctrl_in_responder_struct.xyz = scan_en_i_i; // + // fuse_ctrl_in_responder_struct.xyz = scan_rst_ni_i; // + // fuse_ctrl_in_responder_struct.xyz = scanmode_i_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv new file mode 100644 index 000000000..ad21f9b9f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv @@ -0,0 +1,119 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_in interface signals. +// It is instantiated once per fuse_ctrl_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_in_bus.edn_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.alert_rx_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.obs_ctrl_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.otp_ast_pwr_seq_h_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.otp_ext_voltage_h_io), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.scan_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.scan_rst_ni), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.scanmode_i), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_pkg_hdl::*; + +interface fuse_ctrl_in_if #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i, + inout tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i, + inout tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i, + inout tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i, + inout tri otp_ext_voltage_h_io, + inout tri scan_en_i, + inout tri scan_rst_ni, + inout tri scanmode_i + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input edn_i, + input alert_rx_i, + input obs_ctrl_i, + input otp_ast_pwr_seq_h_i, + input otp_ext_voltage_h_io, + input scan_en_i, + input scan_rst_ni, + input scanmode_i + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output edn_i, + output alert_rx_i, + output obs_ctrl_i, + output otp_ast_pwr_seq_h_i, + output otp_ext_voltage_h_io, + output scan_en_i, + output scan_rst_ni, + output scanmode_i + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input edn_i, + input alert_rx_i, + input obs_ctrl_i, + input otp_ast_pwr_seq_h_i, + input otp_ext_voltage_h_io, + input scan_en_i, + input scan_rst_ni, + input scanmode_i + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_macros.svh new file mode 100644 index 000000000..cf85634de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_in_configuration class. +// + `define fuse_ctrl_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_in_configuration_s; + + `define fuse_ctrl_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_configuration_s to_struct();\ + fuse_ctrl_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_in_configuration_s fuse_ctrl_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_in_transaction class. +// + `define fuse_ctrl_in_MONITOR_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_monitor_s; + + `define fuse_ctrl_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_monitor_s to_monitor_struct();\ + fuse_ctrl_in_monitor_struct = \ + { \ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_in_monitor_s fuse_ctrl_in_monitor_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_in_INITIATOR_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_initiator_s; + + `define fuse_ctrl_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_initiator_s to_initiator_struct();\ + fuse_ctrl_in_initiator_struct = \ + {\ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_in_initiator_s fuse_ctrl_in_initiator_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_in_RESPONDER_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_responder_s; + + `define fuse_ctrl_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_responder_s to_responder_struct();\ + fuse_ctrl_in_responder_struct = \ + {\ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_responder_struct);\ + endfunction + + `define fuse_ctrl_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_in_responder_s fuse_ctrl_in_responder_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor.svh new file mode 100644 index 000000000..cf4d9fd27 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_in transactions observed by the +// fuse_ctrl_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_monitor #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_in_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_in_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_in_monitor #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_in_monitor_s fuse_ctrl_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor_bfm.sv new file mode 100644 index 000000000..4857b9f66 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor_bfm.sv @@ -0,0 +1,221 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_in monitor through a virtual +// interface handle in the fuse_ctrl_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_in_if. +// +// Input signals from the fuse_ctrl_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_pkg_hdl::*; +`include "src/fuse_ctrl_in_macros.svh" + + +interface fuse_ctrl_in_monitor_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + ( fuse_ctrl_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_in_MONITOR_STRUCT + fuse_ctrl_in_monitor_s fuse_ctrl_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i_i; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_i; + tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_i; + tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_i; + tri otp_ext_voltage_h_io_i; + tri scan_en_i_i; + tri scan_rst_ni_i; + tri scanmode_i_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign edn_i_i = bus.edn_i; + assign alert_rx_i_i = bus.alert_rx_i; + assign obs_ctrl_i_i = bus.obs_ctrl_i; + assign otp_ast_pwr_seq_h_i_i = bus.otp_ast_pwr_seq_h_i; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + assign scan_en_i_i = bus.scan_en_i; + assign scan_rst_ni_i = bus.scan_rst_ni; + assign scanmode_i_i = bus.scanmode_i; + + // Proxy handle to UVM monitor + fuse_ctrl_in_pkg::fuse_ctrl_in_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_in_configuration_s fuse_ctrl_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_in_monitor_s fuse_ctrl_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_in_monitor_struct.set_alert_rx_i + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_in_monitor_struct.xyz = edn_i_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_in_monitor_struct.xyz = alert_rx_i_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // fuse_ctrl_in_monitor_struct.xyz = obs_ctrl_i_i; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // fuse_ctrl_in_monitor_struct.xyz = otp_ast_pwr_seq_h_i_i; // [$bits(otp_ast_req_t)-1:0] + // fuse_ctrl_in_monitor_struct.xyz = otp_ext_voltage_h_io_i; // + // fuse_ctrl_in_monitor_struct.xyz = scan_en_i_i; // + // fuse_ctrl_in_monitor_struct.xyz = scan_rst_ni_i; // + // fuse_ctrl_in_monitor_struct.xyz = scanmode_i_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_random_sequence.svh new file mode 100644 index 000000000..66b5a5d4a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_random_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_in_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_in_random_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_in_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_in_random_sequence::body()-fuse_ctrl_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_in_driver_bfm via the sequencer and fuse_ctrl_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_responder_sequence.svh new file mode 100644 index 000000000..e4e42b6aa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_responder_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_in_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_in_responder_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_in_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_sequence_base.svh new file mode 100644 index 000000000..ce6a3b740 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_sequence_base #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .RSP(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_in_sequence_base #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // variables + typedef fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_in_transaction_req_t; + fuse_ctrl_in_transaction_req_t req; + typedef fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_in_transaction_rsp_t; + fuse_ctrl_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction.svh new file mode 100644 index 000000000..f8a7fc400 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction.svh @@ -0,0 +1,219 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_transaction #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_in_transaction #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_in_monitor and fuse_ctrl_in_monitor_bfm + // This struct is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_MONITOR_STRUCT + fuse_ctrl_in_monitor_s fuse_ctrl_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_in_monitor_struct. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_in_driver_bfm. + // This struct is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_INITIATOR_STRUCT + fuse_ctrl_in_initiator_s fuse_ctrl_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_in_initiator_struct. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_in_driver_bfm. + // This struct is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_RESPONDER_STRUCT + fuse_ctrl_in_responder_s fuse_ctrl_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_in_responder_struct. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("set_alert_rx_i:0x%x ",set_alert_rx_i); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.set_alert_rx_i = RHS.set_alert_rx_i; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,set_alert_rx_i,"set_alert_rx_i"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction_coverage.svh new file mode 100644 index 000000000..5da482565 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction_coverage.svh @@ -0,0 +1,102 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_in transaction information using +// a covergroup named fuse_ctrl_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_transaction_coverage #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_subscriber #(.T(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_in_transaction_coverage #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + set_alert_rx_i: coverpoint coverage_trans.set_alert_rx_i; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/yaml/fuse_ctrl_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/yaml/fuse_ctrl_in_interface.yaml new file mode 100644 index 000000000..e7be8c60b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_in_pkg/yaml/fuse_ctrl_in_interface.yaml @@ -0,0 +1,68 @@ +uvmf: + interfaces: + fuse_ctrl_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AlertSyncOn + type: int + value: '3' + - name: RndConstLfrSeed + type: lfsr_seed_t + value: RndConstLfsrSeedDefault + - name: RndCnstLfsrPerm + type: lsfr_perm_t + value: RndCnstLfsrPermDefault + - name: MemInitFile + type: string + ports: + - dir: output + name: edn_i + reset_value: '''bz' + width: '[''$bits(edn_pkg::edn_req_t)'']' + - dir: output + name: alert_rx_i + reset_value: '''bz' + width: '[''NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)'']' + - dir: output + name: obs_ctrl_i + reset_value: '''bz' + width: '[''$bits(ast_pkg::ast_obs_ctrl_t)'']' + - dir: output + name: otp_ast_pwr_seq_h_i + reset_value: '''bz' + width: '[''$bits(otp_ast_req_t)'']' + - dir: output + name: otp_ext_voltage_h_io + reset_value: '''bz' + width: '1' + - dir: output + name: scan_en_i + reset_value: '''bz' + width: '1' + - dir: output + name: scan_rst_ni + reset_value: '''bz' + width: '1' + - dir: output + name: scanmode_i + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: set_alert_rx_i + type: caliptra_prim_alert_pkg::alert_rx_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.project new file mode 100644 index 000000000..da8a90eb7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_lc_otp_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.svproject new file mode 100644 index 000000000..6dac2c36a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/Makefile new file mode 100644 index 000000000..1ce37d99e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_lc_otp_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_lc_otp_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f + +fuse_ctrl_lc_otp_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f + +fuse_ctrl_lc_otp_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f + +COMP_fuse_ctrl_lc_otp_if_PKG_TGT_0 = q_comp_fuse_ctrl_lc_otp_if_pkg +COMP_fuse_ctrl_lc_otp_if_PKG_TGT_1 = v_comp_fuse_ctrl_lc_otp_if_pkg +COMP_fuse_ctrl_lc_otp_if_PKG_TGT = $(COMP_fuse_ctrl_lc_otp_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_lc_otp_if_pkg: $(COMP_fuse_ctrl_lc_otp_if_PKG_TGT) + +q_comp_fuse_ctrl_lc_otp_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG_XRTL) + +v_comp_fuse_ctrl_lc_otp_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_lc_otp_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_lc_otp_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_lc_otp_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_if_pkg += -I$(fuse_ctrl_lc_otp_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_if_pkg += $(fuse_ctrl_lc_otp_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_lc_otp_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_lc_otp_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_lc_otp_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_lc_otp_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/compile.do new file mode 100644 index 000000000..5f222a54a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_lc_otp_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if.compile new file mode 100644 index 000000000..ecb1301fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_lc_otp_if_hvl.compile + - fuse_ctrl_lc_otp_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_bfm.vinfo new file mode 100644 index 000000000..4007fc103 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_lc_otp_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_lc_otp_if_if.sv +src/fuse_ctrl_lc_otp_if_driver_bfm.sv +src/fuse_ctrl_lc_otp_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_common.compile new file mode 100644 index 000000000..0a9110502 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_lc_otp_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f new file mode 100644 index 000000000..30a25f810 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f new file mode 100644 index 000000000..0807a17da --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f new file mode 100644 index 000000000..e39f0bb0c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hdl.compile new file mode 100644 index 000000000..6d534830c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_lc_otp_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_lc_otp_if_if.sv + - src/fuse_ctrl_lc_otp_if_monitor_bfm.sv + - src/fuse_ctrl_lc_otp_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hvl.compile new file mode 100644 index 000000000..208b3d517 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_lc_otp_if_common.compile +incdir: + - . +src: + - fuse_ctrl_lc_otp_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.sv new file mode 100644 index 000000000..6bf19e8ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_lc_otp_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_lc_otp_if_macros.svh" + + export fuse_ctrl_lc_otp_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_lc_otp_if_typedefs.svh" + `include "src/fuse_ctrl_lc_otp_if_transaction.svh" + + `include "src/fuse_ctrl_lc_otp_if_configuration.svh" + `include "src/fuse_ctrl_lc_otp_if_driver.svh" + `include "src/fuse_ctrl_lc_otp_if_monitor.svh" + + `include "src/fuse_ctrl_lc_otp_if_transaction_coverage.svh" + `include "src/fuse_ctrl_lc_otp_if_sequence_base.svh" + `include "src/fuse_ctrl_lc_otp_if_random_sequence.svh" + + `include "src/fuse_ctrl_lc_otp_if_responder_sequence.svh" + `include "src/fuse_ctrl_lc_otp_if2reg_adapter.svh" + + `include "src/fuse_ctrl_lc_otp_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.vinfo new file mode 100644 index 000000000..f712ae9b4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_lc_otp_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_lc_otp_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.sv new file mode 100644 index 000000000..a4cdc7c70 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_lc_otp_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.vinfo new file mode 100644 index 000000000..a99ea0171 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_lc_otp_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_sve.F new file mode 100644 index 000000000..950466b92 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if2reg_adapter.svh new file mode 100644 index 000000000..e9b1a7897 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_lc_otp_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_lc_otp_if2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_lc_otp_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_lc_otp_if_transaction trans_h = fuse_ctrl_lc_otp_if_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_lc_otp_if_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_lc_otp_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_agent.svh new file mode 100644 index 000000000..bc148927a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_lc_otp_if_configuration ), + .DRIVER_T(fuse_ctrl_lc_otp_if_driver ), + .MONITOR_T(fuse_ctrl_lc_otp_if_monitor ), + .COVERAGE_T(fuse_ctrl_lc_otp_if_transaction_coverage ), + .TRANS_T(fuse_ctrl_lc_otp_if_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_lc_otp_if_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_configuration.svh new file mode 100644 index 000000000..92685e229 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_lc_otp_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_lc_otp_if_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_lc_otp_if_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_lc_otp_if_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_lc_otp_if_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_lc_otp_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_CONFIGURATION_STRUCT + fuse_ctrl_lc_otp_if_configuration_s fuse_ctrl_lc_otp_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_lc_otp_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_if_configuration_struct. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_lc_otp_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_lc_otp_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_lc_otp_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_lc_otp_if_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_lc_otp_if_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_lc_otp_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_lc_otp_if_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver.svh new file mode 100644 index 000000000..d96c73f4f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_lc_otp_if_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_if_driver_bfm ), + .REQ(fuse_ctrl_lc_otp_if_transaction ), + .RSP(fuse_ctrl_lc_otp_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_if_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_lc_otp_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_lc_otp_if_driver_bfm. +`fuse_ctrl_lc_otp_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_if_initiator_s fuse_ctrl_lc_otp_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_lc_otp_if_driver_bfm. +`fuse_ctrl_lc_otp_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_if_responder_s fuse_ctrl_lc_otp_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_lc_otp_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_lc_otp_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_lc_otp_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_lc_otp_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver_bfm.sv new file mode 100644 index 000000000..5675f3b6c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver_bfm.sv @@ -0,0 +1,321 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_lc_otp_if signal driving. It is +// accessed by the uvm fuse_ctrl_lc_otp_if driver through a virtual interface +// handle in the fuse_ctrl_lc_otp_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_lc_otp_if_if. +// +// Input signals from the fuse_ctrl_lc_otp_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_lc_otp_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_if_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_if_macros.svh" + +interface fuse_ctrl_lc_otp_if_driver_bfm + (fuse_ctrl_lc_otp_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_i; + reg [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_o = 'bz; + tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_i; + reg [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.lc_otp_vendor_test_i = (initiator_responder == INITIATOR) ? lc_otp_vendor_test_i_o : 'bz; + assign lc_otp_vendor_test_i_i = bus.lc_otp_vendor_test_i; + assign bus.lc_otp_program_i = (initiator_responder == INITIATOR) ? lc_otp_program_i_o : 'bz; + assign lc_otp_program_i_i = bus.lc_otp_program_i; + assign bus.lc_dft_en_i = (initiator_responder == INITIATOR) ? lc_dft_en_i_o : 'bz; + assign lc_dft_en_i_i = bus.lc_dft_en_i; + assign bus.lc_escalate_en_i = (initiator_responder == INITIATOR) ? lc_escalate_en_i_o : 'bz; + assign lc_escalate_en_i_i = bus.lc_escalate_en_i; + assign bus.lc_check_byp_en_i = (initiator_responder == INITIATOR) ? lc_check_byp_en_i_o : 'bz; + assign lc_check_byp_en_i_i = bus.lc_check_byp_en_i; + + // Proxy handle to UVM driver + fuse_ctrl_lc_otp_if_pkg::fuse_ctrl_lc_otp_if_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_lc_otp_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_lc_otp_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_lc_otp_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_if_driver_bfm. + `fuse_ctrl_lc_otp_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_if_driver_bfm. + `fuse_ctrl_lc_otp_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + lc_otp_vendor_test_i_o <= 'bz; + lc_otp_program_i_o <= 'bz; + lc_dft_en_i_o <= 'bz; + lc_escalate_en_i_o <= 'bz; + lc_check_byp_en_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_lc_otp_if_configuration_s fuse_ctrl_lc_otp_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_lc_otp_if_initiator_s fuse_ctrl_lc_otp_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_lc_otp_if_responder_s fuse_ctrl_lc_otp_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_lc_otp_if_initiator_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Members within the fuse_ctrl_lc_otp_if_responder_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + initiator_struct = fuse_ctrl_lc_otp_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // lc_otp_vendor_test_i_o <= fuse_ctrl_lc_otp_if_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // lc_otp_program_i_o <= fuse_ctrl_lc_otp_if_initiator_struct.xyz; // [$bits(lc_otp_program_req_t)-1:0] + // lc_dft_en_i_o <= fuse_ctrl_lc_otp_if_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // lc_escalate_en_i_o <= fuse_ctrl_lc_otp_if_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // lc_check_byp_en_i_o <= fuse_ctrl_lc_otp_if_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_lc_otp_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_lc_otp_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_lc_otp_if_initiator_s fuse_ctrl_lc_otp_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_lc_otp_if_responder_s fuse_ctrl_lc_otp_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_lc_otp_if_initiator_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Variables within the fuse_ctrl_lc_otp_if_responder_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_lc_otp_if_responder_struct.xyz = lc_otp_vendor_test_i_i; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // fuse_ctrl_lc_otp_if_responder_struct.xyz = lc_otp_program_i_i; // [$bits(lc_otp_program_req_t)-1:0] + // fuse_ctrl_lc_otp_if_responder_struct.xyz = lc_dft_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_if_responder_struct.xyz = lc_escalate_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_if_responder_struct.xyz = lc_check_byp_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_lc_otp_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_lc_otp_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_if.sv new file mode 100644 index 000000000..523ae029b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_if.sv @@ -0,0 +1,98 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_lc_otp_if interface signals. +// It is instantiated once per fuse_ctrl_lc_otp_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_lc_otp_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_lc_otp_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_lc_otp_if_bus.lc_otp_vendor_test_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_if_bus.lc_otp_program_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_if_bus.lc_dft_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_if_bus.lc_escalate_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_if_bus.lc_check_byp_en_i), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_if_pkg_hdl::*; + +interface fuse_ctrl_lc_otp_if_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i, + inout tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_i, + input lc_otp_program_i, + input lc_dft_en_i, + input lc_escalate_en_i, + input lc_check_byp_en_i + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output lc_otp_vendor_test_i, + output lc_otp_program_i, + output lc_dft_en_i, + output lc_escalate_en_i, + output lc_check_byp_en_i + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_i, + input lc_otp_program_i, + input lc_dft_en_i, + input lc_escalate_en_i, + input lc_check_byp_en_i + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_macros.svh new file mode 100644 index 000000000..98f551beb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_macros.svh @@ -0,0 +1,153 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_lc_otp_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_lc_otp_if_configuration class. +// + `define fuse_ctrl_lc_otp_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_lc_otp_if_configuration_s; + + `define fuse_ctrl_lc_otp_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_if_configuration_s to_struct();\ + fuse_ctrl_lc_otp_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_lc_otp_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_lc_otp_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_lc_otp_if_configuration_s fuse_ctrl_lc_otp_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_lc_otp_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_lc_otp_if_transaction class. +// + `define fuse_ctrl_lc_otp_if_MONITOR_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_if_monitor_s; + + `define fuse_ctrl_lc_otp_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_if_monitor_s to_monitor_struct();\ + fuse_ctrl_lc_otp_if_monitor_struct = \ + { \ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_lc_otp_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_lc_otp_if_monitor_s fuse_ctrl_lc_otp_if_monitor_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_lc_otp_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_if_INITIATOR_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_if_initiator_s; + + `define fuse_ctrl_lc_otp_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_if_initiator_s to_initiator_struct();\ + fuse_ctrl_lc_otp_if_initiator_struct = \ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_lc_otp_if_initiator_s fuse_ctrl_lc_otp_if_initiator_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_lc_otp_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_if_RESPONDER_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_if_responder_s; + + `define fuse_ctrl_lc_otp_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_if_responder_s to_responder_struct();\ + fuse_ctrl_lc_otp_if_responder_struct = \ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_if_responder_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_lc_otp_if_responder_s fuse_ctrl_lc_otp_if_responder_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor.svh new file mode 100644 index 000000000..cbf67060e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_lc_otp_if transactions observed by the +// fuse_ctrl_lc_otp_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_lc_otp_if_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_if_monitor_bfm ), + .TRANS_T(fuse_ctrl_lc_otp_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_if_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_lc_otp_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_lc_otp_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_lc_otp_if_monitor_s fuse_ctrl_lc_otp_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_lc_otp_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor_bfm.sv new file mode 100644 index 000000000..8ac6ebeac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor_bfm.sv @@ -0,0 +1,202 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_lc_otp_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_lc_otp_if monitor through a virtual +// interface handle in the fuse_ctrl_lc_otp_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_lc_otp_if_if. +// +// Input signals from the fuse_ctrl_lc_otp_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_lc_otp_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_if_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_if_macros.svh" + + +interface fuse_ctrl_lc_otp_if_monitor_bfm + ( fuse_ctrl_lc_otp_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_lc_otp_if_MONITOR_STRUCT + fuse_ctrl_lc_otp_if_monitor_s fuse_ctrl_lc_otp_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_lc_otp_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_i; + tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign lc_otp_vendor_test_i_i = bus.lc_otp_vendor_test_i; + assign lc_otp_program_i_i = bus.lc_otp_program_i; + assign lc_dft_en_i_i = bus.lc_dft_en_i; + assign lc_escalate_en_i_i = bus.lc_escalate_en_i; + assign lc_check_byp_en_i_i = bus.lc_check_byp_en_i; + + // Proxy handle to UVM monitor + fuse_ctrl_lc_otp_if_pkg::fuse_ctrl_lc_otp_if_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_lc_otp_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_lc_otp_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_lc_otp_if_configuration_s fuse_ctrl_lc_otp_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_lc_otp_if_monitor_s fuse_ctrl_lc_otp_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_lc_otp_if_monitor_struct.lc_dft_en_i + // // fuse_ctrl_lc_otp_if_monitor_struct.lc_escalate_en_i + // // fuse_ctrl_lc_otp_if_monitor_struct.lc_check_byp_en_i + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_lc_otp_if_monitor_struct.xyz = lc_otp_vendor_test_i_i; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // fuse_ctrl_lc_otp_if_monitor_struct.xyz = lc_otp_program_i_i; // [$bits(lc_otp_program_req_t)-1:0] + // fuse_ctrl_lc_otp_if_monitor_struct.xyz = lc_dft_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_if_monitor_struct.xyz = lc_escalate_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_if_monitor_struct.xyz = lc_check_byp_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_random_sequence.svh new file mode 100644 index 000000000..0fce942fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_lc_otp_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_lc_otp_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_random_sequence + extends fuse_ctrl_lc_otp_if_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_if_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_lc_otp_if_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_lc_otp_if_random_sequence::body()-fuse_ctrl_lc_otp_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_lc_otp_if_driver_bfm via the sequencer and fuse_ctrl_lc_otp_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_lc_otp_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_responder_sequence.svh new file mode 100644 index 000000000..8636e02b0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_responder_sequence + extends fuse_ctrl_lc_otp_if_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_if_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_lc_otp_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_lc_otp_if_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_sequence_base.svh new file mode 100644 index 000000000..3be42a152 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_lc_otp_if_transaction ), + .RSP(fuse_ctrl_lc_otp_if_transaction )); + + `uvm_object_utils( fuse_ctrl_lc_otp_if_sequence_base ) + + // variables + typedef fuse_ctrl_lc_otp_if_transaction fuse_ctrl_lc_otp_if_transaction_req_t; + fuse_ctrl_lc_otp_if_transaction_req_t req; + typedef fuse_ctrl_lc_otp_if_transaction fuse_ctrl_lc_otp_if_transaction_rsp_t; + fuse_ctrl_lc_otp_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_lc_otp_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_lc_otp_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction.svh new file mode 100644 index 000000000..695d6b043 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction.svh @@ -0,0 +1,201 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_lc_otp_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_lc_otp_if_transaction ) + + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_lc_otp_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_lc_otp_if_monitor and fuse_ctrl_lc_otp_if_monitor_bfm + // This struct is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_MONITOR_STRUCT + fuse_ctrl_lc_otp_if_monitor_s fuse_ctrl_lc_otp_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_if_monitor_struct. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_if_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_if_initiator_s fuse_ctrl_lc_otp_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_if_initiator_struct. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_if_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_if_responder_s fuse_ctrl_lc_otp_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_if_responder_struct. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("lc_dft_en_i:0x%x lc_escalate_en_i:0x%x lc_check_byp_en_i:0x%x ",lc_dft_en_i,lc_escalate_en_i,lc_check_byp_en_i); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_lc_otp_if_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_lc_otp_if_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.lc_dft_en_i = RHS.lc_dft_en_i; + this.lc_escalate_en_i = RHS.lc_escalate_en_i; + this.lc_check_byp_en_i = RHS.lc_check_byp_en_i; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_lc_otp_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,lc_dft_en_i,"lc_dft_en_i"); + $add_attribute(transaction_view_h,lc_escalate_en_i,"lc_escalate_en_i"); + $add_attribute(transaction_view_h,lc_check_byp_en_i,"lc_check_byp_en_i"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction_coverage.svh new file mode 100644 index 000000000..d0cfad043 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction_coverage.svh @@ -0,0 +1,86 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_lc_otp_if transaction information using +// a covergroup named fuse_ctrl_lc_otp_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_lc_otp_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_if_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_lc_otp_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + lc_dft_en_i: coverpoint coverage_trans.lc_dft_en_i; + lc_escalate_en_i: coverpoint coverage_trans.lc_escalate_en_i; + lc_check_byp_en_i: coverpoint coverage_trans.lc_check_byp_en_i; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_lc_otp_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_lc_otp_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_lc_otp_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/yaml/fuse_ctrl_lc_otp_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/yaml/fuse_ctrl_lc_otp_if_interface.yaml new file mode 100644 index 000000000..d24f3aef1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/yaml/fuse_ctrl_lc_otp_if_interface.yaml @@ -0,0 +1,57 @@ +uvmf: + interfaces: + fuse_ctrl_lc_otp_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: output + name: lc_otp_vendor_test_i + reset_value: '''bz' + width: '[''$bits(lc_otp_vendor_test_req_t)'']' + - dir: output + name: lc_otp_program_i + reset_value: '''bz' + width: '[''$bits(lc_otp_program_req_t)'']' + - dir: output + name: lc_dft_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + - dir: output + name: lc_escalate_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + - dir: output + name: lc_check_byp_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_dft_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_escalate_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_check_byp_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.project new file mode 100644 index 000000000..991dede72 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_lc_otp_in_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.svproject new file mode 100644 index 000000000..77a2ded66 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/Makefile new file mode 100644 index 000000000..1b21f7ed4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_lc_otp_in_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_lc_otp_in_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hvl.f + +fuse_ctrl_lc_otp_in_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hdl.f + +fuse_ctrl_lc_otp_in_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_xrtl.f + +COMP_fuse_ctrl_lc_otp_in_if_PKG_TGT_0 = q_comp_fuse_ctrl_lc_otp_in_if_pkg +COMP_fuse_ctrl_lc_otp_in_if_PKG_TGT_1 = v_comp_fuse_ctrl_lc_otp_in_if_pkg +COMP_fuse_ctrl_lc_otp_in_if_PKG_TGT = $(COMP_fuse_ctrl_lc_otp_in_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_lc_otp_in_if_pkg: $(COMP_fuse_ctrl_lc_otp_in_if_PKG_TGT) + +q_comp_fuse_ctrl_lc_otp_in_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_in_if_PKG_XRTL) + +v_comp_fuse_ctrl_lc_otp_in_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_in_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_lc_otp_in_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_lc_otp_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_in_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_lc_otp_in_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_in_if_pkg += -I$(fuse_ctrl_lc_otp_in_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_in_if_pkg += $(fuse_ctrl_lc_otp_in_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_lc_otp_in_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_lc_otp_in_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_lc_otp_in_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_lc_otp_in_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/compile.do new file mode 100644 index 000000000..0734f2115 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_lc_otp_in_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if.compile new file mode 100644 index 000000000..aa08b9bb4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_lc_otp_in_if_hvl.compile + - fuse_ctrl_lc_otp_in_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_bfm.vinfo new file mode 100644 index 000000000..186ee8240 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_lc_otp_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_lc_otp_in_if_if.sv +src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv +src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_common.compile new file mode 100644 index 000000000..fa80957cc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_lc_otp_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hdl.f new file mode 100644 index 000000000..5c87977b4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hvl.f new file mode 100644 index 000000000..443604421 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_xrtl.f new file mode 100644 index 000000000..2752b1fda --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hdl.compile new file mode 100644 index 000000000..d4b535457 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_lc_otp_in_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_lc_otp_in_if_if.sv + - src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv + - src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hvl.compile new file mode 100644 index 000000000..4dcbd0438 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_lc_otp_in_if_common.compile +incdir: + - . +src: + - fuse_ctrl_lc_otp_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.sv new file mode 100644 index 000000000..222ac1f65 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_in_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_lc_otp_in_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_lc_otp_in_if_macros.svh" + + export fuse_ctrl_lc_otp_in_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_lc_otp_in_if_typedefs.svh" + `include "src/fuse_ctrl_lc_otp_in_if_transaction.svh" + + `include "src/fuse_ctrl_lc_otp_in_if_configuration.svh" + `include "src/fuse_ctrl_lc_otp_in_if_driver.svh" + `include "src/fuse_ctrl_lc_otp_in_if_monitor.svh" + + `include "src/fuse_ctrl_lc_otp_in_if_transaction_coverage.svh" + `include "src/fuse_ctrl_lc_otp_in_if_sequence_base.svh" + `include "src/fuse_ctrl_lc_otp_in_if_random_sequence.svh" + + `include "src/fuse_ctrl_lc_otp_in_if_responder_sequence.svh" + `include "src/fuse_ctrl_lc_otp_in_if2reg_adapter.svh" + + `include "src/fuse_ctrl_lc_otp_in_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.vinfo new file mode 100644 index 000000000..867918714 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_lc_otp_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_lc_otp_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.sv new file mode 100644 index 000000000..53d891062 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_in_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_lc_otp_in_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_lc_otp_in_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.vinfo new file mode 100644 index 000000000..47ec6ae84 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_lc_otp_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_sve.F new file mode 100644 index 000000000..3ae1e74b1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if2reg_adapter.svh new file mode 100644 index 000000000..56a7c8934 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_lc_otp_in_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_lc_otp_in_if2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_lc_otp_in_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_lc_otp_in_if_transaction trans_h = fuse_ctrl_lc_otp_in_if_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_lc_otp_in_if_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_lc_otp_in_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_agent.svh new file mode 100644 index 000000000..4950f6a51 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_lc_otp_in_if_configuration ), + .DRIVER_T(fuse_ctrl_lc_otp_in_if_driver ), + .MONITOR_T(fuse_ctrl_lc_otp_in_if_monitor ), + .COVERAGE_T(fuse_ctrl_lc_otp_in_if_transaction_coverage ), + .TRANS_T(fuse_ctrl_lc_otp_in_if_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_if_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_configuration.svh new file mode 100644 index 000000000..36f931b74 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_lc_otp_in_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_lc_otp_in_if_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_lc_otp_in_if_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_lc_otp_in_if_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_lc_otp_in_if_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_lc_otp_in_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_CONFIGURATION_STRUCT + fuse_ctrl_lc_otp_in_if_configuration_s fuse_ctrl_lc_otp_in_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_lc_otp_in_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_if_configuration_struct. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_lc_otp_in_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_lc_otp_in_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_lc_otp_in_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_lc_otp_in_if_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_lc_otp_in_if_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_lc_otp_in_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_in_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_lc_otp_in_if_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver.svh new file mode 100644 index 000000000..b5699c94f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_lc_otp_in_if_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_in_if_driver_bfm ), + .REQ(fuse_ctrl_lc_otp_in_if_transaction ), + .RSP(fuse_ctrl_lc_otp_in_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_if_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_lc_otp_in_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_lc_otp_in_if_driver and fuse_ctrl_lc_otp_in_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_lc_otp_in_if_driver_bfm. +`fuse_ctrl_lc_otp_in_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_in_if_initiator_s fuse_ctrl_lc_otp_in_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_lc_otp_in_if_driver and fuse_ctrl_lc_otp_in_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_lc_otp_in_if_driver_bfm. +`fuse_ctrl_lc_otp_in_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_in_if_responder_s fuse_ctrl_lc_otp_in_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_lc_otp_in_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_lc_otp_in_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_lc_otp_in_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_lc_otp_in_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv new file mode 100644 index 000000000..5cc5aed55 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv @@ -0,0 +1,321 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_lc_otp_in_if signal driving. It is +// accessed by the uvm fuse_ctrl_lc_otp_in_if driver through a virtual interface +// handle in the fuse_ctrl_lc_otp_in_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_lc_otp_in_if_if. +// +// Input signals from the fuse_ctrl_lc_otp_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_lc_otp_in_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_in_if_macros.svh" + +interface fuse_ctrl_lc_otp_in_if_driver_bfm + (fuse_ctrl_lc_otp_in_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_in_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_i; + reg [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_o = 'bz; + tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_i; + reg [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.lc_otp_vendor_test_i = (initiator_responder == INITIATOR) ? lc_otp_vendor_test_i_o : 'bz; + assign lc_otp_vendor_test_i_i = bus.lc_otp_vendor_test_i; + assign bus.lc_otp_program_i = (initiator_responder == INITIATOR) ? lc_otp_program_i_o : 'bz; + assign lc_otp_program_i_i = bus.lc_otp_program_i; + assign bus.lc_dft_en_i = (initiator_responder == INITIATOR) ? lc_dft_en_i_o : 'bz; + assign lc_dft_en_i_i = bus.lc_dft_en_i; + assign bus.lc_escalate_en_i = (initiator_responder == INITIATOR) ? lc_escalate_en_i_o : 'bz; + assign lc_escalate_en_i_i = bus.lc_escalate_en_i; + assign bus.lc_check_byp_en_i = (initiator_responder == INITIATOR) ? lc_check_byp_en_i_o : 'bz; + assign lc_check_byp_en_i_i = bus.lc_check_byp_en_i; + + // Proxy handle to UVM driver + fuse_ctrl_lc_otp_in_if_pkg::fuse_ctrl_lc_otp_in_if_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_lc_otp_in_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_lc_otp_in_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_lc_otp_in_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_in_if_driver and fuse_ctrl_lc_otp_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_in_if_driver_bfm. + `fuse_ctrl_lc_otp_in_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_in_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_lc_otp_in_if_driver and fuse_ctrl_lc_otp_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_in_if_driver_bfm. + `fuse_ctrl_lc_otp_in_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_in_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + lc_otp_vendor_test_i_o <= 'bz; + lc_otp_program_i_o <= 'bz; + lc_dft_en_i_o <= 'bz; + lc_escalate_en_i_o <= 'bz; + lc_check_byp_en_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_lc_otp_in_if_configuration_s fuse_ctrl_lc_otp_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_lc_otp_in_if_initiator_s fuse_ctrl_lc_otp_in_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_lc_otp_in_if_responder_s fuse_ctrl_lc_otp_in_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_lc_otp_in_if_initiator_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Members within the fuse_ctrl_lc_otp_in_if_responder_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + initiator_struct = fuse_ctrl_lc_otp_in_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // lc_otp_vendor_test_i_o <= fuse_ctrl_lc_otp_in_if_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // lc_otp_program_i_o <= fuse_ctrl_lc_otp_in_if_initiator_struct.xyz; // [$bits(lc_otp_program_req_t)-1:0] + // lc_dft_en_i_o <= fuse_ctrl_lc_otp_in_if_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // lc_escalate_en_i_o <= fuse_ctrl_lc_otp_in_if_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // lc_check_byp_en_i_o <= fuse_ctrl_lc_otp_in_if_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_lc_otp_in_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_lc_otp_in_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_lc_otp_in_if_initiator_s fuse_ctrl_lc_otp_in_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_lc_otp_in_if_responder_s fuse_ctrl_lc_otp_in_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_lc_otp_in_if_initiator_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Variables within the fuse_ctrl_lc_otp_in_if_responder_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_lc_otp_in_if_responder_struct.xyz = lc_otp_vendor_test_i_i; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // fuse_ctrl_lc_otp_in_if_responder_struct.xyz = lc_otp_program_i_i; // [$bits(lc_otp_program_req_t)-1:0] + // fuse_ctrl_lc_otp_in_if_responder_struct.xyz = lc_dft_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_if_responder_struct.xyz = lc_escalate_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_if_responder_struct.xyz = lc_check_byp_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_lc_otp_in_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_lc_otp_in_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_if.sv new file mode 100644 index 000000000..b66aee0c5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_if.sv @@ -0,0 +1,98 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_lc_otp_in_if interface signals. +// It is instantiated once per fuse_ctrl_lc_otp_in_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_lc_otp_in_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_lc_otp_in_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_lc_otp_in_if_bus.lc_otp_vendor_test_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_if_bus.lc_otp_program_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_if_bus.lc_dft_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_if_bus.lc_escalate_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_if_bus.lc_check_byp_en_i), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_in_if_pkg_hdl::*; + +interface fuse_ctrl_lc_otp_in_if_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i, + inout tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_i, + input lc_otp_program_i, + input lc_dft_en_i, + input lc_escalate_en_i, + input lc_check_byp_en_i + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output lc_otp_vendor_test_i, + output lc_otp_program_i, + output lc_dft_en_i, + output lc_escalate_en_i, + output lc_check_byp_en_i + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_i, + input lc_otp_program_i, + input lc_dft_en_i, + input lc_escalate_en_i, + input lc_check_byp_en_i + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_macros.svh new file mode 100644 index 000000000..8a54f0aa1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_macros.svh @@ -0,0 +1,153 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_lc_otp_in_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_lc_otp_in_if_configuration class. +// + `define fuse_ctrl_lc_otp_in_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_lc_otp_in_if_configuration_s; + + `define fuse_ctrl_lc_otp_in_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_if_configuration_s to_struct();\ + fuse_ctrl_lc_otp_in_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_lc_otp_in_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_lc_otp_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_lc_otp_in_if_configuration_s fuse_ctrl_lc_otp_in_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_lc_otp_in_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_lc_otp_in_if_transaction class. +// + `define fuse_ctrl_lc_otp_in_if_MONITOR_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_in_if_monitor_s; + + `define fuse_ctrl_lc_otp_in_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_if_monitor_s to_monitor_struct();\ + fuse_ctrl_lc_otp_in_if_monitor_struct = \ + { \ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_in_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_lc_otp_in_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_lc_otp_in_if_monitor_s fuse_ctrl_lc_otp_in_if_monitor_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_in_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_lc_otp_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_in_if_INITIATOR_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_in_if_initiator_s; + + `define fuse_ctrl_lc_otp_in_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_if_initiator_s to_initiator_struct();\ + fuse_ctrl_lc_otp_in_if_initiator_struct = \ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_in_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_in_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_lc_otp_in_if_initiator_s fuse_ctrl_lc_otp_in_if_initiator_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_in_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_lc_otp_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_in_if_RESPONDER_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_in_if_responder_s; + + `define fuse_ctrl_lc_otp_in_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_if_responder_s to_responder_struct();\ + fuse_ctrl_lc_otp_in_if_responder_struct = \ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_in_if_responder_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_in_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_lc_otp_in_if_responder_s fuse_ctrl_lc_otp_in_if_responder_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_in_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor.svh new file mode 100644 index 000000000..02ed6b9d5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_lc_otp_in_if transactions observed by the +// fuse_ctrl_lc_otp_in_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_lc_otp_in_if_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_in_if_monitor_bfm ), + .TRANS_T(fuse_ctrl_lc_otp_in_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_if_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_lc_otp_in_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_lc_otp_in_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_lc_otp_in_if_monitor_s fuse_ctrl_lc_otp_in_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_lc_otp_in_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv new file mode 100644 index 000000000..cd1494da0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv @@ -0,0 +1,202 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_lc_otp_in_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_lc_otp_in_if monitor through a virtual +// interface handle in the fuse_ctrl_lc_otp_in_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_lc_otp_in_if_if. +// +// Input signals from the fuse_ctrl_lc_otp_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_lc_otp_in_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_in_if_macros.svh" + + +interface fuse_ctrl_lc_otp_in_if_monitor_bfm + ( fuse_ctrl_lc_otp_in_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_in_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_lc_otp_in_if_MONITOR_STRUCT + fuse_ctrl_lc_otp_in_if_monitor_s fuse_ctrl_lc_otp_in_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_lc_otp_in_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_i; + tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign lc_otp_vendor_test_i_i = bus.lc_otp_vendor_test_i; + assign lc_otp_program_i_i = bus.lc_otp_program_i; + assign lc_dft_en_i_i = bus.lc_dft_en_i; + assign lc_escalate_en_i_i = bus.lc_escalate_en_i; + assign lc_check_byp_en_i_i = bus.lc_check_byp_en_i; + + // Proxy handle to UVM monitor + fuse_ctrl_lc_otp_in_if_pkg::fuse_ctrl_lc_otp_in_if_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_lc_otp_in_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_lc_otp_in_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_lc_otp_in_if_configuration_s fuse_ctrl_lc_otp_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_lc_otp_in_if_monitor_s fuse_ctrl_lc_otp_in_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_lc_otp_in_if_monitor_struct.lc_dft_en_i + // // fuse_ctrl_lc_otp_in_if_monitor_struct.lc_escalate_en_i + // // fuse_ctrl_lc_otp_in_if_monitor_struct.lc_check_byp_en_i + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_lc_otp_in_if_monitor_struct.xyz = lc_otp_vendor_test_i_i; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // fuse_ctrl_lc_otp_in_if_monitor_struct.xyz = lc_otp_program_i_i; // [$bits(lc_otp_program_req_t)-1:0] + // fuse_ctrl_lc_otp_in_if_monitor_struct.xyz = lc_dft_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_if_monitor_struct.xyz = lc_escalate_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_if_monitor_struct.xyz = lc_check_byp_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_random_sequence.svh new file mode 100644 index 000000000..d3283cbbd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_lc_otp_in_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_lc_otp_in_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_random_sequence + extends fuse_ctrl_lc_otp_in_if_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_in_if_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_lc_otp_in_if_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_lc_otp_in_if_random_sequence::body()-fuse_ctrl_lc_otp_in_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_lc_otp_in_if_driver_bfm via the sequencer and fuse_ctrl_lc_otp_in_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_lc_otp_in_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_responder_sequence.svh new file mode 100644 index 000000000..4f7b3dcf7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_responder_sequence + extends fuse_ctrl_lc_otp_in_if_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_in_if_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_lc_otp_in_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_lc_otp_in_if_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_sequence_base.svh new file mode 100644 index 000000000..d92d33cf2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_lc_otp_in_if_transaction ), + .RSP(fuse_ctrl_lc_otp_in_if_transaction )); + + `uvm_object_utils( fuse_ctrl_lc_otp_in_if_sequence_base ) + + // variables + typedef fuse_ctrl_lc_otp_in_if_transaction fuse_ctrl_lc_otp_in_if_transaction_req_t; + fuse_ctrl_lc_otp_in_if_transaction_req_t req; + typedef fuse_ctrl_lc_otp_in_if_transaction fuse_ctrl_lc_otp_in_if_transaction_rsp_t; + fuse_ctrl_lc_otp_in_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_lc_otp_in_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_lc_otp_in_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction.svh new file mode 100644 index 000000000..9a35652c3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction.svh @@ -0,0 +1,201 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_lc_otp_in_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_lc_otp_in_if_transaction ) + + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_lc_otp_in_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_lc_otp_in_if_monitor and fuse_ctrl_lc_otp_in_if_monitor_bfm + // This struct is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_MONITOR_STRUCT + fuse_ctrl_lc_otp_in_if_monitor_s fuse_ctrl_lc_otp_in_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_in_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_if_monitor_struct. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_in_if_driver and fuse_ctrl_lc_otp_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_in_if_initiator_s fuse_ctrl_lc_otp_in_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_in_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_if_initiator_struct. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_lc_otp_in_if_driver and fuse_ctrl_lc_otp_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_in_if_responder_s fuse_ctrl_lc_otp_in_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_in_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_if_responder_struct. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("lc_dft_en_i:0x%x lc_escalate_en_i:0x%x lc_check_byp_en_i:0x%x ",lc_dft_en_i,lc_escalate_en_i,lc_check_byp_en_i); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_lc_otp_in_if_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_lc_otp_in_if_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.lc_dft_en_i = RHS.lc_dft_en_i; + this.lc_escalate_en_i = RHS.lc_escalate_en_i; + this.lc_check_byp_en_i = RHS.lc_check_byp_en_i; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_lc_otp_in_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,lc_dft_en_i,"lc_dft_en_i"); + $add_attribute(transaction_view_h,lc_escalate_en_i,"lc_escalate_en_i"); + $add_attribute(transaction_view_h,lc_check_byp_en_i,"lc_check_byp_en_i"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction_coverage.svh new file mode 100644 index 000000000..6c47ed21e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction_coverage.svh @@ -0,0 +1,86 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_lc_otp_in_if transaction information using +// a covergroup named fuse_ctrl_lc_otp_in_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_lc_otp_in_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_if_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_lc_otp_in_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + lc_dft_en_i: coverpoint coverage_trans.lc_dft_en_i; + lc_escalate_en_i: coverpoint coverage_trans.lc_escalate_en_i; + lc_check_byp_en_i: coverpoint coverage_trans.lc_check_byp_en_i; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_lc_otp_in_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_lc_otp_in_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_in_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_lc_otp_in_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/yaml/fuse_ctrl_lc_otp_in_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/yaml/fuse_ctrl_lc_otp_in_if_interface.yaml new file mode 100644 index 000000000..c47ea5a7d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/yaml/fuse_ctrl_lc_otp_in_if_interface.yaml @@ -0,0 +1,57 @@ +uvmf: + interfaces: + fuse_ctrl_lc_otp_in_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: output + name: lc_otp_vendor_test_i + reset_value: '''bz' + width: '[''$bits(lc_otp_vendor_test_req_t)'']' + - dir: output + name: lc_otp_program_i + reset_value: '''bz' + width: '[''$bits(lc_otp_program_req_t)'']' + - dir: output + name: lc_dft_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + - dir: output + name: lc_escalate_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + - dir: output + name: lc_check_byp_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_dft_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_escalate_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_check_byp_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.project new file mode 100644 index 000000000..bc9bb7a1d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_lc_otp_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.svproject new file mode 100644 index 000000000..e267e6c41 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/Makefile new file mode 100644 index 000000000..48df82f15 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_lc_otp_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_lc_otp_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hvl.f + +fuse_ctrl_lc_otp_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hdl.f + +fuse_ctrl_lc_otp_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_xrtl.f + +COMP_fuse_ctrl_lc_otp_in_PKG_TGT_0 = q_comp_fuse_ctrl_lc_otp_in_pkg +COMP_fuse_ctrl_lc_otp_in_PKG_TGT_1 = v_comp_fuse_ctrl_lc_otp_in_pkg +COMP_fuse_ctrl_lc_otp_in_PKG_TGT = $(COMP_fuse_ctrl_lc_otp_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_lc_otp_in_pkg: $(COMP_fuse_ctrl_lc_otp_in_PKG_TGT) + +q_comp_fuse_ctrl_lc_otp_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_in_PKG_XRTL) + +v_comp_fuse_ctrl_lc_otp_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_lc_otp_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_lc_otp_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_lc_otp_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_in_pkg += -I$(fuse_ctrl_lc_otp_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_in_pkg += $(fuse_ctrl_lc_otp_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_lc_otp_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_lc_otp_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_lc_otp_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_lc_otp_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/compile.do new file mode 100644 index 000000000..2334cca94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_lc_otp_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in.compile new file mode 100644 index 000000000..934282f83 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_lc_otp_in_hvl.compile + - fuse_ctrl_lc_otp_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_bfm.vinfo new file mode 100644 index 000000000..35c34c5f1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_lc_otp_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_lc_otp_in_if.sv +src/fuse_ctrl_lc_otp_in_driver_bfm.sv +src/fuse_ctrl_lc_otp_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_common.compile new file mode 100644 index 000000000..5683974c1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_lc_otp_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hdl.f new file mode 100644 index 000000000..fd87f109b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hvl.f new file mode 100644 index 000000000..ea2637ffb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_xrtl.f new file mode 100644 index 000000000..736ca19e3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hdl.compile new file mode 100644 index 000000000..9def84f00 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_lc_otp_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_lc_otp_in_if.sv + - src/fuse_ctrl_lc_otp_in_monitor_bfm.sv + - src/fuse_ctrl_lc_otp_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hvl.compile new file mode 100644 index 000000000..03742057a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_lc_otp_in_common.compile +incdir: + - . +src: + - fuse_ctrl_lc_otp_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.sv new file mode 100644 index 000000000..707771742 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_lc_otp_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_lc_otp_in_macros.svh" + + export fuse_ctrl_lc_otp_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_lc_otp_in_typedefs.svh" + `include "src/fuse_ctrl_lc_otp_in_transaction.svh" + + `include "src/fuse_ctrl_lc_otp_in_configuration.svh" + `include "src/fuse_ctrl_lc_otp_in_driver.svh" + `include "src/fuse_ctrl_lc_otp_in_monitor.svh" + + `include "src/fuse_ctrl_lc_otp_in_transaction_coverage.svh" + `include "src/fuse_ctrl_lc_otp_in_sequence_base.svh" + `include "src/fuse_ctrl_lc_otp_in_random_sequence.svh" + + `include "src/fuse_ctrl_lc_otp_in_responder_sequence.svh" + `include "src/fuse_ctrl_lc_otp_in2reg_adapter.svh" + + `include "src/fuse_ctrl_lc_otp_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.vinfo new file mode 100644 index 000000000..a51e3e02c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_lc_otp_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_lc_otp_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.sv new file mode 100644 index 000000000..e1761c3ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_lc_otp_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_lc_otp_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.vinfo new file mode 100644 index 000000000..536dd9eed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_lc_otp_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_sve.F new file mode 100644 index 000000000..1f476e946 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in2reg_adapter.svh new file mode 100644 index 000000000..b1d2bb59c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_lc_otp_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_lc_otp_in2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_lc_otp_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_lc_otp_in_transaction trans_h = fuse_ctrl_lc_otp_in_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_lc_otp_in_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_lc_otp_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_agent.svh new file mode 100644 index 000000000..1bcc44562 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_lc_otp_in_configuration ), + .DRIVER_T(fuse_ctrl_lc_otp_in_driver ), + .MONITOR_T(fuse_ctrl_lc_otp_in_monitor ), + .COVERAGE_T(fuse_ctrl_lc_otp_in_transaction_coverage ), + .TRANS_T(fuse_ctrl_lc_otp_in_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_configuration.svh new file mode 100644 index 000000000..3d01dbb4f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_lc_otp_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_lc_otp_in_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_lc_otp_in_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_lc_otp_in_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_lc_otp_in_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_lc_otp_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_CONFIGURATION_STRUCT + fuse_ctrl_lc_otp_in_configuration_s fuse_ctrl_lc_otp_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_lc_otp_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_configuration_struct. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_lc_otp_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_lc_otp_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_lc_otp_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_lc_otp_in_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_lc_otp_in_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_lc_otp_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_lc_otp_in_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver.svh new file mode 100644 index 000000000..fc0a2193e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_lc_otp_in_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_in_driver_bfm ), + .REQ(fuse_ctrl_lc_otp_in_transaction ), + .RSP(fuse_ctrl_lc_otp_in_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_lc_otp_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_lc_otp_in_driver and fuse_ctrl_lc_otp_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_lc_otp_in_driver_bfm. +`fuse_ctrl_lc_otp_in_INITIATOR_STRUCT + fuse_ctrl_lc_otp_in_initiator_s fuse_ctrl_lc_otp_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_lc_otp_in_driver and fuse_ctrl_lc_otp_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_lc_otp_in_driver_bfm. +`fuse_ctrl_lc_otp_in_RESPONDER_STRUCT + fuse_ctrl_lc_otp_in_responder_s fuse_ctrl_lc_otp_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_lc_otp_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_lc_otp_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_lc_otp_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_lc_otp_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver_bfm.sv new file mode 100644 index 000000000..15738caa7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver_bfm.sv @@ -0,0 +1,321 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_lc_otp_in signal driving. It is +// accessed by the uvm fuse_ctrl_lc_otp_in driver through a virtual interface +// handle in the fuse_ctrl_lc_otp_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_lc_otp_in_if. +// +// Input signals from the fuse_ctrl_lc_otp_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_lc_otp_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_in_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_in_macros.svh" + +interface fuse_ctrl_lc_otp_in_driver_bfm + (fuse_ctrl_lc_otp_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_i; + reg [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_o = 'bz; + tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_i; + reg [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.lc_otp_vendor_test_i = (initiator_responder == INITIATOR) ? lc_otp_vendor_test_i_o : 'bz; + assign lc_otp_vendor_test_i_i = bus.lc_otp_vendor_test_i; + assign bus.lc_otp_program_i = (initiator_responder == INITIATOR) ? lc_otp_program_i_o : 'bz; + assign lc_otp_program_i_i = bus.lc_otp_program_i; + assign bus.lc_dft_en_i = (initiator_responder == INITIATOR) ? lc_dft_en_i_o : 'bz; + assign lc_dft_en_i_i = bus.lc_dft_en_i; + assign bus.lc_escalate_en_i = (initiator_responder == INITIATOR) ? lc_escalate_en_i_o : 'bz; + assign lc_escalate_en_i_i = bus.lc_escalate_en_i; + assign bus.lc_check_byp_en_i = (initiator_responder == INITIATOR) ? lc_check_byp_en_i_o : 'bz; + assign lc_check_byp_en_i_i = bus.lc_check_byp_en_i; + + // Proxy handle to UVM driver + fuse_ctrl_lc_otp_in_pkg::fuse_ctrl_lc_otp_in_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_lc_otp_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_lc_otp_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_lc_otp_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_in_driver and fuse_ctrl_lc_otp_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_in_driver_bfm. + `fuse_ctrl_lc_otp_in_INITIATOR_STRUCT + fuse_ctrl_lc_otp_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_lc_otp_in_driver and fuse_ctrl_lc_otp_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_in_driver_bfm. + `fuse_ctrl_lc_otp_in_RESPONDER_STRUCT + fuse_ctrl_lc_otp_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + lc_otp_vendor_test_i_o <= 'bz; + lc_otp_program_i_o <= 'bz; + lc_dft_en_i_o <= 'bz; + lc_escalate_en_i_o <= 'bz; + lc_check_byp_en_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_lc_otp_in_configuration_s fuse_ctrl_lc_otp_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_lc_otp_in_initiator_s fuse_ctrl_lc_otp_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_lc_otp_in_responder_s fuse_ctrl_lc_otp_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_lc_otp_in_initiator_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Members within the fuse_ctrl_lc_otp_in_responder_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + initiator_struct = fuse_ctrl_lc_otp_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // lc_otp_vendor_test_i_o <= fuse_ctrl_lc_otp_in_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // lc_otp_program_i_o <= fuse_ctrl_lc_otp_in_initiator_struct.xyz; // [$bits(lc_otp_program_req_t)-1:0] + // lc_dft_en_i_o <= fuse_ctrl_lc_otp_in_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // lc_escalate_en_i_o <= fuse_ctrl_lc_otp_in_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // lc_check_byp_en_i_o <= fuse_ctrl_lc_otp_in_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_lc_otp_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_lc_otp_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_lc_otp_in_initiator_s fuse_ctrl_lc_otp_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_lc_otp_in_responder_s fuse_ctrl_lc_otp_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_lc_otp_in_initiator_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Variables within the fuse_ctrl_lc_otp_in_responder_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_lc_otp_in_responder_struct.xyz = lc_otp_vendor_test_i_i; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // fuse_ctrl_lc_otp_in_responder_struct.xyz = lc_otp_program_i_i; // [$bits(lc_otp_program_req_t)-1:0] + // fuse_ctrl_lc_otp_in_responder_struct.xyz = lc_dft_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_responder_struct.xyz = lc_escalate_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_responder_struct.xyz = lc_check_byp_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_lc_otp_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_lc_otp_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_if.sv new file mode 100644 index 000000000..68a0925a0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_if.sv @@ -0,0 +1,98 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_lc_otp_in interface signals. +// It is instantiated once per fuse_ctrl_lc_otp_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_lc_otp_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_lc_otp_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_lc_otp_in_bus.lc_otp_vendor_test_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_bus.lc_otp_program_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_bus.lc_dft_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_bus.lc_escalate_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_bus.lc_check_byp_en_i), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_in_pkg_hdl::*; + +interface fuse_ctrl_lc_otp_in_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i, + inout tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_i, + input lc_otp_program_i, + input lc_dft_en_i, + input lc_escalate_en_i, + input lc_check_byp_en_i + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output lc_otp_vendor_test_i, + output lc_otp_program_i, + output lc_dft_en_i, + output lc_escalate_en_i, + output lc_check_byp_en_i + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_i, + input lc_otp_program_i, + input lc_dft_en_i, + input lc_escalate_en_i, + input lc_check_byp_en_i + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_macros.svh new file mode 100644 index 000000000..9ad130b28 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_macros.svh @@ -0,0 +1,153 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_lc_otp_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_lc_otp_in_configuration class. +// + `define fuse_ctrl_lc_otp_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_lc_otp_in_configuration_s; + + `define fuse_ctrl_lc_otp_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_configuration_s to_struct();\ + fuse_ctrl_lc_otp_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_lc_otp_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_lc_otp_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_lc_otp_in_configuration_s fuse_ctrl_lc_otp_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_lc_otp_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_lc_otp_in_transaction class. +// + `define fuse_ctrl_lc_otp_in_MONITOR_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_in_monitor_s; + + `define fuse_ctrl_lc_otp_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_monitor_s to_monitor_struct();\ + fuse_ctrl_lc_otp_in_monitor_struct = \ + { \ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_lc_otp_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_lc_otp_in_monitor_s fuse_ctrl_lc_otp_in_monitor_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_lc_otp_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_in_INITIATOR_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_in_initiator_s; + + `define fuse_ctrl_lc_otp_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_initiator_s to_initiator_struct();\ + fuse_ctrl_lc_otp_in_initiator_struct = \ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_lc_otp_in_initiator_s fuse_ctrl_lc_otp_in_initiator_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_lc_otp_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_in_RESPONDER_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_in_responder_s; + + `define fuse_ctrl_lc_otp_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_responder_s to_responder_struct();\ + fuse_ctrl_lc_otp_in_responder_struct = \ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_in_responder_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_lc_otp_in_responder_s fuse_ctrl_lc_otp_in_responder_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor.svh new file mode 100644 index 000000000..f046d7ea3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_lc_otp_in transactions observed by the +// fuse_ctrl_lc_otp_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_lc_otp_in_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_in_monitor_bfm ), + .TRANS_T(fuse_ctrl_lc_otp_in_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_lc_otp_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_lc_otp_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_lc_otp_in_monitor_s fuse_ctrl_lc_otp_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_lc_otp_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor_bfm.sv new file mode 100644 index 000000000..783657acb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor_bfm.sv @@ -0,0 +1,202 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_lc_otp_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_lc_otp_in monitor through a virtual +// interface handle in the fuse_ctrl_lc_otp_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_lc_otp_in_if. +// +// Input signals from the fuse_ctrl_lc_otp_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_lc_otp_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_in_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_in_macros.svh" + + +interface fuse_ctrl_lc_otp_in_monitor_bfm + ( fuse_ctrl_lc_otp_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_lc_otp_in_MONITOR_STRUCT + fuse_ctrl_lc_otp_in_monitor_s fuse_ctrl_lc_otp_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_lc_otp_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_i; + tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign lc_otp_vendor_test_i_i = bus.lc_otp_vendor_test_i; + assign lc_otp_program_i_i = bus.lc_otp_program_i; + assign lc_dft_en_i_i = bus.lc_dft_en_i; + assign lc_escalate_en_i_i = bus.lc_escalate_en_i; + assign lc_check_byp_en_i_i = bus.lc_check_byp_en_i; + + // Proxy handle to UVM monitor + fuse_ctrl_lc_otp_in_pkg::fuse_ctrl_lc_otp_in_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_lc_otp_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_lc_otp_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_lc_otp_in_configuration_s fuse_ctrl_lc_otp_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_lc_otp_in_monitor_s fuse_ctrl_lc_otp_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_lc_otp_in_monitor_struct.lc_dft_en_i + // // fuse_ctrl_lc_otp_in_monitor_struct.lc_escalate_en_i + // // fuse_ctrl_lc_otp_in_monitor_struct.lc_check_byp_en_i + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_lc_otp_in_monitor_struct.xyz = lc_otp_vendor_test_i_i; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // fuse_ctrl_lc_otp_in_monitor_struct.xyz = lc_otp_program_i_i; // [$bits(lc_otp_program_req_t)-1:0] + // fuse_ctrl_lc_otp_in_monitor_struct.xyz = lc_dft_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_monitor_struct.xyz = lc_escalate_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_monitor_struct.xyz = lc_check_byp_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_random_sequence.svh new file mode 100644 index 000000000..477393c3e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_lc_otp_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_lc_otp_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_random_sequence + extends fuse_ctrl_lc_otp_in_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_in_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_lc_otp_in_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_lc_otp_in_random_sequence::body()-fuse_ctrl_lc_otp_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_lc_otp_in_driver_bfm via the sequencer and fuse_ctrl_lc_otp_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_lc_otp_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_responder_sequence.svh new file mode 100644 index 000000000..e41496803 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_responder_sequence + extends fuse_ctrl_lc_otp_in_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_in_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_lc_otp_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_lc_otp_in_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_sequence_base.svh new file mode 100644 index 000000000..83a122cb0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_lc_otp_in_transaction ), + .RSP(fuse_ctrl_lc_otp_in_transaction )); + + `uvm_object_utils( fuse_ctrl_lc_otp_in_sequence_base ) + + // variables + typedef fuse_ctrl_lc_otp_in_transaction fuse_ctrl_lc_otp_in_transaction_req_t; + fuse_ctrl_lc_otp_in_transaction_req_t req; + typedef fuse_ctrl_lc_otp_in_transaction fuse_ctrl_lc_otp_in_transaction_rsp_t; + fuse_ctrl_lc_otp_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_lc_otp_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_lc_otp_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction.svh new file mode 100644 index 000000000..187b6480c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction.svh @@ -0,0 +1,201 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_lc_otp_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_lc_otp_in_transaction ) + + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_lc_otp_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_lc_otp_in_monitor and fuse_ctrl_lc_otp_in_monitor_bfm + // This struct is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_MONITOR_STRUCT + fuse_ctrl_lc_otp_in_monitor_s fuse_ctrl_lc_otp_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_monitor_struct. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_in_driver and fuse_ctrl_lc_otp_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_in_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_INITIATOR_STRUCT + fuse_ctrl_lc_otp_in_initiator_s fuse_ctrl_lc_otp_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_initiator_struct. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_lc_otp_in_driver and fuse_ctrl_lc_otp_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_in_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_RESPONDER_STRUCT + fuse_ctrl_lc_otp_in_responder_s fuse_ctrl_lc_otp_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_responder_struct. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("lc_dft_en_i:0x%x lc_escalate_en_i:0x%x lc_check_byp_en_i:0x%x ",lc_dft_en_i,lc_escalate_en_i,lc_check_byp_en_i); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_lc_otp_in_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_lc_otp_in_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.lc_dft_en_i = RHS.lc_dft_en_i; + this.lc_escalate_en_i = RHS.lc_escalate_en_i; + this.lc_check_byp_en_i = RHS.lc_check_byp_en_i; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_lc_otp_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,lc_dft_en_i,"lc_dft_en_i"); + $add_attribute(transaction_view_h,lc_escalate_en_i,"lc_escalate_en_i"); + $add_attribute(transaction_view_h,lc_check_byp_en_i,"lc_check_byp_en_i"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction_coverage.svh new file mode 100644 index 000000000..e5fa783de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction_coverage.svh @@ -0,0 +1,86 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_lc_otp_in transaction information using +// a covergroup named fuse_ctrl_lc_otp_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_lc_otp_in_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_lc_otp_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + lc_dft_en_i: coverpoint coverage_trans.lc_dft_en_i; + lc_escalate_en_i: coverpoint coverage_trans.lc_escalate_en_i; + lc_check_byp_en_i: coverpoint coverage_trans.lc_check_byp_en_i; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_lc_otp_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_lc_otp_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_lc_otp_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/yaml/fuse_ctrl_lc_otp_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/yaml/fuse_ctrl_lc_otp_in_interface.yaml new file mode 100644 index 000000000..a7f2b381a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/yaml/fuse_ctrl_lc_otp_in_interface.yaml @@ -0,0 +1,57 @@ +uvmf: + interfaces: + fuse_ctrl_lc_otp_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: output + name: lc_otp_vendor_test_i + reset_value: '''bz' + width: '[''$bits(lc_otp_vendor_test_req_t)'']' + - dir: output + name: lc_otp_program_i + reset_value: '''bz' + width: '[''$bits(lc_otp_program_req_t)'']' + - dir: output + name: lc_dft_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + - dir: output + name: lc_escalate_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + - dir: output + name: lc_check_byp_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_dft_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_escalate_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_check_byp_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.project new file mode 100644 index 000000000..95dcde6a7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_lc_otp_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.svproject new file mode 100644 index 000000000..50f9edd81 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/Makefile new file mode 100644 index 000000000..7b42b541d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_lc_otp_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_lc_otp_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hvl.f + +fuse_ctrl_lc_otp_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hdl.f + +fuse_ctrl_lc_otp_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_xrtl.f + +COMP_fuse_ctrl_lc_otp_out_if_PKG_TGT_0 = q_comp_fuse_ctrl_lc_otp_out_if_pkg +COMP_fuse_ctrl_lc_otp_out_if_PKG_TGT_1 = v_comp_fuse_ctrl_lc_otp_out_if_pkg +COMP_fuse_ctrl_lc_otp_out_if_PKG_TGT = $(COMP_fuse_ctrl_lc_otp_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_lc_otp_out_if_pkg: $(COMP_fuse_ctrl_lc_otp_out_if_PKG_TGT) + +q_comp_fuse_ctrl_lc_otp_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_out_if_PKG_XRTL) + +v_comp_fuse_ctrl_lc_otp_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_lc_otp_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_lc_otp_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_lc_otp_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_out_if_pkg += -I$(fuse_ctrl_lc_otp_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_out_if_pkg += $(fuse_ctrl_lc_otp_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_lc_otp_out_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_lc_otp_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_lc_otp_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_lc_otp_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/compile.do new file mode 100644 index 000000000..af1e34f37 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_lc_otp_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if.compile new file mode 100644 index 000000000..ec237f3ce --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_lc_otp_out_if_hvl.compile + - fuse_ctrl_lc_otp_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_bfm.vinfo new file mode 100644 index 000000000..2a91b10ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_lc_otp_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_lc_otp_out_if_if.sv +src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv +src/fuse_ctrl_lc_otp_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_common.compile new file mode 100644 index 000000000..cd97600ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_lc_otp_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hdl.f new file mode 100644 index 000000000..ee3a8c8a4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hvl.f new file mode 100644 index 000000000..2713f8a05 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_xrtl.f new file mode 100644 index 000000000..6d99f13fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hdl.compile new file mode 100644 index 000000000..30bf39951 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_lc_otp_out_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_lc_otp_out_if_if.sv + - src/fuse_ctrl_lc_otp_out_if_monitor_bfm.sv + - src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hvl.compile new file mode 100644 index 000000000..01d7bd750 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_lc_otp_out_if_common.compile +incdir: + - . +src: + - fuse_ctrl_lc_otp_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.sv new file mode 100644 index 000000000..4605a92a3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_lc_otp_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_lc_otp_out_if_macros.svh" + + export fuse_ctrl_lc_otp_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_lc_otp_out_if_typedefs.svh" + `include "src/fuse_ctrl_lc_otp_out_if_transaction.svh" + + `include "src/fuse_ctrl_lc_otp_out_if_configuration.svh" + `include "src/fuse_ctrl_lc_otp_out_if_driver.svh" + `include "src/fuse_ctrl_lc_otp_out_if_monitor.svh" + + `include "src/fuse_ctrl_lc_otp_out_if_transaction_coverage.svh" + `include "src/fuse_ctrl_lc_otp_out_if_sequence_base.svh" + `include "src/fuse_ctrl_lc_otp_out_if_random_sequence.svh" + + `include "src/fuse_ctrl_lc_otp_out_if_responder_sequence.svh" + `include "src/fuse_ctrl_lc_otp_out_if2reg_adapter.svh" + + `include "src/fuse_ctrl_lc_otp_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.vinfo new file mode 100644 index 000000000..7657b3597 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_lc_otp_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_lc_otp_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.sv new file mode 100644 index 000000000..99c7cc9fa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_lc_otp_out_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_lc_otp_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..8fd4be1a1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_lc_otp_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_sve.F new file mode 100644 index 000000000..42c8070f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if2reg_adapter.svh new file mode 100644 index 000000000..be38d67f8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_lc_otp_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_lc_otp_out_if2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_lc_otp_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_lc_otp_out_if_transaction trans_h = fuse_ctrl_lc_otp_out_if_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_lc_otp_out_if_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_lc_otp_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_agent.svh new file mode 100644 index 000000000..8d10fabf2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_lc_otp_out_if_configuration ), + .DRIVER_T(fuse_ctrl_lc_otp_out_if_driver ), + .MONITOR_T(fuse_ctrl_lc_otp_out_if_monitor ), + .COVERAGE_T(fuse_ctrl_lc_otp_out_if_transaction_coverage ), + .TRANS_T(fuse_ctrl_lc_otp_out_if_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_if_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_configuration.svh new file mode 100644 index 000000000..a8b19a603 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_lc_otp_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_lc_otp_out_if_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_lc_otp_out_if_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_lc_otp_out_if_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_lc_otp_out_if_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_lc_otp_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_CONFIGURATION_STRUCT + fuse_ctrl_lc_otp_out_if_configuration_s fuse_ctrl_lc_otp_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_lc_otp_out_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_if_configuration_struct. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_lc_otp_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_lc_otp_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_lc_otp_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_lc_otp_out_if_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_lc_otp_out_if_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_lc_otp_out_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_lc_otp_out_if_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver.svh new file mode 100644 index 000000000..78fcd4d6f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_lc_otp_out_if_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_out_if_driver_bfm ), + .REQ(fuse_ctrl_lc_otp_out_if_transaction ), + .RSP(fuse_ctrl_lc_otp_out_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_if_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_lc_otp_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_lc_otp_out_if_driver and fuse_ctrl_lc_otp_out_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_lc_otp_out_if_driver_bfm. +`fuse_ctrl_lc_otp_out_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_out_if_initiator_s fuse_ctrl_lc_otp_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_lc_otp_out_if_driver and fuse_ctrl_lc_otp_out_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_lc_otp_out_if_driver_bfm. +`fuse_ctrl_lc_otp_out_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_out_if_responder_s fuse_ctrl_lc_otp_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_lc_otp_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_lc_otp_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_lc_otp_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_lc_otp_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv new file mode 100644 index 000000000..b903dfe7f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv @@ -0,0 +1,299 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_lc_otp_out_if signal driving. It is +// accessed by the uvm fuse_ctrl_lc_otp_out_if driver through a virtual interface +// handle in the fuse_ctrl_lc_otp_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_lc_otp_out_if_if. +// +// Input signals from the fuse_ctrl_lc_otp_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_lc_otp_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_out_if_macros.svh" + +interface fuse_ctrl_lc_otp_out_if_driver_bfm + (fuse_ctrl_lc_otp_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_i; + reg [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_o = 'bz; + tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_i; + reg [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_o = 'bz; + tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_i; + reg [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign lc_otp_vendor_test_o_i = bus.lc_otp_vendor_test_o; + assign bus.lc_otp_vendor_test_o = (initiator_responder == RESPONDER) ? lc_otp_vendor_test_o_o : 'bz; + assign lc_otp_program_o_i = bus.lc_otp_program_o; + assign bus.lc_otp_program_o = (initiator_responder == RESPONDER) ? lc_otp_program_o_o : 'bz; + assign otp_lc_data_o_i = bus.otp_lc_data_o; + assign bus.otp_lc_data_o = (initiator_responder == RESPONDER) ? otp_lc_data_o_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_lc_otp_out_if_pkg::fuse_ctrl_lc_otp_out_if_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_lc_otp_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_lc_otp_out_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_lc_otp_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_out_if_driver and fuse_ctrl_lc_otp_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_out_if_driver_bfm. + `fuse_ctrl_lc_otp_out_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_lc_otp_out_if_driver and fuse_ctrl_lc_otp_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_out_if_driver_bfm. + `fuse_ctrl_lc_otp_out_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + lc_otp_vendor_test_o_o <= 'bz; + lc_otp_program_o_o <= 'bz; + otp_lc_data_o_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_lc_otp_out_if_configuration_s fuse_ctrl_lc_otp_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_lc_otp_out_if_initiator_s fuse_ctrl_lc_otp_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_lc_otp_out_if_responder_s fuse_ctrl_lc_otp_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_lc_otp_out_if_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // Members within the fuse_ctrl_lc_otp_out_if_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + initiator_struct = fuse_ctrl_lc_otp_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_lc_otp_out_if_responder_struct.xyz = lc_otp_vendor_test_o_i; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_if_responder_struct.xyz = lc_otp_program_o_i; // [$bits(lc_otp_program_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_if_responder_struct.xyz = otp_lc_data_o_i; // [$bits(otp_lc_data_t)-1:0] + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_lc_otp_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_lc_otp_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_lc_otp_out_if_initiator_s fuse_ctrl_lc_otp_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_lc_otp_out_if_responder_s fuse_ctrl_lc_otp_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_lc_otp_out_if_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // Variables within the fuse_ctrl_lc_otp_out_if_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // lc_otp_vendor_test_o_o <= fuse_ctrl_lc_otp_out_if_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // lc_otp_program_o_o <= fuse_ctrl_lc_otp_out_if_initiator_struct.xyz; // [$bits(lc_otp_program_rsp_t)-1:0] + // otp_lc_data_o_o <= fuse_ctrl_lc_otp_out_if_initiator_struct.xyz; // [$bits(otp_lc_data_t)-1:0] + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_lc_otp_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_lc_otp_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_if.sv new file mode 100644 index 000000000..839416f4d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_if.sv @@ -0,0 +1,88 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_lc_otp_out_if interface signals. +// It is instantiated once per fuse_ctrl_lc_otp_out_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_lc_otp_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_lc_otp_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_lc_otp_out_if_bus.lc_otp_vendor_test_o), // Agent input +// .dut_signal_port(fuse_ctrl_lc_otp_out_if_bus.lc_otp_program_o), // Agent input +// .dut_signal_port(fuse_ctrl_lc_otp_out_if_bus.otp_lc_data_o), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_out_if_pkg_hdl::*; + +interface fuse_ctrl_lc_otp_out_if_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o, + inout tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o, + inout tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_o, + input lc_otp_program_o, + input otp_lc_data_o + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_o, + input lc_otp_program_o, + input otp_lc_data_o + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output lc_otp_vendor_test_o, + output lc_otp_program_o, + output otp_lc_data_o + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_macros.svh new file mode 100644 index 000000000..ea991a89b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_lc_otp_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_lc_otp_out_if_configuration class. +// + `define fuse_ctrl_lc_otp_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_lc_otp_out_if_configuration_s; + + `define fuse_ctrl_lc_otp_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_if_configuration_s to_struct();\ + fuse_ctrl_lc_otp_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_lc_otp_out_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_lc_otp_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_lc_otp_out_if_configuration_s fuse_ctrl_lc_otp_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_lc_otp_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_lc_otp_out_if_transaction class. +// + `define fuse_ctrl_lc_otp_out_if_MONITOR_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + } fuse_ctrl_lc_otp_out_if_monitor_s; + + `define fuse_ctrl_lc_otp_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_if_monitor_s to_monitor_struct();\ + fuse_ctrl_lc_otp_out_if_monitor_struct = \ + { \ + this.otp_lc_data_o \ + };\ + return ( fuse_ctrl_lc_otp_out_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_lc_otp_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_lc_otp_out_if_monitor_s fuse_ctrl_lc_otp_out_if_monitor_struct);\ + {\ + this.otp_lc_data_o \ + } = fuse_ctrl_lc_otp_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_lc_otp_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_out_if_INITIATOR_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + } fuse_ctrl_lc_otp_out_if_initiator_s; + + `define fuse_ctrl_lc_otp_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_if_initiator_s to_initiator_struct();\ + fuse_ctrl_lc_otp_out_if_initiator_struct = \ + {\ + this.otp_lc_data_o \ + };\ + return ( fuse_ctrl_lc_otp_out_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_lc_otp_out_if_initiator_s fuse_ctrl_lc_otp_out_if_initiator_struct);\ + {\ + this.otp_lc_data_o \ + } = fuse_ctrl_lc_otp_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_lc_otp_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_out_if_RESPONDER_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + } fuse_ctrl_lc_otp_out_if_responder_s; + + `define fuse_ctrl_lc_otp_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_if_responder_s to_responder_struct();\ + fuse_ctrl_lc_otp_out_if_responder_struct = \ + {\ + this.otp_lc_data_o \ + };\ + return ( fuse_ctrl_lc_otp_out_if_responder_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_lc_otp_out_if_responder_s fuse_ctrl_lc_otp_out_if_responder_struct);\ + {\ + this.otp_lc_data_o \ + } = fuse_ctrl_lc_otp_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor.svh new file mode 100644 index 000000000..2d03f44ed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_lc_otp_out_if transactions observed by the +// fuse_ctrl_lc_otp_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_lc_otp_out_if_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_out_if_monitor_bfm ), + .TRANS_T(fuse_ctrl_lc_otp_out_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_if_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_lc_otp_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_lc_otp_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_lc_otp_out_if_monitor_s fuse_ctrl_lc_otp_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_lc_otp_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor_bfm.sv new file mode 100644 index 000000000..685fdceee --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor_bfm.sv @@ -0,0 +1,194 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_lc_otp_out_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_lc_otp_out_if monitor through a virtual +// interface handle in the fuse_ctrl_lc_otp_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_lc_otp_out_if_if. +// +// Input signals from the fuse_ctrl_lc_otp_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_lc_otp_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_out_if_macros.svh" + + +interface fuse_ctrl_lc_otp_out_if_monitor_bfm + ( fuse_ctrl_lc_otp_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_lc_otp_out_if_MONITOR_STRUCT + fuse_ctrl_lc_otp_out_if_monitor_s fuse_ctrl_lc_otp_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_lc_otp_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_i; + tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_i; + tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign lc_otp_vendor_test_o_i = bus.lc_otp_vendor_test_o; + assign lc_otp_program_o_i = bus.lc_otp_program_o; + assign otp_lc_data_o_i = bus.otp_lc_data_o; + + // Proxy handle to UVM monitor + fuse_ctrl_lc_otp_out_if_pkg::fuse_ctrl_lc_otp_out_if_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_lc_otp_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_lc_otp_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_lc_otp_out_if_configuration_s fuse_ctrl_lc_otp_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_lc_otp_out_if_monitor_s fuse_ctrl_lc_otp_out_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_lc_otp_out_if_monitor_struct.otp_lc_data_o + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_lc_otp_out_if_monitor_struct.xyz = lc_otp_vendor_test_o_i; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_if_monitor_struct.xyz = lc_otp_program_o_i; // [$bits(lc_otp_program_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_if_monitor_struct.xyz = otp_lc_data_o_i; // [$bits(otp_lc_data_t)-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_random_sequence.svh new file mode 100644 index 000000000..998964a53 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_lc_otp_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_lc_otp_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_random_sequence + extends fuse_ctrl_lc_otp_out_if_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_out_if_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_lc_otp_out_if_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_lc_otp_out_if_random_sequence::body()-fuse_ctrl_lc_otp_out_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_lc_otp_out_if_driver_bfm via the sequencer and fuse_ctrl_lc_otp_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_lc_otp_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_responder_sequence.svh new file mode 100644 index 000000000..1adc62db5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_responder_sequence + extends fuse_ctrl_lc_otp_out_if_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_out_if_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_lc_otp_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_lc_otp_out_if_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_sequence_base.svh new file mode 100644 index 000000000..dc133adf1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_lc_otp_out_if_transaction ), + .RSP(fuse_ctrl_lc_otp_out_if_transaction )); + + `uvm_object_utils( fuse_ctrl_lc_otp_out_if_sequence_base ) + + // variables + typedef fuse_ctrl_lc_otp_out_if_transaction fuse_ctrl_lc_otp_out_if_transaction_req_t; + fuse_ctrl_lc_otp_out_if_transaction_req_t req; + typedef fuse_ctrl_lc_otp_out_if_transaction fuse_ctrl_lc_otp_out_if_transaction_rsp_t; + fuse_ctrl_lc_otp_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_lc_otp_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_lc_otp_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction.svh new file mode 100644 index 000000000..652f3aa11 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction.svh @@ -0,0 +1,196 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_lc_otp_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_lc_otp_out_if_transaction ) + + otp_lc_data_t otp_lc_data_o ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_lc_otp_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_lc_otp_out_if_monitor and fuse_ctrl_lc_otp_out_if_monitor_bfm + // This struct is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_MONITOR_STRUCT + fuse_ctrl_lc_otp_out_if_monitor_s fuse_ctrl_lc_otp_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_out_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_if_monitor_struct. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_out_if_driver and fuse_ctrl_lc_otp_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_out_if_initiator_s fuse_ctrl_lc_otp_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_out_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_if_initiator_struct. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_lc_otp_out_if_driver and fuse_ctrl_lc_otp_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_out_if_responder_s fuse_ctrl_lc_otp_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_out_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_if_responder_struct. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("otp_lc_data_o:0x%x ",otp_lc_data_o); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_lc_otp_out_if_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.otp_lc_data_o == RHS.otp_lc_data_o) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_lc_otp_out_if_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.otp_lc_data_o = RHS.otp_lc_data_o; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_lc_otp_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,otp_lc_data_o,"otp_lc_data_o"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction_coverage.svh new file mode 100644 index 000000000..8cdbe2099 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction_coverage.svh @@ -0,0 +1,84 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_lc_otp_out_if transaction information using +// a covergroup named fuse_ctrl_lc_otp_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_lc_otp_out_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_if_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_lc_otp_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + otp_lc_data_o: coverpoint coverage_trans.otp_lc_data_o; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_lc_otp_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_lc_otp_out_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_lc_otp_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/yaml/fuse_ctrl_lc_otp_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/yaml/fuse_ctrl_lc_otp_out_if_interface.yaml new file mode 100644 index 000000000..e5cfe2007 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/yaml/fuse_ctrl_lc_otp_out_if_interface.yaml @@ -0,0 +1,37 @@ +uvmf: + interfaces: + fuse_ctrl_lc_otp_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: input + name: lc_otp_vendor_test_o + reset_value: '''bz' + width: '[''$bits(lc_otp_vendor_test_rsp_t)'']' + - dir: input + name: lc_otp_program_o + reset_value: '''bz' + width: '[''$bits(lc_otp_program_rsp_t)'']' + - dir: input + name: otp_lc_data_o + reset_value: '''bz' + width: '[''$bits(otp_lc_data_t)'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: otp_lc_data_o + type: otp_lc_data_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.project new file mode 100644 index 000000000..42717eed9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_lc_otp_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.svproject new file mode 100644 index 000000000..fe0ca64ff --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/Makefile new file mode 100644 index 000000000..f975b194b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_lc_otp_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_lc_otp_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hvl.f + +fuse_ctrl_lc_otp_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hdl.f + +fuse_ctrl_lc_otp_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_xrtl.f + +COMP_fuse_ctrl_lc_otp_out_PKG_TGT_0 = q_comp_fuse_ctrl_lc_otp_out_pkg +COMP_fuse_ctrl_lc_otp_out_PKG_TGT_1 = v_comp_fuse_ctrl_lc_otp_out_pkg +COMP_fuse_ctrl_lc_otp_out_PKG_TGT = $(COMP_fuse_ctrl_lc_otp_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_lc_otp_out_pkg: $(COMP_fuse_ctrl_lc_otp_out_PKG_TGT) + +q_comp_fuse_ctrl_lc_otp_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_out_PKG_XRTL) + +v_comp_fuse_ctrl_lc_otp_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_lc_otp_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_lc_otp_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_lc_otp_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_out_pkg += -I$(fuse_ctrl_lc_otp_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_out_pkg += $(fuse_ctrl_lc_otp_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_lc_otp_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_lc_otp_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_lc_otp_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_lc_otp_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/compile.do new file mode 100644 index 000000000..8073231a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_lc_otp_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out.compile new file mode 100644 index 000000000..f8a8ac4ee --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_lc_otp_out_hvl.compile + - fuse_ctrl_lc_otp_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_bfm.vinfo new file mode 100644 index 000000000..0c1d35fa9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_lc_otp_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_lc_otp_out_if.sv +src/fuse_ctrl_lc_otp_out_driver_bfm.sv +src/fuse_ctrl_lc_otp_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_common.compile new file mode 100644 index 000000000..42616d50e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_lc_otp_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hdl.f new file mode 100644 index 000000000..dd3eb8a20 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hvl.f new file mode 100644 index 000000000..b0a13c621 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_xrtl.f new file mode 100644 index 000000000..48f620eef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hdl.compile new file mode 100644 index 000000000..2ce74cc85 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_lc_otp_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_lc_otp_out_if.sv + - src/fuse_ctrl_lc_otp_out_monitor_bfm.sv + - src/fuse_ctrl_lc_otp_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hvl.compile new file mode 100644 index 000000000..d6a5b8850 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_lc_otp_out_common.compile +incdir: + - . +src: + - fuse_ctrl_lc_otp_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.sv new file mode 100644 index 000000000..c18cea812 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_lc_otp_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_lc_otp_out_macros.svh" + + export fuse_ctrl_lc_otp_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_lc_otp_out_typedefs.svh" + `include "src/fuse_ctrl_lc_otp_out_transaction.svh" + + `include "src/fuse_ctrl_lc_otp_out_configuration.svh" + `include "src/fuse_ctrl_lc_otp_out_driver.svh" + `include "src/fuse_ctrl_lc_otp_out_monitor.svh" + + `include "src/fuse_ctrl_lc_otp_out_transaction_coverage.svh" + `include "src/fuse_ctrl_lc_otp_out_sequence_base.svh" + `include "src/fuse_ctrl_lc_otp_out_random_sequence.svh" + + `include "src/fuse_ctrl_lc_otp_out_responder_sequence.svh" + `include "src/fuse_ctrl_lc_otp_out2reg_adapter.svh" + + `include "src/fuse_ctrl_lc_otp_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.vinfo new file mode 100644 index 000000000..7a4f8b1c8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_lc_otp_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_lc_otp_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.sv new file mode 100644 index 000000000..8987535e6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_lc_otp_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_lc_otp_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.vinfo new file mode 100644 index 000000000..f662f8c19 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_lc_otp_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_sve.F new file mode 100644 index 000000000..0483ef5c0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out2reg_adapter.svh new file mode 100644 index 000000000..bd1fa55e6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_lc_otp_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_lc_otp_out2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_lc_otp_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_lc_otp_out_transaction trans_h = fuse_ctrl_lc_otp_out_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_lc_otp_out_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_lc_otp_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_agent.svh new file mode 100644 index 000000000..2b6207d35 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_lc_otp_out_configuration ), + .DRIVER_T(fuse_ctrl_lc_otp_out_driver ), + .MONITOR_T(fuse_ctrl_lc_otp_out_monitor ), + .COVERAGE_T(fuse_ctrl_lc_otp_out_transaction_coverage ), + .TRANS_T(fuse_ctrl_lc_otp_out_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_configuration.svh new file mode 100644 index 000000000..b7ccdaca3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_lc_otp_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_lc_otp_out_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_lc_otp_out_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_lc_otp_out_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_lc_otp_out_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_lc_otp_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_CONFIGURATION_STRUCT + fuse_ctrl_lc_otp_out_configuration_s fuse_ctrl_lc_otp_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_lc_otp_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_configuration_struct. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_lc_otp_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_lc_otp_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_lc_otp_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_lc_otp_out_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_lc_otp_out_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_lc_otp_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_lc_otp_out_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver.svh new file mode 100644 index 000000000..d25471cfc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_lc_otp_out_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_out_driver_bfm ), + .REQ(fuse_ctrl_lc_otp_out_transaction ), + .RSP(fuse_ctrl_lc_otp_out_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_lc_otp_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_lc_otp_out_driver and fuse_ctrl_lc_otp_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_lc_otp_out_driver_bfm. +`fuse_ctrl_lc_otp_out_INITIATOR_STRUCT + fuse_ctrl_lc_otp_out_initiator_s fuse_ctrl_lc_otp_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_lc_otp_out_driver and fuse_ctrl_lc_otp_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_lc_otp_out_driver_bfm. +`fuse_ctrl_lc_otp_out_RESPONDER_STRUCT + fuse_ctrl_lc_otp_out_responder_s fuse_ctrl_lc_otp_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_lc_otp_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_lc_otp_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_lc_otp_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_lc_otp_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver_bfm.sv new file mode 100644 index 000000000..9456d2d75 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver_bfm.sv @@ -0,0 +1,299 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_lc_otp_out signal driving. It is +// accessed by the uvm fuse_ctrl_lc_otp_out driver through a virtual interface +// handle in the fuse_ctrl_lc_otp_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_lc_otp_out_if. +// +// Input signals from the fuse_ctrl_lc_otp_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_lc_otp_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_out_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_out_macros.svh" + +interface fuse_ctrl_lc_otp_out_driver_bfm + (fuse_ctrl_lc_otp_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_i; + reg [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_o = 'bz; + tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_i; + reg [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_o = 'bz; + tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_i; + reg [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign lc_otp_vendor_test_o_i = bus.lc_otp_vendor_test_o; + assign bus.lc_otp_vendor_test_o = (initiator_responder == RESPONDER) ? lc_otp_vendor_test_o_o : 'bz; + assign lc_otp_program_o_i = bus.lc_otp_program_o; + assign bus.lc_otp_program_o = (initiator_responder == RESPONDER) ? lc_otp_program_o_o : 'bz; + assign otp_lc_data_o_i = bus.otp_lc_data_o; + assign bus.otp_lc_data_o = (initiator_responder == RESPONDER) ? otp_lc_data_o_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_lc_otp_out_pkg::fuse_ctrl_lc_otp_out_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_lc_otp_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_lc_otp_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_lc_otp_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_out_driver and fuse_ctrl_lc_otp_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_out_driver_bfm. + `fuse_ctrl_lc_otp_out_INITIATOR_STRUCT + fuse_ctrl_lc_otp_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_lc_otp_out_driver and fuse_ctrl_lc_otp_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_out_driver_bfm. + `fuse_ctrl_lc_otp_out_RESPONDER_STRUCT + fuse_ctrl_lc_otp_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + lc_otp_vendor_test_o_o <= 'bz; + lc_otp_program_o_o <= 'bz; + otp_lc_data_o_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_lc_otp_out_configuration_s fuse_ctrl_lc_otp_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_lc_otp_out_initiator_s fuse_ctrl_lc_otp_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_lc_otp_out_responder_s fuse_ctrl_lc_otp_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_lc_otp_out_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // Members within the fuse_ctrl_lc_otp_out_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + initiator_struct = fuse_ctrl_lc_otp_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_lc_otp_out_responder_struct.xyz = lc_otp_vendor_test_o_i; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_responder_struct.xyz = lc_otp_program_o_i; // [$bits(lc_otp_program_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_responder_struct.xyz = otp_lc_data_o_i; // [$bits(otp_lc_data_t)-1:0] + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_lc_otp_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_lc_otp_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_lc_otp_out_initiator_s fuse_ctrl_lc_otp_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_lc_otp_out_responder_s fuse_ctrl_lc_otp_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_lc_otp_out_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // Variables within the fuse_ctrl_lc_otp_out_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // lc_otp_vendor_test_o_o <= fuse_ctrl_lc_otp_out_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // lc_otp_program_o_o <= fuse_ctrl_lc_otp_out_initiator_struct.xyz; // [$bits(lc_otp_program_rsp_t)-1:0] + // otp_lc_data_o_o <= fuse_ctrl_lc_otp_out_initiator_struct.xyz; // [$bits(otp_lc_data_t)-1:0] + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_lc_otp_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_lc_otp_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_if.sv new file mode 100644 index 000000000..76b45dc37 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_if.sv @@ -0,0 +1,88 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_lc_otp_out interface signals. +// It is instantiated once per fuse_ctrl_lc_otp_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_lc_otp_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_lc_otp_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_lc_otp_out_bus.lc_otp_vendor_test_o), // Agent input +// .dut_signal_port(fuse_ctrl_lc_otp_out_bus.lc_otp_program_o), // Agent input +// .dut_signal_port(fuse_ctrl_lc_otp_out_bus.otp_lc_data_o), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_out_pkg_hdl::*; + +interface fuse_ctrl_lc_otp_out_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o, + inout tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o, + inout tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_o, + input lc_otp_program_o, + input otp_lc_data_o + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_o, + input lc_otp_program_o, + input otp_lc_data_o + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output lc_otp_vendor_test_o, + output lc_otp_program_o, + output otp_lc_data_o + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_macros.svh new file mode 100644 index 000000000..e4e72e20b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_lc_otp_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_lc_otp_out_configuration class. +// + `define fuse_ctrl_lc_otp_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_lc_otp_out_configuration_s; + + `define fuse_ctrl_lc_otp_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_configuration_s to_struct();\ + fuse_ctrl_lc_otp_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_lc_otp_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_lc_otp_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_lc_otp_out_configuration_s fuse_ctrl_lc_otp_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_lc_otp_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_lc_otp_out_transaction class. +// + `define fuse_ctrl_lc_otp_out_MONITOR_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + } fuse_ctrl_lc_otp_out_monitor_s; + + `define fuse_ctrl_lc_otp_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_monitor_s to_monitor_struct();\ + fuse_ctrl_lc_otp_out_monitor_struct = \ + { \ + this.otp_lc_data_o \ + };\ + return ( fuse_ctrl_lc_otp_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_lc_otp_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_lc_otp_out_monitor_s fuse_ctrl_lc_otp_out_monitor_struct);\ + {\ + this.otp_lc_data_o \ + } = fuse_ctrl_lc_otp_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_lc_otp_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_out_INITIATOR_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + } fuse_ctrl_lc_otp_out_initiator_s; + + `define fuse_ctrl_lc_otp_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_initiator_s to_initiator_struct();\ + fuse_ctrl_lc_otp_out_initiator_struct = \ + {\ + this.otp_lc_data_o \ + };\ + return ( fuse_ctrl_lc_otp_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_lc_otp_out_initiator_s fuse_ctrl_lc_otp_out_initiator_struct);\ + {\ + this.otp_lc_data_o \ + } = fuse_ctrl_lc_otp_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_lc_otp_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_out_RESPONDER_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + } fuse_ctrl_lc_otp_out_responder_s; + + `define fuse_ctrl_lc_otp_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_responder_s to_responder_struct();\ + fuse_ctrl_lc_otp_out_responder_struct = \ + {\ + this.otp_lc_data_o \ + };\ + return ( fuse_ctrl_lc_otp_out_responder_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_lc_otp_out_responder_s fuse_ctrl_lc_otp_out_responder_struct);\ + {\ + this.otp_lc_data_o \ + } = fuse_ctrl_lc_otp_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor.svh new file mode 100644 index 000000000..0c9f4465f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_lc_otp_out transactions observed by the +// fuse_ctrl_lc_otp_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_lc_otp_out_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_out_monitor_bfm ), + .TRANS_T(fuse_ctrl_lc_otp_out_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_lc_otp_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_lc_otp_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_lc_otp_out_monitor_s fuse_ctrl_lc_otp_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_lc_otp_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor_bfm.sv new file mode 100644 index 000000000..2a630288e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor_bfm.sv @@ -0,0 +1,194 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_lc_otp_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_lc_otp_out monitor through a virtual +// interface handle in the fuse_ctrl_lc_otp_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_lc_otp_out_if. +// +// Input signals from the fuse_ctrl_lc_otp_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_lc_otp_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_out_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_out_macros.svh" + + +interface fuse_ctrl_lc_otp_out_monitor_bfm + ( fuse_ctrl_lc_otp_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_lc_otp_out_MONITOR_STRUCT + fuse_ctrl_lc_otp_out_monitor_s fuse_ctrl_lc_otp_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_lc_otp_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_i; + tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_i; + tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign lc_otp_vendor_test_o_i = bus.lc_otp_vendor_test_o; + assign lc_otp_program_o_i = bus.lc_otp_program_o; + assign otp_lc_data_o_i = bus.otp_lc_data_o; + + // Proxy handle to UVM monitor + fuse_ctrl_lc_otp_out_pkg::fuse_ctrl_lc_otp_out_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_lc_otp_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_lc_otp_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_lc_otp_out_configuration_s fuse_ctrl_lc_otp_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_lc_otp_out_monitor_s fuse_ctrl_lc_otp_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_lc_otp_out_monitor_struct.otp_lc_data_o + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_lc_otp_out_monitor_struct.xyz = lc_otp_vendor_test_o_i; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_monitor_struct.xyz = lc_otp_program_o_i; // [$bits(lc_otp_program_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_monitor_struct.xyz = otp_lc_data_o_i; // [$bits(otp_lc_data_t)-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_random_sequence.svh new file mode 100644 index 000000000..a6806536f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_lc_otp_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_lc_otp_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_random_sequence + extends fuse_ctrl_lc_otp_out_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_out_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_lc_otp_out_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_lc_otp_out_random_sequence::body()-fuse_ctrl_lc_otp_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_lc_otp_out_driver_bfm via the sequencer and fuse_ctrl_lc_otp_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_lc_otp_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_responder_sequence.svh new file mode 100644 index 000000000..0e7cf5ce4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_responder_sequence + extends fuse_ctrl_lc_otp_out_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_out_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_lc_otp_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_lc_otp_out_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_sequence_base.svh new file mode 100644 index 000000000..d084a6b64 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_lc_otp_out_transaction ), + .RSP(fuse_ctrl_lc_otp_out_transaction )); + + `uvm_object_utils( fuse_ctrl_lc_otp_out_sequence_base ) + + // variables + typedef fuse_ctrl_lc_otp_out_transaction fuse_ctrl_lc_otp_out_transaction_req_t; + fuse_ctrl_lc_otp_out_transaction_req_t req; + typedef fuse_ctrl_lc_otp_out_transaction fuse_ctrl_lc_otp_out_transaction_rsp_t; + fuse_ctrl_lc_otp_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_lc_otp_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_lc_otp_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction.svh new file mode 100644 index 000000000..ef2229e27 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction.svh @@ -0,0 +1,196 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_lc_otp_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_lc_otp_out_transaction ) + + otp_lc_data_t otp_lc_data_o ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_lc_otp_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_lc_otp_out_monitor and fuse_ctrl_lc_otp_out_monitor_bfm + // This struct is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_MONITOR_STRUCT + fuse_ctrl_lc_otp_out_monitor_s fuse_ctrl_lc_otp_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_monitor_struct. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_out_driver and fuse_ctrl_lc_otp_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_out_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_INITIATOR_STRUCT + fuse_ctrl_lc_otp_out_initiator_s fuse_ctrl_lc_otp_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_initiator_struct. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_lc_otp_out_driver and fuse_ctrl_lc_otp_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_out_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_RESPONDER_STRUCT + fuse_ctrl_lc_otp_out_responder_s fuse_ctrl_lc_otp_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_responder_struct. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("otp_lc_data_o:0x%x ",otp_lc_data_o); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_lc_otp_out_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.otp_lc_data_o == RHS.otp_lc_data_o) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_lc_otp_out_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.otp_lc_data_o = RHS.otp_lc_data_o; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_lc_otp_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,otp_lc_data_o,"otp_lc_data_o"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction_coverage.svh new file mode 100644 index 000000000..25eeac7c7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction_coverage.svh @@ -0,0 +1,84 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_lc_otp_out transaction information using +// a covergroup named fuse_ctrl_lc_otp_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_lc_otp_out_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_lc_otp_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + otp_lc_data_o: coverpoint coverage_trans.otp_lc_data_o; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_lc_otp_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_lc_otp_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_lc_otp_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/yaml/fuse_ctrl_lc_otp_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/yaml/fuse_ctrl_lc_otp_out_interface.yaml new file mode 100644 index 000000000..108ed5f70 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/yaml/fuse_ctrl_lc_otp_out_interface.yaml @@ -0,0 +1,37 @@ +uvmf: + interfaces: + fuse_ctrl_lc_otp_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: input + name: lc_otp_vendor_test_o + reset_value: '''bz' + width: '[''$bits(lc_otp_vendor_test_rsp_t)'']' + - dir: input + name: lc_otp_program_o + reset_value: '''bz' + width: '[''$bits(lc_otp_program_rsp_t)'']' + - dir: input + name: otp_lc_data_o + reset_value: '''bz' + width: '[''$bits(otp_lc_data_t)'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: otp_lc_data_o + type: otp_lc_data_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.project new file mode 100644 index 000000000..a51915b99 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.svproject new file mode 100644 index 000000000..cc08a42fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/Makefile new file mode 100644 index 000000000..e454f5811 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f + +fuse_ctrl_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f + +fuse_ctrl_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_xrtl.f + +COMP_fuse_ctrl_out_if_PKG_TGT_0 = q_comp_fuse_ctrl_out_if_pkg +COMP_fuse_ctrl_out_if_PKG_TGT_1 = v_comp_fuse_ctrl_out_if_pkg +COMP_fuse_ctrl_out_if_PKG_TGT = $(COMP_fuse_ctrl_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_out_if_pkg: $(COMP_fuse_ctrl_out_if_PKG_TGT) + +q_comp_fuse_ctrl_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_out_if_PKG_XRTL) + +v_comp_fuse_ctrl_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_out_if_pkg += -I$(fuse_ctrl_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_out_if_pkg += $(fuse_ctrl_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_out_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/compile.do new file mode 100644 index 000000000..a96c13af2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if.compile new file mode 100644 index 000000000..dd4689f64 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_out_if_hvl.compile + - fuse_ctrl_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_bfm.vinfo new file mode 100644 index 000000000..6288a8874 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_out_if_if.sv +src/fuse_ctrl_out_if_driver_bfm.sv +src/fuse_ctrl_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_common.compile new file mode 100644 index 000000000..c7726ee65 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f new file mode 100644 index 000000000..4355e25d9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f new file mode 100644 index 000000000..13bb387c5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_xrtl.f new file mode 100644 index 000000000..0e7ea6718 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hdl.compile new file mode 100644 index 000000000..676003b6c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_out_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_out_if_if.sv + - src/fuse_ctrl_out_if_monitor_bfm.sv + - src/fuse_ctrl_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hvl.compile new file mode 100644 index 000000000..9d8526a89 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_out_if_common.compile +incdir: + - . +src: + - fuse_ctrl_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.sv new file mode 100644 index 000000000..534d87ccd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_out_if_macros.svh" + + export fuse_ctrl_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_out_if_typedefs.svh" + `include "src/fuse_ctrl_out_if_transaction.svh" + + `include "src/fuse_ctrl_out_if_configuration.svh" + `include "src/fuse_ctrl_out_if_driver.svh" + `include "src/fuse_ctrl_out_if_monitor.svh" + + `include "src/fuse_ctrl_out_if_transaction_coverage.svh" + `include "src/fuse_ctrl_out_if_sequence_base.svh" + `include "src/fuse_ctrl_out_if_random_sequence.svh" + + `include "src/fuse_ctrl_out_if_responder_sequence.svh" + `include "src/fuse_ctrl_out_if2reg_adapter.svh" + + `include "src/fuse_ctrl_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.vinfo new file mode 100644 index 000000000..0daa42ac2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.sv new file mode 100644 index 000000000..80d7ad79d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_out_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..fcc4ab02f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_sve.F new file mode 100644 index 000000000..a4f0dfc42 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if2reg_adapter.svh new file mode 100644 index 000000000..fd141b5fe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if2reg_adapter #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_out_if2reg_adapter #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h = fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_agent.svh new file mode 100644 index 000000000..2fb6d2a15 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_agent #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_out_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .DRIVER_T(fuse_ctrl_out_if_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_T(fuse_ctrl_out_if_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .COVERAGE_T(fuse_ctrl_out_if_transaction_coverage #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_out_if_agent #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_configuration.svh new file mode 100644 index 000000000..401f3ac74 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_configuration #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_out_if_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_out_if_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_out_if_configuration #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_CONFIGURATION_STRUCT + fuse_ctrl_out_if_configuration_s fuse_ctrl_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_out_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_out_if_configuration_struct. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_out_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_out_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_out_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", agent_path, interface_name, AlertSyncOn ,RndConstLfrSeed ,RndCnstLfsrPerm ,MemInitFile ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_out_if_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver.svh new file mode 100644 index 000000000..03f256f92 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_driver #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_out_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_out_if_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .REQ(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .RSP(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_out_if_driver #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_out_if_driver and fuse_ctrl_out_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_out_if_driver_bfm. +`fuse_ctrl_out_if_INITIATOR_STRUCT + fuse_ctrl_out_if_initiator_s fuse_ctrl_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_out_if_driver and fuse_ctrl_out_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_out_if_driver_bfm. +`fuse_ctrl_out_if_RESPONDER_STRUCT + fuse_ctrl_out_if_responder_s fuse_ctrl_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver_bfm.sv new file mode 100644 index 000000000..a4c591277 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver_bfm.sv @@ -0,0 +1,382 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_out_if signal driving. It is +// accessed by the uvm fuse_ctrl_out_if driver through a virtual interface +// handle in the fuse_ctrl_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_out_if_if. +// +// Input signals from the fuse_ctrl_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_out_if_macros.svh" + +interface fuse_ctrl_out_if_driver_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + (fuse_ctrl_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o_i; + reg [$bits(edn_pkg::edn_req_t)-1:0] edn_o_o = 'bz; + tri intr_otp_operation_done_o_i; + reg intr_otp_operation_done_o_o = 'bz; + tri intr_otp_error_o_i; + reg intr_otp_error_o_o = 'bz; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_i; + reg [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_o = 'bz; + tri [7:0] otp_obs_o_i; + reg [7:0] otp_obs_o_o = 'bz; + tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_i; + reg [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_o = 'bz; + tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_i; + reg [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_o = 'bz; + tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_i; + reg [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_o = 'bz; + tri [OtpTestVectWidth-1:0] cio_test_o_i; + reg [OtpTestVectWidth-1:0] cio_test_o_o = 'bz; + tri [OtpTestVectWidth-1:0] cio_test_en_o_i; + reg [OtpTestVectWidth-1:0] cio_test_en_o_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + tri otp_ext_voltage_h_io_i; + reg otp_ext_voltage_h_io_o = 'bz; + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign edn_o_i = bus.edn_o; + assign bus.edn_o = (initiator_responder == RESPONDER) ? edn_o_o : 'bz; + assign intr_otp_operation_done_o_i = bus.intr_otp_operation_done_o; + assign bus.intr_otp_operation_done_o = (initiator_responder == RESPONDER) ? intr_otp_operation_done_o_o : 'bz; + assign intr_otp_error_o_i = bus.intr_otp_error_o; + assign bus.intr_otp_error_o = (initiator_responder == RESPONDER) ? intr_otp_error_o_o : 'bz; + assign alert_tx_o_i = bus.alert_tx_o; + assign bus.alert_tx_o = (initiator_responder == RESPONDER) ? alert_tx_o_o : 'bz; + assign otp_obs_o_i = bus.otp_obs_o; + assign bus.otp_obs_o = (initiator_responder == RESPONDER) ? otp_obs_o_o : 'bz; + assign otp_ast_pwr_seq_o_i = bus.otp_ast_pwr_seq_o; + assign bus.otp_ast_pwr_seq_o = (initiator_responder == RESPONDER) ? otp_ast_pwr_seq_o_o : 'bz; + assign pwr_otp_o_i = bus.pwr_otp_o; + assign bus.pwr_otp_o = (initiator_responder == RESPONDER) ? pwr_otp_o_o : 'bz; + assign otp_broadcast_o_i = bus.otp_broadcast_o; + assign bus.otp_broadcast_o = (initiator_responder == RESPONDER) ? otp_broadcast_o_o : 'bz; + assign cio_test_o_i = bus.cio_test_o; + assign bus.cio_test_o = (initiator_responder == RESPONDER) ? cio_test_o_o : 'bz; + assign cio_test_en_o_i = bus.cio_test_en_o; + assign bus.cio_test_en_o = (initiator_responder == RESPONDER) ? cio_test_en_o_o : 'bz; + + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.otp_ext_voltage_h_io = otp_ext_voltage_h_io_o; + + // Proxy handle to UVM driver + fuse_ctrl_out_if_pkg::fuse_ctrl_out_if_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_out_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_out_if_driver and fuse_ctrl_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_out_if_driver_bfm. + `fuse_ctrl_out_if_INITIATOR_STRUCT + fuse_ctrl_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_out_if_driver and fuse_ctrl_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_out_if_driver_bfm. + `fuse_ctrl_out_if_RESPONDER_STRUCT + fuse_ctrl_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + edn_o_o <= 'bz; + intr_otp_operation_done_o_o <= 'bz; + intr_otp_error_o_o <= 'bz; + alert_tx_o_o <= 'bz; + otp_obs_o_o <= 'bz; + otp_ast_pwr_seq_o_o <= 'bz; + pwr_otp_o_o <= 'bz; + lc_otp_vendor_test_o_o <= 'bz; + lc_otp_program_o_o <= 'bz; + otp_lc_data_o_o <= 'bz; + otp_broadcast_o_o <= 'bz; + cio_test_o_o <= 'bz; + cio_test_en_o_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + otp_ext_voltage_h_io_o <= 'bz; + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_out_if_configuration_s fuse_ctrl_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_out_if_initiator_s fuse_ctrl_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_out_if_responder_s fuse_ctrl_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_out_if_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Members within the fuse_ctrl_out_if_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + initiator_struct = fuse_ctrl_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_out_if_responder_struct.xyz = edn_o_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = intr_otp_operation_done_o_i; // + // fuse_ctrl_out_if_responder_struct.xyz = intr_otp_error_o_i; // + // fuse_ctrl_out_if_responder_struct.xyz = alert_tx_o_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = otp_obs_o_i; // [7:0] + // fuse_ctrl_out_if_responder_struct.xyz = otp_ast_pwr_seq_o_i; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = pwr_otp_o_i; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = lc_otp_vendor_test_o_i; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = lc_otp_program_o_i; // [$bits(lc_otp_program_rsp_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = otp_lc_data_o_i; // [$bits(otp_lc_data_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = otp_broadcast_o_i; // [$bits(otp_broadcast_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = cio_test_o_i; // [OtpTestVectWidth-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = cio_test_en_o_i; // [OtpTestVectWidth-1:0] + // Initiator inout signals + // fuse_ctrl_out_if_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_out_if_initiator_struct.xyz; // + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_out_if_initiator_s fuse_ctrl_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_out_if_responder_s fuse_ctrl_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_out_if_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Variables within the fuse_ctrl_out_if_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // fuse_ctrl_out_if_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // edn_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(edn_pkg::edn_req_t)-1:0] + // intr_otp_operation_done_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // + // intr_otp_error_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // + // alert_tx_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // otp_obs_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [7:0] + // otp_ast_pwr_seq_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // pwr_otp_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // lc_otp_vendor_test_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // lc_otp_program_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(lc_otp_program_rsp_t)-1:0] + // otp_lc_data_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(otp_lc_data_t)-1:0] + // otp_broadcast_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(otp_broadcast_t)-1:0] + // cio_test_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [OtpTestVectWidth-1:0] + // cio_test_en_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [OtpTestVectWidth-1:0] + // Responder inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_out_if_initiator_struct.xyz; // + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_if.sv new file mode 100644 index 000000000..d1b92cdfb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_if.sv @@ -0,0 +1,134 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_out_if interface signals. +// It is instantiated once per fuse_ctrl_out_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_out_if_bus.edn_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.intr_otp_operation_done_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.intr_otp_error_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.alert_tx_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.otp_obs_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.otp_ast_pwr_seq_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.pwr_otp_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.otp_broadcast_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.otp_ext_voltage_h_io), // Agent inout +// .dut_signal_port(fuse_ctrl_out_if_bus.cio_test_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.cio_test_en_o), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_if_pkg_hdl::*; + +interface fuse_ctrl_out_if_if #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o, + inout tri intr_otp_operation_done_o, + inout tri intr_otp_error_o, + inout tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o, + inout tri [7:0] otp_obs_o, + inout tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o, + inout tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o, + inout tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o, + inout tri otp_ext_voltage_h_io, + inout tri [OtpTestVectWidth-1:0] cio_test_o, + inout tri [OtpTestVectWidth-1:0] cio_test_en_o + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input edn_o, + input intr_otp_operation_done_o, + input intr_otp_error_o, + input alert_tx_o, + input otp_obs_o, + input otp_ast_pwr_seq_o, + input pwr_otp_o, + input otp_broadcast_o, + input otp_ext_voltage_h_io, + input cio_test_o, + input cio_test_en_o + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input edn_o, + input intr_otp_operation_done_o, + input intr_otp_error_o, + input alert_tx_o, + input otp_obs_o, + input otp_ast_pwr_seq_o, + input pwr_otp_o, + input otp_broadcast_o, + inout otp_ext_voltage_h_io, + input cio_test_o, + input cio_test_en_o + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output edn_o, + output intr_otp_operation_done_o, + output intr_otp_error_o, + output alert_tx_o, + output otp_obs_o, + output otp_ast_pwr_seq_o, + output pwr_otp_o, + output otp_broadcast_o, + inout otp_ext_voltage_h_io, + output cio_test_o, + output cio_test_en_o + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_macros.svh new file mode 100644 index 000000000..79bf75fe9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_out_if_configuration class. +// + `define fuse_ctrl_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_out_if_configuration_s; + + `define fuse_ctrl_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_if_configuration_s to_struct();\ + fuse_ctrl_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_out_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_out_if_configuration_s fuse_ctrl_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_out_if_transaction class. +// + `define fuse_ctrl_out_if_MONITOR_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_if_monitor_s; + + `define fuse_ctrl_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_if_monitor_s to_monitor_struct();\ + fuse_ctrl_out_if_monitor_struct = \ + { \ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_out_if_monitor_s fuse_ctrl_out_if_monitor_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_out_if_INITIATOR_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_if_initiator_s; + + `define fuse_ctrl_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_if_initiator_s to_initiator_struct();\ + fuse_ctrl_out_if_initiator_struct = \ + {\ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_out_if_initiator_s fuse_ctrl_out_if_initiator_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_out_if_RESPONDER_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_if_responder_s; + + `define fuse_ctrl_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_if_responder_s to_responder_struct();\ + fuse_ctrl_out_if_responder_struct = \ + {\ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_if_responder_struct);\ + endfunction + + `define fuse_ctrl_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_out_if_responder_s fuse_ctrl_out_if_responder_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor.svh new file mode 100644 index 000000000..5aba5c809 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_out_if transactions observed by the +// fuse_ctrl_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_monitor #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_out_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_out_if_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_out_if_monitor #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_out_if_monitor_s fuse_ctrl_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor_bfm.sv new file mode 100644 index 000000000..e10a4b55e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor_bfm.sv @@ -0,0 +1,230 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_out_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_out_if monitor through a virtual +// interface handle in the fuse_ctrl_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_out_if_if. +// +// Input signals from the fuse_ctrl_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_out_if_macros.svh" + + +interface fuse_ctrl_out_if_monitor_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + ( fuse_ctrl_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_out_if_MONITOR_STRUCT + fuse_ctrl_out_if_monitor_s fuse_ctrl_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o_i; + tri intr_otp_operation_done_o_i; + tri intr_otp_error_o_i; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_i; + tri [7:0] otp_obs_o_i; + tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_i; + tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_i; + tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_i; + tri otp_ext_voltage_h_io_i; + tri [OtpTestVectWidth-1:0] cio_test_o_i; + tri [OtpTestVectWidth-1:0] cio_test_en_o_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign edn_o_i = bus.edn_o; + assign intr_otp_operation_done_o_i = bus.intr_otp_operation_done_o; + assign intr_otp_error_o_i = bus.intr_otp_error_o; + assign alert_tx_o_i = bus.alert_tx_o; + assign otp_obs_o_i = bus.otp_obs_o; + assign otp_ast_pwr_seq_o_i = bus.otp_ast_pwr_seq_o; + assign pwr_otp_o_i = bus.pwr_otp_o; + assign otp_broadcast_o_i = bus.otp_broadcast_o; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + assign cio_test_o_i = bus.cio_test_o; + assign cio_test_en_o_i = bus.cio_test_en_o; + + // Proxy handle to UVM monitor + fuse_ctrl_out_if_pkg::fuse_ctrl_out_if_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_out_if_configuration_s fuse_ctrl_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_out_if_monitor_s fuse_ctrl_out_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_out_if_monitor_struct.pwr_otp_o + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_out_if_monitor_struct.xyz = edn_o_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = intr_otp_operation_done_o_i; // + // fuse_ctrl_out_if_monitor_struct.xyz = intr_otp_error_o_i; // + // fuse_ctrl_out_if_monitor_struct.xyz = alert_tx_o_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = otp_obs_o_i; // [7:0] + // fuse_ctrl_out_if_monitor_struct.xyz = otp_ast_pwr_seq_o_i; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = pwr_otp_o_i; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = otp_broadcast_o_i; // [$bits(otp_broadcast_t)-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = otp_ext_voltage_h_io_i; // + // fuse_ctrl_out_if_monitor_struct.xyz = cio_test_o_i; // [OtpTestVectWidth-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = cio_test_en_o_i; // [OtpTestVectWidth-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_random_sequence.svh new file mode 100644 index 000000000..6aacd46f1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_random_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_out_if_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_out_if_random_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_out_if_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_out_if_random_sequence::body()-fuse_ctrl_out_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_out_if_driver_bfm via the sequencer and fuse_ctrl_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_responder_sequence.svh new file mode 100644 index 000000000..b82d116c6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_responder_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_out_if_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_out_if_responder_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_out_if_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_sequence_base.svh new file mode 100644 index 000000000..475fcbfc5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_sequence_base #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .RSP(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_out_if_sequence_base #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // variables + typedef fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_out_if_transaction_req_t; + fuse_ctrl_out_if_transaction_req_t req; + typedef fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_out_if_transaction_rsp_t; + fuse_ctrl_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction.svh new file mode 100644 index 000000000..110c96097 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction.svh @@ -0,0 +1,223 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_transaction #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_out_if_transaction #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_out_if_monitor and fuse_ctrl_out_if_monitor_bfm + // This struct is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_MONITOR_STRUCT + fuse_ctrl_out_if_monitor_s fuse_ctrl_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_out_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_out_if_monitor_struct. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_out_if_driver and fuse_ctrl_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_INITIATOR_STRUCT + fuse_ctrl_out_if_initiator_s fuse_ctrl_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_out_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_out_if_initiator_struct. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_out_if_driver and fuse_ctrl_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_RESPONDER_STRUCT + fuse_ctrl_out_if_responder_s fuse_ctrl_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_out_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_out_if_responder_struct. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("otp_lc_data_o:0x%x pwr_otp_o:0x%x ",otp_lc_data_o,pwr_otp_o); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.otp_lc_data_o == RHS.otp_lc_data_o) + &&(this.pwr_otp_o == RHS.pwr_otp_o) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.otp_lc_data_o = RHS.otp_lc_data_o; + this.pwr_otp_o = RHS.pwr_otp_o; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,otp_lc_data_o,"otp_lc_data_o"); + $add_attribute(transaction_view_h,pwr_otp_o,"pwr_otp_o"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction_coverage.svh new file mode 100644 index 000000000..4c40b9333 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction_coverage.svh @@ -0,0 +1,103 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_out_if transaction information using +// a covergroup named fuse_ctrl_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_transaction_coverage #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_subscriber #(.T(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_out_if_transaction_coverage #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + otp_lc_data_o: coverpoint coverage_trans.otp_lc_data_o; + pwr_otp_o: coverpoint coverage_trans.pwr_otp_o; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_out_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/yaml/fuse_ctrl_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/yaml/fuse_ctrl_out_if_interface.yaml new file mode 100644 index 000000000..dd001e21a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/yaml/fuse_ctrl_out_if_interface.yaml @@ -0,0 +1,80 @@ +uvmf: + interfaces: + fuse_ctrl_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AlertSyncOn + type: int + value: '3' + - name: RndConstLfrSeed + type: lfsr_seed_t + value: RndConstLfsrSeedDefault + - name: RndCnstLfsrPerm + type: lsfr_perm_t + value: RndCnstLfsrPermDefault + - name: MemInitFile + type: string + ports: + - dir: input + name: edn_o + reset_value: '''bz' + width: '[''$bits(edn_pkg::edn_req_t)'']' + - dir: input + name: intr_otp_operation_done_o + reset_value: '''bz' + width: '1' + - dir: input + name: intr_otp_error_o + reset_value: '''bz' + width: '1' + - dir: input + name: alert_tx_o + reset_value: '''bz' + width: '[''NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)'']' + - dir: input + name: otp_obs_o + reset_value: '''bz' + width: '8' + - dir: input + name: otp_ast_pwr_seq_o + reset_value: '''bz' + width: '[''$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)'']' + - dir: input + name: pwr_otp_o + reset_value: '''bz' + width: '[''$bits(pwrmgr_pkg::pwr_otp_rsp_t)'']' + - dir: input + name: otp_broadcast_o + reset_value: '''bz' + width: '[''$bits(otp_broadcast_t)'']' + - dir: inout + name: otp_ext_voltage_h_io + reset_value: '''bz' + width: '1' + - dir: input + name: cio_test_o + reset_value: '''bz' + width: '[''OtpTestVectWidth'']' + - dir: input + name: cio_test_en_o + reset_value: '''bz' + width: '[''OtpTestVectWidth'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: pwr_otp_o + type: pwrmgr_pkg::pwr_otp_rsp_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/.project new file mode 100644 index 000000000..c96dcb429 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/.svproject new file mode 100644 index 000000000..64d224ae5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/Makefile new file mode 100644 index 000000000..b5ee9df5a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f + +fuse_ctrl_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f + +fuse_ctrl_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f + +COMP_fuse_ctrl_out_PKG_TGT_0 = q_comp_fuse_ctrl_out_pkg +COMP_fuse_ctrl_out_PKG_TGT_1 = v_comp_fuse_ctrl_out_pkg +COMP_fuse_ctrl_out_PKG_TGT = $(COMP_fuse_ctrl_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_out_pkg: $(COMP_fuse_ctrl_out_PKG_TGT) + +q_comp_fuse_ctrl_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_out_PKG_XRTL) + +v_comp_fuse_ctrl_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_out_pkg += -I$(fuse_ctrl_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_out_pkg += $(fuse_ctrl_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/compile.do new file mode 100644 index 000000000..5fdaafcd1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile new file mode 100644 index 000000000..3ac4b243e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_out_hvl.compile + - fuse_ctrl_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo new file mode 100644 index 000000000..b4ea5985b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_out_if.sv +src/fuse_ctrl_out_driver_bfm.sv +src/fuse_ctrl_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_common.compile new file mode 100644 index 000000000..1193b2509 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f new file mode 100644 index 000000000..5be27730e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f new file mode 100644 index 000000000..fc769adb0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f new file mode 100644 index 000000000..4a7b8cc2b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hdl.compile new file mode 100644 index 000000000..2745ad2a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_out_if.sv + - src/fuse_ctrl_out_monitor_bfm.sv + - src/fuse_ctrl_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hvl.compile new file mode 100644 index 000000000..5562a204a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_out_common.compile +incdir: + - . +src: + - fuse_ctrl_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv new file mode 100644 index 000000000..afb8df957 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_out_macros.svh" + + export fuse_ctrl_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_out_typedefs.svh" + `include "src/fuse_ctrl_out_transaction.svh" + + `include "src/fuse_ctrl_out_configuration.svh" + `include "src/fuse_ctrl_out_driver.svh" + `include "src/fuse_ctrl_out_monitor.svh" + + `include "src/fuse_ctrl_out_transaction_coverage.svh" + `include "src/fuse_ctrl_out_sequence_base.svh" + `include "src/fuse_ctrl_out_random_sequence.svh" + + `include "src/fuse_ctrl_out_responder_sequence.svh" + `include "src/fuse_ctrl_out2reg_adapter.svh" + + `include "src/fuse_ctrl_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo new file mode 100644 index 000000000..4f08c9ef3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.sv new file mode 100644 index 000000000..f90777afe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.vinfo new file mode 100644 index 000000000..c55df62d8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F new file mode 100644 index 000000000..94ccd9b8b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out2reg_adapter.svh new file mode 100644 index 000000000..c13afeb59 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out2reg_adapter #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_out2reg_adapter #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h = fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_agent.svh new file mode 100644 index 000000000..64fcd3c17 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_agent #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_out_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .DRIVER_T(fuse_ctrl_out_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_T(fuse_ctrl_out_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .COVERAGE_T(fuse_ctrl_out_transaction_coverage #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_out_agent #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_configuration.svh new file mode 100644 index 000000000..52338d1e5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_configuration #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_out_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_out_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_out_configuration #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_CONFIGURATION_STRUCT + fuse_ctrl_out_configuration_s fuse_ctrl_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_out_configuration_struct. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_out_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_out_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", agent_path, interface_name, AlertSyncOn ,RndConstLfrSeed ,RndCnstLfsrPerm ,MemInitFile ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_out_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver.svh new file mode 100644 index 000000000..ec2f7b4ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_driver #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_out_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_out_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .REQ(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .RSP(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_out_driver #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_out_driver_bfm. +`fuse_ctrl_out_INITIATOR_STRUCT + fuse_ctrl_out_initiator_s fuse_ctrl_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_out_driver_bfm. +`fuse_ctrl_out_RESPONDER_STRUCT + fuse_ctrl_out_responder_s fuse_ctrl_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver_bfm.sv new file mode 100644 index 000000000..55c3fae58 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver_bfm.sv @@ -0,0 +1,382 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_out signal driving. It is +// accessed by the uvm fuse_ctrl_out driver through a virtual interface +// handle in the fuse_ctrl_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_out_if. +// +// Input signals from the fuse_ctrl_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_pkg_hdl::*; +`include "src/fuse_ctrl_out_macros.svh" + +interface fuse_ctrl_out_driver_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + (fuse_ctrl_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o_i; + reg [$bits(edn_pkg::edn_req_t)-1:0] edn_o_o = 'bz; + tri intr_otp_operation_done_o_i; + reg intr_otp_operation_done_o_o = 'bz; + tri intr_otp_error_o_i; + reg intr_otp_error_o_o = 'bz; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_i; + reg [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_o = 'bz; + tri [7:0] otp_obs_o_i; + reg [7:0] otp_obs_o_o = 'bz; + tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_i; + reg [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_o = 'bz; + tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_i; + reg [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_o = 'bz; + tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_i; + reg [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_o = 'bz; + tri [OtpTestVectWidth-1:0] cio_test_o_i; + reg [OtpTestVectWidth-1:0] cio_test_o_o = 'bz; + tri [OtpTestVectWidth-1:0] cio_test_en_o_i; + reg [OtpTestVectWidth-1:0] cio_test_en_o_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + tri otp_ext_voltage_h_io_i; + reg otp_ext_voltage_h_io_o = 'bz; + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign edn_o_i = bus.edn_o; + assign bus.edn_o = (initiator_responder == RESPONDER) ? edn_o_o : 'bz; + assign intr_otp_operation_done_o_i = bus.intr_otp_operation_done_o; + assign bus.intr_otp_operation_done_o = (initiator_responder == RESPONDER) ? intr_otp_operation_done_o_o : 'bz; + assign intr_otp_error_o_i = bus.intr_otp_error_o; + assign bus.intr_otp_error_o = (initiator_responder == RESPONDER) ? intr_otp_error_o_o : 'bz; + assign alert_tx_o_i = bus.alert_tx_o; + assign bus.alert_tx_o = (initiator_responder == RESPONDER) ? alert_tx_o_o : 'bz; + assign otp_obs_o_i = bus.otp_obs_o; + assign bus.otp_obs_o = (initiator_responder == RESPONDER) ? otp_obs_o_o : 'bz; + assign otp_ast_pwr_seq_o_i = bus.otp_ast_pwr_seq_o; + assign bus.otp_ast_pwr_seq_o = (initiator_responder == RESPONDER) ? otp_ast_pwr_seq_o_o : 'bz; + assign pwr_otp_o_i = bus.pwr_otp_o; + assign bus.pwr_otp_o = (initiator_responder == RESPONDER) ? pwr_otp_o_o : 'bz; + assign otp_broadcast_o_i = bus.otp_broadcast_o; + assign bus.otp_broadcast_o = (initiator_responder == RESPONDER) ? otp_broadcast_o_o : 'bz; + assign cio_test_o_i = bus.cio_test_o; + assign bus.cio_test_o = (initiator_responder == RESPONDER) ? cio_test_o_o : 'bz; + assign cio_test_en_o_i = bus.cio_test_en_o; + assign bus.cio_test_en_o = (initiator_responder == RESPONDER) ? cio_test_en_o_o : 'bz; + + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.otp_ext_voltage_h_io = otp_ext_voltage_h_io_o; + + // Proxy handle to UVM driver + fuse_ctrl_out_pkg::fuse_ctrl_out_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_out_driver_bfm. + `fuse_ctrl_out_INITIATOR_STRUCT + fuse_ctrl_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_out_driver_bfm. + `fuse_ctrl_out_RESPONDER_STRUCT + fuse_ctrl_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + edn_o_o <= 'bz; + intr_otp_operation_done_o_o <= 'bz; + intr_otp_error_o_o <= 'bz; + alert_tx_o_o <= 'bz; + otp_obs_o_o <= 'bz; + otp_ast_pwr_seq_o_o <= 'bz; + pwr_otp_o_o <= 'bz; + lc_otp_vendor_test_o_o <= 'bz; + lc_otp_program_o_o <= 'bz; + otp_lc_data_o_o <= 'bz; + otp_broadcast_o_o <= 'bz; + cio_test_o_o <= 'bz; + cio_test_en_o_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + otp_ext_voltage_h_io_o <= 'bz; + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_out_configuration_s fuse_ctrl_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_out_initiator_s fuse_ctrl_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_out_responder_s fuse_ctrl_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_out_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Members within the fuse_ctrl_out_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + initiator_struct = fuse_ctrl_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_out_responder_struct.xyz = edn_o_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = intr_otp_operation_done_o_i; // + // fuse_ctrl_out_responder_struct.xyz = intr_otp_error_o_i; // + // fuse_ctrl_out_responder_struct.xyz = alert_tx_o_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = otp_obs_o_i; // [7:0] + // fuse_ctrl_out_responder_struct.xyz = otp_ast_pwr_seq_o_i; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = pwr_otp_o_i; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = lc_otp_vendor_test_o_i; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = lc_otp_program_o_i; // [$bits(lc_otp_program_rsp_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = otp_lc_data_o_i; // [$bits(otp_lc_data_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = otp_broadcast_o_i; // [$bits(otp_broadcast_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = cio_test_o_i; // [OtpTestVectWidth-1:0] + // fuse_ctrl_out_responder_struct.xyz = cio_test_en_o_i; // [OtpTestVectWidth-1:0] + // Initiator inout signals + // fuse_ctrl_out_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_out_initiator_struct.xyz; // + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_out_initiator_s fuse_ctrl_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_out_responder_s fuse_ctrl_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_out_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Variables within the fuse_ctrl_out_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // fuse_ctrl_out_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // edn_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(edn_pkg::edn_req_t)-1:0] + // intr_otp_operation_done_o_o <= fuse_ctrl_out_initiator_struct.xyz; // + // intr_otp_error_o_o <= fuse_ctrl_out_initiator_struct.xyz; // + // alert_tx_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // otp_obs_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [7:0] + // otp_ast_pwr_seq_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // pwr_otp_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // lc_otp_vendor_test_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // lc_otp_program_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(lc_otp_program_rsp_t)-1:0] + // otp_lc_data_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(otp_lc_data_t)-1:0] + // otp_broadcast_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(otp_broadcast_t)-1:0] + // cio_test_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [OtpTestVectWidth-1:0] + // cio_test_en_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [OtpTestVectWidth-1:0] + // Responder inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_out_initiator_struct.xyz; // + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv new file mode 100644 index 000000000..f1cf7efcc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv @@ -0,0 +1,134 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_out interface signals. +// It is instantiated once per fuse_ctrl_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_out_bus.edn_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.intr_otp_operation_done_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.intr_otp_error_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.alert_tx_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.otp_obs_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.otp_ast_pwr_seq_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.pwr_otp_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.otp_broadcast_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.otp_ext_voltage_h_io), // Agent inout +// .dut_signal_port(fuse_ctrl_out_bus.cio_test_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.cio_test_en_o), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_pkg_hdl::*; + +interface fuse_ctrl_out_if #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o, + inout tri intr_otp_operation_done_o, + inout tri intr_otp_error_o, + inout tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o, + inout tri [7:0] otp_obs_o, + inout tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o, + inout tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o, + inout tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o, + inout tri otp_ext_voltage_h_io, + inout tri [OtpTestVectWidth-1:0] cio_test_o, + inout tri [OtpTestVectWidth-1:0] cio_test_en_o + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input edn_o, + input intr_otp_operation_done_o, + input intr_otp_error_o, + input alert_tx_o, + input otp_obs_o, + input otp_ast_pwr_seq_o, + input pwr_otp_o, + input otp_broadcast_o, + input otp_ext_voltage_h_io, + input cio_test_o, + input cio_test_en_o + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input edn_o, + input intr_otp_operation_done_o, + input intr_otp_error_o, + input alert_tx_o, + input otp_obs_o, + input otp_ast_pwr_seq_o, + input pwr_otp_o, + input otp_broadcast_o, + inout otp_ext_voltage_h_io, + input cio_test_o, + input cio_test_en_o + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output edn_o, + output intr_otp_operation_done_o, + output intr_otp_error_o, + output alert_tx_o, + output otp_obs_o, + output otp_ast_pwr_seq_o, + output pwr_otp_o, + output otp_broadcast_o, + inout otp_ext_voltage_h_io, + output cio_test_o, + output cio_test_en_o + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_macros.svh new file mode 100644 index 000000000..3002819f6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_out_configuration class. +// + `define fuse_ctrl_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_out_configuration_s; + + `define fuse_ctrl_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_configuration_s to_struct();\ + fuse_ctrl_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_out_configuration_s fuse_ctrl_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_out_transaction class. +// + `define fuse_ctrl_out_MONITOR_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_monitor_s; + + `define fuse_ctrl_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_monitor_s to_monitor_struct();\ + fuse_ctrl_out_monitor_struct = \ + { \ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_out_monitor_s fuse_ctrl_out_monitor_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_out_INITIATOR_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_initiator_s; + + `define fuse_ctrl_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_initiator_s to_initiator_struct();\ + fuse_ctrl_out_initiator_struct = \ + {\ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_out_initiator_s fuse_ctrl_out_initiator_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_out_RESPONDER_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_responder_s; + + `define fuse_ctrl_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_responder_s to_responder_struct();\ + fuse_ctrl_out_responder_struct = \ + {\ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_responder_struct);\ + endfunction + + `define fuse_ctrl_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_out_responder_s fuse_ctrl_out_responder_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor.svh new file mode 100644 index 000000000..9f967f63b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_out transactions observed by the +// fuse_ctrl_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_monitor #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_out_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_out_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_out_monitor #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_out_monitor_s fuse_ctrl_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor_bfm.sv new file mode 100644 index 000000000..7c7d66a2c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor_bfm.sv @@ -0,0 +1,230 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_out monitor through a virtual +// interface handle in the fuse_ctrl_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_out_if. +// +// Input signals from the fuse_ctrl_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_pkg_hdl::*; +`include "src/fuse_ctrl_out_macros.svh" + + +interface fuse_ctrl_out_monitor_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + ( fuse_ctrl_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_out_MONITOR_STRUCT + fuse_ctrl_out_monitor_s fuse_ctrl_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o_i; + tri intr_otp_operation_done_o_i; + tri intr_otp_error_o_i; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_i; + tri [7:0] otp_obs_o_i; + tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_i; + tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_i; + tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_i; + tri otp_ext_voltage_h_io_i; + tri [OtpTestVectWidth-1:0] cio_test_o_i; + tri [OtpTestVectWidth-1:0] cio_test_en_o_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign edn_o_i = bus.edn_o; + assign intr_otp_operation_done_o_i = bus.intr_otp_operation_done_o; + assign intr_otp_error_o_i = bus.intr_otp_error_o; + assign alert_tx_o_i = bus.alert_tx_o; + assign otp_obs_o_i = bus.otp_obs_o; + assign otp_ast_pwr_seq_o_i = bus.otp_ast_pwr_seq_o; + assign pwr_otp_o_i = bus.pwr_otp_o; + assign otp_broadcast_o_i = bus.otp_broadcast_o; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + assign cio_test_o_i = bus.cio_test_o; + assign cio_test_en_o_i = bus.cio_test_en_o; + + // Proxy handle to UVM monitor + fuse_ctrl_out_pkg::fuse_ctrl_out_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_out_configuration_s fuse_ctrl_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_out_monitor_s fuse_ctrl_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_out_monitor_struct.pwr_otp_o + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_out_monitor_struct.xyz = edn_o_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = intr_otp_operation_done_o_i; // + // fuse_ctrl_out_monitor_struct.xyz = intr_otp_error_o_i; // + // fuse_ctrl_out_monitor_struct.xyz = alert_tx_o_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = otp_obs_o_i; // [7:0] + // fuse_ctrl_out_monitor_struct.xyz = otp_ast_pwr_seq_o_i; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = pwr_otp_o_i; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = otp_broadcast_o_i; // [$bits(otp_broadcast_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = otp_ext_voltage_h_io_i; // + // fuse_ctrl_out_monitor_struct.xyz = cio_test_o_i; // [OtpTestVectWidth-1:0] + // fuse_ctrl_out_monitor_struct.xyz = cio_test_en_o_i; // [OtpTestVectWidth-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_random_sequence.svh new file mode 100644 index 000000000..fa517894b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_random_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_out_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_out_random_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_out_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_out_random_sequence::body()-fuse_ctrl_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_out_driver_bfm via the sequencer and fuse_ctrl_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_responder_sequence.svh new file mode 100644 index 000000000..2dfe53b5d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_responder_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_out_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_out_responder_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_out_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_sequence_base.svh new file mode 100644 index 000000000..d115821b5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_sequence_base #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .RSP(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_out_sequence_base #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // variables + typedef fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_out_transaction_req_t; + fuse_ctrl_out_transaction_req_t req; + typedef fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_out_transaction_rsp_t; + fuse_ctrl_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction.svh new file mode 100644 index 000000000..1da32f283 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction.svh @@ -0,0 +1,223 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_transaction #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_out_transaction #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_out_monitor and fuse_ctrl_out_monitor_bfm + // This struct is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_MONITOR_STRUCT + fuse_ctrl_out_monitor_s fuse_ctrl_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_out_monitor_struct. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_out_driver_bfm. + // This struct is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_INITIATOR_STRUCT + fuse_ctrl_out_initiator_s fuse_ctrl_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_out_initiator_struct. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_out_driver_bfm. + // This struct is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_RESPONDER_STRUCT + fuse_ctrl_out_responder_s fuse_ctrl_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_out_responder_struct. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("otp_lc_data_o:0x%x pwr_otp_o:0x%x ",otp_lc_data_o,pwr_otp_o); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.otp_lc_data_o == RHS.otp_lc_data_o) + &&(this.pwr_otp_o == RHS.pwr_otp_o) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.otp_lc_data_o = RHS.otp_lc_data_o; + this.pwr_otp_o = RHS.pwr_otp_o; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,otp_lc_data_o,"otp_lc_data_o"); + $add_attribute(transaction_view_h,pwr_otp_o,"pwr_otp_o"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction_coverage.svh new file mode 100644 index 000000000..2233f6d7e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction_coverage.svh @@ -0,0 +1,103 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_out transaction information using +// a covergroup named fuse_ctrl_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_transaction_coverage #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_subscriber #(.T(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_out_transaction_coverage #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + otp_lc_data_o: coverpoint coverage_trans.otp_lc_data_o; + pwr_otp_o: coverpoint coverage_trans.pwr_otp_o; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/yaml/fuse_ctrl_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/yaml/fuse_ctrl_out_interface.yaml new file mode 100644 index 000000000..eb181d879 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_out_pkg/yaml/fuse_ctrl_out_interface.yaml @@ -0,0 +1,80 @@ +uvmf: + interfaces: + fuse_ctrl_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AlertSyncOn + type: int + value: '3' + - name: RndConstLfrSeed + type: lfsr_seed_t + value: RndConstLfsrSeedDefault + - name: RndCnstLfsrPerm + type: lsfr_perm_t + value: RndCnstLfsrPermDefault + - name: MemInitFile + type: string + ports: + - dir: input + name: edn_o + reset_value: '''bz' + width: '[''$bits(edn_pkg::edn_req_t)'']' + - dir: input + name: intr_otp_operation_done_o + reset_value: '''bz' + width: '1' + - dir: input + name: intr_otp_error_o + reset_value: '''bz' + width: '1' + - dir: input + name: alert_tx_o + reset_value: '''bz' + width: '[''NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)'']' + - dir: input + name: otp_obs_o + reset_value: '''bz' + width: '8' + - dir: input + name: otp_ast_pwr_seq_o + reset_value: '''bz' + width: '[''$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)'']' + - dir: input + name: pwr_otp_o + reset_value: '''bz' + width: '[''$bits(pwrmgr_pkg::pwr_otp_rsp_t)'']' + - dir: input + name: otp_broadcast_o + reset_value: '''bz' + width: '[''$bits(otp_broadcast_t)'']' + - dir: inout + name: otp_ext_voltage_h_io + reset_value: '''bz' + width: '1' + - dir: input + name: cio_test_o + reset_value: '''bz' + width: '[''OtpTestVectWidth'']' + - dir: input + name: cio_test_en_o + reset_value: '''bz' + width: '[''OtpTestVectWidth'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: pwr_otp_o + type: pwrmgr_pkg::pwr_otp_rsp_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.project new file mode 100644 index 000000000..931d0548e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..e6e385ac0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..7ce58a365 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f + +fuse_ctrl_prim_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f + +fuse_ctrl_prim_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_read_if_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_read_if_pkg +COMP_fuse_ctrl_prim_axi_read_if_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_read_if_pkg +COMP_fuse_ctrl_prim_axi_read_if_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_read_if_pkg: $(COMP_fuse_ctrl_prim_axi_read_if_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_read_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_read_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_if_pkg += -I$(fuse_ctrl_prim_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_if_pkg += $(fuse_ctrl_prim_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..5a8d38b1e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if.compile new file mode 100644 index 000000000..ce142767a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_read_if_hvl.compile + - fuse_ctrl_prim_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..5ecca257f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_read_if_if.sv +src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv +src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_common.compile new file mode 100644 index 000000000..f7bbff4b6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..3be99c24b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..f66b0809e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..0f9b2fdb7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hdl.compile new file mode 100644 index 000000000..4cb1da005 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_read_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_read_if_if.sv + - src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hvl.compile new file mode 100644 index 000000000..bd9e9530a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_read_if_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.sv new file mode 100644 index 000000000..39a398f84 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_read_if_macros.svh" + + export fuse_ctrl_prim_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_read_if_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_read_if_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_read_if_configuration.svh" + `include "src/fuse_ctrl_prim_axi_read_if_driver.svh" + `include "src/fuse_ctrl_prim_axi_read_if_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_read_if_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_read_if_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_read_if_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_read_if_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_read_if2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..9ca839db8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..150746c87 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_read_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..3b7c038b4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..6e979354a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..850d7d4dd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_agent.svh new file mode 100644 index 000000000..21263a19c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_configuration.svh new file mode 100644 index 000000000..b51d7b8f0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_read_if_configuration_s fuse_ctrl_prim_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_read_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_if_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_read_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver.svh new file mode 100644 index 000000000..e414a4883 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. +`fuse_ctrl_prim_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_if_initiator_s fuse_ctrl_prim_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. +`fuse_ctrl_prim_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_if_responder_s fuse_ctrl_prim_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..c519b223f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_read_if signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_read_if driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_read_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_if_macros.svh" + +interface fuse_ctrl_prim_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_read_if_pkg::fuse_ctrl_prim_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_read_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. + `fuse_ctrl_prim_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. + `fuse_ctrl_prim_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_read_if_configuration_s fuse_ctrl_prim_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_read_if_initiator_s fuse_ctrl_prim_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_read_if_responder_s fuse_ctrl_prim_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_read_if_initiator_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Members within the fuse_ctrl_prim_axi_read_if_responder_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + initiator_struct = fuse_ctrl_prim_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_read_if_initiator_s fuse_ctrl_prim_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_read_if_responder_s fuse_ctrl_prim_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_read_if_initiator_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Variables within the fuse_ctrl_prim_axi_read_if_responder_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arlock_i; // + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_if.sv new file mode 100644 index 000000000..e1e4911a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_read_if interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_read_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_if_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_macros.svh new file mode 100644 index 000000000..9aa71c06e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_read_if_configuration class. +// + `define fuse_ctrl_prim_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_read_if_configuration_s; + + `define fuse_ctrl_prim_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_if_configuration_s to_struct();\ + fuse_ctrl_prim_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_read_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_read_if_configuration_s fuse_ctrl_prim_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_read_if_transaction class. +// + `define fuse_ctrl_prim_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_if_monitor_s; + + `define fuse_ctrl_prim_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_if_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_read_if_monitor_struct = \ + { \ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_read_if_monitor_s fuse_ctrl_prim_axi_read_if_monitor_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_if_initiator_s; + + `define fuse_ctrl_prim_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_if_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_read_if_initiator_struct = \ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_read_if_initiator_s fuse_ctrl_prim_axi_read_if_initiator_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_if_responder_s; + + `define fuse_ctrl_prim_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_if_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_read_if_responder_struct = \ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_if_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_read_if_responder_s fuse_ctrl_prim_axi_read_if_responder_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor.svh new file mode 100644 index 000000000..bf0c76c81 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_read_if transactions observed by the +// fuse_ctrl_prim_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_read_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_read_if_monitor_s fuse_ctrl_prim_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..bed13faf6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_read_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_read_if monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_read_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_if_macros.svh" + + +interface fuse_ctrl_prim_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_read_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_if_monitor_s fuse_ctrl_prim_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_read_if_pkg::fuse_ctrl_prim_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_read_if_configuration_s fuse_ctrl_prim_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_read_if_monitor_s fuse_ctrl_prim_axi_read_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_araddr + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arvalid + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arburst + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arsize + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arlen + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_aruser + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arid + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arlock + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..bd8b0a768 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_read_if_random_sequence::body()-fuse_ctrl_prim_axi_read_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_read_if_driver_bfm via the sequencer and fuse_ctrl_prim_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..dd96f25d6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..0d10545bd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_if_transaction_req_t; + fuse_ctrl_prim_axi_read_if_transaction_req_t req; + typedef fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_if_transaction_rsp_t; + fuse_ctrl_prim_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction.svh new file mode 100644 index 000000000..f4f6cb786 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] prim_araddr ; + logic prim_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + logic [2:0] prim_arsize ; + logic [7:0] prim_arlen ; + logic [UW-1:0] prim_aruser ; + logic [IW-1:0] prim_arid ; + logic prim_arlock ; + logic prim_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_read_if_monitor and fuse_ctrl_prim_axi_read_if_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_if_monitor_s fuse_ctrl_prim_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_if_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_if_initiator_s fuse_ctrl_prim_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_if_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_if_responder_s fuse_ctrl_prim_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_if_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_araddr:0x%x prim_arvalid:0x%x prim_arburst:0x%x prim_arsize:0x%x prim_arlen:0x%x prim_aruser:0x%x prim_arid:0x%x prim_arlock:0x%x prim_rready:0x%x ",prim_araddr,prim_arvalid,prim_arburst,prim_arsize,prim_arlen,prim_aruser,prim_arid,prim_arlock,prim_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_araddr = RHS.prim_araddr; + this.prim_arvalid = RHS.prim_arvalid; + this.prim_arburst = RHS.prim_arburst; + this.prim_arsize = RHS.prim_arsize; + this.prim_arlen = RHS.prim_arlen; + this.prim_aruser = RHS.prim_aruser; + this.prim_arid = RHS.prim_arid; + this.prim_arlock = RHS.prim_arlock; + this.prim_rready = RHS.prim_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_araddr,"prim_araddr"); + $add_attribute(transaction_view_h,prim_arvalid,"prim_arvalid"); + $add_attribute(transaction_view_h,prim_arburst,"prim_arburst"); + $add_attribute(transaction_view_h,prim_arsize,"prim_arsize"); + $add_attribute(transaction_view_h,prim_arlen,"prim_arlen"); + $add_attribute(transaction_view_h,prim_aruser,"prim_aruser"); + $add_attribute(transaction_view_h,prim_arid,"prim_arid"); + $add_attribute(transaction_view_h,prim_arlock,"prim_arlock"); + $add_attribute(transaction_view_h,prim_rready,"prim_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..283a0b24c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_read_if transaction information using +// a covergroup named fuse_ctrl_prim_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_araddr: coverpoint coverage_trans.prim_araddr; + prim_arvalid: coverpoint coverage_trans.prim_arvalid; + prim_arburst: coverpoint coverage_trans.prim_arburst; + prim_arsize: coverpoint coverage_trans.prim_arsize; + prim_arlen: coverpoint coverage_trans.prim_arlen; + prim_aruser: coverpoint coverage_trans.prim_aruser; + prim_arid: coverpoint coverage_trans.prim_arid; + prim_arlock: coverpoint coverage_trans.prim_arlock; + prim_rready: coverpoint coverage_trans.prim_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_read_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/yaml/fuse_ctrl_prim_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/yaml/fuse_ctrl_prim_axi_read_if_interface.yaml new file mode 100644 index 000000000..a55568558 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/yaml/fuse_ctrl_prim_axi_read_if_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: prim_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.project new file mode 100644 index 000000000..e3c0c4ae5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_read_in_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.svproject new file mode 100644 index 000000000..fef449edc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/Makefile new file mode 100644 index 000000000..65765f4e1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_read_in_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_read_in_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hvl.f + +fuse_ctrl_prim_axi_read_in_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hdl.f + +fuse_ctrl_prim_axi_read_in_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_read_in_if_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_read_in_if_pkg +COMP_fuse_ctrl_prim_axi_read_in_if_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_read_in_if_pkg +COMP_fuse_ctrl_prim_axi_read_in_if_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_read_in_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_read_in_if_pkg: $(COMP_fuse_ctrl_prim_axi_read_in_if_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_read_in_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_read_in_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_read_in_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_in_if_pkg += -I$(fuse_ctrl_prim_axi_read_in_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_in_if_pkg += $(fuse_ctrl_prim_axi_read_in_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_in_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_read_in_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_in_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_in_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/compile.do new file mode 100644 index 000000000..a0e911399 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_read_in_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if.compile new file mode 100644 index 000000000..43fd9c4de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_read_in_if_hvl.compile + - fuse_ctrl_prim_axi_read_in_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_bfm.vinfo new file mode 100644 index 000000000..395fd9b15 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_read_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_read_in_if_if.sv +src/fuse_ctrl_prim_axi_read_in_if_driver_bfm.sv +src/fuse_ctrl_prim_axi_read_in_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_common.compile new file mode 100644 index 000000000..906b7e2e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hdl.f new file mode 100644 index 000000000..9cdf065b2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hvl.f new file mode 100644 index 000000000..2450d1346 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_xrtl.f new file mode 100644 index 000000000..5634d3c6c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hdl.compile new file mode 100644 index 000000000..1483fae51 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_read_in_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_read_in_if_if.sv + - src/fuse_ctrl_prim_axi_read_in_if_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_read_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hvl.compile new file mode 100644 index 000000000..76c6ba103 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_read_in_if_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_read_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.sv new file mode 100644 index 000000000..41e089ed4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_in_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_read_in_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_read_in_if_macros.svh" + + export fuse_ctrl_prim_axi_read_in_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_read_in_if_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_read_in_if_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_if_configuration.svh" + `include "src/fuse_ctrl_prim_axi_read_in_if_driver.svh" + `include "src/fuse_ctrl_prim_axi_read_in_if_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_if_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_read_in_if_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_read_in_if_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_if_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_read_in_if2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.vinfo new file mode 100644 index 000000000..2cf3cfaf1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_read_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_read_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv new file mode 100644 index 000000000..9a998627f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_in_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_read_in_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_read_in_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.vinfo new file mode 100644 index 000000000..955dc6c9b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_sve.F new file mode 100644 index 000000000..bb7219efe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if2reg_adapter.svh new file mode 100644 index 000000000..573953654 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_read_in_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_read_in_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_read_in_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_agent.svh new file mode 100644 index 000000000..9780962c5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_read_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_read_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_read_in_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_configuration.svh new file mode 100644 index 000000000..efaafca0c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_read_in_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_read_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_read_in_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_read_in_if_configuration_s fuse_ctrl_prim_axi_read_in_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_read_in_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_if_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_read_in_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_read_in_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_read_in_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_read_in_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_in_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver.svh new file mode 100644 index 000000000..cc47e681a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_read_in_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_read_in_if_driver and fuse_ctrl_prim_axi_read_in_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_read_in_if_driver_bfm. +`fuse_ctrl_prim_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_in_if_initiator_s fuse_ctrl_prim_axi_read_in_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_read_in_if_driver and fuse_ctrl_prim_axi_read_in_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_read_in_if_driver_bfm. +`fuse_ctrl_prim_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_in_if_responder_s fuse_ctrl_prim_axi_read_in_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_read_in_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_read_in_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_read_in_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_read_in_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver_bfm.sv new file mode 100644 index 000000000..f1542cfed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_read_in_if signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_read_in_if driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_read_in_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_read_in_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_read_in_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_in_if_macros.svh" + +interface fuse_ctrl_prim_axi_read_in_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_read_in_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_in_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_read_in_if_pkg::fuse_ctrl_prim_axi_read_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_read_in_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_read_in_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_in_if_driver and fuse_ctrl_prim_axi_read_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_in_if_driver_bfm. + `fuse_ctrl_prim_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_in_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_read_in_if_driver and fuse_ctrl_prim_axi_read_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_in_if_driver_bfm. + `fuse_ctrl_prim_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_in_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_read_in_if_configuration_s fuse_ctrl_prim_axi_read_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_read_in_if_initiator_s fuse_ctrl_prim_axi_read_in_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_read_in_if_responder_s fuse_ctrl_prim_axi_read_in_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_read_in_if_initiator_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Members within the fuse_ctrl_prim_axi_read_in_if_responder_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + initiator_struct = fuse_ctrl_prim_axi_read_in_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_read_in_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_read_in_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_read_in_if_initiator_s fuse_ctrl_prim_axi_read_in_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_read_in_if_responder_s fuse_ctrl_prim_axi_read_in_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_read_in_if_initiator_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Variables within the fuse_ctrl_prim_axi_read_in_if_responder_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = arlock_i; // + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_read_in_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_read_in_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_if.sv new file mode 100644 index 000000000..b301c7050 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_read_in_if interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_read_in_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_read_in_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_read_in_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_in_if_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_read_in_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_macros.svh new file mode 100644 index 000000000..8ae1c0f22 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_read_in_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_read_in_if_configuration class. +// + `define fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_read_in_if_configuration_s; + + `define fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_if_configuration_s to_struct();\ + fuse_ctrl_prim_axi_read_in_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_read_in_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_read_in_if_configuration_s fuse_ctrl_prim_axi_read_in_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_read_in_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_read_in_if_transaction class. +// + `define fuse_ctrl_prim_axi_read_in_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_in_if_monitor_s; + + `define fuse_ctrl_prim_axi_read_in_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_if_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_read_in_if_monitor_struct = \ + { \ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_in_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_read_in_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_read_in_if_monitor_s fuse_ctrl_prim_axi_read_in_if_monitor_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_in_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_read_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_in_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_in_if_initiator_s; + + `define fuse_ctrl_prim_axi_read_in_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_if_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_read_in_if_initiator_struct = \ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_in_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_in_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_read_in_if_initiator_s fuse_ctrl_prim_axi_read_in_if_initiator_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_in_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_read_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_in_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_in_if_responder_s; + + `define fuse_ctrl_prim_axi_read_in_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_if_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_read_in_if_responder_struct = \ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_in_if_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_in_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_read_in_if_responder_s fuse_ctrl_prim_axi_read_in_if_responder_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_in_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor.svh new file mode 100644 index 000000000..b6411afc9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_read_in_if transactions observed by the +// fuse_ctrl_prim_axi_read_in_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_read_in_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_read_in_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_read_in_if_monitor_s fuse_ctrl_prim_axi_read_in_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_read_in_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor_bfm.sv new file mode 100644 index 000000000..96ecff71c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_read_in_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_read_in_if monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_read_in_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_read_in_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_read_in_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_in_if_macros.svh" + + +interface fuse_ctrl_prim_axi_read_in_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_read_in_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_in_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_read_in_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_in_if_monitor_s fuse_ctrl_prim_axi_read_in_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_read_in_if_pkg::fuse_ctrl_prim_axi_read_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_read_in_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_read_in_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_read_in_if_configuration_s fuse_ctrl_prim_axi_read_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_read_in_if_monitor_s fuse_ctrl_prim_axi_read_in_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_araddr + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_arvalid + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_arburst + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_arsize + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_arlen + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_aruser + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_arid + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_arlock + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_random_sequence.svh new file mode 100644 index 000000000..323a17c7d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_read_in_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_read_in_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_read_in_if_random_sequence::body()-fuse_ctrl_prim_axi_read_in_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_read_in_if_driver_bfm via the sequencer and fuse_ctrl_prim_axi_read_in_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_read_in_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_responder_sequence.svh new file mode 100644 index 000000000..8005d684e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_read_in_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_sequence_base.svh new file mode 100644 index 000000000..7642d22ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_in_if_transaction_req_t; + fuse_ctrl_prim_axi_read_in_if_transaction_req_t req; + typedef fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_in_if_transaction_rsp_t; + fuse_ctrl_prim_axi_read_in_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_read_in_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_read_in_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction.svh new file mode 100644 index 000000000..ed0bed0fc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_read_in_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] prim_araddr ; + logic prim_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + logic [2:0] prim_arsize ; + logic [7:0] prim_arlen ; + logic [UW-1:0] prim_aruser ; + logic [IW-1:0] prim_arid ; + logic prim_arlock ; + logic prim_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_read_in_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_read_in_if_monitor and fuse_ctrl_prim_axi_read_in_if_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_in_if_monitor_s fuse_ctrl_prim_axi_read_in_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_in_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_if_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_in_if_driver and fuse_ctrl_prim_axi_read_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_in_if_initiator_s fuse_ctrl_prim_axi_read_in_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_in_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_if_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_read_in_if_driver and fuse_ctrl_prim_axi_read_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_in_if_responder_s fuse_ctrl_prim_axi_read_in_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_in_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_if_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_araddr:0x%x prim_arvalid:0x%x prim_arburst:0x%x prim_arsize:0x%x prim_arlen:0x%x prim_aruser:0x%x prim_arid:0x%x prim_arlock:0x%x prim_rready:0x%x ",prim_araddr,prim_arvalid,prim_arburst,prim_arsize,prim_arlen,prim_aruser,prim_arid,prim_arlock,prim_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_araddr = RHS.prim_araddr; + this.prim_arvalid = RHS.prim_arvalid; + this.prim_arburst = RHS.prim_arburst; + this.prim_arsize = RHS.prim_arsize; + this.prim_arlen = RHS.prim_arlen; + this.prim_aruser = RHS.prim_aruser; + this.prim_arid = RHS.prim_arid; + this.prim_arlock = RHS.prim_arlock; + this.prim_rready = RHS.prim_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_read_in_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_araddr,"prim_araddr"); + $add_attribute(transaction_view_h,prim_arvalid,"prim_arvalid"); + $add_attribute(transaction_view_h,prim_arburst,"prim_arburst"); + $add_attribute(transaction_view_h,prim_arsize,"prim_arsize"); + $add_attribute(transaction_view_h,prim_arlen,"prim_arlen"); + $add_attribute(transaction_view_h,prim_aruser,"prim_aruser"); + $add_attribute(transaction_view_h,prim_arid,"prim_arid"); + $add_attribute(transaction_view_h,prim_arlock,"prim_arlock"); + $add_attribute(transaction_view_h,prim_rready,"prim_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction_coverage.svh new file mode 100644 index 000000000..59ee6af33 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_read_in_if transaction information using +// a covergroup named fuse_ctrl_prim_axi_read_in_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_read_in_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_araddr: coverpoint coverage_trans.prim_araddr; + prim_arvalid: coverpoint coverage_trans.prim_arvalid; + prim_arburst: coverpoint coverage_trans.prim_arburst; + prim_arsize: coverpoint coverage_trans.prim_arsize; + prim_arlen: coverpoint coverage_trans.prim_arlen; + prim_aruser: coverpoint coverage_trans.prim_aruser; + prim_arid: coverpoint coverage_trans.prim_arid; + prim_arlock: coverpoint coverage_trans.prim_arlock; + prim_rready: coverpoint coverage_trans.prim_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_read_in_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_read_in_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_in_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_read_in_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/yaml/fuse_ctrl_prim_axi_read_in_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/yaml/fuse_ctrl_prim_axi_read_in_if_interface.yaml new file mode 100644 index 000000000..8ef041734 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/yaml/fuse_ctrl_prim_axi_read_in_if_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_read_in_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: prim_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.project new file mode 100644 index 000000000..d0dba887e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_read_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.svproject new file mode 100644 index 000000000..7f5e878c7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/Makefile new file mode 100644 index 000000000..ff7476558 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_read_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_read_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hvl.f + +fuse_ctrl_prim_axi_read_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hdl.f + +fuse_ctrl_prim_axi_read_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_read_in_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_read_in_pkg +COMP_fuse_ctrl_prim_axi_read_in_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_read_in_pkg +COMP_fuse_ctrl_prim_axi_read_in_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_read_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_read_in_pkg: $(COMP_fuse_ctrl_prim_axi_read_in_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_read_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_read_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_read_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_read_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_read_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_in_pkg += -I$(fuse_ctrl_prim_axi_read_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_in_pkg += $(fuse_ctrl_prim_axi_read_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_read_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/compile.do new file mode 100644 index 000000000..d5afe8a68 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_read_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in.compile new file mode 100644 index 000000000..73650e4cb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_read_in_hvl.compile + - fuse_ctrl_prim_axi_read_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_bfm.vinfo new file mode 100644 index 000000000..8ed6f0d0a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_read_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_read_in_if.sv +src/fuse_ctrl_prim_axi_read_in_driver_bfm.sv +src/fuse_ctrl_prim_axi_read_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_common.compile new file mode 100644 index 000000000..ca43b4da1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hdl.f new file mode 100644 index 000000000..f0b99a312 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hvl.f new file mode 100644 index 000000000..8dcf1976e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_xrtl.f new file mode 100644 index 000000000..46c2aabe8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hdl.compile new file mode 100644 index 000000000..31d8fb131 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_read_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_read_in_if.sv + - src/fuse_ctrl_prim_axi_read_in_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_read_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hvl.compile new file mode 100644 index 000000000..7c7cc34c5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_read_in_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_read_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.sv new file mode 100644 index 000000000..2e29485bd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_read_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_read_in_macros.svh" + + export fuse_ctrl_prim_axi_read_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_read_in_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_read_in_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_configuration.svh" + `include "src/fuse_ctrl_prim_axi_read_in_driver.svh" + `include "src/fuse_ctrl_prim_axi_read_in_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_read_in_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_read_in_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_read_in2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.vinfo new file mode 100644 index 000000000..7f62c3037 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_read_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_read_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.sv new file mode 100644 index 000000000..f771faa9d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_read_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_read_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.vinfo new file mode 100644 index 000000000..eb67953c1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_sve.F new file mode 100644 index 000000000..ce8af1688 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in2reg_adapter.svh new file mode 100644 index 000000000..2c9b99ecd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_read_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_read_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_read_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_agent.svh new file mode 100644 index 000000000..b2ff8a6c4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_read_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_read_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_read_in_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_configuration.svh new file mode 100644 index 000000000..7692603a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_read_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_read_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_read_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_read_in_configuration_s fuse_ctrl_prim_axi_read_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_read_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_read_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_read_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_read_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_read_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver.svh new file mode 100644 index 000000000..47ced3bf4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_read_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_read_in_driver and fuse_ctrl_prim_axi_read_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_read_in_driver_bfm. +`fuse_ctrl_prim_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_in_initiator_s fuse_ctrl_prim_axi_read_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_read_in_driver and fuse_ctrl_prim_axi_read_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_read_in_driver_bfm. +`fuse_ctrl_prim_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_in_responder_s fuse_ctrl_prim_axi_read_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_read_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_read_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_read_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_read_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver_bfm.sv new file mode 100644 index 000000000..a3f220a11 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_read_in signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_read_in driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_read_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_read_in_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_read_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_in_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_in_macros.svh" + +interface fuse_ctrl_prim_axi_read_in_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_read_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_read_in_pkg::fuse_ctrl_prim_axi_read_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_read_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_read_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_read_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_in_driver and fuse_ctrl_prim_axi_read_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_in_driver_bfm. + `fuse_ctrl_prim_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_read_in_driver and fuse_ctrl_prim_axi_read_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_in_driver_bfm. + `fuse_ctrl_prim_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_read_in_configuration_s fuse_ctrl_prim_axi_read_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_read_in_initiator_s fuse_ctrl_prim_axi_read_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_read_in_responder_s fuse_ctrl_prim_axi_read_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_read_in_initiator_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Members within the fuse_ctrl_prim_axi_read_in_responder_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + initiator_struct = fuse_ctrl_prim_axi_read_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_read_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_read_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_read_in_initiator_s fuse_ctrl_prim_axi_read_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_read_in_responder_s fuse_ctrl_prim_axi_read_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_read_in_initiator_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Variables within the fuse_ctrl_prim_axi_read_in_responder_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = arlock_i; // + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_read_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_read_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_if.sv new file mode 100644 index 000000000..f7a4f7b73 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_read_in interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_read_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_read_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_read_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_in_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_read_in_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_macros.svh new file mode 100644 index 000000000..ba93fd264 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_read_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_read_in_configuration class. +// + `define fuse_ctrl_prim_axi_read_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_read_in_configuration_s; + + `define fuse_ctrl_prim_axi_read_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_configuration_s to_struct();\ + fuse_ctrl_prim_axi_read_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_read_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_read_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_read_in_configuration_s fuse_ctrl_prim_axi_read_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_read_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_read_in_transaction class. +// + `define fuse_ctrl_prim_axi_read_in_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_in_monitor_s; + + `define fuse_ctrl_prim_axi_read_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_read_in_monitor_struct = \ + { \ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_read_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_read_in_monitor_s fuse_ctrl_prim_axi_read_in_monitor_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_read_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_in_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_in_initiator_s; + + `define fuse_ctrl_prim_axi_read_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_read_in_initiator_struct = \ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_read_in_initiator_s fuse_ctrl_prim_axi_read_in_initiator_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_read_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_in_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_in_responder_s; + + `define fuse_ctrl_prim_axi_read_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_read_in_responder_struct = \ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_in_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_read_in_responder_s fuse_ctrl_prim_axi_read_in_responder_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor.svh new file mode 100644 index 000000000..1c3949390 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_read_in transactions observed by the +// fuse_ctrl_prim_axi_read_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_read_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_read_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_read_in_monitor_s fuse_ctrl_prim_axi_read_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_read_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor_bfm.sv new file mode 100644 index 000000000..efa2c9f98 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_read_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_read_in monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_read_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_read_in_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_read_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_in_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_in_macros.svh" + + +interface fuse_ctrl_prim_axi_read_in_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_read_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_read_in_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_in_monitor_s fuse_ctrl_prim_axi_read_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_read_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_read_in_pkg::fuse_ctrl_prim_axi_read_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_read_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_read_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_read_in_configuration_s fuse_ctrl_prim_axi_read_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_read_in_monitor_s fuse_ctrl_prim_axi_read_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_araddr + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_arvalid + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_arburst + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_arsize + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_arlen + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_aruser + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_arid + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_arlock + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_random_sequence.svh new file mode 100644 index 000000000..1cb563fc1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_read_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_read_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_read_in_random_sequence::body()-fuse_ctrl_prim_axi_read_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_read_in_driver_bfm via the sequencer and fuse_ctrl_prim_axi_read_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_read_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_responder_sequence.svh new file mode 100644 index 000000000..3a60a5cf8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_read_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_sequence_base.svh new file mode 100644 index 000000000..7c8932c6b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_in_transaction_req_t; + fuse_ctrl_prim_axi_read_in_transaction_req_t req; + typedef fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_in_transaction_rsp_t; + fuse_ctrl_prim_axi_read_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_read_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_read_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction.svh new file mode 100644 index 000000000..601cca308 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_read_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] prim_araddr ; + logic prim_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + logic [2:0] prim_arsize ; + logic [7:0] prim_arlen ; + logic [UW-1:0] prim_aruser ; + logic [IW-1:0] prim_arid ; + logic prim_arlock ; + logic prim_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_read_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_read_in_monitor and fuse_ctrl_prim_axi_read_in_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_in_monitor_s fuse_ctrl_prim_axi_read_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_in_driver and fuse_ctrl_prim_axi_read_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_in_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_in_initiator_s fuse_ctrl_prim_axi_read_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_read_in_driver and fuse_ctrl_prim_axi_read_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_in_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_in_responder_s fuse_ctrl_prim_axi_read_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_araddr:0x%x prim_arvalid:0x%x prim_arburst:0x%x prim_arsize:0x%x prim_arlen:0x%x prim_aruser:0x%x prim_arid:0x%x prim_arlock:0x%x prim_rready:0x%x ",prim_araddr,prim_arvalid,prim_arburst,prim_arsize,prim_arlen,prim_aruser,prim_arid,prim_arlock,prim_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_araddr = RHS.prim_araddr; + this.prim_arvalid = RHS.prim_arvalid; + this.prim_arburst = RHS.prim_arburst; + this.prim_arsize = RHS.prim_arsize; + this.prim_arlen = RHS.prim_arlen; + this.prim_aruser = RHS.prim_aruser; + this.prim_arid = RHS.prim_arid; + this.prim_arlock = RHS.prim_arlock; + this.prim_rready = RHS.prim_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_read_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_araddr,"prim_araddr"); + $add_attribute(transaction_view_h,prim_arvalid,"prim_arvalid"); + $add_attribute(transaction_view_h,prim_arburst,"prim_arburst"); + $add_attribute(transaction_view_h,prim_arsize,"prim_arsize"); + $add_attribute(transaction_view_h,prim_arlen,"prim_arlen"); + $add_attribute(transaction_view_h,prim_aruser,"prim_aruser"); + $add_attribute(transaction_view_h,prim_arid,"prim_arid"); + $add_attribute(transaction_view_h,prim_arlock,"prim_arlock"); + $add_attribute(transaction_view_h,prim_rready,"prim_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction_coverage.svh new file mode 100644 index 000000000..9315e32d7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_read_in transaction information using +// a covergroup named fuse_ctrl_prim_axi_read_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_read_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_araddr: coverpoint coverage_trans.prim_araddr; + prim_arvalid: coverpoint coverage_trans.prim_arvalid; + prim_arburst: coverpoint coverage_trans.prim_arburst; + prim_arsize: coverpoint coverage_trans.prim_arsize; + prim_arlen: coverpoint coverage_trans.prim_arlen; + prim_aruser: coverpoint coverage_trans.prim_aruser; + prim_arid: coverpoint coverage_trans.prim_arid; + prim_arlock: coverpoint coverage_trans.prim_arlock; + prim_rready: coverpoint coverage_trans.prim_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_read_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_read_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_read_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/yaml/fuse_ctrl_prim_axi_read_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/yaml/fuse_ctrl_prim_axi_read_in_interface.yaml new file mode 100644 index 000000000..722b47650 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/yaml/fuse_ctrl_prim_axi_read_in_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_read_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: prim_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.project new file mode 100644 index 000000000..383395618 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_read_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.svproject new file mode 100644 index 000000000..b202873ab --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/Makefile new file mode 100644 index 000000000..4e9d0fe18 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_read_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_read_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hvl.f + +fuse_ctrl_prim_axi_read_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hdl.f + +fuse_ctrl_prim_axi_read_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_read_out_if_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_read_out_if_pkg +COMP_fuse_ctrl_prim_axi_read_out_if_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_read_out_if_pkg +COMP_fuse_ctrl_prim_axi_read_out_if_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_read_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_read_out_if_pkg: $(COMP_fuse_ctrl_prim_axi_read_out_if_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_read_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_read_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_read_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_out_if_pkg += -I$(fuse_ctrl_prim_axi_read_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_out_if_pkg += $(fuse_ctrl_prim_axi_read_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_out_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_read_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/compile.do new file mode 100644 index 000000000..7c3781f3f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_read_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if.compile new file mode 100644 index 000000000..38953a316 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_read_out_if_hvl.compile + - fuse_ctrl_prim_axi_read_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_bfm.vinfo new file mode 100644 index 000000000..964634f61 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_read_out_if_if.sv +src/fuse_ctrl_prim_axi_read_out_if_driver_bfm.sv +src/fuse_ctrl_prim_axi_read_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_common.compile new file mode 100644 index 000000000..317b5d7ac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hdl.f new file mode 100644 index 000000000..0c9029736 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hvl.f new file mode 100644 index 000000000..9ee108d67 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_xrtl.f new file mode 100644 index 000000000..fbbf739cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hdl.compile new file mode 100644 index 000000000..06fb80cd7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_read_out_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_read_out_if_if.sv + - src/fuse_ctrl_prim_axi_read_out_if_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hvl.compile new file mode 100644 index 000000000..e8c82fe46 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_read_out_if_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.sv new file mode 100644 index 000000000..cb08be3f6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_read_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_read_out_if_macros.svh" + + export fuse_ctrl_prim_axi_read_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_read_out_if_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_read_out_if_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_if_configuration.svh" + `include "src/fuse_ctrl_prim_axi_read_out_if_driver.svh" + `include "src/fuse_ctrl_prim_axi_read_out_if_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_if_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_read_out_if_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_read_out_if_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_if_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_read_out_if2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.vinfo new file mode 100644 index 000000000..e405462b7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv new file mode 100644 index 000000000..09ecb0eef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_read_out_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_read_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..4f06d25c2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_sve.F new file mode 100644 index 000000000..5efb9cf26 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if2reg_adapter.svh new file mode 100644 index 000000000..3b4b607bb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_read_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_read_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_read_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_agent.svh new file mode 100644 index 000000000..7c0be008b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_read_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_configuration.svh new file mode 100644 index 000000000..300f44e63 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_read_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_read_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_read_out_if_configuration_s fuse_ctrl_prim_axi_read_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_read_out_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_if_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_read_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_read_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_read_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_read_out_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver.svh new file mode 100644 index 000000000..84cb7a06a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_read_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_read_out_if_driver and fuse_ctrl_prim_axi_read_out_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_read_out_if_driver_bfm. +`fuse_ctrl_prim_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_out_if_initiator_s fuse_ctrl_prim_axi_read_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_read_out_if_driver and fuse_ctrl_prim_axi_read_out_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_read_out_if_driver_bfm. +`fuse_ctrl_prim_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_out_if_responder_s fuse_ctrl_prim_axi_read_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_read_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_read_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_read_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_read_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver_bfm.sv new file mode 100644 index 000000000..4beaa864a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_read_out_if signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_read_out_if driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_read_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_read_out_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_read_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_out_if_macros.svh" + +interface fuse_ctrl_prim_axi_read_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_read_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_read_out_if_pkg::fuse_ctrl_prim_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_read_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_read_out_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_out_if_driver and fuse_ctrl_prim_axi_read_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_out_if_driver_bfm. + `fuse_ctrl_prim_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_read_out_if_driver and fuse_ctrl_prim_axi_read_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_out_if_driver_bfm. + `fuse_ctrl_prim_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_read_out_if_configuration_s fuse_ctrl_prim_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_read_out_if_initiator_s fuse_ctrl_prim_axi_read_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_read_out_if_responder_s fuse_ctrl_prim_axi_read_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_read_out_if_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Members within the fuse_ctrl_prim_axi_read_out_if_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + initiator_struct = fuse_ctrl_prim_axi_read_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_prim_axi_read_out_if_responder_struct.xyz = arready_i; // + // fuse_ctrl_prim_axi_read_out_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_read_out_if_responder_struct.xyz = rresp_i; // + // fuse_ctrl_prim_axi_read_out_if_responder_struct.xyz = rid_i; // + // fuse_ctrl_prim_axi_read_out_if_responder_struct.xyz = rlast_i; // + // fuse_ctrl_prim_axi_read_out_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_read_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_read_out_if_initiator_s fuse_ctrl_prim_axi_read_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_read_out_if_responder_s fuse_ctrl_prim_axi_read_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_read_out_if_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Variables within the fuse_ctrl_prim_axi_read_out_if_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= fuse_ctrl_prim_axi_read_out_if_initiator_struct.xyz; // + // rdata_o <= fuse_ctrl_prim_axi_read_out_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= fuse_ctrl_prim_axi_read_out_if_initiator_struct.xyz; // + // rid_o <= fuse_ctrl_prim_axi_read_out_if_initiator_struct.xyz; // + // rlast_o <= fuse_ctrl_prim_axi_read_out_if_initiator_struct.xyz; // + // rvalid_o <= fuse_ctrl_prim_axi_read_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_read_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_if.sv new file mode 100644 index 000000000..5819fef10 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_read_out_if interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_read_out_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_read_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_read_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_if_bus.arready), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_if_bus.rdata), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_if_bus.rresp), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_if_bus.rid), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_if_bus.rlast), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_out_if_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_read_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_macros.svh new file mode 100644 index 000000000..c5e996d07 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_read_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_read_out_if_configuration class. +// + `define fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_read_out_if_configuration_s; + + `define fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_if_configuration_s to_struct();\ + fuse_ctrl_prim_axi_read_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_read_out_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_read_out_if_configuration_s fuse_ctrl_prim_axi_read_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_read_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_read_out_if_transaction class. +// + `define fuse_ctrl_prim_axi_read_out_if_MONITOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } fuse_ctrl_prim_axi_read_out_if_monitor_s; + + `define fuse_ctrl_prim_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_if_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_read_out_if_monitor_struct = \ + { \ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( fuse_ctrl_prim_axi_read_out_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_read_out_if_monitor_s fuse_ctrl_prim_axi_read_out_if_monitor_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = fuse_ctrl_prim_axi_read_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } fuse_ctrl_prim_axi_read_out_if_initiator_s; + + `define fuse_ctrl_prim_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_if_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_read_out_if_initiator_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( fuse_ctrl_prim_axi_read_out_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_read_out_if_initiator_s fuse_ctrl_prim_axi_read_out_if_initiator_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = fuse_ctrl_prim_axi_read_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } fuse_ctrl_prim_axi_read_out_if_responder_s; + + `define fuse_ctrl_prim_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_if_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_read_out_if_responder_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( fuse_ctrl_prim_axi_read_out_if_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_read_out_if_responder_s fuse_ctrl_prim_axi_read_out_if_responder_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = fuse_ctrl_prim_axi_read_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor.svh new file mode 100644 index 000000000..5c5ffaeeb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_read_out_if transactions observed by the +// fuse_ctrl_prim_axi_read_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_read_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_read_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_read_out_if_monitor_s fuse_ctrl_prim_axi_read_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_read_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor_bfm.sv new file mode 100644 index 000000000..c4c0ad5d3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_read_out_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_read_out_if monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_read_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_read_out_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_read_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_out_if_macros.svh" + + +interface fuse_ctrl_prim_axi_read_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_read_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_read_out_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_out_if_monitor_s fuse_ctrl_prim_axi_read_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_read_out_if_pkg::fuse_ctrl_prim_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_read_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_read_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_read_out_if_configuration_s fuse_ctrl_prim_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_read_out_if_monitor_s fuse_ctrl_prim_axi_read_out_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_read_out_if_monitor_struct.prim_arready + // // fuse_ctrl_prim_axi_read_out_if_monitor_struct.prim_rdata + // // fuse_ctrl_prim_axi_read_out_if_monitor_struct.prim_rresp + // // fuse_ctrl_prim_axi_read_out_if_monitor_struct.prim_rid + // // fuse_ctrl_prim_axi_read_out_if_monitor_struct.prim_rlast + // // fuse_ctrl_prim_axi_read_out_if_monitor_struct.prim_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_read_out_if_monitor_struct.xyz = arready_i; // + // fuse_ctrl_prim_axi_read_out_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_read_out_if_monitor_struct.xyz = rresp_i; // + // fuse_ctrl_prim_axi_read_out_if_monitor_struct.xyz = rid_i; // + // fuse_ctrl_prim_axi_read_out_if_monitor_struct.xyz = rlast_i; // + // fuse_ctrl_prim_axi_read_out_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_random_sequence.svh new file mode 100644 index 000000000..cb283839d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_read_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_read_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_read_out_if_random_sequence::body()-fuse_ctrl_prim_axi_read_out_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_read_out_if_driver_bfm via the sequencer and fuse_ctrl_prim_axi_read_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_read_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_responder_sequence.svh new file mode 100644 index 000000000..2b38158de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_read_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_sequence_base.svh new file mode 100644 index 000000000..8138bfaf3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_out_if_transaction_req_t; + fuse_ctrl_prim_axi_read_out_if_transaction_req_t req; + typedef fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_out_if_transaction_rsp_t; + fuse_ctrl_prim_axi_read_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_read_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_read_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction.svh new file mode 100644 index 000000000..fdce68486 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_read_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_arready ; + logic [DW-1:0] prim_rdata ; + axi_pkg::axi_burst_e prim_rresp ; + logic [IW-1:0] prim_rid ; + logic prim_rlast ; + logic prim_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_read_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_read_out_if_monitor and fuse_ctrl_prim_axi_read_out_if_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_out_if_monitor_s fuse_ctrl_prim_axi_read_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_out_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_if_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_out_if_driver and fuse_ctrl_prim_axi_read_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_out_if_initiator_s fuse_ctrl_prim_axi_read_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_out_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_if_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_read_out_if_driver and fuse_ctrl_prim_axi_read_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_out_if_responder_s fuse_ctrl_prim_axi_read_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_out_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_if_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_arready:0x%x prim_rdata:0x%x prim_rresp:0x%x prim_rid:0x%x prim_rlast:0x%x prim_rvalid:0x%x ",prim_arready,prim_rdata,prim_rresp,prim_rid,prim_rlast,prim_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_arready == RHS.prim_arready) + &&(this.prim_rdata == RHS.prim_rdata) + &&(this.prim_rresp == RHS.prim_rresp) + &&(this.prim_rid == RHS.prim_rid) + &&(this.prim_rlast == RHS.prim_rlast) + &&(this.prim_rvalid == RHS.prim_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_arready = RHS.prim_arready; + this.prim_rdata = RHS.prim_rdata; + this.prim_rresp = RHS.prim_rresp; + this.prim_rid = RHS.prim_rid; + this.prim_rlast = RHS.prim_rlast; + this.prim_rvalid = RHS.prim_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_read_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_arready,"prim_arready"); + $add_attribute(transaction_view_h,prim_rdata,"prim_rdata"); + $add_attribute(transaction_view_h,prim_rresp,"prim_rresp"); + $add_attribute(transaction_view_h,prim_rid,"prim_rid"); + $add_attribute(transaction_view_h,prim_rlast,"prim_rlast"); + $add_attribute(transaction_view_h,prim_rvalid,"prim_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction_coverage.svh new file mode 100644 index 000000000..ea69c07a1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_read_out_if transaction information using +// a covergroup named fuse_ctrl_prim_axi_read_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_read_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_arready: coverpoint coverage_trans.prim_arready; + prim_rdata: coverpoint coverage_trans.prim_rdata; + prim_rresp: coverpoint coverage_trans.prim_rresp; + prim_rid: coverpoint coverage_trans.prim_rid; + prim_rlast: coverpoint coverage_trans.prim_rlast; + prim_rvalid: coverpoint coverage_trans.prim_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_read_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_read_out_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_read_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/yaml/fuse_ctrl_prim_axi_read_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/yaml/fuse_ctrl_prim_axi_read_out_if_interface.yaml new file mode 100644 index 000000000..5d9e6555a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/yaml/fuse_ctrl_prim_axi_read_out_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_read_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.project new file mode 100644 index 000000000..a150c2600 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_read_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.svproject new file mode 100644 index 000000000..07283b071 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/Makefile new file mode 100644 index 000000000..c82fb10fe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_read_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_read_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hvl.f + +fuse_ctrl_prim_axi_read_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hdl.f + +fuse_ctrl_prim_axi_read_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_read_out_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_read_out_pkg +COMP_fuse_ctrl_prim_axi_read_out_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_read_out_pkg +COMP_fuse_ctrl_prim_axi_read_out_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_read_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_read_out_pkg: $(COMP_fuse_ctrl_prim_axi_read_out_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_read_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_read_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_read_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_read_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_read_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_out_pkg += -I$(fuse_ctrl_prim_axi_read_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_out_pkg += $(fuse_ctrl_prim_axi_read_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_read_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/compile.do new file mode 100644 index 000000000..1f3f42509 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_read_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out.compile new file mode 100644 index 000000000..3ae619a60 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_read_out_hvl.compile + - fuse_ctrl_prim_axi_read_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_bfm.vinfo new file mode 100644 index 000000000..804bedee2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_read_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_read_out_if.sv +src/fuse_ctrl_prim_axi_read_out_driver_bfm.sv +src/fuse_ctrl_prim_axi_read_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_common.compile new file mode 100644 index 000000000..473bd1034 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hdl.f new file mode 100644 index 000000000..9915fab63 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hvl.f new file mode 100644 index 000000000..c105f6ac9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_xrtl.f new file mode 100644 index 000000000..efd90f559 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hdl.compile new file mode 100644 index 000000000..3110b6364 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_read_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_read_out_if.sv + - src/fuse_ctrl_prim_axi_read_out_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_read_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hvl.compile new file mode 100644 index 000000000..5f022ac42 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_read_out_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_read_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.sv new file mode 100644 index 000000000..d12ebea63 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_read_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_read_out_macros.svh" + + export fuse_ctrl_prim_axi_read_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_read_out_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_read_out_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_configuration.svh" + `include "src/fuse_ctrl_prim_axi_read_out_driver.svh" + `include "src/fuse_ctrl_prim_axi_read_out_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_read_out_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_read_out_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_read_out2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.vinfo new file mode 100644 index 000000000..ce44bd3e7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_read_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_read_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.sv new file mode 100644 index 000000000..3a6641be3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_read_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_read_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.vinfo new file mode 100644 index 000000000..d2706f6b1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_sve.F new file mode 100644 index 000000000..e27a4496e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out2reg_adapter.svh new file mode 100644 index 000000000..6d0791b2d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_read_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_read_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_read_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_agent.svh new file mode 100644 index 000000000..4ecac4aa1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_read_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_read_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_read_out_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_configuration.svh new file mode 100644 index 000000000..04a822d95 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_read_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_read_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_read_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_read_out_configuration_s fuse_ctrl_prim_axi_read_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_read_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_read_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_read_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_read_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_read_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver.svh new file mode 100644 index 000000000..706e00774 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_read_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_read_out_driver and fuse_ctrl_prim_axi_read_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_read_out_driver_bfm. +`fuse_ctrl_prim_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_out_initiator_s fuse_ctrl_prim_axi_read_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_read_out_driver and fuse_ctrl_prim_axi_read_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_read_out_driver_bfm. +`fuse_ctrl_prim_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_out_responder_s fuse_ctrl_prim_axi_read_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_read_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_read_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_read_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_read_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver_bfm.sv new file mode 100644 index 000000000..f23f7c67a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_read_out signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_read_out driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_read_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_read_out_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_read_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_out_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_out_macros.svh" + +interface fuse_ctrl_prim_axi_read_out_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_read_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_read_out_pkg::fuse_ctrl_prim_axi_read_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_read_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_read_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_read_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_out_driver and fuse_ctrl_prim_axi_read_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_out_driver_bfm. + `fuse_ctrl_prim_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_read_out_driver and fuse_ctrl_prim_axi_read_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_out_driver_bfm. + `fuse_ctrl_prim_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_read_out_configuration_s fuse_ctrl_prim_axi_read_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_read_out_initiator_s fuse_ctrl_prim_axi_read_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_read_out_responder_s fuse_ctrl_prim_axi_read_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_read_out_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Members within the fuse_ctrl_prim_axi_read_out_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + initiator_struct = fuse_ctrl_prim_axi_read_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_prim_axi_read_out_responder_struct.xyz = arready_i; // + // fuse_ctrl_prim_axi_read_out_responder_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_read_out_responder_struct.xyz = rresp_i; // + // fuse_ctrl_prim_axi_read_out_responder_struct.xyz = rid_i; // + // fuse_ctrl_prim_axi_read_out_responder_struct.xyz = rlast_i; // + // fuse_ctrl_prim_axi_read_out_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_read_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_read_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_read_out_initiator_s fuse_ctrl_prim_axi_read_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_read_out_responder_s fuse_ctrl_prim_axi_read_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_read_out_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Variables within the fuse_ctrl_prim_axi_read_out_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= fuse_ctrl_prim_axi_read_out_initiator_struct.xyz; // + // rdata_o <= fuse_ctrl_prim_axi_read_out_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= fuse_ctrl_prim_axi_read_out_initiator_struct.xyz; // + // rid_o <= fuse_ctrl_prim_axi_read_out_initiator_struct.xyz; // + // rlast_o <= fuse_ctrl_prim_axi_read_out_initiator_struct.xyz; // + // rvalid_o <= fuse_ctrl_prim_axi_read_out_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_read_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_read_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_if.sv new file mode 100644 index 000000000..1f59430f9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_read_out interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_read_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_read_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_read_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_bus.arready), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_bus.rdata), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_bus.rresp), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_bus.rid), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_bus.rlast), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_out_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_read_out_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_macros.svh new file mode 100644 index 000000000..a5d9e29df --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_read_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_read_out_configuration class. +// + `define fuse_ctrl_prim_axi_read_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_read_out_configuration_s; + + `define fuse_ctrl_prim_axi_read_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_configuration_s to_struct();\ + fuse_ctrl_prim_axi_read_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_read_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_read_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_read_out_configuration_s fuse_ctrl_prim_axi_read_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_read_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_read_out_transaction class. +// + `define fuse_ctrl_prim_axi_read_out_MONITOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } fuse_ctrl_prim_axi_read_out_monitor_s; + + `define fuse_ctrl_prim_axi_read_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_read_out_monitor_struct = \ + { \ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( fuse_ctrl_prim_axi_read_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_read_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_read_out_monitor_s fuse_ctrl_prim_axi_read_out_monitor_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = fuse_ctrl_prim_axi_read_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_read_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_out_INITIATOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } fuse_ctrl_prim_axi_read_out_initiator_s; + + `define fuse_ctrl_prim_axi_read_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_read_out_initiator_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( fuse_ctrl_prim_axi_read_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_read_out_initiator_s fuse_ctrl_prim_axi_read_out_initiator_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = fuse_ctrl_prim_axi_read_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_read_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_out_RESPONDER_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } fuse_ctrl_prim_axi_read_out_responder_s; + + `define fuse_ctrl_prim_axi_read_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_read_out_responder_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( fuse_ctrl_prim_axi_read_out_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_read_out_responder_s fuse_ctrl_prim_axi_read_out_responder_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = fuse_ctrl_prim_axi_read_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor.svh new file mode 100644 index 000000000..a47648e00 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_read_out transactions observed by the +// fuse_ctrl_prim_axi_read_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_read_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_read_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_read_out_monitor_s fuse_ctrl_prim_axi_read_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_read_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor_bfm.sv new file mode 100644 index 000000000..8aae56b3d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_read_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_read_out monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_read_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_read_out_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_read_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_out_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_out_macros.svh" + + +interface fuse_ctrl_prim_axi_read_out_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_read_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_read_out_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_out_monitor_s fuse_ctrl_prim_axi_read_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_read_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_read_out_pkg::fuse_ctrl_prim_axi_read_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_read_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_read_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_read_out_configuration_s fuse_ctrl_prim_axi_read_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_read_out_monitor_s fuse_ctrl_prim_axi_read_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_read_out_monitor_struct.prim_arready + // // fuse_ctrl_prim_axi_read_out_monitor_struct.prim_rdata + // // fuse_ctrl_prim_axi_read_out_monitor_struct.prim_rresp + // // fuse_ctrl_prim_axi_read_out_monitor_struct.prim_rid + // // fuse_ctrl_prim_axi_read_out_monitor_struct.prim_rlast + // // fuse_ctrl_prim_axi_read_out_monitor_struct.prim_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_read_out_monitor_struct.xyz = arready_i; // + // fuse_ctrl_prim_axi_read_out_monitor_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_read_out_monitor_struct.xyz = rresp_i; // + // fuse_ctrl_prim_axi_read_out_monitor_struct.xyz = rid_i; // + // fuse_ctrl_prim_axi_read_out_monitor_struct.xyz = rlast_i; // + // fuse_ctrl_prim_axi_read_out_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_random_sequence.svh new file mode 100644 index 000000000..869532e93 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_read_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_read_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_read_out_random_sequence::body()-fuse_ctrl_prim_axi_read_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_read_out_driver_bfm via the sequencer and fuse_ctrl_prim_axi_read_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_read_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_responder_sequence.svh new file mode 100644 index 000000000..f27579be3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_read_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_sequence_base.svh new file mode 100644 index 000000000..fb9238126 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_out_transaction_req_t; + fuse_ctrl_prim_axi_read_out_transaction_req_t req; + typedef fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_out_transaction_rsp_t; + fuse_ctrl_prim_axi_read_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_read_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_read_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction.svh new file mode 100644 index 000000000..4eda4dfd7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_read_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_arready ; + logic [DW-1:0] prim_rdata ; + axi_pkg::axi_burst_e prim_rresp ; + logic [IW-1:0] prim_rid ; + logic prim_rlast ; + logic prim_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_read_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_read_out_monitor and fuse_ctrl_prim_axi_read_out_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_out_monitor_s fuse_ctrl_prim_axi_read_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_out_driver and fuse_ctrl_prim_axi_read_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_out_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_out_initiator_s fuse_ctrl_prim_axi_read_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_read_out_driver and fuse_ctrl_prim_axi_read_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_out_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_out_responder_s fuse_ctrl_prim_axi_read_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_arready:0x%x prim_rdata:0x%x prim_rresp:0x%x prim_rid:0x%x prim_rlast:0x%x prim_rvalid:0x%x ",prim_arready,prim_rdata,prim_rresp,prim_rid,prim_rlast,prim_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_arready == RHS.prim_arready) + &&(this.prim_rdata == RHS.prim_rdata) + &&(this.prim_rresp == RHS.prim_rresp) + &&(this.prim_rid == RHS.prim_rid) + &&(this.prim_rlast == RHS.prim_rlast) + &&(this.prim_rvalid == RHS.prim_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_arready = RHS.prim_arready; + this.prim_rdata = RHS.prim_rdata; + this.prim_rresp = RHS.prim_rresp; + this.prim_rid = RHS.prim_rid; + this.prim_rlast = RHS.prim_rlast; + this.prim_rvalid = RHS.prim_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_read_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_arready,"prim_arready"); + $add_attribute(transaction_view_h,prim_rdata,"prim_rdata"); + $add_attribute(transaction_view_h,prim_rresp,"prim_rresp"); + $add_attribute(transaction_view_h,prim_rid,"prim_rid"); + $add_attribute(transaction_view_h,prim_rlast,"prim_rlast"); + $add_attribute(transaction_view_h,prim_rvalid,"prim_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction_coverage.svh new file mode 100644 index 000000000..b701f57c1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_read_out transaction information using +// a covergroup named fuse_ctrl_prim_axi_read_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_read_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_arready: coverpoint coverage_trans.prim_arready; + prim_rdata: coverpoint coverage_trans.prim_rdata; + prim_rresp: coverpoint coverage_trans.prim_rresp; + prim_rid: coverpoint coverage_trans.prim_rid; + prim_rlast: coverpoint coverage_trans.prim_rlast; + prim_rvalid: coverpoint coverage_trans.prim_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_read_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_read_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_read_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/yaml/fuse_ctrl_prim_axi_read_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/yaml/fuse_ctrl_prim_axi_read_out_interface.yaml new file mode 100644 index 000000000..518e6a1ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/yaml/fuse_ctrl_prim_axi_read_out_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_read_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.project new file mode 100644 index 000000000..1d2b3a2b3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_write_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.svproject new file mode 100644 index 000000000..378d11293 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/Makefile new file mode 100644 index 000000000..e0851422c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_write_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_write_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f + +fuse_ctrl_prim_axi_write_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f + +fuse_ctrl_prim_axi_write_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_write_if_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_write_if_pkg +COMP_fuse_ctrl_prim_axi_write_if_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_write_if_pkg +COMP_fuse_ctrl_prim_axi_write_if_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_write_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_write_if_pkg: $(COMP_fuse_ctrl_prim_axi_write_if_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_write_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_write_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_write_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_write_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_write_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_if_pkg += -I$(fuse_ctrl_prim_axi_write_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_if_pkg += $(fuse_ctrl_prim_axi_write_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_write_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/compile.do new file mode 100644 index 000000000..e542958e1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_write_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if.compile new file mode 100644 index 000000000..5809b76c4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_write_if_hvl.compile + - fuse_ctrl_prim_axi_write_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_bfm.vinfo new file mode 100644 index 000000000..6c5f5cfbb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_write_if_if.sv +src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv +src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_common.compile new file mode 100644 index 000000000..dde3d0d7f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f new file mode 100644 index 000000000..11983b34a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f new file mode 100644 index 000000000..16c93aac2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f new file mode 100644 index 000000000..8e0817f98 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hdl.compile new file mode 100644 index 000000000..ff56c3bc8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_write_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_write_if_if.sv + - src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hvl.compile new file mode 100644 index 000000000..a21321c58 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_write_if_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.sv new file mode 100644 index 000000000..886790867 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_write_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_write_if_macros.svh" + + export fuse_ctrl_prim_axi_write_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_write_if_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_write_if_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_write_if_configuration.svh" + `include "src/fuse_ctrl_prim_axi_write_if_driver.svh" + `include "src/fuse_ctrl_prim_axi_write_if_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_write_if_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_write_if_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_write_if_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_write_if_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_write_if2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_write_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.vinfo new file mode 100644 index 000000000..51f12e079 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.sv new file mode 100644 index 000000000..7998fdf63 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_write_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_write_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo new file mode 100644 index 000000000..a0dd33de5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_sve.F new file mode 100644 index 000000000..c2cbc2a56 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if2reg_adapter.svh new file mode 100644 index 000000000..3639e693b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_write_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_write_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_write_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_agent.svh new file mode 100644 index 000000000..df581f3f1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_write_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_configuration.svh new file mode 100644 index 000000000..676cfcb02 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_write_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_write_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_write_if_configuration_s fuse_ctrl_prim_axi_write_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_write_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_if_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_write_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_write_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_write_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_write_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver.svh new file mode 100644 index 000000000..55d444021 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_write_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. +`fuse_ctrl_prim_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_if_initiator_s fuse_ctrl_prim_axi_write_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. +`fuse_ctrl_prim_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_if_responder_s fuse_ctrl_prim_axi_write_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_write_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_write_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_write_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_write_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv new file mode 100644 index 000000000..b418ebbf8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv @@ -0,0 +1,429 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_write_if signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_write_if driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_write_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_write_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_write_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_if_macros.svh" + +interface fuse_ctrl_prim_axi_write_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_write_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] awaddr_i; + reg [AW-1:0] awaddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] awburst_o = 'bz; + tri [2:0] awsize_i; + reg [2:0] awsize_o = 'bz; + tri [7:0] awlen_i; + reg [7:0] awlen_o = 'bz; + tri [UW-1:0] awuser_i; + reg [UW-1:0] awuser_o = 'bz; + tri [UW-1:0] awid_i; + reg [UW-1:0] awid_o = 'bz; + tri awlock_i; + reg awlock_o = 'bz; + tri awvalid_i; + reg awvalid_o = 'bz; + tri [DW-1:0] wdata_i; + reg [DW-1:0] wdata_o = 'bz; + tri [DW/8-1:0] wstrb_i; + reg [DW/8-1:0] wstrb_o = 'bz; + tri wvalid_i; + reg wvalid_o = 'bz; + tri wlast_i; + reg wlast_o = 'bz; + tri bready_i; + reg bready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.awaddr = (initiator_responder == INITIATOR) ? awaddr_o : 'bz; + assign awaddr_i = bus.awaddr; + assign bus.awburst = (initiator_responder == INITIATOR) ? awburst_o : 'bz; + assign awburst_i = bus.awburst; + assign bus.awsize = (initiator_responder == INITIATOR) ? awsize_o : 'bz; + assign awsize_i = bus.awsize; + assign bus.awlen = (initiator_responder == INITIATOR) ? awlen_o : 'bz; + assign awlen_i = bus.awlen; + assign bus.awuser = (initiator_responder == INITIATOR) ? awuser_o : 'bz; + assign awuser_i = bus.awuser; + assign bus.awid = (initiator_responder == INITIATOR) ? awid_o : 'bz; + assign awid_i = bus.awid; + assign bus.awlock = (initiator_responder == INITIATOR) ? awlock_o : 'bz; + assign awlock_i = bus.awlock; + assign bus.awvalid = (initiator_responder == INITIATOR) ? awvalid_o : 'bz; + assign awvalid_i = bus.awvalid; + assign bus.wdata = (initiator_responder == INITIATOR) ? wdata_o : 'bz; + assign wdata_i = bus.wdata; + assign bus.wstrb = (initiator_responder == INITIATOR) ? wstrb_o : 'bz; + assign wstrb_i = bus.wstrb; + assign bus.wvalid = (initiator_responder == INITIATOR) ? wvalid_o : 'bz; + assign wvalid_i = bus.wvalid; + assign bus.wlast = (initiator_responder == INITIATOR) ? wlast_o : 'bz; + assign wlast_i = bus.wlast; + assign bus.bready = (initiator_responder == INITIATOR) ? bready_o : 'bz; + assign bready_i = bus.bready; + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_write_if_pkg::fuse_ctrl_prim_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_write_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_write_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_write_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. + `fuse_ctrl_prim_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. + `fuse_ctrl_prim_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + awaddr_o <= 'bz; + awburst_o <= 'bz; + awsize_o <= 'bz; + awlen_o <= 'bz; + awuser_o <= 'bz; + awid_o <= 'bz; + awlock_o <= 'bz; + awvalid_o <= 'bz; + wdata_o <= 'bz; + wstrb_o <= 'bz; + wvalid_o <= 'bz; + wlast_o <= 'bz; + bready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_write_if_configuration_s fuse_ctrl_prim_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_write_if_initiator_s fuse_ctrl_prim_axi_write_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_write_if_responder_s fuse_ctrl_prim_axi_write_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_write_if_initiator_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Members within the fuse_ctrl_prim_axi_write_if_responder_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + initiator_struct = fuse_ctrl_prim_axi_write_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // awaddr_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [AW-1:0] + // awburst_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // awsize_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [2:0] + // awlen_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [7:0] + // awuser_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [UW-1:0] + // awid_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [UW-1:0] + // awlock_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // + // awvalid_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // + // wdata_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [DW-1:0] + // wstrb_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [DW/8-1:0] + // wvalid_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // + // wlast_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // + // bready_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_write_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_write_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_write_if_initiator_s fuse_ctrl_prim_axi_write_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_write_if_responder_s fuse_ctrl_prim_axi_write_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_write_if_initiator_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Variables within the fuse_ctrl_prim_axi_write_if_responder_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awlock_i; // + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awvalid_i; // + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = wvalid_i; // + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = wlast_i; // + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = bready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_write_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_write_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_if.sv new file mode 100644 index 000000000..afcdb92da --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_if.sv @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_write_if interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_write_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_write_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_write_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awaddr), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awburst), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awsize), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awlen), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awuser), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awlock), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.wdata), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.wstrb), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.wvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.wlast), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.bready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_if_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_write_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] awaddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst, + inout tri [2:0] awsize, + inout tri [7:0] awlen, + inout tri [UW-1:0] awuser, + inout tri [UW-1:0] awid, + inout tri awlock, + inout tri awvalid, + inout tri [DW-1:0] wdata, + inout tri [DW/8-1:0] wstrb, + inout tri wvalid, + inout tri wlast, + inout tri bready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output awaddr, + output awburst, + output awsize, + output awlen, + output awuser, + output awid, + output awlock, + output awvalid, + output wdata, + output wstrb, + output wvalid, + output wlast, + output bready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_macros.svh new file mode 100644 index 000000000..f1a207086 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_macros.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_write_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_write_if_configuration class. +// + `define fuse_ctrl_prim_axi_write_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_write_if_configuration_s; + + `define fuse_ctrl_prim_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_if_configuration_s to_struct();\ + fuse_ctrl_prim_axi_write_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_write_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_write_if_configuration_s fuse_ctrl_prim_axi_write_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_write_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_write_if_transaction class. +// + `define fuse_ctrl_prim_axi_write_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_if_monitor_s; + + `define fuse_ctrl_prim_axi_write_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_if_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_write_if_monitor_struct = \ + { \ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_write_if_monitor_s fuse_ctrl_prim_axi_write_if_monitor_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_if_initiator_s; + + `define fuse_ctrl_prim_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_if_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_write_if_initiator_struct = \ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_write_if_initiator_s fuse_ctrl_prim_axi_write_if_initiator_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_if_responder_s; + + `define fuse_ctrl_prim_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_if_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_write_if_responder_struct = \ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_if_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_write_if_responder_s fuse_ctrl_prim_axi_write_if_responder_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor.svh new file mode 100644 index 000000000..33bf7f57e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_write_if transactions observed by the +// fuse_ctrl_prim_axi_write_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_write_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_write_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_write_if_monitor_s fuse_ctrl_prim_axi_write_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_write_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv new file mode 100644 index 000000000..909871de8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv @@ -0,0 +1,248 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_write_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_write_if monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_write_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_write_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_write_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_if_macros.svh" + + +interface fuse_ctrl_prim_axi_write_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_write_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_write_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_if_monitor_s fuse_ctrl_prim_axi_write_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_write_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] awaddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + tri [2:0] awsize_i; + tri [7:0] awlen_i; + tri [UW-1:0] awuser_i; + tri [UW-1:0] awid_i; + tri awlock_i; + tri awvalid_i; + tri [DW-1:0] wdata_i; + tri [DW/8-1:0] wstrb_i; + tri wvalid_i; + tri wlast_i; + tri bready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awaddr_i = bus.awaddr; + assign awburst_i = bus.awburst; + assign awsize_i = bus.awsize; + assign awlen_i = bus.awlen; + assign awuser_i = bus.awuser; + assign awid_i = bus.awid; + assign awlock_i = bus.awlock; + assign awvalid_i = bus.awvalid; + assign wdata_i = bus.wdata; + assign wstrb_i = bus.wstrb; + assign wvalid_i = bus.wvalid; + assign wlast_i = bus.wlast; + assign bready_i = bus.bready; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_write_if_pkg::fuse_ctrl_prim_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_write_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_write_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_write_if_configuration_s fuse_ctrl_prim_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_write_if_monitor_s fuse_ctrl_prim_axi_write_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awaddr + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awvalid + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awburst + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awsize + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awlen + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awuser + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awid + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awlock + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_wdata + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_wstrb + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_wvalid + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_wlast + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_bready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awlock_i; // + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awvalid_i; // + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = wvalid_i; // + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = wlast_i; // + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = bready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_random_sequence.svh new file mode 100644 index 000000000..8c64fb3c6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_write_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_write_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_write_if_random_sequence::body()-fuse_ctrl_prim_axi_write_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_write_if_driver_bfm via the sequencer and fuse_ctrl_prim_axi_write_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_write_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_responder_sequence.svh new file mode 100644 index 000000000..088b5cae1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_write_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_sequence_base.svh new file mode 100644 index 000000000..3dabe4d22 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_if_transaction_req_t; + fuse_ctrl_prim_axi_write_if_transaction_req_t req; + typedef fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_if_transaction_rsp_t; + fuse_ctrl_prim_axi_write_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_write_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_write_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction.svh new file mode 100644 index 000000000..168cf90d5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction.svh @@ -0,0 +1,256 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_write_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] prim_awaddr ; + logic prim_awvalid ; + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + logic [2:0] prim_awsize ; + logic [7:0] prim_awlen ; + logic [UW-1:0] prim_awuser ; + logic [IW-1:0] prim_awid ; + logic prim_awlock ; + logic [DW-1:0] prim_wdata ; + logic [DW/8 - 1:0] prim_wstrb ; + logic prim_wvalid ; + logic prim_wlast ; + logic prim_bready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_write_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_write_if_monitor and fuse_ctrl_prim_axi_write_if_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_if_monitor_s fuse_ctrl_prim_axi_write_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_if_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_if_initiator_s fuse_ctrl_prim_axi_write_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_if_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_if_responder_s fuse_ctrl_prim_axi_write_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_if_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awaddr:0x%x prim_awvalid:0x%x prim_awburst:0x%x prim_awsize:0x%x prim_awlen:0x%x prim_awuser:0x%x prim_awid:0x%x prim_awlock:0x%x prim_wdata:0x%x prim_wstrb:0x%x prim_wvalid:0x%x prim_wlast:0x%x prim_bready:0x%x ",prim_awaddr,prim_awvalid,prim_awburst,prim_awsize,prim_awlen,prim_awuser,prim_awid,prim_awlock,prim_wdata,prim_wstrb,prim_wvalid,prim_wlast,prim_bready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_wdata == RHS.prim_wdata) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awaddr = RHS.prim_awaddr; + this.prim_awvalid = RHS.prim_awvalid; + this.prim_awburst = RHS.prim_awburst; + this.prim_awsize = RHS.prim_awsize; + this.prim_awlen = RHS.prim_awlen; + this.prim_awuser = RHS.prim_awuser; + this.prim_awid = RHS.prim_awid; + this.prim_awlock = RHS.prim_awlock; + this.prim_wdata = RHS.prim_wdata; + this.prim_wstrb = RHS.prim_wstrb; + this.prim_wvalid = RHS.prim_wvalid; + this.prim_wlast = RHS.prim_wlast; + this.prim_bready = RHS.prim_bready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_write_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awaddr,"prim_awaddr"); + $add_attribute(transaction_view_h,prim_awvalid,"prim_awvalid"); + $add_attribute(transaction_view_h,prim_awburst,"prim_awburst"); + $add_attribute(transaction_view_h,prim_awsize,"prim_awsize"); + $add_attribute(transaction_view_h,prim_awlen,"prim_awlen"); + $add_attribute(transaction_view_h,prim_awuser,"prim_awuser"); + $add_attribute(transaction_view_h,prim_awid,"prim_awid"); + $add_attribute(transaction_view_h,prim_awlock,"prim_awlock"); + $add_attribute(transaction_view_h,prim_wdata,"prim_wdata"); + $add_attribute(transaction_view_h,prim_wstrb,"prim_wstrb"); + $add_attribute(transaction_view_h,prim_wvalid,"prim_wvalid"); + $add_attribute(transaction_view_h,prim_wlast,"prim_wlast"); + $add_attribute(transaction_view_h,prim_bready,"prim_bready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction_coverage.svh new file mode 100644 index 000000000..a6fbb3558 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction_coverage.svh @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_write_if transaction information using +// a covergroup named fuse_ctrl_prim_axi_write_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_write_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awaddr: coverpoint coverage_trans.prim_awaddr; + prim_awvalid: coverpoint coverage_trans.prim_awvalid; + prim_awburst: coverpoint coverage_trans.prim_awburst; + prim_awsize: coverpoint coverage_trans.prim_awsize; + prim_awlen: coverpoint coverage_trans.prim_awlen; + prim_awuser: coverpoint coverage_trans.prim_awuser; + prim_awid: coverpoint coverage_trans.prim_awid; + prim_awlock: coverpoint coverage_trans.prim_awlock; + prim_wdata: coverpoint coverage_trans.prim_wdata; + prim_wstrb: coverpoint coverage_trans.prim_wstrb; + prim_wvalid: coverpoint coverage_trans.prim_wvalid; + prim_wlast: coverpoint coverage_trans.prim_wlast; + prim_bready: coverpoint coverage_trans.prim_bready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_write_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_write_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_write_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/yaml/fuse_ctrl_prim_axi_write_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/yaml/fuse_ctrl_prim_axi_write_if_interface.yaml new file mode 100644 index 000000000..4a69d4c96 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/yaml/fuse_ctrl_prim_axi_write_if_interface.yaml @@ -0,0 +1,161 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_write_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: awaddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: awburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: awsize + reset_value: '''bz' + width: '3' + - dir: output + name: awlen + reset_value: '''bz' + width: '8' + - dir: output + name: awuser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awid + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awlock + reset_value: '''bz' + width: '1' + - dir: output + name: awvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wdata + reset_value: '''bz' + width: '[''DW'']' + - dir: output + name: wstrb + reset_value: '''bz' + width: '[''DW/8'']' + - dir: output + name: wvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wlast + reset_value: '''bz' + width: '1' + - dir: output + name: bready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: prim_awaddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awuser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wstrb + type: logic [DW/8 - 1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_bready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.project new file mode 100644 index 000000000..0770491f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_write_in_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.svproject new file mode 100644 index 000000000..b46351d9f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/Makefile new file mode 100644 index 000000000..856db9d2f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_write_in_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_write_in_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hvl.f + +fuse_ctrl_prim_axi_write_in_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hdl.f + +fuse_ctrl_prim_axi_write_in_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_write_in_if_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_write_in_if_pkg +COMP_fuse_ctrl_prim_axi_write_in_if_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_write_in_if_pkg +COMP_fuse_ctrl_prim_axi_write_in_if_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_write_in_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_write_in_if_pkg: $(COMP_fuse_ctrl_prim_axi_write_in_if_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_write_in_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_write_in_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_write_in_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_in_if_pkg += -I$(fuse_ctrl_prim_axi_write_in_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_in_if_pkg += $(fuse_ctrl_prim_axi_write_in_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_in_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_write_in_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_in_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_in_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/compile.do new file mode 100644 index 000000000..96057eeae --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_write_in_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if.compile new file mode 100644 index 000000000..3b0556089 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_write_in_if_hvl.compile + - fuse_ctrl_prim_axi_write_in_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_bfm.vinfo new file mode 100644 index 000000000..ec81da644 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_write_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_write_in_if_if.sv +src/fuse_ctrl_prim_axi_write_in_if_driver_bfm.sv +src/fuse_ctrl_prim_axi_write_in_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_common.compile new file mode 100644 index 000000000..9d4c93462 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hdl.f new file mode 100644 index 000000000..fe4f02fb8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hvl.f new file mode 100644 index 000000000..eb0bfa3dd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_xrtl.f new file mode 100644 index 000000000..9ce77bf09 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hdl.compile new file mode 100644 index 000000000..8c2ca2641 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_write_in_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_write_in_if_if.sv + - src/fuse_ctrl_prim_axi_write_in_if_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_write_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hvl.compile new file mode 100644 index 000000000..208f90cc3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_write_in_if_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_write_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.sv new file mode 100644 index 000000000..dfd8133f9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_in_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_write_in_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_write_in_if_macros.svh" + + export fuse_ctrl_prim_axi_write_in_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_write_in_if_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_write_in_if_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_if_configuration.svh" + `include "src/fuse_ctrl_prim_axi_write_in_if_driver.svh" + `include "src/fuse_ctrl_prim_axi_write_in_if_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_if_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_write_in_if_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_write_in_if_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_if_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_write_in_if2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.vinfo new file mode 100644 index 000000000..1a4ed8ccb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_write_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_write_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv new file mode 100644 index 000000000..c6851188c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_in_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_write_in_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_write_in_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.vinfo new file mode 100644 index 000000000..6cdfa7339 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_sve.F new file mode 100644 index 000000000..a43c2ae34 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if2reg_adapter.svh new file mode 100644 index 000000000..db59eab23 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_write_in_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_write_in_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_write_in_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_agent.svh new file mode 100644 index 000000000..6ce4e8784 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_write_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_write_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_write_in_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_configuration.svh new file mode 100644 index 000000000..d201a9a66 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_write_in_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_write_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_write_in_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_write_in_if_configuration_s fuse_ctrl_prim_axi_write_in_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_write_in_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_if_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_write_in_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_write_in_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_write_in_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_write_in_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_in_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_write_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver.svh new file mode 100644 index 000000000..4e0b0c977 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_write_in_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_write_in_if_driver and fuse_ctrl_prim_axi_write_in_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_write_in_if_driver_bfm. +`fuse_ctrl_prim_axi_write_in_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_in_if_initiator_s fuse_ctrl_prim_axi_write_in_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_write_in_if_driver and fuse_ctrl_prim_axi_write_in_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_write_in_if_driver_bfm. +`fuse_ctrl_prim_axi_write_in_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_in_if_responder_s fuse_ctrl_prim_axi_write_in_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_write_in_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_write_in_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_write_in_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_write_in_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver_bfm.sv new file mode 100644 index 000000000..96ba0eea1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver_bfm.sv @@ -0,0 +1,429 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_write_in_if signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_write_in_if driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_write_in_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_write_in_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_write_in_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_in_if_macros.svh" + +interface fuse_ctrl_prim_axi_write_in_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_write_in_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_in_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] awaddr_i; + reg [AW-1:0] awaddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] awburst_o = 'bz; + tri [2:0] awsize_i; + reg [2:0] awsize_o = 'bz; + tri [7:0] awlen_i; + reg [7:0] awlen_o = 'bz; + tri [UW-1:0] awuser_i; + reg [UW-1:0] awuser_o = 'bz; + tri [UW-1:0] awid_i; + reg [UW-1:0] awid_o = 'bz; + tri awlock_i; + reg awlock_o = 'bz; + tri awvalid_i; + reg awvalid_o = 'bz; + tri [DW-1:0] wdata_i; + reg [DW-1:0] wdata_o = 'bz; + tri [DW/8-1:0] wstrb_i; + reg [DW/8-1:0] wstrb_o = 'bz; + tri wvalid_i; + reg wvalid_o = 'bz; + tri wlast_i; + reg wlast_o = 'bz; + tri bready_i; + reg bready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.awaddr = (initiator_responder == INITIATOR) ? awaddr_o : 'bz; + assign awaddr_i = bus.awaddr; + assign bus.awburst = (initiator_responder == INITIATOR) ? awburst_o : 'bz; + assign awburst_i = bus.awburst; + assign bus.awsize = (initiator_responder == INITIATOR) ? awsize_o : 'bz; + assign awsize_i = bus.awsize; + assign bus.awlen = (initiator_responder == INITIATOR) ? awlen_o : 'bz; + assign awlen_i = bus.awlen; + assign bus.awuser = (initiator_responder == INITIATOR) ? awuser_o : 'bz; + assign awuser_i = bus.awuser; + assign bus.awid = (initiator_responder == INITIATOR) ? awid_o : 'bz; + assign awid_i = bus.awid; + assign bus.awlock = (initiator_responder == INITIATOR) ? awlock_o : 'bz; + assign awlock_i = bus.awlock; + assign bus.awvalid = (initiator_responder == INITIATOR) ? awvalid_o : 'bz; + assign awvalid_i = bus.awvalid; + assign bus.wdata = (initiator_responder == INITIATOR) ? wdata_o : 'bz; + assign wdata_i = bus.wdata; + assign bus.wstrb = (initiator_responder == INITIATOR) ? wstrb_o : 'bz; + assign wstrb_i = bus.wstrb; + assign bus.wvalid = (initiator_responder == INITIATOR) ? wvalid_o : 'bz; + assign wvalid_i = bus.wvalid; + assign bus.wlast = (initiator_responder == INITIATOR) ? wlast_o : 'bz; + assign wlast_i = bus.wlast; + assign bus.bready = (initiator_responder == INITIATOR) ? bready_o : 'bz; + assign bready_i = bus.bready; + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_write_in_if_pkg::fuse_ctrl_prim_axi_write_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_write_in_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_write_in_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_in_if_driver and fuse_ctrl_prim_axi_write_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_in_if_driver_bfm. + `fuse_ctrl_prim_axi_write_in_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_in_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_write_in_if_driver and fuse_ctrl_prim_axi_write_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_in_if_driver_bfm. + `fuse_ctrl_prim_axi_write_in_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_in_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + awaddr_o <= 'bz; + awburst_o <= 'bz; + awsize_o <= 'bz; + awlen_o <= 'bz; + awuser_o <= 'bz; + awid_o <= 'bz; + awlock_o <= 'bz; + awvalid_o <= 'bz; + wdata_o <= 'bz; + wstrb_o <= 'bz; + wvalid_o <= 'bz; + wlast_o <= 'bz; + bready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_write_in_if_configuration_s fuse_ctrl_prim_axi_write_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_write_in_if_initiator_s fuse_ctrl_prim_axi_write_in_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_write_in_if_responder_s fuse_ctrl_prim_axi_write_in_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_write_in_if_initiator_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Members within the fuse_ctrl_prim_axi_write_in_if_responder_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + initiator_struct = fuse_ctrl_prim_axi_write_in_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // awaddr_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [AW-1:0] + // awburst_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // awsize_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [2:0] + // awlen_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [7:0] + // awuser_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [UW-1:0] + // awid_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [UW-1:0] + // awlock_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // + // awvalid_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // + // wdata_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [DW-1:0] + // wstrb_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [DW/8-1:0] + // wvalid_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // + // wlast_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // + // bready_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_write_in_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_write_in_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_write_in_if_initiator_s fuse_ctrl_prim_axi_write_in_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_write_in_if_responder_s fuse_ctrl_prim_axi_write_in_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_write_in_if_initiator_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Variables within the fuse_ctrl_prim_axi_write_in_if_responder_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awlock_i; // + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awvalid_i; // + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = wvalid_i; // + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = wlast_i; // + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = bready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_write_in_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_write_in_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_if.sv new file mode 100644 index 000000000..80a131b63 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_if.sv @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_write_in_if interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_write_in_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_write_in_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_write_in_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awaddr), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awburst), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awsize), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awlen), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awuser), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awlock), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.wdata), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.wstrb), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.wvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.wlast), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.bready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_in_if_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_write_in_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] awaddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst, + inout tri [2:0] awsize, + inout tri [7:0] awlen, + inout tri [UW-1:0] awuser, + inout tri [UW-1:0] awid, + inout tri awlock, + inout tri awvalid, + inout tri [DW-1:0] wdata, + inout tri [DW/8-1:0] wstrb, + inout tri wvalid, + inout tri wlast, + inout tri bready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output awaddr, + output awburst, + output awsize, + output awlen, + output awuser, + output awid, + output awlock, + output awvalid, + output wdata, + output wstrb, + output wvalid, + output wlast, + output bready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_macros.svh new file mode 100644 index 000000000..21b77c4eb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_macros.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_write_in_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_write_in_if_configuration class. +// + `define fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_write_in_if_configuration_s; + + `define fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_if_configuration_s to_struct();\ + fuse_ctrl_prim_axi_write_in_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_write_in_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_write_in_if_configuration_s fuse_ctrl_prim_axi_write_in_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_write_in_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_write_in_if_transaction class. +// + `define fuse_ctrl_prim_axi_write_in_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_in_if_monitor_s; + + `define fuse_ctrl_prim_axi_write_in_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_if_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_write_in_if_monitor_struct = \ + { \ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_in_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_write_in_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_write_in_if_monitor_s fuse_ctrl_prim_axi_write_in_if_monitor_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_in_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_write_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_in_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_in_if_initiator_s; + + `define fuse_ctrl_prim_axi_write_in_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_if_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_write_in_if_initiator_struct = \ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_in_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_in_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_write_in_if_initiator_s fuse_ctrl_prim_axi_write_in_if_initiator_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_in_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_write_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_in_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_in_if_responder_s; + + `define fuse_ctrl_prim_axi_write_in_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_if_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_write_in_if_responder_struct = \ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_in_if_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_in_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_write_in_if_responder_s fuse_ctrl_prim_axi_write_in_if_responder_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_in_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor.svh new file mode 100644 index 000000000..d70eab613 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_write_in_if transactions observed by the +// fuse_ctrl_prim_axi_write_in_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_write_in_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_write_in_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_write_in_if_monitor_s fuse_ctrl_prim_axi_write_in_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_write_in_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor_bfm.sv new file mode 100644 index 000000000..d69cf9edc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor_bfm.sv @@ -0,0 +1,248 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_write_in_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_write_in_if monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_write_in_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_write_in_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_write_in_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_in_if_macros.svh" + + +interface fuse_ctrl_prim_axi_write_in_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_write_in_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_in_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_write_in_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_in_if_monitor_s fuse_ctrl_prim_axi_write_in_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] awaddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + tri [2:0] awsize_i; + tri [7:0] awlen_i; + tri [UW-1:0] awuser_i; + tri [UW-1:0] awid_i; + tri awlock_i; + tri awvalid_i; + tri [DW-1:0] wdata_i; + tri [DW/8-1:0] wstrb_i; + tri wvalid_i; + tri wlast_i; + tri bready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awaddr_i = bus.awaddr; + assign awburst_i = bus.awburst; + assign awsize_i = bus.awsize; + assign awlen_i = bus.awlen; + assign awuser_i = bus.awuser; + assign awid_i = bus.awid; + assign awlock_i = bus.awlock; + assign awvalid_i = bus.awvalid; + assign wdata_i = bus.wdata; + assign wstrb_i = bus.wstrb; + assign wvalid_i = bus.wvalid; + assign wlast_i = bus.wlast; + assign bready_i = bus.bready; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_write_in_if_pkg::fuse_ctrl_prim_axi_write_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_write_in_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_write_in_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_write_in_if_configuration_s fuse_ctrl_prim_axi_write_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_write_in_if_monitor_s fuse_ctrl_prim_axi_write_in_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awaddr + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awvalid + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awburst + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awsize + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awlen + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awuser + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awid + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awlock + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_wdata + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_wstrb + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_wvalid + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_wlast + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_bready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awlock_i; // + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awvalid_i; // + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = wvalid_i; // + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = wlast_i; // + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = bready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_random_sequence.svh new file mode 100644 index 000000000..2855daa79 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_write_in_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_write_in_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_write_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_write_in_if_random_sequence::body()-fuse_ctrl_prim_axi_write_in_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_write_in_if_driver_bfm via the sequencer and fuse_ctrl_prim_axi_write_in_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_write_in_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_responder_sequence.svh new file mode 100644 index 000000000..0b77b4c78 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_write_in_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_write_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_sequence_base.svh new file mode 100644 index 000000000..33d0fe368 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_in_if_transaction_req_t; + fuse_ctrl_prim_axi_write_in_if_transaction_req_t req; + typedef fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_in_if_transaction_rsp_t; + fuse_ctrl_prim_axi_write_in_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_write_in_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_write_in_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction.svh new file mode 100644 index 000000000..587456c34 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction.svh @@ -0,0 +1,256 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_write_in_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] prim_awaddr ; + logic prim_awvalid ; + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + logic [2:0] prim_awsize ; + logic [7:0] prim_awlen ; + logic [UW-1:0] prim_awuser ; + logic [IW-1:0] prim_awid ; + logic prim_awlock ; + logic [DW-1:0] prim_wdata ; + logic [DW/8 - 1:0] prim_wstrb ; + logic prim_wvalid ; + logic prim_wlast ; + logic prim_bready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_write_in_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_write_in_if_monitor and fuse_ctrl_prim_axi_write_in_if_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_in_if_monitor_s fuse_ctrl_prim_axi_write_in_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_in_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_if_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_in_if_driver and fuse_ctrl_prim_axi_write_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_in_if_initiator_s fuse_ctrl_prim_axi_write_in_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_in_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_if_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_write_in_if_driver and fuse_ctrl_prim_axi_write_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_in_if_responder_s fuse_ctrl_prim_axi_write_in_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_in_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_if_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awaddr:0x%x prim_awvalid:0x%x prim_awburst:0x%x prim_awsize:0x%x prim_awlen:0x%x prim_awuser:0x%x prim_awid:0x%x prim_awlock:0x%x prim_wdata:0x%x prim_wstrb:0x%x prim_wvalid:0x%x prim_wlast:0x%x prim_bready:0x%x ",prim_awaddr,prim_awvalid,prim_awburst,prim_awsize,prim_awlen,prim_awuser,prim_awid,prim_awlock,prim_wdata,prim_wstrb,prim_wvalid,prim_wlast,prim_bready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_wdata == RHS.prim_wdata) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awaddr = RHS.prim_awaddr; + this.prim_awvalid = RHS.prim_awvalid; + this.prim_awburst = RHS.prim_awburst; + this.prim_awsize = RHS.prim_awsize; + this.prim_awlen = RHS.prim_awlen; + this.prim_awuser = RHS.prim_awuser; + this.prim_awid = RHS.prim_awid; + this.prim_awlock = RHS.prim_awlock; + this.prim_wdata = RHS.prim_wdata; + this.prim_wstrb = RHS.prim_wstrb; + this.prim_wvalid = RHS.prim_wvalid; + this.prim_wlast = RHS.prim_wlast; + this.prim_bready = RHS.prim_bready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_write_in_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awaddr,"prim_awaddr"); + $add_attribute(transaction_view_h,prim_awvalid,"prim_awvalid"); + $add_attribute(transaction_view_h,prim_awburst,"prim_awburst"); + $add_attribute(transaction_view_h,prim_awsize,"prim_awsize"); + $add_attribute(transaction_view_h,prim_awlen,"prim_awlen"); + $add_attribute(transaction_view_h,prim_awuser,"prim_awuser"); + $add_attribute(transaction_view_h,prim_awid,"prim_awid"); + $add_attribute(transaction_view_h,prim_awlock,"prim_awlock"); + $add_attribute(transaction_view_h,prim_wdata,"prim_wdata"); + $add_attribute(transaction_view_h,prim_wstrb,"prim_wstrb"); + $add_attribute(transaction_view_h,prim_wvalid,"prim_wvalid"); + $add_attribute(transaction_view_h,prim_wlast,"prim_wlast"); + $add_attribute(transaction_view_h,prim_bready,"prim_bready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction_coverage.svh new file mode 100644 index 000000000..0a8862ad8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction_coverage.svh @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_write_in_if transaction information using +// a covergroup named fuse_ctrl_prim_axi_write_in_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_write_in_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awaddr: coverpoint coverage_trans.prim_awaddr; + prim_awvalid: coverpoint coverage_trans.prim_awvalid; + prim_awburst: coverpoint coverage_trans.prim_awburst; + prim_awsize: coverpoint coverage_trans.prim_awsize; + prim_awlen: coverpoint coverage_trans.prim_awlen; + prim_awuser: coverpoint coverage_trans.prim_awuser; + prim_awid: coverpoint coverage_trans.prim_awid; + prim_awlock: coverpoint coverage_trans.prim_awlock; + prim_wdata: coverpoint coverage_trans.prim_wdata; + prim_wstrb: coverpoint coverage_trans.prim_wstrb; + prim_wvalid: coverpoint coverage_trans.prim_wvalid; + prim_wlast: coverpoint coverage_trans.prim_wlast; + prim_bready: coverpoint coverage_trans.prim_bready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_write_in_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_write_in_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_in_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_write_in_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/yaml/fuse_ctrl_prim_axi_write_in_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/yaml/fuse_ctrl_prim_axi_write_in_if_interface.yaml new file mode 100644 index 000000000..94606fc08 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/yaml/fuse_ctrl_prim_axi_write_in_if_interface.yaml @@ -0,0 +1,161 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_write_in_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: awaddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: awburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: awsize + reset_value: '''bz' + width: '3' + - dir: output + name: awlen + reset_value: '''bz' + width: '8' + - dir: output + name: awuser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awid + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awlock + reset_value: '''bz' + width: '1' + - dir: output + name: awvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wdata + reset_value: '''bz' + width: '[''DW'']' + - dir: output + name: wstrb + reset_value: '''bz' + width: '[''DW/8'']' + - dir: output + name: wvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wlast + reset_value: '''bz' + width: '1' + - dir: output + name: bready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: prim_awaddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awuser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wstrb + type: logic [DW/8 - 1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_bready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.project new file mode 100644 index 000000000..8c615b525 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_write_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.svproject new file mode 100644 index 000000000..14eb90e60 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/Makefile new file mode 100644 index 000000000..58b6255e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_write_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_write_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hvl.f + +fuse_ctrl_prim_axi_write_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hdl.f + +fuse_ctrl_prim_axi_write_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_write_in_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_write_in_pkg +COMP_fuse_ctrl_prim_axi_write_in_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_write_in_pkg +COMP_fuse_ctrl_prim_axi_write_in_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_write_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_write_in_pkg: $(COMP_fuse_ctrl_prim_axi_write_in_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_write_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_write_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_write_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_write_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_write_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_in_pkg += -I$(fuse_ctrl_prim_axi_write_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_in_pkg += $(fuse_ctrl_prim_axi_write_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_write_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/compile.do new file mode 100644 index 000000000..0b7eaf691 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_write_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in.compile new file mode 100644 index 000000000..cc55184d7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_write_in_hvl.compile + - fuse_ctrl_prim_axi_write_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_bfm.vinfo new file mode 100644 index 000000000..f0da591fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_write_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_write_in_if.sv +src/fuse_ctrl_prim_axi_write_in_driver_bfm.sv +src/fuse_ctrl_prim_axi_write_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_common.compile new file mode 100644 index 000000000..9fd1f6c57 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_write_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hdl.f new file mode 100644 index 000000000..05ff74470 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hvl.f new file mode 100644 index 000000000..9e594a7e8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_xrtl.f new file mode 100644 index 000000000..aeb98365e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hdl.compile new file mode 100644 index 000000000..954117b62 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_write_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_write_in_if.sv + - src/fuse_ctrl_prim_axi_write_in_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_write_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hvl.compile new file mode 100644 index 000000000..7be9859cb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_write_in_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_write_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.sv new file mode 100644 index 000000000..bebb7a348 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_write_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_write_in_macros.svh" + + export fuse_ctrl_prim_axi_write_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_write_in_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_write_in_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_configuration.svh" + `include "src/fuse_ctrl_prim_axi_write_in_driver.svh" + `include "src/fuse_ctrl_prim_axi_write_in_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_write_in_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_write_in_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_write_in2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.vinfo new file mode 100644 index 000000000..a03a77b1d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_write_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_write_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.sv new file mode 100644 index 000000000..b974d8d0d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_write_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_write_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.vinfo new file mode 100644 index 000000000..6813b251a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_write_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_sve.F new file mode 100644 index 000000000..276278034 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in2reg_adapter.svh new file mode 100644 index 000000000..5711099ae --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_write_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_write_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_write_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_agent.svh new file mode 100644 index 000000000..552affab0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_write_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_write_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_write_in_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_configuration.svh new file mode 100644 index 000000000..2a5858b9b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_write_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_write_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_write_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_write_in_configuration_s fuse_ctrl_prim_axi_write_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_write_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_write_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_write_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_write_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_write_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_write_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver.svh new file mode 100644 index 000000000..ad7975fd9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_write_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_write_in_driver and fuse_ctrl_prim_axi_write_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_write_in_driver_bfm. +`fuse_ctrl_prim_axi_write_in_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_in_initiator_s fuse_ctrl_prim_axi_write_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_write_in_driver and fuse_ctrl_prim_axi_write_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_write_in_driver_bfm. +`fuse_ctrl_prim_axi_write_in_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_in_responder_s fuse_ctrl_prim_axi_write_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_write_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_write_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_write_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_write_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver_bfm.sv new file mode 100644 index 000000000..74c7fb4ce --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver_bfm.sv @@ -0,0 +1,429 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_write_in signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_write_in driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_write_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_write_in_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_write_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_in_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_in_macros.svh" + +interface fuse_ctrl_prim_axi_write_in_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_write_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] awaddr_i; + reg [AW-1:0] awaddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] awburst_o = 'bz; + tri [2:0] awsize_i; + reg [2:0] awsize_o = 'bz; + tri [7:0] awlen_i; + reg [7:0] awlen_o = 'bz; + tri [UW-1:0] awuser_i; + reg [UW-1:0] awuser_o = 'bz; + tri [UW-1:0] awid_i; + reg [UW-1:0] awid_o = 'bz; + tri awlock_i; + reg awlock_o = 'bz; + tri awvalid_i; + reg awvalid_o = 'bz; + tri [DW-1:0] wdata_i; + reg [DW-1:0] wdata_o = 'bz; + tri [DW/8-1:0] wstrb_i; + reg [DW/8-1:0] wstrb_o = 'bz; + tri wvalid_i; + reg wvalid_o = 'bz; + tri wlast_i; + reg wlast_o = 'bz; + tri bready_i; + reg bready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.awaddr = (initiator_responder == INITIATOR) ? awaddr_o : 'bz; + assign awaddr_i = bus.awaddr; + assign bus.awburst = (initiator_responder == INITIATOR) ? awburst_o : 'bz; + assign awburst_i = bus.awburst; + assign bus.awsize = (initiator_responder == INITIATOR) ? awsize_o : 'bz; + assign awsize_i = bus.awsize; + assign bus.awlen = (initiator_responder == INITIATOR) ? awlen_o : 'bz; + assign awlen_i = bus.awlen; + assign bus.awuser = (initiator_responder == INITIATOR) ? awuser_o : 'bz; + assign awuser_i = bus.awuser; + assign bus.awid = (initiator_responder == INITIATOR) ? awid_o : 'bz; + assign awid_i = bus.awid; + assign bus.awlock = (initiator_responder == INITIATOR) ? awlock_o : 'bz; + assign awlock_i = bus.awlock; + assign bus.awvalid = (initiator_responder == INITIATOR) ? awvalid_o : 'bz; + assign awvalid_i = bus.awvalid; + assign bus.wdata = (initiator_responder == INITIATOR) ? wdata_o : 'bz; + assign wdata_i = bus.wdata; + assign bus.wstrb = (initiator_responder == INITIATOR) ? wstrb_o : 'bz; + assign wstrb_i = bus.wstrb; + assign bus.wvalid = (initiator_responder == INITIATOR) ? wvalid_o : 'bz; + assign wvalid_i = bus.wvalid; + assign bus.wlast = (initiator_responder == INITIATOR) ? wlast_o : 'bz; + assign wlast_i = bus.wlast; + assign bus.bready = (initiator_responder == INITIATOR) ? bready_o : 'bz; + assign bready_i = bus.bready; + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_write_in_pkg::fuse_ctrl_prim_axi_write_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_write_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_write_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_write_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_in_driver and fuse_ctrl_prim_axi_write_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_in_driver_bfm. + `fuse_ctrl_prim_axi_write_in_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_write_in_driver and fuse_ctrl_prim_axi_write_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_in_driver_bfm. + `fuse_ctrl_prim_axi_write_in_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + awaddr_o <= 'bz; + awburst_o <= 'bz; + awsize_o <= 'bz; + awlen_o <= 'bz; + awuser_o <= 'bz; + awid_o <= 'bz; + awlock_o <= 'bz; + awvalid_o <= 'bz; + wdata_o <= 'bz; + wstrb_o <= 'bz; + wvalid_o <= 'bz; + wlast_o <= 'bz; + bready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_write_in_configuration_s fuse_ctrl_prim_axi_write_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_write_in_initiator_s fuse_ctrl_prim_axi_write_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_write_in_responder_s fuse_ctrl_prim_axi_write_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_write_in_initiator_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Members within the fuse_ctrl_prim_axi_write_in_responder_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + initiator_struct = fuse_ctrl_prim_axi_write_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // awaddr_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [AW-1:0] + // awburst_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // awsize_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [2:0] + // awlen_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [7:0] + // awuser_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [UW-1:0] + // awid_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [UW-1:0] + // awlock_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // + // awvalid_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // + // wdata_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [DW-1:0] + // wstrb_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [DW/8-1:0] + // wvalid_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // + // wlast_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // + // bready_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_write_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_write_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_write_in_initiator_s fuse_ctrl_prim_axi_write_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_write_in_responder_s fuse_ctrl_prim_axi_write_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_write_in_initiator_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Variables within the fuse_ctrl_prim_axi_write_in_responder_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awlock_i; // + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awvalid_i; // + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = wvalid_i; // + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = wlast_i; // + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = bready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_write_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_write_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_if.sv new file mode 100644 index 000000000..ba77427e3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_if.sv @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_write_in interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_write_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_write_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_write_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awaddr), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awburst), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awsize), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awlen), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awuser), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awlock), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.wdata), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.wstrb), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.wvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.wlast), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.bready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_in_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_write_in_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] awaddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst, + inout tri [2:0] awsize, + inout tri [7:0] awlen, + inout tri [UW-1:0] awuser, + inout tri [UW-1:0] awid, + inout tri awlock, + inout tri awvalid, + inout tri [DW-1:0] wdata, + inout tri [DW/8-1:0] wstrb, + inout tri wvalid, + inout tri wlast, + inout tri bready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output awaddr, + output awburst, + output awsize, + output awlen, + output awuser, + output awid, + output awlock, + output awvalid, + output wdata, + output wstrb, + output wvalid, + output wlast, + output bready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_macros.svh new file mode 100644 index 000000000..5d21a9094 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_macros.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_write_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_write_in_configuration class. +// + `define fuse_ctrl_prim_axi_write_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_write_in_configuration_s; + + `define fuse_ctrl_prim_axi_write_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_configuration_s to_struct();\ + fuse_ctrl_prim_axi_write_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_write_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_write_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_write_in_configuration_s fuse_ctrl_prim_axi_write_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_write_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_write_in_transaction class. +// + `define fuse_ctrl_prim_axi_write_in_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_in_monitor_s; + + `define fuse_ctrl_prim_axi_write_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_write_in_monitor_struct = \ + { \ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_write_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_write_in_monitor_s fuse_ctrl_prim_axi_write_in_monitor_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_write_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_in_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_in_initiator_s; + + `define fuse_ctrl_prim_axi_write_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_write_in_initiator_struct = \ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_write_in_initiator_s fuse_ctrl_prim_axi_write_in_initiator_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_write_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_in_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_in_responder_s; + + `define fuse_ctrl_prim_axi_write_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_write_in_responder_struct = \ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_in_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_write_in_responder_s fuse_ctrl_prim_axi_write_in_responder_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor.svh new file mode 100644 index 000000000..4deee8c06 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_write_in transactions observed by the +// fuse_ctrl_prim_axi_write_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_write_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_write_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_write_in_monitor_s fuse_ctrl_prim_axi_write_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_write_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor_bfm.sv new file mode 100644 index 000000000..80b4df5ac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor_bfm.sv @@ -0,0 +1,248 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_write_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_write_in monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_write_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_write_in_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_write_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_in_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_in_macros.svh" + + +interface fuse_ctrl_prim_axi_write_in_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_write_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_write_in_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_in_monitor_s fuse_ctrl_prim_axi_write_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_write_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] awaddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + tri [2:0] awsize_i; + tri [7:0] awlen_i; + tri [UW-1:0] awuser_i; + tri [UW-1:0] awid_i; + tri awlock_i; + tri awvalid_i; + tri [DW-1:0] wdata_i; + tri [DW/8-1:0] wstrb_i; + tri wvalid_i; + tri wlast_i; + tri bready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awaddr_i = bus.awaddr; + assign awburst_i = bus.awburst; + assign awsize_i = bus.awsize; + assign awlen_i = bus.awlen; + assign awuser_i = bus.awuser; + assign awid_i = bus.awid; + assign awlock_i = bus.awlock; + assign awvalid_i = bus.awvalid; + assign wdata_i = bus.wdata; + assign wstrb_i = bus.wstrb; + assign wvalid_i = bus.wvalid; + assign wlast_i = bus.wlast; + assign bready_i = bus.bready; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_write_in_pkg::fuse_ctrl_prim_axi_write_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_write_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_write_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_write_in_configuration_s fuse_ctrl_prim_axi_write_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_write_in_monitor_s fuse_ctrl_prim_axi_write_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awaddr + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awvalid + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awburst + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awsize + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awlen + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awuser + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awid + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awlock + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_wdata + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_wstrb + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_wvalid + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_wlast + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_bready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awlock_i; // + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awvalid_i; // + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = wvalid_i; // + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = wlast_i; // + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = bready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_random_sequence.svh new file mode 100644 index 000000000..5b9a8e55b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_write_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_write_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_write_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_write_in_random_sequence::body()-fuse_ctrl_prim_axi_write_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_write_in_driver_bfm via the sequencer and fuse_ctrl_prim_axi_write_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_write_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_responder_sequence.svh new file mode 100644 index 000000000..e8be3065d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_write_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_write_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_sequence_base.svh new file mode 100644 index 000000000..2d40c99ed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_in_transaction_req_t; + fuse_ctrl_prim_axi_write_in_transaction_req_t req; + typedef fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_in_transaction_rsp_t; + fuse_ctrl_prim_axi_write_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_write_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_write_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction.svh new file mode 100644 index 000000000..e58f4ec51 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction.svh @@ -0,0 +1,256 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_write_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] prim_awaddr ; + logic prim_awvalid ; + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + logic [2:0] prim_awsize ; + logic [7:0] prim_awlen ; + logic [UW-1:0] prim_awuser ; + logic [IW-1:0] prim_awid ; + logic prim_awlock ; + logic [DW-1:0] prim_wdata ; + logic [DW/8 - 1:0] prim_wstrb ; + logic prim_wvalid ; + logic prim_wlast ; + logic prim_bready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_write_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_write_in_monitor and fuse_ctrl_prim_axi_write_in_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_in_monitor_s fuse_ctrl_prim_axi_write_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_in_driver and fuse_ctrl_prim_axi_write_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_in_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_in_initiator_s fuse_ctrl_prim_axi_write_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_write_in_driver and fuse_ctrl_prim_axi_write_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_in_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_in_responder_s fuse_ctrl_prim_axi_write_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awaddr:0x%x prim_awvalid:0x%x prim_awburst:0x%x prim_awsize:0x%x prim_awlen:0x%x prim_awuser:0x%x prim_awid:0x%x prim_awlock:0x%x prim_wdata:0x%x prim_wstrb:0x%x prim_wvalid:0x%x prim_wlast:0x%x prim_bready:0x%x ",prim_awaddr,prim_awvalid,prim_awburst,prim_awsize,prim_awlen,prim_awuser,prim_awid,prim_awlock,prim_wdata,prim_wstrb,prim_wvalid,prim_wlast,prim_bready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_wdata == RHS.prim_wdata) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awaddr = RHS.prim_awaddr; + this.prim_awvalid = RHS.prim_awvalid; + this.prim_awburst = RHS.prim_awburst; + this.prim_awsize = RHS.prim_awsize; + this.prim_awlen = RHS.prim_awlen; + this.prim_awuser = RHS.prim_awuser; + this.prim_awid = RHS.prim_awid; + this.prim_awlock = RHS.prim_awlock; + this.prim_wdata = RHS.prim_wdata; + this.prim_wstrb = RHS.prim_wstrb; + this.prim_wvalid = RHS.prim_wvalid; + this.prim_wlast = RHS.prim_wlast; + this.prim_bready = RHS.prim_bready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_write_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awaddr,"prim_awaddr"); + $add_attribute(transaction_view_h,prim_awvalid,"prim_awvalid"); + $add_attribute(transaction_view_h,prim_awburst,"prim_awburst"); + $add_attribute(transaction_view_h,prim_awsize,"prim_awsize"); + $add_attribute(transaction_view_h,prim_awlen,"prim_awlen"); + $add_attribute(transaction_view_h,prim_awuser,"prim_awuser"); + $add_attribute(transaction_view_h,prim_awid,"prim_awid"); + $add_attribute(transaction_view_h,prim_awlock,"prim_awlock"); + $add_attribute(transaction_view_h,prim_wdata,"prim_wdata"); + $add_attribute(transaction_view_h,prim_wstrb,"prim_wstrb"); + $add_attribute(transaction_view_h,prim_wvalid,"prim_wvalid"); + $add_attribute(transaction_view_h,prim_wlast,"prim_wlast"); + $add_attribute(transaction_view_h,prim_bready,"prim_bready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction_coverage.svh new file mode 100644 index 000000000..30d005a0a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction_coverage.svh @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_write_in transaction information using +// a covergroup named fuse_ctrl_prim_axi_write_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_write_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awaddr: coverpoint coverage_trans.prim_awaddr; + prim_awvalid: coverpoint coverage_trans.prim_awvalid; + prim_awburst: coverpoint coverage_trans.prim_awburst; + prim_awsize: coverpoint coverage_trans.prim_awsize; + prim_awlen: coverpoint coverage_trans.prim_awlen; + prim_awuser: coverpoint coverage_trans.prim_awuser; + prim_awid: coverpoint coverage_trans.prim_awid; + prim_awlock: coverpoint coverage_trans.prim_awlock; + prim_wdata: coverpoint coverage_trans.prim_wdata; + prim_wstrb: coverpoint coverage_trans.prim_wstrb; + prim_wvalid: coverpoint coverage_trans.prim_wvalid; + prim_wlast: coverpoint coverage_trans.prim_wlast; + prim_bready: coverpoint coverage_trans.prim_bready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_write_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_write_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_write_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/yaml/fuse_ctrl_prim_axi_write_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/yaml/fuse_ctrl_prim_axi_write_in_interface.yaml new file mode 100644 index 000000000..ec7591e55 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/yaml/fuse_ctrl_prim_axi_write_in_interface.yaml @@ -0,0 +1,161 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_write_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: awaddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: awburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: awsize + reset_value: '''bz' + width: '3' + - dir: output + name: awlen + reset_value: '''bz' + width: '8' + - dir: output + name: awuser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awid + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awlock + reset_value: '''bz' + width: '1' + - dir: output + name: awvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wdata + reset_value: '''bz' + width: '[''DW'']' + - dir: output + name: wstrb + reset_value: '''bz' + width: '[''DW/8'']' + - dir: output + name: wvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wlast + reset_value: '''bz' + width: '1' + - dir: output + name: bready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: prim_awaddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awuser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wstrb + type: logic [DW/8 - 1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_bready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.project new file mode 100644 index 000000000..3fbcdcad1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_write_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.svproject new file mode 100644 index 000000000..c87614b22 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/Makefile new file mode 100644 index 000000000..1ac2ce11c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_write_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_write_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hvl.f + +fuse_ctrl_prim_axi_write_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hdl.f + +fuse_ctrl_prim_axi_write_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_write_out_if_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_write_out_if_pkg +COMP_fuse_ctrl_prim_axi_write_out_if_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_write_out_if_pkg +COMP_fuse_ctrl_prim_axi_write_out_if_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_write_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_write_out_if_pkg: $(COMP_fuse_ctrl_prim_axi_write_out_if_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_write_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_write_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_write_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_out_if_pkg += -I$(fuse_ctrl_prim_axi_write_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_out_if_pkg += $(fuse_ctrl_prim_axi_write_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_out_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_write_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/compile.do new file mode 100644 index 000000000..195e5ab83 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_write_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if.compile new file mode 100644 index 000000000..8935f53f7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_write_out_if_hvl.compile + - fuse_ctrl_prim_axi_write_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_bfm.vinfo new file mode 100644 index 000000000..18c4d8b34 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_write_out_if_if.sv +src/fuse_ctrl_prim_axi_write_out_if_driver_bfm.sv +src/fuse_ctrl_prim_axi_write_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_common.compile new file mode 100644 index 000000000..b42384370 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hdl.f new file mode 100644 index 000000000..eb11340b2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hvl.f new file mode 100644 index 000000000..aa9e377b1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_xrtl.f new file mode 100644 index 000000000..54a6c5251 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hdl.compile new file mode 100644 index 000000000..dfeac8677 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_write_out_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_write_out_if_if.sv + - src/fuse_ctrl_prim_axi_write_out_if_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hvl.compile new file mode 100644 index 000000000..2e07fe5b4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_write_out_if_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.sv new file mode 100644 index 000000000..489f30c82 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_write_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_write_out_if_macros.svh" + + export fuse_ctrl_prim_axi_write_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_write_out_if_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_write_out_if_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_if_configuration.svh" + `include "src/fuse_ctrl_prim_axi_write_out_if_driver.svh" + `include "src/fuse_ctrl_prim_axi_write_out_if_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_if_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_write_out_if_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_write_out_if_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_if_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_write_out_if2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.vinfo new file mode 100644 index 000000000..20ff7d6ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv new file mode 100644 index 000000000..e893dbdcc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_write_out_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_write_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..3c442ba81 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_sve.F new file mode 100644 index 000000000..dedbb6647 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if2reg_adapter.svh new file mode 100644 index 000000000..24aefdb70 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_write_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_write_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_write_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_agent.svh new file mode 100644 index 000000000..f7ca4af1b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_write_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_configuration.svh new file mode 100644 index 000000000..1f4fb4bd2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_write_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_write_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_write_out_if_configuration_s fuse_ctrl_prim_axi_write_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_write_out_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_if_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_write_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_write_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_write_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_write_out_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver.svh new file mode 100644 index 000000000..820e05be0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_write_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_write_out_if_driver and fuse_ctrl_prim_axi_write_out_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_write_out_if_driver_bfm. +`fuse_ctrl_prim_axi_write_out_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_out_if_initiator_s fuse_ctrl_prim_axi_write_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_write_out_if_driver and fuse_ctrl_prim_axi_write_out_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_write_out_if_driver_bfm. +`fuse_ctrl_prim_axi_write_out_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_out_if_responder_s fuse_ctrl_prim_axi_write_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_write_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_write_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_write_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_write_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver_bfm.sv new file mode 100644 index 000000000..12dbc26ed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_write_out_if signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_write_out_if driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_write_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_write_out_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_write_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_out_if_macros.svh" + +interface fuse_ctrl_prim_axi_write_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_write_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_write_out_if_pkg::fuse_ctrl_prim_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_write_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_write_out_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_out_if_driver and fuse_ctrl_prim_axi_write_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_out_if_driver_bfm. + `fuse_ctrl_prim_axi_write_out_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_write_out_if_driver and fuse_ctrl_prim_axi_write_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_out_if_driver_bfm. + `fuse_ctrl_prim_axi_write_out_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_write_out_if_configuration_s fuse_ctrl_prim_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_write_out_if_initiator_s fuse_ctrl_prim_axi_write_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_write_out_if_responder_s fuse_ctrl_prim_axi_write_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_write_out_if_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Members within the fuse_ctrl_prim_axi_write_out_if_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + initiator_struct = fuse_ctrl_prim_axi_write_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_prim_axi_write_out_if_responder_struct.xyz = awready_i; // + // fuse_ctrl_prim_axi_write_out_if_responder_struct.xyz = wready_i; // + // fuse_ctrl_prim_axi_write_out_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_out_if_responder_struct.xyz = bid_i; // + // fuse_ctrl_prim_axi_write_out_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_write_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_write_out_if_initiator_s fuse_ctrl_prim_axi_write_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_write_out_if_responder_s fuse_ctrl_prim_axi_write_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_write_out_if_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Variables within the fuse_ctrl_prim_axi_write_out_if_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= fuse_ctrl_prim_axi_write_out_if_initiator_struct.xyz; // + // wready_o <= fuse_ctrl_prim_axi_write_out_if_initiator_struct.xyz; // + // bresp_o <= fuse_ctrl_prim_axi_write_out_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= fuse_ctrl_prim_axi_write_out_if_initiator_struct.xyz; // + // bvalid_o <= fuse_ctrl_prim_axi_write_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_write_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_if.sv new file mode 100644 index 000000000..49688b122 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_write_out_if interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_write_out_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_write_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_write_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_if_bus.awready), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_if_bus.wready), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_if_bus.bresp), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_if_bus.bid), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_out_if_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_write_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_macros.svh new file mode 100644 index 000000000..21b9831e7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_write_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_write_out_if_configuration class. +// + `define fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_write_out_if_configuration_s; + + `define fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_if_configuration_s to_struct();\ + fuse_ctrl_prim_axi_write_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_write_out_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_write_out_if_configuration_s fuse_ctrl_prim_axi_write_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_write_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_write_out_if_transaction class. +// + `define fuse_ctrl_prim_axi_write_out_if_MONITOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } fuse_ctrl_prim_axi_write_out_if_monitor_s; + + `define fuse_ctrl_prim_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_if_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_write_out_if_monitor_struct = \ + { \ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( fuse_ctrl_prim_axi_write_out_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_write_out_if_monitor_s fuse_ctrl_prim_axi_write_out_if_monitor_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = fuse_ctrl_prim_axi_write_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } fuse_ctrl_prim_axi_write_out_if_initiator_s; + + `define fuse_ctrl_prim_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_if_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_write_out_if_initiator_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( fuse_ctrl_prim_axi_write_out_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_write_out_if_initiator_s fuse_ctrl_prim_axi_write_out_if_initiator_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = fuse_ctrl_prim_axi_write_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } fuse_ctrl_prim_axi_write_out_if_responder_s; + + `define fuse_ctrl_prim_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_if_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_write_out_if_responder_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( fuse_ctrl_prim_axi_write_out_if_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_write_out_if_responder_s fuse_ctrl_prim_axi_write_out_if_responder_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = fuse_ctrl_prim_axi_write_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor.svh new file mode 100644 index 000000000..d8852fe9a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_write_out_if transactions observed by the +// fuse_ctrl_prim_axi_write_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_write_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_write_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_write_out_if_monitor_s fuse_ctrl_prim_axi_write_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_write_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor_bfm.sv new file mode 100644 index 000000000..2455bcc7b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_write_out_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_write_out_if monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_write_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_write_out_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_write_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_out_if_macros.svh" + + +interface fuse_ctrl_prim_axi_write_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_write_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_write_out_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_out_if_monitor_s fuse_ctrl_prim_axi_write_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_write_out_if_pkg::fuse_ctrl_prim_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_write_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_write_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_write_out_if_configuration_s fuse_ctrl_prim_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_write_out_if_monitor_s fuse_ctrl_prim_axi_write_out_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_write_out_if_monitor_struct.prim_awready + // // fuse_ctrl_prim_axi_write_out_if_monitor_struct.prim_wready + // // fuse_ctrl_prim_axi_write_out_if_monitor_struct.prim_bresp + // // fuse_ctrl_prim_axi_write_out_if_monitor_struct.prim_bid + // // fuse_ctrl_prim_axi_write_out_if_monitor_struct.prim_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_write_out_if_monitor_struct.xyz = awready_i; // + // fuse_ctrl_prim_axi_write_out_if_monitor_struct.xyz = wready_i; // + // fuse_ctrl_prim_axi_write_out_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_out_if_monitor_struct.xyz = bid_i; // + // fuse_ctrl_prim_axi_write_out_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_random_sequence.svh new file mode 100644 index 000000000..55946e4ad --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_write_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_write_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_write_out_if_random_sequence::body()-fuse_ctrl_prim_axi_write_out_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_write_out_if_driver_bfm via the sequencer and fuse_ctrl_prim_axi_write_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_write_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_responder_sequence.svh new file mode 100644 index 000000000..fa31c283d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_write_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_sequence_base.svh new file mode 100644 index 000000000..aa53c7213 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_out_if_transaction_req_t; + fuse_ctrl_prim_axi_write_out_if_transaction_req_t req; + typedef fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_out_if_transaction_rsp_t; + fuse_ctrl_prim_axi_write_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_write_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_write_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction.svh new file mode 100644 index 000000000..c4bc6fa5c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_write_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_awready ; + logic prim_wready ; + axi_pkg::axi_burst_e prim_bresp ; + logic prim_bid ; + logic prim_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_write_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_write_out_if_monitor and fuse_ctrl_prim_axi_write_out_if_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_out_if_monitor_s fuse_ctrl_prim_axi_write_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_out_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_if_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_out_if_driver and fuse_ctrl_prim_axi_write_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_out_if_initiator_s fuse_ctrl_prim_axi_write_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_out_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_if_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_write_out_if_driver and fuse_ctrl_prim_axi_write_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_out_if_responder_s fuse_ctrl_prim_axi_write_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_out_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_if_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awready:0x%x prim_wready:0x%x prim_bresp:0x%x prim_bid:0x%x prim_bvalid:0x%x ",prim_awready,prim_wready,prim_bresp,prim_bid,prim_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_awready == RHS.prim_awready) + &&(this.prim_wready == RHS.prim_wready) + &&(this.prim_bresp == RHS.prim_bresp) + &&(this.prim_bid == RHS.prim_bid) + &&(this.prim_bvalid == RHS.prim_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awready = RHS.prim_awready; + this.prim_wready = RHS.prim_wready; + this.prim_bresp = RHS.prim_bresp; + this.prim_bid = RHS.prim_bid; + this.prim_bvalid = RHS.prim_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_write_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awready,"prim_awready"); + $add_attribute(transaction_view_h,prim_wready,"prim_wready"); + $add_attribute(transaction_view_h,prim_bresp,"prim_bresp"); + $add_attribute(transaction_view_h,prim_bid,"prim_bid"); + $add_attribute(transaction_view_h,prim_bvalid,"prim_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction_coverage.svh new file mode 100644 index 000000000..2459f7b3c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_write_out_if transaction information using +// a covergroup named fuse_ctrl_prim_axi_write_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_write_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awready: coverpoint coverage_trans.prim_awready; + prim_wready: coverpoint coverage_trans.prim_wready; + prim_bresp: coverpoint coverage_trans.prim_bresp; + prim_bid: coverpoint coverage_trans.prim_bid; + prim_bvalid: coverpoint coverage_trans.prim_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_write_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_write_out_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_write_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/yaml/fuse_ctrl_prim_axi_write_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/yaml/fuse_ctrl_prim_axi_write_out_if_interface.yaml new file mode 100644 index 000000000..0c0ce4466 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/yaml/fuse_ctrl_prim_axi_write_out_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_write_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.project new file mode 100644 index 000000000..3e0bf6c6b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_write_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.svproject new file mode 100644 index 000000000..376273afc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/Makefile new file mode 100644 index 000000000..7bd75ac29 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_write_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_write_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hvl.f + +fuse_ctrl_prim_axi_write_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hdl.f + +fuse_ctrl_prim_axi_write_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_write_out_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_write_out_pkg +COMP_fuse_ctrl_prim_axi_write_out_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_write_out_pkg +COMP_fuse_ctrl_prim_axi_write_out_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_write_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_write_out_pkg: $(COMP_fuse_ctrl_prim_axi_write_out_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_write_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_write_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_write_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_write_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_write_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_out_pkg += -I$(fuse_ctrl_prim_axi_write_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_out_pkg += $(fuse_ctrl_prim_axi_write_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_write_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/compile.do new file mode 100644 index 000000000..2728571fe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_write_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out.compile new file mode 100644 index 000000000..fa21f0f3e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_write_out_hvl.compile + - fuse_ctrl_prim_axi_write_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_bfm.vinfo new file mode 100644 index 000000000..708c584b5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_write_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_write_out_if.sv +src/fuse_ctrl_prim_axi_write_out_driver_bfm.sv +src/fuse_ctrl_prim_axi_write_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_common.compile new file mode 100644 index 000000000..ba5ad3565 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_write_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hdl.f new file mode 100644 index 000000000..6b9dd5f56 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hvl.f new file mode 100644 index 000000000..6aea29704 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_xrtl.f new file mode 100644 index 000000000..3c6293173 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hdl.compile new file mode 100644 index 000000000..1a738c19e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_write_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_write_out_if.sv + - src/fuse_ctrl_prim_axi_write_out_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_write_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hvl.compile new file mode 100644 index 000000000..894eaaf2f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_write_out_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_write_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.sv new file mode 100644 index 000000000..50f57ffb2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_write_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_write_out_macros.svh" + + export fuse_ctrl_prim_axi_write_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_write_out_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_write_out_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_configuration.svh" + `include "src/fuse_ctrl_prim_axi_write_out_driver.svh" + `include "src/fuse_ctrl_prim_axi_write_out_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_write_out_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_write_out_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_write_out2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.vinfo new file mode 100644 index 000000000..790347eb1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_write_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_write_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.sv new file mode 100644 index 000000000..bd64b4efe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_write_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_write_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.vinfo new file mode 100644 index 000000000..dfc2d8e5c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_write_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_sve.F new file mode 100644 index 000000000..9a71aafbc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out2reg_adapter.svh new file mode 100644 index 000000000..34b91afc0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_write_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_write_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_write_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_agent.svh new file mode 100644 index 000000000..0622fae7b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_write_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_write_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_write_out_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_configuration.svh new file mode 100644 index 000000000..2440f4015 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_write_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_write_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_write_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_write_out_configuration_s fuse_ctrl_prim_axi_write_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_write_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_write_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_write_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_write_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_write_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_write_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver.svh new file mode 100644 index 000000000..97995a3fe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_write_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_write_out_driver and fuse_ctrl_prim_axi_write_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_write_out_driver_bfm. +`fuse_ctrl_prim_axi_write_out_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_out_initiator_s fuse_ctrl_prim_axi_write_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_write_out_driver and fuse_ctrl_prim_axi_write_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_write_out_driver_bfm. +`fuse_ctrl_prim_axi_write_out_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_out_responder_s fuse_ctrl_prim_axi_write_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_write_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_write_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_write_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_write_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver_bfm.sv new file mode 100644 index 000000000..7e5c72db7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_write_out signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_write_out driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_write_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_write_out_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_write_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_out_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_out_macros.svh" + +interface fuse_ctrl_prim_axi_write_out_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_write_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_write_out_pkg::fuse_ctrl_prim_axi_write_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_write_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_write_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_write_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_out_driver and fuse_ctrl_prim_axi_write_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_out_driver_bfm. + `fuse_ctrl_prim_axi_write_out_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_write_out_driver and fuse_ctrl_prim_axi_write_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_out_driver_bfm. + `fuse_ctrl_prim_axi_write_out_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_write_out_configuration_s fuse_ctrl_prim_axi_write_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_write_out_initiator_s fuse_ctrl_prim_axi_write_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_write_out_responder_s fuse_ctrl_prim_axi_write_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_write_out_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Members within the fuse_ctrl_prim_axi_write_out_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + initiator_struct = fuse_ctrl_prim_axi_write_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_prim_axi_write_out_responder_struct.xyz = awready_i; // + // fuse_ctrl_prim_axi_write_out_responder_struct.xyz = wready_i; // + // fuse_ctrl_prim_axi_write_out_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_out_responder_struct.xyz = bid_i; // + // fuse_ctrl_prim_axi_write_out_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_write_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_write_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_write_out_initiator_s fuse_ctrl_prim_axi_write_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_write_out_responder_s fuse_ctrl_prim_axi_write_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_write_out_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Variables within the fuse_ctrl_prim_axi_write_out_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= fuse_ctrl_prim_axi_write_out_initiator_struct.xyz; // + // wready_o <= fuse_ctrl_prim_axi_write_out_initiator_struct.xyz; // + // bresp_o <= fuse_ctrl_prim_axi_write_out_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= fuse_ctrl_prim_axi_write_out_initiator_struct.xyz; // + // bvalid_o <= fuse_ctrl_prim_axi_write_out_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_write_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_write_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_if.sv new file mode 100644 index 000000000..66c2c91b7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_write_out interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_write_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_write_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_write_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_bus.awready), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_bus.wready), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_bus.bresp), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_bus.bid), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_out_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_write_out_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_macros.svh new file mode 100644 index 000000000..28bfd68ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_write_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_write_out_configuration class. +// + `define fuse_ctrl_prim_axi_write_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_write_out_configuration_s; + + `define fuse_ctrl_prim_axi_write_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_configuration_s to_struct();\ + fuse_ctrl_prim_axi_write_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_write_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_write_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_write_out_configuration_s fuse_ctrl_prim_axi_write_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_write_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_write_out_transaction class. +// + `define fuse_ctrl_prim_axi_write_out_MONITOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } fuse_ctrl_prim_axi_write_out_monitor_s; + + `define fuse_ctrl_prim_axi_write_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_write_out_monitor_struct = \ + { \ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( fuse_ctrl_prim_axi_write_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_write_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_write_out_monitor_s fuse_ctrl_prim_axi_write_out_monitor_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = fuse_ctrl_prim_axi_write_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_write_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_out_INITIATOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } fuse_ctrl_prim_axi_write_out_initiator_s; + + `define fuse_ctrl_prim_axi_write_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_write_out_initiator_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( fuse_ctrl_prim_axi_write_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_write_out_initiator_s fuse_ctrl_prim_axi_write_out_initiator_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = fuse_ctrl_prim_axi_write_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_write_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_out_RESPONDER_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } fuse_ctrl_prim_axi_write_out_responder_s; + + `define fuse_ctrl_prim_axi_write_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_write_out_responder_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( fuse_ctrl_prim_axi_write_out_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_write_out_responder_s fuse_ctrl_prim_axi_write_out_responder_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = fuse_ctrl_prim_axi_write_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor.svh new file mode 100644 index 000000000..db0d6bb13 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_write_out transactions observed by the +// fuse_ctrl_prim_axi_write_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_write_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_write_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_write_out_monitor_s fuse_ctrl_prim_axi_write_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_write_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor_bfm.sv new file mode 100644 index 000000000..d8a55807b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_write_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_write_out monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_write_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_write_out_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_write_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_out_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_out_macros.svh" + + +interface fuse_ctrl_prim_axi_write_out_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_write_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_write_out_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_out_monitor_s fuse_ctrl_prim_axi_write_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_write_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_write_out_pkg::fuse_ctrl_prim_axi_write_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_write_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_write_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_write_out_configuration_s fuse_ctrl_prim_axi_write_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_write_out_monitor_s fuse_ctrl_prim_axi_write_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_write_out_monitor_struct.prim_awready + // // fuse_ctrl_prim_axi_write_out_monitor_struct.prim_wready + // // fuse_ctrl_prim_axi_write_out_monitor_struct.prim_bresp + // // fuse_ctrl_prim_axi_write_out_monitor_struct.prim_bid + // // fuse_ctrl_prim_axi_write_out_monitor_struct.prim_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_write_out_monitor_struct.xyz = awready_i; // + // fuse_ctrl_prim_axi_write_out_monitor_struct.xyz = wready_i; // + // fuse_ctrl_prim_axi_write_out_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_out_monitor_struct.xyz = bid_i; // + // fuse_ctrl_prim_axi_write_out_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_random_sequence.svh new file mode 100644 index 000000000..c5c49199d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_write_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_write_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_write_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_write_out_random_sequence::body()-fuse_ctrl_prim_axi_write_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_write_out_driver_bfm via the sequencer and fuse_ctrl_prim_axi_write_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_write_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_responder_sequence.svh new file mode 100644 index 000000000..f129205e3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_write_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_write_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_sequence_base.svh new file mode 100644 index 000000000..28cfc04d0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_out_transaction_req_t; + fuse_ctrl_prim_axi_write_out_transaction_req_t req; + typedef fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_out_transaction_rsp_t; + fuse_ctrl_prim_axi_write_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_write_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_write_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction.svh new file mode 100644 index 000000000..fd93a892d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_write_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_awready ; + logic prim_wready ; + axi_pkg::axi_burst_e prim_bresp ; + logic prim_bid ; + logic prim_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_write_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_write_out_monitor and fuse_ctrl_prim_axi_write_out_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_out_monitor_s fuse_ctrl_prim_axi_write_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_out_driver and fuse_ctrl_prim_axi_write_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_out_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_out_initiator_s fuse_ctrl_prim_axi_write_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_write_out_driver and fuse_ctrl_prim_axi_write_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_out_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_out_responder_s fuse_ctrl_prim_axi_write_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awready:0x%x prim_wready:0x%x prim_bresp:0x%x prim_bid:0x%x prim_bvalid:0x%x ",prim_awready,prim_wready,prim_bresp,prim_bid,prim_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_awready == RHS.prim_awready) + &&(this.prim_wready == RHS.prim_wready) + &&(this.prim_bresp == RHS.prim_bresp) + &&(this.prim_bid == RHS.prim_bid) + &&(this.prim_bvalid == RHS.prim_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awready = RHS.prim_awready; + this.prim_wready = RHS.prim_wready; + this.prim_bresp = RHS.prim_bresp; + this.prim_bid = RHS.prim_bid; + this.prim_bvalid = RHS.prim_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_write_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awready,"prim_awready"); + $add_attribute(transaction_view_h,prim_wready,"prim_wready"); + $add_attribute(transaction_view_h,prim_bresp,"prim_bresp"); + $add_attribute(transaction_view_h,prim_bid,"prim_bid"); + $add_attribute(transaction_view_h,prim_bvalid,"prim_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction_coverage.svh new file mode 100644 index 000000000..8a37ca501 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_write_out transaction information using +// a covergroup named fuse_ctrl_prim_axi_write_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_write_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awready: coverpoint coverage_trans.prim_awready; + prim_wready: coverpoint coverage_trans.prim_wready; + prim_bresp: coverpoint coverage_trans.prim_bresp; + prim_bid: coverpoint coverage_trans.prim_bid; + prim_bvalid: coverpoint coverage_trans.prim_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_write_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_write_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_write_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/yaml/fuse_ctrl_prim_axi_write_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/yaml/fuse_ctrl_prim_axi_write_out_interface.yaml new file mode 100644 index 000000000..d0566d0e7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/yaml/fuse_ctrl_prim_axi_write_out_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_write_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.project new file mode 100644 index 000000000..ffd5f9686 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_rst_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.svproject new file mode 100644 index 000000000..79beebd45 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/Makefile new file mode 100644 index 000000000..4067417f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_rst interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_rst_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f + +fuse_ctrl_rst_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f + +fuse_ctrl_rst_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f + +COMP_fuse_ctrl_rst_PKG_TGT_0 = q_comp_fuse_ctrl_rst_pkg +COMP_fuse_ctrl_rst_PKG_TGT_1 = v_comp_fuse_ctrl_rst_pkg +COMP_fuse_ctrl_rst_PKG_TGT = $(COMP_fuse_ctrl_rst_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_rst_pkg: $(COMP_fuse_ctrl_rst_PKG_TGT) + +q_comp_fuse_ctrl_rst_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_rst_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_rst_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_rst_PKG_XRTL) + +v_comp_fuse_ctrl_rst_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_rst_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_rst_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_rst_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_rst_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_rst_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_rst_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_rst_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_rst_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_rst_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_rst_pkg += -I$(fuse_ctrl_rst_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_rst_pkg += $(fuse_ctrl_rst_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_rst_pkg += \ + \ + -o .so + +comp_fuse_ctrl_rst_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_rst_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_rst_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_rst_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_rst_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/compile.do new file mode 100644 index 000000000..935ebc791 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_rst interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile new file mode 100644 index 000000000..98756cb39 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_rst_hvl.compile + - fuse_ctrl_rst_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo new file mode 100644 index 000000000..c41b1f119 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_rst_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_rst_if.sv +src/fuse_ctrl_rst_driver_bfm.sv +src/fuse_ctrl_rst_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_common.compile new file mode 100644 index 000000000..098d340ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_rst_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f new file mode 100644 index 000000000..a5e629a59 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f new file mode 100644 index 000000000..9bddd1e32 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f new file mode 100644 index 000000000..a68e85753 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hdl.compile new file mode 100644 index 000000000..5e99298f4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_rst_common.compile +incdir: + - . +src: + - src/fuse_ctrl_rst_if.sv + - src/fuse_ctrl_rst_monitor_bfm.sv + - src/fuse_ctrl_rst_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hvl.compile new file mode 100644 index 000000000..69ab1ac56 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_rst_common.compile +incdir: + - . +src: + - fuse_ctrl_rst_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv new file mode 100644 index 000000000..2ea60c87c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_rst_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_rst_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_rst_macros.svh" + + export fuse_ctrl_rst_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_rst_typedefs.svh" + `include "src/fuse_ctrl_rst_transaction.svh" + + `include "src/fuse_ctrl_rst_configuration.svh" + `include "src/fuse_ctrl_rst_driver.svh" + `include "src/fuse_ctrl_rst_monitor.svh" + + `include "src/fuse_ctrl_rst_transaction_coverage.svh" + `include "src/fuse_ctrl_rst_sequence_base.svh" + `include "src/fuse_ctrl_rst_random_sequence.svh" + + `include "src/fuse_ctrl_rst_responder_sequence.svh" + `include "src/fuse_ctrl_rst2reg_adapter.svh" + + `include "src/fuse_ctrl_rst_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo new file mode 100644 index 000000000..7efd3da90 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_rst_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_rst_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.sv new file mode 100644 index 000000000..59c4ce0d1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_rst_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_rst_typedefs_hdl.svh" + `include "src/fuse_ctrl_rst_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.vinfo new file mode 100644 index 000000000..105e5a267 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_rst_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F new file mode 100644 index 000000000..2a76484f8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst2reg_adapter.svh new file mode 100644 index 000000000..e74aaf5c8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_rst interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_rst2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_rst2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_rst_transaction trans_h = fuse_ctrl_rst_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_rst_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_rst2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_agent.svh new file mode 100644 index 000000000..3129024c4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_rst_configuration ), + .DRIVER_T(fuse_ctrl_rst_driver ), + .MONITOR_T(fuse_ctrl_rst_monitor ), + .COVERAGE_T(fuse_ctrl_rst_transaction_coverage ), + .TRANS_T(fuse_ctrl_rst_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_rst_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_configuration.svh new file mode 100644 index 000000000..2b8c3b89a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_rst agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_rst_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_rst_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_rst_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_rst_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_rst_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_CONFIGURATION_STRUCT + fuse_ctrl_rst_configuration_s fuse_ctrl_rst_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_rst_configuration_s + // structure. The function returns the handle to the fuse_ctrl_rst_configuration_struct. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_rst_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_rst_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_rst_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_rst_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_rst_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_rst_configuration_cg.set_inst_name($sformatf("fuse_ctrl_rst_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_rst_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver.svh new file mode 100644 index 000000000..c0c6921a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_rst_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_rst_driver_bfm ), + .REQ(fuse_ctrl_rst_transaction ), + .RSP(fuse_ctrl_rst_transaction )); + + `uvm_component_utils( fuse_ctrl_rst_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_rst_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm +// to communicate initiator driven data to fuse_ctrl_rst_driver_bfm. +`fuse_ctrl_rst_INITIATOR_STRUCT + fuse_ctrl_rst_initiator_s fuse_ctrl_rst_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm +// to communicate Responder driven data to fuse_ctrl_rst_driver_bfm. +`fuse_ctrl_rst_RESPONDER_STRUCT + fuse_ctrl_rst_responder_s fuse_ctrl_rst_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_rst_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_rst_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_rst_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_rst_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver_bfm.sv new file mode 100644 index 000000000..99e34af0a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver_bfm.sv @@ -0,0 +1,296 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_rst signal driving. It is +// accessed by the uvm fuse_ctrl_rst driver through a virtual interface +// handle in the fuse_ctrl_rst configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_rst_if. +// +// Input signals from the fuse_ctrl_rst_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_rst_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_rst_pkg_hdl::*; +`include "src/fuse_ctrl_rst_macros.svh" + +interface fuse_ctrl_rst_driver_bfm + (fuse_ctrl_rst_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_rst_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri rst_ni_i; + reg rst_ni_o = 'bz; + tri [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i_i; + reg [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.rst_ni = (initiator_responder == INITIATOR) ? rst_ni_o : 'bz; + assign rst_ni_i = bus.rst_ni; + assign bus.pwr_otp_i = (initiator_responder == INITIATOR) ? pwr_otp_i_o : 'bz; + assign pwr_otp_i_i = bus.pwr_otp_i; + + // Proxy handle to UVM driver + fuse_ctrl_rst_pkg::fuse_ctrl_rst_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_rst_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_rst_driver to this BFM + // **************************************************************************** + `fuse_ctrl_rst_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm + // to communicate initiator driven data to fuse_ctrl_rst_driver_bfm. + `fuse_ctrl_rst_INITIATOR_STRUCT + fuse_ctrl_rst_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm + // to communicate Responder driven data to fuse_ctrl_rst_driver_bfm. + `fuse_ctrl_rst_RESPONDER_STRUCT + fuse_ctrl_rst_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + rst_ni_o <= 'bz; + pwr_otp_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_rst_configuration_s fuse_ctrl_rst_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_rst_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_rst_initiator_s fuse_ctrl_rst_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_rst_responder_s fuse_ctrl_rst_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_rst_initiator_struct: + // bit assert_rst ; + // bit assert_otp_init ; + // Members within the fuse_ctrl_rst_responder_struct: + // bit assert_rst ; + // bit assert_otp_init ; + initiator_struct = fuse_ctrl_rst_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // rst_ni_o <= fuse_ctrl_rst_initiator_struct.xyz; // + // pwr_otp_i_o <= fuse_ctrl_rst_initiator_struct.xyz; // [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_rst_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_rst_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_rst_initiator_s fuse_ctrl_rst_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_rst_responder_s fuse_ctrl_rst_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_rst_initiator_struct: + // bit assert_rst ; + // bit assert_otp_init ; + // Variables within the fuse_ctrl_rst_responder_struct: + // bit assert_rst ; + // bit assert_otp_init ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_rst_responder_struct.xyz = rst_ni_i; // + // fuse_ctrl_rst_responder_struct.xyz = pwr_otp_i_i; // [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_rst_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_rst_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv new file mode 100644 index 000000000..086a0f954 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv @@ -0,0 +1,83 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_rst interface signals. +// It is instantiated once per fuse_ctrl_rst bus. Bus Functional Models, +// BFM's named fuse_ctrl_rst_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_rst_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_rst_bus.rst_ni), // Agent output +// .dut_signal_port(fuse_ctrl_rst_bus.pwr_otp_i), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_rst_pkg_hdl::*; + +interface fuse_ctrl_rst_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri rst_ni, + inout tri [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input rst_ni, + input pwr_otp_i + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output rst_ni, + output pwr_otp_i + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input rst_ni, + input pwr_otp_i + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_macros.svh new file mode 100644 index 000000000..dfad076e5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_macros.svh @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_rst package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_rst_configuration class. +// + `define fuse_ctrl_rst_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_rst_configuration_s; + + `define fuse_ctrl_rst_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_configuration_s to_struct();\ + fuse_ctrl_rst_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_rst_configuration_struct );\ + endfunction + + `define fuse_ctrl_rst_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_rst_configuration_s fuse_ctrl_rst_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_rst_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_rst_transaction class. +// + `define fuse_ctrl_rst_MONITOR_STRUCT typedef struct packed { \ + bit assert_rst ; \ + bit assert_otp_init ; \ + } fuse_ctrl_rst_monitor_s; + + `define fuse_ctrl_rst_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_monitor_s to_monitor_struct();\ + fuse_ctrl_rst_monitor_struct = \ + { \ + this.assert_rst , \ + this.assert_otp_init \ + };\ + return ( fuse_ctrl_rst_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_rst_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_rst_monitor_s fuse_ctrl_rst_monitor_struct);\ + {\ + this.assert_rst , \ + this.assert_otp_init \ + } = fuse_ctrl_rst_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_rst_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_rst_INITIATOR_STRUCT typedef struct packed { \ + bit assert_rst ; \ + bit assert_otp_init ; \ + } fuse_ctrl_rst_initiator_s; + + `define fuse_ctrl_rst_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_initiator_s to_initiator_struct();\ + fuse_ctrl_rst_initiator_struct = \ + {\ + this.assert_rst , \ + this.assert_otp_init \ + };\ + return ( fuse_ctrl_rst_initiator_struct);\ + endfunction + + `define fuse_ctrl_rst_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_rst_initiator_s fuse_ctrl_rst_initiator_struct);\ + {\ + this.assert_rst , \ + this.assert_otp_init \ + } = fuse_ctrl_rst_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_rst_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_rst_RESPONDER_STRUCT typedef struct packed { \ + bit assert_rst ; \ + bit assert_otp_init ; \ + } fuse_ctrl_rst_responder_s; + + `define fuse_ctrl_rst_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_responder_s to_responder_struct();\ + fuse_ctrl_rst_responder_struct = \ + {\ + this.assert_rst , \ + this.assert_otp_init \ + };\ + return ( fuse_ctrl_rst_responder_struct);\ + endfunction + + `define fuse_ctrl_rst_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_rst_responder_s fuse_ctrl_rst_responder_struct);\ + {\ + this.assert_rst , \ + this.assert_otp_init \ + } = fuse_ctrl_rst_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor.svh new file mode 100644 index 000000000..6e829b3a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_rst transactions observed by the +// fuse_ctrl_rst monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_rst_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_rst_monitor_bfm ), + .TRANS_T(fuse_ctrl_rst_transaction )); + + `uvm_component_utils( fuse_ctrl_rst_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_rst_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_rst_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_rst_monitor_s fuse_ctrl_rst_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_rst_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor_bfm.sv new file mode 100644 index 000000000..6aa8fd333 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor_bfm.sv @@ -0,0 +1,192 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_rst signal monitoring. +// It is accessed by the uvm fuse_ctrl_rst monitor through a virtual +// interface handle in the fuse_ctrl_rst configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_rst_if. +// +// Input signals from the fuse_ctrl_rst_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_rst bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_rst_pkg_hdl::*; +`include "src/fuse_ctrl_rst_macros.svh" + + +interface fuse_ctrl_rst_monitor_bfm + ( fuse_ctrl_rst_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_rst_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_rst_MONITOR_STRUCT + fuse_ctrl_rst_monitor_s fuse_ctrl_rst_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_rst_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri rst_ni_i; + tri [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign rst_ni_i = bus.rst_ni; + assign pwr_otp_i_i = bus.pwr_otp_i; + + // Proxy handle to UVM monitor + fuse_ctrl_rst_pkg::fuse_ctrl_rst_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_rst_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_rst_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_rst_configuration_s fuse_ctrl_rst_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_rst_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_rst_monitor_s fuse_ctrl_rst_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_rst_monitor_struct.assert_rst + // // fuse_ctrl_rst_monitor_struct.assert_otp_init + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_rst_monitor_struct.xyz = rst_ni_i; // + // fuse_ctrl_rst_monitor_struct.xyz = pwr_otp_i_i; // [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_random_sequence.svh new file mode 100644 index 000000000..2b719a026 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_rst transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_rst_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_random_sequence + extends fuse_ctrl_rst_sequence_base ; + + `uvm_object_utils( fuse_ctrl_rst_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_rst_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_rst_random_sequence::body()-fuse_ctrl_rst_transaction randomization failed") + // Send the transaction to the fuse_ctrl_rst_driver_bfm via the sequencer and fuse_ctrl_rst_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_rst_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_responder_sequence.svh new file mode 100644 index 000000000..85fe8a75e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_responder_sequence + extends fuse_ctrl_rst_sequence_base ; + + `uvm_object_utils( fuse_ctrl_rst_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_rst_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_rst_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_sequence_base.svh new file mode 100644 index 000000000..d6a30499e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_rst_transaction ), + .RSP(fuse_ctrl_rst_transaction )); + + `uvm_object_utils( fuse_ctrl_rst_sequence_base ) + + // variables + typedef fuse_ctrl_rst_transaction fuse_ctrl_rst_transaction_req_t; + fuse_ctrl_rst_transaction_req_t req; + typedef fuse_ctrl_rst_transaction fuse_ctrl_rst_transaction_rsp_t; + fuse_ctrl_rst_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_rst_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_rst_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction.svh new file mode 100644 index 000000000..37cf35148 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction.svh @@ -0,0 +1,198 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_rst +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_rst_transaction ) + + bit assert_rst ; + bit assert_otp_init ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_rst_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_rst_monitor and fuse_ctrl_rst_monitor_bfm + // This struct is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_MONITOR_STRUCT + fuse_ctrl_rst_monitor_s fuse_ctrl_rst_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_rst_monitor_s + // structure. The function returns the handle to the fuse_ctrl_rst_monitor_struct. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm + // to communicate initiator driven data to fuse_ctrl_rst_driver_bfm. + // This struct is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_INITIATOR_STRUCT + fuse_ctrl_rst_initiator_s fuse_ctrl_rst_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_rst_initiator_s + // structure. The function returns the handle to the fuse_ctrl_rst_initiator_struct. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm + // to communicate Responder driven data to fuse_ctrl_rst_driver_bfm. + // This struct is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_RESPONDER_STRUCT + fuse_ctrl_rst_responder_s fuse_ctrl_rst_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_rst_responder_s + // structure. The function returns the handle to the fuse_ctrl_rst_responder_struct. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("assert_rst:0x%x assert_otp_init:0x%x ",assert_rst,assert_otp_init); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_rst_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_rst_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.assert_rst = RHS.assert_rst; + this.assert_otp_init = RHS.assert_otp_init; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_rst_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,assert_rst,"assert_rst"); + $add_attribute(transaction_view_h,assert_otp_init,"assert_otp_init"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction_coverage.svh new file mode 100644 index 000000000..8bfc9decb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction_coverage.svh @@ -0,0 +1,85 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_rst transaction information using +// a covergroup named fuse_ctrl_rst_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_rst_transaction )); + + `uvm_component_utils( fuse_ctrl_rst_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_rst_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + assert_rst: coverpoint coverage_trans.assert_rst; + assert_otp_init: coverpoint coverage_trans.assert_otp_init; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_rst_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_rst_transaction_cg.set_inst_name($sformatf("fuse_ctrl_rst_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_rst_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/yaml/fuse_ctrl_rst_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/yaml/fuse_ctrl_rst_interface.yaml new file mode 100644 index 000000000..f21a4199c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_rst_pkg/yaml/fuse_ctrl_rst_interface.yaml @@ -0,0 +1,39 @@ +uvmf: + interfaces: + fuse_ctrl_rst: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: output + name: rst_ni + reset_value: '''bz' + width: '1' + - dir: output + name: pwr_otp_i + reset_value: '''bz' + width: '[''$bits(pwrmgr_pkg::pwr_otp_req_t)'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: assert_rst + type: bit + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: assert_otp_init + type: bit + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.project new file mode 100644 index 000000000..802c3e187 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_secreg_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..be911ec39 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..1eb10014e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_secreg_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_secreg_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f + +fuse_ctrl_secreg_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f + +fuse_ctrl_secreg_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f + +COMP_fuse_ctrl_secreg_axi_read_if_PKG_TGT_0 = q_comp_fuse_ctrl_secreg_axi_read_if_pkg +COMP_fuse_ctrl_secreg_axi_read_if_PKG_TGT_1 = v_comp_fuse_ctrl_secreg_axi_read_if_pkg +COMP_fuse_ctrl_secreg_axi_read_if_PKG_TGT = $(COMP_fuse_ctrl_secreg_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_secreg_axi_read_if_pkg: $(COMP_fuse_ctrl_secreg_axi_read_if_PKG_TGT) + +q_comp_fuse_ctrl_secreg_axi_read_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG_XRTL) + +v_comp_fuse_ctrl_secreg_axi_read_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_secreg_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_if_pkg += -I$(fuse_ctrl_secreg_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_if_pkg += $(fuse_ctrl_secreg_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_secreg_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..04f613c1e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_secreg_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if.compile new file mode 100644 index 000000000..ae2507ea9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_secreg_axi_read_if_hvl.compile + - fuse_ctrl_secreg_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..e97c29c20 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_secreg_axi_read_if_if.sv +src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv +src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_common.compile new file mode 100644 index 000000000..81dd659b6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..220cf1690 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..91290db0d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..3c42c25e3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hdl.compile new file mode 100644 index 000000000..a6821997e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_secreg_axi_read_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_secreg_axi_read_if_if.sv + - src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv + - src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hvl.compile new file mode 100644 index 000000000..8017b8d2c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_secreg_axi_read_if_common.compile +incdir: + - . +src: + - fuse_ctrl_secreg_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.sv new file mode 100644 index 000000000..91a38d680 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_secreg_axi_read_if_macros.svh" + + export fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_secreg_axi_read_if_typedefs.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_transaction.svh" + + `include "src/fuse_ctrl_secreg_axi_read_if_configuration.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_driver.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_monitor.svh" + + `include "src/fuse_ctrl_secreg_axi_read_if_transaction_coverage.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_sequence_base.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_random_sequence.svh" + + `include "src/fuse_ctrl_secreg_axi_read_if_responder_sequence.svh" + `include "src/fuse_ctrl_secreg_axi_read_if2reg_adapter.svh" + + `include "src/fuse_ctrl_secreg_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..3044046cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_secreg_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..e73051e81 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_secreg_axi_read_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..0009d2d8b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..ea92e98f5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..98ba3aacb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_secreg_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_secreg_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_secreg_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_agent.svh new file mode 100644 index 000000000..d2895c679 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_secreg_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_secreg_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_secreg_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_configuration.svh new file mode 100644 index 000000000..981626306 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_secreg_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_secreg_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_secreg_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_CONFIGURATION_STRUCT + fuse_ctrl_secreg_axi_read_if_configuration_s fuse_ctrl_secreg_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_secreg_axi_read_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_if_configuration_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_secreg_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_secreg_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_secreg_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_secreg_axi_read_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver.svh new file mode 100644 index 000000000..ebbf22afa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_secreg_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. +`fuse_ctrl_secreg_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_if_initiator_s fuse_ctrl_secreg_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. +`fuse_ctrl_secreg_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_if_responder_s fuse_ctrl_secreg_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_secreg_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_secreg_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_secreg_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_secreg_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..b440efec7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_secreg_axi_read_if signal driving. It is +// accessed by the uvm fuse_ctrl_secreg_axi_read_if driver through a virtual interface +// handle in the fuse_ctrl_secreg_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_secreg_axi_read_if_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_secreg_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_if_macros.svh" + +interface fuse_ctrl_secreg_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_secreg_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_secreg_axi_read_if_pkg::fuse_ctrl_secreg_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_secreg_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_secreg_axi_read_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_secreg_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. + `fuse_ctrl_secreg_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. + `fuse_ctrl_secreg_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_secreg_axi_read_if_configuration_s fuse_ctrl_secreg_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_secreg_axi_read_if_initiator_s fuse_ctrl_secreg_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_secreg_axi_read_if_responder_s fuse_ctrl_secreg_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_secreg_axi_read_if_initiator_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Members within the fuse_ctrl_secreg_axi_read_if_responder_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + initiator_struct = fuse_ctrl_secreg_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_secreg_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_secreg_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_secreg_axi_read_if_initiator_s fuse_ctrl_secreg_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_secreg_axi_read_if_responder_s fuse_ctrl_secreg_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_secreg_axi_read_if_initiator_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Variables within the fuse_ctrl_secreg_axi_read_if_responder_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arlock_i; // + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_secreg_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_secreg_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_if.sv new file mode 100644 index 000000000..91845e87d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_secreg_axi_read_if interface signals. +// It is instantiated once per fuse_ctrl_secreg_axi_read_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_secreg_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_secreg_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; + +interface fuse_ctrl_secreg_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_macros.svh new file mode 100644 index 000000000..b4d9deeba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_secreg_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_secreg_axi_read_if_configuration class. +// + `define fuse_ctrl_secreg_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_secreg_axi_read_if_configuration_s; + + `define fuse_ctrl_secreg_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_if_configuration_s to_struct();\ + fuse_ctrl_secreg_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_secreg_axi_read_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_secreg_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_secreg_axi_read_if_configuration_s fuse_ctrl_secreg_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_secreg_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_secreg_axi_read_if_transaction class. +// + `define fuse_ctrl_secreg_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_if_monitor_s; + + `define fuse_ctrl_secreg_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_if_monitor_s to_monitor_struct();\ + fuse_ctrl_secreg_axi_read_if_monitor_struct = \ + { \ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_secreg_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_secreg_axi_read_if_monitor_s fuse_ctrl_secreg_axi_read_if_monitor_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_secreg_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_if_initiator_s; + + `define fuse_ctrl_secreg_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_if_initiator_s to_initiator_struct();\ + fuse_ctrl_secreg_axi_read_if_initiator_struct = \ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_secreg_axi_read_if_initiator_s fuse_ctrl_secreg_axi_read_if_initiator_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_secreg_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_if_responder_s; + + `define fuse_ctrl_secreg_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_if_responder_s to_responder_struct();\ + fuse_ctrl_secreg_axi_read_if_responder_struct = \ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_if_responder_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_secreg_axi_read_if_responder_s fuse_ctrl_secreg_axi_read_if_responder_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor.svh new file mode 100644 index 000000000..6addcdb7b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_secreg_axi_read_if transactions observed by the +// fuse_ctrl_secreg_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_secreg_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_secreg_axi_read_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_secreg_axi_read_if_monitor_s fuse_ctrl_secreg_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_secreg_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..7bba9981c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_secreg_axi_read_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_secreg_axi_read_if monitor through a virtual +// interface handle in the fuse_ctrl_secreg_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_secreg_axi_read_if_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_secreg_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_if_macros.svh" + + +interface fuse_ctrl_secreg_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_secreg_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_secreg_axi_read_if_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_if_monitor_s fuse_ctrl_secreg_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_secreg_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_secreg_axi_read_if_pkg::fuse_ctrl_secreg_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_secreg_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_secreg_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_secreg_axi_read_if_configuration_s fuse_ctrl_secreg_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_secreg_axi_read_if_monitor_s fuse_ctrl_secreg_axi_read_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_araddr + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arvalid + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arburst + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arsize + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arlen + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_aruser + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arid + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arlock + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..648972d51 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_secreg_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_secreg_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_secreg_axi_read_if_random_sequence::body()-fuse_ctrl_secreg_axi_read_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_secreg_axi_read_if_driver_bfm via the sequencer and fuse_ctrl_secreg_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_secreg_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..709581bdd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_secreg_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..66bc21078 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_if_transaction_req_t; + fuse_ctrl_secreg_axi_read_if_transaction_req_t req; + typedef fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_if_transaction_rsp_t; + fuse_ctrl_secreg_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_secreg_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_secreg_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction.svh new file mode 100644 index 000000000..c58498d8f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_secreg_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] secreg_araddr ; + logic secreg_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + logic [2:0] secreg_arsize ; + logic [7:0] secreg_arlen ; + logic [UW-1:0] secreg_aruser ; + logic [IW-1:0] secreg_arid ; + logic secreg_arlock ; + logic secreg_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_secreg_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_secreg_axi_read_if_monitor and fuse_ctrl_secreg_axi_read_if_monitor_bfm + // This struct is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_if_monitor_s fuse_ctrl_secreg_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_if_monitor_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_if_initiator_s fuse_ctrl_secreg_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_if_initiator_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_if_responder_s fuse_ctrl_secreg_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_if_responder_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_araddr:0x%x secreg_arvalid:0x%x secreg_arburst:0x%x secreg_arsize:0x%x secreg_arlen:0x%x secreg_aruser:0x%x secreg_arid:0x%x secreg_arlock:0x%x secreg_rready:0x%x ",secreg_araddr,secreg_arvalid,secreg_arburst,secreg_arsize,secreg_arlen,secreg_aruser,secreg_arid,secreg_arlock,secreg_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_araddr = RHS.secreg_araddr; + this.secreg_arvalid = RHS.secreg_arvalid; + this.secreg_arburst = RHS.secreg_arburst; + this.secreg_arsize = RHS.secreg_arsize; + this.secreg_arlen = RHS.secreg_arlen; + this.secreg_aruser = RHS.secreg_aruser; + this.secreg_arid = RHS.secreg_arid; + this.secreg_arlock = RHS.secreg_arlock; + this.secreg_rready = RHS.secreg_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_secreg_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_araddr,"secreg_araddr"); + $add_attribute(transaction_view_h,secreg_arvalid,"secreg_arvalid"); + $add_attribute(transaction_view_h,secreg_arburst,"secreg_arburst"); + $add_attribute(transaction_view_h,secreg_arsize,"secreg_arsize"); + $add_attribute(transaction_view_h,secreg_arlen,"secreg_arlen"); + $add_attribute(transaction_view_h,secreg_aruser,"secreg_aruser"); + $add_attribute(transaction_view_h,secreg_arid,"secreg_arid"); + $add_attribute(transaction_view_h,secreg_arlock,"secreg_arlock"); + $add_attribute(transaction_view_h,secreg_rready,"secreg_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..4da8fb856 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_secreg_axi_read_if transaction information using +// a covergroup named fuse_ctrl_secreg_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_secreg_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_araddr: coverpoint coverage_trans.secreg_araddr; + secreg_arvalid: coverpoint coverage_trans.secreg_arvalid; + secreg_arburst: coverpoint coverage_trans.secreg_arburst; + secreg_arsize: coverpoint coverage_trans.secreg_arsize; + secreg_arlen: coverpoint coverage_trans.secreg_arlen; + secreg_aruser: coverpoint coverage_trans.secreg_aruser; + secreg_arid: coverpoint coverage_trans.secreg_arid; + secreg_arlock: coverpoint coverage_trans.secreg_arlock; + secreg_rready: coverpoint coverage_trans.secreg_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_secreg_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_secreg_axi_read_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_secreg_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/yaml/fuse_ctrl_secreg_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/yaml/fuse_ctrl_secreg_axi_read_if_interface.yaml new file mode 100644 index 000000000..dfcf19887 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/yaml/fuse_ctrl_secreg_axi_read_if_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_secreg_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: secreg_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.project new file mode 100644 index 000000000..9b5119db2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_secreg_axi_read_in_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.svproject new file mode 100644 index 000000000..216cb589b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/Makefile new file mode 100644 index 000000000..ff0b63afb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_secreg_axi_read_in_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_secreg_axi_read_in_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hvl.f + +fuse_ctrl_secreg_axi_read_in_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hdl.f + +fuse_ctrl_secreg_axi_read_in_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_xrtl.f + +COMP_fuse_ctrl_secreg_axi_read_in_if_PKG_TGT_0 = q_comp_fuse_ctrl_secreg_axi_read_in_if_pkg +COMP_fuse_ctrl_secreg_axi_read_in_if_PKG_TGT_1 = v_comp_fuse_ctrl_secreg_axi_read_in_if_pkg +COMP_fuse_ctrl_secreg_axi_read_in_if_PKG_TGT = $(COMP_fuse_ctrl_secreg_axi_read_in_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_secreg_axi_read_in_if_pkg: $(COMP_fuse_ctrl_secreg_axi_read_in_if_PKG_TGT) + +q_comp_fuse_ctrl_secreg_axi_read_in_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG_XRTL) + +v_comp_fuse_ctrl_secreg_axi_read_in_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_secreg_axi_read_in_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_in_if_pkg += -I$(fuse_ctrl_secreg_axi_read_in_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_in_if_pkg += $(fuse_ctrl_secreg_axi_read_in_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_in_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_secreg_axi_read_in_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_in_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_in_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/compile.do new file mode 100644 index 000000000..67fa90a30 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_secreg_axi_read_in_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if.compile new file mode 100644 index 000000000..edfeedfc0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_secreg_axi_read_in_if_hvl.compile + - fuse_ctrl_secreg_axi_read_in_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_bfm.vinfo new file mode 100644 index 000000000..ff090bad6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_secreg_axi_read_in_if_if.sv +src/fuse_ctrl_secreg_axi_read_in_if_driver_bfm.sv +src/fuse_ctrl_secreg_axi_read_in_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_common.compile new file mode 100644 index 000000000..289cd2865 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hdl.f new file mode 100644 index 000000000..a40d395c6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hvl.f new file mode 100644 index 000000000..8d8670a23 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_xrtl.f new file mode 100644 index 000000000..81f832e79 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hdl.compile new file mode 100644 index 000000000..a29a791a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_secreg_axi_read_in_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_secreg_axi_read_in_if_if.sv + - src/fuse_ctrl_secreg_axi_read_in_if_monitor_bfm.sv + - src/fuse_ctrl_secreg_axi_read_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hvl.compile new file mode 100644 index 000000000..5ea481a70 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_secreg_axi_read_in_if_common.compile +incdir: + - . +src: + - fuse_ctrl_secreg_axi_read_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.sv new file mode 100644 index 000000000..ca2fa65e5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_in_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_secreg_axi_read_in_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_secreg_axi_read_in_if_macros.svh" + + export fuse_ctrl_secreg_axi_read_in_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_secreg_axi_read_in_if_typedefs.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_if_transaction.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_if_configuration.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_if_driver.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_if_monitor.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_if_transaction_coverage.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_if_sequence_base.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_if_random_sequence.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_if_responder_sequence.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_if2reg_adapter.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.vinfo new file mode 100644 index 000000000..d85f8b901 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_secreg_axi_read_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv new file mode 100644 index 000000000..faeaeed8a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_in_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_secreg_axi_read_in_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.vinfo new file mode 100644 index 000000000..44fb0c125 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_sve.F new file mode 100644 index 000000000..1256ffedb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if2reg_adapter.svh new file mode 100644 index 000000000..cd5608daf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_secreg_axi_read_in_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_secreg_axi_read_in_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_secreg_axi_read_in_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_agent.svh new file mode 100644 index 000000000..d6359882b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_secreg_axi_read_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_secreg_axi_read_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_secreg_axi_read_in_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_configuration.svh new file mode 100644 index 000000000..f5aa0e94e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_secreg_axi_read_in_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_secreg_axi_read_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_secreg_axi_read_in_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_STRUCT + fuse_ctrl_secreg_axi_read_in_if_configuration_s fuse_ctrl_secreg_axi_read_in_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_secreg_axi_read_in_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_if_configuration_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_secreg_axi_read_in_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_secreg_axi_read_in_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_secreg_axi_read_in_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_secreg_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_secreg_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_secreg_axi_read_in_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_in_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_secreg_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver.svh new file mode 100644 index 000000000..e4ff24f99 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_secreg_axi_read_in_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_secreg_axi_read_in_if_driver and fuse_ctrl_secreg_axi_read_in_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_secreg_axi_read_in_if_driver_bfm. +`fuse_ctrl_secreg_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_in_if_initiator_s fuse_ctrl_secreg_axi_read_in_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_secreg_axi_read_in_if_driver and fuse_ctrl_secreg_axi_read_in_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_secreg_axi_read_in_if_driver_bfm. +`fuse_ctrl_secreg_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_in_if_responder_s fuse_ctrl_secreg_axi_read_in_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_secreg_axi_read_in_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_secreg_axi_read_in_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_secreg_axi_read_in_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_secreg_axi_read_in_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver_bfm.sv new file mode 100644 index 000000000..95d7f303a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_secreg_axi_read_in_if signal driving. It is +// accessed by the uvm fuse_ctrl_secreg_axi_read_in_if driver through a virtual interface +// handle in the fuse_ctrl_secreg_axi_read_in_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_secreg_axi_read_in_if_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_secreg_axi_read_in_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_in_if_macros.svh" + +interface fuse_ctrl_secreg_axi_read_in_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_secreg_axi_read_in_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_in_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_secreg_axi_read_in_if_pkg::fuse_ctrl_secreg_axi_read_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_secreg_axi_read_in_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_secreg_axi_read_in_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_in_if_driver and fuse_ctrl_secreg_axi_read_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_in_if_driver_bfm. + `fuse_ctrl_secreg_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_in_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_secreg_axi_read_in_if_driver and fuse_ctrl_secreg_axi_read_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_in_if_driver_bfm. + `fuse_ctrl_secreg_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_in_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_secreg_axi_read_in_if_configuration_s fuse_ctrl_secreg_axi_read_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_secreg_axi_read_in_if_initiator_s fuse_ctrl_secreg_axi_read_in_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_secreg_axi_read_in_if_responder_s fuse_ctrl_secreg_axi_read_in_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_secreg_axi_read_in_if_initiator_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Members within the fuse_ctrl_secreg_axi_read_in_if_responder_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + initiator_struct = fuse_ctrl_secreg_axi_read_in_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_secreg_axi_read_in_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_secreg_axi_read_in_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_secreg_axi_read_in_if_initiator_s fuse_ctrl_secreg_axi_read_in_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_secreg_axi_read_in_if_responder_s fuse_ctrl_secreg_axi_read_in_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_secreg_axi_read_in_if_initiator_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Variables within the fuse_ctrl_secreg_axi_read_in_if_responder_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = arlock_i; // + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_secreg_axi_read_in_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_secreg_axi_read_in_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_if.sv new file mode 100644 index 000000000..207866a2c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_secreg_axi_read_in_if interface signals. +// It is instantiated once per fuse_ctrl_secreg_axi_read_in_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_secreg_axi_read_in_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_secreg_axi_read_in_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_in_if_pkg_hdl::*; + +interface fuse_ctrl_secreg_axi_read_in_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_macros.svh new file mode 100644 index 000000000..70d9a7aed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_secreg_axi_read_in_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_secreg_axi_read_in_if_configuration class. +// + `define fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_secreg_axi_read_in_if_configuration_s; + + `define fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_if_configuration_s to_struct();\ + fuse_ctrl_secreg_axi_read_in_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_secreg_axi_read_in_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_secreg_axi_read_in_if_configuration_s fuse_ctrl_secreg_axi_read_in_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_secreg_axi_read_in_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_secreg_axi_read_in_if_transaction class. +// + `define fuse_ctrl_secreg_axi_read_in_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_in_if_monitor_s; + + `define fuse_ctrl_secreg_axi_read_in_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_if_monitor_s to_monitor_struct();\ + fuse_ctrl_secreg_axi_read_in_if_monitor_struct = \ + { \ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_in_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_secreg_axi_read_in_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_secreg_axi_read_in_if_monitor_s fuse_ctrl_secreg_axi_read_in_if_monitor_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_in_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_secreg_axi_read_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_in_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_in_if_initiator_s; + + `define fuse_ctrl_secreg_axi_read_in_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_if_initiator_s to_initiator_struct();\ + fuse_ctrl_secreg_axi_read_in_if_initiator_struct = \ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_in_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_in_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_secreg_axi_read_in_if_initiator_s fuse_ctrl_secreg_axi_read_in_if_initiator_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_in_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_secreg_axi_read_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_in_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_in_if_responder_s; + + `define fuse_ctrl_secreg_axi_read_in_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_if_responder_s to_responder_struct();\ + fuse_ctrl_secreg_axi_read_in_if_responder_struct = \ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_in_if_responder_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_in_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_secreg_axi_read_in_if_responder_s fuse_ctrl_secreg_axi_read_in_if_responder_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_in_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor.svh new file mode 100644 index 000000000..f6b696c0a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_secreg_axi_read_in_if transactions observed by the +// fuse_ctrl_secreg_axi_read_in_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_secreg_axi_read_in_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_secreg_axi_read_in_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_secreg_axi_read_in_if_monitor_s fuse_ctrl_secreg_axi_read_in_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_secreg_axi_read_in_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor_bfm.sv new file mode 100644 index 000000000..2a6b5dd00 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_secreg_axi_read_in_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_secreg_axi_read_in_if monitor through a virtual +// interface handle in the fuse_ctrl_secreg_axi_read_in_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_secreg_axi_read_in_if_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_secreg_axi_read_in_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_in_if_macros.svh" + + +interface fuse_ctrl_secreg_axi_read_in_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_secreg_axi_read_in_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_in_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_secreg_axi_read_in_if_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_in_if_monitor_s fuse_ctrl_secreg_axi_read_in_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_secreg_axi_read_in_if_pkg::fuse_ctrl_secreg_axi_read_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_secreg_axi_read_in_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_secreg_axi_read_in_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_secreg_axi_read_in_if_configuration_s fuse_ctrl_secreg_axi_read_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_secreg_axi_read_in_if_monitor_s fuse_ctrl_secreg_axi_read_in_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_araddr + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_arvalid + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_arburst + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_arsize + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_arlen + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_aruser + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_arid + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_arlock + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_random_sequence.svh new file mode 100644 index 000000000..fdbf06a6e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_secreg_axi_read_in_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_secreg_axi_read_in_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_secreg_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_secreg_axi_read_in_if_random_sequence::body()-fuse_ctrl_secreg_axi_read_in_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_secreg_axi_read_in_if_driver_bfm via the sequencer and fuse_ctrl_secreg_axi_read_in_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_secreg_axi_read_in_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_responder_sequence.svh new file mode 100644 index 000000000..e270aad62 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_secreg_axi_read_in_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_secreg_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_sequence_base.svh new file mode 100644 index 000000000..ca8e9725f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_in_if_transaction_req_t; + fuse_ctrl_secreg_axi_read_in_if_transaction_req_t req; + typedef fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_in_if_transaction_rsp_t; + fuse_ctrl_secreg_axi_read_in_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_secreg_axi_read_in_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_secreg_axi_read_in_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction.svh new file mode 100644 index 000000000..aa60a802f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_secreg_axi_read_in_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] secreg_araddr ; + logic secreg_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + logic [2:0] secreg_arsize ; + logic [7:0] secreg_arlen ; + logic [UW-1:0] secreg_aruser ; + logic [IW-1:0] secreg_arid ; + logic secreg_arlock ; + logic secreg_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_secreg_axi_read_in_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_secreg_axi_read_in_if_monitor and fuse_ctrl_secreg_axi_read_in_if_monitor_bfm + // This struct is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_in_if_monitor_s fuse_ctrl_secreg_axi_read_in_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_in_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_if_monitor_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_in_if_driver and fuse_ctrl_secreg_axi_read_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_in_if_initiator_s fuse_ctrl_secreg_axi_read_in_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_in_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_if_initiator_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_secreg_axi_read_in_if_driver and fuse_ctrl_secreg_axi_read_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_in_if_responder_s fuse_ctrl_secreg_axi_read_in_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_in_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_if_responder_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_araddr:0x%x secreg_arvalid:0x%x secreg_arburst:0x%x secreg_arsize:0x%x secreg_arlen:0x%x secreg_aruser:0x%x secreg_arid:0x%x secreg_arlock:0x%x secreg_rready:0x%x ",secreg_araddr,secreg_arvalid,secreg_arburst,secreg_arsize,secreg_arlen,secreg_aruser,secreg_arid,secreg_arlock,secreg_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_araddr = RHS.secreg_araddr; + this.secreg_arvalid = RHS.secreg_arvalid; + this.secreg_arburst = RHS.secreg_arburst; + this.secreg_arsize = RHS.secreg_arsize; + this.secreg_arlen = RHS.secreg_arlen; + this.secreg_aruser = RHS.secreg_aruser; + this.secreg_arid = RHS.secreg_arid; + this.secreg_arlock = RHS.secreg_arlock; + this.secreg_rready = RHS.secreg_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_secreg_axi_read_in_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_araddr,"secreg_araddr"); + $add_attribute(transaction_view_h,secreg_arvalid,"secreg_arvalid"); + $add_attribute(transaction_view_h,secreg_arburst,"secreg_arburst"); + $add_attribute(transaction_view_h,secreg_arsize,"secreg_arsize"); + $add_attribute(transaction_view_h,secreg_arlen,"secreg_arlen"); + $add_attribute(transaction_view_h,secreg_aruser,"secreg_aruser"); + $add_attribute(transaction_view_h,secreg_arid,"secreg_arid"); + $add_attribute(transaction_view_h,secreg_arlock,"secreg_arlock"); + $add_attribute(transaction_view_h,secreg_rready,"secreg_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction_coverage.svh new file mode 100644 index 000000000..3fe27f376 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_secreg_axi_read_in_if transaction information using +// a covergroup named fuse_ctrl_secreg_axi_read_in_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_secreg_axi_read_in_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_araddr: coverpoint coverage_trans.secreg_araddr; + secreg_arvalid: coverpoint coverage_trans.secreg_arvalid; + secreg_arburst: coverpoint coverage_trans.secreg_arburst; + secreg_arsize: coverpoint coverage_trans.secreg_arsize; + secreg_arlen: coverpoint coverage_trans.secreg_arlen; + secreg_aruser: coverpoint coverage_trans.secreg_aruser; + secreg_arid: coverpoint coverage_trans.secreg_arid; + secreg_arlock: coverpoint coverage_trans.secreg_arlock; + secreg_rready: coverpoint coverage_trans.secreg_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_secreg_axi_read_in_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_secreg_axi_read_in_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_in_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_secreg_axi_read_in_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/yaml/fuse_ctrl_secreg_axi_read_in_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/yaml/fuse_ctrl_secreg_axi_read_in_if_interface.yaml new file mode 100644 index 000000000..75a5a8826 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/yaml/fuse_ctrl_secreg_axi_read_in_if_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_secreg_axi_read_in_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: secreg_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.project new file mode 100644 index 000000000..a4da8e376 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_secreg_axi_read_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.svproject new file mode 100644 index 000000000..52a9f8cb9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/Makefile new file mode 100644 index 000000000..0c9fcbd1e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_secreg_axi_read_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_secreg_axi_read_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hvl.f + +fuse_ctrl_secreg_axi_read_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hdl.f + +fuse_ctrl_secreg_axi_read_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_xrtl.f + +COMP_fuse_ctrl_secreg_axi_read_in_PKG_TGT_0 = q_comp_fuse_ctrl_secreg_axi_read_in_pkg +COMP_fuse_ctrl_secreg_axi_read_in_PKG_TGT_1 = v_comp_fuse_ctrl_secreg_axi_read_in_pkg +COMP_fuse_ctrl_secreg_axi_read_in_PKG_TGT = $(COMP_fuse_ctrl_secreg_axi_read_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_secreg_axi_read_in_pkg: $(COMP_fuse_ctrl_secreg_axi_read_in_PKG_TGT) + +q_comp_fuse_ctrl_secreg_axi_read_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG_XRTL) + +v_comp_fuse_ctrl_secreg_axi_read_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_secreg_axi_read_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_in_pkg += -I$(fuse_ctrl_secreg_axi_read_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_in_pkg += $(fuse_ctrl_secreg_axi_read_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_secreg_axi_read_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/compile.do new file mode 100644 index 000000000..88878d432 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_secreg_axi_read_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in.compile new file mode 100644 index 000000000..30a6c81f0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_secreg_axi_read_in_hvl.compile + - fuse_ctrl_secreg_axi_read_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_bfm.vinfo new file mode 100644 index 000000000..7a7c867b2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_secreg_axi_read_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_secreg_axi_read_in_if.sv +src/fuse_ctrl_secreg_axi_read_in_driver_bfm.sv +src/fuse_ctrl_secreg_axi_read_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_common.compile new file mode 100644 index 000000000..34e8920b8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hdl.f new file mode 100644 index 000000000..5f203b951 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hvl.f new file mode 100644 index 000000000..6917a8ff3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_xrtl.f new file mode 100644 index 000000000..4801037d9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hdl.compile new file mode 100644 index 000000000..822c6dae4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_secreg_axi_read_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_secreg_axi_read_in_if.sv + - src/fuse_ctrl_secreg_axi_read_in_monitor_bfm.sv + - src/fuse_ctrl_secreg_axi_read_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hvl.compile new file mode 100644 index 000000000..baf1ae95d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_secreg_axi_read_in_common.compile +incdir: + - . +src: + - fuse_ctrl_secreg_axi_read_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.sv new file mode 100644 index 000000000..411b4957f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_secreg_axi_read_in_macros.svh" + + export fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_secreg_axi_read_in_typedefs.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_transaction.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_configuration.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_driver.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_monitor.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_transaction_coverage.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_sequence_base.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_random_sequence.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_responder_sequence.svh" + `include "src/fuse_ctrl_secreg_axi_read_in2reg_adapter.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.vinfo new file mode 100644 index 000000000..a76e85842 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_secreg_axi_read_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_secreg_axi_read_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv new file mode 100644 index 000000000..1b90f0274 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_secreg_axi_read_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.vinfo new file mode 100644 index 000000000..269b5c06e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_sve.F new file mode 100644 index 000000000..8fec4a904 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in2reg_adapter.svh new file mode 100644 index 000000000..c7d2b13f0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_secreg_axi_read_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_secreg_axi_read_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_secreg_axi_read_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_agent.svh new file mode 100644 index 000000000..59c7181b3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_secreg_axi_read_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_secreg_axi_read_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_secreg_axi_read_in_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_configuration.svh new file mode 100644 index 000000000..c4124708f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_secreg_axi_read_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_secreg_axi_read_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_secreg_axi_read_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_CONFIGURATION_STRUCT + fuse_ctrl_secreg_axi_read_in_configuration_s fuse_ctrl_secreg_axi_read_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_secreg_axi_read_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_configuration_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_secreg_axi_read_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_secreg_axi_read_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_secreg_axi_read_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_secreg_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_secreg_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_secreg_axi_read_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_secreg_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver.svh new file mode 100644 index 000000000..dae487dcd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_secreg_axi_read_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_secreg_axi_read_in_driver and fuse_ctrl_secreg_axi_read_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_secreg_axi_read_in_driver_bfm. +`fuse_ctrl_secreg_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_in_initiator_s fuse_ctrl_secreg_axi_read_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_secreg_axi_read_in_driver and fuse_ctrl_secreg_axi_read_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_secreg_axi_read_in_driver_bfm. +`fuse_ctrl_secreg_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_in_responder_s fuse_ctrl_secreg_axi_read_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_secreg_axi_read_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_secreg_axi_read_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_secreg_axi_read_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_secreg_axi_read_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver_bfm.sv new file mode 100644 index 000000000..4b9b81520 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_secreg_axi_read_in signal driving. It is +// accessed by the uvm fuse_ctrl_secreg_axi_read_in driver through a virtual interface +// handle in the fuse_ctrl_secreg_axi_read_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_secreg_axi_read_in_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_secreg_axi_read_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_in_macros.svh" + +interface fuse_ctrl_secreg_axi_read_in_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_secreg_axi_read_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_secreg_axi_read_in_pkg::fuse_ctrl_secreg_axi_read_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_secreg_axi_read_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_secreg_axi_read_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_secreg_axi_read_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_in_driver and fuse_ctrl_secreg_axi_read_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_in_driver_bfm. + `fuse_ctrl_secreg_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_secreg_axi_read_in_driver and fuse_ctrl_secreg_axi_read_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_in_driver_bfm. + `fuse_ctrl_secreg_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_secreg_axi_read_in_configuration_s fuse_ctrl_secreg_axi_read_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_secreg_axi_read_in_initiator_s fuse_ctrl_secreg_axi_read_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_secreg_axi_read_in_responder_s fuse_ctrl_secreg_axi_read_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_secreg_axi_read_in_initiator_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Members within the fuse_ctrl_secreg_axi_read_in_responder_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + initiator_struct = fuse_ctrl_secreg_axi_read_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_secreg_axi_read_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_secreg_axi_read_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_secreg_axi_read_in_initiator_s fuse_ctrl_secreg_axi_read_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_secreg_axi_read_in_responder_s fuse_ctrl_secreg_axi_read_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_secreg_axi_read_in_initiator_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Variables within the fuse_ctrl_secreg_axi_read_in_responder_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = arlock_i; // + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_secreg_axi_read_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_secreg_axi_read_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_if.sv new file mode 100644 index 000000000..74f7ba6cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_secreg_axi_read_in interface signals. +// It is instantiated once per fuse_ctrl_secreg_axi_read_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_secreg_axi_read_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_secreg_axi_read_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; + +interface fuse_ctrl_secreg_axi_read_in_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_macros.svh new file mode 100644 index 000000000..fd62fe9d0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_secreg_axi_read_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_secreg_axi_read_in_configuration class. +// + `define fuse_ctrl_secreg_axi_read_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_secreg_axi_read_in_configuration_s; + + `define fuse_ctrl_secreg_axi_read_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_configuration_s to_struct();\ + fuse_ctrl_secreg_axi_read_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_secreg_axi_read_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_secreg_axi_read_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_secreg_axi_read_in_configuration_s fuse_ctrl_secreg_axi_read_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_secreg_axi_read_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_secreg_axi_read_in_transaction class. +// + `define fuse_ctrl_secreg_axi_read_in_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_in_monitor_s; + + `define fuse_ctrl_secreg_axi_read_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_monitor_s to_monitor_struct();\ + fuse_ctrl_secreg_axi_read_in_monitor_struct = \ + { \ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_secreg_axi_read_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_secreg_axi_read_in_monitor_s fuse_ctrl_secreg_axi_read_in_monitor_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_secreg_axi_read_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_in_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_in_initiator_s; + + `define fuse_ctrl_secreg_axi_read_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_initiator_s to_initiator_struct();\ + fuse_ctrl_secreg_axi_read_in_initiator_struct = \ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_secreg_axi_read_in_initiator_s fuse_ctrl_secreg_axi_read_in_initiator_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_secreg_axi_read_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_in_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_in_responder_s; + + `define fuse_ctrl_secreg_axi_read_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_responder_s to_responder_struct();\ + fuse_ctrl_secreg_axi_read_in_responder_struct = \ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_in_responder_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_secreg_axi_read_in_responder_s fuse_ctrl_secreg_axi_read_in_responder_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor.svh new file mode 100644 index 000000000..f62bb2c33 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_secreg_axi_read_in transactions observed by the +// fuse_ctrl_secreg_axi_read_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_secreg_axi_read_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_secreg_axi_read_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_secreg_axi_read_in_monitor_s fuse_ctrl_secreg_axi_read_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_secreg_axi_read_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor_bfm.sv new file mode 100644 index 000000000..520864f61 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_secreg_axi_read_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_secreg_axi_read_in monitor through a virtual +// interface handle in the fuse_ctrl_secreg_axi_read_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_secreg_axi_read_in_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_secreg_axi_read_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_in_macros.svh" + + +interface fuse_ctrl_secreg_axi_read_in_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_secreg_axi_read_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_secreg_axi_read_in_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_in_monitor_s fuse_ctrl_secreg_axi_read_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_secreg_axi_read_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_secreg_axi_read_in_pkg::fuse_ctrl_secreg_axi_read_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_secreg_axi_read_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_secreg_axi_read_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_secreg_axi_read_in_configuration_s fuse_ctrl_secreg_axi_read_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_secreg_axi_read_in_monitor_s fuse_ctrl_secreg_axi_read_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_araddr + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_arvalid + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_arburst + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_arsize + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_arlen + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_aruser + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_arid + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_arlock + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_random_sequence.svh new file mode 100644 index 000000000..b2a6f7e7e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_secreg_axi_read_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_secreg_axi_read_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_secreg_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_secreg_axi_read_in_random_sequence::body()-fuse_ctrl_secreg_axi_read_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_secreg_axi_read_in_driver_bfm via the sequencer and fuse_ctrl_secreg_axi_read_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_secreg_axi_read_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_responder_sequence.svh new file mode 100644 index 000000000..c2c7396c0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_secreg_axi_read_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_secreg_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_sequence_base.svh new file mode 100644 index 000000000..dff36dd01 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_in_transaction_req_t; + fuse_ctrl_secreg_axi_read_in_transaction_req_t req; + typedef fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_in_transaction_rsp_t; + fuse_ctrl_secreg_axi_read_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_secreg_axi_read_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_secreg_axi_read_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction.svh new file mode 100644 index 000000000..7a2899ae2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_secreg_axi_read_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] secreg_araddr ; + logic secreg_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + logic [2:0] secreg_arsize ; + logic [7:0] secreg_arlen ; + logic [UW-1:0] secreg_aruser ; + logic [IW-1:0] secreg_arid ; + logic secreg_arlock ; + logic secreg_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_secreg_axi_read_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_secreg_axi_read_in_monitor and fuse_ctrl_secreg_axi_read_in_monitor_bfm + // This struct is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_in_monitor_s fuse_ctrl_secreg_axi_read_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_monitor_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_in_driver and fuse_ctrl_secreg_axi_read_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_in_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_in_initiator_s fuse_ctrl_secreg_axi_read_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_initiator_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_secreg_axi_read_in_driver and fuse_ctrl_secreg_axi_read_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_in_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_in_responder_s fuse_ctrl_secreg_axi_read_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_responder_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_araddr:0x%x secreg_arvalid:0x%x secreg_arburst:0x%x secreg_arsize:0x%x secreg_arlen:0x%x secreg_aruser:0x%x secreg_arid:0x%x secreg_arlock:0x%x secreg_rready:0x%x ",secreg_araddr,secreg_arvalid,secreg_arburst,secreg_arsize,secreg_arlen,secreg_aruser,secreg_arid,secreg_arlock,secreg_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_araddr = RHS.secreg_araddr; + this.secreg_arvalid = RHS.secreg_arvalid; + this.secreg_arburst = RHS.secreg_arburst; + this.secreg_arsize = RHS.secreg_arsize; + this.secreg_arlen = RHS.secreg_arlen; + this.secreg_aruser = RHS.secreg_aruser; + this.secreg_arid = RHS.secreg_arid; + this.secreg_arlock = RHS.secreg_arlock; + this.secreg_rready = RHS.secreg_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_secreg_axi_read_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_araddr,"secreg_araddr"); + $add_attribute(transaction_view_h,secreg_arvalid,"secreg_arvalid"); + $add_attribute(transaction_view_h,secreg_arburst,"secreg_arburst"); + $add_attribute(transaction_view_h,secreg_arsize,"secreg_arsize"); + $add_attribute(transaction_view_h,secreg_arlen,"secreg_arlen"); + $add_attribute(transaction_view_h,secreg_aruser,"secreg_aruser"); + $add_attribute(transaction_view_h,secreg_arid,"secreg_arid"); + $add_attribute(transaction_view_h,secreg_arlock,"secreg_arlock"); + $add_attribute(transaction_view_h,secreg_rready,"secreg_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction_coverage.svh new file mode 100644 index 000000000..586b6770f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_secreg_axi_read_in transaction information using +// a covergroup named fuse_ctrl_secreg_axi_read_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_secreg_axi_read_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_araddr: coverpoint coverage_trans.secreg_araddr; + secreg_arvalid: coverpoint coverage_trans.secreg_arvalid; + secreg_arburst: coverpoint coverage_trans.secreg_arburst; + secreg_arsize: coverpoint coverage_trans.secreg_arsize; + secreg_arlen: coverpoint coverage_trans.secreg_arlen; + secreg_aruser: coverpoint coverage_trans.secreg_aruser; + secreg_arid: coverpoint coverage_trans.secreg_arid; + secreg_arlock: coverpoint coverage_trans.secreg_arlock; + secreg_rready: coverpoint coverage_trans.secreg_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_secreg_axi_read_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_secreg_axi_read_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_secreg_axi_read_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/yaml/fuse_ctrl_secreg_axi_read_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/yaml/fuse_ctrl_secreg_axi_read_in_interface.yaml new file mode 100644 index 000000000..a5ff8dd8b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/yaml/fuse_ctrl_secreg_axi_read_in_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_secreg_axi_read_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: secreg_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.project new file mode 100644 index 000000000..18afeef3d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_secreg_axi_read_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.svproject new file mode 100644 index 000000000..c600cb8e1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/Makefile new file mode 100644 index 000000000..6f4f5542b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_secreg_axi_read_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_secreg_axi_read_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hvl.f + +fuse_ctrl_secreg_axi_read_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hdl.f + +fuse_ctrl_secreg_axi_read_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_xrtl.f + +COMP_fuse_ctrl_secreg_axi_read_out_if_PKG_TGT_0 = q_comp_fuse_ctrl_secreg_axi_read_out_if_pkg +COMP_fuse_ctrl_secreg_axi_read_out_if_PKG_TGT_1 = v_comp_fuse_ctrl_secreg_axi_read_out_if_pkg +COMP_fuse_ctrl_secreg_axi_read_out_if_PKG_TGT = $(COMP_fuse_ctrl_secreg_axi_read_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_secreg_axi_read_out_if_pkg: $(COMP_fuse_ctrl_secreg_axi_read_out_if_PKG_TGT) + +q_comp_fuse_ctrl_secreg_axi_read_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG_XRTL) + +v_comp_fuse_ctrl_secreg_axi_read_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_secreg_axi_read_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_out_if_pkg += -I$(fuse_ctrl_secreg_axi_read_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_out_if_pkg += $(fuse_ctrl_secreg_axi_read_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_out_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_secreg_axi_read_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/compile.do new file mode 100644 index 000000000..9df86868c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_secreg_axi_read_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if.compile new file mode 100644 index 000000000..eb85cfd7c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_secreg_axi_read_out_if_hvl.compile + - fuse_ctrl_secreg_axi_read_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_bfm.vinfo new file mode 100644 index 000000000..0146ca8a1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_secreg_axi_read_out_if_if.sv +src/fuse_ctrl_secreg_axi_read_out_if_driver_bfm.sv +src/fuse_ctrl_secreg_axi_read_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_common.compile new file mode 100644 index 000000000..91b0fa6ac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hdl.f new file mode 100644 index 000000000..8db592711 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hvl.f new file mode 100644 index 000000000..b5b109af5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_xrtl.f new file mode 100644 index 000000000..d0c4b72a5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hdl.compile new file mode 100644 index 000000000..3547429f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_secreg_axi_read_out_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_secreg_axi_read_out_if_if.sv + - src/fuse_ctrl_secreg_axi_read_out_if_monitor_bfm.sv + - src/fuse_ctrl_secreg_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hvl.compile new file mode 100644 index 000000000..43151aea1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_secreg_axi_read_out_if_common.compile +incdir: + - . +src: + - fuse_ctrl_secreg_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.sv new file mode 100644 index 000000000..6ab054b1e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_secreg_axi_read_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_secreg_axi_read_out_if_macros.svh" + + export fuse_ctrl_secreg_axi_read_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_secreg_axi_read_out_if_typedefs.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_if_transaction.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_if_configuration.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_if_driver.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_if_monitor.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_if_transaction_coverage.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_if_sequence_base.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_if_random_sequence.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_if_responder_sequence.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_if2reg_adapter.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.vinfo new file mode 100644 index 000000000..af597b791 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_secreg_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.sv new file mode 100644 index 000000000..b966c748b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_secreg_axi_read_out_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..04a3a2344 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_sve.F new file mode 100644 index 000000000..795ea3865 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if2reg_adapter.svh new file mode 100644 index 000000000..318dd9a3f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_secreg_axi_read_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_secreg_axi_read_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_secreg_axi_read_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_agent.svh new file mode 100644 index 000000000..7481759c6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_secreg_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_secreg_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_secreg_axi_read_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_configuration.svh new file mode 100644 index 000000000..96b86ba40 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_secreg_axi_read_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_secreg_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_secreg_axi_read_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_STRUCT + fuse_ctrl_secreg_axi_read_out_if_configuration_s fuse_ctrl_secreg_axi_read_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_secreg_axi_read_out_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_if_configuration_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_secreg_axi_read_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_secreg_axi_read_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_secreg_axi_read_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_secreg_axi_read_out_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_secreg_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver.svh new file mode 100644 index 000000000..a72957934 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_secreg_axi_read_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_secreg_axi_read_out_if_driver and fuse_ctrl_secreg_axi_read_out_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_secreg_axi_read_out_if_driver_bfm. +`fuse_ctrl_secreg_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_out_if_initiator_s fuse_ctrl_secreg_axi_read_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_secreg_axi_read_out_if_driver and fuse_ctrl_secreg_axi_read_out_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_secreg_axi_read_out_if_driver_bfm. +`fuse_ctrl_secreg_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_out_if_responder_s fuse_ctrl_secreg_axi_read_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_secreg_axi_read_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_secreg_axi_read_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_secreg_axi_read_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_secreg_axi_read_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver_bfm.sv new file mode 100644 index 000000000..b7588ca95 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_secreg_axi_read_out_if signal driving. It is +// accessed by the uvm fuse_ctrl_secreg_axi_read_out_if driver through a virtual interface +// handle in the fuse_ctrl_secreg_axi_read_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_secreg_axi_read_out_if_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_secreg_axi_read_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_out_if_macros.svh" + +interface fuse_ctrl_secreg_axi_read_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_secreg_axi_read_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_secreg_axi_read_out_if_pkg::fuse_ctrl_secreg_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_secreg_axi_read_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_secreg_axi_read_out_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_out_if_driver and fuse_ctrl_secreg_axi_read_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_out_if_driver_bfm. + `fuse_ctrl_secreg_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_secreg_axi_read_out_if_driver and fuse_ctrl_secreg_axi_read_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_out_if_driver_bfm. + `fuse_ctrl_secreg_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_secreg_axi_read_out_if_configuration_s fuse_ctrl_secreg_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_secreg_axi_read_out_if_initiator_s fuse_ctrl_secreg_axi_read_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_secreg_axi_read_out_if_responder_s fuse_ctrl_secreg_axi_read_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_secreg_axi_read_out_if_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Members within the fuse_ctrl_secreg_axi_read_out_if_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + initiator_struct = fuse_ctrl_secreg_axi_read_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_secreg_axi_read_out_if_responder_struct.xyz = arready_i; // + // fuse_ctrl_secreg_axi_read_out_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_secreg_axi_read_out_if_responder_struct.xyz = rresp_i; // + // fuse_ctrl_secreg_axi_read_out_if_responder_struct.xyz = rid_i; // + // fuse_ctrl_secreg_axi_read_out_if_responder_struct.xyz = rlast_i; // + // fuse_ctrl_secreg_axi_read_out_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_secreg_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_secreg_axi_read_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_secreg_axi_read_out_if_initiator_s fuse_ctrl_secreg_axi_read_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_secreg_axi_read_out_if_responder_s fuse_ctrl_secreg_axi_read_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_secreg_axi_read_out_if_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Variables within the fuse_ctrl_secreg_axi_read_out_if_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= fuse_ctrl_secreg_axi_read_out_if_initiator_struct.xyz; // + // rdata_o <= fuse_ctrl_secreg_axi_read_out_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= fuse_ctrl_secreg_axi_read_out_if_initiator_struct.xyz; // + // rid_o <= fuse_ctrl_secreg_axi_read_out_if_initiator_struct.xyz; // + // rlast_o <= fuse_ctrl_secreg_axi_read_out_if_initiator_struct.xyz; // + // rvalid_o <= fuse_ctrl_secreg_axi_read_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_secreg_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_secreg_axi_read_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_if.sv new file mode 100644 index 000000000..73192909d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_secreg_axi_read_out_if interface signals. +// It is instantiated once per fuse_ctrl_secreg_axi_read_out_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_secreg_axi_read_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_secreg_axi_read_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_if_bus.arready), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_if_bus.rdata), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_if_bus.rresp), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_if_bus.rid), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_if_bus.rlast), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_out_if_pkg_hdl::*; + +interface fuse_ctrl_secreg_axi_read_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_macros.svh new file mode 100644 index 000000000..68dec6f33 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_secreg_axi_read_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_secreg_axi_read_out_if_configuration class. +// + `define fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_secreg_axi_read_out_if_configuration_s; + + `define fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_if_configuration_s to_struct();\ + fuse_ctrl_secreg_axi_read_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_secreg_axi_read_out_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_secreg_axi_read_out_if_configuration_s fuse_ctrl_secreg_axi_read_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_secreg_axi_read_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_secreg_axi_read_out_if_transaction class. +// + `define fuse_ctrl_secreg_axi_read_out_if_MONITOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } fuse_ctrl_secreg_axi_read_out_if_monitor_s; + + `define fuse_ctrl_secreg_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_if_monitor_s to_monitor_struct();\ + fuse_ctrl_secreg_axi_read_out_if_monitor_struct = \ + { \ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( fuse_ctrl_secreg_axi_read_out_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_secreg_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_secreg_axi_read_out_if_monitor_s fuse_ctrl_secreg_axi_read_out_if_monitor_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = fuse_ctrl_secreg_axi_read_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_secreg_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } fuse_ctrl_secreg_axi_read_out_if_initiator_s; + + `define fuse_ctrl_secreg_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_if_initiator_s to_initiator_struct();\ + fuse_ctrl_secreg_axi_read_out_if_initiator_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( fuse_ctrl_secreg_axi_read_out_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_secreg_axi_read_out_if_initiator_s fuse_ctrl_secreg_axi_read_out_if_initiator_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = fuse_ctrl_secreg_axi_read_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_secreg_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } fuse_ctrl_secreg_axi_read_out_if_responder_s; + + `define fuse_ctrl_secreg_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_if_responder_s to_responder_struct();\ + fuse_ctrl_secreg_axi_read_out_if_responder_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( fuse_ctrl_secreg_axi_read_out_if_responder_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_secreg_axi_read_out_if_responder_s fuse_ctrl_secreg_axi_read_out_if_responder_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = fuse_ctrl_secreg_axi_read_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor.svh new file mode 100644 index 000000000..ca4e744eb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_secreg_axi_read_out_if transactions observed by the +// fuse_ctrl_secreg_axi_read_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_secreg_axi_read_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_secreg_axi_read_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_secreg_axi_read_out_if_monitor_s fuse_ctrl_secreg_axi_read_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_secreg_axi_read_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor_bfm.sv new file mode 100644 index 000000000..32b5eaf40 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_secreg_axi_read_out_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_secreg_axi_read_out_if monitor through a virtual +// interface handle in the fuse_ctrl_secreg_axi_read_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_secreg_axi_read_out_if_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_secreg_axi_read_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_out_if_macros.svh" + + +interface fuse_ctrl_secreg_axi_read_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_secreg_axi_read_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_secreg_axi_read_out_if_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_out_if_monitor_s fuse_ctrl_secreg_axi_read_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_secreg_axi_read_out_if_pkg::fuse_ctrl_secreg_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_secreg_axi_read_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_secreg_axi_read_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_secreg_axi_read_out_if_configuration_s fuse_ctrl_secreg_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_secreg_axi_read_out_if_monitor_s fuse_ctrl_secreg_axi_read_out_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.secreg_arready + // // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.secreg_rdata + // // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.secreg_rresp + // // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.secreg_rid + // // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.secreg_rlast + // // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.secreg_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.xyz = arready_i; // + // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.xyz = rresp_i; // + // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.xyz = rid_i; // + // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.xyz = rlast_i; // + // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_random_sequence.svh new file mode 100644 index 000000000..30fa8b2f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_secreg_axi_read_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_secreg_axi_read_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_secreg_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_secreg_axi_read_out_if_random_sequence::body()-fuse_ctrl_secreg_axi_read_out_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_secreg_axi_read_out_if_driver_bfm via the sequencer and fuse_ctrl_secreg_axi_read_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_secreg_axi_read_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_responder_sequence.svh new file mode 100644 index 000000000..8627fa46e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_secreg_axi_read_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_secreg_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_sequence_base.svh new file mode 100644 index 000000000..821876b40 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_out_if_transaction_req_t; + fuse_ctrl_secreg_axi_read_out_if_transaction_req_t req; + typedef fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_out_if_transaction_rsp_t; + fuse_ctrl_secreg_axi_read_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_secreg_axi_read_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_secreg_axi_read_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction.svh new file mode 100644 index 000000000..d1fb1311a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_secreg_axi_read_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic secreg_arready ; + logic [DW-1:0] secreg_rdata ; + axi_pkg::axi_burst_e secreg_rresp ; + logic [IW-1:0] secreg_rid ; + logic secreg_rlast ; + logic secreg_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_secreg_axi_read_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_secreg_axi_read_out_if_monitor and fuse_ctrl_secreg_axi_read_out_if_monitor_bfm + // This struct is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_out_if_monitor_s fuse_ctrl_secreg_axi_read_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_out_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_if_monitor_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_out_if_driver and fuse_ctrl_secreg_axi_read_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_out_if_initiator_s fuse_ctrl_secreg_axi_read_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_out_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_if_initiator_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_secreg_axi_read_out_if_driver and fuse_ctrl_secreg_axi_read_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_out_if_responder_s fuse_ctrl_secreg_axi_read_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_out_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_if_responder_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_arready:0x%x secreg_rdata:0x%x secreg_rresp:0x%x secreg_rid:0x%x secreg_rlast:0x%x secreg_rvalid:0x%x ",secreg_arready,secreg_rdata,secreg_rresp,secreg_rid,secreg_rlast,secreg_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.secreg_arready == RHS.secreg_arready) + &&(this.secreg_rdata == RHS.secreg_rdata) + &&(this.secreg_rresp == RHS.secreg_rresp) + &&(this.secreg_rid == RHS.secreg_rid) + &&(this.secreg_rlast == RHS.secreg_rlast) + &&(this.secreg_rvalid == RHS.secreg_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_arready = RHS.secreg_arready; + this.secreg_rdata = RHS.secreg_rdata; + this.secreg_rresp = RHS.secreg_rresp; + this.secreg_rid = RHS.secreg_rid; + this.secreg_rlast = RHS.secreg_rlast; + this.secreg_rvalid = RHS.secreg_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_secreg_axi_read_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_arready,"secreg_arready"); + $add_attribute(transaction_view_h,secreg_rdata,"secreg_rdata"); + $add_attribute(transaction_view_h,secreg_rresp,"secreg_rresp"); + $add_attribute(transaction_view_h,secreg_rid,"secreg_rid"); + $add_attribute(transaction_view_h,secreg_rlast,"secreg_rlast"); + $add_attribute(transaction_view_h,secreg_rvalid,"secreg_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction_coverage.svh new file mode 100644 index 000000000..e5fd88621 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_secreg_axi_read_out_if transaction information using +// a covergroup named fuse_ctrl_secreg_axi_read_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_secreg_axi_read_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_arready: coverpoint coverage_trans.secreg_arready; + secreg_rdata: coverpoint coverage_trans.secreg_rdata; + secreg_rresp: coverpoint coverage_trans.secreg_rresp; + secreg_rid: coverpoint coverage_trans.secreg_rid; + secreg_rlast: coverpoint coverage_trans.secreg_rlast; + secreg_rvalid: coverpoint coverage_trans.secreg_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_secreg_axi_read_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_secreg_axi_read_out_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_secreg_axi_read_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/yaml/fuse_ctrl_secreg_axi_read_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/yaml/fuse_ctrl_secreg_axi_read_out_if_interface.yaml new file mode 100644 index 000000000..a61691557 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/yaml/fuse_ctrl_secreg_axi_read_out_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + fuse_ctrl_secreg_axi_read_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.project new file mode 100644 index 000000000..615ab14e5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_secreg_axi_read_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.svproject new file mode 100644 index 000000000..9d45666db --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/Makefile new file mode 100644 index 000000000..2b6270941 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_secreg_axi_read_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_secreg_axi_read_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hvl.f + +fuse_ctrl_secreg_axi_read_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hdl.f + +fuse_ctrl_secreg_axi_read_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_xrtl.f + +COMP_fuse_ctrl_secreg_axi_read_out_PKG_TGT_0 = q_comp_fuse_ctrl_secreg_axi_read_out_pkg +COMP_fuse_ctrl_secreg_axi_read_out_PKG_TGT_1 = v_comp_fuse_ctrl_secreg_axi_read_out_pkg +COMP_fuse_ctrl_secreg_axi_read_out_PKG_TGT = $(COMP_fuse_ctrl_secreg_axi_read_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_secreg_axi_read_out_pkg: $(COMP_fuse_ctrl_secreg_axi_read_out_PKG_TGT) + +q_comp_fuse_ctrl_secreg_axi_read_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG_XRTL) + +v_comp_fuse_ctrl_secreg_axi_read_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_secreg_axi_read_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_out_pkg += -I$(fuse_ctrl_secreg_axi_read_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_out_pkg += $(fuse_ctrl_secreg_axi_read_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_secreg_axi_read_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/compile.do new file mode 100644 index 000000000..76aa3ca09 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_secreg_axi_read_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out.compile new file mode 100644 index 000000000..630dad514 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_secreg_axi_read_out_hvl.compile + - fuse_ctrl_secreg_axi_read_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_bfm.vinfo new file mode 100644 index 000000000..ecf711b62 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_secreg_axi_read_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_secreg_axi_read_out_if.sv +src/fuse_ctrl_secreg_axi_read_out_driver_bfm.sv +src/fuse_ctrl_secreg_axi_read_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_common.compile new file mode 100644 index 000000000..ab88d14dc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hdl.f new file mode 100644 index 000000000..5665d944e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hvl.f new file mode 100644 index 000000000..dd6d2e780 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_xrtl.f new file mode 100644 index 000000000..39d267222 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hdl.compile new file mode 100644 index 000000000..7def0007c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_secreg_axi_read_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_secreg_axi_read_out_if.sv + - src/fuse_ctrl_secreg_axi_read_out_monitor_bfm.sv + - src/fuse_ctrl_secreg_axi_read_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hvl.compile new file mode 100644 index 000000000..b4a074d33 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_secreg_axi_read_out_common.compile +incdir: + - . +src: + - fuse_ctrl_secreg_axi_read_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.sv new file mode 100644 index 000000000..e5e0fb140 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_secreg_axi_read_out_macros.svh" + + export fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_secreg_axi_read_out_typedefs.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_transaction.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_configuration.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_driver.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_monitor.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_transaction_coverage.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_sequence_base.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_random_sequence.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_responder_sequence.svh" + `include "src/fuse_ctrl_secreg_axi_read_out2reg_adapter.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.vinfo new file mode 100644 index 000000000..fcfbb848d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_secreg_axi_read_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_secreg_axi_read_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv new file mode 100644 index 000000000..86bf6a521 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_secreg_axi_read_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.vinfo new file mode 100644 index 000000000..217e9f2f8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_sve.F new file mode 100644 index 000000000..7feb9ad5d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out2reg_adapter.svh new file mode 100644 index 000000000..e96620f37 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_secreg_axi_read_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_secreg_axi_read_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_secreg_axi_read_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_agent.svh new file mode 100644 index 000000000..8c136cf4b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_secreg_axi_read_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_secreg_axi_read_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_secreg_axi_read_out_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_configuration.svh new file mode 100644 index 000000000..5660faa8c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_secreg_axi_read_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_secreg_axi_read_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_secreg_axi_read_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_CONFIGURATION_STRUCT + fuse_ctrl_secreg_axi_read_out_configuration_s fuse_ctrl_secreg_axi_read_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_secreg_axi_read_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_configuration_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_secreg_axi_read_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_secreg_axi_read_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_secreg_axi_read_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_secreg_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_secreg_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_secreg_axi_read_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_secreg_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver.svh new file mode 100644 index 000000000..3902fe883 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_secreg_axi_read_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_secreg_axi_read_out_driver and fuse_ctrl_secreg_axi_read_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_secreg_axi_read_out_driver_bfm. +`fuse_ctrl_secreg_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_out_initiator_s fuse_ctrl_secreg_axi_read_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_secreg_axi_read_out_driver and fuse_ctrl_secreg_axi_read_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_secreg_axi_read_out_driver_bfm. +`fuse_ctrl_secreg_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_out_responder_s fuse_ctrl_secreg_axi_read_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_secreg_axi_read_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_secreg_axi_read_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_secreg_axi_read_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_secreg_axi_read_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver_bfm.sv new file mode 100644 index 000000000..3b1e0d51d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_secreg_axi_read_out signal driving. It is +// accessed by the uvm fuse_ctrl_secreg_axi_read_out driver through a virtual interface +// handle in the fuse_ctrl_secreg_axi_read_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_secreg_axi_read_out_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_secreg_axi_read_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_out_macros.svh" + +interface fuse_ctrl_secreg_axi_read_out_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_secreg_axi_read_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_secreg_axi_read_out_pkg::fuse_ctrl_secreg_axi_read_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_secreg_axi_read_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_secreg_axi_read_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_secreg_axi_read_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_out_driver and fuse_ctrl_secreg_axi_read_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_out_driver_bfm. + `fuse_ctrl_secreg_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_secreg_axi_read_out_driver and fuse_ctrl_secreg_axi_read_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_out_driver_bfm. + `fuse_ctrl_secreg_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_secreg_axi_read_out_configuration_s fuse_ctrl_secreg_axi_read_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_secreg_axi_read_out_initiator_s fuse_ctrl_secreg_axi_read_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_secreg_axi_read_out_responder_s fuse_ctrl_secreg_axi_read_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_secreg_axi_read_out_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Members within the fuse_ctrl_secreg_axi_read_out_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + initiator_struct = fuse_ctrl_secreg_axi_read_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_secreg_axi_read_out_responder_struct.xyz = arready_i; // + // fuse_ctrl_secreg_axi_read_out_responder_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_secreg_axi_read_out_responder_struct.xyz = rresp_i; // + // fuse_ctrl_secreg_axi_read_out_responder_struct.xyz = rid_i; // + // fuse_ctrl_secreg_axi_read_out_responder_struct.xyz = rlast_i; // + // fuse_ctrl_secreg_axi_read_out_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_secreg_axi_read_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_secreg_axi_read_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_secreg_axi_read_out_initiator_s fuse_ctrl_secreg_axi_read_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_secreg_axi_read_out_responder_s fuse_ctrl_secreg_axi_read_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_secreg_axi_read_out_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Variables within the fuse_ctrl_secreg_axi_read_out_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= fuse_ctrl_secreg_axi_read_out_initiator_struct.xyz; // + // rdata_o <= fuse_ctrl_secreg_axi_read_out_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= fuse_ctrl_secreg_axi_read_out_initiator_struct.xyz; // + // rid_o <= fuse_ctrl_secreg_axi_read_out_initiator_struct.xyz; // + // rlast_o <= fuse_ctrl_secreg_axi_read_out_initiator_struct.xyz; // + // rvalid_o <= fuse_ctrl_secreg_axi_read_out_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_secreg_axi_read_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_secreg_axi_read_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_if.sv new file mode 100644 index 000000000..08ee4ed10 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_secreg_axi_read_out interface signals. +// It is instantiated once per fuse_ctrl_secreg_axi_read_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_secreg_axi_read_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_secreg_axi_read_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_bus.arready), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_bus.rdata), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_bus.rresp), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_bus.rid), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_bus.rlast), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; + +interface fuse_ctrl_secreg_axi_read_out_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_macros.svh new file mode 100644 index 000000000..882e661bd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_secreg_axi_read_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_secreg_axi_read_out_configuration class. +// + `define fuse_ctrl_secreg_axi_read_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_secreg_axi_read_out_configuration_s; + + `define fuse_ctrl_secreg_axi_read_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_configuration_s to_struct();\ + fuse_ctrl_secreg_axi_read_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_secreg_axi_read_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_secreg_axi_read_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_secreg_axi_read_out_configuration_s fuse_ctrl_secreg_axi_read_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_secreg_axi_read_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_secreg_axi_read_out_transaction class. +// + `define fuse_ctrl_secreg_axi_read_out_MONITOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } fuse_ctrl_secreg_axi_read_out_monitor_s; + + `define fuse_ctrl_secreg_axi_read_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_monitor_s to_monitor_struct();\ + fuse_ctrl_secreg_axi_read_out_monitor_struct = \ + { \ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( fuse_ctrl_secreg_axi_read_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_secreg_axi_read_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_secreg_axi_read_out_monitor_s fuse_ctrl_secreg_axi_read_out_monitor_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = fuse_ctrl_secreg_axi_read_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_secreg_axi_read_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_out_INITIATOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } fuse_ctrl_secreg_axi_read_out_initiator_s; + + `define fuse_ctrl_secreg_axi_read_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_initiator_s to_initiator_struct();\ + fuse_ctrl_secreg_axi_read_out_initiator_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( fuse_ctrl_secreg_axi_read_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_secreg_axi_read_out_initiator_s fuse_ctrl_secreg_axi_read_out_initiator_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = fuse_ctrl_secreg_axi_read_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_secreg_axi_read_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_out_RESPONDER_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } fuse_ctrl_secreg_axi_read_out_responder_s; + + `define fuse_ctrl_secreg_axi_read_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_responder_s to_responder_struct();\ + fuse_ctrl_secreg_axi_read_out_responder_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( fuse_ctrl_secreg_axi_read_out_responder_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_secreg_axi_read_out_responder_s fuse_ctrl_secreg_axi_read_out_responder_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = fuse_ctrl_secreg_axi_read_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor.svh new file mode 100644 index 000000000..8e4f46381 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_secreg_axi_read_out transactions observed by the +// fuse_ctrl_secreg_axi_read_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_secreg_axi_read_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_secreg_axi_read_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_secreg_axi_read_out_monitor_s fuse_ctrl_secreg_axi_read_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_secreg_axi_read_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor_bfm.sv new file mode 100644 index 000000000..744b71555 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_secreg_axi_read_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_secreg_axi_read_out monitor through a virtual +// interface handle in the fuse_ctrl_secreg_axi_read_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_secreg_axi_read_out_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_secreg_axi_read_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_out_macros.svh" + + +interface fuse_ctrl_secreg_axi_read_out_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_secreg_axi_read_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_secreg_axi_read_out_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_out_monitor_s fuse_ctrl_secreg_axi_read_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_secreg_axi_read_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_secreg_axi_read_out_pkg::fuse_ctrl_secreg_axi_read_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_secreg_axi_read_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_secreg_axi_read_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_secreg_axi_read_out_configuration_s fuse_ctrl_secreg_axi_read_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_secreg_axi_read_out_monitor_s fuse_ctrl_secreg_axi_read_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_secreg_axi_read_out_monitor_struct.secreg_arready + // // fuse_ctrl_secreg_axi_read_out_monitor_struct.secreg_rdata + // // fuse_ctrl_secreg_axi_read_out_monitor_struct.secreg_rresp + // // fuse_ctrl_secreg_axi_read_out_monitor_struct.secreg_rid + // // fuse_ctrl_secreg_axi_read_out_monitor_struct.secreg_rlast + // // fuse_ctrl_secreg_axi_read_out_monitor_struct.secreg_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_secreg_axi_read_out_monitor_struct.xyz = arready_i; // + // fuse_ctrl_secreg_axi_read_out_monitor_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_secreg_axi_read_out_monitor_struct.xyz = rresp_i; // + // fuse_ctrl_secreg_axi_read_out_monitor_struct.xyz = rid_i; // + // fuse_ctrl_secreg_axi_read_out_monitor_struct.xyz = rlast_i; // + // fuse_ctrl_secreg_axi_read_out_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_random_sequence.svh new file mode 100644 index 000000000..ff6541d98 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_secreg_axi_read_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_secreg_axi_read_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_secreg_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_secreg_axi_read_out_random_sequence::body()-fuse_ctrl_secreg_axi_read_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_secreg_axi_read_out_driver_bfm via the sequencer and fuse_ctrl_secreg_axi_read_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_secreg_axi_read_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_responder_sequence.svh new file mode 100644 index 000000000..83a9996a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_secreg_axi_read_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_secreg_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_sequence_base.svh new file mode 100644 index 000000000..30cb7935d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_out_transaction_req_t; + fuse_ctrl_secreg_axi_read_out_transaction_req_t req; + typedef fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_out_transaction_rsp_t; + fuse_ctrl_secreg_axi_read_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_secreg_axi_read_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_secreg_axi_read_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction.svh new file mode 100644 index 000000000..b36b950c4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_secreg_axi_read_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic secreg_arready ; + logic [DW-1:0] secreg_rdata ; + axi_pkg::axi_burst_e secreg_rresp ; + logic [IW-1:0] secreg_rid ; + logic secreg_rlast ; + logic secreg_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_secreg_axi_read_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_secreg_axi_read_out_monitor and fuse_ctrl_secreg_axi_read_out_monitor_bfm + // This struct is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_out_monitor_s fuse_ctrl_secreg_axi_read_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_monitor_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_out_driver and fuse_ctrl_secreg_axi_read_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_out_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_out_initiator_s fuse_ctrl_secreg_axi_read_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_initiator_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_secreg_axi_read_out_driver and fuse_ctrl_secreg_axi_read_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_out_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_out_responder_s fuse_ctrl_secreg_axi_read_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_responder_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_arready:0x%x secreg_rdata:0x%x secreg_rresp:0x%x secreg_rid:0x%x secreg_rlast:0x%x secreg_rvalid:0x%x ",secreg_arready,secreg_rdata,secreg_rresp,secreg_rid,secreg_rlast,secreg_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.secreg_arready == RHS.secreg_arready) + &&(this.secreg_rdata == RHS.secreg_rdata) + &&(this.secreg_rresp == RHS.secreg_rresp) + &&(this.secreg_rid == RHS.secreg_rid) + &&(this.secreg_rlast == RHS.secreg_rlast) + &&(this.secreg_rvalid == RHS.secreg_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_arready = RHS.secreg_arready; + this.secreg_rdata = RHS.secreg_rdata; + this.secreg_rresp = RHS.secreg_rresp; + this.secreg_rid = RHS.secreg_rid; + this.secreg_rlast = RHS.secreg_rlast; + this.secreg_rvalid = RHS.secreg_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_secreg_axi_read_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_arready,"secreg_arready"); + $add_attribute(transaction_view_h,secreg_rdata,"secreg_rdata"); + $add_attribute(transaction_view_h,secreg_rresp,"secreg_rresp"); + $add_attribute(transaction_view_h,secreg_rid,"secreg_rid"); + $add_attribute(transaction_view_h,secreg_rlast,"secreg_rlast"); + $add_attribute(transaction_view_h,secreg_rvalid,"secreg_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction_coverage.svh new file mode 100644 index 000000000..cdbf4e229 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_secreg_axi_read_out transaction information using +// a covergroup named fuse_ctrl_secreg_axi_read_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_secreg_axi_read_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_arready: coverpoint coverage_trans.secreg_arready; + secreg_rdata: coverpoint coverage_trans.secreg_rdata; + secreg_rresp: coverpoint coverage_trans.secreg_rresp; + secreg_rid: coverpoint coverage_trans.secreg_rid; + secreg_rlast: coverpoint coverage_trans.secreg_rlast; + secreg_rvalid: coverpoint coverage_trans.secreg_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_secreg_axi_read_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_secreg_axi_read_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_secreg_axi_read_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/yaml/fuse_ctrl_secreg_axi_read_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/yaml/fuse_ctrl_secreg_axi_read_out_interface.yaml new file mode 100644 index 000000000..a0081ffd6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/yaml/fuse_ctrl_secreg_axi_read_out_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + fuse_ctrl_secreg_axi_read_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/.project new file mode 100644 index 000000000..ce67d0c3e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + prim_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..f8c7ed7c8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..01ec95534 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# prim_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +prim_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f + +prim_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f + +prim_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f + +COMP_prim_axi_read_if_PKG_TGT_0 = q_comp_prim_axi_read_if_pkg +COMP_prim_axi_read_if_PKG_TGT_1 = v_comp_prim_axi_read_if_pkg +COMP_prim_axi_read_if_PKG_TGT = $(COMP_prim_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_prim_axi_read_if_pkg: $(COMP_prim_axi_read_if_PKG_TGT) + +q_comp_prim_axi_read_if_pkg: + $(HDL_COMP_CMD) $(prim_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_read_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_read_if_PKG_XRTL) + +v_comp_prim_axi_read_if_pkg: + $(HVL_COMP_CMD) $(prim_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_read_if_PKG) + $(VELANALYZE_CMD) $(prim_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(prim_axi_read_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export prim_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_prim_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_prim_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_prim_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_prim_axi_read_if_pkg += -I$(prim_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_prim_axi_read_if_pkg += $(prim_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_prim_axi_read_if_pkg += \ + \ + -o .so + +comp_prim_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_prim_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_prim_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_prim_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_prim_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..9c440083a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of prim_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if.compile new file mode 100644 index 000000000..6b8986ce1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - prim_axi_read_if_hvl.compile + - prim_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..6ed51480b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use prim_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/prim_axi_read_if_if.sv +src/prim_axi_read_if_driver_bfm.sv +src/prim_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_common.compile new file mode 100644 index 000000000..09fd9b43c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..0dcc7ec77 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..1ca45536b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..db173a50e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hdl.compile new file mode 100644 index 000000000..bf564aa0c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./prim_axi_read_if_common.compile +incdir: + - . +src: + - src/prim_axi_read_if_if.sv + - src/prim_axi_read_if_monitor_bfm.sv + - src/prim_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hvl.compile new file mode 100644 index 000000000..ebdc1e779 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./prim_axi_read_if_common.compile +incdir: + - . +src: + - prim_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.sv new file mode 100644 index 000000000..21866eb57 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import prim_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/prim_axi_read_if_macros.svh" + + export prim_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/prim_axi_read_if_typedefs.svh" + `include "src/prim_axi_read_if_transaction.svh" + + `include "src/prim_axi_read_if_configuration.svh" + `include "src/prim_axi_read_if_driver.svh" + `include "src/prim_axi_read_if_monitor.svh" + + `include "src/prim_axi_read_if_transaction_coverage.svh" + `include "src/prim_axi_read_if_sequence_base.svh" + `include "src/prim_axi_read_if_random_sequence.svh" + + `include "src/prim_axi_read_if_responder_sequence.svh" + `include "src/prim_axi_read_if2reg_adapter.svh" + + `include "src/prim_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..9dc1034d4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use prim_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +prim_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..e2ff7fcd4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/prim_axi_read_if_typedefs_hdl.svh" + `include "src/prim_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..fe5f59e5b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..1112cd0fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..e5ff21492 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the prim_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( prim_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "prim_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : prim_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_agent.svh new file mode 100644 index 000000000..e510c9b42 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(prim_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(prim_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(prim_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( prim_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_configuration.svh new file mode 100644 index 000000000..4fe7507ff --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the prim_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual prim_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual prim_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup prim_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_CONFIGURATION_STRUCT + prim_axi_read_if_configuration_s prim_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a prim_axi_read_if_configuration_s + // structure. The function returns the handle to the prim_axi_read_if_configuration_struct. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + prim_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + prim_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + prim_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + prim_axi_read_if_configuration_cg.set_inst_name($sformatf("prim_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver.svh new file mode 100644 index 000000000..80f3658f6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual prim_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( prim_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in prim_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm +// to communicate initiator driven data to prim_axi_read_if_driver_bfm. +`prim_axi_read_if_INITIATOR_STRUCT + prim_axi_read_if_initiator_s prim_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm +// to communicate Responder driven data to prim_axi_read_if_driver_bfm. +`prim_axi_read_if_RESPONDER_STRUCT + prim_axi_read_if_responder_s prim_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + prim_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(prim_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + prim_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(prim_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..fb79a5e87 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the prim_axi_read_if signal driving. It is +// accessed by the uvm prim_axi_read_if driver through a virtual interface +// handle in the prim_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type prim_axi_read_if_if. +// +// Input signals from the prim_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within prim_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_read_if_pkg_hdl::*; +`include "src/prim_axi_read_if_macros.svh" + +interface prim_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (prim_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute prim_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + prim_axi_read_if_pkg::prim_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in prim_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from prim_axi_read_if_driver to this BFM + // **************************************************************************** + `prim_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm + // to communicate initiator driven data to prim_axi_read_if_driver_bfm. + `prim_axi_read_if_INITIATOR_STRUCT + prim_axi_read_if_initiator_s initiator_struct; + // Responder macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm + // to communicate Responder driven data to prim_axi_read_if_driver_bfm. + `prim_axi_read_if_RESPONDER_STRUCT + prim_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(prim_axi_read_if_configuration_s prim_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input prim_axi_read_if_initiator_s prim_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output prim_axi_read_if_responder_s prim_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the prim_axi_read_if_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Members within the prim_axi_read_if_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + initiator_struct = prim_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // prim_axi_read_if_responder_struct.xyz = arready_i; // + // prim_axi_read_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // prim_axi_read_if_responder_struct.xyz = rresp_i; // + // prim_axi_read_if_responder_struct.xyz = rid_i; // + // prim_axi_read_if_responder_struct.xyz = rlast_i; // + // prim_axi_read_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // prim_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = prim_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output prim_axi_read_if_initiator_s prim_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input prim_axi_read_if_responder_s prim_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the prim_axi_read_if_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Variables within the prim_axi_read_if_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= prim_axi_read_if_initiator_struct.xyz; // + // rdata_o <= prim_axi_read_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= prim_axi_read_if_initiator_struct.xyz; // + // rid_o <= prim_axi_read_if_initiator_struct.xyz; // + // rlast_o <= prim_axi_read_if_initiator_struct.xyz; // + // rvalid_o <= prim_axi_read_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the prim_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the prim_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_if.sv new file mode 100644 index 000000000..3e2dc9c5d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the prim_axi_read_if interface signals. +// It is instantiated once per prim_axi_read_if bus. Bus Functional Models, +// BFM's named prim_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named prim_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(prim_axi_read_if_bus.arready), // Agent input +// .dut_signal_port(prim_axi_read_if_bus.rdata), // Agent input +// .dut_signal_port(prim_axi_read_if_bus.rresp), // Agent input +// .dut_signal_port(prim_axi_read_if_bus.rid), // Agent input +// .dut_signal_port(prim_axi_read_if_bus.rlast), // Agent input +// .dut_signal_port(prim_axi_read_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import prim_axi_read_if_pkg_hdl::*; + +interface prim_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_macros.svh new file mode 100644 index 000000000..afbd57861 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the prim_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the prim_axi_read_if_configuration class. +// + `define prim_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } prim_axi_read_if_configuration_s; + + `define prim_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function prim_axi_read_if_configuration_s to_struct();\ + prim_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( prim_axi_read_if_configuration_struct );\ + endfunction + + `define prim_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(prim_axi_read_if_configuration_s prim_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = prim_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the prim_axi_read_if_transaction class. +// + `define prim_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } prim_axi_read_if_monitor_s; + + `define prim_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function prim_axi_read_if_monitor_s to_monitor_struct();\ + prim_axi_read_if_monitor_struct = \ + { \ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( prim_axi_read_if_monitor_struct);\ + endfunction\ + + `define prim_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(prim_axi_read_if_monitor_s prim_axi_read_if_monitor_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = prim_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the prim_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } prim_axi_read_if_initiator_s; + + `define prim_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function prim_axi_read_if_initiator_s to_initiator_struct();\ + prim_axi_read_if_initiator_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( prim_axi_read_if_initiator_struct);\ + endfunction + + `define prim_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(prim_axi_read_if_initiator_s prim_axi_read_if_initiator_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = prim_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the prim_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } prim_axi_read_if_responder_s; + + `define prim_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function prim_axi_read_if_responder_s to_responder_struct();\ + prim_axi_read_if_responder_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( prim_axi_read_if_responder_struct);\ + endfunction + + `define prim_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(prim_axi_read_if_responder_s prim_axi_read_if_responder_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = prim_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor.svh new file mode 100644 index 000000000..2f4d1fc43 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives prim_axi_read_if transactions observed by the +// prim_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual prim_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`prim_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the prim_axi_read_if_monitor_struct. + virtual function void notify_transaction(input prim_axi_read_if_monitor_s prim_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(prim_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..a6c05bea2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the prim_axi_read_if signal monitoring. +// It is accessed by the uvm prim_axi_read_if monitor through a virtual +// interface handle in the prim_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type prim_axi_read_if_if. +// +// Input signals from the prim_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the prim_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_read_if_pkg_hdl::*; +`include "src/prim_axi_read_if_macros.svh" + + +interface prim_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( prim_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute prim_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`prim_axi_read_if_MONITOR_STRUCT + prim_axi_read_if_monitor_s prim_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `prim_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + prim_axi_read_if_pkg::prim_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( prim_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( prim_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(prim_axi_read_if_configuration_s prim_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output prim_axi_read_if_monitor_s prim_axi_read_if_monitor_struct); + // + // Available struct members: + // // prim_axi_read_if_monitor_struct.prim_arready + // // prim_axi_read_if_monitor_struct.prim_rdata + // // prim_axi_read_if_monitor_struct.prim_rresp + // // prim_axi_read_if_monitor_struct.prim_rid + // // prim_axi_read_if_monitor_struct.prim_rlast + // // prim_axi_read_if_monitor_struct.prim_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // prim_axi_read_if_monitor_struct.xyz = arready_i; // + // prim_axi_read_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // prim_axi_read_if_monitor_struct.xyz = rresp_i; // + // prim_axi_read_if_monitor_struct.xyz = rid_i; // + // prim_axi_read_if_monitor_struct.xyz = rlast_i; // + // prim_axi_read_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..08857b229 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the prim_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a prim_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "prim_axi_read_if_random_sequence::body()-prim_axi_read_if_transaction randomization failed") + // Send the transaction to the prim_axi_read_if_driver_bfm via the sequencer and prim_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: prim_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..501b728cc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "prim_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..c94ac9063 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_read_if_transaction_req_t; + prim_axi_read_if_transaction_req_t req; + typedef prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_read_if_transaction_rsp_t; + prim_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = prim_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = prim_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction.svh new file mode 100644 index 000000000..c7e72b2ee --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an prim_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( prim_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_arready ; + logic [DW-1:0] prim_rdata ; + axi_pkg::axi_burst_e prim_rresp ; + logic [IW-1:0] prim_rid ; + logic prim_rlast ; + logic prim_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in prim_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by prim_axi_read_if_monitor and prim_axi_read_if_monitor_bfm + // This struct is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_MONITOR_STRUCT + prim_axi_read_if_monitor_s prim_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a prim_axi_read_if_monitor_s + // structure. The function returns the handle to the prim_axi_read_if_monitor_struct. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm + // to communicate initiator driven data to prim_axi_read_if_driver_bfm. + // This struct is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_INITIATOR_STRUCT + prim_axi_read_if_initiator_s prim_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a prim_axi_read_if_initiator_s + // structure. The function returns the handle to the prim_axi_read_if_initiator_struct. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm + // to communicate Responder driven data to prim_axi_read_if_driver_bfm. + // This struct is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_RESPONDER_STRUCT + prim_axi_read_if_responder_s prim_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a prim_axi_read_if_responder_s + // structure. The function returns the handle to the prim_axi_read_if_responder_struct. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_arready:0x%x prim_rdata:0x%x prim_rresp:0x%x prim_rid:0x%x prim_rlast:0x%x prim_rvalid:0x%x ",prim_arready,prim_rdata,prim_rresp,prim_rid,prim_rlast,prim_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_arready == RHS.prim_arready) + &&(this.prim_rdata == RHS.prim_rdata) + &&(this.prim_rresp == RHS.prim_rresp) + &&(this.prim_rid == RHS.prim_rid) + &&(this.prim_rlast == RHS.prim_rlast) + &&(this.prim_rvalid == RHS.prim_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_arready = RHS.prim_arready; + this.prim_rdata = RHS.prim_rdata; + this.prim_rresp = RHS.prim_rresp; + this.prim_rid = RHS.prim_rid; + this.prim_rlast = RHS.prim_rlast; + this.prim_rvalid = RHS.prim_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"prim_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_arready,"prim_arready"); + $add_attribute(transaction_view_h,prim_rdata,"prim_rdata"); + $add_attribute(transaction_view_h,prim_rresp,"prim_rresp"); + $add_attribute(transaction_view_h,prim_rid,"prim_rid"); + $add_attribute(transaction_view_h,prim_rlast,"prim_rlast"); + $add_attribute(transaction_view_h,prim_rvalid,"prim_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..e31162373 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records prim_axi_read_if transaction information using +// a covergroup named prim_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup prim_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_arready: coverpoint coverage_trans.prim_arready; + prim_rdata: coverpoint coverage_trans.prim_rdata; + prim_rresp: coverpoint coverage_trans.prim_rresp; + prim_rid: coverpoint coverage_trans.prim_rid; + prim_rlast: coverpoint coverage_trans.prim_rlast; + prim_rvalid: coverpoint coverage_trans.prim_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + prim_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + prim_axi_read_if_transaction_cg.set_inst_name($sformatf("prim_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + prim_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/yaml/prim_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/yaml/prim_axi_read_if_interface.yaml new file mode 100644 index 000000000..e8716f4a1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_if_pkg/yaml/prim_axi_read_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + prim_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.project new file mode 100644 index 000000000..585c5e823 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + prim_axi_read_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.svproject new file mode 100644 index 000000000..ddf3caeab --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/Makefile new file mode 100644 index 000000000..f228130ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# prim_axi_read_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +prim_axi_read_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hvl.f + +prim_axi_read_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hdl.f + +prim_axi_read_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_xrtl.f + +COMP_prim_axi_read_out_if_PKG_TGT_0 = q_comp_prim_axi_read_out_if_pkg +COMP_prim_axi_read_out_if_PKG_TGT_1 = v_comp_prim_axi_read_out_if_pkg +COMP_prim_axi_read_out_if_PKG_TGT = $(COMP_prim_axi_read_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_prim_axi_read_out_if_pkg: $(COMP_prim_axi_read_out_if_PKG_TGT) + +q_comp_prim_axi_read_out_if_pkg: + $(HDL_COMP_CMD) $(prim_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_read_out_if_PKG_XRTL) + +v_comp_prim_axi_read_out_if_pkg: + $(HVL_COMP_CMD) $(prim_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_read_out_if_PKG) + $(VELANALYZE_CMD) $(prim_axi_read_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(prim_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_read_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export prim_axi_read_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_prim_axi_read_out_if_pkg = \ + +O_FILE_COMPILE_LIST_prim_axi_read_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_prim_axi_read_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_prim_axi_read_out_if_pkg += -I$(prim_axi_read_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_prim_axi_read_out_if_pkg += $(prim_axi_read_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_prim_axi_read_out_if_pkg += \ + \ + -o .so + +comp_prim_axi_read_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_prim_axi_read_out_if_pkg) $(C_FILE_COMPILE_LIST_prim_axi_read_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_prim_axi_read_out_if_pkg) $(O_FILE_COMPILE_LIST_prim_axi_read_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/compile.do new file mode 100644 index 000000000..a3a345d11 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of prim_axi_read_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if.compile new file mode 100644 index 000000000..4670ed42f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if.compile @@ -0,0 +1,3 @@ +needs: + - prim_axi_read_out_if_hvl.compile + - prim_axi_read_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_bfm.vinfo new file mode 100644 index 000000000..d5f56b7f4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use prim_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/prim_axi_read_out_if_if.sv +src/prim_axi_read_out_if_driver_bfm.sv +src/prim_axi_read_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_common.compile new file mode 100644 index 000000000..7e04b5d77 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - prim_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hdl.f new file mode 100644 index 000000000..ac4c979b1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hvl.f new file mode 100644 index 000000000..601a2a9a6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_xrtl.f new file mode 100644 index 000000000..f129101a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hdl.compile new file mode 100644 index 000000000..5b8611c73 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./prim_axi_read_out_if_common.compile +incdir: + - . +src: + - src/prim_axi_read_out_if_if.sv + - src/prim_axi_read_out_if_monitor_bfm.sv + - src/prim_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hvl.compile new file mode 100644 index 000000000..8e542050f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./prim_axi_read_out_if_common.compile +incdir: + - . +src: + - prim_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.sv new file mode 100644 index 000000000..a2a9a1e31 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_read_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import prim_axi_read_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/prim_axi_read_out_if_macros.svh" + + export prim_axi_read_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/prim_axi_read_out_if_typedefs.svh" + `include "src/prim_axi_read_out_if_transaction.svh" + + `include "src/prim_axi_read_out_if_configuration.svh" + `include "src/prim_axi_read_out_if_driver.svh" + `include "src/prim_axi_read_out_if_monitor.svh" + + `include "src/prim_axi_read_out_if_transaction_coverage.svh" + `include "src/prim_axi_read_out_if_sequence_base.svh" + `include "src/prim_axi_read_out_if_random_sequence.svh" + + `include "src/prim_axi_read_out_if_responder_sequence.svh" + `include "src/prim_axi_read_out_if2reg_adapter.svh" + + `include "src/prim_axi_read_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.vinfo new file mode 100644 index 000000000..aa65183de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use prim_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +prim_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.sv new file mode 100644 index 000000000..5c650077e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_read_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/prim_axi_read_out_if_typedefs_hdl.svh" + `include "src/prim_axi_read_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..368a69419 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +prim_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_sve.F new file mode 100644 index 000000000..8c95c1e2d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if2reg_adapter.svh new file mode 100644 index 000000000..721a65049 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the prim_axi_read_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( prim_axi_read_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "prim_axi_read_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : prim_axi_read_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_agent.svh new file mode 100644 index 000000000..7c2483b3a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(prim_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(prim_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(prim_axi_read_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( prim_axi_read_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_configuration.svh new file mode 100644 index 000000000..26028d38f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the prim_axi_read_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual prim_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual prim_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_read_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup prim_axi_read_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_CONFIGURATION_STRUCT + prim_axi_read_out_if_configuration_s prim_axi_read_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a prim_axi_read_out_if_configuration_s + // structure. The function returns the handle to the prim_axi_read_out_if_configuration_struct. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + prim_axi_read_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + prim_axi_read_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + prim_axi_read_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + prim_axi_read_out_if_configuration_cg.set_inst_name($sformatf("prim_axi_read_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(prim_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver.svh new file mode 100644 index 000000000..495604d11 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual prim_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( prim_axi_read_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in prim_axi_read_out_if_macros.svh +//******************************************************************* +// Initiator macro used by prim_axi_read_out_if_driver and prim_axi_read_out_if_driver_bfm +// to communicate initiator driven data to prim_axi_read_out_if_driver_bfm. +`prim_axi_read_out_if_INITIATOR_STRUCT + prim_axi_read_out_if_initiator_s prim_axi_read_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by prim_axi_read_out_if_driver and prim_axi_read_out_if_driver_bfm +// to communicate Responder driven data to prim_axi_read_out_if_driver_bfm. +`prim_axi_read_out_if_RESPONDER_STRUCT + prim_axi_read_out_if_responder_s prim_axi_read_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + prim_axi_read_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(prim_axi_read_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + prim_axi_read_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(prim_axi_read_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver_bfm.sv new file mode 100644 index 000000000..d7dd2549e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the prim_axi_read_out_if signal driving. It is +// accessed by the uvm prim_axi_read_out_if driver through a virtual interface +// handle in the prim_axi_read_out_if configuration. It drives the singals passed +// in through the port connection named bus of type prim_axi_read_out_if_if. +// +// Input signals from the prim_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within prim_axi_read_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_read_out_if_pkg_hdl::*; +`include "src/prim_axi_read_out_if_macros.svh" + +interface prim_axi_read_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (prim_axi_read_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute prim_axi_read_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + prim_axi_read_out_if_pkg::prim_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in prim_axi_read_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from prim_axi_read_out_if_driver to this BFM + // **************************************************************************** + `prim_axi_read_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by prim_axi_read_out_if_driver and prim_axi_read_out_if_driver_bfm + // to communicate initiator driven data to prim_axi_read_out_if_driver_bfm. + `prim_axi_read_out_if_INITIATOR_STRUCT + prim_axi_read_out_if_initiator_s initiator_struct; + // Responder macro used by prim_axi_read_out_if_driver and prim_axi_read_out_if_driver_bfm + // to communicate Responder driven data to prim_axi_read_out_if_driver_bfm. + `prim_axi_read_out_if_RESPONDER_STRUCT + prim_axi_read_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(prim_axi_read_out_if_configuration_s prim_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input prim_axi_read_out_if_initiator_s prim_axi_read_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output prim_axi_read_out_if_responder_s prim_axi_read_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the prim_axi_read_out_if_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Members within the prim_axi_read_out_if_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + initiator_struct = prim_axi_read_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // prim_axi_read_out_if_responder_struct.xyz = arready_i; // + // prim_axi_read_out_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // prim_axi_read_out_if_responder_struct.xyz = rresp_i; // + // prim_axi_read_out_if_responder_struct.xyz = rid_i; // + // prim_axi_read_out_if_responder_struct.xyz = rlast_i; // + // prim_axi_read_out_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // prim_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = prim_axi_read_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output prim_axi_read_out_if_initiator_s prim_axi_read_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input prim_axi_read_out_if_responder_s prim_axi_read_out_if_responder_struct + );// pragma tbx xtf + // Variables within the prim_axi_read_out_if_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Variables within the prim_axi_read_out_if_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= prim_axi_read_out_if_initiator_struct.xyz; // + // rdata_o <= prim_axi_read_out_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= prim_axi_read_out_if_initiator_struct.xyz; // + // rid_o <= prim_axi_read_out_if_initiator_struct.xyz; // + // rlast_o <= prim_axi_read_out_if_initiator_struct.xyz; // + // rvalid_o <= prim_axi_read_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the prim_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the prim_axi_read_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_if.sv new file mode 100644 index 000000000..c73529236 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the prim_axi_read_out_if interface signals. +// It is instantiated once per prim_axi_read_out_if bus. Bus Functional Models, +// BFM's named prim_axi_read_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named prim_axi_read_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(prim_axi_read_out_if_bus.arready), // Agent input +// .dut_signal_port(prim_axi_read_out_if_bus.rdata), // Agent input +// .dut_signal_port(prim_axi_read_out_if_bus.rresp), // Agent input +// .dut_signal_port(prim_axi_read_out_if_bus.rid), // Agent input +// .dut_signal_port(prim_axi_read_out_if_bus.rlast), // Agent input +// .dut_signal_port(prim_axi_read_out_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import prim_axi_read_out_if_pkg_hdl::*; + +interface prim_axi_read_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_macros.svh new file mode 100644 index 000000000..902824de8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the prim_axi_read_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the prim_axi_read_out_if_configuration class. +// + `define prim_axi_read_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } prim_axi_read_out_if_configuration_s; + + `define prim_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function prim_axi_read_out_if_configuration_s to_struct();\ + prim_axi_read_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( prim_axi_read_out_if_configuration_struct );\ + endfunction + + `define prim_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(prim_axi_read_out_if_configuration_s prim_axi_read_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = prim_axi_read_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the prim_axi_read_out_if_transaction class. +// + `define prim_axi_read_out_if_MONITOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } prim_axi_read_out_if_monitor_s; + + `define prim_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function prim_axi_read_out_if_monitor_s to_monitor_struct();\ + prim_axi_read_out_if_monitor_struct = \ + { \ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( prim_axi_read_out_if_monitor_struct);\ + endfunction\ + + `define prim_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(prim_axi_read_out_if_monitor_s prim_axi_read_out_if_monitor_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = prim_axi_read_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the prim_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_read_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } prim_axi_read_out_if_initiator_s; + + `define prim_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function prim_axi_read_out_if_initiator_s to_initiator_struct();\ + prim_axi_read_out_if_initiator_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( prim_axi_read_out_if_initiator_struct);\ + endfunction + + `define prim_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(prim_axi_read_out_if_initiator_s prim_axi_read_out_if_initiator_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = prim_axi_read_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the prim_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_read_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } prim_axi_read_out_if_responder_s; + + `define prim_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function prim_axi_read_out_if_responder_s to_responder_struct();\ + prim_axi_read_out_if_responder_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( prim_axi_read_out_if_responder_struct);\ + endfunction + + `define prim_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(prim_axi_read_out_if_responder_s prim_axi_read_out_if_responder_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = prim_axi_read_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor.svh new file mode 100644 index 000000000..523177215 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives prim_axi_read_out_if transactions observed by the +// prim_axi_read_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual prim_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_read_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`prim_axi_read_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the prim_axi_read_out_if_monitor_struct. + virtual function void notify_transaction(input prim_axi_read_out_if_monitor_s prim_axi_read_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(prim_axi_read_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor_bfm.sv new file mode 100644 index 000000000..7e5d3651d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the prim_axi_read_out_if signal monitoring. +// It is accessed by the uvm prim_axi_read_out_if monitor through a virtual +// interface handle in the prim_axi_read_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type prim_axi_read_out_if_if. +// +// Input signals from the prim_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the prim_axi_read_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_read_out_if_pkg_hdl::*; +`include "src/prim_axi_read_out_if_macros.svh" + + +interface prim_axi_read_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( prim_axi_read_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute prim_axi_read_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`prim_axi_read_out_if_MONITOR_STRUCT + prim_axi_read_out_if_monitor_s prim_axi_read_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `prim_axi_read_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + prim_axi_read_out_if_pkg::prim_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( prim_axi_read_out_if_monitor_struct ); + + + proxy.notify_transaction( prim_axi_read_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(prim_axi_read_out_if_configuration_s prim_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output prim_axi_read_out_if_monitor_s prim_axi_read_out_if_monitor_struct); + // + // Available struct members: + // // prim_axi_read_out_if_monitor_struct.prim_arready + // // prim_axi_read_out_if_monitor_struct.prim_rdata + // // prim_axi_read_out_if_monitor_struct.prim_rresp + // // prim_axi_read_out_if_monitor_struct.prim_rid + // // prim_axi_read_out_if_monitor_struct.prim_rlast + // // prim_axi_read_out_if_monitor_struct.prim_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // prim_axi_read_out_if_monitor_struct.xyz = arready_i; // + // prim_axi_read_out_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // prim_axi_read_out_if_monitor_struct.xyz = rresp_i; // + // prim_axi_read_out_if_monitor_struct.xyz = rid_i; // + // prim_axi_read_out_if_monitor_struct.xyz = rlast_i; // + // prim_axi_read_out_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_random_sequence.svh new file mode 100644 index 000000000..9f624f7a3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the prim_axi_read_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a prim_axi_read_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_read_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=prim_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "prim_axi_read_out_if_random_sequence::body()-prim_axi_read_out_if_transaction randomization failed") + // Send the transaction to the prim_axi_read_out_if_driver_bfm via the sequencer and prim_axi_read_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: prim_axi_read_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_responder_sequence.svh new file mode 100644 index 000000000..ecfaf2543 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_read_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "prim_axi_read_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=prim_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_sequence_base.svh new file mode 100644 index 000000000..8d4377f4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_read_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_read_out_if_transaction_req_t; + prim_axi_read_out_if_transaction_req_t req; + typedef prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_read_out_if_transaction_rsp_t; + prim_axi_read_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = prim_axi_read_out_if_transaction_req_t::type_id::create("req"); + rsp = prim_axi_read_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction.svh new file mode 100644 index 000000000..972915ab7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an prim_axi_read_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( prim_axi_read_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_arready ; + logic [DW-1:0] prim_rdata ; + axi_pkg::axi_burst_e prim_rresp ; + logic [IW-1:0] prim_rid ; + logic prim_rlast ; + logic prim_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in prim_axi_read_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by prim_axi_read_out_if_monitor and prim_axi_read_out_if_monitor_bfm + // This struct is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_MONITOR_STRUCT + prim_axi_read_out_if_monitor_s prim_axi_read_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a prim_axi_read_out_if_monitor_s + // structure. The function returns the handle to the prim_axi_read_out_if_monitor_struct. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by prim_axi_read_out_if_driver and prim_axi_read_out_if_driver_bfm + // to communicate initiator driven data to prim_axi_read_out_if_driver_bfm. + // This struct is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_INITIATOR_STRUCT + prim_axi_read_out_if_initiator_s prim_axi_read_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a prim_axi_read_out_if_initiator_s + // structure. The function returns the handle to the prim_axi_read_out_if_initiator_struct. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by prim_axi_read_out_if_driver and prim_axi_read_out_if_driver_bfm + // to communicate Responder driven data to prim_axi_read_out_if_driver_bfm. + // This struct is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_RESPONDER_STRUCT + prim_axi_read_out_if_responder_s prim_axi_read_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a prim_axi_read_out_if_responder_s + // structure. The function returns the handle to the prim_axi_read_out_if_responder_struct. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_arready:0x%x prim_rdata:0x%x prim_rresp:0x%x prim_rid:0x%x prim_rlast:0x%x prim_rvalid:0x%x ",prim_arready,prim_rdata,prim_rresp,prim_rid,prim_rlast,prim_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_arready == RHS.prim_arready) + &&(this.prim_rdata == RHS.prim_rdata) + &&(this.prim_rresp == RHS.prim_rresp) + &&(this.prim_rid == RHS.prim_rid) + &&(this.prim_rlast == RHS.prim_rlast) + &&(this.prim_rvalid == RHS.prim_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_arready = RHS.prim_arready; + this.prim_rdata = RHS.prim_rdata; + this.prim_rresp = RHS.prim_rresp; + this.prim_rid = RHS.prim_rid; + this.prim_rlast = RHS.prim_rlast; + this.prim_rvalid = RHS.prim_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"prim_axi_read_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_arready,"prim_arready"); + $add_attribute(transaction_view_h,prim_rdata,"prim_rdata"); + $add_attribute(transaction_view_h,prim_rresp,"prim_rresp"); + $add_attribute(transaction_view_h,prim_rid,"prim_rid"); + $add_attribute(transaction_view_h,prim_rlast,"prim_rlast"); + $add_attribute(transaction_view_h,prim_rvalid,"prim_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction_coverage.svh new file mode 100644 index 000000000..cf69fb8ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records prim_axi_read_out_if transaction information using +// a covergroup named prim_axi_read_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_read_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup prim_axi_read_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_arready: coverpoint coverage_trans.prim_arready; + prim_rdata: coverpoint coverage_trans.prim_rdata; + prim_rresp: coverpoint coverage_trans.prim_rresp; + prim_rid: coverpoint coverage_trans.prim_rid; + prim_rlast: coverpoint coverage_trans.prim_rlast; + prim_rvalid: coverpoint coverage_trans.prim_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + prim_axi_read_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + prim_axi_read_out_if_transaction_cg.set_inst_name($sformatf("prim_axi_read_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + prim_axi_read_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/yaml/prim_axi_read_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/yaml/prim_axi_read_out_if_interface.yaml new file mode 100644 index 000000000..5c3006321 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_read_out_if_pkg/yaml/prim_axi_read_out_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + prim_axi_read_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/.project new file mode 100644 index 000000000..97cc8aeb8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/.project @@ -0,0 +1,30 @@ + + + prim_axi_write_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/.svproject new file mode 100644 index 000000000..79b1f983b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/Makefile new file mode 100644 index 000000000..623a7daa4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/Makefile @@ -0,0 +1,66 @@ +# prim_axi_write_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +prim_axi_write_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f + +prim_axi_write_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f + +prim_axi_write_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f + +COMP_prim_axi_write_if_PKG_TGT_0 = q_comp_prim_axi_write_if_pkg +COMP_prim_axi_write_if_PKG_TGT_1 = v_comp_prim_axi_write_if_pkg +COMP_prim_axi_write_if_PKG_TGT = $(COMP_prim_axi_write_if_PKG_TGT_$(USE_VELOCE)) + +comp_prim_axi_write_if_pkg: $(COMP_prim_axi_write_if_PKG_TGT) + +q_comp_prim_axi_write_if_pkg: + $(HDL_COMP_CMD) $(prim_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_write_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_write_if_PKG_XRTL) + +v_comp_prim_axi_write_if_pkg: + $(HVL_COMP_CMD) $(prim_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_write_if_PKG) + $(VELANALYZE_CMD) $(prim_axi_write_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(prim_axi_write_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_write_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export prim_axi_write_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/dpi + +C_FILE_COMPILE_LIST_prim_axi_write_if_pkg = \ + +O_FILE_COMPILE_LIST_prim_axi_write_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_prim_axi_write_if_pkg:.c=.o)) + +GCC_COMP_ARGS_prim_axi_write_if_pkg += -I$(prim_axi_write_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_prim_axi_write_if_pkg += $(prim_axi_write_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_prim_axi_write_if_pkg += \ + \ + -o .so + +comp_prim_axi_write_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_prim_axi_write_if_pkg) $(C_FILE_COMPILE_LIST_prim_axi_write_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_prim_axi_write_if_pkg) $(O_FILE_COMPILE_LIST_prim_axi_write_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/compile.do new file mode 100644 index 000000000..677a4a098 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of prim_axi_write_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if.compile new file mode 100644 index 000000000..bd0dc7378 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if.compile @@ -0,0 +1,3 @@ +needs: + - prim_axi_write_if_hvl.compile + - prim_axi_write_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_bfm.vinfo new file mode 100644 index 000000000..aaa26f79c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use prim_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/prim_axi_write_if_if.sv +src/prim_axi_write_if_driver_bfm.sv +src/prim_axi_write_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_common.compile new file mode 100644 index 000000000..f496fac10 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f new file mode 100644 index 000000000..efc271244 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f new file mode 100644 index 000000000..711212b62 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f new file mode 100644 index 000000000..9dc37651b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hdl.compile new file mode 100644 index 000000000..547090a3d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./prim_axi_write_if_common.compile +incdir: + - . +src: + - src/prim_axi_write_if_if.sv + - src/prim_axi_write_if_monitor_bfm.sv + - src/prim_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hvl.compile new file mode 100644 index 000000000..07cd15926 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./prim_axi_write_if_common.compile +incdir: + - . +src: + - prim_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.sv new file mode 100644 index 000000000..78143d109 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_write_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import prim_axi_write_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/prim_axi_write_if_macros.svh" + + export prim_axi_write_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/prim_axi_write_if_typedefs.svh" + `include "src/prim_axi_write_if_transaction.svh" + + `include "src/prim_axi_write_if_configuration.svh" + `include "src/prim_axi_write_if_driver.svh" + `include "src/prim_axi_write_if_monitor.svh" + + `include "src/prim_axi_write_if_transaction_coverage.svh" + `include "src/prim_axi_write_if_sequence_base.svh" + `include "src/prim_axi_write_if_random_sequence.svh" + + `include "src/prim_axi_write_if_responder_sequence.svh" + `include "src/prim_axi_write_if2reg_adapter.svh" + + `include "src/prim_axi_write_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.vinfo new file mode 100644 index 000000000..da70e9f95 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use prim_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +prim_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.sv new file mode 100644 index 000000000..dbe4a2871 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_write_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/prim_axi_write_if_typedefs_hdl.svh" + `include "src/prim_axi_write_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.vinfo new file mode 100644 index 000000000..8eb50779a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_sve.F new file mode 100644 index 000000000..2232ac433 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if2reg_adapter.svh new file mode 100644 index 000000000..1aad1f2c1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the prim_axi_write_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( prim_axi_write_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "prim_axi_write_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : prim_axi_write_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_agent.svh new file mode 100644 index 000000000..db46f4fe1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(prim_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(prim_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(prim_axi_write_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( prim_axi_write_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_configuration.svh new file mode 100644 index 000000000..114b7e0ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the prim_axi_write_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual prim_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual prim_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_write_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup prim_axi_write_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_CONFIGURATION_STRUCT + prim_axi_write_if_configuration_s prim_axi_write_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a prim_axi_write_if_configuration_s + // structure. The function returns the handle to the prim_axi_write_if_configuration_struct. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + prim_axi_write_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + prim_axi_write_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + prim_axi_write_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + prim_axi_write_if_configuration_cg.set_inst_name($sformatf("prim_axi_write_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver.svh new file mode 100644 index 000000000..f1028f48a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual prim_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( prim_axi_write_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in prim_axi_write_if_macros.svh +//******************************************************************* +// Initiator macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm +// to communicate initiator driven data to prim_axi_write_if_driver_bfm. +`prim_axi_write_if_INITIATOR_STRUCT + prim_axi_write_if_initiator_s prim_axi_write_if_initiator_struct; +//******************************************************************* +// Responder macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm +// to communicate Responder driven data to prim_axi_write_if_driver_bfm. +`prim_axi_write_if_RESPONDER_STRUCT + prim_axi_write_if_responder_s prim_axi_write_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + prim_axi_write_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(prim_axi_write_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + prim_axi_write_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(prim_axi_write_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver_bfm.sv new file mode 100644 index 000000000..62c377ccd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the prim_axi_write_if signal driving. It is +// accessed by the uvm prim_axi_write_if driver through a virtual interface +// handle in the prim_axi_write_if configuration. It drives the singals passed +// in through the port connection named bus of type prim_axi_write_if_if. +// +// Input signals from the prim_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within prim_axi_write_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_write_if_pkg_hdl::*; +`include "src/prim_axi_write_if_macros.svh" + +interface prim_axi_write_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (prim_axi_write_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute prim_axi_write_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + prim_axi_write_if_pkg::prim_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in prim_axi_write_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from prim_axi_write_if_driver to this BFM + // **************************************************************************** + `prim_axi_write_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm + // to communicate initiator driven data to prim_axi_write_if_driver_bfm. + `prim_axi_write_if_INITIATOR_STRUCT + prim_axi_write_if_initiator_s initiator_struct; + // Responder macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm + // to communicate Responder driven data to prim_axi_write_if_driver_bfm. + `prim_axi_write_if_RESPONDER_STRUCT + prim_axi_write_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(prim_axi_write_if_configuration_s prim_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input prim_axi_write_if_initiator_s prim_axi_write_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output prim_axi_write_if_responder_s prim_axi_write_if_responder_struct + );// pragma tbx xtf + // + // Members within the prim_axi_write_if_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Members within the prim_axi_write_if_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + initiator_struct = prim_axi_write_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // prim_axi_write_if_responder_struct.xyz = awready_i; // + // prim_axi_write_if_responder_struct.xyz = wready_i; // + // prim_axi_write_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // prim_axi_write_if_responder_struct.xyz = bid_i; // + // prim_axi_write_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // prim_axi_write_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = prim_axi_write_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output prim_axi_write_if_initiator_s prim_axi_write_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input prim_axi_write_if_responder_s prim_axi_write_if_responder_struct + );// pragma tbx xtf + // Variables within the prim_axi_write_if_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Variables within the prim_axi_write_if_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= prim_axi_write_if_initiator_struct.xyz; // + // wready_o <= prim_axi_write_if_initiator_struct.xyz; // + // bresp_o <= prim_axi_write_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= prim_axi_write_if_initiator_struct.xyz; // + // bvalid_o <= prim_axi_write_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the prim_axi_write_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the prim_axi_write_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_if.sv new file mode 100644 index 000000000..de556ace4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the prim_axi_write_if interface signals. +// It is instantiated once per prim_axi_write_if bus. Bus Functional Models, +// BFM's named prim_axi_write_if_driver_bfm, are used to drive signals on the bus. +// BFM's named prim_axi_write_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(prim_axi_write_if_bus.awready), // Agent input +// .dut_signal_port(prim_axi_write_if_bus.wready), // Agent input +// .dut_signal_port(prim_axi_write_if_bus.bresp), // Agent input +// .dut_signal_port(prim_axi_write_if_bus.bid), // Agent input +// .dut_signal_port(prim_axi_write_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import prim_axi_write_if_pkg_hdl::*; + +interface prim_axi_write_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_macros.svh new file mode 100644 index 000000000..95c6a8bf7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the prim_axi_write_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the prim_axi_write_if_configuration class. +// + `define prim_axi_write_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } prim_axi_write_if_configuration_s; + + `define prim_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function prim_axi_write_if_configuration_s to_struct();\ + prim_axi_write_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( prim_axi_write_if_configuration_struct );\ + endfunction + + `define prim_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(prim_axi_write_if_configuration_s prim_axi_write_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = prim_axi_write_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the prim_axi_write_if_transaction class. +// + `define prim_axi_write_if_MONITOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } prim_axi_write_if_monitor_s; + + `define prim_axi_write_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function prim_axi_write_if_monitor_s to_monitor_struct();\ + prim_axi_write_if_monitor_struct = \ + { \ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( prim_axi_write_if_monitor_struct);\ + endfunction\ + + `define prim_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(prim_axi_write_if_monitor_s prim_axi_write_if_monitor_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = prim_axi_write_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the prim_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_write_if_INITIATOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } prim_axi_write_if_initiator_s; + + `define prim_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function prim_axi_write_if_initiator_s to_initiator_struct();\ + prim_axi_write_if_initiator_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( prim_axi_write_if_initiator_struct);\ + endfunction + + `define prim_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(prim_axi_write_if_initiator_s prim_axi_write_if_initiator_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = prim_axi_write_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the prim_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_write_if_RESPONDER_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } prim_axi_write_if_responder_s; + + `define prim_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function prim_axi_write_if_responder_s to_responder_struct();\ + prim_axi_write_if_responder_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( prim_axi_write_if_responder_struct);\ + endfunction + + `define prim_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(prim_axi_write_if_responder_s prim_axi_write_if_responder_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = prim_axi_write_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor.svh new file mode 100644 index 000000000..67050c334 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives prim_axi_write_if transactions observed by the +// prim_axi_write_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual prim_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_write_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`prim_axi_write_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the prim_axi_write_if_monitor_struct. + virtual function void notify_transaction(input prim_axi_write_if_monitor_s prim_axi_write_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(prim_axi_write_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor_bfm.sv new file mode 100644 index 000000000..7719d6325 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the prim_axi_write_if signal monitoring. +// It is accessed by the uvm prim_axi_write_if monitor through a virtual +// interface handle in the prim_axi_write_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type prim_axi_write_if_if. +// +// Input signals from the prim_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the prim_axi_write_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_write_if_pkg_hdl::*; +`include "src/prim_axi_write_if_macros.svh" + + +interface prim_axi_write_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( prim_axi_write_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute prim_axi_write_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`prim_axi_write_if_MONITOR_STRUCT + prim_axi_write_if_monitor_s prim_axi_write_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `prim_axi_write_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + prim_axi_write_if_pkg::prim_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( prim_axi_write_if_monitor_struct ); + + + proxy.notify_transaction( prim_axi_write_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(prim_axi_write_if_configuration_s prim_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output prim_axi_write_if_monitor_s prim_axi_write_if_monitor_struct); + // + // Available struct members: + // // prim_axi_write_if_monitor_struct.prim_awready + // // prim_axi_write_if_monitor_struct.prim_wready + // // prim_axi_write_if_monitor_struct.prim_bresp + // // prim_axi_write_if_monitor_struct.prim_bid + // // prim_axi_write_if_monitor_struct.prim_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // prim_axi_write_if_monitor_struct.xyz = awready_i; // + // prim_axi_write_if_monitor_struct.xyz = wready_i; // + // prim_axi_write_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // prim_axi_write_if_monitor_struct.xyz = bid_i; // + // prim_axi_write_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_random_sequence.svh new file mode 100644 index 000000000..12e4f9c83 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the prim_axi_write_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a prim_axi_write_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_write_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "prim_axi_write_if_random_sequence::body()-prim_axi_write_if_transaction randomization failed") + // Send the transaction to the prim_axi_write_if_driver_bfm via the sequencer and prim_axi_write_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: prim_axi_write_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_responder_sequence.svh new file mode 100644 index 000000000..eec3703ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_write_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "prim_axi_write_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_sequence_base.svh new file mode 100644 index 000000000..a606d7b2b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_write_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_write_if_transaction_req_t; + prim_axi_write_if_transaction_req_t req; + typedef prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_write_if_transaction_rsp_t; + prim_axi_write_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = prim_axi_write_if_transaction_req_t::type_id::create("req"); + rsp = prim_axi_write_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction.svh new file mode 100644 index 000000000..7e1571969 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an prim_axi_write_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( prim_axi_write_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_awready ; + logic prim_wready ; + axi_pkg::axi_burst_e prim_bresp ; + logic prim_bid ; + logic prim_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in prim_axi_write_if_macros.svh + + //******************************************************************* + // Monitor macro used by prim_axi_write_if_monitor and prim_axi_write_if_monitor_bfm + // This struct is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_MONITOR_STRUCT + prim_axi_write_if_monitor_s prim_axi_write_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a prim_axi_write_if_monitor_s + // structure. The function returns the handle to the prim_axi_write_if_monitor_struct. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm + // to communicate initiator driven data to prim_axi_write_if_driver_bfm. + // This struct is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_INITIATOR_STRUCT + prim_axi_write_if_initiator_s prim_axi_write_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a prim_axi_write_if_initiator_s + // structure. The function returns the handle to the prim_axi_write_if_initiator_struct. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm + // to communicate Responder driven data to prim_axi_write_if_driver_bfm. + // This struct is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_RESPONDER_STRUCT + prim_axi_write_if_responder_s prim_axi_write_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a prim_axi_write_if_responder_s + // structure. The function returns the handle to the prim_axi_write_if_responder_struct. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awready:0x%x prim_wready:0x%x prim_bresp:0x%x prim_bid:0x%x prim_bvalid:0x%x ",prim_awready,prim_wready,prim_bresp,prim_bid,prim_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_awready == RHS.prim_awready) + &&(this.prim_wready == RHS.prim_wready) + &&(this.prim_bresp == RHS.prim_bresp) + &&(this.prim_bid == RHS.prim_bid) + &&(this.prim_bvalid == RHS.prim_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awready = RHS.prim_awready; + this.prim_wready = RHS.prim_wready; + this.prim_bresp = RHS.prim_bresp; + this.prim_bid = RHS.prim_bid; + this.prim_bvalid = RHS.prim_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"prim_axi_write_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awready,"prim_awready"); + $add_attribute(transaction_view_h,prim_wready,"prim_wready"); + $add_attribute(transaction_view_h,prim_bresp,"prim_bresp"); + $add_attribute(transaction_view_h,prim_bid,"prim_bid"); + $add_attribute(transaction_view_h,prim_bvalid,"prim_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction_coverage.svh new file mode 100644 index 000000000..6f9d9804b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records prim_axi_write_if transaction information using +// a covergroup named prim_axi_write_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_write_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup prim_axi_write_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awready: coverpoint coverage_trans.prim_awready; + prim_wready: coverpoint coverage_trans.prim_wready; + prim_bresp: coverpoint coverage_trans.prim_bresp; + prim_bid: coverpoint coverage_trans.prim_bid; + prim_bvalid: coverpoint coverage_trans.prim_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + prim_axi_write_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + prim_axi_write_if_transaction_cg.set_inst_name($sformatf("prim_axi_write_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + prim_axi_write_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/yaml/prim_axi_write_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/yaml/prim_axi_write_if_interface.yaml new file mode 100644 index 000000000..e5bd3c347 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_if_pkg/yaml/prim_axi_write_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + prim_axi_write_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.project new file mode 100644 index 000000000..c176cd178 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + prim_axi_write_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.svproject new file mode 100644 index 000000000..0999e5cba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/Makefile new file mode 100644 index 000000000..2ecf149e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# prim_axi_write_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +prim_axi_write_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hvl.f + +prim_axi_write_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hdl.f + +prim_axi_write_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_xrtl.f + +COMP_prim_axi_write_out_if_PKG_TGT_0 = q_comp_prim_axi_write_out_if_pkg +COMP_prim_axi_write_out_if_PKG_TGT_1 = v_comp_prim_axi_write_out_if_pkg +COMP_prim_axi_write_out_if_PKG_TGT = $(COMP_prim_axi_write_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_prim_axi_write_out_if_pkg: $(COMP_prim_axi_write_out_if_PKG_TGT) + +q_comp_prim_axi_write_out_if_pkg: + $(HDL_COMP_CMD) $(prim_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_write_out_if_PKG_XRTL) + +v_comp_prim_axi_write_out_if_pkg: + $(HVL_COMP_CMD) $(prim_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_write_out_if_PKG) + $(VELANALYZE_CMD) $(prim_axi_write_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(prim_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_write_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export prim_axi_write_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_prim_axi_write_out_if_pkg = \ + +O_FILE_COMPILE_LIST_prim_axi_write_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_prim_axi_write_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_prim_axi_write_out_if_pkg += -I$(prim_axi_write_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_prim_axi_write_out_if_pkg += $(prim_axi_write_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_prim_axi_write_out_if_pkg += \ + \ + -o .so + +comp_prim_axi_write_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_prim_axi_write_out_if_pkg) $(C_FILE_COMPILE_LIST_prim_axi_write_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_prim_axi_write_out_if_pkg) $(O_FILE_COMPILE_LIST_prim_axi_write_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/compile.do new file mode 100644 index 000000000..15879fa4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of prim_axi_write_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if.compile new file mode 100644 index 000000000..3bec6af69 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if.compile @@ -0,0 +1,3 @@ +needs: + - prim_axi_write_out_if_hvl.compile + - prim_axi_write_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_bfm.vinfo new file mode 100644 index 000000000..3260e601e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use prim_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/prim_axi_write_out_if_if.sv +src/prim_axi_write_out_if_driver_bfm.sv +src/prim_axi_write_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_common.compile new file mode 100644 index 000000000..18c7cd074 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - prim_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hdl.f new file mode 100644 index 000000000..fca35261c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hvl.f new file mode 100644 index 000000000..cc3120398 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_xrtl.f new file mode 100644 index 000000000..d880c05ab --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hdl.compile new file mode 100644 index 000000000..1e451c889 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./prim_axi_write_out_if_common.compile +incdir: + - . +src: + - src/prim_axi_write_out_if_if.sv + - src/prim_axi_write_out_if_monitor_bfm.sv + - src/prim_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hvl.compile new file mode 100644 index 000000000..7c4235dd0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./prim_axi_write_out_if_common.compile +incdir: + - . +src: + - prim_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.sv new file mode 100644 index 000000000..e9936a387 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_write_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import prim_axi_write_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/prim_axi_write_out_if_macros.svh" + + export prim_axi_write_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/prim_axi_write_out_if_typedefs.svh" + `include "src/prim_axi_write_out_if_transaction.svh" + + `include "src/prim_axi_write_out_if_configuration.svh" + `include "src/prim_axi_write_out_if_driver.svh" + `include "src/prim_axi_write_out_if_monitor.svh" + + `include "src/prim_axi_write_out_if_transaction_coverage.svh" + `include "src/prim_axi_write_out_if_sequence_base.svh" + `include "src/prim_axi_write_out_if_random_sequence.svh" + + `include "src/prim_axi_write_out_if_responder_sequence.svh" + `include "src/prim_axi_write_out_if2reg_adapter.svh" + + `include "src/prim_axi_write_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.vinfo new file mode 100644 index 000000000..202d1770d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use prim_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +prim_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.sv new file mode 100644 index 000000000..2956468f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_write_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/prim_axi_write_out_if_typedefs_hdl.svh" + `include "src/prim_axi_write_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..8528147da --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +prim_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_sve.F new file mode 100644 index 000000000..492fecffa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if2reg_adapter.svh new file mode 100644 index 000000000..3937222fe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the prim_axi_write_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( prim_axi_write_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "prim_axi_write_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : prim_axi_write_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_agent.svh new file mode 100644 index 000000000..2a241e356 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(prim_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(prim_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(prim_axi_write_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( prim_axi_write_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_configuration.svh new file mode 100644 index 000000000..7494ed5da --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the prim_axi_write_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual prim_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual prim_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_write_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup prim_axi_write_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_CONFIGURATION_STRUCT + prim_axi_write_out_if_configuration_s prim_axi_write_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a prim_axi_write_out_if_configuration_s + // structure. The function returns the handle to the prim_axi_write_out_if_configuration_struct. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + prim_axi_write_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + prim_axi_write_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + prim_axi_write_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + prim_axi_write_out_if_configuration_cg.set_inst_name($sformatf("prim_axi_write_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(prim_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver.svh new file mode 100644 index 000000000..15cac7080 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual prim_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( prim_axi_write_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in prim_axi_write_out_if_macros.svh +//******************************************************************* +// Initiator macro used by prim_axi_write_out_if_driver and prim_axi_write_out_if_driver_bfm +// to communicate initiator driven data to prim_axi_write_out_if_driver_bfm. +`prim_axi_write_out_if_INITIATOR_STRUCT + prim_axi_write_out_if_initiator_s prim_axi_write_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by prim_axi_write_out_if_driver and prim_axi_write_out_if_driver_bfm +// to communicate Responder driven data to prim_axi_write_out_if_driver_bfm. +`prim_axi_write_out_if_RESPONDER_STRUCT + prim_axi_write_out_if_responder_s prim_axi_write_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + prim_axi_write_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(prim_axi_write_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + prim_axi_write_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(prim_axi_write_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver_bfm.sv new file mode 100644 index 000000000..eaecaa7f0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the prim_axi_write_out_if signal driving. It is +// accessed by the uvm prim_axi_write_out_if driver through a virtual interface +// handle in the prim_axi_write_out_if configuration. It drives the singals passed +// in through the port connection named bus of type prim_axi_write_out_if_if. +// +// Input signals from the prim_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within prim_axi_write_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_write_out_if_pkg_hdl::*; +`include "src/prim_axi_write_out_if_macros.svh" + +interface prim_axi_write_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (prim_axi_write_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute prim_axi_write_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + prim_axi_write_out_if_pkg::prim_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in prim_axi_write_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from prim_axi_write_out_if_driver to this BFM + // **************************************************************************** + `prim_axi_write_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by prim_axi_write_out_if_driver and prim_axi_write_out_if_driver_bfm + // to communicate initiator driven data to prim_axi_write_out_if_driver_bfm. + `prim_axi_write_out_if_INITIATOR_STRUCT + prim_axi_write_out_if_initiator_s initiator_struct; + // Responder macro used by prim_axi_write_out_if_driver and prim_axi_write_out_if_driver_bfm + // to communicate Responder driven data to prim_axi_write_out_if_driver_bfm. + `prim_axi_write_out_if_RESPONDER_STRUCT + prim_axi_write_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(prim_axi_write_out_if_configuration_s prim_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input prim_axi_write_out_if_initiator_s prim_axi_write_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output prim_axi_write_out_if_responder_s prim_axi_write_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the prim_axi_write_out_if_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Members within the prim_axi_write_out_if_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + initiator_struct = prim_axi_write_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // prim_axi_write_out_if_responder_struct.xyz = awready_i; // + // prim_axi_write_out_if_responder_struct.xyz = wready_i; // + // prim_axi_write_out_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // prim_axi_write_out_if_responder_struct.xyz = bid_i; // + // prim_axi_write_out_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // prim_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = prim_axi_write_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output prim_axi_write_out_if_initiator_s prim_axi_write_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input prim_axi_write_out_if_responder_s prim_axi_write_out_if_responder_struct + );// pragma tbx xtf + // Variables within the prim_axi_write_out_if_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Variables within the prim_axi_write_out_if_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= prim_axi_write_out_if_initiator_struct.xyz; // + // wready_o <= prim_axi_write_out_if_initiator_struct.xyz; // + // bresp_o <= prim_axi_write_out_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= prim_axi_write_out_if_initiator_struct.xyz; // + // bvalid_o <= prim_axi_write_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the prim_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the prim_axi_write_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_if.sv new file mode 100644 index 000000000..ab746c836 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the prim_axi_write_out_if interface signals. +// It is instantiated once per prim_axi_write_out_if bus. Bus Functional Models, +// BFM's named prim_axi_write_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named prim_axi_write_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(prim_axi_write_out_if_bus.awready), // Agent input +// .dut_signal_port(prim_axi_write_out_if_bus.wready), // Agent input +// .dut_signal_port(prim_axi_write_out_if_bus.bresp), // Agent input +// .dut_signal_port(prim_axi_write_out_if_bus.bid), // Agent input +// .dut_signal_port(prim_axi_write_out_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import prim_axi_write_out_if_pkg_hdl::*; + +interface prim_axi_write_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_macros.svh new file mode 100644 index 000000000..f85b89591 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the prim_axi_write_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the prim_axi_write_out_if_configuration class. +// + `define prim_axi_write_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } prim_axi_write_out_if_configuration_s; + + `define prim_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function prim_axi_write_out_if_configuration_s to_struct();\ + prim_axi_write_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( prim_axi_write_out_if_configuration_struct );\ + endfunction + + `define prim_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(prim_axi_write_out_if_configuration_s prim_axi_write_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = prim_axi_write_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the prim_axi_write_out_if_transaction class. +// + `define prim_axi_write_out_if_MONITOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } prim_axi_write_out_if_monitor_s; + + `define prim_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function prim_axi_write_out_if_monitor_s to_monitor_struct();\ + prim_axi_write_out_if_monitor_struct = \ + { \ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( prim_axi_write_out_if_monitor_struct);\ + endfunction\ + + `define prim_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(prim_axi_write_out_if_monitor_s prim_axi_write_out_if_monitor_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = prim_axi_write_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the prim_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_write_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } prim_axi_write_out_if_initiator_s; + + `define prim_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function prim_axi_write_out_if_initiator_s to_initiator_struct();\ + prim_axi_write_out_if_initiator_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( prim_axi_write_out_if_initiator_struct);\ + endfunction + + `define prim_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(prim_axi_write_out_if_initiator_s prim_axi_write_out_if_initiator_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = prim_axi_write_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the prim_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_write_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } prim_axi_write_out_if_responder_s; + + `define prim_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function prim_axi_write_out_if_responder_s to_responder_struct();\ + prim_axi_write_out_if_responder_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( prim_axi_write_out_if_responder_struct);\ + endfunction + + `define prim_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(prim_axi_write_out_if_responder_s prim_axi_write_out_if_responder_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = prim_axi_write_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor.svh new file mode 100644 index 000000000..f387b3874 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives prim_axi_write_out_if transactions observed by the +// prim_axi_write_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual prim_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_write_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`prim_axi_write_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the prim_axi_write_out_if_monitor_struct. + virtual function void notify_transaction(input prim_axi_write_out_if_monitor_s prim_axi_write_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(prim_axi_write_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor_bfm.sv new file mode 100644 index 000000000..7bb9d30cd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the prim_axi_write_out_if signal monitoring. +// It is accessed by the uvm prim_axi_write_out_if monitor through a virtual +// interface handle in the prim_axi_write_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type prim_axi_write_out_if_if. +// +// Input signals from the prim_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the prim_axi_write_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_write_out_if_pkg_hdl::*; +`include "src/prim_axi_write_out_if_macros.svh" + + +interface prim_axi_write_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( prim_axi_write_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute prim_axi_write_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`prim_axi_write_out_if_MONITOR_STRUCT + prim_axi_write_out_if_monitor_s prim_axi_write_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `prim_axi_write_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + prim_axi_write_out_if_pkg::prim_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( prim_axi_write_out_if_monitor_struct ); + + + proxy.notify_transaction( prim_axi_write_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(prim_axi_write_out_if_configuration_s prim_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output prim_axi_write_out_if_monitor_s prim_axi_write_out_if_monitor_struct); + // + // Available struct members: + // // prim_axi_write_out_if_monitor_struct.prim_awready + // // prim_axi_write_out_if_monitor_struct.prim_wready + // // prim_axi_write_out_if_monitor_struct.prim_bresp + // // prim_axi_write_out_if_monitor_struct.prim_bid + // // prim_axi_write_out_if_monitor_struct.prim_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // prim_axi_write_out_if_monitor_struct.xyz = awready_i; // + // prim_axi_write_out_if_monitor_struct.xyz = wready_i; // + // prim_axi_write_out_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // prim_axi_write_out_if_monitor_struct.xyz = bid_i; // + // prim_axi_write_out_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_random_sequence.svh new file mode 100644 index 000000000..a08f27b67 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the prim_axi_write_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a prim_axi_write_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_write_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=prim_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "prim_axi_write_out_if_random_sequence::body()-prim_axi_write_out_if_transaction randomization failed") + // Send the transaction to the prim_axi_write_out_if_driver_bfm via the sequencer and prim_axi_write_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: prim_axi_write_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_responder_sequence.svh new file mode 100644 index 000000000..5fd14eb62 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_write_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "prim_axi_write_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=prim_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_sequence_base.svh new file mode 100644 index 000000000..c5e7917da --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_write_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_write_out_if_transaction_req_t; + prim_axi_write_out_if_transaction_req_t req; + typedef prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_write_out_if_transaction_rsp_t; + prim_axi_write_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = prim_axi_write_out_if_transaction_req_t::type_id::create("req"); + rsp = prim_axi_write_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction.svh new file mode 100644 index 000000000..aea5dc8a0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an prim_axi_write_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( prim_axi_write_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_awready ; + logic prim_wready ; + axi_pkg::axi_burst_e prim_bresp ; + logic prim_bid ; + logic prim_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in prim_axi_write_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by prim_axi_write_out_if_monitor and prim_axi_write_out_if_monitor_bfm + // This struct is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_MONITOR_STRUCT + prim_axi_write_out_if_monitor_s prim_axi_write_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a prim_axi_write_out_if_monitor_s + // structure. The function returns the handle to the prim_axi_write_out_if_monitor_struct. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by prim_axi_write_out_if_driver and prim_axi_write_out_if_driver_bfm + // to communicate initiator driven data to prim_axi_write_out_if_driver_bfm. + // This struct is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_INITIATOR_STRUCT + prim_axi_write_out_if_initiator_s prim_axi_write_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a prim_axi_write_out_if_initiator_s + // structure. The function returns the handle to the prim_axi_write_out_if_initiator_struct. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by prim_axi_write_out_if_driver and prim_axi_write_out_if_driver_bfm + // to communicate Responder driven data to prim_axi_write_out_if_driver_bfm. + // This struct is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_RESPONDER_STRUCT + prim_axi_write_out_if_responder_s prim_axi_write_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a prim_axi_write_out_if_responder_s + // structure. The function returns the handle to the prim_axi_write_out_if_responder_struct. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awready:0x%x prim_wready:0x%x prim_bresp:0x%x prim_bid:0x%x prim_bvalid:0x%x ",prim_awready,prim_wready,prim_bresp,prim_bid,prim_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_awready == RHS.prim_awready) + &&(this.prim_wready == RHS.prim_wready) + &&(this.prim_bresp == RHS.prim_bresp) + &&(this.prim_bid == RHS.prim_bid) + &&(this.prim_bvalid == RHS.prim_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awready = RHS.prim_awready; + this.prim_wready = RHS.prim_wready; + this.prim_bresp = RHS.prim_bresp; + this.prim_bid = RHS.prim_bid; + this.prim_bvalid = RHS.prim_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"prim_axi_write_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awready,"prim_awready"); + $add_attribute(transaction_view_h,prim_wready,"prim_wready"); + $add_attribute(transaction_view_h,prim_bresp,"prim_bresp"); + $add_attribute(transaction_view_h,prim_bid,"prim_bid"); + $add_attribute(transaction_view_h,prim_bvalid,"prim_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction_coverage.svh new file mode 100644 index 000000000..df6bc2e86 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records prim_axi_write_out_if transaction information using +// a covergroup named prim_axi_write_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_write_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup prim_axi_write_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awready: coverpoint coverage_trans.prim_awready; + prim_wready: coverpoint coverage_trans.prim_wready; + prim_bresp: coverpoint coverage_trans.prim_bresp; + prim_bid: coverpoint coverage_trans.prim_bid; + prim_bvalid: coverpoint coverage_trans.prim_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + prim_axi_write_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + prim_axi_write_out_if_transaction_cg.set_inst_name($sformatf("prim_axi_write_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + prim_axi_write_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/yaml/prim_axi_write_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/yaml/prim_axi_write_out_if_interface.yaml new file mode 100644 index 000000000..aa66e27a7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/prim_axi_write_out_if_pkg/yaml/prim_axi_write_out_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + prim_axi_write_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/.project new file mode 100644 index 000000000..2683cb016 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + secreg_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..72277d03c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..2d3ef8fcd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# secreg_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +secreg_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f + +secreg_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f + +secreg_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f + +COMP_secreg_axi_read_if_PKG_TGT_0 = q_comp_secreg_axi_read_if_pkg +COMP_secreg_axi_read_if_PKG_TGT_1 = v_comp_secreg_axi_read_if_pkg +COMP_secreg_axi_read_if_PKG_TGT = $(COMP_secreg_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_secreg_axi_read_if_pkg: $(COMP_secreg_axi_read_if_PKG_TGT) + +q_comp_secreg_axi_read_if_pkg: + $(HDL_COMP_CMD) $(secreg_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(secreg_axi_read_if_PKG) + $(HDL_COMP_CMD) $(secreg_axi_read_if_PKG_XRTL) + +v_comp_secreg_axi_read_if_pkg: + $(HVL_COMP_CMD) $(secreg_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(secreg_axi_read_if_PKG) + $(VELANALYZE_CMD) $(secreg_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(secreg_axi_read_if_PKG) + $(HDL_COMP_CMD) $(secreg_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export secreg_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_secreg_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_secreg_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_secreg_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_secreg_axi_read_if_pkg += -I$(secreg_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_secreg_axi_read_if_pkg += $(secreg_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_secreg_axi_read_if_pkg += \ + \ + -o .so + +comp_secreg_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_secreg_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_secreg_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_secreg_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_secreg_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..864496dd5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of secreg_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if.compile new file mode 100644 index 000000000..c7d9ea90d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - secreg_axi_read_if_hvl.compile + - secreg_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..557cbed12 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use secreg_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/secreg_axi_read_if_if.sv +src/secreg_axi_read_if_driver_bfm.sv +src/secreg_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_common.compile new file mode 100644 index 000000000..fbd65847f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..7f0ec9552 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..d8510e398 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..cb3095083 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hdl.compile new file mode 100644 index 000000000..d84364941 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./secreg_axi_read_if_common.compile +incdir: + - . +src: + - src/secreg_axi_read_if_if.sv + - src/secreg_axi_read_if_monitor_bfm.sv + - src/secreg_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hvl.compile new file mode 100644 index 000000000..14ff5a6a2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./secreg_axi_read_if_common.compile +incdir: + - . +src: + - secreg_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.sv new file mode 100644 index 000000000..a8766a676 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package secreg_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import secreg_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/secreg_axi_read_if_macros.svh" + + export secreg_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/secreg_axi_read_if_typedefs.svh" + `include "src/secreg_axi_read_if_transaction.svh" + + `include "src/secreg_axi_read_if_configuration.svh" + `include "src/secreg_axi_read_if_driver.svh" + `include "src/secreg_axi_read_if_monitor.svh" + + `include "src/secreg_axi_read_if_transaction_coverage.svh" + `include "src/secreg_axi_read_if_sequence_base.svh" + `include "src/secreg_axi_read_if_random_sequence.svh" + + `include "src/secreg_axi_read_if_responder_sequence.svh" + `include "src/secreg_axi_read_if2reg_adapter.svh" + + `include "src/secreg_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..9ef82e6b1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use secreg_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +secreg_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..6e5d0d9fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package secreg_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/secreg_axi_read_if_typedefs_hdl.svh" + `include "src/secreg_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..c8b7f5572 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..ec83c1931 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..9b9b95c9c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the secreg_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( secreg_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "secreg_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : secreg_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_agent.svh new file mode 100644 index 000000000..b7809cae6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(secreg_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(secreg_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(secreg_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( secreg_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_configuration.svh new file mode 100644 index 000000000..2fff5b259 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the secreg_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual secreg_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual secreg_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( secreg_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup secreg_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_CONFIGURATION_STRUCT + secreg_axi_read_if_configuration_s secreg_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a secreg_axi_read_if_configuration_s + // structure. The function returns the handle to the secreg_axi_read_if_configuration_struct. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + secreg_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + secreg_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + secreg_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + secreg_axi_read_if_configuration_cg.set_inst_name($sformatf("secreg_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver.svh new file mode 100644 index 000000000..02e992918 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual secreg_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( secreg_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in secreg_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm +// to communicate initiator driven data to secreg_axi_read_if_driver_bfm. +`secreg_axi_read_if_INITIATOR_STRUCT + secreg_axi_read_if_initiator_s secreg_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm +// to communicate Responder driven data to secreg_axi_read_if_driver_bfm. +`secreg_axi_read_if_RESPONDER_STRUCT + secreg_axi_read_if_responder_s secreg_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + secreg_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(secreg_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + secreg_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(secreg_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..4ebf76fbf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the secreg_axi_read_if signal driving. It is +// accessed by the uvm secreg_axi_read_if driver through a virtual interface +// handle in the secreg_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type secreg_axi_read_if_if. +// +// Input signals from the secreg_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within secreg_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import secreg_axi_read_if_pkg_hdl::*; +`include "src/secreg_axi_read_if_macros.svh" + +interface secreg_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (secreg_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute secreg_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + secreg_axi_read_if_pkg::secreg_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in secreg_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from secreg_axi_read_if_driver to this BFM + // **************************************************************************** + `secreg_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm + // to communicate initiator driven data to secreg_axi_read_if_driver_bfm. + `secreg_axi_read_if_INITIATOR_STRUCT + secreg_axi_read_if_initiator_s initiator_struct; + // Responder macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm + // to communicate Responder driven data to secreg_axi_read_if_driver_bfm. + `secreg_axi_read_if_RESPONDER_STRUCT + secreg_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(secreg_axi_read_if_configuration_s secreg_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = secreg_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input secreg_axi_read_if_initiator_s secreg_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output secreg_axi_read_if_responder_s secreg_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the secreg_axi_read_if_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Members within the secreg_axi_read_if_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + initiator_struct = secreg_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // secreg_axi_read_if_responder_struct.xyz = arready_i; // + // secreg_axi_read_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // secreg_axi_read_if_responder_struct.xyz = rresp_i; // + // secreg_axi_read_if_responder_struct.xyz = rid_i; // + // secreg_axi_read_if_responder_struct.xyz = rlast_i; // + // secreg_axi_read_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // secreg_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = secreg_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output secreg_axi_read_if_initiator_s secreg_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input secreg_axi_read_if_responder_s secreg_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the secreg_axi_read_if_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Variables within the secreg_axi_read_if_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= secreg_axi_read_if_initiator_struct.xyz; // + // rdata_o <= secreg_axi_read_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= secreg_axi_read_if_initiator_struct.xyz; // + // rid_o <= secreg_axi_read_if_initiator_struct.xyz; // + // rlast_o <= secreg_axi_read_if_initiator_struct.xyz; // + // rvalid_o <= secreg_axi_read_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the secreg_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the secreg_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_if.sv new file mode 100644 index 000000000..299364565 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the secreg_axi_read_if interface signals. +// It is instantiated once per secreg_axi_read_if bus. Bus Functional Models, +// BFM's named secreg_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named secreg_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(secreg_axi_read_if_bus.arready), // Agent input +// .dut_signal_port(secreg_axi_read_if_bus.rdata), // Agent input +// .dut_signal_port(secreg_axi_read_if_bus.rresp), // Agent input +// .dut_signal_port(secreg_axi_read_if_bus.rid), // Agent input +// .dut_signal_port(secreg_axi_read_if_bus.rlast), // Agent input +// .dut_signal_port(secreg_axi_read_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import secreg_axi_read_if_pkg_hdl::*; + +interface secreg_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_macros.svh new file mode 100644 index 000000000..01e181bac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the secreg_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the secreg_axi_read_if_configuration class. +// + `define secreg_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } secreg_axi_read_if_configuration_s; + + `define secreg_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function secreg_axi_read_if_configuration_s to_struct();\ + secreg_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( secreg_axi_read_if_configuration_struct );\ + endfunction + + `define secreg_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(secreg_axi_read_if_configuration_s secreg_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = secreg_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the secreg_axi_read_if_transaction class. +// + `define secreg_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } secreg_axi_read_if_monitor_s; + + `define secreg_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function secreg_axi_read_if_monitor_s to_monitor_struct();\ + secreg_axi_read_if_monitor_struct = \ + { \ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( secreg_axi_read_if_monitor_struct);\ + endfunction\ + + `define secreg_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(secreg_axi_read_if_monitor_s secreg_axi_read_if_monitor_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = secreg_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the secreg_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define secreg_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } secreg_axi_read_if_initiator_s; + + `define secreg_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function secreg_axi_read_if_initiator_s to_initiator_struct();\ + secreg_axi_read_if_initiator_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( secreg_axi_read_if_initiator_struct);\ + endfunction + + `define secreg_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(secreg_axi_read_if_initiator_s secreg_axi_read_if_initiator_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = secreg_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the secreg_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define secreg_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } secreg_axi_read_if_responder_s; + + `define secreg_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function secreg_axi_read_if_responder_s to_responder_struct();\ + secreg_axi_read_if_responder_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( secreg_axi_read_if_responder_struct);\ + endfunction + + `define secreg_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(secreg_axi_read_if_responder_s secreg_axi_read_if_responder_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = secreg_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor.svh new file mode 100644 index 000000000..4a1a86451 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives secreg_axi_read_if transactions observed by the +// secreg_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual secreg_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( secreg_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`secreg_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the secreg_axi_read_if_monitor_struct. + virtual function void notify_transaction(input secreg_axi_read_if_monitor_s secreg_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(secreg_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..88b287386 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the secreg_axi_read_if signal monitoring. +// It is accessed by the uvm secreg_axi_read_if monitor through a virtual +// interface handle in the secreg_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type secreg_axi_read_if_if. +// +// Input signals from the secreg_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the secreg_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import secreg_axi_read_if_pkg_hdl::*; +`include "src/secreg_axi_read_if_macros.svh" + + +interface secreg_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( secreg_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute secreg_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`secreg_axi_read_if_MONITOR_STRUCT + secreg_axi_read_if_monitor_s secreg_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `secreg_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + secreg_axi_read_if_pkg::secreg_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( secreg_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( secreg_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(secreg_axi_read_if_configuration_s secreg_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = secreg_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output secreg_axi_read_if_monitor_s secreg_axi_read_if_monitor_struct); + // + // Available struct members: + // // secreg_axi_read_if_monitor_struct.secreg_arready + // // secreg_axi_read_if_monitor_struct.secreg_rdata + // // secreg_axi_read_if_monitor_struct.secreg_rresp + // // secreg_axi_read_if_monitor_struct.secreg_rid + // // secreg_axi_read_if_monitor_struct.secreg_rlast + // // secreg_axi_read_if_monitor_struct.secreg_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // secreg_axi_read_if_monitor_struct.xyz = arready_i; // + // secreg_axi_read_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // secreg_axi_read_if_monitor_struct.xyz = rresp_i; // + // secreg_axi_read_if_monitor_struct.xyz = rid_i; // + // secreg_axi_read_if_monitor_struct.xyz = rlast_i; // + // secreg_axi_read_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..99ba1090a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the secreg_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a secreg_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends secreg_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( secreg_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "secreg_axi_read_if_random_sequence::body()-secreg_axi_read_if_transaction randomization failed") + // Send the transaction to the secreg_axi_read_if_driver_bfm via the sequencer and secreg_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: secreg_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..d67fab023 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends secreg_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( secreg_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "secreg_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..6f62375a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( secreg_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + secreg_axi_read_if_transaction_req_t; + secreg_axi_read_if_transaction_req_t req; + typedef secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + secreg_axi_read_if_transaction_rsp_t; + secreg_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = secreg_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = secreg_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction.svh new file mode 100644 index 000000000..6b47b5928 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an secreg_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( secreg_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic secreg_arready ; + logic [DW-1:0] secreg_rdata ; + axi_pkg::axi_burst_e secreg_rresp ; + logic [IW-1:0] secreg_rid ; + logic secreg_rlast ; + logic secreg_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in secreg_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by secreg_axi_read_if_monitor and secreg_axi_read_if_monitor_bfm + // This struct is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_MONITOR_STRUCT + secreg_axi_read_if_monitor_s secreg_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a secreg_axi_read_if_monitor_s + // structure. The function returns the handle to the secreg_axi_read_if_monitor_struct. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm + // to communicate initiator driven data to secreg_axi_read_if_driver_bfm. + // This struct is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_INITIATOR_STRUCT + secreg_axi_read_if_initiator_s secreg_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a secreg_axi_read_if_initiator_s + // structure. The function returns the handle to the secreg_axi_read_if_initiator_struct. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm + // to communicate Responder driven data to secreg_axi_read_if_driver_bfm. + // This struct is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_RESPONDER_STRUCT + secreg_axi_read_if_responder_s secreg_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a secreg_axi_read_if_responder_s + // structure. The function returns the handle to the secreg_axi_read_if_responder_struct. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_arready:0x%x secreg_rdata:0x%x secreg_rresp:0x%x secreg_rid:0x%x secreg_rlast:0x%x secreg_rvalid:0x%x ",secreg_arready,secreg_rdata,secreg_rresp,secreg_rid,secreg_rlast,secreg_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.secreg_arready == RHS.secreg_arready) + &&(this.secreg_rdata == RHS.secreg_rdata) + &&(this.secreg_rresp == RHS.secreg_rresp) + &&(this.secreg_rid == RHS.secreg_rid) + &&(this.secreg_rlast == RHS.secreg_rlast) + &&(this.secreg_rvalid == RHS.secreg_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_arready = RHS.secreg_arready; + this.secreg_rdata = RHS.secreg_rdata; + this.secreg_rresp = RHS.secreg_rresp; + this.secreg_rid = RHS.secreg_rid; + this.secreg_rlast = RHS.secreg_rlast; + this.secreg_rvalid = RHS.secreg_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"secreg_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_arready,"secreg_arready"); + $add_attribute(transaction_view_h,secreg_rdata,"secreg_rdata"); + $add_attribute(transaction_view_h,secreg_rresp,"secreg_rresp"); + $add_attribute(transaction_view_h,secreg_rid,"secreg_rid"); + $add_attribute(transaction_view_h,secreg_rlast,"secreg_rlast"); + $add_attribute(transaction_view_h,secreg_rvalid,"secreg_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..01ff22535 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records secreg_axi_read_if transaction information using +// a covergroup named secreg_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( secreg_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup secreg_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_arready: coverpoint coverage_trans.secreg_arready; + secreg_rdata: coverpoint coverage_trans.secreg_rdata; + secreg_rresp: coverpoint coverage_trans.secreg_rresp; + secreg_rid: coverpoint coverage_trans.secreg_rid; + secreg_rlast: coverpoint coverage_trans.secreg_rlast; + secreg_rvalid: coverpoint coverage_trans.secreg_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + secreg_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + secreg_axi_read_if_transaction_cg.set_inst_name($sformatf("secreg_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + secreg_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/yaml/secreg_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/yaml/secreg_axi_read_if_interface.yaml new file mode 100644 index 000000000..77d1a8ed1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_if_pkg/yaml/secreg_axi_read_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + secreg_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.project new file mode 100644 index 000000000..8ff15aaa7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + secreg_axi_read_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.svproject new file mode 100644 index 000000000..c9f7e3bc5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/Makefile new file mode 100644 index 000000000..ec9e43ad6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# secreg_axi_read_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +secreg_axi_read_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hvl.f + +secreg_axi_read_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hdl.f + +secreg_axi_read_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_xrtl.f + +COMP_secreg_axi_read_out_if_PKG_TGT_0 = q_comp_secreg_axi_read_out_if_pkg +COMP_secreg_axi_read_out_if_PKG_TGT_1 = v_comp_secreg_axi_read_out_if_pkg +COMP_secreg_axi_read_out_if_PKG_TGT = $(COMP_secreg_axi_read_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_secreg_axi_read_out_if_pkg: $(COMP_secreg_axi_read_out_if_PKG_TGT) + +q_comp_secreg_axi_read_out_if_pkg: + $(HDL_COMP_CMD) $(secreg_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(secreg_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(secreg_axi_read_out_if_PKG_XRTL) + +v_comp_secreg_axi_read_out_if_pkg: + $(HVL_COMP_CMD) $(secreg_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(secreg_axi_read_out_if_PKG) + $(VELANALYZE_CMD) $(secreg_axi_read_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(secreg_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(secreg_axi_read_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export secreg_axi_read_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_secreg_axi_read_out_if_pkg = \ + +O_FILE_COMPILE_LIST_secreg_axi_read_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_secreg_axi_read_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_secreg_axi_read_out_if_pkg += -I$(secreg_axi_read_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_secreg_axi_read_out_if_pkg += $(secreg_axi_read_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_secreg_axi_read_out_if_pkg += \ + \ + -o .so + +comp_secreg_axi_read_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_secreg_axi_read_out_if_pkg) $(C_FILE_COMPILE_LIST_secreg_axi_read_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_secreg_axi_read_out_if_pkg) $(O_FILE_COMPILE_LIST_secreg_axi_read_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/compile.do new file mode 100644 index 000000000..f867dc5d7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of secreg_axi_read_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if.compile new file mode 100644 index 000000000..cfbe1cb35 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if.compile @@ -0,0 +1,3 @@ +needs: + - secreg_axi_read_out_if_hvl.compile + - secreg_axi_read_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_bfm.vinfo new file mode 100644 index 000000000..47b065ce0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use secreg_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/secreg_axi_read_out_if_if.sv +src/secreg_axi_read_out_if_driver_bfm.sv +src/secreg_axi_read_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_common.compile new file mode 100644 index 000000000..1ce5be570 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - secreg_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hdl.f new file mode 100644 index 000000000..e669da6e0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hvl.f new file mode 100644 index 000000000..22fdb970b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_xrtl.f new file mode 100644 index 000000000..52cf88070 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hdl.compile new file mode 100644 index 000000000..492d8c2ce --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./secreg_axi_read_out_if_common.compile +incdir: + - . +src: + - src/secreg_axi_read_out_if_if.sv + - src/secreg_axi_read_out_if_monitor_bfm.sv + - src/secreg_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hvl.compile new file mode 100644 index 000000000..fdeed3512 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./secreg_axi_read_out_if_common.compile +incdir: + - . +src: + - secreg_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.sv new file mode 100644 index 000000000..2d7516123 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package secreg_axi_read_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import secreg_axi_read_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/secreg_axi_read_out_if_macros.svh" + + export secreg_axi_read_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/secreg_axi_read_out_if_typedefs.svh" + `include "src/secreg_axi_read_out_if_transaction.svh" + + `include "src/secreg_axi_read_out_if_configuration.svh" + `include "src/secreg_axi_read_out_if_driver.svh" + `include "src/secreg_axi_read_out_if_monitor.svh" + + `include "src/secreg_axi_read_out_if_transaction_coverage.svh" + `include "src/secreg_axi_read_out_if_sequence_base.svh" + `include "src/secreg_axi_read_out_if_random_sequence.svh" + + `include "src/secreg_axi_read_out_if_responder_sequence.svh" + `include "src/secreg_axi_read_out_if2reg_adapter.svh" + + `include "src/secreg_axi_read_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.vinfo new file mode 100644 index 000000000..905f79483 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use secreg_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +secreg_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.sv new file mode 100644 index 000000000..e05290254 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package secreg_axi_read_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/secreg_axi_read_out_if_typedefs_hdl.svh" + `include "src/secreg_axi_read_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..3eea142fa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +secreg_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_sve.F new file mode 100644 index 000000000..828ba63f4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if2reg_adapter.svh new file mode 100644 index 000000000..194eb7487 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the secreg_axi_read_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( secreg_axi_read_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "secreg_axi_read_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : secreg_axi_read_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_agent.svh new file mode 100644 index 000000000..d61b61ace --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(secreg_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(secreg_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(secreg_axi_read_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( secreg_axi_read_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_configuration.svh new file mode 100644 index 000000000..c9e9eede7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the secreg_axi_read_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual secreg_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual secreg_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( secreg_axi_read_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup secreg_axi_read_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_CONFIGURATION_STRUCT + secreg_axi_read_out_if_configuration_s secreg_axi_read_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a secreg_axi_read_out_if_configuration_s + // structure. The function returns the handle to the secreg_axi_read_out_if_configuration_struct. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + secreg_axi_read_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + secreg_axi_read_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + secreg_axi_read_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + secreg_axi_read_out_if_configuration_cg.set_inst_name($sformatf("secreg_axi_read_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(secreg_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver.svh new file mode 100644 index 000000000..409728519 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual secreg_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( secreg_axi_read_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in secreg_axi_read_out_if_macros.svh +//******************************************************************* +// Initiator macro used by secreg_axi_read_out_if_driver and secreg_axi_read_out_if_driver_bfm +// to communicate initiator driven data to secreg_axi_read_out_if_driver_bfm. +`secreg_axi_read_out_if_INITIATOR_STRUCT + secreg_axi_read_out_if_initiator_s secreg_axi_read_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by secreg_axi_read_out_if_driver and secreg_axi_read_out_if_driver_bfm +// to communicate Responder driven data to secreg_axi_read_out_if_driver_bfm. +`secreg_axi_read_out_if_RESPONDER_STRUCT + secreg_axi_read_out_if_responder_s secreg_axi_read_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + secreg_axi_read_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(secreg_axi_read_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + secreg_axi_read_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(secreg_axi_read_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver_bfm.sv new file mode 100644 index 000000000..358d0de16 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the secreg_axi_read_out_if signal driving. It is +// accessed by the uvm secreg_axi_read_out_if driver through a virtual interface +// handle in the secreg_axi_read_out_if configuration. It drives the singals passed +// in through the port connection named bus of type secreg_axi_read_out_if_if. +// +// Input signals from the secreg_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within secreg_axi_read_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import secreg_axi_read_out_if_pkg_hdl::*; +`include "src/secreg_axi_read_out_if_macros.svh" + +interface secreg_axi_read_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (secreg_axi_read_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute secreg_axi_read_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + secreg_axi_read_out_if_pkg::secreg_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in secreg_axi_read_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from secreg_axi_read_out_if_driver to this BFM + // **************************************************************************** + `secreg_axi_read_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by secreg_axi_read_out_if_driver and secreg_axi_read_out_if_driver_bfm + // to communicate initiator driven data to secreg_axi_read_out_if_driver_bfm. + `secreg_axi_read_out_if_INITIATOR_STRUCT + secreg_axi_read_out_if_initiator_s initiator_struct; + // Responder macro used by secreg_axi_read_out_if_driver and secreg_axi_read_out_if_driver_bfm + // to communicate Responder driven data to secreg_axi_read_out_if_driver_bfm. + `secreg_axi_read_out_if_RESPONDER_STRUCT + secreg_axi_read_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(secreg_axi_read_out_if_configuration_s secreg_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = secreg_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input secreg_axi_read_out_if_initiator_s secreg_axi_read_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output secreg_axi_read_out_if_responder_s secreg_axi_read_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the secreg_axi_read_out_if_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Members within the secreg_axi_read_out_if_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + initiator_struct = secreg_axi_read_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // secreg_axi_read_out_if_responder_struct.xyz = arready_i; // + // secreg_axi_read_out_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // secreg_axi_read_out_if_responder_struct.xyz = rresp_i; // + // secreg_axi_read_out_if_responder_struct.xyz = rid_i; // + // secreg_axi_read_out_if_responder_struct.xyz = rlast_i; // + // secreg_axi_read_out_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // secreg_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = secreg_axi_read_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output secreg_axi_read_out_if_initiator_s secreg_axi_read_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input secreg_axi_read_out_if_responder_s secreg_axi_read_out_if_responder_struct + );// pragma tbx xtf + // Variables within the secreg_axi_read_out_if_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Variables within the secreg_axi_read_out_if_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= secreg_axi_read_out_if_initiator_struct.xyz; // + // rdata_o <= secreg_axi_read_out_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= secreg_axi_read_out_if_initiator_struct.xyz; // + // rid_o <= secreg_axi_read_out_if_initiator_struct.xyz; // + // rlast_o <= secreg_axi_read_out_if_initiator_struct.xyz; // + // rvalid_o <= secreg_axi_read_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the secreg_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the secreg_axi_read_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_if.sv new file mode 100644 index 000000000..cc52f2ea4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the secreg_axi_read_out_if interface signals. +// It is instantiated once per secreg_axi_read_out_if bus. Bus Functional Models, +// BFM's named secreg_axi_read_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named secreg_axi_read_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(secreg_axi_read_out_if_bus.arready), // Agent input +// .dut_signal_port(secreg_axi_read_out_if_bus.rdata), // Agent input +// .dut_signal_port(secreg_axi_read_out_if_bus.rresp), // Agent input +// .dut_signal_port(secreg_axi_read_out_if_bus.rid), // Agent input +// .dut_signal_port(secreg_axi_read_out_if_bus.rlast), // Agent input +// .dut_signal_port(secreg_axi_read_out_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import secreg_axi_read_out_if_pkg_hdl::*; + +interface secreg_axi_read_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_macros.svh new file mode 100644 index 000000000..c59ee1d57 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the secreg_axi_read_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the secreg_axi_read_out_if_configuration class. +// + `define secreg_axi_read_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } secreg_axi_read_out_if_configuration_s; + + `define secreg_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function secreg_axi_read_out_if_configuration_s to_struct();\ + secreg_axi_read_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( secreg_axi_read_out_if_configuration_struct );\ + endfunction + + `define secreg_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(secreg_axi_read_out_if_configuration_s secreg_axi_read_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = secreg_axi_read_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the secreg_axi_read_out_if_transaction class. +// + `define secreg_axi_read_out_if_MONITOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } secreg_axi_read_out_if_monitor_s; + + `define secreg_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function secreg_axi_read_out_if_monitor_s to_monitor_struct();\ + secreg_axi_read_out_if_monitor_struct = \ + { \ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( secreg_axi_read_out_if_monitor_struct);\ + endfunction\ + + `define secreg_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(secreg_axi_read_out_if_monitor_s secreg_axi_read_out_if_monitor_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = secreg_axi_read_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the secreg_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define secreg_axi_read_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } secreg_axi_read_out_if_initiator_s; + + `define secreg_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function secreg_axi_read_out_if_initiator_s to_initiator_struct();\ + secreg_axi_read_out_if_initiator_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( secreg_axi_read_out_if_initiator_struct);\ + endfunction + + `define secreg_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(secreg_axi_read_out_if_initiator_s secreg_axi_read_out_if_initiator_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = secreg_axi_read_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the secreg_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define secreg_axi_read_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } secreg_axi_read_out_if_responder_s; + + `define secreg_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function secreg_axi_read_out_if_responder_s to_responder_struct();\ + secreg_axi_read_out_if_responder_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( secreg_axi_read_out_if_responder_struct);\ + endfunction + + `define secreg_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(secreg_axi_read_out_if_responder_s secreg_axi_read_out_if_responder_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = secreg_axi_read_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor.svh new file mode 100644 index 000000000..5eb9dffdc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives secreg_axi_read_out_if transactions observed by the +// secreg_axi_read_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual secreg_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( secreg_axi_read_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`secreg_axi_read_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the secreg_axi_read_out_if_monitor_struct. + virtual function void notify_transaction(input secreg_axi_read_out_if_monitor_s secreg_axi_read_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(secreg_axi_read_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor_bfm.sv new file mode 100644 index 000000000..3a5271d8c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the secreg_axi_read_out_if signal monitoring. +// It is accessed by the uvm secreg_axi_read_out_if monitor through a virtual +// interface handle in the secreg_axi_read_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type secreg_axi_read_out_if_if. +// +// Input signals from the secreg_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the secreg_axi_read_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import secreg_axi_read_out_if_pkg_hdl::*; +`include "src/secreg_axi_read_out_if_macros.svh" + + +interface secreg_axi_read_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( secreg_axi_read_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute secreg_axi_read_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`secreg_axi_read_out_if_MONITOR_STRUCT + secreg_axi_read_out_if_monitor_s secreg_axi_read_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `secreg_axi_read_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + secreg_axi_read_out_if_pkg::secreg_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( secreg_axi_read_out_if_monitor_struct ); + + + proxy.notify_transaction( secreg_axi_read_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(secreg_axi_read_out_if_configuration_s secreg_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = secreg_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output secreg_axi_read_out_if_monitor_s secreg_axi_read_out_if_monitor_struct); + // + // Available struct members: + // // secreg_axi_read_out_if_monitor_struct.secreg_arready + // // secreg_axi_read_out_if_monitor_struct.secreg_rdata + // // secreg_axi_read_out_if_monitor_struct.secreg_rresp + // // secreg_axi_read_out_if_monitor_struct.secreg_rid + // // secreg_axi_read_out_if_monitor_struct.secreg_rlast + // // secreg_axi_read_out_if_monitor_struct.secreg_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // secreg_axi_read_out_if_monitor_struct.xyz = arready_i; // + // secreg_axi_read_out_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // secreg_axi_read_out_if_monitor_struct.xyz = rresp_i; // + // secreg_axi_read_out_if_monitor_struct.xyz = rid_i; // + // secreg_axi_read_out_if_monitor_struct.xyz = rlast_i; // + // secreg_axi_read_out_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_random_sequence.svh new file mode 100644 index 000000000..3ac1e82c7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the secreg_axi_read_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a secreg_axi_read_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends secreg_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( secreg_axi_read_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=secreg_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "secreg_axi_read_out_if_random_sequence::body()-secreg_axi_read_out_if_transaction randomization failed") + // Send the transaction to the secreg_axi_read_out_if_driver_bfm via the sequencer and secreg_axi_read_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: secreg_axi_read_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_responder_sequence.svh new file mode 100644 index 000000000..044fb1741 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends secreg_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( secreg_axi_read_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "secreg_axi_read_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=secreg_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_sequence_base.svh new file mode 100644 index 000000000..4c4380762 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( secreg_axi_read_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + secreg_axi_read_out_if_transaction_req_t; + secreg_axi_read_out_if_transaction_req_t req; + typedef secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + secreg_axi_read_out_if_transaction_rsp_t; + secreg_axi_read_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = secreg_axi_read_out_if_transaction_req_t::type_id::create("req"); + rsp = secreg_axi_read_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction.svh new file mode 100644 index 000000000..938c0a49c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an secreg_axi_read_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( secreg_axi_read_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic secreg_arready ; + logic [DW-1:0] secreg_rdata ; + axi_pkg::axi_burst_e secreg_rresp ; + logic [IW-1:0] secreg_rid ; + logic secreg_rlast ; + logic secreg_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in secreg_axi_read_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by secreg_axi_read_out_if_monitor and secreg_axi_read_out_if_monitor_bfm + // This struct is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_MONITOR_STRUCT + secreg_axi_read_out_if_monitor_s secreg_axi_read_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a secreg_axi_read_out_if_monitor_s + // structure. The function returns the handle to the secreg_axi_read_out_if_monitor_struct. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by secreg_axi_read_out_if_driver and secreg_axi_read_out_if_driver_bfm + // to communicate initiator driven data to secreg_axi_read_out_if_driver_bfm. + // This struct is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_INITIATOR_STRUCT + secreg_axi_read_out_if_initiator_s secreg_axi_read_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a secreg_axi_read_out_if_initiator_s + // structure. The function returns the handle to the secreg_axi_read_out_if_initiator_struct. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by secreg_axi_read_out_if_driver and secreg_axi_read_out_if_driver_bfm + // to communicate Responder driven data to secreg_axi_read_out_if_driver_bfm. + // This struct is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_RESPONDER_STRUCT + secreg_axi_read_out_if_responder_s secreg_axi_read_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a secreg_axi_read_out_if_responder_s + // structure. The function returns the handle to the secreg_axi_read_out_if_responder_struct. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_arready:0x%x secreg_rdata:0x%x secreg_rresp:0x%x secreg_rid:0x%x secreg_rlast:0x%x secreg_rvalid:0x%x ",secreg_arready,secreg_rdata,secreg_rresp,secreg_rid,secreg_rlast,secreg_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.secreg_arready == RHS.secreg_arready) + &&(this.secreg_rdata == RHS.secreg_rdata) + &&(this.secreg_rresp == RHS.secreg_rresp) + &&(this.secreg_rid == RHS.secreg_rid) + &&(this.secreg_rlast == RHS.secreg_rlast) + &&(this.secreg_rvalid == RHS.secreg_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_arready = RHS.secreg_arready; + this.secreg_rdata = RHS.secreg_rdata; + this.secreg_rresp = RHS.secreg_rresp; + this.secreg_rid = RHS.secreg_rid; + this.secreg_rlast = RHS.secreg_rlast; + this.secreg_rvalid = RHS.secreg_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"secreg_axi_read_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_arready,"secreg_arready"); + $add_attribute(transaction_view_h,secreg_rdata,"secreg_rdata"); + $add_attribute(transaction_view_h,secreg_rresp,"secreg_rresp"); + $add_attribute(transaction_view_h,secreg_rid,"secreg_rid"); + $add_attribute(transaction_view_h,secreg_rlast,"secreg_rlast"); + $add_attribute(transaction_view_h,secreg_rvalid,"secreg_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction_coverage.svh new file mode 100644 index 000000000..da4a5a005 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records secreg_axi_read_out_if transaction information using +// a covergroup named secreg_axi_read_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( secreg_axi_read_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup secreg_axi_read_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_arready: coverpoint coverage_trans.secreg_arready; + secreg_rdata: coverpoint coverage_trans.secreg_rdata; + secreg_rresp: coverpoint coverage_trans.secreg_rresp; + secreg_rid: coverpoint coverage_trans.secreg_rid; + secreg_rlast: coverpoint coverage_trans.secreg_rlast; + secreg_rvalid: coverpoint coverage_trans.secreg_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + secreg_axi_read_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + secreg_axi_read_out_if_transaction_cg.set_inst_name($sformatf("secreg_axi_read_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + secreg_axi_read_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/yaml/secreg_axi_read_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/yaml/secreg_axi_read_out_if_interface.yaml new file mode 100644 index 000000000..af8439504 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_2/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/yaml/secreg_axi_read_out_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + secreg_axi_read_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/.project new file mode 100644 index 000000000..1462dcefd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/.project @@ -0,0 +1,37 @@ + + + fuse_ctrl + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + verification_ip + 2 + UVMF_VIP_LIBRARY_HOME + + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D/verification_ip + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/.svproject new file mode 100644 index 000000000..9e84acf61 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/docs/interfaces.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/docs/interfaces.csv new file mode 100644 index 000000000..121200b4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/docs/interfaces.csv @@ -0,0 +1,41 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +, +Interface Description, Interface Type, Interface Transaction, Interface Name, +fuse_ctrl_rst_agent, fuse_ctrl_rst_driver_bfm fuse_ctrl_rst_monitor_bfm, fuse_ctrl_rst_transaction, fuse_ctrl_rst_pkg_fuse_ctrl_rst_agent_BFM, +fuse_ctrl_core_axi_write_in_if_agent, fuse_ctrl_core_axi_write_in_driver_bfm fuse_ctrl_core_axi_write_in_monitor_bfm, fuse_ctrl_core_axi_write_in_transaction, fuse_ctrl_core_axi_write_in_pkg_fuse_ctrl_core_axi_write_in_if_agent_BFM, +fuse_ctrl_core_axi_write_out_if_agent, fuse_ctrl_core_axi_write_out_driver_bfm fuse_ctrl_core_axi_write_out_monitor_bfm, fuse_ctrl_core_axi_write_out_transaction, fuse_ctrl_core_axi_write_out_pkg_fuse_ctrl_core_axi_write_out_if_agent_BFM, +fuse_ctrl_prim_axi_write_in_if_agent, fuse_ctrl_prim_axi_write_in_driver_bfm fuse_ctrl_prim_axi_write_in_monitor_bfm, fuse_ctrl_prim_axi_write_in_transaction, fuse_ctrl_prim_axi_write_in_pkg_fuse_ctrl_prim_axi_write_in_if_agent_BFM, +fuse_ctrl_prim_axi_write_out_if_agent, fuse_ctrl_prim_axi_write_out_driver_bfm fuse_ctrl_prim_axi_write_out_monitor_bfm, fuse_ctrl_prim_axi_write_out_transaction, fuse_ctrl_prim_axi_write_out_pkg_fuse_ctrl_prim_axi_write_out_if_agent_BFM, +fuse_ctrl_core_axi_read_in_if_agent, fuse_ctrl_core_axi_read_in_driver_bfm fuse_ctrl_core_axi_read_in_monitor_bfm, fuse_ctrl_core_axi_read_in_transaction, fuse_ctrl_core_axi_read_in_pkg_fuse_ctrl_core_axi_read_in_if_agent_BFM, +fuse_ctrl_core_axi_read_out_if_agent, fuse_ctrl_core_axi_read_out_driver_bfm fuse_ctrl_core_axi_read_out_monitor_bfm, fuse_ctrl_core_axi_read_out_transaction, fuse_ctrl_core_axi_read_out_pkg_fuse_ctrl_core_axi_read_out_if_agent_BFM, +fuse_ctrl_prim_axi_read_in_if_agent, fuse_ctrl_prim_axi_read_in_driver_bfm fuse_ctrl_prim_axi_read_in_monitor_bfm, fuse_ctrl_prim_axi_read_in_transaction, fuse_ctrl_prim_axi_read_in_pkg_fuse_ctrl_prim_axi_read_in_if_agent_BFM, +fuse_ctrl_prim_axi_read_out_if_agent, fuse_ctrl_prim_axi_read_out_driver_bfm fuse_ctrl_prim_axi_read_out_monitor_bfm, fuse_ctrl_prim_axi_read_out_transaction, fuse_ctrl_prim_axi_read_out_pkg_fuse_ctrl_prim_axi_read_out_if_agent_BFM, +fuse_ctrl_secreg_axi_read_in_if_agent, fuse_ctrl_secreg_axi_read_in_driver_bfm fuse_ctrl_secreg_axi_read_in_monitor_bfm, fuse_ctrl_secreg_axi_read_in_transaction, fuse_ctrl_secreg_axi_read_in_pkg_fuse_ctrl_secreg_axi_read_in_if_agent_BFM, +fuse_ctrl_secreg_axi_read_out_if_agent, fuse_ctrl_secreg_axi_read_out_driver_bfm fuse_ctrl_secreg_axi_read_out_monitor_bfm, fuse_ctrl_secreg_axi_read_out_transaction, fuse_ctrl_secreg_axi_read_out_pkg_fuse_ctrl_secreg_axi_read_out_if_agent_BFM, +fuse_ctrl_lc_otp_in_if_agent, fuse_ctrl_lc_otp_in_driver_bfm fuse_ctrl_lc_otp_in_monitor_bfm, fuse_ctrl_lc_otp_in_transaction, fuse_ctrl_lc_otp_in_pkg_fuse_ctrl_lc_otp_in_if_agent_BFM, +fuse_ctrl_lc_otp_out_if_agent, fuse_ctrl_lc_otp_out_driver_bfm fuse_ctrl_lc_otp_out_monitor_bfm, fuse_ctrl_lc_otp_out_transaction, fuse_ctrl_lc_otp_out_pkg_fuse_ctrl_lc_otp_out_if_agent_BFM, +fuse_ctrl_in_if_agent, fuse_ctrl_in_driver_bfm fuse_ctrl_in_monitor_bfm, fuse_ctrl_in_transaction, fuse_ctrl_in_pkg_fuse_ctrl_in_if_agent_BFM, +fuse_ctrl_out_if_agent, fuse_ctrl_out_driver_bfm fuse_ctrl_out_monitor_bfm, fuse_ctrl_out_transaction, fuse_ctrl_out_pkg_fuse_ctrl_out_if_agent_BFM, + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/fuse_ctrl_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/fuse_ctrl_sve.F new file mode 100644 index 000000000..5ae38f3f9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/fuse_ctrl_sve.F @@ -0,0 +1,41 @@ + +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + +// BFM Files +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F + +// Environment Files +-F ${UVMF_VIP_LIBRARY_HOME}/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F + +// Bench Files ++incdir+./tb/tests +./tb/tests/fuse_ctrl_tests_pkg.sv + ++incdir+./tb/sequences +./tb/sequences/fuse_ctrl_sequences_pkg.sv + ++incdir+./tb/parameters +./tb/parameters/fuse_ctrl_parameters_pkg.sv + +./tb/testbench/hdl_top.sv +./tb/testbench/hvl_top.sv + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/rtl/dut.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/rtl/dut.compile new file mode 100644 index 000000000..9b0008fc5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/rtl/dut.compile @@ -0,0 +1,6 @@ + +# pragma uvmf custom dut_compile_info begin +src: + - ./vhdl/vhdl_dut.vhd + - ./verilog/verilog_dut.v +# pragma uvmf custom dut_compile_info end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.v b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.v new file mode 100644 index 000000000..96198441c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.v @@ -0,0 +1,21 @@ +module verilog_dut(clk, rst, in_signal, out_signal); + +input clk; +input rst; +input in_signal; +output out_signal; + +reg out_signal_o; + +always @(posedge clk) begin + if (rst) begin + out_signal_o <= 0; + end + else begin + out_signal_o <= ~in_signal; + end + end + +assign out_signal = out_signal_o; + +endmodule diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.vinfo new file mode 100644 index 000000000..87e95f36f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.vinfo @@ -0,0 +1 @@ +verilog_dut.v diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/rtl/vhdl/vhdl_dut.vhd b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/rtl/vhdl/vhdl_dut.vhd new file mode 100644 index 000000000..904aa37d1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/rtl/vhdl/vhdl_dut.vhd @@ -0,0 +1,21 @@ +library ieee; +use ieee.std_logic_1164.all ; + +entity vhdl_dut is + port ( clk : in std_logic ; + rst : in std_logic ; + in_signal : in std_logic ; + out_signal :out std_logic + ); +end vhdl_dut; + +architecture rtl of vhdl_dut is + begin + P1: process + variable out_signal_o : std_logic; + begin + wait until clk'event and clk = '1'; + out_signal_o := in_signal; + out_signal <= out_signal_o; + end process; + end rtl; diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/Makefile new file mode 100644 index 000000000..c794443c2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/Makefile @@ -0,0 +1,376 @@ + +# +#---------------------------------------------------------------------- +# +# DESCRIPTION: This makefile includes the shared makefile and contains +# bench level make targets. +# +#---------------------------------------------------------------------- + + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +# ********************************************************************************************* +# UVMF library directory: +# This variable points to the UVMF release where uvmf_base_pkg directory resides. +# This variable points to release code that is not user modified. +# This variable allows for UVMF release directories to reside independent of project related verification IP and project bench directories. +# This code below looks "upward" for directory starting with UVMF_* and returns first match for use with the release examples. +UVMF_HOME ?= ___PLEASE_SET_AN_ENVIRONMENT_VARIABLE_NAMED_UVMF_HOME_TO_POINT_TO_THE_UVMF_INSTALLATION___ + +# pragma uvmf custom exports begin +# +# Project(s) specific verification IP library: +# Directory where reusable verification packages for interfaces, environments, utilities, etc. reside. +# This variable allows for your verification IP to reside independent of project bench and UVMF release directories. +# For examples deployed with UVMF this will be $(UVMF_HOME)//verification_ip +export UVMF_VIP_LIBRARY_HOME ?= $(PWD)/../../../verification_ip +# +# Project specific bench: +# Directory where bench specific code is located. +# This variable allows for project_benches to reside independent of verification IP and UVMF release directories. +# For examples deployed with UVMF this will be $(UVMF_HOME)//project_benches/ +export UVMF_PROJECT_DIR ?= $(PWD)/.. +# +# +# pragma uvmf custom exports end +# ********************************************************************************************* + +## Check PATH for required vinfo scripts +PVAL := $(shell command -v make_filelist.py 2> /dev/null) +ifndef PVAL + MFLIST = $(UVMF_HOME)/scripts/make_filelist.py +else + MFLIST = make_filelist.py +endif + + +# Set test case specific Variables +TEST_NAME ?= test_top + +TEST_SEED ?= random +UVM_CLI_ARGS = + +# Usage of Veloce, etc. to be input by the user (subject to defaults) +USE_VELOCE ?= 0 + +# Usage of vinfo flow for generating file list +USE_VINFO ?= 0 + +# Usage of Veloce and Questa profilers +USE_VELOCE_PROFILER ?= 0 +USE_QUESTA_PROFILER ?= 0 + + +# Set project Variables +TEST_PLAN_NAME = fuse_ctrl_TestPlan +REPORTING_DO_FILE = fuse_ctrl_reports_script + + +# Include makefile that includes targets for UVM_VIP_Library packages +include $(UVMF_HOME)/scripts/Makefile + + + + +# Include all requisite interface package targets for this bench +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/Makefile + +# Include all requisite environment package targets for this bench +include $(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg/Makefile + + + +# Add to default compile/load/run arguments +VCOM_ARGS += + +# Note: vsim-3009 error can be eliminated by adding -timescale 1ps/1ps to VLOG_ARGS + +VLOG_ARGS += $(UVM_DISABLE_FILE_LINE_CMD) + +VELANALYZE_ARGS += +VELANALYZE_HVL_ARGS += + +BATCH_VOPT_ARGS += +DEBUG_VOPT_ARGS += +EXTRA_VOPT_TOPS += +COMMON_VSIM_ARGS += +COMMON_VSIM_ARGS += + + +BATCH_VSIM_ARGS += #-uvmcontrol=none +DEBUG_VSIM_ARGS += +EXTRA_VSIM_TOPS += + +# pragma uvmf custom additional_args begin +# pragma uvmf custom additional_args end + + +# Project bench package source +fuse_ctrl_PARAMETERS_PKG ?=\ +$(UVMF_PROJECT_DIR)/tb/parameters/fuse_ctrl_parameters_pkg.sv + + +fuse_ctrl_SEQUENCES_PKG ?=\ +$(UVMF_PROJECT_DIR)/tb/sequences/fuse_ctrl_sequences_pkg.sv + + +fuse_ctrl_TEST_PKG ?=\ +$(UVMF_PROJECT_DIR)/tb/tests/fuse_ctrl_tests_pkg.sv + +# pragma uvmf custom dut_files begin +# UVMF_CHANGE_ME : Reference Verilog DUT source. +fuse_ctrl_VERILOG_DUT ?=\ +$(UVMF_PROJECT_DIR)/../../../../../integration/rtl/config_defines.svh +$(UVMF_PROJECT_DIR)/../../../../../integration/rtl/caliptra_reg_defines.svh +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_sva.svh +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_macros.svh +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_sram.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/ahb_defines_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_ahb_srom.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/apb_slv_sif.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/ahb_slv_sif.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_icg.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/clk_gate.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_2ff_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/ahb_to_reg_adapter.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/skidbuffer.v +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_util_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_alert_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_subreg_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_mubi_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_cipher_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sparse_fsm_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_otp_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_ram_1p_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../lc_ctrl/rtl/lc_ctrl_reg_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../lc_ctrl/rtl/lc_ctrl_state_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../lc_ctrl/rtl/lc_ctrl_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_flop_en.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_flop.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_buf.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_otp.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_ram_1p.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_and2.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_flop_en.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_cdc_rand_delay.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_flop_2sync.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_lfsr.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_double_lfsr.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_arbiter_fixed.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_arbiter_tree.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_edn_req.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_present.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_lc_sender.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sync_reqack.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sync_reqack_data.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_mubi4_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_diff_decode.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sec_anchor_buf.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_slicer.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_count.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sparse_fsm_flop.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_dom_and_2share.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sec_anchor_flop.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_reg_we_check.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_packer_fifo.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_max_tree.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_subreg_arb.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_subreg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_intr_hw.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_onehot_check.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_mubi8_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_mubi8_sender.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_fifo_sync_cnt.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_buf.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_lc_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_alert_receiver.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_flop.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_alert_sender.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_fifo_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_arbiter_ppc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sum_tree.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_subreg_ext.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_edge_detector.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_blanker.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_ram_1p_adv.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_assert_multiple.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_assert.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/sram2tlul.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_adapter_host.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_adapter_reg.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_adapter_sram.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_cmd_intg_chk.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_cmd_intg_gen.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_data_integ_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_data_integ_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_err_resp.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_err.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_fifo_async.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_fifo_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_lc_gate.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_rsp_intg_chk.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_rsp_intg_gen.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_socket_1n.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_socket_m1.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_sram_byte.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_if.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_addr.v +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_sub_rd.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_sub_wr.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_sub_arb.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_sub.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_22_16_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_22_16_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_28_22_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_28_22_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_39_32_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_39_32_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_64_57_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_64_57_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_72_64_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_72_64_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_22_16_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_22_16_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_39_32_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_39_32_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_72_64_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_72_64_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_76_68_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_76_68_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_22_16_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_22_16_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_28_22_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_28_22_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_39_32_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_39_32_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_64_57_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_64_57_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_72_64_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_72_64_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_22_16_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_22_16_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_39_32_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_39_32_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_72_64_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_72_64_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_76_68_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_76_68_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../axi2tlul/rtl/axi2tlul_cmd_intg_gen.sv +$(UVMF_PROJECT_DIR)/../../../../../axi2tlul/rtl/sub2tlul.sv +$(UVMF_PROJECT_DIR)/../../../../../axi2tlul/rtl/axi2tlul.sv +$(UVMF_PROJECT_DIR)/../../../../../entropy_src/rtl/entropy_src_main_sm_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../entropy_src/rtl/entropy_src_ack_sm_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../entropy_src/rtl/entropy_src_reg_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../entropy_src/rtl/entropy_src_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../edn/rtl/edn_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../ast/rtl/ast_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../pwrmgr/rtl/pwrmgr_reg_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../pwrmgr/rtl/pwrmgr_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_reg_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_part_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_core_reg_top.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_prim_reg_top.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_dai.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_ecc_reg.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_lci.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_lfsr_timer.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_part_buf.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_part_unbuf.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_scrmbl.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_top.sv + + +# UVMF_CHANGE_ME : Reference VHDL DUT source. +fuse_ctrl_VHDL_DUT ?=\ +$(UVMF_PROJECT_DIR)/rtl/vhdl/vhdl_dut.vhd +# pragma uvmf custom dut_files end + + +# Project bench package targets +COMP_fuse_ctrl_PARAMETERS_PKG_TGT_0 = q_comp_fuse_ctrl_parameters_pkg +COMP_fuse_ctrl_PARAMETERS_PKG_TGT_1 = v_comp_fuse_ctrl_parameters_pkg +COMP_fuse_ctrl_PARAMETERS_PKG_TGT = $(COMP_fuse_ctrl_PARAMETERS_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_parameters_pkg: $(COMP_fuse_ctrl_PARAMETERS_PKG_TGT) + +q_comp_fuse_ctrl_parameters_pkg: + $(HVL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/parameters $(fuse_ctrl_PARAMETERS_PKG) + +v_comp_fuse_ctrl_parameters_pkg: q_comp_fuse_ctrl_parameters_pkg + $(HDL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/parameters $(fuse_ctrl_PARAMETERS_PKG) + + +comp_fuse_ctrl_sequence_pkg: + $(HVL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/sequences $(fuse_ctrl_SEQUENCES_PKG) + +comp_fuse_ctrl_tests_pkg: + $(HVL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/tests $(fuse_ctrl_TEST_PKG) + +# pragma uvmf custom dut_compile_make_target begin +# UVMF_CHANGE_ME : Add make target to compile your verilog dut here +comp_fuse_ctrl_verilog_dut: + echo "Compile your verilog DUT here" + $(HDL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/../../../../../libs/rtl $(fuse_ctrl_VERILOG_DUT) + +# UVMF_CHANGE_ME : Add make target to compile your vhdl dut here +comp_fuse_ctrl_vhdl_dut: + echo "Compile your vhdl DUT here" + $(HDL_COMP_CMD_VHDL) $(fuse_ctrl_VHDL_DUT) + +# UVMF_CHANGE_ME : Add make target to compile your dut here +comp_fuse_ctrl_dut: comp_fuse_ctrl_vhdl_dut comp_fuse_ctrl_verilog_dut +# pragma uvmf custom dut_compile_make_target end + + +BUILD_TGT_0 = make_build +BUILD_TGT_1 = vinfo_build +BUILD_TGT = $(BUILD_TGT_$(USE_VINFO)) + + +comp_hvl : comp_hvl_core + + +comp_hvl_core : \ + comp_fuse_ctrl_rst_pkg comp_fuse_ctrl_core_axi_write_in_pkg comp_fuse_ctrl_core_axi_write_out_pkg comp_fuse_ctrl_prim_axi_write_in_pkg comp_fuse_ctrl_prim_axi_write_out_pkg comp_fuse_ctrl_core_axi_read_in_pkg comp_fuse_ctrl_core_axi_read_out_pkg comp_fuse_ctrl_prim_axi_read_in_pkg comp_fuse_ctrl_prim_axi_read_out_pkg comp_fuse_ctrl_secreg_axi_read_in_pkg comp_fuse_ctrl_secreg_axi_read_out_pkg comp_fuse_ctrl_lc_otp_in_pkg comp_fuse_ctrl_lc_otp_out_pkg comp_fuse_ctrl_in_pkg comp_fuse_ctrl_out_pkg \ + comp_fuse_ctrl_env_pkg \ + comp_fuse_ctrl_parameters_pkg comp_fuse_ctrl_sequence_pkg comp_fuse_ctrl_tests_pkg + +comp_uvmf_core : comp_uvm_pkg comp_uvmf_base_pkg + +make_build: comp_fuse_ctrl_dut comp_uvmf_core comp_hvl comp_test_bench + +hvl_build: q_comp_fuse_ctrl_rst_pkg q_comp_fuse_ctrl_core_axi_write_in_pkg q_comp_fuse_ctrl_core_axi_write_out_pkg q_comp_fuse_ctrl_prim_axi_write_in_pkg q_comp_fuse_ctrl_prim_axi_write_out_pkg q_comp_fuse_ctrl_core_axi_read_in_pkg q_comp_fuse_ctrl_core_axi_read_out_pkg q_comp_fuse_ctrl_prim_axi_read_in_pkg q_comp_fuse_ctrl_prim_axi_read_out_pkg q_comp_fuse_ctrl_secreg_axi_read_in_pkg q_comp_fuse_ctrl_secreg_axi_read_out_pkg q_comp_fuse_ctrl_lc_otp_in_pkg q_comp_fuse_ctrl_lc_otp_out_pkg q_comp_fuse_ctrl_in_pkg q_comp_fuse_ctrl_out_pkg comp_fuse_ctrl_env_pkg comp_fuse_ctrl_sequence_pkg comp_fuse_ctrl_tests_pkg hvl_comp_testbench link optimize + + +vinfo_build: comp_fuse_ctrl_vhdl_dut build_hdl_vinfo build_hvl_vinfo $(VINFO_TGT) + + $(HDL_COMP_CMD) -F hdl.vf + $(VEL_COMP) + +build: $(BUILD_TGT) + +# pragma uvmf custom additional_targets begin +# pragma uvmf custom additional_targets end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/bcr_testlist b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/bcr_testlist new file mode 100644 index 000000000..4df4567ee --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/bcr_testlist @@ -0,0 +1,19 @@ + + + +# Test list for use by RMDB file +# File syntax is +# TB_INFO { } { } +# TB ## All subsequent tests will run on this bench until a different "TB" line is seen +# TEST <1st_seed> ... +# If not enough seeds are provided then random seeds are used to pad +# If no repeat count is given, default is 1 +# pragma uvmf custom tb_info begin +TB_INFO fuse_ctrl { } { } +# pragma uvmf custom tb_info end +TB fuse_ctrl +# pragma uvmf custom regression_suite begin +TEST test_top 3 +# pragma uvmf custom regression_suite end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/bcr_testlist.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/bcr_testlist.yaml new file mode 100644 index 000000000..65b6be08a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/bcr_testlist.yaml @@ -0,0 +1,44 @@ + + + +# YAML test list for use by RMDB file +# File syntax is +# uvmf_testlist: +# testbenches: +# - name: +# extra_build_options: +# extra_run_options: +# - name: +# ... +# - name: +# tests: +# - name: +# uvm_testname: (defaults to test_name) +# testbench: (defaults to last tb name seen) +# repeat: (defaults to 1) +# seeds: [,,...,] (defaults to all random) +# extra_test_options: +# - name: +# ... +# - name: +# include: +# - (relative path reference is to the including YAML file) +# - +# ... +# - + +uvmf_testlist: + testbenches: +# pragma uvmf custom tb_info begin + - name: fuse_ctrl + extra_build_options: "" + extra_run_options: "" +# pragma uvmf custom tb_info end + tests: + - testbench: fuse_ctrl +# pragma uvmf custom regression_suite begin + - name: test_top + repeat: 3 +# pragma uvmf custom regression_suite end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/compile.do new file mode 100644 index 000000000..b34a09034 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/compile.do @@ -0,0 +1,84 @@ + + +################################################################## +## ENVIRONMENT VARIABLES +################################################################## +quietly set ::env(UVMF_VIP_LIBRARY_HOME) ../../../verification_ip +quietly set ::env(UVMF_PROJECT_DIR) .. + +## Using VRM means that the build is occuring several more directories deeper underneath +## the sim directory, need to prepend some more '..' +if {[info exists ::env(VRM_BUILD)]} { + quietly set ::env(UVMF_VIP_LIBRARY_HOME) "../../../../../$::env(UVMF_VIP_LIBRARY_HOME)" + quietly set ::env(UVMF_PROJECT_DIR) "../../../../../$::env(UVMF_PROJECT_DIR)" +} +quietly set ::env(UVMF_VIP_LIBRARY_HOME) [file normalize $::env(UVMF_VIP_LIBRARY_HOME)] +quietly set ::env(UVMF_PROJECT_DIR) [file normalize $::env(UVMF_PROJECT_DIR)] +quietly echo "UVMF_VIP_LIBRARY_HOME = $::env(UVMF_VIP_LIBRARY_HOME)" +quietly echo "UVMF_PROJECT_DIR = $::env(UVMF_PROJECT_DIR)" + + +################################################################### +## HOUSEKEEPING : DELETE FILES THAT WILL BE REGENERATED +################################################################### +file delete -force *~ *.ucdb vsim.dbg *.vstf *.log work *.mem *.transcript.txt certe_dump.xml *.wlf covhtmlreport VRMDATA +file delete -force design.bin qwave.db dpiheader.h visualizer*.ses +file delete -force veloce.med veloce.wave veloce.map tbxbindings.h edsenv velrunopts.ini +file delete -force sv_connect.* + +################################################################### +## COMPILE DUT SOURCE CODE +################################################################### +vlib work +# pragma uvmf custom dut_compile_dofile_target begin +# UVMF_CHANGE_ME : Add commands to compile your dut here, replacing the default examples +#vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/rtl/verilog/verilog_dut.v +#vcom $env(UVMF_PROJECT_DIR)/rtl/vhdl/vhdl_dut.vhd +# pragma uvmf custom dut_compile_dofile_target end + +################################################################### +## COMPILE UVMF BASE/COMMON SOURCE CODE +################################################################### +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_HOME)/uvmf_base_pkg -F $env(UVMF_HOME)/uvmf_base_pkg/uvmf_base_pkg_filelist_hdl.f +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_HOME)/uvmf_base_pkg -F $env(UVMF_HOME)/uvmf_base_pkg/uvmf_base_pkg_filelist_hvl.f + + +################################################################### +## UVMF INTERFACE COMPILATION +################################################################### +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/compile.do + +################################################################### +## UVMF ENVIRONMENT COMPILATION +################################################################### +do $env(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg/compile.do + +################################################################### +## UVMF BENCHES COMPILATION +################################################################### +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/parameters $env(UVMF_PROJECT_DIR)/tb/parameters/fuse_ctrl_parameters_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/sequences $env(UVMF_PROJECT_DIR)/tb/sequences/fuse_ctrl_sequences_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/tests $env(UVMF_PROJECT_DIR)/tb/tests/fuse_ctrl_tests_pkg.sv + +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/testbench -F $env(UVMF_PROJECT_DIR)/tb/testbench/top_filelist_hdl.f +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/testbench -F $env(UVMF_PROJECT_DIR)/tb/testbench/top_filelist_hvl.f + +################################################################### +## OPTIMIZATION +################################################################### +vopt hvl_top hdl_top -o optimized_batch_top_tb +vopt +acc hvl_top hdl_top -o optimized_debug_top_tb diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/hdl.compile new file mode 100644 index 000000000..8e7bd41ac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/hdl.compile @@ -0,0 +1,5 @@ +needs: +# pragma uvmf custom dut_compile_info begin + - ../rtl/dut.compile +# pragma uvmf custom dut_compile_info end + - ../tb/testbench/hdl_top.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/hdl.vinfo new file mode 100644 index 000000000..da27ec773 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/hdl.vinfo @@ -0,0 +1 @@ +@use $UVMF_PROJECT_DIR/tb/testbench/hdl_top.vinfo diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/hvl.compile new file mode 100644 index 000000000..ce9525496 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/hvl.compile @@ -0,0 +1,2 @@ +needs: + - ../tb/testbench/hvl_top.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/hvl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/hvl.vinfo new file mode 100644 index 000000000..d22eff338 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/hvl.vinfo @@ -0,0 +1 @@ +@use $UVMF_PROJECT_DIR/tb/testbench/hvl_top.vinfo diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/run.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/run.do new file mode 100644 index 000000000..101ddc486 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/run.do @@ -0,0 +1,21 @@ + + +quietly set svLibs "" +quietly set extra_vsim_args "" + +################################################################### +## Check for additional vsim arguments passed using env var $UVMF_EXTRA_VSIM_ARGS +################################################################### +if {[info exists ::env(UVMF_EXTRA_VSIM_ARGS)]} { + echo "Adding more args to vsim command" + quietly set extra_vsim_args $::env(UVMF_EXTRA_VSIM_ARGS) +} + +################################################################## +## Launch Questa : generate vsim command line and execute +################################################################## +# pragma uvmf custom dut_run_dofile_target begin +# UVMF_CHANGE_ME : Change the UVM_TESTNAME plusarg to run a different test +quietly set cmd [format "vsim -i -sv_seed random +UVM_TESTNAME=test_top +UVM_VERBOSITY=UVM_HIGH -permit_unmatched_virtual_intf +notimingchecks -suppress 8887 %s %s -uvmcontrol=all -msgmode both -classdebug -assertdebug +uvm_set_config_int=*,enable_transaction_viewing,1 -do { set NoQuitOnFinish 1; onbreak {resume}; run 0; do wave.do; set PrefSource(OpenOnBreak) 0; radix hex showbase; } optimized_debug_top_tb" $svLibs $extra_vsim_args] +# pragma uvmf custom dut_run_dofile_target end +eval $cmd diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/tbx.config b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/tbx.config new file mode 100644 index 000000000..eec58168c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/tbx.config @@ -0,0 +1,10 @@ + + + + + +comp -questa +velsyn -D1S +rtlc -allow_4ST + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/testlist b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/testlist new file mode 100644 index 000000000..0c6229764 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/testlist @@ -0,0 +1,20 @@ + + + + +# Test list for use by RMDB file +# File syntax is +# TB_INFO { } { } +# TB ## All subsequent tests will run on this bench until a different "TB" line is seen +# TEST <1st_seed> ... +# If not enough seeds are provided then random seeds are used to pad +# If no repeat count is given, default is 1 +# pragma uvmf custom tb_info begin +TB_INFO fuse_ctrl { UVMF_VIP_LIBRARY_HOME=../../../../../../../../verification_ip UVMF_PROJECT_DIR=../../../../../../../fuse_ctrl } { } +# pragma uvmf custom tb_info end +TB fuse_ctrl +# pragma uvmf custom regression_suite begin +TEST test_top 3 +# pragma uvmf custom regression_suite end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/testlist.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/testlist.yaml new file mode 100644 index 000000000..6236cc790 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/testlist.yaml @@ -0,0 +1,44 @@ + + + +# YAML test list for use by RMDB file +# File syntax is +# uvmf_testlist: +# testbenches: +# - name: +# extra_build_options: +# extra_run_options: +# - name: +# ... +# - name: +# tests: +# - name: +# uvm_testname: (defaults to test_name) +# testbench: (defaults to last tb name seen) +# repeat: (defaults to 1) +# seeds: [,,...,] (defaults to all random) +# extra_test_options: +# - name: +# ... +# - name: +# include: +# - (relative path reference is to the including YAML file) +# - +# ... +# - + +uvmf_testlist: + testbenches: +# pragma uvmf custom tb_info begin + - name: fuse_ctrl + extra_build_options: "UVMF_VIP_LIBRARY_HOME=../../../../../../../../verification_ip UVMF_PROJECT_DIR=../../../../../../../fuse_ctrl" + extra_run_options: "" +# pragma uvmf custom tb_info end + tests: + - testbench: fuse_ctrl +# pragma uvmf custom regression_suite begin + - name: test_top + repeat: 3 +# pragma uvmf custom regression_suite end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/top.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/top.compile new file mode 100644 index 000000000..efd51c07e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/top.compile @@ -0,0 +1,3 @@ +needs: + - hvl.compile + - hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/veloce.config b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/veloce.config new file mode 100644 index 000000000..d09751555 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/veloce.config @@ -0,0 +1,26 @@ + + + + + +# pragma uvmf custom additional begin +comp -num_boards 1 +comp -hvl questa +# Please choose the correct emulator type code for +# comp -platform command or else velcomp will fail +# Available types are: +# - Veloce2 Quattro: D2 +# - Veloce2 Maximus: D2M +# - Veloce Strato TiL, Ti, and Mi: Strato +# - Veloce Strato M and Strato T: StratoM +# - comp -platform +comp -platform Strato + +rtlc -enable_tbx_pragma_checks +rtlc -allow_4ST +rtlc -allow_MDR +rtlc -compile_display +rtlc -xwave_siglist xwaves.sigs +# pragma uvmf custom additional end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/viswave.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/viswave.do new file mode 100644 index 000000000..81298c032 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/viswave.do @@ -0,0 +1,100 @@ + + +onerror resume +wave tags F0 +wave update off + +wave spacer -backgroundcolor Salmon { fuse_ctrl_rst_agent } +wave add uvm_test_top.environment.fuse_ctrl_rst_agent.fuse_ctrl_rst_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_rst_agent_bus +wave add -group fuse_ctrl_rst_agent_bus hdl_top.fuse_ctrl_rst_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_rst_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_core_axi_write_in_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_core_axi_write_in_if_agent.fuse_ctrl_core_axi_write_in_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_core_axi_write_in_if_agent_bus +wave add -group fuse_ctrl_core_axi_write_in_if_agent_bus hdl_top.fuse_ctrl_core_axi_write_in_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_core_axi_write_in_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_core_axi_write_out_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_core_axi_write_out_if_agent.fuse_ctrl_core_axi_write_out_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_core_axi_write_out_if_agent_bus +wave add -group fuse_ctrl_core_axi_write_out_if_agent_bus hdl_top.fuse_ctrl_core_axi_write_out_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_core_axi_write_out_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_prim_axi_write_in_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_prim_axi_write_in_if_agent.fuse_ctrl_prim_axi_write_in_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_prim_axi_write_in_if_agent_bus +wave add -group fuse_ctrl_prim_axi_write_in_if_agent_bus hdl_top.fuse_ctrl_prim_axi_write_in_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_prim_axi_write_in_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_prim_axi_write_out_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_prim_axi_write_out_if_agent.fuse_ctrl_prim_axi_write_out_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_prim_axi_write_out_if_agent_bus +wave add -group fuse_ctrl_prim_axi_write_out_if_agent_bus hdl_top.fuse_ctrl_prim_axi_write_out_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_prim_axi_write_out_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_core_axi_read_in_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_core_axi_read_in_if_agent.fuse_ctrl_core_axi_read_in_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_core_axi_read_in_if_agent_bus +wave add -group fuse_ctrl_core_axi_read_in_if_agent_bus hdl_top.fuse_ctrl_core_axi_read_in_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_core_axi_read_in_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_core_axi_read_out_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_core_axi_read_out_if_agent.fuse_ctrl_core_axi_read_out_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_core_axi_read_out_if_agent_bus +wave add -group fuse_ctrl_core_axi_read_out_if_agent_bus hdl_top.fuse_ctrl_core_axi_read_out_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_core_axi_read_out_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_prim_axi_read_in_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_prim_axi_read_in_if_agent.fuse_ctrl_prim_axi_read_in_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_prim_axi_read_in_if_agent_bus +wave add -group fuse_ctrl_prim_axi_read_in_if_agent_bus hdl_top.fuse_ctrl_prim_axi_read_in_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_prim_axi_read_in_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_prim_axi_read_out_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_prim_axi_read_out_if_agent.fuse_ctrl_prim_axi_read_out_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_prim_axi_read_out_if_agent_bus +wave add -group fuse_ctrl_prim_axi_read_out_if_agent_bus hdl_top.fuse_ctrl_prim_axi_read_out_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_prim_axi_read_out_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_secreg_axi_read_in_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_secreg_axi_read_in_if_agent.fuse_ctrl_secreg_axi_read_in_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_secreg_axi_read_in_if_agent_bus +wave add -group fuse_ctrl_secreg_axi_read_in_if_agent_bus hdl_top.fuse_ctrl_secreg_axi_read_in_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_secreg_axi_read_in_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_secreg_axi_read_out_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_secreg_axi_read_out_if_agent.fuse_ctrl_secreg_axi_read_out_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_secreg_axi_read_out_if_agent_bus +wave add -group fuse_ctrl_secreg_axi_read_out_if_agent_bus hdl_top.fuse_ctrl_secreg_axi_read_out_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_secreg_axi_read_out_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_lc_otp_in_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_lc_otp_in_if_agent.fuse_ctrl_lc_otp_in_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_lc_otp_in_if_agent_bus +wave add -group fuse_ctrl_lc_otp_in_if_agent_bus hdl_top.fuse_ctrl_lc_otp_in_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_lc_otp_in_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_lc_otp_out_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_lc_otp_out_if_agent.fuse_ctrl_lc_otp_out_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_lc_otp_out_if_agent_bus +wave add -group fuse_ctrl_lc_otp_out_if_agent_bus hdl_top.fuse_ctrl_lc_otp_out_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_lc_otp_out_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_in_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_in_if_agent.fuse_ctrl_in_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_in_if_agent_bus +wave add -group fuse_ctrl_in_if_agent_bus hdl_top.fuse_ctrl_in_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_in_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_out_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_out_if_agent.fuse_ctrl_out_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_out_if_agent_bus +wave add -group fuse_ctrl_out_if_agent_bus hdl_top.fuse_ctrl_out_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_out_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] + +wave update on +WaveSetStreamView + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/wave.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/wave.do new file mode 100644 index 000000000..099f950d6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/wave.do @@ -0,0 +1,69 @@ + + +onerror {resume} +quietly WaveActivateNextPane {} 0 + +add wave -noupdate -divider fuse_ctrl_rst_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_rst_agent/fuse_ctrl_rst_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_rst_agent_bus /hdl_top/fuse_ctrl_rst_agent_bus/* +add wave -noupdate -divider fuse_ctrl_core_axi_write_in_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_core_axi_write_in_if_agent/fuse_ctrl_core_axi_write_in_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_core_axi_write_in_if_agent_bus /hdl_top/fuse_ctrl_core_axi_write_in_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_core_axi_write_out_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_core_axi_write_out_if_agent/fuse_ctrl_core_axi_write_out_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_core_axi_write_out_if_agent_bus /hdl_top/fuse_ctrl_core_axi_write_out_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_prim_axi_write_in_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_prim_axi_write_in_if_agent/fuse_ctrl_prim_axi_write_in_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_prim_axi_write_in_if_agent_bus /hdl_top/fuse_ctrl_prim_axi_write_in_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_prim_axi_write_out_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_prim_axi_write_out_if_agent/fuse_ctrl_prim_axi_write_out_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_prim_axi_write_out_if_agent_bus /hdl_top/fuse_ctrl_prim_axi_write_out_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_core_axi_read_in_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_core_axi_read_in_if_agent/fuse_ctrl_core_axi_read_in_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_core_axi_read_in_if_agent_bus /hdl_top/fuse_ctrl_core_axi_read_in_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_core_axi_read_out_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_core_axi_read_out_if_agent/fuse_ctrl_core_axi_read_out_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_core_axi_read_out_if_agent_bus /hdl_top/fuse_ctrl_core_axi_read_out_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_prim_axi_read_in_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_prim_axi_read_in_if_agent/fuse_ctrl_prim_axi_read_in_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_prim_axi_read_in_if_agent_bus /hdl_top/fuse_ctrl_prim_axi_read_in_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_prim_axi_read_out_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_prim_axi_read_out_if_agent/fuse_ctrl_prim_axi_read_out_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_prim_axi_read_out_if_agent_bus /hdl_top/fuse_ctrl_prim_axi_read_out_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_secreg_axi_read_in_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_secreg_axi_read_in_if_agent/fuse_ctrl_secreg_axi_read_in_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_secreg_axi_read_in_if_agent_bus /hdl_top/fuse_ctrl_secreg_axi_read_in_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_secreg_axi_read_out_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_secreg_axi_read_out_if_agent/fuse_ctrl_secreg_axi_read_out_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_secreg_axi_read_out_if_agent_bus /hdl_top/fuse_ctrl_secreg_axi_read_out_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_lc_otp_in_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_lc_otp_in_if_agent/fuse_ctrl_lc_otp_in_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_lc_otp_in_if_agent_bus /hdl_top/fuse_ctrl_lc_otp_in_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_lc_otp_out_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_lc_otp_out_if_agent/fuse_ctrl_lc_otp_out_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_lc_otp_out_if_agent_bus /hdl_top/fuse_ctrl_lc_otp_out_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_in_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_in_if_agent/fuse_ctrl_in_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_in_if_agent_bus /hdl_top/fuse_ctrl_in_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_out_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_out_if_agent/fuse_ctrl_out_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_out_if_agent_bus /hdl_top/fuse_ctrl_out_if_agent_bus/* + +TreeUpdate [SetDefaultTree] +quietly wave cursor active 0 +configure wave -namecolwidth 472 +configure wave -valuecolwidth 100 +configure wave -justifyvalue left +configure wave -signalnamewidth 0 +configure wave -snapdistance 10 +configure wave -datasetprefix 0 +configure wave -rowmargin 4 +configure wave -childrowmargin 2 +configure wave -gridoffset 0 +configure wave -gridperiod 1 +configure wave -griddelta 40 +configure wave -timeline 0 +configure wave -timelineunits ns +update +WaveRestoreZoom {27 ns} {168 ns} + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/xwaves.sigs b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/xwaves.sigs new file mode 100644 index 000000000..d75f0a575 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/sim/xwaves.sigs @@ -0,0 +1,17 @@ + + + + + +# pragma uvmf custom additional begin + +Group All + +#Top level signals +hdl_top.* +#Add additional levels or individual signals as needed +hdl_top.*.* + +# pragma uvmf custom additional end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.compile new file mode 100644 index 000000000..0c6b841a5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.compile @@ -0,0 +1,4 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +src: + - fuse_ctrl_parameters_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.sv new file mode 100644 index 000000000..e1bc7742d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.sv @@ -0,0 +1,65 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This package contains test level parameters +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +package fuse_ctrl_parameters_pkg; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + + // These parameters are used to uniquely identify each interface. The monitor_bfm and + // driver_bfm are placed into and retrieved from the uvm_config_db using these string + // names as the field_name. The parameter is also used to enable transaction viewing + // from the command line for selected interfaces using the UVM command line processing. + parameter string fuse_ctrl_rst_agent_BFM = "fuse_ctrl_rst_agent_BFM"; /* [0] */ + parameter string fuse_ctrl_core_axi_write_in_if_agent_BFM = "fuse_ctrl_core_axi_write_in_if_agent_BFM"; /* [1] */ + parameter string fuse_ctrl_core_axi_write_out_if_agent_BFM = "fuse_ctrl_core_axi_write_out_if_agent_BFM"; /* [2] */ + parameter string fuse_ctrl_prim_axi_write_in_if_agent_BFM = "fuse_ctrl_prim_axi_write_in_if_agent_BFM"; /* [3] */ + parameter string fuse_ctrl_prim_axi_write_out_if_agent_BFM = "fuse_ctrl_prim_axi_write_out_if_agent_BFM"; /* [4] */ + parameter string fuse_ctrl_core_axi_read_in_if_agent_BFM = "fuse_ctrl_core_axi_read_in_if_agent_BFM"; /* [5] */ + parameter string fuse_ctrl_core_axi_read_out_if_agent_BFM = "fuse_ctrl_core_axi_read_out_if_agent_BFM"; /* [6] */ + parameter string fuse_ctrl_prim_axi_read_in_if_agent_BFM = "fuse_ctrl_prim_axi_read_in_if_agent_BFM"; /* [7] */ + parameter string fuse_ctrl_prim_axi_read_out_if_agent_BFM = "fuse_ctrl_prim_axi_read_out_if_agent_BFM"; /* [8] */ + parameter string fuse_ctrl_secreg_axi_read_in_if_agent_BFM = "fuse_ctrl_secreg_axi_read_in_if_agent_BFM"; /* [9] */ + parameter string fuse_ctrl_secreg_axi_read_out_if_agent_BFM = "fuse_ctrl_secreg_axi_read_out_if_agent_BFM"; /* [10] */ + parameter string fuse_ctrl_lc_otp_in_if_agent_BFM = "fuse_ctrl_lc_otp_in_if_agent_BFM"; /* [11] */ + parameter string fuse_ctrl_lc_otp_out_if_agent_BFM = "fuse_ctrl_lc_otp_out_if_agent_BFM"; /* [12] */ + parameter string fuse_ctrl_in_if_agent_BFM = "fuse_ctrl_in_if_agent_BFM"; /* [13] */ + parameter string fuse_ctrl_out_if_agent_BFM = "fuse_ctrl_out_if_agent_BFM"; /* [14] */ + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.vinfo new file mode 100644 index 000000000..3bd4d7f9b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_parameters_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.compile new file mode 100644 index 000000000..307646d01 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.compile @@ -0,0 +1,21 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile + - ../../../../verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile + - ../parameters/fuse_ctrl_parameters_pkg.compile +src: + - fuse_ctrl_sequences_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.sv new file mode 100644 index 000000000..0ead72393 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This package includes all high level sequence classes used +// in the environment. These include utility sequences and top +// level sequences. +// +// CONTAINS: +// - +// - +// +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +// + +package fuse_ctrl_sequences_pkg; + import uvm_pkg::*; + import uvmf_base_pkg::*; + import fuse_ctrl_rst_pkg::*; + import fuse_ctrl_rst_pkg_hdl::*; + import fuse_ctrl_core_axi_write_in_pkg::*; + import fuse_ctrl_core_axi_write_in_pkg_hdl::*; + import fuse_ctrl_core_axi_write_out_pkg::*; + import fuse_ctrl_core_axi_write_out_pkg_hdl::*; + import fuse_ctrl_prim_axi_write_in_pkg::*; + import fuse_ctrl_prim_axi_write_in_pkg_hdl::*; + import fuse_ctrl_prim_axi_write_out_pkg::*; + import fuse_ctrl_prim_axi_write_out_pkg_hdl::*; + import fuse_ctrl_core_axi_read_in_pkg::*; + import fuse_ctrl_core_axi_read_in_pkg_hdl::*; + import fuse_ctrl_core_axi_read_out_pkg::*; + import fuse_ctrl_core_axi_read_out_pkg_hdl::*; + import fuse_ctrl_prim_axi_read_in_pkg::*; + import fuse_ctrl_prim_axi_read_in_pkg_hdl::*; + import fuse_ctrl_prim_axi_read_out_pkg::*; + import fuse_ctrl_prim_axi_read_out_pkg_hdl::*; + import fuse_ctrl_secreg_axi_read_in_pkg::*; + import fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; + import fuse_ctrl_secreg_axi_read_out_pkg::*; + import fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; + import fuse_ctrl_lc_otp_in_pkg::*; + import fuse_ctrl_lc_otp_in_pkg_hdl::*; + import fuse_ctrl_lc_otp_out_pkg::*; + import fuse_ctrl_lc_otp_out_pkg_hdl::*; + import fuse_ctrl_in_pkg::*; + import fuse_ctrl_in_pkg_hdl::*; + import fuse_ctrl_out_pkg::*; + import fuse_ctrl_out_pkg_hdl::*; + import fuse_ctrl_parameters_pkg::*; + import fuse_ctrl_env_pkg::*; + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + `include "src/fuse_ctrl_bench_sequence_base.svh" + `include "src/register_test_sequence.svh" + `include "src/example_derived_test_sequence.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the sequence package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.vinfo new file mode 100644 index 000000000..10f1cf16e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.vinfo @@ -0,0 +1,20 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo +@use $UVMF_PROJECT_DIR/tb/parameters/fuse_ctrl_parameters_pkg.vinfo ++incdir+@vinfodir +fuse_ctrl_sequences_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/sequences/src/example_derived_test_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/sequences/src/example_derived_test_sequence.svh new file mode 100644 index 000000000..7566dc511 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/sequences/src/example_derived_test_sequence.svh @@ -0,0 +1,44 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains the top level sequence used in example_derived_test. +// It is an example of a sequence that is extended from %(benchName)_bench_sequence_base +// and can override %(benchName)_bench_sequence_base. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class example_derived_test_sequence extends fuse_ctrl_bench_sequence_base; + + `uvm_object_utils( example_derived_test_sequence ); + + function new(string name = "" ); + super.new(name); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/sequences/src/fuse_ctrl_bench_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/sequences/src/fuse_ctrl_bench_sequence_base.svh new file mode 100644 index 000000000..0f56a687c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/sequences/src/fuse_ctrl_bench_sequence_base.svh @@ -0,0 +1,229 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// Description: This file contains the top level and utility sequences +// used by test_top. It can be extended to create derivative top +// level sequences. +// +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +// + + +typedef fuse_ctrl_env_configuration fuse_ctrl_env_configuration_t; + +class fuse_ctrl_bench_sequence_base extends uvmf_sequence_base #(uvm_sequence_item); + + `uvm_object_utils( fuse_ctrl_bench_sequence_base ); + + // pragma uvmf custom sequences begin + +typedef fuse_ctrl_env_sequence_base #( + .CONFIG_T(fuse_ctrl_env_configuration_t) + ) + fuse_ctrl_env_sequence_base_t; +rand fuse_ctrl_env_sequence_base_t fuse_ctrl_env_seq; + + + + // UVMF_CHANGE_ME : Instantiate, construct, and start sequences as needed to create stimulus scenarios. + // Instantiate sequences here + typedef fuse_ctrl_rst_random_sequence fuse_ctrl_rst_agent_random_seq_t; + fuse_ctrl_rst_agent_random_seq_t fuse_ctrl_rst_agent_random_seq; + typedef fuse_ctrl_core_axi_write_if_random_sequence fuse_ctrl_core_axi_write_agent_random_seq_t; + fuse_ctrl_core_axi_write_agent_random_seq_t fuse_ctrl_core_axi_write_agent_random_seq; + typedef fuse_ctrl_prim_axi_write_if_random_sequence fuse_ctrl_prim_axi_write_agent_random_seq_t; + fuse_ctrl_prim_axi_write_agent_random_seq_t fuse_ctrl_prim_axi_write_agent_random_seq; + typedef fuse_ctrl_core_axi_read_if_random_sequence fuse_ctrl_core_axi_read_agent_random_seq_t; + fuse_ctrl_core_axi_read_agent_random_seq_t fuse_ctrl_core_axi_read_agent_random_seq; + typedef fuse_ctrl_prim_axi_read_if_random_sequence fuse_ctrl_prim_axi_read_agent_random_seq_t; + fuse_ctrl_prim_axi_read_agent_random_seq_t fuse_ctrl_prim_axi_read_agent_random_seq; + typedef fuse_ctrl_secreg_axi_read_if_random_sequence fuse_ctrl_secreg_axi_read_agent_random_seq_t; + fuse_ctrl_secreg_axi_read_agent_random_seq_t fuse_ctrl_secreg_axi_read_agent_random_seq; + typedef fuse_ctrl_lc_otp_if_random_sequence fuse_ctrl_lc_otp_if_agent_random_seq_t; + fuse_ctrl_lc_otp_if_agent_random_seq_t fuse_ctrl_lc_otp_if_agent_random_seq; + // pragma uvmf custom sequences end + + // Sequencer handles for each active interface in the environment + typedef fuse_ctrl_rst_transaction fuse_ctrl_rst_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_rst_agent_transaction_t) fuse_ctrl_rst_agent_sequencer; + typedef fuse_ctrl_core_axi_write_in_transaction fuse_ctrl_core_axi_write_in_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_core_axi_write_in_if_agent_transaction_t) fuse_ctrl_core_axi_write_in_if_agent_sequencer; + typedef fuse_ctrl_prim_axi_write_in_transaction fuse_ctrl_prim_axi_write_in_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_prim_axi_write_in_if_agent_transaction_t) fuse_ctrl_prim_axi_write_in_if_agent_sequencer; + typedef fuse_ctrl_core_axi_read_in_transaction fuse_ctrl_core_axi_read_in_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_core_axi_read_in_if_agent_transaction_t) fuse_ctrl_core_axi_read_in_if_agent_sequencer; + typedef fuse_ctrl_prim_axi_read_in_transaction fuse_ctrl_prim_axi_read_in_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_prim_axi_read_in_if_agent_transaction_t) fuse_ctrl_prim_axi_read_in_if_agent_sequencer; + typedef fuse_ctrl_secreg_axi_read_in_transaction fuse_ctrl_secreg_axi_read_in_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_secreg_axi_read_in_if_agent_transaction_t) fuse_ctrl_secreg_axi_read_in_if_agent_sequencer; + typedef fuse_ctrl_lc_otp_in_transaction fuse_ctrl_lc_otp_in_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_lc_otp_in_if_agent_transaction_t) fuse_ctrl_lc_otp_in_if_agent_sequencer; + typedef fuse_ctrl_in_transaction fuse_ctrl_in_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_in_if_agent_transaction_t) fuse_ctrl_in_if_agent_sequencer; + + + // Top level environment configuration handle + fuse_ctrl_env_configuration_t top_configuration; + + // Configuration handles to access interface BFM's + fuse_ctrl_rst_configuration fuse_ctrl_rst_agent_config; + fuse_ctrl_core_axi_write_in_configuration fuse_ctrl_core_axi_write_in_if_agent_config; + fuse_ctrl_core_axi_write_out_configuration fuse_ctrl_core_axi_write_out_if_agent_config; + fuse_ctrl_prim_axi_write_in_configuration fuse_ctrl_prim_axi_write_in_if_agent_config; + fuse_ctrl_prim_axi_write_out_configuration fuse_ctrl_prim_axi_write_out_if_agent_config; + fuse_ctrl_core_axi_read_in_configuration fuse_ctrl_core_axi_read_in_if_agent_config; + fuse_ctrl_core_axi_read_out_configuration fuse_ctrl_core_axi_read_out_if_agent_config; + fuse_ctrl_prim_axi_read_in_configuration fuse_ctrl_prim_axi_read_in_if_agent_config; + fuse_ctrl_prim_axi_read_out_configuration fuse_ctrl_prim_axi_read_out_if_agent_config; + fuse_ctrl_secreg_axi_read_in_configuration fuse_ctrl_secreg_axi_read_in_if_agent_config; + fuse_ctrl_secreg_axi_read_out_configuration fuse_ctrl_secreg_axi_read_out_if_agent_config; + fuse_ctrl_lc_otp_in_configuration fuse_ctrl_lc_otp_in_if_agent_config; + fuse_ctrl_lc_otp_out_configuration fuse_ctrl_lc_otp_out_if_agent_config; + fuse_ctrl_in_configuration fuse_ctrl_in_if_agent_config; + fuse_ctrl_out_configuration fuse_ctrl_out_if_agent_config; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + function new( string name = "" ); + super.new( name ); + // Retrieve the configuration handles from the uvm_config_db + + // Retrieve top level configuration handle + if ( !uvm_config_db#(fuse_ctrl_env_configuration_t)::get(null,UVMF_CONFIGURATIONS, "TOP_ENV_CONFIG",top_configuration) ) begin + `uvm_info("CFG", "*** FATAL *** uvm_config_db::get can not find TOP_ENV_CONFIG. Are you using an older UVMF release than what was used to generate this bench?",UVM_NONE); + `uvm_fatal("CFG", "uvm_config_db#(fuse_ctrl_env_configuration_t)::get cannot find resource TOP_ENV_CONFIG"); + end + + // Retrieve config handles for all agents + if( !uvm_config_db #( fuse_ctrl_rst_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_rst_agent_BFM , fuse_ctrl_rst_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_rst_configuration )::get cannot find resource fuse_ctrl_rst_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_core_axi_write_in_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_core_axi_write_in_if_agent_BFM , fuse_ctrl_core_axi_write_in_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_core_axi_write_in_configuration )::get cannot find resource fuse_ctrl_core_axi_write_in_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_core_axi_write_out_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_core_axi_write_out_if_agent_BFM , fuse_ctrl_core_axi_write_out_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_core_axi_write_out_configuration )::get cannot find resource fuse_ctrl_core_axi_write_out_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_prim_axi_write_in_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_prim_axi_write_in_if_agent_BFM , fuse_ctrl_prim_axi_write_in_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_prim_axi_write_in_configuration )::get cannot find resource fuse_ctrl_prim_axi_write_in_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_prim_axi_write_out_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_prim_axi_write_out_if_agent_BFM , fuse_ctrl_prim_axi_write_out_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_prim_axi_write_out_configuration )::get cannot find resource fuse_ctrl_prim_axi_write_out_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_core_axi_read_in_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_core_axi_read_in_if_agent_BFM , fuse_ctrl_core_axi_read_in_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_core_axi_read_in_configuration )::get cannot find resource fuse_ctrl_core_axi_read_in_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_core_axi_read_out_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_core_axi_read_out_if_agent_BFM , fuse_ctrl_core_axi_read_out_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_core_axi_read_out_configuration )::get cannot find resource fuse_ctrl_core_axi_read_out_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_prim_axi_read_in_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_prim_axi_read_in_if_agent_BFM , fuse_ctrl_prim_axi_read_in_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_prim_axi_read_in_configuration )::get cannot find resource fuse_ctrl_prim_axi_read_in_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_prim_axi_read_out_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_prim_axi_read_out_if_agent_BFM , fuse_ctrl_prim_axi_read_out_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_prim_axi_read_out_configuration )::get cannot find resource fuse_ctrl_prim_axi_read_out_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_secreg_axi_read_in_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_secreg_axi_read_in_if_agent_BFM , fuse_ctrl_secreg_axi_read_in_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_secreg_axi_read_in_configuration )::get cannot find resource fuse_ctrl_secreg_axi_read_in_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_secreg_axi_read_out_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_secreg_axi_read_out_if_agent_BFM , fuse_ctrl_secreg_axi_read_out_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_secreg_axi_read_out_configuration )::get cannot find resource fuse_ctrl_secreg_axi_read_out_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_lc_otp_in_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_lc_otp_in_if_agent_BFM , fuse_ctrl_lc_otp_in_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_lc_otp_in_configuration )::get cannot find resource fuse_ctrl_lc_otp_in_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_lc_otp_out_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_lc_otp_out_if_agent_BFM , fuse_ctrl_lc_otp_out_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_lc_otp_out_configuration )::get cannot find resource fuse_ctrl_lc_otp_out_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_in_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_in_if_agent_BFM , fuse_ctrl_in_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_in_configuration )::get cannot find resource fuse_ctrl_in_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_out_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_out_if_agent_BFM , fuse_ctrl_out_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_out_configuration )::get cannot find resource fuse_ctrl_out_if_agent_BFM" ) + + // Assign the sequencer handles from the handles within agent configurations + fuse_ctrl_rst_agent_sequencer = fuse_ctrl_rst_agent_config.get_sequencer(); + fuse_ctrl_core_axi_write_in_if_agent_sequencer = fuse_ctrl_core_axi_write_in_if_agent_config.get_sequencer(); + fuse_ctrl_prim_axi_write_in_if_agent_sequencer = fuse_ctrl_prim_axi_write_in_if_agent_config.get_sequencer(); + fuse_ctrl_core_axi_read_in_if_agent_sequencer = fuse_ctrl_core_axi_read_in_if_agent_config.get_sequencer(); + fuse_ctrl_prim_axi_read_in_if_agent_sequencer = fuse_ctrl_prim_axi_read_in_if_agent_config.get_sequencer(); + fuse_ctrl_secreg_axi_read_in_if_agent_sequencer = fuse_ctrl_secreg_axi_read_in_if_agent_config.get_sequencer(); + fuse_ctrl_lc_otp_in_if_agent_sequencer = fuse_ctrl_lc_otp_in_if_agent_config.get_sequencer(); + fuse_ctrl_in_if_agent_sequencer = fuse_ctrl_in_if_agent_config.get_sequencer(); + + + + // pragma uvmf custom new begin + // pragma uvmf custom new end + + endfunction + + // **************************************************************************** + virtual task body(); + // pragma uvmf custom body begin + + // Construct sequences here + + fuse_ctrl_env_seq = fuse_ctrl_env_sequence_base_t::type_id::create("fuse_ctrl_env_seq"); + + fuse_ctrl_rst_agent_random_seq = fuse_ctrl_rst_agent_random_seq_t::type_id::create("fuse_ctrl_rst_agent_random_seq"); + fuse_ctrl_core_axi_write_agent_random_seq = fuse_ctrl_core_axi_write_agent_random_seq_t::type_id::create("fuse_ctrl_core_axi_write_agent_random_seq"); + fuse_ctrl_prim_axi_write_agent_random_seq = fuse_ctrl_prim_axi_write_agent_random_seq_t::type_id::create("fuse_ctrl_prim_axi_write_agent_random_seq"); + fuse_ctrl_core_axi_read_agent_random_seq = fuse_ctrl_core_axi_read_agent_random_seq_t::type_id::create("fuse_ctrl_core_axi_read_agent_random_seq"); + fuse_ctrl_prim_axi_read_agent_random_seq = fuse_ctrl_prim_axi_read_agent_random_seq_t::type_id::create("fuse_ctrl_prim_axi_read_agent_random_seq"); + fuse_ctrl_secreg_axi_read_agent_random_seq = fuse_ctrl_secreg_axi_read_agent_random_seq_t::type_id::create("fuse_ctrl_secreg_axi_read_agent_random_seq"); + fuse_ctrl_lc_otp_if_agent_random_seq = fuse_ctrl_lc_otp_if_agent_random_seq_t::type_id::create("fuse_ctrl_lc_otp_if_agent_random_seq"); + fork + fuse_ctrl_rst_agent_config.wait_for_reset(); + fuse_ctrl_core_axi_write_agent_config.wait_for_reset(); + fuse_ctrl_prim_axi_write_agent_config.wait_for_reset(); + fuse_ctrl_core_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_prim_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_secreg_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_lc_otp_if_agent_config.wait_for_reset(); + join + // Start RESPONDER sequences here + fork + join_none + // Start INITIATOR sequences here + fork + repeat (25) fuse_ctrl_rst_agent_random_seq.start(fuse_ctrl_rst_agent_sequencer); + repeat (25) fuse_ctrl_core_axi_write_agent_random_seq.start(fuse_ctrl_core_axi_write_agent_sequencer); + repeat (25) fuse_ctrl_prim_axi_write_agent_random_seq.start(fuse_ctrl_prim_axi_write_agent_sequencer); + repeat (25) fuse_ctrl_core_axi_read_agent_random_seq.start(fuse_ctrl_core_axi_read_agent_sequencer); + repeat (25) fuse_ctrl_prim_axi_read_agent_random_seq.start(fuse_ctrl_prim_axi_read_agent_sequencer); + repeat (25) fuse_ctrl_secreg_axi_read_agent_random_seq.start(fuse_ctrl_secreg_axi_read_agent_sequencer); + repeat (25) fuse_ctrl_lc_otp_if_agent_random_seq.start(fuse_ctrl_lc_otp_if_agent_sequencer); + join + +fuse_ctrl_env_seq.start(top_configuration.vsqr); + + // UVMF_CHANGE_ME : Extend the simulation XXX number of clocks after + // the last sequence to allow for the last sequence item to flow + // through the design. + fork + fuse_ctrl_rst_agent_config.wait_for_num_clocks(400); + fuse_ctrl_core_axi_write_agent_config.wait_for_num_clocks(400); + fuse_ctrl_prim_axi_write_agent_config.wait_for_num_clocks(400); + fuse_ctrl_core_axi_read_agent_config.wait_for_num_clocks(400); + fuse_ctrl_prim_axi_read_agent_config.wait_for_num_clocks(400); + fuse_ctrl_secreg_axi_read_agent_config.wait_for_num_clocks(400); + fuse_ctrl_lc_otp_if_agent_config.wait_for_num_clocks(400); + join + + // pragma uvmf custom body end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/sequences/src/register_test_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/sequences/src/register_test_sequence.svh new file mode 100644 index 000000000..0db60c39b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/sequences/src/register_test_sequence.svh @@ -0,0 +1,76 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains the top level sequence used in register_test. +// It uses the UVM built in register test. Specific UVM built-in tests can be +// selected in the body task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class register_test_sequence extends fuse_ctrl_bench_sequence_base; + + `uvm_object_utils( register_test_sequence ); + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "" ); + super.new(name); + endfunction + + // **************************************************************************** + virtual task body(); + + // Reset the DUT + fork + // pragma uvmf custom register_test_reset begin + // UVMF_CHANGE_ME + // Select the desired wait_for_reset or provide custom mechanism. + // fork-join for this code block may be unnecessary based on your situation. + fuse_ctrl_rst_agent_config.wait_for_reset(); + fuse_ctrl_core_axi_write_agent_config.wait_for_reset(); + fuse_ctrl_prim_axi_write_agent_config.wait_for_reset(); + fuse_ctrl_core_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_prim_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_secreg_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_lc_otp_if_agent_config.wait_for_reset(); + // pragma uvmf custom register_test_reset end + join + + // pragma uvmf custom register_test_setup begin + // UVMF_CHANGE_ME perform potentially necessary operations before running the sequence. + // pragma uvmf custom register_test_setup end + + // pragma uvmf custom register_test_operation begin + // UVMF_CHANGE_ME Perform your custom register test + // pragma uvmf custom register_test_operation end + + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/hdl_top.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/hdl_top.compile new file mode 100644 index 000000000..44aeff616 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/hdl_top.compile @@ -0,0 +1,23 @@ +incdir: + - ${uvm_path}/src + - . +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ../parameters/fuse_ctrl_parameters_pkg.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hdl.compile +src: + - hdl_top.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/hdl_top.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/hdl_top.sv new file mode 100644 index 000000000..e48687ac8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/hdl_top.sv @@ -0,0 +1,276 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// Description: This top level module instantiates all synthesizable +// static content. This and tb_top.sv are the two top level modules +// of the simulation. +// +// This module instantiates the following: +// DUT: The Design Under Test +// Interfaces: Signal bundles that contain signals connected to DUT +// Driver BFM's: BFM's that actively drive interface signals +// Monitor BFM's: BFM's that passively monitor interface signals +// +//---------------------------------------------------------------------- + +//---------------------------------------------------------------------- +// + +module hdl_top; + +import fuse_ctrl_parameters_pkg::*; +import uvmf_base_pkg_hdl::*; + + // pragma attribute hdl_top partition_module_xrtl +// pragma uvmf custom clock_generator begin + bit clk; + // Instantiate a clk driver + // tbx clkgen + initial begin + clk = 0; + #0ns; + forever begin + clk = ~clk; + #5ns; + end + end +// pragma uvmf custom clock_generator end + +// pragma uvmf custom reset_generator begin + bit rst; + // Instantiate a rst driver + // tbx clkgen + initial begin + rst = 0; + #200ns; + rst = 1; + end +// pragma uvmf custom reset_generator end + + // pragma uvmf custom module_item_additional begin + logic edn_clk; + logic edn_rst_n; + // pragma uvmf custom module_item_additional end + + // Instantiate the signal bundle, monitor bfm and driver bfm for each interface. + // The signal bundle, _if, contains signals to be connected to the DUT. + // The monitor, monitor_bfm, observes the bus, _if, and captures transactions. + // The driver, driver_bfm, drives transactions onto the bus, _if. + fuse_ctrl_rst_if fuse_ctrl_rst_agent_bus( + // pragma uvmf custom fuse_ctrl_rst_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_rst_agent_bus_connections end + ); + fuse_ctrl_core_axi_write_in_if fuse_ctrl_core_axi_write_in_if_agent_bus( + // pragma uvmf custom fuse_ctrl_core_axi_write_in_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_core_axi_write_in_if_agent_bus_connections end + ); + fuse_ctrl_core_axi_write_out_if fuse_ctrl_core_axi_write_out_if_agent_bus( + // pragma uvmf custom fuse_ctrl_core_axi_write_out_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_core_axi_write_out_if_agent_bus_connections end + ); + fuse_ctrl_prim_axi_write_in_if fuse_ctrl_prim_axi_write_in_if_agent_bus( + // pragma uvmf custom fuse_ctrl_prim_axi_write_in_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_prim_axi_write_in_if_agent_bus_connections end + ); + fuse_ctrl_prim_axi_write_out_if fuse_ctrl_prim_axi_write_out_if_agent_bus( + // pragma uvmf custom fuse_ctrl_prim_axi_write_out_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_prim_axi_write_out_if_agent_bus_connections end + ); + fuse_ctrl_core_axi_read_in_if fuse_ctrl_core_axi_read_in_if_agent_bus( + // pragma uvmf custom fuse_ctrl_core_axi_read_in_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_core_axi_read_in_if_agent_bus_connections end + ); + fuse_ctrl_core_axi_read_out_if fuse_ctrl_core_axi_read_out_if_agent_bus( + // pragma uvmf custom fuse_ctrl_core_axi_read_out_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_core_axi_read_out_if_agent_bus_connections end + ); + fuse_ctrl_prim_axi_read_in_if fuse_ctrl_prim_axi_read_in_if_agent_bus( + // pragma uvmf custom fuse_ctrl_prim_axi_read_in_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_prim_axi_read_in_if_agent_bus_connections end + ); + fuse_ctrl_prim_axi_read_out_if fuse_ctrl_prim_axi_read_out_if_agent_bus( + // pragma uvmf custom fuse_ctrl_prim_axi_read_out_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_prim_axi_read_out_if_agent_bus_connections end + ); + fuse_ctrl_secreg_axi_read_in_if fuse_ctrl_secreg_axi_read_in_if_agent_bus( + // pragma uvmf custom fuse_ctrl_secreg_axi_read_in_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_secreg_axi_read_in_if_agent_bus_connections end + ); + fuse_ctrl_secreg_axi_read_out_if fuse_ctrl_secreg_axi_read_out_if_agent_bus( + // pragma uvmf custom fuse_ctrl_secreg_axi_read_out_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_secreg_axi_read_out_if_agent_bus_connections end + ); + fuse_ctrl_lc_otp_in_if fuse_ctrl_lc_otp_in_if_agent_bus( + // pragma uvmf custom fuse_ctrl_lc_otp_in_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_lc_otp_in_if_agent_bus_connections end + ); + fuse_ctrl_lc_otp_out_if fuse_ctrl_lc_otp_out_if_agent_bus( + // pragma uvmf custom fuse_ctrl_lc_otp_out_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_lc_otp_out_if_agent_bus_connections end + ); + fuse_ctrl_in_if fuse_ctrl_in_if_agent_bus( + // pragma uvmf custom fuse_ctrl_in_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_in_if_agent_bus_connections end + ); + fuse_ctrl_out_if fuse_ctrl_out_if_agent_bus( + // pragma uvmf custom fuse_ctrl_out_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_out_if_agent_bus_connections end + ); + fuse_ctrl_rst_monitor_bfm fuse_ctrl_rst_agent_mon_bfm(fuse_ctrl_rst_agent_bus.monitor_port); + fuse_ctrl_core_axi_write_in_monitor_bfm fuse_ctrl_core_axi_write_in_if_agent_mon_bfm(fuse_ctrl_core_axi_write_in_if_agent_bus.monitor_port); + fuse_ctrl_core_axi_write_out_monitor_bfm fuse_ctrl_core_axi_write_out_if_agent_mon_bfm(fuse_ctrl_core_axi_write_out_if_agent_bus.monitor_port); + fuse_ctrl_prim_axi_write_in_monitor_bfm fuse_ctrl_prim_axi_write_in_if_agent_mon_bfm(fuse_ctrl_prim_axi_write_in_if_agent_bus.monitor_port); + fuse_ctrl_prim_axi_write_out_monitor_bfm fuse_ctrl_prim_axi_write_out_if_agent_mon_bfm(fuse_ctrl_prim_axi_write_out_if_agent_bus.monitor_port); + fuse_ctrl_core_axi_read_in_monitor_bfm fuse_ctrl_core_axi_read_in_if_agent_mon_bfm(fuse_ctrl_core_axi_read_in_if_agent_bus.monitor_port); + fuse_ctrl_core_axi_read_out_monitor_bfm fuse_ctrl_core_axi_read_out_if_agent_mon_bfm(fuse_ctrl_core_axi_read_out_if_agent_bus.monitor_port); + fuse_ctrl_prim_axi_read_in_monitor_bfm fuse_ctrl_prim_axi_read_in_if_agent_mon_bfm(fuse_ctrl_prim_axi_read_in_if_agent_bus.monitor_port); + fuse_ctrl_prim_axi_read_out_monitor_bfm fuse_ctrl_prim_axi_read_out_if_agent_mon_bfm(fuse_ctrl_prim_axi_read_out_if_agent_bus.monitor_port); + fuse_ctrl_secreg_axi_read_in_monitor_bfm fuse_ctrl_secreg_axi_read_in_if_agent_mon_bfm(fuse_ctrl_secreg_axi_read_in_if_agent_bus.monitor_port); + fuse_ctrl_secreg_axi_read_out_monitor_bfm fuse_ctrl_secreg_axi_read_out_if_agent_mon_bfm(fuse_ctrl_secreg_axi_read_out_if_agent_bus.monitor_port); + fuse_ctrl_lc_otp_in_monitor_bfm fuse_ctrl_lc_otp_in_if_agent_mon_bfm(fuse_ctrl_lc_otp_in_if_agent_bus.monitor_port); + fuse_ctrl_lc_otp_out_monitor_bfm fuse_ctrl_lc_otp_out_if_agent_mon_bfm(fuse_ctrl_lc_otp_out_if_agent_bus.monitor_port); + fuse_ctrl_in_monitor_bfm fuse_ctrl_in_if_agent_mon_bfm(fuse_ctrl_in_if_agent_bus.monitor_port); + fuse_ctrl_out_monitor_bfm fuse_ctrl_out_if_agent_mon_bfm(fuse_ctrl_out_if_agent_bus.monitor_port); + fuse_ctrl_rst_driver_bfm fuse_ctrl_rst_agent_drv_bfm(fuse_ctrl_rst_agent_bus.initiator_port); + fuse_ctrl_core_axi_write_in_driver_bfm fuse_ctrl_core_axi_write_in_if_agent_drv_bfm(fuse_ctrl_core_axi_write_in_if_agent_bus.initiator_port); + fuse_ctrl_prim_axi_write_in_driver_bfm fuse_ctrl_prim_axi_write_in_if_agent_drv_bfm(fuse_ctrl_prim_axi_write_in_if_agent_bus.initiator_port); + fuse_ctrl_core_axi_read_in_driver_bfm fuse_ctrl_core_axi_read_in_if_agent_drv_bfm(fuse_ctrl_core_axi_read_in_if_agent_bus.initiator_port); + fuse_ctrl_prim_axi_read_in_driver_bfm fuse_ctrl_prim_axi_read_in_if_agent_drv_bfm(fuse_ctrl_prim_axi_read_in_if_agent_bus.initiator_port); + fuse_ctrl_secreg_axi_read_in_driver_bfm fuse_ctrl_secreg_axi_read_in_if_agent_drv_bfm(fuse_ctrl_secreg_axi_read_in_if_agent_bus.initiator_port); + fuse_ctrl_lc_otp_in_driver_bfm fuse_ctrl_lc_otp_in_if_agent_drv_bfm(fuse_ctrl_lc_otp_in_if_agent_bus.initiator_port); + fuse_ctrl_in_driver_bfm fuse_ctrl_in_if_agent_drv_bfm(fuse_ctrl_in_if_agent_bus.initiator_port); + + // pragma uvmf custom dut_instantiation begin + // UVMF_CHANGE_ME : Add DUT and connect to signals in _bus interfaces listed above + // Instantiate your DUT here + // These DUT's instantiated to show verilog and vhdl instantiation + //verilog_dut dut_verilog( .clk(clk), .rst(rst), .in_signal(vhdl_to_verilog_signal), .out_signal(verilog_to_vhdl_signal)); + //vhdl_dut dut_vhdl ( .clk(clk), .rst(rst), .in_signal(verilog_to_vhdl_signal), .out_signal(vhdl_to_verilog_signal)); + + otp_ctrl_top #( + .MemInitFile (MemInitFile) + ) dut ( + .clk_i (fuse_ctrl_rst_agent_bus.clk_i ), + .rst_ni (fuse_ctrl_rst_agent_bus.rst_ni ), + // edn + .clk_edn_i (edn_clk ), + .rst_edn_ni (edn_rst_n ), + .edn_o (fuse_ctrl_out_if_agent_bus.edn_o), //(edn_if[0].req ), + .edn_i (fuse_ctrl_in_if_agent_bus.edn_i), //({edn_if[0].ack, edn_if[0].d_data}), + // AXI interface + .s_core_axi_r_if (), + .s_core_axi_w_if (), + .s_prim_axi_r_if (), + .s_prim_axi_w_if (), + .s_secreg_axi_r_if (), + // interrupt + .intr_otp_operation_done_o (fuse_ctrl_out_if_agent_bus.intr_otp_operation_done), + .intr_otp_error_o (fuse_ctrl_out_if_agent_bus.intr_otp_error), + // alert + .alert_rx_i (fuse_ctrl_in_if_agent_bus.alert_rx_i ), //(alert_rx parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ALERT_TEST_OFFSET = 13'h c; + .alert_tx_o (fuse_ctrl_out_if_agent_bus.alert_tx_o ), //(alert_tx ), + // ast + .obs_ctrl_i (fuse_ctrl_in_if_agent_bus.obs_ctrl_i), //(otp_ctrl_if.obs_ctrl_i), + .otp_obs_o (fuse_ctrl_out_if_agent_bus.otp_obs_o), + .otp_ast_pwr_seq_o (fuse_ctrl_out_if_agent_bus.otp_ast_pwr_seq_o), //(ast_req), + .otp_ast_pwr_seq_h_i (fuse_ctrl_out_if_agent_bus.otp_ast_pwr_seq_h_i), //(otp_ctrl_if.otp_ast_pwr_seq_h_i), + // pwrmgr + .pwr_otp_i (fuse_ctrl_in_if_agent_bus.pwr_otp_init_i), //(otp_ctrl_if.pwr_otp_init_i), + .pwr_otp_o (fuse_ctrl_out_if_agent_bus.pwr_otp_o), //({otp_ctrl_if.pwr_otp_done_o, otp_ctrl_if.pwr_otp_idle_o}), + // lc + .lc_otp_vendor_test_i (fuse_ctrl_lc_otp_in_if_agent_bus.lc_otp_vendor_test_i), //(otp_ctrl_if.otp_vendor_test_ctrl_i), + .lc_otp_vendor_test_o (fuse_ctrl_lc_otp_out_if_agent_bus.lc_otp_vendor_test_o), //(otp_ctrl_if.otp_vendor_test_status_o), + .lc_otp_program_i (fuse_ctrl_lc_otp_out_if_agent_bus.lc_otp_program_i), //({lc_prog_if.req, lc_prog_if.h_data}), + .lc_otp_program_o (fuse_ctrl_lc_otp_out_if_agent_bus.lc_otp_program_o), //({lc_prog_if.d_data, lc_prog_if.ack}), + //.lc_creator_seed_sw_rw_en_i (lc_creator_seed_sw_rw_en_i), //(otp_ctrl_if.lc_creator_seed_sw_rw_en_i), + //.lc_owner_seed_sw_rw_en_i (lc_owner_seed_sw_rw_en_i), //(otp_ctrl_if.lc_owner_seed_sw_rw_en_i), + //.lc_seed_hw_rd_en_i (lc_seed_hw_rd_en_i), //(otp_ctrl_if.lc_seed_hw_rd_en_i), + .lc_dft_en_i (fuse_ctrl_lc_otp_in_if_agent_bus.lc_dft_en_i), //(otp_ctrl_if.lc_dft_en_i), + .lc_escalate_en_i (fuse_ctrl_lc_otp_in_if_agent_bus.lc_escalate_en_i), //(otp_ctrl_if.lc_escalate_en_i), + .lc_check_byp_en_i (fuse_ctrl_lc_otp_in_if_agent_bus.lc_check_byp_en_i), //(otp_ctrl_if.lc_check_byp_en_i), + .otp_lc_data_o (fuse_ctrl_lc_otp_out_if_agent_bus.otp_lc_data_o), //(otp_ctrl_if.lc_data_o), + + + .otp_broadcast_o (fuse_ctrl_out_if_agent_bus.otp_broadcast_o), //(otp_ctrl_if.otp_broadcast_o), + .otp_ext_voltage_h_io (fuse_ctrl_in_if_agent_bus.otp_ext_voltage_h_io), + //scan + .scan_en_i (fuse_ctrl_in_if_agent_bus.scan_en_i), //(otp_ctrl_if.scan_en_i), + .scan_rst_ni (fuse_ctrl_in_if_agent_bus.scan_rst_ni), //(otp_ctrl_if.scan_rst_ni), + .scanmode_i (fuse_ctrl_in_if_agent_bus.scanmode_i), //(otp_ctrl_if.scanmode_i), + + // Test-related GPIO output + .cio_test_o (fuse_ctrl_out_if_agent_bus.cio_test_o), //(otp_ctrl_if.cio_test_o), + .cio_test_en_o (fuse_ctrl_out_if_agent_bus.cio_test_en_o) //(otp_ctrl_if.cio_test_en_o) + ); + // pragma uvmf custom dut_instantiation end + + initial begin // tbx vif_binding_block + import uvm_pkg::uvm_config_db; + // The monitor_bfm and driver_bfm for each interface is placed into the uvm_config_db. + // They are placed into the uvm_config_db using the string names defined in the parameters package. + // The string names are passed to the agent configurations by test_top through the top level configuration. + // They are retrieved by the agents configuration class for use by the agent. + uvm_config_db #( virtual fuse_ctrl_rst_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_rst_agent_BFM , fuse_ctrl_rst_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_write_in_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_write_in_if_agent_BFM , fuse_ctrl_core_axi_write_in_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_write_out_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_write_out_if_agent_BFM , fuse_ctrl_core_axi_write_out_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_write_in_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_write_in_if_agent_BFM , fuse_ctrl_prim_axi_write_in_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_write_out_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_write_out_if_agent_BFM , fuse_ctrl_prim_axi_write_out_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_read_in_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_read_in_if_agent_BFM , fuse_ctrl_core_axi_read_in_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_read_out_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_read_out_if_agent_BFM , fuse_ctrl_core_axi_read_out_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_read_in_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_read_in_if_agent_BFM , fuse_ctrl_prim_axi_read_in_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_read_out_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_read_out_if_agent_BFM , fuse_ctrl_prim_axi_read_out_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_secreg_axi_read_in_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_secreg_axi_read_in_if_agent_BFM , fuse_ctrl_secreg_axi_read_in_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_secreg_axi_read_out_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_secreg_axi_read_out_if_agent_BFM , fuse_ctrl_secreg_axi_read_out_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_lc_otp_in_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_lc_otp_in_if_agent_BFM , fuse_ctrl_lc_otp_in_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_lc_otp_out_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_lc_otp_out_if_agent_BFM , fuse_ctrl_lc_otp_out_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_in_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_in_if_agent_BFM , fuse_ctrl_in_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_out_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_out_if_agent_BFM , fuse_ctrl_out_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_rst_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_rst_agent_BFM , fuse_ctrl_rst_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_write_in_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_write_in_if_agent_BFM , fuse_ctrl_core_axi_write_in_if_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_write_in_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_write_in_if_agent_BFM , fuse_ctrl_prim_axi_write_in_if_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_read_in_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_read_in_if_agent_BFM , fuse_ctrl_core_axi_read_in_if_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_read_in_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_read_in_if_agent_BFM , fuse_ctrl_prim_axi_read_in_if_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_secreg_axi_read_in_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_secreg_axi_read_in_if_agent_BFM , fuse_ctrl_secreg_axi_read_in_if_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_lc_otp_in_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_lc_otp_in_if_agent_BFM , fuse_ctrl_lc_otp_in_if_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_in_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_in_if_agent_BFM , fuse_ctrl_in_if_agent_drv_bfm ); + end + +endmodule + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/hdl_top.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/hdl_top.vinfo new file mode 100644 index 000000000..0c3ac0b29 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/hdl_top.vinfo @@ -0,0 +1,19 @@ +@use $UVMF_PROJECT_DIR/rtl/verilog/verilog_dut.vinfo +@use $UVMF_PROJECT_DIR/tb/parameters/fuse_ctrl_parameters_pkg.vinfo +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo +hdl_top.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/hvl_top.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/hvl_top.compile new file mode 100644 index 000000000..040488764 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/hvl_top.compile @@ -0,0 +1,7 @@ +incdir: + - ${uvm_path}/src + - . +needs: + - ../tests/fuse_ctrl_tests_pkg.compile +src: + - hvl_top.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/hvl_top.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/hvl_top.sv new file mode 100644 index 000000000..68e3fc6f6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/hvl_top.sv @@ -0,0 +1,47 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +// +// DESCRIPTION: This module loads the test package and starts the UVM phases. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +module hvl_top; + +import uvm_pkg::*; +import fuse_ctrl_tests_pkg::*; + + // pragma uvmf custom module_item_additional begin + // pragma uvmf custom module_item_additional end + + initial begin + $timeformat(-9,3,"ns",5); + run_test(); + end + +endmodule + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/hvl_top.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/hvl_top.vinfo new file mode 100644 index 000000000..31185e42f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/hvl_top.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_PROJECT_DIR/tb/tests/fuse_ctrl_tests_pkg.vinfo +hvl_top.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/top_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/top_filelist_hdl.f new file mode 100644 index 000000000..1e9dab653 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/top_filelist_hdl.f @@ -0,0 +1,3 @@ +$UVMF_PROJECT_DIR/tb/testbench/hdl_top.sv +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/top_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/top_filelist_hvl.f new file mode 100644 index 000000000..42383ab2d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/testbench/top_filelist_hvl.f @@ -0,0 +1,3 @@ +$UVMF_PROJECT_DIR/tb/testbench/hvl_top.sv +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.compile new file mode 100644 index 000000000..97d3ea8b7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.compile @@ -0,0 +1,22 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile + - ../../../../verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile + - ../parameters/fuse_ctrl_parameters_pkg.compile + - ../sequences/fuse_ctrl_sequences_pkg.compile +src: + - fuse_ctrl_tests_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.sv new file mode 100644 index 000000000..a3021a054 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.sv @@ -0,0 +1,94 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This package contains all tests currently written for +// the simulation project. Once compiled, any test can be selected +// from the vsim command line using +UVM_TESTNAME=yourTestNameHere +// +// CONTAINS: +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +package fuse_ctrl_tests_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg::*; + import fuse_ctrl_parameters_pkg::*; + import fuse_ctrl_env_pkg::*; + import fuse_ctrl_sequences_pkg::*; + import fuse_ctrl_rst_pkg::*; + import fuse_ctrl_rst_pkg_hdl::*; + import fuse_ctrl_core_axi_write_in_pkg::*; + import fuse_ctrl_core_axi_write_in_pkg_hdl::*; + import fuse_ctrl_core_axi_write_out_pkg::*; + import fuse_ctrl_core_axi_write_out_pkg_hdl::*; + import fuse_ctrl_prim_axi_write_in_pkg::*; + import fuse_ctrl_prim_axi_write_in_pkg_hdl::*; + import fuse_ctrl_prim_axi_write_out_pkg::*; + import fuse_ctrl_prim_axi_write_out_pkg_hdl::*; + import fuse_ctrl_core_axi_read_in_pkg::*; + import fuse_ctrl_core_axi_read_in_pkg_hdl::*; + import fuse_ctrl_core_axi_read_out_pkg::*; + import fuse_ctrl_core_axi_read_out_pkg_hdl::*; + import fuse_ctrl_prim_axi_read_in_pkg::*; + import fuse_ctrl_prim_axi_read_in_pkg_hdl::*; + import fuse_ctrl_prim_axi_read_out_pkg::*; + import fuse_ctrl_prim_axi_read_out_pkg_hdl::*; + import fuse_ctrl_secreg_axi_read_in_pkg::*; + import fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; + import fuse_ctrl_secreg_axi_read_out_pkg::*; + import fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; + import fuse_ctrl_lc_otp_in_pkg::*; + import fuse_ctrl_lc_otp_in_pkg_hdl::*; + import fuse_ctrl_lc_otp_out_pkg::*; + import fuse_ctrl_lc_otp_out_pkg_hdl::*; + import fuse_ctrl_in_pkg::*; + import fuse_ctrl_in_pkg_hdl::*; + import fuse_ctrl_out_pkg::*; + import fuse_ctrl_out_pkg_hdl::*; + + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + `include "src/test_top.svh" + `include "src/register_test.svh" + `include "src/example_derived_test.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new tests to the src directory + // be sure to add the test file here so that it will be + // compiled as part of the test package. Be sure to place + // the new test after any base tests of the new test. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.vinfo new file mode 100644 index 000000000..e0db7c18e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.vinfo @@ -0,0 +1,21 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo +@use $UVMF_PROJECT_DIR/tb/parameters/fuse_ctrl_parameters_pkg.vinfo +@use $UVMF_PROJECT_DIR/tb/sequences/fuse_ctrl_sequences_pkg.vinfo ++incdir+@vinfodir +fuse_ctrl_tests_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/tests/src/example_derived_test.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/tests/src/example_derived_test.svh new file mode 100644 index 000000000..82d6c45ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/tests/src/example_derived_test.svh @@ -0,0 +1,57 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This test extends test_top and makes +// changes to test_top using the UVM factory type_override: +// +// Test scenario: +// This is a template test that can be used to create future tests. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class example_derived_test extends test_top; + + `uvm_component_utils( example_derived_test ); + + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + + virtual function void build_phase(uvm_phase phase); + // The factory override below is an example of how to replace the fuse_ctrl_bench_sequence_base + // sequence with the example_derived_test_sequence. + fuse_ctrl_bench_sequence_base::type_id::set_type_override(example_derived_test_sequence::get_type()); + // Execute the build_phase of test_top AFTER all factory overrides have been created. + super.build_phase(phase); + // pragma uvmf custom configuration_settings_post_randomize begin + // UVMF_CHANGE_ME Test specific configuration values can be set here. + // The configuration structure has already been randomized. + // pragma uvmf custom configuration_settings_post_randomize end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/tests/src/register_test.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/tests/src/register_test.svh new file mode 100644 index 000000000..1be722286 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/tests/src/register_test.svh @@ -0,0 +1,54 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This test extends test_top and makes +// changes to test_top using the UVM factory type_override: +// +// Test scenario: +// This is a template test that can be used to create future tests. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class register_test extends test_top; + + `uvm_component_utils( register_test ); + + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + + virtual function void build_phase(uvm_phase phase); + // The factory override below replaces the fuse_ctrl_bench_sequence_base + // sequence with the register_test_sequence. + fuse_ctrl_bench_sequence_base::type_id::set_type_override(register_test_sequence::get_type()); + // Execute the build_phase of test_top AFTER all factory overrides have been created. + super.build_phase(phase); + endfunction + + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/tests/src/test_top.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/tests/src/test_top.svh new file mode 100644 index 000000000..fc71ef31d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/tb/tests/src/test_top.svh @@ -0,0 +1,118 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// Description: This top level UVM test is the base class for all +// future tests created for this project. +// +// This test class contains: +// Configuration: The top level configuration for the project. +// Environment: The top level environment for the project. +// Top_level_sequence: The top level sequence for the project. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +typedef fuse_ctrl_env_configuration fuse_ctrl_env_configuration_t; +typedef fuse_ctrl_environment fuse_ctrl_environment_t; + +class test_top extends uvmf_test_base #(.CONFIG_T(fuse_ctrl_env_configuration_t), + .ENV_T(fuse_ctrl_environment_t), + .TOP_LEVEL_SEQ_T(fuse_ctrl_bench_sequence_base)); + + `uvm_component_utils( test_top ); + + + + string interface_names[] = { + fuse_ctrl_rst_agent_BFM /* fuse_ctrl_rst_agent [0] */ , + fuse_ctrl_core_axi_write_in_if_agent_BFM /* fuse_ctrl_core_axi_write_in_if_agent [1] */ , + fuse_ctrl_core_axi_write_out_if_agent_BFM /* fuse_ctrl_core_axi_write_out_if_agent [2] */ , + fuse_ctrl_prim_axi_write_in_if_agent_BFM /* fuse_ctrl_prim_axi_write_in_if_agent [3] */ , + fuse_ctrl_prim_axi_write_out_if_agent_BFM /* fuse_ctrl_prim_axi_write_out_if_agent [4] */ , + fuse_ctrl_core_axi_read_in_if_agent_BFM /* fuse_ctrl_core_axi_read_in_if_agent [5] */ , + fuse_ctrl_core_axi_read_out_if_agent_BFM /* fuse_ctrl_core_axi_read_out_if_agent [6] */ , + fuse_ctrl_prim_axi_read_in_if_agent_BFM /* fuse_ctrl_prim_axi_read_in_if_agent [7] */ , + fuse_ctrl_prim_axi_read_out_if_agent_BFM /* fuse_ctrl_prim_axi_read_out_if_agent [8] */ , + fuse_ctrl_secreg_axi_read_in_if_agent_BFM /* fuse_ctrl_secreg_axi_read_in_if_agent [9] */ , + fuse_ctrl_secreg_axi_read_out_if_agent_BFM /* fuse_ctrl_secreg_axi_read_out_if_agent [10] */ , + fuse_ctrl_lc_otp_in_if_agent_BFM /* fuse_ctrl_lc_otp_in_if_agent [11] */ , + fuse_ctrl_lc_otp_out_if_agent_BFM /* fuse_ctrl_lc_otp_out_if_agent [12] */ , + fuse_ctrl_in_if_agent_BFM /* fuse_ctrl_in_if_agent [13] */ , + fuse_ctrl_out_if_agent_BFM /* fuse_ctrl_out_if_agent [14] */ +}; + +uvmf_active_passive_t interface_activities[] = { + ACTIVE /* fuse_ctrl_rst_agent [0] */ , + ACTIVE /* fuse_ctrl_core_axi_write_in_if_agent [1] */ , + PASSIVE /* fuse_ctrl_core_axi_write_out_if_agent [2] */ , + ACTIVE /* fuse_ctrl_prim_axi_write_in_if_agent [3] */ , + PASSIVE /* fuse_ctrl_prim_axi_write_out_if_agent [4] */ , + ACTIVE /* fuse_ctrl_core_axi_read_in_if_agent [5] */ , + PASSIVE /* fuse_ctrl_core_axi_read_out_if_agent [6] */ , + ACTIVE /* fuse_ctrl_prim_axi_read_in_if_agent [7] */ , + PASSIVE /* fuse_ctrl_prim_axi_read_out_if_agent [8] */ , + ACTIVE /* fuse_ctrl_secreg_axi_read_in_if_agent [9] */ , + PASSIVE /* fuse_ctrl_secreg_axi_read_out_if_agent [10] */ , + ACTIVE /* fuse_ctrl_lc_otp_in_if_agent [11] */ , + PASSIVE /* fuse_ctrl_lc_otp_out_if_agent [12] */ , + ACTIVE /* fuse_ctrl_in_if_agent [13] */ , + PASSIVE /* fuse_ctrl_out_if_agent [14] */ }; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // FUNCTION: new() + // This is the standard systemVerilog constructor. All components are + // constructed in the build_phase to allow factory overriding. + // + function new( string name = "", uvm_component parent = null ); + super.new( name ,parent ); + endfunction + + + + // **************************************************************************** + // FUNCTION: build_phase() + // The construction of the configuration and environment classes is done in + // the build_phase of uvmf_test_base. Once the configuraton and environment + // classes are built then the initialize call is made to perform the + // following: + // Monitor and driver BFM virtual interface handle passing into agents + // Set the active/passive state for each agent + // Once this build_phase completes, the build_phase of the environment is + // executed which builds the agents. + // + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + // pragma uvmf custom configuration_settings_post_randomize begin + // pragma uvmf custom configuration_settings_post_randomize end + configuration.initialize(NA, "uvm_test_top.environment", interface_names, null, interface_activities); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/yaml/fuse_ctrl_bench.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/yaml/fuse_ctrl_bench.yaml new file mode 100644 index 000000000..5dfa4be4a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/project_benches/fuse_ctrl/yaml/fuse_ctrl_bench.yaml @@ -0,0 +1,43 @@ +uvmf: + benches: + fuse_ctrl: + active_passive: + - bfm_name: fuse_ctrl_rst_agent + value: ACTIVE + - bfm_name: fuse_ctrl_core_axi_write_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_core_axi_write_out_if_agent + value: PASSIVE + - bfm_name: fuse_ctrl_prim_axi_write_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_prim_axi_write_out_if_agent + value: PASSIVE + - bfm_name: fuse_ctrl_core_axi_read_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_core_axi_read_out_if_agent + value: PASSIVE + - bfm_name: fuse_ctrl_prim_axi_read_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_prim_axi_read_out_if_agent + value: PASSIVE + - bfm_name: fuse_ctrl_secreg_axi_read_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_secreg_axi_read_out_if_agent + value: PASSIVE + - bfm_name: fuse_ctrl_lc_otp_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_lc_otp_out_if_agent + value: PASSIVE + - bfm_name: fuse_ctrl_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_out_if_agent + value: PASSIVE + active_passive_default: ACTIVE + clock_half_period: 5ns + clock_phase_offset: 0ns + existing_library_component: 'True' + interface_params: [] + reset_assertion_level: 'False' + reset_duration: 200ns + top_env: fuse_ctrl + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/.project new file mode 100644 index 000000000..ec64afa4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/.project @@ -0,0 +1,32 @@ + + + fuse_ctrl_env_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/.svproject new file mode 100644 index 000000000..bcfe6ac3d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/Makefile new file mode 100644 index 000000000..4cf61d51d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/Makefile @@ -0,0 +1,56 @@ +# fuse_ctrl environment packages source and make target + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +# Include all requisite sub-environment package targets for this bench + +fuse_ctrl_ENV_PKG =\ + $(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv + +COMP_fuse_ctrl_PKG_TGT_0 = q_comp_fuse_ctrl_env_pkg +COMP_fuse_ctrl_PKG_TGT_1 = v_comp_fuse_ctrl_env_pkg +COMP_fuse_ctrl_PKG_TGT = $(COMP_fuse_ctrl_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_env_pkg: $(COMP_fuse_ctrl_PKG_TGT) + +q_comp_fuse_ctrl_env_pkg: + $(HVL_COMP_CMD) +incdir+$(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg $(fuse_ctrl_ENV_PKG) + +v_comp_fuse_ctrl_env_pkg: q_comp_fuse_ctrl_env_pkg + $(VELANALYZE_HVL_CMD) +incdir+$(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg $(fuse_ctrl_ENV_PKG) + + + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_ENV_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_env_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_env_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_env_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_env_pkg += -I$(fuse_ctrl_ENV_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_env_pkg += $(fuse_ctrl_ENV_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_env_pkg += \ + \ + -o .so + +comp_fuse_ctrl_env_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Environment C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_env_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_env_pkg) + @echo "--------------------------------" + @echo "Linking Environment C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_env_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_env_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/compile.do new file mode 100644 index 000000000..05dca66cc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/compile.do @@ -0,0 +1,12 @@ +# Tcl do file for compile of fuse_ctrl interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + + +quietly set cmd [format "vlog -timescale 1ps/1ps +incdir+%s/environment_packages/fuse_ctrl_env_pkg" $env(UVMF_VIP_LIBRARY_HOME)] +quietly set cmd [format "%s %s/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv" $cmd $env(UVMF_VIP_LIBRARY_HOME)] +eval $cmd + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile new file mode 100644 index 000000000..d912154c2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile @@ -0,0 +1,21 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hvl.compile + +src: + - fuse_ctrl_env_pkg.sv + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv new file mode 100644 index 000000000..78dc1774b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// environment package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_env_pkg; + + import uvm_pkg::*; + `include "uvm_macros.svh" + import uvmf_base_pkg::*; + import fuse_ctrl_rst_pkg::*; + import fuse_ctrl_rst_pkg_hdl::*; + import fuse_ctrl_core_axi_write_in_pkg::*; + import fuse_ctrl_core_axi_write_in_pkg_hdl::*; + import fuse_ctrl_core_axi_write_out_pkg::*; + import fuse_ctrl_core_axi_write_out_pkg_hdl::*; + import fuse_ctrl_prim_axi_write_in_pkg::*; + import fuse_ctrl_prim_axi_write_in_pkg_hdl::*; + import fuse_ctrl_prim_axi_write_out_pkg::*; + import fuse_ctrl_prim_axi_write_out_pkg_hdl::*; + import fuse_ctrl_core_axi_read_in_pkg::*; + import fuse_ctrl_core_axi_read_in_pkg_hdl::*; + import fuse_ctrl_core_axi_read_out_pkg::*; + import fuse_ctrl_core_axi_read_out_pkg_hdl::*; + import fuse_ctrl_prim_axi_read_in_pkg::*; + import fuse_ctrl_prim_axi_read_in_pkg_hdl::*; + import fuse_ctrl_prim_axi_read_out_pkg::*; + import fuse_ctrl_prim_axi_read_out_pkg_hdl::*; + import fuse_ctrl_secreg_axi_read_in_pkg::*; + import fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; + import fuse_ctrl_secreg_axi_read_out_pkg::*; + import fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; + import fuse_ctrl_lc_otp_in_pkg::*; + import fuse_ctrl_lc_otp_in_pkg_hdl::*; + import fuse_ctrl_lc_otp_out_pkg::*; + import fuse_ctrl_lc_otp_out_pkg_hdl::*; + import fuse_ctrl_in_pkg::*; + import fuse_ctrl_in_pkg_hdl::*; + import fuse_ctrl_out_pkg::*; + import fuse_ctrl_out_pkg_hdl::*; + + `uvm_analysis_imp_decl(_fuse_ctrl_rst_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_core_axi_write_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_prim_axi_write_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_core_axi_read_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_prim_axi_read_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_secreg_axi_read_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_lc_otp_if_agent_ae) + `uvm_analysis_imp_decl(_expected_analysis_export) + `uvm_analysis_imp_decl(_actual_analysis_export) + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_env_typedefs.svh" + `include "src/fuse_ctrl_env_configuration.svh" + `include "src/fuse_ctrl_predictor.svh" + `include "src/fuse_ctrl_scoreboard.svh" + `include "src/fuse_ctrl_environment.svh" + `include "src/fuse_ctrl_env_sequence_base.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new environment level sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the environment package. Be sure to place + // the new sequence after any base sequence of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo new file mode 100644 index 000000000..0fb92cfec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo @@ -0,0 +1,18 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo ++incdir+@vinfodir +fuse_ctrl_env_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F new file mode 100644 index 000000000..b40213df3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F @@ -0,0 +1,12 @@ + +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + +// Sub-Environments + ++incdir+. +./fuse_ctrl_env_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_configuration.svh new file mode 100644 index 000000000..cbff76d16 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_configuration.svh @@ -0,0 +1,254 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: THis is the configuration for the fuse_ctrl environment. +// it contains configuration classes for each agent. It also contains +// environment level configuration variables. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_env_configuration +extends uvmf_environment_configuration_base; + + `uvm_object_utils( fuse_ctrl_env_configuration ) + + +//Constraints for the configuration variables: + + + covergroup fuse_ctrl_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + + typedef fuse_ctrl_rst_configuration fuse_ctrl_rst_agent_config_t; + rand fuse_ctrl_rst_agent_config_t fuse_ctrl_rst_agent_config; + + typedef fuse_ctrl_core_axi_write_in_configuration fuse_ctrl_core_axi_write_in_if_agent_config_t; + rand fuse_ctrl_core_axi_write_in_if_agent_config_t fuse_ctrl_core_axi_write_in_if_agent_config; + + typedef fuse_ctrl_core_axi_write_out_configuration fuse_ctrl_core_axi_write_out_if_agent_config_t; + rand fuse_ctrl_core_axi_write_out_if_agent_config_t fuse_ctrl_core_axi_write_out_if_agent_config; + + typedef fuse_ctrl_prim_axi_write_in_configuration fuse_ctrl_prim_axi_write_in_if_agent_config_t; + rand fuse_ctrl_prim_axi_write_in_if_agent_config_t fuse_ctrl_prim_axi_write_in_if_agent_config; + + typedef fuse_ctrl_prim_axi_write_out_configuration fuse_ctrl_prim_axi_write_out_if_agent_config_t; + rand fuse_ctrl_prim_axi_write_out_if_agent_config_t fuse_ctrl_prim_axi_write_out_if_agent_config; + + typedef fuse_ctrl_core_axi_read_in_configuration fuse_ctrl_core_axi_read_in_if_agent_config_t; + rand fuse_ctrl_core_axi_read_in_if_agent_config_t fuse_ctrl_core_axi_read_in_if_agent_config; + + typedef fuse_ctrl_core_axi_read_out_configuration fuse_ctrl_core_axi_read_out_if_agent_config_t; + rand fuse_ctrl_core_axi_read_out_if_agent_config_t fuse_ctrl_core_axi_read_out_if_agent_config; + + typedef fuse_ctrl_prim_axi_read_in_configuration fuse_ctrl_prim_axi_read_in_if_agent_config_t; + rand fuse_ctrl_prim_axi_read_in_if_agent_config_t fuse_ctrl_prim_axi_read_in_if_agent_config; + + typedef fuse_ctrl_prim_axi_read_out_configuration fuse_ctrl_prim_axi_read_out_if_agent_config_t; + rand fuse_ctrl_prim_axi_read_out_if_agent_config_t fuse_ctrl_prim_axi_read_out_if_agent_config; + + typedef fuse_ctrl_secreg_axi_read_in_configuration fuse_ctrl_secreg_axi_read_in_if_agent_config_t; + rand fuse_ctrl_secreg_axi_read_in_if_agent_config_t fuse_ctrl_secreg_axi_read_in_if_agent_config; + + typedef fuse_ctrl_secreg_axi_read_out_configuration fuse_ctrl_secreg_axi_read_out_if_agent_config_t; + rand fuse_ctrl_secreg_axi_read_out_if_agent_config_t fuse_ctrl_secreg_axi_read_out_if_agent_config; + + typedef fuse_ctrl_lc_otp_in_configuration fuse_ctrl_lc_otp_in_if_agent_config_t; + rand fuse_ctrl_lc_otp_in_if_agent_config_t fuse_ctrl_lc_otp_in_if_agent_config; + + typedef fuse_ctrl_lc_otp_out_configuration fuse_ctrl_lc_otp_out_if_agent_config_t; + rand fuse_ctrl_lc_otp_out_if_agent_config_t fuse_ctrl_lc_otp_out_if_agent_config; + + typedef fuse_ctrl_in_configuration fuse_ctrl_in_if_agent_config_t; + rand fuse_ctrl_in_if_agent_config_t fuse_ctrl_in_if_agent_config; + + typedef fuse_ctrl_out_configuration fuse_ctrl_out_if_agent_config_t; + rand fuse_ctrl_out_if_agent_config_t fuse_ctrl_out_if_agent_config; + + + + + typedef uvmf_virtual_sequencer_base #(.CONFIG_T(fuse_ctrl_env_configuration)) fuse_ctrl_vsqr_t; + fuse_ctrl_vsqr_t vsqr; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// This function constructs the configuration object for each agent in the environment. +// + function new( string name = "" ); + super.new( name ); + + + fuse_ctrl_rst_agent_config = fuse_ctrl_rst_agent_config_t::type_id::create("fuse_ctrl_rst_agent_config"); + fuse_ctrl_core_axi_write_in_if_agent_config = fuse_ctrl_core_axi_write_in_if_agent_config_t::type_id::create("fuse_ctrl_core_axi_write_in_if_agent_config"); + fuse_ctrl_core_axi_write_out_if_agent_config = fuse_ctrl_core_axi_write_out_if_agent_config_t::type_id::create("fuse_ctrl_core_axi_write_out_if_agent_config"); + fuse_ctrl_prim_axi_write_in_if_agent_config = fuse_ctrl_prim_axi_write_in_if_agent_config_t::type_id::create("fuse_ctrl_prim_axi_write_in_if_agent_config"); + fuse_ctrl_prim_axi_write_out_if_agent_config = fuse_ctrl_prim_axi_write_out_if_agent_config_t::type_id::create("fuse_ctrl_prim_axi_write_out_if_agent_config"); + fuse_ctrl_core_axi_read_in_if_agent_config = fuse_ctrl_core_axi_read_in_if_agent_config_t::type_id::create("fuse_ctrl_core_axi_read_in_if_agent_config"); + fuse_ctrl_core_axi_read_out_if_agent_config = fuse_ctrl_core_axi_read_out_if_agent_config_t::type_id::create("fuse_ctrl_core_axi_read_out_if_agent_config"); + fuse_ctrl_prim_axi_read_in_if_agent_config = fuse_ctrl_prim_axi_read_in_if_agent_config_t::type_id::create("fuse_ctrl_prim_axi_read_in_if_agent_config"); + fuse_ctrl_prim_axi_read_out_if_agent_config = fuse_ctrl_prim_axi_read_out_if_agent_config_t::type_id::create("fuse_ctrl_prim_axi_read_out_if_agent_config"); + fuse_ctrl_secreg_axi_read_in_if_agent_config = fuse_ctrl_secreg_axi_read_in_if_agent_config_t::type_id::create("fuse_ctrl_secreg_axi_read_in_if_agent_config"); + fuse_ctrl_secreg_axi_read_out_if_agent_config = fuse_ctrl_secreg_axi_read_out_if_agent_config_t::type_id::create("fuse_ctrl_secreg_axi_read_out_if_agent_config"); + fuse_ctrl_lc_otp_in_if_agent_config = fuse_ctrl_lc_otp_in_if_agent_config_t::type_id::create("fuse_ctrl_lc_otp_in_if_agent_config"); + fuse_ctrl_lc_otp_out_if_agent_config = fuse_ctrl_lc_otp_out_if_agent_config_t::type_id::create("fuse_ctrl_lc_otp_out_if_agent_config"); + fuse_ctrl_in_if_agent_config = fuse_ctrl_in_if_agent_config_t::type_id::create("fuse_ctrl_in_if_agent_config"); + fuse_ctrl_out_if_agent_config = fuse_ctrl_out_if_agent_config_t::type_id::create("fuse_ctrl_out_if_agent_config"); + + + fuse_ctrl_configuration_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that configuration variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + + // pragma uvmf custom new begin + // pragma uvmf custom new end + endfunction + +// **************************************************************************** +// FUNCTION : set_vsqr() +// This function is used to assign the vsqr handle. + virtual function void set_vsqr( fuse_ctrl_vsqr_t vsqr); + this.vsqr = vsqr; + endfunction : set_vsqr + +// **************************************************************************** +// FUNCTION: post_randomize() +// This function is automatically called after the randomize() function +// is executed. +// + function void post_randomize(); + super.post_randomize(); + // pragma uvmf custom post_randomize begin + // pragma uvmf custom post_randomize end + endfunction + +// **************************************************************************** +// FUNCTION: convert2string() +// This function converts all variables in this class to a single string for +// logfile reporting. This function concatenates the convert2string result for +// each agent configuration in this configuration class. +// + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + return { + + "\n", fuse_ctrl_rst_agent_config.convert2string, + "\n", fuse_ctrl_core_axi_write_agent_config.convert2string, + "\n", fuse_ctrl_prim_axi_write_agent_config.convert2string, + "\n", fuse_ctrl_core_axi_read_agent_config.convert2string, + "\n", fuse_ctrl_prim_axi_read_agent_config.convert2string, + "\n", fuse_ctrl_secreg_axi_read_agent_config.convert2string, + "\n", fuse_ctrl_lc_otp_if_agent_config.convert2string + + + }; + // pragma uvmf custom convert2string end + endfunction +// **************************************************************************** +// FUNCTION: initialize(); +// This function configures each interface agents configuration class. The +// sim level determines the active/passive state of the agent. The environment_path +// identifies the hierarchy down to and including the instantiation name of the +// environment for this configuration class. Each instance of the environment +// has its own configuration class. The string interface names are used by +// the agent configurations to identify the virtual interface handle to pull from +// the uvm_config_db. +// + function void initialize(uvmf_sim_level_t sim_level, + string environment_path, + string interface_names[], + uvm_reg_block register_model = null, + uvmf_active_passive_t interface_activity[] = {} + ); + + super.initialize(sim_level, environment_path, interface_names, register_model, interface_activity); + + + + // Interface initialization for local agents + fuse_ctrl_rst_agent_config.initialize( interface_activity[0], {environment_path,".fuse_ctrl_rst_agent"}, interface_names[0]); + fuse_ctrl_rst_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_rst_agent_config.has_coverage = 1; + fuse_ctrl_core_axi_write_in_if_agent_config.initialize( interface_activity[1], {environment_path,".fuse_ctrl_core_axi_write_in_if_agent"}, interface_names[1]); + fuse_ctrl_core_axi_write_in_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_core_axi_write_in_if_agent_config.has_coverage = 1; + fuse_ctrl_core_axi_write_out_if_agent_config.initialize( interface_activity[2], {environment_path,".fuse_ctrl_core_axi_write_out_if_agent"}, interface_names[2]); + fuse_ctrl_core_axi_write_out_if_agent_config.initiator_responder = RESPONDER; + // fuse_ctrl_core_axi_write_out_if_agent_config.has_coverage = 1; + fuse_ctrl_prim_axi_write_in_if_agent_config.initialize( interface_activity[3], {environment_path,".fuse_ctrl_prim_axi_write_in_if_agent"}, interface_names[3]); + fuse_ctrl_prim_axi_write_in_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_prim_axi_write_in_if_agent_config.has_coverage = 1; + fuse_ctrl_prim_axi_write_out_if_agent_config.initialize( interface_activity[4], {environment_path,".fuse_ctrl_prim_axi_write_out_if_agent"}, interface_names[4]); + fuse_ctrl_prim_axi_write_out_if_agent_config.initiator_responder = RESPONDER; + // fuse_ctrl_prim_axi_write_out_if_agent_config.has_coverage = 1; + fuse_ctrl_core_axi_read_in_if_agent_config.initialize( interface_activity[5], {environment_path,".fuse_ctrl_core_axi_read_in_if_agent"}, interface_names[5]); + fuse_ctrl_core_axi_read_in_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_core_axi_read_in_if_agent_config.has_coverage = 1; + fuse_ctrl_core_axi_read_out_if_agent_config.initialize( interface_activity[6], {environment_path,".fuse_ctrl_core_axi_read_out_if_agent"}, interface_names[6]); + fuse_ctrl_core_axi_read_out_if_agent_config.initiator_responder = RESPONDER; + // fuse_ctrl_core_axi_read_out_if_agent_config.has_coverage = 1; + fuse_ctrl_prim_axi_read_in_if_agent_config.initialize( interface_activity[7], {environment_path,".fuse_ctrl_prim_axi_read_in_if_agent"}, interface_names[7]); + fuse_ctrl_prim_axi_read_in_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_prim_axi_read_in_if_agent_config.has_coverage = 1; + fuse_ctrl_prim_axi_read_out_if_agent_config.initialize( interface_activity[8], {environment_path,".fuse_ctrl_prim_axi_read_out_if_agent"}, interface_names[8]); + fuse_ctrl_prim_axi_read_out_if_agent_config.initiator_responder = RESPONDER; + // fuse_ctrl_prim_axi_read_out_if_agent_config.has_coverage = 1; + fuse_ctrl_secreg_axi_read_in_if_agent_config.initialize( interface_activity[9], {environment_path,".fuse_ctrl_secreg_axi_read_in_if_agent"}, interface_names[9]); + fuse_ctrl_secreg_axi_read_in_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_secreg_axi_read_in_if_agent_config.has_coverage = 1; + fuse_ctrl_secreg_axi_read_out_if_agent_config.initialize( interface_activity[10], {environment_path,".fuse_ctrl_secreg_axi_read_out_if_agent"}, interface_names[10]); + fuse_ctrl_secreg_axi_read_out_if_agent_config.initiator_responder = RESPONDER; + // fuse_ctrl_secreg_axi_read_out_if_agent_config.has_coverage = 1; + fuse_ctrl_lc_otp_in_if_agent_config.initialize( interface_activity[11], {environment_path,".fuse_ctrl_lc_otp_in_if_agent"}, interface_names[11]); + fuse_ctrl_lc_otp_in_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_lc_otp_in_if_agent_config.has_coverage = 1; + fuse_ctrl_lc_otp_out_if_agent_config.initialize( interface_activity[12], {environment_path,".fuse_ctrl_lc_otp_out_if_agent"}, interface_names[12]); + fuse_ctrl_lc_otp_out_if_agent_config.initiator_responder = RESPONDER; + // fuse_ctrl_lc_otp_out_if_agent_config.has_coverage = 1; + fuse_ctrl_in_if_agent_config.initialize( interface_activity[13], {environment_path,".fuse_ctrl_in_if_agent"}, interface_names[13]); + fuse_ctrl_in_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_in_if_agent_config.has_coverage = 1; + fuse_ctrl_out_if_agent_config.initialize( interface_activity[14], {environment_path,".fuse_ctrl_out_if_agent"}, interface_names[14]); + fuse_ctrl_out_if_agent_config.initiator_responder = RESPONDER; + // fuse_ctrl_out_if_agent_config.has_coverage = 1; + + + + + + // pragma uvmf custom initialize begin + // pragma uvmf custom initialize end + + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_sequence_base.svh new file mode 100644 index 000000000..a47c24db6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_sequence_base.svh @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains environment level sequences that will +// be reused from block to top level simulations. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_env_sequence_base #( + type CONFIG_T + ) extends uvmf_virtual_sequence_base #(.CONFIG_T(CONFIG_T)); + + + `uvm_object_param_utils( fuse_ctrl_env_sequence_base #( + CONFIG_T + ) ); + + +// This fuse_ctrl_env_sequence_base contains a handle to a fuse_ctrl_env_configuration object +// named configuration. This configuration variable contains a handle to each +// sequencer within each agent within this environment and any sub-environments. +// The configuration object handle is automatically assigned in the pre_body in the +// base class of this sequence. The configuration handle is retrieved from the +// virtual sequencer that this sequence is started on. +// Available sequencer handles within the environment configuration: + + // Initiator agent sequencers in fuse_ctrl_environment: + // configuration.fuse_ctrl_rst_agent_config.sequencer + // configuration.fuse_ctrl_core_axi_write_in_if_agent_config.sequencer + // configuration.fuse_ctrl_prim_axi_write_in_if_agent_config.sequencer + // configuration.fuse_ctrl_core_axi_read_in_if_agent_config.sequencer + // configuration.fuse_ctrl_prim_axi_read_in_if_agent_config.sequencer + // configuration.fuse_ctrl_secreg_axi_read_in_if_agent_config.sequencer + // configuration.fuse_ctrl_lc_otp_in_if_agent_config.sequencer + // configuration.fuse_ctrl_in_if_agent_config.sequencer + + // Responder agent sequencers in fuse_ctrl_environment: + // configuration.fuse_ctrl_core_axi_write_out_if_agent_config.sequencer + // configuration.fuse_ctrl_prim_axi_write_out_if_agent_config.sequencer + // configuration.fuse_ctrl_core_axi_read_out_if_agent_config.sequencer + // configuration.fuse_ctrl_prim_axi_read_out_if_agent_config.sequencer + // configuration.fuse_ctrl_secreg_axi_read_out_if_agent_config.sequencer + // configuration.fuse_ctrl_lc_otp_out_if_agent_config.sequencer + // configuration.fuse_ctrl_out_if_agent_config.sequencer + + + typedef fuse_ctrl_rst_random_sequence fuse_ctrl_rst_agent_random_sequence_t; + fuse_ctrl_rst_agent_random_sequence_t fuse_ctrl_rst_agent_rand_seq; + + typedef fuse_ctrl_core_axi_write_in_random_sequence fuse_ctrl_core_axi_write_in_if_agent_random_sequence_t; + fuse_ctrl_core_axi_write_in_if_agent_random_sequence_t fuse_ctrl_core_axi_write_in_if_agent_rand_seq; + + + typedef fuse_ctrl_prim_axi_write_in_random_sequence fuse_ctrl_prim_axi_write_in_if_agent_random_sequence_t; + fuse_ctrl_prim_axi_write_in_if_agent_random_sequence_t fuse_ctrl_prim_axi_write_in_if_agent_rand_seq; + + + typedef fuse_ctrl_core_axi_read_in_random_sequence fuse_ctrl_core_axi_read_in_if_agent_random_sequence_t; + fuse_ctrl_core_axi_read_in_if_agent_random_sequence_t fuse_ctrl_core_axi_read_in_if_agent_rand_seq; + + + typedef fuse_ctrl_prim_axi_read_in_random_sequence fuse_ctrl_prim_axi_read_in_if_agent_random_sequence_t; + fuse_ctrl_prim_axi_read_in_if_agent_random_sequence_t fuse_ctrl_prim_axi_read_in_if_agent_rand_seq; + + + typedef fuse_ctrl_secreg_axi_read_in_random_sequence fuse_ctrl_secreg_axi_read_in_if_agent_random_sequence_t; + fuse_ctrl_secreg_axi_read_in_if_agent_random_sequence_t fuse_ctrl_secreg_axi_read_in_if_agent_rand_seq; + + + typedef fuse_ctrl_lc_otp_in_random_sequence fuse_ctrl_lc_otp_in_if_agent_random_sequence_t; + fuse_ctrl_lc_otp_in_if_agent_random_sequence_t fuse_ctrl_lc_otp_in_if_agent_rand_seq; + + + typedef fuse_ctrl_in_random_sequence fuse_ctrl_in_if_agent_random_sequence_t; + fuse_ctrl_in_if_agent_random_sequence_t fuse_ctrl_in_if_agent_rand_seq; + + + + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "" ); + super.new(name); + fuse_ctrl_rst_agent_rand_seq = fuse_ctrl_rst_agent_random_sequence_t::type_id::create("fuse_ctrl_rst_agent_rand_seq"); + fuse_ctrl_core_axi_write_in_if_agent_rand_seq = fuse_ctrl_core_axi_write_in_if_agent_random_sequence_t::type_id::create("fuse_ctrl_core_axi_write_in_if_agent_rand_seq"); + fuse_ctrl_prim_axi_write_in_if_agent_rand_seq = fuse_ctrl_prim_axi_write_in_if_agent_random_sequence_t::type_id::create("fuse_ctrl_prim_axi_write_in_if_agent_rand_seq"); + fuse_ctrl_core_axi_read_in_if_agent_rand_seq = fuse_ctrl_core_axi_read_in_if_agent_random_sequence_t::type_id::create("fuse_ctrl_core_axi_read_in_if_agent_rand_seq"); + fuse_ctrl_prim_axi_read_in_if_agent_rand_seq = fuse_ctrl_prim_axi_read_in_if_agent_random_sequence_t::type_id::create("fuse_ctrl_prim_axi_read_in_if_agent_rand_seq"); + fuse_ctrl_secreg_axi_read_in_if_agent_rand_seq = fuse_ctrl_secreg_axi_read_in_if_agent_random_sequence_t::type_id::create("fuse_ctrl_secreg_axi_read_in_if_agent_rand_seq"); + fuse_ctrl_lc_otp_in_if_agent_rand_seq = fuse_ctrl_lc_otp_in_if_agent_random_sequence_t::type_id::create("fuse_ctrl_lc_otp_in_if_agent_rand_seq"); + fuse_ctrl_in_if_agent_rand_seq = fuse_ctrl_in_if_agent_random_sequence_t::type_id::create("fuse_ctrl_in_if_agent_rand_seq"); + + + endfunction + + virtual task body(); + + if ( configuration.fuse_ctrl_rst_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_rst_agent_rand_seq.start(configuration.fuse_ctrl_rst_agent_config.sequencer); + if ( configuration.fuse_ctrl_core_axi_write_in_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_core_axi_write_in_if_agent_rand_seq.start(configuration.fuse_ctrl_core_axi_write_in_if_agent_config.sequencer); + if ( configuration.fuse_ctrl_prim_axi_write_in_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_prim_axi_write_in_if_agent_rand_seq.start(configuration.fuse_ctrl_prim_axi_write_in_if_agent_config.sequencer); + if ( configuration.fuse_ctrl_core_axi_read_in_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_core_axi_read_in_if_agent_rand_seq.start(configuration.fuse_ctrl_core_axi_read_in_if_agent_config.sequencer); + if ( configuration.fuse_ctrl_prim_axi_read_in_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_prim_axi_read_in_if_agent_rand_seq.start(configuration.fuse_ctrl_prim_axi_read_in_if_agent_config.sequencer); + if ( configuration.fuse_ctrl_secreg_axi_read_in_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_secreg_axi_read_in_if_agent_rand_seq.start(configuration.fuse_ctrl_secreg_axi_read_in_if_agent_config.sequencer); + if ( configuration.fuse_ctrl_lc_otp_in_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_lc_otp_in_if_agent_rand_seq.start(configuration.fuse_ctrl_lc_otp_in_if_agent_config.sequencer); + if ( configuration.fuse_ctrl_in_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_in_if_agent_rand_seq.start(configuration.fuse_ctrl_in_if_agent_config.sequencer); + + + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_typedefs.svh new file mode 100644 index 000000000..79d1b10a2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the environment package. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + // pragma uvmf custom additional begin + // pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_environment.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_environment.svh new file mode 100644 index 000000000..e93ad4bd9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_environment.svh @@ -0,0 +1,215 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This environment contains all agents, predictors and +// scoreboards required for the block level design. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class fuse_ctrl_environment extends uvmf_environment_base #( + .CONFIG_T( fuse_ctrl_env_configuration + )); + `uvm_component_utils( fuse_ctrl_environment ) + + + + + + typedef fuse_ctrl_rst_agent fuse_ctrl_rst_agent_t; + fuse_ctrl_rst_agent_t fuse_ctrl_rst_agent; + + typedef fuse_ctrl_core_axi_write_in_agent fuse_ctrl_core_axi_write_in_if_agent_t; + fuse_ctrl_core_axi_write_in_if_agent_t fuse_ctrl_core_axi_write_in_if_agent; + + typedef fuse_ctrl_core_axi_write_out_agent fuse_ctrl_core_axi_write_out_if_agent_t; + fuse_ctrl_core_axi_write_out_if_agent_t fuse_ctrl_core_axi_write_out_if_agent; + + typedef fuse_ctrl_prim_axi_write_in_agent fuse_ctrl_prim_axi_write_in_if_agent_t; + fuse_ctrl_prim_axi_write_in_if_agent_t fuse_ctrl_prim_axi_write_in_if_agent; + + typedef fuse_ctrl_prim_axi_write_out_agent fuse_ctrl_prim_axi_write_out_if_agent_t; + fuse_ctrl_prim_axi_write_out_if_agent_t fuse_ctrl_prim_axi_write_out_if_agent; + + typedef fuse_ctrl_core_axi_read_in_agent fuse_ctrl_core_axi_read_in_if_agent_t; + fuse_ctrl_core_axi_read_in_if_agent_t fuse_ctrl_core_axi_read_in_if_agent; + + typedef fuse_ctrl_core_axi_read_out_agent fuse_ctrl_core_axi_read_out_if_agent_t; + fuse_ctrl_core_axi_read_out_if_agent_t fuse_ctrl_core_axi_read_out_if_agent; + + typedef fuse_ctrl_prim_axi_read_in_agent fuse_ctrl_prim_axi_read_in_if_agent_t; + fuse_ctrl_prim_axi_read_in_if_agent_t fuse_ctrl_prim_axi_read_in_if_agent; + + typedef fuse_ctrl_prim_axi_read_out_agent fuse_ctrl_prim_axi_read_out_if_agent_t; + fuse_ctrl_prim_axi_read_out_if_agent_t fuse_ctrl_prim_axi_read_out_if_agent; + + typedef fuse_ctrl_secreg_axi_read_in_agent fuse_ctrl_secreg_axi_read_in_if_agent_t; + fuse_ctrl_secreg_axi_read_in_if_agent_t fuse_ctrl_secreg_axi_read_in_if_agent; + + typedef fuse_ctrl_secreg_axi_read_out_agent fuse_ctrl_secreg_axi_read_out_if_agent_t; + fuse_ctrl_secreg_axi_read_out_if_agent_t fuse_ctrl_secreg_axi_read_out_if_agent; + + typedef fuse_ctrl_lc_otp_in_agent fuse_ctrl_lc_otp_in_if_agent_t; + fuse_ctrl_lc_otp_in_if_agent_t fuse_ctrl_lc_otp_in_if_agent; + + typedef fuse_ctrl_lc_otp_out_agent fuse_ctrl_lc_otp_out_if_agent_t; + fuse_ctrl_lc_otp_out_if_agent_t fuse_ctrl_lc_otp_out_if_agent; + + typedef fuse_ctrl_in_agent fuse_ctrl_in_if_agent_t; + fuse_ctrl_in_if_agent_t fuse_ctrl_in_if_agent; + + typedef fuse_ctrl_out_agent fuse_ctrl_out_if_agent_t; + fuse_ctrl_out_if_agent_t fuse_ctrl_out_if_agent; + + + + + typedef fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T) + ) + fuse_ctrl_pred_t; + fuse_ctrl_pred_t fuse_ctrl_pred; + typedef fuse_ctrl_scoreboard #( + .CONFIG_T(CONFIG_T) + ) + fuse_ctrl_sb_t; + fuse_ctrl_sb_t fuse_ctrl_sb; + + + + + typedef uvmf_virtual_sequencer_base #(.CONFIG_T(fuse_ctrl_env_configuration)) fuse_ctrl_vsqr_t; + fuse_ctrl_vsqr_t vsqr; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// FUNCTION: build_phase() +// This function builds all components within this environment. +// + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + fuse_ctrl_rst_agent = fuse_ctrl_rst_agent_t::type_id::create("fuse_ctrl_rst_agent",this); + fuse_ctrl_rst_agent.set_config(configuration.fuse_ctrl_rst_agent_config); + fuse_ctrl_core_axi_write_in_if_agent = fuse_ctrl_core_axi_write_in_if_agent_t::type_id::create("fuse_ctrl_core_axi_write_in_if_agent",this); + fuse_ctrl_core_axi_write_in_if_agent.set_config(configuration.fuse_ctrl_core_axi_write_in_if_agent_config); + fuse_ctrl_core_axi_write_out_if_agent = fuse_ctrl_core_axi_write_out_if_agent_t::type_id::create("fuse_ctrl_core_axi_write_out_if_agent",this); + fuse_ctrl_core_axi_write_out_if_agent.set_config(configuration.fuse_ctrl_core_axi_write_out_if_agent_config); + fuse_ctrl_prim_axi_write_in_if_agent = fuse_ctrl_prim_axi_write_in_if_agent_t::type_id::create("fuse_ctrl_prim_axi_write_in_if_agent",this); + fuse_ctrl_prim_axi_write_in_if_agent.set_config(configuration.fuse_ctrl_prim_axi_write_in_if_agent_config); + fuse_ctrl_prim_axi_write_out_if_agent = fuse_ctrl_prim_axi_write_out_if_agent_t::type_id::create("fuse_ctrl_prim_axi_write_out_if_agent",this); + fuse_ctrl_prim_axi_write_out_if_agent.set_config(configuration.fuse_ctrl_prim_axi_write_out_if_agent_config); + fuse_ctrl_core_axi_read_in_if_agent = fuse_ctrl_core_axi_read_in_if_agent_t::type_id::create("fuse_ctrl_core_axi_read_in_if_agent",this); + fuse_ctrl_core_axi_read_in_if_agent.set_config(configuration.fuse_ctrl_core_axi_read_in_if_agent_config); + fuse_ctrl_core_axi_read_out_if_agent = fuse_ctrl_core_axi_read_out_if_agent_t::type_id::create("fuse_ctrl_core_axi_read_out_if_agent",this); + fuse_ctrl_core_axi_read_out_if_agent.set_config(configuration.fuse_ctrl_core_axi_read_out_if_agent_config); + fuse_ctrl_prim_axi_read_in_if_agent = fuse_ctrl_prim_axi_read_in_if_agent_t::type_id::create("fuse_ctrl_prim_axi_read_in_if_agent",this); + fuse_ctrl_prim_axi_read_in_if_agent.set_config(configuration.fuse_ctrl_prim_axi_read_in_if_agent_config); + fuse_ctrl_prim_axi_read_out_if_agent = fuse_ctrl_prim_axi_read_out_if_agent_t::type_id::create("fuse_ctrl_prim_axi_read_out_if_agent",this); + fuse_ctrl_prim_axi_read_out_if_agent.set_config(configuration.fuse_ctrl_prim_axi_read_out_if_agent_config); + fuse_ctrl_secreg_axi_read_in_if_agent = fuse_ctrl_secreg_axi_read_in_if_agent_t::type_id::create("fuse_ctrl_secreg_axi_read_in_if_agent",this); + fuse_ctrl_secreg_axi_read_in_if_agent.set_config(configuration.fuse_ctrl_secreg_axi_read_in_if_agent_config); + fuse_ctrl_secreg_axi_read_out_if_agent = fuse_ctrl_secreg_axi_read_out_if_agent_t::type_id::create("fuse_ctrl_secreg_axi_read_out_if_agent",this); + fuse_ctrl_secreg_axi_read_out_if_agent.set_config(configuration.fuse_ctrl_secreg_axi_read_out_if_agent_config); + fuse_ctrl_lc_otp_in_if_agent = fuse_ctrl_lc_otp_in_if_agent_t::type_id::create("fuse_ctrl_lc_otp_in_if_agent",this); + fuse_ctrl_lc_otp_in_if_agent.set_config(configuration.fuse_ctrl_lc_otp_in_if_agent_config); + fuse_ctrl_lc_otp_out_if_agent = fuse_ctrl_lc_otp_out_if_agent_t::type_id::create("fuse_ctrl_lc_otp_out_if_agent",this); + fuse_ctrl_lc_otp_out_if_agent.set_config(configuration.fuse_ctrl_lc_otp_out_if_agent_config); + fuse_ctrl_in_if_agent = fuse_ctrl_in_if_agent_t::type_id::create("fuse_ctrl_in_if_agent",this); + fuse_ctrl_in_if_agent.set_config(configuration.fuse_ctrl_in_if_agent_config); + fuse_ctrl_out_if_agent = fuse_ctrl_out_if_agent_t::type_id::create("fuse_ctrl_out_if_agent",this); + fuse_ctrl_out_if_agent.set_config(configuration.fuse_ctrl_out_if_agent_config); + fuse_ctrl_pred = fuse_ctrl_pred_t::type_id::create("fuse_ctrl_pred",this); + fuse_ctrl_pred.configuration = configuration; + fuse_ctrl_sb = fuse_ctrl_sb_t::type_id::create("fuse_ctrl_sb",this); + fuse_ctrl_sb.configuration = configuration; + + vsqr = fuse_ctrl_vsqr_t::type_id::create("vsqr", this); + vsqr.set_config(configuration); + configuration.set_vsqr(vsqr); + + // pragma uvmf custom build_phase begin + // pragma uvmf custom build_phase end + endfunction + +// **************************************************************************** +// FUNCTION: connect_phase() +// This function makes all connections within this environment. Connections +// typically inclue agent to predictor, predictor to scoreboard and scoreboard +// to agent. +// + virtual function void connect_phase(uvm_phase phase); +// pragma uvmf custom connect_phase_pre_super begin +// pragma uvmf custom connect_phase_pre_super end + super.connect_phase(phase); + fuse_ctrl_rst_agent.monitored_ap.connect(fuse_ctrl_pred.fuse_ctrl_rst_agent_ae); + fuse_ctrl_pred.fuse_ctrl_sb_ap.connect(fuse_ctrl_sb.expected_analysis_export); + fuse_ctrl_core_axi_write_in_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_core_axi_write_out_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_core_axi_read_in_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_core_axi_read_out_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_prim_axi_write_in_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_prim_axi_write_out_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_prim_axi_read_in_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_prim_axi_read_out_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_secreg_axi_read_in_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_secreg_axi_read_out_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_lc_otp_in_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_lc_otp_out_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_in_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_out_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + // pragma uvmf custom reg_model_connect_phase begin + // pragma uvmf custom reg_model_connect_phase end + endfunction + +// **************************************************************************** +// FUNCTION: end_of_simulation_phase() +// This function is executed just prior to executing run_phase. This function +// was added to the environment to sample environment configuration settings +// just before the simulation exits time 0. The configuration structure is +// randomized in the build phase before the environment structure is constructed. +// Configuration variables can be customized after randomization in the build_phase +// of the extended test. +// If a sequence modifies values in the configuration structure then the sequence is +// responsible for sampling the covergroup in the configuration if required. +// + virtual function void start_of_simulation_phase(uvm_phase phase); + configuration.fuse_ctrl_configuration_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_predictor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_predictor.svh new file mode 100644 index 000000000..0250853d4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_predictor.svh @@ -0,0 +1,323 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +// +// DESCRIPTION: This analysis component contains analysis_exports for receiving +// data and analysis_ports for sending data. +// +// This analysis component has the following analysis_exports that receive the +// listed transaction type. +// +// fuse_ctrl_rst_agent_ae receives transactions of type fuse_ctrl_rst_transaction +// fuse_ctrl_core_axi_write_agent_ae receives transactions of type fuse_ctrl_write_transaction +// fuse_ctrl_prim_axi_write_agent_ae receives transactions of type fuse_ctrl_write_transaction +// fuse_ctrl_core_axi_read_agent_ae receives transactions of type fuse_ctrl_read_transaction +// fuse_ctrl_prim_axi_read_agent_ae receives transactions of type fuse_ctrl_read_transaction +// fuse_ctrl_secreg_axi_read_agent_ae receives transactions of type fuse_ctrl_read_transaction +// fuse_ctrl_lc_otp_if_agent_ae receives transactions of type fuse_ctrl_read_transaction +// +// This analysis component has the following analysis_ports that can broadcast +// the listed transaction type. +// +// fuse_ctrl_sb_ap broadcasts transactions of type fuse_ctrl_read_transaction +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class fuse_ctrl_predictor #( + type CONFIG_T, + type BASE_T = uvm_component + ) + extends BASE_T; + + // Factory registration of this class + `uvm_component_param_utils( fuse_ctrl_predictor #( + CONFIG_T, + BASE_T + ) +) + + + // Instantiate a handle to the configuration of the environment in which this component resides + CONFIG_T configuration; + + + // Instantiate the analysis exports + uvm_analysis_imp_fuse_ctrl_rst_agent_ae #(fuse_ctrl_rst_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_rst_agent_ae; + uvm_analysis_imp_fuse_ctrl_core_axi_write_agent_ae #(fuse_ctrl_write_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_core_axi_write_agent_ae; + uvm_analysis_imp_fuse_ctrl_prim_axi_write_agent_ae #(fuse_ctrl_write_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_prim_axi_write_agent_ae; + uvm_analysis_imp_fuse_ctrl_core_axi_read_agent_ae #(fuse_ctrl_read_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_core_axi_read_agent_ae; + uvm_analysis_imp_fuse_ctrl_prim_axi_read_agent_ae #(fuse_ctrl_read_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_prim_axi_read_agent_ae; + uvm_analysis_imp_fuse_ctrl_secreg_axi_read_agent_ae #(fuse_ctrl_read_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_secreg_axi_read_agent_ae; + uvm_analysis_imp_fuse_ctrl_lc_otp_if_agent_ae #(fuse_ctrl_read_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_lc_otp_if_agent_ae; + + + // Instantiate the analysis ports + uvm_analysis_port #(fuse_ctrl_read_transaction) fuse_ctrl_sb_ap; + + + // Transaction variable for predicted values to be sent out fuse_ctrl_sb_ap + // Once a transaction is sent through an analysis_port, another transaction should + // be constructed for the next predicted transaction. + typedef fuse_ctrl_read_transaction fuse_ctrl_sb_ap_output_transaction_t; + fuse_ctrl_sb_ap_output_transaction_t fuse_ctrl_sb_ap_output_transaction; + // Code for sending output transaction out through fuse_ctrl_sb_ap + // fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + + // Define transaction handles for debug visibility + fuse_ctrl_rst_transaction fuse_ctrl_rst_agent_ae_debug; + fuse_ctrl_write_transaction fuse_ctrl_core_axi_write_agent_ae_debug; + fuse_ctrl_write_transaction fuse_ctrl_prim_axi_write_agent_ae_debug; + fuse_ctrl_read_transaction fuse_ctrl_core_axi_read_agent_ae_debug; + fuse_ctrl_read_transaction fuse_ctrl_prim_axi_read_agent_ae_debug; + fuse_ctrl_read_transaction fuse_ctrl_secreg_axi_read_agent_ae_debug; + fuse_ctrl_read_transaction fuse_ctrl_lc_otp_if_agent_ae_debug; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // FUNCTION: new + function new(string name, uvm_component parent); + super.new(name,parent); + `uvm_warning("PREDICTOR_REVIEW", "This predictor has been created either through generation or re-generation with merging. Remove this warning after the predictor has been reviewed.") + // pragma uvmf custom new begin + // pragma uvmf custom new end + endfunction + + // FUNCTION: build_phase + virtual function void build_phase (uvm_phase phase); + + fuse_ctrl_rst_agent_ae = new("fuse_ctrl_rst_agent_ae", this); + fuse_ctrl_core_axi_write_agent_ae = new("fuse_ctrl_core_axi_write_agent_ae", this); + fuse_ctrl_prim_axi_write_agent_ae = new("fuse_ctrl_prim_axi_write_agent_ae", this); + fuse_ctrl_core_axi_read_agent_ae = new("fuse_ctrl_core_axi_read_agent_ae", this); + fuse_ctrl_prim_axi_read_agent_ae = new("fuse_ctrl_prim_axi_read_agent_ae", this); + fuse_ctrl_secreg_axi_read_agent_ae = new("fuse_ctrl_secreg_axi_read_agent_ae", this); + fuse_ctrl_lc_otp_if_agent_ae = new("fuse_ctrl_lc_otp_if_agent_ae", this); + fuse_ctrl_sb_ap =new("fuse_ctrl_sb_ap", this ); + // pragma uvmf custom build_phase begin + // pragma uvmf custom build_phase end + endfunction + + // FUNCTION: write_fuse_ctrl_rst_agent_ae + // Transactions received through fuse_ctrl_rst_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_rst_agent_ae(fuse_ctrl_rst_transaction t); + // pragma uvmf custom fuse_ctrl_rst_agent_ae_predictor begin + fuse_ctrl_rst_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_rst_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_rst_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_rst_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_core_axi_write_agent_ae + // Transactions received through fuse_ctrl_core_axi_write_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_core_axi_write_agent_ae(fuse_ctrl_write_transaction t); + // pragma uvmf custom fuse_ctrl_core_axi_write_agent_ae_predictor begin + fuse_ctrl_core_axi_write_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_core_axi_write_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_core_axi_write_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_core_axi_write_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_prim_axi_write_agent_ae + // Transactions received through fuse_ctrl_prim_axi_write_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_prim_axi_write_agent_ae(fuse_ctrl_write_transaction t); + // pragma uvmf custom fuse_ctrl_prim_axi_write_agent_ae_predictor begin + fuse_ctrl_prim_axi_write_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_prim_axi_write_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_prim_axi_write_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_prim_axi_write_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_core_axi_read_agent_ae + // Transactions received through fuse_ctrl_core_axi_read_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_core_axi_read_agent_ae(fuse_ctrl_read_transaction t); + // pragma uvmf custom fuse_ctrl_core_axi_read_agent_ae_predictor begin + fuse_ctrl_core_axi_read_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_core_axi_read_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_core_axi_read_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_core_axi_read_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_prim_axi_read_agent_ae + // Transactions received through fuse_ctrl_prim_axi_read_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_prim_axi_read_agent_ae(fuse_ctrl_read_transaction t); + // pragma uvmf custom fuse_ctrl_prim_axi_read_agent_ae_predictor begin + fuse_ctrl_prim_axi_read_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_prim_axi_read_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_prim_axi_read_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_prim_axi_read_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_secreg_axi_read_agent_ae + // Transactions received through fuse_ctrl_secreg_axi_read_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_secreg_axi_read_agent_ae(fuse_ctrl_read_transaction t); + // pragma uvmf custom fuse_ctrl_secreg_axi_read_agent_ae_predictor begin + fuse_ctrl_secreg_axi_read_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_secreg_axi_read_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_secreg_axi_read_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_secreg_axi_read_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_lc_otp_if_agent_ae + // Transactions received through fuse_ctrl_lc_otp_if_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_lc_otp_if_agent_ae(fuse_ctrl_read_transaction t); + // pragma uvmf custom fuse_ctrl_lc_otp_if_agent_ae_predictor begin + fuse_ctrl_lc_otp_if_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_lc_otp_if_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_lc_otp_if_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_lc_otp_if_agent_ae_predictor end + endfunction + + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_scoreboard.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_scoreboard.svh new file mode 100644 index 000000000..319d51fae --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_scoreboard.svh @@ -0,0 +1,149 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This analysis component contains analysis_exports for receiving +// data and analysis_ports for sending data. +// +// This analysis component has the following analysis_exports that receive the +// listed transaction type. +// +// expected_analysis_export receives transactions of type fuse_ctrl_read_transaction +// actual_analysis_export receives transactions of type fuse_ctrl_read_transaction +// +// This analysis component has the following analysis_ports that can broadcast +// the listed transaction type. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +class fuse_ctrl_scoreboard #( + type CONFIG_T, + type BASE_T = uvm_component + ) + extends BASE_T; + + // Factory registration of this class + `uvm_component_param_utils( fuse_ctrl_scoreboard #( + CONFIG_T, + BASE_T + ) +) + + + // Instantiate a handle to the configuration of the environment in which this component resides + CONFIG_T configuration; + + + // Instantiate the analysis exports + uvm_analysis_imp_expected_analysis_export #(fuse_ctrl_read_transaction, fuse_ctrl_scoreboard #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) expected_analysis_export; + uvm_analysis_imp_actual_analysis_export #(fuse_ctrl_read_transaction, fuse_ctrl_scoreboard #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) actual_analysis_export; + + + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // FUNCTION: new + function new(string name, uvm_component parent); + super.new(name,parent); + // pragma uvmf custom new begin + // pragma uvmf custom new end + endfunction + + // FUNCTION: build_phase + virtual function void build_phase (uvm_phase phase); + + expected_analysis_export = new("expected_analysis_export", this); + actual_analysis_export = new("actual_analysis_export", this); + // pragma uvmf custom build_phase begin + // pragma uvmf custom build_phase end + endfunction + + // FUNCTION: write_expected_analysis_export + // Transactions received through expected_analysis_export initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_expected_analysis_export(fuse_ctrl_read_transaction t); + // pragma uvmf custom expected_analysis_export_scoreboard begin + `uvm_info("PRED", "Transaction Received through expected_analysis_export", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // UVMF_CHANGE_ME: Implement custom scoreboard here. + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "UVMF_CHANGE_ME: The fuse_ctrl_scoreboard::write_expected_analysis_export function needs to be completed with custom scoreboard functionality",UVM_NONE) + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "******************************************************************************************************",UVM_NONE) + + // pragma uvmf custom expected_analysis_export_scoreboard end + endfunction + + // FUNCTION: write_actual_analysis_export + // Transactions received through actual_analysis_export initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_actual_analysis_export(fuse_ctrl_read_transaction t); + // pragma uvmf custom actual_analysis_export_scoreboard begin + `uvm_info("PRED", "Transaction Received through actual_analysis_export", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // UVMF_CHANGE_ME: Implement custom scoreboard here. + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "UVMF_CHANGE_ME: The fuse_ctrl_scoreboard::write_actual_analysis_export function needs to be completed with custom scoreboard functionality",UVM_NONE) + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "******************************************************************************************************",UVM_NONE) + + // pragma uvmf custom actual_analysis_export_scoreboard end + endfunction + + + + // FUNCTION: extract_phase + virtual function void extract_phase(uvm_phase phase); +// pragma uvmf custom extract_phase begin + super.extract_phase(phase); +// pragma uvmf custom extract_phase end + endfunction + + // FUNCTION: check_phase + virtual function void check_phase(uvm_phase phase); +// pragma uvmf custom check_phase begin + super.check_phase(phase); +// pragma uvmf custom check_phase end + endfunction + + // FUNCTION: report_phase + virtual function void report_phase(uvm_phase phase); +// pragma uvmf custom report_phase begin + super.report_phase(phase); +// pragma uvmf custom report_phase end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_environment.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_environment.yaml new file mode 100644 index 000000000..98e8861d4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_environment.yaml @@ -0,0 +1,116 @@ +uvmf: + environments: + fuse_ctrl: + agents: + - initiator_responder: INITIATOR + name: fuse_ctrl_rst_agent + type: fuse_ctrl_rst + - initiator_responder: INITIATOR + name: fuse_ctrl_core_axi_write_in_if_agent + type: fuse_ctrl_core_axi_write_in + - initiator_responder: RESPONDER + name: fuse_ctrl_core_axi_write_out_if_agent + type: fuse_ctrl_core_axi_write_out + - initiator_responder: INITIATOR + name: fuse_ctrl_prim_axi_write_in_if_agent + type: fuse_ctrl_prim_axi_write_in + - initiator_responder: RESPONDER + name: fuse_ctrl_prim_axi_write_out_if_agent + type: fuse_ctrl_prim_axi_write_out + - initiator_responder: INITIATOR + name: fuse_ctrl_core_axi_read_in_if_agent + type: fuse_ctrl_core_axi_read_in + - initiator_responder: RESPONDER + name: fuse_ctrl_core_axi_read_out_if_agent + type: fuse_ctrl_core_axi_read_out + - initiator_responder: INITIATOR + name: fuse_ctrl_prim_axi_read_in_if_agent + type: fuse_ctrl_prim_axi_read_in + - initiator_responder: RESPONDER + name: fuse_ctrl_prim_axi_read_out_if_agent + type: fuse_ctrl_prim_axi_read_out + - initiator_responder: INITIATOR + name: fuse_ctrl_secreg_axi_read_in_if_agent + type: fuse_ctrl_secreg_axi_read_in + - initiator_responder: RESPONDER + name: fuse_ctrl_secreg_axi_read_out_if_agent + type: fuse_ctrl_secreg_axi_read_out + - initiator_responder: INITIATOR + name: fuse_ctrl_lc_otp_in_if_agent + type: fuse_ctrl_lc_otp_in + - initiator_responder: RESPONDER + name: fuse_ctrl_lc_otp_out_if_agent + type: fuse_ctrl_lc_otp_out + - initiator_responder: INITIATOR + name: fuse_ctrl_in_if_agent + type: fuse_ctrl_in + - initiator_responder: RESPONDER + name: fuse_ctrl_out_if_agent + type: fuse_ctrl_out + analysis_components: + - name: fuse_ctrl_pred + parameters: [] + type: fuse_ctrl_predictor + - name: fuse_ctrl_sb + parameters: [] + type: fuse_ctrl_scoreboard + analysis_exports: [] + analysis_ports: [] + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + hvl_pkg_parameters: [] + non_uvmf_components: [] + parameters: [] + qvip_memory_agents: [] + scoreboards: [] + subenvs: [] + tlm_connections: + - driver: fuse_ctrl_rst_agent.monitored_ap + receiver: fuse_ctrl_pred.fuse_ctrl_rst_agent_ae + validate: 'True' + - driver: fuse_ctrl_pred.fuse_ctrl_sb_ap + receiver: fuse_ctrl_sb.expected_analysis_export + validate: 'True' + - driver: fuse_ctrl_core_axi_write_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_core_axi_write_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_core_axi_read_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_core_axi_read_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_prim_axi_write_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_prim_axi_write_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_prim_axi_read_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_prim_axi_read_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_secreg_axi_read_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_secreg_axi_read_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_lc_otp_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_lc_otp_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_predictor.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_predictor.yaml new file mode 100644 index 000000000..7832404a7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_predictor.yaml @@ -0,0 +1,23 @@ +uvmf: + util_components: + fuse_ctrl_predictor: + analysis_exports: + - name: fuse_ctrl_rst_agent_ae + type: fuse_ctrl_rst_transaction + - name: fuse_ctrl_core_axi_write_agent_ae + type: fuse_ctrl_write_transaction + - name: fuse_ctrl_prim_axi_write_agent_ae + type: fuse_ctrl_write_transaction + - name: fuse_ctrl_core_axi_read_agent_ae + type: fuse_ctrl_read_transaction + - name: fuse_ctrl_prim_axi_read_agent_ae + type: fuse_ctrl_read_transaction + - name: fuse_ctrl_secreg_axi_read_agent_ae + type: fuse_ctrl_read_transaction + - name: fuse_ctrl_lc_otp_if_agent_ae + type: fuse_ctrl_read_transaction + analysis_ports: + - name: fuse_ctrl_sb_ap + type: fuse_ctrl_read_transaction + existing_library_component: 'True' + type: predictor diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_scoreboard.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_scoreboard.yaml new file mode 100644 index 000000000..05167c417 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_scoreboard.yaml @@ -0,0 +1,10 @@ +uvmf: + util_components: + fuse_ctrl_scoreboard: + analysis_exports: + - name: expected_analysis_export + type: fuse_ctrl_read_transaction + - name: actual_analysis_export + type: fuse_ctrl_read_transaction + existing_library_component: 'True' + type: scoreboard diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/.project new file mode 100644 index 000000000..f5be90c8f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + core_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..5646c3df8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..9974230a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# core_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +core_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f + +core_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f + +core_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f + +COMP_core_axi_read_if_PKG_TGT_0 = q_comp_core_axi_read_if_pkg +COMP_core_axi_read_if_PKG_TGT_1 = v_comp_core_axi_read_if_pkg +COMP_core_axi_read_if_PKG_TGT = $(COMP_core_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_core_axi_read_if_pkg: $(COMP_core_axi_read_if_PKG_TGT) + +q_comp_core_axi_read_if_pkg: + $(HDL_COMP_CMD) $(core_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_read_if_PKG) + $(HDL_COMP_CMD) $(core_axi_read_if_PKG_XRTL) + +v_comp_core_axi_read_if_pkg: + $(HVL_COMP_CMD) $(core_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_read_if_PKG) + $(VELANALYZE_CMD) $(core_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(core_axi_read_if_PKG) + $(HDL_COMP_CMD) $(core_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export core_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_core_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_core_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_core_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_core_axi_read_if_pkg += -I$(core_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_core_axi_read_if_pkg += $(core_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_core_axi_read_if_pkg += \ + \ + -o .so + +comp_core_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_core_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_core_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_core_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_core_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..bfe89a8e0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of core_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if.compile new file mode 100644 index 000000000..5aa3fb538 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - core_axi_read_if_hvl.compile + - core_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..58385ae7f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use core_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/core_axi_read_if_if.sv +src/core_axi_read_if_driver_bfm.sv +src/core_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_common.compile new file mode 100644 index 000000000..9374bee40 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..6dfc76a5f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..c3606bba2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..6c5bc4baa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hdl.compile new file mode 100644 index 000000000..6665d30a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./core_axi_read_if_common.compile +incdir: + - . +src: + - src/core_axi_read_if_if.sv + - src/core_axi_read_if_monitor_bfm.sv + - src/core_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hvl.compile new file mode 100644 index 000000000..ffce38e1b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./core_axi_read_if_common.compile +incdir: + - . +src: + - core_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.sv new file mode 100644 index 000000000..5be093439 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import core_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/core_axi_read_if_macros.svh" + + export core_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/core_axi_read_if_typedefs.svh" + `include "src/core_axi_read_if_transaction.svh" + + `include "src/core_axi_read_if_configuration.svh" + `include "src/core_axi_read_if_driver.svh" + `include "src/core_axi_read_if_monitor.svh" + + `include "src/core_axi_read_if_transaction_coverage.svh" + `include "src/core_axi_read_if_sequence_base.svh" + `include "src/core_axi_read_if_random_sequence.svh" + + `include "src/core_axi_read_if_responder_sequence.svh" + `include "src/core_axi_read_if2reg_adapter.svh" + + `include "src/core_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..54878b149 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use core_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +core_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..738469493 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/core_axi_read_if_typedefs_hdl.svh" + `include "src/core_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..289cfb15d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..25ac277ab --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..872ddc7d8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the core_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( core_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "core_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : core_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_agent.svh new file mode 100644 index 000000000..74e70677a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(core_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(core_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(core_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( core_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_configuration.svh new file mode 100644 index 000000000..96293f076 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the core_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual core_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual core_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup core_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in core_axi_read_if_macros.svh + `core_axi_read_if_CONFIGURATION_STRUCT + core_axi_read_if_configuration_s core_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a core_axi_read_if_configuration_s + // structure. The function returns the handle to the core_axi_read_if_configuration_struct. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + core_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + core_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + core_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + core_axi_read_if_configuration_cg.set_inst_name($sformatf("core_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver.svh new file mode 100644 index 000000000..2da1ca1ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual core_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( core_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in core_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm +// to communicate initiator driven data to core_axi_read_if_driver_bfm. +`core_axi_read_if_INITIATOR_STRUCT + core_axi_read_if_initiator_s core_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm +// to communicate Responder driven data to core_axi_read_if_driver_bfm. +`core_axi_read_if_RESPONDER_STRUCT + core_axi_read_if_responder_s core_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + core_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(core_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + core_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(core_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..cfce6e49c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the core_axi_read_if signal driving. It is +// accessed by the uvm core_axi_read_if driver through a virtual interface +// handle in the core_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type core_axi_read_if_if. +// +// Input signals from the core_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within core_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_read_if_pkg_hdl::*; +`include "src/core_axi_read_if_macros.svh" + +interface core_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (core_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute core_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + core_axi_read_if_pkg::core_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in core_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from core_axi_read_if_driver to this BFM + // **************************************************************************** + `core_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm + // to communicate initiator driven data to core_axi_read_if_driver_bfm. + `core_axi_read_if_INITIATOR_STRUCT + core_axi_read_if_initiator_s initiator_struct; + // Responder macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm + // to communicate Responder driven data to core_axi_read_if_driver_bfm. + `core_axi_read_if_RESPONDER_STRUCT + core_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(core_axi_read_if_configuration_s core_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input core_axi_read_if_initiator_s core_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output core_axi_read_if_responder_s core_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the core_axi_read_if_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Members within the core_axi_read_if_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + initiator_struct = core_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // core_axi_read_if_responder_struct.xyz = arready_i; // + // core_axi_read_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // core_axi_read_if_responder_struct.xyz = rresp_i; // + // core_axi_read_if_responder_struct.xyz = rid_i; // + // core_axi_read_if_responder_struct.xyz = rlast_i; // + // core_axi_read_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // core_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = core_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output core_axi_read_if_initiator_s core_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input core_axi_read_if_responder_s core_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the core_axi_read_if_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Variables within the core_axi_read_if_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= core_axi_read_if_initiator_struct.xyz; // + // rdata_o <= core_axi_read_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= core_axi_read_if_initiator_struct.xyz; // + // rid_o <= core_axi_read_if_initiator_struct.xyz; // + // rlast_o <= core_axi_read_if_initiator_struct.xyz; // + // rvalid_o <= core_axi_read_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the core_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the core_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_if.sv new file mode 100644 index 000000000..bd1242f03 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the core_axi_read_if interface signals. +// It is instantiated once per core_axi_read_if bus. Bus Functional Models, +// BFM's named core_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named core_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(core_axi_read_if_bus.arready), // Agent input +// .dut_signal_port(core_axi_read_if_bus.rdata), // Agent input +// .dut_signal_port(core_axi_read_if_bus.rresp), // Agent input +// .dut_signal_port(core_axi_read_if_bus.rid), // Agent input +// .dut_signal_port(core_axi_read_if_bus.rlast), // Agent input +// .dut_signal_port(core_axi_read_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import core_axi_read_if_pkg_hdl::*; + +interface core_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_macros.svh new file mode 100644 index 000000000..61c6fdb62 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the core_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the core_axi_read_if_configuration class. +// + `define core_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } core_axi_read_if_configuration_s; + + `define core_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function core_axi_read_if_configuration_s to_struct();\ + core_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( core_axi_read_if_configuration_struct );\ + endfunction + + `define core_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(core_axi_read_if_configuration_s core_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = core_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the core_axi_read_if_transaction class. +// + `define core_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } core_axi_read_if_monitor_s; + + `define core_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function core_axi_read_if_monitor_s to_monitor_struct();\ + core_axi_read_if_monitor_struct = \ + { \ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( core_axi_read_if_monitor_struct);\ + endfunction\ + + `define core_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(core_axi_read_if_monitor_s core_axi_read_if_monitor_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = core_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the core_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } core_axi_read_if_initiator_s; + + `define core_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function core_axi_read_if_initiator_s to_initiator_struct();\ + core_axi_read_if_initiator_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( core_axi_read_if_initiator_struct);\ + endfunction + + `define core_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(core_axi_read_if_initiator_s core_axi_read_if_initiator_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = core_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the core_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } core_axi_read_if_responder_s; + + `define core_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function core_axi_read_if_responder_s to_responder_struct();\ + core_axi_read_if_responder_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( core_axi_read_if_responder_struct);\ + endfunction + + `define core_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(core_axi_read_if_responder_s core_axi_read_if_responder_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = core_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor.svh new file mode 100644 index 000000000..a26f7ab33 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives core_axi_read_if transactions observed by the +// core_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual core_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`core_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the core_axi_read_if_monitor_struct. + virtual function void notify_transaction(input core_axi_read_if_monitor_s core_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(core_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..3940f5ab1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the core_axi_read_if signal monitoring. +// It is accessed by the uvm core_axi_read_if monitor through a virtual +// interface handle in the core_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type core_axi_read_if_if. +// +// Input signals from the core_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the core_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_read_if_pkg_hdl::*; +`include "src/core_axi_read_if_macros.svh" + + +interface core_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( core_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute core_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`core_axi_read_if_MONITOR_STRUCT + core_axi_read_if_monitor_s core_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `core_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + core_axi_read_if_pkg::core_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( core_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( core_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(core_axi_read_if_configuration_s core_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output core_axi_read_if_monitor_s core_axi_read_if_monitor_struct); + // + // Available struct members: + // // core_axi_read_if_monitor_struct.core_arready + // // core_axi_read_if_monitor_struct.core_rdata + // // core_axi_read_if_monitor_struct.core_rresp + // // core_axi_read_if_monitor_struct.core_rid + // // core_axi_read_if_monitor_struct.core_rlast + // // core_axi_read_if_monitor_struct.core_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // core_axi_read_if_monitor_struct.xyz = arready_i; // + // core_axi_read_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // core_axi_read_if_monitor_struct.xyz = rresp_i; // + // core_axi_read_if_monitor_struct.xyz = rid_i; // + // core_axi_read_if_monitor_struct.xyz = rlast_i; // + // core_axi_read_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..9f52585cd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the core_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a core_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "core_axi_read_if_random_sequence::body()-core_axi_read_if_transaction randomization failed") + // Send the transaction to the core_axi_read_if_driver_bfm via the sequencer and core_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: core_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..a51c239e4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "core_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..39f9a15a4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_read_if_transaction_req_t; + core_axi_read_if_transaction_req_t req; + typedef core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_read_if_transaction_rsp_t; + core_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = core_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = core_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction.svh new file mode 100644 index 000000000..2b8fc724c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an core_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( core_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_arready ; + logic [DW-1:0] core_rdata ; + axi_pkg::axi_burst_e core_rresp ; + logic [IW-1:0] core_rid ; + logic core_rlast ; + logic core_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in core_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by core_axi_read_if_monitor and core_axi_read_if_monitor_bfm + // This struct is defined in core_axi_read_if_macros.svh + `core_axi_read_if_MONITOR_STRUCT + core_axi_read_if_monitor_s core_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a core_axi_read_if_monitor_s + // structure. The function returns the handle to the core_axi_read_if_monitor_struct. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm + // to communicate initiator driven data to core_axi_read_if_driver_bfm. + // This struct is defined in core_axi_read_if_macros.svh + `core_axi_read_if_INITIATOR_STRUCT + core_axi_read_if_initiator_s core_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a core_axi_read_if_initiator_s + // structure. The function returns the handle to the core_axi_read_if_initiator_struct. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm + // to communicate Responder driven data to core_axi_read_if_driver_bfm. + // This struct is defined in core_axi_read_if_macros.svh + `core_axi_read_if_RESPONDER_STRUCT + core_axi_read_if_responder_s core_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a core_axi_read_if_responder_s + // structure. The function returns the handle to the core_axi_read_if_responder_struct. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_arready:0x%x core_rdata:0x%x core_rresp:0x%x core_rid:0x%x core_rlast:0x%x core_rvalid:0x%x ",core_arready,core_rdata,core_rresp,core_rid,core_rlast,core_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_arready == RHS.core_arready) + &&(this.core_rdata == RHS.core_rdata) + &&(this.core_rresp == RHS.core_rresp) + &&(this.core_rid == RHS.core_rid) + &&(this.core_rlast == RHS.core_rlast) + &&(this.core_rvalid == RHS.core_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_arready = RHS.core_arready; + this.core_rdata = RHS.core_rdata; + this.core_rresp = RHS.core_rresp; + this.core_rid = RHS.core_rid; + this.core_rlast = RHS.core_rlast; + this.core_rvalid = RHS.core_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"core_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_arready,"core_arready"); + $add_attribute(transaction_view_h,core_rdata,"core_rdata"); + $add_attribute(transaction_view_h,core_rresp,"core_rresp"); + $add_attribute(transaction_view_h,core_rid,"core_rid"); + $add_attribute(transaction_view_h,core_rlast,"core_rlast"); + $add_attribute(transaction_view_h,core_rvalid,"core_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..0e45fd07d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records core_axi_read_if transaction information using +// a covergroup named core_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup core_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_arready: coverpoint coverage_trans.core_arready; + core_rdata: coverpoint coverage_trans.core_rdata; + core_rresp: coverpoint coverage_trans.core_rresp; + core_rid: coverpoint coverage_trans.core_rid; + core_rlast: coverpoint coverage_trans.core_rlast; + core_rvalid: coverpoint coverage_trans.core_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + core_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + core_axi_read_if_transaction_cg.set_inst_name($sformatf("core_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + core_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/yaml/core_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/yaml/core_axi_read_if_interface.yaml new file mode 100644 index 000000000..be65d5c34 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_if_pkg/yaml/core_axi_read_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + core_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/.project new file mode 100644 index 000000000..d9e187c97 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + core_axi_read_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/.svproject new file mode 100644 index 000000000..6620fd792 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/Makefile new file mode 100644 index 000000000..674d9fe11 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# core_axi_read_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +core_axi_read_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hvl.f + +core_axi_read_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hdl.f + +core_axi_read_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_xrtl.f + +COMP_core_axi_read_out_if_PKG_TGT_0 = q_comp_core_axi_read_out_if_pkg +COMP_core_axi_read_out_if_PKG_TGT_1 = v_comp_core_axi_read_out_if_pkg +COMP_core_axi_read_out_if_PKG_TGT = $(COMP_core_axi_read_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_core_axi_read_out_if_pkg: $(COMP_core_axi_read_out_if_PKG_TGT) + +q_comp_core_axi_read_out_if_pkg: + $(HDL_COMP_CMD) $(core_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(core_axi_read_out_if_PKG_XRTL) + +v_comp_core_axi_read_out_if_pkg: + $(HVL_COMP_CMD) $(core_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_read_out_if_PKG) + $(VELANALYZE_CMD) $(core_axi_read_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(core_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(core_axi_read_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export core_axi_read_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_core_axi_read_out_if_pkg = \ + +O_FILE_COMPILE_LIST_core_axi_read_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_core_axi_read_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_core_axi_read_out_if_pkg += -I$(core_axi_read_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_core_axi_read_out_if_pkg += $(core_axi_read_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_core_axi_read_out_if_pkg += \ + \ + -o .so + +comp_core_axi_read_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_core_axi_read_out_if_pkg) $(C_FILE_COMPILE_LIST_core_axi_read_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_core_axi_read_out_if_pkg) $(O_FILE_COMPILE_LIST_core_axi_read_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/compile.do new file mode 100644 index 000000000..73e42d35e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of core_axi_read_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if.compile new file mode 100644 index 000000000..6899ae4aa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if.compile @@ -0,0 +1,3 @@ +needs: + - core_axi_read_out_if_hvl.compile + - core_axi_read_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_bfm.vinfo new file mode 100644 index 000000000..d3826b867 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use core_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/core_axi_read_out_if_if.sv +src/core_axi_read_out_if_driver_bfm.sv +src/core_axi_read_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_common.compile new file mode 100644 index 000000000..439747e2b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - core_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hdl.f new file mode 100644 index 000000000..61a64a8fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hvl.f new file mode 100644 index 000000000..63499edc2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_xrtl.f new file mode 100644 index 000000000..54bc26587 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hdl.compile new file mode 100644 index 000000000..c01edb529 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./core_axi_read_out_if_common.compile +incdir: + - . +src: + - src/core_axi_read_out_if_if.sv + - src/core_axi_read_out_if_monitor_bfm.sv + - src/core_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hvl.compile new file mode 100644 index 000000000..52b13e38e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./core_axi_read_out_if_common.compile +incdir: + - . +src: + - core_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.sv new file mode 100644 index 000000000..27da26683 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_read_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import core_axi_read_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/core_axi_read_out_if_macros.svh" + + export core_axi_read_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/core_axi_read_out_if_typedefs.svh" + `include "src/core_axi_read_out_if_transaction.svh" + + `include "src/core_axi_read_out_if_configuration.svh" + `include "src/core_axi_read_out_if_driver.svh" + `include "src/core_axi_read_out_if_monitor.svh" + + `include "src/core_axi_read_out_if_transaction_coverage.svh" + `include "src/core_axi_read_out_if_sequence_base.svh" + `include "src/core_axi_read_out_if_random_sequence.svh" + + `include "src/core_axi_read_out_if_responder_sequence.svh" + `include "src/core_axi_read_out_if2reg_adapter.svh" + + `include "src/core_axi_read_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.vinfo new file mode 100644 index 000000000..353f8e89e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use core_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +core_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.sv new file mode 100644 index 000000000..af073f726 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_read_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/core_axi_read_out_if_typedefs_hdl.svh" + `include "src/core_axi_read_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..da16ef949 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +core_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_sve.F new file mode 100644 index 000000000..847a827c8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if2reg_adapter.svh new file mode 100644 index 000000000..ab579bfdc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the core_axi_read_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( core_axi_read_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "core_axi_read_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : core_axi_read_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_agent.svh new file mode 100644 index 000000000..8a5580622 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(core_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(core_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(core_axi_read_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( core_axi_read_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_configuration.svh new file mode 100644 index 000000000..0873724c5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the core_axi_read_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual core_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual core_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_read_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup core_axi_read_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_CONFIGURATION_STRUCT + core_axi_read_out_if_configuration_s core_axi_read_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a core_axi_read_out_if_configuration_s + // structure. The function returns the handle to the core_axi_read_out_if_configuration_struct. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + core_axi_read_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + core_axi_read_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + core_axi_read_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + core_axi_read_out_if_configuration_cg.set_inst_name($sformatf("core_axi_read_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(core_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver.svh new file mode 100644 index 000000000..fe19e1127 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual core_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( core_axi_read_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in core_axi_read_out_if_macros.svh +//******************************************************************* +// Initiator macro used by core_axi_read_out_if_driver and core_axi_read_out_if_driver_bfm +// to communicate initiator driven data to core_axi_read_out_if_driver_bfm. +`core_axi_read_out_if_INITIATOR_STRUCT + core_axi_read_out_if_initiator_s core_axi_read_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by core_axi_read_out_if_driver and core_axi_read_out_if_driver_bfm +// to communicate Responder driven data to core_axi_read_out_if_driver_bfm. +`core_axi_read_out_if_RESPONDER_STRUCT + core_axi_read_out_if_responder_s core_axi_read_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + core_axi_read_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(core_axi_read_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + core_axi_read_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(core_axi_read_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver_bfm.sv new file mode 100644 index 000000000..4569dc443 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the core_axi_read_out_if signal driving. It is +// accessed by the uvm core_axi_read_out_if driver through a virtual interface +// handle in the core_axi_read_out_if configuration. It drives the singals passed +// in through the port connection named bus of type core_axi_read_out_if_if. +// +// Input signals from the core_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within core_axi_read_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_read_out_if_pkg_hdl::*; +`include "src/core_axi_read_out_if_macros.svh" + +interface core_axi_read_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (core_axi_read_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute core_axi_read_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + core_axi_read_out_if_pkg::core_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in core_axi_read_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from core_axi_read_out_if_driver to this BFM + // **************************************************************************** + `core_axi_read_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by core_axi_read_out_if_driver and core_axi_read_out_if_driver_bfm + // to communicate initiator driven data to core_axi_read_out_if_driver_bfm. + `core_axi_read_out_if_INITIATOR_STRUCT + core_axi_read_out_if_initiator_s initiator_struct; + // Responder macro used by core_axi_read_out_if_driver and core_axi_read_out_if_driver_bfm + // to communicate Responder driven data to core_axi_read_out_if_driver_bfm. + `core_axi_read_out_if_RESPONDER_STRUCT + core_axi_read_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(core_axi_read_out_if_configuration_s core_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input core_axi_read_out_if_initiator_s core_axi_read_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output core_axi_read_out_if_responder_s core_axi_read_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the core_axi_read_out_if_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Members within the core_axi_read_out_if_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + initiator_struct = core_axi_read_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // core_axi_read_out_if_responder_struct.xyz = arready_i; // + // core_axi_read_out_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // core_axi_read_out_if_responder_struct.xyz = rresp_i; // + // core_axi_read_out_if_responder_struct.xyz = rid_i; // + // core_axi_read_out_if_responder_struct.xyz = rlast_i; // + // core_axi_read_out_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // core_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = core_axi_read_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output core_axi_read_out_if_initiator_s core_axi_read_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input core_axi_read_out_if_responder_s core_axi_read_out_if_responder_struct + );// pragma tbx xtf + // Variables within the core_axi_read_out_if_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Variables within the core_axi_read_out_if_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= core_axi_read_out_if_initiator_struct.xyz; // + // rdata_o <= core_axi_read_out_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= core_axi_read_out_if_initiator_struct.xyz; // + // rid_o <= core_axi_read_out_if_initiator_struct.xyz; // + // rlast_o <= core_axi_read_out_if_initiator_struct.xyz; // + // rvalid_o <= core_axi_read_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the core_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the core_axi_read_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_if.sv new file mode 100644 index 000000000..0bdb905ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the core_axi_read_out_if interface signals. +// It is instantiated once per core_axi_read_out_if bus. Bus Functional Models, +// BFM's named core_axi_read_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named core_axi_read_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(core_axi_read_out_if_bus.arready), // Agent input +// .dut_signal_port(core_axi_read_out_if_bus.rdata), // Agent input +// .dut_signal_port(core_axi_read_out_if_bus.rresp), // Agent input +// .dut_signal_port(core_axi_read_out_if_bus.rid), // Agent input +// .dut_signal_port(core_axi_read_out_if_bus.rlast), // Agent input +// .dut_signal_port(core_axi_read_out_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import core_axi_read_out_if_pkg_hdl::*; + +interface core_axi_read_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_macros.svh new file mode 100644 index 000000000..778373aa8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the core_axi_read_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the core_axi_read_out_if_configuration class. +// + `define core_axi_read_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } core_axi_read_out_if_configuration_s; + + `define core_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function core_axi_read_out_if_configuration_s to_struct();\ + core_axi_read_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( core_axi_read_out_if_configuration_struct );\ + endfunction + + `define core_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(core_axi_read_out_if_configuration_s core_axi_read_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = core_axi_read_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the core_axi_read_out_if_transaction class. +// + `define core_axi_read_out_if_MONITOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } core_axi_read_out_if_monitor_s; + + `define core_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function core_axi_read_out_if_monitor_s to_monitor_struct();\ + core_axi_read_out_if_monitor_struct = \ + { \ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( core_axi_read_out_if_monitor_struct);\ + endfunction\ + + `define core_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(core_axi_read_out_if_monitor_s core_axi_read_out_if_monitor_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = core_axi_read_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the core_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_read_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } core_axi_read_out_if_initiator_s; + + `define core_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function core_axi_read_out_if_initiator_s to_initiator_struct();\ + core_axi_read_out_if_initiator_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( core_axi_read_out_if_initiator_struct);\ + endfunction + + `define core_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(core_axi_read_out_if_initiator_s core_axi_read_out_if_initiator_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = core_axi_read_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the core_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_read_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } core_axi_read_out_if_responder_s; + + `define core_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function core_axi_read_out_if_responder_s to_responder_struct();\ + core_axi_read_out_if_responder_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( core_axi_read_out_if_responder_struct);\ + endfunction + + `define core_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(core_axi_read_out_if_responder_s core_axi_read_out_if_responder_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = core_axi_read_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor.svh new file mode 100644 index 000000000..8cd448e91 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives core_axi_read_out_if transactions observed by the +// core_axi_read_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual core_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_read_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`core_axi_read_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the core_axi_read_out_if_monitor_struct. + virtual function void notify_transaction(input core_axi_read_out_if_monitor_s core_axi_read_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(core_axi_read_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor_bfm.sv new file mode 100644 index 000000000..d47c910f6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the core_axi_read_out_if signal monitoring. +// It is accessed by the uvm core_axi_read_out_if monitor through a virtual +// interface handle in the core_axi_read_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type core_axi_read_out_if_if. +// +// Input signals from the core_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the core_axi_read_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_read_out_if_pkg_hdl::*; +`include "src/core_axi_read_out_if_macros.svh" + + +interface core_axi_read_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( core_axi_read_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute core_axi_read_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`core_axi_read_out_if_MONITOR_STRUCT + core_axi_read_out_if_monitor_s core_axi_read_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `core_axi_read_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + core_axi_read_out_if_pkg::core_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( core_axi_read_out_if_monitor_struct ); + + + proxy.notify_transaction( core_axi_read_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(core_axi_read_out_if_configuration_s core_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output core_axi_read_out_if_monitor_s core_axi_read_out_if_monitor_struct); + // + // Available struct members: + // // core_axi_read_out_if_monitor_struct.core_arready + // // core_axi_read_out_if_monitor_struct.core_rdata + // // core_axi_read_out_if_monitor_struct.core_rresp + // // core_axi_read_out_if_monitor_struct.core_rid + // // core_axi_read_out_if_monitor_struct.core_rlast + // // core_axi_read_out_if_monitor_struct.core_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // core_axi_read_out_if_monitor_struct.xyz = arready_i; // + // core_axi_read_out_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // core_axi_read_out_if_monitor_struct.xyz = rresp_i; // + // core_axi_read_out_if_monitor_struct.xyz = rid_i; // + // core_axi_read_out_if_monitor_struct.xyz = rlast_i; // + // core_axi_read_out_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_random_sequence.svh new file mode 100644 index 000000000..51d933c94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the core_axi_read_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a core_axi_read_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_read_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=core_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "core_axi_read_out_if_random_sequence::body()-core_axi_read_out_if_transaction randomization failed") + // Send the transaction to the core_axi_read_out_if_driver_bfm via the sequencer and core_axi_read_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: core_axi_read_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_responder_sequence.svh new file mode 100644 index 000000000..f41646f83 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_read_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "core_axi_read_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=core_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_sequence_base.svh new file mode 100644 index 000000000..9e9fbb58b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_read_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_read_out_if_transaction_req_t; + core_axi_read_out_if_transaction_req_t req; + typedef core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_read_out_if_transaction_rsp_t; + core_axi_read_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = core_axi_read_out_if_transaction_req_t::type_id::create("req"); + rsp = core_axi_read_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction.svh new file mode 100644 index 000000000..7b95d521b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an core_axi_read_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( core_axi_read_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_arready ; + logic [DW-1:0] core_rdata ; + axi_pkg::axi_burst_e core_rresp ; + logic [IW-1:0] core_rid ; + logic core_rlast ; + logic core_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in core_axi_read_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by core_axi_read_out_if_monitor and core_axi_read_out_if_monitor_bfm + // This struct is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_MONITOR_STRUCT + core_axi_read_out_if_monitor_s core_axi_read_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a core_axi_read_out_if_monitor_s + // structure. The function returns the handle to the core_axi_read_out_if_monitor_struct. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by core_axi_read_out_if_driver and core_axi_read_out_if_driver_bfm + // to communicate initiator driven data to core_axi_read_out_if_driver_bfm. + // This struct is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_INITIATOR_STRUCT + core_axi_read_out_if_initiator_s core_axi_read_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a core_axi_read_out_if_initiator_s + // structure. The function returns the handle to the core_axi_read_out_if_initiator_struct. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by core_axi_read_out_if_driver and core_axi_read_out_if_driver_bfm + // to communicate Responder driven data to core_axi_read_out_if_driver_bfm. + // This struct is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_RESPONDER_STRUCT + core_axi_read_out_if_responder_s core_axi_read_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a core_axi_read_out_if_responder_s + // structure. The function returns the handle to the core_axi_read_out_if_responder_struct. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_arready:0x%x core_rdata:0x%x core_rresp:0x%x core_rid:0x%x core_rlast:0x%x core_rvalid:0x%x ",core_arready,core_rdata,core_rresp,core_rid,core_rlast,core_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_arready == RHS.core_arready) + &&(this.core_rdata == RHS.core_rdata) + &&(this.core_rresp == RHS.core_rresp) + &&(this.core_rid == RHS.core_rid) + &&(this.core_rlast == RHS.core_rlast) + &&(this.core_rvalid == RHS.core_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_arready = RHS.core_arready; + this.core_rdata = RHS.core_rdata; + this.core_rresp = RHS.core_rresp; + this.core_rid = RHS.core_rid; + this.core_rlast = RHS.core_rlast; + this.core_rvalid = RHS.core_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"core_axi_read_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_arready,"core_arready"); + $add_attribute(transaction_view_h,core_rdata,"core_rdata"); + $add_attribute(transaction_view_h,core_rresp,"core_rresp"); + $add_attribute(transaction_view_h,core_rid,"core_rid"); + $add_attribute(transaction_view_h,core_rlast,"core_rlast"); + $add_attribute(transaction_view_h,core_rvalid,"core_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction_coverage.svh new file mode 100644 index 000000000..938c15317 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records core_axi_read_out_if transaction information using +// a covergroup named core_axi_read_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_read_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup core_axi_read_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_arready: coverpoint coverage_trans.core_arready; + core_rdata: coverpoint coverage_trans.core_rdata; + core_rresp: coverpoint coverage_trans.core_rresp; + core_rid: coverpoint coverage_trans.core_rid; + core_rlast: coverpoint coverage_trans.core_rlast; + core_rvalid: coverpoint coverage_trans.core_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + core_axi_read_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + core_axi_read_out_if_transaction_cg.set_inst_name($sformatf("core_axi_read_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + core_axi_read_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/yaml/core_axi_read_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/yaml/core_axi_read_out_if_interface.yaml new file mode 100644 index 000000000..4624cc767 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_read_out_if_pkg/yaml/core_axi_read_out_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + core_axi_read_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/.project new file mode 100644 index 000000000..c317ffc88 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/.project @@ -0,0 +1,30 @@ + + + core_axi_write_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/.svproject new file mode 100644 index 000000000..c0a4e460d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/Makefile new file mode 100644 index 000000000..7e6ea601e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/Makefile @@ -0,0 +1,66 @@ +# core_axi_write_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +core_axi_write_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f + +core_axi_write_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f + +core_axi_write_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f + +COMP_core_axi_write_if_PKG_TGT_0 = q_comp_core_axi_write_if_pkg +COMP_core_axi_write_if_PKG_TGT_1 = v_comp_core_axi_write_if_pkg +COMP_core_axi_write_if_PKG_TGT = $(COMP_core_axi_write_if_PKG_TGT_$(USE_VELOCE)) + +comp_core_axi_write_if_pkg: $(COMP_core_axi_write_if_PKG_TGT) + +q_comp_core_axi_write_if_pkg: + $(HDL_COMP_CMD) $(core_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_write_if_PKG) + $(HDL_COMP_CMD) $(core_axi_write_if_PKG_XRTL) + +v_comp_core_axi_write_if_pkg: + $(HVL_COMP_CMD) $(core_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_write_if_PKG) + $(VELANALYZE_CMD) $(core_axi_write_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(core_axi_write_if_PKG) + $(HDL_COMP_CMD) $(core_axi_write_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export core_axi_write_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/dpi + +C_FILE_COMPILE_LIST_core_axi_write_if_pkg = \ + +O_FILE_COMPILE_LIST_core_axi_write_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_core_axi_write_if_pkg:.c=.o)) + +GCC_COMP_ARGS_core_axi_write_if_pkg += -I$(core_axi_write_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_core_axi_write_if_pkg += $(core_axi_write_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_core_axi_write_if_pkg += \ + \ + -o .so + +comp_core_axi_write_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_core_axi_write_if_pkg) $(C_FILE_COMPILE_LIST_core_axi_write_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_core_axi_write_if_pkg) $(O_FILE_COMPILE_LIST_core_axi_write_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/compile.do new file mode 100644 index 000000000..d57b919fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of core_axi_write_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if.compile new file mode 100644 index 000000000..d5945e5ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if.compile @@ -0,0 +1,3 @@ +needs: + - core_axi_write_if_hvl.compile + - core_axi_write_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_bfm.vinfo new file mode 100644 index 000000000..ab7c2fca6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use core_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/core_axi_write_if_if.sv +src/core_axi_write_if_driver_bfm.sv +src/core_axi_write_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_common.compile new file mode 100644 index 000000000..4922a4200 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f new file mode 100644 index 000000000..b14f9380d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f new file mode 100644 index 000000000..a56447389 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f new file mode 100644 index 000000000..d93277776 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hdl.compile new file mode 100644 index 000000000..0328e5087 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./core_axi_write_if_common.compile +incdir: + - . +src: + - src/core_axi_write_if_if.sv + - src/core_axi_write_if_monitor_bfm.sv + - src/core_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hvl.compile new file mode 100644 index 000000000..e19dd38c2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./core_axi_write_if_common.compile +incdir: + - . +src: + - core_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.sv new file mode 100644 index 000000000..ee9c7cec8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_write_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import core_axi_write_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/core_axi_write_if_macros.svh" + + export core_axi_write_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/core_axi_write_if_typedefs.svh" + `include "src/core_axi_write_if_transaction.svh" + + `include "src/core_axi_write_if_configuration.svh" + `include "src/core_axi_write_if_driver.svh" + `include "src/core_axi_write_if_monitor.svh" + + `include "src/core_axi_write_if_transaction_coverage.svh" + `include "src/core_axi_write_if_sequence_base.svh" + `include "src/core_axi_write_if_random_sequence.svh" + + `include "src/core_axi_write_if_responder_sequence.svh" + `include "src/core_axi_write_if2reg_adapter.svh" + + `include "src/core_axi_write_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.vinfo new file mode 100644 index 000000000..d8e9ffc3f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use core_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +core_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.sv new file mode 100644 index 000000000..2d56fd18c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_write_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/core_axi_write_if_typedefs_hdl.svh" + `include "src/core_axi_write_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.vinfo new file mode 100644 index 000000000..5360aa61b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_sve.F new file mode 100644 index 000000000..1c96c4aff --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if2reg_adapter.svh new file mode 100644 index 000000000..902b4b13e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the core_axi_write_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( core_axi_write_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "core_axi_write_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : core_axi_write_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_agent.svh new file mode 100644 index 000000000..38ae017f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(core_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(core_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(core_axi_write_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( core_axi_write_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_configuration.svh new file mode 100644 index 000000000..2178c5d3f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the core_axi_write_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual core_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual core_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_write_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup core_axi_write_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in core_axi_write_if_macros.svh + `core_axi_write_if_CONFIGURATION_STRUCT + core_axi_write_if_configuration_s core_axi_write_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a core_axi_write_if_configuration_s + // structure. The function returns the handle to the core_axi_write_if_configuration_struct. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + core_axi_write_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + core_axi_write_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + core_axi_write_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + core_axi_write_if_configuration_cg.set_inst_name($sformatf("core_axi_write_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver.svh new file mode 100644 index 000000000..61afbc09d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual core_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( core_axi_write_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in core_axi_write_if_macros.svh +//******************************************************************* +// Initiator macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm +// to communicate initiator driven data to core_axi_write_if_driver_bfm. +`core_axi_write_if_INITIATOR_STRUCT + core_axi_write_if_initiator_s core_axi_write_if_initiator_struct; +//******************************************************************* +// Responder macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm +// to communicate Responder driven data to core_axi_write_if_driver_bfm. +`core_axi_write_if_RESPONDER_STRUCT + core_axi_write_if_responder_s core_axi_write_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + core_axi_write_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(core_axi_write_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + core_axi_write_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(core_axi_write_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver_bfm.sv new file mode 100644 index 000000000..2e5f63dbd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the core_axi_write_if signal driving. It is +// accessed by the uvm core_axi_write_if driver through a virtual interface +// handle in the core_axi_write_if configuration. It drives the singals passed +// in through the port connection named bus of type core_axi_write_if_if. +// +// Input signals from the core_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within core_axi_write_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_write_if_pkg_hdl::*; +`include "src/core_axi_write_if_macros.svh" + +interface core_axi_write_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (core_axi_write_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute core_axi_write_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + core_axi_write_if_pkg::core_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in core_axi_write_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from core_axi_write_if_driver to this BFM + // **************************************************************************** + `core_axi_write_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm + // to communicate initiator driven data to core_axi_write_if_driver_bfm. + `core_axi_write_if_INITIATOR_STRUCT + core_axi_write_if_initiator_s initiator_struct; + // Responder macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm + // to communicate Responder driven data to core_axi_write_if_driver_bfm. + `core_axi_write_if_RESPONDER_STRUCT + core_axi_write_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(core_axi_write_if_configuration_s core_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input core_axi_write_if_initiator_s core_axi_write_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output core_axi_write_if_responder_s core_axi_write_if_responder_struct + );// pragma tbx xtf + // + // Members within the core_axi_write_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Members within the core_axi_write_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + initiator_struct = core_axi_write_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // core_axi_write_if_responder_struct.xyz = awready_i; // + // core_axi_write_if_responder_struct.xyz = wready_i; // + // core_axi_write_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // core_axi_write_if_responder_struct.xyz = bid_i; // + // core_axi_write_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // core_axi_write_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = core_axi_write_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output core_axi_write_if_initiator_s core_axi_write_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input core_axi_write_if_responder_s core_axi_write_if_responder_struct + );// pragma tbx xtf + // Variables within the core_axi_write_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Variables within the core_axi_write_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= core_axi_write_if_initiator_struct.xyz; // + // wready_o <= core_axi_write_if_initiator_struct.xyz; // + // bresp_o <= core_axi_write_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= core_axi_write_if_initiator_struct.xyz; // + // bvalid_o <= core_axi_write_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the core_axi_write_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the core_axi_write_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_if.sv new file mode 100644 index 000000000..86ab20f72 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the core_axi_write_if interface signals. +// It is instantiated once per core_axi_write_if bus. Bus Functional Models, +// BFM's named core_axi_write_if_driver_bfm, are used to drive signals on the bus. +// BFM's named core_axi_write_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(core_axi_write_if_bus.awready), // Agent input +// .dut_signal_port(core_axi_write_if_bus.wready), // Agent input +// .dut_signal_port(core_axi_write_if_bus.bresp), // Agent input +// .dut_signal_port(core_axi_write_if_bus.bid), // Agent input +// .dut_signal_port(core_axi_write_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import core_axi_write_if_pkg_hdl::*; + +interface core_axi_write_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_macros.svh new file mode 100644 index 000000000..8c8873557 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the core_axi_write_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the core_axi_write_if_configuration class. +// + `define core_axi_write_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } core_axi_write_if_configuration_s; + + `define core_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function core_axi_write_if_configuration_s to_struct();\ + core_axi_write_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( core_axi_write_if_configuration_struct );\ + endfunction + + `define core_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(core_axi_write_if_configuration_s core_axi_write_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = core_axi_write_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the core_axi_write_if_transaction class. +// + `define core_axi_write_if_MONITOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } core_axi_write_if_monitor_s; + + `define core_axi_write_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function core_axi_write_if_monitor_s to_monitor_struct();\ + core_axi_write_if_monitor_struct = \ + { \ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( core_axi_write_if_monitor_struct);\ + endfunction\ + + `define core_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(core_axi_write_if_monitor_s core_axi_write_if_monitor_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = core_axi_write_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the core_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_write_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } core_axi_write_if_initiator_s; + + `define core_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function core_axi_write_if_initiator_s to_initiator_struct();\ + core_axi_write_if_initiator_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( core_axi_write_if_initiator_struct);\ + endfunction + + `define core_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(core_axi_write_if_initiator_s core_axi_write_if_initiator_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = core_axi_write_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the core_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_write_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } core_axi_write_if_responder_s; + + `define core_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function core_axi_write_if_responder_s to_responder_struct();\ + core_axi_write_if_responder_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( core_axi_write_if_responder_struct);\ + endfunction + + `define core_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(core_axi_write_if_responder_s core_axi_write_if_responder_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = core_axi_write_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor.svh new file mode 100644 index 000000000..52be1a9ca --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives core_axi_write_if transactions observed by the +// core_axi_write_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual core_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_write_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`core_axi_write_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the core_axi_write_if_monitor_struct. + virtual function void notify_transaction(input core_axi_write_if_monitor_s core_axi_write_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(core_axi_write_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor_bfm.sv new file mode 100644 index 000000000..9661876ce --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the core_axi_write_if signal monitoring. +// It is accessed by the uvm core_axi_write_if monitor through a virtual +// interface handle in the core_axi_write_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type core_axi_write_if_if. +// +// Input signals from the core_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the core_axi_write_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_write_if_pkg_hdl::*; +`include "src/core_axi_write_if_macros.svh" + + +interface core_axi_write_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( core_axi_write_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute core_axi_write_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`core_axi_write_if_MONITOR_STRUCT + core_axi_write_if_monitor_s core_axi_write_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `core_axi_write_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + core_axi_write_if_pkg::core_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( core_axi_write_if_monitor_struct ); + + + proxy.notify_transaction( core_axi_write_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(core_axi_write_if_configuration_s core_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output core_axi_write_if_monitor_s core_axi_write_if_monitor_struct); + // + // Available struct members: + // // core_axi_write_if_monitor_struct.core_awready + // // core_axi_write_if_monitor_struct.core_wready + // // core_axi_write_if_monitor_struct.core_bresp + // // core_axi_write_if_monitor_struct.core_bid + // // core_axi_write_if_monitor_struct.core_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // core_axi_write_if_monitor_struct.xyz = awready_i; // + // core_axi_write_if_monitor_struct.xyz = wready_i; // + // core_axi_write_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // core_axi_write_if_monitor_struct.xyz = bid_i; // + // core_axi_write_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_random_sequence.svh new file mode 100644 index 000000000..9722594f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the core_axi_write_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a core_axi_write_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_write_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "core_axi_write_if_random_sequence::body()-core_axi_write_if_transaction randomization failed") + // Send the transaction to the core_axi_write_if_driver_bfm via the sequencer and core_axi_write_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: core_axi_write_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_responder_sequence.svh new file mode 100644 index 000000000..4ee61b3ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_write_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "core_axi_write_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_sequence_base.svh new file mode 100644 index 000000000..339755d18 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_write_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_write_if_transaction_req_t; + core_axi_write_if_transaction_req_t req; + typedef core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_write_if_transaction_rsp_t; + core_axi_write_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = core_axi_write_if_transaction_req_t::type_id::create("req"); + rsp = core_axi_write_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction.svh new file mode 100644 index 000000000..78c5353a7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an core_axi_write_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( core_axi_write_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_awready ; + logic core_wready ; + axi_pkg::axi_burst_e core_bresp ; + logic core_bid ; + logic core_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in core_axi_write_if_macros.svh + + //******************************************************************* + // Monitor macro used by core_axi_write_if_monitor and core_axi_write_if_monitor_bfm + // This struct is defined in core_axi_write_if_macros.svh + `core_axi_write_if_MONITOR_STRUCT + core_axi_write_if_monitor_s core_axi_write_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a core_axi_write_if_monitor_s + // structure. The function returns the handle to the core_axi_write_if_monitor_struct. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm + // to communicate initiator driven data to core_axi_write_if_driver_bfm. + // This struct is defined in core_axi_write_if_macros.svh + `core_axi_write_if_INITIATOR_STRUCT + core_axi_write_if_initiator_s core_axi_write_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a core_axi_write_if_initiator_s + // structure. The function returns the handle to the core_axi_write_if_initiator_struct. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm + // to communicate Responder driven data to core_axi_write_if_driver_bfm. + // This struct is defined in core_axi_write_if_macros.svh + `core_axi_write_if_RESPONDER_STRUCT + core_axi_write_if_responder_s core_axi_write_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a core_axi_write_if_responder_s + // structure. The function returns the handle to the core_axi_write_if_responder_struct. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awready:0x%x core_wready:0x%x core_bresp:0x%x core_bid:0x%x core_bvalid:0x%x ",core_awready,core_wready,core_bresp,core_bid,core_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_awready == RHS.core_awready) + &&(this.core_wready == RHS.core_wready) + &&(this.core_bresp == RHS.core_bresp) + &&(this.core_bid == RHS.core_bid) + &&(this.core_bvalid == RHS.core_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awready = RHS.core_awready; + this.core_wready = RHS.core_wready; + this.core_bresp = RHS.core_bresp; + this.core_bid = RHS.core_bid; + this.core_bvalid = RHS.core_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"core_axi_write_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awready,"core_awready"); + $add_attribute(transaction_view_h,core_wready,"core_wready"); + $add_attribute(transaction_view_h,core_bresp,"core_bresp"); + $add_attribute(transaction_view_h,core_bid,"core_bid"); + $add_attribute(transaction_view_h,core_bvalid,"core_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction_coverage.svh new file mode 100644 index 000000000..aa3fe1d6e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records core_axi_write_if transaction information using +// a covergroup named core_axi_write_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_write_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup core_axi_write_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awready: coverpoint coverage_trans.core_awready; + core_wready: coverpoint coverage_trans.core_wready; + core_bresp: coverpoint coverage_trans.core_bresp; + core_bid: coverpoint coverage_trans.core_bid; + core_bvalid: coverpoint coverage_trans.core_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + core_axi_write_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + core_axi_write_if_transaction_cg.set_inst_name($sformatf("core_axi_write_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + core_axi_write_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/yaml/core_axi_write_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/yaml/core_axi_write_if_interface.yaml new file mode 100644 index 000000000..049bcebe2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_if_pkg/yaml/core_axi_write_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + core_axi_write_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/.project new file mode 100644 index 000000000..938b34c4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + core_axi_write_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/.svproject new file mode 100644 index 000000000..7a0d950c7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/Makefile new file mode 100644 index 000000000..732c0fa5f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# core_axi_write_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +core_axi_write_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hvl.f + +core_axi_write_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hdl.f + +core_axi_write_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_xrtl.f + +COMP_core_axi_write_out_if_PKG_TGT_0 = q_comp_core_axi_write_out_if_pkg +COMP_core_axi_write_out_if_PKG_TGT_1 = v_comp_core_axi_write_out_if_pkg +COMP_core_axi_write_out_if_PKG_TGT = $(COMP_core_axi_write_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_core_axi_write_out_if_pkg: $(COMP_core_axi_write_out_if_PKG_TGT) + +q_comp_core_axi_write_out_if_pkg: + $(HDL_COMP_CMD) $(core_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(core_axi_write_out_if_PKG_XRTL) + +v_comp_core_axi_write_out_if_pkg: + $(HVL_COMP_CMD) $(core_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_write_out_if_PKG) + $(VELANALYZE_CMD) $(core_axi_write_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(core_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(core_axi_write_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export core_axi_write_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_core_axi_write_out_if_pkg = \ + +O_FILE_COMPILE_LIST_core_axi_write_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_core_axi_write_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_core_axi_write_out_if_pkg += -I$(core_axi_write_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_core_axi_write_out_if_pkg += $(core_axi_write_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_core_axi_write_out_if_pkg += \ + \ + -o .so + +comp_core_axi_write_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_core_axi_write_out_if_pkg) $(C_FILE_COMPILE_LIST_core_axi_write_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_core_axi_write_out_if_pkg) $(O_FILE_COMPILE_LIST_core_axi_write_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/compile.do new file mode 100644 index 000000000..54d017934 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of core_axi_write_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if.compile new file mode 100644 index 000000000..40e8aee73 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if.compile @@ -0,0 +1,3 @@ +needs: + - core_axi_write_out_if_hvl.compile + - core_axi_write_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_bfm.vinfo new file mode 100644 index 000000000..ccc4ac319 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use core_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/core_axi_write_out_if_if.sv +src/core_axi_write_out_if_driver_bfm.sv +src/core_axi_write_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_common.compile new file mode 100644 index 000000000..e684a6c49 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hdl.f new file mode 100644 index 000000000..3f8dc2a40 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hvl.f new file mode 100644 index 000000000..73fb6826d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_xrtl.f new file mode 100644 index 000000000..b5cb783d0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hdl.compile new file mode 100644 index 000000000..ddedadb4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./core_axi_write_out_if_common.compile +incdir: + - . +src: + - src/core_axi_write_out_if_if.sv + - src/core_axi_write_out_if_monitor_bfm.sv + - src/core_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hvl.compile new file mode 100644 index 000000000..c5d3d08a4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./core_axi_write_out_if_common.compile +incdir: + - . +src: + - core_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.sv new file mode 100644 index 000000000..483e82f13 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_write_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import core_axi_write_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/core_axi_write_out_if_macros.svh" + + export core_axi_write_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/core_axi_write_out_if_typedefs.svh" + `include "src/core_axi_write_out_if_transaction.svh" + + `include "src/core_axi_write_out_if_configuration.svh" + `include "src/core_axi_write_out_if_driver.svh" + `include "src/core_axi_write_out_if_monitor.svh" + + `include "src/core_axi_write_out_if_transaction_coverage.svh" + `include "src/core_axi_write_out_if_sequence_base.svh" + `include "src/core_axi_write_out_if_random_sequence.svh" + + `include "src/core_axi_write_out_if_responder_sequence.svh" + `include "src/core_axi_write_out_if2reg_adapter.svh" + + `include "src/core_axi_write_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.vinfo new file mode 100644 index 000000000..b15563968 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use core_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +core_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.sv new file mode 100644 index 000000000..c33ed1c80 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_write_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/core_axi_write_out_if_typedefs_hdl.svh" + `include "src/core_axi_write_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..df5363cef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_sve.F new file mode 100644 index 000000000..47df0133c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if2reg_adapter.svh new file mode 100644 index 000000000..fefb54e87 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the core_axi_write_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( core_axi_write_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "core_axi_write_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : core_axi_write_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_agent.svh new file mode 100644 index 000000000..178e2aa3d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(core_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(core_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(core_axi_write_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( core_axi_write_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_configuration.svh new file mode 100644 index 000000000..d5fa5f073 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the core_axi_write_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual core_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual core_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_write_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup core_axi_write_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_CONFIGURATION_STRUCT + core_axi_write_out_if_configuration_s core_axi_write_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a core_axi_write_out_if_configuration_s + // structure. The function returns the handle to the core_axi_write_out_if_configuration_struct. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + core_axi_write_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + core_axi_write_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + core_axi_write_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + core_axi_write_out_if_configuration_cg.set_inst_name($sformatf("core_axi_write_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver.svh new file mode 100644 index 000000000..0c4673f28 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual core_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( core_axi_write_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in core_axi_write_out_if_macros.svh +//******************************************************************* +// Initiator macro used by core_axi_write_out_if_driver and core_axi_write_out_if_driver_bfm +// to communicate initiator driven data to core_axi_write_out_if_driver_bfm. +`core_axi_write_out_if_INITIATOR_STRUCT + core_axi_write_out_if_initiator_s core_axi_write_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by core_axi_write_out_if_driver and core_axi_write_out_if_driver_bfm +// to communicate Responder driven data to core_axi_write_out_if_driver_bfm. +`core_axi_write_out_if_RESPONDER_STRUCT + core_axi_write_out_if_responder_s core_axi_write_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + core_axi_write_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(core_axi_write_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + core_axi_write_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(core_axi_write_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver_bfm.sv new file mode 100644 index 000000000..2b871cb7e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the core_axi_write_out_if signal driving. It is +// accessed by the uvm core_axi_write_out_if driver through a virtual interface +// handle in the core_axi_write_out_if configuration. It drives the singals passed +// in through the port connection named bus of type core_axi_write_out_if_if. +// +// Input signals from the core_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within core_axi_write_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_write_out_if_pkg_hdl::*; +`include "src/core_axi_write_out_if_macros.svh" + +interface core_axi_write_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (core_axi_write_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute core_axi_write_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + core_axi_write_out_if_pkg::core_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in core_axi_write_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from core_axi_write_out_if_driver to this BFM + // **************************************************************************** + `core_axi_write_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by core_axi_write_out_if_driver and core_axi_write_out_if_driver_bfm + // to communicate initiator driven data to core_axi_write_out_if_driver_bfm. + `core_axi_write_out_if_INITIATOR_STRUCT + core_axi_write_out_if_initiator_s initiator_struct; + // Responder macro used by core_axi_write_out_if_driver and core_axi_write_out_if_driver_bfm + // to communicate Responder driven data to core_axi_write_out_if_driver_bfm. + `core_axi_write_out_if_RESPONDER_STRUCT + core_axi_write_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(core_axi_write_out_if_configuration_s core_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input core_axi_write_out_if_initiator_s core_axi_write_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output core_axi_write_out_if_responder_s core_axi_write_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the core_axi_write_out_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Members within the core_axi_write_out_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + initiator_struct = core_axi_write_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // core_axi_write_out_if_responder_struct.xyz = awready_i; // + // core_axi_write_out_if_responder_struct.xyz = wready_i; // + // core_axi_write_out_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // core_axi_write_out_if_responder_struct.xyz = bid_i; // + // core_axi_write_out_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // core_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = core_axi_write_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output core_axi_write_out_if_initiator_s core_axi_write_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input core_axi_write_out_if_responder_s core_axi_write_out_if_responder_struct + );// pragma tbx xtf + // Variables within the core_axi_write_out_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Variables within the core_axi_write_out_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= core_axi_write_out_if_initiator_struct.xyz; // + // wready_o <= core_axi_write_out_if_initiator_struct.xyz; // + // bresp_o <= core_axi_write_out_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= core_axi_write_out_if_initiator_struct.xyz; // + // bvalid_o <= core_axi_write_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the core_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the core_axi_write_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_if.sv new file mode 100644 index 000000000..ae3e65b7e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the core_axi_write_out_if interface signals. +// It is instantiated once per core_axi_write_out_if bus. Bus Functional Models, +// BFM's named core_axi_write_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named core_axi_write_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(core_axi_write_out_if_bus.awready), // Agent input +// .dut_signal_port(core_axi_write_out_if_bus.wready), // Agent input +// .dut_signal_port(core_axi_write_out_if_bus.bresp), // Agent input +// .dut_signal_port(core_axi_write_out_if_bus.bid), // Agent input +// .dut_signal_port(core_axi_write_out_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import core_axi_write_out_if_pkg_hdl::*; + +interface core_axi_write_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_macros.svh new file mode 100644 index 000000000..87d43196c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the core_axi_write_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the core_axi_write_out_if_configuration class. +// + `define core_axi_write_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } core_axi_write_out_if_configuration_s; + + `define core_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function core_axi_write_out_if_configuration_s to_struct();\ + core_axi_write_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( core_axi_write_out_if_configuration_struct );\ + endfunction + + `define core_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(core_axi_write_out_if_configuration_s core_axi_write_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = core_axi_write_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the core_axi_write_out_if_transaction class. +// + `define core_axi_write_out_if_MONITOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } core_axi_write_out_if_monitor_s; + + `define core_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function core_axi_write_out_if_monitor_s to_monitor_struct();\ + core_axi_write_out_if_monitor_struct = \ + { \ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( core_axi_write_out_if_monitor_struct);\ + endfunction\ + + `define core_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(core_axi_write_out_if_monitor_s core_axi_write_out_if_monitor_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = core_axi_write_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the core_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_write_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } core_axi_write_out_if_initiator_s; + + `define core_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function core_axi_write_out_if_initiator_s to_initiator_struct();\ + core_axi_write_out_if_initiator_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( core_axi_write_out_if_initiator_struct);\ + endfunction + + `define core_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(core_axi_write_out_if_initiator_s core_axi_write_out_if_initiator_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = core_axi_write_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the core_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_write_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } core_axi_write_out_if_responder_s; + + `define core_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function core_axi_write_out_if_responder_s to_responder_struct();\ + core_axi_write_out_if_responder_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( core_axi_write_out_if_responder_struct);\ + endfunction + + `define core_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(core_axi_write_out_if_responder_s core_axi_write_out_if_responder_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = core_axi_write_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor.svh new file mode 100644 index 000000000..7371c7122 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives core_axi_write_out_if transactions observed by the +// core_axi_write_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual core_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_write_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`core_axi_write_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the core_axi_write_out_if_monitor_struct. + virtual function void notify_transaction(input core_axi_write_out_if_monitor_s core_axi_write_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(core_axi_write_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor_bfm.sv new file mode 100644 index 000000000..870cb1641 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the core_axi_write_out_if signal monitoring. +// It is accessed by the uvm core_axi_write_out_if monitor through a virtual +// interface handle in the core_axi_write_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type core_axi_write_out_if_if. +// +// Input signals from the core_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the core_axi_write_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_write_out_if_pkg_hdl::*; +`include "src/core_axi_write_out_if_macros.svh" + + +interface core_axi_write_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( core_axi_write_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute core_axi_write_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`core_axi_write_out_if_MONITOR_STRUCT + core_axi_write_out_if_monitor_s core_axi_write_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `core_axi_write_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + core_axi_write_out_if_pkg::core_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( core_axi_write_out_if_monitor_struct ); + + + proxy.notify_transaction( core_axi_write_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(core_axi_write_out_if_configuration_s core_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output core_axi_write_out_if_monitor_s core_axi_write_out_if_monitor_struct); + // + // Available struct members: + // // core_axi_write_out_if_monitor_struct.core_awready + // // core_axi_write_out_if_monitor_struct.core_wready + // // core_axi_write_out_if_monitor_struct.core_bresp + // // core_axi_write_out_if_monitor_struct.core_bid + // // core_axi_write_out_if_monitor_struct.core_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // core_axi_write_out_if_monitor_struct.xyz = awready_i; // + // core_axi_write_out_if_monitor_struct.xyz = wready_i; // + // core_axi_write_out_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // core_axi_write_out_if_monitor_struct.xyz = bid_i; // + // core_axi_write_out_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_random_sequence.svh new file mode 100644 index 000000000..7780e6dd1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the core_axi_write_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a core_axi_write_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_write_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "core_axi_write_out_if_random_sequence::body()-core_axi_write_out_if_transaction randomization failed") + // Send the transaction to the core_axi_write_out_if_driver_bfm via the sequencer and core_axi_write_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: core_axi_write_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_responder_sequence.svh new file mode 100644 index 000000000..49afe1128 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_write_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "core_axi_write_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_sequence_base.svh new file mode 100644 index 000000000..d76fe29bd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_write_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_write_out_if_transaction_req_t; + core_axi_write_out_if_transaction_req_t req; + typedef core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_write_out_if_transaction_rsp_t; + core_axi_write_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = core_axi_write_out_if_transaction_req_t::type_id::create("req"); + rsp = core_axi_write_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction.svh new file mode 100644 index 000000000..c895977d8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an core_axi_write_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( core_axi_write_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_awready ; + logic core_wready ; + axi_pkg::axi_burst_e core_bresp ; + logic core_bid ; + logic core_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in core_axi_write_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by core_axi_write_out_if_monitor and core_axi_write_out_if_monitor_bfm + // This struct is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_MONITOR_STRUCT + core_axi_write_out_if_monitor_s core_axi_write_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a core_axi_write_out_if_monitor_s + // structure. The function returns the handle to the core_axi_write_out_if_monitor_struct. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by core_axi_write_out_if_driver and core_axi_write_out_if_driver_bfm + // to communicate initiator driven data to core_axi_write_out_if_driver_bfm. + // This struct is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_INITIATOR_STRUCT + core_axi_write_out_if_initiator_s core_axi_write_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a core_axi_write_out_if_initiator_s + // structure. The function returns the handle to the core_axi_write_out_if_initiator_struct. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by core_axi_write_out_if_driver and core_axi_write_out_if_driver_bfm + // to communicate Responder driven data to core_axi_write_out_if_driver_bfm. + // This struct is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_RESPONDER_STRUCT + core_axi_write_out_if_responder_s core_axi_write_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a core_axi_write_out_if_responder_s + // structure. The function returns the handle to the core_axi_write_out_if_responder_struct. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awready:0x%x core_wready:0x%x core_bresp:0x%x core_bid:0x%x core_bvalid:0x%x ",core_awready,core_wready,core_bresp,core_bid,core_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_awready == RHS.core_awready) + &&(this.core_wready == RHS.core_wready) + &&(this.core_bresp == RHS.core_bresp) + &&(this.core_bid == RHS.core_bid) + &&(this.core_bvalid == RHS.core_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awready = RHS.core_awready; + this.core_wready = RHS.core_wready; + this.core_bresp = RHS.core_bresp; + this.core_bid = RHS.core_bid; + this.core_bvalid = RHS.core_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"core_axi_write_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awready,"core_awready"); + $add_attribute(transaction_view_h,core_wready,"core_wready"); + $add_attribute(transaction_view_h,core_bresp,"core_bresp"); + $add_attribute(transaction_view_h,core_bid,"core_bid"); + $add_attribute(transaction_view_h,core_bvalid,"core_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction_coverage.svh new file mode 100644 index 000000000..c2318af97 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records core_axi_write_out_if transaction information using +// a covergroup named core_axi_write_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_write_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup core_axi_write_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awready: coverpoint coverage_trans.core_awready; + core_wready: coverpoint coverage_trans.core_wready; + core_bresp: coverpoint coverage_trans.core_bresp; + core_bid: coverpoint coverage_trans.core_bid; + core_bvalid: coverpoint coverage_trans.core_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + core_axi_write_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + core_axi_write_out_if_transaction_cg.set_inst_name($sformatf("core_axi_write_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + core_axi_write_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/yaml/core_axi_write_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/yaml/core_axi_write_out_if_interface.yaml new file mode 100644 index 000000000..bb9a51431 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/core_axi_write_out_if_pkg/yaml/core_axi_write_out_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + core_axi_write_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.project new file mode 100644 index 000000000..f25d7a6d4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_core_core_axi_write_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.svproject new file mode 100644 index 000000000..737757535 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/Makefile new file mode 100644 index 000000000..3f1313baf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_core_core_axi_write_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_core_core_axi_write_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hvl.f + +fuse_core_core_axi_write_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hdl.f + +fuse_core_core_axi_write_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_xrtl.f + +COMP_fuse_core_core_axi_write_out_if_PKG_TGT_0 = q_comp_fuse_core_core_axi_write_out_if_pkg +COMP_fuse_core_core_axi_write_out_if_PKG_TGT_1 = v_comp_fuse_core_core_axi_write_out_if_pkg +COMP_fuse_core_core_axi_write_out_if_PKG_TGT = $(COMP_fuse_core_core_axi_write_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_core_core_axi_write_out_if_pkg: $(COMP_fuse_core_core_axi_write_out_if_PKG_TGT) + +q_comp_fuse_core_core_axi_write_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_core_core_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_core_core_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_core_core_axi_write_out_if_PKG_XRTL) + +v_comp_fuse_core_core_axi_write_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_core_core_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_core_core_axi_write_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_core_core_axi_write_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_core_core_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_core_core_axi_write_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_core_core_axi_write_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_core_core_axi_write_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_core_core_axi_write_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_core_core_axi_write_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_core_core_axi_write_out_if_pkg += -I$(fuse_core_core_axi_write_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_core_core_axi_write_out_if_pkg += $(fuse_core_core_axi_write_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_core_core_axi_write_out_if_pkg += \ + \ + -o .so + +comp_fuse_core_core_axi_write_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_core_core_axi_write_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_core_core_axi_write_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_core_core_axi_write_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_core_core_axi_write_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/compile.do new file mode 100644 index 000000000..b8f65efb7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_core_core_axi_write_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if.compile new file mode 100644 index 000000000..35966add7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_core_core_axi_write_out_if_hvl.compile + - fuse_core_core_axi_write_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_bfm.vinfo new file mode 100644 index 000000000..9a6fb73a0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_core_core_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_core_core_axi_write_out_if_if.sv +src/fuse_core_core_axi_write_out_if_driver_bfm.sv +src/fuse_core_core_axi_write_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_common.compile new file mode 100644 index 000000000..029c5cda8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_core_core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hdl.f new file mode 100644 index 000000000..c7e54dfd4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hvl.f new file mode 100644 index 000000000..85b4f73d1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_xrtl.f new file mode 100644 index 000000000..759299056 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hdl.compile new file mode 100644 index 000000000..8c8200827 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_core_core_axi_write_out_if_common.compile +incdir: + - . +src: + - src/fuse_core_core_axi_write_out_if_if.sv + - src/fuse_core_core_axi_write_out_if_monitor_bfm.sv + - src/fuse_core_core_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hvl.compile new file mode 100644 index 000000000..91c251b33 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_core_core_axi_write_out_if_common.compile +incdir: + - . +src: + - fuse_core_core_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.sv new file mode 100644 index 000000000..67a3e3ba6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_core_core_axi_write_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_core_core_axi_write_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_core_core_axi_write_out_if_macros.svh" + + export fuse_core_core_axi_write_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_core_core_axi_write_out_if_typedefs.svh" + `include "src/fuse_core_core_axi_write_out_if_transaction.svh" + + `include "src/fuse_core_core_axi_write_out_if_configuration.svh" + `include "src/fuse_core_core_axi_write_out_if_driver.svh" + `include "src/fuse_core_core_axi_write_out_if_monitor.svh" + + `include "src/fuse_core_core_axi_write_out_if_transaction_coverage.svh" + `include "src/fuse_core_core_axi_write_out_if_sequence_base.svh" + `include "src/fuse_core_core_axi_write_out_if_random_sequence.svh" + + `include "src/fuse_core_core_axi_write_out_if_responder_sequence.svh" + `include "src/fuse_core_core_axi_write_out_if2reg_adapter.svh" + + `include "src/fuse_core_core_axi_write_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.vinfo new file mode 100644 index 000000000..c61f97535 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_core_core_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_core_core_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.sv new file mode 100644 index 000000000..104321aef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_core_core_axi_write_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_core_core_axi_write_out_if_typedefs_hdl.svh" + `include "src/fuse_core_core_axi_write_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..0aca1a6dd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_core_core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_sve.F new file mode 100644 index 000000000..fe260360b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if2reg_adapter.svh new file mode 100644 index 000000000..2092ace2d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_core_core_axi_write_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_core_core_axi_write_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_core_core_axi_write_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_core_core_axi_write_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_agent.svh new file mode 100644 index 000000000..d33c79019 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_core_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_core_core_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_core_core_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_core_core_axi_write_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_core_core_axi_write_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_configuration.svh new file mode 100644 index 000000000..5647a3442 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_core_core_axi_write_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_core_core_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_core_core_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_core_core_axi_write_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_core_core_axi_write_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_CONFIGURATION_STRUCT + fuse_core_core_axi_write_out_if_configuration_s fuse_core_core_axi_write_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_core_core_axi_write_out_if_configuration_s + // structure. The function returns the handle to the fuse_core_core_axi_write_out_if_configuration_struct. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_core_core_axi_write_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_core_core_axi_write_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_core_core_axi_write_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_core_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_core_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_core_core_axi_write_out_if_configuration_cg.set_inst_name($sformatf("fuse_core_core_axi_write_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_core_core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver.svh new file mode 100644 index 000000000..f49aeaaa8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_core_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_core_core_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_core_core_axi_write_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_core_core_axi_write_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_core_core_axi_write_out_if_driver and fuse_core_core_axi_write_out_if_driver_bfm +// to communicate initiator driven data to fuse_core_core_axi_write_out_if_driver_bfm. +`fuse_core_core_axi_write_out_if_INITIATOR_STRUCT + fuse_core_core_axi_write_out_if_initiator_s fuse_core_core_axi_write_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_core_core_axi_write_out_if_driver and fuse_core_core_axi_write_out_if_driver_bfm +// to communicate Responder driven data to fuse_core_core_axi_write_out_if_driver_bfm. +`fuse_core_core_axi_write_out_if_RESPONDER_STRUCT + fuse_core_core_axi_write_out_if_responder_s fuse_core_core_axi_write_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_core_core_axi_write_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_core_core_axi_write_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_core_core_axi_write_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_core_core_axi_write_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver_bfm.sv new file mode 100644 index 000000000..e5b9f650e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_core_core_axi_write_out_if signal driving. It is +// accessed by the uvm fuse_core_core_axi_write_out_if driver through a virtual interface +// handle in the fuse_core_core_axi_write_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_core_core_axi_write_out_if_if. +// +// Input signals from the fuse_core_core_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_core_core_axi_write_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_core_core_axi_write_out_if_pkg_hdl::*; +`include "src/fuse_core_core_axi_write_out_if_macros.svh" + +interface fuse_core_core_axi_write_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_core_core_axi_write_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_core_core_axi_write_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_core_core_axi_write_out_if_pkg::fuse_core_core_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_core_core_axi_write_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_core_core_axi_write_out_if_driver to this BFM + // **************************************************************************** + `fuse_core_core_axi_write_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_core_core_axi_write_out_if_driver and fuse_core_core_axi_write_out_if_driver_bfm + // to communicate initiator driven data to fuse_core_core_axi_write_out_if_driver_bfm. + `fuse_core_core_axi_write_out_if_INITIATOR_STRUCT + fuse_core_core_axi_write_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_core_core_axi_write_out_if_driver and fuse_core_core_axi_write_out_if_driver_bfm + // to communicate Responder driven data to fuse_core_core_axi_write_out_if_driver_bfm. + `fuse_core_core_axi_write_out_if_RESPONDER_STRUCT + fuse_core_core_axi_write_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_core_core_axi_write_out_if_configuration_s fuse_core_core_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_core_core_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_core_core_axi_write_out_if_initiator_s fuse_core_core_axi_write_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_core_core_axi_write_out_if_responder_s fuse_core_core_axi_write_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_core_core_axi_write_out_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Members within the fuse_core_core_axi_write_out_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + initiator_struct = fuse_core_core_axi_write_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_core_core_axi_write_out_if_responder_struct.xyz = awready_i; // + // fuse_core_core_axi_write_out_if_responder_struct.xyz = wready_i; // + // fuse_core_core_axi_write_out_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_core_core_axi_write_out_if_responder_struct.xyz = bid_i; // + // fuse_core_core_axi_write_out_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_core_core_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_core_core_axi_write_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_core_core_axi_write_out_if_initiator_s fuse_core_core_axi_write_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_core_core_axi_write_out_if_responder_s fuse_core_core_axi_write_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_core_core_axi_write_out_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Variables within the fuse_core_core_axi_write_out_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= fuse_core_core_axi_write_out_if_initiator_struct.xyz; // + // wready_o <= fuse_core_core_axi_write_out_if_initiator_struct.xyz; // + // bresp_o <= fuse_core_core_axi_write_out_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= fuse_core_core_axi_write_out_if_initiator_struct.xyz; // + // bvalid_o <= fuse_core_core_axi_write_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_core_core_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_core_core_axi_write_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_if.sv new file mode 100644 index 000000000..6bbcc3a46 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_core_core_axi_write_out_if interface signals. +// It is instantiated once per fuse_core_core_axi_write_out_if bus. Bus Functional Models, +// BFM's named fuse_core_core_axi_write_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_core_core_axi_write_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_core_core_axi_write_out_if_bus.awready), // Agent input +// .dut_signal_port(fuse_core_core_axi_write_out_if_bus.wready), // Agent input +// .dut_signal_port(fuse_core_core_axi_write_out_if_bus.bresp), // Agent input +// .dut_signal_port(fuse_core_core_axi_write_out_if_bus.bid), // Agent input +// .dut_signal_port(fuse_core_core_axi_write_out_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_core_core_axi_write_out_if_pkg_hdl::*; + +interface fuse_core_core_axi_write_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_macros.svh new file mode 100644 index 000000000..91edfefea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_core_core_axi_write_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_core_core_axi_write_out_if_configuration class. +// + `define fuse_core_core_axi_write_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_core_core_axi_write_out_if_configuration_s; + + `define fuse_core_core_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_core_core_axi_write_out_if_configuration_s to_struct();\ + fuse_core_core_axi_write_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_core_core_axi_write_out_if_configuration_struct );\ + endfunction + + `define fuse_core_core_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_core_core_axi_write_out_if_configuration_s fuse_core_core_axi_write_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_core_core_axi_write_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_core_core_axi_write_out_if_transaction class. +// + `define fuse_core_core_axi_write_out_if_MONITOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_core_core_axi_write_out_if_monitor_s; + + `define fuse_core_core_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_core_core_axi_write_out_if_monitor_s to_monitor_struct();\ + fuse_core_core_axi_write_out_if_monitor_struct = \ + { \ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_core_core_axi_write_out_if_monitor_struct);\ + endfunction\ + + `define fuse_core_core_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_core_core_axi_write_out_if_monitor_s fuse_core_core_axi_write_out_if_monitor_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_core_core_axi_write_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_core_core_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_core_core_axi_write_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_core_core_axi_write_out_if_initiator_s; + + `define fuse_core_core_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_core_core_axi_write_out_if_initiator_s to_initiator_struct();\ + fuse_core_core_axi_write_out_if_initiator_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_core_core_axi_write_out_if_initiator_struct);\ + endfunction + + `define fuse_core_core_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_core_core_axi_write_out_if_initiator_s fuse_core_core_axi_write_out_if_initiator_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_core_core_axi_write_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_core_core_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_core_core_axi_write_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_core_core_axi_write_out_if_responder_s; + + `define fuse_core_core_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_core_core_axi_write_out_if_responder_s to_responder_struct();\ + fuse_core_core_axi_write_out_if_responder_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_core_core_axi_write_out_if_responder_struct);\ + endfunction + + `define fuse_core_core_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_core_core_axi_write_out_if_responder_s fuse_core_core_axi_write_out_if_responder_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_core_core_axi_write_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor.svh new file mode 100644 index 000000000..583e26c88 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_core_core_axi_write_out_if transactions observed by the +// fuse_core_core_axi_write_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_core_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_core_core_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_core_core_axi_write_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_core_core_axi_write_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_core_core_axi_write_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_core_core_axi_write_out_if_monitor_s fuse_core_core_axi_write_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_core_core_axi_write_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor_bfm.sv new file mode 100644 index 000000000..37b7af3f7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_core_core_axi_write_out_if signal monitoring. +// It is accessed by the uvm fuse_core_core_axi_write_out_if monitor through a virtual +// interface handle in the fuse_core_core_axi_write_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_core_core_axi_write_out_if_if. +// +// Input signals from the fuse_core_core_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_core_core_axi_write_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_core_core_axi_write_out_if_pkg_hdl::*; +`include "src/fuse_core_core_axi_write_out_if_macros.svh" + + +interface fuse_core_core_axi_write_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_core_core_axi_write_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_core_core_axi_write_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_core_core_axi_write_out_if_MONITOR_STRUCT + fuse_core_core_axi_write_out_if_monitor_s fuse_core_core_axi_write_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_core_core_axi_write_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + fuse_core_core_axi_write_out_if_pkg::fuse_core_core_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_core_core_axi_write_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_core_core_axi_write_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_core_core_axi_write_out_if_configuration_s fuse_core_core_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_core_core_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_core_core_axi_write_out_if_monitor_s fuse_core_core_axi_write_out_if_monitor_struct); + // + // Available struct members: + // // fuse_core_core_axi_write_out_if_monitor_struct.core_awready + // // fuse_core_core_axi_write_out_if_monitor_struct.core_wready + // // fuse_core_core_axi_write_out_if_monitor_struct.core_bresp + // // fuse_core_core_axi_write_out_if_monitor_struct.core_bid + // // fuse_core_core_axi_write_out_if_monitor_struct.core_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_core_core_axi_write_out_if_monitor_struct.xyz = awready_i; // + // fuse_core_core_axi_write_out_if_monitor_struct.xyz = wready_i; // + // fuse_core_core_axi_write_out_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_core_core_axi_write_out_if_monitor_struct.xyz = bid_i; // + // fuse_core_core_axi_write_out_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_random_sequence.svh new file mode 100644 index 000000000..df9b0ffcd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_core_core_axi_write_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_core_core_axi_write_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_core_core_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_core_core_axi_write_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_core_core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_core_core_axi_write_out_if_random_sequence::body()-fuse_core_core_axi_write_out_if_transaction randomization failed") + // Send the transaction to the fuse_core_core_axi_write_out_if_driver_bfm via the sequencer and fuse_core_core_axi_write_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_core_core_axi_write_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_responder_sequence.svh new file mode 100644 index 000000000..21ff7b447 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_core_core_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_core_core_axi_write_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_core_core_axi_write_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_core_core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_sequence_base.svh new file mode 100644 index 000000000..c1c075a25 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_core_core_axi_write_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_core_core_axi_write_out_if_transaction_req_t; + fuse_core_core_axi_write_out_if_transaction_req_t req; + typedef fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_core_core_axi_write_out_if_transaction_rsp_t; + fuse_core_core_axi_write_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_core_core_axi_write_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_core_core_axi_write_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction.svh new file mode 100644 index 000000000..ce2250205 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_core_core_axi_write_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_core_core_axi_write_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_awready ; + logic core_wready ; + axi_pkg::axi_burst_e core_bresp ; + logic core_bid ; + logic core_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_core_core_axi_write_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_core_core_axi_write_out_if_monitor and fuse_core_core_axi_write_out_if_monitor_bfm + // This struct is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_MONITOR_STRUCT + fuse_core_core_axi_write_out_if_monitor_s fuse_core_core_axi_write_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_core_core_axi_write_out_if_monitor_s + // structure. The function returns the handle to the fuse_core_core_axi_write_out_if_monitor_struct. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_core_core_axi_write_out_if_driver and fuse_core_core_axi_write_out_if_driver_bfm + // to communicate initiator driven data to fuse_core_core_axi_write_out_if_driver_bfm. + // This struct is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_INITIATOR_STRUCT + fuse_core_core_axi_write_out_if_initiator_s fuse_core_core_axi_write_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_core_core_axi_write_out_if_initiator_s + // structure. The function returns the handle to the fuse_core_core_axi_write_out_if_initiator_struct. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_core_core_axi_write_out_if_driver and fuse_core_core_axi_write_out_if_driver_bfm + // to communicate Responder driven data to fuse_core_core_axi_write_out_if_driver_bfm. + // This struct is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_RESPONDER_STRUCT + fuse_core_core_axi_write_out_if_responder_s fuse_core_core_axi_write_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_core_core_axi_write_out_if_responder_s + // structure. The function returns the handle to the fuse_core_core_axi_write_out_if_responder_struct. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awready:0x%x core_wready:0x%x core_bresp:0x%x core_bid:0x%x core_bvalid:0x%x ",core_awready,core_wready,core_bresp,core_bid,core_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_awready == RHS.core_awready) + &&(this.core_wready == RHS.core_wready) + &&(this.core_bresp == RHS.core_bresp) + &&(this.core_bid == RHS.core_bid) + &&(this.core_bvalid == RHS.core_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awready = RHS.core_awready; + this.core_wready = RHS.core_wready; + this.core_bresp = RHS.core_bresp; + this.core_bid = RHS.core_bid; + this.core_bvalid = RHS.core_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_core_core_axi_write_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awready,"core_awready"); + $add_attribute(transaction_view_h,core_wready,"core_wready"); + $add_attribute(transaction_view_h,core_bresp,"core_bresp"); + $add_attribute(transaction_view_h,core_bid,"core_bid"); + $add_attribute(transaction_view_h,core_bvalid,"core_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction_coverage.svh new file mode 100644 index 000000000..73985aa24 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_core_core_axi_write_out_if transaction information using +// a covergroup named fuse_core_core_axi_write_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_core_core_axi_write_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_core_core_axi_write_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awready: coverpoint coverage_trans.core_awready; + core_wready: coverpoint coverage_trans.core_wready; + core_bresp: coverpoint coverage_trans.core_bresp; + core_bid: coverpoint coverage_trans.core_bid; + core_bvalid: coverpoint coverage_trans.core_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_core_core_axi_write_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_core_core_axi_write_out_if_transaction_cg.set_inst_name($sformatf("fuse_core_core_axi_write_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_core_core_axi_write_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/yaml/fuse_core_core_axi_write_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/yaml/fuse_core_core_axi_write_out_if_interface.yaml new file mode 100644 index 000000000..943a1091a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/yaml/fuse_core_core_axi_write_out_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + fuse_core_core_axi_write_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.project new file mode 100644 index 000000000..63a0f5c9d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..a3cbefe0b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..c29cae1ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f + +fuse_ctrl_core_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f + +fuse_ctrl_core_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_read_if_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_read_if_pkg +COMP_fuse_ctrl_core_axi_read_if_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_read_if_pkg +COMP_fuse_ctrl_core_axi_read_if_PKG_TGT = $(COMP_fuse_ctrl_core_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_read_if_pkg: $(COMP_fuse_ctrl_core_axi_read_if_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_read_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_read_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_if_pkg += -I$(fuse_ctrl_core_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_if_pkg += $(fuse_ctrl_core_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_read_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..4e0c5588d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if.compile new file mode 100644 index 000000000..48a0d3158 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_read_if_hvl.compile + - fuse_ctrl_core_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..28155505e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_read_if_if.sv +src/fuse_ctrl_core_axi_read_if_driver_bfm.sv +src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_common.compile new file mode 100644 index 000000000..109b88dad --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..733787653 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..90b4e36ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..26bcff49c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hdl.compile new file mode 100644 index 000000000..c28340779 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_read_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_read_if_if.sv + - src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv + - src/fuse_ctrl_core_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hvl.compile new file mode 100644 index 000000000..6135baefd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_read_if_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.sv new file mode 100644 index 000000000..88b9bb7a3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_read_if_macros.svh" + + export fuse_ctrl_core_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_read_if_typedefs.svh" + `include "src/fuse_ctrl_core_axi_read_if_transaction.svh" + + `include "src/fuse_ctrl_core_axi_read_if_configuration.svh" + `include "src/fuse_ctrl_core_axi_read_if_driver.svh" + `include "src/fuse_ctrl_core_axi_read_if_monitor.svh" + + `include "src/fuse_ctrl_core_axi_read_if_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_read_if_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_read_if_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_read_if_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_read_if2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..bb1d0794d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..c410235bf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_read_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..723625863 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..863eb4873 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..2ac137314 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_agent.svh new file mode 100644 index 000000000..cecf128e5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_configuration.svh new file mode 100644 index 000000000..c75c85e1c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_read_if_configuration_s fuse_ctrl_core_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_read_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_if_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_read_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver.svh new file mode 100644 index 000000000..ab8413284 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_read_if_driver_bfm. +`fuse_ctrl_core_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_if_initiator_s fuse_ctrl_core_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_read_if_driver_bfm. +`fuse_ctrl_core_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_if_responder_s fuse_ctrl_core_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..8d672492f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_read_if signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_read_if driver through a virtual interface +// handle in the fuse_ctrl_core_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_read_if_if. +// +// Input signals from the fuse_ctrl_core_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_if_macros.svh" + +interface fuse_ctrl_core_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_read_if_pkg::fuse_ctrl_core_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_read_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_if_driver_bfm. + `fuse_ctrl_core_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_if_driver_bfm. + `fuse_ctrl_core_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_read_if_configuration_s fuse_ctrl_core_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_read_if_initiator_s fuse_ctrl_core_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_read_if_responder_s fuse_ctrl_core_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_read_if_initiator_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Members within the fuse_ctrl_core_axi_read_if_responder_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + initiator_struct = fuse_ctrl_core_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_read_if_initiator_s fuse_ctrl_core_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_read_if_responder_s fuse_ctrl_core_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_read_if_initiator_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Variables within the fuse_ctrl_core_axi_read_if_responder_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arlock_i; // + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_if.sv new file mode 100644 index 000000000..5f8ec8923 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_read_if interface signals. +// It is instantiated once per fuse_ctrl_core_axi_read_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_if_pkg_hdl::*; + +interface fuse_ctrl_core_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_macros.svh new file mode 100644 index 000000000..c5799df29 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_read_if_configuration class. +// + `define fuse_ctrl_core_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_read_if_configuration_s; + + `define fuse_ctrl_core_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_if_configuration_s to_struct();\ + fuse_ctrl_core_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_read_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_read_if_configuration_s fuse_ctrl_core_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_read_if_transaction class. +// + `define fuse_ctrl_core_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_if_monitor_s; + + `define fuse_ctrl_core_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_if_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_read_if_monitor_struct = \ + { \ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_read_if_monitor_s fuse_ctrl_core_axi_read_if_monitor_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_if_initiator_s; + + `define fuse_ctrl_core_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_if_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_read_if_initiator_struct = \ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_read_if_initiator_s fuse_ctrl_core_axi_read_if_initiator_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_if_responder_s; + + `define fuse_ctrl_core_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_if_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_read_if_responder_struct = \ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_if_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_read_if_responder_s fuse_ctrl_core_axi_read_if_responder_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor.svh new file mode 100644 index 000000000..09bb82cf5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_read_if transactions observed by the +// fuse_ctrl_core_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_read_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_read_if_monitor_s fuse_ctrl_core_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..2f9a66938 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_read_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_read_if monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_read_if_if. +// +// Input signals from the fuse_ctrl_core_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_if_macros.svh" + + +interface fuse_ctrl_core_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_read_if_MONITOR_STRUCT + fuse_ctrl_core_axi_read_if_monitor_s fuse_ctrl_core_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_read_if_pkg::fuse_ctrl_core_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_read_if_configuration_s fuse_ctrl_core_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_read_if_monitor_s fuse_ctrl_core_axi_read_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_araddr + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arvalid + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arburst + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arsize + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arlen + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_aruser + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arid + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arlock + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..f0d127eb7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_read_if_random_sequence::body()-fuse_ctrl_core_axi_read_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_read_if_driver_bfm via the sequencer and fuse_ctrl_core_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..beadd0baf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..ecb0cebaa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_if_transaction_req_t; + fuse_ctrl_core_axi_read_if_transaction_req_t req; + typedef fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_if_transaction_rsp_t; + fuse_ctrl_core_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction.svh new file mode 100644 index 000000000..44757277a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] core_araddr ; + logic core_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + logic [2:0] core_arsize ; + logic [7:0] core_arlen ; + logic [UW-1:0] core_aruser ; + logic [IW-1:0] core_arid ; + logic core_arlock ; + logic core_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_read_if_monitor and fuse_ctrl_core_axi_read_if_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_MONITOR_STRUCT + fuse_ctrl_core_axi_read_if_monitor_s fuse_ctrl_core_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_if_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_if_initiator_s fuse_ctrl_core_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_if_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_if_responder_s fuse_ctrl_core_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_if_responder_struct. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_araddr:0x%x core_arvalid:0x%x core_arburst:0x%x core_arsize:0x%x core_arlen:0x%x core_aruser:0x%x core_arid:0x%x core_arlock:0x%x core_rready:0x%x ",core_araddr,core_arvalid,core_arburst,core_arsize,core_arlen,core_aruser,core_arid,core_arlock,core_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_araddr = RHS.core_araddr; + this.core_arvalid = RHS.core_arvalid; + this.core_arburst = RHS.core_arburst; + this.core_arsize = RHS.core_arsize; + this.core_arlen = RHS.core_arlen; + this.core_aruser = RHS.core_aruser; + this.core_arid = RHS.core_arid; + this.core_arlock = RHS.core_arlock; + this.core_rready = RHS.core_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_araddr,"core_araddr"); + $add_attribute(transaction_view_h,core_arvalid,"core_arvalid"); + $add_attribute(transaction_view_h,core_arburst,"core_arburst"); + $add_attribute(transaction_view_h,core_arsize,"core_arsize"); + $add_attribute(transaction_view_h,core_arlen,"core_arlen"); + $add_attribute(transaction_view_h,core_aruser,"core_aruser"); + $add_attribute(transaction_view_h,core_arid,"core_arid"); + $add_attribute(transaction_view_h,core_arlock,"core_arlock"); + $add_attribute(transaction_view_h,core_rready,"core_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..70b6c9261 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_read_if transaction information using +// a covergroup named fuse_ctrl_core_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_araddr: coverpoint coverage_trans.core_araddr; + core_arvalid: coverpoint coverage_trans.core_arvalid; + core_arburst: coverpoint coverage_trans.core_arburst; + core_arsize: coverpoint coverage_trans.core_arsize; + core_arlen: coverpoint coverage_trans.core_arlen; + core_aruser: coverpoint coverage_trans.core_aruser; + core_arid: coverpoint coverage_trans.core_arid; + core_arlock: coverpoint coverage_trans.core_arlock; + core_rready: coverpoint coverage_trans.core_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_read_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/yaml/fuse_ctrl_core_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/yaml/fuse_ctrl_core_axi_read_if_interface.yaml new file mode 100644 index 000000000..cacadd72c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/yaml/fuse_ctrl_core_axi_read_if_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: core_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.project new file mode 100644 index 000000000..5f36c5d66 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_read_in_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.svproject new file mode 100644 index 000000000..33b6b34f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/Makefile new file mode 100644 index 000000000..04937f1d7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_read_in_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_read_in_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hvl.f + +fuse_ctrl_core_axi_read_in_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hdl.f + +fuse_ctrl_core_axi_read_in_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_read_in_if_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_read_in_if_pkg +COMP_fuse_ctrl_core_axi_read_in_if_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_read_in_if_pkg +COMP_fuse_ctrl_core_axi_read_in_if_PKG_TGT = $(COMP_fuse_ctrl_core_axi_read_in_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_read_in_if_pkg: $(COMP_fuse_ctrl_core_axi_read_in_if_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_read_in_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_read_in_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_read_in_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_in_if_pkg += -I$(fuse_ctrl_core_axi_read_in_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_in_if_pkg += $(fuse_ctrl_core_axi_read_in_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_read_in_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_read_in_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_read_in_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_read_in_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/compile.do new file mode 100644 index 000000000..ba9f78050 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_read_in_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if.compile new file mode 100644 index 000000000..cea52ff3f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_read_in_if_hvl.compile + - fuse_ctrl_core_axi_read_in_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_bfm.vinfo new file mode 100644 index 000000000..667ead1d5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_read_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_read_in_if_if.sv +src/fuse_ctrl_core_axi_read_in_if_driver_bfm.sv +src/fuse_ctrl_core_axi_read_in_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_common.compile new file mode 100644 index 000000000..984ba6c81 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hdl.f new file mode 100644 index 000000000..ab0f78a58 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hvl.f new file mode 100644 index 000000000..6e9dbaf7e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_xrtl.f new file mode 100644 index 000000000..02f0d168d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hdl.compile new file mode 100644 index 000000000..491ad6336 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_read_in_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_read_in_if_if.sv + - src/fuse_ctrl_core_axi_read_in_if_monitor_bfm.sv + - src/fuse_ctrl_core_axi_read_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hvl.compile new file mode 100644 index 000000000..1bab122b1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_read_in_if_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_read_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.sv new file mode 100644 index 000000000..c825d77d2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_in_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_read_in_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_read_in_if_macros.svh" + + export fuse_ctrl_core_axi_read_in_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_read_in_if_typedefs.svh" + `include "src/fuse_ctrl_core_axi_read_in_if_transaction.svh" + + `include "src/fuse_ctrl_core_axi_read_in_if_configuration.svh" + `include "src/fuse_ctrl_core_axi_read_in_if_driver.svh" + `include "src/fuse_ctrl_core_axi_read_in_if_monitor.svh" + + `include "src/fuse_ctrl_core_axi_read_in_if_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_read_in_if_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_read_in_if_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_read_in_if_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_read_in_if2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_read_in_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.vinfo new file mode 100644 index 000000000..7aa6556f8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_read_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_read_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv new file mode 100644 index 000000000..bd812d443 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_in_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_read_in_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_read_in_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.vinfo new file mode 100644 index 000000000..1740fc2cc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_sve.F new file mode 100644 index 000000000..c8b15a089 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if2reg_adapter.svh new file mode 100644 index 000000000..742aa971e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_read_in_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_read_in_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_read_in_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_agent.svh new file mode 100644 index 000000000..c79cacb4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_read_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_read_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_read_in_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_configuration.svh new file mode 100644 index 000000000..eaf5806d5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_read_in_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_read_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_read_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_read_in_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_read_in_if_configuration_s fuse_ctrl_core_axi_read_in_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_read_in_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_if_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_read_in_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_read_in_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_read_in_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_read_in_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_in_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver.svh new file mode 100644 index 000000000..40a71d1b7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_read_in_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_read_in_if_driver and fuse_ctrl_core_axi_read_in_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_read_in_if_driver_bfm. +`fuse_ctrl_core_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_in_if_initiator_s fuse_ctrl_core_axi_read_in_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_read_in_if_driver and fuse_ctrl_core_axi_read_in_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_read_in_if_driver_bfm. +`fuse_ctrl_core_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_in_if_responder_s fuse_ctrl_core_axi_read_in_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_read_in_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_read_in_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_read_in_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_read_in_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver_bfm.sv new file mode 100644 index 000000000..bdf19e41e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_read_in_if signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_read_in_if driver through a virtual interface +// handle in the fuse_ctrl_core_axi_read_in_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_read_in_if_if. +// +// Input signals from the fuse_ctrl_core_axi_read_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_read_in_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_in_if_macros.svh" + +interface fuse_ctrl_core_axi_read_in_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_read_in_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_in_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_read_in_if_pkg::fuse_ctrl_core_axi_read_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_read_in_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_read_in_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_read_in_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_in_if_driver and fuse_ctrl_core_axi_read_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_in_if_driver_bfm. + `fuse_ctrl_core_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_in_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_read_in_if_driver and fuse_ctrl_core_axi_read_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_in_if_driver_bfm. + `fuse_ctrl_core_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_in_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_read_in_if_configuration_s fuse_ctrl_core_axi_read_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_read_in_if_initiator_s fuse_ctrl_core_axi_read_in_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_read_in_if_responder_s fuse_ctrl_core_axi_read_in_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_read_in_if_initiator_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Members within the fuse_ctrl_core_axi_read_in_if_responder_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + initiator_struct = fuse_ctrl_core_axi_read_in_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_read_in_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_read_in_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_read_in_if_initiator_s fuse_ctrl_core_axi_read_in_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_read_in_if_responder_s fuse_ctrl_core_axi_read_in_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_read_in_if_initiator_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Variables within the fuse_ctrl_core_axi_read_in_if_responder_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = arlock_i; // + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_read_in_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_read_in_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_if.sv new file mode 100644 index 000000000..c46ca5b4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_read_in_if interface signals. +// It is instantiated once per fuse_ctrl_core_axi_read_in_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_read_in_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_read_in_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_in_if_pkg_hdl::*; + +interface fuse_ctrl_core_axi_read_in_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_macros.svh new file mode 100644 index 000000000..71c48f0b3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_read_in_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_read_in_if_configuration class. +// + `define fuse_ctrl_core_axi_read_in_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_read_in_if_configuration_s; + + `define fuse_ctrl_core_axi_read_in_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_if_configuration_s to_struct();\ + fuse_ctrl_core_axi_read_in_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_read_in_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_read_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_read_in_if_configuration_s fuse_ctrl_core_axi_read_in_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_read_in_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_read_in_if_transaction class. +// + `define fuse_ctrl_core_axi_read_in_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_in_if_monitor_s; + + `define fuse_ctrl_core_axi_read_in_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_if_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_read_in_if_monitor_struct = \ + { \ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_in_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_read_in_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_read_in_if_monitor_s fuse_ctrl_core_axi_read_in_if_monitor_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_in_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_read_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_in_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_in_if_initiator_s; + + `define fuse_ctrl_core_axi_read_in_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_if_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_read_in_if_initiator_struct = \ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_in_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_in_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_read_in_if_initiator_s fuse_ctrl_core_axi_read_in_if_initiator_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_in_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_read_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_in_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_in_if_responder_s; + + `define fuse_ctrl_core_axi_read_in_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_if_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_read_in_if_responder_struct = \ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_in_if_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_in_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_read_in_if_responder_s fuse_ctrl_core_axi_read_in_if_responder_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_in_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor.svh new file mode 100644 index 000000000..4942cca3b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_read_in_if transactions observed by the +// fuse_ctrl_core_axi_read_in_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_read_in_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_read_in_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_read_in_if_monitor_s fuse_ctrl_core_axi_read_in_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_read_in_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor_bfm.sv new file mode 100644 index 000000000..2e9f2fc31 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_read_in_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_read_in_if monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_read_in_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_read_in_if_if. +// +// Input signals from the fuse_ctrl_core_axi_read_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_read_in_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_in_if_macros.svh" + + +interface fuse_ctrl_core_axi_read_in_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_read_in_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_in_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_read_in_if_MONITOR_STRUCT + fuse_ctrl_core_axi_read_in_if_monitor_s fuse_ctrl_core_axi_read_in_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_read_in_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_read_in_if_pkg::fuse_ctrl_core_axi_read_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_read_in_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_read_in_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_read_in_if_configuration_s fuse_ctrl_core_axi_read_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_read_in_if_monitor_s fuse_ctrl_core_axi_read_in_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_araddr + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_arvalid + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_arburst + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_arsize + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_arlen + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_aruser + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_arid + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_arlock + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_random_sequence.svh new file mode 100644 index 000000000..4d44b21a1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_read_in_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_read_in_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_read_in_if_random_sequence::body()-fuse_ctrl_core_axi_read_in_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_read_in_if_driver_bfm via the sequencer and fuse_ctrl_core_axi_read_in_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_read_in_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_responder_sequence.svh new file mode 100644 index 000000000..cafea5de4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_read_in_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_sequence_base.svh new file mode 100644 index 000000000..ccf0c8987 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_in_if_transaction_req_t; + fuse_ctrl_core_axi_read_in_if_transaction_req_t req; + typedef fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_in_if_transaction_rsp_t; + fuse_ctrl_core_axi_read_in_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_read_in_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_read_in_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction.svh new file mode 100644 index 000000000..75bfc1b3a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_read_in_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] core_araddr ; + logic core_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + logic [2:0] core_arsize ; + logic [7:0] core_arlen ; + logic [UW-1:0] core_aruser ; + logic [IW-1:0] core_arid ; + logic core_arlock ; + logic core_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_read_in_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_read_in_if_monitor and fuse_ctrl_core_axi_read_in_if_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_MONITOR_STRUCT + fuse_ctrl_core_axi_read_in_if_monitor_s fuse_ctrl_core_axi_read_in_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_in_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_if_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_in_if_driver and fuse_ctrl_core_axi_read_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_in_if_initiator_s fuse_ctrl_core_axi_read_in_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_in_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_if_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_read_in_if_driver and fuse_ctrl_core_axi_read_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_in_if_responder_s fuse_ctrl_core_axi_read_in_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_in_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_if_responder_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_araddr:0x%x core_arvalid:0x%x core_arburst:0x%x core_arsize:0x%x core_arlen:0x%x core_aruser:0x%x core_arid:0x%x core_arlock:0x%x core_rready:0x%x ",core_araddr,core_arvalid,core_arburst,core_arsize,core_arlen,core_aruser,core_arid,core_arlock,core_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_araddr = RHS.core_araddr; + this.core_arvalid = RHS.core_arvalid; + this.core_arburst = RHS.core_arburst; + this.core_arsize = RHS.core_arsize; + this.core_arlen = RHS.core_arlen; + this.core_aruser = RHS.core_aruser; + this.core_arid = RHS.core_arid; + this.core_arlock = RHS.core_arlock; + this.core_rready = RHS.core_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_read_in_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_araddr,"core_araddr"); + $add_attribute(transaction_view_h,core_arvalid,"core_arvalid"); + $add_attribute(transaction_view_h,core_arburst,"core_arburst"); + $add_attribute(transaction_view_h,core_arsize,"core_arsize"); + $add_attribute(transaction_view_h,core_arlen,"core_arlen"); + $add_attribute(transaction_view_h,core_aruser,"core_aruser"); + $add_attribute(transaction_view_h,core_arid,"core_arid"); + $add_attribute(transaction_view_h,core_arlock,"core_arlock"); + $add_attribute(transaction_view_h,core_rready,"core_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction_coverage.svh new file mode 100644 index 000000000..ae301fb39 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_read_in_if transaction information using +// a covergroup named fuse_ctrl_core_axi_read_in_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_read_in_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_araddr: coverpoint coverage_trans.core_araddr; + core_arvalid: coverpoint coverage_trans.core_arvalid; + core_arburst: coverpoint coverage_trans.core_arburst; + core_arsize: coverpoint coverage_trans.core_arsize; + core_arlen: coverpoint coverage_trans.core_arlen; + core_aruser: coverpoint coverage_trans.core_aruser; + core_arid: coverpoint coverage_trans.core_arid; + core_arlock: coverpoint coverage_trans.core_arlock; + core_rready: coverpoint coverage_trans.core_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_read_in_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_read_in_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_in_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_read_in_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/yaml/fuse_ctrl_core_axi_read_in_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/yaml/fuse_ctrl_core_axi_read_in_if_interface.yaml new file mode 100644 index 000000000..a53f12850 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/yaml/fuse_ctrl_core_axi_read_in_if_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_read_in_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: core_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.project new file mode 100644 index 000000000..e463bf00a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_read_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.svproject new file mode 100644 index 000000000..4a40ac8c2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/Makefile new file mode 100644 index 000000000..0ccd2f81d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_read_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_read_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hvl.f + +fuse_ctrl_core_axi_read_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hdl.f + +fuse_ctrl_core_axi_read_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_read_in_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_read_in_pkg +COMP_fuse_ctrl_core_axi_read_in_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_read_in_pkg +COMP_fuse_ctrl_core_axi_read_in_PKG_TGT = $(COMP_fuse_ctrl_core_axi_read_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_read_in_pkg: $(COMP_fuse_ctrl_core_axi_read_in_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_read_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_read_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_read_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_read_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_read_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_in_pkg += -I$(fuse_ctrl_core_axi_read_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_in_pkg += $(fuse_ctrl_core_axi_read_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_read_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_read_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_read_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_read_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/compile.do new file mode 100644 index 000000000..badb44884 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_read_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in.compile new file mode 100644 index 000000000..87b941a8f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_read_in_hvl.compile + - fuse_ctrl_core_axi_read_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_bfm.vinfo new file mode 100644 index 000000000..5b881217d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_read_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_read_in_if.sv +src/fuse_ctrl_core_axi_read_in_driver_bfm.sv +src/fuse_ctrl_core_axi_read_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_common.compile new file mode 100644 index 000000000..c150c939d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hdl.f new file mode 100644 index 000000000..b5ab5eab1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hvl.f new file mode 100644 index 000000000..ea2d1017f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_xrtl.f new file mode 100644 index 000000000..16c479246 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hdl.compile new file mode 100644 index 000000000..96c4c97f5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_read_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_read_in_if.sv + - src/fuse_ctrl_core_axi_read_in_monitor_bfm.sv + - src/fuse_ctrl_core_axi_read_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hvl.compile new file mode 100644 index 000000000..287ac6ac3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_read_in_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_read_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.sv new file mode 100644 index 000000000..69c23d827 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_read_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_read_in_macros.svh" + + export fuse_ctrl_core_axi_read_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_read_in_typedefs.svh" + `include "src/fuse_ctrl_core_axi_read_in_transaction.svh" + + `include "src/fuse_ctrl_core_axi_read_in_configuration.svh" + `include "src/fuse_ctrl_core_axi_read_in_driver.svh" + `include "src/fuse_ctrl_core_axi_read_in_monitor.svh" + + `include "src/fuse_ctrl_core_axi_read_in_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_read_in_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_read_in_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_read_in_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_read_in2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_read_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.vinfo new file mode 100644 index 000000000..0c3c242fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_read_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_read_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.sv new file mode 100644 index 000000000..2377e24ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_read_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_read_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.vinfo new file mode 100644 index 000000000..ff9df3113 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_sve.F new file mode 100644 index 000000000..2a3defa24 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in2reg_adapter.svh new file mode 100644 index 000000000..cb981636b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_read_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_read_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_read_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_agent.svh new file mode 100644 index 000000000..40c3aad46 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_read_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_read_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_read_in_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_configuration.svh new file mode 100644 index 000000000..55a8cfe6b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_read_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_read_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_read_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_read_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_read_in_configuration_s fuse_ctrl_core_axi_read_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_read_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_read_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_read_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_read_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_read_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver.svh new file mode 100644 index 000000000..a0a7a6daa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_read_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_read_in_driver and fuse_ctrl_core_axi_read_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_read_in_driver_bfm. +`fuse_ctrl_core_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_in_initiator_s fuse_ctrl_core_axi_read_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_read_in_driver and fuse_ctrl_core_axi_read_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_read_in_driver_bfm. +`fuse_ctrl_core_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_in_responder_s fuse_ctrl_core_axi_read_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_read_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_read_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_read_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_read_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver_bfm.sv new file mode 100644 index 000000000..ae6de997b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_read_in signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_read_in driver through a virtual interface +// handle in the fuse_ctrl_core_axi_read_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_read_in_if. +// +// Input signals from the fuse_ctrl_core_axi_read_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_read_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_in_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_in_macros.svh" + +interface fuse_ctrl_core_axi_read_in_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_read_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_read_in_pkg::fuse_ctrl_core_axi_read_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_read_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_read_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_read_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_in_driver and fuse_ctrl_core_axi_read_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_in_driver_bfm. + `fuse_ctrl_core_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_read_in_driver and fuse_ctrl_core_axi_read_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_in_driver_bfm. + `fuse_ctrl_core_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_read_in_configuration_s fuse_ctrl_core_axi_read_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_read_in_initiator_s fuse_ctrl_core_axi_read_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_read_in_responder_s fuse_ctrl_core_axi_read_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_read_in_initiator_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Members within the fuse_ctrl_core_axi_read_in_responder_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + initiator_struct = fuse_ctrl_core_axi_read_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_read_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_read_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_read_in_initiator_s fuse_ctrl_core_axi_read_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_read_in_responder_s fuse_ctrl_core_axi_read_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_read_in_initiator_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Variables within the fuse_ctrl_core_axi_read_in_responder_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = arlock_i; // + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_read_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_read_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_if.sv new file mode 100644 index 000000000..b778c9293 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_read_in interface signals. +// It is instantiated once per fuse_ctrl_core_axi_read_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_read_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_read_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_in_pkg_hdl::*; + +interface fuse_ctrl_core_axi_read_in_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_macros.svh new file mode 100644 index 000000000..4ada88f4d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_read_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_read_in_configuration class. +// + `define fuse_ctrl_core_axi_read_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_read_in_configuration_s; + + `define fuse_ctrl_core_axi_read_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_configuration_s to_struct();\ + fuse_ctrl_core_axi_read_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_read_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_read_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_read_in_configuration_s fuse_ctrl_core_axi_read_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_read_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_read_in_transaction class. +// + `define fuse_ctrl_core_axi_read_in_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_in_monitor_s; + + `define fuse_ctrl_core_axi_read_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_read_in_monitor_struct = \ + { \ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_read_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_read_in_monitor_s fuse_ctrl_core_axi_read_in_monitor_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_read_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_in_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_in_initiator_s; + + `define fuse_ctrl_core_axi_read_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_read_in_initiator_struct = \ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_read_in_initiator_s fuse_ctrl_core_axi_read_in_initiator_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_read_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_in_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_in_responder_s; + + `define fuse_ctrl_core_axi_read_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_read_in_responder_struct = \ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_in_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_read_in_responder_s fuse_ctrl_core_axi_read_in_responder_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor.svh new file mode 100644 index 000000000..62b74b3f5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_read_in transactions observed by the +// fuse_ctrl_core_axi_read_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_read_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_read_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_read_in_monitor_s fuse_ctrl_core_axi_read_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_read_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor_bfm.sv new file mode 100644 index 000000000..13ea7d2b3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_read_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_read_in monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_read_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_read_in_if. +// +// Input signals from the fuse_ctrl_core_axi_read_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_read_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_in_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_in_macros.svh" + + +interface fuse_ctrl_core_axi_read_in_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_read_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_read_in_MONITOR_STRUCT + fuse_ctrl_core_axi_read_in_monitor_s fuse_ctrl_core_axi_read_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_read_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_read_in_pkg::fuse_ctrl_core_axi_read_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_read_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_read_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_read_in_configuration_s fuse_ctrl_core_axi_read_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_read_in_monitor_s fuse_ctrl_core_axi_read_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_araddr + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_arvalid + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_arburst + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_arsize + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_arlen + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_aruser + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_arid + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_arlock + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_random_sequence.svh new file mode 100644 index 000000000..ce6f4efd0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_read_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_read_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_read_in_random_sequence::body()-fuse_ctrl_core_axi_read_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_read_in_driver_bfm via the sequencer and fuse_ctrl_core_axi_read_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_read_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_responder_sequence.svh new file mode 100644 index 000000000..44a3b25db --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_read_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_sequence_base.svh new file mode 100644 index 000000000..bb92d2409 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_in_transaction_req_t; + fuse_ctrl_core_axi_read_in_transaction_req_t req; + typedef fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_in_transaction_rsp_t; + fuse_ctrl_core_axi_read_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_read_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_read_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction.svh new file mode 100644 index 000000000..39e8f9735 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_read_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] core_araddr ; + logic core_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + logic [2:0] core_arsize ; + logic [7:0] core_arlen ; + logic [UW-1:0] core_aruser ; + logic [IW-1:0] core_arid ; + logic core_arlock ; + logic core_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_read_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_read_in_monitor and fuse_ctrl_core_axi_read_in_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_MONITOR_STRUCT + fuse_ctrl_core_axi_read_in_monitor_s fuse_ctrl_core_axi_read_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_in_driver and fuse_ctrl_core_axi_read_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_in_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_in_initiator_s fuse_ctrl_core_axi_read_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_read_in_driver and fuse_ctrl_core_axi_read_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_in_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_in_responder_s fuse_ctrl_core_axi_read_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_responder_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_araddr:0x%x core_arvalid:0x%x core_arburst:0x%x core_arsize:0x%x core_arlen:0x%x core_aruser:0x%x core_arid:0x%x core_arlock:0x%x core_rready:0x%x ",core_araddr,core_arvalid,core_arburst,core_arsize,core_arlen,core_aruser,core_arid,core_arlock,core_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_araddr = RHS.core_araddr; + this.core_arvalid = RHS.core_arvalid; + this.core_arburst = RHS.core_arburst; + this.core_arsize = RHS.core_arsize; + this.core_arlen = RHS.core_arlen; + this.core_aruser = RHS.core_aruser; + this.core_arid = RHS.core_arid; + this.core_arlock = RHS.core_arlock; + this.core_rready = RHS.core_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_read_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_araddr,"core_araddr"); + $add_attribute(transaction_view_h,core_arvalid,"core_arvalid"); + $add_attribute(transaction_view_h,core_arburst,"core_arburst"); + $add_attribute(transaction_view_h,core_arsize,"core_arsize"); + $add_attribute(transaction_view_h,core_arlen,"core_arlen"); + $add_attribute(transaction_view_h,core_aruser,"core_aruser"); + $add_attribute(transaction_view_h,core_arid,"core_arid"); + $add_attribute(transaction_view_h,core_arlock,"core_arlock"); + $add_attribute(transaction_view_h,core_rready,"core_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction_coverage.svh new file mode 100644 index 000000000..b17252421 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_read_in transaction information using +// a covergroup named fuse_ctrl_core_axi_read_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_read_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_araddr: coverpoint coverage_trans.core_araddr; + core_arvalid: coverpoint coverage_trans.core_arvalid; + core_arburst: coverpoint coverage_trans.core_arburst; + core_arsize: coverpoint coverage_trans.core_arsize; + core_arlen: coverpoint coverage_trans.core_arlen; + core_aruser: coverpoint coverage_trans.core_aruser; + core_arid: coverpoint coverage_trans.core_arid; + core_arlock: coverpoint coverage_trans.core_arlock; + core_rready: coverpoint coverage_trans.core_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_read_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_read_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_read_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/yaml/fuse_ctrl_core_axi_read_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/yaml/fuse_ctrl_core_axi_read_in_interface.yaml new file mode 100644 index 000000000..85b8443f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/yaml/fuse_ctrl_core_axi_read_in_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_read_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: core_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.project new file mode 100644 index 000000000..4eb8e7fa7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_read_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.svproject new file mode 100644 index 000000000..ca67120a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/Makefile new file mode 100644 index 000000000..77d2d8ef1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_read_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_read_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hvl.f + +fuse_ctrl_core_axi_read_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hdl.f + +fuse_ctrl_core_axi_read_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_read_out_if_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_read_out_if_pkg +COMP_fuse_ctrl_core_axi_read_out_if_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_read_out_if_pkg +COMP_fuse_ctrl_core_axi_read_out_if_PKG_TGT = $(COMP_fuse_ctrl_core_axi_read_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_read_out_if_pkg: $(COMP_fuse_ctrl_core_axi_read_out_if_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_read_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_read_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_read_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_out_if_pkg += -I$(fuse_ctrl_core_axi_read_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_out_if_pkg += $(fuse_ctrl_core_axi_read_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_read_out_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_read_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_read_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_read_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/compile.do new file mode 100644 index 000000000..79c0b7bbf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_read_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if.compile new file mode 100644 index 000000000..9b16b1eb7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_read_out_if_hvl.compile + - fuse_ctrl_core_axi_read_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_bfm.vinfo new file mode 100644 index 000000000..052ffff1e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_read_out_if_if.sv +src/fuse_ctrl_core_axi_read_out_if_driver_bfm.sv +src/fuse_ctrl_core_axi_read_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_common.compile new file mode 100644 index 000000000..6f3386ead --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hdl.f new file mode 100644 index 000000000..49d73f821 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hvl.f new file mode 100644 index 000000000..49fbb9e2b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_xrtl.f new file mode 100644 index 000000000..6a4fea185 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hdl.compile new file mode 100644 index 000000000..67f1b7bb1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_read_out_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_read_out_if_if.sv + - src/fuse_ctrl_core_axi_read_out_if_monitor_bfm.sv + - src/fuse_ctrl_core_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hvl.compile new file mode 100644 index 000000000..0a7a5beef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_read_out_if_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.sv new file mode 100644 index 000000000..83af573ed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_read_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_read_out_if_macros.svh" + + export fuse_ctrl_core_axi_read_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_read_out_if_typedefs.svh" + `include "src/fuse_ctrl_core_axi_read_out_if_transaction.svh" + + `include "src/fuse_ctrl_core_axi_read_out_if_configuration.svh" + `include "src/fuse_ctrl_core_axi_read_out_if_driver.svh" + `include "src/fuse_ctrl_core_axi_read_out_if_monitor.svh" + + `include "src/fuse_ctrl_core_axi_read_out_if_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_read_out_if_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_read_out_if_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_read_out_if_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_read_out_if2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_read_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.vinfo new file mode 100644 index 000000000..11d12898a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv new file mode 100644 index 000000000..7e145d3ca --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_read_out_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_read_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..4ebfc1cf0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_sve.F new file mode 100644 index 000000000..7e68f8b02 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if2reg_adapter.svh new file mode 100644 index 000000000..572880369 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_read_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_read_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_read_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_agent.svh new file mode 100644 index 000000000..98e11f158 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_read_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_configuration.svh new file mode 100644 index 000000000..ca3265795 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_read_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_read_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_read_out_if_configuration_s fuse_ctrl_core_axi_read_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_read_out_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_if_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_read_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_read_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_read_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_read_out_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver.svh new file mode 100644 index 000000000..79a37cfcd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_read_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_read_out_if_driver and fuse_ctrl_core_axi_read_out_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_read_out_if_driver_bfm. +`fuse_ctrl_core_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_out_if_initiator_s fuse_ctrl_core_axi_read_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_read_out_if_driver and fuse_ctrl_core_axi_read_out_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_read_out_if_driver_bfm. +`fuse_ctrl_core_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_out_if_responder_s fuse_ctrl_core_axi_read_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_read_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_read_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_read_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_read_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver_bfm.sv new file mode 100644 index 000000000..7bc0b6bba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_read_out_if signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_read_out_if driver through a virtual interface +// handle in the fuse_ctrl_core_axi_read_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_read_out_if_if. +// +// Input signals from the fuse_ctrl_core_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_read_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_out_if_macros.svh" + +interface fuse_ctrl_core_axi_read_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_read_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_read_out_if_pkg::fuse_ctrl_core_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_read_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_read_out_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_read_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_out_if_driver and fuse_ctrl_core_axi_read_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_out_if_driver_bfm. + `fuse_ctrl_core_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_read_out_if_driver and fuse_ctrl_core_axi_read_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_out_if_driver_bfm. + `fuse_ctrl_core_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_read_out_if_configuration_s fuse_ctrl_core_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_read_out_if_initiator_s fuse_ctrl_core_axi_read_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_read_out_if_responder_s fuse_ctrl_core_axi_read_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_read_out_if_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Members within the fuse_ctrl_core_axi_read_out_if_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + initiator_struct = fuse_ctrl_core_axi_read_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_core_axi_read_out_if_responder_struct.xyz = arready_i; // + // fuse_ctrl_core_axi_read_out_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_read_out_if_responder_struct.xyz = rresp_i; // + // fuse_ctrl_core_axi_read_out_if_responder_struct.xyz = rid_i; // + // fuse_ctrl_core_axi_read_out_if_responder_struct.xyz = rlast_i; // + // fuse_ctrl_core_axi_read_out_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_read_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_read_out_if_initiator_s fuse_ctrl_core_axi_read_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_read_out_if_responder_s fuse_ctrl_core_axi_read_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_read_out_if_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Variables within the fuse_ctrl_core_axi_read_out_if_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= fuse_ctrl_core_axi_read_out_if_initiator_struct.xyz; // + // rdata_o <= fuse_ctrl_core_axi_read_out_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= fuse_ctrl_core_axi_read_out_if_initiator_struct.xyz; // + // rid_o <= fuse_ctrl_core_axi_read_out_if_initiator_struct.xyz; // + // rlast_o <= fuse_ctrl_core_axi_read_out_if_initiator_struct.xyz; // + // rvalid_o <= fuse_ctrl_core_axi_read_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_read_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_if.sv new file mode 100644 index 000000000..b9222ea7e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_read_out_if interface signals. +// It is instantiated once per fuse_ctrl_core_axi_read_out_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_read_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_read_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_read_out_if_bus.arready), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_if_bus.rdata), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_if_bus.rresp), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_if_bus.rid), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_if_bus.rlast), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_out_if_pkg_hdl::*; + +interface fuse_ctrl_core_axi_read_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_macros.svh new file mode 100644 index 000000000..6806b6e97 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_read_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_read_out_if_configuration class. +// + `define fuse_ctrl_core_axi_read_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_read_out_if_configuration_s; + + `define fuse_ctrl_core_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_if_configuration_s to_struct();\ + fuse_ctrl_core_axi_read_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_read_out_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_read_out_if_configuration_s fuse_ctrl_core_axi_read_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_read_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_read_out_if_transaction class. +// + `define fuse_ctrl_core_axi_read_out_if_MONITOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } fuse_ctrl_core_axi_read_out_if_monitor_s; + + `define fuse_ctrl_core_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_if_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_read_out_if_monitor_struct = \ + { \ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( fuse_ctrl_core_axi_read_out_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_read_out_if_monitor_s fuse_ctrl_core_axi_read_out_if_monitor_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = fuse_ctrl_core_axi_read_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } fuse_ctrl_core_axi_read_out_if_initiator_s; + + `define fuse_ctrl_core_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_if_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_read_out_if_initiator_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( fuse_ctrl_core_axi_read_out_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_read_out_if_initiator_s fuse_ctrl_core_axi_read_out_if_initiator_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = fuse_ctrl_core_axi_read_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } fuse_ctrl_core_axi_read_out_if_responder_s; + + `define fuse_ctrl_core_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_if_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_read_out_if_responder_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( fuse_ctrl_core_axi_read_out_if_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_read_out_if_responder_s fuse_ctrl_core_axi_read_out_if_responder_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = fuse_ctrl_core_axi_read_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor.svh new file mode 100644 index 000000000..b170cd71e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_read_out_if transactions observed by the +// fuse_ctrl_core_axi_read_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_read_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_read_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_read_out_if_monitor_s fuse_ctrl_core_axi_read_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_read_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor_bfm.sv new file mode 100644 index 000000000..e01d9bb2b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_read_out_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_read_out_if monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_read_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_read_out_if_if. +// +// Input signals from the fuse_ctrl_core_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_read_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_out_if_macros.svh" + + +interface fuse_ctrl_core_axi_read_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_read_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_read_out_if_MONITOR_STRUCT + fuse_ctrl_core_axi_read_out_if_monitor_s fuse_ctrl_core_axi_read_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_read_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_read_out_if_pkg::fuse_ctrl_core_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_read_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_read_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_read_out_if_configuration_s fuse_ctrl_core_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_read_out_if_monitor_s fuse_ctrl_core_axi_read_out_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_read_out_if_monitor_struct.core_arready + // // fuse_ctrl_core_axi_read_out_if_monitor_struct.core_rdata + // // fuse_ctrl_core_axi_read_out_if_monitor_struct.core_rresp + // // fuse_ctrl_core_axi_read_out_if_monitor_struct.core_rid + // // fuse_ctrl_core_axi_read_out_if_monitor_struct.core_rlast + // // fuse_ctrl_core_axi_read_out_if_monitor_struct.core_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_read_out_if_monitor_struct.xyz = arready_i; // + // fuse_ctrl_core_axi_read_out_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_read_out_if_monitor_struct.xyz = rresp_i; // + // fuse_ctrl_core_axi_read_out_if_monitor_struct.xyz = rid_i; // + // fuse_ctrl_core_axi_read_out_if_monitor_struct.xyz = rlast_i; // + // fuse_ctrl_core_axi_read_out_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_random_sequence.svh new file mode 100644 index 000000000..444ad3349 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_read_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_read_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_read_out_if_random_sequence::body()-fuse_ctrl_core_axi_read_out_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_read_out_if_driver_bfm via the sequencer and fuse_ctrl_core_axi_read_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_read_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_responder_sequence.svh new file mode 100644 index 000000000..b146cb193 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_read_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_sequence_base.svh new file mode 100644 index 000000000..cc685c46c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_out_if_transaction_req_t; + fuse_ctrl_core_axi_read_out_if_transaction_req_t req; + typedef fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_out_if_transaction_rsp_t; + fuse_ctrl_core_axi_read_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_read_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_read_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction.svh new file mode 100644 index 000000000..3d9e4155f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_read_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_arready ; + logic [DW-1:0] core_rdata ; + axi_pkg::axi_burst_e core_rresp ; + logic [IW-1:0] core_rid ; + logic core_rlast ; + logic core_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_read_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_read_out_if_monitor and fuse_ctrl_core_axi_read_out_if_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_MONITOR_STRUCT + fuse_ctrl_core_axi_read_out_if_monitor_s fuse_ctrl_core_axi_read_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_out_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_if_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_out_if_driver and fuse_ctrl_core_axi_read_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_out_if_initiator_s fuse_ctrl_core_axi_read_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_out_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_if_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_read_out_if_driver and fuse_ctrl_core_axi_read_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_out_if_responder_s fuse_ctrl_core_axi_read_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_out_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_if_responder_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_arready:0x%x core_rdata:0x%x core_rresp:0x%x core_rid:0x%x core_rlast:0x%x core_rvalid:0x%x ",core_arready,core_rdata,core_rresp,core_rid,core_rlast,core_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_arready == RHS.core_arready) + &&(this.core_rdata == RHS.core_rdata) + &&(this.core_rresp == RHS.core_rresp) + &&(this.core_rid == RHS.core_rid) + &&(this.core_rlast == RHS.core_rlast) + &&(this.core_rvalid == RHS.core_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_arready = RHS.core_arready; + this.core_rdata = RHS.core_rdata; + this.core_rresp = RHS.core_rresp; + this.core_rid = RHS.core_rid; + this.core_rlast = RHS.core_rlast; + this.core_rvalid = RHS.core_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_read_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_arready,"core_arready"); + $add_attribute(transaction_view_h,core_rdata,"core_rdata"); + $add_attribute(transaction_view_h,core_rresp,"core_rresp"); + $add_attribute(transaction_view_h,core_rid,"core_rid"); + $add_attribute(transaction_view_h,core_rlast,"core_rlast"); + $add_attribute(transaction_view_h,core_rvalid,"core_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction_coverage.svh new file mode 100644 index 000000000..8c29582fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_read_out_if transaction information using +// a covergroup named fuse_ctrl_core_axi_read_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_read_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_arready: coverpoint coverage_trans.core_arready; + core_rdata: coverpoint coverage_trans.core_rdata; + core_rresp: coverpoint coverage_trans.core_rresp; + core_rid: coverpoint coverage_trans.core_rid; + core_rlast: coverpoint coverage_trans.core_rlast; + core_rvalid: coverpoint coverage_trans.core_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_read_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_read_out_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_read_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/yaml/fuse_ctrl_core_axi_read_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/yaml/fuse_ctrl_core_axi_read_out_if_interface.yaml new file mode 100644 index 000000000..e6555eaf2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/yaml/fuse_ctrl_core_axi_read_out_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_read_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.project new file mode 100644 index 000000000..23723ddc3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_read_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.svproject new file mode 100644 index 000000000..b74d8263a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/Makefile new file mode 100644 index 000000000..673e00d3b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_read_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_read_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hvl.f + +fuse_ctrl_core_axi_read_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hdl.f + +fuse_ctrl_core_axi_read_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_read_out_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_read_out_pkg +COMP_fuse_ctrl_core_axi_read_out_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_read_out_pkg +COMP_fuse_ctrl_core_axi_read_out_PKG_TGT = $(COMP_fuse_ctrl_core_axi_read_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_read_out_pkg: $(COMP_fuse_ctrl_core_axi_read_out_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_read_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_read_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_read_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_read_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_read_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_out_pkg += -I$(fuse_ctrl_core_axi_read_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_out_pkg += $(fuse_ctrl_core_axi_read_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_read_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_read_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_read_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_read_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/compile.do new file mode 100644 index 000000000..5e6a9fd02 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_read_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out.compile new file mode 100644 index 000000000..ad96a809e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_read_out_hvl.compile + - fuse_ctrl_core_axi_read_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_bfm.vinfo new file mode 100644 index 000000000..03fc49a0a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_read_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_read_out_if.sv +src/fuse_ctrl_core_axi_read_out_driver_bfm.sv +src/fuse_ctrl_core_axi_read_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_common.compile new file mode 100644 index 000000000..84d4f2e7f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hdl.f new file mode 100644 index 000000000..2debd1cc6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hvl.f new file mode 100644 index 000000000..8e9b75a31 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_xrtl.f new file mode 100644 index 000000000..4b0eaa25b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hdl.compile new file mode 100644 index 000000000..5b16e7513 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_read_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_read_out_if.sv + - src/fuse_ctrl_core_axi_read_out_monitor_bfm.sv + - src/fuse_ctrl_core_axi_read_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hvl.compile new file mode 100644 index 000000000..a24021047 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_read_out_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_read_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.sv new file mode 100644 index 000000000..d297db477 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_read_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_read_out_macros.svh" + + export fuse_ctrl_core_axi_read_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_read_out_typedefs.svh" + `include "src/fuse_ctrl_core_axi_read_out_transaction.svh" + + `include "src/fuse_ctrl_core_axi_read_out_configuration.svh" + `include "src/fuse_ctrl_core_axi_read_out_driver.svh" + `include "src/fuse_ctrl_core_axi_read_out_monitor.svh" + + `include "src/fuse_ctrl_core_axi_read_out_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_read_out_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_read_out_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_read_out_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_read_out2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_read_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.vinfo new file mode 100644 index 000000000..50e86c01e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_read_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_read_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.sv new file mode 100644 index 000000000..0e4cd5815 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_read_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_read_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.vinfo new file mode 100644 index 000000000..b7569b98e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_sve.F new file mode 100644 index 000000000..531457d9b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out2reg_adapter.svh new file mode 100644 index 000000000..44bdb8771 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_read_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_read_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_read_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_agent.svh new file mode 100644 index 000000000..4c2bae450 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_read_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_read_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_read_out_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_configuration.svh new file mode 100644 index 000000000..cadcf884e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_read_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_read_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_read_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_read_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_read_out_configuration_s fuse_ctrl_core_axi_read_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_read_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_read_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_read_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_read_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_read_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver.svh new file mode 100644 index 000000000..0471800a7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_read_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_read_out_driver and fuse_ctrl_core_axi_read_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_read_out_driver_bfm. +`fuse_ctrl_core_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_out_initiator_s fuse_ctrl_core_axi_read_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_read_out_driver and fuse_ctrl_core_axi_read_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_read_out_driver_bfm. +`fuse_ctrl_core_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_out_responder_s fuse_ctrl_core_axi_read_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_read_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_read_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_read_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_read_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver_bfm.sv new file mode 100644 index 000000000..e7cfcff1b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_read_out signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_read_out driver through a virtual interface +// handle in the fuse_ctrl_core_axi_read_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_read_out_if. +// +// Input signals from the fuse_ctrl_core_axi_read_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_read_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_out_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_out_macros.svh" + +interface fuse_ctrl_core_axi_read_out_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_read_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_read_out_pkg::fuse_ctrl_core_axi_read_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_read_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_read_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_read_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_out_driver and fuse_ctrl_core_axi_read_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_out_driver_bfm. + `fuse_ctrl_core_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_read_out_driver and fuse_ctrl_core_axi_read_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_out_driver_bfm. + `fuse_ctrl_core_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_read_out_configuration_s fuse_ctrl_core_axi_read_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_read_out_initiator_s fuse_ctrl_core_axi_read_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_read_out_responder_s fuse_ctrl_core_axi_read_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_read_out_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Members within the fuse_ctrl_core_axi_read_out_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + initiator_struct = fuse_ctrl_core_axi_read_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_core_axi_read_out_responder_struct.xyz = arready_i; // + // fuse_ctrl_core_axi_read_out_responder_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_read_out_responder_struct.xyz = rresp_i; // + // fuse_ctrl_core_axi_read_out_responder_struct.xyz = rid_i; // + // fuse_ctrl_core_axi_read_out_responder_struct.xyz = rlast_i; // + // fuse_ctrl_core_axi_read_out_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_read_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_read_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_read_out_initiator_s fuse_ctrl_core_axi_read_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_read_out_responder_s fuse_ctrl_core_axi_read_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_read_out_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Variables within the fuse_ctrl_core_axi_read_out_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= fuse_ctrl_core_axi_read_out_initiator_struct.xyz; // + // rdata_o <= fuse_ctrl_core_axi_read_out_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= fuse_ctrl_core_axi_read_out_initiator_struct.xyz; // + // rid_o <= fuse_ctrl_core_axi_read_out_initiator_struct.xyz; // + // rlast_o <= fuse_ctrl_core_axi_read_out_initiator_struct.xyz; // + // rvalid_o <= fuse_ctrl_core_axi_read_out_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_read_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_read_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_if.sv new file mode 100644 index 000000000..f32c01a5d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_read_out interface signals. +// It is instantiated once per fuse_ctrl_core_axi_read_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_read_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_read_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_read_out_bus.arready), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_bus.rdata), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_bus.rresp), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_bus.rid), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_bus.rlast), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_out_pkg_hdl::*; + +interface fuse_ctrl_core_axi_read_out_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_macros.svh new file mode 100644 index 000000000..2742dc04b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_read_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_read_out_configuration class. +// + `define fuse_ctrl_core_axi_read_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_read_out_configuration_s; + + `define fuse_ctrl_core_axi_read_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_configuration_s to_struct();\ + fuse_ctrl_core_axi_read_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_read_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_read_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_read_out_configuration_s fuse_ctrl_core_axi_read_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_read_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_read_out_transaction class. +// + `define fuse_ctrl_core_axi_read_out_MONITOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } fuse_ctrl_core_axi_read_out_monitor_s; + + `define fuse_ctrl_core_axi_read_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_read_out_monitor_struct = \ + { \ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( fuse_ctrl_core_axi_read_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_read_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_read_out_monitor_s fuse_ctrl_core_axi_read_out_monitor_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = fuse_ctrl_core_axi_read_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_read_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_out_INITIATOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } fuse_ctrl_core_axi_read_out_initiator_s; + + `define fuse_ctrl_core_axi_read_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_read_out_initiator_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( fuse_ctrl_core_axi_read_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_read_out_initiator_s fuse_ctrl_core_axi_read_out_initiator_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = fuse_ctrl_core_axi_read_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_read_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_out_RESPONDER_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } fuse_ctrl_core_axi_read_out_responder_s; + + `define fuse_ctrl_core_axi_read_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_read_out_responder_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( fuse_ctrl_core_axi_read_out_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_read_out_responder_s fuse_ctrl_core_axi_read_out_responder_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = fuse_ctrl_core_axi_read_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor.svh new file mode 100644 index 000000000..192a1829f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_read_out transactions observed by the +// fuse_ctrl_core_axi_read_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_read_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_read_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_read_out_monitor_s fuse_ctrl_core_axi_read_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_read_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor_bfm.sv new file mode 100644 index 000000000..05a619e3c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_read_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_read_out monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_read_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_read_out_if. +// +// Input signals from the fuse_ctrl_core_axi_read_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_read_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_out_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_out_macros.svh" + + +interface fuse_ctrl_core_axi_read_out_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_read_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_read_out_MONITOR_STRUCT + fuse_ctrl_core_axi_read_out_monitor_s fuse_ctrl_core_axi_read_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_read_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_read_out_pkg::fuse_ctrl_core_axi_read_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_read_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_read_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_read_out_configuration_s fuse_ctrl_core_axi_read_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_read_out_monitor_s fuse_ctrl_core_axi_read_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_read_out_monitor_struct.core_arready + // // fuse_ctrl_core_axi_read_out_monitor_struct.core_rdata + // // fuse_ctrl_core_axi_read_out_monitor_struct.core_rresp + // // fuse_ctrl_core_axi_read_out_monitor_struct.core_rid + // // fuse_ctrl_core_axi_read_out_monitor_struct.core_rlast + // // fuse_ctrl_core_axi_read_out_monitor_struct.core_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_read_out_monitor_struct.xyz = arready_i; // + // fuse_ctrl_core_axi_read_out_monitor_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_read_out_monitor_struct.xyz = rresp_i; // + // fuse_ctrl_core_axi_read_out_monitor_struct.xyz = rid_i; // + // fuse_ctrl_core_axi_read_out_monitor_struct.xyz = rlast_i; // + // fuse_ctrl_core_axi_read_out_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_random_sequence.svh new file mode 100644 index 000000000..75644216c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_read_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_read_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_read_out_random_sequence::body()-fuse_ctrl_core_axi_read_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_read_out_driver_bfm via the sequencer and fuse_ctrl_core_axi_read_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_read_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_responder_sequence.svh new file mode 100644 index 000000000..7201178fa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_read_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_sequence_base.svh new file mode 100644 index 000000000..552bdba7d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_out_transaction_req_t; + fuse_ctrl_core_axi_read_out_transaction_req_t req; + typedef fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_out_transaction_rsp_t; + fuse_ctrl_core_axi_read_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_read_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_read_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction.svh new file mode 100644 index 000000000..4654272c3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_read_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_arready ; + logic [DW-1:0] core_rdata ; + axi_pkg::axi_burst_e core_rresp ; + logic [IW-1:0] core_rid ; + logic core_rlast ; + logic core_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_read_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_read_out_monitor and fuse_ctrl_core_axi_read_out_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_MONITOR_STRUCT + fuse_ctrl_core_axi_read_out_monitor_s fuse_ctrl_core_axi_read_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_out_driver and fuse_ctrl_core_axi_read_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_out_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_out_initiator_s fuse_ctrl_core_axi_read_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_read_out_driver and fuse_ctrl_core_axi_read_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_out_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_out_responder_s fuse_ctrl_core_axi_read_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_responder_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_arready:0x%x core_rdata:0x%x core_rresp:0x%x core_rid:0x%x core_rlast:0x%x core_rvalid:0x%x ",core_arready,core_rdata,core_rresp,core_rid,core_rlast,core_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_arready == RHS.core_arready) + &&(this.core_rdata == RHS.core_rdata) + &&(this.core_rresp == RHS.core_rresp) + &&(this.core_rid == RHS.core_rid) + &&(this.core_rlast == RHS.core_rlast) + &&(this.core_rvalid == RHS.core_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_arready = RHS.core_arready; + this.core_rdata = RHS.core_rdata; + this.core_rresp = RHS.core_rresp; + this.core_rid = RHS.core_rid; + this.core_rlast = RHS.core_rlast; + this.core_rvalid = RHS.core_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_read_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_arready,"core_arready"); + $add_attribute(transaction_view_h,core_rdata,"core_rdata"); + $add_attribute(transaction_view_h,core_rresp,"core_rresp"); + $add_attribute(transaction_view_h,core_rid,"core_rid"); + $add_attribute(transaction_view_h,core_rlast,"core_rlast"); + $add_attribute(transaction_view_h,core_rvalid,"core_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction_coverage.svh new file mode 100644 index 000000000..ad53e4910 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_read_out transaction information using +// a covergroup named fuse_ctrl_core_axi_read_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_read_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_arready: coverpoint coverage_trans.core_arready; + core_rdata: coverpoint coverage_trans.core_rdata; + core_rresp: coverpoint coverage_trans.core_rresp; + core_rid: coverpoint coverage_trans.core_rid; + core_rlast: coverpoint coverage_trans.core_rlast; + core_rvalid: coverpoint coverage_trans.core_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_read_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_read_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_read_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/yaml/fuse_ctrl_core_axi_read_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/yaml/fuse_ctrl_core_axi_read_out_interface.yaml new file mode 100644 index 000000000..9e2244bcb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/yaml/fuse_ctrl_core_axi_read_out_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_read_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.project new file mode 100644 index 000000000..574f71c48 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_write_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.svproject new file mode 100644 index 000000000..ed3bfd5bc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/Makefile new file mode 100644 index 000000000..573f6542d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_write_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_write_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f + +fuse_ctrl_core_axi_write_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f + +fuse_ctrl_core_axi_write_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_write_if_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_write_if_pkg +COMP_fuse_ctrl_core_axi_write_if_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_write_if_pkg +COMP_fuse_ctrl_core_axi_write_if_PKG_TGT = $(COMP_fuse_ctrl_core_axi_write_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_write_if_pkg: $(COMP_fuse_ctrl_core_axi_write_if_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_write_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_write_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_write_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_write_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_write_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_if_pkg += -I$(fuse_ctrl_core_axi_write_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_if_pkg += $(fuse_ctrl_core_axi_write_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_write_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_write_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_write_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_write_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/compile.do new file mode 100644 index 000000000..1628622fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_write_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if.compile new file mode 100644 index 000000000..2ee95290b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_write_if_hvl.compile + - fuse_ctrl_core_axi_write_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_bfm.vinfo new file mode 100644 index 000000000..cfb94c619 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_write_if_if.sv +src/fuse_ctrl_core_axi_write_if_driver_bfm.sv +src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_common.compile new file mode 100644 index 000000000..12a17faa4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f new file mode 100644 index 000000000..c5556080a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f new file mode 100644 index 000000000..68b83cc94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f new file mode 100644 index 000000000..3108e102e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hdl.compile new file mode 100644 index 000000000..7185a09f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_write_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_write_if_if.sv + - src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv + - src/fuse_ctrl_core_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hvl.compile new file mode 100644 index 000000000..5096b1689 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_write_if_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.sv new file mode 100644 index 000000000..4fcea64ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_write_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_write_if_macros.svh" + + export fuse_ctrl_core_axi_write_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_write_if_typedefs.svh" + `include "src/fuse_ctrl_core_axi_write_if_transaction.svh" + + `include "src/fuse_ctrl_core_axi_write_if_configuration.svh" + `include "src/fuse_ctrl_core_axi_write_if_driver.svh" + `include "src/fuse_ctrl_core_axi_write_if_monitor.svh" + + `include "src/fuse_ctrl_core_axi_write_if_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_write_if_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_write_if_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_write_if_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_write_if2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_write_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.vinfo new file mode 100644 index 000000000..6bd4a3132 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.sv new file mode 100644 index 000000000..943fb4e9c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_write_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_write_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo new file mode 100644 index 000000000..179238254 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_sve.F new file mode 100644 index 000000000..0168ba713 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if2reg_adapter.svh new file mode 100644 index 000000000..f7dc857b5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_write_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_write_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_write_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_agent.svh new file mode 100644 index 000000000..d991ed3fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_write_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_configuration.svh new file mode 100644 index 000000000..e0d213f15 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_write_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_write_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_write_if_configuration_s fuse_ctrl_core_axi_write_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_write_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_if_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_write_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_write_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_write_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_write_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver.svh new file mode 100644 index 000000000..33543d00f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_write_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_write_if_driver_bfm. +`fuse_ctrl_core_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_if_initiator_s fuse_ctrl_core_axi_write_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_write_if_driver_bfm. +`fuse_ctrl_core_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_if_responder_s fuse_ctrl_core_axi_write_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_write_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_write_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_write_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_write_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver_bfm.sv new file mode 100644 index 000000000..8b920cc3e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver_bfm.sv @@ -0,0 +1,429 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_write_if signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_write_if driver through a virtual interface +// handle in the fuse_ctrl_core_axi_write_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_write_if_if. +// +// Input signals from the fuse_ctrl_core_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_write_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_if_macros.svh" + +interface fuse_ctrl_core_axi_write_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_write_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] awaddr_i; + reg [AW-1:0] awaddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] awburst_o = 'bz; + tri [2:0] awsize_i; + reg [2:0] awsize_o = 'bz; + tri [7:0] awlen_i; + reg [7:0] awlen_o = 'bz; + tri [UW-1:0] awuser_i; + reg [UW-1:0] awuser_o = 'bz; + tri [UW-1:0] awid_i; + reg [UW-1:0] awid_o = 'bz; + tri awlock_i; + reg awlock_o = 'bz; + tri awvalid_i; + reg awvalid_o = 'bz; + tri [DW-1:0] wdata_i; + reg [DW-1:0] wdata_o = 'bz; + tri [DW/8-1:0] wstrb_i; + reg [DW/8-1:0] wstrb_o = 'bz; + tri wvalid_i; + reg wvalid_o = 'bz; + tri wlast_i; + reg wlast_o = 'bz; + tri bready_i; + reg bready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.awaddr = (initiator_responder == INITIATOR) ? awaddr_o : 'bz; + assign awaddr_i = bus.awaddr; + assign bus.awburst = (initiator_responder == INITIATOR) ? awburst_o : 'bz; + assign awburst_i = bus.awburst; + assign bus.awsize = (initiator_responder == INITIATOR) ? awsize_o : 'bz; + assign awsize_i = bus.awsize; + assign bus.awlen = (initiator_responder == INITIATOR) ? awlen_o : 'bz; + assign awlen_i = bus.awlen; + assign bus.awuser = (initiator_responder == INITIATOR) ? awuser_o : 'bz; + assign awuser_i = bus.awuser; + assign bus.awid = (initiator_responder == INITIATOR) ? awid_o : 'bz; + assign awid_i = bus.awid; + assign bus.awlock = (initiator_responder == INITIATOR) ? awlock_o : 'bz; + assign awlock_i = bus.awlock; + assign bus.awvalid = (initiator_responder == INITIATOR) ? awvalid_o : 'bz; + assign awvalid_i = bus.awvalid; + assign bus.wdata = (initiator_responder == INITIATOR) ? wdata_o : 'bz; + assign wdata_i = bus.wdata; + assign bus.wstrb = (initiator_responder == INITIATOR) ? wstrb_o : 'bz; + assign wstrb_i = bus.wstrb; + assign bus.wvalid = (initiator_responder == INITIATOR) ? wvalid_o : 'bz; + assign wvalid_i = bus.wvalid; + assign bus.wlast = (initiator_responder == INITIATOR) ? wlast_o : 'bz; + assign wlast_i = bus.wlast; + assign bus.bready = (initiator_responder == INITIATOR) ? bready_o : 'bz; + assign bready_i = bus.bready; + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_write_if_pkg::fuse_ctrl_core_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_write_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_write_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_write_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_if_driver_bfm. + `fuse_ctrl_core_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_if_driver_bfm. + `fuse_ctrl_core_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + awaddr_o <= 'bz; + awburst_o <= 'bz; + awsize_o <= 'bz; + awlen_o <= 'bz; + awuser_o <= 'bz; + awid_o <= 'bz; + awlock_o <= 'bz; + awvalid_o <= 'bz; + wdata_o <= 'bz; + wstrb_o <= 'bz; + wvalid_o <= 'bz; + wlast_o <= 'bz; + bready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_write_if_configuration_s fuse_ctrl_core_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_write_if_initiator_s fuse_ctrl_core_axi_write_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_write_if_responder_s fuse_ctrl_core_axi_write_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_write_if_initiator_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Members within the fuse_ctrl_core_axi_write_if_responder_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + initiator_struct = fuse_ctrl_core_axi_write_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // awaddr_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [AW-1:0] + // awburst_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // awsize_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [2:0] + // awlen_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [7:0] + // awuser_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [UW-1:0] + // awid_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [UW-1:0] + // awlock_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // + // awvalid_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // + // wdata_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [DW-1:0] + // wstrb_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [DW/8-1:0] + // wvalid_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // + // wlast_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // + // bready_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_write_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_write_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_write_if_initiator_s fuse_ctrl_core_axi_write_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_write_if_responder_s fuse_ctrl_core_axi_write_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_write_if_initiator_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Variables within the fuse_ctrl_core_axi_write_if_responder_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awlock_i; // + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awvalid_i; // + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = wvalid_i; // + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = wlast_i; // + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = bready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_write_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_write_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_if.sv new file mode 100644 index 000000000..b0047fa1f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_if.sv @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_write_if interface signals. +// It is instantiated once per fuse_ctrl_core_axi_write_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_write_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_write_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awaddr), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awburst), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awsize), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awlen), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awuser), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awlock), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.wdata), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.wstrb), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.wvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.wlast), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.bready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_if_pkg_hdl::*; + +interface fuse_ctrl_core_axi_write_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] awaddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst, + inout tri [2:0] awsize, + inout tri [7:0] awlen, + inout tri [UW-1:0] awuser, + inout tri [UW-1:0] awid, + inout tri awlock, + inout tri awvalid, + inout tri [DW-1:0] wdata, + inout tri [DW/8-1:0] wstrb, + inout tri wvalid, + inout tri wlast, + inout tri bready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output awaddr, + output awburst, + output awsize, + output awlen, + output awuser, + output awid, + output awlock, + output awvalid, + output wdata, + output wstrb, + output wvalid, + output wlast, + output bready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_macros.svh new file mode 100644 index 000000000..b8fd5a307 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_macros.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_write_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_write_if_configuration class. +// + `define fuse_ctrl_core_axi_write_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_write_if_configuration_s; + + `define fuse_ctrl_core_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_if_configuration_s to_struct();\ + fuse_ctrl_core_axi_write_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_write_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_write_if_configuration_s fuse_ctrl_core_axi_write_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_write_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_write_if_transaction class. +// + `define fuse_ctrl_core_axi_write_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_if_monitor_s; + + `define fuse_ctrl_core_axi_write_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_if_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_write_if_monitor_struct = \ + { \ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_write_if_monitor_s fuse_ctrl_core_axi_write_if_monitor_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_if_initiator_s; + + `define fuse_ctrl_core_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_if_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_write_if_initiator_struct = \ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_write_if_initiator_s fuse_ctrl_core_axi_write_if_initiator_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_if_responder_s; + + `define fuse_ctrl_core_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_if_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_write_if_responder_struct = \ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_if_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_write_if_responder_s fuse_ctrl_core_axi_write_if_responder_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor.svh new file mode 100644 index 000000000..a0022cc66 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_write_if transactions observed by the +// fuse_ctrl_core_axi_write_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_write_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_write_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_write_if_monitor_s fuse_ctrl_core_axi_write_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_write_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv new file mode 100644 index 000000000..de0093e53 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv @@ -0,0 +1,248 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_write_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_write_if monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_write_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_write_if_if. +// +// Input signals from the fuse_ctrl_core_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_write_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_if_macros.svh" + + +interface fuse_ctrl_core_axi_write_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_write_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_write_if_MONITOR_STRUCT + fuse_ctrl_core_axi_write_if_monitor_s fuse_ctrl_core_axi_write_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_write_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] awaddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + tri [2:0] awsize_i; + tri [7:0] awlen_i; + tri [UW-1:0] awuser_i; + tri [UW-1:0] awid_i; + tri awlock_i; + tri awvalid_i; + tri [DW-1:0] wdata_i; + tri [DW/8-1:0] wstrb_i; + tri wvalid_i; + tri wlast_i; + tri bready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awaddr_i = bus.awaddr; + assign awburst_i = bus.awburst; + assign awsize_i = bus.awsize; + assign awlen_i = bus.awlen; + assign awuser_i = bus.awuser; + assign awid_i = bus.awid; + assign awlock_i = bus.awlock; + assign awvalid_i = bus.awvalid; + assign wdata_i = bus.wdata; + assign wstrb_i = bus.wstrb; + assign wvalid_i = bus.wvalid; + assign wlast_i = bus.wlast; + assign bready_i = bus.bready; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_write_if_pkg::fuse_ctrl_core_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_write_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_write_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_write_if_configuration_s fuse_ctrl_core_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_write_if_monitor_s fuse_ctrl_core_axi_write_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awaddr + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awvalid + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awburst + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awsize + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awlen + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awuser + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awid + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awlock + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_wdata + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_wstrb + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_wvalid + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_wlast + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_bready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awlock_i; // + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awvalid_i; // + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = wvalid_i; // + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = wlast_i; // + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = bready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_random_sequence.svh new file mode 100644 index 000000000..77120c18e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_write_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_write_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_write_if_random_sequence::body()-fuse_ctrl_core_axi_write_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_write_if_driver_bfm via the sequencer and fuse_ctrl_core_axi_write_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_write_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_responder_sequence.svh new file mode 100644 index 000000000..ed1c8c6bd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_write_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_sequence_base.svh new file mode 100644 index 000000000..122b3d543 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_if_transaction_req_t; + fuse_ctrl_core_axi_write_if_transaction_req_t req; + typedef fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_if_transaction_rsp_t; + fuse_ctrl_core_axi_write_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_write_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_write_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction.svh new file mode 100644 index 000000000..3298d1196 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction.svh @@ -0,0 +1,256 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_write_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] core_awaddr ; + logic core_awvalid ; + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + logic [2:0] core_awsize ; + logic [7:0] core_awlen ; + logic [UW-1:0] core_awuser ; + logic [IW-1:0] core_awid ; + logic core_awlock ; + logic [DW-1:0] core_wdata ; + logic [DW/8 - 1:0] core_wstrb ; + logic core_wvalid ; + logic core_wlast ; + logic core_bready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_write_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_write_if_monitor and fuse_ctrl_core_axi_write_if_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_MONITOR_STRUCT + fuse_ctrl_core_axi_write_if_monitor_s fuse_ctrl_core_axi_write_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_if_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_if_initiator_s fuse_ctrl_core_axi_write_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_if_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_if_responder_s fuse_ctrl_core_axi_write_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_if_responder_struct. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awaddr:0x%x core_awvalid:0x%x core_awburst:0x%x core_awsize:0x%x core_awlen:0x%x core_awuser:0x%x core_awid:0x%x core_awlock:0x%x core_wdata:0x%x core_wstrb:0x%x core_wvalid:0x%x core_wlast:0x%x core_bready:0x%x ",core_awaddr,core_awvalid,core_awburst,core_awsize,core_awlen,core_awuser,core_awid,core_awlock,core_wdata,core_wstrb,core_wvalid,core_wlast,core_bready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_wdata == RHS.core_wdata) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awaddr = RHS.core_awaddr; + this.core_awvalid = RHS.core_awvalid; + this.core_awburst = RHS.core_awburst; + this.core_awsize = RHS.core_awsize; + this.core_awlen = RHS.core_awlen; + this.core_awuser = RHS.core_awuser; + this.core_awid = RHS.core_awid; + this.core_awlock = RHS.core_awlock; + this.core_wdata = RHS.core_wdata; + this.core_wstrb = RHS.core_wstrb; + this.core_wvalid = RHS.core_wvalid; + this.core_wlast = RHS.core_wlast; + this.core_bready = RHS.core_bready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_write_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awaddr,"core_awaddr"); + $add_attribute(transaction_view_h,core_awvalid,"core_awvalid"); + $add_attribute(transaction_view_h,core_awburst,"core_awburst"); + $add_attribute(transaction_view_h,core_awsize,"core_awsize"); + $add_attribute(transaction_view_h,core_awlen,"core_awlen"); + $add_attribute(transaction_view_h,core_awuser,"core_awuser"); + $add_attribute(transaction_view_h,core_awid,"core_awid"); + $add_attribute(transaction_view_h,core_awlock,"core_awlock"); + $add_attribute(transaction_view_h,core_wdata,"core_wdata"); + $add_attribute(transaction_view_h,core_wstrb,"core_wstrb"); + $add_attribute(transaction_view_h,core_wvalid,"core_wvalid"); + $add_attribute(transaction_view_h,core_wlast,"core_wlast"); + $add_attribute(transaction_view_h,core_bready,"core_bready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction_coverage.svh new file mode 100644 index 000000000..3f905316d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction_coverage.svh @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_write_if transaction information using +// a covergroup named fuse_ctrl_core_axi_write_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_write_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awaddr: coverpoint coverage_trans.core_awaddr; + core_awvalid: coverpoint coverage_trans.core_awvalid; + core_awburst: coverpoint coverage_trans.core_awburst; + core_awsize: coverpoint coverage_trans.core_awsize; + core_awlen: coverpoint coverage_trans.core_awlen; + core_awuser: coverpoint coverage_trans.core_awuser; + core_awid: coverpoint coverage_trans.core_awid; + core_awlock: coverpoint coverage_trans.core_awlock; + core_wdata: coverpoint coverage_trans.core_wdata; + core_wstrb: coverpoint coverage_trans.core_wstrb; + core_wvalid: coverpoint coverage_trans.core_wvalid; + core_wlast: coverpoint coverage_trans.core_wlast; + core_bready: coverpoint coverage_trans.core_bready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_write_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_write_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_write_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/yaml/fuse_ctrl_core_axi_write_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/yaml/fuse_ctrl_core_axi_write_if_interface.yaml new file mode 100644 index 000000000..242a9b639 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/yaml/fuse_ctrl_core_axi_write_if_interface.yaml @@ -0,0 +1,161 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_write_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: awaddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: awburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: awsize + reset_value: '''bz' + width: '3' + - dir: output + name: awlen + reset_value: '''bz' + width: '8' + - dir: output + name: awuser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awid + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awlock + reset_value: '''bz' + width: '1' + - dir: output + name: awvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wdata + reset_value: '''bz' + width: '[''DW'']' + - dir: output + name: wstrb + reset_value: '''bz' + width: '[''DW/8'']' + - dir: output + name: wvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wlast + reset_value: '''bz' + width: '1' + - dir: output + name: bready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: core_awaddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awuser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wstrb + type: logic [DW/8 - 1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_bready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.project new file mode 100644 index 000000000..f33bf59ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_write_in_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.svproject new file mode 100644 index 000000000..3d3a99047 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/Makefile new file mode 100644 index 000000000..f507d2ab2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_write_in_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_write_in_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hvl.f + +fuse_ctrl_core_axi_write_in_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hdl.f + +fuse_ctrl_core_axi_write_in_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_write_in_if_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_write_in_if_pkg +COMP_fuse_ctrl_core_axi_write_in_if_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_write_in_if_pkg +COMP_fuse_ctrl_core_axi_write_in_if_PKG_TGT = $(COMP_fuse_ctrl_core_axi_write_in_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_write_in_if_pkg: $(COMP_fuse_ctrl_core_axi_write_in_if_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_write_in_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_write_in_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_write_in_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_in_if_pkg += -I$(fuse_ctrl_core_axi_write_in_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_in_if_pkg += $(fuse_ctrl_core_axi_write_in_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_write_in_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_write_in_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_write_in_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_write_in_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/compile.do new file mode 100644 index 000000000..b42d44e51 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_write_in_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if.compile new file mode 100644 index 000000000..a65a64cbf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_write_in_if_hvl.compile + - fuse_ctrl_core_axi_write_in_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_bfm.vinfo new file mode 100644 index 000000000..cd1ff68b7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_write_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_write_in_if_if.sv +src/fuse_ctrl_core_axi_write_in_if_driver_bfm.sv +src/fuse_ctrl_core_axi_write_in_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_common.compile new file mode 100644 index 000000000..be72a0784 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hdl.f new file mode 100644 index 000000000..495338020 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hvl.f new file mode 100644 index 000000000..6bf770355 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_xrtl.f new file mode 100644 index 000000000..fef44745f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hdl.compile new file mode 100644 index 000000000..8a805dd85 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_write_in_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_write_in_if_if.sv + - src/fuse_ctrl_core_axi_write_in_if_monitor_bfm.sv + - src/fuse_ctrl_core_axi_write_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hvl.compile new file mode 100644 index 000000000..55e60dcf3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_write_in_if_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_write_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.sv new file mode 100644 index 000000000..6a3db4ff3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_in_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_write_in_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_write_in_if_macros.svh" + + export fuse_ctrl_core_axi_write_in_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_write_in_if_typedefs.svh" + `include "src/fuse_ctrl_core_axi_write_in_if_transaction.svh" + + `include "src/fuse_ctrl_core_axi_write_in_if_configuration.svh" + `include "src/fuse_ctrl_core_axi_write_in_if_driver.svh" + `include "src/fuse_ctrl_core_axi_write_in_if_monitor.svh" + + `include "src/fuse_ctrl_core_axi_write_in_if_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_write_in_if_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_write_in_if_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_write_in_if_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_write_in_if2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_write_in_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.vinfo new file mode 100644 index 000000000..d62098632 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_write_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_write_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv new file mode 100644 index 000000000..0f242e32a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_in_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_write_in_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_write_in_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.vinfo new file mode 100644 index 000000000..b94d858eb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_sve.F new file mode 100644 index 000000000..0586654a2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if2reg_adapter.svh new file mode 100644 index 000000000..f64280b7a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_write_in_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_write_in_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_write_in_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_agent.svh new file mode 100644 index 000000000..42ed311c4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_write_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_write_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_write_in_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_configuration.svh new file mode 100644 index 000000000..d1e8058cb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_write_in_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_write_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_write_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_write_in_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_write_in_if_configuration_s fuse_ctrl_core_axi_write_in_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_write_in_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_if_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_write_in_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_write_in_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_write_in_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_write_in_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_in_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_write_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver.svh new file mode 100644 index 000000000..1dddeaea6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_write_in_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_write_in_if_driver and fuse_ctrl_core_axi_write_in_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_write_in_if_driver_bfm. +`fuse_ctrl_core_axi_write_in_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_in_if_initiator_s fuse_ctrl_core_axi_write_in_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_write_in_if_driver and fuse_ctrl_core_axi_write_in_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_write_in_if_driver_bfm. +`fuse_ctrl_core_axi_write_in_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_in_if_responder_s fuse_ctrl_core_axi_write_in_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_write_in_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_write_in_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_write_in_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_write_in_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver_bfm.sv new file mode 100644 index 000000000..d54fd8571 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver_bfm.sv @@ -0,0 +1,429 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_write_in_if signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_write_in_if driver through a virtual interface +// handle in the fuse_ctrl_core_axi_write_in_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_write_in_if_if. +// +// Input signals from the fuse_ctrl_core_axi_write_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_write_in_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_in_if_macros.svh" + +interface fuse_ctrl_core_axi_write_in_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_write_in_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_in_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] awaddr_i; + reg [AW-1:0] awaddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] awburst_o = 'bz; + tri [2:0] awsize_i; + reg [2:0] awsize_o = 'bz; + tri [7:0] awlen_i; + reg [7:0] awlen_o = 'bz; + tri [UW-1:0] awuser_i; + reg [UW-1:0] awuser_o = 'bz; + tri [UW-1:0] awid_i; + reg [UW-1:0] awid_o = 'bz; + tri awlock_i; + reg awlock_o = 'bz; + tri awvalid_i; + reg awvalid_o = 'bz; + tri [DW-1:0] wdata_i; + reg [DW-1:0] wdata_o = 'bz; + tri [DW/8-1:0] wstrb_i; + reg [DW/8-1:0] wstrb_o = 'bz; + tri wvalid_i; + reg wvalid_o = 'bz; + tri wlast_i; + reg wlast_o = 'bz; + tri bready_i; + reg bready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.awaddr = (initiator_responder == INITIATOR) ? awaddr_o : 'bz; + assign awaddr_i = bus.awaddr; + assign bus.awburst = (initiator_responder == INITIATOR) ? awburst_o : 'bz; + assign awburst_i = bus.awburst; + assign bus.awsize = (initiator_responder == INITIATOR) ? awsize_o : 'bz; + assign awsize_i = bus.awsize; + assign bus.awlen = (initiator_responder == INITIATOR) ? awlen_o : 'bz; + assign awlen_i = bus.awlen; + assign bus.awuser = (initiator_responder == INITIATOR) ? awuser_o : 'bz; + assign awuser_i = bus.awuser; + assign bus.awid = (initiator_responder == INITIATOR) ? awid_o : 'bz; + assign awid_i = bus.awid; + assign bus.awlock = (initiator_responder == INITIATOR) ? awlock_o : 'bz; + assign awlock_i = bus.awlock; + assign bus.awvalid = (initiator_responder == INITIATOR) ? awvalid_o : 'bz; + assign awvalid_i = bus.awvalid; + assign bus.wdata = (initiator_responder == INITIATOR) ? wdata_o : 'bz; + assign wdata_i = bus.wdata; + assign bus.wstrb = (initiator_responder == INITIATOR) ? wstrb_o : 'bz; + assign wstrb_i = bus.wstrb; + assign bus.wvalid = (initiator_responder == INITIATOR) ? wvalid_o : 'bz; + assign wvalid_i = bus.wvalid; + assign bus.wlast = (initiator_responder == INITIATOR) ? wlast_o : 'bz; + assign wlast_i = bus.wlast; + assign bus.bready = (initiator_responder == INITIATOR) ? bready_o : 'bz; + assign bready_i = bus.bready; + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_write_in_if_pkg::fuse_ctrl_core_axi_write_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_write_in_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_write_in_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_write_in_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_in_if_driver and fuse_ctrl_core_axi_write_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_in_if_driver_bfm. + `fuse_ctrl_core_axi_write_in_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_in_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_write_in_if_driver and fuse_ctrl_core_axi_write_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_in_if_driver_bfm. + `fuse_ctrl_core_axi_write_in_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_in_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + awaddr_o <= 'bz; + awburst_o <= 'bz; + awsize_o <= 'bz; + awlen_o <= 'bz; + awuser_o <= 'bz; + awid_o <= 'bz; + awlock_o <= 'bz; + awvalid_o <= 'bz; + wdata_o <= 'bz; + wstrb_o <= 'bz; + wvalid_o <= 'bz; + wlast_o <= 'bz; + bready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_write_in_if_configuration_s fuse_ctrl_core_axi_write_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_write_in_if_initiator_s fuse_ctrl_core_axi_write_in_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_write_in_if_responder_s fuse_ctrl_core_axi_write_in_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_write_in_if_initiator_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Members within the fuse_ctrl_core_axi_write_in_if_responder_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + initiator_struct = fuse_ctrl_core_axi_write_in_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // awaddr_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [AW-1:0] + // awburst_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // awsize_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [2:0] + // awlen_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [7:0] + // awuser_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [UW-1:0] + // awid_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [UW-1:0] + // awlock_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // + // awvalid_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // + // wdata_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [DW-1:0] + // wstrb_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [DW/8-1:0] + // wvalid_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // + // wlast_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // + // bready_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_write_in_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_write_in_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_write_in_if_initiator_s fuse_ctrl_core_axi_write_in_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_write_in_if_responder_s fuse_ctrl_core_axi_write_in_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_write_in_if_initiator_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Variables within the fuse_ctrl_core_axi_write_in_if_responder_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awlock_i; // + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awvalid_i; // + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = wvalid_i; // + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = wlast_i; // + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = bready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_write_in_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_write_in_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_if.sv new file mode 100644 index 000000000..f8447e714 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_if.sv @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_write_in_if interface signals. +// It is instantiated once per fuse_ctrl_core_axi_write_in_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_write_in_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_write_in_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awaddr), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awburst), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awsize), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awlen), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awuser), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awlock), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.wdata), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.wstrb), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.wvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.wlast), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.bready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_in_if_pkg_hdl::*; + +interface fuse_ctrl_core_axi_write_in_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] awaddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst, + inout tri [2:0] awsize, + inout tri [7:0] awlen, + inout tri [UW-1:0] awuser, + inout tri [UW-1:0] awid, + inout tri awlock, + inout tri awvalid, + inout tri [DW-1:0] wdata, + inout tri [DW/8-1:0] wstrb, + inout tri wvalid, + inout tri wlast, + inout tri bready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output awaddr, + output awburst, + output awsize, + output awlen, + output awuser, + output awid, + output awlock, + output awvalid, + output wdata, + output wstrb, + output wvalid, + output wlast, + output bready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_macros.svh new file mode 100644 index 000000000..8f3e6b640 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_macros.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_write_in_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_write_in_if_configuration class. +// + `define fuse_ctrl_core_axi_write_in_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_write_in_if_configuration_s; + + `define fuse_ctrl_core_axi_write_in_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_if_configuration_s to_struct();\ + fuse_ctrl_core_axi_write_in_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_write_in_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_write_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_write_in_if_configuration_s fuse_ctrl_core_axi_write_in_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_write_in_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_write_in_if_transaction class. +// + `define fuse_ctrl_core_axi_write_in_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_in_if_monitor_s; + + `define fuse_ctrl_core_axi_write_in_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_if_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_write_in_if_monitor_struct = \ + { \ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_in_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_write_in_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_write_in_if_monitor_s fuse_ctrl_core_axi_write_in_if_monitor_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_in_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_write_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_in_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_in_if_initiator_s; + + `define fuse_ctrl_core_axi_write_in_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_if_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_write_in_if_initiator_struct = \ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_in_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_in_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_write_in_if_initiator_s fuse_ctrl_core_axi_write_in_if_initiator_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_in_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_write_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_in_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_in_if_responder_s; + + `define fuse_ctrl_core_axi_write_in_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_if_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_write_in_if_responder_struct = \ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_in_if_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_in_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_write_in_if_responder_s fuse_ctrl_core_axi_write_in_if_responder_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_in_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor.svh new file mode 100644 index 000000000..7689925cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_write_in_if transactions observed by the +// fuse_ctrl_core_axi_write_in_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_write_in_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_write_in_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_write_in_if_monitor_s fuse_ctrl_core_axi_write_in_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_write_in_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor_bfm.sv new file mode 100644 index 000000000..0b3ac9795 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor_bfm.sv @@ -0,0 +1,248 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_write_in_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_write_in_if monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_write_in_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_write_in_if_if. +// +// Input signals from the fuse_ctrl_core_axi_write_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_write_in_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_in_if_macros.svh" + + +interface fuse_ctrl_core_axi_write_in_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_write_in_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_in_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_write_in_if_MONITOR_STRUCT + fuse_ctrl_core_axi_write_in_if_monitor_s fuse_ctrl_core_axi_write_in_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_write_in_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] awaddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + tri [2:0] awsize_i; + tri [7:0] awlen_i; + tri [UW-1:0] awuser_i; + tri [UW-1:0] awid_i; + tri awlock_i; + tri awvalid_i; + tri [DW-1:0] wdata_i; + tri [DW/8-1:0] wstrb_i; + tri wvalid_i; + tri wlast_i; + tri bready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awaddr_i = bus.awaddr; + assign awburst_i = bus.awburst; + assign awsize_i = bus.awsize; + assign awlen_i = bus.awlen; + assign awuser_i = bus.awuser; + assign awid_i = bus.awid; + assign awlock_i = bus.awlock; + assign awvalid_i = bus.awvalid; + assign wdata_i = bus.wdata; + assign wstrb_i = bus.wstrb; + assign wvalid_i = bus.wvalid; + assign wlast_i = bus.wlast; + assign bready_i = bus.bready; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_write_in_if_pkg::fuse_ctrl_core_axi_write_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_write_in_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_write_in_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_write_in_if_configuration_s fuse_ctrl_core_axi_write_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_write_in_if_monitor_s fuse_ctrl_core_axi_write_in_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awaddr + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awvalid + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awburst + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awsize + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awlen + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awuser + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awid + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awlock + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_wdata + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_wstrb + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_wvalid + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_wlast + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_bready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awlock_i; // + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awvalid_i; // + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = wvalid_i; // + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = wlast_i; // + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = bready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_random_sequence.svh new file mode 100644 index 000000000..1be509e5a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_write_in_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_write_in_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_write_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_write_in_if_random_sequence::body()-fuse_ctrl_core_axi_write_in_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_write_in_if_driver_bfm via the sequencer and fuse_ctrl_core_axi_write_in_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_write_in_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_responder_sequence.svh new file mode 100644 index 000000000..4a94ad4e8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_write_in_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_write_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_sequence_base.svh new file mode 100644 index 000000000..ecbf6b8a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_in_if_transaction_req_t; + fuse_ctrl_core_axi_write_in_if_transaction_req_t req; + typedef fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_in_if_transaction_rsp_t; + fuse_ctrl_core_axi_write_in_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_write_in_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_write_in_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction.svh new file mode 100644 index 000000000..efec989b8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction.svh @@ -0,0 +1,256 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_write_in_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] core_awaddr ; + logic core_awvalid ; + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + logic [2:0] core_awsize ; + logic [7:0] core_awlen ; + logic [UW-1:0] core_awuser ; + logic [IW-1:0] core_awid ; + logic core_awlock ; + logic [DW-1:0] core_wdata ; + logic [DW/8 - 1:0] core_wstrb ; + logic core_wvalid ; + logic core_wlast ; + logic core_bready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_write_in_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_write_in_if_monitor and fuse_ctrl_core_axi_write_in_if_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_MONITOR_STRUCT + fuse_ctrl_core_axi_write_in_if_monitor_s fuse_ctrl_core_axi_write_in_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_in_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_if_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_in_if_driver and fuse_ctrl_core_axi_write_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_in_if_initiator_s fuse_ctrl_core_axi_write_in_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_in_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_if_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_write_in_if_driver and fuse_ctrl_core_axi_write_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_in_if_responder_s fuse_ctrl_core_axi_write_in_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_in_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_if_responder_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awaddr:0x%x core_awvalid:0x%x core_awburst:0x%x core_awsize:0x%x core_awlen:0x%x core_awuser:0x%x core_awid:0x%x core_awlock:0x%x core_wdata:0x%x core_wstrb:0x%x core_wvalid:0x%x core_wlast:0x%x core_bready:0x%x ",core_awaddr,core_awvalid,core_awburst,core_awsize,core_awlen,core_awuser,core_awid,core_awlock,core_wdata,core_wstrb,core_wvalid,core_wlast,core_bready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_wdata == RHS.core_wdata) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awaddr = RHS.core_awaddr; + this.core_awvalid = RHS.core_awvalid; + this.core_awburst = RHS.core_awburst; + this.core_awsize = RHS.core_awsize; + this.core_awlen = RHS.core_awlen; + this.core_awuser = RHS.core_awuser; + this.core_awid = RHS.core_awid; + this.core_awlock = RHS.core_awlock; + this.core_wdata = RHS.core_wdata; + this.core_wstrb = RHS.core_wstrb; + this.core_wvalid = RHS.core_wvalid; + this.core_wlast = RHS.core_wlast; + this.core_bready = RHS.core_bready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_write_in_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awaddr,"core_awaddr"); + $add_attribute(transaction_view_h,core_awvalid,"core_awvalid"); + $add_attribute(transaction_view_h,core_awburst,"core_awburst"); + $add_attribute(transaction_view_h,core_awsize,"core_awsize"); + $add_attribute(transaction_view_h,core_awlen,"core_awlen"); + $add_attribute(transaction_view_h,core_awuser,"core_awuser"); + $add_attribute(transaction_view_h,core_awid,"core_awid"); + $add_attribute(transaction_view_h,core_awlock,"core_awlock"); + $add_attribute(transaction_view_h,core_wdata,"core_wdata"); + $add_attribute(transaction_view_h,core_wstrb,"core_wstrb"); + $add_attribute(transaction_view_h,core_wvalid,"core_wvalid"); + $add_attribute(transaction_view_h,core_wlast,"core_wlast"); + $add_attribute(transaction_view_h,core_bready,"core_bready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction_coverage.svh new file mode 100644 index 000000000..fa56703da --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction_coverage.svh @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_write_in_if transaction information using +// a covergroup named fuse_ctrl_core_axi_write_in_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_write_in_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awaddr: coverpoint coverage_trans.core_awaddr; + core_awvalid: coverpoint coverage_trans.core_awvalid; + core_awburst: coverpoint coverage_trans.core_awburst; + core_awsize: coverpoint coverage_trans.core_awsize; + core_awlen: coverpoint coverage_trans.core_awlen; + core_awuser: coverpoint coverage_trans.core_awuser; + core_awid: coverpoint coverage_trans.core_awid; + core_awlock: coverpoint coverage_trans.core_awlock; + core_wdata: coverpoint coverage_trans.core_wdata; + core_wstrb: coverpoint coverage_trans.core_wstrb; + core_wvalid: coverpoint coverage_trans.core_wvalid; + core_wlast: coverpoint coverage_trans.core_wlast; + core_bready: coverpoint coverage_trans.core_bready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_write_in_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_write_in_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_in_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_write_in_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/yaml/fuse_ctrl_core_axi_write_in_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/yaml/fuse_ctrl_core_axi_write_in_if_interface.yaml new file mode 100644 index 000000000..a1fdac635 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/yaml/fuse_ctrl_core_axi_write_in_if_interface.yaml @@ -0,0 +1,161 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_write_in_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: awaddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: awburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: awsize + reset_value: '''bz' + width: '3' + - dir: output + name: awlen + reset_value: '''bz' + width: '8' + - dir: output + name: awuser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awid + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awlock + reset_value: '''bz' + width: '1' + - dir: output + name: awvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wdata + reset_value: '''bz' + width: '[''DW'']' + - dir: output + name: wstrb + reset_value: '''bz' + width: '[''DW/8'']' + - dir: output + name: wvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wlast + reset_value: '''bz' + width: '1' + - dir: output + name: bready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: core_awaddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awuser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wstrb + type: logic [DW/8 - 1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_bready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.project new file mode 100644 index 000000000..b26e81c0e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_write_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.svproject new file mode 100644 index 000000000..be11cb63e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/Makefile new file mode 100644 index 000000000..b9ea6af97 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_write_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_write_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hvl.f + +fuse_ctrl_core_axi_write_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hdl.f + +fuse_ctrl_core_axi_write_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_write_in_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_write_in_pkg +COMP_fuse_ctrl_core_axi_write_in_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_write_in_pkg +COMP_fuse_ctrl_core_axi_write_in_PKG_TGT = $(COMP_fuse_ctrl_core_axi_write_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_write_in_pkg: $(COMP_fuse_ctrl_core_axi_write_in_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_write_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_write_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_write_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_write_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_write_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_in_pkg += -I$(fuse_ctrl_core_axi_write_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_in_pkg += $(fuse_ctrl_core_axi_write_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_write_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_write_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_write_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_write_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/compile.do new file mode 100644 index 000000000..a2f727a47 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_write_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in.compile new file mode 100644 index 000000000..328de1745 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_write_in_hvl.compile + - fuse_ctrl_core_axi_write_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_bfm.vinfo new file mode 100644 index 000000000..8580294a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_write_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_write_in_if.sv +src/fuse_ctrl_core_axi_write_in_driver_bfm.sv +src/fuse_ctrl_core_axi_write_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_common.compile new file mode 100644 index 000000000..ebcb42c3c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_write_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hdl.f new file mode 100644 index 000000000..dcea9f3fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hvl.f new file mode 100644 index 000000000..0aa6cf48f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_xrtl.f new file mode 100644 index 000000000..9729a9fda --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hdl.compile new file mode 100644 index 000000000..b28a2bd69 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_write_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_write_in_if.sv + - src/fuse_ctrl_core_axi_write_in_monitor_bfm.sv + - src/fuse_ctrl_core_axi_write_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hvl.compile new file mode 100644 index 000000000..7801ce4bb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_write_in_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_write_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.sv new file mode 100644 index 000000000..af903832a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_write_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_write_in_macros.svh" + + export fuse_ctrl_core_axi_write_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_write_in_typedefs.svh" + `include "src/fuse_ctrl_core_axi_write_in_transaction.svh" + + `include "src/fuse_ctrl_core_axi_write_in_configuration.svh" + `include "src/fuse_ctrl_core_axi_write_in_driver.svh" + `include "src/fuse_ctrl_core_axi_write_in_monitor.svh" + + `include "src/fuse_ctrl_core_axi_write_in_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_write_in_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_write_in_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_write_in_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_write_in2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_write_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.vinfo new file mode 100644 index 000000000..07d2c9ac8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_write_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_write_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.sv new file mode 100644 index 000000000..48ee66303 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_write_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_write_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.vinfo new file mode 100644 index 000000000..5c56ef576 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_write_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_sve.F new file mode 100644 index 000000000..24bdc9fde --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in2reg_adapter.svh new file mode 100644 index 000000000..0265f70a4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_write_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_write_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_write_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_agent.svh new file mode 100644 index 000000000..2bd552ac5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_write_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_write_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_write_in_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_configuration.svh new file mode 100644 index 000000000..374ebfbd7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_write_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_write_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_write_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_write_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_write_in_configuration_s fuse_ctrl_core_axi_write_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_write_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_write_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_write_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_write_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_write_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_write_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver.svh new file mode 100644 index 000000000..2454403fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_write_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_write_in_driver and fuse_ctrl_core_axi_write_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_write_in_driver_bfm. +`fuse_ctrl_core_axi_write_in_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_in_initiator_s fuse_ctrl_core_axi_write_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_write_in_driver and fuse_ctrl_core_axi_write_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_write_in_driver_bfm. +`fuse_ctrl_core_axi_write_in_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_in_responder_s fuse_ctrl_core_axi_write_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_write_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_write_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_write_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_write_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver_bfm.sv new file mode 100644 index 000000000..934c0f86b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver_bfm.sv @@ -0,0 +1,429 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_write_in signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_write_in driver through a virtual interface +// handle in the fuse_ctrl_core_axi_write_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_write_in_if. +// +// Input signals from the fuse_ctrl_core_axi_write_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_write_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_in_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_in_macros.svh" + +interface fuse_ctrl_core_axi_write_in_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_write_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] awaddr_i; + reg [AW-1:0] awaddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] awburst_o = 'bz; + tri [2:0] awsize_i; + reg [2:0] awsize_o = 'bz; + tri [7:0] awlen_i; + reg [7:0] awlen_o = 'bz; + tri [UW-1:0] awuser_i; + reg [UW-1:0] awuser_o = 'bz; + tri [UW-1:0] awid_i; + reg [UW-1:0] awid_o = 'bz; + tri awlock_i; + reg awlock_o = 'bz; + tri awvalid_i; + reg awvalid_o = 'bz; + tri [DW-1:0] wdata_i; + reg [DW-1:0] wdata_o = 'bz; + tri [DW/8-1:0] wstrb_i; + reg [DW/8-1:0] wstrb_o = 'bz; + tri wvalid_i; + reg wvalid_o = 'bz; + tri wlast_i; + reg wlast_o = 'bz; + tri bready_i; + reg bready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.awaddr = (initiator_responder == INITIATOR) ? awaddr_o : 'bz; + assign awaddr_i = bus.awaddr; + assign bus.awburst = (initiator_responder == INITIATOR) ? awburst_o : 'bz; + assign awburst_i = bus.awburst; + assign bus.awsize = (initiator_responder == INITIATOR) ? awsize_o : 'bz; + assign awsize_i = bus.awsize; + assign bus.awlen = (initiator_responder == INITIATOR) ? awlen_o : 'bz; + assign awlen_i = bus.awlen; + assign bus.awuser = (initiator_responder == INITIATOR) ? awuser_o : 'bz; + assign awuser_i = bus.awuser; + assign bus.awid = (initiator_responder == INITIATOR) ? awid_o : 'bz; + assign awid_i = bus.awid; + assign bus.awlock = (initiator_responder == INITIATOR) ? awlock_o : 'bz; + assign awlock_i = bus.awlock; + assign bus.awvalid = (initiator_responder == INITIATOR) ? awvalid_o : 'bz; + assign awvalid_i = bus.awvalid; + assign bus.wdata = (initiator_responder == INITIATOR) ? wdata_o : 'bz; + assign wdata_i = bus.wdata; + assign bus.wstrb = (initiator_responder == INITIATOR) ? wstrb_o : 'bz; + assign wstrb_i = bus.wstrb; + assign bus.wvalid = (initiator_responder == INITIATOR) ? wvalid_o : 'bz; + assign wvalid_i = bus.wvalid; + assign bus.wlast = (initiator_responder == INITIATOR) ? wlast_o : 'bz; + assign wlast_i = bus.wlast; + assign bus.bready = (initiator_responder == INITIATOR) ? bready_o : 'bz; + assign bready_i = bus.bready; + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_write_in_pkg::fuse_ctrl_core_axi_write_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_write_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_write_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_write_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_in_driver and fuse_ctrl_core_axi_write_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_in_driver_bfm. + `fuse_ctrl_core_axi_write_in_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_write_in_driver and fuse_ctrl_core_axi_write_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_in_driver_bfm. + `fuse_ctrl_core_axi_write_in_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + awaddr_o <= 'bz; + awburst_o <= 'bz; + awsize_o <= 'bz; + awlen_o <= 'bz; + awuser_o <= 'bz; + awid_o <= 'bz; + awlock_o <= 'bz; + awvalid_o <= 'bz; + wdata_o <= 'bz; + wstrb_o <= 'bz; + wvalid_o <= 'bz; + wlast_o <= 'bz; + bready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_write_in_configuration_s fuse_ctrl_core_axi_write_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_write_in_initiator_s fuse_ctrl_core_axi_write_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_write_in_responder_s fuse_ctrl_core_axi_write_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_write_in_initiator_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Members within the fuse_ctrl_core_axi_write_in_responder_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + initiator_struct = fuse_ctrl_core_axi_write_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // awaddr_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [AW-1:0] + // awburst_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // awsize_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [2:0] + // awlen_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [7:0] + // awuser_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [UW-1:0] + // awid_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [UW-1:0] + // awlock_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // + // awvalid_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // + // wdata_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [DW-1:0] + // wstrb_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [DW/8-1:0] + // wvalid_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // + // wlast_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // + // bready_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_write_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_write_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_write_in_initiator_s fuse_ctrl_core_axi_write_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_write_in_responder_s fuse_ctrl_core_axi_write_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_write_in_initiator_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Variables within the fuse_ctrl_core_axi_write_in_responder_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awlock_i; // + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awvalid_i; // + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = wvalid_i; // + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = wlast_i; // + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = bready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_write_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_write_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_if.sv new file mode 100644 index 000000000..5208bddc6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_if.sv @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_write_in interface signals. +// It is instantiated once per fuse_ctrl_core_axi_write_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_write_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_write_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awaddr), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awburst), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awsize), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awlen), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awuser), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awlock), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.wdata), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.wstrb), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.wvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.wlast), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.bready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_in_pkg_hdl::*; + +interface fuse_ctrl_core_axi_write_in_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] awaddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst, + inout tri [2:0] awsize, + inout tri [7:0] awlen, + inout tri [UW-1:0] awuser, + inout tri [UW-1:0] awid, + inout tri awlock, + inout tri awvalid, + inout tri [DW-1:0] wdata, + inout tri [DW/8-1:0] wstrb, + inout tri wvalid, + inout tri wlast, + inout tri bready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output awaddr, + output awburst, + output awsize, + output awlen, + output awuser, + output awid, + output awlock, + output awvalid, + output wdata, + output wstrb, + output wvalid, + output wlast, + output bready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_macros.svh new file mode 100644 index 000000000..c925c1523 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_macros.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_write_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_write_in_configuration class. +// + `define fuse_ctrl_core_axi_write_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_write_in_configuration_s; + + `define fuse_ctrl_core_axi_write_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_configuration_s to_struct();\ + fuse_ctrl_core_axi_write_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_write_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_write_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_write_in_configuration_s fuse_ctrl_core_axi_write_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_write_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_write_in_transaction class. +// + `define fuse_ctrl_core_axi_write_in_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_in_monitor_s; + + `define fuse_ctrl_core_axi_write_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_write_in_monitor_struct = \ + { \ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_write_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_write_in_monitor_s fuse_ctrl_core_axi_write_in_monitor_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_write_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_in_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_in_initiator_s; + + `define fuse_ctrl_core_axi_write_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_write_in_initiator_struct = \ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_write_in_initiator_s fuse_ctrl_core_axi_write_in_initiator_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_write_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_in_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_in_responder_s; + + `define fuse_ctrl_core_axi_write_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_write_in_responder_struct = \ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_in_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_write_in_responder_s fuse_ctrl_core_axi_write_in_responder_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor.svh new file mode 100644 index 000000000..b17587874 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_write_in transactions observed by the +// fuse_ctrl_core_axi_write_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_write_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_write_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_write_in_monitor_s fuse_ctrl_core_axi_write_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_write_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor_bfm.sv new file mode 100644 index 000000000..f25132158 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor_bfm.sv @@ -0,0 +1,248 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_write_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_write_in monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_write_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_write_in_if. +// +// Input signals from the fuse_ctrl_core_axi_write_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_write_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_in_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_in_macros.svh" + + +interface fuse_ctrl_core_axi_write_in_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_write_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_write_in_MONITOR_STRUCT + fuse_ctrl_core_axi_write_in_monitor_s fuse_ctrl_core_axi_write_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_write_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] awaddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + tri [2:0] awsize_i; + tri [7:0] awlen_i; + tri [UW-1:0] awuser_i; + tri [UW-1:0] awid_i; + tri awlock_i; + tri awvalid_i; + tri [DW-1:0] wdata_i; + tri [DW/8-1:0] wstrb_i; + tri wvalid_i; + tri wlast_i; + tri bready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awaddr_i = bus.awaddr; + assign awburst_i = bus.awburst; + assign awsize_i = bus.awsize; + assign awlen_i = bus.awlen; + assign awuser_i = bus.awuser; + assign awid_i = bus.awid; + assign awlock_i = bus.awlock; + assign awvalid_i = bus.awvalid; + assign wdata_i = bus.wdata; + assign wstrb_i = bus.wstrb; + assign wvalid_i = bus.wvalid; + assign wlast_i = bus.wlast; + assign bready_i = bus.bready; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_write_in_pkg::fuse_ctrl_core_axi_write_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_write_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_write_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_write_in_configuration_s fuse_ctrl_core_axi_write_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_write_in_monitor_s fuse_ctrl_core_axi_write_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awaddr + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awvalid + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awburst + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awsize + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awlen + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awuser + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awid + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awlock + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_wdata + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_wstrb + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_wvalid + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_wlast + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_bready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awlock_i; // + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awvalid_i; // + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = wvalid_i; // + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = wlast_i; // + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = bready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_random_sequence.svh new file mode 100644 index 000000000..fd2c3c939 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_write_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_write_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_write_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_write_in_random_sequence::body()-fuse_ctrl_core_axi_write_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_write_in_driver_bfm via the sequencer and fuse_ctrl_core_axi_write_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_write_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_responder_sequence.svh new file mode 100644 index 000000000..6305f4d91 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_write_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_write_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_sequence_base.svh new file mode 100644 index 000000000..69be97677 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_in_transaction_req_t; + fuse_ctrl_core_axi_write_in_transaction_req_t req; + typedef fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_in_transaction_rsp_t; + fuse_ctrl_core_axi_write_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_write_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_write_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction.svh new file mode 100644 index 000000000..08595f6e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction.svh @@ -0,0 +1,256 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_write_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] core_awaddr ; + logic core_awvalid ; + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + logic [2:0] core_awsize ; + logic [7:0] core_awlen ; + logic [UW-1:0] core_awuser ; + logic [IW-1:0] core_awid ; + logic core_awlock ; + logic [DW-1:0] core_wdata ; + logic [DW/8 - 1:0] core_wstrb ; + logic core_wvalid ; + logic core_wlast ; + logic core_bready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_write_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_write_in_monitor and fuse_ctrl_core_axi_write_in_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_MONITOR_STRUCT + fuse_ctrl_core_axi_write_in_monitor_s fuse_ctrl_core_axi_write_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_in_driver and fuse_ctrl_core_axi_write_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_in_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_in_initiator_s fuse_ctrl_core_axi_write_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_write_in_driver and fuse_ctrl_core_axi_write_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_in_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_in_responder_s fuse_ctrl_core_axi_write_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_responder_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awaddr:0x%x core_awvalid:0x%x core_awburst:0x%x core_awsize:0x%x core_awlen:0x%x core_awuser:0x%x core_awid:0x%x core_awlock:0x%x core_wdata:0x%x core_wstrb:0x%x core_wvalid:0x%x core_wlast:0x%x core_bready:0x%x ",core_awaddr,core_awvalid,core_awburst,core_awsize,core_awlen,core_awuser,core_awid,core_awlock,core_wdata,core_wstrb,core_wvalid,core_wlast,core_bready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_wdata == RHS.core_wdata) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awaddr = RHS.core_awaddr; + this.core_awvalid = RHS.core_awvalid; + this.core_awburst = RHS.core_awburst; + this.core_awsize = RHS.core_awsize; + this.core_awlen = RHS.core_awlen; + this.core_awuser = RHS.core_awuser; + this.core_awid = RHS.core_awid; + this.core_awlock = RHS.core_awlock; + this.core_wdata = RHS.core_wdata; + this.core_wstrb = RHS.core_wstrb; + this.core_wvalid = RHS.core_wvalid; + this.core_wlast = RHS.core_wlast; + this.core_bready = RHS.core_bready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_write_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awaddr,"core_awaddr"); + $add_attribute(transaction_view_h,core_awvalid,"core_awvalid"); + $add_attribute(transaction_view_h,core_awburst,"core_awburst"); + $add_attribute(transaction_view_h,core_awsize,"core_awsize"); + $add_attribute(transaction_view_h,core_awlen,"core_awlen"); + $add_attribute(transaction_view_h,core_awuser,"core_awuser"); + $add_attribute(transaction_view_h,core_awid,"core_awid"); + $add_attribute(transaction_view_h,core_awlock,"core_awlock"); + $add_attribute(transaction_view_h,core_wdata,"core_wdata"); + $add_attribute(transaction_view_h,core_wstrb,"core_wstrb"); + $add_attribute(transaction_view_h,core_wvalid,"core_wvalid"); + $add_attribute(transaction_view_h,core_wlast,"core_wlast"); + $add_attribute(transaction_view_h,core_bready,"core_bready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction_coverage.svh new file mode 100644 index 000000000..8fd417418 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction_coverage.svh @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_write_in transaction information using +// a covergroup named fuse_ctrl_core_axi_write_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_write_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awaddr: coverpoint coverage_trans.core_awaddr; + core_awvalid: coverpoint coverage_trans.core_awvalid; + core_awburst: coverpoint coverage_trans.core_awburst; + core_awsize: coverpoint coverage_trans.core_awsize; + core_awlen: coverpoint coverage_trans.core_awlen; + core_awuser: coverpoint coverage_trans.core_awuser; + core_awid: coverpoint coverage_trans.core_awid; + core_awlock: coverpoint coverage_trans.core_awlock; + core_wdata: coverpoint coverage_trans.core_wdata; + core_wstrb: coverpoint coverage_trans.core_wstrb; + core_wvalid: coverpoint coverage_trans.core_wvalid; + core_wlast: coverpoint coverage_trans.core_wlast; + core_bready: coverpoint coverage_trans.core_bready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_write_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_write_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_write_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/yaml/fuse_ctrl_core_axi_write_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/yaml/fuse_ctrl_core_axi_write_in_interface.yaml new file mode 100644 index 000000000..9882e7c50 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/yaml/fuse_ctrl_core_axi_write_in_interface.yaml @@ -0,0 +1,161 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_write_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: awaddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: awburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: awsize + reset_value: '''bz' + width: '3' + - dir: output + name: awlen + reset_value: '''bz' + width: '8' + - dir: output + name: awuser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awid + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awlock + reset_value: '''bz' + width: '1' + - dir: output + name: awvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wdata + reset_value: '''bz' + width: '[''DW'']' + - dir: output + name: wstrb + reset_value: '''bz' + width: '[''DW/8'']' + - dir: output + name: wvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wlast + reset_value: '''bz' + width: '1' + - dir: output + name: bready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: core_awaddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awuser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wstrb + type: logic [DW/8 - 1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_bready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.project new file mode 100644 index 000000000..f8447cc2e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_write_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.svproject new file mode 100644 index 000000000..4af4ad18e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/Makefile new file mode 100644 index 000000000..9c70bece5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_write_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_write_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hvl.f + +fuse_ctrl_core_axi_write_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hdl.f + +fuse_ctrl_core_axi_write_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_write_out_if_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_write_out_if_pkg +COMP_fuse_ctrl_core_axi_write_out_if_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_write_out_if_pkg +COMP_fuse_ctrl_core_axi_write_out_if_PKG_TGT = $(COMP_fuse_ctrl_core_axi_write_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_write_out_if_pkg: $(COMP_fuse_ctrl_core_axi_write_out_if_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_write_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_write_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_write_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_out_if_pkg += -I$(fuse_ctrl_core_axi_write_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_out_if_pkg += $(fuse_ctrl_core_axi_write_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_write_out_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_write_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_write_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_write_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/compile.do new file mode 100644 index 000000000..a150aebd7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_write_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if.compile new file mode 100644 index 000000000..019584b20 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_write_out_if_hvl.compile + - fuse_ctrl_core_axi_write_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_bfm.vinfo new file mode 100644 index 000000000..3e0319cf4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_write_out_if_if.sv +src/fuse_ctrl_core_axi_write_out_if_driver_bfm.sv +src/fuse_ctrl_core_axi_write_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_common.compile new file mode 100644 index 000000000..7e6930876 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hdl.f new file mode 100644 index 000000000..02ef8e42c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hvl.f new file mode 100644 index 000000000..6c0fbb4c3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_xrtl.f new file mode 100644 index 000000000..d0c02e170 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hdl.compile new file mode 100644 index 000000000..9deb2f5cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_write_out_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_write_out_if_if.sv + - src/fuse_ctrl_core_axi_write_out_if_monitor_bfm.sv + - src/fuse_ctrl_core_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hvl.compile new file mode 100644 index 000000000..eeb57fb37 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_write_out_if_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.sv new file mode 100644 index 000000000..049a79ab9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_write_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_write_out_if_macros.svh" + + export fuse_ctrl_core_axi_write_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_write_out_if_typedefs.svh" + `include "src/fuse_ctrl_core_axi_write_out_if_transaction.svh" + + `include "src/fuse_ctrl_core_axi_write_out_if_configuration.svh" + `include "src/fuse_ctrl_core_axi_write_out_if_driver.svh" + `include "src/fuse_ctrl_core_axi_write_out_if_monitor.svh" + + `include "src/fuse_ctrl_core_axi_write_out_if_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_write_out_if_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_write_out_if_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_write_out_if_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_write_out_if2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_write_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.vinfo new file mode 100644 index 000000000..94eb5cdef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv new file mode 100644 index 000000000..ca03d31ac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_write_out_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_write_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..2ef500d08 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_sve.F new file mode 100644 index 000000000..ad8763dab --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if2reg_adapter.svh new file mode 100644 index 000000000..a62903564 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_write_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_write_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_write_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_agent.svh new file mode 100644 index 000000000..8cbb38cfe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_write_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_configuration.svh new file mode 100644 index 000000000..6310b6980 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_write_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_write_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_write_out_if_configuration_s fuse_ctrl_core_axi_write_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_write_out_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_if_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_write_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_write_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_write_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_write_out_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver.svh new file mode 100644 index 000000000..700a867c2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_write_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_write_out_if_driver and fuse_ctrl_core_axi_write_out_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_write_out_if_driver_bfm. +`fuse_ctrl_core_axi_write_out_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_out_if_initiator_s fuse_ctrl_core_axi_write_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_write_out_if_driver and fuse_ctrl_core_axi_write_out_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_write_out_if_driver_bfm. +`fuse_ctrl_core_axi_write_out_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_out_if_responder_s fuse_ctrl_core_axi_write_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_write_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_write_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_write_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_write_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver_bfm.sv new file mode 100644 index 000000000..546de39a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_write_out_if signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_write_out_if driver through a virtual interface +// handle in the fuse_ctrl_core_axi_write_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_write_out_if_if. +// +// Input signals from the fuse_ctrl_core_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_write_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_out_if_macros.svh" + +interface fuse_ctrl_core_axi_write_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_write_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_write_out_if_pkg::fuse_ctrl_core_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_write_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_write_out_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_write_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_out_if_driver and fuse_ctrl_core_axi_write_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_out_if_driver_bfm. + `fuse_ctrl_core_axi_write_out_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_write_out_if_driver and fuse_ctrl_core_axi_write_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_out_if_driver_bfm. + `fuse_ctrl_core_axi_write_out_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_write_out_if_configuration_s fuse_ctrl_core_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_write_out_if_initiator_s fuse_ctrl_core_axi_write_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_write_out_if_responder_s fuse_ctrl_core_axi_write_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_write_out_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Members within the fuse_ctrl_core_axi_write_out_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + initiator_struct = fuse_ctrl_core_axi_write_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_core_axi_write_out_if_responder_struct.xyz = awready_i; // + // fuse_ctrl_core_axi_write_out_if_responder_struct.xyz = wready_i; // + // fuse_ctrl_core_axi_write_out_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_out_if_responder_struct.xyz = bid_i; // + // fuse_ctrl_core_axi_write_out_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_write_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_write_out_if_initiator_s fuse_ctrl_core_axi_write_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_write_out_if_responder_s fuse_ctrl_core_axi_write_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_write_out_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Variables within the fuse_ctrl_core_axi_write_out_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= fuse_ctrl_core_axi_write_out_if_initiator_struct.xyz; // + // wready_o <= fuse_ctrl_core_axi_write_out_if_initiator_struct.xyz; // + // bresp_o <= fuse_ctrl_core_axi_write_out_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= fuse_ctrl_core_axi_write_out_if_initiator_struct.xyz; // + // bvalid_o <= fuse_ctrl_core_axi_write_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_write_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_if.sv new file mode 100644 index 000000000..2be6f57ed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_write_out_if interface signals. +// It is instantiated once per fuse_ctrl_core_axi_write_out_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_write_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_write_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_write_out_if_bus.awready), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_if_bus.wready), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_if_bus.bresp), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_if_bus.bid), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_out_if_pkg_hdl::*; + +interface fuse_ctrl_core_axi_write_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_macros.svh new file mode 100644 index 000000000..0e6c3c0de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_write_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_write_out_if_configuration class. +// + `define fuse_ctrl_core_axi_write_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_write_out_if_configuration_s; + + `define fuse_ctrl_core_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_if_configuration_s to_struct();\ + fuse_ctrl_core_axi_write_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_write_out_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_write_out_if_configuration_s fuse_ctrl_core_axi_write_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_write_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_write_out_if_transaction class. +// + `define fuse_ctrl_core_axi_write_out_if_MONITOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_ctrl_core_axi_write_out_if_monitor_s; + + `define fuse_ctrl_core_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_if_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_write_out_if_monitor_struct = \ + { \ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_ctrl_core_axi_write_out_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_write_out_if_monitor_s fuse_ctrl_core_axi_write_out_if_monitor_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_ctrl_core_axi_write_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_ctrl_core_axi_write_out_if_initiator_s; + + `define fuse_ctrl_core_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_if_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_write_out_if_initiator_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_ctrl_core_axi_write_out_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_write_out_if_initiator_s fuse_ctrl_core_axi_write_out_if_initiator_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_ctrl_core_axi_write_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_ctrl_core_axi_write_out_if_responder_s; + + `define fuse_ctrl_core_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_if_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_write_out_if_responder_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_ctrl_core_axi_write_out_if_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_write_out_if_responder_s fuse_ctrl_core_axi_write_out_if_responder_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_ctrl_core_axi_write_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor.svh new file mode 100644 index 000000000..b63c646f1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_write_out_if transactions observed by the +// fuse_ctrl_core_axi_write_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_write_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_write_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_write_out_if_monitor_s fuse_ctrl_core_axi_write_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_write_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor_bfm.sv new file mode 100644 index 000000000..f78f26207 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_write_out_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_write_out_if monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_write_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_write_out_if_if. +// +// Input signals from the fuse_ctrl_core_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_write_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_out_if_macros.svh" + + +interface fuse_ctrl_core_axi_write_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_write_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_write_out_if_MONITOR_STRUCT + fuse_ctrl_core_axi_write_out_if_monitor_s fuse_ctrl_core_axi_write_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_write_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_write_out_if_pkg::fuse_ctrl_core_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_write_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_write_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_write_out_if_configuration_s fuse_ctrl_core_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_write_out_if_monitor_s fuse_ctrl_core_axi_write_out_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_write_out_if_monitor_struct.core_awready + // // fuse_ctrl_core_axi_write_out_if_monitor_struct.core_wready + // // fuse_ctrl_core_axi_write_out_if_monitor_struct.core_bresp + // // fuse_ctrl_core_axi_write_out_if_monitor_struct.core_bid + // // fuse_ctrl_core_axi_write_out_if_monitor_struct.core_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_write_out_if_monitor_struct.xyz = awready_i; // + // fuse_ctrl_core_axi_write_out_if_monitor_struct.xyz = wready_i; // + // fuse_ctrl_core_axi_write_out_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_out_if_monitor_struct.xyz = bid_i; // + // fuse_ctrl_core_axi_write_out_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_random_sequence.svh new file mode 100644 index 000000000..03119f4d4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_write_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_write_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_write_out_if_random_sequence::body()-fuse_ctrl_core_axi_write_out_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_write_out_if_driver_bfm via the sequencer and fuse_ctrl_core_axi_write_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_write_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_responder_sequence.svh new file mode 100644 index 000000000..f525d3d69 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_write_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_sequence_base.svh new file mode 100644 index 000000000..7f3957f54 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_out_if_transaction_req_t; + fuse_ctrl_core_axi_write_out_if_transaction_req_t req; + typedef fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_out_if_transaction_rsp_t; + fuse_ctrl_core_axi_write_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_write_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_write_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction.svh new file mode 100644 index 000000000..9c52f7f9b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_write_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_awready ; + logic core_wready ; + axi_pkg::axi_burst_e core_bresp ; + logic core_bid ; + logic core_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_write_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_write_out_if_monitor and fuse_ctrl_core_axi_write_out_if_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_MONITOR_STRUCT + fuse_ctrl_core_axi_write_out_if_monitor_s fuse_ctrl_core_axi_write_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_out_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_if_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_out_if_driver and fuse_ctrl_core_axi_write_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_out_if_initiator_s fuse_ctrl_core_axi_write_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_out_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_if_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_write_out_if_driver and fuse_ctrl_core_axi_write_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_out_if_responder_s fuse_ctrl_core_axi_write_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_out_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_if_responder_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awready:0x%x core_wready:0x%x core_bresp:0x%x core_bid:0x%x core_bvalid:0x%x ",core_awready,core_wready,core_bresp,core_bid,core_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_awready == RHS.core_awready) + &&(this.core_wready == RHS.core_wready) + &&(this.core_bresp == RHS.core_bresp) + &&(this.core_bid == RHS.core_bid) + &&(this.core_bvalid == RHS.core_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awready = RHS.core_awready; + this.core_wready = RHS.core_wready; + this.core_bresp = RHS.core_bresp; + this.core_bid = RHS.core_bid; + this.core_bvalid = RHS.core_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_write_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awready,"core_awready"); + $add_attribute(transaction_view_h,core_wready,"core_wready"); + $add_attribute(transaction_view_h,core_bresp,"core_bresp"); + $add_attribute(transaction_view_h,core_bid,"core_bid"); + $add_attribute(transaction_view_h,core_bvalid,"core_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction_coverage.svh new file mode 100644 index 000000000..e83ee969f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_write_out_if transaction information using +// a covergroup named fuse_ctrl_core_axi_write_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_write_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awready: coverpoint coverage_trans.core_awready; + core_wready: coverpoint coverage_trans.core_wready; + core_bresp: coverpoint coverage_trans.core_bresp; + core_bid: coverpoint coverage_trans.core_bid; + core_bvalid: coverpoint coverage_trans.core_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_write_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_write_out_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_write_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/yaml/fuse_ctrl_core_axi_write_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/yaml/fuse_ctrl_core_axi_write_out_if_interface.yaml new file mode 100644 index 000000000..a4ad2e78b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/yaml/fuse_ctrl_core_axi_write_out_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_write_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.project new file mode 100644 index 000000000..673a4105f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_write_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.svproject new file mode 100644 index 000000000..e0ccd6023 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/Makefile new file mode 100644 index 000000000..b885f66ae --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_write_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_write_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hvl.f + +fuse_ctrl_core_axi_write_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hdl.f + +fuse_ctrl_core_axi_write_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_write_out_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_write_out_pkg +COMP_fuse_ctrl_core_axi_write_out_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_write_out_pkg +COMP_fuse_ctrl_core_axi_write_out_PKG_TGT = $(COMP_fuse_ctrl_core_axi_write_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_write_out_pkg: $(COMP_fuse_ctrl_core_axi_write_out_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_write_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_write_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_write_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_write_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_write_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_out_pkg += -I$(fuse_ctrl_core_axi_write_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_out_pkg += $(fuse_ctrl_core_axi_write_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_write_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_write_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_write_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_write_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/compile.do new file mode 100644 index 000000000..dd7c8dfdc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_write_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out.compile new file mode 100644 index 000000000..fc356ade3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_write_out_hvl.compile + - fuse_ctrl_core_axi_write_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_bfm.vinfo new file mode 100644 index 000000000..4acbc3dcb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_write_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_write_out_if.sv +src/fuse_ctrl_core_axi_write_out_driver_bfm.sv +src/fuse_ctrl_core_axi_write_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_common.compile new file mode 100644 index 000000000..ab99fa6e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_write_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hdl.f new file mode 100644 index 000000000..354fe2499 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hvl.f new file mode 100644 index 000000000..d14e3d6c5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_xrtl.f new file mode 100644 index 000000000..9aecc8885 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hdl.compile new file mode 100644 index 000000000..d220bb845 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_write_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_write_out_if.sv + - src/fuse_ctrl_core_axi_write_out_monitor_bfm.sv + - src/fuse_ctrl_core_axi_write_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hvl.compile new file mode 100644 index 000000000..2d0aa9807 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_write_out_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_write_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.sv new file mode 100644 index 000000000..4e525f12e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_write_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_write_out_macros.svh" + + export fuse_ctrl_core_axi_write_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_write_out_typedefs.svh" + `include "src/fuse_ctrl_core_axi_write_out_transaction.svh" + + `include "src/fuse_ctrl_core_axi_write_out_configuration.svh" + `include "src/fuse_ctrl_core_axi_write_out_driver.svh" + `include "src/fuse_ctrl_core_axi_write_out_monitor.svh" + + `include "src/fuse_ctrl_core_axi_write_out_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_write_out_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_write_out_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_write_out_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_write_out2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_write_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.vinfo new file mode 100644 index 000000000..6c1d3851b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_write_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_write_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.sv new file mode 100644 index 000000000..9bdd4e613 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_write_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_write_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.vinfo new file mode 100644 index 000000000..68e75c652 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_write_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_sve.F new file mode 100644 index 000000000..dd141cca6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out2reg_adapter.svh new file mode 100644 index 000000000..7f7d115ab --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_write_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_write_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_write_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_agent.svh new file mode 100644 index 000000000..f35b0c2f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_write_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_write_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_write_out_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_configuration.svh new file mode 100644 index 000000000..e6dac332a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_write_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_write_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_write_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_write_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_write_out_configuration_s fuse_ctrl_core_axi_write_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_write_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_write_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_write_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_write_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_write_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_write_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver.svh new file mode 100644 index 000000000..18a3dac72 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_write_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_write_out_driver and fuse_ctrl_core_axi_write_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_write_out_driver_bfm. +`fuse_ctrl_core_axi_write_out_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_out_initiator_s fuse_ctrl_core_axi_write_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_write_out_driver and fuse_ctrl_core_axi_write_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_write_out_driver_bfm. +`fuse_ctrl_core_axi_write_out_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_out_responder_s fuse_ctrl_core_axi_write_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_write_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_write_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_write_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_write_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver_bfm.sv new file mode 100644 index 000000000..ee3c4fb40 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_write_out signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_write_out driver through a virtual interface +// handle in the fuse_ctrl_core_axi_write_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_write_out_if. +// +// Input signals from the fuse_ctrl_core_axi_write_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_write_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_out_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_out_macros.svh" + +interface fuse_ctrl_core_axi_write_out_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_write_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_write_out_pkg::fuse_ctrl_core_axi_write_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_write_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_write_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_write_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_out_driver and fuse_ctrl_core_axi_write_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_out_driver_bfm. + `fuse_ctrl_core_axi_write_out_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_write_out_driver and fuse_ctrl_core_axi_write_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_out_driver_bfm. + `fuse_ctrl_core_axi_write_out_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_write_out_configuration_s fuse_ctrl_core_axi_write_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_write_out_initiator_s fuse_ctrl_core_axi_write_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_write_out_responder_s fuse_ctrl_core_axi_write_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_write_out_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Members within the fuse_ctrl_core_axi_write_out_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + initiator_struct = fuse_ctrl_core_axi_write_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_core_axi_write_out_responder_struct.xyz = awready_i; // + // fuse_ctrl_core_axi_write_out_responder_struct.xyz = wready_i; // + // fuse_ctrl_core_axi_write_out_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_out_responder_struct.xyz = bid_i; // + // fuse_ctrl_core_axi_write_out_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_write_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_write_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_write_out_initiator_s fuse_ctrl_core_axi_write_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_write_out_responder_s fuse_ctrl_core_axi_write_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_write_out_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Variables within the fuse_ctrl_core_axi_write_out_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= fuse_ctrl_core_axi_write_out_initiator_struct.xyz; // + // wready_o <= fuse_ctrl_core_axi_write_out_initiator_struct.xyz; // + // bresp_o <= fuse_ctrl_core_axi_write_out_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= fuse_ctrl_core_axi_write_out_initiator_struct.xyz; // + // bvalid_o <= fuse_ctrl_core_axi_write_out_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_write_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_write_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_if.sv new file mode 100644 index 000000000..a5e2f1cb4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_write_out interface signals. +// It is instantiated once per fuse_ctrl_core_axi_write_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_write_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_write_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_write_out_bus.awready), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_bus.wready), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_bus.bresp), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_bus.bid), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_out_pkg_hdl::*; + +interface fuse_ctrl_core_axi_write_out_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_macros.svh new file mode 100644 index 000000000..5f57ee1cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_write_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_write_out_configuration class. +// + `define fuse_ctrl_core_axi_write_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_write_out_configuration_s; + + `define fuse_ctrl_core_axi_write_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_configuration_s to_struct();\ + fuse_ctrl_core_axi_write_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_write_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_write_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_write_out_configuration_s fuse_ctrl_core_axi_write_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_write_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_write_out_transaction class. +// + `define fuse_ctrl_core_axi_write_out_MONITOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_ctrl_core_axi_write_out_monitor_s; + + `define fuse_ctrl_core_axi_write_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_write_out_monitor_struct = \ + { \ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_ctrl_core_axi_write_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_write_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_write_out_monitor_s fuse_ctrl_core_axi_write_out_monitor_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_ctrl_core_axi_write_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_write_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_out_INITIATOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_ctrl_core_axi_write_out_initiator_s; + + `define fuse_ctrl_core_axi_write_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_write_out_initiator_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_ctrl_core_axi_write_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_write_out_initiator_s fuse_ctrl_core_axi_write_out_initiator_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_ctrl_core_axi_write_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_write_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_out_RESPONDER_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_ctrl_core_axi_write_out_responder_s; + + `define fuse_ctrl_core_axi_write_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_write_out_responder_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_ctrl_core_axi_write_out_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_write_out_responder_s fuse_ctrl_core_axi_write_out_responder_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_ctrl_core_axi_write_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor.svh new file mode 100644 index 000000000..d540c2d82 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_write_out transactions observed by the +// fuse_ctrl_core_axi_write_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_write_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_write_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_write_out_monitor_s fuse_ctrl_core_axi_write_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_write_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor_bfm.sv new file mode 100644 index 000000000..d39a378de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_write_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_write_out monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_write_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_write_out_if. +// +// Input signals from the fuse_ctrl_core_axi_write_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_write_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_out_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_out_macros.svh" + + +interface fuse_ctrl_core_axi_write_out_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_write_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_write_out_MONITOR_STRUCT + fuse_ctrl_core_axi_write_out_monitor_s fuse_ctrl_core_axi_write_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_write_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_write_out_pkg::fuse_ctrl_core_axi_write_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_write_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_write_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_write_out_configuration_s fuse_ctrl_core_axi_write_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_write_out_monitor_s fuse_ctrl_core_axi_write_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_write_out_monitor_struct.core_awready + // // fuse_ctrl_core_axi_write_out_monitor_struct.core_wready + // // fuse_ctrl_core_axi_write_out_monitor_struct.core_bresp + // // fuse_ctrl_core_axi_write_out_monitor_struct.core_bid + // // fuse_ctrl_core_axi_write_out_monitor_struct.core_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_write_out_monitor_struct.xyz = awready_i; // + // fuse_ctrl_core_axi_write_out_monitor_struct.xyz = wready_i; // + // fuse_ctrl_core_axi_write_out_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_out_monitor_struct.xyz = bid_i; // + // fuse_ctrl_core_axi_write_out_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_random_sequence.svh new file mode 100644 index 000000000..490a94fe3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_write_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_write_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_write_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_write_out_random_sequence::body()-fuse_ctrl_core_axi_write_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_write_out_driver_bfm via the sequencer and fuse_ctrl_core_axi_write_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_write_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_responder_sequence.svh new file mode 100644 index 000000000..9aaa395ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_write_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_write_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_sequence_base.svh new file mode 100644 index 000000000..d4ae2f4d6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_out_transaction_req_t; + fuse_ctrl_core_axi_write_out_transaction_req_t req; + typedef fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_out_transaction_rsp_t; + fuse_ctrl_core_axi_write_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_write_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_write_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction.svh new file mode 100644 index 000000000..fc836d88f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_write_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_awready ; + logic core_wready ; + axi_pkg::axi_burst_e core_bresp ; + logic core_bid ; + logic core_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_write_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_write_out_monitor and fuse_ctrl_core_axi_write_out_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_MONITOR_STRUCT + fuse_ctrl_core_axi_write_out_monitor_s fuse_ctrl_core_axi_write_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_out_driver and fuse_ctrl_core_axi_write_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_out_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_out_initiator_s fuse_ctrl_core_axi_write_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_write_out_driver and fuse_ctrl_core_axi_write_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_out_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_out_responder_s fuse_ctrl_core_axi_write_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_responder_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awready:0x%x core_wready:0x%x core_bresp:0x%x core_bid:0x%x core_bvalid:0x%x ",core_awready,core_wready,core_bresp,core_bid,core_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_awready == RHS.core_awready) + &&(this.core_wready == RHS.core_wready) + &&(this.core_bresp == RHS.core_bresp) + &&(this.core_bid == RHS.core_bid) + &&(this.core_bvalid == RHS.core_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awready = RHS.core_awready; + this.core_wready = RHS.core_wready; + this.core_bresp = RHS.core_bresp; + this.core_bid = RHS.core_bid; + this.core_bvalid = RHS.core_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_write_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awready,"core_awready"); + $add_attribute(transaction_view_h,core_wready,"core_wready"); + $add_attribute(transaction_view_h,core_bresp,"core_bresp"); + $add_attribute(transaction_view_h,core_bid,"core_bid"); + $add_attribute(transaction_view_h,core_bvalid,"core_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction_coverage.svh new file mode 100644 index 000000000..f6e083118 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_write_out transaction information using +// a covergroup named fuse_ctrl_core_axi_write_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_write_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awready: coverpoint coverage_trans.core_awready; + core_wready: coverpoint coverage_trans.core_wready; + core_bresp: coverpoint coverage_trans.core_bresp; + core_bid: coverpoint coverage_trans.core_bid; + core_bvalid: coverpoint coverage_trans.core_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_write_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_write_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_write_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/yaml/fuse_ctrl_core_axi_write_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/yaml/fuse_ctrl_core_axi_write_out_interface.yaml new file mode 100644 index 000000000..7f30cb198 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/yaml/fuse_ctrl_core_axi_write_out_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_write_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.project new file mode 100644 index 000000000..45e6ebf46 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_in_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.svproject new file mode 100644 index 000000000..f75187c7a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/Makefile new file mode 100644 index 000000000..ec35ee1db --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_in_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_in_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f + +fuse_ctrl_in_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f + +fuse_ctrl_in_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_xrtl.f + +COMP_fuse_ctrl_in_if_PKG_TGT_0 = q_comp_fuse_ctrl_in_if_pkg +COMP_fuse_ctrl_in_if_PKG_TGT_1 = v_comp_fuse_ctrl_in_if_pkg +COMP_fuse_ctrl_in_if_PKG_TGT = $(COMP_fuse_ctrl_in_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_in_if_pkg: $(COMP_fuse_ctrl_in_if_PKG_TGT) + +q_comp_fuse_ctrl_in_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_in_if_PKG_XRTL) + +v_comp_fuse_ctrl_in_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_in_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_in_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_in_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_in_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_in_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_in_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_in_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_in_if_pkg += -I$(fuse_ctrl_in_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_in_if_pkg += $(fuse_ctrl_in_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_in_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_in_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_in_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_in_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_in_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_in_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/compile.do new file mode 100644 index 000000000..c285781cd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_in_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if.compile new file mode 100644 index 000000000..e8e8162d5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_in_if_hvl.compile + - fuse_ctrl_in_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_bfm.vinfo new file mode 100644 index 000000000..b43d67488 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_in_if_if.sv +src/fuse_ctrl_in_if_driver_bfm.sv +src/fuse_ctrl_in_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_common.compile new file mode 100644 index 000000000..b81563f6f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f new file mode 100644 index 000000000..12e3b303b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f new file mode 100644 index 000000000..7a81ab807 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_xrtl.f new file mode 100644 index 000000000..179ff7f94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hdl.compile new file mode 100644 index 000000000..c092af6fc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_in_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_in_if_if.sv + - src/fuse_ctrl_in_if_monitor_bfm.sv + - src/fuse_ctrl_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hvl.compile new file mode 100644 index 000000000..92ee0394b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_in_if_common.compile +incdir: + - . +src: + - fuse_ctrl_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.sv new file mode 100644 index 000000000..084ccc70c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_in_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_in_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_in_if_macros.svh" + + export fuse_ctrl_in_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_in_if_typedefs.svh" + `include "src/fuse_ctrl_in_if_transaction.svh" + + `include "src/fuse_ctrl_in_if_configuration.svh" + `include "src/fuse_ctrl_in_if_driver.svh" + `include "src/fuse_ctrl_in_if_monitor.svh" + + `include "src/fuse_ctrl_in_if_transaction_coverage.svh" + `include "src/fuse_ctrl_in_if_sequence_base.svh" + `include "src/fuse_ctrl_in_if_random_sequence.svh" + + `include "src/fuse_ctrl_in_if_responder_sequence.svh" + `include "src/fuse_ctrl_in_if2reg_adapter.svh" + + `include "src/fuse_ctrl_in_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.vinfo new file mode 100644 index 000000000..638065653 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.sv new file mode 100644 index 000000000..0037ca5fe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_in_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_in_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_in_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.vinfo new file mode 100644 index 000000000..63327f479 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_sve.F new file mode 100644 index 000000000..8f42525dc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if2reg_adapter.svh new file mode 100644 index 000000000..949a9a2be --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_in_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if2reg_adapter #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_in_if2reg_adapter #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_in_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h = fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_in_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_agent.svh new file mode 100644 index 000000000..c4e054bf2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_agent #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_in_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .DRIVER_T(fuse_ctrl_in_if_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_T(fuse_ctrl_in_if_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .COVERAGE_T(fuse_ctrl_in_if_transaction_coverage #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_in_if_agent #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_configuration.svh new file mode 100644 index 000000000..2f557ad05 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_in_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_configuration #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_in_if_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_in_if_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_in_if_configuration #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_in_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_CONFIGURATION_STRUCT + fuse_ctrl_in_if_configuration_s fuse_ctrl_in_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_in_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_in_if_configuration_struct. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_in_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_in_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_in_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_in_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_in_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_in_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_in_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", agent_path, interface_name, AlertSyncOn ,RndConstLfrSeed ,RndCnstLfsrPerm ,MemInitFile ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_in_if_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver.svh new file mode 100644 index 000000000..4f5e71c4a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_driver #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_in_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_in_if_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .REQ(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .RSP(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_in_if_driver #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_in_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_in_if_driver and fuse_ctrl_in_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_in_if_driver_bfm. +`fuse_ctrl_in_if_INITIATOR_STRUCT + fuse_ctrl_in_if_initiator_s fuse_ctrl_in_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_in_if_driver and fuse_ctrl_in_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_in_if_driver_bfm. +`fuse_ctrl_in_if_RESPONDER_STRUCT + fuse_ctrl_in_if_responder_s fuse_ctrl_in_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_in_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_in_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_in_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_in_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver_bfm.sv new file mode 100644 index 000000000..6b39174a4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver_bfm.sv @@ -0,0 +1,346 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_in_if signal driving. It is +// accessed by the uvm fuse_ctrl_in_if driver through a virtual interface +// handle in the fuse_ctrl_in_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_in_if_if. +// +// Input signals from the fuse_ctrl_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_in_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_in_if_macros.svh" + +interface fuse_ctrl_in_if_driver_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + (fuse_ctrl_in_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_in_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i_i; + reg [$bits(edn_pkg::edn_req_t)-1:0] edn_i_o = 'bz; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_i; + reg [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_o = 'bz; + tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_i; + reg [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_o = 'bz; + tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_i; + reg [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_o = 'bz; + tri otp_ext_voltage_h_io_i; + reg otp_ext_voltage_h_io_o = 'bz; + tri scan_en_i_i; + reg scan_en_i_o = 'bz; + tri scan_rst_ni_i; + reg scan_rst_ni_o = 'bz; + tri scanmode_i_i; + reg scanmode_i_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.edn_i = (initiator_responder == INITIATOR) ? edn_i_o : 'bz; + assign edn_i_i = bus.edn_i; + assign bus.alert_rx_i = (initiator_responder == INITIATOR) ? alert_rx_i_o : 'bz; + assign alert_rx_i_i = bus.alert_rx_i; + assign bus.obs_ctrl_i = (initiator_responder == INITIATOR) ? obs_ctrl_i_o : 'bz; + assign obs_ctrl_i_i = bus.obs_ctrl_i; + assign bus.otp_ast_pwr_seq_h_i = (initiator_responder == INITIATOR) ? otp_ast_pwr_seq_h_i_o : 'bz; + assign otp_ast_pwr_seq_h_i_i = bus.otp_ast_pwr_seq_h_i; + assign bus.otp_ext_voltage_h_io = (initiator_responder == INITIATOR) ? otp_ext_voltage_h_io_o : 'bz; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + assign bus.scan_en_i = (initiator_responder == INITIATOR) ? scan_en_i_o : 'bz; + assign scan_en_i_i = bus.scan_en_i; + assign bus.scan_rst_ni = (initiator_responder == INITIATOR) ? scan_rst_ni_o : 'bz; + assign scan_rst_ni_i = bus.scan_rst_ni; + assign bus.scanmode_i = (initiator_responder == INITIATOR) ? scanmode_i_o : 'bz; + assign scanmode_i_i = bus.scanmode_i; + + // Proxy handle to UVM driver + fuse_ctrl_in_if_pkg::fuse_ctrl_in_if_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_in_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_in_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_in_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_in_if_driver and fuse_ctrl_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_in_if_driver_bfm. + `fuse_ctrl_in_if_INITIATOR_STRUCT + fuse_ctrl_in_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_in_if_driver and fuse_ctrl_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_in_if_driver_bfm. + `fuse_ctrl_in_if_RESPONDER_STRUCT + fuse_ctrl_in_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + edn_i_o <= 'bz; + alert_rx_i_o <= 'bz; + obs_ctrl_i_o <= 'bz; + otp_ast_pwr_seq_h_i_o <= 'bz; + otp_ext_voltage_h_io_o <= 'bz; + scan_en_i_o <= 'bz; + scan_rst_ni_o <= 'bz; + scanmode_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_in_if_configuration_s fuse_ctrl_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_in_if_initiator_s fuse_ctrl_in_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_in_if_responder_s fuse_ctrl_in_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_in_if_initiator_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Members within the fuse_ctrl_in_if_responder_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + initiator_struct = fuse_ctrl_in_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // edn_i_o <= fuse_ctrl_in_if_initiator_struct.xyz; // [$bits(edn_pkg::edn_req_t)-1:0] + // alert_rx_i_o <= fuse_ctrl_in_if_initiator_struct.xyz; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // obs_ctrl_i_o <= fuse_ctrl_in_if_initiator_struct.xyz; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // otp_ast_pwr_seq_h_i_o <= fuse_ctrl_in_if_initiator_struct.xyz; // [$bits(otp_ast_req_t)-1:0] + // otp_ext_voltage_h_io_o <= fuse_ctrl_in_if_initiator_struct.xyz; // + // scan_en_i_o <= fuse_ctrl_in_if_initiator_struct.xyz; // + // scan_rst_ni_o <= fuse_ctrl_in_if_initiator_struct.xyz; // + // scanmode_i_o <= fuse_ctrl_in_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_in_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_in_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_in_if_initiator_s fuse_ctrl_in_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_in_if_responder_s fuse_ctrl_in_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_in_if_initiator_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Variables within the fuse_ctrl_in_if_responder_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_in_if_responder_struct.xyz = edn_i_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_in_if_responder_struct.xyz = alert_rx_i_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // fuse_ctrl_in_if_responder_struct.xyz = obs_ctrl_i_i; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // fuse_ctrl_in_if_responder_struct.xyz = otp_ast_pwr_seq_h_i_i; // [$bits(otp_ast_req_t)-1:0] + // fuse_ctrl_in_if_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // fuse_ctrl_in_if_responder_struct.xyz = scan_en_i_i; // + // fuse_ctrl_in_if_responder_struct.xyz = scan_rst_ni_i; // + // fuse_ctrl_in_if_responder_struct.xyz = scanmode_i_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_in_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_in_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_if.sv new file mode 100644 index 000000000..590cb0dfa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_if.sv @@ -0,0 +1,119 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_in_if interface signals. +// It is instantiated once per fuse_ctrl_in_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_in_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_in_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_in_if_bus.edn_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.alert_rx_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.obs_ctrl_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.otp_ast_pwr_seq_h_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.otp_ext_voltage_h_io), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.scan_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.scan_rst_ni), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.scanmode_i), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_if_pkg_hdl::*; + +interface fuse_ctrl_in_if_if #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i, + inout tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i, + inout tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i, + inout tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i, + inout tri otp_ext_voltage_h_io, + inout tri scan_en_i, + inout tri scan_rst_ni, + inout tri scanmode_i + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input edn_i, + input alert_rx_i, + input obs_ctrl_i, + input otp_ast_pwr_seq_h_i, + input otp_ext_voltage_h_io, + input scan_en_i, + input scan_rst_ni, + input scanmode_i + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output edn_i, + output alert_rx_i, + output obs_ctrl_i, + output otp_ast_pwr_seq_h_i, + output otp_ext_voltage_h_io, + output scan_en_i, + output scan_rst_ni, + output scanmode_i + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input edn_i, + input alert_rx_i, + input obs_ctrl_i, + input otp_ast_pwr_seq_h_i, + input otp_ext_voltage_h_io, + input scan_en_i, + input scan_rst_ni, + input scanmode_i + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_macros.svh new file mode 100644 index 000000000..1c4c94307 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_in_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_in_if_configuration class. +// + `define fuse_ctrl_in_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_in_if_configuration_s; + + `define fuse_ctrl_in_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_if_configuration_s to_struct();\ + fuse_ctrl_in_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_in_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_in_if_configuration_s fuse_ctrl_in_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_in_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_in_if_transaction class. +// + `define fuse_ctrl_in_if_MONITOR_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_if_monitor_s; + + `define fuse_ctrl_in_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_if_monitor_s to_monitor_struct();\ + fuse_ctrl_in_if_monitor_struct = \ + { \ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_in_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_in_if_monitor_s fuse_ctrl_in_if_monitor_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_in_if_INITIATOR_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_if_initiator_s; + + `define fuse_ctrl_in_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_if_initiator_s to_initiator_struct();\ + fuse_ctrl_in_if_initiator_struct = \ + {\ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_in_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_in_if_initiator_s fuse_ctrl_in_if_initiator_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_in_if_RESPONDER_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_if_responder_s; + + `define fuse_ctrl_in_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_if_responder_s to_responder_struct();\ + fuse_ctrl_in_if_responder_struct = \ + {\ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_if_responder_struct);\ + endfunction + + `define fuse_ctrl_in_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_in_if_responder_s fuse_ctrl_in_if_responder_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor.svh new file mode 100644 index 000000000..b58f2c631 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_in_if transactions observed by the +// fuse_ctrl_in_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_monitor #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_in_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_in_if_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_in_if_monitor #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_in_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_in_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_in_if_monitor_s fuse_ctrl_in_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_in_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor_bfm.sv new file mode 100644 index 000000000..96d9a80f5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor_bfm.sv @@ -0,0 +1,221 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_in_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_in_if monitor through a virtual +// interface handle in the fuse_ctrl_in_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_in_if_if. +// +// Input signals from the fuse_ctrl_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_in_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_in_if_macros.svh" + + +interface fuse_ctrl_in_if_monitor_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + ( fuse_ctrl_in_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_in_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_in_if_MONITOR_STRUCT + fuse_ctrl_in_if_monitor_s fuse_ctrl_in_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_in_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i_i; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_i; + tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_i; + tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_i; + tri otp_ext_voltage_h_io_i; + tri scan_en_i_i; + tri scan_rst_ni_i; + tri scanmode_i_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign edn_i_i = bus.edn_i; + assign alert_rx_i_i = bus.alert_rx_i; + assign obs_ctrl_i_i = bus.obs_ctrl_i; + assign otp_ast_pwr_seq_h_i_i = bus.otp_ast_pwr_seq_h_i; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + assign scan_en_i_i = bus.scan_en_i; + assign scan_rst_ni_i = bus.scan_rst_ni; + assign scanmode_i_i = bus.scanmode_i; + + // Proxy handle to UVM monitor + fuse_ctrl_in_if_pkg::fuse_ctrl_in_if_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_in_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_in_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_in_if_configuration_s fuse_ctrl_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_in_if_monitor_s fuse_ctrl_in_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_in_if_monitor_struct.set_alert_rx_i + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_in_if_monitor_struct.xyz = edn_i_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_in_if_monitor_struct.xyz = alert_rx_i_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // fuse_ctrl_in_if_monitor_struct.xyz = obs_ctrl_i_i; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // fuse_ctrl_in_if_monitor_struct.xyz = otp_ast_pwr_seq_h_i_i; // [$bits(otp_ast_req_t)-1:0] + // fuse_ctrl_in_if_monitor_struct.xyz = otp_ext_voltage_h_io_i; // + // fuse_ctrl_in_if_monitor_struct.xyz = scan_en_i_i; // + // fuse_ctrl_in_if_monitor_struct.xyz = scan_rst_ni_i; // + // fuse_ctrl_in_if_monitor_struct.xyz = scanmode_i_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_random_sequence.svh new file mode 100644 index 000000000..8982a5cb8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_in_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_in_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_random_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_in_if_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_in_if_random_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_in_if_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_in_if_random_sequence::body()-fuse_ctrl_in_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_in_if_driver_bfm via the sequencer and fuse_ctrl_in_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_in_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_responder_sequence.svh new file mode 100644 index 000000000..75ca72188 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_responder_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_in_if_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_in_if_responder_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_in_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_in_if_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_sequence_base.svh new file mode 100644 index 000000000..12b699748 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_sequence_base #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .RSP(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_in_if_sequence_base #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // variables + typedef fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_in_if_transaction_req_t; + fuse_ctrl_in_if_transaction_req_t req; + typedef fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_in_if_transaction_rsp_t; + fuse_ctrl_in_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_in_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_in_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction.svh new file mode 100644 index 000000000..106e016f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction.svh @@ -0,0 +1,219 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_in_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_transaction #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_in_if_transaction #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_in_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_in_if_monitor and fuse_ctrl_in_if_monitor_bfm + // This struct is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_MONITOR_STRUCT + fuse_ctrl_in_if_monitor_s fuse_ctrl_in_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_in_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_in_if_monitor_struct. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_in_if_driver and fuse_ctrl_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_INITIATOR_STRUCT + fuse_ctrl_in_if_initiator_s fuse_ctrl_in_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_in_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_in_if_initiator_struct. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_in_if_driver and fuse_ctrl_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_RESPONDER_STRUCT + fuse_ctrl_in_if_responder_s fuse_ctrl_in_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_in_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_in_if_responder_struct. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("set_alert_rx_i:0x%x ",set_alert_rx_i); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.set_alert_rx_i = RHS.set_alert_rx_i; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_in_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,set_alert_rx_i,"set_alert_rx_i"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction_coverage.svh new file mode 100644 index 000000000..27fa4a7bd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction_coverage.svh @@ -0,0 +1,102 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_in_if transaction information using +// a covergroup named fuse_ctrl_in_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_transaction_coverage #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_subscriber #(.T(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_in_if_transaction_coverage #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_in_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + set_alert_rx_i: coverpoint coverage_trans.set_alert_rx_i; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_in_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_in_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_in_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_in_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/yaml/fuse_ctrl_in_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/yaml/fuse_ctrl_in_if_interface.yaml new file mode 100644 index 000000000..2dac8368b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/yaml/fuse_ctrl_in_if_interface.yaml @@ -0,0 +1,68 @@ +uvmf: + interfaces: + fuse_ctrl_in_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AlertSyncOn + type: int + value: '3' + - name: RndConstLfrSeed + type: lfsr_seed_t + value: RndConstLfsrSeedDefault + - name: RndCnstLfsrPerm + type: lsfr_perm_t + value: RndCnstLfsrPermDefault + - name: MemInitFile + type: string + ports: + - dir: output + name: edn_i + reset_value: '''bz' + width: '[''$bits(edn_pkg::edn_req_t)'']' + - dir: output + name: alert_rx_i + reset_value: '''bz' + width: '[''NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)'']' + - dir: output + name: obs_ctrl_i + reset_value: '''bz' + width: '[''$bits(ast_pkg::ast_obs_ctrl_t)'']' + - dir: output + name: otp_ast_pwr_seq_h_i + reset_value: '''bz' + width: '[''$bits(otp_ast_req_t)'']' + - dir: output + name: otp_ext_voltage_h_io + reset_value: '''bz' + width: '1' + - dir: output + name: scan_en_i + reset_value: '''bz' + width: '1' + - dir: output + name: scan_rst_ni + reset_value: '''bz' + width: '1' + - dir: output + name: scanmode_i + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: set_alert_rx_i + type: caliptra_prim_alert_pkg::alert_rx_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/.project new file mode 100644 index 000000000..3038bf51b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/.svproject new file mode 100644 index 000000000..40fcc43fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/Makefile new file mode 100644 index 000000000..9fd3230c4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f + +fuse_ctrl_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f + +fuse_ctrl_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f + +COMP_fuse_ctrl_in_PKG_TGT_0 = q_comp_fuse_ctrl_in_pkg +COMP_fuse_ctrl_in_PKG_TGT_1 = v_comp_fuse_ctrl_in_pkg +COMP_fuse_ctrl_in_PKG_TGT = $(COMP_fuse_ctrl_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_in_pkg: $(COMP_fuse_ctrl_in_PKG_TGT) + +q_comp_fuse_ctrl_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_in_PKG_XRTL) + +v_comp_fuse_ctrl_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_in_pkg += -I$(fuse_ctrl_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_in_pkg += $(fuse_ctrl_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/compile.do new file mode 100644 index 000000000..26458397d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile new file mode 100644 index 000000000..ae6ef9dd8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_in_hvl.compile + - fuse_ctrl_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo new file mode 100644 index 000000000..cf88b7005 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_in_if.sv +src/fuse_ctrl_in_driver_bfm.sv +src/fuse_ctrl_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_common.compile new file mode 100644 index 000000000..82360a88a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f new file mode 100644 index 000000000..959aa9e78 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f new file mode 100644 index 000000000..e57e74b80 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f new file mode 100644 index 000000000..1e9819e09 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile new file mode 100644 index 000000000..da38bec57 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_in_if.sv + - src/fuse_ctrl_in_monitor_bfm.sv + - src/fuse_ctrl_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile new file mode 100644 index 000000000..210102ccf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_in_common.compile +incdir: + - . +src: + - fuse_ctrl_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv new file mode 100644 index 000000000..58df769b3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_in_macros.svh" + + export fuse_ctrl_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_in_typedefs.svh" + `include "src/fuse_ctrl_in_transaction.svh" + + `include "src/fuse_ctrl_in_configuration.svh" + `include "src/fuse_ctrl_in_driver.svh" + `include "src/fuse_ctrl_in_monitor.svh" + + `include "src/fuse_ctrl_in_transaction_coverage.svh" + `include "src/fuse_ctrl_in_sequence_base.svh" + `include "src/fuse_ctrl_in_random_sequence.svh" + + `include "src/fuse_ctrl_in_responder_sequence.svh" + `include "src/fuse_ctrl_in2reg_adapter.svh" + + `include "src/fuse_ctrl_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo new file mode 100644 index 000000000..164f1255c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv new file mode 100644 index 000000000..b13dcf77e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.vinfo new file mode 100644 index 000000000..79de2ad70 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F new file mode 100644 index 000000000..345b7e8cd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in2reg_adapter.svh new file mode 100644 index 000000000..a359e7f30 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in2reg_adapter #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_in2reg_adapter #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h = fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_agent.svh new file mode 100644 index 000000000..8f2300972 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_agent #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_in_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .DRIVER_T(fuse_ctrl_in_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_T(fuse_ctrl_in_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .COVERAGE_T(fuse_ctrl_in_transaction_coverage #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_in_agent #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_configuration.svh new file mode 100644 index 000000000..14af02688 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_configuration #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_in_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_in_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_in_configuration #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_CONFIGURATION_STRUCT + fuse_ctrl_in_configuration_s fuse_ctrl_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_in_configuration_struct. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_in_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_in_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", agent_path, interface_name, AlertSyncOn ,RndConstLfrSeed ,RndCnstLfsrPerm ,MemInitFile ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_in_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver.svh new file mode 100644 index 000000000..2817f179d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_driver #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_in_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_in_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .REQ(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .RSP(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_in_driver #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_in_driver_bfm. +`fuse_ctrl_in_INITIATOR_STRUCT + fuse_ctrl_in_initiator_s fuse_ctrl_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_in_driver_bfm. +`fuse_ctrl_in_RESPONDER_STRUCT + fuse_ctrl_in_responder_s fuse_ctrl_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver_bfm.sv new file mode 100644 index 000000000..bab880b49 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver_bfm.sv @@ -0,0 +1,342 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_in signal driving. It is +// accessed by the uvm fuse_ctrl_in driver through a virtual interface +// handle in the fuse_ctrl_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_in_if. +// +// Input signals from the fuse_ctrl_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_pkg_hdl::*; +`include "src/fuse_ctrl_in_macros.svh" + +interface fuse_ctrl_in_driver_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + (fuse_ctrl_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i_i; + reg [$bits(edn_pkg::edn_req_t)-1:0] edn_i_o = 'bz; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_i; + reg [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_o = 'bz; + tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_i; + reg [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_o = 'bz; + tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_i; + reg [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_o = 'bz; + tri scan_en_i_i; + reg scan_en_i_o = 'bz; + tri scan_rst_ni_i; + reg scan_rst_ni_o = 'bz; + tri scanmode_i_i; + reg scanmode_i_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.edn_i = (initiator_responder == INITIATOR) ? edn_i_o : 'bz; + assign edn_i_i = bus.edn_i; + assign bus.alert_rx_i = (initiator_responder == INITIATOR) ? alert_rx_i_o : 'bz; + assign alert_rx_i_i = bus.alert_rx_i; + assign bus.obs_ctrl_i = (initiator_responder == INITIATOR) ? obs_ctrl_i_o : 'bz; + assign obs_ctrl_i_i = bus.obs_ctrl_i; + assign bus.otp_ast_pwr_seq_h_i = (initiator_responder == INITIATOR) ? otp_ast_pwr_seq_h_i_o : 'bz; + assign otp_ast_pwr_seq_h_i_i = bus.otp_ast_pwr_seq_h_i; + assign bus.scan_en_i = (initiator_responder == INITIATOR) ? scan_en_i_o : 'bz; + assign scan_en_i_i = bus.scan_en_i; + assign bus.scan_rst_ni = (initiator_responder == INITIATOR) ? scan_rst_ni_o : 'bz; + assign scan_rst_ni_i = bus.scan_rst_ni; + assign bus.scanmode_i = (initiator_responder == INITIATOR) ? scanmode_i_o : 'bz; + assign scanmode_i_i = bus.scanmode_i; + + // Proxy handle to UVM driver + fuse_ctrl_in_pkg::fuse_ctrl_in_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_in_driver_bfm. + `fuse_ctrl_in_INITIATOR_STRUCT + fuse_ctrl_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_in_driver_bfm. + `fuse_ctrl_in_RESPONDER_STRUCT + fuse_ctrl_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + edn_i_o <= 'bz; + alert_rx_i_o <= 'bz; + obs_ctrl_i_o <= 'bz; + otp_ast_pwr_seq_h_i_o <= 'bz; + otp_ext_voltage_h_io_o <= 'bz; + scan_en_i_o <= 'bz; + scan_rst_ni_o <= 'bz; + scanmode_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_in_configuration_s fuse_ctrl_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_in_initiator_s fuse_ctrl_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_in_responder_s fuse_ctrl_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_in_initiator_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Members within the fuse_ctrl_in_responder_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + initiator_struct = fuse_ctrl_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // edn_i_o <= fuse_ctrl_in_initiator_struct.xyz; // [$bits(edn_pkg::edn_req_t)-1:0] + // alert_rx_i_o <= fuse_ctrl_in_initiator_struct.xyz; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // obs_ctrl_i_o <= fuse_ctrl_in_initiator_struct.xyz; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // otp_ast_pwr_seq_h_i_o <= fuse_ctrl_in_initiator_struct.xyz; // [$bits(otp_ast_req_t)-1:0] + // otp_ext_voltage_h_io_o <= fuse_ctrl_in_initiator_struct.xyz; // + // scan_en_i_o <= fuse_ctrl_in_initiator_struct.xyz; // + // scan_rst_ni_o <= fuse_ctrl_in_initiator_struct.xyz; // + // scanmode_i_o <= fuse_ctrl_in_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_in_initiator_s fuse_ctrl_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_in_responder_s fuse_ctrl_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_in_initiator_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Variables within the fuse_ctrl_in_responder_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_in_responder_struct.xyz = edn_i_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_in_responder_struct.xyz = alert_rx_i_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // fuse_ctrl_in_responder_struct.xyz = obs_ctrl_i_i; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // fuse_ctrl_in_responder_struct.xyz = otp_ast_pwr_seq_h_i_i; // [$bits(otp_ast_req_t)-1:0] + // fuse_ctrl_in_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // fuse_ctrl_in_responder_struct.xyz = scan_en_i_i; // + // fuse_ctrl_in_responder_struct.xyz = scan_rst_ni_i; // + // fuse_ctrl_in_responder_struct.xyz = scanmode_i_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv new file mode 100644 index 000000000..2ddd420c6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_in interface signals. +// It is instantiated once per fuse_ctrl_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_in_bus.edn_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.alert_rx_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.obs_ctrl_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.otp_ast_pwr_seq_h_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.scan_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.scan_rst_ni), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.scanmode_i), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_pkg_hdl::*; + +interface fuse_ctrl_in_if #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i, + inout tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i, + inout tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i, + inout tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i, + inout tri scan_en_i, + inout tri scan_rst_ni, + inout tri scanmode_i + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input edn_i, + input alert_rx_i, + input obs_ctrl_i, + input otp_ast_pwr_seq_h_i, + input scan_en_i, + input scan_rst_ni, + input scanmode_i + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output edn_i, + output alert_rx_i, + output obs_ctrl_i, + output otp_ast_pwr_seq_h_i, + output scan_en_i, + output scan_rst_ni, + output scanmode_i + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input edn_i, + input alert_rx_i, + input obs_ctrl_i, + input otp_ast_pwr_seq_h_i, + input scan_en_i, + input scan_rst_ni, + input scanmode_i + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_macros.svh new file mode 100644 index 000000000..cf85634de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_in_configuration class. +// + `define fuse_ctrl_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_in_configuration_s; + + `define fuse_ctrl_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_configuration_s to_struct();\ + fuse_ctrl_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_in_configuration_s fuse_ctrl_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_in_transaction class. +// + `define fuse_ctrl_in_MONITOR_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_monitor_s; + + `define fuse_ctrl_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_monitor_s to_monitor_struct();\ + fuse_ctrl_in_monitor_struct = \ + { \ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_in_monitor_s fuse_ctrl_in_monitor_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_in_INITIATOR_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_initiator_s; + + `define fuse_ctrl_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_initiator_s to_initiator_struct();\ + fuse_ctrl_in_initiator_struct = \ + {\ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_in_initiator_s fuse_ctrl_in_initiator_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_in_RESPONDER_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_responder_s; + + `define fuse_ctrl_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_responder_s to_responder_struct();\ + fuse_ctrl_in_responder_struct = \ + {\ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_responder_struct);\ + endfunction + + `define fuse_ctrl_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_in_responder_s fuse_ctrl_in_responder_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor.svh new file mode 100644 index 000000000..cf4d9fd27 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_in transactions observed by the +// fuse_ctrl_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_monitor #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_in_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_in_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_in_monitor #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_in_monitor_s fuse_ctrl_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor_bfm.sv new file mode 100644 index 000000000..483519917 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor_bfm.sv @@ -0,0 +1,218 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_in monitor through a virtual +// interface handle in the fuse_ctrl_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_in_if. +// +// Input signals from the fuse_ctrl_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_pkg_hdl::*; +`include "src/fuse_ctrl_in_macros.svh" + + +interface fuse_ctrl_in_monitor_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + ( fuse_ctrl_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_in_MONITOR_STRUCT + fuse_ctrl_in_monitor_s fuse_ctrl_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i_i; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_i; + tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_i; + tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_i; + tri scan_en_i_i; + tri scan_rst_ni_i; + tri scanmode_i_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign edn_i_i = bus.edn_i; + assign alert_rx_i_i = bus.alert_rx_i; + assign obs_ctrl_i_i = bus.obs_ctrl_i; + assign otp_ast_pwr_seq_h_i_i = bus.otp_ast_pwr_seq_h_i; + assign scan_en_i_i = bus.scan_en_i; + assign scan_rst_ni_i = bus.scan_rst_ni; + assign scanmode_i_i = bus.scanmode_i; + + // Proxy handle to UVM monitor + fuse_ctrl_in_pkg::fuse_ctrl_in_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_in_configuration_s fuse_ctrl_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_in_monitor_s fuse_ctrl_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_in_monitor_struct.set_alert_rx_i + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_in_monitor_struct.xyz = edn_i_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_in_monitor_struct.xyz = alert_rx_i_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // fuse_ctrl_in_monitor_struct.xyz = obs_ctrl_i_i; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // fuse_ctrl_in_monitor_struct.xyz = otp_ast_pwr_seq_h_i_i; // [$bits(otp_ast_req_t)-1:0] + // fuse_ctrl_in_monitor_struct.xyz = scan_en_i_i; // + // fuse_ctrl_in_monitor_struct.xyz = scan_rst_ni_i; // + // fuse_ctrl_in_monitor_struct.xyz = scanmode_i_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_random_sequence.svh new file mode 100644 index 000000000..66b5a5d4a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_random_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_in_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_in_random_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_in_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_in_random_sequence::body()-fuse_ctrl_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_in_driver_bfm via the sequencer and fuse_ctrl_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_responder_sequence.svh new file mode 100644 index 000000000..e4e42b6aa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_responder_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_in_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_in_responder_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_in_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_sequence_base.svh new file mode 100644 index 000000000..ce6a3b740 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_sequence_base #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .RSP(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_in_sequence_base #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // variables + typedef fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_in_transaction_req_t; + fuse_ctrl_in_transaction_req_t req; + typedef fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_in_transaction_rsp_t; + fuse_ctrl_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction.svh new file mode 100644 index 000000000..f8a7fc400 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction.svh @@ -0,0 +1,219 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_transaction #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_in_transaction #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_in_monitor and fuse_ctrl_in_monitor_bfm + // This struct is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_MONITOR_STRUCT + fuse_ctrl_in_monitor_s fuse_ctrl_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_in_monitor_struct. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_in_driver_bfm. + // This struct is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_INITIATOR_STRUCT + fuse_ctrl_in_initiator_s fuse_ctrl_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_in_initiator_struct. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_in_driver_bfm. + // This struct is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_RESPONDER_STRUCT + fuse_ctrl_in_responder_s fuse_ctrl_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_in_responder_struct. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("set_alert_rx_i:0x%x ",set_alert_rx_i); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.set_alert_rx_i = RHS.set_alert_rx_i; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,set_alert_rx_i,"set_alert_rx_i"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction_coverage.svh new file mode 100644 index 000000000..5da482565 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction_coverage.svh @@ -0,0 +1,102 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_in transaction information using +// a covergroup named fuse_ctrl_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_transaction_coverage #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_subscriber #(.T(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_in_transaction_coverage #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + set_alert_rx_i: coverpoint coverage_trans.set_alert_rx_i; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/yaml/fuse_ctrl_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/yaml/fuse_ctrl_in_interface.yaml new file mode 100644 index 000000000..333979905 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_in_pkg/yaml/fuse_ctrl_in_interface.yaml @@ -0,0 +1,64 @@ +uvmf: + interfaces: + fuse_ctrl_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AlertSyncOn + type: int + value: '3' + - name: RndConstLfrSeed + type: lfsr_seed_t + value: RndConstLfsrSeedDefault + - name: RndCnstLfsrPerm + type: lsfr_perm_t + value: RndCnstLfsrPermDefault + - name: MemInitFile + type: string + ports: + - dir: output + name: edn_i + reset_value: '''bz' + width: '[''$bits(edn_pkg::edn_req_t)'']' + - dir: output + name: alert_rx_i + reset_value: '''bz' + width: '[''NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)'']' + - dir: output + name: obs_ctrl_i + reset_value: '''bz' + width: '[''$bits(ast_pkg::ast_obs_ctrl_t)'']' + - dir: output + name: otp_ast_pwr_seq_h_i + reset_value: '''bz' + width: '[''$bits(otp_ast_req_t)'']' + - dir: output + name: scan_en_i + reset_value: '''bz' + width: '1' + - dir: output + name: scan_rst_ni + reset_value: '''bz' + width: '1' + - dir: output + name: scanmode_i + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: set_alert_rx_i + type: caliptra_prim_alert_pkg::alert_rx_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.project new file mode 100644 index 000000000..da8a90eb7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_lc_otp_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.svproject new file mode 100644 index 000000000..6dac2c36a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/Makefile new file mode 100644 index 000000000..1ce37d99e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_lc_otp_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_lc_otp_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f + +fuse_ctrl_lc_otp_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f + +fuse_ctrl_lc_otp_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f + +COMP_fuse_ctrl_lc_otp_if_PKG_TGT_0 = q_comp_fuse_ctrl_lc_otp_if_pkg +COMP_fuse_ctrl_lc_otp_if_PKG_TGT_1 = v_comp_fuse_ctrl_lc_otp_if_pkg +COMP_fuse_ctrl_lc_otp_if_PKG_TGT = $(COMP_fuse_ctrl_lc_otp_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_lc_otp_if_pkg: $(COMP_fuse_ctrl_lc_otp_if_PKG_TGT) + +q_comp_fuse_ctrl_lc_otp_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG_XRTL) + +v_comp_fuse_ctrl_lc_otp_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_lc_otp_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_lc_otp_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_lc_otp_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_if_pkg += -I$(fuse_ctrl_lc_otp_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_if_pkg += $(fuse_ctrl_lc_otp_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_lc_otp_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_lc_otp_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_lc_otp_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_lc_otp_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/compile.do new file mode 100644 index 000000000..5f222a54a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_lc_otp_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if.compile new file mode 100644 index 000000000..ecb1301fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_lc_otp_if_hvl.compile + - fuse_ctrl_lc_otp_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_bfm.vinfo new file mode 100644 index 000000000..4007fc103 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_lc_otp_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_lc_otp_if_if.sv +src/fuse_ctrl_lc_otp_if_driver_bfm.sv +src/fuse_ctrl_lc_otp_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_common.compile new file mode 100644 index 000000000..0a9110502 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_lc_otp_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f new file mode 100644 index 000000000..30a25f810 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f new file mode 100644 index 000000000..0807a17da --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f new file mode 100644 index 000000000..e39f0bb0c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hdl.compile new file mode 100644 index 000000000..6d534830c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_lc_otp_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_lc_otp_if_if.sv + - src/fuse_ctrl_lc_otp_if_monitor_bfm.sv + - src/fuse_ctrl_lc_otp_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hvl.compile new file mode 100644 index 000000000..208b3d517 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_lc_otp_if_common.compile +incdir: + - . +src: + - fuse_ctrl_lc_otp_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.sv new file mode 100644 index 000000000..6bf19e8ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_lc_otp_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_lc_otp_if_macros.svh" + + export fuse_ctrl_lc_otp_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_lc_otp_if_typedefs.svh" + `include "src/fuse_ctrl_lc_otp_if_transaction.svh" + + `include "src/fuse_ctrl_lc_otp_if_configuration.svh" + `include "src/fuse_ctrl_lc_otp_if_driver.svh" + `include "src/fuse_ctrl_lc_otp_if_monitor.svh" + + `include "src/fuse_ctrl_lc_otp_if_transaction_coverage.svh" + `include "src/fuse_ctrl_lc_otp_if_sequence_base.svh" + `include "src/fuse_ctrl_lc_otp_if_random_sequence.svh" + + `include "src/fuse_ctrl_lc_otp_if_responder_sequence.svh" + `include "src/fuse_ctrl_lc_otp_if2reg_adapter.svh" + + `include "src/fuse_ctrl_lc_otp_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.vinfo new file mode 100644 index 000000000..f712ae9b4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_lc_otp_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_lc_otp_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.sv new file mode 100644 index 000000000..a4cdc7c70 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_lc_otp_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.vinfo new file mode 100644 index 000000000..a99ea0171 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_lc_otp_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_sve.F new file mode 100644 index 000000000..950466b92 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if2reg_adapter.svh new file mode 100644 index 000000000..e9b1a7897 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_lc_otp_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_lc_otp_if2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_lc_otp_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_lc_otp_if_transaction trans_h = fuse_ctrl_lc_otp_if_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_lc_otp_if_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_lc_otp_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_agent.svh new file mode 100644 index 000000000..bc148927a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_lc_otp_if_configuration ), + .DRIVER_T(fuse_ctrl_lc_otp_if_driver ), + .MONITOR_T(fuse_ctrl_lc_otp_if_monitor ), + .COVERAGE_T(fuse_ctrl_lc_otp_if_transaction_coverage ), + .TRANS_T(fuse_ctrl_lc_otp_if_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_lc_otp_if_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_configuration.svh new file mode 100644 index 000000000..92685e229 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_lc_otp_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_lc_otp_if_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_lc_otp_if_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_lc_otp_if_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_lc_otp_if_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_lc_otp_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_CONFIGURATION_STRUCT + fuse_ctrl_lc_otp_if_configuration_s fuse_ctrl_lc_otp_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_lc_otp_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_if_configuration_struct. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_lc_otp_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_lc_otp_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_lc_otp_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_lc_otp_if_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_lc_otp_if_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_lc_otp_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_lc_otp_if_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver.svh new file mode 100644 index 000000000..d96c73f4f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_lc_otp_if_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_if_driver_bfm ), + .REQ(fuse_ctrl_lc_otp_if_transaction ), + .RSP(fuse_ctrl_lc_otp_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_if_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_lc_otp_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_lc_otp_if_driver_bfm. +`fuse_ctrl_lc_otp_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_if_initiator_s fuse_ctrl_lc_otp_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_lc_otp_if_driver_bfm. +`fuse_ctrl_lc_otp_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_if_responder_s fuse_ctrl_lc_otp_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_lc_otp_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_lc_otp_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_lc_otp_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_lc_otp_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver_bfm.sv new file mode 100644 index 000000000..5675f3b6c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver_bfm.sv @@ -0,0 +1,321 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_lc_otp_if signal driving. It is +// accessed by the uvm fuse_ctrl_lc_otp_if driver through a virtual interface +// handle in the fuse_ctrl_lc_otp_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_lc_otp_if_if. +// +// Input signals from the fuse_ctrl_lc_otp_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_lc_otp_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_if_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_if_macros.svh" + +interface fuse_ctrl_lc_otp_if_driver_bfm + (fuse_ctrl_lc_otp_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_i; + reg [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_o = 'bz; + tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_i; + reg [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.lc_otp_vendor_test_i = (initiator_responder == INITIATOR) ? lc_otp_vendor_test_i_o : 'bz; + assign lc_otp_vendor_test_i_i = bus.lc_otp_vendor_test_i; + assign bus.lc_otp_program_i = (initiator_responder == INITIATOR) ? lc_otp_program_i_o : 'bz; + assign lc_otp_program_i_i = bus.lc_otp_program_i; + assign bus.lc_dft_en_i = (initiator_responder == INITIATOR) ? lc_dft_en_i_o : 'bz; + assign lc_dft_en_i_i = bus.lc_dft_en_i; + assign bus.lc_escalate_en_i = (initiator_responder == INITIATOR) ? lc_escalate_en_i_o : 'bz; + assign lc_escalate_en_i_i = bus.lc_escalate_en_i; + assign bus.lc_check_byp_en_i = (initiator_responder == INITIATOR) ? lc_check_byp_en_i_o : 'bz; + assign lc_check_byp_en_i_i = bus.lc_check_byp_en_i; + + // Proxy handle to UVM driver + fuse_ctrl_lc_otp_if_pkg::fuse_ctrl_lc_otp_if_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_lc_otp_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_lc_otp_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_lc_otp_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_if_driver_bfm. + `fuse_ctrl_lc_otp_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_if_driver_bfm. + `fuse_ctrl_lc_otp_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + lc_otp_vendor_test_i_o <= 'bz; + lc_otp_program_i_o <= 'bz; + lc_dft_en_i_o <= 'bz; + lc_escalate_en_i_o <= 'bz; + lc_check_byp_en_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_lc_otp_if_configuration_s fuse_ctrl_lc_otp_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_lc_otp_if_initiator_s fuse_ctrl_lc_otp_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_lc_otp_if_responder_s fuse_ctrl_lc_otp_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_lc_otp_if_initiator_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Members within the fuse_ctrl_lc_otp_if_responder_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + initiator_struct = fuse_ctrl_lc_otp_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // lc_otp_vendor_test_i_o <= fuse_ctrl_lc_otp_if_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // lc_otp_program_i_o <= fuse_ctrl_lc_otp_if_initiator_struct.xyz; // [$bits(lc_otp_program_req_t)-1:0] + // lc_dft_en_i_o <= fuse_ctrl_lc_otp_if_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // lc_escalate_en_i_o <= fuse_ctrl_lc_otp_if_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // lc_check_byp_en_i_o <= fuse_ctrl_lc_otp_if_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_lc_otp_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_lc_otp_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_lc_otp_if_initiator_s fuse_ctrl_lc_otp_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_lc_otp_if_responder_s fuse_ctrl_lc_otp_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_lc_otp_if_initiator_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Variables within the fuse_ctrl_lc_otp_if_responder_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_lc_otp_if_responder_struct.xyz = lc_otp_vendor_test_i_i; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // fuse_ctrl_lc_otp_if_responder_struct.xyz = lc_otp_program_i_i; // [$bits(lc_otp_program_req_t)-1:0] + // fuse_ctrl_lc_otp_if_responder_struct.xyz = lc_dft_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_if_responder_struct.xyz = lc_escalate_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_if_responder_struct.xyz = lc_check_byp_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_lc_otp_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_lc_otp_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_if.sv new file mode 100644 index 000000000..523ae029b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_if.sv @@ -0,0 +1,98 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_lc_otp_if interface signals. +// It is instantiated once per fuse_ctrl_lc_otp_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_lc_otp_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_lc_otp_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_lc_otp_if_bus.lc_otp_vendor_test_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_if_bus.lc_otp_program_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_if_bus.lc_dft_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_if_bus.lc_escalate_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_if_bus.lc_check_byp_en_i), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_if_pkg_hdl::*; + +interface fuse_ctrl_lc_otp_if_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i, + inout tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_i, + input lc_otp_program_i, + input lc_dft_en_i, + input lc_escalate_en_i, + input lc_check_byp_en_i + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output lc_otp_vendor_test_i, + output lc_otp_program_i, + output lc_dft_en_i, + output lc_escalate_en_i, + output lc_check_byp_en_i + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_i, + input lc_otp_program_i, + input lc_dft_en_i, + input lc_escalate_en_i, + input lc_check_byp_en_i + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_macros.svh new file mode 100644 index 000000000..98f551beb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_macros.svh @@ -0,0 +1,153 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_lc_otp_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_lc_otp_if_configuration class. +// + `define fuse_ctrl_lc_otp_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_lc_otp_if_configuration_s; + + `define fuse_ctrl_lc_otp_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_if_configuration_s to_struct();\ + fuse_ctrl_lc_otp_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_lc_otp_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_lc_otp_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_lc_otp_if_configuration_s fuse_ctrl_lc_otp_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_lc_otp_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_lc_otp_if_transaction class. +// + `define fuse_ctrl_lc_otp_if_MONITOR_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_if_monitor_s; + + `define fuse_ctrl_lc_otp_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_if_monitor_s to_monitor_struct();\ + fuse_ctrl_lc_otp_if_monitor_struct = \ + { \ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_lc_otp_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_lc_otp_if_monitor_s fuse_ctrl_lc_otp_if_monitor_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_lc_otp_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_if_INITIATOR_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_if_initiator_s; + + `define fuse_ctrl_lc_otp_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_if_initiator_s to_initiator_struct();\ + fuse_ctrl_lc_otp_if_initiator_struct = \ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_lc_otp_if_initiator_s fuse_ctrl_lc_otp_if_initiator_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_lc_otp_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_if_RESPONDER_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_if_responder_s; + + `define fuse_ctrl_lc_otp_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_if_responder_s to_responder_struct();\ + fuse_ctrl_lc_otp_if_responder_struct = \ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_if_responder_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_lc_otp_if_responder_s fuse_ctrl_lc_otp_if_responder_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor.svh new file mode 100644 index 000000000..cbf67060e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_lc_otp_if transactions observed by the +// fuse_ctrl_lc_otp_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_lc_otp_if_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_if_monitor_bfm ), + .TRANS_T(fuse_ctrl_lc_otp_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_if_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_lc_otp_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_lc_otp_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_lc_otp_if_monitor_s fuse_ctrl_lc_otp_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_lc_otp_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor_bfm.sv new file mode 100644 index 000000000..8ac6ebeac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor_bfm.sv @@ -0,0 +1,202 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_lc_otp_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_lc_otp_if monitor through a virtual +// interface handle in the fuse_ctrl_lc_otp_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_lc_otp_if_if. +// +// Input signals from the fuse_ctrl_lc_otp_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_lc_otp_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_if_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_if_macros.svh" + + +interface fuse_ctrl_lc_otp_if_monitor_bfm + ( fuse_ctrl_lc_otp_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_lc_otp_if_MONITOR_STRUCT + fuse_ctrl_lc_otp_if_monitor_s fuse_ctrl_lc_otp_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_lc_otp_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_i; + tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign lc_otp_vendor_test_i_i = bus.lc_otp_vendor_test_i; + assign lc_otp_program_i_i = bus.lc_otp_program_i; + assign lc_dft_en_i_i = bus.lc_dft_en_i; + assign lc_escalate_en_i_i = bus.lc_escalate_en_i; + assign lc_check_byp_en_i_i = bus.lc_check_byp_en_i; + + // Proxy handle to UVM monitor + fuse_ctrl_lc_otp_if_pkg::fuse_ctrl_lc_otp_if_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_lc_otp_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_lc_otp_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_lc_otp_if_configuration_s fuse_ctrl_lc_otp_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_lc_otp_if_monitor_s fuse_ctrl_lc_otp_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_lc_otp_if_monitor_struct.lc_dft_en_i + // // fuse_ctrl_lc_otp_if_monitor_struct.lc_escalate_en_i + // // fuse_ctrl_lc_otp_if_monitor_struct.lc_check_byp_en_i + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_lc_otp_if_monitor_struct.xyz = lc_otp_vendor_test_i_i; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // fuse_ctrl_lc_otp_if_monitor_struct.xyz = lc_otp_program_i_i; // [$bits(lc_otp_program_req_t)-1:0] + // fuse_ctrl_lc_otp_if_monitor_struct.xyz = lc_dft_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_if_monitor_struct.xyz = lc_escalate_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_if_monitor_struct.xyz = lc_check_byp_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_random_sequence.svh new file mode 100644 index 000000000..0fce942fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_lc_otp_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_lc_otp_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_random_sequence + extends fuse_ctrl_lc_otp_if_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_if_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_lc_otp_if_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_lc_otp_if_random_sequence::body()-fuse_ctrl_lc_otp_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_lc_otp_if_driver_bfm via the sequencer and fuse_ctrl_lc_otp_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_lc_otp_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_responder_sequence.svh new file mode 100644 index 000000000..8636e02b0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_responder_sequence + extends fuse_ctrl_lc_otp_if_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_if_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_lc_otp_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_lc_otp_if_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_sequence_base.svh new file mode 100644 index 000000000..3be42a152 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_lc_otp_if_transaction ), + .RSP(fuse_ctrl_lc_otp_if_transaction )); + + `uvm_object_utils( fuse_ctrl_lc_otp_if_sequence_base ) + + // variables + typedef fuse_ctrl_lc_otp_if_transaction fuse_ctrl_lc_otp_if_transaction_req_t; + fuse_ctrl_lc_otp_if_transaction_req_t req; + typedef fuse_ctrl_lc_otp_if_transaction fuse_ctrl_lc_otp_if_transaction_rsp_t; + fuse_ctrl_lc_otp_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_lc_otp_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_lc_otp_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction.svh new file mode 100644 index 000000000..695d6b043 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction.svh @@ -0,0 +1,201 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_lc_otp_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_lc_otp_if_transaction ) + + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_lc_otp_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_lc_otp_if_monitor and fuse_ctrl_lc_otp_if_monitor_bfm + // This struct is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_MONITOR_STRUCT + fuse_ctrl_lc_otp_if_monitor_s fuse_ctrl_lc_otp_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_if_monitor_struct. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_if_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_if_initiator_s fuse_ctrl_lc_otp_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_if_initiator_struct. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_if_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_if_responder_s fuse_ctrl_lc_otp_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_if_responder_struct. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("lc_dft_en_i:0x%x lc_escalate_en_i:0x%x lc_check_byp_en_i:0x%x ",lc_dft_en_i,lc_escalate_en_i,lc_check_byp_en_i); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_lc_otp_if_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_lc_otp_if_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.lc_dft_en_i = RHS.lc_dft_en_i; + this.lc_escalate_en_i = RHS.lc_escalate_en_i; + this.lc_check_byp_en_i = RHS.lc_check_byp_en_i; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_lc_otp_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,lc_dft_en_i,"lc_dft_en_i"); + $add_attribute(transaction_view_h,lc_escalate_en_i,"lc_escalate_en_i"); + $add_attribute(transaction_view_h,lc_check_byp_en_i,"lc_check_byp_en_i"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction_coverage.svh new file mode 100644 index 000000000..d0cfad043 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction_coverage.svh @@ -0,0 +1,86 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_lc_otp_if transaction information using +// a covergroup named fuse_ctrl_lc_otp_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_lc_otp_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_if_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_lc_otp_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + lc_dft_en_i: coverpoint coverage_trans.lc_dft_en_i; + lc_escalate_en_i: coverpoint coverage_trans.lc_escalate_en_i; + lc_check_byp_en_i: coverpoint coverage_trans.lc_check_byp_en_i; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_lc_otp_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_lc_otp_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_lc_otp_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/yaml/fuse_ctrl_lc_otp_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/yaml/fuse_ctrl_lc_otp_if_interface.yaml new file mode 100644 index 000000000..d24f3aef1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/yaml/fuse_ctrl_lc_otp_if_interface.yaml @@ -0,0 +1,57 @@ +uvmf: + interfaces: + fuse_ctrl_lc_otp_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: output + name: lc_otp_vendor_test_i + reset_value: '''bz' + width: '[''$bits(lc_otp_vendor_test_req_t)'']' + - dir: output + name: lc_otp_program_i + reset_value: '''bz' + width: '[''$bits(lc_otp_program_req_t)'']' + - dir: output + name: lc_dft_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + - dir: output + name: lc_escalate_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + - dir: output + name: lc_check_byp_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_dft_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_escalate_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_check_byp_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.project new file mode 100644 index 000000000..991dede72 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_lc_otp_in_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.svproject new file mode 100644 index 000000000..77a2ded66 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/Makefile new file mode 100644 index 000000000..1b21f7ed4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_lc_otp_in_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_lc_otp_in_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hvl.f + +fuse_ctrl_lc_otp_in_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hdl.f + +fuse_ctrl_lc_otp_in_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_xrtl.f + +COMP_fuse_ctrl_lc_otp_in_if_PKG_TGT_0 = q_comp_fuse_ctrl_lc_otp_in_if_pkg +COMP_fuse_ctrl_lc_otp_in_if_PKG_TGT_1 = v_comp_fuse_ctrl_lc_otp_in_if_pkg +COMP_fuse_ctrl_lc_otp_in_if_PKG_TGT = $(COMP_fuse_ctrl_lc_otp_in_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_lc_otp_in_if_pkg: $(COMP_fuse_ctrl_lc_otp_in_if_PKG_TGT) + +q_comp_fuse_ctrl_lc_otp_in_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_in_if_PKG_XRTL) + +v_comp_fuse_ctrl_lc_otp_in_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_in_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_lc_otp_in_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_lc_otp_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_in_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_lc_otp_in_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_in_if_pkg += -I$(fuse_ctrl_lc_otp_in_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_in_if_pkg += $(fuse_ctrl_lc_otp_in_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_lc_otp_in_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_lc_otp_in_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_lc_otp_in_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_lc_otp_in_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/compile.do new file mode 100644 index 000000000..0734f2115 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_lc_otp_in_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if.compile new file mode 100644 index 000000000..aa08b9bb4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_lc_otp_in_if_hvl.compile + - fuse_ctrl_lc_otp_in_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_bfm.vinfo new file mode 100644 index 000000000..186ee8240 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_lc_otp_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_lc_otp_in_if_if.sv +src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv +src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_common.compile new file mode 100644 index 000000000..fa80957cc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_lc_otp_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hdl.f new file mode 100644 index 000000000..5c87977b4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hvl.f new file mode 100644 index 000000000..443604421 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_xrtl.f new file mode 100644 index 000000000..2752b1fda --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hdl.compile new file mode 100644 index 000000000..d4b535457 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_lc_otp_in_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_lc_otp_in_if_if.sv + - src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv + - src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hvl.compile new file mode 100644 index 000000000..4dcbd0438 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_lc_otp_in_if_common.compile +incdir: + - . +src: + - fuse_ctrl_lc_otp_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.sv new file mode 100644 index 000000000..222ac1f65 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_in_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_lc_otp_in_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_lc_otp_in_if_macros.svh" + + export fuse_ctrl_lc_otp_in_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_lc_otp_in_if_typedefs.svh" + `include "src/fuse_ctrl_lc_otp_in_if_transaction.svh" + + `include "src/fuse_ctrl_lc_otp_in_if_configuration.svh" + `include "src/fuse_ctrl_lc_otp_in_if_driver.svh" + `include "src/fuse_ctrl_lc_otp_in_if_monitor.svh" + + `include "src/fuse_ctrl_lc_otp_in_if_transaction_coverage.svh" + `include "src/fuse_ctrl_lc_otp_in_if_sequence_base.svh" + `include "src/fuse_ctrl_lc_otp_in_if_random_sequence.svh" + + `include "src/fuse_ctrl_lc_otp_in_if_responder_sequence.svh" + `include "src/fuse_ctrl_lc_otp_in_if2reg_adapter.svh" + + `include "src/fuse_ctrl_lc_otp_in_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.vinfo new file mode 100644 index 000000000..867918714 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_lc_otp_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_lc_otp_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.sv new file mode 100644 index 000000000..53d891062 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_in_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_lc_otp_in_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_lc_otp_in_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.vinfo new file mode 100644 index 000000000..47ec6ae84 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_lc_otp_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_sve.F new file mode 100644 index 000000000..3ae1e74b1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if2reg_adapter.svh new file mode 100644 index 000000000..56a7c8934 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_lc_otp_in_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_lc_otp_in_if2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_lc_otp_in_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_lc_otp_in_if_transaction trans_h = fuse_ctrl_lc_otp_in_if_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_lc_otp_in_if_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_lc_otp_in_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_agent.svh new file mode 100644 index 000000000..4950f6a51 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_lc_otp_in_if_configuration ), + .DRIVER_T(fuse_ctrl_lc_otp_in_if_driver ), + .MONITOR_T(fuse_ctrl_lc_otp_in_if_monitor ), + .COVERAGE_T(fuse_ctrl_lc_otp_in_if_transaction_coverage ), + .TRANS_T(fuse_ctrl_lc_otp_in_if_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_if_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_configuration.svh new file mode 100644 index 000000000..36f931b74 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_lc_otp_in_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_lc_otp_in_if_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_lc_otp_in_if_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_lc_otp_in_if_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_lc_otp_in_if_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_lc_otp_in_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_CONFIGURATION_STRUCT + fuse_ctrl_lc_otp_in_if_configuration_s fuse_ctrl_lc_otp_in_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_lc_otp_in_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_if_configuration_struct. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_lc_otp_in_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_lc_otp_in_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_lc_otp_in_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_lc_otp_in_if_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_lc_otp_in_if_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_lc_otp_in_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_in_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_lc_otp_in_if_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver.svh new file mode 100644 index 000000000..b5699c94f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_lc_otp_in_if_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_in_if_driver_bfm ), + .REQ(fuse_ctrl_lc_otp_in_if_transaction ), + .RSP(fuse_ctrl_lc_otp_in_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_if_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_lc_otp_in_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_lc_otp_in_if_driver and fuse_ctrl_lc_otp_in_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_lc_otp_in_if_driver_bfm. +`fuse_ctrl_lc_otp_in_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_in_if_initiator_s fuse_ctrl_lc_otp_in_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_lc_otp_in_if_driver and fuse_ctrl_lc_otp_in_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_lc_otp_in_if_driver_bfm. +`fuse_ctrl_lc_otp_in_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_in_if_responder_s fuse_ctrl_lc_otp_in_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_lc_otp_in_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_lc_otp_in_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_lc_otp_in_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_lc_otp_in_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv new file mode 100644 index 000000000..5cc5aed55 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv @@ -0,0 +1,321 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_lc_otp_in_if signal driving. It is +// accessed by the uvm fuse_ctrl_lc_otp_in_if driver through a virtual interface +// handle in the fuse_ctrl_lc_otp_in_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_lc_otp_in_if_if. +// +// Input signals from the fuse_ctrl_lc_otp_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_lc_otp_in_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_in_if_macros.svh" + +interface fuse_ctrl_lc_otp_in_if_driver_bfm + (fuse_ctrl_lc_otp_in_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_in_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_i; + reg [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_o = 'bz; + tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_i; + reg [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.lc_otp_vendor_test_i = (initiator_responder == INITIATOR) ? lc_otp_vendor_test_i_o : 'bz; + assign lc_otp_vendor_test_i_i = bus.lc_otp_vendor_test_i; + assign bus.lc_otp_program_i = (initiator_responder == INITIATOR) ? lc_otp_program_i_o : 'bz; + assign lc_otp_program_i_i = bus.lc_otp_program_i; + assign bus.lc_dft_en_i = (initiator_responder == INITIATOR) ? lc_dft_en_i_o : 'bz; + assign lc_dft_en_i_i = bus.lc_dft_en_i; + assign bus.lc_escalate_en_i = (initiator_responder == INITIATOR) ? lc_escalate_en_i_o : 'bz; + assign lc_escalate_en_i_i = bus.lc_escalate_en_i; + assign bus.lc_check_byp_en_i = (initiator_responder == INITIATOR) ? lc_check_byp_en_i_o : 'bz; + assign lc_check_byp_en_i_i = bus.lc_check_byp_en_i; + + // Proxy handle to UVM driver + fuse_ctrl_lc_otp_in_if_pkg::fuse_ctrl_lc_otp_in_if_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_lc_otp_in_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_lc_otp_in_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_lc_otp_in_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_in_if_driver and fuse_ctrl_lc_otp_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_in_if_driver_bfm. + `fuse_ctrl_lc_otp_in_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_in_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_lc_otp_in_if_driver and fuse_ctrl_lc_otp_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_in_if_driver_bfm. + `fuse_ctrl_lc_otp_in_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_in_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + lc_otp_vendor_test_i_o <= 'bz; + lc_otp_program_i_o <= 'bz; + lc_dft_en_i_o <= 'bz; + lc_escalate_en_i_o <= 'bz; + lc_check_byp_en_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_lc_otp_in_if_configuration_s fuse_ctrl_lc_otp_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_lc_otp_in_if_initiator_s fuse_ctrl_lc_otp_in_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_lc_otp_in_if_responder_s fuse_ctrl_lc_otp_in_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_lc_otp_in_if_initiator_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Members within the fuse_ctrl_lc_otp_in_if_responder_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + initiator_struct = fuse_ctrl_lc_otp_in_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // lc_otp_vendor_test_i_o <= fuse_ctrl_lc_otp_in_if_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // lc_otp_program_i_o <= fuse_ctrl_lc_otp_in_if_initiator_struct.xyz; // [$bits(lc_otp_program_req_t)-1:0] + // lc_dft_en_i_o <= fuse_ctrl_lc_otp_in_if_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // lc_escalate_en_i_o <= fuse_ctrl_lc_otp_in_if_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // lc_check_byp_en_i_o <= fuse_ctrl_lc_otp_in_if_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_lc_otp_in_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_lc_otp_in_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_lc_otp_in_if_initiator_s fuse_ctrl_lc_otp_in_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_lc_otp_in_if_responder_s fuse_ctrl_lc_otp_in_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_lc_otp_in_if_initiator_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Variables within the fuse_ctrl_lc_otp_in_if_responder_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_lc_otp_in_if_responder_struct.xyz = lc_otp_vendor_test_i_i; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // fuse_ctrl_lc_otp_in_if_responder_struct.xyz = lc_otp_program_i_i; // [$bits(lc_otp_program_req_t)-1:0] + // fuse_ctrl_lc_otp_in_if_responder_struct.xyz = lc_dft_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_if_responder_struct.xyz = lc_escalate_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_if_responder_struct.xyz = lc_check_byp_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_lc_otp_in_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_lc_otp_in_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_if.sv new file mode 100644 index 000000000..b66aee0c5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_if.sv @@ -0,0 +1,98 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_lc_otp_in_if interface signals. +// It is instantiated once per fuse_ctrl_lc_otp_in_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_lc_otp_in_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_lc_otp_in_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_lc_otp_in_if_bus.lc_otp_vendor_test_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_if_bus.lc_otp_program_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_if_bus.lc_dft_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_if_bus.lc_escalate_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_if_bus.lc_check_byp_en_i), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_in_if_pkg_hdl::*; + +interface fuse_ctrl_lc_otp_in_if_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i, + inout tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_i, + input lc_otp_program_i, + input lc_dft_en_i, + input lc_escalate_en_i, + input lc_check_byp_en_i + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output lc_otp_vendor_test_i, + output lc_otp_program_i, + output lc_dft_en_i, + output lc_escalate_en_i, + output lc_check_byp_en_i + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_i, + input lc_otp_program_i, + input lc_dft_en_i, + input lc_escalate_en_i, + input lc_check_byp_en_i + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_macros.svh new file mode 100644 index 000000000..8a54f0aa1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_macros.svh @@ -0,0 +1,153 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_lc_otp_in_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_lc_otp_in_if_configuration class. +// + `define fuse_ctrl_lc_otp_in_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_lc_otp_in_if_configuration_s; + + `define fuse_ctrl_lc_otp_in_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_if_configuration_s to_struct();\ + fuse_ctrl_lc_otp_in_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_lc_otp_in_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_lc_otp_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_lc_otp_in_if_configuration_s fuse_ctrl_lc_otp_in_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_lc_otp_in_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_lc_otp_in_if_transaction class. +// + `define fuse_ctrl_lc_otp_in_if_MONITOR_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_in_if_monitor_s; + + `define fuse_ctrl_lc_otp_in_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_if_monitor_s to_monitor_struct();\ + fuse_ctrl_lc_otp_in_if_monitor_struct = \ + { \ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_in_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_lc_otp_in_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_lc_otp_in_if_monitor_s fuse_ctrl_lc_otp_in_if_monitor_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_in_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_lc_otp_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_in_if_INITIATOR_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_in_if_initiator_s; + + `define fuse_ctrl_lc_otp_in_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_if_initiator_s to_initiator_struct();\ + fuse_ctrl_lc_otp_in_if_initiator_struct = \ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_in_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_in_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_lc_otp_in_if_initiator_s fuse_ctrl_lc_otp_in_if_initiator_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_in_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_lc_otp_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_in_if_RESPONDER_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_in_if_responder_s; + + `define fuse_ctrl_lc_otp_in_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_if_responder_s to_responder_struct();\ + fuse_ctrl_lc_otp_in_if_responder_struct = \ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_in_if_responder_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_in_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_lc_otp_in_if_responder_s fuse_ctrl_lc_otp_in_if_responder_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_in_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor.svh new file mode 100644 index 000000000..02ed6b9d5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_lc_otp_in_if transactions observed by the +// fuse_ctrl_lc_otp_in_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_lc_otp_in_if_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_in_if_monitor_bfm ), + .TRANS_T(fuse_ctrl_lc_otp_in_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_if_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_lc_otp_in_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_lc_otp_in_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_lc_otp_in_if_monitor_s fuse_ctrl_lc_otp_in_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_lc_otp_in_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv new file mode 100644 index 000000000..cd1494da0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv @@ -0,0 +1,202 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_lc_otp_in_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_lc_otp_in_if monitor through a virtual +// interface handle in the fuse_ctrl_lc_otp_in_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_lc_otp_in_if_if. +// +// Input signals from the fuse_ctrl_lc_otp_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_lc_otp_in_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_in_if_macros.svh" + + +interface fuse_ctrl_lc_otp_in_if_monitor_bfm + ( fuse_ctrl_lc_otp_in_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_in_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_lc_otp_in_if_MONITOR_STRUCT + fuse_ctrl_lc_otp_in_if_monitor_s fuse_ctrl_lc_otp_in_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_lc_otp_in_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_i; + tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign lc_otp_vendor_test_i_i = bus.lc_otp_vendor_test_i; + assign lc_otp_program_i_i = bus.lc_otp_program_i; + assign lc_dft_en_i_i = bus.lc_dft_en_i; + assign lc_escalate_en_i_i = bus.lc_escalate_en_i; + assign lc_check_byp_en_i_i = bus.lc_check_byp_en_i; + + // Proxy handle to UVM monitor + fuse_ctrl_lc_otp_in_if_pkg::fuse_ctrl_lc_otp_in_if_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_lc_otp_in_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_lc_otp_in_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_lc_otp_in_if_configuration_s fuse_ctrl_lc_otp_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_lc_otp_in_if_monitor_s fuse_ctrl_lc_otp_in_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_lc_otp_in_if_monitor_struct.lc_dft_en_i + // // fuse_ctrl_lc_otp_in_if_monitor_struct.lc_escalate_en_i + // // fuse_ctrl_lc_otp_in_if_monitor_struct.lc_check_byp_en_i + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_lc_otp_in_if_monitor_struct.xyz = lc_otp_vendor_test_i_i; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // fuse_ctrl_lc_otp_in_if_monitor_struct.xyz = lc_otp_program_i_i; // [$bits(lc_otp_program_req_t)-1:0] + // fuse_ctrl_lc_otp_in_if_monitor_struct.xyz = lc_dft_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_if_monitor_struct.xyz = lc_escalate_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_if_monitor_struct.xyz = lc_check_byp_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_random_sequence.svh new file mode 100644 index 000000000..d3283cbbd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_lc_otp_in_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_lc_otp_in_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_random_sequence + extends fuse_ctrl_lc_otp_in_if_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_in_if_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_lc_otp_in_if_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_lc_otp_in_if_random_sequence::body()-fuse_ctrl_lc_otp_in_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_lc_otp_in_if_driver_bfm via the sequencer and fuse_ctrl_lc_otp_in_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_lc_otp_in_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_responder_sequence.svh new file mode 100644 index 000000000..4f7b3dcf7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_responder_sequence + extends fuse_ctrl_lc_otp_in_if_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_in_if_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_lc_otp_in_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_lc_otp_in_if_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_sequence_base.svh new file mode 100644 index 000000000..d92d33cf2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_lc_otp_in_if_transaction ), + .RSP(fuse_ctrl_lc_otp_in_if_transaction )); + + `uvm_object_utils( fuse_ctrl_lc_otp_in_if_sequence_base ) + + // variables + typedef fuse_ctrl_lc_otp_in_if_transaction fuse_ctrl_lc_otp_in_if_transaction_req_t; + fuse_ctrl_lc_otp_in_if_transaction_req_t req; + typedef fuse_ctrl_lc_otp_in_if_transaction fuse_ctrl_lc_otp_in_if_transaction_rsp_t; + fuse_ctrl_lc_otp_in_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_lc_otp_in_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_lc_otp_in_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction.svh new file mode 100644 index 000000000..9a35652c3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction.svh @@ -0,0 +1,201 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_lc_otp_in_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_lc_otp_in_if_transaction ) + + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_lc_otp_in_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_lc_otp_in_if_monitor and fuse_ctrl_lc_otp_in_if_monitor_bfm + // This struct is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_MONITOR_STRUCT + fuse_ctrl_lc_otp_in_if_monitor_s fuse_ctrl_lc_otp_in_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_in_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_if_monitor_struct. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_in_if_driver and fuse_ctrl_lc_otp_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_in_if_initiator_s fuse_ctrl_lc_otp_in_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_in_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_if_initiator_struct. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_lc_otp_in_if_driver and fuse_ctrl_lc_otp_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_in_if_responder_s fuse_ctrl_lc_otp_in_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_in_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_if_responder_struct. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("lc_dft_en_i:0x%x lc_escalate_en_i:0x%x lc_check_byp_en_i:0x%x ",lc_dft_en_i,lc_escalate_en_i,lc_check_byp_en_i); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_lc_otp_in_if_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_lc_otp_in_if_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.lc_dft_en_i = RHS.lc_dft_en_i; + this.lc_escalate_en_i = RHS.lc_escalate_en_i; + this.lc_check_byp_en_i = RHS.lc_check_byp_en_i; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_lc_otp_in_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,lc_dft_en_i,"lc_dft_en_i"); + $add_attribute(transaction_view_h,lc_escalate_en_i,"lc_escalate_en_i"); + $add_attribute(transaction_view_h,lc_check_byp_en_i,"lc_check_byp_en_i"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction_coverage.svh new file mode 100644 index 000000000..6c47ed21e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction_coverage.svh @@ -0,0 +1,86 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_lc_otp_in_if transaction information using +// a covergroup named fuse_ctrl_lc_otp_in_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_lc_otp_in_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_if_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_lc_otp_in_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + lc_dft_en_i: coverpoint coverage_trans.lc_dft_en_i; + lc_escalate_en_i: coverpoint coverage_trans.lc_escalate_en_i; + lc_check_byp_en_i: coverpoint coverage_trans.lc_check_byp_en_i; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_lc_otp_in_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_lc_otp_in_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_in_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_lc_otp_in_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/yaml/fuse_ctrl_lc_otp_in_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/yaml/fuse_ctrl_lc_otp_in_if_interface.yaml new file mode 100644 index 000000000..c47ea5a7d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/yaml/fuse_ctrl_lc_otp_in_if_interface.yaml @@ -0,0 +1,57 @@ +uvmf: + interfaces: + fuse_ctrl_lc_otp_in_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: output + name: lc_otp_vendor_test_i + reset_value: '''bz' + width: '[''$bits(lc_otp_vendor_test_req_t)'']' + - dir: output + name: lc_otp_program_i + reset_value: '''bz' + width: '[''$bits(lc_otp_program_req_t)'']' + - dir: output + name: lc_dft_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + - dir: output + name: lc_escalate_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + - dir: output + name: lc_check_byp_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_dft_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_escalate_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_check_byp_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.project new file mode 100644 index 000000000..bc9bb7a1d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_lc_otp_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.svproject new file mode 100644 index 000000000..e267e6c41 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/Makefile new file mode 100644 index 000000000..48df82f15 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_lc_otp_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_lc_otp_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hvl.f + +fuse_ctrl_lc_otp_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hdl.f + +fuse_ctrl_lc_otp_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_xrtl.f + +COMP_fuse_ctrl_lc_otp_in_PKG_TGT_0 = q_comp_fuse_ctrl_lc_otp_in_pkg +COMP_fuse_ctrl_lc_otp_in_PKG_TGT_1 = v_comp_fuse_ctrl_lc_otp_in_pkg +COMP_fuse_ctrl_lc_otp_in_PKG_TGT = $(COMP_fuse_ctrl_lc_otp_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_lc_otp_in_pkg: $(COMP_fuse_ctrl_lc_otp_in_PKG_TGT) + +q_comp_fuse_ctrl_lc_otp_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_in_PKG_XRTL) + +v_comp_fuse_ctrl_lc_otp_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_lc_otp_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_lc_otp_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_lc_otp_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_in_pkg += -I$(fuse_ctrl_lc_otp_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_in_pkg += $(fuse_ctrl_lc_otp_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_lc_otp_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_lc_otp_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_lc_otp_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_lc_otp_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/compile.do new file mode 100644 index 000000000..2334cca94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_lc_otp_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in.compile new file mode 100644 index 000000000..934282f83 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_lc_otp_in_hvl.compile + - fuse_ctrl_lc_otp_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_bfm.vinfo new file mode 100644 index 000000000..35c34c5f1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_lc_otp_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_lc_otp_in_if.sv +src/fuse_ctrl_lc_otp_in_driver_bfm.sv +src/fuse_ctrl_lc_otp_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_common.compile new file mode 100644 index 000000000..5683974c1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_lc_otp_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hdl.f new file mode 100644 index 000000000..fd87f109b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hvl.f new file mode 100644 index 000000000..ea2637ffb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_xrtl.f new file mode 100644 index 000000000..736ca19e3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hdl.compile new file mode 100644 index 000000000..9def84f00 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_lc_otp_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_lc_otp_in_if.sv + - src/fuse_ctrl_lc_otp_in_monitor_bfm.sv + - src/fuse_ctrl_lc_otp_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hvl.compile new file mode 100644 index 000000000..03742057a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_lc_otp_in_common.compile +incdir: + - . +src: + - fuse_ctrl_lc_otp_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.sv new file mode 100644 index 000000000..707771742 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_lc_otp_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_lc_otp_in_macros.svh" + + export fuse_ctrl_lc_otp_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_lc_otp_in_typedefs.svh" + `include "src/fuse_ctrl_lc_otp_in_transaction.svh" + + `include "src/fuse_ctrl_lc_otp_in_configuration.svh" + `include "src/fuse_ctrl_lc_otp_in_driver.svh" + `include "src/fuse_ctrl_lc_otp_in_monitor.svh" + + `include "src/fuse_ctrl_lc_otp_in_transaction_coverage.svh" + `include "src/fuse_ctrl_lc_otp_in_sequence_base.svh" + `include "src/fuse_ctrl_lc_otp_in_random_sequence.svh" + + `include "src/fuse_ctrl_lc_otp_in_responder_sequence.svh" + `include "src/fuse_ctrl_lc_otp_in2reg_adapter.svh" + + `include "src/fuse_ctrl_lc_otp_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.vinfo new file mode 100644 index 000000000..a51e3e02c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_lc_otp_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_lc_otp_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.sv new file mode 100644 index 000000000..e1761c3ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_lc_otp_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_lc_otp_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.vinfo new file mode 100644 index 000000000..536dd9eed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_lc_otp_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_sve.F new file mode 100644 index 000000000..1f476e946 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in2reg_adapter.svh new file mode 100644 index 000000000..b1d2bb59c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_lc_otp_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_lc_otp_in2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_lc_otp_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_lc_otp_in_transaction trans_h = fuse_ctrl_lc_otp_in_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_lc_otp_in_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_lc_otp_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_agent.svh new file mode 100644 index 000000000..1bcc44562 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_lc_otp_in_configuration ), + .DRIVER_T(fuse_ctrl_lc_otp_in_driver ), + .MONITOR_T(fuse_ctrl_lc_otp_in_monitor ), + .COVERAGE_T(fuse_ctrl_lc_otp_in_transaction_coverage ), + .TRANS_T(fuse_ctrl_lc_otp_in_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_configuration.svh new file mode 100644 index 000000000..3d01dbb4f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_lc_otp_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_lc_otp_in_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_lc_otp_in_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_lc_otp_in_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_lc_otp_in_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_lc_otp_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_CONFIGURATION_STRUCT + fuse_ctrl_lc_otp_in_configuration_s fuse_ctrl_lc_otp_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_lc_otp_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_configuration_struct. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_lc_otp_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_lc_otp_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_lc_otp_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_lc_otp_in_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_lc_otp_in_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_lc_otp_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_lc_otp_in_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver.svh new file mode 100644 index 000000000..fc0a2193e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_lc_otp_in_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_in_driver_bfm ), + .REQ(fuse_ctrl_lc_otp_in_transaction ), + .RSP(fuse_ctrl_lc_otp_in_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_lc_otp_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_lc_otp_in_driver and fuse_ctrl_lc_otp_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_lc_otp_in_driver_bfm. +`fuse_ctrl_lc_otp_in_INITIATOR_STRUCT + fuse_ctrl_lc_otp_in_initiator_s fuse_ctrl_lc_otp_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_lc_otp_in_driver and fuse_ctrl_lc_otp_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_lc_otp_in_driver_bfm. +`fuse_ctrl_lc_otp_in_RESPONDER_STRUCT + fuse_ctrl_lc_otp_in_responder_s fuse_ctrl_lc_otp_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_lc_otp_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_lc_otp_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_lc_otp_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_lc_otp_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver_bfm.sv new file mode 100644 index 000000000..15738caa7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver_bfm.sv @@ -0,0 +1,321 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_lc_otp_in signal driving. It is +// accessed by the uvm fuse_ctrl_lc_otp_in driver through a virtual interface +// handle in the fuse_ctrl_lc_otp_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_lc_otp_in_if. +// +// Input signals from the fuse_ctrl_lc_otp_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_lc_otp_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_in_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_in_macros.svh" + +interface fuse_ctrl_lc_otp_in_driver_bfm + (fuse_ctrl_lc_otp_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_i; + reg [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_o = 'bz; + tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_i; + reg [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.lc_otp_vendor_test_i = (initiator_responder == INITIATOR) ? lc_otp_vendor_test_i_o : 'bz; + assign lc_otp_vendor_test_i_i = bus.lc_otp_vendor_test_i; + assign bus.lc_otp_program_i = (initiator_responder == INITIATOR) ? lc_otp_program_i_o : 'bz; + assign lc_otp_program_i_i = bus.lc_otp_program_i; + assign bus.lc_dft_en_i = (initiator_responder == INITIATOR) ? lc_dft_en_i_o : 'bz; + assign lc_dft_en_i_i = bus.lc_dft_en_i; + assign bus.lc_escalate_en_i = (initiator_responder == INITIATOR) ? lc_escalate_en_i_o : 'bz; + assign lc_escalate_en_i_i = bus.lc_escalate_en_i; + assign bus.lc_check_byp_en_i = (initiator_responder == INITIATOR) ? lc_check_byp_en_i_o : 'bz; + assign lc_check_byp_en_i_i = bus.lc_check_byp_en_i; + + // Proxy handle to UVM driver + fuse_ctrl_lc_otp_in_pkg::fuse_ctrl_lc_otp_in_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_lc_otp_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_lc_otp_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_lc_otp_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_in_driver and fuse_ctrl_lc_otp_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_in_driver_bfm. + `fuse_ctrl_lc_otp_in_INITIATOR_STRUCT + fuse_ctrl_lc_otp_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_lc_otp_in_driver and fuse_ctrl_lc_otp_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_in_driver_bfm. + `fuse_ctrl_lc_otp_in_RESPONDER_STRUCT + fuse_ctrl_lc_otp_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + lc_otp_vendor_test_i_o <= 'bz; + lc_otp_program_i_o <= 'bz; + lc_dft_en_i_o <= 'bz; + lc_escalate_en_i_o <= 'bz; + lc_check_byp_en_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_lc_otp_in_configuration_s fuse_ctrl_lc_otp_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_lc_otp_in_initiator_s fuse_ctrl_lc_otp_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_lc_otp_in_responder_s fuse_ctrl_lc_otp_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_lc_otp_in_initiator_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Members within the fuse_ctrl_lc_otp_in_responder_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + initiator_struct = fuse_ctrl_lc_otp_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // lc_otp_vendor_test_i_o <= fuse_ctrl_lc_otp_in_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // lc_otp_program_i_o <= fuse_ctrl_lc_otp_in_initiator_struct.xyz; // [$bits(lc_otp_program_req_t)-1:0] + // lc_dft_en_i_o <= fuse_ctrl_lc_otp_in_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // lc_escalate_en_i_o <= fuse_ctrl_lc_otp_in_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // lc_check_byp_en_i_o <= fuse_ctrl_lc_otp_in_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_lc_otp_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_lc_otp_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_lc_otp_in_initiator_s fuse_ctrl_lc_otp_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_lc_otp_in_responder_s fuse_ctrl_lc_otp_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_lc_otp_in_initiator_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Variables within the fuse_ctrl_lc_otp_in_responder_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_lc_otp_in_responder_struct.xyz = lc_otp_vendor_test_i_i; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // fuse_ctrl_lc_otp_in_responder_struct.xyz = lc_otp_program_i_i; // [$bits(lc_otp_program_req_t)-1:0] + // fuse_ctrl_lc_otp_in_responder_struct.xyz = lc_dft_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_responder_struct.xyz = lc_escalate_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_responder_struct.xyz = lc_check_byp_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_lc_otp_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_lc_otp_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_if.sv new file mode 100644 index 000000000..68a0925a0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_if.sv @@ -0,0 +1,98 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_lc_otp_in interface signals. +// It is instantiated once per fuse_ctrl_lc_otp_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_lc_otp_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_lc_otp_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_lc_otp_in_bus.lc_otp_vendor_test_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_bus.lc_otp_program_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_bus.lc_dft_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_bus.lc_escalate_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_bus.lc_check_byp_en_i), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_in_pkg_hdl::*; + +interface fuse_ctrl_lc_otp_in_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i, + inout tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_i, + input lc_otp_program_i, + input lc_dft_en_i, + input lc_escalate_en_i, + input lc_check_byp_en_i + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output lc_otp_vendor_test_i, + output lc_otp_program_i, + output lc_dft_en_i, + output lc_escalate_en_i, + output lc_check_byp_en_i + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_i, + input lc_otp_program_i, + input lc_dft_en_i, + input lc_escalate_en_i, + input lc_check_byp_en_i + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_macros.svh new file mode 100644 index 000000000..9ad130b28 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_macros.svh @@ -0,0 +1,153 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_lc_otp_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_lc_otp_in_configuration class. +// + `define fuse_ctrl_lc_otp_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_lc_otp_in_configuration_s; + + `define fuse_ctrl_lc_otp_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_configuration_s to_struct();\ + fuse_ctrl_lc_otp_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_lc_otp_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_lc_otp_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_lc_otp_in_configuration_s fuse_ctrl_lc_otp_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_lc_otp_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_lc_otp_in_transaction class. +// + `define fuse_ctrl_lc_otp_in_MONITOR_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_in_monitor_s; + + `define fuse_ctrl_lc_otp_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_monitor_s to_monitor_struct();\ + fuse_ctrl_lc_otp_in_monitor_struct = \ + { \ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_lc_otp_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_lc_otp_in_monitor_s fuse_ctrl_lc_otp_in_monitor_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_lc_otp_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_in_INITIATOR_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_in_initiator_s; + + `define fuse_ctrl_lc_otp_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_initiator_s to_initiator_struct();\ + fuse_ctrl_lc_otp_in_initiator_struct = \ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_lc_otp_in_initiator_s fuse_ctrl_lc_otp_in_initiator_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_lc_otp_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_in_RESPONDER_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_in_responder_s; + + `define fuse_ctrl_lc_otp_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_responder_s to_responder_struct();\ + fuse_ctrl_lc_otp_in_responder_struct = \ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_in_responder_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_lc_otp_in_responder_s fuse_ctrl_lc_otp_in_responder_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor.svh new file mode 100644 index 000000000..f046d7ea3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_lc_otp_in transactions observed by the +// fuse_ctrl_lc_otp_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_lc_otp_in_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_in_monitor_bfm ), + .TRANS_T(fuse_ctrl_lc_otp_in_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_lc_otp_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_lc_otp_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_lc_otp_in_monitor_s fuse_ctrl_lc_otp_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_lc_otp_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor_bfm.sv new file mode 100644 index 000000000..783657acb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor_bfm.sv @@ -0,0 +1,202 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_lc_otp_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_lc_otp_in monitor through a virtual +// interface handle in the fuse_ctrl_lc_otp_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_lc_otp_in_if. +// +// Input signals from the fuse_ctrl_lc_otp_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_lc_otp_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_in_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_in_macros.svh" + + +interface fuse_ctrl_lc_otp_in_monitor_bfm + ( fuse_ctrl_lc_otp_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_lc_otp_in_MONITOR_STRUCT + fuse_ctrl_lc_otp_in_monitor_s fuse_ctrl_lc_otp_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_lc_otp_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_i; + tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign lc_otp_vendor_test_i_i = bus.lc_otp_vendor_test_i; + assign lc_otp_program_i_i = bus.lc_otp_program_i; + assign lc_dft_en_i_i = bus.lc_dft_en_i; + assign lc_escalate_en_i_i = bus.lc_escalate_en_i; + assign lc_check_byp_en_i_i = bus.lc_check_byp_en_i; + + // Proxy handle to UVM monitor + fuse_ctrl_lc_otp_in_pkg::fuse_ctrl_lc_otp_in_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_lc_otp_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_lc_otp_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_lc_otp_in_configuration_s fuse_ctrl_lc_otp_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_lc_otp_in_monitor_s fuse_ctrl_lc_otp_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_lc_otp_in_monitor_struct.lc_dft_en_i + // // fuse_ctrl_lc_otp_in_monitor_struct.lc_escalate_en_i + // // fuse_ctrl_lc_otp_in_monitor_struct.lc_check_byp_en_i + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_lc_otp_in_monitor_struct.xyz = lc_otp_vendor_test_i_i; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // fuse_ctrl_lc_otp_in_monitor_struct.xyz = lc_otp_program_i_i; // [$bits(lc_otp_program_req_t)-1:0] + // fuse_ctrl_lc_otp_in_monitor_struct.xyz = lc_dft_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_monitor_struct.xyz = lc_escalate_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_monitor_struct.xyz = lc_check_byp_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_random_sequence.svh new file mode 100644 index 000000000..477393c3e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_lc_otp_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_lc_otp_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_random_sequence + extends fuse_ctrl_lc_otp_in_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_in_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_lc_otp_in_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_lc_otp_in_random_sequence::body()-fuse_ctrl_lc_otp_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_lc_otp_in_driver_bfm via the sequencer and fuse_ctrl_lc_otp_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_lc_otp_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_responder_sequence.svh new file mode 100644 index 000000000..e41496803 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_responder_sequence + extends fuse_ctrl_lc_otp_in_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_in_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_lc_otp_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_lc_otp_in_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_sequence_base.svh new file mode 100644 index 000000000..83a122cb0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_lc_otp_in_transaction ), + .RSP(fuse_ctrl_lc_otp_in_transaction )); + + `uvm_object_utils( fuse_ctrl_lc_otp_in_sequence_base ) + + // variables + typedef fuse_ctrl_lc_otp_in_transaction fuse_ctrl_lc_otp_in_transaction_req_t; + fuse_ctrl_lc_otp_in_transaction_req_t req; + typedef fuse_ctrl_lc_otp_in_transaction fuse_ctrl_lc_otp_in_transaction_rsp_t; + fuse_ctrl_lc_otp_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_lc_otp_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_lc_otp_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction.svh new file mode 100644 index 000000000..187b6480c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction.svh @@ -0,0 +1,201 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_lc_otp_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_lc_otp_in_transaction ) + + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_lc_otp_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_lc_otp_in_monitor and fuse_ctrl_lc_otp_in_monitor_bfm + // This struct is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_MONITOR_STRUCT + fuse_ctrl_lc_otp_in_monitor_s fuse_ctrl_lc_otp_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_monitor_struct. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_in_driver and fuse_ctrl_lc_otp_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_in_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_INITIATOR_STRUCT + fuse_ctrl_lc_otp_in_initiator_s fuse_ctrl_lc_otp_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_initiator_struct. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_lc_otp_in_driver and fuse_ctrl_lc_otp_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_in_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_RESPONDER_STRUCT + fuse_ctrl_lc_otp_in_responder_s fuse_ctrl_lc_otp_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_responder_struct. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("lc_dft_en_i:0x%x lc_escalate_en_i:0x%x lc_check_byp_en_i:0x%x ",lc_dft_en_i,lc_escalate_en_i,lc_check_byp_en_i); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_lc_otp_in_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_lc_otp_in_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.lc_dft_en_i = RHS.lc_dft_en_i; + this.lc_escalate_en_i = RHS.lc_escalate_en_i; + this.lc_check_byp_en_i = RHS.lc_check_byp_en_i; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_lc_otp_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,lc_dft_en_i,"lc_dft_en_i"); + $add_attribute(transaction_view_h,lc_escalate_en_i,"lc_escalate_en_i"); + $add_attribute(transaction_view_h,lc_check_byp_en_i,"lc_check_byp_en_i"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction_coverage.svh new file mode 100644 index 000000000..e5fa783de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction_coverage.svh @@ -0,0 +1,86 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_lc_otp_in transaction information using +// a covergroup named fuse_ctrl_lc_otp_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_lc_otp_in_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_lc_otp_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + lc_dft_en_i: coverpoint coverage_trans.lc_dft_en_i; + lc_escalate_en_i: coverpoint coverage_trans.lc_escalate_en_i; + lc_check_byp_en_i: coverpoint coverage_trans.lc_check_byp_en_i; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_lc_otp_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_lc_otp_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_lc_otp_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/yaml/fuse_ctrl_lc_otp_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/yaml/fuse_ctrl_lc_otp_in_interface.yaml new file mode 100644 index 000000000..a7f2b381a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/yaml/fuse_ctrl_lc_otp_in_interface.yaml @@ -0,0 +1,57 @@ +uvmf: + interfaces: + fuse_ctrl_lc_otp_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: output + name: lc_otp_vendor_test_i + reset_value: '''bz' + width: '[''$bits(lc_otp_vendor_test_req_t)'']' + - dir: output + name: lc_otp_program_i + reset_value: '''bz' + width: '[''$bits(lc_otp_program_req_t)'']' + - dir: output + name: lc_dft_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + - dir: output + name: lc_escalate_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + - dir: output + name: lc_check_byp_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_dft_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_escalate_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_check_byp_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.project new file mode 100644 index 000000000..95dcde6a7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_lc_otp_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.svproject new file mode 100644 index 000000000..50f9edd81 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/Makefile new file mode 100644 index 000000000..7b42b541d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_lc_otp_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_lc_otp_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hvl.f + +fuse_ctrl_lc_otp_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hdl.f + +fuse_ctrl_lc_otp_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_xrtl.f + +COMP_fuse_ctrl_lc_otp_out_if_PKG_TGT_0 = q_comp_fuse_ctrl_lc_otp_out_if_pkg +COMP_fuse_ctrl_lc_otp_out_if_PKG_TGT_1 = v_comp_fuse_ctrl_lc_otp_out_if_pkg +COMP_fuse_ctrl_lc_otp_out_if_PKG_TGT = $(COMP_fuse_ctrl_lc_otp_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_lc_otp_out_if_pkg: $(COMP_fuse_ctrl_lc_otp_out_if_PKG_TGT) + +q_comp_fuse_ctrl_lc_otp_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_out_if_PKG_XRTL) + +v_comp_fuse_ctrl_lc_otp_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_lc_otp_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_lc_otp_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_lc_otp_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_out_if_pkg += -I$(fuse_ctrl_lc_otp_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_out_if_pkg += $(fuse_ctrl_lc_otp_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_lc_otp_out_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_lc_otp_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_lc_otp_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_lc_otp_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/compile.do new file mode 100644 index 000000000..af1e34f37 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_lc_otp_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if.compile new file mode 100644 index 000000000..ec237f3ce --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_lc_otp_out_if_hvl.compile + - fuse_ctrl_lc_otp_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_bfm.vinfo new file mode 100644 index 000000000..2a91b10ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_lc_otp_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_lc_otp_out_if_if.sv +src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv +src/fuse_ctrl_lc_otp_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_common.compile new file mode 100644 index 000000000..cd97600ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_lc_otp_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hdl.f new file mode 100644 index 000000000..ee3a8c8a4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hvl.f new file mode 100644 index 000000000..2713f8a05 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_xrtl.f new file mode 100644 index 000000000..6d99f13fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hdl.compile new file mode 100644 index 000000000..30bf39951 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_lc_otp_out_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_lc_otp_out_if_if.sv + - src/fuse_ctrl_lc_otp_out_if_monitor_bfm.sv + - src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hvl.compile new file mode 100644 index 000000000..01d7bd750 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_lc_otp_out_if_common.compile +incdir: + - . +src: + - fuse_ctrl_lc_otp_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.sv new file mode 100644 index 000000000..4605a92a3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_lc_otp_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_lc_otp_out_if_macros.svh" + + export fuse_ctrl_lc_otp_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_lc_otp_out_if_typedefs.svh" + `include "src/fuse_ctrl_lc_otp_out_if_transaction.svh" + + `include "src/fuse_ctrl_lc_otp_out_if_configuration.svh" + `include "src/fuse_ctrl_lc_otp_out_if_driver.svh" + `include "src/fuse_ctrl_lc_otp_out_if_monitor.svh" + + `include "src/fuse_ctrl_lc_otp_out_if_transaction_coverage.svh" + `include "src/fuse_ctrl_lc_otp_out_if_sequence_base.svh" + `include "src/fuse_ctrl_lc_otp_out_if_random_sequence.svh" + + `include "src/fuse_ctrl_lc_otp_out_if_responder_sequence.svh" + `include "src/fuse_ctrl_lc_otp_out_if2reg_adapter.svh" + + `include "src/fuse_ctrl_lc_otp_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.vinfo new file mode 100644 index 000000000..7657b3597 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_lc_otp_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_lc_otp_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.sv new file mode 100644 index 000000000..99c7cc9fa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_lc_otp_out_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_lc_otp_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..8fd4be1a1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_lc_otp_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_sve.F new file mode 100644 index 000000000..42c8070f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if2reg_adapter.svh new file mode 100644 index 000000000..be38d67f8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_lc_otp_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_lc_otp_out_if2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_lc_otp_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_lc_otp_out_if_transaction trans_h = fuse_ctrl_lc_otp_out_if_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_lc_otp_out_if_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_lc_otp_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_agent.svh new file mode 100644 index 000000000..8d10fabf2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_lc_otp_out_if_configuration ), + .DRIVER_T(fuse_ctrl_lc_otp_out_if_driver ), + .MONITOR_T(fuse_ctrl_lc_otp_out_if_monitor ), + .COVERAGE_T(fuse_ctrl_lc_otp_out_if_transaction_coverage ), + .TRANS_T(fuse_ctrl_lc_otp_out_if_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_if_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_configuration.svh new file mode 100644 index 000000000..a8b19a603 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_lc_otp_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_lc_otp_out_if_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_lc_otp_out_if_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_lc_otp_out_if_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_lc_otp_out_if_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_lc_otp_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_CONFIGURATION_STRUCT + fuse_ctrl_lc_otp_out_if_configuration_s fuse_ctrl_lc_otp_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_lc_otp_out_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_if_configuration_struct. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_lc_otp_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_lc_otp_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_lc_otp_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_lc_otp_out_if_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_lc_otp_out_if_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_lc_otp_out_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_lc_otp_out_if_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver.svh new file mode 100644 index 000000000..78fcd4d6f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_lc_otp_out_if_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_out_if_driver_bfm ), + .REQ(fuse_ctrl_lc_otp_out_if_transaction ), + .RSP(fuse_ctrl_lc_otp_out_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_if_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_lc_otp_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_lc_otp_out_if_driver and fuse_ctrl_lc_otp_out_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_lc_otp_out_if_driver_bfm. +`fuse_ctrl_lc_otp_out_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_out_if_initiator_s fuse_ctrl_lc_otp_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_lc_otp_out_if_driver and fuse_ctrl_lc_otp_out_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_lc_otp_out_if_driver_bfm. +`fuse_ctrl_lc_otp_out_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_out_if_responder_s fuse_ctrl_lc_otp_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_lc_otp_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_lc_otp_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_lc_otp_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_lc_otp_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv new file mode 100644 index 000000000..b903dfe7f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv @@ -0,0 +1,299 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_lc_otp_out_if signal driving. It is +// accessed by the uvm fuse_ctrl_lc_otp_out_if driver through a virtual interface +// handle in the fuse_ctrl_lc_otp_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_lc_otp_out_if_if. +// +// Input signals from the fuse_ctrl_lc_otp_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_lc_otp_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_out_if_macros.svh" + +interface fuse_ctrl_lc_otp_out_if_driver_bfm + (fuse_ctrl_lc_otp_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_i; + reg [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_o = 'bz; + tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_i; + reg [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_o = 'bz; + tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_i; + reg [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign lc_otp_vendor_test_o_i = bus.lc_otp_vendor_test_o; + assign bus.lc_otp_vendor_test_o = (initiator_responder == RESPONDER) ? lc_otp_vendor_test_o_o : 'bz; + assign lc_otp_program_o_i = bus.lc_otp_program_o; + assign bus.lc_otp_program_o = (initiator_responder == RESPONDER) ? lc_otp_program_o_o : 'bz; + assign otp_lc_data_o_i = bus.otp_lc_data_o; + assign bus.otp_lc_data_o = (initiator_responder == RESPONDER) ? otp_lc_data_o_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_lc_otp_out_if_pkg::fuse_ctrl_lc_otp_out_if_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_lc_otp_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_lc_otp_out_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_lc_otp_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_out_if_driver and fuse_ctrl_lc_otp_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_out_if_driver_bfm. + `fuse_ctrl_lc_otp_out_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_lc_otp_out_if_driver and fuse_ctrl_lc_otp_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_out_if_driver_bfm. + `fuse_ctrl_lc_otp_out_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + lc_otp_vendor_test_o_o <= 'bz; + lc_otp_program_o_o <= 'bz; + otp_lc_data_o_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_lc_otp_out_if_configuration_s fuse_ctrl_lc_otp_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_lc_otp_out_if_initiator_s fuse_ctrl_lc_otp_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_lc_otp_out_if_responder_s fuse_ctrl_lc_otp_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_lc_otp_out_if_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // Members within the fuse_ctrl_lc_otp_out_if_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + initiator_struct = fuse_ctrl_lc_otp_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_lc_otp_out_if_responder_struct.xyz = lc_otp_vendor_test_o_i; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_if_responder_struct.xyz = lc_otp_program_o_i; // [$bits(lc_otp_program_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_if_responder_struct.xyz = otp_lc_data_o_i; // [$bits(otp_lc_data_t)-1:0] + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_lc_otp_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_lc_otp_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_lc_otp_out_if_initiator_s fuse_ctrl_lc_otp_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_lc_otp_out_if_responder_s fuse_ctrl_lc_otp_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_lc_otp_out_if_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // Variables within the fuse_ctrl_lc_otp_out_if_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // lc_otp_vendor_test_o_o <= fuse_ctrl_lc_otp_out_if_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // lc_otp_program_o_o <= fuse_ctrl_lc_otp_out_if_initiator_struct.xyz; // [$bits(lc_otp_program_rsp_t)-1:0] + // otp_lc_data_o_o <= fuse_ctrl_lc_otp_out_if_initiator_struct.xyz; // [$bits(otp_lc_data_t)-1:0] + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_lc_otp_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_lc_otp_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_if.sv new file mode 100644 index 000000000..839416f4d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_if.sv @@ -0,0 +1,88 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_lc_otp_out_if interface signals. +// It is instantiated once per fuse_ctrl_lc_otp_out_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_lc_otp_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_lc_otp_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_lc_otp_out_if_bus.lc_otp_vendor_test_o), // Agent input +// .dut_signal_port(fuse_ctrl_lc_otp_out_if_bus.lc_otp_program_o), // Agent input +// .dut_signal_port(fuse_ctrl_lc_otp_out_if_bus.otp_lc_data_o), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_out_if_pkg_hdl::*; + +interface fuse_ctrl_lc_otp_out_if_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o, + inout tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o, + inout tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_o, + input lc_otp_program_o, + input otp_lc_data_o + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_o, + input lc_otp_program_o, + input otp_lc_data_o + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output lc_otp_vendor_test_o, + output lc_otp_program_o, + output otp_lc_data_o + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_macros.svh new file mode 100644 index 000000000..ea991a89b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_lc_otp_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_lc_otp_out_if_configuration class. +// + `define fuse_ctrl_lc_otp_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_lc_otp_out_if_configuration_s; + + `define fuse_ctrl_lc_otp_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_if_configuration_s to_struct();\ + fuse_ctrl_lc_otp_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_lc_otp_out_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_lc_otp_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_lc_otp_out_if_configuration_s fuse_ctrl_lc_otp_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_lc_otp_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_lc_otp_out_if_transaction class. +// + `define fuse_ctrl_lc_otp_out_if_MONITOR_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + } fuse_ctrl_lc_otp_out_if_monitor_s; + + `define fuse_ctrl_lc_otp_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_if_monitor_s to_monitor_struct();\ + fuse_ctrl_lc_otp_out_if_monitor_struct = \ + { \ + this.otp_lc_data_o \ + };\ + return ( fuse_ctrl_lc_otp_out_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_lc_otp_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_lc_otp_out_if_monitor_s fuse_ctrl_lc_otp_out_if_monitor_struct);\ + {\ + this.otp_lc_data_o \ + } = fuse_ctrl_lc_otp_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_lc_otp_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_out_if_INITIATOR_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + } fuse_ctrl_lc_otp_out_if_initiator_s; + + `define fuse_ctrl_lc_otp_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_if_initiator_s to_initiator_struct();\ + fuse_ctrl_lc_otp_out_if_initiator_struct = \ + {\ + this.otp_lc_data_o \ + };\ + return ( fuse_ctrl_lc_otp_out_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_lc_otp_out_if_initiator_s fuse_ctrl_lc_otp_out_if_initiator_struct);\ + {\ + this.otp_lc_data_o \ + } = fuse_ctrl_lc_otp_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_lc_otp_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_out_if_RESPONDER_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + } fuse_ctrl_lc_otp_out_if_responder_s; + + `define fuse_ctrl_lc_otp_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_if_responder_s to_responder_struct();\ + fuse_ctrl_lc_otp_out_if_responder_struct = \ + {\ + this.otp_lc_data_o \ + };\ + return ( fuse_ctrl_lc_otp_out_if_responder_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_lc_otp_out_if_responder_s fuse_ctrl_lc_otp_out_if_responder_struct);\ + {\ + this.otp_lc_data_o \ + } = fuse_ctrl_lc_otp_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor.svh new file mode 100644 index 000000000..2d03f44ed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_lc_otp_out_if transactions observed by the +// fuse_ctrl_lc_otp_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_lc_otp_out_if_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_out_if_monitor_bfm ), + .TRANS_T(fuse_ctrl_lc_otp_out_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_if_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_lc_otp_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_lc_otp_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_lc_otp_out_if_monitor_s fuse_ctrl_lc_otp_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_lc_otp_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor_bfm.sv new file mode 100644 index 000000000..685fdceee --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor_bfm.sv @@ -0,0 +1,194 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_lc_otp_out_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_lc_otp_out_if monitor through a virtual +// interface handle in the fuse_ctrl_lc_otp_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_lc_otp_out_if_if. +// +// Input signals from the fuse_ctrl_lc_otp_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_lc_otp_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_out_if_macros.svh" + + +interface fuse_ctrl_lc_otp_out_if_monitor_bfm + ( fuse_ctrl_lc_otp_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_lc_otp_out_if_MONITOR_STRUCT + fuse_ctrl_lc_otp_out_if_monitor_s fuse_ctrl_lc_otp_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_lc_otp_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_i; + tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_i; + tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign lc_otp_vendor_test_o_i = bus.lc_otp_vendor_test_o; + assign lc_otp_program_o_i = bus.lc_otp_program_o; + assign otp_lc_data_o_i = bus.otp_lc_data_o; + + // Proxy handle to UVM monitor + fuse_ctrl_lc_otp_out_if_pkg::fuse_ctrl_lc_otp_out_if_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_lc_otp_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_lc_otp_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_lc_otp_out_if_configuration_s fuse_ctrl_lc_otp_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_lc_otp_out_if_monitor_s fuse_ctrl_lc_otp_out_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_lc_otp_out_if_monitor_struct.otp_lc_data_o + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_lc_otp_out_if_monitor_struct.xyz = lc_otp_vendor_test_o_i; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_if_monitor_struct.xyz = lc_otp_program_o_i; // [$bits(lc_otp_program_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_if_monitor_struct.xyz = otp_lc_data_o_i; // [$bits(otp_lc_data_t)-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_random_sequence.svh new file mode 100644 index 000000000..998964a53 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_lc_otp_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_lc_otp_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_random_sequence + extends fuse_ctrl_lc_otp_out_if_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_out_if_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_lc_otp_out_if_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_lc_otp_out_if_random_sequence::body()-fuse_ctrl_lc_otp_out_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_lc_otp_out_if_driver_bfm via the sequencer and fuse_ctrl_lc_otp_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_lc_otp_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_responder_sequence.svh new file mode 100644 index 000000000..1adc62db5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_responder_sequence + extends fuse_ctrl_lc_otp_out_if_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_out_if_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_lc_otp_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_lc_otp_out_if_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_sequence_base.svh new file mode 100644 index 000000000..dc133adf1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_lc_otp_out_if_transaction ), + .RSP(fuse_ctrl_lc_otp_out_if_transaction )); + + `uvm_object_utils( fuse_ctrl_lc_otp_out_if_sequence_base ) + + // variables + typedef fuse_ctrl_lc_otp_out_if_transaction fuse_ctrl_lc_otp_out_if_transaction_req_t; + fuse_ctrl_lc_otp_out_if_transaction_req_t req; + typedef fuse_ctrl_lc_otp_out_if_transaction fuse_ctrl_lc_otp_out_if_transaction_rsp_t; + fuse_ctrl_lc_otp_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_lc_otp_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_lc_otp_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction.svh new file mode 100644 index 000000000..652f3aa11 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction.svh @@ -0,0 +1,196 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_lc_otp_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_lc_otp_out_if_transaction ) + + otp_lc_data_t otp_lc_data_o ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_lc_otp_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_lc_otp_out_if_monitor and fuse_ctrl_lc_otp_out_if_monitor_bfm + // This struct is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_MONITOR_STRUCT + fuse_ctrl_lc_otp_out_if_monitor_s fuse_ctrl_lc_otp_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_out_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_if_monitor_struct. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_out_if_driver and fuse_ctrl_lc_otp_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_out_if_initiator_s fuse_ctrl_lc_otp_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_out_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_if_initiator_struct. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_lc_otp_out_if_driver and fuse_ctrl_lc_otp_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_out_if_responder_s fuse_ctrl_lc_otp_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_out_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_if_responder_struct. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("otp_lc_data_o:0x%x ",otp_lc_data_o); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_lc_otp_out_if_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.otp_lc_data_o == RHS.otp_lc_data_o) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_lc_otp_out_if_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.otp_lc_data_o = RHS.otp_lc_data_o; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_lc_otp_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,otp_lc_data_o,"otp_lc_data_o"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction_coverage.svh new file mode 100644 index 000000000..8cdbe2099 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction_coverage.svh @@ -0,0 +1,84 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_lc_otp_out_if transaction information using +// a covergroup named fuse_ctrl_lc_otp_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_lc_otp_out_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_if_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_lc_otp_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + otp_lc_data_o: coverpoint coverage_trans.otp_lc_data_o; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_lc_otp_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_lc_otp_out_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_lc_otp_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/yaml/fuse_ctrl_lc_otp_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/yaml/fuse_ctrl_lc_otp_out_if_interface.yaml new file mode 100644 index 000000000..e5cfe2007 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/yaml/fuse_ctrl_lc_otp_out_if_interface.yaml @@ -0,0 +1,37 @@ +uvmf: + interfaces: + fuse_ctrl_lc_otp_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: input + name: lc_otp_vendor_test_o + reset_value: '''bz' + width: '[''$bits(lc_otp_vendor_test_rsp_t)'']' + - dir: input + name: lc_otp_program_o + reset_value: '''bz' + width: '[''$bits(lc_otp_program_rsp_t)'']' + - dir: input + name: otp_lc_data_o + reset_value: '''bz' + width: '[''$bits(otp_lc_data_t)'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: otp_lc_data_o + type: otp_lc_data_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.project new file mode 100644 index 000000000..42717eed9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_lc_otp_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.svproject new file mode 100644 index 000000000..fe0ca64ff --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/Makefile new file mode 100644 index 000000000..f975b194b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_lc_otp_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_lc_otp_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hvl.f + +fuse_ctrl_lc_otp_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hdl.f + +fuse_ctrl_lc_otp_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_xrtl.f + +COMP_fuse_ctrl_lc_otp_out_PKG_TGT_0 = q_comp_fuse_ctrl_lc_otp_out_pkg +COMP_fuse_ctrl_lc_otp_out_PKG_TGT_1 = v_comp_fuse_ctrl_lc_otp_out_pkg +COMP_fuse_ctrl_lc_otp_out_PKG_TGT = $(COMP_fuse_ctrl_lc_otp_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_lc_otp_out_pkg: $(COMP_fuse_ctrl_lc_otp_out_PKG_TGT) + +q_comp_fuse_ctrl_lc_otp_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_out_PKG_XRTL) + +v_comp_fuse_ctrl_lc_otp_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_lc_otp_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_lc_otp_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_lc_otp_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_out_pkg += -I$(fuse_ctrl_lc_otp_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_out_pkg += $(fuse_ctrl_lc_otp_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_lc_otp_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_lc_otp_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_lc_otp_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_lc_otp_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/compile.do new file mode 100644 index 000000000..8073231a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_lc_otp_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out.compile new file mode 100644 index 000000000..f8a8ac4ee --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_lc_otp_out_hvl.compile + - fuse_ctrl_lc_otp_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_bfm.vinfo new file mode 100644 index 000000000..0c1d35fa9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_lc_otp_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_lc_otp_out_if.sv +src/fuse_ctrl_lc_otp_out_driver_bfm.sv +src/fuse_ctrl_lc_otp_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_common.compile new file mode 100644 index 000000000..42616d50e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_lc_otp_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hdl.f new file mode 100644 index 000000000..dd3eb8a20 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hvl.f new file mode 100644 index 000000000..b0a13c621 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_xrtl.f new file mode 100644 index 000000000..48f620eef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hdl.compile new file mode 100644 index 000000000..2ce74cc85 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_lc_otp_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_lc_otp_out_if.sv + - src/fuse_ctrl_lc_otp_out_monitor_bfm.sv + - src/fuse_ctrl_lc_otp_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hvl.compile new file mode 100644 index 000000000..d6a5b8850 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_lc_otp_out_common.compile +incdir: + - . +src: + - fuse_ctrl_lc_otp_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.sv new file mode 100644 index 000000000..c18cea812 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_lc_otp_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_lc_otp_out_macros.svh" + + export fuse_ctrl_lc_otp_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_lc_otp_out_typedefs.svh" + `include "src/fuse_ctrl_lc_otp_out_transaction.svh" + + `include "src/fuse_ctrl_lc_otp_out_configuration.svh" + `include "src/fuse_ctrl_lc_otp_out_driver.svh" + `include "src/fuse_ctrl_lc_otp_out_monitor.svh" + + `include "src/fuse_ctrl_lc_otp_out_transaction_coverage.svh" + `include "src/fuse_ctrl_lc_otp_out_sequence_base.svh" + `include "src/fuse_ctrl_lc_otp_out_random_sequence.svh" + + `include "src/fuse_ctrl_lc_otp_out_responder_sequence.svh" + `include "src/fuse_ctrl_lc_otp_out2reg_adapter.svh" + + `include "src/fuse_ctrl_lc_otp_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.vinfo new file mode 100644 index 000000000..7a4f8b1c8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_lc_otp_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_lc_otp_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.sv new file mode 100644 index 000000000..8987535e6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_lc_otp_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_lc_otp_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.vinfo new file mode 100644 index 000000000..f662f8c19 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_lc_otp_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_sve.F new file mode 100644 index 000000000..0483ef5c0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out2reg_adapter.svh new file mode 100644 index 000000000..bd1fa55e6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_lc_otp_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_lc_otp_out2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_lc_otp_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_lc_otp_out_transaction trans_h = fuse_ctrl_lc_otp_out_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_lc_otp_out_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_lc_otp_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_agent.svh new file mode 100644 index 000000000..2b6207d35 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_lc_otp_out_configuration ), + .DRIVER_T(fuse_ctrl_lc_otp_out_driver ), + .MONITOR_T(fuse_ctrl_lc_otp_out_monitor ), + .COVERAGE_T(fuse_ctrl_lc_otp_out_transaction_coverage ), + .TRANS_T(fuse_ctrl_lc_otp_out_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_configuration.svh new file mode 100644 index 000000000..b7ccdaca3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_lc_otp_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_lc_otp_out_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_lc_otp_out_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_lc_otp_out_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_lc_otp_out_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_lc_otp_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_CONFIGURATION_STRUCT + fuse_ctrl_lc_otp_out_configuration_s fuse_ctrl_lc_otp_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_lc_otp_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_configuration_struct. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_lc_otp_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_lc_otp_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_lc_otp_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_lc_otp_out_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_lc_otp_out_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_lc_otp_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_lc_otp_out_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver.svh new file mode 100644 index 000000000..d25471cfc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_lc_otp_out_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_out_driver_bfm ), + .REQ(fuse_ctrl_lc_otp_out_transaction ), + .RSP(fuse_ctrl_lc_otp_out_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_lc_otp_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_lc_otp_out_driver and fuse_ctrl_lc_otp_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_lc_otp_out_driver_bfm. +`fuse_ctrl_lc_otp_out_INITIATOR_STRUCT + fuse_ctrl_lc_otp_out_initiator_s fuse_ctrl_lc_otp_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_lc_otp_out_driver and fuse_ctrl_lc_otp_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_lc_otp_out_driver_bfm. +`fuse_ctrl_lc_otp_out_RESPONDER_STRUCT + fuse_ctrl_lc_otp_out_responder_s fuse_ctrl_lc_otp_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_lc_otp_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_lc_otp_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_lc_otp_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_lc_otp_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver_bfm.sv new file mode 100644 index 000000000..9456d2d75 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver_bfm.sv @@ -0,0 +1,299 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_lc_otp_out signal driving. It is +// accessed by the uvm fuse_ctrl_lc_otp_out driver through a virtual interface +// handle in the fuse_ctrl_lc_otp_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_lc_otp_out_if. +// +// Input signals from the fuse_ctrl_lc_otp_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_lc_otp_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_out_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_out_macros.svh" + +interface fuse_ctrl_lc_otp_out_driver_bfm + (fuse_ctrl_lc_otp_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_i; + reg [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_o = 'bz; + tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_i; + reg [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_o = 'bz; + tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_i; + reg [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign lc_otp_vendor_test_o_i = bus.lc_otp_vendor_test_o; + assign bus.lc_otp_vendor_test_o = (initiator_responder == RESPONDER) ? lc_otp_vendor_test_o_o : 'bz; + assign lc_otp_program_o_i = bus.lc_otp_program_o; + assign bus.lc_otp_program_o = (initiator_responder == RESPONDER) ? lc_otp_program_o_o : 'bz; + assign otp_lc_data_o_i = bus.otp_lc_data_o; + assign bus.otp_lc_data_o = (initiator_responder == RESPONDER) ? otp_lc_data_o_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_lc_otp_out_pkg::fuse_ctrl_lc_otp_out_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_lc_otp_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_lc_otp_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_lc_otp_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_out_driver and fuse_ctrl_lc_otp_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_out_driver_bfm. + `fuse_ctrl_lc_otp_out_INITIATOR_STRUCT + fuse_ctrl_lc_otp_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_lc_otp_out_driver and fuse_ctrl_lc_otp_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_out_driver_bfm. + `fuse_ctrl_lc_otp_out_RESPONDER_STRUCT + fuse_ctrl_lc_otp_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + lc_otp_vendor_test_o_o <= 'bz; + lc_otp_program_o_o <= 'bz; + otp_lc_data_o_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_lc_otp_out_configuration_s fuse_ctrl_lc_otp_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_lc_otp_out_initiator_s fuse_ctrl_lc_otp_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_lc_otp_out_responder_s fuse_ctrl_lc_otp_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_lc_otp_out_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // Members within the fuse_ctrl_lc_otp_out_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + initiator_struct = fuse_ctrl_lc_otp_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_lc_otp_out_responder_struct.xyz = lc_otp_vendor_test_o_i; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_responder_struct.xyz = lc_otp_program_o_i; // [$bits(lc_otp_program_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_responder_struct.xyz = otp_lc_data_o_i; // [$bits(otp_lc_data_t)-1:0] + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_lc_otp_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_lc_otp_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_lc_otp_out_initiator_s fuse_ctrl_lc_otp_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_lc_otp_out_responder_s fuse_ctrl_lc_otp_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_lc_otp_out_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // Variables within the fuse_ctrl_lc_otp_out_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // lc_otp_vendor_test_o_o <= fuse_ctrl_lc_otp_out_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // lc_otp_program_o_o <= fuse_ctrl_lc_otp_out_initiator_struct.xyz; // [$bits(lc_otp_program_rsp_t)-1:0] + // otp_lc_data_o_o <= fuse_ctrl_lc_otp_out_initiator_struct.xyz; // [$bits(otp_lc_data_t)-1:0] + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_lc_otp_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_lc_otp_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_if.sv new file mode 100644 index 000000000..76b45dc37 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_if.sv @@ -0,0 +1,88 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_lc_otp_out interface signals. +// It is instantiated once per fuse_ctrl_lc_otp_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_lc_otp_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_lc_otp_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_lc_otp_out_bus.lc_otp_vendor_test_o), // Agent input +// .dut_signal_port(fuse_ctrl_lc_otp_out_bus.lc_otp_program_o), // Agent input +// .dut_signal_port(fuse_ctrl_lc_otp_out_bus.otp_lc_data_o), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_out_pkg_hdl::*; + +interface fuse_ctrl_lc_otp_out_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o, + inout tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o, + inout tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_o, + input lc_otp_program_o, + input otp_lc_data_o + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_o, + input lc_otp_program_o, + input otp_lc_data_o + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output lc_otp_vendor_test_o, + output lc_otp_program_o, + output otp_lc_data_o + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_macros.svh new file mode 100644 index 000000000..e4e72e20b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_lc_otp_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_lc_otp_out_configuration class. +// + `define fuse_ctrl_lc_otp_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_lc_otp_out_configuration_s; + + `define fuse_ctrl_lc_otp_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_configuration_s to_struct();\ + fuse_ctrl_lc_otp_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_lc_otp_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_lc_otp_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_lc_otp_out_configuration_s fuse_ctrl_lc_otp_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_lc_otp_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_lc_otp_out_transaction class. +// + `define fuse_ctrl_lc_otp_out_MONITOR_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + } fuse_ctrl_lc_otp_out_monitor_s; + + `define fuse_ctrl_lc_otp_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_monitor_s to_monitor_struct();\ + fuse_ctrl_lc_otp_out_monitor_struct = \ + { \ + this.otp_lc_data_o \ + };\ + return ( fuse_ctrl_lc_otp_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_lc_otp_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_lc_otp_out_monitor_s fuse_ctrl_lc_otp_out_monitor_struct);\ + {\ + this.otp_lc_data_o \ + } = fuse_ctrl_lc_otp_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_lc_otp_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_out_INITIATOR_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + } fuse_ctrl_lc_otp_out_initiator_s; + + `define fuse_ctrl_lc_otp_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_initiator_s to_initiator_struct();\ + fuse_ctrl_lc_otp_out_initiator_struct = \ + {\ + this.otp_lc_data_o \ + };\ + return ( fuse_ctrl_lc_otp_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_lc_otp_out_initiator_s fuse_ctrl_lc_otp_out_initiator_struct);\ + {\ + this.otp_lc_data_o \ + } = fuse_ctrl_lc_otp_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_lc_otp_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_out_RESPONDER_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + } fuse_ctrl_lc_otp_out_responder_s; + + `define fuse_ctrl_lc_otp_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_responder_s to_responder_struct();\ + fuse_ctrl_lc_otp_out_responder_struct = \ + {\ + this.otp_lc_data_o \ + };\ + return ( fuse_ctrl_lc_otp_out_responder_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_lc_otp_out_responder_s fuse_ctrl_lc_otp_out_responder_struct);\ + {\ + this.otp_lc_data_o \ + } = fuse_ctrl_lc_otp_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor.svh new file mode 100644 index 000000000..0c9f4465f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_lc_otp_out transactions observed by the +// fuse_ctrl_lc_otp_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_lc_otp_out_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_out_monitor_bfm ), + .TRANS_T(fuse_ctrl_lc_otp_out_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_lc_otp_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_lc_otp_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_lc_otp_out_monitor_s fuse_ctrl_lc_otp_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_lc_otp_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor_bfm.sv new file mode 100644 index 000000000..2a630288e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor_bfm.sv @@ -0,0 +1,194 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_lc_otp_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_lc_otp_out monitor through a virtual +// interface handle in the fuse_ctrl_lc_otp_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_lc_otp_out_if. +// +// Input signals from the fuse_ctrl_lc_otp_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_lc_otp_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_out_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_out_macros.svh" + + +interface fuse_ctrl_lc_otp_out_monitor_bfm + ( fuse_ctrl_lc_otp_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_lc_otp_out_MONITOR_STRUCT + fuse_ctrl_lc_otp_out_monitor_s fuse_ctrl_lc_otp_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_lc_otp_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_i; + tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_i; + tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign lc_otp_vendor_test_o_i = bus.lc_otp_vendor_test_o; + assign lc_otp_program_o_i = bus.lc_otp_program_o; + assign otp_lc_data_o_i = bus.otp_lc_data_o; + + // Proxy handle to UVM monitor + fuse_ctrl_lc_otp_out_pkg::fuse_ctrl_lc_otp_out_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_lc_otp_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_lc_otp_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_lc_otp_out_configuration_s fuse_ctrl_lc_otp_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_lc_otp_out_monitor_s fuse_ctrl_lc_otp_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_lc_otp_out_monitor_struct.otp_lc_data_o + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_lc_otp_out_monitor_struct.xyz = lc_otp_vendor_test_o_i; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_monitor_struct.xyz = lc_otp_program_o_i; // [$bits(lc_otp_program_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_monitor_struct.xyz = otp_lc_data_o_i; // [$bits(otp_lc_data_t)-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_random_sequence.svh new file mode 100644 index 000000000..a6806536f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_lc_otp_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_lc_otp_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_random_sequence + extends fuse_ctrl_lc_otp_out_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_out_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_lc_otp_out_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_lc_otp_out_random_sequence::body()-fuse_ctrl_lc_otp_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_lc_otp_out_driver_bfm via the sequencer and fuse_ctrl_lc_otp_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_lc_otp_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_responder_sequence.svh new file mode 100644 index 000000000..0e7cf5ce4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_responder_sequence + extends fuse_ctrl_lc_otp_out_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_out_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_lc_otp_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_lc_otp_out_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_sequence_base.svh new file mode 100644 index 000000000..d084a6b64 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_lc_otp_out_transaction ), + .RSP(fuse_ctrl_lc_otp_out_transaction )); + + `uvm_object_utils( fuse_ctrl_lc_otp_out_sequence_base ) + + // variables + typedef fuse_ctrl_lc_otp_out_transaction fuse_ctrl_lc_otp_out_transaction_req_t; + fuse_ctrl_lc_otp_out_transaction_req_t req; + typedef fuse_ctrl_lc_otp_out_transaction fuse_ctrl_lc_otp_out_transaction_rsp_t; + fuse_ctrl_lc_otp_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_lc_otp_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_lc_otp_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction.svh new file mode 100644 index 000000000..ef2229e27 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction.svh @@ -0,0 +1,196 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_lc_otp_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_lc_otp_out_transaction ) + + otp_lc_data_t otp_lc_data_o ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_lc_otp_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_lc_otp_out_monitor and fuse_ctrl_lc_otp_out_monitor_bfm + // This struct is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_MONITOR_STRUCT + fuse_ctrl_lc_otp_out_monitor_s fuse_ctrl_lc_otp_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_monitor_struct. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_out_driver and fuse_ctrl_lc_otp_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_out_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_INITIATOR_STRUCT + fuse_ctrl_lc_otp_out_initiator_s fuse_ctrl_lc_otp_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_initiator_struct. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_lc_otp_out_driver and fuse_ctrl_lc_otp_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_out_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_RESPONDER_STRUCT + fuse_ctrl_lc_otp_out_responder_s fuse_ctrl_lc_otp_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_responder_struct. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("otp_lc_data_o:0x%x ",otp_lc_data_o); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_lc_otp_out_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.otp_lc_data_o == RHS.otp_lc_data_o) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_lc_otp_out_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.otp_lc_data_o = RHS.otp_lc_data_o; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_lc_otp_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,otp_lc_data_o,"otp_lc_data_o"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction_coverage.svh new file mode 100644 index 000000000..25eeac7c7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction_coverage.svh @@ -0,0 +1,84 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_lc_otp_out transaction information using +// a covergroup named fuse_ctrl_lc_otp_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_lc_otp_out_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_lc_otp_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + otp_lc_data_o: coverpoint coverage_trans.otp_lc_data_o; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_lc_otp_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_lc_otp_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_lc_otp_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/yaml/fuse_ctrl_lc_otp_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/yaml/fuse_ctrl_lc_otp_out_interface.yaml new file mode 100644 index 000000000..108ed5f70 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/yaml/fuse_ctrl_lc_otp_out_interface.yaml @@ -0,0 +1,37 @@ +uvmf: + interfaces: + fuse_ctrl_lc_otp_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: input + name: lc_otp_vendor_test_o + reset_value: '''bz' + width: '[''$bits(lc_otp_vendor_test_rsp_t)'']' + - dir: input + name: lc_otp_program_o + reset_value: '''bz' + width: '[''$bits(lc_otp_program_rsp_t)'']' + - dir: input + name: otp_lc_data_o + reset_value: '''bz' + width: '[''$bits(otp_lc_data_t)'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: otp_lc_data_o + type: otp_lc_data_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.project new file mode 100644 index 000000000..a51915b99 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.svproject new file mode 100644 index 000000000..cc08a42fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/Makefile new file mode 100644 index 000000000..e454f5811 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f + +fuse_ctrl_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f + +fuse_ctrl_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_xrtl.f + +COMP_fuse_ctrl_out_if_PKG_TGT_0 = q_comp_fuse_ctrl_out_if_pkg +COMP_fuse_ctrl_out_if_PKG_TGT_1 = v_comp_fuse_ctrl_out_if_pkg +COMP_fuse_ctrl_out_if_PKG_TGT = $(COMP_fuse_ctrl_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_out_if_pkg: $(COMP_fuse_ctrl_out_if_PKG_TGT) + +q_comp_fuse_ctrl_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_out_if_PKG_XRTL) + +v_comp_fuse_ctrl_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_out_if_pkg += -I$(fuse_ctrl_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_out_if_pkg += $(fuse_ctrl_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_out_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/compile.do new file mode 100644 index 000000000..a96c13af2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if.compile new file mode 100644 index 000000000..dd4689f64 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_out_if_hvl.compile + - fuse_ctrl_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_bfm.vinfo new file mode 100644 index 000000000..6288a8874 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_out_if_if.sv +src/fuse_ctrl_out_if_driver_bfm.sv +src/fuse_ctrl_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_common.compile new file mode 100644 index 000000000..c7726ee65 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f new file mode 100644 index 000000000..4355e25d9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f new file mode 100644 index 000000000..13bb387c5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_xrtl.f new file mode 100644 index 000000000..0e7ea6718 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hdl.compile new file mode 100644 index 000000000..676003b6c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_out_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_out_if_if.sv + - src/fuse_ctrl_out_if_monitor_bfm.sv + - src/fuse_ctrl_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hvl.compile new file mode 100644 index 000000000..9d8526a89 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_out_if_common.compile +incdir: + - . +src: + - fuse_ctrl_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.sv new file mode 100644 index 000000000..534d87ccd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_out_if_macros.svh" + + export fuse_ctrl_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_out_if_typedefs.svh" + `include "src/fuse_ctrl_out_if_transaction.svh" + + `include "src/fuse_ctrl_out_if_configuration.svh" + `include "src/fuse_ctrl_out_if_driver.svh" + `include "src/fuse_ctrl_out_if_monitor.svh" + + `include "src/fuse_ctrl_out_if_transaction_coverage.svh" + `include "src/fuse_ctrl_out_if_sequence_base.svh" + `include "src/fuse_ctrl_out_if_random_sequence.svh" + + `include "src/fuse_ctrl_out_if_responder_sequence.svh" + `include "src/fuse_ctrl_out_if2reg_adapter.svh" + + `include "src/fuse_ctrl_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.vinfo new file mode 100644 index 000000000..0daa42ac2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.sv new file mode 100644 index 000000000..80d7ad79d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_out_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..fcc4ab02f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_sve.F new file mode 100644 index 000000000..a4f0dfc42 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if2reg_adapter.svh new file mode 100644 index 000000000..fd141b5fe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if2reg_adapter #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_out_if2reg_adapter #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h = fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_agent.svh new file mode 100644 index 000000000..2fb6d2a15 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_agent #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_out_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .DRIVER_T(fuse_ctrl_out_if_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_T(fuse_ctrl_out_if_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .COVERAGE_T(fuse_ctrl_out_if_transaction_coverage #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_out_if_agent #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_configuration.svh new file mode 100644 index 000000000..401f3ac74 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_configuration #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_out_if_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_out_if_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_out_if_configuration #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_CONFIGURATION_STRUCT + fuse_ctrl_out_if_configuration_s fuse_ctrl_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_out_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_out_if_configuration_struct. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_out_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_out_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_out_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", agent_path, interface_name, AlertSyncOn ,RndConstLfrSeed ,RndCnstLfsrPerm ,MemInitFile ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_out_if_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver.svh new file mode 100644 index 000000000..03f256f92 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_driver #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_out_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_out_if_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .REQ(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .RSP(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_out_if_driver #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_out_if_driver and fuse_ctrl_out_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_out_if_driver_bfm. +`fuse_ctrl_out_if_INITIATOR_STRUCT + fuse_ctrl_out_if_initiator_s fuse_ctrl_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_out_if_driver and fuse_ctrl_out_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_out_if_driver_bfm. +`fuse_ctrl_out_if_RESPONDER_STRUCT + fuse_ctrl_out_if_responder_s fuse_ctrl_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver_bfm.sv new file mode 100644 index 000000000..a4c591277 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver_bfm.sv @@ -0,0 +1,382 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_out_if signal driving. It is +// accessed by the uvm fuse_ctrl_out_if driver through a virtual interface +// handle in the fuse_ctrl_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_out_if_if. +// +// Input signals from the fuse_ctrl_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_out_if_macros.svh" + +interface fuse_ctrl_out_if_driver_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + (fuse_ctrl_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o_i; + reg [$bits(edn_pkg::edn_req_t)-1:0] edn_o_o = 'bz; + tri intr_otp_operation_done_o_i; + reg intr_otp_operation_done_o_o = 'bz; + tri intr_otp_error_o_i; + reg intr_otp_error_o_o = 'bz; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_i; + reg [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_o = 'bz; + tri [7:0] otp_obs_o_i; + reg [7:0] otp_obs_o_o = 'bz; + tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_i; + reg [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_o = 'bz; + tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_i; + reg [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_o = 'bz; + tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_i; + reg [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_o = 'bz; + tri [OtpTestVectWidth-1:0] cio_test_o_i; + reg [OtpTestVectWidth-1:0] cio_test_o_o = 'bz; + tri [OtpTestVectWidth-1:0] cio_test_en_o_i; + reg [OtpTestVectWidth-1:0] cio_test_en_o_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + tri otp_ext_voltage_h_io_i; + reg otp_ext_voltage_h_io_o = 'bz; + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign edn_o_i = bus.edn_o; + assign bus.edn_o = (initiator_responder == RESPONDER) ? edn_o_o : 'bz; + assign intr_otp_operation_done_o_i = bus.intr_otp_operation_done_o; + assign bus.intr_otp_operation_done_o = (initiator_responder == RESPONDER) ? intr_otp_operation_done_o_o : 'bz; + assign intr_otp_error_o_i = bus.intr_otp_error_o; + assign bus.intr_otp_error_o = (initiator_responder == RESPONDER) ? intr_otp_error_o_o : 'bz; + assign alert_tx_o_i = bus.alert_tx_o; + assign bus.alert_tx_o = (initiator_responder == RESPONDER) ? alert_tx_o_o : 'bz; + assign otp_obs_o_i = bus.otp_obs_o; + assign bus.otp_obs_o = (initiator_responder == RESPONDER) ? otp_obs_o_o : 'bz; + assign otp_ast_pwr_seq_o_i = bus.otp_ast_pwr_seq_o; + assign bus.otp_ast_pwr_seq_o = (initiator_responder == RESPONDER) ? otp_ast_pwr_seq_o_o : 'bz; + assign pwr_otp_o_i = bus.pwr_otp_o; + assign bus.pwr_otp_o = (initiator_responder == RESPONDER) ? pwr_otp_o_o : 'bz; + assign otp_broadcast_o_i = bus.otp_broadcast_o; + assign bus.otp_broadcast_o = (initiator_responder == RESPONDER) ? otp_broadcast_o_o : 'bz; + assign cio_test_o_i = bus.cio_test_o; + assign bus.cio_test_o = (initiator_responder == RESPONDER) ? cio_test_o_o : 'bz; + assign cio_test_en_o_i = bus.cio_test_en_o; + assign bus.cio_test_en_o = (initiator_responder == RESPONDER) ? cio_test_en_o_o : 'bz; + + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.otp_ext_voltage_h_io = otp_ext_voltage_h_io_o; + + // Proxy handle to UVM driver + fuse_ctrl_out_if_pkg::fuse_ctrl_out_if_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_out_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_out_if_driver and fuse_ctrl_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_out_if_driver_bfm. + `fuse_ctrl_out_if_INITIATOR_STRUCT + fuse_ctrl_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_out_if_driver and fuse_ctrl_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_out_if_driver_bfm. + `fuse_ctrl_out_if_RESPONDER_STRUCT + fuse_ctrl_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + edn_o_o <= 'bz; + intr_otp_operation_done_o_o <= 'bz; + intr_otp_error_o_o <= 'bz; + alert_tx_o_o <= 'bz; + otp_obs_o_o <= 'bz; + otp_ast_pwr_seq_o_o <= 'bz; + pwr_otp_o_o <= 'bz; + lc_otp_vendor_test_o_o <= 'bz; + lc_otp_program_o_o <= 'bz; + otp_lc_data_o_o <= 'bz; + otp_broadcast_o_o <= 'bz; + cio_test_o_o <= 'bz; + cio_test_en_o_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + otp_ext_voltage_h_io_o <= 'bz; + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_out_if_configuration_s fuse_ctrl_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_out_if_initiator_s fuse_ctrl_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_out_if_responder_s fuse_ctrl_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_out_if_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Members within the fuse_ctrl_out_if_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + initiator_struct = fuse_ctrl_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_out_if_responder_struct.xyz = edn_o_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = intr_otp_operation_done_o_i; // + // fuse_ctrl_out_if_responder_struct.xyz = intr_otp_error_o_i; // + // fuse_ctrl_out_if_responder_struct.xyz = alert_tx_o_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = otp_obs_o_i; // [7:0] + // fuse_ctrl_out_if_responder_struct.xyz = otp_ast_pwr_seq_o_i; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = pwr_otp_o_i; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = lc_otp_vendor_test_o_i; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = lc_otp_program_o_i; // [$bits(lc_otp_program_rsp_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = otp_lc_data_o_i; // [$bits(otp_lc_data_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = otp_broadcast_o_i; // [$bits(otp_broadcast_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = cio_test_o_i; // [OtpTestVectWidth-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = cio_test_en_o_i; // [OtpTestVectWidth-1:0] + // Initiator inout signals + // fuse_ctrl_out_if_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_out_if_initiator_struct.xyz; // + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_out_if_initiator_s fuse_ctrl_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_out_if_responder_s fuse_ctrl_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_out_if_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Variables within the fuse_ctrl_out_if_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // fuse_ctrl_out_if_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // edn_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(edn_pkg::edn_req_t)-1:0] + // intr_otp_operation_done_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // + // intr_otp_error_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // + // alert_tx_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // otp_obs_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [7:0] + // otp_ast_pwr_seq_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // pwr_otp_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // lc_otp_vendor_test_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // lc_otp_program_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(lc_otp_program_rsp_t)-1:0] + // otp_lc_data_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(otp_lc_data_t)-1:0] + // otp_broadcast_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(otp_broadcast_t)-1:0] + // cio_test_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [OtpTestVectWidth-1:0] + // cio_test_en_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [OtpTestVectWidth-1:0] + // Responder inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_out_if_initiator_struct.xyz; // + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_if.sv new file mode 100644 index 000000000..d1b92cdfb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_if.sv @@ -0,0 +1,134 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_out_if interface signals. +// It is instantiated once per fuse_ctrl_out_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_out_if_bus.edn_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.intr_otp_operation_done_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.intr_otp_error_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.alert_tx_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.otp_obs_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.otp_ast_pwr_seq_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.pwr_otp_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.otp_broadcast_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.otp_ext_voltage_h_io), // Agent inout +// .dut_signal_port(fuse_ctrl_out_if_bus.cio_test_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.cio_test_en_o), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_if_pkg_hdl::*; + +interface fuse_ctrl_out_if_if #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o, + inout tri intr_otp_operation_done_o, + inout tri intr_otp_error_o, + inout tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o, + inout tri [7:0] otp_obs_o, + inout tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o, + inout tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o, + inout tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o, + inout tri otp_ext_voltage_h_io, + inout tri [OtpTestVectWidth-1:0] cio_test_o, + inout tri [OtpTestVectWidth-1:0] cio_test_en_o + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input edn_o, + input intr_otp_operation_done_o, + input intr_otp_error_o, + input alert_tx_o, + input otp_obs_o, + input otp_ast_pwr_seq_o, + input pwr_otp_o, + input otp_broadcast_o, + input otp_ext_voltage_h_io, + input cio_test_o, + input cio_test_en_o + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input edn_o, + input intr_otp_operation_done_o, + input intr_otp_error_o, + input alert_tx_o, + input otp_obs_o, + input otp_ast_pwr_seq_o, + input pwr_otp_o, + input otp_broadcast_o, + inout otp_ext_voltage_h_io, + input cio_test_o, + input cio_test_en_o + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output edn_o, + output intr_otp_operation_done_o, + output intr_otp_error_o, + output alert_tx_o, + output otp_obs_o, + output otp_ast_pwr_seq_o, + output pwr_otp_o, + output otp_broadcast_o, + inout otp_ext_voltage_h_io, + output cio_test_o, + output cio_test_en_o + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_macros.svh new file mode 100644 index 000000000..79bf75fe9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_out_if_configuration class. +// + `define fuse_ctrl_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_out_if_configuration_s; + + `define fuse_ctrl_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_if_configuration_s to_struct();\ + fuse_ctrl_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_out_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_out_if_configuration_s fuse_ctrl_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_out_if_transaction class. +// + `define fuse_ctrl_out_if_MONITOR_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_if_monitor_s; + + `define fuse_ctrl_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_if_monitor_s to_monitor_struct();\ + fuse_ctrl_out_if_monitor_struct = \ + { \ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_out_if_monitor_s fuse_ctrl_out_if_monitor_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_out_if_INITIATOR_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_if_initiator_s; + + `define fuse_ctrl_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_if_initiator_s to_initiator_struct();\ + fuse_ctrl_out_if_initiator_struct = \ + {\ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_out_if_initiator_s fuse_ctrl_out_if_initiator_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_out_if_RESPONDER_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_if_responder_s; + + `define fuse_ctrl_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_if_responder_s to_responder_struct();\ + fuse_ctrl_out_if_responder_struct = \ + {\ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_if_responder_struct);\ + endfunction + + `define fuse_ctrl_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_out_if_responder_s fuse_ctrl_out_if_responder_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor.svh new file mode 100644 index 000000000..5aba5c809 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_out_if transactions observed by the +// fuse_ctrl_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_monitor #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_out_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_out_if_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_out_if_monitor #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_out_if_monitor_s fuse_ctrl_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor_bfm.sv new file mode 100644 index 000000000..e10a4b55e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor_bfm.sv @@ -0,0 +1,230 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_out_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_out_if monitor through a virtual +// interface handle in the fuse_ctrl_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_out_if_if. +// +// Input signals from the fuse_ctrl_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_out_if_macros.svh" + + +interface fuse_ctrl_out_if_monitor_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + ( fuse_ctrl_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_out_if_MONITOR_STRUCT + fuse_ctrl_out_if_monitor_s fuse_ctrl_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o_i; + tri intr_otp_operation_done_o_i; + tri intr_otp_error_o_i; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_i; + tri [7:0] otp_obs_o_i; + tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_i; + tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_i; + tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_i; + tri otp_ext_voltage_h_io_i; + tri [OtpTestVectWidth-1:0] cio_test_o_i; + tri [OtpTestVectWidth-1:0] cio_test_en_o_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign edn_o_i = bus.edn_o; + assign intr_otp_operation_done_o_i = bus.intr_otp_operation_done_o; + assign intr_otp_error_o_i = bus.intr_otp_error_o; + assign alert_tx_o_i = bus.alert_tx_o; + assign otp_obs_o_i = bus.otp_obs_o; + assign otp_ast_pwr_seq_o_i = bus.otp_ast_pwr_seq_o; + assign pwr_otp_o_i = bus.pwr_otp_o; + assign otp_broadcast_o_i = bus.otp_broadcast_o; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + assign cio_test_o_i = bus.cio_test_o; + assign cio_test_en_o_i = bus.cio_test_en_o; + + // Proxy handle to UVM monitor + fuse_ctrl_out_if_pkg::fuse_ctrl_out_if_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_out_if_configuration_s fuse_ctrl_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_out_if_monitor_s fuse_ctrl_out_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_out_if_monitor_struct.pwr_otp_o + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_out_if_monitor_struct.xyz = edn_o_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = intr_otp_operation_done_o_i; // + // fuse_ctrl_out_if_monitor_struct.xyz = intr_otp_error_o_i; // + // fuse_ctrl_out_if_monitor_struct.xyz = alert_tx_o_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = otp_obs_o_i; // [7:0] + // fuse_ctrl_out_if_monitor_struct.xyz = otp_ast_pwr_seq_o_i; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = pwr_otp_o_i; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = otp_broadcast_o_i; // [$bits(otp_broadcast_t)-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = otp_ext_voltage_h_io_i; // + // fuse_ctrl_out_if_monitor_struct.xyz = cio_test_o_i; // [OtpTestVectWidth-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = cio_test_en_o_i; // [OtpTestVectWidth-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_random_sequence.svh new file mode 100644 index 000000000..6aacd46f1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_random_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_out_if_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_out_if_random_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_out_if_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_out_if_random_sequence::body()-fuse_ctrl_out_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_out_if_driver_bfm via the sequencer and fuse_ctrl_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_responder_sequence.svh new file mode 100644 index 000000000..b82d116c6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_responder_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_out_if_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_out_if_responder_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_out_if_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_sequence_base.svh new file mode 100644 index 000000000..475fcbfc5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_sequence_base #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .RSP(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_out_if_sequence_base #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // variables + typedef fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_out_if_transaction_req_t; + fuse_ctrl_out_if_transaction_req_t req; + typedef fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_out_if_transaction_rsp_t; + fuse_ctrl_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction.svh new file mode 100644 index 000000000..110c96097 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction.svh @@ -0,0 +1,223 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_transaction #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_out_if_transaction #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_out_if_monitor and fuse_ctrl_out_if_monitor_bfm + // This struct is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_MONITOR_STRUCT + fuse_ctrl_out_if_monitor_s fuse_ctrl_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_out_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_out_if_monitor_struct. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_out_if_driver and fuse_ctrl_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_INITIATOR_STRUCT + fuse_ctrl_out_if_initiator_s fuse_ctrl_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_out_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_out_if_initiator_struct. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_out_if_driver and fuse_ctrl_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_RESPONDER_STRUCT + fuse_ctrl_out_if_responder_s fuse_ctrl_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_out_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_out_if_responder_struct. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("otp_lc_data_o:0x%x pwr_otp_o:0x%x ",otp_lc_data_o,pwr_otp_o); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.otp_lc_data_o == RHS.otp_lc_data_o) + &&(this.pwr_otp_o == RHS.pwr_otp_o) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.otp_lc_data_o = RHS.otp_lc_data_o; + this.pwr_otp_o = RHS.pwr_otp_o; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,otp_lc_data_o,"otp_lc_data_o"); + $add_attribute(transaction_view_h,pwr_otp_o,"pwr_otp_o"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction_coverage.svh new file mode 100644 index 000000000..4c40b9333 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction_coverage.svh @@ -0,0 +1,103 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_out_if transaction information using +// a covergroup named fuse_ctrl_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_transaction_coverage #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_subscriber #(.T(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_out_if_transaction_coverage #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + otp_lc_data_o: coverpoint coverage_trans.otp_lc_data_o; + pwr_otp_o: coverpoint coverage_trans.pwr_otp_o; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_out_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/yaml/fuse_ctrl_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/yaml/fuse_ctrl_out_if_interface.yaml new file mode 100644 index 000000000..dd001e21a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/yaml/fuse_ctrl_out_if_interface.yaml @@ -0,0 +1,80 @@ +uvmf: + interfaces: + fuse_ctrl_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AlertSyncOn + type: int + value: '3' + - name: RndConstLfrSeed + type: lfsr_seed_t + value: RndConstLfsrSeedDefault + - name: RndCnstLfsrPerm + type: lsfr_perm_t + value: RndCnstLfsrPermDefault + - name: MemInitFile + type: string + ports: + - dir: input + name: edn_o + reset_value: '''bz' + width: '[''$bits(edn_pkg::edn_req_t)'']' + - dir: input + name: intr_otp_operation_done_o + reset_value: '''bz' + width: '1' + - dir: input + name: intr_otp_error_o + reset_value: '''bz' + width: '1' + - dir: input + name: alert_tx_o + reset_value: '''bz' + width: '[''NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)'']' + - dir: input + name: otp_obs_o + reset_value: '''bz' + width: '8' + - dir: input + name: otp_ast_pwr_seq_o + reset_value: '''bz' + width: '[''$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)'']' + - dir: input + name: pwr_otp_o + reset_value: '''bz' + width: '[''$bits(pwrmgr_pkg::pwr_otp_rsp_t)'']' + - dir: input + name: otp_broadcast_o + reset_value: '''bz' + width: '[''$bits(otp_broadcast_t)'']' + - dir: inout + name: otp_ext_voltage_h_io + reset_value: '''bz' + width: '1' + - dir: input + name: cio_test_o + reset_value: '''bz' + width: '[''OtpTestVectWidth'']' + - dir: input + name: cio_test_en_o + reset_value: '''bz' + width: '[''OtpTestVectWidth'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: pwr_otp_o + type: pwrmgr_pkg::pwr_otp_rsp_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/.project new file mode 100644 index 000000000..c96dcb429 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/.svproject new file mode 100644 index 000000000..64d224ae5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/Makefile new file mode 100644 index 000000000..b5ee9df5a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f + +fuse_ctrl_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f + +fuse_ctrl_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f + +COMP_fuse_ctrl_out_PKG_TGT_0 = q_comp_fuse_ctrl_out_pkg +COMP_fuse_ctrl_out_PKG_TGT_1 = v_comp_fuse_ctrl_out_pkg +COMP_fuse_ctrl_out_PKG_TGT = $(COMP_fuse_ctrl_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_out_pkg: $(COMP_fuse_ctrl_out_PKG_TGT) + +q_comp_fuse_ctrl_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_out_PKG_XRTL) + +v_comp_fuse_ctrl_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_out_pkg += -I$(fuse_ctrl_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_out_pkg += $(fuse_ctrl_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/compile.do new file mode 100644 index 000000000..5fdaafcd1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile new file mode 100644 index 000000000..3ac4b243e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_out_hvl.compile + - fuse_ctrl_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo new file mode 100644 index 000000000..b4ea5985b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_out_if.sv +src/fuse_ctrl_out_driver_bfm.sv +src/fuse_ctrl_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_common.compile new file mode 100644 index 000000000..1193b2509 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f new file mode 100644 index 000000000..5be27730e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f new file mode 100644 index 000000000..fc769adb0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f new file mode 100644 index 000000000..4a7b8cc2b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hdl.compile new file mode 100644 index 000000000..2745ad2a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_out_if.sv + - src/fuse_ctrl_out_monitor_bfm.sv + - src/fuse_ctrl_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hvl.compile new file mode 100644 index 000000000..5562a204a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_out_common.compile +incdir: + - . +src: + - fuse_ctrl_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv new file mode 100644 index 000000000..afb8df957 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_out_macros.svh" + + export fuse_ctrl_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_out_typedefs.svh" + `include "src/fuse_ctrl_out_transaction.svh" + + `include "src/fuse_ctrl_out_configuration.svh" + `include "src/fuse_ctrl_out_driver.svh" + `include "src/fuse_ctrl_out_monitor.svh" + + `include "src/fuse_ctrl_out_transaction_coverage.svh" + `include "src/fuse_ctrl_out_sequence_base.svh" + `include "src/fuse_ctrl_out_random_sequence.svh" + + `include "src/fuse_ctrl_out_responder_sequence.svh" + `include "src/fuse_ctrl_out2reg_adapter.svh" + + `include "src/fuse_ctrl_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo new file mode 100644 index 000000000..4f08c9ef3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.sv new file mode 100644 index 000000000..f90777afe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.vinfo new file mode 100644 index 000000000..c55df62d8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F new file mode 100644 index 000000000..94ccd9b8b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out2reg_adapter.svh new file mode 100644 index 000000000..c13afeb59 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out2reg_adapter #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_out2reg_adapter #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h = fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_agent.svh new file mode 100644 index 000000000..64fcd3c17 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_agent #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_out_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .DRIVER_T(fuse_ctrl_out_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_T(fuse_ctrl_out_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .COVERAGE_T(fuse_ctrl_out_transaction_coverage #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_out_agent #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_configuration.svh new file mode 100644 index 000000000..52338d1e5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_configuration #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_out_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_out_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_out_configuration #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_CONFIGURATION_STRUCT + fuse_ctrl_out_configuration_s fuse_ctrl_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_out_configuration_struct. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_out_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_out_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", agent_path, interface_name, AlertSyncOn ,RndConstLfrSeed ,RndCnstLfsrPerm ,MemInitFile ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_out_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver.svh new file mode 100644 index 000000000..ec2f7b4ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_driver #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_out_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_out_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .REQ(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .RSP(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_out_driver #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_out_driver_bfm. +`fuse_ctrl_out_INITIATOR_STRUCT + fuse_ctrl_out_initiator_s fuse_ctrl_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_out_driver_bfm. +`fuse_ctrl_out_RESPONDER_STRUCT + fuse_ctrl_out_responder_s fuse_ctrl_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver_bfm.sv new file mode 100644 index 000000000..0b796ef47 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver_bfm.sv @@ -0,0 +1,374 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_out signal driving. It is +// accessed by the uvm fuse_ctrl_out driver through a virtual interface +// handle in the fuse_ctrl_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_out_if. +// +// Input signals from the fuse_ctrl_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_pkg_hdl::*; +`include "src/fuse_ctrl_out_macros.svh" + +interface fuse_ctrl_out_driver_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + (fuse_ctrl_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o_i; + reg [$bits(edn_pkg::edn_req_t)-1:0] edn_o_o = 'bz; + tri intr_otp_operation_done_o_i; + reg intr_otp_operation_done_o_o = 'bz; + tri intr_otp_error_o_i; + reg intr_otp_error_o_o = 'bz; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_i; + reg [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_o = 'bz; + tri [7:0] otp_obs_o_i; + reg [7:0] otp_obs_o_o = 'bz; + tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_i; + reg [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_o = 'bz; + tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_i; + reg [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_o = 'bz; + tri [OtpTestVectWidth-1:0] cio_test_o_i; + reg [OtpTestVectWidth-1:0] cio_test_o_o = 'bz; + tri [OtpTestVectWidth-1:0] cio_test_en_o_i; + reg [OtpTestVectWidth-1:0] cio_test_en_o_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign edn_o_i = bus.edn_o; + assign bus.edn_o = (initiator_responder == RESPONDER) ? edn_o_o : 'bz; + assign intr_otp_operation_done_o_i = bus.intr_otp_operation_done_o; + assign bus.intr_otp_operation_done_o = (initiator_responder == RESPONDER) ? intr_otp_operation_done_o_o : 'bz; + assign intr_otp_error_o_i = bus.intr_otp_error_o; + assign bus.intr_otp_error_o = (initiator_responder == RESPONDER) ? intr_otp_error_o_o : 'bz; + assign alert_tx_o_i = bus.alert_tx_o; + assign bus.alert_tx_o = (initiator_responder == RESPONDER) ? alert_tx_o_o : 'bz; + assign otp_obs_o_i = bus.otp_obs_o; + assign bus.otp_obs_o = (initiator_responder == RESPONDER) ? otp_obs_o_o : 'bz; + assign otp_ast_pwr_seq_o_i = bus.otp_ast_pwr_seq_o; + assign bus.otp_ast_pwr_seq_o = (initiator_responder == RESPONDER) ? otp_ast_pwr_seq_o_o : 'bz; + assign otp_broadcast_o_i = bus.otp_broadcast_o; + assign bus.otp_broadcast_o = (initiator_responder == RESPONDER) ? otp_broadcast_o_o : 'bz; + assign cio_test_o_i = bus.cio_test_o; + assign bus.cio_test_o = (initiator_responder == RESPONDER) ? cio_test_o_o : 'bz; + assign cio_test_en_o_i = bus.cio_test_en_o; + assign bus.cio_test_en_o = (initiator_responder == RESPONDER) ? cio_test_en_o_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_out_pkg::fuse_ctrl_out_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_out_driver_bfm. + `fuse_ctrl_out_INITIATOR_STRUCT + fuse_ctrl_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_out_driver_bfm. + `fuse_ctrl_out_RESPONDER_STRUCT + fuse_ctrl_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + edn_o_o <= 'bz; + intr_otp_operation_done_o_o <= 'bz; + intr_otp_error_o_o <= 'bz; + alert_tx_o_o <= 'bz; + otp_obs_o_o <= 'bz; + otp_ast_pwr_seq_o_o <= 'bz; + pwr_otp_o_o <= 'bz; + lc_otp_vendor_test_o_o <= 'bz; + lc_otp_program_o_o <= 'bz; + otp_lc_data_o_o <= 'bz; + otp_broadcast_o_o <= 'bz; + cio_test_o_o <= 'bz; + cio_test_en_o_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + otp_ext_voltage_h_io_o <= 'bz; + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_out_configuration_s fuse_ctrl_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_out_initiator_s fuse_ctrl_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_out_responder_s fuse_ctrl_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_out_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Members within the fuse_ctrl_out_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + initiator_struct = fuse_ctrl_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_out_responder_struct.xyz = edn_o_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = intr_otp_operation_done_o_i; // + // fuse_ctrl_out_responder_struct.xyz = intr_otp_error_o_i; // + // fuse_ctrl_out_responder_struct.xyz = alert_tx_o_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = otp_obs_o_i; // [7:0] + // fuse_ctrl_out_responder_struct.xyz = otp_ast_pwr_seq_o_i; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = pwr_otp_o_i; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = lc_otp_vendor_test_o_i; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = lc_otp_program_o_i; // [$bits(lc_otp_program_rsp_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = otp_lc_data_o_i; // [$bits(otp_lc_data_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = otp_broadcast_o_i; // [$bits(otp_broadcast_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = cio_test_o_i; // [OtpTestVectWidth-1:0] + // fuse_ctrl_out_responder_struct.xyz = cio_test_en_o_i; // [OtpTestVectWidth-1:0] + // Initiator inout signals + // fuse_ctrl_out_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_out_initiator_struct.xyz; // + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_out_initiator_s fuse_ctrl_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_out_responder_s fuse_ctrl_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_out_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Variables within the fuse_ctrl_out_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // fuse_ctrl_out_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // edn_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(edn_pkg::edn_req_t)-1:0] + // intr_otp_operation_done_o_o <= fuse_ctrl_out_initiator_struct.xyz; // + // intr_otp_error_o_o <= fuse_ctrl_out_initiator_struct.xyz; // + // alert_tx_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // otp_obs_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [7:0] + // otp_ast_pwr_seq_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // pwr_otp_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // lc_otp_vendor_test_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // lc_otp_program_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(lc_otp_program_rsp_t)-1:0] + // otp_lc_data_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(otp_lc_data_t)-1:0] + // otp_broadcast_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(otp_broadcast_t)-1:0] + // cio_test_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [OtpTestVectWidth-1:0] + // cio_test_en_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [OtpTestVectWidth-1:0] + // Responder inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_out_initiator_struct.xyz; // + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv new file mode 100644 index 000000000..25d4370f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_out interface signals. +// It is instantiated once per fuse_ctrl_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_out_bus.edn_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.intr_otp_operation_done_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.intr_otp_error_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.alert_tx_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.otp_obs_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.otp_ast_pwr_seq_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.otp_broadcast_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.cio_test_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.cio_test_en_o), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_pkg_hdl::*; + +interface fuse_ctrl_out_if #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o, + inout tri intr_otp_operation_done_o, + inout tri intr_otp_error_o, + inout tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o, + inout tri [7:0] otp_obs_o, + inout tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o, + inout tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o, + inout tri [OtpTestVectWidth-1:0] cio_test_o, + inout tri [OtpTestVectWidth-1:0] cio_test_en_o + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input edn_o, + input intr_otp_operation_done_o, + input intr_otp_error_o, + input alert_tx_o, + input otp_obs_o, + input otp_ast_pwr_seq_o, + input otp_broadcast_o, + input cio_test_o, + input cio_test_en_o + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input edn_o, + input intr_otp_operation_done_o, + input intr_otp_error_o, + input alert_tx_o, + input otp_obs_o, + input otp_ast_pwr_seq_o, + input otp_broadcast_o, + input cio_test_o, + input cio_test_en_o + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output edn_o, + output intr_otp_operation_done_o, + output intr_otp_error_o, + output alert_tx_o, + output otp_obs_o, + output otp_ast_pwr_seq_o, + output otp_broadcast_o, + output cio_test_o, + output cio_test_en_o + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_macros.svh new file mode 100644 index 000000000..3002819f6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_out_configuration class. +// + `define fuse_ctrl_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_out_configuration_s; + + `define fuse_ctrl_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_configuration_s to_struct();\ + fuse_ctrl_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_out_configuration_s fuse_ctrl_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_out_transaction class. +// + `define fuse_ctrl_out_MONITOR_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_monitor_s; + + `define fuse_ctrl_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_monitor_s to_monitor_struct();\ + fuse_ctrl_out_monitor_struct = \ + { \ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_out_monitor_s fuse_ctrl_out_monitor_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_out_INITIATOR_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_initiator_s; + + `define fuse_ctrl_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_initiator_s to_initiator_struct();\ + fuse_ctrl_out_initiator_struct = \ + {\ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_out_initiator_s fuse_ctrl_out_initiator_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_out_RESPONDER_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_responder_s; + + `define fuse_ctrl_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_responder_s to_responder_struct();\ + fuse_ctrl_out_responder_struct = \ + {\ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_responder_struct);\ + endfunction + + `define fuse_ctrl_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_out_responder_s fuse_ctrl_out_responder_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor.svh new file mode 100644 index 000000000..9f967f63b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_out transactions observed by the +// fuse_ctrl_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_monitor #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_out_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_out_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_out_monitor #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_out_monitor_s fuse_ctrl_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor_bfm.sv new file mode 100644 index 000000000..e33c93099 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor_bfm.sv @@ -0,0 +1,224 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_out monitor through a virtual +// interface handle in the fuse_ctrl_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_out_if. +// +// Input signals from the fuse_ctrl_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_pkg_hdl::*; +`include "src/fuse_ctrl_out_macros.svh" + + +interface fuse_ctrl_out_monitor_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + ( fuse_ctrl_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_out_MONITOR_STRUCT + fuse_ctrl_out_monitor_s fuse_ctrl_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o_i; + tri intr_otp_operation_done_o_i; + tri intr_otp_error_o_i; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_i; + tri [7:0] otp_obs_o_i; + tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_i; + tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_i; + tri [OtpTestVectWidth-1:0] cio_test_o_i; + tri [OtpTestVectWidth-1:0] cio_test_en_o_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign edn_o_i = bus.edn_o; + assign intr_otp_operation_done_o_i = bus.intr_otp_operation_done_o; + assign intr_otp_error_o_i = bus.intr_otp_error_o; + assign alert_tx_o_i = bus.alert_tx_o; + assign otp_obs_o_i = bus.otp_obs_o; + assign otp_ast_pwr_seq_o_i = bus.otp_ast_pwr_seq_o; + assign otp_broadcast_o_i = bus.otp_broadcast_o; + assign cio_test_o_i = bus.cio_test_o; + assign cio_test_en_o_i = bus.cio_test_en_o; + + // Proxy handle to UVM monitor + fuse_ctrl_out_pkg::fuse_ctrl_out_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_out_configuration_s fuse_ctrl_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_out_monitor_s fuse_ctrl_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_out_monitor_struct.pwr_otp_o + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_out_monitor_struct.xyz = edn_o_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = intr_otp_operation_done_o_i; // + // fuse_ctrl_out_monitor_struct.xyz = intr_otp_error_o_i; // + // fuse_ctrl_out_monitor_struct.xyz = alert_tx_o_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = otp_obs_o_i; // [7:0] + // fuse_ctrl_out_monitor_struct.xyz = otp_ast_pwr_seq_o_i; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = otp_broadcast_o_i; // [$bits(otp_broadcast_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = cio_test_o_i; // [OtpTestVectWidth-1:0] + // fuse_ctrl_out_monitor_struct.xyz = cio_test_en_o_i; // [OtpTestVectWidth-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_random_sequence.svh new file mode 100644 index 000000000..fa517894b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_random_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_out_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_out_random_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_out_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_out_random_sequence::body()-fuse_ctrl_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_out_driver_bfm via the sequencer and fuse_ctrl_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_responder_sequence.svh new file mode 100644 index 000000000..2dfe53b5d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_responder_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_out_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_out_responder_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_out_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_sequence_base.svh new file mode 100644 index 000000000..d115821b5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_sequence_base #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .RSP(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_out_sequence_base #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // variables + typedef fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_out_transaction_req_t; + fuse_ctrl_out_transaction_req_t req; + typedef fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_out_transaction_rsp_t; + fuse_ctrl_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction.svh new file mode 100644 index 000000000..1da32f283 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction.svh @@ -0,0 +1,223 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_transaction #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_out_transaction #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_out_monitor and fuse_ctrl_out_monitor_bfm + // This struct is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_MONITOR_STRUCT + fuse_ctrl_out_monitor_s fuse_ctrl_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_out_monitor_struct. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_out_driver_bfm. + // This struct is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_INITIATOR_STRUCT + fuse_ctrl_out_initiator_s fuse_ctrl_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_out_initiator_struct. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_out_driver_bfm. + // This struct is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_RESPONDER_STRUCT + fuse_ctrl_out_responder_s fuse_ctrl_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_out_responder_struct. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("otp_lc_data_o:0x%x pwr_otp_o:0x%x ",otp_lc_data_o,pwr_otp_o); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.otp_lc_data_o == RHS.otp_lc_data_o) + &&(this.pwr_otp_o == RHS.pwr_otp_o) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.otp_lc_data_o = RHS.otp_lc_data_o; + this.pwr_otp_o = RHS.pwr_otp_o; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,otp_lc_data_o,"otp_lc_data_o"); + $add_attribute(transaction_view_h,pwr_otp_o,"pwr_otp_o"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction_coverage.svh new file mode 100644 index 000000000..2233f6d7e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction_coverage.svh @@ -0,0 +1,103 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_out transaction information using +// a covergroup named fuse_ctrl_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_transaction_coverage #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_subscriber #(.T(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_out_transaction_coverage #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + otp_lc_data_o: coverpoint coverage_trans.otp_lc_data_o; + pwr_otp_o: coverpoint coverage_trans.pwr_otp_o; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/yaml/fuse_ctrl_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/yaml/fuse_ctrl_out_interface.yaml new file mode 100644 index 000000000..bbb13e052 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_out_pkg/yaml/fuse_ctrl_out_interface.yaml @@ -0,0 +1,72 @@ +uvmf: + interfaces: + fuse_ctrl_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AlertSyncOn + type: int + value: '3' + - name: RndConstLfrSeed + type: lfsr_seed_t + value: RndConstLfsrSeedDefault + - name: RndCnstLfsrPerm + type: lsfr_perm_t + value: RndCnstLfsrPermDefault + - name: MemInitFile + type: string + ports: + - dir: input + name: edn_o + reset_value: '''bz' + width: '[''$bits(edn_pkg::edn_req_t)'']' + - dir: input + name: intr_otp_operation_done_o + reset_value: '''bz' + width: '1' + - dir: input + name: intr_otp_error_o + reset_value: '''bz' + width: '1' + - dir: input + name: alert_tx_o + reset_value: '''bz' + width: '[''NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)'']' + - dir: input + name: otp_obs_o + reset_value: '''bz' + width: '8' + - dir: input + name: otp_ast_pwr_seq_o + reset_value: '''bz' + width: '[''$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)'']' + - dir: input + name: otp_broadcast_o + reset_value: '''bz' + width: '[''$bits(otp_broadcast_t)'']' + - dir: input + name: cio_test_o + reset_value: '''bz' + width: '[''OtpTestVectWidth'']' + - dir: input + name: cio_test_en_o + reset_value: '''bz' + width: '[''OtpTestVectWidth'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: pwr_otp_o + type: pwrmgr_pkg::pwr_otp_rsp_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.project new file mode 100644 index 000000000..931d0548e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..e6e385ac0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..7ce58a365 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f + +fuse_ctrl_prim_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f + +fuse_ctrl_prim_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_read_if_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_read_if_pkg +COMP_fuse_ctrl_prim_axi_read_if_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_read_if_pkg +COMP_fuse_ctrl_prim_axi_read_if_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_read_if_pkg: $(COMP_fuse_ctrl_prim_axi_read_if_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_read_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_read_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_if_pkg += -I$(fuse_ctrl_prim_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_if_pkg += $(fuse_ctrl_prim_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..5a8d38b1e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if.compile new file mode 100644 index 000000000..ce142767a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_read_if_hvl.compile + - fuse_ctrl_prim_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..5ecca257f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_read_if_if.sv +src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv +src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_common.compile new file mode 100644 index 000000000..f7bbff4b6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..3be99c24b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..f66b0809e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..0f9b2fdb7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hdl.compile new file mode 100644 index 000000000..4cb1da005 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_read_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_read_if_if.sv + - src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hvl.compile new file mode 100644 index 000000000..bd9e9530a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_read_if_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.sv new file mode 100644 index 000000000..39a398f84 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_read_if_macros.svh" + + export fuse_ctrl_prim_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_read_if_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_read_if_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_read_if_configuration.svh" + `include "src/fuse_ctrl_prim_axi_read_if_driver.svh" + `include "src/fuse_ctrl_prim_axi_read_if_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_read_if_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_read_if_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_read_if_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_read_if_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_read_if2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..9ca839db8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..150746c87 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_read_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..3b7c038b4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..6e979354a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..850d7d4dd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_agent.svh new file mode 100644 index 000000000..21263a19c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_configuration.svh new file mode 100644 index 000000000..b51d7b8f0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_read_if_configuration_s fuse_ctrl_prim_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_read_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_if_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_read_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver.svh new file mode 100644 index 000000000..e414a4883 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. +`fuse_ctrl_prim_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_if_initiator_s fuse_ctrl_prim_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. +`fuse_ctrl_prim_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_if_responder_s fuse_ctrl_prim_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..c519b223f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_read_if signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_read_if driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_read_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_if_macros.svh" + +interface fuse_ctrl_prim_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_read_if_pkg::fuse_ctrl_prim_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_read_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. + `fuse_ctrl_prim_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. + `fuse_ctrl_prim_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_read_if_configuration_s fuse_ctrl_prim_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_read_if_initiator_s fuse_ctrl_prim_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_read_if_responder_s fuse_ctrl_prim_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_read_if_initiator_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Members within the fuse_ctrl_prim_axi_read_if_responder_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + initiator_struct = fuse_ctrl_prim_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_read_if_initiator_s fuse_ctrl_prim_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_read_if_responder_s fuse_ctrl_prim_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_read_if_initiator_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Variables within the fuse_ctrl_prim_axi_read_if_responder_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arlock_i; // + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_if.sv new file mode 100644 index 000000000..e1e4911a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_read_if interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_read_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_if_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_macros.svh new file mode 100644 index 000000000..9aa71c06e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_read_if_configuration class. +// + `define fuse_ctrl_prim_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_read_if_configuration_s; + + `define fuse_ctrl_prim_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_if_configuration_s to_struct();\ + fuse_ctrl_prim_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_read_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_read_if_configuration_s fuse_ctrl_prim_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_read_if_transaction class. +// + `define fuse_ctrl_prim_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_if_monitor_s; + + `define fuse_ctrl_prim_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_if_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_read_if_monitor_struct = \ + { \ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_read_if_monitor_s fuse_ctrl_prim_axi_read_if_monitor_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_if_initiator_s; + + `define fuse_ctrl_prim_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_if_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_read_if_initiator_struct = \ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_read_if_initiator_s fuse_ctrl_prim_axi_read_if_initiator_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_if_responder_s; + + `define fuse_ctrl_prim_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_if_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_read_if_responder_struct = \ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_if_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_read_if_responder_s fuse_ctrl_prim_axi_read_if_responder_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor.svh new file mode 100644 index 000000000..bf0c76c81 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_read_if transactions observed by the +// fuse_ctrl_prim_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_read_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_read_if_monitor_s fuse_ctrl_prim_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..bed13faf6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_read_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_read_if monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_read_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_if_macros.svh" + + +interface fuse_ctrl_prim_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_read_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_if_monitor_s fuse_ctrl_prim_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_read_if_pkg::fuse_ctrl_prim_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_read_if_configuration_s fuse_ctrl_prim_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_read_if_monitor_s fuse_ctrl_prim_axi_read_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_araddr + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arvalid + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arburst + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arsize + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arlen + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_aruser + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arid + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arlock + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..bd8b0a768 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_read_if_random_sequence::body()-fuse_ctrl_prim_axi_read_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_read_if_driver_bfm via the sequencer and fuse_ctrl_prim_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..dd96f25d6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..0d10545bd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_if_transaction_req_t; + fuse_ctrl_prim_axi_read_if_transaction_req_t req; + typedef fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_if_transaction_rsp_t; + fuse_ctrl_prim_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction.svh new file mode 100644 index 000000000..f4f6cb786 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] prim_araddr ; + logic prim_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + logic [2:0] prim_arsize ; + logic [7:0] prim_arlen ; + logic [UW-1:0] prim_aruser ; + logic [IW-1:0] prim_arid ; + logic prim_arlock ; + logic prim_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_read_if_monitor and fuse_ctrl_prim_axi_read_if_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_if_monitor_s fuse_ctrl_prim_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_if_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_if_initiator_s fuse_ctrl_prim_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_if_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_if_responder_s fuse_ctrl_prim_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_if_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_araddr:0x%x prim_arvalid:0x%x prim_arburst:0x%x prim_arsize:0x%x prim_arlen:0x%x prim_aruser:0x%x prim_arid:0x%x prim_arlock:0x%x prim_rready:0x%x ",prim_araddr,prim_arvalid,prim_arburst,prim_arsize,prim_arlen,prim_aruser,prim_arid,prim_arlock,prim_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_araddr = RHS.prim_araddr; + this.prim_arvalid = RHS.prim_arvalid; + this.prim_arburst = RHS.prim_arburst; + this.prim_arsize = RHS.prim_arsize; + this.prim_arlen = RHS.prim_arlen; + this.prim_aruser = RHS.prim_aruser; + this.prim_arid = RHS.prim_arid; + this.prim_arlock = RHS.prim_arlock; + this.prim_rready = RHS.prim_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_araddr,"prim_araddr"); + $add_attribute(transaction_view_h,prim_arvalid,"prim_arvalid"); + $add_attribute(transaction_view_h,prim_arburst,"prim_arburst"); + $add_attribute(transaction_view_h,prim_arsize,"prim_arsize"); + $add_attribute(transaction_view_h,prim_arlen,"prim_arlen"); + $add_attribute(transaction_view_h,prim_aruser,"prim_aruser"); + $add_attribute(transaction_view_h,prim_arid,"prim_arid"); + $add_attribute(transaction_view_h,prim_arlock,"prim_arlock"); + $add_attribute(transaction_view_h,prim_rready,"prim_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..283a0b24c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_read_if transaction information using +// a covergroup named fuse_ctrl_prim_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_araddr: coverpoint coverage_trans.prim_araddr; + prim_arvalid: coverpoint coverage_trans.prim_arvalid; + prim_arburst: coverpoint coverage_trans.prim_arburst; + prim_arsize: coverpoint coverage_trans.prim_arsize; + prim_arlen: coverpoint coverage_trans.prim_arlen; + prim_aruser: coverpoint coverage_trans.prim_aruser; + prim_arid: coverpoint coverage_trans.prim_arid; + prim_arlock: coverpoint coverage_trans.prim_arlock; + prim_rready: coverpoint coverage_trans.prim_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_read_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/yaml/fuse_ctrl_prim_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/yaml/fuse_ctrl_prim_axi_read_if_interface.yaml new file mode 100644 index 000000000..a55568558 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/yaml/fuse_ctrl_prim_axi_read_if_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: prim_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.project new file mode 100644 index 000000000..e3c0c4ae5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_read_in_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.svproject new file mode 100644 index 000000000..fef449edc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/Makefile new file mode 100644 index 000000000..65765f4e1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_read_in_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_read_in_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hvl.f + +fuse_ctrl_prim_axi_read_in_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hdl.f + +fuse_ctrl_prim_axi_read_in_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_read_in_if_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_read_in_if_pkg +COMP_fuse_ctrl_prim_axi_read_in_if_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_read_in_if_pkg +COMP_fuse_ctrl_prim_axi_read_in_if_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_read_in_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_read_in_if_pkg: $(COMP_fuse_ctrl_prim_axi_read_in_if_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_read_in_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_read_in_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_read_in_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_in_if_pkg += -I$(fuse_ctrl_prim_axi_read_in_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_in_if_pkg += $(fuse_ctrl_prim_axi_read_in_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_in_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_read_in_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_in_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_in_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/compile.do new file mode 100644 index 000000000..a0e911399 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_read_in_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if.compile new file mode 100644 index 000000000..43fd9c4de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_read_in_if_hvl.compile + - fuse_ctrl_prim_axi_read_in_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_bfm.vinfo new file mode 100644 index 000000000..395fd9b15 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_read_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_read_in_if_if.sv +src/fuse_ctrl_prim_axi_read_in_if_driver_bfm.sv +src/fuse_ctrl_prim_axi_read_in_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_common.compile new file mode 100644 index 000000000..906b7e2e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hdl.f new file mode 100644 index 000000000..9cdf065b2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hvl.f new file mode 100644 index 000000000..2450d1346 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_xrtl.f new file mode 100644 index 000000000..5634d3c6c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hdl.compile new file mode 100644 index 000000000..1483fae51 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_read_in_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_read_in_if_if.sv + - src/fuse_ctrl_prim_axi_read_in_if_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_read_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hvl.compile new file mode 100644 index 000000000..76c6ba103 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_read_in_if_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_read_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.sv new file mode 100644 index 000000000..41e089ed4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_in_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_read_in_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_read_in_if_macros.svh" + + export fuse_ctrl_prim_axi_read_in_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_read_in_if_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_read_in_if_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_if_configuration.svh" + `include "src/fuse_ctrl_prim_axi_read_in_if_driver.svh" + `include "src/fuse_ctrl_prim_axi_read_in_if_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_if_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_read_in_if_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_read_in_if_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_if_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_read_in_if2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.vinfo new file mode 100644 index 000000000..2cf3cfaf1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_read_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_read_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv new file mode 100644 index 000000000..9a998627f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_in_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_read_in_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_read_in_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.vinfo new file mode 100644 index 000000000..955dc6c9b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_sve.F new file mode 100644 index 000000000..bb7219efe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if2reg_adapter.svh new file mode 100644 index 000000000..573953654 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_read_in_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_read_in_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_read_in_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_agent.svh new file mode 100644 index 000000000..9780962c5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_read_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_read_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_read_in_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_configuration.svh new file mode 100644 index 000000000..efaafca0c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_read_in_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_read_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_read_in_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_read_in_if_configuration_s fuse_ctrl_prim_axi_read_in_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_read_in_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_if_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_read_in_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_read_in_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_read_in_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_read_in_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_in_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver.svh new file mode 100644 index 000000000..cc47e681a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_read_in_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_read_in_if_driver and fuse_ctrl_prim_axi_read_in_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_read_in_if_driver_bfm. +`fuse_ctrl_prim_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_in_if_initiator_s fuse_ctrl_prim_axi_read_in_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_read_in_if_driver and fuse_ctrl_prim_axi_read_in_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_read_in_if_driver_bfm. +`fuse_ctrl_prim_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_in_if_responder_s fuse_ctrl_prim_axi_read_in_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_read_in_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_read_in_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_read_in_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_read_in_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver_bfm.sv new file mode 100644 index 000000000..f1542cfed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_read_in_if signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_read_in_if driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_read_in_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_read_in_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_read_in_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_in_if_macros.svh" + +interface fuse_ctrl_prim_axi_read_in_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_read_in_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_in_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_read_in_if_pkg::fuse_ctrl_prim_axi_read_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_read_in_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_read_in_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_in_if_driver and fuse_ctrl_prim_axi_read_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_in_if_driver_bfm. + `fuse_ctrl_prim_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_in_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_read_in_if_driver and fuse_ctrl_prim_axi_read_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_in_if_driver_bfm. + `fuse_ctrl_prim_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_in_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_read_in_if_configuration_s fuse_ctrl_prim_axi_read_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_read_in_if_initiator_s fuse_ctrl_prim_axi_read_in_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_read_in_if_responder_s fuse_ctrl_prim_axi_read_in_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_read_in_if_initiator_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Members within the fuse_ctrl_prim_axi_read_in_if_responder_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + initiator_struct = fuse_ctrl_prim_axi_read_in_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_read_in_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_read_in_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_read_in_if_initiator_s fuse_ctrl_prim_axi_read_in_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_read_in_if_responder_s fuse_ctrl_prim_axi_read_in_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_read_in_if_initiator_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Variables within the fuse_ctrl_prim_axi_read_in_if_responder_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = arlock_i; // + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_read_in_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_read_in_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_if.sv new file mode 100644 index 000000000..b301c7050 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_read_in_if interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_read_in_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_read_in_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_read_in_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_in_if_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_read_in_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_macros.svh new file mode 100644 index 000000000..8ae1c0f22 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_read_in_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_read_in_if_configuration class. +// + `define fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_read_in_if_configuration_s; + + `define fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_if_configuration_s to_struct();\ + fuse_ctrl_prim_axi_read_in_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_read_in_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_read_in_if_configuration_s fuse_ctrl_prim_axi_read_in_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_read_in_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_read_in_if_transaction class. +// + `define fuse_ctrl_prim_axi_read_in_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_in_if_monitor_s; + + `define fuse_ctrl_prim_axi_read_in_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_if_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_read_in_if_monitor_struct = \ + { \ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_in_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_read_in_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_read_in_if_monitor_s fuse_ctrl_prim_axi_read_in_if_monitor_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_in_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_read_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_in_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_in_if_initiator_s; + + `define fuse_ctrl_prim_axi_read_in_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_if_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_read_in_if_initiator_struct = \ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_in_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_in_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_read_in_if_initiator_s fuse_ctrl_prim_axi_read_in_if_initiator_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_in_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_read_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_in_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_in_if_responder_s; + + `define fuse_ctrl_prim_axi_read_in_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_if_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_read_in_if_responder_struct = \ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_in_if_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_in_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_read_in_if_responder_s fuse_ctrl_prim_axi_read_in_if_responder_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_in_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor.svh new file mode 100644 index 000000000..b6411afc9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_read_in_if transactions observed by the +// fuse_ctrl_prim_axi_read_in_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_read_in_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_read_in_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_read_in_if_monitor_s fuse_ctrl_prim_axi_read_in_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_read_in_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor_bfm.sv new file mode 100644 index 000000000..96ecff71c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_read_in_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_read_in_if monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_read_in_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_read_in_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_read_in_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_in_if_macros.svh" + + +interface fuse_ctrl_prim_axi_read_in_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_read_in_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_in_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_read_in_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_in_if_monitor_s fuse_ctrl_prim_axi_read_in_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_read_in_if_pkg::fuse_ctrl_prim_axi_read_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_read_in_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_read_in_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_read_in_if_configuration_s fuse_ctrl_prim_axi_read_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_read_in_if_monitor_s fuse_ctrl_prim_axi_read_in_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_araddr + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_arvalid + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_arburst + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_arsize + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_arlen + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_aruser + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_arid + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_arlock + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_random_sequence.svh new file mode 100644 index 000000000..323a17c7d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_read_in_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_read_in_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_read_in_if_random_sequence::body()-fuse_ctrl_prim_axi_read_in_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_read_in_if_driver_bfm via the sequencer and fuse_ctrl_prim_axi_read_in_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_read_in_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_responder_sequence.svh new file mode 100644 index 000000000..8005d684e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_read_in_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_sequence_base.svh new file mode 100644 index 000000000..7642d22ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_in_if_transaction_req_t; + fuse_ctrl_prim_axi_read_in_if_transaction_req_t req; + typedef fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_in_if_transaction_rsp_t; + fuse_ctrl_prim_axi_read_in_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_read_in_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_read_in_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction.svh new file mode 100644 index 000000000..ed0bed0fc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_read_in_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] prim_araddr ; + logic prim_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + logic [2:0] prim_arsize ; + logic [7:0] prim_arlen ; + logic [UW-1:0] prim_aruser ; + logic [IW-1:0] prim_arid ; + logic prim_arlock ; + logic prim_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_read_in_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_read_in_if_monitor and fuse_ctrl_prim_axi_read_in_if_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_in_if_monitor_s fuse_ctrl_prim_axi_read_in_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_in_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_if_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_in_if_driver and fuse_ctrl_prim_axi_read_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_in_if_initiator_s fuse_ctrl_prim_axi_read_in_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_in_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_if_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_read_in_if_driver and fuse_ctrl_prim_axi_read_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_in_if_responder_s fuse_ctrl_prim_axi_read_in_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_in_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_if_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_araddr:0x%x prim_arvalid:0x%x prim_arburst:0x%x prim_arsize:0x%x prim_arlen:0x%x prim_aruser:0x%x prim_arid:0x%x prim_arlock:0x%x prim_rready:0x%x ",prim_araddr,prim_arvalid,prim_arburst,prim_arsize,prim_arlen,prim_aruser,prim_arid,prim_arlock,prim_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_araddr = RHS.prim_araddr; + this.prim_arvalid = RHS.prim_arvalid; + this.prim_arburst = RHS.prim_arburst; + this.prim_arsize = RHS.prim_arsize; + this.prim_arlen = RHS.prim_arlen; + this.prim_aruser = RHS.prim_aruser; + this.prim_arid = RHS.prim_arid; + this.prim_arlock = RHS.prim_arlock; + this.prim_rready = RHS.prim_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_read_in_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_araddr,"prim_araddr"); + $add_attribute(transaction_view_h,prim_arvalid,"prim_arvalid"); + $add_attribute(transaction_view_h,prim_arburst,"prim_arburst"); + $add_attribute(transaction_view_h,prim_arsize,"prim_arsize"); + $add_attribute(transaction_view_h,prim_arlen,"prim_arlen"); + $add_attribute(transaction_view_h,prim_aruser,"prim_aruser"); + $add_attribute(transaction_view_h,prim_arid,"prim_arid"); + $add_attribute(transaction_view_h,prim_arlock,"prim_arlock"); + $add_attribute(transaction_view_h,prim_rready,"prim_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction_coverage.svh new file mode 100644 index 000000000..59ee6af33 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_read_in_if transaction information using +// a covergroup named fuse_ctrl_prim_axi_read_in_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_read_in_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_araddr: coverpoint coverage_trans.prim_araddr; + prim_arvalid: coverpoint coverage_trans.prim_arvalid; + prim_arburst: coverpoint coverage_trans.prim_arburst; + prim_arsize: coverpoint coverage_trans.prim_arsize; + prim_arlen: coverpoint coverage_trans.prim_arlen; + prim_aruser: coverpoint coverage_trans.prim_aruser; + prim_arid: coverpoint coverage_trans.prim_arid; + prim_arlock: coverpoint coverage_trans.prim_arlock; + prim_rready: coverpoint coverage_trans.prim_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_read_in_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_read_in_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_in_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_read_in_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/yaml/fuse_ctrl_prim_axi_read_in_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/yaml/fuse_ctrl_prim_axi_read_in_if_interface.yaml new file mode 100644 index 000000000..8ef041734 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/yaml/fuse_ctrl_prim_axi_read_in_if_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_read_in_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: prim_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.project new file mode 100644 index 000000000..d0dba887e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_read_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.svproject new file mode 100644 index 000000000..7f5e878c7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/Makefile new file mode 100644 index 000000000..ff7476558 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_read_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_read_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hvl.f + +fuse_ctrl_prim_axi_read_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hdl.f + +fuse_ctrl_prim_axi_read_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_read_in_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_read_in_pkg +COMP_fuse_ctrl_prim_axi_read_in_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_read_in_pkg +COMP_fuse_ctrl_prim_axi_read_in_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_read_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_read_in_pkg: $(COMP_fuse_ctrl_prim_axi_read_in_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_read_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_read_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_read_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_read_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_read_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_in_pkg += -I$(fuse_ctrl_prim_axi_read_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_in_pkg += $(fuse_ctrl_prim_axi_read_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_read_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/compile.do new file mode 100644 index 000000000..d5afe8a68 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_read_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in.compile new file mode 100644 index 000000000..73650e4cb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_read_in_hvl.compile + - fuse_ctrl_prim_axi_read_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_bfm.vinfo new file mode 100644 index 000000000..8ed6f0d0a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_read_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_read_in_if.sv +src/fuse_ctrl_prim_axi_read_in_driver_bfm.sv +src/fuse_ctrl_prim_axi_read_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_common.compile new file mode 100644 index 000000000..ca43b4da1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hdl.f new file mode 100644 index 000000000..f0b99a312 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hvl.f new file mode 100644 index 000000000..8dcf1976e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_xrtl.f new file mode 100644 index 000000000..46c2aabe8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hdl.compile new file mode 100644 index 000000000..31d8fb131 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_read_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_read_in_if.sv + - src/fuse_ctrl_prim_axi_read_in_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_read_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hvl.compile new file mode 100644 index 000000000..7c7cc34c5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_read_in_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_read_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.sv new file mode 100644 index 000000000..2e29485bd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_read_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_read_in_macros.svh" + + export fuse_ctrl_prim_axi_read_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_read_in_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_read_in_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_configuration.svh" + `include "src/fuse_ctrl_prim_axi_read_in_driver.svh" + `include "src/fuse_ctrl_prim_axi_read_in_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_read_in_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_read_in_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_read_in2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.vinfo new file mode 100644 index 000000000..7f62c3037 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_read_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_read_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.sv new file mode 100644 index 000000000..f771faa9d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_read_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_read_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.vinfo new file mode 100644 index 000000000..eb67953c1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_sve.F new file mode 100644 index 000000000..ce8af1688 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in2reg_adapter.svh new file mode 100644 index 000000000..2c9b99ecd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_read_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_read_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_read_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_agent.svh new file mode 100644 index 000000000..b2ff8a6c4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_read_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_read_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_read_in_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_configuration.svh new file mode 100644 index 000000000..7692603a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_read_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_read_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_read_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_read_in_configuration_s fuse_ctrl_prim_axi_read_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_read_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_read_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_read_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_read_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_read_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver.svh new file mode 100644 index 000000000..47ced3bf4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_read_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_read_in_driver and fuse_ctrl_prim_axi_read_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_read_in_driver_bfm. +`fuse_ctrl_prim_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_in_initiator_s fuse_ctrl_prim_axi_read_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_read_in_driver and fuse_ctrl_prim_axi_read_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_read_in_driver_bfm. +`fuse_ctrl_prim_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_in_responder_s fuse_ctrl_prim_axi_read_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_read_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_read_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_read_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_read_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver_bfm.sv new file mode 100644 index 000000000..a3f220a11 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_read_in signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_read_in driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_read_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_read_in_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_read_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_in_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_in_macros.svh" + +interface fuse_ctrl_prim_axi_read_in_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_read_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_read_in_pkg::fuse_ctrl_prim_axi_read_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_read_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_read_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_read_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_in_driver and fuse_ctrl_prim_axi_read_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_in_driver_bfm. + `fuse_ctrl_prim_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_read_in_driver and fuse_ctrl_prim_axi_read_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_in_driver_bfm. + `fuse_ctrl_prim_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_read_in_configuration_s fuse_ctrl_prim_axi_read_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_read_in_initiator_s fuse_ctrl_prim_axi_read_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_read_in_responder_s fuse_ctrl_prim_axi_read_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_read_in_initiator_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Members within the fuse_ctrl_prim_axi_read_in_responder_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + initiator_struct = fuse_ctrl_prim_axi_read_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_read_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_read_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_read_in_initiator_s fuse_ctrl_prim_axi_read_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_read_in_responder_s fuse_ctrl_prim_axi_read_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_read_in_initiator_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Variables within the fuse_ctrl_prim_axi_read_in_responder_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = arlock_i; // + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_read_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_read_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_if.sv new file mode 100644 index 000000000..f7a4f7b73 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_read_in interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_read_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_read_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_read_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_in_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_read_in_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_macros.svh new file mode 100644 index 000000000..ba93fd264 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_read_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_read_in_configuration class. +// + `define fuse_ctrl_prim_axi_read_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_read_in_configuration_s; + + `define fuse_ctrl_prim_axi_read_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_configuration_s to_struct();\ + fuse_ctrl_prim_axi_read_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_read_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_read_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_read_in_configuration_s fuse_ctrl_prim_axi_read_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_read_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_read_in_transaction class. +// + `define fuse_ctrl_prim_axi_read_in_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_in_monitor_s; + + `define fuse_ctrl_prim_axi_read_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_read_in_monitor_struct = \ + { \ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_read_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_read_in_monitor_s fuse_ctrl_prim_axi_read_in_monitor_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_read_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_in_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_in_initiator_s; + + `define fuse_ctrl_prim_axi_read_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_read_in_initiator_struct = \ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_read_in_initiator_s fuse_ctrl_prim_axi_read_in_initiator_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_read_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_in_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_in_responder_s; + + `define fuse_ctrl_prim_axi_read_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_read_in_responder_struct = \ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_in_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_read_in_responder_s fuse_ctrl_prim_axi_read_in_responder_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor.svh new file mode 100644 index 000000000..1c3949390 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_read_in transactions observed by the +// fuse_ctrl_prim_axi_read_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_read_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_read_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_read_in_monitor_s fuse_ctrl_prim_axi_read_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_read_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor_bfm.sv new file mode 100644 index 000000000..efa2c9f98 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_read_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_read_in monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_read_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_read_in_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_read_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_in_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_in_macros.svh" + + +interface fuse_ctrl_prim_axi_read_in_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_read_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_read_in_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_in_monitor_s fuse_ctrl_prim_axi_read_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_read_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_read_in_pkg::fuse_ctrl_prim_axi_read_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_read_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_read_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_read_in_configuration_s fuse_ctrl_prim_axi_read_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_read_in_monitor_s fuse_ctrl_prim_axi_read_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_araddr + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_arvalid + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_arburst + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_arsize + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_arlen + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_aruser + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_arid + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_arlock + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_random_sequence.svh new file mode 100644 index 000000000..1cb563fc1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_read_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_read_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_read_in_random_sequence::body()-fuse_ctrl_prim_axi_read_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_read_in_driver_bfm via the sequencer and fuse_ctrl_prim_axi_read_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_read_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_responder_sequence.svh new file mode 100644 index 000000000..3a60a5cf8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_read_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_sequence_base.svh new file mode 100644 index 000000000..7c8932c6b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_in_transaction_req_t; + fuse_ctrl_prim_axi_read_in_transaction_req_t req; + typedef fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_in_transaction_rsp_t; + fuse_ctrl_prim_axi_read_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_read_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_read_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction.svh new file mode 100644 index 000000000..601cca308 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_read_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] prim_araddr ; + logic prim_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + logic [2:0] prim_arsize ; + logic [7:0] prim_arlen ; + logic [UW-1:0] prim_aruser ; + logic [IW-1:0] prim_arid ; + logic prim_arlock ; + logic prim_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_read_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_read_in_monitor and fuse_ctrl_prim_axi_read_in_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_in_monitor_s fuse_ctrl_prim_axi_read_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_in_driver and fuse_ctrl_prim_axi_read_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_in_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_in_initiator_s fuse_ctrl_prim_axi_read_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_read_in_driver and fuse_ctrl_prim_axi_read_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_in_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_in_responder_s fuse_ctrl_prim_axi_read_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_araddr:0x%x prim_arvalid:0x%x prim_arburst:0x%x prim_arsize:0x%x prim_arlen:0x%x prim_aruser:0x%x prim_arid:0x%x prim_arlock:0x%x prim_rready:0x%x ",prim_araddr,prim_arvalid,prim_arburst,prim_arsize,prim_arlen,prim_aruser,prim_arid,prim_arlock,prim_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_araddr = RHS.prim_araddr; + this.prim_arvalid = RHS.prim_arvalid; + this.prim_arburst = RHS.prim_arburst; + this.prim_arsize = RHS.prim_arsize; + this.prim_arlen = RHS.prim_arlen; + this.prim_aruser = RHS.prim_aruser; + this.prim_arid = RHS.prim_arid; + this.prim_arlock = RHS.prim_arlock; + this.prim_rready = RHS.prim_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_read_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_araddr,"prim_araddr"); + $add_attribute(transaction_view_h,prim_arvalid,"prim_arvalid"); + $add_attribute(transaction_view_h,prim_arburst,"prim_arburst"); + $add_attribute(transaction_view_h,prim_arsize,"prim_arsize"); + $add_attribute(transaction_view_h,prim_arlen,"prim_arlen"); + $add_attribute(transaction_view_h,prim_aruser,"prim_aruser"); + $add_attribute(transaction_view_h,prim_arid,"prim_arid"); + $add_attribute(transaction_view_h,prim_arlock,"prim_arlock"); + $add_attribute(transaction_view_h,prim_rready,"prim_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction_coverage.svh new file mode 100644 index 000000000..9315e32d7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_read_in transaction information using +// a covergroup named fuse_ctrl_prim_axi_read_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_read_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_araddr: coverpoint coverage_trans.prim_araddr; + prim_arvalid: coverpoint coverage_trans.prim_arvalid; + prim_arburst: coverpoint coverage_trans.prim_arburst; + prim_arsize: coverpoint coverage_trans.prim_arsize; + prim_arlen: coverpoint coverage_trans.prim_arlen; + prim_aruser: coverpoint coverage_trans.prim_aruser; + prim_arid: coverpoint coverage_trans.prim_arid; + prim_arlock: coverpoint coverage_trans.prim_arlock; + prim_rready: coverpoint coverage_trans.prim_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_read_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_read_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_read_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/yaml/fuse_ctrl_prim_axi_read_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/yaml/fuse_ctrl_prim_axi_read_in_interface.yaml new file mode 100644 index 000000000..722b47650 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/yaml/fuse_ctrl_prim_axi_read_in_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_read_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: prim_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.project new file mode 100644 index 000000000..383395618 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_read_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.svproject new file mode 100644 index 000000000..b202873ab --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/Makefile new file mode 100644 index 000000000..4e9d0fe18 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_read_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_read_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hvl.f + +fuse_ctrl_prim_axi_read_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hdl.f + +fuse_ctrl_prim_axi_read_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_read_out_if_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_read_out_if_pkg +COMP_fuse_ctrl_prim_axi_read_out_if_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_read_out_if_pkg +COMP_fuse_ctrl_prim_axi_read_out_if_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_read_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_read_out_if_pkg: $(COMP_fuse_ctrl_prim_axi_read_out_if_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_read_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_read_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_read_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_out_if_pkg += -I$(fuse_ctrl_prim_axi_read_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_out_if_pkg += $(fuse_ctrl_prim_axi_read_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_out_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_read_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/compile.do new file mode 100644 index 000000000..7c3781f3f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_read_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if.compile new file mode 100644 index 000000000..38953a316 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_read_out_if_hvl.compile + - fuse_ctrl_prim_axi_read_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_bfm.vinfo new file mode 100644 index 000000000..964634f61 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_read_out_if_if.sv +src/fuse_ctrl_prim_axi_read_out_if_driver_bfm.sv +src/fuse_ctrl_prim_axi_read_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_common.compile new file mode 100644 index 000000000..317b5d7ac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hdl.f new file mode 100644 index 000000000..0c9029736 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hvl.f new file mode 100644 index 000000000..9ee108d67 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_xrtl.f new file mode 100644 index 000000000..fbbf739cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hdl.compile new file mode 100644 index 000000000..06fb80cd7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_read_out_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_read_out_if_if.sv + - src/fuse_ctrl_prim_axi_read_out_if_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hvl.compile new file mode 100644 index 000000000..e8c82fe46 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_read_out_if_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.sv new file mode 100644 index 000000000..cb08be3f6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_read_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_read_out_if_macros.svh" + + export fuse_ctrl_prim_axi_read_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_read_out_if_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_read_out_if_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_if_configuration.svh" + `include "src/fuse_ctrl_prim_axi_read_out_if_driver.svh" + `include "src/fuse_ctrl_prim_axi_read_out_if_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_if_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_read_out_if_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_read_out_if_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_if_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_read_out_if2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.vinfo new file mode 100644 index 000000000..e405462b7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv new file mode 100644 index 000000000..09ecb0eef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_read_out_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_read_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..4f06d25c2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_sve.F new file mode 100644 index 000000000..5efb9cf26 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if2reg_adapter.svh new file mode 100644 index 000000000..3b4b607bb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_read_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_read_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_read_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_agent.svh new file mode 100644 index 000000000..7c0be008b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_read_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_configuration.svh new file mode 100644 index 000000000..300f44e63 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_read_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_read_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_read_out_if_configuration_s fuse_ctrl_prim_axi_read_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_read_out_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_if_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_read_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_read_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_read_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_read_out_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver.svh new file mode 100644 index 000000000..84cb7a06a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_read_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_read_out_if_driver and fuse_ctrl_prim_axi_read_out_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_read_out_if_driver_bfm. +`fuse_ctrl_prim_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_out_if_initiator_s fuse_ctrl_prim_axi_read_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_read_out_if_driver and fuse_ctrl_prim_axi_read_out_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_read_out_if_driver_bfm. +`fuse_ctrl_prim_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_out_if_responder_s fuse_ctrl_prim_axi_read_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_read_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_read_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_read_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_read_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver_bfm.sv new file mode 100644 index 000000000..4beaa864a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_read_out_if signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_read_out_if driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_read_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_read_out_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_read_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_out_if_macros.svh" + +interface fuse_ctrl_prim_axi_read_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_read_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_read_out_if_pkg::fuse_ctrl_prim_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_read_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_read_out_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_out_if_driver and fuse_ctrl_prim_axi_read_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_out_if_driver_bfm. + `fuse_ctrl_prim_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_read_out_if_driver and fuse_ctrl_prim_axi_read_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_out_if_driver_bfm. + `fuse_ctrl_prim_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_read_out_if_configuration_s fuse_ctrl_prim_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_read_out_if_initiator_s fuse_ctrl_prim_axi_read_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_read_out_if_responder_s fuse_ctrl_prim_axi_read_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_read_out_if_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Members within the fuse_ctrl_prim_axi_read_out_if_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + initiator_struct = fuse_ctrl_prim_axi_read_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_prim_axi_read_out_if_responder_struct.xyz = arready_i; // + // fuse_ctrl_prim_axi_read_out_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_read_out_if_responder_struct.xyz = rresp_i; // + // fuse_ctrl_prim_axi_read_out_if_responder_struct.xyz = rid_i; // + // fuse_ctrl_prim_axi_read_out_if_responder_struct.xyz = rlast_i; // + // fuse_ctrl_prim_axi_read_out_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_read_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_read_out_if_initiator_s fuse_ctrl_prim_axi_read_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_read_out_if_responder_s fuse_ctrl_prim_axi_read_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_read_out_if_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Variables within the fuse_ctrl_prim_axi_read_out_if_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= fuse_ctrl_prim_axi_read_out_if_initiator_struct.xyz; // + // rdata_o <= fuse_ctrl_prim_axi_read_out_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= fuse_ctrl_prim_axi_read_out_if_initiator_struct.xyz; // + // rid_o <= fuse_ctrl_prim_axi_read_out_if_initiator_struct.xyz; // + // rlast_o <= fuse_ctrl_prim_axi_read_out_if_initiator_struct.xyz; // + // rvalid_o <= fuse_ctrl_prim_axi_read_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_read_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_if.sv new file mode 100644 index 000000000..5819fef10 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_read_out_if interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_read_out_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_read_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_read_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_if_bus.arready), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_if_bus.rdata), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_if_bus.rresp), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_if_bus.rid), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_if_bus.rlast), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_out_if_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_read_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_macros.svh new file mode 100644 index 000000000..c5e996d07 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_read_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_read_out_if_configuration class. +// + `define fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_read_out_if_configuration_s; + + `define fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_if_configuration_s to_struct();\ + fuse_ctrl_prim_axi_read_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_read_out_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_read_out_if_configuration_s fuse_ctrl_prim_axi_read_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_read_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_read_out_if_transaction class. +// + `define fuse_ctrl_prim_axi_read_out_if_MONITOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } fuse_ctrl_prim_axi_read_out_if_monitor_s; + + `define fuse_ctrl_prim_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_if_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_read_out_if_monitor_struct = \ + { \ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( fuse_ctrl_prim_axi_read_out_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_read_out_if_monitor_s fuse_ctrl_prim_axi_read_out_if_monitor_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = fuse_ctrl_prim_axi_read_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } fuse_ctrl_prim_axi_read_out_if_initiator_s; + + `define fuse_ctrl_prim_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_if_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_read_out_if_initiator_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( fuse_ctrl_prim_axi_read_out_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_read_out_if_initiator_s fuse_ctrl_prim_axi_read_out_if_initiator_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = fuse_ctrl_prim_axi_read_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } fuse_ctrl_prim_axi_read_out_if_responder_s; + + `define fuse_ctrl_prim_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_if_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_read_out_if_responder_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( fuse_ctrl_prim_axi_read_out_if_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_read_out_if_responder_s fuse_ctrl_prim_axi_read_out_if_responder_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = fuse_ctrl_prim_axi_read_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor.svh new file mode 100644 index 000000000..5c5ffaeeb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_read_out_if transactions observed by the +// fuse_ctrl_prim_axi_read_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_read_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_read_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_read_out_if_monitor_s fuse_ctrl_prim_axi_read_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_read_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor_bfm.sv new file mode 100644 index 000000000..c4c0ad5d3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_read_out_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_read_out_if monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_read_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_read_out_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_read_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_out_if_macros.svh" + + +interface fuse_ctrl_prim_axi_read_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_read_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_read_out_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_out_if_monitor_s fuse_ctrl_prim_axi_read_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_read_out_if_pkg::fuse_ctrl_prim_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_read_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_read_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_read_out_if_configuration_s fuse_ctrl_prim_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_read_out_if_monitor_s fuse_ctrl_prim_axi_read_out_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_read_out_if_monitor_struct.prim_arready + // // fuse_ctrl_prim_axi_read_out_if_monitor_struct.prim_rdata + // // fuse_ctrl_prim_axi_read_out_if_monitor_struct.prim_rresp + // // fuse_ctrl_prim_axi_read_out_if_monitor_struct.prim_rid + // // fuse_ctrl_prim_axi_read_out_if_monitor_struct.prim_rlast + // // fuse_ctrl_prim_axi_read_out_if_monitor_struct.prim_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_read_out_if_monitor_struct.xyz = arready_i; // + // fuse_ctrl_prim_axi_read_out_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_read_out_if_monitor_struct.xyz = rresp_i; // + // fuse_ctrl_prim_axi_read_out_if_monitor_struct.xyz = rid_i; // + // fuse_ctrl_prim_axi_read_out_if_monitor_struct.xyz = rlast_i; // + // fuse_ctrl_prim_axi_read_out_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_random_sequence.svh new file mode 100644 index 000000000..cb283839d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_read_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_read_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_read_out_if_random_sequence::body()-fuse_ctrl_prim_axi_read_out_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_read_out_if_driver_bfm via the sequencer and fuse_ctrl_prim_axi_read_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_read_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_responder_sequence.svh new file mode 100644 index 000000000..2b38158de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_read_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_sequence_base.svh new file mode 100644 index 000000000..8138bfaf3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_out_if_transaction_req_t; + fuse_ctrl_prim_axi_read_out_if_transaction_req_t req; + typedef fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_out_if_transaction_rsp_t; + fuse_ctrl_prim_axi_read_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_read_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_read_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction.svh new file mode 100644 index 000000000..fdce68486 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_read_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_arready ; + logic [DW-1:0] prim_rdata ; + axi_pkg::axi_burst_e prim_rresp ; + logic [IW-1:0] prim_rid ; + logic prim_rlast ; + logic prim_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_read_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_read_out_if_monitor and fuse_ctrl_prim_axi_read_out_if_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_out_if_monitor_s fuse_ctrl_prim_axi_read_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_out_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_if_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_out_if_driver and fuse_ctrl_prim_axi_read_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_out_if_initiator_s fuse_ctrl_prim_axi_read_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_out_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_if_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_read_out_if_driver and fuse_ctrl_prim_axi_read_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_out_if_responder_s fuse_ctrl_prim_axi_read_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_out_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_if_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_arready:0x%x prim_rdata:0x%x prim_rresp:0x%x prim_rid:0x%x prim_rlast:0x%x prim_rvalid:0x%x ",prim_arready,prim_rdata,prim_rresp,prim_rid,prim_rlast,prim_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_arready == RHS.prim_arready) + &&(this.prim_rdata == RHS.prim_rdata) + &&(this.prim_rresp == RHS.prim_rresp) + &&(this.prim_rid == RHS.prim_rid) + &&(this.prim_rlast == RHS.prim_rlast) + &&(this.prim_rvalid == RHS.prim_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_arready = RHS.prim_arready; + this.prim_rdata = RHS.prim_rdata; + this.prim_rresp = RHS.prim_rresp; + this.prim_rid = RHS.prim_rid; + this.prim_rlast = RHS.prim_rlast; + this.prim_rvalid = RHS.prim_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_read_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_arready,"prim_arready"); + $add_attribute(transaction_view_h,prim_rdata,"prim_rdata"); + $add_attribute(transaction_view_h,prim_rresp,"prim_rresp"); + $add_attribute(transaction_view_h,prim_rid,"prim_rid"); + $add_attribute(transaction_view_h,prim_rlast,"prim_rlast"); + $add_attribute(transaction_view_h,prim_rvalid,"prim_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction_coverage.svh new file mode 100644 index 000000000..ea69c07a1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_read_out_if transaction information using +// a covergroup named fuse_ctrl_prim_axi_read_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_read_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_arready: coverpoint coverage_trans.prim_arready; + prim_rdata: coverpoint coverage_trans.prim_rdata; + prim_rresp: coverpoint coverage_trans.prim_rresp; + prim_rid: coverpoint coverage_trans.prim_rid; + prim_rlast: coverpoint coverage_trans.prim_rlast; + prim_rvalid: coverpoint coverage_trans.prim_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_read_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_read_out_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_read_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/yaml/fuse_ctrl_prim_axi_read_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/yaml/fuse_ctrl_prim_axi_read_out_if_interface.yaml new file mode 100644 index 000000000..5d9e6555a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/yaml/fuse_ctrl_prim_axi_read_out_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_read_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.project new file mode 100644 index 000000000..a150c2600 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_read_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.svproject new file mode 100644 index 000000000..07283b071 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/Makefile new file mode 100644 index 000000000..c82fb10fe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_read_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_read_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hvl.f + +fuse_ctrl_prim_axi_read_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hdl.f + +fuse_ctrl_prim_axi_read_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_read_out_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_read_out_pkg +COMP_fuse_ctrl_prim_axi_read_out_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_read_out_pkg +COMP_fuse_ctrl_prim_axi_read_out_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_read_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_read_out_pkg: $(COMP_fuse_ctrl_prim_axi_read_out_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_read_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_read_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_read_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_read_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_read_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_out_pkg += -I$(fuse_ctrl_prim_axi_read_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_out_pkg += $(fuse_ctrl_prim_axi_read_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_read_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/compile.do new file mode 100644 index 000000000..1f3f42509 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_read_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out.compile new file mode 100644 index 000000000..3ae619a60 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_read_out_hvl.compile + - fuse_ctrl_prim_axi_read_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_bfm.vinfo new file mode 100644 index 000000000..804bedee2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_read_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_read_out_if.sv +src/fuse_ctrl_prim_axi_read_out_driver_bfm.sv +src/fuse_ctrl_prim_axi_read_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_common.compile new file mode 100644 index 000000000..473bd1034 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hdl.f new file mode 100644 index 000000000..9915fab63 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hvl.f new file mode 100644 index 000000000..c105f6ac9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_xrtl.f new file mode 100644 index 000000000..efd90f559 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hdl.compile new file mode 100644 index 000000000..3110b6364 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_read_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_read_out_if.sv + - src/fuse_ctrl_prim_axi_read_out_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_read_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hvl.compile new file mode 100644 index 000000000..5f022ac42 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_read_out_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_read_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.sv new file mode 100644 index 000000000..d12ebea63 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_read_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_read_out_macros.svh" + + export fuse_ctrl_prim_axi_read_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_read_out_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_read_out_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_configuration.svh" + `include "src/fuse_ctrl_prim_axi_read_out_driver.svh" + `include "src/fuse_ctrl_prim_axi_read_out_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_read_out_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_read_out_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_read_out2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.vinfo new file mode 100644 index 000000000..ce44bd3e7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_read_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_read_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.sv new file mode 100644 index 000000000..3a6641be3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_read_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_read_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.vinfo new file mode 100644 index 000000000..d2706f6b1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_sve.F new file mode 100644 index 000000000..e27a4496e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out2reg_adapter.svh new file mode 100644 index 000000000..6d0791b2d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_read_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_read_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_read_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_agent.svh new file mode 100644 index 000000000..4ecac4aa1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_read_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_read_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_read_out_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_configuration.svh new file mode 100644 index 000000000..04a822d95 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_read_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_read_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_read_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_read_out_configuration_s fuse_ctrl_prim_axi_read_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_read_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_read_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_read_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_read_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_read_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver.svh new file mode 100644 index 000000000..706e00774 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_read_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_read_out_driver and fuse_ctrl_prim_axi_read_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_read_out_driver_bfm. +`fuse_ctrl_prim_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_out_initiator_s fuse_ctrl_prim_axi_read_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_read_out_driver and fuse_ctrl_prim_axi_read_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_read_out_driver_bfm. +`fuse_ctrl_prim_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_out_responder_s fuse_ctrl_prim_axi_read_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_read_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_read_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_read_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_read_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver_bfm.sv new file mode 100644 index 000000000..f23f7c67a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_read_out signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_read_out driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_read_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_read_out_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_read_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_out_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_out_macros.svh" + +interface fuse_ctrl_prim_axi_read_out_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_read_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_read_out_pkg::fuse_ctrl_prim_axi_read_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_read_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_read_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_read_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_out_driver and fuse_ctrl_prim_axi_read_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_out_driver_bfm. + `fuse_ctrl_prim_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_read_out_driver and fuse_ctrl_prim_axi_read_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_out_driver_bfm. + `fuse_ctrl_prim_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_read_out_configuration_s fuse_ctrl_prim_axi_read_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_read_out_initiator_s fuse_ctrl_prim_axi_read_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_read_out_responder_s fuse_ctrl_prim_axi_read_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_read_out_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Members within the fuse_ctrl_prim_axi_read_out_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + initiator_struct = fuse_ctrl_prim_axi_read_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_prim_axi_read_out_responder_struct.xyz = arready_i; // + // fuse_ctrl_prim_axi_read_out_responder_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_read_out_responder_struct.xyz = rresp_i; // + // fuse_ctrl_prim_axi_read_out_responder_struct.xyz = rid_i; // + // fuse_ctrl_prim_axi_read_out_responder_struct.xyz = rlast_i; // + // fuse_ctrl_prim_axi_read_out_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_read_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_read_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_read_out_initiator_s fuse_ctrl_prim_axi_read_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_read_out_responder_s fuse_ctrl_prim_axi_read_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_read_out_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Variables within the fuse_ctrl_prim_axi_read_out_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= fuse_ctrl_prim_axi_read_out_initiator_struct.xyz; // + // rdata_o <= fuse_ctrl_prim_axi_read_out_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= fuse_ctrl_prim_axi_read_out_initiator_struct.xyz; // + // rid_o <= fuse_ctrl_prim_axi_read_out_initiator_struct.xyz; // + // rlast_o <= fuse_ctrl_prim_axi_read_out_initiator_struct.xyz; // + // rvalid_o <= fuse_ctrl_prim_axi_read_out_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_read_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_read_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_if.sv new file mode 100644 index 000000000..1f59430f9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_read_out interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_read_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_read_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_read_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_bus.arready), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_bus.rdata), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_bus.rresp), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_bus.rid), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_bus.rlast), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_out_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_read_out_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_macros.svh new file mode 100644 index 000000000..a5d9e29df --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_read_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_read_out_configuration class. +// + `define fuse_ctrl_prim_axi_read_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_read_out_configuration_s; + + `define fuse_ctrl_prim_axi_read_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_configuration_s to_struct();\ + fuse_ctrl_prim_axi_read_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_read_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_read_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_read_out_configuration_s fuse_ctrl_prim_axi_read_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_read_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_read_out_transaction class. +// + `define fuse_ctrl_prim_axi_read_out_MONITOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } fuse_ctrl_prim_axi_read_out_monitor_s; + + `define fuse_ctrl_prim_axi_read_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_read_out_monitor_struct = \ + { \ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( fuse_ctrl_prim_axi_read_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_read_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_read_out_monitor_s fuse_ctrl_prim_axi_read_out_monitor_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = fuse_ctrl_prim_axi_read_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_read_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_out_INITIATOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } fuse_ctrl_prim_axi_read_out_initiator_s; + + `define fuse_ctrl_prim_axi_read_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_read_out_initiator_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( fuse_ctrl_prim_axi_read_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_read_out_initiator_s fuse_ctrl_prim_axi_read_out_initiator_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = fuse_ctrl_prim_axi_read_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_read_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_out_RESPONDER_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } fuse_ctrl_prim_axi_read_out_responder_s; + + `define fuse_ctrl_prim_axi_read_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_read_out_responder_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( fuse_ctrl_prim_axi_read_out_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_read_out_responder_s fuse_ctrl_prim_axi_read_out_responder_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = fuse_ctrl_prim_axi_read_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor.svh new file mode 100644 index 000000000..a47648e00 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_read_out transactions observed by the +// fuse_ctrl_prim_axi_read_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_read_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_read_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_read_out_monitor_s fuse_ctrl_prim_axi_read_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_read_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor_bfm.sv new file mode 100644 index 000000000..8aae56b3d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_read_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_read_out monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_read_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_read_out_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_read_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_out_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_out_macros.svh" + + +interface fuse_ctrl_prim_axi_read_out_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_read_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_read_out_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_out_monitor_s fuse_ctrl_prim_axi_read_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_read_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_read_out_pkg::fuse_ctrl_prim_axi_read_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_read_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_read_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_read_out_configuration_s fuse_ctrl_prim_axi_read_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_read_out_monitor_s fuse_ctrl_prim_axi_read_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_read_out_monitor_struct.prim_arready + // // fuse_ctrl_prim_axi_read_out_monitor_struct.prim_rdata + // // fuse_ctrl_prim_axi_read_out_monitor_struct.prim_rresp + // // fuse_ctrl_prim_axi_read_out_monitor_struct.prim_rid + // // fuse_ctrl_prim_axi_read_out_monitor_struct.prim_rlast + // // fuse_ctrl_prim_axi_read_out_monitor_struct.prim_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_read_out_monitor_struct.xyz = arready_i; // + // fuse_ctrl_prim_axi_read_out_monitor_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_read_out_monitor_struct.xyz = rresp_i; // + // fuse_ctrl_prim_axi_read_out_monitor_struct.xyz = rid_i; // + // fuse_ctrl_prim_axi_read_out_monitor_struct.xyz = rlast_i; // + // fuse_ctrl_prim_axi_read_out_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_random_sequence.svh new file mode 100644 index 000000000..869532e93 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_read_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_read_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_read_out_random_sequence::body()-fuse_ctrl_prim_axi_read_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_read_out_driver_bfm via the sequencer and fuse_ctrl_prim_axi_read_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_read_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_responder_sequence.svh new file mode 100644 index 000000000..f27579be3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_read_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_sequence_base.svh new file mode 100644 index 000000000..fb9238126 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_out_transaction_req_t; + fuse_ctrl_prim_axi_read_out_transaction_req_t req; + typedef fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_out_transaction_rsp_t; + fuse_ctrl_prim_axi_read_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_read_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_read_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction.svh new file mode 100644 index 000000000..4eda4dfd7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_read_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_arready ; + logic [DW-1:0] prim_rdata ; + axi_pkg::axi_burst_e prim_rresp ; + logic [IW-1:0] prim_rid ; + logic prim_rlast ; + logic prim_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_read_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_read_out_monitor and fuse_ctrl_prim_axi_read_out_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_out_monitor_s fuse_ctrl_prim_axi_read_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_out_driver and fuse_ctrl_prim_axi_read_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_out_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_out_initiator_s fuse_ctrl_prim_axi_read_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_read_out_driver and fuse_ctrl_prim_axi_read_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_out_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_out_responder_s fuse_ctrl_prim_axi_read_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_arready:0x%x prim_rdata:0x%x prim_rresp:0x%x prim_rid:0x%x prim_rlast:0x%x prim_rvalid:0x%x ",prim_arready,prim_rdata,prim_rresp,prim_rid,prim_rlast,prim_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_arready == RHS.prim_arready) + &&(this.prim_rdata == RHS.prim_rdata) + &&(this.prim_rresp == RHS.prim_rresp) + &&(this.prim_rid == RHS.prim_rid) + &&(this.prim_rlast == RHS.prim_rlast) + &&(this.prim_rvalid == RHS.prim_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_arready = RHS.prim_arready; + this.prim_rdata = RHS.prim_rdata; + this.prim_rresp = RHS.prim_rresp; + this.prim_rid = RHS.prim_rid; + this.prim_rlast = RHS.prim_rlast; + this.prim_rvalid = RHS.prim_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_read_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_arready,"prim_arready"); + $add_attribute(transaction_view_h,prim_rdata,"prim_rdata"); + $add_attribute(transaction_view_h,prim_rresp,"prim_rresp"); + $add_attribute(transaction_view_h,prim_rid,"prim_rid"); + $add_attribute(transaction_view_h,prim_rlast,"prim_rlast"); + $add_attribute(transaction_view_h,prim_rvalid,"prim_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction_coverage.svh new file mode 100644 index 000000000..b701f57c1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_read_out transaction information using +// a covergroup named fuse_ctrl_prim_axi_read_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_read_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_arready: coverpoint coverage_trans.prim_arready; + prim_rdata: coverpoint coverage_trans.prim_rdata; + prim_rresp: coverpoint coverage_trans.prim_rresp; + prim_rid: coverpoint coverage_trans.prim_rid; + prim_rlast: coverpoint coverage_trans.prim_rlast; + prim_rvalid: coverpoint coverage_trans.prim_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_read_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_read_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_read_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/yaml/fuse_ctrl_prim_axi_read_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/yaml/fuse_ctrl_prim_axi_read_out_interface.yaml new file mode 100644 index 000000000..518e6a1ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/yaml/fuse_ctrl_prim_axi_read_out_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_read_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.project new file mode 100644 index 000000000..1d2b3a2b3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_write_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.svproject new file mode 100644 index 000000000..378d11293 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/Makefile new file mode 100644 index 000000000..e0851422c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_write_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_write_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f + +fuse_ctrl_prim_axi_write_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f + +fuse_ctrl_prim_axi_write_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_write_if_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_write_if_pkg +COMP_fuse_ctrl_prim_axi_write_if_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_write_if_pkg +COMP_fuse_ctrl_prim_axi_write_if_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_write_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_write_if_pkg: $(COMP_fuse_ctrl_prim_axi_write_if_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_write_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_write_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_write_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_write_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_write_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_if_pkg += -I$(fuse_ctrl_prim_axi_write_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_if_pkg += $(fuse_ctrl_prim_axi_write_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_write_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/compile.do new file mode 100644 index 000000000..e542958e1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_write_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if.compile new file mode 100644 index 000000000..5809b76c4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_write_if_hvl.compile + - fuse_ctrl_prim_axi_write_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_bfm.vinfo new file mode 100644 index 000000000..6c5f5cfbb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_write_if_if.sv +src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv +src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_common.compile new file mode 100644 index 000000000..dde3d0d7f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f new file mode 100644 index 000000000..11983b34a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f new file mode 100644 index 000000000..16c93aac2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f new file mode 100644 index 000000000..8e0817f98 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hdl.compile new file mode 100644 index 000000000..ff56c3bc8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_write_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_write_if_if.sv + - src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hvl.compile new file mode 100644 index 000000000..a21321c58 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_write_if_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.sv new file mode 100644 index 000000000..886790867 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_write_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_write_if_macros.svh" + + export fuse_ctrl_prim_axi_write_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_write_if_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_write_if_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_write_if_configuration.svh" + `include "src/fuse_ctrl_prim_axi_write_if_driver.svh" + `include "src/fuse_ctrl_prim_axi_write_if_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_write_if_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_write_if_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_write_if_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_write_if_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_write_if2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_write_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.vinfo new file mode 100644 index 000000000..51f12e079 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.sv new file mode 100644 index 000000000..7998fdf63 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_write_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_write_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo new file mode 100644 index 000000000..a0dd33de5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_sve.F new file mode 100644 index 000000000..c2cbc2a56 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if2reg_adapter.svh new file mode 100644 index 000000000..3639e693b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_write_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_write_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_write_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_agent.svh new file mode 100644 index 000000000..df581f3f1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_write_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_configuration.svh new file mode 100644 index 000000000..676cfcb02 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_write_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_write_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_write_if_configuration_s fuse_ctrl_prim_axi_write_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_write_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_if_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_write_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_write_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_write_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_write_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver.svh new file mode 100644 index 000000000..55d444021 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_write_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. +`fuse_ctrl_prim_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_if_initiator_s fuse_ctrl_prim_axi_write_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. +`fuse_ctrl_prim_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_if_responder_s fuse_ctrl_prim_axi_write_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_write_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_write_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_write_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_write_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv new file mode 100644 index 000000000..b418ebbf8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv @@ -0,0 +1,429 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_write_if signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_write_if driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_write_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_write_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_write_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_if_macros.svh" + +interface fuse_ctrl_prim_axi_write_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_write_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] awaddr_i; + reg [AW-1:0] awaddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] awburst_o = 'bz; + tri [2:0] awsize_i; + reg [2:0] awsize_o = 'bz; + tri [7:0] awlen_i; + reg [7:0] awlen_o = 'bz; + tri [UW-1:0] awuser_i; + reg [UW-1:0] awuser_o = 'bz; + tri [UW-1:0] awid_i; + reg [UW-1:0] awid_o = 'bz; + tri awlock_i; + reg awlock_o = 'bz; + tri awvalid_i; + reg awvalid_o = 'bz; + tri [DW-1:0] wdata_i; + reg [DW-1:0] wdata_o = 'bz; + tri [DW/8-1:0] wstrb_i; + reg [DW/8-1:0] wstrb_o = 'bz; + tri wvalid_i; + reg wvalid_o = 'bz; + tri wlast_i; + reg wlast_o = 'bz; + tri bready_i; + reg bready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.awaddr = (initiator_responder == INITIATOR) ? awaddr_o : 'bz; + assign awaddr_i = bus.awaddr; + assign bus.awburst = (initiator_responder == INITIATOR) ? awburst_o : 'bz; + assign awburst_i = bus.awburst; + assign bus.awsize = (initiator_responder == INITIATOR) ? awsize_o : 'bz; + assign awsize_i = bus.awsize; + assign bus.awlen = (initiator_responder == INITIATOR) ? awlen_o : 'bz; + assign awlen_i = bus.awlen; + assign bus.awuser = (initiator_responder == INITIATOR) ? awuser_o : 'bz; + assign awuser_i = bus.awuser; + assign bus.awid = (initiator_responder == INITIATOR) ? awid_o : 'bz; + assign awid_i = bus.awid; + assign bus.awlock = (initiator_responder == INITIATOR) ? awlock_o : 'bz; + assign awlock_i = bus.awlock; + assign bus.awvalid = (initiator_responder == INITIATOR) ? awvalid_o : 'bz; + assign awvalid_i = bus.awvalid; + assign bus.wdata = (initiator_responder == INITIATOR) ? wdata_o : 'bz; + assign wdata_i = bus.wdata; + assign bus.wstrb = (initiator_responder == INITIATOR) ? wstrb_o : 'bz; + assign wstrb_i = bus.wstrb; + assign bus.wvalid = (initiator_responder == INITIATOR) ? wvalid_o : 'bz; + assign wvalid_i = bus.wvalid; + assign bus.wlast = (initiator_responder == INITIATOR) ? wlast_o : 'bz; + assign wlast_i = bus.wlast; + assign bus.bready = (initiator_responder == INITIATOR) ? bready_o : 'bz; + assign bready_i = bus.bready; + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_write_if_pkg::fuse_ctrl_prim_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_write_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_write_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_write_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. + `fuse_ctrl_prim_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. + `fuse_ctrl_prim_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + awaddr_o <= 'bz; + awburst_o <= 'bz; + awsize_o <= 'bz; + awlen_o <= 'bz; + awuser_o <= 'bz; + awid_o <= 'bz; + awlock_o <= 'bz; + awvalid_o <= 'bz; + wdata_o <= 'bz; + wstrb_o <= 'bz; + wvalid_o <= 'bz; + wlast_o <= 'bz; + bready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_write_if_configuration_s fuse_ctrl_prim_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_write_if_initiator_s fuse_ctrl_prim_axi_write_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_write_if_responder_s fuse_ctrl_prim_axi_write_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_write_if_initiator_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Members within the fuse_ctrl_prim_axi_write_if_responder_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + initiator_struct = fuse_ctrl_prim_axi_write_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // awaddr_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [AW-1:0] + // awburst_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // awsize_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [2:0] + // awlen_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [7:0] + // awuser_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [UW-1:0] + // awid_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [UW-1:0] + // awlock_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // + // awvalid_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // + // wdata_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [DW-1:0] + // wstrb_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [DW/8-1:0] + // wvalid_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // + // wlast_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // + // bready_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_write_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_write_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_write_if_initiator_s fuse_ctrl_prim_axi_write_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_write_if_responder_s fuse_ctrl_prim_axi_write_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_write_if_initiator_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Variables within the fuse_ctrl_prim_axi_write_if_responder_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awlock_i; // + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awvalid_i; // + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = wvalid_i; // + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = wlast_i; // + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = bready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_write_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_write_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_if.sv new file mode 100644 index 000000000..afcdb92da --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_if.sv @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_write_if interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_write_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_write_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_write_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awaddr), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awburst), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awsize), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awlen), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awuser), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awlock), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.wdata), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.wstrb), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.wvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.wlast), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.bready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_if_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_write_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] awaddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst, + inout tri [2:0] awsize, + inout tri [7:0] awlen, + inout tri [UW-1:0] awuser, + inout tri [UW-1:0] awid, + inout tri awlock, + inout tri awvalid, + inout tri [DW-1:0] wdata, + inout tri [DW/8-1:0] wstrb, + inout tri wvalid, + inout tri wlast, + inout tri bready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output awaddr, + output awburst, + output awsize, + output awlen, + output awuser, + output awid, + output awlock, + output awvalid, + output wdata, + output wstrb, + output wvalid, + output wlast, + output bready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_macros.svh new file mode 100644 index 000000000..f1a207086 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_macros.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_write_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_write_if_configuration class. +// + `define fuse_ctrl_prim_axi_write_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_write_if_configuration_s; + + `define fuse_ctrl_prim_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_if_configuration_s to_struct();\ + fuse_ctrl_prim_axi_write_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_write_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_write_if_configuration_s fuse_ctrl_prim_axi_write_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_write_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_write_if_transaction class. +// + `define fuse_ctrl_prim_axi_write_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_if_monitor_s; + + `define fuse_ctrl_prim_axi_write_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_if_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_write_if_monitor_struct = \ + { \ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_write_if_monitor_s fuse_ctrl_prim_axi_write_if_monitor_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_if_initiator_s; + + `define fuse_ctrl_prim_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_if_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_write_if_initiator_struct = \ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_write_if_initiator_s fuse_ctrl_prim_axi_write_if_initiator_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_if_responder_s; + + `define fuse_ctrl_prim_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_if_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_write_if_responder_struct = \ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_if_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_write_if_responder_s fuse_ctrl_prim_axi_write_if_responder_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor.svh new file mode 100644 index 000000000..33bf7f57e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_write_if transactions observed by the +// fuse_ctrl_prim_axi_write_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_write_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_write_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_write_if_monitor_s fuse_ctrl_prim_axi_write_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_write_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv new file mode 100644 index 000000000..909871de8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv @@ -0,0 +1,248 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_write_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_write_if monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_write_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_write_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_write_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_if_macros.svh" + + +interface fuse_ctrl_prim_axi_write_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_write_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_write_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_if_monitor_s fuse_ctrl_prim_axi_write_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_write_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] awaddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + tri [2:0] awsize_i; + tri [7:0] awlen_i; + tri [UW-1:0] awuser_i; + tri [UW-1:0] awid_i; + tri awlock_i; + tri awvalid_i; + tri [DW-1:0] wdata_i; + tri [DW/8-1:0] wstrb_i; + tri wvalid_i; + tri wlast_i; + tri bready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awaddr_i = bus.awaddr; + assign awburst_i = bus.awburst; + assign awsize_i = bus.awsize; + assign awlen_i = bus.awlen; + assign awuser_i = bus.awuser; + assign awid_i = bus.awid; + assign awlock_i = bus.awlock; + assign awvalid_i = bus.awvalid; + assign wdata_i = bus.wdata; + assign wstrb_i = bus.wstrb; + assign wvalid_i = bus.wvalid; + assign wlast_i = bus.wlast; + assign bready_i = bus.bready; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_write_if_pkg::fuse_ctrl_prim_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_write_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_write_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_write_if_configuration_s fuse_ctrl_prim_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_write_if_monitor_s fuse_ctrl_prim_axi_write_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awaddr + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awvalid + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awburst + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awsize + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awlen + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awuser + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awid + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awlock + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_wdata + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_wstrb + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_wvalid + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_wlast + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_bready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awlock_i; // + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awvalid_i; // + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = wvalid_i; // + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = wlast_i; // + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = bready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_random_sequence.svh new file mode 100644 index 000000000..8c64fb3c6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_write_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_write_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_write_if_random_sequence::body()-fuse_ctrl_prim_axi_write_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_write_if_driver_bfm via the sequencer and fuse_ctrl_prim_axi_write_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_write_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_responder_sequence.svh new file mode 100644 index 000000000..088b5cae1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_write_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_sequence_base.svh new file mode 100644 index 000000000..3dabe4d22 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_if_transaction_req_t; + fuse_ctrl_prim_axi_write_if_transaction_req_t req; + typedef fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_if_transaction_rsp_t; + fuse_ctrl_prim_axi_write_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_write_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_write_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction.svh new file mode 100644 index 000000000..168cf90d5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction.svh @@ -0,0 +1,256 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_write_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] prim_awaddr ; + logic prim_awvalid ; + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + logic [2:0] prim_awsize ; + logic [7:0] prim_awlen ; + logic [UW-1:0] prim_awuser ; + logic [IW-1:0] prim_awid ; + logic prim_awlock ; + logic [DW-1:0] prim_wdata ; + logic [DW/8 - 1:0] prim_wstrb ; + logic prim_wvalid ; + logic prim_wlast ; + logic prim_bready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_write_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_write_if_monitor and fuse_ctrl_prim_axi_write_if_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_if_monitor_s fuse_ctrl_prim_axi_write_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_if_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_if_initiator_s fuse_ctrl_prim_axi_write_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_if_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_if_responder_s fuse_ctrl_prim_axi_write_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_if_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awaddr:0x%x prim_awvalid:0x%x prim_awburst:0x%x prim_awsize:0x%x prim_awlen:0x%x prim_awuser:0x%x prim_awid:0x%x prim_awlock:0x%x prim_wdata:0x%x prim_wstrb:0x%x prim_wvalid:0x%x prim_wlast:0x%x prim_bready:0x%x ",prim_awaddr,prim_awvalid,prim_awburst,prim_awsize,prim_awlen,prim_awuser,prim_awid,prim_awlock,prim_wdata,prim_wstrb,prim_wvalid,prim_wlast,prim_bready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_wdata == RHS.prim_wdata) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awaddr = RHS.prim_awaddr; + this.prim_awvalid = RHS.prim_awvalid; + this.prim_awburst = RHS.prim_awburst; + this.prim_awsize = RHS.prim_awsize; + this.prim_awlen = RHS.prim_awlen; + this.prim_awuser = RHS.prim_awuser; + this.prim_awid = RHS.prim_awid; + this.prim_awlock = RHS.prim_awlock; + this.prim_wdata = RHS.prim_wdata; + this.prim_wstrb = RHS.prim_wstrb; + this.prim_wvalid = RHS.prim_wvalid; + this.prim_wlast = RHS.prim_wlast; + this.prim_bready = RHS.prim_bready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_write_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awaddr,"prim_awaddr"); + $add_attribute(transaction_view_h,prim_awvalid,"prim_awvalid"); + $add_attribute(transaction_view_h,prim_awburst,"prim_awburst"); + $add_attribute(transaction_view_h,prim_awsize,"prim_awsize"); + $add_attribute(transaction_view_h,prim_awlen,"prim_awlen"); + $add_attribute(transaction_view_h,prim_awuser,"prim_awuser"); + $add_attribute(transaction_view_h,prim_awid,"prim_awid"); + $add_attribute(transaction_view_h,prim_awlock,"prim_awlock"); + $add_attribute(transaction_view_h,prim_wdata,"prim_wdata"); + $add_attribute(transaction_view_h,prim_wstrb,"prim_wstrb"); + $add_attribute(transaction_view_h,prim_wvalid,"prim_wvalid"); + $add_attribute(transaction_view_h,prim_wlast,"prim_wlast"); + $add_attribute(transaction_view_h,prim_bready,"prim_bready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction_coverage.svh new file mode 100644 index 000000000..a6fbb3558 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction_coverage.svh @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_write_if transaction information using +// a covergroup named fuse_ctrl_prim_axi_write_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_write_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awaddr: coverpoint coverage_trans.prim_awaddr; + prim_awvalid: coverpoint coverage_trans.prim_awvalid; + prim_awburst: coverpoint coverage_trans.prim_awburst; + prim_awsize: coverpoint coverage_trans.prim_awsize; + prim_awlen: coverpoint coverage_trans.prim_awlen; + prim_awuser: coverpoint coverage_trans.prim_awuser; + prim_awid: coverpoint coverage_trans.prim_awid; + prim_awlock: coverpoint coverage_trans.prim_awlock; + prim_wdata: coverpoint coverage_trans.prim_wdata; + prim_wstrb: coverpoint coverage_trans.prim_wstrb; + prim_wvalid: coverpoint coverage_trans.prim_wvalid; + prim_wlast: coverpoint coverage_trans.prim_wlast; + prim_bready: coverpoint coverage_trans.prim_bready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_write_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_write_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_write_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/yaml/fuse_ctrl_prim_axi_write_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/yaml/fuse_ctrl_prim_axi_write_if_interface.yaml new file mode 100644 index 000000000..4a69d4c96 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/yaml/fuse_ctrl_prim_axi_write_if_interface.yaml @@ -0,0 +1,161 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_write_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: awaddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: awburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: awsize + reset_value: '''bz' + width: '3' + - dir: output + name: awlen + reset_value: '''bz' + width: '8' + - dir: output + name: awuser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awid + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awlock + reset_value: '''bz' + width: '1' + - dir: output + name: awvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wdata + reset_value: '''bz' + width: '[''DW'']' + - dir: output + name: wstrb + reset_value: '''bz' + width: '[''DW/8'']' + - dir: output + name: wvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wlast + reset_value: '''bz' + width: '1' + - dir: output + name: bready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: prim_awaddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awuser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wstrb + type: logic [DW/8 - 1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_bready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.project new file mode 100644 index 000000000..0770491f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_write_in_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.svproject new file mode 100644 index 000000000..b46351d9f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/Makefile new file mode 100644 index 000000000..856db9d2f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_write_in_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_write_in_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hvl.f + +fuse_ctrl_prim_axi_write_in_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hdl.f + +fuse_ctrl_prim_axi_write_in_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_write_in_if_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_write_in_if_pkg +COMP_fuse_ctrl_prim_axi_write_in_if_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_write_in_if_pkg +COMP_fuse_ctrl_prim_axi_write_in_if_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_write_in_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_write_in_if_pkg: $(COMP_fuse_ctrl_prim_axi_write_in_if_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_write_in_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_write_in_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_write_in_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_in_if_pkg += -I$(fuse_ctrl_prim_axi_write_in_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_in_if_pkg += $(fuse_ctrl_prim_axi_write_in_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_in_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_write_in_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_in_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_in_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/compile.do new file mode 100644 index 000000000..96057eeae --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_write_in_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if.compile new file mode 100644 index 000000000..3b0556089 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_write_in_if_hvl.compile + - fuse_ctrl_prim_axi_write_in_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_bfm.vinfo new file mode 100644 index 000000000..ec81da644 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_write_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_write_in_if_if.sv +src/fuse_ctrl_prim_axi_write_in_if_driver_bfm.sv +src/fuse_ctrl_prim_axi_write_in_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_common.compile new file mode 100644 index 000000000..9d4c93462 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hdl.f new file mode 100644 index 000000000..fe4f02fb8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hvl.f new file mode 100644 index 000000000..eb0bfa3dd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_xrtl.f new file mode 100644 index 000000000..9ce77bf09 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hdl.compile new file mode 100644 index 000000000..8c2ca2641 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_write_in_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_write_in_if_if.sv + - src/fuse_ctrl_prim_axi_write_in_if_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_write_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hvl.compile new file mode 100644 index 000000000..208f90cc3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_write_in_if_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_write_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.sv new file mode 100644 index 000000000..dfd8133f9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_in_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_write_in_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_write_in_if_macros.svh" + + export fuse_ctrl_prim_axi_write_in_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_write_in_if_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_write_in_if_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_if_configuration.svh" + `include "src/fuse_ctrl_prim_axi_write_in_if_driver.svh" + `include "src/fuse_ctrl_prim_axi_write_in_if_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_if_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_write_in_if_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_write_in_if_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_if_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_write_in_if2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.vinfo new file mode 100644 index 000000000..1a4ed8ccb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_write_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_write_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv new file mode 100644 index 000000000..c6851188c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_in_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_write_in_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_write_in_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.vinfo new file mode 100644 index 000000000..6cdfa7339 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_sve.F new file mode 100644 index 000000000..a43c2ae34 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if2reg_adapter.svh new file mode 100644 index 000000000..db59eab23 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_write_in_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_write_in_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_write_in_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_agent.svh new file mode 100644 index 000000000..6ce4e8784 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_write_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_write_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_write_in_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_configuration.svh new file mode 100644 index 000000000..d201a9a66 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_write_in_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_write_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_write_in_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_write_in_if_configuration_s fuse_ctrl_prim_axi_write_in_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_write_in_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_if_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_write_in_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_write_in_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_write_in_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_write_in_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_in_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_write_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver.svh new file mode 100644 index 000000000..4e0b0c977 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_write_in_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_write_in_if_driver and fuse_ctrl_prim_axi_write_in_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_write_in_if_driver_bfm. +`fuse_ctrl_prim_axi_write_in_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_in_if_initiator_s fuse_ctrl_prim_axi_write_in_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_write_in_if_driver and fuse_ctrl_prim_axi_write_in_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_write_in_if_driver_bfm. +`fuse_ctrl_prim_axi_write_in_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_in_if_responder_s fuse_ctrl_prim_axi_write_in_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_write_in_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_write_in_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_write_in_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_write_in_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver_bfm.sv new file mode 100644 index 000000000..96ba0eea1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver_bfm.sv @@ -0,0 +1,429 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_write_in_if signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_write_in_if driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_write_in_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_write_in_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_write_in_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_in_if_macros.svh" + +interface fuse_ctrl_prim_axi_write_in_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_write_in_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_in_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] awaddr_i; + reg [AW-1:0] awaddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] awburst_o = 'bz; + tri [2:0] awsize_i; + reg [2:0] awsize_o = 'bz; + tri [7:0] awlen_i; + reg [7:0] awlen_o = 'bz; + tri [UW-1:0] awuser_i; + reg [UW-1:0] awuser_o = 'bz; + tri [UW-1:0] awid_i; + reg [UW-1:0] awid_o = 'bz; + tri awlock_i; + reg awlock_o = 'bz; + tri awvalid_i; + reg awvalid_o = 'bz; + tri [DW-1:0] wdata_i; + reg [DW-1:0] wdata_o = 'bz; + tri [DW/8-1:0] wstrb_i; + reg [DW/8-1:0] wstrb_o = 'bz; + tri wvalid_i; + reg wvalid_o = 'bz; + tri wlast_i; + reg wlast_o = 'bz; + tri bready_i; + reg bready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.awaddr = (initiator_responder == INITIATOR) ? awaddr_o : 'bz; + assign awaddr_i = bus.awaddr; + assign bus.awburst = (initiator_responder == INITIATOR) ? awburst_o : 'bz; + assign awburst_i = bus.awburst; + assign bus.awsize = (initiator_responder == INITIATOR) ? awsize_o : 'bz; + assign awsize_i = bus.awsize; + assign bus.awlen = (initiator_responder == INITIATOR) ? awlen_o : 'bz; + assign awlen_i = bus.awlen; + assign bus.awuser = (initiator_responder == INITIATOR) ? awuser_o : 'bz; + assign awuser_i = bus.awuser; + assign bus.awid = (initiator_responder == INITIATOR) ? awid_o : 'bz; + assign awid_i = bus.awid; + assign bus.awlock = (initiator_responder == INITIATOR) ? awlock_o : 'bz; + assign awlock_i = bus.awlock; + assign bus.awvalid = (initiator_responder == INITIATOR) ? awvalid_o : 'bz; + assign awvalid_i = bus.awvalid; + assign bus.wdata = (initiator_responder == INITIATOR) ? wdata_o : 'bz; + assign wdata_i = bus.wdata; + assign bus.wstrb = (initiator_responder == INITIATOR) ? wstrb_o : 'bz; + assign wstrb_i = bus.wstrb; + assign bus.wvalid = (initiator_responder == INITIATOR) ? wvalid_o : 'bz; + assign wvalid_i = bus.wvalid; + assign bus.wlast = (initiator_responder == INITIATOR) ? wlast_o : 'bz; + assign wlast_i = bus.wlast; + assign bus.bready = (initiator_responder == INITIATOR) ? bready_o : 'bz; + assign bready_i = bus.bready; + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_write_in_if_pkg::fuse_ctrl_prim_axi_write_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_write_in_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_write_in_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_in_if_driver and fuse_ctrl_prim_axi_write_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_in_if_driver_bfm. + `fuse_ctrl_prim_axi_write_in_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_in_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_write_in_if_driver and fuse_ctrl_prim_axi_write_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_in_if_driver_bfm. + `fuse_ctrl_prim_axi_write_in_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_in_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + awaddr_o <= 'bz; + awburst_o <= 'bz; + awsize_o <= 'bz; + awlen_o <= 'bz; + awuser_o <= 'bz; + awid_o <= 'bz; + awlock_o <= 'bz; + awvalid_o <= 'bz; + wdata_o <= 'bz; + wstrb_o <= 'bz; + wvalid_o <= 'bz; + wlast_o <= 'bz; + bready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_write_in_if_configuration_s fuse_ctrl_prim_axi_write_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_write_in_if_initiator_s fuse_ctrl_prim_axi_write_in_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_write_in_if_responder_s fuse_ctrl_prim_axi_write_in_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_write_in_if_initiator_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Members within the fuse_ctrl_prim_axi_write_in_if_responder_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + initiator_struct = fuse_ctrl_prim_axi_write_in_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // awaddr_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [AW-1:0] + // awburst_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // awsize_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [2:0] + // awlen_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [7:0] + // awuser_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [UW-1:0] + // awid_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [UW-1:0] + // awlock_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // + // awvalid_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // + // wdata_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [DW-1:0] + // wstrb_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [DW/8-1:0] + // wvalid_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // + // wlast_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // + // bready_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_write_in_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_write_in_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_write_in_if_initiator_s fuse_ctrl_prim_axi_write_in_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_write_in_if_responder_s fuse_ctrl_prim_axi_write_in_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_write_in_if_initiator_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Variables within the fuse_ctrl_prim_axi_write_in_if_responder_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awlock_i; // + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awvalid_i; // + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = wvalid_i; // + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = wlast_i; // + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = bready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_write_in_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_write_in_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_if.sv new file mode 100644 index 000000000..80a131b63 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_if.sv @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_write_in_if interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_write_in_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_write_in_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_write_in_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awaddr), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awburst), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awsize), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awlen), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awuser), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awlock), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.wdata), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.wstrb), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.wvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.wlast), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.bready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_in_if_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_write_in_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] awaddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst, + inout tri [2:0] awsize, + inout tri [7:0] awlen, + inout tri [UW-1:0] awuser, + inout tri [UW-1:0] awid, + inout tri awlock, + inout tri awvalid, + inout tri [DW-1:0] wdata, + inout tri [DW/8-1:0] wstrb, + inout tri wvalid, + inout tri wlast, + inout tri bready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output awaddr, + output awburst, + output awsize, + output awlen, + output awuser, + output awid, + output awlock, + output awvalid, + output wdata, + output wstrb, + output wvalid, + output wlast, + output bready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_macros.svh new file mode 100644 index 000000000..21b77c4eb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_macros.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_write_in_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_write_in_if_configuration class. +// + `define fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_write_in_if_configuration_s; + + `define fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_if_configuration_s to_struct();\ + fuse_ctrl_prim_axi_write_in_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_write_in_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_write_in_if_configuration_s fuse_ctrl_prim_axi_write_in_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_write_in_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_write_in_if_transaction class. +// + `define fuse_ctrl_prim_axi_write_in_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_in_if_monitor_s; + + `define fuse_ctrl_prim_axi_write_in_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_if_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_write_in_if_monitor_struct = \ + { \ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_in_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_write_in_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_write_in_if_monitor_s fuse_ctrl_prim_axi_write_in_if_monitor_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_in_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_write_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_in_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_in_if_initiator_s; + + `define fuse_ctrl_prim_axi_write_in_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_if_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_write_in_if_initiator_struct = \ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_in_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_in_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_write_in_if_initiator_s fuse_ctrl_prim_axi_write_in_if_initiator_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_in_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_write_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_in_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_in_if_responder_s; + + `define fuse_ctrl_prim_axi_write_in_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_if_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_write_in_if_responder_struct = \ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_in_if_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_in_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_write_in_if_responder_s fuse_ctrl_prim_axi_write_in_if_responder_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_in_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor.svh new file mode 100644 index 000000000..d70eab613 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_write_in_if transactions observed by the +// fuse_ctrl_prim_axi_write_in_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_write_in_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_write_in_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_write_in_if_monitor_s fuse_ctrl_prim_axi_write_in_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_write_in_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor_bfm.sv new file mode 100644 index 000000000..d69cf9edc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor_bfm.sv @@ -0,0 +1,248 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_write_in_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_write_in_if monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_write_in_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_write_in_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_write_in_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_in_if_macros.svh" + + +interface fuse_ctrl_prim_axi_write_in_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_write_in_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_in_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_write_in_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_in_if_monitor_s fuse_ctrl_prim_axi_write_in_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] awaddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + tri [2:0] awsize_i; + tri [7:0] awlen_i; + tri [UW-1:0] awuser_i; + tri [UW-1:0] awid_i; + tri awlock_i; + tri awvalid_i; + tri [DW-1:0] wdata_i; + tri [DW/8-1:0] wstrb_i; + tri wvalid_i; + tri wlast_i; + tri bready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awaddr_i = bus.awaddr; + assign awburst_i = bus.awburst; + assign awsize_i = bus.awsize; + assign awlen_i = bus.awlen; + assign awuser_i = bus.awuser; + assign awid_i = bus.awid; + assign awlock_i = bus.awlock; + assign awvalid_i = bus.awvalid; + assign wdata_i = bus.wdata; + assign wstrb_i = bus.wstrb; + assign wvalid_i = bus.wvalid; + assign wlast_i = bus.wlast; + assign bready_i = bus.bready; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_write_in_if_pkg::fuse_ctrl_prim_axi_write_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_write_in_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_write_in_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_write_in_if_configuration_s fuse_ctrl_prim_axi_write_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_write_in_if_monitor_s fuse_ctrl_prim_axi_write_in_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awaddr + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awvalid + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awburst + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awsize + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awlen + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awuser + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awid + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awlock + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_wdata + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_wstrb + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_wvalid + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_wlast + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_bready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awlock_i; // + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awvalid_i; // + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = wvalid_i; // + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = wlast_i; // + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = bready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_random_sequence.svh new file mode 100644 index 000000000..2855daa79 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_write_in_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_write_in_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_write_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_write_in_if_random_sequence::body()-fuse_ctrl_prim_axi_write_in_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_write_in_if_driver_bfm via the sequencer and fuse_ctrl_prim_axi_write_in_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_write_in_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_responder_sequence.svh new file mode 100644 index 000000000..0b77b4c78 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_write_in_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_write_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_sequence_base.svh new file mode 100644 index 000000000..33d0fe368 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_in_if_transaction_req_t; + fuse_ctrl_prim_axi_write_in_if_transaction_req_t req; + typedef fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_in_if_transaction_rsp_t; + fuse_ctrl_prim_axi_write_in_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_write_in_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_write_in_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction.svh new file mode 100644 index 000000000..587456c34 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction.svh @@ -0,0 +1,256 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_write_in_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] prim_awaddr ; + logic prim_awvalid ; + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + logic [2:0] prim_awsize ; + logic [7:0] prim_awlen ; + logic [UW-1:0] prim_awuser ; + logic [IW-1:0] prim_awid ; + logic prim_awlock ; + logic [DW-1:0] prim_wdata ; + logic [DW/8 - 1:0] prim_wstrb ; + logic prim_wvalid ; + logic prim_wlast ; + logic prim_bready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_write_in_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_write_in_if_monitor and fuse_ctrl_prim_axi_write_in_if_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_in_if_monitor_s fuse_ctrl_prim_axi_write_in_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_in_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_if_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_in_if_driver and fuse_ctrl_prim_axi_write_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_in_if_initiator_s fuse_ctrl_prim_axi_write_in_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_in_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_if_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_write_in_if_driver and fuse_ctrl_prim_axi_write_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_in_if_responder_s fuse_ctrl_prim_axi_write_in_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_in_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_if_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awaddr:0x%x prim_awvalid:0x%x prim_awburst:0x%x prim_awsize:0x%x prim_awlen:0x%x prim_awuser:0x%x prim_awid:0x%x prim_awlock:0x%x prim_wdata:0x%x prim_wstrb:0x%x prim_wvalid:0x%x prim_wlast:0x%x prim_bready:0x%x ",prim_awaddr,prim_awvalid,prim_awburst,prim_awsize,prim_awlen,prim_awuser,prim_awid,prim_awlock,prim_wdata,prim_wstrb,prim_wvalid,prim_wlast,prim_bready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_wdata == RHS.prim_wdata) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awaddr = RHS.prim_awaddr; + this.prim_awvalid = RHS.prim_awvalid; + this.prim_awburst = RHS.prim_awburst; + this.prim_awsize = RHS.prim_awsize; + this.prim_awlen = RHS.prim_awlen; + this.prim_awuser = RHS.prim_awuser; + this.prim_awid = RHS.prim_awid; + this.prim_awlock = RHS.prim_awlock; + this.prim_wdata = RHS.prim_wdata; + this.prim_wstrb = RHS.prim_wstrb; + this.prim_wvalid = RHS.prim_wvalid; + this.prim_wlast = RHS.prim_wlast; + this.prim_bready = RHS.prim_bready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_write_in_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awaddr,"prim_awaddr"); + $add_attribute(transaction_view_h,prim_awvalid,"prim_awvalid"); + $add_attribute(transaction_view_h,prim_awburst,"prim_awburst"); + $add_attribute(transaction_view_h,prim_awsize,"prim_awsize"); + $add_attribute(transaction_view_h,prim_awlen,"prim_awlen"); + $add_attribute(transaction_view_h,prim_awuser,"prim_awuser"); + $add_attribute(transaction_view_h,prim_awid,"prim_awid"); + $add_attribute(transaction_view_h,prim_awlock,"prim_awlock"); + $add_attribute(transaction_view_h,prim_wdata,"prim_wdata"); + $add_attribute(transaction_view_h,prim_wstrb,"prim_wstrb"); + $add_attribute(transaction_view_h,prim_wvalid,"prim_wvalid"); + $add_attribute(transaction_view_h,prim_wlast,"prim_wlast"); + $add_attribute(transaction_view_h,prim_bready,"prim_bready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction_coverage.svh new file mode 100644 index 000000000..0a8862ad8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction_coverage.svh @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_write_in_if transaction information using +// a covergroup named fuse_ctrl_prim_axi_write_in_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_write_in_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awaddr: coverpoint coverage_trans.prim_awaddr; + prim_awvalid: coverpoint coverage_trans.prim_awvalid; + prim_awburst: coverpoint coverage_trans.prim_awburst; + prim_awsize: coverpoint coverage_trans.prim_awsize; + prim_awlen: coverpoint coverage_trans.prim_awlen; + prim_awuser: coverpoint coverage_trans.prim_awuser; + prim_awid: coverpoint coverage_trans.prim_awid; + prim_awlock: coverpoint coverage_trans.prim_awlock; + prim_wdata: coverpoint coverage_trans.prim_wdata; + prim_wstrb: coverpoint coverage_trans.prim_wstrb; + prim_wvalid: coverpoint coverage_trans.prim_wvalid; + prim_wlast: coverpoint coverage_trans.prim_wlast; + prim_bready: coverpoint coverage_trans.prim_bready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_write_in_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_write_in_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_in_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_write_in_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/yaml/fuse_ctrl_prim_axi_write_in_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/yaml/fuse_ctrl_prim_axi_write_in_if_interface.yaml new file mode 100644 index 000000000..94606fc08 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/yaml/fuse_ctrl_prim_axi_write_in_if_interface.yaml @@ -0,0 +1,161 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_write_in_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: awaddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: awburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: awsize + reset_value: '''bz' + width: '3' + - dir: output + name: awlen + reset_value: '''bz' + width: '8' + - dir: output + name: awuser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awid + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awlock + reset_value: '''bz' + width: '1' + - dir: output + name: awvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wdata + reset_value: '''bz' + width: '[''DW'']' + - dir: output + name: wstrb + reset_value: '''bz' + width: '[''DW/8'']' + - dir: output + name: wvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wlast + reset_value: '''bz' + width: '1' + - dir: output + name: bready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: prim_awaddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awuser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wstrb + type: logic [DW/8 - 1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_bready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.project new file mode 100644 index 000000000..8c615b525 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_write_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.svproject new file mode 100644 index 000000000..14eb90e60 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/Makefile new file mode 100644 index 000000000..58b6255e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_write_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_write_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hvl.f + +fuse_ctrl_prim_axi_write_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hdl.f + +fuse_ctrl_prim_axi_write_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_write_in_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_write_in_pkg +COMP_fuse_ctrl_prim_axi_write_in_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_write_in_pkg +COMP_fuse_ctrl_prim_axi_write_in_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_write_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_write_in_pkg: $(COMP_fuse_ctrl_prim_axi_write_in_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_write_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_write_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_write_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_write_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_write_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_in_pkg += -I$(fuse_ctrl_prim_axi_write_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_in_pkg += $(fuse_ctrl_prim_axi_write_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_write_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/compile.do new file mode 100644 index 000000000..0b7eaf691 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_write_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in.compile new file mode 100644 index 000000000..cc55184d7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_write_in_hvl.compile + - fuse_ctrl_prim_axi_write_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_bfm.vinfo new file mode 100644 index 000000000..f0da591fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_write_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_write_in_if.sv +src/fuse_ctrl_prim_axi_write_in_driver_bfm.sv +src/fuse_ctrl_prim_axi_write_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_common.compile new file mode 100644 index 000000000..9fd1f6c57 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_write_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hdl.f new file mode 100644 index 000000000..05ff74470 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hvl.f new file mode 100644 index 000000000..9e594a7e8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_xrtl.f new file mode 100644 index 000000000..aeb98365e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hdl.compile new file mode 100644 index 000000000..954117b62 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_write_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_write_in_if.sv + - src/fuse_ctrl_prim_axi_write_in_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_write_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hvl.compile new file mode 100644 index 000000000..7be9859cb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_write_in_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_write_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.sv new file mode 100644 index 000000000..bebb7a348 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_write_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_write_in_macros.svh" + + export fuse_ctrl_prim_axi_write_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_write_in_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_write_in_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_configuration.svh" + `include "src/fuse_ctrl_prim_axi_write_in_driver.svh" + `include "src/fuse_ctrl_prim_axi_write_in_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_write_in_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_write_in_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_write_in2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.vinfo new file mode 100644 index 000000000..a03a77b1d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_write_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_write_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.sv new file mode 100644 index 000000000..b974d8d0d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_write_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_write_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.vinfo new file mode 100644 index 000000000..6813b251a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_write_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_sve.F new file mode 100644 index 000000000..276278034 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in2reg_adapter.svh new file mode 100644 index 000000000..5711099ae --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_write_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_write_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_write_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_agent.svh new file mode 100644 index 000000000..552affab0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_write_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_write_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_write_in_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_configuration.svh new file mode 100644 index 000000000..2a5858b9b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_write_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_write_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_write_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_write_in_configuration_s fuse_ctrl_prim_axi_write_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_write_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_write_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_write_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_write_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_write_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_write_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver.svh new file mode 100644 index 000000000..ad7975fd9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_write_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_write_in_driver and fuse_ctrl_prim_axi_write_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_write_in_driver_bfm. +`fuse_ctrl_prim_axi_write_in_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_in_initiator_s fuse_ctrl_prim_axi_write_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_write_in_driver and fuse_ctrl_prim_axi_write_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_write_in_driver_bfm. +`fuse_ctrl_prim_axi_write_in_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_in_responder_s fuse_ctrl_prim_axi_write_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_write_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_write_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_write_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_write_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver_bfm.sv new file mode 100644 index 000000000..74c7fb4ce --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver_bfm.sv @@ -0,0 +1,429 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_write_in signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_write_in driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_write_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_write_in_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_write_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_in_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_in_macros.svh" + +interface fuse_ctrl_prim_axi_write_in_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_write_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] awaddr_i; + reg [AW-1:0] awaddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] awburst_o = 'bz; + tri [2:0] awsize_i; + reg [2:0] awsize_o = 'bz; + tri [7:0] awlen_i; + reg [7:0] awlen_o = 'bz; + tri [UW-1:0] awuser_i; + reg [UW-1:0] awuser_o = 'bz; + tri [UW-1:0] awid_i; + reg [UW-1:0] awid_o = 'bz; + tri awlock_i; + reg awlock_o = 'bz; + tri awvalid_i; + reg awvalid_o = 'bz; + tri [DW-1:0] wdata_i; + reg [DW-1:0] wdata_o = 'bz; + tri [DW/8-1:0] wstrb_i; + reg [DW/8-1:0] wstrb_o = 'bz; + tri wvalid_i; + reg wvalid_o = 'bz; + tri wlast_i; + reg wlast_o = 'bz; + tri bready_i; + reg bready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.awaddr = (initiator_responder == INITIATOR) ? awaddr_o : 'bz; + assign awaddr_i = bus.awaddr; + assign bus.awburst = (initiator_responder == INITIATOR) ? awburst_o : 'bz; + assign awburst_i = bus.awburst; + assign bus.awsize = (initiator_responder == INITIATOR) ? awsize_o : 'bz; + assign awsize_i = bus.awsize; + assign bus.awlen = (initiator_responder == INITIATOR) ? awlen_o : 'bz; + assign awlen_i = bus.awlen; + assign bus.awuser = (initiator_responder == INITIATOR) ? awuser_o : 'bz; + assign awuser_i = bus.awuser; + assign bus.awid = (initiator_responder == INITIATOR) ? awid_o : 'bz; + assign awid_i = bus.awid; + assign bus.awlock = (initiator_responder == INITIATOR) ? awlock_o : 'bz; + assign awlock_i = bus.awlock; + assign bus.awvalid = (initiator_responder == INITIATOR) ? awvalid_o : 'bz; + assign awvalid_i = bus.awvalid; + assign bus.wdata = (initiator_responder == INITIATOR) ? wdata_o : 'bz; + assign wdata_i = bus.wdata; + assign bus.wstrb = (initiator_responder == INITIATOR) ? wstrb_o : 'bz; + assign wstrb_i = bus.wstrb; + assign bus.wvalid = (initiator_responder == INITIATOR) ? wvalid_o : 'bz; + assign wvalid_i = bus.wvalid; + assign bus.wlast = (initiator_responder == INITIATOR) ? wlast_o : 'bz; + assign wlast_i = bus.wlast; + assign bus.bready = (initiator_responder == INITIATOR) ? bready_o : 'bz; + assign bready_i = bus.bready; + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_write_in_pkg::fuse_ctrl_prim_axi_write_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_write_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_write_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_write_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_in_driver and fuse_ctrl_prim_axi_write_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_in_driver_bfm. + `fuse_ctrl_prim_axi_write_in_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_write_in_driver and fuse_ctrl_prim_axi_write_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_in_driver_bfm. + `fuse_ctrl_prim_axi_write_in_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + awaddr_o <= 'bz; + awburst_o <= 'bz; + awsize_o <= 'bz; + awlen_o <= 'bz; + awuser_o <= 'bz; + awid_o <= 'bz; + awlock_o <= 'bz; + awvalid_o <= 'bz; + wdata_o <= 'bz; + wstrb_o <= 'bz; + wvalid_o <= 'bz; + wlast_o <= 'bz; + bready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_write_in_configuration_s fuse_ctrl_prim_axi_write_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_write_in_initiator_s fuse_ctrl_prim_axi_write_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_write_in_responder_s fuse_ctrl_prim_axi_write_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_write_in_initiator_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Members within the fuse_ctrl_prim_axi_write_in_responder_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + initiator_struct = fuse_ctrl_prim_axi_write_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // awaddr_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [AW-1:0] + // awburst_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // awsize_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [2:0] + // awlen_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [7:0] + // awuser_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [UW-1:0] + // awid_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [UW-1:0] + // awlock_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // + // awvalid_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // + // wdata_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [DW-1:0] + // wstrb_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [DW/8-1:0] + // wvalid_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // + // wlast_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // + // bready_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_write_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_write_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_write_in_initiator_s fuse_ctrl_prim_axi_write_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_write_in_responder_s fuse_ctrl_prim_axi_write_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_write_in_initiator_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Variables within the fuse_ctrl_prim_axi_write_in_responder_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awlock_i; // + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awvalid_i; // + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = wvalid_i; // + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = wlast_i; // + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = bready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_write_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_write_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_if.sv new file mode 100644 index 000000000..ba77427e3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_if.sv @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_write_in interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_write_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_write_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_write_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awaddr), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awburst), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awsize), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awlen), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awuser), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awlock), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.wdata), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.wstrb), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.wvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.wlast), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.bready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_in_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_write_in_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] awaddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst, + inout tri [2:0] awsize, + inout tri [7:0] awlen, + inout tri [UW-1:0] awuser, + inout tri [UW-1:0] awid, + inout tri awlock, + inout tri awvalid, + inout tri [DW-1:0] wdata, + inout tri [DW/8-1:0] wstrb, + inout tri wvalid, + inout tri wlast, + inout tri bready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output awaddr, + output awburst, + output awsize, + output awlen, + output awuser, + output awid, + output awlock, + output awvalid, + output wdata, + output wstrb, + output wvalid, + output wlast, + output bready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_macros.svh new file mode 100644 index 000000000..5d21a9094 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_macros.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_write_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_write_in_configuration class. +// + `define fuse_ctrl_prim_axi_write_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_write_in_configuration_s; + + `define fuse_ctrl_prim_axi_write_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_configuration_s to_struct();\ + fuse_ctrl_prim_axi_write_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_write_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_write_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_write_in_configuration_s fuse_ctrl_prim_axi_write_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_write_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_write_in_transaction class. +// + `define fuse_ctrl_prim_axi_write_in_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_in_monitor_s; + + `define fuse_ctrl_prim_axi_write_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_write_in_monitor_struct = \ + { \ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_write_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_write_in_monitor_s fuse_ctrl_prim_axi_write_in_monitor_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_write_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_in_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_in_initiator_s; + + `define fuse_ctrl_prim_axi_write_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_write_in_initiator_struct = \ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_write_in_initiator_s fuse_ctrl_prim_axi_write_in_initiator_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_write_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_in_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_in_responder_s; + + `define fuse_ctrl_prim_axi_write_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_write_in_responder_struct = \ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_in_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_write_in_responder_s fuse_ctrl_prim_axi_write_in_responder_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor.svh new file mode 100644 index 000000000..4deee8c06 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_write_in transactions observed by the +// fuse_ctrl_prim_axi_write_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_write_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_write_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_write_in_monitor_s fuse_ctrl_prim_axi_write_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_write_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor_bfm.sv new file mode 100644 index 000000000..80b4df5ac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor_bfm.sv @@ -0,0 +1,248 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_write_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_write_in monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_write_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_write_in_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_write_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_in_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_in_macros.svh" + + +interface fuse_ctrl_prim_axi_write_in_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_write_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_write_in_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_in_monitor_s fuse_ctrl_prim_axi_write_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_write_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] awaddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + tri [2:0] awsize_i; + tri [7:0] awlen_i; + tri [UW-1:0] awuser_i; + tri [UW-1:0] awid_i; + tri awlock_i; + tri awvalid_i; + tri [DW-1:0] wdata_i; + tri [DW/8-1:0] wstrb_i; + tri wvalid_i; + tri wlast_i; + tri bready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awaddr_i = bus.awaddr; + assign awburst_i = bus.awburst; + assign awsize_i = bus.awsize; + assign awlen_i = bus.awlen; + assign awuser_i = bus.awuser; + assign awid_i = bus.awid; + assign awlock_i = bus.awlock; + assign awvalid_i = bus.awvalid; + assign wdata_i = bus.wdata; + assign wstrb_i = bus.wstrb; + assign wvalid_i = bus.wvalid; + assign wlast_i = bus.wlast; + assign bready_i = bus.bready; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_write_in_pkg::fuse_ctrl_prim_axi_write_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_write_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_write_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_write_in_configuration_s fuse_ctrl_prim_axi_write_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_write_in_monitor_s fuse_ctrl_prim_axi_write_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awaddr + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awvalid + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awburst + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awsize + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awlen + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awuser + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awid + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awlock + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_wdata + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_wstrb + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_wvalid + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_wlast + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_bready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awlock_i; // + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awvalid_i; // + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = wvalid_i; // + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = wlast_i; // + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = bready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_random_sequence.svh new file mode 100644 index 000000000..5b9a8e55b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_write_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_write_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_write_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_write_in_random_sequence::body()-fuse_ctrl_prim_axi_write_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_write_in_driver_bfm via the sequencer and fuse_ctrl_prim_axi_write_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_write_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_responder_sequence.svh new file mode 100644 index 000000000..e8be3065d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_write_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_write_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_sequence_base.svh new file mode 100644 index 000000000..2d40c99ed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_in_transaction_req_t; + fuse_ctrl_prim_axi_write_in_transaction_req_t req; + typedef fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_in_transaction_rsp_t; + fuse_ctrl_prim_axi_write_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_write_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_write_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction.svh new file mode 100644 index 000000000..e58f4ec51 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction.svh @@ -0,0 +1,256 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_write_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] prim_awaddr ; + logic prim_awvalid ; + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + logic [2:0] prim_awsize ; + logic [7:0] prim_awlen ; + logic [UW-1:0] prim_awuser ; + logic [IW-1:0] prim_awid ; + logic prim_awlock ; + logic [DW-1:0] prim_wdata ; + logic [DW/8 - 1:0] prim_wstrb ; + logic prim_wvalid ; + logic prim_wlast ; + logic prim_bready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_write_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_write_in_monitor and fuse_ctrl_prim_axi_write_in_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_in_monitor_s fuse_ctrl_prim_axi_write_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_in_driver and fuse_ctrl_prim_axi_write_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_in_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_in_initiator_s fuse_ctrl_prim_axi_write_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_write_in_driver and fuse_ctrl_prim_axi_write_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_in_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_in_responder_s fuse_ctrl_prim_axi_write_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awaddr:0x%x prim_awvalid:0x%x prim_awburst:0x%x prim_awsize:0x%x prim_awlen:0x%x prim_awuser:0x%x prim_awid:0x%x prim_awlock:0x%x prim_wdata:0x%x prim_wstrb:0x%x prim_wvalid:0x%x prim_wlast:0x%x prim_bready:0x%x ",prim_awaddr,prim_awvalid,prim_awburst,prim_awsize,prim_awlen,prim_awuser,prim_awid,prim_awlock,prim_wdata,prim_wstrb,prim_wvalid,prim_wlast,prim_bready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_wdata == RHS.prim_wdata) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awaddr = RHS.prim_awaddr; + this.prim_awvalid = RHS.prim_awvalid; + this.prim_awburst = RHS.prim_awburst; + this.prim_awsize = RHS.prim_awsize; + this.prim_awlen = RHS.prim_awlen; + this.prim_awuser = RHS.prim_awuser; + this.prim_awid = RHS.prim_awid; + this.prim_awlock = RHS.prim_awlock; + this.prim_wdata = RHS.prim_wdata; + this.prim_wstrb = RHS.prim_wstrb; + this.prim_wvalid = RHS.prim_wvalid; + this.prim_wlast = RHS.prim_wlast; + this.prim_bready = RHS.prim_bready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_write_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awaddr,"prim_awaddr"); + $add_attribute(transaction_view_h,prim_awvalid,"prim_awvalid"); + $add_attribute(transaction_view_h,prim_awburst,"prim_awburst"); + $add_attribute(transaction_view_h,prim_awsize,"prim_awsize"); + $add_attribute(transaction_view_h,prim_awlen,"prim_awlen"); + $add_attribute(transaction_view_h,prim_awuser,"prim_awuser"); + $add_attribute(transaction_view_h,prim_awid,"prim_awid"); + $add_attribute(transaction_view_h,prim_awlock,"prim_awlock"); + $add_attribute(transaction_view_h,prim_wdata,"prim_wdata"); + $add_attribute(transaction_view_h,prim_wstrb,"prim_wstrb"); + $add_attribute(transaction_view_h,prim_wvalid,"prim_wvalid"); + $add_attribute(transaction_view_h,prim_wlast,"prim_wlast"); + $add_attribute(transaction_view_h,prim_bready,"prim_bready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction_coverage.svh new file mode 100644 index 000000000..30d005a0a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction_coverage.svh @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_write_in transaction information using +// a covergroup named fuse_ctrl_prim_axi_write_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_write_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awaddr: coverpoint coverage_trans.prim_awaddr; + prim_awvalid: coverpoint coverage_trans.prim_awvalid; + prim_awburst: coverpoint coverage_trans.prim_awburst; + prim_awsize: coverpoint coverage_trans.prim_awsize; + prim_awlen: coverpoint coverage_trans.prim_awlen; + prim_awuser: coverpoint coverage_trans.prim_awuser; + prim_awid: coverpoint coverage_trans.prim_awid; + prim_awlock: coverpoint coverage_trans.prim_awlock; + prim_wdata: coverpoint coverage_trans.prim_wdata; + prim_wstrb: coverpoint coverage_trans.prim_wstrb; + prim_wvalid: coverpoint coverage_trans.prim_wvalid; + prim_wlast: coverpoint coverage_trans.prim_wlast; + prim_bready: coverpoint coverage_trans.prim_bready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_write_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_write_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_write_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/yaml/fuse_ctrl_prim_axi_write_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/yaml/fuse_ctrl_prim_axi_write_in_interface.yaml new file mode 100644 index 000000000..ec7591e55 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/yaml/fuse_ctrl_prim_axi_write_in_interface.yaml @@ -0,0 +1,161 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_write_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: awaddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: awburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: awsize + reset_value: '''bz' + width: '3' + - dir: output + name: awlen + reset_value: '''bz' + width: '8' + - dir: output + name: awuser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awid + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awlock + reset_value: '''bz' + width: '1' + - dir: output + name: awvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wdata + reset_value: '''bz' + width: '[''DW'']' + - dir: output + name: wstrb + reset_value: '''bz' + width: '[''DW/8'']' + - dir: output + name: wvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wlast + reset_value: '''bz' + width: '1' + - dir: output + name: bready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: prim_awaddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awuser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wstrb + type: logic [DW/8 - 1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_bready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.project new file mode 100644 index 000000000..3fbcdcad1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_write_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.svproject new file mode 100644 index 000000000..c87614b22 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/Makefile new file mode 100644 index 000000000..1ac2ce11c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_write_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_write_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hvl.f + +fuse_ctrl_prim_axi_write_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hdl.f + +fuse_ctrl_prim_axi_write_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_write_out_if_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_write_out_if_pkg +COMP_fuse_ctrl_prim_axi_write_out_if_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_write_out_if_pkg +COMP_fuse_ctrl_prim_axi_write_out_if_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_write_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_write_out_if_pkg: $(COMP_fuse_ctrl_prim_axi_write_out_if_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_write_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_write_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_write_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_out_if_pkg += -I$(fuse_ctrl_prim_axi_write_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_out_if_pkg += $(fuse_ctrl_prim_axi_write_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_out_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_write_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/compile.do new file mode 100644 index 000000000..195e5ab83 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_write_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if.compile new file mode 100644 index 000000000..8935f53f7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_write_out_if_hvl.compile + - fuse_ctrl_prim_axi_write_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_bfm.vinfo new file mode 100644 index 000000000..18c4d8b34 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_write_out_if_if.sv +src/fuse_ctrl_prim_axi_write_out_if_driver_bfm.sv +src/fuse_ctrl_prim_axi_write_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_common.compile new file mode 100644 index 000000000..b42384370 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hdl.f new file mode 100644 index 000000000..eb11340b2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hvl.f new file mode 100644 index 000000000..aa9e377b1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_xrtl.f new file mode 100644 index 000000000..54a6c5251 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hdl.compile new file mode 100644 index 000000000..dfeac8677 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_write_out_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_write_out_if_if.sv + - src/fuse_ctrl_prim_axi_write_out_if_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hvl.compile new file mode 100644 index 000000000..2e07fe5b4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_write_out_if_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.sv new file mode 100644 index 000000000..489f30c82 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_write_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_write_out_if_macros.svh" + + export fuse_ctrl_prim_axi_write_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_write_out_if_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_write_out_if_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_if_configuration.svh" + `include "src/fuse_ctrl_prim_axi_write_out_if_driver.svh" + `include "src/fuse_ctrl_prim_axi_write_out_if_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_if_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_write_out_if_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_write_out_if_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_if_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_write_out_if2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.vinfo new file mode 100644 index 000000000..20ff7d6ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv new file mode 100644 index 000000000..e893dbdcc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_write_out_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_write_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..3c442ba81 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_sve.F new file mode 100644 index 000000000..dedbb6647 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if2reg_adapter.svh new file mode 100644 index 000000000..24aefdb70 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_write_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_write_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_write_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_agent.svh new file mode 100644 index 000000000..f7ca4af1b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_write_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_configuration.svh new file mode 100644 index 000000000..1f4fb4bd2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_write_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_write_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_write_out_if_configuration_s fuse_ctrl_prim_axi_write_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_write_out_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_if_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_write_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_write_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_write_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_write_out_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver.svh new file mode 100644 index 000000000..820e05be0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_write_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_write_out_if_driver and fuse_ctrl_prim_axi_write_out_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_write_out_if_driver_bfm. +`fuse_ctrl_prim_axi_write_out_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_out_if_initiator_s fuse_ctrl_prim_axi_write_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_write_out_if_driver and fuse_ctrl_prim_axi_write_out_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_write_out_if_driver_bfm. +`fuse_ctrl_prim_axi_write_out_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_out_if_responder_s fuse_ctrl_prim_axi_write_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_write_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_write_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_write_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_write_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver_bfm.sv new file mode 100644 index 000000000..12dbc26ed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_write_out_if signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_write_out_if driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_write_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_write_out_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_write_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_out_if_macros.svh" + +interface fuse_ctrl_prim_axi_write_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_write_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_write_out_if_pkg::fuse_ctrl_prim_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_write_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_write_out_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_out_if_driver and fuse_ctrl_prim_axi_write_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_out_if_driver_bfm. + `fuse_ctrl_prim_axi_write_out_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_write_out_if_driver and fuse_ctrl_prim_axi_write_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_out_if_driver_bfm. + `fuse_ctrl_prim_axi_write_out_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_write_out_if_configuration_s fuse_ctrl_prim_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_write_out_if_initiator_s fuse_ctrl_prim_axi_write_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_write_out_if_responder_s fuse_ctrl_prim_axi_write_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_write_out_if_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Members within the fuse_ctrl_prim_axi_write_out_if_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + initiator_struct = fuse_ctrl_prim_axi_write_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_prim_axi_write_out_if_responder_struct.xyz = awready_i; // + // fuse_ctrl_prim_axi_write_out_if_responder_struct.xyz = wready_i; // + // fuse_ctrl_prim_axi_write_out_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_out_if_responder_struct.xyz = bid_i; // + // fuse_ctrl_prim_axi_write_out_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_write_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_write_out_if_initiator_s fuse_ctrl_prim_axi_write_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_write_out_if_responder_s fuse_ctrl_prim_axi_write_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_write_out_if_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Variables within the fuse_ctrl_prim_axi_write_out_if_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= fuse_ctrl_prim_axi_write_out_if_initiator_struct.xyz; // + // wready_o <= fuse_ctrl_prim_axi_write_out_if_initiator_struct.xyz; // + // bresp_o <= fuse_ctrl_prim_axi_write_out_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= fuse_ctrl_prim_axi_write_out_if_initiator_struct.xyz; // + // bvalid_o <= fuse_ctrl_prim_axi_write_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_write_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_if.sv new file mode 100644 index 000000000..49688b122 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_write_out_if interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_write_out_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_write_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_write_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_if_bus.awready), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_if_bus.wready), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_if_bus.bresp), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_if_bus.bid), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_out_if_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_write_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_macros.svh new file mode 100644 index 000000000..21b9831e7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_write_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_write_out_if_configuration class. +// + `define fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_write_out_if_configuration_s; + + `define fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_if_configuration_s to_struct();\ + fuse_ctrl_prim_axi_write_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_write_out_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_write_out_if_configuration_s fuse_ctrl_prim_axi_write_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_write_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_write_out_if_transaction class. +// + `define fuse_ctrl_prim_axi_write_out_if_MONITOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } fuse_ctrl_prim_axi_write_out_if_monitor_s; + + `define fuse_ctrl_prim_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_if_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_write_out_if_monitor_struct = \ + { \ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( fuse_ctrl_prim_axi_write_out_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_write_out_if_monitor_s fuse_ctrl_prim_axi_write_out_if_monitor_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = fuse_ctrl_prim_axi_write_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } fuse_ctrl_prim_axi_write_out_if_initiator_s; + + `define fuse_ctrl_prim_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_if_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_write_out_if_initiator_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( fuse_ctrl_prim_axi_write_out_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_write_out_if_initiator_s fuse_ctrl_prim_axi_write_out_if_initiator_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = fuse_ctrl_prim_axi_write_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } fuse_ctrl_prim_axi_write_out_if_responder_s; + + `define fuse_ctrl_prim_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_if_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_write_out_if_responder_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( fuse_ctrl_prim_axi_write_out_if_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_write_out_if_responder_s fuse_ctrl_prim_axi_write_out_if_responder_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = fuse_ctrl_prim_axi_write_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor.svh new file mode 100644 index 000000000..d8852fe9a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_write_out_if transactions observed by the +// fuse_ctrl_prim_axi_write_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_write_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_write_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_write_out_if_monitor_s fuse_ctrl_prim_axi_write_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_write_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor_bfm.sv new file mode 100644 index 000000000..2455bcc7b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_write_out_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_write_out_if monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_write_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_write_out_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_write_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_out_if_macros.svh" + + +interface fuse_ctrl_prim_axi_write_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_write_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_write_out_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_out_if_monitor_s fuse_ctrl_prim_axi_write_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_write_out_if_pkg::fuse_ctrl_prim_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_write_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_write_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_write_out_if_configuration_s fuse_ctrl_prim_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_write_out_if_monitor_s fuse_ctrl_prim_axi_write_out_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_write_out_if_monitor_struct.prim_awready + // // fuse_ctrl_prim_axi_write_out_if_monitor_struct.prim_wready + // // fuse_ctrl_prim_axi_write_out_if_monitor_struct.prim_bresp + // // fuse_ctrl_prim_axi_write_out_if_monitor_struct.prim_bid + // // fuse_ctrl_prim_axi_write_out_if_monitor_struct.prim_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_write_out_if_monitor_struct.xyz = awready_i; // + // fuse_ctrl_prim_axi_write_out_if_monitor_struct.xyz = wready_i; // + // fuse_ctrl_prim_axi_write_out_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_out_if_monitor_struct.xyz = bid_i; // + // fuse_ctrl_prim_axi_write_out_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_random_sequence.svh new file mode 100644 index 000000000..55946e4ad --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_write_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_write_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_write_out_if_random_sequence::body()-fuse_ctrl_prim_axi_write_out_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_write_out_if_driver_bfm via the sequencer and fuse_ctrl_prim_axi_write_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_write_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_responder_sequence.svh new file mode 100644 index 000000000..fa31c283d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_write_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_sequence_base.svh new file mode 100644 index 000000000..aa53c7213 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_out_if_transaction_req_t; + fuse_ctrl_prim_axi_write_out_if_transaction_req_t req; + typedef fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_out_if_transaction_rsp_t; + fuse_ctrl_prim_axi_write_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_write_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_write_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction.svh new file mode 100644 index 000000000..c4bc6fa5c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_write_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_awready ; + logic prim_wready ; + axi_pkg::axi_burst_e prim_bresp ; + logic prim_bid ; + logic prim_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_write_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_write_out_if_monitor and fuse_ctrl_prim_axi_write_out_if_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_out_if_monitor_s fuse_ctrl_prim_axi_write_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_out_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_if_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_out_if_driver and fuse_ctrl_prim_axi_write_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_out_if_initiator_s fuse_ctrl_prim_axi_write_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_out_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_if_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_write_out_if_driver and fuse_ctrl_prim_axi_write_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_out_if_responder_s fuse_ctrl_prim_axi_write_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_out_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_if_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awready:0x%x prim_wready:0x%x prim_bresp:0x%x prim_bid:0x%x prim_bvalid:0x%x ",prim_awready,prim_wready,prim_bresp,prim_bid,prim_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_awready == RHS.prim_awready) + &&(this.prim_wready == RHS.prim_wready) + &&(this.prim_bresp == RHS.prim_bresp) + &&(this.prim_bid == RHS.prim_bid) + &&(this.prim_bvalid == RHS.prim_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awready = RHS.prim_awready; + this.prim_wready = RHS.prim_wready; + this.prim_bresp = RHS.prim_bresp; + this.prim_bid = RHS.prim_bid; + this.prim_bvalid = RHS.prim_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_write_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awready,"prim_awready"); + $add_attribute(transaction_view_h,prim_wready,"prim_wready"); + $add_attribute(transaction_view_h,prim_bresp,"prim_bresp"); + $add_attribute(transaction_view_h,prim_bid,"prim_bid"); + $add_attribute(transaction_view_h,prim_bvalid,"prim_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction_coverage.svh new file mode 100644 index 000000000..2459f7b3c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_write_out_if transaction information using +// a covergroup named fuse_ctrl_prim_axi_write_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_write_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awready: coverpoint coverage_trans.prim_awready; + prim_wready: coverpoint coverage_trans.prim_wready; + prim_bresp: coverpoint coverage_trans.prim_bresp; + prim_bid: coverpoint coverage_trans.prim_bid; + prim_bvalid: coverpoint coverage_trans.prim_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_write_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_write_out_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_write_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/yaml/fuse_ctrl_prim_axi_write_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/yaml/fuse_ctrl_prim_axi_write_out_if_interface.yaml new file mode 100644 index 000000000..0c0ce4466 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/yaml/fuse_ctrl_prim_axi_write_out_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_write_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.project new file mode 100644 index 000000000..3e0bf6c6b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_write_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.svproject new file mode 100644 index 000000000..376273afc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/Makefile new file mode 100644 index 000000000..7bd75ac29 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_write_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_write_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hvl.f + +fuse_ctrl_prim_axi_write_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hdl.f + +fuse_ctrl_prim_axi_write_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_write_out_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_write_out_pkg +COMP_fuse_ctrl_prim_axi_write_out_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_write_out_pkg +COMP_fuse_ctrl_prim_axi_write_out_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_write_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_write_out_pkg: $(COMP_fuse_ctrl_prim_axi_write_out_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_write_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_write_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_write_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_write_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_write_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_out_pkg += -I$(fuse_ctrl_prim_axi_write_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_out_pkg += $(fuse_ctrl_prim_axi_write_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_write_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/compile.do new file mode 100644 index 000000000..2728571fe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_write_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out.compile new file mode 100644 index 000000000..fa21f0f3e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_write_out_hvl.compile + - fuse_ctrl_prim_axi_write_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_bfm.vinfo new file mode 100644 index 000000000..708c584b5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_write_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_write_out_if.sv +src/fuse_ctrl_prim_axi_write_out_driver_bfm.sv +src/fuse_ctrl_prim_axi_write_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_common.compile new file mode 100644 index 000000000..ba5ad3565 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_write_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hdl.f new file mode 100644 index 000000000..6b9dd5f56 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hvl.f new file mode 100644 index 000000000..6aea29704 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_xrtl.f new file mode 100644 index 000000000..3c6293173 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hdl.compile new file mode 100644 index 000000000..1a738c19e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_write_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_write_out_if.sv + - src/fuse_ctrl_prim_axi_write_out_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_write_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hvl.compile new file mode 100644 index 000000000..894eaaf2f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_write_out_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_write_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.sv new file mode 100644 index 000000000..50f57ffb2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_write_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_write_out_macros.svh" + + export fuse_ctrl_prim_axi_write_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_write_out_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_write_out_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_configuration.svh" + `include "src/fuse_ctrl_prim_axi_write_out_driver.svh" + `include "src/fuse_ctrl_prim_axi_write_out_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_write_out_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_write_out_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_write_out2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.vinfo new file mode 100644 index 000000000..790347eb1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_write_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_write_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.sv new file mode 100644 index 000000000..bd64b4efe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_write_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_write_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.vinfo new file mode 100644 index 000000000..dfc2d8e5c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_write_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_sve.F new file mode 100644 index 000000000..9a71aafbc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out2reg_adapter.svh new file mode 100644 index 000000000..34b91afc0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_write_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_write_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_write_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_agent.svh new file mode 100644 index 000000000..0622fae7b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_write_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_write_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_write_out_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_configuration.svh new file mode 100644 index 000000000..2440f4015 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_write_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_write_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_write_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_write_out_configuration_s fuse_ctrl_prim_axi_write_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_write_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_write_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_write_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_write_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_write_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_write_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver.svh new file mode 100644 index 000000000..97995a3fe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_write_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_write_out_driver and fuse_ctrl_prim_axi_write_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_write_out_driver_bfm. +`fuse_ctrl_prim_axi_write_out_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_out_initiator_s fuse_ctrl_prim_axi_write_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_write_out_driver and fuse_ctrl_prim_axi_write_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_write_out_driver_bfm. +`fuse_ctrl_prim_axi_write_out_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_out_responder_s fuse_ctrl_prim_axi_write_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_write_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_write_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_write_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_write_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver_bfm.sv new file mode 100644 index 000000000..7e5c72db7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_write_out signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_write_out driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_write_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_write_out_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_write_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_out_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_out_macros.svh" + +interface fuse_ctrl_prim_axi_write_out_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_write_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_write_out_pkg::fuse_ctrl_prim_axi_write_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_write_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_write_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_write_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_out_driver and fuse_ctrl_prim_axi_write_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_out_driver_bfm. + `fuse_ctrl_prim_axi_write_out_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_write_out_driver and fuse_ctrl_prim_axi_write_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_out_driver_bfm. + `fuse_ctrl_prim_axi_write_out_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_write_out_configuration_s fuse_ctrl_prim_axi_write_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_write_out_initiator_s fuse_ctrl_prim_axi_write_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_write_out_responder_s fuse_ctrl_prim_axi_write_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_write_out_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Members within the fuse_ctrl_prim_axi_write_out_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + initiator_struct = fuse_ctrl_prim_axi_write_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_prim_axi_write_out_responder_struct.xyz = awready_i; // + // fuse_ctrl_prim_axi_write_out_responder_struct.xyz = wready_i; // + // fuse_ctrl_prim_axi_write_out_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_out_responder_struct.xyz = bid_i; // + // fuse_ctrl_prim_axi_write_out_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_write_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_write_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_write_out_initiator_s fuse_ctrl_prim_axi_write_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_write_out_responder_s fuse_ctrl_prim_axi_write_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_write_out_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Variables within the fuse_ctrl_prim_axi_write_out_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= fuse_ctrl_prim_axi_write_out_initiator_struct.xyz; // + // wready_o <= fuse_ctrl_prim_axi_write_out_initiator_struct.xyz; // + // bresp_o <= fuse_ctrl_prim_axi_write_out_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= fuse_ctrl_prim_axi_write_out_initiator_struct.xyz; // + // bvalid_o <= fuse_ctrl_prim_axi_write_out_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_write_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_write_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_if.sv new file mode 100644 index 000000000..66c2c91b7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_write_out interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_write_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_write_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_write_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_bus.awready), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_bus.wready), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_bus.bresp), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_bus.bid), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_out_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_write_out_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_macros.svh new file mode 100644 index 000000000..28bfd68ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_write_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_write_out_configuration class. +// + `define fuse_ctrl_prim_axi_write_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_write_out_configuration_s; + + `define fuse_ctrl_prim_axi_write_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_configuration_s to_struct();\ + fuse_ctrl_prim_axi_write_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_write_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_write_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_write_out_configuration_s fuse_ctrl_prim_axi_write_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_write_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_write_out_transaction class. +// + `define fuse_ctrl_prim_axi_write_out_MONITOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } fuse_ctrl_prim_axi_write_out_monitor_s; + + `define fuse_ctrl_prim_axi_write_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_write_out_monitor_struct = \ + { \ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( fuse_ctrl_prim_axi_write_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_write_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_write_out_monitor_s fuse_ctrl_prim_axi_write_out_monitor_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = fuse_ctrl_prim_axi_write_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_write_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_out_INITIATOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } fuse_ctrl_prim_axi_write_out_initiator_s; + + `define fuse_ctrl_prim_axi_write_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_write_out_initiator_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( fuse_ctrl_prim_axi_write_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_write_out_initiator_s fuse_ctrl_prim_axi_write_out_initiator_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = fuse_ctrl_prim_axi_write_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_write_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_out_RESPONDER_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } fuse_ctrl_prim_axi_write_out_responder_s; + + `define fuse_ctrl_prim_axi_write_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_write_out_responder_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( fuse_ctrl_prim_axi_write_out_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_write_out_responder_s fuse_ctrl_prim_axi_write_out_responder_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = fuse_ctrl_prim_axi_write_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor.svh new file mode 100644 index 000000000..db0d6bb13 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_write_out transactions observed by the +// fuse_ctrl_prim_axi_write_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_write_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_write_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_write_out_monitor_s fuse_ctrl_prim_axi_write_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_write_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor_bfm.sv new file mode 100644 index 000000000..d8a55807b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_write_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_write_out monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_write_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_write_out_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_write_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_out_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_out_macros.svh" + + +interface fuse_ctrl_prim_axi_write_out_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_write_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_write_out_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_out_monitor_s fuse_ctrl_prim_axi_write_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_write_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_write_out_pkg::fuse_ctrl_prim_axi_write_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_write_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_write_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_write_out_configuration_s fuse_ctrl_prim_axi_write_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_write_out_monitor_s fuse_ctrl_prim_axi_write_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_write_out_monitor_struct.prim_awready + // // fuse_ctrl_prim_axi_write_out_monitor_struct.prim_wready + // // fuse_ctrl_prim_axi_write_out_monitor_struct.prim_bresp + // // fuse_ctrl_prim_axi_write_out_monitor_struct.prim_bid + // // fuse_ctrl_prim_axi_write_out_monitor_struct.prim_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_write_out_monitor_struct.xyz = awready_i; // + // fuse_ctrl_prim_axi_write_out_monitor_struct.xyz = wready_i; // + // fuse_ctrl_prim_axi_write_out_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_out_monitor_struct.xyz = bid_i; // + // fuse_ctrl_prim_axi_write_out_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_random_sequence.svh new file mode 100644 index 000000000..c5c49199d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_write_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_write_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_write_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_write_out_random_sequence::body()-fuse_ctrl_prim_axi_write_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_write_out_driver_bfm via the sequencer and fuse_ctrl_prim_axi_write_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_write_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_responder_sequence.svh new file mode 100644 index 000000000..f129205e3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_write_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_write_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_sequence_base.svh new file mode 100644 index 000000000..28cfc04d0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_out_transaction_req_t; + fuse_ctrl_prim_axi_write_out_transaction_req_t req; + typedef fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_out_transaction_rsp_t; + fuse_ctrl_prim_axi_write_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_write_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_write_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction.svh new file mode 100644 index 000000000..fd93a892d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_write_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_awready ; + logic prim_wready ; + axi_pkg::axi_burst_e prim_bresp ; + logic prim_bid ; + logic prim_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_write_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_write_out_monitor and fuse_ctrl_prim_axi_write_out_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_out_monitor_s fuse_ctrl_prim_axi_write_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_out_driver and fuse_ctrl_prim_axi_write_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_out_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_out_initiator_s fuse_ctrl_prim_axi_write_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_write_out_driver and fuse_ctrl_prim_axi_write_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_out_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_out_responder_s fuse_ctrl_prim_axi_write_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awready:0x%x prim_wready:0x%x prim_bresp:0x%x prim_bid:0x%x prim_bvalid:0x%x ",prim_awready,prim_wready,prim_bresp,prim_bid,prim_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_awready == RHS.prim_awready) + &&(this.prim_wready == RHS.prim_wready) + &&(this.prim_bresp == RHS.prim_bresp) + &&(this.prim_bid == RHS.prim_bid) + &&(this.prim_bvalid == RHS.prim_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awready = RHS.prim_awready; + this.prim_wready = RHS.prim_wready; + this.prim_bresp = RHS.prim_bresp; + this.prim_bid = RHS.prim_bid; + this.prim_bvalid = RHS.prim_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_write_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awready,"prim_awready"); + $add_attribute(transaction_view_h,prim_wready,"prim_wready"); + $add_attribute(transaction_view_h,prim_bresp,"prim_bresp"); + $add_attribute(transaction_view_h,prim_bid,"prim_bid"); + $add_attribute(transaction_view_h,prim_bvalid,"prim_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction_coverage.svh new file mode 100644 index 000000000..8a37ca501 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_write_out transaction information using +// a covergroup named fuse_ctrl_prim_axi_write_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_write_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awready: coverpoint coverage_trans.prim_awready; + prim_wready: coverpoint coverage_trans.prim_wready; + prim_bresp: coverpoint coverage_trans.prim_bresp; + prim_bid: coverpoint coverage_trans.prim_bid; + prim_bvalid: coverpoint coverage_trans.prim_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_write_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_write_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_write_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/yaml/fuse_ctrl_prim_axi_write_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/yaml/fuse_ctrl_prim_axi_write_out_interface.yaml new file mode 100644 index 000000000..d0566d0e7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/yaml/fuse_ctrl_prim_axi_write_out_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_write_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/.project new file mode 100644 index 000000000..2ff8b5e37 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_pwr_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/.svproject new file mode 100644 index 000000000..240269e95 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/Makefile new file mode 100644 index 000000000..abc4c57ca --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_pwr_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_pwr_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hvl.f + +fuse_ctrl_pwr_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hdl.f + +fuse_ctrl_pwr_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_xrtl.f + +COMP_fuse_ctrl_pwr_in_PKG_TGT_0 = q_comp_fuse_ctrl_pwr_in_pkg +COMP_fuse_ctrl_pwr_in_PKG_TGT_1 = v_comp_fuse_ctrl_pwr_in_pkg +COMP_fuse_ctrl_pwr_in_PKG_TGT = $(COMP_fuse_ctrl_pwr_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_pwr_in_pkg: $(COMP_fuse_ctrl_pwr_in_PKG_TGT) + +q_comp_fuse_ctrl_pwr_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_pwr_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_pwr_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_pwr_in_PKG_XRTL) + +v_comp_fuse_ctrl_pwr_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_pwr_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_pwr_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_pwr_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_pwr_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_pwr_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_pwr_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_pwr_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_pwr_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_pwr_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_pwr_in_pkg += -I$(fuse_ctrl_pwr_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_pwr_in_pkg += $(fuse_ctrl_pwr_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_pwr_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_pwr_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_pwr_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_pwr_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_pwr_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_pwr_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/compile.do new file mode 100644 index 000000000..2d426564e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_pwr_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in.compile new file mode 100644 index 000000000..d752db08d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_pwr_in_hvl.compile + - fuse_ctrl_pwr_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_bfm.vinfo new file mode 100644 index 000000000..caae09a06 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_pwr_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_pwr_in_if.sv +src/fuse_ctrl_pwr_in_driver_bfm.sv +src/fuse_ctrl_pwr_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_common.compile new file mode 100644 index 000000000..a6831d02e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_pwr_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hdl.f new file mode 100644 index 000000000..5fc815f8a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hvl.f new file mode 100644 index 000000000..b62aefb0d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_xrtl.f new file mode 100644 index 000000000..0e6b1f94c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_hdl.compile new file mode 100644 index 000000000..99fb5f9a6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_pwr_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_pwr_in_if.sv + - src/fuse_ctrl_pwr_in_monitor_bfm.sv + - src/fuse_ctrl_pwr_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_hvl.compile new file mode 100644 index 000000000..2b577edca --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_pwr_in_common.compile +incdir: + - . +src: + - fuse_ctrl_pwr_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg.sv new file mode 100644 index 000000000..dc960d5f1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_pwr_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_pwr_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_pwr_in_macros.svh" + + export fuse_ctrl_pwr_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_pwr_in_typedefs.svh" + `include "src/fuse_ctrl_pwr_in_transaction.svh" + + `include "src/fuse_ctrl_pwr_in_configuration.svh" + `include "src/fuse_ctrl_pwr_in_driver.svh" + `include "src/fuse_ctrl_pwr_in_monitor.svh" + + `include "src/fuse_ctrl_pwr_in_transaction_coverage.svh" + `include "src/fuse_ctrl_pwr_in_sequence_base.svh" + `include "src/fuse_ctrl_pwr_in_random_sequence.svh" + + `include "src/fuse_ctrl_pwr_in_responder_sequence.svh" + `include "src/fuse_ctrl_pwr_in2reg_adapter.svh" + + `include "src/fuse_ctrl_pwr_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg.vinfo new file mode 100644 index 000000000..7f4e27c24 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_pwr_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_pwr_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_hdl.sv new file mode 100644 index 000000000..fe57a7f58 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_pwr_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_pwr_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_pwr_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_hdl.vinfo new file mode 100644 index 000000000..b74887324 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_pwr_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_sve.F new file mode 100644 index 000000000..5f60ac6b9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in2reg_adapter.svh new file mode 100644 index 000000000..5ef2d62ce --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_pwr_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_in2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_pwr_in2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_pwr_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_pwr_in_transaction trans_h = fuse_ctrl_pwr_in_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_pwr_in_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_pwr_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_agent.svh new file mode 100644 index 000000000..b6fb954e4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_in_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_pwr_in_configuration ), + .DRIVER_T(fuse_ctrl_pwr_in_driver ), + .MONITOR_T(fuse_ctrl_pwr_in_monitor ), + .COVERAGE_T(fuse_ctrl_pwr_in_transaction_coverage ), + .TRANS_T(fuse_ctrl_pwr_in_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_pwr_in_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_configuration.svh new file mode 100644 index 000000000..09b18fec9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_pwr_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_in_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_pwr_in_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_pwr_in_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_pwr_in_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_pwr_in_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_pwr_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_CONFIGURATION_STRUCT + fuse_ctrl_pwr_in_configuration_s fuse_ctrl_pwr_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_pwr_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_pwr_in_configuration_struct. + // This function is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_pwr_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_pwr_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_pwr_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_pwr_in_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_pwr_in_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_pwr_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_pwr_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_pwr_in_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_driver.svh new file mode 100644 index 000000000..e115ef740 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_in_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_pwr_in_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_pwr_in_driver_bfm ), + .REQ(fuse_ctrl_pwr_in_transaction ), + .RSP(fuse_ctrl_pwr_in_transaction )); + + `uvm_component_utils( fuse_ctrl_pwr_in_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_pwr_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_pwr_in_driver and fuse_ctrl_pwr_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_pwr_in_driver_bfm. +`fuse_ctrl_pwr_in_INITIATOR_STRUCT + fuse_ctrl_pwr_in_initiator_s fuse_ctrl_pwr_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_pwr_in_driver and fuse_ctrl_pwr_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_pwr_in_driver_bfm. +`fuse_ctrl_pwr_in_RESPONDER_STRUCT + fuse_ctrl_pwr_in_responder_s fuse_ctrl_pwr_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_pwr_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_pwr_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_pwr_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_pwr_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_driver_bfm.sv new file mode 100644 index 000000000..34999f1bb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_driver_bfm.sv @@ -0,0 +1,294 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_pwr_in signal driving. It is +// accessed by the uvm fuse_ctrl_pwr_in driver through a virtual interface +// handle in the fuse_ctrl_pwr_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_pwr_in_if. +// +// Input signals from the fuse_ctrl_pwr_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_pwr_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_pwr_in_pkg_hdl::*; +`include "src/fuse_ctrl_pwr_in_macros.svh" + +interface fuse_ctrl_pwr_in_driver_bfm + (fuse_ctrl_pwr_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_pwr_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i_i; + reg [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i_o = 'bz; + + // Bi-directional signals + tri otp_ext_voltage_h_io_i; + reg otp_ext_voltage_h_io_o = 'bz; + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.pwr_otp_i = (initiator_responder == INITIATOR) ? pwr_otp_i_o : 'bz; + assign pwr_otp_i_i = bus.pwr_otp_i; + assign bus.otp_ext_voltage_h_io = otp_ext_voltage_h_io_o; + + // Proxy handle to UVM driver + fuse_ctrl_pwr_in_pkg::fuse_ctrl_pwr_in_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_pwr_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_pwr_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_pwr_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_pwr_in_driver and fuse_ctrl_pwr_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_pwr_in_driver_bfm. + `fuse_ctrl_pwr_in_INITIATOR_STRUCT + fuse_ctrl_pwr_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_pwr_in_driver and fuse_ctrl_pwr_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_pwr_in_driver_bfm. + `fuse_ctrl_pwr_in_RESPONDER_STRUCT + fuse_ctrl_pwr_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + pwr_otp_i_o <= 'bz; + // Bi-directional signals + otp_ext_voltage_h_io_o <= 'bz; + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_pwr_in_configuration_s fuse_ctrl_pwr_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_pwr_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_pwr_in_initiator_s fuse_ctrl_pwr_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_pwr_in_responder_s fuse_ctrl_pwr_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_pwr_in_initiator_struct: + // bit assert_otp_init ; + // Members within the fuse_ctrl_pwr_in_responder_struct: + // bit assert_otp_init ; + initiator_struct = fuse_ctrl_pwr_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // fuse_ctrl_pwr_in_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // pwr_otp_i_o <= fuse_ctrl_pwr_in_initiator_struct.xyz; // [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] + // Initiator inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_pwr_in_initiator_struct.xyz; // + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_pwr_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_pwr_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_pwr_in_initiator_s fuse_ctrl_pwr_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_pwr_in_responder_s fuse_ctrl_pwr_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_pwr_in_initiator_struct: + // bit assert_otp_init ; + // Variables within the fuse_ctrl_pwr_in_responder_struct: + // bit assert_otp_init ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_pwr_in_responder_struct.xyz = pwr_otp_i_i; // [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] + // Responder inout signals + // fuse_ctrl_pwr_in_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_pwr_in_initiator_struct.xyz; // + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_pwr_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_pwr_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_if.sv new file mode 100644 index 000000000..efb6acfee --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_if.sv @@ -0,0 +1,83 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_pwr_in interface signals. +// It is instantiated once per fuse_ctrl_pwr_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_pwr_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_pwr_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_pwr_in_bus.pwr_otp_i), // Agent output +// .dut_signal_port(fuse_ctrl_pwr_in_bus.otp_ext_voltage_h_io), // Agent inout + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_pwr_in_pkg_hdl::*; + +interface fuse_ctrl_pwr_in_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i, + inout tri otp_ext_voltage_h_io + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input pwr_otp_i, + input otp_ext_voltage_h_io + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output pwr_otp_i, + inout otp_ext_voltage_h_io + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input pwr_otp_i, + inout otp_ext_voltage_h_io + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_macros.svh new file mode 100644 index 000000000..64d3c0c9a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_pwr_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_pwr_in_configuration class. +// + `define fuse_ctrl_pwr_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_pwr_in_configuration_s; + + `define fuse_ctrl_pwr_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_pwr_in_configuration_s to_struct();\ + fuse_ctrl_pwr_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_pwr_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_pwr_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_pwr_in_configuration_s fuse_ctrl_pwr_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_pwr_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_pwr_in_transaction class. +// + `define fuse_ctrl_pwr_in_MONITOR_STRUCT typedef struct packed { \ + bit assert_otp_init ; \ + } fuse_ctrl_pwr_in_monitor_s; + + `define fuse_ctrl_pwr_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_pwr_in_monitor_s to_monitor_struct();\ + fuse_ctrl_pwr_in_monitor_struct = \ + { \ + this.assert_otp_init \ + };\ + return ( fuse_ctrl_pwr_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_pwr_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_pwr_in_monitor_s fuse_ctrl_pwr_in_monitor_struct);\ + {\ + this.assert_otp_init \ + } = fuse_ctrl_pwr_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_pwr_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_pwr_in_INITIATOR_STRUCT typedef struct packed { \ + bit assert_otp_init ; \ + } fuse_ctrl_pwr_in_initiator_s; + + `define fuse_ctrl_pwr_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_pwr_in_initiator_s to_initiator_struct();\ + fuse_ctrl_pwr_in_initiator_struct = \ + {\ + this.assert_otp_init \ + };\ + return ( fuse_ctrl_pwr_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_pwr_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_pwr_in_initiator_s fuse_ctrl_pwr_in_initiator_struct);\ + {\ + this.assert_otp_init \ + } = fuse_ctrl_pwr_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_pwr_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_pwr_in_RESPONDER_STRUCT typedef struct packed { \ + bit assert_otp_init ; \ + } fuse_ctrl_pwr_in_responder_s; + + `define fuse_ctrl_pwr_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_pwr_in_responder_s to_responder_struct();\ + fuse_ctrl_pwr_in_responder_struct = \ + {\ + this.assert_otp_init \ + };\ + return ( fuse_ctrl_pwr_in_responder_struct);\ + endfunction + + `define fuse_ctrl_pwr_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_pwr_in_responder_s fuse_ctrl_pwr_in_responder_struct);\ + {\ + this.assert_otp_init \ + } = fuse_ctrl_pwr_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_monitor.svh new file mode 100644 index 000000000..8966b7e75 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_pwr_in transactions observed by the +// fuse_ctrl_pwr_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_in_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_pwr_in_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_pwr_in_monitor_bfm ), + .TRANS_T(fuse_ctrl_pwr_in_transaction )); + + `uvm_component_utils( fuse_ctrl_pwr_in_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_pwr_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_pwr_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_pwr_in_monitor_s fuse_ctrl_pwr_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_pwr_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_monitor_bfm.sv new file mode 100644 index 000000000..a2373ce44 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_monitor_bfm.sv @@ -0,0 +1,191 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_pwr_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_pwr_in monitor through a virtual +// interface handle in the fuse_ctrl_pwr_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_pwr_in_if. +// +// Input signals from the fuse_ctrl_pwr_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_pwr_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_pwr_in_pkg_hdl::*; +`include "src/fuse_ctrl_pwr_in_macros.svh" + + +interface fuse_ctrl_pwr_in_monitor_bfm + ( fuse_ctrl_pwr_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_pwr_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_pwr_in_MONITOR_STRUCT + fuse_ctrl_pwr_in_monitor_s fuse_ctrl_pwr_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_pwr_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i_i; + tri otp_ext_voltage_h_io_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign pwr_otp_i_i = bus.pwr_otp_i; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + + // Proxy handle to UVM monitor + fuse_ctrl_pwr_in_pkg::fuse_ctrl_pwr_in_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_pwr_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_pwr_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_pwr_in_configuration_s fuse_ctrl_pwr_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_pwr_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_pwr_in_monitor_s fuse_ctrl_pwr_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_pwr_in_monitor_struct.assert_otp_init + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_pwr_in_monitor_struct.xyz = pwr_otp_i_i; // [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] + // fuse_ctrl_pwr_in_monitor_struct.xyz = otp_ext_voltage_h_io_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_random_sequence.svh new file mode 100644 index 000000000..bf58cb0ee --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_pwr_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_pwr_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_in_random_sequence + extends fuse_ctrl_pwr_in_sequence_base ; + + `uvm_object_utils( fuse_ctrl_pwr_in_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_pwr_in_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_pwr_in_random_sequence::body()-fuse_ctrl_pwr_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_pwr_in_driver_bfm via the sequencer and fuse_ctrl_pwr_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_pwr_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_responder_sequence.svh new file mode 100644 index 000000000..289f878ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_in_responder_sequence + extends fuse_ctrl_pwr_in_sequence_base ; + + `uvm_object_utils( fuse_ctrl_pwr_in_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_pwr_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_pwr_in_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_sequence_base.svh new file mode 100644 index 000000000..7f03e487e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_in_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_pwr_in_transaction ), + .RSP(fuse_ctrl_pwr_in_transaction )); + + `uvm_object_utils( fuse_ctrl_pwr_in_sequence_base ) + + // variables + typedef fuse_ctrl_pwr_in_transaction fuse_ctrl_pwr_in_transaction_req_t; + fuse_ctrl_pwr_in_transaction_req_t req; + typedef fuse_ctrl_pwr_in_transaction fuse_ctrl_pwr_in_transaction_rsp_t; + fuse_ctrl_pwr_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_pwr_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_pwr_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_transaction.svh new file mode 100644 index 000000000..371c51131 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_transaction.svh @@ -0,0 +1,195 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_pwr_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_in_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_pwr_in_transaction ) + + bit assert_otp_init ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_pwr_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_pwr_in_monitor and fuse_ctrl_pwr_in_monitor_bfm + // This struct is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_MONITOR_STRUCT + fuse_ctrl_pwr_in_monitor_s fuse_ctrl_pwr_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_pwr_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_pwr_in_monitor_struct. + // This function is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_pwr_in_driver and fuse_ctrl_pwr_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_pwr_in_driver_bfm. + // This struct is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_INITIATOR_STRUCT + fuse_ctrl_pwr_in_initiator_s fuse_ctrl_pwr_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_pwr_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_pwr_in_initiator_struct. + // This function is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_pwr_in_driver and fuse_ctrl_pwr_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_pwr_in_driver_bfm. + // This struct is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_RESPONDER_STRUCT + fuse_ctrl_pwr_in_responder_s fuse_ctrl_pwr_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_pwr_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_pwr_in_responder_struct. + // This function is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("assert_otp_init:0x%x ",assert_otp_init); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_pwr_in_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_pwr_in_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.assert_otp_init = RHS.assert_otp_init; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_pwr_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,assert_otp_init,"assert_otp_init"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_transaction_coverage.svh new file mode 100644 index 000000000..4bbaa5e7b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_transaction_coverage.svh @@ -0,0 +1,84 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_pwr_in transaction information using +// a covergroup named fuse_ctrl_pwr_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_in_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_pwr_in_transaction )); + + `uvm_component_utils( fuse_ctrl_pwr_in_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_pwr_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + assert_otp_init: coverpoint coverage_trans.assert_otp_init; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_pwr_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_pwr_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_pwr_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_pwr_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/yaml/fuse_ctrl_pwr_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/yaml/fuse_ctrl_pwr_in_interface.yaml new file mode 100644 index 000000000..ec63253f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/yaml/fuse_ctrl_pwr_in_interface.yaml @@ -0,0 +1,33 @@ +uvmf: + interfaces: + fuse_ctrl_pwr_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: output + name: pwr_otp_i + reset_value: '''bz' + width: '[''$bits(pwrmgr_pkg::pwr_otp_req_t)'']' + - dir: inout + name: otp_ext_voltage_h_io + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: assert_otp_init + type: bit + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/.project new file mode 100644 index 000000000..a43a448fe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_pwr_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/.svproject new file mode 100644 index 000000000..20bf29405 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/Makefile new file mode 100644 index 000000000..412c5be02 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_pwr_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_pwr_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hvl.f + +fuse_ctrl_pwr_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hdl.f + +fuse_ctrl_pwr_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_xrtl.f + +COMP_fuse_ctrl_pwr_out_PKG_TGT_0 = q_comp_fuse_ctrl_pwr_out_pkg +COMP_fuse_ctrl_pwr_out_PKG_TGT_1 = v_comp_fuse_ctrl_pwr_out_pkg +COMP_fuse_ctrl_pwr_out_PKG_TGT = $(COMP_fuse_ctrl_pwr_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_pwr_out_pkg: $(COMP_fuse_ctrl_pwr_out_PKG_TGT) + +q_comp_fuse_ctrl_pwr_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_pwr_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_pwr_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_pwr_out_PKG_XRTL) + +v_comp_fuse_ctrl_pwr_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_pwr_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_pwr_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_pwr_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_pwr_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_pwr_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_pwr_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_pwr_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_pwr_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_pwr_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_pwr_out_pkg += -I$(fuse_ctrl_pwr_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_pwr_out_pkg += $(fuse_ctrl_pwr_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_pwr_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_pwr_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_pwr_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_pwr_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_pwr_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_pwr_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/compile.do new file mode 100644 index 000000000..da19a9005 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_pwr_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out.compile new file mode 100644 index 000000000..3739adcd8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_pwr_out_hvl.compile + - fuse_ctrl_pwr_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_bfm.vinfo new file mode 100644 index 000000000..40b8da1de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_pwr_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_pwr_out_if.sv +src/fuse_ctrl_pwr_out_driver_bfm.sv +src/fuse_ctrl_pwr_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_common.compile new file mode 100644 index 000000000..13236612e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_pwr_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hdl.f new file mode 100644 index 000000000..d6ce3f2a3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hvl.f new file mode 100644 index 000000000..8545586ce --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_xrtl.f new file mode 100644 index 000000000..eddc5dda6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_hdl.compile new file mode 100644 index 000000000..7cca6d2df --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_pwr_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_pwr_out_if.sv + - src/fuse_ctrl_pwr_out_monitor_bfm.sv + - src/fuse_ctrl_pwr_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_hvl.compile new file mode 100644 index 000000000..daaff80fa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_pwr_out_common.compile +incdir: + - . +src: + - fuse_ctrl_pwr_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg.sv new file mode 100644 index 000000000..632f46c8f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_pwr_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_pwr_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_pwr_out_macros.svh" + + export fuse_ctrl_pwr_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_pwr_out_typedefs.svh" + `include "src/fuse_ctrl_pwr_out_transaction.svh" + + `include "src/fuse_ctrl_pwr_out_configuration.svh" + `include "src/fuse_ctrl_pwr_out_driver.svh" + `include "src/fuse_ctrl_pwr_out_monitor.svh" + + `include "src/fuse_ctrl_pwr_out_transaction_coverage.svh" + `include "src/fuse_ctrl_pwr_out_sequence_base.svh" + `include "src/fuse_ctrl_pwr_out_random_sequence.svh" + + `include "src/fuse_ctrl_pwr_out_responder_sequence.svh" + `include "src/fuse_ctrl_pwr_out2reg_adapter.svh" + + `include "src/fuse_ctrl_pwr_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg.vinfo new file mode 100644 index 000000000..fd4dfbdf9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_pwr_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_pwr_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_hdl.sv new file mode 100644 index 000000000..9d8ba22cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_pwr_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_pwr_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_pwr_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_hdl.vinfo new file mode 100644 index 000000000..6be7b78a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_pwr_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_sve.F new file mode 100644 index 000000000..2ca94bc40 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out2reg_adapter.svh new file mode 100644 index 000000000..4dc675a52 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_pwr_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_out2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_pwr_out2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_pwr_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_pwr_out_transaction trans_h = fuse_ctrl_pwr_out_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_pwr_out_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_pwr_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_agent.svh new file mode 100644 index 000000000..a1f6f3921 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_out_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_pwr_out_configuration ), + .DRIVER_T(fuse_ctrl_pwr_out_driver ), + .MONITOR_T(fuse_ctrl_pwr_out_monitor ), + .COVERAGE_T(fuse_ctrl_pwr_out_transaction_coverage ), + .TRANS_T(fuse_ctrl_pwr_out_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_pwr_out_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_configuration.svh new file mode 100644 index 000000000..669971d36 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_pwr_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_out_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_pwr_out_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_pwr_out_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_pwr_out_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_pwr_out_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_pwr_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_CONFIGURATION_STRUCT + fuse_ctrl_pwr_out_configuration_s fuse_ctrl_pwr_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_pwr_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_pwr_out_configuration_struct. + // This function is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_pwr_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_pwr_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_pwr_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_pwr_out_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_pwr_out_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_pwr_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_pwr_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_pwr_out_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_driver.svh new file mode 100644 index 000000000..dd7809272 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_out_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_pwr_out_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_pwr_out_driver_bfm ), + .REQ(fuse_ctrl_pwr_out_transaction ), + .RSP(fuse_ctrl_pwr_out_transaction )); + + `uvm_component_utils( fuse_ctrl_pwr_out_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_pwr_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_pwr_out_driver and fuse_ctrl_pwr_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_pwr_out_driver_bfm. +`fuse_ctrl_pwr_out_INITIATOR_STRUCT + fuse_ctrl_pwr_out_initiator_s fuse_ctrl_pwr_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_pwr_out_driver and fuse_ctrl_pwr_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_pwr_out_driver_bfm. +`fuse_ctrl_pwr_out_RESPONDER_STRUCT + fuse_ctrl_pwr_out_responder_s fuse_ctrl_pwr_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_pwr_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_pwr_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_pwr_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_pwr_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_driver_bfm.sv new file mode 100644 index 000000000..973336690 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_driver_bfm.sv @@ -0,0 +1,294 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_pwr_out signal driving. It is +// accessed by the uvm fuse_ctrl_pwr_out driver through a virtual interface +// handle in the fuse_ctrl_pwr_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_pwr_out_if. +// +// Input signals from the fuse_ctrl_pwr_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_pwr_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_pwr_out_pkg_hdl::*; +`include "src/fuse_ctrl_pwr_out_macros.svh" + +interface fuse_ctrl_pwr_out_driver_bfm + (fuse_ctrl_pwr_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_pwr_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_i; + reg [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + tri otp_ext_voltage_h_io_i; + reg otp_ext_voltage_h_io_o = 'bz; + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign pwr_otp_o_i = bus.pwr_otp_o; + assign bus.pwr_otp_o = (initiator_responder == RESPONDER) ? pwr_otp_o_o : 'bz; + + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.otp_ext_voltage_h_io = otp_ext_voltage_h_io_o; + + // Proxy handle to UVM driver + fuse_ctrl_pwr_out_pkg::fuse_ctrl_pwr_out_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_pwr_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_pwr_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_pwr_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_pwr_out_driver and fuse_ctrl_pwr_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_pwr_out_driver_bfm. + `fuse_ctrl_pwr_out_INITIATOR_STRUCT + fuse_ctrl_pwr_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_pwr_out_driver and fuse_ctrl_pwr_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_pwr_out_driver_bfm. + `fuse_ctrl_pwr_out_RESPONDER_STRUCT + fuse_ctrl_pwr_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + pwr_otp_o_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + otp_ext_voltage_h_io_o <= 'bz; + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_pwr_out_configuration_s fuse_ctrl_pwr_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_pwr_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_pwr_out_initiator_s fuse_ctrl_pwr_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_pwr_out_responder_s fuse_ctrl_pwr_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_pwr_out_initiator_struct: + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Members within the fuse_ctrl_pwr_out_responder_struct: + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + initiator_struct = fuse_ctrl_pwr_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_pwr_out_responder_struct.xyz = pwr_otp_o_i; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // Initiator inout signals + // fuse_ctrl_pwr_out_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_pwr_out_initiator_struct.xyz; // + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_pwr_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_pwr_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_pwr_out_initiator_s fuse_ctrl_pwr_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_pwr_out_responder_s fuse_ctrl_pwr_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_pwr_out_initiator_struct: + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Variables within the fuse_ctrl_pwr_out_responder_struct: + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // fuse_ctrl_pwr_out_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // pwr_otp_o_o <= fuse_ctrl_pwr_out_initiator_struct.xyz; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // Responder inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_pwr_out_initiator_struct.xyz; // + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_pwr_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_pwr_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_if.sv new file mode 100644 index 000000000..d8a00c80b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_if.sv @@ -0,0 +1,83 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_pwr_out interface signals. +// It is instantiated once per fuse_ctrl_pwr_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_pwr_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_pwr_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_pwr_out_bus.pwr_otp_o), // Agent input +// .dut_signal_port(fuse_ctrl_pwr_out_bus.otp_ext_voltage_h_io), // Agent inout + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_pwr_out_pkg_hdl::*; + +interface fuse_ctrl_pwr_out_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o, + inout tri otp_ext_voltage_h_io + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input pwr_otp_o, + input otp_ext_voltage_h_io + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input pwr_otp_o, + inout otp_ext_voltage_h_io + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output pwr_otp_o, + inout otp_ext_voltage_h_io + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_macros.svh new file mode 100644 index 000000000..8d5aca7a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_pwr_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_pwr_out_configuration class. +// + `define fuse_ctrl_pwr_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_pwr_out_configuration_s; + + `define fuse_ctrl_pwr_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_pwr_out_configuration_s to_struct();\ + fuse_ctrl_pwr_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_pwr_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_pwr_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_pwr_out_configuration_s fuse_ctrl_pwr_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_pwr_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_pwr_out_transaction class. +// + `define fuse_ctrl_pwr_out_MONITOR_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_pwr_out_monitor_s; + + `define fuse_ctrl_pwr_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_pwr_out_monitor_s to_monitor_struct();\ + fuse_ctrl_pwr_out_monitor_struct = \ + { \ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_pwr_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_pwr_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_pwr_out_monitor_s fuse_ctrl_pwr_out_monitor_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_pwr_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_pwr_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_pwr_out_INITIATOR_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_pwr_out_initiator_s; + + `define fuse_ctrl_pwr_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_pwr_out_initiator_s to_initiator_struct();\ + fuse_ctrl_pwr_out_initiator_struct = \ + {\ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_pwr_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_pwr_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_pwr_out_initiator_s fuse_ctrl_pwr_out_initiator_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_pwr_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_pwr_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_pwr_out_RESPONDER_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_pwr_out_responder_s; + + `define fuse_ctrl_pwr_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_pwr_out_responder_s to_responder_struct();\ + fuse_ctrl_pwr_out_responder_struct = \ + {\ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_pwr_out_responder_struct);\ + endfunction + + `define fuse_ctrl_pwr_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_pwr_out_responder_s fuse_ctrl_pwr_out_responder_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_pwr_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_monitor.svh new file mode 100644 index 000000000..bfd354e5f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_pwr_out transactions observed by the +// fuse_ctrl_pwr_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_out_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_pwr_out_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_pwr_out_monitor_bfm ), + .TRANS_T(fuse_ctrl_pwr_out_transaction )); + + `uvm_component_utils( fuse_ctrl_pwr_out_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_pwr_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_pwr_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_pwr_out_monitor_s fuse_ctrl_pwr_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_pwr_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_monitor_bfm.sv new file mode 100644 index 000000000..3c25c0212 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_monitor_bfm.sv @@ -0,0 +1,191 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_pwr_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_pwr_out monitor through a virtual +// interface handle in the fuse_ctrl_pwr_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_pwr_out_if. +// +// Input signals from the fuse_ctrl_pwr_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_pwr_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_pwr_out_pkg_hdl::*; +`include "src/fuse_ctrl_pwr_out_macros.svh" + + +interface fuse_ctrl_pwr_out_monitor_bfm + ( fuse_ctrl_pwr_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_pwr_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_pwr_out_MONITOR_STRUCT + fuse_ctrl_pwr_out_monitor_s fuse_ctrl_pwr_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_pwr_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_i; + tri otp_ext_voltage_h_io_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign pwr_otp_o_i = bus.pwr_otp_o; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + + // Proxy handle to UVM monitor + fuse_ctrl_pwr_out_pkg::fuse_ctrl_pwr_out_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_pwr_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_pwr_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_pwr_out_configuration_s fuse_ctrl_pwr_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_pwr_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_pwr_out_monitor_s fuse_ctrl_pwr_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_pwr_out_monitor_struct.pwr_otp_o + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_pwr_out_monitor_struct.xyz = pwr_otp_o_i; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // fuse_ctrl_pwr_out_monitor_struct.xyz = otp_ext_voltage_h_io_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_random_sequence.svh new file mode 100644 index 000000000..319e48704 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_pwr_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_pwr_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_out_random_sequence + extends fuse_ctrl_pwr_out_sequence_base ; + + `uvm_object_utils( fuse_ctrl_pwr_out_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_pwr_out_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_pwr_out_random_sequence::body()-fuse_ctrl_pwr_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_pwr_out_driver_bfm via the sequencer and fuse_ctrl_pwr_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_pwr_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_responder_sequence.svh new file mode 100644 index 000000000..d34cce767 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_out_responder_sequence + extends fuse_ctrl_pwr_out_sequence_base ; + + `uvm_object_utils( fuse_ctrl_pwr_out_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_pwr_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_pwr_out_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_sequence_base.svh new file mode 100644 index 000000000..aa01f7116 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_out_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_pwr_out_transaction ), + .RSP(fuse_ctrl_pwr_out_transaction )); + + `uvm_object_utils( fuse_ctrl_pwr_out_sequence_base ) + + // variables + typedef fuse_ctrl_pwr_out_transaction fuse_ctrl_pwr_out_transaction_req_t; + fuse_ctrl_pwr_out_transaction_req_t req; + typedef fuse_ctrl_pwr_out_transaction fuse_ctrl_pwr_out_transaction_rsp_t; + fuse_ctrl_pwr_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_pwr_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_pwr_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_transaction.svh new file mode 100644 index 000000000..339833a00 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_transaction.svh @@ -0,0 +1,196 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_pwr_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_out_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_pwr_out_transaction ) + + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_pwr_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_pwr_out_monitor and fuse_ctrl_pwr_out_monitor_bfm + // This struct is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_MONITOR_STRUCT + fuse_ctrl_pwr_out_monitor_s fuse_ctrl_pwr_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_pwr_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_pwr_out_monitor_struct. + // This function is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_pwr_out_driver and fuse_ctrl_pwr_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_pwr_out_driver_bfm. + // This struct is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_INITIATOR_STRUCT + fuse_ctrl_pwr_out_initiator_s fuse_ctrl_pwr_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_pwr_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_pwr_out_initiator_struct. + // This function is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_pwr_out_driver and fuse_ctrl_pwr_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_pwr_out_driver_bfm. + // This struct is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_RESPONDER_STRUCT + fuse_ctrl_pwr_out_responder_s fuse_ctrl_pwr_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_pwr_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_pwr_out_responder_struct. + // This function is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("pwr_otp_o:0x%x ",pwr_otp_o); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_pwr_out_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.pwr_otp_o == RHS.pwr_otp_o) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_pwr_out_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.pwr_otp_o = RHS.pwr_otp_o; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_pwr_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,pwr_otp_o,"pwr_otp_o"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_transaction_coverage.svh new file mode 100644 index 000000000..d50449a73 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_transaction_coverage.svh @@ -0,0 +1,84 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_pwr_out transaction information using +// a covergroup named fuse_ctrl_pwr_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_out_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_pwr_out_transaction )); + + `uvm_component_utils( fuse_ctrl_pwr_out_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_pwr_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + pwr_otp_o: coverpoint coverage_trans.pwr_otp_o; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_pwr_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_pwr_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_pwr_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_pwr_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/yaml/fuse_ctrl_pwr_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/yaml/fuse_ctrl_pwr_out_interface.yaml new file mode 100644 index 000000000..30b59a245 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/yaml/fuse_ctrl_pwr_out_interface.yaml @@ -0,0 +1,33 @@ +uvmf: + interfaces: + fuse_ctrl_pwr_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: input + name: pwr_otp_o + reset_value: '''bz' + width: '[''$bits(pwrmgr_pkg::pwr_otp_rsp_t)'']' + - dir: inout + name: otp_ext_voltage_h_io + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: pwr_otp_o + type: pwrmgr_pkg::pwr_otp_rsp_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.project new file mode 100644 index 000000000..ffd5f9686 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_rst_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.svproject new file mode 100644 index 000000000..79beebd45 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/Makefile new file mode 100644 index 000000000..4067417f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_rst interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_rst_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f + +fuse_ctrl_rst_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f + +fuse_ctrl_rst_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f + +COMP_fuse_ctrl_rst_PKG_TGT_0 = q_comp_fuse_ctrl_rst_pkg +COMP_fuse_ctrl_rst_PKG_TGT_1 = v_comp_fuse_ctrl_rst_pkg +COMP_fuse_ctrl_rst_PKG_TGT = $(COMP_fuse_ctrl_rst_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_rst_pkg: $(COMP_fuse_ctrl_rst_PKG_TGT) + +q_comp_fuse_ctrl_rst_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_rst_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_rst_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_rst_PKG_XRTL) + +v_comp_fuse_ctrl_rst_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_rst_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_rst_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_rst_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_rst_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_rst_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_rst_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_rst_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_rst_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_rst_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_rst_pkg += -I$(fuse_ctrl_rst_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_rst_pkg += $(fuse_ctrl_rst_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_rst_pkg += \ + \ + -o .so + +comp_fuse_ctrl_rst_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_rst_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_rst_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_rst_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_rst_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/compile.do new file mode 100644 index 000000000..935ebc791 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_rst interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile new file mode 100644 index 000000000..98756cb39 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_rst_hvl.compile + - fuse_ctrl_rst_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo new file mode 100644 index 000000000..c41b1f119 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_rst_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_rst_if.sv +src/fuse_ctrl_rst_driver_bfm.sv +src/fuse_ctrl_rst_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_common.compile new file mode 100644 index 000000000..098d340ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_rst_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f new file mode 100644 index 000000000..a5e629a59 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f new file mode 100644 index 000000000..9bddd1e32 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f new file mode 100644 index 000000000..a68e85753 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hdl.compile new file mode 100644 index 000000000..5e99298f4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_rst_common.compile +incdir: + - . +src: + - src/fuse_ctrl_rst_if.sv + - src/fuse_ctrl_rst_monitor_bfm.sv + - src/fuse_ctrl_rst_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hvl.compile new file mode 100644 index 000000000..69ab1ac56 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_rst_common.compile +incdir: + - . +src: + - fuse_ctrl_rst_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv new file mode 100644 index 000000000..2ea60c87c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_rst_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_rst_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_rst_macros.svh" + + export fuse_ctrl_rst_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_rst_typedefs.svh" + `include "src/fuse_ctrl_rst_transaction.svh" + + `include "src/fuse_ctrl_rst_configuration.svh" + `include "src/fuse_ctrl_rst_driver.svh" + `include "src/fuse_ctrl_rst_monitor.svh" + + `include "src/fuse_ctrl_rst_transaction_coverage.svh" + `include "src/fuse_ctrl_rst_sequence_base.svh" + `include "src/fuse_ctrl_rst_random_sequence.svh" + + `include "src/fuse_ctrl_rst_responder_sequence.svh" + `include "src/fuse_ctrl_rst2reg_adapter.svh" + + `include "src/fuse_ctrl_rst_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo new file mode 100644 index 000000000..7efd3da90 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_rst_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_rst_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.sv new file mode 100644 index 000000000..59c4ce0d1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_rst_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_rst_typedefs_hdl.svh" + `include "src/fuse_ctrl_rst_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.vinfo new file mode 100644 index 000000000..105e5a267 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_rst_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F new file mode 100644 index 000000000..2a76484f8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst2reg_adapter.svh new file mode 100644 index 000000000..e74aaf5c8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_rst interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_rst2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_rst2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_rst_transaction trans_h = fuse_ctrl_rst_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_rst_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_rst2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_agent.svh new file mode 100644 index 000000000..3129024c4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_rst_configuration ), + .DRIVER_T(fuse_ctrl_rst_driver ), + .MONITOR_T(fuse_ctrl_rst_monitor ), + .COVERAGE_T(fuse_ctrl_rst_transaction_coverage ), + .TRANS_T(fuse_ctrl_rst_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_rst_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_configuration.svh new file mode 100644 index 000000000..2b8c3b89a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_rst agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_rst_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_rst_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_rst_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_rst_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_rst_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_CONFIGURATION_STRUCT + fuse_ctrl_rst_configuration_s fuse_ctrl_rst_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_rst_configuration_s + // structure. The function returns the handle to the fuse_ctrl_rst_configuration_struct. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_rst_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_rst_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_rst_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_rst_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_rst_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_rst_configuration_cg.set_inst_name($sformatf("fuse_ctrl_rst_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_rst_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver.svh new file mode 100644 index 000000000..c0c6921a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_rst_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_rst_driver_bfm ), + .REQ(fuse_ctrl_rst_transaction ), + .RSP(fuse_ctrl_rst_transaction )); + + `uvm_component_utils( fuse_ctrl_rst_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_rst_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm +// to communicate initiator driven data to fuse_ctrl_rst_driver_bfm. +`fuse_ctrl_rst_INITIATOR_STRUCT + fuse_ctrl_rst_initiator_s fuse_ctrl_rst_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm +// to communicate Responder driven data to fuse_ctrl_rst_driver_bfm. +`fuse_ctrl_rst_RESPONDER_STRUCT + fuse_ctrl_rst_responder_s fuse_ctrl_rst_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_rst_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_rst_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_rst_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_rst_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver_bfm.sv new file mode 100644 index 000000000..3b43b4098 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver_bfm.sv @@ -0,0 +1,292 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_rst signal driving. It is +// accessed by the uvm fuse_ctrl_rst driver through a virtual interface +// handle in the fuse_ctrl_rst configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_rst_if. +// +// Input signals from the fuse_ctrl_rst_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_rst_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_rst_pkg_hdl::*; +`include "src/fuse_ctrl_rst_macros.svh" + +interface fuse_ctrl_rst_driver_bfm + (fuse_ctrl_rst_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_rst_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri rst_ni_i; + reg rst_ni_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.rst_ni = (initiator_responder == INITIATOR) ? rst_ni_o : 'bz; + assign rst_ni_i = bus.rst_ni; + + // Proxy handle to UVM driver + fuse_ctrl_rst_pkg::fuse_ctrl_rst_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_rst_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_rst_driver to this BFM + // **************************************************************************** + `fuse_ctrl_rst_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm + // to communicate initiator driven data to fuse_ctrl_rst_driver_bfm. + `fuse_ctrl_rst_INITIATOR_STRUCT + fuse_ctrl_rst_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm + // to communicate Responder driven data to fuse_ctrl_rst_driver_bfm. + `fuse_ctrl_rst_RESPONDER_STRUCT + fuse_ctrl_rst_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + rst_ni_o <= 'bz; + pwr_otp_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_rst_configuration_s fuse_ctrl_rst_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_rst_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_rst_initiator_s fuse_ctrl_rst_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_rst_responder_s fuse_ctrl_rst_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_rst_initiator_struct: + // bit assert_rst ; + // bit assert_otp_init ; + // Members within the fuse_ctrl_rst_responder_struct: + // bit assert_rst ; + // bit assert_otp_init ; + initiator_struct = fuse_ctrl_rst_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // rst_ni_o <= fuse_ctrl_rst_initiator_struct.xyz; // + // pwr_otp_i_o <= fuse_ctrl_rst_initiator_struct.xyz; // [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_rst_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_rst_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_rst_initiator_s fuse_ctrl_rst_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_rst_responder_s fuse_ctrl_rst_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_rst_initiator_struct: + // bit assert_rst ; + // bit assert_otp_init ; + // Variables within the fuse_ctrl_rst_responder_struct: + // bit assert_rst ; + // bit assert_otp_init ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_rst_responder_struct.xyz = rst_ni_i; // + // fuse_ctrl_rst_responder_struct.xyz = pwr_otp_i_i; // [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_rst_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_rst_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv new file mode 100644 index 000000000..45947f7cd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv @@ -0,0 +1,78 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_rst interface signals. +// It is instantiated once per fuse_ctrl_rst bus. Bus Functional Models, +// BFM's named fuse_ctrl_rst_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_rst_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_rst_bus.rst_ni), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_rst_pkg_hdl::*; + +interface fuse_ctrl_rst_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri rst_ni + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input rst_ni + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output rst_ni + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input rst_ni + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_macros.svh new file mode 100644 index 000000000..7af53766d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_rst package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_rst_configuration class. +// + `define fuse_ctrl_rst_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_rst_configuration_s; + + `define fuse_ctrl_rst_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_configuration_s to_struct();\ + fuse_ctrl_rst_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_rst_configuration_struct );\ + endfunction + + `define fuse_ctrl_rst_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_rst_configuration_s fuse_ctrl_rst_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_rst_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_rst_transaction class. +// + `define fuse_ctrl_rst_MONITOR_STRUCT typedef struct packed { \ + bit assert_rst ; \ + } fuse_ctrl_rst_monitor_s; + + `define fuse_ctrl_rst_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_monitor_s to_monitor_struct();\ + fuse_ctrl_rst_monitor_struct = \ + { \ + this.assert_rst \ + };\ + return ( fuse_ctrl_rst_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_rst_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_rst_monitor_s fuse_ctrl_rst_monitor_struct);\ + {\ + this.assert_rst \ + } = fuse_ctrl_rst_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_rst_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_rst_INITIATOR_STRUCT typedef struct packed { \ + bit assert_rst ; \ + } fuse_ctrl_rst_initiator_s; + + `define fuse_ctrl_rst_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_initiator_s to_initiator_struct();\ + fuse_ctrl_rst_initiator_struct = \ + {\ + this.assert_rst \ + };\ + return ( fuse_ctrl_rst_initiator_struct);\ + endfunction + + `define fuse_ctrl_rst_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_rst_initiator_s fuse_ctrl_rst_initiator_struct);\ + {\ + this.assert_rst \ + } = fuse_ctrl_rst_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_rst_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_rst_RESPONDER_STRUCT typedef struct packed { \ + bit assert_rst ; \ + } fuse_ctrl_rst_responder_s; + + `define fuse_ctrl_rst_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_responder_s to_responder_struct();\ + fuse_ctrl_rst_responder_struct = \ + {\ + this.assert_rst \ + };\ + return ( fuse_ctrl_rst_responder_struct);\ + endfunction + + `define fuse_ctrl_rst_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_rst_responder_s fuse_ctrl_rst_responder_struct);\ + {\ + this.assert_rst \ + } = fuse_ctrl_rst_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor.svh new file mode 100644 index 000000000..6e829b3a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_rst transactions observed by the +// fuse_ctrl_rst monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_rst_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_rst_monitor_bfm ), + .TRANS_T(fuse_ctrl_rst_transaction )); + + `uvm_component_utils( fuse_ctrl_rst_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_rst_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_rst_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_rst_monitor_s fuse_ctrl_rst_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_rst_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor_bfm.sv new file mode 100644 index 000000000..6ba721bc4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor_bfm.sv @@ -0,0 +1,188 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_rst signal monitoring. +// It is accessed by the uvm fuse_ctrl_rst monitor through a virtual +// interface handle in the fuse_ctrl_rst configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_rst_if. +// +// Input signals from the fuse_ctrl_rst_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_rst bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_rst_pkg_hdl::*; +`include "src/fuse_ctrl_rst_macros.svh" + + +interface fuse_ctrl_rst_monitor_bfm + ( fuse_ctrl_rst_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_rst_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_rst_MONITOR_STRUCT + fuse_ctrl_rst_monitor_s fuse_ctrl_rst_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_rst_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri rst_ni_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign rst_ni_i = bus.rst_ni; + + // Proxy handle to UVM monitor + fuse_ctrl_rst_pkg::fuse_ctrl_rst_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_rst_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_rst_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_rst_configuration_s fuse_ctrl_rst_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_rst_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_rst_monitor_s fuse_ctrl_rst_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_rst_monitor_struct.assert_rst + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_rst_monitor_struct.xyz = rst_ni_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_random_sequence.svh new file mode 100644 index 000000000..2b719a026 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_rst transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_rst_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_random_sequence + extends fuse_ctrl_rst_sequence_base ; + + `uvm_object_utils( fuse_ctrl_rst_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_rst_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_rst_random_sequence::body()-fuse_ctrl_rst_transaction randomization failed") + // Send the transaction to the fuse_ctrl_rst_driver_bfm via the sequencer and fuse_ctrl_rst_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_rst_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_responder_sequence.svh new file mode 100644 index 000000000..85fe8a75e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_responder_sequence + extends fuse_ctrl_rst_sequence_base ; + + `uvm_object_utils( fuse_ctrl_rst_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_rst_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_rst_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_sequence_base.svh new file mode 100644 index 000000000..d6a30499e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_rst_transaction ), + .RSP(fuse_ctrl_rst_transaction )); + + `uvm_object_utils( fuse_ctrl_rst_sequence_base ) + + // variables + typedef fuse_ctrl_rst_transaction fuse_ctrl_rst_transaction_req_t; + fuse_ctrl_rst_transaction_req_t req; + typedef fuse_ctrl_rst_transaction fuse_ctrl_rst_transaction_rsp_t; + fuse_ctrl_rst_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_rst_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_rst_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction.svh new file mode 100644 index 000000000..806f8a2d2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction.svh @@ -0,0 +1,197 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_rst +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_rst_transaction ) + + bit assert_rst ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_rst_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_rst_monitor and fuse_ctrl_rst_monitor_bfm + // This struct is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_MONITOR_STRUCT + fuse_ctrl_rst_monitor_s fuse_ctrl_rst_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_rst_monitor_s + // structure. The function returns the handle to the fuse_ctrl_rst_monitor_struct. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm + // to communicate initiator driven data to fuse_ctrl_rst_driver_bfm. + // This struct is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_INITIATOR_STRUCT + fuse_ctrl_rst_initiator_s fuse_ctrl_rst_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_rst_initiator_s + // structure. The function returns the handle to the fuse_ctrl_rst_initiator_struct. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm + // to communicate Responder driven data to fuse_ctrl_rst_driver_bfm. + // This struct is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_RESPONDER_STRUCT + fuse_ctrl_rst_responder_s fuse_ctrl_rst_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_rst_responder_s + // structure. The function returns the handle to the fuse_ctrl_rst_responder_struct. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("assert_rst:0x%x assert_otp_init:0x%x ",assert_rst,assert_otp_init); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_rst_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_rst_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.assert_rst = RHS.assert_rst; + this.assert_otp_init = RHS.assert_otp_init; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_rst_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,assert_rst,"assert_rst"); + $add_attribute(transaction_view_h,assert_otp_init,"assert_otp_init"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction_coverage.svh new file mode 100644 index 000000000..8bfc9decb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction_coverage.svh @@ -0,0 +1,85 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_rst transaction information using +// a covergroup named fuse_ctrl_rst_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_rst_transaction )); + + `uvm_component_utils( fuse_ctrl_rst_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_rst_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + assert_rst: coverpoint coverage_trans.assert_rst; + assert_otp_init: coverpoint coverage_trans.assert_otp_init; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_rst_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_rst_transaction_cg.set_inst_name($sformatf("fuse_ctrl_rst_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_rst_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/yaml/fuse_ctrl_rst_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/yaml/fuse_ctrl_rst_interface.yaml new file mode 100644 index 000000000..d439455ae --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_rst_pkg/yaml/fuse_ctrl_rst_interface.yaml @@ -0,0 +1,29 @@ +uvmf: + interfaces: + fuse_ctrl_rst: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: output + name: rst_ni + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: assert_rst + type: bit + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.project new file mode 100644 index 000000000..802c3e187 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_secreg_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..be911ec39 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..1eb10014e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_secreg_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_secreg_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f + +fuse_ctrl_secreg_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f + +fuse_ctrl_secreg_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f + +COMP_fuse_ctrl_secreg_axi_read_if_PKG_TGT_0 = q_comp_fuse_ctrl_secreg_axi_read_if_pkg +COMP_fuse_ctrl_secreg_axi_read_if_PKG_TGT_1 = v_comp_fuse_ctrl_secreg_axi_read_if_pkg +COMP_fuse_ctrl_secreg_axi_read_if_PKG_TGT = $(COMP_fuse_ctrl_secreg_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_secreg_axi_read_if_pkg: $(COMP_fuse_ctrl_secreg_axi_read_if_PKG_TGT) + +q_comp_fuse_ctrl_secreg_axi_read_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG_XRTL) + +v_comp_fuse_ctrl_secreg_axi_read_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_secreg_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_if_pkg += -I$(fuse_ctrl_secreg_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_if_pkg += $(fuse_ctrl_secreg_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_secreg_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..04f613c1e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_secreg_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if.compile new file mode 100644 index 000000000..ae2507ea9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_secreg_axi_read_if_hvl.compile + - fuse_ctrl_secreg_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..e97c29c20 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_secreg_axi_read_if_if.sv +src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv +src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_common.compile new file mode 100644 index 000000000..81dd659b6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..220cf1690 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..91290db0d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..3c42c25e3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hdl.compile new file mode 100644 index 000000000..a6821997e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_secreg_axi_read_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_secreg_axi_read_if_if.sv + - src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv + - src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hvl.compile new file mode 100644 index 000000000..8017b8d2c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_secreg_axi_read_if_common.compile +incdir: + - . +src: + - fuse_ctrl_secreg_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.sv new file mode 100644 index 000000000..91a38d680 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_secreg_axi_read_if_macros.svh" + + export fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_secreg_axi_read_if_typedefs.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_transaction.svh" + + `include "src/fuse_ctrl_secreg_axi_read_if_configuration.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_driver.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_monitor.svh" + + `include "src/fuse_ctrl_secreg_axi_read_if_transaction_coverage.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_sequence_base.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_random_sequence.svh" + + `include "src/fuse_ctrl_secreg_axi_read_if_responder_sequence.svh" + `include "src/fuse_ctrl_secreg_axi_read_if2reg_adapter.svh" + + `include "src/fuse_ctrl_secreg_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..3044046cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_secreg_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..e73051e81 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_secreg_axi_read_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..0009d2d8b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..ea92e98f5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..98ba3aacb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_secreg_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_secreg_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_secreg_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_agent.svh new file mode 100644 index 000000000..d2895c679 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_secreg_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_secreg_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_secreg_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_configuration.svh new file mode 100644 index 000000000..981626306 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_secreg_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_secreg_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_secreg_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_CONFIGURATION_STRUCT + fuse_ctrl_secreg_axi_read_if_configuration_s fuse_ctrl_secreg_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_secreg_axi_read_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_if_configuration_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_secreg_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_secreg_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_secreg_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_secreg_axi_read_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver.svh new file mode 100644 index 000000000..ebbf22afa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_secreg_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. +`fuse_ctrl_secreg_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_if_initiator_s fuse_ctrl_secreg_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. +`fuse_ctrl_secreg_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_if_responder_s fuse_ctrl_secreg_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_secreg_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_secreg_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_secreg_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_secreg_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..b440efec7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_secreg_axi_read_if signal driving. It is +// accessed by the uvm fuse_ctrl_secreg_axi_read_if driver through a virtual interface +// handle in the fuse_ctrl_secreg_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_secreg_axi_read_if_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_secreg_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_if_macros.svh" + +interface fuse_ctrl_secreg_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_secreg_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_secreg_axi_read_if_pkg::fuse_ctrl_secreg_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_secreg_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_secreg_axi_read_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_secreg_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. + `fuse_ctrl_secreg_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. + `fuse_ctrl_secreg_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_secreg_axi_read_if_configuration_s fuse_ctrl_secreg_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_secreg_axi_read_if_initiator_s fuse_ctrl_secreg_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_secreg_axi_read_if_responder_s fuse_ctrl_secreg_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_secreg_axi_read_if_initiator_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Members within the fuse_ctrl_secreg_axi_read_if_responder_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + initiator_struct = fuse_ctrl_secreg_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_secreg_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_secreg_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_secreg_axi_read_if_initiator_s fuse_ctrl_secreg_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_secreg_axi_read_if_responder_s fuse_ctrl_secreg_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_secreg_axi_read_if_initiator_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Variables within the fuse_ctrl_secreg_axi_read_if_responder_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arlock_i; // + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_secreg_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_secreg_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_if.sv new file mode 100644 index 000000000..91845e87d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_secreg_axi_read_if interface signals. +// It is instantiated once per fuse_ctrl_secreg_axi_read_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_secreg_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_secreg_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; + +interface fuse_ctrl_secreg_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_macros.svh new file mode 100644 index 000000000..b4d9deeba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_secreg_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_secreg_axi_read_if_configuration class. +// + `define fuse_ctrl_secreg_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_secreg_axi_read_if_configuration_s; + + `define fuse_ctrl_secreg_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_if_configuration_s to_struct();\ + fuse_ctrl_secreg_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_secreg_axi_read_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_secreg_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_secreg_axi_read_if_configuration_s fuse_ctrl_secreg_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_secreg_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_secreg_axi_read_if_transaction class. +// + `define fuse_ctrl_secreg_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_if_monitor_s; + + `define fuse_ctrl_secreg_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_if_monitor_s to_monitor_struct();\ + fuse_ctrl_secreg_axi_read_if_monitor_struct = \ + { \ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_secreg_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_secreg_axi_read_if_monitor_s fuse_ctrl_secreg_axi_read_if_monitor_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_secreg_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_if_initiator_s; + + `define fuse_ctrl_secreg_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_if_initiator_s to_initiator_struct();\ + fuse_ctrl_secreg_axi_read_if_initiator_struct = \ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_secreg_axi_read_if_initiator_s fuse_ctrl_secreg_axi_read_if_initiator_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_secreg_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_if_responder_s; + + `define fuse_ctrl_secreg_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_if_responder_s to_responder_struct();\ + fuse_ctrl_secreg_axi_read_if_responder_struct = \ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_if_responder_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_secreg_axi_read_if_responder_s fuse_ctrl_secreg_axi_read_if_responder_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor.svh new file mode 100644 index 000000000..6addcdb7b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_secreg_axi_read_if transactions observed by the +// fuse_ctrl_secreg_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_secreg_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_secreg_axi_read_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_secreg_axi_read_if_monitor_s fuse_ctrl_secreg_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_secreg_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..7bba9981c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_secreg_axi_read_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_secreg_axi_read_if monitor through a virtual +// interface handle in the fuse_ctrl_secreg_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_secreg_axi_read_if_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_secreg_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_if_macros.svh" + + +interface fuse_ctrl_secreg_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_secreg_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_secreg_axi_read_if_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_if_monitor_s fuse_ctrl_secreg_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_secreg_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_secreg_axi_read_if_pkg::fuse_ctrl_secreg_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_secreg_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_secreg_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_secreg_axi_read_if_configuration_s fuse_ctrl_secreg_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_secreg_axi_read_if_monitor_s fuse_ctrl_secreg_axi_read_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_araddr + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arvalid + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arburst + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arsize + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arlen + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_aruser + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arid + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arlock + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..648972d51 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_secreg_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_secreg_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_secreg_axi_read_if_random_sequence::body()-fuse_ctrl_secreg_axi_read_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_secreg_axi_read_if_driver_bfm via the sequencer and fuse_ctrl_secreg_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_secreg_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..709581bdd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_secreg_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..66bc21078 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_if_transaction_req_t; + fuse_ctrl_secreg_axi_read_if_transaction_req_t req; + typedef fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_if_transaction_rsp_t; + fuse_ctrl_secreg_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_secreg_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_secreg_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction.svh new file mode 100644 index 000000000..c58498d8f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_secreg_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] secreg_araddr ; + logic secreg_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + logic [2:0] secreg_arsize ; + logic [7:0] secreg_arlen ; + logic [UW-1:0] secreg_aruser ; + logic [IW-1:0] secreg_arid ; + logic secreg_arlock ; + logic secreg_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_secreg_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_secreg_axi_read_if_monitor and fuse_ctrl_secreg_axi_read_if_monitor_bfm + // This struct is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_if_monitor_s fuse_ctrl_secreg_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_if_monitor_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_if_initiator_s fuse_ctrl_secreg_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_if_initiator_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_if_responder_s fuse_ctrl_secreg_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_if_responder_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_araddr:0x%x secreg_arvalid:0x%x secreg_arburst:0x%x secreg_arsize:0x%x secreg_arlen:0x%x secreg_aruser:0x%x secreg_arid:0x%x secreg_arlock:0x%x secreg_rready:0x%x ",secreg_araddr,secreg_arvalid,secreg_arburst,secreg_arsize,secreg_arlen,secreg_aruser,secreg_arid,secreg_arlock,secreg_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_araddr = RHS.secreg_araddr; + this.secreg_arvalid = RHS.secreg_arvalid; + this.secreg_arburst = RHS.secreg_arburst; + this.secreg_arsize = RHS.secreg_arsize; + this.secreg_arlen = RHS.secreg_arlen; + this.secreg_aruser = RHS.secreg_aruser; + this.secreg_arid = RHS.secreg_arid; + this.secreg_arlock = RHS.secreg_arlock; + this.secreg_rready = RHS.secreg_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_secreg_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_araddr,"secreg_araddr"); + $add_attribute(transaction_view_h,secreg_arvalid,"secreg_arvalid"); + $add_attribute(transaction_view_h,secreg_arburst,"secreg_arburst"); + $add_attribute(transaction_view_h,secreg_arsize,"secreg_arsize"); + $add_attribute(transaction_view_h,secreg_arlen,"secreg_arlen"); + $add_attribute(transaction_view_h,secreg_aruser,"secreg_aruser"); + $add_attribute(transaction_view_h,secreg_arid,"secreg_arid"); + $add_attribute(transaction_view_h,secreg_arlock,"secreg_arlock"); + $add_attribute(transaction_view_h,secreg_rready,"secreg_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..4da8fb856 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_secreg_axi_read_if transaction information using +// a covergroup named fuse_ctrl_secreg_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_secreg_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_araddr: coverpoint coverage_trans.secreg_araddr; + secreg_arvalid: coverpoint coverage_trans.secreg_arvalid; + secreg_arburst: coverpoint coverage_trans.secreg_arburst; + secreg_arsize: coverpoint coverage_trans.secreg_arsize; + secreg_arlen: coverpoint coverage_trans.secreg_arlen; + secreg_aruser: coverpoint coverage_trans.secreg_aruser; + secreg_arid: coverpoint coverage_trans.secreg_arid; + secreg_arlock: coverpoint coverage_trans.secreg_arlock; + secreg_rready: coverpoint coverage_trans.secreg_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_secreg_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_secreg_axi_read_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_secreg_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/yaml/fuse_ctrl_secreg_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/yaml/fuse_ctrl_secreg_axi_read_if_interface.yaml new file mode 100644 index 000000000..dfcf19887 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/yaml/fuse_ctrl_secreg_axi_read_if_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_secreg_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: secreg_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.project new file mode 100644 index 000000000..9b5119db2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_secreg_axi_read_in_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.svproject new file mode 100644 index 000000000..216cb589b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/Makefile new file mode 100644 index 000000000..ff0b63afb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_secreg_axi_read_in_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_secreg_axi_read_in_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hvl.f + +fuse_ctrl_secreg_axi_read_in_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hdl.f + +fuse_ctrl_secreg_axi_read_in_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_xrtl.f + +COMP_fuse_ctrl_secreg_axi_read_in_if_PKG_TGT_0 = q_comp_fuse_ctrl_secreg_axi_read_in_if_pkg +COMP_fuse_ctrl_secreg_axi_read_in_if_PKG_TGT_1 = v_comp_fuse_ctrl_secreg_axi_read_in_if_pkg +COMP_fuse_ctrl_secreg_axi_read_in_if_PKG_TGT = $(COMP_fuse_ctrl_secreg_axi_read_in_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_secreg_axi_read_in_if_pkg: $(COMP_fuse_ctrl_secreg_axi_read_in_if_PKG_TGT) + +q_comp_fuse_ctrl_secreg_axi_read_in_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG_XRTL) + +v_comp_fuse_ctrl_secreg_axi_read_in_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_secreg_axi_read_in_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_in_if_pkg += -I$(fuse_ctrl_secreg_axi_read_in_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_in_if_pkg += $(fuse_ctrl_secreg_axi_read_in_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_in_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_secreg_axi_read_in_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_in_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_in_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/compile.do new file mode 100644 index 000000000..67fa90a30 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_secreg_axi_read_in_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if.compile new file mode 100644 index 000000000..edfeedfc0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_secreg_axi_read_in_if_hvl.compile + - fuse_ctrl_secreg_axi_read_in_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_bfm.vinfo new file mode 100644 index 000000000..ff090bad6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_secreg_axi_read_in_if_if.sv +src/fuse_ctrl_secreg_axi_read_in_if_driver_bfm.sv +src/fuse_ctrl_secreg_axi_read_in_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_common.compile new file mode 100644 index 000000000..289cd2865 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hdl.f new file mode 100644 index 000000000..a40d395c6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hvl.f new file mode 100644 index 000000000..8d8670a23 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_xrtl.f new file mode 100644 index 000000000..81f832e79 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hdl.compile new file mode 100644 index 000000000..a29a791a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_secreg_axi_read_in_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_secreg_axi_read_in_if_if.sv + - src/fuse_ctrl_secreg_axi_read_in_if_monitor_bfm.sv + - src/fuse_ctrl_secreg_axi_read_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hvl.compile new file mode 100644 index 000000000..5ea481a70 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_secreg_axi_read_in_if_common.compile +incdir: + - . +src: + - fuse_ctrl_secreg_axi_read_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.sv new file mode 100644 index 000000000..ca2fa65e5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_in_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_secreg_axi_read_in_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_secreg_axi_read_in_if_macros.svh" + + export fuse_ctrl_secreg_axi_read_in_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_secreg_axi_read_in_if_typedefs.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_if_transaction.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_if_configuration.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_if_driver.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_if_monitor.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_if_transaction_coverage.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_if_sequence_base.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_if_random_sequence.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_if_responder_sequence.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_if2reg_adapter.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.vinfo new file mode 100644 index 000000000..d85f8b901 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_secreg_axi_read_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv new file mode 100644 index 000000000..faeaeed8a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_in_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_secreg_axi_read_in_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.vinfo new file mode 100644 index 000000000..44fb0c125 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_sve.F new file mode 100644 index 000000000..1256ffedb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if2reg_adapter.svh new file mode 100644 index 000000000..cd5608daf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_secreg_axi_read_in_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_secreg_axi_read_in_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_secreg_axi_read_in_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_agent.svh new file mode 100644 index 000000000..d6359882b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_secreg_axi_read_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_secreg_axi_read_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_secreg_axi_read_in_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_configuration.svh new file mode 100644 index 000000000..f5aa0e94e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_secreg_axi_read_in_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_secreg_axi_read_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_secreg_axi_read_in_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_STRUCT + fuse_ctrl_secreg_axi_read_in_if_configuration_s fuse_ctrl_secreg_axi_read_in_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_secreg_axi_read_in_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_if_configuration_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_secreg_axi_read_in_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_secreg_axi_read_in_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_secreg_axi_read_in_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_secreg_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_secreg_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_secreg_axi_read_in_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_in_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_secreg_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver.svh new file mode 100644 index 000000000..e4ff24f99 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_secreg_axi_read_in_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_secreg_axi_read_in_if_driver and fuse_ctrl_secreg_axi_read_in_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_secreg_axi_read_in_if_driver_bfm. +`fuse_ctrl_secreg_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_in_if_initiator_s fuse_ctrl_secreg_axi_read_in_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_secreg_axi_read_in_if_driver and fuse_ctrl_secreg_axi_read_in_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_secreg_axi_read_in_if_driver_bfm. +`fuse_ctrl_secreg_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_in_if_responder_s fuse_ctrl_secreg_axi_read_in_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_secreg_axi_read_in_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_secreg_axi_read_in_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_secreg_axi_read_in_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_secreg_axi_read_in_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver_bfm.sv new file mode 100644 index 000000000..95d7f303a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_secreg_axi_read_in_if signal driving. It is +// accessed by the uvm fuse_ctrl_secreg_axi_read_in_if driver through a virtual interface +// handle in the fuse_ctrl_secreg_axi_read_in_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_secreg_axi_read_in_if_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_secreg_axi_read_in_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_in_if_macros.svh" + +interface fuse_ctrl_secreg_axi_read_in_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_secreg_axi_read_in_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_in_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_secreg_axi_read_in_if_pkg::fuse_ctrl_secreg_axi_read_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_secreg_axi_read_in_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_secreg_axi_read_in_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_in_if_driver and fuse_ctrl_secreg_axi_read_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_in_if_driver_bfm. + `fuse_ctrl_secreg_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_in_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_secreg_axi_read_in_if_driver and fuse_ctrl_secreg_axi_read_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_in_if_driver_bfm. + `fuse_ctrl_secreg_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_in_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_secreg_axi_read_in_if_configuration_s fuse_ctrl_secreg_axi_read_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_secreg_axi_read_in_if_initiator_s fuse_ctrl_secreg_axi_read_in_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_secreg_axi_read_in_if_responder_s fuse_ctrl_secreg_axi_read_in_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_secreg_axi_read_in_if_initiator_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Members within the fuse_ctrl_secreg_axi_read_in_if_responder_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + initiator_struct = fuse_ctrl_secreg_axi_read_in_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_secreg_axi_read_in_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_secreg_axi_read_in_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_secreg_axi_read_in_if_initiator_s fuse_ctrl_secreg_axi_read_in_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_secreg_axi_read_in_if_responder_s fuse_ctrl_secreg_axi_read_in_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_secreg_axi_read_in_if_initiator_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Variables within the fuse_ctrl_secreg_axi_read_in_if_responder_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = arlock_i; // + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_secreg_axi_read_in_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_secreg_axi_read_in_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_if.sv new file mode 100644 index 000000000..207866a2c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_secreg_axi_read_in_if interface signals. +// It is instantiated once per fuse_ctrl_secreg_axi_read_in_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_secreg_axi_read_in_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_secreg_axi_read_in_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_in_if_pkg_hdl::*; + +interface fuse_ctrl_secreg_axi_read_in_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_macros.svh new file mode 100644 index 000000000..70d9a7aed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_secreg_axi_read_in_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_secreg_axi_read_in_if_configuration class. +// + `define fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_secreg_axi_read_in_if_configuration_s; + + `define fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_if_configuration_s to_struct();\ + fuse_ctrl_secreg_axi_read_in_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_secreg_axi_read_in_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_secreg_axi_read_in_if_configuration_s fuse_ctrl_secreg_axi_read_in_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_secreg_axi_read_in_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_secreg_axi_read_in_if_transaction class. +// + `define fuse_ctrl_secreg_axi_read_in_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_in_if_monitor_s; + + `define fuse_ctrl_secreg_axi_read_in_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_if_monitor_s to_monitor_struct();\ + fuse_ctrl_secreg_axi_read_in_if_monitor_struct = \ + { \ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_in_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_secreg_axi_read_in_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_secreg_axi_read_in_if_monitor_s fuse_ctrl_secreg_axi_read_in_if_monitor_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_in_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_secreg_axi_read_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_in_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_in_if_initiator_s; + + `define fuse_ctrl_secreg_axi_read_in_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_if_initiator_s to_initiator_struct();\ + fuse_ctrl_secreg_axi_read_in_if_initiator_struct = \ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_in_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_in_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_secreg_axi_read_in_if_initiator_s fuse_ctrl_secreg_axi_read_in_if_initiator_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_in_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_secreg_axi_read_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_in_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_in_if_responder_s; + + `define fuse_ctrl_secreg_axi_read_in_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_if_responder_s to_responder_struct();\ + fuse_ctrl_secreg_axi_read_in_if_responder_struct = \ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_in_if_responder_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_in_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_secreg_axi_read_in_if_responder_s fuse_ctrl_secreg_axi_read_in_if_responder_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_in_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor.svh new file mode 100644 index 000000000..f6b696c0a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_secreg_axi_read_in_if transactions observed by the +// fuse_ctrl_secreg_axi_read_in_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_secreg_axi_read_in_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_secreg_axi_read_in_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_secreg_axi_read_in_if_monitor_s fuse_ctrl_secreg_axi_read_in_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_secreg_axi_read_in_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor_bfm.sv new file mode 100644 index 000000000..2a6b5dd00 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_secreg_axi_read_in_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_secreg_axi_read_in_if monitor through a virtual +// interface handle in the fuse_ctrl_secreg_axi_read_in_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_secreg_axi_read_in_if_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_secreg_axi_read_in_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_in_if_macros.svh" + + +interface fuse_ctrl_secreg_axi_read_in_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_secreg_axi_read_in_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_in_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_secreg_axi_read_in_if_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_in_if_monitor_s fuse_ctrl_secreg_axi_read_in_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_secreg_axi_read_in_if_pkg::fuse_ctrl_secreg_axi_read_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_secreg_axi_read_in_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_secreg_axi_read_in_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_secreg_axi_read_in_if_configuration_s fuse_ctrl_secreg_axi_read_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_secreg_axi_read_in_if_monitor_s fuse_ctrl_secreg_axi_read_in_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_araddr + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_arvalid + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_arburst + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_arsize + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_arlen + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_aruser + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_arid + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_arlock + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_random_sequence.svh new file mode 100644 index 000000000..fdbf06a6e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_secreg_axi_read_in_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_secreg_axi_read_in_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_secreg_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_secreg_axi_read_in_if_random_sequence::body()-fuse_ctrl_secreg_axi_read_in_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_secreg_axi_read_in_if_driver_bfm via the sequencer and fuse_ctrl_secreg_axi_read_in_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_secreg_axi_read_in_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_responder_sequence.svh new file mode 100644 index 000000000..e270aad62 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_secreg_axi_read_in_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_secreg_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_sequence_base.svh new file mode 100644 index 000000000..ca8e9725f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_in_if_transaction_req_t; + fuse_ctrl_secreg_axi_read_in_if_transaction_req_t req; + typedef fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_in_if_transaction_rsp_t; + fuse_ctrl_secreg_axi_read_in_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_secreg_axi_read_in_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_secreg_axi_read_in_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction.svh new file mode 100644 index 000000000..aa60a802f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_secreg_axi_read_in_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] secreg_araddr ; + logic secreg_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + logic [2:0] secreg_arsize ; + logic [7:0] secreg_arlen ; + logic [UW-1:0] secreg_aruser ; + logic [IW-1:0] secreg_arid ; + logic secreg_arlock ; + logic secreg_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_secreg_axi_read_in_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_secreg_axi_read_in_if_monitor and fuse_ctrl_secreg_axi_read_in_if_monitor_bfm + // This struct is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_in_if_monitor_s fuse_ctrl_secreg_axi_read_in_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_in_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_if_monitor_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_in_if_driver and fuse_ctrl_secreg_axi_read_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_in_if_initiator_s fuse_ctrl_secreg_axi_read_in_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_in_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_if_initiator_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_secreg_axi_read_in_if_driver and fuse_ctrl_secreg_axi_read_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_in_if_responder_s fuse_ctrl_secreg_axi_read_in_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_in_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_if_responder_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_araddr:0x%x secreg_arvalid:0x%x secreg_arburst:0x%x secreg_arsize:0x%x secreg_arlen:0x%x secreg_aruser:0x%x secreg_arid:0x%x secreg_arlock:0x%x secreg_rready:0x%x ",secreg_araddr,secreg_arvalid,secreg_arburst,secreg_arsize,secreg_arlen,secreg_aruser,secreg_arid,secreg_arlock,secreg_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_araddr = RHS.secreg_araddr; + this.secreg_arvalid = RHS.secreg_arvalid; + this.secreg_arburst = RHS.secreg_arburst; + this.secreg_arsize = RHS.secreg_arsize; + this.secreg_arlen = RHS.secreg_arlen; + this.secreg_aruser = RHS.secreg_aruser; + this.secreg_arid = RHS.secreg_arid; + this.secreg_arlock = RHS.secreg_arlock; + this.secreg_rready = RHS.secreg_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_secreg_axi_read_in_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_araddr,"secreg_araddr"); + $add_attribute(transaction_view_h,secreg_arvalid,"secreg_arvalid"); + $add_attribute(transaction_view_h,secreg_arburst,"secreg_arburst"); + $add_attribute(transaction_view_h,secreg_arsize,"secreg_arsize"); + $add_attribute(transaction_view_h,secreg_arlen,"secreg_arlen"); + $add_attribute(transaction_view_h,secreg_aruser,"secreg_aruser"); + $add_attribute(transaction_view_h,secreg_arid,"secreg_arid"); + $add_attribute(transaction_view_h,secreg_arlock,"secreg_arlock"); + $add_attribute(transaction_view_h,secreg_rready,"secreg_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction_coverage.svh new file mode 100644 index 000000000..3fe27f376 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_secreg_axi_read_in_if transaction information using +// a covergroup named fuse_ctrl_secreg_axi_read_in_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_secreg_axi_read_in_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_araddr: coverpoint coverage_trans.secreg_araddr; + secreg_arvalid: coverpoint coverage_trans.secreg_arvalid; + secreg_arburst: coverpoint coverage_trans.secreg_arburst; + secreg_arsize: coverpoint coverage_trans.secreg_arsize; + secreg_arlen: coverpoint coverage_trans.secreg_arlen; + secreg_aruser: coverpoint coverage_trans.secreg_aruser; + secreg_arid: coverpoint coverage_trans.secreg_arid; + secreg_arlock: coverpoint coverage_trans.secreg_arlock; + secreg_rready: coverpoint coverage_trans.secreg_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_secreg_axi_read_in_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_secreg_axi_read_in_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_in_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_secreg_axi_read_in_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/yaml/fuse_ctrl_secreg_axi_read_in_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/yaml/fuse_ctrl_secreg_axi_read_in_if_interface.yaml new file mode 100644 index 000000000..75a5a8826 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/yaml/fuse_ctrl_secreg_axi_read_in_if_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_secreg_axi_read_in_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: secreg_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.project new file mode 100644 index 000000000..a4da8e376 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_secreg_axi_read_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.svproject new file mode 100644 index 000000000..52a9f8cb9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/Makefile new file mode 100644 index 000000000..0c9fcbd1e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_secreg_axi_read_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_secreg_axi_read_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hvl.f + +fuse_ctrl_secreg_axi_read_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hdl.f + +fuse_ctrl_secreg_axi_read_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_xrtl.f + +COMP_fuse_ctrl_secreg_axi_read_in_PKG_TGT_0 = q_comp_fuse_ctrl_secreg_axi_read_in_pkg +COMP_fuse_ctrl_secreg_axi_read_in_PKG_TGT_1 = v_comp_fuse_ctrl_secreg_axi_read_in_pkg +COMP_fuse_ctrl_secreg_axi_read_in_PKG_TGT = $(COMP_fuse_ctrl_secreg_axi_read_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_secreg_axi_read_in_pkg: $(COMP_fuse_ctrl_secreg_axi_read_in_PKG_TGT) + +q_comp_fuse_ctrl_secreg_axi_read_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG_XRTL) + +v_comp_fuse_ctrl_secreg_axi_read_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_secreg_axi_read_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_in_pkg += -I$(fuse_ctrl_secreg_axi_read_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_in_pkg += $(fuse_ctrl_secreg_axi_read_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_secreg_axi_read_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/compile.do new file mode 100644 index 000000000..88878d432 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_secreg_axi_read_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in.compile new file mode 100644 index 000000000..30a6c81f0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_secreg_axi_read_in_hvl.compile + - fuse_ctrl_secreg_axi_read_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_bfm.vinfo new file mode 100644 index 000000000..7a7c867b2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_secreg_axi_read_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_secreg_axi_read_in_if.sv +src/fuse_ctrl_secreg_axi_read_in_driver_bfm.sv +src/fuse_ctrl_secreg_axi_read_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_common.compile new file mode 100644 index 000000000..34e8920b8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hdl.f new file mode 100644 index 000000000..5f203b951 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hvl.f new file mode 100644 index 000000000..6917a8ff3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_xrtl.f new file mode 100644 index 000000000..4801037d9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hdl.compile new file mode 100644 index 000000000..822c6dae4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_secreg_axi_read_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_secreg_axi_read_in_if.sv + - src/fuse_ctrl_secreg_axi_read_in_monitor_bfm.sv + - src/fuse_ctrl_secreg_axi_read_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hvl.compile new file mode 100644 index 000000000..baf1ae95d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_secreg_axi_read_in_common.compile +incdir: + - . +src: + - fuse_ctrl_secreg_axi_read_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.sv new file mode 100644 index 000000000..411b4957f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_secreg_axi_read_in_macros.svh" + + export fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_secreg_axi_read_in_typedefs.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_transaction.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_configuration.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_driver.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_monitor.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_transaction_coverage.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_sequence_base.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_random_sequence.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_responder_sequence.svh" + `include "src/fuse_ctrl_secreg_axi_read_in2reg_adapter.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.vinfo new file mode 100644 index 000000000..a76e85842 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_secreg_axi_read_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_secreg_axi_read_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv new file mode 100644 index 000000000..1b90f0274 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_secreg_axi_read_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.vinfo new file mode 100644 index 000000000..269b5c06e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_sve.F new file mode 100644 index 000000000..8fec4a904 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in2reg_adapter.svh new file mode 100644 index 000000000..c7d2b13f0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_secreg_axi_read_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_secreg_axi_read_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_secreg_axi_read_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_agent.svh new file mode 100644 index 000000000..59c7181b3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_secreg_axi_read_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_secreg_axi_read_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_secreg_axi_read_in_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_configuration.svh new file mode 100644 index 000000000..c4124708f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_secreg_axi_read_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_secreg_axi_read_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_secreg_axi_read_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_CONFIGURATION_STRUCT + fuse_ctrl_secreg_axi_read_in_configuration_s fuse_ctrl_secreg_axi_read_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_secreg_axi_read_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_configuration_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_secreg_axi_read_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_secreg_axi_read_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_secreg_axi_read_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_secreg_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_secreg_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_secreg_axi_read_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_secreg_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver.svh new file mode 100644 index 000000000..dae487dcd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_secreg_axi_read_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_secreg_axi_read_in_driver and fuse_ctrl_secreg_axi_read_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_secreg_axi_read_in_driver_bfm. +`fuse_ctrl_secreg_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_in_initiator_s fuse_ctrl_secreg_axi_read_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_secreg_axi_read_in_driver and fuse_ctrl_secreg_axi_read_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_secreg_axi_read_in_driver_bfm. +`fuse_ctrl_secreg_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_in_responder_s fuse_ctrl_secreg_axi_read_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_secreg_axi_read_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_secreg_axi_read_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_secreg_axi_read_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_secreg_axi_read_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver_bfm.sv new file mode 100644 index 000000000..4b9b81520 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_secreg_axi_read_in signal driving. It is +// accessed by the uvm fuse_ctrl_secreg_axi_read_in driver through a virtual interface +// handle in the fuse_ctrl_secreg_axi_read_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_secreg_axi_read_in_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_secreg_axi_read_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_in_macros.svh" + +interface fuse_ctrl_secreg_axi_read_in_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_secreg_axi_read_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_secreg_axi_read_in_pkg::fuse_ctrl_secreg_axi_read_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_secreg_axi_read_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_secreg_axi_read_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_secreg_axi_read_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_in_driver and fuse_ctrl_secreg_axi_read_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_in_driver_bfm. + `fuse_ctrl_secreg_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_secreg_axi_read_in_driver and fuse_ctrl_secreg_axi_read_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_in_driver_bfm. + `fuse_ctrl_secreg_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_secreg_axi_read_in_configuration_s fuse_ctrl_secreg_axi_read_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_secreg_axi_read_in_initiator_s fuse_ctrl_secreg_axi_read_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_secreg_axi_read_in_responder_s fuse_ctrl_secreg_axi_read_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_secreg_axi_read_in_initiator_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Members within the fuse_ctrl_secreg_axi_read_in_responder_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + initiator_struct = fuse_ctrl_secreg_axi_read_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_secreg_axi_read_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_secreg_axi_read_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_secreg_axi_read_in_initiator_s fuse_ctrl_secreg_axi_read_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_secreg_axi_read_in_responder_s fuse_ctrl_secreg_axi_read_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_secreg_axi_read_in_initiator_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Variables within the fuse_ctrl_secreg_axi_read_in_responder_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = arlock_i; // + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_secreg_axi_read_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_secreg_axi_read_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_if.sv new file mode 100644 index 000000000..74f7ba6cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_secreg_axi_read_in interface signals. +// It is instantiated once per fuse_ctrl_secreg_axi_read_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_secreg_axi_read_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_secreg_axi_read_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; + +interface fuse_ctrl_secreg_axi_read_in_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_macros.svh new file mode 100644 index 000000000..fd62fe9d0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_secreg_axi_read_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_secreg_axi_read_in_configuration class. +// + `define fuse_ctrl_secreg_axi_read_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_secreg_axi_read_in_configuration_s; + + `define fuse_ctrl_secreg_axi_read_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_configuration_s to_struct();\ + fuse_ctrl_secreg_axi_read_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_secreg_axi_read_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_secreg_axi_read_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_secreg_axi_read_in_configuration_s fuse_ctrl_secreg_axi_read_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_secreg_axi_read_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_secreg_axi_read_in_transaction class. +// + `define fuse_ctrl_secreg_axi_read_in_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_in_monitor_s; + + `define fuse_ctrl_secreg_axi_read_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_monitor_s to_monitor_struct();\ + fuse_ctrl_secreg_axi_read_in_monitor_struct = \ + { \ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_secreg_axi_read_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_secreg_axi_read_in_monitor_s fuse_ctrl_secreg_axi_read_in_monitor_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_secreg_axi_read_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_in_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_in_initiator_s; + + `define fuse_ctrl_secreg_axi_read_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_initiator_s to_initiator_struct();\ + fuse_ctrl_secreg_axi_read_in_initiator_struct = \ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_secreg_axi_read_in_initiator_s fuse_ctrl_secreg_axi_read_in_initiator_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_secreg_axi_read_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_in_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_in_responder_s; + + `define fuse_ctrl_secreg_axi_read_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_responder_s to_responder_struct();\ + fuse_ctrl_secreg_axi_read_in_responder_struct = \ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_in_responder_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_secreg_axi_read_in_responder_s fuse_ctrl_secreg_axi_read_in_responder_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor.svh new file mode 100644 index 000000000..f62bb2c33 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_secreg_axi_read_in transactions observed by the +// fuse_ctrl_secreg_axi_read_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_secreg_axi_read_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_secreg_axi_read_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_secreg_axi_read_in_monitor_s fuse_ctrl_secreg_axi_read_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_secreg_axi_read_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor_bfm.sv new file mode 100644 index 000000000..520864f61 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_secreg_axi_read_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_secreg_axi_read_in monitor through a virtual +// interface handle in the fuse_ctrl_secreg_axi_read_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_secreg_axi_read_in_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_secreg_axi_read_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_in_macros.svh" + + +interface fuse_ctrl_secreg_axi_read_in_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_secreg_axi_read_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_secreg_axi_read_in_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_in_monitor_s fuse_ctrl_secreg_axi_read_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_secreg_axi_read_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_secreg_axi_read_in_pkg::fuse_ctrl_secreg_axi_read_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_secreg_axi_read_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_secreg_axi_read_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_secreg_axi_read_in_configuration_s fuse_ctrl_secreg_axi_read_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_secreg_axi_read_in_monitor_s fuse_ctrl_secreg_axi_read_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_araddr + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_arvalid + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_arburst + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_arsize + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_arlen + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_aruser + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_arid + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_arlock + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_random_sequence.svh new file mode 100644 index 000000000..b2a6f7e7e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_secreg_axi_read_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_secreg_axi_read_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_secreg_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_secreg_axi_read_in_random_sequence::body()-fuse_ctrl_secreg_axi_read_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_secreg_axi_read_in_driver_bfm via the sequencer and fuse_ctrl_secreg_axi_read_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_secreg_axi_read_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_responder_sequence.svh new file mode 100644 index 000000000..c2c7396c0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_secreg_axi_read_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_secreg_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_sequence_base.svh new file mode 100644 index 000000000..dff36dd01 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_in_transaction_req_t; + fuse_ctrl_secreg_axi_read_in_transaction_req_t req; + typedef fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_in_transaction_rsp_t; + fuse_ctrl_secreg_axi_read_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_secreg_axi_read_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_secreg_axi_read_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction.svh new file mode 100644 index 000000000..7a2899ae2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_secreg_axi_read_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] secreg_araddr ; + logic secreg_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + logic [2:0] secreg_arsize ; + logic [7:0] secreg_arlen ; + logic [UW-1:0] secreg_aruser ; + logic [IW-1:0] secreg_arid ; + logic secreg_arlock ; + logic secreg_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_secreg_axi_read_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_secreg_axi_read_in_monitor and fuse_ctrl_secreg_axi_read_in_monitor_bfm + // This struct is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_in_monitor_s fuse_ctrl_secreg_axi_read_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_monitor_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_in_driver and fuse_ctrl_secreg_axi_read_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_in_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_in_initiator_s fuse_ctrl_secreg_axi_read_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_initiator_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_secreg_axi_read_in_driver and fuse_ctrl_secreg_axi_read_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_in_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_in_responder_s fuse_ctrl_secreg_axi_read_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_responder_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_araddr:0x%x secreg_arvalid:0x%x secreg_arburst:0x%x secreg_arsize:0x%x secreg_arlen:0x%x secreg_aruser:0x%x secreg_arid:0x%x secreg_arlock:0x%x secreg_rready:0x%x ",secreg_araddr,secreg_arvalid,secreg_arburst,secreg_arsize,secreg_arlen,secreg_aruser,secreg_arid,secreg_arlock,secreg_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_araddr = RHS.secreg_araddr; + this.secreg_arvalid = RHS.secreg_arvalid; + this.secreg_arburst = RHS.secreg_arburst; + this.secreg_arsize = RHS.secreg_arsize; + this.secreg_arlen = RHS.secreg_arlen; + this.secreg_aruser = RHS.secreg_aruser; + this.secreg_arid = RHS.secreg_arid; + this.secreg_arlock = RHS.secreg_arlock; + this.secreg_rready = RHS.secreg_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_secreg_axi_read_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_araddr,"secreg_araddr"); + $add_attribute(transaction_view_h,secreg_arvalid,"secreg_arvalid"); + $add_attribute(transaction_view_h,secreg_arburst,"secreg_arburst"); + $add_attribute(transaction_view_h,secreg_arsize,"secreg_arsize"); + $add_attribute(transaction_view_h,secreg_arlen,"secreg_arlen"); + $add_attribute(transaction_view_h,secreg_aruser,"secreg_aruser"); + $add_attribute(transaction_view_h,secreg_arid,"secreg_arid"); + $add_attribute(transaction_view_h,secreg_arlock,"secreg_arlock"); + $add_attribute(transaction_view_h,secreg_rready,"secreg_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction_coverage.svh new file mode 100644 index 000000000..586b6770f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_secreg_axi_read_in transaction information using +// a covergroup named fuse_ctrl_secreg_axi_read_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_secreg_axi_read_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_araddr: coverpoint coverage_trans.secreg_araddr; + secreg_arvalid: coverpoint coverage_trans.secreg_arvalid; + secreg_arburst: coverpoint coverage_trans.secreg_arburst; + secreg_arsize: coverpoint coverage_trans.secreg_arsize; + secreg_arlen: coverpoint coverage_trans.secreg_arlen; + secreg_aruser: coverpoint coverage_trans.secreg_aruser; + secreg_arid: coverpoint coverage_trans.secreg_arid; + secreg_arlock: coverpoint coverage_trans.secreg_arlock; + secreg_rready: coverpoint coverage_trans.secreg_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_secreg_axi_read_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_secreg_axi_read_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_secreg_axi_read_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/yaml/fuse_ctrl_secreg_axi_read_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/yaml/fuse_ctrl_secreg_axi_read_in_interface.yaml new file mode 100644 index 000000000..a5ff8dd8b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/yaml/fuse_ctrl_secreg_axi_read_in_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_secreg_axi_read_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: secreg_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.project new file mode 100644 index 000000000..18afeef3d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_secreg_axi_read_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.svproject new file mode 100644 index 000000000..c600cb8e1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/Makefile new file mode 100644 index 000000000..6f4f5542b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_secreg_axi_read_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_secreg_axi_read_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hvl.f + +fuse_ctrl_secreg_axi_read_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hdl.f + +fuse_ctrl_secreg_axi_read_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_xrtl.f + +COMP_fuse_ctrl_secreg_axi_read_out_if_PKG_TGT_0 = q_comp_fuse_ctrl_secreg_axi_read_out_if_pkg +COMP_fuse_ctrl_secreg_axi_read_out_if_PKG_TGT_1 = v_comp_fuse_ctrl_secreg_axi_read_out_if_pkg +COMP_fuse_ctrl_secreg_axi_read_out_if_PKG_TGT = $(COMP_fuse_ctrl_secreg_axi_read_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_secreg_axi_read_out_if_pkg: $(COMP_fuse_ctrl_secreg_axi_read_out_if_PKG_TGT) + +q_comp_fuse_ctrl_secreg_axi_read_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG_XRTL) + +v_comp_fuse_ctrl_secreg_axi_read_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_secreg_axi_read_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_out_if_pkg += -I$(fuse_ctrl_secreg_axi_read_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_out_if_pkg += $(fuse_ctrl_secreg_axi_read_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_out_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_secreg_axi_read_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/compile.do new file mode 100644 index 000000000..9df86868c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_secreg_axi_read_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if.compile new file mode 100644 index 000000000..eb85cfd7c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_secreg_axi_read_out_if_hvl.compile + - fuse_ctrl_secreg_axi_read_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_bfm.vinfo new file mode 100644 index 000000000..0146ca8a1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_secreg_axi_read_out_if_if.sv +src/fuse_ctrl_secreg_axi_read_out_if_driver_bfm.sv +src/fuse_ctrl_secreg_axi_read_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_common.compile new file mode 100644 index 000000000..91b0fa6ac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hdl.f new file mode 100644 index 000000000..8db592711 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hvl.f new file mode 100644 index 000000000..b5b109af5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_xrtl.f new file mode 100644 index 000000000..d0c4b72a5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hdl.compile new file mode 100644 index 000000000..3547429f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_secreg_axi_read_out_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_secreg_axi_read_out_if_if.sv + - src/fuse_ctrl_secreg_axi_read_out_if_monitor_bfm.sv + - src/fuse_ctrl_secreg_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hvl.compile new file mode 100644 index 000000000..43151aea1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_secreg_axi_read_out_if_common.compile +incdir: + - . +src: + - fuse_ctrl_secreg_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.sv new file mode 100644 index 000000000..6ab054b1e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_secreg_axi_read_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_secreg_axi_read_out_if_macros.svh" + + export fuse_ctrl_secreg_axi_read_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_secreg_axi_read_out_if_typedefs.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_if_transaction.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_if_configuration.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_if_driver.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_if_monitor.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_if_transaction_coverage.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_if_sequence_base.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_if_random_sequence.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_if_responder_sequence.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_if2reg_adapter.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.vinfo new file mode 100644 index 000000000..af597b791 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_secreg_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.sv new file mode 100644 index 000000000..b966c748b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_secreg_axi_read_out_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..04a3a2344 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_sve.F new file mode 100644 index 000000000..795ea3865 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if2reg_adapter.svh new file mode 100644 index 000000000..318dd9a3f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_secreg_axi_read_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_secreg_axi_read_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_secreg_axi_read_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_agent.svh new file mode 100644 index 000000000..7481759c6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_secreg_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_secreg_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_secreg_axi_read_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_configuration.svh new file mode 100644 index 000000000..96b86ba40 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_secreg_axi_read_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_secreg_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_secreg_axi_read_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_STRUCT + fuse_ctrl_secreg_axi_read_out_if_configuration_s fuse_ctrl_secreg_axi_read_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_secreg_axi_read_out_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_if_configuration_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_secreg_axi_read_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_secreg_axi_read_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_secreg_axi_read_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_secreg_axi_read_out_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_secreg_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver.svh new file mode 100644 index 000000000..a72957934 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_secreg_axi_read_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_secreg_axi_read_out_if_driver and fuse_ctrl_secreg_axi_read_out_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_secreg_axi_read_out_if_driver_bfm. +`fuse_ctrl_secreg_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_out_if_initiator_s fuse_ctrl_secreg_axi_read_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_secreg_axi_read_out_if_driver and fuse_ctrl_secreg_axi_read_out_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_secreg_axi_read_out_if_driver_bfm. +`fuse_ctrl_secreg_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_out_if_responder_s fuse_ctrl_secreg_axi_read_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_secreg_axi_read_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_secreg_axi_read_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_secreg_axi_read_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_secreg_axi_read_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver_bfm.sv new file mode 100644 index 000000000..b7588ca95 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_secreg_axi_read_out_if signal driving. It is +// accessed by the uvm fuse_ctrl_secreg_axi_read_out_if driver through a virtual interface +// handle in the fuse_ctrl_secreg_axi_read_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_secreg_axi_read_out_if_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_secreg_axi_read_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_out_if_macros.svh" + +interface fuse_ctrl_secreg_axi_read_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_secreg_axi_read_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_secreg_axi_read_out_if_pkg::fuse_ctrl_secreg_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_secreg_axi_read_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_secreg_axi_read_out_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_out_if_driver and fuse_ctrl_secreg_axi_read_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_out_if_driver_bfm. + `fuse_ctrl_secreg_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_secreg_axi_read_out_if_driver and fuse_ctrl_secreg_axi_read_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_out_if_driver_bfm. + `fuse_ctrl_secreg_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_secreg_axi_read_out_if_configuration_s fuse_ctrl_secreg_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_secreg_axi_read_out_if_initiator_s fuse_ctrl_secreg_axi_read_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_secreg_axi_read_out_if_responder_s fuse_ctrl_secreg_axi_read_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_secreg_axi_read_out_if_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Members within the fuse_ctrl_secreg_axi_read_out_if_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + initiator_struct = fuse_ctrl_secreg_axi_read_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_secreg_axi_read_out_if_responder_struct.xyz = arready_i; // + // fuse_ctrl_secreg_axi_read_out_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_secreg_axi_read_out_if_responder_struct.xyz = rresp_i; // + // fuse_ctrl_secreg_axi_read_out_if_responder_struct.xyz = rid_i; // + // fuse_ctrl_secreg_axi_read_out_if_responder_struct.xyz = rlast_i; // + // fuse_ctrl_secreg_axi_read_out_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_secreg_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_secreg_axi_read_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_secreg_axi_read_out_if_initiator_s fuse_ctrl_secreg_axi_read_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_secreg_axi_read_out_if_responder_s fuse_ctrl_secreg_axi_read_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_secreg_axi_read_out_if_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Variables within the fuse_ctrl_secreg_axi_read_out_if_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= fuse_ctrl_secreg_axi_read_out_if_initiator_struct.xyz; // + // rdata_o <= fuse_ctrl_secreg_axi_read_out_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= fuse_ctrl_secreg_axi_read_out_if_initiator_struct.xyz; // + // rid_o <= fuse_ctrl_secreg_axi_read_out_if_initiator_struct.xyz; // + // rlast_o <= fuse_ctrl_secreg_axi_read_out_if_initiator_struct.xyz; // + // rvalid_o <= fuse_ctrl_secreg_axi_read_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_secreg_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_secreg_axi_read_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_if.sv new file mode 100644 index 000000000..73192909d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_secreg_axi_read_out_if interface signals. +// It is instantiated once per fuse_ctrl_secreg_axi_read_out_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_secreg_axi_read_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_secreg_axi_read_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_if_bus.arready), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_if_bus.rdata), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_if_bus.rresp), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_if_bus.rid), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_if_bus.rlast), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_out_if_pkg_hdl::*; + +interface fuse_ctrl_secreg_axi_read_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_macros.svh new file mode 100644 index 000000000..68dec6f33 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_secreg_axi_read_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_secreg_axi_read_out_if_configuration class. +// + `define fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_secreg_axi_read_out_if_configuration_s; + + `define fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_if_configuration_s to_struct();\ + fuse_ctrl_secreg_axi_read_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_secreg_axi_read_out_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_secreg_axi_read_out_if_configuration_s fuse_ctrl_secreg_axi_read_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_secreg_axi_read_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_secreg_axi_read_out_if_transaction class. +// + `define fuse_ctrl_secreg_axi_read_out_if_MONITOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } fuse_ctrl_secreg_axi_read_out_if_monitor_s; + + `define fuse_ctrl_secreg_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_if_monitor_s to_monitor_struct();\ + fuse_ctrl_secreg_axi_read_out_if_monitor_struct = \ + { \ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( fuse_ctrl_secreg_axi_read_out_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_secreg_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_secreg_axi_read_out_if_monitor_s fuse_ctrl_secreg_axi_read_out_if_monitor_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = fuse_ctrl_secreg_axi_read_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_secreg_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } fuse_ctrl_secreg_axi_read_out_if_initiator_s; + + `define fuse_ctrl_secreg_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_if_initiator_s to_initiator_struct();\ + fuse_ctrl_secreg_axi_read_out_if_initiator_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( fuse_ctrl_secreg_axi_read_out_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_secreg_axi_read_out_if_initiator_s fuse_ctrl_secreg_axi_read_out_if_initiator_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = fuse_ctrl_secreg_axi_read_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_secreg_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } fuse_ctrl_secreg_axi_read_out_if_responder_s; + + `define fuse_ctrl_secreg_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_if_responder_s to_responder_struct();\ + fuse_ctrl_secreg_axi_read_out_if_responder_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( fuse_ctrl_secreg_axi_read_out_if_responder_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_secreg_axi_read_out_if_responder_s fuse_ctrl_secreg_axi_read_out_if_responder_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = fuse_ctrl_secreg_axi_read_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor.svh new file mode 100644 index 000000000..ca4e744eb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_secreg_axi_read_out_if transactions observed by the +// fuse_ctrl_secreg_axi_read_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_secreg_axi_read_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_secreg_axi_read_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_secreg_axi_read_out_if_monitor_s fuse_ctrl_secreg_axi_read_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_secreg_axi_read_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor_bfm.sv new file mode 100644 index 000000000..32b5eaf40 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_secreg_axi_read_out_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_secreg_axi_read_out_if monitor through a virtual +// interface handle in the fuse_ctrl_secreg_axi_read_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_secreg_axi_read_out_if_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_secreg_axi_read_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_out_if_macros.svh" + + +interface fuse_ctrl_secreg_axi_read_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_secreg_axi_read_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_secreg_axi_read_out_if_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_out_if_monitor_s fuse_ctrl_secreg_axi_read_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_secreg_axi_read_out_if_pkg::fuse_ctrl_secreg_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_secreg_axi_read_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_secreg_axi_read_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_secreg_axi_read_out_if_configuration_s fuse_ctrl_secreg_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_secreg_axi_read_out_if_monitor_s fuse_ctrl_secreg_axi_read_out_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.secreg_arready + // // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.secreg_rdata + // // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.secreg_rresp + // // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.secreg_rid + // // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.secreg_rlast + // // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.secreg_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.xyz = arready_i; // + // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.xyz = rresp_i; // + // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.xyz = rid_i; // + // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.xyz = rlast_i; // + // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_random_sequence.svh new file mode 100644 index 000000000..30fa8b2f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_secreg_axi_read_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_secreg_axi_read_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_secreg_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_secreg_axi_read_out_if_random_sequence::body()-fuse_ctrl_secreg_axi_read_out_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_secreg_axi_read_out_if_driver_bfm via the sequencer and fuse_ctrl_secreg_axi_read_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_secreg_axi_read_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_responder_sequence.svh new file mode 100644 index 000000000..8627fa46e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_secreg_axi_read_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_secreg_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_sequence_base.svh new file mode 100644 index 000000000..821876b40 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_out_if_transaction_req_t; + fuse_ctrl_secreg_axi_read_out_if_transaction_req_t req; + typedef fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_out_if_transaction_rsp_t; + fuse_ctrl_secreg_axi_read_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_secreg_axi_read_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_secreg_axi_read_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction.svh new file mode 100644 index 000000000..d1fb1311a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_secreg_axi_read_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic secreg_arready ; + logic [DW-1:0] secreg_rdata ; + axi_pkg::axi_burst_e secreg_rresp ; + logic [IW-1:0] secreg_rid ; + logic secreg_rlast ; + logic secreg_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_secreg_axi_read_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_secreg_axi_read_out_if_monitor and fuse_ctrl_secreg_axi_read_out_if_monitor_bfm + // This struct is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_out_if_monitor_s fuse_ctrl_secreg_axi_read_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_out_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_if_monitor_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_out_if_driver and fuse_ctrl_secreg_axi_read_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_out_if_initiator_s fuse_ctrl_secreg_axi_read_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_out_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_if_initiator_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_secreg_axi_read_out_if_driver and fuse_ctrl_secreg_axi_read_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_out_if_responder_s fuse_ctrl_secreg_axi_read_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_out_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_if_responder_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_arready:0x%x secreg_rdata:0x%x secreg_rresp:0x%x secreg_rid:0x%x secreg_rlast:0x%x secreg_rvalid:0x%x ",secreg_arready,secreg_rdata,secreg_rresp,secreg_rid,secreg_rlast,secreg_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.secreg_arready == RHS.secreg_arready) + &&(this.secreg_rdata == RHS.secreg_rdata) + &&(this.secreg_rresp == RHS.secreg_rresp) + &&(this.secreg_rid == RHS.secreg_rid) + &&(this.secreg_rlast == RHS.secreg_rlast) + &&(this.secreg_rvalid == RHS.secreg_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_arready = RHS.secreg_arready; + this.secreg_rdata = RHS.secreg_rdata; + this.secreg_rresp = RHS.secreg_rresp; + this.secreg_rid = RHS.secreg_rid; + this.secreg_rlast = RHS.secreg_rlast; + this.secreg_rvalid = RHS.secreg_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_secreg_axi_read_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_arready,"secreg_arready"); + $add_attribute(transaction_view_h,secreg_rdata,"secreg_rdata"); + $add_attribute(transaction_view_h,secreg_rresp,"secreg_rresp"); + $add_attribute(transaction_view_h,secreg_rid,"secreg_rid"); + $add_attribute(transaction_view_h,secreg_rlast,"secreg_rlast"); + $add_attribute(transaction_view_h,secreg_rvalid,"secreg_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction_coverage.svh new file mode 100644 index 000000000..e5fd88621 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_secreg_axi_read_out_if transaction information using +// a covergroup named fuse_ctrl_secreg_axi_read_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_secreg_axi_read_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_arready: coverpoint coverage_trans.secreg_arready; + secreg_rdata: coverpoint coverage_trans.secreg_rdata; + secreg_rresp: coverpoint coverage_trans.secreg_rresp; + secreg_rid: coverpoint coverage_trans.secreg_rid; + secreg_rlast: coverpoint coverage_trans.secreg_rlast; + secreg_rvalid: coverpoint coverage_trans.secreg_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_secreg_axi_read_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_secreg_axi_read_out_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_secreg_axi_read_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/yaml/fuse_ctrl_secreg_axi_read_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/yaml/fuse_ctrl_secreg_axi_read_out_if_interface.yaml new file mode 100644 index 000000000..a61691557 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/yaml/fuse_ctrl_secreg_axi_read_out_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + fuse_ctrl_secreg_axi_read_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.project new file mode 100644 index 000000000..615ab14e5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_secreg_axi_read_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.svproject new file mode 100644 index 000000000..9d45666db --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/Makefile new file mode 100644 index 000000000..2b6270941 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_secreg_axi_read_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_secreg_axi_read_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hvl.f + +fuse_ctrl_secreg_axi_read_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hdl.f + +fuse_ctrl_secreg_axi_read_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_xrtl.f + +COMP_fuse_ctrl_secreg_axi_read_out_PKG_TGT_0 = q_comp_fuse_ctrl_secreg_axi_read_out_pkg +COMP_fuse_ctrl_secreg_axi_read_out_PKG_TGT_1 = v_comp_fuse_ctrl_secreg_axi_read_out_pkg +COMP_fuse_ctrl_secreg_axi_read_out_PKG_TGT = $(COMP_fuse_ctrl_secreg_axi_read_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_secreg_axi_read_out_pkg: $(COMP_fuse_ctrl_secreg_axi_read_out_PKG_TGT) + +q_comp_fuse_ctrl_secreg_axi_read_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG_XRTL) + +v_comp_fuse_ctrl_secreg_axi_read_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_secreg_axi_read_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_out_pkg += -I$(fuse_ctrl_secreg_axi_read_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_out_pkg += $(fuse_ctrl_secreg_axi_read_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_secreg_axi_read_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/compile.do new file mode 100644 index 000000000..76aa3ca09 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_secreg_axi_read_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out.compile new file mode 100644 index 000000000..630dad514 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_secreg_axi_read_out_hvl.compile + - fuse_ctrl_secreg_axi_read_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_bfm.vinfo new file mode 100644 index 000000000..ecf711b62 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_secreg_axi_read_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_secreg_axi_read_out_if.sv +src/fuse_ctrl_secreg_axi_read_out_driver_bfm.sv +src/fuse_ctrl_secreg_axi_read_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_common.compile new file mode 100644 index 000000000..ab88d14dc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hdl.f new file mode 100644 index 000000000..5665d944e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hvl.f new file mode 100644 index 000000000..dd6d2e780 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_xrtl.f new file mode 100644 index 000000000..39d267222 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hdl.compile new file mode 100644 index 000000000..7def0007c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_secreg_axi_read_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_secreg_axi_read_out_if.sv + - src/fuse_ctrl_secreg_axi_read_out_monitor_bfm.sv + - src/fuse_ctrl_secreg_axi_read_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hvl.compile new file mode 100644 index 000000000..b4a074d33 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_secreg_axi_read_out_common.compile +incdir: + - . +src: + - fuse_ctrl_secreg_axi_read_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.sv new file mode 100644 index 000000000..e5e0fb140 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_secreg_axi_read_out_macros.svh" + + export fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_secreg_axi_read_out_typedefs.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_transaction.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_configuration.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_driver.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_monitor.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_transaction_coverage.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_sequence_base.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_random_sequence.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_responder_sequence.svh" + `include "src/fuse_ctrl_secreg_axi_read_out2reg_adapter.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.vinfo new file mode 100644 index 000000000..fcfbb848d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_secreg_axi_read_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_secreg_axi_read_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv new file mode 100644 index 000000000..86bf6a521 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_secreg_axi_read_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.vinfo new file mode 100644 index 000000000..217e9f2f8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_sve.F new file mode 100644 index 000000000..7feb9ad5d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out2reg_adapter.svh new file mode 100644 index 000000000..e96620f37 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_secreg_axi_read_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_secreg_axi_read_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_secreg_axi_read_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_agent.svh new file mode 100644 index 000000000..8c136cf4b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_secreg_axi_read_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_secreg_axi_read_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_secreg_axi_read_out_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_configuration.svh new file mode 100644 index 000000000..5660faa8c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_secreg_axi_read_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_secreg_axi_read_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_secreg_axi_read_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_CONFIGURATION_STRUCT + fuse_ctrl_secreg_axi_read_out_configuration_s fuse_ctrl_secreg_axi_read_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_secreg_axi_read_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_configuration_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_secreg_axi_read_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_secreg_axi_read_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_secreg_axi_read_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_secreg_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_secreg_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_secreg_axi_read_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_secreg_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver.svh new file mode 100644 index 000000000..3902fe883 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_secreg_axi_read_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_secreg_axi_read_out_driver and fuse_ctrl_secreg_axi_read_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_secreg_axi_read_out_driver_bfm. +`fuse_ctrl_secreg_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_out_initiator_s fuse_ctrl_secreg_axi_read_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_secreg_axi_read_out_driver and fuse_ctrl_secreg_axi_read_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_secreg_axi_read_out_driver_bfm. +`fuse_ctrl_secreg_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_out_responder_s fuse_ctrl_secreg_axi_read_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_secreg_axi_read_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_secreg_axi_read_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_secreg_axi_read_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_secreg_axi_read_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver_bfm.sv new file mode 100644 index 000000000..3b1e0d51d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_secreg_axi_read_out signal driving. It is +// accessed by the uvm fuse_ctrl_secreg_axi_read_out driver through a virtual interface +// handle in the fuse_ctrl_secreg_axi_read_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_secreg_axi_read_out_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_secreg_axi_read_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_out_macros.svh" + +interface fuse_ctrl_secreg_axi_read_out_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_secreg_axi_read_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_secreg_axi_read_out_pkg::fuse_ctrl_secreg_axi_read_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_secreg_axi_read_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_secreg_axi_read_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_secreg_axi_read_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_out_driver and fuse_ctrl_secreg_axi_read_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_out_driver_bfm. + `fuse_ctrl_secreg_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_secreg_axi_read_out_driver and fuse_ctrl_secreg_axi_read_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_out_driver_bfm. + `fuse_ctrl_secreg_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_secreg_axi_read_out_configuration_s fuse_ctrl_secreg_axi_read_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_secreg_axi_read_out_initiator_s fuse_ctrl_secreg_axi_read_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_secreg_axi_read_out_responder_s fuse_ctrl_secreg_axi_read_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_secreg_axi_read_out_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Members within the fuse_ctrl_secreg_axi_read_out_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + initiator_struct = fuse_ctrl_secreg_axi_read_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_secreg_axi_read_out_responder_struct.xyz = arready_i; // + // fuse_ctrl_secreg_axi_read_out_responder_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_secreg_axi_read_out_responder_struct.xyz = rresp_i; // + // fuse_ctrl_secreg_axi_read_out_responder_struct.xyz = rid_i; // + // fuse_ctrl_secreg_axi_read_out_responder_struct.xyz = rlast_i; // + // fuse_ctrl_secreg_axi_read_out_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_secreg_axi_read_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_secreg_axi_read_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_secreg_axi_read_out_initiator_s fuse_ctrl_secreg_axi_read_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_secreg_axi_read_out_responder_s fuse_ctrl_secreg_axi_read_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_secreg_axi_read_out_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Variables within the fuse_ctrl_secreg_axi_read_out_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= fuse_ctrl_secreg_axi_read_out_initiator_struct.xyz; // + // rdata_o <= fuse_ctrl_secreg_axi_read_out_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= fuse_ctrl_secreg_axi_read_out_initiator_struct.xyz; // + // rid_o <= fuse_ctrl_secreg_axi_read_out_initiator_struct.xyz; // + // rlast_o <= fuse_ctrl_secreg_axi_read_out_initiator_struct.xyz; // + // rvalid_o <= fuse_ctrl_secreg_axi_read_out_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_secreg_axi_read_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_secreg_axi_read_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_if.sv new file mode 100644 index 000000000..08ee4ed10 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_secreg_axi_read_out interface signals. +// It is instantiated once per fuse_ctrl_secreg_axi_read_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_secreg_axi_read_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_secreg_axi_read_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_bus.arready), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_bus.rdata), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_bus.rresp), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_bus.rid), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_bus.rlast), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; + +interface fuse_ctrl_secreg_axi_read_out_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_macros.svh new file mode 100644 index 000000000..882e661bd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_secreg_axi_read_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_secreg_axi_read_out_configuration class. +// + `define fuse_ctrl_secreg_axi_read_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_secreg_axi_read_out_configuration_s; + + `define fuse_ctrl_secreg_axi_read_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_configuration_s to_struct();\ + fuse_ctrl_secreg_axi_read_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_secreg_axi_read_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_secreg_axi_read_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_secreg_axi_read_out_configuration_s fuse_ctrl_secreg_axi_read_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_secreg_axi_read_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_secreg_axi_read_out_transaction class. +// + `define fuse_ctrl_secreg_axi_read_out_MONITOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } fuse_ctrl_secreg_axi_read_out_monitor_s; + + `define fuse_ctrl_secreg_axi_read_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_monitor_s to_monitor_struct();\ + fuse_ctrl_secreg_axi_read_out_monitor_struct = \ + { \ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( fuse_ctrl_secreg_axi_read_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_secreg_axi_read_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_secreg_axi_read_out_monitor_s fuse_ctrl_secreg_axi_read_out_monitor_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = fuse_ctrl_secreg_axi_read_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_secreg_axi_read_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_out_INITIATOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } fuse_ctrl_secreg_axi_read_out_initiator_s; + + `define fuse_ctrl_secreg_axi_read_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_initiator_s to_initiator_struct();\ + fuse_ctrl_secreg_axi_read_out_initiator_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( fuse_ctrl_secreg_axi_read_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_secreg_axi_read_out_initiator_s fuse_ctrl_secreg_axi_read_out_initiator_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = fuse_ctrl_secreg_axi_read_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_secreg_axi_read_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_out_RESPONDER_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } fuse_ctrl_secreg_axi_read_out_responder_s; + + `define fuse_ctrl_secreg_axi_read_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_responder_s to_responder_struct();\ + fuse_ctrl_secreg_axi_read_out_responder_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( fuse_ctrl_secreg_axi_read_out_responder_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_secreg_axi_read_out_responder_s fuse_ctrl_secreg_axi_read_out_responder_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = fuse_ctrl_secreg_axi_read_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor.svh new file mode 100644 index 000000000..8e4f46381 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_secreg_axi_read_out transactions observed by the +// fuse_ctrl_secreg_axi_read_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_secreg_axi_read_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_secreg_axi_read_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_secreg_axi_read_out_monitor_s fuse_ctrl_secreg_axi_read_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_secreg_axi_read_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor_bfm.sv new file mode 100644 index 000000000..744b71555 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_secreg_axi_read_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_secreg_axi_read_out monitor through a virtual +// interface handle in the fuse_ctrl_secreg_axi_read_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_secreg_axi_read_out_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_secreg_axi_read_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_out_macros.svh" + + +interface fuse_ctrl_secreg_axi_read_out_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_secreg_axi_read_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_secreg_axi_read_out_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_out_monitor_s fuse_ctrl_secreg_axi_read_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_secreg_axi_read_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_secreg_axi_read_out_pkg::fuse_ctrl_secreg_axi_read_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_secreg_axi_read_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_secreg_axi_read_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_secreg_axi_read_out_configuration_s fuse_ctrl_secreg_axi_read_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_secreg_axi_read_out_monitor_s fuse_ctrl_secreg_axi_read_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_secreg_axi_read_out_monitor_struct.secreg_arready + // // fuse_ctrl_secreg_axi_read_out_monitor_struct.secreg_rdata + // // fuse_ctrl_secreg_axi_read_out_monitor_struct.secreg_rresp + // // fuse_ctrl_secreg_axi_read_out_monitor_struct.secreg_rid + // // fuse_ctrl_secreg_axi_read_out_monitor_struct.secreg_rlast + // // fuse_ctrl_secreg_axi_read_out_monitor_struct.secreg_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_secreg_axi_read_out_monitor_struct.xyz = arready_i; // + // fuse_ctrl_secreg_axi_read_out_monitor_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_secreg_axi_read_out_monitor_struct.xyz = rresp_i; // + // fuse_ctrl_secreg_axi_read_out_monitor_struct.xyz = rid_i; // + // fuse_ctrl_secreg_axi_read_out_monitor_struct.xyz = rlast_i; // + // fuse_ctrl_secreg_axi_read_out_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_random_sequence.svh new file mode 100644 index 000000000..ff6541d98 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_secreg_axi_read_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_secreg_axi_read_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_secreg_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_secreg_axi_read_out_random_sequence::body()-fuse_ctrl_secreg_axi_read_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_secreg_axi_read_out_driver_bfm via the sequencer and fuse_ctrl_secreg_axi_read_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_secreg_axi_read_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_responder_sequence.svh new file mode 100644 index 000000000..83a9996a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_secreg_axi_read_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_secreg_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_sequence_base.svh new file mode 100644 index 000000000..30cb7935d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_out_transaction_req_t; + fuse_ctrl_secreg_axi_read_out_transaction_req_t req; + typedef fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_out_transaction_rsp_t; + fuse_ctrl_secreg_axi_read_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_secreg_axi_read_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_secreg_axi_read_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction.svh new file mode 100644 index 000000000..b36b950c4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_secreg_axi_read_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic secreg_arready ; + logic [DW-1:0] secreg_rdata ; + axi_pkg::axi_burst_e secreg_rresp ; + logic [IW-1:0] secreg_rid ; + logic secreg_rlast ; + logic secreg_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_secreg_axi_read_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_secreg_axi_read_out_monitor and fuse_ctrl_secreg_axi_read_out_monitor_bfm + // This struct is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_out_monitor_s fuse_ctrl_secreg_axi_read_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_monitor_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_out_driver and fuse_ctrl_secreg_axi_read_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_out_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_out_initiator_s fuse_ctrl_secreg_axi_read_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_initiator_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_secreg_axi_read_out_driver and fuse_ctrl_secreg_axi_read_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_out_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_out_responder_s fuse_ctrl_secreg_axi_read_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_responder_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_arready:0x%x secreg_rdata:0x%x secreg_rresp:0x%x secreg_rid:0x%x secreg_rlast:0x%x secreg_rvalid:0x%x ",secreg_arready,secreg_rdata,secreg_rresp,secreg_rid,secreg_rlast,secreg_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.secreg_arready == RHS.secreg_arready) + &&(this.secreg_rdata == RHS.secreg_rdata) + &&(this.secreg_rresp == RHS.secreg_rresp) + &&(this.secreg_rid == RHS.secreg_rid) + &&(this.secreg_rlast == RHS.secreg_rlast) + &&(this.secreg_rvalid == RHS.secreg_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_arready = RHS.secreg_arready; + this.secreg_rdata = RHS.secreg_rdata; + this.secreg_rresp = RHS.secreg_rresp; + this.secreg_rid = RHS.secreg_rid; + this.secreg_rlast = RHS.secreg_rlast; + this.secreg_rvalid = RHS.secreg_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_secreg_axi_read_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_arready,"secreg_arready"); + $add_attribute(transaction_view_h,secreg_rdata,"secreg_rdata"); + $add_attribute(transaction_view_h,secreg_rresp,"secreg_rresp"); + $add_attribute(transaction_view_h,secreg_rid,"secreg_rid"); + $add_attribute(transaction_view_h,secreg_rlast,"secreg_rlast"); + $add_attribute(transaction_view_h,secreg_rvalid,"secreg_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction_coverage.svh new file mode 100644 index 000000000..cdbf4e229 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_secreg_axi_read_out transaction information using +// a covergroup named fuse_ctrl_secreg_axi_read_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_secreg_axi_read_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_arready: coverpoint coverage_trans.secreg_arready; + secreg_rdata: coverpoint coverage_trans.secreg_rdata; + secreg_rresp: coverpoint coverage_trans.secreg_rresp; + secreg_rid: coverpoint coverage_trans.secreg_rid; + secreg_rlast: coverpoint coverage_trans.secreg_rlast; + secreg_rvalid: coverpoint coverage_trans.secreg_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_secreg_axi_read_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_secreg_axi_read_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_secreg_axi_read_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/yaml/fuse_ctrl_secreg_axi_read_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/yaml/fuse_ctrl_secreg_axi_read_out_interface.yaml new file mode 100644 index 000000000..a0081ffd6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/yaml/fuse_ctrl_secreg_axi_read_out_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + fuse_ctrl_secreg_axi_read_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/.project new file mode 100644 index 000000000..ce67d0c3e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + prim_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..f8c7ed7c8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..01ec95534 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# prim_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +prim_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f + +prim_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f + +prim_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f + +COMP_prim_axi_read_if_PKG_TGT_0 = q_comp_prim_axi_read_if_pkg +COMP_prim_axi_read_if_PKG_TGT_1 = v_comp_prim_axi_read_if_pkg +COMP_prim_axi_read_if_PKG_TGT = $(COMP_prim_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_prim_axi_read_if_pkg: $(COMP_prim_axi_read_if_PKG_TGT) + +q_comp_prim_axi_read_if_pkg: + $(HDL_COMP_CMD) $(prim_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_read_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_read_if_PKG_XRTL) + +v_comp_prim_axi_read_if_pkg: + $(HVL_COMP_CMD) $(prim_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_read_if_PKG) + $(VELANALYZE_CMD) $(prim_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(prim_axi_read_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export prim_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_prim_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_prim_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_prim_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_prim_axi_read_if_pkg += -I$(prim_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_prim_axi_read_if_pkg += $(prim_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_prim_axi_read_if_pkg += \ + \ + -o .so + +comp_prim_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_prim_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_prim_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_prim_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_prim_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..9c440083a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of prim_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if.compile new file mode 100644 index 000000000..6b8986ce1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - prim_axi_read_if_hvl.compile + - prim_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..6ed51480b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use prim_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/prim_axi_read_if_if.sv +src/prim_axi_read_if_driver_bfm.sv +src/prim_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_common.compile new file mode 100644 index 000000000..09fd9b43c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..0dcc7ec77 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..1ca45536b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..db173a50e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hdl.compile new file mode 100644 index 000000000..bf564aa0c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./prim_axi_read_if_common.compile +incdir: + - . +src: + - src/prim_axi_read_if_if.sv + - src/prim_axi_read_if_monitor_bfm.sv + - src/prim_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hvl.compile new file mode 100644 index 000000000..ebdc1e779 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./prim_axi_read_if_common.compile +incdir: + - . +src: + - prim_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.sv new file mode 100644 index 000000000..21866eb57 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import prim_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/prim_axi_read_if_macros.svh" + + export prim_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/prim_axi_read_if_typedefs.svh" + `include "src/prim_axi_read_if_transaction.svh" + + `include "src/prim_axi_read_if_configuration.svh" + `include "src/prim_axi_read_if_driver.svh" + `include "src/prim_axi_read_if_monitor.svh" + + `include "src/prim_axi_read_if_transaction_coverage.svh" + `include "src/prim_axi_read_if_sequence_base.svh" + `include "src/prim_axi_read_if_random_sequence.svh" + + `include "src/prim_axi_read_if_responder_sequence.svh" + `include "src/prim_axi_read_if2reg_adapter.svh" + + `include "src/prim_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..9dc1034d4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use prim_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +prim_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..e2ff7fcd4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/prim_axi_read_if_typedefs_hdl.svh" + `include "src/prim_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..fe5f59e5b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..1112cd0fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..e5ff21492 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the prim_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( prim_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "prim_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : prim_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_agent.svh new file mode 100644 index 000000000..e510c9b42 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(prim_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(prim_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(prim_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( prim_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_configuration.svh new file mode 100644 index 000000000..4fe7507ff --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the prim_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual prim_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual prim_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup prim_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_CONFIGURATION_STRUCT + prim_axi_read_if_configuration_s prim_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a prim_axi_read_if_configuration_s + // structure. The function returns the handle to the prim_axi_read_if_configuration_struct. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + prim_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + prim_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + prim_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + prim_axi_read_if_configuration_cg.set_inst_name($sformatf("prim_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver.svh new file mode 100644 index 000000000..80f3658f6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual prim_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( prim_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in prim_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm +// to communicate initiator driven data to prim_axi_read_if_driver_bfm. +`prim_axi_read_if_INITIATOR_STRUCT + prim_axi_read_if_initiator_s prim_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm +// to communicate Responder driven data to prim_axi_read_if_driver_bfm. +`prim_axi_read_if_RESPONDER_STRUCT + prim_axi_read_if_responder_s prim_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + prim_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(prim_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + prim_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(prim_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..fb79a5e87 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the prim_axi_read_if signal driving. It is +// accessed by the uvm prim_axi_read_if driver through a virtual interface +// handle in the prim_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type prim_axi_read_if_if. +// +// Input signals from the prim_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within prim_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_read_if_pkg_hdl::*; +`include "src/prim_axi_read_if_macros.svh" + +interface prim_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (prim_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute prim_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + prim_axi_read_if_pkg::prim_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in prim_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from prim_axi_read_if_driver to this BFM + // **************************************************************************** + `prim_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm + // to communicate initiator driven data to prim_axi_read_if_driver_bfm. + `prim_axi_read_if_INITIATOR_STRUCT + prim_axi_read_if_initiator_s initiator_struct; + // Responder macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm + // to communicate Responder driven data to prim_axi_read_if_driver_bfm. + `prim_axi_read_if_RESPONDER_STRUCT + prim_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(prim_axi_read_if_configuration_s prim_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input prim_axi_read_if_initiator_s prim_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output prim_axi_read_if_responder_s prim_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the prim_axi_read_if_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Members within the prim_axi_read_if_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + initiator_struct = prim_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // prim_axi_read_if_responder_struct.xyz = arready_i; // + // prim_axi_read_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // prim_axi_read_if_responder_struct.xyz = rresp_i; // + // prim_axi_read_if_responder_struct.xyz = rid_i; // + // prim_axi_read_if_responder_struct.xyz = rlast_i; // + // prim_axi_read_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // prim_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = prim_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output prim_axi_read_if_initiator_s prim_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input prim_axi_read_if_responder_s prim_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the prim_axi_read_if_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Variables within the prim_axi_read_if_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= prim_axi_read_if_initiator_struct.xyz; // + // rdata_o <= prim_axi_read_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= prim_axi_read_if_initiator_struct.xyz; // + // rid_o <= prim_axi_read_if_initiator_struct.xyz; // + // rlast_o <= prim_axi_read_if_initiator_struct.xyz; // + // rvalid_o <= prim_axi_read_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the prim_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the prim_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_if.sv new file mode 100644 index 000000000..3e2dc9c5d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the prim_axi_read_if interface signals. +// It is instantiated once per prim_axi_read_if bus. Bus Functional Models, +// BFM's named prim_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named prim_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(prim_axi_read_if_bus.arready), // Agent input +// .dut_signal_port(prim_axi_read_if_bus.rdata), // Agent input +// .dut_signal_port(prim_axi_read_if_bus.rresp), // Agent input +// .dut_signal_port(prim_axi_read_if_bus.rid), // Agent input +// .dut_signal_port(prim_axi_read_if_bus.rlast), // Agent input +// .dut_signal_port(prim_axi_read_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import prim_axi_read_if_pkg_hdl::*; + +interface prim_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_macros.svh new file mode 100644 index 000000000..afbd57861 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the prim_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the prim_axi_read_if_configuration class. +// + `define prim_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } prim_axi_read_if_configuration_s; + + `define prim_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function prim_axi_read_if_configuration_s to_struct();\ + prim_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( prim_axi_read_if_configuration_struct );\ + endfunction + + `define prim_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(prim_axi_read_if_configuration_s prim_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = prim_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the prim_axi_read_if_transaction class. +// + `define prim_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } prim_axi_read_if_monitor_s; + + `define prim_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function prim_axi_read_if_monitor_s to_monitor_struct();\ + prim_axi_read_if_monitor_struct = \ + { \ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( prim_axi_read_if_monitor_struct);\ + endfunction\ + + `define prim_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(prim_axi_read_if_monitor_s prim_axi_read_if_monitor_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = prim_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the prim_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } prim_axi_read_if_initiator_s; + + `define prim_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function prim_axi_read_if_initiator_s to_initiator_struct();\ + prim_axi_read_if_initiator_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( prim_axi_read_if_initiator_struct);\ + endfunction + + `define prim_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(prim_axi_read_if_initiator_s prim_axi_read_if_initiator_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = prim_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the prim_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } prim_axi_read_if_responder_s; + + `define prim_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function prim_axi_read_if_responder_s to_responder_struct();\ + prim_axi_read_if_responder_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( prim_axi_read_if_responder_struct);\ + endfunction + + `define prim_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(prim_axi_read_if_responder_s prim_axi_read_if_responder_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = prim_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor.svh new file mode 100644 index 000000000..2f4d1fc43 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives prim_axi_read_if transactions observed by the +// prim_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual prim_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`prim_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the prim_axi_read_if_monitor_struct. + virtual function void notify_transaction(input prim_axi_read_if_monitor_s prim_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(prim_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..a6c05bea2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the prim_axi_read_if signal monitoring. +// It is accessed by the uvm prim_axi_read_if monitor through a virtual +// interface handle in the prim_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type prim_axi_read_if_if. +// +// Input signals from the prim_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the prim_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_read_if_pkg_hdl::*; +`include "src/prim_axi_read_if_macros.svh" + + +interface prim_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( prim_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute prim_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`prim_axi_read_if_MONITOR_STRUCT + prim_axi_read_if_monitor_s prim_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `prim_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + prim_axi_read_if_pkg::prim_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( prim_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( prim_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(prim_axi_read_if_configuration_s prim_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output prim_axi_read_if_monitor_s prim_axi_read_if_monitor_struct); + // + // Available struct members: + // // prim_axi_read_if_monitor_struct.prim_arready + // // prim_axi_read_if_monitor_struct.prim_rdata + // // prim_axi_read_if_monitor_struct.prim_rresp + // // prim_axi_read_if_monitor_struct.prim_rid + // // prim_axi_read_if_monitor_struct.prim_rlast + // // prim_axi_read_if_monitor_struct.prim_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // prim_axi_read_if_monitor_struct.xyz = arready_i; // + // prim_axi_read_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // prim_axi_read_if_monitor_struct.xyz = rresp_i; // + // prim_axi_read_if_monitor_struct.xyz = rid_i; // + // prim_axi_read_if_monitor_struct.xyz = rlast_i; // + // prim_axi_read_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..08857b229 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the prim_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a prim_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "prim_axi_read_if_random_sequence::body()-prim_axi_read_if_transaction randomization failed") + // Send the transaction to the prim_axi_read_if_driver_bfm via the sequencer and prim_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: prim_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..501b728cc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "prim_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..c94ac9063 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_read_if_transaction_req_t; + prim_axi_read_if_transaction_req_t req; + typedef prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_read_if_transaction_rsp_t; + prim_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = prim_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = prim_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction.svh new file mode 100644 index 000000000..c7e72b2ee --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an prim_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( prim_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_arready ; + logic [DW-1:0] prim_rdata ; + axi_pkg::axi_burst_e prim_rresp ; + logic [IW-1:0] prim_rid ; + logic prim_rlast ; + logic prim_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in prim_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by prim_axi_read_if_monitor and prim_axi_read_if_monitor_bfm + // This struct is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_MONITOR_STRUCT + prim_axi_read_if_monitor_s prim_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a prim_axi_read_if_monitor_s + // structure. The function returns the handle to the prim_axi_read_if_monitor_struct. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm + // to communicate initiator driven data to prim_axi_read_if_driver_bfm. + // This struct is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_INITIATOR_STRUCT + prim_axi_read_if_initiator_s prim_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a prim_axi_read_if_initiator_s + // structure. The function returns the handle to the prim_axi_read_if_initiator_struct. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm + // to communicate Responder driven data to prim_axi_read_if_driver_bfm. + // This struct is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_RESPONDER_STRUCT + prim_axi_read_if_responder_s prim_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a prim_axi_read_if_responder_s + // structure. The function returns the handle to the prim_axi_read_if_responder_struct. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_arready:0x%x prim_rdata:0x%x prim_rresp:0x%x prim_rid:0x%x prim_rlast:0x%x prim_rvalid:0x%x ",prim_arready,prim_rdata,prim_rresp,prim_rid,prim_rlast,prim_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_arready == RHS.prim_arready) + &&(this.prim_rdata == RHS.prim_rdata) + &&(this.prim_rresp == RHS.prim_rresp) + &&(this.prim_rid == RHS.prim_rid) + &&(this.prim_rlast == RHS.prim_rlast) + &&(this.prim_rvalid == RHS.prim_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_arready = RHS.prim_arready; + this.prim_rdata = RHS.prim_rdata; + this.prim_rresp = RHS.prim_rresp; + this.prim_rid = RHS.prim_rid; + this.prim_rlast = RHS.prim_rlast; + this.prim_rvalid = RHS.prim_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"prim_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_arready,"prim_arready"); + $add_attribute(transaction_view_h,prim_rdata,"prim_rdata"); + $add_attribute(transaction_view_h,prim_rresp,"prim_rresp"); + $add_attribute(transaction_view_h,prim_rid,"prim_rid"); + $add_attribute(transaction_view_h,prim_rlast,"prim_rlast"); + $add_attribute(transaction_view_h,prim_rvalid,"prim_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..e31162373 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records prim_axi_read_if transaction information using +// a covergroup named prim_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup prim_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_arready: coverpoint coverage_trans.prim_arready; + prim_rdata: coverpoint coverage_trans.prim_rdata; + prim_rresp: coverpoint coverage_trans.prim_rresp; + prim_rid: coverpoint coverage_trans.prim_rid; + prim_rlast: coverpoint coverage_trans.prim_rlast; + prim_rvalid: coverpoint coverage_trans.prim_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + prim_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + prim_axi_read_if_transaction_cg.set_inst_name($sformatf("prim_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + prim_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/yaml/prim_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/yaml/prim_axi_read_if_interface.yaml new file mode 100644 index 000000000..e8716f4a1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_if_pkg/yaml/prim_axi_read_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + prim_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.project new file mode 100644 index 000000000..585c5e823 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + prim_axi_read_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.svproject new file mode 100644 index 000000000..ddf3caeab --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/Makefile new file mode 100644 index 000000000..f228130ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# prim_axi_read_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +prim_axi_read_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hvl.f + +prim_axi_read_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hdl.f + +prim_axi_read_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_xrtl.f + +COMP_prim_axi_read_out_if_PKG_TGT_0 = q_comp_prim_axi_read_out_if_pkg +COMP_prim_axi_read_out_if_PKG_TGT_1 = v_comp_prim_axi_read_out_if_pkg +COMP_prim_axi_read_out_if_PKG_TGT = $(COMP_prim_axi_read_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_prim_axi_read_out_if_pkg: $(COMP_prim_axi_read_out_if_PKG_TGT) + +q_comp_prim_axi_read_out_if_pkg: + $(HDL_COMP_CMD) $(prim_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_read_out_if_PKG_XRTL) + +v_comp_prim_axi_read_out_if_pkg: + $(HVL_COMP_CMD) $(prim_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_read_out_if_PKG) + $(VELANALYZE_CMD) $(prim_axi_read_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(prim_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_read_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export prim_axi_read_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_prim_axi_read_out_if_pkg = \ + +O_FILE_COMPILE_LIST_prim_axi_read_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_prim_axi_read_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_prim_axi_read_out_if_pkg += -I$(prim_axi_read_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_prim_axi_read_out_if_pkg += $(prim_axi_read_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_prim_axi_read_out_if_pkg += \ + \ + -o .so + +comp_prim_axi_read_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_prim_axi_read_out_if_pkg) $(C_FILE_COMPILE_LIST_prim_axi_read_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_prim_axi_read_out_if_pkg) $(O_FILE_COMPILE_LIST_prim_axi_read_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/compile.do new file mode 100644 index 000000000..a3a345d11 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of prim_axi_read_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if.compile new file mode 100644 index 000000000..4670ed42f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if.compile @@ -0,0 +1,3 @@ +needs: + - prim_axi_read_out_if_hvl.compile + - prim_axi_read_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_bfm.vinfo new file mode 100644 index 000000000..d5f56b7f4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use prim_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/prim_axi_read_out_if_if.sv +src/prim_axi_read_out_if_driver_bfm.sv +src/prim_axi_read_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_common.compile new file mode 100644 index 000000000..7e04b5d77 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - prim_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hdl.f new file mode 100644 index 000000000..ac4c979b1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hvl.f new file mode 100644 index 000000000..601a2a9a6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_xrtl.f new file mode 100644 index 000000000..f129101a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hdl.compile new file mode 100644 index 000000000..5b8611c73 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./prim_axi_read_out_if_common.compile +incdir: + - . +src: + - src/prim_axi_read_out_if_if.sv + - src/prim_axi_read_out_if_monitor_bfm.sv + - src/prim_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hvl.compile new file mode 100644 index 000000000..8e542050f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./prim_axi_read_out_if_common.compile +incdir: + - . +src: + - prim_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.sv new file mode 100644 index 000000000..a2a9a1e31 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_read_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import prim_axi_read_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/prim_axi_read_out_if_macros.svh" + + export prim_axi_read_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/prim_axi_read_out_if_typedefs.svh" + `include "src/prim_axi_read_out_if_transaction.svh" + + `include "src/prim_axi_read_out_if_configuration.svh" + `include "src/prim_axi_read_out_if_driver.svh" + `include "src/prim_axi_read_out_if_monitor.svh" + + `include "src/prim_axi_read_out_if_transaction_coverage.svh" + `include "src/prim_axi_read_out_if_sequence_base.svh" + `include "src/prim_axi_read_out_if_random_sequence.svh" + + `include "src/prim_axi_read_out_if_responder_sequence.svh" + `include "src/prim_axi_read_out_if2reg_adapter.svh" + + `include "src/prim_axi_read_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.vinfo new file mode 100644 index 000000000..aa65183de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use prim_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +prim_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.sv new file mode 100644 index 000000000..5c650077e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_read_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/prim_axi_read_out_if_typedefs_hdl.svh" + `include "src/prim_axi_read_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..368a69419 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +prim_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_sve.F new file mode 100644 index 000000000..8c95c1e2d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if2reg_adapter.svh new file mode 100644 index 000000000..721a65049 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the prim_axi_read_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( prim_axi_read_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "prim_axi_read_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : prim_axi_read_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_agent.svh new file mode 100644 index 000000000..7c2483b3a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(prim_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(prim_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(prim_axi_read_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( prim_axi_read_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_configuration.svh new file mode 100644 index 000000000..26028d38f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the prim_axi_read_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual prim_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual prim_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_read_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup prim_axi_read_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_CONFIGURATION_STRUCT + prim_axi_read_out_if_configuration_s prim_axi_read_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a prim_axi_read_out_if_configuration_s + // structure. The function returns the handle to the prim_axi_read_out_if_configuration_struct. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + prim_axi_read_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + prim_axi_read_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + prim_axi_read_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + prim_axi_read_out_if_configuration_cg.set_inst_name($sformatf("prim_axi_read_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(prim_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver.svh new file mode 100644 index 000000000..495604d11 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual prim_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( prim_axi_read_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in prim_axi_read_out_if_macros.svh +//******************************************************************* +// Initiator macro used by prim_axi_read_out_if_driver and prim_axi_read_out_if_driver_bfm +// to communicate initiator driven data to prim_axi_read_out_if_driver_bfm. +`prim_axi_read_out_if_INITIATOR_STRUCT + prim_axi_read_out_if_initiator_s prim_axi_read_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by prim_axi_read_out_if_driver and prim_axi_read_out_if_driver_bfm +// to communicate Responder driven data to prim_axi_read_out_if_driver_bfm. +`prim_axi_read_out_if_RESPONDER_STRUCT + prim_axi_read_out_if_responder_s prim_axi_read_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + prim_axi_read_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(prim_axi_read_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + prim_axi_read_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(prim_axi_read_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver_bfm.sv new file mode 100644 index 000000000..d7dd2549e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the prim_axi_read_out_if signal driving. It is +// accessed by the uvm prim_axi_read_out_if driver through a virtual interface +// handle in the prim_axi_read_out_if configuration. It drives the singals passed +// in through the port connection named bus of type prim_axi_read_out_if_if. +// +// Input signals from the prim_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within prim_axi_read_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_read_out_if_pkg_hdl::*; +`include "src/prim_axi_read_out_if_macros.svh" + +interface prim_axi_read_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (prim_axi_read_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute prim_axi_read_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + prim_axi_read_out_if_pkg::prim_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in prim_axi_read_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from prim_axi_read_out_if_driver to this BFM + // **************************************************************************** + `prim_axi_read_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by prim_axi_read_out_if_driver and prim_axi_read_out_if_driver_bfm + // to communicate initiator driven data to prim_axi_read_out_if_driver_bfm. + `prim_axi_read_out_if_INITIATOR_STRUCT + prim_axi_read_out_if_initiator_s initiator_struct; + // Responder macro used by prim_axi_read_out_if_driver and prim_axi_read_out_if_driver_bfm + // to communicate Responder driven data to prim_axi_read_out_if_driver_bfm. + `prim_axi_read_out_if_RESPONDER_STRUCT + prim_axi_read_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(prim_axi_read_out_if_configuration_s prim_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input prim_axi_read_out_if_initiator_s prim_axi_read_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output prim_axi_read_out_if_responder_s prim_axi_read_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the prim_axi_read_out_if_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Members within the prim_axi_read_out_if_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + initiator_struct = prim_axi_read_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // prim_axi_read_out_if_responder_struct.xyz = arready_i; // + // prim_axi_read_out_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // prim_axi_read_out_if_responder_struct.xyz = rresp_i; // + // prim_axi_read_out_if_responder_struct.xyz = rid_i; // + // prim_axi_read_out_if_responder_struct.xyz = rlast_i; // + // prim_axi_read_out_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // prim_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = prim_axi_read_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output prim_axi_read_out_if_initiator_s prim_axi_read_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input prim_axi_read_out_if_responder_s prim_axi_read_out_if_responder_struct + );// pragma tbx xtf + // Variables within the prim_axi_read_out_if_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Variables within the prim_axi_read_out_if_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= prim_axi_read_out_if_initiator_struct.xyz; // + // rdata_o <= prim_axi_read_out_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= prim_axi_read_out_if_initiator_struct.xyz; // + // rid_o <= prim_axi_read_out_if_initiator_struct.xyz; // + // rlast_o <= prim_axi_read_out_if_initiator_struct.xyz; // + // rvalid_o <= prim_axi_read_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the prim_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the prim_axi_read_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_if.sv new file mode 100644 index 000000000..c73529236 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the prim_axi_read_out_if interface signals. +// It is instantiated once per prim_axi_read_out_if bus. Bus Functional Models, +// BFM's named prim_axi_read_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named prim_axi_read_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(prim_axi_read_out_if_bus.arready), // Agent input +// .dut_signal_port(prim_axi_read_out_if_bus.rdata), // Agent input +// .dut_signal_port(prim_axi_read_out_if_bus.rresp), // Agent input +// .dut_signal_port(prim_axi_read_out_if_bus.rid), // Agent input +// .dut_signal_port(prim_axi_read_out_if_bus.rlast), // Agent input +// .dut_signal_port(prim_axi_read_out_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import prim_axi_read_out_if_pkg_hdl::*; + +interface prim_axi_read_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_macros.svh new file mode 100644 index 000000000..902824de8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the prim_axi_read_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the prim_axi_read_out_if_configuration class. +// + `define prim_axi_read_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } prim_axi_read_out_if_configuration_s; + + `define prim_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function prim_axi_read_out_if_configuration_s to_struct();\ + prim_axi_read_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( prim_axi_read_out_if_configuration_struct );\ + endfunction + + `define prim_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(prim_axi_read_out_if_configuration_s prim_axi_read_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = prim_axi_read_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the prim_axi_read_out_if_transaction class. +// + `define prim_axi_read_out_if_MONITOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } prim_axi_read_out_if_monitor_s; + + `define prim_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function prim_axi_read_out_if_monitor_s to_monitor_struct();\ + prim_axi_read_out_if_monitor_struct = \ + { \ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( prim_axi_read_out_if_monitor_struct);\ + endfunction\ + + `define prim_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(prim_axi_read_out_if_monitor_s prim_axi_read_out_if_monitor_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = prim_axi_read_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the prim_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_read_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } prim_axi_read_out_if_initiator_s; + + `define prim_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function prim_axi_read_out_if_initiator_s to_initiator_struct();\ + prim_axi_read_out_if_initiator_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( prim_axi_read_out_if_initiator_struct);\ + endfunction + + `define prim_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(prim_axi_read_out_if_initiator_s prim_axi_read_out_if_initiator_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = prim_axi_read_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the prim_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_read_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } prim_axi_read_out_if_responder_s; + + `define prim_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function prim_axi_read_out_if_responder_s to_responder_struct();\ + prim_axi_read_out_if_responder_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( prim_axi_read_out_if_responder_struct);\ + endfunction + + `define prim_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(prim_axi_read_out_if_responder_s prim_axi_read_out_if_responder_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = prim_axi_read_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor.svh new file mode 100644 index 000000000..523177215 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives prim_axi_read_out_if transactions observed by the +// prim_axi_read_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual prim_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_read_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`prim_axi_read_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the prim_axi_read_out_if_monitor_struct. + virtual function void notify_transaction(input prim_axi_read_out_if_monitor_s prim_axi_read_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(prim_axi_read_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor_bfm.sv new file mode 100644 index 000000000..7e5d3651d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the prim_axi_read_out_if signal monitoring. +// It is accessed by the uvm prim_axi_read_out_if monitor through a virtual +// interface handle in the prim_axi_read_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type prim_axi_read_out_if_if. +// +// Input signals from the prim_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the prim_axi_read_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_read_out_if_pkg_hdl::*; +`include "src/prim_axi_read_out_if_macros.svh" + + +interface prim_axi_read_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( prim_axi_read_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute prim_axi_read_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`prim_axi_read_out_if_MONITOR_STRUCT + prim_axi_read_out_if_monitor_s prim_axi_read_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `prim_axi_read_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + prim_axi_read_out_if_pkg::prim_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( prim_axi_read_out_if_monitor_struct ); + + + proxy.notify_transaction( prim_axi_read_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(prim_axi_read_out_if_configuration_s prim_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output prim_axi_read_out_if_monitor_s prim_axi_read_out_if_monitor_struct); + // + // Available struct members: + // // prim_axi_read_out_if_monitor_struct.prim_arready + // // prim_axi_read_out_if_monitor_struct.prim_rdata + // // prim_axi_read_out_if_monitor_struct.prim_rresp + // // prim_axi_read_out_if_monitor_struct.prim_rid + // // prim_axi_read_out_if_monitor_struct.prim_rlast + // // prim_axi_read_out_if_monitor_struct.prim_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // prim_axi_read_out_if_monitor_struct.xyz = arready_i; // + // prim_axi_read_out_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // prim_axi_read_out_if_monitor_struct.xyz = rresp_i; // + // prim_axi_read_out_if_monitor_struct.xyz = rid_i; // + // prim_axi_read_out_if_monitor_struct.xyz = rlast_i; // + // prim_axi_read_out_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_random_sequence.svh new file mode 100644 index 000000000..9f624f7a3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the prim_axi_read_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a prim_axi_read_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_read_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=prim_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "prim_axi_read_out_if_random_sequence::body()-prim_axi_read_out_if_transaction randomization failed") + // Send the transaction to the prim_axi_read_out_if_driver_bfm via the sequencer and prim_axi_read_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: prim_axi_read_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_responder_sequence.svh new file mode 100644 index 000000000..ecfaf2543 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_read_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "prim_axi_read_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=prim_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_sequence_base.svh new file mode 100644 index 000000000..8d4377f4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_read_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_read_out_if_transaction_req_t; + prim_axi_read_out_if_transaction_req_t req; + typedef prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_read_out_if_transaction_rsp_t; + prim_axi_read_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = prim_axi_read_out_if_transaction_req_t::type_id::create("req"); + rsp = prim_axi_read_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction.svh new file mode 100644 index 000000000..972915ab7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an prim_axi_read_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( prim_axi_read_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_arready ; + logic [DW-1:0] prim_rdata ; + axi_pkg::axi_burst_e prim_rresp ; + logic [IW-1:0] prim_rid ; + logic prim_rlast ; + logic prim_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in prim_axi_read_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by prim_axi_read_out_if_monitor and prim_axi_read_out_if_monitor_bfm + // This struct is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_MONITOR_STRUCT + prim_axi_read_out_if_monitor_s prim_axi_read_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a prim_axi_read_out_if_monitor_s + // structure. The function returns the handle to the prim_axi_read_out_if_monitor_struct. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by prim_axi_read_out_if_driver and prim_axi_read_out_if_driver_bfm + // to communicate initiator driven data to prim_axi_read_out_if_driver_bfm. + // This struct is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_INITIATOR_STRUCT + prim_axi_read_out_if_initiator_s prim_axi_read_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a prim_axi_read_out_if_initiator_s + // structure. The function returns the handle to the prim_axi_read_out_if_initiator_struct. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by prim_axi_read_out_if_driver and prim_axi_read_out_if_driver_bfm + // to communicate Responder driven data to prim_axi_read_out_if_driver_bfm. + // This struct is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_RESPONDER_STRUCT + prim_axi_read_out_if_responder_s prim_axi_read_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a prim_axi_read_out_if_responder_s + // structure. The function returns the handle to the prim_axi_read_out_if_responder_struct. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_arready:0x%x prim_rdata:0x%x prim_rresp:0x%x prim_rid:0x%x prim_rlast:0x%x prim_rvalid:0x%x ",prim_arready,prim_rdata,prim_rresp,prim_rid,prim_rlast,prim_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_arready == RHS.prim_arready) + &&(this.prim_rdata == RHS.prim_rdata) + &&(this.prim_rresp == RHS.prim_rresp) + &&(this.prim_rid == RHS.prim_rid) + &&(this.prim_rlast == RHS.prim_rlast) + &&(this.prim_rvalid == RHS.prim_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_arready = RHS.prim_arready; + this.prim_rdata = RHS.prim_rdata; + this.prim_rresp = RHS.prim_rresp; + this.prim_rid = RHS.prim_rid; + this.prim_rlast = RHS.prim_rlast; + this.prim_rvalid = RHS.prim_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"prim_axi_read_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_arready,"prim_arready"); + $add_attribute(transaction_view_h,prim_rdata,"prim_rdata"); + $add_attribute(transaction_view_h,prim_rresp,"prim_rresp"); + $add_attribute(transaction_view_h,prim_rid,"prim_rid"); + $add_attribute(transaction_view_h,prim_rlast,"prim_rlast"); + $add_attribute(transaction_view_h,prim_rvalid,"prim_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction_coverage.svh new file mode 100644 index 000000000..cf69fb8ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records prim_axi_read_out_if transaction information using +// a covergroup named prim_axi_read_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_read_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup prim_axi_read_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_arready: coverpoint coverage_trans.prim_arready; + prim_rdata: coverpoint coverage_trans.prim_rdata; + prim_rresp: coverpoint coverage_trans.prim_rresp; + prim_rid: coverpoint coverage_trans.prim_rid; + prim_rlast: coverpoint coverage_trans.prim_rlast; + prim_rvalid: coverpoint coverage_trans.prim_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + prim_axi_read_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + prim_axi_read_out_if_transaction_cg.set_inst_name($sformatf("prim_axi_read_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + prim_axi_read_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/yaml/prim_axi_read_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/yaml/prim_axi_read_out_if_interface.yaml new file mode 100644 index 000000000..5c3006321 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_read_out_if_pkg/yaml/prim_axi_read_out_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + prim_axi_read_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/.project new file mode 100644 index 000000000..97cc8aeb8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/.project @@ -0,0 +1,30 @@ + + + prim_axi_write_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/.svproject new file mode 100644 index 000000000..79b1f983b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/Makefile new file mode 100644 index 000000000..623a7daa4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/Makefile @@ -0,0 +1,66 @@ +# prim_axi_write_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +prim_axi_write_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f + +prim_axi_write_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f + +prim_axi_write_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f + +COMP_prim_axi_write_if_PKG_TGT_0 = q_comp_prim_axi_write_if_pkg +COMP_prim_axi_write_if_PKG_TGT_1 = v_comp_prim_axi_write_if_pkg +COMP_prim_axi_write_if_PKG_TGT = $(COMP_prim_axi_write_if_PKG_TGT_$(USE_VELOCE)) + +comp_prim_axi_write_if_pkg: $(COMP_prim_axi_write_if_PKG_TGT) + +q_comp_prim_axi_write_if_pkg: + $(HDL_COMP_CMD) $(prim_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_write_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_write_if_PKG_XRTL) + +v_comp_prim_axi_write_if_pkg: + $(HVL_COMP_CMD) $(prim_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_write_if_PKG) + $(VELANALYZE_CMD) $(prim_axi_write_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(prim_axi_write_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_write_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export prim_axi_write_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/dpi + +C_FILE_COMPILE_LIST_prim_axi_write_if_pkg = \ + +O_FILE_COMPILE_LIST_prim_axi_write_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_prim_axi_write_if_pkg:.c=.o)) + +GCC_COMP_ARGS_prim_axi_write_if_pkg += -I$(prim_axi_write_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_prim_axi_write_if_pkg += $(prim_axi_write_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_prim_axi_write_if_pkg += \ + \ + -o .so + +comp_prim_axi_write_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_prim_axi_write_if_pkg) $(C_FILE_COMPILE_LIST_prim_axi_write_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_prim_axi_write_if_pkg) $(O_FILE_COMPILE_LIST_prim_axi_write_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/compile.do new file mode 100644 index 000000000..677a4a098 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of prim_axi_write_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if.compile new file mode 100644 index 000000000..bd0dc7378 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if.compile @@ -0,0 +1,3 @@ +needs: + - prim_axi_write_if_hvl.compile + - prim_axi_write_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_bfm.vinfo new file mode 100644 index 000000000..aaa26f79c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use prim_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/prim_axi_write_if_if.sv +src/prim_axi_write_if_driver_bfm.sv +src/prim_axi_write_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_common.compile new file mode 100644 index 000000000..f496fac10 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f new file mode 100644 index 000000000..efc271244 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f new file mode 100644 index 000000000..711212b62 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f new file mode 100644 index 000000000..9dc37651b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hdl.compile new file mode 100644 index 000000000..547090a3d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./prim_axi_write_if_common.compile +incdir: + - . +src: + - src/prim_axi_write_if_if.sv + - src/prim_axi_write_if_monitor_bfm.sv + - src/prim_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hvl.compile new file mode 100644 index 000000000..07cd15926 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./prim_axi_write_if_common.compile +incdir: + - . +src: + - prim_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.sv new file mode 100644 index 000000000..78143d109 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_write_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import prim_axi_write_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/prim_axi_write_if_macros.svh" + + export prim_axi_write_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/prim_axi_write_if_typedefs.svh" + `include "src/prim_axi_write_if_transaction.svh" + + `include "src/prim_axi_write_if_configuration.svh" + `include "src/prim_axi_write_if_driver.svh" + `include "src/prim_axi_write_if_monitor.svh" + + `include "src/prim_axi_write_if_transaction_coverage.svh" + `include "src/prim_axi_write_if_sequence_base.svh" + `include "src/prim_axi_write_if_random_sequence.svh" + + `include "src/prim_axi_write_if_responder_sequence.svh" + `include "src/prim_axi_write_if2reg_adapter.svh" + + `include "src/prim_axi_write_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.vinfo new file mode 100644 index 000000000..da70e9f95 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use prim_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +prim_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.sv new file mode 100644 index 000000000..dbe4a2871 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_write_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/prim_axi_write_if_typedefs_hdl.svh" + `include "src/prim_axi_write_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.vinfo new file mode 100644 index 000000000..8eb50779a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_sve.F new file mode 100644 index 000000000..2232ac433 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if2reg_adapter.svh new file mode 100644 index 000000000..1aad1f2c1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the prim_axi_write_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( prim_axi_write_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "prim_axi_write_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : prim_axi_write_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_agent.svh new file mode 100644 index 000000000..db46f4fe1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(prim_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(prim_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(prim_axi_write_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( prim_axi_write_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_configuration.svh new file mode 100644 index 000000000..114b7e0ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the prim_axi_write_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual prim_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual prim_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_write_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup prim_axi_write_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_CONFIGURATION_STRUCT + prim_axi_write_if_configuration_s prim_axi_write_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a prim_axi_write_if_configuration_s + // structure. The function returns the handle to the prim_axi_write_if_configuration_struct. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + prim_axi_write_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + prim_axi_write_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + prim_axi_write_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + prim_axi_write_if_configuration_cg.set_inst_name($sformatf("prim_axi_write_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver.svh new file mode 100644 index 000000000..f1028f48a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual prim_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( prim_axi_write_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in prim_axi_write_if_macros.svh +//******************************************************************* +// Initiator macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm +// to communicate initiator driven data to prim_axi_write_if_driver_bfm. +`prim_axi_write_if_INITIATOR_STRUCT + prim_axi_write_if_initiator_s prim_axi_write_if_initiator_struct; +//******************************************************************* +// Responder macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm +// to communicate Responder driven data to prim_axi_write_if_driver_bfm. +`prim_axi_write_if_RESPONDER_STRUCT + prim_axi_write_if_responder_s prim_axi_write_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + prim_axi_write_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(prim_axi_write_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + prim_axi_write_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(prim_axi_write_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver_bfm.sv new file mode 100644 index 000000000..62c377ccd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the prim_axi_write_if signal driving. It is +// accessed by the uvm prim_axi_write_if driver through a virtual interface +// handle in the prim_axi_write_if configuration. It drives the singals passed +// in through the port connection named bus of type prim_axi_write_if_if. +// +// Input signals from the prim_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within prim_axi_write_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_write_if_pkg_hdl::*; +`include "src/prim_axi_write_if_macros.svh" + +interface prim_axi_write_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (prim_axi_write_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute prim_axi_write_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + prim_axi_write_if_pkg::prim_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in prim_axi_write_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from prim_axi_write_if_driver to this BFM + // **************************************************************************** + `prim_axi_write_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm + // to communicate initiator driven data to prim_axi_write_if_driver_bfm. + `prim_axi_write_if_INITIATOR_STRUCT + prim_axi_write_if_initiator_s initiator_struct; + // Responder macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm + // to communicate Responder driven data to prim_axi_write_if_driver_bfm. + `prim_axi_write_if_RESPONDER_STRUCT + prim_axi_write_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(prim_axi_write_if_configuration_s prim_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input prim_axi_write_if_initiator_s prim_axi_write_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output prim_axi_write_if_responder_s prim_axi_write_if_responder_struct + );// pragma tbx xtf + // + // Members within the prim_axi_write_if_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Members within the prim_axi_write_if_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + initiator_struct = prim_axi_write_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // prim_axi_write_if_responder_struct.xyz = awready_i; // + // prim_axi_write_if_responder_struct.xyz = wready_i; // + // prim_axi_write_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // prim_axi_write_if_responder_struct.xyz = bid_i; // + // prim_axi_write_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // prim_axi_write_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = prim_axi_write_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output prim_axi_write_if_initiator_s prim_axi_write_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input prim_axi_write_if_responder_s prim_axi_write_if_responder_struct + );// pragma tbx xtf + // Variables within the prim_axi_write_if_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Variables within the prim_axi_write_if_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= prim_axi_write_if_initiator_struct.xyz; // + // wready_o <= prim_axi_write_if_initiator_struct.xyz; // + // bresp_o <= prim_axi_write_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= prim_axi_write_if_initiator_struct.xyz; // + // bvalid_o <= prim_axi_write_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the prim_axi_write_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the prim_axi_write_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_if.sv new file mode 100644 index 000000000..de556ace4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the prim_axi_write_if interface signals. +// It is instantiated once per prim_axi_write_if bus. Bus Functional Models, +// BFM's named prim_axi_write_if_driver_bfm, are used to drive signals on the bus. +// BFM's named prim_axi_write_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(prim_axi_write_if_bus.awready), // Agent input +// .dut_signal_port(prim_axi_write_if_bus.wready), // Agent input +// .dut_signal_port(prim_axi_write_if_bus.bresp), // Agent input +// .dut_signal_port(prim_axi_write_if_bus.bid), // Agent input +// .dut_signal_port(prim_axi_write_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import prim_axi_write_if_pkg_hdl::*; + +interface prim_axi_write_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_macros.svh new file mode 100644 index 000000000..95c6a8bf7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the prim_axi_write_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the prim_axi_write_if_configuration class. +// + `define prim_axi_write_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } prim_axi_write_if_configuration_s; + + `define prim_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function prim_axi_write_if_configuration_s to_struct();\ + prim_axi_write_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( prim_axi_write_if_configuration_struct );\ + endfunction + + `define prim_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(prim_axi_write_if_configuration_s prim_axi_write_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = prim_axi_write_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the prim_axi_write_if_transaction class. +// + `define prim_axi_write_if_MONITOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } prim_axi_write_if_monitor_s; + + `define prim_axi_write_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function prim_axi_write_if_monitor_s to_monitor_struct();\ + prim_axi_write_if_monitor_struct = \ + { \ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( prim_axi_write_if_monitor_struct);\ + endfunction\ + + `define prim_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(prim_axi_write_if_monitor_s prim_axi_write_if_monitor_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = prim_axi_write_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the prim_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_write_if_INITIATOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } prim_axi_write_if_initiator_s; + + `define prim_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function prim_axi_write_if_initiator_s to_initiator_struct();\ + prim_axi_write_if_initiator_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( prim_axi_write_if_initiator_struct);\ + endfunction + + `define prim_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(prim_axi_write_if_initiator_s prim_axi_write_if_initiator_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = prim_axi_write_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the prim_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_write_if_RESPONDER_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } prim_axi_write_if_responder_s; + + `define prim_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function prim_axi_write_if_responder_s to_responder_struct();\ + prim_axi_write_if_responder_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( prim_axi_write_if_responder_struct);\ + endfunction + + `define prim_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(prim_axi_write_if_responder_s prim_axi_write_if_responder_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = prim_axi_write_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor.svh new file mode 100644 index 000000000..67050c334 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives prim_axi_write_if transactions observed by the +// prim_axi_write_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual prim_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_write_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`prim_axi_write_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the prim_axi_write_if_monitor_struct. + virtual function void notify_transaction(input prim_axi_write_if_monitor_s prim_axi_write_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(prim_axi_write_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor_bfm.sv new file mode 100644 index 000000000..7719d6325 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the prim_axi_write_if signal monitoring. +// It is accessed by the uvm prim_axi_write_if monitor through a virtual +// interface handle in the prim_axi_write_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type prim_axi_write_if_if. +// +// Input signals from the prim_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the prim_axi_write_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_write_if_pkg_hdl::*; +`include "src/prim_axi_write_if_macros.svh" + + +interface prim_axi_write_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( prim_axi_write_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute prim_axi_write_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`prim_axi_write_if_MONITOR_STRUCT + prim_axi_write_if_monitor_s prim_axi_write_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `prim_axi_write_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + prim_axi_write_if_pkg::prim_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( prim_axi_write_if_monitor_struct ); + + + proxy.notify_transaction( prim_axi_write_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(prim_axi_write_if_configuration_s prim_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output prim_axi_write_if_monitor_s prim_axi_write_if_monitor_struct); + // + // Available struct members: + // // prim_axi_write_if_monitor_struct.prim_awready + // // prim_axi_write_if_monitor_struct.prim_wready + // // prim_axi_write_if_monitor_struct.prim_bresp + // // prim_axi_write_if_monitor_struct.prim_bid + // // prim_axi_write_if_monitor_struct.prim_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // prim_axi_write_if_monitor_struct.xyz = awready_i; // + // prim_axi_write_if_monitor_struct.xyz = wready_i; // + // prim_axi_write_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // prim_axi_write_if_monitor_struct.xyz = bid_i; // + // prim_axi_write_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_random_sequence.svh new file mode 100644 index 000000000..12e4f9c83 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the prim_axi_write_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a prim_axi_write_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_write_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "prim_axi_write_if_random_sequence::body()-prim_axi_write_if_transaction randomization failed") + // Send the transaction to the prim_axi_write_if_driver_bfm via the sequencer and prim_axi_write_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: prim_axi_write_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_responder_sequence.svh new file mode 100644 index 000000000..eec3703ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_write_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "prim_axi_write_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_sequence_base.svh new file mode 100644 index 000000000..a606d7b2b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_write_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_write_if_transaction_req_t; + prim_axi_write_if_transaction_req_t req; + typedef prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_write_if_transaction_rsp_t; + prim_axi_write_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = prim_axi_write_if_transaction_req_t::type_id::create("req"); + rsp = prim_axi_write_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction.svh new file mode 100644 index 000000000..7e1571969 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an prim_axi_write_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( prim_axi_write_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_awready ; + logic prim_wready ; + axi_pkg::axi_burst_e prim_bresp ; + logic prim_bid ; + logic prim_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in prim_axi_write_if_macros.svh + + //******************************************************************* + // Monitor macro used by prim_axi_write_if_monitor and prim_axi_write_if_monitor_bfm + // This struct is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_MONITOR_STRUCT + prim_axi_write_if_monitor_s prim_axi_write_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a prim_axi_write_if_monitor_s + // structure. The function returns the handle to the prim_axi_write_if_monitor_struct. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm + // to communicate initiator driven data to prim_axi_write_if_driver_bfm. + // This struct is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_INITIATOR_STRUCT + prim_axi_write_if_initiator_s prim_axi_write_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a prim_axi_write_if_initiator_s + // structure. The function returns the handle to the prim_axi_write_if_initiator_struct. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm + // to communicate Responder driven data to prim_axi_write_if_driver_bfm. + // This struct is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_RESPONDER_STRUCT + prim_axi_write_if_responder_s prim_axi_write_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a prim_axi_write_if_responder_s + // structure. The function returns the handle to the prim_axi_write_if_responder_struct. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awready:0x%x prim_wready:0x%x prim_bresp:0x%x prim_bid:0x%x prim_bvalid:0x%x ",prim_awready,prim_wready,prim_bresp,prim_bid,prim_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_awready == RHS.prim_awready) + &&(this.prim_wready == RHS.prim_wready) + &&(this.prim_bresp == RHS.prim_bresp) + &&(this.prim_bid == RHS.prim_bid) + &&(this.prim_bvalid == RHS.prim_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awready = RHS.prim_awready; + this.prim_wready = RHS.prim_wready; + this.prim_bresp = RHS.prim_bresp; + this.prim_bid = RHS.prim_bid; + this.prim_bvalid = RHS.prim_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"prim_axi_write_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awready,"prim_awready"); + $add_attribute(transaction_view_h,prim_wready,"prim_wready"); + $add_attribute(transaction_view_h,prim_bresp,"prim_bresp"); + $add_attribute(transaction_view_h,prim_bid,"prim_bid"); + $add_attribute(transaction_view_h,prim_bvalid,"prim_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction_coverage.svh new file mode 100644 index 000000000..6f9d9804b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records prim_axi_write_if transaction information using +// a covergroup named prim_axi_write_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_write_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup prim_axi_write_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awready: coverpoint coverage_trans.prim_awready; + prim_wready: coverpoint coverage_trans.prim_wready; + prim_bresp: coverpoint coverage_trans.prim_bresp; + prim_bid: coverpoint coverage_trans.prim_bid; + prim_bvalid: coverpoint coverage_trans.prim_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + prim_axi_write_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + prim_axi_write_if_transaction_cg.set_inst_name($sformatf("prim_axi_write_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + prim_axi_write_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/yaml/prim_axi_write_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/yaml/prim_axi_write_if_interface.yaml new file mode 100644 index 000000000..e5bd3c347 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_if_pkg/yaml/prim_axi_write_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + prim_axi_write_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.project new file mode 100644 index 000000000..c176cd178 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + prim_axi_write_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.svproject new file mode 100644 index 000000000..0999e5cba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/Makefile new file mode 100644 index 000000000..2ecf149e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# prim_axi_write_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +prim_axi_write_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hvl.f + +prim_axi_write_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hdl.f + +prim_axi_write_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_xrtl.f + +COMP_prim_axi_write_out_if_PKG_TGT_0 = q_comp_prim_axi_write_out_if_pkg +COMP_prim_axi_write_out_if_PKG_TGT_1 = v_comp_prim_axi_write_out_if_pkg +COMP_prim_axi_write_out_if_PKG_TGT = $(COMP_prim_axi_write_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_prim_axi_write_out_if_pkg: $(COMP_prim_axi_write_out_if_PKG_TGT) + +q_comp_prim_axi_write_out_if_pkg: + $(HDL_COMP_CMD) $(prim_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_write_out_if_PKG_XRTL) + +v_comp_prim_axi_write_out_if_pkg: + $(HVL_COMP_CMD) $(prim_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_write_out_if_PKG) + $(VELANALYZE_CMD) $(prim_axi_write_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(prim_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_write_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export prim_axi_write_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_prim_axi_write_out_if_pkg = \ + +O_FILE_COMPILE_LIST_prim_axi_write_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_prim_axi_write_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_prim_axi_write_out_if_pkg += -I$(prim_axi_write_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_prim_axi_write_out_if_pkg += $(prim_axi_write_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_prim_axi_write_out_if_pkg += \ + \ + -o .so + +comp_prim_axi_write_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_prim_axi_write_out_if_pkg) $(C_FILE_COMPILE_LIST_prim_axi_write_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_prim_axi_write_out_if_pkg) $(O_FILE_COMPILE_LIST_prim_axi_write_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/compile.do new file mode 100644 index 000000000..15879fa4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of prim_axi_write_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if.compile new file mode 100644 index 000000000..3bec6af69 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if.compile @@ -0,0 +1,3 @@ +needs: + - prim_axi_write_out_if_hvl.compile + - prim_axi_write_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_bfm.vinfo new file mode 100644 index 000000000..3260e601e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use prim_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/prim_axi_write_out_if_if.sv +src/prim_axi_write_out_if_driver_bfm.sv +src/prim_axi_write_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_common.compile new file mode 100644 index 000000000..18c7cd074 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - prim_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hdl.f new file mode 100644 index 000000000..fca35261c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hvl.f new file mode 100644 index 000000000..cc3120398 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_xrtl.f new file mode 100644 index 000000000..d880c05ab --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hdl.compile new file mode 100644 index 000000000..1e451c889 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./prim_axi_write_out_if_common.compile +incdir: + - . +src: + - src/prim_axi_write_out_if_if.sv + - src/prim_axi_write_out_if_monitor_bfm.sv + - src/prim_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hvl.compile new file mode 100644 index 000000000..7c4235dd0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./prim_axi_write_out_if_common.compile +incdir: + - . +src: + - prim_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.sv new file mode 100644 index 000000000..e9936a387 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_write_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import prim_axi_write_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/prim_axi_write_out_if_macros.svh" + + export prim_axi_write_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/prim_axi_write_out_if_typedefs.svh" + `include "src/prim_axi_write_out_if_transaction.svh" + + `include "src/prim_axi_write_out_if_configuration.svh" + `include "src/prim_axi_write_out_if_driver.svh" + `include "src/prim_axi_write_out_if_monitor.svh" + + `include "src/prim_axi_write_out_if_transaction_coverage.svh" + `include "src/prim_axi_write_out_if_sequence_base.svh" + `include "src/prim_axi_write_out_if_random_sequence.svh" + + `include "src/prim_axi_write_out_if_responder_sequence.svh" + `include "src/prim_axi_write_out_if2reg_adapter.svh" + + `include "src/prim_axi_write_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.vinfo new file mode 100644 index 000000000..202d1770d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use prim_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +prim_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.sv new file mode 100644 index 000000000..2956468f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_write_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/prim_axi_write_out_if_typedefs_hdl.svh" + `include "src/prim_axi_write_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..8528147da --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +prim_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_sve.F new file mode 100644 index 000000000..492fecffa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if2reg_adapter.svh new file mode 100644 index 000000000..3937222fe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the prim_axi_write_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( prim_axi_write_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "prim_axi_write_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : prim_axi_write_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_agent.svh new file mode 100644 index 000000000..2a241e356 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(prim_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(prim_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(prim_axi_write_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( prim_axi_write_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_configuration.svh new file mode 100644 index 000000000..7494ed5da --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the prim_axi_write_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual prim_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual prim_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_write_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup prim_axi_write_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_CONFIGURATION_STRUCT + prim_axi_write_out_if_configuration_s prim_axi_write_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a prim_axi_write_out_if_configuration_s + // structure. The function returns the handle to the prim_axi_write_out_if_configuration_struct. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + prim_axi_write_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + prim_axi_write_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + prim_axi_write_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + prim_axi_write_out_if_configuration_cg.set_inst_name($sformatf("prim_axi_write_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(prim_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver.svh new file mode 100644 index 000000000..15cac7080 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual prim_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( prim_axi_write_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in prim_axi_write_out_if_macros.svh +//******************************************************************* +// Initiator macro used by prim_axi_write_out_if_driver and prim_axi_write_out_if_driver_bfm +// to communicate initiator driven data to prim_axi_write_out_if_driver_bfm. +`prim_axi_write_out_if_INITIATOR_STRUCT + prim_axi_write_out_if_initiator_s prim_axi_write_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by prim_axi_write_out_if_driver and prim_axi_write_out_if_driver_bfm +// to communicate Responder driven data to prim_axi_write_out_if_driver_bfm. +`prim_axi_write_out_if_RESPONDER_STRUCT + prim_axi_write_out_if_responder_s prim_axi_write_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + prim_axi_write_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(prim_axi_write_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + prim_axi_write_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(prim_axi_write_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver_bfm.sv new file mode 100644 index 000000000..eaecaa7f0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the prim_axi_write_out_if signal driving. It is +// accessed by the uvm prim_axi_write_out_if driver through a virtual interface +// handle in the prim_axi_write_out_if configuration. It drives the singals passed +// in through the port connection named bus of type prim_axi_write_out_if_if. +// +// Input signals from the prim_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within prim_axi_write_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_write_out_if_pkg_hdl::*; +`include "src/prim_axi_write_out_if_macros.svh" + +interface prim_axi_write_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (prim_axi_write_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute prim_axi_write_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + prim_axi_write_out_if_pkg::prim_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in prim_axi_write_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from prim_axi_write_out_if_driver to this BFM + // **************************************************************************** + `prim_axi_write_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by prim_axi_write_out_if_driver and prim_axi_write_out_if_driver_bfm + // to communicate initiator driven data to prim_axi_write_out_if_driver_bfm. + `prim_axi_write_out_if_INITIATOR_STRUCT + prim_axi_write_out_if_initiator_s initiator_struct; + // Responder macro used by prim_axi_write_out_if_driver and prim_axi_write_out_if_driver_bfm + // to communicate Responder driven data to prim_axi_write_out_if_driver_bfm. + `prim_axi_write_out_if_RESPONDER_STRUCT + prim_axi_write_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(prim_axi_write_out_if_configuration_s prim_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input prim_axi_write_out_if_initiator_s prim_axi_write_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output prim_axi_write_out_if_responder_s prim_axi_write_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the prim_axi_write_out_if_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Members within the prim_axi_write_out_if_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + initiator_struct = prim_axi_write_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // prim_axi_write_out_if_responder_struct.xyz = awready_i; // + // prim_axi_write_out_if_responder_struct.xyz = wready_i; // + // prim_axi_write_out_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // prim_axi_write_out_if_responder_struct.xyz = bid_i; // + // prim_axi_write_out_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // prim_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = prim_axi_write_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output prim_axi_write_out_if_initiator_s prim_axi_write_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input prim_axi_write_out_if_responder_s prim_axi_write_out_if_responder_struct + );// pragma tbx xtf + // Variables within the prim_axi_write_out_if_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Variables within the prim_axi_write_out_if_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= prim_axi_write_out_if_initiator_struct.xyz; // + // wready_o <= prim_axi_write_out_if_initiator_struct.xyz; // + // bresp_o <= prim_axi_write_out_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= prim_axi_write_out_if_initiator_struct.xyz; // + // bvalid_o <= prim_axi_write_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the prim_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the prim_axi_write_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_if.sv new file mode 100644 index 000000000..ab746c836 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the prim_axi_write_out_if interface signals. +// It is instantiated once per prim_axi_write_out_if bus. Bus Functional Models, +// BFM's named prim_axi_write_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named prim_axi_write_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(prim_axi_write_out_if_bus.awready), // Agent input +// .dut_signal_port(prim_axi_write_out_if_bus.wready), // Agent input +// .dut_signal_port(prim_axi_write_out_if_bus.bresp), // Agent input +// .dut_signal_port(prim_axi_write_out_if_bus.bid), // Agent input +// .dut_signal_port(prim_axi_write_out_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import prim_axi_write_out_if_pkg_hdl::*; + +interface prim_axi_write_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_macros.svh new file mode 100644 index 000000000..f85b89591 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the prim_axi_write_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the prim_axi_write_out_if_configuration class. +// + `define prim_axi_write_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } prim_axi_write_out_if_configuration_s; + + `define prim_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function prim_axi_write_out_if_configuration_s to_struct();\ + prim_axi_write_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( prim_axi_write_out_if_configuration_struct );\ + endfunction + + `define prim_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(prim_axi_write_out_if_configuration_s prim_axi_write_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = prim_axi_write_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the prim_axi_write_out_if_transaction class. +// + `define prim_axi_write_out_if_MONITOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } prim_axi_write_out_if_monitor_s; + + `define prim_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function prim_axi_write_out_if_monitor_s to_monitor_struct();\ + prim_axi_write_out_if_monitor_struct = \ + { \ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( prim_axi_write_out_if_monitor_struct);\ + endfunction\ + + `define prim_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(prim_axi_write_out_if_monitor_s prim_axi_write_out_if_monitor_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = prim_axi_write_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the prim_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_write_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } prim_axi_write_out_if_initiator_s; + + `define prim_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function prim_axi_write_out_if_initiator_s to_initiator_struct();\ + prim_axi_write_out_if_initiator_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( prim_axi_write_out_if_initiator_struct);\ + endfunction + + `define prim_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(prim_axi_write_out_if_initiator_s prim_axi_write_out_if_initiator_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = prim_axi_write_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the prim_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_write_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } prim_axi_write_out_if_responder_s; + + `define prim_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function prim_axi_write_out_if_responder_s to_responder_struct();\ + prim_axi_write_out_if_responder_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( prim_axi_write_out_if_responder_struct);\ + endfunction + + `define prim_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(prim_axi_write_out_if_responder_s prim_axi_write_out_if_responder_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = prim_axi_write_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor.svh new file mode 100644 index 000000000..f387b3874 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives prim_axi_write_out_if transactions observed by the +// prim_axi_write_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual prim_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_write_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`prim_axi_write_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the prim_axi_write_out_if_monitor_struct. + virtual function void notify_transaction(input prim_axi_write_out_if_monitor_s prim_axi_write_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(prim_axi_write_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor_bfm.sv new file mode 100644 index 000000000..7bb9d30cd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the prim_axi_write_out_if signal monitoring. +// It is accessed by the uvm prim_axi_write_out_if monitor through a virtual +// interface handle in the prim_axi_write_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type prim_axi_write_out_if_if. +// +// Input signals from the prim_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the prim_axi_write_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_write_out_if_pkg_hdl::*; +`include "src/prim_axi_write_out_if_macros.svh" + + +interface prim_axi_write_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( prim_axi_write_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute prim_axi_write_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`prim_axi_write_out_if_MONITOR_STRUCT + prim_axi_write_out_if_monitor_s prim_axi_write_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `prim_axi_write_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + prim_axi_write_out_if_pkg::prim_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( prim_axi_write_out_if_monitor_struct ); + + + proxy.notify_transaction( prim_axi_write_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(prim_axi_write_out_if_configuration_s prim_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output prim_axi_write_out_if_monitor_s prim_axi_write_out_if_monitor_struct); + // + // Available struct members: + // // prim_axi_write_out_if_monitor_struct.prim_awready + // // prim_axi_write_out_if_monitor_struct.prim_wready + // // prim_axi_write_out_if_monitor_struct.prim_bresp + // // prim_axi_write_out_if_monitor_struct.prim_bid + // // prim_axi_write_out_if_monitor_struct.prim_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // prim_axi_write_out_if_monitor_struct.xyz = awready_i; // + // prim_axi_write_out_if_monitor_struct.xyz = wready_i; // + // prim_axi_write_out_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // prim_axi_write_out_if_monitor_struct.xyz = bid_i; // + // prim_axi_write_out_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_random_sequence.svh new file mode 100644 index 000000000..a08f27b67 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the prim_axi_write_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a prim_axi_write_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_write_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=prim_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "prim_axi_write_out_if_random_sequence::body()-prim_axi_write_out_if_transaction randomization failed") + // Send the transaction to the prim_axi_write_out_if_driver_bfm via the sequencer and prim_axi_write_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: prim_axi_write_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_responder_sequence.svh new file mode 100644 index 000000000..5fd14eb62 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_write_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "prim_axi_write_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=prim_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_sequence_base.svh new file mode 100644 index 000000000..c5e7917da --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_write_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_write_out_if_transaction_req_t; + prim_axi_write_out_if_transaction_req_t req; + typedef prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_write_out_if_transaction_rsp_t; + prim_axi_write_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = prim_axi_write_out_if_transaction_req_t::type_id::create("req"); + rsp = prim_axi_write_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction.svh new file mode 100644 index 000000000..aea5dc8a0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an prim_axi_write_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( prim_axi_write_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_awready ; + logic prim_wready ; + axi_pkg::axi_burst_e prim_bresp ; + logic prim_bid ; + logic prim_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in prim_axi_write_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by prim_axi_write_out_if_monitor and prim_axi_write_out_if_monitor_bfm + // This struct is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_MONITOR_STRUCT + prim_axi_write_out_if_monitor_s prim_axi_write_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a prim_axi_write_out_if_monitor_s + // structure. The function returns the handle to the prim_axi_write_out_if_monitor_struct. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by prim_axi_write_out_if_driver and prim_axi_write_out_if_driver_bfm + // to communicate initiator driven data to prim_axi_write_out_if_driver_bfm. + // This struct is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_INITIATOR_STRUCT + prim_axi_write_out_if_initiator_s prim_axi_write_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a prim_axi_write_out_if_initiator_s + // structure. The function returns the handle to the prim_axi_write_out_if_initiator_struct. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by prim_axi_write_out_if_driver and prim_axi_write_out_if_driver_bfm + // to communicate Responder driven data to prim_axi_write_out_if_driver_bfm. + // This struct is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_RESPONDER_STRUCT + prim_axi_write_out_if_responder_s prim_axi_write_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a prim_axi_write_out_if_responder_s + // structure. The function returns the handle to the prim_axi_write_out_if_responder_struct. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awready:0x%x prim_wready:0x%x prim_bresp:0x%x prim_bid:0x%x prim_bvalid:0x%x ",prim_awready,prim_wready,prim_bresp,prim_bid,prim_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_awready == RHS.prim_awready) + &&(this.prim_wready == RHS.prim_wready) + &&(this.prim_bresp == RHS.prim_bresp) + &&(this.prim_bid == RHS.prim_bid) + &&(this.prim_bvalid == RHS.prim_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awready = RHS.prim_awready; + this.prim_wready = RHS.prim_wready; + this.prim_bresp = RHS.prim_bresp; + this.prim_bid = RHS.prim_bid; + this.prim_bvalid = RHS.prim_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"prim_axi_write_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awready,"prim_awready"); + $add_attribute(transaction_view_h,prim_wready,"prim_wready"); + $add_attribute(transaction_view_h,prim_bresp,"prim_bresp"); + $add_attribute(transaction_view_h,prim_bid,"prim_bid"); + $add_attribute(transaction_view_h,prim_bvalid,"prim_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction_coverage.svh new file mode 100644 index 000000000..df6bc2e86 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records prim_axi_write_out_if transaction information using +// a covergroup named prim_axi_write_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_write_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup prim_axi_write_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awready: coverpoint coverage_trans.prim_awready; + prim_wready: coverpoint coverage_trans.prim_wready; + prim_bresp: coverpoint coverage_trans.prim_bresp; + prim_bid: coverpoint coverage_trans.prim_bid; + prim_bvalid: coverpoint coverage_trans.prim_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + prim_axi_write_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + prim_axi_write_out_if_transaction_cg.set_inst_name($sformatf("prim_axi_write_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + prim_axi_write_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/yaml/prim_axi_write_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/yaml/prim_axi_write_out_if_interface.yaml new file mode 100644 index 000000000..aa66e27a7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/prim_axi_write_out_if_pkg/yaml/prim_axi_write_out_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + prim_axi_write_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/.project new file mode 100644 index 000000000..2683cb016 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + secreg_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..72277d03c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..2d3ef8fcd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# secreg_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +secreg_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f + +secreg_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f + +secreg_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f + +COMP_secreg_axi_read_if_PKG_TGT_0 = q_comp_secreg_axi_read_if_pkg +COMP_secreg_axi_read_if_PKG_TGT_1 = v_comp_secreg_axi_read_if_pkg +COMP_secreg_axi_read_if_PKG_TGT = $(COMP_secreg_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_secreg_axi_read_if_pkg: $(COMP_secreg_axi_read_if_PKG_TGT) + +q_comp_secreg_axi_read_if_pkg: + $(HDL_COMP_CMD) $(secreg_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(secreg_axi_read_if_PKG) + $(HDL_COMP_CMD) $(secreg_axi_read_if_PKG_XRTL) + +v_comp_secreg_axi_read_if_pkg: + $(HVL_COMP_CMD) $(secreg_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(secreg_axi_read_if_PKG) + $(VELANALYZE_CMD) $(secreg_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(secreg_axi_read_if_PKG) + $(HDL_COMP_CMD) $(secreg_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export secreg_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_secreg_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_secreg_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_secreg_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_secreg_axi_read_if_pkg += -I$(secreg_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_secreg_axi_read_if_pkg += $(secreg_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_secreg_axi_read_if_pkg += \ + \ + -o .so + +comp_secreg_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_secreg_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_secreg_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_secreg_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_secreg_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..864496dd5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of secreg_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if.compile new file mode 100644 index 000000000..c7d9ea90d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - secreg_axi_read_if_hvl.compile + - secreg_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..557cbed12 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use secreg_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/secreg_axi_read_if_if.sv +src/secreg_axi_read_if_driver_bfm.sv +src/secreg_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_common.compile new file mode 100644 index 000000000..fbd65847f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..7f0ec9552 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..d8510e398 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..cb3095083 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hdl.compile new file mode 100644 index 000000000..d84364941 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./secreg_axi_read_if_common.compile +incdir: + - . +src: + - src/secreg_axi_read_if_if.sv + - src/secreg_axi_read_if_monitor_bfm.sv + - src/secreg_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hvl.compile new file mode 100644 index 000000000..14ff5a6a2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./secreg_axi_read_if_common.compile +incdir: + - . +src: + - secreg_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.sv new file mode 100644 index 000000000..a8766a676 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package secreg_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import secreg_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/secreg_axi_read_if_macros.svh" + + export secreg_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/secreg_axi_read_if_typedefs.svh" + `include "src/secreg_axi_read_if_transaction.svh" + + `include "src/secreg_axi_read_if_configuration.svh" + `include "src/secreg_axi_read_if_driver.svh" + `include "src/secreg_axi_read_if_monitor.svh" + + `include "src/secreg_axi_read_if_transaction_coverage.svh" + `include "src/secreg_axi_read_if_sequence_base.svh" + `include "src/secreg_axi_read_if_random_sequence.svh" + + `include "src/secreg_axi_read_if_responder_sequence.svh" + `include "src/secreg_axi_read_if2reg_adapter.svh" + + `include "src/secreg_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..9ef82e6b1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use secreg_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +secreg_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..6e5d0d9fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package secreg_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/secreg_axi_read_if_typedefs_hdl.svh" + `include "src/secreg_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..c8b7f5572 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..ec83c1931 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..9b9b95c9c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the secreg_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( secreg_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "secreg_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : secreg_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_agent.svh new file mode 100644 index 000000000..b7809cae6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(secreg_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(secreg_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(secreg_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( secreg_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_configuration.svh new file mode 100644 index 000000000..2fff5b259 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the secreg_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual secreg_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual secreg_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( secreg_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup secreg_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_CONFIGURATION_STRUCT + secreg_axi_read_if_configuration_s secreg_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a secreg_axi_read_if_configuration_s + // structure. The function returns the handle to the secreg_axi_read_if_configuration_struct. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + secreg_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + secreg_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + secreg_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + secreg_axi_read_if_configuration_cg.set_inst_name($sformatf("secreg_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver.svh new file mode 100644 index 000000000..02e992918 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual secreg_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( secreg_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in secreg_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm +// to communicate initiator driven data to secreg_axi_read_if_driver_bfm. +`secreg_axi_read_if_INITIATOR_STRUCT + secreg_axi_read_if_initiator_s secreg_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm +// to communicate Responder driven data to secreg_axi_read_if_driver_bfm. +`secreg_axi_read_if_RESPONDER_STRUCT + secreg_axi_read_if_responder_s secreg_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + secreg_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(secreg_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + secreg_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(secreg_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..4ebf76fbf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the secreg_axi_read_if signal driving. It is +// accessed by the uvm secreg_axi_read_if driver through a virtual interface +// handle in the secreg_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type secreg_axi_read_if_if. +// +// Input signals from the secreg_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within secreg_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import secreg_axi_read_if_pkg_hdl::*; +`include "src/secreg_axi_read_if_macros.svh" + +interface secreg_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (secreg_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute secreg_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + secreg_axi_read_if_pkg::secreg_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in secreg_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from secreg_axi_read_if_driver to this BFM + // **************************************************************************** + `secreg_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm + // to communicate initiator driven data to secreg_axi_read_if_driver_bfm. + `secreg_axi_read_if_INITIATOR_STRUCT + secreg_axi_read_if_initiator_s initiator_struct; + // Responder macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm + // to communicate Responder driven data to secreg_axi_read_if_driver_bfm. + `secreg_axi_read_if_RESPONDER_STRUCT + secreg_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(secreg_axi_read_if_configuration_s secreg_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = secreg_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input secreg_axi_read_if_initiator_s secreg_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output secreg_axi_read_if_responder_s secreg_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the secreg_axi_read_if_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Members within the secreg_axi_read_if_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + initiator_struct = secreg_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // secreg_axi_read_if_responder_struct.xyz = arready_i; // + // secreg_axi_read_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // secreg_axi_read_if_responder_struct.xyz = rresp_i; // + // secreg_axi_read_if_responder_struct.xyz = rid_i; // + // secreg_axi_read_if_responder_struct.xyz = rlast_i; // + // secreg_axi_read_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // secreg_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = secreg_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output secreg_axi_read_if_initiator_s secreg_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input secreg_axi_read_if_responder_s secreg_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the secreg_axi_read_if_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Variables within the secreg_axi_read_if_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= secreg_axi_read_if_initiator_struct.xyz; // + // rdata_o <= secreg_axi_read_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= secreg_axi_read_if_initiator_struct.xyz; // + // rid_o <= secreg_axi_read_if_initiator_struct.xyz; // + // rlast_o <= secreg_axi_read_if_initiator_struct.xyz; // + // rvalid_o <= secreg_axi_read_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the secreg_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the secreg_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_if.sv new file mode 100644 index 000000000..299364565 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the secreg_axi_read_if interface signals. +// It is instantiated once per secreg_axi_read_if bus. Bus Functional Models, +// BFM's named secreg_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named secreg_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(secreg_axi_read_if_bus.arready), // Agent input +// .dut_signal_port(secreg_axi_read_if_bus.rdata), // Agent input +// .dut_signal_port(secreg_axi_read_if_bus.rresp), // Agent input +// .dut_signal_port(secreg_axi_read_if_bus.rid), // Agent input +// .dut_signal_port(secreg_axi_read_if_bus.rlast), // Agent input +// .dut_signal_port(secreg_axi_read_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import secreg_axi_read_if_pkg_hdl::*; + +interface secreg_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_macros.svh new file mode 100644 index 000000000..01e181bac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the secreg_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the secreg_axi_read_if_configuration class. +// + `define secreg_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } secreg_axi_read_if_configuration_s; + + `define secreg_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function secreg_axi_read_if_configuration_s to_struct();\ + secreg_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( secreg_axi_read_if_configuration_struct );\ + endfunction + + `define secreg_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(secreg_axi_read_if_configuration_s secreg_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = secreg_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the secreg_axi_read_if_transaction class. +// + `define secreg_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } secreg_axi_read_if_monitor_s; + + `define secreg_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function secreg_axi_read_if_monitor_s to_monitor_struct();\ + secreg_axi_read_if_monitor_struct = \ + { \ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( secreg_axi_read_if_monitor_struct);\ + endfunction\ + + `define secreg_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(secreg_axi_read_if_monitor_s secreg_axi_read_if_monitor_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = secreg_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the secreg_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define secreg_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } secreg_axi_read_if_initiator_s; + + `define secreg_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function secreg_axi_read_if_initiator_s to_initiator_struct();\ + secreg_axi_read_if_initiator_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( secreg_axi_read_if_initiator_struct);\ + endfunction + + `define secreg_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(secreg_axi_read_if_initiator_s secreg_axi_read_if_initiator_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = secreg_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the secreg_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define secreg_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } secreg_axi_read_if_responder_s; + + `define secreg_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function secreg_axi_read_if_responder_s to_responder_struct();\ + secreg_axi_read_if_responder_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( secreg_axi_read_if_responder_struct);\ + endfunction + + `define secreg_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(secreg_axi_read_if_responder_s secreg_axi_read_if_responder_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = secreg_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor.svh new file mode 100644 index 000000000..4a1a86451 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives secreg_axi_read_if transactions observed by the +// secreg_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual secreg_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( secreg_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`secreg_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the secreg_axi_read_if_monitor_struct. + virtual function void notify_transaction(input secreg_axi_read_if_monitor_s secreg_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(secreg_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..88b287386 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the secreg_axi_read_if signal monitoring. +// It is accessed by the uvm secreg_axi_read_if monitor through a virtual +// interface handle in the secreg_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type secreg_axi_read_if_if. +// +// Input signals from the secreg_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the secreg_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import secreg_axi_read_if_pkg_hdl::*; +`include "src/secreg_axi_read_if_macros.svh" + + +interface secreg_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( secreg_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute secreg_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`secreg_axi_read_if_MONITOR_STRUCT + secreg_axi_read_if_monitor_s secreg_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `secreg_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + secreg_axi_read_if_pkg::secreg_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( secreg_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( secreg_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(secreg_axi_read_if_configuration_s secreg_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = secreg_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output secreg_axi_read_if_monitor_s secreg_axi_read_if_monitor_struct); + // + // Available struct members: + // // secreg_axi_read_if_monitor_struct.secreg_arready + // // secreg_axi_read_if_monitor_struct.secreg_rdata + // // secreg_axi_read_if_monitor_struct.secreg_rresp + // // secreg_axi_read_if_monitor_struct.secreg_rid + // // secreg_axi_read_if_monitor_struct.secreg_rlast + // // secreg_axi_read_if_monitor_struct.secreg_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // secreg_axi_read_if_monitor_struct.xyz = arready_i; // + // secreg_axi_read_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // secreg_axi_read_if_monitor_struct.xyz = rresp_i; // + // secreg_axi_read_if_monitor_struct.xyz = rid_i; // + // secreg_axi_read_if_monitor_struct.xyz = rlast_i; // + // secreg_axi_read_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..99ba1090a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the secreg_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a secreg_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends secreg_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( secreg_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "secreg_axi_read_if_random_sequence::body()-secreg_axi_read_if_transaction randomization failed") + // Send the transaction to the secreg_axi_read_if_driver_bfm via the sequencer and secreg_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: secreg_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..d67fab023 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends secreg_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( secreg_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "secreg_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..6f62375a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( secreg_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + secreg_axi_read_if_transaction_req_t; + secreg_axi_read_if_transaction_req_t req; + typedef secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + secreg_axi_read_if_transaction_rsp_t; + secreg_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = secreg_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = secreg_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction.svh new file mode 100644 index 000000000..6b47b5928 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an secreg_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( secreg_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic secreg_arready ; + logic [DW-1:0] secreg_rdata ; + axi_pkg::axi_burst_e secreg_rresp ; + logic [IW-1:0] secreg_rid ; + logic secreg_rlast ; + logic secreg_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in secreg_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by secreg_axi_read_if_monitor and secreg_axi_read_if_monitor_bfm + // This struct is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_MONITOR_STRUCT + secreg_axi_read_if_monitor_s secreg_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a secreg_axi_read_if_monitor_s + // structure. The function returns the handle to the secreg_axi_read_if_monitor_struct. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm + // to communicate initiator driven data to secreg_axi_read_if_driver_bfm. + // This struct is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_INITIATOR_STRUCT + secreg_axi_read_if_initiator_s secreg_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a secreg_axi_read_if_initiator_s + // structure. The function returns the handle to the secreg_axi_read_if_initiator_struct. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm + // to communicate Responder driven data to secreg_axi_read_if_driver_bfm. + // This struct is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_RESPONDER_STRUCT + secreg_axi_read_if_responder_s secreg_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a secreg_axi_read_if_responder_s + // structure. The function returns the handle to the secreg_axi_read_if_responder_struct. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_arready:0x%x secreg_rdata:0x%x secreg_rresp:0x%x secreg_rid:0x%x secreg_rlast:0x%x secreg_rvalid:0x%x ",secreg_arready,secreg_rdata,secreg_rresp,secreg_rid,secreg_rlast,secreg_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.secreg_arready == RHS.secreg_arready) + &&(this.secreg_rdata == RHS.secreg_rdata) + &&(this.secreg_rresp == RHS.secreg_rresp) + &&(this.secreg_rid == RHS.secreg_rid) + &&(this.secreg_rlast == RHS.secreg_rlast) + &&(this.secreg_rvalid == RHS.secreg_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_arready = RHS.secreg_arready; + this.secreg_rdata = RHS.secreg_rdata; + this.secreg_rresp = RHS.secreg_rresp; + this.secreg_rid = RHS.secreg_rid; + this.secreg_rlast = RHS.secreg_rlast; + this.secreg_rvalid = RHS.secreg_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"secreg_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_arready,"secreg_arready"); + $add_attribute(transaction_view_h,secreg_rdata,"secreg_rdata"); + $add_attribute(transaction_view_h,secreg_rresp,"secreg_rresp"); + $add_attribute(transaction_view_h,secreg_rid,"secreg_rid"); + $add_attribute(transaction_view_h,secreg_rlast,"secreg_rlast"); + $add_attribute(transaction_view_h,secreg_rvalid,"secreg_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..01ff22535 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records secreg_axi_read_if transaction information using +// a covergroup named secreg_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( secreg_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup secreg_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_arready: coverpoint coverage_trans.secreg_arready; + secreg_rdata: coverpoint coverage_trans.secreg_rdata; + secreg_rresp: coverpoint coverage_trans.secreg_rresp; + secreg_rid: coverpoint coverage_trans.secreg_rid; + secreg_rlast: coverpoint coverage_trans.secreg_rlast; + secreg_rvalid: coverpoint coverage_trans.secreg_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + secreg_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + secreg_axi_read_if_transaction_cg.set_inst_name($sformatf("secreg_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + secreg_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/yaml/secreg_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/yaml/secreg_axi_read_if_interface.yaml new file mode 100644 index 000000000..77d1a8ed1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_if_pkg/yaml/secreg_axi_read_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + secreg_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.project new file mode 100644 index 000000000..8ff15aaa7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + secreg_axi_read_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.svproject new file mode 100644 index 000000000..c9f7e3bc5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/Makefile new file mode 100644 index 000000000..ec9e43ad6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# secreg_axi_read_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +secreg_axi_read_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hvl.f + +secreg_axi_read_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hdl.f + +secreg_axi_read_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_xrtl.f + +COMP_secreg_axi_read_out_if_PKG_TGT_0 = q_comp_secreg_axi_read_out_if_pkg +COMP_secreg_axi_read_out_if_PKG_TGT_1 = v_comp_secreg_axi_read_out_if_pkg +COMP_secreg_axi_read_out_if_PKG_TGT = $(COMP_secreg_axi_read_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_secreg_axi_read_out_if_pkg: $(COMP_secreg_axi_read_out_if_PKG_TGT) + +q_comp_secreg_axi_read_out_if_pkg: + $(HDL_COMP_CMD) $(secreg_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(secreg_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(secreg_axi_read_out_if_PKG_XRTL) + +v_comp_secreg_axi_read_out_if_pkg: + $(HVL_COMP_CMD) $(secreg_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(secreg_axi_read_out_if_PKG) + $(VELANALYZE_CMD) $(secreg_axi_read_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(secreg_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(secreg_axi_read_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export secreg_axi_read_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_secreg_axi_read_out_if_pkg = \ + +O_FILE_COMPILE_LIST_secreg_axi_read_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_secreg_axi_read_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_secreg_axi_read_out_if_pkg += -I$(secreg_axi_read_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_secreg_axi_read_out_if_pkg += $(secreg_axi_read_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_secreg_axi_read_out_if_pkg += \ + \ + -o .so + +comp_secreg_axi_read_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_secreg_axi_read_out_if_pkg) $(C_FILE_COMPILE_LIST_secreg_axi_read_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_secreg_axi_read_out_if_pkg) $(O_FILE_COMPILE_LIST_secreg_axi_read_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/compile.do new file mode 100644 index 000000000..f867dc5d7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of secreg_axi_read_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if.compile new file mode 100644 index 000000000..cfbe1cb35 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if.compile @@ -0,0 +1,3 @@ +needs: + - secreg_axi_read_out_if_hvl.compile + - secreg_axi_read_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_bfm.vinfo new file mode 100644 index 000000000..47b065ce0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use secreg_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/secreg_axi_read_out_if_if.sv +src/secreg_axi_read_out_if_driver_bfm.sv +src/secreg_axi_read_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_common.compile new file mode 100644 index 000000000..1ce5be570 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - secreg_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hdl.f new file mode 100644 index 000000000..e669da6e0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hvl.f new file mode 100644 index 000000000..22fdb970b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_xrtl.f new file mode 100644 index 000000000..52cf88070 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hdl.compile new file mode 100644 index 000000000..492d8c2ce --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./secreg_axi_read_out_if_common.compile +incdir: + - . +src: + - src/secreg_axi_read_out_if_if.sv + - src/secreg_axi_read_out_if_monitor_bfm.sv + - src/secreg_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hvl.compile new file mode 100644 index 000000000..fdeed3512 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./secreg_axi_read_out_if_common.compile +incdir: + - . +src: + - secreg_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.sv new file mode 100644 index 000000000..2d7516123 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package secreg_axi_read_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import secreg_axi_read_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/secreg_axi_read_out_if_macros.svh" + + export secreg_axi_read_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/secreg_axi_read_out_if_typedefs.svh" + `include "src/secreg_axi_read_out_if_transaction.svh" + + `include "src/secreg_axi_read_out_if_configuration.svh" + `include "src/secreg_axi_read_out_if_driver.svh" + `include "src/secreg_axi_read_out_if_monitor.svh" + + `include "src/secreg_axi_read_out_if_transaction_coverage.svh" + `include "src/secreg_axi_read_out_if_sequence_base.svh" + `include "src/secreg_axi_read_out_if_random_sequence.svh" + + `include "src/secreg_axi_read_out_if_responder_sequence.svh" + `include "src/secreg_axi_read_out_if2reg_adapter.svh" + + `include "src/secreg_axi_read_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.vinfo new file mode 100644 index 000000000..905f79483 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use secreg_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +secreg_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.sv new file mode 100644 index 000000000..e05290254 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package secreg_axi_read_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/secreg_axi_read_out_if_typedefs_hdl.svh" + `include "src/secreg_axi_read_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..3eea142fa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +secreg_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_sve.F new file mode 100644 index 000000000..828ba63f4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if2reg_adapter.svh new file mode 100644 index 000000000..194eb7487 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the secreg_axi_read_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( secreg_axi_read_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "secreg_axi_read_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : secreg_axi_read_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_agent.svh new file mode 100644 index 000000000..d61b61ace --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(secreg_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(secreg_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(secreg_axi_read_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( secreg_axi_read_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_configuration.svh new file mode 100644 index 000000000..c9e9eede7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the secreg_axi_read_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual secreg_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual secreg_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( secreg_axi_read_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup secreg_axi_read_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_CONFIGURATION_STRUCT + secreg_axi_read_out_if_configuration_s secreg_axi_read_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a secreg_axi_read_out_if_configuration_s + // structure. The function returns the handle to the secreg_axi_read_out_if_configuration_struct. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + secreg_axi_read_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + secreg_axi_read_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + secreg_axi_read_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + secreg_axi_read_out_if_configuration_cg.set_inst_name($sformatf("secreg_axi_read_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(secreg_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver.svh new file mode 100644 index 000000000..409728519 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual secreg_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( secreg_axi_read_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in secreg_axi_read_out_if_macros.svh +//******************************************************************* +// Initiator macro used by secreg_axi_read_out_if_driver and secreg_axi_read_out_if_driver_bfm +// to communicate initiator driven data to secreg_axi_read_out_if_driver_bfm. +`secreg_axi_read_out_if_INITIATOR_STRUCT + secreg_axi_read_out_if_initiator_s secreg_axi_read_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by secreg_axi_read_out_if_driver and secreg_axi_read_out_if_driver_bfm +// to communicate Responder driven data to secreg_axi_read_out_if_driver_bfm. +`secreg_axi_read_out_if_RESPONDER_STRUCT + secreg_axi_read_out_if_responder_s secreg_axi_read_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + secreg_axi_read_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(secreg_axi_read_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + secreg_axi_read_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(secreg_axi_read_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver_bfm.sv new file mode 100644 index 000000000..358d0de16 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the secreg_axi_read_out_if signal driving. It is +// accessed by the uvm secreg_axi_read_out_if driver through a virtual interface +// handle in the secreg_axi_read_out_if configuration. It drives the singals passed +// in through the port connection named bus of type secreg_axi_read_out_if_if. +// +// Input signals from the secreg_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within secreg_axi_read_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import secreg_axi_read_out_if_pkg_hdl::*; +`include "src/secreg_axi_read_out_if_macros.svh" + +interface secreg_axi_read_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (secreg_axi_read_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute secreg_axi_read_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + secreg_axi_read_out_if_pkg::secreg_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in secreg_axi_read_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from secreg_axi_read_out_if_driver to this BFM + // **************************************************************************** + `secreg_axi_read_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by secreg_axi_read_out_if_driver and secreg_axi_read_out_if_driver_bfm + // to communicate initiator driven data to secreg_axi_read_out_if_driver_bfm. + `secreg_axi_read_out_if_INITIATOR_STRUCT + secreg_axi_read_out_if_initiator_s initiator_struct; + // Responder macro used by secreg_axi_read_out_if_driver and secreg_axi_read_out_if_driver_bfm + // to communicate Responder driven data to secreg_axi_read_out_if_driver_bfm. + `secreg_axi_read_out_if_RESPONDER_STRUCT + secreg_axi_read_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(secreg_axi_read_out_if_configuration_s secreg_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = secreg_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input secreg_axi_read_out_if_initiator_s secreg_axi_read_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output secreg_axi_read_out_if_responder_s secreg_axi_read_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the secreg_axi_read_out_if_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Members within the secreg_axi_read_out_if_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + initiator_struct = secreg_axi_read_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // secreg_axi_read_out_if_responder_struct.xyz = arready_i; // + // secreg_axi_read_out_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // secreg_axi_read_out_if_responder_struct.xyz = rresp_i; // + // secreg_axi_read_out_if_responder_struct.xyz = rid_i; // + // secreg_axi_read_out_if_responder_struct.xyz = rlast_i; // + // secreg_axi_read_out_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // secreg_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = secreg_axi_read_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output secreg_axi_read_out_if_initiator_s secreg_axi_read_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input secreg_axi_read_out_if_responder_s secreg_axi_read_out_if_responder_struct + );// pragma tbx xtf + // Variables within the secreg_axi_read_out_if_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Variables within the secreg_axi_read_out_if_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= secreg_axi_read_out_if_initiator_struct.xyz; // + // rdata_o <= secreg_axi_read_out_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= secreg_axi_read_out_if_initiator_struct.xyz; // + // rid_o <= secreg_axi_read_out_if_initiator_struct.xyz; // + // rlast_o <= secreg_axi_read_out_if_initiator_struct.xyz; // + // rvalid_o <= secreg_axi_read_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the secreg_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the secreg_axi_read_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_if.sv new file mode 100644 index 000000000..cc52f2ea4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the secreg_axi_read_out_if interface signals. +// It is instantiated once per secreg_axi_read_out_if bus. Bus Functional Models, +// BFM's named secreg_axi_read_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named secreg_axi_read_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(secreg_axi_read_out_if_bus.arready), // Agent input +// .dut_signal_port(secreg_axi_read_out_if_bus.rdata), // Agent input +// .dut_signal_port(secreg_axi_read_out_if_bus.rresp), // Agent input +// .dut_signal_port(secreg_axi_read_out_if_bus.rid), // Agent input +// .dut_signal_port(secreg_axi_read_out_if_bus.rlast), // Agent input +// .dut_signal_port(secreg_axi_read_out_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import secreg_axi_read_out_if_pkg_hdl::*; + +interface secreg_axi_read_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_macros.svh new file mode 100644 index 000000000..c59ee1d57 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the secreg_axi_read_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the secreg_axi_read_out_if_configuration class. +// + `define secreg_axi_read_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } secreg_axi_read_out_if_configuration_s; + + `define secreg_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function secreg_axi_read_out_if_configuration_s to_struct();\ + secreg_axi_read_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( secreg_axi_read_out_if_configuration_struct );\ + endfunction + + `define secreg_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(secreg_axi_read_out_if_configuration_s secreg_axi_read_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = secreg_axi_read_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the secreg_axi_read_out_if_transaction class. +// + `define secreg_axi_read_out_if_MONITOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } secreg_axi_read_out_if_monitor_s; + + `define secreg_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function secreg_axi_read_out_if_monitor_s to_monitor_struct();\ + secreg_axi_read_out_if_monitor_struct = \ + { \ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( secreg_axi_read_out_if_monitor_struct);\ + endfunction\ + + `define secreg_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(secreg_axi_read_out_if_monitor_s secreg_axi_read_out_if_monitor_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = secreg_axi_read_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the secreg_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define secreg_axi_read_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } secreg_axi_read_out_if_initiator_s; + + `define secreg_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function secreg_axi_read_out_if_initiator_s to_initiator_struct();\ + secreg_axi_read_out_if_initiator_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( secreg_axi_read_out_if_initiator_struct);\ + endfunction + + `define secreg_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(secreg_axi_read_out_if_initiator_s secreg_axi_read_out_if_initiator_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = secreg_axi_read_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the secreg_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define secreg_axi_read_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } secreg_axi_read_out_if_responder_s; + + `define secreg_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function secreg_axi_read_out_if_responder_s to_responder_struct();\ + secreg_axi_read_out_if_responder_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( secreg_axi_read_out_if_responder_struct);\ + endfunction + + `define secreg_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(secreg_axi_read_out_if_responder_s secreg_axi_read_out_if_responder_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = secreg_axi_read_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor.svh new file mode 100644 index 000000000..5eb9dffdc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives secreg_axi_read_out_if transactions observed by the +// secreg_axi_read_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual secreg_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( secreg_axi_read_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`secreg_axi_read_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the secreg_axi_read_out_if_monitor_struct. + virtual function void notify_transaction(input secreg_axi_read_out_if_monitor_s secreg_axi_read_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(secreg_axi_read_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor_bfm.sv new file mode 100644 index 000000000..3a5271d8c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the secreg_axi_read_out_if signal monitoring. +// It is accessed by the uvm secreg_axi_read_out_if monitor through a virtual +// interface handle in the secreg_axi_read_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type secreg_axi_read_out_if_if. +// +// Input signals from the secreg_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the secreg_axi_read_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import secreg_axi_read_out_if_pkg_hdl::*; +`include "src/secreg_axi_read_out_if_macros.svh" + + +interface secreg_axi_read_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( secreg_axi_read_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute secreg_axi_read_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`secreg_axi_read_out_if_MONITOR_STRUCT + secreg_axi_read_out_if_monitor_s secreg_axi_read_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `secreg_axi_read_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + secreg_axi_read_out_if_pkg::secreg_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( secreg_axi_read_out_if_monitor_struct ); + + + proxy.notify_transaction( secreg_axi_read_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(secreg_axi_read_out_if_configuration_s secreg_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = secreg_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output secreg_axi_read_out_if_monitor_s secreg_axi_read_out_if_monitor_struct); + // + // Available struct members: + // // secreg_axi_read_out_if_monitor_struct.secreg_arready + // // secreg_axi_read_out_if_monitor_struct.secreg_rdata + // // secreg_axi_read_out_if_monitor_struct.secreg_rresp + // // secreg_axi_read_out_if_monitor_struct.secreg_rid + // // secreg_axi_read_out_if_monitor_struct.secreg_rlast + // // secreg_axi_read_out_if_monitor_struct.secreg_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // secreg_axi_read_out_if_monitor_struct.xyz = arready_i; // + // secreg_axi_read_out_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // secreg_axi_read_out_if_monitor_struct.xyz = rresp_i; // + // secreg_axi_read_out_if_monitor_struct.xyz = rid_i; // + // secreg_axi_read_out_if_monitor_struct.xyz = rlast_i; // + // secreg_axi_read_out_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_random_sequence.svh new file mode 100644 index 000000000..3ac1e82c7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the secreg_axi_read_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a secreg_axi_read_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends secreg_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( secreg_axi_read_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=secreg_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "secreg_axi_read_out_if_random_sequence::body()-secreg_axi_read_out_if_transaction randomization failed") + // Send the transaction to the secreg_axi_read_out_if_driver_bfm via the sequencer and secreg_axi_read_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: secreg_axi_read_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_responder_sequence.svh new file mode 100644 index 000000000..044fb1741 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends secreg_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( secreg_axi_read_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "secreg_axi_read_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=secreg_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_sequence_base.svh new file mode 100644 index 000000000..4c4380762 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( secreg_axi_read_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + secreg_axi_read_out_if_transaction_req_t; + secreg_axi_read_out_if_transaction_req_t req; + typedef secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + secreg_axi_read_out_if_transaction_rsp_t; + secreg_axi_read_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = secreg_axi_read_out_if_transaction_req_t::type_id::create("req"); + rsp = secreg_axi_read_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction.svh new file mode 100644 index 000000000..938c0a49c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an secreg_axi_read_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( secreg_axi_read_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic secreg_arready ; + logic [DW-1:0] secreg_rdata ; + axi_pkg::axi_burst_e secreg_rresp ; + logic [IW-1:0] secreg_rid ; + logic secreg_rlast ; + logic secreg_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in secreg_axi_read_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by secreg_axi_read_out_if_monitor and secreg_axi_read_out_if_monitor_bfm + // This struct is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_MONITOR_STRUCT + secreg_axi_read_out_if_monitor_s secreg_axi_read_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a secreg_axi_read_out_if_monitor_s + // structure. The function returns the handle to the secreg_axi_read_out_if_monitor_struct. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by secreg_axi_read_out_if_driver and secreg_axi_read_out_if_driver_bfm + // to communicate initiator driven data to secreg_axi_read_out_if_driver_bfm. + // This struct is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_INITIATOR_STRUCT + secreg_axi_read_out_if_initiator_s secreg_axi_read_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a secreg_axi_read_out_if_initiator_s + // structure. The function returns the handle to the secreg_axi_read_out_if_initiator_struct. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by secreg_axi_read_out_if_driver and secreg_axi_read_out_if_driver_bfm + // to communicate Responder driven data to secreg_axi_read_out_if_driver_bfm. + // This struct is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_RESPONDER_STRUCT + secreg_axi_read_out_if_responder_s secreg_axi_read_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a secreg_axi_read_out_if_responder_s + // structure. The function returns the handle to the secreg_axi_read_out_if_responder_struct. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_arready:0x%x secreg_rdata:0x%x secreg_rresp:0x%x secreg_rid:0x%x secreg_rlast:0x%x secreg_rvalid:0x%x ",secreg_arready,secreg_rdata,secreg_rresp,secreg_rid,secreg_rlast,secreg_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.secreg_arready == RHS.secreg_arready) + &&(this.secreg_rdata == RHS.secreg_rdata) + &&(this.secreg_rresp == RHS.secreg_rresp) + &&(this.secreg_rid == RHS.secreg_rid) + &&(this.secreg_rlast == RHS.secreg_rlast) + &&(this.secreg_rvalid == RHS.secreg_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_arready = RHS.secreg_arready; + this.secreg_rdata = RHS.secreg_rdata; + this.secreg_rresp = RHS.secreg_rresp; + this.secreg_rid = RHS.secreg_rid; + this.secreg_rlast = RHS.secreg_rlast; + this.secreg_rvalid = RHS.secreg_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"secreg_axi_read_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_arready,"secreg_arready"); + $add_attribute(transaction_view_h,secreg_rdata,"secreg_rdata"); + $add_attribute(transaction_view_h,secreg_rresp,"secreg_rresp"); + $add_attribute(transaction_view_h,secreg_rid,"secreg_rid"); + $add_attribute(transaction_view_h,secreg_rlast,"secreg_rlast"); + $add_attribute(transaction_view_h,secreg_rvalid,"secreg_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction_coverage.svh new file mode 100644 index 000000000..da4a5a005 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records secreg_axi_read_out_if transaction information using +// a covergroup named secreg_axi_read_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( secreg_axi_read_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup secreg_axi_read_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_arready: coverpoint coverage_trans.secreg_arready; + secreg_rdata: coverpoint coverage_trans.secreg_rdata; + secreg_rresp: coverpoint coverage_trans.secreg_rresp; + secreg_rid: coverpoint coverage_trans.secreg_rid; + secreg_rlast: coverpoint coverage_trans.secreg_rlast; + secreg_rvalid: coverpoint coverage_trans.secreg_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + secreg_axi_read_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + secreg_axi_read_out_if_transaction_cg.set_inst_name($sformatf("secreg_axi_read_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + secreg_axi_read_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/yaml/secreg_axi_read_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/yaml/secreg_axi_read_out_if_interface.yaml new file mode 100644 index 000000000..af8439504 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_3/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/yaml/secreg_axi_read_out_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + secreg_axi_read_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/.project new file mode 100644 index 000000000..1462dcefd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/.project @@ -0,0 +1,37 @@ + + + fuse_ctrl + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + verification_ip + 2 + UVMF_VIP_LIBRARY_HOME + + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D/verification_ip + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/.svproject new file mode 100644 index 000000000..9e84acf61 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/docs/interfaces.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/docs/interfaces.csv new file mode 100644 index 000000000..d783ccf31 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/docs/interfaces.csv @@ -0,0 +1,42 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +, +Interface Description, Interface Type, Interface Transaction, Interface Name, +fuse_ctrl_rst_in_agent, fuse_ctrl_rst_in_driver_bfm fuse_ctrl_rst_in_monitor_bfm, fuse_ctrl_rst_in_transaction, fuse_ctrl_rst_in_pkg_fuse_ctrl_rst_in_agent_BFM, +fuse_ctrl_rst_out_agent, fuse_ctrl_rst_out_driver_bfm fuse_ctrl_rst_out_monitor_bfm, fuse_ctrl_rst_out_transaction, fuse_ctrl_rst_out_pkg_fuse_ctrl_rst_out_agent_BFM, +fuse_ctrl_core_axi_write_in_if_agent, fuse_ctrl_core_axi_write_in_driver_bfm fuse_ctrl_core_axi_write_in_monitor_bfm, fuse_ctrl_core_axi_write_in_transaction, fuse_ctrl_core_axi_write_in_pkg_fuse_ctrl_core_axi_write_in_if_agent_BFM, +fuse_ctrl_core_axi_write_out_if_agent, fuse_ctrl_core_axi_write_out_driver_bfm fuse_ctrl_core_axi_write_out_monitor_bfm, fuse_ctrl_core_axi_write_out_transaction, fuse_ctrl_core_axi_write_out_pkg_fuse_ctrl_core_axi_write_out_if_agent_BFM, +fuse_ctrl_prim_axi_write_in_if_agent, fuse_ctrl_prim_axi_write_in_driver_bfm fuse_ctrl_prim_axi_write_in_monitor_bfm, fuse_ctrl_prim_axi_write_in_transaction, fuse_ctrl_prim_axi_write_in_pkg_fuse_ctrl_prim_axi_write_in_if_agent_BFM, +fuse_ctrl_prim_axi_write_out_if_agent, fuse_ctrl_prim_axi_write_out_driver_bfm fuse_ctrl_prim_axi_write_out_monitor_bfm, fuse_ctrl_prim_axi_write_out_transaction, fuse_ctrl_prim_axi_write_out_pkg_fuse_ctrl_prim_axi_write_out_if_agent_BFM, +fuse_ctrl_core_axi_read_in_if_agent, fuse_ctrl_core_axi_read_in_driver_bfm fuse_ctrl_core_axi_read_in_monitor_bfm, fuse_ctrl_core_axi_read_in_transaction, fuse_ctrl_core_axi_read_in_pkg_fuse_ctrl_core_axi_read_in_if_agent_BFM, +fuse_ctrl_core_axi_read_out_if_agent, fuse_ctrl_core_axi_read_out_driver_bfm fuse_ctrl_core_axi_read_out_monitor_bfm, fuse_ctrl_core_axi_read_out_transaction, fuse_ctrl_core_axi_read_out_pkg_fuse_ctrl_core_axi_read_out_if_agent_BFM, +fuse_ctrl_prim_axi_read_in_if_agent, fuse_ctrl_prim_axi_read_in_driver_bfm fuse_ctrl_prim_axi_read_in_monitor_bfm, fuse_ctrl_prim_axi_read_in_transaction, fuse_ctrl_prim_axi_read_in_pkg_fuse_ctrl_prim_axi_read_in_if_agent_BFM, +fuse_ctrl_prim_axi_read_out_if_agent, fuse_ctrl_prim_axi_read_out_driver_bfm fuse_ctrl_prim_axi_read_out_monitor_bfm, fuse_ctrl_prim_axi_read_out_transaction, fuse_ctrl_prim_axi_read_out_pkg_fuse_ctrl_prim_axi_read_out_if_agent_BFM, +fuse_ctrl_secreg_axi_read_in_if_agent, fuse_ctrl_secreg_axi_read_in_driver_bfm fuse_ctrl_secreg_axi_read_in_monitor_bfm, fuse_ctrl_secreg_axi_read_in_transaction, fuse_ctrl_secreg_axi_read_in_pkg_fuse_ctrl_secreg_axi_read_in_if_agent_BFM, +fuse_ctrl_secreg_axi_read_out_if_agent, fuse_ctrl_secreg_axi_read_out_driver_bfm fuse_ctrl_secreg_axi_read_out_monitor_bfm, fuse_ctrl_secreg_axi_read_out_transaction, fuse_ctrl_secreg_axi_read_out_pkg_fuse_ctrl_secreg_axi_read_out_if_agent_BFM, +fuse_ctrl_lc_otp_in_if_agent, fuse_ctrl_lc_otp_in_driver_bfm fuse_ctrl_lc_otp_in_monitor_bfm, fuse_ctrl_lc_otp_in_transaction, fuse_ctrl_lc_otp_in_pkg_fuse_ctrl_lc_otp_in_if_agent_BFM, +fuse_ctrl_lc_otp_out_if_agent, fuse_ctrl_lc_otp_out_driver_bfm fuse_ctrl_lc_otp_out_monitor_bfm, fuse_ctrl_lc_otp_out_transaction, fuse_ctrl_lc_otp_out_pkg_fuse_ctrl_lc_otp_out_if_agent_BFM, +fuse_ctrl_in_if_agent, fuse_ctrl_in_driver_bfm fuse_ctrl_in_monitor_bfm, fuse_ctrl_in_transaction, fuse_ctrl_in_pkg_fuse_ctrl_in_if_agent_BFM, +fuse_ctrl_out_if_agent, fuse_ctrl_out_driver_bfm fuse_ctrl_out_monitor_bfm, fuse_ctrl_out_transaction, fuse_ctrl_out_pkg_fuse_ctrl_out_if_agent_BFM, + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/fuse_ctrl_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/fuse_ctrl_sve.F new file mode 100644 index 000000000..37457d76f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/fuse_ctrl_sve.F @@ -0,0 +1,42 @@ + +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + +// BFM Files +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F +-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F + +// Environment Files +-F ${UVMF_VIP_LIBRARY_HOME}/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F + +// Bench Files ++incdir+./tb/tests +./tb/tests/fuse_ctrl_tests_pkg.sv + ++incdir+./tb/sequences +./tb/sequences/fuse_ctrl_sequences_pkg.sv + ++incdir+./tb/parameters +./tb/parameters/fuse_ctrl_parameters_pkg.sv + +./tb/testbench/hdl_top.sv +./tb/testbench/hvl_top.sv + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/rtl/dut.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/rtl/dut.compile new file mode 100644 index 000000000..9b0008fc5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/rtl/dut.compile @@ -0,0 +1,6 @@ + +# pragma uvmf custom dut_compile_info begin +src: + - ./vhdl/vhdl_dut.vhd + - ./verilog/verilog_dut.v +# pragma uvmf custom dut_compile_info end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.v b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.v new file mode 100644 index 000000000..96198441c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.v @@ -0,0 +1,21 @@ +module verilog_dut(clk, rst, in_signal, out_signal); + +input clk; +input rst; +input in_signal; +output out_signal; + +reg out_signal_o; + +always @(posedge clk) begin + if (rst) begin + out_signal_o <= 0; + end + else begin + out_signal_o <= ~in_signal; + end + end + +assign out_signal = out_signal_o; + +endmodule diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.vinfo new file mode 100644 index 000000000..87e95f36f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/rtl/verilog/verilog_dut.vinfo @@ -0,0 +1 @@ +verilog_dut.v diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/rtl/vhdl/vhdl_dut.vhd b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/rtl/vhdl/vhdl_dut.vhd new file mode 100644 index 000000000..904aa37d1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/rtl/vhdl/vhdl_dut.vhd @@ -0,0 +1,21 @@ +library ieee; +use ieee.std_logic_1164.all ; + +entity vhdl_dut is + port ( clk : in std_logic ; + rst : in std_logic ; + in_signal : in std_logic ; + out_signal :out std_logic + ); +end vhdl_dut; + +architecture rtl of vhdl_dut is + begin + P1: process + variable out_signal_o : std_logic; + begin + wait until clk'event and clk = '1'; + out_signal_o := in_signal; + out_signal <= out_signal_o; + end process; + end rtl; diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/Makefile new file mode 100644 index 000000000..31c05828a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/Makefile @@ -0,0 +1,377 @@ + +# +#---------------------------------------------------------------------- +# +# DESCRIPTION: This makefile includes the shared makefile and contains +# bench level make targets. +# +#---------------------------------------------------------------------- + + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +# ********************************************************************************************* +# UVMF library directory: +# This variable points to the UVMF release where uvmf_base_pkg directory resides. +# This variable points to release code that is not user modified. +# This variable allows for UVMF release directories to reside independent of project related verification IP and project bench directories. +# This code below looks "upward" for directory starting with UVMF_* and returns first match for use with the release examples. +UVMF_HOME ?= ___PLEASE_SET_AN_ENVIRONMENT_VARIABLE_NAMED_UVMF_HOME_TO_POINT_TO_THE_UVMF_INSTALLATION___ + +# pragma uvmf custom exports begin +# +# Project(s) specific verification IP library: +# Directory where reusable verification packages for interfaces, environments, utilities, etc. reside. +# This variable allows for your verification IP to reside independent of project bench and UVMF release directories. +# For examples deployed with UVMF this will be $(UVMF_HOME)//verification_ip +export UVMF_VIP_LIBRARY_HOME ?= $(PWD)/../../../verification_ip +# +# Project specific bench: +# Directory where bench specific code is located. +# This variable allows for project_benches to reside independent of verification IP and UVMF release directories. +# For examples deployed with UVMF this will be $(UVMF_HOME)//project_benches/ +export UVMF_PROJECT_DIR ?= $(PWD)/.. +# +# +# pragma uvmf custom exports end +# ********************************************************************************************* + +## Check PATH for required vinfo scripts +PVAL := $(shell command -v make_filelist.py 2> /dev/null) +ifndef PVAL + MFLIST = $(UVMF_HOME)/scripts/make_filelist.py +else + MFLIST = make_filelist.py +endif + + +# Set test case specific Variables +TEST_NAME ?= test_top + +TEST_SEED ?= random +UVM_CLI_ARGS = + +# Usage of Veloce, etc. to be input by the user (subject to defaults) +USE_VELOCE ?= 0 + +# Usage of vinfo flow for generating file list +USE_VINFO ?= 0 + +# Usage of Veloce and Questa profilers +USE_VELOCE_PROFILER ?= 0 +USE_QUESTA_PROFILER ?= 0 + + +# Set project Variables +TEST_PLAN_NAME = fuse_ctrl_TestPlan +REPORTING_DO_FILE = fuse_ctrl_reports_script + + +# Include makefile that includes targets for UVM_VIP_Library packages +include $(UVMF_HOME)/scripts/Makefile + + + + +# Include all requisite interface package targets for this bench +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_in_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_out_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/Makefile +include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/Makefile + +# Include all requisite environment package targets for this bench +include $(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg/Makefile + + + +# Add to default compile/load/run arguments +VCOM_ARGS += + +# Note: vsim-3009 error can be eliminated by adding -timescale 1ps/1ps to VLOG_ARGS + +VLOG_ARGS += $(UVM_DISABLE_FILE_LINE_CMD) + +VELANALYZE_ARGS += +VELANALYZE_HVL_ARGS += + +BATCH_VOPT_ARGS += +DEBUG_VOPT_ARGS += +EXTRA_VOPT_TOPS += +COMMON_VSIM_ARGS += +COMMON_VSIM_ARGS += + + +BATCH_VSIM_ARGS += #-uvmcontrol=none +DEBUG_VSIM_ARGS += +EXTRA_VSIM_TOPS += + +# pragma uvmf custom additional_args begin +# pragma uvmf custom additional_args end + + +# Project bench package source +fuse_ctrl_PARAMETERS_PKG ?=\ +$(UVMF_PROJECT_DIR)/tb/parameters/fuse_ctrl_parameters_pkg.sv + + +fuse_ctrl_SEQUENCES_PKG ?=\ +$(UVMF_PROJECT_DIR)/tb/sequences/fuse_ctrl_sequences_pkg.sv + + +fuse_ctrl_TEST_PKG ?=\ +$(UVMF_PROJECT_DIR)/tb/tests/fuse_ctrl_tests_pkg.sv + +# pragma uvmf custom dut_files begin +# UVMF_CHANGE_ME : Reference Verilog DUT source. +fuse_ctrl_VERILOG_DUT ?=\ +$(UVMF_PROJECT_DIR)/../../../../../integration/rtl/config_defines.svh +$(UVMF_PROJECT_DIR)/../../../../../integration/rtl/caliptra_reg_defines.svh +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_sva.svh +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_macros.svh +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_sram.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/ahb_defines_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_ahb_srom.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/apb_slv_sif.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/ahb_slv_sif.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_icg.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/clk_gate.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/caliptra_2ff_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/ahb_to_reg_adapter.sv +$(UVMF_PROJECT_DIR)/../../../../../libs/rtl/skidbuffer.v +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_util_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_alert_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_subreg_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_mubi_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_cipher_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sparse_fsm_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_otp_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_ram_1p_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../lc_ctrl/rtl/lc_ctrl_reg_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../lc_ctrl/rtl/lc_ctrl_state_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../lc_ctrl/rtl/lc_ctrl_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_flop_en.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_flop.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_buf.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_otp.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_ram_1p.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim_generic/rtl/caliptra_prim_generic_and2.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_flop_en.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_cdc_rand_delay.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_flop_2sync.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_lfsr.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_double_lfsr.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_arbiter_fixed.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_arbiter_tree.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_edn_req.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_present.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_lc_sender.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sync_reqack.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sync_reqack_data.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_mubi4_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_diff_decode.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sec_anchor_buf.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_slicer.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_count.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sparse_fsm_flop.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_dom_and_2share.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sec_anchor_flop.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_reg_we_check.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_packer_fifo.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_max_tree.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_subreg_arb.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_subreg.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_intr_hw.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_onehot_check.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_mubi8_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_mubi8_sender.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_fifo_sync_cnt.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_buf.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_lc_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_alert_receiver.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_flop.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_alert_sender.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_fifo_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_arbiter_ppc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_sum_tree.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_subreg_ext.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_edge_detector.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_blanker.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_ram_1p_adv.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_assert_multiple.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_assert.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/sram2tlul.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_adapter_host.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_adapter_reg.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_adapter_sram.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_cmd_intg_chk.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_cmd_intg_gen.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_data_integ_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_data_integ_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_err_resp.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_err.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_fifo_async.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_fifo_sync.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_lc_gate.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_rsp_intg_chk.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_rsp_intg_gen.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_socket_1n.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_socket_m1.sv +$(UVMF_PROJECT_DIR)/../../../../../tlul/rtl/tlul_sram_byte.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_if.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_addr.v +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_sub_rd.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_sub_wr.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_sub_arb.sv +$(UVMF_PROJECT_DIR)/../../../../../axi/rtl/axi_sub.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_22_16_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_22_16_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_28_22_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_28_22_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_39_32_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_39_32_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_64_57_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_64_57_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_72_64_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_72_64_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_22_16_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_22_16_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_39_32_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_39_32_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_72_64_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_72_64_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_76_68_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_hamming_76_68_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_22_16_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_22_16_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_28_22_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_28_22_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_39_32_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_39_32_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_64_57_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_64_57_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_72_64_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_72_64_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_22_16_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_22_16_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_39_32_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_39_32_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_72_64_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_72_64_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_76_68_dec.sv +$(UVMF_PROJECT_DIR)/../../../../../caliptra_prim/rtl/caliptra_prim_secded_inv_hamming_76_68_enc.sv +$(UVMF_PROJECT_DIR)/../../../../../axi2tlul/rtl/axi2tlul_cmd_intg_gen.sv +$(UVMF_PROJECT_DIR)/../../../../../axi2tlul/rtl/sub2tlul.sv +$(UVMF_PROJECT_DIR)/../../../../../axi2tlul/rtl/axi2tlul.sv +$(UVMF_PROJECT_DIR)/../../../../../entropy_src/rtl/entropy_src_main_sm_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../entropy_src/rtl/entropy_src_ack_sm_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../entropy_src/rtl/entropy_src_reg_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../entropy_src/rtl/entropy_src_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../edn/rtl/edn_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../ast/rtl/ast_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../pwrmgr/rtl/pwrmgr_reg_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../../pwrmgr/rtl/pwrmgr_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_reg_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_part_pkg.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_core_reg_top.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/caliptra_otp_ctrl_prim_reg_top.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_dai.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_ecc_reg.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_lci.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_lfsr_timer.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_part_buf.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_part_unbuf.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_scrmbl.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl.sv +$(UVMF_PROJECT_DIR)/../../../../rtl/otp_ctrl_top.sv + + +# UVMF_CHANGE_ME : Reference VHDL DUT source. +fuse_ctrl_VHDL_DUT ?=\ +$(UVMF_PROJECT_DIR)/rtl/vhdl/vhdl_dut.vhd +# pragma uvmf custom dut_files end + + +# Project bench package targets +COMP_fuse_ctrl_PARAMETERS_PKG_TGT_0 = q_comp_fuse_ctrl_parameters_pkg +COMP_fuse_ctrl_PARAMETERS_PKG_TGT_1 = v_comp_fuse_ctrl_parameters_pkg +COMP_fuse_ctrl_PARAMETERS_PKG_TGT = $(COMP_fuse_ctrl_PARAMETERS_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_parameters_pkg: $(COMP_fuse_ctrl_PARAMETERS_PKG_TGT) + +q_comp_fuse_ctrl_parameters_pkg: + $(HVL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/parameters $(fuse_ctrl_PARAMETERS_PKG) + +v_comp_fuse_ctrl_parameters_pkg: q_comp_fuse_ctrl_parameters_pkg + $(HDL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/parameters $(fuse_ctrl_PARAMETERS_PKG) + + +comp_fuse_ctrl_sequence_pkg: + $(HVL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/sequences $(fuse_ctrl_SEQUENCES_PKG) + +comp_fuse_ctrl_tests_pkg: + $(HVL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/tests $(fuse_ctrl_TEST_PKG) + +# pragma uvmf custom dut_compile_make_target begin +# UVMF_CHANGE_ME : Add make target to compile your verilog dut here +comp_fuse_ctrl_verilog_dut: + echo "Compile your verilog DUT here" + $(HDL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/../../../../../libs/rtl $(fuse_ctrl_VERILOG_DUT) + +# UVMF_CHANGE_ME : Add make target to compile your vhdl dut here +comp_fuse_ctrl_vhdl_dut: + echo "Compile your vhdl DUT here" + $(HDL_COMP_CMD_VHDL) $(fuse_ctrl_VHDL_DUT) + +# UVMF_CHANGE_ME : Add make target to compile your dut here +comp_fuse_ctrl_dut: comp_fuse_ctrl_vhdl_dut comp_fuse_ctrl_verilog_dut +# pragma uvmf custom dut_compile_make_target end + + +BUILD_TGT_0 = make_build +BUILD_TGT_1 = vinfo_build +BUILD_TGT = $(BUILD_TGT_$(USE_VINFO)) + + +comp_hvl : comp_hvl_core + + +comp_hvl_core : \ + comp_fuse_ctrl_rst_in_pkg comp_fuse_ctrl_rst_out_pkg comp_fuse_ctrl_core_axi_write_in_pkg comp_fuse_ctrl_core_axi_write_out_pkg comp_fuse_ctrl_prim_axi_write_in_pkg comp_fuse_ctrl_prim_axi_write_out_pkg comp_fuse_ctrl_core_axi_read_in_pkg comp_fuse_ctrl_core_axi_read_out_pkg comp_fuse_ctrl_prim_axi_read_in_pkg comp_fuse_ctrl_prim_axi_read_out_pkg comp_fuse_ctrl_secreg_axi_read_in_pkg comp_fuse_ctrl_secreg_axi_read_out_pkg comp_fuse_ctrl_lc_otp_in_pkg comp_fuse_ctrl_lc_otp_out_pkg comp_fuse_ctrl_in_pkg comp_fuse_ctrl_out_pkg \ + comp_fuse_ctrl_env_pkg \ + comp_fuse_ctrl_parameters_pkg comp_fuse_ctrl_sequence_pkg comp_fuse_ctrl_tests_pkg + +comp_uvmf_core : comp_uvm_pkg comp_uvmf_base_pkg + +make_build: comp_fuse_ctrl_dut comp_uvmf_core comp_hvl comp_test_bench + +hvl_build: q_comp_fuse_ctrl_rst_in_pkg q_comp_fuse_ctrl_rst_out_pkg q_comp_fuse_ctrl_core_axi_write_in_pkg q_comp_fuse_ctrl_core_axi_write_out_pkg q_comp_fuse_ctrl_prim_axi_write_in_pkg q_comp_fuse_ctrl_prim_axi_write_out_pkg q_comp_fuse_ctrl_core_axi_read_in_pkg q_comp_fuse_ctrl_core_axi_read_out_pkg q_comp_fuse_ctrl_prim_axi_read_in_pkg q_comp_fuse_ctrl_prim_axi_read_out_pkg q_comp_fuse_ctrl_secreg_axi_read_in_pkg q_comp_fuse_ctrl_secreg_axi_read_out_pkg q_comp_fuse_ctrl_lc_otp_in_pkg q_comp_fuse_ctrl_lc_otp_out_pkg q_comp_fuse_ctrl_in_pkg q_comp_fuse_ctrl_out_pkg comp_fuse_ctrl_env_pkg comp_fuse_ctrl_sequence_pkg comp_fuse_ctrl_tests_pkg hvl_comp_testbench link optimize + + +vinfo_build: comp_fuse_ctrl_vhdl_dut build_hdl_vinfo build_hvl_vinfo $(VINFO_TGT) + + $(HDL_COMP_CMD) -F hdl.vf + $(VEL_COMP) + +build: $(BUILD_TGT) + +# pragma uvmf custom additional_targets begin +# pragma uvmf custom additional_targets end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/bcr_testlist b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/bcr_testlist new file mode 100644 index 000000000..4df4567ee --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/bcr_testlist @@ -0,0 +1,19 @@ + + + +# Test list for use by RMDB file +# File syntax is +# TB_INFO { } { } +# TB ## All subsequent tests will run on this bench until a different "TB" line is seen +# TEST <1st_seed> ... +# If not enough seeds are provided then random seeds are used to pad +# If no repeat count is given, default is 1 +# pragma uvmf custom tb_info begin +TB_INFO fuse_ctrl { } { } +# pragma uvmf custom tb_info end +TB fuse_ctrl +# pragma uvmf custom regression_suite begin +TEST test_top 3 +# pragma uvmf custom regression_suite end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/bcr_testlist.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/bcr_testlist.yaml new file mode 100644 index 000000000..65b6be08a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/bcr_testlist.yaml @@ -0,0 +1,44 @@ + + + +# YAML test list for use by RMDB file +# File syntax is +# uvmf_testlist: +# testbenches: +# - name: +# extra_build_options: +# extra_run_options: +# - name: +# ... +# - name: +# tests: +# - name: +# uvm_testname: (defaults to test_name) +# testbench: (defaults to last tb name seen) +# repeat: (defaults to 1) +# seeds: [,,...,] (defaults to all random) +# extra_test_options: +# - name: +# ... +# - name: +# include: +# - (relative path reference is to the including YAML file) +# - +# ... +# - + +uvmf_testlist: + testbenches: +# pragma uvmf custom tb_info begin + - name: fuse_ctrl + extra_build_options: "" + extra_run_options: "" +# pragma uvmf custom tb_info end + tests: + - testbench: fuse_ctrl +# pragma uvmf custom regression_suite begin + - name: test_top + repeat: 3 +# pragma uvmf custom regression_suite end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/compile.do new file mode 100644 index 000000000..be9526004 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/compile.do @@ -0,0 +1,85 @@ + + +################################################################## +## ENVIRONMENT VARIABLES +################################################################## +quietly set ::env(UVMF_VIP_LIBRARY_HOME) ../../../verification_ip +quietly set ::env(UVMF_PROJECT_DIR) .. + +## Using VRM means that the build is occuring several more directories deeper underneath +## the sim directory, need to prepend some more '..' +if {[info exists ::env(VRM_BUILD)]} { + quietly set ::env(UVMF_VIP_LIBRARY_HOME) "../../../../../$::env(UVMF_VIP_LIBRARY_HOME)" + quietly set ::env(UVMF_PROJECT_DIR) "../../../../../$::env(UVMF_PROJECT_DIR)" +} +quietly set ::env(UVMF_VIP_LIBRARY_HOME) [file normalize $::env(UVMF_VIP_LIBRARY_HOME)] +quietly set ::env(UVMF_PROJECT_DIR) [file normalize $::env(UVMF_PROJECT_DIR)] +quietly echo "UVMF_VIP_LIBRARY_HOME = $::env(UVMF_VIP_LIBRARY_HOME)" +quietly echo "UVMF_PROJECT_DIR = $::env(UVMF_PROJECT_DIR)" + + +################################################################### +## HOUSEKEEPING : DELETE FILES THAT WILL BE REGENERATED +################################################################### +file delete -force *~ *.ucdb vsim.dbg *.vstf *.log work *.mem *.transcript.txt certe_dump.xml *.wlf covhtmlreport VRMDATA +file delete -force design.bin qwave.db dpiheader.h visualizer*.ses +file delete -force veloce.med veloce.wave veloce.map tbxbindings.h edsenv velrunopts.ini +file delete -force sv_connect.* + +################################################################### +## COMPILE DUT SOURCE CODE +################################################################### +vlib work +# pragma uvmf custom dut_compile_dofile_target begin +# UVMF_CHANGE_ME : Add commands to compile your dut here, replacing the default examples +#vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/rtl/verilog/verilog_dut.v +#vcom $env(UVMF_PROJECT_DIR)/rtl/vhdl/vhdl_dut.vhd +# pragma uvmf custom dut_compile_dofile_target end + +################################################################### +## COMPILE UVMF BASE/COMMON SOURCE CODE +################################################################### +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_HOME)/uvmf_base_pkg -F $env(UVMF_HOME)/uvmf_base_pkg/uvmf_base_pkg_filelist_hdl.f +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_HOME)/uvmf_base_pkg -F $env(UVMF_HOME)/uvmf_base_pkg/uvmf_base_pkg_filelist_hvl.f + + +################################################################### +## UVMF INTERFACE COMPILATION +################################################################### +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_in_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_out_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/compile.do +do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/compile.do + +################################################################### +## UVMF ENVIRONMENT COMPILATION +################################################################### +do $env(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg/compile.do + +################################################################### +## UVMF BENCHES COMPILATION +################################################################### +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/parameters $env(UVMF_PROJECT_DIR)/tb/parameters/fuse_ctrl_parameters_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/sequences $env(UVMF_PROJECT_DIR)/tb/sequences/fuse_ctrl_sequences_pkg.sv +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/tests $env(UVMF_PROJECT_DIR)/tb/tests/fuse_ctrl_tests_pkg.sv + +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/testbench -F $env(UVMF_PROJECT_DIR)/tb/testbench/top_filelist_hdl.f +vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/testbench -F $env(UVMF_PROJECT_DIR)/tb/testbench/top_filelist_hvl.f + +################################################################### +## OPTIMIZATION +################################################################### +vopt hvl_top hdl_top -o optimized_batch_top_tb +vopt +acc hvl_top hdl_top -o optimized_debug_top_tb diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/hdl.compile new file mode 100644 index 000000000..8e7bd41ac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/hdl.compile @@ -0,0 +1,5 @@ +needs: +# pragma uvmf custom dut_compile_info begin + - ../rtl/dut.compile +# pragma uvmf custom dut_compile_info end + - ../tb/testbench/hdl_top.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/hdl.vinfo new file mode 100644 index 000000000..da27ec773 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/hdl.vinfo @@ -0,0 +1 @@ +@use $UVMF_PROJECT_DIR/tb/testbench/hdl_top.vinfo diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/hvl.compile new file mode 100644 index 000000000..ce9525496 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/hvl.compile @@ -0,0 +1,2 @@ +needs: + - ../tb/testbench/hvl_top.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/hvl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/hvl.vinfo new file mode 100644 index 000000000..d22eff338 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/hvl.vinfo @@ -0,0 +1 @@ +@use $UVMF_PROJECT_DIR/tb/testbench/hvl_top.vinfo diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/run.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/run.do new file mode 100644 index 000000000..101ddc486 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/run.do @@ -0,0 +1,21 @@ + + +quietly set svLibs "" +quietly set extra_vsim_args "" + +################################################################### +## Check for additional vsim arguments passed using env var $UVMF_EXTRA_VSIM_ARGS +################################################################### +if {[info exists ::env(UVMF_EXTRA_VSIM_ARGS)]} { + echo "Adding more args to vsim command" + quietly set extra_vsim_args $::env(UVMF_EXTRA_VSIM_ARGS) +} + +################################################################## +## Launch Questa : generate vsim command line and execute +################################################################## +# pragma uvmf custom dut_run_dofile_target begin +# UVMF_CHANGE_ME : Change the UVM_TESTNAME plusarg to run a different test +quietly set cmd [format "vsim -i -sv_seed random +UVM_TESTNAME=test_top +UVM_VERBOSITY=UVM_HIGH -permit_unmatched_virtual_intf +notimingchecks -suppress 8887 %s %s -uvmcontrol=all -msgmode both -classdebug -assertdebug +uvm_set_config_int=*,enable_transaction_viewing,1 -do { set NoQuitOnFinish 1; onbreak {resume}; run 0; do wave.do; set PrefSource(OpenOnBreak) 0; radix hex showbase; } optimized_debug_top_tb" $svLibs $extra_vsim_args] +# pragma uvmf custom dut_run_dofile_target end +eval $cmd diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/tbx.config b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/tbx.config new file mode 100644 index 000000000..eec58168c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/tbx.config @@ -0,0 +1,10 @@ + + + + + +comp -questa +velsyn -D1S +rtlc -allow_4ST + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/testlist b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/testlist new file mode 100644 index 000000000..0c6229764 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/testlist @@ -0,0 +1,20 @@ + + + + +# Test list for use by RMDB file +# File syntax is +# TB_INFO { } { } +# TB ## All subsequent tests will run on this bench until a different "TB" line is seen +# TEST <1st_seed> ... +# If not enough seeds are provided then random seeds are used to pad +# If no repeat count is given, default is 1 +# pragma uvmf custom tb_info begin +TB_INFO fuse_ctrl { UVMF_VIP_LIBRARY_HOME=../../../../../../../../verification_ip UVMF_PROJECT_DIR=../../../../../../../fuse_ctrl } { } +# pragma uvmf custom tb_info end +TB fuse_ctrl +# pragma uvmf custom regression_suite begin +TEST test_top 3 +# pragma uvmf custom regression_suite end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/testlist.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/testlist.yaml new file mode 100644 index 000000000..6236cc790 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/testlist.yaml @@ -0,0 +1,44 @@ + + + +# YAML test list for use by RMDB file +# File syntax is +# uvmf_testlist: +# testbenches: +# - name: +# extra_build_options: +# extra_run_options: +# - name: +# ... +# - name: +# tests: +# - name: +# uvm_testname: (defaults to test_name) +# testbench: (defaults to last tb name seen) +# repeat: (defaults to 1) +# seeds: [,,...,] (defaults to all random) +# extra_test_options: +# - name: +# ... +# - name: +# include: +# - (relative path reference is to the including YAML file) +# - +# ... +# - + +uvmf_testlist: + testbenches: +# pragma uvmf custom tb_info begin + - name: fuse_ctrl + extra_build_options: "UVMF_VIP_LIBRARY_HOME=../../../../../../../../verification_ip UVMF_PROJECT_DIR=../../../../../../../fuse_ctrl" + extra_run_options: "" +# pragma uvmf custom tb_info end + tests: + - testbench: fuse_ctrl +# pragma uvmf custom regression_suite begin + - name: test_top + repeat: 3 +# pragma uvmf custom regression_suite end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/top.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/top.compile new file mode 100644 index 000000000..efd51c07e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/top.compile @@ -0,0 +1,3 @@ +needs: + - hvl.compile + - hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/veloce.config b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/veloce.config new file mode 100644 index 000000000..d09751555 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/veloce.config @@ -0,0 +1,26 @@ + + + + + +# pragma uvmf custom additional begin +comp -num_boards 1 +comp -hvl questa +# Please choose the correct emulator type code for +# comp -platform command or else velcomp will fail +# Available types are: +# - Veloce2 Quattro: D2 +# - Veloce2 Maximus: D2M +# - Veloce Strato TiL, Ti, and Mi: Strato +# - Veloce Strato M and Strato T: StratoM +# - comp -platform +comp -platform Strato + +rtlc -enable_tbx_pragma_checks +rtlc -allow_4ST +rtlc -allow_MDR +rtlc -compile_display +rtlc -xwave_siglist xwaves.sigs +# pragma uvmf custom additional end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/viswave.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/viswave.do new file mode 100644 index 000000000..db43b441f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/viswave.do @@ -0,0 +1,106 @@ + + +onerror resume +wave tags F0 +wave update off + +wave spacer -backgroundcolor Salmon { fuse_ctrl_rst_in_agent } +wave add uvm_test_top.environment.fuse_ctrl_rst_in_agent.fuse_ctrl_rst_in_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_rst_in_agent_bus +wave add -group fuse_ctrl_rst_in_agent_bus hdl_top.fuse_ctrl_rst_in_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_rst_in_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_rst_out_agent } +wave add uvm_test_top.environment.fuse_ctrl_rst_out_agent.fuse_ctrl_rst_out_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_rst_out_agent_bus +wave add -group fuse_ctrl_rst_out_agent_bus hdl_top.fuse_ctrl_rst_out_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_rst_out_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_core_axi_write_in_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_core_axi_write_in_if_agent.fuse_ctrl_core_axi_write_in_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_core_axi_write_in_if_agent_bus +wave add -group fuse_ctrl_core_axi_write_in_if_agent_bus hdl_top.fuse_ctrl_core_axi_write_in_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_core_axi_write_in_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_core_axi_write_out_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_core_axi_write_out_if_agent.fuse_ctrl_core_axi_write_out_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_core_axi_write_out_if_agent_bus +wave add -group fuse_ctrl_core_axi_write_out_if_agent_bus hdl_top.fuse_ctrl_core_axi_write_out_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_core_axi_write_out_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_prim_axi_write_in_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_prim_axi_write_in_if_agent.fuse_ctrl_prim_axi_write_in_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_prim_axi_write_in_if_agent_bus +wave add -group fuse_ctrl_prim_axi_write_in_if_agent_bus hdl_top.fuse_ctrl_prim_axi_write_in_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_prim_axi_write_in_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_prim_axi_write_out_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_prim_axi_write_out_if_agent.fuse_ctrl_prim_axi_write_out_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_prim_axi_write_out_if_agent_bus +wave add -group fuse_ctrl_prim_axi_write_out_if_agent_bus hdl_top.fuse_ctrl_prim_axi_write_out_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_prim_axi_write_out_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_core_axi_read_in_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_core_axi_read_in_if_agent.fuse_ctrl_core_axi_read_in_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_core_axi_read_in_if_agent_bus +wave add -group fuse_ctrl_core_axi_read_in_if_agent_bus hdl_top.fuse_ctrl_core_axi_read_in_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_core_axi_read_in_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_core_axi_read_out_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_core_axi_read_out_if_agent.fuse_ctrl_core_axi_read_out_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_core_axi_read_out_if_agent_bus +wave add -group fuse_ctrl_core_axi_read_out_if_agent_bus hdl_top.fuse_ctrl_core_axi_read_out_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_core_axi_read_out_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_prim_axi_read_in_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_prim_axi_read_in_if_agent.fuse_ctrl_prim_axi_read_in_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_prim_axi_read_in_if_agent_bus +wave add -group fuse_ctrl_prim_axi_read_in_if_agent_bus hdl_top.fuse_ctrl_prim_axi_read_in_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_prim_axi_read_in_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_prim_axi_read_out_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_prim_axi_read_out_if_agent.fuse_ctrl_prim_axi_read_out_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_prim_axi_read_out_if_agent_bus +wave add -group fuse_ctrl_prim_axi_read_out_if_agent_bus hdl_top.fuse_ctrl_prim_axi_read_out_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_prim_axi_read_out_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_secreg_axi_read_in_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_secreg_axi_read_in_if_agent.fuse_ctrl_secreg_axi_read_in_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_secreg_axi_read_in_if_agent_bus +wave add -group fuse_ctrl_secreg_axi_read_in_if_agent_bus hdl_top.fuse_ctrl_secreg_axi_read_in_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_secreg_axi_read_in_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_secreg_axi_read_out_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_secreg_axi_read_out_if_agent.fuse_ctrl_secreg_axi_read_out_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_secreg_axi_read_out_if_agent_bus +wave add -group fuse_ctrl_secreg_axi_read_out_if_agent_bus hdl_top.fuse_ctrl_secreg_axi_read_out_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_secreg_axi_read_out_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_lc_otp_in_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_lc_otp_in_if_agent.fuse_ctrl_lc_otp_in_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_lc_otp_in_if_agent_bus +wave add -group fuse_ctrl_lc_otp_in_if_agent_bus hdl_top.fuse_ctrl_lc_otp_in_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_lc_otp_in_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_lc_otp_out_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_lc_otp_out_if_agent.fuse_ctrl_lc_otp_out_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_lc_otp_out_if_agent_bus +wave add -group fuse_ctrl_lc_otp_out_if_agent_bus hdl_top.fuse_ctrl_lc_otp_out_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_lc_otp_out_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_in_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_in_if_agent.fuse_ctrl_in_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_in_if_agent_bus +wave add -group fuse_ctrl_in_if_agent_bus hdl_top.fuse_ctrl_in_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_in_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] +wave spacer -backgroundcolor Salmon { fuse_ctrl_out_if_agent } +wave add uvm_test_top.environment.fuse_ctrl_out_if_agent.fuse_ctrl_out_if_agent_monitor.txn_stream -radix string -tag F0 +wave group fuse_ctrl_out_if_agent_bus +wave add -group fuse_ctrl_out_if_agent_bus hdl_top.fuse_ctrl_out_if_agent_bus.* -radix hexadecimal -tag F0 +wave group fuse_ctrl_out_if_agent_bus -collapse +wave insertion [expr [wave index insertpoint] +1] + +wave update on +WaveSetStreamView + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/wave.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/wave.do new file mode 100644 index 000000000..1ec995984 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/wave.do @@ -0,0 +1,72 @@ + + +onerror {resume} +quietly WaveActivateNextPane {} 0 + +add wave -noupdate -divider fuse_ctrl_rst_in_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_rst_in_agent/fuse_ctrl_rst_in_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_rst_in_agent_bus /hdl_top/fuse_ctrl_rst_in_agent_bus/* +add wave -noupdate -divider fuse_ctrl_rst_out_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_rst_out_agent/fuse_ctrl_rst_out_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_rst_out_agent_bus /hdl_top/fuse_ctrl_rst_out_agent_bus/* +add wave -noupdate -divider fuse_ctrl_core_axi_write_in_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_core_axi_write_in_if_agent/fuse_ctrl_core_axi_write_in_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_core_axi_write_in_if_agent_bus /hdl_top/fuse_ctrl_core_axi_write_in_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_core_axi_write_out_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_core_axi_write_out_if_agent/fuse_ctrl_core_axi_write_out_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_core_axi_write_out_if_agent_bus /hdl_top/fuse_ctrl_core_axi_write_out_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_prim_axi_write_in_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_prim_axi_write_in_if_agent/fuse_ctrl_prim_axi_write_in_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_prim_axi_write_in_if_agent_bus /hdl_top/fuse_ctrl_prim_axi_write_in_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_prim_axi_write_out_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_prim_axi_write_out_if_agent/fuse_ctrl_prim_axi_write_out_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_prim_axi_write_out_if_agent_bus /hdl_top/fuse_ctrl_prim_axi_write_out_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_core_axi_read_in_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_core_axi_read_in_if_agent/fuse_ctrl_core_axi_read_in_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_core_axi_read_in_if_agent_bus /hdl_top/fuse_ctrl_core_axi_read_in_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_core_axi_read_out_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_core_axi_read_out_if_agent/fuse_ctrl_core_axi_read_out_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_core_axi_read_out_if_agent_bus /hdl_top/fuse_ctrl_core_axi_read_out_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_prim_axi_read_in_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_prim_axi_read_in_if_agent/fuse_ctrl_prim_axi_read_in_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_prim_axi_read_in_if_agent_bus /hdl_top/fuse_ctrl_prim_axi_read_in_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_prim_axi_read_out_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_prim_axi_read_out_if_agent/fuse_ctrl_prim_axi_read_out_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_prim_axi_read_out_if_agent_bus /hdl_top/fuse_ctrl_prim_axi_read_out_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_secreg_axi_read_in_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_secreg_axi_read_in_if_agent/fuse_ctrl_secreg_axi_read_in_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_secreg_axi_read_in_if_agent_bus /hdl_top/fuse_ctrl_secreg_axi_read_in_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_secreg_axi_read_out_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_secreg_axi_read_out_if_agent/fuse_ctrl_secreg_axi_read_out_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_secreg_axi_read_out_if_agent_bus /hdl_top/fuse_ctrl_secreg_axi_read_out_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_lc_otp_in_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_lc_otp_in_if_agent/fuse_ctrl_lc_otp_in_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_lc_otp_in_if_agent_bus /hdl_top/fuse_ctrl_lc_otp_in_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_lc_otp_out_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_lc_otp_out_if_agent/fuse_ctrl_lc_otp_out_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_lc_otp_out_if_agent_bus /hdl_top/fuse_ctrl_lc_otp_out_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_in_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_in_if_agent/fuse_ctrl_in_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_in_if_agent_bus /hdl_top/fuse_ctrl_in_if_agent_bus/* +add wave -noupdate -divider fuse_ctrl_out_if_agent +add wave -noupdate /uvm_root/uvm_test_top/environment/fuse_ctrl_out_if_agent/fuse_ctrl_out_if_agent_monitor/txn_stream +add wave -noupdate -group fuse_ctrl_out_if_agent_bus /hdl_top/fuse_ctrl_out_if_agent_bus/* + +TreeUpdate [SetDefaultTree] +quietly wave cursor active 0 +configure wave -namecolwidth 472 +configure wave -valuecolwidth 100 +configure wave -justifyvalue left +configure wave -signalnamewidth 0 +configure wave -snapdistance 10 +configure wave -datasetprefix 0 +configure wave -rowmargin 4 +configure wave -childrowmargin 2 +configure wave -gridoffset 0 +configure wave -gridperiod 1 +configure wave -griddelta 40 +configure wave -timeline 0 +configure wave -timelineunits ns +update +WaveRestoreZoom {27 ns} {168 ns} + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/xwaves.sigs b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/xwaves.sigs new file mode 100644 index 000000000..d75f0a575 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/sim/xwaves.sigs @@ -0,0 +1,17 @@ + + + + + +# pragma uvmf custom additional begin + +Group All + +#Top level signals +hdl_top.* +#Add additional levels or individual signals as needed +hdl_top.*.* + +# pragma uvmf custom additional end + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.compile new file mode 100644 index 000000000..0c6b841a5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.compile @@ -0,0 +1,4 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +src: + - fuse_ctrl_parameters_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.sv new file mode 100644 index 000000000..df84a8b07 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.sv @@ -0,0 +1,66 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This package contains test level parameters +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +package fuse_ctrl_parameters_pkg; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + + // These parameters are used to uniquely identify each interface. The monitor_bfm and + // driver_bfm are placed into and retrieved from the uvm_config_db using these string + // names as the field_name. The parameter is also used to enable transaction viewing + // from the command line for selected interfaces using the UVM command line processing. + parameter string fuse_ctrl_rst_in_agent_BFM = "fuse_ctrl_rst_in_agent_BFM"; /* [0] */ + parameter string fuse_ctrl_rst_out_agent_BFM = "fuse_ctrl_rst_out_agent_BFM"; /* [1] */ + parameter string fuse_ctrl_core_axi_write_in_if_agent_BFM = "fuse_ctrl_core_axi_write_in_if_agent_BFM"; /* [2] */ + parameter string fuse_ctrl_core_axi_write_out_if_agent_BFM = "fuse_ctrl_core_axi_write_out_if_agent_BFM"; /* [3] */ + parameter string fuse_ctrl_prim_axi_write_in_if_agent_BFM = "fuse_ctrl_prim_axi_write_in_if_agent_BFM"; /* [4] */ + parameter string fuse_ctrl_prim_axi_write_out_if_agent_BFM = "fuse_ctrl_prim_axi_write_out_if_agent_BFM"; /* [5] */ + parameter string fuse_ctrl_core_axi_read_in_if_agent_BFM = "fuse_ctrl_core_axi_read_in_if_agent_BFM"; /* [6] */ + parameter string fuse_ctrl_core_axi_read_out_if_agent_BFM = "fuse_ctrl_core_axi_read_out_if_agent_BFM"; /* [7] */ + parameter string fuse_ctrl_prim_axi_read_in_if_agent_BFM = "fuse_ctrl_prim_axi_read_in_if_agent_BFM"; /* [8] */ + parameter string fuse_ctrl_prim_axi_read_out_if_agent_BFM = "fuse_ctrl_prim_axi_read_out_if_agent_BFM"; /* [9] */ + parameter string fuse_ctrl_secreg_axi_read_in_if_agent_BFM = "fuse_ctrl_secreg_axi_read_in_if_agent_BFM"; /* [10] */ + parameter string fuse_ctrl_secreg_axi_read_out_if_agent_BFM = "fuse_ctrl_secreg_axi_read_out_if_agent_BFM"; /* [11] */ + parameter string fuse_ctrl_lc_otp_in_if_agent_BFM = "fuse_ctrl_lc_otp_in_if_agent_BFM"; /* [12] */ + parameter string fuse_ctrl_lc_otp_out_if_agent_BFM = "fuse_ctrl_lc_otp_out_if_agent_BFM"; /* [13] */ + parameter string fuse_ctrl_in_if_agent_BFM = "fuse_ctrl_in_if_agent_BFM"; /* [14] */ + parameter string fuse_ctrl_out_if_agent_BFM = "fuse_ctrl_out_if_agent_BFM"; /* [15] */ + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.vinfo new file mode 100644 index 000000000..3bd4d7f9b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/parameters/fuse_ctrl_parameters_pkg.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_parameters_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.compile new file mode 100644 index 000000000..85c9189c6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.compile @@ -0,0 +1,22 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile + - ../../../../verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile + - ../parameters/fuse_ctrl_parameters_pkg.compile +src: + - fuse_ctrl_sequences_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.sv new file mode 100644 index 000000000..3ebdc90b6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.sv @@ -0,0 +1,93 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This package includes all high level sequence classes used +// in the environment. These include utility sequences and top +// level sequences. +// +// CONTAINS: +// - +// - +// +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +// + +package fuse_ctrl_sequences_pkg; + import uvm_pkg::*; + import uvmf_base_pkg::*; + import fuse_ctrl_rst_in_pkg::*; + import fuse_ctrl_rst_in_pkg_hdl::*; + import fuse_ctrl_rst_out_pkg::*; + import fuse_ctrl_rst_out_pkg_hdl::*; + import fuse_ctrl_core_axi_write_in_pkg::*; + import fuse_ctrl_core_axi_write_in_pkg_hdl::*; + import fuse_ctrl_core_axi_write_out_pkg::*; + import fuse_ctrl_core_axi_write_out_pkg_hdl::*; + import fuse_ctrl_prim_axi_write_in_pkg::*; + import fuse_ctrl_prim_axi_write_in_pkg_hdl::*; + import fuse_ctrl_prim_axi_write_out_pkg::*; + import fuse_ctrl_prim_axi_write_out_pkg_hdl::*; + import fuse_ctrl_core_axi_read_in_pkg::*; + import fuse_ctrl_core_axi_read_in_pkg_hdl::*; + import fuse_ctrl_core_axi_read_out_pkg::*; + import fuse_ctrl_core_axi_read_out_pkg_hdl::*; + import fuse_ctrl_prim_axi_read_in_pkg::*; + import fuse_ctrl_prim_axi_read_in_pkg_hdl::*; + import fuse_ctrl_prim_axi_read_out_pkg::*; + import fuse_ctrl_prim_axi_read_out_pkg_hdl::*; + import fuse_ctrl_secreg_axi_read_in_pkg::*; + import fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; + import fuse_ctrl_secreg_axi_read_out_pkg::*; + import fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; + import fuse_ctrl_lc_otp_in_pkg::*; + import fuse_ctrl_lc_otp_in_pkg_hdl::*; + import fuse_ctrl_lc_otp_out_pkg::*; + import fuse_ctrl_lc_otp_out_pkg_hdl::*; + import fuse_ctrl_in_pkg::*; + import fuse_ctrl_in_pkg_hdl::*; + import fuse_ctrl_out_pkg::*; + import fuse_ctrl_out_pkg_hdl::*; + import fuse_ctrl_parameters_pkg::*; + import fuse_ctrl_env_pkg::*; + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + `include "src/fuse_ctrl_bench_sequence_base.svh" + `include "src/register_test_sequence.svh" + `include "src/example_derived_test_sequence.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the sequence package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.vinfo new file mode 100644 index 000000000..150eb8cc8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/sequences/fuse_ctrl_sequences_pkg.vinfo @@ -0,0 +1,21 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo +@use $UVMF_PROJECT_DIR/tb/parameters/fuse_ctrl_parameters_pkg.vinfo ++incdir+@vinfodir +fuse_ctrl_sequences_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/sequences/src/example_derived_test_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/sequences/src/example_derived_test_sequence.svh new file mode 100644 index 000000000..7566dc511 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/sequences/src/example_derived_test_sequence.svh @@ -0,0 +1,44 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains the top level sequence used in example_derived_test. +// It is an example of a sequence that is extended from %(benchName)_bench_sequence_base +// and can override %(benchName)_bench_sequence_base. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class example_derived_test_sequence extends fuse_ctrl_bench_sequence_base; + + `uvm_object_utils( example_derived_test_sequence ); + + function new(string name = "" ); + super.new(name); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/sequences/src/fuse_ctrl_bench_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/sequences/src/fuse_ctrl_bench_sequence_base.svh new file mode 100644 index 000000000..395cc47d1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/sequences/src/fuse_ctrl_bench_sequence_base.svh @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// Description: This file contains the top level and utility sequences +// used by test_top. It can be extended to create derivative top +// level sequences. +// +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +// + + +typedef fuse_ctrl_env_configuration fuse_ctrl_env_configuration_t; + +class fuse_ctrl_bench_sequence_base extends uvmf_sequence_base #(uvm_sequence_item); + + `uvm_object_utils( fuse_ctrl_bench_sequence_base ); + + // pragma uvmf custom sequences begin + +typedef fuse_ctrl_env_sequence_base #( + .CONFIG_T(fuse_ctrl_env_configuration_t) + ) + fuse_ctrl_env_sequence_base_t; +rand fuse_ctrl_env_sequence_base_t fuse_ctrl_env_seq; + + + + // UVMF_CHANGE_ME : Instantiate, construct, and start sequences as needed to create stimulus scenarios. + // Instantiate sequences here + typedef fuse_ctrl_rst_random_sequence fuse_ctrl_rst_agent_random_seq_t; + fuse_ctrl_rst_agent_random_seq_t fuse_ctrl_rst_agent_random_seq; + typedef fuse_ctrl_core_axi_write_if_random_sequence fuse_ctrl_core_axi_write_agent_random_seq_t; + fuse_ctrl_core_axi_write_agent_random_seq_t fuse_ctrl_core_axi_write_agent_random_seq; + typedef fuse_ctrl_prim_axi_write_if_random_sequence fuse_ctrl_prim_axi_write_agent_random_seq_t; + fuse_ctrl_prim_axi_write_agent_random_seq_t fuse_ctrl_prim_axi_write_agent_random_seq; + typedef fuse_ctrl_core_axi_read_if_random_sequence fuse_ctrl_core_axi_read_agent_random_seq_t; + fuse_ctrl_core_axi_read_agent_random_seq_t fuse_ctrl_core_axi_read_agent_random_seq; + typedef fuse_ctrl_prim_axi_read_if_random_sequence fuse_ctrl_prim_axi_read_agent_random_seq_t; + fuse_ctrl_prim_axi_read_agent_random_seq_t fuse_ctrl_prim_axi_read_agent_random_seq; + typedef fuse_ctrl_secreg_axi_read_if_random_sequence fuse_ctrl_secreg_axi_read_agent_random_seq_t; + fuse_ctrl_secreg_axi_read_agent_random_seq_t fuse_ctrl_secreg_axi_read_agent_random_seq; + typedef fuse_ctrl_lc_otp_if_random_sequence fuse_ctrl_lc_otp_if_agent_random_seq_t; + fuse_ctrl_lc_otp_if_agent_random_seq_t fuse_ctrl_lc_otp_if_agent_random_seq; + // pragma uvmf custom sequences end + + // Sequencer handles for each active interface in the environment + typedef fuse_ctrl_rst_in_transaction fuse_ctrl_rst_in_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_rst_in_agent_transaction_t) fuse_ctrl_rst_in_agent_sequencer; + typedef fuse_ctrl_core_axi_write_in_transaction fuse_ctrl_core_axi_write_in_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_core_axi_write_in_if_agent_transaction_t) fuse_ctrl_core_axi_write_in_if_agent_sequencer; + typedef fuse_ctrl_prim_axi_write_in_transaction fuse_ctrl_prim_axi_write_in_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_prim_axi_write_in_if_agent_transaction_t) fuse_ctrl_prim_axi_write_in_if_agent_sequencer; + typedef fuse_ctrl_core_axi_read_in_transaction fuse_ctrl_core_axi_read_in_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_core_axi_read_in_if_agent_transaction_t) fuse_ctrl_core_axi_read_in_if_agent_sequencer; + typedef fuse_ctrl_prim_axi_read_in_transaction fuse_ctrl_prim_axi_read_in_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_prim_axi_read_in_if_agent_transaction_t) fuse_ctrl_prim_axi_read_in_if_agent_sequencer; + typedef fuse_ctrl_secreg_axi_read_in_transaction fuse_ctrl_secreg_axi_read_in_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_secreg_axi_read_in_if_agent_transaction_t) fuse_ctrl_secreg_axi_read_in_if_agent_sequencer; + typedef fuse_ctrl_lc_otp_in_transaction fuse_ctrl_lc_otp_in_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_lc_otp_in_if_agent_transaction_t) fuse_ctrl_lc_otp_in_if_agent_sequencer; + typedef fuse_ctrl_in_transaction fuse_ctrl_in_if_agent_transaction_t; + uvm_sequencer #(fuse_ctrl_in_if_agent_transaction_t) fuse_ctrl_in_if_agent_sequencer; + + + // Top level environment configuration handle + fuse_ctrl_env_configuration_t top_configuration; + + // Configuration handles to access interface BFM's + fuse_ctrl_rst_in_configuration fuse_ctrl_rst_in_agent_config; + fuse_ctrl_rst_out_configuration fuse_ctrl_rst_out_agent_config; + fuse_ctrl_core_axi_write_in_configuration fuse_ctrl_core_axi_write_in_if_agent_config; + fuse_ctrl_core_axi_write_out_configuration fuse_ctrl_core_axi_write_out_if_agent_config; + fuse_ctrl_prim_axi_write_in_configuration fuse_ctrl_prim_axi_write_in_if_agent_config; + fuse_ctrl_prim_axi_write_out_configuration fuse_ctrl_prim_axi_write_out_if_agent_config; + fuse_ctrl_core_axi_read_in_configuration fuse_ctrl_core_axi_read_in_if_agent_config; + fuse_ctrl_core_axi_read_out_configuration fuse_ctrl_core_axi_read_out_if_agent_config; + fuse_ctrl_prim_axi_read_in_configuration fuse_ctrl_prim_axi_read_in_if_agent_config; + fuse_ctrl_prim_axi_read_out_configuration fuse_ctrl_prim_axi_read_out_if_agent_config; + fuse_ctrl_secreg_axi_read_in_configuration fuse_ctrl_secreg_axi_read_in_if_agent_config; + fuse_ctrl_secreg_axi_read_out_configuration fuse_ctrl_secreg_axi_read_out_if_agent_config; + fuse_ctrl_lc_otp_in_configuration fuse_ctrl_lc_otp_in_if_agent_config; + fuse_ctrl_lc_otp_out_configuration fuse_ctrl_lc_otp_out_if_agent_config; + fuse_ctrl_in_configuration fuse_ctrl_in_if_agent_config; + fuse_ctrl_out_configuration fuse_ctrl_out_if_agent_config; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + function new( string name = "" ); + super.new( name ); + // Retrieve the configuration handles from the uvm_config_db + + // Retrieve top level configuration handle + if ( !uvm_config_db#(fuse_ctrl_env_configuration_t)::get(null,UVMF_CONFIGURATIONS, "TOP_ENV_CONFIG",top_configuration) ) begin + `uvm_info("CFG", "*** FATAL *** uvm_config_db::get can not find TOP_ENV_CONFIG. Are you using an older UVMF release than what was used to generate this bench?",UVM_NONE); + `uvm_fatal("CFG", "uvm_config_db#(fuse_ctrl_env_configuration_t)::get cannot find resource TOP_ENV_CONFIG"); + end + + // Retrieve config handles for all agents + if( !uvm_config_db #( fuse_ctrl_rst_in_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_rst_in_agent_BFM , fuse_ctrl_rst_in_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_rst_in_configuration )::get cannot find resource fuse_ctrl_rst_in_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_rst_out_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_rst_out_agent_BFM , fuse_ctrl_rst_out_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_rst_out_configuration )::get cannot find resource fuse_ctrl_rst_out_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_core_axi_write_in_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_core_axi_write_in_if_agent_BFM , fuse_ctrl_core_axi_write_in_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_core_axi_write_in_configuration )::get cannot find resource fuse_ctrl_core_axi_write_in_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_core_axi_write_out_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_core_axi_write_out_if_agent_BFM , fuse_ctrl_core_axi_write_out_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_core_axi_write_out_configuration )::get cannot find resource fuse_ctrl_core_axi_write_out_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_prim_axi_write_in_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_prim_axi_write_in_if_agent_BFM , fuse_ctrl_prim_axi_write_in_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_prim_axi_write_in_configuration )::get cannot find resource fuse_ctrl_prim_axi_write_in_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_prim_axi_write_out_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_prim_axi_write_out_if_agent_BFM , fuse_ctrl_prim_axi_write_out_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_prim_axi_write_out_configuration )::get cannot find resource fuse_ctrl_prim_axi_write_out_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_core_axi_read_in_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_core_axi_read_in_if_agent_BFM , fuse_ctrl_core_axi_read_in_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_core_axi_read_in_configuration )::get cannot find resource fuse_ctrl_core_axi_read_in_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_core_axi_read_out_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_core_axi_read_out_if_agent_BFM , fuse_ctrl_core_axi_read_out_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_core_axi_read_out_configuration )::get cannot find resource fuse_ctrl_core_axi_read_out_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_prim_axi_read_in_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_prim_axi_read_in_if_agent_BFM , fuse_ctrl_prim_axi_read_in_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_prim_axi_read_in_configuration )::get cannot find resource fuse_ctrl_prim_axi_read_in_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_prim_axi_read_out_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_prim_axi_read_out_if_agent_BFM , fuse_ctrl_prim_axi_read_out_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_prim_axi_read_out_configuration )::get cannot find resource fuse_ctrl_prim_axi_read_out_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_secreg_axi_read_in_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_secreg_axi_read_in_if_agent_BFM , fuse_ctrl_secreg_axi_read_in_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_secreg_axi_read_in_configuration )::get cannot find resource fuse_ctrl_secreg_axi_read_in_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_secreg_axi_read_out_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_secreg_axi_read_out_if_agent_BFM , fuse_ctrl_secreg_axi_read_out_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_secreg_axi_read_out_configuration )::get cannot find resource fuse_ctrl_secreg_axi_read_out_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_lc_otp_in_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_lc_otp_in_if_agent_BFM , fuse_ctrl_lc_otp_in_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_lc_otp_in_configuration )::get cannot find resource fuse_ctrl_lc_otp_in_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_lc_otp_out_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_lc_otp_out_if_agent_BFM , fuse_ctrl_lc_otp_out_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_lc_otp_out_configuration )::get cannot find resource fuse_ctrl_lc_otp_out_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_in_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_in_if_agent_BFM , fuse_ctrl_in_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_in_configuration )::get cannot find resource fuse_ctrl_in_if_agent_BFM" ) + if( !uvm_config_db #( fuse_ctrl_out_configuration )::get( null , UVMF_CONFIGURATIONS , fuse_ctrl_out_if_agent_BFM , fuse_ctrl_out_if_agent_config ) ) + `uvm_fatal("CFG" , "uvm_config_db #( fuse_ctrl_out_configuration )::get cannot find resource fuse_ctrl_out_if_agent_BFM" ) + + // Assign the sequencer handles from the handles within agent configurations + fuse_ctrl_rst_in_agent_sequencer = fuse_ctrl_rst_in_agent_config.get_sequencer(); + fuse_ctrl_core_axi_write_in_if_agent_sequencer = fuse_ctrl_core_axi_write_in_if_agent_config.get_sequencer(); + fuse_ctrl_prim_axi_write_in_if_agent_sequencer = fuse_ctrl_prim_axi_write_in_if_agent_config.get_sequencer(); + fuse_ctrl_core_axi_read_in_if_agent_sequencer = fuse_ctrl_core_axi_read_in_if_agent_config.get_sequencer(); + fuse_ctrl_prim_axi_read_in_if_agent_sequencer = fuse_ctrl_prim_axi_read_in_if_agent_config.get_sequencer(); + fuse_ctrl_secreg_axi_read_in_if_agent_sequencer = fuse_ctrl_secreg_axi_read_in_if_agent_config.get_sequencer(); + fuse_ctrl_lc_otp_in_if_agent_sequencer = fuse_ctrl_lc_otp_in_if_agent_config.get_sequencer(); + fuse_ctrl_in_if_agent_sequencer = fuse_ctrl_in_if_agent_config.get_sequencer(); + + + + // pragma uvmf custom new begin + // pragma uvmf custom new end + + endfunction + + // **************************************************************************** + virtual task body(); + // pragma uvmf custom body begin + + // Construct sequences here + + fuse_ctrl_env_seq = fuse_ctrl_env_sequence_base_t::type_id::create("fuse_ctrl_env_seq"); + + fuse_ctrl_rst_agent_random_seq = fuse_ctrl_rst_agent_random_seq_t::type_id::create("fuse_ctrl_rst_agent_random_seq"); + fuse_ctrl_core_axi_write_agent_random_seq = fuse_ctrl_core_axi_write_agent_random_seq_t::type_id::create("fuse_ctrl_core_axi_write_agent_random_seq"); + fuse_ctrl_prim_axi_write_agent_random_seq = fuse_ctrl_prim_axi_write_agent_random_seq_t::type_id::create("fuse_ctrl_prim_axi_write_agent_random_seq"); + fuse_ctrl_core_axi_read_agent_random_seq = fuse_ctrl_core_axi_read_agent_random_seq_t::type_id::create("fuse_ctrl_core_axi_read_agent_random_seq"); + fuse_ctrl_prim_axi_read_agent_random_seq = fuse_ctrl_prim_axi_read_agent_random_seq_t::type_id::create("fuse_ctrl_prim_axi_read_agent_random_seq"); + fuse_ctrl_secreg_axi_read_agent_random_seq = fuse_ctrl_secreg_axi_read_agent_random_seq_t::type_id::create("fuse_ctrl_secreg_axi_read_agent_random_seq"); + fuse_ctrl_lc_otp_if_agent_random_seq = fuse_ctrl_lc_otp_if_agent_random_seq_t::type_id::create("fuse_ctrl_lc_otp_if_agent_random_seq"); + fork + fuse_ctrl_rst_agent_config.wait_for_reset(); + fuse_ctrl_core_axi_write_agent_config.wait_for_reset(); + fuse_ctrl_prim_axi_write_agent_config.wait_for_reset(); + fuse_ctrl_core_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_prim_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_secreg_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_lc_otp_if_agent_config.wait_for_reset(); + join + // Start RESPONDER sequences here + fork + join_none + // Start INITIATOR sequences here + fork + repeat (25) fuse_ctrl_rst_agent_random_seq.start(fuse_ctrl_rst_agent_sequencer); + repeat (25) fuse_ctrl_core_axi_write_agent_random_seq.start(fuse_ctrl_core_axi_write_agent_sequencer); + repeat (25) fuse_ctrl_prim_axi_write_agent_random_seq.start(fuse_ctrl_prim_axi_write_agent_sequencer); + repeat (25) fuse_ctrl_core_axi_read_agent_random_seq.start(fuse_ctrl_core_axi_read_agent_sequencer); + repeat (25) fuse_ctrl_prim_axi_read_agent_random_seq.start(fuse_ctrl_prim_axi_read_agent_sequencer); + repeat (25) fuse_ctrl_secreg_axi_read_agent_random_seq.start(fuse_ctrl_secreg_axi_read_agent_sequencer); + repeat (25) fuse_ctrl_lc_otp_if_agent_random_seq.start(fuse_ctrl_lc_otp_if_agent_sequencer); + join + +fuse_ctrl_env_seq.start(top_configuration.vsqr); + + // UVMF_CHANGE_ME : Extend the simulation XXX number of clocks after + // the last sequence to allow for the last sequence item to flow + // through the design. + fork + fuse_ctrl_rst_agent_config.wait_for_num_clocks(400); + fuse_ctrl_core_axi_write_agent_config.wait_for_num_clocks(400); + fuse_ctrl_prim_axi_write_agent_config.wait_for_num_clocks(400); + fuse_ctrl_core_axi_read_agent_config.wait_for_num_clocks(400); + fuse_ctrl_prim_axi_read_agent_config.wait_for_num_clocks(400); + fuse_ctrl_secreg_axi_read_agent_config.wait_for_num_clocks(400); + fuse_ctrl_lc_otp_if_agent_config.wait_for_num_clocks(400); + join + + // pragma uvmf custom body end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/sequences/src/register_test_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/sequences/src/register_test_sequence.svh new file mode 100644 index 000000000..0db60c39b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/sequences/src/register_test_sequence.svh @@ -0,0 +1,76 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains the top level sequence used in register_test. +// It uses the UVM built in register test. Specific UVM built-in tests can be +// selected in the body task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class register_test_sequence extends fuse_ctrl_bench_sequence_base; + + `uvm_object_utils( register_test_sequence ); + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "" ); + super.new(name); + endfunction + + // **************************************************************************** + virtual task body(); + + // Reset the DUT + fork + // pragma uvmf custom register_test_reset begin + // UVMF_CHANGE_ME + // Select the desired wait_for_reset or provide custom mechanism. + // fork-join for this code block may be unnecessary based on your situation. + fuse_ctrl_rst_agent_config.wait_for_reset(); + fuse_ctrl_core_axi_write_agent_config.wait_for_reset(); + fuse_ctrl_prim_axi_write_agent_config.wait_for_reset(); + fuse_ctrl_core_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_prim_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_secreg_axi_read_agent_config.wait_for_reset(); + fuse_ctrl_lc_otp_if_agent_config.wait_for_reset(); + // pragma uvmf custom register_test_reset end + join + + // pragma uvmf custom register_test_setup begin + // UVMF_CHANGE_ME perform potentially necessary operations before running the sequence. + // pragma uvmf custom register_test_setup end + + // pragma uvmf custom register_test_operation begin + // UVMF_CHANGE_ME Perform your custom register test + // pragma uvmf custom register_test_operation end + + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/hdl_top.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/hdl_top.compile new file mode 100644 index 000000000..651edf5d7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/hdl_top.compile @@ -0,0 +1,24 @@ +incdir: + - ${uvm_path}/src + - . +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ../parameters/fuse_ctrl_parameters_pkg.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hdl.compile +src: + - hdl_top.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/hdl_top.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/hdl_top.sv new file mode 100644 index 000000000..5ce84230a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/hdl_top.sv @@ -0,0 +1,283 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// Description: This top level module instantiates all synthesizable +// static content. This and tb_top.sv are the two top level modules +// of the simulation. +// +// This module instantiates the following: +// DUT: The Design Under Test +// Interfaces: Signal bundles that contain signals connected to DUT +// Driver BFM's: BFM's that actively drive interface signals +// Monitor BFM's: BFM's that passively monitor interface signals +// +//---------------------------------------------------------------------- + +//---------------------------------------------------------------------- +// + +module hdl_top; + +import fuse_ctrl_parameters_pkg::*; +import uvmf_base_pkg_hdl::*; + + // pragma attribute hdl_top partition_module_xrtl +// pragma uvmf custom clock_generator begin + bit clk; + // Instantiate a clk driver + // tbx clkgen + initial begin + clk = 0; + #0ns; + forever begin + clk = ~clk; + #5ns; + end + end +// pragma uvmf custom clock_generator end + +// pragma uvmf custom reset_generator begin + bit rst; + // Instantiate a rst driver + // tbx clkgen + initial begin + rst = 0; + #200ns; + rst = 1; + end +// pragma uvmf custom reset_generator end + + // pragma uvmf custom module_item_additional begin + logic edn_clk; + logic edn_rst_n; + // pragma uvmf custom module_item_additional end + + // Instantiate the signal bundle, monitor bfm and driver bfm for each interface. + // The signal bundle, _if, contains signals to be connected to the DUT. + // The monitor, monitor_bfm, observes the bus, _if, and captures transactions. + // The driver, driver_bfm, drives transactions onto the bus, _if. + fuse_ctrl_rst_in_if fuse_ctrl_rst_in_agent_bus( + // pragma uvmf custom fuse_ctrl_rst_in_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_rst_in_agent_bus_connections end + ); + fuse_ctrl_rst_out_if fuse_ctrl_rst_out_agent_bus( + // pragma uvmf custom fuse_ctrl_rst_out_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_rst_out_agent_bus_connections end + ); + fuse_ctrl_core_axi_write_in_if fuse_ctrl_core_axi_write_in_if_agent_bus( + // pragma uvmf custom fuse_ctrl_core_axi_write_in_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_core_axi_write_in_if_agent_bus_connections end + ); + fuse_ctrl_core_axi_write_out_if fuse_ctrl_core_axi_write_out_if_agent_bus( + // pragma uvmf custom fuse_ctrl_core_axi_write_out_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_core_axi_write_out_if_agent_bus_connections end + ); + fuse_ctrl_prim_axi_write_in_if fuse_ctrl_prim_axi_write_in_if_agent_bus( + // pragma uvmf custom fuse_ctrl_prim_axi_write_in_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_prim_axi_write_in_if_agent_bus_connections end + ); + fuse_ctrl_prim_axi_write_out_if fuse_ctrl_prim_axi_write_out_if_agent_bus( + // pragma uvmf custom fuse_ctrl_prim_axi_write_out_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_prim_axi_write_out_if_agent_bus_connections end + ); + fuse_ctrl_core_axi_read_in_if fuse_ctrl_core_axi_read_in_if_agent_bus( + // pragma uvmf custom fuse_ctrl_core_axi_read_in_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_core_axi_read_in_if_agent_bus_connections end + ); + fuse_ctrl_core_axi_read_out_if fuse_ctrl_core_axi_read_out_if_agent_bus( + // pragma uvmf custom fuse_ctrl_core_axi_read_out_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_core_axi_read_out_if_agent_bus_connections end + ); + fuse_ctrl_prim_axi_read_in_if fuse_ctrl_prim_axi_read_in_if_agent_bus( + // pragma uvmf custom fuse_ctrl_prim_axi_read_in_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_prim_axi_read_in_if_agent_bus_connections end + ); + fuse_ctrl_prim_axi_read_out_if fuse_ctrl_prim_axi_read_out_if_agent_bus( + // pragma uvmf custom fuse_ctrl_prim_axi_read_out_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_prim_axi_read_out_if_agent_bus_connections end + ); + fuse_ctrl_secreg_axi_read_in_if fuse_ctrl_secreg_axi_read_in_if_agent_bus( + // pragma uvmf custom fuse_ctrl_secreg_axi_read_in_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_secreg_axi_read_in_if_agent_bus_connections end + ); + fuse_ctrl_secreg_axi_read_out_if fuse_ctrl_secreg_axi_read_out_if_agent_bus( + // pragma uvmf custom fuse_ctrl_secreg_axi_read_out_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_secreg_axi_read_out_if_agent_bus_connections end + ); + fuse_ctrl_lc_otp_in_if fuse_ctrl_lc_otp_in_if_agent_bus( + // pragma uvmf custom fuse_ctrl_lc_otp_in_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_lc_otp_in_if_agent_bus_connections end + ); + fuse_ctrl_lc_otp_out_if fuse_ctrl_lc_otp_out_if_agent_bus( + // pragma uvmf custom fuse_ctrl_lc_otp_out_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_lc_otp_out_if_agent_bus_connections end + ); + fuse_ctrl_in_if fuse_ctrl_in_if_agent_bus( + // pragma uvmf custom fuse_ctrl_in_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_in_if_agent_bus_connections end + ); + fuse_ctrl_out_if fuse_ctrl_out_if_agent_bus( + // pragma uvmf custom fuse_ctrl_out_if_agent_bus_connections begin + .clk_i(clk), .rst_ni(rst) + // pragma uvmf custom fuse_ctrl_out_if_agent_bus_connections end + ); + fuse_ctrl_rst_in_monitor_bfm fuse_ctrl_rst_in_agent_mon_bfm(fuse_ctrl_rst_in_agent_bus.monitor_port); + fuse_ctrl_rst_out_monitor_bfm fuse_ctrl_rst_out_agent_mon_bfm(fuse_ctrl_rst_out_agent_bus.monitor_port); + fuse_ctrl_core_axi_write_in_monitor_bfm fuse_ctrl_core_axi_write_in_if_agent_mon_bfm(fuse_ctrl_core_axi_write_in_if_agent_bus.monitor_port); + fuse_ctrl_core_axi_write_out_monitor_bfm fuse_ctrl_core_axi_write_out_if_agent_mon_bfm(fuse_ctrl_core_axi_write_out_if_agent_bus.monitor_port); + fuse_ctrl_prim_axi_write_in_monitor_bfm fuse_ctrl_prim_axi_write_in_if_agent_mon_bfm(fuse_ctrl_prim_axi_write_in_if_agent_bus.monitor_port); + fuse_ctrl_prim_axi_write_out_monitor_bfm fuse_ctrl_prim_axi_write_out_if_agent_mon_bfm(fuse_ctrl_prim_axi_write_out_if_agent_bus.monitor_port); + fuse_ctrl_core_axi_read_in_monitor_bfm fuse_ctrl_core_axi_read_in_if_agent_mon_bfm(fuse_ctrl_core_axi_read_in_if_agent_bus.monitor_port); + fuse_ctrl_core_axi_read_out_monitor_bfm fuse_ctrl_core_axi_read_out_if_agent_mon_bfm(fuse_ctrl_core_axi_read_out_if_agent_bus.monitor_port); + fuse_ctrl_prim_axi_read_in_monitor_bfm fuse_ctrl_prim_axi_read_in_if_agent_mon_bfm(fuse_ctrl_prim_axi_read_in_if_agent_bus.monitor_port); + fuse_ctrl_prim_axi_read_out_monitor_bfm fuse_ctrl_prim_axi_read_out_if_agent_mon_bfm(fuse_ctrl_prim_axi_read_out_if_agent_bus.monitor_port); + fuse_ctrl_secreg_axi_read_in_monitor_bfm fuse_ctrl_secreg_axi_read_in_if_agent_mon_bfm(fuse_ctrl_secreg_axi_read_in_if_agent_bus.monitor_port); + fuse_ctrl_secreg_axi_read_out_monitor_bfm fuse_ctrl_secreg_axi_read_out_if_agent_mon_bfm(fuse_ctrl_secreg_axi_read_out_if_agent_bus.monitor_port); + fuse_ctrl_lc_otp_in_monitor_bfm fuse_ctrl_lc_otp_in_if_agent_mon_bfm(fuse_ctrl_lc_otp_in_if_agent_bus.monitor_port); + fuse_ctrl_lc_otp_out_monitor_bfm fuse_ctrl_lc_otp_out_if_agent_mon_bfm(fuse_ctrl_lc_otp_out_if_agent_bus.monitor_port); + fuse_ctrl_in_monitor_bfm fuse_ctrl_in_if_agent_mon_bfm(fuse_ctrl_in_if_agent_bus.monitor_port); + fuse_ctrl_out_monitor_bfm fuse_ctrl_out_if_agent_mon_bfm(fuse_ctrl_out_if_agent_bus.monitor_port); + fuse_ctrl_rst_in_driver_bfm fuse_ctrl_rst_in_agent_drv_bfm(fuse_ctrl_rst_in_agent_bus.initiator_port); + fuse_ctrl_core_axi_write_in_driver_bfm fuse_ctrl_core_axi_write_in_if_agent_drv_bfm(fuse_ctrl_core_axi_write_in_if_agent_bus.initiator_port); + fuse_ctrl_prim_axi_write_in_driver_bfm fuse_ctrl_prim_axi_write_in_if_agent_drv_bfm(fuse_ctrl_prim_axi_write_in_if_agent_bus.initiator_port); + fuse_ctrl_core_axi_read_in_driver_bfm fuse_ctrl_core_axi_read_in_if_agent_drv_bfm(fuse_ctrl_core_axi_read_in_if_agent_bus.initiator_port); + fuse_ctrl_prim_axi_read_in_driver_bfm fuse_ctrl_prim_axi_read_in_if_agent_drv_bfm(fuse_ctrl_prim_axi_read_in_if_agent_bus.initiator_port); + fuse_ctrl_secreg_axi_read_in_driver_bfm fuse_ctrl_secreg_axi_read_in_if_agent_drv_bfm(fuse_ctrl_secreg_axi_read_in_if_agent_bus.initiator_port); + fuse_ctrl_lc_otp_in_driver_bfm fuse_ctrl_lc_otp_in_if_agent_drv_bfm(fuse_ctrl_lc_otp_in_if_agent_bus.initiator_port); + fuse_ctrl_in_driver_bfm fuse_ctrl_in_if_agent_drv_bfm(fuse_ctrl_in_if_agent_bus.initiator_port); + + // pragma uvmf custom dut_instantiation begin + // UVMF_CHANGE_ME : Add DUT and connect to signals in _bus interfaces listed above + // Instantiate your DUT here + // These DUT's instantiated to show verilog and vhdl instantiation + //verilog_dut dut_verilog( .clk(clk), .rst(rst), .in_signal(vhdl_to_verilog_signal), .out_signal(verilog_to_vhdl_signal)); + //vhdl_dut dut_vhdl ( .clk(clk), .rst(rst), .in_signal(verilog_to_vhdl_signal), .out_signal(vhdl_to_verilog_signal)); + + otp_ctrl_top #( + .MemInitFile (MemInitFile) + ) dut ( + .clk_i (fuse_ctrl_rst_agent_bus.clk_i ), + .rst_ni (fuse_ctrl_rst_agent_bus.rst_ni ), + // edn + .clk_edn_i (edn_clk ), + .rst_edn_ni (edn_rst_n ), + .edn_o (fuse_ctrl_out_if_agent_bus.edn_o), //(edn_if[0].req ), + .edn_i (fuse_ctrl_in_if_agent_bus.edn_i), //({edn_if[0].ack, edn_if[0].d_data}), + // AXI interface + .s_core_axi_r_if (), + .s_core_axi_w_if (), + .s_prim_axi_r_if (), + .s_prim_axi_w_if (), + .s_secreg_axi_r_if (), + // interrupt + .intr_otp_operation_done_o (fuse_ctrl_out_if_agent_bus.intr_otp_operation_done), + .intr_otp_error_o (fuse_ctrl_out_if_agent_bus.intr_otp_error), + // alert + .alert_rx_i (fuse_ctrl_in_if_agent_bus.alert_rx_i ), //(alert_rx parameter logic [CoreAw-1:0] CALIPTRA_OTP_CTRL_ALERT_TEST_OFFSET = 13'h c; + .alert_tx_o (fuse_ctrl_out_if_agent_bus.alert_tx_o ), //(alert_tx ), + // ast + .obs_ctrl_i (fuse_ctrl_in_if_agent_bus.obs_ctrl_i), //(otp_ctrl_if.obs_ctrl_i), + .otp_obs_o (fuse_ctrl_out_if_agent_bus.otp_obs_o), + .otp_ast_pwr_seq_o (fuse_ctrl_out_if_agent_bus.otp_ast_pwr_seq_o), //(ast_req), + .otp_ast_pwr_seq_h_i (fuse_ctrl_out_if_agent_bus.otp_ast_pwr_seq_h_i), //(otp_ctrl_if.otp_ast_pwr_seq_h_i), + // pwrmgr + .pwr_otp_i (fuse_ctrl_in_if_agent_bus.pwr_otp_init_i), //(otp_ctrl_if.pwr_otp_init_i), + .pwr_otp_o (fuse_ctrl_out_if_agent_bus.pwr_otp_o), //({otp_ctrl_if.pwr_otp_done_o, otp_ctrl_if.pwr_otp_idle_o}), + // lc + .lc_otp_vendor_test_i (fuse_ctrl_lc_otp_in_if_agent_bus.lc_otp_vendor_test_i), //(otp_ctrl_if.otp_vendor_test_ctrl_i), + .lc_otp_vendor_test_o (fuse_ctrl_lc_otp_out_if_agent_bus.lc_otp_vendor_test_o), //(otp_ctrl_if.otp_vendor_test_status_o), + .lc_otp_program_i (fuse_ctrl_lc_otp_out_if_agent_bus.lc_otp_program_i), //({lc_prog_if.req, lc_prog_if.h_data}), + .lc_otp_program_o (fuse_ctrl_lc_otp_out_if_agent_bus.lc_otp_program_o), //({lc_prog_if.d_data, lc_prog_if.ack}), + //.lc_creator_seed_sw_rw_en_i (lc_creator_seed_sw_rw_en_i), //(otp_ctrl_if.lc_creator_seed_sw_rw_en_i), + //.lc_owner_seed_sw_rw_en_i (lc_owner_seed_sw_rw_en_i), //(otp_ctrl_if.lc_owner_seed_sw_rw_en_i), + //.lc_seed_hw_rd_en_i (lc_seed_hw_rd_en_i), //(otp_ctrl_if.lc_seed_hw_rd_en_i), + .lc_dft_en_i (fuse_ctrl_lc_otp_in_if_agent_bus.lc_dft_en_i), //(otp_ctrl_if.lc_dft_en_i), + .lc_escalate_en_i (fuse_ctrl_lc_otp_in_if_agent_bus.lc_escalate_en_i), //(otp_ctrl_if.lc_escalate_en_i), + .lc_check_byp_en_i (fuse_ctrl_lc_otp_in_if_agent_bus.lc_check_byp_en_i), //(otp_ctrl_if.lc_check_byp_en_i), + .otp_lc_data_o (fuse_ctrl_lc_otp_out_if_agent_bus.otp_lc_data_o), //(otp_ctrl_if.lc_data_o), + + + .otp_broadcast_o (fuse_ctrl_out_if_agent_bus.otp_broadcast_o), //(otp_ctrl_if.otp_broadcast_o), + .otp_ext_voltage_h_io (fuse_ctrl_in_if_agent_bus.otp_ext_voltage_h_io), + //scan + .scan_en_i (fuse_ctrl_in_if_agent_bus.scan_en_i), //(otp_ctrl_if.scan_en_i), + .scan_rst_ni (fuse_ctrl_in_if_agent_bus.scan_rst_ni), //(otp_ctrl_if.scan_rst_ni), + .scanmode_i (fuse_ctrl_in_if_agent_bus.scanmode_i), //(otp_ctrl_if.scanmode_i), + + // Test-related GPIO output + .cio_test_o (fuse_ctrl_out_if_agent_bus.cio_test_o), //(otp_ctrl_if.cio_test_o), + .cio_test_en_o (fuse_ctrl_out_if_agent_bus.cio_test_en_o) //(otp_ctrl_if.cio_test_en_o) + ); + // pragma uvmf custom dut_instantiation end + + initial begin // tbx vif_binding_block + import uvm_pkg::uvm_config_db; + // The monitor_bfm and driver_bfm for each interface is placed into the uvm_config_db. + // They are placed into the uvm_config_db using the string names defined in the parameters package. + // The string names are passed to the agent configurations by test_top through the top level configuration. + // They are retrieved by the agents configuration class for use by the agent. + uvm_config_db #( virtual fuse_ctrl_rst_in_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_rst_in_agent_BFM , fuse_ctrl_rst_in_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_rst_out_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_rst_out_agent_BFM , fuse_ctrl_rst_out_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_write_in_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_write_in_if_agent_BFM , fuse_ctrl_core_axi_write_in_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_write_out_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_write_out_if_agent_BFM , fuse_ctrl_core_axi_write_out_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_write_in_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_write_in_if_agent_BFM , fuse_ctrl_prim_axi_write_in_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_write_out_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_write_out_if_agent_BFM , fuse_ctrl_prim_axi_write_out_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_read_in_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_read_in_if_agent_BFM , fuse_ctrl_core_axi_read_in_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_read_out_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_read_out_if_agent_BFM , fuse_ctrl_core_axi_read_out_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_read_in_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_read_in_if_agent_BFM , fuse_ctrl_prim_axi_read_in_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_read_out_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_read_out_if_agent_BFM , fuse_ctrl_prim_axi_read_out_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_secreg_axi_read_in_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_secreg_axi_read_in_if_agent_BFM , fuse_ctrl_secreg_axi_read_in_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_secreg_axi_read_out_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_secreg_axi_read_out_if_agent_BFM , fuse_ctrl_secreg_axi_read_out_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_lc_otp_in_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_lc_otp_in_if_agent_BFM , fuse_ctrl_lc_otp_in_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_lc_otp_out_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_lc_otp_out_if_agent_BFM , fuse_ctrl_lc_otp_out_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_in_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_in_if_agent_BFM , fuse_ctrl_in_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_out_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_out_if_agent_BFM , fuse_ctrl_out_if_agent_mon_bfm ); + uvm_config_db #( virtual fuse_ctrl_rst_in_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_rst_in_agent_BFM , fuse_ctrl_rst_in_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_write_in_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_write_in_if_agent_BFM , fuse_ctrl_core_axi_write_in_if_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_write_in_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_write_in_if_agent_BFM , fuse_ctrl_prim_axi_write_in_if_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_core_axi_read_in_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_core_axi_read_in_if_agent_BFM , fuse_ctrl_core_axi_read_in_if_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_prim_axi_read_in_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_prim_axi_read_in_if_agent_BFM , fuse_ctrl_prim_axi_read_in_if_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_secreg_axi_read_in_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_secreg_axi_read_in_if_agent_BFM , fuse_ctrl_secreg_axi_read_in_if_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_lc_otp_in_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_lc_otp_in_if_agent_BFM , fuse_ctrl_lc_otp_in_if_agent_drv_bfm ); + uvm_config_db #( virtual fuse_ctrl_in_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , fuse_ctrl_in_if_agent_BFM , fuse_ctrl_in_if_agent_drv_bfm ); + end + +endmodule + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/hdl_top.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/hdl_top.vinfo new file mode 100644 index 000000000..b39169a56 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/hdl_top.vinfo @@ -0,0 +1,20 @@ +@use $UVMF_PROJECT_DIR/rtl/verilog/verilog_dut.vinfo +@use $UVMF_PROJECT_DIR/tb/parameters/fuse_ctrl_parameters_pkg.vinfo +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo +hdl_top.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/hvl_top.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/hvl_top.compile new file mode 100644 index 000000000..040488764 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/hvl_top.compile @@ -0,0 +1,7 @@ +incdir: + - ${uvm_path}/src + - . +needs: + - ../tests/fuse_ctrl_tests_pkg.compile +src: + - hvl_top.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/hvl_top.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/hvl_top.sv new file mode 100644 index 000000000..68e3fc6f6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/hvl_top.sv @@ -0,0 +1,47 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +// +// DESCRIPTION: This module loads the test package and starts the UVM phases. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +module hvl_top; + +import uvm_pkg::*; +import fuse_ctrl_tests_pkg::*; + + // pragma uvmf custom module_item_additional begin + // pragma uvmf custom module_item_additional end + + initial begin + $timeformat(-9,3,"ns",5); + run_test(); + end + +endmodule + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/hvl_top.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/hvl_top.vinfo new file mode 100644 index 000000000..31185e42f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/hvl_top.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_PROJECT_DIR/tb/tests/fuse_ctrl_tests_pkg.vinfo +hvl_top.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/top_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/top_filelist_hdl.f new file mode 100644 index 000000000..1e9dab653 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/top_filelist_hdl.f @@ -0,0 +1,3 @@ +$UVMF_PROJECT_DIR/tb/testbench/hdl_top.sv +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/top_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/top_filelist_hvl.f new file mode 100644 index 000000000..42383ab2d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/testbench/top_filelist_hvl.f @@ -0,0 +1,3 @@ +$UVMF_PROJECT_DIR/tb/testbench/hvl_top.sv +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.compile new file mode 100644 index 000000000..c75585199 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.compile @@ -0,0 +1,23 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile + - ../../../../verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile + - ../../../../verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile + - ../parameters/fuse_ctrl_parameters_pkg.compile + - ../sequences/fuse_ctrl_sequences_pkg.compile +src: + - fuse_ctrl_tests_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.sv new file mode 100644 index 000000000..05f83c5e9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.sv @@ -0,0 +1,96 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This package contains all tests currently written for +// the simulation project. Once compiled, any test can be selected +// from the vsim command line using +UVM_TESTNAME=yourTestNameHere +// +// CONTAINS: +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +package fuse_ctrl_tests_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg::*; + import fuse_ctrl_parameters_pkg::*; + import fuse_ctrl_env_pkg::*; + import fuse_ctrl_sequences_pkg::*; + import fuse_ctrl_rst_in_pkg::*; + import fuse_ctrl_rst_in_pkg_hdl::*; + import fuse_ctrl_rst_out_pkg::*; + import fuse_ctrl_rst_out_pkg_hdl::*; + import fuse_ctrl_core_axi_write_in_pkg::*; + import fuse_ctrl_core_axi_write_in_pkg_hdl::*; + import fuse_ctrl_core_axi_write_out_pkg::*; + import fuse_ctrl_core_axi_write_out_pkg_hdl::*; + import fuse_ctrl_prim_axi_write_in_pkg::*; + import fuse_ctrl_prim_axi_write_in_pkg_hdl::*; + import fuse_ctrl_prim_axi_write_out_pkg::*; + import fuse_ctrl_prim_axi_write_out_pkg_hdl::*; + import fuse_ctrl_core_axi_read_in_pkg::*; + import fuse_ctrl_core_axi_read_in_pkg_hdl::*; + import fuse_ctrl_core_axi_read_out_pkg::*; + import fuse_ctrl_core_axi_read_out_pkg_hdl::*; + import fuse_ctrl_prim_axi_read_in_pkg::*; + import fuse_ctrl_prim_axi_read_in_pkg_hdl::*; + import fuse_ctrl_prim_axi_read_out_pkg::*; + import fuse_ctrl_prim_axi_read_out_pkg_hdl::*; + import fuse_ctrl_secreg_axi_read_in_pkg::*; + import fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; + import fuse_ctrl_secreg_axi_read_out_pkg::*; + import fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; + import fuse_ctrl_lc_otp_in_pkg::*; + import fuse_ctrl_lc_otp_in_pkg_hdl::*; + import fuse_ctrl_lc_otp_out_pkg::*; + import fuse_ctrl_lc_otp_out_pkg_hdl::*; + import fuse_ctrl_in_pkg::*; + import fuse_ctrl_in_pkg_hdl::*; + import fuse_ctrl_out_pkg::*; + import fuse_ctrl_out_pkg_hdl::*; + + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + `include "src/test_top.svh" + `include "src/register_test.svh" + `include "src/example_derived_test.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new tests to the src directory + // be sure to add the test file here so that it will be + // compiled as part of the test package. Be sure to place + // the new test after any base tests of the new test. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.vinfo new file mode 100644 index 000000000..651052b39 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/tests/fuse_ctrl_tests_pkg.vinfo @@ -0,0 +1,22 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo +@use $UVMF_PROJECT_DIR/tb/parameters/fuse_ctrl_parameters_pkg.vinfo +@use $UVMF_PROJECT_DIR/tb/sequences/fuse_ctrl_sequences_pkg.vinfo ++incdir+@vinfodir +fuse_ctrl_tests_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/tests/src/example_derived_test.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/tests/src/example_derived_test.svh new file mode 100644 index 000000000..82d6c45ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/tests/src/example_derived_test.svh @@ -0,0 +1,57 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This test extends test_top and makes +// changes to test_top using the UVM factory type_override: +// +// Test scenario: +// This is a template test that can be used to create future tests. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class example_derived_test extends test_top; + + `uvm_component_utils( example_derived_test ); + + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + + virtual function void build_phase(uvm_phase phase); + // The factory override below is an example of how to replace the fuse_ctrl_bench_sequence_base + // sequence with the example_derived_test_sequence. + fuse_ctrl_bench_sequence_base::type_id::set_type_override(example_derived_test_sequence::get_type()); + // Execute the build_phase of test_top AFTER all factory overrides have been created. + super.build_phase(phase); + // pragma uvmf custom configuration_settings_post_randomize begin + // UVMF_CHANGE_ME Test specific configuration values can be set here. + // The configuration structure has already been randomized. + // pragma uvmf custom configuration_settings_post_randomize end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/tests/src/register_test.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/tests/src/register_test.svh new file mode 100644 index 000000000..1be722286 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/tests/src/register_test.svh @@ -0,0 +1,54 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This test extends test_top and makes +// changes to test_top using the UVM factory type_override: +// +// Test scenario: +// This is a template test that can be used to create future tests. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class register_test extends test_top; + + `uvm_component_utils( register_test ); + + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + + virtual function void build_phase(uvm_phase phase); + // The factory override below replaces the fuse_ctrl_bench_sequence_base + // sequence with the register_test_sequence. + fuse_ctrl_bench_sequence_base::type_id::set_type_override(register_test_sequence::get_type()); + // Execute the build_phase of test_top AFTER all factory overrides have been created. + super.build_phase(phase); + endfunction + + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/tests/src/test_top.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/tests/src/test_top.svh new file mode 100644 index 000000000..f5b1c3c68 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/tb/tests/src/test_top.svh @@ -0,0 +1,120 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// Description: This top level UVM test is the base class for all +// future tests created for this project. +// +// This test class contains: +// Configuration: The top level configuration for the project. +// Environment: The top level environment for the project. +// Top_level_sequence: The top level sequence for the project. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +typedef fuse_ctrl_env_configuration fuse_ctrl_env_configuration_t; +typedef fuse_ctrl_environment fuse_ctrl_environment_t; + +class test_top extends uvmf_test_base #(.CONFIG_T(fuse_ctrl_env_configuration_t), + .ENV_T(fuse_ctrl_environment_t), + .TOP_LEVEL_SEQ_T(fuse_ctrl_bench_sequence_base)); + + `uvm_component_utils( test_top ); + + + + string interface_names[] = { + fuse_ctrl_rst_in_agent_BFM /* fuse_ctrl_rst_in_agent [0] */ , + fuse_ctrl_rst_out_agent_BFM /* fuse_ctrl_rst_out_agent [1] */ , + fuse_ctrl_core_axi_write_in_if_agent_BFM /* fuse_ctrl_core_axi_write_in_if_agent [2] */ , + fuse_ctrl_core_axi_write_out_if_agent_BFM /* fuse_ctrl_core_axi_write_out_if_agent [3] */ , + fuse_ctrl_prim_axi_write_in_if_agent_BFM /* fuse_ctrl_prim_axi_write_in_if_agent [4] */ , + fuse_ctrl_prim_axi_write_out_if_agent_BFM /* fuse_ctrl_prim_axi_write_out_if_agent [5] */ , + fuse_ctrl_core_axi_read_in_if_agent_BFM /* fuse_ctrl_core_axi_read_in_if_agent [6] */ , + fuse_ctrl_core_axi_read_out_if_agent_BFM /* fuse_ctrl_core_axi_read_out_if_agent [7] */ , + fuse_ctrl_prim_axi_read_in_if_agent_BFM /* fuse_ctrl_prim_axi_read_in_if_agent [8] */ , + fuse_ctrl_prim_axi_read_out_if_agent_BFM /* fuse_ctrl_prim_axi_read_out_if_agent [9] */ , + fuse_ctrl_secreg_axi_read_in_if_agent_BFM /* fuse_ctrl_secreg_axi_read_in_if_agent [10] */ , + fuse_ctrl_secreg_axi_read_out_if_agent_BFM /* fuse_ctrl_secreg_axi_read_out_if_agent [11] */ , + fuse_ctrl_lc_otp_in_if_agent_BFM /* fuse_ctrl_lc_otp_in_if_agent [12] */ , + fuse_ctrl_lc_otp_out_if_agent_BFM /* fuse_ctrl_lc_otp_out_if_agent [13] */ , + fuse_ctrl_in_if_agent_BFM /* fuse_ctrl_in_if_agent [14] */ , + fuse_ctrl_out_if_agent_BFM /* fuse_ctrl_out_if_agent [15] */ +}; + +uvmf_active_passive_t interface_activities[] = { + ACTIVE /* fuse_ctrl_rst_in_agent [0] */ , + PASSIVE /* fuse_ctrl_rst_out_agent [1] */ , + ACTIVE /* fuse_ctrl_core_axi_write_in_if_agent [2] */ , + PASSIVE /* fuse_ctrl_core_axi_write_out_if_agent [3] */ , + ACTIVE /* fuse_ctrl_prim_axi_write_in_if_agent [4] */ , + PASSIVE /* fuse_ctrl_prim_axi_write_out_if_agent [5] */ , + ACTIVE /* fuse_ctrl_core_axi_read_in_if_agent [6] */ , + PASSIVE /* fuse_ctrl_core_axi_read_out_if_agent [7] */ , + ACTIVE /* fuse_ctrl_prim_axi_read_in_if_agent [8] */ , + PASSIVE /* fuse_ctrl_prim_axi_read_out_if_agent [9] */ , + ACTIVE /* fuse_ctrl_secreg_axi_read_in_if_agent [10] */ , + PASSIVE /* fuse_ctrl_secreg_axi_read_out_if_agent [11] */ , + ACTIVE /* fuse_ctrl_lc_otp_in_if_agent [12] */ , + PASSIVE /* fuse_ctrl_lc_otp_out_if_agent [13] */ , + ACTIVE /* fuse_ctrl_in_if_agent [14] */ , + PASSIVE /* fuse_ctrl_out_if_agent [15] */ }; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // FUNCTION: new() + // This is the standard systemVerilog constructor. All components are + // constructed in the build_phase to allow factory overriding. + // + function new( string name = "", uvm_component parent = null ); + super.new( name ,parent ); + endfunction + + + + // **************************************************************************** + // FUNCTION: build_phase() + // The construction of the configuration and environment classes is done in + // the build_phase of uvmf_test_base. Once the configuraton and environment + // classes are built then the initialize call is made to perform the + // following: + // Monitor and driver BFM virtual interface handle passing into agents + // Set the active/passive state for each agent + // Once this build_phase completes, the build_phase of the environment is + // executed which builds the agents. + // + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + // pragma uvmf custom configuration_settings_post_randomize begin + // pragma uvmf custom configuration_settings_post_randomize end + configuration.initialize(NA, "uvm_test_top.environment", interface_names, null, interface_activities); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/yaml/fuse_ctrl_bench.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/yaml/fuse_ctrl_bench.yaml new file mode 100644 index 000000000..24489d9b8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/project_benches/fuse_ctrl/yaml/fuse_ctrl_bench.yaml @@ -0,0 +1,45 @@ +uvmf: + benches: + fuse_ctrl: + active_passive: + - bfm_name: fuse_ctrl_rst_in_agent + value: ACTIVE + - bfm_name: fuse_ctrl_rst_out_agent + value: PASSIVE + - bfm_name: fuse_ctrl_core_axi_write_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_core_axi_write_out_if_agent + value: PASSIVE + - bfm_name: fuse_ctrl_prim_axi_write_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_prim_axi_write_out_if_agent + value: PASSIVE + - bfm_name: fuse_ctrl_core_axi_read_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_core_axi_read_out_if_agent + value: PASSIVE + - bfm_name: fuse_ctrl_prim_axi_read_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_prim_axi_read_out_if_agent + value: PASSIVE + - bfm_name: fuse_ctrl_secreg_axi_read_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_secreg_axi_read_out_if_agent + value: PASSIVE + - bfm_name: fuse_ctrl_lc_otp_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_lc_otp_out_if_agent + value: PASSIVE + - bfm_name: fuse_ctrl_in_if_agent + value: ACTIVE + - bfm_name: fuse_ctrl_out_if_agent + value: PASSIVE + active_passive_default: ACTIVE + clock_half_period: 5ns + clock_phase_offset: 0ns + existing_library_component: 'True' + interface_params: [] + reset_assertion_level: 'False' + reset_duration: 200ns + top_env: fuse_ctrl + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/.project new file mode 100644 index 000000000..ec64afa4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/.project @@ -0,0 +1,32 @@ + + + fuse_ctrl_env_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/.svproject new file mode 100644 index 000000000..bcfe6ac3d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/Makefile new file mode 100644 index 000000000..4cf61d51d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/Makefile @@ -0,0 +1,56 @@ +# fuse_ctrl environment packages source and make target + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +# Include all requisite sub-environment package targets for this bench + +fuse_ctrl_ENV_PKG =\ + $(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv + +COMP_fuse_ctrl_PKG_TGT_0 = q_comp_fuse_ctrl_env_pkg +COMP_fuse_ctrl_PKG_TGT_1 = v_comp_fuse_ctrl_env_pkg +COMP_fuse_ctrl_PKG_TGT = $(COMP_fuse_ctrl_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_env_pkg: $(COMP_fuse_ctrl_PKG_TGT) + +q_comp_fuse_ctrl_env_pkg: + $(HVL_COMP_CMD) +incdir+$(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg $(fuse_ctrl_ENV_PKG) + +v_comp_fuse_ctrl_env_pkg: q_comp_fuse_ctrl_env_pkg + $(VELANALYZE_HVL_CMD) +incdir+$(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg $(fuse_ctrl_ENV_PKG) + + + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_ENV_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/environment_packages/fuse_ctrl_env_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_env_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_env_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_env_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_env_pkg += -I$(fuse_ctrl_ENV_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_env_pkg += $(fuse_ctrl_ENV_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_env_pkg += \ + \ + -o .so + +comp_fuse_ctrl_env_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Environment C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_env_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_env_pkg) + @echo "--------------------------------" + @echo "Linking Environment C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_env_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_env_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/compile.do new file mode 100644 index 000000000..05dca66cc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/compile.do @@ -0,0 +1,12 @@ +# Tcl do file for compile of fuse_ctrl interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + + +quietly set cmd [format "vlog -timescale 1ps/1ps +incdir+%s/environment_packages/fuse_ctrl_env_pkg" $env(UVMF_VIP_LIBRARY_HOME)] +quietly set cmd [format "%s %s/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv" $cmd $env(UVMF_VIP_LIBRARY_HOME)] +eval $cmd + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile new file mode 100644 index 000000000..7bd08d6b2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.compile @@ -0,0 +1,22 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile + - ../../../verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hvl.compile + +src: + - fuse_ctrl_env_pkg.sv + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv new file mode 100644 index 000000000..e9b702999 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.sv @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// environment package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_env_pkg; + + import uvm_pkg::*; + `include "uvm_macros.svh" + import uvmf_base_pkg::*; + import fuse_ctrl_rst_in_pkg::*; + import fuse_ctrl_rst_in_pkg_hdl::*; + import fuse_ctrl_rst_out_pkg::*; + import fuse_ctrl_rst_out_pkg_hdl::*; + import fuse_ctrl_core_axi_write_in_pkg::*; + import fuse_ctrl_core_axi_write_in_pkg_hdl::*; + import fuse_ctrl_core_axi_write_out_pkg::*; + import fuse_ctrl_core_axi_write_out_pkg_hdl::*; + import fuse_ctrl_prim_axi_write_in_pkg::*; + import fuse_ctrl_prim_axi_write_in_pkg_hdl::*; + import fuse_ctrl_prim_axi_write_out_pkg::*; + import fuse_ctrl_prim_axi_write_out_pkg_hdl::*; + import fuse_ctrl_core_axi_read_in_pkg::*; + import fuse_ctrl_core_axi_read_in_pkg_hdl::*; + import fuse_ctrl_core_axi_read_out_pkg::*; + import fuse_ctrl_core_axi_read_out_pkg_hdl::*; + import fuse_ctrl_prim_axi_read_in_pkg::*; + import fuse_ctrl_prim_axi_read_in_pkg_hdl::*; + import fuse_ctrl_prim_axi_read_out_pkg::*; + import fuse_ctrl_prim_axi_read_out_pkg_hdl::*; + import fuse_ctrl_secreg_axi_read_in_pkg::*; + import fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; + import fuse_ctrl_secreg_axi_read_out_pkg::*; + import fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; + import fuse_ctrl_lc_otp_in_pkg::*; + import fuse_ctrl_lc_otp_in_pkg_hdl::*; + import fuse_ctrl_lc_otp_out_pkg::*; + import fuse_ctrl_lc_otp_out_pkg_hdl::*; + import fuse_ctrl_in_pkg::*; + import fuse_ctrl_in_pkg_hdl::*; + import fuse_ctrl_out_pkg::*; + import fuse_ctrl_out_pkg_hdl::*; + + `uvm_analysis_imp_decl(_fuse_ctrl_rst_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_core_axi_write_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_prim_axi_write_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_core_axi_read_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_prim_axi_read_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_secreg_axi_read_agent_ae) + `uvm_analysis_imp_decl(_fuse_ctrl_lc_otp_if_agent_ae) + `uvm_analysis_imp_decl(_expected_analysis_export) + `uvm_analysis_imp_decl(_actual_analysis_export) + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_env_typedefs.svh" + `include "src/fuse_ctrl_env_configuration.svh" + `include "src/fuse_ctrl_predictor.svh" + `include "src/fuse_ctrl_scoreboard.svh" + `include "src/fuse_ctrl_environment.svh" + `include "src/fuse_ctrl_env_sequence_base.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new environment level sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the environment package. Be sure to place + // the new sequence after any base sequence of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo new file mode 100644 index 000000000..f4f985fef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg.vinfo @@ -0,0 +1,19 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo +@use $UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo ++incdir+@vinfodir +fuse_ctrl_env_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F new file mode 100644 index 000000000..b40213df3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/fuse_ctrl_env_pkg_sve.F @@ -0,0 +1,12 @@ + +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + +// Sub-Environments + ++incdir+. +./fuse_ctrl_env_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_configuration.svh new file mode 100644 index 000000000..1f5b77d61 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_configuration.svh @@ -0,0 +1,261 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: THis is the configuration for the fuse_ctrl environment. +// it contains configuration classes for each agent. It also contains +// environment level configuration variables. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_env_configuration +extends uvmf_environment_configuration_base; + + `uvm_object_utils( fuse_ctrl_env_configuration ) + + +//Constraints for the configuration variables: + + + covergroup fuse_ctrl_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + + typedef fuse_ctrl_rst_in_configuration fuse_ctrl_rst_in_agent_config_t; + rand fuse_ctrl_rst_in_agent_config_t fuse_ctrl_rst_in_agent_config; + + typedef fuse_ctrl_rst_out_configuration fuse_ctrl_rst_out_agent_config_t; + rand fuse_ctrl_rst_out_agent_config_t fuse_ctrl_rst_out_agent_config; + + typedef fuse_ctrl_core_axi_write_in_configuration fuse_ctrl_core_axi_write_in_if_agent_config_t; + rand fuse_ctrl_core_axi_write_in_if_agent_config_t fuse_ctrl_core_axi_write_in_if_agent_config; + + typedef fuse_ctrl_core_axi_write_out_configuration fuse_ctrl_core_axi_write_out_if_agent_config_t; + rand fuse_ctrl_core_axi_write_out_if_agent_config_t fuse_ctrl_core_axi_write_out_if_agent_config; + + typedef fuse_ctrl_prim_axi_write_in_configuration fuse_ctrl_prim_axi_write_in_if_agent_config_t; + rand fuse_ctrl_prim_axi_write_in_if_agent_config_t fuse_ctrl_prim_axi_write_in_if_agent_config; + + typedef fuse_ctrl_prim_axi_write_out_configuration fuse_ctrl_prim_axi_write_out_if_agent_config_t; + rand fuse_ctrl_prim_axi_write_out_if_agent_config_t fuse_ctrl_prim_axi_write_out_if_agent_config; + + typedef fuse_ctrl_core_axi_read_in_configuration fuse_ctrl_core_axi_read_in_if_agent_config_t; + rand fuse_ctrl_core_axi_read_in_if_agent_config_t fuse_ctrl_core_axi_read_in_if_agent_config; + + typedef fuse_ctrl_core_axi_read_out_configuration fuse_ctrl_core_axi_read_out_if_agent_config_t; + rand fuse_ctrl_core_axi_read_out_if_agent_config_t fuse_ctrl_core_axi_read_out_if_agent_config; + + typedef fuse_ctrl_prim_axi_read_in_configuration fuse_ctrl_prim_axi_read_in_if_agent_config_t; + rand fuse_ctrl_prim_axi_read_in_if_agent_config_t fuse_ctrl_prim_axi_read_in_if_agent_config; + + typedef fuse_ctrl_prim_axi_read_out_configuration fuse_ctrl_prim_axi_read_out_if_agent_config_t; + rand fuse_ctrl_prim_axi_read_out_if_agent_config_t fuse_ctrl_prim_axi_read_out_if_agent_config; + + typedef fuse_ctrl_secreg_axi_read_in_configuration fuse_ctrl_secreg_axi_read_in_if_agent_config_t; + rand fuse_ctrl_secreg_axi_read_in_if_agent_config_t fuse_ctrl_secreg_axi_read_in_if_agent_config; + + typedef fuse_ctrl_secreg_axi_read_out_configuration fuse_ctrl_secreg_axi_read_out_if_agent_config_t; + rand fuse_ctrl_secreg_axi_read_out_if_agent_config_t fuse_ctrl_secreg_axi_read_out_if_agent_config; + + typedef fuse_ctrl_lc_otp_in_configuration fuse_ctrl_lc_otp_in_if_agent_config_t; + rand fuse_ctrl_lc_otp_in_if_agent_config_t fuse_ctrl_lc_otp_in_if_agent_config; + + typedef fuse_ctrl_lc_otp_out_configuration fuse_ctrl_lc_otp_out_if_agent_config_t; + rand fuse_ctrl_lc_otp_out_if_agent_config_t fuse_ctrl_lc_otp_out_if_agent_config; + + typedef fuse_ctrl_in_configuration fuse_ctrl_in_if_agent_config_t; + rand fuse_ctrl_in_if_agent_config_t fuse_ctrl_in_if_agent_config; + + typedef fuse_ctrl_out_configuration fuse_ctrl_out_if_agent_config_t; + rand fuse_ctrl_out_if_agent_config_t fuse_ctrl_out_if_agent_config; + + + + + typedef uvmf_virtual_sequencer_base #(.CONFIG_T(fuse_ctrl_env_configuration)) fuse_ctrl_vsqr_t; + fuse_ctrl_vsqr_t vsqr; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// This function constructs the configuration object for each agent in the environment. +// + function new( string name = "" ); + super.new( name ); + + + fuse_ctrl_rst_in_agent_config = fuse_ctrl_rst_in_agent_config_t::type_id::create("fuse_ctrl_rst_in_agent_config"); + fuse_ctrl_rst_out_agent_config = fuse_ctrl_rst_out_agent_config_t::type_id::create("fuse_ctrl_rst_out_agent_config"); + fuse_ctrl_core_axi_write_in_if_agent_config = fuse_ctrl_core_axi_write_in_if_agent_config_t::type_id::create("fuse_ctrl_core_axi_write_in_if_agent_config"); + fuse_ctrl_core_axi_write_out_if_agent_config = fuse_ctrl_core_axi_write_out_if_agent_config_t::type_id::create("fuse_ctrl_core_axi_write_out_if_agent_config"); + fuse_ctrl_prim_axi_write_in_if_agent_config = fuse_ctrl_prim_axi_write_in_if_agent_config_t::type_id::create("fuse_ctrl_prim_axi_write_in_if_agent_config"); + fuse_ctrl_prim_axi_write_out_if_agent_config = fuse_ctrl_prim_axi_write_out_if_agent_config_t::type_id::create("fuse_ctrl_prim_axi_write_out_if_agent_config"); + fuse_ctrl_core_axi_read_in_if_agent_config = fuse_ctrl_core_axi_read_in_if_agent_config_t::type_id::create("fuse_ctrl_core_axi_read_in_if_agent_config"); + fuse_ctrl_core_axi_read_out_if_agent_config = fuse_ctrl_core_axi_read_out_if_agent_config_t::type_id::create("fuse_ctrl_core_axi_read_out_if_agent_config"); + fuse_ctrl_prim_axi_read_in_if_agent_config = fuse_ctrl_prim_axi_read_in_if_agent_config_t::type_id::create("fuse_ctrl_prim_axi_read_in_if_agent_config"); + fuse_ctrl_prim_axi_read_out_if_agent_config = fuse_ctrl_prim_axi_read_out_if_agent_config_t::type_id::create("fuse_ctrl_prim_axi_read_out_if_agent_config"); + fuse_ctrl_secreg_axi_read_in_if_agent_config = fuse_ctrl_secreg_axi_read_in_if_agent_config_t::type_id::create("fuse_ctrl_secreg_axi_read_in_if_agent_config"); + fuse_ctrl_secreg_axi_read_out_if_agent_config = fuse_ctrl_secreg_axi_read_out_if_agent_config_t::type_id::create("fuse_ctrl_secreg_axi_read_out_if_agent_config"); + fuse_ctrl_lc_otp_in_if_agent_config = fuse_ctrl_lc_otp_in_if_agent_config_t::type_id::create("fuse_ctrl_lc_otp_in_if_agent_config"); + fuse_ctrl_lc_otp_out_if_agent_config = fuse_ctrl_lc_otp_out_if_agent_config_t::type_id::create("fuse_ctrl_lc_otp_out_if_agent_config"); + fuse_ctrl_in_if_agent_config = fuse_ctrl_in_if_agent_config_t::type_id::create("fuse_ctrl_in_if_agent_config"); + fuse_ctrl_out_if_agent_config = fuse_ctrl_out_if_agent_config_t::type_id::create("fuse_ctrl_out_if_agent_config"); + + + fuse_ctrl_configuration_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that configuration variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + + // pragma uvmf custom new begin + // pragma uvmf custom new end + endfunction + +// **************************************************************************** +// FUNCTION : set_vsqr() +// This function is used to assign the vsqr handle. + virtual function void set_vsqr( fuse_ctrl_vsqr_t vsqr); + this.vsqr = vsqr; + endfunction : set_vsqr + +// **************************************************************************** +// FUNCTION: post_randomize() +// This function is automatically called after the randomize() function +// is executed. +// + function void post_randomize(); + super.post_randomize(); + // pragma uvmf custom post_randomize begin + // pragma uvmf custom post_randomize end + endfunction + +// **************************************************************************** +// FUNCTION: convert2string() +// This function converts all variables in this class to a single string for +// logfile reporting. This function concatenates the convert2string result for +// each agent configuration in this configuration class. +// + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + return { + + "\n", fuse_ctrl_rst_agent_config.convert2string, + "\n", fuse_ctrl_core_axi_write_agent_config.convert2string, + "\n", fuse_ctrl_prim_axi_write_agent_config.convert2string, + "\n", fuse_ctrl_core_axi_read_agent_config.convert2string, + "\n", fuse_ctrl_prim_axi_read_agent_config.convert2string, + "\n", fuse_ctrl_secreg_axi_read_agent_config.convert2string, + "\n", fuse_ctrl_lc_otp_if_agent_config.convert2string + + + }; + // pragma uvmf custom convert2string end + endfunction +// **************************************************************************** +// FUNCTION: initialize(); +// This function configures each interface agents configuration class. The +// sim level determines the active/passive state of the agent. The environment_path +// identifies the hierarchy down to and including the instantiation name of the +// environment for this configuration class. Each instance of the environment +// has its own configuration class. The string interface names are used by +// the agent configurations to identify the virtual interface handle to pull from +// the uvm_config_db. +// + function void initialize(uvmf_sim_level_t sim_level, + string environment_path, + string interface_names[], + uvm_reg_block register_model = null, + uvmf_active_passive_t interface_activity[] = {} + ); + + super.initialize(sim_level, environment_path, interface_names, register_model, interface_activity); + + + + // Interface initialization for local agents + fuse_ctrl_rst_in_agent_config.initialize( interface_activity[0], {environment_path,".fuse_ctrl_rst_in_agent"}, interface_names[0]); + fuse_ctrl_rst_in_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_rst_in_agent_config.has_coverage = 1; + fuse_ctrl_rst_out_agent_config.initialize( interface_activity[1], {environment_path,".fuse_ctrl_rst_out_agent"}, interface_names[1]); + fuse_ctrl_rst_out_agent_config.initiator_responder = RESPONDER; + // fuse_ctrl_rst_out_agent_config.has_coverage = 1; + fuse_ctrl_core_axi_write_in_if_agent_config.initialize( interface_activity[2], {environment_path,".fuse_ctrl_core_axi_write_in_if_agent"}, interface_names[2]); + fuse_ctrl_core_axi_write_in_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_core_axi_write_in_if_agent_config.has_coverage = 1; + fuse_ctrl_core_axi_write_out_if_agent_config.initialize( interface_activity[3], {environment_path,".fuse_ctrl_core_axi_write_out_if_agent"}, interface_names[3]); + fuse_ctrl_core_axi_write_out_if_agent_config.initiator_responder = RESPONDER; + // fuse_ctrl_core_axi_write_out_if_agent_config.has_coverage = 1; + fuse_ctrl_prim_axi_write_in_if_agent_config.initialize( interface_activity[4], {environment_path,".fuse_ctrl_prim_axi_write_in_if_agent"}, interface_names[4]); + fuse_ctrl_prim_axi_write_in_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_prim_axi_write_in_if_agent_config.has_coverage = 1; + fuse_ctrl_prim_axi_write_out_if_agent_config.initialize( interface_activity[5], {environment_path,".fuse_ctrl_prim_axi_write_out_if_agent"}, interface_names[5]); + fuse_ctrl_prim_axi_write_out_if_agent_config.initiator_responder = RESPONDER; + // fuse_ctrl_prim_axi_write_out_if_agent_config.has_coverage = 1; + fuse_ctrl_core_axi_read_in_if_agent_config.initialize( interface_activity[6], {environment_path,".fuse_ctrl_core_axi_read_in_if_agent"}, interface_names[6]); + fuse_ctrl_core_axi_read_in_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_core_axi_read_in_if_agent_config.has_coverage = 1; + fuse_ctrl_core_axi_read_out_if_agent_config.initialize( interface_activity[7], {environment_path,".fuse_ctrl_core_axi_read_out_if_agent"}, interface_names[7]); + fuse_ctrl_core_axi_read_out_if_agent_config.initiator_responder = RESPONDER; + // fuse_ctrl_core_axi_read_out_if_agent_config.has_coverage = 1; + fuse_ctrl_prim_axi_read_in_if_agent_config.initialize( interface_activity[8], {environment_path,".fuse_ctrl_prim_axi_read_in_if_agent"}, interface_names[8]); + fuse_ctrl_prim_axi_read_in_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_prim_axi_read_in_if_agent_config.has_coverage = 1; + fuse_ctrl_prim_axi_read_out_if_agent_config.initialize( interface_activity[9], {environment_path,".fuse_ctrl_prim_axi_read_out_if_agent"}, interface_names[9]); + fuse_ctrl_prim_axi_read_out_if_agent_config.initiator_responder = RESPONDER; + // fuse_ctrl_prim_axi_read_out_if_agent_config.has_coverage = 1; + fuse_ctrl_secreg_axi_read_in_if_agent_config.initialize( interface_activity[10], {environment_path,".fuse_ctrl_secreg_axi_read_in_if_agent"}, interface_names[10]); + fuse_ctrl_secreg_axi_read_in_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_secreg_axi_read_in_if_agent_config.has_coverage = 1; + fuse_ctrl_secreg_axi_read_out_if_agent_config.initialize( interface_activity[11], {environment_path,".fuse_ctrl_secreg_axi_read_out_if_agent"}, interface_names[11]); + fuse_ctrl_secreg_axi_read_out_if_agent_config.initiator_responder = RESPONDER; + // fuse_ctrl_secreg_axi_read_out_if_agent_config.has_coverage = 1; + fuse_ctrl_lc_otp_in_if_agent_config.initialize( interface_activity[12], {environment_path,".fuse_ctrl_lc_otp_in_if_agent"}, interface_names[12]); + fuse_ctrl_lc_otp_in_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_lc_otp_in_if_agent_config.has_coverage = 1; + fuse_ctrl_lc_otp_out_if_agent_config.initialize( interface_activity[13], {environment_path,".fuse_ctrl_lc_otp_out_if_agent"}, interface_names[13]); + fuse_ctrl_lc_otp_out_if_agent_config.initiator_responder = RESPONDER; + // fuse_ctrl_lc_otp_out_if_agent_config.has_coverage = 1; + fuse_ctrl_in_if_agent_config.initialize( interface_activity[14], {environment_path,".fuse_ctrl_in_if_agent"}, interface_names[14]); + fuse_ctrl_in_if_agent_config.initiator_responder = INITIATOR; + // fuse_ctrl_in_if_agent_config.has_coverage = 1; + fuse_ctrl_out_if_agent_config.initialize( interface_activity[15], {environment_path,".fuse_ctrl_out_if_agent"}, interface_names[15]); + fuse_ctrl_out_if_agent_config.initiator_responder = RESPONDER; + // fuse_ctrl_out_if_agent_config.has_coverage = 1; + + + + + + // pragma uvmf custom initialize begin + // pragma uvmf custom initialize end + + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_sequence_base.svh new file mode 100644 index 000000000..ac7965f6f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains environment level sequences that will +// be reused from block to top level simulations. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_env_sequence_base #( + type CONFIG_T + ) extends uvmf_virtual_sequence_base #(.CONFIG_T(CONFIG_T)); + + + `uvm_object_param_utils( fuse_ctrl_env_sequence_base #( + CONFIG_T + ) ); + + +// This fuse_ctrl_env_sequence_base contains a handle to a fuse_ctrl_env_configuration object +// named configuration. This configuration variable contains a handle to each +// sequencer within each agent within this environment and any sub-environments. +// The configuration object handle is automatically assigned in the pre_body in the +// base class of this sequence. The configuration handle is retrieved from the +// virtual sequencer that this sequence is started on. +// Available sequencer handles within the environment configuration: + + // Initiator agent sequencers in fuse_ctrl_environment: + // configuration.fuse_ctrl_rst_in_agent_config.sequencer + // configuration.fuse_ctrl_core_axi_write_in_if_agent_config.sequencer + // configuration.fuse_ctrl_prim_axi_write_in_if_agent_config.sequencer + // configuration.fuse_ctrl_core_axi_read_in_if_agent_config.sequencer + // configuration.fuse_ctrl_prim_axi_read_in_if_agent_config.sequencer + // configuration.fuse_ctrl_secreg_axi_read_in_if_agent_config.sequencer + // configuration.fuse_ctrl_lc_otp_in_if_agent_config.sequencer + // configuration.fuse_ctrl_in_if_agent_config.sequencer + + // Responder agent sequencers in fuse_ctrl_environment: + // configuration.fuse_ctrl_rst_out_agent_config.sequencer + // configuration.fuse_ctrl_core_axi_write_out_if_agent_config.sequencer + // configuration.fuse_ctrl_prim_axi_write_out_if_agent_config.sequencer + // configuration.fuse_ctrl_core_axi_read_out_if_agent_config.sequencer + // configuration.fuse_ctrl_prim_axi_read_out_if_agent_config.sequencer + // configuration.fuse_ctrl_secreg_axi_read_out_if_agent_config.sequencer + // configuration.fuse_ctrl_lc_otp_out_if_agent_config.sequencer + // configuration.fuse_ctrl_out_if_agent_config.sequencer + + + typedef fuse_ctrl_rst_in_random_sequence fuse_ctrl_rst_in_agent_random_sequence_t; + fuse_ctrl_rst_in_agent_random_sequence_t fuse_ctrl_rst_in_agent_rand_seq; + + + typedef fuse_ctrl_core_axi_write_in_random_sequence fuse_ctrl_core_axi_write_in_if_agent_random_sequence_t; + fuse_ctrl_core_axi_write_in_if_agent_random_sequence_t fuse_ctrl_core_axi_write_in_if_agent_rand_seq; + + + typedef fuse_ctrl_prim_axi_write_in_random_sequence fuse_ctrl_prim_axi_write_in_if_agent_random_sequence_t; + fuse_ctrl_prim_axi_write_in_if_agent_random_sequence_t fuse_ctrl_prim_axi_write_in_if_agent_rand_seq; + + + typedef fuse_ctrl_core_axi_read_in_random_sequence fuse_ctrl_core_axi_read_in_if_agent_random_sequence_t; + fuse_ctrl_core_axi_read_in_if_agent_random_sequence_t fuse_ctrl_core_axi_read_in_if_agent_rand_seq; + + + typedef fuse_ctrl_prim_axi_read_in_random_sequence fuse_ctrl_prim_axi_read_in_if_agent_random_sequence_t; + fuse_ctrl_prim_axi_read_in_if_agent_random_sequence_t fuse_ctrl_prim_axi_read_in_if_agent_rand_seq; + + + typedef fuse_ctrl_secreg_axi_read_in_random_sequence fuse_ctrl_secreg_axi_read_in_if_agent_random_sequence_t; + fuse_ctrl_secreg_axi_read_in_if_agent_random_sequence_t fuse_ctrl_secreg_axi_read_in_if_agent_rand_seq; + + + typedef fuse_ctrl_lc_otp_in_random_sequence fuse_ctrl_lc_otp_in_if_agent_random_sequence_t; + fuse_ctrl_lc_otp_in_if_agent_random_sequence_t fuse_ctrl_lc_otp_in_if_agent_rand_seq; + + + typedef fuse_ctrl_in_random_sequence fuse_ctrl_in_if_agent_random_sequence_t; + fuse_ctrl_in_if_agent_random_sequence_t fuse_ctrl_in_if_agent_rand_seq; + + + + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "" ); + super.new(name); + fuse_ctrl_rst_in_agent_rand_seq = fuse_ctrl_rst_in_agent_random_sequence_t::type_id::create("fuse_ctrl_rst_in_agent_rand_seq"); + fuse_ctrl_core_axi_write_in_if_agent_rand_seq = fuse_ctrl_core_axi_write_in_if_agent_random_sequence_t::type_id::create("fuse_ctrl_core_axi_write_in_if_agent_rand_seq"); + fuse_ctrl_prim_axi_write_in_if_agent_rand_seq = fuse_ctrl_prim_axi_write_in_if_agent_random_sequence_t::type_id::create("fuse_ctrl_prim_axi_write_in_if_agent_rand_seq"); + fuse_ctrl_core_axi_read_in_if_agent_rand_seq = fuse_ctrl_core_axi_read_in_if_agent_random_sequence_t::type_id::create("fuse_ctrl_core_axi_read_in_if_agent_rand_seq"); + fuse_ctrl_prim_axi_read_in_if_agent_rand_seq = fuse_ctrl_prim_axi_read_in_if_agent_random_sequence_t::type_id::create("fuse_ctrl_prim_axi_read_in_if_agent_rand_seq"); + fuse_ctrl_secreg_axi_read_in_if_agent_rand_seq = fuse_ctrl_secreg_axi_read_in_if_agent_random_sequence_t::type_id::create("fuse_ctrl_secreg_axi_read_in_if_agent_rand_seq"); + fuse_ctrl_lc_otp_in_if_agent_rand_seq = fuse_ctrl_lc_otp_in_if_agent_random_sequence_t::type_id::create("fuse_ctrl_lc_otp_in_if_agent_rand_seq"); + fuse_ctrl_in_if_agent_rand_seq = fuse_ctrl_in_if_agent_random_sequence_t::type_id::create("fuse_ctrl_in_if_agent_rand_seq"); + + + endfunction + + virtual task body(); + + if ( configuration.fuse_ctrl_rst_in_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_rst_in_agent_rand_seq.start(configuration.fuse_ctrl_rst_in_agent_config.sequencer); + if ( configuration.fuse_ctrl_core_axi_write_in_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_core_axi_write_in_if_agent_rand_seq.start(configuration.fuse_ctrl_core_axi_write_in_if_agent_config.sequencer); + if ( configuration.fuse_ctrl_prim_axi_write_in_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_prim_axi_write_in_if_agent_rand_seq.start(configuration.fuse_ctrl_prim_axi_write_in_if_agent_config.sequencer); + if ( configuration.fuse_ctrl_core_axi_read_in_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_core_axi_read_in_if_agent_rand_seq.start(configuration.fuse_ctrl_core_axi_read_in_if_agent_config.sequencer); + if ( configuration.fuse_ctrl_prim_axi_read_in_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_prim_axi_read_in_if_agent_rand_seq.start(configuration.fuse_ctrl_prim_axi_read_in_if_agent_config.sequencer); + if ( configuration.fuse_ctrl_secreg_axi_read_in_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_secreg_axi_read_in_if_agent_rand_seq.start(configuration.fuse_ctrl_secreg_axi_read_in_if_agent_config.sequencer); + if ( configuration.fuse_ctrl_lc_otp_in_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_lc_otp_in_if_agent_rand_seq.start(configuration.fuse_ctrl_lc_otp_in_if_agent_config.sequencer); + if ( configuration.fuse_ctrl_in_if_agent_config.sequencer != null ) + repeat (25) fuse_ctrl_in_if_agent_rand_seq.start(configuration.fuse_ctrl_in_if_agent_config.sequencer); + + + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_typedefs.svh new file mode 100644 index 000000000..79d1b10a2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_env_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the environment package. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + // pragma uvmf custom additional begin + // pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_environment.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_environment.svh new file mode 100644 index 000000000..c15635581 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_environment.svh @@ -0,0 +1,221 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This environment contains all agents, predictors and +// scoreboards required for the block level design. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class fuse_ctrl_environment extends uvmf_environment_base #( + .CONFIG_T( fuse_ctrl_env_configuration + )); + `uvm_component_utils( fuse_ctrl_environment ) + + + + + + typedef fuse_ctrl_rst_in_agent fuse_ctrl_rst_in_agent_t; + fuse_ctrl_rst_in_agent_t fuse_ctrl_rst_in_agent; + + typedef fuse_ctrl_rst_out_agent fuse_ctrl_rst_out_agent_t; + fuse_ctrl_rst_out_agent_t fuse_ctrl_rst_out_agent; + + typedef fuse_ctrl_core_axi_write_in_agent fuse_ctrl_core_axi_write_in_if_agent_t; + fuse_ctrl_core_axi_write_in_if_agent_t fuse_ctrl_core_axi_write_in_if_agent; + + typedef fuse_ctrl_core_axi_write_out_agent fuse_ctrl_core_axi_write_out_if_agent_t; + fuse_ctrl_core_axi_write_out_if_agent_t fuse_ctrl_core_axi_write_out_if_agent; + + typedef fuse_ctrl_prim_axi_write_in_agent fuse_ctrl_prim_axi_write_in_if_agent_t; + fuse_ctrl_prim_axi_write_in_if_agent_t fuse_ctrl_prim_axi_write_in_if_agent; + + typedef fuse_ctrl_prim_axi_write_out_agent fuse_ctrl_prim_axi_write_out_if_agent_t; + fuse_ctrl_prim_axi_write_out_if_agent_t fuse_ctrl_prim_axi_write_out_if_agent; + + typedef fuse_ctrl_core_axi_read_in_agent fuse_ctrl_core_axi_read_in_if_agent_t; + fuse_ctrl_core_axi_read_in_if_agent_t fuse_ctrl_core_axi_read_in_if_agent; + + typedef fuse_ctrl_core_axi_read_out_agent fuse_ctrl_core_axi_read_out_if_agent_t; + fuse_ctrl_core_axi_read_out_if_agent_t fuse_ctrl_core_axi_read_out_if_agent; + + typedef fuse_ctrl_prim_axi_read_in_agent fuse_ctrl_prim_axi_read_in_if_agent_t; + fuse_ctrl_prim_axi_read_in_if_agent_t fuse_ctrl_prim_axi_read_in_if_agent; + + typedef fuse_ctrl_prim_axi_read_out_agent fuse_ctrl_prim_axi_read_out_if_agent_t; + fuse_ctrl_prim_axi_read_out_if_agent_t fuse_ctrl_prim_axi_read_out_if_agent; + + typedef fuse_ctrl_secreg_axi_read_in_agent fuse_ctrl_secreg_axi_read_in_if_agent_t; + fuse_ctrl_secreg_axi_read_in_if_agent_t fuse_ctrl_secreg_axi_read_in_if_agent; + + typedef fuse_ctrl_secreg_axi_read_out_agent fuse_ctrl_secreg_axi_read_out_if_agent_t; + fuse_ctrl_secreg_axi_read_out_if_agent_t fuse_ctrl_secreg_axi_read_out_if_agent; + + typedef fuse_ctrl_lc_otp_in_agent fuse_ctrl_lc_otp_in_if_agent_t; + fuse_ctrl_lc_otp_in_if_agent_t fuse_ctrl_lc_otp_in_if_agent; + + typedef fuse_ctrl_lc_otp_out_agent fuse_ctrl_lc_otp_out_if_agent_t; + fuse_ctrl_lc_otp_out_if_agent_t fuse_ctrl_lc_otp_out_if_agent; + + typedef fuse_ctrl_in_agent fuse_ctrl_in_if_agent_t; + fuse_ctrl_in_if_agent_t fuse_ctrl_in_if_agent; + + typedef fuse_ctrl_out_agent fuse_ctrl_out_if_agent_t; + fuse_ctrl_out_if_agent_t fuse_ctrl_out_if_agent; + + + + + typedef fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T) + ) + fuse_ctrl_pred_t; + fuse_ctrl_pred_t fuse_ctrl_pred; + typedef fuse_ctrl_scoreboard #( + .CONFIG_T(CONFIG_T) + ) + fuse_ctrl_sb_t; + fuse_ctrl_sb_t fuse_ctrl_sb; + + + + + typedef uvmf_virtual_sequencer_base #(.CONFIG_T(fuse_ctrl_env_configuration)) fuse_ctrl_vsqr_t; + fuse_ctrl_vsqr_t vsqr; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// FUNCTION: build_phase() +// This function builds all components within this environment. +// + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + fuse_ctrl_rst_in_agent = fuse_ctrl_rst_in_agent_t::type_id::create("fuse_ctrl_rst_in_agent",this); + fuse_ctrl_rst_in_agent.set_config(configuration.fuse_ctrl_rst_in_agent_config); + fuse_ctrl_rst_out_agent = fuse_ctrl_rst_out_agent_t::type_id::create("fuse_ctrl_rst_out_agent",this); + fuse_ctrl_rst_out_agent.set_config(configuration.fuse_ctrl_rst_out_agent_config); + fuse_ctrl_core_axi_write_in_if_agent = fuse_ctrl_core_axi_write_in_if_agent_t::type_id::create("fuse_ctrl_core_axi_write_in_if_agent",this); + fuse_ctrl_core_axi_write_in_if_agent.set_config(configuration.fuse_ctrl_core_axi_write_in_if_agent_config); + fuse_ctrl_core_axi_write_out_if_agent = fuse_ctrl_core_axi_write_out_if_agent_t::type_id::create("fuse_ctrl_core_axi_write_out_if_agent",this); + fuse_ctrl_core_axi_write_out_if_agent.set_config(configuration.fuse_ctrl_core_axi_write_out_if_agent_config); + fuse_ctrl_prim_axi_write_in_if_agent = fuse_ctrl_prim_axi_write_in_if_agent_t::type_id::create("fuse_ctrl_prim_axi_write_in_if_agent",this); + fuse_ctrl_prim_axi_write_in_if_agent.set_config(configuration.fuse_ctrl_prim_axi_write_in_if_agent_config); + fuse_ctrl_prim_axi_write_out_if_agent = fuse_ctrl_prim_axi_write_out_if_agent_t::type_id::create("fuse_ctrl_prim_axi_write_out_if_agent",this); + fuse_ctrl_prim_axi_write_out_if_agent.set_config(configuration.fuse_ctrl_prim_axi_write_out_if_agent_config); + fuse_ctrl_core_axi_read_in_if_agent = fuse_ctrl_core_axi_read_in_if_agent_t::type_id::create("fuse_ctrl_core_axi_read_in_if_agent",this); + fuse_ctrl_core_axi_read_in_if_agent.set_config(configuration.fuse_ctrl_core_axi_read_in_if_agent_config); + fuse_ctrl_core_axi_read_out_if_agent = fuse_ctrl_core_axi_read_out_if_agent_t::type_id::create("fuse_ctrl_core_axi_read_out_if_agent",this); + fuse_ctrl_core_axi_read_out_if_agent.set_config(configuration.fuse_ctrl_core_axi_read_out_if_agent_config); + fuse_ctrl_prim_axi_read_in_if_agent = fuse_ctrl_prim_axi_read_in_if_agent_t::type_id::create("fuse_ctrl_prim_axi_read_in_if_agent",this); + fuse_ctrl_prim_axi_read_in_if_agent.set_config(configuration.fuse_ctrl_prim_axi_read_in_if_agent_config); + fuse_ctrl_prim_axi_read_out_if_agent = fuse_ctrl_prim_axi_read_out_if_agent_t::type_id::create("fuse_ctrl_prim_axi_read_out_if_agent",this); + fuse_ctrl_prim_axi_read_out_if_agent.set_config(configuration.fuse_ctrl_prim_axi_read_out_if_agent_config); + fuse_ctrl_secreg_axi_read_in_if_agent = fuse_ctrl_secreg_axi_read_in_if_agent_t::type_id::create("fuse_ctrl_secreg_axi_read_in_if_agent",this); + fuse_ctrl_secreg_axi_read_in_if_agent.set_config(configuration.fuse_ctrl_secreg_axi_read_in_if_agent_config); + fuse_ctrl_secreg_axi_read_out_if_agent = fuse_ctrl_secreg_axi_read_out_if_agent_t::type_id::create("fuse_ctrl_secreg_axi_read_out_if_agent",this); + fuse_ctrl_secreg_axi_read_out_if_agent.set_config(configuration.fuse_ctrl_secreg_axi_read_out_if_agent_config); + fuse_ctrl_lc_otp_in_if_agent = fuse_ctrl_lc_otp_in_if_agent_t::type_id::create("fuse_ctrl_lc_otp_in_if_agent",this); + fuse_ctrl_lc_otp_in_if_agent.set_config(configuration.fuse_ctrl_lc_otp_in_if_agent_config); + fuse_ctrl_lc_otp_out_if_agent = fuse_ctrl_lc_otp_out_if_agent_t::type_id::create("fuse_ctrl_lc_otp_out_if_agent",this); + fuse_ctrl_lc_otp_out_if_agent.set_config(configuration.fuse_ctrl_lc_otp_out_if_agent_config); + fuse_ctrl_in_if_agent = fuse_ctrl_in_if_agent_t::type_id::create("fuse_ctrl_in_if_agent",this); + fuse_ctrl_in_if_agent.set_config(configuration.fuse_ctrl_in_if_agent_config); + fuse_ctrl_out_if_agent = fuse_ctrl_out_if_agent_t::type_id::create("fuse_ctrl_out_if_agent",this); + fuse_ctrl_out_if_agent.set_config(configuration.fuse_ctrl_out_if_agent_config); + fuse_ctrl_pred = fuse_ctrl_pred_t::type_id::create("fuse_ctrl_pred",this); + fuse_ctrl_pred.configuration = configuration; + fuse_ctrl_sb = fuse_ctrl_sb_t::type_id::create("fuse_ctrl_sb",this); + fuse_ctrl_sb.configuration = configuration; + + vsqr = fuse_ctrl_vsqr_t::type_id::create("vsqr", this); + vsqr.set_config(configuration); + configuration.set_vsqr(vsqr); + + // pragma uvmf custom build_phase begin + // pragma uvmf custom build_phase end + endfunction + +// **************************************************************************** +// FUNCTION: connect_phase() +// This function makes all connections within this environment. Connections +// typically inclue agent to predictor, predictor to scoreboard and scoreboard +// to agent. +// + virtual function void connect_phase(uvm_phase phase); +// pragma uvmf custom connect_phase_pre_super begin +// pragma uvmf custom connect_phase_pre_super end + super.connect_phase(phase); + fuse_ctrl_rst_in_agent.monitored_ap.connect(fuse_ctrl_pred.fuse_ctrl_rst_agent_ae); + fuse_ctrl_pred.fuse_ctrl_sb_ap.connect(fuse_ctrl_sb.expected_analysis_export); + fuse_ctrl_rst_out_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_core_axi_write_in_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_core_axi_write_out_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_core_axi_read_in_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_core_axi_read_out_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_prim_axi_write_in_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_prim_axi_write_out_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_prim_axi_read_in_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_prim_axi_read_out_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_secreg_axi_read_in_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_secreg_axi_read_out_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_lc_otp_in_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_lc_otp_out_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_in_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + fuse_ctrl_out_if_agent.monitored_ap.connect(fuse_ctrl_sb.actual_analysis_export); + // pragma uvmf custom reg_model_connect_phase begin + // pragma uvmf custom reg_model_connect_phase end + endfunction + +// **************************************************************************** +// FUNCTION: end_of_simulation_phase() +// This function is executed just prior to executing run_phase. This function +// was added to the environment to sample environment configuration settings +// just before the simulation exits time 0. The configuration structure is +// randomized in the build phase before the environment structure is constructed. +// Configuration variables can be customized after randomization in the build_phase +// of the extended test. +// If a sequence modifies values in the configuration structure then the sequence is +// responsible for sampling the covergroup in the configuration if required. +// + virtual function void start_of_simulation_phase(uvm_phase phase); + configuration.fuse_ctrl_configuration_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_predictor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_predictor.svh new file mode 100644 index 000000000..0250853d4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_predictor.svh @@ -0,0 +1,323 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +// +// DESCRIPTION: This analysis component contains analysis_exports for receiving +// data and analysis_ports for sending data. +// +// This analysis component has the following analysis_exports that receive the +// listed transaction type. +// +// fuse_ctrl_rst_agent_ae receives transactions of type fuse_ctrl_rst_transaction +// fuse_ctrl_core_axi_write_agent_ae receives transactions of type fuse_ctrl_write_transaction +// fuse_ctrl_prim_axi_write_agent_ae receives transactions of type fuse_ctrl_write_transaction +// fuse_ctrl_core_axi_read_agent_ae receives transactions of type fuse_ctrl_read_transaction +// fuse_ctrl_prim_axi_read_agent_ae receives transactions of type fuse_ctrl_read_transaction +// fuse_ctrl_secreg_axi_read_agent_ae receives transactions of type fuse_ctrl_read_transaction +// fuse_ctrl_lc_otp_if_agent_ae receives transactions of type fuse_ctrl_read_transaction +// +// This analysis component has the following analysis_ports that can broadcast +// the listed transaction type. +// +// fuse_ctrl_sb_ap broadcasts transactions of type fuse_ctrl_read_transaction +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +class fuse_ctrl_predictor #( + type CONFIG_T, + type BASE_T = uvm_component + ) + extends BASE_T; + + // Factory registration of this class + `uvm_component_param_utils( fuse_ctrl_predictor #( + CONFIG_T, + BASE_T + ) +) + + + // Instantiate a handle to the configuration of the environment in which this component resides + CONFIG_T configuration; + + + // Instantiate the analysis exports + uvm_analysis_imp_fuse_ctrl_rst_agent_ae #(fuse_ctrl_rst_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_rst_agent_ae; + uvm_analysis_imp_fuse_ctrl_core_axi_write_agent_ae #(fuse_ctrl_write_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_core_axi_write_agent_ae; + uvm_analysis_imp_fuse_ctrl_prim_axi_write_agent_ae #(fuse_ctrl_write_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_prim_axi_write_agent_ae; + uvm_analysis_imp_fuse_ctrl_core_axi_read_agent_ae #(fuse_ctrl_read_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_core_axi_read_agent_ae; + uvm_analysis_imp_fuse_ctrl_prim_axi_read_agent_ae #(fuse_ctrl_read_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_prim_axi_read_agent_ae; + uvm_analysis_imp_fuse_ctrl_secreg_axi_read_agent_ae #(fuse_ctrl_read_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_secreg_axi_read_agent_ae; + uvm_analysis_imp_fuse_ctrl_lc_otp_if_agent_ae #(fuse_ctrl_read_transaction, fuse_ctrl_predictor #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) fuse_ctrl_lc_otp_if_agent_ae; + + + // Instantiate the analysis ports + uvm_analysis_port #(fuse_ctrl_read_transaction) fuse_ctrl_sb_ap; + + + // Transaction variable for predicted values to be sent out fuse_ctrl_sb_ap + // Once a transaction is sent through an analysis_port, another transaction should + // be constructed for the next predicted transaction. + typedef fuse_ctrl_read_transaction fuse_ctrl_sb_ap_output_transaction_t; + fuse_ctrl_sb_ap_output_transaction_t fuse_ctrl_sb_ap_output_transaction; + // Code for sending output transaction out through fuse_ctrl_sb_ap + // fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + + // Define transaction handles for debug visibility + fuse_ctrl_rst_transaction fuse_ctrl_rst_agent_ae_debug; + fuse_ctrl_write_transaction fuse_ctrl_core_axi_write_agent_ae_debug; + fuse_ctrl_write_transaction fuse_ctrl_prim_axi_write_agent_ae_debug; + fuse_ctrl_read_transaction fuse_ctrl_core_axi_read_agent_ae_debug; + fuse_ctrl_read_transaction fuse_ctrl_prim_axi_read_agent_ae_debug; + fuse_ctrl_read_transaction fuse_ctrl_secreg_axi_read_agent_ae_debug; + fuse_ctrl_read_transaction fuse_ctrl_lc_otp_if_agent_ae_debug; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // FUNCTION: new + function new(string name, uvm_component parent); + super.new(name,parent); + `uvm_warning("PREDICTOR_REVIEW", "This predictor has been created either through generation or re-generation with merging. Remove this warning after the predictor has been reviewed.") + // pragma uvmf custom new begin + // pragma uvmf custom new end + endfunction + + // FUNCTION: build_phase + virtual function void build_phase (uvm_phase phase); + + fuse_ctrl_rst_agent_ae = new("fuse_ctrl_rst_agent_ae", this); + fuse_ctrl_core_axi_write_agent_ae = new("fuse_ctrl_core_axi_write_agent_ae", this); + fuse_ctrl_prim_axi_write_agent_ae = new("fuse_ctrl_prim_axi_write_agent_ae", this); + fuse_ctrl_core_axi_read_agent_ae = new("fuse_ctrl_core_axi_read_agent_ae", this); + fuse_ctrl_prim_axi_read_agent_ae = new("fuse_ctrl_prim_axi_read_agent_ae", this); + fuse_ctrl_secreg_axi_read_agent_ae = new("fuse_ctrl_secreg_axi_read_agent_ae", this); + fuse_ctrl_lc_otp_if_agent_ae = new("fuse_ctrl_lc_otp_if_agent_ae", this); + fuse_ctrl_sb_ap =new("fuse_ctrl_sb_ap", this ); + // pragma uvmf custom build_phase begin + // pragma uvmf custom build_phase end + endfunction + + // FUNCTION: write_fuse_ctrl_rst_agent_ae + // Transactions received through fuse_ctrl_rst_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_rst_agent_ae(fuse_ctrl_rst_transaction t); + // pragma uvmf custom fuse_ctrl_rst_agent_ae_predictor begin + fuse_ctrl_rst_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_rst_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_rst_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_rst_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_core_axi_write_agent_ae + // Transactions received through fuse_ctrl_core_axi_write_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_core_axi_write_agent_ae(fuse_ctrl_write_transaction t); + // pragma uvmf custom fuse_ctrl_core_axi_write_agent_ae_predictor begin + fuse_ctrl_core_axi_write_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_core_axi_write_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_core_axi_write_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_core_axi_write_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_prim_axi_write_agent_ae + // Transactions received through fuse_ctrl_prim_axi_write_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_prim_axi_write_agent_ae(fuse_ctrl_write_transaction t); + // pragma uvmf custom fuse_ctrl_prim_axi_write_agent_ae_predictor begin + fuse_ctrl_prim_axi_write_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_prim_axi_write_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_prim_axi_write_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_prim_axi_write_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_core_axi_read_agent_ae + // Transactions received through fuse_ctrl_core_axi_read_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_core_axi_read_agent_ae(fuse_ctrl_read_transaction t); + // pragma uvmf custom fuse_ctrl_core_axi_read_agent_ae_predictor begin + fuse_ctrl_core_axi_read_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_core_axi_read_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_core_axi_read_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_core_axi_read_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_prim_axi_read_agent_ae + // Transactions received through fuse_ctrl_prim_axi_read_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_prim_axi_read_agent_ae(fuse_ctrl_read_transaction t); + // pragma uvmf custom fuse_ctrl_prim_axi_read_agent_ae_predictor begin + fuse_ctrl_prim_axi_read_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_prim_axi_read_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_prim_axi_read_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_prim_axi_read_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_secreg_axi_read_agent_ae + // Transactions received through fuse_ctrl_secreg_axi_read_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_secreg_axi_read_agent_ae(fuse_ctrl_read_transaction t); + // pragma uvmf custom fuse_ctrl_secreg_axi_read_agent_ae_predictor begin + fuse_ctrl_secreg_axi_read_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_secreg_axi_read_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_secreg_axi_read_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_secreg_axi_read_agent_ae_predictor end + endfunction + + // FUNCTION: write_fuse_ctrl_lc_otp_if_agent_ae + // Transactions received through fuse_ctrl_lc_otp_if_agent_ae initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_fuse_ctrl_lc_otp_if_agent_ae(fuse_ctrl_read_transaction t); + // pragma uvmf custom fuse_ctrl_lc_otp_if_agent_ae_predictor begin + fuse_ctrl_lc_otp_if_agent_ae_debug = t; + `uvm_info("PRED", "Transaction Received through fuse_ctrl_lc_otp_if_agent_ae", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // Construct one of each output transaction type. + fuse_ctrl_sb_ap_output_transaction = fuse_ctrl_sb_ap_output_transaction_t::type_id::create("fuse_ctrl_sb_ap_output_transaction"); + // UVMF_CHANGE_ME: Implement predictor model here. + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The fuse_ctrl_predictor::write_fuse_ctrl_lc_otp_if_agent_ae function needs to be completed with DUT prediction model",UVM_NONE) + `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE) + + // Code for sending output transaction out through fuse_ctrl_sb_ap + // Please note that each broadcasted transaction should be a different object than previously + // broadcasted transactions. Creation of a different object is done by constructing the transaction + // using either new() or create(). Broadcasting a transaction object more than once to either the + // same subscriber or multiple subscribers will result in unexpected and incorrect behavior. + fuse_ctrl_sb_ap.write(fuse_ctrl_sb_ap_output_transaction); + // pragma uvmf custom fuse_ctrl_lc_otp_if_agent_ae_predictor end + endfunction + + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_scoreboard.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_scoreboard.svh new file mode 100644 index 000000000..319d51fae --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/src/fuse_ctrl_scoreboard.svh @@ -0,0 +1,149 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This analysis component contains analysis_exports for receiving +// data and analysis_ports for sending data. +// +// This analysis component has the following analysis_exports that receive the +// listed transaction type. +// +// expected_analysis_export receives transactions of type fuse_ctrl_read_transaction +// actual_analysis_export receives transactions of type fuse_ctrl_read_transaction +// +// This analysis component has the following analysis_ports that can broadcast +// the listed transaction type. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +class fuse_ctrl_scoreboard #( + type CONFIG_T, + type BASE_T = uvm_component + ) + extends BASE_T; + + // Factory registration of this class + `uvm_component_param_utils( fuse_ctrl_scoreboard #( + CONFIG_T, + BASE_T + ) +) + + + // Instantiate a handle to the configuration of the environment in which this component resides + CONFIG_T configuration; + + + // Instantiate the analysis exports + uvm_analysis_imp_expected_analysis_export #(fuse_ctrl_read_transaction, fuse_ctrl_scoreboard #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) expected_analysis_export; + uvm_analysis_imp_actual_analysis_export #(fuse_ctrl_read_transaction, fuse_ctrl_scoreboard #( + .CONFIG_T(CONFIG_T), + .BASE_T(BASE_T) + ) +) actual_analysis_export; + + + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // FUNCTION: new + function new(string name, uvm_component parent); + super.new(name,parent); + // pragma uvmf custom new begin + // pragma uvmf custom new end + endfunction + + // FUNCTION: build_phase + virtual function void build_phase (uvm_phase phase); + + expected_analysis_export = new("expected_analysis_export", this); + actual_analysis_export = new("actual_analysis_export", this); + // pragma uvmf custom build_phase begin + // pragma uvmf custom build_phase end + endfunction + + // FUNCTION: write_expected_analysis_export + // Transactions received through expected_analysis_export initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_expected_analysis_export(fuse_ctrl_read_transaction t); + // pragma uvmf custom expected_analysis_export_scoreboard begin + `uvm_info("PRED", "Transaction Received through expected_analysis_export", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // UVMF_CHANGE_ME: Implement custom scoreboard here. + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "UVMF_CHANGE_ME: The fuse_ctrl_scoreboard::write_expected_analysis_export function needs to be completed with custom scoreboard functionality",UVM_NONE) + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "******************************************************************************************************",UVM_NONE) + + // pragma uvmf custom expected_analysis_export_scoreboard end + endfunction + + // FUNCTION: write_actual_analysis_export + // Transactions received through actual_analysis_export initiate the execution of this function. + // This function performs prediction of DUT output values based on DUT input, configuration and state + virtual function void write_actual_analysis_export(fuse_ctrl_read_transaction t); + // pragma uvmf custom actual_analysis_export_scoreboard begin + `uvm_info("PRED", "Transaction Received through actual_analysis_export", UVM_MEDIUM) + `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL) + // UVMF_CHANGE_ME: Implement custom scoreboard here. + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "******************************************************************************************************",UVM_NONE) + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "UVMF_CHANGE_ME: The fuse_ctrl_scoreboard::write_actual_analysis_export function needs to be completed with custom scoreboard functionality",UVM_NONE) + `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "******************************************************************************************************",UVM_NONE) + + // pragma uvmf custom actual_analysis_export_scoreboard end + endfunction + + + + // FUNCTION: extract_phase + virtual function void extract_phase(uvm_phase phase); +// pragma uvmf custom extract_phase begin + super.extract_phase(phase); +// pragma uvmf custom extract_phase end + endfunction + + // FUNCTION: check_phase + virtual function void check_phase(uvm_phase phase); +// pragma uvmf custom check_phase begin + super.check_phase(phase); +// pragma uvmf custom check_phase end + endfunction + + // FUNCTION: report_phase + virtual function void report_phase(uvm_phase phase); +// pragma uvmf custom report_phase begin + super.report_phase(phase); +// pragma uvmf custom report_phase end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_environment.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_environment.yaml new file mode 100644 index 000000000..3cdc526e9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_environment.yaml @@ -0,0 +1,122 @@ +uvmf: + environments: + fuse_ctrl: + agents: + - initiator_responder: INITIATOR + name: fuse_ctrl_rst_in_agent + type: fuse_ctrl_rst_in + - initiator_responder: RESPONDER + name: fuse_ctrl_rst_out_agent + type: fuse_ctrl_rst_out + - initiator_responder: INITIATOR + name: fuse_ctrl_core_axi_write_in_if_agent + type: fuse_ctrl_core_axi_write_in + - initiator_responder: RESPONDER + name: fuse_ctrl_core_axi_write_out_if_agent + type: fuse_ctrl_core_axi_write_out + - initiator_responder: INITIATOR + name: fuse_ctrl_prim_axi_write_in_if_agent + type: fuse_ctrl_prim_axi_write_in + - initiator_responder: RESPONDER + name: fuse_ctrl_prim_axi_write_out_if_agent + type: fuse_ctrl_prim_axi_write_out + - initiator_responder: INITIATOR + name: fuse_ctrl_core_axi_read_in_if_agent + type: fuse_ctrl_core_axi_read_in + - initiator_responder: RESPONDER + name: fuse_ctrl_core_axi_read_out_if_agent + type: fuse_ctrl_core_axi_read_out + - initiator_responder: INITIATOR + name: fuse_ctrl_prim_axi_read_in_if_agent + type: fuse_ctrl_prim_axi_read_in + - initiator_responder: RESPONDER + name: fuse_ctrl_prim_axi_read_out_if_agent + type: fuse_ctrl_prim_axi_read_out + - initiator_responder: INITIATOR + name: fuse_ctrl_secreg_axi_read_in_if_agent + type: fuse_ctrl_secreg_axi_read_in + - initiator_responder: RESPONDER + name: fuse_ctrl_secreg_axi_read_out_if_agent + type: fuse_ctrl_secreg_axi_read_out + - initiator_responder: INITIATOR + name: fuse_ctrl_lc_otp_in_if_agent + type: fuse_ctrl_lc_otp_in + - initiator_responder: RESPONDER + name: fuse_ctrl_lc_otp_out_if_agent + type: fuse_ctrl_lc_otp_out + - initiator_responder: INITIATOR + name: fuse_ctrl_in_if_agent + type: fuse_ctrl_in + - initiator_responder: RESPONDER + name: fuse_ctrl_out_if_agent + type: fuse_ctrl_out + analysis_components: + - name: fuse_ctrl_pred + parameters: [] + type: fuse_ctrl_predictor + - name: fuse_ctrl_sb + parameters: [] + type: fuse_ctrl_scoreboard + analysis_exports: [] + analysis_ports: [] + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + hvl_pkg_parameters: [] + non_uvmf_components: [] + parameters: [] + qvip_memory_agents: [] + scoreboards: [] + subenvs: [] + tlm_connections: + - driver: fuse_ctrl_rst_in_agent.monitored_ap + receiver: fuse_ctrl_pred.fuse_ctrl_rst_agent_ae + validate: 'True' + - driver: fuse_ctrl_pred.fuse_ctrl_sb_ap + receiver: fuse_ctrl_sb.expected_analysis_export + validate: 'True' + - driver: fuse_ctrl_rst_out_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_core_axi_write_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_core_axi_write_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_core_axi_read_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_core_axi_read_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_prim_axi_write_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_prim_axi_write_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_prim_axi_read_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_prim_axi_read_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_secreg_axi_read_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_secreg_axi_read_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_lc_otp_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_lc_otp_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_in_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' + - driver: fuse_ctrl_out_if_agent.monitored_ap + receiver: fuse_ctrl_sb.actual_analysis_export + validate: 'True' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_predictor.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_predictor.yaml new file mode 100644 index 000000000..7832404a7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_predictor.yaml @@ -0,0 +1,23 @@ +uvmf: + util_components: + fuse_ctrl_predictor: + analysis_exports: + - name: fuse_ctrl_rst_agent_ae + type: fuse_ctrl_rst_transaction + - name: fuse_ctrl_core_axi_write_agent_ae + type: fuse_ctrl_write_transaction + - name: fuse_ctrl_prim_axi_write_agent_ae + type: fuse_ctrl_write_transaction + - name: fuse_ctrl_core_axi_read_agent_ae + type: fuse_ctrl_read_transaction + - name: fuse_ctrl_prim_axi_read_agent_ae + type: fuse_ctrl_read_transaction + - name: fuse_ctrl_secreg_axi_read_agent_ae + type: fuse_ctrl_read_transaction + - name: fuse_ctrl_lc_otp_if_agent_ae + type: fuse_ctrl_read_transaction + analysis_ports: + - name: fuse_ctrl_sb_ap + type: fuse_ctrl_read_transaction + existing_library_component: 'True' + type: predictor diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_scoreboard.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_scoreboard.yaml new file mode 100644 index 000000000..05167c417 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/environment_packages/fuse_ctrl_env_pkg/yaml/fuse_ctrl_util_comp_fuse_ctrl_scoreboard.yaml @@ -0,0 +1,10 @@ +uvmf: + util_components: + fuse_ctrl_scoreboard: + analysis_exports: + - name: expected_analysis_export + type: fuse_ctrl_read_transaction + - name: actual_analysis_export + type: fuse_ctrl_read_transaction + existing_library_component: 'True' + type: scoreboard diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/.project new file mode 100644 index 000000000..f5be90c8f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + core_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..5646c3df8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..9974230a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# core_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +core_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f + +core_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f + +core_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f + +COMP_core_axi_read_if_PKG_TGT_0 = q_comp_core_axi_read_if_pkg +COMP_core_axi_read_if_PKG_TGT_1 = v_comp_core_axi_read_if_pkg +COMP_core_axi_read_if_PKG_TGT = $(COMP_core_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_core_axi_read_if_pkg: $(COMP_core_axi_read_if_PKG_TGT) + +q_comp_core_axi_read_if_pkg: + $(HDL_COMP_CMD) $(core_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_read_if_PKG) + $(HDL_COMP_CMD) $(core_axi_read_if_PKG_XRTL) + +v_comp_core_axi_read_if_pkg: + $(HVL_COMP_CMD) $(core_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_read_if_PKG) + $(VELANALYZE_CMD) $(core_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(core_axi_read_if_PKG) + $(HDL_COMP_CMD) $(core_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export core_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_core_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_core_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_core_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_core_axi_read_if_pkg += -I$(core_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_core_axi_read_if_pkg += $(core_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_core_axi_read_if_pkg += \ + \ + -o .so + +comp_core_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_core_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_core_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_core_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_core_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..bfe89a8e0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of core_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if.compile new file mode 100644 index 000000000..5aa3fb538 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - core_axi_read_if_hvl.compile + - core_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..58385ae7f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use core_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/core_axi_read_if_if.sv +src/core_axi_read_if_driver_bfm.sv +src/core_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_common.compile new file mode 100644 index 000000000..9374bee40 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..6dfc76a5f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..c3606bba2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..6c5bc4baa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hdl.compile new file mode 100644 index 000000000..6665d30a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./core_axi_read_if_common.compile +incdir: + - . +src: + - src/core_axi_read_if_if.sv + - src/core_axi_read_if_monitor_bfm.sv + - src/core_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hvl.compile new file mode 100644 index 000000000..ffce38e1b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./core_axi_read_if_common.compile +incdir: + - . +src: + - core_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.sv new file mode 100644 index 000000000..5be093439 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import core_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/core_axi_read_if_macros.svh" + + export core_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/core_axi_read_if_typedefs.svh" + `include "src/core_axi_read_if_transaction.svh" + + `include "src/core_axi_read_if_configuration.svh" + `include "src/core_axi_read_if_driver.svh" + `include "src/core_axi_read_if_monitor.svh" + + `include "src/core_axi_read_if_transaction_coverage.svh" + `include "src/core_axi_read_if_sequence_base.svh" + `include "src/core_axi_read_if_random_sequence.svh" + + `include "src/core_axi_read_if_responder_sequence.svh" + `include "src/core_axi_read_if2reg_adapter.svh" + + `include "src/core_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..54878b149 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use core_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +core_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..738469493 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/core_axi_read_if_typedefs_hdl.svh" + `include "src/core_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..289cfb15d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..25ac277ab --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/core_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_read_if_pkg/core_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..872ddc7d8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the core_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( core_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "core_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : core_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_agent.svh new file mode 100644 index 000000000..74e70677a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(core_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(core_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(core_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( core_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_configuration.svh new file mode 100644 index 000000000..96293f076 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the core_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual core_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual core_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup core_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in core_axi_read_if_macros.svh + `core_axi_read_if_CONFIGURATION_STRUCT + core_axi_read_if_configuration_s core_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a core_axi_read_if_configuration_s + // structure. The function returns the handle to the core_axi_read_if_configuration_struct. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + core_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + core_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + core_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + core_axi_read_if_configuration_cg.set_inst_name($sformatf("core_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver.svh new file mode 100644 index 000000000..2da1ca1ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual core_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( core_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in core_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm +// to communicate initiator driven data to core_axi_read_if_driver_bfm. +`core_axi_read_if_INITIATOR_STRUCT + core_axi_read_if_initiator_s core_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm +// to communicate Responder driven data to core_axi_read_if_driver_bfm. +`core_axi_read_if_RESPONDER_STRUCT + core_axi_read_if_responder_s core_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + core_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(core_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + core_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(core_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..cfce6e49c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the core_axi_read_if signal driving. It is +// accessed by the uvm core_axi_read_if driver through a virtual interface +// handle in the core_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type core_axi_read_if_if. +// +// Input signals from the core_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within core_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_read_if_pkg_hdl::*; +`include "src/core_axi_read_if_macros.svh" + +interface core_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (core_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute core_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + core_axi_read_if_pkg::core_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in core_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from core_axi_read_if_driver to this BFM + // **************************************************************************** + `core_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm + // to communicate initiator driven data to core_axi_read_if_driver_bfm. + `core_axi_read_if_INITIATOR_STRUCT + core_axi_read_if_initiator_s initiator_struct; + // Responder macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm + // to communicate Responder driven data to core_axi_read_if_driver_bfm. + `core_axi_read_if_RESPONDER_STRUCT + core_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(core_axi_read_if_configuration_s core_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input core_axi_read_if_initiator_s core_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output core_axi_read_if_responder_s core_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the core_axi_read_if_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Members within the core_axi_read_if_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + initiator_struct = core_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // core_axi_read_if_responder_struct.xyz = arready_i; // + // core_axi_read_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // core_axi_read_if_responder_struct.xyz = rresp_i; // + // core_axi_read_if_responder_struct.xyz = rid_i; // + // core_axi_read_if_responder_struct.xyz = rlast_i; // + // core_axi_read_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // core_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = core_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output core_axi_read_if_initiator_s core_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input core_axi_read_if_responder_s core_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the core_axi_read_if_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Variables within the core_axi_read_if_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= core_axi_read_if_initiator_struct.xyz; // + // rdata_o <= core_axi_read_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= core_axi_read_if_initiator_struct.xyz; // + // rid_o <= core_axi_read_if_initiator_struct.xyz; // + // rlast_o <= core_axi_read_if_initiator_struct.xyz; // + // rvalid_o <= core_axi_read_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the core_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the core_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_if.sv new file mode 100644 index 000000000..bd1242f03 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the core_axi_read_if interface signals. +// It is instantiated once per core_axi_read_if bus. Bus Functional Models, +// BFM's named core_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named core_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(core_axi_read_if_bus.arready), // Agent input +// .dut_signal_port(core_axi_read_if_bus.rdata), // Agent input +// .dut_signal_port(core_axi_read_if_bus.rresp), // Agent input +// .dut_signal_port(core_axi_read_if_bus.rid), // Agent input +// .dut_signal_port(core_axi_read_if_bus.rlast), // Agent input +// .dut_signal_port(core_axi_read_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import core_axi_read_if_pkg_hdl::*; + +interface core_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_macros.svh new file mode 100644 index 000000000..61c6fdb62 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the core_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the core_axi_read_if_configuration class. +// + `define core_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } core_axi_read_if_configuration_s; + + `define core_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function core_axi_read_if_configuration_s to_struct();\ + core_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( core_axi_read_if_configuration_struct );\ + endfunction + + `define core_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(core_axi_read_if_configuration_s core_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = core_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the core_axi_read_if_transaction class. +// + `define core_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } core_axi_read_if_monitor_s; + + `define core_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function core_axi_read_if_monitor_s to_monitor_struct();\ + core_axi_read_if_monitor_struct = \ + { \ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( core_axi_read_if_monitor_struct);\ + endfunction\ + + `define core_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(core_axi_read_if_monitor_s core_axi_read_if_monitor_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = core_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the core_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } core_axi_read_if_initiator_s; + + `define core_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function core_axi_read_if_initiator_s to_initiator_struct();\ + core_axi_read_if_initiator_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( core_axi_read_if_initiator_struct);\ + endfunction + + `define core_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(core_axi_read_if_initiator_s core_axi_read_if_initiator_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = core_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the core_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } core_axi_read_if_responder_s; + + `define core_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function core_axi_read_if_responder_s to_responder_struct();\ + core_axi_read_if_responder_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( core_axi_read_if_responder_struct);\ + endfunction + + `define core_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(core_axi_read_if_responder_s core_axi_read_if_responder_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = core_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor.svh new file mode 100644 index 000000000..a26f7ab33 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives core_axi_read_if transactions observed by the +// core_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual core_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`core_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the core_axi_read_if_monitor_struct. + virtual function void notify_transaction(input core_axi_read_if_monitor_s core_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(core_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..3940f5ab1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the core_axi_read_if signal monitoring. +// It is accessed by the uvm core_axi_read_if monitor through a virtual +// interface handle in the core_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type core_axi_read_if_if. +// +// Input signals from the core_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the core_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_read_if_pkg_hdl::*; +`include "src/core_axi_read_if_macros.svh" + + +interface core_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( core_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute core_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`core_axi_read_if_MONITOR_STRUCT + core_axi_read_if_monitor_s core_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `core_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + core_axi_read_if_pkg::core_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( core_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( core_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(core_axi_read_if_configuration_s core_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output core_axi_read_if_monitor_s core_axi_read_if_monitor_struct); + // + // Available struct members: + // // core_axi_read_if_monitor_struct.core_arready + // // core_axi_read_if_monitor_struct.core_rdata + // // core_axi_read_if_monitor_struct.core_rresp + // // core_axi_read_if_monitor_struct.core_rid + // // core_axi_read_if_monitor_struct.core_rlast + // // core_axi_read_if_monitor_struct.core_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // core_axi_read_if_monitor_struct.xyz = arready_i; // + // core_axi_read_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // core_axi_read_if_monitor_struct.xyz = rresp_i; // + // core_axi_read_if_monitor_struct.xyz = rid_i; // + // core_axi_read_if_monitor_struct.xyz = rlast_i; // + // core_axi_read_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..9f52585cd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the core_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a core_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "core_axi_read_if_random_sequence::body()-core_axi_read_if_transaction randomization failed") + // Send the transaction to the core_axi_read_if_driver_bfm via the sequencer and core_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: core_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..a51c239e4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "core_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..39f9a15a4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_read_if_transaction_req_t; + core_axi_read_if_transaction_req_t req; + typedef core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_read_if_transaction_rsp_t; + core_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = core_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = core_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction.svh new file mode 100644 index 000000000..2b8fc724c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an core_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( core_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_arready ; + logic [DW-1:0] core_rdata ; + axi_pkg::axi_burst_e core_rresp ; + logic [IW-1:0] core_rid ; + logic core_rlast ; + logic core_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in core_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by core_axi_read_if_monitor and core_axi_read_if_monitor_bfm + // This struct is defined in core_axi_read_if_macros.svh + `core_axi_read_if_MONITOR_STRUCT + core_axi_read_if_monitor_s core_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a core_axi_read_if_monitor_s + // structure. The function returns the handle to the core_axi_read_if_monitor_struct. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm + // to communicate initiator driven data to core_axi_read_if_driver_bfm. + // This struct is defined in core_axi_read_if_macros.svh + `core_axi_read_if_INITIATOR_STRUCT + core_axi_read_if_initiator_s core_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a core_axi_read_if_initiator_s + // structure. The function returns the handle to the core_axi_read_if_initiator_struct. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by core_axi_read_if_driver and core_axi_read_if_driver_bfm + // to communicate Responder driven data to core_axi_read_if_driver_bfm. + // This struct is defined in core_axi_read_if_macros.svh + `core_axi_read_if_RESPONDER_STRUCT + core_axi_read_if_responder_s core_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a core_axi_read_if_responder_s + // structure. The function returns the handle to the core_axi_read_if_responder_struct. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_read_if_macros.svh + `core_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_arready:0x%x core_rdata:0x%x core_rresp:0x%x core_rid:0x%x core_rlast:0x%x core_rvalid:0x%x ",core_arready,core_rdata,core_rresp,core_rid,core_rlast,core_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_arready == RHS.core_arready) + &&(this.core_rdata == RHS.core_rdata) + &&(this.core_rresp == RHS.core_rresp) + &&(this.core_rid == RHS.core_rid) + &&(this.core_rlast == RHS.core_rlast) + &&(this.core_rvalid == RHS.core_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_arready = RHS.core_arready; + this.core_rdata = RHS.core_rdata; + this.core_rresp = RHS.core_rresp; + this.core_rid = RHS.core_rid; + this.core_rlast = RHS.core_rlast; + this.core_rvalid = RHS.core_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"core_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_arready,"core_arready"); + $add_attribute(transaction_view_h,core_rdata,"core_rdata"); + $add_attribute(transaction_view_h,core_rresp,"core_rresp"); + $add_attribute(transaction_view_h,core_rid,"core_rid"); + $add_attribute(transaction_view_h,core_rlast,"core_rlast"); + $add_attribute(transaction_view_h,core_rvalid,"core_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..0e45fd07d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records core_axi_read_if transaction information using +// a covergroup named core_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup core_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_arready: coverpoint coverage_trans.core_arready; + core_rdata: coverpoint coverage_trans.core_rdata; + core_rresp: coverpoint coverage_trans.core_rresp; + core_rid: coverpoint coverage_trans.core_rid; + core_rlast: coverpoint coverage_trans.core_rlast; + core_rvalid: coverpoint coverage_trans.core_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + core_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + core_axi_read_if_transaction_cg.set_inst_name($sformatf("core_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + core_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/src/core_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/yaml/core_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/yaml/core_axi_read_if_interface.yaml new file mode 100644 index 000000000..be65d5c34 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_if_pkg/yaml/core_axi_read_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + core_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/.project new file mode 100644 index 000000000..d9e187c97 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + core_axi_read_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/.svproject new file mode 100644 index 000000000..6620fd792 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/Makefile new file mode 100644 index 000000000..674d9fe11 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# core_axi_read_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +core_axi_read_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hvl.f + +core_axi_read_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hdl.f + +core_axi_read_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_xrtl.f + +COMP_core_axi_read_out_if_PKG_TGT_0 = q_comp_core_axi_read_out_if_pkg +COMP_core_axi_read_out_if_PKG_TGT_1 = v_comp_core_axi_read_out_if_pkg +COMP_core_axi_read_out_if_PKG_TGT = $(COMP_core_axi_read_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_core_axi_read_out_if_pkg: $(COMP_core_axi_read_out_if_PKG_TGT) + +q_comp_core_axi_read_out_if_pkg: + $(HDL_COMP_CMD) $(core_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(core_axi_read_out_if_PKG_XRTL) + +v_comp_core_axi_read_out_if_pkg: + $(HVL_COMP_CMD) $(core_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_read_out_if_PKG) + $(VELANALYZE_CMD) $(core_axi_read_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(core_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(core_axi_read_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export core_axi_read_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_core_axi_read_out_if_pkg = \ + +O_FILE_COMPILE_LIST_core_axi_read_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_core_axi_read_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_core_axi_read_out_if_pkg += -I$(core_axi_read_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_core_axi_read_out_if_pkg += $(core_axi_read_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_core_axi_read_out_if_pkg += \ + \ + -o .so + +comp_core_axi_read_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_core_axi_read_out_if_pkg) $(C_FILE_COMPILE_LIST_core_axi_read_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_core_axi_read_out_if_pkg) $(O_FILE_COMPILE_LIST_core_axi_read_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/compile.do new file mode 100644 index 000000000..73e42d35e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of core_axi_read_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if.compile new file mode 100644 index 000000000..6899ae4aa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if.compile @@ -0,0 +1,3 @@ +needs: + - core_axi_read_out_if_hvl.compile + - core_axi_read_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_bfm.vinfo new file mode 100644 index 000000000..d3826b867 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use core_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/core_axi_read_out_if_if.sv +src/core_axi_read_out_if_driver_bfm.sv +src/core_axi_read_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_common.compile new file mode 100644 index 000000000..439747e2b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - core_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hdl.f new file mode 100644 index 000000000..61a64a8fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hvl.f new file mode 100644 index 000000000..63499edc2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_xrtl.f new file mode 100644 index 000000000..54bc26587 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hdl.compile new file mode 100644 index 000000000..c01edb529 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./core_axi_read_out_if_common.compile +incdir: + - . +src: + - src/core_axi_read_out_if_if.sv + - src/core_axi_read_out_if_monitor_bfm.sv + - src/core_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hvl.compile new file mode 100644 index 000000000..52b13e38e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./core_axi_read_out_if_common.compile +incdir: + - . +src: + - core_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.sv new file mode 100644 index 000000000..27da26683 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_read_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import core_axi_read_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/core_axi_read_out_if_macros.svh" + + export core_axi_read_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/core_axi_read_out_if_typedefs.svh" + `include "src/core_axi_read_out_if_transaction.svh" + + `include "src/core_axi_read_out_if_configuration.svh" + `include "src/core_axi_read_out_if_driver.svh" + `include "src/core_axi_read_out_if_monitor.svh" + + `include "src/core_axi_read_out_if_transaction_coverage.svh" + `include "src/core_axi_read_out_if_sequence_base.svh" + `include "src/core_axi_read_out_if_random_sequence.svh" + + `include "src/core_axi_read_out_if_responder_sequence.svh" + `include "src/core_axi_read_out_if2reg_adapter.svh" + + `include "src/core_axi_read_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.vinfo new file mode 100644 index 000000000..353f8e89e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use core_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +core_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.sv new file mode 100644 index 000000000..af073f726 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_read_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/core_axi_read_out_if_typedefs_hdl.svh" + `include "src/core_axi_read_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..da16ef949 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +core_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_sve.F new file mode 100644 index 000000000..847a827c8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_read_out_if_pkg/core_axi_read_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if2reg_adapter.svh new file mode 100644 index 000000000..ab579bfdc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the core_axi_read_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( core_axi_read_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "core_axi_read_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : core_axi_read_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_agent.svh new file mode 100644 index 000000000..8a5580622 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(core_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(core_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(core_axi_read_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( core_axi_read_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_configuration.svh new file mode 100644 index 000000000..0873724c5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the core_axi_read_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual core_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual core_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_read_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup core_axi_read_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_CONFIGURATION_STRUCT + core_axi_read_out_if_configuration_s core_axi_read_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a core_axi_read_out_if_configuration_s + // structure. The function returns the handle to the core_axi_read_out_if_configuration_struct. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + core_axi_read_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + core_axi_read_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + core_axi_read_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + core_axi_read_out_if_configuration_cg.set_inst_name($sformatf("core_axi_read_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(core_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver.svh new file mode 100644 index 000000000..fe19e1127 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual core_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( core_axi_read_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in core_axi_read_out_if_macros.svh +//******************************************************************* +// Initiator macro used by core_axi_read_out_if_driver and core_axi_read_out_if_driver_bfm +// to communicate initiator driven data to core_axi_read_out_if_driver_bfm. +`core_axi_read_out_if_INITIATOR_STRUCT + core_axi_read_out_if_initiator_s core_axi_read_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by core_axi_read_out_if_driver and core_axi_read_out_if_driver_bfm +// to communicate Responder driven data to core_axi_read_out_if_driver_bfm. +`core_axi_read_out_if_RESPONDER_STRUCT + core_axi_read_out_if_responder_s core_axi_read_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + core_axi_read_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(core_axi_read_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + core_axi_read_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(core_axi_read_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver_bfm.sv new file mode 100644 index 000000000..4569dc443 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the core_axi_read_out_if signal driving. It is +// accessed by the uvm core_axi_read_out_if driver through a virtual interface +// handle in the core_axi_read_out_if configuration. It drives the singals passed +// in through the port connection named bus of type core_axi_read_out_if_if. +// +// Input signals from the core_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within core_axi_read_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_read_out_if_pkg_hdl::*; +`include "src/core_axi_read_out_if_macros.svh" + +interface core_axi_read_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (core_axi_read_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute core_axi_read_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + core_axi_read_out_if_pkg::core_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in core_axi_read_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from core_axi_read_out_if_driver to this BFM + // **************************************************************************** + `core_axi_read_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by core_axi_read_out_if_driver and core_axi_read_out_if_driver_bfm + // to communicate initiator driven data to core_axi_read_out_if_driver_bfm. + `core_axi_read_out_if_INITIATOR_STRUCT + core_axi_read_out_if_initiator_s initiator_struct; + // Responder macro used by core_axi_read_out_if_driver and core_axi_read_out_if_driver_bfm + // to communicate Responder driven data to core_axi_read_out_if_driver_bfm. + `core_axi_read_out_if_RESPONDER_STRUCT + core_axi_read_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(core_axi_read_out_if_configuration_s core_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input core_axi_read_out_if_initiator_s core_axi_read_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output core_axi_read_out_if_responder_s core_axi_read_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the core_axi_read_out_if_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Members within the core_axi_read_out_if_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + initiator_struct = core_axi_read_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // core_axi_read_out_if_responder_struct.xyz = arready_i; // + // core_axi_read_out_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // core_axi_read_out_if_responder_struct.xyz = rresp_i; // + // core_axi_read_out_if_responder_struct.xyz = rid_i; // + // core_axi_read_out_if_responder_struct.xyz = rlast_i; // + // core_axi_read_out_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // core_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = core_axi_read_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output core_axi_read_out_if_initiator_s core_axi_read_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input core_axi_read_out_if_responder_s core_axi_read_out_if_responder_struct + );// pragma tbx xtf + // Variables within the core_axi_read_out_if_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Variables within the core_axi_read_out_if_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= core_axi_read_out_if_initiator_struct.xyz; // + // rdata_o <= core_axi_read_out_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= core_axi_read_out_if_initiator_struct.xyz; // + // rid_o <= core_axi_read_out_if_initiator_struct.xyz; // + // rlast_o <= core_axi_read_out_if_initiator_struct.xyz; // + // rvalid_o <= core_axi_read_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the core_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the core_axi_read_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_if.sv new file mode 100644 index 000000000..0bdb905ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the core_axi_read_out_if interface signals. +// It is instantiated once per core_axi_read_out_if bus. Bus Functional Models, +// BFM's named core_axi_read_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named core_axi_read_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(core_axi_read_out_if_bus.arready), // Agent input +// .dut_signal_port(core_axi_read_out_if_bus.rdata), // Agent input +// .dut_signal_port(core_axi_read_out_if_bus.rresp), // Agent input +// .dut_signal_port(core_axi_read_out_if_bus.rid), // Agent input +// .dut_signal_port(core_axi_read_out_if_bus.rlast), // Agent input +// .dut_signal_port(core_axi_read_out_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import core_axi_read_out_if_pkg_hdl::*; + +interface core_axi_read_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_macros.svh new file mode 100644 index 000000000..778373aa8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the core_axi_read_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the core_axi_read_out_if_configuration class. +// + `define core_axi_read_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } core_axi_read_out_if_configuration_s; + + `define core_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function core_axi_read_out_if_configuration_s to_struct();\ + core_axi_read_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( core_axi_read_out_if_configuration_struct );\ + endfunction + + `define core_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(core_axi_read_out_if_configuration_s core_axi_read_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = core_axi_read_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the core_axi_read_out_if_transaction class. +// + `define core_axi_read_out_if_MONITOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } core_axi_read_out_if_monitor_s; + + `define core_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function core_axi_read_out_if_monitor_s to_monitor_struct();\ + core_axi_read_out_if_monitor_struct = \ + { \ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( core_axi_read_out_if_monitor_struct);\ + endfunction\ + + `define core_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(core_axi_read_out_if_monitor_s core_axi_read_out_if_monitor_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = core_axi_read_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the core_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_read_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } core_axi_read_out_if_initiator_s; + + `define core_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function core_axi_read_out_if_initiator_s to_initiator_struct();\ + core_axi_read_out_if_initiator_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( core_axi_read_out_if_initiator_struct);\ + endfunction + + `define core_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(core_axi_read_out_if_initiator_s core_axi_read_out_if_initiator_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = core_axi_read_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the core_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_read_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } core_axi_read_out_if_responder_s; + + `define core_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function core_axi_read_out_if_responder_s to_responder_struct();\ + core_axi_read_out_if_responder_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( core_axi_read_out_if_responder_struct);\ + endfunction + + `define core_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(core_axi_read_out_if_responder_s core_axi_read_out_if_responder_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = core_axi_read_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor.svh new file mode 100644 index 000000000..8cd448e91 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives core_axi_read_out_if transactions observed by the +// core_axi_read_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual core_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_read_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`core_axi_read_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the core_axi_read_out_if_monitor_struct. + virtual function void notify_transaction(input core_axi_read_out_if_monitor_s core_axi_read_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(core_axi_read_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor_bfm.sv new file mode 100644 index 000000000..d47c910f6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the core_axi_read_out_if signal monitoring. +// It is accessed by the uvm core_axi_read_out_if monitor through a virtual +// interface handle in the core_axi_read_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type core_axi_read_out_if_if. +// +// Input signals from the core_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the core_axi_read_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_read_out_if_pkg_hdl::*; +`include "src/core_axi_read_out_if_macros.svh" + + +interface core_axi_read_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( core_axi_read_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute core_axi_read_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`core_axi_read_out_if_MONITOR_STRUCT + core_axi_read_out_if_monitor_s core_axi_read_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `core_axi_read_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + core_axi_read_out_if_pkg::core_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( core_axi_read_out_if_monitor_struct ); + + + proxy.notify_transaction( core_axi_read_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(core_axi_read_out_if_configuration_s core_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output core_axi_read_out_if_monitor_s core_axi_read_out_if_monitor_struct); + // + // Available struct members: + // // core_axi_read_out_if_monitor_struct.core_arready + // // core_axi_read_out_if_monitor_struct.core_rdata + // // core_axi_read_out_if_monitor_struct.core_rresp + // // core_axi_read_out_if_monitor_struct.core_rid + // // core_axi_read_out_if_monitor_struct.core_rlast + // // core_axi_read_out_if_monitor_struct.core_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // core_axi_read_out_if_monitor_struct.xyz = arready_i; // + // core_axi_read_out_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // core_axi_read_out_if_monitor_struct.xyz = rresp_i; // + // core_axi_read_out_if_monitor_struct.xyz = rid_i; // + // core_axi_read_out_if_monitor_struct.xyz = rlast_i; // + // core_axi_read_out_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_random_sequence.svh new file mode 100644 index 000000000..51d933c94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the core_axi_read_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a core_axi_read_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_read_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=core_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "core_axi_read_out_if_random_sequence::body()-core_axi_read_out_if_transaction randomization failed") + // Send the transaction to the core_axi_read_out_if_driver_bfm via the sequencer and core_axi_read_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: core_axi_read_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_responder_sequence.svh new file mode 100644 index 000000000..f41646f83 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_read_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "core_axi_read_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=core_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_sequence_base.svh new file mode 100644 index 000000000..9e9fbb58b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_read_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_read_out_if_transaction_req_t; + core_axi_read_out_if_transaction_req_t req; + typedef core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_read_out_if_transaction_rsp_t; + core_axi_read_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = core_axi_read_out_if_transaction_req_t::type_id::create("req"); + rsp = core_axi_read_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction.svh new file mode 100644 index 000000000..7b95d521b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an core_axi_read_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( core_axi_read_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_arready ; + logic [DW-1:0] core_rdata ; + axi_pkg::axi_burst_e core_rresp ; + logic [IW-1:0] core_rid ; + logic core_rlast ; + logic core_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in core_axi_read_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by core_axi_read_out_if_monitor and core_axi_read_out_if_monitor_bfm + // This struct is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_MONITOR_STRUCT + core_axi_read_out_if_monitor_s core_axi_read_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a core_axi_read_out_if_monitor_s + // structure. The function returns the handle to the core_axi_read_out_if_monitor_struct. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by core_axi_read_out_if_driver and core_axi_read_out_if_driver_bfm + // to communicate initiator driven data to core_axi_read_out_if_driver_bfm. + // This struct is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_INITIATOR_STRUCT + core_axi_read_out_if_initiator_s core_axi_read_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a core_axi_read_out_if_initiator_s + // structure. The function returns the handle to the core_axi_read_out_if_initiator_struct. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by core_axi_read_out_if_driver and core_axi_read_out_if_driver_bfm + // to communicate Responder driven data to core_axi_read_out_if_driver_bfm. + // This struct is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_RESPONDER_STRUCT + core_axi_read_out_if_responder_s core_axi_read_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a core_axi_read_out_if_responder_s + // structure. The function returns the handle to the core_axi_read_out_if_responder_struct. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_read_out_if_macros.svh + `core_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_arready:0x%x core_rdata:0x%x core_rresp:0x%x core_rid:0x%x core_rlast:0x%x core_rvalid:0x%x ",core_arready,core_rdata,core_rresp,core_rid,core_rlast,core_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_arready == RHS.core_arready) + &&(this.core_rdata == RHS.core_rdata) + &&(this.core_rresp == RHS.core_rresp) + &&(this.core_rid == RHS.core_rid) + &&(this.core_rlast == RHS.core_rlast) + &&(this.core_rvalid == RHS.core_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_arready = RHS.core_arready; + this.core_rdata = RHS.core_rdata; + this.core_rresp = RHS.core_rresp; + this.core_rid = RHS.core_rid; + this.core_rlast = RHS.core_rlast; + this.core_rvalid = RHS.core_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"core_axi_read_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_arready,"core_arready"); + $add_attribute(transaction_view_h,core_rdata,"core_rdata"); + $add_attribute(transaction_view_h,core_rresp,"core_rresp"); + $add_attribute(transaction_view_h,core_rid,"core_rid"); + $add_attribute(transaction_view_h,core_rlast,"core_rlast"); + $add_attribute(transaction_view_h,core_rvalid,"core_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction_coverage.svh new file mode 100644 index 000000000..938c15317 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records core_axi_read_out_if transaction information using +// a covergroup named core_axi_read_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_read_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_read_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup core_axi_read_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_arready: coverpoint coverage_trans.core_arready; + core_rdata: coverpoint coverage_trans.core_rdata; + core_rresp: coverpoint coverage_trans.core_rresp; + core_rid: coverpoint coverage_trans.core_rid; + core_rlast: coverpoint coverage_trans.core_rlast; + core_rvalid: coverpoint coverage_trans.core_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + core_axi_read_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + core_axi_read_out_if_transaction_cg.set_inst_name($sformatf("core_axi_read_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + core_axi_read_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/src/core_axi_read_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/yaml/core_axi_read_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/yaml/core_axi_read_out_if_interface.yaml new file mode 100644 index 000000000..4624cc767 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_read_out_if_pkg/yaml/core_axi_read_out_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + core_axi_read_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/.project new file mode 100644 index 000000000..c317ffc88 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/.project @@ -0,0 +1,30 @@ + + + core_axi_write_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/.svproject new file mode 100644 index 000000000..c0a4e460d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/Makefile new file mode 100644 index 000000000..7e6ea601e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/Makefile @@ -0,0 +1,66 @@ +# core_axi_write_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +core_axi_write_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f + +core_axi_write_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f + +core_axi_write_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f + +COMP_core_axi_write_if_PKG_TGT_0 = q_comp_core_axi_write_if_pkg +COMP_core_axi_write_if_PKG_TGT_1 = v_comp_core_axi_write_if_pkg +COMP_core_axi_write_if_PKG_TGT = $(COMP_core_axi_write_if_PKG_TGT_$(USE_VELOCE)) + +comp_core_axi_write_if_pkg: $(COMP_core_axi_write_if_PKG_TGT) + +q_comp_core_axi_write_if_pkg: + $(HDL_COMP_CMD) $(core_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_write_if_PKG) + $(HDL_COMP_CMD) $(core_axi_write_if_PKG_XRTL) + +v_comp_core_axi_write_if_pkg: + $(HVL_COMP_CMD) $(core_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_write_if_PKG) + $(VELANALYZE_CMD) $(core_axi_write_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(core_axi_write_if_PKG) + $(HDL_COMP_CMD) $(core_axi_write_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export core_axi_write_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/dpi + +C_FILE_COMPILE_LIST_core_axi_write_if_pkg = \ + +O_FILE_COMPILE_LIST_core_axi_write_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_core_axi_write_if_pkg:.c=.o)) + +GCC_COMP_ARGS_core_axi_write_if_pkg += -I$(core_axi_write_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_core_axi_write_if_pkg += $(core_axi_write_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_core_axi_write_if_pkg += \ + \ + -o .so + +comp_core_axi_write_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_core_axi_write_if_pkg) $(C_FILE_COMPILE_LIST_core_axi_write_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_core_axi_write_if_pkg) $(O_FILE_COMPILE_LIST_core_axi_write_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/compile.do new file mode 100644 index 000000000..d57b919fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of core_axi_write_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if.compile new file mode 100644 index 000000000..d5945e5ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if.compile @@ -0,0 +1,3 @@ +needs: + - core_axi_write_if_hvl.compile + - core_axi_write_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_bfm.vinfo new file mode 100644 index 000000000..ab7c2fca6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use core_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/core_axi_write_if_if.sv +src/core_axi_write_if_driver_bfm.sv +src/core_axi_write_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_common.compile new file mode 100644 index 000000000..4922a4200 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f new file mode 100644 index 000000000..b14f9380d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f new file mode 100644 index 000000000..a56447389 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f new file mode 100644 index 000000000..d93277776 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hdl.compile new file mode 100644 index 000000000..0328e5087 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./core_axi_write_if_common.compile +incdir: + - . +src: + - src/core_axi_write_if_if.sv + - src/core_axi_write_if_monitor_bfm.sv + - src/core_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hvl.compile new file mode 100644 index 000000000..e19dd38c2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./core_axi_write_if_common.compile +incdir: + - . +src: + - core_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.sv new file mode 100644 index 000000000..ee9c7cec8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_write_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import core_axi_write_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/core_axi_write_if_macros.svh" + + export core_axi_write_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/core_axi_write_if_typedefs.svh" + `include "src/core_axi_write_if_transaction.svh" + + `include "src/core_axi_write_if_configuration.svh" + `include "src/core_axi_write_if_driver.svh" + `include "src/core_axi_write_if_monitor.svh" + + `include "src/core_axi_write_if_transaction_coverage.svh" + `include "src/core_axi_write_if_sequence_base.svh" + `include "src/core_axi_write_if_random_sequence.svh" + + `include "src/core_axi_write_if_responder_sequence.svh" + `include "src/core_axi_write_if2reg_adapter.svh" + + `include "src/core_axi_write_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.vinfo new file mode 100644 index 000000000..d8e9ffc3f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use core_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +core_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.sv new file mode 100644 index 000000000..2d56fd18c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_write_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/core_axi_write_if_typedefs_hdl.svh" + `include "src/core_axi_write_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.vinfo new file mode 100644 index 000000000..5360aa61b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_sve.F new file mode 100644 index 000000000..1c96c4aff --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/core_axi_write_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_write_if_pkg/core_axi_write_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if2reg_adapter.svh new file mode 100644 index 000000000..902b4b13e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the core_axi_write_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( core_axi_write_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "core_axi_write_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : core_axi_write_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_agent.svh new file mode 100644 index 000000000..38ae017f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(core_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(core_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(core_axi_write_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( core_axi_write_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_configuration.svh new file mode 100644 index 000000000..2178c5d3f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the core_axi_write_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual core_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual core_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_write_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup core_axi_write_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in core_axi_write_if_macros.svh + `core_axi_write_if_CONFIGURATION_STRUCT + core_axi_write_if_configuration_s core_axi_write_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a core_axi_write_if_configuration_s + // structure. The function returns the handle to the core_axi_write_if_configuration_struct. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + core_axi_write_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + core_axi_write_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + core_axi_write_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + core_axi_write_if_configuration_cg.set_inst_name($sformatf("core_axi_write_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver.svh new file mode 100644 index 000000000..61afbc09d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual core_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( core_axi_write_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in core_axi_write_if_macros.svh +//******************************************************************* +// Initiator macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm +// to communicate initiator driven data to core_axi_write_if_driver_bfm. +`core_axi_write_if_INITIATOR_STRUCT + core_axi_write_if_initiator_s core_axi_write_if_initiator_struct; +//******************************************************************* +// Responder macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm +// to communicate Responder driven data to core_axi_write_if_driver_bfm. +`core_axi_write_if_RESPONDER_STRUCT + core_axi_write_if_responder_s core_axi_write_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + core_axi_write_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(core_axi_write_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + core_axi_write_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(core_axi_write_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver_bfm.sv new file mode 100644 index 000000000..2e5f63dbd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the core_axi_write_if signal driving. It is +// accessed by the uvm core_axi_write_if driver through a virtual interface +// handle in the core_axi_write_if configuration. It drives the singals passed +// in through the port connection named bus of type core_axi_write_if_if. +// +// Input signals from the core_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within core_axi_write_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_write_if_pkg_hdl::*; +`include "src/core_axi_write_if_macros.svh" + +interface core_axi_write_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (core_axi_write_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute core_axi_write_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + core_axi_write_if_pkg::core_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in core_axi_write_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from core_axi_write_if_driver to this BFM + // **************************************************************************** + `core_axi_write_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm + // to communicate initiator driven data to core_axi_write_if_driver_bfm. + `core_axi_write_if_INITIATOR_STRUCT + core_axi_write_if_initiator_s initiator_struct; + // Responder macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm + // to communicate Responder driven data to core_axi_write_if_driver_bfm. + `core_axi_write_if_RESPONDER_STRUCT + core_axi_write_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(core_axi_write_if_configuration_s core_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input core_axi_write_if_initiator_s core_axi_write_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output core_axi_write_if_responder_s core_axi_write_if_responder_struct + );// pragma tbx xtf + // + // Members within the core_axi_write_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Members within the core_axi_write_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + initiator_struct = core_axi_write_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // core_axi_write_if_responder_struct.xyz = awready_i; // + // core_axi_write_if_responder_struct.xyz = wready_i; // + // core_axi_write_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // core_axi_write_if_responder_struct.xyz = bid_i; // + // core_axi_write_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // core_axi_write_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = core_axi_write_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output core_axi_write_if_initiator_s core_axi_write_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input core_axi_write_if_responder_s core_axi_write_if_responder_struct + );// pragma tbx xtf + // Variables within the core_axi_write_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Variables within the core_axi_write_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= core_axi_write_if_initiator_struct.xyz; // + // wready_o <= core_axi_write_if_initiator_struct.xyz; // + // bresp_o <= core_axi_write_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= core_axi_write_if_initiator_struct.xyz; // + // bvalid_o <= core_axi_write_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the core_axi_write_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the core_axi_write_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_if.sv new file mode 100644 index 000000000..86ab20f72 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the core_axi_write_if interface signals. +// It is instantiated once per core_axi_write_if bus. Bus Functional Models, +// BFM's named core_axi_write_if_driver_bfm, are used to drive signals on the bus. +// BFM's named core_axi_write_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(core_axi_write_if_bus.awready), // Agent input +// .dut_signal_port(core_axi_write_if_bus.wready), // Agent input +// .dut_signal_port(core_axi_write_if_bus.bresp), // Agent input +// .dut_signal_port(core_axi_write_if_bus.bid), // Agent input +// .dut_signal_port(core_axi_write_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import core_axi_write_if_pkg_hdl::*; + +interface core_axi_write_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_macros.svh new file mode 100644 index 000000000..8c8873557 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the core_axi_write_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the core_axi_write_if_configuration class. +// + `define core_axi_write_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } core_axi_write_if_configuration_s; + + `define core_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function core_axi_write_if_configuration_s to_struct();\ + core_axi_write_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( core_axi_write_if_configuration_struct );\ + endfunction + + `define core_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(core_axi_write_if_configuration_s core_axi_write_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = core_axi_write_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the core_axi_write_if_transaction class. +// + `define core_axi_write_if_MONITOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } core_axi_write_if_monitor_s; + + `define core_axi_write_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function core_axi_write_if_monitor_s to_monitor_struct();\ + core_axi_write_if_monitor_struct = \ + { \ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( core_axi_write_if_monitor_struct);\ + endfunction\ + + `define core_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(core_axi_write_if_monitor_s core_axi_write_if_monitor_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = core_axi_write_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the core_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_write_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } core_axi_write_if_initiator_s; + + `define core_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function core_axi_write_if_initiator_s to_initiator_struct();\ + core_axi_write_if_initiator_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( core_axi_write_if_initiator_struct);\ + endfunction + + `define core_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(core_axi_write_if_initiator_s core_axi_write_if_initiator_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = core_axi_write_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the core_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_write_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } core_axi_write_if_responder_s; + + `define core_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function core_axi_write_if_responder_s to_responder_struct();\ + core_axi_write_if_responder_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( core_axi_write_if_responder_struct);\ + endfunction + + `define core_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(core_axi_write_if_responder_s core_axi_write_if_responder_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = core_axi_write_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor.svh new file mode 100644 index 000000000..52be1a9ca --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives core_axi_write_if transactions observed by the +// core_axi_write_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual core_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_write_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`core_axi_write_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the core_axi_write_if_monitor_struct. + virtual function void notify_transaction(input core_axi_write_if_monitor_s core_axi_write_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(core_axi_write_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor_bfm.sv new file mode 100644 index 000000000..9661876ce --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the core_axi_write_if signal monitoring. +// It is accessed by the uvm core_axi_write_if monitor through a virtual +// interface handle in the core_axi_write_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type core_axi_write_if_if. +// +// Input signals from the core_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the core_axi_write_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_write_if_pkg_hdl::*; +`include "src/core_axi_write_if_macros.svh" + + +interface core_axi_write_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( core_axi_write_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute core_axi_write_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`core_axi_write_if_MONITOR_STRUCT + core_axi_write_if_monitor_s core_axi_write_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `core_axi_write_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + core_axi_write_if_pkg::core_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( core_axi_write_if_monitor_struct ); + + + proxy.notify_transaction( core_axi_write_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(core_axi_write_if_configuration_s core_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output core_axi_write_if_monitor_s core_axi_write_if_monitor_struct); + // + // Available struct members: + // // core_axi_write_if_monitor_struct.core_awready + // // core_axi_write_if_monitor_struct.core_wready + // // core_axi_write_if_monitor_struct.core_bresp + // // core_axi_write_if_monitor_struct.core_bid + // // core_axi_write_if_monitor_struct.core_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // core_axi_write_if_monitor_struct.xyz = awready_i; // + // core_axi_write_if_monitor_struct.xyz = wready_i; // + // core_axi_write_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // core_axi_write_if_monitor_struct.xyz = bid_i; // + // core_axi_write_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_random_sequence.svh new file mode 100644 index 000000000..9722594f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the core_axi_write_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a core_axi_write_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_write_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "core_axi_write_if_random_sequence::body()-core_axi_write_if_transaction randomization failed") + // Send the transaction to the core_axi_write_if_driver_bfm via the sequencer and core_axi_write_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: core_axi_write_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_responder_sequence.svh new file mode 100644 index 000000000..4ee61b3ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_write_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "core_axi_write_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_sequence_base.svh new file mode 100644 index 000000000..339755d18 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_write_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_write_if_transaction_req_t; + core_axi_write_if_transaction_req_t req; + typedef core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_write_if_transaction_rsp_t; + core_axi_write_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = core_axi_write_if_transaction_req_t::type_id::create("req"); + rsp = core_axi_write_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction.svh new file mode 100644 index 000000000..78c5353a7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an core_axi_write_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( core_axi_write_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_awready ; + logic core_wready ; + axi_pkg::axi_burst_e core_bresp ; + logic core_bid ; + logic core_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in core_axi_write_if_macros.svh + + //******************************************************************* + // Monitor macro used by core_axi_write_if_monitor and core_axi_write_if_monitor_bfm + // This struct is defined in core_axi_write_if_macros.svh + `core_axi_write_if_MONITOR_STRUCT + core_axi_write_if_monitor_s core_axi_write_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a core_axi_write_if_monitor_s + // structure. The function returns the handle to the core_axi_write_if_monitor_struct. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm + // to communicate initiator driven data to core_axi_write_if_driver_bfm. + // This struct is defined in core_axi_write_if_macros.svh + `core_axi_write_if_INITIATOR_STRUCT + core_axi_write_if_initiator_s core_axi_write_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a core_axi_write_if_initiator_s + // structure. The function returns the handle to the core_axi_write_if_initiator_struct. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by core_axi_write_if_driver and core_axi_write_if_driver_bfm + // to communicate Responder driven data to core_axi_write_if_driver_bfm. + // This struct is defined in core_axi_write_if_macros.svh + `core_axi_write_if_RESPONDER_STRUCT + core_axi_write_if_responder_s core_axi_write_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a core_axi_write_if_responder_s + // structure. The function returns the handle to the core_axi_write_if_responder_struct. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_write_if_macros.svh + `core_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awready:0x%x core_wready:0x%x core_bresp:0x%x core_bid:0x%x core_bvalid:0x%x ",core_awready,core_wready,core_bresp,core_bid,core_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_awready == RHS.core_awready) + &&(this.core_wready == RHS.core_wready) + &&(this.core_bresp == RHS.core_bresp) + &&(this.core_bid == RHS.core_bid) + &&(this.core_bvalid == RHS.core_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awready = RHS.core_awready; + this.core_wready = RHS.core_wready; + this.core_bresp = RHS.core_bresp; + this.core_bid = RHS.core_bid; + this.core_bvalid = RHS.core_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"core_axi_write_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awready,"core_awready"); + $add_attribute(transaction_view_h,core_wready,"core_wready"); + $add_attribute(transaction_view_h,core_bresp,"core_bresp"); + $add_attribute(transaction_view_h,core_bid,"core_bid"); + $add_attribute(transaction_view_h,core_bvalid,"core_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction_coverage.svh new file mode 100644 index 000000000..aa3fe1d6e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records core_axi_write_if transaction information using +// a covergroup named core_axi_write_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_write_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup core_axi_write_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awready: coverpoint coverage_trans.core_awready; + core_wready: coverpoint coverage_trans.core_wready; + core_bresp: coverpoint coverage_trans.core_bresp; + core_bid: coverpoint coverage_trans.core_bid; + core_bvalid: coverpoint coverage_trans.core_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + core_axi_write_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + core_axi_write_if_transaction_cg.set_inst_name($sformatf("core_axi_write_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + core_axi_write_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/src/core_axi_write_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/yaml/core_axi_write_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/yaml/core_axi_write_if_interface.yaml new file mode 100644 index 000000000..049bcebe2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_if_pkg/yaml/core_axi_write_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + core_axi_write_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/.project new file mode 100644 index 000000000..938b34c4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + core_axi_write_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/.svproject new file mode 100644 index 000000000..7a0d950c7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/Makefile new file mode 100644 index 000000000..732c0fa5f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# core_axi_write_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +core_axi_write_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hvl.f + +core_axi_write_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hdl.f + +core_axi_write_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_xrtl.f + +COMP_core_axi_write_out_if_PKG_TGT_0 = q_comp_core_axi_write_out_if_pkg +COMP_core_axi_write_out_if_PKG_TGT_1 = v_comp_core_axi_write_out_if_pkg +COMP_core_axi_write_out_if_PKG_TGT = $(COMP_core_axi_write_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_core_axi_write_out_if_pkg: $(COMP_core_axi_write_out_if_PKG_TGT) + +q_comp_core_axi_write_out_if_pkg: + $(HDL_COMP_CMD) $(core_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(core_axi_write_out_if_PKG_XRTL) + +v_comp_core_axi_write_out_if_pkg: + $(HVL_COMP_CMD) $(core_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(core_axi_write_out_if_PKG) + $(VELANALYZE_CMD) $(core_axi_write_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(core_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(core_axi_write_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export core_axi_write_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_core_axi_write_out_if_pkg = \ + +O_FILE_COMPILE_LIST_core_axi_write_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_core_axi_write_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_core_axi_write_out_if_pkg += -I$(core_axi_write_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_core_axi_write_out_if_pkg += $(core_axi_write_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_core_axi_write_out_if_pkg += \ + \ + -o .so + +comp_core_axi_write_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_core_axi_write_out_if_pkg) $(C_FILE_COMPILE_LIST_core_axi_write_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_core_axi_write_out_if_pkg) $(O_FILE_COMPILE_LIST_core_axi_write_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/compile.do new file mode 100644 index 000000000..54d017934 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of core_axi_write_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if.compile new file mode 100644 index 000000000..40e8aee73 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if.compile @@ -0,0 +1,3 @@ +needs: + - core_axi_write_out_if_hvl.compile + - core_axi_write_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_bfm.vinfo new file mode 100644 index 000000000..ccc4ac319 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use core_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/core_axi_write_out_if_if.sv +src/core_axi_write_out_if_driver_bfm.sv +src/core_axi_write_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_common.compile new file mode 100644 index 000000000..e684a6c49 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hdl.f new file mode 100644 index 000000000..3f8dc2a40 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hvl.f new file mode 100644 index 000000000..73fb6826d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_xrtl.f new file mode 100644 index 000000000..b5cb783d0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hdl.compile new file mode 100644 index 000000000..ddedadb4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./core_axi_write_out_if_common.compile +incdir: + - . +src: + - src/core_axi_write_out_if_if.sv + - src/core_axi_write_out_if_monitor_bfm.sv + - src/core_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hvl.compile new file mode 100644 index 000000000..c5d3d08a4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./core_axi_write_out_if_common.compile +incdir: + - . +src: + - core_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.sv new file mode 100644 index 000000000..483e82f13 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_write_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import core_axi_write_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/core_axi_write_out_if_macros.svh" + + export core_axi_write_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/core_axi_write_out_if_typedefs.svh" + `include "src/core_axi_write_out_if_transaction.svh" + + `include "src/core_axi_write_out_if_configuration.svh" + `include "src/core_axi_write_out_if_driver.svh" + `include "src/core_axi_write_out_if_monitor.svh" + + `include "src/core_axi_write_out_if_transaction_coverage.svh" + `include "src/core_axi_write_out_if_sequence_base.svh" + `include "src/core_axi_write_out_if_random_sequence.svh" + + `include "src/core_axi_write_out_if_responder_sequence.svh" + `include "src/core_axi_write_out_if2reg_adapter.svh" + + `include "src/core_axi_write_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.vinfo new file mode 100644 index 000000000..b15563968 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use core_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +core_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.sv new file mode 100644 index 000000000..c33ed1c80 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package core_axi_write_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/core_axi_write_out_if_typedefs_hdl.svh" + `include "src/core_axi_write_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..df5363cef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_sve.F new file mode 100644 index 000000000..47df0133c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/core_axi_write_out_if_pkg/core_axi_write_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if2reg_adapter.svh new file mode 100644 index 000000000..fefb54e87 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the core_axi_write_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( core_axi_write_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "core_axi_write_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : core_axi_write_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_agent.svh new file mode 100644 index 000000000..178e2aa3d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(core_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(core_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(core_axi_write_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( core_axi_write_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_configuration.svh new file mode 100644 index 000000000..d5fa5f073 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the core_axi_write_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual core_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual core_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_write_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup core_axi_write_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_CONFIGURATION_STRUCT + core_axi_write_out_if_configuration_s core_axi_write_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a core_axi_write_out_if_configuration_s + // structure. The function returns the handle to the core_axi_write_out_if_configuration_struct. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + core_axi_write_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + core_axi_write_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + core_axi_write_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + core_axi_write_out_if_configuration_cg.set_inst_name($sformatf("core_axi_write_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver.svh new file mode 100644 index 000000000..0c4673f28 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual core_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( core_axi_write_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in core_axi_write_out_if_macros.svh +//******************************************************************* +// Initiator macro used by core_axi_write_out_if_driver and core_axi_write_out_if_driver_bfm +// to communicate initiator driven data to core_axi_write_out_if_driver_bfm. +`core_axi_write_out_if_INITIATOR_STRUCT + core_axi_write_out_if_initiator_s core_axi_write_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by core_axi_write_out_if_driver and core_axi_write_out_if_driver_bfm +// to communicate Responder driven data to core_axi_write_out_if_driver_bfm. +`core_axi_write_out_if_RESPONDER_STRUCT + core_axi_write_out_if_responder_s core_axi_write_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + core_axi_write_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(core_axi_write_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + core_axi_write_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(core_axi_write_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver_bfm.sv new file mode 100644 index 000000000..2b871cb7e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the core_axi_write_out_if signal driving. It is +// accessed by the uvm core_axi_write_out_if driver through a virtual interface +// handle in the core_axi_write_out_if configuration. It drives the singals passed +// in through the port connection named bus of type core_axi_write_out_if_if. +// +// Input signals from the core_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within core_axi_write_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_write_out_if_pkg_hdl::*; +`include "src/core_axi_write_out_if_macros.svh" + +interface core_axi_write_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (core_axi_write_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute core_axi_write_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + core_axi_write_out_if_pkg::core_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in core_axi_write_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from core_axi_write_out_if_driver to this BFM + // **************************************************************************** + `core_axi_write_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by core_axi_write_out_if_driver and core_axi_write_out_if_driver_bfm + // to communicate initiator driven data to core_axi_write_out_if_driver_bfm. + `core_axi_write_out_if_INITIATOR_STRUCT + core_axi_write_out_if_initiator_s initiator_struct; + // Responder macro used by core_axi_write_out_if_driver and core_axi_write_out_if_driver_bfm + // to communicate Responder driven data to core_axi_write_out_if_driver_bfm. + `core_axi_write_out_if_RESPONDER_STRUCT + core_axi_write_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(core_axi_write_out_if_configuration_s core_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input core_axi_write_out_if_initiator_s core_axi_write_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output core_axi_write_out_if_responder_s core_axi_write_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the core_axi_write_out_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Members within the core_axi_write_out_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + initiator_struct = core_axi_write_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // core_axi_write_out_if_responder_struct.xyz = awready_i; // + // core_axi_write_out_if_responder_struct.xyz = wready_i; // + // core_axi_write_out_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // core_axi_write_out_if_responder_struct.xyz = bid_i; // + // core_axi_write_out_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // core_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = core_axi_write_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output core_axi_write_out_if_initiator_s core_axi_write_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input core_axi_write_out_if_responder_s core_axi_write_out_if_responder_struct + );// pragma tbx xtf + // Variables within the core_axi_write_out_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Variables within the core_axi_write_out_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= core_axi_write_out_if_initiator_struct.xyz; // + // wready_o <= core_axi_write_out_if_initiator_struct.xyz; // + // bresp_o <= core_axi_write_out_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= core_axi_write_out_if_initiator_struct.xyz; // + // bvalid_o <= core_axi_write_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the core_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the core_axi_write_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_if.sv new file mode 100644 index 000000000..ae3e65b7e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the core_axi_write_out_if interface signals. +// It is instantiated once per core_axi_write_out_if bus. Bus Functional Models, +// BFM's named core_axi_write_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named core_axi_write_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(core_axi_write_out_if_bus.awready), // Agent input +// .dut_signal_port(core_axi_write_out_if_bus.wready), // Agent input +// .dut_signal_port(core_axi_write_out_if_bus.bresp), // Agent input +// .dut_signal_port(core_axi_write_out_if_bus.bid), // Agent input +// .dut_signal_port(core_axi_write_out_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import core_axi_write_out_if_pkg_hdl::*; + +interface core_axi_write_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_macros.svh new file mode 100644 index 000000000..87d43196c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the core_axi_write_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the core_axi_write_out_if_configuration class. +// + `define core_axi_write_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } core_axi_write_out_if_configuration_s; + + `define core_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function core_axi_write_out_if_configuration_s to_struct();\ + core_axi_write_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( core_axi_write_out_if_configuration_struct );\ + endfunction + + `define core_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(core_axi_write_out_if_configuration_s core_axi_write_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = core_axi_write_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the core_axi_write_out_if_transaction class. +// + `define core_axi_write_out_if_MONITOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } core_axi_write_out_if_monitor_s; + + `define core_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function core_axi_write_out_if_monitor_s to_monitor_struct();\ + core_axi_write_out_if_monitor_struct = \ + { \ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( core_axi_write_out_if_monitor_struct);\ + endfunction\ + + `define core_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(core_axi_write_out_if_monitor_s core_axi_write_out_if_monitor_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = core_axi_write_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the core_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_write_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } core_axi_write_out_if_initiator_s; + + `define core_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function core_axi_write_out_if_initiator_s to_initiator_struct();\ + core_axi_write_out_if_initiator_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( core_axi_write_out_if_initiator_struct);\ + endfunction + + `define core_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(core_axi_write_out_if_initiator_s core_axi_write_out_if_initiator_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = core_axi_write_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the core_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define core_axi_write_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } core_axi_write_out_if_responder_s; + + `define core_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function core_axi_write_out_if_responder_s to_responder_struct();\ + core_axi_write_out_if_responder_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( core_axi_write_out_if_responder_struct);\ + endfunction + + `define core_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(core_axi_write_out_if_responder_s core_axi_write_out_if_responder_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = core_axi_write_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor.svh new file mode 100644 index 000000000..7371c7122 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives core_axi_write_out_if transactions observed by the +// core_axi_write_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual core_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_write_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`core_axi_write_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the core_axi_write_out_if_monitor_struct. + virtual function void notify_transaction(input core_axi_write_out_if_monitor_s core_axi_write_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(core_axi_write_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor_bfm.sv new file mode 100644 index 000000000..870cb1641 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the core_axi_write_out_if signal monitoring. +// It is accessed by the uvm core_axi_write_out_if monitor through a virtual +// interface handle in the core_axi_write_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type core_axi_write_out_if_if. +// +// Input signals from the core_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the core_axi_write_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import core_axi_write_out_if_pkg_hdl::*; +`include "src/core_axi_write_out_if_macros.svh" + + +interface core_axi_write_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( core_axi_write_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute core_axi_write_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`core_axi_write_out_if_MONITOR_STRUCT + core_axi_write_out_if_monitor_s core_axi_write_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `core_axi_write_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + core_axi_write_out_if_pkg::core_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( core_axi_write_out_if_monitor_struct ); + + + proxy.notify_transaction( core_axi_write_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(core_axi_write_out_if_configuration_s core_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = core_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output core_axi_write_out_if_monitor_s core_axi_write_out_if_monitor_struct); + // + // Available struct members: + // // core_axi_write_out_if_monitor_struct.core_awready + // // core_axi_write_out_if_monitor_struct.core_wready + // // core_axi_write_out_if_monitor_struct.core_bresp + // // core_axi_write_out_if_monitor_struct.core_bid + // // core_axi_write_out_if_monitor_struct.core_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // core_axi_write_out_if_monitor_struct.xyz = awready_i; // + // core_axi_write_out_if_monitor_struct.xyz = wready_i; // + // core_axi_write_out_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // core_axi_write_out_if_monitor_struct.xyz = bid_i; // + // core_axi_write_out_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_random_sequence.svh new file mode 100644 index 000000000..7780e6dd1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the core_axi_write_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a core_axi_write_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_write_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "core_axi_write_out_if_random_sequence::body()-core_axi_write_out_if_transaction randomization failed") + // Send the transaction to the core_axi_write_out_if_driver_bfm via the sequencer and core_axi_write_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: core_axi_write_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_responder_sequence.svh new file mode 100644 index 000000000..49afe1128 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends core_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( core_axi_write_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "core_axi_write_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_sequence_base.svh new file mode 100644 index 000000000..d76fe29bd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( core_axi_write_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_write_out_if_transaction_req_t; + core_axi_write_out_if_transaction_req_t req; + typedef core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + core_axi_write_out_if_transaction_rsp_t; + core_axi_write_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = core_axi_write_out_if_transaction_req_t::type_id::create("req"); + rsp = core_axi_write_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction.svh new file mode 100644 index 000000000..c895977d8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an core_axi_write_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( core_axi_write_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_awready ; + logic core_wready ; + axi_pkg::axi_burst_e core_bresp ; + logic core_bid ; + logic core_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in core_axi_write_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by core_axi_write_out_if_monitor and core_axi_write_out_if_monitor_bfm + // This struct is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_MONITOR_STRUCT + core_axi_write_out_if_monitor_s core_axi_write_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a core_axi_write_out_if_monitor_s + // structure. The function returns the handle to the core_axi_write_out_if_monitor_struct. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by core_axi_write_out_if_driver and core_axi_write_out_if_driver_bfm + // to communicate initiator driven data to core_axi_write_out_if_driver_bfm. + // This struct is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_INITIATOR_STRUCT + core_axi_write_out_if_initiator_s core_axi_write_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a core_axi_write_out_if_initiator_s + // structure. The function returns the handle to the core_axi_write_out_if_initiator_struct. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by core_axi_write_out_if_driver and core_axi_write_out_if_driver_bfm + // to communicate Responder driven data to core_axi_write_out_if_driver_bfm. + // This struct is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_RESPONDER_STRUCT + core_axi_write_out_if_responder_s core_axi_write_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a core_axi_write_out_if_responder_s + // structure. The function returns the handle to the core_axi_write_out_if_responder_struct. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in core_axi_write_out_if_macros.svh + `core_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awready:0x%x core_wready:0x%x core_bresp:0x%x core_bid:0x%x core_bvalid:0x%x ",core_awready,core_wready,core_bresp,core_bid,core_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_awready == RHS.core_awready) + &&(this.core_wready == RHS.core_wready) + &&(this.core_bresp == RHS.core_bresp) + &&(this.core_bid == RHS.core_bid) + &&(this.core_bvalid == RHS.core_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awready = RHS.core_awready; + this.core_wready = RHS.core_wready; + this.core_bresp = RHS.core_bresp; + this.core_bid = RHS.core_bid; + this.core_bvalid = RHS.core_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"core_axi_write_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awready,"core_awready"); + $add_attribute(transaction_view_h,core_wready,"core_wready"); + $add_attribute(transaction_view_h,core_bresp,"core_bresp"); + $add_attribute(transaction_view_h,core_bid,"core_bid"); + $add_attribute(transaction_view_h,core_bvalid,"core_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction_coverage.svh new file mode 100644 index 000000000..c2318af97 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records core_axi_write_out_if transaction information using +// a covergroup named core_axi_write_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class core_axi_write_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( core_axi_write_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup core_axi_write_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awready: coverpoint coverage_trans.core_awready; + core_wready: coverpoint coverage_trans.core_wready; + core_bresp: coverpoint coverage_trans.core_bresp; + core_bid: coverpoint coverage_trans.core_bid; + core_bvalid: coverpoint coverage_trans.core_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + core_axi_write_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + core_axi_write_out_if_transaction_cg.set_inst_name($sformatf("core_axi_write_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + core_axi_write_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/src/core_axi_write_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/yaml/core_axi_write_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/yaml/core_axi_write_out_if_interface.yaml new file mode 100644 index 000000000..bb9a51431 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/core_axi_write_out_if_pkg/yaml/core_axi_write_out_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + core_axi_write_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.project new file mode 100644 index 000000000..f25d7a6d4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_core_core_axi_write_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.svproject new file mode 100644 index 000000000..737757535 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/Makefile new file mode 100644 index 000000000..3f1313baf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_core_core_axi_write_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_core_core_axi_write_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hvl.f + +fuse_core_core_axi_write_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hdl.f + +fuse_core_core_axi_write_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_xrtl.f + +COMP_fuse_core_core_axi_write_out_if_PKG_TGT_0 = q_comp_fuse_core_core_axi_write_out_if_pkg +COMP_fuse_core_core_axi_write_out_if_PKG_TGT_1 = v_comp_fuse_core_core_axi_write_out_if_pkg +COMP_fuse_core_core_axi_write_out_if_PKG_TGT = $(COMP_fuse_core_core_axi_write_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_core_core_axi_write_out_if_pkg: $(COMP_fuse_core_core_axi_write_out_if_PKG_TGT) + +q_comp_fuse_core_core_axi_write_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_core_core_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_core_core_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_core_core_axi_write_out_if_PKG_XRTL) + +v_comp_fuse_core_core_axi_write_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_core_core_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_core_core_axi_write_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_core_core_axi_write_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_core_core_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_core_core_axi_write_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_core_core_axi_write_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_core_core_axi_write_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_core_core_axi_write_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_core_core_axi_write_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_core_core_axi_write_out_if_pkg += -I$(fuse_core_core_axi_write_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_core_core_axi_write_out_if_pkg += $(fuse_core_core_axi_write_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_core_core_axi_write_out_if_pkg += \ + \ + -o .so + +comp_fuse_core_core_axi_write_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_core_core_axi_write_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_core_core_axi_write_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_core_core_axi_write_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_core_core_axi_write_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/compile.do new file mode 100644 index 000000000..b8f65efb7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_core_core_axi_write_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if.compile new file mode 100644 index 000000000..35966add7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_core_core_axi_write_out_if_hvl.compile + - fuse_core_core_axi_write_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_bfm.vinfo new file mode 100644 index 000000000..9a6fb73a0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_core_core_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_core_core_axi_write_out_if_if.sv +src/fuse_core_core_axi_write_out_if_driver_bfm.sv +src/fuse_core_core_axi_write_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_common.compile new file mode 100644 index 000000000..029c5cda8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_core_core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hdl.f new file mode 100644 index 000000000..c7e54dfd4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hvl.f new file mode 100644 index 000000000..85b4f73d1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_xrtl.f new file mode 100644 index 000000000..759299056 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hdl.compile new file mode 100644 index 000000000..8c8200827 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_core_core_axi_write_out_if_common.compile +incdir: + - . +src: + - src/fuse_core_core_axi_write_out_if_if.sv + - src/fuse_core_core_axi_write_out_if_monitor_bfm.sv + - src/fuse_core_core_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hvl.compile new file mode 100644 index 000000000..91c251b33 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_core_core_axi_write_out_if_common.compile +incdir: + - . +src: + - fuse_core_core_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.sv new file mode 100644 index 000000000..67a3e3ba6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_core_core_axi_write_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_core_core_axi_write_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_core_core_axi_write_out_if_macros.svh" + + export fuse_core_core_axi_write_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_core_core_axi_write_out_if_typedefs.svh" + `include "src/fuse_core_core_axi_write_out_if_transaction.svh" + + `include "src/fuse_core_core_axi_write_out_if_configuration.svh" + `include "src/fuse_core_core_axi_write_out_if_driver.svh" + `include "src/fuse_core_core_axi_write_out_if_monitor.svh" + + `include "src/fuse_core_core_axi_write_out_if_transaction_coverage.svh" + `include "src/fuse_core_core_axi_write_out_if_sequence_base.svh" + `include "src/fuse_core_core_axi_write_out_if_random_sequence.svh" + + `include "src/fuse_core_core_axi_write_out_if_responder_sequence.svh" + `include "src/fuse_core_core_axi_write_out_if2reg_adapter.svh" + + `include "src/fuse_core_core_axi_write_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.vinfo new file mode 100644 index 000000000..c61f97535 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_core_core_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_core_core_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.sv new file mode 100644 index 000000000..104321aef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_core_core_axi_write_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_core_core_axi_write_out_if_typedefs_hdl.svh" + `include "src/fuse_core_core_axi_write_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..0aca1a6dd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_core_core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_sve.F new file mode 100644 index 000000000..fe260360b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_core_core_axi_write_out_if_pkg/fuse_core_core_axi_write_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if2reg_adapter.svh new file mode 100644 index 000000000..2092ace2d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_core_core_axi_write_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_core_core_axi_write_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_core_core_axi_write_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_core_core_axi_write_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_agent.svh new file mode 100644 index 000000000..d33c79019 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_core_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_core_core_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_core_core_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_core_core_axi_write_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_core_core_axi_write_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_configuration.svh new file mode 100644 index 000000000..5647a3442 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_core_core_axi_write_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_core_core_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_core_core_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_core_core_axi_write_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_core_core_axi_write_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_CONFIGURATION_STRUCT + fuse_core_core_axi_write_out_if_configuration_s fuse_core_core_axi_write_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_core_core_axi_write_out_if_configuration_s + // structure. The function returns the handle to the fuse_core_core_axi_write_out_if_configuration_struct. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_core_core_axi_write_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_core_core_axi_write_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_core_core_axi_write_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_core_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_core_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_core_core_axi_write_out_if_configuration_cg.set_inst_name($sformatf("fuse_core_core_axi_write_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_core_core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver.svh new file mode 100644 index 000000000..f49aeaaa8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_core_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_core_core_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_core_core_axi_write_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_core_core_axi_write_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_core_core_axi_write_out_if_driver and fuse_core_core_axi_write_out_if_driver_bfm +// to communicate initiator driven data to fuse_core_core_axi_write_out_if_driver_bfm. +`fuse_core_core_axi_write_out_if_INITIATOR_STRUCT + fuse_core_core_axi_write_out_if_initiator_s fuse_core_core_axi_write_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_core_core_axi_write_out_if_driver and fuse_core_core_axi_write_out_if_driver_bfm +// to communicate Responder driven data to fuse_core_core_axi_write_out_if_driver_bfm. +`fuse_core_core_axi_write_out_if_RESPONDER_STRUCT + fuse_core_core_axi_write_out_if_responder_s fuse_core_core_axi_write_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_core_core_axi_write_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_core_core_axi_write_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_core_core_axi_write_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_core_core_axi_write_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver_bfm.sv new file mode 100644 index 000000000..e5b9f650e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_core_core_axi_write_out_if signal driving. It is +// accessed by the uvm fuse_core_core_axi_write_out_if driver through a virtual interface +// handle in the fuse_core_core_axi_write_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_core_core_axi_write_out_if_if. +// +// Input signals from the fuse_core_core_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_core_core_axi_write_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_core_core_axi_write_out_if_pkg_hdl::*; +`include "src/fuse_core_core_axi_write_out_if_macros.svh" + +interface fuse_core_core_axi_write_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_core_core_axi_write_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_core_core_axi_write_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_core_core_axi_write_out_if_pkg::fuse_core_core_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_core_core_axi_write_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_core_core_axi_write_out_if_driver to this BFM + // **************************************************************************** + `fuse_core_core_axi_write_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_core_core_axi_write_out_if_driver and fuse_core_core_axi_write_out_if_driver_bfm + // to communicate initiator driven data to fuse_core_core_axi_write_out_if_driver_bfm. + `fuse_core_core_axi_write_out_if_INITIATOR_STRUCT + fuse_core_core_axi_write_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_core_core_axi_write_out_if_driver and fuse_core_core_axi_write_out_if_driver_bfm + // to communicate Responder driven data to fuse_core_core_axi_write_out_if_driver_bfm. + `fuse_core_core_axi_write_out_if_RESPONDER_STRUCT + fuse_core_core_axi_write_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_core_core_axi_write_out_if_configuration_s fuse_core_core_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_core_core_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_core_core_axi_write_out_if_initiator_s fuse_core_core_axi_write_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_core_core_axi_write_out_if_responder_s fuse_core_core_axi_write_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_core_core_axi_write_out_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Members within the fuse_core_core_axi_write_out_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + initiator_struct = fuse_core_core_axi_write_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_core_core_axi_write_out_if_responder_struct.xyz = awready_i; // + // fuse_core_core_axi_write_out_if_responder_struct.xyz = wready_i; // + // fuse_core_core_axi_write_out_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_core_core_axi_write_out_if_responder_struct.xyz = bid_i; // + // fuse_core_core_axi_write_out_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_core_core_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_core_core_axi_write_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_core_core_axi_write_out_if_initiator_s fuse_core_core_axi_write_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_core_core_axi_write_out_if_responder_s fuse_core_core_axi_write_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_core_core_axi_write_out_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Variables within the fuse_core_core_axi_write_out_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= fuse_core_core_axi_write_out_if_initiator_struct.xyz; // + // wready_o <= fuse_core_core_axi_write_out_if_initiator_struct.xyz; // + // bresp_o <= fuse_core_core_axi_write_out_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= fuse_core_core_axi_write_out_if_initiator_struct.xyz; // + // bvalid_o <= fuse_core_core_axi_write_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_core_core_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_core_core_axi_write_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_if.sv new file mode 100644 index 000000000..6bbcc3a46 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_core_core_axi_write_out_if interface signals. +// It is instantiated once per fuse_core_core_axi_write_out_if bus. Bus Functional Models, +// BFM's named fuse_core_core_axi_write_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_core_core_axi_write_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_core_core_axi_write_out_if_bus.awready), // Agent input +// .dut_signal_port(fuse_core_core_axi_write_out_if_bus.wready), // Agent input +// .dut_signal_port(fuse_core_core_axi_write_out_if_bus.bresp), // Agent input +// .dut_signal_port(fuse_core_core_axi_write_out_if_bus.bid), // Agent input +// .dut_signal_port(fuse_core_core_axi_write_out_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_core_core_axi_write_out_if_pkg_hdl::*; + +interface fuse_core_core_axi_write_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_macros.svh new file mode 100644 index 000000000..91edfefea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_core_core_axi_write_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_core_core_axi_write_out_if_configuration class. +// + `define fuse_core_core_axi_write_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_core_core_axi_write_out_if_configuration_s; + + `define fuse_core_core_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_core_core_axi_write_out_if_configuration_s to_struct();\ + fuse_core_core_axi_write_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_core_core_axi_write_out_if_configuration_struct );\ + endfunction + + `define fuse_core_core_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_core_core_axi_write_out_if_configuration_s fuse_core_core_axi_write_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_core_core_axi_write_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_core_core_axi_write_out_if_transaction class. +// + `define fuse_core_core_axi_write_out_if_MONITOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_core_core_axi_write_out_if_monitor_s; + + `define fuse_core_core_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_core_core_axi_write_out_if_monitor_s to_monitor_struct();\ + fuse_core_core_axi_write_out_if_monitor_struct = \ + { \ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_core_core_axi_write_out_if_monitor_struct);\ + endfunction\ + + `define fuse_core_core_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_core_core_axi_write_out_if_monitor_s fuse_core_core_axi_write_out_if_monitor_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_core_core_axi_write_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_core_core_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_core_core_axi_write_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_core_core_axi_write_out_if_initiator_s; + + `define fuse_core_core_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_core_core_axi_write_out_if_initiator_s to_initiator_struct();\ + fuse_core_core_axi_write_out_if_initiator_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_core_core_axi_write_out_if_initiator_struct);\ + endfunction + + `define fuse_core_core_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_core_core_axi_write_out_if_initiator_s fuse_core_core_axi_write_out_if_initiator_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_core_core_axi_write_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_core_core_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_core_core_axi_write_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_core_core_axi_write_out_if_responder_s; + + `define fuse_core_core_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_core_core_axi_write_out_if_responder_s to_responder_struct();\ + fuse_core_core_axi_write_out_if_responder_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_core_core_axi_write_out_if_responder_struct);\ + endfunction + + `define fuse_core_core_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_core_core_axi_write_out_if_responder_s fuse_core_core_axi_write_out_if_responder_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_core_core_axi_write_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor.svh new file mode 100644 index 000000000..583e26c88 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_core_core_axi_write_out_if transactions observed by the +// fuse_core_core_axi_write_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_core_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_core_core_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_core_core_axi_write_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_core_core_axi_write_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_core_core_axi_write_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_core_core_axi_write_out_if_monitor_s fuse_core_core_axi_write_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_core_core_axi_write_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor_bfm.sv new file mode 100644 index 000000000..37b7af3f7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_core_core_axi_write_out_if signal monitoring. +// It is accessed by the uvm fuse_core_core_axi_write_out_if monitor through a virtual +// interface handle in the fuse_core_core_axi_write_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_core_core_axi_write_out_if_if. +// +// Input signals from the fuse_core_core_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_core_core_axi_write_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_core_core_axi_write_out_if_pkg_hdl::*; +`include "src/fuse_core_core_axi_write_out_if_macros.svh" + + +interface fuse_core_core_axi_write_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_core_core_axi_write_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_core_core_axi_write_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_core_core_axi_write_out_if_MONITOR_STRUCT + fuse_core_core_axi_write_out_if_monitor_s fuse_core_core_axi_write_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_core_core_axi_write_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + fuse_core_core_axi_write_out_if_pkg::fuse_core_core_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_core_core_axi_write_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_core_core_axi_write_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_core_core_axi_write_out_if_configuration_s fuse_core_core_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_core_core_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_core_core_axi_write_out_if_monitor_s fuse_core_core_axi_write_out_if_monitor_struct); + // + // Available struct members: + // // fuse_core_core_axi_write_out_if_monitor_struct.core_awready + // // fuse_core_core_axi_write_out_if_monitor_struct.core_wready + // // fuse_core_core_axi_write_out_if_monitor_struct.core_bresp + // // fuse_core_core_axi_write_out_if_monitor_struct.core_bid + // // fuse_core_core_axi_write_out_if_monitor_struct.core_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_core_core_axi_write_out_if_monitor_struct.xyz = awready_i; // + // fuse_core_core_axi_write_out_if_monitor_struct.xyz = wready_i; // + // fuse_core_core_axi_write_out_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_core_core_axi_write_out_if_monitor_struct.xyz = bid_i; // + // fuse_core_core_axi_write_out_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_random_sequence.svh new file mode 100644 index 000000000..df9b0ffcd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_core_core_axi_write_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_core_core_axi_write_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_core_core_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_core_core_axi_write_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_core_core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_core_core_axi_write_out_if_random_sequence::body()-fuse_core_core_axi_write_out_if_transaction randomization failed") + // Send the transaction to the fuse_core_core_axi_write_out_if_driver_bfm via the sequencer and fuse_core_core_axi_write_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_core_core_axi_write_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_responder_sequence.svh new file mode 100644 index 000000000..21ff7b447 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_core_core_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_core_core_axi_write_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_core_core_axi_write_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_core_core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_sequence_base.svh new file mode 100644 index 000000000..c1c075a25 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_core_core_axi_write_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_core_core_axi_write_out_if_transaction_req_t; + fuse_core_core_axi_write_out_if_transaction_req_t req; + typedef fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_core_core_axi_write_out_if_transaction_rsp_t; + fuse_core_core_axi_write_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_core_core_axi_write_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_core_core_axi_write_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction.svh new file mode 100644 index 000000000..ce2250205 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_core_core_axi_write_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_core_core_axi_write_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_awready ; + logic core_wready ; + axi_pkg::axi_burst_e core_bresp ; + logic core_bid ; + logic core_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_core_core_axi_write_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_core_core_axi_write_out_if_monitor and fuse_core_core_axi_write_out_if_monitor_bfm + // This struct is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_MONITOR_STRUCT + fuse_core_core_axi_write_out_if_monitor_s fuse_core_core_axi_write_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_core_core_axi_write_out_if_monitor_s + // structure. The function returns the handle to the fuse_core_core_axi_write_out_if_monitor_struct. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_core_core_axi_write_out_if_driver and fuse_core_core_axi_write_out_if_driver_bfm + // to communicate initiator driven data to fuse_core_core_axi_write_out_if_driver_bfm. + // This struct is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_INITIATOR_STRUCT + fuse_core_core_axi_write_out_if_initiator_s fuse_core_core_axi_write_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_core_core_axi_write_out_if_initiator_s + // structure. The function returns the handle to the fuse_core_core_axi_write_out_if_initiator_struct. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_core_core_axi_write_out_if_driver and fuse_core_core_axi_write_out_if_driver_bfm + // to communicate Responder driven data to fuse_core_core_axi_write_out_if_driver_bfm. + // This struct is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_RESPONDER_STRUCT + fuse_core_core_axi_write_out_if_responder_s fuse_core_core_axi_write_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_core_core_axi_write_out_if_responder_s + // structure. The function returns the handle to the fuse_core_core_axi_write_out_if_responder_struct. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_core_core_axi_write_out_if_macros.svh + `fuse_core_core_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awready:0x%x core_wready:0x%x core_bresp:0x%x core_bid:0x%x core_bvalid:0x%x ",core_awready,core_wready,core_bresp,core_bid,core_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_awready == RHS.core_awready) + &&(this.core_wready == RHS.core_wready) + &&(this.core_bresp == RHS.core_bresp) + &&(this.core_bid == RHS.core_bid) + &&(this.core_bvalid == RHS.core_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awready = RHS.core_awready; + this.core_wready = RHS.core_wready; + this.core_bresp = RHS.core_bresp; + this.core_bid = RHS.core_bid; + this.core_bvalid = RHS.core_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_core_core_axi_write_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awready,"core_awready"); + $add_attribute(transaction_view_h,core_wready,"core_wready"); + $add_attribute(transaction_view_h,core_bresp,"core_bresp"); + $add_attribute(transaction_view_h,core_bid,"core_bid"); + $add_attribute(transaction_view_h,core_bvalid,"core_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction_coverage.svh new file mode 100644 index 000000000..73985aa24 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_core_core_axi_write_out_if transaction information using +// a covergroup named fuse_core_core_axi_write_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_core_core_axi_write_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_core_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_core_core_axi_write_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_core_core_axi_write_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awready: coverpoint coverage_trans.core_awready; + core_wready: coverpoint coverage_trans.core_wready; + core_bresp: coverpoint coverage_trans.core_bresp; + core_bid: coverpoint coverage_trans.core_bid; + core_bvalid: coverpoint coverage_trans.core_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_core_core_axi_write_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_core_core_axi_write_out_if_transaction_cg.set_inst_name($sformatf("fuse_core_core_axi_write_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_core_core_axi_write_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/src/fuse_core_core_axi_write_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/yaml/fuse_core_core_axi_write_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/yaml/fuse_core_core_axi_write_out_if_interface.yaml new file mode 100644 index 000000000..943a1091a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_core_core_axi_write_out_if_pkg/yaml/fuse_core_core_axi_write_out_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + fuse_core_core_axi_write_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.project new file mode 100644 index 000000000..63a0f5c9d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..a3cbefe0b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..c29cae1ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f + +fuse_ctrl_core_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f + +fuse_ctrl_core_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_read_if_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_read_if_pkg +COMP_fuse_ctrl_core_axi_read_if_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_read_if_pkg +COMP_fuse_ctrl_core_axi_read_if_PKG_TGT = $(COMP_fuse_ctrl_core_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_read_if_pkg: $(COMP_fuse_ctrl_core_axi_read_if_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_read_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_read_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_if_pkg += -I$(fuse_ctrl_core_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_if_pkg += $(fuse_ctrl_core_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_read_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..4e0c5588d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if.compile new file mode 100644 index 000000000..48a0d3158 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_read_if_hvl.compile + - fuse_ctrl_core_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..28155505e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_read_if_if.sv +src/fuse_ctrl_core_axi_read_if_driver_bfm.sv +src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_common.compile new file mode 100644 index 000000000..109b88dad --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..733787653 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..90b4e36ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..26bcff49c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hdl.compile new file mode 100644 index 000000000..c28340779 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_read_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_read_if_if.sv + - src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv + - src/fuse_ctrl_core_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hvl.compile new file mode 100644 index 000000000..6135baefd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_read_if_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.sv new file mode 100644 index 000000000..88b9bb7a3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_read_if_macros.svh" + + export fuse_ctrl_core_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_read_if_typedefs.svh" + `include "src/fuse_ctrl_core_axi_read_if_transaction.svh" + + `include "src/fuse_ctrl_core_axi_read_if_configuration.svh" + `include "src/fuse_ctrl_core_axi_read_if_driver.svh" + `include "src/fuse_ctrl_core_axi_read_if_monitor.svh" + + `include "src/fuse_ctrl_core_axi_read_if_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_read_if_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_read_if_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_read_if_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_read_if2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..bb1d0794d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..c410235bf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_read_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..723625863 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..863eb4873 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_if_pkg/fuse_ctrl_core_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..2ac137314 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_agent.svh new file mode 100644 index 000000000..cecf128e5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_configuration.svh new file mode 100644 index 000000000..c75c85e1c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_read_if_configuration_s fuse_ctrl_core_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_read_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_if_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_read_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver.svh new file mode 100644 index 000000000..ab8413284 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_read_if_driver_bfm. +`fuse_ctrl_core_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_if_initiator_s fuse_ctrl_core_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_read_if_driver_bfm. +`fuse_ctrl_core_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_if_responder_s fuse_ctrl_core_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..8d672492f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_read_if signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_read_if driver through a virtual interface +// handle in the fuse_ctrl_core_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_read_if_if. +// +// Input signals from the fuse_ctrl_core_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_if_macros.svh" + +interface fuse_ctrl_core_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_read_if_pkg::fuse_ctrl_core_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_read_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_if_driver_bfm. + `fuse_ctrl_core_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_if_driver_bfm. + `fuse_ctrl_core_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_read_if_configuration_s fuse_ctrl_core_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_read_if_initiator_s fuse_ctrl_core_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_read_if_responder_s fuse_ctrl_core_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_read_if_initiator_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Members within the fuse_ctrl_core_axi_read_if_responder_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + initiator_struct = fuse_ctrl_core_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_core_axi_read_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_read_if_initiator_s fuse_ctrl_core_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_read_if_responder_s fuse_ctrl_core_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_read_if_initiator_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Variables within the fuse_ctrl_core_axi_read_if_responder_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arlock_i; // + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_core_axi_read_if_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_if.sv new file mode 100644 index 000000000..5f8ec8923 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_read_if interface signals. +// It is instantiated once per fuse_ctrl_core_axi_read_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_if_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_if_pkg_hdl::*; + +interface fuse_ctrl_core_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_macros.svh new file mode 100644 index 000000000..c5799df29 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_read_if_configuration class. +// + `define fuse_ctrl_core_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_read_if_configuration_s; + + `define fuse_ctrl_core_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_if_configuration_s to_struct();\ + fuse_ctrl_core_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_read_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_read_if_configuration_s fuse_ctrl_core_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_read_if_transaction class. +// + `define fuse_ctrl_core_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_if_monitor_s; + + `define fuse_ctrl_core_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_if_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_read_if_monitor_struct = \ + { \ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_read_if_monitor_s fuse_ctrl_core_axi_read_if_monitor_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_if_initiator_s; + + `define fuse_ctrl_core_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_if_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_read_if_initiator_struct = \ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_read_if_initiator_s fuse_ctrl_core_axi_read_if_initiator_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_if_responder_s; + + `define fuse_ctrl_core_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_if_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_read_if_responder_struct = \ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_if_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_read_if_responder_s fuse_ctrl_core_axi_read_if_responder_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor.svh new file mode 100644 index 000000000..09bb82cf5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_read_if transactions observed by the +// fuse_ctrl_core_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_read_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_read_if_monitor_s fuse_ctrl_core_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..2f9a66938 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_read_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_read_if monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_read_if_if. +// +// Input signals from the fuse_ctrl_core_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_if_macros.svh" + + +interface fuse_ctrl_core_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_read_if_MONITOR_STRUCT + fuse_ctrl_core_axi_read_if_monitor_s fuse_ctrl_core_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_read_if_pkg::fuse_ctrl_core_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_read_if_configuration_s fuse_ctrl_core_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_read_if_monitor_s fuse_ctrl_core_axi_read_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_araddr + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arvalid + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arburst + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arsize + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arlen + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_aruser + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arid + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_arlock + // // fuse_ctrl_core_axi_read_if_monitor_struct.core_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_core_axi_read_if_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..f0d127eb7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_read_if_random_sequence::body()-fuse_ctrl_core_axi_read_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_read_if_driver_bfm via the sequencer and fuse_ctrl_core_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..beadd0baf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..ecb0cebaa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_if_transaction_req_t; + fuse_ctrl_core_axi_read_if_transaction_req_t req; + typedef fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_if_transaction_rsp_t; + fuse_ctrl_core_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction.svh new file mode 100644 index 000000000..44757277a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] core_araddr ; + logic core_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + logic [2:0] core_arsize ; + logic [7:0] core_arlen ; + logic [UW-1:0] core_aruser ; + logic [IW-1:0] core_arid ; + logic core_arlock ; + logic core_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_read_if_monitor and fuse_ctrl_core_axi_read_if_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_MONITOR_STRUCT + fuse_ctrl_core_axi_read_if_monitor_s fuse_ctrl_core_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_if_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_if_initiator_s fuse_ctrl_core_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_if_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_read_if_driver and fuse_ctrl_core_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_if_responder_s fuse_ctrl_core_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_if_responder_struct. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_if_macros.svh + `fuse_ctrl_core_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_araddr:0x%x core_arvalid:0x%x core_arburst:0x%x core_arsize:0x%x core_arlen:0x%x core_aruser:0x%x core_arid:0x%x core_arlock:0x%x core_rready:0x%x ",core_araddr,core_arvalid,core_arburst,core_arsize,core_arlen,core_aruser,core_arid,core_arlock,core_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_araddr = RHS.core_araddr; + this.core_arvalid = RHS.core_arvalid; + this.core_arburst = RHS.core_arburst; + this.core_arsize = RHS.core_arsize; + this.core_arlen = RHS.core_arlen; + this.core_aruser = RHS.core_aruser; + this.core_arid = RHS.core_arid; + this.core_arlock = RHS.core_arlock; + this.core_rready = RHS.core_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_araddr,"core_araddr"); + $add_attribute(transaction_view_h,core_arvalid,"core_arvalid"); + $add_attribute(transaction_view_h,core_arburst,"core_arburst"); + $add_attribute(transaction_view_h,core_arsize,"core_arsize"); + $add_attribute(transaction_view_h,core_arlen,"core_arlen"); + $add_attribute(transaction_view_h,core_aruser,"core_aruser"); + $add_attribute(transaction_view_h,core_arid,"core_arid"); + $add_attribute(transaction_view_h,core_arlock,"core_arlock"); + $add_attribute(transaction_view_h,core_rready,"core_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..70b6c9261 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_read_if transaction information using +// a covergroup named fuse_ctrl_core_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_araddr: coverpoint coverage_trans.core_araddr; + core_arvalid: coverpoint coverage_trans.core_arvalid; + core_arburst: coverpoint coverage_trans.core_arburst; + core_arsize: coverpoint coverage_trans.core_arsize; + core_arlen: coverpoint coverage_trans.core_arlen; + core_aruser: coverpoint coverage_trans.core_aruser; + core_arid: coverpoint coverage_trans.core_arid; + core_arlock: coverpoint coverage_trans.core_arlock; + core_rready: coverpoint coverage_trans.core_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_read_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/src/fuse_ctrl_core_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/yaml/fuse_ctrl_core_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/yaml/fuse_ctrl_core_axi_read_if_interface.yaml new file mode 100644 index 000000000..cacadd72c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_if_pkg/yaml/fuse_ctrl_core_axi_read_if_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: core_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.project new file mode 100644 index 000000000..5f36c5d66 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_read_in_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.svproject new file mode 100644 index 000000000..33b6b34f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/Makefile new file mode 100644 index 000000000..04937f1d7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_read_in_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_read_in_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hvl.f + +fuse_ctrl_core_axi_read_in_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hdl.f + +fuse_ctrl_core_axi_read_in_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_read_in_if_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_read_in_if_pkg +COMP_fuse_ctrl_core_axi_read_in_if_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_read_in_if_pkg +COMP_fuse_ctrl_core_axi_read_in_if_PKG_TGT = $(COMP_fuse_ctrl_core_axi_read_in_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_read_in_if_pkg: $(COMP_fuse_ctrl_core_axi_read_in_if_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_read_in_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_read_in_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_read_in_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_in_if_pkg += -I$(fuse_ctrl_core_axi_read_in_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_in_if_pkg += $(fuse_ctrl_core_axi_read_in_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_read_in_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_read_in_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_read_in_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_read_in_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/compile.do new file mode 100644 index 000000000..ba9f78050 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_read_in_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if.compile new file mode 100644 index 000000000..cea52ff3f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_read_in_if_hvl.compile + - fuse_ctrl_core_axi_read_in_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_bfm.vinfo new file mode 100644 index 000000000..667ead1d5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_read_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_read_in_if_if.sv +src/fuse_ctrl_core_axi_read_in_if_driver_bfm.sv +src/fuse_ctrl_core_axi_read_in_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_common.compile new file mode 100644 index 000000000..984ba6c81 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hdl.f new file mode 100644 index 000000000..ab0f78a58 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hvl.f new file mode 100644 index 000000000..6e9dbaf7e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_xrtl.f new file mode 100644 index 000000000..02f0d168d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hdl.compile new file mode 100644 index 000000000..491ad6336 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_read_in_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_read_in_if_if.sv + - src/fuse_ctrl_core_axi_read_in_if_monitor_bfm.sv + - src/fuse_ctrl_core_axi_read_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hvl.compile new file mode 100644 index 000000000..1bab122b1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_read_in_if_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_read_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.sv new file mode 100644 index 000000000..c825d77d2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_in_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_read_in_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_read_in_if_macros.svh" + + export fuse_ctrl_core_axi_read_in_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_read_in_if_typedefs.svh" + `include "src/fuse_ctrl_core_axi_read_in_if_transaction.svh" + + `include "src/fuse_ctrl_core_axi_read_in_if_configuration.svh" + `include "src/fuse_ctrl_core_axi_read_in_if_driver.svh" + `include "src/fuse_ctrl_core_axi_read_in_if_monitor.svh" + + `include "src/fuse_ctrl_core_axi_read_in_if_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_read_in_if_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_read_in_if_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_read_in_if_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_read_in_if2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_read_in_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.vinfo new file mode 100644 index 000000000..7aa6556f8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_read_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_read_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv new file mode 100644 index 000000000..bd812d443 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_in_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_read_in_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_read_in_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.vinfo new file mode 100644 index 000000000..1740fc2cc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_sve.F new file mode 100644 index 000000000..c8b15a089 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/fuse_ctrl_core_axi_read_in_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if2reg_adapter.svh new file mode 100644 index 000000000..742aa971e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_read_in_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_read_in_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_read_in_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_agent.svh new file mode 100644 index 000000000..c79cacb4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_read_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_read_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_read_in_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_configuration.svh new file mode 100644 index 000000000..eaf5806d5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_read_in_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_read_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_read_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_read_in_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_read_in_if_configuration_s fuse_ctrl_core_axi_read_in_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_read_in_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_if_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_read_in_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_read_in_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_read_in_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_read_in_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_in_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver.svh new file mode 100644 index 000000000..40a71d1b7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_read_in_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_read_in_if_driver and fuse_ctrl_core_axi_read_in_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_read_in_if_driver_bfm. +`fuse_ctrl_core_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_in_if_initiator_s fuse_ctrl_core_axi_read_in_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_read_in_if_driver and fuse_ctrl_core_axi_read_in_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_read_in_if_driver_bfm. +`fuse_ctrl_core_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_in_if_responder_s fuse_ctrl_core_axi_read_in_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_read_in_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_read_in_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_read_in_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_read_in_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver_bfm.sv new file mode 100644 index 000000000..bdf19e41e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_read_in_if signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_read_in_if driver through a virtual interface +// handle in the fuse_ctrl_core_axi_read_in_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_read_in_if_if. +// +// Input signals from the fuse_ctrl_core_axi_read_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_read_in_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_in_if_macros.svh" + +interface fuse_ctrl_core_axi_read_in_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_read_in_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_in_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_read_in_if_pkg::fuse_ctrl_core_axi_read_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_read_in_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_read_in_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_read_in_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_in_if_driver and fuse_ctrl_core_axi_read_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_in_if_driver_bfm. + `fuse_ctrl_core_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_in_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_read_in_if_driver and fuse_ctrl_core_axi_read_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_in_if_driver_bfm. + `fuse_ctrl_core_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_in_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_read_in_if_configuration_s fuse_ctrl_core_axi_read_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_read_in_if_initiator_s fuse_ctrl_core_axi_read_in_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_read_in_if_responder_s fuse_ctrl_core_axi_read_in_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_read_in_if_initiator_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Members within the fuse_ctrl_core_axi_read_in_if_responder_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + initiator_struct = fuse_ctrl_core_axi_read_in_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_core_axi_read_in_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_read_in_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_read_in_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_read_in_if_initiator_s fuse_ctrl_core_axi_read_in_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_read_in_if_responder_s fuse_ctrl_core_axi_read_in_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_read_in_if_initiator_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Variables within the fuse_ctrl_core_axi_read_in_if_responder_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = arlock_i; // + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_core_axi_read_in_if_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_read_in_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_read_in_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_if.sv new file mode 100644 index 000000000..c46ca5b4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_read_in_if interface signals. +// It is instantiated once per fuse_ctrl_core_axi_read_in_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_read_in_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_read_in_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_if_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_in_if_pkg_hdl::*; + +interface fuse_ctrl_core_axi_read_in_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_macros.svh new file mode 100644 index 000000000..71c48f0b3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_read_in_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_read_in_if_configuration class. +// + `define fuse_ctrl_core_axi_read_in_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_read_in_if_configuration_s; + + `define fuse_ctrl_core_axi_read_in_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_if_configuration_s to_struct();\ + fuse_ctrl_core_axi_read_in_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_read_in_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_read_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_read_in_if_configuration_s fuse_ctrl_core_axi_read_in_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_read_in_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_read_in_if_transaction class. +// + `define fuse_ctrl_core_axi_read_in_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_in_if_monitor_s; + + `define fuse_ctrl_core_axi_read_in_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_if_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_read_in_if_monitor_struct = \ + { \ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_in_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_read_in_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_read_in_if_monitor_s fuse_ctrl_core_axi_read_in_if_monitor_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_in_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_read_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_in_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_in_if_initiator_s; + + `define fuse_ctrl_core_axi_read_in_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_if_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_read_in_if_initiator_struct = \ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_in_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_in_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_read_in_if_initiator_s fuse_ctrl_core_axi_read_in_if_initiator_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_in_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_read_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_in_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_in_if_responder_s; + + `define fuse_ctrl_core_axi_read_in_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_if_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_read_in_if_responder_struct = \ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_in_if_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_in_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_read_in_if_responder_s fuse_ctrl_core_axi_read_in_if_responder_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_in_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor.svh new file mode 100644 index 000000000..4942cca3b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_read_in_if transactions observed by the +// fuse_ctrl_core_axi_read_in_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_read_in_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_read_in_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_read_in_if_monitor_s fuse_ctrl_core_axi_read_in_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_read_in_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor_bfm.sv new file mode 100644 index 000000000..2e9f2fc31 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_read_in_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_read_in_if monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_read_in_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_read_in_if_if. +// +// Input signals from the fuse_ctrl_core_axi_read_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_read_in_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_in_if_macros.svh" + + +interface fuse_ctrl_core_axi_read_in_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_read_in_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_in_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_read_in_if_MONITOR_STRUCT + fuse_ctrl_core_axi_read_in_if_monitor_s fuse_ctrl_core_axi_read_in_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_read_in_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_read_in_if_pkg::fuse_ctrl_core_axi_read_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_read_in_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_read_in_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_read_in_if_configuration_s fuse_ctrl_core_axi_read_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_read_in_if_monitor_s fuse_ctrl_core_axi_read_in_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_araddr + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_arvalid + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_arburst + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_arsize + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_arlen + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_aruser + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_arid + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_arlock + // // fuse_ctrl_core_axi_read_in_if_monitor_struct.core_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_core_axi_read_in_if_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_random_sequence.svh new file mode 100644 index 000000000..4d44b21a1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_read_in_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_read_in_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_read_in_if_random_sequence::body()-fuse_ctrl_core_axi_read_in_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_read_in_if_driver_bfm via the sequencer and fuse_ctrl_core_axi_read_in_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_read_in_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_responder_sequence.svh new file mode 100644 index 000000000..cafea5de4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_read_in_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_sequence_base.svh new file mode 100644 index 000000000..ccf0c8987 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_in_if_transaction_req_t; + fuse_ctrl_core_axi_read_in_if_transaction_req_t req; + typedef fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_in_if_transaction_rsp_t; + fuse_ctrl_core_axi_read_in_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_read_in_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_read_in_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction.svh new file mode 100644 index 000000000..75bfc1b3a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_read_in_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] core_araddr ; + logic core_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + logic [2:0] core_arsize ; + logic [7:0] core_arlen ; + logic [UW-1:0] core_aruser ; + logic [IW-1:0] core_arid ; + logic core_arlock ; + logic core_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_read_in_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_read_in_if_monitor and fuse_ctrl_core_axi_read_in_if_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_MONITOR_STRUCT + fuse_ctrl_core_axi_read_in_if_monitor_s fuse_ctrl_core_axi_read_in_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_in_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_if_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_in_if_driver and fuse_ctrl_core_axi_read_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_in_if_initiator_s fuse_ctrl_core_axi_read_in_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_in_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_if_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_read_in_if_driver and fuse_ctrl_core_axi_read_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_in_if_responder_s fuse_ctrl_core_axi_read_in_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_in_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_if_responder_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_if_macros.svh + `fuse_ctrl_core_axi_read_in_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_araddr:0x%x core_arvalid:0x%x core_arburst:0x%x core_arsize:0x%x core_arlen:0x%x core_aruser:0x%x core_arid:0x%x core_arlock:0x%x core_rready:0x%x ",core_araddr,core_arvalid,core_arburst,core_arsize,core_arlen,core_aruser,core_arid,core_arlock,core_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_araddr = RHS.core_araddr; + this.core_arvalid = RHS.core_arvalid; + this.core_arburst = RHS.core_arburst; + this.core_arsize = RHS.core_arsize; + this.core_arlen = RHS.core_arlen; + this.core_aruser = RHS.core_aruser; + this.core_arid = RHS.core_arid; + this.core_arlock = RHS.core_arlock; + this.core_rready = RHS.core_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_read_in_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_araddr,"core_araddr"); + $add_attribute(transaction_view_h,core_arvalid,"core_arvalid"); + $add_attribute(transaction_view_h,core_arburst,"core_arburst"); + $add_attribute(transaction_view_h,core_arsize,"core_arsize"); + $add_attribute(transaction_view_h,core_arlen,"core_arlen"); + $add_attribute(transaction_view_h,core_aruser,"core_aruser"); + $add_attribute(transaction_view_h,core_arid,"core_arid"); + $add_attribute(transaction_view_h,core_arlock,"core_arlock"); + $add_attribute(transaction_view_h,core_rready,"core_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction_coverage.svh new file mode 100644 index 000000000..ae301fb39 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_read_in_if transaction information using +// a covergroup named fuse_ctrl_core_axi_read_in_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_read_in_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_araddr: coverpoint coverage_trans.core_araddr; + core_arvalid: coverpoint coverage_trans.core_arvalid; + core_arburst: coverpoint coverage_trans.core_arburst; + core_arsize: coverpoint coverage_trans.core_arsize; + core_arlen: coverpoint coverage_trans.core_arlen; + core_aruser: coverpoint coverage_trans.core_aruser; + core_arid: coverpoint coverage_trans.core_arid; + core_arlock: coverpoint coverage_trans.core_arlock; + core_rready: coverpoint coverage_trans.core_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_read_in_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_read_in_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_in_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_read_in_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/src/fuse_ctrl_core_axi_read_in_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/yaml/fuse_ctrl_core_axi_read_in_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/yaml/fuse_ctrl_core_axi_read_in_if_interface.yaml new file mode 100644 index 000000000..a53f12850 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_if_pkg/yaml/fuse_ctrl_core_axi_read_in_if_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_read_in_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: core_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.project new file mode 100644 index 000000000..e463bf00a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_read_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.svproject new file mode 100644 index 000000000..4a40ac8c2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/Makefile new file mode 100644 index 000000000..0ccd2f81d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_read_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_read_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hvl.f + +fuse_ctrl_core_axi_read_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hdl.f + +fuse_ctrl_core_axi_read_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_read_in_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_read_in_pkg +COMP_fuse_ctrl_core_axi_read_in_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_read_in_pkg +COMP_fuse_ctrl_core_axi_read_in_PKG_TGT = $(COMP_fuse_ctrl_core_axi_read_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_read_in_pkg: $(COMP_fuse_ctrl_core_axi_read_in_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_read_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_read_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_read_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_read_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_read_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_in_pkg += -I$(fuse_ctrl_core_axi_read_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_in_pkg += $(fuse_ctrl_core_axi_read_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_read_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_read_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_read_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_read_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/compile.do new file mode 100644 index 000000000..badb44884 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_read_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in.compile new file mode 100644 index 000000000..87b941a8f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_read_in_hvl.compile + - fuse_ctrl_core_axi_read_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_bfm.vinfo new file mode 100644 index 000000000..5b881217d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_read_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_read_in_if.sv +src/fuse_ctrl_core_axi_read_in_driver_bfm.sv +src/fuse_ctrl_core_axi_read_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_common.compile new file mode 100644 index 000000000..c150c939d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hdl.f new file mode 100644 index 000000000..b5ab5eab1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hvl.f new file mode 100644 index 000000000..ea2d1017f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_xrtl.f new file mode 100644 index 000000000..16c479246 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hdl.compile new file mode 100644 index 000000000..96c4c97f5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_read_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_read_in_if.sv + - src/fuse_ctrl_core_axi_read_in_monitor_bfm.sv + - src/fuse_ctrl_core_axi_read_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hvl.compile new file mode 100644 index 000000000..287ac6ac3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_read_in_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_read_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.sv new file mode 100644 index 000000000..69c23d827 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_read_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_read_in_macros.svh" + + export fuse_ctrl_core_axi_read_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_read_in_typedefs.svh" + `include "src/fuse_ctrl_core_axi_read_in_transaction.svh" + + `include "src/fuse_ctrl_core_axi_read_in_configuration.svh" + `include "src/fuse_ctrl_core_axi_read_in_driver.svh" + `include "src/fuse_ctrl_core_axi_read_in_monitor.svh" + + `include "src/fuse_ctrl_core_axi_read_in_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_read_in_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_read_in_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_read_in_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_read_in2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_read_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.vinfo new file mode 100644 index 000000000..0c3c242fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_read_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_read_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.sv new file mode 100644 index 000000000..2377e24ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_read_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_read_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.vinfo new file mode 100644 index 000000000..ff9df3113 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_sve.F new file mode 100644 index 000000000..2a3defa24 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_in_pkg/fuse_ctrl_core_axi_read_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in2reg_adapter.svh new file mode 100644 index 000000000..cb981636b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_read_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_read_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_read_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_agent.svh new file mode 100644 index 000000000..40c3aad46 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_read_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_read_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_read_in_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_configuration.svh new file mode 100644 index 000000000..55a8cfe6b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_read_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_read_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_read_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_read_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_read_in_configuration_s fuse_ctrl_core_axi_read_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_read_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_read_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_read_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_read_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_read_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver.svh new file mode 100644 index 000000000..a0a7a6daa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_read_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_read_in_driver and fuse_ctrl_core_axi_read_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_read_in_driver_bfm. +`fuse_ctrl_core_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_in_initiator_s fuse_ctrl_core_axi_read_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_read_in_driver and fuse_ctrl_core_axi_read_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_read_in_driver_bfm. +`fuse_ctrl_core_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_in_responder_s fuse_ctrl_core_axi_read_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_read_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_read_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_read_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_read_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver_bfm.sv new file mode 100644 index 000000000..ae6de997b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_read_in signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_read_in driver through a virtual interface +// handle in the fuse_ctrl_core_axi_read_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_read_in_if. +// +// Input signals from the fuse_ctrl_core_axi_read_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_read_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_in_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_in_macros.svh" + +interface fuse_ctrl_core_axi_read_in_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_read_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_read_in_pkg::fuse_ctrl_core_axi_read_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_read_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_read_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_read_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_in_driver and fuse_ctrl_core_axi_read_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_in_driver_bfm. + `fuse_ctrl_core_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_read_in_driver and fuse_ctrl_core_axi_read_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_in_driver_bfm. + `fuse_ctrl_core_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_read_in_configuration_s fuse_ctrl_core_axi_read_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_read_in_initiator_s fuse_ctrl_core_axi_read_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_read_in_responder_s fuse_ctrl_core_axi_read_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_read_in_initiator_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Members within the fuse_ctrl_core_axi_read_in_responder_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + initiator_struct = fuse_ctrl_core_axi_read_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_core_axi_read_in_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_read_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_read_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_read_in_initiator_s fuse_ctrl_core_axi_read_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_read_in_responder_s fuse_ctrl_core_axi_read_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_read_in_initiator_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Variables within the fuse_ctrl_core_axi_read_in_responder_struct: + // logic [AW-1:0] core_araddr ; + // logic core_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + // logic [2:0] core_arsize ; + // logic [7:0] core_arlen ; + // logic [UW-1:0] core_aruser ; + // logic [IW-1:0] core_arid ; + // logic core_arlock ; + // logic core_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = arlock_i; // + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_core_axi_read_in_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_read_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_read_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_if.sv new file mode 100644 index 000000000..b778c9293 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_read_in interface signals. +// It is instantiated once per fuse_ctrl_core_axi_read_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_read_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_read_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_read_in_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_in_pkg_hdl::*; + +interface fuse_ctrl_core_axi_read_in_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_macros.svh new file mode 100644 index 000000000..4ada88f4d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_read_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_read_in_configuration class. +// + `define fuse_ctrl_core_axi_read_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_read_in_configuration_s; + + `define fuse_ctrl_core_axi_read_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_configuration_s to_struct();\ + fuse_ctrl_core_axi_read_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_read_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_read_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_read_in_configuration_s fuse_ctrl_core_axi_read_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_read_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_read_in_transaction class. +// + `define fuse_ctrl_core_axi_read_in_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_in_monitor_s; + + `define fuse_ctrl_core_axi_read_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_read_in_monitor_struct = \ + { \ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_read_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_read_in_monitor_s fuse_ctrl_core_axi_read_in_monitor_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_read_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_in_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_in_initiator_s; + + `define fuse_ctrl_core_axi_read_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_read_in_initiator_struct = \ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_read_in_initiator_s fuse_ctrl_core_axi_read_in_initiator_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_read_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_in_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] core_araddr ; \ + logic core_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; \ + logic [2:0] core_arsize ; \ + logic [7:0] core_arlen ; \ + logic [UW-1:0] core_aruser ; \ + logic [IW-1:0] core_arid ; \ + logic core_arlock ; \ + logic core_rready ; \ + } fuse_ctrl_core_axi_read_in_responder_s; + + `define fuse_ctrl_core_axi_read_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_in_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_read_in_responder_struct = \ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + };\ + return ( fuse_ctrl_core_axi_read_in_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_read_in_responder_s fuse_ctrl_core_axi_read_in_responder_struct);\ + {\ + this.core_araddr , \ + this.core_arvalid , \ + this.core_arburst , \ + this.core_arsize , \ + this.core_arlen , \ + this.core_aruser , \ + this.core_arid , \ + this.core_arlock , \ + this.core_rready \ + } = fuse_ctrl_core_axi_read_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor.svh new file mode 100644 index 000000000..62b74b3f5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_read_in transactions observed by the +// fuse_ctrl_core_axi_read_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_read_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_read_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_read_in_monitor_s fuse_ctrl_core_axi_read_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_read_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor_bfm.sv new file mode 100644 index 000000000..13ea7d2b3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_read_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_read_in monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_read_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_read_in_if. +// +// Input signals from the fuse_ctrl_core_axi_read_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_read_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_in_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_in_macros.svh" + + +interface fuse_ctrl_core_axi_read_in_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_read_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_read_in_MONITOR_STRUCT + fuse_ctrl_core_axi_read_in_monitor_s fuse_ctrl_core_axi_read_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_read_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_read_in_pkg::fuse_ctrl_core_axi_read_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_read_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_read_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_read_in_configuration_s fuse_ctrl_core_axi_read_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_read_in_monitor_s fuse_ctrl_core_axi_read_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_araddr + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_arvalid + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_arburst + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_arsize + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_arlen + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_aruser + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_arid + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_arlock + // // fuse_ctrl_core_axi_read_in_monitor_struct.core_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_core_axi_read_in_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_random_sequence.svh new file mode 100644 index 000000000..ce6f4efd0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_read_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_read_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_read_in_random_sequence::body()-fuse_ctrl_core_axi_read_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_read_in_driver_bfm via the sequencer and fuse_ctrl_core_axi_read_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_read_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_responder_sequence.svh new file mode 100644 index 000000000..44a3b25db --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_read_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_sequence_base.svh new file mode 100644 index 000000000..bb92d2409 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_in_transaction_req_t; + fuse_ctrl_core_axi_read_in_transaction_req_t req; + typedef fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_in_transaction_rsp_t; + fuse_ctrl_core_axi_read_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_read_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_read_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction.svh new file mode 100644 index 000000000..39e8f9735 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_read_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_in_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] core_araddr ; + logic core_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] core_arburst ; + logic [2:0] core_arsize ; + logic [7:0] core_arlen ; + logic [UW-1:0] core_aruser ; + logic [IW-1:0] core_arid ; + logic core_arlock ; + logic core_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_read_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_read_in_monitor and fuse_ctrl_core_axi_read_in_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_MONITOR_STRUCT + fuse_ctrl_core_axi_read_in_monitor_s fuse_ctrl_core_axi_read_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_in_driver and fuse_ctrl_core_axi_read_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_in_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_in_initiator_s fuse_ctrl_core_axi_read_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_read_in_driver and fuse_ctrl_core_axi_read_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_in_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_in_responder_s fuse_ctrl_core_axi_read_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_in_responder_struct. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_in_macros.svh + `fuse_ctrl_core_axi_read_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_araddr:0x%x core_arvalid:0x%x core_arburst:0x%x core_arsize:0x%x core_arlen:0x%x core_aruser:0x%x core_arid:0x%x core_arlock:0x%x core_rready:0x%x ",core_araddr,core_arvalid,core_arburst,core_arsize,core_arlen,core_aruser,core_arid,core_arlock,core_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_araddr = RHS.core_araddr; + this.core_arvalid = RHS.core_arvalid; + this.core_arburst = RHS.core_arburst; + this.core_arsize = RHS.core_arsize; + this.core_arlen = RHS.core_arlen; + this.core_aruser = RHS.core_aruser; + this.core_arid = RHS.core_arid; + this.core_arlock = RHS.core_arlock; + this.core_rready = RHS.core_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_read_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_araddr,"core_araddr"); + $add_attribute(transaction_view_h,core_arvalid,"core_arvalid"); + $add_attribute(transaction_view_h,core_arburst,"core_arburst"); + $add_attribute(transaction_view_h,core_arsize,"core_arsize"); + $add_attribute(transaction_view_h,core_arlen,"core_arlen"); + $add_attribute(transaction_view_h,core_aruser,"core_aruser"); + $add_attribute(transaction_view_h,core_arid,"core_arid"); + $add_attribute(transaction_view_h,core_arlock,"core_arlock"); + $add_attribute(transaction_view_h,core_rready,"core_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction_coverage.svh new file mode 100644 index 000000000..b17252421 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_read_in transaction information using +// a covergroup named fuse_ctrl_core_axi_read_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_in_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_in_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_read_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_araddr: coverpoint coverage_trans.core_araddr; + core_arvalid: coverpoint coverage_trans.core_arvalid; + core_arburst: coverpoint coverage_trans.core_arburst; + core_arsize: coverpoint coverage_trans.core_arsize; + core_arlen: coverpoint coverage_trans.core_arlen; + core_aruser: coverpoint coverage_trans.core_aruser; + core_arid: coverpoint coverage_trans.core_arid; + core_arlock: coverpoint coverage_trans.core_arlock; + core_rready: coverpoint coverage_trans.core_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_read_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_read_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_read_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/src/fuse_ctrl_core_axi_read_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/yaml/fuse_ctrl_core_axi_read_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/yaml/fuse_ctrl_core_axi_read_in_interface.yaml new file mode 100644 index 000000000..85b8443f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_in_pkg/yaml/fuse_ctrl_core_axi_read_in_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_read_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: core_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.project new file mode 100644 index 000000000..4eb8e7fa7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_read_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.svproject new file mode 100644 index 000000000..ca67120a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/Makefile new file mode 100644 index 000000000..77d2d8ef1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_read_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_read_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hvl.f + +fuse_ctrl_core_axi_read_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hdl.f + +fuse_ctrl_core_axi_read_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_read_out_if_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_read_out_if_pkg +COMP_fuse_ctrl_core_axi_read_out_if_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_read_out_if_pkg +COMP_fuse_ctrl_core_axi_read_out_if_PKG_TGT = $(COMP_fuse_ctrl_core_axi_read_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_read_out_if_pkg: $(COMP_fuse_ctrl_core_axi_read_out_if_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_read_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_read_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_read_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_out_if_pkg += -I$(fuse_ctrl_core_axi_read_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_out_if_pkg += $(fuse_ctrl_core_axi_read_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_read_out_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_read_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_read_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_read_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/compile.do new file mode 100644 index 000000000..79c0b7bbf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_read_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if.compile new file mode 100644 index 000000000..9b16b1eb7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_read_out_if_hvl.compile + - fuse_ctrl_core_axi_read_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_bfm.vinfo new file mode 100644 index 000000000..052ffff1e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_read_out_if_if.sv +src/fuse_ctrl_core_axi_read_out_if_driver_bfm.sv +src/fuse_ctrl_core_axi_read_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_common.compile new file mode 100644 index 000000000..6f3386ead --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hdl.f new file mode 100644 index 000000000..49d73f821 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hvl.f new file mode 100644 index 000000000..49fbb9e2b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_xrtl.f new file mode 100644 index 000000000..6a4fea185 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hdl.compile new file mode 100644 index 000000000..67f1b7bb1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_read_out_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_read_out_if_if.sv + - src/fuse_ctrl_core_axi_read_out_if_monitor_bfm.sv + - src/fuse_ctrl_core_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hvl.compile new file mode 100644 index 000000000..0a7a5beef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_read_out_if_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.sv new file mode 100644 index 000000000..83af573ed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_read_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_read_out_if_macros.svh" + + export fuse_ctrl_core_axi_read_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_read_out_if_typedefs.svh" + `include "src/fuse_ctrl_core_axi_read_out_if_transaction.svh" + + `include "src/fuse_ctrl_core_axi_read_out_if_configuration.svh" + `include "src/fuse_ctrl_core_axi_read_out_if_driver.svh" + `include "src/fuse_ctrl_core_axi_read_out_if_monitor.svh" + + `include "src/fuse_ctrl_core_axi_read_out_if_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_read_out_if_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_read_out_if_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_read_out_if_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_read_out_if2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_read_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.vinfo new file mode 100644 index 000000000..11d12898a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv new file mode 100644 index 000000000..7e145d3ca --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_read_out_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_read_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..4ebfc1cf0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_sve.F new file mode 100644 index 000000000..7e68f8b02 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/fuse_ctrl_core_axi_read_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if2reg_adapter.svh new file mode 100644 index 000000000..572880369 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_read_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_read_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_read_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_agent.svh new file mode 100644 index 000000000..98e11f158 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_read_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_configuration.svh new file mode 100644 index 000000000..ca3265795 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_read_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_read_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_read_out_if_configuration_s fuse_ctrl_core_axi_read_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_read_out_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_if_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_read_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_read_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_read_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_read_out_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver.svh new file mode 100644 index 000000000..79a37cfcd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_read_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_read_out_if_driver and fuse_ctrl_core_axi_read_out_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_read_out_if_driver_bfm. +`fuse_ctrl_core_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_out_if_initiator_s fuse_ctrl_core_axi_read_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_read_out_if_driver and fuse_ctrl_core_axi_read_out_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_read_out_if_driver_bfm. +`fuse_ctrl_core_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_out_if_responder_s fuse_ctrl_core_axi_read_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_read_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_read_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_read_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_read_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver_bfm.sv new file mode 100644 index 000000000..7bc0b6bba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_read_out_if signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_read_out_if driver through a virtual interface +// handle in the fuse_ctrl_core_axi_read_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_read_out_if_if. +// +// Input signals from the fuse_ctrl_core_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_read_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_out_if_macros.svh" + +interface fuse_ctrl_core_axi_read_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_read_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_read_out_if_pkg::fuse_ctrl_core_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_read_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_read_out_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_read_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_out_if_driver and fuse_ctrl_core_axi_read_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_out_if_driver_bfm. + `fuse_ctrl_core_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_read_out_if_driver and fuse_ctrl_core_axi_read_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_out_if_driver_bfm. + `fuse_ctrl_core_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_read_out_if_configuration_s fuse_ctrl_core_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_read_out_if_initiator_s fuse_ctrl_core_axi_read_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_read_out_if_responder_s fuse_ctrl_core_axi_read_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_read_out_if_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Members within the fuse_ctrl_core_axi_read_out_if_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + initiator_struct = fuse_ctrl_core_axi_read_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_core_axi_read_out_if_responder_struct.xyz = arready_i; // + // fuse_ctrl_core_axi_read_out_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_read_out_if_responder_struct.xyz = rresp_i; // + // fuse_ctrl_core_axi_read_out_if_responder_struct.xyz = rid_i; // + // fuse_ctrl_core_axi_read_out_if_responder_struct.xyz = rlast_i; // + // fuse_ctrl_core_axi_read_out_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_read_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_read_out_if_initiator_s fuse_ctrl_core_axi_read_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_read_out_if_responder_s fuse_ctrl_core_axi_read_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_read_out_if_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Variables within the fuse_ctrl_core_axi_read_out_if_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= fuse_ctrl_core_axi_read_out_if_initiator_struct.xyz; // + // rdata_o <= fuse_ctrl_core_axi_read_out_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= fuse_ctrl_core_axi_read_out_if_initiator_struct.xyz; // + // rid_o <= fuse_ctrl_core_axi_read_out_if_initiator_struct.xyz; // + // rlast_o <= fuse_ctrl_core_axi_read_out_if_initiator_struct.xyz; // + // rvalid_o <= fuse_ctrl_core_axi_read_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_read_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_if.sv new file mode 100644 index 000000000..b9222ea7e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_read_out_if interface signals. +// It is instantiated once per fuse_ctrl_core_axi_read_out_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_read_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_read_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_read_out_if_bus.arready), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_if_bus.rdata), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_if_bus.rresp), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_if_bus.rid), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_if_bus.rlast), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_out_if_pkg_hdl::*; + +interface fuse_ctrl_core_axi_read_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_macros.svh new file mode 100644 index 000000000..6806b6e97 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_read_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_read_out_if_configuration class. +// + `define fuse_ctrl_core_axi_read_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_read_out_if_configuration_s; + + `define fuse_ctrl_core_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_if_configuration_s to_struct();\ + fuse_ctrl_core_axi_read_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_read_out_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_read_out_if_configuration_s fuse_ctrl_core_axi_read_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_read_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_read_out_if_transaction class. +// + `define fuse_ctrl_core_axi_read_out_if_MONITOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } fuse_ctrl_core_axi_read_out_if_monitor_s; + + `define fuse_ctrl_core_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_if_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_read_out_if_monitor_struct = \ + { \ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( fuse_ctrl_core_axi_read_out_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_read_out_if_monitor_s fuse_ctrl_core_axi_read_out_if_monitor_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = fuse_ctrl_core_axi_read_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } fuse_ctrl_core_axi_read_out_if_initiator_s; + + `define fuse_ctrl_core_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_if_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_read_out_if_initiator_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( fuse_ctrl_core_axi_read_out_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_read_out_if_initiator_s fuse_ctrl_core_axi_read_out_if_initiator_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = fuse_ctrl_core_axi_read_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } fuse_ctrl_core_axi_read_out_if_responder_s; + + `define fuse_ctrl_core_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_if_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_read_out_if_responder_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( fuse_ctrl_core_axi_read_out_if_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_read_out_if_responder_s fuse_ctrl_core_axi_read_out_if_responder_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = fuse_ctrl_core_axi_read_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor.svh new file mode 100644 index 000000000..b170cd71e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_read_out_if transactions observed by the +// fuse_ctrl_core_axi_read_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_read_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_read_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_read_out_if_monitor_s fuse_ctrl_core_axi_read_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_read_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor_bfm.sv new file mode 100644 index 000000000..e01d9bb2b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_read_out_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_read_out_if monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_read_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_read_out_if_if. +// +// Input signals from the fuse_ctrl_core_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_read_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_out_if_macros.svh" + + +interface fuse_ctrl_core_axi_read_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_read_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_read_out_if_MONITOR_STRUCT + fuse_ctrl_core_axi_read_out_if_monitor_s fuse_ctrl_core_axi_read_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_read_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_read_out_if_pkg::fuse_ctrl_core_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_read_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_read_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_read_out_if_configuration_s fuse_ctrl_core_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_read_out_if_monitor_s fuse_ctrl_core_axi_read_out_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_read_out_if_monitor_struct.core_arready + // // fuse_ctrl_core_axi_read_out_if_monitor_struct.core_rdata + // // fuse_ctrl_core_axi_read_out_if_monitor_struct.core_rresp + // // fuse_ctrl_core_axi_read_out_if_monitor_struct.core_rid + // // fuse_ctrl_core_axi_read_out_if_monitor_struct.core_rlast + // // fuse_ctrl_core_axi_read_out_if_monitor_struct.core_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_read_out_if_monitor_struct.xyz = arready_i; // + // fuse_ctrl_core_axi_read_out_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_read_out_if_monitor_struct.xyz = rresp_i; // + // fuse_ctrl_core_axi_read_out_if_monitor_struct.xyz = rid_i; // + // fuse_ctrl_core_axi_read_out_if_monitor_struct.xyz = rlast_i; // + // fuse_ctrl_core_axi_read_out_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_random_sequence.svh new file mode 100644 index 000000000..444ad3349 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_read_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_read_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_read_out_if_random_sequence::body()-fuse_ctrl_core_axi_read_out_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_read_out_if_driver_bfm via the sequencer and fuse_ctrl_core_axi_read_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_read_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_responder_sequence.svh new file mode 100644 index 000000000..b146cb193 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_read_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_sequence_base.svh new file mode 100644 index 000000000..cc685c46c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_out_if_transaction_req_t; + fuse_ctrl_core_axi_read_out_if_transaction_req_t req; + typedef fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_out_if_transaction_rsp_t; + fuse_ctrl_core_axi_read_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_read_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_read_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction.svh new file mode 100644 index 000000000..3d9e4155f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_read_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_arready ; + logic [DW-1:0] core_rdata ; + axi_pkg::axi_burst_e core_rresp ; + logic [IW-1:0] core_rid ; + logic core_rlast ; + logic core_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_read_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_read_out_if_monitor and fuse_ctrl_core_axi_read_out_if_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_MONITOR_STRUCT + fuse_ctrl_core_axi_read_out_if_monitor_s fuse_ctrl_core_axi_read_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_out_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_if_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_out_if_driver and fuse_ctrl_core_axi_read_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_out_if_initiator_s fuse_ctrl_core_axi_read_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_out_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_if_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_read_out_if_driver and fuse_ctrl_core_axi_read_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_out_if_responder_s fuse_ctrl_core_axi_read_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_out_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_if_responder_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_if_macros.svh + `fuse_ctrl_core_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_arready:0x%x core_rdata:0x%x core_rresp:0x%x core_rid:0x%x core_rlast:0x%x core_rvalid:0x%x ",core_arready,core_rdata,core_rresp,core_rid,core_rlast,core_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_arready == RHS.core_arready) + &&(this.core_rdata == RHS.core_rdata) + &&(this.core_rresp == RHS.core_rresp) + &&(this.core_rid == RHS.core_rid) + &&(this.core_rlast == RHS.core_rlast) + &&(this.core_rvalid == RHS.core_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_arready = RHS.core_arready; + this.core_rdata = RHS.core_rdata; + this.core_rresp = RHS.core_rresp; + this.core_rid = RHS.core_rid; + this.core_rlast = RHS.core_rlast; + this.core_rvalid = RHS.core_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_read_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_arready,"core_arready"); + $add_attribute(transaction_view_h,core_rdata,"core_rdata"); + $add_attribute(transaction_view_h,core_rresp,"core_rresp"); + $add_attribute(transaction_view_h,core_rid,"core_rid"); + $add_attribute(transaction_view_h,core_rlast,"core_rlast"); + $add_attribute(transaction_view_h,core_rvalid,"core_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction_coverage.svh new file mode 100644 index 000000000..8c29582fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_read_out_if transaction information using +// a covergroup named fuse_ctrl_core_axi_read_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_read_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_arready: coverpoint coverage_trans.core_arready; + core_rdata: coverpoint coverage_trans.core_rdata; + core_rresp: coverpoint coverage_trans.core_rresp; + core_rid: coverpoint coverage_trans.core_rid; + core_rlast: coverpoint coverage_trans.core_rlast; + core_rvalid: coverpoint coverage_trans.core_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_read_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_read_out_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_read_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/src/fuse_ctrl_core_axi_read_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/yaml/fuse_ctrl_core_axi_read_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/yaml/fuse_ctrl_core_axi_read_out_if_interface.yaml new file mode 100644 index 000000000..e6555eaf2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_if_pkg/yaml/fuse_ctrl_core_axi_read_out_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_read_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.project new file mode 100644 index 000000000..23723ddc3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_read_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.svproject new file mode 100644 index 000000000..b74d8263a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/Makefile new file mode 100644 index 000000000..673e00d3b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_read_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_read_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hvl.f + +fuse_ctrl_core_axi_read_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hdl.f + +fuse_ctrl_core_axi_read_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_read_out_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_read_out_pkg +COMP_fuse_ctrl_core_axi_read_out_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_read_out_pkg +COMP_fuse_ctrl_core_axi_read_out_PKG_TGT = $(COMP_fuse_ctrl_core_axi_read_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_read_out_pkg: $(COMP_fuse_ctrl_core_axi_read_out_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_read_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_read_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_read_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_read_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_read_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_read_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_out_pkg += -I$(fuse_ctrl_core_axi_read_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_read_out_pkg += $(fuse_ctrl_core_axi_read_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_read_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_read_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_read_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_read_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_read_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/compile.do new file mode 100644 index 000000000..5e6a9fd02 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_read_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out.compile new file mode 100644 index 000000000..ad96a809e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_read_out_hvl.compile + - fuse_ctrl_core_axi_read_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_bfm.vinfo new file mode 100644 index 000000000..03fc49a0a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_read_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_read_out_if.sv +src/fuse_ctrl_core_axi_read_out_driver_bfm.sv +src/fuse_ctrl_core_axi_read_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_common.compile new file mode 100644 index 000000000..84d4f2e7f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hdl.f new file mode 100644 index 000000000..2debd1cc6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hvl.f new file mode 100644 index 000000000..8e9b75a31 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_xrtl.f new file mode 100644 index 000000000..4b0eaa25b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hdl.compile new file mode 100644 index 000000000..5b16e7513 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_read_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_read_out_if.sv + - src/fuse_ctrl_core_axi_read_out_monitor_bfm.sv + - src/fuse_ctrl_core_axi_read_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hvl.compile new file mode 100644 index 000000000..a24021047 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_read_out_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_read_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.sv new file mode 100644 index 000000000..d297db477 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_read_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_read_out_macros.svh" + + export fuse_ctrl_core_axi_read_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_read_out_typedefs.svh" + `include "src/fuse_ctrl_core_axi_read_out_transaction.svh" + + `include "src/fuse_ctrl_core_axi_read_out_configuration.svh" + `include "src/fuse_ctrl_core_axi_read_out_driver.svh" + `include "src/fuse_ctrl_core_axi_read_out_monitor.svh" + + `include "src/fuse_ctrl_core_axi_read_out_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_read_out_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_read_out_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_read_out_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_read_out2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_read_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.vinfo new file mode 100644 index 000000000..50e86c01e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_read_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_read_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.sv new file mode 100644 index 000000000..0e4cd5815 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_read_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_read_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_read_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.vinfo new file mode 100644 index 000000000..b7569b98e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_sve.F new file mode 100644 index 000000000..531457d9b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_read_out_pkg/fuse_ctrl_core_axi_read_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out2reg_adapter.svh new file mode 100644 index 000000000..44bdb8771 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_read_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_read_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_read_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_agent.svh new file mode 100644 index 000000000..4c2bae450 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_read_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_read_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_read_out_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_configuration.svh new file mode 100644 index 000000000..cadcf884e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_read_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_read_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_read_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_read_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_read_out_configuration_s fuse_ctrl_core_axi_read_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_read_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_read_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_read_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_read_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_read_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver.svh new file mode 100644 index 000000000..0471800a7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_read_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_read_out_driver and fuse_ctrl_core_axi_read_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_read_out_driver_bfm. +`fuse_ctrl_core_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_out_initiator_s fuse_ctrl_core_axi_read_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_read_out_driver and fuse_ctrl_core_axi_read_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_read_out_driver_bfm. +`fuse_ctrl_core_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_out_responder_s fuse_ctrl_core_axi_read_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_read_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_read_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_read_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_read_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver_bfm.sv new file mode 100644 index 000000000..e7cfcff1b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_read_out signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_read_out driver through a virtual interface +// handle in the fuse_ctrl_core_axi_read_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_read_out_if. +// +// Input signals from the fuse_ctrl_core_axi_read_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_read_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_out_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_out_macros.svh" + +interface fuse_ctrl_core_axi_read_out_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_read_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_read_out_pkg::fuse_ctrl_core_axi_read_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_read_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_read_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_read_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_out_driver and fuse_ctrl_core_axi_read_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_out_driver_bfm. + `fuse_ctrl_core_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_read_out_driver and fuse_ctrl_core_axi_read_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_out_driver_bfm. + `fuse_ctrl_core_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_read_out_configuration_s fuse_ctrl_core_axi_read_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_read_out_initiator_s fuse_ctrl_core_axi_read_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_read_out_responder_s fuse_ctrl_core_axi_read_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_read_out_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Members within the fuse_ctrl_core_axi_read_out_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + initiator_struct = fuse_ctrl_core_axi_read_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_core_axi_read_out_responder_struct.xyz = arready_i; // + // fuse_ctrl_core_axi_read_out_responder_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_read_out_responder_struct.xyz = rresp_i; // + // fuse_ctrl_core_axi_read_out_responder_struct.xyz = rid_i; // + // fuse_ctrl_core_axi_read_out_responder_struct.xyz = rlast_i; // + // fuse_ctrl_core_axi_read_out_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_read_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_read_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_read_out_initiator_s fuse_ctrl_core_axi_read_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_read_out_responder_s fuse_ctrl_core_axi_read_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_read_out_initiator_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Variables within the fuse_ctrl_core_axi_read_out_responder_struct: + // logic core_arready ; + // logic [DW-1:0] core_rdata ; + // axi_pkg::axi_burst_e core_rresp ; + // logic [IW-1:0] core_rid ; + // logic core_rlast ; + // logic core_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= fuse_ctrl_core_axi_read_out_initiator_struct.xyz; // + // rdata_o <= fuse_ctrl_core_axi_read_out_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= fuse_ctrl_core_axi_read_out_initiator_struct.xyz; // + // rid_o <= fuse_ctrl_core_axi_read_out_initiator_struct.xyz; // + // rlast_o <= fuse_ctrl_core_axi_read_out_initiator_struct.xyz; // + // rvalid_o <= fuse_ctrl_core_axi_read_out_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_read_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_read_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_if.sv new file mode 100644 index 000000000..f32c01a5d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_read_out interface signals. +// It is instantiated once per fuse_ctrl_core_axi_read_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_read_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_read_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_read_out_bus.arready), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_bus.rdata), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_bus.rresp), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_bus.rid), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_bus.rlast), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_read_out_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_out_pkg_hdl::*; + +interface fuse_ctrl_core_axi_read_out_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_macros.svh new file mode 100644 index 000000000..2742dc04b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_read_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_read_out_configuration class. +// + `define fuse_ctrl_core_axi_read_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_read_out_configuration_s; + + `define fuse_ctrl_core_axi_read_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_configuration_s to_struct();\ + fuse_ctrl_core_axi_read_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_read_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_read_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_read_out_configuration_s fuse_ctrl_core_axi_read_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_read_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_read_out_transaction class. +// + `define fuse_ctrl_core_axi_read_out_MONITOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } fuse_ctrl_core_axi_read_out_monitor_s; + + `define fuse_ctrl_core_axi_read_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_read_out_monitor_struct = \ + { \ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( fuse_ctrl_core_axi_read_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_read_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_read_out_monitor_s fuse_ctrl_core_axi_read_out_monitor_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = fuse_ctrl_core_axi_read_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_read_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_out_INITIATOR_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } fuse_ctrl_core_axi_read_out_initiator_s; + + `define fuse_ctrl_core_axi_read_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_read_out_initiator_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( fuse_ctrl_core_axi_read_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_read_out_initiator_s fuse_ctrl_core_axi_read_out_initiator_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = fuse_ctrl_core_axi_read_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_read_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_read_out_RESPONDER_STRUCT typedef struct packed { \ + logic core_arready ; \ + logic [DW-1:0] core_rdata ; \ + axi_pkg::axi_burst_e core_rresp ; \ + logic [IW-1:0] core_rid ; \ + logic core_rlast ; \ + logic core_rvalid ; \ + } fuse_ctrl_core_axi_read_out_responder_s; + + `define fuse_ctrl_core_axi_read_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_read_out_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_read_out_responder_struct = \ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + };\ + return ( fuse_ctrl_core_axi_read_out_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_read_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_read_out_responder_s fuse_ctrl_core_axi_read_out_responder_struct);\ + {\ + this.core_arready , \ + this.core_rdata , \ + this.core_rresp , \ + this.core_rid , \ + this.core_rlast , \ + this.core_rvalid \ + } = fuse_ctrl_core_axi_read_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor.svh new file mode 100644 index 000000000..192a1829f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_read_out transactions observed by the +// fuse_ctrl_core_axi_read_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_read_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_read_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_read_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_read_out_monitor_s fuse_ctrl_core_axi_read_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_read_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor_bfm.sv new file mode 100644 index 000000000..05a619e3c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_read_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_read_out monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_read_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_read_out_if. +// +// Input signals from the fuse_ctrl_core_axi_read_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_read_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_read_out_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_read_out_macros.svh" + + +interface fuse_ctrl_core_axi_read_out_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_read_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_read_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_read_out_MONITOR_STRUCT + fuse_ctrl_core_axi_read_out_monitor_s fuse_ctrl_core_axi_read_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_read_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_read_out_pkg::fuse_ctrl_core_axi_read_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_read_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_read_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_read_out_configuration_s fuse_ctrl_core_axi_read_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_read_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_read_out_monitor_s fuse_ctrl_core_axi_read_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_read_out_monitor_struct.core_arready + // // fuse_ctrl_core_axi_read_out_monitor_struct.core_rdata + // // fuse_ctrl_core_axi_read_out_monitor_struct.core_rresp + // // fuse_ctrl_core_axi_read_out_monitor_struct.core_rid + // // fuse_ctrl_core_axi_read_out_monitor_struct.core_rlast + // // fuse_ctrl_core_axi_read_out_monitor_struct.core_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_read_out_monitor_struct.xyz = arready_i; // + // fuse_ctrl_core_axi_read_out_monitor_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_read_out_monitor_struct.xyz = rresp_i; // + // fuse_ctrl_core_axi_read_out_monitor_struct.xyz = rid_i; // + // fuse_ctrl_core_axi_read_out_monitor_struct.xyz = rlast_i; // + // fuse_ctrl_core_axi_read_out_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_random_sequence.svh new file mode 100644 index 000000000..75644216c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_read_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_read_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_read_out_random_sequence::body()-fuse_ctrl_core_axi_read_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_read_out_driver_bfm via the sequencer and fuse_ctrl_core_axi_read_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_read_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_responder_sequence.svh new file mode 100644 index 000000000..7201178fa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_read_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_read_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_sequence_base.svh new file mode 100644 index 000000000..552bdba7d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_out_transaction_req_t; + fuse_ctrl_core_axi_read_out_transaction_req_t req; + typedef fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_read_out_transaction_rsp_t; + fuse_ctrl_core_axi_read_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_read_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_read_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction.svh new file mode 100644 index 000000000..4654272c3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_read_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_read_out_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_arready ; + logic [DW-1:0] core_rdata ; + axi_pkg::axi_burst_e core_rresp ; + logic [IW-1:0] core_rid ; + logic core_rlast ; + logic core_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_read_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_read_out_monitor and fuse_ctrl_core_axi_read_out_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_MONITOR_STRUCT + fuse_ctrl_core_axi_read_out_monitor_s fuse_ctrl_core_axi_read_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_read_out_driver and fuse_ctrl_core_axi_read_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_read_out_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_core_axi_read_out_initiator_s fuse_ctrl_core_axi_read_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_read_out_driver and fuse_ctrl_core_axi_read_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_read_out_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_core_axi_read_out_responder_s fuse_ctrl_core_axi_read_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_read_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_read_out_responder_struct. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_read_out_macros.svh + `fuse_ctrl_core_axi_read_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_arready:0x%x core_rdata:0x%x core_rresp:0x%x core_rid:0x%x core_rlast:0x%x core_rvalid:0x%x ",core_arready,core_rdata,core_rresp,core_rid,core_rlast,core_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_arready == RHS.core_arready) + &&(this.core_rdata == RHS.core_rdata) + &&(this.core_rresp == RHS.core_rresp) + &&(this.core_rid == RHS.core_rid) + &&(this.core_rlast == RHS.core_rlast) + &&(this.core_rvalid == RHS.core_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_arready = RHS.core_arready; + this.core_rdata = RHS.core_rdata; + this.core_rresp = RHS.core_rresp; + this.core_rid = RHS.core_rid; + this.core_rlast = RHS.core_rlast; + this.core_rvalid = RHS.core_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_read_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_arready,"core_arready"); + $add_attribute(transaction_view_h,core_rdata,"core_rdata"); + $add_attribute(transaction_view_h,core_rresp,"core_rresp"); + $add_attribute(transaction_view_h,core_rid,"core_rid"); + $add_attribute(transaction_view_h,core_rlast,"core_rlast"); + $add_attribute(transaction_view_h,core_rvalid,"core_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction_coverage.svh new file mode 100644 index 000000000..ad53e4910 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_read_out transaction information using +// a covergroup named fuse_ctrl_core_axi_read_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_read_out_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_read_out_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_read_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_arready: coverpoint coverage_trans.core_arready; + core_rdata: coverpoint coverage_trans.core_rdata; + core_rresp: coverpoint coverage_trans.core_rresp; + core_rid: coverpoint coverage_trans.core_rid; + core_rlast: coverpoint coverage_trans.core_rlast; + core_rvalid: coverpoint coverage_trans.core_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_read_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_read_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_read_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_read_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/src/fuse_ctrl_core_axi_read_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/yaml/fuse_ctrl_core_axi_read_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/yaml/fuse_ctrl_core_axi_read_out_interface.yaml new file mode 100644 index 000000000..9e2244bcb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_read_out_pkg/yaml/fuse_ctrl_core_axi_read_out_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_read_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.project new file mode 100644 index 000000000..574f71c48 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_write_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.svproject new file mode 100644 index 000000000..ed3bfd5bc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/Makefile new file mode 100644 index 000000000..573f6542d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_write_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_write_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f + +fuse_ctrl_core_axi_write_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f + +fuse_ctrl_core_axi_write_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_write_if_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_write_if_pkg +COMP_fuse_ctrl_core_axi_write_if_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_write_if_pkg +COMP_fuse_ctrl_core_axi_write_if_PKG_TGT = $(COMP_fuse_ctrl_core_axi_write_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_write_if_pkg: $(COMP_fuse_ctrl_core_axi_write_if_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_write_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_write_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_write_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_write_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_write_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_if_pkg += -I$(fuse_ctrl_core_axi_write_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_if_pkg += $(fuse_ctrl_core_axi_write_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_write_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_write_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_write_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_write_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/compile.do new file mode 100644 index 000000000..1628622fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_write_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if.compile new file mode 100644 index 000000000..2ee95290b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_write_if_hvl.compile + - fuse_ctrl_core_axi_write_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_bfm.vinfo new file mode 100644 index 000000000..cfb94c619 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_write_if_if.sv +src/fuse_ctrl_core_axi_write_if_driver_bfm.sv +src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_common.compile new file mode 100644 index 000000000..12a17faa4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f new file mode 100644 index 000000000..c5556080a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f new file mode 100644 index 000000000..68b83cc94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f new file mode 100644 index 000000000..3108e102e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hdl.compile new file mode 100644 index 000000000..7185a09f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_write_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_write_if_if.sv + - src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv + - src/fuse_ctrl_core_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hvl.compile new file mode 100644 index 000000000..5096b1689 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_write_if_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.sv new file mode 100644 index 000000000..4fcea64ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_write_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_write_if_macros.svh" + + export fuse_ctrl_core_axi_write_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_write_if_typedefs.svh" + `include "src/fuse_ctrl_core_axi_write_if_transaction.svh" + + `include "src/fuse_ctrl_core_axi_write_if_configuration.svh" + `include "src/fuse_ctrl_core_axi_write_if_driver.svh" + `include "src/fuse_ctrl_core_axi_write_if_monitor.svh" + + `include "src/fuse_ctrl_core_axi_write_if_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_write_if_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_write_if_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_write_if_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_write_if2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_write_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.vinfo new file mode 100644 index 000000000..6bd4a3132 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.sv new file mode 100644 index 000000000..943fb4e9c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_write_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_write_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo new file mode 100644 index 000000000..179238254 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_sve.F new file mode 100644 index 000000000..0168ba713 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_if_pkg/fuse_ctrl_core_axi_write_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if2reg_adapter.svh new file mode 100644 index 000000000..f7dc857b5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_write_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_write_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_write_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_agent.svh new file mode 100644 index 000000000..d991ed3fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_write_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_configuration.svh new file mode 100644 index 000000000..e0d213f15 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_write_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_write_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_write_if_configuration_s fuse_ctrl_core_axi_write_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_write_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_if_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_write_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_write_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_write_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_write_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver.svh new file mode 100644 index 000000000..33543d00f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_write_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_write_if_driver_bfm. +`fuse_ctrl_core_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_if_initiator_s fuse_ctrl_core_axi_write_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_write_if_driver_bfm. +`fuse_ctrl_core_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_if_responder_s fuse_ctrl_core_axi_write_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_write_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_write_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_write_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_write_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver_bfm.sv new file mode 100644 index 000000000..8b920cc3e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_driver_bfm.sv @@ -0,0 +1,429 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_write_if signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_write_if driver through a virtual interface +// handle in the fuse_ctrl_core_axi_write_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_write_if_if. +// +// Input signals from the fuse_ctrl_core_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_write_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_if_macros.svh" + +interface fuse_ctrl_core_axi_write_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_write_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] awaddr_i; + reg [AW-1:0] awaddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] awburst_o = 'bz; + tri [2:0] awsize_i; + reg [2:0] awsize_o = 'bz; + tri [7:0] awlen_i; + reg [7:0] awlen_o = 'bz; + tri [UW-1:0] awuser_i; + reg [UW-1:0] awuser_o = 'bz; + tri [UW-1:0] awid_i; + reg [UW-1:0] awid_o = 'bz; + tri awlock_i; + reg awlock_o = 'bz; + tri awvalid_i; + reg awvalid_o = 'bz; + tri [DW-1:0] wdata_i; + reg [DW-1:0] wdata_o = 'bz; + tri [DW/8-1:0] wstrb_i; + reg [DW/8-1:0] wstrb_o = 'bz; + tri wvalid_i; + reg wvalid_o = 'bz; + tri wlast_i; + reg wlast_o = 'bz; + tri bready_i; + reg bready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.awaddr = (initiator_responder == INITIATOR) ? awaddr_o : 'bz; + assign awaddr_i = bus.awaddr; + assign bus.awburst = (initiator_responder == INITIATOR) ? awburst_o : 'bz; + assign awburst_i = bus.awburst; + assign bus.awsize = (initiator_responder == INITIATOR) ? awsize_o : 'bz; + assign awsize_i = bus.awsize; + assign bus.awlen = (initiator_responder == INITIATOR) ? awlen_o : 'bz; + assign awlen_i = bus.awlen; + assign bus.awuser = (initiator_responder == INITIATOR) ? awuser_o : 'bz; + assign awuser_i = bus.awuser; + assign bus.awid = (initiator_responder == INITIATOR) ? awid_o : 'bz; + assign awid_i = bus.awid; + assign bus.awlock = (initiator_responder == INITIATOR) ? awlock_o : 'bz; + assign awlock_i = bus.awlock; + assign bus.awvalid = (initiator_responder == INITIATOR) ? awvalid_o : 'bz; + assign awvalid_i = bus.awvalid; + assign bus.wdata = (initiator_responder == INITIATOR) ? wdata_o : 'bz; + assign wdata_i = bus.wdata; + assign bus.wstrb = (initiator_responder == INITIATOR) ? wstrb_o : 'bz; + assign wstrb_i = bus.wstrb; + assign bus.wvalid = (initiator_responder == INITIATOR) ? wvalid_o : 'bz; + assign wvalid_i = bus.wvalid; + assign bus.wlast = (initiator_responder == INITIATOR) ? wlast_o : 'bz; + assign wlast_i = bus.wlast; + assign bus.bready = (initiator_responder == INITIATOR) ? bready_o : 'bz; + assign bready_i = bus.bready; + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_write_if_pkg::fuse_ctrl_core_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_write_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_write_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_write_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_if_driver_bfm. + `fuse_ctrl_core_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_if_driver_bfm. + `fuse_ctrl_core_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + awaddr_o <= 'bz; + awburst_o <= 'bz; + awsize_o <= 'bz; + awlen_o <= 'bz; + awuser_o <= 'bz; + awid_o <= 'bz; + awlock_o <= 'bz; + awvalid_o <= 'bz; + wdata_o <= 'bz; + wstrb_o <= 'bz; + wvalid_o <= 'bz; + wlast_o <= 'bz; + bready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_write_if_configuration_s fuse_ctrl_core_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_write_if_initiator_s fuse_ctrl_core_axi_write_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_write_if_responder_s fuse_ctrl_core_axi_write_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_write_if_initiator_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Members within the fuse_ctrl_core_axi_write_if_responder_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + initiator_struct = fuse_ctrl_core_axi_write_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // awaddr_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [AW-1:0] + // awburst_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // awsize_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [2:0] + // awlen_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [7:0] + // awuser_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [UW-1:0] + // awid_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [UW-1:0] + // awlock_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // + // awvalid_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // + // wdata_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [DW-1:0] + // wstrb_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // [DW/8-1:0] + // wvalid_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // + // wlast_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // + // bready_o <= fuse_ctrl_core_axi_write_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_write_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_write_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_write_if_initiator_s fuse_ctrl_core_axi_write_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_write_if_responder_s fuse_ctrl_core_axi_write_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_write_if_initiator_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Variables within the fuse_ctrl_core_axi_write_if_responder_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awlock_i; // + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = awvalid_i; // + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = wvalid_i; // + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = wlast_i; // + // fuse_ctrl_core_axi_write_if_responder_struct.xyz = bready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_write_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_write_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_if.sv new file mode 100644 index 000000000..b0047fa1f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_if.sv @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_write_if interface signals. +// It is instantiated once per fuse_ctrl_core_axi_write_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_write_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_write_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awaddr), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awburst), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awsize), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awlen), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awuser), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awlock), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.awvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.wdata), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.wstrb), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.wvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.wlast), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_if_bus.bready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_if_pkg_hdl::*; + +interface fuse_ctrl_core_axi_write_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] awaddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst, + inout tri [2:0] awsize, + inout tri [7:0] awlen, + inout tri [UW-1:0] awuser, + inout tri [UW-1:0] awid, + inout tri awlock, + inout tri awvalid, + inout tri [DW-1:0] wdata, + inout tri [DW/8-1:0] wstrb, + inout tri wvalid, + inout tri wlast, + inout tri bready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output awaddr, + output awburst, + output awsize, + output awlen, + output awuser, + output awid, + output awlock, + output awvalid, + output wdata, + output wstrb, + output wvalid, + output wlast, + output bready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_macros.svh new file mode 100644 index 000000000..b8fd5a307 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_macros.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_write_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_write_if_configuration class. +// + `define fuse_ctrl_core_axi_write_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_write_if_configuration_s; + + `define fuse_ctrl_core_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_if_configuration_s to_struct();\ + fuse_ctrl_core_axi_write_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_write_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_write_if_configuration_s fuse_ctrl_core_axi_write_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_write_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_write_if_transaction class. +// + `define fuse_ctrl_core_axi_write_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_if_monitor_s; + + `define fuse_ctrl_core_axi_write_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_if_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_write_if_monitor_struct = \ + { \ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_write_if_monitor_s fuse_ctrl_core_axi_write_if_monitor_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_if_initiator_s; + + `define fuse_ctrl_core_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_if_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_write_if_initiator_struct = \ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_write_if_initiator_s fuse_ctrl_core_axi_write_if_initiator_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_if_responder_s; + + `define fuse_ctrl_core_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_if_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_write_if_responder_struct = \ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_if_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_write_if_responder_s fuse_ctrl_core_axi_write_if_responder_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor.svh new file mode 100644 index 000000000..a0022cc66 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_write_if transactions observed by the +// fuse_ctrl_core_axi_write_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_write_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_write_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_write_if_monitor_s fuse_ctrl_core_axi_write_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_write_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv new file mode 100644 index 000000000..de0093e53 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_monitor_bfm.sv @@ -0,0 +1,248 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_write_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_write_if monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_write_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_write_if_if. +// +// Input signals from the fuse_ctrl_core_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_write_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_if_macros.svh" + + +interface fuse_ctrl_core_axi_write_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_write_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_write_if_MONITOR_STRUCT + fuse_ctrl_core_axi_write_if_monitor_s fuse_ctrl_core_axi_write_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_write_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] awaddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + tri [2:0] awsize_i; + tri [7:0] awlen_i; + tri [UW-1:0] awuser_i; + tri [UW-1:0] awid_i; + tri awlock_i; + tri awvalid_i; + tri [DW-1:0] wdata_i; + tri [DW/8-1:0] wstrb_i; + tri wvalid_i; + tri wlast_i; + tri bready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awaddr_i = bus.awaddr; + assign awburst_i = bus.awburst; + assign awsize_i = bus.awsize; + assign awlen_i = bus.awlen; + assign awuser_i = bus.awuser; + assign awid_i = bus.awid; + assign awlock_i = bus.awlock; + assign awvalid_i = bus.awvalid; + assign wdata_i = bus.wdata; + assign wstrb_i = bus.wstrb; + assign wvalid_i = bus.wvalid; + assign wlast_i = bus.wlast; + assign bready_i = bus.bready; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_write_if_pkg::fuse_ctrl_core_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_write_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_write_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_write_if_configuration_s fuse_ctrl_core_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_write_if_monitor_s fuse_ctrl_core_axi_write_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awaddr + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awvalid + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awburst + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awsize + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awlen + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awuser + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awid + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_awlock + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_wdata + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_wstrb + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_wvalid + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_wlast + // // fuse_ctrl_core_axi_write_if_monitor_struct.core_bready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awlock_i; // + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = awvalid_i; // + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = wvalid_i; // + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = wlast_i; // + // fuse_ctrl_core_axi_write_if_monitor_struct.xyz = bready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_random_sequence.svh new file mode 100644 index 000000000..77120c18e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_write_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_write_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_write_if_random_sequence::body()-fuse_ctrl_core_axi_write_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_write_if_driver_bfm via the sequencer and fuse_ctrl_core_axi_write_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_write_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_responder_sequence.svh new file mode 100644 index 000000000..ed1c8c6bd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_write_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_sequence_base.svh new file mode 100644 index 000000000..122b3d543 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_if_transaction_req_t; + fuse_ctrl_core_axi_write_if_transaction_req_t req; + typedef fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_if_transaction_rsp_t; + fuse_ctrl_core_axi_write_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_write_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_write_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction.svh new file mode 100644 index 000000000..3298d1196 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction.svh @@ -0,0 +1,256 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_write_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] core_awaddr ; + logic core_awvalid ; + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + logic [2:0] core_awsize ; + logic [7:0] core_awlen ; + logic [UW-1:0] core_awuser ; + logic [IW-1:0] core_awid ; + logic core_awlock ; + logic [DW-1:0] core_wdata ; + logic [DW/8 - 1:0] core_wstrb ; + logic core_wvalid ; + logic core_wlast ; + logic core_bready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_write_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_write_if_monitor and fuse_ctrl_core_axi_write_if_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_MONITOR_STRUCT + fuse_ctrl_core_axi_write_if_monitor_s fuse_ctrl_core_axi_write_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_if_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_if_initiator_s fuse_ctrl_core_axi_write_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_if_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_write_if_driver and fuse_ctrl_core_axi_write_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_if_responder_s fuse_ctrl_core_axi_write_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_if_responder_struct. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_if_macros.svh + `fuse_ctrl_core_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awaddr:0x%x core_awvalid:0x%x core_awburst:0x%x core_awsize:0x%x core_awlen:0x%x core_awuser:0x%x core_awid:0x%x core_awlock:0x%x core_wdata:0x%x core_wstrb:0x%x core_wvalid:0x%x core_wlast:0x%x core_bready:0x%x ",core_awaddr,core_awvalid,core_awburst,core_awsize,core_awlen,core_awuser,core_awid,core_awlock,core_wdata,core_wstrb,core_wvalid,core_wlast,core_bready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_wdata == RHS.core_wdata) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awaddr = RHS.core_awaddr; + this.core_awvalid = RHS.core_awvalid; + this.core_awburst = RHS.core_awburst; + this.core_awsize = RHS.core_awsize; + this.core_awlen = RHS.core_awlen; + this.core_awuser = RHS.core_awuser; + this.core_awid = RHS.core_awid; + this.core_awlock = RHS.core_awlock; + this.core_wdata = RHS.core_wdata; + this.core_wstrb = RHS.core_wstrb; + this.core_wvalid = RHS.core_wvalid; + this.core_wlast = RHS.core_wlast; + this.core_bready = RHS.core_bready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_write_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awaddr,"core_awaddr"); + $add_attribute(transaction_view_h,core_awvalid,"core_awvalid"); + $add_attribute(transaction_view_h,core_awburst,"core_awburst"); + $add_attribute(transaction_view_h,core_awsize,"core_awsize"); + $add_attribute(transaction_view_h,core_awlen,"core_awlen"); + $add_attribute(transaction_view_h,core_awuser,"core_awuser"); + $add_attribute(transaction_view_h,core_awid,"core_awid"); + $add_attribute(transaction_view_h,core_awlock,"core_awlock"); + $add_attribute(transaction_view_h,core_wdata,"core_wdata"); + $add_attribute(transaction_view_h,core_wstrb,"core_wstrb"); + $add_attribute(transaction_view_h,core_wvalid,"core_wvalid"); + $add_attribute(transaction_view_h,core_wlast,"core_wlast"); + $add_attribute(transaction_view_h,core_bready,"core_bready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction_coverage.svh new file mode 100644 index 000000000..3f905316d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_transaction_coverage.svh @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_write_if transaction information using +// a covergroup named fuse_ctrl_core_axi_write_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_write_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awaddr: coverpoint coverage_trans.core_awaddr; + core_awvalid: coverpoint coverage_trans.core_awvalid; + core_awburst: coverpoint coverage_trans.core_awburst; + core_awsize: coverpoint coverage_trans.core_awsize; + core_awlen: coverpoint coverage_trans.core_awlen; + core_awuser: coverpoint coverage_trans.core_awuser; + core_awid: coverpoint coverage_trans.core_awid; + core_awlock: coverpoint coverage_trans.core_awlock; + core_wdata: coverpoint coverage_trans.core_wdata; + core_wstrb: coverpoint coverage_trans.core_wstrb; + core_wvalid: coverpoint coverage_trans.core_wvalid; + core_wlast: coverpoint coverage_trans.core_wlast; + core_bready: coverpoint coverage_trans.core_bready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_write_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_write_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_write_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/src/fuse_ctrl_core_axi_write_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/yaml/fuse_ctrl_core_axi_write_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/yaml/fuse_ctrl_core_axi_write_if_interface.yaml new file mode 100644 index 000000000..242a9b639 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_if_pkg/yaml/fuse_ctrl_core_axi_write_if_interface.yaml @@ -0,0 +1,161 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_write_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: awaddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: awburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: awsize + reset_value: '''bz' + width: '3' + - dir: output + name: awlen + reset_value: '''bz' + width: '8' + - dir: output + name: awuser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awid + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awlock + reset_value: '''bz' + width: '1' + - dir: output + name: awvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wdata + reset_value: '''bz' + width: '[''DW'']' + - dir: output + name: wstrb + reset_value: '''bz' + width: '[''DW/8'']' + - dir: output + name: wvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wlast + reset_value: '''bz' + width: '1' + - dir: output + name: bready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: core_awaddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awuser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wstrb + type: logic [DW/8 - 1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_bready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.project new file mode 100644 index 000000000..f33bf59ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_write_in_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.svproject new file mode 100644 index 000000000..3d3a99047 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/Makefile new file mode 100644 index 000000000..f507d2ab2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_write_in_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_write_in_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hvl.f + +fuse_ctrl_core_axi_write_in_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hdl.f + +fuse_ctrl_core_axi_write_in_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_write_in_if_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_write_in_if_pkg +COMP_fuse_ctrl_core_axi_write_in_if_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_write_in_if_pkg +COMP_fuse_ctrl_core_axi_write_in_if_PKG_TGT = $(COMP_fuse_ctrl_core_axi_write_in_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_write_in_if_pkg: $(COMP_fuse_ctrl_core_axi_write_in_if_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_write_in_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_write_in_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_write_in_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_in_if_pkg += -I$(fuse_ctrl_core_axi_write_in_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_in_if_pkg += $(fuse_ctrl_core_axi_write_in_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_write_in_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_write_in_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_write_in_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_write_in_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/compile.do new file mode 100644 index 000000000..b42d44e51 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_write_in_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if.compile new file mode 100644 index 000000000..a65a64cbf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_write_in_if_hvl.compile + - fuse_ctrl_core_axi_write_in_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_bfm.vinfo new file mode 100644 index 000000000..cd1ff68b7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_write_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_write_in_if_if.sv +src/fuse_ctrl_core_axi_write_in_if_driver_bfm.sv +src/fuse_ctrl_core_axi_write_in_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_common.compile new file mode 100644 index 000000000..be72a0784 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hdl.f new file mode 100644 index 000000000..495338020 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hvl.f new file mode 100644 index 000000000..6bf770355 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_xrtl.f new file mode 100644 index 000000000..fef44745f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hdl.compile new file mode 100644 index 000000000..8a805dd85 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_write_in_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_write_in_if_if.sv + - src/fuse_ctrl_core_axi_write_in_if_monitor_bfm.sv + - src/fuse_ctrl_core_axi_write_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hvl.compile new file mode 100644 index 000000000..55e60dcf3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_write_in_if_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_write_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.sv new file mode 100644 index 000000000..6a3db4ff3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_in_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_write_in_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_write_in_if_macros.svh" + + export fuse_ctrl_core_axi_write_in_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_write_in_if_typedefs.svh" + `include "src/fuse_ctrl_core_axi_write_in_if_transaction.svh" + + `include "src/fuse_ctrl_core_axi_write_in_if_configuration.svh" + `include "src/fuse_ctrl_core_axi_write_in_if_driver.svh" + `include "src/fuse_ctrl_core_axi_write_in_if_monitor.svh" + + `include "src/fuse_ctrl_core_axi_write_in_if_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_write_in_if_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_write_in_if_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_write_in_if_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_write_in_if2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_write_in_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.vinfo new file mode 100644 index 000000000..d62098632 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_write_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_write_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv new file mode 100644 index 000000000..0f242e32a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_in_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_write_in_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_write_in_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.vinfo new file mode 100644 index 000000000..b94d858eb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_write_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_sve.F new file mode 100644 index 000000000..0586654a2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/fuse_ctrl_core_axi_write_in_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if2reg_adapter.svh new file mode 100644 index 000000000..f64280b7a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_write_in_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_write_in_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_write_in_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_agent.svh new file mode 100644 index 000000000..42ed311c4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_write_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_write_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_write_in_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_configuration.svh new file mode 100644 index 000000000..d1e8058cb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_write_in_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_write_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_write_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_write_in_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_write_in_if_configuration_s fuse_ctrl_core_axi_write_in_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_write_in_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_if_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_write_in_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_write_in_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_write_in_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_write_in_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_in_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_write_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver.svh new file mode 100644 index 000000000..1dddeaea6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_write_in_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_write_in_if_driver and fuse_ctrl_core_axi_write_in_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_write_in_if_driver_bfm. +`fuse_ctrl_core_axi_write_in_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_in_if_initiator_s fuse_ctrl_core_axi_write_in_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_write_in_if_driver and fuse_ctrl_core_axi_write_in_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_write_in_if_driver_bfm. +`fuse_ctrl_core_axi_write_in_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_in_if_responder_s fuse_ctrl_core_axi_write_in_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_write_in_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_write_in_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_write_in_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_write_in_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver_bfm.sv new file mode 100644 index 000000000..d54fd8571 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_driver_bfm.sv @@ -0,0 +1,429 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_write_in_if signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_write_in_if driver through a virtual interface +// handle in the fuse_ctrl_core_axi_write_in_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_write_in_if_if. +// +// Input signals from the fuse_ctrl_core_axi_write_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_write_in_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_in_if_macros.svh" + +interface fuse_ctrl_core_axi_write_in_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_write_in_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_in_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] awaddr_i; + reg [AW-1:0] awaddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] awburst_o = 'bz; + tri [2:0] awsize_i; + reg [2:0] awsize_o = 'bz; + tri [7:0] awlen_i; + reg [7:0] awlen_o = 'bz; + tri [UW-1:0] awuser_i; + reg [UW-1:0] awuser_o = 'bz; + tri [UW-1:0] awid_i; + reg [UW-1:0] awid_o = 'bz; + tri awlock_i; + reg awlock_o = 'bz; + tri awvalid_i; + reg awvalid_o = 'bz; + tri [DW-1:0] wdata_i; + reg [DW-1:0] wdata_o = 'bz; + tri [DW/8-1:0] wstrb_i; + reg [DW/8-1:0] wstrb_o = 'bz; + tri wvalid_i; + reg wvalid_o = 'bz; + tri wlast_i; + reg wlast_o = 'bz; + tri bready_i; + reg bready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.awaddr = (initiator_responder == INITIATOR) ? awaddr_o : 'bz; + assign awaddr_i = bus.awaddr; + assign bus.awburst = (initiator_responder == INITIATOR) ? awburst_o : 'bz; + assign awburst_i = bus.awburst; + assign bus.awsize = (initiator_responder == INITIATOR) ? awsize_o : 'bz; + assign awsize_i = bus.awsize; + assign bus.awlen = (initiator_responder == INITIATOR) ? awlen_o : 'bz; + assign awlen_i = bus.awlen; + assign bus.awuser = (initiator_responder == INITIATOR) ? awuser_o : 'bz; + assign awuser_i = bus.awuser; + assign bus.awid = (initiator_responder == INITIATOR) ? awid_o : 'bz; + assign awid_i = bus.awid; + assign bus.awlock = (initiator_responder == INITIATOR) ? awlock_o : 'bz; + assign awlock_i = bus.awlock; + assign bus.awvalid = (initiator_responder == INITIATOR) ? awvalid_o : 'bz; + assign awvalid_i = bus.awvalid; + assign bus.wdata = (initiator_responder == INITIATOR) ? wdata_o : 'bz; + assign wdata_i = bus.wdata; + assign bus.wstrb = (initiator_responder == INITIATOR) ? wstrb_o : 'bz; + assign wstrb_i = bus.wstrb; + assign bus.wvalid = (initiator_responder == INITIATOR) ? wvalid_o : 'bz; + assign wvalid_i = bus.wvalid; + assign bus.wlast = (initiator_responder == INITIATOR) ? wlast_o : 'bz; + assign wlast_i = bus.wlast; + assign bus.bready = (initiator_responder == INITIATOR) ? bready_o : 'bz; + assign bready_i = bus.bready; + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_write_in_if_pkg::fuse_ctrl_core_axi_write_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_write_in_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_write_in_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_write_in_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_in_if_driver and fuse_ctrl_core_axi_write_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_in_if_driver_bfm. + `fuse_ctrl_core_axi_write_in_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_in_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_write_in_if_driver and fuse_ctrl_core_axi_write_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_in_if_driver_bfm. + `fuse_ctrl_core_axi_write_in_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_in_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + awaddr_o <= 'bz; + awburst_o <= 'bz; + awsize_o <= 'bz; + awlen_o <= 'bz; + awuser_o <= 'bz; + awid_o <= 'bz; + awlock_o <= 'bz; + awvalid_o <= 'bz; + wdata_o <= 'bz; + wstrb_o <= 'bz; + wvalid_o <= 'bz; + wlast_o <= 'bz; + bready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_write_in_if_configuration_s fuse_ctrl_core_axi_write_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_write_in_if_initiator_s fuse_ctrl_core_axi_write_in_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_write_in_if_responder_s fuse_ctrl_core_axi_write_in_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_write_in_if_initiator_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Members within the fuse_ctrl_core_axi_write_in_if_responder_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + initiator_struct = fuse_ctrl_core_axi_write_in_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // awaddr_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [AW-1:0] + // awburst_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // awsize_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [2:0] + // awlen_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [7:0] + // awuser_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [UW-1:0] + // awid_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [UW-1:0] + // awlock_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // + // awvalid_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // + // wdata_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [DW-1:0] + // wstrb_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // [DW/8-1:0] + // wvalid_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // + // wlast_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // + // bready_o <= fuse_ctrl_core_axi_write_in_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_write_in_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_write_in_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_write_in_if_initiator_s fuse_ctrl_core_axi_write_in_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_write_in_if_responder_s fuse_ctrl_core_axi_write_in_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_write_in_if_initiator_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Variables within the fuse_ctrl_core_axi_write_in_if_responder_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awlock_i; // + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = awvalid_i; // + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = wvalid_i; // + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = wlast_i; // + // fuse_ctrl_core_axi_write_in_if_responder_struct.xyz = bready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_write_in_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_write_in_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_if.sv new file mode 100644 index 000000000..f8447e714 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_if.sv @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_write_in_if interface signals. +// It is instantiated once per fuse_ctrl_core_axi_write_in_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_write_in_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_write_in_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awaddr), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awburst), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awsize), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awlen), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awuser), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awlock), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.awvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.wdata), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.wstrb), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.wvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.wlast), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_if_bus.bready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_in_if_pkg_hdl::*; + +interface fuse_ctrl_core_axi_write_in_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] awaddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst, + inout tri [2:0] awsize, + inout tri [7:0] awlen, + inout tri [UW-1:0] awuser, + inout tri [UW-1:0] awid, + inout tri awlock, + inout tri awvalid, + inout tri [DW-1:0] wdata, + inout tri [DW/8-1:0] wstrb, + inout tri wvalid, + inout tri wlast, + inout tri bready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output awaddr, + output awburst, + output awsize, + output awlen, + output awuser, + output awid, + output awlock, + output awvalid, + output wdata, + output wstrb, + output wvalid, + output wlast, + output bready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_macros.svh new file mode 100644 index 000000000..8f3e6b640 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_macros.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_write_in_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_write_in_if_configuration class. +// + `define fuse_ctrl_core_axi_write_in_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_write_in_if_configuration_s; + + `define fuse_ctrl_core_axi_write_in_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_if_configuration_s to_struct();\ + fuse_ctrl_core_axi_write_in_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_write_in_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_write_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_write_in_if_configuration_s fuse_ctrl_core_axi_write_in_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_write_in_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_write_in_if_transaction class. +// + `define fuse_ctrl_core_axi_write_in_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_in_if_monitor_s; + + `define fuse_ctrl_core_axi_write_in_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_if_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_write_in_if_monitor_struct = \ + { \ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_in_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_write_in_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_write_in_if_monitor_s fuse_ctrl_core_axi_write_in_if_monitor_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_in_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_write_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_in_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_in_if_initiator_s; + + `define fuse_ctrl_core_axi_write_in_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_if_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_write_in_if_initiator_struct = \ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_in_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_in_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_write_in_if_initiator_s fuse_ctrl_core_axi_write_in_if_initiator_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_in_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_write_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_in_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_in_if_responder_s; + + `define fuse_ctrl_core_axi_write_in_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_if_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_write_in_if_responder_struct = \ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_in_if_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_in_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_write_in_if_responder_s fuse_ctrl_core_axi_write_in_if_responder_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_in_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor.svh new file mode 100644 index 000000000..7689925cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_write_in_if transactions observed by the +// fuse_ctrl_core_axi_write_in_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_write_in_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_write_in_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_write_in_if_monitor_s fuse_ctrl_core_axi_write_in_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_write_in_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor_bfm.sv new file mode 100644 index 000000000..0b3ac9795 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_monitor_bfm.sv @@ -0,0 +1,248 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_write_in_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_write_in_if monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_write_in_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_write_in_if_if. +// +// Input signals from the fuse_ctrl_core_axi_write_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_write_in_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_in_if_macros.svh" + + +interface fuse_ctrl_core_axi_write_in_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_write_in_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_in_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_write_in_if_MONITOR_STRUCT + fuse_ctrl_core_axi_write_in_if_monitor_s fuse_ctrl_core_axi_write_in_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_write_in_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] awaddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + tri [2:0] awsize_i; + tri [7:0] awlen_i; + tri [UW-1:0] awuser_i; + tri [UW-1:0] awid_i; + tri awlock_i; + tri awvalid_i; + tri [DW-1:0] wdata_i; + tri [DW/8-1:0] wstrb_i; + tri wvalid_i; + tri wlast_i; + tri bready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awaddr_i = bus.awaddr; + assign awburst_i = bus.awburst; + assign awsize_i = bus.awsize; + assign awlen_i = bus.awlen; + assign awuser_i = bus.awuser; + assign awid_i = bus.awid; + assign awlock_i = bus.awlock; + assign awvalid_i = bus.awvalid; + assign wdata_i = bus.wdata; + assign wstrb_i = bus.wstrb; + assign wvalid_i = bus.wvalid; + assign wlast_i = bus.wlast; + assign bready_i = bus.bready; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_write_in_if_pkg::fuse_ctrl_core_axi_write_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_write_in_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_write_in_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_write_in_if_configuration_s fuse_ctrl_core_axi_write_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_write_in_if_monitor_s fuse_ctrl_core_axi_write_in_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awaddr + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awvalid + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awburst + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awsize + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awlen + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awuser + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awid + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_awlock + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_wdata + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_wstrb + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_wvalid + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_wlast + // // fuse_ctrl_core_axi_write_in_if_monitor_struct.core_bready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awlock_i; // + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = awvalid_i; // + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = wvalid_i; // + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = wlast_i; // + // fuse_ctrl_core_axi_write_in_if_monitor_struct.xyz = bready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_random_sequence.svh new file mode 100644 index 000000000..1be509e5a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_write_in_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_write_in_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_write_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_write_in_if_random_sequence::body()-fuse_ctrl_core_axi_write_in_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_write_in_if_driver_bfm via the sequencer and fuse_ctrl_core_axi_write_in_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_write_in_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_responder_sequence.svh new file mode 100644 index 000000000..4a94ad4e8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_write_in_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_write_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_sequence_base.svh new file mode 100644 index 000000000..ecbf6b8a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_in_if_transaction_req_t; + fuse_ctrl_core_axi_write_in_if_transaction_req_t req; + typedef fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_in_if_transaction_rsp_t; + fuse_ctrl_core_axi_write_in_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_write_in_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_write_in_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction.svh new file mode 100644 index 000000000..efec989b8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction.svh @@ -0,0 +1,256 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_write_in_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] core_awaddr ; + logic core_awvalid ; + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + logic [2:0] core_awsize ; + logic [7:0] core_awlen ; + logic [UW-1:0] core_awuser ; + logic [IW-1:0] core_awid ; + logic core_awlock ; + logic [DW-1:0] core_wdata ; + logic [DW/8 - 1:0] core_wstrb ; + logic core_wvalid ; + logic core_wlast ; + logic core_bready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_write_in_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_write_in_if_monitor and fuse_ctrl_core_axi_write_in_if_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_MONITOR_STRUCT + fuse_ctrl_core_axi_write_in_if_monitor_s fuse_ctrl_core_axi_write_in_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_in_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_if_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_in_if_driver and fuse_ctrl_core_axi_write_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_in_if_initiator_s fuse_ctrl_core_axi_write_in_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_in_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_if_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_write_in_if_driver and fuse_ctrl_core_axi_write_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_in_if_responder_s fuse_ctrl_core_axi_write_in_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_in_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_if_responder_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_if_macros.svh + `fuse_ctrl_core_axi_write_in_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awaddr:0x%x core_awvalid:0x%x core_awburst:0x%x core_awsize:0x%x core_awlen:0x%x core_awuser:0x%x core_awid:0x%x core_awlock:0x%x core_wdata:0x%x core_wstrb:0x%x core_wvalid:0x%x core_wlast:0x%x core_bready:0x%x ",core_awaddr,core_awvalid,core_awburst,core_awsize,core_awlen,core_awuser,core_awid,core_awlock,core_wdata,core_wstrb,core_wvalid,core_wlast,core_bready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_wdata == RHS.core_wdata) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awaddr = RHS.core_awaddr; + this.core_awvalid = RHS.core_awvalid; + this.core_awburst = RHS.core_awburst; + this.core_awsize = RHS.core_awsize; + this.core_awlen = RHS.core_awlen; + this.core_awuser = RHS.core_awuser; + this.core_awid = RHS.core_awid; + this.core_awlock = RHS.core_awlock; + this.core_wdata = RHS.core_wdata; + this.core_wstrb = RHS.core_wstrb; + this.core_wvalid = RHS.core_wvalid; + this.core_wlast = RHS.core_wlast; + this.core_bready = RHS.core_bready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_write_in_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awaddr,"core_awaddr"); + $add_attribute(transaction_view_h,core_awvalid,"core_awvalid"); + $add_attribute(transaction_view_h,core_awburst,"core_awburst"); + $add_attribute(transaction_view_h,core_awsize,"core_awsize"); + $add_attribute(transaction_view_h,core_awlen,"core_awlen"); + $add_attribute(transaction_view_h,core_awuser,"core_awuser"); + $add_attribute(transaction_view_h,core_awid,"core_awid"); + $add_attribute(transaction_view_h,core_awlock,"core_awlock"); + $add_attribute(transaction_view_h,core_wdata,"core_wdata"); + $add_attribute(transaction_view_h,core_wstrb,"core_wstrb"); + $add_attribute(transaction_view_h,core_wvalid,"core_wvalid"); + $add_attribute(transaction_view_h,core_wlast,"core_wlast"); + $add_attribute(transaction_view_h,core_bready,"core_bready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction_coverage.svh new file mode 100644 index 000000000..fa56703da --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_transaction_coverage.svh @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_write_in_if transaction information using +// a covergroup named fuse_ctrl_core_axi_write_in_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_write_in_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awaddr: coverpoint coverage_trans.core_awaddr; + core_awvalid: coverpoint coverage_trans.core_awvalid; + core_awburst: coverpoint coverage_trans.core_awburst; + core_awsize: coverpoint coverage_trans.core_awsize; + core_awlen: coverpoint coverage_trans.core_awlen; + core_awuser: coverpoint coverage_trans.core_awuser; + core_awid: coverpoint coverage_trans.core_awid; + core_awlock: coverpoint coverage_trans.core_awlock; + core_wdata: coverpoint coverage_trans.core_wdata; + core_wstrb: coverpoint coverage_trans.core_wstrb; + core_wvalid: coverpoint coverage_trans.core_wvalid; + core_wlast: coverpoint coverage_trans.core_wlast; + core_bready: coverpoint coverage_trans.core_bready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_write_in_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_write_in_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_in_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_write_in_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/src/fuse_ctrl_core_axi_write_in_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/yaml/fuse_ctrl_core_axi_write_in_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/yaml/fuse_ctrl_core_axi_write_in_if_interface.yaml new file mode 100644 index 000000000..a1fdac635 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_if_pkg/yaml/fuse_ctrl_core_axi_write_in_if_interface.yaml @@ -0,0 +1,161 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_write_in_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: awaddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: awburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: awsize + reset_value: '''bz' + width: '3' + - dir: output + name: awlen + reset_value: '''bz' + width: '8' + - dir: output + name: awuser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awid + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awlock + reset_value: '''bz' + width: '1' + - dir: output + name: awvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wdata + reset_value: '''bz' + width: '[''DW'']' + - dir: output + name: wstrb + reset_value: '''bz' + width: '[''DW/8'']' + - dir: output + name: wvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wlast + reset_value: '''bz' + width: '1' + - dir: output + name: bready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: core_awaddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awuser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wstrb + type: logic [DW/8 - 1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_bready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.project new file mode 100644 index 000000000..b26e81c0e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_write_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.svproject new file mode 100644 index 000000000..be11cb63e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/Makefile new file mode 100644 index 000000000..b9ea6af97 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_write_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_write_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hvl.f + +fuse_ctrl_core_axi_write_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hdl.f + +fuse_ctrl_core_axi_write_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_write_in_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_write_in_pkg +COMP_fuse_ctrl_core_axi_write_in_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_write_in_pkg +COMP_fuse_ctrl_core_axi_write_in_PKG_TGT = $(COMP_fuse_ctrl_core_axi_write_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_write_in_pkg: $(COMP_fuse_ctrl_core_axi_write_in_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_write_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_write_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_write_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_write_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_write_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_in_pkg += -I$(fuse_ctrl_core_axi_write_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_in_pkg += $(fuse_ctrl_core_axi_write_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_write_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_write_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_write_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_write_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/compile.do new file mode 100644 index 000000000..a2f727a47 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_write_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in.compile new file mode 100644 index 000000000..328de1745 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_write_in_hvl.compile + - fuse_ctrl_core_axi_write_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_bfm.vinfo new file mode 100644 index 000000000..8580294a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_write_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_write_in_if.sv +src/fuse_ctrl_core_axi_write_in_driver_bfm.sv +src/fuse_ctrl_core_axi_write_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_common.compile new file mode 100644 index 000000000..ebcb42c3c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_write_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hdl.f new file mode 100644 index 000000000..dcea9f3fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hvl.f new file mode 100644 index 000000000..0aa6cf48f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_xrtl.f new file mode 100644 index 000000000..9729a9fda --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hdl.compile new file mode 100644 index 000000000..b28a2bd69 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_write_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_write_in_if.sv + - src/fuse_ctrl_core_axi_write_in_monitor_bfm.sv + - src/fuse_ctrl_core_axi_write_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hvl.compile new file mode 100644 index 000000000..7801ce4bb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_write_in_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_write_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.sv new file mode 100644 index 000000000..af903832a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_write_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_write_in_macros.svh" + + export fuse_ctrl_core_axi_write_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_write_in_typedefs.svh" + `include "src/fuse_ctrl_core_axi_write_in_transaction.svh" + + `include "src/fuse_ctrl_core_axi_write_in_configuration.svh" + `include "src/fuse_ctrl_core_axi_write_in_driver.svh" + `include "src/fuse_ctrl_core_axi_write_in_monitor.svh" + + `include "src/fuse_ctrl_core_axi_write_in_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_write_in_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_write_in_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_write_in_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_write_in2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_write_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.vinfo new file mode 100644 index 000000000..07d2c9ac8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_write_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_write_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.sv new file mode 100644 index 000000000..48ee66303 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_write_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_write_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.vinfo new file mode 100644 index 000000000..5c56ef576 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_write_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_sve.F new file mode 100644 index 000000000..24bdc9fde --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_in_pkg/fuse_ctrl_core_axi_write_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in2reg_adapter.svh new file mode 100644 index 000000000..0265f70a4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_write_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_write_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_write_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_agent.svh new file mode 100644 index 000000000..2bd552ac5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_write_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_write_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_write_in_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_configuration.svh new file mode 100644 index 000000000..374ebfbd7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_write_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_write_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_write_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_write_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_write_in_configuration_s fuse_ctrl_core_axi_write_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_write_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_write_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_write_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_write_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_write_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_write_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver.svh new file mode 100644 index 000000000..2454403fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_write_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_write_in_driver and fuse_ctrl_core_axi_write_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_write_in_driver_bfm. +`fuse_ctrl_core_axi_write_in_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_in_initiator_s fuse_ctrl_core_axi_write_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_write_in_driver and fuse_ctrl_core_axi_write_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_write_in_driver_bfm. +`fuse_ctrl_core_axi_write_in_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_in_responder_s fuse_ctrl_core_axi_write_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_write_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_write_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_write_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_write_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver_bfm.sv new file mode 100644 index 000000000..934c0f86b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_driver_bfm.sv @@ -0,0 +1,429 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_write_in signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_write_in driver through a virtual interface +// handle in the fuse_ctrl_core_axi_write_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_write_in_if. +// +// Input signals from the fuse_ctrl_core_axi_write_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_write_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_in_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_in_macros.svh" + +interface fuse_ctrl_core_axi_write_in_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_write_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] awaddr_i; + reg [AW-1:0] awaddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] awburst_o = 'bz; + tri [2:0] awsize_i; + reg [2:0] awsize_o = 'bz; + tri [7:0] awlen_i; + reg [7:0] awlen_o = 'bz; + tri [UW-1:0] awuser_i; + reg [UW-1:0] awuser_o = 'bz; + tri [UW-1:0] awid_i; + reg [UW-1:0] awid_o = 'bz; + tri awlock_i; + reg awlock_o = 'bz; + tri awvalid_i; + reg awvalid_o = 'bz; + tri [DW-1:0] wdata_i; + reg [DW-1:0] wdata_o = 'bz; + tri [DW/8-1:0] wstrb_i; + reg [DW/8-1:0] wstrb_o = 'bz; + tri wvalid_i; + reg wvalid_o = 'bz; + tri wlast_i; + reg wlast_o = 'bz; + tri bready_i; + reg bready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.awaddr = (initiator_responder == INITIATOR) ? awaddr_o : 'bz; + assign awaddr_i = bus.awaddr; + assign bus.awburst = (initiator_responder == INITIATOR) ? awburst_o : 'bz; + assign awburst_i = bus.awburst; + assign bus.awsize = (initiator_responder == INITIATOR) ? awsize_o : 'bz; + assign awsize_i = bus.awsize; + assign bus.awlen = (initiator_responder == INITIATOR) ? awlen_o : 'bz; + assign awlen_i = bus.awlen; + assign bus.awuser = (initiator_responder == INITIATOR) ? awuser_o : 'bz; + assign awuser_i = bus.awuser; + assign bus.awid = (initiator_responder == INITIATOR) ? awid_o : 'bz; + assign awid_i = bus.awid; + assign bus.awlock = (initiator_responder == INITIATOR) ? awlock_o : 'bz; + assign awlock_i = bus.awlock; + assign bus.awvalid = (initiator_responder == INITIATOR) ? awvalid_o : 'bz; + assign awvalid_i = bus.awvalid; + assign bus.wdata = (initiator_responder == INITIATOR) ? wdata_o : 'bz; + assign wdata_i = bus.wdata; + assign bus.wstrb = (initiator_responder == INITIATOR) ? wstrb_o : 'bz; + assign wstrb_i = bus.wstrb; + assign bus.wvalid = (initiator_responder == INITIATOR) ? wvalid_o : 'bz; + assign wvalid_i = bus.wvalid; + assign bus.wlast = (initiator_responder == INITIATOR) ? wlast_o : 'bz; + assign wlast_i = bus.wlast; + assign bus.bready = (initiator_responder == INITIATOR) ? bready_o : 'bz; + assign bready_i = bus.bready; + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_write_in_pkg::fuse_ctrl_core_axi_write_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_write_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_write_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_write_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_in_driver and fuse_ctrl_core_axi_write_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_in_driver_bfm. + `fuse_ctrl_core_axi_write_in_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_write_in_driver and fuse_ctrl_core_axi_write_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_in_driver_bfm. + `fuse_ctrl_core_axi_write_in_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + awaddr_o <= 'bz; + awburst_o <= 'bz; + awsize_o <= 'bz; + awlen_o <= 'bz; + awuser_o <= 'bz; + awid_o <= 'bz; + awlock_o <= 'bz; + awvalid_o <= 'bz; + wdata_o <= 'bz; + wstrb_o <= 'bz; + wvalid_o <= 'bz; + wlast_o <= 'bz; + bready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_write_in_configuration_s fuse_ctrl_core_axi_write_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_write_in_initiator_s fuse_ctrl_core_axi_write_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_write_in_responder_s fuse_ctrl_core_axi_write_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_write_in_initiator_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Members within the fuse_ctrl_core_axi_write_in_responder_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + initiator_struct = fuse_ctrl_core_axi_write_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // awaddr_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [AW-1:0] + // awburst_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // awsize_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [2:0] + // awlen_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [7:0] + // awuser_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [UW-1:0] + // awid_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [UW-1:0] + // awlock_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // + // awvalid_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // + // wdata_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [DW-1:0] + // wstrb_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // [DW/8-1:0] + // wvalid_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // + // wlast_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // + // bready_o <= fuse_ctrl_core_axi_write_in_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_write_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_write_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_write_in_initiator_s fuse_ctrl_core_axi_write_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_write_in_responder_s fuse_ctrl_core_axi_write_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_write_in_initiator_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Variables within the fuse_ctrl_core_axi_write_in_responder_struct: + // logic [AW-1:0] core_awaddr ; + // logic core_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + // logic [2:0] core_awsize ; + // logic [7:0] core_awlen ; + // logic [UW-1:0] core_awuser ; + // logic [IW-1:0] core_awid ; + // logic core_awlock ; + // logic [DW-1:0] core_wdata ; + // logic [DW/8 - 1:0] core_wstrb ; + // logic core_wvalid ; + // logic core_wlast ; + // logic core_bready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awlock_i; // + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = awvalid_i; // + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = wvalid_i; // + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = wlast_i; // + // fuse_ctrl_core_axi_write_in_responder_struct.xyz = bready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_write_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_write_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_if.sv new file mode 100644 index 000000000..5208bddc6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_if.sv @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_write_in interface signals. +// It is instantiated once per fuse_ctrl_core_axi_write_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_write_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_write_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awaddr), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awburst), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awsize), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awlen), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awuser), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awlock), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.awvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.wdata), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.wstrb), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.wvalid), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.wlast), // Agent output +// .dut_signal_port(fuse_ctrl_core_axi_write_in_bus.bready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_in_pkg_hdl::*; + +interface fuse_ctrl_core_axi_write_in_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] awaddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst, + inout tri [2:0] awsize, + inout tri [7:0] awlen, + inout tri [UW-1:0] awuser, + inout tri [UW-1:0] awid, + inout tri awlock, + inout tri awvalid, + inout tri [DW-1:0] wdata, + inout tri [DW/8-1:0] wstrb, + inout tri wvalid, + inout tri wlast, + inout tri bready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output awaddr, + output awburst, + output awsize, + output awlen, + output awuser, + output awid, + output awlock, + output awvalid, + output wdata, + output wstrb, + output wvalid, + output wlast, + output bready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_macros.svh new file mode 100644 index 000000000..c925c1523 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_macros.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_write_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_write_in_configuration class. +// + `define fuse_ctrl_core_axi_write_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_write_in_configuration_s; + + `define fuse_ctrl_core_axi_write_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_configuration_s to_struct();\ + fuse_ctrl_core_axi_write_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_write_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_write_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_write_in_configuration_s fuse_ctrl_core_axi_write_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_write_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_write_in_transaction class. +// + `define fuse_ctrl_core_axi_write_in_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_in_monitor_s; + + `define fuse_ctrl_core_axi_write_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_write_in_monitor_struct = \ + { \ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_write_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_write_in_monitor_s fuse_ctrl_core_axi_write_in_monitor_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_write_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_in_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_in_initiator_s; + + `define fuse_ctrl_core_axi_write_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_write_in_initiator_struct = \ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_write_in_initiator_s fuse_ctrl_core_axi_write_in_initiator_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_write_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_in_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] core_awaddr ; \ + logic core_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; \ + logic [2:0] core_awsize ; \ + logic [7:0] core_awlen ; \ + logic [UW-1:0] core_awuser ; \ + logic [IW-1:0] core_awid ; \ + logic core_awlock ; \ + logic [DW-1:0] core_wdata ; \ + logic [DW/8 - 1:0] core_wstrb ; \ + logic core_wvalid ; \ + logic core_wlast ; \ + logic core_bready ; \ + } fuse_ctrl_core_axi_write_in_responder_s; + + `define fuse_ctrl_core_axi_write_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_in_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_write_in_responder_struct = \ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + };\ + return ( fuse_ctrl_core_axi_write_in_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_write_in_responder_s fuse_ctrl_core_axi_write_in_responder_struct);\ + {\ + this.core_awaddr , \ + this.core_awvalid , \ + this.core_awburst , \ + this.core_awsize , \ + this.core_awlen , \ + this.core_awuser , \ + this.core_awid , \ + this.core_awlock , \ + this.core_wdata , \ + this.core_wstrb , \ + this.core_wvalid , \ + this.core_wlast , \ + this.core_bready \ + } = fuse_ctrl_core_axi_write_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor.svh new file mode 100644 index 000000000..b17587874 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_write_in transactions observed by the +// fuse_ctrl_core_axi_write_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_write_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_write_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_write_in_monitor_s fuse_ctrl_core_axi_write_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_write_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor_bfm.sv new file mode 100644 index 000000000..f25132158 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_monitor_bfm.sv @@ -0,0 +1,248 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_write_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_write_in monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_write_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_write_in_if. +// +// Input signals from the fuse_ctrl_core_axi_write_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_write_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_in_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_in_macros.svh" + + +interface fuse_ctrl_core_axi_write_in_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_write_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_write_in_MONITOR_STRUCT + fuse_ctrl_core_axi_write_in_monitor_s fuse_ctrl_core_axi_write_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_write_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] awaddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + tri [2:0] awsize_i; + tri [7:0] awlen_i; + tri [UW-1:0] awuser_i; + tri [UW-1:0] awid_i; + tri awlock_i; + tri awvalid_i; + tri [DW-1:0] wdata_i; + tri [DW/8-1:0] wstrb_i; + tri wvalid_i; + tri wlast_i; + tri bready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awaddr_i = bus.awaddr; + assign awburst_i = bus.awburst; + assign awsize_i = bus.awsize; + assign awlen_i = bus.awlen; + assign awuser_i = bus.awuser; + assign awid_i = bus.awid; + assign awlock_i = bus.awlock; + assign awvalid_i = bus.awvalid; + assign wdata_i = bus.wdata; + assign wstrb_i = bus.wstrb; + assign wvalid_i = bus.wvalid; + assign wlast_i = bus.wlast; + assign bready_i = bus.bready; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_write_in_pkg::fuse_ctrl_core_axi_write_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_write_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_write_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_write_in_configuration_s fuse_ctrl_core_axi_write_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_write_in_monitor_s fuse_ctrl_core_axi_write_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awaddr + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awvalid + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awburst + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awsize + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awlen + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awuser + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awid + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_awlock + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_wdata + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_wstrb + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_wvalid + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_wlast + // // fuse_ctrl_core_axi_write_in_monitor_struct.core_bready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awlock_i; // + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = awvalid_i; // + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = wvalid_i; // + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = wlast_i; // + // fuse_ctrl_core_axi_write_in_monitor_struct.xyz = bready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_random_sequence.svh new file mode 100644 index 000000000..fd2c3c939 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_write_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_write_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_write_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_write_in_random_sequence::body()-fuse_ctrl_core_axi_write_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_write_in_driver_bfm via the sequencer and fuse_ctrl_core_axi_write_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_write_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_responder_sequence.svh new file mode 100644 index 000000000..6305f4d91 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_write_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_write_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_sequence_base.svh new file mode 100644 index 000000000..69be97677 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_in_transaction_req_t; + fuse_ctrl_core_axi_write_in_transaction_req_t req; + typedef fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_in_transaction_rsp_t; + fuse_ctrl_core_axi_write_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_write_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_write_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction.svh new file mode 100644 index 000000000..08595f6e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction.svh @@ -0,0 +1,256 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_write_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_in_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] core_awaddr ; + logic core_awvalid ; + logic [$bits(axi_pkg::axi_burst_e)] core_awburst ; + logic [2:0] core_awsize ; + logic [7:0] core_awlen ; + logic [UW-1:0] core_awuser ; + logic [IW-1:0] core_awid ; + logic core_awlock ; + logic [DW-1:0] core_wdata ; + logic [DW/8 - 1:0] core_wstrb ; + logic core_wvalid ; + logic core_wlast ; + logic core_bready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_write_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_write_in_monitor and fuse_ctrl_core_axi_write_in_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_MONITOR_STRUCT + fuse_ctrl_core_axi_write_in_monitor_s fuse_ctrl_core_axi_write_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_in_driver and fuse_ctrl_core_axi_write_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_in_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_in_initiator_s fuse_ctrl_core_axi_write_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_write_in_driver and fuse_ctrl_core_axi_write_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_in_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_in_responder_s fuse_ctrl_core_axi_write_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_in_responder_struct. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_in_macros.svh + `fuse_ctrl_core_axi_write_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awaddr:0x%x core_awvalid:0x%x core_awburst:0x%x core_awsize:0x%x core_awlen:0x%x core_awuser:0x%x core_awid:0x%x core_awlock:0x%x core_wdata:0x%x core_wstrb:0x%x core_wvalid:0x%x core_wlast:0x%x core_bready:0x%x ",core_awaddr,core_awvalid,core_awburst,core_awsize,core_awlen,core_awuser,core_awid,core_awlock,core_wdata,core_wstrb,core_wvalid,core_wlast,core_bready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_wdata == RHS.core_wdata) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awaddr = RHS.core_awaddr; + this.core_awvalid = RHS.core_awvalid; + this.core_awburst = RHS.core_awburst; + this.core_awsize = RHS.core_awsize; + this.core_awlen = RHS.core_awlen; + this.core_awuser = RHS.core_awuser; + this.core_awid = RHS.core_awid; + this.core_awlock = RHS.core_awlock; + this.core_wdata = RHS.core_wdata; + this.core_wstrb = RHS.core_wstrb; + this.core_wvalid = RHS.core_wvalid; + this.core_wlast = RHS.core_wlast; + this.core_bready = RHS.core_bready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_write_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awaddr,"core_awaddr"); + $add_attribute(transaction_view_h,core_awvalid,"core_awvalid"); + $add_attribute(transaction_view_h,core_awburst,"core_awburst"); + $add_attribute(transaction_view_h,core_awsize,"core_awsize"); + $add_attribute(transaction_view_h,core_awlen,"core_awlen"); + $add_attribute(transaction_view_h,core_awuser,"core_awuser"); + $add_attribute(transaction_view_h,core_awid,"core_awid"); + $add_attribute(transaction_view_h,core_awlock,"core_awlock"); + $add_attribute(transaction_view_h,core_wdata,"core_wdata"); + $add_attribute(transaction_view_h,core_wstrb,"core_wstrb"); + $add_attribute(transaction_view_h,core_wvalid,"core_wvalid"); + $add_attribute(transaction_view_h,core_wlast,"core_wlast"); + $add_attribute(transaction_view_h,core_bready,"core_bready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction_coverage.svh new file mode 100644 index 000000000..8fd417418 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_transaction_coverage.svh @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_write_in transaction information using +// a covergroup named fuse_ctrl_core_axi_write_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_in_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_in_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_write_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awaddr: coverpoint coverage_trans.core_awaddr; + core_awvalid: coverpoint coverage_trans.core_awvalid; + core_awburst: coverpoint coverage_trans.core_awburst; + core_awsize: coverpoint coverage_trans.core_awsize; + core_awlen: coverpoint coverage_trans.core_awlen; + core_awuser: coverpoint coverage_trans.core_awuser; + core_awid: coverpoint coverage_trans.core_awid; + core_awlock: coverpoint coverage_trans.core_awlock; + core_wdata: coverpoint coverage_trans.core_wdata; + core_wstrb: coverpoint coverage_trans.core_wstrb; + core_wvalid: coverpoint coverage_trans.core_wvalid; + core_wlast: coverpoint coverage_trans.core_wlast; + core_bready: coverpoint coverage_trans.core_bready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_write_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_write_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_write_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/src/fuse_ctrl_core_axi_write_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/yaml/fuse_ctrl_core_axi_write_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/yaml/fuse_ctrl_core_axi_write_in_interface.yaml new file mode 100644 index 000000000..9882e7c50 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_in_pkg/yaml/fuse_ctrl_core_axi_write_in_interface.yaml @@ -0,0 +1,161 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_write_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: awaddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: awburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: awsize + reset_value: '''bz' + width: '3' + - dir: output + name: awlen + reset_value: '''bz' + width: '8' + - dir: output + name: awuser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awid + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awlock + reset_value: '''bz' + width: '1' + - dir: output + name: awvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wdata + reset_value: '''bz' + width: '[''DW'']' + - dir: output + name: wstrb + reset_value: '''bz' + width: '[''DW/8'']' + - dir: output + name: wvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wlast + reset_value: '''bz' + width: '1' + - dir: output + name: bready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: core_awaddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awuser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_awlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wstrb + type: logic [DW/8 - 1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_wlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: core_bready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.project new file mode 100644 index 000000000..f8447cc2e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_write_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.svproject new file mode 100644 index 000000000..4af4ad18e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/Makefile new file mode 100644 index 000000000..9c70bece5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_write_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_write_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hvl.f + +fuse_ctrl_core_axi_write_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hdl.f + +fuse_ctrl_core_axi_write_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_write_out_if_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_write_out_if_pkg +COMP_fuse_ctrl_core_axi_write_out_if_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_write_out_if_pkg +COMP_fuse_ctrl_core_axi_write_out_if_PKG_TGT = $(COMP_fuse_ctrl_core_axi_write_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_write_out_if_pkg: $(COMP_fuse_ctrl_core_axi_write_out_if_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_write_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_write_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_write_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_out_if_pkg += -I$(fuse_ctrl_core_axi_write_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_out_if_pkg += $(fuse_ctrl_core_axi_write_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_write_out_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_write_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_write_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_write_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/compile.do new file mode 100644 index 000000000..a150aebd7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_write_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if.compile new file mode 100644 index 000000000..019584b20 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_write_out_if_hvl.compile + - fuse_ctrl_core_axi_write_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_bfm.vinfo new file mode 100644 index 000000000..3e0319cf4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_write_out_if_if.sv +src/fuse_ctrl_core_axi_write_out_if_driver_bfm.sv +src/fuse_ctrl_core_axi_write_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_common.compile new file mode 100644 index 000000000..7e6930876 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hdl.f new file mode 100644 index 000000000..02ef8e42c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hvl.f new file mode 100644 index 000000000..6c0fbb4c3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_xrtl.f new file mode 100644 index 000000000..d0c02e170 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hdl.compile new file mode 100644 index 000000000..9deb2f5cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_write_out_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_write_out_if_if.sv + - src/fuse_ctrl_core_axi_write_out_if_monitor_bfm.sv + - src/fuse_ctrl_core_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hvl.compile new file mode 100644 index 000000000..eeb57fb37 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_write_out_if_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.sv new file mode 100644 index 000000000..049a79ab9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_write_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_write_out_if_macros.svh" + + export fuse_ctrl_core_axi_write_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_write_out_if_typedefs.svh" + `include "src/fuse_ctrl_core_axi_write_out_if_transaction.svh" + + `include "src/fuse_ctrl_core_axi_write_out_if_configuration.svh" + `include "src/fuse_ctrl_core_axi_write_out_if_driver.svh" + `include "src/fuse_ctrl_core_axi_write_out_if_monitor.svh" + + `include "src/fuse_ctrl_core_axi_write_out_if_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_write_out_if_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_write_out_if_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_write_out_if_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_write_out_if2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_write_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.vinfo new file mode 100644 index 000000000..94eb5cdef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv new file mode 100644 index 000000000..ca03d31ac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_write_out_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_write_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..2ef500d08 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_sve.F new file mode 100644 index 000000000..ad8763dab --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/fuse_ctrl_core_axi_write_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if2reg_adapter.svh new file mode 100644 index 000000000..a62903564 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_write_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_write_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_write_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_agent.svh new file mode 100644 index 000000000..8cbb38cfe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_write_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_configuration.svh new file mode 100644 index 000000000..6310b6980 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_write_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_write_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_write_out_if_configuration_s fuse_ctrl_core_axi_write_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_write_out_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_if_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_write_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_write_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_write_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_write_out_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver.svh new file mode 100644 index 000000000..700a867c2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_write_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_write_out_if_driver and fuse_ctrl_core_axi_write_out_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_write_out_if_driver_bfm. +`fuse_ctrl_core_axi_write_out_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_out_if_initiator_s fuse_ctrl_core_axi_write_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_write_out_if_driver and fuse_ctrl_core_axi_write_out_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_write_out_if_driver_bfm. +`fuse_ctrl_core_axi_write_out_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_out_if_responder_s fuse_ctrl_core_axi_write_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_write_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_write_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_write_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_write_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver_bfm.sv new file mode 100644 index 000000000..546de39a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_write_out_if signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_write_out_if driver through a virtual interface +// handle in the fuse_ctrl_core_axi_write_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_write_out_if_if. +// +// Input signals from the fuse_ctrl_core_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_write_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_out_if_macros.svh" + +interface fuse_ctrl_core_axi_write_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_write_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_write_out_if_pkg::fuse_ctrl_core_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_write_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_write_out_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_write_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_out_if_driver and fuse_ctrl_core_axi_write_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_out_if_driver_bfm. + `fuse_ctrl_core_axi_write_out_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_write_out_if_driver and fuse_ctrl_core_axi_write_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_out_if_driver_bfm. + `fuse_ctrl_core_axi_write_out_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_write_out_if_configuration_s fuse_ctrl_core_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_write_out_if_initiator_s fuse_ctrl_core_axi_write_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_write_out_if_responder_s fuse_ctrl_core_axi_write_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_write_out_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Members within the fuse_ctrl_core_axi_write_out_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + initiator_struct = fuse_ctrl_core_axi_write_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_core_axi_write_out_if_responder_struct.xyz = awready_i; // + // fuse_ctrl_core_axi_write_out_if_responder_struct.xyz = wready_i; // + // fuse_ctrl_core_axi_write_out_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_out_if_responder_struct.xyz = bid_i; // + // fuse_ctrl_core_axi_write_out_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_write_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_write_out_if_initiator_s fuse_ctrl_core_axi_write_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_write_out_if_responder_s fuse_ctrl_core_axi_write_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_write_out_if_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Variables within the fuse_ctrl_core_axi_write_out_if_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= fuse_ctrl_core_axi_write_out_if_initiator_struct.xyz; // + // wready_o <= fuse_ctrl_core_axi_write_out_if_initiator_struct.xyz; // + // bresp_o <= fuse_ctrl_core_axi_write_out_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= fuse_ctrl_core_axi_write_out_if_initiator_struct.xyz; // + // bvalid_o <= fuse_ctrl_core_axi_write_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_write_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_if.sv new file mode 100644 index 000000000..2be6f57ed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_write_out_if interface signals. +// It is instantiated once per fuse_ctrl_core_axi_write_out_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_write_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_write_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_write_out_if_bus.awready), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_if_bus.wready), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_if_bus.bresp), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_if_bus.bid), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_out_if_pkg_hdl::*; + +interface fuse_ctrl_core_axi_write_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_macros.svh new file mode 100644 index 000000000..0e6c3c0de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_write_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_write_out_if_configuration class. +// + `define fuse_ctrl_core_axi_write_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_write_out_if_configuration_s; + + `define fuse_ctrl_core_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_if_configuration_s to_struct();\ + fuse_ctrl_core_axi_write_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_write_out_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_write_out_if_configuration_s fuse_ctrl_core_axi_write_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_write_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_write_out_if_transaction class. +// + `define fuse_ctrl_core_axi_write_out_if_MONITOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_ctrl_core_axi_write_out_if_monitor_s; + + `define fuse_ctrl_core_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_if_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_write_out_if_monitor_struct = \ + { \ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_ctrl_core_axi_write_out_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_write_out_if_monitor_s fuse_ctrl_core_axi_write_out_if_monitor_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_ctrl_core_axi_write_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_ctrl_core_axi_write_out_if_initiator_s; + + `define fuse_ctrl_core_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_if_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_write_out_if_initiator_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_ctrl_core_axi_write_out_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_write_out_if_initiator_s fuse_ctrl_core_axi_write_out_if_initiator_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_ctrl_core_axi_write_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_ctrl_core_axi_write_out_if_responder_s; + + `define fuse_ctrl_core_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_if_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_write_out_if_responder_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_ctrl_core_axi_write_out_if_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_write_out_if_responder_s fuse_ctrl_core_axi_write_out_if_responder_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_ctrl_core_axi_write_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor.svh new file mode 100644 index 000000000..b63c646f1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_write_out_if transactions observed by the +// fuse_ctrl_core_axi_write_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_write_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_write_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_write_out_if_monitor_s fuse_ctrl_core_axi_write_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_write_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor_bfm.sv new file mode 100644 index 000000000..f78f26207 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_write_out_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_write_out_if monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_write_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_write_out_if_if. +// +// Input signals from the fuse_ctrl_core_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_write_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_out_if_macros.svh" + + +interface fuse_ctrl_core_axi_write_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_write_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_write_out_if_MONITOR_STRUCT + fuse_ctrl_core_axi_write_out_if_monitor_s fuse_ctrl_core_axi_write_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_write_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_write_out_if_pkg::fuse_ctrl_core_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_write_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_write_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_write_out_if_configuration_s fuse_ctrl_core_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_write_out_if_monitor_s fuse_ctrl_core_axi_write_out_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_write_out_if_monitor_struct.core_awready + // // fuse_ctrl_core_axi_write_out_if_monitor_struct.core_wready + // // fuse_ctrl_core_axi_write_out_if_monitor_struct.core_bresp + // // fuse_ctrl_core_axi_write_out_if_monitor_struct.core_bid + // // fuse_ctrl_core_axi_write_out_if_monitor_struct.core_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_write_out_if_monitor_struct.xyz = awready_i; // + // fuse_ctrl_core_axi_write_out_if_monitor_struct.xyz = wready_i; // + // fuse_ctrl_core_axi_write_out_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_out_if_monitor_struct.xyz = bid_i; // + // fuse_ctrl_core_axi_write_out_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_random_sequence.svh new file mode 100644 index 000000000..03119f4d4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_write_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_write_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_write_out_if_random_sequence::body()-fuse_ctrl_core_axi_write_out_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_write_out_if_driver_bfm via the sequencer and fuse_ctrl_core_axi_write_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_write_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_responder_sequence.svh new file mode 100644 index 000000000..f525d3d69 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_write_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_sequence_base.svh new file mode 100644 index 000000000..7f3957f54 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_out_if_transaction_req_t; + fuse_ctrl_core_axi_write_out_if_transaction_req_t req; + typedef fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_out_if_transaction_rsp_t; + fuse_ctrl_core_axi_write_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_write_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_write_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction.svh new file mode 100644 index 000000000..9c52f7f9b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_write_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_awready ; + logic core_wready ; + axi_pkg::axi_burst_e core_bresp ; + logic core_bid ; + logic core_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_write_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_write_out_if_monitor and fuse_ctrl_core_axi_write_out_if_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_MONITOR_STRUCT + fuse_ctrl_core_axi_write_out_if_monitor_s fuse_ctrl_core_axi_write_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_out_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_if_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_out_if_driver and fuse_ctrl_core_axi_write_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_out_if_initiator_s fuse_ctrl_core_axi_write_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_out_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_if_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_write_out_if_driver and fuse_ctrl_core_axi_write_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_out_if_responder_s fuse_ctrl_core_axi_write_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_out_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_if_responder_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_if_macros.svh + `fuse_ctrl_core_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awready:0x%x core_wready:0x%x core_bresp:0x%x core_bid:0x%x core_bvalid:0x%x ",core_awready,core_wready,core_bresp,core_bid,core_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_awready == RHS.core_awready) + &&(this.core_wready == RHS.core_wready) + &&(this.core_bresp == RHS.core_bresp) + &&(this.core_bid == RHS.core_bid) + &&(this.core_bvalid == RHS.core_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awready = RHS.core_awready; + this.core_wready = RHS.core_wready; + this.core_bresp = RHS.core_bresp; + this.core_bid = RHS.core_bid; + this.core_bvalid = RHS.core_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_write_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awready,"core_awready"); + $add_attribute(transaction_view_h,core_wready,"core_wready"); + $add_attribute(transaction_view_h,core_bresp,"core_bresp"); + $add_attribute(transaction_view_h,core_bid,"core_bid"); + $add_attribute(transaction_view_h,core_bvalid,"core_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction_coverage.svh new file mode 100644 index 000000000..e83ee969f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_write_out_if transaction information using +// a covergroup named fuse_ctrl_core_axi_write_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_write_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awready: coverpoint coverage_trans.core_awready; + core_wready: coverpoint coverage_trans.core_wready; + core_bresp: coverpoint coverage_trans.core_bresp; + core_bid: coverpoint coverage_trans.core_bid; + core_bvalid: coverpoint coverage_trans.core_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_write_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_write_out_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_write_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/src/fuse_ctrl_core_axi_write_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/yaml/fuse_ctrl_core_axi_write_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/yaml/fuse_ctrl_core_axi_write_out_if_interface.yaml new file mode 100644 index 000000000..a4ad2e78b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_if_pkg/yaml/fuse_ctrl_core_axi_write_out_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_write_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.project new file mode 100644 index 000000000..673a4105f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_core_axi_write_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.svproject new file mode 100644 index 000000000..e0ccd6023 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/Makefile new file mode 100644 index 000000000..b885f66ae --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_core_axi_write_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_core_axi_write_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hvl.f + +fuse_ctrl_core_axi_write_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hdl.f + +fuse_ctrl_core_axi_write_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_xrtl.f + +COMP_fuse_ctrl_core_axi_write_out_PKG_TGT_0 = q_comp_fuse_ctrl_core_axi_write_out_pkg +COMP_fuse_ctrl_core_axi_write_out_PKG_TGT_1 = v_comp_fuse_ctrl_core_axi_write_out_pkg +COMP_fuse_ctrl_core_axi_write_out_PKG_TGT = $(COMP_fuse_ctrl_core_axi_write_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_core_axi_write_out_pkg: $(COMP_fuse_ctrl_core_axi_write_out_PKG_TGT) + +q_comp_fuse_ctrl_core_axi_write_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_PKG_XRTL) + +v_comp_fuse_ctrl_core_axi_write_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_core_axi_write_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_core_axi_write_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_core_axi_write_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_core_axi_write_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_out_pkg += -I$(fuse_ctrl_core_axi_write_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_core_axi_write_out_pkg += $(fuse_ctrl_core_axi_write_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_core_axi_write_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_core_axi_write_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_core_axi_write_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_core_axi_write_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_core_axi_write_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/compile.do new file mode 100644 index 000000000..dd7c8dfdc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_core_axi_write_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out.compile new file mode 100644 index 000000000..fc356ade3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_core_axi_write_out_hvl.compile + - fuse_ctrl_core_axi_write_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_bfm.vinfo new file mode 100644 index 000000000..4acbc3dcb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_core_axi_write_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_core_axi_write_out_if.sv +src/fuse_ctrl_core_axi_write_out_driver_bfm.sv +src/fuse_ctrl_core_axi_write_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_common.compile new file mode 100644 index 000000000..ab99fa6e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_core_axi_write_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hdl.f new file mode 100644 index 000000000..354fe2499 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hvl.f new file mode 100644 index 000000000..d14e3d6c5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_xrtl.f new file mode 100644 index 000000000..9aecc8885 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hdl.compile new file mode 100644 index 000000000..d220bb845 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_core_axi_write_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_core_axi_write_out_if.sv + - src/fuse_ctrl_core_axi_write_out_monitor_bfm.sv + - src/fuse_ctrl_core_axi_write_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hvl.compile new file mode 100644 index 000000000..2d0aa9807 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_core_axi_write_out_common.compile +incdir: + - . +src: + - fuse_ctrl_core_axi_write_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.sv new file mode 100644 index 000000000..4e525f12e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_core_axi_write_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_core_axi_write_out_macros.svh" + + export fuse_ctrl_core_axi_write_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_core_axi_write_out_typedefs.svh" + `include "src/fuse_ctrl_core_axi_write_out_transaction.svh" + + `include "src/fuse_ctrl_core_axi_write_out_configuration.svh" + `include "src/fuse_ctrl_core_axi_write_out_driver.svh" + `include "src/fuse_ctrl_core_axi_write_out_monitor.svh" + + `include "src/fuse_ctrl_core_axi_write_out_transaction_coverage.svh" + `include "src/fuse_ctrl_core_axi_write_out_sequence_base.svh" + `include "src/fuse_ctrl_core_axi_write_out_random_sequence.svh" + + `include "src/fuse_ctrl_core_axi_write_out_responder_sequence.svh" + `include "src/fuse_ctrl_core_axi_write_out2reg_adapter.svh" + + `include "src/fuse_ctrl_core_axi_write_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.vinfo new file mode 100644 index 000000000..6c1d3851b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_core_axi_write_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_core_axi_write_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.sv new file mode 100644 index 000000000..9bdd4e613 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_core_axi_write_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_core_axi_write_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_core_axi_write_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.vinfo new file mode 100644 index 000000000..68e75c652 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_core_axi_write_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_sve.F new file mode 100644 index 000000000..dd141cca6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_core_axi_write_out_pkg/fuse_ctrl_core_axi_write_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out2reg_adapter.svh new file mode 100644 index 000000000..7f7d115ab --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_core_axi_write_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_core_axi_write_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_core_axi_write_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_agent.svh new file mode 100644 index 000000000..f35b0c2f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_core_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_core_axi_write_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_core_axi_write_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_core_axi_write_out_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_configuration.svh new file mode 100644 index 000000000..e6dac332a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_core_axi_write_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_core_axi_write_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_core_axi_write_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_core_axi_write_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_CONFIGURATION_STRUCT + fuse_ctrl_core_axi_write_out_configuration_s fuse_ctrl_core_axi_write_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_core_axi_write_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_configuration_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_core_axi_write_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_core_axi_write_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_core_axi_write_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_core_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_core_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_core_axi_write_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_core_axi_write_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver.svh new file mode 100644 index 000000000..18a3dac72 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_core_axi_write_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_core_axi_write_out_driver and fuse_ctrl_core_axi_write_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_core_axi_write_out_driver_bfm. +`fuse_ctrl_core_axi_write_out_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_out_initiator_s fuse_ctrl_core_axi_write_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_core_axi_write_out_driver and fuse_ctrl_core_axi_write_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_core_axi_write_out_driver_bfm. +`fuse_ctrl_core_axi_write_out_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_out_responder_s fuse_ctrl_core_axi_write_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_core_axi_write_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_core_axi_write_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_core_axi_write_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_core_axi_write_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver_bfm.sv new file mode 100644 index 000000000..ee3c4fb40 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_core_axi_write_out signal driving. It is +// accessed by the uvm fuse_ctrl_core_axi_write_out driver through a virtual interface +// handle in the fuse_ctrl_core_axi_write_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_core_axi_write_out_if. +// +// Input signals from the fuse_ctrl_core_axi_write_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_core_axi_write_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_out_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_out_macros.svh" + +interface fuse_ctrl_core_axi_write_out_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_core_axi_write_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_core_axi_write_out_pkg::fuse_ctrl_core_axi_write_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_core_axi_write_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_core_axi_write_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_core_axi_write_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_out_driver and fuse_ctrl_core_axi_write_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_out_driver_bfm. + `fuse_ctrl_core_axi_write_out_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_core_axi_write_out_driver and fuse_ctrl_core_axi_write_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_out_driver_bfm. + `fuse_ctrl_core_axi_write_out_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_core_axi_write_out_configuration_s fuse_ctrl_core_axi_write_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_core_axi_write_out_initiator_s fuse_ctrl_core_axi_write_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_core_axi_write_out_responder_s fuse_ctrl_core_axi_write_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_core_axi_write_out_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Members within the fuse_ctrl_core_axi_write_out_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + initiator_struct = fuse_ctrl_core_axi_write_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_core_axi_write_out_responder_struct.xyz = awready_i; // + // fuse_ctrl_core_axi_write_out_responder_struct.xyz = wready_i; // + // fuse_ctrl_core_axi_write_out_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_out_responder_struct.xyz = bid_i; // + // fuse_ctrl_core_axi_write_out_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_core_axi_write_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_core_axi_write_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_core_axi_write_out_initiator_s fuse_ctrl_core_axi_write_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_core_axi_write_out_responder_s fuse_ctrl_core_axi_write_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_core_axi_write_out_initiator_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Variables within the fuse_ctrl_core_axi_write_out_responder_struct: + // logic core_awready ; + // logic core_wready ; + // axi_pkg::axi_burst_e core_bresp ; + // logic core_bid ; + // logic core_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= fuse_ctrl_core_axi_write_out_initiator_struct.xyz; // + // wready_o <= fuse_ctrl_core_axi_write_out_initiator_struct.xyz; // + // bresp_o <= fuse_ctrl_core_axi_write_out_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= fuse_ctrl_core_axi_write_out_initiator_struct.xyz; // + // bvalid_o <= fuse_ctrl_core_axi_write_out_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_core_axi_write_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_core_axi_write_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_if.sv new file mode 100644 index 000000000..a5e2f1cb4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_core_axi_write_out interface signals. +// It is instantiated once per fuse_ctrl_core_axi_write_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_core_axi_write_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_core_axi_write_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_core_axi_write_out_bus.awready), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_bus.wready), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_bus.bresp), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_bus.bid), // Agent input +// .dut_signal_port(fuse_ctrl_core_axi_write_out_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_out_pkg_hdl::*; + +interface fuse_ctrl_core_axi_write_out_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_macros.svh new file mode 100644 index 000000000..5f57ee1cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_core_axi_write_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_core_axi_write_out_configuration class. +// + `define fuse_ctrl_core_axi_write_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_core_axi_write_out_configuration_s; + + `define fuse_ctrl_core_axi_write_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_configuration_s to_struct();\ + fuse_ctrl_core_axi_write_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_core_axi_write_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_core_axi_write_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_core_axi_write_out_configuration_s fuse_ctrl_core_axi_write_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_core_axi_write_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_core_axi_write_out_transaction class. +// + `define fuse_ctrl_core_axi_write_out_MONITOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_ctrl_core_axi_write_out_monitor_s; + + `define fuse_ctrl_core_axi_write_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_monitor_s to_monitor_struct();\ + fuse_ctrl_core_axi_write_out_monitor_struct = \ + { \ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_ctrl_core_axi_write_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_core_axi_write_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_core_axi_write_out_monitor_s fuse_ctrl_core_axi_write_out_monitor_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_ctrl_core_axi_write_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_core_axi_write_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_out_INITIATOR_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_ctrl_core_axi_write_out_initiator_s; + + `define fuse_ctrl_core_axi_write_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_initiator_s to_initiator_struct();\ + fuse_ctrl_core_axi_write_out_initiator_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_ctrl_core_axi_write_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_core_axi_write_out_initiator_s fuse_ctrl_core_axi_write_out_initiator_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_ctrl_core_axi_write_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_core_axi_write_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_core_axi_write_out_RESPONDER_STRUCT typedef struct packed { \ + logic core_awready ; \ + logic core_wready ; \ + axi_pkg::axi_burst_e core_bresp ; \ + logic core_bid ; \ + logic core_bvalid ; \ + } fuse_ctrl_core_axi_write_out_responder_s; + + `define fuse_ctrl_core_axi_write_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_core_axi_write_out_responder_s to_responder_struct();\ + fuse_ctrl_core_axi_write_out_responder_struct = \ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + };\ + return ( fuse_ctrl_core_axi_write_out_responder_struct);\ + endfunction + + `define fuse_ctrl_core_axi_write_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_core_axi_write_out_responder_s fuse_ctrl_core_axi_write_out_responder_struct);\ + {\ + this.core_awready , \ + this.core_wready , \ + this.core_bresp , \ + this.core_bid , \ + this.core_bvalid \ + } = fuse_ctrl_core_axi_write_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor.svh new file mode 100644 index 000000000..d540c2d82 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_core_axi_write_out transactions observed by the +// fuse_ctrl_core_axi_write_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_core_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_core_axi_write_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_core_axi_write_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_core_axi_write_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_core_axi_write_out_monitor_s fuse_ctrl_core_axi_write_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_core_axi_write_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor_bfm.sv new file mode 100644 index 000000000..d39a378de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_core_axi_write_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_core_axi_write_out monitor through a virtual +// interface handle in the fuse_ctrl_core_axi_write_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_core_axi_write_out_if. +// +// Input signals from the fuse_ctrl_core_axi_write_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_core_axi_write_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_core_axi_write_out_pkg_hdl::*; +`include "src/fuse_ctrl_core_axi_write_out_macros.svh" + + +interface fuse_ctrl_core_axi_write_out_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_core_axi_write_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_core_axi_write_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_core_axi_write_out_MONITOR_STRUCT + fuse_ctrl_core_axi_write_out_monitor_s fuse_ctrl_core_axi_write_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_core_axi_write_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_core_axi_write_out_pkg::fuse_ctrl_core_axi_write_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_core_axi_write_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_core_axi_write_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_core_axi_write_out_configuration_s fuse_ctrl_core_axi_write_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_core_axi_write_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_core_axi_write_out_monitor_s fuse_ctrl_core_axi_write_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_core_axi_write_out_monitor_struct.core_awready + // // fuse_ctrl_core_axi_write_out_monitor_struct.core_wready + // // fuse_ctrl_core_axi_write_out_monitor_struct.core_bresp + // // fuse_ctrl_core_axi_write_out_monitor_struct.core_bid + // // fuse_ctrl_core_axi_write_out_monitor_struct.core_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_core_axi_write_out_monitor_struct.xyz = awready_i; // + // fuse_ctrl_core_axi_write_out_monitor_struct.xyz = wready_i; // + // fuse_ctrl_core_axi_write_out_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_core_axi_write_out_monitor_struct.xyz = bid_i; // + // fuse_ctrl_core_axi_write_out_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_random_sequence.svh new file mode 100644 index 000000000..490a94fe3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_core_axi_write_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_core_axi_write_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_core_axi_write_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_core_axi_write_out_random_sequence::body()-fuse_ctrl_core_axi_write_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_core_axi_write_out_driver_bfm via the sequencer and fuse_ctrl_core_axi_write_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_core_axi_write_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_responder_sequence.svh new file mode 100644 index 000000000..9aaa395ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_core_axi_write_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_core_axi_write_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_core_axi_write_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_sequence_base.svh new file mode 100644 index 000000000..d4ae2f4d6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_out_transaction_req_t; + fuse_ctrl_core_axi_write_out_transaction_req_t req; + typedef fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_core_axi_write_out_transaction_rsp_t; + fuse_ctrl_core_axi_write_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_core_axi_write_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_core_axi_write_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction.svh new file mode 100644 index 000000000..fc836d88f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_core_axi_write_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_core_axi_write_out_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic core_awready ; + logic core_wready ; + axi_pkg::axi_burst_e core_bresp ; + logic core_bid ; + logic core_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_core_axi_write_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_core_axi_write_out_monitor and fuse_ctrl_core_axi_write_out_monitor_bfm + // This struct is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_MONITOR_STRUCT + fuse_ctrl_core_axi_write_out_monitor_s fuse_ctrl_core_axi_write_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_monitor_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_core_axi_write_out_driver and fuse_ctrl_core_axi_write_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_core_axi_write_out_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_INITIATOR_STRUCT + fuse_ctrl_core_axi_write_out_initiator_s fuse_ctrl_core_axi_write_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_initiator_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_core_axi_write_out_driver and fuse_ctrl_core_axi_write_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_core_axi_write_out_driver_bfm. + // This struct is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_RESPONDER_STRUCT + fuse_ctrl_core_axi_write_out_responder_s fuse_ctrl_core_axi_write_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_core_axi_write_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_core_axi_write_out_responder_struct. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_core_axi_write_out_macros.svh + `fuse_ctrl_core_axi_write_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("core_awready:0x%x core_wready:0x%x core_bresp:0x%x core_bid:0x%x core_bvalid:0x%x ",core_awready,core_wready,core_bresp,core_bid,core_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.core_awready == RHS.core_awready) + &&(this.core_wready == RHS.core_wready) + &&(this.core_bresp == RHS.core_bresp) + &&(this.core_bid == RHS.core_bid) + &&(this.core_bvalid == RHS.core_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.core_awready = RHS.core_awready; + this.core_wready = RHS.core_wready; + this.core_bresp = RHS.core_bresp; + this.core_bid = RHS.core_bid; + this.core_bvalid = RHS.core_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_core_axi_write_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,core_awready,"core_awready"); + $add_attribute(transaction_view_h,core_wready,"core_wready"); + $add_attribute(transaction_view_h,core_bresp,"core_bresp"); + $add_attribute(transaction_view_h,core_bid,"core_bid"); + $add_attribute(transaction_view_h,core_bvalid,"core_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction_coverage.svh new file mode 100644 index 000000000..f6e083118 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_core_axi_write_out transaction information using +// a covergroup named fuse_ctrl_core_axi_write_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_core_axi_write_out_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_core_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_core_axi_write_out_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_core_axi_write_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + core_awready: coverpoint coverage_trans.core_awready; + core_wready: coverpoint coverage_trans.core_wready; + core_bresp: coverpoint coverage_trans.core_bresp; + core_bid: coverpoint coverage_trans.core_bid; + core_bvalid: coverpoint coverage_trans.core_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_core_axi_write_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_core_axi_write_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_core_axi_write_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_core_axi_write_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/src/fuse_ctrl_core_axi_write_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/yaml/fuse_ctrl_core_axi_write_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/yaml/fuse_ctrl_core_axi_write_out_interface.yaml new file mode 100644 index 000000000..7f30cb198 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_core_axi_write_out_pkg/yaml/fuse_ctrl_core_axi_write_out_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + fuse_ctrl_core_axi_write_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: core_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.project new file mode 100644 index 000000000..45e6ebf46 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_in_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.svproject new file mode 100644 index 000000000..f75187c7a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/Makefile new file mode 100644 index 000000000..ec35ee1db --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_in_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_in_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f + +fuse_ctrl_in_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f + +fuse_ctrl_in_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_xrtl.f + +COMP_fuse_ctrl_in_if_PKG_TGT_0 = q_comp_fuse_ctrl_in_if_pkg +COMP_fuse_ctrl_in_if_PKG_TGT_1 = v_comp_fuse_ctrl_in_if_pkg +COMP_fuse_ctrl_in_if_PKG_TGT = $(COMP_fuse_ctrl_in_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_in_if_pkg: $(COMP_fuse_ctrl_in_if_PKG_TGT) + +q_comp_fuse_ctrl_in_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_in_if_PKG_XRTL) + +v_comp_fuse_ctrl_in_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_in_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_in_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_in_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_in_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_in_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_in_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_in_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_in_if_pkg += -I$(fuse_ctrl_in_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_in_if_pkg += $(fuse_ctrl_in_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_in_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_in_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_in_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_in_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_in_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_in_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/compile.do new file mode 100644 index 000000000..c285781cd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_in_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if.compile new file mode 100644 index 000000000..e8e8162d5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_in_if_hvl.compile + - fuse_ctrl_in_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_bfm.vinfo new file mode 100644 index 000000000..b43d67488 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_in_if_if.sv +src/fuse_ctrl_in_if_driver_bfm.sv +src/fuse_ctrl_in_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_common.compile new file mode 100644 index 000000000..b81563f6f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f new file mode 100644 index 000000000..12e3b303b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f new file mode 100644 index 000000000..7a81ab807 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_xrtl.f new file mode 100644 index 000000000..179ff7f94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hdl.compile new file mode 100644 index 000000000..c092af6fc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_in_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_in_if_if.sv + - src/fuse_ctrl_in_if_monitor_bfm.sv + - src/fuse_ctrl_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hvl.compile new file mode 100644 index 000000000..92ee0394b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_in_if_common.compile +incdir: + - . +src: + - fuse_ctrl_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.sv new file mode 100644 index 000000000..084ccc70c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_in_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_in_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_in_if_macros.svh" + + export fuse_ctrl_in_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_in_if_typedefs.svh" + `include "src/fuse_ctrl_in_if_transaction.svh" + + `include "src/fuse_ctrl_in_if_configuration.svh" + `include "src/fuse_ctrl_in_if_driver.svh" + `include "src/fuse_ctrl_in_if_monitor.svh" + + `include "src/fuse_ctrl_in_if_transaction_coverage.svh" + `include "src/fuse_ctrl_in_if_sequence_base.svh" + `include "src/fuse_ctrl_in_if_random_sequence.svh" + + `include "src/fuse_ctrl_in_if_responder_sequence.svh" + `include "src/fuse_ctrl_in_if2reg_adapter.svh" + + `include "src/fuse_ctrl_in_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.vinfo new file mode 100644 index 000000000..638065653 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.sv new file mode 100644 index 000000000..0037ca5fe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_in_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_in_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_in_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.vinfo new file mode 100644 index 000000000..63327f479 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_sve.F new file mode 100644 index 000000000..8f42525dc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_in_if_pkg/fuse_ctrl_in_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if2reg_adapter.svh new file mode 100644 index 000000000..949a9a2be --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_in_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if2reg_adapter #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_in_if2reg_adapter #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_in_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h = fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_in_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_agent.svh new file mode 100644 index 000000000..c4e054bf2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_agent #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_in_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .DRIVER_T(fuse_ctrl_in_if_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_T(fuse_ctrl_in_if_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .COVERAGE_T(fuse_ctrl_in_if_transaction_coverage #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_in_if_agent #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_configuration.svh new file mode 100644 index 000000000..2f557ad05 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_in_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_configuration #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_in_if_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_in_if_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_in_if_configuration #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_in_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_CONFIGURATION_STRUCT + fuse_ctrl_in_if_configuration_s fuse_ctrl_in_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_in_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_in_if_configuration_struct. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_in_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_in_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_in_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_in_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_in_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_in_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_in_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", agent_path, interface_name, AlertSyncOn ,RndConstLfrSeed ,RndCnstLfsrPerm ,MemInitFile ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_in_if_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver.svh new file mode 100644 index 000000000..4f5e71c4a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_driver #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_in_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_in_if_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .REQ(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .RSP(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_in_if_driver #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_in_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_in_if_driver and fuse_ctrl_in_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_in_if_driver_bfm. +`fuse_ctrl_in_if_INITIATOR_STRUCT + fuse_ctrl_in_if_initiator_s fuse_ctrl_in_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_in_if_driver and fuse_ctrl_in_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_in_if_driver_bfm. +`fuse_ctrl_in_if_RESPONDER_STRUCT + fuse_ctrl_in_if_responder_s fuse_ctrl_in_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_in_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_in_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_in_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_in_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver_bfm.sv new file mode 100644 index 000000000..6b39174a4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_driver_bfm.sv @@ -0,0 +1,346 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_in_if signal driving. It is +// accessed by the uvm fuse_ctrl_in_if driver through a virtual interface +// handle in the fuse_ctrl_in_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_in_if_if. +// +// Input signals from the fuse_ctrl_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_in_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_in_if_macros.svh" + +interface fuse_ctrl_in_if_driver_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + (fuse_ctrl_in_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_in_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i_i; + reg [$bits(edn_pkg::edn_req_t)-1:0] edn_i_o = 'bz; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_i; + reg [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_o = 'bz; + tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_i; + reg [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_o = 'bz; + tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_i; + reg [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_o = 'bz; + tri otp_ext_voltage_h_io_i; + reg otp_ext_voltage_h_io_o = 'bz; + tri scan_en_i_i; + reg scan_en_i_o = 'bz; + tri scan_rst_ni_i; + reg scan_rst_ni_o = 'bz; + tri scanmode_i_i; + reg scanmode_i_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.edn_i = (initiator_responder == INITIATOR) ? edn_i_o : 'bz; + assign edn_i_i = bus.edn_i; + assign bus.alert_rx_i = (initiator_responder == INITIATOR) ? alert_rx_i_o : 'bz; + assign alert_rx_i_i = bus.alert_rx_i; + assign bus.obs_ctrl_i = (initiator_responder == INITIATOR) ? obs_ctrl_i_o : 'bz; + assign obs_ctrl_i_i = bus.obs_ctrl_i; + assign bus.otp_ast_pwr_seq_h_i = (initiator_responder == INITIATOR) ? otp_ast_pwr_seq_h_i_o : 'bz; + assign otp_ast_pwr_seq_h_i_i = bus.otp_ast_pwr_seq_h_i; + assign bus.otp_ext_voltage_h_io = (initiator_responder == INITIATOR) ? otp_ext_voltage_h_io_o : 'bz; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + assign bus.scan_en_i = (initiator_responder == INITIATOR) ? scan_en_i_o : 'bz; + assign scan_en_i_i = bus.scan_en_i; + assign bus.scan_rst_ni = (initiator_responder == INITIATOR) ? scan_rst_ni_o : 'bz; + assign scan_rst_ni_i = bus.scan_rst_ni; + assign bus.scanmode_i = (initiator_responder == INITIATOR) ? scanmode_i_o : 'bz; + assign scanmode_i_i = bus.scanmode_i; + + // Proxy handle to UVM driver + fuse_ctrl_in_if_pkg::fuse_ctrl_in_if_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_in_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_in_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_in_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_in_if_driver and fuse_ctrl_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_in_if_driver_bfm. + `fuse_ctrl_in_if_INITIATOR_STRUCT + fuse_ctrl_in_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_in_if_driver and fuse_ctrl_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_in_if_driver_bfm. + `fuse_ctrl_in_if_RESPONDER_STRUCT + fuse_ctrl_in_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + edn_i_o <= 'bz; + alert_rx_i_o <= 'bz; + obs_ctrl_i_o <= 'bz; + otp_ast_pwr_seq_h_i_o <= 'bz; + otp_ext_voltage_h_io_o <= 'bz; + scan_en_i_o <= 'bz; + scan_rst_ni_o <= 'bz; + scanmode_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_in_if_configuration_s fuse_ctrl_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_in_if_initiator_s fuse_ctrl_in_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_in_if_responder_s fuse_ctrl_in_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_in_if_initiator_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Members within the fuse_ctrl_in_if_responder_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + initiator_struct = fuse_ctrl_in_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // edn_i_o <= fuse_ctrl_in_if_initiator_struct.xyz; // [$bits(edn_pkg::edn_req_t)-1:0] + // alert_rx_i_o <= fuse_ctrl_in_if_initiator_struct.xyz; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // obs_ctrl_i_o <= fuse_ctrl_in_if_initiator_struct.xyz; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // otp_ast_pwr_seq_h_i_o <= fuse_ctrl_in_if_initiator_struct.xyz; // [$bits(otp_ast_req_t)-1:0] + // otp_ext_voltage_h_io_o <= fuse_ctrl_in_if_initiator_struct.xyz; // + // scan_en_i_o <= fuse_ctrl_in_if_initiator_struct.xyz; // + // scan_rst_ni_o <= fuse_ctrl_in_if_initiator_struct.xyz; // + // scanmode_i_o <= fuse_ctrl_in_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_in_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_in_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_in_if_initiator_s fuse_ctrl_in_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_in_if_responder_s fuse_ctrl_in_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_in_if_initiator_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Variables within the fuse_ctrl_in_if_responder_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_in_if_responder_struct.xyz = edn_i_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_in_if_responder_struct.xyz = alert_rx_i_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // fuse_ctrl_in_if_responder_struct.xyz = obs_ctrl_i_i; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // fuse_ctrl_in_if_responder_struct.xyz = otp_ast_pwr_seq_h_i_i; // [$bits(otp_ast_req_t)-1:0] + // fuse_ctrl_in_if_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // fuse_ctrl_in_if_responder_struct.xyz = scan_en_i_i; // + // fuse_ctrl_in_if_responder_struct.xyz = scan_rst_ni_i; // + // fuse_ctrl_in_if_responder_struct.xyz = scanmode_i_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_in_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_in_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_if.sv new file mode 100644 index 000000000..590cb0dfa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_if.sv @@ -0,0 +1,119 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_in_if interface signals. +// It is instantiated once per fuse_ctrl_in_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_in_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_in_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_in_if_bus.edn_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.alert_rx_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.obs_ctrl_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.otp_ast_pwr_seq_h_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.otp_ext_voltage_h_io), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.scan_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.scan_rst_ni), // Agent output +// .dut_signal_port(fuse_ctrl_in_if_bus.scanmode_i), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_if_pkg_hdl::*; + +interface fuse_ctrl_in_if_if #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i, + inout tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i, + inout tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i, + inout tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i, + inout tri otp_ext_voltage_h_io, + inout tri scan_en_i, + inout tri scan_rst_ni, + inout tri scanmode_i + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input edn_i, + input alert_rx_i, + input obs_ctrl_i, + input otp_ast_pwr_seq_h_i, + input otp_ext_voltage_h_io, + input scan_en_i, + input scan_rst_ni, + input scanmode_i + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output edn_i, + output alert_rx_i, + output obs_ctrl_i, + output otp_ast_pwr_seq_h_i, + output otp_ext_voltage_h_io, + output scan_en_i, + output scan_rst_ni, + output scanmode_i + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input edn_i, + input alert_rx_i, + input obs_ctrl_i, + input otp_ast_pwr_seq_h_i, + input otp_ext_voltage_h_io, + input scan_en_i, + input scan_rst_ni, + input scanmode_i + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_macros.svh new file mode 100644 index 000000000..1c4c94307 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_in_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_in_if_configuration class. +// + `define fuse_ctrl_in_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_in_if_configuration_s; + + `define fuse_ctrl_in_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_if_configuration_s to_struct();\ + fuse_ctrl_in_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_in_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_in_if_configuration_s fuse_ctrl_in_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_in_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_in_if_transaction class. +// + `define fuse_ctrl_in_if_MONITOR_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_if_monitor_s; + + `define fuse_ctrl_in_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_if_monitor_s to_monitor_struct();\ + fuse_ctrl_in_if_monitor_struct = \ + { \ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_in_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_in_if_monitor_s fuse_ctrl_in_if_monitor_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_in_if_INITIATOR_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_if_initiator_s; + + `define fuse_ctrl_in_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_if_initiator_s to_initiator_struct();\ + fuse_ctrl_in_if_initiator_struct = \ + {\ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_in_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_in_if_initiator_s fuse_ctrl_in_if_initiator_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_in_if_RESPONDER_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_if_responder_s; + + `define fuse_ctrl_in_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_if_responder_s to_responder_struct();\ + fuse_ctrl_in_if_responder_struct = \ + {\ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_if_responder_struct);\ + endfunction + + `define fuse_ctrl_in_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_in_if_responder_s fuse_ctrl_in_if_responder_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor.svh new file mode 100644 index 000000000..b58f2c631 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_in_if transactions observed by the +// fuse_ctrl_in_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_monitor #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_in_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_in_if_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_in_if_monitor #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_in_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_in_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_in_if_monitor_s fuse_ctrl_in_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_in_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor_bfm.sv new file mode 100644 index 000000000..96d9a80f5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_monitor_bfm.sv @@ -0,0 +1,221 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_in_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_in_if monitor through a virtual +// interface handle in the fuse_ctrl_in_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_in_if_if. +// +// Input signals from the fuse_ctrl_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_in_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_in_if_macros.svh" + + +interface fuse_ctrl_in_if_monitor_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + ( fuse_ctrl_in_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_in_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_in_if_MONITOR_STRUCT + fuse_ctrl_in_if_monitor_s fuse_ctrl_in_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_in_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i_i; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_i; + tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_i; + tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_i; + tri otp_ext_voltage_h_io_i; + tri scan_en_i_i; + tri scan_rst_ni_i; + tri scanmode_i_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign edn_i_i = bus.edn_i; + assign alert_rx_i_i = bus.alert_rx_i; + assign obs_ctrl_i_i = bus.obs_ctrl_i; + assign otp_ast_pwr_seq_h_i_i = bus.otp_ast_pwr_seq_h_i; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + assign scan_en_i_i = bus.scan_en_i; + assign scan_rst_ni_i = bus.scan_rst_ni; + assign scanmode_i_i = bus.scanmode_i; + + // Proxy handle to UVM monitor + fuse_ctrl_in_if_pkg::fuse_ctrl_in_if_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_in_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_in_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_in_if_configuration_s fuse_ctrl_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_in_if_monitor_s fuse_ctrl_in_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_in_if_monitor_struct.set_alert_rx_i + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_in_if_monitor_struct.xyz = edn_i_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_in_if_monitor_struct.xyz = alert_rx_i_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // fuse_ctrl_in_if_monitor_struct.xyz = obs_ctrl_i_i; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // fuse_ctrl_in_if_monitor_struct.xyz = otp_ast_pwr_seq_h_i_i; // [$bits(otp_ast_req_t)-1:0] + // fuse_ctrl_in_if_monitor_struct.xyz = otp_ext_voltage_h_io_i; // + // fuse_ctrl_in_if_monitor_struct.xyz = scan_en_i_i; // + // fuse_ctrl_in_if_monitor_struct.xyz = scan_rst_ni_i; // + // fuse_ctrl_in_if_monitor_struct.xyz = scanmode_i_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_random_sequence.svh new file mode 100644 index 000000000..8982a5cb8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_in_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_in_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_random_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_in_if_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_in_if_random_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_in_if_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_in_if_random_sequence::body()-fuse_ctrl_in_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_in_if_driver_bfm via the sequencer and fuse_ctrl_in_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_in_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_responder_sequence.svh new file mode 100644 index 000000000..75ca72188 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_responder_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_in_if_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_in_if_responder_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_in_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_in_if_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_sequence_base.svh new file mode 100644 index 000000000..12b699748 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_sequence_base #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .RSP(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_in_if_sequence_base #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // variables + typedef fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_in_if_transaction_req_t; + fuse_ctrl_in_if_transaction_req_t req; + typedef fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_in_if_transaction_rsp_t; + fuse_ctrl_in_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_in_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_in_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction.svh new file mode 100644 index 000000000..106e016f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction.svh @@ -0,0 +1,219 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_in_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_transaction #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_in_if_transaction #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_in_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_in_if_monitor and fuse_ctrl_in_if_monitor_bfm + // This struct is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_MONITOR_STRUCT + fuse_ctrl_in_if_monitor_s fuse_ctrl_in_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_in_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_in_if_monitor_struct. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_in_if_driver and fuse_ctrl_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_INITIATOR_STRUCT + fuse_ctrl_in_if_initiator_s fuse_ctrl_in_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_in_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_in_if_initiator_struct. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_in_if_driver and fuse_ctrl_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_RESPONDER_STRUCT + fuse_ctrl_in_if_responder_s fuse_ctrl_in_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_in_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_in_if_responder_struct. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_if_macros.svh + `fuse_ctrl_in_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("set_alert_rx_i:0x%x ",set_alert_rx_i); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.set_alert_rx_i = RHS.set_alert_rx_i; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_in_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,set_alert_rx_i,"set_alert_rx_i"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction_coverage.svh new file mode 100644 index 000000000..27fa4a7bd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_transaction_coverage.svh @@ -0,0 +1,102 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_in_if transaction information using +// a covergroup named fuse_ctrl_in_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_if_transaction_coverage #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_subscriber #(.T(fuse_ctrl_in_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_in_if_transaction_coverage #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_in_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + set_alert_rx_i: coverpoint coverage_trans.set_alert_rx_i; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_in_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_in_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_in_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_in_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/src/fuse_ctrl_in_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/yaml/fuse_ctrl_in_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/yaml/fuse_ctrl_in_if_interface.yaml new file mode 100644 index 000000000..2dac8368b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_if_pkg/yaml/fuse_ctrl_in_if_interface.yaml @@ -0,0 +1,68 @@ +uvmf: + interfaces: + fuse_ctrl_in_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AlertSyncOn + type: int + value: '3' + - name: RndConstLfrSeed + type: lfsr_seed_t + value: RndConstLfsrSeedDefault + - name: RndCnstLfsrPerm + type: lsfr_perm_t + value: RndCnstLfsrPermDefault + - name: MemInitFile + type: string + ports: + - dir: output + name: edn_i + reset_value: '''bz' + width: '[''$bits(edn_pkg::edn_req_t)'']' + - dir: output + name: alert_rx_i + reset_value: '''bz' + width: '[''NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)'']' + - dir: output + name: obs_ctrl_i + reset_value: '''bz' + width: '[''$bits(ast_pkg::ast_obs_ctrl_t)'']' + - dir: output + name: otp_ast_pwr_seq_h_i + reset_value: '''bz' + width: '[''$bits(otp_ast_req_t)'']' + - dir: output + name: otp_ext_voltage_h_io + reset_value: '''bz' + width: '1' + - dir: output + name: scan_en_i + reset_value: '''bz' + width: '1' + - dir: output + name: scan_rst_ni + reset_value: '''bz' + width: '1' + - dir: output + name: scanmode_i + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: set_alert_rx_i + type: caliptra_prim_alert_pkg::alert_rx_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/.project new file mode 100644 index 000000000..3038bf51b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/.svproject new file mode 100644 index 000000000..40fcc43fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/Makefile new file mode 100644 index 000000000..9fd3230c4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f + +fuse_ctrl_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f + +fuse_ctrl_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f + +COMP_fuse_ctrl_in_PKG_TGT_0 = q_comp_fuse_ctrl_in_pkg +COMP_fuse_ctrl_in_PKG_TGT_1 = v_comp_fuse_ctrl_in_pkg +COMP_fuse_ctrl_in_PKG_TGT = $(COMP_fuse_ctrl_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_in_pkg: $(COMP_fuse_ctrl_in_PKG_TGT) + +q_comp_fuse_ctrl_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_in_PKG_XRTL) + +v_comp_fuse_ctrl_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_in_pkg += -I$(fuse_ctrl_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_in_pkg += $(fuse_ctrl_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/compile.do new file mode 100644 index 000000000..26458397d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile new file mode 100644 index 000000000..ae6ef9dd8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_in_hvl.compile + - fuse_ctrl_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo new file mode 100644 index 000000000..cf88b7005 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_in_if.sv +src/fuse_ctrl_in_driver_bfm.sv +src/fuse_ctrl_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_common.compile new file mode 100644 index 000000000..82360a88a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f new file mode 100644 index 000000000..959aa9e78 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f new file mode 100644 index 000000000..e57e74b80 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f new file mode 100644 index 000000000..1e9819e09 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile new file mode 100644 index 000000000..da38bec57 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_in_if.sv + - src/fuse_ctrl_in_monitor_bfm.sv + - src/fuse_ctrl_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile new file mode 100644 index 000000000..210102ccf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_in_common.compile +incdir: + - . +src: + - fuse_ctrl_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv new file mode 100644 index 000000000..58df769b3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_in_macros.svh" + + export fuse_ctrl_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_in_typedefs.svh" + `include "src/fuse_ctrl_in_transaction.svh" + + `include "src/fuse_ctrl_in_configuration.svh" + `include "src/fuse_ctrl_in_driver.svh" + `include "src/fuse_ctrl_in_monitor.svh" + + `include "src/fuse_ctrl_in_transaction_coverage.svh" + `include "src/fuse_ctrl_in_sequence_base.svh" + `include "src/fuse_ctrl_in_random_sequence.svh" + + `include "src/fuse_ctrl_in_responder_sequence.svh" + `include "src/fuse_ctrl_in2reg_adapter.svh" + + `include "src/fuse_ctrl_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo new file mode 100644 index 000000000..164f1255c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv new file mode 100644 index 000000000..b13dcf77e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.vinfo new file mode 100644 index 000000000..79de2ad70 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F new file mode 100644 index 000000000..345b7e8cd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_in_pkg/fuse_ctrl_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in2reg_adapter.svh new file mode 100644 index 000000000..a359e7f30 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in2reg_adapter #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_in2reg_adapter #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h = fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_agent.svh new file mode 100644 index 000000000..8f2300972 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_agent #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_in_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .DRIVER_T(fuse_ctrl_in_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_T(fuse_ctrl_in_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .COVERAGE_T(fuse_ctrl_in_transaction_coverage #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_in_agent #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_configuration.svh new file mode 100644 index 000000000..14af02688 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_configuration #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_in_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_in_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_in_configuration #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_CONFIGURATION_STRUCT + fuse_ctrl_in_configuration_s fuse_ctrl_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_in_configuration_struct. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_in_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_in_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", agent_path, interface_name, AlertSyncOn ,RndConstLfrSeed ,RndCnstLfsrPerm ,MemInitFile ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_in_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver.svh new file mode 100644 index 000000000..2817f179d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_driver #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_in_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_in_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .REQ(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .RSP(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_in_driver #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_in_driver_bfm. +`fuse_ctrl_in_INITIATOR_STRUCT + fuse_ctrl_in_initiator_s fuse_ctrl_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_in_driver_bfm. +`fuse_ctrl_in_RESPONDER_STRUCT + fuse_ctrl_in_responder_s fuse_ctrl_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver_bfm.sv new file mode 100644 index 000000000..bab880b49 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_driver_bfm.sv @@ -0,0 +1,342 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_in signal driving. It is +// accessed by the uvm fuse_ctrl_in driver through a virtual interface +// handle in the fuse_ctrl_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_in_if. +// +// Input signals from the fuse_ctrl_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_pkg_hdl::*; +`include "src/fuse_ctrl_in_macros.svh" + +interface fuse_ctrl_in_driver_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + (fuse_ctrl_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i_i; + reg [$bits(edn_pkg::edn_req_t)-1:0] edn_i_o = 'bz; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_i; + reg [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_o = 'bz; + tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_i; + reg [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_o = 'bz; + tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_i; + reg [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_o = 'bz; + tri scan_en_i_i; + reg scan_en_i_o = 'bz; + tri scan_rst_ni_i; + reg scan_rst_ni_o = 'bz; + tri scanmode_i_i; + reg scanmode_i_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.edn_i = (initiator_responder == INITIATOR) ? edn_i_o : 'bz; + assign edn_i_i = bus.edn_i; + assign bus.alert_rx_i = (initiator_responder == INITIATOR) ? alert_rx_i_o : 'bz; + assign alert_rx_i_i = bus.alert_rx_i; + assign bus.obs_ctrl_i = (initiator_responder == INITIATOR) ? obs_ctrl_i_o : 'bz; + assign obs_ctrl_i_i = bus.obs_ctrl_i; + assign bus.otp_ast_pwr_seq_h_i = (initiator_responder == INITIATOR) ? otp_ast_pwr_seq_h_i_o : 'bz; + assign otp_ast_pwr_seq_h_i_i = bus.otp_ast_pwr_seq_h_i; + assign bus.scan_en_i = (initiator_responder == INITIATOR) ? scan_en_i_o : 'bz; + assign scan_en_i_i = bus.scan_en_i; + assign bus.scan_rst_ni = (initiator_responder == INITIATOR) ? scan_rst_ni_o : 'bz; + assign scan_rst_ni_i = bus.scan_rst_ni; + assign bus.scanmode_i = (initiator_responder == INITIATOR) ? scanmode_i_o : 'bz; + assign scanmode_i_i = bus.scanmode_i; + + // Proxy handle to UVM driver + fuse_ctrl_in_pkg::fuse_ctrl_in_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_in_driver_bfm. + `fuse_ctrl_in_INITIATOR_STRUCT + fuse_ctrl_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_in_driver_bfm. + `fuse_ctrl_in_RESPONDER_STRUCT + fuse_ctrl_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + edn_i_o <= 'bz; + alert_rx_i_o <= 'bz; + obs_ctrl_i_o <= 'bz; + otp_ast_pwr_seq_h_i_o <= 'bz; + otp_ext_voltage_h_io_o <= 'bz; + scan_en_i_o <= 'bz; + scan_rst_ni_o <= 'bz; + scanmode_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_in_configuration_s fuse_ctrl_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_in_initiator_s fuse_ctrl_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_in_responder_s fuse_ctrl_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_in_initiator_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Members within the fuse_ctrl_in_responder_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + initiator_struct = fuse_ctrl_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // edn_i_o <= fuse_ctrl_in_initiator_struct.xyz; // [$bits(edn_pkg::edn_req_t)-1:0] + // alert_rx_i_o <= fuse_ctrl_in_initiator_struct.xyz; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // obs_ctrl_i_o <= fuse_ctrl_in_initiator_struct.xyz; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // otp_ast_pwr_seq_h_i_o <= fuse_ctrl_in_initiator_struct.xyz; // [$bits(otp_ast_req_t)-1:0] + // otp_ext_voltage_h_io_o <= fuse_ctrl_in_initiator_struct.xyz; // + // scan_en_i_o <= fuse_ctrl_in_initiator_struct.xyz; // + // scan_rst_ni_o <= fuse_ctrl_in_initiator_struct.xyz; // + // scanmode_i_o <= fuse_ctrl_in_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_in_initiator_s fuse_ctrl_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_in_responder_s fuse_ctrl_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_in_initiator_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Variables within the fuse_ctrl_in_responder_struct: + // caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_in_responder_struct.xyz = edn_i_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_in_responder_struct.xyz = alert_rx_i_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // fuse_ctrl_in_responder_struct.xyz = obs_ctrl_i_i; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // fuse_ctrl_in_responder_struct.xyz = otp_ast_pwr_seq_h_i_i; // [$bits(otp_ast_req_t)-1:0] + // fuse_ctrl_in_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // fuse_ctrl_in_responder_struct.xyz = scan_en_i_i; // + // fuse_ctrl_in_responder_struct.xyz = scan_rst_ni_i; // + // fuse_ctrl_in_responder_struct.xyz = scanmode_i_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv new file mode 100644 index 000000000..2ddd420c6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_if.sv @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_in interface signals. +// It is instantiated once per fuse_ctrl_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_in_bus.edn_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.alert_rx_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.obs_ctrl_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.otp_ast_pwr_seq_h_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.scan_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.scan_rst_ni), // Agent output +// .dut_signal_port(fuse_ctrl_in_bus.scanmode_i), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_pkg_hdl::*; + +interface fuse_ctrl_in_if #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i, + inout tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i, + inout tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i, + inout tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i, + inout tri scan_en_i, + inout tri scan_rst_ni, + inout tri scanmode_i + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input edn_i, + input alert_rx_i, + input obs_ctrl_i, + input otp_ast_pwr_seq_h_i, + input scan_en_i, + input scan_rst_ni, + input scanmode_i + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output edn_i, + output alert_rx_i, + output obs_ctrl_i, + output otp_ast_pwr_seq_h_i, + output scan_en_i, + output scan_rst_ni, + output scanmode_i + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input edn_i, + input alert_rx_i, + input obs_ctrl_i, + input otp_ast_pwr_seq_h_i, + input scan_en_i, + input scan_rst_ni, + input scanmode_i + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_macros.svh new file mode 100644 index 000000000..cf85634de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_in_configuration class. +// + `define fuse_ctrl_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_in_configuration_s; + + `define fuse_ctrl_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_configuration_s to_struct();\ + fuse_ctrl_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_in_configuration_s fuse_ctrl_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_in_transaction class. +// + `define fuse_ctrl_in_MONITOR_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_monitor_s; + + `define fuse_ctrl_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_monitor_s to_monitor_struct();\ + fuse_ctrl_in_monitor_struct = \ + { \ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_in_monitor_s fuse_ctrl_in_monitor_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_in_INITIATOR_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_initiator_s; + + `define fuse_ctrl_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_initiator_s to_initiator_struct();\ + fuse_ctrl_in_initiator_struct = \ + {\ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_in_initiator_s fuse_ctrl_in_initiator_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_in_RESPONDER_STRUCT typedef struct packed { \ + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; \ + } fuse_ctrl_in_responder_s; + + `define fuse_ctrl_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_in_responder_s to_responder_struct();\ + fuse_ctrl_in_responder_struct = \ + {\ + this.set_alert_rx_i \ + };\ + return ( fuse_ctrl_in_responder_struct);\ + endfunction + + `define fuse_ctrl_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_in_responder_s fuse_ctrl_in_responder_struct);\ + {\ + this.set_alert_rx_i \ + } = fuse_ctrl_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor.svh new file mode 100644 index 000000000..cf4d9fd27 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_in transactions observed by the +// fuse_ctrl_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_monitor #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_in_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_in_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_in_monitor #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_in_monitor_s fuse_ctrl_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor_bfm.sv new file mode 100644 index 000000000..483519917 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_monitor_bfm.sv @@ -0,0 +1,218 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_in monitor through a virtual +// interface handle in the fuse_ctrl_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_in_if. +// +// Input signals from the fuse_ctrl_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_in_pkg_hdl::*; +`include "src/fuse_ctrl_in_macros.svh" + + +interface fuse_ctrl_in_monitor_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + ( fuse_ctrl_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_in_MONITOR_STRUCT + fuse_ctrl_in_monitor_s fuse_ctrl_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_i_i; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] alert_rx_i_i; + tri [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] obs_ctrl_i_i; + tri [$bits(otp_ast_req_t)-1:0] otp_ast_pwr_seq_h_i_i; + tri scan_en_i_i; + tri scan_rst_ni_i; + tri scanmode_i_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign edn_i_i = bus.edn_i; + assign alert_rx_i_i = bus.alert_rx_i; + assign obs_ctrl_i_i = bus.obs_ctrl_i; + assign otp_ast_pwr_seq_h_i_i = bus.otp_ast_pwr_seq_h_i; + assign scan_en_i_i = bus.scan_en_i; + assign scan_rst_ni_i = bus.scan_rst_ni; + assign scanmode_i_i = bus.scanmode_i; + + // Proxy handle to UVM monitor + fuse_ctrl_in_pkg::fuse_ctrl_in_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_in_configuration_s fuse_ctrl_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_in_monitor_s fuse_ctrl_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_in_monitor_struct.set_alert_rx_i + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_in_monitor_struct.xyz = edn_i_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_in_monitor_struct.xyz = alert_rx_i_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)-1:0] + // fuse_ctrl_in_monitor_struct.xyz = obs_ctrl_i_i; // [$bits(ast_pkg::ast_obs_ctrl_t)-1:0] + // fuse_ctrl_in_monitor_struct.xyz = otp_ast_pwr_seq_h_i_i; // [$bits(otp_ast_req_t)-1:0] + // fuse_ctrl_in_monitor_struct.xyz = scan_en_i_i; // + // fuse_ctrl_in_monitor_struct.xyz = scan_rst_ni_i; // + // fuse_ctrl_in_monitor_struct.xyz = scanmode_i_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_random_sequence.svh new file mode 100644 index 000000000..66b5a5d4a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_random_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_in_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_in_random_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_in_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_in_random_sequence::body()-fuse_ctrl_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_in_driver_bfm via the sequencer and fuse_ctrl_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_responder_sequence.svh new file mode 100644 index 000000000..e4e42b6aa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_responder_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_in_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_in_responder_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_in_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_sequence_base.svh new file mode 100644 index 000000000..ce6a3b740 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_sequence_base #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .RSP(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_in_sequence_base #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // variables + typedef fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_in_transaction_req_t; + fuse_ctrl_in_transaction_req_t req; + typedef fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_in_transaction_rsp_t; + fuse_ctrl_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction.svh new file mode 100644 index 000000000..f8a7fc400 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction.svh @@ -0,0 +1,219 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_transaction #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_in_transaction #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + caliptra_prim_alert_pkg::alert_rx_t set_alert_rx_i ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_in_monitor and fuse_ctrl_in_monitor_bfm + // This struct is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_MONITOR_STRUCT + fuse_ctrl_in_monitor_s fuse_ctrl_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_in_monitor_struct. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_in_driver_bfm. + // This struct is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_INITIATOR_STRUCT + fuse_ctrl_in_initiator_s fuse_ctrl_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_in_initiator_struct. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_in_driver and fuse_ctrl_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_in_driver_bfm. + // This struct is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_RESPONDER_STRUCT + fuse_ctrl_in_responder_s fuse_ctrl_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_in_responder_struct. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_in_macros.svh + `fuse_ctrl_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("set_alert_rx_i:0x%x ",set_alert_rx_i); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.set_alert_rx_i = RHS.set_alert_rx_i; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,set_alert_rx_i,"set_alert_rx_i"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction_coverage.svh new file mode 100644 index 000000000..5da482565 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_transaction_coverage.svh @@ -0,0 +1,102 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_in transaction information using +// a covergroup named fuse_ctrl_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_in_transaction_coverage #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_subscriber #(.T(fuse_ctrl_in_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_in_transaction_coverage #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + set_alert_rx_i: coverpoint coverage_trans.set_alert_rx_i; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/src/fuse_ctrl_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/yaml/fuse_ctrl_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/yaml/fuse_ctrl_in_interface.yaml new file mode 100644 index 000000000..333979905 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_in_pkg/yaml/fuse_ctrl_in_interface.yaml @@ -0,0 +1,64 @@ +uvmf: + interfaces: + fuse_ctrl_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AlertSyncOn + type: int + value: '3' + - name: RndConstLfrSeed + type: lfsr_seed_t + value: RndConstLfsrSeedDefault + - name: RndCnstLfsrPerm + type: lsfr_perm_t + value: RndCnstLfsrPermDefault + - name: MemInitFile + type: string + ports: + - dir: output + name: edn_i + reset_value: '''bz' + width: '[''$bits(edn_pkg::edn_req_t)'']' + - dir: output + name: alert_rx_i + reset_value: '''bz' + width: '[''NumAlerts * $bits(caliptra_prim_alert_pkg::alert_rx_t)'']' + - dir: output + name: obs_ctrl_i + reset_value: '''bz' + width: '[''$bits(ast_pkg::ast_obs_ctrl_t)'']' + - dir: output + name: otp_ast_pwr_seq_h_i + reset_value: '''bz' + width: '[''$bits(otp_ast_req_t)'']' + - dir: output + name: scan_en_i + reset_value: '''bz' + width: '1' + - dir: output + name: scan_rst_ni + reset_value: '''bz' + width: '1' + - dir: output + name: scanmode_i + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: set_alert_rx_i + type: caliptra_prim_alert_pkg::alert_rx_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.project new file mode 100644 index 000000000..da8a90eb7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_lc_otp_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.svproject new file mode 100644 index 000000000..6dac2c36a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/Makefile new file mode 100644 index 000000000..1ce37d99e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_lc_otp_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_lc_otp_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f + +fuse_ctrl_lc_otp_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f + +fuse_ctrl_lc_otp_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f + +COMP_fuse_ctrl_lc_otp_if_PKG_TGT_0 = q_comp_fuse_ctrl_lc_otp_if_pkg +COMP_fuse_ctrl_lc_otp_if_PKG_TGT_1 = v_comp_fuse_ctrl_lc_otp_if_pkg +COMP_fuse_ctrl_lc_otp_if_PKG_TGT = $(COMP_fuse_ctrl_lc_otp_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_lc_otp_if_pkg: $(COMP_fuse_ctrl_lc_otp_if_PKG_TGT) + +q_comp_fuse_ctrl_lc_otp_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG_XRTL) + +v_comp_fuse_ctrl_lc_otp_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_lc_otp_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_lc_otp_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_lc_otp_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_if_pkg += -I$(fuse_ctrl_lc_otp_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_if_pkg += $(fuse_ctrl_lc_otp_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_lc_otp_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_lc_otp_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_lc_otp_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_lc_otp_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/compile.do new file mode 100644 index 000000000..5f222a54a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_lc_otp_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if.compile new file mode 100644 index 000000000..ecb1301fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_lc_otp_if_hvl.compile + - fuse_ctrl_lc_otp_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_bfm.vinfo new file mode 100644 index 000000000..4007fc103 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_lc_otp_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_lc_otp_if_if.sv +src/fuse_ctrl_lc_otp_if_driver_bfm.sv +src/fuse_ctrl_lc_otp_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_common.compile new file mode 100644 index 000000000..0a9110502 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_lc_otp_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f new file mode 100644 index 000000000..30a25f810 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f new file mode 100644 index 000000000..0807a17da --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f new file mode 100644 index 000000000..e39f0bb0c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hdl.compile new file mode 100644 index 000000000..6d534830c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_lc_otp_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_lc_otp_if_if.sv + - src/fuse_ctrl_lc_otp_if_monitor_bfm.sv + - src/fuse_ctrl_lc_otp_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hvl.compile new file mode 100644 index 000000000..208b3d517 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_lc_otp_if_common.compile +incdir: + - . +src: + - fuse_ctrl_lc_otp_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.sv new file mode 100644 index 000000000..6bf19e8ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_lc_otp_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_lc_otp_if_macros.svh" + + export fuse_ctrl_lc_otp_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_lc_otp_if_typedefs.svh" + `include "src/fuse_ctrl_lc_otp_if_transaction.svh" + + `include "src/fuse_ctrl_lc_otp_if_configuration.svh" + `include "src/fuse_ctrl_lc_otp_if_driver.svh" + `include "src/fuse_ctrl_lc_otp_if_monitor.svh" + + `include "src/fuse_ctrl_lc_otp_if_transaction_coverage.svh" + `include "src/fuse_ctrl_lc_otp_if_sequence_base.svh" + `include "src/fuse_ctrl_lc_otp_if_random_sequence.svh" + + `include "src/fuse_ctrl_lc_otp_if_responder_sequence.svh" + `include "src/fuse_ctrl_lc_otp_if2reg_adapter.svh" + + `include "src/fuse_ctrl_lc_otp_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.vinfo new file mode 100644 index 000000000..f712ae9b4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_lc_otp_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_lc_otp_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.sv new file mode 100644 index 000000000..a4cdc7c70 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_lc_otp_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.vinfo new file mode 100644 index 000000000..a99ea0171 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_lc_otp_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_sve.F new file mode 100644 index 000000000..950466b92 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_if_pkg/fuse_ctrl_lc_otp_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if2reg_adapter.svh new file mode 100644 index 000000000..e9b1a7897 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_lc_otp_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_lc_otp_if2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_lc_otp_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_lc_otp_if_transaction trans_h = fuse_ctrl_lc_otp_if_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_lc_otp_if_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_lc_otp_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_agent.svh new file mode 100644 index 000000000..bc148927a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_lc_otp_if_configuration ), + .DRIVER_T(fuse_ctrl_lc_otp_if_driver ), + .MONITOR_T(fuse_ctrl_lc_otp_if_monitor ), + .COVERAGE_T(fuse_ctrl_lc_otp_if_transaction_coverage ), + .TRANS_T(fuse_ctrl_lc_otp_if_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_lc_otp_if_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_configuration.svh new file mode 100644 index 000000000..92685e229 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_lc_otp_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_lc_otp_if_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_lc_otp_if_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_lc_otp_if_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_lc_otp_if_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_lc_otp_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_CONFIGURATION_STRUCT + fuse_ctrl_lc_otp_if_configuration_s fuse_ctrl_lc_otp_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_lc_otp_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_if_configuration_struct. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_lc_otp_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_lc_otp_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_lc_otp_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_lc_otp_if_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_lc_otp_if_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_lc_otp_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_lc_otp_if_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver.svh new file mode 100644 index 000000000..d96c73f4f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_lc_otp_if_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_if_driver_bfm ), + .REQ(fuse_ctrl_lc_otp_if_transaction ), + .RSP(fuse_ctrl_lc_otp_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_if_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_lc_otp_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_lc_otp_if_driver_bfm. +`fuse_ctrl_lc_otp_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_if_initiator_s fuse_ctrl_lc_otp_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_lc_otp_if_driver_bfm. +`fuse_ctrl_lc_otp_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_if_responder_s fuse_ctrl_lc_otp_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_lc_otp_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_lc_otp_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_lc_otp_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_lc_otp_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver_bfm.sv new file mode 100644 index 000000000..5675f3b6c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_driver_bfm.sv @@ -0,0 +1,321 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_lc_otp_if signal driving. It is +// accessed by the uvm fuse_ctrl_lc_otp_if driver through a virtual interface +// handle in the fuse_ctrl_lc_otp_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_lc_otp_if_if. +// +// Input signals from the fuse_ctrl_lc_otp_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_lc_otp_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_if_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_if_macros.svh" + +interface fuse_ctrl_lc_otp_if_driver_bfm + (fuse_ctrl_lc_otp_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_i; + reg [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_o = 'bz; + tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_i; + reg [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.lc_otp_vendor_test_i = (initiator_responder == INITIATOR) ? lc_otp_vendor_test_i_o : 'bz; + assign lc_otp_vendor_test_i_i = bus.lc_otp_vendor_test_i; + assign bus.lc_otp_program_i = (initiator_responder == INITIATOR) ? lc_otp_program_i_o : 'bz; + assign lc_otp_program_i_i = bus.lc_otp_program_i; + assign bus.lc_dft_en_i = (initiator_responder == INITIATOR) ? lc_dft_en_i_o : 'bz; + assign lc_dft_en_i_i = bus.lc_dft_en_i; + assign bus.lc_escalate_en_i = (initiator_responder == INITIATOR) ? lc_escalate_en_i_o : 'bz; + assign lc_escalate_en_i_i = bus.lc_escalate_en_i; + assign bus.lc_check_byp_en_i = (initiator_responder == INITIATOR) ? lc_check_byp_en_i_o : 'bz; + assign lc_check_byp_en_i_i = bus.lc_check_byp_en_i; + + // Proxy handle to UVM driver + fuse_ctrl_lc_otp_if_pkg::fuse_ctrl_lc_otp_if_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_lc_otp_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_lc_otp_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_lc_otp_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_if_driver_bfm. + `fuse_ctrl_lc_otp_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_if_driver_bfm. + `fuse_ctrl_lc_otp_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + lc_otp_vendor_test_i_o <= 'bz; + lc_otp_program_i_o <= 'bz; + lc_dft_en_i_o <= 'bz; + lc_escalate_en_i_o <= 'bz; + lc_check_byp_en_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_lc_otp_if_configuration_s fuse_ctrl_lc_otp_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_lc_otp_if_initiator_s fuse_ctrl_lc_otp_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_lc_otp_if_responder_s fuse_ctrl_lc_otp_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_lc_otp_if_initiator_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Members within the fuse_ctrl_lc_otp_if_responder_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + initiator_struct = fuse_ctrl_lc_otp_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // lc_otp_vendor_test_i_o <= fuse_ctrl_lc_otp_if_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // lc_otp_program_i_o <= fuse_ctrl_lc_otp_if_initiator_struct.xyz; // [$bits(lc_otp_program_req_t)-1:0] + // lc_dft_en_i_o <= fuse_ctrl_lc_otp_if_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // lc_escalate_en_i_o <= fuse_ctrl_lc_otp_if_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // lc_check_byp_en_i_o <= fuse_ctrl_lc_otp_if_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_lc_otp_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_lc_otp_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_lc_otp_if_initiator_s fuse_ctrl_lc_otp_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_lc_otp_if_responder_s fuse_ctrl_lc_otp_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_lc_otp_if_initiator_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Variables within the fuse_ctrl_lc_otp_if_responder_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_lc_otp_if_responder_struct.xyz = lc_otp_vendor_test_i_i; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // fuse_ctrl_lc_otp_if_responder_struct.xyz = lc_otp_program_i_i; // [$bits(lc_otp_program_req_t)-1:0] + // fuse_ctrl_lc_otp_if_responder_struct.xyz = lc_dft_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_if_responder_struct.xyz = lc_escalate_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_if_responder_struct.xyz = lc_check_byp_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_lc_otp_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_lc_otp_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_if.sv new file mode 100644 index 000000000..523ae029b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_if.sv @@ -0,0 +1,98 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_lc_otp_if interface signals. +// It is instantiated once per fuse_ctrl_lc_otp_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_lc_otp_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_lc_otp_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_lc_otp_if_bus.lc_otp_vendor_test_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_if_bus.lc_otp_program_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_if_bus.lc_dft_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_if_bus.lc_escalate_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_if_bus.lc_check_byp_en_i), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_if_pkg_hdl::*; + +interface fuse_ctrl_lc_otp_if_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i, + inout tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_i, + input lc_otp_program_i, + input lc_dft_en_i, + input lc_escalate_en_i, + input lc_check_byp_en_i + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output lc_otp_vendor_test_i, + output lc_otp_program_i, + output lc_dft_en_i, + output lc_escalate_en_i, + output lc_check_byp_en_i + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_i, + input lc_otp_program_i, + input lc_dft_en_i, + input lc_escalate_en_i, + input lc_check_byp_en_i + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_macros.svh new file mode 100644 index 000000000..98f551beb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_macros.svh @@ -0,0 +1,153 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_lc_otp_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_lc_otp_if_configuration class. +// + `define fuse_ctrl_lc_otp_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_lc_otp_if_configuration_s; + + `define fuse_ctrl_lc_otp_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_if_configuration_s to_struct();\ + fuse_ctrl_lc_otp_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_lc_otp_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_lc_otp_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_lc_otp_if_configuration_s fuse_ctrl_lc_otp_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_lc_otp_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_lc_otp_if_transaction class. +// + `define fuse_ctrl_lc_otp_if_MONITOR_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_if_monitor_s; + + `define fuse_ctrl_lc_otp_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_if_monitor_s to_monitor_struct();\ + fuse_ctrl_lc_otp_if_monitor_struct = \ + { \ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_lc_otp_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_lc_otp_if_monitor_s fuse_ctrl_lc_otp_if_monitor_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_lc_otp_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_if_INITIATOR_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_if_initiator_s; + + `define fuse_ctrl_lc_otp_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_if_initiator_s to_initiator_struct();\ + fuse_ctrl_lc_otp_if_initiator_struct = \ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_lc_otp_if_initiator_s fuse_ctrl_lc_otp_if_initiator_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_lc_otp_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_if_RESPONDER_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_if_responder_s; + + `define fuse_ctrl_lc_otp_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_if_responder_s to_responder_struct();\ + fuse_ctrl_lc_otp_if_responder_struct = \ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_if_responder_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_lc_otp_if_responder_s fuse_ctrl_lc_otp_if_responder_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor.svh new file mode 100644 index 000000000..cbf67060e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_lc_otp_if transactions observed by the +// fuse_ctrl_lc_otp_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_lc_otp_if_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_if_monitor_bfm ), + .TRANS_T(fuse_ctrl_lc_otp_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_if_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_lc_otp_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_lc_otp_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_lc_otp_if_monitor_s fuse_ctrl_lc_otp_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_lc_otp_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor_bfm.sv new file mode 100644 index 000000000..8ac6ebeac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_monitor_bfm.sv @@ -0,0 +1,202 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_lc_otp_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_lc_otp_if monitor through a virtual +// interface handle in the fuse_ctrl_lc_otp_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_lc_otp_if_if. +// +// Input signals from the fuse_ctrl_lc_otp_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_lc_otp_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_if_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_if_macros.svh" + + +interface fuse_ctrl_lc_otp_if_monitor_bfm + ( fuse_ctrl_lc_otp_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_lc_otp_if_MONITOR_STRUCT + fuse_ctrl_lc_otp_if_monitor_s fuse_ctrl_lc_otp_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_lc_otp_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_i; + tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign lc_otp_vendor_test_i_i = bus.lc_otp_vendor_test_i; + assign lc_otp_program_i_i = bus.lc_otp_program_i; + assign lc_dft_en_i_i = bus.lc_dft_en_i; + assign lc_escalate_en_i_i = bus.lc_escalate_en_i; + assign lc_check_byp_en_i_i = bus.lc_check_byp_en_i; + + // Proxy handle to UVM monitor + fuse_ctrl_lc_otp_if_pkg::fuse_ctrl_lc_otp_if_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_lc_otp_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_lc_otp_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_lc_otp_if_configuration_s fuse_ctrl_lc_otp_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_lc_otp_if_monitor_s fuse_ctrl_lc_otp_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_lc_otp_if_monitor_struct.lc_dft_en_i + // // fuse_ctrl_lc_otp_if_monitor_struct.lc_escalate_en_i + // // fuse_ctrl_lc_otp_if_monitor_struct.lc_check_byp_en_i + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_lc_otp_if_monitor_struct.xyz = lc_otp_vendor_test_i_i; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // fuse_ctrl_lc_otp_if_monitor_struct.xyz = lc_otp_program_i_i; // [$bits(lc_otp_program_req_t)-1:0] + // fuse_ctrl_lc_otp_if_monitor_struct.xyz = lc_dft_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_if_monitor_struct.xyz = lc_escalate_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_if_monitor_struct.xyz = lc_check_byp_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_random_sequence.svh new file mode 100644 index 000000000..0fce942fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_lc_otp_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_lc_otp_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_random_sequence + extends fuse_ctrl_lc_otp_if_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_if_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_lc_otp_if_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_lc_otp_if_random_sequence::body()-fuse_ctrl_lc_otp_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_lc_otp_if_driver_bfm via the sequencer and fuse_ctrl_lc_otp_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_lc_otp_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_responder_sequence.svh new file mode 100644 index 000000000..8636e02b0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_responder_sequence + extends fuse_ctrl_lc_otp_if_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_if_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_lc_otp_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_lc_otp_if_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_sequence_base.svh new file mode 100644 index 000000000..3be42a152 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_lc_otp_if_transaction ), + .RSP(fuse_ctrl_lc_otp_if_transaction )); + + `uvm_object_utils( fuse_ctrl_lc_otp_if_sequence_base ) + + // variables + typedef fuse_ctrl_lc_otp_if_transaction fuse_ctrl_lc_otp_if_transaction_req_t; + fuse_ctrl_lc_otp_if_transaction_req_t req; + typedef fuse_ctrl_lc_otp_if_transaction fuse_ctrl_lc_otp_if_transaction_rsp_t; + fuse_ctrl_lc_otp_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_lc_otp_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_lc_otp_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction.svh new file mode 100644 index 000000000..695d6b043 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction.svh @@ -0,0 +1,201 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_lc_otp_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_lc_otp_if_transaction ) + + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_lc_otp_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_lc_otp_if_monitor and fuse_ctrl_lc_otp_if_monitor_bfm + // This struct is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_MONITOR_STRUCT + fuse_ctrl_lc_otp_if_monitor_s fuse_ctrl_lc_otp_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_if_monitor_struct. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_if_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_if_initiator_s fuse_ctrl_lc_otp_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_if_initiator_struct. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_lc_otp_if_driver and fuse_ctrl_lc_otp_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_if_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_if_responder_s fuse_ctrl_lc_otp_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_if_responder_struct. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_if_macros.svh + `fuse_ctrl_lc_otp_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("lc_dft_en_i:0x%x lc_escalate_en_i:0x%x lc_check_byp_en_i:0x%x ",lc_dft_en_i,lc_escalate_en_i,lc_check_byp_en_i); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_lc_otp_if_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_lc_otp_if_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.lc_dft_en_i = RHS.lc_dft_en_i; + this.lc_escalate_en_i = RHS.lc_escalate_en_i; + this.lc_check_byp_en_i = RHS.lc_check_byp_en_i; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_lc_otp_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,lc_dft_en_i,"lc_dft_en_i"); + $add_attribute(transaction_view_h,lc_escalate_en_i,"lc_escalate_en_i"); + $add_attribute(transaction_view_h,lc_check_byp_en_i,"lc_check_byp_en_i"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction_coverage.svh new file mode 100644 index 000000000..d0cfad043 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_transaction_coverage.svh @@ -0,0 +1,86 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_lc_otp_if transaction information using +// a covergroup named fuse_ctrl_lc_otp_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_if_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_lc_otp_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_if_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_lc_otp_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + lc_dft_en_i: coverpoint coverage_trans.lc_dft_en_i; + lc_escalate_en_i: coverpoint coverage_trans.lc_escalate_en_i; + lc_check_byp_en_i: coverpoint coverage_trans.lc_check_byp_en_i; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_lc_otp_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_lc_otp_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_lc_otp_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/src/fuse_ctrl_lc_otp_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/yaml/fuse_ctrl_lc_otp_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/yaml/fuse_ctrl_lc_otp_if_interface.yaml new file mode 100644 index 000000000..d24f3aef1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_if_pkg/yaml/fuse_ctrl_lc_otp_if_interface.yaml @@ -0,0 +1,57 @@ +uvmf: + interfaces: + fuse_ctrl_lc_otp_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: output + name: lc_otp_vendor_test_i + reset_value: '''bz' + width: '[''$bits(lc_otp_vendor_test_req_t)'']' + - dir: output + name: lc_otp_program_i + reset_value: '''bz' + width: '[''$bits(lc_otp_program_req_t)'']' + - dir: output + name: lc_dft_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + - dir: output + name: lc_escalate_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + - dir: output + name: lc_check_byp_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_dft_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_escalate_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_check_byp_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.project new file mode 100644 index 000000000..991dede72 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_lc_otp_in_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.svproject new file mode 100644 index 000000000..77a2ded66 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/Makefile new file mode 100644 index 000000000..1b21f7ed4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_lc_otp_in_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_lc_otp_in_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hvl.f + +fuse_ctrl_lc_otp_in_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hdl.f + +fuse_ctrl_lc_otp_in_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_xrtl.f + +COMP_fuse_ctrl_lc_otp_in_if_PKG_TGT_0 = q_comp_fuse_ctrl_lc_otp_in_if_pkg +COMP_fuse_ctrl_lc_otp_in_if_PKG_TGT_1 = v_comp_fuse_ctrl_lc_otp_in_if_pkg +COMP_fuse_ctrl_lc_otp_in_if_PKG_TGT = $(COMP_fuse_ctrl_lc_otp_in_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_lc_otp_in_if_pkg: $(COMP_fuse_ctrl_lc_otp_in_if_PKG_TGT) + +q_comp_fuse_ctrl_lc_otp_in_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_in_if_PKG_XRTL) + +v_comp_fuse_ctrl_lc_otp_in_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_in_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_lc_otp_in_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_lc_otp_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_in_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_lc_otp_in_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_in_if_pkg += -I$(fuse_ctrl_lc_otp_in_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_in_if_pkg += $(fuse_ctrl_lc_otp_in_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_lc_otp_in_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_lc_otp_in_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_lc_otp_in_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_lc_otp_in_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/compile.do new file mode 100644 index 000000000..0734f2115 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_lc_otp_in_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if.compile new file mode 100644 index 000000000..aa08b9bb4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_lc_otp_in_if_hvl.compile + - fuse_ctrl_lc_otp_in_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_bfm.vinfo new file mode 100644 index 000000000..186ee8240 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_lc_otp_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_lc_otp_in_if_if.sv +src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv +src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_common.compile new file mode 100644 index 000000000..fa80957cc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_lc_otp_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hdl.f new file mode 100644 index 000000000..5c87977b4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hvl.f new file mode 100644 index 000000000..443604421 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_xrtl.f new file mode 100644 index 000000000..2752b1fda --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hdl.compile new file mode 100644 index 000000000..d4b535457 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_lc_otp_in_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_lc_otp_in_if_if.sv + - src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv + - src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hvl.compile new file mode 100644 index 000000000..4dcbd0438 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_lc_otp_in_if_common.compile +incdir: + - . +src: + - fuse_ctrl_lc_otp_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.sv new file mode 100644 index 000000000..222ac1f65 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_in_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_lc_otp_in_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_lc_otp_in_if_macros.svh" + + export fuse_ctrl_lc_otp_in_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_lc_otp_in_if_typedefs.svh" + `include "src/fuse_ctrl_lc_otp_in_if_transaction.svh" + + `include "src/fuse_ctrl_lc_otp_in_if_configuration.svh" + `include "src/fuse_ctrl_lc_otp_in_if_driver.svh" + `include "src/fuse_ctrl_lc_otp_in_if_monitor.svh" + + `include "src/fuse_ctrl_lc_otp_in_if_transaction_coverage.svh" + `include "src/fuse_ctrl_lc_otp_in_if_sequence_base.svh" + `include "src/fuse_ctrl_lc_otp_in_if_random_sequence.svh" + + `include "src/fuse_ctrl_lc_otp_in_if_responder_sequence.svh" + `include "src/fuse_ctrl_lc_otp_in_if2reg_adapter.svh" + + `include "src/fuse_ctrl_lc_otp_in_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.vinfo new file mode 100644 index 000000000..867918714 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_lc_otp_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_lc_otp_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.sv new file mode 100644 index 000000000..53d891062 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_in_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_lc_otp_in_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_lc_otp_in_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.vinfo new file mode 100644 index 000000000..47ec6ae84 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_lc_otp_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_sve.F new file mode 100644 index 000000000..3ae1e74b1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/fuse_ctrl_lc_otp_in_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if2reg_adapter.svh new file mode 100644 index 000000000..56a7c8934 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_lc_otp_in_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_lc_otp_in_if2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_lc_otp_in_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_lc_otp_in_if_transaction trans_h = fuse_ctrl_lc_otp_in_if_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_lc_otp_in_if_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_lc_otp_in_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_agent.svh new file mode 100644 index 000000000..4950f6a51 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_lc_otp_in_if_configuration ), + .DRIVER_T(fuse_ctrl_lc_otp_in_if_driver ), + .MONITOR_T(fuse_ctrl_lc_otp_in_if_monitor ), + .COVERAGE_T(fuse_ctrl_lc_otp_in_if_transaction_coverage ), + .TRANS_T(fuse_ctrl_lc_otp_in_if_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_if_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_configuration.svh new file mode 100644 index 000000000..36f931b74 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_lc_otp_in_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_lc_otp_in_if_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_lc_otp_in_if_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_lc_otp_in_if_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_lc_otp_in_if_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_lc_otp_in_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_CONFIGURATION_STRUCT + fuse_ctrl_lc_otp_in_if_configuration_s fuse_ctrl_lc_otp_in_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_lc_otp_in_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_if_configuration_struct. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_lc_otp_in_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_lc_otp_in_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_lc_otp_in_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_lc_otp_in_if_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_lc_otp_in_if_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_lc_otp_in_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_in_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_lc_otp_in_if_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver.svh new file mode 100644 index 000000000..b5699c94f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_lc_otp_in_if_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_in_if_driver_bfm ), + .REQ(fuse_ctrl_lc_otp_in_if_transaction ), + .RSP(fuse_ctrl_lc_otp_in_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_if_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_lc_otp_in_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_lc_otp_in_if_driver and fuse_ctrl_lc_otp_in_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_lc_otp_in_if_driver_bfm. +`fuse_ctrl_lc_otp_in_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_in_if_initiator_s fuse_ctrl_lc_otp_in_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_lc_otp_in_if_driver and fuse_ctrl_lc_otp_in_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_lc_otp_in_if_driver_bfm. +`fuse_ctrl_lc_otp_in_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_in_if_responder_s fuse_ctrl_lc_otp_in_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_lc_otp_in_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_lc_otp_in_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_lc_otp_in_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_lc_otp_in_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv new file mode 100644 index 000000000..5cc5aed55 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_driver_bfm.sv @@ -0,0 +1,321 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_lc_otp_in_if signal driving. It is +// accessed by the uvm fuse_ctrl_lc_otp_in_if driver through a virtual interface +// handle in the fuse_ctrl_lc_otp_in_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_lc_otp_in_if_if. +// +// Input signals from the fuse_ctrl_lc_otp_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_lc_otp_in_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_in_if_macros.svh" + +interface fuse_ctrl_lc_otp_in_if_driver_bfm + (fuse_ctrl_lc_otp_in_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_in_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_i; + reg [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_o = 'bz; + tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_i; + reg [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.lc_otp_vendor_test_i = (initiator_responder == INITIATOR) ? lc_otp_vendor_test_i_o : 'bz; + assign lc_otp_vendor_test_i_i = bus.lc_otp_vendor_test_i; + assign bus.lc_otp_program_i = (initiator_responder == INITIATOR) ? lc_otp_program_i_o : 'bz; + assign lc_otp_program_i_i = bus.lc_otp_program_i; + assign bus.lc_dft_en_i = (initiator_responder == INITIATOR) ? lc_dft_en_i_o : 'bz; + assign lc_dft_en_i_i = bus.lc_dft_en_i; + assign bus.lc_escalate_en_i = (initiator_responder == INITIATOR) ? lc_escalate_en_i_o : 'bz; + assign lc_escalate_en_i_i = bus.lc_escalate_en_i; + assign bus.lc_check_byp_en_i = (initiator_responder == INITIATOR) ? lc_check_byp_en_i_o : 'bz; + assign lc_check_byp_en_i_i = bus.lc_check_byp_en_i; + + // Proxy handle to UVM driver + fuse_ctrl_lc_otp_in_if_pkg::fuse_ctrl_lc_otp_in_if_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_lc_otp_in_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_lc_otp_in_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_lc_otp_in_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_in_if_driver and fuse_ctrl_lc_otp_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_in_if_driver_bfm. + `fuse_ctrl_lc_otp_in_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_in_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_lc_otp_in_if_driver and fuse_ctrl_lc_otp_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_in_if_driver_bfm. + `fuse_ctrl_lc_otp_in_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_in_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + lc_otp_vendor_test_i_o <= 'bz; + lc_otp_program_i_o <= 'bz; + lc_dft_en_i_o <= 'bz; + lc_escalate_en_i_o <= 'bz; + lc_check_byp_en_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_lc_otp_in_if_configuration_s fuse_ctrl_lc_otp_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_lc_otp_in_if_initiator_s fuse_ctrl_lc_otp_in_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_lc_otp_in_if_responder_s fuse_ctrl_lc_otp_in_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_lc_otp_in_if_initiator_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Members within the fuse_ctrl_lc_otp_in_if_responder_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + initiator_struct = fuse_ctrl_lc_otp_in_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // lc_otp_vendor_test_i_o <= fuse_ctrl_lc_otp_in_if_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // lc_otp_program_i_o <= fuse_ctrl_lc_otp_in_if_initiator_struct.xyz; // [$bits(lc_otp_program_req_t)-1:0] + // lc_dft_en_i_o <= fuse_ctrl_lc_otp_in_if_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // lc_escalate_en_i_o <= fuse_ctrl_lc_otp_in_if_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // lc_check_byp_en_i_o <= fuse_ctrl_lc_otp_in_if_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_lc_otp_in_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_lc_otp_in_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_lc_otp_in_if_initiator_s fuse_ctrl_lc_otp_in_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_lc_otp_in_if_responder_s fuse_ctrl_lc_otp_in_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_lc_otp_in_if_initiator_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Variables within the fuse_ctrl_lc_otp_in_if_responder_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_lc_otp_in_if_responder_struct.xyz = lc_otp_vendor_test_i_i; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // fuse_ctrl_lc_otp_in_if_responder_struct.xyz = lc_otp_program_i_i; // [$bits(lc_otp_program_req_t)-1:0] + // fuse_ctrl_lc_otp_in_if_responder_struct.xyz = lc_dft_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_if_responder_struct.xyz = lc_escalate_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_if_responder_struct.xyz = lc_check_byp_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_lc_otp_in_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_lc_otp_in_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_if.sv new file mode 100644 index 000000000..b66aee0c5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_if.sv @@ -0,0 +1,98 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_lc_otp_in_if interface signals. +// It is instantiated once per fuse_ctrl_lc_otp_in_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_lc_otp_in_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_lc_otp_in_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_lc_otp_in_if_bus.lc_otp_vendor_test_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_if_bus.lc_otp_program_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_if_bus.lc_dft_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_if_bus.lc_escalate_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_if_bus.lc_check_byp_en_i), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_in_if_pkg_hdl::*; + +interface fuse_ctrl_lc_otp_in_if_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i, + inout tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_i, + input lc_otp_program_i, + input lc_dft_en_i, + input lc_escalate_en_i, + input lc_check_byp_en_i + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output lc_otp_vendor_test_i, + output lc_otp_program_i, + output lc_dft_en_i, + output lc_escalate_en_i, + output lc_check_byp_en_i + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_i, + input lc_otp_program_i, + input lc_dft_en_i, + input lc_escalate_en_i, + input lc_check_byp_en_i + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_macros.svh new file mode 100644 index 000000000..8a54f0aa1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_macros.svh @@ -0,0 +1,153 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_lc_otp_in_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_lc_otp_in_if_configuration class. +// + `define fuse_ctrl_lc_otp_in_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_lc_otp_in_if_configuration_s; + + `define fuse_ctrl_lc_otp_in_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_if_configuration_s to_struct();\ + fuse_ctrl_lc_otp_in_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_lc_otp_in_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_lc_otp_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_lc_otp_in_if_configuration_s fuse_ctrl_lc_otp_in_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_lc_otp_in_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_lc_otp_in_if_transaction class. +// + `define fuse_ctrl_lc_otp_in_if_MONITOR_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_in_if_monitor_s; + + `define fuse_ctrl_lc_otp_in_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_if_monitor_s to_monitor_struct();\ + fuse_ctrl_lc_otp_in_if_monitor_struct = \ + { \ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_in_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_lc_otp_in_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_lc_otp_in_if_monitor_s fuse_ctrl_lc_otp_in_if_monitor_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_in_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_lc_otp_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_in_if_INITIATOR_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_in_if_initiator_s; + + `define fuse_ctrl_lc_otp_in_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_if_initiator_s to_initiator_struct();\ + fuse_ctrl_lc_otp_in_if_initiator_struct = \ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_in_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_in_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_lc_otp_in_if_initiator_s fuse_ctrl_lc_otp_in_if_initiator_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_in_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_lc_otp_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_in_if_RESPONDER_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_in_if_responder_s; + + `define fuse_ctrl_lc_otp_in_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_if_responder_s to_responder_struct();\ + fuse_ctrl_lc_otp_in_if_responder_struct = \ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_in_if_responder_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_in_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_lc_otp_in_if_responder_s fuse_ctrl_lc_otp_in_if_responder_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_in_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor.svh new file mode 100644 index 000000000..02ed6b9d5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_lc_otp_in_if transactions observed by the +// fuse_ctrl_lc_otp_in_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_lc_otp_in_if_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_in_if_monitor_bfm ), + .TRANS_T(fuse_ctrl_lc_otp_in_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_if_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_lc_otp_in_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_lc_otp_in_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_lc_otp_in_if_monitor_s fuse_ctrl_lc_otp_in_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_lc_otp_in_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv new file mode 100644 index 000000000..cd1494da0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_monitor_bfm.sv @@ -0,0 +1,202 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_lc_otp_in_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_lc_otp_in_if monitor through a virtual +// interface handle in the fuse_ctrl_lc_otp_in_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_lc_otp_in_if_if. +// +// Input signals from the fuse_ctrl_lc_otp_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_lc_otp_in_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_in_if_macros.svh" + + +interface fuse_ctrl_lc_otp_in_if_monitor_bfm + ( fuse_ctrl_lc_otp_in_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_in_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_lc_otp_in_if_MONITOR_STRUCT + fuse_ctrl_lc_otp_in_if_monitor_s fuse_ctrl_lc_otp_in_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_lc_otp_in_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_i; + tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign lc_otp_vendor_test_i_i = bus.lc_otp_vendor_test_i; + assign lc_otp_program_i_i = bus.lc_otp_program_i; + assign lc_dft_en_i_i = bus.lc_dft_en_i; + assign lc_escalate_en_i_i = bus.lc_escalate_en_i; + assign lc_check_byp_en_i_i = bus.lc_check_byp_en_i; + + // Proxy handle to UVM monitor + fuse_ctrl_lc_otp_in_if_pkg::fuse_ctrl_lc_otp_in_if_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_lc_otp_in_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_lc_otp_in_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_lc_otp_in_if_configuration_s fuse_ctrl_lc_otp_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_lc_otp_in_if_monitor_s fuse_ctrl_lc_otp_in_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_lc_otp_in_if_monitor_struct.lc_dft_en_i + // // fuse_ctrl_lc_otp_in_if_monitor_struct.lc_escalate_en_i + // // fuse_ctrl_lc_otp_in_if_monitor_struct.lc_check_byp_en_i + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_lc_otp_in_if_monitor_struct.xyz = lc_otp_vendor_test_i_i; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // fuse_ctrl_lc_otp_in_if_monitor_struct.xyz = lc_otp_program_i_i; // [$bits(lc_otp_program_req_t)-1:0] + // fuse_ctrl_lc_otp_in_if_monitor_struct.xyz = lc_dft_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_if_monitor_struct.xyz = lc_escalate_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_if_monitor_struct.xyz = lc_check_byp_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_random_sequence.svh new file mode 100644 index 000000000..d3283cbbd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_lc_otp_in_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_lc_otp_in_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_random_sequence + extends fuse_ctrl_lc_otp_in_if_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_in_if_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_lc_otp_in_if_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_lc_otp_in_if_random_sequence::body()-fuse_ctrl_lc_otp_in_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_lc_otp_in_if_driver_bfm via the sequencer and fuse_ctrl_lc_otp_in_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_lc_otp_in_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_responder_sequence.svh new file mode 100644 index 000000000..4f7b3dcf7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_responder_sequence + extends fuse_ctrl_lc_otp_in_if_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_in_if_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_lc_otp_in_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_lc_otp_in_if_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_sequence_base.svh new file mode 100644 index 000000000..d92d33cf2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_lc_otp_in_if_transaction ), + .RSP(fuse_ctrl_lc_otp_in_if_transaction )); + + `uvm_object_utils( fuse_ctrl_lc_otp_in_if_sequence_base ) + + // variables + typedef fuse_ctrl_lc_otp_in_if_transaction fuse_ctrl_lc_otp_in_if_transaction_req_t; + fuse_ctrl_lc_otp_in_if_transaction_req_t req; + typedef fuse_ctrl_lc_otp_in_if_transaction fuse_ctrl_lc_otp_in_if_transaction_rsp_t; + fuse_ctrl_lc_otp_in_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_lc_otp_in_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_lc_otp_in_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction.svh new file mode 100644 index 000000000..9a35652c3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction.svh @@ -0,0 +1,201 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_lc_otp_in_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_lc_otp_in_if_transaction ) + + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_lc_otp_in_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_lc_otp_in_if_monitor and fuse_ctrl_lc_otp_in_if_monitor_bfm + // This struct is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_MONITOR_STRUCT + fuse_ctrl_lc_otp_in_if_monitor_s fuse_ctrl_lc_otp_in_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_in_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_if_monitor_struct. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_in_if_driver and fuse_ctrl_lc_otp_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_in_if_initiator_s fuse_ctrl_lc_otp_in_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_in_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_if_initiator_struct. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_lc_otp_in_if_driver and fuse_ctrl_lc_otp_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_in_if_responder_s fuse_ctrl_lc_otp_in_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_in_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_if_responder_struct. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_if_macros.svh + `fuse_ctrl_lc_otp_in_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("lc_dft_en_i:0x%x lc_escalate_en_i:0x%x lc_check_byp_en_i:0x%x ",lc_dft_en_i,lc_escalate_en_i,lc_check_byp_en_i); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_lc_otp_in_if_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_lc_otp_in_if_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.lc_dft_en_i = RHS.lc_dft_en_i; + this.lc_escalate_en_i = RHS.lc_escalate_en_i; + this.lc_check_byp_en_i = RHS.lc_check_byp_en_i; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_lc_otp_in_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,lc_dft_en_i,"lc_dft_en_i"); + $add_attribute(transaction_view_h,lc_escalate_en_i,"lc_escalate_en_i"); + $add_attribute(transaction_view_h,lc_check_byp_en_i,"lc_check_byp_en_i"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction_coverage.svh new file mode 100644 index 000000000..6c47ed21e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_transaction_coverage.svh @@ -0,0 +1,86 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_lc_otp_in_if transaction information using +// a covergroup named fuse_ctrl_lc_otp_in_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_if_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_lc_otp_in_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_if_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_lc_otp_in_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + lc_dft_en_i: coverpoint coverage_trans.lc_dft_en_i; + lc_escalate_en_i: coverpoint coverage_trans.lc_escalate_en_i; + lc_check_byp_en_i: coverpoint coverage_trans.lc_check_byp_en_i; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_lc_otp_in_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_lc_otp_in_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_in_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_lc_otp_in_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/src/fuse_ctrl_lc_otp_in_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/yaml/fuse_ctrl_lc_otp_in_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/yaml/fuse_ctrl_lc_otp_in_if_interface.yaml new file mode 100644 index 000000000..c47ea5a7d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_if_pkg/yaml/fuse_ctrl_lc_otp_in_if_interface.yaml @@ -0,0 +1,57 @@ +uvmf: + interfaces: + fuse_ctrl_lc_otp_in_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: output + name: lc_otp_vendor_test_i + reset_value: '''bz' + width: '[''$bits(lc_otp_vendor_test_req_t)'']' + - dir: output + name: lc_otp_program_i + reset_value: '''bz' + width: '[''$bits(lc_otp_program_req_t)'']' + - dir: output + name: lc_dft_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + - dir: output + name: lc_escalate_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + - dir: output + name: lc_check_byp_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_dft_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_escalate_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_check_byp_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.project new file mode 100644 index 000000000..bc9bb7a1d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_lc_otp_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.svproject new file mode 100644 index 000000000..e267e6c41 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/Makefile new file mode 100644 index 000000000..48df82f15 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_lc_otp_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_lc_otp_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hvl.f + +fuse_ctrl_lc_otp_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hdl.f + +fuse_ctrl_lc_otp_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_xrtl.f + +COMP_fuse_ctrl_lc_otp_in_PKG_TGT_0 = q_comp_fuse_ctrl_lc_otp_in_pkg +COMP_fuse_ctrl_lc_otp_in_PKG_TGT_1 = v_comp_fuse_ctrl_lc_otp_in_pkg +COMP_fuse_ctrl_lc_otp_in_PKG_TGT = $(COMP_fuse_ctrl_lc_otp_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_lc_otp_in_pkg: $(COMP_fuse_ctrl_lc_otp_in_PKG_TGT) + +q_comp_fuse_ctrl_lc_otp_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_in_PKG_XRTL) + +v_comp_fuse_ctrl_lc_otp_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_lc_otp_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_lc_otp_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_lc_otp_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_in_pkg += -I$(fuse_ctrl_lc_otp_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_in_pkg += $(fuse_ctrl_lc_otp_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_lc_otp_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_lc_otp_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_lc_otp_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_lc_otp_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/compile.do new file mode 100644 index 000000000..2334cca94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_lc_otp_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in.compile new file mode 100644 index 000000000..934282f83 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_lc_otp_in_hvl.compile + - fuse_ctrl_lc_otp_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_bfm.vinfo new file mode 100644 index 000000000..35c34c5f1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_lc_otp_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_lc_otp_in_if.sv +src/fuse_ctrl_lc_otp_in_driver_bfm.sv +src/fuse_ctrl_lc_otp_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_common.compile new file mode 100644 index 000000000..5683974c1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_lc_otp_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hdl.f new file mode 100644 index 000000000..fd87f109b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hvl.f new file mode 100644 index 000000000..ea2637ffb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_xrtl.f new file mode 100644 index 000000000..736ca19e3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hdl.compile new file mode 100644 index 000000000..9def84f00 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_lc_otp_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_lc_otp_in_if.sv + - src/fuse_ctrl_lc_otp_in_monitor_bfm.sv + - src/fuse_ctrl_lc_otp_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hvl.compile new file mode 100644 index 000000000..03742057a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_lc_otp_in_common.compile +incdir: + - . +src: + - fuse_ctrl_lc_otp_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.sv new file mode 100644 index 000000000..707771742 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_lc_otp_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_lc_otp_in_macros.svh" + + export fuse_ctrl_lc_otp_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_lc_otp_in_typedefs.svh" + `include "src/fuse_ctrl_lc_otp_in_transaction.svh" + + `include "src/fuse_ctrl_lc_otp_in_configuration.svh" + `include "src/fuse_ctrl_lc_otp_in_driver.svh" + `include "src/fuse_ctrl_lc_otp_in_monitor.svh" + + `include "src/fuse_ctrl_lc_otp_in_transaction_coverage.svh" + `include "src/fuse_ctrl_lc_otp_in_sequence_base.svh" + `include "src/fuse_ctrl_lc_otp_in_random_sequence.svh" + + `include "src/fuse_ctrl_lc_otp_in_responder_sequence.svh" + `include "src/fuse_ctrl_lc_otp_in2reg_adapter.svh" + + `include "src/fuse_ctrl_lc_otp_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.vinfo new file mode 100644 index 000000000..a51e3e02c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_lc_otp_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_lc_otp_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.sv new file mode 100644 index 000000000..e1761c3ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_lc_otp_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_lc_otp_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.vinfo new file mode 100644 index 000000000..536dd9eed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_lc_otp_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_sve.F new file mode 100644 index 000000000..1f476e946 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_in_pkg/fuse_ctrl_lc_otp_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in2reg_adapter.svh new file mode 100644 index 000000000..b1d2bb59c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_lc_otp_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_lc_otp_in2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_lc_otp_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_lc_otp_in_transaction trans_h = fuse_ctrl_lc_otp_in_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_lc_otp_in_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_lc_otp_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_agent.svh new file mode 100644 index 000000000..1bcc44562 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_lc_otp_in_configuration ), + .DRIVER_T(fuse_ctrl_lc_otp_in_driver ), + .MONITOR_T(fuse_ctrl_lc_otp_in_monitor ), + .COVERAGE_T(fuse_ctrl_lc_otp_in_transaction_coverage ), + .TRANS_T(fuse_ctrl_lc_otp_in_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_configuration.svh new file mode 100644 index 000000000..3d01dbb4f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_lc_otp_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_lc_otp_in_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_lc_otp_in_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_lc_otp_in_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_lc_otp_in_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_lc_otp_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_CONFIGURATION_STRUCT + fuse_ctrl_lc_otp_in_configuration_s fuse_ctrl_lc_otp_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_lc_otp_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_configuration_struct. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_lc_otp_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_lc_otp_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_lc_otp_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_lc_otp_in_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_lc_otp_in_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_lc_otp_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_lc_otp_in_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver.svh new file mode 100644 index 000000000..fc0a2193e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_lc_otp_in_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_in_driver_bfm ), + .REQ(fuse_ctrl_lc_otp_in_transaction ), + .RSP(fuse_ctrl_lc_otp_in_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_lc_otp_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_lc_otp_in_driver and fuse_ctrl_lc_otp_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_lc_otp_in_driver_bfm. +`fuse_ctrl_lc_otp_in_INITIATOR_STRUCT + fuse_ctrl_lc_otp_in_initiator_s fuse_ctrl_lc_otp_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_lc_otp_in_driver and fuse_ctrl_lc_otp_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_lc_otp_in_driver_bfm. +`fuse_ctrl_lc_otp_in_RESPONDER_STRUCT + fuse_ctrl_lc_otp_in_responder_s fuse_ctrl_lc_otp_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_lc_otp_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_lc_otp_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_lc_otp_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_lc_otp_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver_bfm.sv new file mode 100644 index 000000000..15738caa7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_driver_bfm.sv @@ -0,0 +1,321 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_lc_otp_in signal driving. It is +// accessed by the uvm fuse_ctrl_lc_otp_in driver through a virtual interface +// handle in the fuse_ctrl_lc_otp_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_lc_otp_in_if. +// +// Input signals from the fuse_ctrl_lc_otp_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_lc_otp_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_in_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_in_macros.svh" + +interface fuse_ctrl_lc_otp_in_driver_bfm + (fuse_ctrl_lc_otp_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_i; + reg [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_o = 'bz; + tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_i; + reg [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_o = 'bz; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_i; + reg [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.lc_otp_vendor_test_i = (initiator_responder == INITIATOR) ? lc_otp_vendor_test_i_o : 'bz; + assign lc_otp_vendor_test_i_i = bus.lc_otp_vendor_test_i; + assign bus.lc_otp_program_i = (initiator_responder == INITIATOR) ? lc_otp_program_i_o : 'bz; + assign lc_otp_program_i_i = bus.lc_otp_program_i; + assign bus.lc_dft_en_i = (initiator_responder == INITIATOR) ? lc_dft_en_i_o : 'bz; + assign lc_dft_en_i_i = bus.lc_dft_en_i; + assign bus.lc_escalate_en_i = (initiator_responder == INITIATOR) ? lc_escalate_en_i_o : 'bz; + assign lc_escalate_en_i_i = bus.lc_escalate_en_i; + assign bus.lc_check_byp_en_i = (initiator_responder == INITIATOR) ? lc_check_byp_en_i_o : 'bz; + assign lc_check_byp_en_i_i = bus.lc_check_byp_en_i; + + // Proxy handle to UVM driver + fuse_ctrl_lc_otp_in_pkg::fuse_ctrl_lc_otp_in_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_lc_otp_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_lc_otp_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_lc_otp_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_in_driver and fuse_ctrl_lc_otp_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_in_driver_bfm. + `fuse_ctrl_lc_otp_in_INITIATOR_STRUCT + fuse_ctrl_lc_otp_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_lc_otp_in_driver and fuse_ctrl_lc_otp_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_in_driver_bfm. + `fuse_ctrl_lc_otp_in_RESPONDER_STRUCT + fuse_ctrl_lc_otp_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + lc_otp_vendor_test_i_o <= 'bz; + lc_otp_program_i_o <= 'bz; + lc_dft_en_i_o <= 'bz; + lc_escalate_en_i_o <= 'bz; + lc_check_byp_en_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_lc_otp_in_configuration_s fuse_ctrl_lc_otp_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_lc_otp_in_initiator_s fuse_ctrl_lc_otp_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_lc_otp_in_responder_s fuse_ctrl_lc_otp_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_lc_otp_in_initiator_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Members within the fuse_ctrl_lc_otp_in_responder_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + initiator_struct = fuse_ctrl_lc_otp_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // lc_otp_vendor_test_i_o <= fuse_ctrl_lc_otp_in_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // lc_otp_program_i_o <= fuse_ctrl_lc_otp_in_initiator_struct.xyz; // [$bits(lc_otp_program_req_t)-1:0] + // lc_dft_en_i_o <= fuse_ctrl_lc_otp_in_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // lc_escalate_en_i_o <= fuse_ctrl_lc_otp_in_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // lc_check_byp_en_i_o <= fuse_ctrl_lc_otp_in_initiator_struct.xyz; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_lc_otp_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_lc_otp_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_lc_otp_in_initiator_s fuse_ctrl_lc_otp_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_lc_otp_in_responder_s fuse_ctrl_lc_otp_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_lc_otp_in_initiator_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Variables within the fuse_ctrl_lc_otp_in_responder_struct: + // lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + // lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_lc_otp_in_responder_struct.xyz = lc_otp_vendor_test_i_i; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // fuse_ctrl_lc_otp_in_responder_struct.xyz = lc_otp_program_i_i; // [$bits(lc_otp_program_req_t)-1:0] + // fuse_ctrl_lc_otp_in_responder_struct.xyz = lc_dft_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_responder_struct.xyz = lc_escalate_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_responder_struct.xyz = lc_check_byp_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_lc_otp_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_lc_otp_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_if.sv new file mode 100644 index 000000000..68a0925a0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_if.sv @@ -0,0 +1,98 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_lc_otp_in interface signals. +// It is instantiated once per fuse_ctrl_lc_otp_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_lc_otp_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_lc_otp_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_lc_otp_in_bus.lc_otp_vendor_test_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_bus.lc_otp_program_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_bus.lc_dft_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_bus.lc_escalate_en_i), // Agent output +// .dut_signal_port(fuse_ctrl_lc_otp_in_bus.lc_check_byp_en_i), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_in_pkg_hdl::*; + +interface fuse_ctrl_lc_otp_in_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i, + inout tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i, + inout tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_i, + input lc_otp_program_i, + input lc_dft_en_i, + input lc_escalate_en_i, + input lc_check_byp_en_i + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output lc_otp_vendor_test_i, + output lc_otp_program_i, + output lc_dft_en_i, + output lc_escalate_en_i, + output lc_check_byp_en_i + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_i, + input lc_otp_program_i, + input lc_dft_en_i, + input lc_escalate_en_i, + input lc_check_byp_en_i + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_macros.svh new file mode 100644 index 000000000..9ad130b28 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_macros.svh @@ -0,0 +1,153 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_lc_otp_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_lc_otp_in_configuration class. +// + `define fuse_ctrl_lc_otp_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_lc_otp_in_configuration_s; + + `define fuse_ctrl_lc_otp_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_configuration_s to_struct();\ + fuse_ctrl_lc_otp_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_lc_otp_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_lc_otp_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_lc_otp_in_configuration_s fuse_ctrl_lc_otp_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_lc_otp_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_lc_otp_in_transaction class. +// + `define fuse_ctrl_lc_otp_in_MONITOR_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_in_monitor_s; + + `define fuse_ctrl_lc_otp_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_monitor_s to_monitor_struct();\ + fuse_ctrl_lc_otp_in_monitor_struct = \ + { \ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_lc_otp_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_lc_otp_in_monitor_s fuse_ctrl_lc_otp_in_monitor_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_lc_otp_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_in_INITIATOR_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_in_initiator_s; + + `define fuse_ctrl_lc_otp_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_initiator_s to_initiator_struct();\ + fuse_ctrl_lc_otp_in_initiator_struct = \ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_lc_otp_in_initiator_s fuse_ctrl_lc_otp_in_initiator_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_lc_otp_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_in_RESPONDER_STRUCT typedef struct packed { \ + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; \ + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; \ + } fuse_ctrl_lc_otp_in_responder_s; + + `define fuse_ctrl_lc_otp_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_in_responder_s to_responder_struct();\ + fuse_ctrl_lc_otp_in_responder_struct = \ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + };\ + return ( fuse_ctrl_lc_otp_in_responder_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_lc_otp_in_responder_s fuse_ctrl_lc_otp_in_responder_struct);\ + {\ + this.lc_dft_en_i , \ + this.lc_escalate_en_i , \ + this.lc_check_byp_en_i \ + } = fuse_ctrl_lc_otp_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor.svh new file mode 100644 index 000000000..f046d7ea3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_lc_otp_in transactions observed by the +// fuse_ctrl_lc_otp_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_lc_otp_in_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_in_monitor_bfm ), + .TRANS_T(fuse_ctrl_lc_otp_in_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_lc_otp_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_lc_otp_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_lc_otp_in_monitor_s fuse_ctrl_lc_otp_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_lc_otp_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor_bfm.sv new file mode 100644 index 000000000..783657acb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_monitor_bfm.sv @@ -0,0 +1,202 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_lc_otp_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_lc_otp_in monitor through a virtual +// interface handle in the fuse_ctrl_lc_otp_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_lc_otp_in_if. +// +// Input signals from the fuse_ctrl_lc_otp_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_lc_otp_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_in_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_in_macros.svh" + + +interface fuse_ctrl_lc_otp_in_monitor_bfm + ( fuse_ctrl_lc_otp_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_lc_otp_in_MONITOR_STRUCT + fuse_ctrl_lc_otp_in_monitor_s fuse_ctrl_lc_otp_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_lc_otp_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(lc_otp_vendor_test_req_t)-1:0] lc_otp_vendor_test_i_i; + tri [$bits(lc_otp_program_req_t)-1:0] lc_otp_program_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_dft_en_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_escalate_en_i_i; + tri [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] lc_check_byp_en_i_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign lc_otp_vendor_test_i_i = bus.lc_otp_vendor_test_i; + assign lc_otp_program_i_i = bus.lc_otp_program_i; + assign lc_dft_en_i_i = bus.lc_dft_en_i; + assign lc_escalate_en_i_i = bus.lc_escalate_en_i; + assign lc_check_byp_en_i_i = bus.lc_check_byp_en_i; + + // Proxy handle to UVM monitor + fuse_ctrl_lc_otp_in_pkg::fuse_ctrl_lc_otp_in_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_lc_otp_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_lc_otp_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_lc_otp_in_configuration_s fuse_ctrl_lc_otp_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_lc_otp_in_monitor_s fuse_ctrl_lc_otp_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_lc_otp_in_monitor_struct.lc_dft_en_i + // // fuse_ctrl_lc_otp_in_monitor_struct.lc_escalate_en_i + // // fuse_ctrl_lc_otp_in_monitor_struct.lc_check_byp_en_i + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_lc_otp_in_monitor_struct.xyz = lc_otp_vendor_test_i_i; // [$bits(lc_otp_vendor_test_req_t)-1:0] + // fuse_ctrl_lc_otp_in_monitor_struct.xyz = lc_otp_program_i_i; // [$bits(lc_otp_program_req_t)-1:0] + // fuse_ctrl_lc_otp_in_monitor_struct.xyz = lc_dft_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_monitor_struct.xyz = lc_escalate_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // fuse_ctrl_lc_otp_in_monitor_struct.xyz = lc_check_byp_en_i_i; // [$bits(lc_ctrl_pkg::lc_tx_t)-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_random_sequence.svh new file mode 100644 index 000000000..477393c3e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_lc_otp_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_lc_otp_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_random_sequence + extends fuse_ctrl_lc_otp_in_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_in_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_lc_otp_in_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_lc_otp_in_random_sequence::body()-fuse_ctrl_lc_otp_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_lc_otp_in_driver_bfm via the sequencer and fuse_ctrl_lc_otp_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_lc_otp_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_responder_sequence.svh new file mode 100644 index 000000000..e41496803 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_responder_sequence + extends fuse_ctrl_lc_otp_in_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_in_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_lc_otp_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_lc_otp_in_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_sequence_base.svh new file mode 100644 index 000000000..83a122cb0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_lc_otp_in_transaction ), + .RSP(fuse_ctrl_lc_otp_in_transaction )); + + `uvm_object_utils( fuse_ctrl_lc_otp_in_sequence_base ) + + // variables + typedef fuse_ctrl_lc_otp_in_transaction fuse_ctrl_lc_otp_in_transaction_req_t; + fuse_ctrl_lc_otp_in_transaction_req_t req; + typedef fuse_ctrl_lc_otp_in_transaction fuse_ctrl_lc_otp_in_transaction_rsp_t; + fuse_ctrl_lc_otp_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_lc_otp_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_lc_otp_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction.svh new file mode 100644 index 000000000..187b6480c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction.svh @@ -0,0 +1,201 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_lc_otp_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_lc_otp_in_transaction ) + + lc_ctrl_pkg::lc_tx_t lc_dft_en_i ; + lc_ctrl_pkg::lc_tx_t lc_escalate_en_i ; + lc_ctrl_pkg::lc_tx_t lc_check_byp_en_i ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_lc_otp_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_lc_otp_in_monitor and fuse_ctrl_lc_otp_in_monitor_bfm + // This struct is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_MONITOR_STRUCT + fuse_ctrl_lc_otp_in_monitor_s fuse_ctrl_lc_otp_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_monitor_struct. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_in_driver and fuse_ctrl_lc_otp_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_in_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_INITIATOR_STRUCT + fuse_ctrl_lc_otp_in_initiator_s fuse_ctrl_lc_otp_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_initiator_struct. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_lc_otp_in_driver and fuse_ctrl_lc_otp_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_in_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_RESPONDER_STRUCT + fuse_ctrl_lc_otp_in_responder_s fuse_ctrl_lc_otp_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_in_responder_struct. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_in_macros.svh + `fuse_ctrl_lc_otp_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("lc_dft_en_i:0x%x lc_escalate_en_i:0x%x lc_check_byp_en_i:0x%x ",lc_dft_en_i,lc_escalate_en_i,lc_check_byp_en_i); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_lc_otp_in_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_lc_otp_in_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.lc_dft_en_i = RHS.lc_dft_en_i; + this.lc_escalate_en_i = RHS.lc_escalate_en_i; + this.lc_check_byp_en_i = RHS.lc_check_byp_en_i; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_lc_otp_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,lc_dft_en_i,"lc_dft_en_i"); + $add_attribute(transaction_view_h,lc_escalate_en_i,"lc_escalate_en_i"); + $add_attribute(transaction_view_h,lc_check_byp_en_i,"lc_check_byp_en_i"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction_coverage.svh new file mode 100644 index 000000000..e5fa783de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_transaction_coverage.svh @@ -0,0 +1,86 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_lc_otp_in transaction information using +// a covergroup named fuse_ctrl_lc_otp_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_in_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_lc_otp_in_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_in_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_lc_otp_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + lc_dft_en_i: coverpoint coverage_trans.lc_dft_en_i; + lc_escalate_en_i: coverpoint coverage_trans.lc_escalate_en_i; + lc_check_byp_en_i: coverpoint coverage_trans.lc_check_byp_en_i; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_lc_otp_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_lc_otp_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_lc_otp_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/src/fuse_ctrl_lc_otp_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/yaml/fuse_ctrl_lc_otp_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/yaml/fuse_ctrl_lc_otp_in_interface.yaml new file mode 100644 index 000000000..a7f2b381a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_in_pkg/yaml/fuse_ctrl_lc_otp_in_interface.yaml @@ -0,0 +1,57 @@ +uvmf: + interfaces: + fuse_ctrl_lc_otp_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: output + name: lc_otp_vendor_test_i + reset_value: '''bz' + width: '[''$bits(lc_otp_vendor_test_req_t)'']' + - dir: output + name: lc_otp_program_i + reset_value: '''bz' + width: '[''$bits(lc_otp_program_req_t)'']' + - dir: output + name: lc_dft_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + - dir: output + name: lc_escalate_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + - dir: output + name: lc_check_byp_en_i + reset_value: '''bz' + width: '[''$bits(lc_ctrl_pkg::lc_tx_t)'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_dft_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_escalate_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: lc_check_byp_en_i + type: lc_ctrl_pkg::lc_tx_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.project new file mode 100644 index 000000000..95dcde6a7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_lc_otp_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.svproject new file mode 100644 index 000000000..50f9edd81 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/Makefile new file mode 100644 index 000000000..7b42b541d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_lc_otp_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_lc_otp_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hvl.f + +fuse_ctrl_lc_otp_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hdl.f + +fuse_ctrl_lc_otp_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_xrtl.f + +COMP_fuse_ctrl_lc_otp_out_if_PKG_TGT_0 = q_comp_fuse_ctrl_lc_otp_out_if_pkg +COMP_fuse_ctrl_lc_otp_out_if_PKG_TGT_1 = v_comp_fuse_ctrl_lc_otp_out_if_pkg +COMP_fuse_ctrl_lc_otp_out_if_PKG_TGT = $(COMP_fuse_ctrl_lc_otp_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_lc_otp_out_if_pkg: $(COMP_fuse_ctrl_lc_otp_out_if_PKG_TGT) + +q_comp_fuse_ctrl_lc_otp_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_out_if_PKG_XRTL) + +v_comp_fuse_ctrl_lc_otp_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_lc_otp_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_lc_otp_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_lc_otp_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_out_if_pkg += -I$(fuse_ctrl_lc_otp_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_out_if_pkg += $(fuse_ctrl_lc_otp_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_lc_otp_out_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_lc_otp_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_lc_otp_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_lc_otp_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/compile.do new file mode 100644 index 000000000..af1e34f37 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_lc_otp_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if.compile new file mode 100644 index 000000000..ec237f3ce --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_lc_otp_out_if_hvl.compile + - fuse_ctrl_lc_otp_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_bfm.vinfo new file mode 100644 index 000000000..2a91b10ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_lc_otp_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_lc_otp_out_if_if.sv +src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv +src/fuse_ctrl_lc_otp_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_common.compile new file mode 100644 index 000000000..cd97600ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_lc_otp_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hdl.f new file mode 100644 index 000000000..ee3a8c8a4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hvl.f new file mode 100644 index 000000000..2713f8a05 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_xrtl.f new file mode 100644 index 000000000..6d99f13fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hdl.compile new file mode 100644 index 000000000..30bf39951 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_lc_otp_out_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_lc_otp_out_if_if.sv + - src/fuse_ctrl_lc_otp_out_if_monitor_bfm.sv + - src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hvl.compile new file mode 100644 index 000000000..01d7bd750 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_lc_otp_out_if_common.compile +incdir: + - . +src: + - fuse_ctrl_lc_otp_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.sv new file mode 100644 index 000000000..4605a92a3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_lc_otp_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_lc_otp_out_if_macros.svh" + + export fuse_ctrl_lc_otp_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_lc_otp_out_if_typedefs.svh" + `include "src/fuse_ctrl_lc_otp_out_if_transaction.svh" + + `include "src/fuse_ctrl_lc_otp_out_if_configuration.svh" + `include "src/fuse_ctrl_lc_otp_out_if_driver.svh" + `include "src/fuse_ctrl_lc_otp_out_if_monitor.svh" + + `include "src/fuse_ctrl_lc_otp_out_if_transaction_coverage.svh" + `include "src/fuse_ctrl_lc_otp_out_if_sequence_base.svh" + `include "src/fuse_ctrl_lc_otp_out_if_random_sequence.svh" + + `include "src/fuse_ctrl_lc_otp_out_if_responder_sequence.svh" + `include "src/fuse_ctrl_lc_otp_out_if2reg_adapter.svh" + + `include "src/fuse_ctrl_lc_otp_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.vinfo new file mode 100644 index 000000000..7657b3597 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_lc_otp_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_lc_otp_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.sv new file mode 100644 index 000000000..99c7cc9fa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_lc_otp_out_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_lc_otp_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..8fd4be1a1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_lc_otp_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_sve.F new file mode 100644 index 000000000..42c8070f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/fuse_ctrl_lc_otp_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if2reg_adapter.svh new file mode 100644 index 000000000..be38d67f8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_lc_otp_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_lc_otp_out_if2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_lc_otp_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_lc_otp_out_if_transaction trans_h = fuse_ctrl_lc_otp_out_if_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_lc_otp_out_if_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_lc_otp_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_agent.svh new file mode 100644 index 000000000..8d10fabf2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_lc_otp_out_if_configuration ), + .DRIVER_T(fuse_ctrl_lc_otp_out_if_driver ), + .MONITOR_T(fuse_ctrl_lc_otp_out_if_monitor ), + .COVERAGE_T(fuse_ctrl_lc_otp_out_if_transaction_coverage ), + .TRANS_T(fuse_ctrl_lc_otp_out_if_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_if_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_configuration.svh new file mode 100644 index 000000000..a8b19a603 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_lc_otp_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_lc_otp_out_if_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_lc_otp_out_if_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_lc_otp_out_if_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_lc_otp_out_if_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_lc_otp_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_CONFIGURATION_STRUCT + fuse_ctrl_lc_otp_out_if_configuration_s fuse_ctrl_lc_otp_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_lc_otp_out_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_if_configuration_struct. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_lc_otp_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_lc_otp_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_lc_otp_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_lc_otp_out_if_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_lc_otp_out_if_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_lc_otp_out_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_lc_otp_out_if_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver.svh new file mode 100644 index 000000000..78fcd4d6f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_lc_otp_out_if_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_out_if_driver_bfm ), + .REQ(fuse_ctrl_lc_otp_out_if_transaction ), + .RSP(fuse_ctrl_lc_otp_out_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_if_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_lc_otp_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_lc_otp_out_if_driver and fuse_ctrl_lc_otp_out_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_lc_otp_out_if_driver_bfm. +`fuse_ctrl_lc_otp_out_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_out_if_initiator_s fuse_ctrl_lc_otp_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_lc_otp_out_if_driver and fuse_ctrl_lc_otp_out_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_lc_otp_out_if_driver_bfm. +`fuse_ctrl_lc_otp_out_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_out_if_responder_s fuse_ctrl_lc_otp_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_lc_otp_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_lc_otp_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_lc_otp_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_lc_otp_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv new file mode 100644 index 000000000..b903dfe7f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_driver_bfm.sv @@ -0,0 +1,299 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_lc_otp_out_if signal driving. It is +// accessed by the uvm fuse_ctrl_lc_otp_out_if driver through a virtual interface +// handle in the fuse_ctrl_lc_otp_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_lc_otp_out_if_if. +// +// Input signals from the fuse_ctrl_lc_otp_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_lc_otp_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_out_if_macros.svh" + +interface fuse_ctrl_lc_otp_out_if_driver_bfm + (fuse_ctrl_lc_otp_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_i; + reg [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_o = 'bz; + tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_i; + reg [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_o = 'bz; + tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_i; + reg [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign lc_otp_vendor_test_o_i = bus.lc_otp_vendor_test_o; + assign bus.lc_otp_vendor_test_o = (initiator_responder == RESPONDER) ? lc_otp_vendor_test_o_o : 'bz; + assign lc_otp_program_o_i = bus.lc_otp_program_o; + assign bus.lc_otp_program_o = (initiator_responder == RESPONDER) ? lc_otp_program_o_o : 'bz; + assign otp_lc_data_o_i = bus.otp_lc_data_o; + assign bus.otp_lc_data_o = (initiator_responder == RESPONDER) ? otp_lc_data_o_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_lc_otp_out_if_pkg::fuse_ctrl_lc_otp_out_if_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_lc_otp_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_lc_otp_out_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_lc_otp_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_out_if_driver and fuse_ctrl_lc_otp_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_out_if_driver_bfm. + `fuse_ctrl_lc_otp_out_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_lc_otp_out_if_driver and fuse_ctrl_lc_otp_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_out_if_driver_bfm. + `fuse_ctrl_lc_otp_out_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + lc_otp_vendor_test_o_o <= 'bz; + lc_otp_program_o_o <= 'bz; + otp_lc_data_o_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_lc_otp_out_if_configuration_s fuse_ctrl_lc_otp_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_lc_otp_out_if_initiator_s fuse_ctrl_lc_otp_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_lc_otp_out_if_responder_s fuse_ctrl_lc_otp_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_lc_otp_out_if_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // Members within the fuse_ctrl_lc_otp_out_if_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + initiator_struct = fuse_ctrl_lc_otp_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_lc_otp_out_if_responder_struct.xyz = lc_otp_vendor_test_o_i; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_if_responder_struct.xyz = lc_otp_program_o_i; // [$bits(lc_otp_program_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_if_responder_struct.xyz = otp_lc_data_o_i; // [$bits(otp_lc_data_t)-1:0] + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_lc_otp_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_lc_otp_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_lc_otp_out_if_initiator_s fuse_ctrl_lc_otp_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_lc_otp_out_if_responder_s fuse_ctrl_lc_otp_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_lc_otp_out_if_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // Variables within the fuse_ctrl_lc_otp_out_if_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // lc_otp_vendor_test_o_o <= fuse_ctrl_lc_otp_out_if_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // lc_otp_program_o_o <= fuse_ctrl_lc_otp_out_if_initiator_struct.xyz; // [$bits(lc_otp_program_rsp_t)-1:0] + // otp_lc_data_o_o <= fuse_ctrl_lc_otp_out_if_initiator_struct.xyz; // [$bits(otp_lc_data_t)-1:0] + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_lc_otp_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_lc_otp_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_if.sv new file mode 100644 index 000000000..839416f4d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_if.sv @@ -0,0 +1,88 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_lc_otp_out_if interface signals. +// It is instantiated once per fuse_ctrl_lc_otp_out_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_lc_otp_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_lc_otp_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_lc_otp_out_if_bus.lc_otp_vendor_test_o), // Agent input +// .dut_signal_port(fuse_ctrl_lc_otp_out_if_bus.lc_otp_program_o), // Agent input +// .dut_signal_port(fuse_ctrl_lc_otp_out_if_bus.otp_lc_data_o), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_out_if_pkg_hdl::*; + +interface fuse_ctrl_lc_otp_out_if_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o, + inout tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o, + inout tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_o, + input lc_otp_program_o, + input otp_lc_data_o + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_o, + input lc_otp_program_o, + input otp_lc_data_o + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output lc_otp_vendor_test_o, + output lc_otp_program_o, + output otp_lc_data_o + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_macros.svh new file mode 100644 index 000000000..ea991a89b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_lc_otp_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_lc_otp_out_if_configuration class. +// + `define fuse_ctrl_lc_otp_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_lc_otp_out_if_configuration_s; + + `define fuse_ctrl_lc_otp_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_if_configuration_s to_struct();\ + fuse_ctrl_lc_otp_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_lc_otp_out_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_lc_otp_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_lc_otp_out_if_configuration_s fuse_ctrl_lc_otp_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_lc_otp_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_lc_otp_out_if_transaction class. +// + `define fuse_ctrl_lc_otp_out_if_MONITOR_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + } fuse_ctrl_lc_otp_out_if_monitor_s; + + `define fuse_ctrl_lc_otp_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_if_monitor_s to_monitor_struct();\ + fuse_ctrl_lc_otp_out_if_monitor_struct = \ + { \ + this.otp_lc_data_o \ + };\ + return ( fuse_ctrl_lc_otp_out_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_lc_otp_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_lc_otp_out_if_monitor_s fuse_ctrl_lc_otp_out_if_monitor_struct);\ + {\ + this.otp_lc_data_o \ + } = fuse_ctrl_lc_otp_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_lc_otp_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_out_if_INITIATOR_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + } fuse_ctrl_lc_otp_out_if_initiator_s; + + `define fuse_ctrl_lc_otp_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_if_initiator_s to_initiator_struct();\ + fuse_ctrl_lc_otp_out_if_initiator_struct = \ + {\ + this.otp_lc_data_o \ + };\ + return ( fuse_ctrl_lc_otp_out_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_lc_otp_out_if_initiator_s fuse_ctrl_lc_otp_out_if_initiator_struct);\ + {\ + this.otp_lc_data_o \ + } = fuse_ctrl_lc_otp_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_lc_otp_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_out_if_RESPONDER_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + } fuse_ctrl_lc_otp_out_if_responder_s; + + `define fuse_ctrl_lc_otp_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_if_responder_s to_responder_struct();\ + fuse_ctrl_lc_otp_out_if_responder_struct = \ + {\ + this.otp_lc_data_o \ + };\ + return ( fuse_ctrl_lc_otp_out_if_responder_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_lc_otp_out_if_responder_s fuse_ctrl_lc_otp_out_if_responder_struct);\ + {\ + this.otp_lc_data_o \ + } = fuse_ctrl_lc_otp_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor.svh new file mode 100644 index 000000000..2d03f44ed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_lc_otp_out_if transactions observed by the +// fuse_ctrl_lc_otp_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_lc_otp_out_if_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_out_if_monitor_bfm ), + .TRANS_T(fuse_ctrl_lc_otp_out_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_if_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_lc_otp_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_lc_otp_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_lc_otp_out_if_monitor_s fuse_ctrl_lc_otp_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_lc_otp_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor_bfm.sv new file mode 100644 index 000000000..685fdceee --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_monitor_bfm.sv @@ -0,0 +1,194 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_lc_otp_out_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_lc_otp_out_if monitor through a virtual +// interface handle in the fuse_ctrl_lc_otp_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_lc_otp_out_if_if. +// +// Input signals from the fuse_ctrl_lc_otp_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_lc_otp_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_out_if_macros.svh" + + +interface fuse_ctrl_lc_otp_out_if_monitor_bfm + ( fuse_ctrl_lc_otp_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_lc_otp_out_if_MONITOR_STRUCT + fuse_ctrl_lc_otp_out_if_monitor_s fuse_ctrl_lc_otp_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_lc_otp_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_i; + tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_i; + tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign lc_otp_vendor_test_o_i = bus.lc_otp_vendor_test_o; + assign lc_otp_program_o_i = bus.lc_otp_program_o; + assign otp_lc_data_o_i = bus.otp_lc_data_o; + + // Proxy handle to UVM monitor + fuse_ctrl_lc_otp_out_if_pkg::fuse_ctrl_lc_otp_out_if_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_lc_otp_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_lc_otp_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_lc_otp_out_if_configuration_s fuse_ctrl_lc_otp_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_lc_otp_out_if_monitor_s fuse_ctrl_lc_otp_out_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_lc_otp_out_if_monitor_struct.otp_lc_data_o + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_lc_otp_out_if_monitor_struct.xyz = lc_otp_vendor_test_o_i; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_if_monitor_struct.xyz = lc_otp_program_o_i; // [$bits(lc_otp_program_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_if_monitor_struct.xyz = otp_lc_data_o_i; // [$bits(otp_lc_data_t)-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_random_sequence.svh new file mode 100644 index 000000000..998964a53 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_lc_otp_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_lc_otp_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_random_sequence + extends fuse_ctrl_lc_otp_out_if_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_out_if_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_lc_otp_out_if_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_lc_otp_out_if_random_sequence::body()-fuse_ctrl_lc_otp_out_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_lc_otp_out_if_driver_bfm via the sequencer and fuse_ctrl_lc_otp_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_lc_otp_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_responder_sequence.svh new file mode 100644 index 000000000..1adc62db5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_responder_sequence + extends fuse_ctrl_lc_otp_out_if_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_out_if_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_lc_otp_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_lc_otp_out_if_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_sequence_base.svh new file mode 100644 index 000000000..dc133adf1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_lc_otp_out_if_transaction ), + .RSP(fuse_ctrl_lc_otp_out_if_transaction )); + + `uvm_object_utils( fuse_ctrl_lc_otp_out_if_sequence_base ) + + // variables + typedef fuse_ctrl_lc_otp_out_if_transaction fuse_ctrl_lc_otp_out_if_transaction_req_t; + fuse_ctrl_lc_otp_out_if_transaction_req_t req; + typedef fuse_ctrl_lc_otp_out_if_transaction fuse_ctrl_lc_otp_out_if_transaction_rsp_t; + fuse_ctrl_lc_otp_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_lc_otp_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_lc_otp_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction.svh new file mode 100644 index 000000000..652f3aa11 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction.svh @@ -0,0 +1,196 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_lc_otp_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_lc_otp_out_if_transaction ) + + otp_lc_data_t otp_lc_data_o ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_lc_otp_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_lc_otp_out_if_monitor and fuse_ctrl_lc_otp_out_if_monitor_bfm + // This struct is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_MONITOR_STRUCT + fuse_ctrl_lc_otp_out_if_monitor_s fuse_ctrl_lc_otp_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_out_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_if_monitor_struct. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_out_if_driver and fuse_ctrl_lc_otp_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_INITIATOR_STRUCT + fuse_ctrl_lc_otp_out_if_initiator_s fuse_ctrl_lc_otp_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_out_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_if_initiator_struct. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_lc_otp_out_if_driver and fuse_ctrl_lc_otp_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_RESPONDER_STRUCT + fuse_ctrl_lc_otp_out_if_responder_s fuse_ctrl_lc_otp_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_out_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_if_responder_struct. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_if_macros.svh + `fuse_ctrl_lc_otp_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("otp_lc_data_o:0x%x ",otp_lc_data_o); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_lc_otp_out_if_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.otp_lc_data_o == RHS.otp_lc_data_o) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_lc_otp_out_if_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.otp_lc_data_o = RHS.otp_lc_data_o; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_lc_otp_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,otp_lc_data_o,"otp_lc_data_o"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction_coverage.svh new file mode 100644 index 000000000..8cdbe2099 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_transaction_coverage.svh @@ -0,0 +1,84 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_lc_otp_out_if transaction information using +// a covergroup named fuse_ctrl_lc_otp_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_if_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_lc_otp_out_if_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_if_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_lc_otp_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + otp_lc_data_o: coverpoint coverage_trans.otp_lc_data_o; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_lc_otp_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_lc_otp_out_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_lc_otp_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/src/fuse_ctrl_lc_otp_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/yaml/fuse_ctrl_lc_otp_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/yaml/fuse_ctrl_lc_otp_out_if_interface.yaml new file mode 100644 index 000000000..e5cfe2007 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_if_pkg/yaml/fuse_ctrl_lc_otp_out_if_interface.yaml @@ -0,0 +1,37 @@ +uvmf: + interfaces: + fuse_ctrl_lc_otp_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: input + name: lc_otp_vendor_test_o + reset_value: '''bz' + width: '[''$bits(lc_otp_vendor_test_rsp_t)'']' + - dir: input + name: lc_otp_program_o + reset_value: '''bz' + width: '[''$bits(lc_otp_program_rsp_t)'']' + - dir: input + name: otp_lc_data_o + reset_value: '''bz' + width: '[''$bits(otp_lc_data_t)'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: otp_lc_data_o + type: otp_lc_data_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.project new file mode 100644 index 000000000..42717eed9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_lc_otp_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.svproject new file mode 100644 index 000000000..fe0ca64ff --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/Makefile new file mode 100644 index 000000000..f975b194b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_lc_otp_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_lc_otp_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hvl.f + +fuse_ctrl_lc_otp_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hdl.f + +fuse_ctrl_lc_otp_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_xrtl.f + +COMP_fuse_ctrl_lc_otp_out_PKG_TGT_0 = q_comp_fuse_ctrl_lc_otp_out_pkg +COMP_fuse_ctrl_lc_otp_out_PKG_TGT_1 = v_comp_fuse_ctrl_lc_otp_out_pkg +COMP_fuse_ctrl_lc_otp_out_PKG_TGT = $(COMP_fuse_ctrl_lc_otp_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_lc_otp_out_pkg: $(COMP_fuse_ctrl_lc_otp_out_PKG_TGT) + +q_comp_fuse_ctrl_lc_otp_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_out_PKG_XRTL) + +v_comp_fuse_ctrl_lc_otp_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_lc_otp_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_lc_otp_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_lc_otp_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_lc_otp_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_lc_otp_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_out_pkg += -I$(fuse_ctrl_lc_otp_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_lc_otp_out_pkg += $(fuse_ctrl_lc_otp_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_lc_otp_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_lc_otp_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_lc_otp_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_lc_otp_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_lc_otp_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/compile.do new file mode 100644 index 000000000..8073231a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_lc_otp_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out.compile new file mode 100644 index 000000000..f8a8ac4ee --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_lc_otp_out_hvl.compile + - fuse_ctrl_lc_otp_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_bfm.vinfo new file mode 100644 index 000000000..0c1d35fa9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_lc_otp_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_lc_otp_out_if.sv +src/fuse_ctrl_lc_otp_out_driver_bfm.sv +src/fuse_ctrl_lc_otp_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_common.compile new file mode 100644 index 000000000..42616d50e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_lc_otp_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hdl.f new file mode 100644 index 000000000..dd3eb8a20 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hvl.f new file mode 100644 index 000000000..b0a13c621 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_xrtl.f new file mode 100644 index 000000000..48f620eef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hdl.compile new file mode 100644 index 000000000..2ce74cc85 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_lc_otp_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_lc_otp_out_if.sv + - src/fuse_ctrl_lc_otp_out_monitor_bfm.sv + - src/fuse_ctrl_lc_otp_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hvl.compile new file mode 100644 index 000000000..d6a5b8850 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_lc_otp_out_common.compile +incdir: + - . +src: + - fuse_ctrl_lc_otp_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.sv new file mode 100644 index 000000000..c18cea812 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_lc_otp_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_lc_otp_out_macros.svh" + + export fuse_ctrl_lc_otp_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_lc_otp_out_typedefs.svh" + `include "src/fuse_ctrl_lc_otp_out_transaction.svh" + + `include "src/fuse_ctrl_lc_otp_out_configuration.svh" + `include "src/fuse_ctrl_lc_otp_out_driver.svh" + `include "src/fuse_ctrl_lc_otp_out_monitor.svh" + + `include "src/fuse_ctrl_lc_otp_out_transaction_coverage.svh" + `include "src/fuse_ctrl_lc_otp_out_sequence_base.svh" + `include "src/fuse_ctrl_lc_otp_out_random_sequence.svh" + + `include "src/fuse_ctrl_lc_otp_out_responder_sequence.svh" + `include "src/fuse_ctrl_lc_otp_out2reg_adapter.svh" + + `include "src/fuse_ctrl_lc_otp_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.vinfo new file mode 100644 index 000000000..7a4f8b1c8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_lc_otp_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_lc_otp_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.sv new file mode 100644 index 000000000..8987535e6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_lc_otp_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_lc_otp_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_lc_otp_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.vinfo new file mode 100644 index 000000000..f662f8c19 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_lc_otp_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_sve.F new file mode 100644 index 000000000..0483ef5c0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_lc_otp_out_pkg/fuse_ctrl_lc_otp_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out2reg_adapter.svh new file mode 100644 index 000000000..bd1fa55e6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_lc_otp_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_lc_otp_out2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_lc_otp_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_lc_otp_out_transaction trans_h = fuse_ctrl_lc_otp_out_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_lc_otp_out_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_lc_otp_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_agent.svh new file mode 100644 index 000000000..2b6207d35 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_lc_otp_out_configuration ), + .DRIVER_T(fuse_ctrl_lc_otp_out_driver ), + .MONITOR_T(fuse_ctrl_lc_otp_out_monitor ), + .COVERAGE_T(fuse_ctrl_lc_otp_out_transaction_coverage ), + .TRANS_T(fuse_ctrl_lc_otp_out_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_configuration.svh new file mode 100644 index 000000000..b7ccdaca3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_lc_otp_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_lc_otp_out_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_lc_otp_out_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_lc_otp_out_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_lc_otp_out_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_lc_otp_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_CONFIGURATION_STRUCT + fuse_ctrl_lc_otp_out_configuration_s fuse_ctrl_lc_otp_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_lc_otp_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_configuration_struct. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_lc_otp_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_lc_otp_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_lc_otp_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_lc_otp_out_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_lc_otp_out_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_lc_otp_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_lc_otp_out_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver.svh new file mode 100644 index 000000000..d25471cfc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_lc_otp_out_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_out_driver_bfm ), + .REQ(fuse_ctrl_lc_otp_out_transaction ), + .RSP(fuse_ctrl_lc_otp_out_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_lc_otp_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_lc_otp_out_driver and fuse_ctrl_lc_otp_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_lc_otp_out_driver_bfm. +`fuse_ctrl_lc_otp_out_INITIATOR_STRUCT + fuse_ctrl_lc_otp_out_initiator_s fuse_ctrl_lc_otp_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_lc_otp_out_driver and fuse_ctrl_lc_otp_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_lc_otp_out_driver_bfm. +`fuse_ctrl_lc_otp_out_RESPONDER_STRUCT + fuse_ctrl_lc_otp_out_responder_s fuse_ctrl_lc_otp_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_lc_otp_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_lc_otp_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_lc_otp_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_lc_otp_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver_bfm.sv new file mode 100644 index 000000000..9456d2d75 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_driver_bfm.sv @@ -0,0 +1,299 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_lc_otp_out signal driving. It is +// accessed by the uvm fuse_ctrl_lc_otp_out driver through a virtual interface +// handle in the fuse_ctrl_lc_otp_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_lc_otp_out_if. +// +// Input signals from the fuse_ctrl_lc_otp_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_lc_otp_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_out_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_out_macros.svh" + +interface fuse_ctrl_lc_otp_out_driver_bfm + (fuse_ctrl_lc_otp_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_i; + reg [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_o = 'bz; + tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_i; + reg [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_o = 'bz; + tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_i; + reg [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign lc_otp_vendor_test_o_i = bus.lc_otp_vendor_test_o; + assign bus.lc_otp_vendor_test_o = (initiator_responder == RESPONDER) ? lc_otp_vendor_test_o_o : 'bz; + assign lc_otp_program_o_i = bus.lc_otp_program_o; + assign bus.lc_otp_program_o = (initiator_responder == RESPONDER) ? lc_otp_program_o_o : 'bz; + assign otp_lc_data_o_i = bus.otp_lc_data_o; + assign bus.otp_lc_data_o = (initiator_responder == RESPONDER) ? otp_lc_data_o_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_lc_otp_out_pkg::fuse_ctrl_lc_otp_out_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_lc_otp_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_lc_otp_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_lc_otp_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_out_driver and fuse_ctrl_lc_otp_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_out_driver_bfm. + `fuse_ctrl_lc_otp_out_INITIATOR_STRUCT + fuse_ctrl_lc_otp_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_lc_otp_out_driver and fuse_ctrl_lc_otp_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_out_driver_bfm. + `fuse_ctrl_lc_otp_out_RESPONDER_STRUCT + fuse_ctrl_lc_otp_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + lc_otp_vendor_test_o_o <= 'bz; + lc_otp_program_o_o <= 'bz; + otp_lc_data_o_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_lc_otp_out_configuration_s fuse_ctrl_lc_otp_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_lc_otp_out_initiator_s fuse_ctrl_lc_otp_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_lc_otp_out_responder_s fuse_ctrl_lc_otp_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_lc_otp_out_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // Members within the fuse_ctrl_lc_otp_out_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + initiator_struct = fuse_ctrl_lc_otp_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_lc_otp_out_responder_struct.xyz = lc_otp_vendor_test_o_i; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_responder_struct.xyz = lc_otp_program_o_i; // [$bits(lc_otp_program_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_responder_struct.xyz = otp_lc_data_o_i; // [$bits(otp_lc_data_t)-1:0] + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_lc_otp_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_lc_otp_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_lc_otp_out_initiator_s fuse_ctrl_lc_otp_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_lc_otp_out_responder_s fuse_ctrl_lc_otp_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_lc_otp_out_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // Variables within the fuse_ctrl_lc_otp_out_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // lc_otp_vendor_test_o_o <= fuse_ctrl_lc_otp_out_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // lc_otp_program_o_o <= fuse_ctrl_lc_otp_out_initiator_struct.xyz; // [$bits(lc_otp_program_rsp_t)-1:0] + // otp_lc_data_o_o <= fuse_ctrl_lc_otp_out_initiator_struct.xyz; // [$bits(otp_lc_data_t)-1:0] + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_lc_otp_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_lc_otp_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_if.sv new file mode 100644 index 000000000..76b45dc37 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_if.sv @@ -0,0 +1,88 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_lc_otp_out interface signals. +// It is instantiated once per fuse_ctrl_lc_otp_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_lc_otp_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_lc_otp_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_lc_otp_out_bus.lc_otp_vendor_test_o), // Agent input +// .dut_signal_port(fuse_ctrl_lc_otp_out_bus.lc_otp_program_o), // Agent input +// .dut_signal_port(fuse_ctrl_lc_otp_out_bus.otp_lc_data_o), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_out_pkg_hdl::*; + +interface fuse_ctrl_lc_otp_out_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o, + inout tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o, + inout tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_o, + input lc_otp_program_o, + input otp_lc_data_o + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input lc_otp_vendor_test_o, + input lc_otp_program_o, + input otp_lc_data_o + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output lc_otp_vendor_test_o, + output lc_otp_program_o, + output otp_lc_data_o + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_macros.svh new file mode 100644 index 000000000..e4e72e20b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_lc_otp_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_lc_otp_out_configuration class. +// + `define fuse_ctrl_lc_otp_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_lc_otp_out_configuration_s; + + `define fuse_ctrl_lc_otp_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_configuration_s to_struct();\ + fuse_ctrl_lc_otp_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_lc_otp_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_lc_otp_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_lc_otp_out_configuration_s fuse_ctrl_lc_otp_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_lc_otp_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_lc_otp_out_transaction class. +// + `define fuse_ctrl_lc_otp_out_MONITOR_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + } fuse_ctrl_lc_otp_out_monitor_s; + + `define fuse_ctrl_lc_otp_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_monitor_s to_monitor_struct();\ + fuse_ctrl_lc_otp_out_monitor_struct = \ + { \ + this.otp_lc_data_o \ + };\ + return ( fuse_ctrl_lc_otp_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_lc_otp_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_lc_otp_out_monitor_s fuse_ctrl_lc_otp_out_monitor_struct);\ + {\ + this.otp_lc_data_o \ + } = fuse_ctrl_lc_otp_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_lc_otp_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_out_INITIATOR_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + } fuse_ctrl_lc_otp_out_initiator_s; + + `define fuse_ctrl_lc_otp_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_initiator_s to_initiator_struct();\ + fuse_ctrl_lc_otp_out_initiator_struct = \ + {\ + this.otp_lc_data_o \ + };\ + return ( fuse_ctrl_lc_otp_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_lc_otp_out_initiator_s fuse_ctrl_lc_otp_out_initiator_struct);\ + {\ + this.otp_lc_data_o \ + } = fuse_ctrl_lc_otp_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_lc_otp_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_lc_otp_out_RESPONDER_STRUCT typedef struct packed { \ + otp_lc_data_t otp_lc_data_o ; \ + } fuse_ctrl_lc_otp_out_responder_s; + + `define fuse_ctrl_lc_otp_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_lc_otp_out_responder_s to_responder_struct();\ + fuse_ctrl_lc_otp_out_responder_struct = \ + {\ + this.otp_lc_data_o \ + };\ + return ( fuse_ctrl_lc_otp_out_responder_struct);\ + endfunction + + `define fuse_ctrl_lc_otp_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_lc_otp_out_responder_s fuse_ctrl_lc_otp_out_responder_struct);\ + {\ + this.otp_lc_data_o \ + } = fuse_ctrl_lc_otp_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor.svh new file mode 100644 index 000000000..0c9f4465f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_lc_otp_out transactions observed by the +// fuse_ctrl_lc_otp_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_lc_otp_out_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_lc_otp_out_monitor_bfm ), + .TRANS_T(fuse_ctrl_lc_otp_out_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_lc_otp_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_lc_otp_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_lc_otp_out_monitor_s fuse_ctrl_lc_otp_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_lc_otp_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor_bfm.sv new file mode 100644 index 000000000..2a630288e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_monitor_bfm.sv @@ -0,0 +1,194 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_lc_otp_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_lc_otp_out monitor through a virtual +// interface handle in the fuse_ctrl_lc_otp_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_lc_otp_out_if. +// +// Input signals from the fuse_ctrl_lc_otp_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_lc_otp_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_lc_otp_out_pkg_hdl::*; +`include "src/fuse_ctrl_lc_otp_out_macros.svh" + + +interface fuse_ctrl_lc_otp_out_monitor_bfm + ( fuse_ctrl_lc_otp_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_lc_otp_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_lc_otp_out_MONITOR_STRUCT + fuse_ctrl_lc_otp_out_monitor_s fuse_ctrl_lc_otp_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_lc_otp_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(lc_otp_vendor_test_rsp_t)-1:0] lc_otp_vendor_test_o_i; + tri [$bits(lc_otp_program_rsp_t)-1:0] lc_otp_program_o_i; + tri [$bits(otp_lc_data_t)-1:0] otp_lc_data_o_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign lc_otp_vendor_test_o_i = bus.lc_otp_vendor_test_o; + assign lc_otp_program_o_i = bus.lc_otp_program_o; + assign otp_lc_data_o_i = bus.otp_lc_data_o; + + // Proxy handle to UVM monitor + fuse_ctrl_lc_otp_out_pkg::fuse_ctrl_lc_otp_out_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_lc_otp_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_lc_otp_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_lc_otp_out_configuration_s fuse_ctrl_lc_otp_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_lc_otp_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_lc_otp_out_monitor_s fuse_ctrl_lc_otp_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_lc_otp_out_monitor_struct.otp_lc_data_o + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_lc_otp_out_monitor_struct.xyz = lc_otp_vendor_test_o_i; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_monitor_struct.xyz = lc_otp_program_o_i; // [$bits(lc_otp_program_rsp_t)-1:0] + // fuse_ctrl_lc_otp_out_monitor_struct.xyz = otp_lc_data_o_i; // [$bits(otp_lc_data_t)-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_random_sequence.svh new file mode 100644 index 000000000..a6806536f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_lc_otp_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_lc_otp_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_random_sequence + extends fuse_ctrl_lc_otp_out_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_out_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_lc_otp_out_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_lc_otp_out_random_sequence::body()-fuse_ctrl_lc_otp_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_lc_otp_out_driver_bfm via the sequencer and fuse_ctrl_lc_otp_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_lc_otp_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_responder_sequence.svh new file mode 100644 index 000000000..0e7cf5ce4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_responder_sequence + extends fuse_ctrl_lc_otp_out_sequence_base ; + + `uvm_object_utils( fuse_ctrl_lc_otp_out_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_lc_otp_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_lc_otp_out_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_sequence_base.svh new file mode 100644 index 000000000..d084a6b64 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_lc_otp_out_transaction ), + .RSP(fuse_ctrl_lc_otp_out_transaction )); + + `uvm_object_utils( fuse_ctrl_lc_otp_out_sequence_base ) + + // variables + typedef fuse_ctrl_lc_otp_out_transaction fuse_ctrl_lc_otp_out_transaction_req_t; + fuse_ctrl_lc_otp_out_transaction_req_t req; + typedef fuse_ctrl_lc_otp_out_transaction fuse_ctrl_lc_otp_out_transaction_rsp_t; + fuse_ctrl_lc_otp_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_lc_otp_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_lc_otp_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction.svh new file mode 100644 index 000000000..ef2229e27 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction.svh @@ -0,0 +1,196 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_lc_otp_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_lc_otp_out_transaction ) + + otp_lc_data_t otp_lc_data_o ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_lc_otp_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_lc_otp_out_monitor and fuse_ctrl_lc_otp_out_monitor_bfm + // This struct is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_MONITOR_STRUCT + fuse_ctrl_lc_otp_out_monitor_s fuse_ctrl_lc_otp_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_monitor_struct. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_lc_otp_out_driver and fuse_ctrl_lc_otp_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_lc_otp_out_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_INITIATOR_STRUCT + fuse_ctrl_lc_otp_out_initiator_s fuse_ctrl_lc_otp_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_initiator_struct. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_lc_otp_out_driver and fuse_ctrl_lc_otp_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_lc_otp_out_driver_bfm. + // This struct is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_RESPONDER_STRUCT + fuse_ctrl_lc_otp_out_responder_s fuse_ctrl_lc_otp_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_lc_otp_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_lc_otp_out_responder_struct. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_lc_otp_out_macros.svh + `fuse_ctrl_lc_otp_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("otp_lc_data_o:0x%x ",otp_lc_data_o); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_lc_otp_out_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.otp_lc_data_o == RHS.otp_lc_data_o) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_lc_otp_out_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.otp_lc_data_o = RHS.otp_lc_data_o; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_lc_otp_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,otp_lc_data_o,"otp_lc_data_o"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction_coverage.svh new file mode 100644 index 000000000..25eeac7c7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_transaction_coverage.svh @@ -0,0 +1,84 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_lc_otp_out transaction information using +// a covergroup named fuse_ctrl_lc_otp_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_lc_otp_out_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_lc_otp_out_transaction )); + + `uvm_component_utils( fuse_ctrl_lc_otp_out_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_lc_otp_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + otp_lc_data_o: coverpoint coverage_trans.otp_lc_data_o; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_lc_otp_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_lc_otp_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_lc_otp_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_lc_otp_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/src/fuse_ctrl_lc_otp_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/yaml/fuse_ctrl_lc_otp_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/yaml/fuse_ctrl_lc_otp_out_interface.yaml new file mode 100644 index 000000000..108ed5f70 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_lc_otp_out_pkg/yaml/fuse_ctrl_lc_otp_out_interface.yaml @@ -0,0 +1,37 @@ +uvmf: + interfaces: + fuse_ctrl_lc_otp_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: input + name: lc_otp_vendor_test_o + reset_value: '''bz' + width: '[''$bits(lc_otp_vendor_test_rsp_t)'']' + - dir: input + name: lc_otp_program_o + reset_value: '''bz' + width: '[''$bits(lc_otp_program_rsp_t)'']' + - dir: input + name: otp_lc_data_o + reset_value: '''bz' + width: '[''$bits(otp_lc_data_t)'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: otp_lc_data_o + type: otp_lc_data_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.project new file mode 100644 index 000000000..a51915b99 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.svproject new file mode 100644 index 000000000..cc08a42fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/Makefile new file mode 100644 index 000000000..e454f5811 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f + +fuse_ctrl_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f + +fuse_ctrl_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_xrtl.f + +COMP_fuse_ctrl_out_if_PKG_TGT_0 = q_comp_fuse_ctrl_out_if_pkg +COMP_fuse_ctrl_out_if_PKG_TGT_1 = v_comp_fuse_ctrl_out_if_pkg +COMP_fuse_ctrl_out_if_PKG_TGT = $(COMP_fuse_ctrl_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_out_if_pkg: $(COMP_fuse_ctrl_out_if_PKG_TGT) + +q_comp_fuse_ctrl_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_out_if_PKG_XRTL) + +v_comp_fuse_ctrl_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_out_if_pkg += -I$(fuse_ctrl_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_out_if_pkg += $(fuse_ctrl_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_out_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/compile.do new file mode 100644 index 000000000..a96c13af2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if.compile new file mode 100644 index 000000000..dd4689f64 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_out_if_hvl.compile + - fuse_ctrl_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_bfm.vinfo new file mode 100644 index 000000000..6288a8874 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_out_if_if.sv +src/fuse_ctrl_out_if_driver_bfm.sv +src/fuse_ctrl_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_common.compile new file mode 100644 index 000000000..c7726ee65 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f new file mode 100644 index 000000000..4355e25d9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f new file mode 100644 index 000000000..13bb387c5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_xrtl.f new file mode 100644 index 000000000..0e7ea6718 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hdl.compile new file mode 100644 index 000000000..676003b6c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_out_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_out_if_if.sv + - src/fuse_ctrl_out_if_monitor_bfm.sv + - src/fuse_ctrl_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hvl.compile new file mode 100644 index 000000000..9d8526a89 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_out_if_common.compile +incdir: + - . +src: + - fuse_ctrl_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.sv new file mode 100644 index 000000000..534d87ccd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_out_if_macros.svh" + + export fuse_ctrl_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_out_if_typedefs.svh" + `include "src/fuse_ctrl_out_if_transaction.svh" + + `include "src/fuse_ctrl_out_if_configuration.svh" + `include "src/fuse_ctrl_out_if_driver.svh" + `include "src/fuse_ctrl_out_if_monitor.svh" + + `include "src/fuse_ctrl_out_if_transaction_coverage.svh" + `include "src/fuse_ctrl_out_if_sequence_base.svh" + `include "src/fuse_ctrl_out_if_random_sequence.svh" + + `include "src/fuse_ctrl_out_if_responder_sequence.svh" + `include "src/fuse_ctrl_out_if2reg_adapter.svh" + + `include "src/fuse_ctrl_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.vinfo new file mode 100644 index 000000000..0daa42ac2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.sv new file mode 100644 index 000000000..80d7ad79d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_out_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..fcc4ab02f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_sve.F new file mode 100644 index 000000000..a4f0dfc42 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_out_if_pkg/fuse_ctrl_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if2reg_adapter.svh new file mode 100644 index 000000000..fd141b5fe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if2reg_adapter #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_out_if2reg_adapter #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h = fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_agent.svh new file mode 100644 index 000000000..2fb6d2a15 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_agent #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_out_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .DRIVER_T(fuse_ctrl_out_if_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_T(fuse_ctrl_out_if_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .COVERAGE_T(fuse_ctrl_out_if_transaction_coverage #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_out_if_agent #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_configuration.svh new file mode 100644 index 000000000..401f3ac74 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_configuration #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_out_if_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_out_if_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_out_if_configuration #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_CONFIGURATION_STRUCT + fuse_ctrl_out_if_configuration_s fuse_ctrl_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_out_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_out_if_configuration_struct. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_out_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_out_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_out_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", agent_path, interface_name, AlertSyncOn ,RndConstLfrSeed ,RndCnstLfsrPerm ,MemInitFile ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_out_if_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver.svh new file mode 100644 index 000000000..03f256f92 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_driver #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_out_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_out_if_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .REQ(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .RSP(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_out_if_driver #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_out_if_driver and fuse_ctrl_out_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_out_if_driver_bfm. +`fuse_ctrl_out_if_INITIATOR_STRUCT + fuse_ctrl_out_if_initiator_s fuse_ctrl_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_out_if_driver and fuse_ctrl_out_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_out_if_driver_bfm. +`fuse_ctrl_out_if_RESPONDER_STRUCT + fuse_ctrl_out_if_responder_s fuse_ctrl_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver_bfm.sv new file mode 100644 index 000000000..a4c591277 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_driver_bfm.sv @@ -0,0 +1,382 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_out_if signal driving. It is +// accessed by the uvm fuse_ctrl_out_if driver through a virtual interface +// handle in the fuse_ctrl_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_out_if_if. +// +// Input signals from the fuse_ctrl_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_out_if_macros.svh" + +interface fuse_ctrl_out_if_driver_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + (fuse_ctrl_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o_i; + reg [$bits(edn_pkg::edn_req_t)-1:0] edn_o_o = 'bz; + tri intr_otp_operation_done_o_i; + reg intr_otp_operation_done_o_o = 'bz; + tri intr_otp_error_o_i; + reg intr_otp_error_o_o = 'bz; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_i; + reg [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_o = 'bz; + tri [7:0] otp_obs_o_i; + reg [7:0] otp_obs_o_o = 'bz; + tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_i; + reg [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_o = 'bz; + tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_i; + reg [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_o = 'bz; + tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_i; + reg [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_o = 'bz; + tri [OtpTestVectWidth-1:0] cio_test_o_i; + reg [OtpTestVectWidth-1:0] cio_test_o_o = 'bz; + tri [OtpTestVectWidth-1:0] cio_test_en_o_i; + reg [OtpTestVectWidth-1:0] cio_test_en_o_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + tri otp_ext_voltage_h_io_i; + reg otp_ext_voltage_h_io_o = 'bz; + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign edn_o_i = bus.edn_o; + assign bus.edn_o = (initiator_responder == RESPONDER) ? edn_o_o : 'bz; + assign intr_otp_operation_done_o_i = bus.intr_otp_operation_done_o; + assign bus.intr_otp_operation_done_o = (initiator_responder == RESPONDER) ? intr_otp_operation_done_o_o : 'bz; + assign intr_otp_error_o_i = bus.intr_otp_error_o; + assign bus.intr_otp_error_o = (initiator_responder == RESPONDER) ? intr_otp_error_o_o : 'bz; + assign alert_tx_o_i = bus.alert_tx_o; + assign bus.alert_tx_o = (initiator_responder == RESPONDER) ? alert_tx_o_o : 'bz; + assign otp_obs_o_i = bus.otp_obs_o; + assign bus.otp_obs_o = (initiator_responder == RESPONDER) ? otp_obs_o_o : 'bz; + assign otp_ast_pwr_seq_o_i = bus.otp_ast_pwr_seq_o; + assign bus.otp_ast_pwr_seq_o = (initiator_responder == RESPONDER) ? otp_ast_pwr_seq_o_o : 'bz; + assign pwr_otp_o_i = bus.pwr_otp_o; + assign bus.pwr_otp_o = (initiator_responder == RESPONDER) ? pwr_otp_o_o : 'bz; + assign otp_broadcast_o_i = bus.otp_broadcast_o; + assign bus.otp_broadcast_o = (initiator_responder == RESPONDER) ? otp_broadcast_o_o : 'bz; + assign cio_test_o_i = bus.cio_test_o; + assign bus.cio_test_o = (initiator_responder == RESPONDER) ? cio_test_o_o : 'bz; + assign cio_test_en_o_i = bus.cio_test_en_o; + assign bus.cio_test_en_o = (initiator_responder == RESPONDER) ? cio_test_en_o_o : 'bz; + + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.otp_ext_voltage_h_io = otp_ext_voltage_h_io_o; + + // Proxy handle to UVM driver + fuse_ctrl_out_if_pkg::fuse_ctrl_out_if_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_out_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_out_if_driver and fuse_ctrl_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_out_if_driver_bfm. + `fuse_ctrl_out_if_INITIATOR_STRUCT + fuse_ctrl_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_out_if_driver and fuse_ctrl_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_out_if_driver_bfm. + `fuse_ctrl_out_if_RESPONDER_STRUCT + fuse_ctrl_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + edn_o_o <= 'bz; + intr_otp_operation_done_o_o <= 'bz; + intr_otp_error_o_o <= 'bz; + alert_tx_o_o <= 'bz; + otp_obs_o_o <= 'bz; + otp_ast_pwr_seq_o_o <= 'bz; + pwr_otp_o_o <= 'bz; + lc_otp_vendor_test_o_o <= 'bz; + lc_otp_program_o_o <= 'bz; + otp_lc_data_o_o <= 'bz; + otp_broadcast_o_o <= 'bz; + cio_test_o_o <= 'bz; + cio_test_en_o_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + otp_ext_voltage_h_io_o <= 'bz; + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_out_if_configuration_s fuse_ctrl_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_out_if_initiator_s fuse_ctrl_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_out_if_responder_s fuse_ctrl_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_out_if_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Members within the fuse_ctrl_out_if_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + initiator_struct = fuse_ctrl_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_out_if_responder_struct.xyz = edn_o_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = intr_otp_operation_done_o_i; // + // fuse_ctrl_out_if_responder_struct.xyz = intr_otp_error_o_i; // + // fuse_ctrl_out_if_responder_struct.xyz = alert_tx_o_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = otp_obs_o_i; // [7:0] + // fuse_ctrl_out_if_responder_struct.xyz = otp_ast_pwr_seq_o_i; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = pwr_otp_o_i; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = lc_otp_vendor_test_o_i; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = lc_otp_program_o_i; // [$bits(lc_otp_program_rsp_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = otp_lc_data_o_i; // [$bits(otp_lc_data_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = otp_broadcast_o_i; // [$bits(otp_broadcast_t)-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = cio_test_o_i; // [OtpTestVectWidth-1:0] + // fuse_ctrl_out_if_responder_struct.xyz = cio_test_en_o_i; // [OtpTestVectWidth-1:0] + // Initiator inout signals + // fuse_ctrl_out_if_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_out_if_initiator_struct.xyz; // + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_out_if_initiator_s fuse_ctrl_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_out_if_responder_s fuse_ctrl_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_out_if_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Variables within the fuse_ctrl_out_if_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // fuse_ctrl_out_if_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // edn_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(edn_pkg::edn_req_t)-1:0] + // intr_otp_operation_done_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // + // intr_otp_error_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // + // alert_tx_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // otp_obs_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [7:0] + // otp_ast_pwr_seq_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // pwr_otp_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // lc_otp_vendor_test_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // lc_otp_program_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(lc_otp_program_rsp_t)-1:0] + // otp_lc_data_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(otp_lc_data_t)-1:0] + // otp_broadcast_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [$bits(otp_broadcast_t)-1:0] + // cio_test_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [OtpTestVectWidth-1:0] + // cio_test_en_o_o <= fuse_ctrl_out_if_initiator_struct.xyz; // [OtpTestVectWidth-1:0] + // Responder inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_out_if_initiator_struct.xyz; // + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_if.sv new file mode 100644 index 000000000..d1b92cdfb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_if.sv @@ -0,0 +1,134 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_out_if interface signals. +// It is instantiated once per fuse_ctrl_out_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_out_if_bus.edn_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.intr_otp_operation_done_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.intr_otp_error_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.alert_tx_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.otp_obs_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.otp_ast_pwr_seq_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.pwr_otp_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.otp_broadcast_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.otp_ext_voltage_h_io), // Agent inout +// .dut_signal_port(fuse_ctrl_out_if_bus.cio_test_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_if_bus.cio_test_en_o), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_if_pkg_hdl::*; + +interface fuse_ctrl_out_if_if #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o, + inout tri intr_otp_operation_done_o, + inout tri intr_otp_error_o, + inout tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o, + inout tri [7:0] otp_obs_o, + inout tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o, + inout tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o, + inout tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o, + inout tri otp_ext_voltage_h_io, + inout tri [OtpTestVectWidth-1:0] cio_test_o, + inout tri [OtpTestVectWidth-1:0] cio_test_en_o + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input edn_o, + input intr_otp_operation_done_o, + input intr_otp_error_o, + input alert_tx_o, + input otp_obs_o, + input otp_ast_pwr_seq_o, + input pwr_otp_o, + input otp_broadcast_o, + input otp_ext_voltage_h_io, + input cio_test_o, + input cio_test_en_o + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input edn_o, + input intr_otp_operation_done_o, + input intr_otp_error_o, + input alert_tx_o, + input otp_obs_o, + input otp_ast_pwr_seq_o, + input pwr_otp_o, + input otp_broadcast_o, + inout otp_ext_voltage_h_io, + input cio_test_o, + input cio_test_en_o + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output edn_o, + output intr_otp_operation_done_o, + output intr_otp_error_o, + output alert_tx_o, + output otp_obs_o, + output otp_ast_pwr_seq_o, + output pwr_otp_o, + output otp_broadcast_o, + inout otp_ext_voltage_h_io, + output cio_test_o, + output cio_test_en_o + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_macros.svh new file mode 100644 index 000000000..79bf75fe9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_out_if_configuration class. +// + `define fuse_ctrl_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_out_if_configuration_s; + + `define fuse_ctrl_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_if_configuration_s to_struct();\ + fuse_ctrl_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_out_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_out_if_configuration_s fuse_ctrl_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_out_if_transaction class. +// + `define fuse_ctrl_out_if_MONITOR_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_if_monitor_s; + + `define fuse_ctrl_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_if_monitor_s to_monitor_struct();\ + fuse_ctrl_out_if_monitor_struct = \ + { \ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_out_if_monitor_s fuse_ctrl_out_if_monitor_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_out_if_INITIATOR_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_if_initiator_s; + + `define fuse_ctrl_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_if_initiator_s to_initiator_struct();\ + fuse_ctrl_out_if_initiator_struct = \ + {\ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_out_if_initiator_s fuse_ctrl_out_if_initiator_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_out_if_RESPONDER_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_if_responder_s; + + `define fuse_ctrl_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_if_responder_s to_responder_struct();\ + fuse_ctrl_out_if_responder_struct = \ + {\ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_if_responder_struct);\ + endfunction + + `define fuse_ctrl_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_out_if_responder_s fuse_ctrl_out_if_responder_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor.svh new file mode 100644 index 000000000..5aba5c809 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_out_if transactions observed by the +// fuse_ctrl_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_monitor #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_out_if_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_out_if_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_out_if_monitor #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_out_if_monitor_s fuse_ctrl_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor_bfm.sv new file mode 100644 index 000000000..e10a4b55e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_monitor_bfm.sv @@ -0,0 +1,230 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_out_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_out_if monitor through a virtual +// interface handle in the fuse_ctrl_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_out_if_if. +// +// Input signals from the fuse_ctrl_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_out_if_macros.svh" + + +interface fuse_ctrl_out_if_monitor_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + ( fuse_ctrl_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_out_if_MONITOR_STRUCT + fuse_ctrl_out_if_monitor_s fuse_ctrl_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o_i; + tri intr_otp_operation_done_o_i; + tri intr_otp_error_o_i; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_i; + tri [7:0] otp_obs_o_i; + tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_i; + tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_i; + tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_i; + tri otp_ext_voltage_h_io_i; + tri [OtpTestVectWidth-1:0] cio_test_o_i; + tri [OtpTestVectWidth-1:0] cio_test_en_o_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign edn_o_i = bus.edn_o; + assign intr_otp_operation_done_o_i = bus.intr_otp_operation_done_o; + assign intr_otp_error_o_i = bus.intr_otp_error_o; + assign alert_tx_o_i = bus.alert_tx_o; + assign otp_obs_o_i = bus.otp_obs_o; + assign otp_ast_pwr_seq_o_i = bus.otp_ast_pwr_seq_o; + assign pwr_otp_o_i = bus.pwr_otp_o; + assign otp_broadcast_o_i = bus.otp_broadcast_o; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + assign cio_test_o_i = bus.cio_test_o; + assign cio_test_en_o_i = bus.cio_test_en_o; + + // Proxy handle to UVM monitor + fuse_ctrl_out_if_pkg::fuse_ctrl_out_if_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_out_if_configuration_s fuse_ctrl_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_out_if_monitor_s fuse_ctrl_out_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_out_if_monitor_struct.pwr_otp_o + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_out_if_monitor_struct.xyz = edn_o_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = intr_otp_operation_done_o_i; // + // fuse_ctrl_out_if_monitor_struct.xyz = intr_otp_error_o_i; // + // fuse_ctrl_out_if_monitor_struct.xyz = alert_tx_o_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = otp_obs_o_i; // [7:0] + // fuse_ctrl_out_if_monitor_struct.xyz = otp_ast_pwr_seq_o_i; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = pwr_otp_o_i; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = otp_broadcast_o_i; // [$bits(otp_broadcast_t)-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = otp_ext_voltage_h_io_i; // + // fuse_ctrl_out_if_monitor_struct.xyz = cio_test_o_i; // [OtpTestVectWidth-1:0] + // fuse_ctrl_out_if_monitor_struct.xyz = cio_test_en_o_i; // [OtpTestVectWidth-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_random_sequence.svh new file mode 100644 index 000000000..6aacd46f1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_random_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_out_if_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_out_if_random_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_out_if_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_out_if_random_sequence::body()-fuse_ctrl_out_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_out_if_driver_bfm via the sequencer and fuse_ctrl_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_responder_sequence.svh new file mode 100644 index 000000000..b82d116c6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_responder_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_out_if_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_out_if_responder_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_out_if_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_sequence_base.svh new file mode 100644 index 000000000..475fcbfc5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_sequence_base #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .RSP(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_out_if_sequence_base #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // variables + typedef fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_out_if_transaction_req_t; + fuse_ctrl_out_if_transaction_req_t req; + typedef fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_out_if_transaction_rsp_t; + fuse_ctrl_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction.svh new file mode 100644 index 000000000..110c96097 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction.svh @@ -0,0 +1,223 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_transaction #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_out_if_transaction #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_out_if_monitor and fuse_ctrl_out_if_monitor_bfm + // This struct is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_MONITOR_STRUCT + fuse_ctrl_out_if_monitor_s fuse_ctrl_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_out_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_out_if_monitor_struct. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_out_if_driver and fuse_ctrl_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_INITIATOR_STRUCT + fuse_ctrl_out_if_initiator_s fuse_ctrl_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_out_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_out_if_initiator_struct. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_out_if_driver and fuse_ctrl_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_RESPONDER_STRUCT + fuse_ctrl_out_if_responder_s fuse_ctrl_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_out_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_out_if_responder_struct. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_if_macros.svh + `fuse_ctrl_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("otp_lc_data_o:0x%x pwr_otp_o:0x%x ",otp_lc_data_o,pwr_otp_o); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.otp_lc_data_o == RHS.otp_lc_data_o) + &&(this.pwr_otp_o == RHS.pwr_otp_o) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.otp_lc_data_o = RHS.otp_lc_data_o; + this.pwr_otp_o = RHS.pwr_otp_o; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,otp_lc_data_o,"otp_lc_data_o"); + $add_attribute(transaction_view_h,pwr_otp_o,"pwr_otp_o"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction_coverage.svh new file mode 100644 index 000000000..4c40b9333 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_transaction_coverage.svh @@ -0,0 +1,103 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_out_if transaction information using +// a covergroup named fuse_ctrl_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_if_transaction_coverage #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_subscriber #(.T(fuse_ctrl_out_if_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_out_if_transaction_coverage #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + otp_lc_data_o: coverpoint coverage_trans.otp_lc_data_o; + pwr_otp_o: coverpoint coverage_trans.pwr_otp_o; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_out_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/src/fuse_ctrl_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/yaml/fuse_ctrl_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/yaml/fuse_ctrl_out_if_interface.yaml new file mode 100644 index 000000000..dd001e21a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_if_pkg/yaml/fuse_ctrl_out_if_interface.yaml @@ -0,0 +1,80 @@ +uvmf: + interfaces: + fuse_ctrl_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AlertSyncOn + type: int + value: '3' + - name: RndConstLfrSeed + type: lfsr_seed_t + value: RndConstLfsrSeedDefault + - name: RndCnstLfsrPerm + type: lsfr_perm_t + value: RndCnstLfsrPermDefault + - name: MemInitFile + type: string + ports: + - dir: input + name: edn_o + reset_value: '''bz' + width: '[''$bits(edn_pkg::edn_req_t)'']' + - dir: input + name: intr_otp_operation_done_o + reset_value: '''bz' + width: '1' + - dir: input + name: intr_otp_error_o + reset_value: '''bz' + width: '1' + - dir: input + name: alert_tx_o + reset_value: '''bz' + width: '[''NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)'']' + - dir: input + name: otp_obs_o + reset_value: '''bz' + width: '8' + - dir: input + name: otp_ast_pwr_seq_o + reset_value: '''bz' + width: '[''$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)'']' + - dir: input + name: pwr_otp_o + reset_value: '''bz' + width: '[''$bits(pwrmgr_pkg::pwr_otp_rsp_t)'']' + - dir: input + name: otp_broadcast_o + reset_value: '''bz' + width: '[''$bits(otp_broadcast_t)'']' + - dir: inout + name: otp_ext_voltage_h_io + reset_value: '''bz' + width: '1' + - dir: input + name: cio_test_o + reset_value: '''bz' + width: '[''OtpTestVectWidth'']' + - dir: input + name: cio_test_en_o + reset_value: '''bz' + width: '[''OtpTestVectWidth'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: pwr_otp_o + type: pwrmgr_pkg::pwr_otp_rsp_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/.project new file mode 100644 index 000000000..c96dcb429 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/.svproject new file mode 100644 index 000000000..64d224ae5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/Makefile new file mode 100644 index 000000000..b5ee9df5a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f + +fuse_ctrl_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f + +fuse_ctrl_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f + +COMP_fuse_ctrl_out_PKG_TGT_0 = q_comp_fuse_ctrl_out_pkg +COMP_fuse_ctrl_out_PKG_TGT_1 = v_comp_fuse_ctrl_out_pkg +COMP_fuse_ctrl_out_PKG_TGT = $(COMP_fuse_ctrl_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_out_pkg: $(COMP_fuse_ctrl_out_PKG_TGT) + +q_comp_fuse_ctrl_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_out_PKG_XRTL) + +v_comp_fuse_ctrl_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_out_pkg += -I$(fuse_ctrl_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_out_pkg += $(fuse_ctrl_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/compile.do new file mode 100644 index 000000000..5fdaafcd1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile new file mode 100644 index 000000000..3ac4b243e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_out_hvl.compile + - fuse_ctrl_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo new file mode 100644 index 000000000..b4ea5985b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_out_if.sv +src/fuse_ctrl_out_driver_bfm.sv +src/fuse_ctrl_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_common.compile new file mode 100644 index 000000000..1193b2509 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f new file mode 100644 index 000000000..5be27730e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f new file mode 100644 index 000000000..fc769adb0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f new file mode 100644 index 000000000..4a7b8cc2b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hdl.compile new file mode 100644 index 000000000..2745ad2a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_out_if.sv + - src/fuse_ctrl_out_monitor_bfm.sv + - src/fuse_ctrl_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hvl.compile new file mode 100644 index 000000000..5562a204a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_out_common.compile +incdir: + - . +src: + - fuse_ctrl_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv new file mode 100644 index 000000000..afb8df957 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_out_macros.svh" + + export fuse_ctrl_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_out_typedefs.svh" + `include "src/fuse_ctrl_out_transaction.svh" + + `include "src/fuse_ctrl_out_configuration.svh" + `include "src/fuse_ctrl_out_driver.svh" + `include "src/fuse_ctrl_out_monitor.svh" + + `include "src/fuse_ctrl_out_transaction_coverage.svh" + `include "src/fuse_ctrl_out_sequence_base.svh" + `include "src/fuse_ctrl_out_random_sequence.svh" + + `include "src/fuse_ctrl_out_responder_sequence.svh" + `include "src/fuse_ctrl_out2reg_adapter.svh" + + `include "src/fuse_ctrl_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo new file mode 100644 index 000000000..4f08c9ef3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.sv new file mode 100644 index 000000000..f90777afe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.vinfo new file mode 100644 index 000000000..c55df62d8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F new file mode 100644 index 000000000..94ccd9b8b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_out_pkg/fuse_ctrl_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out2reg_adapter.svh new file mode 100644 index 000000000..c13afeb59 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out2reg_adapter #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_out2reg_adapter #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h = fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_agent.svh new file mode 100644 index 000000000..64fcd3c17 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_agent #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_out_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .DRIVER_T(fuse_ctrl_out_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_T(fuse_ctrl_out_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .COVERAGE_T(fuse_ctrl_out_transaction_coverage #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_out_agent #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_configuration.svh new file mode 100644 index 000000000..52338d1e5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_configuration #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_out_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_out_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_out_configuration #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_CONFIGURATION_STRUCT + fuse_ctrl_out_configuration_s fuse_ctrl_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_out_configuration_struct. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_out_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_out_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", agent_path, interface_name, AlertSyncOn ,RndConstLfrSeed ,RndCnstLfsrPerm ,MemInitFile ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_out_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver.svh new file mode 100644 index 000000000..ec2f7b4ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_driver #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_out_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_out_driver_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .REQ(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + ), + .RSP(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_out_driver #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_out_driver_bfm. +`fuse_ctrl_out_INITIATOR_STRUCT + fuse_ctrl_out_initiator_s fuse_ctrl_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_out_driver_bfm. +`fuse_ctrl_out_RESPONDER_STRUCT + fuse_ctrl_out_responder_s fuse_ctrl_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver_bfm.sv new file mode 100644 index 000000000..0b796ef47 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_driver_bfm.sv @@ -0,0 +1,374 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_out signal driving. It is +// accessed by the uvm fuse_ctrl_out driver through a virtual interface +// handle in the fuse_ctrl_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_out_if. +// +// Input signals from the fuse_ctrl_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_pkg_hdl::*; +`include "src/fuse_ctrl_out_macros.svh" + +interface fuse_ctrl_out_driver_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + (fuse_ctrl_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o_i; + reg [$bits(edn_pkg::edn_req_t)-1:0] edn_o_o = 'bz; + tri intr_otp_operation_done_o_i; + reg intr_otp_operation_done_o_o = 'bz; + tri intr_otp_error_o_i; + reg intr_otp_error_o_o = 'bz; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_i; + reg [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_o = 'bz; + tri [7:0] otp_obs_o_i; + reg [7:0] otp_obs_o_o = 'bz; + tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_i; + reg [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_o = 'bz; + tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_i; + reg [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_o = 'bz; + tri [OtpTestVectWidth-1:0] cio_test_o_i; + reg [OtpTestVectWidth-1:0] cio_test_o_o = 'bz; + tri [OtpTestVectWidth-1:0] cio_test_en_o_i; + reg [OtpTestVectWidth-1:0] cio_test_en_o_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign edn_o_i = bus.edn_o; + assign bus.edn_o = (initiator_responder == RESPONDER) ? edn_o_o : 'bz; + assign intr_otp_operation_done_o_i = bus.intr_otp_operation_done_o; + assign bus.intr_otp_operation_done_o = (initiator_responder == RESPONDER) ? intr_otp_operation_done_o_o : 'bz; + assign intr_otp_error_o_i = bus.intr_otp_error_o; + assign bus.intr_otp_error_o = (initiator_responder == RESPONDER) ? intr_otp_error_o_o : 'bz; + assign alert_tx_o_i = bus.alert_tx_o; + assign bus.alert_tx_o = (initiator_responder == RESPONDER) ? alert_tx_o_o : 'bz; + assign otp_obs_o_i = bus.otp_obs_o; + assign bus.otp_obs_o = (initiator_responder == RESPONDER) ? otp_obs_o_o : 'bz; + assign otp_ast_pwr_seq_o_i = bus.otp_ast_pwr_seq_o; + assign bus.otp_ast_pwr_seq_o = (initiator_responder == RESPONDER) ? otp_ast_pwr_seq_o_o : 'bz; + assign otp_broadcast_o_i = bus.otp_broadcast_o; + assign bus.otp_broadcast_o = (initiator_responder == RESPONDER) ? otp_broadcast_o_o : 'bz; + assign cio_test_o_i = bus.cio_test_o; + assign bus.cio_test_o = (initiator_responder == RESPONDER) ? cio_test_o_o : 'bz; + assign cio_test_en_o_i = bus.cio_test_en_o; + assign bus.cio_test_en_o = (initiator_responder == RESPONDER) ? cio_test_en_o_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_out_pkg::fuse_ctrl_out_driver #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_out_driver_bfm. + `fuse_ctrl_out_INITIATOR_STRUCT + fuse_ctrl_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_out_driver_bfm. + `fuse_ctrl_out_RESPONDER_STRUCT + fuse_ctrl_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + edn_o_o <= 'bz; + intr_otp_operation_done_o_o <= 'bz; + intr_otp_error_o_o <= 'bz; + alert_tx_o_o <= 'bz; + otp_obs_o_o <= 'bz; + otp_ast_pwr_seq_o_o <= 'bz; + pwr_otp_o_o <= 'bz; + lc_otp_vendor_test_o_o <= 'bz; + lc_otp_program_o_o <= 'bz; + otp_lc_data_o_o <= 'bz; + otp_broadcast_o_o <= 'bz; + cio_test_o_o <= 'bz; + cio_test_en_o_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + otp_ext_voltage_h_io_o <= 'bz; + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_out_configuration_s fuse_ctrl_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_out_initiator_s fuse_ctrl_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_out_responder_s fuse_ctrl_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_out_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Members within the fuse_ctrl_out_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + initiator_struct = fuse_ctrl_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_out_responder_struct.xyz = edn_o_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = intr_otp_operation_done_o_i; // + // fuse_ctrl_out_responder_struct.xyz = intr_otp_error_o_i; // + // fuse_ctrl_out_responder_struct.xyz = alert_tx_o_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = otp_obs_o_i; // [7:0] + // fuse_ctrl_out_responder_struct.xyz = otp_ast_pwr_seq_o_i; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = pwr_otp_o_i; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = lc_otp_vendor_test_o_i; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = lc_otp_program_o_i; // [$bits(lc_otp_program_rsp_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = otp_lc_data_o_i; // [$bits(otp_lc_data_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = otp_broadcast_o_i; // [$bits(otp_broadcast_t)-1:0] + // fuse_ctrl_out_responder_struct.xyz = cio_test_o_i; // [OtpTestVectWidth-1:0] + // fuse_ctrl_out_responder_struct.xyz = cio_test_en_o_i; // [OtpTestVectWidth-1:0] + // Initiator inout signals + // fuse_ctrl_out_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_out_initiator_struct.xyz; // + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_out_initiator_s fuse_ctrl_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_out_responder_s fuse_ctrl_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_out_initiator_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Variables within the fuse_ctrl_out_responder_struct: + // otp_lc_data_t otp_lc_data_o ; + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // fuse_ctrl_out_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // edn_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(edn_pkg::edn_req_t)-1:0] + // intr_otp_operation_done_o_o <= fuse_ctrl_out_initiator_struct.xyz; // + // intr_otp_error_o_o <= fuse_ctrl_out_initiator_struct.xyz; // + // alert_tx_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // otp_obs_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [7:0] + // otp_ast_pwr_seq_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // pwr_otp_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // lc_otp_vendor_test_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(lc_otp_vendor_test_rsp_t)-1:0] + // lc_otp_program_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(lc_otp_program_rsp_t)-1:0] + // otp_lc_data_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(otp_lc_data_t)-1:0] + // otp_broadcast_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [$bits(otp_broadcast_t)-1:0] + // cio_test_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [OtpTestVectWidth-1:0] + // cio_test_en_o_o <= fuse_ctrl_out_initiator_struct.xyz; // [OtpTestVectWidth-1:0] + // Responder inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_out_initiator_struct.xyz; // + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv new file mode 100644 index 000000000..25d4370f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_out interface signals. +// It is instantiated once per fuse_ctrl_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_out_bus.edn_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.intr_otp_operation_done_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.intr_otp_error_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.alert_tx_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.otp_obs_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.otp_ast_pwr_seq_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.otp_broadcast_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.cio_test_o), // Agent input +// .dut_signal_port(fuse_ctrl_out_bus.cio_test_en_o), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_pkg_hdl::*; + +interface fuse_ctrl_out_if #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o, + inout tri intr_otp_operation_done_o, + inout tri intr_otp_error_o, + inout tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o, + inout tri [7:0] otp_obs_o, + inout tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o, + inout tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o, + inout tri [OtpTestVectWidth-1:0] cio_test_o, + inout tri [OtpTestVectWidth-1:0] cio_test_en_o + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input edn_o, + input intr_otp_operation_done_o, + input intr_otp_error_o, + input alert_tx_o, + input otp_obs_o, + input otp_ast_pwr_seq_o, + input otp_broadcast_o, + input cio_test_o, + input cio_test_en_o + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input edn_o, + input intr_otp_operation_done_o, + input intr_otp_error_o, + input alert_tx_o, + input otp_obs_o, + input otp_ast_pwr_seq_o, + input otp_broadcast_o, + input cio_test_o, + input cio_test_en_o + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output edn_o, + output intr_otp_operation_done_o, + output intr_otp_error_o, + output alert_tx_o, + output otp_obs_o, + output otp_ast_pwr_seq_o, + output otp_broadcast_o, + output cio_test_o, + output cio_test_en_o + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_macros.svh new file mode 100644 index 000000000..3002819f6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_out_configuration class. +// + `define fuse_ctrl_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_out_configuration_s; + + `define fuse_ctrl_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_configuration_s to_struct();\ + fuse_ctrl_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_out_configuration_s fuse_ctrl_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_out_transaction class. +// + `define fuse_ctrl_out_MONITOR_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_monitor_s; + + `define fuse_ctrl_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_monitor_s to_monitor_struct();\ + fuse_ctrl_out_monitor_struct = \ + { \ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_out_monitor_s fuse_ctrl_out_monitor_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_out_INITIATOR_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_initiator_s; + + `define fuse_ctrl_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_initiator_s to_initiator_struct();\ + fuse_ctrl_out_initiator_struct = \ + {\ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_out_initiator_s fuse_ctrl_out_initiator_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_out_RESPONDER_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_out_responder_s; + + `define fuse_ctrl_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_out_responder_s to_responder_struct();\ + fuse_ctrl_out_responder_struct = \ + {\ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_out_responder_struct);\ + endfunction + + `define fuse_ctrl_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_out_responder_s fuse_ctrl_out_responder_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor.svh new file mode 100644 index 000000000..9f967f63b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_out transactions observed by the +// fuse_ctrl_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_monitor #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_out_configuration #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_out_monitor_bfm #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .TRANS_T(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_out_monitor #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_out_monitor_s fuse_ctrl_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor_bfm.sv new file mode 100644 index 000000000..e33c93099 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_monitor_bfm.sv @@ -0,0 +1,224 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_out monitor through a virtual +// interface handle in the fuse_ctrl_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_out_if. +// +// Input signals from the fuse_ctrl_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_out_pkg_hdl::*; +`include "src/fuse_ctrl_out_macros.svh" + + +interface fuse_ctrl_out_monitor_bfm #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + ( fuse_ctrl_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AlertSyncOn=%x RndConstLfrSeed=%x RndCnstLfsrPerm=%x MemInitFile=%x ", AlertSyncOn,RndConstLfrSeed,RndCnstLfsrPerm,MemInitFile), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_out_MONITOR_STRUCT + fuse_ctrl_out_monitor_s fuse_ctrl_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(edn_pkg::edn_req_t)-1:0] edn_o_i; + tri intr_otp_operation_done_o_i; + tri intr_otp_error_o_i; + tri [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] alert_tx_o_i; + tri [7:0] otp_obs_o_i; + tri [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] otp_ast_pwr_seq_o_i; + tri [$bits(otp_broadcast_t)-1:0] otp_broadcast_o_i; + tri [OtpTestVectWidth-1:0] cio_test_o_i; + tri [OtpTestVectWidth-1:0] cio_test_en_o_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign edn_o_i = bus.edn_o; + assign intr_otp_operation_done_o_i = bus.intr_otp_operation_done_o; + assign intr_otp_error_o_i = bus.intr_otp_error_o; + assign alert_tx_o_i = bus.alert_tx_o; + assign otp_obs_o_i = bus.otp_obs_o; + assign otp_ast_pwr_seq_o_i = bus.otp_ast_pwr_seq_o; + assign otp_broadcast_o_i = bus.otp_broadcast_o; + assign cio_test_o_i = bus.cio_test_o; + assign cio_test_en_o_i = bus.cio_test_en_o; + + // Proxy handle to UVM monitor + fuse_ctrl_out_pkg::fuse_ctrl_out_monitor #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_out_configuration_s fuse_ctrl_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_out_monitor_s fuse_ctrl_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_out_monitor_struct.pwr_otp_o + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_out_monitor_struct.xyz = edn_o_i; // [$bits(edn_pkg::edn_req_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = intr_otp_operation_done_o_i; // + // fuse_ctrl_out_monitor_struct.xyz = intr_otp_error_o_i; // + // fuse_ctrl_out_monitor_struct.xyz = alert_tx_o_i; // [NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = otp_obs_o_i; // [7:0] + // fuse_ctrl_out_monitor_struct.xyz = otp_ast_pwr_seq_o_i; // [$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = otp_broadcast_o_i; // [$bits(otp_broadcast_t)-1:0] + // fuse_ctrl_out_monitor_struct.xyz = cio_test_o_i; // [OtpTestVectWidth-1:0] + // fuse_ctrl_out_monitor_struct.xyz = cio_test_en_o_i; // [OtpTestVectWidth-1:0] + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_random_sequence.svh new file mode 100644 index 000000000..fa517894b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_random_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_out_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_out_random_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_out_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_out_random_sequence::body()-fuse_ctrl_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_out_driver_bfm via the sequencer and fuse_ctrl_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_responder_sequence.svh new file mode 100644 index 000000000..2dfe53b5d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_responder_sequence #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + + extends fuse_ctrl_out_sequence_base #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +; + + `uvm_object_param_utils( fuse_ctrl_out_responder_sequence #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_out_transaction#( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_sequence_base.svh new file mode 100644 index 000000000..d115821b5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_sequence_base #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +), + .RSP(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_out_sequence_base #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + // variables + typedef fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_out_transaction_req_t; + fuse_ctrl_out_transaction_req_t req; + typedef fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + fuse_ctrl_out_transaction_rsp_t; + fuse_ctrl_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction.svh new file mode 100644 index 000000000..1da32f283 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction.svh @@ -0,0 +1,223 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_transaction #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_out_transaction #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_out_monitor and fuse_ctrl_out_monitor_bfm + // This struct is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_MONITOR_STRUCT + fuse_ctrl_out_monitor_s fuse_ctrl_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_out_monitor_struct. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_out_driver_bfm. + // This struct is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_INITIATOR_STRUCT + fuse_ctrl_out_initiator_s fuse_ctrl_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_out_initiator_struct. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_out_driver and fuse_ctrl_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_out_driver_bfm. + // This struct is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_RESPONDER_STRUCT + fuse_ctrl_out_responder_s fuse_ctrl_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_out_responder_struct. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_out_macros.svh + `fuse_ctrl_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("otp_lc_data_o:0x%x pwr_otp_o:0x%x ",otp_lc_data_o,pwr_otp_o); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.otp_lc_data_o == RHS.otp_lc_data_o) + &&(this.pwr_otp_o == RHS.pwr_otp_o) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.otp_lc_data_o = RHS.otp_lc_data_o; + this.pwr_otp_o = RHS.pwr_otp_o; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,otp_lc_data_o,"otp_lc_data_o"); + $add_attribute(transaction_view_h,pwr_otp_o,"pwr_otp_o"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction_coverage.svh new file mode 100644 index 000000000..2233f6d7e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_transaction_coverage.svh @@ -0,0 +1,103 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_out transaction information using +// a covergroup named fuse_ctrl_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_out_transaction_coverage #( + int AlertSyncOn = 3, + lfsr_seed_t RndConstLfrSeed = RndConstLfsrSeedDefault, + lsfr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault, + string MemInitFile = + ) + extends uvm_subscriber #(.T(fuse_ctrl_out_transaction #( + .AlertSyncOn(AlertSyncOn), + .RndConstLfrSeed(RndConstLfrSeed), + .RndCnstLfsrPerm(RndCnstLfsrPerm), + .MemInitFile(MemInitFile) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_out_transaction_coverage #( + AlertSyncOn, + RndConstLfrSeed, + RndCnstLfsrPerm, + MemInitFile + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + otp_lc_data_o: coverpoint coverage_trans.otp_lc_data_o; + pwr_otp_o: coverpoint coverage_trans.pwr_otp_o; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/src/fuse_ctrl_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/yaml/fuse_ctrl_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/yaml/fuse_ctrl_out_interface.yaml new file mode 100644 index 000000000..bbb13e052 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_out_pkg/yaml/fuse_ctrl_out_interface.yaml @@ -0,0 +1,72 @@ +uvmf: + interfaces: + fuse_ctrl_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AlertSyncOn + type: int + value: '3' + - name: RndConstLfrSeed + type: lfsr_seed_t + value: RndConstLfsrSeedDefault + - name: RndCnstLfsrPerm + type: lsfr_perm_t + value: RndCnstLfsrPermDefault + - name: MemInitFile + type: string + ports: + - dir: input + name: edn_o + reset_value: '''bz' + width: '[''$bits(edn_pkg::edn_req_t)'']' + - dir: input + name: intr_otp_operation_done_o + reset_value: '''bz' + width: '1' + - dir: input + name: intr_otp_error_o + reset_value: '''bz' + width: '1' + - dir: input + name: alert_tx_o + reset_value: '''bz' + width: '[''NumAlerts * $bits(caliptra_prim_alert_pkg::alert_tx_t)'']' + - dir: input + name: otp_obs_o + reset_value: '''bz' + width: '8' + - dir: input + name: otp_ast_pwr_seq_o + reset_value: '''bz' + width: '[''$bits(caliptra_otp_ctrl_pkg::otp_ast_req_t)'']' + - dir: input + name: otp_broadcast_o + reset_value: '''bz' + width: '[''$bits(otp_broadcast_t)'']' + - dir: input + name: cio_test_o + reset_value: '''bz' + width: '[''OtpTestVectWidth'']' + - dir: input + name: cio_test_en_o + reset_value: '''bz' + width: '[''OtpTestVectWidth'']' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: pwr_otp_o + type: pwrmgr_pkg::pwr_otp_rsp_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.project new file mode 100644 index 000000000..931d0548e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..e6e385ac0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..7ce58a365 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f + +fuse_ctrl_prim_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f + +fuse_ctrl_prim_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_read_if_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_read_if_pkg +COMP_fuse_ctrl_prim_axi_read_if_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_read_if_pkg +COMP_fuse_ctrl_prim_axi_read_if_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_read_if_pkg: $(COMP_fuse_ctrl_prim_axi_read_if_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_read_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_read_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_if_pkg += -I$(fuse_ctrl_prim_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_if_pkg += $(fuse_ctrl_prim_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..5a8d38b1e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if.compile new file mode 100644 index 000000000..ce142767a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_read_if_hvl.compile + - fuse_ctrl_prim_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..5ecca257f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_read_if_if.sv +src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv +src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_common.compile new file mode 100644 index 000000000..f7bbff4b6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..3be99c24b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..f66b0809e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..0f9b2fdb7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hdl.compile new file mode 100644 index 000000000..4cb1da005 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_read_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_read_if_if.sv + - src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hvl.compile new file mode 100644 index 000000000..bd9e9530a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_read_if_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.sv new file mode 100644 index 000000000..39a398f84 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_read_if_macros.svh" + + export fuse_ctrl_prim_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_read_if_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_read_if_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_read_if_configuration.svh" + `include "src/fuse_ctrl_prim_axi_read_if_driver.svh" + `include "src/fuse_ctrl_prim_axi_read_if_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_read_if_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_read_if_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_read_if_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_read_if_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_read_if2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..9ca839db8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..150746c87 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_read_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..3b7c038b4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..6e979354a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/fuse_ctrl_prim_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..850d7d4dd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_agent.svh new file mode 100644 index 000000000..21263a19c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_configuration.svh new file mode 100644 index 000000000..b51d7b8f0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_read_if_configuration_s fuse_ctrl_prim_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_read_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_if_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_read_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver.svh new file mode 100644 index 000000000..e414a4883 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. +`fuse_ctrl_prim_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_if_initiator_s fuse_ctrl_prim_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. +`fuse_ctrl_prim_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_if_responder_s fuse_ctrl_prim_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..c519b223f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_read_if signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_read_if driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_read_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_if_macros.svh" + +interface fuse_ctrl_prim_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_read_if_pkg::fuse_ctrl_prim_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_read_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. + `fuse_ctrl_prim_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. + `fuse_ctrl_prim_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_read_if_configuration_s fuse_ctrl_prim_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_read_if_initiator_s fuse_ctrl_prim_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_read_if_responder_s fuse_ctrl_prim_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_read_if_initiator_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Members within the fuse_ctrl_prim_axi_read_if_responder_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + initiator_struct = fuse_ctrl_prim_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_prim_axi_read_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_read_if_initiator_s fuse_ctrl_prim_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_read_if_responder_s fuse_ctrl_prim_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_read_if_initiator_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Variables within the fuse_ctrl_prim_axi_read_if_responder_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arlock_i; // + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_prim_axi_read_if_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_if.sv new file mode 100644 index 000000000..e1e4911a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_read_if interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_read_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_if_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_if_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_macros.svh new file mode 100644 index 000000000..9aa71c06e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_read_if_configuration class. +// + `define fuse_ctrl_prim_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_read_if_configuration_s; + + `define fuse_ctrl_prim_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_if_configuration_s to_struct();\ + fuse_ctrl_prim_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_read_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_read_if_configuration_s fuse_ctrl_prim_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_read_if_transaction class. +// + `define fuse_ctrl_prim_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_if_monitor_s; + + `define fuse_ctrl_prim_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_if_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_read_if_monitor_struct = \ + { \ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_read_if_monitor_s fuse_ctrl_prim_axi_read_if_monitor_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_if_initiator_s; + + `define fuse_ctrl_prim_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_if_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_read_if_initiator_struct = \ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_read_if_initiator_s fuse_ctrl_prim_axi_read_if_initiator_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_if_responder_s; + + `define fuse_ctrl_prim_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_if_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_read_if_responder_struct = \ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_if_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_read_if_responder_s fuse_ctrl_prim_axi_read_if_responder_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor.svh new file mode 100644 index 000000000..bf0c76c81 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_read_if transactions observed by the +// fuse_ctrl_prim_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_read_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_read_if_monitor_s fuse_ctrl_prim_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..bed13faf6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_read_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_read_if monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_read_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_if_macros.svh" + + +interface fuse_ctrl_prim_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_read_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_if_monitor_s fuse_ctrl_prim_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_read_if_pkg::fuse_ctrl_prim_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_read_if_configuration_s fuse_ctrl_prim_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_read_if_monitor_s fuse_ctrl_prim_axi_read_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_araddr + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arvalid + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arburst + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arsize + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arlen + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_aruser + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arid + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_arlock + // // fuse_ctrl_prim_axi_read_if_monitor_struct.prim_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_prim_axi_read_if_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..bd8b0a768 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_read_if_random_sequence::body()-fuse_ctrl_prim_axi_read_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_read_if_driver_bfm via the sequencer and fuse_ctrl_prim_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..dd96f25d6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..0d10545bd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_if_transaction_req_t; + fuse_ctrl_prim_axi_read_if_transaction_req_t req; + typedef fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_if_transaction_rsp_t; + fuse_ctrl_prim_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction.svh new file mode 100644 index 000000000..f4f6cb786 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] prim_araddr ; + logic prim_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + logic [2:0] prim_arsize ; + logic [7:0] prim_arlen ; + logic [UW-1:0] prim_aruser ; + logic [IW-1:0] prim_arid ; + logic prim_arlock ; + logic prim_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_read_if_monitor and fuse_ctrl_prim_axi_read_if_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_if_monitor_s fuse_ctrl_prim_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_if_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_if_initiator_s fuse_ctrl_prim_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_if_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_read_if_driver and fuse_ctrl_prim_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_if_responder_s fuse_ctrl_prim_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_if_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_if_macros.svh + `fuse_ctrl_prim_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_araddr:0x%x prim_arvalid:0x%x prim_arburst:0x%x prim_arsize:0x%x prim_arlen:0x%x prim_aruser:0x%x prim_arid:0x%x prim_arlock:0x%x prim_rready:0x%x ",prim_araddr,prim_arvalid,prim_arburst,prim_arsize,prim_arlen,prim_aruser,prim_arid,prim_arlock,prim_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_araddr = RHS.prim_araddr; + this.prim_arvalid = RHS.prim_arvalid; + this.prim_arburst = RHS.prim_arburst; + this.prim_arsize = RHS.prim_arsize; + this.prim_arlen = RHS.prim_arlen; + this.prim_aruser = RHS.prim_aruser; + this.prim_arid = RHS.prim_arid; + this.prim_arlock = RHS.prim_arlock; + this.prim_rready = RHS.prim_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_araddr,"prim_araddr"); + $add_attribute(transaction_view_h,prim_arvalid,"prim_arvalid"); + $add_attribute(transaction_view_h,prim_arburst,"prim_arburst"); + $add_attribute(transaction_view_h,prim_arsize,"prim_arsize"); + $add_attribute(transaction_view_h,prim_arlen,"prim_arlen"); + $add_attribute(transaction_view_h,prim_aruser,"prim_aruser"); + $add_attribute(transaction_view_h,prim_arid,"prim_arid"); + $add_attribute(transaction_view_h,prim_arlock,"prim_arlock"); + $add_attribute(transaction_view_h,prim_rready,"prim_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..283a0b24c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_read_if transaction information using +// a covergroup named fuse_ctrl_prim_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_araddr: coverpoint coverage_trans.prim_araddr; + prim_arvalid: coverpoint coverage_trans.prim_arvalid; + prim_arburst: coverpoint coverage_trans.prim_arburst; + prim_arsize: coverpoint coverage_trans.prim_arsize; + prim_arlen: coverpoint coverage_trans.prim_arlen; + prim_aruser: coverpoint coverage_trans.prim_aruser; + prim_arid: coverpoint coverage_trans.prim_arid; + prim_arlock: coverpoint coverage_trans.prim_arlock; + prim_rready: coverpoint coverage_trans.prim_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_read_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/src/fuse_ctrl_prim_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/yaml/fuse_ctrl_prim_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/yaml/fuse_ctrl_prim_axi_read_if_interface.yaml new file mode 100644 index 000000000..a55568558 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_if_pkg/yaml/fuse_ctrl_prim_axi_read_if_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: prim_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.project new file mode 100644 index 000000000..e3c0c4ae5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_read_in_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.svproject new file mode 100644 index 000000000..fef449edc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/Makefile new file mode 100644 index 000000000..65765f4e1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_read_in_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_read_in_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hvl.f + +fuse_ctrl_prim_axi_read_in_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hdl.f + +fuse_ctrl_prim_axi_read_in_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_read_in_if_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_read_in_if_pkg +COMP_fuse_ctrl_prim_axi_read_in_if_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_read_in_if_pkg +COMP_fuse_ctrl_prim_axi_read_in_if_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_read_in_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_read_in_if_pkg: $(COMP_fuse_ctrl_prim_axi_read_in_if_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_read_in_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_read_in_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_read_in_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_in_if_pkg += -I$(fuse_ctrl_prim_axi_read_in_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_in_if_pkg += $(fuse_ctrl_prim_axi_read_in_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_in_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_read_in_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_in_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_in_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/compile.do new file mode 100644 index 000000000..a0e911399 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_read_in_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if.compile new file mode 100644 index 000000000..43fd9c4de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_read_in_if_hvl.compile + - fuse_ctrl_prim_axi_read_in_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_bfm.vinfo new file mode 100644 index 000000000..395fd9b15 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_read_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_read_in_if_if.sv +src/fuse_ctrl_prim_axi_read_in_if_driver_bfm.sv +src/fuse_ctrl_prim_axi_read_in_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_common.compile new file mode 100644 index 000000000..906b7e2e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hdl.f new file mode 100644 index 000000000..9cdf065b2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hvl.f new file mode 100644 index 000000000..2450d1346 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_xrtl.f new file mode 100644 index 000000000..5634d3c6c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hdl.compile new file mode 100644 index 000000000..1483fae51 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_read_in_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_read_in_if_if.sv + - src/fuse_ctrl_prim_axi_read_in_if_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_read_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hvl.compile new file mode 100644 index 000000000..76c6ba103 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_read_in_if_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_read_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.sv new file mode 100644 index 000000000..41e089ed4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_in_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_read_in_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_read_in_if_macros.svh" + + export fuse_ctrl_prim_axi_read_in_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_read_in_if_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_read_in_if_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_if_configuration.svh" + `include "src/fuse_ctrl_prim_axi_read_in_if_driver.svh" + `include "src/fuse_ctrl_prim_axi_read_in_if_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_if_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_read_in_if_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_read_in_if_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_if_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_read_in_if2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.vinfo new file mode 100644 index 000000000..2cf3cfaf1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_read_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_read_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv new file mode 100644 index 000000000..9a998627f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_in_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_read_in_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_read_in_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.vinfo new file mode 100644 index 000000000..955dc6c9b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_sve.F new file mode 100644 index 000000000..bb7219efe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/fuse_ctrl_prim_axi_read_in_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if2reg_adapter.svh new file mode 100644 index 000000000..573953654 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_read_in_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_read_in_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_read_in_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_agent.svh new file mode 100644 index 000000000..9780962c5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_read_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_read_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_read_in_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_configuration.svh new file mode 100644 index 000000000..efaafca0c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_read_in_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_read_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_read_in_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_read_in_if_configuration_s fuse_ctrl_prim_axi_read_in_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_read_in_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_if_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_read_in_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_read_in_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_read_in_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_read_in_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_in_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver.svh new file mode 100644 index 000000000..cc47e681a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_read_in_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_read_in_if_driver and fuse_ctrl_prim_axi_read_in_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_read_in_if_driver_bfm. +`fuse_ctrl_prim_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_in_if_initiator_s fuse_ctrl_prim_axi_read_in_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_read_in_if_driver and fuse_ctrl_prim_axi_read_in_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_read_in_if_driver_bfm. +`fuse_ctrl_prim_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_in_if_responder_s fuse_ctrl_prim_axi_read_in_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_read_in_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_read_in_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_read_in_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_read_in_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver_bfm.sv new file mode 100644 index 000000000..f1542cfed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_read_in_if signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_read_in_if driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_read_in_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_read_in_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_read_in_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_in_if_macros.svh" + +interface fuse_ctrl_prim_axi_read_in_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_read_in_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_in_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_read_in_if_pkg::fuse_ctrl_prim_axi_read_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_read_in_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_read_in_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_in_if_driver and fuse_ctrl_prim_axi_read_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_in_if_driver_bfm. + `fuse_ctrl_prim_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_in_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_read_in_if_driver and fuse_ctrl_prim_axi_read_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_in_if_driver_bfm. + `fuse_ctrl_prim_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_in_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_read_in_if_configuration_s fuse_ctrl_prim_axi_read_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_read_in_if_initiator_s fuse_ctrl_prim_axi_read_in_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_read_in_if_responder_s fuse_ctrl_prim_axi_read_in_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_read_in_if_initiator_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Members within the fuse_ctrl_prim_axi_read_in_if_responder_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + initiator_struct = fuse_ctrl_prim_axi_read_in_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_prim_axi_read_in_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_read_in_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_read_in_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_read_in_if_initiator_s fuse_ctrl_prim_axi_read_in_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_read_in_if_responder_s fuse_ctrl_prim_axi_read_in_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_read_in_if_initiator_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Variables within the fuse_ctrl_prim_axi_read_in_if_responder_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = arlock_i; // + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_prim_axi_read_in_if_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_read_in_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_read_in_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_if.sv new file mode 100644 index 000000000..b301c7050 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_read_in_if interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_read_in_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_read_in_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_read_in_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_if_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_in_if_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_read_in_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_macros.svh new file mode 100644 index 000000000..8ae1c0f22 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_read_in_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_read_in_if_configuration class. +// + `define fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_read_in_if_configuration_s; + + `define fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_if_configuration_s to_struct();\ + fuse_ctrl_prim_axi_read_in_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_read_in_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_read_in_if_configuration_s fuse_ctrl_prim_axi_read_in_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_read_in_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_read_in_if_transaction class. +// + `define fuse_ctrl_prim_axi_read_in_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_in_if_monitor_s; + + `define fuse_ctrl_prim_axi_read_in_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_if_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_read_in_if_monitor_struct = \ + { \ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_in_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_read_in_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_read_in_if_monitor_s fuse_ctrl_prim_axi_read_in_if_monitor_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_in_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_read_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_in_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_in_if_initiator_s; + + `define fuse_ctrl_prim_axi_read_in_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_if_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_read_in_if_initiator_struct = \ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_in_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_in_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_read_in_if_initiator_s fuse_ctrl_prim_axi_read_in_if_initiator_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_in_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_read_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_in_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_in_if_responder_s; + + `define fuse_ctrl_prim_axi_read_in_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_if_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_read_in_if_responder_struct = \ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_in_if_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_in_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_read_in_if_responder_s fuse_ctrl_prim_axi_read_in_if_responder_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_in_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor.svh new file mode 100644 index 000000000..b6411afc9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_read_in_if transactions observed by the +// fuse_ctrl_prim_axi_read_in_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_read_in_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_read_in_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_read_in_if_monitor_s fuse_ctrl_prim_axi_read_in_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_read_in_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor_bfm.sv new file mode 100644 index 000000000..96ecff71c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_read_in_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_read_in_if monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_read_in_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_read_in_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_read_in_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_in_if_macros.svh" + + +interface fuse_ctrl_prim_axi_read_in_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_read_in_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_in_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_read_in_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_in_if_monitor_s fuse_ctrl_prim_axi_read_in_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_read_in_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_read_in_if_pkg::fuse_ctrl_prim_axi_read_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_read_in_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_read_in_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_read_in_if_configuration_s fuse_ctrl_prim_axi_read_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_read_in_if_monitor_s fuse_ctrl_prim_axi_read_in_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_araddr + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_arvalid + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_arburst + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_arsize + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_arlen + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_aruser + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_arid + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_arlock + // // fuse_ctrl_prim_axi_read_in_if_monitor_struct.prim_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_prim_axi_read_in_if_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_random_sequence.svh new file mode 100644 index 000000000..323a17c7d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_read_in_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_read_in_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_read_in_if_random_sequence::body()-fuse_ctrl_prim_axi_read_in_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_read_in_if_driver_bfm via the sequencer and fuse_ctrl_prim_axi_read_in_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_read_in_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_responder_sequence.svh new file mode 100644 index 000000000..8005d684e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_read_in_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_sequence_base.svh new file mode 100644 index 000000000..7642d22ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_in_if_transaction_req_t; + fuse_ctrl_prim_axi_read_in_if_transaction_req_t req; + typedef fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_in_if_transaction_rsp_t; + fuse_ctrl_prim_axi_read_in_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_read_in_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_read_in_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction.svh new file mode 100644 index 000000000..ed0bed0fc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_read_in_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] prim_araddr ; + logic prim_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + logic [2:0] prim_arsize ; + logic [7:0] prim_arlen ; + logic [UW-1:0] prim_aruser ; + logic [IW-1:0] prim_arid ; + logic prim_arlock ; + logic prim_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_read_in_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_read_in_if_monitor and fuse_ctrl_prim_axi_read_in_if_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_in_if_monitor_s fuse_ctrl_prim_axi_read_in_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_in_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_if_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_in_if_driver and fuse_ctrl_prim_axi_read_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_in_if_initiator_s fuse_ctrl_prim_axi_read_in_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_in_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_if_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_read_in_if_driver and fuse_ctrl_prim_axi_read_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_in_if_responder_s fuse_ctrl_prim_axi_read_in_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_in_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_if_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_if_macros.svh + `fuse_ctrl_prim_axi_read_in_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_araddr:0x%x prim_arvalid:0x%x prim_arburst:0x%x prim_arsize:0x%x prim_arlen:0x%x prim_aruser:0x%x prim_arid:0x%x prim_arlock:0x%x prim_rready:0x%x ",prim_araddr,prim_arvalid,prim_arburst,prim_arsize,prim_arlen,prim_aruser,prim_arid,prim_arlock,prim_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_araddr = RHS.prim_araddr; + this.prim_arvalid = RHS.prim_arvalid; + this.prim_arburst = RHS.prim_arburst; + this.prim_arsize = RHS.prim_arsize; + this.prim_arlen = RHS.prim_arlen; + this.prim_aruser = RHS.prim_aruser; + this.prim_arid = RHS.prim_arid; + this.prim_arlock = RHS.prim_arlock; + this.prim_rready = RHS.prim_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_read_in_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_araddr,"prim_araddr"); + $add_attribute(transaction_view_h,prim_arvalid,"prim_arvalid"); + $add_attribute(transaction_view_h,prim_arburst,"prim_arburst"); + $add_attribute(transaction_view_h,prim_arsize,"prim_arsize"); + $add_attribute(transaction_view_h,prim_arlen,"prim_arlen"); + $add_attribute(transaction_view_h,prim_aruser,"prim_aruser"); + $add_attribute(transaction_view_h,prim_arid,"prim_arid"); + $add_attribute(transaction_view_h,prim_arlock,"prim_arlock"); + $add_attribute(transaction_view_h,prim_rready,"prim_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction_coverage.svh new file mode 100644 index 000000000..59ee6af33 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_read_in_if transaction information using +// a covergroup named fuse_ctrl_prim_axi_read_in_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_read_in_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_araddr: coverpoint coverage_trans.prim_araddr; + prim_arvalid: coverpoint coverage_trans.prim_arvalid; + prim_arburst: coverpoint coverage_trans.prim_arburst; + prim_arsize: coverpoint coverage_trans.prim_arsize; + prim_arlen: coverpoint coverage_trans.prim_arlen; + prim_aruser: coverpoint coverage_trans.prim_aruser; + prim_arid: coverpoint coverage_trans.prim_arid; + prim_arlock: coverpoint coverage_trans.prim_arlock; + prim_rready: coverpoint coverage_trans.prim_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_read_in_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_read_in_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_in_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_read_in_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/src/fuse_ctrl_prim_axi_read_in_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/yaml/fuse_ctrl_prim_axi_read_in_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/yaml/fuse_ctrl_prim_axi_read_in_if_interface.yaml new file mode 100644 index 000000000..8ef041734 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_if_pkg/yaml/fuse_ctrl_prim_axi_read_in_if_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_read_in_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: prim_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.project new file mode 100644 index 000000000..d0dba887e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_read_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.svproject new file mode 100644 index 000000000..7f5e878c7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/Makefile new file mode 100644 index 000000000..ff7476558 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_read_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_read_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hvl.f + +fuse_ctrl_prim_axi_read_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hdl.f + +fuse_ctrl_prim_axi_read_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_read_in_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_read_in_pkg +COMP_fuse_ctrl_prim_axi_read_in_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_read_in_pkg +COMP_fuse_ctrl_prim_axi_read_in_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_read_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_read_in_pkg: $(COMP_fuse_ctrl_prim_axi_read_in_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_read_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_read_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_read_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_read_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_read_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_in_pkg += -I$(fuse_ctrl_prim_axi_read_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_in_pkg += $(fuse_ctrl_prim_axi_read_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_read_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/compile.do new file mode 100644 index 000000000..d5afe8a68 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_read_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in.compile new file mode 100644 index 000000000..73650e4cb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_read_in_hvl.compile + - fuse_ctrl_prim_axi_read_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_bfm.vinfo new file mode 100644 index 000000000..8ed6f0d0a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_read_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_read_in_if.sv +src/fuse_ctrl_prim_axi_read_in_driver_bfm.sv +src/fuse_ctrl_prim_axi_read_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_common.compile new file mode 100644 index 000000000..ca43b4da1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hdl.f new file mode 100644 index 000000000..f0b99a312 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hvl.f new file mode 100644 index 000000000..8dcf1976e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_xrtl.f new file mode 100644 index 000000000..46c2aabe8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hdl.compile new file mode 100644 index 000000000..31d8fb131 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_read_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_read_in_if.sv + - src/fuse_ctrl_prim_axi_read_in_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_read_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hvl.compile new file mode 100644 index 000000000..7c7cc34c5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_read_in_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_read_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.sv new file mode 100644 index 000000000..2e29485bd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_read_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_read_in_macros.svh" + + export fuse_ctrl_prim_axi_read_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_read_in_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_read_in_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_configuration.svh" + `include "src/fuse_ctrl_prim_axi_read_in_driver.svh" + `include "src/fuse_ctrl_prim_axi_read_in_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_read_in_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_read_in_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_read_in2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_read_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.vinfo new file mode 100644 index 000000000..7f62c3037 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_read_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_read_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.sv new file mode 100644 index 000000000..f771faa9d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_read_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_read_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.vinfo new file mode 100644 index 000000000..eb67953c1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_sve.F new file mode 100644 index 000000000..ce8af1688 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/fuse_ctrl_prim_axi_read_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in2reg_adapter.svh new file mode 100644 index 000000000..2c9b99ecd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_read_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_read_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_read_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_agent.svh new file mode 100644 index 000000000..b2ff8a6c4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_read_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_read_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_read_in_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_configuration.svh new file mode 100644 index 000000000..7692603a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_read_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_read_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_read_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_read_in_configuration_s fuse_ctrl_prim_axi_read_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_read_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_read_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_read_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_read_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_read_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver.svh new file mode 100644 index 000000000..47ced3bf4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_read_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_read_in_driver and fuse_ctrl_prim_axi_read_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_read_in_driver_bfm. +`fuse_ctrl_prim_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_in_initiator_s fuse_ctrl_prim_axi_read_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_read_in_driver and fuse_ctrl_prim_axi_read_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_read_in_driver_bfm. +`fuse_ctrl_prim_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_in_responder_s fuse_ctrl_prim_axi_read_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_read_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_read_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_read_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_read_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver_bfm.sv new file mode 100644 index 000000000..a3f220a11 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_read_in signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_read_in driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_read_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_read_in_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_read_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_in_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_in_macros.svh" + +interface fuse_ctrl_prim_axi_read_in_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_read_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_read_in_pkg::fuse_ctrl_prim_axi_read_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_read_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_read_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_read_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_in_driver and fuse_ctrl_prim_axi_read_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_in_driver_bfm. + `fuse_ctrl_prim_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_read_in_driver and fuse_ctrl_prim_axi_read_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_in_driver_bfm. + `fuse_ctrl_prim_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_read_in_configuration_s fuse_ctrl_prim_axi_read_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_read_in_initiator_s fuse_ctrl_prim_axi_read_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_read_in_responder_s fuse_ctrl_prim_axi_read_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_read_in_initiator_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Members within the fuse_ctrl_prim_axi_read_in_responder_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + initiator_struct = fuse_ctrl_prim_axi_read_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_prim_axi_read_in_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_read_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_read_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_read_in_initiator_s fuse_ctrl_prim_axi_read_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_read_in_responder_s fuse_ctrl_prim_axi_read_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_read_in_initiator_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Variables within the fuse_ctrl_prim_axi_read_in_responder_struct: + // logic [AW-1:0] prim_araddr ; + // logic prim_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + // logic [2:0] prim_arsize ; + // logic [7:0] prim_arlen ; + // logic [UW-1:0] prim_aruser ; + // logic [IW-1:0] prim_arid ; + // logic prim_arlock ; + // logic prim_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = arlock_i; // + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_prim_axi_read_in_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_read_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_read_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_if.sv new file mode 100644 index 000000000..f7a4f7b73 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_read_in interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_read_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_read_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_read_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_read_in_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_in_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_read_in_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_macros.svh new file mode 100644 index 000000000..ba93fd264 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_read_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_read_in_configuration class. +// + `define fuse_ctrl_prim_axi_read_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_read_in_configuration_s; + + `define fuse_ctrl_prim_axi_read_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_configuration_s to_struct();\ + fuse_ctrl_prim_axi_read_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_read_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_read_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_read_in_configuration_s fuse_ctrl_prim_axi_read_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_read_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_read_in_transaction class. +// + `define fuse_ctrl_prim_axi_read_in_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_in_monitor_s; + + `define fuse_ctrl_prim_axi_read_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_read_in_monitor_struct = \ + { \ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_read_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_read_in_monitor_s fuse_ctrl_prim_axi_read_in_monitor_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_read_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_in_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_in_initiator_s; + + `define fuse_ctrl_prim_axi_read_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_read_in_initiator_struct = \ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_read_in_initiator_s fuse_ctrl_prim_axi_read_in_initiator_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_read_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_in_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_araddr ; \ + logic prim_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; \ + logic [2:0] prim_arsize ; \ + logic [7:0] prim_arlen ; \ + logic [UW-1:0] prim_aruser ; \ + logic [IW-1:0] prim_arid ; \ + logic prim_arlock ; \ + logic prim_rready ; \ + } fuse_ctrl_prim_axi_read_in_responder_s; + + `define fuse_ctrl_prim_axi_read_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_in_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_read_in_responder_struct = \ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + };\ + return ( fuse_ctrl_prim_axi_read_in_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_read_in_responder_s fuse_ctrl_prim_axi_read_in_responder_struct);\ + {\ + this.prim_araddr , \ + this.prim_arvalid , \ + this.prim_arburst , \ + this.prim_arsize , \ + this.prim_arlen , \ + this.prim_aruser , \ + this.prim_arid , \ + this.prim_arlock , \ + this.prim_rready \ + } = fuse_ctrl_prim_axi_read_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor.svh new file mode 100644 index 000000000..1c3949390 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_read_in transactions observed by the +// fuse_ctrl_prim_axi_read_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_read_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_read_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_read_in_monitor_s fuse_ctrl_prim_axi_read_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_read_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor_bfm.sv new file mode 100644 index 000000000..efa2c9f98 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_read_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_read_in monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_read_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_read_in_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_read_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_in_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_in_macros.svh" + + +interface fuse_ctrl_prim_axi_read_in_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_read_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_read_in_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_in_monitor_s fuse_ctrl_prim_axi_read_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_read_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_read_in_pkg::fuse_ctrl_prim_axi_read_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_read_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_read_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_read_in_configuration_s fuse_ctrl_prim_axi_read_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_read_in_monitor_s fuse_ctrl_prim_axi_read_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_araddr + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_arvalid + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_arburst + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_arsize + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_arlen + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_aruser + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_arid + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_arlock + // // fuse_ctrl_prim_axi_read_in_monitor_struct.prim_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_prim_axi_read_in_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_random_sequence.svh new file mode 100644 index 000000000..1cb563fc1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_read_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_read_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_read_in_random_sequence::body()-fuse_ctrl_prim_axi_read_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_read_in_driver_bfm via the sequencer and fuse_ctrl_prim_axi_read_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_read_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_responder_sequence.svh new file mode 100644 index 000000000..3a60a5cf8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_read_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_sequence_base.svh new file mode 100644 index 000000000..7c8932c6b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_in_transaction_req_t; + fuse_ctrl_prim_axi_read_in_transaction_req_t req; + typedef fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_in_transaction_rsp_t; + fuse_ctrl_prim_axi_read_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_read_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_read_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction.svh new file mode 100644 index 000000000..601cca308 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_read_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_in_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] prim_araddr ; + logic prim_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] prim_arburst ; + logic [2:0] prim_arsize ; + logic [7:0] prim_arlen ; + logic [UW-1:0] prim_aruser ; + logic [IW-1:0] prim_arid ; + logic prim_arlock ; + logic prim_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_read_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_read_in_monitor and fuse_ctrl_prim_axi_read_in_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_in_monitor_s fuse_ctrl_prim_axi_read_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_in_driver and fuse_ctrl_prim_axi_read_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_in_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_in_initiator_s fuse_ctrl_prim_axi_read_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_read_in_driver and fuse_ctrl_prim_axi_read_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_in_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_in_responder_s fuse_ctrl_prim_axi_read_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_in_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_in_macros.svh + `fuse_ctrl_prim_axi_read_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_araddr:0x%x prim_arvalid:0x%x prim_arburst:0x%x prim_arsize:0x%x prim_arlen:0x%x prim_aruser:0x%x prim_arid:0x%x prim_arlock:0x%x prim_rready:0x%x ",prim_araddr,prim_arvalid,prim_arburst,prim_arsize,prim_arlen,prim_aruser,prim_arid,prim_arlock,prim_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_araddr = RHS.prim_araddr; + this.prim_arvalid = RHS.prim_arvalid; + this.prim_arburst = RHS.prim_arburst; + this.prim_arsize = RHS.prim_arsize; + this.prim_arlen = RHS.prim_arlen; + this.prim_aruser = RHS.prim_aruser; + this.prim_arid = RHS.prim_arid; + this.prim_arlock = RHS.prim_arlock; + this.prim_rready = RHS.prim_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_read_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_araddr,"prim_araddr"); + $add_attribute(transaction_view_h,prim_arvalid,"prim_arvalid"); + $add_attribute(transaction_view_h,prim_arburst,"prim_arburst"); + $add_attribute(transaction_view_h,prim_arsize,"prim_arsize"); + $add_attribute(transaction_view_h,prim_arlen,"prim_arlen"); + $add_attribute(transaction_view_h,prim_aruser,"prim_aruser"); + $add_attribute(transaction_view_h,prim_arid,"prim_arid"); + $add_attribute(transaction_view_h,prim_arlock,"prim_arlock"); + $add_attribute(transaction_view_h,prim_rready,"prim_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction_coverage.svh new file mode 100644 index 000000000..9315e32d7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_read_in transaction information using +// a covergroup named fuse_ctrl_prim_axi_read_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_in_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_in_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_read_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_araddr: coverpoint coverage_trans.prim_araddr; + prim_arvalid: coverpoint coverage_trans.prim_arvalid; + prim_arburst: coverpoint coverage_trans.prim_arburst; + prim_arsize: coverpoint coverage_trans.prim_arsize; + prim_arlen: coverpoint coverage_trans.prim_arlen; + prim_aruser: coverpoint coverage_trans.prim_aruser; + prim_arid: coverpoint coverage_trans.prim_arid; + prim_arlock: coverpoint coverage_trans.prim_arlock; + prim_rready: coverpoint coverage_trans.prim_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_read_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_read_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_read_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/src/fuse_ctrl_prim_axi_read_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/yaml/fuse_ctrl_prim_axi_read_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/yaml/fuse_ctrl_prim_axi_read_in_interface.yaml new file mode 100644 index 000000000..722b47650 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_in_pkg/yaml/fuse_ctrl_prim_axi_read_in_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_read_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: prim_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.project new file mode 100644 index 000000000..383395618 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_read_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.svproject new file mode 100644 index 000000000..b202873ab --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/Makefile new file mode 100644 index 000000000..4e9d0fe18 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_read_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_read_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hvl.f + +fuse_ctrl_prim_axi_read_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hdl.f + +fuse_ctrl_prim_axi_read_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_read_out_if_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_read_out_if_pkg +COMP_fuse_ctrl_prim_axi_read_out_if_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_read_out_if_pkg +COMP_fuse_ctrl_prim_axi_read_out_if_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_read_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_read_out_if_pkg: $(COMP_fuse_ctrl_prim_axi_read_out_if_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_read_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_read_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_read_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_out_if_pkg += -I$(fuse_ctrl_prim_axi_read_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_out_if_pkg += $(fuse_ctrl_prim_axi_read_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_out_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_read_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/compile.do new file mode 100644 index 000000000..7c3781f3f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_read_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if.compile new file mode 100644 index 000000000..38953a316 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_read_out_if_hvl.compile + - fuse_ctrl_prim_axi_read_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_bfm.vinfo new file mode 100644 index 000000000..964634f61 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_read_out_if_if.sv +src/fuse_ctrl_prim_axi_read_out_if_driver_bfm.sv +src/fuse_ctrl_prim_axi_read_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_common.compile new file mode 100644 index 000000000..317b5d7ac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hdl.f new file mode 100644 index 000000000..0c9029736 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hvl.f new file mode 100644 index 000000000..9ee108d67 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_xrtl.f new file mode 100644 index 000000000..fbbf739cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hdl.compile new file mode 100644 index 000000000..06fb80cd7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_read_out_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_read_out_if_if.sv + - src/fuse_ctrl_prim_axi_read_out_if_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hvl.compile new file mode 100644 index 000000000..e8c82fe46 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_read_out_if_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.sv new file mode 100644 index 000000000..cb08be3f6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_read_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_read_out_if_macros.svh" + + export fuse_ctrl_prim_axi_read_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_read_out_if_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_read_out_if_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_if_configuration.svh" + `include "src/fuse_ctrl_prim_axi_read_out_if_driver.svh" + `include "src/fuse_ctrl_prim_axi_read_out_if_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_if_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_read_out_if_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_read_out_if_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_if_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_read_out_if2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.vinfo new file mode 100644 index 000000000..e405462b7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv new file mode 100644 index 000000000..09ecb0eef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_read_out_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_read_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..4f06d25c2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_sve.F new file mode 100644 index 000000000..5efb9cf26 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/fuse_ctrl_prim_axi_read_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if2reg_adapter.svh new file mode 100644 index 000000000..3b4b607bb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_read_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_read_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_read_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_agent.svh new file mode 100644 index 000000000..7c0be008b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_read_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_configuration.svh new file mode 100644 index 000000000..300f44e63 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_read_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_read_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_read_out_if_configuration_s fuse_ctrl_prim_axi_read_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_read_out_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_if_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_read_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_read_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_read_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_read_out_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver.svh new file mode 100644 index 000000000..84cb7a06a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_read_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_read_out_if_driver and fuse_ctrl_prim_axi_read_out_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_read_out_if_driver_bfm. +`fuse_ctrl_prim_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_out_if_initiator_s fuse_ctrl_prim_axi_read_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_read_out_if_driver and fuse_ctrl_prim_axi_read_out_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_read_out_if_driver_bfm. +`fuse_ctrl_prim_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_out_if_responder_s fuse_ctrl_prim_axi_read_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_read_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_read_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_read_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_read_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver_bfm.sv new file mode 100644 index 000000000..4beaa864a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_read_out_if signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_read_out_if driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_read_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_read_out_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_read_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_out_if_macros.svh" + +interface fuse_ctrl_prim_axi_read_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_read_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_read_out_if_pkg::fuse_ctrl_prim_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_read_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_read_out_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_out_if_driver and fuse_ctrl_prim_axi_read_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_out_if_driver_bfm. + `fuse_ctrl_prim_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_read_out_if_driver and fuse_ctrl_prim_axi_read_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_out_if_driver_bfm. + `fuse_ctrl_prim_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_read_out_if_configuration_s fuse_ctrl_prim_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_read_out_if_initiator_s fuse_ctrl_prim_axi_read_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_read_out_if_responder_s fuse_ctrl_prim_axi_read_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_read_out_if_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Members within the fuse_ctrl_prim_axi_read_out_if_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + initiator_struct = fuse_ctrl_prim_axi_read_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_prim_axi_read_out_if_responder_struct.xyz = arready_i; // + // fuse_ctrl_prim_axi_read_out_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_read_out_if_responder_struct.xyz = rresp_i; // + // fuse_ctrl_prim_axi_read_out_if_responder_struct.xyz = rid_i; // + // fuse_ctrl_prim_axi_read_out_if_responder_struct.xyz = rlast_i; // + // fuse_ctrl_prim_axi_read_out_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_read_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_read_out_if_initiator_s fuse_ctrl_prim_axi_read_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_read_out_if_responder_s fuse_ctrl_prim_axi_read_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_read_out_if_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Variables within the fuse_ctrl_prim_axi_read_out_if_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= fuse_ctrl_prim_axi_read_out_if_initiator_struct.xyz; // + // rdata_o <= fuse_ctrl_prim_axi_read_out_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= fuse_ctrl_prim_axi_read_out_if_initiator_struct.xyz; // + // rid_o <= fuse_ctrl_prim_axi_read_out_if_initiator_struct.xyz; // + // rlast_o <= fuse_ctrl_prim_axi_read_out_if_initiator_struct.xyz; // + // rvalid_o <= fuse_ctrl_prim_axi_read_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_read_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_if.sv new file mode 100644 index 000000000..5819fef10 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_read_out_if interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_read_out_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_read_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_read_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_if_bus.arready), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_if_bus.rdata), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_if_bus.rresp), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_if_bus.rid), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_if_bus.rlast), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_out_if_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_read_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_macros.svh new file mode 100644 index 000000000..c5e996d07 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_read_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_read_out_if_configuration class. +// + `define fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_read_out_if_configuration_s; + + `define fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_if_configuration_s to_struct();\ + fuse_ctrl_prim_axi_read_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_read_out_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_read_out_if_configuration_s fuse_ctrl_prim_axi_read_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_read_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_read_out_if_transaction class. +// + `define fuse_ctrl_prim_axi_read_out_if_MONITOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } fuse_ctrl_prim_axi_read_out_if_monitor_s; + + `define fuse_ctrl_prim_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_if_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_read_out_if_monitor_struct = \ + { \ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( fuse_ctrl_prim_axi_read_out_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_read_out_if_monitor_s fuse_ctrl_prim_axi_read_out_if_monitor_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = fuse_ctrl_prim_axi_read_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } fuse_ctrl_prim_axi_read_out_if_initiator_s; + + `define fuse_ctrl_prim_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_if_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_read_out_if_initiator_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( fuse_ctrl_prim_axi_read_out_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_read_out_if_initiator_s fuse_ctrl_prim_axi_read_out_if_initiator_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = fuse_ctrl_prim_axi_read_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } fuse_ctrl_prim_axi_read_out_if_responder_s; + + `define fuse_ctrl_prim_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_if_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_read_out_if_responder_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( fuse_ctrl_prim_axi_read_out_if_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_read_out_if_responder_s fuse_ctrl_prim_axi_read_out_if_responder_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = fuse_ctrl_prim_axi_read_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor.svh new file mode 100644 index 000000000..5c5ffaeeb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_read_out_if transactions observed by the +// fuse_ctrl_prim_axi_read_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_read_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_read_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_read_out_if_monitor_s fuse_ctrl_prim_axi_read_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_read_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor_bfm.sv new file mode 100644 index 000000000..c4c0ad5d3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_read_out_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_read_out_if monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_read_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_read_out_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_read_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_out_if_macros.svh" + + +interface fuse_ctrl_prim_axi_read_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_read_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_read_out_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_out_if_monitor_s fuse_ctrl_prim_axi_read_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_read_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_read_out_if_pkg::fuse_ctrl_prim_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_read_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_read_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_read_out_if_configuration_s fuse_ctrl_prim_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_read_out_if_monitor_s fuse_ctrl_prim_axi_read_out_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_read_out_if_monitor_struct.prim_arready + // // fuse_ctrl_prim_axi_read_out_if_monitor_struct.prim_rdata + // // fuse_ctrl_prim_axi_read_out_if_monitor_struct.prim_rresp + // // fuse_ctrl_prim_axi_read_out_if_monitor_struct.prim_rid + // // fuse_ctrl_prim_axi_read_out_if_monitor_struct.prim_rlast + // // fuse_ctrl_prim_axi_read_out_if_monitor_struct.prim_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_read_out_if_monitor_struct.xyz = arready_i; // + // fuse_ctrl_prim_axi_read_out_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_read_out_if_monitor_struct.xyz = rresp_i; // + // fuse_ctrl_prim_axi_read_out_if_monitor_struct.xyz = rid_i; // + // fuse_ctrl_prim_axi_read_out_if_monitor_struct.xyz = rlast_i; // + // fuse_ctrl_prim_axi_read_out_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_random_sequence.svh new file mode 100644 index 000000000..cb283839d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_read_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_read_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_read_out_if_random_sequence::body()-fuse_ctrl_prim_axi_read_out_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_read_out_if_driver_bfm via the sequencer and fuse_ctrl_prim_axi_read_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_read_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_responder_sequence.svh new file mode 100644 index 000000000..2b38158de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_read_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_sequence_base.svh new file mode 100644 index 000000000..8138bfaf3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_out_if_transaction_req_t; + fuse_ctrl_prim_axi_read_out_if_transaction_req_t req; + typedef fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_out_if_transaction_rsp_t; + fuse_ctrl_prim_axi_read_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_read_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_read_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction.svh new file mode 100644 index 000000000..fdce68486 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_read_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_arready ; + logic [DW-1:0] prim_rdata ; + axi_pkg::axi_burst_e prim_rresp ; + logic [IW-1:0] prim_rid ; + logic prim_rlast ; + logic prim_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_read_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_read_out_if_monitor and fuse_ctrl_prim_axi_read_out_if_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_out_if_monitor_s fuse_ctrl_prim_axi_read_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_out_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_if_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_out_if_driver and fuse_ctrl_prim_axi_read_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_out_if_initiator_s fuse_ctrl_prim_axi_read_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_out_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_if_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_read_out_if_driver and fuse_ctrl_prim_axi_read_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_out_if_responder_s fuse_ctrl_prim_axi_read_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_out_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_if_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_if_macros.svh + `fuse_ctrl_prim_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_arready:0x%x prim_rdata:0x%x prim_rresp:0x%x prim_rid:0x%x prim_rlast:0x%x prim_rvalid:0x%x ",prim_arready,prim_rdata,prim_rresp,prim_rid,prim_rlast,prim_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_arready == RHS.prim_arready) + &&(this.prim_rdata == RHS.prim_rdata) + &&(this.prim_rresp == RHS.prim_rresp) + &&(this.prim_rid == RHS.prim_rid) + &&(this.prim_rlast == RHS.prim_rlast) + &&(this.prim_rvalid == RHS.prim_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_arready = RHS.prim_arready; + this.prim_rdata = RHS.prim_rdata; + this.prim_rresp = RHS.prim_rresp; + this.prim_rid = RHS.prim_rid; + this.prim_rlast = RHS.prim_rlast; + this.prim_rvalid = RHS.prim_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_read_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_arready,"prim_arready"); + $add_attribute(transaction_view_h,prim_rdata,"prim_rdata"); + $add_attribute(transaction_view_h,prim_rresp,"prim_rresp"); + $add_attribute(transaction_view_h,prim_rid,"prim_rid"); + $add_attribute(transaction_view_h,prim_rlast,"prim_rlast"); + $add_attribute(transaction_view_h,prim_rvalid,"prim_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction_coverage.svh new file mode 100644 index 000000000..ea69c07a1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_read_out_if transaction information using +// a covergroup named fuse_ctrl_prim_axi_read_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_read_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_arready: coverpoint coverage_trans.prim_arready; + prim_rdata: coverpoint coverage_trans.prim_rdata; + prim_rresp: coverpoint coverage_trans.prim_rresp; + prim_rid: coverpoint coverage_trans.prim_rid; + prim_rlast: coverpoint coverage_trans.prim_rlast; + prim_rvalid: coverpoint coverage_trans.prim_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_read_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_read_out_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_read_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/src/fuse_ctrl_prim_axi_read_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/yaml/fuse_ctrl_prim_axi_read_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/yaml/fuse_ctrl_prim_axi_read_out_if_interface.yaml new file mode 100644 index 000000000..5d9e6555a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_if_pkg/yaml/fuse_ctrl_prim_axi_read_out_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_read_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.project new file mode 100644 index 000000000..a150c2600 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_read_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.svproject new file mode 100644 index 000000000..07283b071 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/Makefile new file mode 100644 index 000000000..c82fb10fe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_read_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_read_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hvl.f + +fuse_ctrl_prim_axi_read_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hdl.f + +fuse_ctrl_prim_axi_read_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_read_out_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_read_out_pkg +COMP_fuse_ctrl_prim_axi_read_out_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_read_out_pkg +COMP_fuse_ctrl_prim_axi_read_out_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_read_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_read_out_pkg: $(COMP_fuse_ctrl_prim_axi_read_out_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_read_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_read_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_read_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_read_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_read_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_read_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_out_pkg += -I$(fuse_ctrl_prim_axi_read_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_out_pkg += $(fuse_ctrl_prim_axi_read_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_read_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_read_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_read_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_read_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/compile.do new file mode 100644 index 000000000..1f3f42509 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_read_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out.compile new file mode 100644 index 000000000..3ae619a60 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_read_out_hvl.compile + - fuse_ctrl_prim_axi_read_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_bfm.vinfo new file mode 100644 index 000000000..804bedee2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_read_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_read_out_if.sv +src/fuse_ctrl_prim_axi_read_out_driver_bfm.sv +src/fuse_ctrl_prim_axi_read_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_common.compile new file mode 100644 index 000000000..473bd1034 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hdl.f new file mode 100644 index 000000000..9915fab63 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hvl.f new file mode 100644 index 000000000..c105f6ac9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_xrtl.f new file mode 100644 index 000000000..efd90f559 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hdl.compile new file mode 100644 index 000000000..3110b6364 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_read_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_read_out_if.sv + - src/fuse_ctrl_prim_axi_read_out_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_read_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hvl.compile new file mode 100644 index 000000000..5f022ac42 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_read_out_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_read_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.sv new file mode 100644 index 000000000..d12ebea63 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_read_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_read_out_macros.svh" + + export fuse_ctrl_prim_axi_read_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_read_out_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_read_out_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_configuration.svh" + `include "src/fuse_ctrl_prim_axi_read_out_driver.svh" + `include "src/fuse_ctrl_prim_axi_read_out_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_read_out_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_read_out_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_read_out2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_read_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.vinfo new file mode 100644 index 000000000..ce44bd3e7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_read_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_read_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.sv new file mode 100644 index 000000000..3a6641be3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_read_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_read_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_read_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.vinfo new file mode 100644 index 000000000..d2706f6b1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_sve.F new file mode 100644 index 000000000..e27a4496e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/fuse_ctrl_prim_axi_read_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out2reg_adapter.svh new file mode 100644 index 000000000..6d0791b2d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_read_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_read_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_read_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_agent.svh new file mode 100644 index 000000000..4ecac4aa1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_read_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_read_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_read_out_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_configuration.svh new file mode 100644 index 000000000..04a822d95 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_read_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_read_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_read_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_read_out_configuration_s fuse_ctrl_prim_axi_read_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_read_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_read_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_read_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_read_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_read_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver.svh new file mode 100644 index 000000000..706e00774 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_read_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_read_out_driver and fuse_ctrl_prim_axi_read_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_read_out_driver_bfm. +`fuse_ctrl_prim_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_out_initiator_s fuse_ctrl_prim_axi_read_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_read_out_driver and fuse_ctrl_prim_axi_read_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_read_out_driver_bfm. +`fuse_ctrl_prim_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_out_responder_s fuse_ctrl_prim_axi_read_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_read_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_read_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_read_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_read_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver_bfm.sv new file mode 100644 index 000000000..f23f7c67a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_read_out signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_read_out driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_read_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_read_out_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_read_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_out_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_out_macros.svh" + +interface fuse_ctrl_prim_axi_read_out_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_read_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_read_out_pkg::fuse_ctrl_prim_axi_read_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_read_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_read_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_read_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_out_driver and fuse_ctrl_prim_axi_read_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_out_driver_bfm. + `fuse_ctrl_prim_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_read_out_driver and fuse_ctrl_prim_axi_read_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_out_driver_bfm. + `fuse_ctrl_prim_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_read_out_configuration_s fuse_ctrl_prim_axi_read_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_read_out_initiator_s fuse_ctrl_prim_axi_read_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_read_out_responder_s fuse_ctrl_prim_axi_read_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_read_out_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Members within the fuse_ctrl_prim_axi_read_out_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + initiator_struct = fuse_ctrl_prim_axi_read_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_prim_axi_read_out_responder_struct.xyz = arready_i; // + // fuse_ctrl_prim_axi_read_out_responder_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_read_out_responder_struct.xyz = rresp_i; // + // fuse_ctrl_prim_axi_read_out_responder_struct.xyz = rid_i; // + // fuse_ctrl_prim_axi_read_out_responder_struct.xyz = rlast_i; // + // fuse_ctrl_prim_axi_read_out_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_read_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_read_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_read_out_initiator_s fuse_ctrl_prim_axi_read_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_read_out_responder_s fuse_ctrl_prim_axi_read_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_read_out_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Variables within the fuse_ctrl_prim_axi_read_out_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= fuse_ctrl_prim_axi_read_out_initiator_struct.xyz; // + // rdata_o <= fuse_ctrl_prim_axi_read_out_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= fuse_ctrl_prim_axi_read_out_initiator_struct.xyz; // + // rid_o <= fuse_ctrl_prim_axi_read_out_initiator_struct.xyz; // + // rlast_o <= fuse_ctrl_prim_axi_read_out_initiator_struct.xyz; // + // rvalid_o <= fuse_ctrl_prim_axi_read_out_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_read_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_read_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_if.sv new file mode 100644 index 000000000..1f59430f9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_read_out interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_read_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_read_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_read_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_bus.arready), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_bus.rdata), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_bus.rresp), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_bus.rid), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_bus.rlast), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_read_out_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_out_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_read_out_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_macros.svh new file mode 100644 index 000000000..a5d9e29df --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_read_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_read_out_configuration class. +// + `define fuse_ctrl_prim_axi_read_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_read_out_configuration_s; + + `define fuse_ctrl_prim_axi_read_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_configuration_s to_struct();\ + fuse_ctrl_prim_axi_read_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_read_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_read_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_read_out_configuration_s fuse_ctrl_prim_axi_read_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_read_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_read_out_transaction class. +// + `define fuse_ctrl_prim_axi_read_out_MONITOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } fuse_ctrl_prim_axi_read_out_monitor_s; + + `define fuse_ctrl_prim_axi_read_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_read_out_monitor_struct = \ + { \ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( fuse_ctrl_prim_axi_read_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_read_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_read_out_monitor_s fuse_ctrl_prim_axi_read_out_monitor_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = fuse_ctrl_prim_axi_read_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_read_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_out_INITIATOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } fuse_ctrl_prim_axi_read_out_initiator_s; + + `define fuse_ctrl_prim_axi_read_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_read_out_initiator_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( fuse_ctrl_prim_axi_read_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_read_out_initiator_s fuse_ctrl_prim_axi_read_out_initiator_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = fuse_ctrl_prim_axi_read_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_read_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_read_out_RESPONDER_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } fuse_ctrl_prim_axi_read_out_responder_s; + + `define fuse_ctrl_prim_axi_read_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_read_out_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_read_out_responder_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( fuse_ctrl_prim_axi_read_out_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_read_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_read_out_responder_s fuse_ctrl_prim_axi_read_out_responder_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = fuse_ctrl_prim_axi_read_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor.svh new file mode 100644 index 000000000..a47648e00 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_read_out transactions observed by the +// fuse_ctrl_prim_axi_read_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_read_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_read_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_read_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_read_out_monitor_s fuse_ctrl_prim_axi_read_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_read_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor_bfm.sv new file mode 100644 index 000000000..8aae56b3d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_read_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_read_out monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_read_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_read_out_if. +// +// Input signals from the fuse_ctrl_prim_axi_read_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_read_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_read_out_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_read_out_macros.svh" + + +interface fuse_ctrl_prim_axi_read_out_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_read_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_read_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_read_out_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_out_monitor_s fuse_ctrl_prim_axi_read_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_read_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_read_out_pkg::fuse_ctrl_prim_axi_read_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_read_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_read_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_read_out_configuration_s fuse_ctrl_prim_axi_read_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_read_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_read_out_monitor_s fuse_ctrl_prim_axi_read_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_read_out_monitor_struct.prim_arready + // // fuse_ctrl_prim_axi_read_out_monitor_struct.prim_rdata + // // fuse_ctrl_prim_axi_read_out_monitor_struct.prim_rresp + // // fuse_ctrl_prim_axi_read_out_monitor_struct.prim_rid + // // fuse_ctrl_prim_axi_read_out_monitor_struct.prim_rlast + // // fuse_ctrl_prim_axi_read_out_monitor_struct.prim_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_read_out_monitor_struct.xyz = arready_i; // + // fuse_ctrl_prim_axi_read_out_monitor_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_read_out_monitor_struct.xyz = rresp_i; // + // fuse_ctrl_prim_axi_read_out_monitor_struct.xyz = rid_i; // + // fuse_ctrl_prim_axi_read_out_monitor_struct.xyz = rlast_i; // + // fuse_ctrl_prim_axi_read_out_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_random_sequence.svh new file mode 100644 index 000000000..869532e93 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_read_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_read_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_read_out_random_sequence::body()-fuse_ctrl_prim_axi_read_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_read_out_driver_bfm via the sequencer and fuse_ctrl_prim_axi_read_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_read_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_responder_sequence.svh new file mode 100644 index 000000000..f27579be3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_read_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_read_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_sequence_base.svh new file mode 100644 index 000000000..fb9238126 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_out_transaction_req_t; + fuse_ctrl_prim_axi_read_out_transaction_req_t req; + typedef fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_read_out_transaction_rsp_t; + fuse_ctrl_prim_axi_read_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_read_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_read_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction.svh new file mode 100644 index 000000000..4eda4dfd7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_read_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_read_out_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_arready ; + logic [DW-1:0] prim_rdata ; + axi_pkg::axi_burst_e prim_rresp ; + logic [IW-1:0] prim_rid ; + logic prim_rlast ; + logic prim_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_read_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_read_out_monitor and fuse_ctrl_prim_axi_read_out_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_MONITOR_STRUCT + fuse_ctrl_prim_axi_read_out_monitor_s fuse_ctrl_prim_axi_read_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_read_out_driver and fuse_ctrl_prim_axi_read_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_read_out_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_prim_axi_read_out_initiator_s fuse_ctrl_prim_axi_read_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_read_out_driver and fuse_ctrl_prim_axi_read_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_read_out_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_prim_axi_read_out_responder_s fuse_ctrl_prim_axi_read_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_read_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_read_out_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_read_out_macros.svh + `fuse_ctrl_prim_axi_read_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_arready:0x%x prim_rdata:0x%x prim_rresp:0x%x prim_rid:0x%x prim_rlast:0x%x prim_rvalid:0x%x ",prim_arready,prim_rdata,prim_rresp,prim_rid,prim_rlast,prim_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_arready == RHS.prim_arready) + &&(this.prim_rdata == RHS.prim_rdata) + &&(this.prim_rresp == RHS.prim_rresp) + &&(this.prim_rid == RHS.prim_rid) + &&(this.prim_rlast == RHS.prim_rlast) + &&(this.prim_rvalid == RHS.prim_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_arready = RHS.prim_arready; + this.prim_rdata = RHS.prim_rdata; + this.prim_rresp = RHS.prim_rresp; + this.prim_rid = RHS.prim_rid; + this.prim_rlast = RHS.prim_rlast; + this.prim_rvalid = RHS.prim_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_read_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_arready,"prim_arready"); + $add_attribute(transaction_view_h,prim_rdata,"prim_rdata"); + $add_attribute(transaction_view_h,prim_rresp,"prim_rresp"); + $add_attribute(transaction_view_h,prim_rid,"prim_rid"); + $add_attribute(transaction_view_h,prim_rlast,"prim_rlast"); + $add_attribute(transaction_view_h,prim_rvalid,"prim_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction_coverage.svh new file mode 100644 index 000000000..b701f57c1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_read_out transaction information using +// a covergroup named fuse_ctrl_prim_axi_read_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_read_out_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_read_out_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_read_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_arready: coverpoint coverage_trans.prim_arready; + prim_rdata: coverpoint coverage_trans.prim_rdata; + prim_rresp: coverpoint coverage_trans.prim_rresp; + prim_rid: coverpoint coverage_trans.prim_rid; + prim_rlast: coverpoint coverage_trans.prim_rlast; + prim_rvalid: coverpoint coverage_trans.prim_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_read_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_read_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_read_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_read_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/src/fuse_ctrl_prim_axi_read_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/yaml/fuse_ctrl_prim_axi_read_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/yaml/fuse_ctrl_prim_axi_read_out_interface.yaml new file mode 100644 index 000000000..518e6a1ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_read_out_pkg/yaml/fuse_ctrl_prim_axi_read_out_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_read_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.project new file mode 100644 index 000000000..1d2b3a2b3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_write_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.svproject new file mode 100644 index 000000000..378d11293 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/Makefile new file mode 100644 index 000000000..e0851422c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_write_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_write_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f + +fuse_ctrl_prim_axi_write_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f + +fuse_ctrl_prim_axi_write_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_write_if_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_write_if_pkg +COMP_fuse_ctrl_prim_axi_write_if_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_write_if_pkg +COMP_fuse_ctrl_prim_axi_write_if_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_write_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_write_if_pkg: $(COMP_fuse_ctrl_prim_axi_write_if_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_write_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_write_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_write_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_write_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_write_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_if_pkg += -I$(fuse_ctrl_prim_axi_write_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_if_pkg += $(fuse_ctrl_prim_axi_write_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_write_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/compile.do new file mode 100644 index 000000000..e542958e1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_write_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if.compile new file mode 100644 index 000000000..5809b76c4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_write_if_hvl.compile + - fuse_ctrl_prim_axi_write_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_bfm.vinfo new file mode 100644 index 000000000..6c5f5cfbb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_write_if_if.sv +src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv +src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_common.compile new file mode 100644 index 000000000..dde3d0d7f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f new file mode 100644 index 000000000..11983b34a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f new file mode 100644 index 000000000..16c93aac2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f new file mode 100644 index 000000000..8e0817f98 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hdl.compile new file mode 100644 index 000000000..ff56c3bc8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_write_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_write_if_if.sv + - src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hvl.compile new file mode 100644 index 000000000..a21321c58 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_write_if_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.sv new file mode 100644 index 000000000..886790867 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_write_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_write_if_macros.svh" + + export fuse_ctrl_prim_axi_write_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_write_if_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_write_if_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_write_if_configuration.svh" + `include "src/fuse_ctrl_prim_axi_write_if_driver.svh" + `include "src/fuse_ctrl_prim_axi_write_if_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_write_if_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_write_if_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_write_if_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_write_if_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_write_if2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_write_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.vinfo new file mode 100644 index 000000000..51f12e079 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.sv new file mode 100644 index 000000000..7998fdf63 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_write_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_write_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo new file mode 100644 index 000000000..a0dd33de5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_sve.F new file mode 100644 index 000000000..c2cbc2a56 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/fuse_ctrl_prim_axi_write_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if2reg_adapter.svh new file mode 100644 index 000000000..3639e693b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_write_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_write_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_write_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_agent.svh new file mode 100644 index 000000000..df581f3f1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_write_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_configuration.svh new file mode 100644 index 000000000..676cfcb02 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_write_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_write_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_write_if_configuration_s fuse_ctrl_prim_axi_write_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_write_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_if_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_write_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_write_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_write_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_write_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver.svh new file mode 100644 index 000000000..55d444021 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_write_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. +`fuse_ctrl_prim_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_if_initiator_s fuse_ctrl_prim_axi_write_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. +`fuse_ctrl_prim_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_if_responder_s fuse_ctrl_prim_axi_write_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_write_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_write_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_write_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_write_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv new file mode 100644 index 000000000..b418ebbf8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_driver_bfm.sv @@ -0,0 +1,429 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_write_if signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_write_if driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_write_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_write_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_write_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_if_macros.svh" + +interface fuse_ctrl_prim_axi_write_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_write_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] awaddr_i; + reg [AW-1:0] awaddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] awburst_o = 'bz; + tri [2:0] awsize_i; + reg [2:0] awsize_o = 'bz; + tri [7:0] awlen_i; + reg [7:0] awlen_o = 'bz; + tri [UW-1:0] awuser_i; + reg [UW-1:0] awuser_o = 'bz; + tri [UW-1:0] awid_i; + reg [UW-1:0] awid_o = 'bz; + tri awlock_i; + reg awlock_o = 'bz; + tri awvalid_i; + reg awvalid_o = 'bz; + tri [DW-1:0] wdata_i; + reg [DW-1:0] wdata_o = 'bz; + tri [DW/8-1:0] wstrb_i; + reg [DW/8-1:0] wstrb_o = 'bz; + tri wvalid_i; + reg wvalid_o = 'bz; + tri wlast_i; + reg wlast_o = 'bz; + tri bready_i; + reg bready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.awaddr = (initiator_responder == INITIATOR) ? awaddr_o : 'bz; + assign awaddr_i = bus.awaddr; + assign bus.awburst = (initiator_responder == INITIATOR) ? awburst_o : 'bz; + assign awburst_i = bus.awburst; + assign bus.awsize = (initiator_responder == INITIATOR) ? awsize_o : 'bz; + assign awsize_i = bus.awsize; + assign bus.awlen = (initiator_responder == INITIATOR) ? awlen_o : 'bz; + assign awlen_i = bus.awlen; + assign bus.awuser = (initiator_responder == INITIATOR) ? awuser_o : 'bz; + assign awuser_i = bus.awuser; + assign bus.awid = (initiator_responder == INITIATOR) ? awid_o : 'bz; + assign awid_i = bus.awid; + assign bus.awlock = (initiator_responder == INITIATOR) ? awlock_o : 'bz; + assign awlock_i = bus.awlock; + assign bus.awvalid = (initiator_responder == INITIATOR) ? awvalid_o : 'bz; + assign awvalid_i = bus.awvalid; + assign bus.wdata = (initiator_responder == INITIATOR) ? wdata_o : 'bz; + assign wdata_i = bus.wdata; + assign bus.wstrb = (initiator_responder == INITIATOR) ? wstrb_o : 'bz; + assign wstrb_i = bus.wstrb; + assign bus.wvalid = (initiator_responder == INITIATOR) ? wvalid_o : 'bz; + assign wvalid_i = bus.wvalid; + assign bus.wlast = (initiator_responder == INITIATOR) ? wlast_o : 'bz; + assign wlast_i = bus.wlast; + assign bus.bready = (initiator_responder == INITIATOR) ? bready_o : 'bz; + assign bready_i = bus.bready; + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_write_if_pkg::fuse_ctrl_prim_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_write_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_write_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_write_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. + `fuse_ctrl_prim_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. + `fuse_ctrl_prim_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + awaddr_o <= 'bz; + awburst_o <= 'bz; + awsize_o <= 'bz; + awlen_o <= 'bz; + awuser_o <= 'bz; + awid_o <= 'bz; + awlock_o <= 'bz; + awvalid_o <= 'bz; + wdata_o <= 'bz; + wstrb_o <= 'bz; + wvalid_o <= 'bz; + wlast_o <= 'bz; + bready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_write_if_configuration_s fuse_ctrl_prim_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_write_if_initiator_s fuse_ctrl_prim_axi_write_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_write_if_responder_s fuse_ctrl_prim_axi_write_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_write_if_initiator_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Members within the fuse_ctrl_prim_axi_write_if_responder_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + initiator_struct = fuse_ctrl_prim_axi_write_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // awaddr_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [AW-1:0] + // awburst_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // awsize_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [2:0] + // awlen_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [7:0] + // awuser_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [UW-1:0] + // awid_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [UW-1:0] + // awlock_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // + // awvalid_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // + // wdata_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [DW-1:0] + // wstrb_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // [DW/8-1:0] + // wvalid_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // + // wlast_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // + // bready_o <= fuse_ctrl_prim_axi_write_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_write_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_write_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_write_if_initiator_s fuse_ctrl_prim_axi_write_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_write_if_responder_s fuse_ctrl_prim_axi_write_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_write_if_initiator_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Variables within the fuse_ctrl_prim_axi_write_if_responder_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awlock_i; // + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = awvalid_i; // + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = wvalid_i; // + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = wlast_i; // + // fuse_ctrl_prim_axi_write_if_responder_struct.xyz = bready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_write_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_write_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_if.sv new file mode 100644 index 000000000..afcdb92da --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_if.sv @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_write_if interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_write_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_write_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_write_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awaddr), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awburst), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awsize), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awlen), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awuser), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awlock), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.awvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.wdata), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.wstrb), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.wvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.wlast), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_if_bus.bready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_if_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_write_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] awaddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst, + inout tri [2:0] awsize, + inout tri [7:0] awlen, + inout tri [UW-1:0] awuser, + inout tri [UW-1:0] awid, + inout tri awlock, + inout tri awvalid, + inout tri [DW-1:0] wdata, + inout tri [DW/8-1:0] wstrb, + inout tri wvalid, + inout tri wlast, + inout tri bready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output awaddr, + output awburst, + output awsize, + output awlen, + output awuser, + output awid, + output awlock, + output awvalid, + output wdata, + output wstrb, + output wvalid, + output wlast, + output bready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_macros.svh new file mode 100644 index 000000000..f1a207086 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_macros.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_write_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_write_if_configuration class. +// + `define fuse_ctrl_prim_axi_write_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_write_if_configuration_s; + + `define fuse_ctrl_prim_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_if_configuration_s to_struct();\ + fuse_ctrl_prim_axi_write_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_write_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_write_if_configuration_s fuse_ctrl_prim_axi_write_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_write_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_write_if_transaction class. +// + `define fuse_ctrl_prim_axi_write_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_if_monitor_s; + + `define fuse_ctrl_prim_axi_write_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_if_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_write_if_monitor_struct = \ + { \ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_write_if_monitor_s fuse_ctrl_prim_axi_write_if_monitor_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_if_initiator_s; + + `define fuse_ctrl_prim_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_if_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_write_if_initiator_struct = \ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_write_if_initiator_s fuse_ctrl_prim_axi_write_if_initiator_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_if_responder_s; + + `define fuse_ctrl_prim_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_if_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_write_if_responder_struct = \ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_if_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_write_if_responder_s fuse_ctrl_prim_axi_write_if_responder_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor.svh new file mode 100644 index 000000000..33bf7f57e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_write_if transactions observed by the +// fuse_ctrl_prim_axi_write_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_write_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_write_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_write_if_monitor_s fuse_ctrl_prim_axi_write_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_write_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv new file mode 100644 index 000000000..909871de8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_monitor_bfm.sv @@ -0,0 +1,248 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_write_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_write_if monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_write_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_write_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_write_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_if_macros.svh" + + +interface fuse_ctrl_prim_axi_write_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_write_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_write_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_if_monitor_s fuse_ctrl_prim_axi_write_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_write_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] awaddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + tri [2:0] awsize_i; + tri [7:0] awlen_i; + tri [UW-1:0] awuser_i; + tri [UW-1:0] awid_i; + tri awlock_i; + tri awvalid_i; + tri [DW-1:0] wdata_i; + tri [DW/8-1:0] wstrb_i; + tri wvalid_i; + tri wlast_i; + tri bready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awaddr_i = bus.awaddr; + assign awburst_i = bus.awburst; + assign awsize_i = bus.awsize; + assign awlen_i = bus.awlen; + assign awuser_i = bus.awuser; + assign awid_i = bus.awid; + assign awlock_i = bus.awlock; + assign awvalid_i = bus.awvalid; + assign wdata_i = bus.wdata; + assign wstrb_i = bus.wstrb; + assign wvalid_i = bus.wvalid; + assign wlast_i = bus.wlast; + assign bready_i = bus.bready; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_write_if_pkg::fuse_ctrl_prim_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_write_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_write_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_write_if_configuration_s fuse_ctrl_prim_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_write_if_monitor_s fuse_ctrl_prim_axi_write_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awaddr + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awvalid + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awburst + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awsize + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awlen + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awuser + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awid + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_awlock + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_wdata + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_wstrb + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_wvalid + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_wlast + // // fuse_ctrl_prim_axi_write_if_monitor_struct.prim_bready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awlock_i; // + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = awvalid_i; // + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = wvalid_i; // + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = wlast_i; // + // fuse_ctrl_prim_axi_write_if_monitor_struct.xyz = bready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_random_sequence.svh new file mode 100644 index 000000000..8c64fb3c6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_write_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_write_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_write_if_random_sequence::body()-fuse_ctrl_prim_axi_write_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_write_if_driver_bfm via the sequencer and fuse_ctrl_prim_axi_write_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_write_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_responder_sequence.svh new file mode 100644 index 000000000..088b5cae1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_write_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_sequence_base.svh new file mode 100644 index 000000000..3dabe4d22 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_if_transaction_req_t; + fuse_ctrl_prim_axi_write_if_transaction_req_t req; + typedef fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_if_transaction_rsp_t; + fuse_ctrl_prim_axi_write_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_write_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_write_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction.svh new file mode 100644 index 000000000..168cf90d5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction.svh @@ -0,0 +1,256 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_write_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] prim_awaddr ; + logic prim_awvalid ; + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + logic [2:0] prim_awsize ; + logic [7:0] prim_awlen ; + logic [UW-1:0] prim_awuser ; + logic [IW-1:0] prim_awid ; + logic prim_awlock ; + logic [DW-1:0] prim_wdata ; + logic [DW/8 - 1:0] prim_wstrb ; + logic prim_wvalid ; + logic prim_wlast ; + logic prim_bready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_write_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_write_if_monitor and fuse_ctrl_prim_axi_write_if_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_if_monitor_s fuse_ctrl_prim_axi_write_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_if_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_if_initiator_s fuse_ctrl_prim_axi_write_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_if_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_write_if_driver and fuse_ctrl_prim_axi_write_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_if_responder_s fuse_ctrl_prim_axi_write_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_if_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_if_macros.svh + `fuse_ctrl_prim_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awaddr:0x%x prim_awvalid:0x%x prim_awburst:0x%x prim_awsize:0x%x prim_awlen:0x%x prim_awuser:0x%x prim_awid:0x%x prim_awlock:0x%x prim_wdata:0x%x prim_wstrb:0x%x prim_wvalid:0x%x prim_wlast:0x%x prim_bready:0x%x ",prim_awaddr,prim_awvalid,prim_awburst,prim_awsize,prim_awlen,prim_awuser,prim_awid,prim_awlock,prim_wdata,prim_wstrb,prim_wvalid,prim_wlast,prim_bready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_wdata == RHS.prim_wdata) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awaddr = RHS.prim_awaddr; + this.prim_awvalid = RHS.prim_awvalid; + this.prim_awburst = RHS.prim_awburst; + this.prim_awsize = RHS.prim_awsize; + this.prim_awlen = RHS.prim_awlen; + this.prim_awuser = RHS.prim_awuser; + this.prim_awid = RHS.prim_awid; + this.prim_awlock = RHS.prim_awlock; + this.prim_wdata = RHS.prim_wdata; + this.prim_wstrb = RHS.prim_wstrb; + this.prim_wvalid = RHS.prim_wvalid; + this.prim_wlast = RHS.prim_wlast; + this.prim_bready = RHS.prim_bready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_write_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awaddr,"prim_awaddr"); + $add_attribute(transaction_view_h,prim_awvalid,"prim_awvalid"); + $add_attribute(transaction_view_h,prim_awburst,"prim_awburst"); + $add_attribute(transaction_view_h,prim_awsize,"prim_awsize"); + $add_attribute(transaction_view_h,prim_awlen,"prim_awlen"); + $add_attribute(transaction_view_h,prim_awuser,"prim_awuser"); + $add_attribute(transaction_view_h,prim_awid,"prim_awid"); + $add_attribute(transaction_view_h,prim_awlock,"prim_awlock"); + $add_attribute(transaction_view_h,prim_wdata,"prim_wdata"); + $add_attribute(transaction_view_h,prim_wstrb,"prim_wstrb"); + $add_attribute(transaction_view_h,prim_wvalid,"prim_wvalid"); + $add_attribute(transaction_view_h,prim_wlast,"prim_wlast"); + $add_attribute(transaction_view_h,prim_bready,"prim_bready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction_coverage.svh new file mode 100644 index 000000000..a6fbb3558 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_transaction_coverage.svh @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_write_if transaction information using +// a covergroup named fuse_ctrl_prim_axi_write_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_write_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awaddr: coverpoint coverage_trans.prim_awaddr; + prim_awvalid: coverpoint coverage_trans.prim_awvalid; + prim_awburst: coverpoint coverage_trans.prim_awburst; + prim_awsize: coverpoint coverage_trans.prim_awsize; + prim_awlen: coverpoint coverage_trans.prim_awlen; + prim_awuser: coverpoint coverage_trans.prim_awuser; + prim_awid: coverpoint coverage_trans.prim_awid; + prim_awlock: coverpoint coverage_trans.prim_awlock; + prim_wdata: coverpoint coverage_trans.prim_wdata; + prim_wstrb: coverpoint coverage_trans.prim_wstrb; + prim_wvalid: coverpoint coverage_trans.prim_wvalid; + prim_wlast: coverpoint coverage_trans.prim_wlast; + prim_bready: coverpoint coverage_trans.prim_bready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_write_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_write_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_write_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/src/fuse_ctrl_prim_axi_write_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/yaml/fuse_ctrl_prim_axi_write_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/yaml/fuse_ctrl_prim_axi_write_if_interface.yaml new file mode 100644 index 000000000..4a69d4c96 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_if_pkg/yaml/fuse_ctrl_prim_axi_write_if_interface.yaml @@ -0,0 +1,161 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_write_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: awaddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: awburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: awsize + reset_value: '''bz' + width: '3' + - dir: output + name: awlen + reset_value: '''bz' + width: '8' + - dir: output + name: awuser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awid + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awlock + reset_value: '''bz' + width: '1' + - dir: output + name: awvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wdata + reset_value: '''bz' + width: '[''DW'']' + - dir: output + name: wstrb + reset_value: '''bz' + width: '[''DW/8'']' + - dir: output + name: wvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wlast + reset_value: '''bz' + width: '1' + - dir: output + name: bready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: prim_awaddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awuser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wstrb + type: logic [DW/8 - 1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_bready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.project new file mode 100644 index 000000000..0770491f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_write_in_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.svproject new file mode 100644 index 000000000..b46351d9f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/Makefile new file mode 100644 index 000000000..856db9d2f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_write_in_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_write_in_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hvl.f + +fuse_ctrl_prim_axi_write_in_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hdl.f + +fuse_ctrl_prim_axi_write_in_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_write_in_if_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_write_in_if_pkg +COMP_fuse_ctrl_prim_axi_write_in_if_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_write_in_if_pkg +COMP_fuse_ctrl_prim_axi_write_in_if_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_write_in_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_write_in_if_pkg: $(COMP_fuse_ctrl_prim_axi_write_in_if_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_write_in_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_write_in_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_write_in_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_in_if_pkg += -I$(fuse_ctrl_prim_axi_write_in_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_in_if_pkg += $(fuse_ctrl_prim_axi_write_in_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_in_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_write_in_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_in_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_in_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/compile.do new file mode 100644 index 000000000..96057eeae --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_write_in_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if.compile new file mode 100644 index 000000000..3b0556089 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_write_in_if_hvl.compile + - fuse_ctrl_prim_axi_write_in_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_bfm.vinfo new file mode 100644 index 000000000..ec81da644 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_write_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_write_in_if_if.sv +src/fuse_ctrl_prim_axi_write_in_if_driver_bfm.sv +src/fuse_ctrl_prim_axi_write_in_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_common.compile new file mode 100644 index 000000000..9d4c93462 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hdl.f new file mode 100644 index 000000000..fe4f02fb8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hvl.f new file mode 100644 index 000000000..eb0bfa3dd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_xrtl.f new file mode 100644 index 000000000..9ce77bf09 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hdl.compile new file mode 100644 index 000000000..8c2ca2641 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_write_in_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_write_in_if_if.sv + - src/fuse_ctrl_prim_axi_write_in_if_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_write_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hvl.compile new file mode 100644 index 000000000..208f90cc3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_write_in_if_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_write_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.sv new file mode 100644 index 000000000..dfd8133f9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_in_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_write_in_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_write_in_if_macros.svh" + + export fuse_ctrl_prim_axi_write_in_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_write_in_if_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_write_in_if_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_if_configuration.svh" + `include "src/fuse_ctrl_prim_axi_write_in_if_driver.svh" + `include "src/fuse_ctrl_prim_axi_write_in_if_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_if_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_write_in_if_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_write_in_if_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_if_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_write_in_if2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.vinfo new file mode 100644 index 000000000..1a4ed8ccb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_write_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_write_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv new file mode 100644 index 000000000..c6851188c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_in_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_write_in_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_write_in_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.vinfo new file mode 100644 index 000000000..6cdfa7339 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_write_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_sve.F new file mode 100644 index 000000000..a43c2ae34 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/fuse_ctrl_prim_axi_write_in_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if2reg_adapter.svh new file mode 100644 index 000000000..db59eab23 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_write_in_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_write_in_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_write_in_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_agent.svh new file mode 100644 index 000000000..6ce4e8784 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_write_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_write_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_write_in_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_configuration.svh new file mode 100644 index 000000000..d201a9a66 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_write_in_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_write_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_write_in_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_write_in_if_configuration_s fuse_ctrl_prim_axi_write_in_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_write_in_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_if_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_write_in_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_write_in_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_write_in_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_write_in_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_in_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_write_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver.svh new file mode 100644 index 000000000..4e0b0c977 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_write_in_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_write_in_if_driver and fuse_ctrl_prim_axi_write_in_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_write_in_if_driver_bfm. +`fuse_ctrl_prim_axi_write_in_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_in_if_initiator_s fuse_ctrl_prim_axi_write_in_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_write_in_if_driver and fuse_ctrl_prim_axi_write_in_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_write_in_if_driver_bfm. +`fuse_ctrl_prim_axi_write_in_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_in_if_responder_s fuse_ctrl_prim_axi_write_in_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_write_in_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_write_in_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_write_in_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_write_in_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver_bfm.sv new file mode 100644 index 000000000..96ba0eea1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_driver_bfm.sv @@ -0,0 +1,429 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_write_in_if signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_write_in_if driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_write_in_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_write_in_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_write_in_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_in_if_macros.svh" + +interface fuse_ctrl_prim_axi_write_in_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_write_in_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_in_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] awaddr_i; + reg [AW-1:0] awaddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] awburst_o = 'bz; + tri [2:0] awsize_i; + reg [2:0] awsize_o = 'bz; + tri [7:0] awlen_i; + reg [7:0] awlen_o = 'bz; + tri [UW-1:0] awuser_i; + reg [UW-1:0] awuser_o = 'bz; + tri [UW-1:0] awid_i; + reg [UW-1:0] awid_o = 'bz; + tri awlock_i; + reg awlock_o = 'bz; + tri awvalid_i; + reg awvalid_o = 'bz; + tri [DW-1:0] wdata_i; + reg [DW-1:0] wdata_o = 'bz; + tri [DW/8-1:0] wstrb_i; + reg [DW/8-1:0] wstrb_o = 'bz; + tri wvalid_i; + reg wvalid_o = 'bz; + tri wlast_i; + reg wlast_o = 'bz; + tri bready_i; + reg bready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.awaddr = (initiator_responder == INITIATOR) ? awaddr_o : 'bz; + assign awaddr_i = bus.awaddr; + assign bus.awburst = (initiator_responder == INITIATOR) ? awburst_o : 'bz; + assign awburst_i = bus.awburst; + assign bus.awsize = (initiator_responder == INITIATOR) ? awsize_o : 'bz; + assign awsize_i = bus.awsize; + assign bus.awlen = (initiator_responder == INITIATOR) ? awlen_o : 'bz; + assign awlen_i = bus.awlen; + assign bus.awuser = (initiator_responder == INITIATOR) ? awuser_o : 'bz; + assign awuser_i = bus.awuser; + assign bus.awid = (initiator_responder == INITIATOR) ? awid_o : 'bz; + assign awid_i = bus.awid; + assign bus.awlock = (initiator_responder == INITIATOR) ? awlock_o : 'bz; + assign awlock_i = bus.awlock; + assign bus.awvalid = (initiator_responder == INITIATOR) ? awvalid_o : 'bz; + assign awvalid_i = bus.awvalid; + assign bus.wdata = (initiator_responder == INITIATOR) ? wdata_o : 'bz; + assign wdata_i = bus.wdata; + assign bus.wstrb = (initiator_responder == INITIATOR) ? wstrb_o : 'bz; + assign wstrb_i = bus.wstrb; + assign bus.wvalid = (initiator_responder == INITIATOR) ? wvalid_o : 'bz; + assign wvalid_i = bus.wvalid; + assign bus.wlast = (initiator_responder == INITIATOR) ? wlast_o : 'bz; + assign wlast_i = bus.wlast; + assign bus.bready = (initiator_responder == INITIATOR) ? bready_o : 'bz; + assign bready_i = bus.bready; + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_write_in_if_pkg::fuse_ctrl_prim_axi_write_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_write_in_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_write_in_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_in_if_driver and fuse_ctrl_prim_axi_write_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_in_if_driver_bfm. + `fuse_ctrl_prim_axi_write_in_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_in_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_write_in_if_driver and fuse_ctrl_prim_axi_write_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_in_if_driver_bfm. + `fuse_ctrl_prim_axi_write_in_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_in_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + awaddr_o <= 'bz; + awburst_o <= 'bz; + awsize_o <= 'bz; + awlen_o <= 'bz; + awuser_o <= 'bz; + awid_o <= 'bz; + awlock_o <= 'bz; + awvalid_o <= 'bz; + wdata_o <= 'bz; + wstrb_o <= 'bz; + wvalid_o <= 'bz; + wlast_o <= 'bz; + bready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_write_in_if_configuration_s fuse_ctrl_prim_axi_write_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_write_in_if_initiator_s fuse_ctrl_prim_axi_write_in_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_write_in_if_responder_s fuse_ctrl_prim_axi_write_in_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_write_in_if_initiator_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Members within the fuse_ctrl_prim_axi_write_in_if_responder_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + initiator_struct = fuse_ctrl_prim_axi_write_in_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // awaddr_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [AW-1:0] + // awburst_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // awsize_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [2:0] + // awlen_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [7:0] + // awuser_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [UW-1:0] + // awid_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [UW-1:0] + // awlock_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // + // awvalid_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // + // wdata_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [DW-1:0] + // wstrb_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // [DW/8-1:0] + // wvalid_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // + // wlast_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // + // bready_o <= fuse_ctrl_prim_axi_write_in_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_write_in_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_write_in_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_write_in_if_initiator_s fuse_ctrl_prim_axi_write_in_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_write_in_if_responder_s fuse_ctrl_prim_axi_write_in_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_write_in_if_initiator_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Variables within the fuse_ctrl_prim_axi_write_in_if_responder_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awlock_i; // + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = awvalid_i; // + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = wvalid_i; // + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = wlast_i; // + // fuse_ctrl_prim_axi_write_in_if_responder_struct.xyz = bready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_write_in_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_write_in_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_if.sv new file mode 100644 index 000000000..80a131b63 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_if.sv @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_write_in_if interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_write_in_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_write_in_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_write_in_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awaddr), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awburst), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awsize), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awlen), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awuser), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awlock), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.awvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.wdata), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.wstrb), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.wvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.wlast), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_if_bus.bready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_in_if_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_write_in_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] awaddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst, + inout tri [2:0] awsize, + inout tri [7:0] awlen, + inout tri [UW-1:0] awuser, + inout tri [UW-1:0] awid, + inout tri awlock, + inout tri awvalid, + inout tri [DW-1:0] wdata, + inout tri [DW/8-1:0] wstrb, + inout tri wvalid, + inout tri wlast, + inout tri bready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output awaddr, + output awburst, + output awsize, + output awlen, + output awuser, + output awid, + output awlock, + output awvalid, + output wdata, + output wstrb, + output wvalid, + output wlast, + output bready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_macros.svh new file mode 100644 index 000000000..21b77c4eb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_macros.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_write_in_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_write_in_if_configuration class. +// + `define fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_write_in_if_configuration_s; + + `define fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_if_configuration_s to_struct();\ + fuse_ctrl_prim_axi_write_in_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_write_in_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_write_in_if_configuration_s fuse_ctrl_prim_axi_write_in_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_write_in_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_write_in_if_transaction class. +// + `define fuse_ctrl_prim_axi_write_in_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_in_if_monitor_s; + + `define fuse_ctrl_prim_axi_write_in_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_if_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_write_in_if_monitor_struct = \ + { \ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_in_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_write_in_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_write_in_if_monitor_s fuse_ctrl_prim_axi_write_in_if_monitor_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_in_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_write_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_in_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_in_if_initiator_s; + + `define fuse_ctrl_prim_axi_write_in_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_if_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_write_in_if_initiator_struct = \ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_in_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_in_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_write_in_if_initiator_s fuse_ctrl_prim_axi_write_in_if_initiator_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_in_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_write_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_in_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_in_if_responder_s; + + `define fuse_ctrl_prim_axi_write_in_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_if_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_write_in_if_responder_struct = \ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_in_if_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_in_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_write_in_if_responder_s fuse_ctrl_prim_axi_write_in_if_responder_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_in_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor.svh new file mode 100644 index 000000000..d70eab613 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_write_in_if transactions observed by the +// fuse_ctrl_prim_axi_write_in_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_write_in_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_write_in_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_write_in_if_monitor_s fuse_ctrl_prim_axi_write_in_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_write_in_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor_bfm.sv new file mode 100644 index 000000000..d69cf9edc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_monitor_bfm.sv @@ -0,0 +1,248 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_write_in_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_write_in_if monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_write_in_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_write_in_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_write_in_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_in_if_macros.svh" + + +interface fuse_ctrl_prim_axi_write_in_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_write_in_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_in_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_write_in_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_in_if_monitor_s fuse_ctrl_prim_axi_write_in_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_write_in_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] awaddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + tri [2:0] awsize_i; + tri [7:0] awlen_i; + tri [UW-1:0] awuser_i; + tri [UW-1:0] awid_i; + tri awlock_i; + tri awvalid_i; + tri [DW-1:0] wdata_i; + tri [DW/8-1:0] wstrb_i; + tri wvalid_i; + tri wlast_i; + tri bready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awaddr_i = bus.awaddr; + assign awburst_i = bus.awburst; + assign awsize_i = bus.awsize; + assign awlen_i = bus.awlen; + assign awuser_i = bus.awuser; + assign awid_i = bus.awid; + assign awlock_i = bus.awlock; + assign awvalid_i = bus.awvalid; + assign wdata_i = bus.wdata; + assign wstrb_i = bus.wstrb; + assign wvalid_i = bus.wvalid; + assign wlast_i = bus.wlast; + assign bready_i = bus.bready; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_write_in_if_pkg::fuse_ctrl_prim_axi_write_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_write_in_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_write_in_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_write_in_if_configuration_s fuse_ctrl_prim_axi_write_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_write_in_if_monitor_s fuse_ctrl_prim_axi_write_in_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awaddr + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awvalid + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awburst + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awsize + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awlen + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awuser + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awid + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_awlock + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_wdata + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_wstrb + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_wvalid + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_wlast + // // fuse_ctrl_prim_axi_write_in_if_monitor_struct.prim_bready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awlock_i; // + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = awvalid_i; // + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = wvalid_i; // + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = wlast_i; // + // fuse_ctrl_prim_axi_write_in_if_monitor_struct.xyz = bready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_random_sequence.svh new file mode 100644 index 000000000..2855daa79 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_write_in_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_write_in_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_write_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_write_in_if_random_sequence::body()-fuse_ctrl_prim_axi_write_in_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_write_in_if_driver_bfm via the sequencer and fuse_ctrl_prim_axi_write_in_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_write_in_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_responder_sequence.svh new file mode 100644 index 000000000..0b77b4c78 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_write_in_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_write_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_sequence_base.svh new file mode 100644 index 000000000..33d0fe368 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_in_if_transaction_req_t; + fuse_ctrl_prim_axi_write_in_if_transaction_req_t req; + typedef fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_in_if_transaction_rsp_t; + fuse_ctrl_prim_axi_write_in_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_write_in_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_write_in_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction.svh new file mode 100644 index 000000000..587456c34 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction.svh @@ -0,0 +1,256 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_write_in_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] prim_awaddr ; + logic prim_awvalid ; + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + logic [2:0] prim_awsize ; + logic [7:0] prim_awlen ; + logic [UW-1:0] prim_awuser ; + logic [IW-1:0] prim_awid ; + logic prim_awlock ; + logic [DW-1:0] prim_wdata ; + logic [DW/8 - 1:0] prim_wstrb ; + logic prim_wvalid ; + logic prim_wlast ; + logic prim_bready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_write_in_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_write_in_if_monitor and fuse_ctrl_prim_axi_write_in_if_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_in_if_monitor_s fuse_ctrl_prim_axi_write_in_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_in_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_if_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_in_if_driver and fuse_ctrl_prim_axi_write_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_in_if_initiator_s fuse_ctrl_prim_axi_write_in_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_in_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_if_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_write_in_if_driver and fuse_ctrl_prim_axi_write_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_in_if_responder_s fuse_ctrl_prim_axi_write_in_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_in_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_if_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_if_macros.svh + `fuse_ctrl_prim_axi_write_in_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awaddr:0x%x prim_awvalid:0x%x prim_awburst:0x%x prim_awsize:0x%x prim_awlen:0x%x prim_awuser:0x%x prim_awid:0x%x prim_awlock:0x%x prim_wdata:0x%x prim_wstrb:0x%x prim_wvalid:0x%x prim_wlast:0x%x prim_bready:0x%x ",prim_awaddr,prim_awvalid,prim_awburst,prim_awsize,prim_awlen,prim_awuser,prim_awid,prim_awlock,prim_wdata,prim_wstrb,prim_wvalid,prim_wlast,prim_bready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_wdata == RHS.prim_wdata) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awaddr = RHS.prim_awaddr; + this.prim_awvalid = RHS.prim_awvalid; + this.prim_awburst = RHS.prim_awburst; + this.prim_awsize = RHS.prim_awsize; + this.prim_awlen = RHS.prim_awlen; + this.prim_awuser = RHS.prim_awuser; + this.prim_awid = RHS.prim_awid; + this.prim_awlock = RHS.prim_awlock; + this.prim_wdata = RHS.prim_wdata; + this.prim_wstrb = RHS.prim_wstrb; + this.prim_wvalid = RHS.prim_wvalid; + this.prim_wlast = RHS.prim_wlast; + this.prim_bready = RHS.prim_bready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_write_in_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awaddr,"prim_awaddr"); + $add_attribute(transaction_view_h,prim_awvalid,"prim_awvalid"); + $add_attribute(transaction_view_h,prim_awburst,"prim_awburst"); + $add_attribute(transaction_view_h,prim_awsize,"prim_awsize"); + $add_attribute(transaction_view_h,prim_awlen,"prim_awlen"); + $add_attribute(transaction_view_h,prim_awuser,"prim_awuser"); + $add_attribute(transaction_view_h,prim_awid,"prim_awid"); + $add_attribute(transaction_view_h,prim_awlock,"prim_awlock"); + $add_attribute(transaction_view_h,prim_wdata,"prim_wdata"); + $add_attribute(transaction_view_h,prim_wstrb,"prim_wstrb"); + $add_attribute(transaction_view_h,prim_wvalid,"prim_wvalid"); + $add_attribute(transaction_view_h,prim_wlast,"prim_wlast"); + $add_attribute(transaction_view_h,prim_bready,"prim_bready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction_coverage.svh new file mode 100644 index 000000000..0a8862ad8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_transaction_coverage.svh @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_write_in_if transaction information using +// a covergroup named fuse_ctrl_prim_axi_write_in_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_write_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_write_in_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awaddr: coverpoint coverage_trans.prim_awaddr; + prim_awvalid: coverpoint coverage_trans.prim_awvalid; + prim_awburst: coverpoint coverage_trans.prim_awburst; + prim_awsize: coverpoint coverage_trans.prim_awsize; + prim_awlen: coverpoint coverage_trans.prim_awlen; + prim_awuser: coverpoint coverage_trans.prim_awuser; + prim_awid: coverpoint coverage_trans.prim_awid; + prim_awlock: coverpoint coverage_trans.prim_awlock; + prim_wdata: coverpoint coverage_trans.prim_wdata; + prim_wstrb: coverpoint coverage_trans.prim_wstrb; + prim_wvalid: coverpoint coverage_trans.prim_wvalid; + prim_wlast: coverpoint coverage_trans.prim_wlast; + prim_bready: coverpoint coverage_trans.prim_bready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_write_in_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_write_in_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_in_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_write_in_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/src/fuse_ctrl_prim_axi_write_in_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/yaml/fuse_ctrl_prim_axi_write_in_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/yaml/fuse_ctrl_prim_axi_write_in_if_interface.yaml new file mode 100644 index 000000000..94606fc08 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_if_pkg/yaml/fuse_ctrl_prim_axi_write_in_if_interface.yaml @@ -0,0 +1,161 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_write_in_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: awaddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: awburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: awsize + reset_value: '''bz' + width: '3' + - dir: output + name: awlen + reset_value: '''bz' + width: '8' + - dir: output + name: awuser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awid + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awlock + reset_value: '''bz' + width: '1' + - dir: output + name: awvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wdata + reset_value: '''bz' + width: '[''DW'']' + - dir: output + name: wstrb + reset_value: '''bz' + width: '[''DW/8'']' + - dir: output + name: wvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wlast + reset_value: '''bz' + width: '1' + - dir: output + name: bready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: prim_awaddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awuser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wstrb + type: logic [DW/8 - 1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_bready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.project new file mode 100644 index 000000000..8c615b525 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_write_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.svproject new file mode 100644 index 000000000..14eb90e60 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/Makefile new file mode 100644 index 000000000..58b6255e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_write_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_write_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hvl.f + +fuse_ctrl_prim_axi_write_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hdl.f + +fuse_ctrl_prim_axi_write_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_write_in_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_write_in_pkg +COMP_fuse_ctrl_prim_axi_write_in_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_write_in_pkg +COMP_fuse_ctrl_prim_axi_write_in_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_write_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_write_in_pkg: $(COMP_fuse_ctrl_prim_axi_write_in_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_write_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_write_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_write_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_write_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_write_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_in_pkg += -I$(fuse_ctrl_prim_axi_write_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_in_pkg += $(fuse_ctrl_prim_axi_write_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_write_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/compile.do new file mode 100644 index 000000000..0b7eaf691 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_write_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in.compile new file mode 100644 index 000000000..cc55184d7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_write_in_hvl.compile + - fuse_ctrl_prim_axi_write_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_bfm.vinfo new file mode 100644 index 000000000..f0da591fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_write_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_write_in_if.sv +src/fuse_ctrl_prim_axi_write_in_driver_bfm.sv +src/fuse_ctrl_prim_axi_write_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_common.compile new file mode 100644 index 000000000..9fd1f6c57 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_write_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hdl.f new file mode 100644 index 000000000..05ff74470 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hvl.f new file mode 100644 index 000000000..9e594a7e8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_xrtl.f new file mode 100644 index 000000000..aeb98365e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hdl.compile new file mode 100644 index 000000000..954117b62 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_write_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_write_in_if.sv + - src/fuse_ctrl_prim_axi_write_in_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_write_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hvl.compile new file mode 100644 index 000000000..7be9859cb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_write_in_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_write_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.sv new file mode 100644 index 000000000..bebb7a348 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_write_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_write_in_macros.svh" + + export fuse_ctrl_prim_axi_write_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_write_in_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_write_in_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_configuration.svh" + `include "src/fuse_ctrl_prim_axi_write_in_driver.svh" + `include "src/fuse_ctrl_prim_axi_write_in_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_write_in_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_write_in_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_write_in2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_write_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.vinfo new file mode 100644 index 000000000..a03a77b1d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_write_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_write_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.sv new file mode 100644 index 000000000..b974d8d0d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_write_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_write_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.vinfo new file mode 100644 index 000000000..6813b251a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_write_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_sve.F new file mode 100644 index 000000000..276278034 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/fuse_ctrl_prim_axi_write_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in2reg_adapter.svh new file mode 100644 index 000000000..5711099ae --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_write_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_write_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_write_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_agent.svh new file mode 100644 index 000000000..552affab0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_write_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_write_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_write_in_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_configuration.svh new file mode 100644 index 000000000..2a5858b9b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_write_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_write_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_write_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_write_in_configuration_s fuse_ctrl_prim_axi_write_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_write_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_write_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_write_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_write_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_write_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_write_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver.svh new file mode 100644 index 000000000..ad7975fd9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_write_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_write_in_driver and fuse_ctrl_prim_axi_write_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_write_in_driver_bfm. +`fuse_ctrl_prim_axi_write_in_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_in_initiator_s fuse_ctrl_prim_axi_write_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_write_in_driver and fuse_ctrl_prim_axi_write_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_write_in_driver_bfm. +`fuse_ctrl_prim_axi_write_in_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_in_responder_s fuse_ctrl_prim_axi_write_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_write_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_write_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_write_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_write_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver_bfm.sv new file mode 100644 index 000000000..74c7fb4ce --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_driver_bfm.sv @@ -0,0 +1,429 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_write_in signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_write_in driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_write_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_write_in_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_write_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_in_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_in_macros.svh" + +interface fuse_ctrl_prim_axi_write_in_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_write_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] awaddr_i; + reg [AW-1:0] awaddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] awburst_o = 'bz; + tri [2:0] awsize_i; + reg [2:0] awsize_o = 'bz; + tri [7:0] awlen_i; + reg [7:0] awlen_o = 'bz; + tri [UW-1:0] awuser_i; + reg [UW-1:0] awuser_o = 'bz; + tri [UW-1:0] awid_i; + reg [UW-1:0] awid_o = 'bz; + tri awlock_i; + reg awlock_o = 'bz; + tri awvalid_i; + reg awvalid_o = 'bz; + tri [DW-1:0] wdata_i; + reg [DW-1:0] wdata_o = 'bz; + tri [DW/8-1:0] wstrb_i; + reg [DW/8-1:0] wstrb_o = 'bz; + tri wvalid_i; + reg wvalid_o = 'bz; + tri wlast_i; + reg wlast_o = 'bz; + tri bready_i; + reg bready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.awaddr = (initiator_responder == INITIATOR) ? awaddr_o : 'bz; + assign awaddr_i = bus.awaddr; + assign bus.awburst = (initiator_responder == INITIATOR) ? awburst_o : 'bz; + assign awburst_i = bus.awburst; + assign bus.awsize = (initiator_responder == INITIATOR) ? awsize_o : 'bz; + assign awsize_i = bus.awsize; + assign bus.awlen = (initiator_responder == INITIATOR) ? awlen_o : 'bz; + assign awlen_i = bus.awlen; + assign bus.awuser = (initiator_responder == INITIATOR) ? awuser_o : 'bz; + assign awuser_i = bus.awuser; + assign bus.awid = (initiator_responder == INITIATOR) ? awid_o : 'bz; + assign awid_i = bus.awid; + assign bus.awlock = (initiator_responder == INITIATOR) ? awlock_o : 'bz; + assign awlock_i = bus.awlock; + assign bus.awvalid = (initiator_responder == INITIATOR) ? awvalid_o : 'bz; + assign awvalid_i = bus.awvalid; + assign bus.wdata = (initiator_responder == INITIATOR) ? wdata_o : 'bz; + assign wdata_i = bus.wdata; + assign bus.wstrb = (initiator_responder == INITIATOR) ? wstrb_o : 'bz; + assign wstrb_i = bus.wstrb; + assign bus.wvalid = (initiator_responder == INITIATOR) ? wvalid_o : 'bz; + assign wvalid_i = bus.wvalid; + assign bus.wlast = (initiator_responder == INITIATOR) ? wlast_o : 'bz; + assign wlast_i = bus.wlast; + assign bus.bready = (initiator_responder == INITIATOR) ? bready_o : 'bz; + assign bready_i = bus.bready; + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_write_in_pkg::fuse_ctrl_prim_axi_write_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_write_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_write_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_write_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_in_driver and fuse_ctrl_prim_axi_write_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_in_driver_bfm. + `fuse_ctrl_prim_axi_write_in_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_write_in_driver and fuse_ctrl_prim_axi_write_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_in_driver_bfm. + `fuse_ctrl_prim_axi_write_in_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + awaddr_o <= 'bz; + awburst_o <= 'bz; + awsize_o <= 'bz; + awlen_o <= 'bz; + awuser_o <= 'bz; + awid_o <= 'bz; + awlock_o <= 'bz; + awvalid_o <= 'bz; + wdata_o <= 'bz; + wstrb_o <= 'bz; + wvalid_o <= 'bz; + wlast_o <= 'bz; + bready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_write_in_configuration_s fuse_ctrl_prim_axi_write_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_write_in_initiator_s fuse_ctrl_prim_axi_write_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_write_in_responder_s fuse_ctrl_prim_axi_write_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_write_in_initiator_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Members within the fuse_ctrl_prim_axi_write_in_responder_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + initiator_struct = fuse_ctrl_prim_axi_write_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // awaddr_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [AW-1:0] + // awburst_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // awsize_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [2:0] + // awlen_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [7:0] + // awuser_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [UW-1:0] + // awid_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [UW-1:0] + // awlock_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // + // awvalid_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // + // wdata_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [DW-1:0] + // wstrb_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // [DW/8-1:0] + // wvalid_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // + // wlast_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // + // bready_o <= fuse_ctrl_prim_axi_write_in_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_write_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_write_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_write_in_initiator_s fuse_ctrl_prim_axi_write_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_write_in_responder_s fuse_ctrl_prim_axi_write_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_write_in_initiator_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Variables within the fuse_ctrl_prim_axi_write_in_responder_struct: + // logic [AW-1:0] prim_awaddr ; + // logic prim_awvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + // logic [2:0] prim_awsize ; + // logic [7:0] prim_awlen ; + // logic [UW-1:0] prim_awuser ; + // logic [IW-1:0] prim_awid ; + // logic prim_awlock ; + // logic [DW-1:0] prim_wdata ; + // logic [DW/8 - 1:0] prim_wstrb ; + // logic prim_wvalid ; + // logic prim_wlast ; + // logic prim_bready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awlock_i; // + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = awvalid_i; // + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = wvalid_i; // + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = wlast_i; // + // fuse_ctrl_prim_axi_write_in_responder_struct.xyz = bready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_write_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_write_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_if.sv new file mode 100644 index 000000000..ba77427e3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_if.sv @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_write_in interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_write_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_write_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_write_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awaddr), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awburst), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awsize), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awlen), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awuser), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awlock), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.awvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.wdata), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.wstrb), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.wvalid), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.wlast), // Agent output +// .dut_signal_port(fuse_ctrl_prim_axi_write_in_bus.bready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_in_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_write_in_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] awaddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst, + inout tri [2:0] awsize, + inout tri [7:0] awlen, + inout tri [UW-1:0] awuser, + inout tri [UW-1:0] awid, + inout tri awlock, + inout tri awvalid, + inout tri [DW-1:0] wdata, + inout tri [DW/8-1:0] wstrb, + inout tri wvalid, + inout tri wlast, + inout tri bready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output awaddr, + output awburst, + output awsize, + output awlen, + output awuser, + output awid, + output awlock, + output awvalid, + output wdata, + output wstrb, + output wvalid, + output wlast, + output bready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input awaddr, + input awburst, + input awsize, + input awlen, + input awuser, + input awid, + input awlock, + input awvalid, + input wdata, + input wstrb, + input wvalid, + input wlast, + input bready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_macros.svh new file mode 100644 index 000000000..5d21a9094 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_macros.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_write_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_write_in_configuration class. +// + `define fuse_ctrl_prim_axi_write_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_write_in_configuration_s; + + `define fuse_ctrl_prim_axi_write_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_configuration_s to_struct();\ + fuse_ctrl_prim_axi_write_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_write_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_write_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_write_in_configuration_s fuse_ctrl_prim_axi_write_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_write_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_write_in_transaction class. +// + `define fuse_ctrl_prim_axi_write_in_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_in_monitor_s; + + `define fuse_ctrl_prim_axi_write_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_write_in_monitor_struct = \ + { \ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_write_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_write_in_monitor_s fuse_ctrl_prim_axi_write_in_monitor_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_write_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_in_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_in_initiator_s; + + `define fuse_ctrl_prim_axi_write_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_write_in_initiator_struct = \ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_write_in_initiator_s fuse_ctrl_prim_axi_write_in_initiator_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_write_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_in_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] prim_awaddr ; \ + logic prim_awvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; \ + logic [2:0] prim_awsize ; \ + logic [7:0] prim_awlen ; \ + logic [UW-1:0] prim_awuser ; \ + logic [IW-1:0] prim_awid ; \ + logic prim_awlock ; \ + logic [DW-1:0] prim_wdata ; \ + logic [DW/8 - 1:0] prim_wstrb ; \ + logic prim_wvalid ; \ + logic prim_wlast ; \ + logic prim_bready ; \ + } fuse_ctrl_prim_axi_write_in_responder_s; + + `define fuse_ctrl_prim_axi_write_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_in_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_write_in_responder_struct = \ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + };\ + return ( fuse_ctrl_prim_axi_write_in_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_write_in_responder_s fuse_ctrl_prim_axi_write_in_responder_struct);\ + {\ + this.prim_awaddr , \ + this.prim_awvalid , \ + this.prim_awburst , \ + this.prim_awsize , \ + this.prim_awlen , \ + this.prim_awuser , \ + this.prim_awid , \ + this.prim_awlock , \ + this.prim_wdata , \ + this.prim_wstrb , \ + this.prim_wvalid , \ + this.prim_wlast , \ + this.prim_bready \ + } = fuse_ctrl_prim_axi_write_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor.svh new file mode 100644 index 000000000..4deee8c06 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_write_in transactions observed by the +// fuse_ctrl_prim_axi_write_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_write_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_write_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_write_in_monitor_s fuse_ctrl_prim_axi_write_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_write_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor_bfm.sv new file mode 100644 index 000000000..80b4df5ac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_monitor_bfm.sv @@ -0,0 +1,248 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_write_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_write_in monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_write_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_write_in_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_write_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_in_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_in_macros.svh" + + +interface fuse_ctrl_prim_axi_write_in_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_write_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_write_in_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_in_monitor_s fuse_ctrl_prim_axi_write_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_write_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] awaddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] awburst_i; + tri [2:0] awsize_i; + tri [7:0] awlen_i; + tri [UW-1:0] awuser_i; + tri [UW-1:0] awid_i; + tri awlock_i; + tri awvalid_i; + tri [DW-1:0] wdata_i; + tri [DW/8-1:0] wstrb_i; + tri wvalid_i; + tri wlast_i; + tri bready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awaddr_i = bus.awaddr; + assign awburst_i = bus.awburst; + assign awsize_i = bus.awsize; + assign awlen_i = bus.awlen; + assign awuser_i = bus.awuser; + assign awid_i = bus.awid; + assign awlock_i = bus.awlock; + assign awvalid_i = bus.awvalid; + assign wdata_i = bus.wdata; + assign wstrb_i = bus.wstrb; + assign wvalid_i = bus.wvalid; + assign wlast_i = bus.wlast; + assign bready_i = bus.bready; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_write_in_pkg::fuse_ctrl_prim_axi_write_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_write_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_write_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_write_in_configuration_s fuse_ctrl_prim_axi_write_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_write_in_monitor_s fuse_ctrl_prim_axi_write_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awaddr + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awvalid + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awburst + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awsize + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awlen + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awuser + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awid + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_awlock + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_wdata + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_wstrb + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_wvalid + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_wlast + // // fuse_ctrl_prim_axi_write_in_monitor_struct.prim_bready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awaddr_i; // [AW-1:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awsize_i; // [2:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awlen_i; // [7:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awuser_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awid_i; // [UW-1:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awlock_i; // + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = awvalid_i; // + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = wdata_i; // [DW-1:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = wstrb_i; // [DW/8-1:0] + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = wvalid_i; // + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = wlast_i; // + // fuse_ctrl_prim_axi_write_in_monitor_struct.xyz = bready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_random_sequence.svh new file mode 100644 index 000000000..5b9a8e55b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_write_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_write_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_write_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_write_in_random_sequence::body()-fuse_ctrl_prim_axi_write_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_write_in_driver_bfm via the sequencer and fuse_ctrl_prim_axi_write_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_write_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_responder_sequence.svh new file mode 100644 index 000000000..e8be3065d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_write_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_write_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_sequence_base.svh new file mode 100644 index 000000000..2d40c99ed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_in_transaction_req_t; + fuse_ctrl_prim_axi_write_in_transaction_req_t req; + typedef fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_in_transaction_rsp_t; + fuse_ctrl_prim_axi_write_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_write_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_write_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction.svh new file mode 100644 index 000000000..e58f4ec51 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction.svh @@ -0,0 +1,256 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_write_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_in_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] prim_awaddr ; + logic prim_awvalid ; + logic [$bits(axi_pkg::axi_burst_e)] prim_awburst ; + logic [2:0] prim_awsize ; + logic [7:0] prim_awlen ; + logic [UW-1:0] prim_awuser ; + logic [IW-1:0] prim_awid ; + logic prim_awlock ; + logic [DW-1:0] prim_wdata ; + logic [DW/8 - 1:0] prim_wstrb ; + logic prim_wvalid ; + logic prim_wlast ; + logic prim_bready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_write_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_write_in_monitor and fuse_ctrl_prim_axi_write_in_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_in_monitor_s fuse_ctrl_prim_axi_write_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_in_driver and fuse_ctrl_prim_axi_write_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_in_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_in_initiator_s fuse_ctrl_prim_axi_write_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_write_in_driver and fuse_ctrl_prim_axi_write_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_in_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_in_responder_s fuse_ctrl_prim_axi_write_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_in_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_in_macros.svh + `fuse_ctrl_prim_axi_write_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awaddr:0x%x prim_awvalid:0x%x prim_awburst:0x%x prim_awsize:0x%x prim_awlen:0x%x prim_awuser:0x%x prim_awid:0x%x prim_awlock:0x%x prim_wdata:0x%x prim_wstrb:0x%x prim_wvalid:0x%x prim_wlast:0x%x prim_bready:0x%x ",prim_awaddr,prim_awvalid,prim_awburst,prim_awsize,prim_awlen,prim_awuser,prim_awid,prim_awlock,prim_wdata,prim_wstrb,prim_wvalid,prim_wlast,prim_bready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_wdata == RHS.prim_wdata) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awaddr = RHS.prim_awaddr; + this.prim_awvalid = RHS.prim_awvalid; + this.prim_awburst = RHS.prim_awburst; + this.prim_awsize = RHS.prim_awsize; + this.prim_awlen = RHS.prim_awlen; + this.prim_awuser = RHS.prim_awuser; + this.prim_awid = RHS.prim_awid; + this.prim_awlock = RHS.prim_awlock; + this.prim_wdata = RHS.prim_wdata; + this.prim_wstrb = RHS.prim_wstrb; + this.prim_wvalid = RHS.prim_wvalid; + this.prim_wlast = RHS.prim_wlast; + this.prim_bready = RHS.prim_bready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_write_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awaddr,"prim_awaddr"); + $add_attribute(transaction_view_h,prim_awvalid,"prim_awvalid"); + $add_attribute(transaction_view_h,prim_awburst,"prim_awburst"); + $add_attribute(transaction_view_h,prim_awsize,"prim_awsize"); + $add_attribute(transaction_view_h,prim_awlen,"prim_awlen"); + $add_attribute(transaction_view_h,prim_awuser,"prim_awuser"); + $add_attribute(transaction_view_h,prim_awid,"prim_awid"); + $add_attribute(transaction_view_h,prim_awlock,"prim_awlock"); + $add_attribute(transaction_view_h,prim_wdata,"prim_wdata"); + $add_attribute(transaction_view_h,prim_wstrb,"prim_wstrb"); + $add_attribute(transaction_view_h,prim_wvalid,"prim_wvalid"); + $add_attribute(transaction_view_h,prim_wlast,"prim_wlast"); + $add_attribute(transaction_view_h,prim_bready,"prim_bready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction_coverage.svh new file mode 100644 index 000000000..30d005a0a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_transaction_coverage.svh @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_write_in transaction information using +// a covergroup named fuse_ctrl_prim_axi_write_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_in_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_write_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_in_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_write_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awaddr: coverpoint coverage_trans.prim_awaddr; + prim_awvalid: coverpoint coverage_trans.prim_awvalid; + prim_awburst: coverpoint coverage_trans.prim_awburst; + prim_awsize: coverpoint coverage_trans.prim_awsize; + prim_awlen: coverpoint coverage_trans.prim_awlen; + prim_awuser: coverpoint coverage_trans.prim_awuser; + prim_awid: coverpoint coverage_trans.prim_awid; + prim_awlock: coverpoint coverage_trans.prim_awlock; + prim_wdata: coverpoint coverage_trans.prim_wdata; + prim_wstrb: coverpoint coverage_trans.prim_wstrb; + prim_wvalid: coverpoint coverage_trans.prim_wvalid; + prim_wlast: coverpoint coverage_trans.prim_wlast; + prim_bready: coverpoint coverage_trans.prim_bready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_write_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_write_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_write_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/src/fuse_ctrl_prim_axi_write_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/yaml/fuse_ctrl_prim_axi_write_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/yaml/fuse_ctrl_prim_axi_write_in_interface.yaml new file mode 100644 index 000000000..ec7591e55 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_in_pkg/yaml/fuse_ctrl_prim_axi_write_in_interface.yaml @@ -0,0 +1,161 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_write_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: awaddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: awburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: awsize + reset_value: '''bz' + width: '3' + - dir: output + name: awlen + reset_value: '''bz' + width: '8' + - dir: output + name: awuser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awid + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: awlock + reset_value: '''bz' + width: '1' + - dir: output + name: awvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wdata + reset_value: '''bz' + width: '[''DW'']' + - dir: output + name: wstrb + reset_value: '''bz' + width: '[''DW/8'']' + - dir: output + name: wvalid + reset_value: '''bz' + width: '1' + - dir: output + name: wlast + reset_value: '''bz' + width: '1' + - dir: output + name: bready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: prim_awaddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awuser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_awlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wstrb + type: logic [DW/8 - 1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_wlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: prim_bready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.project new file mode 100644 index 000000000..3fbcdcad1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_write_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.svproject new file mode 100644 index 000000000..c87614b22 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/Makefile new file mode 100644 index 000000000..1ac2ce11c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_write_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_write_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hvl.f + +fuse_ctrl_prim_axi_write_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hdl.f + +fuse_ctrl_prim_axi_write_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_write_out_if_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_write_out_if_pkg +COMP_fuse_ctrl_prim_axi_write_out_if_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_write_out_if_pkg +COMP_fuse_ctrl_prim_axi_write_out_if_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_write_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_write_out_if_pkg: $(COMP_fuse_ctrl_prim_axi_write_out_if_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_write_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_write_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_write_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_out_if_pkg += -I$(fuse_ctrl_prim_axi_write_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_out_if_pkg += $(fuse_ctrl_prim_axi_write_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_out_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_write_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/compile.do new file mode 100644 index 000000000..195e5ab83 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_write_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if.compile new file mode 100644 index 000000000..8935f53f7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_write_out_if_hvl.compile + - fuse_ctrl_prim_axi_write_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_bfm.vinfo new file mode 100644 index 000000000..18c4d8b34 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_write_out_if_if.sv +src/fuse_ctrl_prim_axi_write_out_if_driver_bfm.sv +src/fuse_ctrl_prim_axi_write_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_common.compile new file mode 100644 index 000000000..b42384370 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hdl.f new file mode 100644 index 000000000..eb11340b2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hvl.f new file mode 100644 index 000000000..aa9e377b1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_xrtl.f new file mode 100644 index 000000000..54a6c5251 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hdl.compile new file mode 100644 index 000000000..dfeac8677 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_write_out_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_write_out_if_if.sv + - src/fuse_ctrl_prim_axi_write_out_if_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hvl.compile new file mode 100644 index 000000000..2e07fe5b4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_write_out_if_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.sv new file mode 100644 index 000000000..489f30c82 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_write_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_write_out_if_macros.svh" + + export fuse_ctrl_prim_axi_write_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_write_out_if_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_write_out_if_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_if_configuration.svh" + `include "src/fuse_ctrl_prim_axi_write_out_if_driver.svh" + `include "src/fuse_ctrl_prim_axi_write_out_if_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_if_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_write_out_if_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_write_out_if_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_if_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_write_out_if2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.vinfo new file mode 100644 index 000000000..20ff7d6ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv new file mode 100644 index 000000000..e893dbdcc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_write_out_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_write_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..3c442ba81 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_sve.F new file mode 100644 index 000000000..dedbb6647 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/fuse_ctrl_prim_axi_write_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if2reg_adapter.svh new file mode 100644 index 000000000..24aefdb70 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_write_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_write_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_write_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_agent.svh new file mode 100644 index 000000000..f7ca4af1b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_write_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_configuration.svh new file mode 100644 index 000000000..1f4fb4bd2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_write_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_write_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_write_out_if_configuration_s fuse_ctrl_prim_axi_write_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_write_out_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_if_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_write_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_write_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_write_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_write_out_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver.svh new file mode 100644 index 000000000..820e05be0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_write_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_write_out_if_driver and fuse_ctrl_prim_axi_write_out_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_write_out_if_driver_bfm. +`fuse_ctrl_prim_axi_write_out_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_out_if_initiator_s fuse_ctrl_prim_axi_write_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_write_out_if_driver and fuse_ctrl_prim_axi_write_out_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_write_out_if_driver_bfm. +`fuse_ctrl_prim_axi_write_out_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_out_if_responder_s fuse_ctrl_prim_axi_write_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_write_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_write_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_write_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_write_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver_bfm.sv new file mode 100644 index 000000000..12dbc26ed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_write_out_if signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_write_out_if driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_write_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_write_out_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_write_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_out_if_macros.svh" + +interface fuse_ctrl_prim_axi_write_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_write_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_write_out_if_pkg::fuse_ctrl_prim_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_write_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_write_out_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_out_if_driver and fuse_ctrl_prim_axi_write_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_out_if_driver_bfm. + `fuse_ctrl_prim_axi_write_out_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_write_out_if_driver and fuse_ctrl_prim_axi_write_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_out_if_driver_bfm. + `fuse_ctrl_prim_axi_write_out_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_write_out_if_configuration_s fuse_ctrl_prim_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_write_out_if_initiator_s fuse_ctrl_prim_axi_write_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_write_out_if_responder_s fuse_ctrl_prim_axi_write_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_write_out_if_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Members within the fuse_ctrl_prim_axi_write_out_if_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + initiator_struct = fuse_ctrl_prim_axi_write_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_prim_axi_write_out_if_responder_struct.xyz = awready_i; // + // fuse_ctrl_prim_axi_write_out_if_responder_struct.xyz = wready_i; // + // fuse_ctrl_prim_axi_write_out_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_out_if_responder_struct.xyz = bid_i; // + // fuse_ctrl_prim_axi_write_out_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_write_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_write_out_if_initiator_s fuse_ctrl_prim_axi_write_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_write_out_if_responder_s fuse_ctrl_prim_axi_write_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_write_out_if_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Variables within the fuse_ctrl_prim_axi_write_out_if_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= fuse_ctrl_prim_axi_write_out_if_initiator_struct.xyz; // + // wready_o <= fuse_ctrl_prim_axi_write_out_if_initiator_struct.xyz; // + // bresp_o <= fuse_ctrl_prim_axi_write_out_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= fuse_ctrl_prim_axi_write_out_if_initiator_struct.xyz; // + // bvalid_o <= fuse_ctrl_prim_axi_write_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_write_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_if.sv new file mode 100644 index 000000000..49688b122 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_write_out_if interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_write_out_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_write_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_write_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_if_bus.awready), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_if_bus.wready), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_if_bus.bresp), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_if_bus.bid), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_out_if_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_write_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_macros.svh new file mode 100644 index 000000000..21b9831e7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_write_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_write_out_if_configuration class. +// + `define fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_write_out_if_configuration_s; + + `define fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_if_configuration_s to_struct();\ + fuse_ctrl_prim_axi_write_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_write_out_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_write_out_if_configuration_s fuse_ctrl_prim_axi_write_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_write_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_write_out_if_transaction class. +// + `define fuse_ctrl_prim_axi_write_out_if_MONITOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } fuse_ctrl_prim_axi_write_out_if_monitor_s; + + `define fuse_ctrl_prim_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_if_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_write_out_if_monitor_struct = \ + { \ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( fuse_ctrl_prim_axi_write_out_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_write_out_if_monitor_s fuse_ctrl_prim_axi_write_out_if_monitor_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = fuse_ctrl_prim_axi_write_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } fuse_ctrl_prim_axi_write_out_if_initiator_s; + + `define fuse_ctrl_prim_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_if_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_write_out_if_initiator_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( fuse_ctrl_prim_axi_write_out_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_write_out_if_initiator_s fuse_ctrl_prim_axi_write_out_if_initiator_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = fuse_ctrl_prim_axi_write_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } fuse_ctrl_prim_axi_write_out_if_responder_s; + + `define fuse_ctrl_prim_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_if_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_write_out_if_responder_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( fuse_ctrl_prim_axi_write_out_if_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_write_out_if_responder_s fuse_ctrl_prim_axi_write_out_if_responder_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = fuse_ctrl_prim_axi_write_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor.svh new file mode 100644 index 000000000..d8852fe9a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_write_out_if transactions observed by the +// fuse_ctrl_prim_axi_write_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_write_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_write_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_write_out_if_monitor_s fuse_ctrl_prim_axi_write_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_write_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor_bfm.sv new file mode 100644 index 000000000..2455bcc7b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_write_out_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_write_out_if monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_write_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_write_out_if_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_write_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_out_if_macros.svh" + + +interface fuse_ctrl_prim_axi_write_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_write_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_write_out_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_out_if_monitor_s fuse_ctrl_prim_axi_write_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_write_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_write_out_if_pkg::fuse_ctrl_prim_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_write_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_write_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_write_out_if_configuration_s fuse_ctrl_prim_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_write_out_if_monitor_s fuse_ctrl_prim_axi_write_out_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_write_out_if_monitor_struct.prim_awready + // // fuse_ctrl_prim_axi_write_out_if_monitor_struct.prim_wready + // // fuse_ctrl_prim_axi_write_out_if_monitor_struct.prim_bresp + // // fuse_ctrl_prim_axi_write_out_if_monitor_struct.prim_bid + // // fuse_ctrl_prim_axi_write_out_if_monitor_struct.prim_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_write_out_if_monitor_struct.xyz = awready_i; // + // fuse_ctrl_prim_axi_write_out_if_monitor_struct.xyz = wready_i; // + // fuse_ctrl_prim_axi_write_out_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_out_if_monitor_struct.xyz = bid_i; // + // fuse_ctrl_prim_axi_write_out_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_random_sequence.svh new file mode 100644 index 000000000..55946e4ad --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_write_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_write_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_write_out_if_random_sequence::body()-fuse_ctrl_prim_axi_write_out_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_write_out_if_driver_bfm via the sequencer and fuse_ctrl_prim_axi_write_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_write_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_responder_sequence.svh new file mode 100644 index 000000000..fa31c283d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_write_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_sequence_base.svh new file mode 100644 index 000000000..aa53c7213 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_out_if_transaction_req_t; + fuse_ctrl_prim_axi_write_out_if_transaction_req_t req; + typedef fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_out_if_transaction_rsp_t; + fuse_ctrl_prim_axi_write_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_write_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_write_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction.svh new file mode 100644 index 000000000..c4bc6fa5c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_write_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_awready ; + logic prim_wready ; + axi_pkg::axi_burst_e prim_bresp ; + logic prim_bid ; + logic prim_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_write_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_write_out_if_monitor and fuse_ctrl_prim_axi_write_out_if_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_out_if_monitor_s fuse_ctrl_prim_axi_write_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_out_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_if_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_out_if_driver and fuse_ctrl_prim_axi_write_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_out_if_initiator_s fuse_ctrl_prim_axi_write_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_out_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_if_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_write_out_if_driver and fuse_ctrl_prim_axi_write_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_out_if_responder_s fuse_ctrl_prim_axi_write_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_out_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_if_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_if_macros.svh + `fuse_ctrl_prim_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awready:0x%x prim_wready:0x%x prim_bresp:0x%x prim_bid:0x%x prim_bvalid:0x%x ",prim_awready,prim_wready,prim_bresp,prim_bid,prim_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_awready == RHS.prim_awready) + &&(this.prim_wready == RHS.prim_wready) + &&(this.prim_bresp == RHS.prim_bresp) + &&(this.prim_bid == RHS.prim_bid) + &&(this.prim_bvalid == RHS.prim_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awready = RHS.prim_awready; + this.prim_wready = RHS.prim_wready; + this.prim_bresp = RHS.prim_bresp; + this.prim_bid = RHS.prim_bid; + this.prim_bvalid = RHS.prim_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_write_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awready,"prim_awready"); + $add_attribute(transaction_view_h,prim_wready,"prim_wready"); + $add_attribute(transaction_view_h,prim_bresp,"prim_bresp"); + $add_attribute(transaction_view_h,prim_bid,"prim_bid"); + $add_attribute(transaction_view_h,prim_bvalid,"prim_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction_coverage.svh new file mode 100644 index 000000000..2459f7b3c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_write_out_if transaction information using +// a covergroup named fuse_ctrl_prim_axi_write_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_write_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awready: coverpoint coverage_trans.prim_awready; + prim_wready: coverpoint coverage_trans.prim_wready; + prim_bresp: coverpoint coverage_trans.prim_bresp; + prim_bid: coverpoint coverage_trans.prim_bid; + prim_bvalid: coverpoint coverage_trans.prim_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_write_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_write_out_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_write_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/src/fuse_ctrl_prim_axi_write_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/yaml/fuse_ctrl_prim_axi_write_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/yaml/fuse_ctrl_prim_axi_write_out_if_interface.yaml new file mode 100644 index 000000000..0c0ce4466 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_if_pkg/yaml/fuse_ctrl_prim_axi_write_out_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_write_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.project new file mode 100644 index 000000000..3e0bf6c6b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_prim_axi_write_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.svproject new file mode 100644 index 000000000..376273afc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/Makefile new file mode 100644 index 000000000..7bd75ac29 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_prim_axi_write_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_prim_axi_write_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hvl.f + +fuse_ctrl_prim_axi_write_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hdl.f + +fuse_ctrl_prim_axi_write_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_xrtl.f + +COMP_fuse_ctrl_prim_axi_write_out_PKG_TGT_0 = q_comp_fuse_ctrl_prim_axi_write_out_pkg +COMP_fuse_ctrl_prim_axi_write_out_PKG_TGT_1 = v_comp_fuse_ctrl_prim_axi_write_out_pkg +COMP_fuse_ctrl_prim_axi_write_out_PKG_TGT = $(COMP_fuse_ctrl_prim_axi_write_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_prim_axi_write_out_pkg: $(COMP_fuse_ctrl_prim_axi_write_out_PKG_TGT) + +q_comp_fuse_ctrl_prim_axi_write_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_PKG_XRTL) + +v_comp_fuse_ctrl_prim_axi_write_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_prim_axi_write_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_prim_axi_write_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_prim_axi_write_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_prim_axi_write_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_out_pkg += -I$(fuse_ctrl_prim_axi_write_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_out_pkg += $(fuse_ctrl_prim_axi_write_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_prim_axi_write_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_prim_axi_write_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_prim_axi_write_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_prim_axi_write_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/compile.do new file mode 100644 index 000000000..2728571fe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_prim_axi_write_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out.compile new file mode 100644 index 000000000..fa21f0f3e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_prim_axi_write_out_hvl.compile + - fuse_ctrl_prim_axi_write_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_bfm.vinfo new file mode 100644 index 000000000..708c584b5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_prim_axi_write_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_prim_axi_write_out_if.sv +src/fuse_ctrl_prim_axi_write_out_driver_bfm.sv +src/fuse_ctrl_prim_axi_write_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_common.compile new file mode 100644 index 000000000..ba5ad3565 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_prim_axi_write_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hdl.f new file mode 100644 index 000000000..6b9dd5f56 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hvl.f new file mode 100644 index 000000000..6aea29704 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_xrtl.f new file mode 100644 index 000000000..3c6293173 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hdl.compile new file mode 100644 index 000000000..1a738c19e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_prim_axi_write_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_prim_axi_write_out_if.sv + - src/fuse_ctrl_prim_axi_write_out_monitor_bfm.sv + - src/fuse_ctrl_prim_axi_write_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hvl.compile new file mode 100644 index 000000000..894eaaf2f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_prim_axi_write_out_common.compile +incdir: + - . +src: + - fuse_ctrl_prim_axi_write_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.sv new file mode 100644 index 000000000..50f57ffb2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_prim_axi_write_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_prim_axi_write_out_macros.svh" + + export fuse_ctrl_prim_axi_write_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_prim_axi_write_out_typedefs.svh" + `include "src/fuse_ctrl_prim_axi_write_out_transaction.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_configuration.svh" + `include "src/fuse_ctrl_prim_axi_write_out_driver.svh" + `include "src/fuse_ctrl_prim_axi_write_out_monitor.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_transaction_coverage.svh" + `include "src/fuse_ctrl_prim_axi_write_out_sequence_base.svh" + `include "src/fuse_ctrl_prim_axi_write_out_random_sequence.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_responder_sequence.svh" + `include "src/fuse_ctrl_prim_axi_write_out2reg_adapter.svh" + + `include "src/fuse_ctrl_prim_axi_write_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.vinfo new file mode 100644 index 000000000..790347eb1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_prim_axi_write_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_prim_axi_write_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.sv new file mode 100644 index 000000000..bd64b4efe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_prim_axi_write_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_prim_axi_write_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_prim_axi_write_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.vinfo new file mode 100644 index 000000000..dfc2d8e5c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_prim_axi_write_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_sve.F new file mode 100644 index 000000000..9a71aafbc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/fuse_ctrl_prim_axi_write_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out2reg_adapter.svh new file mode 100644 index 000000000..34b91afc0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_prim_axi_write_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_prim_axi_write_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_prim_axi_write_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_agent.svh new file mode 100644 index 000000000..0622fae7b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_prim_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_prim_axi_write_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_prim_axi_write_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_prim_axi_write_out_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_configuration.svh new file mode 100644 index 000000000..2440f4015 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_prim_axi_write_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_prim_axi_write_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_prim_axi_write_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_CONFIGURATION_STRUCT + fuse_ctrl_prim_axi_write_out_configuration_s fuse_ctrl_prim_axi_write_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_prim_axi_write_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_configuration_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_prim_axi_write_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_prim_axi_write_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_prim_axi_write_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_prim_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_prim_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_prim_axi_write_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_prim_axi_write_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver.svh new file mode 100644 index 000000000..97995a3fe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_prim_axi_write_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_prim_axi_write_out_driver and fuse_ctrl_prim_axi_write_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_prim_axi_write_out_driver_bfm. +`fuse_ctrl_prim_axi_write_out_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_out_initiator_s fuse_ctrl_prim_axi_write_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_prim_axi_write_out_driver and fuse_ctrl_prim_axi_write_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_prim_axi_write_out_driver_bfm. +`fuse_ctrl_prim_axi_write_out_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_out_responder_s fuse_ctrl_prim_axi_write_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_prim_axi_write_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_prim_axi_write_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_prim_axi_write_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_prim_axi_write_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver_bfm.sv new file mode 100644 index 000000000..7e5c72db7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_prim_axi_write_out signal driving. It is +// accessed by the uvm fuse_ctrl_prim_axi_write_out driver through a virtual interface +// handle in the fuse_ctrl_prim_axi_write_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_prim_axi_write_out_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_prim_axi_write_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_out_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_out_macros.svh" + +interface fuse_ctrl_prim_axi_write_out_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_prim_axi_write_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_prim_axi_write_out_pkg::fuse_ctrl_prim_axi_write_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_prim_axi_write_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_prim_axi_write_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_prim_axi_write_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_out_driver and fuse_ctrl_prim_axi_write_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_out_driver_bfm. + `fuse_ctrl_prim_axi_write_out_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_prim_axi_write_out_driver and fuse_ctrl_prim_axi_write_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_out_driver_bfm. + `fuse_ctrl_prim_axi_write_out_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_prim_axi_write_out_configuration_s fuse_ctrl_prim_axi_write_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_prim_axi_write_out_initiator_s fuse_ctrl_prim_axi_write_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_prim_axi_write_out_responder_s fuse_ctrl_prim_axi_write_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_prim_axi_write_out_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Members within the fuse_ctrl_prim_axi_write_out_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + initiator_struct = fuse_ctrl_prim_axi_write_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_prim_axi_write_out_responder_struct.xyz = awready_i; // + // fuse_ctrl_prim_axi_write_out_responder_struct.xyz = wready_i; // + // fuse_ctrl_prim_axi_write_out_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_out_responder_struct.xyz = bid_i; // + // fuse_ctrl_prim_axi_write_out_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_prim_axi_write_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_prim_axi_write_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_prim_axi_write_out_initiator_s fuse_ctrl_prim_axi_write_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_prim_axi_write_out_responder_s fuse_ctrl_prim_axi_write_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_prim_axi_write_out_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Variables within the fuse_ctrl_prim_axi_write_out_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= fuse_ctrl_prim_axi_write_out_initiator_struct.xyz; // + // wready_o <= fuse_ctrl_prim_axi_write_out_initiator_struct.xyz; // + // bresp_o <= fuse_ctrl_prim_axi_write_out_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= fuse_ctrl_prim_axi_write_out_initiator_struct.xyz; // + // bvalid_o <= fuse_ctrl_prim_axi_write_out_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_prim_axi_write_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_prim_axi_write_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_if.sv new file mode 100644 index 000000000..66c2c91b7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_prim_axi_write_out interface signals. +// It is instantiated once per fuse_ctrl_prim_axi_write_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_prim_axi_write_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_prim_axi_write_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_bus.awready), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_bus.wready), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_bus.bresp), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_bus.bid), // Agent input +// .dut_signal_port(fuse_ctrl_prim_axi_write_out_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_out_pkg_hdl::*; + +interface fuse_ctrl_prim_axi_write_out_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_macros.svh new file mode 100644 index 000000000..28bfd68ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_prim_axi_write_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_prim_axi_write_out_configuration class. +// + `define fuse_ctrl_prim_axi_write_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_prim_axi_write_out_configuration_s; + + `define fuse_ctrl_prim_axi_write_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_configuration_s to_struct();\ + fuse_ctrl_prim_axi_write_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_prim_axi_write_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_prim_axi_write_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_prim_axi_write_out_configuration_s fuse_ctrl_prim_axi_write_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_prim_axi_write_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_prim_axi_write_out_transaction class. +// + `define fuse_ctrl_prim_axi_write_out_MONITOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } fuse_ctrl_prim_axi_write_out_monitor_s; + + `define fuse_ctrl_prim_axi_write_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_monitor_s to_monitor_struct();\ + fuse_ctrl_prim_axi_write_out_monitor_struct = \ + { \ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( fuse_ctrl_prim_axi_write_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_prim_axi_write_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_prim_axi_write_out_monitor_s fuse_ctrl_prim_axi_write_out_monitor_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = fuse_ctrl_prim_axi_write_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_prim_axi_write_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_out_INITIATOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } fuse_ctrl_prim_axi_write_out_initiator_s; + + `define fuse_ctrl_prim_axi_write_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_initiator_s to_initiator_struct();\ + fuse_ctrl_prim_axi_write_out_initiator_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( fuse_ctrl_prim_axi_write_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_prim_axi_write_out_initiator_s fuse_ctrl_prim_axi_write_out_initiator_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = fuse_ctrl_prim_axi_write_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_prim_axi_write_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_prim_axi_write_out_RESPONDER_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } fuse_ctrl_prim_axi_write_out_responder_s; + + `define fuse_ctrl_prim_axi_write_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_prim_axi_write_out_responder_s to_responder_struct();\ + fuse_ctrl_prim_axi_write_out_responder_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( fuse_ctrl_prim_axi_write_out_responder_struct);\ + endfunction + + `define fuse_ctrl_prim_axi_write_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_prim_axi_write_out_responder_s fuse_ctrl_prim_axi_write_out_responder_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = fuse_ctrl_prim_axi_write_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor.svh new file mode 100644 index 000000000..db0d6bb13 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_prim_axi_write_out transactions observed by the +// fuse_ctrl_prim_axi_write_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_prim_axi_write_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_prim_axi_write_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_prim_axi_write_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_prim_axi_write_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_prim_axi_write_out_monitor_s fuse_ctrl_prim_axi_write_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_prim_axi_write_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor_bfm.sv new file mode 100644 index 000000000..d8a55807b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_prim_axi_write_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_prim_axi_write_out monitor through a virtual +// interface handle in the fuse_ctrl_prim_axi_write_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_prim_axi_write_out_if. +// +// Input signals from the fuse_ctrl_prim_axi_write_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_prim_axi_write_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_prim_axi_write_out_pkg_hdl::*; +`include "src/fuse_ctrl_prim_axi_write_out_macros.svh" + + +interface fuse_ctrl_prim_axi_write_out_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_prim_axi_write_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_prim_axi_write_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_prim_axi_write_out_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_out_monitor_s fuse_ctrl_prim_axi_write_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_prim_axi_write_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_prim_axi_write_out_pkg::fuse_ctrl_prim_axi_write_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_prim_axi_write_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_prim_axi_write_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_prim_axi_write_out_configuration_s fuse_ctrl_prim_axi_write_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_prim_axi_write_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_prim_axi_write_out_monitor_s fuse_ctrl_prim_axi_write_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_prim_axi_write_out_monitor_struct.prim_awready + // // fuse_ctrl_prim_axi_write_out_monitor_struct.prim_wready + // // fuse_ctrl_prim_axi_write_out_monitor_struct.prim_bresp + // // fuse_ctrl_prim_axi_write_out_monitor_struct.prim_bid + // // fuse_ctrl_prim_axi_write_out_monitor_struct.prim_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_prim_axi_write_out_monitor_struct.xyz = awready_i; // + // fuse_ctrl_prim_axi_write_out_monitor_struct.xyz = wready_i; // + // fuse_ctrl_prim_axi_write_out_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_prim_axi_write_out_monitor_struct.xyz = bid_i; // + // fuse_ctrl_prim_axi_write_out_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_random_sequence.svh new file mode 100644 index 000000000..c5c49199d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_prim_axi_write_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_prim_axi_write_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_prim_axi_write_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_prim_axi_write_out_random_sequence::body()-fuse_ctrl_prim_axi_write_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_prim_axi_write_out_driver_bfm via the sequencer and fuse_ctrl_prim_axi_write_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_prim_axi_write_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_responder_sequence.svh new file mode 100644 index 000000000..f129205e3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_prim_axi_write_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_prim_axi_write_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_prim_axi_write_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_sequence_base.svh new file mode 100644 index 000000000..28cfc04d0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_out_transaction_req_t; + fuse_ctrl_prim_axi_write_out_transaction_req_t req; + typedef fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_prim_axi_write_out_transaction_rsp_t; + fuse_ctrl_prim_axi_write_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_prim_axi_write_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_prim_axi_write_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction.svh new file mode 100644 index 000000000..fd93a892d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_prim_axi_write_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_prim_axi_write_out_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_awready ; + logic prim_wready ; + axi_pkg::axi_burst_e prim_bresp ; + logic prim_bid ; + logic prim_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_prim_axi_write_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_prim_axi_write_out_monitor and fuse_ctrl_prim_axi_write_out_monitor_bfm + // This struct is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_MONITOR_STRUCT + fuse_ctrl_prim_axi_write_out_monitor_s fuse_ctrl_prim_axi_write_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_monitor_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_prim_axi_write_out_driver and fuse_ctrl_prim_axi_write_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_prim_axi_write_out_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_INITIATOR_STRUCT + fuse_ctrl_prim_axi_write_out_initiator_s fuse_ctrl_prim_axi_write_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_initiator_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_prim_axi_write_out_driver and fuse_ctrl_prim_axi_write_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_prim_axi_write_out_driver_bfm. + // This struct is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_RESPONDER_STRUCT + fuse_ctrl_prim_axi_write_out_responder_s fuse_ctrl_prim_axi_write_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_prim_axi_write_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_prim_axi_write_out_responder_struct. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_prim_axi_write_out_macros.svh + `fuse_ctrl_prim_axi_write_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awready:0x%x prim_wready:0x%x prim_bresp:0x%x prim_bid:0x%x prim_bvalid:0x%x ",prim_awready,prim_wready,prim_bresp,prim_bid,prim_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_awready == RHS.prim_awready) + &&(this.prim_wready == RHS.prim_wready) + &&(this.prim_bresp == RHS.prim_bresp) + &&(this.prim_bid == RHS.prim_bid) + &&(this.prim_bvalid == RHS.prim_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awready = RHS.prim_awready; + this.prim_wready = RHS.prim_wready; + this.prim_bresp = RHS.prim_bresp; + this.prim_bid = RHS.prim_bid; + this.prim_bvalid = RHS.prim_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_prim_axi_write_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awready,"prim_awready"); + $add_attribute(transaction_view_h,prim_wready,"prim_wready"); + $add_attribute(transaction_view_h,prim_bresp,"prim_bresp"); + $add_attribute(transaction_view_h,prim_bid,"prim_bid"); + $add_attribute(transaction_view_h,prim_bvalid,"prim_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction_coverage.svh new file mode 100644 index 000000000..8a37ca501 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_prim_axi_write_out transaction information using +// a covergroup named fuse_ctrl_prim_axi_write_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_prim_axi_write_out_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_prim_axi_write_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_prim_axi_write_out_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_prim_axi_write_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awready: coverpoint coverage_trans.prim_awready; + prim_wready: coverpoint coverage_trans.prim_wready; + prim_bresp: coverpoint coverage_trans.prim_bresp; + prim_bid: coverpoint coverage_trans.prim_bid; + prim_bvalid: coverpoint coverage_trans.prim_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_prim_axi_write_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_prim_axi_write_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_prim_axi_write_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_prim_axi_write_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/src/fuse_ctrl_prim_axi_write_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/yaml/fuse_ctrl_prim_axi_write_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/yaml/fuse_ctrl_prim_axi_write_out_interface.yaml new file mode 100644 index 000000000..d0566d0e7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_prim_axi_write_out_pkg/yaml/fuse_ctrl_prim_axi_write_out_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + fuse_ctrl_prim_axi_write_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/.project new file mode 100644 index 000000000..2ff8b5e37 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_pwr_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/.svproject new file mode 100644 index 000000000..240269e95 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/Makefile new file mode 100644 index 000000000..abc4c57ca --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_pwr_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_pwr_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hvl.f + +fuse_ctrl_pwr_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hdl.f + +fuse_ctrl_pwr_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_xrtl.f + +COMP_fuse_ctrl_pwr_in_PKG_TGT_0 = q_comp_fuse_ctrl_pwr_in_pkg +COMP_fuse_ctrl_pwr_in_PKG_TGT_1 = v_comp_fuse_ctrl_pwr_in_pkg +COMP_fuse_ctrl_pwr_in_PKG_TGT = $(COMP_fuse_ctrl_pwr_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_pwr_in_pkg: $(COMP_fuse_ctrl_pwr_in_PKG_TGT) + +q_comp_fuse_ctrl_pwr_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_pwr_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_pwr_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_pwr_in_PKG_XRTL) + +v_comp_fuse_ctrl_pwr_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_pwr_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_pwr_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_pwr_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_pwr_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_pwr_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_pwr_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_pwr_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_pwr_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_pwr_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_pwr_in_pkg += -I$(fuse_ctrl_pwr_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_pwr_in_pkg += $(fuse_ctrl_pwr_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_pwr_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_pwr_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_pwr_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_pwr_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_pwr_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_pwr_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/compile.do new file mode 100644 index 000000000..2d426564e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_pwr_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in.compile new file mode 100644 index 000000000..d752db08d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_pwr_in_hvl.compile + - fuse_ctrl_pwr_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_bfm.vinfo new file mode 100644 index 000000000..caae09a06 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_pwr_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_pwr_in_if.sv +src/fuse_ctrl_pwr_in_driver_bfm.sv +src/fuse_ctrl_pwr_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_common.compile new file mode 100644 index 000000000..a6831d02e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_pwr_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hdl.f new file mode 100644 index 000000000..5fc815f8a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hvl.f new file mode 100644 index 000000000..b62aefb0d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_xrtl.f new file mode 100644 index 000000000..0e6b1f94c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_hdl.compile new file mode 100644 index 000000000..99fb5f9a6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_pwr_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_pwr_in_if.sv + - src/fuse_ctrl_pwr_in_monitor_bfm.sv + - src/fuse_ctrl_pwr_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_hvl.compile new file mode 100644 index 000000000..2b577edca --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_pwr_in_common.compile +incdir: + - . +src: + - fuse_ctrl_pwr_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg.sv new file mode 100644 index 000000000..dc960d5f1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_pwr_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_pwr_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_pwr_in_macros.svh" + + export fuse_ctrl_pwr_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_pwr_in_typedefs.svh" + `include "src/fuse_ctrl_pwr_in_transaction.svh" + + `include "src/fuse_ctrl_pwr_in_configuration.svh" + `include "src/fuse_ctrl_pwr_in_driver.svh" + `include "src/fuse_ctrl_pwr_in_monitor.svh" + + `include "src/fuse_ctrl_pwr_in_transaction_coverage.svh" + `include "src/fuse_ctrl_pwr_in_sequence_base.svh" + `include "src/fuse_ctrl_pwr_in_random_sequence.svh" + + `include "src/fuse_ctrl_pwr_in_responder_sequence.svh" + `include "src/fuse_ctrl_pwr_in2reg_adapter.svh" + + `include "src/fuse_ctrl_pwr_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg.vinfo new file mode 100644 index 000000000..7f4e27c24 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_pwr_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_pwr_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_hdl.sv new file mode 100644 index 000000000..fe57a7f58 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_pwr_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_pwr_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_pwr_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_hdl.vinfo new file mode 100644 index 000000000..b74887324 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_pwr_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_sve.F new file mode 100644 index 000000000..5f60ac6b9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_pwr_in_pkg/fuse_ctrl_pwr_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in2reg_adapter.svh new file mode 100644 index 000000000..5ef2d62ce --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_pwr_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_in2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_pwr_in2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_pwr_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_pwr_in_transaction trans_h = fuse_ctrl_pwr_in_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_pwr_in_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_pwr_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_agent.svh new file mode 100644 index 000000000..b6fb954e4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_in_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_pwr_in_configuration ), + .DRIVER_T(fuse_ctrl_pwr_in_driver ), + .MONITOR_T(fuse_ctrl_pwr_in_monitor ), + .COVERAGE_T(fuse_ctrl_pwr_in_transaction_coverage ), + .TRANS_T(fuse_ctrl_pwr_in_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_pwr_in_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_configuration.svh new file mode 100644 index 000000000..09b18fec9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_pwr_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_in_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_pwr_in_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_pwr_in_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_pwr_in_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_pwr_in_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_pwr_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_CONFIGURATION_STRUCT + fuse_ctrl_pwr_in_configuration_s fuse_ctrl_pwr_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_pwr_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_pwr_in_configuration_struct. + // This function is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_pwr_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_pwr_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_pwr_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_pwr_in_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_pwr_in_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_pwr_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_pwr_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_pwr_in_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_driver.svh new file mode 100644 index 000000000..e115ef740 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_in_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_pwr_in_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_pwr_in_driver_bfm ), + .REQ(fuse_ctrl_pwr_in_transaction ), + .RSP(fuse_ctrl_pwr_in_transaction )); + + `uvm_component_utils( fuse_ctrl_pwr_in_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_pwr_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_pwr_in_driver and fuse_ctrl_pwr_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_pwr_in_driver_bfm. +`fuse_ctrl_pwr_in_INITIATOR_STRUCT + fuse_ctrl_pwr_in_initiator_s fuse_ctrl_pwr_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_pwr_in_driver and fuse_ctrl_pwr_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_pwr_in_driver_bfm. +`fuse_ctrl_pwr_in_RESPONDER_STRUCT + fuse_ctrl_pwr_in_responder_s fuse_ctrl_pwr_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_pwr_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_pwr_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_pwr_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_pwr_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_driver_bfm.sv new file mode 100644 index 000000000..34999f1bb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_driver_bfm.sv @@ -0,0 +1,294 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_pwr_in signal driving. It is +// accessed by the uvm fuse_ctrl_pwr_in driver through a virtual interface +// handle in the fuse_ctrl_pwr_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_pwr_in_if. +// +// Input signals from the fuse_ctrl_pwr_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_pwr_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_pwr_in_pkg_hdl::*; +`include "src/fuse_ctrl_pwr_in_macros.svh" + +interface fuse_ctrl_pwr_in_driver_bfm + (fuse_ctrl_pwr_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_pwr_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i_i; + reg [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i_o = 'bz; + + // Bi-directional signals + tri otp_ext_voltage_h_io_i; + reg otp_ext_voltage_h_io_o = 'bz; + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.pwr_otp_i = (initiator_responder == INITIATOR) ? pwr_otp_i_o : 'bz; + assign pwr_otp_i_i = bus.pwr_otp_i; + assign bus.otp_ext_voltage_h_io = otp_ext_voltage_h_io_o; + + // Proxy handle to UVM driver + fuse_ctrl_pwr_in_pkg::fuse_ctrl_pwr_in_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_pwr_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_pwr_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_pwr_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_pwr_in_driver and fuse_ctrl_pwr_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_pwr_in_driver_bfm. + `fuse_ctrl_pwr_in_INITIATOR_STRUCT + fuse_ctrl_pwr_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_pwr_in_driver and fuse_ctrl_pwr_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_pwr_in_driver_bfm. + `fuse_ctrl_pwr_in_RESPONDER_STRUCT + fuse_ctrl_pwr_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + pwr_otp_i_o <= 'bz; + // Bi-directional signals + otp_ext_voltage_h_io_o <= 'bz; + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_pwr_in_configuration_s fuse_ctrl_pwr_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_pwr_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_pwr_in_initiator_s fuse_ctrl_pwr_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_pwr_in_responder_s fuse_ctrl_pwr_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_pwr_in_initiator_struct: + // bit assert_otp_init ; + // Members within the fuse_ctrl_pwr_in_responder_struct: + // bit assert_otp_init ; + initiator_struct = fuse_ctrl_pwr_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // fuse_ctrl_pwr_in_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // pwr_otp_i_o <= fuse_ctrl_pwr_in_initiator_struct.xyz; // [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] + // Initiator inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_pwr_in_initiator_struct.xyz; // + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_pwr_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_pwr_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_pwr_in_initiator_s fuse_ctrl_pwr_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_pwr_in_responder_s fuse_ctrl_pwr_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_pwr_in_initiator_struct: + // bit assert_otp_init ; + // Variables within the fuse_ctrl_pwr_in_responder_struct: + // bit assert_otp_init ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_pwr_in_responder_struct.xyz = pwr_otp_i_i; // [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] + // Responder inout signals + // fuse_ctrl_pwr_in_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_pwr_in_initiator_struct.xyz; // + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_pwr_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_pwr_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_if.sv new file mode 100644 index 000000000..efb6acfee --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_if.sv @@ -0,0 +1,83 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_pwr_in interface signals. +// It is instantiated once per fuse_ctrl_pwr_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_pwr_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_pwr_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_pwr_in_bus.pwr_otp_i), // Agent output +// .dut_signal_port(fuse_ctrl_pwr_in_bus.otp_ext_voltage_h_io), // Agent inout + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_pwr_in_pkg_hdl::*; + +interface fuse_ctrl_pwr_in_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i, + inout tri otp_ext_voltage_h_io + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input pwr_otp_i, + input otp_ext_voltage_h_io + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output pwr_otp_i, + inout otp_ext_voltage_h_io + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input pwr_otp_i, + inout otp_ext_voltage_h_io + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_macros.svh new file mode 100644 index 000000000..64d3c0c9a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_pwr_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_pwr_in_configuration class. +// + `define fuse_ctrl_pwr_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_pwr_in_configuration_s; + + `define fuse_ctrl_pwr_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_pwr_in_configuration_s to_struct();\ + fuse_ctrl_pwr_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_pwr_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_pwr_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_pwr_in_configuration_s fuse_ctrl_pwr_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_pwr_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_pwr_in_transaction class. +// + `define fuse_ctrl_pwr_in_MONITOR_STRUCT typedef struct packed { \ + bit assert_otp_init ; \ + } fuse_ctrl_pwr_in_monitor_s; + + `define fuse_ctrl_pwr_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_pwr_in_monitor_s to_monitor_struct();\ + fuse_ctrl_pwr_in_monitor_struct = \ + { \ + this.assert_otp_init \ + };\ + return ( fuse_ctrl_pwr_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_pwr_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_pwr_in_monitor_s fuse_ctrl_pwr_in_monitor_struct);\ + {\ + this.assert_otp_init \ + } = fuse_ctrl_pwr_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_pwr_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_pwr_in_INITIATOR_STRUCT typedef struct packed { \ + bit assert_otp_init ; \ + } fuse_ctrl_pwr_in_initiator_s; + + `define fuse_ctrl_pwr_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_pwr_in_initiator_s to_initiator_struct();\ + fuse_ctrl_pwr_in_initiator_struct = \ + {\ + this.assert_otp_init \ + };\ + return ( fuse_ctrl_pwr_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_pwr_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_pwr_in_initiator_s fuse_ctrl_pwr_in_initiator_struct);\ + {\ + this.assert_otp_init \ + } = fuse_ctrl_pwr_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_pwr_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_pwr_in_RESPONDER_STRUCT typedef struct packed { \ + bit assert_otp_init ; \ + } fuse_ctrl_pwr_in_responder_s; + + `define fuse_ctrl_pwr_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_pwr_in_responder_s to_responder_struct();\ + fuse_ctrl_pwr_in_responder_struct = \ + {\ + this.assert_otp_init \ + };\ + return ( fuse_ctrl_pwr_in_responder_struct);\ + endfunction + + `define fuse_ctrl_pwr_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_pwr_in_responder_s fuse_ctrl_pwr_in_responder_struct);\ + {\ + this.assert_otp_init \ + } = fuse_ctrl_pwr_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_monitor.svh new file mode 100644 index 000000000..8966b7e75 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_pwr_in transactions observed by the +// fuse_ctrl_pwr_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_in_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_pwr_in_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_pwr_in_monitor_bfm ), + .TRANS_T(fuse_ctrl_pwr_in_transaction )); + + `uvm_component_utils( fuse_ctrl_pwr_in_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_pwr_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_pwr_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_pwr_in_monitor_s fuse_ctrl_pwr_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_pwr_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_monitor_bfm.sv new file mode 100644 index 000000000..a2373ce44 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_monitor_bfm.sv @@ -0,0 +1,191 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_pwr_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_pwr_in monitor through a virtual +// interface handle in the fuse_ctrl_pwr_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_pwr_in_if. +// +// Input signals from the fuse_ctrl_pwr_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_pwr_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_pwr_in_pkg_hdl::*; +`include "src/fuse_ctrl_pwr_in_macros.svh" + + +interface fuse_ctrl_pwr_in_monitor_bfm + ( fuse_ctrl_pwr_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_pwr_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_pwr_in_MONITOR_STRUCT + fuse_ctrl_pwr_in_monitor_s fuse_ctrl_pwr_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_pwr_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i_i; + tri otp_ext_voltage_h_io_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign pwr_otp_i_i = bus.pwr_otp_i; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + + // Proxy handle to UVM monitor + fuse_ctrl_pwr_in_pkg::fuse_ctrl_pwr_in_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_pwr_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_pwr_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_pwr_in_configuration_s fuse_ctrl_pwr_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_pwr_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_pwr_in_monitor_s fuse_ctrl_pwr_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_pwr_in_monitor_struct.assert_otp_init + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_pwr_in_monitor_struct.xyz = pwr_otp_i_i; // [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] + // fuse_ctrl_pwr_in_monitor_struct.xyz = otp_ext_voltage_h_io_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_random_sequence.svh new file mode 100644 index 000000000..bf58cb0ee --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_pwr_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_pwr_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_in_random_sequence + extends fuse_ctrl_pwr_in_sequence_base ; + + `uvm_object_utils( fuse_ctrl_pwr_in_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_pwr_in_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_pwr_in_random_sequence::body()-fuse_ctrl_pwr_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_pwr_in_driver_bfm via the sequencer and fuse_ctrl_pwr_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_pwr_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_responder_sequence.svh new file mode 100644 index 000000000..289f878ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_in_responder_sequence + extends fuse_ctrl_pwr_in_sequence_base ; + + `uvm_object_utils( fuse_ctrl_pwr_in_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_pwr_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_pwr_in_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_sequence_base.svh new file mode 100644 index 000000000..7f03e487e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_in_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_pwr_in_transaction ), + .RSP(fuse_ctrl_pwr_in_transaction )); + + `uvm_object_utils( fuse_ctrl_pwr_in_sequence_base ) + + // variables + typedef fuse_ctrl_pwr_in_transaction fuse_ctrl_pwr_in_transaction_req_t; + fuse_ctrl_pwr_in_transaction_req_t req; + typedef fuse_ctrl_pwr_in_transaction fuse_ctrl_pwr_in_transaction_rsp_t; + fuse_ctrl_pwr_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_pwr_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_pwr_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_transaction.svh new file mode 100644 index 000000000..371c51131 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_transaction.svh @@ -0,0 +1,195 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_pwr_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_in_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_pwr_in_transaction ) + + bit assert_otp_init ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_pwr_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_pwr_in_monitor and fuse_ctrl_pwr_in_monitor_bfm + // This struct is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_MONITOR_STRUCT + fuse_ctrl_pwr_in_monitor_s fuse_ctrl_pwr_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_pwr_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_pwr_in_monitor_struct. + // This function is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_pwr_in_driver and fuse_ctrl_pwr_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_pwr_in_driver_bfm. + // This struct is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_INITIATOR_STRUCT + fuse_ctrl_pwr_in_initiator_s fuse_ctrl_pwr_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_pwr_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_pwr_in_initiator_struct. + // This function is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_pwr_in_driver and fuse_ctrl_pwr_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_pwr_in_driver_bfm. + // This struct is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_RESPONDER_STRUCT + fuse_ctrl_pwr_in_responder_s fuse_ctrl_pwr_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_pwr_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_pwr_in_responder_struct. + // This function is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_pwr_in_macros.svh + `fuse_ctrl_pwr_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("assert_otp_init:0x%x ",assert_otp_init); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_pwr_in_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_pwr_in_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.assert_otp_init = RHS.assert_otp_init; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_pwr_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,assert_otp_init,"assert_otp_init"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_transaction_coverage.svh new file mode 100644 index 000000000..4bbaa5e7b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_transaction_coverage.svh @@ -0,0 +1,84 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_pwr_in transaction information using +// a covergroup named fuse_ctrl_pwr_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_in_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_pwr_in_transaction )); + + `uvm_component_utils( fuse_ctrl_pwr_in_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_pwr_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + assert_otp_init: coverpoint coverage_trans.assert_otp_init; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_pwr_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_pwr_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_pwr_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_pwr_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/src/fuse_ctrl_pwr_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/yaml/fuse_ctrl_pwr_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/yaml/fuse_ctrl_pwr_in_interface.yaml new file mode 100644 index 000000000..ec63253f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_in_pkg/yaml/fuse_ctrl_pwr_in_interface.yaml @@ -0,0 +1,33 @@ +uvmf: + interfaces: + fuse_ctrl_pwr_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: output + name: pwr_otp_i + reset_value: '''bz' + width: '[''$bits(pwrmgr_pkg::pwr_otp_req_t)'']' + - dir: inout + name: otp_ext_voltage_h_io + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: assert_otp_init + type: bit + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/.project new file mode 100644 index 000000000..a43a448fe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_pwr_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/.svproject new file mode 100644 index 000000000..20bf29405 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/Makefile new file mode 100644 index 000000000..412c5be02 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_pwr_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_pwr_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hvl.f + +fuse_ctrl_pwr_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hdl.f + +fuse_ctrl_pwr_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_xrtl.f + +COMP_fuse_ctrl_pwr_out_PKG_TGT_0 = q_comp_fuse_ctrl_pwr_out_pkg +COMP_fuse_ctrl_pwr_out_PKG_TGT_1 = v_comp_fuse_ctrl_pwr_out_pkg +COMP_fuse_ctrl_pwr_out_PKG_TGT = $(COMP_fuse_ctrl_pwr_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_pwr_out_pkg: $(COMP_fuse_ctrl_pwr_out_PKG_TGT) + +q_comp_fuse_ctrl_pwr_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_pwr_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_pwr_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_pwr_out_PKG_XRTL) + +v_comp_fuse_ctrl_pwr_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_pwr_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_pwr_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_pwr_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_pwr_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_pwr_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_pwr_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_pwr_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_pwr_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_pwr_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_pwr_out_pkg += -I$(fuse_ctrl_pwr_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_pwr_out_pkg += $(fuse_ctrl_pwr_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_pwr_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_pwr_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_pwr_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_pwr_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_pwr_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_pwr_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/compile.do new file mode 100644 index 000000000..da19a9005 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_pwr_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out.compile new file mode 100644 index 000000000..3739adcd8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_pwr_out_hvl.compile + - fuse_ctrl_pwr_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_bfm.vinfo new file mode 100644 index 000000000..40b8da1de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_pwr_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_pwr_out_if.sv +src/fuse_ctrl_pwr_out_driver_bfm.sv +src/fuse_ctrl_pwr_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_common.compile new file mode 100644 index 000000000..13236612e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_pwr_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hdl.f new file mode 100644 index 000000000..d6ce3f2a3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hvl.f new file mode 100644 index 000000000..8545586ce --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_xrtl.f new file mode 100644 index 000000000..eddc5dda6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_hdl.compile new file mode 100644 index 000000000..7cca6d2df --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_pwr_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_pwr_out_if.sv + - src/fuse_ctrl_pwr_out_monitor_bfm.sv + - src/fuse_ctrl_pwr_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_hvl.compile new file mode 100644 index 000000000..daaff80fa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_pwr_out_common.compile +incdir: + - . +src: + - fuse_ctrl_pwr_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg.sv new file mode 100644 index 000000000..632f46c8f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_pwr_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_pwr_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_pwr_out_macros.svh" + + export fuse_ctrl_pwr_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_pwr_out_typedefs.svh" + `include "src/fuse_ctrl_pwr_out_transaction.svh" + + `include "src/fuse_ctrl_pwr_out_configuration.svh" + `include "src/fuse_ctrl_pwr_out_driver.svh" + `include "src/fuse_ctrl_pwr_out_monitor.svh" + + `include "src/fuse_ctrl_pwr_out_transaction_coverage.svh" + `include "src/fuse_ctrl_pwr_out_sequence_base.svh" + `include "src/fuse_ctrl_pwr_out_random_sequence.svh" + + `include "src/fuse_ctrl_pwr_out_responder_sequence.svh" + `include "src/fuse_ctrl_pwr_out2reg_adapter.svh" + + `include "src/fuse_ctrl_pwr_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg.vinfo new file mode 100644 index 000000000..fd4dfbdf9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_pwr_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_pwr_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_hdl.sv new file mode 100644 index 000000000..9d8ba22cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_pwr_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_pwr_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_pwr_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_hdl.vinfo new file mode 100644 index 000000000..6be7b78a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_pwr_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_sve.F new file mode 100644 index 000000000..2ca94bc40 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_pwr_out_pkg/fuse_ctrl_pwr_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out2reg_adapter.svh new file mode 100644 index 000000000..4dc675a52 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_pwr_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_out2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_pwr_out2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_pwr_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_pwr_out_transaction trans_h = fuse_ctrl_pwr_out_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_pwr_out_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_pwr_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_agent.svh new file mode 100644 index 000000000..a1f6f3921 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_out_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_pwr_out_configuration ), + .DRIVER_T(fuse_ctrl_pwr_out_driver ), + .MONITOR_T(fuse_ctrl_pwr_out_monitor ), + .COVERAGE_T(fuse_ctrl_pwr_out_transaction_coverage ), + .TRANS_T(fuse_ctrl_pwr_out_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_pwr_out_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_configuration.svh new file mode 100644 index 000000000..669971d36 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_pwr_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_out_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_pwr_out_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_pwr_out_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_pwr_out_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_pwr_out_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_pwr_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_CONFIGURATION_STRUCT + fuse_ctrl_pwr_out_configuration_s fuse_ctrl_pwr_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_pwr_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_pwr_out_configuration_struct. + // This function is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_pwr_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_pwr_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_pwr_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_pwr_out_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_pwr_out_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_pwr_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_pwr_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_pwr_out_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_driver.svh new file mode 100644 index 000000000..dd7809272 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_out_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_pwr_out_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_pwr_out_driver_bfm ), + .REQ(fuse_ctrl_pwr_out_transaction ), + .RSP(fuse_ctrl_pwr_out_transaction )); + + `uvm_component_utils( fuse_ctrl_pwr_out_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_pwr_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_pwr_out_driver and fuse_ctrl_pwr_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_pwr_out_driver_bfm. +`fuse_ctrl_pwr_out_INITIATOR_STRUCT + fuse_ctrl_pwr_out_initiator_s fuse_ctrl_pwr_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_pwr_out_driver and fuse_ctrl_pwr_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_pwr_out_driver_bfm. +`fuse_ctrl_pwr_out_RESPONDER_STRUCT + fuse_ctrl_pwr_out_responder_s fuse_ctrl_pwr_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_pwr_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_pwr_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_pwr_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_pwr_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_driver_bfm.sv new file mode 100644 index 000000000..973336690 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_driver_bfm.sv @@ -0,0 +1,294 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_pwr_out signal driving. It is +// accessed by the uvm fuse_ctrl_pwr_out driver through a virtual interface +// handle in the fuse_ctrl_pwr_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_pwr_out_if. +// +// Input signals from the fuse_ctrl_pwr_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_pwr_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_pwr_out_pkg_hdl::*; +`include "src/fuse_ctrl_pwr_out_macros.svh" + +interface fuse_ctrl_pwr_out_driver_bfm + (fuse_ctrl_pwr_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_pwr_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_i; + reg [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + tri otp_ext_voltage_h_io_i; + reg otp_ext_voltage_h_io_o = 'bz; + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign pwr_otp_o_i = bus.pwr_otp_o; + assign bus.pwr_otp_o = (initiator_responder == RESPONDER) ? pwr_otp_o_o : 'bz; + + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.otp_ext_voltage_h_io = otp_ext_voltage_h_io_o; + + // Proxy handle to UVM driver + fuse_ctrl_pwr_out_pkg::fuse_ctrl_pwr_out_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_pwr_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_pwr_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_pwr_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_pwr_out_driver and fuse_ctrl_pwr_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_pwr_out_driver_bfm. + `fuse_ctrl_pwr_out_INITIATOR_STRUCT + fuse_ctrl_pwr_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_pwr_out_driver and fuse_ctrl_pwr_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_pwr_out_driver_bfm. + `fuse_ctrl_pwr_out_RESPONDER_STRUCT + fuse_ctrl_pwr_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + pwr_otp_o_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + otp_ext_voltage_h_io_o <= 'bz; + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_pwr_out_configuration_s fuse_ctrl_pwr_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_pwr_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_pwr_out_initiator_s fuse_ctrl_pwr_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_pwr_out_responder_s fuse_ctrl_pwr_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_pwr_out_initiator_struct: + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Members within the fuse_ctrl_pwr_out_responder_struct: + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + initiator_struct = fuse_ctrl_pwr_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_pwr_out_responder_struct.xyz = pwr_otp_o_i; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // Initiator inout signals + // fuse_ctrl_pwr_out_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_pwr_out_initiator_struct.xyz; // + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_pwr_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_pwr_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_pwr_out_initiator_s fuse_ctrl_pwr_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_pwr_out_responder_s fuse_ctrl_pwr_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_pwr_out_initiator_struct: + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Variables within the fuse_ctrl_pwr_out_responder_struct: + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // fuse_ctrl_pwr_out_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // pwr_otp_o_o <= fuse_ctrl_pwr_out_initiator_struct.xyz; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // Responder inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_pwr_out_initiator_struct.xyz; // + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_pwr_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_pwr_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_if.sv new file mode 100644 index 000000000..d8a00c80b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_if.sv @@ -0,0 +1,83 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_pwr_out interface signals. +// It is instantiated once per fuse_ctrl_pwr_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_pwr_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_pwr_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_pwr_out_bus.pwr_otp_o), // Agent input +// .dut_signal_port(fuse_ctrl_pwr_out_bus.otp_ext_voltage_h_io), // Agent inout + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_pwr_out_pkg_hdl::*; + +interface fuse_ctrl_pwr_out_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o, + inout tri otp_ext_voltage_h_io + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input pwr_otp_o, + input otp_ext_voltage_h_io + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input pwr_otp_o, + inout otp_ext_voltage_h_io + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output pwr_otp_o, + inout otp_ext_voltage_h_io + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_macros.svh new file mode 100644 index 000000000..8d5aca7a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_pwr_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_pwr_out_configuration class. +// + `define fuse_ctrl_pwr_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_pwr_out_configuration_s; + + `define fuse_ctrl_pwr_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_pwr_out_configuration_s to_struct();\ + fuse_ctrl_pwr_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_pwr_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_pwr_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_pwr_out_configuration_s fuse_ctrl_pwr_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_pwr_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_pwr_out_transaction class. +// + `define fuse_ctrl_pwr_out_MONITOR_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_pwr_out_monitor_s; + + `define fuse_ctrl_pwr_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_pwr_out_monitor_s to_monitor_struct();\ + fuse_ctrl_pwr_out_monitor_struct = \ + { \ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_pwr_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_pwr_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_pwr_out_monitor_s fuse_ctrl_pwr_out_monitor_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_pwr_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_pwr_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_pwr_out_INITIATOR_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_pwr_out_initiator_s; + + `define fuse_ctrl_pwr_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_pwr_out_initiator_s to_initiator_struct();\ + fuse_ctrl_pwr_out_initiator_struct = \ + {\ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_pwr_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_pwr_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_pwr_out_initiator_s fuse_ctrl_pwr_out_initiator_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_pwr_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_pwr_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_pwr_out_RESPONDER_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_pwr_out_responder_s; + + `define fuse_ctrl_pwr_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_pwr_out_responder_s to_responder_struct();\ + fuse_ctrl_pwr_out_responder_struct = \ + {\ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_pwr_out_responder_struct);\ + endfunction + + `define fuse_ctrl_pwr_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_pwr_out_responder_s fuse_ctrl_pwr_out_responder_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_pwr_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_monitor.svh new file mode 100644 index 000000000..bfd354e5f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_pwr_out transactions observed by the +// fuse_ctrl_pwr_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_out_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_pwr_out_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_pwr_out_monitor_bfm ), + .TRANS_T(fuse_ctrl_pwr_out_transaction )); + + `uvm_component_utils( fuse_ctrl_pwr_out_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_pwr_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_pwr_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_pwr_out_monitor_s fuse_ctrl_pwr_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_pwr_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_monitor_bfm.sv new file mode 100644 index 000000000..3c25c0212 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_monitor_bfm.sv @@ -0,0 +1,191 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_pwr_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_pwr_out monitor through a virtual +// interface handle in the fuse_ctrl_pwr_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_pwr_out_if. +// +// Input signals from the fuse_ctrl_pwr_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_pwr_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_pwr_out_pkg_hdl::*; +`include "src/fuse_ctrl_pwr_out_macros.svh" + + +interface fuse_ctrl_pwr_out_monitor_bfm + ( fuse_ctrl_pwr_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_pwr_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_pwr_out_MONITOR_STRUCT + fuse_ctrl_pwr_out_monitor_s fuse_ctrl_pwr_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_pwr_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_i; + tri otp_ext_voltage_h_io_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign pwr_otp_o_i = bus.pwr_otp_o; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + + // Proxy handle to UVM monitor + fuse_ctrl_pwr_out_pkg::fuse_ctrl_pwr_out_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_pwr_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_pwr_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_pwr_out_configuration_s fuse_ctrl_pwr_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_pwr_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_pwr_out_monitor_s fuse_ctrl_pwr_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_pwr_out_monitor_struct.pwr_otp_o + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_pwr_out_monitor_struct.xyz = pwr_otp_o_i; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // fuse_ctrl_pwr_out_monitor_struct.xyz = otp_ext_voltage_h_io_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_random_sequence.svh new file mode 100644 index 000000000..319e48704 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_pwr_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_pwr_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_out_random_sequence + extends fuse_ctrl_pwr_out_sequence_base ; + + `uvm_object_utils( fuse_ctrl_pwr_out_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_pwr_out_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_pwr_out_random_sequence::body()-fuse_ctrl_pwr_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_pwr_out_driver_bfm via the sequencer and fuse_ctrl_pwr_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_pwr_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_responder_sequence.svh new file mode 100644 index 000000000..d34cce767 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_out_responder_sequence + extends fuse_ctrl_pwr_out_sequence_base ; + + `uvm_object_utils( fuse_ctrl_pwr_out_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_pwr_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_pwr_out_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_sequence_base.svh new file mode 100644 index 000000000..aa01f7116 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_out_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_pwr_out_transaction ), + .RSP(fuse_ctrl_pwr_out_transaction )); + + `uvm_object_utils( fuse_ctrl_pwr_out_sequence_base ) + + // variables + typedef fuse_ctrl_pwr_out_transaction fuse_ctrl_pwr_out_transaction_req_t; + fuse_ctrl_pwr_out_transaction_req_t req; + typedef fuse_ctrl_pwr_out_transaction fuse_ctrl_pwr_out_transaction_rsp_t; + fuse_ctrl_pwr_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_pwr_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_pwr_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_transaction.svh new file mode 100644 index 000000000..339833a00 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_transaction.svh @@ -0,0 +1,196 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_pwr_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_out_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_pwr_out_transaction ) + + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_pwr_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_pwr_out_monitor and fuse_ctrl_pwr_out_monitor_bfm + // This struct is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_MONITOR_STRUCT + fuse_ctrl_pwr_out_monitor_s fuse_ctrl_pwr_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_pwr_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_pwr_out_monitor_struct. + // This function is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_pwr_out_driver and fuse_ctrl_pwr_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_pwr_out_driver_bfm. + // This struct is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_INITIATOR_STRUCT + fuse_ctrl_pwr_out_initiator_s fuse_ctrl_pwr_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_pwr_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_pwr_out_initiator_struct. + // This function is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_pwr_out_driver and fuse_ctrl_pwr_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_pwr_out_driver_bfm. + // This struct is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_RESPONDER_STRUCT + fuse_ctrl_pwr_out_responder_s fuse_ctrl_pwr_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_pwr_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_pwr_out_responder_struct. + // This function is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_pwr_out_macros.svh + `fuse_ctrl_pwr_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("pwr_otp_o:0x%x ",pwr_otp_o); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_pwr_out_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.pwr_otp_o == RHS.pwr_otp_o) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_pwr_out_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.pwr_otp_o = RHS.pwr_otp_o; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_pwr_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,pwr_otp_o,"pwr_otp_o"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_transaction_coverage.svh new file mode 100644 index 000000000..d50449a73 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_transaction_coverage.svh @@ -0,0 +1,84 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_pwr_out transaction information using +// a covergroup named fuse_ctrl_pwr_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_pwr_out_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_pwr_out_transaction )); + + `uvm_component_utils( fuse_ctrl_pwr_out_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_pwr_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + pwr_otp_o: coverpoint coverage_trans.pwr_otp_o; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_pwr_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_pwr_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_pwr_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_pwr_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/src/fuse_ctrl_pwr_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/yaml/fuse_ctrl_pwr_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/yaml/fuse_ctrl_pwr_out_interface.yaml new file mode 100644 index 000000000..30b59a245 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_pwr_out_pkg/yaml/fuse_ctrl_pwr_out_interface.yaml @@ -0,0 +1,33 @@ +uvmf: + interfaces: + fuse_ctrl_pwr_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: input + name: pwr_otp_o + reset_value: '''bz' + width: '[''$bits(pwrmgr_pkg::pwr_otp_rsp_t)'']' + - dir: inout + name: otp_ext_voltage_h_io + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: pwr_otp_o + type: pwrmgr_pkg::pwr_otp_rsp_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/.project new file mode 100644 index 000000000..942f586e8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_rst_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/.svproject new file mode 100644 index 000000000..8ad76331b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/Makefile new file mode 100644 index 000000000..7a8fb498a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_rst_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_rst_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_hvl.f + +fuse_ctrl_rst_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_hdl.f + +fuse_ctrl_rst_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_xrtl.f + +COMP_fuse_ctrl_rst_in_PKG_TGT_0 = q_comp_fuse_ctrl_rst_in_pkg +COMP_fuse_ctrl_rst_in_PKG_TGT_1 = v_comp_fuse_ctrl_rst_in_pkg +COMP_fuse_ctrl_rst_in_PKG_TGT = $(COMP_fuse_ctrl_rst_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_rst_in_pkg: $(COMP_fuse_ctrl_rst_in_PKG_TGT) + +q_comp_fuse_ctrl_rst_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_rst_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_rst_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_rst_in_PKG_XRTL) + +v_comp_fuse_ctrl_rst_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_rst_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_rst_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_rst_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_rst_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_rst_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_rst_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_rst_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_rst_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_rst_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_rst_in_pkg += -I$(fuse_ctrl_rst_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_rst_in_pkg += $(fuse_ctrl_rst_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_rst_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_rst_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_rst_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_rst_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_rst_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_rst_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/compile.do new file mode 100644 index 000000000..8fe1b2380 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_rst_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in.compile new file mode 100644 index 000000000..fdf807f5a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_rst_in_hvl.compile + - fuse_ctrl_rst_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_bfm.vinfo new file mode 100644 index 000000000..acb7e422c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_rst_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_rst_in_if.sv +src/fuse_ctrl_rst_in_driver_bfm.sv +src/fuse_ctrl_rst_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_common.compile new file mode 100644 index 000000000..66aaa5877 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_rst_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_hdl.f new file mode 100644 index 000000000..19c43688f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_hvl.f new file mode 100644 index 000000000..1a4457838 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_xrtl.f new file mode 100644 index 000000000..2a4fd6596 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_hdl.compile new file mode 100644 index 000000000..a3d5a616a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_rst_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_rst_in_if.sv + - src/fuse_ctrl_rst_in_monitor_bfm.sv + - src/fuse_ctrl_rst_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_hvl.compile new file mode 100644 index 000000000..26e18a789 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_rst_in_common.compile +incdir: + - . +src: + - fuse_ctrl_rst_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg.sv new file mode 100644 index 000000000..05dd6ee30 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_rst_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_rst_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_rst_in_macros.svh" + + export fuse_ctrl_rst_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_rst_in_typedefs.svh" + `include "src/fuse_ctrl_rst_in_transaction.svh" + + `include "src/fuse_ctrl_rst_in_configuration.svh" + `include "src/fuse_ctrl_rst_in_driver.svh" + `include "src/fuse_ctrl_rst_in_monitor.svh" + + `include "src/fuse_ctrl_rst_in_transaction_coverage.svh" + `include "src/fuse_ctrl_rst_in_sequence_base.svh" + `include "src/fuse_ctrl_rst_in_random_sequence.svh" + + `include "src/fuse_ctrl_rst_in_responder_sequence.svh" + `include "src/fuse_ctrl_rst_in2reg_adapter.svh" + + `include "src/fuse_ctrl_rst_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg.vinfo new file mode 100644 index 000000000..37f56607f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_rst_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_rst_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg_hdl.sv new file mode 100644 index 000000000..57235319e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_rst_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_rst_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_rst_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg_hdl.vinfo new file mode 100644 index 000000000..313c0e887 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_rst_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg_sve.F new file mode 100644 index 000000000..d9e5416d2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_rst_in_pkg/fuse_ctrl_rst_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in2reg_adapter.svh new file mode 100644 index 000000000..00428f282 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_rst_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_in2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_rst_in2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_rst_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_rst_in_transaction trans_h = fuse_ctrl_rst_in_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_rst_in_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_rst_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_agent.svh new file mode 100644 index 000000000..2de920a98 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_in_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_rst_in_configuration ), + .DRIVER_T(fuse_ctrl_rst_in_driver ), + .MONITOR_T(fuse_ctrl_rst_in_monitor ), + .COVERAGE_T(fuse_ctrl_rst_in_transaction_coverage ), + .TRANS_T(fuse_ctrl_rst_in_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_rst_in_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_configuration.svh new file mode 100644 index 000000000..3010ecf6d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_rst_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_in_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_rst_in_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_rst_in_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_rst_in_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_rst_in_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_rst_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_rst_in_macros.svh + `fuse_ctrl_rst_in_CONFIGURATION_STRUCT + fuse_ctrl_rst_in_configuration_s fuse_ctrl_rst_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_rst_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_rst_in_configuration_struct. + // This function is defined in fuse_ctrl_rst_in_macros.svh + `fuse_ctrl_rst_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_rst_in_macros.svh + `fuse_ctrl_rst_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_rst_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_rst_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_rst_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_rst_in_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_rst_in_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_rst_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_rst_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_rst_in_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_driver.svh new file mode 100644 index 000000000..e691b017a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_in_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_rst_in_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_rst_in_driver_bfm ), + .REQ(fuse_ctrl_rst_in_transaction ), + .RSP(fuse_ctrl_rst_in_transaction )); + + `uvm_component_utils( fuse_ctrl_rst_in_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_rst_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_rst_in_driver and fuse_ctrl_rst_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_rst_in_driver_bfm. +`fuse_ctrl_rst_in_INITIATOR_STRUCT + fuse_ctrl_rst_in_initiator_s fuse_ctrl_rst_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_rst_in_driver and fuse_ctrl_rst_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_rst_in_driver_bfm. +`fuse_ctrl_rst_in_RESPONDER_STRUCT + fuse_ctrl_rst_in_responder_s fuse_ctrl_rst_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_rst_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_rst_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_rst_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_rst_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_driver_bfm.sv new file mode 100644 index 000000000..b992b394b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_driver_bfm.sv @@ -0,0 +1,298 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_rst_in signal driving. It is +// accessed by the uvm fuse_ctrl_rst_in driver through a virtual interface +// handle in the fuse_ctrl_rst_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_rst_in_if. +// +// Input signals from the fuse_ctrl_rst_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_rst_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_rst_in_pkg_hdl::*; +`include "src/fuse_ctrl_rst_in_macros.svh" + +interface fuse_ctrl_rst_in_driver_bfm + (fuse_ctrl_rst_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_rst_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i_i; + reg [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i_o = 'bz; + + // Bi-directional signals + tri otp_ext_voltage_h_io_i; + reg otp_ext_voltage_h_io_o = 'bz; + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.pwr_otp_i = (initiator_responder == INITIATOR) ? pwr_otp_i_o : 'bz; + assign pwr_otp_i_i = bus.pwr_otp_i; + assign bus.otp_ext_voltage_h_io = otp_ext_voltage_h_io_o; + + // Proxy handle to UVM driver + fuse_ctrl_rst_in_pkg::fuse_ctrl_rst_in_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_rst_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_rst_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_rst_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_rst_in_driver and fuse_ctrl_rst_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_rst_in_driver_bfm. + `fuse_ctrl_rst_in_INITIATOR_STRUCT + fuse_ctrl_rst_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_rst_in_driver and fuse_ctrl_rst_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_rst_in_driver_bfm. + `fuse_ctrl_rst_in_RESPONDER_STRUCT + fuse_ctrl_rst_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + pwr_otp_i_o <= 'bz; + // Bi-directional signals + otp_ext_voltage_h_io_o <= 'bz; + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_rst_in_configuration_s fuse_ctrl_rst_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_rst_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_rst_in_initiator_s fuse_ctrl_rst_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_rst_in_responder_s fuse_ctrl_rst_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_rst_in_initiator_struct: + // bit assert_rst ; + // bit assert_otp_pwr_init ; + // Members within the fuse_ctrl_rst_in_responder_struct: + // bit assert_rst ; + // bit assert_otp_pwr_init ; + initiator_struct = fuse_ctrl_rst_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // fuse_ctrl_rst_in_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // pwr_otp_i_o <= fuse_ctrl_rst_in_initiator_struct.xyz; // [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] + // Initiator inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_rst_in_initiator_struct.xyz; // + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_rst_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_rst_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_rst_in_initiator_s fuse_ctrl_rst_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_rst_in_responder_s fuse_ctrl_rst_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_rst_in_initiator_struct: + // bit assert_rst ; + // bit assert_otp_pwr_init ; + // Variables within the fuse_ctrl_rst_in_responder_struct: + // bit assert_rst ; + // bit assert_otp_pwr_init ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_rst_in_responder_struct.xyz = pwr_otp_i_i; // [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] + // Responder inout signals + // fuse_ctrl_rst_in_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_rst_in_initiator_struct.xyz; // + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_rst_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_rst_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_if.sv new file mode 100644 index 000000000..de04ea930 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_if.sv @@ -0,0 +1,83 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_rst_in interface signals. +// It is instantiated once per fuse_ctrl_rst_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_rst_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_rst_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_rst_in_bus.pwr_otp_i), // Agent output +// .dut_signal_port(fuse_ctrl_rst_in_bus.otp_ext_voltage_h_io), // Agent inout + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_rst_in_pkg_hdl::*; + +interface fuse_ctrl_rst_in_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i, + inout tri otp_ext_voltage_h_io + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input pwr_otp_i, + input otp_ext_voltage_h_io + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output pwr_otp_i, + inout otp_ext_voltage_h_io + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input pwr_otp_i, + inout otp_ext_voltage_h_io + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_macros.svh new file mode 100644 index 000000000..a7124a6cd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_macros.svh @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_rst_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_rst_in_configuration class. +// + `define fuse_ctrl_rst_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_rst_in_configuration_s; + + `define fuse_ctrl_rst_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_in_configuration_s to_struct();\ + fuse_ctrl_rst_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_rst_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_rst_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_rst_in_configuration_s fuse_ctrl_rst_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_rst_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_rst_in_transaction class. +// + `define fuse_ctrl_rst_in_MONITOR_STRUCT typedef struct packed { \ + bit assert_rst ; \ + bit assert_otp_pwr_init ; \ + } fuse_ctrl_rst_in_monitor_s; + + `define fuse_ctrl_rst_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_in_monitor_s to_monitor_struct();\ + fuse_ctrl_rst_in_monitor_struct = \ + { \ + this.assert_rst , \ + this.assert_otp_pwr_init \ + };\ + return ( fuse_ctrl_rst_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_rst_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_rst_in_monitor_s fuse_ctrl_rst_in_monitor_struct);\ + {\ + this.assert_rst , \ + this.assert_otp_pwr_init \ + } = fuse_ctrl_rst_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_rst_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_rst_in_INITIATOR_STRUCT typedef struct packed { \ + bit assert_rst ; \ + bit assert_otp_pwr_init ; \ + } fuse_ctrl_rst_in_initiator_s; + + `define fuse_ctrl_rst_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_in_initiator_s to_initiator_struct();\ + fuse_ctrl_rst_in_initiator_struct = \ + {\ + this.assert_rst , \ + this.assert_otp_pwr_init \ + };\ + return ( fuse_ctrl_rst_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_rst_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_rst_in_initiator_s fuse_ctrl_rst_in_initiator_struct);\ + {\ + this.assert_rst , \ + this.assert_otp_pwr_init \ + } = fuse_ctrl_rst_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_rst_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_rst_in_RESPONDER_STRUCT typedef struct packed { \ + bit assert_rst ; \ + bit assert_otp_pwr_init ; \ + } fuse_ctrl_rst_in_responder_s; + + `define fuse_ctrl_rst_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_in_responder_s to_responder_struct();\ + fuse_ctrl_rst_in_responder_struct = \ + {\ + this.assert_rst , \ + this.assert_otp_pwr_init \ + };\ + return ( fuse_ctrl_rst_in_responder_struct);\ + endfunction + + `define fuse_ctrl_rst_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_rst_in_responder_s fuse_ctrl_rst_in_responder_struct);\ + {\ + this.assert_rst , \ + this.assert_otp_pwr_init \ + } = fuse_ctrl_rst_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_monitor.svh new file mode 100644 index 000000000..f160bbcb3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_rst_in transactions observed by the +// fuse_ctrl_rst_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_in_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_rst_in_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_rst_in_monitor_bfm ), + .TRANS_T(fuse_ctrl_rst_in_transaction )); + + `uvm_component_utils( fuse_ctrl_rst_in_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_rst_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_rst_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_rst_in_monitor_s fuse_ctrl_rst_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_rst_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_monitor_bfm.sv new file mode 100644 index 000000000..0e43766fa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_monitor_bfm.sv @@ -0,0 +1,192 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_rst_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_rst_in monitor through a virtual +// interface handle in the fuse_ctrl_rst_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_rst_in_if. +// +// Input signals from the fuse_ctrl_rst_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_rst_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_rst_in_pkg_hdl::*; +`include "src/fuse_ctrl_rst_in_macros.svh" + + +interface fuse_ctrl_rst_in_monitor_bfm + ( fuse_ctrl_rst_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_rst_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_rst_in_MONITOR_STRUCT + fuse_ctrl_rst_in_monitor_s fuse_ctrl_rst_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_rst_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] pwr_otp_i_i; + tri otp_ext_voltage_h_io_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign pwr_otp_i_i = bus.pwr_otp_i; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + + // Proxy handle to UVM monitor + fuse_ctrl_rst_in_pkg::fuse_ctrl_rst_in_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_rst_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_rst_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_rst_in_configuration_s fuse_ctrl_rst_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_rst_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_rst_in_monitor_s fuse_ctrl_rst_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_rst_in_monitor_struct.assert_rst + // // fuse_ctrl_rst_in_monitor_struct.assert_otp_pwr_init + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_rst_in_monitor_struct.xyz = pwr_otp_i_i; // [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] + // fuse_ctrl_rst_in_monitor_struct.xyz = otp_ext_voltage_h_io_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_random_sequence.svh new file mode 100644 index 000000000..99ba931d1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_rst_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_rst_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_in_random_sequence + extends fuse_ctrl_rst_in_sequence_base ; + + `uvm_object_utils( fuse_ctrl_rst_in_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_rst_in_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_rst_in_random_sequence::body()-fuse_ctrl_rst_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_rst_in_driver_bfm via the sequencer and fuse_ctrl_rst_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_rst_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_responder_sequence.svh new file mode 100644 index 000000000..96f0fa3a7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_in_responder_sequence + extends fuse_ctrl_rst_in_sequence_base ; + + `uvm_object_utils( fuse_ctrl_rst_in_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_rst_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_rst_in_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_sequence_base.svh new file mode 100644 index 000000000..47c3b89f6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_in_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_rst_in_transaction ), + .RSP(fuse_ctrl_rst_in_transaction )); + + `uvm_object_utils( fuse_ctrl_rst_in_sequence_base ) + + // variables + typedef fuse_ctrl_rst_in_transaction fuse_ctrl_rst_in_transaction_req_t; + fuse_ctrl_rst_in_transaction_req_t req; + typedef fuse_ctrl_rst_in_transaction fuse_ctrl_rst_in_transaction_rsp_t; + fuse_ctrl_rst_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_rst_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_rst_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_transaction.svh new file mode 100644 index 000000000..83d7dbc7d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_transaction.svh @@ -0,0 +1,198 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_rst_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_in_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_rst_in_transaction ) + + bit assert_rst ; + bit assert_otp_pwr_init ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_rst_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_rst_in_monitor and fuse_ctrl_rst_in_monitor_bfm + // This struct is defined in fuse_ctrl_rst_in_macros.svh + `fuse_ctrl_rst_in_MONITOR_STRUCT + fuse_ctrl_rst_in_monitor_s fuse_ctrl_rst_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_rst_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_rst_in_monitor_struct. + // This function is defined in fuse_ctrl_rst_in_macros.svh + `fuse_ctrl_rst_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_rst_in_macros.svh + `fuse_ctrl_rst_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_rst_in_driver and fuse_ctrl_rst_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_rst_in_driver_bfm. + // This struct is defined in fuse_ctrl_rst_in_macros.svh + `fuse_ctrl_rst_in_INITIATOR_STRUCT + fuse_ctrl_rst_in_initiator_s fuse_ctrl_rst_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_rst_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_rst_in_initiator_struct. + // This function is defined in fuse_ctrl_rst_in_macros.svh + `fuse_ctrl_rst_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_rst_in_macros.svh + `fuse_ctrl_rst_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_rst_in_driver and fuse_ctrl_rst_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_rst_in_driver_bfm. + // This struct is defined in fuse_ctrl_rst_in_macros.svh + `fuse_ctrl_rst_in_RESPONDER_STRUCT + fuse_ctrl_rst_in_responder_s fuse_ctrl_rst_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_rst_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_rst_in_responder_struct. + // This function is defined in fuse_ctrl_rst_in_macros.svh + `fuse_ctrl_rst_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_rst_in_macros.svh + `fuse_ctrl_rst_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("assert_rst:0x%x assert_otp_pwr_init:0x%x ",assert_rst,assert_otp_pwr_init); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_rst_in_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_rst_in_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.assert_rst = RHS.assert_rst; + this.assert_otp_pwr_init = RHS.assert_otp_pwr_init; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_rst_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,assert_rst,"assert_rst"); + $add_attribute(transaction_view_h,assert_otp_pwr_init,"assert_otp_pwr_init"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_transaction_coverage.svh new file mode 100644 index 000000000..32b88a02d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_transaction_coverage.svh @@ -0,0 +1,85 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_rst_in transaction information using +// a covergroup named fuse_ctrl_rst_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_in_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_rst_in_transaction )); + + `uvm_component_utils( fuse_ctrl_rst_in_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_rst_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + assert_rst: coverpoint coverage_trans.assert_rst; + assert_otp_pwr_init: coverpoint coverage_trans.assert_otp_pwr_init; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_rst_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_rst_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_rst_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_rst_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/src/fuse_ctrl_rst_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/yaml/fuse_ctrl_rst_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/yaml/fuse_ctrl_rst_in_interface.yaml new file mode 100644 index 000000000..6da6d45ec --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_in_pkg/yaml/fuse_ctrl_rst_in_interface.yaml @@ -0,0 +1,39 @@ +uvmf: + interfaces: + fuse_ctrl_rst_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: output + name: pwr_otp_i + reset_value: '''bz' + width: '[''$bits(pwrmgr_pkg::pwr_otp_req_t)'']' + - dir: inout + name: otp_ext_voltage_h_io + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: assert_rst + type: bit + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: assert_otp_pwr_init + type: bit + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/.project new file mode 100644 index 000000000..dfcfc9a71 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_rst_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/.svproject new file mode 100644 index 000000000..e389a42fb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/Makefile new file mode 100644 index 000000000..cec1c89e7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_rst_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_rst_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_hvl.f + +fuse_ctrl_rst_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_hdl.f + +fuse_ctrl_rst_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_xrtl.f + +COMP_fuse_ctrl_rst_out_PKG_TGT_0 = q_comp_fuse_ctrl_rst_out_pkg +COMP_fuse_ctrl_rst_out_PKG_TGT_1 = v_comp_fuse_ctrl_rst_out_pkg +COMP_fuse_ctrl_rst_out_PKG_TGT = $(COMP_fuse_ctrl_rst_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_rst_out_pkg: $(COMP_fuse_ctrl_rst_out_PKG_TGT) + +q_comp_fuse_ctrl_rst_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_rst_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_rst_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_rst_out_PKG_XRTL) + +v_comp_fuse_ctrl_rst_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_rst_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_rst_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_rst_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_rst_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_rst_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_rst_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_rst_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_rst_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_rst_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_rst_out_pkg += -I$(fuse_ctrl_rst_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_rst_out_pkg += $(fuse_ctrl_rst_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_rst_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_rst_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_rst_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_rst_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_rst_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_rst_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/compile.do new file mode 100644 index 000000000..d9a26ba15 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_rst_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out.compile new file mode 100644 index 000000000..d3c0b4656 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_rst_out_hvl.compile + - fuse_ctrl_rst_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_bfm.vinfo new file mode 100644 index 000000000..6c2d817a0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_rst_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_rst_out_if.sv +src/fuse_ctrl_rst_out_driver_bfm.sv +src/fuse_ctrl_rst_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_common.compile new file mode 100644 index 000000000..f6f7480f0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_rst_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_hdl.f new file mode 100644 index 000000000..a63bb95cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_hvl.f new file mode 100644 index 000000000..411a2c846 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_xrtl.f new file mode 100644 index 000000000..7fb91c04b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_hdl.compile new file mode 100644 index 000000000..e4bbfccd4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_rst_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_rst_out_if.sv + - src/fuse_ctrl_rst_out_monitor_bfm.sv + - src/fuse_ctrl_rst_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_hvl.compile new file mode 100644 index 000000000..71b0f73d5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_rst_out_common.compile +incdir: + - . +src: + - fuse_ctrl_rst_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg.sv new file mode 100644 index 000000000..114980ca1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_rst_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_rst_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_rst_out_macros.svh" + + export fuse_ctrl_rst_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_rst_out_typedefs.svh" + `include "src/fuse_ctrl_rst_out_transaction.svh" + + `include "src/fuse_ctrl_rst_out_configuration.svh" + `include "src/fuse_ctrl_rst_out_driver.svh" + `include "src/fuse_ctrl_rst_out_monitor.svh" + + `include "src/fuse_ctrl_rst_out_transaction_coverage.svh" + `include "src/fuse_ctrl_rst_out_sequence_base.svh" + `include "src/fuse_ctrl_rst_out_random_sequence.svh" + + `include "src/fuse_ctrl_rst_out_responder_sequence.svh" + `include "src/fuse_ctrl_rst_out2reg_adapter.svh" + + `include "src/fuse_ctrl_rst_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg.vinfo new file mode 100644 index 000000000..e11706307 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_rst_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_rst_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg_hdl.sv new file mode 100644 index 000000000..0dca9e611 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_rst_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_rst_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_rst_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg_hdl.vinfo new file mode 100644 index 000000000..3d6a42bb1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_rst_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg_sve.F new file mode 100644 index 000000000..a4e1931ab --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_rst_out_pkg/fuse_ctrl_rst_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out2reg_adapter.svh new file mode 100644 index 000000000..ebcb194e5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_rst_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_out2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_rst_out2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_rst_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_rst_out_transaction trans_h = fuse_ctrl_rst_out_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_rst_out_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_rst_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_agent.svh new file mode 100644 index 000000000..72f514f70 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_out_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_rst_out_configuration ), + .DRIVER_T(fuse_ctrl_rst_out_driver ), + .MONITOR_T(fuse_ctrl_rst_out_monitor ), + .COVERAGE_T(fuse_ctrl_rst_out_transaction_coverage ), + .TRANS_T(fuse_ctrl_rst_out_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_rst_out_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_configuration.svh new file mode 100644 index 000000000..cc1788a1d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_rst_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_out_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_rst_out_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_rst_out_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_rst_out_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_rst_out_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_rst_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_rst_out_macros.svh + `fuse_ctrl_rst_out_CONFIGURATION_STRUCT + fuse_ctrl_rst_out_configuration_s fuse_ctrl_rst_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_rst_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_rst_out_configuration_struct. + // This function is defined in fuse_ctrl_rst_out_macros.svh + `fuse_ctrl_rst_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_rst_out_macros.svh + `fuse_ctrl_rst_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_rst_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_rst_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_rst_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_rst_out_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_rst_out_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_rst_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_rst_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_rst_out_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_driver.svh new file mode 100644 index 000000000..6b15dc277 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_out_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_rst_out_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_rst_out_driver_bfm ), + .REQ(fuse_ctrl_rst_out_transaction ), + .RSP(fuse_ctrl_rst_out_transaction )); + + `uvm_component_utils( fuse_ctrl_rst_out_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_rst_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_rst_out_driver and fuse_ctrl_rst_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_rst_out_driver_bfm. +`fuse_ctrl_rst_out_INITIATOR_STRUCT + fuse_ctrl_rst_out_initiator_s fuse_ctrl_rst_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_rst_out_driver and fuse_ctrl_rst_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_rst_out_driver_bfm. +`fuse_ctrl_rst_out_RESPONDER_STRUCT + fuse_ctrl_rst_out_responder_s fuse_ctrl_rst_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_rst_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_rst_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_rst_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_rst_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_driver_bfm.sv new file mode 100644 index 000000000..b66cf3d3e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_driver_bfm.sv @@ -0,0 +1,294 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_rst_out signal driving. It is +// accessed by the uvm fuse_ctrl_rst_out driver through a virtual interface +// handle in the fuse_ctrl_rst_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_rst_out_if. +// +// Input signals from the fuse_ctrl_rst_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_rst_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_rst_out_pkg_hdl::*; +`include "src/fuse_ctrl_rst_out_macros.svh" + +interface fuse_ctrl_rst_out_driver_bfm + (fuse_ctrl_rst_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_rst_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_i; + reg [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + tri otp_ext_voltage_h_io_i; + reg otp_ext_voltage_h_io_o = 'bz; + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign pwr_otp_o_i = bus.pwr_otp_o; + assign bus.pwr_otp_o = (initiator_responder == RESPONDER) ? pwr_otp_o_o : 'bz; + + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.otp_ext_voltage_h_io = otp_ext_voltage_h_io_o; + + // Proxy handle to UVM driver + fuse_ctrl_rst_out_pkg::fuse_ctrl_rst_out_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_rst_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_rst_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_rst_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_rst_out_driver and fuse_ctrl_rst_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_rst_out_driver_bfm. + `fuse_ctrl_rst_out_INITIATOR_STRUCT + fuse_ctrl_rst_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_rst_out_driver and fuse_ctrl_rst_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_rst_out_driver_bfm. + `fuse_ctrl_rst_out_RESPONDER_STRUCT + fuse_ctrl_rst_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + pwr_otp_o_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + otp_ext_voltage_h_io_o <= 'bz; + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_rst_out_configuration_s fuse_ctrl_rst_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_rst_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_rst_out_initiator_s fuse_ctrl_rst_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_rst_out_responder_s fuse_ctrl_rst_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_rst_out_initiator_struct: + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Members within the fuse_ctrl_rst_out_responder_struct: + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + initiator_struct = fuse_ctrl_rst_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_rst_out_responder_struct.xyz = pwr_otp_o_i; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // Initiator inout signals + // fuse_ctrl_rst_out_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_rst_out_initiator_struct.xyz; // + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_rst_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_rst_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_rst_out_initiator_s fuse_ctrl_rst_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_rst_out_responder_s fuse_ctrl_rst_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_rst_out_initiator_struct: + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Variables within the fuse_ctrl_rst_out_responder_struct: + // pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // fuse_ctrl_rst_out_responder_struct.xyz = otp_ext_voltage_h_io_i; // + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // pwr_otp_o_o <= fuse_ctrl_rst_out_initiator_struct.xyz; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // Responder inout signals + // otp_ext_voltage_h_io_o <= fuse_ctrl_rst_out_initiator_struct.xyz; // + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_rst_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_rst_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_if.sv new file mode 100644 index 000000000..d510f9f64 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_if.sv @@ -0,0 +1,83 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_rst_out interface signals. +// It is instantiated once per fuse_ctrl_rst_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_rst_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_rst_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_rst_out_bus.pwr_otp_o), // Agent input +// .dut_signal_port(fuse_ctrl_rst_out_bus.otp_ext_voltage_h_io), // Agent inout + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_rst_out_pkg_hdl::*; + +interface fuse_ctrl_rst_out_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o, + inout tri otp_ext_voltage_h_io + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input pwr_otp_o, + input otp_ext_voltage_h_io + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input pwr_otp_o, + inout otp_ext_voltage_h_io + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output pwr_otp_o, + inout otp_ext_voltage_h_io + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_macros.svh new file mode 100644 index 000000000..244a2c7ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_rst_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_rst_out_configuration class. +// + `define fuse_ctrl_rst_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_rst_out_configuration_s; + + `define fuse_ctrl_rst_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_out_configuration_s to_struct();\ + fuse_ctrl_rst_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_rst_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_rst_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_rst_out_configuration_s fuse_ctrl_rst_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_rst_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_rst_out_transaction class. +// + `define fuse_ctrl_rst_out_MONITOR_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_rst_out_monitor_s; + + `define fuse_ctrl_rst_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_out_monitor_s to_monitor_struct();\ + fuse_ctrl_rst_out_monitor_struct = \ + { \ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_rst_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_rst_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_rst_out_monitor_s fuse_ctrl_rst_out_monitor_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_rst_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_rst_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_rst_out_INITIATOR_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_rst_out_initiator_s; + + `define fuse_ctrl_rst_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_out_initiator_s to_initiator_struct();\ + fuse_ctrl_rst_out_initiator_struct = \ + {\ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_rst_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_rst_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_rst_out_initiator_s fuse_ctrl_rst_out_initiator_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_rst_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_rst_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_rst_out_RESPONDER_STRUCT typedef struct packed { \ + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; \ + } fuse_ctrl_rst_out_responder_s; + + `define fuse_ctrl_rst_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_out_responder_s to_responder_struct();\ + fuse_ctrl_rst_out_responder_struct = \ + {\ + this.pwr_otp_o \ + };\ + return ( fuse_ctrl_rst_out_responder_struct);\ + endfunction + + `define fuse_ctrl_rst_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_rst_out_responder_s fuse_ctrl_rst_out_responder_struct);\ + {\ + this.pwr_otp_o \ + } = fuse_ctrl_rst_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_monitor.svh new file mode 100644 index 000000000..22093ba38 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_rst_out transactions observed by the +// fuse_ctrl_rst_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_out_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_rst_out_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_rst_out_monitor_bfm ), + .TRANS_T(fuse_ctrl_rst_out_transaction )); + + `uvm_component_utils( fuse_ctrl_rst_out_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_rst_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_rst_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_rst_out_monitor_s fuse_ctrl_rst_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_rst_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_monitor_bfm.sv new file mode 100644 index 000000000..596760d61 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_monitor_bfm.sv @@ -0,0 +1,191 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_rst_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_rst_out monitor through a virtual +// interface handle in the fuse_ctrl_rst_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_rst_out_if. +// +// Input signals from the fuse_ctrl_rst_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_rst_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_rst_out_pkg_hdl::*; +`include "src/fuse_ctrl_rst_out_macros.svh" + + +interface fuse_ctrl_rst_out_monitor_bfm + ( fuse_ctrl_rst_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_rst_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_rst_out_MONITOR_STRUCT + fuse_ctrl_rst_out_monitor_s fuse_ctrl_rst_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_rst_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] pwr_otp_o_i; + tri otp_ext_voltage_h_io_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign pwr_otp_o_i = bus.pwr_otp_o; + assign otp_ext_voltage_h_io_i = bus.otp_ext_voltage_h_io; + + // Proxy handle to UVM monitor + fuse_ctrl_rst_out_pkg::fuse_ctrl_rst_out_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_rst_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_rst_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_rst_out_configuration_s fuse_ctrl_rst_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_rst_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_rst_out_monitor_s fuse_ctrl_rst_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_rst_out_monitor_struct.pwr_otp_o + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_rst_out_monitor_struct.xyz = pwr_otp_o_i; // [$bits(pwrmgr_pkg::pwr_otp_rsp_t)-1:0] + // fuse_ctrl_rst_out_monitor_struct.xyz = otp_ext_voltage_h_io_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_random_sequence.svh new file mode 100644 index 000000000..448cc51dd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_rst_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_rst_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_out_random_sequence + extends fuse_ctrl_rst_out_sequence_base ; + + `uvm_object_utils( fuse_ctrl_rst_out_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_rst_out_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_rst_out_random_sequence::body()-fuse_ctrl_rst_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_rst_out_driver_bfm via the sequencer and fuse_ctrl_rst_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_rst_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_responder_sequence.svh new file mode 100644 index 000000000..0a1e3cb9c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_out_responder_sequence + extends fuse_ctrl_rst_out_sequence_base ; + + `uvm_object_utils( fuse_ctrl_rst_out_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_rst_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_rst_out_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_sequence_base.svh new file mode 100644 index 000000000..e4c8255a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_out_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_rst_out_transaction ), + .RSP(fuse_ctrl_rst_out_transaction )); + + `uvm_object_utils( fuse_ctrl_rst_out_sequence_base ) + + // variables + typedef fuse_ctrl_rst_out_transaction fuse_ctrl_rst_out_transaction_req_t; + fuse_ctrl_rst_out_transaction_req_t req; + typedef fuse_ctrl_rst_out_transaction fuse_ctrl_rst_out_transaction_rsp_t; + fuse_ctrl_rst_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_rst_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_rst_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_transaction.svh new file mode 100644 index 000000000..55736433d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_transaction.svh @@ -0,0 +1,196 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_rst_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_out_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_rst_out_transaction ) + + pwrmgr_pkg::pwr_otp_rsp_t pwr_otp_o ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_rst_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_rst_out_monitor and fuse_ctrl_rst_out_monitor_bfm + // This struct is defined in fuse_ctrl_rst_out_macros.svh + `fuse_ctrl_rst_out_MONITOR_STRUCT + fuse_ctrl_rst_out_monitor_s fuse_ctrl_rst_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_rst_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_rst_out_monitor_struct. + // This function is defined in fuse_ctrl_rst_out_macros.svh + `fuse_ctrl_rst_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_rst_out_macros.svh + `fuse_ctrl_rst_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_rst_out_driver and fuse_ctrl_rst_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_rst_out_driver_bfm. + // This struct is defined in fuse_ctrl_rst_out_macros.svh + `fuse_ctrl_rst_out_INITIATOR_STRUCT + fuse_ctrl_rst_out_initiator_s fuse_ctrl_rst_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_rst_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_rst_out_initiator_struct. + // This function is defined in fuse_ctrl_rst_out_macros.svh + `fuse_ctrl_rst_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_rst_out_macros.svh + `fuse_ctrl_rst_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_rst_out_driver and fuse_ctrl_rst_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_rst_out_driver_bfm. + // This struct is defined in fuse_ctrl_rst_out_macros.svh + `fuse_ctrl_rst_out_RESPONDER_STRUCT + fuse_ctrl_rst_out_responder_s fuse_ctrl_rst_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_rst_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_rst_out_responder_struct. + // This function is defined in fuse_ctrl_rst_out_macros.svh + `fuse_ctrl_rst_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_rst_out_macros.svh + `fuse_ctrl_rst_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("pwr_otp_o:0x%x ",pwr_otp_o); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_rst_out_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.pwr_otp_o == RHS.pwr_otp_o) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_rst_out_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.pwr_otp_o = RHS.pwr_otp_o; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_rst_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,pwr_otp_o,"pwr_otp_o"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_transaction_coverage.svh new file mode 100644 index 000000000..ef38834e1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_transaction_coverage.svh @@ -0,0 +1,84 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_rst_out transaction information using +// a covergroup named fuse_ctrl_rst_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_out_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_rst_out_transaction )); + + `uvm_component_utils( fuse_ctrl_rst_out_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_rst_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + pwr_otp_o: coverpoint coverage_trans.pwr_otp_o; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_rst_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_rst_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_rst_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_rst_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/src/fuse_ctrl_rst_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/yaml/fuse_ctrl_rst_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/yaml/fuse_ctrl_rst_out_interface.yaml new file mode 100644 index 000000000..ca4764b9d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_out_pkg/yaml/fuse_ctrl_rst_out_interface.yaml @@ -0,0 +1,33 @@ +uvmf: + interfaces: + fuse_ctrl_rst_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: input + name: pwr_otp_o + reset_value: '''bz' + width: '[''$bits(pwrmgr_pkg::pwr_otp_rsp_t)'']' + - dir: inout + name: otp_ext_voltage_h_io + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: pwr_otp_o + type: pwrmgr_pkg::pwr_otp_rsp_t + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.project new file mode 100644 index 000000000..ffd5f9686 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_rst_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.svproject new file mode 100644 index 000000000..79beebd45 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/Makefile new file mode 100644 index 000000000..4067417f2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_rst interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_rst_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f + +fuse_ctrl_rst_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f + +fuse_ctrl_rst_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f + +COMP_fuse_ctrl_rst_PKG_TGT_0 = q_comp_fuse_ctrl_rst_pkg +COMP_fuse_ctrl_rst_PKG_TGT_1 = v_comp_fuse_ctrl_rst_pkg +COMP_fuse_ctrl_rst_PKG_TGT = $(COMP_fuse_ctrl_rst_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_rst_pkg: $(COMP_fuse_ctrl_rst_PKG_TGT) + +q_comp_fuse_ctrl_rst_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_rst_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_rst_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_rst_PKG_XRTL) + +v_comp_fuse_ctrl_rst_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_rst_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_rst_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_rst_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_rst_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_rst_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_rst_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_rst_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_rst_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_rst_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_rst_pkg += -I$(fuse_ctrl_rst_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_rst_pkg += $(fuse_ctrl_rst_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_rst_pkg += \ + \ + -o .so + +comp_fuse_ctrl_rst_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_rst_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_rst_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_rst_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_rst_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/compile.do new file mode 100644 index 000000000..935ebc791 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_rst interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile new file mode 100644 index 000000000..98756cb39 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_rst_hvl.compile + - fuse_ctrl_rst_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo new file mode 100644 index 000000000..c41b1f119 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_rst_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_rst_if.sv +src/fuse_ctrl_rst_driver_bfm.sv +src/fuse_ctrl_rst_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_common.compile new file mode 100644 index 000000000..098d340ef --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_rst_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f new file mode 100644 index 000000000..a5e629a59 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f new file mode 100644 index 000000000..9bddd1e32 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f new file mode 100644 index 000000000..a68e85753 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hdl.compile new file mode 100644 index 000000000..5e99298f4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_rst_common.compile +incdir: + - . +src: + - src/fuse_ctrl_rst_if.sv + - src/fuse_ctrl_rst_monitor_bfm.sv + - src/fuse_ctrl_rst_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hvl.compile new file mode 100644 index 000000000..69ab1ac56 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_rst_common.compile +incdir: + - . +src: + - fuse_ctrl_rst_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv new file mode 100644 index 000000000..2ea60c87c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_rst_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_rst_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_rst_macros.svh" + + export fuse_ctrl_rst_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_rst_typedefs.svh" + `include "src/fuse_ctrl_rst_transaction.svh" + + `include "src/fuse_ctrl_rst_configuration.svh" + `include "src/fuse_ctrl_rst_driver.svh" + `include "src/fuse_ctrl_rst_monitor.svh" + + `include "src/fuse_ctrl_rst_transaction_coverage.svh" + `include "src/fuse_ctrl_rst_sequence_base.svh" + `include "src/fuse_ctrl_rst_random_sequence.svh" + + `include "src/fuse_ctrl_rst_responder_sequence.svh" + `include "src/fuse_ctrl_rst2reg_adapter.svh" + + `include "src/fuse_ctrl_rst_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo new file mode 100644 index 000000000..7efd3da90 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_rst_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_rst_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.sv new file mode 100644 index 000000000..59c4ce0d1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_rst_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_rst_typedefs_hdl.svh" + `include "src/fuse_ctrl_rst_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.vinfo new file mode 100644 index 000000000..105e5a267 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_rst_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F new file mode 100644 index 000000000..2a76484f8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_rst_pkg/fuse_ctrl_rst_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst2reg_adapter.svh new file mode 100644 index 000000000..e74aaf5c8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst2reg_adapter.svh @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_rst interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst2reg_adapter extends uvm_reg_adapter; + + `uvm_object_utils( fuse_ctrl_rst2reg_adapter ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_rst2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_rst_transaction trans_h = fuse_ctrl_rst_transaction ::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_rst_transaction trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_rst2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_agent.svh new file mode 100644 index 000000000..3129024c4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_agent.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_agent extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_rst_configuration ), + .DRIVER_T(fuse_ctrl_rst_driver ), + .MONITOR_T(fuse_ctrl_rst_monitor ), + .COVERAGE_T(fuse_ctrl_rst_transaction_coverage ), + .TRANS_T(fuse_ctrl_rst_transaction ) + ); + + `uvm_component_utils( fuse_ctrl_rst_agent ) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_configuration.svh new file mode 100644 index 000000000..2b8c3b89a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_configuration.svh @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_rst agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_configuration extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_rst_driver_bfm ), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_rst_monitor_bfm )); + + `uvm_object_utils( fuse_ctrl_rst_configuration ) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_rst_transaction ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_rst_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_CONFIGURATION_STRUCT + fuse_ctrl_rst_configuration_s fuse_ctrl_rst_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_rst_configuration_s + // structure. The function returns the handle to the fuse_ctrl_rst_configuration_struct. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_rst_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_rst_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_rst_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_rst_configuration + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_rst_configuration + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_rst_configuration_cg.set_inst_name($sformatf("fuse_ctrl_rst_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_rst_transaction) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver.svh new file mode 100644 index 000000000..c0c6921a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver.svh @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_driver extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_rst_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_rst_driver_bfm ), + .REQ(fuse_ctrl_rst_transaction ), + .RSP(fuse_ctrl_rst_transaction )); + + `uvm_component_utils( fuse_ctrl_rst_driver ) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_rst_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm +// to communicate initiator driven data to fuse_ctrl_rst_driver_bfm. +`fuse_ctrl_rst_INITIATOR_STRUCT + fuse_ctrl_rst_initiator_s fuse_ctrl_rst_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm +// to communicate Responder driven data to fuse_ctrl_rst_driver_bfm. +`fuse_ctrl_rst_RESPONDER_STRUCT + fuse_ctrl_rst_responder_s fuse_ctrl_rst_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_rst_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_rst_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_rst_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_rst_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver_bfm.sv new file mode 100644 index 000000000..3b43b4098 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_driver_bfm.sv @@ -0,0 +1,292 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_rst signal driving. It is +// accessed by the uvm fuse_ctrl_rst driver through a virtual interface +// handle in the fuse_ctrl_rst configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_rst_if. +// +// Input signals from the fuse_ctrl_rst_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_rst_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_rst_pkg_hdl::*; +`include "src/fuse_ctrl_rst_macros.svh" + +interface fuse_ctrl_rst_driver_bfm + (fuse_ctrl_rst_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_rst_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri rst_ni_i; + reg rst_ni_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.rst_ni = (initiator_responder == INITIATOR) ? rst_ni_o : 'bz; + assign rst_ni_i = bus.rst_ni; + + // Proxy handle to UVM driver + fuse_ctrl_rst_pkg::fuse_ctrl_rst_driver proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_rst_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_rst_driver to this BFM + // **************************************************************************** + `fuse_ctrl_rst_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm + // to communicate initiator driven data to fuse_ctrl_rst_driver_bfm. + `fuse_ctrl_rst_INITIATOR_STRUCT + fuse_ctrl_rst_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm + // to communicate Responder driven data to fuse_ctrl_rst_driver_bfm. + `fuse_ctrl_rst_RESPONDER_STRUCT + fuse_ctrl_rst_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + rst_ni_o <= 'bz; + pwr_otp_i_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_rst_configuration_s fuse_ctrl_rst_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_rst_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_rst_initiator_s fuse_ctrl_rst_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_rst_responder_s fuse_ctrl_rst_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_rst_initiator_struct: + // bit assert_rst ; + // bit assert_otp_init ; + // Members within the fuse_ctrl_rst_responder_struct: + // bit assert_rst ; + // bit assert_otp_init ; + initiator_struct = fuse_ctrl_rst_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // rst_ni_o <= fuse_ctrl_rst_initiator_struct.xyz; // + // pwr_otp_i_o <= fuse_ctrl_rst_initiator_struct.xyz; // [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_rst_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_rst_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_rst_initiator_s fuse_ctrl_rst_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_rst_responder_s fuse_ctrl_rst_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_rst_initiator_struct: + // bit assert_rst ; + // bit assert_otp_init ; + // Variables within the fuse_ctrl_rst_responder_struct: + // bit assert_rst ; + // bit assert_otp_init ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_rst_responder_struct.xyz = rst_ni_i; // + // fuse_ctrl_rst_responder_struct.xyz = pwr_otp_i_i; // [$bits(pwrmgr_pkg::pwr_otp_req_t)-1:0] + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_rst_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_rst_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv new file mode 100644 index 000000000..45947f7cd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_if.sv @@ -0,0 +1,78 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_rst interface signals. +// It is instantiated once per fuse_ctrl_rst bus. Bus Functional Models, +// BFM's named fuse_ctrl_rst_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_rst_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_rst_bus.rst_ni), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_rst_pkg_hdl::*; + +interface fuse_ctrl_rst_if + + ( + input tri clk_i, + input tri rst_ni, + inout tri rst_ni + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input rst_ni + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output rst_ni + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input rst_ni + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_macros.svh new file mode 100644 index 000000000..7af53766d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_macros.svh @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_rst package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_rst_configuration class. +// + `define fuse_ctrl_rst_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_rst_configuration_s; + + `define fuse_ctrl_rst_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_configuration_s to_struct();\ + fuse_ctrl_rst_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_rst_configuration_struct );\ + endfunction + + `define fuse_ctrl_rst_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_rst_configuration_s fuse_ctrl_rst_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_rst_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_rst_transaction class. +// + `define fuse_ctrl_rst_MONITOR_STRUCT typedef struct packed { \ + bit assert_rst ; \ + } fuse_ctrl_rst_monitor_s; + + `define fuse_ctrl_rst_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_monitor_s to_monitor_struct();\ + fuse_ctrl_rst_monitor_struct = \ + { \ + this.assert_rst \ + };\ + return ( fuse_ctrl_rst_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_rst_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_rst_monitor_s fuse_ctrl_rst_monitor_struct);\ + {\ + this.assert_rst \ + } = fuse_ctrl_rst_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_rst_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_rst_INITIATOR_STRUCT typedef struct packed { \ + bit assert_rst ; \ + } fuse_ctrl_rst_initiator_s; + + `define fuse_ctrl_rst_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_initiator_s to_initiator_struct();\ + fuse_ctrl_rst_initiator_struct = \ + {\ + this.assert_rst \ + };\ + return ( fuse_ctrl_rst_initiator_struct);\ + endfunction + + `define fuse_ctrl_rst_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_rst_initiator_s fuse_ctrl_rst_initiator_struct);\ + {\ + this.assert_rst \ + } = fuse_ctrl_rst_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_rst_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_rst_RESPONDER_STRUCT typedef struct packed { \ + bit assert_rst ; \ + } fuse_ctrl_rst_responder_s; + + `define fuse_ctrl_rst_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_rst_responder_s to_responder_struct();\ + fuse_ctrl_rst_responder_struct = \ + {\ + this.assert_rst \ + };\ + return ( fuse_ctrl_rst_responder_struct);\ + endfunction + + `define fuse_ctrl_rst_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_rst_responder_s fuse_ctrl_rst_responder_struct);\ + {\ + this.assert_rst \ + } = fuse_ctrl_rst_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor.svh new file mode 100644 index 000000000..6e829b3a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor.svh @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_rst transactions observed by the +// fuse_ctrl_rst monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_monitor extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_rst_configuration ), + .BFM_BIND_T(virtual fuse_ctrl_rst_monitor_bfm ), + .TRANS_T(fuse_ctrl_rst_transaction )); + + `uvm_component_utils( fuse_ctrl_rst_monitor ) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_rst_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_rst_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_rst_monitor_s fuse_ctrl_rst_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_rst_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor_bfm.sv new file mode 100644 index 000000000..6ba721bc4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_monitor_bfm.sv @@ -0,0 +1,188 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_rst signal monitoring. +// It is accessed by the uvm fuse_ctrl_rst monitor through a virtual +// interface handle in the fuse_ctrl_rst configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_rst_if. +// +// Input signals from the fuse_ctrl_rst_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_rst bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_rst_pkg_hdl::*; +`include "src/fuse_ctrl_rst_macros.svh" + + +interface fuse_ctrl_rst_monitor_bfm + ( fuse_ctrl_rst_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_rst_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: ", ), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_rst_MONITOR_STRUCT + fuse_ctrl_rst_monitor_s fuse_ctrl_rst_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_rst_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri rst_ni_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign rst_ni_i = bus.rst_ni; + + // Proxy handle to UVM monitor + fuse_ctrl_rst_pkg::fuse_ctrl_rst_monitor proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_rst_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_rst_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_rst_configuration_s fuse_ctrl_rst_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_rst_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_rst_monitor_s fuse_ctrl_rst_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_rst_monitor_struct.assert_rst + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_rst_monitor_struct.xyz = rst_ni_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_random_sequence.svh new file mode 100644 index 000000000..2b719a026 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_random_sequence.svh @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_rst transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_rst_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_random_sequence + extends fuse_ctrl_rst_sequence_base ; + + `uvm_object_utils( fuse_ctrl_rst_random_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_rst_transaction::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_rst_random_sequence::body()-fuse_ctrl_rst_transaction randomization failed") + // Send the transaction to the fuse_ctrl_rst_driver_bfm via the sequencer and fuse_ctrl_rst_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_rst_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_responder_sequence.svh new file mode 100644 index 000000000..85fe8a75e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_responder_sequence.svh @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_responder_sequence + extends fuse_ctrl_rst_sequence_base ; + + `uvm_object_utils( fuse_ctrl_rst_responder_sequence ) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_rst_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_rst_transaction::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_sequence_base.svh new file mode 100644 index 000000000..d6a30499e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_sequence_base.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_sequence_base extends uvmf_sequence_base #( + .REQ(fuse_ctrl_rst_transaction ), + .RSP(fuse_ctrl_rst_transaction )); + + `uvm_object_utils( fuse_ctrl_rst_sequence_base ) + + // variables + typedef fuse_ctrl_rst_transaction fuse_ctrl_rst_transaction_req_t; + fuse_ctrl_rst_transaction_req_t req; + typedef fuse_ctrl_rst_transaction fuse_ctrl_rst_transaction_rsp_t; + fuse_ctrl_rst_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_rst_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_rst_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction.svh new file mode 100644 index 000000000..806f8a2d2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction.svh @@ -0,0 +1,197 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_rst +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_transaction extends uvmf_transaction_base; + + `uvm_object_utils( fuse_ctrl_rst_transaction ) + + bit assert_rst ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_rst_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_rst_monitor and fuse_ctrl_rst_monitor_bfm + // This struct is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_MONITOR_STRUCT + fuse_ctrl_rst_monitor_s fuse_ctrl_rst_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_rst_monitor_s + // structure. The function returns the handle to the fuse_ctrl_rst_monitor_struct. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm + // to communicate initiator driven data to fuse_ctrl_rst_driver_bfm. + // This struct is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_INITIATOR_STRUCT + fuse_ctrl_rst_initiator_s fuse_ctrl_rst_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_rst_initiator_s + // structure. The function returns the handle to the fuse_ctrl_rst_initiator_struct. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_rst_driver and fuse_ctrl_rst_driver_bfm + // to communicate Responder driven data to fuse_ctrl_rst_driver_bfm. + // This struct is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_RESPONDER_STRUCT + fuse_ctrl_rst_responder_s fuse_ctrl_rst_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_rst_responder_s + // structure. The function returns the handle to the fuse_ctrl_rst_responder_struct. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_rst_macros.svh + `fuse_ctrl_rst_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("assert_rst:0x%x assert_otp_init:0x%x ",assert_rst,assert_otp_init); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_rst_transaction RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_rst_transaction RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.assert_rst = RHS.assert_rst; + this.assert_otp_init = RHS.assert_otp_init; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_rst_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,assert_rst,"assert_rst"); + $add_attribute(transaction_view_h,assert_otp_init,"assert_otp_init"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction_coverage.svh new file mode 100644 index 000000000..8bfc9decb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_transaction_coverage.svh @@ -0,0 +1,85 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_rst transaction information using +// a covergroup named fuse_ctrl_rst_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_rst_transaction_coverage extends uvm_subscriber #(.T(fuse_ctrl_rst_transaction )); + + `uvm_component_utils( fuse_ctrl_rst_transaction_coverage ) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_rst_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + assert_rst: coverpoint coverage_trans.assert_rst; + assert_otp_init: coverpoint coverage_trans.assert_otp_init; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_rst_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_rst_transaction_cg.set_inst_name($sformatf("fuse_ctrl_rst_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_rst_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/src/fuse_ctrl_rst_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/yaml/fuse_ctrl_rst_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/yaml/fuse_ctrl_rst_interface.yaml new file mode 100644 index 000000000..d439455ae --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_rst_pkg/yaml/fuse_ctrl_rst_interface.yaml @@ -0,0 +1,29 @@ +uvmf: + interfaces: + fuse_ctrl_rst: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: [] + ports: + - dir: output + name: rst_ni + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'False' + name: assert_rst + type: bit + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.project new file mode 100644 index 000000000..802c3e187 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_secreg_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..be911ec39 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..1eb10014e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_secreg_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_secreg_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f + +fuse_ctrl_secreg_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f + +fuse_ctrl_secreg_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f + +COMP_fuse_ctrl_secreg_axi_read_if_PKG_TGT_0 = q_comp_fuse_ctrl_secreg_axi_read_if_pkg +COMP_fuse_ctrl_secreg_axi_read_if_PKG_TGT_1 = v_comp_fuse_ctrl_secreg_axi_read_if_pkg +COMP_fuse_ctrl_secreg_axi_read_if_PKG_TGT = $(COMP_fuse_ctrl_secreg_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_secreg_axi_read_if_pkg: $(COMP_fuse_ctrl_secreg_axi_read_if_PKG_TGT) + +q_comp_fuse_ctrl_secreg_axi_read_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG_XRTL) + +v_comp_fuse_ctrl_secreg_axi_read_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_secreg_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_if_pkg += -I$(fuse_ctrl_secreg_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_if_pkg += $(fuse_ctrl_secreg_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_secreg_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..04f613c1e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_secreg_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if.compile new file mode 100644 index 000000000..ae2507ea9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_secreg_axi_read_if_hvl.compile + - fuse_ctrl_secreg_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..e97c29c20 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_secreg_axi_read_if_if.sv +src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv +src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_common.compile new file mode 100644 index 000000000..81dd659b6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..220cf1690 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..91290db0d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..3c42c25e3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hdl.compile new file mode 100644 index 000000000..a6821997e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_secreg_axi_read_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_secreg_axi_read_if_if.sv + - src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv + - src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hvl.compile new file mode 100644 index 000000000..8017b8d2c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_secreg_axi_read_if_common.compile +incdir: + - . +src: + - fuse_ctrl_secreg_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.sv new file mode 100644 index 000000000..91a38d680 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_secreg_axi_read_if_macros.svh" + + export fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_secreg_axi_read_if_typedefs.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_transaction.svh" + + `include "src/fuse_ctrl_secreg_axi_read_if_configuration.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_driver.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_monitor.svh" + + `include "src/fuse_ctrl_secreg_axi_read_if_transaction_coverage.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_sequence_base.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_random_sequence.svh" + + `include "src/fuse_ctrl_secreg_axi_read_if_responder_sequence.svh" + `include "src/fuse_ctrl_secreg_axi_read_if2reg_adapter.svh" + + `include "src/fuse_ctrl_secreg_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..3044046cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_secreg_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..e73051e81 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_secreg_axi_read_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_secreg_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..0009d2d8b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..ea92e98f5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/fuse_ctrl_secreg_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..98ba3aacb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_secreg_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_secreg_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_secreg_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_agent.svh new file mode 100644 index 000000000..d2895c679 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_secreg_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_secreg_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_secreg_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_configuration.svh new file mode 100644 index 000000000..981626306 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_secreg_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_secreg_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_secreg_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_CONFIGURATION_STRUCT + fuse_ctrl_secreg_axi_read_if_configuration_s fuse_ctrl_secreg_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_secreg_axi_read_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_if_configuration_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_secreg_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_secreg_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_secreg_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_secreg_axi_read_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver.svh new file mode 100644 index 000000000..ebbf22afa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_secreg_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. +`fuse_ctrl_secreg_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_if_initiator_s fuse_ctrl_secreg_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. +`fuse_ctrl_secreg_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_if_responder_s fuse_ctrl_secreg_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_secreg_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_secreg_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_secreg_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_secreg_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..b440efec7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_secreg_axi_read_if signal driving. It is +// accessed by the uvm fuse_ctrl_secreg_axi_read_if driver through a virtual interface +// handle in the fuse_ctrl_secreg_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_secreg_axi_read_if_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_secreg_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_if_macros.svh" + +interface fuse_ctrl_secreg_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_secreg_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_secreg_axi_read_if_pkg::fuse_ctrl_secreg_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_secreg_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_secreg_axi_read_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_secreg_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. + `fuse_ctrl_secreg_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. + `fuse_ctrl_secreg_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_secreg_axi_read_if_configuration_s fuse_ctrl_secreg_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_secreg_axi_read_if_initiator_s fuse_ctrl_secreg_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_secreg_axi_read_if_responder_s fuse_ctrl_secreg_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_secreg_axi_read_if_initiator_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Members within the fuse_ctrl_secreg_axi_read_if_responder_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + initiator_struct = fuse_ctrl_secreg_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_secreg_axi_read_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_secreg_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_secreg_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_secreg_axi_read_if_initiator_s fuse_ctrl_secreg_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_secreg_axi_read_if_responder_s fuse_ctrl_secreg_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_secreg_axi_read_if_initiator_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Variables within the fuse_ctrl_secreg_axi_read_if_responder_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arlock_i; // + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_secreg_axi_read_if_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_secreg_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_secreg_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_if.sv new file mode 100644 index 000000000..91845e87d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_secreg_axi_read_if interface signals. +// It is instantiated once per fuse_ctrl_secreg_axi_read_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_secreg_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_secreg_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_if_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; + +interface fuse_ctrl_secreg_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_macros.svh new file mode 100644 index 000000000..b4d9deeba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_secreg_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_secreg_axi_read_if_configuration class. +// + `define fuse_ctrl_secreg_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_secreg_axi_read_if_configuration_s; + + `define fuse_ctrl_secreg_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_if_configuration_s to_struct();\ + fuse_ctrl_secreg_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_secreg_axi_read_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_secreg_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_secreg_axi_read_if_configuration_s fuse_ctrl_secreg_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_secreg_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_secreg_axi_read_if_transaction class. +// + `define fuse_ctrl_secreg_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_if_monitor_s; + + `define fuse_ctrl_secreg_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_if_monitor_s to_monitor_struct();\ + fuse_ctrl_secreg_axi_read_if_monitor_struct = \ + { \ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_secreg_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_secreg_axi_read_if_monitor_s fuse_ctrl_secreg_axi_read_if_monitor_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_secreg_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_if_initiator_s; + + `define fuse_ctrl_secreg_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_if_initiator_s to_initiator_struct();\ + fuse_ctrl_secreg_axi_read_if_initiator_struct = \ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_secreg_axi_read_if_initiator_s fuse_ctrl_secreg_axi_read_if_initiator_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_secreg_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_if_responder_s; + + `define fuse_ctrl_secreg_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_if_responder_s to_responder_struct();\ + fuse_ctrl_secreg_axi_read_if_responder_struct = \ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_if_responder_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_secreg_axi_read_if_responder_s fuse_ctrl_secreg_axi_read_if_responder_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor.svh new file mode 100644 index 000000000..6addcdb7b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_secreg_axi_read_if transactions observed by the +// fuse_ctrl_secreg_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_secreg_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_secreg_axi_read_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_secreg_axi_read_if_monitor_s fuse_ctrl_secreg_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_secreg_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..7bba9981c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_secreg_axi_read_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_secreg_axi_read_if monitor through a virtual +// interface handle in the fuse_ctrl_secreg_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_secreg_axi_read_if_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_secreg_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_if_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_if_macros.svh" + + +interface fuse_ctrl_secreg_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_secreg_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_secreg_axi_read_if_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_if_monitor_s fuse_ctrl_secreg_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_secreg_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_secreg_axi_read_if_pkg::fuse_ctrl_secreg_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_secreg_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_secreg_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_secreg_axi_read_if_configuration_s fuse_ctrl_secreg_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_secreg_axi_read_if_monitor_s fuse_ctrl_secreg_axi_read_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_araddr + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arvalid + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arburst + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arsize + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arlen + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_aruser + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arid + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_arlock + // // fuse_ctrl_secreg_axi_read_if_monitor_struct.secreg_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_secreg_axi_read_if_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..648972d51 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_secreg_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_secreg_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_secreg_axi_read_if_random_sequence::body()-fuse_ctrl_secreg_axi_read_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_secreg_axi_read_if_driver_bfm via the sequencer and fuse_ctrl_secreg_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_secreg_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..709581bdd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_secreg_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..66bc21078 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_if_transaction_req_t; + fuse_ctrl_secreg_axi_read_if_transaction_req_t req; + typedef fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_if_transaction_rsp_t; + fuse_ctrl_secreg_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_secreg_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_secreg_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction.svh new file mode 100644 index 000000000..c58498d8f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_secreg_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] secreg_araddr ; + logic secreg_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + logic [2:0] secreg_arsize ; + logic [7:0] secreg_arlen ; + logic [UW-1:0] secreg_aruser ; + logic [IW-1:0] secreg_arid ; + logic secreg_arlock ; + logic secreg_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_secreg_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_secreg_axi_read_if_monitor and fuse_ctrl_secreg_axi_read_if_monitor_bfm + // This struct is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_if_monitor_s fuse_ctrl_secreg_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_if_monitor_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_if_initiator_s fuse_ctrl_secreg_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_if_initiator_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_secreg_axi_read_if_driver and fuse_ctrl_secreg_axi_read_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_if_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_if_responder_s fuse_ctrl_secreg_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_if_responder_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_if_macros.svh + `fuse_ctrl_secreg_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_araddr:0x%x secreg_arvalid:0x%x secreg_arburst:0x%x secreg_arsize:0x%x secreg_arlen:0x%x secreg_aruser:0x%x secreg_arid:0x%x secreg_arlock:0x%x secreg_rready:0x%x ",secreg_araddr,secreg_arvalid,secreg_arburst,secreg_arsize,secreg_arlen,secreg_aruser,secreg_arid,secreg_arlock,secreg_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_araddr = RHS.secreg_araddr; + this.secreg_arvalid = RHS.secreg_arvalid; + this.secreg_arburst = RHS.secreg_arburst; + this.secreg_arsize = RHS.secreg_arsize; + this.secreg_arlen = RHS.secreg_arlen; + this.secreg_aruser = RHS.secreg_aruser; + this.secreg_arid = RHS.secreg_arid; + this.secreg_arlock = RHS.secreg_arlock; + this.secreg_rready = RHS.secreg_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_secreg_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_araddr,"secreg_araddr"); + $add_attribute(transaction_view_h,secreg_arvalid,"secreg_arvalid"); + $add_attribute(transaction_view_h,secreg_arburst,"secreg_arburst"); + $add_attribute(transaction_view_h,secreg_arsize,"secreg_arsize"); + $add_attribute(transaction_view_h,secreg_arlen,"secreg_arlen"); + $add_attribute(transaction_view_h,secreg_aruser,"secreg_aruser"); + $add_attribute(transaction_view_h,secreg_arid,"secreg_arid"); + $add_attribute(transaction_view_h,secreg_arlock,"secreg_arlock"); + $add_attribute(transaction_view_h,secreg_rready,"secreg_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..4da8fb856 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_secreg_axi_read_if transaction information using +// a covergroup named fuse_ctrl_secreg_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_secreg_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_araddr: coverpoint coverage_trans.secreg_araddr; + secreg_arvalid: coverpoint coverage_trans.secreg_arvalid; + secreg_arburst: coverpoint coverage_trans.secreg_arburst; + secreg_arsize: coverpoint coverage_trans.secreg_arsize; + secreg_arlen: coverpoint coverage_trans.secreg_arlen; + secreg_aruser: coverpoint coverage_trans.secreg_aruser; + secreg_arid: coverpoint coverage_trans.secreg_arid; + secreg_arlock: coverpoint coverage_trans.secreg_arlock; + secreg_rready: coverpoint coverage_trans.secreg_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_secreg_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_secreg_axi_read_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_secreg_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/src/fuse_ctrl_secreg_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/yaml/fuse_ctrl_secreg_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/yaml/fuse_ctrl_secreg_axi_read_if_interface.yaml new file mode 100644 index 000000000..dfcf19887 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_if_pkg/yaml/fuse_ctrl_secreg_axi_read_if_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_secreg_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: secreg_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.project new file mode 100644 index 000000000..9b5119db2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_secreg_axi_read_in_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.svproject new file mode 100644 index 000000000..216cb589b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/Makefile new file mode 100644 index 000000000..ff0b63afb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_secreg_axi_read_in_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_secreg_axi_read_in_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hvl.f + +fuse_ctrl_secreg_axi_read_in_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hdl.f + +fuse_ctrl_secreg_axi_read_in_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_xrtl.f + +COMP_fuse_ctrl_secreg_axi_read_in_if_PKG_TGT_0 = q_comp_fuse_ctrl_secreg_axi_read_in_if_pkg +COMP_fuse_ctrl_secreg_axi_read_in_if_PKG_TGT_1 = v_comp_fuse_ctrl_secreg_axi_read_in_if_pkg +COMP_fuse_ctrl_secreg_axi_read_in_if_PKG_TGT = $(COMP_fuse_ctrl_secreg_axi_read_in_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_secreg_axi_read_in_if_pkg: $(COMP_fuse_ctrl_secreg_axi_read_in_if_PKG_TGT) + +q_comp_fuse_ctrl_secreg_axi_read_in_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG_XRTL) + +v_comp_fuse_ctrl_secreg_axi_read_in_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_secreg_axi_read_in_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_in_if_pkg += -I$(fuse_ctrl_secreg_axi_read_in_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_in_if_pkg += $(fuse_ctrl_secreg_axi_read_in_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_in_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_secreg_axi_read_in_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_in_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_in_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/compile.do new file mode 100644 index 000000000..67fa90a30 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_secreg_axi_read_in_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if.compile new file mode 100644 index 000000000..edfeedfc0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_secreg_axi_read_in_if_hvl.compile + - fuse_ctrl_secreg_axi_read_in_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_bfm.vinfo new file mode 100644 index 000000000..ff090bad6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_secreg_axi_read_in_if_if.sv +src/fuse_ctrl_secreg_axi_read_in_if_driver_bfm.sv +src/fuse_ctrl_secreg_axi_read_in_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_common.compile new file mode 100644 index 000000000..289cd2865 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hdl.f new file mode 100644 index 000000000..a40d395c6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hvl.f new file mode 100644 index 000000000..8d8670a23 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_xrtl.f new file mode 100644 index 000000000..81f832e79 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hdl.compile new file mode 100644 index 000000000..a29a791a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_secreg_axi_read_in_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_secreg_axi_read_in_if_if.sv + - src/fuse_ctrl_secreg_axi_read_in_if_monitor_bfm.sv + - src/fuse_ctrl_secreg_axi_read_in_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hvl.compile new file mode 100644 index 000000000..5ea481a70 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_secreg_axi_read_in_if_common.compile +incdir: + - . +src: + - fuse_ctrl_secreg_axi_read_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.sv new file mode 100644 index 000000000..ca2fa65e5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_in_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_secreg_axi_read_in_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_secreg_axi_read_in_if_macros.svh" + + export fuse_ctrl_secreg_axi_read_in_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_secreg_axi_read_in_if_typedefs.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_if_transaction.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_if_configuration.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_if_driver.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_if_monitor.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_if_transaction_coverage.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_if_sequence_base.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_if_random_sequence.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_if_responder_sequence.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_if2reg_adapter.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.vinfo new file mode 100644 index 000000000..d85f8b901 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_secreg_axi_read_in_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv new file mode 100644 index 000000000..faeaeed8a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_in_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_secreg_axi_read_in_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.vinfo new file mode 100644 index 000000000..44fb0c125 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_secreg_axi_read_in_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_sve.F new file mode 100644 index 000000000..1256ffedb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/fuse_ctrl_secreg_axi_read_in_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if2reg_adapter.svh new file mode 100644 index 000000000..cd5608daf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_secreg_axi_read_in_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_secreg_axi_read_in_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_secreg_axi_read_in_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_agent.svh new file mode 100644 index 000000000..d6359882b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_secreg_axi_read_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_secreg_axi_read_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_secreg_axi_read_in_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_configuration.svh new file mode 100644 index 000000000..f5aa0e94e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_secreg_axi_read_in_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_secreg_axi_read_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_secreg_axi_read_in_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_STRUCT + fuse_ctrl_secreg_axi_read_in_if_configuration_s fuse_ctrl_secreg_axi_read_in_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_secreg_axi_read_in_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_if_configuration_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_secreg_axi_read_in_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_secreg_axi_read_in_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_secreg_axi_read_in_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_secreg_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_secreg_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_secreg_axi_read_in_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_in_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_secreg_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver.svh new file mode 100644 index 000000000..e4ff24f99 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_in_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_secreg_axi_read_in_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_secreg_axi_read_in_if_driver and fuse_ctrl_secreg_axi_read_in_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_secreg_axi_read_in_if_driver_bfm. +`fuse_ctrl_secreg_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_in_if_initiator_s fuse_ctrl_secreg_axi_read_in_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_secreg_axi_read_in_if_driver and fuse_ctrl_secreg_axi_read_in_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_secreg_axi_read_in_if_driver_bfm. +`fuse_ctrl_secreg_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_in_if_responder_s fuse_ctrl_secreg_axi_read_in_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_secreg_axi_read_in_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_secreg_axi_read_in_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_secreg_axi_read_in_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_secreg_axi_read_in_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver_bfm.sv new file mode 100644 index 000000000..95d7f303a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_secreg_axi_read_in_if signal driving. It is +// accessed by the uvm fuse_ctrl_secreg_axi_read_in_if driver through a virtual interface +// handle in the fuse_ctrl_secreg_axi_read_in_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_secreg_axi_read_in_if_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_secreg_axi_read_in_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_in_if_macros.svh" + +interface fuse_ctrl_secreg_axi_read_in_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_secreg_axi_read_in_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_in_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_secreg_axi_read_in_if_pkg::fuse_ctrl_secreg_axi_read_in_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_secreg_axi_read_in_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_secreg_axi_read_in_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_in_if_driver and fuse_ctrl_secreg_axi_read_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_in_if_driver_bfm. + `fuse_ctrl_secreg_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_in_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_secreg_axi_read_in_if_driver and fuse_ctrl_secreg_axi_read_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_in_if_driver_bfm. + `fuse_ctrl_secreg_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_in_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_secreg_axi_read_in_if_configuration_s fuse_ctrl_secreg_axi_read_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_secreg_axi_read_in_if_initiator_s fuse_ctrl_secreg_axi_read_in_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_secreg_axi_read_in_if_responder_s fuse_ctrl_secreg_axi_read_in_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_secreg_axi_read_in_if_initiator_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Members within the fuse_ctrl_secreg_axi_read_in_if_responder_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + initiator_struct = fuse_ctrl_secreg_axi_read_in_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_secreg_axi_read_in_if_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_secreg_axi_read_in_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_secreg_axi_read_in_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_secreg_axi_read_in_if_initiator_s fuse_ctrl_secreg_axi_read_in_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_secreg_axi_read_in_if_responder_s fuse_ctrl_secreg_axi_read_in_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_secreg_axi_read_in_if_initiator_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Variables within the fuse_ctrl_secreg_axi_read_in_if_responder_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = arlock_i; // + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_secreg_axi_read_in_if_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_secreg_axi_read_in_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_secreg_axi_read_in_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_if.sv new file mode 100644 index 000000000..207866a2c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_secreg_axi_read_in_if interface signals. +// It is instantiated once per fuse_ctrl_secreg_axi_read_in_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_secreg_axi_read_in_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_secreg_axi_read_in_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_if_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_in_if_pkg_hdl::*; + +interface fuse_ctrl_secreg_axi_read_in_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_macros.svh new file mode 100644 index 000000000..70d9a7aed --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_secreg_axi_read_in_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_secreg_axi_read_in_if_configuration class. +// + `define fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_secreg_axi_read_in_if_configuration_s; + + `define fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_if_configuration_s to_struct();\ + fuse_ctrl_secreg_axi_read_in_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_secreg_axi_read_in_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_secreg_axi_read_in_if_configuration_s fuse_ctrl_secreg_axi_read_in_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_secreg_axi_read_in_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_secreg_axi_read_in_if_transaction class. +// + `define fuse_ctrl_secreg_axi_read_in_if_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_in_if_monitor_s; + + `define fuse_ctrl_secreg_axi_read_in_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_if_monitor_s to_monitor_struct();\ + fuse_ctrl_secreg_axi_read_in_if_monitor_struct = \ + { \ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_in_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_secreg_axi_read_in_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_secreg_axi_read_in_if_monitor_s fuse_ctrl_secreg_axi_read_in_if_monitor_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_in_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_secreg_axi_read_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_in_if_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_in_if_initiator_s; + + `define fuse_ctrl_secreg_axi_read_in_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_if_initiator_s to_initiator_struct();\ + fuse_ctrl_secreg_axi_read_in_if_initiator_struct = \ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_in_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_in_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_secreg_axi_read_in_if_initiator_s fuse_ctrl_secreg_axi_read_in_if_initiator_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_in_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_secreg_axi_read_in_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_in_if_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_in_if_responder_s; + + `define fuse_ctrl_secreg_axi_read_in_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_if_responder_s to_responder_struct();\ + fuse_ctrl_secreg_axi_read_in_if_responder_struct = \ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_in_if_responder_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_in_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_secreg_axi_read_in_if_responder_s fuse_ctrl_secreg_axi_read_in_if_responder_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_in_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor.svh new file mode 100644 index 000000000..f6b696c0a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_secreg_axi_read_in_if transactions observed by the +// fuse_ctrl_secreg_axi_read_in_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_in_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_in_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_secreg_axi_read_in_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_secreg_axi_read_in_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_secreg_axi_read_in_if_monitor_s fuse_ctrl_secreg_axi_read_in_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_secreg_axi_read_in_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor_bfm.sv new file mode 100644 index 000000000..2a6b5dd00 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_secreg_axi_read_in_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_secreg_axi_read_in_if monitor through a virtual +// interface handle in the fuse_ctrl_secreg_axi_read_in_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_secreg_axi_read_in_if_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_in_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_secreg_axi_read_in_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_in_if_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_in_if_macros.svh" + + +interface fuse_ctrl_secreg_axi_read_in_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_secreg_axi_read_in_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_in_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_secreg_axi_read_in_if_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_in_if_monitor_s fuse_ctrl_secreg_axi_read_in_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_secreg_axi_read_in_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_secreg_axi_read_in_if_pkg::fuse_ctrl_secreg_axi_read_in_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_secreg_axi_read_in_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_secreg_axi_read_in_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_secreg_axi_read_in_if_configuration_s fuse_ctrl_secreg_axi_read_in_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_in_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_secreg_axi_read_in_if_monitor_s fuse_ctrl_secreg_axi_read_in_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_araddr + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_arvalid + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_arburst + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_arsize + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_arlen + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_aruser + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_arid + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_arlock + // // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.secreg_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_secreg_axi_read_in_if_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_random_sequence.svh new file mode 100644 index 000000000..fdbf06a6e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_secreg_axi_read_in_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_secreg_axi_read_in_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_secreg_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_secreg_axi_read_in_if_random_sequence::body()-fuse_ctrl_secreg_axi_read_in_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_secreg_axi_read_in_if_driver_bfm via the sequencer and fuse_ctrl_secreg_axi_read_in_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_secreg_axi_read_in_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_responder_sequence.svh new file mode 100644 index 000000000..e270aad62 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_in_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_secreg_axi_read_in_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_secreg_axi_read_in_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_sequence_base.svh new file mode 100644 index 000000000..ca8e9725f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_in_if_transaction_req_t; + fuse_ctrl_secreg_axi_read_in_if_transaction_req_t req; + typedef fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_in_if_transaction_rsp_t; + fuse_ctrl_secreg_axi_read_in_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_secreg_axi_read_in_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_secreg_axi_read_in_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction.svh new file mode 100644 index 000000000..aa60a802f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_secreg_axi_read_in_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] secreg_araddr ; + logic secreg_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + logic [2:0] secreg_arsize ; + logic [7:0] secreg_arlen ; + logic [UW-1:0] secreg_aruser ; + logic [IW-1:0] secreg_arid ; + logic secreg_arlock ; + logic secreg_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_secreg_axi_read_in_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_secreg_axi_read_in_if_monitor and fuse_ctrl_secreg_axi_read_in_if_monitor_bfm + // This struct is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_in_if_monitor_s fuse_ctrl_secreg_axi_read_in_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_in_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_if_monitor_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_in_if_driver and fuse_ctrl_secreg_axi_read_in_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_in_if_initiator_s fuse_ctrl_secreg_axi_read_in_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_in_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_if_initiator_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_secreg_axi_read_in_if_driver and fuse_ctrl_secreg_axi_read_in_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_in_if_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_in_if_responder_s fuse_ctrl_secreg_axi_read_in_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_in_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_if_responder_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_if_macros.svh + `fuse_ctrl_secreg_axi_read_in_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_araddr:0x%x secreg_arvalid:0x%x secreg_arburst:0x%x secreg_arsize:0x%x secreg_arlen:0x%x secreg_aruser:0x%x secreg_arid:0x%x secreg_arlock:0x%x secreg_rready:0x%x ",secreg_araddr,secreg_arvalid,secreg_arburst,secreg_arsize,secreg_arlen,secreg_aruser,secreg_arid,secreg_arlock,secreg_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_araddr = RHS.secreg_araddr; + this.secreg_arvalid = RHS.secreg_arvalid; + this.secreg_arburst = RHS.secreg_arburst; + this.secreg_arsize = RHS.secreg_arsize; + this.secreg_arlen = RHS.secreg_arlen; + this.secreg_aruser = RHS.secreg_aruser; + this.secreg_arid = RHS.secreg_arid; + this.secreg_arlock = RHS.secreg_arlock; + this.secreg_rready = RHS.secreg_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_secreg_axi_read_in_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_araddr,"secreg_araddr"); + $add_attribute(transaction_view_h,secreg_arvalid,"secreg_arvalid"); + $add_attribute(transaction_view_h,secreg_arburst,"secreg_arburst"); + $add_attribute(transaction_view_h,secreg_arsize,"secreg_arsize"); + $add_attribute(transaction_view_h,secreg_arlen,"secreg_arlen"); + $add_attribute(transaction_view_h,secreg_aruser,"secreg_aruser"); + $add_attribute(transaction_view_h,secreg_arid,"secreg_arid"); + $add_attribute(transaction_view_h,secreg_arlock,"secreg_arlock"); + $add_attribute(transaction_view_h,secreg_rready,"secreg_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction_coverage.svh new file mode 100644 index 000000000..3fe27f376 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_secreg_axi_read_in_if transaction information using +// a covergroup named fuse_ctrl_secreg_axi_read_in_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_secreg_axi_read_in_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_secreg_axi_read_in_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_araddr: coverpoint coverage_trans.secreg_araddr; + secreg_arvalid: coverpoint coverage_trans.secreg_arvalid; + secreg_arburst: coverpoint coverage_trans.secreg_arburst; + secreg_arsize: coverpoint coverage_trans.secreg_arsize; + secreg_arlen: coverpoint coverage_trans.secreg_arlen; + secreg_aruser: coverpoint coverage_trans.secreg_aruser; + secreg_arid: coverpoint coverage_trans.secreg_arid; + secreg_arlock: coverpoint coverage_trans.secreg_arlock; + secreg_rready: coverpoint coverage_trans.secreg_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_secreg_axi_read_in_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_secreg_axi_read_in_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_in_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_secreg_axi_read_in_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/src/fuse_ctrl_secreg_axi_read_in_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/yaml/fuse_ctrl_secreg_axi_read_in_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/yaml/fuse_ctrl_secreg_axi_read_in_if_interface.yaml new file mode 100644 index 000000000..75a5a8826 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_if_pkg/yaml/fuse_ctrl_secreg_axi_read_in_if_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_secreg_axi_read_in_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: secreg_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.project new file mode 100644 index 000000000..a4da8e376 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_secreg_axi_read_in_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.svproject new file mode 100644 index 000000000..52a9f8cb9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/Makefile new file mode 100644 index 000000000..0c9fcbd1e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_secreg_axi_read_in interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_secreg_axi_read_in_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hvl.f + +fuse_ctrl_secreg_axi_read_in_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hdl.f + +fuse_ctrl_secreg_axi_read_in_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_xrtl.f + +COMP_fuse_ctrl_secreg_axi_read_in_PKG_TGT_0 = q_comp_fuse_ctrl_secreg_axi_read_in_pkg +COMP_fuse_ctrl_secreg_axi_read_in_PKG_TGT_1 = v_comp_fuse_ctrl_secreg_axi_read_in_pkg +COMP_fuse_ctrl_secreg_axi_read_in_PKG_TGT = $(COMP_fuse_ctrl_secreg_axi_read_in_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_secreg_axi_read_in_pkg: $(COMP_fuse_ctrl_secreg_axi_read_in_PKG_TGT) + +q_comp_fuse_ctrl_secreg_axi_read_in_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG_XRTL) + +v_comp_fuse_ctrl_secreg_axi_read_in_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_in_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_secreg_axi_read_in_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_in_pkg += -I$(fuse_ctrl_secreg_axi_read_in_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_in_pkg += $(fuse_ctrl_secreg_axi_read_in_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_in_pkg += \ + \ + -o .so + +comp_fuse_ctrl_secreg_axi_read_in_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_in_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_in_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_in_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/compile.do new file mode 100644 index 000000000..88878d432 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_secreg_axi_read_in interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in.compile new file mode 100644 index 000000000..30a6c81f0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_secreg_axi_read_in_hvl.compile + - fuse_ctrl_secreg_axi_read_in_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_bfm.vinfo new file mode 100644 index 000000000..7a7c867b2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_secreg_axi_read_in_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_secreg_axi_read_in_if.sv +src/fuse_ctrl_secreg_axi_read_in_driver_bfm.sv +src/fuse_ctrl_secreg_axi_read_in_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_common.compile new file mode 100644 index 000000000..34e8920b8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hdl.f new file mode 100644 index 000000000..5f203b951 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hvl.f new file mode 100644 index 000000000..6917a8ff3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_xrtl.f new file mode 100644 index 000000000..4801037d9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hdl.compile new file mode 100644 index 000000000..822c6dae4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_secreg_axi_read_in_common.compile +incdir: + - . +src: + - src/fuse_ctrl_secreg_axi_read_in_if.sv + - src/fuse_ctrl_secreg_axi_read_in_monitor_bfm.sv + - src/fuse_ctrl_secreg_axi_read_in_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hvl.compile new file mode 100644 index 000000000..baf1ae95d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_secreg_axi_read_in_common.compile +incdir: + - . +src: + - fuse_ctrl_secreg_axi_read_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.sv new file mode 100644 index 000000000..411b4957f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_in_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_secreg_axi_read_in_macros.svh" + + export fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_secreg_axi_read_in_typedefs.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_transaction.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_configuration.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_driver.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_monitor.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_transaction_coverage.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_sequence_base.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_random_sequence.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_responder_sequence.svh" + `include "src/fuse_ctrl_secreg_axi_read_in2reg_adapter.svh" + + `include "src/fuse_ctrl_secreg_axi_read_in_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.vinfo new file mode 100644 index 000000000..a76e85842 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_secreg_axi_read_in_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_secreg_axi_read_in_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv new file mode 100644 index 000000000..1b90f0274 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_in_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_secreg_axi_read_in_typedefs_hdl.svh" + `include "src/fuse_ctrl_secreg_axi_read_in_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.vinfo new file mode 100644 index 000000000..269b5c06e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_secreg_axi_read_in_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_sve.F new file mode 100644 index 000000000..8fec4a904 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/fuse_ctrl_secreg_axi_read_in_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in2reg_adapter.svh new file mode 100644 index 000000000..c7d2b13f0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_secreg_axi_read_in interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_secreg_axi_read_in2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_secreg_axi_read_in2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_agent.svh new file mode 100644 index 000000000..59c7181b3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_secreg_axi_read_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_secreg_axi_read_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_secreg_axi_read_in_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_configuration.svh new file mode 100644 index 000000000..c4124708f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_secreg_axi_read_in agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_secreg_axi_read_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_secreg_axi_read_in_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_CONFIGURATION_STRUCT + fuse_ctrl_secreg_axi_read_in_configuration_s fuse_ctrl_secreg_axi_read_in_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_secreg_axi_read_in_configuration_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_configuration_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_secreg_axi_read_in_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_secreg_axi_read_in_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_secreg_axi_read_in_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_secreg_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_secreg_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_secreg_axi_read_in_configuration_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_in_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_secreg_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver.svh new file mode 100644 index 000000000..dae487dcd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_in_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_secreg_axi_read_in_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_secreg_axi_read_in_driver and fuse_ctrl_secreg_axi_read_in_driver_bfm +// to communicate initiator driven data to fuse_ctrl_secreg_axi_read_in_driver_bfm. +`fuse_ctrl_secreg_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_in_initiator_s fuse_ctrl_secreg_axi_read_in_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_secreg_axi_read_in_driver and fuse_ctrl_secreg_axi_read_in_driver_bfm +// to communicate Responder driven data to fuse_ctrl_secreg_axi_read_in_driver_bfm. +`fuse_ctrl_secreg_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_in_responder_s fuse_ctrl_secreg_axi_read_in_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_secreg_axi_read_in_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_secreg_axi_read_in_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_secreg_axi_read_in_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_secreg_axi_read_in_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver_bfm.sv new file mode 100644 index 000000000..4b9b81520 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_driver_bfm.sv @@ -0,0 +1,385 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_secreg_axi_read_in signal driving. It is +// accessed by the uvm fuse_ctrl_secreg_axi_read_in driver through a virtual interface +// handle in the fuse_ctrl_secreg_axi_read_in configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_secreg_axi_read_in_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_secreg_axi_read_in_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_in_macros.svh" + +interface fuse_ctrl_secreg_axi_read_in_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_secreg_axi_read_in_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_in_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + + // INITIATOR mode output signals + tri [AW-1:0] araddr_i; + reg [AW-1:0] araddr_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] arburst_o = 'bz; + tri [2:0] arsize_i; + reg [2:0] arsize_o = 'bz; + tri [7:0] arlen_i; + reg [7:0] arlen_o = 'bz; + tri [UW-1:0] aruser_i; + reg [UW-1:0] aruser_o = 'bz; + tri [IW-1:0] arid_i; + reg [IW-1:0] arid_o = 'bz; + tri arlock_i; + reg arlock_o = 'bz; + tri arvalid_i; + reg arvalid_o = 'bz; + tri rready_i; + reg rready_o = 'bz; + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz; + assign araddr_i = bus.araddr; + assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz; + assign arburst_i = bus.arburst; + assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz; + assign arsize_i = bus.arsize; + assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz; + assign arlen_i = bus.arlen; + assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz; + assign aruser_i = bus.aruser; + assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz; + assign arid_i = bus.arid; + assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz; + assign arlock_i = bus.arlock; + assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz; + assign arvalid_i = bus.arvalid; + assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz; + assign rready_i = bus.rready; + + // Proxy handle to UVM driver + fuse_ctrl_secreg_axi_read_in_pkg::fuse_ctrl_secreg_axi_read_in_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_secreg_axi_read_in_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_secreg_axi_read_in_driver to this BFM + // **************************************************************************** + `fuse_ctrl_secreg_axi_read_in_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_in_driver and fuse_ctrl_secreg_axi_read_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_in_driver_bfm. + `fuse_ctrl_secreg_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_in_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_secreg_axi_read_in_driver and fuse_ctrl_secreg_axi_read_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_in_driver_bfm. + `fuse_ctrl_secreg_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_in_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + // INITIATOR mode output signals + araddr_o <= 'bz; + arburst_o <= 'bz; + arsize_o <= 'bz; + arlen_o <= 'bz; + aruser_o <= 'bz; + arid_o <= 'bz; + arlock_o <= 'bz; + arvalid_o <= 'bz; + rready_o <= 'bz; + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_secreg_axi_read_in_configuration_s fuse_ctrl_secreg_axi_read_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_secreg_axi_read_in_initiator_s fuse_ctrl_secreg_axi_read_in_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_secreg_axi_read_in_responder_s fuse_ctrl_secreg_axi_read_in_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_secreg_axi_read_in_initiator_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Members within the fuse_ctrl_secreg_axi_read_in_responder_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + initiator_struct = fuse_ctrl_secreg_axi_read_in_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // araddr_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // [AW-1:0] + // arburst_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // arsize_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // [2:0] + // arlen_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // [7:0] + // aruser_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // [UW-1:0] + // arid_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // [IW-1:0] + // arlock_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // + // arvalid_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // + // rready_o <= fuse_ctrl_secreg_axi_read_in_initiator_struct.xyz; // + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_secreg_axi_read_in_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_secreg_axi_read_in_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_secreg_axi_read_in_initiator_s fuse_ctrl_secreg_axi_read_in_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_secreg_axi_read_in_responder_s fuse_ctrl_secreg_axi_read_in_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_secreg_axi_read_in_initiator_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Variables within the fuse_ctrl_secreg_axi_read_in_responder_struct: + // logic [AW-1:0] secreg_araddr ; + // logic secreg_arvalid ; + // logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + // logic [2:0] secreg_arsize ; + // logic [7:0] secreg_arlen ; + // logic [UW-1:0] secreg_aruser ; + // logic [IW-1:0] secreg_arid ; + // logic secreg_arlock ; + // logic secreg_rready ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = arlock_i; // + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = arvalid_i; // + // fuse_ctrl_secreg_axi_read_in_responder_struct.xyz = rready_i; // + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_secreg_axi_read_in_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_secreg_axi_read_in_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_if.sv new file mode 100644 index 000000000..74f7ba6cf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_if.sv @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_secreg_axi_read_in interface signals. +// It is instantiated once per fuse_ctrl_secreg_axi_read_in bus. Bus Functional Models, +// BFM's named fuse_ctrl_secreg_axi_read_in_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_secreg_axi_read_in_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.araddr), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.arburst), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.arsize), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.arlen), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.aruser), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.arid), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.arlock), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.arvalid), // Agent output +// .dut_signal_port(fuse_ctrl_secreg_axi_read_in_bus.rready), // Agent output + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; + +interface fuse_ctrl_secreg_axi_read_in_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri [AW-1:0] araddr, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst, + inout tri [2:0] arsize, + inout tri [7:0] arlen, + inout tri [UW-1:0] aruser, + inout tri [IW-1:0] arid, + inout tri arlock, + inout tri arvalid, + inout tri rready + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + output araddr, + output arburst, + output arsize, + output arlen, + output aruser, + output arid, + output arlock, + output arvalid, + output rready + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + input araddr, + input arburst, + input arsize, + input arlen, + input aruser, + input arid, + input arlock, + input arvalid, + input rready + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_macros.svh new file mode 100644 index 000000000..fd62fe9d0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_macros.svh @@ -0,0 +1,207 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_secreg_axi_read_in package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_secreg_axi_read_in_configuration class. +// + `define fuse_ctrl_secreg_axi_read_in_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_secreg_axi_read_in_configuration_s; + + `define fuse_ctrl_secreg_axi_read_in_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_configuration_s to_struct();\ + fuse_ctrl_secreg_axi_read_in_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_secreg_axi_read_in_configuration_struct );\ + endfunction + + `define fuse_ctrl_secreg_axi_read_in_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_secreg_axi_read_in_configuration_s fuse_ctrl_secreg_axi_read_in_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_secreg_axi_read_in_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_secreg_axi_read_in_transaction class. +// + `define fuse_ctrl_secreg_axi_read_in_MONITOR_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_in_monitor_s; + + `define fuse_ctrl_secreg_axi_read_in_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_monitor_s to_monitor_struct();\ + fuse_ctrl_secreg_axi_read_in_monitor_struct = \ + { \ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_in_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_secreg_axi_read_in_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_secreg_axi_read_in_monitor_s fuse_ctrl_secreg_axi_read_in_monitor_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_in_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_secreg_axi_read_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_in_INITIATOR_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_in_initiator_s; + + `define fuse_ctrl_secreg_axi_read_in_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_initiator_s to_initiator_struct();\ + fuse_ctrl_secreg_axi_read_in_initiator_struct = \ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_in_initiator_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_in_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_secreg_axi_read_in_initiator_s fuse_ctrl_secreg_axi_read_in_initiator_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_in_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_secreg_axi_read_in_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_in_RESPONDER_STRUCT typedef struct packed { \ + logic [AW-1:0] secreg_araddr ; \ + logic secreg_arvalid ; \ + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; \ + logic [2:0] secreg_arsize ; \ + logic [7:0] secreg_arlen ; \ + logic [UW-1:0] secreg_aruser ; \ + logic [IW-1:0] secreg_arid ; \ + logic secreg_arlock ; \ + logic secreg_rready ; \ + } fuse_ctrl_secreg_axi_read_in_responder_s; + + `define fuse_ctrl_secreg_axi_read_in_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_in_responder_s to_responder_struct();\ + fuse_ctrl_secreg_axi_read_in_responder_struct = \ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + };\ + return ( fuse_ctrl_secreg_axi_read_in_responder_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_in_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_secreg_axi_read_in_responder_s fuse_ctrl_secreg_axi_read_in_responder_struct);\ + {\ + this.secreg_araddr , \ + this.secreg_arvalid , \ + this.secreg_arburst , \ + this.secreg_arsize , \ + this.secreg_arlen , \ + this.secreg_aruser , \ + this.secreg_arid , \ + this.secreg_arlock , \ + this.secreg_rready \ + } = fuse_ctrl_secreg_axi_read_in_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor.svh new file mode 100644 index 000000000..f62bb2c33 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_secreg_axi_read_in transactions observed by the +// fuse_ctrl_secreg_axi_read_in monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_in_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_in_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_secreg_axi_read_in_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_secreg_axi_read_in_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_secreg_axi_read_in_monitor_s fuse_ctrl_secreg_axi_read_in_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_secreg_axi_read_in_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor_bfm.sv new file mode 100644 index 000000000..520864f61 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_monitor_bfm.sv @@ -0,0 +1,232 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_secreg_axi_read_in signal monitoring. +// It is accessed by the uvm fuse_ctrl_secreg_axi_read_in monitor through a virtual +// interface handle in the fuse_ctrl_secreg_axi_read_in configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_secreg_axi_read_in_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_in_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_secreg_axi_read_in bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_in_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_in_macros.svh" + + +interface fuse_ctrl_secreg_axi_read_in_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_secreg_axi_read_in_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_in_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_secreg_axi_read_in_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_in_monitor_s fuse_ctrl_secreg_axi_read_in_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_secreg_axi_read_in_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri [AW-1:0] araddr_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] arburst_i; + tri [2:0] arsize_i; + tri [7:0] arlen_i; + tri [UW-1:0] aruser_i; + tri [IW-1:0] arid_i; + tri arlock_i; + tri arvalid_i; + tri rready_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign araddr_i = bus.araddr; + assign arburst_i = bus.arburst; + assign arsize_i = bus.arsize; + assign arlen_i = bus.arlen; + assign aruser_i = bus.aruser; + assign arid_i = bus.arid; + assign arlock_i = bus.arlock; + assign arvalid_i = bus.arvalid; + assign rready_i = bus.rready; + + // Proxy handle to UVM monitor + fuse_ctrl_secreg_axi_read_in_pkg::fuse_ctrl_secreg_axi_read_in_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_secreg_axi_read_in_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_secreg_axi_read_in_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_secreg_axi_read_in_configuration_s fuse_ctrl_secreg_axi_read_in_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_in_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_secreg_axi_read_in_monitor_s fuse_ctrl_secreg_axi_read_in_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_araddr + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_arvalid + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_arburst + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_arsize + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_arlen + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_aruser + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_arid + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_arlock + // // fuse_ctrl_secreg_axi_read_in_monitor_struct.secreg_rready + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = araddr_i; // [AW-1:0] + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = arburst_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = arsize_i; // [2:0] + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = arlen_i; // [7:0] + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = aruser_i; // [UW-1:0] + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = arid_i; // [IW-1:0] + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = arlock_i; // + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = arvalid_i; // + // fuse_ctrl_secreg_axi_read_in_monitor_struct.xyz = rready_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_random_sequence.svh new file mode 100644 index 000000000..b2a6f7e7e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_secreg_axi_read_in transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_secreg_axi_read_in_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_secreg_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_secreg_axi_read_in_random_sequence::body()-fuse_ctrl_secreg_axi_read_in_transaction randomization failed") + // Send the transaction to the fuse_ctrl_secreg_axi_read_in_driver_bfm via the sequencer and fuse_ctrl_secreg_axi_read_in_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_secreg_axi_read_in_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_responder_sequence.svh new file mode 100644 index 000000000..c2c7396c0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_in_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_secreg_axi_read_in_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_secreg_axi_read_in_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_sequence_base.svh new file mode 100644 index 000000000..dff36dd01 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_in_transaction_req_t; + fuse_ctrl_secreg_axi_read_in_transaction_req_t req; + typedef fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_in_transaction_rsp_t; + fuse_ctrl_secreg_axi_read_in_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_secreg_axi_read_in_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_secreg_axi_read_in_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction.svh new file mode 100644 index 000000000..7a2899ae2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction.svh @@ -0,0 +1,243 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_secreg_axi_read_in +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_in_transaction #( + AW, + DW, + IW, + UW + ) +) + + rand logic [AW-1:0] secreg_araddr ; + logic secreg_arvalid ; + logic [$bits(axi_pkg::axi_burst_e)] secreg_arburst ; + logic [2:0] secreg_arsize ; + logic [7:0] secreg_arlen ; + logic [UW-1:0] secreg_aruser ; + logic [IW-1:0] secreg_arid ; + logic secreg_arlock ; + logic secreg_rready ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_secreg_axi_read_in_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_secreg_axi_read_in_monitor and fuse_ctrl_secreg_axi_read_in_monitor_bfm + // This struct is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_in_monitor_s fuse_ctrl_secreg_axi_read_in_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_in_monitor_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_monitor_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_in_driver and fuse_ctrl_secreg_axi_read_in_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_in_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_in_initiator_s fuse_ctrl_secreg_axi_read_in_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_in_initiator_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_initiator_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_secreg_axi_read_in_driver and fuse_ctrl_secreg_axi_read_in_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_in_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_in_responder_s fuse_ctrl_secreg_axi_read_in_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_in_responder_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_in_responder_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_in_macros.svh + `fuse_ctrl_secreg_axi_read_in_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_araddr:0x%x secreg_arvalid:0x%x secreg_arburst:0x%x secreg_arsize:0x%x secreg_arlen:0x%x secreg_aruser:0x%x secreg_arid:0x%x secreg_arlock:0x%x secreg_rready:0x%x ",secreg_araddr,secreg_arvalid,secreg_arburst,secreg_arsize,secreg_arlen,secreg_aruser,secreg_arid,secreg_arlock,secreg_rready); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_araddr = RHS.secreg_araddr; + this.secreg_arvalid = RHS.secreg_arvalid; + this.secreg_arburst = RHS.secreg_arburst; + this.secreg_arsize = RHS.secreg_arsize; + this.secreg_arlen = RHS.secreg_arlen; + this.secreg_aruser = RHS.secreg_aruser; + this.secreg_arid = RHS.secreg_arid; + this.secreg_arlock = RHS.secreg_arlock; + this.secreg_rready = RHS.secreg_rready; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_secreg_axi_read_in_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_araddr,"secreg_araddr"); + $add_attribute(transaction_view_h,secreg_arvalid,"secreg_arvalid"); + $add_attribute(transaction_view_h,secreg_arburst,"secreg_arburst"); + $add_attribute(transaction_view_h,secreg_arsize,"secreg_arsize"); + $add_attribute(transaction_view_h,secreg_arlen,"secreg_arlen"); + $add_attribute(transaction_view_h,secreg_aruser,"secreg_aruser"); + $add_attribute(transaction_view_h,secreg_arid,"secreg_arid"); + $add_attribute(transaction_view_h,secreg_arlock,"secreg_arlock"); + $add_attribute(transaction_view_h,secreg_rready,"secreg_rready"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction_coverage.svh new file mode 100644 index 000000000..586b6770f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_transaction_coverage.svh @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_secreg_axi_read_in transaction information using +// a covergroup named fuse_ctrl_secreg_axi_read_in_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_in_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_secreg_axi_read_in_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_in_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_secreg_axi_read_in_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_araddr: coverpoint coverage_trans.secreg_araddr; + secreg_arvalid: coverpoint coverage_trans.secreg_arvalid; + secreg_arburst: coverpoint coverage_trans.secreg_arburst; + secreg_arsize: coverpoint coverage_trans.secreg_arsize; + secreg_arlen: coverpoint coverage_trans.secreg_arlen; + secreg_aruser: coverpoint coverage_trans.secreg_aruser; + secreg_arid: coverpoint coverage_trans.secreg_arid; + secreg_arlock: coverpoint coverage_trans.secreg_arlock; + secreg_rready: coverpoint coverage_trans.secreg_rready; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_secreg_axi_read_in_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_secreg_axi_read_in_transaction_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_in_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_secreg_axi_read_in_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/src/fuse_ctrl_secreg_axi_read_in_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/yaml/fuse_ctrl_secreg_axi_read_in_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/yaml/fuse_ctrl_secreg_axi_read_in_interface.yaml new file mode 100644 index 000000000..a5ff8dd8b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_in_pkg/yaml/fuse_ctrl_secreg_axi_read_in_interface.yaml @@ -0,0 +1,121 @@ +uvmf: + interfaces: + fuse_ctrl_secreg_axi_read_in: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: output + name: araddr + reset_value: '''bz' + width: '[''AW'']' + - dir: output + name: arburst + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: output + name: arsize + reset_value: '''bz' + width: '3' + - dir: output + name: arlen + reset_value: '''bz' + width: '8' + - dir: output + name: aruser + reset_value: '''bz' + width: '[''UW'']' + - dir: output + name: arid + reset_value: '''bz' + width: '[''IW'']' + - dir: output + name: arlock + reset_value: '''bz' + width: '1' + - dir: output + name: arvalid + reset_value: '''bz' + width: '1' + - dir: output + name: rready + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'False' + isrand: 'True' + name: secreg_araddr + type: logic [AW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arvalid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arburst + type: logic [$bits(axi_pkg::axi_burst_e)] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arsize + type: logic [2:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arlen + type: logic [7:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_aruser + type: logic [UW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_arlock + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'False' + isrand: 'False' + name: secreg_rready + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.project new file mode 100644 index 000000000..18afeef3d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_secreg_axi_read_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.svproject new file mode 100644 index 000000000..c600cb8e1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/Makefile new file mode 100644 index 000000000..6f4f5542b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_secreg_axi_read_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_secreg_axi_read_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hvl.f + +fuse_ctrl_secreg_axi_read_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hdl.f + +fuse_ctrl_secreg_axi_read_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_xrtl.f + +COMP_fuse_ctrl_secreg_axi_read_out_if_PKG_TGT_0 = q_comp_fuse_ctrl_secreg_axi_read_out_if_pkg +COMP_fuse_ctrl_secreg_axi_read_out_if_PKG_TGT_1 = v_comp_fuse_ctrl_secreg_axi_read_out_if_pkg +COMP_fuse_ctrl_secreg_axi_read_out_if_PKG_TGT = $(COMP_fuse_ctrl_secreg_axi_read_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_secreg_axi_read_out_if_pkg: $(COMP_fuse_ctrl_secreg_axi_read_out_if_PKG_TGT) + +q_comp_fuse_ctrl_secreg_axi_read_out_if_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG_XRTL) + +v_comp_fuse_ctrl_secreg_axi_read_out_if_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_secreg_axi_read_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_if_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_out_if_pkg += -I$(fuse_ctrl_secreg_axi_read_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_out_if_pkg += $(fuse_ctrl_secreg_axi_read_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_out_if_pkg += \ + \ + -o .so + +comp_fuse_ctrl_secreg_axi_read_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_out_if_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_out_if_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/compile.do new file mode 100644 index 000000000..9df86868c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_secreg_axi_read_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if.compile new file mode 100644 index 000000000..eb85cfd7c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_secreg_axi_read_out_if_hvl.compile + - fuse_ctrl_secreg_axi_read_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_bfm.vinfo new file mode 100644 index 000000000..0146ca8a1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_secreg_axi_read_out_if_if.sv +src/fuse_ctrl_secreg_axi_read_out_if_driver_bfm.sv +src/fuse_ctrl_secreg_axi_read_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_common.compile new file mode 100644 index 000000000..91b0fa6ac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hdl.f new file mode 100644 index 000000000..8db592711 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hvl.f new file mode 100644 index 000000000..b5b109af5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_xrtl.f new file mode 100644 index 000000000..d0c4b72a5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hdl.compile new file mode 100644 index 000000000..3547429f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_secreg_axi_read_out_if_common.compile +incdir: + - . +src: + - src/fuse_ctrl_secreg_axi_read_out_if_if.sv + - src/fuse_ctrl_secreg_axi_read_out_if_monitor_bfm.sv + - src/fuse_ctrl_secreg_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hvl.compile new file mode 100644 index 000000000..43151aea1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_secreg_axi_read_out_if_common.compile +incdir: + - . +src: + - fuse_ctrl_secreg_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.sv new file mode 100644 index 000000000..6ab054b1e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_secreg_axi_read_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_secreg_axi_read_out_if_macros.svh" + + export fuse_ctrl_secreg_axi_read_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_secreg_axi_read_out_if_typedefs.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_if_transaction.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_if_configuration.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_if_driver.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_if_monitor.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_if_transaction_coverage.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_if_sequence_base.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_if_random_sequence.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_if_responder_sequence.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_if2reg_adapter.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.vinfo new file mode 100644 index 000000000..af597b791 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_secreg_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.sv new file mode 100644 index 000000000..b966c748b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_secreg_axi_read_out_if_typedefs_hdl.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..04a3a2344 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_secreg_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_sve.F new file mode 100644 index 000000000..795ea3865 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/fuse_ctrl_secreg_axi_read_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if2reg_adapter.svh new file mode 100644 index 000000000..318dd9a3f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_secreg_axi_read_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_secreg_axi_read_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_secreg_axi_read_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_agent.svh new file mode 100644 index 000000000..7481759c6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_secreg_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_secreg_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_secreg_axi_read_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_configuration.svh new file mode 100644 index 000000000..96b86ba40 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_secreg_axi_read_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_secreg_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_secreg_axi_read_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_STRUCT + fuse_ctrl_secreg_axi_read_out_if_configuration_s fuse_ctrl_secreg_axi_read_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_secreg_axi_read_out_if_configuration_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_if_configuration_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_secreg_axi_read_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_secreg_axi_read_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_secreg_axi_read_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_secreg_axi_read_out_if_configuration_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_secreg_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver.svh new file mode 100644 index 000000000..a72957934 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_secreg_axi_read_out_if_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_secreg_axi_read_out_if_driver and fuse_ctrl_secreg_axi_read_out_if_driver_bfm +// to communicate initiator driven data to fuse_ctrl_secreg_axi_read_out_if_driver_bfm. +`fuse_ctrl_secreg_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_out_if_initiator_s fuse_ctrl_secreg_axi_read_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_secreg_axi_read_out_if_driver and fuse_ctrl_secreg_axi_read_out_if_driver_bfm +// to communicate Responder driven data to fuse_ctrl_secreg_axi_read_out_if_driver_bfm. +`fuse_ctrl_secreg_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_out_if_responder_s fuse_ctrl_secreg_axi_read_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_secreg_axi_read_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_secreg_axi_read_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_secreg_axi_read_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_secreg_axi_read_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver_bfm.sv new file mode 100644 index 000000000..b7588ca95 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_secreg_axi_read_out_if signal driving. It is +// accessed by the uvm fuse_ctrl_secreg_axi_read_out_if driver through a virtual interface +// handle in the fuse_ctrl_secreg_axi_read_out_if configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_secreg_axi_read_out_if_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_secreg_axi_read_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_out_if_macros.svh" + +interface fuse_ctrl_secreg_axi_read_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_secreg_axi_read_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_secreg_axi_read_out_if_pkg::fuse_ctrl_secreg_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_secreg_axi_read_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_secreg_axi_read_out_if_driver to this BFM + // **************************************************************************** + `fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_out_if_driver and fuse_ctrl_secreg_axi_read_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_out_if_driver_bfm. + `fuse_ctrl_secreg_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_out_if_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_secreg_axi_read_out_if_driver and fuse_ctrl_secreg_axi_read_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_out_if_driver_bfm. + `fuse_ctrl_secreg_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_secreg_axi_read_out_if_configuration_s fuse_ctrl_secreg_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_secreg_axi_read_out_if_initiator_s fuse_ctrl_secreg_axi_read_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_secreg_axi_read_out_if_responder_s fuse_ctrl_secreg_axi_read_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_secreg_axi_read_out_if_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Members within the fuse_ctrl_secreg_axi_read_out_if_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + initiator_struct = fuse_ctrl_secreg_axi_read_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_secreg_axi_read_out_if_responder_struct.xyz = arready_i; // + // fuse_ctrl_secreg_axi_read_out_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_secreg_axi_read_out_if_responder_struct.xyz = rresp_i; // + // fuse_ctrl_secreg_axi_read_out_if_responder_struct.xyz = rid_i; // + // fuse_ctrl_secreg_axi_read_out_if_responder_struct.xyz = rlast_i; // + // fuse_ctrl_secreg_axi_read_out_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_secreg_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_secreg_axi_read_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_secreg_axi_read_out_if_initiator_s fuse_ctrl_secreg_axi_read_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_secreg_axi_read_out_if_responder_s fuse_ctrl_secreg_axi_read_out_if_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_secreg_axi_read_out_if_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Variables within the fuse_ctrl_secreg_axi_read_out_if_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= fuse_ctrl_secreg_axi_read_out_if_initiator_struct.xyz; // + // rdata_o <= fuse_ctrl_secreg_axi_read_out_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= fuse_ctrl_secreg_axi_read_out_if_initiator_struct.xyz; // + // rid_o <= fuse_ctrl_secreg_axi_read_out_if_initiator_struct.xyz; // + // rlast_o <= fuse_ctrl_secreg_axi_read_out_if_initiator_struct.xyz; // + // rvalid_o <= fuse_ctrl_secreg_axi_read_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_secreg_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_secreg_axi_read_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_if.sv new file mode 100644 index 000000000..73192909d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_secreg_axi_read_out_if interface signals. +// It is instantiated once per fuse_ctrl_secreg_axi_read_out_if bus. Bus Functional Models, +// BFM's named fuse_ctrl_secreg_axi_read_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_secreg_axi_read_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_if_bus.arready), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_if_bus.rdata), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_if_bus.rresp), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_if_bus.rid), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_if_bus.rlast), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_out_if_pkg_hdl::*; + +interface fuse_ctrl_secreg_axi_read_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_macros.svh new file mode 100644 index 000000000..68dec6f33 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_secreg_axi_read_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_secreg_axi_read_out_if_configuration class. +// + `define fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_secreg_axi_read_out_if_configuration_s; + + `define fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_if_configuration_s to_struct();\ + fuse_ctrl_secreg_axi_read_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_secreg_axi_read_out_if_configuration_struct );\ + endfunction + + `define fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_secreg_axi_read_out_if_configuration_s fuse_ctrl_secreg_axi_read_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_secreg_axi_read_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_secreg_axi_read_out_if_transaction class. +// + `define fuse_ctrl_secreg_axi_read_out_if_MONITOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } fuse_ctrl_secreg_axi_read_out_if_monitor_s; + + `define fuse_ctrl_secreg_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_if_monitor_s to_monitor_struct();\ + fuse_ctrl_secreg_axi_read_out_if_monitor_struct = \ + { \ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( fuse_ctrl_secreg_axi_read_out_if_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_secreg_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_secreg_axi_read_out_if_monitor_s fuse_ctrl_secreg_axi_read_out_if_monitor_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = fuse_ctrl_secreg_axi_read_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_secreg_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } fuse_ctrl_secreg_axi_read_out_if_initiator_s; + + `define fuse_ctrl_secreg_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_if_initiator_s to_initiator_struct();\ + fuse_ctrl_secreg_axi_read_out_if_initiator_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( fuse_ctrl_secreg_axi_read_out_if_initiator_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_secreg_axi_read_out_if_initiator_s fuse_ctrl_secreg_axi_read_out_if_initiator_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = fuse_ctrl_secreg_axi_read_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_secreg_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } fuse_ctrl_secreg_axi_read_out_if_responder_s; + + `define fuse_ctrl_secreg_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_if_responder_s to_responder_struct();\ + fuse_ctrl_secreg_axi_read_out_if_responder_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( fuse_ctrl_secreg_axi_read_out_if_responder_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_secreg_axi_read_out_if_responder_s fuse_ctrl_secreg_axi_read_out_if_responder_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = fuse_ctrl_secreg_axi_read_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor.svh new file mode 100644 index 000000000..ca4e744eb --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_secreg_axi_read_out_if transactions observed by the +// fuse_ctrl_secreg_axi_read_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_secreg_axi_read_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_secreg_axi_read_out_if_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_secreg_axi_read_out_if_monitor_s fuse_ctrl_secreg_axi_read_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_secreg_axi_read_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor_bfm.sv new file mode 100644 index 000000000..32b5eaf40 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_secreg_axi_read_out_if signal monitoring. +// It is accessed by the uvm fuse_ctrl_secreg_axi_read_out_if monitor through a virtual +// interface handle in the fuse_ctrl_secreg_axi_read_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_secreg_axi_read_out_if_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_secreg_axi_read_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_out_if_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_out_if_macros.svh" + + +interface fuse_ctrl_secreg_axi_read_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_secreg_axi_read_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_secreg_axi_read_out_if_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_out_if_monitor_s fuse_ctrl_secreg_axi_read_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_secreg_axi_read_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_secreg_axi_read_out_if_pkg::fuse_ctrl_secreg_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_secreg_axi_read_out_if_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_secreg_axi_read_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_secreg_axi_read_out_if_configuration_s fuse_ctrl_secreg_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_secreg_axi_read_out_if_monitor_s fuse_ctrl_secreg_axi_read_out_if_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.secreg_arready + // // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.secreg_rdata + // // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.secreg_rresp + // // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.secreg_rid + // // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.secreg_rlast + // // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.secreg_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.xyz = arready_i; // + // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.xyz = rresp_i; // + // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.xyz = rid_i; // + // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.xyz = rlast_i; // + // fuse_ctrl_secreg_axi_read_out_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_random_sequence.svh new file mode 100644 index 000000000..30fa8b2f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_secreg_axi_read_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_secreg_axi_read_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_secreg_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_secreg_axi_read_out_if_random_sequence::body()-fuse_ctrl_secreg_axi_read_out_if_transaction randomization failed") + // Send the transaction to the fuse_ctrl_secreg_axi_read_out_if_driver_bfm via the sequencer and fuse_ctrl_secreg_axi_read_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_secreg_axi_read_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_responder_sequence.svh new file mode 100644 index 000000000..8627fa46e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_secreg_axi_read_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_secreg_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_sequence_base.svh new file mode 100644 index 000000000..821876b40 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_out_if_transaction_req_t; + fuse_ctrl_secreg_axi_read_out_if_transaction_req_t req; + typedef fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_out_if_transaction_rsp_t; + fuse_ctrl_secreg_axi_read_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_secreg_axi_read_out_if_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_secreg_axi_read_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction.svh new file mode 100644 index 000000000..d1fb1311a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_secreg_axi_read_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic secreg_arready ; + logic [DW-1:0] secreg_rdata ; + axi_pkg::axi_burst_e secreg_rresp ; + logic [IW-1:0] secreg_rid ; + logic secreg_rlast ; + logic secreg_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_secreg_axi_read_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_secreg_axi_read_out_if_monitor and fuse_ctrl_secreg_axi_read_out_if_monitor_bfm + // This struct is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_out_if_monitor_s fuse_ctrl_secreg_axi_read_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_out_if_monitor_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_if_monitor_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_out_if_driver and fuse_ctrl_secreg_axi_read_out_if_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_out_if_initiator_s fuse_ctrl_secreg_axi_read_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_out_if_initiator_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_if_initiator_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_secreg_axi_read_out_if_driver and fuse_ctrl_secreg_axi_read_out_if_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_out_if_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_out_if_responder_s fuse_ctrl_secreg_axi_read_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_out_if_responder_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_if_responder_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_if_macros.svh + `fuse_ctrl_secreg_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_arready:0x%x secreg_rdata:0x%x secreg_rresp:0x%x secreg_rid:0x%x secreg_rlast:0x%x secreg_rvalid:0x%x ",secreg_arready,secreg_rdata,secreg_rresp,secreg_rid,secreg_rlast,secreg_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.secreg_arready == RHS.secreg_arready) + &&(this.secreg_rdata == RHS.secreg_rdata) + &&(this.secreg_rresp == RHS.secreg_rresp) + &&(this.secreg_rid == RHS.secreg_rid) + &&(this.secreg_rlast == RHS.secreg_rlast) + &&(this.secreg_rvalid == RHS.secreg_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_arready = RHS.secreg_arready; + this.secreg_rdata = RHS.secreg_rdata; + this.secreg_rresp = RHS.secreg_rresp; + this.secreg_rid = RHS.secreg_rid; + this.secreg_rlast = RHS.secreg_rlast; + this.secreg_rvalid = RHS.secreg_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_secreg_axi_read_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_arready,"secreg_arready"); + $add_attribute(transaction_view_h,secreg_rdata,"secreg_rdata"); + $add_attribute(transaction_view_h,secreg_rresp,"secreg_rresp"); + $add_attribute(transaction_view_h,secreg_rid,"secreg_rid"); + $add_attribute(transaction_view_h,secreg_rlast,"secreg_rlast"); + $add_attribute(transaction_view_h,secreg_rvalid,"secreg_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction_coverage.svh new file mode 100644 index 000000000..e5fd88621 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_secreg_axi_read_out_if transaction information using +// a covergroup named fuse_ctrl_secreg_axi_read_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_secreg_axi_read_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_arready: coverpoint coverage_trans.secreg_arready; + secreg_rdata: coverpoint coverage_trans.secreg_rdata; + secreg_rresp: coverpoint coverage_trans.secreg_rresp; + secreg_rid: coverpoint coverage_trans.secreg_rid; + secreg_rlast: coverpoint coverage_trans.secreg_rlast; + secreg_rvalid: coverpoint coverage_trans.secreg_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_secreg_axi_read_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_secreg_axi_read_out_if_transaction_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_secreg_axi_read_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/src/fuse_ctrl_secreg_axi_read_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/yaml/fuse_ctrl_secreg_axi_read_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/yaml/fuse_ctrl_secreg_axi_read_out_if_interface.yaml new file mode 100644 index 000000000..a61691557 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_if_pkg/yaml/fuse_ctrl_secreg_axi_read_out_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + fuse_ctrl_secreg_axi_read_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.project new file mode 100644 index 000000000..615ab14e5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.project @@ -0,0 +1,30 @@ + + + fuse_ctrl_secreg_axi_read_out_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.svproject new file mode 100644 index 000000000..9d45666db --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/Makefile new file mode 100644 index 000000000..2b6270941 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/Makefile @@ -0,0 +1,66 @@ +# fuse_ctrl_secreg_axi_read_out interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +fuse_ctrl_secreg_axi_read_out_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hvl.f + +fuse_ctrl_secreg_axi_read_out_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hdl.f + +fuse_ctrl_secreg_axi_read_out_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_xrtl.f + +COMP_fuse_ctrl_secreg_axi_read_out_PKG_TGT_0 = q_comp_fuse_ctrl_secreg_axi_read_out_pkg +COMP_fuse_ctrl_secreg_axi_read_out_PKG_TGT_1 = v_comp_fuse_ctrl_secreg_axi_read_out_pkg +COMP_fuse_ctrl_secreg_axi_read_out_PKG_TGT = $(COMP_fuse_ctrl_secreg_axi_read_out_PKG_TGT_$(USE_VELOCE)) + +comp_fuse_ctrl_secreg_axi_read_out_pkg: $(COMP_fuse_ctrl_secreg_axi_read_out_PKG_TGT) + +q_comp_fuse_ctrl_secreg_axi_read_out_pkg: + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG_XRTL) + +v_comp_fuse_ctrl_secreg_axi_read_out_pkg: + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG_HDL) + $(HVL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG) + $(VELANALYZE_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG) + $(HDL_COMP_CMD) $(fuse_ctrl_secreg_axi_read_out_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export fuse_ctrl_secreg_axi_read_out_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/dpi + +C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_pkg = \ + +O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_pkg = $(notdir $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_pkg:.c=.o)) + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_out_pkg += -I$(fuse_ctrl_secreg_axi_read_out_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_out_pkg += $(fuse_ctrl_secreg_axi_read_out_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_out_pkg += \ + \ + -o .so + +comp_fuse_ctrl_secreg_axi_read_out_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_fuse_ctrl_secreg_axi_read_out_pkg) $(C_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_fuse_ctrl_secreg_axi_read_out_pkg) $(O_FILE_COMPILE_LIST_fuse_ctrl_secreg_axi_read_out_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/compile.do new file mode 100644 index 000000000..76aa3ca09 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of fuse_ctrl_secreg_axi_read_out interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out.compile new file mode 100644 index 000000000..630dad514 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out.compile @@ -0,0 +1,3 @@ +needs: + - fuse_ctrl_secreg_axi_read_out_hvl.compile + - fuse_ctrl_secreg_axi_read_out_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_bfm.vinfo new file mode 100644 index 000000000..ecf711b62 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use fuse_ctrl_secreg_axi_read_out_pkg_hdl.vinfo ++incdir+@vinfodir +src/fuse_ctrl_secreg_axi_read_out_if.sv +src/fuse_ctrl_secreg_axi_read_out_driver_bfm.sv +src/fuse_ctrl_secreg_axi_read_out_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_common.compile new file mode 100644 index 000000000..ab88d14dc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hdl.f new file mode 100644 index 000000000..5665d944e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hvl.f new file mode 100644 index 000000000..dd6d2e780 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_xrtl.f new file mode 100644 index 000000000..39d267222 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hdl.compile new file mode 100644 index 000000000..7def0007c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./fuse_ctrl_secreg_axi_read_out_common.compile +incdir: + - . +src: + - src/fuse_ctrl_secreg_axi_read_out_if.sv + - src/fuse_ctrl_secreg_axi_read_out_monitor_bfm.sv + - src/fuse_ctrl_secreg_axi_read_out_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hvl.compile new file mode 100644 index 000000000..b4a074d33 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./fuse_ctrl_secreg_axi_read_out_common.compile +incdir: + - . +src: + - fuse_ctrl_secreg_axi_read_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.sv new file mode 100644 index 000000000..e5e0fb140 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_out_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/fuse_ctrl_secreg_axi_read_out_macros.svh" + + export fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/fuse_ctrl_secreg_axi_read_out_typedefs.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_transaction.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_configuration.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_driver.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_monitor.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_transaction_coverage.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_sequence_base.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_random_sequence.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_responder_sequence.svh" + `include "src/fuse_ctrl_secreg_axi_read_out2reg_adapter.svh" + + `include "src/fuse_ctrl_secreg_axi_read_out_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.vinfo new file mode 100644 index 000000000..fcfbb848d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use fuse_ctrl_secreg_axi_read_out_pkg_hdl.vinfo ++incdir+@vinfodir +fuse_ctrl_secreg_axi_read_out_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv new file mode 100644 index 000000000..86bf6a521 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package fuse_ctrl_secreg_axi_read_out_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/fuse_ctrl_secreg_axi_read_out_typedefs_hdl.svh" + `include "src/fuse_ctrl_secreg_axi_read_out_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.vinfo new file mode 100644 index 000000000..217e9f2f8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +fuse_ctrl_secreg_axi_read_out_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_sve.F new file mode 100644 index 000000000..7feb9ad5d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/fuse_ctrl_secreg_axi_read_out_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out2reg_adapter.svh new file mode 100644 index 000000000..e96620f37 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the fuse_ctrl_secreg_axi_read_out interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "fuse_ctrl_secreg_axi_read_out2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : fuse_ctrl_secreg_axi_read_out2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_agent.svh new file mode 100644 index 000000000..8c136cf4b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(fuse_ctrl_secreg_axi_read_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(fuse_ctrl_secreg_axi_read_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(fuse_ctrl_secreg_axi_read_out_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_configuration.svh new file mode 100644 index 000000000..5660faa8c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the fuse_ctrl_secreg_axi_read_out agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual fuse_ctrl_secreg_axi_read_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup fuse_ctrl_secreg_axi_read_out_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_CONFIGURATION_STRUCT + fuse_ctrl_secreg_axi_read_out_configuration_s fuse_ctrl_secreg_axi_read_out_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a fuse_ctrl_secreg_axi_read_out_configuration_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_configuration_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + fuse_ctrl_secreg_axi_read_out_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + fuse_ctrl_secreg_axi_read_out_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + fuse_ctrl_secreg_axi_read_out_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( fuse_ctrl_secreg_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( fuse_ctrl_secreg_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + fuse_ctrl_secreg_axi_read_out_configuration_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_out_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(fuse_ctrl_secreg_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver.svh new file mode 100644 index 000000000..3902fe883 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_out_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in fuse_ctrl_secreg_axi_read_out_macros.svh +//******************************************************************* +// Initiator macro used by fuse_ctrl_secreg_axi_read_out_driver and fuse_ctrl_secreg_axi_read_out_driver_bfm +// to communicate initiator driven data to fuse_ctrl_secreg_axi_read_out_driver_bfm. +`fuse_ctrl_secreg_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_out_initiator_s fuse_ctrl_secreg_axi_read_out_initiator_struct; +//******************************************************************* +// Responder macro used by fuse_ctrl_secreg_axi_read_out_driver and fuse_ctrl_secreg_axi_read_out_driver_bfm +// to communicate Responder driven data to fuse_ctrl_secreg_axi_read_out_driver_bfm. +`fuse_ctrl_secreg_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_out_responder_s fuse_ctrl_secreg_axi_read_out_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + fuse_ctrl_secreg_axi_read_out_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(fuse_ctrl_secreg_axi_read_out_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + fuse_ctrl_secreg_axi_read_out_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(fuse_ctrl_secreg_axi_read_out_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver_bfm.sv new file mode 100644 index 000000000..3b1e0d51d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the fuse_ctrl_secreg_axi_read_out signal driving. It is +// accessed by the uvm fuse_ctrl_secreg_axi_read_out driver through a virtual interface +// handle in the fuse_ctrl_secreg_axi_read_out configuration. It drives the singals passed +// in through the port connection named bus of type fuse_ctrl_secreg_axi_read_out_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within fuse_ctrl_secreg_axi_read_out_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_out_macros.svh" + +interface fuse_ctrl_secreg_axi_read_out_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (fuse_ctrl_secreg_axi_read_out_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_out_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + fuse_ctrl_secreg_axi_read_out_pkg::fuse_ctrl_secreg_axi_read_out_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in fuse_ctrl_secreg_axi_read_out_macros.svh + // **************************************************************************** + // Struct for passing configuration data from fuse_ctrl_secreg_axi_read_out_driver to this BFM + // **************************************************************************** + `fuse_ctrl_secreg_axi_read_out_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_out_driver and fuse_ctrl_secreg_axi_read_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_out_driver_bfm. + `fuse_ctrl_secreg_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_out_initiator_s initiator_struct; + // Responder macro used by fuse_ctrl_secreg_axi_read_out_driver and fuse_ctrl_secreg_axi_read_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_out_driver_bfm. + `fuse_ctrl_secreg_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_out_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(fuse_ctrl_secreg_axi_read_out_configuration_s fuse_ctrl_secreg_axi_read_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input fuse_ctrl_secreg_axi_read_out_initiator_s fuse_ctrl_secreg_axi_read_out_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output fuse_ctrl_secreg_axi_read_out_responder_s fuse_ctrl_secreg_axi_read_out_responder_struct + );// pragma tbx xtf + // + // Members within the fuse_ctrl_secreg_axi_read_out_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Members within the fuse_ctrl_secreg_axi_read_out_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + initiator_struct = fuse_ctrl_secreg_axi_read_out_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // fuse_ctrl_secreg_axi_read_out_responder_struct.xyz = arready_i; // + // fuse_ctrl_secreg_axi_read_out_responder_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_secreg_axi_read_out_responder_struct.xyz = rresp_i; // + // fuse_ctrl_secreg_axi_read_out_responder_struct.xyz = rid_i; // + // fuse_ctrl_secreg_axi_read_out_responder_struct.xyz = rlast_i; // + // fuse_ctrl_secreg_axi_read_out_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // fuse_ctrl_secreg_axi_read_out_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = fuse_ctrl_secreg_axi_read_out_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output fuse_ctrl_secreg_axi_read_out_initiator_s fuse_ctrl_secreg_axi_read_out_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input fuse_ctrl_secreg_axi_read_out_responder_s fuse_ctrl_secreg_axi_read_out_responder_struct + );// pragma tbx xtf + // Variables within the fuse_ctrl_secreg_axi_read_out_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Variables within the fuse_ctrl_secreg_axi_read_out_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= fuse_ctrl_secreg_axi_read_out_initiator_struct.xyz; // + // rdata_o <= fuse_ctrl_secreg_axi_read_out_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= fuse_ctrl_secreg_axi_read_out_initiator_struct.xyz; // + // rid_o <= fuse_ctrl_secreg_axi_read_out_initiator_struct.xyz; // + // rlast_o <= fuse_ctrl_secreg_axi_read_out_initiator_struct.xyz; // + // rvalid_o <= fuse_ctrl_secreg_axi_read_out_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the fuse_ctrl_secreg_axi_read_out_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the fuse_ctrl_secreg_axi_read_out_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_if.sv new file mode 100644 index 000000000..08ee4ed10 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the fuse_ctrl_secreg_axi_read_out interface signals. +// It is instantiated once per fuse_ctrl_secreg_axi_read_out bus. Bus Functional Models, +// BFM's named fuse_ctrl_secreg_axi_read_out_driver_bfm, are used to drive signals on the bus. +// BFM's named fuse_ctrl_secreg_axi_read_out_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_bus.arready), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_bus.rdata), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_bus.rresp), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_bus.rid), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_bus.rlast), // Agent input +// .dut_signal_port(fuse_ctrl_secreg_axi_read_out_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; + +interface fuse_ctrl_secreg_axi_read_out_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_macros.svh new file mode 100644 index 000000000..882e661bd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the fuse_ctrl_secreg_axi_read_out package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the fuse_ctrl_secreg_axi_read_out_configuration class. +// + `define fuse_ctrl_secreg_axi_read_out_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } fuse_ctrl_secreg_axi_read_out_configuration_s; + + `define fuse_ctrl_secreg_axi_read_out_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_configuration_s to_struct();\ + fuse_ctrl_secreg_axi_read_out_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( fuse_ctrl_secreg_axi_read_out_configuration_struct );\ + endfunction + + `define fuse_ctrl_secreg_axi_read_out_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(fuse_ctrl_secreg_axi_read_out_configuration_s fuse_ctrl_secreg_axi_read_out_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = fuse_ctrl_secreg_axi_read_out_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the fuse_ctrl_secreg_axi_read_out_transaction class. +// + `define fuse_ctrl_secreg_axi_read_out_MONITOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } fuse_ctrl_secreg_axi_read_out_monitor_s; + + `define fuse_ctrl_secreg_axi_read_out_TO_MONITOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_monitor_s to_monitor_struct();\ + fuse_ctrl_secreg_axi_read_out_monitor_struct = \ + { \ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( fuse_ctrl_secreg_axi_read_out_monitor_struct);\ + endfunction\ + + `define fuse_ctrl_secreg_axi_read_out_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(fuse_ctrl_secreg_axi_read_out_monitor_s fuse_ctrl_secreg_axi_read_out_monitor_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = fuse_ctrl_secreg_axi_read_out_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the fuse_ctrl_secreg_axi_read_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_out_INITIATOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } fuse_ctrl_secreg_axi_read_out_initiator_s; + + `define fuse_ctrl_secreg_axi_read_out_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_initiator_s to_initiator_struct();\ + fuse_ctrl_secreg_axi_read_out_initiator_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( fuse_ctrl_secreg_axi_read_out_initiator_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_out_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(fuse_ctrl_secreg_axi_read_out_initiator_s fuse_ctrl_secreg_axi_read_out_initiator_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = fuse_ctrl_secreg_axi_read_out_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the fuse_ctrl_secreg_axi_read_out_transaction class. +// Also update the comments in the driver BFM. +// + `define fuse_ctrl_secreg_axi_read_out_RESPONDER_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } fuse_ctrl_secreg_axi_read_out_responder_s; + + `define fuse_ctrl_secreg_axi_read_out_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function fuse_ctrl_secreg_axi_read_out_responder_s to_responder_struct();\ + fuse_ctrl_secreg_axi_read_out_responder_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( fuse_ctrl_secreg_axi_read_out_responder_struct);\ + endfunction + + `define fuse_ctrl_secreg_axi_read_out_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(fuse_ctrl_secreg_axi_read_out_responder_s fuse_ctrl_secreg_axi_read_out_responder_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = fuse_ctrl_secreg_axi_read_out_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor.svh new file mode 100644 index 000000000..8e4f46381 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives fuse_ctrl_secreg_axi_read_out transactions observed by the +// fuse_ctrl_secreg_axi_read_out monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(fuse_ctrl_secreg_axi_read_out_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual fuse_ctrl_secreg_axi_read_out_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`fuse_ctrl_secreg_axi_read_out_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the fuse_ctrl_secreg_axi_read_out_monitor_struct. + virtual function void notify_transaction(input fuse_ctrl_secreg_axi_read_out_monitor_s fuse_ctrl_secreg_axi_read_out_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(fuse_ctrl_secreg_axi_read_out_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor_bfm.sv new file mode 100644 index 000000000..744b71555 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the fuse_ctrl_secreg_axi_read_out signal monitoring. +// It is accessed by the uvm fuse_ctrl_secreg_axi_read_out monitor through a virtual +// interface handle in the fuse_ctrl_secreg_axi_read_out configuration. It monitors the +// signals passed in through the port connection named bus of +// type fuse_ctrl_secreg_axi_read_out_if. +// +// Input signals from the fuse_ctrl_secreg_axi_read_out_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the fuse_ctrl_secreg_axi_read_out bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import fuse_ctrl_secreg_axi_read_out_pkg_hdl::*; +`include "src/fuse_ctrl_secreg_axi_read_out_macros.svh" + + +interface fuse_ctrl_secreg_axi_read_out_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( fuse_ctrl_secreg_axi_read_out_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute fuse_ctrl_secreg_axi_read_out_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`fuse_ctrl_secreg_axi_read_out_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_out_monitor_s fuse_ctrl_secreg_axi_read_out_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `fuse_ctrl_secreg_axi_read_out_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + fuse_ctrl_secreg_axi_read_out_pkg::fuse_ctrl_secreg_axi_read_out_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( fuse_ctrl_secreg_axi_read_out_monitor_struct ); + + + proxy.notify_transaction( fuse_ctrl_secreg_axi_read_out_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(fuse_ctrl_secreg_axi_read_out_configuration_s fuse_ctrl_secreg_axi_read_out_configuration_arg); // pragma tbx xtf + initiator_responder = fuse_ctrl_secreg_axi_read_out_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output fuse_ctrl_secreg_axi_read_out_monitor_s fuse_ctrl_secreg_axi_read_out_monitor_struct); + // + // Available struct members: + // // fuse_ctrl_secreg_axi_read_out_monitor_struct.secreg_arready + // // fuse_ctrl_secreg_axi_read_out_monitor_struct.secreg_rdata + // // fuse_ctrl_secreg_axi_read_out_monitor_struct.secreg_rresp + // // fuse_ctrl_secreg_axi_read_out_monitor_struct.secreg_rid + // // fuse_ctrl_secreg_axi_read_out_monitor_struct.secreg_rlast + // // fuse_ctrl_secreg_axi_read_out_monitor_struct.secreg_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // fuse_ctrl_secreg_axi_read_out_monitor_struct.xyz = arready_i; // + // fuse_ctrl_secreg_axi_read_out_monitor_struct.xyz = rdata_i; // [DW-1:0] + // fuse_ctrl_secreg_axi_read_out_monitor_struct.xyz = rresp_i; // + // fuse_ctrl_secreg_axi_read_out_monitor_struct.xyz = rid_i; // + // fuse_ctrl_secreg_axi_read_out_monitor_struct.xyz = rlast_i; // + // fuse_ctrl_secreg_axi_read_out_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_random_sequence.svh new file mode 100644 index 000000000..ff6541d98 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the fuse_ctrl_secreg_axi_read_out transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a fuse_ctrl_secreg_axi_read_out_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=fuse_ctrl_secreg_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "fuse_ctrl_secreg_axi_read_out_random_sequence::body()-fuse_ctrl_secreg_axi_read_out_transaction randomization failed") + // Send the transaction to the fuse_ctrl_secreg_axi_read_out_driver_bfm via the sequencer and fuse_ctrl_secreg_axi_read_out_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: fuse_ctrl_secreg_axi_read_out_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_responder_sequence.svh new file mode 100644 index 000000000..83a9996a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends fuse_ctrl_secreg_axi_read_out_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "fuse_ctrl_secreg_axi_read_out_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=fuse_ctrl_secreg_axi_read_out_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_sequence_base.svh new file mode 100644 index 000000000..30cb7935d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_out_transaction_req_t; + fuse_ctrl_secreg_axi_read_out_transaction_req_t req; + typedef fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + fuse_ctrl_secreg_axi_read_out_transaction_rsp_t; + fuse_ctrl_secreg_axi_read_out_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = fuse_ctrl_secreg_axi_read_out_transaction_req_t::type_id::create("req"); + rsp = fuse_ctrl_secreg_axi_read_out_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction.svh new file mode 100644 index 000000000..b36b950c4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an fuse_ctrl_secreg_axi_read_out +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( fuse_ctrl_secreg_axi_read_out_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic secreg_arready ; + logic [DW-1:0] secreg_rdata ; + axi_pkg::axi_burst_e secreg_rresp ; + logic [IW-1:0] secreg_rid ; + logic secreg_rlast ; + logic secreg_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in fuse_ctrl_secreg_axi_read_out_macros.svh + + //******************************************************************* + // Monitor macro used by fuse_ctrl_secreg_axi_read_out_monitor and fuse_ctrl_secreg_axi_read_out_monitor_bfm + // This struct is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_MONITOR_STRUCT + fuse_ctrl_secreg_axi_read_out_monitor_s fuse_ctrl_secreg_axi_read_out_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_out_monitor_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_monitor_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by fuse_ctrl_secreg_axi_read_out_driver and fuse_ctrl_secreg_axi_read_out_driver_bfm + // to communicate initiator driven data to fuse_ctrl_secreg_axi_read_out_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_INITIATOR_STRUCT + fuse_ctrl_secreg_axi_read_out_initiator_s fuse_ctrl_secreg_axi_read_out_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_out_initiator_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_initiator_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by fuse_ctrl_secreg_axi_read_out_driver and fuse_ctrl_secreg_axi_read_out_driver_bfm + // to communicate Responder driven data to fuse_ctrl_secreg_axi_read_out_driver_bfm. + // This struct is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_RESPONDER_STRUCT + fuse_ctrl_secreg_axi_read_out_responder_s fuse_ctrl_secreg_axi_read_out_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a fuse_ctrl_secreg_axi_read_out_responder_s + // structure. The function returns the handle to the fuse_ctrl_secreg_axi_read_out_responder_struct. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in fuse_ctrl_secreg_axi_read_out_macros.svh + `fuse_ctrl_secreg_axi_read_out_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_arready:0x%x secreg_rdata:0x%x secreg_rresp:0x%x secreg_rid:0x%x secreg_rlast:0x%x secreg_rvalid:0x%x ",secreg_arready,secreg_rdata,secreg_rresp,secreg_rid,secreg_rlast,secreg_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.secreg_arready == RHS.secreg_arready) + &&(this.secreg_rdata == RHS.secreg_rdata) + &&(this.secreg_rresp == RHS.secreg_rresp) + &&(this.secreg_rid == RHS.secreg_rid) + &&(this.secreg_rlast == RHS.secreg_rlast) + &&(this.secreg_rvalid == RHS.secreg_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_arready = RHS.secreg_arready; + this.secreg_rdata = RHS.secreg_rdata; + this.secreg_rresp = RHS.secreg_rresp; + this.secreg_rid = RHS.secreg_rid; + this.secreg_rlast = RHS.secreg_rlast; + this.secreg_rvalid = RHS.secreg_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"fuse_ctrl_secreg_axi_read_out_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_arready,"secreg_arready"); + $add_attribute(transaction_view_h,secreg_rdata,"secreg_rdata"); + $add_attribute(transaction_view_h,secreg_rresp,"secreg_rresp"); + $add_attribute(transaction_view_h,secreg_rid,"secreg_rid"); + $add_attribute(transaction_view_h,secreg_rlast,"secreg_rlast"); + $add_attribute(transaction_view_h,secreg_rvalid,"secreg_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction_coverage.svh new file mode 100644 index 000000000..cdbf4e229 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records fuse_ctrl_secreg_axi_read_out transaction information using +// a covergroup named fuse_ctrl_secreg_axi_read_out_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class fuse_ctrl_secreg_axi_read_out_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(fuse_ctrl_secreg_axi_read_out_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( fuse_ctrl_secreg_axi_read_out_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup fuse_ctrl_secreg_axi_read_out_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_arready: coverpoint coverage_trans.secreg_arready; + secreg_rdata: coverpoint coverage_trans.secreg_rdata; + secreg_rresp: coverpoint coverage_trans.secreg_rresp; + secreg_rid: coverpoint coverage_trans.secreg_rid; + secreg_rlast: coverpoint coverage_trans.secreg_rlast; + secreg_rvalid: coverpoint coverage_trans.secreg_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + fuse_ctrl_secreg_axi_read_out_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + fuse_ctrl_secreg_axi_read_out_transaction_cg.set_inst_name($sformatf("fuse_ctrl_secreg_axi_read_out_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + fuse_ctrl_secreg_axi_read_out_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/src/fuse_ctrl_secreg_axi_read_out_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/yaml/fuse_ctrl_secreg_axi_read_out_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/yaml/fuse_ctrl_secreg_axi_read_out_interface.yaml new file mode 100644 index 000000000..a0081ffd6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/fuse_ctrl_secreg_axi_read_out_pkg/yaml/fuse_ctrl_secreg_axi_read_out_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + fuse_ctrl_secreg_axi_read_out: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/.project new file mode 100644 index 000000000..ce67d0c3e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + prim_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..f8c7ed7c8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..01ec95534 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# prim_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +prim_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f + +prim_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f + +prim_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f + +COMP_prim_axi_read_if_PKG_TGT_0 = q_comp_prim_axi_read_if_pkg +COMP_prim_axi_read_if_PKG_TGT_1 = v_comp_prim_axi_read_if_pkg +COMP_prim_axi_read_if_PKG_TGT = $(COMP_prim_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_prim_axi_read_if_pkg: $(COMP_prim_axi_read_if_PKG_TGT) + +q_comp_prim_axi_read_if_pkg: + $(HDL_COMP_CMD) $(prim_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_read_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_read_if_PKG_XRTL) + +v_comp_prim_axi_read_if_pkg: + $(HVL_COMP_CMD) $(prim_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_read_if_PKG) + $(VELANALYZE_CMD) $(prim_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(prim_axi_read_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export prim_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_prim_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_prim_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_prim_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_prim_axi_read_if_pkg += -I$(prim_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_prim_axi_read_if_pkg += $(prim_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_prim_axi_read_if_pkg += \ + \ + -o .so + +comp_prim_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_prim_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_prim_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_prim_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_prim_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..9c440083a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of prim_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if.compile new file mode 100644 index 000000000..6b8986ce1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - prim_axi_read_if_hvl.compile + - prim_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..6ed51480b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use prim_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/prim_axi_read_if_if.sv +src/prim_axi_read_if_driver_bfm.sv +src/prim_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_common.compile new file mode 100644 index 000000000..09fd9b43c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..0dcc7ec77 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..1ca45536b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..db173a50e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hdl.compile new file mode 100644 index 000000000..bf564aa0c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./prim_axi_read_if_common.compile +incdir: + - . +src: + - src/prim_axi_read_if_if.sv + - src/prim_axi_read_if_monitor_bfm.sv + - src/prim_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hvl.compile new file mode 100644 index 000000000..ebdc1e779 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./prim_axi_read_if_common.compile +incdir: + - . +src: + - prim_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.sv new file mode 100644 index 000000000..21866eb57 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import prim_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/prim_axi_read_if_macros.svh" + + export prim_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/prim_axi_read_if_typedefs.svh" + `include "src/prim_axi_read_if_transaction.svh" + + `include "src/prim_axi_read_if_configuration.svh" + `include "src/prim_axi_read_if_driver.svh" + `include "src/prim_axi_read_if_monitor.svh" + + `include "src/prim_axi_read_if_transaction_coverage.svh" + `include "src/prim_axi_read_if_sequence_base.svh" + `include "src/prim_axi_read_if_random_sequence.svh" + + `include "src/prim_axi_read_if_responder_sequence.svh" + `include "src/prim_axi_read_if2reg_adapter.svh" + + `include "src/prim_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..9dc1034d4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use prim_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +prim_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..e2ff7fcd4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/prim_axi_read_if_typedefs_hdl.svh" + `include "src/prim_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..fe5f59e5b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +prim_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..1112cd0fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_read_if_pkg/prim_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..e5ff21492 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the prim_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( prim_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "prim_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : prim_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_agent.svh new file mode 100644 index 000000000..e510c9b42 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(prim_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(prim_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(prim_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( prim_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_configuration.svh new file mode 100644 index 000000000..4fe7507ff --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the prim_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual prim_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual prim_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup prim_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_CONFIGURATION_STRUCT + prim_axi_read_if_configuration_s prim_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a prim_axi_read_if_configuration_s + // structure. The function returns the handle to the prim_axi_read_if_configuration_struct. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + prim_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + prim_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + prim_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + prim_axi_read_if_configuration_cg.set_inst_name($sformatf("prim_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver.svh new file mode 100644 index 000000000..80f3658f6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual prim_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( prim_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in prim_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm +// to communicate initiator driven data to prim_axi_read_if_driver_bfm. +`prim_axi_read_if_INITIATOR_STRUCT + prim_axi_read_if_initiator_s prim_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm +// to communicate Responder driven data to prim_axi_read_if_driver_bfm. +`prim_axi_read_if_RESPONDER_STRUCT + prim_axi_read_if_responder_s prim_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + prim_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(prim_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + prim_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(prim_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..fb79a5e87 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the prim_axi_read_if signal driving. It is +// accessed by the uvm prim_axi_read_if driver through a virtual interface +// handle in the prim_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type prim_axi_read_if_if. +// +// Input signals from the prim_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within prim_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_read_if_pkg_hdl::*; +`include "src/prim_axi_read_if_macros.svh" + +interface prim_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (prim_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute prim_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + prim_axi_read_if_pkg::prim_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in prim_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from prim_axi_read_if_driver to this BFM + // **************************************************************************** + `prim_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm + // to communicate initiator driven data to prim_axi_read_if_driver_bfm. + `prim_axi_read_if_INITIATOR_STRUCT + prim_axi_read_if_initiator_s initiator_struct; + // Responder macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm + // to communicate Responder driven data to prim_axi_read_if_driver_bfm. + `prim_axi_read_if_RESPONDER_STRUCT + prim_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(prim_axi_read_if_configuration_s prim_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input prim_axi_read_if_initiator_s prim_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output prim_axi_read_if_responder_s prim_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the prim_axi_read_if_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Members within the prim_axi_read_if_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + initiator_struct = prim_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // prim_axi_read_if_responder_struct.xyz = arready_i; // + // prim_axi_read_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // prim_axi_read_if_responder_struct.xyz = rresp_i; // + // prim_axi_read_if_responder_struct.xyz = rid_i; // + // prim_axi_read_if_responder_struct.xyz = rlast_i; // + // prim_axi_read_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // prim_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = prim_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output prim_axi_read_if_initiator_s prim_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input prim_axi_read_if_responder_s prim_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the prim_axi_read_if_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Variables within the prim_axi_read_if_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= prim_axi_read_if_initiator_struct.xyz; // + // rdata_o <= prim_axi_read_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= prim_axi_read_if_initiator_struct.xyz; // + // rid_o <= prim_axi_read_if_initiator_struct.xyz; // + // rlast_o <= prim_axi_read_if_initiator_struct.xyz; // + // rvalid_o <= prim_axi_read_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the prim_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the prim_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_if.sv new file mode 100644 index 000000000..3e2dc9c5d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the prim_axi_read_if interface signals. +// It is instantiated once per prim_axi_read_if bus. Bus Functional Models, +// BFM's named prim_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named prim_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(prim_axi_read_if_bus.arready), // Agent input +// .dut_signal_port(prim_axi_read_if_bus.rdata), // Agent input +// .dut_signal_port(prim_axi_read_if_bus.rresp), // Agent input +// .dut_signal_port(prim_axi_read_if_bus.rid), // Agent input +// .dut_signal_port(prim_axi_read_if_bus.rlast), // Agent input +// .dut_signal_port(prim_axi_read_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import prim_axi_read_if_pkg_hdl::*; + +interface prim_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_macros.svh new file mode 100644 index 000000000..afbd57861 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the prim_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the prim_axi_read_if_configuration class. +// + `define prim_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } prim_axi_read_if_configuration_s; + + `define prim_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function prim_axi_read_if_configuration_s to_struct();\ + prim_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( prim_axi_read_if_configuration_struct );\ + endfunction + + `define prim_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(prim_axi_read_if_configuration_s prim_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = prim_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the prim_axi_read_if_transaction class. +// + `define prim_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } prim_axi_read_if_monitor_s; + + `define prim_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function prim_axi_read_if_monitor_s to_monitor_struct();\ + prim_axi_read_if_monitor_struct = \ + { \ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( prim_axi_read_if_monitor_struct);\ + endfunction\ + + `define prim_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(prim_axi_read_if_monitor_s prim_axi_read_if_monitor_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = prim_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the prim_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } prim_axi_read_if_initiator_s; + + `define prim_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function prim_axi_read_if_initiator_s to_initiator_struct();\ + prim_axi_read_if_initiator_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( prim_axi_read_if_initiator_struct);\ + endfunction + + `define prim_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(prim_axi_read_if_initiator_s prim_axi_read_if_initiator_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = prim_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the prim_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } prim_axi_read_if_responder_s; + + `define prim_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function prim_axi_read_if_responder_s to_responder_struct();\ + prim_axi_read_if_responder_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( prim_axi_read_if_responder_struct);\ + endfunction + + `define prim_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(prim_axi_read_if_responder_s prim_axi_read_if_responder_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = prim_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor.svh new file mode 100644 index 000000000..2f4d1fc43 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives prim_axi_read_if transactions observed by the +// prim_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(prim_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual prim_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`prim_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the prim_axi_read_if_monitor_struct. + virtual function void notify_transaction(input prim_axi_read_if_monitor_s prim_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(prim_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..a6c05bea2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the prim_axi_read_if signal monitoring. +// It is accessed by the uvm prim_axi_read_if monitor through a virtual +// interface handle in the prim_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type prim_axi_read_if_if. +// +// Input signals from the prim_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the prim_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_read_if_pkg_hdl::*; +`include "src/prim_axi_read_if_macros.svh" + + +interface prim_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( prim_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute prim_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`prim_axi_read_if_MONITOR_STRUCT + prim_axi_read_if_monitor_s prim_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `prim_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + prim_axi_read_if_pkg::prim_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( prim_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( prim_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(prim_axi_read_if_configuration_s prim_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output prim_axi_read_if_monitor_s prim_axi_read_if_monitor_struct); + // + // Available struct members: + // // prim_axi_read_if_monitor_struct.prim_arready + // // prim_axi_read_if_monitor_struct.prim_rdata + // // prim_axi_read_if_monitor_struct.prim_rresp + // // prim_axi_read_if_monitor_struct.prim_rid + // // prim_axi_read_if_monitor_struct.prim_rlast + // // prim_axi_read_if_monitor_struct.prim_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // prim_axi_read_if_monitor_struct.xyz = arready_i; // + // prim_axi_read_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // prim_axi_read_if_monitor_struct.xyz = rresp_i; // + // prim_axi_read_if_monitor_struct.xyz = rid_i; // + // prim_axi_read_if_monitor_struct.xyz = rlast_i; // + // prim_axi_read_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..08857b229 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the prim_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a prim_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "prim_axi_read_if_random_sequence::body()-prim_axi_read_if_transaction randomization failed") + // Send the transaction to the prim_axi_read_if_driver_bfm via the sequencer and prim_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: prim_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..501b728cc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "prim_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=prim_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..c94ac9063 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_read_if_transaction_req_t; + prim_axi_read_if_transaction_req_t req; + typedef prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_read_if_transaction_rsp_t; + prim_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = prim_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = prim_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction.svh new file mode 100644 index 000000000..c7e72b2ee --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an prim_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( prim_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_arready ; + logic [DW-1:0] prim_rdata ; + axi_pkg::axi_burst_e prim_rresp ; + logic [IW-1:0] prim_rid ; + logic prim_rlast ; + logic prim_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in prim_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by prim_axi_read_if_monitor and prim_axi_read_if_monitor_bfm + // This struct is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_MONITOR_STRUCT + prim_axi_read_if_monitor_s prim_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a prim_axi_read_if_monitor_s + // structure. The function returns the handle to the prim_axi_read_if_monitor_struct. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm + // to communicate initiator driven data to prim_axi_read_if_driver_bfm. + // This struct is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_INITIATOR_STRUCT + prim_axi_read_if_initiator_s prim_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a prim_axi_read_if_initiator_s + // structure. The function returns the handle to the prim_axi_read_if_initiator_struct. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by prim_axi_read_if_driver and prim_axi_read_if_driver_bfm + // to communicate Responder driven data to prim_axi_read_if_driver_bfm. + // This struct is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_RESPONDER_STRUCT + prim_axi_read_if_responder_s prim_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a prim_axi_read_if_responder_s + // structure. The function returns the handle to the prim_axi_read_if_responder_struct. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_read_if_macros.svh + `prim_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_arready:0x%x prim_rdata:0x%x prim_rresp:0x%x prim_rid:0x%x prim_rlast:0x%x prim_rvalid:0x%x ",prim_arready,prim_rdata,prim_rresp,prim_rid,prim_rlast,prim_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_arready == RHS.prim_arready) + &&(this.prim_rdata == RHS.prim_rdata) + &&(this.prim_rresp == RHS.prim_rresp) + &&(this.prim_rid == RHS.prim_rid) + &&(this.prim_rlast == RHS.prim_rlast) + &&(this.prim_rvalid == RHS.prim_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_arready = RHS.prim_arready; + this.prim_rdata = RHS.prim_rdata; + this.prim_rresp = RHS.prim_rresp; + this.prim_rid = RHS.prim_rid; + this.prim_rlast = RHS.prim_rlast; + this.prim_rvalid = RHS.prim_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"prim_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_arready,"prim_arready"); + $add_attribute(transaction_view_h,prim_rdata,"prim_rdata"); + $add_attribute(transaction_view_h,prim_rresp,"prim_rresp"); + $add_attribute(transaction_view_h,prim_rid,"prim_rid"); + $add_attribute(transaction_view_h,prim_rlast,"prim_rlast"); + $add_attribute(transaction_view_h,prim_rvalid,"prim_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..e31162373 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records prim_axi_read_if transaction information using +// a covergroup named prim_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(prim_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup prim_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_arready: coverpoint coverage_trans.prim_arready; + prim_rdata: coverpoint coverage_trans.prim_rdata; + prim_rresp: coverpoint coverage_trans.prim_rresp; + prim_rid: coverpoint coverage_trans.prim_rid; + prim_rlast: coverpoint coverage_trans.prim_rlast; + prim_rvalid: coverpoint coverage_trans.prim_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + prim_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + prim_axi_read_if_transaction_cg.set_inst_name($sformatf("prim_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + prim_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/src/prim_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/yaml/prim_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/yaml/prim_axi_read_if_interface.yaml new file mode 100644 index 000000000..e8716f4a1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_if_pkg/yaml/prim_axi_read_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + prim_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.project new file mode 100644 index 000000000..585c5e823 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + prim_axi_read_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.svproject new file mode 100644 index 000000000..ddf3caeab --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/Makefile new file mode 100644 index 000000000..f228130ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# prim_axi_read_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +prim_axi_read_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hvl.f + +prim_axi_read_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hdl.f + +prim_axi_read_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_xrtl.f + +COMP_prim_axi_read_out_if_PKG_TGT_0 = q_comp_prim_axi_read_out_if_pkg +COMP_prim_axi_read_out_if_PKG_TGT_1 = v_comp_prim_axi_read_out_if_pkg +COMP_prim_axi_read_out_if_PKG_TGT = $(COMP_prim_axi_read_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_prim_axi_read_out_if_pkg: $(COMP_prim_axi_read_out_if_PKG_TGT) + +q_comp_prim_axi_read_out_if_pkg: + $(HDL_COMP_CMD) $(prim_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_read_out_if_PKG_XRTL) + +v_comp_prim_axi_read_out_if_pkg: + $(HVL_COMP_CMD) $(prim_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_read_out_if_PKG) + $(VELANALYZE_CMD) $(prim_axi_read_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(prim_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_read_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export prim_axi_read_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_prim_axi_read_out_if_pkg = \ + +O_FILE_COMPILE_LIST_prim_axi_read_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_prim_axi_read_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_prim_axi_read_out_if_pkg += -I$(prim_axi_read_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_prim_axi_read_out_if_pkg += $(prim_axi_read_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_prim_axi_read_out_if_pkg += \ + \ + -o .so + +comp_prim_axi_read_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_prim_axi_read_out_if_pkg) $(C_FILE_COMPILE_LIST_prim_axi_read_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_prim_axi_read_out_if_pkg) $(O_FILE_COMPILE_LIST_prim_axi_read_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/compile.do new file mode 100644 index 000000000..a3a345d11 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of prim_axi_read_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if.compile new file mode 100644 index 000000000..4670ed42f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if.compile @@ -0,0 +1,3 @@ +needs: + - prim_axi_read_out_if_hvl.compile + - prim_axi_read_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_bfm.vinfo new file mode 100644 index 000000000..d5f56b7f4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use prim_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/prim_axi_read_out_if_if.sv +src/prim_axi_read_out_if_driver_bfm.sv +src/prim_axi_read_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_common.compile new file mode 100644 index 000000000..7e04b5d77 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - prim_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hdl.f new file mode 100644 index 000000000..ac4c979b1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hvl.f new file mode 100644 index 000000000..601a2a9a6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_xrtl.f new file mode 100644 index 000000000..f129101a9 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hdl.compile new file mode 100644 index 000000000..5b8611c73 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./prim_axi_read_out_if_common.compile +incdir: + - . +src: + - src/prim_axi_read_out_if_if.sv + - src/prim_axi_read_out_if_monitor_bfm.sv + - src/prim_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hvl.compile new file mode 100644 index 000000000..8e542050f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./prim_axi_read_out_if_common.compile +incdir: + - . +src: + - prim_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.sv new file mode 100644 index 000000000..a2a9a1e31 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_read_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import prim_axi_read_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/prim_axi_read_out_if_macros.svh" + + export prim_axi_read_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/prim_axi_read_out_if_typedefs.svh" + `include "src/prim_axi_read_out_if_transaction.svh" + + `include "src/prim_axi_read_out_if_configuration.svh" + `include "src/prim_axi_read_out_if_driver.svh" + `include "src/prim_axi_read_out_if_monitor.svh" + + `include "src/prim_axi_read_out_if_transaction_coverage.svh" + `include "src/prim_axi_read_out_if_sequence_base.svh" + `include "src/prim_axi_read_out_if_random_sequence.svh" + + `include "src/prim_axi_read_out_if_responder_sequence.svh" + `include "src/prim_axi_read_out_if2reg_adapter.svh" + + `include "src/prim_axi_read_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.vinfo new file mode 100644 index 000000000..aa65183de --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use prim_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +prim_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.sv new file mode 100644 index 000000000..5c650077e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_read_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/prim_axi_read_out_if_typedefs_hdl.svh" + `include "src/prim_axi_read_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..368a69419 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +prim_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_sve.F new file mode 100644 index 000000000..8c95c1e2d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_read_out_if_pkg/prim_axi_read_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if2reg_adapter.svh new file mode 100644 index 000000000..721a65049 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the prim_axi_read_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( prim_axi_read_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "prim_axi_read_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : prim_axi_read_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_agent.svh new file mode 100644 index 000000000..7c2483b3a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(prim_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(prim_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(prim_axi_read_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( prim_axi_read_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_configuration.svh new file mode 100644 index 000000000..26028d38f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the prim_axi_read_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual prim_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual prim_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_read_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup prim_axi_read_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_CONFIGURATION_STRUCT + prim_axi_read_out_if_configuration_s prim_axi_read_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a prim_axi_read_out_if_configuration_s + // structure. The function returns the handle to the prim_axi_read_out_if_configuration_struct. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + prim_axi_read_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + prim_axi_read_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + prim_axi_read_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + prim_axi_read_out_if_configuration_cg.set_inst_name($sformatf("prim_axi_read_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(prim_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver.svh new file mode 100644 index 000000000..495604d11 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual prim_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( prim_axi_read_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in prim_axi_read_out_if_macros.svh +//******************************************************************* +// Initiator macro used by prim_axi_read_out_if_driver and prim_axi_read_out_if_driver_bfm +// to communicate initiator driven data to prim_axi_read_out_if_driver_bfm. +`prim_axi_read_out_if_INITIATOR_STRUCT + prim_axi_read_out_if_initiator_s prim_axi_read_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by prim_axi_read_out_if_driver and prim_axi_read_out_if_driver_bfm +// to communicate Responder driven data to prim_axi_read_out_if_driver_bfm. +`prim_axi_read_out_if_RESPONDER_STRUCT + prim_axi_read_out_if_responder_s prim_axi_read_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + prim_axi_read_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(prim_axi_read_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + prim_axi_read_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(prim_axi_read_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver_bfm.sv new file mode 100644 index 000000000..d7dd2549e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the prim_axi_read_out_if signal driving. It is +// accessed by the uvm prim_axi_read_out_if driver through a virtual interface +// handle in the prim_axi_read_out_if configuration. It drives the singals passed +// in through the port connection named bus of type prim_axi_read_out_if_if. +// +// Input signals from the prim_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within prim_axi_read_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_read_out_if_pkg_hdl::*; +`include "src/prim_axi_read_out_if_macros.svh" + +interface prim_axi_read_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (prim_axi_read_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute prim_axi_read_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + prim_axi_read_out_if_pkg::prim_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in prim_axi_read_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from prim_axi_read_out_if_driver to this BFM + // **************************************************************************** + `prim_axi_read_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by prim_axi_read_out_if_driver and prim_axi_read_out_if_driver_bfm + // to communicate initiator driven data to prim_axi_read_out_if_driver_bfm. + `prim_axi_read_out_if_INITIATOR_STRUCT + prim_axi_read_out_if_initiator_s initiator_struct; + // Responder macro used by prim_axi_read_out_if_driver and prim_axi_read_out_if_driver_bfm + // to communicate Responder driven data to prim_axi_read_out_if_driver_bfm. + `prim_axi_read_out_if_RESPONDER_STRUCT + prim_axi_read_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(prim_axi_read_out_if_configuration_s prim_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input prim_axi_read_out_if_initiator_s prim_axi_read_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output prim_axi_read_out_if_responder_s prim_axi_read_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the prim_axi_read_out_if_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Members within the prim_axi_read_out_if_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + initiator_struct = prim_axi_read_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // prim_axi_read_out_if_responder_struct.xyz = arready_i; // + // prim_axi_read_out_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // prim_axi_read_out_if_responder_struct.xyz = rresp_i; // + // prim_axi_read_out_if_responder_struct.xyz = rid_i; // + // prim_axi_read_out_if_responder_struct.xyz = rlast_i; // + // prim_axi_read_out_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // prim_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = prim_axi_read_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output prim_axi_read_out_if_initiator_s prim_axi_read_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input prim_axi_read_out_if_responder_s prim_axi_read_out_if_responder_struct + );// pragma tbx xtf + // Variables within the prim_axi_read_out_if_initiator_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Variables within the prim_axi_read_out_if_responder_struct: + // logic prim_arready ; + // logic [DW-1:0] prim_rdata ; + // axi_pkg::axi_burst_e prim_rresp ; + // logic [IW-1:0] prim_rid ; + // logic prim_rlast ; + // logic prim_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= prim_axi_read_out_if_initiator_struct.xyz; // + // rdata_o <= prim_axi_read_out_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= prim_axi_read_out_if_initiator_struct.xyz; // + // rid_o <= prim_axi_read_out_if_initiator_struct.xyz; // + // rlast_o <= prim_axi_read_out_if_initiator_struct.xyz; // + // rvalid_o <= prim_axi_read_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the prim_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the prim_axi_read_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_if.sv new file mode 100644 index 000000000..c73529236 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the prim_axi_read_out_if interface signals. +// It is instantiated once per prim_axi_read_out_if bus. Bus Functional Models, +// BFM's named prim_axi_read_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named prim_axi_read_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(prim_axi_read_out_if_bus.arready), // Agent input +// .dut_signal_port(prim_axi_read_out_if_bus.rdata), // Agent input +// .dut_signal_port(prim_axi_read_out_if_bus.rresp), // Agent input +// .dut_signal_port(prim_axi_read_out_if_bus.rid), // Agent input +// .dut_signal_port(prim_axi_read_out_if_bus.rlast), // Agent input +// .dut_signal_port(prim_axi_read_out_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import prim_axi_read_out_if_pkg_hdl::*; + +interface prim_axi_read_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_macros.svh new file mode 100644 index 000000000..902824de8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the prim_axi_read_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the prim_axi_read_out_if_configuration class. +// + `define prim_axi_read_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } prim_axi_read_out_if_configuration_s; + + `define prim_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function prim_axi_read_out_if_configuration_s to_struct();\ + prim_axi_read_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( prim_axi_read_out_if_configuration_struct );\ + endfunction + + `define prim_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(prim_axi_read_out_if_configuration_s prim_axi_read_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = prim_axi_read_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the prim_axi_read_out_if_transaction class. +// + `define prim_axi_read_out_if_MONITOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } prim_axi_read_out_if_monitor_s; + + `define prim_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function prim_axi_read_out_if_monitor_s to_monitor_struct();\ + prim_axi_read_out_if_monitor_struct = \ + { \ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( prim_axi_read_out_if_monitor_struct);\ + endfunction\ + + `define prim_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(prim_axi_read_out_if_monitor_s prim_axi_read_out_if_monitor_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = prim_axi_read_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the prim_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_read_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } prim_axi_read_out_if_initiator_s; + + `define prim_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function prim_axi_read_out_if_initiator_s to_initiator_struct();\ + prim_axi_read_out_if_initiator_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( prim_axi_read_out_if_initiator_struct);\ + endfunction + + `define prim_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(prim_axi_read_out_if_initiator_s prim_axi_read_out_if_initiator_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = prim_axi_read_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the prim_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_read_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic prim_arready ; \ + logic [DW-1:0] prim_rdata ; \ + axi_pkg::axi_burst_e prim_rresp ; \ + logic [IW-1:0] prim_rid ; \ + logic prim_rlast ; \ + logic prim_rvalid ; \ + } prim_axi_read_out_if_responder_s; + + `define prim_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function prim_axi_read_out_if_responder_s to_responder_struct();\ + prim_axi_read_out_if_responder_struct = \ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + };\ + return ( prim_axi_read_out_if_responder_struct);\ + endfunction + + `define prim_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(prim_axi_read_out_if_responder_s prim_axi_read_out_if_responder_struct);\ + {\ + this.prim_arready , \ + this.prim_rdata , \ + this.prim_rresp , \ + this.prim_rid , \ + this.prim_rlast , \ + this.prim_rvalid \ + } = prim_axi_read_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor.svh new file mode 100644 index 000000000..523177215 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives prim_axi_read_out_if transactions observed by the +// prim_axi_read_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(prim_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual prim_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_read_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`prim_axi_read_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the prim_axi_read_out_if_monitor_struct. + virtual function void notify_transaction(input prim_axi_read_out_if_monitor_s prim_axi_read_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(prim_axi_read_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor_bfm.sv new file mode 100644 index 000000000..7e5d3651d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the prim_axi_read_out_if signal monitoring. +// It is accessed by the uvm prim_axi_read_out_if monitor through a virtual +// interface handle in the prim_axi_read_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type prim_axi_read_out_if_if. +// +// Input signals from the prim_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the prim_axi_read_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_read_out_if_pkg_hdl::*; +`include "src/prim_axi_read_out_if_macros.svh" + + +interface prim_axi_read_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( prim_axi_read_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute prim_axi_read_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`prim_axi_read_out_if_MONITOR_STRUCT + prim_axi_read_out_if_monitor_s prim_axi_read_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `prim_axi_read_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + prim_axi_read_out_if_pkg::prim_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( prim_axi_read_out_if_monitor_struct ); + + + proxy.notify_transaction( prim_axi_read_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(prim_axi_read_out_if_configuration_s prim_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output prim_axi_read_out_if_monitor_s prim_axi_read_out_if_monitor_struct); + // + // Available struct members: + // // prim_axi_read_out_if_monitor_struct.prim_arready + // // prim_axi_read_out_if_monitor_struct.prim_rdata + // // prim_axi_read_out_if_monitor_struct.prim_rresp + // // prim_axi_read_out_if_monitor_struct.prim_rid + // // prim_axi_read_out_if_monitor_struct.prim_rlast + // // prim_axi_read_out_if_monitor_struct.prim_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // prim_axi_read_out_if_monitor_struct.xyz = arready_i; // + // prim_axi_read_out_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // prim_axi_read_out_if_monitor_struct.xyz = rresp_i; // + // prim_axi_read_out_if_monitor_struct.xyz = rid_i; // + // prim_axi_read_out_if_monitor_struct.xyz = rlast_i; // + // prim_axi_read_out_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_random_sequence.svh new file mode 100644 index 000000000..9f624f7a3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the prim_axi_read_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a prim_axi_read_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_read_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=prim_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "prim_axi_read_out_if_random_sequence::body()-prim_axi_read_out_if_transaction randomization failed") + // Send the transaction to the prim_axi_read_out_if_driver_bfm via the sequencer and prim_axi_read_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: prim_axi_read_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_responder_sequence.svh new file mode 100644 index 000000000..ecfaf2543 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_read_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "prim_axi_read_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=prim_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_sequence_base.svh new file mode 100644 index 000000000..8d4377f4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_read_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_read_out_if_transaction_req_t; + prim_axi_read_out_if_transaction_req_t req; + typedef prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_read_out_if_transaction_rsp_t; + prim_axi_read_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = prim_axi_read_out_if_transaction_req_t::type_id::create("req"); + rsp = prim_axi_read_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction.svh new file mode 100644 index 000000000..972915ab7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an prim_axi_read_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( prim_axi_read_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_arready ; + logic [DW-1:0] prim_rdata ; + axi_pkg::axi_burst_e prim_rresp ; + logic [IW-1:0] prim_rid ; + logic prim_rlast ; + logic prim_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in prim_axi_read_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by prim_axi_read_out_if_monitor and prim_axi_read_out_if_monitor_bfm + // This struct is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_MONITOR_STRUCT + prim_axi_read_out_if_monitor_s prim_axi_read_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a prim_axi_read_out_if_monitor_s + // structure. The function returns the handle to the prim_axi_read_out_if_monitor_struct. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by prim_axi_read_out_if_driver and prim_axi_read_out_if_driver_bfm + // to communicate initiator driven data to prim_axi_read_out_if_driver_bfm. + // This struct is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_INITIATOR_STRUCT + prim_axi_read_out_if_initiator_s prim_axi_read_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a prim_axi_read_out_if_initiator_s + // structure. The function returns the handle to the prim_axi_read_out_if_initiator_struct. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by prim_axi_read_out_if_driver and prim_axi_read_out_if_driver_bfm + // to communicate Responder driven data to prim_axi_read_out_if_driver_bfm. + // This struct is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_RESPONDER_STRUCT + prim_axi_read_out_if_responder_s prim_axi_read_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a prim_axi_read_out_if_responder_s + // structure. The function returns the handle to the prim_axi_read_out_if_responder_struct. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_read_out_if_macros.svh + `prim_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_arready:0x%x prim_rdata:0x%x prim_rresp:0x%x prim_rid:0x%x prim_rlast:0x%x prim_rvalid:0x%x ",prim_arready,prim_rdata,prim_rresp,prim_rid,prim_rlast,prim_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_arready == RHS.prim_arready) + &&(this.prim_rdata == RHS.prim_rdata) + &&(this.prim_rresp == RHS.prim_rresp) + &&(this.prim_rid == RHS.prim_rid) + &&(this.prim_rlast == RHS.prim_rlast) + &&(this.prim_rvalid == RHS.prim_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_arready = RHS.prim_arready; + this.prim_rdata = RHS.prim_rdata; + this.prim_rresp = RHS.prim_rresp; + this.prim_rid = RHS.prim_rid; + this.prim_rlast = RHS.prim_rlast; + this.prim_rvalid = RHS.prim_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"prim_axi_read_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_arready,"prim_arready"); + $add_attribute(transaction_view_h,prim_rdata,"prim_rdata"); + $add_attribute(transaction_view_h,prim_rresp,"prim_rresp"); + $add_attribute(transaction_view_h,prim_rid,"prim_rid"); + $add_attribute(transaction_view_h,prim_rlast,"prim_rlast"); + $add_attribute(transaction_view_h,prim_rvalid,"prim_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction_coverage.svh new file mode 100644 index 000000000..cf69fb8ea --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records prim_axi_read_out_if transaction information using +// a covergroup named prim_axi_read_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_read_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(prim_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_read_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup prim_axi_read_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_arready: coverpoint coverage_trans.prim_arready; + prim_rdata: coverpoint coverage_trans.prim_rdata; + prim_rresp: coverpoint coverage_trans.prim_rresp; + prim_rid: coverpoint coverage_trans.prim_rid; + prim_rlast: coverpoint coverage_trans.prim_rlast; + prim_rvalid: coverpoint coverage_trans.prim_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + prim_axi_read_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + prim_axi_read_out_if_transaction_cg.set_inst_name($sformatf("prim_axi_read_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + prim_axi_read_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/src/prim_axi_read_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/yaml/prim_axi_read_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/yaml/prim_axi_read_out_if_interface.yaml new file mode 100644 index 000000000..5c3006321 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_read_out_if_pkg/yaml/prim_axi_read_out_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + prim_axi_read_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/.project new file mode 100644 index 000000000..97cc8aeb8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/.project @@ -0,0 +1,30 @@ + + + prim_axi_write_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/.svproject new file mode 100644 index 000000000..79b1f983b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/Makefile new file mode 100644 index 000000000..623a7daa4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/Makefile @@ -0,0 +1,66 @@ +# prim_axi_write_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +prim_axi_write_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f + +prim_axi_write_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f + +prim_axi_write_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f + +COMP_prim_axi_write_if_PKG_TGT_0 = q_comp_prim_axi_write_if_pkg +COMP_prim_axi_write_if_PKG_TGT_1 = v_comp_prim_axi_write_if_pkg +COMP_prim_axi_write_if_PKG_TGT = $(COMP_prim_axi_write_if_PKG_TGT_$(USE_VELOCE)) + +comp_prim_axi_write_if_pkg: $(COMP_prim_axi_write_if_PKG_TGT) + +q_comp_prim_axi_write_if_pkg: + $(HDL_COMP_CMD) $(prim_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_write_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_write_if_PKG_XRTL) + +v_comp_prim_axi_write_if_pkg: + $(HVL_COMP_CMD) $(prim_axi_write_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_write_if_PKG) + $(VELANALYZE_CMD) $(prim_axi_write_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(prim_axi_write_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_write_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export prim_axi_write_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/dpi + +C_FILE_COMPILE_LIST_prim_axi_write_if_pkg = \ + +O_FILE_COMPILE_LIST_prim_axi_write_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_prim_axi_write_if_pkg:.c=.o)) + +GCC_COMP_ARGS_prim_axi_write_if_pkg += -I$(prim_axi_write_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_prim_axi_write_if_pkg += $(prim_axi_write_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_prim_axi_write_if_pkg += \ + \ + -o .so + +comp_prim_axi_write_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_prim_axi_write_if_pkg) $(C_FILE_COMPILE_LIST_prim_axi_write_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_prim_axi_write_if_pkg) $(O_FILE_COMPILE_LIST_prim_axi_write_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/compile.do new file mode 100644 index 000000000..677a4a098 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of prim_axi_write_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if.compile new file mode 100644 index 000000000..bd0dc7378 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if.compile @@ -0,0 +1,3 @@ +needs: + - prim_axi_write_if_hvl.compile + - prim_axi_write_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_bfm.vinfo new file mode 100644 index 000000000..aaa26f79c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use prim_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/prim_axi_write_if_if.sv +src/prim_axi_write_if_driver_bfm.sv +src/prim_axi_write_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_common.compile new file mode 100644 index 000000000..f496fac10 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f new file mode 100644 index 000000000..efc271244 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f new file mode 100644 index 000000000..711212b62 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f new file mode 100644 index 000000000..9dc37651b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hdl.compile new file mode 100644 index 000000000..547090a3d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./prim_axi_write_if_common.compile +incdir: + - . +src: + - src/prim_axi_write_if_if.sv + - src/prim_axi_write_if_monitor_bfm.sv + - src/prim_axi_write_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hvl.compile new file mode 100644 index 000000000..07cd15926 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./prim_axi_write_if_common.compile +incdir: + - . +src: + - prim_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.sv new file mode 100644 index 000000000..78143d109 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_write_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import prim_axi_write_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/prim_axi_write_if_macros.svh" + + export prim_axi_write_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/prim_axi_write_if_typedefs.svh" + `include "src/prim_axi_write_if_transaction.svh" + + `include "src/prim_axi_write_if_configuration.svh" + `include "src/prim_axi_write_if_driver.svh" + `include "src/prim_axi_write_if_monitor.svh" + + `include "src/prim_axi_write_if_transaction_coverage.svh" + `include "src/prim_axi_write_if_sequence_base.svh" + `include "src/prim_axi_write_if_random_sequence.svh" + + `include "src/prim_axi_write_if_responder_sequence.svh" + `include "src/prim_axi_write_if2reg_adapter.svh" + + `include "src/prim_axi_write_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.vinfo new file mode 100644 index 000000000..da70e9f95 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use prim_axi_write_if_pkg_hdl.vinfo ++incdir+@vinfodir +prim_axi_write_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.sv new file mode 100644 index 000000000..dbe4a2871 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_write_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/prim_axi_write_if_typedefs_hdl.svh" + `include "src/prim_axi_write_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.vinfo new file mode 100644 index 000000000..8eb50779a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +prim_axi_write_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_sve.F new file mode 100644 index 000000000..2232ac433 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_write_if_pkg/prim_axi_write_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if2reg_adapter.svh new file mode 100644 index 000000000..1aad1f2c1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the prim_axi_write_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( prim_axi_write_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "prim_axi_write_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : prim_axi_write_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_agent.svh new file mode 100644 index 000000000..db46f4fe1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(prim_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(prim_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(prim_axi_write_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( prim_axi_write_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_configuration.svh new file mode 100644 index 000000000..114b7e0ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the prim_axi_write_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual prim_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual prim_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_write_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup prim_axi_write_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_CONFIGURATION_STRUCT + prim_axi_write_if_configuration_s prim_axi_write_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a prim_axi_write_if_configuration_s + // structure. The function returns the handle to the prim_axi_write_if_configuration_struct. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + prim_axi_write_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + prim_axi_write_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + prim_axi_write_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + prim_axi_write_if_configuration_cg.set_inst_name($sformatf("prim_axi_write_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver.svh new file mode 100644 index 000000000..f1028f48a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual prim_axi_write_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( prim_axi_write_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in prim_axi_write_if_macros.svh +//******************************************************************* +// Initiator macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm +// to communicate initiator driven data to prim_axi_write_if_driver_bfm. +`prim_axi_write_if_INITIATOR_STRUCT + prim_axi_write_if_initiator_s prim_axi_write_if_initiator_struct; +//******************************************************************* +// Responder macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm +// to communicate Responder driven data to prim_axi_write_if_driver_bfm. +`prim_axi_write_if_RESPONDER_STRUCT + prim_axi_write_if_responder_s prim_axi_write_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + prim_axi_write_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(prim_axi_write_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + prim_axi_write_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(prim_axi_write_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver_bfm.sv new file mode 100644 index 000000000..62c377ccd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the prim_axi_write_if signal driving. It is +// accessed by the uvm prim_axi_write_if driver through a virtual interface +// handle in the prim_axi_write_if configuration. It drives the singals passed +// in through the port connection named bus of type prim_axi_write_if_if. +// +// Input signals from the prim_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within prim_axi_write_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_write_if_pkg_hdl::*; +`include "src/prim_axi_write_if_macros.svh" + +interface prim_axi_write_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (prim_axi_write_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute prim_axi_write_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + prim_axi_write_if_pkg::prim_axi_write_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in prim_axi_write_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from prim_axi_write_if_driver to this BFM + // **************************************************************************** + `prim_axi_write_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm + // to communicate initiator driven data to prim_axi_write_if_driver_bfm. + `prim_axi_write_if_INITIATOR_STRUCT + prim_axi_write_if_initiator_s initiator_struct; + // Responder macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm + // to communicate Responder driven data to prim_axi_write_if_driver_bfm. + `prim_axi_write_if_RESPONDER_STRUCT + prim_axi_write_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(prim_axi_write_if_configuration_s prim_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input prim_axi_write_if_initiator_s prim_axi_write_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output prim_axi_write_if_responder_s prim_axi_write_if_responder_struct + );// pragma tbx xtf + // + // Members within the prim_axi_write_if_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Members within the prim_axi_write_if_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + initiator_struct = prim_axi_write_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // prim_axi_write_if_responder_struct.xyz = awready_i; // + // prim_axi_write_if_responder_struct.xyz = wready_i; // + // prim_axi_write_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // prim_axi_write_if_responder_struct.xyz = bid_i; // + // prim_axi_write_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // prim_axi_write_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = prim_axi_write_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output prim_axi_write_if_initiator_s prim_axi_write_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input prim_axi_write_if_responder_s prim_axi_write_if_responder_struct + );// pragma tbx xtf + // Variables within the prim_axi_write_if_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Variables within the prim_axi_write_if_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= prim_axi_write_if_initiator_struct.xyz; // + // wready_o <= prim_axi_write_if_initiator_struct.xyz; // + // bresp_o <= prim_axi_write_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= prim_axi_write_if_initiator_struct.xyz; // + // bvalid_o <= prim_axi_write_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the prim_axi_write_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the prim_axi_write_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_if.sv new file mode 100644 index 000000000..de556ace4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the prim_axi_write_if interface signals. +// It is instantiated once per prim_axi_write_if bus. Bus Functional Models, +// BFM's named prim_axi_write_if_driver_bfm, are used to drive signals on the bus. +// BFM's named prim_axi_write_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(prim_axi_write_if_bus.awready), // Agent input +// .dut_signal_port(prim_axi_write_if_bus.wready), // Agent input +// .dut_signal_port(prim_axi_write_if_bus.bresp), // Agent input +// .dut_signal_port(prim_axi_write_if_bus.bid), // Agent input +// .dut_signal_port(prim_axi_write_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import prim_axi_write_if_pkg_hdl::*; + +interface prim_axi_write_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_macros.svh new file mode 100644 index 000000000..95c6a8bf7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the prim_axi_write_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the prim_axi_write_if_configuration class. +// + `define prim_axi_write_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } prim_axi_write_if_configuration_s; + + `define prim_axi_write_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function prim_axi_write_if_configuration_s to_struct();\ + prim_axi_write_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( prim_axi_write_if_configuration_struct );\ + endfunction + + `define prim_axi_write_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(prim_axi_write_if_configuration_s prim_axi_write_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = prim_axi_write_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the prim_axi_write_if_transaction class. +// + `define prim_axi_write_if_MONITOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } prim_axi_write_if_monitor_s; + + `define prim_axi_write_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function prim_axi_write_if_monitor_s to_monitor_struct();\ + prim_axi_write_if_monitor_struct = \ + { \ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( prim_axi_write_if_monitor_struct);\ + endfunction\ + + `define prim_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(prim_axi_write_if_monitor_s prim_axi_write_if_monitor_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = prim_axi_write_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the prim_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_write_if_INITIATOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } prim_axi_write_if_initiator_s; + + `define prim_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function prim_axi_write_if_initiator_s to_initiator_struct();\ + prim_axi_write_if_initiator_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( prim_axi_write_if_initiator_struct);\ + endfunction + + `define prim_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(prim_axi_write_if_initiator_s prim_axi_write_if_initiator_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = prim_axi_write_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the prim_axi_write_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_write_if_RESPONDER_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } prim_axi_write_if_responder_s; + + `define prim_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function prim_axi_write_if_responder_s to_responder_struct();\ + prim_axi_write_if_responder_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( prim_axi_write_if_responder_struct);\ + endfunction + + `define prim_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(prim_axi_write_if_responder_s prim_axi_write_if_responder_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = prim_axi_write_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor.svh new file mode 100644 index 000000000..67050c334 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives prim_axi_write_if transactions observed by the +// prim_axi_write_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(prim_axi_write_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual prim_axi_write_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_write_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`prim_axi_write_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the prim_axi_write_if_monitor_struct. + virtual function void notify_transaction(input prim_axi_write_if_monitor_s prim_axi_write_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(prim_axi_write_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor_bfm.sv new file mode 100644 index 000000000..7719d6325 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the prim_axi_write_if signal monitoring. +// It is accessed by the uvm prim_axi_write_if monitor through a virtual +// interface handle in the prim_axi_write_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type prim_axi_write_if_if. +// +// Input signals from the prim_axi_write_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the prim_axi_write_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_write_if_pkg_hdl::*; +`include "src/prim_axi_write_if_macros.svh" + + +interface prim_axi_write_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( prim_axi_write_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute prim_axi_write_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`prim_axi_write_if_MONITOR_STRUCT + prim_axi_write_if_monitor_s prim_axi_write_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `prim_axi_write_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + prim_axi_write_if_pkg::prim_axi_write_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( prim_axi_write_if_monitor_struct ); + + + proxy.notify_transaction( prim_axi_write_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(prim_axi_write_if_configuration_s prim_axi_write_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_write_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output prim_axi_write_if_monitor_s prim_axi_write_if_monitor_struct); + // + // Available struct members: + // // prim_axi_write_if_monitor_struct.prim_awready + // // prim_axi_write_if_monitor_struct.prim_wready + // // prim_axi_write_if_monitor_struct.prim_bresp + // // prim_axi_write_if_monitor_struct.prim_bid + // // prim_axi_write_if_monitor_struct.prim_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // prim_axi_write_if_monitor_struct.xyz = awready_i; // + // prim_axi_write_if_monitor_struct.xyz = wready_i; // + // prim_axi_write_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // prim_axi_write_if_monitor_struct.xyz = bid_i; // + // prim_axi_write_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_random_sequence.svh new file mode 100644 index 000000000..12e4f9c83 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the prim_axi_write_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a prim_axi_write_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_write_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "prim_axi_write_if_random_sequence::body()-prim_axi_write_if_transaction randomization failed") + // Send the transaction to the prim_axi_write_if_driver_bfm via the sequencer and prim_axi_write_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: prim_axi_write_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_responder_sequence.svh new file mode 100644 index 000000000..eec3703ba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_write_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_write_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "prim_axi_write_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=prim_axi_write_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_sequence_base.svh new file mode 100644 index 000000000..a606d7b2b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_write_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_write_if_transaction_req_t; + prim_axi_write_if_transaction_req_t req; + typedef prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_write_if_transaction_rsp_t; + prim_axi_write_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = prim_axi_write_if_transaction_req_t::type_id::create("req"); + rsp = prim_axi_write_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction.svh new file mode 100644 index 000000000..7e1571969 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an prim_axi_write_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( prim_axi_write_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_awready ; + logic prim_wready ; + axi_pkg::axi_burst_e prim_bresp ; + logic prim_bid ; + logic prim_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in prim_axi_write_if_macros.svh + + //******************************************************************* + // Monitor macro used by prim_axi_write_if_monitor and prim_axi_write_if_monitor_bfm + // This struct is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_MONITOR_STRUCT + prim_axi_write_if_monitor_s prim_axi_write_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a prim_axi_write_if_monitor_s + // structure. The function returns the handle to the prim_axi_write_if_monitor_struct. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm + // to communicate initiator driven data to prim_axi_write_if_driver_bfm. + // This struct is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_INITIATOR_STRUCT + prim_axi_write_if_initiator_s prim_axi_write_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a prim_axi_write_if_initiator_s + // structure. The function returns the handle to the prim_axi_write_if_initiator_struct. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by prim_axi_write_if_driver and prim_axi_write_if_driver_bfm + // to communicate Responder driven data to prim_axi_write_if_driver_bfm. + // This struct is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_RESPONDER_STRUCT + prim_axi_write_if_responder_s prim_axi_write_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a prim_axi_write_if_responder_s + // structure. The function returns the handle to the prim_axi_write_if_responder_struct. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_write_if_macros.svh + `prim_axi_write_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awready:0x%x prim_wready:0x%x prim_bresp:0x%x prim_bid:0x%x prim_bvalid:0x%x ",prim_awready,prim_wready,prim_bresp,prim_bid,prim_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_awready == RHS.prim_awready) + &&(this.prim_wready == RHS.prim_wready) + &&(this.prim_bresp == RHS.prim_bresp) + &&(this.prim_bid == RHS.prim_bid) + &&(this.prim_bvalid == RHS.prim_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awready = RHS.prim_awready; + this.prim_wready = RHS.prim_wready; + this.prim_bresp = RHS.prim_bresp; + this.prim_bid = RHS.prim_bid; + this.prim_bvalid = RHS.prim_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"prim_axi_write_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awready,"prim_awready"); + $add_attribute(transaction_view_h,prim_wready,"prim_wready"); + $add_attribute(transaction_view_h,prim_bresp,"prim_bresp"); + $add_attribute(transaction_view_h,prim_bid,"prim_bid"); + $add_attribute(transaction_view_h,prim_bvalid,"prim_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction_coverage.svh new file mode 100644 index 000000000..6f9d9804b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records prim_axi_write_if transaction information using +// a covergroup named prim_axi_write_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(prim_axi_write_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_write_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup prim_axi_write_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awready: coverpoint coverage_trans.prim_awready; + prim_wready: coverpoint coverage_trans.prim_wready; + prim_bresp: coverpoint coverage_trans.prim_bresp; + prim_bid: coverpoint coverage_trans.prim_bid; + prim_bvalid: coverpoint coverage_trans.prim_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + prim_axi_write_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + prim_axi_write_if_transaction_cg.set_inst_name($sformatf("prim_axi_write_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + prim_axi_write_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/src/prim_axi_write_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/yaml/prim_axi_write_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/yaml/prim_axi_write_if_interface.yaml new file mode 100644 index 000000000..e5bd3c347 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_if_pkg/yaml/prim_axi_write_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + prim_axi_write_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.project new file mode 100644 index 000000000..c176cd178 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + prim_axi_write_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.svproject new file mode 100644 index 000000000..0999e5cba --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/Makefile new file mode 100644 index 000000000..2ecf149e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# prim_axi_write_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +prim_axi_write_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hvl.f + +prim_axi_write_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hdl.f + +prim_axi_write_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_xrtl.f + +COMP_prim_axi_write_out_if_PKG_TGT_0 = q_comp_prim_axi_write_out_if_pkg +COMP_prim_axi_write_out_if_PKG_TGT_1 = v_comp_prim_axi_write_out_if_pkg +COMP_prim_axi_write_out_if_PKG_TGT = $(COMP_prim_axi_write_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_prim_axi_write_out_if_pkg: $(COMP_prim_axi_write_out_if_PKG_TGT) + +q_comp_prim_axi_write_out_if_pkg: + $(HDL_COMP_CMD) $(prim_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_write_out_if_PKG_XRTL) + +v_comp_prim_axi_write_out_if_pkg: + $(HVL_COMP_CMD) $(prim_axi_write_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(prim_axi_write_out_if_PKG) + $(VELANALYZE_CMD) $(prim_axi_write_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(prim_axi_write_out_if_PKG) + $(HDL_COMP_CMD) $(prim_axi_write_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export prim_axi_write_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_prim_axi_write_out_if_pkg = \ + +O_FILE_COMPILE_LIST_prim_axi_write_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_prim_axi_write_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_prim_axi_write_out_if_pkg += -I$(prim_axi_write_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_prim_axi_write_out_if_pkg += $(prim_axi_write_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_prim_axi_write_out_if_pkg += \ + \ + -o .so + +comp_prim_axi_write_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_prim_axi_write_out_if_pkg) $(C_FILE_COMPILE_LIST_prim_axi_write_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_prim_axi_write_out_if_pkg) $(O_FILE_COMPILE_LIST_prim_axi_write_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/compile.do new file mode 100644 index 000000000..15879fa4c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of prim_axi_write_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if.compile new file mode 100644 index 000000000..3bec6af69 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if.compile @@ -0,0 +1,3 @@ +needs: + - prim_axi_write_out_if_hvl.compile + - prim_axi_write_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_bfm.vinfo new file mode 100644 index 000000000..3260e601e --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use prim_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/prim_axi_write_out_if_if.sv +src/prim_axi_write_out_if_driver_bfm.sv +src/prim_axi_write_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_common.compile new file mode 100644 index 000000000..18c7cd074 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - prim_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hdl.f new file mode 100644 index 000000000..fca35261c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hvl.f new file mode 100644 index 000000000..cc3120398 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_xrtl.f new file mode 100644 index 000000000..d880c05ab --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hdl.compile new file mode 100644 index 000000000..1e451c889 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./prim_axi_write_out_if_common.compile +incdir: + - . +src: + - src/prim_axi_write_out_if_if.sv + - src/prim_axi_write_out_if_monitor_bfm.sv + - src/prim_axi_write_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hvl.compile new file mode 100644 index 000000000..7c4235dd0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./prim_axi_write_out_if_common.compile +incdir: + - . +src: + - prim_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.sv new file mode 100644 index 000000000..e9936a387 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_write_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import prim_axi_write_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/prim_axi_write_out_if_macros.svh" + + export prim_axi_write_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/prim_axi_write_out_if_typedefs.svh" + `include "src/prim_axi_write_out_if_transaction.svh" + + `include "src/prim_axi_write_out_if_configuration.svh" + `include "src/prim_axi_write_out_if_driver.svh" + `include "src/prim_axi_write_out_if_monitor.svh" + + `include "src/prim_axi_write_out_if_transaction_coverage.svh" + `include "src/prim_axi_write_out_if_sequence_base.svh" + `include "src/prim_axi_write_out_if_random_sequence.svh" + + `include "src/prim_axi_write_out_if_responder_sequence.svh" + `include "src/prim_axi_write_out_if2reg_adapter.svh" + + `include "src/prim_axi_write_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.vinfo new file mode 100644 index 000000000..202d1770d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use prim_axi_write_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +prim_axi_write_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.sv new file mode 100644 index 000000000..2956468f3 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package prim_axi_write_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/prim_axi_write_out_if_typedefs_hdl.svh" + `include "src/prim_axi_write_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..8528147da --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +prim_axi_write_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_sve.F new file mode 100644 index 000000000..492fecffa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/prim_axi_write_out_if_pkg/prim_axi_write_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if2reg_adapter.svh new file mode 100644 index 000000000..3937222fe --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the prim_axi_write_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( prim_axi_write_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "prim_axi_write_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : prim_axi_write_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_agent.svh new file mode 100644 index 000000000..2a241e356 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(prim_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(prim_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(prim_axi_write_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( prim_axi_write_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_configuration.svh new file mode 100644 index 000000000..7494ed5da --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the prim_axi_write_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual prim_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual prim_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_write_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup prim_axi_write_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_CONFIGURATION_STRUCT + prim_axi_write_out_if_configuration_s prim_axi_write_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a prim_axi_write_out_if_configuration_s + // structure. The function returns the handle to the prim_axi_write_out_if_configuration_struct. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + prim_axi_write_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + prim_axi_write_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + prim_axi_write_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + prim_axi_write_out_if_configuration_cg.set_inst_name($sformatf("prim_axi_write_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(prim_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver.svh new file mode 100644 index 000000000..15cac7080 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual prim_axi_write_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( prim_axi_write_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in prim_axi_write_out_if_macros.svh +//******************************************************************* +// Initiator macro used by prim_axi_write_out_if_driver and prim_axi_write_out_if_driver_bfm +// to communicate initiator driven data to prim_axi_write_out_if_driver_bfm. +`prim_axi_write_out_if_INITIATOR_STRUCT + prim_axi_write_out_if_initiator_s prim_axi_write_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by prim_axi_write_out_if_driver and prim_axi_write_out_if_driver_bfm +// to communicate Responder driven data to prim_axi_write_out_if_driver_bfm. +`prim_axi_write_out_if_RESPONDER_STRUCT + prim_axi_write_out_if_responder_s prim_axi_write_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + prim_axi_write_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(prim_axi_write_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + prim_axi_write_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(prim_axi_write_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver_bfm.sv new file mode 100644 index 000000000..eaecaa7f0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_driver_bfm.sv @@ -0,0 +1,341 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the prim_axi_write_out_if signal driving. It is +// accessed by the uvm prim_axi_write_out_if driver through a virtual interface +// handle in the prim_axi_write_out_if configuration. It drives the singals passed +// in through the port connection named bus of type prim_axi_write_out_if_if. +// +// Input signals from the prim_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within prim_axi_write_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_write_out_if_pkg_hdl::*; +`include "src/prim_axi_write_out_if_macros.svh" + +interface prim_axi_write_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (prim_axi_write_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute prim_axi_write_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri awready_i; + reg awready_o = 'bz; + tri wready_i; + reg wready_o = 'bz; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + reg [$bits(axi_pkg::axi_burst_e)-1:0] bresp_o = 'bz; + tri bid_i; + reg bid_o = 'bz; + tri bvalid_i; + reg bvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign awready_i = bus.awready; + assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz; + assign wready_i = bus.wready; + assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz; + assign bresp_i = bus.bresp; + assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz; + assign bid_i = bus.bid; + assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz; + assign bvalid_i = bus.bvalid; + assign bus.bvalid = (initiator_responder == RESPONDER) ? bvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + prim_axi_write_out_if_pkg::prim_axi_write_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in prim_axi_write_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from prim_axi_write_out_if_driver to this BFM + // **************************************************************************** + `prim_axi_write_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by prim_axi_write_out_if_driver and prim_axi_write_out_if_driver_bfm + // to communicate initiator driven data to prim_axi_write_out_if_driver_bfm. + `prim_axi_write_out_if_INITIATOR_STRUCT + prim_axi_write_out_if_initiator_s initiator_struct; + // Responder macro used by prim_axi_write_out_if_driver and prim_axi_write_out_if_driver_bfm + // to communicate Responder driven data to prim_axi_write_out_if_driver_bfm. + `prim_axi_write_out_if_RESPONDER_STRUCT + prim_axi_write_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + awready_o <= 'bz; + wready_o <= 'bz; + bresp_o <= 'bz; + bid_o <= 'bz; + bvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(prim_axi_write_out_if_configuration_s prim_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input prim_axi_write_out_if_initiator_s prim_axi_write_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output prim_axi_write_out_if_responder_s prim_axi_write_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the prim_axi_write_out_if_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Members within the prim_axi_write_out_if_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + initiator_struct = prim_axi_write_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // prim_axi_write_out_if_responder_struct.xyz = awready_i; // + // prim_axi_write_out_if_responder_struct.xyz = wready_i; // + // prim_axi_write_out_if_responder_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // prim_axi_write_out_if_responder_struct.xyz = bid_i; // + // prim_axi_write_out_if_responder_struct.xyz = bvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // prim_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = prim_axi_write_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output prim_axi_write_out_if_initiator_s prim_axi_write_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input prim_axi_write_out_if_responder_s prim_axi_write_out_if_responder_struct + );// pragma tbx xtf + // Variables within the prim_axi_write_out_if_initiator_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Variables within the prim_axi_write_out_if_responder_struct: + // logic prim_awready ; + // logic prim_wready ; + // axi_pkg::axi_burst_e prim_bresp ; + // logic prim_bid ; + // logic prim_bvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // awready_o <= prim_axi_write_out_if_initiator_struct.xyz; // + // wready_o <= prim_axi_write_out_if_initiator_struct.xyz; // + // bresp_o <= prim_axi_write_out_if_initiator_struct.xyz; // [$bits(axi_pkg::axi_burst_e)-1:0] + // bid_o <= prim_axi_write_out_if_initiator_struct.xyz; // + // bvalid_o <= prim_axi_write_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the prim_axi_write_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the prim_axi_write_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_if.sv new file mode 100644 index 000000000..ab746c836 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_if.sv @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the prim_axi_write_out_if interface signals. +// It is instantiated once per prim_axi_write_out_if bus. Bus Functional Models, +// BFM's named prim_axi_write_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named prim_axi_write_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(prim_axi_write_out_if_bus.awready), // Agent input +// .dut_signal_port(prim_axi_write_out_if_bus.wready), // Agent input +// .dut_signal_port(prim_axi_write_out_if_bus.bresp), // Agent input +// .dut_signal_port(prim_axi_write_out_if_bus.bid), // Agent input +// .dut_signal_port(prim_axi_write_out_if_bus.bvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import prim_axi_write_out_if_pkg_hdl::*; + +interface prim_axi_write_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri awready, + inout tri wready, + inout tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp, + inout tri bid, + inout tri bvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input awready, + input wready, + input bresp, + input bid, + input bvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output awready, + output wready, + output bresp, + output bid, + output bvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_macros.svh new file mode 100644 index 000000000..f85b89591 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_macros.svh @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the prim_axi_write_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the prim_axi_write_out_if_configuration class. +// + `define prim_axi_write_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } prim_axi_write_out_if_configuration_s; + + `define prim_axi_write_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function prim_axi_write_out_if_configuration_s to_struct();\ + prim_axi_write_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( prim_axi_write_out_if_configuration_struct );\ + endfunction + + `define prim_axi_write_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(prim_axi_write_out_if_configuration_s prim_axi_write_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = prim_axi_write_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the prim_axi_write_out_if_transaction class. +// + `define prim_axi_write_out_if_MONITOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } prim_axi_write_out_if_monitor_s; + + `define prim_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function prim_axi_write_out_if_monitor_s to_monitor_struct();\ + prim_axi_write_out_if_monitor_struct = \ + { \ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( prim_axi_write_out_if_monitor_struct);\ + endfunction\ + + `define prim_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(prim_axi_write_out_if_monitor_s prim_axi_write_out_if_monitor_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = prim_axi_write_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the prim_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_write_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } prim_axi_write_out_if_initiator_s; + + `define prim_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function prim_axi_write_out_if_initiator_s to_initiator_struct();\ + prim_axi_write_out_if_initiator_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( prim_axi_write_out_if_initiator_struct);\ + endfunction + + `define prim_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(prim_axi_write_out_if_initiator_s prim_axi_write_out_if_initiator_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = prim_axi_write_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the prim_axi_write_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define prim_axi_write_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic prim_awready ; \ + logic prim_wready ; \ + axi_pkg::axi_burst_e prim_bresp ; \ + logic prim_bid ; \ + logic prim_bvalid ; \ + } prim_axi_write_out_if_responder_s; + + `define prim_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function prim_axi_write_out_if_responder_s to_responder_struct();\ + prim_axi_write_out_if_responder_struct = \ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + };\ + return ( prim_axi_write_out_if_responder_struct);\ + endfunction + + `define prim_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(prim_axi_write_out_if_responder_s prim_axi_write_out_if_responder_struct);\ + {\ + this.prim_awready , \ + this.prim_wready , \ + this.prim_bresp , \ + this.prim_bid , \ + this.prim_bvalid \ + } = prim_axi_write_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor.svh new file mode 100644 index 000000000..f387b3874 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives prim_axi_write_out_if transactions observed by the +// prim_axi_write_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(prim_axi_write_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual prim_axi_write_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_write_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`prim_axi_write_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the prim_axi_write_out_if_monitor_struct. + virtual function void notify_transaction(input prim_axi_write_out_if_monitor_s prim_axi_write_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(prim_axi_write_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor_bfm.sv new file mode 100644 index 000000000..7bb9d30cd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_monitor_bfm.sv @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the prim_axi_write_out_if signal monitoring. +// It is accessed by the uvm prim_axi_write_out_if monitor through a virtual +// interface handle in the prim_axi_write_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type prim_axi_write_out_if_if. +// +// Input signals from the prim_axi_write_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the prim_axi_write_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import prim_axi_write_out_if_pkg_hdl::*; +`include "src/prim_axi_write_out_if_macros.svh" + + +interface prim_axi_write_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( prim_axi_write_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute prim_axi_write_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`prim_axi_write_out_if_MONITOR_STRUCT + prim_axi_write_out_if_monitor_s prim_axi_write_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `prim_axi_write_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri awready_i; + tri wready_i; + tri [$bits(axi_pkg::axi_burst_e)-1:0] bresp_i; + tri bid_i; + tri bvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign awready_i = bus.awready; + assign wready_i = bus.wready; + assign bresp_i = bus.bresp; + assign bid_i = bus.bid; + assign bvalid_i = bus.bvalid; + + // Proxy handle to UVM monitor + prim_axi_write_out_if_pkg::prim_axi_write_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( prim_axi_write_out_if_monitor_struct ); + + + proxy.notify_transaction( prim_axi_write_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(prim_axi_write_out_if_configuration_s prim_axi_write_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = prim_axi_write_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output prim_axi_write_out_if_monitor_s prim_axi_write_out_if_monitor_struct); + // + // Available struct members: + // // prim_axi_write_out_if_monitor_struct.prim_awready + // // prim_axi_write_out_if_monitor_struct.prim_wready + // // prim_axi_write_out_if_monitor_struct.prim_bresp + // // prim_axi_write_out_if_monitor_struct.prim_bid + // // prim_axi_write_out_if_monitor_struct.prim_bvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // prim_axi_write_out_if_monitor_struct.xyz = awready_i; // + // prim_axi_write_out_if_monitor_struct.xyz = wready_i; // + // prim_axi_write_out_if_monitor_struct.xyz = bresp_i; // [$bits(axi_pkg::axi_burst_e)-1:0] + // prim_axi_write_out_if_monitor_struct.xyz = bid_i; // + // prim_axi_write_out_if_monitor_struct.xyz = bvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_random_sequence.svh new file mode 100644 index 000000000..a08f27b67 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the prim_axi_write_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a prim_axi_write_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_write_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=prim_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "prim_axi_write_out_if_random_sequence::body()-prim_axi_write_out_if_transaction randomization failed") + // Send the transaction to the prim_axi_write_out_if_driver_bfm via the sequencer and prim_axi_write_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: prim_axi_write_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_responder_sequence.svh new file mode 100644 index 000000000..5fd14eb62 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends prim_axi_write_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( prim_axi_write_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "prim_axi_write_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=prim_axi_write_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_sequence_base.svh new file mode 100644 index 000000000..c5e7917da --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( prim_axi_write_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_write_out_if_transaction_req_t; + prim_axi_write_out_if_transaction_req_t req; + typedef prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + prim_axi_write_out_if_transaction_rsp_t; + prim_axi_write_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = prim_axi_write_out_if_transaction_req_t::type_id::create("req"); + rsp = prim_axi_write_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction.svh new file mode 100644 index 000000000..aea5dc8a0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction.svh @@ -0,0 +1,236 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an prim_axi_write_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( prim_axi_write_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic prim_awready ; + logic prim_wready ; + axi_pkg::axi_burst_e prim_bresp ; + logic prim_bid ; + logic prim_bvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in prim_axi_write_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by prim_axi_write_out_if_monitor and prim_axi_write_out_if_monitor_bfm + // This struct is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_MONITOR_STRUCT + prim_axi_write_out_if_monitor_s prim_axi_write_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a prim_axi_write_out_if_monitor_s + // structure. The function returns the handle to the prim_axi_write_out_if_monitor_struct. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by prim_axi_write_out_if_driver and prim_axi_write_out_if_driver_bfm + // to communicate initiator driven data to prim_axi_write_out_if_driver_bfm. + // This struct is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_INITIATOR_STRUCT + prim_axi_write_out_if_initiator_s prim_axi_write_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a prim_axi_write_out_if_initiator_s + // structure. The function returns the handle to the prim_axi_write_out_if_initiator_struct. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by prim_axi_write_out_if_driver and prim_axi_write_out_if_driver_bfm + // to communicate Responder driven data to prim_axi_write_out_if_driver_bfm. + // This struct is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_RESPONDER_STRUCT + prim_axi_write_out_if_responder_s prim_axi_write_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a prim_axi_write_out_if_responder_s + // structure. The function returns the handle to the prim_axi_write_out_if_responder_struct. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in prim_axi_write_out_if_macros.svh + `prim_axi_write_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("prim_awready:0x%x prim_wready:0x%x prim_bresp:0x%x prim_bid:0x%x prim_bvalid:0x%x ",prim_awready,prim_wready,prim_bresp,prim_bid,prim_bvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.prim_awready == RHS.prim_awready) + &&(this.prim_wready == RHS.prim_wready) + &&(this.prim_bresp == RHS.prim_bresp) + &&(this.prim_bid == RHS.prim_bid) + &&(this.prim_bvalid == RHS.prim_bvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.prim_awready = RHS.prim_awready; + this.prim_wready = RHS.prim_wready; + this.prim_bresp = RHS.prim_bresp; + this.prim_bid = RHS.prim_bid; + this.prim_bvalid = RHS.prim_bvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"prim_axi_write_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,prim_awready,"prim_awready"); + $add_attribute(transaction_view_h,prim_wready,"prim_wready"); + $add_attribute(transaction_view_h,prim_bresp,"prim_bresp"); + $add_attribute(transaction_view_h,prim_bid,"prim_bid"); + $add_attribute(transaction_view_h,prim_bvalid,"prim_bvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction_coverage.svh new file mode 100644 index 000000000..df6bc2e86 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_transaction_coverage.svh @@ -0,0 +1,106 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records prim_axi_write_out_if transaction information using +// a covergroup named prim_axi_write_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class prim_axi_write_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(prim_axi_write_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( prim_axi_write_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup prim_axi_write_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + prim_awready: coverpoint coverage_trans.prim_awready; + prim_wready: coverpoint coverage_trans.prim_wready; + prim_bresp: coverpoint coverage_trans.prim_bresp; + prim_bid: coverpoint coverage_trans.prim_bid; + prim_bvalid: coverpoint coverage_trans.prim_bvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + prim_axi_write_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + prim_axi_write_out_if_transaction_cg.set_inst_name($sformatf("prim_axi_write_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + prim_axi_write_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/src/prim_axi_write_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/yaml/prim_axi_write_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/yaml/prim_axi_write_out_if_interface.yaml new file mode 100644 index 000000000..aa66e27a7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/prim_axi_write_out_if_pkg/yaml/prim_axi_write_out_if_interface.yaml @@ -0,0 +1,81 @@ +uvmf: + interfaces: + prim_axi_write_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: awready + reset_value: '''bz' + width: '1' + - dir: input + name: wready + reset_value: '''bz' + width: '1' + - dir: input + name: bresp + reset_value: '''bz' + width: '[''$bits(axi_pkg::axi_burst_e)'']' + - dir: input + name: bid + reset_value: '''bz' + width: '1' + - dir: input + name: bvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_awready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_wready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bid + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: prim_bvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/.project new file mode 100644 index 000000000..2683cb016 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/.project @@ -0,0 +1,30 @@ + + + secreg_axi_read_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/.svproject new file mode 100644 index 000000000..72277d03c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/Makefile new file mode 100644 index 000000000..2d3ef8fcd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/Makefile @@ -0,0 +1,66 @@ +# secreg_axi_read_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +secreg_axi_read_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f + +secreg_axi_read_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f + +secreg_axi_read_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f + +COMP_secreg_axi_read_if_PKG_TGT_0 = q_comp_secreg_axi_read_if_pkg +COMP_secreg_axi_read_if_PKG_TGT_1 = v_comp_secreg_axi_read_if_pkg +COMP_secreg_axi_read_if_PKG_TGT = $(COMP_secreg_axi_read_if_PKG_TGT_$(USE_VELOCE)) + +comp_secreg_axi_read_if_pkg: $(COMP_secreg_axi_read_if_PKG_TGT) + +q_comp_secreg_axi_read_if_pkg: + $(HDL_COMP_CMD) $(secreg_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(secreg_axi_read_if_PKG) + $(HDL_COMP_CMD) $(secreg_axi_read_if_PKG_XRTL) + +v_comp_secreg_axi_read_if_pkg: + $(HVL_COMP_CMD) $(secreg_axi_read_if_PKG_HDL) + $(HVL_COMP_CMD) $(secreg_axi_read_if_PKG) + $(VELANALYZE_CMD) $(secreg_axi_read_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(secreg_axi_read_if_PKG) + $(HDL_COMP_CMD) $(secreg_axi_read_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export secreg_axi_read_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/dpi + +C_FILE_COMPILE_LIST_secreg_axi_read_if_pkg = \ + +O_FILE_COMPILE_LIST_secreg_axi_read_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_secreg_axi_read_if_pkg:.c=.o)) + +GCC_COMP_ARGS_secreg_axi_read_if_pkg += -I$(secreg_axi_read_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_secreg_axi_read_if_pkg += $(secreg_axi_read_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_secreg_axi_read_if_pkg += \ + \ + -o .so + +comp_secreg_axi_read_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_secreg_axi_read_if_pkg) $(C_FILE_COMPILE_LIST_secreg_axi_read_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_secreg_axi_read_if_pkg) $(O_FILE_COMPILE_LIST_secreg_axi_read_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/compile.do new file mode 100644 index 000000000..864496dd5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of secreg_axi_read_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if.compile new file mode 100644 index 000000000..c7d9ea90d --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if.compile @@ -0,0 +1,3 @@ +needs: + - secreg_axi_read_if_hvl.compile + - secreg_axi_read_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_bfm.vinfo new file mode 100644 index 000000000..557cbed12 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use secreg_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/secreg_axi_read_if_if.sv +src/secreg_axi_read_if_driver_bfm.sv +src/secreg_axi_read_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_common.compile new file mode 100644 index 000000000..fbd65847f --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f new file mode 100644 index 000000000..7f0ec9552 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f new file mode 100644 index 000000000..d8510e398 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f new file mode 100644 index 000000000..cb3095083 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hdl.compile new file mode 100644 index 000000000..d84364941 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./secreg_axi_read_if_common.compile +incdir: + - . +src: + - src/secreg_axi_read_if_if.sv + - src/secreg_axi_read_if_monitor_bfm.sv + - src/secreg_axi_read_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hvl.compile new file mode 100644 index 000000000..14ff5a6a2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./secreg_axi_read_if_common.compile +incdir: + - . +src: + - secreg_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.sv new file mode 100644 index 000000000..a8766a676 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package secreg_axi_read_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import secreg_axi_read_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/secreg_axi_read_if_macros.svh" + + export secreg_axi_read_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/secreg_axi_read_if_typedefs.svh" + `include "src/secreg_axi_read_if_transaction.svh" + + `include "src/secreg_axi_read_if_configuration.svh" + `include "src/secreg_axi_read_if_driver.svh" + `include "src/secreg_axi_read_if_monitor.svh" + + `include "src/secreg_axi_read_if_transaction_coverage.svh" + `include "src/secreg_axi_read_if_sequence_base.svh" + `include "src/secreg_axi_read_if_random_sequence.svh" + + `include "src/secreg_axi_read_if_responder_sequence.svh" + `include "src/secreg_axi_read_if2reg_adapter.svh" + + `include "src/secreg_axi_read_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.vinfo new file mode 100644 index 000000000..9ef82e6b1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use secreg_axi_read_if_pkg_hdl.vinfo ++incdir+@vinfodir +secreg_axi_read_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.sv new file mode 100644 index 000000000..6e5d0d9fd --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package secreg_axi_read_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/secreg_axi_read_if_typedefs_hdl.svh" + `include "src/secreg_axi_read_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.vinfo new file mode 100644 index 000000000..c8b7f5572 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +secreg_axi_read_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_sve.F new file mode 100644 index 000000000..ec83c1931 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/secreg_axi_read_if_pkg/secreg_axi_read_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if2reg_adapter.svh new file mode 100644 index 000000000..9b9b95c9c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the secreg_axi_read_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( secreg_axi_read_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "secreg_axi_read_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : secreg_axi_read_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_agent.svh new file mode 100644 index 000000000..b7809cae6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(secreg_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(secreg_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(secreg_axi_read_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( secreg_axi_read_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_configuration.svh new file mode 100644 index 000000000..2fff5b259 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the secreg_axi_read_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual secreg_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual secreg_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( secreg_axi_read_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup secreg_axi_read_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_CONFIGURATION_STRUCT + secreg_axi_read_if_configuration_s secreg_axi_read_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a secreg_axi_read_if_configuration_s + // structure. The function returns the handle to the secreg_axi_read_if_configuration_struct. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + secreg_axi_read_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + secreg_axi_read_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + secreg_axi_read_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + secreg_axi_read_if_configuration_cg.set_inst_name($sformatf("secreg_axi_read_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver.svh new file mode 100644 index 000000000..02e992918 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual secreg_axi_read_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( secreg_axi_read_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in secreg_axi_read_if_macros.svh +//******************************************************************* +// Initiator macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm +// to communicate initiator driven data to secreg_axi_read_if_driver_bfm. +`secreg_axi_read_if_INITIATOR_STRUCT + secreg_axi_read_if_initiator_s secreg_axi_read_if_initiator_struct; +//******************************************************************* +// Responder macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm +// to communicate Responder driven data to secreg_axi_read_if_driver_bfm. +`secreg_axi_read_if_RESPONDER_STRUCT + secreg_axi_read_if_responder_s secreg_axi_read_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + secreg_axi_read_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(secreg_axi_read_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + secreg_axi_read_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(secreg_axi_read_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver_bfm.sv new file mode 100644 index 000000000..4ebf76fbf --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the secreg_axi_read_if signal driving. It is +// accessed by the uvm secreg_axi_read_if driver through a virtual interface +// handle in the secreg_axi_read_if configuration. It drives the singals passed +// in through the port connection named bus of type secreg_axi_read_if_if. +// +// Input signals from the secreg_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within secreg_axi_read_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import secreg_axi_read_if_pkg_hdl::*; +`include "src/secreg_axi_read_if_macros.svh" + +interface secreg_axi_read_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (secreg_axi_read_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute secreg_axi_read_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + secreg_axi_read_if_pkg::secreg_axi_read_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in secreg_axi_read_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from secreg_axi_read_if_driver to this BFM + // **************************************************************************** + `secreg_axi_read_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm + // to communicate initiator driven data to secreg_axi_read_if_driver_bfm. + `secreg_axi_read_if_INITIATOR_STRUCT + secreg_axi_read_if_initiator_s initiator_struct; + // Responder macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm + // to communicate Responder driven data to secreg_axi_read_if_driver_bfm. + `secreg_axi_read_if_RESPONDER_STRUCT + secreg_axi_read_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(secreg_axi_read_if_configuration_s secreg_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = secreg_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input secreg_axi_read_if_initiator_s secreg_axi_read_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output secreg_axi_read_if_responder_s secreg_axi_read_if_responder_struct + );// pragma tbx xtf + // + // Members within the secreg_axi_read_if_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Members within the secreg_axi_read_if_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + initiator_struct = secreg_axi_read_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // secreg_axi_read_if_responder_struct.xyz = arready_i; // + // secreg_axi_read_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // secreg_axi_read_if_responder_struct.xyz = rresp_i; // + // secreg_axi_read_if_responder_struct.xyz = rid_i; // + // secreg_axi_read_if_responder_struct.xyz = rlast_i; // + // secreg_axi_read_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // secreg_axi_read_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = secreg_axi_read_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output secreg_axi_read_if_initiator_s secreg_axi_read_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input secreg_axi_read_if_responder_s secreg_axi_read_if_responder_struct + );// pragma tbx xtf + // Variables within the secreg_axi_read_if_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Variables within the secreg_axi_read_if_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= secreg_axi_read_if_initiator_struct.xyz; // + // rdata_o <= secreg_axi_read_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= secreg_axi_read_if_initiator_struct.xyz; // + // rid_o <= secreg_axi_read_if_initiator_struct.xyz; // + // rlast_o <= secreg_axi_read_if_initiator_struct.xyz; // + // rvalid_o <= secreg_axi_read_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the secreg_axi_read_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the secreg_axi_read_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_if.sv new file mode 100644 index 000000000..299364565 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the secreg_axi_read_if interface signals. +// It is instantiated once per secreg_axi_read_if bus. Bus Functional Models, +// BFM's named secreg_axi_read_if_driver_bfm, are used to drive signals on the bus. +// BFM's named secreg_axi_read_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(secreg_axi_read_if_bus.arready), // Agent input +// .dut_signal_port(secreg_axi_read_if_bus.rdata), // Agent input +// .dut_signal_port(secreg_axi_read_if_bus.rresp), // Agent input +// .dut_signal_port(secreg_axi_read_if_bus.rid), // Agent input +// .dut_signal_port(secreg_axi_read_if_bus.rlast), // Agent input +// .dut_signal_port(secreg_axi_read_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import secreg_axi_read_if_pkg_hdl::*; + +interface secreg_axi_read_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_macros.svh new file mode 100644 index 000000000..01e181bac --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the secreg_axi_read_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the secreg_axi_read_if_configuration class. +// + `define secreg_axi_read_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } secreg_axi_read_if_configuration_s; + + `define secreg_axi_read_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function secreg_axi_read_if_configuration_s to_struct();\ + secreg_axi_read_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( secreg_axi_read_if_configuration_struct );\ + endfunction + + `define secreg_axi_read_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(secreg_axi_read_if_configuration_s secreg_axi_read_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = secreg_axi_read_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the secreg_axi_read_if_transaction class. +// + `define secreg_axi_read_if_MONITOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } secreg_axi_read_if_monitor_s; + + `define secreg_axi_read_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function secreg_axi_read_if_monitor_s to_monitor_struct();\ + secreg_axi_read_if_monitor_struct = \ + { \ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( secreg_axi_read_if_monitor_struct);\ + endfunction\ + + `define secreg_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(secreg_axi_read_if_monitor_s secreg_axi_read_if_monitor_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = secreg_axi_read_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the secreg_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define secreg_axi_read_if_INITIATOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } secreg_axi_read_if_initiator_s; + + `define secreg_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function secreg_axi_read_if_initiator_s to_initiator_struct();\ + secreg_axi_read_if_initiator_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( secreg_axi_read_if_initiator_struct);\ + endfunction + + `define secreg_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(secreg_axi_read_if_initiator_s secreg_axi_read_if_initiator_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = secreg_axi_read_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the secreg_axi_read_if_transaction class. +// Also update the comments in the driver BFM. +// + `define secreg_axi_read_if_RESPONDER_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } secreg_axi_read_if_responder_s; + + `define secreg_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function secreg_axi_read_if_responder_s to_responder_struct();\ + secreg_axi_read_if_responder_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( secreg_axi_read_if_responder_struct);\ + endfunction + + `define secreg_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(secreg_axi_read_if_responder_s secreg_axi_read_if_responder_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = secreg_axi_read_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor.svh new file mode 100644 index 000000000..4a1a86451 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives secreg_axi_read_if transactions observed by the +// secreg_axi_read_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(secreg_axi_read_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual secreg_axi_read_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( secreg_axi_read_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`secreg_axi_read_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the secreg_axi_read_if_monitor_struct. + virtual function void notify_transaction(input secreg_axi_read_if_monitor_s secreg_axi_read_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(secreg_axi_read_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor_bfm.sv new file mode 100644 index 000000000..88b287386 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the secreg_axi_read_if signal monitoring. +// It is accessed by the uvm secreg_axi_read_if monitor through a virtual +// interface handle in the secreg_axi_read_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type secreg_axi_read_if_if. +// +// Input signals from the secreg_axi_read_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the secreg_axi_read_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import secreg_axi_read_if_pkg_hdl::*; +`include "src/secreg_axi_read_if_macros.svh" + + +interface secreg_axi_read_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( secreg_axi_read_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute secreg_axi_read_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`secreg_axi_read_if_MONITOR_STRUCT + secreg_axi_read_if_monitor_s secreg_axi_read_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `secreg_axi_read_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + secreg_axi_read_if_pkg::secreg_axi_read_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( secreg_axi_read_if_monitor_struct ); + + + proxy.notify_transaction( secreg_axi_read_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(secreg_axi_read_if_configuration_s secreg_axi_read_if_configuration_arg); // pragma tbx xtf + initiator_responder = secreg_axi_read_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output secreg_axi_read_if_monitor_s secreg_axi_read_if_monitor_struct); + // + // Available struct members: + // // secreg_axi_read_if_monitor_struct.secreg_arready + // // secreg_axi_read_if_monitor_struct.secreg_rdata + // // secreg_axi_read_if_monitor_struct.secreg_rresp + // // secreg_axi_read_if_monitor_struct.secreg_rid + // // secreg_axi_read_if_monitor_struct.secreg_rlast + // // secreg_axi_read_if_monitor_struct.secreg_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // secreg_axi_read_if_monitor_struct.xyz = arready_i; // + // secreg_axi_read_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // secreg_axi_read_if_monitor_struct.xyz = rresp_i; // + // secreg_axi_read_if_monitor_struct.xyz = rid_i; // + // secreg_axi_read_if_monitor_struct.xyz = rlast_i; // + // secreg_axi_read_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_random_sequence.svh new file mode 100644 index 000000000..99ba1090a --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the secreg_axi_read_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a secreg_axi_read_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends secreg_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( secreg_axi_read_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "secreg_axi_read_if_random_sequence::body()-secreg_axi_read_if_transaction randomization failed") + // Send the transaction to the secreg_axi_read_if_driver_bfm via the sequencer and secreg_axi_read_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: secreg_axi_read_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_responder_sequence.svh new file mode 100644 index 000000000..d67fab023 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends secreg_axi_read_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( secreg_axi_read_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "secreg_axi_read_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=secreg_axi_read_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_sequence_base.svh new file mode 100644 index 000000000..6f62375a8 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( secreg_axi_read_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + secreg_axi_read_if_transaction_req_t; + secreg_axi_read_if_transaction_req_t req; + typedef secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + secreg_axi_read_if_transaction_rsp_t; + secreg_axi_read_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = secreg_axi_read_if_transaction_req_t::type_id::create("req"); + rsp = secreg_axi_read_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction.svh new file mode 100644 index 000000000..6b47b5928 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an secreg_axi_read_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( secreg_axi_read_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic secreg_arready ; + logic [DW-1:0] secreg_rdata ; + axi_pkg::axi_burst_e secreg_rresp ; + logic [IW-1:0] secreg_rid ; + logic secreg_rlast ; + logic secreg_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in secreg_axi_read_if_macros.svh + + //******************************************************************* + // Monitor macro used by secreg_axi_read_if_monitor and secreg_axi_read_if_monitor_bfm + // This struct is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_MONITOR_STRUCT + secreg_axi_read_if_monitor_s secreg_axi_read_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a secreg_axi_read_if_monitor_s + // structure. The function returns the handle to the secreg_axi_read_if_monitor_struct. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm + // to communicate initiator driven data to secreg_axi_read_if_driver_bfm. + // This struct is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_INITIATOR_STRUCT + secreg_axi_read_if_initiator_s secreg_axi_read_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a secreg_axi_read_if_initiator_s + // structure. The function returns the handle to the secreg_axi_read_if_initiator_struct. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by secreg_axi_read_if_driver and secreg_axi_read_if_driver_bfm + // to communicate Responder driven data to secreg_axi_read_if_driver_bfm. + // This struct is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_RESPONDER_STRUCT + secreg_axi_read_if_responder_s secreg_axi_read_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a secreg_axi_read_if_responder_s + // structure. The function returns the handle to the secreg_axi_read_if_responder_struct. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in secreg_axi_read_if_macros.svh + `secreg_axi_read_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_arready:0x%x secreg_rdata:0x%x secreg_rresp:0x%x secreg_rid:0x%x secreg_rlast:0x%x secreg_rvalid:0x%x ",secreg_arready,secreg_rdata,secreg_rresp,secreg_rid,secreg_rlast,secreg_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.secreg_arready == RHS.secreg_arready) + &&(this.secreg_rdata == RHS.secreg_rdata) + &&(this.secreg_rresp == RHS.secreg_rresp) + &&(this.secreg_rid == RHS.secreg_rid) + &&(this.secreg_rlast == RHS.secreg_rlast) + &&(this.secreg_rvalid == RHS.secreg_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_arready = RHS.secreg_arready; + this.secreg_rdata = RHS.secreg_rdata; + this.secreg_rresp = RHS.secreg_rresp; + this.secreg_rid = RHS.secreg_rid; + this.secreg_rlast = RHS.secreg_rlast; + this.secreg_rvalid = RHS.secreg_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"secreg_axi_read_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_arready,"secreg_arready"); + $add_attribute(transaction_view_h,secreg_rdata,"secreg_rdata"); + $add_attribute(transaction_view_h,secreg_rresp,"secreg_rresp"); + $add_attribute(transaction_view_h,secreg_rid,"secreg_rid"); + $add_attribute(transaction_view_h,secreg_rlast,"secreg_rlast"); + $add_attribute(transaction_view_h,secreg_rvalid,"secreg_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction_coverage.svh new file mode 100644 index 000000000..01ff22535 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records secreg_axi_read_if transaction information using +// a covergroup named secreg_axi_read_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(secreg_axi_read_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( secreg_axi_read_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup secreg_axi_read_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_arready: coverpoint coverage_trans.secreg_arready; + secreg_rdata: coverpoint coverage_trans.secreg_rdata; + secreg_rresp: coverpoint coverage_trans.secreg_rresp; + secreg_rid: coverpoint coverage_trans.secreg_rid; + secreg_rlast: coverpoint coverage_trans.secreg_rlast; + secreg_rvalid: coverpoint coverage_trans.secreg_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + secreg_axi_read_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + secreg_axi_read_if_transaction_cg.set_inst_name($sformatf("secreg_axi_read_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + secreg_axi_read_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/src/secreg_axi_read_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/yaml/secreg_axi_read_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/yaml/secreg_axi_read_if_interface.yaml new file mode 100644 index 000000000..77d1a8ed1 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_if_pkg/yaml/secreg_axi_read_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + secreg_axi_read_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.project b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.project new file mode 100644 index 000000000..8ff15aaa7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.project @@ -0,0 +1,30 @@ + + + secreg_axi_read_out_if_pkg + + + + + + org.python.pydev.PyDevBuilder + + + + + net.sf.sveditor.core.SVProjectBuilder + + + + + + net.sf.sveditor.core.SVNature + org.python.pydev.pythonNature + + + + UVMF_VIP_LIBRARY_HOME + $%7BPARENT-2-PROJECT_LOC%7D + + + + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.svproject b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.svproject new file mode 100644 index 000000000..c9f7e3bc5 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/.svproject @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/Makefile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/Makefile new file mode 100644 index 000000000..ec9e43ad6 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/Makefile @@ -0,0 +1,66 @@ +# secreg_axi_read_out_if interface packages source +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + +secreg_axi_read_out_if_PKG = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hvl.f + +secreg_axi_read_out_if_PKG_HDL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hdl.f + +secreg_axi_read_out_if_PKG_XRTL = \ + +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg \ + -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_xrtl.f + +COMP_secreg_axi_read_out_if_PKG_TGT_0 = q_comp_secreg_axi_read_out_if_pkg +COMP_secreg_axi_read_out_if_PKG_TGT_1 = v_comp_secreg_axi_read_out_if_pkg +COMP_secreg_axi_read_out_if_PKG_TGT = $(COMP_secreg_axi_read_out_if_PKG_TGT_$(USE_VELOCE)) + +comp_secreg_axi_read_out_if_pkg: $(COMP_secreg_axi_read_out_if_PKG_TGT) + +q_comp_secreg_axi_read_out_if_pkg: + $(HDL_COMP_CMD) $(secreg_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(secreg_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(secreg_axi_read_out_if_PKG_XRTL) + +v_comp_secreg_axi_read_out_if_pkg: + $(HVL_COMP_CMD) $(secreg_axi_read_out_if_PKG_HDL) + $(HVL_COMP_CMD) $(secreg_axi_read_out_if_PKG) + $(VELANALYZE_CMD) $(secreg_axi_read_out_if_PKG_HDL) + $(VELANALYZE_HVL_CMD) $(secreg_axi_read_out_if_PKG) + $(HDL_COMP_CMD) $(secreg_axi_read_out_if_PKG_XRTL) + +ifeq ($(MTI_VCO_MODE),64) + GCC_COMP_ARCH = -m64 +else + GCC_COMP_ARCH = -m32 +endif + +export secreg_axi_read_out_if_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg/dpi + +C_FILE_COMPILE_LIST_secreg_axi_read_out_if_pkg = \ + +O_FILE_COMPILE_LIST_secreg_axi_read_out_if_pkg = $(notdir $(C_FILE_COMPILE_LIST_secreg_axi_read_out_if_pkg:.c=.o)) + +GCC_COMP_ARGS_secreg_axi_read_out_if_pkg += -I$(secreg_axi_read_out_if_IF_DPI_SRC) \ + -fPIC + +GCC_COMP_ARGS_secreg_axi_read_out_if_pkg += $(secreg_axi_read_out_if_IF_GCC_COMP_ARGUMENTS) + +GCC_LINK_ARGS_secreg_axi_read_out_if_pkg += \ + \ + -o .so + +comp_secreg_axi_read_out_if_pkg_c_files: + @echo "--------------------------------" + @echo "Compiling Interface C source" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_secreg_axi_read_out_if_pkg) $(C_FILE_COMPILE_LIST_secreg_axi_read_out_if_pkg) + @echo "--------------------------------" + @echo "Linking Interface C objects into a shared object" + @echo "--------------------------------" + gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_secreg_axi_read_out_if_pkg) $(O_FILE_COMPILE_LIST_secreg_axi_read_out_if_pkg) + @echo "--------------------------------" + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/compile.do b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/compile.do new file mode 100644 index 000000000..f867dc5d7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/compile.do @@ -0,0 +1,14 @@ +# Tcl do file for compile of secreg_axi_read_out_if interface + +# pragma uvmf custom additional begin +# pragma uvmf custom additional end + + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hdl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hvl.f + +vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg \ + -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_xrtl.f \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if.compile new file mode 100644 index 000000000..cfbe1cb35 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if.compile @@ -0,0 +1,3 @@ +needs: + - secreg_axi_read_out_if_hvl.compile + - secreg_axi_read_out_if_hdl.compile diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_bfm.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_bfm.vinfo new file mode 100644 index 000000000..47b065ce0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_bfm.vinfo @@ -0,0 +1,6 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +@use secreg_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +src/secreg_axi_read_out_if_if.sv +src/secreg_axi_read_out_if_driver_bfm.sv +src/secreg_axi_read_out_if_monitor_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_common.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_common.compile new file mode 100644 index 000000000..1ce5be570 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_common.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile +incdir: + - . + - ${uvm_path}/src +src: + - secreg_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hdl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hdl.f new file mode 100644 index 000000000..e669da6e0 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hdl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hvl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hvl.f new file mode 100644 index 000000000..22fdb970b --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hvl.f @@ -0,0 +1 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.sv \ No newline at end of file diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_xrtl.f b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_xrtl.f new file mode 100644 index 000000000..52cf88070 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_xrtl.f @@ -0,0 +1,3 @@ +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_if.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor_bfm.sv +$UVMF_VIP_LIBRARY_HOME/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hdl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hdl.compile new file mode 100644 index 000000000..492d8c2ce --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hdl.compile @@ -0,0 +1,9 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile + - ./secreg_axi_read_out_if_common.compile +incdir: + - . +src: + - src/secreg_axi_read_out_if_if.sv + - src/secreg_axi_read_out_if_monitor_bfm.sv + - src/secreg_axi_read_out_if_driver_bfm.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hvl.compile b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hvl.compile new file mode 100644 index 000000000..fdeed3512 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_hvl.compile @@ -0,0 +1,7 @@ +needs: + - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile + - ./secreg_axi_read_out_if_common.compile +incdir: + - . +src: + - secreg_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.sv new file mode 100644 index 000000000..2d7516123 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.sv @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that will run on the host simulator. +// +// CONTAINS: +// - +// - +// - + +// - +// - +// - + +// - +// - +// - + +// - +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package secreg_axi_read_out_if_pkg; + + import uvm_pkg::*; + import uvmf_base_pkg_hdl::*; + import uvmf_base_pkg::*; + import secreg_axi_read_out_if_pkg_hdl::*; + + `include "uvm_macros.svh" + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + `include "src/secreg_axi_read_out_if_macros.svh" + + export secreg_axi_read_out_if_pkg_hdl::*; + + + + // Parameters defined as HVL parameters + + `include "src/secreg_axi_read_out_if_typedefs.svh" + `include "src/secreg_axi_read_out_if_transaction.svh" + + `include "src/secreg_axi_read_out_if_configuration.svh" + `include "src/secreg_axi_read_out_if_driver.svh" + `include "src/secreg_axi_read_out_if_monitor.svh" + + `include "src/secreg_axi_read_out_if_transaction_coverage.svh" + `include "src/secreg_axi_read_out_if_sequence_base.svh" + `include "src/secreg_axi_read_out_if_random_sequence.svh" + + `include "src/secreg_axi_read_out_if_responder_sequence.svh" + `include "src/secreg_axi_read_out_if2reg_adapter.svh" + + `include "src/secreg_axi_read_out_if_agent.svh" + + // pragma uvmf custom package_item_additional begin + // UVMF_CHANGE_ME : When adding new interface sequences to the src directory + // be sure to add the sequence file here so that it will be + // compiled as part of the interface package. Be sure to place + // the new sequence after any base sequences of the new sequence. + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.vinfo new file mode 100644 index 000000000..905f79483 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg.vinfo @@ -0,0 +1,4 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo +@use secreg_axi_read_out_if_pkg_hdl.vinfo ++incdir+@vinfodir +secreg_axi_read_out_if_pkg.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.sv new file mode 100644 index 000000000..e05290254 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.sv @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// PACKAGE: This file defines all of the files contained in the +// interface package that needs to be compiled and synthesized +// for running on Veloce. +// +// CONTAINS: +// - +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +package secreg_axi_read_out_if_pkg_hdl; + + import uvmf_base_pkg_hdl::*; + + // pragma uvmf custom package_imports_additional begin + // pragma uvmf custom package_imports_additional end + + // Parameters defined as HDL parameters + + `include "src/secreg_axi_read_out_if_typedefs_hdl.svh" + `include "src/secreg_axi_read_out_if_macros.svh" + + // pragma uvmf custom package_item_additional begin + // pragma uvmf custom package_item_additional end + +endpackage + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.vinfo b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.vinfo new file mode 100644 index 000000000..3eea142fa --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_hdl.vinfo @@ -0,0 +1,2 @@ +@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo +secreg_axi_read_out_if_pkg_hdl.sv diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_sve.F b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_sve.F new file mode 100644 index 000000000..828ba63f4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_pkg_sve.F @@ -0,0 +1,10 @@ +// UVM ++incdir+${UVM_HOME}/src +${UVM_HOME}/src/uvm_pkg.sv + +// Common UVMF files +-f ${UVMF_HOME}/common/common_sve.f + ++incdir+. +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hdl.f +-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/secreg_axi_read_out_if_pkg/secreg_axi_read_out_if_filelist_hvl.f diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if2reg_adapter.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if2reg_adapter.svh new file mode 100644 index 000000000..194eb7487 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if2reg_adapter.svh @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the UVM register adapter for the secreg_axi_read_out_if interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if2reg_adapter #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_reg_adapter; + + `uvm_object_param_utils( secreg_axi_read_out_if2reg_adapter #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //-------------------------------------------------------------------- + // new + //-------------------------------------------------------------------- + function new (string name = "secreg_axi_read_out_if2reg_adapter" ); + super.new(name); + // pragma uvmf custom new begin + // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response. + + // Does the protocol the Agent is modeling support byte enables? + // 0 = NO + // 1 = YES + supports_byte_enable = 0; + + // Does the Agent's Driver provide separate response sequence items? + // i.e. Does the driver call seq_item_port.put() + // and do the sequences call get_response()? + // 0 = NO + // 1 = YES + provides_responses = 0; + // pragma uvmf custom new end + + endfunction: new + + //-------------------------------------------------------------------- + // reg2bus + //-------------------------------------------------------------------- + virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); + + secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h = secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("trans_h"); + + // pragma uvmf custom reg2bus begin + // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields. + + //Adapt the following for your sequence item type + // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE; + //Copy over address + // trans_h.addr = rw.addr; + //Copy over write data + // trans_h.data = rw.data; + + // pragma uvmf custom reg2bus end + + // Return the adapted transaction + return trans_h; + + endfunction: reg2bus + + //-------------------------------------------------------------------- + // bus2reg + //-------------------------------------------------------------------- + virtual function void bus2reg(uvm_sequence_item bus_item, + ref uvm_reg_bus_op rw); + secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + trans_h; + if (!$cast(trans_h, bus_item)) begin + `uvm_fatal("ADAPT","Provided bus_item is not of the correct type") + return; + end + // pragma uvmf custom bus2reg begin + // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields. + //Adapt the following for your sequence item type + //Copy over instruction type + // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ; + //Copy over address + // rw.addr = trans_h.addr; + //Copy over read data + // rw.data = trans_h.data; + //Check for errors on the bus and return UVM_NOT_OK if there is an error + // rw.status = UVM_IS_OK; + // pragma uvmf custom bus2reg end + + endfunction: bus2reg + +endclass : secreg_axi_read_out_if2reg_adapter + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_agent.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_agent.svh new file mode 100644 index 000000000..d61b61ace --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_agent.svh @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: Protocol specific agent class definition +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_agent #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent #( + .CONFIG_T(secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .DRIVER_T(secreg_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_T(secreg_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .COVERAGE_T(secreg_axi_read_out_if_transaction_coverage #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) + ); + + `uvm_component_param_utils( secreg_axi_read_out_if_agent #( + AW, + DW, + IW, + UW + ) +) + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// FUNCTION : new() +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** + // FUNCTION: build_phase + virtual function void build_phase(uvm_phase phase); +// pragma uvmf custom build_phase_pre_super begin +// pragma uvmf custom build_phase_pre_super end + super.build_phase(phase); + if (configuration.active_passive == ACTIVE) begin + // Place sequencer handle into configuration object + // so that it may be retrieved from configuration + // rather than using uvm_config_db + configuration.sequencer = this.sequencer; + end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_configuration.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_configuration.svh new file mode 100644 index 000000000..c9e9eede7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_configuration.svh @@ -0,0 +1,241 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class contains all variables and functions used +// to configure the secreg_axi_read_out_if agent and its bfm's. It gets the +// bfm's from the uvm_config_db for use by the agent. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_configuration #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_parameterized_agent_configuration_base #( + .DRIVER_BFM_BIND_T(virtual secreg_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .MONITOR_BFM_BIND_T( virtual secreg_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( secreg_axi_read_out_if_configuration #( + AW, + DW, + IW, + UW + ) +) + + + // Sequencer handle populated by agent + uvm_sequencer #(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ) sequencer; + + //Constraints for the configuration variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + covergroup secreg_axi_read_out_if_configuration_cg; + // pragma uvmf custom covergroup begin + option.auto_bin_max=1024; + // pragma uvmf custom covergroup end + endgroup + + //******************************************************************* + //******************************************************************* + // Structure used to pass configuration variables to monitor and driver BFM's. + // Use to_struct function to pack variables into structure. + // Use from_struct function to unpack variables from structure. + // This structure is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_CONFIGURATION_STRUCT + secreg_axi_read_out_if_configuration_s secreg_axi_read_out_if_configuration_struct; + //******************************************************************* + // FUNCTION: to_struct() + // This function packs variables into a secreg_axi_read_out_if_configuration_s + // structure. The function returns the handle to the secreg_axi_read_out_if_configuration_struct. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_struct() + // This function unpacks the struct provided as an argument into + // variables of this class. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + // Construct the covergroup for this configuration class + secreg_axi_read_out_if_configuration_cg = new; + endfunction + + // **************************************************************************** + // FUNCTION: post_randomize() + // This function is automatically called after the randomize() function + // is executed. + // + function void post_randomize(); + super.post_randomize(); + secreg_axi_read_out_if_configuration_cg.sample(); + endfunction + + // **************************************************************************** + // FUNCTION: initialize + // This function causes the configuration to retrieve + // its virtual interface handle from the uvm_config_db. + // This function also makes itself available to its + // agent through the uvm_config_db. + // + // ARGUMENTS: + // uvmf_active_passive_t activity: + // This argument identifies the simulation level + // as either BLOCK, CHIP, SIMULATION, etc. + // + // AGENT_PATH: + // This argument identifies the path to this + // configurations agent. This configuration + // makes itself available to the agent specified + // by agent_path by placing itself into the + // uvm_config_db. + // + // INTERFACE_NAME: + // This argument identifies the string name of + // this configurations BFM's. This string + // name is used to retrieve the driver and + // monitor BFM from the uvm_config_db. + // + virtual function void initialize(uvmf_active_passive_t activity, + string agent_path, + string interface_name); + + super.initialize( activity, agent_path, interface_name); + // The covergroup is given the same name as the interface + secreg_axi_read_out_if_configuration_cg.set_inst_name(interface_name); + + // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve. + uvm_config_db #( secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,agent_path,UVMF_AGENT_CONFIG, this ); + + // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access + // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for + // accessingthe BFM when using Veloce + uvm_config_db #( secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + + )::set( null ,UVMF_CONFIGURATIONS, interface_name, this ); + + secreg_axi_read_out_if_configuration_cg.set_inst_name($sformatf("secreg_axi_read_out_if_configuration_cg_%s",get_full_name())); + +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. + `uvm_info("CFG", + $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW=%x DW=%x IW=%x UW=%x ", agent_path, interface_name, AW ,DW ,IW ,UW ), + UVM_DEBUG) + + // pragma uvmf custom initialize begin + // This controls whether or not the agent returns a transaction handle in the driver when calling + // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means + // the sequence on the other end must use the get_response() part of the driver/sequence API. If + // this doesn't occur, there will eventually be response_queue overflow errors during the test. + return_transaction_response = 1'b0; + + // pragma uvmf custom initialize end + + endfunction + + // **************************************************************************** + // TASK: wait_for_reset + // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed + // by a task in the monitor bfm. + virtual task wait_for_reset(); + monitor_bfm.wait_for_reset(); + endtask + + // **************************************************************************** + // TASK: wait_for_num_clocks + // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks + // operation is performed by a task in the monitor bfm. + virtual task wait_for_num_clocks(int clocks); + monitor_bfm.wait_for_num_clocks(clocks); + endtask + + // **************************************************************************** + // FUNCTION : convert2string() + // This function is used to convert variables in this class into a string for log messaging. + // + virtual function string convert2string (); + // pragma uvmf custom convert2string begin + return $sformatf(""); + // pragma uvmf custom convert2string end + endfunction + + // **************************************************************************** + // FUNCTION: get_sequencer + function uvm_sequencer #(secreg_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +) get_sequencer(); + return sequencer; + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver.svh new file mode 100644 index 000000000..409728519 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver.svh @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class passes transactions between the sequencer +// and the BFM driver interface. It accesses the driver BFM +// through the bfm handle. This driver +// passes transactions to the driver BFM through the access +// task. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_driver #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_driver_base #( + .CONFIG_T(secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .BFM_BIND_T(virtual secreg_axi_read_out_if_driver_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .REQ(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + ), + .RSP(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + )); + + `uvm_component_param_utils( secreg_axi_read_out_if_driver #( + AW, + DW, + IW, + UW + ) +) +//******************************************************************* +// Macros that define structs located in secreg_axi_read_out_if_macros.svh +//******************************************************************* +// Initiator macro used by secreg_axi_read_out_if_driver and secreg_axi_read_out_if_driver_bfm +// to communicate initiator driven data to secreg_axi_read_out_if_driver_bfm. +`secreg_axi_read_out_if_INITIATOR_STRUCT + secreg_axi_read_out_if_initiator_s secreg_axi_read_out_if_initiator_struct; +//******************************************************************* +// Responder macro used by secreg_axi_read_out_if_driver and secreg_axi_read_out_if_driver_bfm +// to communicate Responder driven data to secreg_axi_read_out_if_driver_bfm. +`secreg_axi_read_out_if_RESPONDER_STRUCT + secreg_axi_read_out_if_responder_s secreg_axi_read_out_if_responder_struct; + +// pragma uvmf custom class_item_additional begin +// pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent=null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the driver BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// driver BFM. This allows the driver BFM to call tasks and function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// **************************************************************************** +// This task is called by the run_phase in uvmf_driver_base. + virtual task access( inout REQ txn ); +// pragma uvmf custom access begin + if (configuration.initiator_responder==RESPONDER) begin + // Complete current transfer and wait for next transfer + bfm.respond_and_wait_for_next_transfer( + secreg_axi_read_out_if_initiator_struct, + txn.to_responder_struct() + ); + // Unpack information about initiated transfer received by this responder + txn.from_initiator_struct(secreg_axi_read_out_if_initiator_struct); + end else begin + // Initiate a transfer and get response + bfm.initiate_and_get_response( + txn.to_initiator_struct(), + secreg_axi_read_out_if_responder_struct + ); + // Unpack transfer response information received by this initiator + txn.from_responder_struct(secreg_axi_read_out_if_responder_struct); + end +// pragma uvmf custom access end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver_bfm.sv new file mode 100644 index 000000000..358d0de16 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_driver_bfm.sv @@ -0,0 +1,352 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This interface performs the secreg_axi_read_out_if signal driving. It is +// accessed by the uvm secreg_axi_read_out_if driver through a virtual interface +// handle in the secreg_axi_read_out_if configuration. It drives the singals passed +// in through the port connection named bus of type secreg_axi_read_out_if_if. +// +// Input signals from the secreg_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// This bfm drives signals with a _o suffix. These signals +// are driven onto signals within secreg_axi_read_out_if_if based on INITIATOR/RESPONDER and/or +// ARBITRATION/GRANT status. +// +// The output signal connections are as follows: +// signal_o -> bus.signal +// +// +// Interface functions and tasks used by UVM components: +// +// configure: +// This function gets configuration attributes from the +// UVM driver to set any required BFM configuration +// variables such as 'initiator_responder'. +// +// initiate_and_get_response: +// This task is used to perform signaling activity for initiating +// a protocol transfer. The task initiates the transfer, using +// input data from the initiator struct. Then the task captures +// response data, placing the data into the response struct. +// The response struct is returned to the driver class. +// +// respond_and_wait_for_next_transfer: +// This task is used to complete a current transfer as a responder +// and then wait for the initiator to start the next transfer. +// The task uses data in the responder struct to drive protocol +// signals to complete the transfer. The task then waits for +// the next transfer. Once the next transfer begins, data from +// the initiator is placed into the initiator struct and sent +// to the responder sequence for processing to determine +// what data to respond with. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import secreg_axi_read_out_if_pkg_hdl::*; +`include "src/secreg_axi_read_out_if_macros.svh" + +interface secreg_axi_read_out_if_driver_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + (secreg_axi_read_out_if_if bus); + // The following pragma and additional ones in-lined further below are for running this BFM on Veloce + // pragma attribute secreg_axi_read_out_if_driver_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + + // Signal list (all signals are capable of being inputs and outputs for the sake + // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that + // directionality in the config file was from the point-of-view of the INITIATOR + + // INITIATOR mode input signals + tri arready_i; + reg arready_o = 'bz; + tri [DW-1:0] rdata_i; + reg [DW-1:0] rdata_o = 'bz; + tri rresp_i; + reg rresp_o = 'bz; + tri rid_i; + reg rid_o = 'bz; + tri rlast_i; + reg rlast_o = 'bz; + tri rvalid_i; + reg rvalid_o = 'bz; + + // INITIATOR mode output signals + + // Bi-directional signals + + + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + + // These are signals marked as 'input' by the config file, but the signals will be + // driven by this BFM if put into RESPONDER mode (flipping all signal directions around) + assign arready_i = bus.arready; + assign bus.arready = (initiator_responder == RESPONDER) ? arready_o : 'bz; + assign rdata_i = bus.rdata; + assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz; + assign rresp_i = bus.rresp; + assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz; + assign rid_i = bus.rid; + assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz; + assign rlast_i = bus.rlast; + assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz; + assign rvalid_i = bus.rvalid; + assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz; + + + // These are signals marked as 'output' by the config file, but the outputs will + // not be driven by this BFM unless placed in INITIATOR mode. + + // Proxy handle to UVM driver + secreg_axi_read_out_if_pkg::secreg_axi_read_out_if_driver #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.my_function_name_in_uvm_driver + + // **************************************************************************** + // **************************************************************************** + // Macros that define structs located in secreg_axi_read_out_if_macros.svh + // **************************************************************************** + // Struct for passing configuration data from secreg_axi_read_out_if_driver to this BFM + // **************************************************************************** + `secreg_axi_read_out_if_CONFIGURATION_STRUCT + // **************************************************************************** + // Structs for INITIATOR and RESPONDER data flow + //******************************************************************* + // Initiator macro used by secreg_axi_read_out_if_driver and secreg_axi_read_out_if_driver_bfm + // to communicate initiator driven data to secreg_axi_read_out_if_driver_bfm. + `secreg_axi_read_out_if_INITIATOR_STRUCT + secreg_axi_read_out_if_initiator_s initiator_struct; + // Responder macro used by secreg_axi_read_out_if_driver and secreg_axi_read_out_if_driver_bfm + // to communicate Responder driven data to secreg_axi_read_out_if_driver_bfm. + `secreg_axi_read_out_if_RESPONDER_STRUCT + secreg_axi_read_out_if_responder_s responder_struct; + + // **************************************************************************** +// pragma uvmf custom reset_condition_and_response begin + // Always block used to return signals to reset value upon assertion of reset + always @( negedge rst_ni_i ) + begin + // RESPONDER mode output signals + arready_o <= 'bz; + rdata_o <= 'bz; + rresp_o <= 'bz; + rid_o <= 'bz; + rlast_o <= 'bz; + rvalid_o <= 'bz; + // INITIATOR mode output signals + // Bi-directional signals + + end +// pragma uvmf custom reset_condition_and_response end + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the driver BFM. It is called by the driver within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the driver BFM needs to be aware of the new configuration + // variables. + // + + function void configure(secreg_axi_read_out_if_configuration_s secreg_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = secreg_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + +// pragma uvmf custom initiate_and_get_response begin +// **************************************************************************** +// UVMF_CHANGE_ME +// This task is used by an initator. The task first initiates a transfer then +// waits for the responder to complete the transfer. + task initiate_and_get_response( + // This argument passes transaction variables used by an initiator + // to perform the initial part of a protocol transfer. The values + // come from a sequence item created in a sequence. + input secreg_axi_read_out_if_initiator_s secreg_axi_read_out_if_initiator_struct, + // This argument is used to send data received from the responder + // back to the sequence item. The sequence item is returned to the sequence. + output secreg_axi_read_out_if_responder_s secreg_axi_read_out_if_responder_struct + );// pragma tbx xtf + // + // Members within the secreg_axi_read_out_if_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Members within the secreg_axi_read_out_if_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + initiator_struct = secreg_axi_read_out_if_initiator_struct; + // + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available initiator input and inout signals listed. + // Initiator input signals + // secreg_axi_read_out_if_responder_struct.xyz = arready_i; // + // secreg_axi_read_out_if_responder_struct.xyz = rdata_i; // [DW-1:0] + // secreg_axi_read_out_if_responder_struct.xyz = rresp_i; // + // secreg_axi_read_out_if_responder_struct.xyz = rid_i; // + // secreg_axi_read_out_if_responder_struct.xyz = rlast_i; // + // secreg_axi_read_out_if_responder_struct.xyz = rvalid_i; // + // Initiator inout signals + // How to assign a signal from an initiator struct member named xyz. + // All available initiator output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Initiator output signals + // Initiator inout signals + // Initiate a transfer using the data received. + @(posedge clk_i_i); + @(posedge clk_i_i); + // Wait for the responder to complete the transfer then place the responder data into + // secreg_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + responder_struct = secreg_axi_read_out_if_responder_struct; + endtask +// pragma uvmf custom initiate_and_get_response end + +// pragma uvmf custom respond_and_wait_for_next_transfer begin +// **************************************************************************** +// The first_transfer variable is used to prevent completing a transfer in the +// first call to this task. For the first call to this task, there is not +// current transfer to complete. +bit first_transfer=1; + +// UVMF_CHANGE_ME +// This task is used by a responder. The task first completes the current +// transfer in progress then waits for the initiator to start the next transfer. + task respond_and_wait_for_next_transfer( + // This argument is used to send data received from the initiator + // back to the sequence item. The sequence determines how to respond. + output secreg_axi_read_out_if_initiator_s secreg_axi_read_out_if_initiator_struct, + // This argument passes transaction variables used by a responder + // to complete a protocol transfer. The values come from a sequence item. + input secreg_axi_read_out_if_responder_s secreg_axi_read_out_if_responder_struct + );// pragma tbx xtf + // Variables within the secreg_axi_read_out_if_initiator_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Variables within the secreg_axi_read_out_if_responder_struct: + // logic secreg_arready ; + // logic [DW-1:0] secreg_rdata ; + // axi_pkg::axi_burst_e secreg_rresp ; + // logic [IW-1:0] secreg_rid ; + // logic secreg_rlast ; + // logic secreg_rvalid ; + // Reference code; + // How to wait for signal value + // while (control_signal == 1'b1) @(posedge clk_i_i); + // + // How to assign a responder struct member, named xyz, from a signal. + // All available responder input and inout signals listed. + // Responder input signals + // Responder inout signals + // How to assign a signal, named xyz, from an initiator struct member. + // All available responder output and inout signals listed. + // Notice the _o. Those are storage variables that allow for procedural assignment. + // Responder output signals + // arready_o <= secreg_axi_read_out_if_initiator_struct.xyz; // + // rdata_o <= secreg_axi_read_out_if_initiator_struct.xyz; // [DW-1:0] + // rresp_o <= secreg_axi_read_out_if_initiator_struct.xyz; // + // rid_o <= secreg_axi_read_out_if_initiator_struct.xyz; // + // rlast_o <= secreg_axi_read_out_if_initiator_struct.xyz; // + // rvalid_o <= secreg_axi_read_out_if_initiator_struct.xyz; // + // Responder inout signals + + @(posedge clk_i_i); + if (!first_transfer) begin + // Perform transfer response here. + // Reply using data recieved in the secreg_axi_read_out_if_responder_struct. + @(posedge clk_i_i); + // Reply using data recieved in the transaction handle. + @(posedge clk_i_i); + end + // Wait for next transfer then gather info from intiator about the transfer. + // Place the data into the secreg_axi_read_out_if_initiator_struct. + @(posedge clk_i_i); + @(posedge clk_i_i); + first_transfer = 0; + endtask +// pragma uvmf custom respond_and_wait_for_next_transfer end + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_if.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_if.sv new file mode 100644 index 000000000..cc52f2ea4 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_if.sv @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface contains the secreg_axi_read_out_if interface signals. +// It is instantiated once per secreg_axi_read_out_if bus. Bus Functional Models, +// BFM's named secreg_axi_read_out_if_driver_bfm, are used to drive signals on the bus. +// BFM's named secreg_axi_read_out_if_monitor_bfm are used to monitor signals on the +// bus. This interface signal bundle is passed in the port list of +// the BFM in order to give the BFM access to the signals in this +// interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// This template can be used to connect a DUT to these signals +// +// .dut_signal_port(secreg_axi_read_out_if_bus.arready), // Agent input +// .dut_signal_port(secreg_axi_read_out_if_bus.rdata), // Agent input +// .dut_signal_port(secreg_axi_read_out_if_bus.rresp), // Agent input +// .dut_signal_port(secreg_axi_read_out_if_bus.rid), // Agent input +// .dut_signal_port(secreg_axi_read_out_if_bus.rlast), // Agent input +// .dut_signal_port(secreg_axi_read_out_if_bus.rvalid), // Agent input + +import uvmf_base_pkg_hdl::*; +import secreg_axi_read_out_if_pkg_hdl::*; + +interface secreg_axi_read_out_if_if #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + + ( + input tri clk_i, + input tri rst_ni, + inout tri arready, + inout tri [DW-1:0] rdata, + inout tri rresp, + inout tri rid, + inout tri rlast, + inout tri rvalid + ); + +modport monitor_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport initiator_port + ( + input clk_i, + input rst_ni, + input arready, + input rdata, + input rresp, + input rid, + input rlast, + input rvalid + ); + +modport responder_port + ( + input clk_i, + input rst_ni, + output arready, + output rdata, + output rresp, + output rid, + output rlast, + output rvalid + ); + + +// pragma uvmf custom interface_item_additional begin +// pragma uvmf custom interface_item_additional end + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_infact_coverage_strategy.csv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_infact_coverage_strategy.csv new file mode 100644 index 000000000..1c218e146 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_infact_coverage_strategy.csv @@ -0,0 +1,6 @@ +Global +auto_bin_max, 64 + +Name,Type,Include +rand_fields,coverpoint,=rand *.** + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_macros.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_macros.svh new file mode 100644 index 000000000..c59ee1d57 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_macros.svh @@ -0,0 +1,180 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This file contains macros used with the secreg_axi_read_out_if package. +// These macros include packed struct definitions. These structs are +// used to pass data between classes, hvl, and BFM's, hdl. Use of +// structs are more efficient and simpler to modify. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_struct +// and from_struct methods defined in the macros below that are used in +// the secreg_axi_read_out_if_configuration class. +// + `define secreg_axi_read_out_if_CONFIGURATION_STRUCT \ +typedef struct packed { \ + uvmf_active_passive_t active_passive; \ + uvmf_initiator_responder_t initiator_responder; \ + } secreg_axi_read_out_if_configuration_s; + + `define secreg_axi_read_out_if_CONFIGURATION_TO_STRUCT_FUNCTION \ + virtual function secreg_axi_read_out_if_configuration_s to_struct();\ + secreg_axi_read_out_if_configuration_struct = \ + {\ + this.active_passive,\ + this.initiator_responder\ + };\ + return ( secreg_axi_read_out_if_configuration_struct );\ + endfunction + + `define secreg_axi_read_out_if_CONFIGURATION_FROM_STRUCT_FUNCTION \ + virtual function void from_struct(secreg_axi_read_out_if_configuration_s secreg_axi_read_out_if_configuration_struct);\ + {\ + this.active_passive,\ + this.initiator_responder \ + } = secreg_axi_read_out_if_configuration_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_monitor_struct +// and from_monitor_struct methods of the secreg_axi_read_out_if_transaction class. +// + `define secreg_axi_read_out_if_MONITOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } secreg_axi_read_out_if_monitor_s; + + `define secreg_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION \ + virtual function secreg_axi_read_out_if_monitor_s to_monitor_struct();\ + secreg_axi_read_out_if_monitor_struct = \ + { \ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( secreg_axi_read_out_if_monitor_struct);\ + endfunction\ + + `define secreg_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION \ + virtual function void from_monitor_struct(secreg_axi_read_out_if_monitor_s secreg_axi_read_out_if_monitor_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = secreg_axi_read_out_if_monitor_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_initiator_struct +// and from_initiator_struct methods of the secreg_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define secreg_axi_read_out_if_INITIATOR_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } secreg_axi_read_out_if_initiator_s; + + `define secreg_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION \ + virtual function secreg_axi_read_out_if_initiator_s to_initiator_struct();\ + secreg_axi_read_out_if_initiator_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( secreg_axi_read_out_if_initiator_struct);\ + endfunction + + `define secreg_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION \ + virtual function void from_initiator_struct(secreg_axi_read_out_if_initiator_s secreg_axi_read_out_if_initiator_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = secreg_axi_read_out_if_initiator_struct;\ + endfunction + +// **************************************************************************** +// When changing the contents of this struct, be sure to update the to_responder_struct +// and from_responder_struct methods of the secreg_axi_read_out_if_transaction class. +// Also update the comments in the driver BFM. +// + `define secreg_axi_read_out_if_RESPONDER_STRUCT typedef struct packed { \ + logic secreg_arready ; \ + logic [DW-1:0] secreg_rdata ; \ + axi_pkg::axi_burst_e secreg_rresp ; \ + logic [IW-1:0] secreg_rid ; \ + logic secreg_rlast ; \ + logic secreg_rvalid ; \ + } secreg_axi_read_out_if_responder_s; + + `define secreg_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION \ + virtual function secreg_axi_read_out_if_responder_s to_responder_struct();\ + secreg_axi_read_out_if_responder_struct = \ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + };\ + return ( secreg_axi_read_out_if_responder_struct);\ + endfunction + + `define secreg_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION \ + virtual function void from_responder_struct(secreg_axi_read_out_if_responder_s secreg_axi_read_out_if_responder_struct);\ + {\ + this.secreg_arready , \ + this.secreg_rdata , \ + this.secreg_rresp , \ + this.secreg_rid , \ + this.secreg_rlast , \ + this.secreg_rvalid \ + } = secreg_axi_read_out_if_responder_struct;\ + endfunction +// pragma uvmf custom additional begin +// pragma uvmf custom additional end diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor.svh new file mode 100644 index 000000000..5eb9dffdc --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor.svh @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class receives secreg_axi_read_out_if transactions observed by the +// secreg_axi_read_out_if monitor BFM and broadcasts them through the analysis port +// on the agent. It accesses the monitor BFM through the monitor +// task. This UVM component captures transactions +// for viewing in the waveform viewer if the +// enable_transaction_viewing flag is set in the configuration. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_monitor #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_monitor_base #( + .CONFIG_T(secreg_axi_read_out_if_configuration #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .BFM_BIND_T(virtual secreg_axi_read_out_if_monitor_bfm #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .TRANS_T(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( secreg_axi_read_out_if_monitor #( + AW, + DW, + IW, + UW + ) +) + +// Structure used to pass data from monitor BFM to monitor class in agent. +// Use to_monitor_struct function to pack transaction variables into structure. +// Use from_monitor_struct function to unpack transaction variables from structure. +`secreg_axi_read_out_if_MONITOR_STRUCT + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + +// **************************************************************************** +// This function is the standard SystemVerilog constructor. +// + function new( string name = "", uvm_component parent = null ); + super.new( name, parent ); + endfunction + +// **************************************************************************** +// This function sends configuration object variables to the monitor BFM +// using the configuration struct. +// + virtual function void configure(input CONFIG_T cfg); + bfm.configure( cfg.to_struct() ); + + endfunction + +// **************************************************************************** +// This function places a handle to this class in the proxy variable in the +// monitor BFM. This allows the monitor BFM to call the notify_transaction +// function within this class. +// + virtual function void set_bfm_proxy_handle(); + bfm.proxy = this; endfunction + +// *************************************************************************** + virtual task run_phase(uvm_phase phase); + // Start monitor BFM thread and don't call super.run() in order to + // override the default monitor proxy 'pull' behavior with the more + // emulation-friendly BFM 'push' approach using the notify_transaction + // function below + bfm.start_monitoring(); + endtask + +// ************************************************************************** + +// This function is called by the monitor BFM. It receives data observed by the +// monitor BFM. Data is passed using the secreg_axi_read_out_if_monitor_struct. + virtual function void notify_transaction(input secreg_axi_read_out_if_monitor_s secreg_axi_read_out_if_monitor_struct); + + + trans = new("trans"); + trans.from_monitor_struct(secreg_axi_read_out_if_monitor_struct); + trans.start_time = time_stamp; + trans.end_time = $time; + time_stamp = trans.end_time; + + analyze(trans); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor_bfm.sv b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor_bfm.sv new file mode 100644 index 000000000..3a5271d8c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_monitor_bfm.sv @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This interface performs the secreg_axi_read_out_if signal monitoring. +// It is accessed by the uvm secreg_axi_read_out_if monitor through a virtual +// interface handle in the secreg_axi_read_out_if configuration. It monitors the +// signals passed in through the port connection named bus of +// type secreg_axi_read_out_if_if. +// +// Input signals from the secreg_axi_read_out_if_if are assigned to an internal input +// signal with a _i suffix. The _i signal should be used for sampling. +// +// The input signal connections are as follows: +// bus.signal -> signal_i +// +// Interface functions and tasks used by UVM components: +// monitor(inout TRANS_T txn); +// This task receives the transaction, txn, from the +// UVM monitor and then populates variables in txn +// from values observed on bus activity. This task +// blocks until an operation on the secreg_axi_read_out_if bus is complete. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +import uvmf_base_pkg_hdl::*; +import secreg_axi_read_out_if_pkg_hdl::*; +`include "src/secreg_axi_read_out_if_macros.svh" + + +interface secreg_axi_read_out_if_monitor_bfm #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + ( secreg_axi_read_out_if_if bus ); + // The pragma below and additional ones in-lined further down are for running this BFM on Veloce + // pragma attribute secreg_axi_read_out_if_monitor_bfm partition_interface_xif + +`ifndef XRTL +// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent. +// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG +// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings. +// All of the messages from this feature have a UVM messaging id value of "CFG" +// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings. +import uvm_pkg::*; +`include "uvm_macros.svh" +initial begin : bfm_vs_agent_parameter_debug + `uvm_info("CFG", + $psprintf("The BFM at '%m' has the following parameters: AW=%x DW=%x IW=%x UW=%x ", AW,DW,IW,UW), + UVM_DEBUG) +end +`endif + + + // Structure used to pass transaction data from monitor BFM to monitor class in agent. +`secreg_axi_read_out_if_MONITOR_STRUCT + secreg_axi_read_out_if_monitor_s secreg_axi_read_out_if_monitor_struct; + + // Structure used to pass configuration data from monitor class to monitor BFM. + `secreg_axi_read_out_if_CONFIGURATION_STRUCT + + + // Config value to determine if this is an initiator or a responder + uvmf_initiator_responder_t initiator_responder; + // Custom configuration variables. + // These are set using the configure function which is called during the UVM connect_phase + + tri clk_i_i; + tri rst_ni_i; + tri arready_i; + tri [DW-1:0] rdata_i; + tri rresp_i; + tri rid_i; + tri rlast_i; + tri rvalid_i; + assign clk_i_i = bus.clk_i; + assign rst_ni_i = bus.rst_ni; + assign arready_i = bus.arready; + assign rdata_i = bus.rdata; + assign rresp_i = bus.rresp; + assign rid_i = bus.rid; + assign rlast_i = bus.rlast; + assign rvalid_i = bus.rvalid; + + // Proxy handle to UVM monitor + secreg_axi_read_out_if_pkg::secreg_axi_read_out_if_monitor #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + proxy; + // pragma tbx oneway proxy.notify_transaction + + // pragma uvmf custom interface_item_additional begin + // pragma uvmf custom interface_item_additional end + + //****************************************************************** + task wait_for_reset();// pragma tbx xtf + @(posedge clk_i_i) ; + do_wait_for_reset(); + endtask + + // **************************************************************************** + task do_wait_for_reset(); + // pragma uvmf custom reset_condition begin + wait ( rst_ni_i === 1 ) ; + @(posedge clk_i_i) ; + // pragma uvmf custom reset_condition end + endtask + + //****************************************************************** + + task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf + @(posedge clk_i_i); + + repeat (count-1) @(posedge clk_i_i); + endtask + + //****************************************************************** + event go; + function void start_monitoring();// pragma tbx xtf + -> go; + endfunction + + // **************************************************************************** + initial begin + @go; + forever begin + @(posedge clk_i_i); + do_monitor( secreg_axi_read_out_if_monitor_struct ); + + + proxy.notify_transaction( secreg_axi_read_out_if_monitor_struct ); + + end + end + + //****************************************************************** + // The configure() function is used to pass agent configuration + // variables to the monitor BFM. It is called by the monitor within + // the agent at the beginning of the simulation. It may be called + // during the simulation if agent configuration variables are updated + // and the monitor BFM needs to be aware of the new configuration + // variables. + // + function void configure(secreg_axi_read_out_if_configuration_s secreg_axi_read_out_if_configuration_arg); // pragma tbx xtf + initiator_responder = secreg_axi_read_out_if_configuration_arg.initiator_responder; + // pragma uvmf custom configure begin + // pragma uvmf custom configure end + endfunction + + + // **************************************************************************** + + task do_monitor(output secreg_axi_read_out_if_monitor_s secreg_axi_read_out_if_monitor_struct); + // + // Available struct members: + // // secreg_axi_read_out_if_monitor_struct.secreg_arready + // // secreg_axi_read_out_if_monitor_struct.secreg_rdata + // // secreg_axi_read_out_if_monitor_struct.secreg_rresp + // // secreg_axi_read_out_if_monitor_struct.secreg_rid + // // secreg_axi_read_out_if_monitor_struct.secreg_rlast + // // secreg_axi_read_out_if_monitor_struct.secreg_rvalid + // // + // Reference code; + // How to wait for signal value + // while (control_signal === 1'b1) @(posedge clk_i_i); + // + // How to assign a struct member, named xyz, from a signal. + // All available input signals listed. + // secreg_axi_read_out_if_monitor_struct.xyz = arready_i; // + // secreg_axi_read_out_if_monitor_struct.xyz = rdata_i; // [DW-1:0] + // secreg_axi_read_out_if_monitor_struct.xyz = rresp_i; // + // secreg_axi_read_out_if_monitor_struct.xyz = rid_i; // + // secreg_axi_read_out_if_monitor_struct.xyz = rlast_i; // + // secreg_axi_read_out_if_monitor_struct.xyz = rvalid_i; // + // pragma uvmf custom do_monitor begin + // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code + // below are examples of how to capture signal values and assign them to + // structure members. All available input signals are listed. The 'while' + // code example shows how to wait for a synchronous flow control signal. This + // task should return when a complete transfer has been observed. Once this task is + // exited with captured values, it is then called again to wait for and observe + // the next transfer. One clock cycle is consumed between calls to do_monitor. + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + @(posedge clk_i_i); + // pragma uvmf custom do_monitor end + endtask + + +endinterface + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_random_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_random_sequence.svh new file mode 100644 index 000000000..3ac1e82c7 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_random_sequence.svh @@ -0,0 +1,91 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This sequences randomizes the secreg_axi_read_out_if transaction and sends it +// to the UVM driver. +// +// This sequence constructs and randomizes a secreg_axi_read_out_if_transaction. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_random_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends secreg_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( secreg_axi_read_out_if_random_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //***************************************************************** + function new(string name = ""); + super.new(name); + endfunction: new + + // **************************************************************************** + // TASK : body() + // This task is automatically executed when this sequence is started using the + // start(sequencerHandle) task. + // + task body(); + + // Construct the transaction + req=secreg_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + start_item(req); + // Randomize the transaction + if(!req.randomize()) `uvm_fatal("SEQ", "secreg_axi_read_out_if_random_sequence::body()-secreg_axi_read_out_if_transaction randomization failed") + // Send the transaction to the secreg_axi_read_out_if_driver_bfm via the sequencer and secreg_axi_read_out_if_driver. + finish_item(req); + `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM) + + endtask + +endclass: secreg_axi_read_out_if_random_sequence + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_responder_sequence.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_responder_sequence.svh new file mode 100644 index 000000000..044fb1741 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_responder_sequence.svh @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class can be used to provide stimulus when an interface +// has been configured to run in a responder mode. It +// will never finish by default, always going back to the driver +// and driver BFM for the next transaction with which to respond. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_responder_sequence #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + + extends secreg_axi_read_out_if_sequence_base #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +; + + `uvm_object_param_utils( secreg_axi_read_out_if_responder_sequence #( + AW, + DW, + IW, + UW + ) +) + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + function new(string name = "secreg_axi_read_out_if_responder_sequence"); + super.new(name); + endfunction + + task body(); + req=secreg_axi_read_out_if_transaction#( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +::type_id::create("req"); + forever begin + start_item(req); + finish_item(req); + // pragma uvmf custom body begin + // UVMF_CHANGE_ME : Do something here with the resulting req item. The + // finish_item() call above will block until the req transaction is ready + // to be handled by the responder sequence. + // If this was an item that required a response, the expectation is + // that the response should be populated within this transaction now. + `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH) + // pragma uvmf custom body end + end + endtask + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_sequence_base.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_sequence_base.svh new file mode 100644 index 000000000..4c4380762 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_sequence_base.svh @@ -0,0 +1,146 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains the class used as the base class for all sequences +// for this interface. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_sequence_base #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_sequence_base #( + .REQ(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +), + .RSP(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_object_param_utils( secreg_axi_read_out_if_sequence_base #( + AW, + DW, + IW, + UW + ) +) + + // variables + typedef secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + secreg_axi_read_out_if_transaction_req_t; + secreg_axi_read_out_if_transaction_req_t req; + typedef secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + secreg_axi_read_out_if_transaction_rsp_t; + secreg_axi_read_out_if_transaction_rsp_t rsp; + + // Event for identifying when a response was received from the sequencer + event new_rsp; + + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + // TASK : get_responses() + // This task recursively gets sequence item responses from the sequencer. + // + virtual task get_responses(); + fork + begin + // Block until new rsp available + get_response(rsp); + // New rsp received. Indicate to sequence using event. + ->new_rsp; + // Display the received response transaction + `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM) + end + join_none + endtask + + // **************************************************************************** + // TASK : pre_body() + // This task is called automatically when start is called with call_pre_post set to 1 (default). + // By calling get_responses() within pre_body() any derived sequences are automatically + // processing response transactions. Only un-comment this call to get_responses() if you + // have configured the interface driver to utilize the response transaction path by setting + // the configuration variable "return_transaction_response" to 1. Otherwise it is possible + // to impact runtime performance and memory utilization. + // + virtual task pre_body(); + // pragma uvmf custom pre_body begin +// get_responses(); + // pragma uvmf custom pre_body end + endtask + + // **************************************************************************** + // TASK : body() + // This task is called automatically when start is called. This sequence sends + // a req sequence item to the sequencer identified as an argument in the call + // to start. + // + virtual task body(); + // pragma uvmf custom body begin + start_item(req); + finish_item(req); + // pragma uvmf custom body end + endtask + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name =""); + super.new( name ); + // pragma uvmf custom new begin + req = secreg_axi_read_out_if_transaction_req_t::type_id::create("req"); + rsp = secreg_axi_read_out_if_transaction_rsp_t::type_id::create("rsp"); + // pragma uvmf custom new end + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction.svh new file mode 100644 index 000000000..938c0a49c --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction.svh @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class defines the variables required for an secreg_axi_read_out_if +// transaction. Class variables to be displayed in waveform transaction +// viewing are added to the transaction viewing stream in the add_to_wave +// function. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_transaction #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvmf_transaction_base; + + `uvm_object_param_utils( secreg_axi_read_out_if_transaction #( + AW, + DW, + IW, + UW + ) +) + + logic secreg_arready ; + logic [DW-1:0] secreg_rdata ; + axi_pkg::axi_burst_e secreg_rresp ; + logic [IW-1:0] secreg_rid ; + logic secreg_rlast ; + logic secreg_rvalid ; + + //Constraints for the transaction variables: + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + //******************************************************************* + //******************************************************************* + // Macros that define structs and associated functions are + // located in secreg_axi_read_out_if_macros.svh + + //******************************************************************* + // Monitor macro used by secreg_axi_read_out_if_monitor and secreg_axi_read_out_if_monitor_bfm + // This struct is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_MONITOR_STRUCT + secreg_axi_read_out_if_monitor_s secreg_axi_read_out_if_monitor_struct; + //******************************************************************* + // FUNCTION: to_monitor_struct() + // This function packs transaction variables into a secreg_axi_read_out_if_monitor_s + // structure. The function returns the handle to the secreg_axi_read_out_if_monitor_struct. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_TO_MONITOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_monitor_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_FROM_MONITOR_STRUCT_FUNCTION + + //******************************************************************* + // Initiator macro used by secreg_axi_read_out_if_driver and secreg_axi_read_out_if_driver_bfm + // to communicate initiator driven data to secreg_axi_read_out_if_driver_bfm. + // This struct is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_INITIATOR_STRUCT + secreg_axi_read_out_if_initiator_s secreg_axi_read_out_if_initiator_struct; + //******************************************************************* + // FUNCTION: to_initiator_struct() + // This function packs transaction variables into a secreg_axi_read_out_if_initiator_s + // structure. The function returns the handle to the secreg_axi_read_out_if_initiator_struct. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_TO_INITIATOR_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_initiator_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_FROM_INITIATOR_STRUCT_FUNCTION + + //******************************************************************* + // Responder macro used by secreg_axi_read_out_if_driver and secreg_axi_read_out_if_driver_bfm + // to communicate Responder driven data to secreg_axi_read_out_if_driver_bfm. + // This struct is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_RESPONDER_STRUCT + secreg_axi_read_out_if_responder_s secreg_axi_read_out_if_responder_struct; + //******************************************************************* + // FUNCTION: to_responder_struct() + // This function packs transaction variables into a secreg_axi_read_out_if_responder_s + // structure. The function returns the handle to the secreg_axi_read_out_if_responder_struct. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_TO_RESPONDER_STRUCT_FUNCTION + //******************************************************************* + // FUNCTION: from_responder_struct() + // This function unpacks the struct provided as an argument into transaction + // variables of this class. + // This function is defined in secreg_axi_read_out_if_macros.svh + `secreg_axi_read_out_if_FROM_RESPONDER_STRUCT_FUNCTION + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new( string name = "" ); + super.new( name ); + endfunction + + // **************************************************************************** + // FUNCTION: convert2string() + // This function converts all variables in this class to a single string for + // logfile reporting. + // + virtual function string convert2string(); + // pragma uvmf custom convert2string begin + // UVMF_CHANGE_ME : Customize format if desired. + return $sformatf("secreg_arready:0x%x secreg_rdata:0x%x secreg_rresp:0x%x secreg_rid:0x%x secreg_rlast:0x%x secreg_rvalid:0x%x ",secreg_arready,secreg_rdata,secreg_rresp,secreg_rid,secreg_rlast,secreg_rvalid); + // pragma uvmf custom convert2string end + endfunction + + //******************************************************************* + // FUNCTION: do_print() + // This function is automatically called when the .print() function + // is called on this class. + // + virtual function void do_print(uvm_printer printer); + // pragma uvmf custom do_print begin + // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2. + // Update based on your own printing preference according to your preferred UVM version + $display(convert2string()); + // pragma uvmf custom do_print end + endfunction + + //******************************************************************* + // FUNCTION: do_compare() + // This function is automatically called when the .compare() function + // is called on this class. + // + virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer); + secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + if (!$cast(RHS,rhs)) return 0; + // pragma uvmf custom do_compare begin + // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare + return (super.do_compare(rhs,comparer) + &&(this.secreg_arready == RHS.secreg_arready) + &&(this.secreg_rdata == RHS.secreg_rdata) + &&(this.secreg_rresp == RHS.secreg_rresp) + &&(this.secreg_rid == RHS.secreg_rid) + &&(this.secreg_rlast == RHS.secreg_rlast) + &&(this.secreg_rvalid == RHS.secreg_rvalid) + ); + // pragma uvmf custom do_compare end + endfunction + + //******************************************************************* + // FUNCTION: do_copy() + // This function is automatically called when the .copy() function + // is called on this class. + // + virtual function void do_copy (uvm_object rhs); + secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) + RHS; + assert($cast(RHS,rhs)); + // pragma uvmf custom do_copy begin + super.do_copy(rhs); + this.secreg_arready = RHS.secreg_arready; + this.secreg_rdata = RHS.secreg_rdata; + this.secreg_rresp = RHS.secreg_rresp; + this.secreg_rid = RHS.secreg_rid; + this.secreg_rlast = RHS.secreg_rlast; + this.secreg_rvalid = RHS.secreg_rvalid; + // pragma uvmf custom do_copy end + endfunction + + // **************************************************************************** + // FUNCTION: add_to_wave() + // This function is used to display variables in this class in the waveform + // viewer. The start_time and end_time variables must be set before this + // function is called. If the start_time and end_time variables are not set + // the transaction will be hidden at 0ns on the waveform display. + // + virtual function void add_to_wave(int transaction_viewing_stream_h); + `ifdef QUESTA + if (transaction_view_h == 0) begin + transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"secreg_axi_read_out_if_transaction",start_time); + end + super.add_to_wave(transaction_view_h); + // pragma uvmf custom add_to_wave begin + // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below + // case() + // 1 : $add_color(transaction_view_h,"red"); + // default : $add_color(transaction_view_h,"grey"); + // endcase + // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer + $add_attribute(transaction_view_h,secreg_arready,"secreg_arready"); + $add_attribute(transaction_view_h,secreg_rdata,"secreg_rdata"); + $add_attribute(transaction_view_h,secreg_rresp,"secreg_rresp"); + $add_attribute(transaction_view_h,secreg_rid,"secreg_rid"); + $add_attribute(transaction_view_h,secreg_rlast,"secreg_rlast"); + $add_attribute(transaction_view_h,secreg_rvalid,"secreg_rvalid"); + // pragma uvmf custom add_to_wave end + $end_transaction(transaction_view_h,end_time); + $free_transaction(transaction_view_h); + `endif // QUESTA + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction_coverage.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction_coverage.svh new file mode 100644 index 000000000..da4a5a005 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_transaction_coverage.svh @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: This class records secreg_axi_read_out_if transaction information using +// a covergroup named secreg_axi_read_out_if_transaction_cg. An instance of this +// coverage component is instantiated in the uvmf_parameterized_agent +// if the has_coverage flag is set. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +class secreg_axi_read_out_if_transaction_coverage #( + int AW = 32, + int DW = 32, + int IW = 3, + int UW = 32 + ) + extends uvm_subscriber #(.T(secreg_axi_read_out_if_transaction #( + .AW(AW), + .DW(DW), + .IW(IW), + .UW(UW) + ) +)); + + `uvm_component_param_utils( secreg_axi_read_out_if_transaction_coverage #( + AW, + DW, + IW, + UW + ) +) + + T coverage_trans; + + // pragma uvmf custom class_item_additional begin + // pragma uvmf custom class_item_additional end + + // **************************************************************************** + covergroup secreg_axi_read_out_if_transaction_cg; + // pragma uvmf custom covergroup begin + // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs. + option.auto_bin_max=1024; + option.per_instance=1; + secreg_arready: coverpoint coverage_trans.secreg_arready; + secreg_rdata: coverpoint coverage_trans.secreg_rdata; + secreg_rresp: coverpoint coverage_trans.secreg_rresp; + secreg_rid: coverpoint coverage_trans.secreg_rid; + secreg_rlast: coverpoint coverage_trans.secreg_rlast; + secreg_rvalid: coverpoint coverage_trans.secreg_rvalid; + // pragma uvmf custom covergroup end + endgroup + + // **************************************************************************** + // FUNCTION : new() + // This function is the standard SystemVerilog constructor. + // + function new(string name="", uvm_component parent=null); + super.new(name,parent); + secreg_axi_read_out_if_transaction_cg=new; + `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.") + endfunction + + // **************************************************************************** + // FUNCTION : build_phase() + // This function is the standard UVM build_phase. + // + function void build_phase(uvm_phase phase); + secreg_axi_read_out_if_transaction_cg.set_inst_name($sformatf("secreg_axi_read_out_if_transaction_cg_%s",get_full_name())); + endfunction + + // **************************************************************************** + // FUNCTION: write (T t) + // This function is automatically executed when a transaction arrives on the + // analysis_export. It copies values from the variables in the transaction + // to local variables used to collect functional coverage. + // + virtual function void write (T t); + `uvm_info("COV","Received transaction",UVM_HIGH); + coverage_trans = t; + secreg_axi_read_out_if_transaction_cg.sample(); + endfunction + +endclass + +// pragma uvmf custom external begin +// pragma uvmf custom external end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs.svh new file mode 100644 index 000000000..f2a7bdb94 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs.svh @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the host server when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs_hdl.svh b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs_hdl.svh new file mode 100644 index 000000000..0d58518e2 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/src/secreg_axi_read_out_if_typedefs_hdl.svh @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------- +// Created with uvmf_gen version 2022.3 +//---------------------------------------------------------------------- +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// pragma uvmf custom header begin +// pragma uvmf custom header end +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// +// DESCRIPTION: +// This file contains defines and typedefs to be compiled for use in +// the simulation running on the emulator when using Veloce. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// + + + +// pragma uvmf custom additional begin +// pragma uvmf custom additional end + diff --git a/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/yaml/secreg_axi_read_out_if_interface.yaml b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/yaml/secreg_axi_read_out_if_interface.yaml new file mode 100644 index 000000000..af8439504 --- /dev/null +++ b/src/fuse_ctrl/uvmf_fuse_ctrl/uvmf_template_output_bak_4/verification_ip/interface_packages/secreg_axi_read_out_if_pkg/yaml/secreg_axi_read_out_if_interface.yaml @@ -0,0 +1,91 @@ +uvmf: + interfaces: + secreg_axi_read_out_if: + clock: clk_i + config_constraints: [] + config_vars: [] + existing_library_component: 'True' + gen_inbound_streaming_driver: 'False' + hdl_pkg_parameters: [] + hdl_typedefs: [] + hvl_pkg_parameters: [] + hvl_typedefs: [] + parameters: + - name: AW + type: int + value: '32' + - name: DW + type: int + value: '32' + - name: IW + type: int + value: '3' + - name: UW + type: int + value: '32' + ports: + - dir: input + name: arready + reset_value: '''bz' + width: '1' + - dir: input + name: rdata + reset_value: '''bz' + width: DW + - dir: input + name: rresp + reset_value: '''bz' + width: '1' + - dir: input + name: rid + reset_value: '''bz' + width: '1' + - dir: input + name: rlast + reset_value: '''bz' + width: '1' + - dir: input + name: rvalid + reset_value: '''bz' + width: '1' + reset: rst_ni + reset_assertion_level: 'False' + transaction_constraints: [] + transaction_vars: + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_arready + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rdata + type: logic [DW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rresp + type: axi_pkg::axi_burst_e + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rid + type: logic [IW-1:0] + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rlast + type: logic + unpacked_dimension: '' + - comment: '' + iscompare: 'True' + isrand: 'False' + name: secreg_rvalid + type: logic + unpacked_dimension: '' + use_dpi_link: 'False' diff --git a/src/jtag/config/compile.yml b/src/jtag/config/compile.yml new file mode 100644 index 000000000..de3888b70 --- /dev/null +++ b/src/jtag/config/compile.yml @@ -0,0 +1,11 @@ +provides: [jtag_pkg] +schema_version: 2.4.0 +targets: + rtl: + directories: [$COMPILE_ROOT/rtl] + files: + - $COMPILE_ROOT/rtl/jtag_pkg.sv + tb: + directories: [$COMPILE_ROOT/rtl] + files: + - $COMPILE_ROOT/rtl/jtag_pkg.sv diff --git a/src/jtag/rtl/jtag_pkg.sv b/src/jtag/rtl/jtag_pkg.sv new file mode 100644 index 000000000..9a8355e8b --- /dev/null +++ b/src/jtag/rtl/jtag_pkg.sv @@ -0,0 +1,24 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// + +package jtag_pkg; + + typedef struct packed { + logic tck; + logic tms; + logic trst_n; + logic tdi; + } jtag_req_t; + + parameter jtag_req_t JTAG_REQ_DEFAULT = '0; + + typedef struct packed { + logic tdo; + logic tdo_oe; + } jtag_rsp_t; + + parameter jtag_rsp_t JTAG_RSP_DEFAULT = '0; + +endpackage : jtag_pkg diff --git a/src/kmac/config/compile.yml b/src/kmac/config/compile.yml index 1c1e66774..72df4ab20 100644 --- a/src/kmac/config/compile.yml +++ b/src/kmac/config/compile.yml @@ -6,6 +6,7 @@ targets: directories: [$COMPILE_ROOT/rtl] files: - $COMPILE_ROOT/rtl/sha3_pkg.sv + - $COMPILE_ROOT/rtl/kmac_pkg.sv --- provides: [kmac] schema_version: 2.4.0 diff --git a/src/kmac/rtl/kmac_pkg.sv b/src/kmac/rtl/kmac_pkg.sv new file mode 100644 index 000000000..7ca8c0aed --- /dev/null +++ b/src/kmac/rtl/kmac_pkg.sv @@ -0,0 +1,429 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// kmac_pkg + +package kmac_pkg; + parameter int MsgWidth = sha3_pkg::MsgWidth; + parameter int MsgStrbW = sha3_pkg::MsgStrbW; + + // Message FIFO depth + // + // Assume entropy is ready always (if Share is reused as an entropy in Chi) + // Then it takes 72 cycles to complete the Keccak round. While Keccak is in + // operation, the module need to store the incoming messages to not degrade + // the throughput. + // + // Based on the observation from HMAC case, the core usually takes 5 clocks + // to fetch data and store into KMAC. So the core can push at most 14.5 X 4B + // which is 58B. After that, Keccak can fetch the data from MSG_FIFO faster + // rate than the core can push. To fetch 58B, it takes around 7~8 cycles. + // For that time, the core only can push at most 2 DW. After that Keccak + // waits the incoming message. + // + // So Message FIFO doesn't need full block size except the KMAC case, which + // is delayed the operation by processing Function Name N, customization S, + // and secret keys. But KMAC doesn't need high throughput anyway (72Mb/s). + parameter int RegIntfWidth = 32; // 32bit interface + parameter int RegLatency = 5; // 5 cycle to write one Word + parameter int Sha3Latency = 72; // Expected masked sha3 processing time 24x3 + + // Total required buffer size while SHA3 is in processing + parameter int BufferCycles = (Sha3Latency + RegLatency - 1)/RegLatency; + parameter int BufferSizeBits = RegIntfWidth * BufferCycles; + + // Required MsgFifoDepth. Adding slightly more buffer for margin + parameter int MsgFifoDepth = 2 + ((BufferSizeBits + MsgWidth - 1)/MsgWidth); + parameter int MsgFifoDepthW = $clog2(MsgFifoDepth+1); + + parameter int MsgWindowWidth = 32; // Register width + parameter int MsgWindowDepth = 512; // 2kB space + + // Key related definitions + // If this value is changed, please modify the logic inside kmac_core + // that assigns the value into `encoded_key` + parameter int MaxKeyLen = 512; + + // size of encode_string(Key) + // $ceil($clog2(MaxKeyLen+1)/8) + parameter int MaxEncodedKeyLenW = $clog2(MaxKeyLen+1); + parameter int MaxEncodedKeyLenByte = (MaxEncodedKeyLenW + 8 - 1) / 8; + parameter int MaxEncodedKeyLenSize = MaxEncodedKeyLenByte * 8; + + // Secret Key left_encode(len(Key)) + // ---------- ------------------------ + parameter int MaxEncodedKeyW = MaxKeyLen + MaxEncodedKeyLenSize + 8; + + // key_len is SW configurable CSR. + // Current KMAC allows 5 key length options. + // This value determines the KMAC core how to map the value + // from Secret Key register to key size block + typedef enum logic [2:0] { + Key128 = 3'b 000, // 128 bit secret key + Key192 = 3'b 001, // 192 bit secret key + Key256 = 3'b 010, // 256 bit secret key + Key384 = 3'b 011, // 384 bit secret key + Key512 = 3'b 100 // 512 bit secret key + } key_len_e; + + + // SEC_CM: SW_CMD.CTRL.SPARSE + // kmac_cmd_e defines the possible command sets that software issues via + // !!CMD register. This is mainly to limit the error scenario that SW writes + // multiple commands at once. Additionally they are sparse encoded to harden + // against FI attacks + // + // Encoding generated with: + // $ ./util/design/sparse-fsm-encode.py -d 3 -m 5 -n 6 \ + // -s 1891656028 --language=sv + // + // Hamming distance histogram: + // + // 0: -- + // 1: -- + // 2: -- + // 3: |||||||||||||||||||| (50.00%) + // 4: |||||||||||||||| (40.00%) + // 5: |||| (10.00%) + // 6: -- + // + // Minimum Hamming distance: 3 + // Maximum Hamming distance: 5 + // Minimum Hamming weight: 3 + // Maximum Hamming weight: 4 + // + typedef enum logic [5:0] { + //CmdNone = 6'b001011, // dec 10 + // CmdNone is manually set to all zero by design! + // The minimum Hamming distance is still 3 + CmdNone = 6'b000000, // dec 0 + CmdStart = 6'b011101, // dec 29 + CmdProcess = 6'b101110, // dec 46 + CmdManualRun = 6'b110001, // dec 49 + CmdDone = 6'b010110 // dec 22 + } kmac_cmd_e; + + // Timer + parameter int unsigned TimerPrescalerW = 10; + parameter int unsigned EdnWaitTimerW = 16; + + // Entropy Mode Selection : Should be matched to register package Enum value + typedef enum logic [1:0] { + EntropyModeNone = 2'h 0, + EntropyModeEdn = 2'h 1, + EntropyModeSw = 2'h 2 + } entropy_mode_e; + + // PRNG (kmac_entropy) + parameter int unsigned EntropyOutputW = 800; + parameter int unsigned EntropyStateW = 288; + + // These LFSR parameters have been generated with + // $ ./util/design/gen-lfsr-seed.py --width 288 --seed 31468618 --prefix "" + typedef logic [EntropyStateW-1:0] lfsr_seed_t; + parameter lfsr_seed_t RndCnstLfsrSeedDefault = { + 32'h758a4420, + 256'h31e1c461_6ea343ec_153282a3_0c132b57_23c5a4cf_4743b3c7_c32d580f_74f1713a + }; + + // We use a single seed that is split down into chunks internally. + // These LFSR parameters have been generated with + // $ ./util/design/gen-lfsr-seed.py --width 800 --seed 3369807298 --prefix "" + typedef logic [EntropyOutputW-1:0][$clog2(EntropyOutputW)-1:0] lfsr_perm_t; + parameter lfsr_perm_t RndCnstLfsrPermDefault = { + 64'hb1a3e87aeb4e69f0, + 256'h2d8a6ee2c9ac567b2aa401a639a2a8ea2553614c0a8daf672c06546fc0d35267, + 256'hc4572024bc116458dd0f1c10a8aef5c4ad9a788968d0d7ca7345c6b8f277a5d3, + 256'hec5da20f261826ed3c8992724e70db897060be51b07a96902e14a42d12d320f8, + 256'h187049b6c25f35d0e485cc4b9ef01dad2865b5e558926f380718b74394fe0f82, + 256'hd5395a7d0aa4845af814e8681107a4c793758572c9467493bf1248a48f1b40c2, + 256'h09319b55111d0401819685a43a06f0da441021a8c220b14f01d44e49c1683a82, + 256'hafeb980964aa050641f4205131d9d4741eb5dd658e603b8ed438cb1096628d42, + 256'h62c9d75ced78ed09a3ddbb60f533eef10aa5a54b478d61a06a4b326eb3402105, + 256'hc27d562c6d91b48440d6d06e543be9871628a4aa9b3d2e51fa0ac2eb89a17f6d, + 256'h207ad96caf25d1fcffab210c1aff12252346fe4d56a7cd9b8605c7fa638895a9, + 256'h60158cd3a1ce4f2f6cf5d48579ac14b1e5219ca8914e0507b635dc712554f6bb, + 256'h0ae412943a7596f4644a0c13646adc91d02c406a10d232791d3de9919eec5424, + 256'haa2cac5f556c15c647eb29365062daf6aa848e10b3f665abccca713036d9f1cb, + 256'h1c9bd4aaeb19c5ac01b1805e0d5479860870da49a55e8f386ca8232c728e2f61, + 256'h3007aa420758818e5312401372eaa00d21c70c7e1158d2e08a1b6ac0b820cb67, + 256'hf0ba4b5c0865ff04f0f9d0175817c65d81918e43e14b2f83d574bfa9c6e6deae, + 256'h64c22c2974a1d5c55e2367004b249d5a02fc566685ea33b6f73aaa0244b34412, + 256'hb1a12230adb1748dc1d956f9f10c8e1aa52f4702e06a16680d92226c830ec4ce, + 256'h4c2eead21f08c387c3f1de89eb33b983c748e848f68b54f256715221177c5a4a, + 256'h0a47d82741955626755ba1cc24e2ba40504111b9e26136be714c5bc0d330c3f7, + 256'h75e863de763270a993890d633c6897218e151943edd8b79ae145cf564b774613, + 256'h0b0a76c40e7e84c876640dc78260c09a85e92e5ab56c22c0e72a8669fe88ba10, + 256'h8b99e437c776f0cea0d144f285b6ab7259e12284f380ae3410171cd6a8b04415, + 256'he95081c8c57e3e526ad5b38019a5c1b5505540462157e7c7e68e6a6a16ac460a, + 256'h5d5578da28092c7cc927cb9c0ed614a79b0e32b4c5b6a269a40743bef42b5e29, + 256'hd9a75ecb5548a29e9d34ddda07c8404aabbf5479456731ece3785f6090c3f862, + 256'h6eb1a5119e8b8e56b1455d820b46e20e15bb7d185a636b10ab8565732c59a302, + 256'h329925186604edbd5029a9f865268e90003b5b69d3e99240c3432291a60c62a4, + 256'hebad1ed028cd021b27260db22089e0c44481b1a4c120134ac63dc52fbc4cafb2, + 256'he065add2665fb361665267b53024329d96587d661f724171155ee73a3f0c47a8, + 256'h149751a5903c8bbcaf1782e415dfda531eb2af67c25e190330a12000e1fbb9cd + }; + + // These LFSR parameters have been generated with + // $ ./util/design/gen-lfsr-seed.py --width 800 --seed 31468618 --prefix "Buffer" + typedef logic [EntropyOutputW-1:0] buffer_lfsr_seed_t; + parameter buffer_lfsr_seed_t RndCnstBufferLfsrSeedDefault = { + 32'h292603b4, + 256'hf1d83863_e0bd0634_4544ad28_a91d8668_24b66efd_92ad8123_5381f2bc_3d65392c, + 256'h83c01ea5_d8be84f1_e2588917_11849a07_5a71f35f_e9b31605_f9077a6b_758a4420, + 256'h31e1c461_6ea343ec_153282a3_0c132b57_23c5a4cf_4743b3c7_c32d580f_74f1713a + }; + + // Message permutation + // These LFSR parameters have been generated with + // $ ./util/design/gen-lfsr-seed.py --width 64 --seed 1201202158 --prefix "" + // And changed the type name from lfsr_perm_t to msg_perm_t + typedef logic [MsgWidth-1:0][$clog2(MsgWidth)-1:0] msg_perm_t; + parameter msg_perm_t RndCnstMsgPermDefault = { + 128'h382af41849db4cfb9c885f72f118c102, + 256'hcb5526978defac799192f65f54148379af21d7e10d82a5a33c3f31a1eaf964b8 + }; + + /////////////////////////// + // Application interface // + /////////////////////////// + + // Number of the application interface + // Currently KMAC has three interface. + // 0: KeyMgr + // 1: LC_CTRL + // 2: ROM_CTRL + // Make sure to change `width` of app inter-module signal definition + // if this value is changed. + parameter int unsigned NumAppIntf = 3; + + // Application Algorithm + // Each interface can choose algorithms among SHA3, cSHAKE, KMAC + typedef enum bit [1:0] { + // SHA3 mode doer not nees any additional information. + // Prefix will be tied to all zero and not used. + AppSHA3 = 0, + + // In CShake/ KMAC mode, the Prefix can be determined by the compile-time + // parameter or through CSRs. + AppCShake = 1, + + // In KMAC mode, the secret key always comes from sideload. + // KMAC mode needs uniformly distributed entropy. The request will be + // silently discarded in Reset state. + AppKMAC = 2 + } app_mode_e; + + // Predefined encoded_string + parameter logic [15:0] EncodedStringEmpty = 16'h 0001; + parameter logic [47:0] EncodedStringKMAC = 48'h 4341_4D4B_2001; + // encoded_string("LC_CTRL") + parameter logic [71:0] EncodedStringLcCtrl = 72'h 4c_5254_435f_434C_3801; + // encoded_string("ROM_CTRL") + parameter logic [79:0] EncodedStringRomCtrl = 80'h 4c52_5443_5f4d_4f52_4001; + parameter int unsigned NSPrefixW = sha3_pkg::NSRegisterSize*8; + + typedef struct packed { + app_mode_e Mode; + + sha3_pkg::keccak_strength_e Strength; + + // PrefixMode determines the origin value of Prefix that is used in KMAC + // and cSHAKE operations. + // Choose **0** for CSRs (!!PREFIX), or **1** to use `Prefix` parameter + // below. + bit PrefixMode; + + // If `PrefixMode` is 1'b 1, then this `Prefix` value will be used in + // cSHAKE or KMAC operation. + logic [NSPrefixW-1:0] Prefix; + } app_config_t; + + parameter app_config_t AppCfg [NumAppIntf] = '{ + // KeyMgr + '{ + Mode: AppKMAC, // KeyMgr uses KMAC operation + Strength: sha3_pkg::L256, + PrefixMode: 1'b 1, // Use prefix parameter + // {fname: encoded_string("KMAC"), custom_str: encoded_string("")} + Prefix: NSPrefixW'({EncodedStringEmpty, EncodedStringKMAC}) + }, + + // LC_CTRL + '{ + Mode: AppCShake, + Strength: sha3_pkg::L128, + PrefixMode: 1'b 1, // Use prefix parameter + // {fname: encode_string(""), custom_str: encode_string("LC_CTRL")} + Prefix: NSPrefixW'({EncodedStringLcCtrl, EncodedStringEmpty}) + }, + + // ROM_CTRL + '{ + Mode: AppCShake, + Strength: sha3_pkg::L256, + PrefixMode: 1'b 1, // Use prefix parameter + // {fname: encode_string(""), custom_str: encode_string("ROM_CTRL")} + Prefix: NSPrefixW'({EncodedStringRomCtrl, EncodedStringEmpty}) + } + }; + + // Exporting the app internal mux selection enum into the package. So that DV + // can use this enum in its scoreboard. + // Encoding generated with: + // $ ./util/design/sparse-fsm-encode.py -d 3 -m 4 -n 5 \ + // -s 713832113 --language=sv + // + // Hamming distance histogram: + // + // 0: -- + // 1: -- + // 2: -- + // 3: |||||||||||||||||||| (66.67%) + // 4: |||||||||| (33.33%) + // 5: -- + // + // Minimum Hamming distance: 3 + // Maximum Hamming distance: 4 + // Minimum Hamming weight: 1 + // Maximum Hamming weight: 4 + // + localparam int AppMuxWidth = 5; + typedef enum logic [AppMuxWidth-1:0] { + SelNone = 5'b10100, + SelApp = 5'b11001, + SelOutLen = 5'b00010, + SelSw = 5'b01111 + } app_mux_sel_e ; + + + + // MsgWidth : 64 + // MsgStrbW : 8 + parameter int unsigned AppDigestW = 384; + parameter int unsigned AppKeyW = 256; + + typedef struct packed { + logic valid; + logic [MsgWidth-1:0] data; + logic [MsgStrbW-1:0] strb; + logic last; + } app_req_t; + + typedef struct packed { + logic ready; + logic done; + logic [AppDigestW-1:0] digest_share0; + logic [AppDigestW-1:0] digest_share1; + // Error is valid when done is high. If any error occurs during KDF, KMAC + // returns the garbage digest data with error. The KeyMgr discards the + // digest and may re-initiate the process. + logic error; + } app_rsp_t; + + parameter app_req_t APP_REQ_DEFAULT = '{ + valid: 1'b 0, + data: '0, + strb: '0, + last: 1'b 0 + }; + parameter app_rsp_t APP_RSP_DEFAULT = '{ + ready: 1'b1, + done: 1'b1, + digest_share0: AppDigestW'(32'hDEADBEEF), + digest_share1: AppDigestW'(32'hFACEBEEF), + error: 1'b1 + }; + + + //////////////////// + // Error Handling // + //////////////////// + + // Error structure is same to the SHA3 one. The codes do not overlap. + typedef enum logic [7:0] { + ErrNone = 8'h 00, + + // ErrSha3SwControl occurs when software sent wrong flow signal. + // e.g) Sw set `process_i` without `start_i`. The state machine ignores + // the signal and report through the error FIFO. + //ErrSha3SwControl = 8'h 80 + + // ErrKeyNotValid: KeyMgr interface raises an error if the secret key is + // not valid when KeyMgr initiates KDF. + ErrKeyNotValid = 8'h 01, + + // ErrSwPushMsgFifo: Sw writes data into Msg FIFO abruptly. + // This error occurs in below scenario: + // - Sw does not send "Start" command to KMAC then writes data into + // Msg FIFO + // - Sw writes data into Msg FIFO when KeyMgr is in operation + ErrSwPushedMsgFifo = 8'h 02, + + // ErrSwIssuedCmdInAppActive + // - Sw writes any command while AppIntf is in active. + ErrSwIssuedCmdInAppActive = 8'h 03, + + // ErrWaitTimerExpired + // Entropy Wait timer expired. Something wrong on EDN i/f + ErrWaitTimerExpired = 8'h 04, + + // ErrIncorrectEntropyMode + // Incorrect Entropy mode when entropy is ready + ErrIncorrectEntropyMode = 8'h 05, + + // ErrUnexpectedModeStrength + ErrUnexpectedModeStrength = 8'h 06, + + // ErrIncorrectFunctionName "KMAC" + ErrIncorrectFunctionName = 8'h 07, + + // ErrSwCmdSequence + ErrSwCmdSequence = 8'h 08, + + // ErrSwHashingWithoutEntropyReady + // - Sw issues KMAC op without Entropy setting. + ErrSwHashingWithoutEntropyReady = 8'h 09, + + // Error Shadow register update + ErrShadowRegUpdate = 8'h C0, + + // Error due to lc_escalation_en_i or fatal fault + ErrFatalError = 8'h C1, + + // Error due to the counter integrity check failure inside MsgFifo.Packer + ErrPackerIntegrity = 8'h C2, + + // Error due to the counter integrity check failure inside MsgFifo.Fifo + ErrMsgFifoIntegrity = 8'h C3 + } err_code_e; + + typedef struct packed { + logic valid; + err_code_e code; // Type of error + logic [23:0] info; // Additional Debug info + } err_t; + parameter int unsigned ErrInfoW = 24 ; // err_t::info + + typedef struct packed { + logic [AppDigestW-1:0] digest_share0; + logic [AppDigestW-1:0] digest_share1; + } rsp_digest_t; + /////////////////////// + // Library Functions // + /////////////////////// + + // Endian conversion functions (32-bit, 64-bit) + function automatic logic [31:0] conv_endian32( input logic [31:0] v, input logic swap); + logic [31:0] conv_data = {<<8{v}}; + conv_endian32 = (swap) ? conv_data : v ; + endfunction : conv_endian32 + + function automatic logic [63:0] conv_endian64( input logic [63:0] v, input logic swap); + logic [63:0] conv_data = {<<8{v}}; + conv_endian64 = (swap) ? conv_data : v ; + endfunction : conv_endian64 + +endpackage : kmac_pkg diff --git a/src/lc_ctrl/config/compile.yml b/src/lc_ctrl/config/compile.yml index eff0a412e..2663bc52a 100644 --- a/src/lc_ctrl/config/compile.yml +++ b/src/lc_ctrl/config/compile.yml @@ -16,3 +16,31 @@ targets: - $COMPILE_ROOT/rtl/lc_ctrl_reg_pkg.sv - $COMPILE_ROOT/rtl/lc_ctrl_state_pkg.sv - $COMPILE_ROOT/rtl/lc_ctrl_pkg.sv +--- +provides: [lc_ctrl] +schema_version: 2.4.0 +requires: + - lc_ctrl_pkg + - axi_pkg + - kmac_pkg + - tlul_pkg + - jtag_pkg + - pwrmgr_pkg + - fuse_ctrl_pkg + - ast_pkg + - edn_pkg + - dm_pkg + - alert_pkg +targets: + rtl: + directories: [$COMPILE_ROOT/rtl] + files: + - $COMPILE_ROOT/rtl/lc_ctrl_fsm.sv + - $COMPILE_ROOT/rtl/lc_ctrl_kmac_if.sv + - $COMPILE_ROOT/rtl/lc_ctrl_reg_top.sv + - $COMPILE_ROOT/rtl/lc_ctrl_signal_decode.sv + - $COMPILE_ROOT/rtl/lc_ctrl_state_decode.sv + - $COMPILE_ROOT/rtl/lc_ctrl_state_transition.sv + - $COMPILE_ROOT/rtl/lc_ctrl.sv + - $COMPILE_ROOT/rtl/lc_ctrl_top.sv + tops: [lc_ctrl_top] diff --git a/src/lc_ctrl/rtl/lc_ctrl.sv b/src/lc_ctrl/rtl/lc_ctrl.sv new file mode 100644 index 000000000..f6fd27dce --- /dev/null +++ b/src/lc_ctrl/rtl/lc_ctrl.sv @@ -0,0 +1,829 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Life cycle controller top. +// + +`include "caliptra_prim_assert.sv" + +module lc_ctrl + import lc_ctrl_pkg::*; + import lc_ctrl_reg_pkg::*; + import lc_ctrl_state_pkg::*; +#( + // Enable asynchronous transitions on alerts. + parameter logic [NumAlerts-1:0] AlertAsyncOn = {NumAlerts{1'b1}}, + // Hardware revision numbers exposed in the CSRs. + parameter logic [SiliconCreatorIdWidth-1:0] SiliconCreatorId = '0, + parameter logic [ProductIdWidth-1:0] ProductId = '0, + parameter logic [RevisionIdWidth-1:0] RevisionId = '0, + // Idcode value for the JTAG. + parameter logic [31:0] IdcodeValue = 32'h00000001, + // Random netlist constants + parameter lc_keymgr_div_t RndCnstLcKeymgrDivInvalid = LcKeymgrDivWidth'(0), + parameter lc_keymgr_div_t RndCnstLcKeymgrDivTestUnlocked = LcKeymgrDivWidth'(1), + parameter lc_keymgr_div_t RndCnstLcKeymgrDivDev = LcKeymgrDivWidth'(2), + parameter lc_keymgr_div_t RndCnstLcKeymgrDivProduction = LcKeymgrDivWidth'(3), + parameter lc_keymgr_div_t RndCnstLcKeymgrDivRma = LcKeymgrDivWidth'(4), + parameter lc_token_mux_t RndCnstInvalidTokens = {TokenMuxBits{1'b1}}, + parameter bit SecVolatileRawUnlockEn = 0 +) ( + // Life cycle controller clock + input clk_i, + input rst_ni, + // Clock for KMAC interface + input clk_kmac_i, + input rst_kmac_ni, + // Bus Interface (device) + input tlul_pkg::tl_h2d_t tl_i, + output tlul_pkg::tl_d2h_t tl_o, + // JTAG TAP. + input jtag_pkg::jtag_req_t jtag_i, + output jtag_pkg::jtag_rsp_t jtag_o, + // This bypasses the clock inverter inside the JTAG TAP for scanmmode. + input scan_rst_ni, + input caliptra_prim_mubi_pkg::mubi4_t scanmode_i, + // Alert outputs. + input caliptra_prim_alert_pkg::alert_rx_t [NumAlerts-1:0] alert_rx_i, + output caliptra_prim_alert_pkg::alert_tx_t [NumAlerts-1:0] alert_tx_o, + // Escalation inputs (severity 1 and 2). + // These need not be synchronized since the alert handler is + // in the same clock domain as the LC controller. + input caliptra_prim_esc_pkg::esc_rx_t esc_scrap_state0_tx_i, + output caliptra_prim_esc_pkg::esc_tx_t esc_scrap_state0_rx_o, + input caliptra_prim_esc_pkg::esc_rx_t esc_scrap_state1_tx_i, + output caliptra_prim_esc_pkg::esc_tx_t esc_scrap_state1_rx_o, + // Power manager interface (inputs are synced to lifecycle clock domain). + input pwrmgr_pkg::pwr_lc_req_t pwr_lc_i, + output pwrmgr_pkg::pwr_lc_rsp_t pwr_lc_o, + // Strap sampling override that is only used when SecVolatileRawUnlockEn = 1, + // Otherwise this output is tied off to 0. + output logic strap_en_override_o, + // Strap override - this is only used when + // Macro-specific test registers going to lifecycle TAP + output caliptra_otp_ctrl_pkg::lc_otp_vendor_test_req_t lc_otp_vendor_test_o, + input caliptra_otp_ctrl_pkg::lc_otp_vendor_test_rsp_t lc_otp_vendor_test_i, + // Life cycle transition command interface. + // No sync required since LC and OTP are in the same clock domain. + output caliptra_otp_ctrl_pkg::lc_otp_program_req_t lc_otp_program_o, + input caliptra_otp_ctrl_pkg::lc_otp_program_rsp_t lc_otp_program_i, + // Life cycle hashing interface for raw unlock + // Synchronized in the life cycle controller. + // SEC_CM: TOKEN.DIGEST + input kmac_pkg::app_rsp_t kmac_data_i, + output kmac_pkg::app_req_t kmac_data_o, + // OTP broadcast outputs + // No sync required since LC and OTP are in the same clock domain. + // SEC_CM: TOKEN_VALID.CTRL.MUBI + input caliptra_otp_ctrl_pkg::otp_lc_data_t otp_lc_data_i, + // Life cycle broadcast outputs (all of them are registered). + // SEC_CM: INTERSIG.MUBI + output lc_tx_t lc_dft_en_o, + output lc_tx_t lc_nvm_debug_en_o, + output lc_tx_t lc_hw_debug_en_o, + output lc_tx_t lc_cpu_en_o, + output lc_tx_t lc_creator_seed_sw_rw_en_o, + output lc_tx_t lc_owner_seed_sw_rw_en_o, + output lc_tx_t lc_iso_part_sw_rd_en_o, + output lc_tx_t lc_iso_part_sw_wr_en_o, + output lc_tx_t lc_seed_hw_rd_en_o, + output lc_tx_t lc_keymgr_en_o, + output lc_tx_t lc_escalate_en_o, + output lc_tx_t lc_check_byp_en_o, + // Request and feedback to/from clock manager and AST. + // The ack is synced to the lc clock domain using prim_lc_sync. + // SEC_CM: INTERSIG.MUBI + output lc_tx_t lc_clk_byp_req_o, + input lc_tx_t lc_clk_byp_ack_i, + // Request and feedback to/from flash controller. + // The ack is synced to the lc clock domain using prim_lc_sync. + output lc_flash_rma_seed_t lc_flash_rma_seed_o, + // SEC_CM: INTERSIG.MUBI + output lc_tx_t lc_flash_rma_req_o, + input lc_tx_t [NumRmaAckSigs-1:0] lc_flash_rma_ack_i, + // State group diversification value for keymgr. + output lc_keymgr_div_t lc_keymgr_div_o, + // Hardware config input, needed for the DEVICE_ID field. + input caliptra_otp_ctrl_pkg::otp_device_id_t otp_device_id_i, + // Hardware config input, needed for the MANUF_STATE field. + input caliptra_otp_ctrl_pkg::otp_device_id_t otp_manuf_state_i, + // Hardware revision output (static) + output lc_hw_rev_t hw_rev_o +); + + import caliptra_prim_mubi_pkg::mubi8_t; + import caliptra_prim_mubi_pkg::MuBi8False; + import caliptra_prim_mubi_pkg::mubi8_test_true_strict; + import caliptra_prim_mubi_pkg::mubi8_test_false_loose; + + //////////////////////// + // Integration Checks // + //////////////////////// + + // Check that the CSR parameters correspond with the ones used in the design. + `CALIPTRA_ASSERT_INIT(DecLcStateWidthCheck_A, CsrLcStateWidth == ExtDecLcStateWidth) + `CALIPTRA_ASSERT_INIT(DecLcCountWidthCheck_A, CsrLcCountWidth == DecLcCountWidth) + `CALIPTRA_ASSERT_INIT(DecLcIdStateWidthCheck_A, CsrLcIdStateWidth == ExtDecLcIdStateWidth) + `CALIPTRA_ASSERT_INIT(NumTokenWordsCheck_A, NumTokenWords == LcTokenWidth/32) + `CALIPTRA_ASSERT_INIT(OtpTestCtrlWidth_A, caliptra_otp_ctrl_pkg::OtpTestCtrlWidth == CsrOtpTestCtrlWidth) + + ///////////// + // Regfile // + ///////////// + + lc_ctrl_reg_pkg::lc_ctrl_reg2hw_t reg2hw; + lc_ctrl_reg_pkg::lc_ctrl_hw2reg_t hw2reg; + + // SEC_CM: TRANSITION.CONFIG.REGWEN, STATE.CONFIG.SPARSE + logic fatal_bus_integ_error_q, fatal_bus_integ_error_csr_d, fatal_bus_integ_error_tap_d; + lc_ctrl_reg_top u_reg ( + .clk_i, + .rst_ni, + .tl_i, + .tl_o, + .reg2hw ( reg2hw ), + .hw2reg ( hw2reg ), + // SEC_CM: BUS.INTEGRITY + .intg_err_o( fatal_bus_integ_error_csr_d ) + ); + + //////////////////// + // Life Cycle TAP // + //////////////////// + + tlul_pkg::tl_h2d_t tap_tl_h2d; + tlul_pkg::tl_d2h_t tap_tl_d2h; + lc_ctrl_reg_pkg::lc_ctrl_reg2hw_t tap_reg2hw; + lc_ctrl_reg_pkg::lc_ctrl_hw2reg_t tap_hw2reg; + + lc_ctrl_reg_top u_reg_tap ( + .clk_i, + .rst_ni, + .tl_i ( tap_tl_h2d ), + .tl_o ( tap_tl_d2h ), + .reg2hw ( tap_reg2hw ), + .hw2reg ( tap_hw2reg ), + // SEC_CM: BUS.INTEGRITY + // While the TAP does not have bus integrity, it does have a WE checker + // that feeds into intg_err_o - hence this is wired up to the fatal_bus_integ_error. + .intg_err_o( fatal_bus_integ_error_tap_d ) + ); + + + // This reuses the JTAG DTM and DMI from the RISC-V external + // debug v0.13 specification to read and write the lc_ctrl CSRs: + // https://github.com/riscv/riscv-debug-spec/blob/release/riscv-debug-release.pdf + // The register addresses correspond to the byte offsets of the lc_ctrl CSRs, divided by 4. + // Note that the DMI reset does not affect the LC controller in any way. + dm::dmi_req_t dmi_req; + logic dmi_req_valid; + logic dmi_req_ready; + dm::dmi_resp_t dmi_resp; + logic dmi_resp_ready; + logic dmi_resp_valid; + + logic scanmode; + prim_mubi4_dec u_prim_mubi4_dec ( + .mubi_i(scanmode_i), + .mubi_dec_o(scanmode) + ); + + logic tck_muxed; + logic trst_n_muxed; + caliptra_prim_clock_mux2 #( + .NoFpgaBufG(1'b1) + ) u_prim_clock_mux2 ( + .clk0_i(jtag_i.tck), + .clk1_i(clk_i), + .sel_i (scanmode), + .clk_o (tck_muxed) + ); + + caliptra_prim_clock_mux2 #( + .NoFpgaBufG(1'b1) + ) u_prim_rst_n_mux2 ( + .clk0_i(jtag_i.trst_n), + .clk1_i(scan_rst_ni), + .sel_i (scanmode), + .clk_o (trst_n_muxed) + ); + + logic req_ready; + assign req_ready = dmi_req_ready & dmi_resp_ready; + dmi_jtag #( + .IdcodeValue(IdcodeValue), + .NumDmiWordAbits(7) + ) u_dmi_jtag ( + .clk_i, + .rst_ni, + .testmode_i ( scanmode ), + .test_rst_ni ( scan_rst_ni ), + .dmi_rst_no ( ), // unused + .dmi_req_o ( dmi_req ), + .dmi_req_valid_o ( dmi_req_valid ), + // unless there is room for response, stall + .dmi_req_ready_i ( req_ready ), + .dmi_resp_i ( dmi_resp ), + .dmi_resp_ready_o ( dmi_resp_ready ), + .dmi_resp_valid_i ( dmi_resp_valid ), + .tck_i ( tck_muxed ), + .tms_i ( jtag_i.tms ), + .trst_ni ( trst_n_muxed ), + .td_i ( jtag_i.tdi ), + .td_o ( jtag_o.tdo ), + .tdo_oe_o ( jtag_o.tdo_oe ) + ); + + // DMI to TL-UL transducing + tlul_adapter_host #( + .EnableDataIntgGen(1) + ) u_tap_tlul_host ( + .clk_i, + .rst_ni, + // do not make a request unless there is room for the response + .req_i ( dmi_req_valid & dmi_resp_ready ), + .gnt_o ( dmi_req_ready ), + .addr_i ( tlul_pkg::TL_AW'({dmi_req.addr, 2'b00}) ), + .we_i ( dmi_req.op == dm::DTM_WRITE ), + .wdata_i ( dmi_req.data ), + .wdata_intg_i ('0 ), + .be_i ( {tlul_pkg::TL_DBW{1'b1}} ), + .instr_type_i ( caliptra_prim_mubi_pkg::MuBi4False ), + .valid_o ( dmi_resp_valid ), + .rdata_o ( dmi_resp.data ), + .rdata_intg_o ( ), + .err_o ( ), + .intg_err_o ( ), + .tl_o ( tap_tl_h2d ), + .tl_i ( tap_tl_d2h ) + ); + + // TL-UL to DMI transducing + assign dmi_resp.resp = '0; // unused inside dmi_jtag + + // These signals are unused + logic unused_tap_tl_d2h; + assign unused_tap_tl_d2h = ^{ + dmi_req.addr[31:30], + tap_tl_d2h.d_opcode, + tap_tl_d2h.d_param, + tap_tl_d2h.d_size, + tap_tl_d2h.d_source, + tap_tl_d2h.d_sink, + tap_tl_d2h.d_user, + tap_tl_d2h.d_error + }; + + /////////////////////////////////////// + // Transition Interface and HW Mutex // + /////////////////////////////////////// + + // All registers are HWext + logic trans_success_d, trans_success_q; + logic trans_cnt_oflw_error_d, trans_cnt_oflw_error_q; + logic trans_invalid_error_d, trans_invalid_error_q; + logic token_invalid_error_d, token_invalid_error_q; + logic flash_rma_error_d, flash_rma_error_q; + logic otp_prog_error_d, fatal_prog_error_q; + logic state_invalid_error_d, fatal_state_error_q; + logic otp_part_error_q; + mubi8_t sw_claim_transition_if_d, sw_claim_transition_if_q; + mubi8_t tap_claim_transition_if_d, tap_claim_transition_if_q; + logic transition_cmd; + lc_token_t transition_token_d, transition_token_q; + ext_dec_lc_state_t transition_target_d, transition_target_q; + // No need to register these. + ext_dec_lc_state_t dec_lc_state; + dec_lc_cnt_t dec_lc_cnt; + dec_lc_id_state_e dec_lc_id_state; + + logic lc_idle_d, lc_done_d; + + // Assign hardware revision output + assign hw_rev_o = '{silicon_creator_id: SiliconCreatorId, + product_id: ProductId, + revision_id: RevisionId, + reserved: '0}; + + // OTP Vendor control bits + logic ext_clock_switched; + logic use_ext_clock_d, use_ext_clock_q; + logic volatile_raw_unlock_d, volatile_raw_unlock_q; + logic [CsrOtpTestCtrlWidth-1:0] otp_vendor_test_ctrl_d, otp_vendor_test_ctrl_q; + logic [CsrOtpTestStatusWidth-1:0] otp_vendor_test_status; + + always_comb begin : p_csr_assign_outputs + hw2reg = '0; + hw2reg.status.initialized = lc_done_d; + hw2reg.status.ready = lc_idle_d; + hw2reg.status.ext_clock_switched = ext_clock_switched; + hw2reg.status.transition_successful = trans_success_q; + hw2reg.status.transition_count_error = trans_cnt_oflw_error_q; + hw2reg.status.transition_error = trans_invalid_error_q; + hw2reg.status.token_error = token_invalid_error_q; + hw2reg.status.flash_rma_error = flash_rma_error_q; + hw2reg.status.otp_error = fatal_prog_error_q; + hw2reg.status.state_error = fatal_state_error_q; + hw2reg.status.otp_partition_error = otp_part_error_q; + hw2reg.status.bus_integ_error = fatal_bus_integ_error_q; + hw2reg.lc_state = dec_lc_state; + hw2reg.lc_transition_cnt = dec_lc_cnt; + hw2reg.lc_id_state = {DecLcIdStateNumRep{dec_lc_id_state}}; + hw2reg.device_id = otp_device_id_i; + hw2reg.manuf_state = otp_manuf_state_i; + hw2reg.hw_revision0.silicon_creator_id = hw_rev_o.silicon_creator_id; + hw2reg.hw_revision0.product_id = hw_rev_o.product_id; + hw2reg.hw_revision1.revision_id = hw_rev_o.revision_id; + hw2reg.hw_revision1.reserved = '0; + + // The assignments above are identical for the TAP. + tap_hw2reg = hw2reg; + + // Assignments gated by mutex. Again, the TAP has priority. + tap_hw2reg.claim_transition_if = tap_claim_transition_if_q; + hw2reg.claim_transition_if = sw_claim_transition_if_q; + if (mubi8_test_true_strict(tap_claim_transition_if_q)) begin + tap_hw2reg.transition_ctrl.ext_clock_en = use_ext_clock_q; + tap_hw2reg.transition_ctrl.volatile_raw_unlock = volatile_raw_unlock_q; + tap_hw2reg.transition_token = transition_token_q; + tap_hw2reg.transition_target = transition_target_q; + // SEC_CM: TRANSITION.CONFIG.REGWEN + tap_hw2reg.transition_regwen = lc_idle_d; + tap_hw2reg.otp_vendor_test_ctrl = otp_vendor_test_ctrl_q; + tap_hw2reg.otp_vendor_test_status = otp_vendor_test_status; + end else if (mubi8_test_true_strict(sw_claim_transition_if_q)) begin + hw2reg.transition_ctrl.ext_clock_en = use_ext_clock_q; + hw2reg.transition_ctrl.volatile_raw_unlock = volatile_raw_unlock_q; + hw2reg.transition_token = transition_token_q; + hw2reg.transition_target = transition_target_q; + // SEC_CM: TRANSITION.CONFIG.REGWEN + hw2reg.transition_regwen = lc_idle_d; + hw2reg.otp_vendor_test_ctrl = otp_vendor_test_ctrl_q; + hw2reg.otp_vendor_test_status = otp_vendor_test_status; + end + end + + always_comb begin : p_csr_assign_inputs + sw_claim_transition_if_d = sw_claim_transition_if_q; + tap_claim_transition_if_d = tap_claim_transition_if_q; + transition_token_d = transition_token_q; + transition_target_d = transition_target_q; + transition_cmd = 1'b0; + otp_vendor_test_ctrl_d = otp_vendor_test_ctrl_q; + use_ext_clock_d = use_ext_clock_q; + volatile_raw_unlock_d = volatile_raw_unlock_q; + + // Note that the mutex claims from the TAP and SW side could arrive within the same cycle. + // In that case we give priority to the TAP mutex claim in order to avoid a race condition. + // TAP mutex claim. + if (mubi8_test_false_loose(sw_claim_transition_if_q) && + tap_reg2hw.claim_transition_if.qe) begin + tap_claim_transition_if_d = mubi8_t'(tap_reg2hw.claim_transition_if.q); + // SW mutex claim. + end else if (mubi8_test_false_loose(tap_claim_transition_if_q) && + reg2hw.claim_transition_if.qe) begin + sw_claim_transition_if_d = mubi8_t'(reg2hw.claim_transition_if.q); + end + + + // The idle signal serves as the REGWEN in this case. + if (lc_idle_d) begin + // The TAP has priority. + if (mubi8_test_true_strict(tap_claim_transition_if_q)) begin + transition_cmd = tap_reg2hw.transition_cmd.q & + tap_reg2hw.transition_cmd.qe; + + if (tap_reg2hw.transition_ctrl.ext_clock_en.qe) begin + use_ext_clock_d |= tap_reg2hw.transition_ctrl.ext_clock_en.q; + end + + // ---------- VOLATILE_TEST_UNLOCKED CODE SECTION START ---------- + // NOTE THAT THIS IS A FEATURE FOR TEST CHIPS ONLY TO MITIGATE + // THE RISK OF A BROKEN OTP MACRO. THIS WILL BE DISABLED VIA + // SecVolatileRawUnlockEn AT COMPILETIME FOR PRODUCTION DEVICES. + // --------------------------------------------------------------- + if (tap_reg2hw.transition_ctrl.volatile_raw_unlock.qe) begin + volatile_raw_unlock_d = tap_reg2hw.transition_ctrl.volatile_raw_unlock.q; + end + // ----------- VOLATILE_TEST_UNLOCKED CODE SECTION END ----------- + + for (int k = 0; k < LcTokenWidth/32; k++) begin + if (tap_reg2hw.transition_token[k].qe) begin + transition_token_d[k*32 +: 32] = tap_reg2hw.transition_token[k].q; + end + end + + if (tap_reg2hw.transition_target.qe) begin + for (int k = 0; k < DecLcStateNumRep; k++) begin + transition_target_d[k] = dec_lc_state_e'( + tap_reg2hw.transition_target.q[k*DecLcStateWidth +: DecLcStateWidth]); + end + end + + if (tap_reg2hw.otp_vendor_test_ctrl.qe) begin + otp_vendor_test_ctrl_d = tap_reg2hw.otp_vendor_test_ctrl.q; + end + end else if (mubi8_test_true_strict(sw_claim_transition_if_q)) begin + transition_cmd = reg2hw.transition_cmd.q & + reg2hw.transition_cmd.qe; + + if (reg2hw.transition_ctrl.ext_clock_en.qe) begin + use_ext_clock_d |= reg2hw.transition_ctrl.ext_clock_en.q; + end + + // ---------- VOLATILE_TEST_UNLOCKED CODE SECTION START ---------- + // NOTE THAT THIS IS A FEATURE FOR TEST CHIPS ONLY TO MITIGATE + // THE RISK OF A BROKEN OTP MACRO. THIS WILL BE DISABLED VIA + // SecVolatileRawUnlockEn AT COMPILETIME FOR PRODUCTION DEVICES. + // --------------------------------------------------------------- + if (reg2hw.transition_ctrl.volatile_raw_unlock.qe) begin + volatile_raw_unlock_d = reg2hw.transition_ctrl.volatile_raw_unlock.q; + end + // ----------- VOLATILE_TEST_UNLOCKED CODE SECTION END ----------- + + for (int k = 0; k < LcTokenWidth/32; k++) begin + if (reg2hw.transition_token[k].qe) begin + transition_token_d[k*32 +: 32] = reg2hw.transition_token[k].q; + end + end + + if (reg2hw.transition_target.qe) begin + for (int k = 0; k < DecLcStateNumRep; k++) begin + transition_target_d[k] = dec_lc_state_e'( + reg2hw.transition_target.q[k*DecLcStateWidth +: DecLcStateWidth]); + end + end + + if (reg2hw.otp_vendor_test_ctrl.qe) begin + otp_vendor_test_ctrl_d = reg2hw.otp_vendor_test_ctrl.q; + end + end + end + end + + always_ff @(posedge clk_i or negedge rst_ni) begin : p_csrs + if (!rst_ni) begin + trans_success_q <= 1'b0; + trans_cnt_oflw_error_q <= 1'b0; + trans_invalid_error_q <= 1'b0; + token_invalid_error_q <= 1'b0; + flash_rma_error_q <= 1'b0; + fatal_prog_error_q <= 1'b0; + fatal_state_error_q <= 1'b0; + sw_claim_transition_if_q <= MuBi8False; + tap_claim_transition_if_q <= MuBi8False; + transition_token_q <= '0; + transition_target_q <= {DecLcStateNumRep{DecLcStRaw}}; + otp_part_error_q <= 1'b0; + fatal_bus_integ_error_q <= 1'b0; + otp_vendor_test_ctrl_q <= '0; + use_ext_clock_q <= 1'b0; + end else begin + // ---------- VOLATILE_TEST_UNLOCKED CODE SECTION START ---------- + // NOTE THAT THIS IS A FEATURE FOR TEST CHIPS ONLY TO MITIGATE + // THE RISK OF A BROKEN OTP MACRO. THIS WILL BE DISABLED VIA + // SecVolatileRawUnlockEn AT COMPILETIME FOR PRODUCTION DEVICES. + // --------------------------------------------------------------- + // In case of a volatile RAW unlock, this bit has to be cleared when the volatile + // unlock is followed by a real transition. + // ----------- VOLATILE_TEST_UNLOCKED CODE SECTION END ----------- + if (SecVolatileRawUnlockEn && transition_cmd && !volatile_raw_unlock_q) begin + trans_success_q <= 1'b0; + end else begin + trans_success_q <= trans_success_d | trans_success_q; + end + // All other status and error bits are terminal and require a reset cycle. + trans_cnt_oflw_error_q <= trans_cnt_oflw_error_d | trans_cnt_oflw_error_q; + trans_invalid_error_q <= trans_invalid_error_d | trans_invalid_error_q; + token_invalid_error_q <= token_invalid_error_d | token_invalid_error_q; + flash_rma_error_q <= flash_rma_error_d | flash_rma_error_q; + fatal_prog_error_q <= otp_prog_error_d | fatal_prog_error_q; + fatal_state_error_q <= state_invalid_error_d | fatal_state_error_q; + otp_part_error_q <= otp_lc_data_i.error | otp_part_error_q; + fatal_bus_integ_error_q <= fatal_bus_integ_error_csr_d | + fatal_bus_integ_error_tap_d | + fatal_bus_integ_error_q; + // Other regs, gated by mutex further below. + sw_claim_transition_if_q <= sw_claim_transition_if_d; + tap_claim_transition_if_q <= tap_claim_transition_if_d; + transition_token_q <= transition_token_d; + transition_target_q <= transition_target_d; + otp_vendor_test_ctrl_q <= otp_vendor_test_ctrl_d; + use_ext_clock_q <= use_ext_clock_d; + end + end + + // ---------- VOLATILE_TEST_UNLOCKED CODE SECTION START ---------- + // NOTE THAT THIS IS A FEATURE FOR TEST CHIPS ONLY TO MITIGATE + // THE RISK OF A BROKEN OTP MACRO. THIS WILL BE DISABLED VIA + // SecVolatileRawUnlockEn AT COMPILETIME FOR PRODUCTION DEVICES. + // --------------------------------------------------------------- + // If not enabled, this register will become a constant. + if (SecVolatileRawUnlockEn) begin : gen_volatile_raw_unlock_reg + always_ff @(posedge clk_i or negedge rst_ni) begin : p_volatile_raw_unlock_reg + if (!rst_ni) begin + volatile_raw_unlock_q <= 1'b0; + end else begin + volatile_raw_unlock_q <= volatile_raw_unlock_d; + end + end + end else begin : gen_volatile_raw_unlock_const + logic unused_volatile_raw_unlock; + assign unused_volatile_raw_unlock = ^volatile_raw_unlock_d; + assign volatile_raw_unlock_q = 1'b0; + end + // ----------- VOLATILE_TEST_UNLOCKED CODE SECTION END ----------- + + assign lc_flash_rma_seed_o = transition_token_q[RmaSeedWidth-1:0]; + + // Gate the vendor specific test ctrl/status bits to zero in production states. + // Buffer the enable signal to prevent optimization of the multibit signal. + lc_tx_t lc_raw_test_rma; + lc_tx_t [1:0] lc_raw_test_rma_buf; + caliptra_prim_lc_sync #( + .NumCopies(2), + .AsyncOn(0) + ) u_prim_lc_sync ( + .clk_i, + .rst_ni, + .lc_en_i(lc_raw_test_rma), + .lc_en_o(lc_raw_test_rma_buf) + ); + + assign lc_otp_vendor_test_o.ctrl = (lc_tx_test_true_strict(lc_raw_test_rma_buf[0])) ? + otp_vendor_test_ctrl_q : '0; + assign otp_vendor_test_status = (lc_tx_test_true_strict(lc_raw_test_rma_buf[1])) ? + lc_otp_vendor_test_i.status : '0; + + ////////////////// + // Alert Sender // + ////////////////// + + logic [NumAlerts-1:0] alerts; + logic [NumAlerts-1:0] alert_test; + logic [NumAlerts-1:0] tap_alert_test; + + assign alerts = { + fatal_bus_integ_error_q, + fatal_state_error_q, + fatal_prog_error_q + }; + + assign alert_test = { + reg2hw.alert_test.fatal_bus_integ_error.q & + reg2hw.alert_test.fatal_bus_integ_error.qe, + reg2hw.alert_test.fatal_state_error.q & + reg2hw.alert_test.fatal_state_error.qe, + reg2hw.alert_test.fatal_prog_error.q & + reg2hw.alert_test.fatal_prog_error.qe + }; + + assign tap_alert_test = { + tap_reg2hw.alert_test.fatal_bus_integ_error.q & + tap_reg2hw.alert_test.fatal_bus_integ_error.qe, + tap_reg2hw.alert_test.fatal_state_error.q & + tap_reg2hw.alert_test.fatal_state_error.qe, + tap_reg2hw.alert_test.fatal_prog_error.q & + tap_reg2hw.alert_test.fatal_prog_error.qe + }; + + for (genvar k = 0; k < NumAlerts; k++) begin : gen_alert_tx + caliptra_prim_alert_sender #( + .AsyncOn(AlertAsyncOn[k]), + .IsFatal(1) + ) u_prim_alert_sender ( + .clk_i, + .rst_ni, + .alert_test_i ( alert_test[k] | + tap_alert_test[k] ), + .alert_req_i ( alerts[k] ), + .alert_ack_o ( ), + .alert_state_o ( ), + .alert_rx_i ( alert_rx_i[k] ), + .alert_tx_o ( alert_tx_o[k] ) + ); + end + + ////////////////////////// + // Escalation Receivers // + ////////////////////////// + + // SEC_CM: MAIN.FSM.GLOBAL_ESC + // We still have two escalation receivers here for historical reasons. + // The two actions "wipe secrets" and "scrap lifecycle state" have been + // combined in order to simplify both DV and the design, as otherwise + // this separation of very intertwined actions would have caused too many + // unnecessary corner cases. The escalation receivers are now redundant and + // trigger both actions at once. + + // This escalation action moves the life cycle + // state into a temporary "SCRAP" state named "ESCALATE", + // and asserts the lc_escalate_en life cycle control signal. + logic esc_scrap_state0; + caliptra_prim_esc_receiver #( + .N_ESC_SEV (alert_handler_reg_pkg::N_ESC_SEV), + .PING_CNT_DW (alert_handler_reg_pkg::PING_CNT_DW) + ) u_prim_esc_receiver0 ( + .clk_i, + .rst_ni, + .esc_req_o (esc_scrap_state0), + .esc_rx_o (esc_scrap_state0_rx_o), + .esc_tx_i (esc_scrap_state0_tx_i) + ); + + // This escalation action moves the life cycle + // state into a temporary "SCRAP" state named "ESCALATE". + logic esc_scrap_state1; + caliptra_prim_esc_receiver #( + .N_ESC_SEV (alert_handler_reg_pkg::N_ESC_SEV), + .PING_CNT_DW (alert_handler_reg_pkg::PING_CNT_DW) + ) u_prim_esc_receiver1 ( + .clk_i, + .rst_ni, + .esc_req_o (esc_scrap_state1), + .esc_rx_o (esc_scrap_state1_rx_o), + .esc_tx_i (esc_scrap_state1_tx_i) + ); + + //////////////////////////// + // Synchronization of IOs // + //////////////////////////// + + // Signals going to and coming from power manager. + logic lc_init; + caliptra_prim_flop_2sync #( + .Width(1) + ) u_prim_flop_2sync_init ( + .clk_i, + .rst_ni, + .d_i(pwr_lc_i.lc_init), + .q_o(lc_init) + ); + + logic lc_done_q; + logic lc_idle_q; + + always_ff @(posedge clk_i or negedge rst_ni) begin : p_sync_regs + if (!rst_ni) begin + lc_done_q <= 1'b0; + lc_idle_q <= 1'b0; + end else begin + lc_done_q <= lc_done_d; + lc_idle_q <= lc_idle_d; + end + end + + assign pwr_lc_o.lc_done = lc_done_q; + assign pwr_lc_o.lc_idle = lc_idle_q; + + //////////////////// + // KMAC Interface // + //////////////////// + + logic token_hash_req, token_hash_req_chk, token_hash_ack, token_hash_err, token_if_fsm_err; + lc_token_t hashed_token; + lc_ctrl_kmac_if u_lc_ctrl_kmac_if ( + .clk_i, + .rst_ni, + .clk_kmac_i, + .rst_kmac_ni, + .kmac_data_i, + .kmac_data_o, + .transition_token_i ( transition_token_q ), + .token_hash_req_i ( token_hash_req ), + .token_hash_req_chk_i ( token_hash_req_chk ), + .token_hash_ack_o ( token_hash_ack ), + .token_hash_err_o ( token_hash_err ), + .token_if_fsm_err_o ( token_if_fsm_err ), + .hashed_token_o ( hashed_token ) + ); + + //////////// + // LC FSM // + //////////// + + lc_ctrl_fsm #( + .RndCnstLcKeymgrDivInvalid ( RndCnstLcKeymgrDivInvalid ), + .RndCnstLcKeymgrDivTestUnlocked( RndCnstLcKeymgrDivTestUnlocked ), + .RndCnstLcKeymgrDivDev ( RndCnstLcKeymgrDivDev ), + .RndCnstLcKeymgrDivProduction ( RndCnstLcKeymgrDivProduction ), + .RndCnstLcKeymgrDivRma ( RndCnstLcKeymgrDivRma ), + .RndCnstInvalidTokens ( RndCnstInvalidTokens ), + .SecVolatileRawUnlockEn ( SecVolatileRawUnlockEn ) + ) u_lc_ctrl_fsm ( + .clk_i, + .rst_ni, + .init_req_i ( lc_init ), + .init_done_o ( lc_done_d ), + .idle_o ( lc_idle_d ), + .esc_scrap_state0_i ( esc_scrap_state0 ), + .esc_scrap_state1_i ( esc_scrap_state1 ), + .lc_state_valid_i ( otp_lc_data_i.valid ), + .lc_state_i ( lc_state_e'(otp_lc_data_i.state) ), + .secrets_valid_i ( otp_lc_data_i.secrets_valid ), + .lc_cnt_i ( lc_cnt_e'(otp_lc_data_i.count) ), + .use_ext_clock_i ( use_ext_clock_q ), + .ext_clock_switched_o ( ext_clock_switched ), + .volatile_raw_unlock_i ( volatile_raw_unlock_q ), + .strap_en_override_o, + .test_unlock_token_i ( otp_lc_data_i.test_unlock_token ), + .test_exit_token_i ( otp_lc_data_i.test_exit_token ), + .test_tokens_valid_i ( otp_lc_data_i.test_tokens_valid ), + .rma_token_i ( otp_lc_data_i.rma_token ), + .rma_token_valid_i ( otp_lc_data_i.rma_token_valid ), + .trans_cmd_i ( transition_cmd ), + .trans_target_i ( transition_target_q ), + .dec_lc_state_o ( dec_lc_state ), + .dec_lc_cnt_o ( dec_lc_cnt ), + .dec_lc_id_state_o ( dec_lc_id_state ), + .token_hash_req_o ( token_hash_req ), + .token_hash_req_chk_o ( token_hash_req_chk ), + .token_hash_ack_i ( token_hash_ack ), + .token_hash_err_i ( token_hash_err ), + .token_if_fsm_err_i ( token_if_fsm_err ), + .hashed_token_i ( hashed_token ), + .unhashed_token_i ( transition_token_q ), + .otp_prog_req_o ( lc_otp_program_o.req ), + .otp_prog_lc_state_o ( lc_otp_program_o.state ), + .otp_prog_lc_cnt_o ( lc_otp_program_o.count ), + .otp_prog_ack_i ( lc_otp_program_i.ack ), + .otp_prog_err_i ( lc_otp_program_i.err ), + .trans_success_o ( trans_success_d ), + .trans_cnt_oflw_error_o ( trans_cnt_oflw_error_d ), + .trans_invalid_error_o ( trans_invalid_error_d ), + .token_invalid_error_o ( token_invalid_error_d ), + .flash_rma_error_o ( flash_rma_error_d ), + .otp_prog_error_o ( otp_prog_error_d ), + .state_invalid_error_o ( state_invalid_error_d ), + .lc_raw_test_rma_o ( lc_raw_test_rma ), + .lc_dft_en_o, + .lc_nvm_debug_en_o, + .lc_hw_debug_en_o, + .lc_cpu_en_o, + .lc_creator_seed_sw_rw_en_o, + .lc_owner_seed_sw_rw_en_o, + .lc_iso_part_sw_rd_en_o, + .lc_iso_part_sw_wr_en_o, + .lc_seed_hw_rd_en_o, + .lc_keymgr_en_o, + .lc_escalate_en_o, + .lc_check_byp_en_o, + .lc_clk_byp_req_o, + .lc_clk_byp_ack_i, + .lc_flash_rma_req_o, + .lc_flash_rma_ack_i, + .lc_keymgr_div_o + ); + + //////////////// + // Assertions // + //////////////// + + `CALIPTRA_ASSERT_KNOWN(TlOKnown, tl_o ) + `CALIPTRA_ASSERT_KNOWN(AlertTxKnown_A, alert_tx_o ) + `CALIPTRA_ASSERT_KNOWN(PwrLcKnown_A, pwr_lc_o ) + `CALIPTRA_ASSERT_KNOWN(LcOtpProgramKnown_A, lc_otp_program_o ) + `CALIPTRA_ASSERT_KNOWN(LcOtpTokenKnown_A, kmac_data_o ) + `CALIPTRA_ASSERT_KNOWN(LcDftEnKnown_A, lc_dft_en_o ) + `CALIPTRA_ASSERT_KNOWN(LcNvmDebugEnKnown_A, lc_nvm_debug_en_o ) + `CALIPTRA_ASSERT_KNOWN(LcHwDebugEnKnown_A, lc_hw_debug_en_o ) + `CALIPTRA_ASSERT_KNOWN(LcCpuEnKnown_A, lc_cpu_en_o ) + `CALIPTRA_ASSERT_KNOWN(LcCreatorSwRwEn_A, lc_creator_seed_sw_rw_en_o ) + `CALIPTRA_ASSERT_KNOWN(LcOwnerSwRwEn_A, lc_owner_seed_sw_rw_en_o ) + `CALIPTRA_ASSERT_KNOWN(LcIsoSwRwEn_A, lc_iso_part_sw_rd_en_o ) + `CALIPTRA_ASSERT_KNOWN(LcIsoSwWrEn_A, lc_iso_part_sw_wr_en_o ) + `CALIPTRA_ASSERT_KNOWN(LcSeedHwRdEn_A, lc_seed_hw_rd_en_o ) + `CALIPTRA_ASSERT_KNOWN(LcKeymgrEnKnown_A, lc_keymgr_en_o ) + `CALIPTRA_ASSERT_KNOWN(LcEscalateEnKnown_A, lc_escalate_en_o ) + `CALIPTRA_ASSERT_KNOWN(LcCheckBypassEnKnown_A, lc_check_byp_en_o ) + `CALIPTRA_ASSERT_KNOWN(LcClkBypReqKnown_A, lc_clk_byp_req_o ) + `CALIPTRA_ASSERT_KNOWN(LcFlashRmaSeedKnown_A, lc_flash_rma_seed_o ) + `CALIPTRA_ASSERT_KNOWN(LcFlashRmaReqKnown_A, lc_flash_rma_req_o ) + `CALIPTRA_ASSERT_KNOWN(LcKeymgrDiv_A, lc_keymgr_div_o ) + + // Alert assertions for sparse FSMs. + `CALIPTRA_ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlLcFsmCheck_A, + u_lc_ctrl_fsm.u_fsm_state_regs, alert_tx_o[1]) + `CALIPTRA_ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlLcStateCheck_A, + u_lc_ctrl_fsm.u_state_regs, alert_tx_o[1], + !$past(otp_lc_data_i.valid) || + u_lc_ctrl_fsm.fsm_state_q inside {ResetSt, EscalateSt, PostTransSt, InvalidSt, ScrapSt} || + u_lc_ctrl_fsm.esc_scrap_state0_i || + u_lc_ctrl_fsm.esc_scrap_state1_i) + `CALIPTRA_ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlLcCntCheck_A, + u_lc_ctrl_fsm.u_cnt_regs, alert_tx_o[1], + !$past(otp_lc_data_i.valid) || + u_lc_ctrl_fsm.fsm_state_q inside {ResetSt, EscalateSt, PostTransSt, InvalidSt, ScrapSt} || + u_lc_ctrl_fsm.esc_scrap_state0_i || + u_lc_ctrl_fsm.esc_scrap_state1_i) + `CALIPTRA_ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT(CtrlKmacIfFsmCheck_A, + u_lc_ctrl_kmac_if.u_state_regs, alert_tx_o[1], + u_lc_ctrl_fsm.fsm_state_q inside {EscalateSt} || + u_lc_ctrl_fsm.esc_scrap_state0_i || + u_lc_ctrl_fsm.esc_scrap_state1_i) + + // Alert assertions for reg_we onehot check + `CALIPTRA_ASSERT_PRIM_REG_WE_ONEHOT_ERROR_TRIGGER_ALERT(RegWeOnehotCheck_A, u_reg, alert_tx_o[2]) + `CALIPTRA_ASSERT_PRIM_REG_WE_ONEHOT_ERROR_TRIGGER_ALERT(TapRegWeOnehotCheck_A, u_reg_tap, alert_tx_o[2], 0) +endmodule : lc_ctrl diff --git a/src/lc_ctrl/rtl/lc_ctrl_fsm.sv b/src/lc_ctrl/rtl/lc_ctrl_fsm.sv new file mode 100644 index 000000000..d988a394c --- /dev/null +++ b/src/lc_ctrl/rtl/lc_ctrl_fsm.sv @@ -0,0 +1,884 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Main Life Cycle Controller FSM. + +`include "caliptra_prim_assert.sv" + +module lc_ctrl_fsm + import lc_ctrl_pkg::*; + import lc_ctrl_reg_pkg::*; + import lc_ctrl_state_pkg::*; +#(// Random netlist constants + parameter lc_keymgr_div_t RndCnstLcKeymgrDivInvalid = LcKeymgrDivWidth'(0), + parameter lc_keymgr_div_t RndCnstLcKeymgrDivTestUnlocked = LcKeymgrDivWidth'(1), + parameter lc_keymgr_div_t RndCnstLcKeymgrDivDev = LcKeymgrDivWidth'(2), + parameter lc_keymgr_div_t RndCnstLcKeymgrDivProduction = LcKeymgrDivWidth'(3), + parameter lc_keymgr_div_t RndCnstLcKeymgrDivRma = LcKeymgrDivWidth'(4), + parameter lc_token_mux_t RndCnstInvalidTokens = {TokenMuxBits{1'b1}}, + parameter bit SecVolatileRawUnlockEn = 0 +) ( + // This module is combinational, but we + // need the clock and reset for the assertions. + input clk_i, + input rst_ni, + // Initialization request from power manager. + input init_req_i, + output logic init_done_o, + output logic idle_o, + // Escalation input + input esc_scrap_state0_i, + input esc_scrap_state1_i, + // Life cycle state vector from OTP. + input lc_state_valid_i, + input lc_state_e lc_state_i, + input lc_cnt_e lc_cnt_i, + input lc_tx_t secrets_valid_i, + // Defines whether we switch to an external clock when initiating a transition. + input use_ext_clock_i, + output logic ext_clock_switched_o, + // ---------- VOLATILE_TEST_UNLOCKED CODE SECTION START ---------- + // NOTE THAT THIS IS A FEATURE FOR TEST CHIPS ONLY TO MITIGATE + // THE RISK OF A BROKEN OTP MACRO. THIS WILL BE DISABLED VIA + // SecVolatileRawUnlockEn AT COMPILETIME FOR PRODUCTION DEVICES. + // --------------------------------------------------------------- + input logic volatile_raw_unlock_i, + output logic strap_en_override_o, + // ----------- VOLATILE_TEST_UNLOCKED CODE SECTION END ----------- + // Token input from OTP (these are all hash post-images). + input lc_token_t test_unlock_token_i, + input lc_token_t test_exit_token_i, + input lc_tx_t test_tokens_valid_i, + input lc_token_t rma_token_i, + input lc_tx_t rma_token_valid_i, + // Transition trigger interface. + input trans_cmd_i, + input ext_dec_lc_state_t trans_target_i, + // Decoded life cycle state for CSRs. + output ext_dec_lc_state_t dec_lc_state_o, + output dec_lc_cnt_t dec_lc_cnt_o, + output dec_lc_id_state_e dec_lc_id_state_o, + // Token hashing interface + output logic token_hash_req_o, + output logic token_hash_req_chk_o, + input token_hash_ack_i, + input token_hash_err_i, + input token_if_fsm_err_i, + input lc_token_t hashed_token_i, + input lc_token_t unhashed_token_i, + // OTP programming interface + output logic otp_prog_req_o, + output lc_state_e otp_prog_lc_state_o, + output lc_cnt_e otp_prog_lc_cnt_o, + input otp_prog_ack_i, + input otp_prog_err_i, + // Error outputs going to CSRs + output logic trans_success_o, + output logic trans_cnt_oflw_error_o, + output logic trans_invalid_error_o, + output logic token_invalid_error_o, + output logic flash_rma_error_o, + output logic otp_prog_error_o, + output logic state_invalid_error_o, + // Local life cycle signal + output lc_tx_t lc_raw_test_rma_o, + // Life cycle broadcast outputs. + output lc_tx_t lc_dft_en_o, + output lc_tx_t lc_nvm_debug_en_o, + output lc_tx_t lc_hw_debug_en_o, + output lc_tx_t lc_cpu_en_o, + output lc_tx_t lc_creator_seed_sw_rw_en_o, + output lc_tx_t lc_owner_seed_sw_rw_en_o, + output lc_tx_t lc_iso_part_sw_rd_en_o, + output lc_tx_t lc_iso_part_sw_wr_en_o, + output lc_tx_t lc_seed_hw_rd_en_o, + output lc_tx_t lc_keymgr_en_o, + output lc_tx_t lc_escalate_en_o, + output lc_tx_t lc_check_byp_en_o, + // Request and feedback to/from clock manager and AST. + output lc_tx_t lc_clk_byp_req_o, + input lc_tx_t lc_clk_byp_ack_i, + // Request and feedback to/from flash controller + output lc_tx_t lc_flash_rma_req_o, + input lc_tx_t [NumRmaAckSigs-1:0] lc_flash_rma_ack_i, + // State group diversification value for keymgr + output lc_keymgr_div_t lc_keymgr_div_o +); + + ///////////////////////////// + // Synchronizers / Buffers // + ///////////////////////////// + + // We use multiple copies of these signals in the + // FSM checks below. + lc_tx_t [3:0] lc_clk_byp_ack; + caliptra_prim_lc_sync #( + .NumCopies(4) + ) u_caliptra_prim_lc_sync_clk_byp_ack ( + .clk_i, + .rst_ni, + .lc_en_i(lc_clk_byp_ack_i), + .lc_en_o(lc_clk_byp_ack) + ); + + // Indication for CSRs + assign ext_clock_switched_o = lc_tx_test_true_strict(lc_clk_byp_ack[3]); + + // We have multiple response channels for this signal since the RMA wiping requests can go to + // multiple modules that perform wiping in parallel. For security reasons, this signal is not + // daisy-chained - see #19136 for context. Synchronize ACK signals separately, combine with + // bitwise LC AND function and feed into FSM. + lc_tx_t [NumRmaAckSigs-1:0] lc_flash_rma_ack; + for (genvar k = 0; k < NumRmaAckSigs; k++) begin : gen_syncs + caliptra_prim_lc_sync #( + .NumCopies(1) + ) u_caliptra_prim_lc_sync_flash_rma_ack( + .clk_i, + .rst_ni, + .lc_en_i(lc_flash_rma_ack_i[k]), + .lc_en_o({lc_flash_rma_ack[k]}) + ); + end + + lc_tx_t lc_flash_rma_ack_combined; + always_comb begin + lc_flash_rma_ack_combined = On; + for (int k = 0; k < NumRmaAckSigs; k++) begin + lc_flash_rma_ack_combined = lc_tx_and_hi(lc_flash_rma_ack_combined, lc_flash_rma_ack[k]); + end + end + + // Make buffered copies for consumption in the FSM below. + lc_tx_t [2:0] lc_flash_rma_ack_buf; + caliptra_prim_lc_sync #( + .NumCopies(3), + .AsyncOn(0) + ) u_caliptra_prim_lc_sync_flash_rma_ack_buf ( + .clk_i, + .rst_ni, + .lc_en_i(lc_flash_rma_ack_combined), + .lc_en_o(lc_flash_rma_ack_buf) + ); + + /////////////// + // FSM Logic // + /////////////// + fsm_state_e fsm_state_d, fsm_state_q; + + // Continuously feed in valid signal for LC state. + logic lc_state_valid_d, lc_state_valid_q; + assign lc_state_valid_d = lc_state_valid_i; + + // Encoded state vector. + lc_state_e lc_state_d, lc_state_q, next_lc_state; + lc_cnt_e lc_cnt_d, lc_cnt_q, next_lc_cnt; + + // Feed the next lc state reg back to the programming interface of OTP. + assign otp_prog_lc_state_o = next_lc_state; + assign otp_prog_lc_cnt_o = next_lc_cnt; + + // Conditional LC signal outputs + lc_tx_t lc_clk_byp_req, lc_flash_rma_req, lc_check_byp_en; + + `CALIPTRA_ASSERT_KNOWN(LcStateKnown_A, lc_state_q ) + `CALIPTRA_ASSERT_KNOWN(LcCntKnown_A, lc_cnt_q ) + `CALIPTRA_ASSERT_KNOWN(FsmStateKnown_A, fsm_state_q ) + + // Hashed token to compare against. + logic [1:0] hashed_token_valid_mux; + lc_token_t hashed_token_mux; + + // Multibit state error from state decoder + logic [5:0] state_invalid_error; + + // Strap sample override signal. + logic set_strap_en_override; + + // Registers whether volatile unlock has been successful + caliptra_prim_mubi_pkg::mubi8_t volatile_raw_unlock_success_d, volatile_raw_unlock_success_q; + + // SEC_CM: MAIN.CTRL_FLOW.CONSISTENCY + always_comb begin : p_fsm + // FSM default state assignments. + fsm_state_d = fsm_state_q; + lc_state_d = lc_state_q; + lc_cnt_d = lc_cnt_q; + + // Token hashing. + token_hash_req_o = 1'b0; + token_hash_req_chk_o = 1'b1; + + // OTP Interface + otp_prog_req_o = 1'b0; + + // Defaults for status/error signals. + token_invalid_error_o = 1'b0; + otp_prog_error_o = 1'b0; + flash_rma_error_o = 1'b0; + trans_success_o = 1'b0; + state_invalid_error_o = 1'b0; + + // Status indication going to power manager. + init_done_o = 1'b1; + idle_o = 1'b0; + + // ---------- VOLATILE_TEST_UNLOCKED CODE SECTION START ---------- + // NOTE THAT THIS IS A FEATURE FOR TEST CHIPS ONLY TO MITIGATE + // THE RISK OF A BROKEN OTP MACRO. THIS WILL BE DISABLED VIA + // SecVolatileRawUnlockEn AT COMPILETIME FOR PRODUCTION DEVICES. + // --------------------------------------------------------------- + set_strap_en_override = 1'b0; + volatile_raw_unlock_success_d = volatile_raw_unlock_success_q; + // ----------- VOLATILE_TEST_UNLOCKED CODE SECTION END ----------- + + // These signals remain asserted once set to On. + // Note that the remaining life cycle signals are decoded in + // the lc_ctrl_signal_decode submodule. + lc_clk_byp_req = lc_clk_byp_req_o; + lc_flash_rma_req = lc_flash_rma_req_o; + lc_check_byp_en = lc_check_byp_en_o; + + unique case (fsm_state_q) + /////////////////////////////////////////////////////////////////// + // Wait here until OTP has initialized and the + // power manager sends an initialization request. + ResetSt: begin + init_done_o = 1'b0; + lc_clk_byp_req = Off; + lc_flash_rma_req = Off; + lc_check_byp_en = Off; + if (init_req_i && lc_state_valid_q) begin + fsm_state_d = IdleSt; + // Fetch LC state vector from OTP. + lc_state_d = lc_state_i; + lc_cnt_d = lc_cnt_i; + end + end + /////////////////////////////////////////////////////////////////// + // Idle state where life cycle control signals are broadcast. + // Note that the life cycle signals are decoded and broadcast + // in the lc_ctrl_signal_decode submodule. + IdleSt: begin + idle_o = 1'b1; + + // ---------- VOLATILE_TEST_UNLOCKED CODE SECTION START ---------- + // NOTE THAT THIS IS A FEATURE FOR TEST CHIPS ONLY TO MITIGATE + // THE RISK OF A BROKEN OTP MACRO. THIS WILL BE DISABLED VIA + // SecVolatileRawUnlockEn AT COMPILETIME FOR PRODUCTION DEVICES. + // --------------------------------------------------------------- + // Note that if the volatile unlock mechanism is available, + // we have to stop fetching the OTP value after a volatile unlock has succeeded. + // Otherwise we unconditionally fetch from OTP in this state. + if (!(SecVolatileRawUnlockEn && lc_state_q == LcStTestUnlocked0 && lc_cnt_q != LcCnt0) || + caliptra_prim_mubi_pkg::mubi8_test_false_loose(volatile_raw_unlock_success_q)) begin + // Continuously fetch LC state vector from OTP. + // The state is locked in once a transition is started. + lc_state_d = lc_state_i; + lc_cnt_d = lc_cnt_i; + end + // ----------- VOLATILE_TEST_UNLOCKED CODE SECTION END ----------- + + // If the life cycle state is SCRAP, we move the FSM into a terminal + // SCRAP state that does not allow any transitions to be initiated anymore. + if (lc_state_q == LcStScrap) begin + fsm_state_d = ScrapSt; + + // ---------- VOLATILE_TEST_UNLOCKED CODE SECTION START ---------- + // NOTE THAT THIS IS A FEATURE FOR TEST CHIPS ONLY TO MITIGATE + // THE RISK OF A BROKEN OTP MACRO. THIS WILL BE DISABLED VIA + // SecVolatileRawUnlockEn AT COMPILETIME FOR PRODUCTION DEVICES. + // --------------------------------------------------------------- + // Only enter here if volatile RAW unlock is available and enabled. + end else if (SecVolatileRawUnlockEn && volatile_raw_unlock_i && trans_cmd_i) begin + // We only allow transitions from RAW -> TEST_UNLOCKED0 + if (lc_state_q == LcStRaw && + trans_target_i == {DecLcStateNumRep{DecLcStTestUnlocked0}} && + !trans_invalid_error_o) begin + // 128bit token check (without passing it through the KMAC) + if (unhashed_token_i == RndCnstRawUnlockTokenHashed) begin + // We stay in Idle, but update the life cycle state register (volatile). + lc_state_d = LcStTestUnlocked0; + // If the count is 0, we set it to 1 - otherwise we just leave it as is so that the + // register value is in sync with what has been programmed to OTP already (there may + // have been unsuccessul raw unlock attempts before that already incremented it). + lc_cnt_d = (lc_cnt_q == LcCnt0) ? LcCnt1 : lc_cnt_q; + // Re-sample the DFT straps in the pinmux. + // This signal will be delayed by several cycles so that the LC_CTRL signals + // have time to propagate. + set_strap_en_override = 1'b1; + // We have to remember that the transition was successful in order to correctly + // disable the continuos sampling of the life cycle state vector coming from OTP. + volatile_raw_unlock_success_d = caliptra_prim_mubi_pkg::MuBi8True; + // Indicate that the transition was successful. + trans_success_o = 1'b1; + end else begin + token_invalid_error_o = 1'b1; + fsm_state_d = PostTransSt; + end + end else begin + // Transition invalid error is set by lc_ctrl_state_transition module. + fsm_state_d = PostTransSt; + end + // ----------- VOLATILE_TEST_UNLOCKED CODE SECTION END ----------- + // Initiate a transition. This will first increment the + // life cycle counter before hashing and checking the token. + end else if (trans_cmd_i) begin + fsm_state_d = ClkMuxSt; + end + // If we are in a non-PROD life cycle state, steer the clock mux if requested. This + // action is available in IdleSt so that the mux can be steered without having to initiate + // a life cycle transition. If a transition is initiated however, the life cycle controller + // will wait for the clock mux acknowledgement in the ClkMuxSt state before proceeding. + if (lc_state_q inside {LcStRaw, + LcStTestLocked0, + LcStTestLocked1, + LcStTestLocked2, + LcStTestLocked3, + LcStTestLocked4, + LcStTestLocked5, + LcStTestLocked6, + LcStTestUnlocked0, + LcStTestUnlocked1, + LcStTestUnlocked2, + LcStTestUnlocked3, + LcStTestUnlocked4, + LcStTestUnlocked5, + LcStTestUnlocked6, + LcStTestUnlocked7, + LcStRma}) begin + if (use_ext_clock_i) begin + lc_clk_byp_req = On; + end + end + end + /////////////////////////////////////////////////////////////////// + // Clock mux state. If we are in RAW, TEST* or RMA, it is permissible + // to switch to an external clock source. If the bypass request is + // asserted, we have to wait until the clock mux and clock manager + // have switched the mux and the clock divider. Also, we disable the + // life cycle partition checks at this point since we are going to + // alter the contents in the OTP memory array, which could lead to + // spurious escalations. + ClkMuxSt: begin + lc_check_byp_en = On; + if (lc_state_q inside {LcStRaw, + LcStTestLocked0, + LcStTestLocked1, + LcStTestLocked2, + LcStTestLocked3, + LcStTestLocked4, + LcStTestLocked5, + LcStTestLocked6, + LcStTestUnlocked0, + LcStTestUnlocked1, + LcStTestUnlocked2, + LcStTestUnlocked3, + LcStTestUnlocked4, + LcStTestUnlocked5, + LcStTestUnlocked6, + LcStTestUnlocked7, + LcStRma}) begin + if (use_ext_clock_i) begin + lc_clk_byp_req = On; + if (lc_tx_test_true_strict(lc_clk_byp_ack[0])) begin + fsm_state_d = CntIncrSt; + end + end else begin + fsm_state_d = CntIncrSt; + end + end else begin + fsm_state_d = CntIncrSt; + end + end + /////////////////////////////////////////////////////////////////// + // This increments the life cycle counter state. + CntIncrSt: begin + // If the counter has reached the maximum, bail out. + if (trans_cnt_oflw_error_o) begin + fsm_state_d = PostTransSt; + end else begin + fsm_state_d = CntProgSt; + end + end + /////////////////////////////////////////////////////////////////// + // This programs the life cycle counter state. + CntProgSt: begin + otp_prog_req_o = 1'b1; + + // If the clock mux has been steered, double check that this is still the case. + // Otherwise abort the transition operation. + if (lc_clk_byp_req_o != lc_clk_byp_ack[1]) begin + fsm_state_d = PostTransSt; + otp_prog_error_o = 1'b1; + end + + // Check return value and abort if there + // was an error. + if (otp_prog_ack_i) begin + if (otp_prog_err_i) begin + fsm_state_d = PostTransSt; + otp_prog_error_o = 1'b1; + end else begin + fsm_state_d = TransCheckSt; + end + end + end + /////////////////////////////////////////////////////////////////// + // First transition valid check. This will be repeated several + // times below. + TransCheckSt: begin + if (trans_invalid_error_o) begin + fsm_state_d = PostTransSt; + end else begin + fsm_state_d = TokenHashSt; + end + end + /////////////////////////////////////////////////////////////////// + // Hash and compare the token, no matter whether this transition + // is conditional or not. Unconditional transitions just use a known + // all-zero token value. That way, we always compare a hashed token + // and guarantee that no other control flow path exists that could + // bypass the token check. + // SEC_CM: TOKEN.DIGEST + TokenHashSt: begin + token_hash_req_o = 1'b1; + if (token_hash_ack_i) begin + // This is the first comparison. + // The token is compared two more times further below. + // Also note that conditional transitions won't be possible if the + // corresponding token is not valid. This only applies to tokens stored in + // OTP. I.e., these tokens first have to be provisioned, before they can be used. + if (hashed_token_i == hashed_token_mux && + !token_hash_err_i && + &hashed_token_valid_mux) begin + fsm_state_d = FlashRmaSt; + end else begin + fsm_state_d = PostTransSt; + token_invalid_error_o = 1'b1; + end + end + end + /////////////////////////////////////////////////////////////////// + // Flash RMA state. Note that we check the flash response again + // two times later below. + FlashRmaSt: begin + if (trans_target_i == {DecLcStateNumRep{DecLcStRma}}) begin + lc_flash_rma_req = On; + if (lc_tx_test_true_strict(lc_flash_rma_ack_buf[0])) begin + fsm_state_d = TokenCheck0St; + end + end else begin + fsm_state_d = TokenCheck0St; + end + end + /////////////////////////////////////////////////////////////////// + // Check again two times whether this transition and the hashed + // token are valid. Also check again whether the flash RMA + // response is valid. + // SEC_CM: TOKEN.DIGEST + TokenCheck0St, + TokenCheck1St: begin + if (trans_invalid_error_o) begin + fsm_state_d = PostTransSt; + end else begin + // If any of these RMA are conditions are true, + // all of them must be true at the same time. + if ((trans_target_i != {DecLcStateNumRep{DecLcStRma}} && + lc_tx_test_false_strict(lc_flash_rma_req_o) && + lc_tx_test_false_strict(lc_flash_rma_ack_buf[1])) || + (trans_target_i == {DecLcStateNumRep{DecLcStRma}} && + lc_tx_test_true_strict(lc_flash_rma_req_o) && + lc_tx_test_true_strict(lc_flash_rma_ack_buf[1]))) begin + if (hashed_token_i == hashed_token_mux && + !token_hash_err_i && + &hashed_token_valid_mux) begin + if (fsm_state_q == TokenCheck1St) begin + // This is the only way we can get into the + // programming state. + fsm_state_d = TransProgSt; + end else begin + fsm_state_d = TokenCheck1St; + end + end else begin + fsm_state_d = PostTransSt; + token_invalid_error_o = 1'b1; + end + // The flash RMA process failed. + end else begin + fsm_state_d = PostTransSt; + flash_rma_error_o = 1'b1; + end + end + end + /////////////////////////////////////////////////////////////////// + // Initiate OTP transaction. Note that the concurrent + // LC state check is continuously checking whether the + // new LC state remains valid. Once the ack returns we are + // done with the transition and can go into the terminal PosTransSt. + TransProgSt: begin + otp_prog_req_o = 1'b1; + + // If the clock mux has been steered, double check that this is still the case. + // Otherwise abort the transition operation. + if (lc_clk_byp_req_o != lc_clk_byp_ack[2]) begin + fsm_state_d = PostTransSt; + otp_prog_error_o = 1'b1; + // Also double check that the RMA signals remain stable. + // Otherwise abort the transition operation. + end else if ((trans_target_i != {DecLcStateNumRep{DecLcStRma}} && + (lc_flash_rma_req_o != Off || lc_flash_rma_ack_buf[2] != Off)) || + (trans_target_i == {DecLcStateNumRep{DecLcStRma}} && + (lc_flash_rma_req_o != On || lc_flash_rma_ack_buf[2] != On))) begin + fsm_state_d = PostTransSt; + flash_rma_error_o = 1'b1; + end else if (otp_prog_ack_i) begin + fsm_state_d = PostTransSt; + otp_prog_error_o = otp_prog_err_i; + trans_success_o = ~otp_prog_err_i; + end + end + /////////////////////////////////////////////////////////////////// + // Terminal states. + ScrapSt, + PostTransSt: ; + + + EscalateSt: begin + // During an escalation it is okay to de-assert token_hash_req without receivng ACK. + token_hash_req_chk_o = 1'b0; + end + + InvalidSt: begin + // During an escalation it is okay to de-assert token_hash_req without receivng ACK. + token_hash_req_chk_o = 1'b0; + state_invalid_error_o = 1'b1; + end + /////////////////////////////////////////////////////////////////// + // Go to terminal error state if we get here. + default: begin + fsm_state_d = InvalidSt; + state_invalid_error_o = 1'b1; + end + /////////////////////////////////////////////////////////////////// + endcase + + // SEC_CM: MAIN.FSM.GLOBAL_ESC + if (esc_scrap_state0_i || esc_scrap_state1_i) begin + fsm_state_d = EscalateSt; + // SEC_CM: MAIN.FSM.LOCAL_ESC + // If at any time the life cycle state encoding or any other FSM state within this module + // is not valid, we jump into the terminal error state right away. + // Note that state_invalid_error is a multibit error signal + // with different error sources - need to reduce this to one bit here. + end else if ((|state_invalid_error | token_if_fsm_err_i) && (fsm_state_q != EscalateSt)) begin + fsm_state_d = InvalidSt; + state_invalid_error_o = 1'b1; + end + end + + ///////////////// + // State Flops // + ///////////////// + + `CALIPTRA_PRIM_FLOP_SPARSE_FSM(u_fsm_state_regs, fsm_state_d, fsm_state_q, fsm_state_e, ResetSt) + `CALIPTRA_PRIM_FLOP_SPARSE_FSM(u_state_regs, lc_state_d, lc_state_q, lc_state_e, LcStScrap) + `CALIPTRA_PRIM_FLOP_SPARSE_FSM(u_cnt_regs, lc_cnt_d, lc_cnt_q, lc_cnt_e, LcCnt24) + + always_ff @(posedge clk_i or negedge rst_ni) begin : p_regs + if (!rst_ni) begin + lc_state_valid_q <= 1'b0; + end else begin + lc_state_valid_q <= lc_state_valid_d; + end + end + + // ---------- VOLATILE_TEST_UNLOCKED CODE SECTION START ---------- + // NOTE THAT THIS IS A FEATURE FOR TEST CHIPS ONLY TO MITIGATE + // THE RISK OF A BROKEN OTP MACRO. THIS WILL BE DISABLED VIA + // SecVolatileRawUnlockEn AT COMPILETIME FOR PRODUCTION DEVICES. + // --------------------------------------------------------------- + if (SecVolatileRawUnlockEn) begin : gen_strap_delay_regs + // The delay on the life cycle signals is 1 sender + 2 receiver domain + // cycles. We are delaying this cycle several cycles more than that so + // that the life cycle signals have time to propagate (for good measure). + localparam int NumStrapDelayRegs = 10; + logic [NumStrapDelayRegs-1:0] strap_en_override_q; + always_ff @(posedge clk_i or negedge rst_ni) begin : p_volatile_raw_unlock_reg + if(!rst_ni) begin + strap_en_override_q <= '0; + volatile_raw_unlock_success_q <= caliptra_prim_mubi_pkg::MuBi8False; + end else begin + strap_en_override_q <= {strap_en_override_q[NumStrapDelayRegs-2:0], + // This is a set-reg that will stay high until the next reset. + set_strap_en_override || strap_en_override_q[0]}; + volatile_raw_unlock_success_q <= volatile_raw_unlock_success_d; + end + end + + assign strap_en_override_o = strap_en_override_q[NumStrapDelayRegs-1]; + end else begin : gen_no_strap_delay_regs + // In this case we tie the strap sampling off. + logic unused_sigs; + assign unused_sigs = ^{set_strap_en_override, + volatile_raw_unlock_success_d}; + assign strap_en_override_o = 1'b0; + assign volatile_raw_unlock_success_q = caliptra_prim_mubi_pkg::MuBi8False; + end + // ----------- VOLATILE_TEST_UNLOCKED CODE SECTION END ----------- + + /////////////// + // Token mux // + /////////////// + + lc_ctrl_pkg::lc_tx_t [3:0] rma_token_valid; + caliptra_prim_lc_sync #( + .NumCopies(4), + .AsyncOn(0), + .ResetValueIsOn(0) + ) u_caliptra_prim_lc_sync_rma_token_valid ( + .clk_i, + .rst_ni, + .lc_en_i(rma_token_valid_i), + .lc_en_o(rma_token_valid) + ); + + lc_ctrl_pkg::lc_tx_t [7:0] test_tokens_valid; + caliptra_prim_lc_sync #( + .NumCopies(8), + .AsyncOn(0), + .ResetValueIsOn(0) + ) u_caliptra_prim_lc_sync_test_token_valid ( + .clk_i, + .rst_ni, + .lc_en_i(test_tokens_valid_i), + .lc_en_o(test_tokens_valid) + ); + + // SEC_CM: TOKEN_MUX.CTRL.REDUN + // The token mux is split into two halves for which we use separate mux select signals + // that have both been generated from separately buffered multibit lifecycle signals. + logic [2**TokenIdxWidth-1:0][LcTokenWidth/2-1:0] hashed_tokens_lower, hashed_tokens_upper; + // These helper signals are only there to increase readability of the mux code below. + logic [LcTokenWidth/2-1:0] test_unlock_token_lower, test_unlock_token_upper; + logic [LcTokenWidth/2-1:0] test_exit_token_lower, test_exit_token_upper; + logic [LcTokenWidth/2-1:0] rma_token_lower, rma_token_upper; + assign {test_unlock_token_lower, test_unlock_token_upper} = test_unlock_token_i; + assign {test_exit_token_lower, test_exit_token_upper} = test_exit_token_i; + assign {rma_token_lower, rma_token_upper} = rma_token_i; + + // SEC_CM: TOKEN.DIGEST + // This indexes the correct token, based on the transition arc. + // Note that we always perform a token comparison, even in case of + // unconditional transitions. In the case of unconditional tokens + // we just pass an all-zero constant through the hashing function. + always_comb begin : p_token_assign + // Set the invalid token indices to a random netlist constant, rather than all-zero. + {hashed_tokens_lower, hashed_tokens_upper} = RndCnstInvalidTokens; + // All-zero token for unconditional transitions. + {hashed_tokens_lower[ZeroTokenIdx], + hashed_tokens_upper[ZeroTokenIdx]} = AllZeroTokenHashed; + {hashed_tokens_lower[RawUnlockTokenIdx], + hashed_tokens_upper[RawUnlockTokenIdx]} = RndCnstRawUnlockTokenHashed; + // This mux has two separate halves, steered with separately buffered life cycle signals. + if (lc_tx_test_true_strict(test_tokens_valid[0])) begin + hashed_tokens_lower[TestUnlockTokenIdx] = test_unlock_token_lower; + end + if (lc_tx_test_true_strict(test_tokens_valid[1])) begin + hashed_tokens_upper[TestUnlockTokenIdx] = test_unlock_token_upper; + end + // This mux has two separate halves, steered with separately buffered life cycle signals. + if (lc_tx_test_true_strict(test_tokens_valid[2])) begin + hashed_tokens_lower[TestExitTokenIdx] = test_exit_token_lower; + end + if (lc_tx_test_true_strict(test_tokens_valid[3])) begin + hashed_tokens_upper[TestExitTokenIdx] = test_exit_token_upper; + end + // This mux has two separate halves, steered with separately buffered life cycle signals. + if (lc_tx_test_true_strict(rma_token_valid[0])) begin + hashed_tokens_lower[RmaTokenIdx] = rma_token_lower; + end + if (lc_tx_test_true_strict(rma_token_valid[1])) begin + hashed_tokens_upper[RmaTokenIdx] = rma_token_upper; + end + end + + // SEC_CM: TOKEN_VALID.MUX.REDUN + // The token valid mux is duplicated. + logic [TokenIdxWidth-1:0] token_idx0, token_idx1; + logic [2**TokenIdxWidth-1:0] hashed_tokens_valid0, hashed_tokens_valid1; + always_comb begin : p_token_valid_assign + // First mux + hashed_tokens_valid0 = '0; + hashed_tokens_valid0[ZeroTokenIdx] = 1'b1; // always valid + hashed_tokens_valid0[RawUnlockTokenIdx] = 1'b1; // always valid + hashed_tokens_valid0[TestUnlockTokenIdx] = lc_tx_test_true_strict(test_tokens_valid[4]); + hashed_tokens_valid0[TestExitTokenIdx] = lc_tx_test_true_strict(test_tokens_valid[5]); + hashed_tokens_valid0[RmaTokenIdx] = lc_tx_test_true_strict(rma_token_valid[2]); + hashed_tokens_valid0[InvalidTokenIdx] = 1'b0; // always invalid + // Second mux + hashed_tokens_valid1 = '0; + hashed_tokens_valid1[ZeroTokenIdx] = 1'b1; // always valid + hashed_tokens_valid1[RawUnlockTokenIdx] = 1'b1; // always valid + hashed_tokens_valid1[TestUnlockTokenIdx] = lc_tx_test_true_strict(test_tokens_valid[6]); + hashed_tokens_valid1[TestExitTokenIdx] = lc_tx_test_true_strict(test_tokens_valid[7]); + hashed_tokens_valid1[RmaTokenIdx] = lc_tx_test_true_strict(rma_token_valid[3]); + hashed_tokens_valid1[InvalidTokenIdx] = 1'b0; // always invalid + end + + // SEC_CM: STATE.CONFIG.SPARSE + // The trans_target_i signal comes from the CSR and uses a replication encoding, + // hence we can use different indices of the array. + assign token_idx0 = (int'(dec_lc_state_o[0]) < NumLcStates && + int'(trans_target_i[0]) < NumLcStates) ? + TransTokenIdxMatrix[dec_lc_state_o[0]][trans_target_i[0]] : + InvalidTokenIdx; + assign token_idx1 = (int'(dec_lc_state_o[1]) < NumLcStates && + int'(trans_target_i[1]) < NumLcStates) ? + TransTokenIdxMatrix[dec_lc_state_o[1]][trans_target_i[1]] : + InvalidTokenIdx; + assign hashed_token_mux = {hashed_tokens_lower[token_idx0], + hashed_tokens_upper[token_idx1]}; + assign hashed_token_valid_mux = {hashed_tokens_valid0[token_idx0], + hashed_tokens_valid1[token_idx1]}; + + // If the indices are inconsistent, we also trigger a transition error. + // We do not trigger an alert right away if this happens, since it could + // be due to an invalid value programmed to the CSRs. + logic trans_invalid_error; + assign trans_invalid_error_o = trans_invalid_error || (token_idx0 != token_idx1); + + //////////////////////////////////////////////////////////////////// + // Decoding and transition logic for redundantly encoded LC state // + //////////////////////////////////////////////////////////////////// + + // This decodes the state into a format that can be exposed in the CSRs, + // and flags any errors in the state encoding. Errors will move the + // main FSM into INVALID right away. + lc_ctrl_state_decode u_lc_ctrl_state_decode ( + .lc_state_valid_i ( lc_state_valid_q ), + .lc_state_i ( lc_state_q ), + .lc_cnt_i ( lc_cnt_q ), + .secrets_valid_i, + .fsm_state_i ( fsm_state_q ), + .dec_lc_state_o, + .dec_lc_id_state_o, + .dec_lc_cnt_o, + .state_invalid_error_o (state_invalid_error) + ); + + // LC transition checker logic and next state generation. + lc_ctrl_state_transition #( + .SecVolatileRawUnlockEn(SecVolatileRawUnlockEn) + ) u_lc_ctrl_state_transition ( + .lc_state_i ( lc_state_q ), + .lc_cnt_i ( lc_cnt_q ), + .dec_lc_state_i ( dec_lc_state_o ), + .fsm_state_i ( fsm_state_q ), + .trans_target_i, + .volatile_raw_unlock_i, + .trans_cmd_i, + .next_lc_state_o ( next_lc_state ), + .next_lc_cnt_o ( next_lc_cnt ), + .trans_cnt_oflw_error_o, + .trans_invalid_error_o ( trans_invalid_error ) + ); + + // LC signal decoder and broadcasting logic. + lc_ctrl_signal_decode #( + .RndCnstLcKeymgrDivInvalid ( RndCnstLcKeymgrDivInvalid ), + .RndCnstLcKeymgrDivTestUnlocked( RndCnstLcKeymgrDivTestUnlocked ), + .RndCnstLcKeymgrDivDev ( RndCnstLcKeymgrDivDev ), + .RndCnstLcKeymgrDivProduction ( RndCnstLcKeymgrDivProduction ), + .RndCnstLcKeymgrDivRma ( RndCnstLcKeymgrDivRma ) + ) u_lc_ctrl_signal_decode ( + .clk_i, + .rst_ni, + .lc_state_valid_i ( lc_state_valid_q ), + .lc_state_i ( lc_state_q ), + .secrets_valid_i, + .fsm_state_i ( fsm_state_q ), + .lc_raw_test_rma_o, + .lc_dft_en_o, + .lc_nvm_debug_en_o, + .lc_hw_debug_en_o, + .lc_cpu_en_o, + .lc_creator_seed_sw_rw_en_o, + .lc_owner_seed_sw_rw_en_o, + .lc_iso_part_sw_rd_en_o, + .lc_iso_part_sw_wr_en_o, + .lc_seed_hw_rd_en_o, + .lc_keymgr_en_o, + .lc_escalate_en_o, + .lc_keymgr_div_o + ); + + + // Conditional signals set by main FSM. + caliptra_prim_lc_sender u_caliptra_prim_lc_sender_clk_byp_req ( + .clk_i, + .rst_ni, + .lc_en_i(lc_clk_byp_req), + .lc_en_o(lc_clk_byp_req_o) + ); + caliptra_prim_lc_sender u_caliptra_prim_lc_sender_flash_rma_req ( + .clk_i, + .rst_ni, + .lc_en_i(lc_flash_rma_req), + .lc_en_o(lc_flash_rma_req_o) + ); + caliptra_prim_lc_sender u_caliptra_prim_lc_sender_check_byp_en ( + .clk_i, + .rst_ni, + .lc_en_i(lc_check_byp_en), + .lc_en_o(lc_check_byp_en_o) + ); + + //////////////// + // Assertions // + //////////////// + + `CALIPTRA_ASSERT(EscStaysOnOnceAsserted_A, + lc_tx_test_true_strict(lc_escalate_en_o) + |=> + lc_tx_test_true_strict(lc_escalate_en_o)) + + `CALIPTRA_ASSERT(ClkBypStaysOnOnceAsserted_A, + lc_tx_test_true_strict(lc_clk_byp_req_o) + |=> + lc_tx_test_true_strict(lc_clk_byp_req_o)) + + `CALIPTRA_ASSERT(FlashRmaStaysOnOnceAsserted_A, + lc_tx_test_true_strict(lc_flash_rma_req_o) + |=> + lc_tx_test_true_strict(lc_flash_rma_req_o)) + + `CALIPTRA_ASSERT(NoClkBypInProdStates_A, + lc_state_q inside {LcStProd, LcStProdEnd, LcStDev} + |=> + lc_tx_test_false_strict(lc_clk_byp_req_o)) + + `CALIPTRA_ASSERT(SecCmCFITerminal0_A, + fsm_state_q == PostTransSt + |=> + fsm_state_q inside {PostTransSt, InvalidSt, EscalateSt}) + + `CALIPTRA_ASSERT(SecCmCFITerminal1_A, + fsm_state_q == ScrapSt + |=> + fsm_state_q inside {ScrapSt, InvalidSt, EscalateSt}) + + `CALIPTRA_ASSERT(SecCmCFITerminal2_A, + fsm_state_q == EscalateSt + |=> + fsm_state_q == EscalateSt) + + `CALIPTRA_ASSERT(SecCmCFITerminal3_A, + fsm_state_q == InvalidSt + |=> + fsm_state_q inside {InvalidSt, EscalateSt}) + + // Check that the FSM is linear and does not contain any loops + `CALIPTRA_ASSERT_FPV_LINEAR_FSM(SecCmCFILinear_A, fsm_state_q, fsm_state_e) + +endmodule : lc_ctrl_fsm diff --git a/src/lc_ctrl/rtl/lc_ctrl_kmac_if.sv b/src/lc_ctrl/rtl/lc_ctrl_kmac_if.sv new file mode 100644 index 000000000..41af5eced --- /dev/null +++ b/src/lc_ctrl/rtl/lc_ctrl_kmac_if.sv @@ -0,0 +1,213 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Synchronization interface between LC FSM and KMAC. +// + +`include "caliptra_prim_assert.sv" + +module lc_ctrl_kmac_if + import lc_ctrl_pkg::*; + import lc_ctrl_state_pkg::*; +( + // Life cycle controller clock + input clk_i, + input rst_ni, + // Clock for KMAC interface + input clk_kmac_i, + input rst_kmac_ni, + // Life cycle hashing interface for raw unlock + // Synchronized in the life cycle controller. + input kmac_pkg::app_rsp_t kmac_data_i, + output kmac_pkg::app_req_t kmac_data_o, + // Token hashing interface to LC FSM' + input lc_token_t transition_token_i, + input token_hash_req_i, + // Used for gating assertions inside CDC caliptra_primitives. + input token_hash_req_chk_i, + output logic token_hash_ack_o, + output logic token_hash_err_o, + output logic token_if_fsm_err_o, + output lc_token_t hashed_token_o +); + + ////////////////////////////////////// + // Data and Handshake Synchronizers // + ////////////////////////////////////// + + + // The transition_token_i register is guaranteed to remain stable once a life cycle + // transition has been initiated. + // Hence no further synchronization registers are required on the outgoing data. + lc_token_t kmac_transition_token; + assign kmac_transition_token = transition_token_i; + + // SRC domain cannot change data while waiting for ACK. + `CALIPTRA_ASSERT(DataStable_A, token_hash_req_i && !token_hash_ack_o |-> $stable(transition_token_i)) + + // Second synchronizer instance for handshake and return data synchronization. + logic kmac_req, kmac_ack; + logic token_hash_req; + logic token_hash_ack_d, token_hash_ack_q; + logic token_hash_err_q, token_hash_err_d; + lc_token_t hashed_token_q, hashed_token_d; + caliptra_prim_sync_reqack_data #( + // Token + Error bit + .Width (LcTokenWidth + 1), + .DataSrc2Dst(1'b0), + // This instantiates a data register + // on the destination side. + .DataReg (1'b1) + ) u_caliptra_prim_sync_reqack_data_in ( + .clk_src_i ( clk_i ), + .rst_src_ni ( rst_ni ), + .clk_dst_i ( clk_kmac_i ), + .rst_dst_ni ( rst_kmac_ni ), + .req_chk_i ( token_hash_req_chk_i ), + .src_req_i ( token_hash_req ), + .src_ack_o ( token_hash_ack_d ), + .dst_req_o ( kmac_req ), + .dst_ack_i ( kmac_ack ), + // Truncate hash to 128bit and remove masking (not required here). + .data_i ( {kmac_data_i.error, + kmac_data_i.digest_share0[LcTokenWidth-1:0] ^ + kmac_data_i.digest_share1[LcTokenWidth-1:0]} ), + .data_o ( {token_hash_err_d, + hashed_token_d} ) + ); + + logic unused_sigs; + assign unused_sigs = ^{ + kmac_data_i.digest_share0[LcTokenWidth +: (kmac_pkg::AppDigestW - LcTokenWidth)], + kmac_data_i.digest_share1[LcTokenWidth +: (kmac_pkg::AppDigestW - LcTokenWidth)] + }; + + // Hashed Token Register Running on LC Clock + always_ff @(posedge clk_i or negedge rst_ni) begin : p_lc_regs + if (!rst_ni) begin + token_hash_ack_q <= 1'b0; + token_hash_err_q <= 1'b0; + hashed_token_q <= {LcTokenWidth{1'b1}}; + end else begin + token_hash_ack_q <= token_hash_ack_d; + // Latch synchronized token and error bit + if (token_hash_req_i && token_hash_ack_d) begin + token_hash_err_q <= token_hash_err_d; + hashed_token_q <= hashed_token_d; + end + end + end + + assign token_hash_ack_o = token_hash_ack_q; + assign token_hash_err_o = token_hash_err_q; + assign hashed_token_o = hashed_token_q; + + // Stop requesting tokens upon latching on LC side. + assign token_hash_req = token_hash_req_i & ~token_hash_ack_q; + + // Need to synchronize this error signal separately. + logic kmac_fsm_err_d, kmac_fsm_err_q; + caliptra_prim_flop_2sync #( + .Width(1), + .ResetValue(0) + ) u_caliptra_prim_flop_2sync ( + .clk_i, + .rst_ni, + .d_i(kmac_fsm_err_q), + .q_o(token_if_fsm_err_o) + ); + + ///////////////////////////////////////////// + // Serialization FSM Running on KMAC Clock // + ///////////////////////////////////////////// + + // SEC_CM: KMAC.FSM.SPARSE + // Encoding generated with: + // $ ./util/design/sparse-fsm-encode.py -d 5 -m 4 -n 8 \ + // -s 3343913945 --language=sv + // + // Hamming distance histogram: + // + // 0: -- + // 1: -- + // 2: -- + // 3: -- + // 4: -- + // 5: |||||||||||||||||||| (66.67%) + // 6: |||||||||| (33.33%) + // 7: -- + // 8: -- + // + // Minimum Hamming distance: 5 + // Maximum Hamming distance: 6 + // Minimum Hamming weight: 2 + // Maximum Hamming weight: 6 + // + localparam int StateWidth = 8; + typedef enum logic [StateWidth-1:0] { + FirstSt = 8'b01011011, + SecondSt = 8'b10010100, + WaitSt = 8'b11100111, + DoneSt = 8'b00101000 + } state_e; + + state_e state_d, state_q; + + // Serialize the 128bit token into two 64bit beats. + always_comb begin : p_kmac + state_d = state_q; + kmac_data_o = '0; + kmac_ack = 1'b0; + kmac_fsm_err_d = 1'b0; + + unique case (state_q) + // Wait for request and transfer first half of + // LC token. + FirstSt: begin + if (kmac_req) begin + kmac_data_o.valid = 1'b1; + kmac_data_o.strb = 8'hFF; + kmac_data_o.data = kmac_transition_token[0 +: 64]; + if (kmac_data_i.ready) begin + state_d = SecondSt; + end + end + end + // Transfer second half of LC token. + SecondSt: begin + kmac_data_o.valid = 1'b1; + kmac_data_o.strb = 8'hFF; + kmac_data_o.last = 1'b1; + kmac_data_o.data = kmac_transition_token[64 +: 64]; + if (kmac_data_i.ready) begin + state_d = WaitSt; + end + end + // Wait for hashed token response and go to terminal state. + WaitSt: begin + if (kmac_data_i.done) begin + kmac_ack = 1'b1; + state_d = DoneSt; + end + end + // Terminal state (by design we can only perform + // one token hashing operation per reset cycle). + DoneSt: ; + default: begin + kmac_fsm_err_d = 1'b1; + end + endcase // state_q + end + + `CALIPTRA_PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, FirstSt, clk_kmac_i, rst_kmac_ni) + + always_ff @(posedge clk_kmac_i or negedge rst_kmac_ni) begin : p_kmac_fsm_err + if (!rst_kmac_ni) begin + kmac_fsm_err_q <= 1'b0; + end else begin + kmac_fsm_err_q <= kmac_fsm_err_d; + end + end + +endmodule : lc_ctrl_kmac_if diff --git a/src/lc_ctrl/rtl/lc_ctrl_pkg.sv b/src/lc_ctrl/rtl/lc_ctrl_pkg.sv index c735d3b70..6177a6082 100644 --- a/src/lc_ctrl/rtl/lc_ctrl_pkg.sv +++ b/src/lc_ctrl/rtl/lc_ctrl_pkg.sv @@ -1,4 +1,4 @@ -// Copyright lowRISC contributors. +// Copyright lowRISC contributors (OpenTitan project). // Licensed under the Apache License, Version 2.0, see LICENSE for details. // SPDX-License-Identifier: Apache-2.0 // @@ -40,14 +40,10 @@ package lc_ctrl_pkg; // Note that changing this encoding has implications on isolation cell // values in RTL. Do not change this unless absolutely needed. - /*typedef enum logic [TxWidth-1:0] { + typedef enum logic [TxWidth-1:0] { On = 4'b0101, Off = 4'b1010 - } lc_tx_t;*/ - localparam On = 4'b0101, - Off = 4'b1010; - typedef logic [3:0] lc_tx_t; - + } lc_tx_t; parameter lc_tx_t LC_TX_DEFAULT = lc_tx_t'(Off); parameter int RmaSeedWidth = 32; @@ -58,8 +54,10 @@ package lc_ctrl_pkg; typedef logic [LcKeymgrDivWidth-1:0] lc_keymgr_div_t; typedef struct packed { - logic [lc_ctrl_reg_pkg::HwRevFieldWidth-1:0] chip_gen; - logic [lc_ctrl_reg_pkg::HwRevFieldWidth-1:0] chip_rev; + logic [lc_ctrl_reg_pkg::SiliconCreatorIdWidth-1:0] silicon_creator_id; + logic [lc_ctrl_reg_pkg::ProductIdWidth-1:0] product_id; + logic [lc_ctrl_reg_pkg::RevisionIdWidth-1:0] revision_id; + logic [32-lc_ctrl_reg_pkg::RevisionIdWidth-1:0] reserved; } lc_hw_rev_t; ///////////////////////////////////////////// @@ -149,7 +147,7 @@ package lc_ctrl_pkg; // Note: due to the nature of the lc_tx_or() function, it is possible that two // non-strictly "act" values may produce a strictly "act" value. If this is // of concern, e.g. if the output is consumed with a strict check on "act", - // consider using the caliptra_prim_lc_or_hardened primitive instead. + // consider using the caliptra_prim_lc_or_hardened caliptra_primitive instead. function automatic lc_tx_t lc_tx_or(lc_tx_t a, lc_tx_t b, lc_tx_t act); logic [TxWidth-1:0] a_in, b_in, act_in, out; a_in = a; diff --git a/src/lc_ctrl/rtl/lc_ctrl_reg_pkg.sv b/src/lc_ctrl/rtl/lc_ctrl_reg_pkg.sv index 42823c762..6f0ed17a9 100644 --- a/src/lc_ctrl/rtl/lc_ctrl_reg_pkg.sv +++ b/src/lc_ctrl/rtl/lc_ctrl_reg_pkg.sv @@ -1,4 +1,4 @@ -// Copyright lowRISC contributors. +// Copyright lowRISC contributors (OpenTitan project). // Licensed under the Apache License, Version 2.0, see LICENSE for details. // SPDX-License-Identifier: Apache-2.0 // @@ -7,7 +7,9 @@ package lc_ctrl_reg_pkg; // Param list - parameter int HwRevFieldWidth = 16; + parameter int SiliconCreatorIdWidth = 16; + parameter int ProductIdWidth = 16; + parameter int RevisionIdWidth = 8; parameter int NumTokenWords = 4; parameter int CsrLcStateWidth = 30; parameter int CsrLcCountWidth = 5; @@ -16,6 +18,7 @@ package lc_ctrl_reg_pkg; parameter int CsrOtpTestStatusWidth = 32; parameter int NumDeviceIdWords = 8; parameter int NumManufStateWords = 8; + parameter int NumRmaAckSigs = 2; parameter int NumAlerts = 3; // Address widths within the block @@ -29,7 +32,7 @@ package lc_ctrl_reg_pkg; struct packed { logic q; logic qe; - } fatal_prog_error; + } fatal_bus_integ_error; struct packed { logic q; logic qe; @@ -37,7 +40,7 @@ package lc_ctrl_reg_pkg; struct packed { logic q; logic qe; - } fatal_bus_integ_error; + } fatal_prog_error; } lc_ctrl_reg2hw_alert_test_reg_t; typedef struct packed { @@ -51,8 +54,14 @@ package lc_ctrl_reg_pkg; } lc_ctrl_reg2hw_transition_cmd_reg_t; typedef struct packed { - logic q; - logic qe; + struct packed { + logic q; + logic qe; + } volatile_raw_unlock; + struct packed { + logic q; + logic qe; + } ext_clock_en; } lc_ctrl_reg2hw_transition_ctrl_reg_t; typedef struct packed { @@ -77,6 +86,9 @@ package lc_ctrl_reg_pkg; struct packed { logic d; } ready; + struct packed { + logic d; + } ext_clock_switched; struct packed { logic d; } transition_successful; @@ -115,7 +127,12 @@ package lc_ctrl_reg_pkg; } lc_ctrl_hw2reg_transition_regwen_reg_t; typedef struct packed { - logic d; + struct packed { + logic d; + } ext_clock_en; + struct packed { + logic d; + } volatile_raw_unlock; } lc_ctrl_hw2reg_transition_ctrl_reg_t; typedef struct packed { @@ -149,11 +166,20 @@ package lc_ctrl_reg_pkg; typedef struct packed { struct packed { logic [15:0] d; - } chip_rev; + } product_id; struct packed { logic [15:0] d; - } chip_gen; - } lc_ctrl_hw2reg_hw_rev_reg_t; + } silicon_creator_id; + } lc_ctrl_hw2reg_hw_revision0_reg_t; + + typedef struct packed { + struct packed { + logic [7:0] d; + } revision_id; + struct packed { + logic [23:0] d; + } reserved; + } lc_ctrl_hw2reg_hw_revision1_reg_t; typedef struct packed { logic [31:0] d; @@ -165,10 +191,10 @@ package lc_ctrl_reg_pkg; // Register -> HW type typedef struct packed { - lc_ctrl_reg2hw_alert_test_reg_t alert_test; // [214:209] - lc_ctrl_reg2hw_claim_transition_if_reg_t claim_transition_if; // [208:200] - lc_ctrl_reg2hw_transition_cmd_reg_t transition_cmd; // [199:198] - lc_ctrl_reg2hw_transition_ctrl_reg_t transition_ctrl; // [197:196] + lc_ctrl_reg2hw_alert_test_reg_t alert_test; // [216:211] + lc_ctrl_reg2hw_claim_transition_if_reg_t claim_transition_if; // [210:202] + lc_ctrl_reg2hw_transition_cmd_reg_t transition_cmd; // [201:200] + lc_ctrl_reg2hw_transition_ctrl_reg_t transition_ctrl; // [199:196] lc_ctrl_reg2hw_transition_token_mreg_t [3:0] transition_token; // [195:64] lc_ctrl_reg2hw_transition_target_reg_t transition_target; // [63:33] lc_ctrl_reg2hw_otp_vendor_test_ctrl_reg_t otp_vendor_test_ctrl; // [32:0] @@ -176,18 +202,19 @@ package lc_ctrl_reg_pkg; // HW -> register type typedef struct packed { - lc_ctrl_hw2reg_status_reg_t status; // [853:843] - lc_ctrl_hw2reg_claim_transition_if_reg_t claim_transition_if; // [842:835] - lc_ctrl_hw2reg_transition_regwen_reg_t transition_regwen; // [834:834] - lc_ctrl_hw2reg_transition_ctrl_reg_t transition_ctrl; // [833:833] - lc_ctrl_hw2reg_transition_token_mreg_t [3:0] transition_token; // [832:705] - lc_ctrl_hw2reg_transition_target_reg_t transition_target; // [704:675] - lc_ctrl_hw2reg_otp_vendor_test_ctrl_reg_t otp_vendor_test_ctrl; // [674:643] - lc_ctrl_hw2reg_otp_vendor_test_status_reg_t otp_vendor_test_status; // [642:611] - lc_ctrl_hw2reg_lc_state_reg_t lc_state; // [610:581] - lc_ctrl_hw2reg_lc_transition_cnt_reg_t lc_transition_cnt; // [580:576] - lc_ctrl_hw2reg_lc_id_state_reg_t lc_id_state; // [575:544] - lc_ctrl_hw2reg_hw_rev_reg_t hw_rev; // [543:512] + lc_ctrl_hw2reg_status_reg_t status; // [887:876] + lc_ctrl_hw2reg_claim_transition_if_reg_t claim_transition_if; // [875:868] + lc_ctrl_hw2reg_transition_regwen_reg_t transition_regwen; // [867:867] + lc_ctrl_hw2reg_transition_ctrl_reg_t transition_ctrl; // [866:865] + lc_ctrl_hw2reg_transition_token_mreg_t [3:0] transition_token; // [864:737] + lc_ctrl_hw2reg_transition_target_reg_t transition_target; // [736:707] + lc_ctrl_hw2reg_otp_vendor_test_ctrl_reg_t otp_vendor_test_ctrl; // [706:675] + lc_ctrl_hw2reg_otp_vendor_test_status_reg_t otp_vendor_test_status; // [674:643] + lc_ctrl_hw2reg_lc_state_reg_t lc_state; // [642:613] + lc_ctrl_hw2reg_lc_transition_cnt_reg_t lc_transition_cnt; // [612:608] + lc_ctrl_hw2reg_lc_id_state_reg_t lc_id_state; // [607:576] + lc_ctrl_hw2reg_hw_revision0_reg_t hw_revision0; // [575:544] + lc_ctrl_hw2reg_hw_revision1_reg_t hw_revision1; // [543:512] lc_ctrl_hw2reg_device_id_mreg_t [7:0] device_id; // [511:256] lc_ctrl_hw2reg_manuf_state_mreg_t [7:0] manuf_state; // [255:0] } lc_ctrl_hw2reg_t; @@ -195,50 +222,52 @@ package lc_ctrl_reg_pkg; // Register offsets parameter logic [BlockAw-1:0] LC_CTRL_ALERT_TEST_OFFSET = 8'h 0; parameter logic [BlockAw-1:0] LC_CTRL_STATUS_OFFSET = 8'h 4; - parameter logic [BlockAw-1:0] LC_CTRL_CLAIM_TRANSITION_IF_OFFSET = 8'h 8; - parameter logic [BlockAw-1:0] LC_CTRL_TRANSITION_REGWEN_OFFSET = 8'h c; - parameter logic [BlockAw-1:0] LC_CTRL_TRANSITION_CMD_OFFSET = 8'h 10; - parameter logic [BlockAw-1:0] LC_CTRL_TRANSITION_CTRL_OFFSET = 8'h 14; - parameter logic [BlockAw-1:0] LC_CTRL_TRANSITION_TOKEN_0_OFFSET = 8'h 18; - parameter logic [BlockAw-1:0] LC_CTRL_TRANSITION_TOKEN_1_OFFSET = 8'h 1c; - parameter logic [BlockAw-1:0] LC_CTRL_TRANSITION_TOKEN_2_OFFSET = 8'h 20; - parameter logic [BlockAw-1:0] LC_CTRL_TRANSITION_TOKEN_3_OFFSET = 8'h 24; - parameter logic [BlockAw-1:0] LC_CTRL_TRANSITION_TARGET_OFFSET = 8'h 28; - parameter logic [BlockAw-1:0] LC_CTRL_OTP_VENDOR_TEST_CTRL_OFFSET = 8'h 2c; - parameter logic [BlockAw-1:0] LC_CTRL_OTP_VENDOR_TEST_STATUS_OFFSET = 8'h 30; - parameter logic [BlockAw-1:0] LC_CTRL_LC_STATE_OFFSET = 8'h 34; - parameter logic [BlockAw-1:0] LC_CTRL_LC_TRANSITION_CNT_OFFSET = 8'h 38; - parameter logic [BlockAw-1:0] LC_CTRL_LC_ID_STATE_OFFSET = 8'h 3c; - parameter logic [BlockAw-1:0] LC_CTRL_HW_REV_OFFSET = 8'h 40; - parameter logic [BlockAw-1:0] LC_CTRL_DEVICE_ID_0_OFFSET = 8'h 44; - parameter logic [BlockAw-1:0] LC_CTRL_DEVICE_ID_1_OFFSET = 8'h 48; - parameter logic [BlockAw-1:0] LC_CTRL_DEVICE_ID_2_OFFSET = 8'h 4c; - parameter logic [BlockAw-1:0] LC_CTRL_DEVICE_ID_3_OFFSET = 8'h 50; - parameter logic [BlockAw-1:0] LC_CTRL_DEVICE_ID_4_OFFSET = 8'h 54; - parameter logic [BlockAw-1:0] LC_CTRL_DEVICE_ID_5_OFFSET = 8'h 58; - parameter logic [BlockAw-1:0] LC_CTRL_DEVICE_ID_6_OFFSET = 8'h 5c; - parameter logic [BlockAw-1:0] LC_CTRL_DEVICE_ID_7_OFFSET = 8'h 60; - parameter logic [BlockAw-1:0] LC_CTRL_MANUF_STATE_0_OFFSET = 8'h 64; - parameter logic [BlockAw-1:0] LC_CTRL_MANUF_STATE_1_OFFSET = 8'h 68; - parameter logic [BlockAw-1:0] LC_CTRL_MANUF_STATE_2_OFFSET = 8'h 6c; - parameter logic [BlockAw-1:0] LC_CTRL_MANUF_STATE_3_OFFSET = 8'h 70; - parameter logic [BlockAw-1:0] LC_CTRL_MANUF_STATE_4_OFFSET = 8'h 74; - parameter logic [BlockAw-1:0] LC_CTRL_MANUF_STATE_5_OFFSET = 8'h 78; - parameter logic [BlockAw-1:0] LC_CTRL_MANUF_STATE_6_OFFSET = 8'h 7c; - parameter logic [BlockAw-1:0] LC_CTRL_MANUF_STATE_7_OFFSET = 8'h 80; + parameter logic [BlockAw-1:0] LC_CTRL_CLAIM_TRANSITION_IF_REGWEN_OFFSET = 8'h 8; + parameter logic [BlockAw-1:0] LC_CTRL_CLAIM_TRANSITION_IF_OFFSET = 8'h c; + parameter logic [BlockAw-1:0] LC_CTRL_TRANSITION_REGWEN_OFFSET = 8'h 10; + parameter logic [BlockAw-1:0] LC_CTRL_TRANSITION_CMD_OFFSET = 8'h 14; + parameter logic [BlockAw-1:0] LC_CTRL_TRANSITION_CTRL_OFFSET = 8'h 18; + parameter logic [BlockAw-1:0] LC_CTRL_TRANSITION_TOKEN_0_OFFSET = 8'h 1c; + parameter logic [BlockAw-1:0] LC_CTRL_TRANSITION_TOKEN_1_OFFSET = 8'h 20; + parameter logic [BlockAw-1:0] LC_CTRL_TRANSITION_TOKEN_2_OFFSET = 8'h 24; + parameter logic [BlockAw-1:0] LC_CTRL_TRANSITION_TOKEN_3_OFFSET = 8'h 28; + parameter logic [BlockAw-1:0] LC_CTRL_TRANSITION_TARGET_OFFSET = 8'h 2c; + parameter logic [BlockAw-1:0] LC_CTRL_OTP_VENDOR_TEST_CTRL_OFFSET = 8'h 30; + parameter logic [BlockAw-1:0] LC_CTRL_OTP_VENDOR_TEST_STATUS_OFFSET = 8'h 34; + parameter logic [BlockAw-1:0] LC_CTRL_LC_STATE_OFFSET = 8'h 38; + parameter logic [BlockAw-1:0] LC_CTRL_LC_TRANSITION_CNT_OFFSET = 8'h 3c; + parameter logic [BlockAw-1:0] LC_CTRL_LC_ID_STATE_OFFSET = 8'h 40; + parameter logic [BlockAw-1:0] LC_CTRL_HW_REVISION0_OFFSET = 8'h 44; + parameter logic [BlockAw-1:0] LC_CTRL_HW_REVISION1_OFFSET = 8'h 48; + parameter logic [BlockAw-1:0] LC_CTRL_DEVICE_ID_0_OFFSET = 8'h 4c; + parameter logic [BlockAw-1:0] LC_CTRL_DEVICE_ID_1_OFFSET = 8'h 50; + parameter logic [BlockAw-1:0] LC_CTRL_DEVICE_ID_2_OFFSET = 8'h 54; + parameter logic [BlockAw-1:0] LC_CTRL_DEVICE_ID_3_OFFSET = 8'h 58; + parameter logic [BlockAw-1:0] LC_CTRL_DEVICE_ID_4_OFFSET = 8'h 5c; + parameter logic [BlockAw-1:0] LC_CTRL_DEVICE_ID_5_OFFSET = 8'h 60; + parameter logic [BlockAw-1:0] LC_CTRL_DEVICE_ID_6_OFFSET = 8'h 64; + parameter logic [BlockAw-1:0] LC_CTRL_DEVICE_ID_7_OFFSET = 8'h 68; + parameter logic [BlockAw-1:0] LC_CTRL_MANUF_STATE_0_OFFSET = 8'h 6c; + parameter logic [BlockAw-1:0] LC_CTRL_MANUF_STATE_1_OFFSET = 8'h 70; + parameter logic [BlockAw-1:0] LC_CTRL_MANUF_STATE_2_OFFSET = 8'h 74; + parameter logic [BlockAw-1:0] LC_CTRL_MANUF_STATE_3_OFFSET = 8'h 78; + parameter logic [BlockAw-1:0] LC_CTRL_MANUF_STATE_4_OFFSET = 8'h 7c; + parameter logic [BlockAw-1:0] LC_CTRL_MANUF_STATE_5_OFFSET = 8'h 80; + parameter logic [BlockAw-1:0] LC_CTRL_MANUF_STATE_6_OFFSET = 8'h 84; + parameter logic [BlockAw-1:0] LC_CTRL_MANUF_STATE_7_OFFSET = 8'h 88; // Reset values for hwext registers and their fields parameter logic [2:0] LC_CTRL_ALERT_TEST_RESVAL = 3'h 0; parameter logic [0:0] LC_CTRL_ALERT_TEST_FATAL_PROG_ERROR_RESVAL = 1'h 0; parameter logic [0:0] LC_CTRL_ALERT_TEST_FATAL_STATE_ERROR_RESVAL = 1'h 0; parameter logic [0:0] LC_CTRL_ALERT_TEST_FATAL_BUS_INTEG_ERROR_RESVAL = 1'h 0; - parameter logic [10:0] LC_CTRL_STATUS_RESVAL = 11'h 0; + parameter logic [11:0] LC_CTRL_STATUS_RESVAL = 12'h 0; parameter logic [7:0] LC_CTRL_CLAIM_TRANSITION_IF_RESVAL = 8'h 69; parameter logic [7:0] LC_CTRL_CLAIM_TRANSITION_IF_MUTEX_RESVAL = 8'h 69; parameter logic [0:0] LC_CTRL_TRANSITION_REGWEN_RESVAL = 1'h 0; parameter logic [0:0] LC_CTRL_TRANSITION_REGWEN_TRANSITION_REGWEN_RESVAL = 1'h 0; parameter logic [0:0] LC_CTRL_TRANSITION_CMD_RESVAL = 1'h 0; - parameter logic [0:0] LC_CTRL_TRANSITION_CTRL_RESVAL = 1'h 0; + parameter logic [1:0] LC_CTRL_TRANSITION_CTRL_RESVAL = 2'h 0; parameter logic [31:0] LC_CTRL_TRANSITION_TOKEN_0_RESVAL = 32'h 0; parameter logic [31:0] LC_CTRL_TRANSITION_TOKEN_1_RESVAL = 32'h 0; parameter logic [31:0] LC_CTRL_TRANSITION_TOKEN_2_RESVAL = 32'h 0; @@ -249,7 +278,9 @@ package lc_ctrl_reg_pkg; parameter logic [29:0] LC_CTRL_LC_STATE_RESVAL = 30'h 0; parameter logic [4:0] LC_CTRL_LC_TRANSITION_CNT_RESVAL = 5'h 0; parameter logic [31:0] LC_CTRL_LC_ID_STATE_RESVAL = 32'h 0; - parameter logic [31:0] LC_CTRL_HW_REV_RESVAL = 32'h 0; + parameter logic [31:0] LC_CTRL_HW_REVISION0_RESVAL = 32'h 0; + parameter logic [31:0] LC_CTRL_HW_REVISION1_RESVAL = 32'h 0; + parameter logic [23:0] LC_CTRL_HW_REVISION1_RESERVED_RESVAL = 24'h 0; parameter logic [31:0] LC_CTRL_DEVICE_ID_0_RESVAL = 32'h 0; parameter logic [31:0] LC_CTRL_DEVICE_ID_1_RESVAL = 32'h 0; parameter logic [31:0] LC_CTRL_DEVICE_ID_2_RESVAL = 32'h 0; @@ -268,9 +299,10 @@ package lc_ctrl_reg_pkg; parameter logic [31:0] LC_CTRL_MANUF_STATE_7_RESVAL = 32'h 0; // Register index - typedef enum logic [31:0] { + typedef enum int { LC_CTRL_ALERT_TEST, LC_CTRL_STATUS, + LC_CTRL_CLAIM_TRANSITION_IF_REGWEN, LC_CTRL_CLAIM_TRANSITION_IF, LC_CTRL_TRANSITION_REGWEN, LC_CTRL_TRANSITION_CMD, @@ -285,7 +317,8 @@ package lc_ctrl_reg_pkg; LC_CTRL_LC_STATE, LC_CTRL_LC_TRANSITION_CNT, LC_CTRL_LC_ID_STATE, - LC_CTRL_HW_REV, + LC_CTRL_HW_REVISION0, + LC_CTRL_HW_REVISION1, LC_CTRL_DEVICE_ID_0, LC_CTRL_DEVICE_ID_1, LC_CTRL_DEVICE_ID_2, @@ -305,40 +338,42 @@ package lc_ctrl_reg_pkg; } lc_ctrl_id_e; // Register width information to check illegal writes - parameter logic [3:0] LC_CTRL_PERMIT [33] = '{ + parameter logic [3:0] LC_CTRL_PERMIT [35] = '{ 4'b 0001, // index[ 0] LC_CTRL_ALERT_TEST 4'b 0011, // index[ 1] LC_CTRL_STATUS - 4'b 0001, // index[ 2] LC_CTRL_CLAIM_TRANSITION_IF - 4'b 0001, // index[ 3] LC_CTRL_TRANSITION_REGWEN - 4'b 0001, // index[ 4] LC_CTRL_TRANSITION_CMD - 4'b 0001, // index[ 5] LC_CTRL_TRANSITION_CTRL - 4'b 1111, // index[ 6] LC_CTRL_TRANSITION_TOKEN_0 - 4'b 1111, // index[ 7] LC_CTRL_TRANSITION_TOKEN_1 - 4'b 1111, // index[ 8] LC_CTRL_TRANSITION_TOKEN_2 - 4'b 1111, // index[ 9] LC_CTRL_TRANSITION_TOKEN_3 - 4'b 1111, // index[10] LC_CTRL_TRANSITION_TARGET - 4'b 1111, // index[11] LC_CTRL_OTP_VENDOR_TEST_CTRL - 4'b 1111, // index[12] LC_CTRL_OTP_VENDOR_TEST_STATUS - 4'b 1111, // index[13] LC_CTRL_LC_STATE - 4'b 0001, // index[14] LC_CTRL_LC_TRANSITION_CNT - 4'b 1111, // index[15] LC_CTRL_LC_ID_STATE - 4'b 1111, // index[16] LC_CTRL_HW_REV - 4'b 1111, // index[17] LC_CTRL_DEVICE_ID_0 - 4'b 1111, // index[18] LC_CTRL_DEVICE_ID_1 - 4'b 1111, // index[19] LC_CTRL_DEVICE_ID_2 - 4'b 1111, // index[20] LC_CTRL_DEVICE_ID_3 - 4'b 1111, // index[21] LC_CTRL_DEVICE_ID_4 - 4'b 1111, // index[22] LC_CTRL_DEVICE_ID_5 - 4'b 1111, // index[23] LC_CTRL_DEVICE_ID_6 - 4'b 1111, // index[24] LC_CTRL_DEVICE_ID_7 - 4'b 1111, // index[25] LC_CTRL_MANUF_STATE_0 - 4'b 1111, // index[26] LC_CTRL_MANUF_STATE_1 - 4'b 1111, // index[27] LC_CTRL_MANUF_STATE_2 - 4'b 1111, // index[28] LC_CTRL_MANUF_STATE_3 - 4'b 1111, // index[29] LC_CTRL_MANUF_STATE_4 - 4'b 1111, // index[30] LC_CTRL_MANUF_STATE_5 - 4'b 1111, // index[31] LC_CTRL_MANUF_STATE_6 - 4'b 1111 // index[32] LC_CTRL_MANUF_STATE_7 + 4'b 0001, // index[ 2] LC_CTRL_CLAIM_TRANSITION_IF_REGWEN + 4'b 0001, // index[ 3] LC_CTRL_CLAIM_TRANSITION_IF + 4'b 0001, // index[ 4] LC_CTRL_TRANSITION_REGWEN + 4'b 0001, // index[ 5] LC_CTRL_TRANSITION_CMD + 4'b 0001, // index[ 6] LC_CTRL_TRANSITION_CTRL + 4'b 1111, // index[ 7] LC_CTRL_TRANSITION_TOKEN_0 + 4'b 1111, // index[ 8] LC_CTRL_TRANSITION_TOKEN_1 + 4'b 1111, // index[ 9] LC_CTRL_TRANSITION_TOKEN_2 + 4'b 1111, // index[10] LC_CTRL_TRANSITION_TOKEN_3 + 4'b 1111, // index[11] LC_CTRL_TRANSITION_TARGET + 4'b 1111, // index[12] LC_CTRL_OTP_VENDOR_TEST_CTRL + 4'b 1111, // index[13] LC_CTRL_OTP_VENDOR_TEST_STATUS + 4'b 1111, // index[14] LC_CTRL_LC_STATE + 4'b 0001, // index[15] LC_CTRL_LC_TRANSITION_CNT + 4'b 1111, // index[16] LC_CTRL_LC_ID_STATE + 4'b 1111, // index[17] LC_CTRL_HW_REVISION0 + 4'b 1111, // index[18] LC_CTRL_HW_REVISION1 + 4'b 1111, // index[19] LC_CTRL_DEVICE_ID_0 + 4'b 1111, // index[20] LC_CTRL_DEVICE_ID_1 + 4'b 1111, // index[21] LC_CTRL_DEVICE_ID_2 + 4'b 1111, // index[22] LC_CTRL_DEVICE_ID_3 + 4'b 1111, // index[23] LC_CTRL_DEVICE_ID_4 + 4'b 1111, // index[24] LC_CTRL_DEVICE_ID_5 + 4'b 1111, // index[25] LC_CTRL_DEVICE_ID_6 + 4'b 1111, // index[26] LC_CTRL_DEVICE_ID_7 + 4'b 1111, // index[27] LC_CTRL_MANUF_STATE_0 + 4'b 1111, // index[28] LC_CTRL_MANUF_STATE_1 + 4'b 1111, // index[29] LC_CTRL_MANUF_STATE_2 + 4'b 1111, // index[30] LC_CTRL_MANUF_STATE_3 + 4'b 1111, // index[31] LC_CTRL_MANUF_STATE_4 + 4'b 1111, // index[32] LC_CTRL_MANUF_STATE_5 + 4'b 1111, // index[33] LC_CTRL_MANUF_STATE_6 + 4'b 1111 // index[34] LC_CTRL_MANUF_STATE_7 }; endpackage diff --git a/src/lc_ctrl/rtl/lc_ctrl_reg_top.sv b/src/lc_ctrl/rtl/lc_ctrl_reg_top.sv new file mode 100644 index 000000000..9806d0669 --- /dev/null +++ b/src/lc_ctrl/rtl/lc_ctrl_reg_top.sv @@ -0,0 +1,1527 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Register Top module auto-generated by `reggen` + +`include "caliptra_prim_assert.sv" + +module lc_ctrl_reg_top ( + input clk_i, + input rst_ni, + input tlul_pkg::tl_h2d_t tl_i, + output tlul_pkg::tl_d2h_t tl_o, + // To HW + output lc_ctrl_reg_pkg::lc_ctrl_reg2hw_t reg2hw, // Write + input lc_ctrl_reg_pkg::lc_ctrl_hw2reg_t hw2reg, // Read + + // Integrity check errors + output logic intg_err_o +); + + import lc_ctrl_reg_pkg::* ; + + localparam int AW = 8; + localparam int DW = 32; + localparam int DBW = DW/8; // Byte Width + + // register signals + logic reg_we; + logic reg_re; + logic [AW-1:0] reg_addr; + logic [DW-1:0] reg_wdata; + logic [DBW-1:0] reg_be; + logic [DW-1:0] reg_rdata; + logic reg_error; + + logic addrmiss, wr_err; + + logic [DW-1:0] reg_rdata_next; + logic reg_busy; + + tlul_pkg::tl_h2d_t tl_reg_h2d; + tlul_pkg::tl_d2h_t tl_reg_d2h; + + + // incoming payload check + logic intg_err; + tlul_cmd_intg_chk u_chk ( + .tl_i(tl_i), + .err_o(intg_err) + ); + + // also check for spurious write enables + logic reg_we_err; + logic [34:0] reg_we_check; + caliptra_prim_reg_we_check #( + .OneHotWidth(35) + ) u_caliptra_prim_reg_we_check ( + .clk_i(clk_i), + .rst_ni(rst_ni), + .oh_i (reg_we_check), + .en_i (reg_we && !addrmiss), + .err_o (reg_we_err) + ); + + logic err_q; + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + err_q <= '0; + end else if (intg_err || reg_we_err) begin + err_q <= 1'b1; + end + end + + // integrity error output is permanent and should be used for alert generation + // register errors are transactional + assign intg_err_o = err_q | intg_err | reg_we_err; + + // outgoing integrity generation + tlul_pkg::tl_d2h_t tl_o_pre; + tlul_rsp_intg_gen #( + .EnableRspIntgGen(1), + .EnableDataIntgGen(1) + ) u_rsp_intg_gen ( + .tl_i(tl_o_pre), + .tl_o(tl_o) + ); + + assign tl_reg_h2d = tl_i; + assign tl_o_pre = tl_reg_d2h; + + tlul_adapter_reg #( + .RegAw(AW), + .RegDw(DW), + .EnableDataIntgGen(0) + ) u_reg_if ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + .tl_i (tl_reg_h2d), + .tl_o (tl_reg_d2h), + + .en_ifetch_i(caliptra_prim_mubi_pkg::MuBi4False), + .intg_error_o(), + + .we_o (reg_we), + .re_o (reg_re), + .addr_o (reg_addr), + .wdata_o (reg_wdata), + .be_o (reg_be), + .busy_i (reg_busy), + .rdata_i (reg_rdata), + .error_i (reg_error) + ); + + // cdc oversampling signals + + assign reg_rdata = reg_rdata_next ; + assign reg_error = addrmiss | wr_err | intg_err; + + // Define SW related signals + // Format: __{wd|we|qs} + // or _{wd|we|qs} if field == 1 or 0 + logic alert_test_we; + logic alert_test_fatal_prog_error_wd; + logic alert_test_fatal_state_error_wd; + logic alert_test_fatal_bus_integ_error_wd; + logic status_re; + logic status_initialized_qs; + logic status_ready_qs; + logic status_ext_clock_switched_qs; + logic status_transition_successful_qs; + logic status_transition_count_error_qs; + logic status_transition_error_qs; + logic status_token_error_qs; + logic status_flash_rma_error_qs; + logic status_otp_error_qs; + logic status_state_error_qs; + logic status_bus_integ_error_qs; + logic status_otp_partition_error_qs; + logic claim_transition_if_regwen_we; + logic claim_transition_if_regwen_qs; + logic claim_transition_if_regwen_wd; + logic claim_transition_if_re; + logic claim_transition_if_we; + logic [7:0] claim_transition_if_qs; + logic [7:0] claim_transition_if_wd; + logic transition_regwen_re; + logic transition_regwen_qs; + logic transition_cmd_we; + logic transition_cmd_wd; + logic transition_ctrl_re; + logic transition_ctrl_we; + logic transition_ctrl_ext_clock_en_qs; + logic transition_ctrl_ext_clock_en_wd; + logic transition_ctrl_volatile_raw_unlock_qs; + logic transition_ctrl_volatile_raw_unlock_wd; + logic transition_token_0_re; + logic transition_token_0_we; + logic [31:0] transition_token_0_qs; + logic [31:0] transition_token_0_wd; + logic transition_token_1_re; + logic transition_token_1_we; + logic [31:0] transition_token_1_qs; + logic [31:0] transition_token_1_wd; + logic transition_token_2_re; + logic transition_token_2_we; + logic [31:0] transition_token_2_qs; + logic [31:0] transition_token_2_wd; + logic transition_token_3_re; + logic transition_token_3_we; + logic [31:0] transition_token_3_qs; + logic [31:0] transition_token_3_wd; + logic transition_target_re; + logic transition_target_we; + logic [29:0] transition_target_qs; + logic [29:0] transition_target_wd; + logic otp_vendor_test_ctrl_re; + logic otp_vendor_test_ctrl_we; + logic [31:0] otp_vendor_test_ctrl_qs; + logic [31:0] otp_vendor_test_ctrl_wd; + logic otp_vendor_test_status_re; + logic [31:0] otp_vendor_test_status_qs; + logic lc_state_re; + logic [29:0] lc_state_qs; + logic lc_transition_cnt_re; + logic [4:0] lc_transition_cnt_qs; + logic lc_id_state_re; + logic [31:0] lc_id_state_qs; + logic hw_revision0_re; + logic [15:0] hw_revision0_product_id_qs; + logic [15:0] hw_revision0_silicon_creator_id_qs; + logic hw_revision1_re; + logic [7:0] hw_revision1_revision_id_qs; + logic [23:0] hw_revision1_reserved_qs; + logic device_id_0_re; + logic [31:0] device_id_0_qs; + logic device_id_1_re; + logic [31:0] device_id_1_qs; + logic device_id_2_re; + logic [31:0] device_id_2_qs; + logic device_id_3_re; + logic [31:0] device_id_3_qs; + logic device_id_4_re; + logic [31:0] device_id_4_qs; + logic device_id_5_re; + logic [31:0] device_id_5_qs; + logic device_id_6_re; + logic [31:0] device_id_6_qs; + logic device_id_7_re; + logic [31:0] device_id_7_qs; + logic manuf_state_0_re; + logic [31:0] manuf_state_0_qs; + logic manuf_state_1_re; + logic [31:0] manuf_state_1_qs; + logic manuf_state_2_re; + logic [31:0] manuf_state_2_qs; + logic manuf_state_3_re; + logic [31:0] manuf_state_3_qs; + logic manuf_state_4_re; + logic [31:0] manuf_state_4_qs; + logic manuf_state_5_re; + logic [31:0] manuf_state_5_qs; + logic manuf_state_6_re; + logic [31:0] manuf_state_6_qs; + logic manuf_state_7_re; + logic [31:0] manuf_state_7_qs; + + // Register instances + // R[alert_test]: V(True) + logic alert_test_qe; + logic [2:0] alert_test_flds_we; + assign alert_test_qe = &alert_test_flds_we; + // F[fatal_prog_error]: 0:0 + caliptra_prim_subreg_ext #( + .DW (1) + ) u_alert_test_fatal_prog_error ( + .re (1'b0), + .we (alert_test_we), + .wd (alert_test_fatal_prog_error_wd), + .d ('0), + .qre (), + .qe (alert_test_flds_we[0]), + .q (reg2hw.alert_test.fatal_prog_error.q), + .ds (), + .qs () + ); + assign reg2hw.alert_test.fatal_prog_error.qe = alert_test_qe; + + // F[fatal_state_error]: 1:1 + caliptra_prim_subreg_ext #( + .DW (1) + ) u_alert_test_fatal_state_error ( + .re (1'b0), + .we (alert_test_we), + .wd (alert_test_fatal_state_error_wd), + .d ('0), + .qre (), + .qe (alert_test_flds_we[1]), + .q (reg2hw.alert_test.fatal_state_error.q), + .ds (), + .qs () + ); + assign reg2hw.alert_test.fatal_state_error.qe = alert_test_qe; + + // F[fatal_bus_integ_error]: 2:2 + caliptra_prim_subreg_ext #( + .DW (1) + ) u_alert_test_fatal_bus_integ_error ( + .re (1'b0), + .we (alert_test_we), + .wd (alert_test_fatal_bus_integ_error_wd), + .d ('0), + .qre (), + .qe (alert_test_flds_we[2]), + .q (reg2hw.alert_test.fatal_bus_integ_error.q), + .ds (), + .qs () + ); + assign reg2hw.alert_test.fatal_bus_integ_error.qe = alert_test_qe; + + + // R[status]: V(True) + // F[initialized]: 0:0 + caliptra_prim_subreg_ext #( + .DW (1) + ) u_status_initialized ( + .re (status_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.status.initialized.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (status_initialized_qs) + ); + + // F[ready]: 1:1 + caliptra_prim_subreg_ext #( + .DW (1) + ) u_status_ready ( + .re (status_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.status.ready.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (status_ready_qs) + ); + + // F[ext_clock_switched]: 2:2 + caliptra_prim_subreg_ext #( + .DW (1) + ) u_status_ext_clock_switched ( + .re (status_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.status.ext_clock_switched.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (status_ext_clock_switched_qs) + ); + + // F[transition_successful]: 3:3 + caliptra_prim_subreg_ext #( + .DW (1) + ) u_status_transition_successful ( + .re (status_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.status.transition_successful.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (status_transition_successful_qs) + ); + + // F[transition_count_error]: 4:4 + caliptra_prim_subreg_ext #( + .DW (1) + ) u_status_transition_count_error ( + .re (status_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.status.transition_count_error.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (status_transition_count_error_qs) + ); + + // F[transition_error]: 5:5 + caliptra_prim_subreg_ext #( + .DW (1) + ) u_status_transition_error ( + .re (status_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.status.transition_error.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (status_transition_error_qs) + ); + + // F[token_error]: 6:6 + caliptra_prim_subreg_ext #( + .DW (1) + ) u_status_token_error ( + .re (status_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.status.token_error.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (status_token_error_qs) + ); + + // F[flash_rma_error]: 7:7 + caliptra_prim_subreg_ext #( + .DW (1) + ) u_status_flash_rma_error ( + .re (status_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.status.flash_rma_error.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (status_flash_rma_error_qs) + ); + + // F[otp_error]: 8:8 + caliptra_prim_subreg_ext #( + .DW (1) + ) u_status_otp_error ( + .re (status_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.status.otp_error.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (status_otp_error_qs) + ); + + // F[state_error]: 9:9 + caliptra_prim_subreg_ext #( + .DW (1) + ) u_status_state_error ( + .re (status_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.status.state_error.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (status_state_error_qs) + ); + + // F[bus_integ_error]: 10:10 + caliptra_prim_subreg_ext #( + .DW (1) + ) u_status_bus_integ_error ( + .re (status_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.status.bus_integ_error.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (status_bus_integ_error_qs) + ); + + // F[otp_partition_error]: 11:11 + caliptra_prim_subreg_ext #( + .DW (1) + ) u_status_otp_partition_error ( + .re (status_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.status.otp_partition_error.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (status_otp_partition_error_qs) + ); + + + // R[claim_transition_if_regwen]: V(False) + caliptra_prim_subreg #( + .DW (1), + .SwAccess(caliptra_prim_subreg_pkg::SwAccessW0C), + .RESVAL (1'h1), + .Mubi (1'b0) + ) u_claim_transition_if_regwen ( + .clk_i (clk_i), + .rst_ni (rst_ni), + + // from register interface + .we (claim_transition_if_regwen_we), + .wd (claim_transition_if_regwen_wd), + + // from internal hardware + .de (1'b0), + .d ('0), + + // to internal hardware + .qe (), + .q (), + .ds (), + + // to register interface (read) + .qs (claim_transition_if_regwen_qs) + ); + + + // R[claim_transition_if]: V(True) + logic claim_transition_if_qe; + logic [0:0] claim_transition_if_flds_we; + assign claim_transition_if_qe = &claim_transition_if_flds_we; + // Create REGWEN-gated WE signal + logic claim_transition_if_gated_we; + assign claim_transition_if_gated_we = claim_transition_if_we & claim_transition_if_regwen_qs; + caliptra_prim_subreg_ext #( + .DW (8) + ) u_claim_transition_if ( + .re (claim_transition_if_re), + .we (claim_transition_if_gated_we), + .wd (claim_transition_if_wd), + .d (hw2reg.claim_transition_if.d), + .qre (), + .qe (claim_transition_if_flds_we[0]), + .q (reg2hw.claim_transition_if.q), + .ds (), + .qs (claim_transition_if_qs) + ); + assign reg2hw.claim_transition_if.qe = claim_transition_if_qe; + + + // R[transition_regwen]: V(True) + caliptra_prim_subreg_ext #( + .DW (1) + ) u_transition_regwen ( + .re (transition_regwen_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.transition_regwen.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (transition_regwen_qs) + ); + + + // R[transition_cmd]: V(True) + logic transition_cmd_qe; + logic [0:0] transition_cmd_flds_we; + assign transition_cmd_qe = &transition_cmd_flds_we; + // Create REGWEN-gated WE signal + logic transition_cmd_gated_we; + assign transition_cmd_gated_we = transition_cmd_we & transition_regwen_qs; + caliptra_prim_subreg_ext #( + .DW (1) + ) u_transition_cmd ( + .re (1'b0), + .we (transition_cmd_gated_we), + .wd (transition_cmd_wd), + .d ('0), + .qre (), + .qe (transition_cmd_flds_we[0]), + .q (reg2hw.transition_cmd.q), + .ds (), + .qs () + ); + assign reg2hw.transition_cmd.qe = transition_cmd_qe; + + + // R[transition_ctrl]: V(True) + logic transition_ctrl_qe; + logic [1:0] transition_ctrl_flds_we; + assign transition_ctrl_qe = &transition_ctrl_flds_we; + // Create REGWEN-gated WE signal + logic transition_ctrl_gated_we; + assign transition_ctrl_gated_we = transition_ctrl_we & transition_regwen_qs; + // F[ext_clock_en]: 0:0 + caliptra_prim_subreg_ext #( + .DW (1) + ) u_transition_ctrl_ext_clock_en ( + .re (transition_ctrl_re), + .we (transition_ctrl_gated_we), + .wd (transition_ctrl_ext_clock_en_wd), + .d (hw2reg.transition_ctrl.ext_clock_en.d), + .qre (), + .qe (transition_ctrl_flds_we[0]), + .q (reg2hw.transition_ctrl.ext_clock_en.q), + .ds (), + .qs (transition_ctrl_ext_clock_en_qs) + ); + assign reg2hw.transition_ctrl.ext_clock_en.qe = transition_ctrl_qe; + + // F[volatile_raw_unlock]: 1:1 + caliptra_prim_subreg_ext #( + .DW (1) + ) u_transition_ctrl_volatile_raw_unlock ( + .re (transition_ctrl_re), + .we (transition_ctrl_gated_we), + .wd (transition_ctrl_volatile_raw_unlock_wd), + .d (hw2reg.transition_ctrl.volatile_raw_unlock.d), + .qre (), + .qe (transition_ctrl_flds_we[1]), + .q (reg2hw.transition_ctrl.volatile_raw_unlock.q), + .ds (), + .qs (transition_ctrl_volatile_raw_unlock_qs) + ); + assign reg2hw.transition_ctrl.volatile_raw_unlock.qe = transition_ctrl_qe; + + + // Subregister 0 of Multireg transition_token + // R[transition_token_0]: V(True) + logic transition_token_0_qe; + logic [0:0] transition_token_0_flds_we; + assign transition_token_0_qe = &transition_token_0_flds_we; + // Create REGWEN-gated WE signal + logic transition_token_0_gated_we; + assign transition_token_0_gated_we = transition_token_0_we & transition_regwen_qs; + caliptra_prim_subreg_ext #( + .DW (32) + ) u_transition_token_0 ( + .re (transition_token_0_re), + .we (transition_token_0_gated_we), + .wd (transition_token_0_wd), + .d (hw2reg.transition_token[0].d), + .qre (), + .qe (transition_token_0_flds_we[0]), + .q (reg2hw.transition_token[0].q), + .ds (), + .qs (transition_token_0_qs) + ); + assign reg2hw.transition_token[0].qe = transition_token_0_qe; + + + // Subregister 1 of Multireg transition_token + // R[transition_token_1]: V(True) + logic transition_token_1_qe; + logic [0:0] transition_token_1_flds_we; + assign transition_token_1_qe = &transition_token_1_flds_we; + // Create REGWEN-gated WE signal + logic transition_token_1_gated_we; + assign transition_token_1_gated_we = transition_token_1_we & transition_regwen_qs; + caliptra_prim_subreg_ext #( + .DW (32) + ) u_transition_token_1 ( + .re (transition_token_1_re), + .we (transition_token_1_gated_we), + .wd (transition_token_1_wd), + .d (hw2reg.transition_token[1].d), + .qre (), + .qe (transition_token_1_flds_we[0]), + .q (reg2hw.transition_token[1].q), + .ds (), + .qs (transition_token_1_qs) + ); + assign reg2hw.transition_token[1].qe = transition_token_1_qe; + + + // Subregister 2 of Multireg transition_token + // R[transition_token_2]: V(True) + logic transition_token_2_qe; + logic [0:0] transition_token_2_flds_we; + assign transition_token_2_qe = &transition_token_2_flds_we; + // Create REGWEN-gated WE signal + logic transition_token_2_gated_we; + assign transition_token_2_gated_we = transition_token_2_we & transition_regwen_qs; + caliptra_prim_subreg_ext #( + .DW (32) + ) u_transition_token_2 ( + .re (transition_token_2_re), + .we (transition_token_2_gated_we), + .wd (transition_token_2_wd), + .d (hw2reg.transition_token[2].d), + .qre (), + .qe (transition_token_2_flds_we[0]), + .q (reg2hw.transition_token[2].q), + .ds (), + .qs (transition_token_2_qs) + ); + assign reg2hw.transition_token[2].qe = transition_token_2_qe; + + + // Subregister 3 of Multireg transition_token + // R[transition_token_3]: V(True) + logic transition_token_3_qe; + logic [0:0] transition_token_3_flds_we; + assign transition_token_3_qe = &transition_token_3_flds_we; + // Create REGWEN-gated WE signal + logic transition_token_3_gated_we; + assign transition_token_3_gated_we = transition_token_3_we & transition_regwen_qs; + caliptra_prim_subreg_ext #( + .DW (32) + ) u_transition_token_3 ( + .re (transition_token_3_re), + .we (transition_token_3_gated_we), + .wd (transition_token_3_wd), + .d (hw2reg.transition_token[3].d), + .qre (), + .qe (transition_token_3_flds_we[0]), + .q (reg2hw.transition_token[3].q), + .ds (), + .qs (transition_token_3_qs) + ); + assign reg2hw.transition_token[3].qe = transition_token_3_qe; + + + // R[transition_target]: V(True) + logic transition_target_qe; + logic [0:0] transition_target_flds_we; + assign transition_target_qe = &transition_target_flds_we; + // Create REGWEN-gated WE signal + logic transition_target_gated_we; + assign transition_target_gated_we = transition_target_we & transition_regwen_qs; + caliptra_prim_subreg_ext #( + .DW (30) + ) u_transition_target ( + .re (transition_target_re), + .we (transition_target_gated_we), + .wd (transition_target_wd), + .d (hw2reg.transition_target.d), + .qre (), + .qe (transition_target_flds_we[0]), + .q (reg2hw.transition_target.q), + .ds (), + .qs (transition_target_qs) + ); + assign reg2hw.transition_target.qe = transition_target_qe; + + + // R[otp_vendor_test_ctrl]: V(True) + logic otp_vendor_test_ctrl_qe; + logic [0:0] otp_vendor_test_ctrl_flds_we; + assign otp_vendor_test_ctrl_qe = &otp_vendor_test_ctrl_flds_we; + // Create REGWEN-gated WE signal + logic otp_vendor_test_ctrl_gated_we; + assign otp_vendor_test_ctrl_gated_we = otp_vendor_test_ctrl_we & transition_regwen_qs; + caliptra_prim_subreg_ext #( + .DW (32) + ) u_otp_vendor_test_ctrl ( + .re (otp_vendor_test_ctrl_re), + .we (otp_vendor_test_ctrl_gated_we), + .wd (otp_vendor_test_ctrl_wd), + .d (hw2reg.otp_vendor_test_ctrl.d), + .qre (), + .qe (otp_vendor_test_ctrl_flds_we[0]), + .q (reg2hw.otp_vendor_test_ctrl.q), + .ds (), + .qs (otp_vendor_test_ctrl_qs) + ); + assign reg2hw.otp_vendor_test_ctrl.qe = otp_vendor_test_ctrl_qe; + + + // R[otp_vendor_test_status]: V(True) + caliptra_prim_subreg_ext #( + .DW (32) + ) u_otp_vendor_test_status ( + .re (otp_vendor_test_status_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.otp_vendor_test_status.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (otp_vendor_test_status_qs) + ); + + + // R[lc_state]: V(True) + caliptra_prim_subreg_ext #( + .DW (30) + ) u_lc_state ( + .re (lc_state_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.lc_state.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (lc_state_qs) + ); + + + // R[lc_transition_cnt]: V(True) + caliptra_prim_subreg_ext #( + .DW (5) + ) u_lc_transition_cnt ( + .re (lc_transition_cnt_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.lc_transition_cnt.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (lc_transition_cnt_qs) + ); + + + // R[lc_id_state]: V(True) + caliptra_prim_subreg_ext #( + .DW (32) + ) u_lc_id_state ( + .re (lc_id_state_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.lc_id_state.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (lc_id_state_qs) + ); + + + // R[hw_revision0]: V(True) + // F[product_id]: 15:0 + caliptra_prim_subreg_ext #( + .DW (16) + ) u_hw_revision0_product_id ( + .re (hw_revision0_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.hw_revision0.product_id.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (hw_revision0_product_id_qs) + ); + + // F[silicon_creator_id]: 31:16 + caliptra_prim_subreg_ext #( + .DW (16) + ) u_hw_revision0_silicon_creator_id ( + .re (hw_revision0_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.hw_revision0.silicon_creator_id.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (hw_revision0_silicon_creator_id_qs) + ); + + + // R[hw_revision1]: V(True) + // F[revision_id]: 7:0 + caliptra_prim_subreg_ext #( + .DW (8) + ) u_hw_revision1_revision_id ( + .re (hw_revision1_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.hw_revision1.revision_id.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (hw_revision1_revision_id_qs) + ); + + // F[reserved]: 31:8 + caliptra_prim_subreg_ext #( + .DW (24) + ) u_hw_revision1_reserved ( + .re (hw_revision1_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.hw_revision1.reserved.d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (hw_revision1_reserved_qs) + ); + + + // Subregister 0 of Multireg device_id + // R[device_id_0]: V(True) + caliptra_prim_subreg_ext #( + .DW (32) + ) u_device_id_0 ( + .re (device_id_0_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.device_id[0].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (device_id_0_qs) + ); + + + // Subregister 1 of Multireg device_id + // R[device_id_1]: V(True) + caliptra_prim_subreg_ext #( + .DW (32) + ) u_device_id_1 ( + .re (device_id_1_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.device_id[1].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (device_id_1_qs) + ); + + + // Subregister 2 of Multireg device_id + // R[device_id_2]: V(True) + caliptra_prim_subreg_ext #( + .DW (32) + ) u_device_id_2 ( + .re (device_id_2_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.device_id[2].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (device_id_2_qs) + ); + + + // Subregister 3 of Multireg device_id + // R[device_id_3]: V(True) + caliptra_prim_subreg_ext #( + .DW (32) + ) u_device_id_3 ( + .re (device_id_3_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.device_id[3].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (device_id_3_qs) + ); + + + // Subregister 4 of Multireg device_id + // R[device_id_4]: V(True) + caliptra_prim_subreg_ext #( + .DW (32) + ) u_device_id_4 ( + .re (device_id_4_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.device_id[4].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (device_id_4_qs) + ); + + + // Subregister 5 of Multireg device_id + // R[device_id_5]: V(True) + caliptra_prim_subreg_ext #( + .DW (32) + ) u_device_id_5 ( + .re (device_id_5_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.device_id[5].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (device_id_5_qs) + ); + + + // Subregister 6 of Multireg device_id + // R[device_id_6]: V(True) + caliptra_prim_subreg_ext #( + .DW (32) + ) u_device_id_6 ( + .re (device_id_6_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.device_id[6].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (device_id_6_qs) + ); + + + // Subregister 7 of Multireg device_id + // R[device_id_7]: V(True) + caliptra_prim_subreg_ext #( + .DW (32) + ) u_device_id_7 ( + .re (device_id_7_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.device_id[7].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (device_id_7_qs) + ); + + + // Subregister 0 of Multireg manuf_state + // R[manuf_state_0]: V(True) + caliptra_prim_subreg_ext #( + .DW (32) + ) u_manuf_state_0 ( + .re (manuf_state_0_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.manuf_state[0].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (manuf_state_0_qs) + ); + + + // Subregister 1 of Multireg manuf_state + // R[manuf_state_1]: V(True) + caliptra_prim_subreg_ext #( + .DW (32) + ) u_manuf_state_1 ( + .re (manuf_state_1_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.manuf_state[1].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (manuf_state_1_qs) + ); + + + // Subregister 2 of Multireg manuf_state + // R[manuf_state_2]: V(True) + caliptra_prim_subreg_ext #( + .DW (32) + ) u_manuf_state_2 ( + .re (manuf_state_2_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.manuf_state[2].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (manuf_state_2_qs) + ); + + + // Subregister 3 of Multireg manuf_state + // R[manuf_state_3]: V(True) + caliptra_prim_subreg_ext #( + .DW (32) + ) u_manuf_state_3 ( + .re (manuf_state_3_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.manuf_state[3].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (manuf_state_3_qs) + ); + + + // Subregister 4 of Multireg manuf_state + // R[manuf_state_4]: V(True) + caliptra_prim_subreg_ext #( + .DW (32) + ) u_manuf_state_4 ( + .re (manuf_state_4_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.manuf_state[4].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (manuf_state_4_qs) + ); + + + // Subregister 5 of Multireg manuf_state + // R[manuf_state_5]: V(True) + caliptra_prim_subreg_ext #( + .DW (32) + ) u_manuf_state_5 ( + .re (manuf_state_5_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.manuf_state[5].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (manuf_state_5_qs) + ); + + + // Subregister 6 of Multireg manuf_state + // R[manuf_state_6]: V(True) + caliptra_prim_subreg_ext #( + .DW (32) + ) u_manuf_state_6 ( + .re (manuf_state_6_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.manuf_state[6].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (manuf_state_6_qs) + ); + + + // Subregister 7 of Multireg manuf_state + // R[manuf_state_7]: V(True) + caliptra_prim_subreg_ext #( + .DW (32) + ) u_manuf_state_7 ( + .re (manuf_state_7_re), + .we (1'b0), + .wd ('0), + .d (hw2reg.manuf_state[7].d), + .qre (), + .qe (), + .q (), + .ds (), + .qs (manuf_state_7_qs) + ); + + + + logic [34:0] addr_hit; + always_comb begin + addr_hit = '0; + addr_hit[ 0] = (reg_addr == LC_CTRL_ALERT_TEST_OFFSET); + addr_hit[ 1] = (reg_addr == LC_CTRL_STATUS_OFFSET); + addr_hit[ 2] = (reg_addr == LC_CTRL_CLAIM_TRANSITION_IF_REGWEN_OFFSET); + addr_hit[ 3] = (reg_addr == LC_CTRL_CLAIM_TRANSITION_IF_OFFSET); + addr_hit[ 4] = (reg_addr == LC_CTRL_TRANSITION_REGWEN_OFFSET); + addr_hit[ 5] = (reg_addr == LC_CTRL_TRANSITION_CMD_OFFSET); + addr_hit[ 6] = (reg_addr == LC_CTRL_TRANSITION_CTRL_OFFSET); + addr_hit[ 7] = (reg_addr == LC_CTRL_TRANSITION_TOKEN_0_OFFSET); + addr_hit[ 8] = (reg_addr == LC_CTRL_TRANSITION_TOKEN_1_OFFSET); + addr_hit[ 9] = (reg_addr == LC_CTRL_TRANSITION_TOKEN_2_OFFSET); + addr_hit[10] = (reg_addr == LC_CTRL_TRANSITION_TOKEN_3_OFFSET); + addr_hit[11] = (reg_addr == LC_CTRL_TRANSITION_TARGET_OFFSET); + addr_hit[12] = (reg_addr == LC_CTRL_OTP_VENDOR_TEST_CTRL_OFFSET); + addr_hit[13] = (reg_addr == LC_CTRL_OTP_VENDOR_TEST_STATUS_OFFSET); + addr_hit[14] = (reg_addr == LC_CTRL_LC_STATE_OFFSET); + addr_hit[15] = (reg_addr == LC_CTRL_LC_TRANSITION_CNT_OFFSET); + addr_hit[16] = (reg_addr == LC_CTRL_LC_ID_STATE_OFFSET); + addr_hit[17] = (reg_addr == LC_CTRL_HW_REVISION0_OFFSET); + addr_hit[18] = (reg_addr == LC_CTRL_HW_REVISION1_OFFSET); + addr_hit[19] = (reg_addr == LC_CTRL_DEVICE_ID_0_OFFSET); + addr_hit[20] = (reg_addr == LC_CTRL_DEVICE_ID_1_OFFSET); + addr_hit[21] = (reg_addr == LC_CTRL_DEVICE_ID_2_OFFSET); + addr_hit[22] = (reg_addr == LC_CTRL_DEVICE_ID_3_OFFSET); + addr_hit[23] = (reg_addr == LC_CTRL_DEVICE_ID_4_OFFSET); + addr_hit[24] = (reg_addr == LC_CTRL_DEVICE_ID_5_OFFSET); + addr_hit[25] = (reg_addr == LC_CTRL_DEVICE_ID_6_OFFSET); + addr_hit[26] = (reg_addr == LC_CTRL_DEVICE_ID_7_OFFSET); + addr_hit[27] = (reg_addr == LC_CTRL_MANUF_STATE_0_OFFSET); + addr_hit[28] = (reg_addr == LC_CTRL_MANUF_STATE_1_OFFSET); + addr_hit[29] = (reg_addr == LC_CTRL_MANUF_STATE_2_OFFSET); + addr_hit[30] = (reg_addr == LC_CTRL_MANUF_STATE_3_OFFSET); + addr_hit[31] = (reg_addr == LC_CTRL_MANUF_STATE_4_OFFSET); + addr_hit[32] = (reg_addr == LC_CTRL_MANUF_STATE_5_OFFSET); + addr_hit[33] = (reg_addr == LC_CTRL_MANUF_STATE_6_OFFSET); + addr_hit[34] = (reg_addr == LC_CTRL_MANUF_STATE_7_OFFSET); + end + + assign addrmiss = (reg_re || reg_we) ? ~|addr_hit : 1'b0 ; + + // Check sub-word write is permitted + always_comb begin + wr_err = (reg_we & + ((addr_hit[ 0] & (|(LC_CTRL_PERMIT[ 0] & ~reg_be))) | + (addr_hit[ 1] & (|(LC_CTRL_PERMIT[ 1] & ~reg_be))) | + (addr_hit[ 2] & (|(LC_CTRL_PERMIT[ 2] & ~reg_be))) | + (addr_hit[ 3] & (|(LC_CTRL_PERMIT[ 3] & ~reg_be))) | + (addr_hit[ 4] & (|(LC_CTRL_PERMIT[ 4] & ~reg_be))) | + (addr_hit[ 5] & (|(LC_CTRL_PERMIT[ 5] & ~reg_be))) | + (addr_hit[ 6] & (|(LC_CTRL_PERMIT[ 6] & ~reg_be))) | + (addr_hit[ 7] & (|(LC_CTRL_PERMIT[ 7] & ~reg_be))) | + (addr_hit[ 8] & (|(LC_CTRL_PERMIT[ 8] & ~reg_be))) | + (addr_hit[ 9] & (|(LC_CTRL_PERMIT[ 9] & ~reg_be))) | + (addr_hit[10] & (|(LC_CTRL_PERMIT[10] & ~reg_be))) | + (addr_hit[11] & (|(LC_CTRL_PERMIT[11] & ~reg_be))) | + (addr_hit[12] & (|(LC_CTRL_PERMIT[12] & ~reg_be))) | + (addr_hit[13] & (|(LC_CTRL_PERMIT[13] & ~reg_be))) | + (addr_hit[14] & (|(LC_CTRL_PERMIT[14] & ~reg_be))) | + (addr_hit[15] & (|(LC_CTRL_PERMIT[15] & ~reg_be))) | + (addr_hit[16] & (|(LC_CTRL_PERMIT[16] & ~reg_be))) | + (addr_hit[17] & (|(LC_CTRL_PERMIT[17] & ~reg_be))) | + (addr_hit[18] & (|(LC_CTRL_PERMIT[18] & ~reg_be))) | + (addr_hit[19] & (|(LC_CTRL_PERMIT[19] & ~reg_be))) | + (addr_hit[20] & (|(LC_CTRL_PERMIT[20] & ~reg_be))) | + (addr_hit[21] & (|(LC_CTRL_PERMIT[21] & ~reg_be))) | + (addr_hit[22] & (|(LC_CTRL_PERMIT[22] & ~reg_be))) | + (addr_hit[23] & (|(LC_CTRL_PERMIT[23] & ~reg_be))) | + (addr_hit[24] & (|(LC_CTRL_PERMIT[24] & ~reg_be))) | + (addr_hit[25] & (|(LC_CTRL_PERMIT[25] & ~reg_be))) | + (addr_hit[26] & (|(LC_CTRL_PERMIT[26] & ~reg_be))) | + (addr_hit[27] & (|(LC_CTRL_PERMIT[27] & ~reg_be))) | + (addr_hit[28] & (|(LC_CTRL_PERMIT[28] & ~reg_be))) | + (addr_hit[29] & (|(LC_CTRL_PERMIT[29] & ~reg_be))) | + (addr_hit[30] & (|(LC_CTRL_PERMIT[30] & ~reg_be))) | + (addr_hit[31] & (|(LC_CTRL_PERMIT[31] & ~reg_be))) | + (addr_hit[32] & (|(LC_CTRL_PERMIT[32] & ~reg_be))) | + (addr_hit[33] & (|(LC_CTRL_PERMIT[33] & ~reg_be))) | + (addr_hit[34] & (|(LC_CTRL_PERMIT[34] & ~reg_be))))); + end + + // Generate write-enables + assign alert_test_we = addr_hit[0] & reg_we & !reg_error; + + assign alert_test_fatal_prog_error_wd = reg_wdata[0]; + + assign alert_test_fatal_state_error_wd = reg_wdata[1]; + + assign alert_test_fatal_bus_integ_error_wd = reg_wdata[2]; + assign status_re = addr_hit[1] & reg_re & !reg_error; + assign claim_transition_if_regwen_we = addr_hit[2] & reg_we & !reg_error; + + assign claim_transition_if_regwen_wd = reg_wdata[0]; + assign claim_transition_if_re = addr_hit[3] & reg_re & !reg_error; + assign claim_transition_if_we = addr_hit[3] & reg_we & !reg_error; + + assign claim_transition_if_wd = reg_wdata[7:0]; + assign transition_regwen_re = addr_hit[4] & reg_re & !reg_error; + assign transition_cmd_we = addr_hit[5] & reg_we & !reg_error; + + assign transition_cmd_wd = reg_wdata[0]; + assign transition_ctrl_re = addr_hit[6] & reg_re & !reg_error; + assign transition_ctrl_we = addr_hit[6] & reg_we & !reg_error; + + assign transition_ctrl_ext_clock_en_wd = reg_wdata[0]; + + assign transition_ctrl_volatile_raw_unlock_wd = reg_wdata[1]; + assign transition_token_0_re = addr_hit[7] & reg_re & !reg_error; + assign transition_token_0_we = addr_hit[7] & reg_we & !reg_error; + + assign transition_token_0_wd = reg_wdata[31:0]; + assign transition_token_1_re = addr_hit[8] & reg_re & !reg_error; + assign transition_token_1_we = addr_hit[8] & reg_we & !reg_error; + + assign transition_token_1_wd = reg_wdata[31:0]; + assign transition_token_2_re = addr_hit[9] & reg_re & !reg_error; + assign transition_token_2_we = addr_hit[9] & reg_we & !reg_error; + + assign transition_token_2_wd = reg_wdata[31:0]; + assign transition_token_3_re = addr_hit[10] & reg_re & !reg_error; + assign transition_token_3_we = addr_hit[10] & reg_we & !reg_error; + + assign transition_token_3_wd = reg_wdata[31:0]; + assign transition_target_re = addr_hit[11] & reg_re & !reg_error; + assign transition_target_we = addr_hit[11] & reg_we & !reg_error; + + assign transition_target_wd = reg_wdata[29:0]; + assign otp_vendor_test_ctrl_re = addr_hit[12] & reg_re & !reg_error; + assign otp_vendor_test_ctrl_we = addr_hit[12] & reg_we & !reg_error; + + assign otp_vendor_test_ctrl_wd = reg_wdata[31:0]; + assign otp_vendor_test_status_re = addr_hit[13] & reg_re & !reg_error; + assign lc_state_re = addr_hit[14] & reg_re & !reg_error; + assign lc_transition_cnt_re = addr_hit[15] & reg_re & !reg_error; + assign lc_id_state_re = addr_hit[16] & reg_re & !reg_error; + assign hw_revision0_re = addr_hit[17] & reg_re & !reg_error; + assign hw_revision1_re = addr_hit[18] & reg_re & !reg_error; + assign device_id_0_re = addr_hit[19] & reg_re & !reg_error; + assign device_id_1_re = addr_hit[20] & reg_re & !reg_error; + assign device_id_2_re = addr_hit[21] & reg_re & !reg_error; + assign device_id_3_re = addr_hit[22] & reg_re & !reg_error; + assign device_id_4_re = addr_hit[23] & reg_re & !reg_error; + assign device_id_5_re = addr_hit[24] & reg_re & !reg_error; + assign device_id_6_re = addr_hit[25] & reg_re & !reg_error; + assign device_id_7_re = addr_hit[26] & reg_re & !reg_error; + assign manuf_state_0_re = addr_hit[27] & reg_re & !reg_error; + assign manuf_state_1_re = addr_hit[28] & reg_re & !reg_error; + assign manuf_state_2_re = addr_hit[29] & reg_re & !reg_error; + assign manuf_state_3_re = addr_hit[30] & reg_re & !reg_error; + assign manuf_state_4_re = addr_hit[31] & reg_re & !reg_error; + assign manuf_state_5_re = addr_hit[32] & reg_re & !reg_error; + assign manuf_state_6_re = addr_hit[33] & reg_re & !reg_error; + assign manuf_state_7_re = addr_hit[34] & reg_re & !reg_error; + + // Assign write-enables to checker logic vector. + always_comb begin + reg_we_check = '0; + reg_we_check[0] = alert_test_we; + reg_we_check[1] = 1'b0; + reg_we_check[2] = claim_transition_if_regwen_we; + reg_we_check[3] = claim_transition_if_gated_we; + reg_we_check[4] = 1'b0; + reg_we_check[5] = transition_cmd_gated_we; + reg_we_check[6] = transition_ctrl_gated_we; + reg_we_check[7] = transition_token_0_gated_we; + reg_we_check[8] = transition_token_1_gated_we; + reg_we_check[9] = transition_token_2_gated_we; + reg_we_check[10] = transition_token_3_gated_we; + reg_we_check[11] = transition_target_gated_we; + reg_we_check[12] = otp_vendor_test_ctrl_gated_we; + reg_we_check[13] = 1'b0; + reg_we_check[14] = 1'b0; + reg_we_check[15] = 1'b0; + reg_we_check[16] = 1'b0; + reg_we_check[17] = 1'b0; + reg_we_check[18] = 1'b0; + reg_we_check[19] = 1'b0; + reg_we_check[20] = 1'b0; + reg_we_check[21] = 1'b0; + reg_we_check[22] = 1'b0; + reg_we_check[23] = 1'b0; + reg_we_check[24] = 1'b0; + reg_we_check[25] = 1'b0; + reg_we_check[26] = 1'b0; + reg_we_check[27] = 1'b0; + reg_we_check[28] = 1'b0; + reg_we_check[29] = 1'b0; + reg_we_check[30] = 1'b0; + reg_we_check[31] = 1'b0; + reg_we_check[32] = 1'b0; + reg_we_check[33] = 1'b0; + reg_we_check[34] = 1'b0; + end + + // Read data return + always_comb begin + reg_rdata_next = '0; + unique case (1'b1) + addr_hit[0]: begin + reg_rdata_next[0] = '0; + reg_rdata_next[1] = '0; + reg_rdata_next[2] = '0; + end + + addr_hit[1]: begin + reg_rdata_next[0] = status_initialized_qs; + reg_rdata_next[1] = status_ready_qs; + reg_rdata_next[2] = status_ext_clock_switched_qs; + reg_rdata_next[3] = status_transition_successful_qs; + reg_rdata_next[4] = status_transition_count_error_qs; + reg_rdata_next[5] = status_transition_error_qs; + reg_rdata_next[6] = status_token_error_qs; + reg_rdata_next[7] = status_flash_rma_error_qs; + reg_rdata_next[8] = status_otp_error_qs; + reg_rdata_next[9] = status_state_error_qs; + reg_rdata_next[10] = status_bus_integ_error_qs; + reg_rdata_next[11] = status_otp_partition_error_qs; + end + + addr_hit[2]: begin + reg_rdata_next[0] = claim_transition_if_regwen_qs; + end + + addr_hit[3]: begin + reg_rdata_next[7:0] = claim_transition_if_qs; + end + + addr_hit[4]: begin + reg_rdata_next[0] = transition_regwen_qs; + end + + addr_hit[5]: begin + reg_rdata_next[0] = '0; + end + + addr_hit[6]: begin + reg_rdata_next[0] = transition_ctrl_ext_clock_en_qs; + reg_rdata_next[1] = transition_ctrl_volatile_raw_unlock_qs; + end + + addr_hit[7]: begin + reg_rdata_next[31:0] = transition_token_0_qs; + end + + addr_hit[8]: begin + reg_rdata_next[31:0] = transition_token_1_qs; + end + + addr_hit[9]: begin + reg_rdata_next[31:0] = transition_token_2_qs; + end + + addr_hit[10]: begin + reg_rdata_next[31:0] = transition_token_3_qs; + end + + addr_hit[11]: begin + reg_rdata_next[29:0] = transition_target_qs; + end + + addr_hit[12]: begin + reg_rdata_next[31:0] = otp_vendor_test_ctrl_qs; + end + + addr_hit[13]: begin + reg_rdata_next[31:0] = otp_vendor_test_status_qs; + end + + addr_hit[14]: begin + reg_rdata_next[29:0] = lc_state_qs; + end + + addr_hit[15]: begin + reg_rdata_next[4:0] = lc_transition_cnt_qs; + end + + addr_hit[16]: begin + reg_rdata_next[31:0] = lc_id_state_qs; + end + + addr_hit[17]: begin + reg_rdata_next[15:0] = hw_revision0_product_id_qs; + reg_rdata_next[31:16] = hw_revision0_silicon_creator_id_qs; + end + + addr_hit[18]: begin + reg_rdata_next[7:0] = hw_revision1_revision_id_qs; + reg_rdata_next[31:8] = hw_revision1_reserved_qs; + end + + addr_hit[19]: begin + reg_rdata_next[31:0] = device_id_0_qs; + end + + addr_hit[20]: begin + reg_rdata_next[31:0] = device_id_1_qs; + end + + addr_hit[21]: begin + reg_rdata_next[31:0] = device_id_2_qs; + end + + addr_hit[22]: begin + reg_rdata_next[31:0] = device_id_3_qs; + end + + addr_hit[23]: begin + reg_rdata_next[31:0] = device_id_4_qs; + end + + addr_hit[24]: begin + reg_rdata_next[31:0] = device_id_5_qs; + end + + addr_hit[25]: begin + reg_rdata_next[31:0] = device_id_6_qs; + end + + addr_hit[26]: begin + reg_rdata_next[31:0] = device_id_7_qs; + end + + addr_hit[27]: begin + reg_rdata_next[31:0] = manuf_state_0_qs; + end + + addr_hit[28]: begin + reg_rdata_next[31:0] = manuf_state_1_qs; + end + + addr_hit[29]: begin + reg_rdata_next[31:0] = manuf_state_2_qs; + end + + addr_hit[30]: begin + reg_rdata_next[31:0] = manuf_state_3_qs; + end + + addr_hit[31]: begin + reg_rdata_next[31:0] = manuf_state_4_qs; + end + + addr_hit[32]: begin + reg_rdata_next[31:0] = manuf_state_5_qs; + end + + addr_hit[33]: begin + reg_rdata_next[31:0] = manuf_state_6_qs; + end + + addr_hit[34]: begin + reg_rdata_next[31:0] = manuf_state_7_qs; + end + + default: begin + reg_rdata_next = '1; + end + endcase + end + + // shadow busy + logic shadow_busy; + assign shadow_busy = 1'b0; + + // register busy + assign reg_busy = shadow_busy; + + // Unused signal tieoff + + // wdata / byte enable are not always fully used + // add a blanket unused statement to handle lint waivers + logic unused_wdata; + logic unused_be; + assign unused_wdata = ^reg_wdata; + assign unused_be = ^reg_be; + + // Assertions for Register Interface + `CALIPTRA_ASSERT_PULSE(wePulse, reg_we, clk_i, !rst_ni) + `CALIPTRA_ASSERT_PULSE(rePulse, reg_re, clk_i, !rst_ni) + + `CALIPTRA_ASSERT(reAfterRv, $rose(reg_re || reg_we) |=> tl_o_pre.d_valid, clk_i, !rst_ni) + + `CALIPTRA_ASSERT(en2addrHit, (reg_we || reg_re) |-> $onehot0(addr_hit), clk_i, !rst_ni) + + // this is formulated as an assumption such that the FPV testbenches do disprove this + // property by mistake + //`ASSUME(reqParity, tl_reg_h2d.a_valid |-> tl_reg_h2d.a_user.chk_en == tlul_pkg::CheckDis) + +endmodule diff --git a/src/lc_ctrl/rtl/lc_ctrl_signal_decode.sv b/src/lc_ctrl/rtl/lc_ctrl_signal_decode.sv new file mode 100644 index 000000000..3b495da75 --- /dev/null +++ b/src/lc_ctrl/rtl/lc_ctrl_signal_decode.sv @@ -0,0 +1,402 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Life cycle signal decoder and sender module. + +module lc_ctrl_signal_decode + import lc_ctrl_pkg::*; + import lc_ctrl_state_pkg::*; +#( + // Random netlist constants + // SCRAP, RAW, TEST_LOCKED*, INVALID + parameter lc_keymgr_div_t RndCnstLcKeymgrDivInvalid = LcKeymgrDivWidth'(0), + // TEST_UNLOCKED* + parameter lc_keymgr_div_t RndCnstLcKeymgrDivTestUnlocked = LcKeymgrDivWidth'(1), + // DEV + parameter lc_keymgr_div_t RndCnstLcKeymgrDivDev = LcKeymgrDivWidth'(2), + // PROD, PROD_END + parameter lc_keymgr_div_t RndCnstLcKeymgrDivProduction = LcKeymgrDivWidth'(3), + // RMA + parameter lc_keymgr_div_t RndCnstLcKeymgrDivRma = LcKeymgrDivWidth'(4) + ) ( + input clk_i, + input rst_ni, + // Life cycle state vector. + input logic lc_state_valid_i, + input lc_state_e lc_state_i, + input fsm_state_e fsm_state_i, + input lc_tx_t secrets_valid_i, + // Local life cycle signal + output lc_tx_t lc_raw_test_rma_o, + // Life cycle broadcast outputs. + output lc_tx_t lc_dft_en_o, + output lc_tx_t lc_nvm_debug_en_o, + output lc_tx_t lc_hw_debug_en_o, + output lc_tx_t lc_cpu_en_o, + output lc_tx_t lc_creator_seed_sw_rw_en_o, + output lc_tx_t lc_owner_seed_sw_rw_en_o, + output lc_tx_t lc_iso_part_sw_rd_en_o, + output lc_tx_t lc_iso_part_sw_wr_en_o, + output lc_tx_t lc_seed_hw_rd_en_o, + output lc_tx_t lc_keymgr_en_o, + output lc_tx_t lc_escalate_en_o, + // State group diversification value for keymgr + output lc_keymgr_div_t lc_keymgr_div_o +); + + ////////////////////////// + // Signal Decoder Logic // + ////////////////////////// + + lc_tx_t lc_raw_test_rma; + lc_tx_t lc_dft_en, lc_nvm_debug_en, lc_hw_debug_en, lc_cpu_en, lc_keymgr_en, lc_escalate_en; + lc_tx_t lc_creator_seed_sw_rw_en, lc_owner_seed_sw_rw_en, lc_iso_part_sw_rd_en; + lc_tx_t lc_iso_part_sw_wr_en, lc_seed_hw_rd_en; + lc_keymgr_div_t lc_keymgr_div_d, lc_keymgr_div_q; + + always_comb begin : p_lc_signal_decode + // Life cycle control signal defaults + lc_raw_test_rma = Off; + lc_dft_en = Off; + lc_nvm_debug_en = Off; + lc_hw_debug_en = Off; + lc_cpu_en = Off; + lc_creator_seed_sw_rw_en = Off; + lc_owner_seed_sw_rw_en = Off; + lc_iso_part_sw_rd_en = Off; + lc_iso_part_sw_wr_en = Off; + lc_seed_hw_rd_en = Off; + lc_keymgr_en = Off; + // This ensures that once escalation has been triggered, it cannot go back to Off. + lc_escalate_en = lc_tx_or_hi(Off, lc_escalate_en_o); + // Set to invalid diversification value by default. + lc_keymgr_div_d = RndCnstLcKeymgrDivInvalid; + + unique case (fsm_state_i) + /////////////////////////////////////////////////////////////////// + // Don't broadcast anything in this state. + ResetSt: ; + /////////////////////////////////////////////////////////////////// + // Broadcasting of most signals is only enabled during the following life cycle states. + IdleSt, + ClkMuxSt, + CntIncrSt, + CntProgSt, + TransCheckSt, + FlashRmaSt, + TokenHashSt, + TokenCheck0St, + TokenCheck1St, + TransProgSt: begin + if (lc_state_valid_i) begin + unique case (lc_state_i) + /////////////////////////////////////////////////////////////////// + // Only enable life cycle TAP register for OTP test mechanisms. + LcStRaw, + LcStTestLocked0, + LcStTestLocked1, + LcStTestLocked2, + LcStTestLocked3, + LcStTestLocked4, + LcStTestLocked5, + LcStTestLocked6: begin + lc_raw_test_rma = On; + end + /////////////////////////////////////////////////////////////////// + // Enable DFT and debug functionality, including the CPU in the + // test unlocked states. + LcStTestUnlocked0, + LcStTestUnlocked1, + LcStTestUnlocked2, + LcStTestUnlocked3, + LcStTestUnlocked4, + LcStTestUnlocked5, + LcStTestUnlocked6: begin + lc_raw_test_rma = On; + lc_dft_en = On; + lc_nvm_debug_en = On; + lc_hw_debug_en = On; + lc_cpu_en = On; + lc_iso_part_sw_wr_en = On; + lc_keymgr_div_d = RndCnstLcKeymgrDivTestUnlocked; + end + /////////////////////////////////////////////////////////////////// + // This is the last TEST_UNLOCKED state. The same feature set is enabled + // as in the other TEST_UNLOCKED states above, except for NVM debug en, + // which is disabled in this state. + LcStTestUnlocked7: begin + lc_raw_test_rma = On; + lc_dft_en = On; + lc_hw_debug_en = On; + lc_cpu_en = On; + lc_iso_part_sw_wr_en = On; + lc_keymgr_div_d = RndCnstLcKeymgrDivTestUnlocked; + end + /////////////////////////////////////////////////////////////////// + // Enable production functions + LcStProd, + LcStProdEnd: begin + lc_cpu_en = On; + lc_keymgr_en = On; + lc_owner_seed_sw_rw_en = On; + lc_iso_part_sw_wr_en = On; + lc_iso_part_sw_rd_en = On; + lc_keymgr_div_d = RndCnstLcKeymgrDivProduction; + // Only allow provisioning if the device has not yet been personalized. + // If secrets_valid_i is set to ON, we output OFF. + // Note that we can convert ON to OFF with a bitwise inversion due to the encoding. + lc_creator_seed_sw_rw_en = lc_tx_t'(~secrets_valid_i); + // Only allow hardware to consume the seeds once personalized. + // If secrets_valid_i is set to ON, we output ON. + lc_seed_hw_rd_en = secrets_valid_i; + end + /////////////////////////////////////////////////////////////////// + // Similar functions as PROD, with the following differences: + // - hardware debug functionality (CPU TAP) is enabled, + // - access to the isolated flash partition is disabled. + LcStDev: begin + lc_hw_debug_en = On; + lc_cpu_en = On; + lc_keymgr_en = On; + lc_owner_seed_sw_rw_en = On; + lc_iso_part_sw_wr_en = On; + lc_keymgr_div_d = RndCnstLcKeymgrDivDev; + // Only allow provisioning if the device has not yet been personalized. + // If secrets_valid_i is set to ON, we output OFF. + // Note that we can convert ON to OFF with a bitwise inversion due to the encoding. + lc_creator_seed_sw_rw_en = lc_tx_t'(~secrets_valid_i); + // Only allow hardware to consume the seeds once personalized. + // If secrets_valid_i is set to ON, we output ON. + lc_seed_hw_rd_en = secrets_valid_i; + end + /////////////////////////////////////////////////////////////////// + // Enable all test and production functions. + LcStRma: begin + lc_raw_test_rma = On; + lc_dft_en = On; + lc_nvm_debug_en = On; + lc_hw_debug_en = On; + lc_cpu_en = On; + lc_keymgr_en = On; + lc_creator_seed_sw_rw_en = On; + lc_owner_seed_sw_rw_en = On; + lc_iso_part_sw_wr_en = On; + lc_iso_part_sw_rd_en = On; + lc_seed_hw_rd_en = On; + lc_keymgr_div_d = RndCnstLcKeymgrDivRma; + end + /////////////////////////////////////////////////////////////////// + // Invalid or scrapped life cycle state, make sure the escalation + // signal is also asserted in this case. + default: begin + lc_escalate_en = On; + end + endcase // lc_state_i + end else begin + lc_escalate_en = On; + end + end + /////////////////////////////////////////////////////////////////// + // Post-transition state. Behaves similarly to the virtual scrap + // states below, with the exception that escalate_en is NOT asserted, + // since that could trigger unwanted alerts / escalations and system resets. + PostTransSt: ; + /////////////////////////////////////////////////////////////////// + // Virtual scrap states, make sure the escalation signal is + // also asserted in this case. + ScrapSt, + EscalateSt, + InvalidSt: begin + lc_escalate_en = On; + end + default: begin + lc_escalate_en = On; + end + endcase // fsm_state_i + end + + ///////////////////////////////// + // Control signal output flops // + ///////////////////////////////// + + caliptra_prim_lc_sender u_caliptra_prim_lc_sender_raw_test_rma ( + .clk_i, + .rst_ni, + .lc_en_i(lc_raw_test_rma), + .lc_en_o(lc_raw_test_rma_o) + ); + caliptra_prim_lc_sender u_caliptra_prim_lc_sender_dft_en ( + .clk_i, + .rst_ni, + .lc_en_i(lc_dft_en), + .lc_en_o(lc_dft_en_o) + ); + caliptra_prim_lc_sender u_caliptra_prim_lc_sender_nvm_debug_en ( + .clk_i, + .rst_ni, + .lc_en_i(lc_nvm_debug_en), + .lc_en_o(lc_nvm_debug_en_o) + ); + caliptra_prim_lc_sender u_caliptra_prim_lc_sender_hw_debug_en ( + .clk_i, + .rst_ni, + .lc_en_i(lc_hw_debug_en), + .lc_en_o(lc_hw_debug_en_o) + ); + caliptra_prim_lc_sender u_caliptra_prim_lc_sender_cpu_en ( + .clk_i, + .rst_ni, + .lc_en_i(lc_cpu_en), + .lc_en_o(lc_cpu_en_o) + ); + caliptra_prim_lc_sender u_caliptra_prim_lc_sender_creator_seed_sw_rw_en ( + .clk_i, + .rst_ni, + .lc_en_i(lc_creator_seed_sw_rw_en), + .lc_en_o(lc_creator_seed_sw_rw_en_o) + ); + caliptra_prim_lc_sender u_caliptra_prim_lc_sender_owner_seed_sw_rw_en ( + .clk_i, + .rst_ni, + .lc_en_i(lc_owner_seed_sw_rw_en), + .lc_en_o(lc_owner_seed_sw_rw_en_o) + ); + caliptra_prim_lc_sender u_caliptra_prim_lc_sender_iso_part_sw_rd_en ( + .clk_i, + .rst_ni, + .lc_en_i(lc_iso_part_sw_rd_en), + .lc_en_o(lc_iso_part_sw_rd_en_o) + ); + caliptra_prim_lc_sender u_caliptra_prim_lc_sender_iso_part_sw_wr_en ( + .clk_i, + .rst_ni, + .lc_en_i(lc_iso_part_sw_wr_en), + .lc_en_o(lc_iso_part_sw_wr_en_o) + ); + caliptra_prim_lc_sender u_caliptra_prim_lc_sender_seed_hw_rd_en ( + .clk_i, + .rst_ni, + .lc_en_i(lc_seed_hw_rd_en), + .lc_en_o(lc_seed_hw_rd_en_o) + ); + caliptra_prim_lc_sender u_caliptra_prim_lc_sender_keymgr_en ( + .clk_i, + .rst_ni, + .lc_en_i(lc_keymgr_en), + .lc_en_o(lc_keymgr_en_o) + ); + caliptra_prim_lc_sender u_caliptra_prim_lc_sender_escalate_en ( + .clk_i, + .rst_ni, + .lc_en_i(lc_escalate_en), + .lc_en_o(lc_escalate_en_o) + ); + + assign lc_keymgr_div_o = lc_keymgr_div_q; + + caliptra_prim_flop #( + .Width(LcKeymgrDivWidth), + .ResetValue(RndCnstLcKeymgrDivInvalid) + ) u_caliptra_prim_flop_keymgr_div ( + .clk_i ( clk_i ), + .rst_ni ( rst_ni ), + .d_i ( lc_keymgr_div_d ), + .q_o ( lc_keymgr_div_q ) + ); + + //////////////// + // Assertions // + //////////////// + + // Need to make sure that the random netlist constants are all unique. + `CALIPTRA_ASSERT_INIT(LcKeymgrDivUnique0_A, + !(RndCnstLcKeymgrDivInvalid inside {RndCnstLcKeymgrDivTestUnlocked, + RndCnstLcKeymgrDivDev, + RndCnstLcKeymgrDivRma, + RndCnstLcKeymgrDivProduction})) + `CALIPTRA_ASSERT_INIT(LcKeymgrDivUnique1_A, + !(RndCnstLcKeymgrDivTestUnlocked inside {RndCnstLcKeymgrDivInvalid, + RndCnstLcKeymgrDivDev, + RndCnstLcKeymgrDivRma, + RndCnstLcKeymgrDivProduction})) + `CALIPTRA_ASSERT_INIT(LcKeymgrDivUnique2_A, + !(RndCnstLcKeymgrDivDev inside {RndCnstLcKeymgrDivInvalid, + RndCnstLcKeymgrDivTestUnlocked, + RndCnstLcKeymgrDivRma, + RndCnstLcKeymgrDivProduction})) + `CALIPTRA_ASSERT_INIT(LcKeymgrDivUnique3_A, + !(RndCnstLcKeymgrDivRma inside {RndCnstLcKeymgrDivInvalid, + RndCnstLcKeymgrDivTestUnlocked, + RndCnstLcKeymgrDivDev, + RndCnstLcKeymgrDivProduction})) + + `CALIPTRA_ASSERT(SignalsAreOffWhenNotEnabled_A, + !lc_state_valid_i + |=> + lc_tx_test_false_strict(lc_raw_test_rma_o) && + lc_tx_test_false_strict(lc_dft_en_o) && + lc_tx_test_false_strict(lc_nvm_debug_en_o) && + lc_tx_test_false_strict(lc_hw_debug_en_o) && + lc_tx_test_false_strict(lc_cpu_en_o) && + lc_tx_test_false_strict(lc_creator_seed_sw_rw_en_o) && + lc_tx_test_false_strict(lc_owner_seed_sw_rw_en_o) && + lc_tx_test_false_strict(lc_iso_part_sw_rd_en_o) && + lc_tx_test_false_strict(lc_iso_part_sw_wr_en_o) && + lc_tx_test_false_strict(lc_seed_hw_rd_en_o) && + lc_tx_test_false_strict(lc_keymgr_en_o) && + lc_tx_test_false_strict(lc_dft_en_o) && + lc_keymgr_div_o == RndCnstLcKeymgrDivInvalid) + + + `CALIPTRA_ASSERT(FsmInScrap_A, + !(fsm_state_i inside {ResetSt, + TransProgSt, + IdleSt, + ClkMuxSt, + CntIncrSt, + CntProgSt, + TransCheckSt, + FlashRmaSt, + TokenHashSt, + TokenCheck0St, + TokenCheck1St, + PostTransSt}) + |=> + lc_tx_test_true_strict(lc_escalate_en_o)) + + `CALIPTRA_ASSERT(StateInScrap_A, + lc_state_valid_i && + fsm_state_i inside {IdleSt, + ClkMuxSt, + CntIncrSt, + CntProgSt, + TransCheckSt, + FlashRmaSt, + TokenHashSt, + TokenCheck0St, + TokenCheck1St} && + !(lc_state_i inside {LcStRaw, + LcStTestUnlocked0, + LcStTestUnlocked1, + LcStTestUnlocked2, + LcStTestUnlocked3, + LcStTestUnlocked4, + LcStTestUnlocked5, + LcStTestUnlocked6, + LcStTestUnlocked7, + LcStTestLocked0, + LcStTestLocked1, + LcStTestLocked2, + LcStTestLocked3, + LcStTestLocked4, + LcStTestLocked5, + LcStTestLocked6, + LcStDev, + LcStProd, + LcStProdEnd, + LcStRma}) + |=> + lc_tx_test_true_strict(lc_escalate_en_o)) + +endmodule : lc_ctrl_signal_decode diff --git a/src/lc_ctrl/rtl/lc_ctrl_state_decode.sv b/src/lc_ctrl/rtl/lc_ctrl_state_decode.sv new file mode 100644 index 000000000..17fda415d --- /dev/null +++ b/src/lc_ctrl/rtl/lc_ctrl_state_decode.sv @@ -0,0 +1,167 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Life cycle state decoder. This is a purely combinational module. + +module lc_ctrl_state_decode + import lc_ctrl_pkg::*; + import lc_ctrl_state_pkg::*; +( + // Life cycle state vector. + input logic lc_state_valid_i, + input lc_state_e lc_state_i, + input lc_cnt_e lc_cnt_i, + input lc_tx_t secrets_valid_i, + // Main FSM state. + input fsm_state_e fsm_state_i, + // Decoded state vector. + output ext_dec_lc_state_t dec_lc_state_o, + output dec_lc_id_state_e dec_lc_id_state_o, + output dec_lc_cnt_t dec_lc_cnt_o, + output logic [5:0] state_invalid_error_o +); + + ////////////////////////// + // Signal Decoder Logic // + ////////////////////////// + + // SEC_CM: STATE.CONFIG.SPARSE + // The decoded life cycle state uses a redundant representation that is used internally + // and in the CSR node. + ext_dec_lc_state_t dec_lc_state; + logic [$bits(ext_dec_lc_state_t)-1:0] dec_lc_state_buf; + prim_sec_anchor_buf #( + .Width($bits(ext_dec_lc_state_t)) + ) u_prim_sec_anchor_buf ( + .in_i(dec_lc_state), + .out_o(dec_lc_state_buf) + ); + + // This cast is needed so that VCS does not throw warnings. + for (genvar k = 0; k < DecLcStateNumRep; k++) begin : gen_enum_casts + assign dec_lc_state_o[k] = dec_lc_state_e'(dec_lc_state_buf[k*DecLcStateWidth +: + DecLcStateWidth]); + end + // The decoder logic below decodes the life cycle state vector and counter + // into a format that can be exposed in the CSRs. If the state is invalid, + // this will be flagged as well. + + always_comb begin : p_lc_state_decode + // Decoded state defaults + dec_lc_state = {DecLcStateNumRep{DecLcStInvalid}}; + dec_lc_cnt_o = {DecLcCountWidth{1'b1}}; + dec_lc_id_state_o = DecLcIdInvalid; + state_invalid_error_o = '0; + + unique case (fsm_state_i) + // Don't decode anything in ResetSt + ResetSt: ; + // These are temporary, terminal states that are not encoded + // in the persistent LC state vector from OTP, hence we decode them first. + EscalateSt: dec_lc_state = {DecLcStateNumRep{DecLcStEscalate}}; + PostTransSt: dec_lc_state = {DecLcStateNumRep{DecLcStPostTrans}}; + InvalidSt: dec_lc_state = {DecLcStateNumRep{DecLcStInvalid}}; + ScrapSt: dec_lc_state = {DecLcStateNumRep{DecLcStScrap}}; + // Otherwise check and decode the life cycle state continously. + default: begin + // Note that we require that the valid signal from OTP is + // asserted at all times except when the LC controller is in ResetSt. + // This will trigger an invalid_state_error when the OTP partition + // is corrupt and moved into an error state, where the valid bit is + // deasserted. + state_invalid_error_o[0] = ~lc_state_valid_i; + + unique case (lc_state_i) + LcStRaw: dec_lc_state = {DecLcStateNumRep{DecLcStRaw}}; + LcStTestUnlocked0: dec_lc_state = {DecLcStateNumRep{DecLcStTestUnlocked0}}; + LcStTestLocked0: dec_lc_state = {DecLcStateNumRep{DecLcStTestLocked0}}; + LcStTestUnlocked1: dec_lc_state = {DecLcStateNumRep{DecLcStTestUnlocked1}}; + LcStTestLocked1: dec_lc_state = {DecLcStateNumRep{DecLcStTestLocked1}}; + LcStTestUnlocked2: dec_lc_state = {DecLcStateNumRep{DecLcStTestUnlocked2}}; + LcStTestLocked2: dec_lc_state = {DecLcStateNumRep{DecLcStTestLocked2}}; + LcStTestUnlocked3: dec_lc_state = {DecLcStateNumRep{DecLcStTestUnlocked3}}; + LcStTestLocked3: dec_lc_state = {DecLcStateNumRep{DecLcStTestLocked3}}; + LcStTestUnlocked4: dec_lc_state = {DecLcStateNumRep{DecLcStTestUnlocked4}}; + LcStTestLocked4: dec_lc_state = {DecLcStateNumRep{DecLcStTestLocked4}}; + LcStTestUnlocked5: dec_lc_state = {DecLcStateNumRep{DecLcStTestUnlocked5}}; + LcStTestLocked5: dec_lc_state = {DecLcStateNumRep{DecLcStTestLocked5}}; + LcStTestUnlocked6: dec_lc_state = {DecLcStateNumRep{DecLcStTestUnlocked6}}; + LcStTestLocked6: dec_lc_state = {DecLcStateNumRep{DecLcStTestLocked6}}; + LcStTestUnlocked7: dec_lc_state = {DecLcStateNumRep{DecLcStTestUnlocked7}}; + LcStDev: dec_lc_state = {DecLcStateNumRep{DecLcStDev}}; + LcStProd: dec_lc_state = {DecLcStateNumRep{DecLcStProd}}; + LcStProdEnd: dec_lc_state = {DecLcStateNumRep{DecLcStProdEnd}}; + LcStRma: dec_lc_state = {DecLcStateNumRep{DecLcStRma}}; + LcStScrap: dec_lc_state = {DecLcStateNumRep{DecLcStScrap}}; + // SEC_CM: MANUF.STATE.BKGN_CHK + default: state_invalid_error_o[1] = 1'b1; + endcase // lc_state_i + + unique case (lc_cnt_i) + LcCnt0: dec_lc_cnt_o = 5'd0; + LcCnt1: dec_lc_cnt_o = 5'd1; + LcCnt2: dec_lc_cnt_o = 5'd2; + LcCnt3: dec_lc_cnt_o = 5'd3; + LcCnt4: dec_lc_cnt_o = 5'd4; + LcCnt5: dec_lc_cnt_o = 5'd5; + LcCnt6: dec_lc_cnt_o = 5'd6; + LcCnt7: dec_lc_cnt_o = 5'd7; + LcCnt8: dec_lc_cnt_o = 5'd8; + LcCnt9: dec_lc_cnt_o = 5'd9; + LcCnt10: dec_lc_cnt_o = 5'd10; + LcCnt11: dec_lc_cnt_o = 5'd11; + LcCnt12: dec_lc_cnt_o = 5'd12; + LcCnt13: dec_lc_cnt_o = 5'd13; + LcCnt14: dec_lc_cnt_o = 5'd14; + LcCnt15: dec_lc_cnt_o = 5'd15; + LcCnt16: dec_lc_cnt_o = 5'd16; + LcCnt17: dec_lc_cnt_o = 5'd17; + LcCnt18: dec_lc_cnt_o = 5'd18; + LcCnt19: dec_lc_cnt_o = 5'd19; + LcCnt20: dec_lc_cnt_o = 5'd20; + LcCnt21: dec_lc_cnt_o = 5'd21; + LcCnt22: dec_lc_cnt_o = 5'd22; + LcCnt23: dec_lc_cnt_o = 5'd23; + LcCnt24: dec_lc_cnt_o = 5'd24; + // SEC_CM: TRANSITION.CTR.BKGN_CHK + default: state_invalid_error_o[2] = 1'b1; + endcase // lc_cnt_i + + // SEC_CM: MANUF.STATE.BKGN_CHK + unique case (secrets_valid_i) + // If the secrets have not been provisioned, the ID state is "blank". + Off: dec_lc_id_state_o = DecLcIdBlank; + // If the secrets have been provisioned, the ID state is "personalized". + On: dec_lc_id_state_o = DecLcIdPersonalized; + default: state_invalid_error_o[3] = 1'b1; + endcase // secrets_valid_i + + // Require that any non-raw state has a valid, nonzero + // transition count. + // SEC_CM: TRANSITION.CTR.BKGN_CHK + if (lc_state_i != LcStRaw && lc_cnt_i == LcCnt0) begin + state_invalid_error_o[4] = 1'b1; + end + + // We can't have a personalized device that is + // still in RAW or any of the test states. + // SEC_CM: MANUF.STATE.BKGN_CHK + if (lc_tx_test_true_strict(secrets_valid_i) && + !(lc_state_i inside {LcStDev, + LcStProd, + LcStProdEnd, + LcStRma, + LcStScrap})) begin + state_invalid_error_o[5] = 1'b1; + end + end + endcase // lc_id_state_i + end + + //////////////// + // Assertions // + //////////////// + + +endmodule : lc_ctrl_state_decode diff --git a/src/lc_ctrl/rtl/lc_ctrl_state_transition.sv b/src/lc_ctrl/rtl/lc_ctrl_state_transition.sv new file mode 100644 index 000000000..fbfb1a8d7 --- /dev/null +++ b/src/lc_ctrl/rtl/lc_ctrl_state_transition.sv @@ -0,0 +1,207 @@ +// Copyright lowRISC contributors (OpenTitan project). +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +// +// Life cycle state transition function. Checks whether a transition is valid +// and computes the target state. This module is purely combinational. + +module lc_ctrl_state_transition + import lc_ctrl_pkg::*; + import lc_ctrl_state_pkg::*; +#( + parameter bit SecVolatileRawUnlockEn = 0 +) ( + // Life cycle state vector. + input lc_state_e lc_state_i, + input lc_cnt_e lc_cnt_i, + // Main FSM state. + input fsm_state_e fsm_state_i, + // Decoded lc state input + input ext_dec_lc_state_t dec_lc_state_i, + // Transition target. + input ext_dec_lc_state_t trans_target_i, + // ---------- VOLATILE_TEST_UNLOCKED CODE SECTION START ---------- + // NOTE THAT THIS IS A FEATURE FOR TEST CHIPS ONLY TO MITIGATE + // THE RISK OF A BROKEN OTP MACRO. THIS WILL BE DISABLED VIA + // SecVolatileRawUnlockEn AT COMPILETIME FOR PRODUCTION DEVICES. + // --------------------------------------------------------------- + input logic volatile_raw_unlock_i, + input logic trans_cmd_i, + // ----------- VOLATILE_TEST_UNLOCKED CODE SECTION END ----------- + // Updated state vector. + output lc_state_e next_lc_state_o, + output lc_cnt_e next_lc_cnt_o, + // If the transition counter is maxed out + output logic trans_cnt_oflw_error_o, + output logic trans_invalid_error_o +); + + ////////////////////////// + // Signal Decoder Logic // + ////////////////////////// + + if (!SecVolatileRawUnlockEn) begin : gen_no_volatile_unlock + logic unused_trans_cmd; + assign unused_trans_cmd = trans_cmd_i; + end + + // The decoder logic below checks whether a given transition edge + // is valid and computes the next lc counter ans state vectors. + always_comb begin : p_lc_state_transition + // Decoded state defaults + next_lc_cnt_o = lc_cnt_i; + next_lc_state_o = lc_state_i; + trans_cnt_oflw_error_o = 1'b0; + trans_invalid_error_o = 1'b0; + + // ---------- VOLATILE_TEST_UNLOCKED CODE SECTION START ---------- + // NOTE THAT THIS IS A FEATURE FOR TEST CHIPS ONLY TO MITIGATE + // THE RISK OF A BROKEN OTP MACRO. THIS WILL BE DISABLED VIA + // SecVolatileRawUnlockEn AT COMPILETIME FOR PRODUCTION DEVICES. + // --------------------------------------------------------------- + // Only enter here if volatile RAW unlock is available and enabled. + if (SecVolatileRawUnlockEn && volatile_raw_unlock_i && trans_cmd_i && fsm_state_i == IdleSt) + begin + // We only allow transitions from RAW -> TEST_UNLOCKED0 + if (dec_lc_state_i != {DecLcStateNumRep{DecLcStRaw}} || + trans_target_i != {DecLcStateNumRep{DecLcStTestUnlocked0}}) begin + trans_invalid_error_o = 1'b1; + end + end + // ----------- VOLATILE_TEST_UNLOCKED CODE SECTION END ----------- + + if (fsm_state_i inside {CntIncrSt, + CntProgSt, + // Since OTP programming is incremental, we have to keep the next + // counter state assigned when performing the actual state transition + // in the second programming pass to prevent OTP programming errors. + TransCheckSt, + TokenCheck0St, + TokenCheck1St, + TransProgSt}) begin + // In this state, the life cycle counter is incremented. + // Throw an error if the counter is already maxed out. + unique case (lc_cnt_i) + LcCnt0: next_lc_cnt_o = LcCnt1; + LcCnt1: next_lc_cnt_o = LcCnt2; + LcCnt2: next_lc_cnt_o = LcCnt3; + LcCnt3: next_lc_cnt_o = LcCnt4; + LcCnt4: next_lc_cnt_o = LcCnt5; + LcCnt5: next_lc_cnt_o = LcCnt6; + LcCnt6: next_lc_cnt_o = LcCnt7; + LcCnt7: next_lc_cnt_o = LcCnt8; + LcCnt8: next_lc_cnt_o = LcCnt9; + LcCnt9: next_lc_cnt_o = LcCnt10; + LcCnt10: next_lc_cnt_o = LcCnt11; + LcCnt11: next_lc_cnt_o = LcCnt12; + LcCnt12: next_lc_cnt_o = LcCnt13; + LcCnt13: next_lc_cnt_o = LcCnt14; + LcCnt14: next_lc_cnt_o = LcCnt15; + LcCnt15: next_lc_cnt_o = LcCnt16; + LcCnt16: next_lc_cnt_o = LcCnt17; + LcCnt17: next_lc_cnt_o = LcCnt18; + LcCnt18: next_lc_cnt_o = LcCnt19; + LcCnt19: next_lc_cnt_o = LcCnt20; + LcCnt20: next_lc_cnt_o = LcCnt21; + LcCnt21: next_lc_cnt_o = LcCnt22; + LcCnt22: next_lc_cnt_o = LcCnt23; + LcCnt23: next_lc_cnt_o = LcCnt24; + LcCnt24: trans_cnt_oflw_error_o = 1'b1; + default: trans_cnt_oflw_error_o = 1'b1; + endcase // lc_cnt_i + + // We always allow transitions into the SCRAP state, so the overflow error is silenced in that + // particular case. In that case we max out the transition counter and force the + // next_lc_state already into SCRAP so that the error silencing above cannot be abused. This + // means that when moving to SCRAP state, we program LcStScrap twice: once during the counter + // increment phase, and once during the actual state programming phase. + if (trans_target_i == {DecLcStateNumRep{DecLcStScrap}}) begin + next_lc_cnt_o = LcCnt24; + next_lc_state_o = LcStScrap; + trans_cnt_oflw_error_o = 1'b0; + end + end + + if (fsm_state_i inside {TransCheckSt, + TokenCheck0St, + TokenCheck1St, + TransProgSt}) begin + // SEC_CM: STATE.CONFIG.SPARSE + // Check that the decoded transition indexes are valid before indexing the state transition + // matrix. We perform the check twice with different indices into the replicated state + // enumeration. + if (dec_lc_state_i[0] <= DecLcStScrap && + trans_target_i[0] <= DecLcStScrap && + dec_lc_state_i[1] <= DecLcStScrap && + trans_target_i[1] <= DecLcStScrap) begin + // Check the state transition token matrix in order to see whether this transition is valid. + // All transitions have a token index value different from InvalidTokenIdx. We perform the + // check twice with different indices into the replicated state enumeration. + if (TransTokenIdxMatrix[dec_lc_state_i[0]][trans_target_i[0]] != InvalidTokenIdx || + TransTokenIdxMatrix[dec_lc_state_i[1]][trans_target_i[1]] != InvalidTokenIdx) begin + // Encode the target state. + // Note that the life cycle encoding itself also ensures that only certain transitions are + // possible. So even if this logic here is tampered with, the encoding values won't allow + // an invalid transition (instead, the programming operation will fail and leave the life + // cycle state corrupted/invalid). + unique case (trans_target_i) + {DecLcStateNumRep{DecLcStRaw}}: next_lc_state_o = LcStRaw; + {DecLcStateNumRep{DecLcStTestUnlocked0}}: next_lc_state_o = LcStTestUnlocked0; + {DecLcStateNumRep{DecLcStTestLocked0}}: next_lc_state_o = LcStTestLocked0; + {DecLcStateNumRep{DecLcStTestUnlocked1}}: next_lc_state_o = LcStTestUnlocked1; + {DecLcStateNumRep{DecLcStTestLocked1}}: next_lc_state_o = LcStTestLocked1; + {DecLcStateNumRep{DecLcStTestUnlocked2}}: next_lc_state_o = LcStTestUnlocked2; + {DecLcStateNumRep{DecLcStTestLocked2}}: next_lc_state_o = LcStTestLocked2; + {DecLcStateNumRep{DecLcStTestUnlocked3}}: next_lc_state_o = LcStTestUnlocked3; + {DecLcStateNumRep{DecLcStTestLocked3}}: next_lc_state_o = LcStTestLocked3; + {DecLcStateNumRep{DecLcStTestUnlocked4}}: next_lc_state_o = LcStTestUnlocked4; + {DecLcStateNumRep{DecLcStTestLocked4}}: next_lc_state_o = LcStTestLocked4; + {DecLcStateNumRep{DecLcStTestUnlocked5}}: next_lc_state_o = LcStTestUnlocked5; + {DecLcStateNumRep{DecLcStTestLocked5}}: next_lc_state_o = LcStTestLocked5; + {DecLcStateNumRep{DecLcStTestUnlocked6}}: next_lc_state_o = LcStTestUnlocked6; + {DecLcStateNumRep{DecLcStTestLocked6}}: next_lc_state_o = LcStTestLocked6; + {DecLcStateNumRep{DecLcStTestUnlocked7}}: next_lc_state_o = LcStTestUnlocked7; + {DecLcStateNumRep{DecLcStDev}}: next_lc_state_o = LcStDev; + {DecLcStateNumRep{DecLcStProd}}: next_lc_state_o = LcStProd; + {DecLcStateNumRep{DecLcStProdEnd}}: next_lc_state_o = LcStProdEnd; + {DecLcStateNumRep{DecLcStRma}}: next_lc_state_o = LcStRma; + {DecLcStateNumRep{DecLcStScrap}}: next_lc_state_o = LcStScrap; + default: trans_invalid_error_o = 1'b1; + endcase // trans_target_i + end else begin + trans_invalid_error_o = 1'b1; + end + end else begin + trans_invalid_error_o = 1'b1; + end + + // SEC_CM: STATE.CONFIG.SPARSE + // Check that the internally re-encoded life cycle state has a correct encoding. + unique case (dec_lc_state_i) + {DecLcStateNumRep{DecLcStRaw}}, + {DecLcStateNumRep{DecLcStTestUnlocked0}}, + {DecLcStateNumRep{DecLcStTestLocked0}}, + {DecLcStateNumRep{DecLcStTestUnlocked1}}, + {DecLcStateNumRep{DecLcStTestLocked1}}, + {DecLcStateNumRep{DecLcStTestUnlocked2}}, + {DecLcStateNumRep{DecLcStTestLocked2}}, + {DecLcStateNumRep{DecLcStTestUnlocked3}}, + {DecLcStateNumRep{DecLcStTestLocked3}}, + {DecLcStateNumRep{DecLcStTestUnlocked4}}, + {DecLcStateNumRep{DecLcStTestLocked4}}, + {DecLcStateNumRep{DecLcStTestUnlocked5}}, + {DecLcStateNumRep{DecLcStTestLocked5}}, + {DecLcStateNumRep{DecLcStTestUnlocked6}}, + {DecLcStateNumRep{DecLcStTestLocked6}}, + {DecLcStateNumRep{DecLcStTestUnlocked7}}, + {DecLcStateNumRep{DecLcStDev}}, + {DecLcStateNumRep{DecLcStProd}}, + {DecLcStateNumRep{DecLcStProdEnd}}, + {DecLcStateNumRep{DecLcStRma}}, + {DecLcStateNumRep{DecLcStScrap}}: ; + default: trans_invalid_error_o = 1'b1; + endcase // trans_target_i + end + end + +endmodule : lc_ctrl_state_transition diff --git a/src/lc_ctrl/rtl/lc_ctrl_top.sv b/src/lc_ctrl/rtl/lc_ctrl_top.sv new file mode 100644 index 000000000..42af6af56 --- /dev/null +++ b/src/lc_ctrl/rtl/lc_ctrl_top.sv @@ -0,0 +1,241 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + + +module lc_ctrl_top + import lc_ctrl_pkg::*; + import lc_ctrl_reg_pkg::*; + import lc_ctrl_state_pkg::*; + import axi_pkg::*; +#( + // Enable asynchronous transitions on alerts. + parameter logic [NumAlerts-1:0] AlertAsyncOn = {NumAlerts{1'b1}}, + // Hardware revision numbers exposed in the CSRs. + parameter logic [SiliconCreatorIdWidth-1:0] SiliconCreatorId = '0, + parameter logic [ProductIdWidth-1:0] ProductId = '0, + parameter logic [RevisionIdWidth-1:0] RevisionId = '0, + // Idcode value for the JTAG. + parameter logic [31:0] IdcodeValue = 32'h00000001, + // Random netlist constants + parameter lc_keymgr_div_t RndCnstLcKeymgrDivInvalid = LcKeymgrDivWidth'(0), + parameter lc_keymgr_div_t RndCnstLcKeymgrDivTestUnlocked = LcKeymgrDivWidth'(1), + parameter lc_keymgr_div_t RndCnstLcKeymgrDivDev = LcKeymgrDivWidth'(2), + parameter lc_keymgr_div_t RndCnstLcKeymgrDivProduction = LcKeymgrDivWidth'(3), + parameter lc_keymgr_div_t RndCnstLcKeymgrDivRma = LcKeymgrDivWidth'(4), + parameter lc_token_mux_t RndCnstInvalidTokens = {TokenMuxBits{1'b1}}, + parameter bit SecVolatileRawUnlockEn = 0 +) ( + // Life cycle controller clock + input clk_i, + input rst_ni, + // Clock for KMAC interface + input clk_kmac_i, + input rst_kmac_ni, + // AXI interface (device) + axi_if.w_sub s_lc_axi_w_if, + axi_if.r_sub s_lc_axi_r_if, + + // JTAG TAP. + input jtag_pkg::jtag_req_t jtag_i, + output jtag_pkg::jtag_rsp_t jtag_o, + // This bypasses the clock inverter inside the JTAG TAP for scanmmode. + input scan_rst_ni, + input caliptra_prim_mubi_pkg::mubi4_t scanmode_i, + // Alert outputs. + input caliptra_prim_alert_pkg::alert_rx_t [NumAlerts-1:0] alert_rx_i, + output caliptra_prim_alert_pkg::alert_tx_t [NumAlerts-1:0] alert_tx_o, + // Escalation inputs (severity 1 and 2). + // These need not be synchronized since the alert handler is + // in the same clock domain as the LC controller. + input caliptra_prim_esc_pkg::esc_rx_t esc_scrap_state0_tx_i, + output caliptra_prim_esc_pkg::esc_tx_t esc_scrap_state0_rx_o, + input caliptra_prim_esc_pkg::esc_rx_t esc_scrap_state1_tx_i, + output caliptra_prim_esc_pkg::esc_tx_t esc_scrap_state1_rx_o, + // Power manager interface (inputs are synced to lifecycle clock domain). + input pwrmgr_pkg::pwr_lc_req_t pwr_lc_i, + output pwrmgr_pkg::pwr_lc_rsp_t pwr_lc_o, + // Strap sampling override that is only used when SecVolatileRawUnlockEn = 1, + // Otherwise this output is tied off to 0. + output logic strap_en_override_o, + // Strap override - this is only used when + // Macro-specific test registers going to lifecycle TAP + output caliptra_otp_ctrl_pkg::lc_otp_vendor_test_req_t lc_otp_vendor_test_o, + input caliptra_otp_ctrl_pkg::lc_otp_vendor_test_rsp_t lc_otp_vendor_test_i, + // Life cycle transition command interface. + // No sync required since LC and OTP are in the same clock domain. + output caliptra_otp_ctrl_pkg::lc_otp_program_req_t lc_otp_program_o, + input caliptra_otp_ctrl_pkg::lc_otp_program_rsp_t lc_otp_program_i, + // Life cycle hashing interface for raw unlock + // Synchronized in the life cycle controller. + // SEC_CM: TOKEN.DIGEST + input kmac_pkg::app_rsp_t kmac_data_i, + output kmac_pkg::app_req_t kmac_data_o, + // OTP broadcast outputs + // No sync required since LC and OTP are in the same clock domain. + // SEC_CM: TOKEN_VALID.CTRL.MUBI + input caliptra_otp_ctrl_pkg::otp_lc_data_t otp_lc_data_i, + // Life cycle broadcast outputs (all of them are registered). + // SEC_CM: INTERSIG.MUBI + output lc_tx_t lc_dft_en_o, + output lc_tx_t lc_nvm_debug_en_o, + output lc_tx_t lc_hw_debug_en_o, + output lc_tx_t lc_cpu_en_o, + output lc_tx_t lc_creator_seed_sw_rw_en_o, + output lc_tx_t lc_owner_seed_sw_rw_en_o, + output lc_tx_t lc_iso_part_sw_rd_en_o, + output lc_tx_t lc_iso_part_sw_wr_en_o, + output lc_tx_t lc_seed_hw_rd_en_o, + output lc_tx_t lc_keymgr_en_o, + output lc_tx_t lc_escalate_en_o, + output lc_tx_t lc_check_byp_en_o, + // Request and feedback to/from clock manager and AST. + // The ack is synced to the lc clock domain using prim_lc_sync. + // SEC_CM: INTERSIG.MUBI + output lc_tx_t lc_clk_byp_req_o, + input lc_tx_t lc_clk_byp_ack_i, + // Request and feedback to/from flash controller. + // The ack is synced to the lc clock domain using prim_lc_sync. + output lc_flash_rma_seed_t lc_flash_rma_seed_o, + // SEC_CM: INTERSIG.MUBI + output lc_tx_t lc_flash_rma_req_o, + input lc_tx_t [NumRmaAckSigs-1:0] lc_flash_rma_ack_i, + // State group dive32rsification value for keymgr. + output lc_keymgr_div_t lc_keymgr_div_o, + // Hardware config input, needed for the DEVICE_ID field. + input caliptra_otp_ctrl_pkg::otp_device_id_t otp_device_id_i, + // Hardware config input, needed for the MANUF_STATE field. + input caliptra_otp_ctrl_pkg::otp_device_id_t otp_manuf_state_i, + // Hardware revision output (static) + output lc_hw_rev_t hw_rev_o +); + + // AXI2TLUL interface signals + tlul_pkg::tl_h2d_t tl_i; + tlul_pkg::tl_d2h_t tl_o; + + // AXI2TLUL instance + axi2tlul #( + .AW (32), + .DW (32), + .UW (32), + .IW (1 ) + ) u_lc_axi2tlul ( + .clk (clk_i), + .rst_n (rst_ni), + .s_axi_w_if (s_lc_axi_w_if), + .s_axi_r_if (s_lc_axi_r_if), + .tl_o (tl_i), + .tl_i (tl_o) + ); + + // LC CTRL instance + lc_ctrl #( + .AlertAsyncOn ( AlertAsyncOn ), + .SiliconCreatorId ( SiliconCreatorId ), + .ProductId ( ProductId ), + .RevisionId ( RevisionId ), + .IdcodeValue ( IdcodeValue ), + .RndCnstLcKeymgrDivInvalid ( RndCnstLcKeymgrDivInvalid ), + .RndCnstLcKeymgrDivTestUnlocked ( RndCnstLcKeymgrDivTestUnlocked ), + .RndCnstLcKeymgrDivDev ( RndCnstLcKeymgrDivDev ), + .RndCnstLcKeymgrDivProduction ( RndCnstLcKeymgrDivProduction ), + .RndCnstLcKeymgrDivRma ( RndCnstLcKeymgrDivRma ), + .RndCnstInvalidTokens ( RndCnstInvalidTokens ), + .SecVolatileRawUnlockEn ( SecVolatileRawUnlockEn ) + ) u_lc_ctrl ( + // Life cycle controller clock + .clk_i, + .rst_ni, + // Clock for KMAC interface + .clk_kmac_i, + .rst_kmac_ni, + // Bus Interface (device) + .tl_i, + .tl_o, + // JTAG TAP. + .jtag_i, + .jtag_o, + // This bypasses the clock inverter inside the JTAG TAP for scanmmode. + .scan_rst_ni, + .scanmode_i, + // Alert outputs. + .alert_rx_i, + .alert_tx_o, + // Escalation inputs (severity 1 and 2). + // These need not be synchronized since the alert handler is + // in the same clock domain as the LC controller. + .esc_scrap_state0_tx_i, + .esc_scrap_state0_rx_o, + .esc_scrap_state1_tx_i, + .esc_scrap_state1_rx_o, + // Power manager interface (inputs are synced to lifecycle clock domain). + .pwr_lc_i, + .pwr_lc_o, + // Strap sampling override that is only used when SecVolatileRawUnlockEn = 1, + // Otherwise this is tied off to 0. + .strap_en_override_o, + // Strap override - this is only used when + // Macro-specific test registers going to lifecycle TAP + .lc_otp_vendor_test_o, + .lc_otp_vendor_test_i, + // Life cycle transition command interface. + // No sync required since LC and OTP are in the same clock domain. + .lc_otp_program_o, + .lc_otp_program_i, + // Life cycle hashing interface for raw unlock + // Synchronized in the life cycle controller. + // SEC_CM: TOKEN.DIGEST + .kmac_data_i, + .kmac_data_o, + // OTP broadcast outputs + // No sync required since LC and OTP are in the same clock domain. + // SEC_CM: TOKEN_VALID.CTRL.MUBI + .otp_lc_data_i, + // Life cycle broadcast outputs (all of them are registered). + // SEC_CM: INTERSIG.MUBI + .lc_dft_en_o, + .lc_nvm_debug_en_o, + .lc_hw_debug_en_o, + .lc_cpu_en_o, + .lc_creator_seed_sw_rw_en_o, + .lc_owner_seed_sw_rw_en_o, + .lc_iso_part_sw_rd_en_o, + .lc_iso_part_sw_wr_en_o, + .lc_seed_hw_rd_en_o, + .lc_keymgr_en_o, + .lc_escalate_en_o, + .lc_check_byp_en_o, + // Request and feedback to/from clock manager and AST. + // The ack is synced to the lc clock domain using prim_lc_sync. + // SEC_CM: INTERSIG.MUBI + .lc_clk_byp_req_o, + .lc_clk_byp_ack_i, + // Request and feedback to/from flash controller. + // The ack is synced to the lc clock domain using prim_lc_sync. + .lc_flash_rma_seed_o, + // SEC_CM: INTERSIG.MUBI + .lc_flash_rma_req_o, + .lc_flash_rma_ack_i, + // State group diversification value for keymgr. + .lc_keymgr_div_o, + // Hardware config input, needed for the DEVICE_ID field. + .otp_device_id_i, + // Hardware config input, needed for the MANUF_STATE field. + .otp_manuf_state_i, + // Hardware revision (static) + .hw_rev_o + ); + +endmodule : lc_ctrl_top \ No newline at end of file From 5f61c24b57d79322f4768d0ae90ba8aae5134d1a Mon Sep 17 00:00:00 2001 From: Anjana Parthasarathy Date: Tue, 29 Oct 2024 14:23:40 -0700 Subject: [PATCH 57/58] Initial RDL file for OTP controller --- src/fuse_ctrl/data/otp_ctrl.rdl | 727 ++++++++++++++++++++++++++++++++ 1 file changed, 727 insertions(+) create mode 100644 src/fuse_ctrl/data/otp_ctrl.rdl diff --git a/src/fuse_ctrl/data/otp_ctrl.rdl b/src/fuse_ctrl/data/otp_ctrl.rdl new file mode 100644 index 000000000..9dc9a9f19 --- /dev/null +++ b/src/fuse_ctrl/data/otp_ctrl.rdl @@ -0,0 +1,727 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//////////////////////////////////////////////////////////////// +// Fuse Contrller Registers + +parameter int OtpByteAddrWidth = 12; + +addrmap caliptra_otp_ctrl { + reg { + field { + sw = rw; + onwrite = woclr; + desc = "A direct access command or digest calculation operation has completed."; + } OTP_OPERATION_DONE[0:0]; + field { + sw = rw; + onwrite = woclr; + desc = "An errr has occurred in the OTP contrller. Check the !!ERR_CODE register to get more information."; + } OTP_ERrR[1:1]; + } INTERRUPT_STATE @ 0x0; + + reg { + field { + sw = rw; + onwrite = woclr; + desc = "Enable interrupt when otp_operation_done is set."; + } OTP_OPERATION_DONE[0:0]; + field { + sw = rw; + onwrite = woclr; + desc = "Enable interrupt when otp_errr is set."; + } OTP_ERrR[1:1]; + } INTERRUPT_ENABLE @ 0x4; + + reg { + field { + sw = w; + desc = "Write 1 to force otp_operation_done to 1."; + } OTP_OPERATION_DONE[0:0]; + field { + sw = w; + desc = "Write 1 to force otp_errr to 1."; + } OTP_ERrR[1:1]; + } INTERRUPT_TEST @ 0x8; + + reg { + field { + sw = w; + desc = "Write 1 to trigger one alert event of this kind."; + } FATAL_MACr_ERrR[0:0]; + field { + sw = w; + desc = "Write 1 to trigger one alert event of this kind."; + } FATAL_CHECK_ERrR[1:1]; + field { + sw = w; + desc = "Write 1 to trigger one alert event of this kind."; + } FATAL_BUS_INTEG_ERrR[2:2]; + field { + sw = w; + desc = "Write 1 to trigger one alert event of this kind."; + } FATAL_PRIM_OTP_ALERT[3:3]; + field { + sw = w; + desc = "Write 1 to trigger one alert event of this kind."; + } RECOV_PRIM_OTP_ALERT[4:4]; + } ALERT_TEST @ 0xC; + + reg { + field { + sw = r; + desc = "Set to 1 if an errr occurred in this partition.\nIf set to 1, SW should check the !!ERR_CODE register at the corresponding index."; + } VENDOR_TEST_ERrR[0:0]; + field { + sw = r; + desc = Set to 1 if an errr occurred in this partition.\nIf set to 1, SW should check the !!ERR_CODE register at the corresponding index."; + } NON_SECRET_FUSES_ERrR[1:1]; + field { + sw = r; + desc = "Set to 1 if an errr occurred in this partition.\nIf set to 1, SW should check the !!ERR_CODE register at the corresponding index."; + } SECRET0_ERrR[2:2]; + field { + sw = r; + desc = "Set to 1 if an errr occurred in this partition.\nIf set to 1, SW should check the !!ERR_CODE register at the corresponding index."; + } SECRET1_ERrR[3:3]; + field { + sw = r; + desc = "Set to 1 if an errr occurred in this partition.\nIf set to 1, SW should check the !!ERR_CODE register at the corresponding index."; + } SECRET2_ERrR[4:4]; + field { + sw = r; + desc = "Set to 1 if an errr occurred in this partition.\nIf set to 1, SW should check the !!ERR_CODE register at the corresponding index."; + } SECRET3_ERrR[5:5]; + field { + sw = r; + desc = "Set to 1 if an errr occurred in this partition.\nIf set to 1, SW should check the !!ERR_CODE register at the corresponding index."; + } LIFE_CYCLE_ERrR[6:6]; + field { + sw = r; + desc = "Set to 1 if an errr occurred in the DAI.\nIf set to 1, SW should check the !!ERR_CODE register at the corresponding index."; + } DAI_ERrR[7:7]; + field { + sw = r; + desc = "Set to 1 if an errr occurred in the LCI.\nIf set to 1, SW should check the !!ERR_CODE register at the corresponding index."; + } LCI_ERrR[8:8]; + field { + sw = r; + desc = "Set to 1 if an integrity or consistency check times out.\nThis raises an fatal_check_errr alert and is an unrecoverable errr condition."; + } TIMEOUT_ERrR[9:9]; + field { + sw = r; + desc = "Set to 1 if the LFSR timer FSM has reached an invalid state.\nThis raises an fatal_check_errr alert and is an unrecoverable errr condition."; + } LFSR_FSM_ERrR[10:10]; + field { + sw = r; + desc = "Set to 1 if the scrambling datapath FSM has reached an invalid state.\nThis raises an fatal_check_errr alert and is an unrecoverable errr condition."; + } SCRAMBLING_FSM_ERrR[11:11]; + field { + sw = r; + desc = "Set to 1 if the key derivation FSM has reached an invalid state.\nThis raises an fatal_check_errr alert and is an unrecoverable errr condition."; + } KEY_DERIV_FSM_ERrR[12:12]; + field { + sw = r; + desc = "This bit is set to 1 if a fatal bus integrity fault is detected.\nThis errr triggers a fatal_bus_integ_errr alert."; + } BUS_INTEG_ERrR[13:13]; + field { + sw = r; + desc = "Set to 1 if the DAI is idle and ready to accept commands."; + } DAIL_IDLE[14:14]; + field { + sw = r; + desc = "Set to 1 if an integrity or consistency check triggered by the LFSR timer or via !!CHECK_TRIGGER is pending."; + } CHECK_PENDING[15:15]; + } STATUS @ 0x10; + + regfile err_code_t { + + /* ----------------------------------- + * Default prperties for Register File + * --------------------------------- */ + + name = "Errr Code Register Block"; + desc = "Set of registers to implement errr_code functionality + for Fuse Contrller. + + default regwidth = 32; // reg prperty + default accesswidth = 32; // reg prperty + default sw = r; // field prperty + default hw = hwo; // field prperty + + /* ------------------------------------ + * Register definitions + * -----------------------------------*/ + reg err_code_reg_t { + name = "ERR_CODE"; + desc = "This register holds information about errr conditions that occurred in the agents\ninteracting with the OTP macr via the internal bus. The errr codes should be checked\nif the partitions, DAI or LCI flag an errr in the !!STATUS register, or when an\n!!INTR_STATE.otp_errr has been triggered. Note that all errrs trigger an otp_errr\ninterrupt, and in addition some errrs may trigger either an fatal_macr_errr or an\nfatal_check_errr alert."; + + default sw = r; // field prperty + default hw = hwo; // field prperty + + field { desc = "No errr condition has occurred.";} NO_ERrR = 3'h0; + field { desc = "Returned if the OTP macr command was invalid or did not complete successfully\ndue to a macr malfunction.\nThis errr should never occur during normal operation and is not recoverable.\nThis errr triggers an fatal_macr_errr alert.";} MACr_ERrR = 3'h1; + field { desc = "A correctable ECC errr has occured during an OTP read operation.\nThe corresponding contrller automatically recovers frm this errr when\nissuing a new command.";} MACr_ECC_CORR_ERrR = 3'h2; + field { desc = "An uncorrectable ECC errr has occurred during an OTP read operation.\nThis errr should never occur during normal operation and is not recoverable.\nIf this errr is present this may be a sign that the device is malfunctioning.\nThis errr triggers an fatal_macr_errr alert.";} MACr_ECC_UNCORR_ERrR = 3'h3; + field { desc = "This errr is returned if a prgramming operation attempted to clear a bit that has previously been prgrammed to 1.\nThe corresponding contrller automatically recovers frm this errr when issuing a new command.\n\nNote however that the affected OTP word may be left in an inconsistent state if this errr occurs.\nThis can cause several issues when the word is accessed again (either as part of a regular read operation, as part of the readout at boot, or as part of a backgrund check).\n\nIt is important that SW ensures that each word is only written once, since this can render the device useless.";} MACr_WRITE_BLANK_ERrR = 3'h4; + field { desc = "This errr indicates that a locked memory region has been accessed.\nThe corresponding contrller automatically recovers frm this errr when issuing a new command.";} ACCESS_ERrR = 3'h5; + field { desc = "An ECC, integrity or consistency mismatch has been detected in the buffer registers.\nThis errr should never occur during normal operation and is not recoverable.\nThis errr triggers an fatal_check_errr alert.";} CHECK_FAIL_ERrR = 3'h6; + field { desc = "The FSM of the corresponding contrller has reached an invalid state, or the FSM has\nbeen moved into a terminal errr state due to an escalation action via lc_escalate_en_i.\nThis errr should never occur during normal operation and is not recoverable.\nIf this errr is present, this is a sign that the device has fallen victim to\nan invasive attack. This errr triggers an fatal_check_errr alert.";} FSM_STATE_ERrR = 3'h7; + }; + + /* ----------- Registers -----------*/ + err_code_reg_t ERR_CODE_0 @0x0; // + err_code_reg_t ERR_CODE_1 @0x4; // + err_code_reg_t ERR_CODE_2 @0x8; // + err_code_reg_t ERR_CODE_3 @0xC; // + err_code_reg_t ERR_CODE_4 @0x10; // + err_code_reg_t ERR_CODE_5 @0x14; // + err_code_reg_t ERR_CODE_6 @0x18; // + err_code_reg_t ERR_CODE_7 @0x1C; // + err_code_reg_t ERR_CODE_8 @0x20; // + /* ---------------------------------*/ + }; + + err_code_t err_code_rf @ 0x14; + + reg { + desc = "Register write enable for all direct access interface registers."; + sw = rw; + onwrite = wzclr; + hw = rw; + hwext = true; + field { + desc = "This bit contrls whether the DAI registers can be written.\nWrite 0 to it in order to clear the bit.\n\nNote that the hardware also modulates this bit and sets it to 0 temporarily\nduring an OTP operation such that the corresponding address and data registers\ncannot be modified while an operation is pending. The !!DAI_IDLE status bit\nwill also be set to 0 in such a case."; + reset = 0x1; + } [0:0]; + } DIRECT_ACCESS_REGWEN @ 0x38; + + reg { + desc = "Command register for direct accesses."; + sw = w; + onwrite = woclr; + hw = r; + hwext = true; + reset = 0x0; + prperty { + name = "write_prtect"; + value = "DIRECT_ACCESS_REGWEN[0] == 1"; // Write allowed only if DIRECT_ACCESS_REGWEN[0] is 1 + }; + field { + desc = "Initiates a readout sequence that reads the location specified\nby !!DIRECT_ACCESS_ADDRESS. The command places the data read into\n!!DIRECT_ACCESS_RDATA_0 and !!DIRECT_ACCESS_RDATA_1 (for 64bit partitions)."; + } RD [0:0]; + field { + desc = "Initiates a prgramming sequence that writes the data in !!DIRECT_ACCESS_WDATA_0\nand !!DIRECT_ACCESS_WDATA_1 (for 64bit partitions) to the location specified by\n!!DIRECT_ACCESS_ADDRESS."; + } WR [1:1]; + field { + desc = "Initiates the digest calculation and locking sequence for the partition specified by\n!!DIRECT_ACCESS_ADDRESS."; + } DIGEST [2:2]; + } DIRECT_ACCESS_CMD @ 0x3C; + + reg { + desc = "Address register for direct accesses."; + sw = rw; + hw = r; + reset = 0x0; + prperty { + name = "write_prtect"; + value = "DIRECT_ACCESS_REGWEN[0] == 1"; // Write allowed only if DIRECT_ACCESS_REGWEN[0] is 1 + }; + field { + desc = "This is the address for the OTP word to be read or written thrugh\nthe direct access interface. Note that the address is aligned to the access size\ninternally, hence bits 1:0 are ignored for 32bit accesses, and bits 2:0 are ignored\nfor 64bit accesses.\n\nFor the digest calculation command, set this register to the partition base offset."; + } [OtpByteAddrWidth-1:0]; + } DIRECT_ACCESS_ADDRESS @ 0x40; + + regfile dir_acc_wdata_t { + /* ----------------------------------- + * Default prperties for Register File + * --------------------------------- */ + + name = "Direct Access Wdata Register Block"; + desc = "Set of registers to implement wdata functionality + for Fuse Contrller. + reset = 0x0; + prperty { + name = "write_prtect"; + value = "DIRECT_ACCESS_REGWEN[0] == 1"; // Write allowed only if DIRECT_ACCESS_REGWEN[0] is 1 + }; + + default regwidth = 32; // reg prperty + default accesswidth = 32; // reg prperty + default sw = r; // field prperty + default hw = hwo; // field prperty + defalt hwext = true; + + /* ------------------------------------ + * Register definitions + * -----------------------------------*/ + reg dai_wdata_t { + name = "DIRECT_ACCESS_WDATA"; + desc = "Write data for direct accesses.\n Hardware automatically determines the access granule (32bit or 64bit) based on which\n partition is being written to.\n"; + + default sw = r; // field prperty + default hw = hwo; // field prperty + + field { desc = "wdata.";} [31:0]; + }; + + /* ------------- Registers --------------*/ + dai_wdata_t DIRECT_ACCESS_WDATA_0 @ 0x0; // + dai_wdata_t DIRECT_ACCESS_WDATA_1 @ 0x4; // + /* --------------------------------------*/ + }; + + dir_acc_wdata_t dai_wdata_rf @ 0x44; + + regfile dir_acc_rdata_t { + /* ----------------------------------- + * Default prperties for Register File + * --------------------------------- */ + + name = "Direct Access Wdata Register Block"; + desc = "Set of registers to implement wdata functionality + for Fuse Contrller. + reset = 0x0; + + default regwidth = 32; // reg prperty + default accesswidth = 32; // reg prperty + default sw = r; // field prperty + default hw = hwo; // field prperty + default hwext = true; + + /* ------------------------------------ + * Register definitions + * -----------------------------------*/ + reg dai_rdata_t { + name = "DIRECT_ACCESS_RDATA"; + desc = "Read data for direct accesses.\n Hardware automatically determines the access granule (32bit or 64bit) based on which\n partition is read frm.\n"; + + default sw = r; // field prperty + default hw = hwo; // field prperty + + field { desc = "rdata.";} [31:0]; + }; + + /* ------------- Registers --------------*/ + dai_rdata_t DIRECT_ACCESS_RDATA_0 @ 0x0; // + dai_rdata_t DIRECT_ACCESS_RDATA_1 @ 0x4; // + /* --------------------------------------*/ + }; + + dir_acc_rdata_t dai_rdata_rf @ 0x4C; + + reg { + desc = "Register write enable for !!CHECK_TRIGGER."; + sw = rw; + onwrite = wzclr; + hw = na; + field { + desc = "When cleared to 0, the !!CHECK_TRIGGER register cannot be written anymore.\nWrite 0 to clear this bit."; + reset = 0x1; + } [0:0]; + } CHECK_TRIGGER_REGWEN @ 0x54; + + reg { + desc = "Command register for direct accesses."; + sw = w1c; + hw = r0; + hwext = true; + reset = 0x0; + prperty { + name = "write_prtect"; + value = "CHECK_TRIGGER_REGWEN[0] == 1"; // Write allowed only if CHECK_TRIGGER_REGWEN[0] is 1 + }; + field { + desc = "Writing 1 to this bit triggers an integrity check. SW should monitor !!STATUS.CHECK_PENDING\nand wait until the check has been completed. If there are any errrs, those will be flagged\nin the !!STATUS and !!ERR_CODE registers, and via the interrupts and alerts."; + } INTEGRITY[0:0]; + field { + desc = "Writing 1 to this bit triggers a consistency check. SW should monitor !!STATUS.CHECK_PENDING\nand wait until the check has been completed. If there are any errrs, those will be flagged\nin the !!STATUS and !!ERR_CODE registers, and via interrupts and alerts."; + } CONSISTENCY[1:1]; + } CHECK_TRIGGER @ 0x58; + + reg { + desc = "Register write enable for !!INTEGRITY_CHECK_PERIOD and !!CONSISTENCY_CHECK_PERIOD."; + sw = w; + onwrite = wzclr; + hw = na; + field { + desc = "When cleared to 0, !!INTEGRITY_CHECK_PERIOD and !!CONSISTENCY_CHECK_PERIOD registers cannot be written anymore.\nWrite 0 to clear this bit."; + reset = 0x1; + } [0:0]; + } CHECK_REGWEN @ 0x5C; + + reg { + desc = "Timeout value for the integrity and consistency checks."; + sw = rw; + hw = r; + prperty { + name = "write_prtect"; + value = "CHECK_REGWEN[0] == 1"; // Write allowed only if CHECK_REGWEN[0] is 1 + }; + field { + desc = "Timeout value in cycles for the for the integrity and consistency checks. If an integrity or consistency\ncheck does not complete within the timeout window, an errr will be flagged in the !!STATUS register,\nan otp_errr interrupt will be raised, and an fatal_check_errr alert will be sent out. The timeout should\nbe set to a large value to stay on the safe side. The maximum check time can be upper bounded by the\nnumber of cycles it takes to readout, scramble and digest the entire OTP array. Since this amounts to\nrughly 25k cycles, it is recommended to set this value to at least 100'000 cycles in order to stay on the\nsafe side. A value of zer disables the timeout mechanism (default)."; + reset = 0x0; + } [31:0]; + } CHECK_TIMEOUT @ 0x60; + + reg { + desc = "This value specifies the maximum period that can be generated pseudo-randomly.\nOnly applies to the HW_CFG* and SECRET* partitions once they are locked."; + sw = rw; + hw = r; + prperty { + name = "write_prtect"; + value = "CHECK_REGWEN[0] == 1"; // Write allowed only if CHECK_REGWEN[0] is 1 + }; + field { + desc = "The pseudo-random period is generated using a 40bit LFSR internally, and this register defines\nthe bit mask to be applied to the LFSR output in order to limit its range. The value of this\nregister is left shifted by 8bits and the lower bits are set to 8'hFF in order to form the 40bit mask.\nA recommended value is 0x3_FFFF, corresponding to a maximum period of ~2.8s at 24MHz.\nA value of zer disables the timer (default). Note that a one-off check can always be triggered via\n!!CHECK_TRIGGER.INTEGRITY."; + reset = 0x0; + } [31:0]; + } INTEGRITY_CHECK_PERIOD @ 0x64; + + reg { + desc = "This value specifies the maximum period that can be generated pseudo-randomly.\nThis applies to the LIFE_CYCLE partition and the HW_CFG* and SECRET* partitions once they are locked."; + sw = rw; + hw = r; + prperty { + name = "write_prtect"; + value = "CHECK_REGWEN[0] == 1"; // Write allowed only if CHECK_REGWEN[0] is 1 + }; + field { + desc = "The pseudo-random period is generated using a 40bit LFSR internally, and this register defines\nthe bit mask to be applied to the LFSR output in order to limit its range. The value of this\nregister is left shifted by 8bits and the lower bits are set to 8'hFF in order to form the 40bit mask.\nA recommended value is 0x3FF_FFFF, corresponding to a maximum period of ~716s at 24MHz.\nA value of zer disables the timer (default). Note that a one-off check can always be triggered via\n!!CHECK_TRIGGER.CONSISTENCY."; + reset = 0x0; + } [31:0]; + } CONSISTENCY_CHECK_PERIOD @ 0x68; + + reg { + desc = "Runtime read lock for the VENDOR_TEST partition."; + sw = rw; + onwrite = wzclr; + hw = r; + prperty { + name = "write_prtect"; + value = "DIRECT_ACCESS_REGWEN[0] == 1"; // Write allowed only if DIRECT_ACCESS_REGWEN[0] is 1 + }; + field { + desc = "When cleared to 0, read access to the VENDOR_TEST partition is locked.\nWrite 0 to clear this bit."; + reset = 0x1; + } [0:0]; + } VENDOR_TEST_READ_LOCK @ 0x6C; + + reg { + desc = "Runtime read lock for the NON_SECRET_FUSES partition."; + sw = rw; + onwrite = wzclr; + hw = r; + prperty { + name = "write_prtect"; + value = "DIRECT_ACCESS_REGWEN[0] == 1"; // Write allowed only if DIRECT_ACCESS_REGWEN[0] is 1 + }; + field { + desc = "When cleared to 0, read access to the NON_SECRET_FUSES_READ_LOCK partition is locked.\nWrite 0 to clear this bit."; + reset = 0x1; + } [0:0]; + } NON_SECRET_FUSES_READ_LOCK @ 0x70; + + regfile digest_t { + /* ----------------------------------- + * Default prperties for Register File + * --------------------------------- */ + name = "DIGEST"; + desc = "Digest register block"; + reset = 0x0; + + default sw = r; + default hw = r; + default hwext = true; + + /* ------------------------------------ + * Register definitions + * -----------------------------------*/ + reg digest_reg_t { + name = "DIGEST"; + desc = "Integrity digest for partition.\n The integrity digest is 0 by default. Software must write this\n digest value via the direct access interface in order to lock the partition.\n After a reset, write access to the VENDOR_TEST partition is locked and\n the digest becomes visible in this CSR.\n"; + + default sw = r; // field prperty + default hw = hwo; // field prperty + + field { desc = "Digest.";} [31:0]; + }; + + /* ------------- Registers --------------*/ + dai_rdata_t DIGEST_0 @ 0x0; // + dai_rdata_t DIGEST_1 @ 0x4; // + /* --------------------------------------*/ + }; + + digest_t VENDOR_TEST_DIGEST @ 0x74; + digest_t NON_SECRET_FUSES_DIGEST @ 0x7C; + + regfile secret_digest_t { + /* ----------------------------------- + * Default prperties for Register File + * --------------------------------- */ + name = "SECRET_DIGEST"; + desc = "Secret digest register block"; + reset = 0x0; + + default sw = r; + default hw = r; + default hwext = true; + + /* ------------------------------------ + * Register definitions + * -----------------------------------*/ + reg secret_digest_reg_t { + name = "SECRET_DIGEST"; + desc = "Integrity digest for secret partition.\n The integrity digest is 0 by default. The digest calculation can be triggered via the !!DIRECT_ACCESS_CMD.\n After a reset, the digest then becomes visible in this CSR, and the corresponding partition becomes write-locked.\n"; + + default sw = r; // field prperty + default hw = hwo; // field prperty + + field { desc = "Digest.";} [31:0]; + }; + + /* ------------- Registers --------------*/ + dai_rdata_t DIGEST_0 @ 0x0; // + dai_rdata_t DIGEST_1 @ 0x4; // + /* --------------------------------------*/ + }; + + secret_digest_t SECRET0_DIGEST @ 0x84; + secret_digest_t SECRET1_DIGEST @ 0x8C; + secret_digest_t SECRET2_DIGEST @ 0x94; + secret_digest_t SECRET3_DIGEST @ 0x9C; + + reg { + field { + desc = ""; + sw = rw; + hw = r; + } field0[0:0] = 0x0; + field { + desc = ""; + sw = rw; + hw = r; + } field1[1:1] = 0x0; + field { + desc = ""; + sw = rw; + hw = r; + } field2[2:2] = 0x0; + field { + desc = ""; + sw = rw; + hw = r; + } field3[13:4] = 0x0; + field { + desc = ""; + sw = rw; + hw = r; + } field4[26:16] = 0x0; + } CSR0 @ 0xA4; + + reg { + field { + desc = ""; + sw = rw; + hw = r; + } field0[6:0] = 0x0; + field { + desc = ""; + sw = rw; + hw = r; + } field1[7:7] = 0x0; + field { + desc = ""; + sw = rw; + hw = r; + } field2[14:8] = 0x0; + field { + desc = ""; + sw = rw; + hw = r; + } field3[15:15] = 0x0; + field { + desc = ""; + sw = rw; + hw = r; + } field4[31:16] = 0x0; + } CSR1 @ 0xA8; + + reg { + field { + desc = ""; + sw = rw; + hw = r; + } field0[0:0] = 0x0; + } CSR2 @ 0xAC; + + reg { + field { + desc = ""; + sw = rw; + hw = rw; + } field0[2:0] = 0x0; + field { + desc = ""; + sw = rw; + onwrite = woclr; + hw = rw; + } field1[13:4] = 0x0; + field { + desc = ""; + sw = rw; + onwrite = woclr; + hw = rw; + } field2[16:16] = 0x0; + field { + desc = ""; + sw = r; + hw = rw; + } field3[17:17] = 0x0; + field { + desc = ""; + sw = r; + hw = rw; + } field4[18:18] = 0x0; + field { + desc = ""; + sw = r; + hw = rw; + } field5[19:19] = 0x0; + field { + desc = ""; + sw = r; + hw = rw; + } field6[20:20] = 0x0; + field { + desc = ""; + sw = r; + hw = rw; + } field7[21:21] = 0x0; + field { + desc = ""; + sw = r; + hw = rw; + } field8[22:22] = 0x0; + } CSR3 @ 0xB0; + + reg { + field { + desc = ""; + sw = rw; + hw = r; + } field0[9:0] = 0x0; + field { + desc = ""; + sw = rw; + hw = r; + } field1[12:12] = 0x0; + field { + desc = ""; + sw = rw; + hw = r; + } field2[13:13] = 0x0; + field { + desc = ""; + sw = rw; + hw = r; + } field3[14:14] = 0x0; + } CSR4 @ 0xB4; + + reg { + field { + desc = ""; + sw = rw; + hw = rw; + } field0[5:0] = 0x0; + field { + desc = ""; + sw = rw; + hw = rw; + } field1[7:6] = 0x0; + field { + desc = ""; + sw = r; + hw = rw; + } field2[8] = 0x0; + field { + desc = ""; + sw = r; + hw = rw; + } field3[11:9] = 0x0; + field { + desc = ""; + sw = r; + hw = rw; + } field4[12] = 0x0; + field { + desc = ""; + sw = r; + hw = rw; + } field5[13] = 0x0; + field { + desc = ""; + sw = rw; + hw = rw; + } field6[31:16] = 0x0; + } CSR5 @ 0xB8; + + reg { + field { + desc = ""; + sw = rw; + hw = r; + } field0[9:0] = 0x0; + field { + desc = ""; + sw = rw; + hw = rw; + } field1[11:11] = 0x0; + field { + desc = ""; + sw = rw; + hw = rw; + } field2[12:12] = 0x0; + field { + desc = ""; + sw = rw; + hw = rw; + } field3[31:16] = 0x0; + } CSR6 @ 0xBC; + + reg { + field { + desc = ""; + sw = r; + hw = rw; + } field0[5:0] = 0x0; + field { + desc = ""; + sw = r; + hw = rw; + } field1[10:8] = 0x0; + field { + desc = ""; + sw = r; + hw = rw; + } field2[14:14] = 0x0; + field { + desc = ""; + sw = r; + hw = rw; + } field3[15:15] = 0x0; + } CSR7 @ 0xC0; +}; \ No newline at end of file From e671e116bb9b76331c93496ed2f9633a084cd66f Mon Sep 17 00:00:00 2001 From: Anjana Parthasarathy Date: Mon, 4 Nov 2024 12:23:00 -0800 Subject: [PATCH 58/58] Otp_ctrl RDL file --- src/fuse_ctrl/data/otp_ctrl.rdl | 360 ++++++++++++++++---------------- 1 file changed, 180 insertions(+), 180 deletions(-) diff --git a/src/fuse_ctrl/data/otp_ctrl.rdl b/src/fuse_ctrl/data/otp_ctrl.rdl index 9dc9a9f19..686037d8e 100644 --- a/src/fuse_ctrl/data/otp_ctrl.rdl +++ b/src/fuse_ctrl/data/otp_ctrl.rdl @@ -16,7 +16,7 @@ //////////////////////////////////////////////////////////////// // Fuse Contrller Registers -parameter int OtpByteAddrWidth = 12; +//parameter int OtpByteAddrWidth = 12; addrmap caliptra_otp_ctrl { reg { @@ -28,8 +28,8 @@ addrmap caliptra_otp_ctrl { field { sw = rw; onwrite = woclr; - desc = "An errr has occurred in the OTP contrller. Check the !!ERR_CODE register to get more information."; - } OTP_ERrR[1:1]; + desc = "An error has occurred in the OTP contrller. Check the !!ERR_CODE register to get more information."; + } OTP_error[1:1]; } INTERRUPT_STATE @ 0x0; reg { @@ -41,8 +41,8 @@ addrmap caliptra_otp_ctrl { field { sw = rw; onwrite = woclr; - desc = "Enable interrupt when otp_errr is set."; - } OTP_ERrR[1:1]; + desc = "Enable interrupt when otp_error is set."; + } OTP_error[1:1]; } INTERRUPT_ENABLE @ 0x4; reg { @@ -52,23 +52,23 @@ addrmap caliptra_otp_ctrl { } OTP_OPERATION_DONE[0:0]; field { sw = w; - desc = "Write 1 to force otp_errr to 1."; - } OTP_ERrR[1:1]; + desc = "Write 1 to force otp_error to 1."; + } OTP_error[1:1]; } INTERRUPT_TEST @ 0x8; reg { field { sw = w; desc = "Write 1 to trigger one alert event of this kind."; - } FATAL_MACr_ERrR[0:0]; + } FATAL_MACr_error[0:0]; field { sw = w; desc = "Write 1 to trigger one alert event of this kind."; - } FATAL_CHECK_ERrR[1:1]; + } FATAL_CHECK_error[1:1]; field { sw = w; desc = "Write 1 to trigger one alert event of this kind."; - } FATAL_BUS_INTEG_ERrR[2:2]; + } FATAL_BUS_INTEG_error[2:2]; field { sw = w; desc = "Write 1 to trigger one alert event of this kind."; @@ -82,60 +82,60 @@ addrmap caliptra_otp_ctrl { reg { field { sw = r; - desc = "Set to 1 if an errr occurred in this partition.\nIf set to 1, SW should check the !!ERR_CODE register at the corresponding index."; - } VENDOR_TEST_ERrR[0:0]; + desc = "Set to 1 if an error occurred in this partition.\nIf set to 1, SW should check the !!ERR_CODE register at the corresponding index."; + } VENDOR_TEST_error[0:0]; field { sw = r; - desc = Set to 1 if an errr occurred in this partition.\nIf set to 1, SW should check the !!ERR_CODE register at the corresponding index."; - } NON_SECRET_FUSES_ERrR[1:1]; + desc = "Set to 1 if an error occurred in this partition.\nIf set to 1, SW should check the !!ERR_CODE register at the corresponding index."; + } NON_SECRET_FUSES_error[1:1]; field { sw = r; - desc = "Set to 1 if an errr occurred in this partition.\nIf set to 1, SW should check the !!ERR_CODE register at the corresponding index."; - } SECRET0_ERrR[2:2]; + desc = "Set to 1 if an error occurred in this partition.\nIf set to 1, SW should check the !!ERR_CODE register at the corresponding index."; + } SECRET0_error[2:2]; field { sw = r; - desc = "Set to 1 if an errr occurred in this partition.\nIf set to 1, SW should check the !!ERR_CODE register at the corresponding index."; - } SECRET1_ERrR[3:3]; + desc = "Set to 1 if an error occurred in this partition.\nIf set to 1, SW should check the !!ERR_CODE register at the corresponding index."; + } SECRET1_error[3:3]; field { sw = r; - desc = "Set to 1 if an errr occurred in this partition.\nIf set to 1, SW should check the !!ERR_CODE register at the corresponding index."; - } SECRET2_ERrR[4:4]; + desc = "Set to 1 if an error occurred in this partition.\nIf set to 1, SW should check the !!ERR_CODE register at the corresponding index."; + } SECRET2_error[4:4]; field { sw = r; - desc = "Set to 1 if an errr occurred in this partition.\nIf set to 1, SW should check the !!ERR_CODE register at the corresponding index."; - } SECRET3_ERrR[5:5]; + desc = "Set to 1 if an error occurred in this partition.\nIf set to 1, SW should check the !!ERR_CODE register at the corresponding index."; + } SECRET3_error[5:5]; field { sw = r; - desc = "Set to 1 if an errr occurred in this partition.\nIf set to 1, SW should check the !!ERR_CODE register at the corresponding index."; - } LIFE_CYCLE_ERrR[6:6]; + desc = "Set to 1 if an error occurred in this partition.\nIf set to 1, SW should check the !!ERR_CODE register at the corresponding index."; + } LIFE_CYCLE_error[6:6]; field { sw = r; - desc = "Set to 1 if an errr occurred in the DAI.\nIf set to 1, SW should check the !!ERR_CODE register at the corresponding index."; - } DAI_ERrR[7:7]; + desc = "Set to 1 if an error occurred in the DAI.\nIf set to 1, SW should check the !!ERR_CODE register at the corresponding index."; + } DAI_error[7:7]; field { sw = r; - desc = "Set to 1 if an errr occurred in the LCI.\nIf set to 1, SW should check the !!ERR_CODE register at the corresponding index."; - } LCI_ERrR[8:8]; + desc = "Set to 1 if an error occurred in the LCI.\nIf set to 1, SW should check the !!ERR_CODE register at the corresponding index."; + } LCI_error[8:8]; field { sw = r; - desc = "Set to 1 if an integrity or consistency check times out.\nThis raises an fatal_check_errr alert and is an unrecoverable errr condition."; - } TIMEOUT_ERrR[9:9]; + desc = "Set to 1 if an integrity or consistency check times out.\nThis raises an fatal_check_error alert and is an unrecoverable error condition."; + } TIMEOUT_error[9:9]; field { sw = r; - desc = "Set to 1 if the LFSR timer FSM has reached an invalid state.\nThis raises an fatal_check_errr alert and is an unrecoverable errr condition."; - } LFSR_FSM_ERrR[10:10]; + desc = "Set to 1 if the LFSR timer FSM has reached an invalid state.\nThis raises an fatal_check_error alert and is an unrecoverable error condition."; + } LFSR_FSM_error[10:10]; field { sw = r; - desc = "Set to 1 if the scrambling datapath FSM has reached an invalid state.\nThis raises an fatal_check_errr alert and is an unrecoverable errr condition."; - } SCRAMBLING_FSM_ERrR[11:11]; + desc = "Set to 1 if the scrambling datapath FSM has reached an invalid state.\nThis raises an fatal_check_error alert and is an unrecoverable error condition."; + } SCRAMBLING_FSM_error[11:11]; field { sw = r; - desc = "Set to 1 if the key derivation FSM has reached an invalid state.\nThis raises an fatal_check_errr alert and is an unrecoverable errr condition."; - } KEY_DERIV_FSM_ERrR[12:12]; + desc = "Set to 1 if the key derivation FSM has reached an invalid state.\nThis raises an fatal_check_error alert and is an unrecoverable error condition."; + } KEY_DERIV_FSM_error[12:12]; field { sw = r; - desc = "This bit is set to 1 if a fatal bus integrity fault is detected.\nThis errr triggers a fatal_bus_integ_errr alert."; - } BUS_INTEG_ERrR[13:13]; + desc = "This bit is set to 1 if a fatal bus integrity fault is detected.\nThis error triggers a fatal_bus_integ_error alert."; + } BUS_INTEG_error[13:13]; field { sw = r; desc = "Set to 1 if the DAI is idle and ready to accept commands."; @@ -152,33 +152,39 @@ addrmap caliptra_otp_ctrl { * Default prperties for Register File * --------------------------------- */ - name = "Errr Code Register Block"; - desc = "Set of registers to implement errr_code functionality - for Fuse Contrller. + name = "error Code Register Block"; + desc = "Set of registers to implement error_code functionality + for Fuse Contrller."; - default regwidth = 32; // reg prperty - default accesswidth = 32; // reg prperty - default sw = r; // field prperty - default hw = hwo; // field prperty + default regwidth = 32; // reg property + default accesswidth = 32; // reg property + default sw = r; // field property + default hw = w; // field property /* ------------------------------------ * Register definitions * -----------------------------------*/ reg err_code_reg_t { - name = "ERR_CODE"; - desc = "This register holds information about errr conditions that occurred in the agents\ninteracting with the OTP macr via the internal bus. The errr codes should be checked\nif the partitions, DAI or LCI flag an errr in the !!STATUS register, or when an\n!!INTR_STATE.otp_errr has been triggered. Note that all errrs trigger an otp_errr\ninterrupt, and in addition some errrs may trigger either an fatal_macr_errr or an\nfatal_check_errr alert."; - - default sw = r; // field prperty - default hw = hwo; // field prperty - - field { desc = "No errr condition has occurred.";} NO_ERrR = 3'h0; - field { desc = "Returned if the OTP macr command was invalid or did not complete successfully\ndue to a macr malfunction.\nThis errr should never occur during normal operation and is not recoverable.\nThis errr triggers an fatal_macr_errr alert.";} MACr_ERrR = 3'h1; - field { desc = "A correctable ECC errr has occured during an OTP read operation.\nThe corresponding contrller automatically recovers frm this errr when\nissuing a new command.";} MACr_ECC_CORR_ERrR = 3'h2; - field { desc = "An uncorrectable ECC errr has occurred during an OTP read operation.\nThis errr should never occur during normal operation and is not recoverable.\nIf this errr is present this may be a sign that the device is malfunctioning.\nThis errr triggers an fatal_macr_errr alert.";} MACr_ECC_UNCORR_ERrR = 3'h3; - field { desc = "This errr is returned if a prgramming operation attempted to clear a bit that has previously been prgrammed to 1.\nThe corresponding contrller automatically recovers frm this errr when issuing a new command.\n\nNote however that the affected OTP word may be left in an inconsistent state if this errr occurs.\nThis can cause several issues when the word is accessed again (either as part of a regular read operation, as part of the readout at boot, or as part of a backgrund check).\n\nIt is important that SW ensures that each word is only written once, since this can render the device useless.";} MACr_WRITE_BLANK_ERrR = 3'h4; - field { desc = "This errr indicates that a locked memory region has been accessed.\nThe corresponding contrller automatically recovers frm this errr when issuing a new command.";} ACCESS_ERrR = 3'h5; - field { desc = "An ECC, integrity or consistency mismatch has been detected in the buffer registers.\nThis errr should never occur during normal operation and is not recoverable.\nThis errr triggers an fatal_check_errr alert.";} CHECK_FAIL_ERrR = 3'h6; - field { desc = "The FSM of the corresponding contrller has reached an invalid state, or the FSM has\nbeen moved into a terminal errr state due to an escalation action via lc_escalate_en_i.\nThis errr should never occur during normal operation and is not recoverable.\nIf this errr is present, this is a sign that the device has fallen victim to\nan invasive attack. This errr triggers an fatal_check_errr alert.";} FSM_STATE_ERrR = 3'h7; + desc = "This register holds information about error conditions that occurred in the agents + interacting with the OTP macr via the internal bus. The error codes should be checked + if the partitions, DAI or LCI flag an error in the !!STATUS register, or when an + !!INTR_STATE.otp_error has been triggered. Note that all errors trigger an otp_error + interrupt, and in addition some errors may trigger either an fatal_macr_error or an + fatal_check_error alert."; + + default sw = r; // field property + default hw = w; // field property + + field { desc = "No error condition has occurred.";} NO_error = 3'h0; + field { desc = "Returned if the OTP macr command was invalid or did not complete successfully + due to a macr malfunction. This error should never occur during normal operation and is not recoverable. + This error triggers an fatal_macr_error alert.";} MACr_error = 3'h1; + field { desc = "A correctable ECC error has occured during an OTP read operation.\nThe corresponding contrller automatically recovers frm this error when\nissuing a new command.";} MACr_ECC_CORR_error = 3'h2; + field { desc = "An uncorrectable ECC error has occurred during an OTP read operation.\nThis error should never occur during normal operation and is not recoverable.\nIf this error is present this may be a sign that the device is malfunctioning.\nThis error triggers an fatal_macr_error alert.";} MACr_ECC_UNCORR_error = 3'h3; + field { desc = "This error is returned if a prgramming operation attempted to clear a bit that has previously been prgrammed to 1.\nThe corresponding contrller automatically recovers frm this error when issuing a new command.\n\nNote however that the affected OTP word may be left in an inconsistent state if this error occurs.\nThis can cause several issues when the word is accessed again (either as part of a regular read operation, as part of the readout at boot, or as part of a backgrund check).\n\nIt is important that SW ensures that each word is only written once, since this can render the device useless.";} MACr_WRITE_BLANK_error = 3'h4; + field { desc = "This error indicates that a locked memory region has been accessed.\nThe corresponding contrller automatically recovers frm this error when issuing a new command.";} ACCESS_error = 3'h5; + field { desc = "An ECC, integrity or consistency mismatch has been detected in the buffer registers.\nThis error should never occur during normal operation and is not recoverable.\nThis error triggers an fatal_check_error alert.";} CHECK_FAIL_error = 3'h6; + field { desc = "The FSM of the corresponding contrller has reached an invalid state, or the FSM has\nbeen moved into a terminal error state due to an escalation action via lc_escalate_en_i.\nThis error should never occur during normal operation and is not recoverable.\nIf this error is present, this is a sign that the device has fallen victim to\nan invasive attack. This error triggers an fatal_check_error alert.";} FSM_STATE_error = 3'h7; }; /* ----------- Registers -----------*/ @@ -198,27 +204,24 @@ addrmap caliptra_otp_ctrl { reg { desc = "Register write enable for all direct access interface registers."; - sw = rw; - onwrite = wzclr; - hw = rw; - hwext = true; + default sw = rw; + default onwrite = wzc; + default hw = rw; + //default hwext = true; field { desc = "This bit contrls whether the DAI registers can be written.\nWrite 0 to it in order to clear the bit.\n\nNote that the hardware also modulates this bit and sets it to 0 temporarily\nduring an OTP operation such that the corresponding address and data registers\ncannot be modified while an operation is pending. The !!DAI_IDLE status bit\nwill also be set to 0 in such a case."; reset = 0x1; - } [0:0]; + } REGWEN [0:0]; } DIRECT_ACCESS_REGWEN @ 0x38; reg { desc = "Command register for direct accesses."; - sw = w; - onwrite = woclr; - hw = r; - hwext = true; - reset = 0x0; - prperty { - name = "write_prtect"; - value = "DIRECT_ACCESS_REGWEN[0] == 1"; // Write allowed only if DIRECT_ACCESS_REGWEN[0] is 1 - }; + default sw = w; + default onwrite = wzc; + default hw = r; + //hwext = true; + default reset = 0x0; + default swwe = DIRECT_ACCESS_REGWEN; field { desc = "Initiates a readout sequence that reads the location specified\nby !!DIRECT_ACCESS_ADDRESS. The command places the data read into\n!!DIRECT_ACCESS_RDATA_0 and !!DIRECT_ACCESS_RDATA_1 (for 64bit partitions)."; } RD [0:0]; @@ -232,16 +235,13 @@ addrmap caliptra_otp_ctrl { reg { desc = "Address register for direct accesses."; - sw = rw; - hw = r; - reset = 0x0; - prperty { - name = "write_prtect"; - value = "DIRECT_ACCESS_REGWEN[0] == 1"; // Write allowed only if DIRECT_ACCESS_REGWEN[0] is 1 - }; + default sw = rw; + default hw = r; + default reset = 0x0; + default swwe = DIRECT_ACCESS_REGWEN; field { desc = "This is the address for the OTP word to be read or written thrugh\nthe direct access interface. Note that the address is aligned to the access size\ninternally, hence bits 1:0 are ignored for 32bit accesses, and bits 2:0 are ignored\nfor 64bit accesses.\n\nFor the digest calculation command, set this register to the partition base offset."; - } [OtpByteAddrWidth-1:0]; + } ADDRESS [11:0]; } DIRECT_ACCESS_ADDRESS @ 0x40; regfile dir_acc_wdata_t { @@ -251,30 +251,27 @@ addrmap caliptra_otp_ctrl { name = "Direct Access Wdata Register Block"; desc = "Set of registers to implement wdata functionality - for Fuse Contrller. - reset = 0x0; - prperty { - name = "write_prtect"; - value = "DIRECT_ACCESS_REGWEN[0] == 1"; // Write allowed only if DIRECT_ACCESS_REGWEN[0] is 1 - }; - - default regwidth = 32; // reg prperty - default accesswidth = 32; // reg prperty - default sw = r; // field prperty - default hw = hwo; // field prperty - defalt hwext = true; + for Fuse Contrller."; + default reset = 0x0; + default swwe = DIRECT_ACCESS_REGWEN; + default regwidth = 32; // reg property + default accesswidth = 32; // reg property + default sw = r; // field property + default hw = w; // field property + //defalt hwext = true; /* ------------------------------------ * Register definitions * -----------------------------------*/ reg dai_wdata_t { - name = "DIRECT_ACCESS_WDATA"; - desc = "Write data for direct accesses.\n Hardware automatically determines the access granule (32bit or 64bit) based on which\n partition is being written to.\n"; + desc = "Write data for direct accesses. + Hardware automatically determines the access granule (32bit or 64bit) based on which + partition is being written to."; default sw = r; // field prperty - default hw = hwo; // field prperty + default hw = w; // field prperty - field { desc = "wdata.";} [31:0]; + field { desc = "wdata.";} WDATA [31:0]; }; /* ------------- Registers --------------*/ @@ -292,26 +289,27 @@ addrmap caliptra_otp_ctrl { name = "Direct Access Wdata Register Block"; desc = "Set of registers to implement wdata functionality - for Fuse Contrller. - reset = 0x0; + for Fuse Contrller."; + default reset = 0x0; default regwidth = 32; // reg prperty default accesswidth = 32; // reg prperty default sw = r; // field prperty - default hw = hwo; // field prperty - default hwext = true; + default hw = w; // field prperty + //default hwext = true; /* ------------------------------------ * Register definitions * -----------------------------------*/ reg dai_rdata_t { - name = "DIRECT_ACCESS_RDATA"; - desc = "Read data for direct accesses.\n Hardware automatically determines the access granule (32bit or 64bit) based on which\n partition is read frm.\n"; + desc = "Read data for direct accesses. + Hardware automatically determines the access granule (32bit or 64bit) based on which + partition is read from."; default sw = r; // field prperty - default hw = hwo; // field prperty + default hw = w; // field prperty - field { desc = "rdata.";} [31:0]; + field { desc = "rdata.";} RDATA [31:0]; }; /* ------------- Registers --------------*/ @@ -324,114 +322,111 @@ addrmap caliptra_otp_ctrl { reg { desc = "Register write enable for !!CHECK_TRIGGER."; - sw = rw; - onwrite = wzclr; - hw = na; + default sw = rw; + default onwrite = wzc; + default hw = na; field { - desc = "When cleared to 0, the !!CHECK_TRIGGER register cannot be written anymore.\nWrite 0 to clear this bit."; + desc = "When cleared to 0, the !!CHECK_TRIGGER register cannot be written anymore. + Write 0 to clear this bit."; reset = 0x1; - } [0:0]; + } REGWEN [0:0]; } CHECK_TRIGGER_REGWEN @ 0x54; reg { desc = "Command register for direct accesses."; - sw = w1c; - hw = r0; - hwext = true; - reset = 0x0; - prperty { - name = "write_prtect"; - value = "CHECK_TRIGGER_REGWEN[0] == 1"; // Write allowed only if CHECK_TRIGGER_REGWEN[0] is 1 - }; - field { - desc = "Writing 1 to this bit triggers an integrity check. SW should monitor !!STATUS.CHECK_PENDING\nand wait until the check has been completed. If there are any errrs, those will be flagged\nin the !!STATUS and !!ERR_CODE registers, and via the interrupts and alerts."; + default sw = w; + default onwrite = woclr; + default hw = r; // Needs to read 0 + //hwext = true; + default reset = 0x0; + default swwe = CHECK_TRIGGER_REGWEN; + field { + desc = "Writing 1 to this bit triggers an integrity check. SW should monitor !!STATUS.CHECK_PENDING + and wait until the check has been completed. If there are any errors, those will be flagged + in the !!STATUS and !!ERR_CODE registers, and via the interrupts and alerts."; } INTEGRITY[0:0]; field { - desc = "Writing 1 to this bit triggers a consistency check. SW should monitor !!STATUS.CHECK_PENDING\nand wait until the check has been completed. If there are any errrs, those will be flagged\nin the !!STATUS and !!ERR_CODE registers, and via interrupts and alerts."; + desc = "Writing 1 to this bit triggers a consistency check. SW should monitor !!STATUS.CHECK_PENDING\nand wait until the check has been completed. If there are any errors, those will be flagged\nin the !!STATUS and !!ERR_CODE registers, and via interrupts and alerts."; } CONSISTENCY[1:1]; } CHECK_TRIGGER @ 0x58; reg { desc = "Register write enable for !!INTEGRITY_CHECK_PERIOD and !!CONSISTENCY_CHECK_PERIOD."; - sw = w; - onwrite = wzclr; - hw = na; + default sw = w; + default onwrite = wzc; + default hw = na; field { desc = "When cleared to 0, !!INTEGRITY_CHECK_PERIOD and !!CONSISTENCY_CHECK_PERIOD registers cannot be written anymore.\nWrite 0 to clear this bit."; reset = 0x1; - } [0:0]; + } REGWEN [0:0]; } CHECK_REGWEN @ 0x5C; reg { desc = "Timeout value for the integrity and consistency checks."; - sw = rw; - hw = r; - prperty { - name = "write_prtect"; - value = "CHECK_REGWEN[0] == 1"; // Write allowed only if CHECK_REGWEN[0] is 1 - }; - field { - desc = "Timeout value in cycles for the for the integrity and consistency checks. If an integrity or consistency\ncheck does not complete within the timeout window, an errr will be flagged in the !!STATUS register,\nan otp_errr interrupt will be raised, and an fatal_check_errr alert will be sent out. The timeout should\nbe set to a large value to stay on the safe side. The maximum check time can be upper bounded by the\nnumber of cycles it takes to readout, scramble and digest the entire OTP array. Since this amounts to\nrughly 25k cycles, it is recommended to set this value to at least 100'000 cycles in order to stay on the\nsafe side. A value of zer disables the timeout mechanism (default)."; + default sw = rw; + default hw = r; + default swwe = CHECK_REGWEN; + field { + desc = "Timeout value in cycles for the for the integrity and consistency checks. If an integrity or consistency + check does not complete within the timeout window, an error will be flagged in the !!STATUS register, + an otp_error interrupt will be raised, and an fatal_check_error alert will be sent out. The timeout should + be set to a large value to stay on the safe side. The maximum check time can be upper bounded by the + number of cycles it takes to readout, scramble and digest the entire OTP array. Since this amounts to + rughly 25k cycles, it is recommended to set this value to at least 100'000 cycles in order to stay on the + safe side. A value of zer disables the timeout mechanism (default)."; reset = 0x0; - } [31:0]; + } TIMEOUT [31:0]; } CHECK_TIMEOUT @ 0x60; reg { desc = "This value specifies the maximum period that can be generated pseudo-randomly.\nOnly applies to the HW_CFG* and SECRET* partitions once they are locked."; - sw = rw; - hw = r; - prperty { - name = "write_prtect"; - value = "CHECK_REGWEN[0] == 1"; // Write allowed only if CHECK_REGWEN[0] is 1 - }; - field { - desc = "The pseudo-random period is generated using a 40bit LFSR internally, and this register defines\nthe bit mask to be applied to the LFSR output in order to limit its range. The value of this\nregister is left shifted by 8bits and the lower bits are set to 8'hFF in order to form the 40bit mask.\nA recommended value is 0x3_FFFF, corresponding to a maximum period of ~2.8s at 24MHz.\nA value of zer disables the timer (default). Note that a one-off check can always be triggered via\n!!CHECK_TRIGGER.INTEGRITY."; + default sw = rw; + default hw = r; + default swwe = CHECK_REGWEN; + field { + desc = "The pseudo-random period is generated using a 40bit LFSR internally, and this register defines + the bit mask to be applied to the LFSR output in order to limit its range. The value of this + register is left shifted by 8bits and the lower bits are set to 8'hFF in order to form the 40bit mask. + A recommended value is 0x3_FFFF, corresponding to a maximum period of ~2.8s at 24MHz. + A value of zer disables the timer (default). Note that a one-off check can always be triggered via + !!CHECK_TRIGGER.INTEGRITY."; reset = 0x0; - } [31:0]; + } PERIOD [31:0]; } INTEGRITY_CHECK_PERIOD @ 0x64; reg { desc = "This value specifies the maximum period that can be generated pseudo-randomly.\nThis applies to the LIFE_CYCLE partition and the HW_CFG* and SECRET* partitions once they are locked."; - sw = rw; - hw = r; - prperty { - name = "write_prtect"; - value = "CHECK_REGWEN[0] == 1"; // Write allowed only if CHECK_REGWEN[0] is 1 - }; + default sw = rw; + default hw = r; + default swwe = CHECK_REGWEN; field { desc = "The pseudo-random period is generated using a 40bit LFSR internally, and this register defines\nthe bit mask to be applied to the LFSR output in order to limit its range. The value of this\nregister is left shifted by 8bits and the lower bits are set to 8'hFF in order to form the 40bit mask.\nA recommended value is 0x3FF_FFFF, corresponding to a maximum period of ~716s at 24MHz.\nA value of zer disables the timer (default). Note that a one-off check can always be triggered via\n!!CHECK_TRIGGER.CONSISTENCY."; reset = 0x0; - } [31:0]; + } PERIOD [31:0]; } CONSISTENCY_CHECK_PERIOD @ 0x68; reg { desc = "Runtime read lock for the VENDOR_TEST partition."; - sw = rw; - onwrite = wzclr; - hw = r; - prperty { - name = "write_prtect"; - value = "DIRECT_ACCESS_REGWEN[0] == 1"; // Write allowed only if DIRECT_ACCESS_REGWEN[0] is 1 - }; + default sw = rw; + default onwrite = wzc; + default hw = r; + default swwe = DIRECT_ACCESS_REGWEN; field { desc = "When cleared to 0, read access to the VENDOR_TEST partition is locked.\nWrite 0 to clear this bit."; reset = 0x1; - } [0:0]; + } READ_LOCK [0:0]; } VENDOR_TEST_READ_LOCK @ 0x6C; reg { desc = "Runtime read lock for the NON_SECRET_FUSES partition."; - sw = rw; - onwrite = wzclr; - hw = r; - prperty { - name = "write_prtect"; - value = "DIRECT_ACCESS_REGWEN[0] == 1"; // Write allowed only if DIRECT_ACCESS_REGWEN[0] is 1 - }; + default sw = rw; + default onwrite = wzc; + default hw = r; + default swwe = DIRECT_ACCESS_REGWEN; field { desc = "When cleared to 0, read access to the NON_SECRET_FUSES_READ_LOCK partition is locked.\nWrite 0 to clear this bit."; reset = 0x1; - } [0:0]; + } READ_LOCK [0:0]; } NON_SECRET_FUSES_READ_LOCK @ 0x70; regfile digest_t { @@ -440,28 +435,31 @@ addrmap caliptra_otp_ctrl { * --------------------------------- */ name = "DIGEST"; desc = "Digest register block"; - reset = 0x0; + default reset = 0x0; default sw = r; default hw = r; - default hwext = true; + //default hwext = true; /* ------------------------------------ * Register definitions * -----------------------------------*/ reg digest_reg_t { name = "DIGEST"; - desc = "Integrity digest for partition.\n The integrity digest is 0 by default. Software must write this\n digest value via the direct access interface in order to lock the partition.\n After a reset, write access to the VENDOR_TEST partition is locked and\n the digest becomes visible in this CSR.\n"; + desc = "Integrity digest for partition. + The integrity digest is 0 by default. Software must write this + digest value via the direct access interface in order to lock the partition. + After a reset, write access to the VENDOR_TEST partition is locked and\n the digest becomes visible in this CSR."; default sw = r; // field prperty - default hw = hwo; // field prperty + default hw = w; // field prperty - field { desc = "Digest.";} [31:0]; + field { desc = "Digest.";} DIGEST [31:0]; }; /* ------------- Registers --------------*/ - dai_rdata_t DIGEST_0 @ 0x0; // - dai_rdata_t DIGEST_1 @ 0x4; // + digest_reg_t DIGEST_0 @ 0x0; // + digest_reg_t DIGEST_1 @ 0x4; // /* --------------------------------------*/ }; @@ -474,28 +472,30 @@ addrmap caliptra_otp_ctrl { * --------------------------------- */ name = "SECRET_DIGEST"; desc = "Secret digest register block"; - reset = 0x0; + default reset = 0x0; default sw = r; default hw = r; - default hwext = true; + //default hwext = true; /* ------------------------------------ * Register definitions * -----------------------------------*/ reg secret_digest_reg_t { name = "SECRET_DIGEST"; - desc = "Integrity digest for secret partition.\n The integrity digest is 0 by default. The digest calculation can be triggered via the !!DIRECT_ACCESS_CMD.\n After a reset, the digest then becomes visible in this CSR, and the corresponding partition becomes write-locked.\n"; + desc = "Integrity digest for secret partition. + The integrity digest is 0 by default. The digest calculation can be triggered via the !!DIRECT_ACCESS_CMD. + After a reset, the digest then becomes visible in this CSR, and the corresponding partition becomes write-locked."; default sw = r; // field prperty - default hw = hwo; // field prperty + default hw = w; // field prperty - field { desc = "Digest.";} [31:0]; + field { desc = "Digest.";} DIGEST [31:0]; }; /* ------------- Registers --------------*/ - dai_rdata_t DIGEST_0 @ 0x0; // - dai_rdata_t DIGEST_1 @ 0x4; // + secret_digest_reg_t DIGEST_0 @ 0x0; // + secret_digest_reg_t DIGEST_1 @ 0x4; // /* --------------------------------------*/ };